diff --git a/cash-api/order-server/src/main/java/com/czg/controller/NotifyController.java b/cash-api/order-server/src/main/java/com/czg/controller/NotifyController.java index 9b45af1a..76ba0155 100644 --- a/cash-api/order-server/src/main/java/com/czg/controller/NotifyController.java +++ b/cash-api/order-server/src/main/java/com/czg/controller/NotifyController.java @@ -37,7 +37,7 @@ public class NotifyController { JSONObject czg = CzgPayUtils.getCzg(respParams); AssertUtil.isNull(czg, "支付回调数据为空"); log.info("支付回调数据为:{}", czg); - orderInfoService.payCallBackOrder(czg.getString("mchOrderNo"), czg); + orderInfoService.payCallBackOrder(czg.getString("mchOrderNo"), czg, 0); return SUCCESS; } diff --git a/cash-common/cash-common-service/src/main/java/com/czg/order/entity/OrderPayment.java b/cash-common/cash-common-service/src/main/java/com/czg/order/entity/OrderPayment.java index f6963cf0..7239ed9d 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/order/entity/OrderPayment.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/order/entity/OrderPayment.java @@ -71,7 +71,7 @@ public class OrderPayment implements Serializable { */ private String tradeNumber; - @Column(onInsertValue = "now()") + @Column(onUpdateValue = "now()") private LocalDateTime payTime; /** diff --git a/cash-common/cash-common-service/src/main/java/com/czg/order/service/OrderInfoService.java b/cash-common/cash-common-service/src/main/java/com/czg/order/service/OrderInfoService.java index 27332d99..f5bb17e9 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/order/service/OrderInfoService.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/order/service/OrderInfoService.java @@ -41,7 +41,7 @@ public interface OrderInfoService extends IService { CzgResult mergeOrder(MergeOrderDTO param); - void payCallBackOrder(@NotBlank String orderNo, @NotNull JSONObject resultJson); + void payCallBackOrder(@NotBlank String orderNo, @NotNull JSONObject resultJson,int retryCount); void refundCallBackOrder(@NotBlank String orderNo, @NotNull JSONObject resultJson); diff --git a/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/OrderInfoServiceImpl.java b/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/OrderInfoServiceImpl.java index 2d48ccf2..427490d8 100644 --- a/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/OrderInfoServiceImpl.java +++ b/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/OrderInfoServiceImpl.java @@ -58,6 +58,11 @@ import java.math.BigDecimal; import java.math.RoundingMode; import java.time.LocalDateTime; import java.util.*; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; + +import static org.apache.dubbo.registry.zookeeper.util.CuratorFrameworkParams.MAX_RETRIES; /** * 订单表 服务层实现。 @@ -106,6 +111,11 @@ public class OrderInfoServiceImpl extends ServiceImpl getOrderByPage(OrderInfoQueryDTO param) { @@ -265,6 +275,7 @@ public class OrderInfoServiceImpl extends ServiceImpl payCallBackOrder(orderNo, resultJson, retryCount + 1), DELAY, TimeUnit.SECONDS); + } else { + log.error("订单支付回调失败, 达到最大重试次数, 支付记录不存在, orderNo: {}", orderNo); + } return; } if (StrUtil.isNotBlank(payment.getTradeNumber())) { diff --git a/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/PayServiceImpl.java b/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/PayServiceImpl.java index 8b8fa7a9..6b8a78e5 100644 --- a/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/PayServiceImpl.java +++ b/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/PayServiceImpl.java @@ -772,14 +772,15 @@ public class PayServiceImpl implements PayService { private CzgResult> microPay(@NonNull Long shopId, CzgMicroPayReq bizData) { AssertUtil.isBlank(bizData.getAuthCode(), "扫码失败,请重试"); + if (bizData.getAuthCode().length() > 26) { + throw new CzgException("支付失败,不支持的条码"); + } ShopMerchant shopMerchant = getMerchant(shopId); bizData.assignMerchant(shopMerchant.getStoreId(), shopMerchant.getMerchantName(), sysParamsService.getSysParamValue(SysParamCodeEnum.PAY_CZG_NOTIFY_URL.getCode())); String firstTwoDigitsStr = bizData.getAuthCode().substring(0, 2); - // 将截取的字符串转换为整数 int firstTwoDigits = Integer.parseInt(firstTwoDigitsStr); - // 判断范围 if (firstTwoDigits >= 10 && firstTwoDigits <= 15) { //微信支付 diff --git a/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ProductRpcServiceImpl.java b/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ProductRpcServiceImpl.java index e3ab6da4..f4b0454f 100644 --- a/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ProductRpcServiceImpl.java +++ b/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ProductRpcServiceImpl.java @@ -5,6 +5,7 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.util.NumberUtil; +import cn.hutool.core.util.ObjUtil; import cn.hutool.core.util.StrUtil; import com.czg.config.RabbitPublisher; import com.czg.enums.YesNoEnum; @@ -70,7 +71,7 @@ public class ProductRpcServiceImpl implements ProductRpcService { if (CollUtil.isEmpty(list)) { return; } - boolean isHasStockChangeToZero = false; + boolean isLowWarnLine = false; for (ProductStockSubtractDTO dto : list) { Product product = productMapper.selectOneById(dto.getProductId()); if (product == null) { @@ -97,8 +98,9 @@ public class ProductRpcServiceImpl implements ProductRpcService { productStockFlowService.saveFlow(flow); cleanCategoryProduct(shopId, product.getCategoryId()); refreshRedisProdStock(shopId, product.getId(), flow.getAfterNumber()); - if (!isHasStockChangeToZero && NumberUtil.isLessOrEqual(flow.getAfterNumber(), BigDecimal.ZERO)) { - isHasStockChangeToZero = true; + Integer warnLine = ObjUtil.defaultIfNull(product.getWarnLine(), 10); + if (!isLowWarnLine && NumberUtil.isLess(flow.getAfterNumber(), Convert.toBigDecimal(warnLine))) { + isLowWarnLine = true; } // 查询商品绑定耗材信息 List relationList = prodConsRelationMapper.selectListByQuery(QueryWrapper.create().eq(ProdConsRelation::getProductId, dto.getProductId())); @@ -143,7 +145,7 @@ public class ProductRpcServiceImpl implements ProductRpcService { consStockFlowService.saveFlow(consStockFlow); } } - if (isHasStockChangeToZero) { + if (isLowWarnLine) { ThreadUtil.execAsync(() -> rabbitPublisher.sendProductInfoChangeMsg(Convert.toStr(shopId))); } log.info("ProductService.--------------------------------------------库存更新成功"); @@ -157,7 +159,7 @@ public class ProductRpcServiceImpl implements ProductRpcService { if (CollUtil.isEmpty(list)) { return; } - boolean isHasStockChangeToZero = false; + boolean isLowWarnLine = false; for (ProductStockSubtractDTO dto : list) { Product product = productMapper.selectOneById(dto.getProductId()); productMapper.updateProductStockNum(dto.getProductId(), dto.getShopId(), "add", dto.getNum()); @@ -177,8 +179,9 @@ public class ProductRpcServiceImpl implements ProductRpcService { flow.setOrderId(orderId); productStockFlowService.saveFlow(flow); refreshRedisProdStock(shopId, product.getId(), flow.getAfterNumber()); - if (!isHasStockChangeToZero && (NumberUtil.isLessOrEqual(flow.getBeforeNumber(), BigDecimal.ZERO) || NumberUtil.isLessOrEqual(flow.getAfterNumber(), BigDecimal.ZERO))) { - isHasStockChangeToZero = true; + Integer warnLine = ObjUtil.defaultIfNull(product.getWarnLine(), 10); + if (!isLowWarnLine && (NumberUtil.isLessOrEqual(flow.getBeforeNumber(), BigDecimal.ZERO) || NumberUtil.isLess(flow.getAfterNumber(), Convert.toBigDecimal(warnLine)))) { + isLowWarnLine = true; } // 查询商品绑定耗材信息 List relationList = prodConsRelationMapper.selectListByQuery(QueryWrapper.create().eq(ProdConsRelation::getProductId, dto.getProductId())); @@ -223,7 +226,7 @@ public class ProductRpcServiceImpl implements ProductRpcService { consStockFlowService.saveFlow(consStockFlow); } } - if (isHasStockChangeToZero) { + if (isLowWarnLine) { ThreadUtil.execAsync(() -> rabbitPublisher.sendProductInfoChangeMsg(Convert.toStr(shopId))); } log.info("ProductService.--------------------------------------------库存更新成功"); @@ -237,7 +240,7 @@ public class ProductRpcServiceImpl implements ProductRpcService { return; } log.info(">>>>>>>>>>>>>>>>>:入参1:{}", list.size()); - boolean isHasStockChangeToZero = false; + boolean isLowWarnLine = false; for (ProductStockSubtractDTO dto : list) { Product product = productMapper.selectOneById(dto.getProductId()); log.info(">>>>>>>>>>>>>>>>>:入参2:{}", product.getName()); @@ -270,8 +273,9 @@ public class ProductRpcServiceImpl implements ProductRpcService { log.info(">>>>>>>>>>>>>>>>>:入参4:{}", redisService.get(key)); refreshRedisProdStock(shopId, product.getId(), flow.getAfterNumber()); log.info(">>>>>>>>>>>>>>>>>:入参5:{}", redisService.get(key)); - if (!isHasStockChangeToZero && (NumberUtil.isLessOrEqual(flow.getBeforeNumber(), BigDecimal.ZERO) || NumberUtil.isLessOrEqual(flow.getAfterNumber(), BigDecimal.ZERO))) { - isHasStockChangeToZero = true; + Integer warnLine = ObjUtil.defaultIfNull(product.getWarnLine(), 10); + if (!isLowWarnLine && (NumberUtil.isLessOrEqual(flow.getBeforeNumber(), BigDecimal.ZERO) || NumberUtil.isLess(flow.getAfterNumber(), Convert.toBigDecimal(warnLine)))) { + isLowWarnLine = true; } // 查询商品绑定耗材信息 List relationList = prodConsRelationMapper.selectListByQuery(QueryWrapper.create().eq(ProdConsRelation::getProductId, dto.getProductId())); @@ -316,7 +320,7 @@ public class ProductRpcServiceImpl implements ProductRpcService { consStockFlowService.saveFlow(consStockFlow); } } - if (isHasStockChangeToZero) { + if (isLowWarnLine) { ThreadUtil.execAsync(() -> rabbitPublisher.sendProductInfoChangeMsg(Convert.toStr(shopId))); } log.info("ProductService.--------------------------------------------库存更新成功");