Переглянути джерело

Merge branch '12.31外协分选发出'

ezhizao_zx 5 місяців тому
батько
коміт
697a9d7bef
36 змінених файлів з 1108 додано та 45 видалено
  1. 88 4
      src/main/java/cn/ezhizao/project/business/controller/BizDayworkController.java
  2. 6 3
      src/main/java/cn/ezhizao/project/business/controller/BizLotTechnologicalProcessController.java
  3. 313 2
      src/main/java/cn/ezhizao/project/business/controller/BizOutsourcedOrderController.java
  4. 58 0
      src/main/java/cn/ezhizao/project/business/controller/BizOutsourcedRecordsController.java
  5. 22 0
      src/main/java/cn/ezhizao/project/business/controller/BizProductInspectionInstructionController.java
  6. 14 0
      src/main/java/cn/ezhizao/project/business/controller/BizReturnReceiptController.java
  7. 36 8
      src/main/java/cn/ezhizao/project/business/controller/BizReturnReceiptDetailController.java
  8. 5 0
      src/main/java/cn/ezhizao/project/business/controller/BizReturnTurnoverController.java
  9. 2 0
      src/main/java/cn/ezhizao/project/business/domain/BizDaywork.java
  10. 6 0
      src/main/java/cn/ezhizao/project/business/domain/BizOutsourcedOrder.java
  11. 14 0
      src/main/java/cn/ezhizao/project/business/domain/BizOutsourcedOrderDetail.java
  12. 1 0
      src/main/java/cn/ezhizao/project/business/domain/BizOutsourcedRecords.java
  13. 61 21
      src/main/java/cn/ezhizao/project/business/domain/BizReturnReceiptDetail.java
  14. 2 0
      src/main/java/cn/ezhizao/project/business/domain/BizSupplier.java
  15. 1 0
      src/main/java/cn/ezhizao/project/business/mapper/BizDayworkItemExamineMapper.java
  16. 1 0
      src/main/java/cn/ezhizao/project/business/mapper/BizDayworkMapper.java
  17. 1 0
      src/main/java/cn/ezhizao/project/business/mapper/BizOutsourcedOrderDetailMapper.java
  18. 2 0
      src/main/java/cn/ezhizao/project/business/mapper/BizOutsourcedOrderMapper.java
  19. 1 0
      src/main/java/cn/ezhizao/project/business/mapper/BizTurnoverMapper.java
  20. 4 0
      src/main/java/cn/ezhizao/project/business/service/IBizDayworkItemExamineService.java
  21. 3 4
      src/main/java/cn/ezhizao/project/business/service/IBizDayworkItemService.java
  22. 1 0
      src/main/java/cn/ezhizao/project/business/service/IBizDayworkService.java
  23. 1 0
      src/main/java/cn/ezhizao/project/business/service/IBizOutsourcedOrderDetailService.java
  24. 2 0
      src/main/java/cn/ezhizao/project/business/service/IBizOutsourcedOrderService.java
  25. 86 0
      src/main/java/cn/ezhizao/project/business/service/impl/BizDayworkItemExamineServiceImpl.java
  26. 186 1
      src/main/java/cn/ezhizao/project/business/service/impl/BizDayworkItemServiceImpl.java
  27. 6 0
      src/main/java/cn/ezhizao/project/business/service/impl/BizDayworkServiceImpl.java
  28. 5 0
      src/main/java/cn/ezhizao/project/business/service/impl/BizOutsourcedOrderDetailServiceImpl.java
  29. 11 0
      src/main/java/cn/ezhizao/project/business/service/impl/BizOutsourcedOrderServiceImpl.java
  30. 17 0
      src/main/java/cn/ezhizao/project/system/domain/SysDept.java
  31. 7 0
      src/main/resources/mybatis/business/BizDayworkItemExamineMapper.xml
  32. 63 1
      src/main/resources/mybatis/business/BizDayworkMapper.xml
  33. 58 0
      src/main/resources/mybatis/business/BizOutsourcedOrderDetailMapper.xml
  34. 20 0
      src/main/resources/mybatis/business/BizOutsourcedOrderMapper.xml
  35. 3 0
      src/main/resources/mybatis/business/BizTurnoverMapper.xml
  36. 1 1
      src/main/resources/mybatis/system/SysDeptMapper.xml

+ 88 - 4
src/main/java/cn/ezhizao/project/business/controller/BizDayworkController.java

