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

feature 增加修改工序作业明细的接口

xiahan 1 рік тому
батько
коміт
2c36e2fd99

+ 4 - 0
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/ApsProcessOperationProcessEquService.java

@@ -5,6 +5,7 @@ import com.rongwei.bsentity.domain.ApsProcessOperationProcessEquDo;
 import com.rongwei.bsentity.vo.ChangeStartTimeVo;
 import com.rongwei.bsentity.vo.ChangingWiresVo;
 import com.rongwei.bsentity.vo.CommonUpdateProductionStatusReq;
+import com.rongwei.bsentity.vo.JobDetailsVo;
 import com.rongwei.rwcommon.base.R;
 
 import java.util.List;
@@ -23,4 +24,7 @@ public interface ApsProcessOperationProcessEquService extends IService<ApsProces
     R getOptionalEquipment(List<String> operationJobDetailsId);
 
     R changeStartTime(List<ChangeStartTimeVo> changeStartTimeVo);
+
+    R updateDetails(JobDetailsVo jobDetailsVo);
+
 }

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

@@ -394,7 +394,7 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
             }
             // 获取更新之前的存在冲突的工序作业
             List<ApsProcessOperationProcessEquDo> beforeUpdatingConflictId = this.baseMapper.getConflictId(changeStartTimeVo.getQeuId(), changeStartTimeVo.getId(),
-                    changeStartTimeVo.getPlanStartTime(), changeStartTimeVo.getPlanEndTime());
+                    processEquDo.getPlanstartdate(), processEquDo.getPlanenddate());
 
             // 找到更新时间之后存在冲突的工序作业
             List<ApsProcessOperationProcessEquDo> afterTheUpdateConflictId = this.baseMapper.getConflictId(changeStartTimeVo.getQeuId(), changeStartTimeVo.getId(),
@@ -439,6 +439,109 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
         return R.ok();
     }
 
