浏览代码

aps-开工、报工、取消开工合并加工工序处理

sucheng 5 月之前
父节点
当前提交
ad90b6116b

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

@@ -68,4 +68,6 @@ public interface ApsReportRecordsDao extends BaseMapper<ApsReportRecordsDo> {
     List<ProcessOutputAndInputNumber> selectInputAndOutputNumByProcessId(@Param("processIds")List<String> processIds);
 
     List<ApsProcessOperationProcessEquDo> selectOtherMergeProcessEquByHeat(@Param("id") String id, @Param("processdeviceid") String processdeviceid, @Param("heatnumber") String heatnumber);
+
+    String selectEarlyMergeByHeat(@Param("processequid") String processequid, @Param("processdeviceid") String processdeviceid, @Param("heatnumber") String heatnumber);
 }

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

@@ -22,8 +22,11 @@ public interface ApsReportRecordsService extends IService<ApsReportRecordsDo> {
     R saveReport(SaveReportReq req);
 
     R checkMergeProcess(ApsReportRecordsDo req);
+    R checkMergeProcess2(ApsReportRecordsDo req);
 
     R smallRollStartReport(SmallRollStartReportReq req);
 
     R generalMsUpdate(MasterSlaveUpdateVo masterSlaveUpdate);
+
+    R haveEarlyStartWorkTime(ApsReportRecordsDo req);
 }

+ 77 - 0
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ApsReportRecordsServiceImpl.java

@@ -36,6 +36,7 @@ import org.springframework.transaction.annotation.Transactional;
 import javax.annotation.Resource;
 import javax.validation.constraints.NotNull;
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.*;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.stream.Collectors;
@@ -1406,6 +1407,59 @@ public class ApsReportRecordsServiceImpl extends ServiceImpl<ApsReportRecordsDao
         return R.ok(res);
     }
 
+    @Override
+    public R checkMergeProcess2(ApsReportRecordsDo req) {
+        //作业明细的ID
+        String processequid = req.getProcessequid();
+        //当前报工的作业明细的详情
+        ApsProcessOperationProcessEquDo apsProcessOperationProcessEquDo = apsProcessOperationProcessEquService.getById(processequid);
+        //当前报工的作业详情
+        ApsProcessOperationDo apsProcessOperationDo = apsProcessOperationService.getById(apsProcessOperationProcessEquDo.getProcessid());
+        //是否需要软提示
+        boolean needWarning = false;
+        //软提示信息
+        String warningMessage = "";
+        //•如果报工记录的报工时间<=开工时间,则错误提示:报工时间必须大于开工时间
+        Date startworktime = req.getStartworktime();
+        Date reportworktime = req.getReportworktime();
+        if (ObjectUtil.isEmpty(startworktime)) {
+            return R.error("开工时间不能为空");
+        }
+        if (ObjectUtil.isEmpty(reportworktime)) {
+            return R.error("报工时间不能为空");
+        }
+        if (reportworktime.compareTo(startworktime) <= 0) {
+            return R.error("报工时间必须大于开工时间");
+        }
+        //•如果(报工记录的报工时间-开工时间)/(计划完工时间-计划开工时间)大于1.5或小于0.5,则添加警告确认信息:实际加工时长与计划加工时长相差超出50%
+        Date planstartdate = apsProcessOperationProcessEquDo.getPlanstartdate();
+        Date planenddate = apsProcessOperationProcessEquDo.getPlanenddate();
+        long planSub = DateUtil.between(planstartdate, planenddate, DateUnit.SECOND);
+        long workSub = DateUtil.between(startworktime, reportworktime, DateUnit.SECOND);
+        BigDecimal divide = new BigDecimal(workSub).divide(new BigDecimal(planSub), 2, RoundingMode.HALF_UP);
+        if (divide.compareTo(new BigDecimal("1.5")) > 0
+                || divide.compareTo(new BigDecimal("0.5")) < 0) {
+            needWarning = true;
+            warningMessage += "<b>实际加工时长与计划加工时长相差超出50%;</b><br>";
+        }
+
+        //该作业的加工方式是合并加工,
+        if (apsProcessOperationDo.getProcessway().equals("合并加工")) {
+            // 并且有其他未开工的计划开工时间=该报工作业明细原计划开工时间的作业明细
+            List<ApsProcessOperationProcessEquDo> list = this.baseMapper.selectOtherMergeProcessEqu(apsProcessOperationProcessEquDo.getId(), apsProcessOperationProcessEquDo.getProcessdeviceid(), apsProcessOperationProcessEquDo.getOldplanstartdate());
+            if (!list.isEmpty()) {
+                needWarning = true;
+                warningMessage += "<b>该合并作业" + apsProcessOperationDo.getProcess() + "还有其他作业没有一起开工;</b><br>";
+            }
+        }
+
+
+        CheckMergeProcessResopnse res = new CheckMergeProcessResopnse();
+        res.setNeedWarning(needWarning);
+        res.setWarningMessage(warningMessage);
+        return R.ok(res);
+    }
+
     @Override
     @Transactional
     public R smallRollStartReport(SmallRollStartReportReq req) {
@@ -1843,6 +1897,29 @@ public class ApsReportRecordsServiceImpl extends ServiceImpl<ApsReportRecordsDao
         return R.ok();
     }
 
