浏览代码

aps-领料增加借调逻辑

sucheng 9 月之前
父节点
当前提交
d1eae0b4ad

+ 127 - 119
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ApsBlankOrderServiceImpl.java

@@ -1938,122 +1938,7 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
             apsWorkInProgressInventoryService.updateById(apsWorkInProgressInventoryDo);
 
             //借调逻辑
-            if (ObjectUtil.isNotEmpty(progressWork) && ObjectUtil.isNotEmpty(progressWork.getWorkinprocessstatus()) && progressWork.getWorkinprocessstatus().equals(SaveConstans.WorkInProgressStatus.WAIT_WORK)) {
-                //获取该在制品的工序作业ID
-                String processoperationid = progressWork.getProcessoperationid();
-                //获取该在制品的批次号
-                String batchnumber = progressWork.getBatchnumber();
-                //获取该在制品作业明细的ID
-                String processoperationequid = progressWork.getProcessoperationequid();
-                //在制品对应的工序作业输出物料ID
-                String joboutputmaterialid = progressWork.getJoboutputmaterialid();
-//                //该对应工序作业的已借调卷数=已借调卷数+1
-//                this.baseMapper.processAddSecondRoll(processoperationid);
-//                //将在制品的作业输出物料ID对应的所有后道工序作业的所有作业明细的待加工料卷批次号去掉“{批次号},”
-//                this.baseMapper.processDeleteBatchNumber(batchnumber, processoperationid);
-                //查找该在制品作业明细ID对应的后道作业明细中,其工序作业的输入物料ID是该在制品的作业输出物料ID的所有作业明细,
-                //将这些作业明细的待加工料卷批次号去掉“{批次号},”
-                this.baseMapper.updateBatchNumberByBorrow(batchnumber, processoperationequid, joboutputmaterialid);
-
-
-                //分配被借调作业明细=备料在制品所有后道作业明细中计划加工卷数-已开工卷数-已借调卷数>0的作业明细中,
-                // 优先取已取消卷数>已借调卷数,并且计划开工时间最晚的一个作业明细,
-                // 如果没有已取消卷数>已借调卷数的作业明细,则取计划开工时间最晚的一个作业明细
-
-                //查询被借调作业明细的信息
-                ApsProcessOperationProcessEquDo borrowOperationEqu = apsProcessOperationProcessEquService.getById(processoperationequid);
-                //查询被借调作业的信息
-                ApsProcessOperationDo needBorrowOperation = apsProcessOperationDao.selectNeedBorrowOperation(joboutputmaterialid);
-                List<ApsProcessOperationProcessEquDo> apsProcessOperationProcessEquDoList = apsProcessOperationProcessEquService.list(new QueryWrapper<ApsProcessOperationProcessEquDo>().lambda().eq(ApsProcessOperationProcessEquDo::getPreviousprocessesids, borrowOperationEqu.getId()));
-                //所有后道作业明细中计划加工卷数-已开工卷数-已借调卷数>0的作业明细
-                List<ApsProcessOperationProcessEquDo> collect1 = apsProcessOperationProcessEquDoList.stream().filter(item -> (item.getPlanprocessrall() - item.getStartingroll() - item.getSecondroll()) > 0).collect(Collectors.toList());
-                //优先取已取消卷数>已借调卷数
-                List<ApsProcessOperationProcessEquDo> collect = apsProcessOperationProcessEquDoList.stream().filter(item -> (item.getCancelroll() > item.getSecondroll())).collect(Collectors.toList());
-                ApsProcessOperationProcessEquDo needBorrowOperationEqu = null;
-                if (ObjectUtil.isNotEmpty(collect)) {
-                    //并且计划开工时间最晚的一个作业明细
-                    needBorrowOperationEqu = collect.stream().sorted(Comparator.comparing(ApsProcessOperationProcessEquDo::getPlanstartdate).reversed()).findFirst().orElse(null);
-                } else {
-                    //如果没有已取消卷数>已借调卷数的作业明细,则取计划开工时间最晚的一个作业明细
-                    needBorrowOperationEqu = collect1.stream().sorted(Comparator.comparing(ApsProcessOperationProcessEquDo::getPlanstartdate).reversed()).findFirst().orElse(null);
-                }
-                if (ObjectUtil.isNotEmpty(needBorrowOperationEqu)) {
-                    //更新明细的已借调卷数
-                    //更新工序作业的已借调卷数
-                    Integer secondroll = needBorrowOperationEqu.getSecondroll() + 1;
-                    ApsProcessOperationProcessEquDo needUpdateProcessEqu = new ApsProcessOperationProcessEquDo();
-                    needUpdateProcessEqu.setId(needBorrowOperationEqu.getId());
-                    needUpdateProcessEqu.setSecondroll(secondroll);
-                    apsProcessOperationProcessEquService.updateById(needUpdateProcessEqu);
-
-                    /**
-                     * 已借调卷数=已借调卷数+1
-                     * 如果已借调卷数>已取消卷数,
-                     *  临时计算本次取消卷数=1
-                     *  根据被借调作业明细的本次取消卷数取消和更新作业明细,参见【取消和更新作业明细】
-                     */
-                    if (secondroll > needBorrowOperationEqu.getCancelroll()) {
-                        needBorrowOperationEqu.setSecondroll(secondroll);
-                        R r = apsProcessOperationService.cancelProcessOperationEqu(1, needBorrowOperation, needBorrowOperationEqu);
-                        if (!r.getCode().equals("200")) {
-                            throw new CustomException(r.getMsg());
-                        }
-
-                    }
-                }
-
-
-                /**
-                 * 更新被借调作业
-                 *  已借调卷数=已借调卷数+1,
-                 *  如果已借调卷数>已取消卷数,
-                 *      临时计算本次取消卷数=1
-                 *      已取消卷数=已取消卷数+本次取消卷数
-                 *      根据被借调作业的本次取消卷数取消和更新该工序作业,参见【取消和更新工序作业】
-                 */
-                if (ObjectUtil.isNotEmpty(needBorrowOperation)) {
-                    //更新工序作业的一借调卷数
-                    Integer secondroll = needBorrowOperation.getSecondroll() + 1;
-                    ApsProcessOperationDo needUpdateProcess = new ApsProcessOperationDo();
-                    needUpdateProcess.setId(needBorrowOperation.getId());
-                    needUpdateProcess.setSecondroll(secondroll);
-                    apsProcessOperationService.updateById(needUpdateProcess);
-
-                    /**
-                     * 如果已借调卷数>已取消卷数
-                     * 本次取消卷数=1
-                     * 根据本次取消卷数更新对应工序作业的取消卷数
-                     */
-                    if (secondroll > needBorrowOperation.getCancelroll()) {
-                        CancelProcessOperationVo cancelProcessOperationVo = new CancelProcessOperationVo();
-                        needBorrowOperation.setSecondroll(secondroll);
-                        cancelProcessOperationVo.setApsprocessoperationdo(needBorrowOperation);
-                        cancelProcessOperationVo.setCurcancelroll(1);
-                        cancelProcessOperationVo.setUpdatecuropration(false);
-                        R r = apsProcessOperationService.cancelProcessOperation(cancelProcessOperationVo);
-                        if (!r.getCode().equals("200")) {
-                            throw new CustomException(r.getMsg());
-                        }
-                    }
-                    //撤回订单
-                    //被撤回的作业明细
-                    ApsProcessOperationProcessEquDo apsProcessOperationProcessEquDo = apsProcessOperationProcessEquService.getById(processoperationequid);
-                    //被撤回的坯料计划
-                    ApsBlankOrderDo changeBlankOrder = apsBlankOrderService.getById(apsProcessOperationProcessEquDo.getBlankid());
-                    //被撤回的订单信息
-                    ApsProductionOrderDo apsProductionOrderDo = apsProductionOrderService.getById(changeBlankOrder.getProductionorderid());
-                    reportCheckService.goBackWf(processoperationequid, apsProcessOperationProcessEquDo.getBlankid(), apsProductionOrderDo);
-
-
-//                //处理后续工序状态
-//                Map<String, Object> params2 = new HashMap<>();
-//                params2.put("processId", processoperationid);
-//                R r2 = apsProcessOperationService.updateBorrowProcess(params2);
-//                if (!r2.getCode().equals("200")) {
-//                    return R.error(r2.getMsg());
-//                }
-                }
-            }
+            borrowBlank(progressWork);
         }
 
         return R.ok();
