src/main/java/com/ruoyi/production/mapper/ProductWorkOrderMapper.java
@@ -8,8 +8,19 @@ import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.util.Map; @Mapper public interface ProductWorkOrderMapper extends BaseMapper<ProductWorkOrder> { IPage<ProductWorkOrderDto> pageProductWorkOrder(Page<ProductWorkOrderDto> page, @Param("c") ProductWorkOrderDto productWorkOrder); int updatePlanQuantity(Map<String, Object> params); /** * 回滚工单计划数量:从production_product_output取quantity加回plan_quantity * @param productMainId * @return */ int rollbackPlanQuantity(@Param("productMainId") Long productMainId); } src/main/java/com/ruoyi/production/mapper/ProductionProductInputMapper.java
@@ -8,7 +8,14 @@ import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.util.List; @Mapper public interface ProductionProductInputMapper extends BaseMapper<ProductionProductInput> { IPage<ProductionProductInputDto> listPageProductionProductInputDto(Page page, @Param("c") ProductionProductInputDto productionProductInputDto); /** * 根据生产主表ID批量删除投入表数据 */ int deleteByProductMainIds(@Param("productMainIds") List<Long> productMainIds); } src/main/java/com/ruoyi/production/mapper/ProductionProductMainMapper.java
@@ -8,9 +8,15 @@ import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.util.List; @Mapper public interface ProductionProductMainMapper extends BaseMapper<ProductionProductMain> { IPage<ProductionProductMainDto> listPageProductionProductMainDto(Page page, @Param("c") ProductionProductMainDto productionProductMainDto); /** * 根据工单ID批量删除生产主表数据 */ int deleteByWorkOrderIds(@Param("workOrderIds") List<Long> workOrderIds); } src/main/java/com/ruoyi/production/mapper/ProductionProductOutputMapper.java
@@ -8,8 +8,14 @@ import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.util.List; @Mapper public interface ProductionProductOutputMapper extends BaseMapper<ProductionProductOutput> { IPage<ProductionProductOutputDto> listPageProductionProductOutputDto(Page page, @Param("c") ProductionProductOutputDto productionProductOutputDto); /** * 根据生产主表ID批量删除产出表数据 */ int deleteByProductMainIds(@Param("productMainIds") List<Long> productMainIds); } src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
@@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -33,6 +34,7 @@ import java.math.BigDecimal; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -165,12 +167,13 @@ //更新工单 if (insert > 0) { UpdateWrapper<ProductWorkOrder> wrapper = new UpdateWrapper<>(); wrapper.set("report_work", true) .set("quantity", dto.getQuantity()) .set("product_main_id", productionProductMain.getId()) .eq("id", dto.getWorkOrderId()); productWorkOrderMapper.update(null, wrapper); Map<String, Object> params = new HashMap<>(); params.put("quantity", dto.getQuantity()); params.put("productMainId", productionProductMain.getId()); params.put("workOrderId", dto.getWorkOrderId()); params.put("deductQuantity", dto.getQuantity()); productWorkOrderMapper.updatePlanQuantity(params); } ProductProcess productProcess = productProcessMapper.selectById(productProcessRouteItem.getProcessId()); ProductModel productModel = productProcessRouteItem.getProductModelId() != null ? @@ -252,6 +255,8 @@ public Boolean removeProductMain(ProductionProductMainDto dto) { Long id = dto.getId(); // 更新工单 productWorkOrderMapper.rollbackPlanQuantity(id); // 删除质检参数和质检记录 qualityInspectMapper.selectList( new LambdaQueryWrapper<QualityInspect>() @@ -270,9 +275,9 @@ // 删除关联的核算数据 salesLedgerProductionAccountingMapper.delete( new LambdaQueryWrapper<SalesLedgerProductionAccounting>() .eq(SalesLedgerProductionAccounting::getSalesLedgerWorkId, id) ); new LambdaQueryWrapper<SalesLedgerProductionAccounting>() .eq(SalesLedgerProductionAccounting::getSalesLedgerWorkId, id) ); // 删除主表 return productionProductMainMapper.deleteById(id) > 0; src/main/java/com/ruoyi/quality/mapper/QualityInspectMapper.java
@@ -17,4 +17,9 @@ IPage<QualityInspect> qualityInspectListPage(Page page, @Param("qualityInspect") QualityInspect qualityInspect); List<QualityInspect> qualityInspectExport(@Param("qualityInspect") QualityInspect qualityInspect); /** * 根据生产主表ID批量删除过程检验 */ int deleteByProductMainIds(@Param("productMainIds") List<Long> productMainIds); } src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
@@ -23,6 +23,7 @@ import com.ruoyi.production.pojo.*; import com.ruoyi.project.system.domain.SysDept; import com.ruoyi.project.system.mapper.SysDeptMapper; import com.ruoyi.quality.mapper.QualityInspectMapper; import com.ruoyi.sales.dto.MonthlyAmountDto; import com.ruoyi.sales.dto.SalesLedgerDto; import com.ruoyi.sales.mapper.*; @@ -100,6 +101,14 @@ private final ProductProcessRouteItemMapper productProcessRouteItemMapper; private final ProductWorkOrderMapper productWorkOrderMapper; private final ProductionProductMainMapper productionProductMainMapper; private final ProductionProductOutputMapper productionProductOutputMapper; private final ProductionProductInputMapper productionProductInputMapper; private final QualityInspectMapper qualityInspectMapper; @Autowired private SysDeptMapper sysDeptMapper; @@ -393,16 +402,46 @@ .in(ProductProcessRouteItem::getRouteId, orderIds) ); if (!org.springframework.util.CollectionUtils.isEmpty(allRouteItems)) { if (!CollectionUtils.isEmpty(allRouteItems)) { // 获取要删除的工序项ID List<Long> routeItemIds = allRouteItems.stream() .map(ProductProcessRouteItem::getId) .collect(Collectors.toList()); // 批量删除workOrder productWorkOrderMapper.delete(new LambdaQueryWrapper<ProductWorkOrder>() .in(ProductWorkOrder::getProductProcessRouteItemId, routeItemIds)); } // 查询关联的工单ID List<ProductWorkOrder> workOrders = productWorkOrderMapper.selectList( new LambdaQueryWrapper<ProductWorkOrder>() .in(ProductWorkOrder::getProductProcessRouteItemId, routeItemIds) ); if (!CollectionUtils.isEmpty(workOrders)) { List<Long> workOrderIds = workOrders.stream() .map(ProductWorkOrder::getId) .collect(Collectors.toList()); // 查询关联的生产主表ID List<ProductionProductMain> productMains = productionProductMainMapper.selectList( new LambdaQueryWrapper<ProductionProductMain>() .in(ProductionProductMain::getWorkOrderId, workOrderIds) ); List<Long> productMainIds = productMains.stream() .map(ProductionProductMain::getId) .collect(Collectors.toList()); // 删除产出表、投入表数据 if (!CollectionUtils.isEmpty(productMainIds)) { productionProductOutputMapper.deleteByProductMainIds(productMainIds); productionProductInputMapper.deleteByProductMainIds(productMainIds); qualityInspectMapper.deleteByProductMainIds(productMainIds); } // 删除生产主表数据 productionProductMainMapper.deleteByWorkOrderIds(workOrderIds); // 删除工单数据 productWorkOrderMapper.delete(new LambdaQueryWrapper<ProductWorkOrder>() .in(ProductWorkOrder::getProductProcessRouteItemId, routeItemIds)); } } // 批量删除processRouteItem productProcessRouteItemMapper.delete(new LambdaQueryWrapper<ProductProcessRouteItem>() .in(ProductProcessRouteItem::getRouteId, orderIds)); @@ -440,7 +479,6 @@ wrapperTree.in(ReceiptPayment::getInvoiceLedgerId, invoiceLedgerIds); receiptPaymentMapper.delete(wrapperTree); } // 删除生产管控数据 // 删除生产订单数据 src/main/resources/mapper/production/ProductWorkOrderMapper.xml
@@ -39,4 +39,28 @@ </if> </where> </select> <update id="updatePlanQuantity" parameterType="java.util.Map"> UPDATE product_work_order SET report_work = #{reportWork}, quantity = #{quantity}, plan_quantity = plan_quantity - #{deductQuantity}, product_main_id = #{productMainId} WHERE id = #{workOrderId} </update> <update id="rollbackPlanQuantity" parameterType="java.lang.Long"> UPDATE product_work_order pwo INNER JOIN production_product_main ppm ON pwo.id = ppm.work_order_id AND ppm.id = #{productMainId} INNER JOIN production_product_output ppo ON ppo.product_main_id = ppm.id SET pwo.plan_quantity = pwo.plan_quantity + ppo.quantity, pwo.report_work = 0, pwo.quantity = 0 WHERE pwo.id = ppm.work_order_id </update> </mapper> src/main/resources/mapper/production/ProductionProductInputMapper.xml
@@ -25,4 +25,12 @@ </where> order by ppi.id </select> <delete id="deleteByProductMainIds" parameterType="java.util.List"> DELETE FROM production_product_input WHERE product_main_id IN <foreach collection="productMainIds" item="id" open="(" separator="," close=")"> #{id} </foreach> </delete> </mapper> src/main/resources/mapper/production/ProductionProductMainMapper.xml
@@ -37,4 +37,12 @@ </where> order by ppm.id </select> <delete id="deleteByWorkOrderIds" parameterType="java.util.List"> DELETE FROM production_product_main WHERE work_order_id IN <foreach collection="workOrderIds" item="id" open="(" separator="," close=")"> #{id} </foreach> </delete> </mapper> src/main/resources/mapper/production/ProductionProductOutputMapper.xml
@@ -10,6 +10,7 @@ <result property="tenantId" column="tenant_id"/> <result property="createTime" column="create_time"/> </resultMap> <select id="listPageProductionProductOutputDto" resultType="com.ruoyi.production.dto.ProductionProductOutputDto"> select ppo.*, pm.model as model, @@ -25,4 +26,12 @@ </where> order by ppo.id </select> <delete id="deleteByProductMainIds" parameterType="java.util.List"> DELETE FROM production_product_output WHERE product_main_id IN <foreach collection="productMainIds" item="id" open="(" separator="," close=")"> #{id} </foreach> </delete> </mapper> src/main/resources/mapper/quality/QualityInspectMapper.xml
@@ -46,4 +46,13 @@ AND product_name = #{qualityInspect.productName} </if> </select> <delete id="deleteByProductMainIds"> DELETE FROM quality_inspect WHERE product_main_id IN <foreach collection="productMainIds" item="id" open="(" separator="," close=")"> #{id} </foreach> </delete> </mapper>