From f141339cedfefafc5c4820b8891f2b916a4889e2 Mon Sep 17 00:00:00 2001
From: 18516761980 <56479841@qq.com>
Date: 星期四, 16 六月 2022 13:59:28 +0800
Subject: [PATCH] Merge branch 'master' of https://gitee.com/luxiaotao1123/zy-asrs into hylyasrs

---
 src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java |    4 
 src/main/java/com/zy/asrs/task/handler/CheckDeepHandler.java   |  259 +++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/zy/asrs/task/CheckDeepScheduler.java         |   63 ++++++++++
 src/main/resources/mapper/LocMastMapper.xml                    |   28 ++++
 src/main/java/com/zy/asrs/mapper/LocMastMapper.java            |    1 
 src/main/java/com/zy/asrs/service/LocMastService.java          |    5 
 6 files changed, 360 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/zy/asrs/mapper/LocMastMapper.java b/src/main/java/com/zy/asrs/mapper/LocMastMapper.java
index 19d14b3..208fff4 100644
--- a/src/main/java/com/zy/asrs/mapper/LocMastMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/LocMastMapper.java
@@ -21,4 +21,5 @@
     @Select("select count(*) as count from asr_loc_mast where 1=1 and loc_sts = 'O' and loc_type1 = #{locType1} and crn_no = #{crnNo}")
     Integer selectEmptyLocCount(@Param("locType1") Short locType1, @Param("crnNo") Integer crnNo);
 
+    List<LocMast> queryShallowLocFMast(@Param("crnNo") Integer crnNo);
 }
diff --git a/src/main/java/com/zy/asrs/service/LocMastService.java b/src/main/java/com/zy/asrs/service/LocMastService.java
index c05a800..00b330b 100644
--- a/src/main/java/com/zy/asrs/service/LocMastService.java
+++ b/src/main/java/com/zy/asrs/service/LocMastService.java
@@ -32,4 +32,9 @@
      */
     Boolean checkWhole(List<LocDetl> locDetls);
 
+    /**
+     * 鏌ヨ娴呭簱浣嶅湪搴擄紝娣卞簱浣嶄负O鐨勬暟鎹�
+     * @return
+     */
+    List<LocMast> queryShallowLocFMast(Integer crnNo);
 }
diff --git a/src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java
index fe3c612..e6ce450 100644
--- a/src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java
@@ -48,4 +48,8 @@
         return null;
     }
 
+    @Override
+    public List<LocMast> queryShallowLocFMast(Integer crnNo) {
+        return this.baseMapper.queryShallowLocFMast(crnNo);
+    }
 }
