From 9b50ae798149b64f9e3413897ff96d4084a9a7aa Mon Sep 17 00:00:00 2001
From: luxiaotao1123 <t1341870251@163.com>
Date: 星期三, 23 三月 2022 10:06:36 +0800
Subject: [PATCH] #杰克缝纫机立库 【优化单据管理】

---
 src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java |  188 +++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 167 insertions(+), 21 deletions(-)

diff --git a/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
index 72e43ca..6efa9eb 100644
--- a/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -1,23 +1,29 @@
 package com.zy.asrs.service.impl;
 
+import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.baomidou.mybatisplus.mapper.Wrapper;
 import com.core.common.BaseRes;
 import com.core.common.Cools;
 import com.core.common.DateUtils;
+import com.core.common.SnowflakeIdWorker;
 import com.core.exception.CoolException;
 import com.zy.asrs.entity.*;
 import com.zy.asrs.entity.param.EmptyPlateOutParam;
 import com.zy.asrs.entity.param.FullStoreParam;
 import com.zy.asrs.entity.param.LocDetlAdjustParam;
 import com.zy.asrs.entity.param.StockOutParam;
+import com.zy.asrs.entity.result.PakoutVo;
 import com.zy.asrs.service.*;
 import com.zy.asrs.utils.VersionUtils;
-import com.zy.common.model.LocDetlDto;
-import com.zy.common.model.OutLocDto;
-import com.zy.common.model.StartupDto;
+import com.zy.common.model.*;
+import com.zy.common.model.enums.WorkNoType;
 import com.zy.common.service.CommonService;
+import com.zy.common.service.wms.Result;
+import com.zy.common.service.wms.WmsService;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -28,6 +34,7 @@
 /**
  * Created by vincent on 2020/6/11
  */
+@Slf4j
 @Service
 public class WorkServiceImpl implements WorkService {
 
@@ -58,6 +65,10 @@
     private WrkMastLogService wrkMastLogService;
     @Autowired
     private WrkDetlLogService wrkDetlLogService;
+    @Autowired
+    private WmsService wmsService;
+    @Autowired
+    private SnowflakeIdWorker snowflakeIdWorker;
 
     @Override
     @Transactional
@@ -68,11 +79,14 @@
         }
         // 婧愮珯鐐圭姸鎬佹娴�
         BasDevp sourceStaNo = basDevpService.checkSiteStatus(param.getDevpNo(), true);
-        // 鐢熸垚宸ヤ綔鍙�
-        int workNo = commonService.getWorkNo(DEFAULT_WORK_NO_TYPE);
         // 妫�绱㈠簱浣�
+        LocTypeDto locTypeDto = new LocTypeDto(sourceStaNo);
+        log.info(JSON.toJSONString(locTypeDto));
+        log.info("{}鍏ュ簱鍙e昂瀵告娴嬶細{}", param.getDevpNo(), locTypeDto.getLocType1()==1?"浣庤鏍煎簱浣�":"楂樿鏍煎簱浣�");
         List<String> matNos = param.getList().stream().map(FullStoreParam.MatCodeStore::getMatNo).distinct().collect(Collectors.toList());
-        StartupDto dto = commonService.getLocNo(DEFAULT_ROW_NO_TYPE, 1, param.getDevpNo(), matNos);
+        StartupDto dto = commonService.getLocNo(DEFAULT_ROW_NO_TYPE, 1, param.getDevpNo(), matNos, locTypeDto, 0);
+        // 鐢熸垚宸ヤ綔鍙�
+        int workNo = dto.getWorkNo();
         // 鐢熸垚宸ヤ綔妗�
         WrkMast wrkMast = new WrkMast();
         wrkMast.setWrkNo(workNo);
@@ -146,7 +160,7 @@
         }
         if (!locDetlDtos.isEmpty()) {
             // 鍚姩鍑哄簱寮�濮� 101.鍑哄簱
-            stockOut(staNo, locDetlDtos, null, userId);
+            stockOut(staNo, locDetlDtos, null, userId, null, false, null);
         } else {
             throw new CoolException("搴撲綅鐗╂枡涓嶅瓨鍦�");
         }
