From 46ef1825a0fcbe8b042e31ac81b9e0d20f464661 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期一, 22 五月 2023 10:04:22 +0800
Subject: [PATCH] WMS任务完成、取消功能

---
 src/main/java/com/zy/asrs/service/WorkService.java               |   15 ++
 src/main/java/com/zy/asrs/entity/WaitPakin.java                  |    9 +
 src/main/java/com/zy/asrs/service/WaitPakinService.java          |    7 +
 src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java      |  177 +++++++++++++++++++++++++++++
 src/main/resources/mapper/WmsWrkMapper.xml                       |    1 
 src/main/java/com/zy/asrs/entity/WrkMast.java                    |   19 +++
 src/main/java/com/zy/asrs/service/impl/WaitPakinServiceImpl.java |   11 +
 src/main/java/com/zy/asrs/entity/WrkMastLog.java                 |   19 +++
 src/main/java/com/zy/asrs/controller/WorkController.java         |   37 ++++++
 src/main/java/com/zy/asrs/entity/WmsWrk.java                     |   18 +++
 10 files changed, 312 insertions(+), 1 deletions(-)

diff --git a/src/main/java/com/zy/asrs/controller/WorkController.java b/src/main/java/com/zy/asrs/controller/WorkController.java
new file mode 100644
index 0000000..7bb57fc
--- /dev/null
+++ b/src/main/java/com/zy/asrs/controller/WorkController.java
@@ -0,0 +1,37 @@
+package com.zy.asrs.controller;
+
+import com.core.annotations.ManagerAuth;
+import com.core.common.R;
+import com.zy.asrs.service.WorkService;
+import com.zy.common.web.BaseController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+
+/**
+ * 宸ヤ綔娴佹帴鍙f帶鍒跺櫒
+ * Created by vincent on 2020/6/10
+ */
+@RestController
+public class WorkController extends BaseController {
+
+    @Autowired
+    private WorkService workService;
+
+    @RequestMapping("/hand/control/wrkMast")
+    @ManagerAuth(memo = "鎵嬪姩澶勭悊宸ヤ綔妗�")
+    public R handControlWrkMast(@RequestParam String workNo,
+                                @RequestParam Integer type){
+        if (type == 1) {
+            workService.completeWrkMast(workNo, getUserId());
+            return R.ok("浠诲姟宸插畬鎴�");
+        } else if (type == 2) {
+            workService.cancelWrkMast(workNo, getUserId());
+            return R.ok("浠诲姟宸插彇娑�");
+        }
+        return R.ok();
+    }
+
+}
diff --git a/src/main/java/com/zy/asrs/entity/WaitPakin.java b/src/main/java/com/zy/asrs/entity/WaitPakin.java
index a18b5bf..572f0f8 100644
--- a/src/main/java/com/zy/asrs/entity/WaitPakin.java
+++ b/src/main/java/com/zy/asrs/entity/WaitPakin.java
@@ -91,7 +91,7 @@
 
     @ApiModelProperty(value= "搴撲綅鍙�")
     @TableField("loc_no")
-    private Date locNo;
+    private String locNo;
 
     @ApiModelProperty(value= "鐘舵��")
     private String status;
@@ -134,6 +134,13 @@
     @TableField("appe_user")
     private Long appeUser;
 