@@ -106,6 +106,8 @@ public class BizDayworkController extends BaseController {
     @Resource
     private IBizFurnaceNoInfoService bizFurnaceNoInfoService;
     @Resource
+    private IBizOutsourcedOrderDetailProcessService bizOutsourcedOrderDetailProcessService;
+    @Resource
     HttpServletRequest request;
 
     /**
@@ -230,6 +232,73 @@ public class BizDayworkController extends BaseController {
 
         return dataTable;
     }
+    @GetMapping("/listForInnerOutsource")
+    @Log(title = "查询外协列表", businessType = BusinessType.SELECT)
+    public TableDataInfo listForInnerOutsource(BizDaywork bizDaywork) {
+        // 已经在页面中存在的daywork id
+        List<Long> existingDayworkIds = bizDaywork.getExistingDayworkIds();
+        BizDayworkItem dayworkItem = new BizDayworkItem();
+        dayworkItem.setDeptCode(bizDaywork.getDeptCode());
+        List<BizDayworkItem> dayworkItemList = bizDayworkService.getItemListForOutsource(dayworkItem);
+
+        List<Long> dayworkIds = dayworkItemList.stream().map(BizDayworkItem::getDayworkId).collect(Collectors.toList());
+        // 如果得到的集合是空集合,放入一个0元素,传到xml中,进行SQL组合
+        // 否则,SQL组合,不会进行 IN 的判断,导致把所有数据都得到了。
+        if (dayworkIds.isEmpty()) {
+            dayworkIds.add(0L);
+        }
+        bizDaywork.setDayworkIds(dayworkIds);
+        startPage();
+        List<BizDaywork> dayworkList = bizDayworkService.getListForInnerOutsource(bizDaywork);
+        long total = new PageInfo(dayworkList).getTotal();
+        //根据查询的daywork信息上发出单查询是否存在
+        List<BizOutsourcedOrderDetail> orderDetails = bizOutsourcedOrderDetailService.query().in("daywork_id", dayworkIds).eq("deleted", 0).list();
+        //如果有查询是否回收
+        if (orderDetails.size() > 0) {
+            //以回收的数据
+            List<BizReturnReceiptDetail> returnReceiptDetails = bizReturnReceiptDetailService.query().in("outsource_detail_id", orderDetails.stream().map(BizOutsourcedOrderDetail::getId).collect(Collectors.toList())).eq("deleted", 0).list();
+
+            //如果数据相同则表示全部回收
+            if (orderDetails.size() != returnReceiptDetails.size()) {
+                // 将 returnReceiptDetails 中的 id 收集到一个 Set 中,以便快速查找
+                Set<Long> returnReceiptDetailIds = returnReceiptDetails.stream()
+                        .map(BizReturnReceiptDetail::getOutsourceDetailId) // 假设 getId() 返回 BizReturnReceiptDetail 对象的 id
+                        .collect(Collectors.toSet());
+
+                // 使用 stream() 和 filter() 筛选出那些 id 不在 returnReceiptDetailIds 中的 orderDetails
+                List<BizOutsourcedOrderDetail> filteredOrderDetails = orderDetails.stream()
+                        .filter(orderDetail -> !returnReceiptDetailIds.contains(orderDetail.getId())) // 筛选出 id 不在 returnReceiptDetails 中的元素
+                        .collect(Collectors.toList());
+
+                // 使用 Stream API 收集所有唯一的 dayworkId 到一个 Set 中
+                Set<Long> uniqueDayworkIds = filteredOrderDetails.stream()
+                        .map(BizOutsourcedOrderDetail::getDayworkId) // 假设 getDayworkId() 返回 BizOutsourcedOrderDetail 对象的 dayworkId
+                        .collect(Collectors.toSet());
+
+                //将未回收的从集合中移除
+                // 使用 stream() 和 filter() 创建一个新的 dayworkList,排除那些 dayworkId 出现在 dayworkIdsToDelete 中的 BizDaywork 对象
+                List<BizDaywork> updatedDayworkList = dayworkList.stream()
+                        .filter(daywork -> !uniqueDayworkIds.contains(daywork.getId())) // 假设 getId() 返回 BizDaywork 对象的 id
+                        .collect(Collectors.toList());
+
+                dayworkList = updatedDayworkList;
+            }
+        }
+
+        dayworkList.forEach(daywork -> {
+            dayworkItemList.forEach(item -> {
+                if (daywork.getId().equals(item.getDayworkId())) {
+                    daywork.setProductNum(item.getQualifiedNum());
+                    daywork.setTurnoverDate(item.getCreateTime());
+                }
+            });
+
+        });
+        TableDataInfo dataTable = getDataTable(dayworkList);
+        dataTable.setTotal(total);
+
+        return dataTable;
+    }
 
     @GetMapping("/processesForOutsource")
     @Log(title = "查询外协工序", businessType = BusinessType.SELECT)
@@ -810,6 +879,8 @@ public class BizDayworkController extends BaseController {
                 daywork.setLotId(lot.getId());
                 daywork.setProductionPlanDetailId(lot.getProductionPlanDetailId());
                 daywork.setLotCode(lotCode);
+                //判断是否有内部外协
+                List<BizOutsourcedOrderDetailProcess> outsourcedOrderDetailProcessList = bizOutsourcedOrderDetailProcessService.query().eq("lot_id", lot.getId()).orderByDesc("process_step_number").list();
                 //查询报工数据
                 List<BizDaywork> dayworkList = bizDayworkService.getList(daywork);
                 //没有数据表示未开始报工
@@ -818,11 +889,21 @@ public class BizDayworkController extends BaseController {
                     item.setDayworkId(daywork.getId());
                     item = bizDayworkItemService.getList(item).get(0);
                     if (lot.getIsAmend() == 1 || lot.getIsWasteRecycling() == 1) {
-                        BizLotTechnologicalProcessDetail processDetail = bizLotTechnologicalProcessDetailService.getById(item.getTechnologicalProcessDetailId());
-                        item.setProcessStepNumber(processDetail.getProcessStepNumber());
+                        if(!outsourcedOrderDetailProcessList.isEmpty() && item.getProcessStepNumber().compareTo(outsourcedOrderDetailProcessList.get(0).getProcessStepNumber())< 0){
+                            BizLotTechnologicalProcessDetail processDetail = bizLotTechnologicalProcessDetailService.getById(outsourcedOrderDetailProcessList.get(0).getTechnologicalProcessDetailId());
+                            item.setProcessStepNumber(processDetail.getProcessStepNumber());
+                        }else {
+                            BizLotTechnologicalProcessDetail processDetail = bizLotTechnologicalProcessDetailService.getById(item.getTechnologicalProcessDetailId());
+                            item.setProcessStepNumber(processDetail.getProcessStepNumber());
+                        }
                     } else {
-                        BizTechnologicalProcessDetail processDetail = bizTechnologicalProcessDetailService.getById(item.getTechnologicalProcessDetailId());
-                        item.setProcessStepNumber(processDetail.getProcessStepNumber());
+                        if(!outsourcedOrderDetailProcessList.isEmpty() && item.getProcessStepNumber().compareTo(outsourcedOrderDetailProcessList.get(0).getProcessStepNumber())< 0){
+                            BizTechnologicalProcessDetail processDetail = bizTechnologicalProcessDetailService.getById(outsourcedOrderDetailProcessList.get(0).getTechnologicalProcessDetailId());
+                            item.setProcessStepNumber(processDetail.getProcessStepNumber());
+                        }else {
+                            BizTechnologicalProcessDetail processDetail = bizTechnologicalProcessDetailService.getById(item.getTechnologicalProcessDetailId());
+                            item.setProcessStepNumber(processDetail.getProcessStepNumber());
+                        }
                     }
                 } else {
                     item = null;
@@ -1496,6 +1577,9 @@ public class BizDayworkController extends BaseController {
             departments = deptService.selectDeptListByPlanDetailsId(dept);
         }
         List<BizWorkshop> finalWorkShopList = workShopList;
+        depts.forEach(l -> {
+            l.setTurnovers(bizTurnovers.stream().filter(v -> v.getDeptId().equals(l.getDeptId())).collect(Collectors.toList()));
+        });
         departments.forEach(l -> {
             BizWorkshop bizWorkshop = finalWorkShopList.stream().filter(v -> v.getId().equals(l.getWorkshopId())).findFirst().orElse(null);
             l.setWorkshopName(bizWorkshop == null ? null : bizWorkshop.getName());

+ 6 - 3
src/main/java/cn/ezhizao/project/business/controller/BizLotTechnologicalProcessController.java

@@ -633,6 +633,7 @@ public class BizLotTechnologicalProcessController extends BaseController {
     }
     //外协发出,收回,结算方法
     public void updateOutsourcedDeliver(List<BizDayworkItem> newList, List<BizDayworkItem> oldList) {
+        List<BizLotTechnologicalProcessDetail> lotTechnologicalProcessDetailList = bizLotTechnologicalProcessDetailService.query().eq("lot_technological_process_id", newList.get(0).getTechnologicalProcessId()).list();
         //修改outsourceDetail以及outsourceDetailProcess,returnReceiptDetail,outsourceBalanceAccount的数据
         //查询旧的数据时候否存在发往外协的outsourcedDetailId,修改outsourcedDetail表的工艺id,以及outsourcedDetailProcess表的工艺technologicalProcessDetailId
         //发往外协的序
@@ -647,9 +648,11 @@ public class BizLotTechnologicalProcessController extends BaseController {
             //外协发出工序
             List<BizOutsourcedOrderDetailProcess> outsourecdOrderDetailProcessList = bizOutsourcedOrderDetailProcessService.query().in("detail_id", outsourcedDetailIds).list();
             outsourecdOrderDetailProcessList.forEach(item ->{
-                BizDayworkItem bizDayworkItem = newList.stream().filter(v -> v.getProcessStepNumber().equals(item.getProcessStepNumber()) && v.getProcessId().equals(item.getProcessId())).findFirst().orElse(new BizDayworkItem());
-                item.setTechnologicalProcessId(bizDayworkItem.getTechnologicalProcessId());
-                item.setTechnologicalProcessDetailId(bizDayworkItem.getTechnologicalProcessDetailId());
+                BizLotTechnologicalProcessDetail bizLotTechnologicalProcessDetail = lotTechnologicalProcessDetailList.stream().filter(v -> v.getProcessId().equals(item.getProcessId()) && v.getProcessStepNumber().equals(item.getProcessStepNumber())).findFirst().orElse(null);
+                item.setTechnologicalProcessId(bizLotTechnologicalProcessDetail.getLotTechnologicalProcessId());
+                    item.setTechnologicalProcessDetailId(bizLotTechnologicalProcessDetail.getId());
+
+
             });
             bizOutsourcedOrderDetailProcessService.updateBatchById(outsourecdOrderDetailProcessList);
             //收回明细

+ 313 - 2
src/main/java/cn/ezhizao/project/business/controller/BizOutsourcedOrderController.java

@@ -11,6 +11,7 @@ import java.util.Map.Entry;
 import java.util.stream.Collectors;
 import javax.annotation.Resource;
 import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
 import cn.ezhizao.common.utils.PdfUtil;
@@ -110,6 +111,10 @@ public class BizOutsourcedOrderController extends BaseController {
     private IBizFurnaceNoInfoService furnaceNoInfoService;
     @Resource
     private IBizReturnReceiptService bizReturnReceiptService;
+    @Resource
+    private IBizDayworkItemExamineService bizDayworkItemExamineService;
+    @Resource
+    HttpServletRequest request;
 
     /**
      * 查询外协单主
@@ -268,6 +273,15 @@ public class BizOutsourcedOrderController extends BaseController {
         outputStream.close();
     }
 
+    @GetMapping("/innerList")
+    @Log(title = "查询内部外协单", businessType = BusinessType.SELECT)
+    public TableDataInfo innerList(BizOutsourcedOrder bizOutsourcedOrder) throws NoSuchFieldException, IllegalAccessException {
+        setTenantId(bizOutsourcedOrder);
+        startPage();
+        List<BizOutsourcedOrder> list = bizOutsourcedOrderService.getInnerList(bizOutsourcedOrder);
+        return getDataTable(list);
+    }
+
 //    @Log(title = "外协打印", businessType = BusinessType.EXPORT)
 //    @PostMapping("/printDetailPdf")
 //    public void SocialSecurityPdf(BizOutsourcedOrder bizOutsourcedOrder, HttpServletResponse response) throws IOException, TemplateException, freemarker.template.TemplateException {
@@ -405,6 +419,50 @@ public class BizOutsourcedOrderController extends BaseController {
         bizOutsourcedOrder.setDetails(outsourcedOrderDetails);
         return success(bizOutsourcedOrder);
     }
+    @GetMapping(value = "/getInnerOrder")
+    @Log(title = "查询内部外协单详情", businessType = BusinessType.SELECT)
+    public AjaxResult getInnerOrder(BizOutsourcedOrder outsourcedOrder) {
+        BizOutsourcedOrder bizOutsourcedOrder = bizOutsourcedOrderService.getInnerById(outsourcedOrder);
+        BizOutsourcedOrderDetail bizOutsourcedOrderDetail = new BizOutsourcedOrderDetail();
+        bizOutsourcedOrderDetail.setMasterId(outsourcedOrder.getId());
+        List<BizOutsourcedOrderDetail> outsourcedOrderDetails = bizOutsourcedOrderDetailService.getInnerList(bizOutsourcedOrderDetail);
+        //因为新箱子保存的时候,是用“id|code,id|code”的字符串形式存储的所以查询的时候需要进行拆分
+        //如果保存的时候没有选择新箱子则会把旧箱号复制到新箱号中,所有不会有“|”所以下方需要进行判断
+        outsourcedOrderDetails.forEach(detail -> {
+            // 将字符串拆分转为对象
+            List<BizCarrier> carriers = new ArrayList<>();
+            // 因为需要显示箱号,所以需要拆分出code重新拼接到NewCarrier
+            List<String> codeList = new ArrayList<>();
+            // 为了减少前段的逻辑,所以需要先将拆分后的id也拼接起来
+            List<Long> carrierIds = new ArrayList<>();
+
+            //使用 StringTokenizer 来分割字符串
+            StringTokenizer tokenizer = new StringTokenizer(detail.getNewCarrier(), ",");
+            while (tokenizer.hasMoreTokens()) {
+                String token = tokenizer.nextToken();
+                // 检查当前 token 是否包含 "|" 字符 如果没有表示不是新箱,则跳过当前 token
+                if (token.contains("|")) {
+                    String[] idCode = token.split("\\|"); // 安全地分割 token
+                    if (idCode.length == 2) {
+                        codeList.add(idCode[1]);
+                        carrierIds.add(Long.parseLong(idCode[0]));
+                        BizCarrier bizCarrier = new BizCarrier();
+                        bizCarrier.setId(Long.parseLong(idCode[0]));
+                        bizCarrier.setCode(idCode[1]);
+                        carriers.add(bizCarrier);
+                    }
+                }
+            }
+            detail.setNewCarriers(carriers);
+            detail.setCarrierIds(carrierIds);
+            if (codeList.size() > 0) {
+                detail.setNewCarrier(String.join(",", codeList));
+            }
+
+        });
+        bizOutsourcedOrder.setDetails(outsourcedOrderDetails);
+        return success(bizOutsourcedOrder);
+    }
 
     @GetMapping(value = "/getFirst/{id}")
     @Log(title = "查询首序外协详情", businessType = BusinessType.SELECT)
@@ -464,6 +522,7 @@ public class BizOutsourcedOrderController extends BaseController {
         return getDataTable(list);
     }
 
+
     /**
      * 新增外协单主
      * 带箱方式,是整单的。如果换新箱子,明细中,都需要更换箱子
@@ -553,7 +612,8 @@ public class BizOutsourcedOrderController extends BaseController {
     @PostMapping("/submitDetails")
     @Transactional
     public AjaxResult submitDetails(@RequestBody BizOutsourcedOrder bizOutsourcedOrder) throws NoSuchFieldException, IllegalAccessException {
-        setTenantId(bizOutsourcedOrder);
+        String tenantId = request.getHeader("tenantId");
+        bizOutsourcedOrder.setTenantId(Long.valueOf(tenantId));
         Boolean isFirst = true;
         //若有id,则说将之前的明细删除不生成新的单号
         if (bizOutsourcedOrder.getId() != null) {
@@ -747,12 +807,215 @@ public class BizOutsourcedOrderController extends BaseController {
         bizOutsourcedOrderDetailProcessService.updateOrSave(newDetaillist);
         return success();
     }
+    @Log(title = "内部外协发出单", businessType = BusinessType.INSERT)
+    @PostMapping("/submitInnerDetails")
+    @Transactional
+    public AjaxResult submitInnerDetails(@RequestBody BizOutsourcedOrder bizOutsourcedOrder) throws NoSuchFieldException, IllegalAccessException {
+        bizOutsourcedOrder.setTenantId(SecurityUtils.getLoginUser().getTenantId());
+        Boolean isFirst = true;
+        //若有id,则说将之前的明细删除不生成新的单号
+        if (bizOutsourcedOrder.getId() != null) {
+            isFirst = false;
+            List<Long> ids = new ArrayList<>();
+            ids.add(bizOutsourcedOrder.getId());
+//            //删除dayworkItem表
+//            List<Long> detailIds = bizOutsourcedOrderDetailService.query().eq("master_id", bizOutsourcedOrder.getId()).list().stream().map(BizOutsourcedOrderDetail::getId).collect(Collectors.toList());
+//            List<BizDayworkItem> oldItems = bizDayworkItemService.selectItemByOutsourcedDetailIds(detailIds);
+//            bizDayworkItemService.removeBatchByIds(oldItems);
+        } else {
+            /* 生成单号 */
+            SimpleDateFormat dateFormat = new SimpleDateFormat("yy"); // 定义日期格式
+            String formattedDate = dateFormat.format(new Date());
+            String codeValue;
+            String codeType = "outsourcedOrderCode";
+            //查询redis中外协单号的值
+            String previous = redisCache.hasKey(codeType) ? redisCache.getCacheObject(codeType) : "";
+            //若不存在,则直接存入
+            if (previous.isEmpty()) {
+                //如果没有数据再去数据库中查询该类型的流水号是否存在,如果存在找到最新一条,
+                // 在最新一条基础上进行继续追加并存到redias中,如果数据库中也没有该类型的流水号再从00001开始
+                List<BizOutsourcedOrder> outsourcedOrderDetailList = bizOutsourcedOrderService.getAllList();
+                if(!outsourcedOrderDetailList.isEmpty()){
+                    codeValue = outsourcedOrderDetailList.get(0).getFormCode();
+                    int lastFourDigits = Integer.parseInt(codeValue.substring(5, 10));
+                    lastFourDigits += 1; // 加1
+                    codeValue = codeValue.substring(0, 5) + String.format("%05d", lastFourDigits);
+                    previous = codeValue;
+                }else{
+                    previous = ("WFD" + formattedDate + "00001");
+                }
+            } else {
+                codeValue = previous;
+                int lastFourDigits = Integer.parseInt(codeValue.substring(5, 10));
+                lastFourDigits += 1; // 加1
+                codeValue = codeValue.substring(0, 5) + String.format("%05d", lastFourDigits);
+                previous = codeValue;
+            }
+            //存到redis中
+            redisCache.setCacheObject(codeType, previous);
+            bizOutsourcedOrder.setFormCode(previous);
+            generateQrCodeImg(bizOutsourcedOrder.getFormCode(), bizOutsourcedOrder.getFormCode(), bizOutsourcedOrder);
+            generateBarCodeImg(bizOutsourcedOrder.getFormCode(), bizOutsourcedOrder.getFormCode(), bizOutsourcedOrder);
+        }
+        bizOutsourcedOrder.setIsSubmit(1);
+        //新增明细信息
+        List<BizOutsourcedOrderDetail> outsourcedOrderDetails = bizOutsourcedOrder.getDetails();
+        //绑定的新箱子集合
+        List<BizDayworkCarrier> carrierList = new ArrayList<>();
+        List<String> originalCarrierCodeList = outsourcedOrderDetails.stream()
+                .map(item -> Arrays.asList(item.getOriginalCarrier().split(","))) // 将每个元素的字符串拆分并封装为List
+                .flatMap(List::stream) // 将所有拆分后的字符串扁平化为一个流
+                .collect(Collectors.toList());
+        List<Long> orginalDayworkIds = outsourcedOrderDetails.stream().map(BizOutsourcedOrderDetail::getDayworkId).collect(Collectors.toList());
+        List<BizDayworkCarrier> orignalCarrierList = iBizDayworkCarrierService.query().eq("is_changed", 0).in("carrier_code", originalCarrierCodeList).in("daywork_id", orginalDayworkIds).list();
+
+        //绑定新箱子
+        outsourcedOrderDetails.forEach(detail -> {
+            detail.setSettlementType(bizOutsourcedOrder.getSettlementType());
+            detail.setPackagingMethod(bizOutsourcedOrder.getPackagingMethod());
+            detail.setDeliveryMethod(bizOutsourcedOrder.getDeliveryMethod());
+            /**
+             * 与暂存逻辑类似,但因为是彻底保存提交了,所以需要解绑原先的箱子,并且在没有新箱子时,需要将原先箱号复制到新箱号中
+             */
+            if (detail.getNewCarriers().size() > 0) {
+                //这一步将绑定的新箱子以“id|code”一组,以英文“,”分割(例:1|A,2|B,3|C)
+                String formattedString = detail.getNewCarriers().stream()
+                        .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();
+                    bizDayworkCarrier.setCarrierId(carrier.getId());
+                    bizDayworkCarrier.setCarrierCode(carrier.getCode());
+                    bizDayworkCarrier.setDayworkId(detail.getDayworkId());
+                    bizDayworkCarrier.setLotId(detail.getLotId());
+                    carrierList.add(bizDayworkCarrier);
+                });
+            } else {
+                //将原箱号复制到新新箱号
+                //如果没点换箱,用的原箱,也要像新箱那种方式存,为了拿到newCarriers
+                List<String> detailOriginalCarriers = Arrays.stream(detail.getOriginalCarrier().split(",")).collect(Collectors.toList());
+                List<BizCarrier> orignialCarries = new ArrayList<>();
+                for (int i = 0; i < detailOriginalCarriers.size(); i++) {
+                    for (int j = 0; j < orignalCarrierList.size(); j++) {
+                        if (detailOriginalCarriers.get(i).equals(orignalCarrierList.get(j).getCarrierCode())) {
+                            BizCarrier bizCarrier = new BizCarrier();
+                            bizCarrier.setCode(orignalCarrierList.get(j).getCarrierCode());
+                            bizCarrier.setId(orignalCarrierList.get(j).getCarrierId());
+                            orignialCarries.add(bizCarrier);
+                        }
+                    }
+                }
+                String formattedString = orignialCarries.stream()
+                        .map(item -> item.getId() + "|" + item.getCode())
+                        .distinct().collect(Collectors.joining(","));
+                detail.setNewCarrier(formattedString);
+                detail.setNewCarrierName(orignialCarries.stream()
+                        .map(BizCarrier::getCode)
+                        .distinct().collect(Collectors.joining(",")));
+                // detail.setNewCarrier(detail.getOriginalCarrier());
+            }
+        });
+        List<BizOutsourcedRecords> outsourcedRecordsList = new ArrayList<>();
+        Date now = new Date();
+        // 创建一个 SimpleDateFormat 对象,并设置所需的日期格式
+        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        // 格式化 Date 对象
+        String formattedDate = dateFormat.format(now);
+        // 创建一个 SimpleDateFormat 对象,并设置所需的日期格式
+        //保存修改记录
+        outsourcedOrderDetails.forEach(detail -> {
+            BizOutsourcedRecords saveRecords = new BizOutsourcedRecords();
+            saveRecords.setUserName(SecurityUtils.getLoginUser().getUser().getUserName());
+            saveRecords.setNickName(SecurityUtils.getLoginUser().getUser().getNickName());
+            if (bizOutsourcedOrder.getId() == null) {
+                saveRecords.setMethod("创建");
+            } else {
+                saveRecords.setMethod("修改");
+            }
+            saveRecords.setFormCode(bizOutsourcedOrder.getFormCode());
+            saveRecords.setSupplierId(bizOutsourcedOrder.getSupplierId());
+            saveRecords.setSupplierName(bizOutsourcedOrder.getSupplierName());
+            saveRecords.setLotId(detail.getLotId());
+            saveRecords.setLotCode(detail.getLotCode());
+            saveRecords.setProductDescription(detail.getProductDescription());
+            saveRecords.setProductNum(detail.getProductNum());
+            if (detail.getNewCarriers().size() > 0) {
+                saveRecords.setNewCarrier(detail.getNewCarriers().stream()
+                        .map(BizCarrier::getCode)
+                        .collect(Collectors.joining(",")));
+            } else {
+                saveRecords.setNewCarrier(detail.getOriginalCarrier());
+            }
+            saveRecords.setProcessNames(detail.getProcessNames());
+            saveRecords.setIsPackage(detail.getIsPackage());
+            saveRecords.setStartTime(new Date());
+            outsourcedRecordsList.add(saveRecords);
+        });
+        //修改主表信息
+        bizOutsourcedOrderService.saveOrUpdate(bizOutsourcedOrder);
+        outsourcedRecordsList.forEach(item -> {
+            item.setMasterId(bizOutsourcedOrder.getId());
+        });
+        bizOutsourcedRecordsService.saveBatch(outsourcedRecordsList);
+
+
+        //判断是否使用新箱子
+        //根据 detail.getNewCarriers()判断是否绑定了新箱子,如果有数据表示绑定新箱子,找出对应的dayworkId,解绑对应的箱子
+        List<Long> dayworkIds = outsourcedOrderDetails.stream().filter(detail -> detail.getNewCarriers().size() > 0).map(BizOutsourcedOrderDetail::getDayworkId).collect(Collectors.toList());
+        if (dayworkIds.size() > 0) {
+            //解绑箱,不包括外协箱
+            int i = iBizDayworkCarrierService.changedCarrierStatus(dayworkIds);
+        }
+
+        iBizDayworkCarrierService.saveBatch(carrierList);
+        //下序是否签票
+        bizDayworkItemExamineService.updateOrSave(outsourcedOrderDetails, bizOutsourcedOrder);
+        outsourcedOrderDetails = bizOutsourcedOrderDetailService.updateOrSave(outsourcedOrderDetails, bizOutsourcedOrder);
+        List<BizOutsourcedOrderDetail> oldDetailList = bizOutsourcedOrderDetailService.query().eq("master_id", bizOutsourcedOrder.getId()).list();
+        //删除或修改收回明细(通过工序判断,如果工序变了,如果已经填写了收回单,则删除收回单该批次的明细,如果只是修改了箱号,则编辑回收单该批次的明细)
+        bizReturnReceiptDetailService.removeOrEditDetails(outsourcedOrderDetails, oldDetailList);
+        //修改外协明细表
+        saveOrUpdateBatch(bizOutsourcedOrderDetailService,outsourcedOrderDetails,oldDetailList);
+        //新建发出单时,对dayworkItem保存
+        if(isFirst) {
+            List<BizDaywork> dayworkList =bizDayworkItemService.saveDayworkItemForInnerOutsource(outsourcedOrderDetails,bizOutsourcedOrder);
+            if(dayworkList.size()>0){
+                //修改报工工段及下序投产数
+                bizDayworkService.updateBatchById(dayworkList);
+            }
+        }else{
+            //对发出单进行编辑,则需要判断
+           List<BizDaywork> dayworkList = bizDayworkItemService.updateDayworkItemForInnerOutsource(outsourcedOrderDetails,oldDetailList,bizOutsourcedOrder);
+           if(dayworkList.size()>0){
+               //修改报工工段及下序投产数
+               bizDayworkService.updateBatchById(dayworkList);
+           }
+        }
+        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);
+        return success();
+    }
 
     @Log(title = "首序外协保存方法", businessType = BusinessType.INSERT)
     @PostMapping("/submitDetailsOnFirst")
     @Transactional
     public AjaxResult submitDetailsOnFirst(@RequestBody BizOutsourcedOrder bizOutsourcedOrder) throws NoSuchFieldException, IllegalAccessException {
-        setTenantId(bizOutsourcedOrder);
+        bizOutsourcedOrder.setTenantId(SecurityUtils.getLoginUser().getTenantId());
         //若有id,则说将之前的明细删除不生成新的单号
 //        List<BizOutsourcedOrderDetail> insertDetail = new ArrayList<>();
 //        List<BizOutsourcedOrderDetail> updateDetail = new ArrayList<>();
@@ -832,6 +1095,7 @@ public class BizOutsourcedOrderController extends BaseController {
             daywork.setIsAmend(lot != null ? lot.getIsAmend() : null);
             daywork.setIsWasteRecycling(lot != null ? lot.getIsWasteRecycling() : null);
             daywork.setId(snowflakeIdWorker.nextId());
+            daywork.setTenantId(SecurityUtils.getLoginUser().getTenantId());
             dayworks.add(daywork);
             BizOutsourcedRecords record = new BizOutsourcedRecords();
             record.setMasterId(bizOutsourcedOrder.getId());
@@ -890,6 +1154,7 @@ public class BizOutsourcedOrderController extends BaseController {
                 item.setTechnologicalProcessDetailId(v.getTechnologicalProcessDetailId());
                 item.setIsWx(1);
                 item.setNickName(bizOutsourcedOrder.getSupplierName());
+                item.setTenantId(SecurityUtils.getLoginUser().getTenantId());
                 items.add(item);
             });
 
@@ -1010,6 +1275,7 @@ public class BizOutsourcedOrderController extends BaseController {
             item.setProductionPlanDetailId(v.getDetail().getProductionPlanDetailId());
             item.setTechnologicalProcessId(v.getDetail().getTechnologicalProcessId());
             item.setTechnologicalProcessDetailId(v.getTechnologicalProcessDetailId());
+            item.setTenantId(SecurityUtils.getLoginUser().getTenantId());
             item.setIsWx(1);
             items.add(item);
         });
