rsf-admin/src/page/orders/asnOrder/AsnOrderList.jsx
@@ -51,7 +51,6 @@ import CloseIcon from '@mui/icons-material/Close'; import EditIcon from '@mui/icons-material/Edit'; import TaskIcon from '@mui/icons-material/Task'; import CloudUploadIcon from '@mui/icons-material/CloudUpload'; import { styled } from '@mui/material/styles'; import AsnOrderModal from "./AsnOrderModal"; import request from '@/utils/request'; @@ -182,7 +181,6 @@ <MyButton setCreateDialog={setCreateDialog} setmodalType={setmodalType} /> {/* <InspectionButton /> 报检按钮暂不使用 */} <CompleteButton /> <CloudWmsAsnReportButton /> <ODeleteButton /> <PrintButton setPrintOrder={setPrintOrder} setSelect={setSelect} /> {/* <CloseButton /> */} @@ -214,31 +212,6 @@ ) } export default AsnOrderList; /** manual:放行该单暂缓的云仓上报待办(send_hold);wait_order 一般由调度放行 */ const CloudWmsAsnReportButton = () => { const record = useRecordContext(); const notify = useNotify(); const refresh = useRefresh(); const onClick = async (e) => { e.stopPropagation(); try { const res = await request.post('/asnOrder/cloudWmsReport/submit', { code: record?.code }); const { code, msg } = res.data || {}; if (code === 200) { notify(msg || '已提交', { type: 'success' }); refresh(); } else { notify(msg || '操作失败', { type: 'warning' }); } } catch (err) { notify(err?.message || '请求失败', { type: 'warning' }); } }; return ( <Button label="云仓上报" size="small" onClick={onClick} startIcon={<CloudUploadIcon />}/> ); }; //按PO单新建 const CreateByPoButton = ({ setPoCreate }) => { rsf-admin/src/page/orders/outStock/OutOrderList.jsx
@@ -59,7 +59,6 @@ import TaskIcon from '@mui/icons-material/Task'; import OutOrderPreview from "./OutOrderPreview"; import AddIcon from '@mui/icons-material/Add'; import CloudUploadIcon from '@mui/icons-material/CloudUpload'; import OutStockPublic from "./OutStockPublic"; import OutOrderModal from "./OutOrderModal"; import request from '@/utils/request'; @@ -329,32 +328,7 @@ {isInit && <MyButton setCreateDialog={setCreateDialog} setmodalType={setmodalType} />} <EditButton label="toolbar.detail" icon={(<DetailsIcon />)} /> <PublicButton setDrawerVal={setDrawerVal} drawerVal={drawerVal} setSelect={setSelect} /> <CloudWmsOutReportButton /> </> ); }; const CloudWmsOutReportButton = () => { const record = useRecordContext(); const notify = useNotify(); const refresh = useRefresh(); const onClick = async (e) => { e.stopPropagation(); try { const res = await request.post('/outStock/cloudWmsReport/submit', { code: record?.code }); const { code, msg } = res.data || {}; if (code === 200) { notify(msg || '已提交', { type: 'success' }); refresh(); } else { notify(msg || '操作失败', { type: 'warning' }); } } catch (err) { notify(err?.message || '请求失败', { type: 'warning' }); } }; return ( <Button label="云仓上报" size="small" onClick={onClick} startIcon={<CloudUploadIcon />} /> ); }; rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderLogController.java
@@ -36,7 +36,7 @@ @PreAuthorize("hasAuthority('manager:asnOrderLog:cloudWmsResend')") @PostMapping("/asnOrderLog/cloudWms/resendFeedback/{id}") public R resendCloudWmsFeedback(@PathVariable Long id) { return cloudWmsFeedbackResendService.resendInOutFeedbackByAsnOrderLogId(id); return cloudWmsFeedbackResendService.submitInOutCloudWmsByAsnOrderLogId(id); } @PreAuthorize("hasAuthority('manager:asnOrderLog:list')") rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/OutStockController.java
@@ -26,7 +26,6 @@ import com.vincent.rsf.server.manager.controller.params.AsnOrderAndItemsParams; import com.vincent.rsf.server.manager.entity.excel.AsnOrderTemplate; import com.vincent.rsf.server.manager.enums.AsnExceStatus; import com.vincent.rsf.server.manager.service.CloudWmsNotifyLogService; import com.vincent.rsf.server.manager.service.OutStockItemService; import com.vincent.rsf.server.manager.service.OutStockService; import com.vincent.rsf.server.system.constant.SerialRuleCode; @@ -53,16 +52,15 @@ private OutStockService outStockService; @Autowired private OutStockItemService outStockItemService; @Autowired private CloudWmsNotifyLogService cloudWmsNotifyLogService; @ApiOperation("手动触发云仓回馈(出库通知单,放行暂缓上报)") @PostMapping("/outStock/cloudWmsReport/submit") @PreAuthorize("hasAuthority('manager:outStock:list')") public R submitCloudWmsReportOutbound(@RequestBody(required = false) Map<String, Object> body) { String code = body != null && body.get("code") != null ? String.valueOf(body.get("code")).trim() : null; return cloudWmsNotifyLogService.manualFlushToNotifyByOrderCode(code, false); } // @Autowired // private CloudWmsNotifyLogService cloudWmsNotifyLogService; // @ApiOperation("手动触发云仓回馈(出库通知单,放行暂缓上报)") // @PostMapping("/outStock/cloudWmsReport/submit") // @PreAuthorize("hasAuthority('manager:outStock:cloudWmsReport')") // public R submitCloudWmsReportOutbound(@RequestBody(required = false) Map<String, Object> body) { // String code = body != null && body.get("code") != null ? String.valueOf(body.get("code")).trim() : null; // return cloudWmsNotifyLogService.manualFlushToNotifyByOrderCode(code, false); // } @PreAuthorize("hasAuthority('manager:outStock:list')") @PostMapping("/outStock/page") rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WkOrderController.java
@@ -21,7 +21,6 @@ import com.vincent.rsf.server.manager.entity.excel.AsnOrderTemplate; import com.vincent.rsf.server.manager.service.AsnOrderItemService; import com.vincent.rsf.server.manager.service.AsnOrderService; import com.vincent.rsf.server.manager.service.CloudWmsNotifyLogService; import com.vincent.rsf.server.manager.service.impl.PurchaseItemServiceImpl; import com.vincent.rsf.server.manager.service.impl.PurchaseServiceImpl; import com.vincent.rsf.server.system.constant.SerialRuleCode; @@ -49,16 +48,15 @@ private PurchaseServiceImpl purchaseService; @Autowired private PurchaseItemServiceImpl purchaseItemService; @Autowired private CloudWmsNotifyLogService cloudWmsNotifyLogService; @ApiOperation("手动触发云仓回馈(入库通知单,放行暂缓上报)") @PostMapping("/asnOrder/cloudWmsReport/submit") @PreAuthorize("hasAuthority('manager:asnOrder:list')") public R submitCloudWmsReportInbound(@RequestBody(required = false) Map<String, Object> body) { String code = body != null && body.get("code") != null ? String.valueOf(body.get("code")).trim() : null; return cloudWmsNotifyLogService.manualFlushToNotifyByOrderCode(code, true); } // @Autowired // private CloudWmsNotifyLogService cloudWmsNotifyLogService; // @ApiOperation("手动触发云仓回馈(入库通知单,放行暂缓上报)") // @PostMapping("/asnOrder/cloudWmsReport/submit") // @PreAuthorize("hasAuthority('manager:asnOrder:cloudWmsReport')") // public R submitCloudWmsReportInbound(@RequestBody(required = false) Map<String, Object> body) { // String code = body != null && body.get("code") != null ? String.valueOf(body.get("code")).trim() : null; // return cloudWmsNotifyLogService.manualFlushToNotifyByOrderCode(code, true); // } @PreAuthorize("hasAuthority('manager:asnOrder:list')") @PostMapping("/asnOrder/page") rsf-server/src/main/java/com/vincent/rsf/server/manager/service/CloudWmsFeedbackResendService.java
@@ -2,11 +2,11 @@ import com.vincent.rsf.framework.common.R; /** 按出入库历史单重发云仓入出库反馈(写入或刷新上报待办队列) */ /** 出入库历史单:云仓入出库上报(先尝试放行暂缓待办,否则按历史上报记录入队) */ public interface CloudWmsFeedbackResendService { /** * @param asnOrderLogId man_asn_order_log / AsnOrderLog 主键 */ R resendInOutFeedbackByAsnOrderLogId(Long asnOrderLogId); R submitInOutCloudWmsByAsnOrderLogId(Long asnOrderLogId); } rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/CloudWmsFeedbackResendServiceImpl.java
@@ -9,6 +9,7 @@ import com.vincent.rsf.server.api.controller.erp.params.InOutResultReportParam; import com.vincent.rsf.server.manager.entity.AsnOrderLog; import com.vincent.rsf.server.manager.entity.CloudWmsNotifyLog; import com.vincent.rsf.server.manager.enums.OrderType; import com.vincent.rsf.server.manager.service.AsnOrderLogService; import com.vincent.rsf.server.manager.service.CloudWmsFeedbackResendService; import com.vincent.rsf.server.manager.service.CloudWmsNotifyLogService; @@ -20,8 +21,7 @@ import java.util.*; /** * 从历史云仓上报记录中取「最新一条」按明细维度去重后,复制请求体写入待发送队列; * 若已存在相同请求体且仍为待发送/失败,则更新为可调度状态,不重复插入。 * 历史单触发云仓入出库上报:优先放行该单暂缓待办;若无则从历史云仓上报记录复制请求体入队。 */ @Slf4j @Service @@ -37,7 +37,7 @@ private ObjectMapper objectMapper; @Override public R resendInOutFeedbackByAsnOrderLogId(Long asnOrderLogId) { public R submitInOutCloudWmsByAsnOrderLogId(Long asnOrderLogId) { if (asnOrderLogId == null) { return R.error("参数不能为空"); } @@ -47,8 +47,18 @@ } String code = orderLog.getCode(); if (StringUtils.isBlank(code)) { return R.error("单据号为空,无法重发"); return R.error("单据号为空"); } boolean inbound = inboundFromOrderType(orderLog.getType()); R flushR = cloudWmsNotifyLogService.manualFlushToNotifyByOrderCode(code.trim(), inbound); Object flushCode = flushR.get("code"); if (flushCode instanceof Number && ((Number) flushCode).intValue() == 200) { return flushR; } return enqueueFromHistoricalNotifyLogs(asnOrderLogId, orderLog, code); } private R enqueueFromHistoricalNotifyLogs(Long asnOrderLogId, AsnOrderLog orderLog, String code) { String reportType = cloudWmsNotifyLogService.getReportTypeInOutResult(); LambdaQueryWrapper<CloudWmsNotifyLog> qw = new LambdaQueryWrapper<CloudWmsNotifyLog>() .eq(CloudWmsNotifyLog::getReportType, reportType) @@ -91,7 +101,7 @@ } } if (latestByLine.isEmpty()) { return R.error("未找到该单号对应的云仓入出库上报记录,无法重发"); return R.error("未找到该单号对应的云仓入出库上报记录"); } Date now = new Date(); int n = 0; @@ -117,7 +127,14 @@ n++; } } return R.ok("已加入云仓重发队列 " + n + " 条,将由定时任务发送").add(n); return R.ok("已加入云仓上报队列 " + n + " 条,将由定时任务发送").add(n); } private static boolean inboundFromOrderType(String type) { if (StringUtils.isBlank(type)) { return true; } return OrderType.ORDER_IN.type.equalsIgnoreCase(type.trim()); } /**