Parcourir la source

feature 增加排程修改计划开始时间和结束时间的逻辑

xiahan il y a 1 an
Parent
commit
2e35782cb2

+ 10 - 0
bs-common/src/main/java/com/rongwei/safecommon/utils/SaveConstans.java

@@ -623,4 +623,14 @@ public class SaveConstans {
          */
         public static final String COMPLETED= "已完工";
     }
+
+    /**
+     * 冲突描述
+     */
+    public static class ConflictDescription{
+        /**
+         * 加工时间冲突描述
+         */
+        public static final String CONFLICTING_PROCESSING_TIMES ="与其他作业加工时间重叠";
+    }
 }

+ 3 - 0
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/dao/ApsProcessOperationProcessEquDao.java

@@ -74,6 +74,9 @@ public interface ApsProcessOperationProcessEquDao extends BaseMapper<ApsProcessO
     List<OptionalEquipmentVo> getOptionalEquipmentById(@Param("idList")List<String> id);
 
     List<String> checkConflict(@Param("checkConflictVos") List<CheckConflictVo> checkConflictVos);
+
+    List<String> getConflictId(@Param("equId") String equId,@Param("id") String id,
+                               @Param("startTime")Date startTime,@Param("endTime") Date endTime);
 }
 
 

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

@@ -2,6 +2,7 @@ package com.rongwei.bscommon.sys.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 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.rwcommon.base.R;
@@ -20,4 +21,6 @@ public interface ApsProcessOperationProcessEquService extends IService<ApsProces
     R changingWires(List<ChangingWiresVo> changingWiresVos);
 
     R getOptionalEquipment(List<String> operationJobDetailsId);
+
+    R changeStartTime(ChangeStartTimeVo changeStartTimeVo);
 }

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

@@ -151,7 +151,7 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
         int i = this.baseMapper.checkConflictByBlankId(blankIds);
         if (i != 0) {
             logger.error("所选坯料计划:{}存在冲突", blankIds);
-            return R.error("所选批量计划存在冲突");
+            return R.error("所选坯料计划存在冲突");
         }
         // 判断是否存在已发布的工序作业
         List<ApsBlankOrderDo> apsBlankOrderDos = this.baseMapper.selectBatchIds(blankIds);

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

@@ -4,6 +4,7 @@ import cn.hutool.core.date.DateUnit;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.google.common.collect.Lists;
 import com.rongwei.bscommon.sys.dao.ApsProcessOperationBackupDao;
@@ -28,14 +29,14 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.LinkedList;
-import java.util.List;
+import java.util.*;
 import java.util.concurrent.atomic.AtomicReference;
 import java.util.stream.Collectors;
 
+import static com.rongwei.safecommon.utils.SaveConstans.ConflictDescription.CONFLICTING_PROCESSING_TIMES;
 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.MINUS_ONE;
 import static com.rongwei.safecommon.utils.SaveConstans.ProductionStatus.*;
 
@@ -370,6 +371,55 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
         return R.ok(optionalEquipment);
     }
 
