Ver Fonte

feature 换线逻辑修改

xiahan há 1 ano atrás
pai
commit
94671c9a76

+ 80 - 67
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ApsProcessOperationProcessEquServiceImpl.java

@@ -1,6 +1,5 @@
 package com.rongwei.bscommon.sys.service.impl;
 
-import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.date.DateUnit;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
@@ -29,6 +28,7 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
 import java.util.*;
+import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicReference;
 import java.util.stream.Collectors;
 
@@ -38,6 +38,7 @@ import static com.rongwei.safecommon.utils.SaveConstans.ForcedConflictsDescripti
 import static com.rongwei.safecommon.utils.SaveConstans.JobStatus.*;
 import static com.rongwei.safecommon.utils.SaveConstans.LockmarkType.LOCKMARK_N;
 import static com.rongwei.safecommon.utils.SaveConstans.LockmarkType.LOCKMARK_Y;
+import static com.rongwei.safecommon.utils.SaveConstans.ProcessWay.PROCESS_WAY_MERGE;
 import static com.rongwei.safecommon.utils.SaveConstans.ProductionStatus.*;
 
 /**
@@ -335,6 +336,8 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
             Date planenddate = processEqus.getPlanenddate();
             ApsProcessOperationDo apsProcessOperationDo = apsProcessOperationService.getById(processEqus.getProcessid());
             String processWay = apsProcessOperationDo.getProcessway();
+            // 单卷加工时长
+            BigDecimal onceprocessmin = apsProcessOperationDo.getOnceprocessmin();
             updateConflictVo.setOldPlanEnddate(planstartdate);
             updateConflictVo.setOldPlanStartdate(planenddate);
             updateConflictVo.setCurrentProcessWay(processWay);
@@ -346,10 +349,11 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
                 processEqus.setProcessworkshop(changingWiresVo.getWorkshopName());
                 processEqus.setProcessdeviceid(changingWiresVo.getEquId());
                 processEqus.setProcessdevice(changingWiresVo.getEquName());
-                // 计划开工时间=计划开工时间-开工时间间隔
+                // 计划开工时间=计划开工时间-开工时间间隔
                 processEqus.setPlanstartdate(new Date(planstartdate.getTime() - timeInterval));
-                // 计划完工时间=计划完工时间-开工时间间隔
+                // 计划完工时间=计划完工时间-开工时间间隔
                 processEqus.setPlanenddate(new Date(processEqus.getPlanenddate().getTime() - timeInterval));
+
                 checkConflictVos.add(new CheckConflictVo(processEqus.getId(), processEqus.getProcessdeviceid(),
                         processEqus.getPlanstartdate(), processEqus.getPlanenddate()));
                 saveList.add(processEqus);
@@ -359,48 +363,61 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
             //加工中的状态 将未加工的改变为重新生成
             if (JOBSTATUS_TO_BE_STARTING.equals(processEqus.getWorkstatus())) {
                 emptyBackup.set(true);
-                ApsProcessOperationProcessEquDo newProcessEqu = new ApsProcessOperationProcessEquDo();
-                BeanUtils.copyProperties(processEqus, newProcessEqu);
-
                 // 获取加工时长
-                long processingTime = DateUtil.between(processEqus.getPlanenddate(), processEqus.getPlanstartdate(), DateUnit.SECOND, false);
+                //  long processingTime = DateUtil.between(processEqus.getPlanenddate(), processEqus.getPlanstartdate(), DateUnit.SECOND, false);
+                // 需要拆分工序作业
+                if (processEqus.getPlanprocessrall() - processEqus.getStartingroll() - processEqus.getCancelroll() > 0) {
+                    ApsProcessOperationProcessEquDo newProcessEqu = new ApsProcessOperationProcessEquDo();
+                    BeanUtils.copyProperties(processEqus, newProcessEqu);
+                    newProcessEqu.setId(SecurityUtil.getUUID());
+                    newProcessEqu.setProcessworkshopid(changingWiresVo.getWorkshopId());
+                    newProcessEqu.setProcessworkshop(changingWiresVo.getWorkshopName());
+                    newProcessEqu.setProcessdeviceid(changingWiresVo.getEquId());
+                    newProcessEqu.setProcessdevice(changingWiresVo.getEquName());
+                    newProcessEqu.setCancelroll(0);
+                    //计划加工卷数=计划加工卷数-已开工卷数
+                    newProcessEqu.setPlanprocessrall(newProcessEqu.getPlanprocessrall() - newProcessEqu.getStartingroll());
+                    // 更新计划完工时间
+                    if (PROCESS_WAY_MERGE.equals(apsProcessOperationDo.getProcessway())) {
+                        // 如果工序作业的加工方式是合并加工,则计划完工时间=计划开工时间+工序作业单卷加工时长 - 开工时间间隔
+                        newProcessEqu.setPlanenddate(new Date(newProcessEqu.getPlanenddate().getTime() + TimeUnit.MINUTES.toMillis(onceprocessmin.intValue()) - timeInterval));
+                    } else {
+                        // 如果工序作业的加工方式不是合并加工,则计划完工时间=计划开工时间+工序作业单卷加工时长*(计划加工卷数) - 开工时间间隔
+                        newProcessEqu.setPlanenddate(new Date(newProcessEqu.getPlanenddate().getTime() + TimeUnit.MINUTES.toMillis((long) timeInterval * newProcessEqu.getPlanprocessrall()) - timeInterval));
+                    }
+
+                    newProcessEqu.setStartingroll(0);
+                    newProcessEqu.setReportroll(0);
+                    newProcessEqu.setCheckoutroll(0);
+
+                    newProcessEqu.setUnfinishroll(newProcessEqu.getPlanprocessrall());
+                    newProcessEqu.setWorkstatus(JOBSTATUS_TO_BE_START);
+                    newProcessEqu.setClosestatus(SaveConstans.CloseStatus.UNFINISHED);
+                    affectedIdList.add(newProcessEqu.getId());
+                    updateConflictVo.setApsProcessOperationProcessEquDo(newProcessEqu);
+                    checkConflictVos.add(new CheckConflictVo(processEqus.getId(), newProcessEqu.getProcessdeviceid(),
+                            newProcessEqu.getPlanstartdate(), newProcessEqu.getPlanenddate()));
+                    saveList.add(newProcessEqu);
+                    updateConflictVoList.add(updateConflictVo);
+                }
                 /************更新换线后工序作业的信息********************/
