From 5e4ec25a627a4c0c008ccdfa88e3b5c9a30c9135 Mon Sep 17 00:00:00 2001
From: pang.jiabao <pang_jiabao@163.com>
Date: 星期二, 07 一月 2025 13:19:09 +0800
Subject: [PATCH] 库存移动流水记录

---
 src/main/java/com/zy/asrs/entity/WrkDetlLog.java                  |    5 
 src/main/java/com/zy/asrs/entity/InventoryFlowDto.java            |   97 ++++++++
 src/main/resources/mapper/WrkMastLogMapper.xml                    |   55 ++++
 src/main/java/com/zy/asrs/controller/LocMastController.java       |   49 ++++
 src/main/webapp/views/inventoryFlow/inventoryFlow.html            |   88 +++++++
 src/main/webapp/static/js/inventoryFlow/inventoryFlow.js          |  204 +++++++++++++++++
 src/main/resources/mapper/WrkMastMapper.xml                       |    2 
 src/main/java/com/zy/asrs/controller/WrkMastLogController.java    |   23 +
 src/main/webapp/views/pakStore/locDetlQuery.html                  |   22 +
 src/main/java/com/zy/asrs/service/WrkMastLogService.java          |    7 
 src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java       |   98 ++++++++
 src/main/java/com/zy/asrs/mapper/WrkMastLogMapper.java            |   14 +
 src/main/java/com/zy/asrs/service/impl/WrkMastLogServiceImpl.java |   15 +
 src/main/webapp/static/js/common.js                               |    2 
 14 files changed, 678 insertions(+), 3 deletions(-)

diff --git a/src/main/java/com/zy/asrs/controller/LocMastController.java b/src/main/java/com/zy/asrs/controller/LocMastController.java
index 757a36f..c914c92 100644
--- a/src/main/java/com/zy/asrs/controller/LocMastController.java
+++ b/src/main/java/com/zy/asrs/controller/LocMastController.java
@@ -17,6 +17,7 @@
 import com.zy.asrs.service.*;
 import com.zy.common.entity.Parameter;
 import com.zy.common.model.Shelves;
+import com.zy.common.service.CommonService;
 import com.zy.common.web.BaseController;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
@@ -42,6 +43,15 @@
 
     @Resource
     private LocDetlMapper locDetlMapper;
