From 48b2dc4df2c247d12e4dd52c3c5d290f1e026578 Mon Sep 17 00:00:00 2001
From: chen.lin <1442464845@qq.com>
Date: 星期四, 29 一月 2026 13:39:43 +0800
Subject: [PATCH] 销售订单-修复

---
 src/main/java/com/zy/asrs/controller/SaleOrderController.java |  123 ++++++++++++++++++++++++++++++++--------
 src/main/webapp/static/js/salesOrder/salsesOrder.js           |    4 +
 2 files changed, 101 insertions(+), 26 deletions(-)

diff --git a/src/main/java/com/zy/asrs/controller/SaleOrderController.java b/src/main/java/com/zy/asrs/controller/SaleOrderController.java
index 4cd05cd..c527da6 100644
--- a/src/main/java/com/zy/asrs/controller/SaleOrderController.java
+++ b/src/main/java/com/zy/asrs/controller/SaleOrderController.java
@@ -23,6 +23,7 @@
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.OutputStream;
+import java.math.BigDecimal;
 import java.net.URLEncoder;
 import java.util.*;
 import javax.servlet.http.HttpServletResponse;
@@ -156,6 +157,67 @@
             }
         }
     }
+    
+    /**
+     * 瀹夊叏鍦板皢瀵硅薄杞崲涓築igDecimal锛岀‘淇漬ull鍊间笉浼氳閿欒杞崲
+     * 浣跨敤BigDecimal鍙互閬垮厤娴偣鏁扮簿搴﹂棶棰橈紝鐗瑰埆閫傚悎閲戦鍜屾暟閲忓瓧娈�
+     * @param obj 寰呰浆鎹㈢殑瀵硅薄
+     * @return BigDecimal鍊硷紝濡傛灉瀵硅薄涓簄ull鎴栨棤娉曡浆鎹㈠垯杩斿洖null
+     */
+    private BigDecimal parseBigDecimalSafely(Object obj) {
+        if (obj == null) {
+            return null;
+        }
+        // 濡傛灉鏄瓧绗︿覆"null"锛岃繑鍥瀗ull
+        String str = String.valueOf(obj);
+        if ("null".equalsIgnoreCase(str) || str.trim().isEmpty()) {
+            return null;
+        }
+        try {
+            // 濡傛灉宸茬粡鏄疊igDecimal锛岀洿鎺ヨ繑鍥�
+            if (obj instanceof BigDecimal) {
+                return (BigDecimal) obj;
+            }
+            // 濡傛灉鏄疦umber绫诲瀷锛岃浆鎹负BigDecimal
+            if (obj instanceof Number) {
+                // 浣跨敤瀛楃涓茶浆鎹㈤伩鍏嶇簿搴︽崯澶�
+                return new BigDecimal(obj.toString());
+            }
+            // 瀛楃涓茶浆鎹负BigDecimal
+            return new BigDecimal(str.trim());
+        } catch (NumberFormatException e) {
+            // 杞崲澶辫触锛岃繑鍥瀗ull
+            return null;
+        }
+    }
+    
+    /**
+     * 瀹夊叏鍦板皢瀵硅薄杞崲涓篋ouble锛岀‘淇漬ull鍊间笉浼氳閿欒杞崲
+     * @deprecated 寤鸿浣跨敤 parseBigDecimalSafely 鏇夸唬锛屼互閬垮厤绮惧害闂
+     * @param obj 寰呰浆鎹㈢殑瀵硅薄
+     * @return Double鍊硷紝濡傛灉瀵硅薄涓簄ull鎴栨棤娉曡浆鎹㈠垯杩斿洖null
+     */
+    @Deprecated
+    private Double parseDoubleSafely(Object obj) {
+        if (obj == null) {
+            return null;
+        }
+        // 濡傛灉鏄瓧绗︿覆"null"锛岃繑鍥瀗ull
+        String str = String.valueOf(obj);
+        if ("null".equalsIgnoreCase(str) || str.trim().isEmpty()) {
+            return null;
+        }
+        try {
+            // 灏濊瘯杞崲涓篋ouble
+            if (obj instanceof Number) {
+                return ((Number) obj).doubleValue();
+            }
+            return Double.valueOf(str);
+        } catch (NumberFormatException e) {
+            // 杞崲澶辫触锛岃繑鍥瀗ull
+            return null;
+        }
+    }
 
     @RequestMapping(value = "/saleOrder/add/auth")
     @ManagerAuth
@@ -171,37 +233,41 @@
             return R.error("鏁版嵁涓嶈兘涓虹┖");
         }
         int successCount = 0;