-                newProcessEqu.setId(SecurityUtil.getUUID());
-                affectedIdList.add(newProcessEqu.getId());
-                newProcessEqu.setProcessworkshopid(changingWiresVo.getWorkshopId());
-                newProcessEqu.setProcessworkshop(changingWiresVo.getWorkshopName());
-                newProcessEqu.setProcessdeviceid(changingWiresVo.getEquId());
-                newProcessEqu.setProcessdevice(changingWiresVo.getEquName());
-                // 更新计划完工时间
-                newProcessEqu.setPlanenddate(CalculateCompletionTime(newProcessEqu.getPlanstartdate(), processingTime,
-                        newProcessEqu.getPlanprocessrall() - newProcessEqu.getStartingroll(),
-                        newProcessEqu.getPlanprocessrall()));
-                //计划加工卷数=计划加工卷数-已开工卷数
-                newProcessEqu.setPlanprocessrall(newProcessEqu.getPlanprocessrall() - newProcessEqu.getStartingroll());
-                newProcessEqu.setStartingroll(0);
-                newProcessEqu.setReportroll(0);
-                newProcessEqu.setCheckoutroll(0);
-                newProcessEqu.setUnfinishroll(newProcessEqu.getPlanprocessrall());
-                newProcessEqu.setWorkstatus(JOBSTATUS_TO_BE_START);
-                newProcessEqu.setClosestatus(SaveConstans.CloseStatus.UNFINISHED);
-                saveList.add(processEqus);
-                updateConflictVo.setApsProcessOperationProcessEquDo(newProcessEqu);
-                updateConflictVoList.add(updateConflictVo);
-                checkConflictVos.add(new CheckConflictVo(processEqus.getId(), newProcessEqu.getProcessdeviceid(),
-                        newProcessEqu.getPlanstartdate(), newProcessEqu.getPlanenddate()));
 
+                //更新计划加工卷数
+                processEqus.setPlanprocessrall(processEqus.getStartingroll() + processEqus.getCancelroll());
 
-                saveList.add(newProcessEqu);
-                /************更新原数据的数量信息***********************/
                 // 更新计划完工时间
-                processEqus.setPlanenddate(CalculateCompletionTime(processEqus.getPlanstartdate(), processingTime,
-                        processEqus.getStartingroll(), processEqus.getPlanprocessrall()));
-                //更新计划加工卷数
-                processEqus.setPlanprocessrall(processEqus.getStartingroll());
+                if (PROCESS_WAY_MERGE.equals(apsProcessOperationDo.getProcessway())) {
+                    // 如果工序作业的加工方式是合并加工,则计划完工时间=计划开工时间+工序作业单卷加工时长
+                    processEqus.setPlanenddate(new Date(processEqus.getPlanenddate().getTime() + TimeUnit.MINUTES.toMillis(onceprocessmin.intValue())));
+                } else {
+                    // 如果工序作业的加工方式不是合并加工,则计划完工时间=计划开工时间+工序作业单卷加工时长*计划加工卷数
+                    processEqus.setPlanenddate(new Date(processEqus.getPlanenddate().getTime() + TimeUnit.MINUTES.toMillis((long) onceprocessmin.intValue() * processEqus.getPlanprocessrall())));
+                }
+
                 // 更新未完工卷数
                 processEqus.setUnfinishroll(processEqus.getPlanprocessrall() - processEqus.getReportroll());
                 // 作业状态