+
+    @Resource
+    private CommonService commonService;
+
+    @Resource
+    private WrkMastLogService wrkMastLogService;
+
+    @Resource
+    private WrkDetlLogService wrkDetlLogService;
 
     @RequestMapping(value = "/locMast/init/pwd")
     public R locMastInitPwd(@RequestParam(required = false) String pwd) {
@@ -134,6 +144,31 @@
         if (oldLocMast.getLocSts().equals("R") || oldLocMast.getLocSts().equals("F") || oldLocMast.getLocSts().equals("S")) {
             if (locMast.getLocSts().equals("O") || locMast.getLocSts().equals("D")) {
                 List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no", locMast.getLocNo()));
+                // 娣诲姞鍘嗗彶宸ヤ綔涓绘。
+                WrkMastLog wrkMastLog = new WrkMastLog();
+                wrkMastLog.setWrkNo(commonService.getWorkNo(3));
+                wrkMastLog.setIoTime(now);
+                wrkMastLog.setWrkSts(5);
+                wrkMastLog.setIoType(19);
+                wrkMastLog.setIoPri(13D); // 浼樺厛绾�
+                wrkMastLog.setCrnNo(locMast.getCrnNo());
+                wrkMastLog.setSourceLocNo(locMast.getLocNo());
+                wrkMastLog.setLocNo(locMast.getLocNo());
+                wrkMastLog.setBarcode(locMast.getBarcode()); // 鎵樼洏鐮�
+                wrkMastLog.setFullPlt("Y"); // 婊℃澘锛歒
+                wrkMastLog.setPicking("N"); // 鎷f枡
+                wrkMastLog.setExitMk("N"); // 閫�鍑�
+                wrkMastLog.setEmptyMk("N"); // 绌烘澘
+                wrkMastLog.setLinkMis("Y");
+                // 鎿嶄綔浜哄憳鏁版嵁
+                wrkMastLog.setAppeTime(now);
+                wrkMastLog.setModiTime(now);
+                wrkMastLog.setAppeUser(getUserId());
+                wrkMastLog.setModiUser(getUserId());
+                boolean res = wrkMastLogService.insert(wrkMastLog);
+                if (!res) {
+                    throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
+                }
                 for (LocDetl locDetl : locDetls) {
                     // 淇濆瓨璋冩暣璁板綍
                     AdjDetl adjDetl = new AdjDetl();
@@ -149,6 +184,20 @@
                     if (!adjDetlService.insert(adjDetl)) {
                         throw new CoolException("鏈嶅姟鍣ㄩ敊璇紝璇疯仈绯荤鐞嗗憳");
                     }
+
+                    // 娣诲姞鍘嗗彶宸ヤ綔鏄庣粏
+                    WrkDetlLog wrkDetl = new WrkDetlLog();
+                    wrkDetl.sync(locDetl);
+                    wrkDetl.setWrkNo(wrkMastLog.getWrkNo());
+                    wrkDetl.setIoTime(wrkMastLog.getIoTime());
+                    wrkDetl.setAnfme(0.0);
+                    wrkDetl.setAppeTime(now);
+                    wrkDetl.setModiTime(now);
+                    wrkMastLog.setAppeUser(getUserId());
+                    wrkMastLog.setModiUser(getUserId());
+                    if (!wrkDetlLogService.insert(wrkDetl)) {
+                        throw new CoolException("淇濆瓨宸ヤ綔鏄庣粏澶辫触");
+                    }
                 }
                 if (!locDetlService.delete(new EntityWrapper<LocDetl>().eq("loc_no", locMast.getLocNo()))) {
                     throw new CoolException("鏈嶅姟鍣ㄩ敊璇紝璇疯仈绯荤鐞嗗憳");
diff --git a/src/main/java/com/zy/asrs/controller/WrkMastLogController.java b/src/main/java/com/zy/asrs/controller/WrkMastLogController.java
index 7e0bec4..c16a7c2 100644
--- a/src/main/java/com/zy/asrs/controller/WrkMastLogController.java
+++ b/src/main/java/com/zy/asrs/controller/WrkMastLogController.java
@@ -56,6 +56,29 @@
         return R.ok(wrkMastLogService.selectPage(new Page<>(curr, limit), wrapper));
     }
 
+    @RequestMapping(value = "/inventoryFlow/list/auth")
+    @ManagerAuth(memo = "搴撳瓨绉诲姩娴佹按璁板綍")
+    public R inventoryFlowList(@RequestParam(defaultValue = "1")Integer curr,
+                  @RequestParam(defaultValue = "10")Integer limit,
+                  @RequestParam(required = false)String orderByField,
+                  @RequestParam(required = false)String orderByType,
+                  @RequestParam(required = false)String condition,
+                  @RequestParam Map<String, Object> param){
+        excludeTrash(param);
+        if (Cools.isEmpty(param.get("io_time"))) {
+            param.put("startTime","");
+            param.put("endTime","");
+        } else {
+            String ioTime = (String) param.get("io_time");
+            if (ioTime.contains(RANGE_TIME_LINK)){
+                String[] dates = ioTime.split(RANGE_TIME_LINK);
+                param.put("startTime",dates[0]);
+                param.put("endTime",dates[1]);
+            }
+        }
+        return wrkMastLogService.inventoryFlowList(curr,limit,param);
+    }
+
     private <T> void convert(Map<String, Object> map, EntityWrapper<T> wrapper){
         for (Map.Entry<String, Object> entry : map.entrySet()){
             String val = String.valueOf(entry.getValue());
diff --git a/src/main/java/com/zy/asrs/entity/InventoryFlowDto.java b/src/main/java/com/zy/asrs/entity/InventoryFlowDto.java
new file mode 100644
index 0000000..1324500
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/InventoryFlowDto.java
@@ -0,0 +1,97 @@
+package com.zy.asrs.entity;
+
+import com.core.common.Cools;
+import com.core.common.SpringUtils;
+import com.zy.asrs.service.BasWrkIotypeService;
+import com.zy.asrs.service.BasWrkStatusService;
+import com.zy.asrs.service.LocMastService;
+import com.zy.system.entity.User;
+import com.zy.system.service.UserService;
+import lombok.Data;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+/**
+ * @author pang.jiabao
+ * @description 搴撳瓨绉诲姩娴佹按dto
+ * @createDate 2025/1/3 13:59
+ */
+@Data
+public class InventoryFlowDto {
+
+    private Integer wrkNo;
+    private Date ioTime;
+    private Integer ioType;
+    private Integer wrkSts;
+    private String sourceLocNo;
+    private String locNo;
+    private String orderNo;
+    private String matnr;
+    private String maktx;
+    private String batch;
+    private Double anfme;
+    private String zpallet;
+    private Long modiUser;
+    private Date modiTime;
+
+    public String getIoType$() {
+        BasWrkIotypeService service = SpringUtils.getBean(BasWrkIotypeService.class);
+        BasWrkIotype basWrkIotype = service.selectById(this.ioType);
+        if (!Cools.isEmpty(basWrkIotype)) {
+            return String.valueOf(basWrkIotype.getIoDesc());
+        }
+        return null;
+    }
+
+    public String getWrkSts$() {
+        BasWrkStatusService service = SpringUtils.getBean(BasWrkStatusService.class);
+        BasWrkStatus basWrkStatus = service.selectById(this.wrkSts);
+        if (!Cools.isEmpty(basWrkStatus)) {
+            return String.valueOf(basWrkStatus.getWrkDesc());
+        }
+        return null;
+    }
+
+    public String getLocNo$() {
+        LocMastService service = SpringUtils.getBean(LocMastService.class);
+        LocMast locMast = service.selectById(this.locNo);
+        if (!Cools.isEmpty(locMast)) {
+            return String.valueOf(locMast.getLocNo());
+        }
+        return null;
+    }
+
+    public String getSourceLocNo$() {
+        LocMastService service = SpringUtils.getBean(LocMastService.class);
+        LocMast locMast = service.selectById(this.sourceLocNo);
+        if (!Cools.isEmpty(locMast)) {
+            return String.valueOf(locMast.getLocNo());
+        }
+        return null;
+    }
+
+    public String getIoTime$() {
+        if (Cools.isEmpty(this.ioTime)) {
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.ioTime);
+    }
+
+    public String getModiTime$() {
+        if (Cools.isEmpty(this.modiTime)) {
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.modiTime);
+    }
+
+    public String getModiUser$() {
+        UserService service = SpringUtils.getBean(UserService.class);
+        User user = service.selectById(this.modiUser);
+        if (!Cools.isEmpty(user)) {
+            return String.valueOf(user.getUsername());
+        }
+        return null;
+    }
+
+}
diff --git a/src/main/java/com/zy/asrs/entity/WrkDetlLog.java b/src/main/java/com/zy/asrs/entity/WrkDetlLog.java
index 62943b2..6fa1590 100644
--- a/src/main/java/com/zy/asrs/entity/WrkDetlLog.java
+++ b/src/main/java/com/zy/asrs/entity/WrkDetlLog.java
@@ -4,6 +4,7 @@
 import com.baomidou.mybatisplus.annotations.TableName;
 import com.core.common.Cools;
 import com.core.common.SpringUtils;
+import com.zy.common.utils.Synchro;
 import com.zy.system.entity.User;
 import com.zy.system.service.UserService;
 import io.swagger.annotations.ApiModelProperty;
@@ -397,5 +398,7 @@
         return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.appeTime);
     }
 
-
+    public void sync(Object source) {
+        Synchro.Copy(source, this);
+    }
 }
diff --git a/src/main/java/com/zy/asrs/mapper/WrkMastLogMapper.java b/src/main/java/com/zy/asrs/mapper/WrkMastLogMapper.java
index c229b41..27eaca7 100644
--- a/src/main/java/com/zy/asrs/mapper/WrkMastLogMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/WrkMastLogMapper.java
@@ -1,10 +1,15 @@
 package com.zy.asrs.mapper;
 
 import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.zy.asrs.entity.InventoryFlowDto;
 import com.zy.asrs.entity.WrkMastLog;
 import org.apache.ibatis.annotations.Insert;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Map;
 
 @Mapper
 @Repository
@@ -13,4 +18,13 @@
     @Insert("insert into asr_wrk_mast_log select * from asr_wrk_mast where wrk_no=#{workNo}")
     int save(Integer workNo);
 
+    /**
+     * 鏌ヨ搴撳瓨绉诲姩娴佹按璁板綍
+     */
+    List<InventoryFlowDto> inventoryFlowList(@Param("curr") Integer curr,@Param("limit") Integer limit, @Param("param") Map<String, Object> param);
+
+    /**
+     * 缁熻搴撳瓨绉诲姩娴佹按璁板綍鏁�
+     */
+    int inventoryFlowListCount(@Param("param") Map<String, Object> param);
 }
diff --git a/src/main/java/com/zy/asrs/service/WrkMastLogService.java b/src/main/java/com/zy/asrs/service/WrkMastLogService.java
index 78ea016..24eaef0 100644
--- a/src/main/java/com/zy/asrs/service/WrkMastLogService.java
+++ b/src/main/java/com/zy/asrs/service/WrkMastLogService.java
@@ -1,10 +1,17 @@
 package com.zy.asrs.service;
 
 import com.baomidou.mybatisplus.service.IService;
+import com.core.common.R;
 import com.zy.asrs.entity.WrkMastLog;
+
+import java.util.Map;
 
 public interface WrkMastLogService extends IService<WrkMastLog> {
 
     boolean save(Integer workNo);
 
+    /**
+     * 鏌ヨ搴撳瓨绉诲姩娴佹按璁板綍
+     */
+    R inventoryFlowList(Integer curr, Integer limit, Map<String, Object> param);
 }
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 64d70f8..7d91a2d 100644
--- a/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -852,6 +852,31 @@
 
         List<LocDetlAdjustParam.LocDetlAdjust> list = param.getList();
 
+        // 娣诲姞鍘嗗彶宸ヤ綔涓绘。
+        WrkMastLog wrkMast = new WrkMastLog();
+        wrkMast.setIoTime(now);
+        wrkMast.setWrkSts(5);
+        wrkMast.setIoPri(13D); // 浼樺厛绾�
+        wrkMast.setCrnNo(locMast.getCrnNo());
+        wrkMast.setSourceLocNo(locMast.getLocNo());
+        wrkMast.setLocNo(locMast.getLocNo());
+        wrkMast.setBarcode(locMast.getBarcode()); // 鎵樼洏鐮�
+        wrkMast.setFullPlt("Y"); // 婊℃澘锛歒
+        wrkMast.setPicking("N"); // 鎷f枡
+        wrkMast.setExitMk("N"); // 閫�鍑�
+        wrkMast.setEmptyMk("N"); // 绌烘澘
+        wrkMast.setLinkMis("Y");
+        // 鎿嶄綔浜哄憳鏁版嵁
+        wrkMast.setAppeTime(now);
+        wrkMast.setModiTime(now);
+        wrkMast.setAppeUser(userId);
+        wrkMast.setModiUser(userId);
+
+        // 澧炲垹鏀瑰彧鍒涘缓涓�娆″伐浣滀富妗�
+        boolean updateFlag = true;
+        boolean deleteFlag = true;
+        boolean addFlag = true;
+
         // 淇敼鏁伴噺
         Iterator<LocDetl> iterator = locDetls.iterator();
         while (iterator.hasNext()) {
@@ -881,6 +906,30 @@
                         adjDetl.setAppeTime(now);
                         adjDetl.setAppeUser(userId);
                         adjDetlService.save(adjDetl, userId);
+
+                        if (updateFlag) {
+                            wrkMast.setWrkNo(commonService.getWorkNo(3));
+                            wrkMast.setIoType(23);
+                            boolean res = wrkMastLogService.insert(wrkMast);
+                            if (!res) {
+                                throw new CoolException("搴撳瓨璋冩暣-淇敼 淇濆瓨宸ヤ綔妗eけ璐�");
+                            }
+                            updateFlag = false;
+                        }
+
+                        // 娣诲姞鍘嗗彶宸ヤ綔鏄庣粏
+                        WrkDetlLog wrkDetl = new WrkDetlLog();
+                        wrkDetl.sync(locDetl);
+                        wrkDetl.setWrkNo(wrkMast.getWrkNo());
+                        wrkDetl.setIoTime(wrkMast.getIoTime());
+                        wrkDetl.setAnfme(adjust.getCount());
+                        wrkDetl.setAppeTime(now);
+                        wrkDetl.setModiTime(now);
+                        wrkMast.setAppeUser(userId);
+                        wrkMast.setModiUser(userId);
+                        if (!wrkDetlLogService.insert(wrkDetl)) {
+                            throw new CoolException("淇濆瓨宸ヤ綔鏄庣粏澶辫触");
+                        }
                     }
                     iterator.remove();
                     iterator1.remove();
@@ -907,6 +956,30 @@
             adjDetl.setAppeTime(now);
             adjDetl.setAppeUser(userId);
             adjDetlService.save(adjDetl, userId);
+
+            if (deleteFlag) {
+                wrkMast.setWrkNo(commonService.getWorkNo(3));
+                wrkMast.setIoType(22);
+                boolean res = wrkMastLogService.insert(wrkMast);
+                if (!res) {
+                    throw new CoolException("搴撳瓨璋冩暣-鍒犻櫎 淇濆瓨宸ヤ綔妗eけ璐�");
+                }
+                deleteFlag = false;
+            }
+
+            // 娣诲姞鍘嗗彶宸ヤ綔鏄庣粏
+            WrkDetlLog wrkDetl = new WrkDetlLog();
+            wrkDetl.sync(locDetl);
+            wrkDetl.setWrkNo(wrkMast.getWrkNo());
+            wrkDetl.setIoTime(wrkMast.getIoTime());
+            wrkDetl.setAnfme(0.0);
+            wrkDetl.setAppeTime(now);
+            wrkDetl.setModiTime(now);
+            wrkMast.setAppeUser(userId);
+            wrkMast.setModiUser(userId);
+            if (!wrkDetlLogService.insert(wrkDetl)) {
+                throw new CoolException("淇濆瓨宸ヤ綔鏄庣粏澶辫触");
+            }
         }
 
         // 娣诲姞搴撳瓨