+    @Override
+    public R haveEarlyStartWorkTime(ApsReportRecordsDo req) {
+        if (ObjectUtil.isEmpty(req.getId())){
+            return R.error("报工记录ID不可为空");
+        }
+        ApsReportRecordsDo apsReportRecordsDo = this.getById(req.getId());
+        String processequid = apsReportRecordsDo.getProcessequid();
+        ApsProcessOperationProcessEquDo apsProcessOperationProcessEquDo = apsProcessOperationProcessEquService.getById(processequid);
+        ApsProcessOperationDo apsProcessOperationDo = apsProcessOperationService.getById(apsProcessOperationProcessEquDo.getProcessid());
+        String res = "";
+
+        //如果该作业的加工方式是合并加工,并且其他同炉次的作业已报工,则
+        //报工记录的开工时间=其他同炉次的作业的最早开工时间
+        //设置报工记录的开工时间不可编辑
+        if (apsProcessOperationDo.getProcessway().equals("合并加工")){
+            String earlyTime = this.baseMapper.selectEarlyMergeByHeat(processequid,apsProcessOperationProcessEquDo.getProcessdeviceid(),apsReportRecordsDo.getHeatnumber());
+            if (ObjectUtil.isNotEmpty(earlyTime)){
+                res = earlyTime;
+            }
+        }
+        return R.ok(res);
+    }
+
     private int sortAsc(List<String> parts1, List<String> parts2) {
         int length1 = parts1.size();
         int length2 = parts2.size();

+ 16 - 0
cx-aps/cx-aps-common/src/main/resources/mybatis/ApsReportRecordsDao.xml

@@ -89,4 +89,20 @@
           AND apope.WORKSTATUS != '待开工'
           AND arr.HEATNUMBER = #{heatnumber}
     </select>
+    <select id="selectEarlyMergeByHeat"
+            resultType="java.lang.String">
+        SELECT
+            arr.STARTWORKTIME
+        FROM
+            aps_process_operation_process_equ apope
+                LEFT JOIN aps_report_records arr ON arr.DELETED = 0 AND apope.ID = arr.PROCESSEQUID
+        WHERE
+            apope.DELETED = 0
+          AND apope.PROCESSDEVICEID = #{processdeviceid}
+          AND apope.ID != #{processequid}
+          AND arr.REPORTWORKSTATUS = '已报工'
+          AND arr.HEATNUMBER = #{heatnumber}
+        ORDER BY arr.STARTWORKTIME
+        limit 1
+    </select>
 </mapper>

+ 15 - 0
cx-aps/cx-aps-server/src/main/java/com/rongwei/bsserver/controller/ApsReportRecordController.java

@@ -71,6 +71,21 @@ public class ApsReportRecordController {
         log.info("开工之后,查询是否存在未开工的合并工序;参数为:{}", req);
         return apsReportRecordsService.checkMergeProcess(req);
     }
+    /**
+     * 报工时,查询是否存在警告
+     */
+    @PostMapping("/checkMergeProcess2")
+    public R checkMergeProcess2(@RequestBody ApsReportRecordsDo req) {
+        log.info("报工时,查询是否存在警告;参数为:{}", req);
+        return apsReportRecordsService.checkMergeProcess2(req);
+    }
+    /**
+     * 根据报工记录ID查询是否存在最早的开工时间
+     */
+    @PostMapping("/haveEarlyStartWorkTime")
+    public R haveEarlyStartWorkTime(@RequestBody ApsReportRecordsDo req) {
+        return apsReportRecordsService.haveEarlyStartWorkTime(req);
+    }
 
     /**
      * 小卷开工