@@ -1269,6 +1535,49 @@ public class BizOutsourcedOrderController extends BaseController {
         //删除主表信息
         return toAjax(bizOutsourcedOrderService.removeBatchByIds(ids));
     }
+    @Log(title = "外协单主带箱方式,是整单的。如果换新箱子,明细中,都需要更换箱子", businessType = BusinessType.DELETE)
+    @DeleteMapping("/delInnerOrder/{ids}")
+    @Transactional
+    public AjaxResult delInnerOrder(@PathVariable List<Long> ids) {
+        //删除表,如果有报工数据,则不能删除
+        Boolean flag = false;
+        List<BizOutsourcedOrderDetail> outsourcedDetailList = bizOutsourcedOrderDetailService.query().in("master_id", ids).list();
+        List<Long> outsourcedDetailIds = outsourcedDetailList.stream().map(BizOutsourcedOrderDetail::getId).collect(Collectors.toList());
+        //德迈仕审核,flag为true
+        List<BizDayworkItem> dayworkItemList = bizDayworkItemService.query().in("outsource_detail_id", outsourcedDetailIds).list();
+        flag = dayworkItemList.stream().filter(v->v.getStatus().equals("0")||v.getStatus().equals("1") || v.getStatus().equals("2")||v.getStatus().equals("3")).collect(Collectors.toList()).isEmpty()?false:true;
+        if(flag) {
+            return error("发出单内的批次存在报工数据,不能删除!");
+        }
+        //删除收回单明细及收回单主表信息
+        bizReturnReceiptDetailService.removeByMasterIds(ids);
+        //删除明细信息
+        bizOutsourcedOrderDetailService.removeByMasterIds(ids);
+        //删除报工信息
+        bizDayworkItemService.removeByOutsourceIds(outsourcedDetailIds);
+        //修改daywork的工段数据及合格数
+        List<Long> dayworkIds = dayworkItemList.stream().map(BizDayworkItem::getDayworkId).distinct().collect(Collectors.toList());
+        List<BizDaywork> dayworkList = bizDayworkService.query().in("id", dayworkIds).list();
+        List<BizDayworkItem> bizDayworkItemList = bizDayworkItemService.query().in("daywork_id", dayworkIds).list();
+        for(BizDaywork daywork:dayworkList) {
+            BizDayworkItem lastDayworkItem = bizDayworkItemList.stream()
+                    .filter(v -> v.getDayworkId().equals(daywork.getId()))
+                    .sorted(Comparator.comparing(BizDayworkItem::getProcessStepNumber).reversed())
+                    .sorted(Comparator.comparing(BizDayworkItem::getCreateTime).reversed()).findFirst().orElse(null);
+            daywork.setDeptId(lastDayworkItem.getDeptId());
+            List<BizDayworkItem> lastDayworkItemList = bizDayworkItemList.stream()
+                    .filter(v -> v.getDayworkId().equals(daywork.getId()) && v.getProcessStepNumber().equals(lastDayworkItem.getProcessStepNumber()) && (v.getStatus().equals("2") || v.getStatus().equals("3"))).collect(Collectors.toList());
+            int sum = lastDayworkItemList.stream().mapToInt(BizDayworkItem::getQualifiedNum).sum();
+            daywork.setProcessQualifiedNum(sum);
+            daywork.setTemporaryProcessQualifiedNum(sum);
+        }
+        bizDayworkService.updateBatchById(dayworkList);
+        //删除明细对应的工序
+        bizOutsourcedOrderDetailProcessService.removeByMasterIds(ids);
+
+        //删除主表信息
+        return toAjax(bizOutsourcedOrderService.removeBatchByIds(ids));
+    }
 
     @Log(title="删除外协首序外协的外协单", businessType = BusinessType.DELETE)
     @DeleteMapping("/removeForFirst/{ids}")
@@ -1466,6 +1775,7 @@ public class BizOutsourcedOrderController extends BaseController {
             daywork.setIsWaste(lot != null ? lot.getIsWaste() : null);
             daywork.setIsAmend(lot != null ? lot.getIsAmend() : null);
             daywork.setIsWasteRecycling(lot != null ? lot.getIsWasteRecycling() : null);
+            daywork.setTenantId(SecurityUtils.getLoginUser().getTenantId());
             daywork.setId(snowflakeIdWorker.nextId());
             dayworks.add(daywork);
             BizOutsourcedRecords record = new BizOutsourcedRecords();
@@ -1524,6 +1834,7 @@ public class BizOutsourcedOrderController extends BaseController {
                 item.setTechnologicalProcessId(l.getTechnologicalProcessId());
                 item.setTechnologicalProcessDetailId(v.getTechnologicalProcessDetailId());
                 item.setIsWx(1);
+                item.setTenantId(SecurityUtils.getLoginUser().getTenantId());
                 item.setNickName(finalBizOutsourcedOrder.getSupplierName());
                 items.add(item);
             });

+ 58 - 0
src/main/java/cn/ezhizao/project/business/controller/BizOutsourcedRecordsController.java

@@ -101,6 +101,64 @@ public class BizOutsourcedRecordsController extends BaseController
         }
         return getDataTable(details);
     }
+    @GetMapping("/innerList")
+    @Log(title = "查询外协发出单历史记录列表", businessType = BusinessType.SELECT)
+    public TableDataInfo innerList(BizOutsourcedRecords bizOutsourcedRecords) throws NoSuchFieldException, IllegalAccessException {
+        List<BizOutsourcedRecords> list = bizOutsourcedRecordsService.getList(bizOutsourcedRecords);
+        // 提取 startTime 并对其进行排序
+        List<String> sortedStartTimes = list.stream()
+                .map(v -> new DateTime(v.getStartTime()).toString("yyyy-MM-dd HH:mm:ss"))
+                .distinct()
+                .sorted(Comparator.reverseOrder()) // 默认升序排序,如果要降序,可以使用 sorted(Comparator.reverseOrder())
+                .collect(Collectors.toList());
+
+// 使用 LinkedHashMap 来保持插入顺序
+        Map<String, List<BizOutsourcedRecords>> groupedByTime = new LinkedHashMap<>();
+
+// 遍历排序后的 startTime 列表进行分组
+        for (String startTime : sortedStartTimes) {
+            groupedByTime.put(startTime, list.stream()
+                    .filter(record -> new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(record.getStartTime()).equals(startTime))
+                    .collect(Collectors.toList()));
+        }
+        List<BizOutsourcedRecords> details = new ArrayList<>();
+        for (Map.Entry<String, List<BizOutsourcedRecords>> entry : groupedByTime.entrySet()) {
+            BizOutsourcedRecords outsourcedRecords = new BizOutsourcedRecords();
+            String startTime = entry.getKey();
+            List<BizOutsourcedRecords> info = entry.getValue();
+
+            // 假设每个分组中 userName 是唯一的,我们取第一个记录的 userName
+            String userName = info.get(0).getUserName();
+            String nickName = info.get(0).getNickName();
+            String method = info.get(0).getMethod();
+            String formCode = info.get(0).getFormCode();
+            String supplierName = info.get(0).getSupplierName();
+            List<BizOutsourcedRecords> recordsList = new ArrayList<>();
+            String result = info.stream()
+                    .map(item -> String.format(
+                            "%s,%s,%d,%s,%s,%s",
+                            item.getLotCode(),
+                            item.getProductDescription(),
+                            item.getProductNum(),
+                            item.getNewCarrier(),
+                            item.getProcessNames(),
+                            item.getIsPackage() == 0 ? "否" : "是"
+                    )) // 在每个对象后添加分号
+                    .collect(Collectors.joining(";"));
+            // 构建格式化字符串
+            StringBuilder formattedString = new StringBuilder();
+            formattedString.append(userName).append(",");
+            formattedString.append(nickName).append(",");
+            formattedString.append(startTime).append(",");
+            formattedString.append(method).append(",");
+            formattedString.append(formCode).append(",");
+            formattedString.append(supplierName).append(",");
+            formattedString.append("明细:{").append(result).append("}");
+            outsourcedRecords.setRecords(String.valueOf(formattedString));
+            details.add(outsourcedRecords);
+        }
+        return getDataTable(details);
+    }
     /**
      * 导出外协发出单历史记录列表
      */

+ 22 - 0
src/main/java/cn/ezhizao/project/business/controller/BizProductInspectionInstructionController.java

@@ -1,5 +1,6 @@
 package cn.ezhizao.project.business.controller;
 
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 import java.util.stream.Collector;
@@ -16,8 +17,10 @@ import cn.ezhizao.framework.web.domain.AjaxResult;
 import cn.ezhizao.framework.web.page.TableDataInfo;
 import cn.ezhizao.project.business.domain.BizDayworkItem;
 import cn.ezhizao.project.business.domain.BizDayworkItemReject;
