From f8193b239dac7276cb9203af51ad9b424fa5e90d Mon Sep 17 00:00:00 2001
From: pang.jiabao <pang_jiabao@163.com>
Date: 星期六, 28 二月 2026 15:17:25 +0800
Subject: [PATCH] 发货时间限制

---
 src/main/webapp/views/pla/sellout.html                  |   35 +++++++++++
 src/main/webapp/views/pla3/sellout.html                 |   35 +++++++++++
 src/main/java/com/zy/asrs/controller/PlaController.java |   35 +++++++++++
 src/main/java/com/zy/asrs/mapper/ManPakOutMapper.java   |    4 +
 src/main/webapp/views/pla2/sellout.html                 |   35 +++++++++++
 5 files changed, 141 insertions(+), 3 deletions(-)

diff --git a/src/main/java/com/zy/asrs/controller/PlaController.java b/src/main/java/com/zy/asrs/controller/PlaController.java
index b4b08f2..55473bc 100644
--- a/src/main/java/com/zy/asrs/controller/PlaController.java
+++ b/src/main/java/com/zy/asrs/controller/PlaController.java
@@ -14,6 +14,7 @@
 import com.zy.asrs.entity.*;
 import com.zy.asrs.entity.param.GlobleParameter;
 import com.zy.asrs.entity.result.KeyValueVo;
+import com.zy.asrs.mapper.ManPakOutMapper;
 import com.zy.asrs.service.*;
 import com.zy.asrs.utils.PlaExcelListener;
 import com.zy.asrs.utils.SaasUtils;
@@ -36,6 +37,8 @@
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.net.URLEncoder;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -234,11 +237,43 @@
         return R.ok(plaQtyService.getDeliveryDate());
     }
 
+    @Resource
+    private ManPakOutMapper manPakOutMapper;
+
     @RequestMapping(value = "/pla/sellout/auth")
     @ManagerAuth(memo = "sellout")
     @Transactional
     @Synchronized
     public R sellout(@RequestBody List<Pla> plas) {
+        // 鍒ゆ柇鍙戣揣鏃堕棿娈靛唴锛屾槸鍚﹁秴
+        String pakoutTime = plas.get(0).getPakoutTime().split("\\(")[0];
+        if (!Cools.isEmpty(pakoutTime)) {
+            // 鑾峰彇鏃堕棿娈靛唴鍙戣揣閲嶉噺闄愰
+            Config config = configService.selectOne(new EntityWrapper<Config>().eq("code", "MAX_WEIGHT_PER_HOUR").eq("status", 1));
+            if (config != null) {
+                pakoutTime = pakoutTime.split("\\(")[0].trim();
+                DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+
+                // 瑙f瀽
+                LocalDateTime dateTime = LocalDateTime.parse(pakoutTime, formatter);
+
+                // 褰撳皬鏃惰捣鐐�
+                LocalDateTime startHour = dateTime.withMinute(0).withSecond(0);
+
+                // 涓嬩竴涓皬鏃�
+                LocalDateTime endHour = startHour.plusHours(1); // 鑷姩澶勭悊璺ㄥぉ
+
+                // 杞洖瀛楃涓�
+                String startStr = startHour.format(formatter); // 2026-01-28 23:00:00
+                String endStr = endHour.format(formatter);     // 2026-01-29 00:00:00
+
+                long anfme = manPakOutMapper.maxWeightPerHour(startStr, endStr);
+                long weightMax = Long.parseLong(config.getValue());
+                if (anfme + plas.get(0).getOrderWeight().longValue() > weightMax) {
+                    throw new CoolException("瓒呭皬鏃堕噸閲忛檺棰�:" + weightMax + "锛岃灏忔椂鍙戣揣閲忓凡鏈夛細" + anfme);
+                }
+            }
+        }
 
         String orderNo = plas.get(0).getOrderNo();
         String maktx = plas.get(0).getBrand();
diff --git a/src/main/java/com/zy/asrs/mapper/ManPakOutMapper.java b/src/main/java/com/zy/asrs/mapper/ManPakOutMapper.java
index 2e5d114..9df47da 100644
--- a/src/main/java/com/zy/asrs/mapper/ManPakOutMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/ManPakOutMapper.java
@@ -5,6 +5,7 @@
 import com.zy.asrs.entity.param.PakOutDTO;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
 import org.springframework.stereotype.Repository;
 
 import java.util.Date;
@@ -21,4 +22,7 @@
 
     int selectPakOutCount(@Param("docnum") String docnum,@Param("stime") Date stime, @Param("etime") Date etime,@Param("curr") Integer curr,@Param("limit") Integer limit,
                           @Param("userId") Long userId, @Param("custName") String custName, @Param("roleId") Long roleId);
+
+    @Select("SELECT SUM(anfme) FROM man_pakout WHERE specs >= #{startStr} AND specs < #{endStr}")
+    long maxWeightPerHour(@Param("startStr") String startStr,@Param("endStr") String endStr);
 }