+        int updateCount = 0;
         for (Map<String, Object> data : dataList) {
             try {
-
-                SaleOrder saleOrder1 = saleOrderService.selectOne(new EntityWrapper<SaleOrder>()
+                // 妫�鏌ユ槸鍚﹀凡瀛樺湪锛堟牴鎹鍗曞彿鍜岀墿鏂欑紪鐮侊級
+                SaleOrder existOrder = saleOrderService.selectOne(new EntityWrapper<SaleOrder>()
                         .eq("order_code", data.get("orderCode")).eq("inv_code", data.get("invCode")));
-                if (null != saleOrder1) {
-                    continue;
+                
+                SaleOrder saleOrder;
+                boolean isUpdate = false;
+                if (existOrder != null) {
+                    // 宸插瓨鍦紝鏇存柊鏁版嵁
+                    saleOrder = existOrder;
+                    isUpdate = true;
+                    updateCount++;
+                } else {
+                    // 涓嶅瓨鍦紝鍒涘缓鏂拌褰�
+                    saleOrder = new SaleOrder();
+                    successCount++;
                 }
-
-                SaleOrder saleOrder = new SaleOrder();
+                
                 saleOrder.setOrderCode(data.get("orderCode") != null ? String.valueOf(data.get("orderCode")) : null);
                 saleOrder.setPersonName(data.get("personName") != null ? String.valueOf(data.get("personName")) : null);
                 saleOrder.setInvCode(data.get("invCode") != null ? String.valueOf(data.get("invCode")) : null);
                 saleOrder.setInvName(data.get("invName") != null ? String.valueOf(data.get("invName")) : null);
                 saleOrder.setInvStd(data.get("invStd") != null ? String.valueOf(data.get("invStd")) : null);
-                saleOrder.setOrderQty(
-                        data.get("orderQty") != null ? Double.valueOf(String.valueOf(data.get("orderQty"))) : null);
-                saleOrder.setProductQty(
-                        data.get("productQty") != null ? Double.valueOf(String.valueOf(data.get("productQty"))) : null);
-                saleOrder
-                        .setInQty(data.get("inQty") != null ? Double.valueOf(String.valueOf(data.get("inQty"))) : null);
-                saleOrder.setOutQty(
-                        data.get("outQty") != null ? Double.valueOf(String.valueOf(data.get("outQty"))) : null);
-                saleOrder.setOutAmount(
-                        data.get("outAmount") != null ? Double.valueOf(String.valueOf(data.get("outAmount"))) : null);
-                saleOrder.setOutPrice(
-                        data.get("outPrice") != null ? Double.valueOf(String.valueOf(data.get("outPrice"))) : null);
-                saleOrder.setIcsbeqty(
-                        data.get("icsbeqty") != null ? Double.valueOf(String.valueOf(data.get("icsbeqty"))) : null);
-                saleOrder.setSeoseqty(
-                        data.get("seoseqty") != null ? Double.valueOf(String.valueOf(data.get("seoseqty"))) : null);
+                
+                saleOrder.setOrderQty(parseDoubleSafely(data.get("orderQty")));
+                saleOrder.setProductQty(parseDoubleSafely(data.get("productQty")));
+                saleOrder.setInQty(parseDoubleSafely(data.get("inQty")));
+                saleOrder.setOutQty(parseDoubleSafely(data.get("outQty")));
+                saleOrder.setOutAmount(parseDoubleSafely(data.get("outAmount")));
+                saleOrder.setOutPrice(parseDoubleSafely(data.get("outPrice")));
+                saleOrder.setIcsbeqty(parseDoubleSafely(data.get("icsbeqty")));
+                saleOrder.setSeoseqty(parseDoubleSafely(data.get("seoseqty")));
+                
                 // 鏃ユ湡瀛楁澶勭悊
                 if (data.get("deliveryDate") != null && !Cools.isEmpty(String.valueOf(data.get("deliveryDate")))) {
                     try {
@@ -212,15 +278,22 @@
                         // 灏濊瘯浣跨敤 DateUtils 瑙f瀽鍏朵粬鏍煎紡
                         saleOrder.setDeliveryDate(DateUtils.convert(String.valueOf(data.get("deliveryDate"))));
                     }
+                } else {
+                    saleOrder.setDeliveryDate(null);
                 }
-                saleOrderService.insert(saleOrder);
-                successCount++;
+                
+                // 淇濆瓨鎴栨洿鏂�
+                if (isUpdate) {
+                    saleOrderService.updateById(saleOrder);
+                } else {
+                    saleOrderService.insert(saleOrder);
+                }
             } catch (Exception e) {
                 // 璁板綍澶辫触鐨勮褰曪紝缁х画澶勭悊涓嬩竴鏉�
                 e.printStackTrace();
             }
         }
-        return R.ok("鎴愬姛淇濆瓨 " + successCount + " 鏉℃暟鎹�");
+        return R.ok("鎴愬姛淇濆瓨 " + successCount + " 鏉℃柊鏁版嵁锛屾洿鏂� " + updateCount + " 鏉″凡瀛樺湪鏁版嵁");
     }
 
     @RequestMapping(value = "/saleOrder/update/auth")
diff --git a/src/main/webapp/static/js/salesOrder/salsesOrder.js b/src/main/webapp/static/js/salesOrder/salsesOrder.js
index f825f52..730d107 100644
--- a/src/main/webapp/static/js/salesOrder/salsesOrder.js
+++ b/src/main/webapp/static/js/salesOrder/salsesOrder.js
@@ -17,7 +17,9 @@
         , { field: 'izReceive', align: 'center', title: '灏忚鍗�', width: 80 }
         , { field: 'inQty', align: 'center', title: '鍏ュ簱鏁伴噺', width: 110 }
         , { field: 'disQty', align: 'center', title: '閫氱煡鍗�', width: 110 }
-        , { field: 'outQty', align: 'center', title: '鍑哄簱鏁伴噺', width: 110 }
+        , { field: 'icsbeqty', align: 'center', title: '鍑鸿揣閫氱煡鏁�', width: 110 }
+        , { field: 'seoseqty', align: 'center', title: '瀹炲嚭鏁伴噺', width: 110 }
+        , { field: 'outQty', align: 'center', title: '瀵硅处鏁伴噺', width: 110 }
         , { field: 'invoiceQty', align: 'center', title: '寮�绁ㄦ暟閲�', width: 110 }
         , { field: 'unInvoiceQty', align: 'center', title: '鏈紑绁ㄦ暟閲�', width: 110 }
         , { field: 'deliveryDate', align: 'center', title: '浜よ揣鏃ユ湡', width: 110 }

--
Gitblit v1.9.1