Преглед изворни кода

仓库预发机库存
商品取消超时定时任务

mac пре 2 година
родитељ
комит
c5149ed09c

+ 2 - 6
kxs-common/kxs-common-pay/src/main/java/com/kxs/common/pay/model/QueryRequest.java

@@ -1,6 +1,6 @@
 package com.kxs.common.pay.model;
 
-import com.kxs.common.pay.enums.PayPlatformEnum;
+import lombok.Builder;
 import lombok.Data;
 
 /**
@@ -10,13 +10,9 @@ import lombok.Data;
  * @date 2024-04-24
  */
 @Data
+@Builder
 public class QueryRequest {
 
-    /**
-     * 支付类型枚举
-     */
-    private PayPlatformEnum payTypeEnum;
-
     /**
      * 商户网站唯一订单号
      */

+ 8 - 0
kxs-product/kxs-product-api/src/main/java/com/kxs/product/api/feign/RemoteKxsProductService.java

@@ -186,4 +186,12 @@ public interface RemoteKxsProductService {
 	 */
 	@GetExchange("/machine/loadByWhsGdSn")
     R<KxsMachine> loadByWhsGdSn(@RequestParam("whsId") Integer whsId, @RequestHeader(SecurityConstants.FROM) String from);
+
+	/**
+	 * 订单过期
+	 *
+	 * @param fromIn 从中
+	 */
+	@GetExchange("/shop/shopOrderTimeout")
+	void shopOrderTimeout(@RequestHeader(SecurityConstants.FROM) String fromIn);
 }

+ 10 - 0
kxs-product/kxs-product-biz/src/main/java/com/kxs/product/biz/controller/kxsapp/ShopController.java

@@ -172,6 +172,16 @@ public class ShopController {
         return R.ok(kxsShopOrderService.confirmOrder(param));
     }
 
+    /**
+     * 订单过期
+     */
+    @Inner
+    @GetMapping("/shopOrderTimeout")
+    public void shopOrderTimeout() {
+
+        kxsShopOrderService.shopOrderTimeout();
+    }
+
 
 
 

+ 11 - 3
kxs-product/kxs-product-biz/src/main/java/com/kxs/product/biz/mq/RabbitShopQueueListener.java

@@ -1,6 +1,13 @@
 package com.kxs.product.biz.mq;
 
 import com.alibaba.fastjson.JSON;
+import com.kxs.common.pay.enums.PayPlatformEnum;
+import com.kxs.common.pay.enums.PayStatusCommEnum;
+import com.kxs.common.pay.factory.PaymentFactory;
+import com.kxs.common.pay.model.PayResponse;
+import com.kxs.common.pay.model.QueryRequest;
+import com.kxs.common.pay.model.QueryResponse;
+import com.kxs.common.pay.service.PayService;
 import com.kxs.product.api.amqp.rabbit.RabbitShopTimeoutQueueMQ;
 import com.kxs.product.api.model.KxsShopOrder;
 import com.kxs.product.biz.constant.enums.KxsShopEnum;
@@ -11,6 +18,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.amqp.core.Message;
 import org.springframework.amqp.rabbit.annotation.RabbitHandler;
 import org.springframework.amqp.rabbit.annotation.RabbitListener;
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Component;
 
 import java.io.IOException;
@@ -27,6 +35,8 @@ import java.io.IOException;
 public class RabbitShopQueueListener {
 	private final KxsShopOrderService kxsShopOrderService;
 
+	private final PaymentFactory paymentFactory;
+
 	/**
 	 * 监听 商品下单过期 队列的处理器
 	 *
@@ -42,9 +52,7 @@ public class RabbitShopQueueListener {
 			//根据订单号查询该订单是否付款成功,如果仍未付款成功,关闭订单
 			KxsShopOrder order = kxsShopOrderService.getById(id);
 			if (order != null && order.getStatus().equals(KxsShopEnum.ORDER_NO_PAY.getType())){
-
-				order.setStatus(KxsShopEnum.ORDER_CANCEL.getType());
-				kxsShopOrderService.updateById(order);
+				kxsShopOrderService.changeTimeoutOrder(order);
 			}
 			channel.basicAck(message.getMessageProperties().getDeliveryTag(),false);
         } catch (Exception e) {

+ 14 - 0
kxs-product/kxs-product-biz/src/main/java/com/kxs/product/biz/service/KxsShopOrderService.java

@@ -93,5 +93,19 @@ public interface KxsShopOrderService extends IService<KxsShopOrder> {
      * @param outTradeNo 订单编号
      */
     void payBack(String outTradeNo);
+
+
+    /**
+     * 订单过期
+     */
+    void shopOrderTimeout();
+
+
+    /**
+     * 订单过期的处理
+     *
+     * @param order 次序
+     */
+    void changeTimeoutOrder(KxsShopOrder order);
 }
 

+ 45 - 4
kxs-product/kxs-product-biz/src/main/java/com/kxs/product/biz/service/impl/KxsShopOrderServiceImpl.java

@@ -13,10 +13,9 @@ import com.kxs.common.core.exception.GlobalCustomerException;
 import com.kxs.common.core.util.R;
 import com.kxs.common.mq.handlers.IMQSender;
 import com.kxs.common.pay.enums.PayPlatformEnum;
+import com.kxs.common.pay.enums.PayStatusCommEnum;
 import com.kxs.common.pay.factory.PaymentFactory;
-import com.kxs.common.pay.model.PayRequest;
-import com.kxs.common.pay.model.PayResponse;
-import com.kxs.common.pay.model.YuePayMessage;
+import com.kxs.common.pay.model.*;
 import com.kxs.common.security.util.SecurityUtils;
 import com.kxs.product.api.amqp.rabbit.RabbitShopTimeoutQueueMQ;
 import com.kxs.product.api.dto.kxsapp.shop.GoodsSubmitDTO;
@@ -37,6 +36,7 @@ import io.seata.spring.annotation.GlobalTransactional;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
+import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -312,6 +312,47 @@ public class KxsShopOrderServiceImpl extends ServiceImpl<KxsShopOrderMapper, Kxs
 
     }
 