+import cn.ezhizao.project.business.domain.BizInspectionInstruction;
 import cn.ezhizao.project.business.service.IBizDayworkItemRejectService;
 import cn.ezhizao.project.business.service.IBizDayworkItemService;
+import cn.ezhizao.project.business.service.IBizInspectionInstructionService;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -47,6 +50,8 @@ public class BizProductInspectionInstructionController extends BaseController
     @Resource
     private IBizDayworkItemService bizDayworkItemService;
     @Resource
+    private IBizInspectionInstructionService bizInspectionInstructionService;
+    @Resource
     HttpServletRequest request;
 
     /**
@@ -63,6 +68,23 @@ public class BizProductInspectionInstructionController extends BaseController
         return getDataTable(list);
     }
 
+    @GetMapping("/getAllInspection")
+    @Log(title = "获取所有分选检查标准", businessType = BusinessType.SELECT)
+    public TableDataInfo getAllInspection ()  {
+        TableDataInfo info = new TableDataInfo();
+        List< BizInspectionInstruction> bizInspectionInstructions = bizInspectionInstructionService.query().list();
+        List<BizProductInspectionInstruction> productInspectionInstructionList = new ArrayList<>();
+        bizInspectionInstructions.forEach(l -> {
+            BizProductInspectionInstruction item = new BizProductInspectionInstruction();
+            item.setInspectionInstructionId(l.getId());
+            item.setStandard(l.getStandard());
+            item.setType(l.getType());
+            productInspectionInstructionList.add(item);
+        });
+        info.setRows(productInspectionInstructionList);
+        return info;
+    }
+
     /**
      * 导出产品配置分选标准、检测指导项列表
      */

+ 14 - 0
src/main/java/cn/ezhizao/project/business/controller/BizReturnReceiptController.java

@@ -6,6 +6,7 @@ import java.util.*;
 import java.util.concurrent.atomic.AtomicReference;
 import java.util.stream.Collectors;
 import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
 import cn.ezhizao.common.utils.poi.ExcelUtil;
@@ -66,6 +67,10 @@ public class BizReturnReceiptController extends BaseController
     private RedisCache redisCache;
     @Resource
     private IBizOutsourceBalanceAccountService bizOutsourceBalanceAccountService;
+    @Resource
+    private IBizDayworkCarrierService bizDayworkCarrierService;
+    @Resource
+    HttpServletRequest request;
 
     final private String processInspectionNoKey = "processInspectionCode";
 
@@ -125,6 +130,8 @@ public class BizReturnReceiptController extends BaseController
         List<BizProcessInspecion> processInspection = bizProcessInspecionService.query().in("outsource_order_detail_id", outsourceDetailIds.isEmpty() ? Collections.singletonList(0L) : outsourceDetailIds).list();
         List<BizOutsourcedOrderDetail> list = bizOutsourcedOrderDetailService.query().in("id", outsourceDetailIds).list();
         List<BizOutsourceBalanceAccount> balanceAccounts = bizOutsourceBalanceAccountService.query().eq("return_receipt_id", id).list();
+        List<BizDayworkCarrier> carriers = bizDayworkCarrierService.query().eq("is_changed", 0).in("daywork_id", returnReceiptDetails.stream().map(BizReturnReceiptDetail::getDayworkId).collect(Collectors.toList())).list();
+
         returnReceiptDetails.forEach(item -> {
             if(item.getIsAudit()==0) {
                 item.setAuditNum(item.getReceiptNum());
@@ -141,6 +148,7 @@ public class BizReturnReceiptController extends BaseController
                     item.setProductionDeptId(info.getProductionDeptId());
                 }
             });
+            item.setUnbind(carriers.stream().anyMatch(t -> t.getDayworkId().equals(item.getDayworkId())) ? 0 : 1);
         });
         List<BizOutsourcedOrderDetailProcess> detailProcesses = bizOutsourcedOrderDetailProcessService.query()
                 .in("detail_id", outsourceDetailIds)
@@ -180,6 +188,7 @@ public class BizReturnReceiptController extends BaseController
                     info.setProductionDeptId(item.getProductionDeptId());
                 }
             });
+            info.setUnbind(detailList.get(0).getUnbind());
             info.setNewCarrier(detailList.get(0).getNewCarrier());
             info.setRemark(detailList.get(0).getRemark());
             info.setIsApproved(detailList.stream().allMatch(v -> v.getIsApproved() == 1) ? 1 : 0);
