From db06b944e7886832d20b8e3ae62b2cb70bcba30f Mon Sep 17 00:00:00 2001
From: 1 <1@123>
Date: 星期五, 17 四月 2026 13:59:50 +0800
Subject: [PATCH] lsh#订单完结
---
rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/phyz/impl/ErpReportServiceImpl.java | 170 +++++++++++++++++++++++++-------------------------------
1 files changed, 76 insertions(+), 94 deletions(-)
diff --git a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/phyz/impl/ErpReportServiceImpl.java b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/phyz/impl/ErpReportServiceImpl.java
index 3ae1048..d62a7be 100644
--- a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/phyz/impl/ErpReportServiceImpl.java
+++ b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/phyz/impl/ErpReportServiceImpl.java
@@ -14,7 +14,6 @@
import com.vincent.rsf.openApi.entity.app.OpenApiOrder;
import com.vincent.rsf.openApi.entity.app.OpenApiOrderItem;
import com.vincent.rsf.openApi.entity.app.OpenApiOrderItemMap;
-import com.vincent.rsf.openApi.entity.app.OpenApiOrderReportEvent;
import com.vincent.rsf.openApi.entity.constant.WmsConstant;
import com.vincent.rsf.openApi.entity.dto.CommonResponse;
import com.vincent.rsf.openApi.entity.phyz.*;
@@ -23,7 +22,6 @@
import com.vincent.rsf.openApi.mapper.OpenApiOrderItemMapMapper;
import com.vincent.rsf.openApi.mapper.OpenApiOrderItemMapper;
import com.vincent.rsf.openApi.mapper.OpenApiOrderMapper;
-import com.vincent.rsf.openApi.mapper.OpenApiOrderReportEventMapper;
import com.vincent.rsf.openApi.service.WmsErpService;
import com.vincent.rsf.openApi.service.phyz.ErpReportService;
import com.vincent.rsf.openApi.utils.ParamsMapUtils;
@@ -83,8 +81,6 @@
private OpenApiOrderItemMapper openApiOrderItemMapper;
@Resource
private OpenApiOrderItemMapMapper openApiOrderItemMapMapper;
- @Resource
- private OpenApiOrderReportEventMapper openApiOrderReportEventMapper;
private static final BigDecimal ZERO = BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP);
@@ -442,22 +438,10 @@
}
JSONObject root = JSONObject.parseObject(JSON.toJSONString(params));
- String eventId = pickString(root, "eventId", "EventId");
- String taskNo = pickString(root, "taskNo", "TaskNo");
- String reportNo = pickString(root, "reportNo", "ReportNo");
- if (StringUtils.isBlank(eventId) && StringUtils.isBlank(taskNo) && StringUtils.isBlank(reportNo)) {
- throw new CoolException("骞傜瓑閿笉鑳戒负绌猴紙eventId/taskNo/reportNo锛�");
- }
-
String orderNo = pickString(root, "orderNo", "OrderNo", "WMSNO", "wmsno");
if (StringUtils.isBlank(orderNo)) {
return CommonResponse.error("orderNo涓嶈兘涓虹┖");
}
-
- if (existsReportEvent(eventId, taskNo, reportNo)) {
- return CommonResponse.ok("閲嶅鍥炰紶宸插拷鐣�");
- }
- OpenApiOrderReportEvent reportEvent = saveReportEvent(eventId, taskNo, reportNo, orderNo, root.toJSONString());
// 瑙f瀽鏄庣粏锛氫紭鍏堝彇 orderItems锛圤rder鏍煎紡锛夛紝鍏煎 Data/data锛圧eportParams鏍煎紡锛�
JSONArray dataArray = pickArray(root, "orderItems", "orderItems");
@@ -478,17 +462,6 @@
mappedDataArray = dataArray;
}
- // 涓诲崟绾т俊鎭紙Order鏍煎紡涓婃姤鏃舵惡甯︼級
- String orderType = pickString(root, "type", "Type");
- String wkType = pickString(root, "wkType", "WkType");
- String poCode = pickString(root, "poCode", "PoCode", "PONO");
- String editUser = pickString(root, "editUser", "EditUser");
- Date editDate = null;
- Object editDateObj = root.get("editDate");
- if (editDateObj instanceof Number) {
- editDate = toDate(((Number) editDateObj).longValue());
- }
-
int allocateCount = 0;
List<String> errors = new ArrayList<>();
Set<String> affectedOrderNos = new HashSet<>();
@@ -496,8 +469,6 @@
for (int i = 0; i < mappedDataArray.size(); i++) {
JSONObject row = mappedDataArray.getJSONObject(i);
- // Order鏍煎紡锛歮atNr/anfme/batch/doneQty/lineId
- // ReportParams鏍煎紡鍏煎锛欼temCode/InQty/OutQty/GoodsNO
String matnrCode = pickString(row, "matNr", "MatNr", "ItemCode", "itemCode");
String batch = pickString(row, "batch", "Batch", "GoodsNO", "goodsNo");
String lineId = pickString(row, "lineId", "LineId", "sourceLineId");
@@ -523,28 +494,9 @@
refreshOrderFinishStatus(no);
}
- // 缁勮ReportParams涓婃姤ERP锛堜竴娆℃�ф暣鍗曚笂鎶ワ級
- try {
- ReportParams erpReportParams = buildReportParamsFromOrderData(orderNo, poCode, orderType, wkType, editUser, editDate, mappedDataArray);
- CommonResponse erpResp = wmsErpService.reportOrders(erpReportParams);
- if (Objects.nonNull(erpResp) && Objects.equals(erpResp.getCode(), 200)) {
- log.info("涓婃姤ERP鎴愬姛锛宱rderNo={}", orderNo);
- } else {
- String msg = Objects.isNull(erpResp) ? "ERP鍝嶅簲涓虹┖" : erpResp.getMsg();
- errors.add("涓婃姤ERP澶辫触锛�" + msg);
- }
- } catch (Exception e) {
- log.error("涓婃姤ERP寮傚父", e);
- errors.add("涓婃姤ERP寮傚父锛�" + e.getMessage());
- }
-
if (!errors.isEmpty()) {
- reportEvent.setStatus(2);
- openApiOrderReportEventMapper.updateById(reportEvent);
return CommonResponse.error("澶勭悊瀹屾垚锛屼絾瀛樺湪寮傚父锛�" + String.join(" | ", errors));
}
- reportEvent.setStatus(1);
- openApiOrderReportEventMapper.updateById(reportEvent);
Map<String, Object> result = new HashMap<>();
result.put("allocatedCount", allocateCount);
@@ -552,39 +504,88 @@
}
/**
- * 鏍规嵁Order鏍煎紡鏁版嵁缁勮ReportParams锛屽弬鐓ф棫閾捐矾wmsErpService.reportOrders鏍煎紡涓婃姤ERP
+ * 鏌ヨ宸插畬鎴愪絾鏈笂鎶RP鐨勮鍗曪紝缁勮ReportParams涓婃姤ERP
+ * 鐢盿srs-schedule瀹氭椂浠诲姟瑙﹀彂
*/
- private ReportParams buildReportParamsFromOrderData(String orderNo, String poCode, String type, String wkType,
- String editUser, Date editDate, JSONArray dataArray) {
- // 鏍规嵁wkType/type纭畾ERP涓婃姤鐨凮rderType
- String erpOrderType = resolveErpOrderType(type, wkType);
+ @Override
+ public CommonResponse reportOrdersToErp() {
+ List<OpenApiOrder> pendingOrders = openApiOrderMapper.selectList(new LambdaQueryWrapper<OpenApiOrder>()
+ .eq(OpenApiOrder::getExceStatus, 2)
+ .eq(OpenApiOrder::getNtyStatus, 0)
+ .last("limit 50"));
+ if (pendingOrders.isEmpty()) {
+ return CommonResponse.ok("鏃犲緟涓婃姤ERP鐨勮鍗�");
+ }
+
+ List<String> errors = new ArrayList<>();
+ int successCount = 0;
+ for (OpenApiOrder order : pendingOrders) {
+ try {
+ List<OpenApiOrderItem> items = openApiOrderItemMapper.selectList(new LambdaQueryWrapper<OpenApiOrderItem>()
+ .eq(OpenApiOrderItem::getOrderId, order.getId()));
+ if (items.isEmpty()) {
+ log.warn("璁㈠崟鏃犳槑缁嗭紝璺宠繃涓婃姤ERP锛宱rderNo={}", order.getCode());
+ continue;
+ }
+
+ ReportParams erpParams = buildReportParams(order, items);
+ CommonResponse erpResp = wmsErpService.reportOrders(erpParams);
+ if (Objects.nonNull(erpResp) && Objects.equals(erpResp.getCode(), 200)) {
+ order.setNtyStatus(1);
+ openApiOrderMapper.updateById(order);
+ successCount++;
+ log.info("涓婃姤ERP鎴愬姛锛宱rderNo={}", order.getCode());
+ } else {
+ String msg = Objects.isNull(erpResp) ? "ERP鍝嶅簲涓虹┖" : erpResp.getMsg();
+ log.warn("涓婃姤ERP澶辫触锛宱rderNo={}锛宮sg={}", order.getCode(), msg);
+ errors.add(order.getCode() + ":" + msg);
+ }
+ } catch (Exception e) {
+ log.error("涓婃姤ERP寮傚父锛宱rderNo={}", order.getCode(), e);
+ errors.add(order.getCode() + ":" + e.getMessage());
+ }
+ }
+
+ if (!errors.isEmpty()) {
+ Map<String, Object> result = new HashMap<>();
+ result.put("successCount", successCount);
+ result.put("totalCount", pendingOrders.size());
+ return CommonResponse.error("閮ㄥ垎璁㈠崟涓婃姤ERP澶辫触锛�" + String.join(" | ", errors));
+ }
+
+ Map<String, Object> result = new HashMap<>();
+ result.put("successCount", successCount);
+ result.put("totalCount", pendingOrders.size());
+ return CommonResponse.ok(result);
+ }
+
+ /**
+ * 浠嶰penApiOrder+OpenApiOrderItem缁勮ReportParams
+ */
+ private ReportParams buildReportParams(OpenApiOrder order, List<OpenApiOrderItem> items) {
+ String erpOrderType = resolveErpOrderType(order.getType(), order.getWkType());
List<ReportDataParam> reportDataList = new ArrayList<>();
- for (int i = 0; i < dataArray.size(); i++) {
- JSONObject row = dataArray.getJSONObject(i);
- String matnrCode = pickString(row, "matNr", "MatNr", "ItemCode", "itemCode");
- String batch = pickString(row, "batch", "Batch", "GoodsNO", "goodsNo");
- BigDecimal doneQty = pickDecimal(row, "doneQty", "anfme", "qty", "InQty", "inQty", "OutQty", "outQty");
+ for (OpenApiOrderItem item : items) {
+ BigDecimal qty = defaultQty(item.getQty());
+ if (qty.compareTo(ZERO) <= 0) {
+ continue;
+ }
ReportDataParam dataParam = new ReportDataParam()
- .setWMSNO(orderNo)
- .setPONO(poCode)
- .setOrderNO(orderNo)
- .setGoodsNO(batch)
- .setItemCode(matnrCode)
- .setEditUser(editUser)
- .setEditDate(editDate)
- .setMemoDtl(pickString(row, "memo", "MemoDtl"));
+ .setWMSNO(order.getCode())
+ .setPONO(order.getPoCode())
+ .setOrderNO(order.getCode())
+ .setGoodsNO(item.getBatch())
+ .setItemCode(item.getMatnrCode())
+ .setEditUser("schedule")
+ .setEditDate(new Date())
+ .setMemoDtl(item.getMemo());
- // 鍏ュ簱绫诲瀷璁綢nQty锛屽嚭搴撶被鍨嬭OutQty
- if ("in".equalsIgnoreCase(type)) {
- if (doneQty.compareTo(ZERO) > 0) {
- dataParam.setInQty(doneQty.doubleValue());
- }
+ if ("in".equalsIgnoreCase(order.getType())) {
+ dataParam.setInQty(qty.doubleValue());
} else {
- if (doneQty.compareTo(ZERO) > 0) {
- dataParam.setOutQty(doneQty.doubleValue());
- }
+ dataParam.setOutQty(qty.doubleValue());
}
reportDataList.add(dataParam);
@@ -633,6 +634,7 @@
.setQty(ZERO)
.setWorkQty(ZERO)
.setExceStatus(0)
+ .setNtyStatus(0)
.setStatus(1)
.setBusinessTime(businessTime)
.setOrderInternalCode(order.getOrderInternalCode())
@@ -794,26 +796,6 @@
}
merged.setOrderItems(mergedItems);
return merged;
- }
-
- private boolean existsReportEvent(String eventId, String taskNo, String reportNo) {
- return openApiOrderReportEventMapper.selectCount(new LambdaQueryWrapper<OpenApiOrderReportEvent>()
- .eq(OpenApiOrderReportEvent::getEventId, defaultString(eventId))
- .eq(OpenApiOrderReportEvent::getTaskNo, defaultString(taskNo))
- .eq(OpenApiOrderReportEvent::getReportNo, defaultString(reportNo))
- .eq(OpenApiOrderReportEvent::getStatus, 1)) > 0;
- }
-
- private OpenApiOrderReportEvent saveReportEvent(String eventId, String taskNo, String reportNo, String orderCode, String payload) {
- OpenApiOrderReportEvent event = new OpenApiOrderReportEvent()
- .setEventId(defaultString(eventId))
- .setTaskNo(defaultString(taskNo))
- .setReportNo(defaultString(reportNo))
- .setOrderCode(orderCode)
- .setPayload(payload)
- .setStatus(0);
- openApiOrderReportEventMapper.insert(event);
- return event;
}
private int allocateMergedDoneQty(String orderNo, String matnrCode, String batch, String lineId, BigDecimal mergedDoneQty, Map<String, OpenApiOrder> orderCache) {
--
Gitblit v1.9.1