From 1bdedf3e0df1f83780c284138cc9d743795bef91 Mon Sep 17 00:00:00 2001 From: cabbage <281119120@qq.com> Date: Tue, 12 Aug 2025 16:44:19 +0800 Subject: [PATCH] =?UTF-8?q?##=20=E5=85=A8=E7=BD=91=E4=BA=A7=E5=93=81?= =?UTF-8?q?=E5=BA=93=E5=AD=98=E5=90=8C=E6=AD=A5=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/RetailOrderServiceImpl.java | 71 +++++++++++++++++++ .../sale/order/mapper/SaOrderSyncMapper.java | 11 +++ .../order/service/ISaOrderSyncService.java | 11 +++ .../service/impl/SaOrderSyncServiceImpl.java | 15 ++++ .../mapper/sale/order/SaOrderSyncMapper.xml | 5 ++ .../com/hzs/common/core/config/BdConfig.java | 39 +++++++--- .../com/hzs/common/core/enums/EDefault.java | 8 +-- .../com/hzs/common/core/enums/ESysName.java | 53 ++++++++++++++ .../common/domain/sale/order/SaOrderSync.java | 57 +++++++++++++++ 9 files changed, 254 insertions(+), 16 deletions(-) create mode 100644 bd-business/bd-business-sale/src/main/java/com/hzs/sale/order/mapper/SaOrderSyncMapper.java create mode 100644 bd-business/bd-business-sale/src/main/java/com/hzs/sale/order/service/ISaOrderSyncService.java create mode 100644 bd-business/bd-business-sale/src/main/java/com/hzs/sale/order/service/impl/SaOrderSyncServiceImpl.java create mode 100644 bd-business/bd-business-sale/src/main/resources/mapper/sale/order/SaOrderSyncMapper.xml create mode 100644 bd-common/bd-common-core/src/main/java/com/hzs/common/core/enums/ESysName.java create mode 100644 bd-common/bd-common-domain/src/main/java/com/hzs/common/domain/sale/order/SaOrderSync.java diff --git a/bd-business/bd-business-sale/src/main/java/com/hzs/retail/sale/controller/service/impl/RetailOrderServiceImpl.java b/bd-business/bd-business-sale/src/main/java/com/hzs/retail/sale/controller/service/impl/RetailOrderServiceImpl.java index 36a92481..a886a04a 100644 --- a/bd-business/bd-business-sale/src/main/java/com/hzs/retail/sale/controller/service/impl/RetailOrderServiceImpl.java +++ b/bd-business/bd-business-sale/src/main/java/com/hzs/retail/sale/controller/service/impl/RetailOrderServiceImpl.java @@ -1,11 +1,15 @@ package com.hzs.retail.sale.controller.service.impl; +import cn.hutool.core.codec.Base64Encoder; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Validator; +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpUtil; import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.hzs.activity.pick.service.IAcPickMemberLogService; import com.hzs.activity.pick.service.IAcPickService; +import com.hzs.common.core.config.BdConfig; import com.hzs.common.core.constant.*; import com.hzs.common.core.domain.R; import com.hzs.common.core.enums.*; @@ -13,6 +17,7 @@ import com.hzs.common.core.enums.retail.ERetailWaresPrice; import com.hzs.common.core.exception.ServiceException; import com.hzs.common.core.service.RedisService; import com.hzs.common.core.utils.*; +import com.hzs.common.core.web.domain.AjaxResult; import com.hzs.common.domain.activity.pick.AcPick; import com.hzs.common.domain.activity.pick.AcPickMemberLog; import com.hzs.common.domain.member.account.CuMemberAccount; @@ -22,6 +27,7 @@ import com.hzs.common.domain.sale.ext.BdWaresDetailExt; import com.hzs.common.domain.sale.ext.SaOrderExt; import com.hzs.common.domain.sale.ext.SaOrderWaresLimitExt; import com.hzs.common.domain.sale.order.*; +import com.hzs.common.domain.sale.product.BdProduct; import com.hzs.common.domain.sale.wares.BdWaresRange; import com.hzs.common.domain.system.base.BdStorehouse; import com.hzs.common.domain.system.config.BdGrade; @@ -37,6 +43,7 @@ import com.hzs.retail.sale.param.RetailOrderUpgradeParam; import com.hzs.sale.order.param.OrderItemsParam; import com.hzs.sale.order.service.*; import com.hzs.sale.order.service.impl.SaOrderHandle; +import com.hzs.sale.product.service.IBdProductService; import com.hzs.sale.wares.service.IBdWaresDetailService; import com.hzs.sale.wares.service.IBdWaresExtendService; import com.hzs.sale.wares.service.IBdWaresRangeService; @@ -71,6 +78,8 @@ public class RetailOrderServiceImpl implements IRetailOrderService { @Autowired private ISaOrderWaresService iSaOrderWaresService; @Autowired + private IBdProductService iBdProductService; + @Autowired private IBdWaresExtendService iBdWaresExtendService; @Autowired private IBdWaresDetailService iBdWaresDetailService; @@ -86,6 +95,8 @@ public class RetailOrderServiceImpl implements IRetailOrderService { private IAcPickService iAcPickService; @Autowired private IAcPickMemberLogService iAcPickMemberLogService; + @Autowired + private ISaOrderSyncService iSaOrderSyncService; @Autowired private RedisService redisService; @@ -537,6 +548,8 @@ public class RetailOrderServiceImpl implements IRetailOrderService { log.error("新零售 payRegSaOrder 会员注册失败,{}", saveResult.getMsg()); throw new RuntimeException("会员注册失败"); } + // 同步全网产品库存 + this.allProductSync(saOrderExt); return null; } @@ -559,6 +572,8 @@ public class RetailOrderServiceImpl implements IRetailOrderService { log.error("新零售 payUpgOrder 会员升级失败,{}", saveResult.getMsg()); throw new RuntimeException("会员升级失败"); } + // 同步全网产品库存 + this.allProductSync(saOrderExt); return null; } @@ -578,6 +593,8 @@ public class RetailOrderServiceImpl implements IRetailOrderService { log.error("新零售 payOtherOrder 会员其它订单失败,{}", saveResult.getMsg()); throw new RuntimeException("下单支付失败"); } + // 同步全网产品库存 + this.allProductSync(saOrderExt); return null; } @@ -929,4 +946,58 @@ public class RetailOrderServiceImpl implements IRetailOrderService { } } + /** + * 同步全网产品库存 + * + * @param saOrderExt + */ + private void allProductSync(SaOrderExt saOrderExt) { + if (EYesNo.NO.getIntValue() == BdConfig.getProductSync()) { + return; + } + Map productMap = iBdProductService.queryProductMap(saOrderExt.getOrderItemsList().stream().map(SaOrderItems::getPkProduct).collect(Collectors.toSet()), null); + // 开启线程调用全网产品库存 + // 请求参数 + Map bodyMap = new HashMap<>(); + bodyMap.put("source", BdConfig.getSysName()); + bodyMap.put("orderCode", saOrderExt.getOrderCode()); + List> bodyDetailList = new ArrayList<>(); + for (SaOrderItems saOrderItems : saOrderExt.getOrderItemsList()) { + Map detailMap = new HashMap<>(); + detailMap.put("wmsCode", productMap.get(saOrderItems.getPkProduct()).getWmsCode()); + detailMap.put("changeNum", saOrderItems.getQuantity()); + bodyDetailList.add(detailMap); + } + bodyMap.put("detailList", bodyDetailList); + // 请求头 + String header = Base64Encoder.encode(BdConfig.getSysName() + "!" + saOrderExt.getOrderCode()); + ThreadUtils.threadPoolExecutor.submit(() -> { + log.info("同步产品,header: {}", header); + log.info("同步产品,bodyMap: {}", bodyMap); + HttpRequest httpRequest = HttpUtil.createPost(BdConfig.getProductSyncUrl()); + httpRequest.header("authorization", header); + httpRequest.body(JSONUtil.toJsonStr(bodyMap)); + httpRequest.setReadTimeout(5000); + try { + // 同步产品接口返回 + String resultStr = httpRequest.execute().body(); + AjaxResult ajaxResult = JSONUtil.toBean(resultStr, AjaxResult.class); + log.info("同步产品,resultStr: {}", resultStr); + if (!ajaxResult.isSuccess()) { + // 同步产品失败,250毫秒后重试 + Thread.sleep(250); + resultStr = httpRequest.execute().body(); + log.info("同步产品失败重试,resultStr: {}", resultStr); + } + } catch (Exception e) { + log.error("同步产品库存异常", e); + // 保存订单产品同步记录 + iSaOrderSyncService.save(SaOrderSync.builder() + .orderCode(saOrderExt.getOrderCode()) + .bodyDetail(JSONUtil.toJsonStr(bodyDetailList)) + .build()); + } + }); + } + } diff --git a/bd-business/bd-business-sale/src/main/java/com/hzs/sale/order/mapper/SaOrderSyncMapper.java b/bd-business/bd-business-sale/src/main/java/com/hzs/sale/order/mapper/SaOrderSyncMapper.java new file mode 100644 index 00000000..ff8dfead --- /dev/null +++ b/bd-business/bd-business-sale/src/main/java/com/hzs/sale/order/mapper/SaOrderSyncMapper.java @@ -0,0 +1,11 @@ +package com.hzs.sale.order.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.hzs.common.domain.sale.order.SaOrderSync; + +/** + * 订单产品同步记录 Mapper 接口 + */ +public interface SaOrderSyncMapper extends BaseMapper { + +} diff --git a/bd-business/bd-business-sale/src/main/java/com/hzs/sale/order/service/ISaOrderSyncService.java b/bd-business/bd-business-sale/src/main/java/com/hzs/sale/order/service/ISaOrderSyncService.java new file mode 100644 index 00000000..ce5897bc --- /dev/null +++ b/bd-business/bd-business-sale/src/main/java/com/hzs/sale/order/service/ISaOrderSyncService.java @@ -0,0 +1,11 @@ +package com.hzs.sale.order.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.hzs.common.domain.sale.order.SaOrderSync; + +/** + * 订单产品同步记录 服务类 + */ +public interface ISaOrderSyncService extends IService { + +} diff --git a/bd-business/bd-business-sale/src/main/java/com/hzs/sale/order/service/impl/SaOrderSyncServiceImpl.java b/bd-business/bd-business-sale/src/main/java/com/hzs/sale/order/service/impl/SaOrderSyncServiceImpl.java new file mode 100644 index 00000000..bce905ad --- /dev/null +++ b/bd-business/bd-business-sale/src/main/java/com/hzs/sale/order/service/impl/SaOrderSyncServiceImpl.java @@ -0,0 +1,15 @@ +package com.hzs.sale.order.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.hzs.common.domain.sale.order.SaOrderSync; +import com.hzs.sale.order.mapper.SaOrderSyncMapper; +import com.hzs.sale.order.service.ISaOrderSyncService; +import org.springframework.stereotype.Service; + +/** + * 订单产品同步记录 服务实现类 + */ +@Service +public class SaOrderSyncServiceImpl extends ServiceImpl implements ISaOrderSyncService { + +} diff --git a/bd-business/bd-business-sale/src/main/resources/mapper/sale/order/SaOrderSyncMapper.xml b/bd-business/bd-business-sale/src/main/resources/mapper/sale/order/SaOrderSyncMapper.xml new file mode 100644 index 00000000..f4ef63e1 --- /dev/null +++ b/bd-business/bd-business-sale/src/main/resources/mapper/sale/order/SaOrderSyncMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/bd-common/bd-common-core/src/main/java/com/hzs/common/core/config/BdConfig.java b/bd-common/bd-common-core/src/main/java/com/hzs/common/core/config/BdConfig.java index 06279ca0..f27f626f 100644 --- a/bd-common/bd-common-core/src/main/java/com/hzs/common/core/config/BdConfig.java +++ b/bd-common/bd-common-core/src/main/java/com/hzs/common/core/config/BdConfig.java @@ -10,6 +10,11 @@ import org.springframework.stereotype.Component; @ConfigurationProperties(prefix = "bd") public class BdConfig { + /** + * 系统名称(ESysName) + */ + private static String sysName; + /** * 当前环境 */ @@ -32,14 +37,21 @@ public class BdConfig { // */ // private static String android; - private static Integer enable; + /** + * 商品同步是否开启(0=开启,1=不开启) + */ + private static Integer productSync; + /** + * 商品同步地址 + */ + private static String productSyncUrl; - public static String getEnv() { - return env; + public static String getSysName() { + return sysName; } - public void setEnv(String env) { - BdConfig.env = env; + public void setSysName(String sysName) { + BdConfig.sysName = sysName; } public static String getPc() { @@ -74,11 +86,20 @@ public class BdConfig { // HzsConfig.android = android; // } - public static Integer getEnable() { - return enable; + public static Integer getProductSync() { + return productSync; } - public void setEnable(Integer enable) { - BdConfig.enable = enable; + public void setProductSync(Integer productSync) { + BdConfig.productSync = productSync; } + + public static String getProductSyncUrl() { + return productSyncUrl; + } + + public void setProductSyncUrl(String productSyncUrl) { + BdConfig.productSyncUrl = productSyncUrl; + } + } diff --git a/bd-common/bd-common-core/src/main/java/com/hzs/common/core/enums/EDefault.java b/bd-common/bd-common-core/src/main/java/com/hzs/common/core/enums/EDefault.java index a2fd6969..d1606575 100644 --- a/bd-common/bd-common-core/src/main/java/com/hzs/common/core/enums/EDefault.java +++ b/bd-common/bd-common-core/src/main/java/com/hzs/common/core/enums/EDefault.java @@ -4,13 +4,8 @@ import lombok.AllArgsConstructor; import lombok.Getter; /** - * @Description: 是否默认 - * @Author: ljc - * @Time: 2022/9/27 10:31 - * @Classname: EDefault - * @Package_name: com.hzs.common.core.enums + * 是否默认 */ - @AllArgsConstructor @Getter public enum EDefault { @@ -36,5 +31,4 @@ public enum EDefault { */ private final String label; - } diff --git a/bd-common/bd-common-core/src/main/java/com/hzs/common/core/enums/ESysName.java b/bd-common/bd-common-core/src/main/java/com/hzs/common/core/enums/ESysName.java new file mode 100644 index 00000000..709b4e5c --- /dev/null +++ b/bd-common/bd-common-core/src/main/java/com/hzs/common/core/enums/ESysName.java @@ -0,0 +1,53 @@ +package com.hzs.common.core.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 系统名称 + */ +@AllArgsConstructor +@Getter +public enum ESysName { + + MANAGE("manage", "后台管理"), + + /** + * 新零售 + */ + BF("bf", "新零售BF"), + /** + * 新零售店铺 + */ + BL("bl", "新零售店铺BL"), + + ; + + /** + * 实际值 + */ + private final String value; + /** + * 显示标签 + */ + private final String label; + + public static ESysName getEnumByValue(String value) { + for (ESysName enums : ESysName.values()) { + if (enums.getValue().equals(value)) { + return enums; + } + } + return null; + } + + public static String getLabelByValue(String value) { + for (ESysName enums : ESysName.values()) { + if (enums.getValue().equals(value)) { + return enums.getLabel(); + } + } + return ""; + } + +} diff --git a/bd-common/bd-common-domain/src/main/java/com/hzs/common/domain/sale/order/SaOrderSync.java b/bd-common/bd-common-domain/src/main/java/com/hzs/common/domain/sale/order/SaOrderSync.java new file mode 100644 index 00000000..0285fb73 --- /dev/null +++ b/bd-common/bd-common-domain/src/main/java/com/hzs/common/domain/sale/order/SaOrderSync.java @@ -0,0 +1,57 @@ +package com.hzs.common.domain.sale.order; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.*; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.util.Date; + +/** + * 订单产品同步记录 + */ +@Builder +@AllArgsConstructor +@NoArgsConstructor +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@TableName("SA_ORDER_SYNC") +public class SaOrderSync implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @TableId("PK_ID") + private Long pkId; + + /** + * 订单编号 + */ + @TableField("ORDER_CODE") + private String orderCode; + + /** + * 产品明细列表 + */ + @TableField("BODY_DETAIL") + private String bodyDetail; + + /** + * 创建时间 + */ + @TableField("CREATION_TIME") + private Date creationTime; + + /** + * 同步状态(1=失败) + */ + @TableField("STATUS") + private Integer status; + + +}