+    /**
+     * 工序作业明细更新 计划开始和计划结束时间
+     *
+     * @param changeStartTimeVo
+     * @return
+     */
+    @Override
+    public R changeStartTime(ChangeStartTimeVo changeStartTimeVo) {
+        String id = changeStartTimeVo.getId();
+        ApsProcessOperationProcessEquDo processEquDo = this.getById(id);
+        ApsProcessOperationDo operationDo = apsProcessOperationService.getById(processEquDo.getProcessid());
+        if (operationDo == null) {
+            log.error("无法通过ID:{}获取到坯料计划", processEquDo.getBlankid());
+            return R.error("无法获取到坯料计划信息");
+        }
+        if (Arrays.asList(COMPLETED, PROCESSING, TO_BE_STARTED).contains(operationDo.getProcessstatus())) {
+            log.error("该作业已发布,不能调整开工时间");
+            return R.error("该作业已发布,不能调整开工时间");
+        }
+        // 获取更新之前的存在冲突的工序作业
+        List<String> beforeUpdatingConflictId = this.baseMapper.getConflictId(changeStartTimeVo.getQeuId(), changeStartTimeVo.getId(),
+                changeStartTimeVo.getPlanStartTime(), changeStartTimeVo.getPlanEndTime());
+
+
+        // 找到更新时间之后存在冲突的工序作业
+        List<String> afterTheUpdateConflictId = this.baseMapper.getConflictId(changeStartTimeVo.getQeuId(), changeStartTimeVo.getId(),
+                changeStartTimeVo.getPlanStartTime(), changeStartTimeVo.getPlanEndTime());
+        if (!afterTheUpdateConflictId.isEmpty()) {
+            processEquDo.setHasconflict(LOCKMARK_Y);
+            processEquDo.setConflictdes(CONFLICTING_PROCESSING_TIMES);
+            this.update(new LambdaUpdateWrapper<ApsProcessOperationProcessEquDo>()
+                    .in(ApsProcessOperationProcessEquDo::getId, afterTheUpdateConflictId)
+                    .set(ApsProcessOperationProcessEquDo::getHasconflict, LOCKMARK_Y)
+                    .set(ApsProcessOperationProcessEquDo::getConflictdes, CONFLICTING_PROCESSING_TIMES));
+        }
+        if (!beforeUpdatingConflictId.isEmpty()) {
+            this.update(new LambdaUpdateWrapper<ApsProcessOperationProcessEquDo>()
+                    .in(ApsProcessOperationProcessEquDo::getId, beforeUpdatingConflictId)
+                    .set(ApsProcessOperationProcessEquDo::getHasconflict, LOCKMARK_N)
+                    .set(ApsProcessOperationProcessEquDo::getConflictdes, ""));
+        }
+        processEquDo.setPlanstartdate(changeStartTimeVo.getPlanStartTime());
+        processEquDo.setPlanenddate(changeStartTimeVo.getPlanEndTime());
+        processEquDo.setHasconflict(LOCKMARK_N);
+        processEquDo.setConflictdes("");
+        this.updateById(processEquDo);
+        return R.ok();
+    }
+
     private void updateBlank(String processOperationId) {
         //查询此工序的所属订单ID
         String orderId = this.baseMapper.selectOrderIdByProcessOperationId(processOperationId);

+ 1 - 1
cx-aps/cx-aps-common/src/main/resources/mybatis/ApsBlankOrderDao.xml

@@ -180,7 +180,7 @@
                 AND BLANKID in
                 <foreach collection="blankIds" item="id" open="(" close=")" separator=",">
                     #{id}
-                </foreach>"
+                </foreach>
                 AND (CONFLICTDES is not null or  CONFLICTDES !='' )
             </where>
     </select>

+ 13 - 0
cx-aps/cx-aps-common/src/main/resources/mybatis/ApsProcessOperationProcessEquDao.xml

@@ -381,4 +381,17 @@
             limit 0,1
         </where>
     </select>
+    <select id="getConflictId" resultType="java.lang.String">
+        select ID from aps_process_operation_process_equ
+            <where>
+                DELETED='0'
+                AND ID != #{id}
+                AND PROCESSDEVICEID =#{equId}
+                AND (
+                (#{startTime}&lt; PLANENDDATE and #{endTime} > PLANSTARTDATE)
+                  or
+                (PLANSTARTDATE &lt; #{endTime} and PLANENDDATE > #{startTime})
+                )
+            </where>
+    </select>
 </mapper>

+ 37 - 0
cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/vo/ChangeStartTimeVo.java

@@ -0,0 +1,37 @@
+package com.rongwei.bsentity.vo;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.util.Date;
+
+/**
+ * ChangeStartTimeVo class
+ *
+ * @author XH
+ * @date 2024/04/29
+ */
+@Data
+public class ChangeStartTimeVo {
+    /**
+     * 工序作业明细ID
+     */
+    @NotBlank(message = "工序作业明细必填")
+    private String id;
+    /**
+     * 设备ID
+     */
+    @NotBlank(message = "设备必传")
+    private String qeuId;
+    /**
+     * 计划开工时间
+     */
+    @NotNull(message = "计划开工时间必填")
+    private Date planStartTime;
+    /**
+     * 计划完工时间
+     */
+    @NotNull(message = "计划完工时间必填")
+    private Date planEndTime;
+}

+ 6 - 1
cx-aps/cx-aps-server/src/main/java/com/rongwei/bsserver/controller/ApsProcessOperationProcessEquController.java

@@ -2,6 +2,7 @@ package com.rongwei.bsserver.controller;
 
 
 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.rwcommon.base.R;
@@ -14,7 +15,6 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import java.util.List;
-import java.util.Map;
 
 /**
  * <p>
@@ -69,5 +69,10 @@ public class ApsProcessOperationProcessEquController {
         return  apsProcessOperationProcessEquService.getOptionalEquipment(operationJobDetailsId);
     }
 
+    @PostMapping("/change/start-time")
+    public R changeStartTime(@RequestBody @Validated ChangeStartTimeVo changeStartTimeVo) {
+        log.info("开始进行换线作业");
+        return  apsProcessOperationProcessEquService.changeStartTime(changeStartTimeVo);
+    }
 }