@@ -154,7 +168,7 @@
 
     @Override
     @Transactional
-    public void stockOut(BasDevp staNo, List<LocDetlDto> locDetlDtos, Integer ioType, Long userId) {
+    public void stockOut(BasDevp staNo, List<LocDetlDto> locDetlDtos, Integer ioType, Long userId, String allotNo, Boolean sell, Double more) {
         // 鍚堝苟鍚岀被椤�
         Set<String> locNos = new HashSet<>();
         locDetlDtos.forEach(dto -> locNos.add(dto.getLocDetl().getLocNo()));
@@ -189,7 +203,7 @@
                 throw new CoolException("鍑哄簱璺緞涓嶅瓨鍦�");
             }
             // 鐢熸垚宸ヤ綔鍙�
-            int workNo = commonService.getWorkNo(DEFAULT_WORK_NO_TYPE);
+            int workNo = commonService.getWorkNo(WorkNoType.getWorkNoType(ioType));
             // 鐢熸垚宸ヤ綔妗�
             WrkMast wrkMast = new WrkMast();
             wrkMast.setWrkNo(workNo);
@@ -206,6 +220,9 @@
             wrkMast.setExitMk("N"); // 閫�鍑�
             wrkMast.setEmptyMk("N"); // 绌烘澘
             wrkMast.setLinkMis("N");
+            wrkMast.setPacked(allotNo); // 骞充粨琛ヤ粨鍗曞彿
+            wrkMast.setPdcType(sell?"Y":"N"); // ERP閿�鍞鍗曞嚭搴撲换鍔�
+            wrkMast.setRefWrkno(more==null?0.0D:more);
             wrkMast.setAppeUser(userId); // 鎿嶄綔浜哄憳鏁版嵁
             wrkMast.setAppeTime(new Date());
             wrkMast.setModiUser(userId);
@@ -251,22 +268,22 @@
     public String emptyPlateIn(Integer devpNo, Long userId) {
         // 婧愮珯鐐圭姸鎬佹娴�
         BasDevp sourceStaNo = basDevpService.checkSiteStatus(devpNo, true);
-        // 鐢熸垚宸ヤ綔鍙�
-        int workNo = commonService.getWorkNo(DEFAULT_WORK_NO_TYPE);
         // 妫�绱㈠簱浣�
-        StartupDto dto = commonService.getLocNo(DEFAULT_ROW_NO_TYPE, 10, devpNo, null);
+        LocTypeDto locTypeDto = new LocTypeDto(sourceStaNo);
+        StartupDto dto = commonService.getLocNo(DEFAULT_ROW_NO_TYPE, 10, devpNo, null, locTypeDto, 0);
+        int workNo = dto.getWorkNo();
         // 鐢熸垚宸ヤ綔妗�
         WrkMast wrkMast = new WrkMast();
         wrkMast.setWrkNo(workNo);
         wrkMast.setIoTime(new Date());
         wrkMast.setWrkSts(1L); // 宸ヤ綔鐘舵�侊細鐢熸垚鍏ュ簱ID
         wrkMast.setIoType(10); // 鍏ュ嚭搴撶姸鎬侊細10.绌烘澘鍏ュ簱
-        wrkMast.setIoPri(13D); // 浼樺厛绾э細10
+        wrkMast.setIoPri(10D); // 浼樺厛绾э細10
         wrkMast.setCrnNo(dto.getCrnNo());
         wrkMast.setSourceStaNo(dto.getSourceStaNo());
         wrkMast.setStaNo(dto.getStaNo());
         wrkMast.setLocNo(dto.getLocNo());
-        wrkMast.setFullPlt("N"); // 婊℃澘锛歒
+        wrkMast.setFullPlt("N"); // 婊℃澘
         wrkMast.setPicking("N"); // 鎷f枡
         wrkMast.setExitMk("N"); // 閫�鍑�
         wrkMast.setEmptyMk("Y"); // 绌烘澘
@@ -311,7 +328,7 @@
         }
         for (String locNo : param.getLocNos()) {
             // 鑾峰彇宸ヤ綔鍙�
-            int workNo = commonService.getWorkNo(DEFAULT_WORK_NO_TYPE);
+            int workNo = commonService.getWorkNo(WorkNoType.PAKOUT.type);
             // 鑾峰彇搴撲綅
             LocMast locMast = locMastService.selectById(locNo);
             if (Cools.isEmpty(locMast)) {
@@ -382,7 +399,7 @@
         }
         if (!locDetlDtos.isEmpty()) {
             // 鍚姩鍑哄簱寮�濮� 107.鐩樼偣鍑哄簱
-            stockOut(staNo, locDetlDtos, 107, userId);
+            stockOut(staNo, locDetlDtos, 107, userId, null, false, null);
         } else {
             throw new CoolException("搴撲綅鐗╂枡涓嶅瓨鍦�");
         }
@@ -403,7 +420,7 @@
             throw new CoolException("绉昏浆搴撲綅灞炰簬涓嶅悓鍫嗗灈鏈�");
         }
         // 鑾峰彇宸ヤ綔鍙�
-        int workNo = commonService.getWorkNo(DEFAULT_WORK_NO_TYPE);
+        int workNo = commonService.getWorkNo(WorkNoType.PICK.type);
         // 淇濆瓨宸ヤ綔妗�
         WrkMast wrkMast = new WrkMast();
         wrkMast.setWrkNo(workNo);
@@ -490,6 +507,8 @@
         wrkMast.setCrnEndTime(now);
         wrkMast.setModiTime(now);
         wrkMast.setModiUser(userId);
+        // 瀹屾垚鎿嶄綔浜哄憳璁板綍
+        wrkMast.setManuType("鎵嬪姩瀹屾垚");
         if (!wrkMastService.updateById(wrkMast)) {
             throw new CoolException("淇敼宸ヤ綔妗eけ璐�");
         }
@@ -534,12 +553,37 @@
                 adjDetl.setOriQty(0.0D);
                 adjDetl.setAdjQty(adjust.getCount());
                 adjDetlService.save(adjDetl, userId);
+                // 涓婃姤erp
+                String docNum = "CS-" + String.valueOf(snowflakeIdWorker.nextId()).substring(0, 15);
+                Integer docId = 14; // 鎶ユ孩鍗�
+                List<BillDto> dtos = new ArrayList<>();
+                BillDto billDto = new BillDto();
+                billDto.setMatnr(adjust.getMatnr());
+                billDto.setQty(Math.abs(adjust.getCount()));
+                dtos.add(billDto);
+                Result result = wmsService.erpUpload(dtos, docId, docNum);
+                if (result.getCode() != 200) {
+                    throw new CoolException("搴撳瓨璋冩暣澶辫触锛屽師鍥狅細鏃犳硶涓婃姤鑷矱RP");
+                }
             // 淇敼鍘熷簱瀛樻槑缁�
             } else {
                 // 濡傛灉鏁伴噺淇敼锛屽垯鏇存柊搴撳瓨鏄庣粏
                 if (!adjust.getCount().equals(one.getAnfme())) {
                     // 褰撴暟閲忚淇敼涓� 0 鏃讹紝鐩存帴娓呴櫎搴撳瓨鏄庣粏
                     if (adjust.getCount() == 0) {
+                        // 涓婃姤erp
+                        String docNum = "CD-" + String.valueOf(snowflakeIdWorker.nextId()).substring(0, 15);
+                        Integer docId = 9; // 鎶ユ崯鍗�
+                        List<BillDto> dtos = new ArrayList<>();
+                        BillDto billDto = new BillDto();
+                        billDto.setMatnr(adjust.getMatnr());
+                        billDto.setQty(Math.abs(one.getAnfme()));
+                        dtos.add(billDto);
+                        Result result = wmsService.erpUpload(dtos, docId, docNum);
+                        if (result.getCode() != 200) {
+                            throw new CoolException("搴撳瓨璋冩暣澶辫触锛屽師鍥狅細鏃犳硶涓婃姤鑷矱RP");
+                        }
+                        // 鍒犻櫎搴撳瓨
                         if (!locDetlService.delete(new EntityWrapper<>(one))) {
                             throw new CoolException("娓呴櫎搴撳瓨鏄庣粏澶辫触");
                         }
@@ -552,6 +596,27 @@
                                 .eq("loc_no", locMast.getLocNo())
                                 .eq("matnr", adjust.getMatnr()))) {
                             throw new CoolException("淇敼搴撳瓨鏄庣粏澶辫触");
+                        }
+                        // 涓婃姤erp
+                        String docNum;
+                        Integer docId;
+                        if (one.getAnfme() > adjust.getCount()) {
+                            // 鎶ユ崯
+                            docNum = "CD-" + String.valueOf(snowflakeIdWorker.nextId()).substring(0, 15);
+                            docId = 9;
+                        } else {
+                            // 鎶ユ孩
+                            docNum = "CS-" + String.valueOf(snowflakeIdWorker.nextId()).substring(0, 15);
+                            docId = 14;
+                        }
+                        List<BillDto> dtos = new ArrayList<>();
+                        BillDto billDto = new BillDto();
+                        billDto.setMatnr(adjust.getMatnr());
+                        billDto.setQty(Math.abs(one.getAnfme() - adjust.getCount()));
+                        dtos.add(billDto);
+                        Result result = wmsService.erpUpload(dtos, docId, docNum);
+                        if (result.getCode() != 200) {
+                            throw new CoolException("搴撳瓨璋冩暣澶辫触锛屽師鍥狅細鏃犳硶涓婃姤鑷矱RP");
                         }
                     }
                     // 淇濆瓨璋冩暣璁板綍