+    @Async
+    @Override
+    public void shopOrderTimeout() {
+        List<KxsShopOrder> list = list(Wrappers.<KxsShopOrder>lambdaQuery()
+                .eq(KxsShopOrder::getStatus, KxsShopEnum.ORDER_NO_PAY.getType())
+                .lt(KxsShopOrder::getCreateTime, LocalDateTime.now().minusMinutes(21)).last("limit 10"));
+
+        for (KxsShopOrder order : list) {
+            if (order.getStatus().equals(KxsShopEnum.ORDER_NO_PAY.getType())) {
+                changeTimeoutOrder(order);
+            }
+        }
+
+    }
+
+    @Override
+    public void changeTimeoutOrder(KxsShopOrder order) {
+
+        try {
+
+            order.setStatus(KxsShopEnum.ORDER_CANCEL.getType());
+
+            QueryResponse query = null;
+            QueryRequest queryReq = QueryRequest.builder()
+                    .outTradeNo(order.getOrderSn())
+                    .build();
+            if (order.getPayType().equals(KxsShopEnum.ALI_PAY.getType())) {
+                query = paymentFactory.getPayService(PayPlatformEnum.ALIPAY.getType()).query(queryReq);
+            }
+            if (order.getPayType().equals(KxsShopEnum.WECHAT_PAY.getType())) {
+                query = paymentFactory.getPayService(PayPlatformEnum.WX.getType()).query(queryReq);
+            }
+            if (query != null) {
+                order.setStatus(PayStatusCommEnum.TRADE_SUCCESS == query.getTradeStatus() ? KxsShopEnum.ORDER_NO_SEND.getType() : KxsShopEnum.ORDER_CANCEL.getType());
+            }
+            updateById(order);
+        } catch (AlipayApiException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
     /**
      * 添加临时额度
      *
@@ -321,7 +362,7 @@ public class KxsShopOrderServiceImpl extends ServiceImpl<KxsShopOrderMapper, Kxs
     private void addForLimit(KxsShopOrder order, int warehouseType) {
 
         BigDecimal totalPrice = order.getTotalPrice();
-        if(warehouseType == 0){
+        if (warehouseType == 0) {
             totalPrice = totalPrice.multiply(new BigDecimal(2));
         }
 

+ 17 - 0
kxs-quartz/src/main/java/com/kxs/daemon/quartz/task/ProductBeanTask.java

@@ -38,4 +38,21 @@ public class ProductBeanTask {
         }
         return SkyQuartzEnum.JOB_LOG_STATUS_FAIL.getType();
     }
+
+    /**
+     *  订单过期
+     */
+    @SneakyThrows
+    public String shopOrderTimeout() {
+        try {
+            remoteKxsProductService.shopOrderTimeout(SecurityConstants.FROM_IN);
+            return SkyQuartzEnum.JOB_LOG_STATUS_SUCCESS.getType();
+
+        }catch (Exception e){
+            log.error(e.getLocalizedMessage());
+        }
+        return SkyQuartzEnum.JOB_LOG_STATUS_FAIL.getType();
+    }
+
+
 }

+ 10 - 1
kxs-store/kxs-store-biz/src/main/java/com/kxs/store/biz/constant/enums/StoreStatusEnum.java

@@ -15,7 +15,16 @@ public enum StoreStatusEnum {
 
     C_NEED_CFM(0, "待确认"),
     C_ON_CFM(1, "已确认"),
-    C_RETURN(2, "已拒绝");
+    C_RETURN(2, "已拒绝"),
+
+    /**
+     * 仓库库存变动类型
+     */
+    STOCK_PUSH(0, "入库"),
+    STOCK_OUT(1, "出库"),
+    STOCK__TSF(2, "调拨"),
+
+    ;
 
     //状态码
     private final Integer type;

+ 17 - 2
kxs-store/kxs-store-biz/src/main/java/com/kxs/store/biz/service/impl/KxsMachineAdvanceServiceImpl.java

@@ -28,10 +28,10 @@ import com.kxs.store.api.vo.kxsapp.storeAdvance.UserWarehouseListVO;
 import com.kxs.store.api.vo.kxsapp.userAdvance.AdvanceDevModalVO;
 import com.kxs.store.api.vo.kxsapp.userAdvance.UserAdvanceListVO;
 import com.kxs.store.biz.constant.enums.StoreErrorTypeEnum;
+import com.kxs.store.biz.constant.enums.StoreStatusEnum;
 import com.kxs.store.biz.constant.enums.WarehouseLimitTypeEnum;
 import com.kxs.store.biz.mapper.*;
-import com.kxs.store.biz.service.KxsMachineAdvanceService;
-import com.kxs.store.biz.service.KxsWarehouseLimitService;
+import com.kxs.store.biz.service.*;
 import com.kxs.system.api.feign.RemoteUserMsgService;
 import com.kxs.system.api.model.KxsUserMsg;
 import com.kxs.system.api.util.MsgTemplateUtil;
@@ -74,6 +74,12 @@ public class KxsMachineAdvanceServiceImpl extends ServiceImpl<KxsMachineAdvanceM
 
     private final KxsMachineAdvanceInfoMapper kxsMachineAdvanceInfoMapper;
 
+    private final KxsWarehouseStockService kxsWarehouseStockService;
+
+    private final KxsSendTotalService kxsSendTotalService;
+
+    private final KxsWarehouseStockLogService kxsWarehouseStockLogService;
+
 
     @Override
     public IPage<StoreAdvanceMachineVO> getByPage(Page<StoreAdvanceMachineVO> page, Integer warehouseId, Integer brandId) {
@@ -278,6 +284,15 @@ public class KxsMachineAdvanceServiceImpl extends ServiceImpl<KxsMachineAdvanceM
             }
         }
 
+        //申请的预发机 修改仓库库存
+        KxsWarehouseStock warehouseStock = kxsWarehouseStockService.updateDeliveryStock(param.getWarehouseId(), param.getSnList().size());
+        //新增仓库日志记录
+        kxsWarehouseStockLogService.addKxsWarehouseStockLog(param.getWarehouseId(),
+                param.getBrandId(), warehouseStock, KindTypeEnum.SUB.getType(),
+                StoreStatusEnum.STOCK_PUSH.getType(), param.getSnList().size());
+        //发货统计
+        kxsSendTotalService.shipmentStatistics(param.getSnList().size(), param.getWarehouseId(), param.getBrandId());
+
 
         return R.ok();
     }