@@ -2755,13 +2640,13 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
         // modify at [ 2024-10-14 11:51:18 ] by xh: 按照项目经理要求只比较日期的日期部分
 
         //如果排程交货期-起>承诺交货期-起
-        if (DateCompare(startDate,newStartDate)>0) {
+        if (DateCompare(startDate, newStartDate) > 0) {
             updateIds.add(blankDeliveryDate.get(0).getId());
         } else {
             removeIds.add(blankDeliveryDate.get(0).getId());
         }
         // 如果排程交货期-止>承诺交货期-止
-        if (DateCompare(endDate,newEndDate)>0) {
+        if (DateCompare(endDate, newEndDate) > 0) {
             updateIds.add(blankDeliveryDate.get(1).getId());
         } else {
             removeIds.add(blankDeliveryDate.get(1).getId());
@@ -2808,7 +2693,7 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
         return calendar.getTime();
     }
 
-    public int DateCompare(Date date1, Date date2){
+    public int DateCompare(Date date1, Date date2) {
         Calendar calendar1 = Calendar.getInstance();
         calendar1.setTime(date1);
         calendar1.set(Calendar.HOUR_OF_DAY, 0);
@@ -3112,6 +2997,9 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
                     addBatchNumberList.set(i, s);
                     batchNumberList.set(batchNumberList.indexOf(addBatchNumber), s);
                 }
+            } else {
+                //借调逻辑
+                borrowBlank(apsWorkInProgressInventoryDo);
             }
         }
 
@@ -3240,6 +3128,126 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
         return R.ok();
     }
 
