Browse Source

Merge remote-tracking branch 'origin/master'

ezhizao\ezhizao_zx 1 year ago
parent
commit
19712d6d96

+ 8 - 0
src/main/java/cn/ezhizao/project/business/controller/BizDayworkController.java

@@ -264,11 +264,19 @@ public class BizDayworkController extends BaseController {
                 });
             }
         }
+        //如果进行到最后一条报工,则不能删除,拿到工艺计划单的最后一道工序步骤编码
+        String lastProcessStepNumber;
+        if(bizDayworkItem.getIsAmend() == 1 || bizDayworkItem.getIsWasteRecycling() == 1){
+          lastProcessStepNumber = bizLotTechnologicalProcessDetailService.query().eq("lot_technological_process_id",bizDayworkItem.getTechnologicalProcessId()).orderByDesc("process_step_number").list().get(0).getProcessStepNumber();
+        }else{
+          lastProcessStepNumber = bizTechnologicalProcessDetailService.query().eq("technological_process_id",bizDayworkItem.getTechnologicalProcessId()).ne("tenant_id",9).orderByDesc("process_step_number").list().get(0).getProcessStepNumber();
+        }
         TableDataInfo info = getDataTable(itemList);
         Map<String, Object> map = new HashMap<>();
 
         map.put("latestProcessId", bizDayworkItemService.getLatestDayworkItemId(bizDayworkItem));
         map.put("lastItem",bizDayworkItemService.getLastItem(bizDayworkItem));
+        map.put("lastProcessStepNumber",lastProcessStepNumber);
         info.setOthers(map);
         return info;
     }

+ 0 - 1
src/main/java/cn/ezhizao/project/business/controller/BizInspectionInstructionController.java