+    @ApiModelProperty(value= "鍗曟嵁缂栧彿")
+    @TableField("order_no")
+    private String orderNo;
+
+    @ApiModelProperty(value= "鎵瑰彿")
+    private String batch;
+
     public String getModiTime$(){
         if (Cools.isEmpty(this.modiTime)){
             return "";
diff --git a/src/main/java/com/zy/asrs/entity/WmsWrk.java b/src/main/java/com/zy/asrs/entity/WmsWrk.java
index ac4efbb..53fe742 100644
--- a/src/main/java/com/zy/asrs/entity/WmsWrk.java
+++ b/src/main/java/com/zy/asrs/entity/WmsWrk.java
@@ -176,6 +176,14 @@
     @TableField("barcode")
     private String barcode;
 
+    /**
+     * 缁撴潫鏃堕棿
+     */
+    @ApiModelProperty(value= "缁撴潫鏃堕棿")
+    @TableField("end_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date endTime;
+
     public WmsWrk() {}
 
     public WmsWrk(Integer wmsWrkNo, Integer wmsStatus, Integer wrkNo, Date createTime, Integer ioType, Double ioPri, String locNo, Integer staNo, Integer sourceStaNo, String sourceLocNo, String locSts, String picking, Long modiUser, Date modiTime, Long appeUser, Date appeTime, String memo, String barcode) {
@@ -309,6 +317,13 @@
         return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.appeTime);
     }
 
+    public String getEndTime$(){
+        if (Cools.isEmpty(this.endTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.endTime);
+    }
+
     /**
      * 鑾峰彇鎸佺画鏃堕棿
      */
@@ -318,6 +333,9 @@
         }
 
         Date endDate = new Date();
+        if (!Cools.isEmpty(this.endTime)) {
+            endDate = this.endTime;
+        }
 
         //鐢ㄦ潵鑾峰彇涓や釜鏃堕棿鐩稿樊鐨勬绉掓暟
         long l = this.createTime.getTime() - endDate.getTime();
diff --git a/src/main/java/com/zy/asrs/entity/WrkMast.java b/src/main/java/com/zy/asrs/entity/WrkMast.java
index 5800466..a7849e3 100644
--- a/src/main/java/com/zy/asrs/entity/WrkMast.java
+++ b/src/main/java/com/zy/asrs/entity/WrkMast.java
@@ -13,6 +13,7 @@
 import com.zy.system.service.UserService;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
 
 import java.io.Serializable;
 import java.text.SimpleDateFormat;
@@ -315,6 +316,14 @@
     @TableField("wms_wrk_no")
     private Integer wmsWrkNo;
 
+    /**
+     * 缁撴潫鏃堕棿
+     */
+    @ApiModelProperty(value= "缁撴潫鏃堕棿")
+    @TableField("end_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date endTime;
+
     public String getWrkSts$(){
         BasWrkStatusMapper mapper = SpringUtils.getBean(BasWrkStatusMapper.class);
         BasWrkStatus entity = mapper.selectById(this.wrkSts);
@@ -491,6 +500,13 @@
         return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.logErrTime);
     }
 
+    public String getEndTime$(){
+        if (Cools.isEmpty(this.endTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.endTime);
+    }
+
     /**
      * 鑾峰彇鎸佺画鏃堕棿
      */
@@ -500,6 +516,9 @@
         }
 
         Date endDate = new Date();
+        if (!Cools.isEmpty(this.endTime)) {
+            endDate = this.endTime;
+        }
 
         //鐢ㄦ潵鑾峰彇涓や釜鏃堕棿鐩稿樊鐨勬绉掓暟
         long l = this.ioTime.getTime() - endDate.getTime();
diff --git a/src/main/java/com/zy/asrs/entity/WrkMastLog.java b/src/main/java/com/zy/asrs/entity/WrkMastLog.java
index d6e5402..7b18171 100644
--- a/src/main/java/com/zy/asrs/entity/WrkMastLog.java
+++ b/src/main/java/com/zy/asrs/entity/WrkMastLog.java
@@ -11,6 +11,7 @@
 import com.zy.system.service.UserService;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
 
 import java.io.Serializable;
 import java.text.SimpleDateFormat;
@@ -324,6 +325,14 @@
     @TableField("shuttle_no")
     private Integer shuttleNo;
 
+    /**
+     * 缁撴潫鏃堕棿
+     */
+    @ApiModelProperty(value= "缁撴潫鏃堕棿")
+    @TableField("end_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date endTime;
+
     public WrkMastLog() {}
 
     public String getWrkNo$(){
@@ -501,6 +510,13 @@
         return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.logErrTime);
     }
 
+    public String getEndTime$(){
+        if (Cools.isEmpty(this.endTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.endTime);
+    }
+
     /**
      * 鑾峰彇鎸佺画鏃堕棿
      */
@@ -510,6 +526,9 @@
         }
 
         Date endDate = new Date();
+        if (!Cools.isEmpty(this.endTime)) {
+            endDate = this.endTime;
+        }
 
         //鐢ㄦ潵鑾峰彇涓や釜鏃堕棿鐩稿樊鐨勬绉掓暟
         long l = this.ioTime.getTime() - endDate.getTime();
diff --git a/src/main/java/com/zy/asrs/service/WaitPakinService.java b/src/main/java/com/zy/asrs/service/WaitPakinService.java
new file mode 100644
index 0000000..84bcc0a
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/WaitPakinService.java
@@ -0,0 +1,7 @@
+package com.zy.asrs.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.zy.asrs.entity.WaitPakin;
+
+public interface WaitPakinService extends IService<WaitPakin> {
+}
diff --git a/src/main/java/com/zy/asrs/service/WorkService.java b/src/main/java/com/zy/asrs/service/WorkService.java
new file mode 100644
index 0000000..197a32a
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/WorkService.java
@@ -0,0 +1,15 @@
+package com.zy.asrs.service;
+
+public interface WorkService {
+
+    /**
+     * 鎵嬪姩瀹屾垚宸ヤ綔妗�
+     */
+    void completeWrkMast(String workNo, Long userId);
+
+    /**
+     * 鎵嬪姩鍙栨秷宸ヤ綔妗�
+     */
+    void cancelWrkMast(String workNo, Long userId);
+
+}
diff --git a/src/main/java/com/zy/asrs/service/impl/WaitPakinServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/WaitPakinServiceImpl.java
new file mode 100644
index 0000000..ecdc6be
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/impl/WaitPakinServiceImpl.java
@@ -0,0 +1,11 @@
+package com.zy.asrs.service.impl;
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.zy.asrs.entity.WaitPakin;
+import com.zy.asrs.mapper.WaitPakinMapper;
+import com.zy.asrs.service.WaitPakinService;
+import org.springframework.stereotype.Service;
+
+@Service
+public class WaitPakinServiceImpl extends ServiceImpl<WaitPakinMapper, WaitPakin> implements WaitPakinService {
+}
diff --git a/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
new file mode 100644
index 0000000..ea9cf53
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -0,0 +1,177 @@
+package com.zy.asrs.service.impl;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.core.common.Cools;
+import com.core.common.DateUtils;
+import com.core.exception.CoolException;
+import com.zy.asrs.domain.enums.WmsWrkStatusType;
+import com.zy.asrs.entity.*;
+import com.zy.asrs.service.*;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Date;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+
+@Service
+public class WorkServiceImpl implements WorkService {
+
+    @Autowired
+    private WrkMastService wrkMastService;
+    @Autowired
+    private WmsWrkService wmsWrkService;
+    @Autowired
+    private LocMastService locMastService;
+    @Autowired
+    private WaitPakinService waitPakinService;
+    @Autowired
+    private WrkMastLogService wrkMastLogService;
+    @Autowired
+    private WrkDetlLogService wrkDetlLogService;
+    @Autowired
+    private WrkDetlService wrkDetlService;
+
+    @Override
+    @Transactional
+    public void completeWrkMast(String workNo, Long userId) {
+        WrkMast wrkMast = wrkMastService.selectById(workNo);
+        WmsWrk wmsWrk = wmsWrkService.selectByWmsWrkNo(wrkMast.getWmsWrkNo());
+        if (Cools.isEmpty(wrkMast, wmsWrk)) {
+            throw new CoolException(workNo + "浠诲姟涓嶅瓨鍦�");
+        }
+        if (wrkMast.getWrkSts() == 4 || wrkMast.getWrkSts() == 14) {
+            throw new CoolException("褰撳墠浠诲姟宸插畬鎴�");
+        }
+        // 鍏ュ簱 + 搴撲綅杞Щ
+        if (wrkMast.getWrkSts() < 4 || (wrkMast.getWrkSts() > 10 && wrkMast.getIoType()==11)) {
+            wrkMast.setWrkSts(4L);
+            // 鍑哄簱
+        } else if (wrkMast.getWrkSts() > 10) {
+            wrkMast.setWrkSts(14L);
+        }
+        Date now = new Date();
+        wrkMast.setCrnStrTime(DateUtils.calculate(now, 1L, TimeUnit.SECONDS, true));
+        wrkMast.setCrnEndTime(now);
+        wrkMast.setModiTime(now);
+        wrkMast.setModiUser(userId);
+        // 瀹屾垚鎿嶄綔浜哄憳璁板綍
+        wrkMast.setManuType("鎵嬪姩瀹屾垚");
+
+        wmsWrk.setWmsStatus(WmsWrkStatusType.COMPLETE.id);
+        wmsWrk.setModiUser(userId);
+        wmsWrk.setModiTime(now);
+        wmsWrk.setEndTime(now);
+        if (!wrkMastService.updateById(wrkMast) || !wmsWrkService.updateById(wmsWrk)) {
+            throw new CoolException("淇敼浠诲姟澶辫触");
+        }
+    }
+
+    @Override
+    @Transactional
+    public void cancelWrkMast(String workNo, Long userId) {
+        Date now = new Date();
+        WrkMast wrkMast = wrkMastService.selectById(workNo);
+        WmsWrk wmsWrk = wmsWrkService.selectByWmsWrkNo(wrkMast.getWmsWrkNo());
+        if (Cools.isEmpty(wrkMast, wmsWrk)) {
+            throw new CoolException(workNo + "浠诲姟涓嶅瓨鍦�");
+        }
+
+        String locNo = ""; // 寰呬慨鏀圭洰鏍囧簱浣�
+        String locSts = ""; // 寰呬慨鏀圭洰鏍囧簱浣嶇姸鎬�
+        // 鍏ュ簱鍙栨秷锛堜慨鏀圭洰鏍囧簱浣嶏級
+        if (wrkMast.getWrkSts() < 4) {
+            locNo = wrkMast.getLocNo();
+            locSts = "O";
+
+            // 搴撲綅杞Щ
+            if (wrkMast.getIoType() == 11) {
+                // 搴撲綅杞Щ锛氭簮搴撲綅
+                LocMast locMast = locMastService.selectById(wrkMast.getSourceLocNo());
+                if (Cools.isEmpty(locMast)) {
+                    throw new CoolException("鍙栨秷搴撲綅杞Щ澶辫触锛屾簮搴撲綅涓嶅瓨鍦�:"+ wrkMast.getSourceLocNo());
+                }
+                locMast.setLocSts(wrkMast.getFullPlt().equalsIgnoreCase("N")?"D":"F");
+                locMast.setModiTime(now);
+                locMast.setModiUser(userId);
+                locMastService.updateById(locMast);
+            }
+            // 鍑哄簱鍙栨秷锛堜慨鏀规簮搴撲綅锛�
+        } else if (wrkMast.getWrkSts() > 10 && wrkMast.getWrkSts() != 14) {
+            locNo = wrkMast.getSourceLocNo();
+            // 鍑哄簱 ===>> F.鍦ㄥ簱
+            if (wrkMast.getIoType() > 100 && wrkMast.getIoType() != 110) {
+                locSts = "F";
+                // 绌烘澘鍑哄簱 ===>> D.绌烘《/绌烘爤鏉�
+            } else if (wrkMast.getIoType() == 110) {
+                locSts = "D";
+                // 搴撲綅杞Щ ===>> D.绌烘《/绌烘爤鏉�
+            } else if (wrkMast.getIoType() == 11) {
+                locSts = wrkMast.getFullPlt().equalsIgnoreCase("N")?"D":"F";
+                // 搴撲綅杞Щ锛氱洰鏍囧簱浣�
+                LocMast locMast = locMastService.selectById(wrkMast.getLocNo());
+                if (Cools.isEmpty(locMast)) {
+                    throw new CoolException("鍙栨秷搴撲綅杞Щ澶辫触锛岀洰鏍囧簱浣嶄笉瀛樺湪:"+ wrkMast.getSourceLocNo());
+                }
+                locMast.setLocSts("O");
+                locMast.setModiTime(now);
+                locMast.setModiUser(userId);
+                locMastService.updateById(locMast);
+            }
+        } else {
+            throw new CoolException("褰撳墠宸ヤ綔鐘舵�佹棤娉曞彇娑�");
+        }
+
+        //鍙栨秷鍏ュ簱宸ヤ綔妗f椂锛屾煡璇㈢粍鎵樿〃锛屽鏋滄湁灏嗙姸鎬佹敼涓哄緟澶勭悊
+        if(wrkMast.getIoType() == 1) {
+            List<WaitPakin> waitPakins = waitPakinService.selectList(new EntityWrapper<WaitPakin>().eq("zpallet", wrkMast.getBarcode()));
+            for (WaitPakin waitPakin:waitPakins){
+                if (!Cools.isEmpty(waitPakin)) {
+                    waitPakin.setIoStatus("N");
+                    waitPakin.setLocNo("");
+                    waitPakinService.update(waitPakin, new EntityWrapper<WaitPakin>()
+                            .eq("order_no", waitPakin.getOrderNo())
+                            .eq("matnr", waitPakin.getMatnr())
+                            .eq("batch", waitPakin.getBatch()));
+                }
+            }
+        }
+
+        // 鍙栨秷鎿嶄綔浜哄憳璁板綍
+        wrkMast.setManuType("鎵嬪姩鍙栨秷");
+        wrkMast.setModiUser(userId);
+        wrkMast.setModiTime(now);
+        if (!wrkMastService.updateById(wrkMast)) {
+            throw new CoolException("鍙栨秷浠诲姟澶辫触");
+        }
+
+        wmsWrk.setWmsStatus(WmsWrkStatusType.CANCEL.id);
+        wmsWrk.setModiUser(userId);
+        wmsWrk.setModiTime(now);
+        wmsWrk.setEndTime(now);
+        if (!wmsWrkService.updateById(wmsWrk)) {
+            throw new CoolException("鍙栨秷浠诲姟澶辫触");
+        }
+
+        // 淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗�
+        if (!wrkMastLogService.save(wrkMast.getWrkNo())) {
+            throw new CoolException("淇濆瓨浠诲姟鍘嗗彶妗eけ璐�, workNo = " + wrkMast.getWrkNo());
+        }
+        // 鍒犻櫎宸ヤ綔涓绘。
+        boolean wrkMastRes = wrkMastService.deleteById(wrkMast);
+
+        // 淇敼搴撲綅鐘舵��
+        LocMast locMast = locMastService.selectById(locNo);
+        if (Cools.isEmpty(locMast)) {
+            throw new CoolException("鍙栨秷浠诲姟澶辫触锛屽簱浣嶄笉瀛樺湪:"+ locNo);
+        }
+        locMast.setLocSts(locSts);
+        locMast.setModiTime(now);
+        locMast.setModiUser(userId);
+        boolean locMastRes = locMastService.updateById(locMast);
+        if (!wrkMastRes || !locMastRes) {
+            throw new CoolException("淇濆瓨鏁版嵁澶辫触");
+        }
+    }
+}
diff --git a/src/main/resources/mapper/WmsWrkMapper.xml b/src/main/resources/mapper/WmsWrkMapper.xml
index a82602f..5dab924 100644
--- a/src/main/resources/mapper/WmsWrkMapper.xml
+++ b/src/main/resources/mapper/WmsWrkMapper.xml
@@ -22,6 +22,7 @@
         <result column="appe_time" property="appeTime" />
         <result column="memo" property="memo" />
         <result column="barcode" property="barcode" />
+        <result column="end_time" property="endTime" />
 
     </resultMap>
 

--
Gitblit v1.9.1