From 359a0d155942c6f31fe80a8dfad16efe13e982ea Mon Sep 17 00:00:00 2001
From: chen.lin <1442464845@qq.com>
Date: 星期一, 02 二月 2026 15:21:07 +0800
Subject: [PATCH] 校验工or0
---
src/main/java/com/zy/asrs/controller/SaleOrderController.java | 185 +++++++++++++++++++++++++++++++++++++++-------
1 files changed, 157 insertions(+), 28 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..1c96798 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,70 @@
return R.error("鏁版嵁涓嶈兘涓虹┖");
}
int successCount = 0;
+ int updateCount = 0;
+ int skipCount = 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;
+ boolean hasQtyChange = false;
+
+ if (existOrder != null) {
+ // 宸插瓨鍦紝妫�鏌ユ暟閲忓瓧娈垫槸鍚︽湁鍙樺寲
+ Double newOrderQty = parseDoubleSafely(data.get("orderQty"));
+ Double newProductQty = parseDoubleSafely(data.get("productQty"));
+ Double newInQty = parseDoubleSafely(data.get("inQty"));
+ Double newOutQty = parseDoubleSafely(data.get("outQty"));
+ Double newOutAmount = parseDoubleSafely(data.get("outAmount"));
+ Double newOutPrice = parseDoubleSafely(data.get("outPrice"));
+ Double newIcsbeqty = parseDoubleSafely(data.get("icsbeqty"));
+ Double newSeoseqty = parseDoubleSafely(data.get("seoseqty"));
+
+ // 姣旇緝鏁伴噺瀛楁鏄惁鏈夊彉鍖�
+ hasQtyChange = !isDoubleEqual(existOrder.getOrderQty(), newOrderQty)
+ || !isDoubleEqual(existOrder.getProductQty(), newProductQty)
+ || !isDoubleEqual(existOrder.getInQty(), newInQty)
+ || !isDoubleEqual(existOrder.getOutQty(), newOutQty)
+ || !isDoubleEqual(existOrder.getOutAmount(), newOutAmount)
+ || !isDoubleEqual(existOrder.getOutPrice(), newOutPrice)
+ || !isDoubleEqual(existOrder.getIcsbeqty(), newIcsbeqty)
+ || !isDoubleEqual(existOrder.getSeoseqty(), newSeoseqty);
+
+ // 鍙湁褰撴暟閲忔湁鍙樺寲鏃舵墠鏇存柊
+ if (hasQtyChange) {
+ saleOrder = existOrder;
+ isUpdate = true;
+ updateCount++;
+ } else {
+ // 鏁伴噺娌℃湁鍙樺寲锛岃烦杩囨洿鏂�
+ skipCount++;
+ continue;
+ }
+ } 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 +307,48 @@
// 灏濊瘯浣跨敤 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 + " 鏉℃暟鎹�");
+ String message = "鎴愬姛淇濆瓨 " + successCount + " 鏉℃柊鏁版嵁锛屾洿鏂� " + updateCount + " 鏉″凡瀛樺湪鏁版嵁";
+ if (skipCount > 0) {
+ message += "锛岃烦杩� " + skipCount + " 鏉℃暟閲忔湭鍙樺寲鐨勬暟鎹�";
+ }
+ return R.ok(message);
+ }
+
+ /**
+ * 姣旇緝涓や釜Double鍊兼槸鍚︾浉绛夛紙澶勭悊null鍊煎拰0鍊硷級
+ * 閲嶈锛歯ull鍜�0琚涓烘槸涓嶅悓鐨勫�硷紝闇�瑕佹洿鏂�
+ * @param d1 绗竴涓狣ouble鍊�
+ * @param d2 绗簩涓狣ouble鍊�
+ * @return true-鐩哥瓑锛宖alse-涓嶇浉绛�
+ */
+ private boolean isDoubleEqual(Double d1, Double d2) {
+ // 涓や釜閮芥槸null锛岃涓虹浉绛�
+ if (d1 == null && d2 == null) {
+ return true;
+ }
+ // 涓�涓负null锛屽彟涓�涓笉涓簄ull锛岃涓轰笉鐩哥瓑锛堥渶瑕佹洿鏂帮級
+ // 娉ㄦ剰锛歯ull鍜�0鏄笉鍚岀殑锛宯ull鍜�0.0浼氳繑鍥瀎alse锛岃Е鍙戞洿鏂�
+ if (d1 == null || d2 == null) {
+ return false;
+ }
+ // 涓や釜閮戒笉涓簄ull锛屼娇鐢ㄨ宸寖鍥存瘮杈冿紝閬垮厤娴偣鏁扮簿搴﹂棶棰�
+ // 娉ㄦ剰锛�0鍊间細琚纭瘮杈冿紝渚嬪锛�0.0鍜�0.0浼氳繑鍥瀟rue锛�100.0鍜�0.0浼氳繑鍥瀎alse
+ return Math.abs(d1 - d2) < 0.0001;
}
@RequestMapping(value = "/saleOrder/update/auth")
@@ -423,11 +551,12 @@
// 琛ㄥご
String[] headers = { "鐢熶骇鍗曞彿", "涓氬姟鍛�", "鍥惧彿", "鐗╂枡鍚嶇О", "瑙勬牸", "璁㈠崟鏁伴噺", "浜よ揣鏃ユ湡",
- "浠诲姟鍗曟暟閲�", "鎴愬搧鏁伴噺", "鍑鸿揣閫氱煡鏁�", "瀹炲嚭鏁伴噺", "瀵硅处鏁伴噺", "瀵硅处鍗曚环", "瀵硅处閲戦",
+ "浠诲姟鍗曟暟閲�", "鎴愬搧鏁伴噺", "鍑鸿揣閫氱煡鏁�", /* "瀹炲嚭鏁伴噺", */ "瀵硅处鏁伴噺", "瀵硅处鍗曚环", "瀵硅处閲戦",
"鍖呮潗鐗堣垂", "閫�绋庤祫鏂�", "寮�绁�", "鍐呴檰璐�", "鏀舵", "搴旀敹娆句綑棰�",
"瀵硅处鏁伴噺娈嬩綑", "瀵硅处閲戦娈嬩綑", "浠诲姟鍗曟畫浣�", "瀹炲嚭鏁伴噺娈嬩綑", "鏀舵娈嬩綑" };
+ // 瀹炲嚭鏁伴噺瀛楁宸查殣钘忥紝isCalc鏁扮粍闇�瑕佺浉搴旇皟鏁达紙绉婚櫎涓�涓猣alse锛�
boolean[] isCalc = { false, false, false, false, false, false, false,
- false, false, false, false, false, false, false,
+ false, false, false, /* false, */ false, false, false,
false, false, false, false, false, false,
true, true, true, true, true };
@@ -455,7 +584,7 @@
createNumCell(row, col++, order.getProductQty(), dataStyle);
createNumCell(row, col++, order.getInQty(), dataStyle);
createNumCell(row, col++, order.getIcsbeqty(), dataStyle);
- createNumCell(row, col++, order.getSeoseqty(), dataStyle);
+ // createNumCell(row, col++, order.getSeoseqty(), dataStyle);
createNumCell(row, col++, order.getOutQty(), dataStyle);
createNumCell(row, col++, order.getOutPrice(), dataStyle);
createNumCell(row, col++, order.getOutAmount(), dataStyle);
--
Gitblit v1.9.1