@@ -140,7 +140,6 @@ public class BizInspectionInstructionController extends BaseController {
     /**
      * 删除检查指导书
      */
-    @PreAuthorize("@ss.hasPermi('business:carrier:remove')")
     @Log(title = "检查指导书", businessType = BusinessType.DELETE)
     @DeleteMapping("/remove/{ids}")
     public AjaxResult remove(@PathVariable List<Long> ids) {

+ 21 - 1
src/main/java/cn/ezhizao/project/business/controller/BizOutsourcedOrderController.java

@@ -495,7 +495,10 @@ public class BizOutsourcedOrderController extends BaseController {
                         .map(item -> item.getId() + "|" + item.getCode())
                         .collect(Collectors.joining(","));
                 //赋值给新箱号
+                detail.setNewCarrierName(detail.getNewCarriers().stream().map(BizCarrier::getCode)
+                        .collect(Collectors.joining(",")));
                 detail.setNewCarrier(formattedString);
+
                 //将新箱号绑定至dayworkId
                 detail.getNewCarriers().forEach(carrier -> {
                     BizDayworkCarrier bizDayworkCarrier = new BizDayworkCarrier();
@@ -525,6 +528,9 @@ public class BizOutsourcedOrderController extends BaseController {
                         .map(item -> item.getId() + "|" + item.getCode())
                         .collect(Collectors.joining(","));
                     detail.setNewCarrier(formattedString);
+                    detail.setNewCarrierName(orignialCarries.stream()
+                            .map(BizCarrier::getCode)
+                            .collect(Collectors.joining(",")));
                // detail.setNewCarrier(detail.getOriginalCarrier());
             }
         });
@@ -581,9 +587,23 @@ public class BizOutsourcedOrderController extends BaseController {
 
         iBizDayworkCarrierService.saveBatch(carrierList);
         outsourcedOrderDetails = bizOutsourcedOrderDetailService.updateOrSave(outsourcedOrderDetails, bizOutsourcedOrder);
+        List<BizOutsourcedOrderDetail> oldDetailList =bizOutsourcedOrderDetailService.query().eq("master_id",bizOutsourcedOrder.getId()).list();
+        saveOrUpdateBatch(bizOutsourcedOrderDetailService,outsourcedOrderDetails,oldDetailList);
+        List<String> formCodeList = outsourcedOrderDetails.stream().map(BizOutsourcedOrderDetail::getFormCode).collect(Collectors.toList());
+        List<BizOutsourcedOrderDetail> newDetaillist = bizOutsourcedOrderDetailService.query().in("form_code", formCodeList).list();
+        for(int i = 0;i<newDetaillist.size();i++) {
+            for(int j =0;j<outsourcedOrderDetails.size();j++) {
+                if(newDetaillist.get(i).getLotId().equals(outsourcedOrderDetails.get(j).getLotId())) {
+                    newDetaillist.get(i).setProcesses(outsourcedOrderDetails.get(j).getProcesses());
+                }
+            }
+        }
+
+        bizOutsourcedOrderDetailProcessService.updateOrSave(newDetaillist);
         //将周转信息修改为7,添加外协报工信息
         bizDayworkItemService.updateDayworkItemForOutsource(outsourcedOrderDetails);
-        bizOutsourcedOrderDetailProcessService.updateOrSave(outsourcedOrderDetails);
+        //删除收回单明细(不修改,直接删)
+
         return success();
     }
 

+ 16 - 10
src/main/java/cn/ezhizao/project/business/controller/BizOutsourcedOrderDetailController.java

@@ -7,11 +7,10 @@ import java.util.stream.Collectors;
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
 
-import cn.ezhizao.project.business.domain.BizCarrier;
-import cn.ezhizao.project.business.domain.BizOutsourcedOrderDetailProcess;
-import cn.ezhizao.project.business.domain.BizReturnReceiptDetail;
+import cn.ezhizao.project.business.domain.*;
 import cn.ezhizao.project.business.service.IBizOutsourcedOrderDetailProcessService;
 import cn.ezhizao.project.business.service.IBizReturnReceiptDetailService;
+import cn.ezhizao.project.business.service.IBizReturnReceiptService;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -23,7 +22,6 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 import cn.ezhizao.framework.aspectj.lang.annotation.Log;
 import cn.ezhizao.framework.aspectj.lang.enums.BusinessType;
-import cn.ezhizao.project.business.domain.BizOutsourcedOrderDetail;
 import cn.ezhizao.project.business.service.IBizOutsourcedOrderDetailService;
 import cn.ezhizao.framework.web.controller.BaseController;
 import cn.ezhizao.framework.web.domain.AjaxResult;
@@ -46,6 +44,8 @@ public class BizOutsourcedOrderDetailController extends BaseController
     private IBizOutsourcedOrderDetailProcessService bizOutsourcedOrderDetailProcessService;
     @Resource
     private IBizReturnReceiptDetailService bizReturnReceiptDetailService;
+    @Resource
+    private IBizReturnReceiptService bizReturnReceiptService;
 
     /**
      * 查询外协单从列表
@@ -276,12 +276,18 @@ public class BizOutsourcedOrderDetailController extends BaseController
     @GetMapping("/listDetailForAllReceipt")
     public TableDataInfo listDetailForAllReceipt(BizOutsourcedOrderDetail bizOutsourcedOrderDetail) throws NoSuchFieldException, IllegalAccessException
     {
-
-
-        //将已添加的外协明细的id,存在一个集合中
-        List<BizReturnReceiptDetail> alreadyAddedDetailList = bizReturnReceiptDetailService.query()
-                .eq("supplier_id", bizOutsourcedOrderDetail.getSupplierId())
-                .list();
+        //将已添加的外协明细的id,存在一个集合中,包含已经添加的收回明细,但没有提交的
+        List<Long> returnReceiptListIds = bizReturnReceiptService.query().eq("supplier_id", bizOutsourcedOrderDetail.getSupplierId()).eq("is_submit",1)
+                .list().stream().map(BizReturnReceipt::getId).collect(Collectors.toList());
+        List<BizReturnReceiptDetail> alreadyAddedDetailList = new ArrayList<>();
+        if(!returnReceiptListIds.isEmpty()){
+            alreadyAddedDetailList = bizReturnReceiptDetailService.query()
+                    .in("master_id", returnReceiptListIds)
+                    .list();
+        }
+//        List<BizReturnReceiptDetail> alreadyAddedDetailList = bizReturnReceiptDetailService.query()
+//                .eq("supplier_id", bizOutsourcedOrderDetail.getSupplierId())
+//                .list();
         List<Long> alreadyAddedDetailIds = alreadyAddedDetailList.stream().map(BizReturnReceiptDetail::getOutsourceDetailId).distinct().collect(Collectors.toList());
         bizOutsourcedOrderDetail.setAlreadyAddedDetailIds(alreadyAddedDetailIds);
         /*

+ 41 - 0
src/main/java/cn/ezhizao/project/business/controller/BizProcessController.java

@@ -0,0 +1,41 @@
+package cn.ezhizao.project.business.controller;
+
+import cn.ezhizao.framework.web.controller.BaseController;
+import cn.ezhizao.framework.web.page.TableDataInfo;
+import cn.ezhizao.project.business.domain.*;
+import cn.ezhizao.project.business.service.IBizDayworkService;
+import cn.ezhizao.project.business.service.IBizLotTechnologicalProcessDetailService;
+import cn.ezhizao.project.business.service.IBizTechnologicalProcessDetailService;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+@RestController
+@RequestMapping("/business/technologicalProcess")
+public class BizProcessController extends BaseController {
+    @Resource
+    IBizTechnologicalProcessDetailService bizTechnologicalProcessDetailService;
+    @Resource
+    IBizLotTechnologicalProcessDetailService bizLotTechnologicalProcessDetailService;
+    @Resource
+    IBizDayworkService bizDayworkService;
+
+    @GetMapping("/list")
+    public TableDataInfo list(BizDayworkItem bizDayworkItem) throws NoSuchFieldException, IllegalAccessException {
+        BizDaywork bizDaywork = bizDayworkService.getById(bizDayworkItem.getDayworkId());
+        if (bizDayworkItem.getIsAmend().equals(1) || bizDayworkItem.getIsWasteRecycling().equals(1L)) {
+            // 是否是特殊批次
+            List<BizLotTechnologicalProcessDetail> list = bizLotTechnologicalProcessDetailService.query().eq("lot_technological_process_id", bizDaywork.getTechnologicalProcessId()).orderByAsc("process_step_number").list();
+
+            return getDataTable(list);
+        } else {
+            // 普通批次
+            List<BizTechnologicalProcessDetail> list = bizTechnologicalProcessDetailService.query().eq("technological_process_id", bizDaywork.getTechnologicalProcessId()).ne("tenant_id", 9).orderByAsc("process_step_number").list();
+            return getDataTable(list);
+        }
+    }
+
+}

+ 59 - 10
src/main/java/cn/ezhizao/project/business/controller/BizReturnReceiptController.java

@@ -107,7 +107,7 @@ public class BizReturnReceiptController extends BaseController
         List<BizOutsourcedOrderDetail> list = bizOutsourcedOrderDetailService.query().in("id", outsourceDetailIds).list();
 
         returnReceiptDetails.stream().forEach(item -> {
-            if(item.getAuditNum()==0) {
+            if(item.getIsAudit()==0) {
                 item.setAuditNum(item.getReceiptNum());
             }
             list.stream().forEach(info ->{
@@ -116,6 +116,53 @@ public class BizReturnReceiptController extends BaseController
                 }
             });
         });
+        List<BizOutsourcedOrderDetailProcess> detailProcesses = bizOutsourcedOrderDetailProcessService.query()
+                .in("detail_id", outsourceDetailIds)
+                .orderByAsc(Arrays.asList("detail_id", "process_step_number"))
+                .list();
+        //按照批次分组,一个批次合并成一条
+        List<String> lotCodeList = returnReceiptDetails.stream()
+                .map(BizReturnReceiptDetail::getLotCode)
+                .distinct()
+                .collect(Collectors.toList());
+        //一个批次一条
+        Map<String, List<BizReturnReceiptDetail>> groupedByLotCode = new LinkedHashMap<>();
+        for (String lotCode : lotCodeList) {
+            groupedByLotCode.put(lotCode, returnReceiptDetails.stream()
+                    .filter(record -> record.getLotCode().equals(lotCode))
+                    .sorted(Comparator.comparing(BizReturnReceiptDetail::getProcessStepNumber))
+                    .collect(Collectors.toList()));
+        }
+        List<BizReturnReceiptDetail> details = new ArrayList<>();
+        for (Map.Entry<String, List<BizReturnReceiptDetail>> entry : groupedByLotCode.entrySet()) {
+            BizReturnReceiptDetail info = new BizReturnReceiptDetail();
+            String lotCode = entry.getKey();
+            List<BizReturnReceiptDetail> detailList = entry.getValue();
+            info.setProductDescription(detailList.get(0).getProductDescription());
+            info.setOutsourceDetailId(detailList.get(0).getOutsourceDetailId());
+            info.setLotCode(lotCode);
+            info.setStatus(detailList.get(0).getStatus());
+            info.setProductNum(detailList.get(0).getProductNum());
+            info.setReceiptNum(detailList.get(detailList.size() -1).getReceiptNum());
+            if(detailList.get(0).getIsAudit()==0) {
+                info.setAuditNum(detailList.get(detailList.size() -1).getReceiptNum());
+            }else {
+                info.setAuditNum(detailList.get(detailList.size() -1).getAuditNum());
+            }
+            list.stream().forEach(item ->{
+                if(info.getOutsourceDetailId().equals(item.getId())) {
+                    info.setProductionDeptId(item.getProductionDeptId());
+                }
+            });
+            info.setNewCarrier(detailList.get(0).getNewCarrier());
+            info.setRemark(detailList.get(0).getRemark());
+            info.setProcessAlias(detailProcesses.stream()
+                    .filter(dp -> dp.getDetailId().equals(detailList.get(0).getOutsourceDetailId()))
+                    .sorted(Comparator.comparing((BizOutsourcedOrderDetailProcess::getProcessStepNumber)))
+                    .map(BizOutsourcedOrderDetailProcess::getProcessAlias)
+                    .collect(Collectors.joining(",")));
+            details.add(info);
+        }
 //        // 将得到的收回明细的id,组合成一个集合,用于查询这个订单下的,所有收回出来的工序,
 //        // 这里得到的工序清单,是混合的,并没有根据各自对应的明细,进行分组,仅仅是获取全部,为后续分组做准备
 //        List<Long> detailIds = returnReceiptDetails.stream()
@@ -139,8 +186,8 @@ public class BizReturnReceiptController extends BaseController
 //        });
 
         // 将收回明细赋值给收回订单
-        returnReceipt.setDetails(returnReceiptDetails);
-
+        returnReceipt.setDetails(details);
+        returnReceipt.setDetailInfo(returnReceiptDetails);
         return success(returnReceipt);
     }
 
@@ -180,18 +227,19 @@ public class BizReturnReceiptController extends BaseController
             bizReturnReceipt.setFormCode(previous);
         }
         bizReturnReceipt.setStatus(1);
+        bizReturnReceipt.setIsSubmit(1);
         //向收回单主表存
         bizReturnReceiptService.save(bizReturnReceipt);
         //将dayworkItem外协报工状态改成3,添加工时,审核数量设置成合格数
-        List<Long> dayworkListIds = bizReturnReceipt.getDetails().stream().map(BizReturnReceiptDetail::getDayworkId).collect(Collectors.toList());
+        List<Long> dayworkListIds = bizReturnReceipt.getDetailInfo().stream().map(BizReturnReceiptDetail::getDayworkId).distinct().collect(Collectors.toList());
         //找到要修改的报工记录
-        List<Long> outsourceDetailId = bizReturnReceipt.getDetails().stream().map(BizReturnReceiptDetail::getOutsourceDetailId).collect(Collectors.toList());
+        List<Long> outsourceDetailId = bizReturnReceipt.getDetailInfo().stream().map(BizReturnReceiptDetail::getOutsourceDetailId).distinct().collect(Collectors.toList());
         List<BizOutsourcedOrderDetailProcess> bizOutsourcedOrderDetailProcess = bizOutsourcedOrderDetailProcessService.query().in("detail_id", outsourceDetailId).list();
         List<BizDayworkItem> dayworkItem = bizDayworkItemService.getListByDayworkIdsForOutsourced(dayworkListIds);
         SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         Date date2 = simpleDateFormat.parse(simpleDateFormat.format(new Date()));
         //向收回单明细表存
-        for(BizReturnReceiptDetail bizReturnReceiptDetail : bizReturnReceipt.getDetails()) {
+        for(BizReturnReceiptDetail bizReturnReceiptDetail : bizReturnReceipt.getDetailInfo()) {
             bizReturnReceiptDetail.setMasterId(bizReturnReceipt.getId());
             bizReturnReceiptDetail.setFormCode(bizReturnReceipt.getFormCode());
             bizReturnReceiptDetail.setSupplierId(bizReturnReceipt.getSupplierId());
@@ -212,7 +260,7 @@ public class BizReturnReceiptController extends BaseController
             }
         }
         bizDayworkItemService.updateBatchById(dayworkItem);
-        return success(bizReturnReceiptDetailService.saveBatch(bizReturnReceipt.getDetails()));
+        return success(bizReturnReceiptDetailService.saveBatch(bizReturnReceipt.getDetailInfo()));
     }
 
     /**
@@ -225,6 +273,7 @@ public class BizReturnReceiptController extends BaseController
     @PutMapping
     public AjaxResult edit(@RequestBody BizReturnReceipt bizReturnReceipt) throws NoSuchFieldException, IllegalAccessException, ParseException {
         bizReturnReceipt.setStatus(1);
+        bizReturnReceipt.setIsSubmit(1);
         bizReturnReceiptService.updateById(bizReturnReceipt);
         //将dayworkItem外协报工状态改成3,添加工时,审核数量设置成合格数
         List<Long> dayworkListIds = bizReturnReceipt.getDetails().stream().map(BizReturnReceiptDetail::getDayworkId).collect(Collectors.toList());
@@ -235,7 +284,7 @@ public class BizReturnReceiptController extends BaseController
         SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         Date date2 = dateFormat.parse(dateFormat.format(new Date()));
         //向收回单明细表存
-        for(BizReturnReceiptDetail bizReturnReceiptDetail : bizReturnReceipt.getDetails()) {
+        for(BizReturnReceiptDetail bizReturnReceiptDetail : bizReturnReceipt.getDetailInfo()) {
             bizReturnReceiptDetail.setMasterId(bizReturnReceipt.getId());
             bizReturnReceiptDetail.setFormCode(bizReturnReceipt.getFormCode());
             bizReturnReceiptDetail.setSupplierId(bizReturnReceipt.getSupplierId());
@@ -255,9 +304,9 @@ public class BizReturnReceiptController extends BaseController
         }
         bizDayworkItemService.updateBatchById(dayworkItem);
         List<BizReturnReceiptDetail> oldList = bizReturnReceiptDetailService.query().eq("master_id", bizReturnReceipt.getId()).list();
-        saveOrUpdateBatch(bizReturnReceiptDetailService, bizReturnReceipt.getDetails(),oldList);
+        saveOrUpdateBatch(bizReturnReceiptDetailService, bizReturnReceipt.getDetailInfo(),oldList);
         //如果收回单里面没工序,则主表同时删除
-        if(bizReturnReceipt.getDetails().size()==0) {
+        if(bizReturnReceipt.getDetailInfo().size()==0) {
             bizReturnReceiptService.removeById(bizReturnReceipt.getId());
         }
         return success();

+ 130 - 0
src/main/java/cn/ezhizao/project/business/controller/BizReturnTurnoverController.java

@@ -69,6 +69,8 @@ public class BizReturnTurnoverController extends BaseController
     @Resource
     private IBizProductionResourceGroupService bizProductionResourceGroupService;
     @Resource
+    private IBizCarrierCategoryService carrierCategoryService;
+    @Resource
     private SysDeptMapper sysDeptMapper;
     @Resource
     private RedisCache redisCache;
@@ -95,6 +97,7 @@ public class BizReturnTurnoverController extends BaseController
         //查询周转到外协的工序
         List<Long> outsourceDetailIds = list.stream().map(BizOutsourcedOrderDetail::getId).collect(Collectors.toList());
         List<Long> dayworkIds = list.stream().map(BizOutsourcedOrderDetail::getDayworkId).collect(Collectors.toList());
+        List<BizDaywork> dayworks = bizDayworkService.query().in("id", dayworkIds.isEmpty()? Collections.singletonList(0L): dayworkIds).list();
         if(!dayworkIds.isEmpty()) {
             List<BizOutsourcedOrderDetailProcess> outsourceDetailProcess = bizOutsourcedOrderDetailProcessService.query().in("detail_id", outsourceDetailIds).list();
             //如果下道序扫码开始新批次了,则不能编辑载具和周转信息
@@ -108,6 +111,13 @@ public class BizReturnTurnoverController extends BaseController
                 if(!Objects.equals(lastProcess.getProcessStepNumber(), lastItem.getProcessStepNumber())) {
                     detail.setFlag(false);
                 }
+                BizDaywork daywork = dayworks.stream().filter(l -> l.getId().equals(detail.getDayworkId())).findFirst().orElse(null);
+                if (daywork != null) {
+                    detail.setIsAmend(daywork.getIsAmend());
+                    detail.setIsWaste(daywork.getIsWaste());
+                    detail.setIsWasteRecycling(Integer.parseInt(daywork.getIsWasteRecycling().toString()));
+                }
+
             }
 //            List<BizDayworkCarrier> dayworkCarrierList = bizDayworkCarrierService.query().in("daywork_id", dayworkIds).eq("is_changed",0).list();
 //            for (BizOutsourcedOrderDetail detail : list) {
@@ -327,6 +337,126 @@ public class BizReturnTurnoverController extends BaseController
         return success();
     }
 
+
+    @PreAuthorize("@ss.hasPermi('business:returnTurnover:edit')")
+    @Log(title = "外协批量周转", businessType = BusinessType.UPDATE)
+    @Transactional
+    @PostMapping("/batchTurnover")
+    public AjaxResult batchTurnover(@RequestBody BizOutsourcedOrderDetail outsourcedOrderDetail) throws NoSuchFieldException, IllegalAccessException {
+        // 批量周转不换箱 则不需要判断是否箱被占用
+        //修改收回单明细的箱号和周转工段
+        List<BizOutsourcedOrderDetail> batches = outsourcedOrderDetail.getBatches();
+        List<BizDayworkItem> addItems = new ArrayList<>();
+        List<BizDayworkItem> removeItems = new ArrayList<>();
+        List<BizDaywork> updateDaywork = new ArrayList<>();
+        List<BizProductionResourceGroupSubPlan> subPlanList = new ArrayList<>();
+        //操作dayworkCarrier表,如果该批次已经绑箱,把对应箱解绑,并重新绑定新箱子
+        List<BizDayworkCarrier> newDayworkCarrierList = new ArrayList<>();
+        List<BizDayworkItem> bizDayworkItems = bizDayworkItemService.getListByDayworkIds(batches.stream().map(BizOutsourcedOrderDetail::getDayworkId).collect(Collectors.toList()));
+        List<BizDayworkCarrier> returnDayworkCarrierList = bizDayworkCarrierService.query().in("daywork_id", batches.isEmpty() ? Collections.singletonList(0L) : batches.stream().map(BizOutsourcedOrderDetail::getDayworkId).collect(Collectors.toList())).eq("is_changed",0).list();
+        List<BizDaywork> bizDayworks = bizDayworkService.query().in("id", batches.isEmpty() ? Collections.singletonList(0L) : batches.stream().map(BizOutsourcedOrderDetail::getDayworkId).collect(Collectors.toList())).list();
+
+        if (returnDayworkCarrierList.size() > 0){
+            returnDayworkCarrierList.stream().forEach(bizDayworkCarrier -> bizDayworkCarrier.setIsChanged(1));
+        }
+
+        // 自动派活
+        SysDept sysDept = sysDeptMapper.selectDeptById(outsourcedOrderDetail.getProductionDeptId());
+
+        List<BizProductionResourceGroup> productionResourceGroupList = bizProductionResourceGroupService.list(new QueryWrapper<BizProductionResourceGroup>().eq("dept_id", outsourcedOrderDetail.getProductionDeptId()).eq("is_deactivate", 0));
+
+        batches.forEach(l -> {
+            l.setProductionCarrier(l.getNewCarrierName());
+            l.setProductionDeptId(outsourcedOrderDetail.getProductionDeptId());
+            l.setProductionDeptName(outsourcedOrderDetail.getProductionDeptName());
+            l.getCarriers().forEach(v -> {
+                BizDayworkCarrier carrier = new BizDayworkCarrier();
+                carrier.setCarrierId(v.getId());
+                carrier.setCarrierCode(v.getCode());
+                carrier.setDayworkId(l.getDayworkId());
+                carrier.setLotId(l.getLotId());
+                newDayworkCarrierList.add(carrier);
+            });
+            BizDaywork daywork = bizDayworks.stream().filter(v -> v.getId().equals(l.getDayworkId())).findFirst().orElse(null);
+            BizDayworkItem lastDayworkItem = bizDayworkItems.stream().filter(v -> v.getDayworkId().equals(l.getDayworkId())).sorted(Comparator.comparing(BizDayworkItem::getProcessStepNumber).reversed()).collect(Collectors.toList()).get(0);
+            if("4".equals(lastDayworkItem.getStatus())){
+                removeItems.add(lastDayworkItem);
+            }
+            BizDayworkItem item = new BizDayworkItem();
+            item.setDayworkId(l.getDayworkId());
+            item.setProductionPlanDetailId(lastDayworkItem.getProductionPlanDetailId());
+            item.setLotId(l.getLotId());
+            item.setProdNum(lastDayworkItem.getProdNum());
+            item.setQualifiedNum(lastDayworkItem.getQualifiedNum());
+            item.setTechnologicalProcessId(lastDayworkItem.getTechnologicalProcessId());
+            item.setTechnologicalProcessDetailId(lastDayworkItem.getTechnologicalProcessDetailId());
+            item.setProcessStepNumber(lastDayworkItem.getProcessStepNumber());
+            item.setProcessId(lastDayworkItem.getProcessId());
+            item.setDeptId(l.getProductionDeptId());
+            item.setDeptName(l.getProductionDeptName());
+            item.setStatus("4");
+            item.setNickName("外协");
+            item.setStartTime(new Date());
+            item.setTurnoverType("2");
+            item.setTurnoverArea("外协周转区");
+            addItems.add(item);
+
+            //修改daywork主表数据
+            daywork.setProcessQualifiedNum(outsourcedOrderDetail.getAuditNum());
+            daywork.setTemporaryProcessQualifiedNum(outsourcedOrderDetail.getAuditNum());
+            daywork.setDeptId(outsourcedOrderDetail.getProductionDeptId());
+            updateDaywork.add(daywork);
+
+            if (sysDept.getAutoAllocation() == 1) {
+                // 查资源组
+
+                //查询是否已经分配资源组
+                BizProductionResourceGroupSubPlan groupSubPlan=new BizProductionResourceGroupSubPlan();
+                groupSubPlan.setDeptId(outsourcedOrderDetail.getProductionDeptId());
+                groupSubPlan.setProductionPlanDetailId(daywork.getProductionPlanDetailId());
+
+                List<BizProductionResourceGroupSubPlan> groupSubPlanList = bizProductionResourceGroupSubPlanService.getAotList(groupSubPlan);
+                //如果没分配
+                if(groupSubPlanList.size()==0){
+                    //查产品id
+                    BizProductionPlanDetail productionPlanDetail = bizProductionPlanDetailService.getOne(new QueryWrapper<BizProductionPlanDetail>().eq("id", item.getProductionPlanDetailId()));
+                    for (BizProductionResourceGroup info : productionResourceGroupList) {
+                        BizProductionResourceGroupSubPlan subPlan = new BizProductionResourceGroupSubPlan();
+                        subPlan.setProductId(productionPlanDetail.getProductId());
+                        subPlan.setProductionPlanDetailId(lastDayworkItem.getProductionPlanDetailId());
+                        subPlan.setTechnologicalProcessId(outsourcedOrderDetail.getTechnologicalProcessId());
+                        subPlan.setResourceGroupId(info.getId());
+                        subPlan.setDeptId(outsourcedOrderDetail.getProductionDeptId());
+                        subPlan.setResourceGroupCode(info.getCode());
+                        subPlanList.add(subPlan);
+                    }
+                }
+
+            }
+        });
+        bizOutsourcedOrderDetailService.updateBatchById(batches);
+        bizDayworkCarrierService.updateBatchById(returnDayworkCarrierList);
+        bizDayworkCarrierService.saveBatch(newDayworkCarrierList);
+        bizDayworkItemService.removeBatchByIds(removeItems);
+        bizDayworkItemService.saveBatch(addItems);
+        bizDayworkService.updateBatchById(updateDaywork);
+        bizProductionResourceGroupSubPlanService.saveBatch(subPlanList);
+        return success();
+    }
+
+    @Log(title = "判断携带箱类型", businessType = BusinessType.SELECT)
+    @GetMapping("/checkCarriers")
+    public AjaxResult checkCarriers(@RequestParam String carriers) {
+        List<String> carrierCodes = Arrays.stream(carriers.split(",")).collect(Collectors.toList());
+        List<BizCarrier> carrierList = carrierService.query().in("code", carrierCodes).list();
+        List<BizCarrierCategory> categories = carrierCategoryService.query().eq("name", "外协箱").list();
+        if (carrierList.stream().anyMatch(t -> categories.stream().anyMatch(e -> t.getCategoryId().equals(e.getId())))) {
+            return success(false);
+        } else {
+            return success(true);
+        }
+
+    }
     /**
      * 删除外协单主
 带箱方式,是整单的。如果换新箱子,明细中,都需要更换箱子

+ 17 - 0
src/main/java/cn/ezhizao/project/business/domain/BizOutsourcedOrderDetail.java

@@ -115,6 +115,9 @@ public class BizOutsourcedOrderDetail extends BaseEntity
     @ApiModelProperty(value = "新箱号,以英文“,”分割")
     private String newCarrier;
 
+    @ApiModelProperty("新箱号")
+    private String newCarrierName;
+
     /** 新箱数 */
     @Excel(name = "新箱数")
     @ApiModelProperty(value = "新箱数")
@@ -170,4 +173,18 @@ public class BizOutsourcedOrderDetail extends BaseEntity
     //发出总数量 只在打印时用到
     @TableField(exist = false)
     private Integer sum;
+    // 批次类型 正常/单批单改/废品回用
+    @TableField(exist = false)
+    private Integer isAmend;
+    @TableField(exist = false)
+    private Integer isWasteRecycling;
+    @TableField(exist = false)
+    private Integer isWaste;
+    @TableField(exist = false)
+    private String statusValue;
+    @TableField(exist = false)
+    private List<Long> flags;
+
+    @TableField(exist = false)
+    private List<BizOutsourcedOrderDetail> batches;
 }

+ 3 - 0
src/main/java/cn/ezhizao/project/business/domain/BizReturnReceipt.java

@@ -61,4 +61,7 @@ public class BizReturnReceipt extends BaseEntity
     private String startTime;
     @TableField(exist = false)
     private String endTime;
+    @TableField(exist = false)
+    private List<BizReturnReceiptDetail> detailInfo;
+    private Integer isSubmit;
 }

+ 1 - 0
src/main/java/cn/ezhizao/project/business/domain/BizReturnReceiptDetail.java

@@ -144,4 +144,5 @@ public class BizReturnReceiptDetail extends BaseEntity
     private Integer isAudit;
     @TableField(exist = false)
     private Long productionDeptId;
+
 }