@@ -231,6 +240,8 @@ public class BizReturnReceiptController extends BaseController
 //    @PostMapping("/new")
     @PostMapping
     public AjaxResult addNew(@RequestBody BizReturnReceipt bizReturnReceipt) throws NoSuchFieldException, IllegalAccessException, ParseException {
+        String tenantId = request.getHeader("tenantId");
+        bizReturnReceipt.setTenantId(Long.valueOf(tenantId));
         // 判断是否有processes
         // 假设没有加个假的processes
         List<String> codes = new ArrayList<>();
@@ -559,6 +570,8 @@ public class BizReturnReceiptController extends BaseController
     @Transactional
     @PutMapping
     public AjaxResult editNew(@RequestBody BizReturnReceipt bizReturnReceipt) throws NoSuchFieldException, IllegalAccessException, ParseException {
+        String tenantId = request.getHeader("tenantId");
+        bizReturnReceipt.setTenantId(Long.valueOf(tenantId));
         // 判断是否有processes
         // 假设没有加个假的processes
         List<String> codes = new ArrayList<>();
@@ -599,6 +612,7 @@ public class BizReturnReceiptController extends BaseController
             bizReturnReceiptDetail.setFormDate(bizReturnReceipt.getFormDate());
             bizReturnReceiptDetail.setIsAudit(1);
             bizReturnReceiptDetail.setIsApproved(processCodes.stream().noneMatch(e -> bizReturnReceiptDetail.getProcessCode().equals(e)) ? 1 : 0);
+            bizReturnReceiptDetail.setCarriers(carrierList.stream().filter(e -> bizReturnReceiptDetail.getNewCarrier().contains(e.getCode())).collect(Collectors.toList()));
             for(BizDayworkItem item: dayworkItem) {
                 if (item.getDayworkId().equals(bizReturnReceiptDetail.getDayworkId())&&item.getProcessStepNumber().equals(bizReturnReceiptDetail.getProcessStepNumber()) && item.getLotId().equals(bizReturnReceiptDetail.getLotId())) {
                     item.setStatus("3");

+ 36 - 8
src/main/java/cn/ezhizao/project/business/controller/BizReturnReceiptDetailController.java

@@ -17,14 +17,10 @@ import cn.ezhizao.framework.aspectj.lang.enums.BusinessType;
 import cn.ezhizao.framework.web.controller.BaseController;
 import cn.ezhizao.framework.web.domain.AjaxResult;
 import cn.ezhizao.framework.web.page.TableDataInfo;
-import cn.ezhizao.project.business.domain.BizDayworkItem;
-import cn.ezhizao.project.business.domain.BizOutsourcedOrderDetail;
-import cn.ezhizao.project.business.domain.BizOutsourcedOrderDetailProcess;
-import cn.ezhizao.project.business.domain.BizReturnReceiptDetail;
-import cn.ezhizao.project.business.service.IBizDayworkItemService;
-import cn.ezhizao.project.business.service.IBizDayworkService;
-import cn.ezhizao.project.business.service.IBizOutsourcedOrderDetailProcessService;
-import cn.ezhizao.project.business.service.IBizReturnReceiptDetailService;
+import cn.ezhizao.project.business.domain.*;
+import cn.ezhizao.project.business.service.*;
+import cn.ezhizao.project.system.domain.SysDept;
+import cn.ezhizao.project.system.service.ISysDeptService;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -55,6 +51,12 @@ public class BizReturnReceiptDetailController extends BaseController
     private IBizDayworkService bizDayworkService;
     @Resource
     private IBizOutsourcedOrderDetailProcessService bizOutsourcedOrderDetailProcessService;
+    @Resource
+    private ISysDeptService sysDeptService;
+    @Resource
+    private IBizOutsourcedOrderService bizOutsourcedOrderService;
+    @Resource
+    private IBizOutsourcedOrderDetailService bizOutsourcedOrderDetailService;
 
     /**
      * 查询外协单从列表
@@ -112,6 +114,32 @@ public class BizReturnReceiptDetailController extends BaseController
         setTenantId(bizReturnReceiptDetail);
         return toAjax(bizReturnReceiptDetailService.save(bizReturnReceiptDetail));
     }
+    @Log(title = "判断当前工段发出单是否都收回", businessType = BusinessType.INSERT)
+    @PostMapping("/checkReturnReceiptDetail")
+    public AjaxResult checkReturnReceiptDetail(@RequestBody SysDept sysDept) throws NoSuchFieldException, IllegalAccessException
+    {
+        Boolean flag = true;
+        SysDept oldDept =  sysDeptService.selectDeptById(sysDept.getDeptId());
+        //切换外协商
+        if(!oldDept.getSupplierId().equals(sysDept.getSupplierId())){
+            List<BizOutsourcedOrder> outsourcedOrderList = bizOutsourcedOrderService.query().eq("supplier_id", oldDept.getSupplierId()).eq("outsource_dept_id", oldDept.getDeptId()).list();
+            if(outsourcedOrderList.isEmpty()){
+                return success(flag);
+            }
+            //发出单明细
+            List<BizOutsourcedOrderDetail> outsourcedOrderDetailList = bizOutsourcedOrderDetailService.query().in("master_id", outsourcedOrderList.stream().map(BizOutsourcedOrder::getId).collect(Collectors.toList())).list();
+            List<BizReturnReceiptDetail> returnReceiptDetailList = bizReturnReceiptDetailService.query().in("outsource_detail_id", outsourcedOrderDetailList.stream().map(BizOutsourcedOrderDetail::getId).collect(Collectors.toList())).list();
+            long count = returnReceiptDetailList.stream().map(BizReturnReceiptDetail::getOutsourceDetailId).distinct().count();
+            if(count == outsourcedOrderDetailList.size()){
+                return success(flag);
+            }else{
+                flag = false;
+                return success(flag);
+            }
+
+        }
+        return success(flag);
+    }
 
     /**
      * 修改外协单从

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

@@ -1,5 +1,6 @@
 package cn.ezhizao.project.business.controller;
 
+import cn.ezhizao.common.utils.SecurityUtils;
 import cn.ezhizao.common.utils.poi.ExcelUtil;
 import cn.ezhizao.framework.aspectj.lang.annotation.Log;
 import cn.ezhizao.framework.aspectj.lang.enums.BusinessType;
@@ -351,9 +352,11 @@ public class BizReturnTurnoverController extends BaseController {
         newBizDayworkItem.setNickName("外协");
         newBizDayworkItem.setStartTime(new Date());
         newBizDayworkItem.setTurnoverType("2");
+        newBizDayworkItem.setIsWx(1);
         newBizDayworkItem.setTurnoverArea("外协周转区");
         newBizDayworkItem.setFromDeptId(lastDayworkItem.getDeptId());
         newBizDayworkItem.setFromDeptName(lastDayworkItem.getDeptName());
+        newBizDayworkItem.setTenantId(SecurityUtils.getLoginUser().getTenantId());
         bizDayworkItemService.save(newBizDayworkItem);
         //修改daywork主表数据
 
@@ -486,6 +489,7 @@ public class BizReturnTurnoverController extends BaseController {
             item.setTechnologicalProcessId(lastDayworkItem.getTechnologicalProcessId());
             item.setTechnologicalProcessDetailId(lastDayworkItem.getTechnologicalProcessDetailId());
             item.setProcessStepNumber(lastDayworkItem.getProcessStepNumber());
+            item.setIsWx(1);
             item.setProcessId(lastDayworkItem.getProcessId());
             item.setDeptId(l.getProductionDeptId());
             item.setDeptName(l.getProductionDeptName());
@@ -497,6 +501,7 @@ public class BizReturnTurnoverController extends BaseController {
             item.setIsWx(1);
             item.setFromDeptId(lastDayworkItem.getDeptId());
             item.setFromDeptName(lastDayworkItem.getDeptName());
+            item.setTenantId(SecurityUtils.getLoginUser().getTenantId());
             addItems.add(item);
 
             //修改daywork主表数据

+ 2 - 0
src/main/java/cn/ezhizao/project/business/domain/BizDaywork.java

@@ -343,6 +343,8 @@ public class BizDaywork extends BaseEntity {
     private String outsourceFormNo;
     @TableField(exist = false)
     private Integer isHistory;
+    @TableField(exist = false)
+    private BizDayworkItem lastDayworkItem;
 
     public BizDaywork() {}
 

+ 6 - 0
src/main/java/cn/ezhizao/project/business/domain/BizOutsourcedOrder.java

@@ -130,5 +130,11 @@ public class BizOutsourcedOrder extends BaseEntity
     @Excel(name = "条形码地址")
     @ApiModelProperty(value = "条形码地址")
     private String barcodeUrl;
+    private Integer isInnerOutsource;
+    @TableField(exist = false)
+    private String deptName;
+    private Long outsourceDeptId;
+    @TableField(exist = false)
+    private String outsourceDeptName;
 
 }

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

@@ -220,6 +220,20 @@ public class BizOutsourcedOrderDetail extends BaseEntity
     private Integer inspectionStatus;
     @TableField(exist = false)
     private String returnFormCode;
+    @TableField(exist = false)
+    private String processAlias;
+    @TableField(exist = false)
+    private Long processId;
+    @TableField(exist = false)
+    private Long outsourceDeptId;
+    @TableField(exist = false)
+    private String outsourceDeptName;
+    @TableField(exist = false)
+    private Integer isPackage;
+    @TableField(exist = false)
+    private Boolean hasNextInfo;
+
+
     public BizOutsourcedOrderDetail() {
         super();
     }

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

@@ -87,5 +87,6 @@ public class BizOutsourcedRecords extends BaseEntity
     private Date startTime;
     @TableField(exist = false)
     private String records;
+    private Integer isPackage;
 
 }

+ 61 - 21
src/main/java/cn/ezhizao/project/business/domain/BizReturnReceiptDetail.java

@@ -20,95 +20,132 @@ import io.swagger.annotations.ApiModelProperty;
  */
 @Data
 @TableName(value = "biz_return_receipt_detail")
-public class BizReturnReceiptDetail extends BaseEntity
-{
+public class BizReturnReceiptDetail extends BaseEntity {
     private static final long serialVersionUID = 1L;
 
-    /** 租户(厂别)id */
+    /**
+     * 租户(厂别)id
+     */
     @ApiModelProperty(value = "${comment}")
     private Long tenantId;
 
-    /** 主表id */
+    /**
+     * 主表id
+     */
     @ApiModelProperty(value = "${comment}")
     private Long masterId;
 
-    /** 单据号 */
+    /**
+     * 单据号
+     */
     @Excel(name = "单据号")
     @ApiModelProperty(value = "单据号")
     private String formCode;
 
-    /** 表单日期 */
+    /**
+     * 表单日期
+     */
     @JsonFormat(pattern = "yyyy-MM-dd")
     @Excel(name = "表单日期", width = 30, dateFormat = "yyyy-MM-dd")
     @ApiModelProperty(value = "表单日期")
     private Date formDate;
 
-    /** 外协明细id */
+    /**
+     * 外协明细id
+     */
     @ApiModelProperty(value = "表单日期")
     private Long outsourceDetailId;
 
-    /** 外协商id */
+    /**
+     * 外协商id
+     */
     @ApiModelProperty(value = "表单日期")
     private Long supplierId;
 
-    /** 外协商名称 */
+    /**
+     * 外协商名称
+     */
     @Excel(name = "外协商名称")
     @ApiModelProperty(value = "外协商名称")
     private String supplierName;
 
-    /** 批次id */
+    /**
+     * 批次id
+     */
     @ApiModelProperty(value = "外协商名称")
     private Long lotId;
 
-    /** 批次号 */
+    /**
+     * 批次号
+     */
     @Excel(name = "批次号")
     @ApiModelProperty(value = "批次号")
     private String lotCode;
 
-    /** 对应的daywork表的id,是添加外协工序的时候,带过来的 */
+    /**
+     * 对应的daywork表的id,是添加外协工序的时候,带过来的
+     */
     @ApiModelProperty(value = "批次号")
     private Long dayworkId;
 
-    /** 产品id */
+    /**
+     * 产品id
+     */
     @ApiModelProperty(value = "批次号")
     private Long productId;
 
-    /** 产品描述 */
+    /**
+     * 产品描述
+     */
     @Excel(name = "产品描述")
     @ApiModelProperty(value = "产品描述")
     private String productDescription;
 
-    /** 产品数 */
+    /**
+     * 产品数
+     */
     @Excel(name = "产品数")
     @ApiModelProperty(value = "产品数")
     private Long productNum;
 
-    /** 收回数量(外协商填写,如果未填写,则为0) */
+    /**
+     * 收回数量(外协商填写,如果未填写,则为0)
+     */
     @Excel(name = "收回数量", readConverterExp = "外=协商填写,如果未填写,则为0")
     @ApiModelProperty(value = "收回数量")
     private Integer receiptNum;
 
-    /** 收回的审核数量(由德迈仕填写,不允许0) */
+    /**
+     * 收回的审核数量(由德迈仕填写,不允许0)
+     */
     @Excel(name = "收回的审核数量", readConverterExp = "由=德迈仕填写,不允许0")
     @ApiModelProperty(value = "收回的审核数量")
     private Integer auditNum;
 
-    /** 原箱号,以英文“,”分割 */
+    /**
+     * 原箱号,以英文“,”分割
+     */
     @Excel(name = "原箱号,以英文“,”分割")
     @ApiModelProperty(value = "原箱号,以英文“,”分割")
     private String originalCarrier;
 
-    /** 原箱数 */
+    /**
+     * 原箱数
+     */
     @Excel(name = "原箱数")
     @ApiModelProperty(value = "原箱数")
     private Integer originalCarrierCount;
 
-    /** 新箱号,以英文“,”分割 */
+    /**
+     * 新箱号,以英文“,”分割
+     */
     @Excel(name = "新箱号,以英文“,”分割")
     @ApiModelProperty(value = "新箱号,以英文“,”分割")
     private String newCarrier;
 
-    /** 新箱数 */
+    /**
+     * 新箱数
+     */
     @Excel(name = "新箱数")
     @ApiModelProperty(value = "新箱数")
     private Integer newCarrierCount;
@@ -159,6 +196,9 @@ public class BizReturnReceiptDetail extends BaseEntity
     @ApiModelProperty("已结算前审核")
     @TableField(exist = false)
     private Integer isProvedForCheck;
+    @ApiModelProperty("是否解绑")
+    @TableField(exist = false)
+    private Integer unbind;
 
     public BizReturnReceiptDetail() {
     }

+ 2 - 0
src/main/java/cn/ezhizao/project/business/domain/BizSupplier.java

@@ -84,4 +84,6 @@ public class BizSupplier extends BaseEntity {
     @Excel(name = "运费扣款单价")
     @ApiModelProperty(value = "运费扣款单价")
     private BigDecimal freightDeductUnitPrice;
+    @TableField(exist = false)
+    private Long outsourceDeptId;
 }

+ 1 - 0
src/main/java/cn/ezhizao/project/business/mapper/BizDayworkItemExamineMapper.java

@@ -21,6 +21,7 @@ public interface BizDayworkItemExamineMapper extends BaseMapper<BizDayworkItemEx
     public List<BizDayworkItemExamine> getList(BizDayworkItemExamine bizDayworkItemExamine);
     public List<BizDayworkItemExamine> getAllowAddedList(List<Long> dayworkItemIds);
     public BizDayworkItemExamine getDetailById(Long id);
+    public List<BizDayworkItemExamine> getListByDayworkIds(List<Long> dayworkIds);
 
     /**
      * 物理删除

+ 1 - 0
src/main/java/cn/ezhizao/project/business/mapper/BizDayworkMapper.java

@@ -26,6 +26,7 @@ public interface BizDayworkMapper extends BaseMapper<BizDaywork> {
     public List<BizDaywork> getList(BizDaywork bizDaywork);
     public List<BizDaywork> selectNeedTakeStock();
     public List<BizDaywork> getListForOutsource(BizDaywork bizDaywork);
+    public List<BizDaywork> getListForInnerOutsource(BizDaywork bizDaywork);
 
     /**
      * 查询报工列表

+ 1 - 0
src/main/java/cn/ezhizao/project/business/mapper/BizOutsourcedOrderDetailMapper.java

@@ -21,6 +21,7 @@ public interface BizOutsourcedOrderDetailMapper extends BaseMapper<BizOutsourced
      * @return 外协单从集合
      */
     public List<BizOutsourcedOrderDetail> getList(BizOutsourcedOrderDetail bizOutsourcedOrderDetail);
+    public List<BizOutsourcedOrderDetail> getInnerList(BizOutsourcedOrderDetail bizOutsourcedOrderDetail);
 
     /**
      * 物理删除

+ 2 - 0
src/main/java/cn/ezhizao/project/business/mapper/BizOutsourcedOrderMapper.java

@@ -23,6 +23,8 @@ public interface BizOutsourcedOrderMapper extends BaseMapper<BizOutsourcedOrder>
 带箱方式,是整单的。如果换新箱子,明细中,都需要更换箱子集合
      */
     public List<BizOutsourcedOrder> getList(BizOutsourcedOrder bizOutsourcedOrder);
+    public List<BizOutsourcedOrder> getInnerList(BizOutsourcedOrder bizOutsourcedOrder);
+    public BizOutsourcedOrder  getInnerById(BizOutsourcedOrder bizOutsourcedOrder);
     public List<BizOutsourcedOrder> getAllList();
 
     /**

+ 1 - 0
src/main/java/cn/ezhizao/project/business/mapper/BizTurnoverMapper.java

@@ -19,4 +19,5 @@ public interface BizTurnoverMapper extends BaseMapper<BizTurnover> {
      * @return 删除结果
      */
     public int physicalDelete(BizTurnover bizTurnover);
+    public BizTurnover getTurnoverByDeptId(Long deptId);
 }

+ 4 - 0
src/main/java/cn/ezhizao/project/business/service/IBizDayworkItemExamineService.java

@@ -1,6 +1,9 @@
 package cn.ezhizao.project.business.service;
 
 import java.util.List;
+
+import cn.ezhizao.project.business.domain.BizOutsourcedOrder;
+import cn.ezhizao.project.business.domain.BizOutsourcedOrderDetail;
 import com.baomidou.mybatisplus.extension.service.IService;
 import cn.ezhizao.project.business.domain.BizDayworkItemExamine;
 
@@ -21,6 +24,7 @@ public interface IBizDayworkItemExamineService extends IService<BizDayworkItemEx
     public List<BizDayworkItemExamine> getList(BizDayworkItemExamine bizDayworkItemExamine);
     public List<BizDayworkItemExamine> getAllowAddedList(List<Long> dayworkItemIds);
     public BizDayworkItemExamine getDetailById(Long id);
+    public void updateOrSave(List<BizOutsourcedOrderDetail> outsourcedOrderDetails, BizOutsourcedOrder bizOutsourcedOrder);
 
     /**
      * 物理删除

+ 3 - 4
src/main/java/cn/ezhizao/project/business/service/IBizDayworkItemService.java

@@ -1,9 +1,6 @@
 package cn.ezhizao.project.business.service;
 
-import cn.ezhizao.project.business.domain.BizDaywork;
-import cn.ezhizao.project.business.domain.BizDayworkItem;
-import cn.ezhizao.project.business.domain.BizOutsourcedOrderDetail;
-import cn.ezhizao.project.business.domain.BizProductionResourceGroupDetail;
+import cn.ezhizao.project.business.domain.*;
 import cn.ezhizao.project.system.domain.SysDept;
 import com.baomidou.mybatisplus.extension.service.IService;
 
@@ -62,7 +59,9 @@ public interface IBizDayworkItemService extends IService<BizDayworkItem>
     List<BizDayworkItem> selectItemByOutsourcedDetailIds(List<Long> ids);
 
     void saveDayworkItemForOutsource(List<BizOutsourcedOrderDetail> outsourcedOrderDetails);
+    List<BizDaywork> saveDayworkItemForInnerOutsource(List<BizOutsourcedOrderDetail> outsourcedOrderDetails, BizOutsourcedOrder outsourcedOrder);
     void updateDayworkItemForOutsource(List<BizOutsourcedOrderDetail> outsourcedOrderDetails,List<BizOutsourcedOrderDetail> oldOutsourcedOrderDetails);
+    List<BizDaywork> updateDayworkItemForInnerOutsource(List<BizOutsourcedOrderDetail> outsourcedOrderDetails,List<BizOutsourcedOrderDetail> oldOutsourcedOrderDetails,BizOutsourcedOrder outsourcedOrder);
     void removeByOutsourceIds(List<Long> ids);
 
     Long getLatestDayworkItemId(BizDayworkItem bizDayworkItem);

+ 1 - 0
src/main/java/cn/ezhizao/project/business/service/IBizDayworkService.java

@@ -40,6 +40,7 @@ public interface IBizDayworkService extends IService<BizDaywork> {
      */
     List<BizDaywork> getListFromNoCurrent(BizDaywork bizDaywork);
     List<BizDaywork> getListForOutsource(BizDaywork bizDaywork);
+    List<BizDaywork> getListForInnerOutsource(BizDaywork bizDaywork);
     /**
      * 查询计划详情
      *

+ 1 - 0
src/main/java/cn/ezhizao/project/business/service/IBizOutsourcedOrderDetailService.java

@@ -21,6 +21,7 @@ public interface IBizOutsourcedOrderDetailService extends IService<BizOutsourced
      * @return 外协单从集合
      */
     List<BizOutsourcedOrderDetail> getList(BizOutsourcedOrderDetail bizOutsourcedOrderDetail);
+    List<BizOutsourcedOrderDetail> getInnerList(BizOutsourcedOrderDetail bizOutsourcedOrderDetail);
 
     /**
      * 物理删除

+ 2 - 0
src/main/java/cn/ezhizao/project/business/service/IBizOutsourcedOrderService.java

@@ -22,6 +22,8 @@ public interface IBizOutsourcedOrderService extends IService<BizOutsourcedOrder>
      * @return 外协单主 带箱方式,是整单的。如果换新箱子,明细中,都需要更换箱子集合
      */
     List<BizOutsourcedOrder> getList(BizOutsourcedOrder bizOutsourcedOrder);
+    List<BizOutsourcedOrder> getInnerList(BizOutsourcedOrder bizOutsourcedOrder);
+    BizOutsourcedOrder  getInnerById(BizOutsourcedOrder bizOutsourcedOrder);
     List<BizOutsourcedOrder> getAllList();
 
     /**

+ 86 - 0
src/main/java/cn/ezhizao/project/business/service/impl/BizDayworkItemExamineServiceImpl.java

@@ -1,7 +1,12 @@
 package cn.ezhizao.project.business.service.impl;
 
+import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 import javax.annotation.Resource;
+
+import cn.ezhizao.project.business.domain.BizOutsourcedOrder;
+import cn.ezhizao.project.business.domain.BizOutsourcedOrderDetail;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.stereotype.Service;
 import cn.ezhizao.project.business.mapper.BizDayworkItemExamineMapper;
@@ -42,6 +47,87 @@ public class BizDayworkItemExamineServiceImpl  extends ServiceImpl<BizDayworkIte
         return bizDayworkItemExamineMapper.getDetailById(id);
     }
 
+    @Override
+    public void updateOrSave(List<BizOutsourcedOrderDetail> outsourcedOrderDetails, BizOutsourcedOrder bizOutsourcedOrder) {
+        List<Long> dayworkIds = outsourcedOrderDetails.stream().filter(v->v.getIsPackage().equals(1)).map(BizOutsourcedOrderDetail::getDayworkId).collect(Collectors.toList());
+        if(!dayworkIds.isEmpty()) {
+            List<BizDayworkItemExamine> dayworkItemExamineList = bizDayworkItemExamineMapper.getListByDayworkIds(dayworkIds);
+            List<BizDayworkItemExamine> needAddList = new ArrayList<>();
+            List<BizDayworkItemExamine> needDeleteList = new ArrayList<>();
+            if (!dayworkItemExamineList.isEmpty()) {
+                //如果审核工段是内部外协的工段则不新增
+                dayworkIds.forEach(id -> {
+                    BizOutsourcedOrderDetail outsourcedOrderDetail = outsourcedOrderDetails.stream().filter(v1 -> v1.getDayworkId().equals(id)).findFirst().orElse(new BizOutsourcedOrderDetail());
+                    List<BizDayworkItemExamine> collect = dayworkItemExamineList.stream().filter(v1 -> v1.getDayworkId().equals(outsourcedOrderDetail.getDayworkId())).collect(Collectors.toList());
+                    //当前批次已经提交了审核
+                    if (!collect.isEmpty()) {
+                        //提交的工段是否是内部外协的工段
+                        if (!collect.get(0).getDeptId().equals(bizOutsourcedOrder.getOutsourceDeptId())) {
+                            needDeleteList.add(collect.get(0));
+                            //新增审核申请
+                            BizDayworkItemExamine examine = new BizDayworkItemExamine();
+                            examine.setDayworkId(outsourcedOrderDetail.getDayworkId());
+                            examine.setDayworkItemId(outsourcedOrderDetail.getDayworkItemId());
+                            examine.setDeptId(bizOutsourcedOrder.getOutsourceDeptId());
+                            examine.setProductionPlanDetailId(outsourcedOrderDetail.getProductionPlanDetailId());
+                            examine.setProductDescription(outsourcedOrderDetail.getProductDescription());
+                            examine.setLotId(outsourcedOrderDetail.getLotId());
+                            examine.setLotCode(outsourcedOrderDetail.getLotCode());
+                            examine.setProductId(outsourcedOrderDetail.getProductId());
+                            examine.setTechnologicalProcessId(outsourcedOrderDetail.getTechnologicalProcessId());
+                            examine.setTechnologicalProcessDetailId(outsourcedOrderDetail.getTechnologicalProcessDetailId());
+                            examine.setProcessId(outsourcedOrderDetail.getProcessId());
+                            examine.setProcessAlias(outsourcedOrderDetail.getProcessAlias());
+                            examine.setStatus(0);
+                            needAddList.add(examine);
+                        }
+                    } else {
+                        //新增审核申请
+                        BizDayworkItemExamine examine = new BizDayworkItemExamine();
+                        examine.setDayworkId(outsourcedOrderDetail.getDayworkId());
+                        examine.setDayworkItemId(outsourcedOrderDetail.getDayworkItemId());
+                        examine.setDeptId(bizOutsourcedOrder.getOutsourceDeptId());
+                        examine.setProductionPlanDetailId(outsourcedOrderDetail.getProductionPlanDetailId());
+                        examine.setProductDescription(outsourcedOrderDetail.getProductDescription());
+                        examine.setLotId(outsourcedOrderDetail.getLotId());
+                        examine.setLotCode(outsourcedOrderDetail.getLotCode());
+                        examine.setProductId(outsourcedOrderDetail.getProductId());
+                        examine.setTechnologicalProcessId(outsourcedOrderDetail.getTechnologicalProcessId());
+                        examine.setTechnologicalProcessDetailId(outsourcedOrderDetail.getTechnologicalProcessDetailId());
+                        examine.setProcessId(outsourcedOrderDetail.getProcessId());
+                        examine.setProcessAlias(outsourcedOrderDetail.getProcessAlias());
+                        examine.setStatus(0);
+                        needAddList.add(examine);
+                    }
+
+                });
+            } else {
+                outsourcedOrderDetails.forEach(v -> {
+                    //新增审核申请
+                    BizDayworkItemExamine examine = new BizDayworkItemExamine();
+                    examine.setDayworkId(v.getDayworkId());
+                    examine.setDayworkItemId(v.getDayworkItemId());
+                    examine.setDeptId(bizOutsourcedOrder.getOutsourceDeptId());
+                    examine.setProductionPlanDetailId(v.getProductionPlanDetailId());
+                    examine.setProductDescription(v.getProductDescription());
+                    examine.setLotId(v.getLotId());
+                    examine.setLotCode(v.getLotCode());
+                    examine.setProductId(v.getProductId());
+                    examine.setTechnologicalProcessId(v.getTechnologicalProcessId());
+                    examine.setTechnologicalProcessDetailId(v.getTechnologicalProcessDetailId());
+                    examine.setProcessId(v.getProcessId());
+                    examine.setProcessAlias(v.getProcessAlias());
+                    examine.setStatus(0);
+                    needAddList.add(examine);
+                });
+
+            }
+            removeBatchByIds(needDeleteList);
+            saveBatch(needAddList);
+        }
+    }
+
+
     /**
      * 物理删除
      * @param bizDayworkItemExamine

+ 186 - 1
src/main/java/cn/ezhizao/project/business/service/impl/BizDayworkItemServiceImpl.java

@@ -1,9 +1,11 @@
 package cn.ezhizao.project.business.service.impl;
 
+import cn.ezhizao.common.utils.SecurityUtils;
 import cn.ezhizao.project.business.domain.*;
 import cn.ezhizao.project.business.mapper.BizDayworkCarrierMapper;
 import cn.ezhizao.project.business.mapper.BizDayworkItemMapper;
 import cn.ezhizao.project.business.mapper.BizDayworkMapper;
+import cn.ezhizao.project.business.mapper.BizTurnoverMapper;
 import cn.ezhizao.project.business.service.IBizDayworkItemService;
 import cn.ezhizao.project.system.domain.SysDept;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -12,8 +14,10 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
 import java.util.*;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 /**
  * 报工记录Service业务层处理
@@ -37,6 +41,8 @@ public class BizDayworkItemServiceImpl extends ServiceImpl<BizDayworkItemMapper,
     private BizOutsourcedOrderServiceImpl bizOutsourcedOrderService;
     @Resource
     private BizOutsourcedOrderDetailServiceImpl bizOutsourcedOrderDetailService;
+    @Resource
+    private BizTurnoverMapper bizTurnoverMapper;
 
     /**
      * 查询报工记录列表
@@ -136,7 +142,6 @@ public class BizDayworkItemServiceImpl extends ServiceImpl<BizDayworkItemMapper,
     public List<BizDayworkItem> selectItemByOutsourcedDetailIds(List<Long> ids) {
         return bizDayworkItemMapper.selectItemByOutsourcedDetailIds(ids);
     }
-
     @Override
     @Transactional
     public void saveDayworkItemForOutsource(List<BizOutsourcedOrderDetail> outsourcedOrderDetails) {
@@ -175,6 +180,7 @@ public class BizDayworkItemServiceImpl extends ServiceImpl<BizDayworkItemMapper,
                 newBizDayworkItem.setIsWx(1);
                 newBizDayworkItem.setFormDayworkItemId(1L);
                 newBizDayworkItem.setNickName(detail.getSupplierName());
+                newBizDayworkItem.setTenantId(SecurityUtils.getLoginUser().getTenantId());
                 newDayworkItems.add(newBizDayworkItem);
             });
         });
@@ -182,6 +188,182 @@ public class BizDayworkItemServiceImpl extends ServiceImpl<BizDayworkItemMapper,
         saveBatch(newDayworkItems);
     }
 
+    @Override
+    @Transactional
+    public List<BizDaywork> saveDayworkItemForInnerOutsource(List<BizOutsourcedOrderDetail> outsourcedOrderDetails,BizOutsourcedOrder outsourcedOrder) {
+        /**********查询周转新信息修改周转状态,新增一条外协部门报工信息,将对应daywork状态修改为进行中************/
+        List<BizDayworkItem> dayworkItems = new ArrayList<>();//原周转信息集合
+        List<BizDayworkItem> newDayworkItems = new ArrayList<>();//新增周转信息集合
+        List<BizDaywork> dayworkList = new ArrayList<>();
+        List<BizDaywork> bizDayworkList = bizDayworkMapper.selectBatchIds(outsourcedOrderDetails.stream().map(BizOutsourcedOrderDetail::getDayworkId).collect(Collectors.toList()));
+        //查询周转区
+        BizTurnover turnover = bizTurnoverMapper.getTurnoverByDeptId(outsourcedOrder.getOutsourceDeptId());
+        //修改报工信息
+        outsourcedOrderDetails.forEach(detail -> {
+            //查询周转信息
+            BizDayworkItem bizDayworkItem = new BizDayworkItem();
+            bizDayworkItem.setDayworkId(detail.getDayworkId());
+            bizDayworkItem.setOutsourceDetailId(detail.getId());
+            bizDayworkItem = bizDayworkMapper.getItemListFromOutsourced(bizDayworkItem).get(0);
+
+            //修改状态
+            bizDayworkItem.setStatus("7");
+            dayworkItems.add(bizDayworkItem);
+            //修改daywork的下序工段及合格数
+            BizDaywork daywork = bizDayworkList.stream().filter(bizDaywork -> bizDaywork.getId().equals(detail.getDayworkId())).findFirst().orElse(new BizDaywork());
+            daywork.setDeptId(outsourcedOrder.getOutsourceDeptId());
+            daywork.setTemporaryProcessQualifiedNum(detail.getProductNum());
+            dayworkList.add(daywork);
+            //新增周转明细
+            BizDayworkItem newBizDayworkItem = new BizDayworkItem();
+            newBizDayworkItem.setDayworkId(detail.getDayworkId());
+            newBizDayworkItem.setOutsourceDetailId(detail.getId());
+            newBizDayworkItem.setLotId(detail.getLotId());
+            newBizDayworkItem.setProcessId(bizDayworkItem.getProcessId());
+            newBizDayworkItem.setProcessStepNumber(bizDayworkItem.getProcessStepNumber());
+            newBizDayworkItem.setStatus("4");
+            newBizDayworkItem.setProdNum(detail.getProductNum());
+            newBizDayworkItem.setQualifiedNum(detail.getProductNum());
+            newBizDayworkItem.setDeptId(outsourcedOrder.getOutsourceDeptId());
+            newBizDayworkItem.setDeptName(outsourcedOrder.getOutsourceDeptName());
+            newBizDayworkItem.setFromDeptId(bizDayworkItem.getDeptId());
+            newBizDayworkItem.setFromDeptName(bizDayworkItem.getDeptName());
+            newBizDayworkItem.setStartTime(new Date());
+            newBizDayworkItem.setProductionPlanDetailId(bizDayworkItem.getProductionPlanDetailId());
+            newBizDayworkItem.setTechnologicalProcessId(bizDayworkItem.getTechnologicalProcessId());
+            newBizDayworkItem.setTechnologicalProcessDetailId(bizDayworkItem.getTechnologicalProcessDetailId());
+            newBizDayworkItem.setIsWx(1);
+            newBizDayworkItem.setTurnoverType("2");
+            newBizDayworkItem.setTurnoverArea(turnover.getCode());
+            newBizDayworkItem.setTurnoverId(turnover.getId().toString());
+            newBizDayworkItem.setFormDayworkItemId(1L);
+            newBizDayworkItem.setUserId(SecurityUtils.getLoginUser().getUserId());
+            newBizDayworkItem.setNickName(SecurityUtils.getLoginUser().getUser().getNickName());
+            newBizDayworkItem.setUserName(SecurityUtils.getLoginUser().getUser().getUserName());
+            newBizDayworkItem.setTenantId(SecurityUtils.getLoginUser().getTenantId());
+            newDayworkItems.add(newBizDayworkItem);
+
+//            //每一道工序新增一条报工信息
+//            BizDayworkItem finalBizDayworkItem = bizDayworkItem;
+//            detail.getProcesses().forEach(process -> {
+//                //新的报工信息
+//                BizDayworkItem newBizDayworkItem = new BizDayworkItem();
+//                newBizDayworkItem.setDayworkId(detail.getDayworkId());
+//                newBizDayworkItem.setOutsourceDetailId(detail.getId());
+//                newBizDayworkItem.setLotId(detail.getLotId());
+//                newBizDayworkItem.setProcessId(process.getProcessId());
+//                newBizDayworkItem.setProcessStepNumber(process.getProcessStepNumber());
+//                newBizDayworkItem.setStatus("1");
+//                newBizDayworkItem.setProdNum(detail.getProductNum());
+//                newBizDayworkItem.setDeptId(finalBizDayworkItem.getDeptId());
+//                newBizDayworkItem.setDeptName(finalBizDayworkItem.getDeptName());
+//                newBizDayworkItem.setStartTime(new Date());
+//                newBizDayworkItem.setDeptCode(finalBizDayworkItem.getDeptCode());
+//                newBizDayworkItem.setProductionPlanDetailId(finalBizDayworkItem.getProductionPlanDetailId());
+//                newBizDayworkItem.setTechnologicalProcessId(finalBizDayworkItem.getTechnologicalProcessId());
+//                newBizDayworkItem.setTechnologicalProcessDetailId(process.getTechnologicalProcessDetailId());
+//                newBizDayworkItem.setIsWx(1);
+//                newBizDayworkItem.setFormDayworkItemId(1L);
+//                newBizDayworkItem.setNickName(detail.getSupplierName());
+//                newDayworkItems.add(newBizDayworkItem);
+//            });
+        });
+        saveOrUpdateBatch(dayworkItems);
+        saveBatch(newDayworkItems);
+        return dayworkList;
+    }
+    @Override
+    @Transactional
+    public List<BizDaywork> updateDayworkItemForInnerOutsource(List<BizOutsourcedOrderDetail> outsourcedOrderDetails,List<BizOutsourcedOrderDetail> oldOutsourcedOrderDetails,BizOutsourcedOrder outsourcedOrder) {
+        //如果有报工记录则不对dayworkItem进行操作
+        //查询周转区
+        BizTurnover turnover = bizTurnoverMapper.getTurnoverByDeptId(outsourcedOrder.getOutsourceDeptId());
+        List<Long> newOutsourceDetailIds = outsourcedOrderDetails.stream().map(BizOutsourcedOrderDetail::getId).collect(Collectors.toList());
+        List<Long> newDayworkIds = outsourcedOrderDetails.stream().map(BizOutsourcedOrderDetail::getDayworkId).collect(Collectors.toList());
+        List<Long> oldOutsourceDetailIds = oldOutsourcedOrderDetails.stream().map(BizOutsourcedOrderDetail::getId).collect(Collectors.toList());
+        List<Long> oldDayworkIds = oldOutsourcedOrderDetails.stream().map(BizOutsourcedOrderDetail::getDayworkId).collect(Collectors.toList());
+        List<Long> totalDayworkIds = Stream.concat(newDayworkIds.stream(), oldDayworkIds.stream())
+                .distinct()
+                .collect(Collectors.toList());
+        //新增的外协批次
+        List<BizDayworkItem> dayworkItemList = getListByDayworkIds(totalDayworkIds);
+        List<BizDaywork> bizDayworkList = bizDayworkMapper.selectBatchIds(totalDayworkIds);
+        List<BizDayworkItem> needAddedDayworkItem = new ArrayList<>();
+        List<BizDayworkItem> needUpdateDayworkItem = new ArrayList<>();
+        List<BizDayworkItem> needRemoveDayworkItem = new ArrayList<>();
+        List<BizDaywork> needUpdateDaywork = new ArrayList<>();
+        newOutsourceDetailIds.forEach(id ->{
+            //新增
+            if(!oldOutsourceDetailIds.contains(id)) {
+                BizOutsourcedOrderDetail detail = outsourcedOrderDetails.stream().filter(item -> item.getId().equals(id)).collect(Collectors.toList()).get(0);
+                BizDayworkItem bizDayworkItem = dayworkItemList.stream().filter(item -> item.getDayworkId().equals(detail.getDayworkId())).sorted(Comparator.comparing(BizDayworkItem::getCreateTime).reversed()).collect(Collectors.toList()).get(0);
+                    bizDayworkItem.setStatus("7");
+                    needUpdateDayworkItem.add(bizDayworkItem);
+                //新增周转明细
+                BizDayworkItem newBizDayworkItem = new BizDayworkItem();
+                newBizDayworkItem.setDayworkId(detail.getDayworkId());
+                newBizDayworkItem.setOutsourceDetailId(detail.getId());
+                newBizDayworkItem.setLotId(detail.getLotId());
+                newBizDayworkItem.setProcessId(bizDayworkItem.getProcessId());
+                newBizDayworkItem.setProcessStepNumber(bizDayworkItem.getProcessStepNumber());
+                newBizDayworkItem.setStatus("4");
+                newBizDayworkItem.setProdNum(detail.getProductNum());
+                newBizDayworkItem.setQualifiedNum(detail.getProductNum());
+                newBizDayworkItem.setDeptId(outsourcedOrder.getOutsourceDeptId());
+                newBizDayworkItem.setDeptName(outsourcedOrder.getOutsourceDeptName());
+                newBizDayworkItem.setFromDeptId(bizDayworkItem.getDeptId());
+                newBizDayworkItem.setFromDeptName(bizDayworkItem.getDeptName());
+                newBizDayworkItem.setStartTime(new Date());
+                newBizDayworkItem.setProductionPlanDetailId(bizDayworkItem.getProductionPlanDetailId());
+                newBizDayworkItem.setTechnologicalProcessId(bizDayworkItem.getTechnologicalProcessId());
+                newBizDayworkItem.setTechnologicalProcessDetailId(bizDayworkItem.getTechnologicalProcessDetailId());
+                newBizDayworkItem.setIsWx(1);
+                newBizDayworkItem.setTurnoverType("2");
+                newBizDayworkItem.setTurnoverArea(turnover.getCode());
+                newBizDayworkItem.setTurnoverId(turnover.getId().toString());
+                newBizDayworkItem.setFormDayworkItemId(1L);
+                newBizDayworkItem.setUserId(SecurityUtils.getLoginUser().getUserId());
+                newBizDayworkItem.setNickName(SecurityUtils.getLoginUser().getUser().getNickName());
+                newBizDayworkItem.setUserName(SecurityUtils.getLoginUser().getUser().getUserName());
+                newBizDayworkItem.setTenantId(SecurityUtils.getLoginUser().getTenantId());
+                //修改daywork
+                needAddedDayworkItem.add(newBizDayworkItem);
+                BizDaywork daywork = bizDayworkList.stream().filter(item -> item.getId().equals(detail.getDayworkId())).findFirst().orElse(null);
+                daywork.setTemporaryProcessQualifiedNum(detail.getProductNum());
+                needUpdateDaywork.add(daywork);
+            }else{
+                //原本有,判断是否存在报工,如果存在报工,则不修改daywork
+                List<BizDayworkItem> collect = dayworkItemList.stream().filter(item -> item.getOutsourceDetailId().equals(id)).collect(Collectors.toList());
+                if(!collect.isEmpty() && collect.size()==1) {
+                    BizOutsourcedOrderDetail detail = outsourcedOrderDetails.stream().filter(item -> item.getId().equals(id)).collect(Collectors.toList()).get(0);
+                    BizDaywork daywork = bizDayworkList.stream().filter(item -> item.getId().equals(detail.getDayworkId())).findFirst().orElse(null);
+                    daywork.setTemporaryProcessQualifiedNum(detail.getProductNum());
+                    needUpdateDaywork.add(daywork);
+                }
+            }
+        });
+        //删除的外协批次
+        oldOutsourceDetailIds.forEach(id ->{
+            if(!newOutsourceDetailIds.contains(id)) {
+                BizOutsourcedOrderDetail detail = oldOutsourcedOrderDetails.stream().filter(item -> item.getId().equals(id)).collect(Collectors.toList()).get(0);
+                needRemoveDayworkItem.addAll(dayworkItemList.stream().filter(item -> item.getOutsourceDetailId().equals(id)).collect(Collectors.toList()));
+                //同时修改daywork的周转工段及合格数量
+                BizDayworkItem lastDayworkItem = dayworkItemList.stream().filter(item -> !item.getOutsourceDetailId().equals(id) && item.getDayworkId().equals(detail.getDayworkId())).sorted(Comparator.comparing(BizDayworkItem::getCreateTime).reversed()).collect(Collectors.toList()).get(0);
+                List<BizDayworkItem> lastDayworkItemList = dayworkItemList.stream().filter(item -> item.getDayworkId().equals(detail.getDayworkId()) && item.getProcessStepNumber().equals(lastDayworkItem.getProcessStepNumber()) && (item.getStatus().equals("2") || item.getStatus().equals("3"))).collect(Collectors.toList());
+                int sum = lastDayworkItemList.stream().mapToInt(BizDayworkItem::getQualifiedNum).sum();
+                BizDaywork daywork = bizDayworkList.stream().filter(item -> item.getId().equals(detail.getDayworkId())).collect(Collectors.toList()).get(0);
+                daywork.setDeptId(lastDayworkItem.getDeptId());
+                daywork.setProcessQualifiedNum(sum);
+                daywork.setTemporaryProcessQualifiedNum(sum);
+                needUpdateDaywork.add(daywork);
+            }
+        });
+      saveBatch(needAddedDayworkItem);
+      updateBatchById(needUpdateDayworkItem);
+      removeBatchByIds(needRemoveDayworkItem);
+      return needUpdateDaywork;
+    }
+
     @Override
     @Transactional
     public void updateDayworkItemForOutsource(List<BizOutsourcedOrderDetail> outsourcedOrderDetails,List<BizOutsourcedOrderDetail> oldOutsourcedOrderDetails) {
@@ -251,6 +433,7 @@ public class BizDayworkItemServiceImpl extends ServiceImpl<BizDayworkItemMapper,
                             newBizDayworkItem.setTechnologicalProcessId(lastDayworkItem.getTechnologicalProcessId());
                             newBizDayworkItem.setTechnologicalProcessDetailId(process.getTechnologicalProcessDetailId());
                             newBizDayworkItem.setIsWx(1);
+                            newBizDayworkItem.setTenantId(SecurityUtils.getLoginUser().getTenantId());
                             needAddedDayworkItem.add(newBizDayworkItem);
                         } else {
                             //编辑报工信息
@@ -270,6 +453,7 @@ public class BizDayworkItemServiceImpl extends ServiceImpl<BizDayworkItemMapper,
                             newBizDayworkItem.setTechnologicalProcessDetailId(process.getTechnologicalProcessDetailId());
                             newBizDayworkItem.setIsWx(1);
                             newBizDayworkItem.setNickName(detail.getSupplierName());
+                            newBizDayworkItem.setTenantId(SecurityUtils.getLoginUser().getTenantId());
                             needUpdateDayworkItem.add(newBizDayworkItem);
                         }
                     });
@@ -309,6 +493,7 @@ public class BizDayworkItemServiceImpl extends ServiceImpl<BizDayworkItemMapper,
         }
     }
 