+    private void borrowBlank(ApsWorkInProgressInventoryDo progressWork) {
+        //借调逻辑
+        if (ObjectUtil.isNotEmpty(progressWork) && ObjectUtil.isNotEmpty(progressWork.getWorkinprocessstatus()) && progressWork.getWorkinprocessstatus().equals(SaveConstans.WorkInProgressStatus.WAIT_WORK)) {
+            //获取该在制品的工序作业ID
+            String processoperationid = progressWork.getProcessoperationid();
+            //获取该在制品的批次号
+            String batchnumber = progressWork.getBatchnumber();
+            //获取该在制品作业明细的ID
+            String processoperationequid = progressWork.getProcessoperationequid();
+            //在制品对应的工序作业输出物料ID
+            String joboutputmaterialid = progressWork.getJoboutputmaterialid();
+//                //该对应工序作业的已借调卷数=已借调卷数+1
+//                this.baseMapper.processAddSecondRoll(processoperationid);
+//                //将在制品的作业输出物料ID对应的所有后道工序作业的所有作业明细的待加工料卷批次号去掉“{批次号},”
+//                this.baseMapper.processDeleteBatchNumber(batchnumber, processoperationid);
+            //查找该在制品作业明细ID对应的后道作业明细中,其工序作业的输入物料ID是该在制品的作业输出物料ID的所有作业明细,
+            //将这些作业明细的待加工料卷批次号去掉“{批次号},”
+            this.baseMapper.updateBatchNumberByBorrow(batchnumber, processoperationequid, joboutputmaterialid);
+
+
+            //分配被借调作业明细=备料在制品所有后道作业明细中计划加工卷数-已开工卷数-已借调卷数>0的作业明细中,
+            // 优先取已取消卷数>已借调卷数,并且计划开工时间最晚的一个作业明细,
+            // 如果没有已取消卷数>已借调卷数的作业明细,则取计划开工时间最晚的一个作业明细
+
+            //查询被借调作业明细的信息
+            ApsProcessOperationProcessEquDo borrowOperationEqu = apsProcessOperationProcessEquService.getById(processoperationequid);
+            //查询被借调作业的信息
+            ApsProcessOperationDo needBorrowOperation = apsProcessOperationDao.selectNeedBorrowOperation(joboutputmaterialid);
+            List<ApsProcessOperationProcessEquDo> apsProcessOperationProcessEquDoList = apsProcessOperationProcessEquService.list(new QueryWrapper<ApsProcessOperationProcessEquDo>().lambda().eq(ApsProcessOperationProcessEquDo::getPreviousprocessesids, borrowOperationEqu.getId()));
+            //所有后道作业明细中计划加工卷数-已开工卷数-已借调卷数>0的作业明细
+            List<ApsProcessOperationProcessEquDo> collect1 = apsProcessOperationProcessEquDoList.stream().filter(item -> (item.getPlanprocessrall() - item.getStartingroll() - item.getSecondroll()) > 0).collect(Collectors.toList());
+            //优先取已取消卷数>已借调卷数
+            List<ApsProcessOperationProcessEquDo> collect = apsProcessOperationProcessEquDoList.stream().filter(item -> (item.getCancelroll() > item.getSecondroll())).collect(Collectors.toList());
+            ApsProcessOperationProcessEquDo needBorrowOperationEqu = null;
+            if (ObjectUtil.isNotEmpty(collect)) {
+                //并且计划开工时间最晚的一个作业明细
+                needBorrowOperationEqu = collect.stream().sorted(Comparator.comparing(ApsProcessOperationProcessEquDo::getPlanstartdate).reversed()).findFirst().orElse(null);
+            } else {
+                //如果没有已取消卷数>已借调卷数的作业明细,则取计划开工时间最晚的一个作业明细
+                needBorrowOperationEqu = collect1.stream().sorted(Comparator.comparing(ApsProcessOperationProcessEquDo::getPlanstartdate).reversed()).findFirst().orElse(null);
+            }
+            if (ObjectUtil.isNotEmpty(needBorrowOperationEqu)) {
+                //更新明细的已借调卷数
+                //更新工序作业的已借调卷数
+                Integer secondroll = needBorrowOperationEqu.getSecondroll() + 1;
+                ApsProcessOperationProcessEquDo needUpdateProcessEqu = new ApsProcessOperationProcessEquDo();
+                needUpdateProcessEqu.setId(needBorrowOperationEqu.getId());
+                needUpdateProcessEqu.setSecondroll(secondroll);
+                apsProcessOperationProcessEquService.updateById(needUpdateProcessEqu);
+
+                /**
+                 * 已借调卷数=已借调卷数+1
+                 * 如果已借调卷数>已取消卷数,
+                 *  临时计算本次取消卷数=1
+                 *  根据被借调作业明细的本次取消卷数取消和更新作业明细,参见【取消和更新作业明细】
+                 */
+                if (secondroll > needBorrowOperationEqu.getCancelroll()) {
+                    needBorrowOperationEqu.setSecondroll(secondroll);
+                    R r = apsProcessOperationService.cancelProcessOperationEqu(1, needBorrowOperation, needBorrowOperationEqu);
+                    if (!r.getCode().equals("200")) {
+                        throw new CustomException(r.getMsg());
+                    }
+
+                }
+            }
+
+
+            /**
+             * 更新被借调作业
+             *  已借调卷数=已借调卷数+1,
+             *  如果已借调卷数>已取消卷数,
+             *      临时计算本次取消卷数=1
+             *      已取消卷数=已取消卷数+本次取消卷数
+             *      根据被借调作业的本次取消卷数取消和更新该工序作业,参见【取消和更新工序作业】
+             */
+            if (ObjectUtil.isNotEmpty(needBorrowOperation)) {
+                //更新工序作业的一借调卷数
+                Integer secondroll = needBorrowOperation.getSecondroll() + 1;
+                ApsProcessOperationDo needUpdateProcess = new ApsProcessOperationDo();
+                needUpdateProcess.setId(needBorrowOperation.getId());
+                needUpdateProcess.setSecondroll(secondroll);
+                apsProcessOperationService.updateById(needUpdateProcess);
+
+                /**
+                 * 如果已借调卷数>已取消卷数
+                 * 本次取消卷数=1
+                 * 根据本次取消卷数更新对应工序作业的取消卷数
+                 */
+                if (secondroll > needBorrowOperation.getCancelroll()) {
+                    CancelProcessOperationVo cancelProcessOperationVo = new CancelProcessOperationVo();
+                    needBorrowOperation.setSecondroll(secondroll);
+                    cancelProcessOperationVo.setApsprocessoperationdo(needBorrowOperation);
+                    cancelProcessOperationVo.setCurcancelroll(1);
+                    cancelProcessOperationVo.setUpdatecuropration(false);
+                    R r = apsProcessOperationService.cancelProcessOperation(cancelProcessOperationVo);
+                    if (!r.getCode().equals("200")) {
+                        throw new CustomException(r.getMsg());
+                    }
+                }
+                //撤回订单
+                //被撤回的作业明细
+                ApsProcessOperationProcessEquDo apsProcessOperationProcessEquDo = apsProcessOperationProcessEquService.getById(processoperationequid);
+                //被撤回的坯料计划
+                ApsBlankOrderDo changeBlankOrder = apsBlankOrderService.getById(apsProcessOperationProcessEquDo.getBlankid());
+                //被撤回的订单信息
+                ApsProductionOrderDo apsProductionOrderDo = apsProductionOrderService.getById(changeBlankOrder.getProductionorderid());
+                reportCheckService.goBackWf(processoperationequid, apsProcessOperationProcessEquDo.getBlankid(), apsProductionOrderDo);
+
+
+//                //处理后续工序状态
+//                Map<String, Object> params2 = new HashMap<>();
+//                params2.put("processId", processoperationid);
+//                R r2 = apsProcessOperationService.updateBorrowProcess(params2);
+//                if (!r2.getCode().equals("200")) {
+//                    return R.error(r2.getMsg());
+//                }
+            }
+        }
+    }
+
     @Override
     public R checkAddMaterial(AddMaterialReq req) {
         //分割批次号