From c525bf64b32e80ac92317f520c9fa17fc5a2ac03 Mon Sep 17 00:00:00 2001
From: luxiaotao1123 <t1341870251@163.com>
Date: 星期二, 02 三月 2021 14:48:03 +0800
Subject: [PATCH] #

---
 src/main/resources/mapper/LocDetlMapper.xml                             |   37 ++++++++++++
 src/main/java/zy/cloud/wms/manager/mapper/LocDetlMapper.java            |    4 +
 src/main/java/zy/cloud/wms/manager/service/LocDetlService.java          |   15 ++++
 src/main/java/zy/cloud/wms/manager/service/impl/WorkServiceImpl.java    |    3 +
 src/main/java/zy/cloud/wms/manager/service/impl/LocDetlServiceImpl.java |   21 +++++++
 src/main/java/zy/cloud/wms/common/service/MainService.java              |   57 ++++++++++--------
 6 files changed, 109 insertions(+), 28 deletions(-)

diff --git a/src/main/java/zy/cloud/wms/common/service/MainService.java b/src/main/java/zy/cloud/wms/common/service/MainService.java
index cc82650..c5f3b5d 100644
--- a/src/main/java/zy/cloud/wms/common/service/MainService.java
+++ b/src/main/java/zy/cloud/wms/common/service/MainService.java
@@ -1,6 +1,5 @@
 package zy.cloud.wms.common.service;
 
-import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.core.common.Cools;
 import com.core.common.SnowflakeIdWorker;
 import com.core.exception.CoolException;
@@ -10,7 +9,10 @@
 import org.springframework.transaction.annotation.Transactional;
 import zy.cloud.wms.common.model.OrderStoDto;
 import zy.cloud.wms.common.utils.VersionUtils;
-import zy.cloud.wms.manager.entity.*;
+import zy.cloud.wms.manager.entity.CustOrder;
+import zy.cloud.wms.manager.entity.LocDetl;
+import zy.cloud.wms.manager.entity.Mat;
+import zy.cloud.wms.manager.entity.Pakout;
 import zy.cloud.wms.manager.service.LocDetlService;
 import zy.cloud.wms.manager.service.MatService;
 import zy.cloud.wms.manager.service.PakoutService;
@@ -18,6 +20,7 @@
 
 import java.util.Date;
 import java.util.List;