@@ -917,6 +990,7 @@
             locDetl.sync(mat);
             locDetl.setBatch(adjust.getBatch());
             locDetl.setLocNo(locMast.getLocNo());
+            locDetl.setZpallet(locMast.getBarcode());
             locDetl.setAnfme(adjust.getCount()); // 鏁伴噺
             locDetl.setModiUser(userId); // 鎿嶄綔浜哄憳淇℃伅
             locDetl.setModiTime(now);
@@ -937,6 +1011,30 @@
             adjDetl.setAppeTime(now);
             adjDetl.setAppeUser(userId);
             adjDetlService.save(adjDetl, userId);
+
+            if (addFlag) {
+                wrkMast.setWrkNo(commonService.getWorkNo(3));
+                wrkMast.setIoType(21);
+                boolean res = wrkMastLogService.insert(wrkMast);
+                if (!res) {
+                    throw new CoolException("搴撳瓨璋冩暣-鏂板 淇濆瓨宸ヤ綔妗eけ璐�");
+                }
+                addFlag = false;
+            }
+
+            // 娣诲姞鍘嗗彶宸ヤ綔鏄庣粏
+            WrkDetlLog wrkDetl = new WrkDetlLog();
+            wrkDetl.sync(locDetl);
+            wrkDetl.setWrkNo(wrkMast.getWrkNo());
+            wrkDetl.setIoTime(wrkMast.getIoTime());
+            wrkDetl.setAnfme(adjust.getCount());
+            wrkDetl.setAppeTime(now);
+            wrkDetl.setModiTime(now);
+            wrkMast.setAppeUser(userId);
+            wrkMast.setModiUser(userId);
+            if (!wrkDetlLogService.insert(wrkDetl)) {
+                throw new CoolException("淇濆瓨宸ヤ綔鏄庣粏澶辫触");
+            }
         }
         // 淇敼搴撲綅鐘舵��
         int count = locDetlService.selectCount(new EntityWrapper<LocDetl>().eq("loc_no", locMast.getLocNo()));