-                processEqus.setWorkstatus(processEqus.getUnfinishroll() == 0 ? JOBSTATUS_TO_BE_END : JOBSTATUS_TO_BE_STARTING);
+                processEqus.setWorkstatus(processEqus.getUnfinishroll() - processEqus.getCancelroll() == 0 ? JOBSTATUS_TO_BE_END : JOBSTATUS_TO_BE_STARTING);
                 /**
                  * 更新完工状态
                  * 如果作业明细的完工状态=未完工,并且作业明细的已开工卷数=0,则作业状态=待开工;
@@ -412,11 +429,6 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
                 } else {
                     processEqus.setClosestatus(processEqus.getStartingroll() > 0 ? JOBSTATUS_TO_BE_STARTING : JOBSTATUS_TO_BE_START);
                 }
-//                // 校验可用时间
-//                affectedIdList.addAll(checkProcessingTimeConflict(processEqus, planstartdate, planenddate, processWay));
-//                // 判断是否存在设备不可用
-//                inspectionEquipmentIsAvailable(processEqus, processEqus.getProcessdeviceid(), processEqus.getPlanstartdate()
-//                        , processEqus.getPlanenddate());
                 saveList.add(processEqus);
             }
             // 更新坯料交货期
@@ -436,11 +448,11 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
             // 删除工序作业备份
             ApsUtils.clearBackup(currentUser);
         }
-        if(!saveList.isEmpty()){
+        if (!saveList.isEmpty()) {
             this.saveOrUpdateBatch(saveList);
         }
-        if(!updateConflictVoList.isEmpty()){
-            updateConflictVoList.forEach(data->{
+        if (!updateConflictVoList.isEmpty()) {
+            updateConflictVoList.forEach(data -> {
                 ApsProcessOperationProcessEquDo apsProcessOperationProcessEquDo = data.getApsProcessOperationProcessEquDo();
                 affectedIdList.addAll(checkProcessingTimeConflict(apsProcessOperationProcessEquDo,
                         data.getOldPlanStartdate(), data.getOldPlanEnddate(), data.getCurrentProcessWay()));
@@ -458,16 +470,16 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
 
     /**
      * 计算计划完工时间
-     * = 计划开工时间+加工时长*(已开工卷数/计划加工卷数)
+     * = 计划开工时间+加工时长/原计划加工卷数*本次计划加工卷数
      *
-     * @param planStartTime
-     * @param processingTime
-     * @param startingroll
-     * @param planprocessrall
+     * @param planStartTime   加工开始时间
+     * @param processingTime  原计划加工时长
+     * @param startingroll    本次计划加工卷数
+     * @param planprocessrall 原计划加工卷数
      * @return
      */
     private Date CalculateCompletionTime(Date planStartTime, long processingTime, int startingroll, int planprocessrall) {
-        int i = new BigDecimal(processingTime).multiply(new BigDecimal(startingroll)).divide(new BigDecimal(planprocessrall)).intValue();
+        int i = new BigDecimal(processingTime).divide(new BigDecimal(planprocessrall)).multiply(new BigDecimal(startingroll)).intValue();
         return DateUtil.offsetSecond(planStartTime, i);
     }
 
@@ -506,8 +518,8 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
         /// 设计到修改的工序作业ID
         ApsUtils.checkScheduling(null);
         List<String> affectedIdList = new ArrayList<>();
-        List<UpdateConflictVo> updateConflictVos= new ArrayList<>();
-        Set <String> blankIdSet = new HashSet<>();
+        List<UpdateConflictVo> updateConflictVos = new ArrayList<>();
+        Set<String> blankIdSet = new HashSet<>();
         UpdateConflictVo vo;
         for (ChangeStartTimeVo changeStartTimeVo : changeStartTimeVos) {
             vo = new UpdateConflictVo();
@@ -531,16 +543,16 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
             vo.setApsProcessOperationProcessEquDo(processEquDo);
             vo.setOldEquId(changeStartTimeVo.getEquId());
             vo.setOldPlanEnddate(processEquDo.getPlanstartdate());
-            vo.setCurrentProcessWay( operationDo.getProcessway());
+            vo.setCurrentProcessWay(operationDo.getProcessway());
             vo.setOldPlanStartdate(processEquDo.getPlanenddate());
             updateConflictVos.add(vo);
             this.update(new LambdaUpdateWrapper<ApsProcessOperationProcessEquDo>()
-                    .eq(ApsProcessOperationProcessEquDo::getId,id)
-                    .set(ApsProcessOperationProcessEquDo::getPlanstartdate,changeStartTimeVo.getPlanStartTime())
-                    .set(ApsProcessOperationProcessEquDo::getPlanenddate,changeStartTimeVo.getPlanEndTime())
+                    .eq(ApsProcessOperationProcessEquDo::getId, id)
+                    .set(ApsProcessOperationProcessEquDo::getPlanstartdate, changeStartTimeVo.getPlanStartTime())
+                    .set(ApsProcessOperationProcessEquDo::getPlanenddate, changeStartTimeVo.getPlanEndTime())
             );
         }