diff --git a/src/main/webapp/views/pla/sellout.html b/src/main/webapp/views/pla/sellout.html
index 68396ee..a0aadd9 100644
--- a/src/main/webapp/views/pla/sellout.html
+++ b/src/main/webapp/views/pla/sellout.html
@@ -193,9 +193,42 @@
         var table = layui.table;
         var laydate = layui.laydate;
         // 鏃ユ湡鏃堕棿閫夋嫨鍣�
+        function getNowStr() {
+            var d = new Date();
+            return d.getFullYear() + '-' +
+                String(d.getMonth() + 1).padStart(2, '0') + '-' +
+                String(d.getDate()).padStart(2, '0') + ' ' +
+                String(d.getHours()).padStart(2, '0') + ':' +
+                String(d.getMinutes()).padStart(2, '0') + ':' +
+                String(d.getSeconds()).padStart(2, '0');
+        }
         laydate.render({
             elem: '#pakoutTime',
-            type: 'datetime'
+            type: 'datetime',
+            min: getNowStr(),    // 浠婂ぉ鍙婁互鍚�
+            maxTime: '17:00:00', // 姣忓ぉ鏈�澶ф椂闂�
+            done: function(value){
+                if (!value) return;
+
+                var d = new Date(value.replace(/-/g,'/'));
+                var now = new Date();
+
+                // 浠婂ぉ蹇呴』鏅氫簬褰撳墠鏃堕棿
+                if(d.getTime() < now.getTime()){
+                    layer.msg('浠婂ぉ閫夋嫨鐨勬椂闂村繀椤绘櫄浜庡綋鍓嶆椂闂�');
+                    document.getElementById('pakoutTime').value = '';
+                    return;
+                }
+
+                // 鏃堕棿闄愬埗 08:00 - 17:00
+                var h = d.getHours();
+                var m = d.getMinutes();
+                var s = d.getSeconds();
+                if(h < 8 || h > 17 || (h === 17 && (m > 0 || s > 0))){
+                    layer.msg('鍙兘閫夋嫨 08:00 - 17:00 鐨勬椂闂�');
+                    document.getElementById('pakoutTime').value = '';
+                }
+            }
         });
 
         form.on('submit(edit)', function () {
diff --git a/src/main/webapp/views/pla2/sellout.html b/src/main/webapp/views/pla2/sellout.html
index 10487ac..4feeb0a 100644
--- a/src/main/webapp/views/pla2/sellout.html
+++ b/src/main/webapp/views/pla2/sellout.html
@@ -191,9 +191,42 @@
         var table = layui.table;
         var laydate = layui.laydate;
         // 鏃ユ湡鏃堕棿閫夋嫨鍣�
+        function getNowStr() {
+            var d = new Date();
+            return d.getFullYear() + '-' +
+                String(d.getMonth() + 1).padStart(2, '0') + '-' +
+                String(d.getDate()).padStart(2, '0') + ' ' +
+                String(d.getHours()).padStart(2, '0') + ':' +
+                String(d.getMinutes()).padStart(2, '0') + ':' +
+                String(d.getSeconds()).padStart(2, '0');
+        }
         laydate.render({
             elem: '#pakoutTime',
-            type: 'datetime'
+            type: 'datetime',
+            min: getNowStr(),    // 浠婂ぉ鍙婁互鍚�
+            maxTime: '17:00:00', // 姣忓ぉ鏈�澶ф椂闂�
+            done: function(value){
+                if (!value) return;
+
+                var d = new Date(value.replace(/-/g,'/'));
+                var now = new Date();
+
+                // 浠婂ぉ蹇呴』鏅氫簬褰撳墠鏃堕棿
+                if(d.getTime() < now.getTime()){
+                    layer.msg('浠婂ぉ閫夋嫨鐨勬椂闂村繀椤绘櫄浜庡綋鍓嶆椂闂�');
+                    document.getElementById('pakoutTime').value = '';
+                    return;
+                }
+
+                // 鏃堕棿闄愬埗 08:00 - 17:00
+                var h = d.getHours();
+                var m = d.getMinutes();
+                var s = d.getSeconds();
+                if(h < 8 || h > 17 || (h === 17 && (m > 0 || s > 0))){
+                    layer.msg('鍙兘閫夋嫨 08:00 - 17:00 鐨勬椂闂�');
+                    document.getElementById('pakoutTime').value = '';
+                }
+            }
         });
 
         form.on('submit(edit)', function () {
diff --git a/src/main/webapp/views/pla3/sellout.html b/src/main/webapp/views/pla3/sellout.html
index 10487ac..4feeb0a 100644
--- a/src/main/webapp/views/pla3/sellout.html
+++ b/src/main/webapp/views/pla3/sellout.html
@@ -191,9 +191,42 @@
         var table = layui.table;
         var laydate = layui.laydate;
         // 鏃ユ湡鏃堕棿閫夋嫨鍣�
+        function getNowStr() {
+            var d = new Date();
+            return d.getFullYear() + '-' +
+                String(d.getMonth() + 1).padStart(2, '0') + '-' +
+                String(d.getDate()).padStart(2, '0') + ' ' +
+                String(d.getHours()).padStart(2, '0') + ':' +
+                String(d.getMinutes()).padStart(2, '0') + ':' +
+                String(d.getSeconds()).padStart(2, '0');
+        }
         laydate.render({
             elem: '#pakoutTime',
-            type: 'datetime'
+            type: 'datetime',
+            min: getNowStr(),    // 浠婂ぉ鍙婁互鍚�
+            maxTime: '17:00:00', // 姣忓ぉ鏈�澶ф椂闂�
+            done: function(value){
+                if (!value) return;
+
+                var d = new Date(value.replace(/-/g,'/'));
+                var now = new Date();
+
+                // 浠婂ぉ蹇呴』鏅氫簬褰撳墠鏃堕棿
+                if(d.getTime() < now.getTime()){
+                    layer.msg('浠婂ぉ閫夋嫨鐨勬椂闂村繀椤绘櫄浜庡綋鍓嶆椂闂�');
+                    document.getElementById('pakoutTime').value = '';
+                    return;
+                }
+
+                // 鏃堕棿闄愬埗 08:00 - 17:00
+                var h = d.getHours();
+                var m = d.getMinutes();
+                var s = d.getSeconds();
+                if(h < 8 || h > 17 || (h === 17 && (m > 0 || s > 0))){
+                    layer.msg('鍙兘閫夋嫨 08:00 - 17:00 鐨勬椂闂�');
+                    document.getElementById('pakoutTime').value = '';
+                }
+            }
         });
 
         form.on('submit(edit)', function () {

--
Gitblit v1.9.1