diff --git a/src/main/java/com/zy/asrs/service/impl/WrkMastLogServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/WrkMastLogServiceImpl.java
index bd51e68..149724b 100644
--- a/src/main/java/com/zy/asrs/service/impl/WrkMastLogServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/WrkMastLogServiceImpl.java
@@ -1,10 +1,15 @@
 package com.zy.asrs.service.impl;
 
+import com.baomidou.mybatisplus.plugins.Page;
 import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.core.common.R;
+import com.zy.asrs.entity.InventoryFlowDto;
 import com.zy.asrs.entity.WrkMastLog;
 import com.zy.asrs.mapper.WrkMastLogMapper;
 import com.zy.asrs.service.WrkMastLogService;
 import org.springframework.stereotype.Service;
+
+import java.util.Map;
 
 @Service("wrkMastLogService")
 public class WrkMastLogServiceImpl extends ServiceImpl<WrkMastLogMapper, WrkMastLog> implements WrkMastLogService {
@@ -14,4 +19,14 @@
         return this.baseMapper.save(workNo) > 0;
     }
 
+    @Override
+    public R inventoryFlowList(Integer curr, Integer limit, Map<String, Object> param) {
+        Page<InventoryFlowDto> page = new Page<>();
+        page.setCurrent(curr);
+        page.setSize(limit);
+        page.setTotal(this.baseMapper.inventoryFlowListCount(param));
+        page.setRecords(this.baseMapper.inventoryFlowList(curr, limit, param));
+        return R.ok(page);
+    }
+
 }