+ 11 - 2
src/main/java/cn/ezhizao/project/business/service/impl/BizOutsourcedOrderDetailProcessServiceImpl.java

@@ -80,9 +80,18 @@ public class BizOutsourcedOrderDetailProcessServiceImpl  extends ServiceImpl<Biz
     @Override
     public boolean updateOrSave(List<BizOutsourcedOrderDetail> outsourcedOrderDetails) {
         //查找已经添加的process
-        List<Long> detailIds = outsourcedOrderDetails.stream().map(BizOutsourcedOrderDetail::getId).collect(Collectors.toList());
+        List<Long> masterIds = outsourcedOrderDetails.stream().map(BizOutsourcedOrderDetail::getMasterId).collect(Collectors.toList());
         //外协单明细绑定的工序
-        List<BizOutsourcedOrderDetailProcess> detaillist = query().in("detail_id", detailIds).list();
+        List<BizOutsourcedOrderDetailProcess> detaillist = query().in("master_id", masterIds).list();
+        //直接删除发出单明细
+        if(!detaillist.isEmpty()) {
+            List<Long> newDetailId = outsourcedOrderDetails.stream().map(BizOutsourcedOrderDetail::getId).distinct().collect(Collectors.toList());
+            List<Long> oldDetailId = detaillist.stream().map(BizOutsourcedOrderDetailProcess::getDetailId).distinct().collect(Collectors.toList());
+            List<Long> ids = oldDetailId.stream().filter(item ->!newDetailId.contains(item)).collect(Collectors.toList());
+            if(!ids.isEmpty()){
+                removeBatchByIds( query().in("detail_id",ids).list());
+            }
+        }
         List<BizOutsourcedOrderDetailProcess> updateList = new ArrayList<>();
         List<BizOutsourcedOrderDetailProcess> saveList=new ArrayList<>();
         outsourcedOrderDetails.forEach(detail -> {

+ 3 - 1
src/main/java/cn/ezhizao/project/business/service/impl/BizOutsourcedOrderDetailServiceImpl.java

@@ -72,9 +72,11 @@ public class BizOutsourcedOrderDetailServiceImpl  extends ServiceImpl<BizOutsour
             detail.setTenantId(bizOutsourcedOrder.getTenantId());
             detail.setNewCarrierCount(detail.getCarrierNum());
         });
-        saveOrUpdateBatch(outsourcedOrderDetails);
         return outsourcedOrderDetails;
     }