-        updateConflictVos.forEach(data->{
+        updateConflictVos.forEach(data -> {
             ApsProcessOperationProcessEquDo apsProcessOperationProcessEquDo = data.getApsProcessOperationProcessEquDo();
             affectedIdList.addAll(checkProcessingTimeConflict(apsProcessOperationProcessEquDo,
                     data.getOldPlanStartdate(), data.getOldPlanEnddate(), data.getCurrentProcessWay()));
@@ -550,7 +562,7 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
                     apsProcessOperationProcessEquDo.getPlanstartdate(),
                     apsProcessOperationProcessEquDo.getPlanenddate());
         });
-        blankIdSet.forEach(blankId->{
+        blankIdSet.forEach(blankId -> {
             // 更新坯料交货期
             apsBlankOrderService.updateBlankDeliveryDate(null, blankId);
         });
@@ -630,7 +642,7 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
 
         this.updateById(apsProcessOperationProcessEquDo);
         // 更新坯料交货期
-        apsBlankOrderService. updateBlankDeliveryDate(null,apsProcessOperationDo.getBlankid());
+        apsBlankOrderService.updateBlankDeliveryDate(null, apsProcessOperationDo.getBlankid());
         affectedIdList.addAll(jobDetailsVo.getReturnAboutIds());
         return R.ok(this.ganttService.getListById(affectedIdList));
     }
@@ -851,7 +863,7 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
         }
         List<String> conflictdeList = new ArrayList<>(Arrays.asList(oldConflictDesc.split(",")));
         conflictdeList.remove(removeConflictDesc);
-        return conflictdeList.stream().distinct().collect(Collectors.joining( ","));
+        return conflictdeList.stream().distinct().collect(Collectors.joining(","));
     }
 
     /**
@@ -876,9 +888,9 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
             newConflictdes = addNewConflictsDesc(processEquDo.getConflictdes(), EQUIPMENT_RUN_TIME);
         }
         this.update(new LambdaUpdateWrapper<ApsProcessOperationProcessEquDo>()
-                .eq(ApsProcessOperationProcessEquDo::getId,processEquDo.getId())
-                .set(ApsProcessOperationProcessEquDo::getConflictdes,newConflictdes)
-                .set(ApsProcessOperationProcessEquDo::getHasconflict,StringUtils.isBlank(newConflictdes) &&
+                .eq(ApsProcessOperationProcessEquDo::getId, processEquDo.getId())
+                .set(ApsProcessOperationProcessEquDo::getConflictdes, newConflictdes)
+                .set(ApsProcessOperationProcessEquDo::getHasconflict, StringUtils.isBlank(newConflictdes) &&
                         StringUtils.isBlank(processEquDo.getSoftconflictdes()) ? LOCKMARK_N : LOCKMARK_Y)
         );
     }
@@ -927,13 +939,14 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
                     StringUtils.isBlank(apsProcessOperationProcessEquDo.getSoftconflictdes()) ?
                     LOCKMARK_N : LOCKMARK_Y);
             this.update(new LambdaUpdateWrapper<ApsProcessOperationProcessEquDo>()
-                    .eq(ApsProcessOperationProcessEquDo::getId,apsProcessOperationProcessEquDo.getId())
-                    .set(ApsProcessOperationProcessEquDo::getConflictdes,newConflictsDesc)
-                    .set(ApsProcessOperationProcessEquDo::getHasconflict,apsProcessOperationProcessEquDo.getHasconflict())
+                    .eq(ApsProcessOperationProcessEquDo::getId, apsProcessOperationProcessEquDo.getId())
+                    .set(ApsProcessOperationProcessEquDo::getConflictdes, newConflictsDesc)
+                    .set(ApsProcessOperationProcessEquDo::getHasconflict, apsProcessOperationProcessEquDo.getHasconflict())
             );
         }
         return affectedIdList;
     }
+
 }