+import java.util.Optional;
 
 /**
  * Created by vincent on 2021/3/1
@@ -49,36 +52,38 @@
             if (null == mat) {
                 throw new CoolException(custOrder.getUserCode() + "鐗╂枡灏氭湭鏇存柊銆�" + custOrder.getNumber() +"鍗曟嵁鍥犳涓柇锛�");
             }
-            // 鏍规嵁鎺ㄨ崘搴撲綅鏌ユ壘搴撳瓨
-            List<Prior> priors = priorService.selectList(new EntityWrapper<Prior>().eq("matnr", mat.getMatnr()).orderBy("prio"));
-            if (!Cools.isEmpty(priors)) {
-                for (Prior prior : priors) {
-                    LocDetl locDetl = locDetlService.getLocDetl(prior.getNodeId(), prior.getMatnr());
-                    if (null != locDetl && locDetl.getAnfme() > 0) {
-                        // 淇濆瓨鍑哄簱閫氱煡鍗昞
-                        Pakout pakout = new Pakout();
-                        pakout.setWrkSts(1L);
-//                        pakout.setAnfme();
-                        pakout.setZpallet(locDetl.getZpallet());
-                        pakout.setLocNo(locDetl.getLocNo());
-                        pakout.setNodeId(locDetl.getNodeId());
-                        pakout.setWrkNo(String.valueOf(snowflakeIdWorker.nextId()));
-                        VersionUtils.setPakout(pakout, mat);
-                        pakout.setCreateTime(now);
-                        pakout.setUpdateTime(now);
-                        pakout.setStatus(1);
-                        if (!pakoutService.insert(pakout)) {
-                            throw new CoolException("淇濆瓨鍑哄簱閫氱煡鍗曞け璐�");
-                        }
-
+            // 鏌ヨ瀛樻湁褰撳墠鐗╂枡鐨勮揣浣�
+            List<LocDetl> locDetls = locDetlService.findOfSort(mat.getMatnr());
+            double issued = Optional.ofNullable(custOrder.getQty()).orElse(0.0D) ;
+            while (issued > 0) {
+                for (LocDetl locDetl : locDetls) {
+                    // 淇濆瓨鍑哄簱閫氱煡鍗�
+                    Pakout pakout = new Pakout();
+                    pakout.setWrkSts(1L);
+                    pakout.setAnfme(issued>=locDetl.getAnfme()?locDetl.getAnfme():issued);
+                    pakout.setZpallet(locDetl.getZpallet());
+                    pakout.setLocNo(locDetl.getLocNo());
+                    pakout.setNodeId(locDetl.getNodeId());
+                    pakout.setWrkNo(String.valueOf(snowflakeIdWorker.nextId()));
+                    VersionUtils.setPakout(pakout, mat);
+                    pakout.setCreateTime(now);
+                    pakout.setUpdateTime(now);
+                    pakout.setStatus(1);
+                    if (!pakoutService.insert(pakout)) {
+                        throw new CoolException("淇濆瓨鍑哄簱閫氱煡鍗曞け璐�");
                     }
+                    // 淇敼搴撳瓨鏄庣粏鏁伴噺
+                    if (!locDetlService.reduceStock(locDetl.getNodeId(), mat.getMatnr(), issued>=locDetl.getAnfme()?locDetl.getAnfme():issued)) {
+                        throw new CoolException("淇敼搴撳瓨鏄庣粏鏁伴噺澶辫触");
+                    }
+                    // 鍓╀綑寰呭嚭璐т綅閫掑噺
+                    issued = issued - locDetl.getAnfme();
                 }
-            } else {
-
             }
 
 
 
+
         }
     }
 
diff --git a/src/main/java/zy/cloud/wms/manager/mapper/LocDetlMapper.java b/src/main/java/zy/cloud/wms/manager/mapper/LocDetlMapper.java
index 577eb81..7fd26eb 100644
--- a/src/main/java/zy/cloud/wms/manager/mapper/LocDetlMapper.java
+++ b/src/main/java/zy/cloud/wms/manager/mapper/LocDetlMapper.java
@@ -19,4 +19,8 @@
 
     Double selectCountByMatnr(@Param("matnr") String matnr);
 
+    Integer reduceStock(@Param("nodeId") Long nodeId, @Param("matnr") String matnr, @Param("anfme") Double anfme);
+
+    List<LocDetl> selectByPrior(@Param("matnr") String matnr, @Param("nodeId") Long nodeId);
+
 }
diff --git a/src/main/java/zy/cloud/wms/manager/service/LocDetlService.java b/src/main/java/zy/cloud/wms/manager/service/LocDetlService.java
index 13d029f..7fb30c0 100644
--- a/src/main/java/zy/cloud/wms/manager/service/LocDetlService.java
+++ b/src/main/java/zy/cloud/wms/manager/service/LocDetlService.java
@@ -1,8 +1,10 @@
 package zy.cloud.wms.manager.service;
 
 import com.baomidou.mybatisplus.plugins.Page;
-import zy.cloud.wms.manager.entity.LocDetl;
 import com.baomidou.mybatisplus.service.IService;
+import zy.cloud.wms.manager.entity.LocDetl;
+
+import java.util.List;
 
 public interface LocDetlService extends IService<LocDetl> {
 
@@ -10,6 +12,17 @@
 
     LocDetl getLocDetl(Long nodeId, String matnr);
 
+    List<LocDetl> findOfSort(String matnr);
+
+    /**
+     * 鏌ョ湅褰撳墠璁㈠崟鍙风殑鐗╂枡鍦ㄥ簱瀛樹腑鏄惁鍏呰冻
+     * @param number
+     */
     void checkLocDetlCount(String number);
 
+    /**
+     * 鍑忓皯搴撳瓨
+     */
+    Boolean reduceStock(Long nodeId, String matnr, Double anfme);
+
 }
diff --git a/src/main/java/zy/cloud/wms/manager/service/impl/LocDetlServiceImpl.java b/src/main/java/zy/cloud/wms/manager/service/impl/LocDetlServiceImpl.java
index 733e735..d80fcf3 100644
--- a/src/main/java/zy/cloud/wms/manager/service/impl/LocDetlServiceImpl.java
+++ b/src/main/java/zy/cloud/wms/manager/service/impl/LocDetlServiceImpl.java
@@ -3,6 +3,7 @@
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.baomidou.mybatisplus.plugins.Page;
 import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.core.common.Cools;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import zy.cloud.wms.common.config.CodeCoolException;