+
+    /**
+     * 更新工序作业明细
+     *
+     * @param jobDetailsVo
+     * @return
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public R updateDetails(JobDetailsVo jobDetailsVo) {
+        String id = jobDetailsVo.getId();
+        if (StringUtils.isBlank(id)) {
+            log.error("工序作业ID 必传");
+            return R.error("参数异常");
+        }
+        ApsProcessOperationProcessEquDo apsProcessOperationProcessEquDo = this.getById(id);
+        if (apsProcessOperationProcessEquDo == null) {
+            log.error("无法根据ID:{}获取到工序作业明细", id);
+            return R.error("无法获取到工序作业信息");
+        }
+        if (!JOBSTATUS_TO_BE_START.equals(apsProcessOperationProcessEquDo.getWorkstatus())) {
+            log.error("当前工序作业已开工");
+            return R.error("当前工序作业已开工无法更新工序作业信息");
+        }
+        if (StringUtils.isBlank(apsProcessOperationProcessEquDo.getProcessid())) {
+            log.error("工序作业明细对应工序作业ID为空");
+            return R.error("无法获取作业明细对应的工序作业");
+        }
+        // 判断工序作业是否待发布
+        ApsProcessOperationDo apsProcessOperationDo = apsProcessOperationService.getById(apsProcessOperationProcessEquDo.getProcessid());
+        if (apsProcessOperationDo == null) {
+            log.error("根据ID:{} 获取工序作业失败", apsProcessOperationProcessEquDo.getProcessid());
+        }
+        if (!TO_BE_PUBLISHED.equals(apsProcessOperationDo.getProcessstatus())) {
+            log.error("工序作业状态:{}异常",apsProcessOperationDo.getProcessstatus());
+            return R.error("只有待发布的工序作业才可以修改");
+        }
+        // 更新开工时间 jobDetailsVo
+        String equId = jobDetailsVo.getEquId();
+        String equName = jobDetailsVo.getEquName();
+        String oldEquId = apsProcessOperationProcessEquDo.getProcessdeviceid();
+        if (StringUtils.isNotBlank(equId)) {
+            apsProcessOperationProcessEquDo.setProcessdevice(equName);
+            apsProcessOperationProcessEquDo.setProcessdeviceid(equId);
+            apsProcessOperationProcessEquDo.setProcessworkshop(jobDetailsVo.getWorkshopName());
+            apsProcessOperationProcessEquDo.setProcessworkshopid(jobDetailsVo.getWorkshopId());
+        }
+        // 更新计划开工时间
+        Date planStartTime = jobDetailsVo.getPlanStartTime();
+        if (planStartTime != null) {
+            Date oldPlanstartdate = apsProcessOperationProcessEquDo.getPlanstartdate();
+            Date oldPlanenddate = apsProcessOperationProcessEquDo.getPlanenddate();
+            // 获取开工时间间隔=所选作业明细最早计划开工时间-所选加工开始时间
+            long timeInterval = DateUtil.between(planStartTime, oldPlanstartdate, DateUnit.SECOND, false);
+            apsProcessOperationProcessEquDo.setPlanstartdate(planStartTime);
+            // 自动计算计划完工时间=原完工时间+新计划开工时间-原计划开工时间
+            apsProcessOperationProcessEquDo.setPlanenddate(DateUtil.offsetSecond(apsProcessOperationProcessEquDo.getPlanenddate(), (int) timeInterval));
+            // 获取更新之前的存在冲突的工序作业
+            List<ApsProcessOperationProcessEquDo> beforeUpdatingConflictId = this.baseMapper.getConflictId(
+                    oldEquId, id, oldPlanstartdate, oldPlanenddate);
+            // 找到更新时间之后存在冲突的工序作业
+            List<ApsProcessOperationProcessEquDo> afterTheUpdateConflictId = this.baseMapper.getConflictId(
+                    apsProcessOperationProcessEquDo.getProcessdeviceid(), id,
+                    apsProcessOperationProcessEquDo.getPlanstartdate(), apsProcessOperationProcessEquDo.getPlanenddate());
+
+            if (!beforeUpdatingConflictId.isEmpty()) {
+                beforeUpdatingConflictId.forEach(info -> {
+                    String conflictdes = info.getConflictdes();
+                    if (StringUtils.isNotBlank(conflictdes)) {
+                        List<String> conflictdeList = new ArrayList<>(Arrays.asList(conflictdes.split(",")));
+                        // 删除加工时间冲突描述
+                        conflictdeList.remove(CONFLICTING_PROCESSING_TIMES);
+                        if (conflictdeList.isEmpty()) {
+                            info.setHasconflict(LOCKMARK_N);
+                        }
+                        info.setConflictdes(CollUtil.join(conflictdeList, ","));
+                    }
+                });
+                this.updateBatchById(beforeUpdatingConflictId);
+            }
+            if (!afterTheUpdateConflictId.isEmpty()) {
+                apsProcessOperationProcessEquDo.setHasconflict(LOCKMARK_Y);
+                apsProcessOperationProcessEquDo.setConflictdes(CONFLICTING_PROCESSING_TIMES);
+                afterTheUpdateConflictId.forEach(info -> {
+                    info.setHasconflict(LOCKMARK_Y);
+                    String conflictdes = info.getConflictdes();
+                    if (StringUtils.isNotBlank(conflictdes)) {
+                        List<String> conflictdeList = new ArrayList<>(Arrays.asList(conflictdes.split(",")));
+                        if (!conflictdeList.contains(CONFLICTING_PROCESSING_TIMES)) {
+                            conflictdeList.add(CONFLICTING_PROCESSING_TIMES);
+                        }
+                        info.setConflictdes(CollUtil.join(conflictdeList, ","));
+                    } else {
+                        info.setConflictdes(CONFLICTING_PROCESSING_TIMES);
+                    }
+                });
+                this.updateBatchById(afterTheUpdateConflictId);
+            }
+        }
+        this.updateById(apsProcessOperationProcessEquDo);
+        return R.ok();
+    }
+
     private void updateBlank(String processOperationId) {
         //查询此工序的所属订单ID
         String orderId = this.baseMapper.selectOrderIdByProcessOperationId(processOperationId);

+ 26 - 0
cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/vo/JobDetailsVo.java

@@ -0,0 +1,26 @@
+package com.rongwei.bsentity.vo;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.util.Date;
+
+/**
+ * JobDetailsVo class
+ *
+ * @author XH
+ * @date 2024/05/06
+ */
+@Data
+public class JobDetailsVo  extends  ChangingWiresVo{
+    /**
+     * 计划开工时间
+     */
+    @NotNull(message = "计划开工时间必填")
+    private Date planStartTime;
+    /**
+     * 计划完工时间
+     */
+    @NotNull(message = "计划完工时间必填")
+    private Date planEndTime;
+}

+ 11 - 0
cx-aps/cx-aps-server/src/main/java/com/rongwei/bsserver/controller/ApsProcessOperationProcessEquController.java

@@ -5,6 +5,7 @@ import com.rongwei.bscommon.sys.service.ApsProcessOperationProcessEquService;
 import com.rongwei.bsentity.vo.ChangeStartTimeVo;
 import com.rongwei.bsentity.vo.ChangingWiresVo;
 import com.rongwei.bsentity.vo.CommonUpdateProductionStatusReq;
+import com.rongwei.bsentity.vo.JobDetailsVo;
 import com.rongwei.rwcommon.base.R;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -79,5 +80,15 @@ public class ApsProcessOperationProcessEquController {
         log.info("开修改工序作业开工时间");
         return  apsProcessOperationProcessEquService.changeStartTime(changeStartTimeVo);
     }
+
+    /**
+     * 修改作业详情
+     * @return
+     */
+    @PostMapping("/update")
+    public  R updateDetails(@RequestBody JobDetailsVo jobDetailsVo ){
+        log.info("开修改作业详情");
+        return  apsProcessOperationProcessEquService.updateDetails(jobDetailsVo);
+    }
 }