Ver Fonte

分批退回

ezhizao_zx há 4 meses atrás
pai
commit
9d024cd48a

+ 64 - 18
src/main/java/cn/ezhizao/project/business/controller/BizLotController.java

@@ -79,6 +79,8 @@ public class BizLotController extends BaseController {
     @Resource
     private IBizProcessInspecionService bizProcessInspecionService;
     @Resource
+    private IBizDayworkAuxiliaryItemService bizDayworkAuxiliaryItemsService;
+    @Resource
     HttpServletRequest request;
 
     /**
@@ -539,6 +541,8 @@ public class BizLotController extends BaseController {
                             turnitem.setDayworkId(newDaywork.getId());
                             turnitem.setLotId(l.getId());
                             turnitem.setId(null);
+                            turnitem.setFromLotId(bizLot.getId());
+                            turnitem.setIsSplitHistory(1);
                             newDaywork.setTemporaryProcessQualifiedNum(l.getQualifiedNum());
 
                             items.subList(1, items.size()).forEach(e -> {
@@ -581,6 +585,8 @@ public class BizLotController extends BaseController {
                             latestItem.setDayworkId(newDaywork.getId());
                             latestItem.setId(snowflakeIdWorker.nextId());
                             latestItem.setLotId(l.getId());
+                            latestItem.setFromLotId(bizLot.getId());
+                            latestItem.setIsSplitHistory(1);
                             if (latestItem.getStatus().equals("3")) {
                                 newDaywork.setTemporaryProcessQualifiedNum(l.getQualifiedNum());
                             }
@@ -630,12 +636,16 @@ public class BizLotController extends BaseController {
                     if ("0".equals(latestItem.getStatus())) {
                         // 假设最新报工是状态未开始开始的产品数量
                         latestItem.setProdNum(l.getLotNumber());
+                        latestItem.setIsSplitHistory(1);
+                        latestItem.setFromLotId(latestItem.getFromLotId().equals(0L) ? bizLot.getId(): latestItem.getFromLotId());
                         bizDayworkItems.add(latestItem);
                     } else if (Arrays.asList("4", "5", "7").contains(latestItem.getStatus())) {
                         // 假设最新是周转,只改周转数量
                         latestItem.setProdNum(l.getQualifiedNum());
                         bizDaywork.setTemporaryProcessQualifiedNum(l.getQualifiedNum());
                         latestItem.setQualifiedNum(l.getQualifiedNum());
+                        latestItem.setIsSplitHistory(1);
+                        latestItem.setFromLotId(latestItem.getFromLotId().equals(0L) ? bizLot.getId(): latestItem.getFromLotId());
                         if (latestItem.getStatus().equals("3")) {
                             bizDaywork.setTemporaryProcessQualifiedNum(l.getQualifiedNum());
                         }
@@ -643,14 +653,22 @@ public class BizLotController extends BaseController {
                     } else {
                         // 删除多的报工,只保留第一条并将状态改成最大的状态。
                         List<BizDayworkItem> currentItems = baseDayworkItems.stream().filter(v -> v.getTechnologicalProcessDetailId().equals(latestItem.getTechnologicalProcessDetailId())).sorted(Comparator.comparing(BizDayworkItem::getCreateTime)).collect(Collectors.toList());
+                        currentItems.forEach(v -> {
+                            v.setIsSplitHistory(1);
+                            v.setFromLotId(v.getFromLotId().equals(0L) ? bizLot.getId(): v.getFromLotId());
+                        });
                         BizDayworkItem updateItem = currentItems.get(0);
                         updateItem.setStatus(currentItems.stream().max(Comparator.comparing(BizDayworkItem::getStatus)).orElse(new BizDayworkItem()).getStatus());
                         updateItem.setProdNum(l.getLotNumber());
                         updateItem.setQualifiedNum(l.getQualifiedNum());
-
                         bizDayworkItems.add(updateItem);
                         delDayworkItems.addAll(currentItems.stream().filter(e -> currentItems.stream().noneMatch(t -> t.getId().equals(e.getId()))).collect(Collectors.toList()));
                     }
+                    List<BizDayworkItem> historyDayworkItem = baseDayworkItems.stream().filter(e -> e.getDayworkId().equals(baseDayworks.get(0).getId())).filter(e -> bizDayworkItems.stream().noneMatch(t -> t.getId().equals(e.getId()))).filter(e -> delDayworkItems.stream().noneMatch(t -> t.getId().equals(e.getId()))).collect(Collectors.toList());
+                    historyDayworkItem.forEach(v -> {
+                        v.setIsSplitHistory(1);
+                        v.setFromLotId(v.getFromLotId().equals(0L) ? bizLot.getId(): v.getFromLotId());
+                    });
                 }
             });
         }
@@ -693,23 +711,29 @@ public class BizLotController extends BaseController {
         lotIds.add(fromLot.getId());
         // 判断分批之后有没有新报工/新发出单/新质检 假设有则不能修改
         // 判断分批后是否重新绑定载具 重新绑定载具就不能还原
+        // 判断分批后有辅助报工 有则无法还原
         List<BizDaywork> bizDayworks = bizDayworkService.query().in("lot_id", lotIds).list();
         List<BizDayworkItem> bizDayworkItems = bizDayworkItemService.query().in("daywork_id", bizDayworks.isEmpty() ? Collections.singletonList(0L) : bizDayworks.stream().map(BizDaywork::getId).collect(Collectors.toList())).list();
-        if (bizDayworkItems.stream().anyMatch(v -> v.getIsSplitHistory().equals(0))) {
+        Date splitDate = bizLotList.stream().max(Comparator.comparing(BizLot::getCreateTime)).orElse(new BizLot()).getCreateTime();
+        if (bizDayworkItems.stream().anyMatch(v -> v.getIsSplitHistory().equals(0)) || bizDayworkItems.stream().anyMatch(v -> v.getUpdateTime() != null && v.getUpdateTime().compareTo(splitDate) > 0)) {
             return error("分批后有新报工,无法退回");
         }
-        Date splitDate = bizLotList.stream().max(Comparator.comparing(BizLot::getCreateTime)).get().getCreateTime();
         List<BizProcessInspecion> bizProcessInspecions = bizProcessInspecionService.query().in("daywork_id", bizDayworks.isEmpty() ? Collections.singletonList(0L) : bizDayworks.stream().map(BizDaywork::getId).collect(Collectors.toList())).list();
         if (bizProcessInspecions.stream().anyMatch(v -> v.getCreateTime().compareTo(splitDate) > 0)) {
             return error("分批之后有新质检,无法退回");
         }
         List<BizDayworkCarrier> bizDayworkCarriers = dayworkCarrierService.query().in("daywork_id", bizDayworks.isEmpty() ? Collections.singletonList(0L) : bizDayworks.stream().map(BizDaywork::getId).collect(Collectors.toList())).eq("is_changed", 0).list();
         if (bizDayworkCarriers.stream().anyMatch(v -> v.getCreateTime().compareTo(splitDate) > 0)) {
-            return error("分批之后重新绑定了载具无法退回");
+            return error("分批之后重新绑定了载具,无法退回");
+        }
+        // 判断是否有新的辅助报工
+        List<BizDayworkAuxiliaryItem> bizDayworkAuxiliaryItems = bizDayworkAuxiliaryItemsService.query().in("daywork_id", bizDayworks.isEmpty() ? Collections.singletonList(0L) : bizDayworks.stream().map(BizDaywork::getId).collect(Collectors.toList())).list();
+        if (bizDayworkAuxiliaryItems.stream().anyMatch(v -> v.getCreateTime().compareTo(splitDate) > 0 || v.getUpdateTime().compareTo(splitDate) > 0)) {
+            return error("分批之后修改了辅助报工,无法退回");
         }
         // 以上检测都通过则返回可以退回的批次列表
         bizLotList.add(fromLot);
-        return success(bizLot);
+        return success(bizLotList);
     }
 
     @Log(title = "还原分批", businessType = BusinessType.UPDATE)
@@ -726,32 +750,54 @@ public class BizLotController extends BaseController {
         if (fromBizLot == null) {
             return error("未查询到母批次,请联系管理员");
         }
-        BizDaywork fromDaywork = bizDayworks.stream().filter(v -> v.getLotId().equals(fromBizLot.getId())).findFirst().orElse(null);
-        if (fromDaywork == null) {
-            return error("未查到母批次报工,请联系管理员");
-        }
-        List<BizDayworkItem> fromDayworkItems = bizDayworkItems.stream().filter(v -> v.getDayworkId().equals(fromDaywork.getId())).sorted(Comparator.comparing(BizDayworkItem::getCreateTime)).collect(Collectors.toList());
-        List<BizDayworkCarrier> fromDayworkCarriers = bizDayworkCarriers.stream().filter(v -> v.getDayworkId().equals(fromDaywork.getId())).collect(Collectors.toList());
-        List<BizQuickDayworkNextInfo> fromQuickInfo = bizQuickDayworkNextInfos.stream().filter(v -> fromDayworkItems.stream().anyMatch(t -> t.getId().equals(v.getDayworkItemId()))).collect(Collectors.toList());
         fromBizLot.setSplitCount(fromBizLot.getSplitCount() - 1);
         fromBizLot.setProductionQuantity(bizLotList.stream().mapToInt(BizLot::getProductionQuantity).sum());
-        // 删除子批次
         List<BizLot> childLot = bizLotList.stream().filter(v -> !v.getId().equals(fromBizLot.getId())).collect(Collectors.toList());
         List<BizDaywork> childDaywork = bizDayworks.stream().filter(v -> childLot.stream().anyMatch(e -> e.getId().equals(v.getLotId()))).collect(Collectors.toList());
         List<BizDayworkItem> childDayworkItems = bizDayworkItems.stream().filter(v -> childDaywork.stream().anyMatch(e -> e.getId().equals(v.getDayworkId()))).collect(Collectors.toList());
-        List<BizDayworkCarrier> childCarrierList = bizDayworkCarriers.stream().filter(v -> childDaywork.stream().allMatch(e-> e.getId().equals(v.getDayworkId()))).collect(Collectors.toList());
+        List<BizDayworkItem> childLatest = new ArrayList<>();
+        childDaywork.forEach(l -> {
+            List<BizDayworkItem> items = childDayworkItems.stream().filter(v -> v.getDayworkId().equals(l.getId())).sorted(Comparator.comparing(BizDayworkItem::getCreateTime).reversed()).collect(Collectors.toList());
+            if (!items.isEmpty()) {
+                childLatest.add(items.get(0));
+            }
+        });
+        List<BizDayworkCarrier> childCarrierList = bizDayworkCarriers.stream().filter(v -> childDaywork.stream().allMatch(e -> e.getId().equals(v.getDayworkId()))).collect(Collectors.toList());
         List<BizQuickDayworkNextInfo> childQuickItem = bizQuickDayworkNextInfos.stream().filter(v -> childDayworkItems.stream().anyMatch(t -> t.getId().equals(v.getDayworkItemId()))).collect(Collectors.toList());
         List<BizFurnaceNoInfo> childFurnaceNoInfo = bizFurnaceNoInfos.stream().filter(v -> childDaywork.stream().anyMatch(t -> t.getId().equals(v.getDayworkId()))).collect(Collectors.toList());
-        // 将母批次的最新报工明细中的合格数改为总合格数
-//        fromDaywork.set
-
         // 将母批次的报工投产数量改为总的报工投产数量
+        BizDaywork fromDaywork = bizDayworks.stream().filter(v -> v.getLotId().equals(fromBizLot.getId())).findFirst().orElse(null);
+        if (fromDaywork == null) {
+            return error("未查到母批次报工,请联系管理员");
+        }
+//        fromDaywork.setProductionQuantity(bizDayworks.stream().mapToInt(BizDaywork::getProductionQuantity).sum());
+        fromDaywork.setProcessQualifiedNum(bizDayworks.stream().mapToInt(BizDaywork::getProcessQualifiedNum).sum());
+        fromDaywork.setTemporaryProcessQualifiedNum(bizDayworks.stream().mapToInt(BizDaywork::getTemporaryProcessQualifiedNum).sum());
+        // 将母批次的最新报工明细中的合格数改为总合格数
+        List<BizDayworkItem> fromDayworkItems = bizDayworkItems.stream().filter(v -> v.getDayworkId().equals(fromDaywork.getId())).sorted(Comparator.comparing(BizDayworkItem::getCreateTime)).collect(Collectors.toList());
+        // 获取最新一条报工然后合并prodNum和qualityNumber
+        BizDayworkItem latestItem = fromDayworkItems.isEmpty() ? null : fromDayworkItems.get(0);
+        List<BizDayworkCarrier> fromDayworkCarriers = bizDayworkCarriers.stream().filter(v -> v.getDayworkId().equals(fromDaywork.getId())).collect(Collectors.toList());
+        List<BizQuickDayworkNextInfo> fromQuickInfo = bizQuickDayworkNextInfos.stream().filter(v -> fromDayworkItems.stream().anyMatch(t -> t.getId().equals(v.getDayworkItemId()))).collect(Collectors.toList());
+        if (latestItem != null) {
+            latestItem.setProdNum(latestItem.getProdNum() + childLatest.stream().mapToInt(BizDayworkItem::getProdNum).sum());
+            latestItem.setQualifiedNum(latestItem.getQualifiedNum() + childLatest.stream().mapToInt(BizDayworkItem::getQualifiedNum).sum());
+        }
+        bizLotService.updateById(fromBizLot);
+        bizDayworkService.updateById(fromDaywork);
+        bizDayworkItemService.updateById(latestItem);
+        // 删除子批次
+        bizLotService.removeBatchByIds(childLot);
         // 删除子批次的报工
+        bizDayworkService.removeBatchByIds(childDaywork);
         // 删除子批次的报工明细
+        bizDayworkItemService.removeBatchByIds(childDayworkItems);
         // 删除子批次快速报工记录
+        bizQuickDayworkNextInfoService.removeBatchByIds(childQuickItem);
         // 删除子批次绑定的载具
+        dayworkCarrierService.removeBatchByIds(childCarrierList);
         // 删除子批次的炉号
-
+        bizFurnaceNoInfoService.removeBatchByIds(childFurnaceNoInfo);
         return success();
     }
 }

+ 2 - 2
src/main/resources/mybatis/business/BizDayworkMapper.xml

@@ -388,8 +388,8 @@
         t4.create_time DESC LIMIT 1), 0) AS process_id,
         COALESCE((SELECT t6.process_alias FROM biz_daywork_item t5 left join biz_process t6 on t5.process_id = t6.id
         WHERE t1.id = t5.daywork_id AND t5.deleted = 0 ORDER BY t5.create_time DESC LIMIT 1), 0) AS processAlias,
-        (select status from biz_daywork_item where daywork_id = t1.id and technological_process_detail_id = (select technological_process_detail_id from biz_daywork_item where daywork_id = t1.id order by create_time desc limit 1) order by status desc limit 1) report_status,
-        (select tn.form_code from biz_daywork_item t left join biz_outsourced_order_detail tn on tn.id = t.outsource_detail_id where t.daywork_id = t1.id and t.technological_process_detail_id = (select technological_process_detail_id from biz_daywork_item where daywork_id = t1.id order by create_time desc limit 1) order by status desc limit 1) as outsource_form_no
+        (select t.status from biz_daywork_item t where t.deleted = 0 and t.daywork_id = t1.id and technological_process_detail_id = (select technological_process_detail_id from biz_daywork_item where daywork_id = t1.id order by create_time desc limit 1) order by status desc limit 1) report_status,
+        (select tn.form_code from biz_daywork_item t left join biz_outsourced_order_detail tn on tn.id = t.outsource_detail_id where t.deleted = 0 and tn.deleted = 0 and t.daywork_id = t1.id and t.technological_process_detail_id = (select technological_process_detail_id from biz_daywork_item where daywork_id = t1.id order by create_time desc limit 1) order by status desc limit 1) as outsource_form_no
         FROM
         biz_daywork t1 left join biz_production_plan_detail t3 on t1.production_plan_detail_id = t3.id
         left join biz_lot t7 on t7.id = t1.lot_id