diff --git a/src/main/resources/mapper/WrkMastLogMapper.xml b/src/main/resources/mapper/WrkMastLogMapper.xml
index cbe6570..8086afb 100644
--- a/src/main/resources/mapper/WrkMastLogMapper.xml
+++ b/src/main/resources/mapper/WrkMastLogMapper.xml
@@ -62,5 +62,60 @@
         <result column="pre_have" property="preHave" />
         <result column="take_none" property="takeNone" />
     </resultMap>
+    <sql id="queryWhere">
+        <where>
+            <if test="param.wrk_no != null and param.wrk_no != ''"> and a.wrk_no = #{param.wrk_no}</if>
+            <if test="param.io_type != null and param.io_type != ''"> and a.io_type = #{param.io_type}</if>
+            <if test="param.matnr != null and param.matnr != ''"> and b.matnr = #{param.matnr}</if>
+            <if test="param.maktx != null and  param.maktx != ''"> and b.maktx = #{param.maktx}</if>
+            <if test="param.batch != null and  param.batch != ''"> and b.batch = #{param.batch}</if>
+            <if test="param.zpallet != null and param.zpallet != ''"> and a.barcode = #{param.zpallet}</if>
+            <if test="param.loc_no != null and param.loc_no != ''"> and (a.loc_no = #{param.loc_no} or a.source_loc_no = #{param.loc_no})</if>
+            <if test="param.startTime != null and param.startTime != ''"> and a.io_time >= #{param.startTime}</if>
+            <if test="param.endTime   != null and param.endTime   != ''"> and a.io_time &lt;= #{param.endTime}</if>
+        </where>
+    </sql>
+    <select id="inventoryFlowList" resultType="com.zy.asrs.entity.InventoryFlowDto">
+        select
+            *
+        from
+            (
+                select
+                    ROW_NUMBER() over (order by a.modi_time desc) id,
+                    a.wrk_no wrkNo,
+                    a.io_type ioType,
+                    a.io_time ioTime,
+                    a.wrk_sts wrkSts,
+                    a.source_loc_no sourceLocNo,
+                    a.loc_no locNo,
+                    a.barcode zpallet,
+                    b.matnr ,
+                    b.maktx ,
+                    b.order_no orderNo,
+                    b.batch ,
+                    b.anfme ,
+                    b.modi_time modiTime,
+                    b.modi_user modiUser
+                from
+                    asr_wrk_mast_log a
+                        inner join asr_wrk_detl_log b on
+                                a.wrk_no = b.wrk_no
+                            and a.io_time = b.io_time
+                            and a.wrk_sts in(5, 15)
+                            <include refid="queryWhere"></include>
+            ) c
+        where
+            c.id BETWEEN (#{curr} - 1) * (#{limit} + 1) and #{curr} * #{limit}
+    </select>
+    <select id="inventoryFlowListCount" resultType="java.lang.Integer">
+        select count(*)
+        from
+        asr_wrk_mast_log a
+        inner join asr_wrk_detl_log b on
+        a.wrk_no = b.wrk_no
+        and a.io_time = b.io_time
+        and a.wrk_sts in(5, 15)
+        <include refid="queryWhere"></include>
+    </select>
 
 </mapper>
diff --git a/src/main/resources/mapper/WrkMastMapper.xml b/src/main/resources/mapper/WrkMastMapper.xml
index b99fd2d..83c4cce 100644
--- a/src/main/resources/mapper/WrkMastMapper.xml
+++ b/src/main/resources/mapper/WrkMastMapper.xml
@@ -70,7 +70,7 @@
         select * from asr_wrk_mast
         where wrk_sts=5
         or (wrk_sts=15 and ove_mk='Y' and wrk_no not in (select wrk_no from asr_bas_devp))
-        or (wrk_sts=15 and dateadd(mi,15,crn_end_time) &lt;= getdate() and wrk_no not in (select wrk_no from asr_bas_devp))
+        or (wrk_sts=15 and dateadd(mi,3,crn_end_time) &lt;= getdate() and wrk_no not in (select wrk_no from asr_bas_devp))
         or (wrk_sts=15 and crn_end_time is null and wrk_no not in (select wrk_no from asr_bas_devp))
         order by io_time,wrk_no asc
     </select>
diff --git a/src/main/webapp/static/js/common.js b/src/main/webapp/static/js/common.js
index 555ddf6..90a240f 100644
--- a/src/main/webapp/static/js/common.js
+++ b/src/main/webapp/static/js/common.js
@@ -255,7 +255,7 @@
     ,{field: 'source$', align: 'center',title: '鍒惰喘', hide: true}
     ,{field: 'check$', align: 'center',title: '瑕佹眰妫�楠�', hide: true}
     ,{field: 'danger$', align: 'center',title: '鍗遍櫓鍝�', hide: true}
-    ,{field: 'frozen$', align: 'center',title: '鍐荤粨鍚�',
+    ,{field: 'frozen$', align: 'center',title: '鍐荤粨鍚�',hide: true,
         templet: function(d) {
             // 鏍规嵁鏉′欢鍒ゆ柇瀛椾綋棰滆壊
             if (d.frozen$ === '宸插喕缁�') {
diff --git a/src/main/webapp/static/js/inventoryFlow/inventoryFlow.js b/src/main/webapp/static/js/inventoryFlow/inventoryFlow.js
new file mode 100644
index 0000000..d14a330
--- /dev/null
+++ b/src/main/webapp/static/js/inventoryFlow/inventoryFlow.js
@@ -0,0 +1,204 @@
+var pageCurr;
+var wrkNo;
+var ioTime;
+layui.use(['table','laydate', 'form'], function(){
+    var table = layui.table;
+    var $ = layui.jquery;
+    var layer = layui.layer;
+    var layDate = layui.laydate;
+    var form = layui.form;
+
+    // 鏁版嵁娓叉煋
+    tableIns = table.render({
+        elem: '#wrkMastLog',
+        headers: {token: localStorage.getItem('token')},
+        url: baseUrl+'/inventoryFlow/list/auth',
+        page: true,
+        limit: 16,
+        limits: [16, 30, 50, 100, 200, 500],
+        even: true,
+        toolbar: '#toolbar',
+        cellMinWidth: 50,
+        cols: [[
+            {field: 'wrkNo', align: 'center',title: '宸ヤ綔鍙�', style: 'font-weight: bold',event: 'wrkNo'}
+            ,{field: 'ioTime$', align: 'center',title: '宸ヤ綔鏃堕棿', width:160}
+            ,{field: 'ioType$', align: 'center',title: '鍏ュ嚭搴撶被鍨�', width:160}
+            ,{field: 'wrkSts$', align: 'center',title: '宸ヤ綔鐘舵��', width:160}
+            ,{field: 'sourceLocNo$', align: 'center',title: '婧愬簱浣�'}
+            ,{field: 'locNo$', align: 'center',title: '鐩爣搴撲綅'}
+            ,{field: 'orderNo', align: 'center',title: '鍗曟嵁缂栧彿'}
+            ,{field: 'matnr', align: 'center',title: '鍟嗗搧缂栧彿'}
+            ,{field: 'maktx', align: 'center',title: '鍟嗗搧鍚嶇О'}
+            ,{field: 'batch', align: 'center',title: '鎵瑰彿'}
+            ,{field: 'anfme', align: 'center',title: '鏁伴噺'}
+            ,{field: 'zpallet', align: 'center',title: '鎵樼洏鏉$爜'}
+            ,{field: 'modiUser$', align: 'center',title: '淇敼浜哄憳'}
+            ,{field: 'modiTime$', align: 'center',title: '淇敼鏃堕棿'}
+        ]],
+        request: {
+            pageName: 'curr',
+            pageSize: 'limit'
+        },
+        parseData: function (res) {
+            return {
+                'code': res.code,
+                'msg': res.msg,
+                'count': res.data.total,
+                'data': res.data.records
+            }
+        },
+        response: {
+            statusCode: 200
+        },
+        done: function(res, curr, count) {
+            if (res.code === 403) {
+                top.location.href = baseUrl+"/";
+            }
+            pageCurr=curr;
+            limit();
+            form.on('checkbox(tableCheckbox)', function (data) {
+                var _index = $(data.elem).attr('table-index')||0;
+                if(data.elem.checked){
+                    res.data[_index][data.value] = 'Y';
+                }else{
+                    res.data[_index][data.value] = 'N';
+                }
+            });
+        }
+    });
+
+    // 鐩戝惉鎺掑簭浜嬩欢
+    table.on('sort(wrkMastLog)', function (obj) {
+        var searchData = {};
+        $.each($('#search-box [name]').serializeArray(), function() {
+            searchData[this.name] = this.value;
+        });
+        searchData['orderByField'] = obj.field;
+        searchData['orderByType'] = obj.type;
+        tableIns.reload({
+            where: searchData,
+            page: {
+                curr: 1
+            },
+            done: function (res, curr, count) {
+                if (res.code === 403) {
+                    top.location.href = baseUrl+"/";
+                }
+                pageCurr=curr;
+                limit();
+            }
+        });
+    });
+
+    // 鐩戝惉澶村伐鍏锋爮浜嬩欢
+    table.on('toolbar(wrkMastLog)', function (obj) {
+        var checkStatus = table.checkStatus(obj.config.id);
+        switch(obj.event) {
+            case 'exportData':
+                layer.confirm('纭畾瀵煎嚭Excel鍚�', {shadeClose: true}, function(){
+                    var titles=[];
+                    var fields=[];
+                    obj.config.cols[0].map(function (col) {
+                        if (col.type === 'normal' && col.hide === false && col.toolbar == null) {
+                            titles.push(col.title);
+                            fields.push(col.field);
+                        }
+                    });
+                    var exportData = {};
+                    $.each($('#search-box [name]').serializeArray(), function() {
+                        exportData[this.name] = this.value;
+                    });
+                    var param = {
+                        'wrkMastLog': exportData,
+                        'fields': fields
+                    };
+                    $.ajax({
+                        url: baseUrl+"/wrkMastLog/export/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: JSON.stringify(param),
+                        dataType:'json',
+                        contentType:'application/json;charset=UTF-8',
+                        method: 'POST',
+                        success: function (res) {
+                            layer.closeAll();
+                            if (res.code === 200) {
+                                table.exportFile(titles,res.data,'xls');
+                            } else if (res.code === 403) {
+                                top.location.href = baseUrl+"/";
+                            } else {
+                                layer.msg(res.msg)
+                            }
+                        }
+                    });
+                });
+                break;
+        }
+    });
+    // 鎼滅储鏍忔悳绱簨浠�
+    form.on('submit(search)', function (data) {
+        pageCurr = 1;
+        tableReload(false);
+    });
+
+    // 鎼滅储鏍忛噸缃簨浠�
+    form.on('submit(reset)', function (data) {
+        pageCurr = 1;
+        clearFormVal($('#search-box'));
+        tableReload(false);
+    });
+
+    // 鏃堕棿閫夋嫨鍣�
+    layDate.render({
+        elem: '.layui-laydate-range'
+        ,type: 'datetime'
+        ,range: true
+    });
+
+});
+
+// 鍏抽棴鍔ㄤ綔
+$(document).on('click','#data-detail-close', function () {
+    parent.layer.closeAll();
+});
+
+function tableReload(child) {
+    var searchData = {};
+    $.each($('#search-box [name]').serializeArray(), function() {
+        searchData[this.name] = this.value;
+    });
+    (child ? parent.tableIns : tableIns).reload({
+        where: searchData,
+        page: {
+            curr: pageCurr
+        },
+        done: function (res, curr, count) {
+            if (res.code === 403) {
+                top.location.href = baseUrl+"/";
+            }
+            pageCurr=curr;
+            if (res.data.length === 0 && count !== 0) {
+                tableIns.reload({
+                    where: searchData,
+                    page: {
+                        curr: pageCurr-1
+                    }
+                });
+                pageCurr -= 1;
+            }
+            limit(child);
+        }
+    });
+}
+
+function clearFormVal(el) {
+    $(':input', el)
+        .val('')
+        .removeAttr('checked')
+        .removeAttr('selected');
+}
+
+$('body').keydown(function () {
+    if (event.keyCode === 13) {
+        $("#search").click();
+    }
+});
diff --git a/src/main/webapp/views/inventoryFlow/inventoryFlow.html b/src/main/webapp/views/inventoryFlow/inventoryFlow.html
new file mode 100644
index 0000000..d8c705c
--- /dev/null
+++ b/src/main/webapp/views/inventoryFlow/inventoryFlow.html
@@ -0,0 +1,88 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title></title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+    <link rel="stylesheet" href="../../static/layui/css/layui.css" media="all">
+    <link rel="stylesheet" href="../../static/css/cool.css" media="all">
+    <link rel="stylesheet" href="../../static/css/common.css" media="all">
+</head>
+<body>
+<!-- 鎼滅储鏍� -->
+<div id="search-box" class="layui-form layui-card-header">
+    <div class="layui-inline">
+        <div class="layui-input-inline">
+            <input class="layui-input" type="text" name="wrk_no" placeholder="宸ヤ綔鍙�" autocomplete="off">
+        </div>
+    </div>
+    <div class="layui-inline">
+        <div class="layui-input-inline cool-auto-complete">
+            <input id="ioType" class="layui-input" name="io_type" type="text" placeholder="璇疯緭鍏�" autocomplete="off" style="display: none">
+            <input id="ioType$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="鍏ュ嚭搴撶被鍨�" onfocus=this.blur()>
+            <div class="cool-auto-complete-window">
+                <input class="cool-auto-complete-window-input" data-key="basWrkIotypeQueryByioType" onkeyup="autoLoad(this.getAttribute('data-key'))">
+                <select class="cool-auto-complete-window-select" data-key="basWrkIotypeQueryByioTypeSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
+                </select>
+            </div>
+        </div>
+    </div>
+    <div class="layui-inline">
+        <div class="layui-input-inline">
+            <input class="layui-input" type="text" name="matnr" placeholder="鍟嗗搧缂栧彿" autocomplete="off">
+        </div>
+    </div>
+    <div class="layui-inline">
+        <div class="layui-input-inline">
+            <input class="layui-input" type="text" name="maktx" placeholder="鍟嗗搧鍚嶇О" autocomplete="off">
+        </div>
+    </div>
+    <div class="layui-inline">
+        <div class="layui-input-inline">
+            <input class="layui-input" type="text" name="batch" placeholder="鎵规" autocomplete="off">
+        </div>
+    </div>
+    <div class="layui-inline">
+        <div class="layui-input-inline">
+            <input class="layui-input" type="text" name="zpallet" placeholder="鎵樼洏鐮�" autocomplete="off">
+        </div>
+    </div>
+    <div class="layui-inline">
+        <div class="layui-input-inline">
+            <input class="layui-input" type="text" name="loc_no" placeholder="搴撲綅鍙�" autocomplete="off">
+        </div>
+    </div>
+    <!-- 鏃ユ湡鑼冨洿 -->
+    <div class="layui-inline" style="width: 300px">
+        <div class="layui-input-inline">
+            <input class="layui-input layui-laydate-range" name="io_time" type="text" placeholder="璧峰鏃堕棿 - 缁堟鏃堕棿" autocomplete="off" style="width: 300px">
+        </div>
+    </div>
+<!--    <div class="layui-inline">-->
+<!--        <div class="layui-input-inline">-->
+<!--            <input class="layui-input" type="text" name="condition" placeholder="璇疯緭鍏�" autocomplete="off">-->
+<!--        </div>-->
+<!--    </div>-->
+
+    <!-- 寰呮坊鍔� -->
+    <div id="data-search-btn" class="layui-btn-container layui-form-item">
+        <button id="search" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="search">鎼滅储</button>
+        <button id="reset" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="reset">閲嶇疆</button>
+    </div>
+</div>
+
+<!-- 琛ㄦ牸 -->
+<div class="layui-form">
+    <table class="layui-hide" id="wrkMastLog" lay-filter="wrkMastLog"></table>
+</div>
+
+<script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script>
+<script type="text/javascript" src="../../static/layui/layui.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../static/js/common.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../static/js/cool.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../static/js/inventoryFlow/inventoryFlow.js" charset="utf-8"></script>
+</body>
+</html>
+
diff --git a/src/main/webapp/views/pakStore/locDetlQuery.html b/src/main/webapp/views/pakStore/locDetlQuery.html
index 5086410..51186ed 100644
--- a/src/main/webapp/views/pakStore/locDetlQuery.html
+++ b/src/main/webapp/views/pakStore/locDetlQuery.html
@@ -191,6 +191,28 @@
                         layer.msg("鍐荤粨鐨勫簱瀛樹笉鍏佽鍑哄簱锛�");
                         return;
                     }
+
+                    let locNos = [];
+                    data.forEach(function(elem) {
+                        locNos.push(elem.locNo);
+                    });
+                    $.ajax({
+                        url: baseUrl+"/locDetl/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: {locNos:locNos},
+                        method: 'POST',
+                        async: false,
+                        success: function (res) {
+                            if (res.code === 200) {
+                                data = res.data;
+                            } else if (res.code === 403) {
+                                top.location.href = baseUrl + "/";
+                            } else {
+                                layer.msg(res.msg)
+                            }
+                        }
+                    })
+
                     parent.addTableData(data);
                     break;
             }

--
Gitblit v1.9.1