Explorar o código

feature 代码提交

xiahan hai 1 ano
pai
achega
68bace2bc7

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

@@ -524,15 +524,15 @@ public class SaveConstans {
 
     public static class SchedulstatusTyep {
         /**
-         * 成退
+         * 待排程
          */
         public static final String SCHEDULSTATUS_TOSCHEDULE = "待排程";
         /**
-         * 中退
+         * 待发布
          */
         public static final String SCHEDULSTATUS_TORELEASE = "待发布";
         /**
-         * 中退
+         * 已发布
          */
         public static final String SCHEDULSTATUS_HASRELEASE = "已发布";
     }

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

@@ -9,6 +9,7 @@ import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
 import org.apache.ibatis.annotations.Update;
 
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -43,6 +44,9 @@ public interface ApsBlankOrderDao extends BaseMapper<ApsBlankOrderDo> {
     void publish(@Param("productionOrderIds") List<String> productionOrderIds);
 
     @Update("update aps_process_operation set PROCESSSTATUS = '20' where PROCESSSTATUS = '10' AND BLANKID IN (select ID from aps_blank_order where DELETED = 0 AND PRODUCTIONORDERID in (${orderIds}))")
+    void publishUnlock(@Param("ids") List<String> ids);
+
+    @Update("update aps_process_operation set PROCESSSTATUS = '20' where BLANKID IN (select ID from aps_blank_order where DELETED = 0 AND PRODUCTIONORDERID in (${orderIds}))")
     void updateProcessOperationByOrderIds(@Param("orderIds") String orderIds);
 
     void cancelSchedulingUpdate(@Param("idList") List<String> idList);
@@ -54,4 +58,6 @@ public interface ApsBlankOrderDao extends BaseMapper<ApsBlankOrderDo> {
 
     @Select("select BLANKID AS 'blankId',MAX(PROCESSSTATUS) AS 'maxProcessStatus',MIN(PROCESSSTATUS) AS 'minProcessStatus' from aps_process_operation where BLANKID = (select BLANKID from aps_process_operation where ID = #{productProcessId})")
     BlankIdAndProcessStatusVo selectProcessStatusByProcessId(@Param("productProcessId") String productProcessId);
+
+    List<String> getIdByLockTime(@Param("lockTime") Date LockTime,@Param("lockMark") String lockMark);
 }

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

@@ -20,7 +20,8 @@ import java.util.Map;
  * @since 2024-03-01
  */
 public interface ApsProcessOperationDao extends BaseMapper<ApsProcessOperationDo> {
-    void updateBachmaterialprocessByIds(@Param("ids") List<String> ids, @Param("batchNum") String batchNum);
+    void updateBachmaterialprocessByIds(@Param("ids") List<String> ids, @Param("batchNum") String batchNum,
+                                        @Param("unqualifiedQuantity")int unqualifiedQuantity);
 
     void updateAboutCheckBatchNum(@Param("id") String id,
                                   @Param("currentCheckNum") Integer currentCheckNum,

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

@@ -23,7 +23,7 @@ public interface ApsBlankOrderService extends IService<ApsBlankOrderDo> {
 
     void orderApsCancel(List<String> apsProductionOrderIds) throws Exception;
 
-    void orderLock(OrderLockVo orderLockVo) throws Exception;
+    R orderLock(OrderLockVo orderLockVo) throws Exception;
 
     void apsReScheduling() throws Exception;
 

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

@@ -18,6 +18,7 @@ import com.rongwei.bscommon.sys.service.*;
 import com.rongwei.bsentity.domain.*;
 import com.rongwei.bsentity.vo.*;
 import com.rongwei.rwadmincommon.system.vo.SysUserVo;
+import com.rongwei.rwcommon.base.R;
 import com.rongwei.rwcommon.base.exception.CustomException;
 import com.rongwei.rwcommon.utils.SecurityUtil;
 import com.rongwei.rwcommon.utils.StringUtils;
@@ -34,6 +35,8 @@ import java.time.ZoneId;
 import java.util.*;
 import java.util.stream.Collectors;
 
+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.ProductionStatus.TO_BE_SCHEDULED;
 
 /**
@@ -148,6 +151,24 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
         this.updateById(apsBlankOrderDo);
     }
 
+    /**
+     * 获取锁定和解锁的 搜索事件
+     *
+     * @param lockStartTime
+     * @param startSchedulerun
+     * @return
+     */
+    private Date orderLockGetSearChDate(Date lockStartTime, int startSchedulerun, String lockMark) {
+        Calendar instance = Calendar.getInstance();
+        instance.add(Calendar.HOUR_OF_DAY, startSchedulerun);
+        Date time = instance.getTime();
+        if (LOCKMARK_Y.equals(lockMark)) {
+            return lockStartTime.compareTo(time) > 0 ? lockStartTime : time;
+        } else {
+            return lockStartTime.compareTo(time) > 0 ? lockStartTime : time;
+        }
+    }
+
     /**
      * 锁定、解锁
      *
@@ -155,29 +176,78 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
      * @throws Exception
      */
     @Override
-    public void orderLock(OrderLockVo orderLockVo) throws Exception {
-        if (StringUtils.isNotBlank(orderLockVo.getLockMark())) {
-            if (orderLockVo.getBlackOrderId() != null && orderLockVo.getBlackOrderId().size() > 0) {
-                // 组装待更新坯料计划实体
-                List<ApsBlankOrderDo> blankOrderDos = new ArrayList<>();
-                List<String> blankids = new ArrayList<>();
-                for (String id : orderLockVo.getBlackOrderId()) {
-                    ApsBlankOrderDo blankOrderDo = new ApsBlankOrderDo();
-                    blankOrderDo.setId(id);
-                    blankOrderDo.setLockmark(orderLockVo.getLockMark());
-                    blankOrderDos.add(blankOrderDo);
-                    blankids.add(id);
-                }
-                // 坯料计划锁定标识更新
-                if (blankOrderDos != null && blankOrderDos.size() > 0) {
-                    this.updateBatchById(blankOrderDos);
-                }
-                // 工序作业锁定标识更新
-                apsProcessOperationService.update(new LambdaQueryWrapper<ApsProcessOperationDo>().in(ApsProcessOperationDo::getBlankid, blankids));
-                // 工序作业排程计划锁定
-                processOperationProcessEquService.update(new LambdaQueryWrapper<ApsProcessOperationProcessEquDo>().in(ApsProcessOperationProcessEquDo::getBlankid, blankids));
+    public R orderLock(OrderLockVo orderLockVo) {
+        String lockMark = orderLockVo.getLockMark();
+        if (StringUtils.isBlank(lockMark)) {
+            log.error("锁定状态必填");
+            return R.error("锁定状态必填");
+        }
+        List<String> blackOrderId = orderLockVo.getBlackOrderId();
+        blackOrderId = blackOrderId.stream().filter(StringUtils::isNotBlank).collect(Collectors.toList());
+        Date lockStartTime = orderLockVo.getLockStartTime();
+        if (blackOrderId.isEmpty() && lockStartTime == null) {
+            log.error("坯料计划ID和解锁时间都为空");
+            return R.error("坯料计划ID和解锁时间都为空");
+        }
+
+        if(!blackOrderId.isEmpty()){
+            // 校验坯料计划是否开工
+            Integer integer = apsBlankOrderDao.selectCount(new LambdaQueryWrapper<ApsBlankOrderDo>()
+                    .in(ApsBlankOrderDo::getId, blackOrderId)
+                    .in(ApsBlankOrderDo::getProductstatus, "40", "50"));
+            if(integer>0){
+                log.error("所选作业坯料计划已开工,不可以解锁");
+                return R.error("所选作业坯料计划已开工,不可以解锁");
+            }
+        }
+        if (lockStartTime != null) {
+            // 获取排程参数设置
+            List<ApsScheduleConfigDo> apsConfigs = apsScheduleConfigService.list();
+            // 默认最小排程时间
+            int defaultStartStartSchedulerun = 8;
+            if (!apsConfigs.isEmpty()) {
+                defaultStartStartSchedulerun = apsConfigs.get(0).getStartschedulerun();
             }
+            Date date = orderLockGetSearChDate(lockStartTime, defaultStartStartSchedulerun, lockMark);
+            // 获取所有 待发布 待开工的 坯料计划
+            blackOrderId = this.baseMapper.getIdByLockTime(date, lockMark);
+        }
+        if(blackOrderId.isEmpty()){
+            log.debug("暂无需要锁定或者解锁的批量计划");
+            return R.ok();
+        }
+        // 组装待更新坯料计划实体
+        List<ApsBlankOrderDo> blankOrderDos = new ArrayList<>();
+
+        for (String id : blackOrderId) {
+            ApsBlankOrderDo blankOrderDo = new ApsBlankOrderDo();
+            blankOrderDo.setId(id);
+            blankOrderDo.setLockmark(lockMark);
+            if (LOCKMARK_N.equals(lockMark)){
+                blankOrderDo.setProductstatus("20");
+            }
+            blankOrderDos.add(blankOrderDo);
+        }
+        // 坯料计划锁定标识更新
+        if (blankOrderDos.size() > 0) {
+            this.updateBatchById(blankOrderDos);
+        }
+        // 工序作业锁定标识更新
+        apsProcessOperationService.update(new LambdaUpdateWrapper<ApsProcessOperationDo>()
+                .set(ApsProcessOperationDo::getLockmark,lockMark)
+                .in(ApsProcessOperationDo::getBlankid, blackOrderId));
+        // 工序作业排程计划锁定
+        processOperationProcessEquService.update(new LambdaUpdateWrapper<ApsProcessOperationProcessEquDo>()
+                .set(ApsProcessOperationProcessEquDo::getLockmark,lockMark)
+                .in(ApsProcessOperationProcessEquDo::getBlankid, blackOrderId));
+        if(LOCKMARK_N.equals(lockMark)){
+           // 更新坯料计划对应工序作业的生产状态为待发布
+            apsProcessOperationService.update(new LambdaUpdateWrapper<ApsProcessOperationDo>()
+                    .in(ApsProcessOperationDo::getBlankid,blackOrderId)
+                    .set(ApsProcessOperationDo::getProcessstatus,"20"));
         }
+        // 回传坯料计划ID 用于前段更新锁定状态
+        return R.ok(blackOrderId);
     }
 
     /**

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

@@ -93,8 +93,8 @@ public class ApsProcessOperationServiceImpl extends ServiceImpl<ApsProcessOperat
      * @param ids
      * @param batchNumn
      */
-    public void updateBachmaterialprocessByIds(List<String> ids, String batchNumn) {
-        apsProcessOperationDao.updateBachmaterialprocessByIds(ids, batchNumn);
+    public void updateBachmaterialprocessByIds(List<String> ids, String batchNumn,int unqualifiedQuantity) {
+        apsProcessOperationDao.updateBachmaterialprocessByIds(ids, batchNumn, unqualifiedQuantity);
     }
 
     /**

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

@@ -58,7 +58,7 @@ public class ApsProductionOrderServiceImpl extends ServiceImpl<ApsProductionOrde
     @Override
     public R publishCancel(List<String> productionOrderIds) {
         // 更新工序作业的生产状态和是否锁定=是
-        apsProcessOperationDao.publish(productionOrderIds);
+        apsProcessOperationDao.publishCancel(productionOrderIds);
         // 更新坯料计划的生产状态
         apsBlankOrderDao.publish(productionOrderIds);
         // 更新产品明细的生产状态

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

@@ -184,7 +184,8 @@ public class ReportCheckServiceImpl implements ReportCheckService {
         if (!nextProcessOperationDos.isEmpty() && StringUtils.isNotBlank(toBeProcessedBatchNum)) {
             //更新后续工序的待加工批次号信息
             apsProcessOperationService.updateBachmaterialprocessByIds(nextProcessOperationDos.stream()
-                    .map(ApsProcessOperationDo::getId).collect(Collectors.toList()), toBeProcessedBatchNum);
+                    .map(ApsProcessOperationDo::getId).collect(Collectors.toList()), toBeProcessedBatchNum,
+                    unqualifiedQuantity);
 
             apsProcessOperationProcessEquService.updateBachmaterialprocessByIds(nextProcessOperationDos.stream()
                     .map(ApsProcessOperationDo::getId).collect(Collectors.toList()), toBeProcessedBatchNum);

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

@@ -86,8 +86,8 @@
                 </set>
                 <where>
                     DELETED='0'
-                    AND ID
-                    <foreach collection="productionOrderIds" item="id" open="(" close=")" separator=",">
+                    AND ID in
+                    <foreach collection="idList" item="id" open="(" close=")" separator=",">
                         #{id}
                     </foreach>
                 </where>
@@ -105,4 +105,30 @@
             AND ID=#{id}
         </where>
     </update>
+    <select id="getIdByLockTime" resultType="java.lang.String">
+        select DISTINCT abo.ID from  aps_blank_order abo
+        left join aps_process_operation apo on abo.ID= apo.BLANKID AND APO.DELETED='0'
+        <where>
+            abo.DELETED ='0'
+            <choose>
+                <when test="lockMark=='y'"> and apo.PLANSTARTDATE &lt; #{lockTime} </when>
+                <otherwise>and apo.PLANSTARTDATE &gt; #{lockTime}</otherwise>
+            </choose>
+        </where>
+    </select>
+    <update id="publishUnlock">
+        update aps_blank_order
+        <set>
+            PROCESSSTATUS=if(PROCESSSTATUS='10',,PROCESSSTATUS),
+            LOCKMARK='n'
+        </set>
+        <where>
+            DELETED='0'
+            AND PRODUCTSTATUS IN ('30','20')
+            AND ID in
+            <foreach collection="ids" item="id" open="(" close=")" separator=",">
+                #{id}
+            </foreach>
+        </where>
+    </update>
 </mapper>

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

@@ -4,7 +4,8 @@
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.rongwei.bscommon.sys.dao.ApsProcessOperationDao">
     <update id="updateBachmaterialprocessByIds">
-        update aps_process_operation set BACHMATERIALPROCESS = CONCAT_WS(',',BACHMATERIALPROCESS,#{batchNum})
+        update aps_process_operation set BACHMATERIALPROCESS = CONCAT_WS(',',BACHMATERIALPROCESS,#{batchNum}),
+                                    set INPUTUNQUALIFIEDROLL = INPUTUNQUALIFIEDROLL +#{unqualifiedQuantity}
         <where>
             ID in
             <foreach collection="ids" separator="," open="(" close=")" item="id">

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

@@ -76,7 +76,7 @@
             update aps_product_detail set PRODUCTSTATUS ='10'
             <where>
                 DELETED='0'
-                AND PRODUCTIONORDERID IN
+                AND MAINID IN
                 <foreach collection="productionOrderIds" open="(" close=")" item="id" separator=";">
                     #{id}
                 </foreach>

+ 7 - 1
cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/vo/OrderLockVo.java

@@ -1,6 +1,9 @@
 package com.rongwei.bsentity.vo;
 
 import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 
 @Data
@@ -10,6 +13,9 @@ public class OrderLockVo {
     private String lockMark;
 
     // 锁定或者解锁坯料计划ID
-    private List<String> blackOrderId;
+    private List<String> blackOrderId = new ArrayList<>();
+
+    // 解锁时间
+    private Date lockStartTime;
 
 }

+ 1 - 2
cx-aps/cx-aps-server/src/main/java/com/rongwei/bsserver/controller/ApsBlankOrderController.java

@@ -55,8 +55,7 @@ public class ApsBlankOrderController {
      */
     @PostMapping("/orderLock")
     public R orderLock(@RequestBody OrderLockVo orderLockVo) throws Exception {
-        apsBlankOrderService.orderLock(orderLockVo);
-        return R.ok();
+        return apsBlankOrderService.orderLock(orderLockVo);
     }
 
     /**