@@ -610,6 +675,18 @@
             // 鍑哄簱 ===>> F.鍦ㄥ簱
             if (wrkMast.getIoType() > 100 && wrkMast.getIoType() != 110) {
                 locSts = "F";
+                // 閿�鍞崟鍏宠仈锛屽垯鐢熸垚鏂扮殑鍑哄簱浠诲姟
+                if (wrkMast.getPdcType().equals("Y")) {
+                    List<WrkDetl> wrkDetls = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", workNo));
+                    for (WrkDetl wrkDetl : wrkDetls) {
+                        Double sumAnfme = Optional.ofNullable(locDetlService.getSumAnfme(wrkDetl.getMatnr())).orElse(0.0D);
+                        if (sumAnfme < wrkDetl.getAnfme()) {
+                            throw new CoolException("鍙栨秷澶辫触锛佸簱瀛樹笉瓒充互閲嶆柊鐢熸垚鍑哄簱浣滀笟");
+                        }
+                    }
+                    // 鐢熸垚鏂扮殑鍑哄簱浣滀笟
+                    stockOutRe(wrkMast, wrkDetls);
+                }
             // 绌烘澘鍑哄簱 ===>> D.绌烘《/绌烘爤鏉�
             } else if (wrkMast.getIoType() == 110) {
                 locSts = "D";
@@ -629,10 +706,29 @@
         } else {
             throw new CoolException("褰撳墠宸ヤ綔鐘舵�佹棤娉曞彇娑�");
         }