@@ -14,6 +15,7 @@
 import zy.cloud.wms.manager.service.LocDetlService;
 import zy.cloud.wms.manager.service.MatService;
 
+import java.util.ArrayList;
 import java.util.List;
 
 @Service("locDetlService")
@@ -32,6 +34,20 @@
     @Override
     public LocDetl getLocDetl(Long nodeId, String matnr) {
         return this.baseMapper.selectByLocNoAndMatnr(nodeId, matnr);
+    }
+
+    @Override
+    public List<LocDetl> findOfSort(String matnr) {
+        List<LocDetl> result = new ArrayList<>();
+        List<LocDetl> locDetls = this.baseMapper.selectByPrior(matnr, null);
+        if (!Cools.isEmpty(locDetls)) {
+            result.addAll(locDetls);
+        }
+        List<LocDetl> locDetls1 = this.selectList(new EntityWrapper<LocDetl>().eq("matnr", matnr).eq("status", 1).orderBy("create_time"));
+        if (!Cools.isEmpty(locDetls1)) {
+            result.addAll(locDetls1);
+        }
+        return result;
     }
 
     @Override
@@ -57,5 +73,10 @@
         }
     }
 
+    @Override
+    public Boolean reduceStock(Long nodeId, String matnr, Double anfme) {
+        return this.baseMapper.reduceStock(nodeId, matnr, anfme)>0;
+    }
+
 
 }
diff --git a/src/main/java/zy/cloud/wms/manager/service/impl/WorkServiceImpl.java b/src/main/java/zy/cloud/wms/manager/service/impl/WorkServiceImpl.java
index b7b32cd..7f2c08a 100644
--- a/src/main/java/zy/cloud/wms/manager/service/impl/WorkServiceImpl.java
+++ b/src/main/java/zy/cloud/wms/manager/service/impl/WorkServiceImpl.java
@@ -7,6 +7,7 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import zy.cloud.wms.common.service.MainService;
 import zy.cloud.wms.common.utils.VersionUtils;
 import zy.cloud.wms.manager.entity.Comb;
 import zy.cloud.wms.manager.entity.LocDetl;
@@ -28,6 +29,8 @@
 public class WorkServiceImpl implements WorkService {
 
     @Autowired
+    private MainService mainService;
+    @Autowired
     private NodeService nodeService;
     @Autowired
     private CombService combService;
diff --git a/src/main/resources/mapper/LocDetlMapper.xml b/src/main/resources/mapper/LocDetlMapper.xml
index f736e12..752afc0 100644
--- a/src/main/resources/mapper/LocDetlMapper.xml
+++ b/src/main/resources/mapper/LocDetlMapper.xml
@@ -51,11 +51,46 @@
     </select>
 
     <select id="selectByLocNoAndMatnr" resultMap="BaseResultMap">
-        select * from man_loc_detl where 1=1 and node_id = #{nodeId} and matnr = #{matnr}
+        select top 1 *
+        from man_loc_detl
+        where 1=1
+        and anfme > 0
+        <if test="nodeId != null and nodeId != ''">
+            and node_id = #{nodeId}
+        </if>
+        <if test="matnr != null and matnr != ''">
+            and matnr = #{matnr}
+        </if>
+        order by create_time asc
     </select>
 
     <select id="selectCountByMatnr" resultType="java.lang.Double">
        select sum(anfme) as count from man_loc_detl where 1=1 and matnr = #{matnr}
     </select>
 
+    <update id="reduceStock">
+        update man_loc_detl
+        set anfme = anfme - #{anfme}
+        where 1=1
+        and node_id = #{nodeId}
+        and matnr = #{matnr}
+    </update>
+
+    <select id="selectByPrior" resultMap="BaseResultMap">
+        select
+        mld.*
+        from man_loc_detl mld
+        left join man_prior mp on mld.node_id = mp.node_id
+        where 1=1
+        <if test="nodeId != null and nodeId != ''">
+            and mld.node_id = #{nodeId}
+        </if>
+        <if test="matnr != null and matnr != ''">
+            and mld.matnr = #{matnr}
+        </if>
+        and mld.anfme > 0
+        and mp.status = 1
+        order by mp.prio desc, mld.create_time asc
+    </select>
+
 </mapper>

--
Gitblit v1.9.1