diff --git a/src/main/java/com/zy/asrs/task/CheckDeepScheduler.java b/src/main/java/com/zy/asrs/task/CheckDeepScheduler.java
new file mode 100644
index 0000000..456a815
--- /dev/null
+++ b/src/main/java/com/zy/asrs/task/CheckDeepScheduler.java
@@ -0,0 +1,63 @@
+package com.zy.asrs.task;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.core.common.Cools;
+import com.zy.asrs.entity.LocMast;
+import com.zy.asrs.entity.WrkMast;
+import com.zy.asrs.service.LocDetlService;
+import com.zy.asrs.service.LocMastService;
+import com.zy.asrs.service.WorkService;
+import com.zy.asrs.service.WrkMastService;
+import com.zy.asrs.task.core.ReturnT;
+import com.zy.asrs.task.handler.CheckDeepHandler;
+import com.zy.asrs.utils.Utils;
+import com.zy.common.properties.SlaveProperties;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+
+@Component
+@Slf4j
+public class CheckDeepScheduler {
+
+    @Value("${wcs-slave.doubleDeep}")
+    private boolean confirmDeep;
+    @Value("${wcs-slave.doubleLocs}")
+    private String deepLocs;
+    @Value("${wcs-slave.shallowLocs}")
+    private String shallowLocs;
+    @Autowired
+    private LocDetlService locDetlService;
+    @Autowired
+    private LocMastService locMastService;
+    @Autowired
+    private WorkService workService;
+    @Autowired
+    private WrkMastService wrkMastService;
+    @Autowired
+    private SlaveProperties slaveProperties;
+
+    @Autowired
+    private CheckDeepHandler checkDeepHandler;
+
+    /**
+     * 灏嗕袱涓繁搴撲綅鍚堝苟涓烘繁娴呭簱浣�,鐗╂枡鍙风浉鍚岋紝婧愬簱浣嶅叆搴撴棩鏈熸棭浜庣洰鏍囧簱浣嶅搴旀繁搴撲綅鍏ュ簱鏃ユ湡锛屽簱浣嶇姸鎬侀兘涓篎
+     */
+    @Scheduled(cron = "0/30 * * * * ?")
+    private void execute() throws ParseException {
+        if (!confirmDeep) return;
+
+        ReturnT<String> result = checkDeepHandler.start();
+        if (!result.isSuccess()) {
+            log.error("搴撲綅绉昏浆===>>娴呭簱浣嶇Щ杞埌娣卞簱浣嶅け璐�");
+        }
+    }
+
+}
diff --git a/src/main/java/com/zy/asrs/task/handler/CheckDeepHandler.java b/src/main/java/com/zy/asrs/task/handler/CheckDeepHandler.java
new file mode 100644
index 0000000..694a443
--- /dev/null
+++ b/src/main/java/com/zy/asrs/task/handler/CheckDeepHandler.java
@@ -0,0 +1,259 @@
+package com.zy.asrs.task.handler;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.core.common.Cools;
+import com.zy.asrs.entity.BasCrnp;
+import com.zy.asrs.entity.LocDetl;
+import com.zy.asrs.entity.LocMast;
+import com.zy.asrs.entity.WrkMast;
+import com.zy.asrs.service.*;
+import com.zy.asrs.task.AbstractHandler;
+import com.zy.asrs.task.core.ReturnT;
+import com.zy.asrs.utils.Utils;
+import com.zy.common.properties.SlaveProperties;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.transaction.interceptor.TransactionAspectSupport;
+
+import java.util.List;
+
+/**
+ * Created by vincent on 2020/7/6
+ */
+@Service
+@Slf4j
+public class CheckDeepHandler extends AbstractHandler<String> {
+
+    @Value("${wcs-slave.doubleDeep}")
+    private boolean confirmDeep;
+    @Value("${wcs-slave.doubleLocs}")
+    private String deepLocs;
+    @Value("${wcs-slave.shallowLocs}")
+    private String shallowLocs;
+    @Autowired
+    private LocDetlService locDetlService;
+    @Autowired
+    private LocMastService locMastService;
+    @Autowired
+    private WorkService workService;
+    @Autowired
+    private WrkMastService wrkMastService;
+    @Autowired
+    private BasCrnpService basCrnpService;
+    @Autowired
+    private SlaveProperties slaveProperties;
+
+    @Transactional
+    public synchronized ReturnT<String> start() {
+        try {
+            for (int crnNo = 1; crnNo < 3; crnNo++){
+                List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>()
+                        .eq("crn_no",crnNo)
+                        .last(" and wrk_sts in (2,3,4,11,12)")
+                );
+                if (wrkMasts.size() > 0) continue;
+
+//                //鏆傚仠绉诲簱
+//                BasCrnp crnp = basCrnpService.selectById(crnNo);
+//                if(!Cools.isEmpty(crnp) && crnp.getOrigin()!=0){
+//                    continue;
+//                }
+
+                List<LocMast> locMasts = locMastService.queryShallowLocFMast(crnNo);
+                if (null == locMasts) continue;
+
+                for (LocMast sourceLoc : locMasts){
+                    String deep = Utils.getDeepLoc(slaveProperties, sourceLoc.getLocNo());
+                    LocMast destLoc = locMastService.selectById(deep);
+
+                    if(!Cools.isEmpty(sourceLoc) && !Cools.isEmpty(destLoc)) {
+                        //鏌ユ壘婧愬簱浣嶆槸鍚︽湁杞Щ浠诲姟,濡傛灉鏈�,涓嶇敓鎴愬簱浣嶇Щ杞�
+                        WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>()
+                                .eq("source_loc_no", sourceLoc.getLocNo()));
+                        if (Cools.isEmpty(wrkMast) && destLoc.getLocSts().equals("O") &&
+                                (sourceLoc.getLocSts().equals("F") || sourceLoc.getLocSts().equals("D"))) {
+                            workService.locMove(sourceLoc.getLocNo(), deep, 1L);
+                        }
+                    }
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+            return FAIL.setMsg(e.getMessage());
+        }
+        return SUCCESS;
+    }
+
+    /**
+     * 閬嶅巻搴撳瓨涓紝娴呭簱浣嶇姸鎬丗锛屾繁搴撲綅鐘舵�丱鐨勬暟鎹紝鐢熸垚搴撲綅绉昏浆宸ヤ綔妗e皢娴呭簱浣嶇Щ杞埌瀵瑰簲娣卞簱浣嶄腑鍘�
+     */
+//    private void locMoveToDeep(int crnNo){
+//        if (!confirmDeep) return;
+//        List<LocMast> locMasts = locMastService.queryShallowLocFMast();
+//
+//
+//        if (null == locMasts) return;
+//
+//        for (LocMast sourceLoc : locMasts){
+//            String deep = Utils.getDeepLoc(slaveProperties, sourceLoc.getLocNo());
+//            LocMast destLoc = locMastService.selectById(deep);
+//
+//            if(!Cools.isEmpty(sourceLoc) && !Cools.isEmpty(destLoc)) {
+//                //鏌ユ壘婧愬簱浣嶆槸鍚︽湁杞Щ浠诲姟,濡傛灉鏈�,涓嶇敓鎴愬簱浣嶇Щ杞�
+//                WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>()
+//                        .eq("source_loc_no", sourceLoc.getLocNo()));
+//                if (Cools.isEmpty(wrkMast) && destLoc.getLocSts().equals("O") &&
+//                        (sourceLoc.getLocSts().equals("F") || sourceLoc.getLocSts().equals("D"))) {
+//                    workService.locMove(sourceLoc.getLocNo(), deep, 1L);
+//                }
+//            }
+//        }
+//
+//    }
+
+//    @Transactional
+//    public synchronized ReturnT<String> start1() {
+//        try {
+//            for (int crnNo = 1; crnNo < 6; crnNo++){
+//                List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>()
+//                        .eq("crn_no",crnNo)
+//                        .last(" and wrk_sts in (2,3,4,11,12)")
+//                );
+//                if (wrkMasts.size() > 0) continue;
+//
+//                //鏆傚仠绉诲簱
+//                BasCrnp crnp = basCrnpService.selectById(crnNo);
+//                if(!Cools.isEmpty(crnp) && crnp.getOrigin()!=0){
+//                    continue;
+//                }
+//
+//                //閬嶅巻搴撳瓨涓紝娣辨祬搴撲綅鐘舵�侀兘涓篎锛岀墿鏂欎笉鐩稿悓锛屾垨鑰呮祬搴撲綅鍏ュ簱鏃ユ湡姣旀繁搴撲綅鏃╃殑搴撲綅锛屽仛搴撲綅绉昏浆绉诲埌鏂扮殑娣卞簱浣嶄腑鍘�
+//                boolean flag0 = false;
+//                List<LocMast> locMasts = locMastService.queryNeedMoveShallLoc(crnNo);
+//                for (LocMast locMast : locMasts) {
+//                    //澶氱瑪鏄庣粏鐨勪笉鍋氱Щ杞皟鏁�
+//                    List<LocDetl> shallowLocDetls = locDetlService.selectList(new EntityWrapper<LocDetl>()
+//                            .eq("loc_no", locMast.getLocNo()));
+//                    String deepLoc = Utils.getDeepLoc(slaveProperties, locMast.getLocNo());
+//                    List<LocDetl> deepLocDetls = locDetlService.selectList(new EntityWrapper<LocDetl>()
+//                            .eq("loc_no", deepLoc));
+//
+//                    if ((!Cools.isEmpty(shallowLocDetls) && shallowLocDetls.size()>1)
+//                        || (!Cools.isEmpty(deepLocDetls) && deepLocDetls.size()>1)) {
+//                        continue;
+//                    }
+//
+//                    LocMast targetLoc = locMastService.queryEmptyDeepLoc(crnNo);
+//                    if(!Cools.isEmpty(targetLoc)) {
+//                        workService.locMove(locMast.getLocNo(), targetLoc.getLocNo(), 1L);
+//                        log.info("娴呭簱浣嶇Щ杞埌娣卞簱浣�:鐢熸垚搴撲綅绉昏浆浠诲姟鎴愬姛[娴呭埌娣盷===>>" + locMast.getLocNo() + "---" + targetLoc.getLocNo());
+//                        flag0 = true;
+//                    }
+//                    break;
+//                }
+//                if(flag0) continue;
+//
+////                List<LocMast> ignoreLocs = new ArrayList<>();
+//                List<LocMast> allDeeps = locMastService.selectAllDeepLoc(crnNo);
+//                for (LocMast sourceDeep : allDeeps) {
+//
+//                    LocDetl sourceLoc = locDetlService.selectOne(new EntityWrapper<LocDetl>()
+//                            .eq("loc_no", sourceDeep.getLocNo()).orderBy("mat_no"));
+//                    if(Cools.isEmpty(sourceLoc)){
+//                        continue;
+//                    }
+//
+//                    boolean moveFlag = false;//姣忔鎵ц涓�绗�
+////                    //濡傛灉杩欎釜搴撲綅宸茬粡琚搷浣滆繃浜�,鐩存帴璺宠繃
+////                    Boolean flag = false;
+////                    for (LocMast ignoreLoc : ignoreLocs) {
+////                        if (ignoreLoc.getLocNo() == sourceDeep.getLocNo()) {
+////                            flag = true;
+////                            break;
+////                        }
+////                    }
+////                    if (flag) {
+////                        continue;
+////                    }
+//
+//                    List<LocMast> allDeepsWithCrnNo = locMastService.selectAllDeepLocWithCrnNo(sourceDeep.getCrnNo(),
+//                            sourceLoc.getMatNo(), sourceLoc.getItemBatch(), sourceLoc.getSpecs());
+//                    for (LocMast targetDeep : allDeepsWithCrnNo) {
+//                        if(targetDeep.getLocNo().equals(sourceDeep.getLocNo())){
+//                            continue;
+//                        }
+////                        LocDetl sourceLoc = locDetlService.selectOne(new EntityWrapper<LocDetl>()
+////                                .eq("loc_no", sourceDeep.getLocNo()));
+//
+//                        LocDetl targetLoc = locDetlService.selectOne(new EntityWrapper<LocDetl>()
+//                                .eq("loc_no", targetDeep.getLocNo()));
+//                        //澶氱瑪鏄庣粏鐨勪笉鍋氱Щ杞皟鏁�
+//                        List<LocDetl> sourceLocDetls = locDetlService.selectList(new EntityWrapper<LocDetl>()
+//                                .eq("loc_no", sourceDeep.getLocNo()));
+//                        List<LocDetl> targetLocDetls = locDetlService.selectList(new EntityWrapper<LocDetl>()
+//                                .eq("loc_no", targetDeep.getLocNo()));
+//
+//                        if (Cools.isEmpty(targetLoc)
+//                                || (!Cools.isEmpty(sourceLocDetls) && sourceLocDetls.size()>1)
+//                                || (!Cools.isEmpty(targetLocDetls) && targetLocDetls.size()>1)) {
+//                            continue;
+//                        }
+//
+//                        //鐗╂枡鍙风浉鍚岋紝婧愬簱浣嶅叆搴撴棩鏈熸棭浜庣洰鏍囧簱浣嶅搴旀繁搴撲綅鍏ュ簱鏃ユ湡锛屽簱浣嶇姸鎬侀兘涓篎
+//                        if (sourceLoc.getMatNo().equals(targetLoc.getMatNo())
+//                                && sourceLoc.getItemBatch().equals(targetLoc.getItemBatch())
+//                                && sourceLoc.getSpecs().equals(targetLoc.getSpecs())
+//                                && sourceLoc.getAppeTime().getTime() < targetLoc.getAppeTime().getTime()
+//                                && sourceDeep.getLocSts().equals("F") && targetDeep.getLocSts().equals("F")) {
+//
+////                    System.out.println("鎴愬姛: "+sourceDeep +"-----" +targetDeep);
+//                            String shallow = convertShallow(targetDeep.getLocNo());
+//                            LocMast shallowLoc = locMastService.selectById(shallow);
+//                            if(!Cools.isEmpty(shallowLoc) && shallowLoc.getLocSts().equals("O")) {
+//                                workService.locMove(sourceDeep.getLocNo(), shallow, 1L);
+//                                log.info("娣卞簱浣嶅悎骞跺畾鏃朵换鍔�:鐢熸垚搴撲綅绉昏浆浠诲姟鎴愬姛[娣卞埌娴匽===>>" + sourceDeep.getLocNo() + "---" + shallow);
+//                                moveFlag=true;
+////                                ignoreLocs.add(sourceDeep);
+////                                ignoreLocs.add(targetDeep);
+//                                break;
+//                            }
+//                        }
+//                    }
+//                    if(moveFlag) break;
+//                }
+//
+//            }
+//        } catch (Exception e) {
+//            e.printStackTrace();
+//            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+//            return FAIL.setMsg(e.getMessage());
+//        }
+//        return SUCCESS;
+//    }
+
+    /**
+     * 灏嗘繁搴撲綅杞负瀵瑰簲娴呭簱浣�
+     * @param deep
+     * @return
+     */
+    private String convertShallow(String deep){
+        String shallLoc = "";
+        Integer mastInt = Integer.parseInt(deep.substring(0, 2));
+        if (mastInt % 2 == 0){
+            mastInt -= 1;
+        }else if (mastInt % 2 == 1){
+            mastInt += 1;
+        }
+        if (mastInt <10){
+            shallLoc = "0" + mastInt+ deep.substring(2,7);
+        }else {
+            shallLoc = mastInt+ deep.substring(2,7);
+        }
+        return shallLoc;
+    }
+
+}
diff --git a/src/main/resources/mapper/LocMastMapper.xml b/src/main/resources/mapper/LocMastMapper.xml
index 67c995b..fb1bd8d 100644
--- a/src/main/resources/mapper/LocMastMapper.xml
+++ b/src/main/resources/mapper/LocMastMapper.xml
@@ -48,4 +48,32 @@
         </if>
         order by loc_sts desc ,lev1 asc,bay1 asc
     </select>
+
+    <select id="queryShallowLocFMast" resultMap="BaseResultMap">
+        select * from asr_loc_mast
+        where 1=1
+        and loc_no in (
+         select
+         concat(
+         (
+         case
+         when left(loc_no, 2) = '01' then '02'
+         when left(loc_no, 2) = '04' then '03'
+         when left(loc_no, 2) = '05' then '06'
+         when left(loc_no, 2) = '08' then '07'
+         when left(loc_no, 2) = '09' then '10'
+         when left(loc_no, 2) = '12' then '11'
+         when left(loc_no, 2) = '13' then '14'
+         when left(loc_no, 2) = '16' then '15'
+         when left(loc_no, 2) = '17' then '18'
+         when left(loc_no, 2) = '20' then '19'
+         end)
+         , right(loc_no, 5)) as shallowLocNo
+         from asr_loc_mast
+         where 1=1
+         and loc_sts = 'O'
+         and row1 in (1,4,5,8,9,12,13,16,17,20)
+        )
+        and (loc_sts = 'F' or loc_sts = 'D') and crn_no = #{crnNo}
+    </select>
 </mapper>

--
Gitblit v1.9.1