-        // 鍒犻櫎宸ヤ綔妗�
+        // 鍙栨秷鎿嶄綔浜哄憳璁板綍
+        wrkMast.setManuType("鎵嬪姩鍙栨秷");
+        wrkMast.setModiUser(userId);
+        wrkMast.setModiTime(new Date());
+        if (!wrkMastService.updateById(wrkMast)) {
+            throw new CoolException("鍙栨秷宸ヤ綔妗eけ璐�");
+        }
+        // 淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗�
+        if (!wrkMastLogService.save(wrkMast.getWrkNo())) {
+            throw new CoolException("淇濆瓨宸ヤ綔鍘嗗彶妗eけ璐�, workNo = " + wrkMast.getWrkNo());
+        }
+        // 鍒犻櫎宸ヤ綔涓绘。
         boolean wrkMastRes = wrkMastService.deleteById(wrkMast);
-        // 鍒犻櫎宸ヤ綔妗f槑缁�
-        boolean wrkDetlRes = wrkDetlService.delete(new EntityWrapper<WrkDetl>().eq("wrk_no", workNo));
+
+        if (wrkMast.getIoType() != 10 && wrkMast.getIoType() != 110) {
+            // 淇濆瓨宸ヤ綔鏄庣粏妗e巻鍙叉。
+            if (!wrkDetlLogService.save(wrkMast.getWrkNo())) {
+                throw new CoolException("淇濆瓨宸ヤ綔鏄庣粏鍘嗗彶妗eけ璐�, workNo = " + wrkMast.getWrkNo());
+            }
+            // 鍒犻櫎宸ヤ綔妗f槑缁�
+            boolean wrkDetlRes = wrkDetlService.delete(new EntityWrapper<WrkDetl>().eq("wrk_no", workNo));
+        }
+
         // 淇敼搴撲綅鐘舵��
         LocMast locMast = locMastService.selectById(locNo);
         if (Cools.isEmpty(locMast)) {
@@ -642,7 +738,7 @@
         locMast.setModiTime(new Date());
         locMast.setModiUser(userId);
         boolean locMastRes = locMastService.updateById(locMast);
-        if (!wrkMastRes || !wrkDetlRes || !locMastRes) {
+        if (!wrkMastRes || !locMastRes) {
             throw new CoolException("淇濆瓨鏁版嵁澶辫触");
         }
     }
@@ -703,4 +799,54 @@
         }
     }
 