+
     @Override
     public void removeByOutsourceIds(List<Long> ids) {
         List<BizDayworkItem> dayworkItemList = selectItemByOutsourcedDetailIds(ids);

+ 6 - 0
src/main/java/cn/ezhizao/project/business/service/impl/BizDayworkServiceImpl.java

@@ -55,6 +55,12 @@ public class BizDayworkServiceImpl extends ServiceImpl<BizDayworkMapper, BizDayw
     public List<BizDaywork> getListForOutsource(BizDaywork bizDaywork) {
         return bizDayworkMapper.getListForOutsource(bizDaywork);
     }
+
+    @Override
+    public List<BizDaywork> getListForInnerOutsource(BizDaywork bizDaywork) {
+        return bizDayworkMapper.getListForInnerOutsource(bizDaywork);
+    }
+
     /**
      * 查询计划详情
      *

+ 5 - 0
src/main/java/cn/ezhizao/project/business/service/impl/BizOutsourcedOrderDetailServiceImpl.java

@@ -35,6 +35,11 @@ public class BizOutsourcedOrderDetailServiceImpl  extends ServiceImpl<BizOutsour
         return bizOutsourcedOrderDetailMapper.getList(bizOutsourcedOrderDetail);
     }
 
+    @Override
+    public List<BizOutsourcedOrderDetail> getInnerList(BizOutsourcedOrderDetail bizOutsourcedOrderDetail) {
+        return bizOutsourcedOrderDetailMapper.getInnerList(bizOutsourcedOrderDetail);
+    }
+
     /**
      * 物理删除
      * @param bizOutsourcedOrderDetail

+ 11 - 0
src/main/java/cn/ezhizao/project/business/service/impl/BizOutsourcedOrderServiceImpl.java

@@ -60,6 +60,17 @@ public class BizOutsourcedOrderServiceImpl  extends ServiceImpl<BizOutsourcedOrd
         return bizOutsourcedOrderMapper.getList(bizOutsourcedOrder);
     }
 
+    @Override
+    public List<BizOutsourcedOrder> getInnerList(BizOutsourcedOrder bizOutsourcedOrder) {
+        return bizOutsourcedOrderMapper.getInnerList(bizOutsourcedOrder);
+    }
+
+    @Override
+    public BizOutsourcedOrder getInnerById(BizOutsourcedOrder bizOutsourcedOrder) {
+        return bizOutsourcedOrderMapper.getInnerById(bizOutsourcedOrder);
+    }
+
+
     @Override
     public List<BizOutsourcedOrder> getAllList() {
         return bizOutsourcedOrderMapper.getAllList();

+ 17 - 0
src/main/java/cn/ezhizao/project/system/domain/SysDept.java

@@ -105,6 +105,23 @@ public class SysDept extends BaseEntity {
     @TableField(exist = false)
     private String Label;
     private Integer isSortPackaging;
+    private Integer isOutsourcing;
+    private Long supplierId;
+    public Integer getIsOutsourcing() {
+        return isOutsourcing;
+    }
+
+    public void setIsOutsourcing(Integer isOutsourcing) {
+        this.isOutsourcing = isOutsourcing;
+    }
+
+    public Long getSupplierId() {
+        return supplierId;
+    }
+
+    public void setSupplierId(Long supplierId) {
+        this.supplierId = supplierId;
+    }
 
     public Integer getIsSortPackaging() {
         return isSortPackaging;

+ 7 - 0
src/main/resources/mybatis/business/BizDayworkItemExamineMapper.xml

@@ -77,6 +77,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         left join biz_lot t3 on t1.lot_id = t3.id
         where t1.id = #{id}
     </select>
+    <select id="getListByDayworkIds" resultType="cn.ezhizao.project.business.domain.BizDayworkItemExamine">
+        select * from biz_daywork_item_examine
+        where deleted = 0 and  daywork_id in
+        <foreach collection="dayworkIds" item="item" open="(" separator="," close=")">
+            #{item}
+        </foreach>
+    </select>
     <select id="getDayworkItemList" resultType="cn.ezhizao.project.business.domain.BizDayworkItem">
         select t1.*,t2.process_alias from biz_daywork_item t1 left join biz_process t2 on t1.process_id = t2.id
         where t1.daywork_id = #{dayworkId} and t1.deleted = 0 and t1.is_sort = 1

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

@@ -33,6 +33,12 @@
         <collection property="originalCarrierList" ofType="cn.ezhizao.project.business.domain.BizDayworkCarrier"
                     column="id" select="getOriginalCarrierList"/>
     </resultMap>
+    <resultMap type="cn.ezhizao.project.business.domain.BizDaywork" id="BizDayworkResultForInnerOutsource">
+        <id column="id" property="id"/>
+        <association property="lastDayworkItem" column="id" select="getLastDayworkItem"/>
+        <collection property="originalCarrierList" ofType="cn.ezhizao.project.business.domain.BizDayworkCarrier"
+                    column="id" select="getOriginalCarrierList"/>
+    </resultMap>
 
     <resultMap id="BizDayworkItemResult" type="cn.ezhizao.project.business.domain.BizDayworkItem">
         <id column="id" property="id"/>
@@ -275,6 +281,10 @@
         </trim>
         ORDER BY t1.create_time DESC
     </select>
+    <select id="getLastDayworkItem" resultType="cn.ezhizao.project.business.domain.BizDayworkItem">
+        select t1.*,t2.process_alias from biz_daywork_item t1 left join biz_process t2 on t1.process_id = t2.id
+        where t1.daywork_id = #{id} and t1.deleted = 0 order by t1.create_time desc limit 1
+    </select>
     <select id="getCertificateList" resultMap="BizDayworkResult">
         SELECT
         t1.*,
@@ -489,6 +499,53 @@
         </trim>
         ORDER BY t1.create_time DESC
     </select>
+    <select id="getListForInnerOutsource" resultMap="BizDayworkResultForInnerOutsource">
+        SELECT
+        t1.*,
+        t2.product_code,
+        t2.description AS product_description,
+        t3.technology_version,
+        (
+        SELECT
+        GROUP_CONCAT(carrier_code ORDER BY carrier_code SEPARATOR ',')
+        FROM biz_daywork_carrier
+        WHERE daywork_id = t1.id
+        and process_inspection_id = 0
+        AND is_changed=0
+        AND deleted = 0
+        ) AS original_carrier
+        FROM biz_daywork t1
+        LEFT JOIN biz_product t2 ON t1.product_id = t2.id
+        LEFT JOIN biz_technological_process t3 ON t1.technological_process_id=t3.id
+        <trim prefix=" WHERE" suffix="" suffixOverrides="AND">
+            t1.deleted = 0
+            <if test="tenantId != null and tenantId != 0">AND t1.tenant_id = #{tenantId}</if>
+            <if test="dayworkIds != null and dayworkIds.size > 0">
+                AND t1.id IN
+                <foreach collection="dayworkIds" index="index" item="id" separator="," open="(" close=")">
+                    #{id,jdbcType=BIGINT}
+                </foreach>
+            </if>
+            <if test="existingDayworkIds != null and existingDayworkIds.size > 0">
+                AND t1.id NOT IN
+                <foreach collection="existingDayworkIds" index="index" item="id" separator="," open="(" close=")">
+                    #{id,jdbcType=BIGINT}
+                </foreach>
+            </if>
+            <if test="productDescription != null and productDescription != ''">
+                AND t2.description LIKE CONCAT('%', #{productDescription}, '%')
+            </if>
+            <if test="lotCode != null and lotCode != ''">AND t1.lot_code LIKE CONCAT('%', #{lotCode}, '%')</if>
+            <if test="keyword != null  and keyword != ''">AND (t1.lot_code LIKE concat('%', #{keyword}, '%')or
+                t2.description LIKE concat('%', #{keyword}, '%'))
+            </if>
+            <if test="isSupplierProducts == 1 and supplierId != null and supplierId != ''">
+                AND t1.product_id IN (SELECT product_id FROM biz_supplier_product WHERE supplier_id=#{supplierId} AND
+                deleted=0)
+            </if>
+        </trim>
+        ORDER BY t1.create_time DESC
+    </select>
     <!--    之前遗留暂时注释
         <select id="getItemList" parameterType="BizDayworkItem" resultMap="BizDayworkItemResult">
             SELECT
@@ -708,13 +765,15 @@
         biz_daywork_carrier.daywork_id = t1.id
         AND biz_daywork_carrier.is_changed = 0
         AND biz_daywork_carrier.deleted = 0
-        ) AS carrier_name
+        ) AS carrier_name,
+        t6.furnace_number
         FROM
         biz_daywork t1
         LEFT JOIN biz_production_plan_detail t2 ON t1.production_plan_detail_id = t2.id
         LEFT JOIN biz_lot t3 ON t1.lot_id = t3.id
         LEFT JOIN sys_dept t4 ON t1.dept_id = t4.dept_id
         LEFT JOIN biz_workshop t5 ON t4.workshop_id = t5.id
+        left join biz_furnace_no_info t6 on t6.daywork_id = t1.id
         <trim prefix=" WHERE" suffix="" suffixOverrides="AND">
             t1.deleted = 0
             AND t2.deleted = 0
@@ -726,6 +785,9 @@
             <if test="productDescription != null and productDescription != ''">
                 AND t2.product_description like concat('%',#{productDescription},'%')
             </if>
+            <if test="furnaceNumber != null  and furnaceNumber != ''">
+                AND t6.furnace_number LIKE CONCAT('%', #{furnaceNumber}, '%')
+            </if>
             <if test="lotCode != null  and lotCode != ''">AND t3.lot_code like concat('%',#{lotCode},'%')</if>
             <if test="carrierCode != null ">AND exists (select 1
                 FROM

+ 58 - 0
src/main/resources/mybatis/business/BizOutsourcedOrderDetailMapper.xml

@@ -14,6 +14,22 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <collection property="finishedProcesses" ofType="cn.ezhizao.project.business.domain.BizOutsourcedOrderDetailProcess" column="id" select="getFinishedProcess"/>
         <collection property="returnReceiptDetailList" column="id" ofType="cn.ezhizao.project.business.domain.BizReturnReceiptDetail" select="getReturnReceiptDetailList"/>
     </resultMap>
+    <resultMap type="cn.ezhizao.project.business.domain.BizOutsourcedOrderDetail" id="BizOutsourcedOrderDetailInnerResult">
+        <id column="id" property="id"/>
+        <result property="dayworkId" column="daywork_id"/>
+        <association property="processNames" column="id" select="getProcessNames"/>
+        <association property="receiptNum" column="id" select="getReceiptNum"/>
+        <association property="furnaceNumber" column="daywork_id" select="getFurnaceNumber"/>
+        <association property="dayworkItemId" column="daywork_id" select="getDayworkItemId"/>
+        <association property="technologicalProcessDetailId" column="daywork_id" select="getTechnologicalProcessDetailId"/>
+        <association property="processId" column="daywork_id" select="getProcessId"/>
+        <association property="processAlias" column="daywork_id" select="getProcessAlias"/>
+        <association property="hasNextInfo" column="{id=id,dayworkId=daywork_id}" select="getNextInfo"/>
+        <association property="isPackage" column="{masterId=master_id,dayworkId=daywork_id}" select="getPackage"/>
+        <collection property="processes" ofType="cn.ezhizao.project.business.domain.BizOutsourcedOrderDetailProcess" column="id" select="getProcess"/>
+        <collection property="finishedProcesses" ofType="cn.ezhizao.project.business.domain.BizOutsourcedOrderDetailProcess" column="id" select="getFinishedProcess"/>
+        <collection property="returnReceiptDetailList" column="id" ofType="cn.ezhizao.project.business.domain.BizReturnReceiptDetail" select="getReturnReceiptDetailList"/>
+    </resultMap>
 
     <resultMap type="cn.ezhizao.project.business.domain.BizOutsourcedOrderDetailProcess" id="BizOutsourcedOrderDetailProcessResult">
         <id column="id" property="id"/>
@@ -69,6 +85,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         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.is_audit = 1
+            <!-- 且未完成最后一道序 -->
+            and t4.status &lt; 2
             <if test="returnFormCode != null  and returnFormCode != ''"> AND t3.form_code like concat('%', #{returnFormCode}, '%')</if>
             <if test="productDescription != null "> AND t1.product_description like concat('%', #{productDescription}, '%')</if>
             <if test="supplierName != null  and supplierName != ''"> AND t1.supplier_name like concat('%', #{supplierName}, '%')</if>
@@ -102,6 +120,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </trim>
         ORDER BY t3.create_time DESC
     </select>
+    <select id="getDayworkItemId" resultType="long">
+        SELECT id FROM biz_daywork_item WHERE daywork_id = #{dayworkId} AND deleted = 0 ORDER BY process_step_number DESC, create_time DESC LIMIT 1
+    </select>
     <select id="getList" parameterType="BizOutsourcedOrderDetail" resultMap="BizOutsourcedOrderDetailResult">
         SELECT * FROM biz_outsourced_order_detail
         <trim prefix=" WHERE" suffix="" suffixOverrides="AND">
@@ -120,6 +141,36 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="newCarrierCount != null "> AND new_carrier_count = #{newCarrierCount}</if>
         </trim>
     </select>
+    <select id="getTechnologicalProcessDetailId" resultType="long">
+        select technological_process_detail_id from biz_daywork_item where deleted = 0 and daywork_id = #{dayworkId} order by process_step_number desc, create_time desc limit 1
+    </select>
+    <select id="getProcessId" resultType="long">
+        select process_id from biz_daywork_item where deleted = 0 and daywork_id = #{dayworkId} order by process_step_number desc, create_time desc limit 1
+    </select>
+    <select id="getProcessAlias" resultType="String">
+        select t2.process_alias from biz_daywork_item t1 left join biz_process t2 on t1.process_id = t2.id where t1.deleted = 0 and t1.daywork_id = #{dayworkId} order by t1.process_step_number desc, t1.create_time desc limit 1
+    </select>
+    <select id="getInnerList" parameterType="BizOutsourcedOrderDetail" resultMap="BizOutsourcedOrderDetailInnerResult">
+        SELECT * FROM biz_outsourced_order_detail
+        <trim prefix=" WHERE" suffix="" suffixOverrides="AND">
+            deleted = 0
+            <if test="masterId != null "> AND master_id = #{masterId}</if>
+            <if test="formCode != null  and formCode != ''"> AND form_code = #{formCode}</if>
+            <if test="formDate != null "> AND form_date = #{formDate}</if>
+            <if test="supplierName != null  and supplierName != ''"> AND supplier_name like concat('%', #{supplierName}, '%')</if>
+            <if test="deliveryMethod != null "> AND delivery_method = #{deliveryMethod}</if>
+            <if test="packagingMethod != null  and packagingMethod != ''"> AND packaging_method = #{packagingMethod}</if>
+            <if test="productDescription != null  and productDescription != ''"> AND product_description = #{productDescription}</if>
+            <if test="technologyVersion != null  and technologyVersion != ''"> AND technology_version = #{technologyVersion}</if>
+            <if test="originalCarrier != null  and originalCarrier != ''"> AND original_carrier = #{originalCarrier}</if>
+            <if test="originalCarrierCount != null "> AND original_carrier_count = #{originalCarrierCount}</if>
+            <if test="newCarrier != null  and newCarrier != ''"> AND new_carrier = #{newCarrier}</if>
+            <if test="newCarrierCount != null "> AND new_carrier_count = #{newCarrierCount}</if>
+        </trim>
+    </select>
+    <select id="getPackage" resultType="integer">
+        select count(1) from biz_daywork_item_examine where deleted = 0 and dept_id = (select outsource_dept_id from biz_outsourced_order where deleted = 0 and id = #{masterId}) and daywork_id = #{dayworkId}
+    </select>
     <select id="getListForReceipt" parameterType="BizOutsourcedOrderDetail" resultMap="BizOutsourcedOrderDetailResult">
         SELECT
         t1.*
@@ -176,6 +227,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="supplierId != null "> AND t1.supplier_id = #{supplierId}</if>
         </trim>
     </select>
+    <select id="getNextInfo" resultType="boolean">
+        SELECT CASE WHEN COUNT(1) > 1 THEN true ELSE false END as hasNextInfo
+        FROM biz_daywork_item
+        WHERE daywork_id = #{dayworkId}
+        AND deleted = 0
+        AND outsource_detail_id = #{id}
+    </select>
     <select id="getFinishedOutsourceDetailList" parameterType="BizOutsourcedOrderDetail" resultMap="BizOutsourcedOrderDetailResult">
         SELECT distinct t1.id,t1.lot_code,t1.product_description,t1.original_carrier,t1.new_carrier,t1.create_time,t1.daywork_id,t1.supplier_name,
         (select form_date from biz_return_receipt_detail where biz_return_receipt_detail.outsource_detail_id = t1.id and biz_return_receipt_detail.deleted = 0 and t1.deleted = 0 limit 1) as form_date

+ 20 - 0
src/main/resources/mybatis/business/BizOutsourcedOrderMapper.xml

@@ -25,6 +25,26 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </trim>
         order by create_time desc
     </select>
+    <select id="getInnerList" parameterType="BizOutsourcedOrder" resultMap="BizOutsourcedOrderResult">
+        SELECT t1.*,t2.dept_name as outsourceDeptName FROM biz_outsourced_order t1 left join sys_dept t2 on t1.outsource_dept_id = t2.dept_id
+        <trim prefix=" WHERE" suffix="" suffixOverrides="AND">
+            t1.deleted = 0 and t1.is_inner_outsource = 1 and t2.del_flag = 0
+            <if test="formCode != null  and formCode != ''"> AND t1.form_code like concat('%',#{formCode},'%')</if>
+            <if test="formDate != null "> AND t1.form_date = #{formDate}</if>
+            <if test="supplierName != null  and supplierName != ''"> AND t1.supplier_name like concat('%', #{supplierName}, '%')</if>
+            <if test="outsourceDeptName != null  and outsourceDeptName != ''"> AND t2.dept_name like concat('%', #{outsourceDeptName}, '%')</if>
+            <if test="deliveryMethod != null "> AND t1.delivery_method = #{deliveryMethod}</if>
+            <if test="freightPrice != null "> AND t1.freight_price = #{freightPrice}</if>
+            <if test="freightAmount != null "> AND t1.freight_amount = #{freightAmount}</if>
+            <if test="isFirstProcess != null "> AND t1.is_first_process = #{isFirstProcess}</if>
+            <if test="packagingMethod != null  and packagingMethod != ''"> AND t1.packaging_method = #{packagingMethod}</if>
+        </trim>
+        order by create_time desc
+    </select>
+    <select id="getInnerById" resultType="cn.ezhizao.project.business.domain.BizOutsourcedOrder">
+        select t1.*,t2.dept_name as outsourceDeptName from biz_outsourced_order t1 left join sys_dept t2 on t1.outsource_dept_id = t2.dept_id
+        where t1.id = #{id} and t1.deleted = 0 and t2.del_flag = 0
+    </select>
     <select id="getAllList" resultType="cn.ezhizao.project.business.domain.BizOutsourcedOrder">
         select t1.* from biz_outsourced_order t1  order by t1.form_code desc
     </select>

+ 3 - 0
src/main/resources/mybatis/business/BizTurnoverMapper.xml

@@ -18,6 +18,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="tenantId != null "> AND tenant_id = #{tenantId}</if>
         </trim>
     </select>
+    <select id="getTurnoverByDeptId" resultMap="BizTurnoverResult">
+        select * from biz_turnover where dept_id = #{deptId} and deleted = 0 limit 1
+    </select>
 
     <delete id="physicalDelete">
         DELETE FROM biz_turnover

+ 1 - 1
src/main/resources/mybatis/system/SysDeptMapper.xml

@@ -132,7 +132,7 @@
 	</select>
 
 	<select id="selectDeptById" parameterType="Long" resultMap="SysDeptResult">
-		select d.type,d.dept_id,d.is_work_section,d.tenant_id,d.parent_id, d.ancestors, d.dept_name,d.dept_code, d.order_num, d.phone, d.email, d.status,d.auto_allocation,
+		select d.type,d.dept_id,d.is_work_section,d.tenant_id,d.parent_id, d.ancestors, d.dept_name,d.dept_code, d.order_num, d.phone, d.email, d.status,d.auto_allocation,d.supplier_id,
 			   (select dept_name from sys_dept where dept_id = d.parent_id) parent_name
 		from sys_dept d
 		where d.dept_id = #{deptId}