+ 12 - 23
kxs-store/kxs-store-biz/src/main/java/com/kxs/store/biz/service/impl/KxsMachineApplyServiceImpl.java

@@ -29,10 +29,7 @@ import com.kxs.store.api.vo.kxsapp.userOrder.UserApplyMachineDetailVO;
 import com.kxs.store.api.vo.kxsapp.userOrder.UserApplyMahineListVO;
 import com.kxs.store.biz.constant.StoreConstants;
 import com.kxs.store.biz.constant.enums.*;
-import com.kxs.store.biz.mapper.KxsMachineAdvanceInfoMapper;
-import com.kxs.store.biz.mapper.KxsMachineApplyDetailMapper;
-import com.kxs.store.biz.mapper.KxsMachineApplyMapper;
-import com.kxs.store.biz.mapper.KxsWarehouseMapper;
+import com.kxs.store.biz.mapper.*;
 import com.kxs.store.biz.service.*;
 import com.kxs.system.api.feign.RemoteUserMsgService;
 import com.kxs.system.api.model.KxsUserMsg;
@@ -182,34 +179,34 @@ public class KxsMachineApplyServiceImpl extends ServiceImpl<KxsMachineApplyMappe
                         .getData()
                         .orElseThrow(() -> new GlobalCustomerException(StoreErrorTypeEnum.SN_FIND_NULL.getDescription()));
                 //查询预发机
