From d393650adc03122772ae7996486a708a46cd61e8 Mon Sep 17 00:00:00 2001 From: yinq Date: Tue, 20 May 2025 15:41:11 +0800 Subject: [PATCH] =?UTF-8?q?change=20-=20WMS=E5=AE=9A=E6=97=B6=E5=90=8C?= =?UTF-8?q?=E6=AD=A5=E5=8E=9F=E6=9D=90=E6=96=99=E5=85=A5=E5=BA=93=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=E7=BB=99ERP=E5=BE=AA=E7=8E=AF=E6=89=A7=E8=A1=8C?= =?UTF-8?q?=EF=BC=8C=E5=8F=96=E6=B6=88=E4=BA=8B=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hw/wms/controller/WmsApiController.java | 11 +++++++- .../hw/wms/service/IWmsRawInstockService.java | 8 ++++++ .../impl/WmsErpScheduledTaskServiceImpl.java | 28 +++++-------------- .../impl/WmsRawInstockServiceImpl.java | 26 +++++++++++++++-- 4 files changed, 49 insertions(+), 24 deletions(-) diff --git a/hw-modules/hw-wms/src/main/java/com/hw/wms/controller/WmsApiController.java b/hw-modules/hw-wms/src/main/java/com/hw/wms/controller/WmsApiController.java index 4ca40066..c7fca51f 100644 --- a/hw-modules/hw-wms/src/main/java/com/hw/wms/controller/WmsApiController.java +++ b/hw-modules/hw-wms/src/main/java/com/hw/wms/controller/WmsApiController.java @@ -250,9 +250,18 @@ public class WmsApiController extends BaseController { // @Log(title = "同步原材料入库信息", businessType = BusinessType.INSERT) public R synchronizeInventoryInformationToERP() { int result = 0; + StringBuilder errorBuffer = new StringBuilder(); Map> purchaseOrderIdMap = wmsErpScheduledTaskService.synchronizeInventoryInformationToERP(); for (Long purchaseOrderId : purchaseOrderIdMap.keySet()) { - wmsErpScheduledTaskService.syncInventoryInformation(purchaseOrderIdMap, purchaseOrderId, result); + try { + wmsErpScheduledTaskService.syncInventoryInformation(purchaseOrderIdMap, purchaseOrderId, result); + } catch (Exception e) { + result++; + errorBuffer.append(result).append(e.getMessage()).append("||"); + } + } + if (errorBuffer.length() > 0) { + return R.fail(errorBuffer.toString()); } return R.ok(); } diff --git a/hw-modules/hw-wms/src/main/java/com/hw/wms/service/IWmsRawInstockService.java b/hw-modules/hw-wms/src/main/java/com/hw/wms/service/IWmsRawInstockService.java index 779b3d84..8d28c9a6 100644 --- a/hw-modules/hw-wms/src/main/java/com/hw/wms/service/IWmsRawInstockService.java +++ b/hw-modules/hw-wms/src/main/java/com/hw/wms/service/IWmsRawInstockService.java @@ -88,4 +88,12 @@ public interface IWmsRawInstockService * @param wmsRawInstockContinueVo */ public int continueRawInstock(WmsRawInstockContinueVo wmsRawInstockContinueVo); + + /** + * 以独立事务方式更新WMS原材料入库单状态(不受外部事务回滚影响) + * 使用REQUIRES_NEW传播级别确保即使外部事务回滚,本方法的更新操作也会提交 + * + * @param wmsRawInstockList 需要更新的原材料入库单列表 + */ + public void updateWmsRawInStockWithoutRollback(List wmsRawInstockList); } diff --git a/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsErpScheduledTaskServiceImpl.java b/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsErpScheduledTaskServiceImpl.java index f6f4afcf..233b7108 100644 --- a/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsErpScheduledTaskServiceImpl.java +++ b/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsErpScheduledTaskServiceImpl.java @@ -18,11 +18,11 @@ import com.hw.wms.config.WmsConfig; import com.hw.wms.domain.*; import com.hw.wms.mapper.*; import com.hw.wms.service.IWmsErpScheduledTaskService; +import com.hw.wms.service.IWmsRawInstockService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import java.time.LocalDateTime; @@ -68,6 +68,9 @@ public class WmsErpScheduledTaskServiceImpl implements IWmsErpScheduledTaskServi @Autowired private WmsConfig wmsConfig; + @Autowired + private IWmsRawInstockService wmsRawInstockService; + public int i=0; //仓库编码 // private String FStockId = "CK050"; @@ -88,7 +91,7 @@ public class WmsErpScheduledTaskServiceImpl implements IWmsErpScheduledTaskServi return purchaseOrderIdMap; } - @Transactional(rollbackFor = Exception.class) +// @Transactional(rollbackFor = Exception.class) @Override public void syncInventoryInformation(Map> purchaseOrderIdMap, Long purchaseOrderId, int result) { R purchaseOrderData = remoteMesService.selectPurchaseOrderJoinSupplierProjectByOrderId(purchaseOrderId, SecurityConstants.INNER); @@ -154,34 +157,17 @@ public class WmsErpScheduledTaskServiceImpl implements IWmsErpScheduledTaskServi result++; log.info("synchronizeInventoryInformationToERP同步原材料入库成功:" + paramsResulJson); } else { - updateWmsRawInStockWithoutRollback(wmsRawInstockList); + wmsRawInstockService.updateWmsRawInStockWithoutRollback(wmsRawInstockList); log.error("synchronizeInventoryInformationToERP同步原材料入库失败:" + paramsResulJson); throw new ServiceException("同步原材料入库失败" + paramsResulJson); } } catch (Exception e) { - updateWmsRawInStockWithoutRollback(wmsRawInstockList); + wmsRawInstockService.updateWmsRawInStockWithoutRollback(wmsRawInstockList); log.error("同步原材料入库失败:" + e); throw new ServiceException("同步原材料入库失败::" + e); } } - /** - * 以独立事务方式更新WMS原材料入库单状态(不受外部事务回滚影响) - * 使用REQUIRES_NEW传播级别确保即使外部事务回滚,本方法的更新操作也会提交 - * - * @param wmsRawInstockList 需要更新的原材料入库单列表 - */ - @Transactional(propagation = Propagation.REQUIRES_NEW) - public void updateWmsRawInStockWithoutRollback(List wmsRawInstockList) { - for (WmsRawInstock rawInstock : wmsRawInstockList) { - rawInstock.setErpStatus("0");//同步ERP状态(0:失败,1成功) - rawInstock.setErpAmount(rawInstock.getInstockAmount()); - rawInstock.setUpdateDate(DateUtils.getNowDate()); - wmsRawInstockMapper.updateWmsRawInstock(rawInstock); - log.info("updateWmsRawInStockWithoutRollback原材料入库单失败状态:" + rawInstock.getRawInstockId()); - } - } - /** * 定时同步原材料出库信息给ERP * diff --git a/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsRawInstockServiceImpl.java b/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsRawInstockServiceImpl.java index c5633431..de6b1bb9 100644 --- a/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsRawInstockServiceImpl.java +++ b/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsRawInstockServiceImpl.java @@ -3,14 +3,13 @@ package com.hw.wms.service.impl; import java.math.BigDecimal; import java.util.Date; import java.util.List; -import java.util.stream.Collectors; import com.hw.common.core.constant.MesConstants; import com.hw.common.core.constant.SecurityConstants; import com.hw.common.core.constant.WmsConstants; import com.hw.common.core.domain.R; import com.hw.common.core.exception.ServiceException; -import com.hw.common.core.utils.StringUtils; +import com.hw.common.core.utils.DateUtils; import com.hw.common.core.utils.uuid.Seq; import com.hw.common.security.utils.SecurityUtils; import com.hw.mes.api.RemoteMesService; @@ -23,6 +22,8 @@ import com.hw.wms.domain.vo.*; import com.hw.wms.mapper.WmsBaseLocationMapper; import com.hw.wms.mapper.WmsRawOutstockMapper; import com.hw.wms.mapper.WmsRawStockMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; @@ -30,6 +31,7 @@ import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import com.hw.wms.mapper.WmsRawInstockMapper; import com.hw.wms.domain.WmsRawInstock; @@ -46,6 +48,9 @@ import javax.annotation.Resource; */ @Service public class WmsRawInstockServiceImpl implements IWmsRawInstockService { + + private static final Logger log = LoggerFactory.getLogger(WmsRawInstockServiceImpl.class); + @Autowired private WmsRawInstockMapper wmsRawInstockMapper; @@ -426,4 +431,21 @@ public class WmsRawInstockServiceImpl implements IWmsRawInstockService { } + /** + * 以独立事务方式更新WMS原材料入库单状态(不受外部事务回滚影响) + * 使用REQUIRES_NEW传播级别确保即使外部事务回滚,本方法的更新操作也会提交 + * + * @param wmsRawInstockList 需要更新的原材料入库单列表 + */ + @Transactional(propagation = Propagation.REQUIRES_NEW) + public void updateWmsRawInStockWithoutRollback(List wmsRawInstockList) { + for (WmsRawInstock rawInstock : wmsRawInstockList) { + rawInstock.setErpStatus("0");//同步ERP状态(0:失败,1成功) + rawInstock.setErpAmount(new BigDecimal(0)); + rawInstock.setUpdateDate(DateUtils.getNowDate()); + wmsRawInstockMapper.updateWmsRawInstock(rawInstock); + log.info("updateWmsRawInStockWithoutRollback原材料入库单失败状态:" + rawInstock.getRawInstockId()); + } + } + }