+    @Autowired
+    private JdbcTemplate jdbcTemplate;
+    private boolean pickSite = false;
+    private void stockOutRe(WrkMast wrkMast, List<WrkDetl> wrkDetls) {
+        for (WrkDetl wrkDetl : wrkDetls) {
+            List<LocDetl> locDetls = locDetlService.selectPakoutByRule(wrkDetl.getMatnr());
+            double issued = wrkDetl.getAnfme();
+            for (LocDetl locDetl : locDetls) {
+                if (issued > 0) {
+                    // 鐢熸垚鍑哄簱宸ヤ綔妗�
+                    // 鍏ㄦ澘
+                    if (issued>=locDetl.getAnfme()) {
+                        BasDevp staNo = basDevpService.checkSiteStatus(103);
+                        List<LocDetlDto> detlDtos = new ArrayList<>();
+                        LocDetlDto dto = new LocDetlDto();
+                        dto.setLocDetl(locDetl);
+                        dto.setCount(issued>=locDetl.getAnfme()?locDetl.getAnfme():issued);
+                        detlDtos.add(dto);
+                        stockOut(staNo, detlDtos, 101, 9527L, null, true, null);
+                        // 鎷f枡
+                    } else {
+                        int priorCount = jdbcTemplate.queryForObject("select isnull(count(*),0) from man_prior where 1=1 and matnr = '" + wrkDetl.getMatnr() + "'", Integer.class);
+                        if (priorCount > 0) {
+                            BasDevp staNo = basDevpService.checkSiteStatus(103);
+                            List<LocDetlDto> detlDtos = new ArrayList<>();
+                            LocDetlDto dto = new LocDetlDto();
+                            dto.setLocDetl(locDetl);
+                            dto.setCount(locDetl.getAnfme());
+                            detlDtos.add(dto);
+                            stockOut(staNo, detlDtos, 101, 9527L,null, true,locDetl.getAnfme()-issued);
+                        } else {
+                            BasDevp staNo = basDevpService.checkSiteStatus(pickSite?113:109);
+                            List<LocDetlDto> detlDtos = new ArrayList<>();
+                            LocDetlDto dto = new LocDetlDto();
+                            dto.setLocDetl(locDetl);
+                            dto.setCount(issued>=locDetl.getAnfme()?locDetl.getAnfme():issued);
+                            detlDtos.add(dto);
+                            stockOut(staNo, detlDtos, 103, 9527L, null, true, null);
+                        }
+
+                    }
+
+                    // 鍓╀綑寰呭嚭鏁伴噺閫掑噺
+                    issued = issued - locDetl.getAnfme();
+                }
+            }
+        }
+        pickSite = !pickSite;
+    }
+
 }

--
Gitblit v1.9.1