From 0aaffcfa7077065bc29f543b80662824d8733e7d Mon Sep 17 00:00:00 2001
From: zhou zhou <3272660260@qq.com>
Date: 星期四, 18 十二月 2025 16:15:13 +0800
Subject: [PATCH] #库存预留
---
src/main/java/com/zy/asrs/mapper/InventoryReserveLogMapper.java | 12
src/main/java/com/zy/asrs/controller/InventoryReserveController.java | 135 +++++
src/main/java/com/zy/asrs/task/InventoryReserveScheduler.java | 36 +
src/main/java/com/zy/asrs/entity/InventoryReserve.java | 162 ++++++
src/main/java/com/zy/asrs/controller/InventoryReserveLogController.java | 125 +++++
src/main/java/com/zy/asrs/mapper/InventoryReserveMapper.java | 12
src/main/resources/mapper/InventoryReserveLogMapper.xml | 22
src/main/java/com/zy/common/CodeBuilder.java | 4
src/main/java/com/zy/asrs/service/InventoryReserveService.java | 8
src/main/webapp/views/inventoryReserve/inventoryReserve.html | 143 +++++
src/main/java/com/zy/asrs/service/InventoryReserveLogService.java | 8
src/main/java/com/zy/asrs/task/handler/InventoryReserveExpireHandler.java | 78 +++
src/main/java/com/zy/asrs/service/impl/InventoryReserveServiceImpl.java | 12
src/main/webapp/static/js/inventoryReserveLog/inventoryReserveLog.js | 87 +++
src/main/webapp/views/inventoryReserveLog/inventoryReserveLog.html | 71 ++
src/main/java/inventoryReserve.sql | 18
src/main/webapp/static/js/inventoryReserve/inventoryReserve.js | 257 ++++++++++
src/main/resources/mapper/InventoryReserveMapper.xml | 22
src/main/java/com/zy/asrs/service/impl/InventoryReserveLogServiceImpl.java | 12
src/main/java/com/zy/asrs/entity/InventoryReserveLog.java | 162 ++++++
src/main/java/inventoryReserveLog.sql | 18
21 files changed, 1,403 insertions(+), 1 deletions(-)
diff --git a/src/main/java/com/zy/asrs/controller/InventoryReserveController.java b/src/main/java/com/zy/asrs/controller/InventoryReserveController.java
new file mode 100644
index 0000000..eebe4f9
--- /dev/null
+++ b/src/main/java/com/zy/asrs/controller/InventoryReserveController.java
@@ -0,0 +1,135 @@
+package com.zy.asrs.controller;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
+import com.baomidou.mybatisplus.plugins.Page;
+import com.core.common.DateUtils;
+import com.zy.asrs.entity.InventoryReserve;
+import com.zy.asrs.service.InventoryReserveService;
+import com.core.annotations.ManagerAuth;
+import com.core.common.BaseRes;
+import com.core.common.Cools;
+import com.core.common.R;
+import com.zy.common.web.BaseController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.*;
+
+@RestController
+public class InventoryReserveController extends BaseController {
+
+ @Autowired
+ private InventoryReserveService inventoryReserveService;
+
+ @RequestMapping(value = "/inventoryReserve/{id}/auth")
+ @ManagerAuth
+ public R get(@PathVariable("id") String id) {
+ return R.ok(inventoryReserveService.selectById(String.valueOf(id)));
+ }
+
+ @RequestMapping(value = "/inventoryReserve/list/auth")
+ @ManagerAuth
+ public R list(@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){
+ EntityWrapper<InventoryReserve> wrapper = new EntityWrapper<>();
+ excludeTrash(param);
+ convert(param, wrapper);
+ allLike(InventoryReserve.class, param.keySet(), wrapper, condition);
+ if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));}
+ return R.ok(inventoryReserveService.selectPage(new Page<>(curr, limit), wrapper));
+ }
+
+ 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());
+ if (val.contains(RANGE_TIME_LINK)){
+ String[] dates = val.split(RANGE_TIME_LINK);
+ wrapper.ge(entry.getKey(), DateUtils.convert(dates[0]));
+ wrapper.le(entry.getKey(), DateUtils.convert(dates[1]));
+ } else {
+ wrapper.like(entry.getKey(), val);
+ }
+ }
+ }
+
+ @RequestMapping(value = "/inventoryReserve/add/auth")
+ @ManagerAuth
+ public R add(InventoryReserve inventoryReserve) {
+
+ Date date = new Date();
+ inventoryReserve.setId(null);
+ inventoryReserve.setCreateTime(date);
+ inventoryReserve.setCreateBy(getUserId());
+ inventoryReserve.setUpdateTime(date);
+ inventoryReserve.setUpdateBy(getUserId());
+ inventoryReserveService.insert(inventoryReserve);
+ return R.ok();
+ }
+
+ @RequestMapping(value = "/inventoryReserve/update/auth")
+ @ManagerAuth
+ public R update(InventoryReserve inventoryReserve){
+ if (Cools.isEmpty(inventoryReserve) || null==inventoryReserve.getId()){
+ return R.error();
+ }
+ Date date = new Date();
+ inventoryReserve.setUpdateTime(date);
+ inventoryReserve.setUpdateBy(getUserId());
+ inventoryReserveService.updateById(inventoryReserve);
+ return R.ok();
+ }
+
+ @RequestMapping(value = "/inventoryReserve/delete/auth")
+ @ManagerAuth
+ public R delete(@RequestParam(value="ids[]") Long[] ids){
+ for (Long id : ids){
+ inventoryReserveService.deleteById(id);
+ }
+ return R.ok();
+ }
+
+ @RequestMapping(value = "/inventoryReserve/export/auth")
+ @ManagerAuth
+ public R export(@RequestBody JSONObject param){
+ EntityWrapper<InventoryReserve> wrapper = new EntityWrapper<>();
+ List<String> fields = JSONObject.parseArray(param.getJSONArray("fields").toJSONString(), String.class);
+ Map<String, Object> map = excludeTrash(param.getJSONObject("inventoryReserve"));
+ convert(map, wrapper);
+ List<InventoryReserve> list = inventoryReserveService.selectList(wrapper);
+ return R.ok(exportSupport(list, fields));
+ }
+
+ @RequestMapping(value = "/inventoryReserveQuery/auth")
+ @ManagerAuth
+ public R query(String condition) {
+ EntityWrapper<InventoryReserve> wrapper = new EntityWrapper<>();
+ wrapper.like("id", condition);
+ Page<InventoryReserve> page = inventoryReserveService.selectPage(new Page<>(0, 10), wrapper);
+ List<Map<String, Object>> result = new ArrayList<>();
+ for (InventoryReserve inventoryReserve : page.getRecords()){
+ Map<String, Object> map = new HashMap<>();
+ map.put("id", inventoryReserve.getId());
+ map.put("value", inventoryReserve.getId());
+ result.add(map);
+ }
+ return R.ok(result);
+ }
+
+ @RequestMapping(value = "/inventoryReserve/check/column/auth")
+ @ManagerAuth
+ public R query(@RequestBody JSONObject param) {
+ Wrapper<InventoryReserve> wrapper = new EntityWrapper<InventoryReserve>().eq(humpToLine(String.valueOf(param.get("key"))), param.get("val"));
+ if (null != inventoryReserveService.selectOne(wrapper)){
+ return R.parse(BaseRes.REPEAT).add(getComment(InventoryReserve.class, String.valueOf(param.get("key"))));
+ }
+ return R.ok();
+ }
+
+}
diff --git a/src/main/java/com/zy/asrs/controller/InventoryReserveLogController.java b/src/main/java/com/zy/asrs/controller/InventoryReserveLogController.java
new file mode 100644
index 0000000..b68c6d8
--- /dev/null
+++ b/src/main/java/com/zy/asrs/controller/InventoryReserveLogController.java
@@ -0,0 +1,125 @@
+package com.zy.asrs.controller;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
+import com.baomidou.mybatisplus.plugins.Page;
+import com.core.common.DateUtils;
+import com.zy.asrs.entity.InventoryReserveLog;
+import com.zy.asrs.service.InventoryReserveLogService;
+import com.core.annotations.ManagerAuth;
+import com.core.common.BaseRes;
+import com.core.common.Cools;
+import com.core.common.R;
+import com.zy.common.web.BaseController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.*;
+
+@RestController
+public class InventoryReserveLogController extends BaseController {
+
+ @Autowired
+ private InventoryReserveLogService inventoryReserveLogService;
+
+ @RequestMapping(value = "/inventoryReserveLog/{id}/auth")
+ @ManagerAuth
+ public R get(@PathVariable("id") String id) {
+ return R.ok(inventoryReserveLogService.selectById(String.valueOf(id)));
+ }
+
+ @RequestMapping(value = "/inventoryReserveLog/list/auth")
+ @ManagerAuth
+ public R list(@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){
+ EntityWrapper<InventoryReserveLog> wrapper = new EntityWrapper<>();
+ excludeTrash(param);
+ convert(param, wrapper);
+ allLike(InventoryReserveLog.class, param.keySet(), wrapper, condition);
+ if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));}
+ return R.ok(inventoryReserveLogService.selectPage(new Page<>(curr, limit), wrapper));
+ }
+
+ 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());
+ if (val.contains(RANGE_TIME_LINK)){
+ String[] dates = val.split(RANGE_TIME_LINK);
+ wrapper.ge(entry.getKey(), DateUtils.convert(dates[0]));
+ wrapper.le(entry.getKey(), DateUtils.convert(dates[1]));
+ } else {
+ wrapper.like(entry.getKey(), val);
+ }
+ }
+ }
+
+ @RequestMapping(value = "/inventoryReserveLog/add/auth")
+ @ManagerAuth
+ public R add(InventoryReserveLog inventoryReserveLog) {
+ inventoryReserveLogService.insert(inventoryReserveLog);
+ return R.ok();
+ }
+
+ @RequestMapping(value = "/inventoryReserveLog/update/auth")
+ @ManagerAuth
+ public R update(InventoryReserveLog inventoryReserveLog){
+ if (Cools.isEmpty(inventoryReserveLog) || null==inventoryReserveLog.getId()){
+ return R.error();
+ }
+ inventoryReserveLogService.updateById(inventoryReserveLog);
+ return R.ok();
+ }
+
+ @RequestMapping(value = "/inventoryReserveLog/delete/auth")
+ @ManagerAuth
+ public R delete(@RequestParam(value="ids[]") Long[] ids){
+ for (Long id : ids){
+ inventoryReserveLogService.deleteById(id);
+ }
+ return R.ok();
+ }
+
+ @RequestMapping(value = "/inventoryReserveLog/export/auth")
+ @ManagerAuth
+ public R export(@RequestBody JSONObject param){
+ EntityWrapper<InventoryReserveLog> wrapper = new EntityWrapper<>();
+ List<String> fields = JSONObject.parseArray(param.getJSONArray("fields").toJSONString(), String.class);
+ Map<String, Object> map = excludeTrash(param.getJSONObject("inventoryReserveLog"));
+ convert(map, wrapper);
+ List<InventoryReserveLog> list = inventoryReserveLogService.selectList(wrapper);
+ return R.ok(exportSupport(list, fields));
+ }
+
+ @RequestMapping(value = "/inventoryReserveLogQuery/auth")
+ @ManagerAuth
+ public R query(String condition) {
+ EntityWrapper<InventoryReserveLog> wrapper = new EntityWrapper<>();
+ wrapper.like("id", condition);
+ Page<InventoryReserveLog> page = inventoryReserveLogService.selectPage(new Page<>(0, 10), wrapper);
+ List<Map<String, Object>> result = new ArrayList<>();
+ for (InventoryReserveLog inventoryReserveLog : page.getRecords()){
+ Map<String, Object> map = new HashMap<>();
+ map.put("id", inventoryReserveLog.getId());
+ map.put("value", inventoryReserveLog.getId());
+ result.add(map);
+ }
+ return R.ok(result);
+ }
+
+ @RequestMapping(value = "/inventoryReserveLog/check/column/auth")
+ @ManagerAuth
+ public R query(@RequestBody JSONObject param) {
+ Wrapper<InventoryReserveLog> wrapper = new EntityWrapper<InventoryReserveLog>().eq(humpToLine(String.valueOf(param.get("key"))), param.get("val"));
+ if (null != inventoryReserveLogService.selectOne(wrapper)){
+ return R.parse(BaseRes.REPEAT).add(getComment(InventoryReserveLog.class, String.valueOf(param.get("key"))));
+ }
+ return R.ok();
+ }
+
+}
diff --git a/src/main/java/com/zy/asrs/entity/InventoryReserve.java b/src/main/java/com/zy/asrs/entity/InventoryReserve.java
new file mode 100644
index 0000000..1fe0007
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/InventoryReserve.java
@@ -0,0 +1,162 @@
+package com.zy.asrs.entity;
+
+import com.core.common.Cools;import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.enums.IdType;
+import com.baomidou.mybatisplus.annotations.TableField;
+
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import com.baomidou.mybatisplus.annotations.TableName;
+import java.io.Serializable;
+
+@Data
+@TableName("man_inventory_reserve")
+public class InventoryReserve implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * ID
+ */
+ @ApiModelProperty(value= "ID")
+ @TableId(value = "id", type = IdType.AUTO)
+ private Long id;
+
+ /**
+ * 鐗╂枡缂栫爜
+ */
+ @ApiModelProperty(value= "鐗╂枡缂栫爜")
+ private String matnr;
+
+ /**
+ * 鐗╂枡鍚嶇О
+ */
+ @ApiModelProperty(value= "鐗╂枡鍚嶇О")
+ private String maktx;
+
+ /**
+ * 璁㈠崟鍙�
+ */
+ @ApiModelProperty(value= "璁㈠崟鍙�")
+ @TableField("order_no")
+ private String orderNo;
+
+ /**
+ * 鎵规
+ */
+ @ApiModelProperty(value= "鎵规")
+ private String batch;
+
+ /**
+ * 鏁伴噺
+ */
+ @ApiModelProperty(value= "鏁伴噺")
+ private BigDecimal quantity;
+
+ /**
+ * 杩囨湡鏃堕棿
+ */
+ @ApiModelProperty(value= "杩囨湡鏃堕棿")
+ @TableField("expice_time")
+ @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+ private Date expiceTime;
+
+ /**
+ * 閮ㄩ棬ID
+ */
+ @ApiModelProperty(value= "閮ㄩ棬ID")
+ @TableField("dept_id")
+ private Long deptId;
+
+ /**
+ * 鍒涘缓鏃堕棿
+ */
+ @ApiModelProperty(value= "鍒涘缓鏃堕棿")
+ @TableField("create_time")
+ @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+ private Date createTime;
+
+ /**
+ * 鍒涘缓浜哄憳
+ */
+ @ApiModelProperty(value= "鍒涘缓浜哄憳")
+ @TableField("create_by")
+ private Long createBy;
+
+ /**
+ * 鏇存柊鏃堕棿
+ */
+ @ApiModelProperty(value= "鏇存柊鏃堕棿")
+ @TableField("update_time")
+ @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+ private Date updateTime;
+
+ /**
+ * 鏇存柊浜哄憳
+ */
+ @ApiModelProperty(value= "鏇存柊浜哄憳")
+ @TableField("update_by")
+ private Long updateBy;
+
+ public InventoryReserve() {}
+
+ public InventoryReserve(String matnr,String maktx,String orderNo,String batch,BigDecimal quantity,Date expiceTime,Long deptId,Date createTime,Long createBy,Date updateTime,Long updateBy) {
+ this.matnr = matnr;
+ this.maktx = maktx;
+ this.orderNo = orderNo;
+ this.batch = batch;
+ this.quantity = quantity;
+ this.expiceTime = expiceTime;
+ this.deptId = deptId;
+ this.createTime = createTime;
+ this.createBy = createBy;
+ this.updateTime = updateTime;
+ this.updateBy = updateBy;
+ }
+
+// InventoryReserve inventoryReserve = new InventoryReserve(
+// null, // 鐗╂枡缂栫爜
+// null, // 鐗╂枡鍚嶇О
+// null, // 璁㈠崟鍙�
+// null, // 鎵规
+// null, // 鏁伴噺
+// null, // 杩囨湡鏃堕棿
+// null, // 閮ㄩ棬ID
+// null, // 鍒涘缓鏃堕棿
+// null, // 鍒涘缓浜哄憳
+// null, // 鏇存柊鏃堕棿
+// null // 鏇存柊浜哄憳
+// );
+
+ public String getExpiceTime$(){
+ if (Cools.isEmpty(this.expiceTime)){
+ return "";
+ }
+ return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.expiceTime);
+ }
+
+ public String getCreateTime$(){
+ if (Cools.isEmpty(this.createTime)){
+ return "";
+ }
+ return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.createTime);
+ }
+
+ public String getUpdateTime$(){
+ if (Cools.isEmpty(this.updateTime)){
+ return "";
+ }
+ return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.updateTime);
+ }
+
+
+}
diff --git a/src/main/java/com/zy/asrs/entity/InventoryReserveLog.java b/src/main/java/com/zy/asrs/entity/InventoryReserveLog.java
new file mode 100644
index 0000000..9957dc1
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/InventoryReserveLog.java
@@ -0,0 +1,162 @@
+package com.zy.asrs.entity;
+
+import com.core.common.Cools;import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.enums.IdType;
+import com.baomidou.mybatisplus.annotations.TableField;
+
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import com.baomidou.mybatisplus.annotations.TableName;
+import java.io.Serializable;
+
+@Data
+@TableName("man_inventory_reserve_log")
+public class InventoryReserveLog implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * ID
+ */
+ @ApiModelProperty(value= "ID")
+ @TableId(value = "id", type = IdType.AUTO)
+ private Long id;
+
+ /**
+ * 鐗╂枡缂栫爜
+ */
+ @ApiModelProperty(value= "鐗╂枡缂栫爜")
+ private String matnr;
+
+ /**
+ * 鐗╂枡鍚嶇О
+ */
+ @ApiModelProperty(value= "鐗╂枡鍚嶇О")
+ private String maktx;
+
+ /**
+ * 璁㈠崟鍙�
+ */
+ @ApiModelProperty(value= "璁㈠崟鍙�")
+ @TableField("order_no")
+ private String orderNo;
+
+ /**
+ * 鎵规
+ */
+ @ApiModelProperty(value= "鎵规")
+ private String batch;
+
+ /**
+ * 鏁伴噺
+ */
+ @ApiModelProperty(value= "鏁伴噺")
+ private BigDecimal quantity;
+
+ /**
+ * 杩囨湡鏃堕棿
+ */
+ @ApiModelProperty(value= "杩囨湡鏃堕棿")
+ @TableField("expice_time")
+ @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+ private Date expiceTime;
+
+ /**
+ * 閮ㄩ棬ID
+ */
+ @ApiModelProperty(value= "閮ㄩ棬ID")
+ @TableField("dept_id")
+ private Long deptId;
+
+ /**
+ * 鍒涘缓鏃堕棿
+ */
+ @ApiModelProperty(value= "鍒涘缓鏃堕棿")
+ @TableField("create_time")
+ @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+ private Date createTime;
+
+ /**
+ * 鍒涘缓浜哄憳
+ */
+ @ApiModelProperty(value= "鍒涘缓浜哄憳")
+ @TableField("create_by")
+ private Long createBy;
+
+ /**
+ * 鏇存柊鏃堕棿
+ */
+ @ApiModelProperty(value= "鏇存柊鏃堕棿")
+ @TableField("update_time")
+ @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+ private Date updateTime;
+
+ /**
+ * 鏇存柊浜哄憳
+ */
+ @ApiModelProperty(value= "鏇存柊浜哄憳")
+ @TableField("update_by")
+ private Long updateBy;
+
+ public InventoryReserveLog() {}
+
+ public InventoryReserveLog(String matnr,String maktx,String orderNo,String batch,BigDecimal quantity,Date expiceTime,Long deptId,Date createTime,Long createBy,Date updateTime,Long updateBy) {
+ this.matnr = matnr;
+ this.maktx = maktx;
+ this.orderNo = orderNo;
+ this.batch = batch;
+ this.quantity = quantity;
+ this.expiceTime = expiceTime;
+ this.deptId = deptId;
+ this.createTime = createTime;
+ this.createBy = createBy;
+ this.updateTime = updateTime;
+ this.updateBy = updateBy;
+ }
+
+// InventoryReserveLog inventoryReserveLog = new InventoryReserveLog(
+// null, // 鐗╂枡缂栫爜
+// null, // 鐗╂枡鍚嶇О
+// null, // 璁㈠崟鍙�
+// null, // 鎵规
+// null, // 鏁伴噺
+// null, // 杩囨湡鏃堕棿
+// null, // 閮ㄩ棬ID
+// null, // 鍒涘缓鏃堕棿
+// null, // 鍒涘缓浜哄憳
+// null, // 鏇存柊鏃堕棿
+// null // 鏇存柊浜哄憳
+// );
+
+ public String getExpiceTime$(){
+ if (Cools.isEmpty(this.expiceTime)){
+ return "";
+ }
+ return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.expiceTime);
+ }
+
+ public String getCreateTime$(){
+ if (Cools.isEmpty(this.createTime)){
+ return "";
+ }
+ return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.createTime);
+ }
+
+ public String getUpdateTime$(){
+ if (Cools.isEmpty(this.updateTime)){
+ return "";
+ }
+ return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.updateTime);
+ }
+
+
+}
diff --git a/src/main/java/com/zy/asrs/mapper/InventoryReserveLogMapper.java b/src/main/java/com/zy/asrs/mapper/InventoryReserveLogMapper.java
new file mode 100644
index 0000000..c910d8f
--- /dev/null
+++ b/src/main/java/com/zy/asrs/mapper/InventoryReserveLogMapper.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.mapper;
+
+import com.zy.asrs.entity.InventoryReserveLog;
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+@Mapper
+@Repository
+public interface InventoryReserveLogMapper extends BaseMapper<InventoryReserveLog> {
+
+}
diff --git a/src/main/java/com/zy/asrs/mapper/InventoryReserveMapper.java b/src/main/java/com/zy/asrs/mapper/InventoryReserveMapper.java
new file mode 100644
index 0000000..22a80ca
--- /dev/null
+++ b/src/main/java/com/zy/asrs/mapper/InventoryReserveMapper.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.mapper;
+
+import com.zy.asrs.entity.InventoryReserve;
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+@Mapper
+@Repository
+public interface InventoryReserveMapper extends BaseMapper<InventoryReserve> {
+
+}
diff --git a/src/main/java/com/zy/asrs/service/InventoryReserveLogService.java b/src/main/java/com/zy/asrs/service/InventoryReserveLogService.java
new file mode 100644
index 0000000..36e6199
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/InventoryReserveLogService.java
@@ -0,0 +1,8 @@
+package com.zy.asrs.service;
+
+import com.zy.asrs.entity.InventoryReserveLog;
+import com.baomidou.mybatisplus.service.IService;
+
+public interface InventoryReserveLogService extends IService<InventoryReserveLog> {
+
+}
diff --git a/src/main/java/com/zy/asrs/service/InventoryReserveService.java b/src/main/java/com/zy/asrs/service/InventoryReserveService.java
new file mode 100644
index 0000000..3141389
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/InventoryReserveService.java
@@ -0,0 +1,8 @@
+package com.zy.asrs.service;
+
+import com.zy.asrs.entity.InventoryReserve;
+import com.baomidou.mybatisplus.service.IService;
+
+public interface InventoryReserveService extends IService<InventoryReserve> {
+
+}
diff --git a/src/main/java/com/zy/asrs/service/impl/InventoryReserveLogServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/InventoryReserveLogServiceImpl.java
new file mode 100644
index 0000000..e057aa8
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/impl/InventoryReserveLogServiceImpl.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.service.impl;
+
+import com.zy.asrs.mapper.InventoryReserveLogMapper;
+import com.zy.asrs.entity.InventoryReserveLog;
+import com.zy.asrs.service.InventoryReserveLogService;
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+@Service("inventoryReserveLogService")
+public class InventoryReserveLogServiceImpl extends ServiceImpl<InventoryReserveLogMapper, InventoryReserveLog> implements InventoryReserveLogService {
+
+}
diff --git a/src/main/java/com/zy/asrs/service/impl/InventoryReserveServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/InventoryReserveServiceImpl.java
new file mode 100644
index 0000000..8ff9587
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/impl/InventoryReserveServiceImpl.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.service.impl;
+
+import com.zy.asrs.mapper.InventoryReserveMapper;
+import com.zy.asrs.entity.InventoryReserve;
+import com.zy.asrs.service.InventoryReserveService;
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+@Service("inventoryReserveService")
+public class InventoryReserveServiceImpl extends ServiceImpl<InventoryReserveMapper, InventoryReserve> implements InventoryReserveService {
+
+}
diff --git a/src/main/java/com/zy/asrs/task/InventoryReserveScheduler.java b/src/main/java/com/zy/asrs/task/InventoryReserveScheduler.java
new file mode 100644
index 0000000..450a78d
--- /dev/null
+++ b/src/main/java/com/zy/asrs/task/InventoryReserveScheduler.java
@@ -0,0 +1,36 @@
+package com.zy.asrs.task;
+
+import com.zy.asrs.task.core.ReturnT;
+import com.zy.asrs.task.handler.InventoryReserveExpireHandler;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+/**
+ * 棰勭暀搴撳瓨杩囨湡瀹氭椂浠诲姟璋冨害鍣�
+ * 瀹氭湡妫�鏌ュ苟澶勭悊杩囨湡鐨勯鐣欏簱瀛�
+ */
+@Slf4j
+@Component
+public class InventoryReserveScheduler {
+
+ @Autowired
+ private InventoryReserveExpireHandler inventoryReserveExpireHandler;
+
+ /**
+ * 姣忓垎閽熸墽琛屼竴娆★紝妫�鏌ヨ繃鏈熺殑棰勭暀搴撳瓨
+ */
+ @Scheduled(cron = "0 * * * * ?")
+ public void checkExpiredReserve() {
+ try {
+ ReturnT<String> result = inventoryReserveExpireHandler.start();
+ if (!result.isSuccess()) {
+ log.error("棰勭暀搴撳瓨杩囨湡澶勭悊澶辫触: {}", result.getMsg());
+ }
+ } catch (Exception e) {
+ log.error("棰勭暀搴撳瓨杩囨湡瀹氭椂浠诲姟寮傚父", e);
+ }
+ }
+
+}
diff --git a/src/main/java/com/zy/asrs/task/handler/InventoryReserveExpireHandler.java b/src/main/java/com/zy/asrs/task/handler/InventoryReserveExpireHandler.java
new file mode 100644
index 0000000..5e462a1
--- /dev/null
+++ b/src/main/java/com/zy/asrs/task/handler/InventoryReserveExpireHandler.java
@@ -0,0 +1,78 @@
+package com.zy.asrs.task.handler;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.zy.asrs.entity.InventoryReserve;
+import com.zy.asrs.entity.InventoryReserveLog;
+import com.zy.asrs.service.InventoryReserveLogService;
+import com.zy.asrs.service.InventoryReserveService;
+import com.zy.asrs.task.AbstractHandler;
+import com.zy.asrs.task.core.ReturnT;
+import lombok.extern.slf4j.Slf4j;
+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;
+
+/**
+ * 棰勭暀搴撳瓨杩囨湡澶勭悊鍣�
+ * 灏嗚繃鏈熺殑棰勭暀搴撳瓨杞Щ鍒版棩蹇楄〃
+ */
+@Slf4j
+@Service
+public class InventoryReserveExpireHandler extends AbstractHandler<String> {
+
+ @Autowired
+ private InventoryReserveService inventoryReserveService;
+
+ @Autowired
+ private InventoryReserveLogService inventoryReserveLogService;
+
+ @Transactional(rollbackFor = Exception.class)
+ public ReturnT<String> start() {
+ // 鏌ヨ杩囨湡鐨勯鐣欏簱瀛橈紙杩囨湡鏃堕棿涓嶄负绌轰笖灏忎簬褰撳墠鏃堕棿锛�
+ Date now = new Date();
+ List<InventoryReserve> expiredList = inventoryReserveService.selectList(
+ new EntityWrapper<InventoryReserve>()
+ .isNotNull("expice_time")
+ .lt("expice_time", now));
+
+ if (expiredList.isEmpty()) {
+ return SUCCESS;
+ }
+
+ log.info("鍙戠幇 {} 鏉¤繃鏈熺殑棰勭暀搴撳瓨璁板綍", expiredList.size());
+
+ for (InventoryReserve reserve : expiredList) {
+ try {
+ // 杞Щ鍒版棩蹇楄〃
+ InventoryReserveLog logRecord = new InventoryReserveLog();
+ logRecord.setMatnr(reserve.getMatnr());
+ logRecord.setMaktx(reserve.getMaktx());
+ logRecord.setOrderNo(reserve.getOrderNo());
+ logRecord.setBatch(reserve.getBatch());
+ logRecord.setQuantity(reserve.getQuantity());
+ logRecord.setExpiceTime(reserve.getExpiceTime());
+ logRecord.setDeptId(reserve.getDeptId());
+ logRecord.setCreateTime(reserve.getCreateTime());
+ logRecord.setCreateBy(reserve.getCreateBy());
+ logRecord.setUpdateTime(new Date());
+
+ inventoryReserveLogService.insert(logRecord);
+
+ // 鍒犻櫎鍘熻褰�
+ inventoryReserveService.deleteById(reserve.getId());
+
+ log.info("棰勭暀搴撳瓨杩囨湡澶勭悊瀹屾垚: id={}, matnr={}, batch={}",
+ reserve.getId(), reserve.getMatnr(), reserve.getBatch());
+
+ } catch (Exception e) {
+ log.error("棰勭暀搴撳瓨杩囨湡澶勭悊澶辫触: id={}, error={}", reserve.getId(), e.getMessage());
+ }
+ }
+
+ return SUCCESS;
+ }
+
+}
diff --git a/src/main/java/com/zy/common/CodeBuilder.java b/src/main/java/com/zy/common/CodeBuilder.java
index bb4bc3f..93c55e3 100644
--- a/src/main/java/com/zy/common/CodeBuilder.java
+++ b/src/main/java/com/zy/common/CodeBuilder.java
@@ -20,8 +20,10 @@
generator.url = "192.168.4.15:1433;databasename=yhfzasrs";
generator.username = "sa";
generator.password = "sa@123";
- generator.table = "asr_department";
+ generator.table = "man_inventory_reserve_log";
generator.packagePath = "com.zy.asrs";
+ generator.html = false;
+ generator.js = false;
generator.build();
}
diff --git a/src/main/java/inventoryReserve.sql b/src/main/java/inventoryReserve.sql
new file mode 100644
index 0000000..a70d5b5
--- /dev/null
+++ b/src/main/java/inventoryReserve.sql
@@ -0,0 +1,18 @@
+-- save inventoryReserve record
+-- mysql
+insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'inventoryReserve/inventoryReserve.html', 'inventoryReserve绠$悊', null , '2', null , '1');
+
+insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'inventoryReserve#view', '鏌ヨ', '', '3', '0', '1');
+insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'inventoryReserve#btn-add', '鏂板', '', '3', '1', '1');
+insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'inventoryReserve#btn-edit', '缂栬緫', '', '3', '2', '1');
+insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'inventoryReserve#btn-delete', '鍒犻櫎', '', '3', '3', '1');
+insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'inventoryReserve#btn-export', '瀵煎嚭', '', '3', '4', '1');
+
+-- sqlserver
+insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'inventoryReserve/inventoryReserve.html', N'inventoryReserve绠$悊', null, '2', null, '1');
+
+insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'inventoryReserve#view', N'鏌ヨ', '', '3', '0', '1');
+insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'inventoryReserve#btn-add', N'鏂板', '', '3', '1', '1');
+insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'inventoryReserve#btn-edit', N'缂栬緫', '', '3', '2', '1');
+insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'inventoryReserve#btn-delete', N'鍒犻櫎', '', '3', '3', '1');
+insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'inventoryReserve#btn-export', N'瀵煎嚭', '', '3', '4', '1');
diff --git a/src/main/java/inventoryReserveLog.sql b/src/main/java/inventoryReserveLog.sql
new file mode 100644
index 0000000..2396379
--- /dev/null
+++ b/src/main/java/inventoryReserveLog.sql
@@ -0,0 +1,18 @@
+-- save inventoryReserveLog record
+-- mysql
+insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'inventoryReserveLog/inventoryReserveLog.html', 'inventoryReserveLog绠$悊', null , '2', null , '1');
+
+insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'inventoryReserveLog#view', '鏌ヨ', '', '3', '0', '1');
+insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'inventoryReserveLog#btn-add', '鏂板', '', '3', '1', '1');
+insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'inventoryReserveLog#btn-edit', '缂栬緫', '', '3', '2', '1');
+insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'inventoryReserveLog#btn-delete', '鍒犻櫎', '', '3', '3', '1');
+insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'inventoryReserveLog#btn-export', '瀵煎嚭', '', '3', '4', '1');
+
+-- sqlserver
+insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'inventoryReserveLog/inventoryReserveLog.html', N'inventoryReserveLog绠$悊', null, '2', null, '1');
+
+insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'inventoryReserveLog#view', N'鏌ヨ', '', '3', '0', '1');
+insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'inventoryReserveLog#btn-add', N'鏂板', '', '3', '1', '1');
+insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'inventoryReserveLog#btn-edit', N'缂栬緫', '', '3', '2', '1');
+insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'inventoryReserveLog#btn-delete', N'鍒犻櫎', '', '3', '3', '1');
+insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'inventoryReserveLog#btn-export', N'瀵煎嚭', '', '3', '4', '1');
diff --git a/src/main/resources/mapper/InventoryReserveLogMapper.xml b/src/main/resources/mapper/InventoryReserveLogMapper.xml
new file mode 100644
index 0000000..9e01e89
--- /dev/null
+++ b/src/main/resources/mapper/InventoryReserveLogMapper.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zy.asrs.mapper.InventoryReserveLogMapper">
+
+ <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+ <resultMap id="BaseResultMap" type="com.zy.asrs.entity.InventoryReserveLog">
+ <id column="id" property="id" />
+ <result column="matnr" property="matnr" />
+ <result column="maktx" property="maktx" />
+ <result column="order_no" property="orderNo" />
+ <result column="batch" property="batch" />
+ <result column="quantity" property="quantity" />
+ <result column="expice_time" property="expiceTime" />
+ <result column="dept_id" property="deptId" />
+ <result column="create_time" property="createTime" />
+ <result column="create_by" property="createBy" />
+ <result column="update_time" property="updateTime" />
+ <result column="update_by" property="updateBy" />
+
+ </resultMap>
+
+</mapper>
diff --git a/src/main/resources/mapper/InventoryReserveMapper.xml b/src/main/resources/mapper/InventoryReserveMapper.xml
new file mode 100644
index 0000000..0e375d2
--- /dev/null
+++ b/src/main/resources/mapper/InventoryReserveMapper.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zy.asrs.mapper.InventoryReserveMapper">
+
+ <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+ <resultMap id="BaseResultMap" type="com.zy.asrs.entity.InventoryReserve">
+ <id column="id" property="id" />
+ <result column="matnr" property="matnr" />
+ <result column="maktx" property="maktx" />
+ <result column="order_no" property="orderNo" />
+ <result column="batch" property="batch" />
+ <result column="quantity" property="quantity" />
+ <result column="expice_time" property="expiceTime" />
+ <result column="dept_id" property="deptId" />
+ <result column="create_time" property="createTime" />
+ <result column="create_by" property="createBy" />
+ <result column="update_time" property="updateTime" />
+ <result column="update_by" property="updateBy" />
+
+ </resultMap>
+
+</mapper>
diff --git a/src/main/webapp/static/js/inventoryReserve/inventoryReserve.js b/src/main/webapp/static/js/inventoryReserve/inventoryReserve.js
new file mode 100644
index 0000000..9ddcf97
--- /dev/null
+++ b/src/main/webapp/static/js/inventoryReserve/inventoryReserve.js
@@ -0,0 +1,257 @@
+var pageCurr;
+layui.config({
+ base: baseUrl + "/static/layui/lay/modules/"
+}).use(['table', 'laydate', 'form', 'admin', 'xmSelect'], function () {
+ var table = layui.table;
+ var $ = layui.jquery;
+ var layer = layui.layer;
+ var layDate = layui.laydate;
+ var form = layui.form;
+ var admin = layui.admin;
+ var xmSelect = layui.xmSelect;
+
+ // 鏁版嵁娓叉煋
+ var tableIns = table.render({
+ elem: '#inventoryReserve',
+ headers: { token: localStorage.getItem('token') },
+ url: baseUrl + '/inventoryReserve/list/auth',
+ page: true,
+ limit: 15,
+ limits: [15, 30, 50, 100, 200],
+ toolbar: '#toolbar',
+ cellMinWidth: 50,
+ height: 'full-150',
+ cols: [[
+ { type: 'checkbox' },
+ { type: 'numbers', title: '#' },
+ { field: 'matnr', align: 'center', title: '鐗╂枡缂栫爜', },
+ { field: 'maktx', align: 'center', title: '鐗╂枡鍚嶇О', },
+ { field: 'orderNo', align: 'center', title: '璁㈠崟鍙�', width: 150 },
+ { field: 'batch', align: 'center', title: '鎵规', width: 120 },
+ { field: 'quantity', align: 'center', title: '鏁伴噺', width: 100 },
+ { field: 'expiceTime$', align: 'center', title: '杩囨湡鏃堕棿', width: 180 },
+ { field: 'createTime$', align: 'center', title: '鍒涘缓鏃堕棿', width: 180 },
+ { fixed: 'right', title: '鎿嶄綔', align: 'center', toolbar: '#operate', width: 150 }
+ ]],
+ 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();
+ }
+ });
+
+ // 鐩戝惉澶村伐鍏锋爮浜嬩欢
+ table.on('toolbar(inventoryReserve)', function (obj) {
+ var checkStatus = table.checkStatus(obj.config.id).data;
+ switch (obj.event) {
+ case 'addData':
+ showEditModel();
+ break;
+ case 'deleteData':
+ if (checkStatus.length === 0) {
+ layer.msg('璇烽�夋嫨瑕佸垹闄ょ殑鏁版嵁', { icon: 2 });
+ return;
+ }
+ del(checkStatus.map(function (d) {
+ return d.id;
+ }));
+ break;
+ }
+ });
+
+ // 鐩戝惉琛屽伐鍏蜂簨浠�
+ table.on('tool(inventoryReserve)', function (obj) {
+ var data = obj.data;
+ switch (obj.event) {
+ case 'edit':
+ showEditModel(data);
+ break;
+ case 'del':
+ del([data.id]);
+ break;
+ }
+ });
+
+ // 娣诲姞鎸夐挳鐐瑰嚮
+ $('#addBtn').click(function () {
+ showEditModel();
+ });
+
+ /* 寮圭獥 - 鏂板銆佷慨鏀� */
+ function showEditModel(mData) {
+ admin.open({
+ type: 1,
+ area: '500px',
+ title: (mData ? '淇敼' : '娣诲姞') + '棰勭暀搴撳瓨',
+ content: $('#editDialog').html(),
+ success: function (layero, dIndex) {
+ // 鍥炴樉琛ㄥ崟鏁版嵁
+ form.val('detail', mData);
+
+ // 娓叉煋鏃ユ湡閫夋嫨鍣�
+ layDate.render({
+ elem: '#expiceTime',
+ type: 'datetime',
+ format: 'yyyy-MM-dd HH:mm:ss'
+ });
+
+ // 鐗╂枡閫夋嫨鍣�
+ var matXmSelect = xmSelect.render({
+ el: '#matSelect',
+ style: { width: '100%' },
+ radio: true,
+ clickClose: true,
+ filterable: true,
+ remoteSearch: true,
+ remoteMethod: function (val, cb, show) {
+ $.ajax({
+ url: baseUrl + "/mat/all/get/kv",
+ headers: { 'token': localStorage.getItem('token') },
+ data: { condition: val },
+ method: 'POST',
+ success: function (res) {
+ if (res.code === 200) {
+ cb(res.data);
+ } else {
+ cb([]);
+ layer.msg(res.msg, { icon: 2 });
+ }
+ }
+ });
+ },
+ on: function (data) {
+ if (data.arr.length > 0) {
+ var selected = data.arr[0];
+ $('input[name="matnr"]').val(selected.value);
+ $('input[name="maktx"]').val(selected.name);
+ } else {
+ $('input[name="matnr"]').val('');
+ $('input[name="maktx"]').val('');
+ }
+ }
+ });
+
+ // 缂栬緫鏃跺洖鏄剧墿鏂�
+ if (mData && mData.matnr) {
+ matXmSelect.setValue([{
+ name: mData.maktx || mData.matnr,
+ value: mData.matnr
+ }]);
+ }
+
+ // 琛ㄥ崟鎻愪氦浜嬩欢
+ form.on('submit(editSubmit)', function (data) {
+ // 楠岃瘉鐗╂枡
+ if (!data.field.matnr) {
+ layer.msg('璇烽�夋嫨鐗╂枡', { icon: 2 });
+ return false;
+ }
+
+ var loadIndex = layer.load(2);
+ $.ajax({
+ url: baseUrl + "/inventoryReserve/" + (mData ? 'update' : 'add') + "/auth",
+ headers: { 'token': localStorage.getItem('token') },
+ data: data.field,
+ method: 'POST',
+ success: function (res) {
+ layer.close(loadIndex);
+ if (res.code === 200) {
+ layer.close(dIndex);
+ layer.msg(res.msg, { icon: 1 });
+ tableReload();
+ } else if (res.code === 403) {
+ top.location.href = baseUrl + "/";
+ } else {
+ layer.msg(res.msg, { icon: 2 });
+ }
+ }
+ });
+ return false;
+ });
+
+ // 寮圭獥涓嶅嚭鐜版粴鍔ㄦ潯
+ $(layero).children('.layui-layer-content').css('overflow', 'visible');
+ layui.form.render('select');
+ }
+ });
+ }
+
+ /* 鍒犻櫎 */
+ function del(ids) {
+ layer.confirm('纭畾瑕佸垹闄ら�変腑鏁版嵁鍚楋紵', {
+ skin: 'layui-layer-admin',
+ shade: .1
+ }, function (i) {
+ layer.close(i);
+ var loadIndex = layer.load(2);
+ $.ajax({
+ url: baseUrl + "/inventoryReserve/delete/auth",
+ headers: { 'token': localStorage.getItem('token') },
+ data: { 'ids[]': ids },
+ method: 'POST',
+ success: function (res) {
+ layer.close(loadIndex);
+ if (res.code === 200) {
+ layer.msg(res.msg, { icon: 1 });
+ tableReload();
+ } else if (res.code === 403) {
+ top.location.href = baseUrl + "/";
+ } else {
+ layer.msg(res.msg, { icon: 2 });
+ }
+ }
+ });
+ });
+ }
+
+ // 鎼滅储
+ form.on('submit(search)', function (data) {
+ pageCurr = 1;
+ tableReload();
+ });
+
+ // 閲嶇疆
+ form.on('submit(reset)', function (data) {
+ pageCurr = 1;
+ clearFormVal($('#search-box'));
+ tableReload();
+ });
+
+ // 琛ㄦ牸閲嶈浇
+ function tableReload() {
+ var searchData = {};
+ $.each($('#search-box [name]').serializeArray(), function () {
+ searchData[this.name] = this.value;
+ });
+ tableIns.reload({
+ where: searchData,
+ page: { curr: pageCurr }
+ });
+ }
+
+ // 娓呯┖琛ㄥ崟
+ function clearFormVal(el) {
+ $(':input', el)
+ .val('')
+ .removeAttr('checked')
+ .removeAttr('selected');
+ }
+
+});
diff --git a/src/main/webapp/static/js/inventoryReserveLog/inventoryReserveLog.js b/src/main/webapp/static/js/inventoryReserveLog/inventoryReserveLog.js
new file mode 100644
index 0000000..041b05c
--- /dev/null
+++ b/src/main/webapp/static/js/inventoryReserveLog/inventoryReserveLog.js
@@ -0,0 +1,87 @@
+var pageCurr;
+layui.config({
+ base: baseUrl + "/static/layui/lay/modules/"
+}).use(['table', 'laydate', 'form'], function () {
+ var table = layui.table;
+ var $ = layui.jquery;
+ var layer = layui.layer;
+ var form = layui.form;
+
+ // 鏁版嵁娓叉煋锛堝彧璇绘ā寮忥紝鏃犲鍒犳敼鎿嶄綔锛�
+ var tableIns = table.render({
+ elem: '#inventoryReserveLog',
+ headers: { token: localStorage.getItem('token') },
+ url: baseUrl + '/inventoryReserveLog/list/auth',
+ page: true,
+ limit: 15,
+ limits: [15, 30, 50, 100, 200],
+ cellMinWidth: 50,
+ height: 'full-150',
+ cols: [[
+ { type: 'numbers', title: '#' },
+ { field: 'matnr', align: 'center', title: '鐗╂枡缂栫爜' },
+ { field: 'maktx', align: 'center', title: '鐗╂枡鍚嶇О' },
+ { field: 'orderNo', align: 'center', title: '璁㈠崟鍙�', width: 150 },
+ { field: 'batch', align: 'center', title: '鎵规', width: 120 },
+ { field: 'quantity', align: 'center', title: '鏁伴噺', width: 100 },
+ { field: 'expiceTime$', align: 'center', title: '杩囨湡鏃堕棿', width: 180 },
+ { field: 'createTime$', align: 'center', title: '鍘熷垱寤烘椂闂�', width: 180 },
+ { field: 'updateTime$', align: 'center', title: '杞Щ鏃堕棿', width: 180 }
+ ]],
+ 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;
+ }
+ });
+
+ // 鎼滅储
+ form.on('submit(search)', function (data) {
+ pageCurr = 1;
+ tableReload();
+ });
+
+ // 閲嶇疆
+ form.on('submit(reset)', function (data) {
+ pageCurr = 1;
+ clearFormVal($('#search-box'));
+ tableReload();
+ });
+
+ // 琛ㄦ牸閲嶈浇
+ function tableReload() {
+ var searchData = {};
+ $.each($('#search-box [name]').serializeArray(), function () {
+ searchData[this.name] = this.value;
+ });
+ tableIns.reload({
+ where: searchData,
+ page: { curr: pageCurr }
+ });
+ }
+
+ // 娓呯┖琛ㄥ崟
+ function clearFormVal(el) {
+ $(':input', el)
+ .val('')
+ .removeAttr('checked')
+ .removeAttr('selected');
+ }
+
+});
diff --git a/src/main/webapp/views/inventoryReserve/inventoryReserve.html b/src/main/webapp/views/inventoryReserve/inventoryReserve.html
new file mode 100644
index 0000000..5a6bd1e
--- /dev/null
+++ b/src/main/webapp/views/inventoryReserve/inventoryReserve.html
@@ -0,0 +1,143 @@
+<!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/admin.css?v=318" media="all">
+ <link rel="stylesheet" href="../../static/css/cool.css" media="all">
+ <style>
+ .btn-add {
+ display: none;
+ }
+
+ .btn-edit {
+ display: none;
+ }
+
+ .btn-delete {
+ display: none;
+ }
+ </style>
+</head>
+
+<body>
+
+ <!-- 姝f枃寮�濮� -->
+ <div class="layui-fluid">
+ <div class="layui-card">
+ <div class="layui-card-body">
+ <!-- 琛ㄦ牸椤堕儴宸ュ叿鏍� -->
+ <div id="search-box" class="layui-form toolbar">
+ <div class="layui-form-item">
+ <div class="layui-inline">
+ <label class="layui-form-label" style="padding: 8px 15px;">鐗╂枡缂栫爜:</label>
+ <div class="layui-input-inline">
+ <input name="matnr" class="layui-input" type="text" placeholder="杈撳叆鐗╂枡缂栫爜" />
+ </div>
+ </div>
+ <div class="layui-inline">
+ <label class="layui-form-label" style="padding: 8px 15px;">璁㈠崟鍙�:</label>
+ <div class="layui-input-inline">
+ <input name="order_no" class="layui-input" type="text" placeholder="杈撳叆璁㈠崟鍙�" />
+ </div>
+ </div>
+ <div class="layui-inline">
+ <label class="layui-form-label" style="padding: 8px 15px;">鎵规:</label>
+ <div class="layui-input-inline">
+ <input name="batch" class="layui-input" type="text" placeholder="杈撳叆鎵规" />
+ </div>
+ </div>
+ <div class="layui-inline">
+ <button class="layui-btn icon-btn" lay-filter="search" lay-submit>
+ <i class="layui-icon"></i>鎼滅储
+ </button>
+ <button class="layui-btn icon-btn" lay-filter="reset" lay-submit>
+ <i class="layui-icon"></i>閲嶇疆
+ </button>
+<!-- <button id="addBtn" class="layui-btn icon-btn btn-add"><i-->
+<!-- class="layui-icon"></i>娣诲姞</button>-->
+ </div>
+ </div>
+ </div>
+ <table id="inventoryReserve" lay-filter="inventoryReserve"></table>
+ </div>
+ </div>
+ <div class="layui-card">
+ <div class="layui-card-body">
+ 棰勭暀搴撳瓨绠$悊锛氱敤浜庨鐣欏叆搴撶墿鏂欑殑搴撳瓨鏁伴噺锛岀‘淇濆叧閿鍗曠殑鐗╂枡渚涘簲銆�
+ </div>
+ </div>
+ </div>
+
+ <!-- 琛ㄦ牸鎿嶄綔鍒� -->
+ <script type="text/html" id="toolbar">
+ <div class="layui-btn-container">
+ <button class="layui-btn layui-btn-sm layui-btn-normal btn-add" lay-event="addData"><i class="layui-icon"></i>娣诲姞</button>
+ <button class="layui-btn layui-btn-sm layui-btn-danger btn-delete" lay-event="deleteData"><i class="layui-icon"></i>鍒犻櫎</button>
+ </div>
+</script>
+
+ <!-- 琛ㄦ牸鎿嶄綔鍒� -->
+ <script type="text/html" id="operate">
+ <a class="layui-btn layui-btn-primary layui-btn-xs btn-edit" lay-event="edit">淇敼</a>
+ <a class="layui-btn layui-btn-danger layui-btn-xs btn-delete" lay-event="del">鍒犻櫎</a>
+</script>
+
+ <!-- 琛ㄥ崟寮圭獥 -->
+ <script type="text/html" id="editDialog">
+ <form id="detail" lay-filter="detail" class="layui-form" style="padding: 25px 30px 0 0;">
+ <input name="id" type="hidden">
+ <div class="layui-form-item">
+ <label class="layui-form-label layui-form-required">鐗╂枡</label>
+ <div class="layui-input-block">
+ <div id="matSelect"></div>
+ <input name="matnr" type="hidden">
+ <input name="maktx" type="hidden">
+ </div>
+ </div>
+ <div class="layui-form-item">
+ <label class="layui-form-label">璁㈠崟鍙�</label>
+ <div class="layui-input-block">
+ <input name="orderNo" placeholder="杈撳叆璁㈠崟鍙凤紙鍙�夛級" class="layui-input">
+ </div>
+ </div>
+ <div class="layui-form-item">
+ <label class="layui-form-label layui-form-required">鎵规</label>
+ <div class="layui-input-block">
+ <input name="batch" placeholder="杈撳叆鎵规" class="layui-input" lay-vertype="tips" lay-verify="required" required="">
+ </div>
+ </div>
+ <div class="layui-form-item">
+ <label class="layui-form-label layui-form-required">鏁伴噺</label>
+ <div class="layui-input-block">
+ <input name="quantity" placeholder="杈撳叆鏁伴噺" class="layui-input" lay-vertype="tips" lay-verify="required|number" required="">
+ </div>
+ </div>
+ <div class="layui-form-item">
+ <label class="layui-form-label">杩囨湡鏃堕棿</label>
+ <div class="layui-input-block">
+ <input id="expiceTime" name="expiceTime" placeholder="閫夋嫨杩囨湡鏃堕棿锛堝彲閫夛級" class="layui-input" autocomplete="off">
+ </div>
+ </div>
+ <hr class="layui-bg-gray">
+ <div class="layui-form-item text-right">
+ <button class="layui-btn" lay-filter="editSubmit" lay-submit="">淇濆瓨</button>
+ <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">鍙栨秷</button>
+ </div>
+ </form>
+</script>
+
+ <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/inventoryReserve/inventoryReserve.js" charset="utf-8"></script>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/src/main/webapp/views/inventoryReserveLog/inventoryReserveLog.html b/src/main/webapp/views/inventoryReserveLog/inventoryReserveLog.html
new file mode 100644
index 0000000..a57822f
--- /dev/null
+++ b/src/main/webapp/views/inventoryReserveLog/inventoryReserveLog.html
@@ -0,0 +1,71 @@
+<!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/admin.css?v=318" media="all">
+ <link rel="stylesheet" href="../../static/css/cool.css" media="all">
+</head>
+
+<body>
+
+ <!-- 姝f枃寮�濮� -->
+ <div class="layui-fluid">
+ <div class="layui-card">
+ <div class="layui-card-body">
+ <!-- 琛ㄦ牸椤堕儴宸ュ叿鏍� -->
+ <div id="search-box" class="layui-form toolbar">
+ <div class="layui-form-item">
+ <div class="layui-inline">
+ <label class="layui-form-label" style="padding: 8px 15px;">鐗╂枡缂栫爜:</label>
+ <div class="layui-input-inline">
+ <input name="matnr" class="layui-input" type="text" placeholder="杈撳叆鐗╂枡缂栫爜" />
+ </div>
+ </div>
+ <div class="layui-inline">
+ <label class="layui-form-label" style="padding: 8px 15px;">璁㈠崟鍙�:</label>
+ <div class="layui-input-inline">
+ <input name="order_no" class="layui-input" type="text" placeholder="杈撳叆璁㈠崟鍙�" />
+ </div>
+ </div>
+ <div class="layui-inline">
+ <label class="layui-form-label" style="padding: 8px 15px;">鎵规:</label>
+ <div class="layui-input-inline">
+ <input name="batch" class="layui-input" type="text" placeholder="杈撳叆鎵规" />
+ </div>
+ </div>
+ <div class="layui-inline">
+ <button class="layui-btn icon-btn" lay-filter="search" lay-submit>
+ <i class="layui-icon"></i>鎼滅储
+ </button>
+ <button class="layui-btn icon-btn" lay-filter="reset" lay-submit>
+ <i class="layui-icon"></i>閲嶇疆
+ </button>
+ </div>
+ </div>
+ </div>
+ <table id="inventoryReserveLog" lay-filter="inventoryReserveLog"></table>
+ </div>
+ </div>
+ <div class="layui-card">
+ <div class="layui-card-body">
+ 棰勭暀搴撳瓨鏃ュ織锛氳褰曞凡杩囨湡鐨勯鐣欏簱瀛樺巻鍙叉暟鎹��
+ </div>
+ </div>
+ </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/inventoryReserveLog/inventoryReserveLog.js"
+ charset="utf-8"></script>
+
+</body>
+
+</html>
\ No newline at end of file
--
Gitblit v1.9.1