+    public  boolean saveBatch(List<BizOutsourcedOrderDetail> outsourcedOrderDetails, BizOutsourcedOrder bizOutsourcedOrder) {
+        return saveOrUpdateBatch(outsourcedOrderDetails);
+    }
     /**
      * 查询外协单从列表
      *

+ 1 - 1
src/main/resources/mybatis/business/BizDayworkItemMapper.xml

@@ -158,7 +158,7 @@
             <if test="dayworkId != null and dayworkId != 0">AND t1.daywork_id = #{dayworkId}</if>
             <if test="isAmend != null and isAmend != 0">AND t1.form_daywork_item_id !=0 </if>
             <if test="processId != null  and processId != 0">AND t1.process_id = #{processId}</if>
-            ORDER BY t1.process_step_number desc ,t1.start_time asc limit 1
+            ORDER BY t1.process_step_number desc ,t1.create_time desc limit 1
         </trim>
     </select>
     <select id="getLastItem" resultType="cn.ezhizao.project.business.domain.BizDayworkItem">

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

@@ -322,7 +322,7 @@
             <if test="dayworkId != null and dayworkId != 0">AND t1.daywork_id = #{dayworkId}</if>
             <if test="isAmend != null and isAmend != 0">AND t1.form_daywork_item_id !=0 </if>
             <if test="processId != null  and processId != 0">AND t1.process_id = #{processId}</if>
-            ORDER BY t1.process_step_number ASC ,t1.start_time DESC
+            ORDER BY t1.process_step_number ASC ,t1.create_time ASC
         </trim>
     </select>
     <select id="getProcessName" resultType="java.lang.String">

+ 16 - 1
src/main/resources/mybatis/business/BizOutsourcedOrderDetailMapper.xml

@@ -29,6 +29,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         t1.product_description,
         t2.dept_name AS productionDeptName,
         t1.production_carrier,
+        t1.new_carrier_name,
+        t1.product_id,
         t1.production_dept_id,
         t1.packaging_method AS packagingMethod,
         (
@@ -57,6 +59,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         biz_outsourced_order_detail t1
         LEFT JOIN sys_dept t2 ON t2.dept_id = t1.production_dept_id
         LEFT JOIN biz_return_receipt_detail t3 ON t3.outsource_detail_id = t1.id
+        left join biz_daywork t4 on t4.id = t1.daywork_id
         <trim prefix=" WHERE" suffix="" suffixOverrides="AND">
             t1.deleted = 0 and t3.deleted = 0 and t3.audit_num !=0
             <if test="formCode != null  and formCode != ''"> AND t3.form_code like concat('%', #{formCode}, '%')</if>
@@ -65,6 +68,18 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="lotCode != null  and lotCode != ''"> AND t1.lot_code like concat('%', #{lotCode}, '%')</if>
             <if test="startTime != null ">AND t3.form_date &gt;= #{startTime}</if>
             <if test="endTime != null ">AND t3.form_date &lt;= #{endTime}</if>
+            <if test="statusValue == 1">AND t1.production_dept_id = 0</if>
+            <if test="statusValue == 2">AND t1.production_dept_id != 0</if>
+            <if test="flags != null and flags.size() > 0">
+                AND
+                <foreach collection="flags" item="flag" separator=" OR " open="(" close=")">
+                    <if test="flag != null and flag == 2"> t4.is_amend= 1</if>
+                    <if test="flag != null and flag == 1"> t4.is_waste_recycling= 1</if>
+<!--                    <if test="flag != null and flag == 0"> t4.is_waste= 1</if>-->
+                    <if test="flag != null and flag == 3"> t4.is_waste_recycling= 0 and t4.is_amend = 0 </if>
+                    <!--                    t1.is_waste_recycling = #{flag} OR t1.is_waste = #{flag} OR t1.is_amend = #{flag}-->
+                </foreach>
+            </if>
         </trim>
         ORDER BY t3.create_time DESC
     </select>
@@ -185,7 +200,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </select>
     <select id="getProcessNames" resultType="String">
         SELECT
-        GROUP_CONCAT(t.process_alias)
+        GROUP_CONCAT(t.process_alias order by t.process_step_number asc)
         FROM biz_outsourced_order_detail_process t
         WHERE t.detail_id = #{id} and deleted = 0
     </select>

+ 1 - 1
src/main/resources/mybatis/business/BizReturnReceiptMapper.xml

@@ -10,7 +10,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     <select id="getList" parameterType="BizReturnReceipt" resultMap="BizReturnReceiptResult">
         SELECT * FROM biz_return_receipt
         <trim prefix=" WHERE" suffix="" suffixOverrides="AND">
-            deleted = 0
+            deleted = 0 and is_submit = 1
             <if test="formCode != null  and formCode != ''"> AND form_code like concat('%', #{formCode}, '%')</if>
             <if test="startTime != null ">AND form_date &gt;= #{startTime}</if>
             <if test="endTime != null ">AND form_date &lt;= #{endTime}</if>