-                KxsMachineAdvanceInfo kxsMachineAdvance = kxsMachineAdvanceInfoMapper.selectOne(Wrappers.<KxsMachineAdvanceInfo>lambdaQuery()
+                KxsMachineAdvanceInfo kxsMachineAdvanceInfo = kxsMachineAdvanceInfoMapper.selectOne(Wrappers.<KxsMachineAdvanceInfo>lambdaQuery()
                         .eq(KxsMachineAdvanceInfo::getPosSn, advanceSn));
+
                 if (adMachine == null){
                     throw new GlobalCustomerException(StoreErrorTypeEnum.MACHINE_IS_NULL.getDescription());
                 }
-                if (kxsMachineAdvance == null ) {
+                if (kxsMachineAdvanceInfo == null ) {
                     throw new GlobalCustomerException(StoreErrorTypeEnum.ADVANCE_MACHINE_NOT_FIND.getDescription());
                 }
-                if (kxsMachineAdvance.getIsConfirm() != 1) {
+                if (kxsMachineAdvanceInfo.getIsConfirm() != 1) {
                     throw new GlobalCustomerException(StoreErrorTypeEnum.ADVANCE_MACHINE_NOT_CONFIRM.getDescription());
                 }
-                if (kxsMachineAdvance.getIsApply() != 0) {
+                if (kxsMachineAdvanceInfo.getIsApply() != 0) {
                     throw new GlobalCustomerException(StoreErrorTypeEnum.ADVANCE_MACHINE_ERROR.getDescription());
                 }
-                if (kxsMachineAdvance.getIsReturn() != 0) {
+                if (kxsMachineAdvanceInfo.getIsReturn() != 0) {
                     throw new GlobalCustomerException(StoreErrorTypeEnum.ADVANCE_MACHINE_RETURN.getDescription());
                 }
-
                 //占用自己的预发额度
-                if (kxsMachineAdvance.getIsUseAmount() == 1) {
+                if (kxsMachineAdvanceInfo.getIsUseAmount() == 1) {
                     //小分仓减少已用额度 刷新可用额度
                     Integer price = EnumUtil.getFieldBy(BrandTypeEnum::getType, BrandTypeEnum::getDescription, String.valueOf(brand.getBrandType()));
                     kxsWarehouseLimitService.refreshUserAmount(userId.intValue(), price, KindTypeEnum.SUB.getType());
                 }
                 //已经添加到预扣款
-                if (kxsMachineAdvance.getAdvanceId() != null && kxsMachineAdvance.getAdvanceId() > 0) {
+                if (kxsMachineAdvanceInfo.getAdvanceId() != null && kxsMachineAdvanceInfo.getAdvanceId() > 0) {
                     //查询当前的预扣款
-                    R<KxsUserAdvance> advanceResult = remoteKxsUserService.loadByAdvanceId(kxsMachineAdvance.getAdvanceId(), SecurityConstants.FROM_IN);
+                    R<KxsUserAdvance> advanceResult = remoteKxsUserService.loadByAdvanceId(kxsMachineAdvanceInfo.getAdvanceId(), SecurityConstants.FROM_IN);
                     KxsUserAdvance advance = RetOps.of(advanceResult)
                             .getData()
                             .orElseThrow(() -> new GlobalCustomerException(StoreErrorTypeEnum.DATA_ERROR.getDescription()));
@@ -254,8 +251,8 @@ public class KxsMachineApplyServiceImpl extends ServiceImpl<KxsMachineApplyMappe
                     }
                 }
                 //修改预发机状态
-                kxsMachineAdvance.setIsApply(1);
-                kxsMachineAdvanceInfoMapper.updateById(kxsMachineAdvance);
+                kxsMachineAdvanceInfo.setIsApply(1);
+                kxsMachineAdvanceInfoMapper.updateById(kxsMachineAdvanceInfo);
 
                 //订单详情添加机具号
                 orderDetail.setPosSn(adMachine.getPosSn());
@@ -264,14 +261,6 @@ public class KxsMachineApplyServiceImpl extends ServiceImpl<KxsMachineApplyMappe
             kxsMachineApplyDetailMapper.insert(orderDetail);
         }
 
-        if(param.getIsAdvance() == 1){
-            //申请的预发机 修改仓库库存
-            KxsWarehouseStock warehouseStock = kxsWarehouseStockService.updateDeliveryStock(order.getWarehouseId(), snList.size());
-            //新增仓库日志记录
-            kxsWarehouseStockLogService.addKxsWarehouseStockLog(order.getWarehouseId(), order.getBrandId(), warehouseStock, KindTypeEnum.SUB.getType(), 1, snList.size());
-            //发货统计
-            kxsSendTotalService.shipmentStatistics(param.getSnList().size(), order.getWarehouseId(), order.getBrandId());
-        }
 
         return R.ok();
     }

+ 4 - 3
kxs-store/kxs-store-biz/src/main/java/com/kxs/store/biz/service/impl/KxsWarehouseStockLogServiceImpl.java

@@ -3,6 +3,7 @@ package com.kxs.store.biz.service.impl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.kxs.common.core.constant.enums.KindTypeEnum;
 import com.kxs.store.api.model.KxsWarehouseStock;
+import com.kxs.store.biz.constant.enums.StoreStatusEnum;
 import com.kxs.store.biz.mapper.KxsWarehouseStockLogMapper;
 import com.kxs.store.api.model.KxsWarehouseStockLog;
 import com.kxs.store.biz.service.KxsWarehouseStockLogService;
@@ -27,17 +28,17 @@ public class KxsWarehouseStockLogServiceImpl extends ServiceImpl<KxsWarehouseSto
         kxsWarehouseStockLog.setKind(kind);
 
         //入库
-        if(changeType == 0){
+        if(changeType == StoreStatusEnum.STOCK_PUSH.getType()){
             kxsWarehouseStockLog.setBeforeStockNum(warehouseStock.getStockNum() - count);
             kxsWarehouseStockLog.setBeforeStockTotal(warehouseStock.getStockTotal() - count);
         }
         //出库
-        if(changeType == 1){
+        if(changeType == StoreStatusEnum.STOCK_OUT.getType()){
             kxsWarehouseStockLog.setBeforeStockNum(warehouseStock.getStockNum() + count);
             kxsWarehouseStockLog.setBeforeDeliveryNum(warehouseStock.getDeliveryNum() - count);
         }
         //调拨
-        if(changeType == 2){
+        if(changeType == StoreStatusEnum.STOCK__TSF.getType()){
             kxsWarehouseStockLog.setBeforeStockNum(kind.equals(KindTypeEnum.ADD.getType()) ? warehouseStock.getStockNum() - count : warehouseStock.getStockNum() + count);
         }
 

+ 13 - 0
kxs-store/kxs-store-biz/src/main/java/com/kxs/store/biz/service/impl/KxsWarehouseStockServiceImpl.java

@@ -2,9 +2,13 @@ package com.kxs.store.biz.service.impl;
 
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.kxs.common.core.constant.SecurityConstants;
+import com.kxs.common.core.util.R;
+import com.kxs.product.api.feign.RemoteKxsProductService;
 import com.kxs.store.biz.mapper.KxsWarehouseStockMapper;
 import com.kxs.store.api.model.KxsWarehouseStock;
 import com.kxs.store.biz.service.KxsWarehouseStockService;
+import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
 
 /**
@@ -14,12 +18,18 @@ import org.springframework.stereotype.Service;
  * @since 2024-01-08 09:46:02
  */
 @Service("kxsWarehouseStockService")
+@RequiredArgsConstructor
 public class KxsWarehouseStockServiceImpl extends ServiceImpl<KxsWarehouseStockMapper, KxsWarehouseStock> implements KxsWarehouseStockService {
 
+    private final RemoteKxsProductService remoteKxsProductService;
+
     @Override
     public KxsWarehouseStock updateDeliveryStock(Integer warehouseId, int count) {
 
         KxsWarehouseStock warehouseStock = baseMapper.selectOne(Wrappers.<KxsWarehouseStock>lambdaQuery().eq(KxsWarehouseStock::getWarehouseId, warehouseId));
+        if(warehouseStock == null){
+            return null;
+        }
         warehouseStock.setDeliveryNum(warehouseStock.getDeliveryNum() + count);
         warehouseStock.setStockNum(warehouseStock.getStockNum() - count);
         baseMapper.updateById(warehouseStock);
@@ -30,6 +40,9 @@ public class KxsWarehouseStockServiceImpl extends ServiceImpl<KxsWarehouseStockM
     public KxsWarehouseStock updateAddStock(Integer warehouseId, int count) {
 
         KxsWarehouseStock warehouseStock = baseMapper.selectOne(Wrappers.<KxsWarehouseStock>lambdaQuery().eq(KxsWarehouseStock::getWarehouseId, warehouseId));
+        if(warehouseStock == null){
+            return null;
+        }
         warehouseStock.setStockTotal(warehouseStock.getStockTotal() + count);
         warehouseStock.setStockNum(warehouseStock.getStockNum() + count);
         baseMapper.updateById(warehouseStock);