From f08dd93e49e8461f362c8f45f17fe10e0fbdebec Mon Sep 17 00:00:00 2001
From: lty <876263681@qq.com>
Date: 星期一, 12 一月 2026 18:54:58 +0800
Subject: [PATCH] #新增和得码入库流程,渝程进仓后续下发货主转换
---
src/main/java/com/zy/asrs/task/kingdee/handler/AutoTransferHandler.java | 194 ++++++++++++++++++++++++++++--------------------
1 files changed, 112 insertions(+), 82 deletions(-)
diff --git a/src/main/java/com/zy/asrs/task/kingdee/handler/AutoTransferHandler.java b/src/main/java/com/zy/asrs/task/kingdee/handler/AutoTransferHandler.java
index 84226e9..8712902 100644
--- a/src/main/java/com/zy/asrs/task/kingdee/handler/AutoTransferHandler.java
+++ b/src/main/java/com/zy/asrs/task/kingdee/handler/AutoTransferHandler.java
@@ -1,5 +1,6 @@
package com.zy.asrs.task.kingdee.handler;
+import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.zy.asrs.entity.*;
import com.zy.asrs.service.*;
@@ -44,105 +45,134 @@
@Transactional(rollbackFor = Exception.class)
public ReturnT<String> start(OrderPakin order) {
- // 鑾峰彇璇ヨ鍗曚笅鐨勬墍鏈夋槑缁�
- List<OrderDetlPakin> orderDetlPakins = orderDetlPakinService.selectList(
- new EntityWrapper<OrderDetlPakin>().eq("order_no", order.getOrderNo()));
+ JSONObject logData = new JSONObject();
+ String responseMsg = "";
+ boolean success = false;
- // 閬嶅巻姣忎釜璁㈠崟鏄庣粏杩涜搴撳瓨杞崲
- for (OrderDetlPakin orderDetlPakin : orderDetlPakins) {
- double orderQuantity = orderDetlPakin.getAnfme(); // 鏈槑缁嗛渶瑕佽浆鎹㈢殑鏁伴噺
- double remainingQuantity = orderQuantity; // 鍓╀綑鏈弧瓒崇殑鏁伴噺
- double convertedQuantity = 0.0; // 宸叉垚鍔熻浆鎹㈢殑鏁伴噺
+ try {
+ logData.put("orderNo", order.getOrderNo());
+ logData.put("docType", order.getDocType());
+ logData.put("settle", order.getSettle());
+ logData.put("startTime", System.currentTimeMillis());
- log.info("寮�濮嬪鐞嗚鍗曟槑缁�: 璁㈠崟鍙� = {}, 鐗╂枡鍙� = {}, 闇�瑕佽浆鎹㈡暟閲� = {}",
- order.getOrderNo(), orderDetlPakin.getMatnr(), orderQuantity);
+ // 鑾峰彇璇ヨ鍗曚笅鐨勬墍鏈夋槑缁�
+ List<OrderDetlPakin> orderDetlPakins = orderDetlPakinService.selectList(
+ new EntityWrapper<OrderDetlPakin>().eq("order_no", order.getOrderNo()));
- // 鏌ヨ绗﹀悎鏉′欢鐨勫彲鐢ㄥ簱瀛橈細鍚屼竴鐗╂枡 + box_type3 浠� HDU25 寮�澶�
- List<LocDetl> locDetls = locDetlService.selectList(
- new EntityWrapper<LocDetl>()
- .eq("matnr", orderDetlPakin.getMatnr())
- .like("box_type3", "HDU25%")
- .orderBy("anfme") // 鍙牴鎹笟鍔¤皟鏁存帓搴忥紙濡傚厛杩涘厛鍑猴級
- );
-
- if (locDetls.isEmpty()) {
- log.error("鏃犵鍚堟潯浠剁殑搴撳瓨: 璁㈠崟 {} 鐗╂枡 {}", order.getOrderNo(), orderDetlPakin.getMatnr());
- throw new IllegalArgumentException("鏃犵鍚堟潯浠剁殑搴撳瓨婊¤冻璁㈠崟 " + order.getOrderNo() +
- " 鐨勭墿鏂� " + orderDetlPakin.getMatnr());
+ if (orderDetlPakins.isEmpty()) {
+ throw new IllegalArgumentException("璁㈠崟 " + order.getOrderNo() + " 鏃犱换浣曟槑缁嗭紝鏃犳硶杞崲");
}
- // 閫愭潯娑堣�楀簱瀛�
- for (LocDetl locDetl : locDetls) {
- if (remainingQuantity <= 0) {
- break; // 宸插畬鍏ㄦ弧瓒抽渶姹�
+ // 閬嶅巻姣忎釜璁㈠崟鏄庣粏杩涜搴撳瓨杞崲锛堝師閫昏緫淇濇寔涓嶅彉锛�
+ for (OrderDetlPakin orderDetlPakin : orderDetlPakins) {
+ double orderQuantity = orderDetlPakin.getAnfme();
+ double remainingQuantity = orderQuantity;
+ double convertedQuantity = 0.0;
+
+ log.info("寮�濮嬪鐞嗚鍗曟槑缁�: 璁㈠崟鍙�={}, 鐗╂枡鍙�={}, 闇�瑕佽浆鎹㈡暟閲�={}",
+ order.getOrderNo(), orderDetlPakin.getMatnr(), orderQuantity);
+
+ List<LocDetl> locDetls = locDetlService.selectList(
+ new EntityWrapper<LocDetl>()
+ .eq("matnr", orderDetlPakin.getMatnr())
+ .like("box_type3", "HDU%")
+ .orderBy("anfme")
+ );
+
+ if (locDetls.isEmpty()) {
+ throw new IllegalArgumentException("鏃犵鍚堟潯浠剁殑搴撳瓨: 璁㈠崟 " + order.getOrderNo() +
+ " 鐗╂枡 " + orderDetlPakin.getMatnr());
}
- double stockQty = locDetl.getAnfme();
- if (stockQty <= 0) {
- continue; // 璺宠繃绌哄簱瀛�
+ for (LocDetl locDetl : locDetls) {
+ if (remainingQuantity <= 0) break;
+ double stockQty = locDetl.getAnfme();
+ if (stockQty <= 0) continue;
+
+ double consumeQty = Math.min(stockQty, remainingQuantity);
+
+ // 鍒涘缓鍒嗛厤璁板綍...
+ LocDetl allocated = new LocDetl();
+ BeanUtils.copyProperties(locDetl, allocated);
+ allocated.setAnfme(consumeQty);
+ allocated.setStandby1(orderDetlPakin.getStandby1());
+ allocated.setStandby2(orderDetlPakin.getStandby2());
+ allocated.setStandby3(orderDetlPakin.getStandby3());
+ allocated.setBoxType1(orderDetlPakin.getBoxType1());
+ allocated.setBoxType2(orderDetlPakin.getBoxType2());
+ allocated.setBoxType3(orderDetlPakin.getBoxType3());
+ allocated.setOrderNo(orderDetlPakin.getOrderNo());
+
+ locDetlService.insert(allocated);
+
+ // 鎵e噺鍘熷簱瀛�...
+ double remainingStock = stockQty - consumeQty;
+ if (remainingStock <= 0) {
+ locDetlService.delete(new EntityWrapper<LocDetl>()
+ .eq("loc_no", locDetl.getLocNo())
+ .eq("matnr", locDetl.getMatnr())
+ .eq("box_type3", locDetl.getBoxType3()));
+ } else {
+ locDetl.setAnfme(remainingStock);
+ locDetlService.update(locDetl, new EntityWrapper<LocDetl>()
+ .eq("loc_no", locDetl.getLocNo())
+ .eq("matnr", locDetl.getMatnr())
+ .eq("box_type3", locDetl.getBoxType3()));
+ }
+
+ convertedQuantity += consumeQty;
+ remainingQuantity -= consumeQty;
}
- // 鏈瀹為檯娑堣�楃殑鏁伴噺
- double consumeQty = Math.min(stockQty, remainingQuantity);
-
- // 鍒涘缓涓�鏉℃柊鐨勨�滃凡鍒嗛厤缁欒鍗曗�濈殑搴撳瓨璁板綍锛堝畬鏁村鍒跺師璁板綍锛�
- LocDetl allocated = new LocDetl();
- BeanUtils.copyProperties(locDetl, allocated);
-
- // 璁剧疆鍒嗛厤鏁伴噺 + 瑕嗙洊鎸囧畾瀛楁
- allocated.setAnfme(consumeQty);
- allocated.setStandby1(orderDetlPakin.getStandby1());
- allocated.setStandby2(orderDetlPakin.getStandby2());
- allocated.setStandby3(orderDetlPakin.getStandby3());
- allocated.setBoxType1(orderDetlPakin.getBoxType1());
- allocated.setBoxType2(orderDetlPakin.getBoxType2());
- allocated.setBoxType3(orderDetlPakin.getBoxType3());
- allocated.setOrderNo(orderDetlPakin.getOrderNo());
-
- // 鎻掑叆宸插垎閰嶈褰�
- locDetlService.insert(allocated);
- log.info("宸插垎閰嶅簱瀛樿褰�: 浣嶇疆={}, 鏁伴噺={}, 鍓╀綑闇�姹�={}",
- locDetl.getLocNo(), consumeQty, remainingQuantity - consumeQty);
-
- // 澶勭悊鍘熷簱瀛樿褰曪細鎵e噺鍚庢暟閲忎负0鍒欏垹闄わ紝鍚﹀垯鏇存柊鍓╀綑鏁伴噺
- double remainingStock = stockQty - consumeQty;
- if (remainingStock <= 0) {
- // 鏁伴噺姝eソ鑰楀敖鎴栧凡涓�0锛岀洿鎺ュ垹闄ゅ師璁板綍
- locDetlService.delete(new EntityWrapper<LocDetl>().eq("loc_no",locDetl.getLocNo()).eq("matnr",locDetl.getMatnr()).eq("box_type3",locDetl.getBoxType3()));
- log.info("鍘熷簱瀛樺凡鑰楀敖锛屽垹闄よ褰�: 浣嶇疆={}, 鍘熸暟閲�={}", locDetl.getLocNo(), stockQty);
- } else {
- // 浠嶆湁鍓╀綑锛屾洿鏂版暟閲�
- locDetl.setAnfme(remainingStock);
- locDetlService.update(locDetl,new EntityWrapper<LocDetl>().eq("loc_no",locDetl.getLocNo()).eq("matnr",locDetl.getMatnr()).eq("box_type3",locDetl.getBoxType3()));
- log.info("鍘熷簱瀛橀儴鍒嗘秷鑰楋紝鏇存柊鍓╀綑鏁伴噺: 浣嶇疆={}, 鍓╀綑={}", locDetl.getLocNo(), remainingStock);
+ if (remainingQuantity > 0) {
+ throw new IllegalArgumentException("搴撳瓨涓嶈冻: 璁㈠崟 " + order.getOrderNo() +
+ " 鐗╂枡 " + orderDetlPakin.getMatnr() + " 缂哄皯 " + remainingQuantity);
}
- // 鏇存柊缁熻閲�
- convertedQuantity += consumeQty;
- remainingQuantity -= consumeQty;
+ orderDetlPakin.setQty(convertedQuantity);
+ orderDetlPakinService.updateById(orderDetlPakin);
}
- // 妫�鏌ユ槸鍚﹀畬鍏ㄦ弧瓒宠鏄庣粏鐨勯渶姹�
- if (remainingQuantity > 0) {
- log.error("搴撳瓨涓嶈冻: 璁㈠崟 {} 鐗╂枡 {} 闇�姹� {}锛屼粎杞崲 {}锛岀己灏� {}",
- order.getOrderNo(), orderDetlPakin.getMatnr(), orderQuantity, convertedQuantity, remainingQuantity);
- throw new IllegalArgumentException("搴撳瓨涓嶈冻浠ユ弧瓒宠鍗� " + order.getOrderNo() +
- " 鐨勭墿鏂� " + orderDetlPakin.getMatnr() + " 闇�姹傦紝缂哄皯 " + remainingQuantity);
- }
+ // 鍏ㄩ儴鎴愬姛
+ order.setSettle(67L);
+ orderPakinServiceImpl.updateById(order);
- // 鏇存柊璁㈠崟鏄庣粏宸茶浆鎹㈡暟閲�
- orderDetlPakin.setQty(convertedQuantity);
- orderDetlPakinService.updateById(orderDetlPakin);
+ success = true;
+ responseMsg = "搴撳瓨杞崲鎴愬姛锛岃鍗曞彿: " + order.getOrderNo() + "锛屽凡璁剧疆 settle=67";
+ log.info(responseMsg);
- log.info("璁㈠崟鏄庣粏杞崲瀹屾垚: 璁㈠崟鍙� = {}, 鐗╂枡鍙� = {}, 杞崲鏁伴噺 = {}",
- order.getOrderNo(), orderDetlPakin.getMatnr(), convertedQuantity);
+ } catch (Exception e) {
+ success = false;
+ responseMsg = "搴撳瓨杞崲澶辫触: " + e.getMessage();
+ log.error("鑷姩杞崲澶辫触锛岃鍗曞彿: {}, 鍘熷洜: {}", order.getOrderNo(), e.getMessage(), e);
+
+ throw e; // 璁� @Transactional 鍥炴粴
+ } finally {
+ // 鏃犺鎴愬姛澶辫触锛岄兘璁板綍鏃ュ織
+ logData.put("endTime", System.currentTimeMillis());
+ logData.put("durationMs", logData.getLongValue("endTime") - logData.getLongValue("startTime"));
+ logData.put("success", success);
+ logData.put("message", responseMsg);
+
+ saveApiLog(logData, responseMsg, success);
}
- // 鎵�鏈夋槑缁嗗潎澶勭悊瀹屾垚锛岃缃鍗� settle = 67
- order.setSettle(67L);
- orderPakinServiceImpl.updateById(order);
- log.info("璁㈠崟鍏ㄩ儴鏄庣粏杞崲瀹屾垚锛岃缃� settle = 67锛岃鍗曞彿 = {}", order.getOrderNo());
+ return success ? SUCCESS : FAIL;
+ }
- return SUCCESS;
+ private void saveApiLog(JSONObject add, String response, boolean success) {
+ try {
+ apiLogService.save(
+ "璐т富杞崲",
+ "AutoTransferHandler",
+ null,
+ "127.0.0.1",
+ add.toJSONString(),
+ response,
+ success
+ );
+ } catch (Exception e) {
+ log.error("鎺ュ彛鏃ュ織淇濆瓨澶辫触", e);
+ }
}
}
\ No newline at end of file
--
Gitblit v1.9.1