瀏覽代碼

Merge branch 'feature/下单改造'

lhm 3 年之前
父節點
當前提交
d9ca0aa86b
共有 17 個文件被更改,包括 382 次插入69 次删除
  1. 1 1
      kmall-admin/src/main/java/com/kmall/admin/dao/ProductStoreRelaDao.java
  2. 4 0
      kmall-admin/src/main/java/com/kmall/admin/dao/haikong/HaiKongMemberOrderSyncResendDao.java
  3. 7 0
      kmall-admin/src/main/java/com/kmall/admin/dao/haikong/HaiKongMemberScoreChangeRecordDao.java
  4. 14 0
      kmall-admin/src/main/java/com/kmall/admin/entity/haikong/HaiKongMemberOrderSyncResendEntity.java
  5. 3 1
      kmall-admin/src/main/java/com/kmall/admin/entity/haikong/HaiKongMemberScoreChangeRecordEntity.java
  6. 88 0
      kmall-admin/src/main/java/com/kmall/admin/haikong/task/MemberOrderSyncResendTask.java
  7. 88 0
      kmall-admin/src/main/java/com/kmall/admin/haikong/task/MemberScoreChangeResendTask.java
  8. 1 1
      kmall-admin/src/main/java/com/kmall/admin/service/ProductStoreRelaService.java
  9. 4 0
      kmall-admin/src/main/java/com/kmall/admin/service/haikong/HaiKongMemberOrderSyncResendService.java
  10. 7 0
      kmall-admin/src/main/java/com/kmall/admin/service/haikong/HaiKongMemberScoreChangeRecordService.java
  11. 36 22
      kmall-admin/src/main/java/com/kmall/admin/service/impl/OrderServiceImpl.java
  12. 2 2
      kmall-admin/src/main/java/com/kmall/admin/service/impl/ProductStoreRelaServiceImpl.java
  13. 10 0
      kmall-admin/src/main/java/com/kmall/admin/service/impl/haikong/HaiKongMemberOrderSyncResendServiceImpl.java
  14. 13 0
      kmall-admin/src/main/java/com/kmall/admin/service/impl/haikong/HaiKongMemberScoreChangeRecordServiceImpl.java
  15. 2 2
      kmall-admin/src/main/resources/mybatis/mapper/ProductStoreRelaDao.xml
  16. 50 20
      kmall-admin/src/main/resources/mybatis/mapper/haikong/HaiKongMemberOrderSyncResendDao.xml
  17. 52 20
      kmall-admin/src/main/resources/mybatis/mapper/haikong/HaiKongMemberScoreChangeRecordDao.xml

+ 1 - 1
kmall-admin/src/main/java/com/kmall/admin/dao/ProductStoreRelaDao.java

@@ -32,7 +32,7 @@ public interface ProductStoreRelaDao extends BaseDao<ProductStoreRelaEntity> {
 
     List<ProductStoreRelaEntity> querySameList(Map<String, Object> map);
 
-    void updateStockNum(ProductStoreRelaEntity productStoreRelaEntity);
+    void updateStockNumByStoreIdAndSku(ProductStoreRelaEntity productStoreRelaEntity);
 
     void updateSellVolumeNum(ProductStoreRelaEntity productStoreRelaEntity);
 

+ 4 - 0
kmall-admin/src/main/java/com/kmall/admin/dao/haikong/HaiKongMemberOrderSyncResendDao.java

@@ -62,4 +62,8 @@ public interface HaiKongMemberOrderSyncResendDao {
      * @param ids   id 集合
      */
     void deleteBatch(List<Integer> ids);
+
+    List<HaiKongMemberOrderSyncResendEntity> queryListByResendStatus();
+
+    void updateResendStatusBatch(List<HaiKongMemberOrderSyncResendEntity> entities);
 }

+ 7 - 0
kmall-admin/src/main/java/com/kmall/admin/dao/haikong/HaiKongMemberScoreChangeRecordDao.java

@@ -27,4 +27,11 @@ public interface HaiKongMemberScoreChangeRecordDao {
     void deleteByOutBizNo(@Param("outBizNo") String outBizNo);
 
     void deleteBatchByOutBizNo(List<String> outBizNos);
+
+    List<HaiKongMemberScoreChangeRecordEntity> queryListByResendStatus();
+
+    /**
+     * 批量更新重发状态
+     */
+    void updateResendStatusBatch(List<HaiKongMemberScoreChangeRecordEntity> entities);
 }

+ 14 - 0
kmall-admin/src/main/java/com/kmall/admin/entity/haikong/HaiKongMemberOrderSyncResendEntity.java

@@ -42,6 +42,11 @@ public class HaiKongMemberOrderSyncResendEntity {
     private Integer orderScore;
 
     /**
+     * 会员系统订单id,请求成功后返回
+     */
+    private Long memberSysOrderId;
+
+    /**
      * 重发状态,0:等待重发 1:重发成功 2:重发失败 3:无需重发
      */
     private String resendStatus;
@@ -133,6 +138,14 @@ public class HaiKongMemberOrderSyncResendEntity {
         this.createTime = createTime;
     }
 
+    public Long getMemberSysOrderId() {
+        return memberSysOrderId;
+    }
+
+    public void setMemberSysOrderId(Long memberSysOrderId) {
+        this.memberSysOrderId = memberSysOrderId;
+    }
+
     @Override
     public String toString() {
         return "HaiKongMemberOrderSyncResendEntity{" +
@@ -143,6 +156,7 @@ public class HaiKongMemberOrderSyncResendEntity {
                 ", orderAmount=" + orderAmount +
                 ", orderNo='" + orderNo + '\'' +
                 ", orderScore=" + orderScore +
+                ", memberSysOrderId=" + memberSysOrderId +
                 ", resendStatus='" + resendStatus + '\'' +
                 ", lastResendTime=" + lastResendTime +
                 ", createTime=" + createTime +

+ 3 - 1
kmall-admin/src/main/java/com/kmall/admin/entity/haikong/HaiKongMemberScoreChangeRecordEntity.java

@@ -1,5 +1,7 @@
 package com.kmall.admin.entity.haikong;
 
+import com.kmall.admin.haikong.constant.HaiKongMemberScoreChangeEventEnum;
+
 import java.util.Date;
 
 /**
@@ -35,7 +37,7 @@ public class HaiKongMemberScoreChangeRecordEntity {
 
     /**
      * 变动事件,增 or 减
-     * {@link com.kmall.admin.haikong.constant.HaiKoneMemberScoreChangeEventEnum}
+     * {@link HaiKongMemberScoreChangeEventEnum}
      */
     private String changeEvent;
 

+ 88 - 0
kmall-admin/src/main/java/com/kmall/admin/haikong/task/MemberOrderSyncResendTask.java

@@ -0,0 +1,88 @@
+package com.kmall.admin.haikong.task;
+
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.kmall.admin.entity.haikong.HaiKongMemberOrderSyncResendEntity;
+import com.kmall.admin.entity.haikong.HaiKongMemberScoreChangeRecordEntity;
+import com.kmall.admin.haikong.client.HaiKongMemberTemplate;
+import com.kmall.admin.haikong.constant.HaiKongMemberOrderResendStatusEnum;
+import com.kmall.admin.haikong.dto.MemberOrderInfoSyncDTO;
+import com.kmall.admin.haikong.dto.MemberScoreChangeDTO;
+import com.kmall.admin.haikong.dto.MemberScoreChangeResponseDTO;
+import com.kmall.admin.haikong.utils.Response;
+import com.kmall.admin.service.haikong.HaiKongMemberOrderSyncResendService;
+import com.kmall.admin.utils.jackson.JacksonUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+import org.springframework.util.CollectionUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * 重发会员消费订单同步定时任务
+ * @author lhm
+ * @createDate 2021-12-01
+ */
+@Component
+public class MemberOrderSyncResendTask {
+
+    private static final Logger log = LoggerFactory.getLogger(MemberOrderSyncResendTask.class);
+
+    @Autowired
+    private HaiKongMemberTemplate haiKongMemberTemplate;
+
+    @Autowired
+    private HaiKongMemberOrderSyncResendService haiKongMemberOrderSyncResendService;
+
+    //    @Scheduled(cron = "0 55 0/2 * * ?")
+    @Scheduled(cron = "0/20 0/2 * * * ?")
+    public void resend() {
+        // 查询等待发送和发送失败的记录
+        List<HaiKongMemberOrderSyncResendEntity> haiKongMemberOrderSyncResendEntities = haiKongMemberOrderSyncResendService.queryListByResendStatus();
+        if (CollectionUtils.isEmpty(haiKongMemberOrderSyncResendEntities)) {
+            return;
+        }
+        List<HaiKongMemberOrderSyncResendEntity> successList = new ArrayList<>();
+        List<HaiKongMemberOrderSyncResendEntity> failedList = new ArrayList<>();
+        haiKongMemberOrderSyncResendEntities.forEach(haiKongMemberOrderSyncResendEntity -> {
+            MemberOrderInfoSyncDTO memberOrderInfoSyncDTO = new MemberOrderInfoSyncDTO();
+            BeanUtils.copyProperties(haiKongMemberOrderSyncResendEntity, memberOrderInfoSyncDTO);
+            String body = JacksonUtil.toJson(memberOrderInfoSyncDTO);
+            log.info("【重发】请求会员消费订单同步接口!请求体:{}", body);
+            try {
+                String responseJson = haiKongMemberTemplate.changeMemberScore(body);
+                Response<Long> response = JacksonUtil.fromListJson(responseJson, new TypeReference<Response<Long>>() {});
+                if (Objects.nonNull(response) && response.getSuccess()) {
+                    haiKongMemberOrderSyncResendEntity.setMemberSysOrderId(response.getData());
+                    haiKongMemberOrderSyncResendEntity.setResendStatus(HaiKongMemberOrderResendStatusEnum.RESEND_SUCCESS.getStatus());
+                    successList.add(haiKongMemberOrderSyncResendEntity);
+                    log.info("【重发】请求会员消费订单同步接口成功!响应数据:{}", responseJson);
+                } else {
+                    haiKongMemberOrderSyncResendEntity.setResendStatus(HaiKongMemberOrderResendStatusEnum.RESEND_FAILED.getStatus());
+                    failedList.add(haiKongMemberOrderSyncResendEntity);
+                    log.error("【重发】请求会员消费订单同步接口失败!响应:{}", responseJson);
+                }
+            } catch (Exception e) {
+                haiKongMemberOrderSyncResendEntity.setResendStatus(HaiKongMemberOrderResendStatusEnum.RESEND_FAILED.getStatus());
+                failedList.add(haiKongMemberOrderSyncResendEntity);
+                log.error("【重发】请求会员消费订单同步接口失败!异常:", e);
+            }
+        });
+
+        if (!CollectionUtils.isEmpty(successList)) {
+            haiKongMemberOrderSyncResendService.updateResendStatusBatch(successList);
+        }
+
+        if (!CollectionUtils.isEmpty(failedList)) {
+            haiKongMemberOrderSyncResendService.updateResendStatusBatch(failedList);
+        }
+        log.info("【重发】此次重发会员消费订单同步接口!成功【{}】条,失败【{}】条!", successList.size(), failedList.size());
+    }
+
+
+}

+ 88 - 0
kmall-admin/src/main/java/com/kmall/admin/haikong/task/MemberScoreChangeResendTask.java

@@ -0,0 +1,88 @@
+package com.kmall.admin.haikong.task;
+
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.kmall.admin.entity.haikong.HaiKongMemberScoreChangeRecordEntity;
+import com.kmall.admin.haikong.client.HaiKongMemberTemplate;
+import com.kmall.admin.haikong.constant.HaiKongMemberOrderResendStatusEnum;
+import com.kmall.admin.haikong.constant.HaiKongMemberScoreChangeEventEnum;
+import com.kmall.admin.haikong.dto.MemberScoreChangeDTO;
+import com.kmall.admin.haikong.dto.MemberScoreChangeResponseDTO;
+import com.kmall.admin.haikong.utils.Response;
+import com.kmall.admin.service.haikong.HaiKongMemberScoreChangeRecordService;
+import com.kmall.admin.utils.jackson.JacksonUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+import org.springframework.util.CollectionUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * 会员积分变动重发定时任务
+ * @author lhm
+ * @createDate 2021-12-01
+ */
+@Component
+public class MemberScoreChangeResendTask {
+
+    private static final Logger log = LoggerFactory.getLogger(MemberScoreChangeResendTask.class);
+
+    @Autowired
+    private HaiKongMemberTemplate haiKongMemberTemplate;
+
+    @Autowired
+    private HaiKongMemberScoreChangeRecordService haiKongMemberScoreChangeRecordService;
+
+    //    @Scheduled(cron = "0 55 0/2 * * ?")
+    @Scheduled(cron = "0/20 0/2 * * * ?")
+    public void resend() {
+        // 查询等待发送和发送失败的记录
+        List<HaiKongMemberScoreChangeRecordEntity> haiKongMemberScoreChangeRecordEntities = haiKongMemberScoreChangeRecordService.queryListByResendStatus();
+        if (CollectionUtils.isEmpty(haiKongMemberScoreChangeRecordEntities)) {
+            return;
+        }
+        List<HaiKongMemberScoreChangeRecordEntity> successList = new ArrayList<>();
+        List<HaiKongMemberScoreChangeRecordEntity> failedList = new ArrayList<>();
+        haiKongMemberScoreChangeRecordEntities.forEach(haiKongMemberScoreChangeRecordEntity -> {
+            MemberScoreChangeDTO memberScoreChangeDTO = new MemberScoreChangeDTO();
+            BeanUtils.copyProperties(haiKongMemberScoreChangeRecordEntity, memberScoreChangeDTO);
+            String body = JacksonUtil.toJson(memberScoreChangeDTO);
+            log.info("【重发】请求会员系统积分变动接口!请求体:{}", body);
+            try {
+                String responseJson = haiKongMemberTemplate.changeMemberScore(body);
+                Response<MemberScoreChangeResponseDTO> response = JacksonUtil.fromListJson(responseJson, new TypeReference<Response<MemberScoreChangeResponseDTO>>() {});
+                if (Objects.nonNull(response) && response.getSuccess()) {
+                    MemberScoreChangeResponseDTO responseData = response.getData();
+                    haiKongMemberScoreChangeRecordEntity.setStatementId(responseData.getStatementId());
+                    haiKongMemberScoreChangeRecordEntity.setResendStatus(HaiKongMemberOrderResendStatusEnum.RESEND_SUCCESS.getStatus());
+                    successList.add(haiKongMemberScoreChangeRecordEntity);
+                    log.info("【重发】请求会员系统积分变动接口成功!响应数据:{}", responseJson);
+                } else {
+                    haiKongMemberScoreChangeRecordEntity.setResendStatus(HaiKongMemberOrderResendStatusEnum.RESEND_FAILED.getStatus());
+                    failedList.add(haiKongMemberScoreChangeRecordEntity);
+                    log.error("【重发】请求会员系统积分变动接口失败!响应:{}", responseJson);
+                }
+            } catch (Exception e) {
+                haiKongMemberScoreChangeRecordEntity.setResendStatus(HaiKongMemberOrderResendStatusEnum.RESEND_FAILED.getStatus());
+                failedList.add(haiKongMemberScoreChangeRecordEntity);
+                log.error("【重发】请求会员系统积分变动接口失败!异常:", e);
+            }
+        });
+
+        if (!CollectionUtils.isEmpty(successList)) {
+            haiKongMemberScoreChangeRecordService.updateResendStatusBatch(successList);
+        }
+
+        if (!CollectionUtils.isEmpty(failedList)) {
+            haiKongMemberScoreChangeRecordService.updateResendStatusBatch(failedList);
+        }
+        log.info("【重发】此次重发会员积分变动接口!成功【{}】条,失败【{}】条!", successList.size(), failedList.size());
+    }
+
+
+}

+ 1 - 1
kmall-admin/src/main/java/com/kmall/admin/service/ProductStoreRelaService.java

@@ -162,5 +162,5 @@ public interface ProductStoreRelaService {
      * 更新库存
      * @param productStoreRelaEntity    门店库存实体
      */
-    void updateStockNum(ProductStoreRelaEntity productStoreRelaEntity);
+    void updateStockNumByStoreIdAndSku(ProductStoreRelaEntity productStoreRelaEntity);
 }

+ 4 - 0
kmall-admin/src/main/java/com/kmall/admin/service/haikong/HaiKongMemberOrderSyncResendService.java

@@ -35,4 +35,8 @@ public interface HaiKongMemberOrderSyncResendService {
      * @param haiKongMemberOrderSyncResendEntity    新增的数据
      */
     void save(HaiKongMemberOrderSyncResendEntity haiKongMemberOrderSyncResendEntity);
+
+    List<HaiKongMemberOrderSyncResendEntity> queryListByResendStatus();
+
+    void updateResendStatusBatch(List<HaiKongMemberOrderSyncResendEntity> entities);
 }

+ 7 - 0
kmall-admin/src/main/java/com/kmall/admin/service/haikong/HaiKongMemberScoreChangeRecordService.java

@@ -26,4 +26,11 @@ public interface HaiKongMemberScoreChangeRecordService {
     void deleteByOutBizNo(String outBizNo);
 
     void deleteBatchByOutBizNo(List<String> outBizNos);
+
+    List<HaiKongMemberScoreChangeRecordEntity> queryListByResendStatus();
+
+    /**
+     * 批量更新重发状态
+     */
+    void updateResendStatusBatch(List<HaiKongMemberScoreChangeRecordEntity> entities);
 }

+ 36 - 22
kmall-admin/src/main/java/com/kmall/admin/service/impl/OrderServiceImpl.java

@@ -1366,7 +1366,7 @@ public class OrderServiceImpl implements OrderService {
                         productInfo.setStockNum(productInfo.getStockNum() - cartEntity.getNumber());
                         productInfo.setStoreId(Long.valueOf(storeId));
                         productInfo.addSellVolume();
-                        productStoreRelaDao.updateStockNum(productInfo);//修改普通商品库存
+                        productStoreRelaDao.updateStockNumByStoreIdAndSku(productInfo);//修改普通商品库存
 
                         if (goodsEntity != null) {
                             goodsEntity.setGoodsNumber(goodsEntity.getGoodsNumber() - cartEntity.getNumber());
@@ -2322,7 +2322,7 @@ public class OrderServiceImpl implements OrderService {
      * @return
      */
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public synchronized Map offlineRetailSubmit(Map param, SysUserEntity user) {
         // 解析订单数据 List
         List<LinkedHashMap> goodsList = (List<LinkedHashMap>) param.get("goodsList");
@@ -2459,10 +2459,10 @@ public class OrderServiceImpl implements OrderService {
                     // 当前出区数
                     Integer exitRegionNumber = goodsDto.getExitRegionNumber();
                     // 保税仓库存 + 门店库存 - 出区数 >= 购买数
-                    if (!((warehouseStock + goodsNumber) - exitRegionNumber >= sellVolume)) {
+                    if (!((warehouseStock + stockNum) - exitRegionNumber >= sellVolume)) {
                         // 库存不足
-                        LOGGER.error("sku:【{}】库存不足,门店可用库存:【{}】,仓库可用库存:【{}】,购买数量:【{}】", sku, goodsNumber, warehouseStock, sellVolume);
-                        throw new ServiceException(String.format("sku:【%s】库存不足,门店可用库存:【%s】,仓库可用库存:【%s】,购买数量:【%s】", sku, goodsNumber, warehouseStock, sellVolume));
+                        LOGGER.error("sku:【{}】库存不足,门店可用库存:【{}】,仓库可用库存:【{}】,购买数量:【{}】", sku, stockNum, warehouseStock, sellVolume);
+                        throw new ServiceException(String.format("sku:【%s】库存不足,门店可用库存:【%s】,仓库可用库存:【%s】,购买数量:【%s】", sku, stockNum, warehouseStock, sellVolume));
                     }
                     // 门店库存变化记录
                     StoreMngChangeEntity storeMngChangeEntity = new StoreMngChangeEntity();
@@ -2472,8 +2472,8 @@ public class OrderServiceImpl implements OrderService {
                     storeMngChangeEntity.setStoreId(Integer.parseInt(String.valueOf(goodsDto.getStoreId())));
                     storeMngChangeEntity.setMerchSn(goodsDto.getMerchSn());
                     storeMngChangeEntity.setStoreChangeNum(sellVolume);
-                    storeMngChangeEntity.setStoreOriginalNum(goodsDto.getStockNum());
-                    storeMngChangeEntity.setStoreValidNum(goodsDto.getStockNum() - sellVolume);
+                    storeMngChangeEntity.setStoreOriginalNum(stockNum);
+                    storeMngChangeEntity.setStoreValidNum(stockNum - sellVolume);
                     storeMngChangeEntity.setCreateTime(new Date());
                     storeMngChangeEntity.setModTime(new Date());
                     storeMngChangeEntity.setCreaterSn(user.getUsername());
@@ -2481,7 +2481,7 @@ public class OrderServiceImpl implements OrderService {
                     storeMngChangeEntity.setIsValid(0);
                     storeMngChangeDao.save(storeMngChangeEntity);
 
-                    int validNum = goodsDto.getStockNum() - sellVolume;
+                    int validNum = stockNum - sellVolume;
                     // 园区库存变化记录
                     MngChangeEntity mngChangeEntity = new MngChangeEntity();
                     mngChangeEntity.setThirdPartyMerchCode(goodsDto.getThirdPartyMerchCode());
@@ -2503,9 +2503,9 @@ public class OrderServiceImpl implements OrderService {
                     // 如果园区库存数量小于等于0, 则不更新园区库存, 园区库存只做参考
                     int diff = Math.max(goodsNumber - sellVolume, 0);
                     GoodsEntity goodsEntity = new GoodsEntity();
+                    BeanUtils.copyProperties(goodsDto, goodsEntity);
                     goodsEntity.setGoodsNumber(diff);
                     goodsEntity.setLastSaleTime(new Date());
-                    BeanUtils.copyProperties(goodsDto, goodsEntity);
                     goodsService.updateStockNumberByProductCodeAndSku(goodsEntity);
                     // 门店库存
                     ProductStoreRelaEntity productStoreRelaEntity = new ProductStoreRelaEntity();
@@ -2514,7 +2514,7 @@ public class OrderServiceImpl implements OrderService {
                     productStoreRelaEntity.setStoreId(storeId.longValue());
                     productStoreRelaEntity.setSellVolume(goodsDto.getSellVolume() + sellVolume);
                     productStoreRelaEntity.setLastSaleTime(new Date());
-                    productStoreRelaService.updateStockNum(productStoreRelaEntity);//修改普通商品库存
+                    productStoreRelaService.updateStockNumByStoreIdAndSku(productStoreRelaEntity);//修改普通商品库存
 
                     BigDecimal retailPrice = goodsDto.getRetailPrice(); // 单价
                     BigDecimal storeRetailPrice = goodsDto.getRetailPrice(); // 单价
@@ -2753,13 +2753,17 @@ public class OrderServiceImpl implements OrderService {
             memberConsumptionRecordsDao.save(consumptionRecords);
 
             // 同步会员订单消费记录
-            syncMemberConsumeRecord(memberPhone, order, deductionScore);
+            if (!org.springframework.util.StringUtils.isEmpty(memberCode)) {
+                syncMemberConsumeRecord(memberPhone, order, deductionScore);
+            }
 
             // 积分变动接口,下单扣减
-            syncMemberScoreChangeRecord(openId, order, deductionScore, "下单扣减", HaiKongMemberScoreChangeEventEnum.SUBTRACT.getEvent());
-            // 下单赠送,一元积一分
-            Integer score = order.getActual_price().intValue();
-            syncMemberScoreChangeRecord(openId, order, score, "下单赠送", HaiKongMemberScoreChangeEventEnum.ADD.getEvent());
+            if (!org.springframework.util.StringUtils.isEmpty(memberCode)) {
+                syncMemberScoreChangeRecord(openId, order, deductionScore, "下单扣减", HaiKongMemberScoreChangeEventEnum.SUBTRACT.getEvent());
+                // 下单赠送,一元积一分
+                Integer score = order.getActual_price().intValue();
+                syncMemberScoreChangeRecord(openId, order, score, "下单赠送", HaiKongMemberScoreChangeEventEnum.ADD.getEvent());
+            }
 
             // 生成取票码
             PickUpCodeEntity pickUpCodeEntity = new PickUpCodeEntity();
@@ -3002,7 +3006,13 @@ public class OrderServiceImpl implements OrderService {
             LOGGER.info("请求会员系统同步消费订单接口!请求体:{}", body);
             // 发送请求
             String memberOrderSyncResponseJson = haiKongMemberTemplate.memberOrderSync(body);
-            haiKongMemberOrderSyncResendEntity.setResendStatus(HaiKongMemberOrderResendStatusEnum.NON_RESEND.getStatus());
+            Response<Long> response = JacksonUtil.fromListJson(memberOrderSyncResponseJson, new TypeReference<Response<Long>>() {});
+            if (Objects.nonNull(response) && response.getSuccess()) {
+                haiKongMemberOrderSyncResendEntity.setMemberSysOrderId(response.getData());
+                haiKongMemberOrderSyncResendEntity.setResendStatus(HaiKongMemberOrderResendStatusEnum.NON_RESEND.getStatus());
+            } else {
+                haiKongMemberOrderSyncResendEntity.setResendStatus(HaiKongMemberOrderResendStatusEnum.WAIT_RESEND.getStatus());
+            }
             haiKongMemberOrderSyncResendService.save(haiKongMemberOrderSyncResendEntity);
             LOGGER.info("请求会员系统同步消费订单接口成功!响应数据:{}", memberOrderSyncResponseJson);
         } catch (Exception e) {
@@ -3035,9 +3045,13 @@ public class OrderServiceImpl implements OrderService {
             LOGGER.info("请求会员系统积分变动接口!请求体:{}", body);
             String changeMemberScoreResponseJson = haiKongMemberTemplate.changeMemberScore(body);
             Response<MemberScoreChangeResponseDTO> response = JacksonUtil.fromListJson(changeMemberScoreResponseJson, new TypeReference<Response<MemberScoreChangeResponseDTO>>() {});
-            MemberScoreChangeResponseDTO responseData = response.getData();
-            haiKongMemberScoreChangeRecordEntity.setStatementId(responseData.getStatementId());
-            haiKongMemberScoreChangeRecordEntity.setResendStatus(HaiKongMemberOrderResendStatusEnum.NON_RESEND.getStatus());
+            if (Objects.nonNull(response) && response.getSuccess()) {
+                MemberScoreChangeResponseDTO responseData = response.getData();
+                haiKongMemberScoreChangeRecordEntity.setStatementId(responseData.getStatementId());
+                haiKongMemberScoreChangeRecordEntity.setResendStatus(HaiKongMemberOrderResendStatusEnum.NON_RESEND.getStatus());
+            } else {
+                haiKongMemberScoreChangeRecordEntity.setResendStatus(HaiKongMemberOrderResendStatusEnum.WAIT_RESEND.getStatus());
+            }
             haiKongMemberScoreChangeRecordService.save(haiKongMemberScoreChangeRecordEntity);
             LOGGER.info("请求会员系统积分变动接口成功!响应数据:{}", changeMemberScoreResponseJson);
         } catch (Exception e) {
@@ -4442,7 +4456,7 @@ public class OrderServiceImpl implements OrderService {
         //订单价格计算:订单的总价+运费
         for (GoodsEntity goodsEntity : goodsList) {
             goodsTotalPrice = goodsTotalPrice
-                    .add(goodsEntity.getRetailPrice().multiply(new BigDecimal(goodsEntity.getGoodsNumber()))).setScale(2, RoundingMode.HALF_UP);
+                    .add(goodsEntity.getRetailPrice().multiply(new BigDecimal(goodsEntity.getSellVolume()))).setScale(2, RoundingMode.HALF_UP);
             fullCutCouponDec = fullCutCouponDec
                     .add(goodsEntity.getDiscountedPrice()).setScale(2, RoundingMode.HALF_UP);
             actualPrice = actualPrice
@@ -4562,7 +4576,7 @@ public class OrderServiceImpl implements OrderService {
         orderGoodsVo.setDiscountedPrice(goodsDto.getDiscountedPrice());
         orderGoodsVo.setActualPaymentAmount(goodsDto.getActualPaymentAmount());
 
-        orderGoodsVo.setNumber(goodsDto.getGoodsNumber());
+        orderGoodsVo.setNumber(goodsDto.getSellVolume());
 //        orderGoodsVo.setGoods_specification_name_value(goodsDto.get);
 //        orderGoodsVo.setGoods_specification_ids(goodsItem.getGoods_specification_ids());
         orderGoodsVo.setOrderBizType(Dict.orderBizType.item_10.getItem());
@@ -4574,7 +4588,7 @@ public class OrderServiceImpl implements OrderService {
         orderGoodsVo.setSku(goodsDto.getSku());
 
 
-        BigDecimal number = new BigDecimal(Long.valueOf(goodsDto.getGoodsNumber()));
+        BigDecimal number = new BigDecimal(Long.valueOf(goodsDto.getSellVolume()));
         BigDecimal goodsTotal = goodsDto.getRetailPrice().multiply(number);//单商品总价
         BigDecimal rate = goodsTotal.divide(orderInfo.getGoods_price(), 2, BigDecimal.ROUND_HALF_UP);//当前商品总价/订单总价(不含运费、不含优惠券)
         BigDecimal freightPrice = BigDecimal.valueOf(orderInfo.getFreight_price());

+ 2 - 2
kmall-admin/src/main/java/com/kmall/admin/service/impl/ProductStoreRelaServiceImpl.java

@@ -1302,7 +1302,7 @@ public class ProductStoreRelaServiceImpl implements ProductStoreRelaService {
      * @param productStoreRelaEntity 门店库存实体
      */
     @Override
-    public void updateStockNum(ProductStoreRelaEntity productStoreRelaEntity) {
-        productStoreRelaDao.updateStockNum(productStoreRelaEntity);
+    public void updateStockNumByStoreIdAndSku(ProductStoreRelaEntity productStoreRelaEntity) {
+        productStoreRelaDao.updateStockNumByStoreIdAndSku(productStoreRelaEntity);
     }
 }

+ 10 - 0
kmall-admin/src/main/java/com/kmall/admin/service/impl/haikong/HaiKongMemberOrderSyncResendServiceImpl.java

@@ -59,4 +59,14 @@ public class HaiKongMemberOrderSyncResendServiceImpl implements HaiKongMemberOrd
     public void save(HaiKongMemberOrderSyncResendEntity haiKongMemberOrderSyncResendEntity) {
         haiKongMemberOrderSyncResendDao.save(haiKongMemberOrderSyncResendEntity);
     }
+
+    @Override
+    public List<HaiKongMemberOrderSyncResendEntity> queryListByResendStatus() {
+        return haiKongMemberOrderSyncResendDao.queryListByResendStatus();
+    }
+
+    @Override
+    public void updateResendStatusBatch(List<HaiKongMemberOrderSyncResendEntity> entities) {
+        haiKongMemberOrderSyncResendDao.updateResendStatusBatch(entities);
+    }
 }

+ 13 - 0
kmall-admin/src/main/java/com/kmall/admin/service/impl/haikong/HaiKongMemberScoreChangeRecordServiceImpl.java

@@ -58,4 +58,17 @@ public class HaiKongMemberScoreChangeRecordServiceImpl implements HaiKongMemberS
     public void deleteBatchByOutBizNo(List<String> outBizNos) {
         haiKongMemberScoreChangeRecordDao.deleteBatchByOutBizNo(outBizNos);
     }
+
+    @Override
+    public List<HaiKongMemberScoreChangeRecordEntity> queryListByResendStatus() {
+        return haiKongMemberScoreChangeRecordDao.queryListByResendStatus();
+    }
+
+    /**
+     * 批量更新重发状态
+     */
+    @Override
+    public void updateResendStatusBatch(List<HaiKongMemberScoreChangeRecordEntity> entities) {
+        haiKongMemberScoreChangeRecordDao.updateResendStatusBatch(entities);
+    }
 }

+ 2 - 2
kmall-admin/src/main/resources/mybatis/mapper/ProductStoreRelaDao.xml

@@ -599,13 +599,13 @@
         where a.goods_id = #{goodsId} and a.store_id = #{storeId}
     </select>
 
-    <update id="updateStockNum" parameterType="com.kmall.admin.entity.ProductStoreRelaEntity">
+    <update id="updateStockNumByStoreIdAndSku" parameterType="com.kmall.admin.entity.ProductStoreRelaEntity">
         update mall_product_store_rela a
         <set>
             <if test="stockNum != null">a.`stock_num` = #{stockNum},</if>
             <if test="sellVolume != null">a.`sell_volume` = #{sellVolume},</if>
         </set>
-        where a.goods_id = #{goodsId} and a.store_id = #{storeId}
+        where a.store_id = #{storeId} and a.sku = #{sku}
     </update>
 
     <update id="updateSellVolumeNum" parameterType="com.kmall.api.entity.ProductVo">

+ 50 - 20
kmall-admin/src/main/resources/mybatis/mapper/haikong/HaiKongMemberOrderSyncResendDao.xml

@@ -9,6 +9,7 @@
         <result column="consume_date" property="consumeDate" />
         <result column="open_id" property="openId" />
         <result column="phone" property="phone" />
+        <result column="member_sys_order_id" property="memberSysOrderId" />
         <result column="resend_status" property="resendStatus" />
         <result column="last_resend_time" property="lastResendTime" />
         <result column="create_time" property="createTime" />
@@ -33,28 +34,40 @@
             AND name LIKE concat('%',#{resendStatus},'%')
         </if>
     </select>
+    <select id="queryListByResendStatus"
+            resultType="com.kmall.admin.entity.haikong.HaiKongMemberOrderSyncResendEntity">
+        select *
+        from haikong_member_order_sync_resend
+        where resend_status in ('0', '2')
+    </select>
 
     <insert id="save" parameterType="com.kmall.admin.entity.haikong.HaiKongMemberOrderSyncResendEntity" useGeneratedKeys="true" keyProperty="id">
-        insert into haikong_member_order_sync_resend(
-        `open_id`,
-        `phone`,
-        `consume_date`,
-        `order_amount`,
-        `order_no`,
-        `order_score`,
-        `resend_status`,
-        `last_resend_time`,
-        `create_time`)
-        values(
-        #{openId},
-        #{phone},
-        #{consumeDate},
-        #{orderAmount},
-        #{orderNo},
-        #{orderScore},
-        #{resendStatus},
-        #{lastResendTime},
-        #{createTime}
+        insert into haikong_member_order_sync_resend
+        (
+            `open_id`,
+            `phone`,
+            `consume_date`,
+            `order_amount`,
+            `order_no`,
+            `order_score`,
+            `member_sys_order_id`,
+            `resend_status`,
+            `last_resend_time`,
+            `create_time`
+        )
+        values
+        (
+            #{openId},
+            #{phone},
+            #{consumeDate},
+            #{orderAmount},
+            #{orderNo},
+            #{orderScore},
+            #{memberSysOrderId},
+            #{resendStatus},
+            #{lastResendTime},
+            #{createTime}
+        )
     </insert>
 
     <update id="update" parameterType="com.kmall.admin.entity.haikong.HaiKongMemberOrderSyncResendEntity">
@@ -86,6 +99,23 @@
             id = #{item.id}
         </foreach>
     </update>
+    <update id="updateResendStatusBatch">
+        update haikong_member_order_sync_resend
+        <trim prefix="set" suffixOverrides=",">
+            resend_status =
+            <foreach collection="list" item="item" open="case " close=" end,">
+                when id = #{item.id} then #{item.resendStatus}
+            </foreach>
+            member_sys_order_id =
+            <foreach collection="list" item="item" open="case " close=" end,">
+                when id = #{item.id} then #{item.memberSysOrderId}
+            </foreach>
+        </trim>
+        where id in
+        <foreach collection="list" item="item" open="(" separator="," close=")">
+            #{item.id}
+        </foreach>
+    </update>
 
     <delete id="delete">
         delete from haikong_member_order_sync_resend where id = #{id}

+ 52 - 20
kmall-admin/src/main/resources/mybatis/mapper/haikong/HaiKongMemberScoreChangeRecordDao.xml

@@ -10,6 +10,7 @@
         <result column="change_event" property="changeEvent" />
         <result column="change_id" property="changeId" />
         <result column="statement_id" property="statementId" />
+        <result column="resend_status" property="resendStatus" />
         <result column="modify_time" property="modifyTime" />
         <result column="create_time" property="createTime" />
     </resultMap>
@@ -35,28 +36,40 @@
         select *
         from haikong_member_score_change_record
     </select>
+    <select id="queryListByResendStatus"
+            resultType="com.kmall.admin.entity.haikong.HaiKongMemberScoreChangeRecordEntity">
+        select *
+        from haikong_member_score_change_record
+        where resend_status in ('0', '2')
+    </select>
 
     <insert id="save" parameterType="com.kmall.admin.entity.haikong.HaiKongMemberScoreChangeRecordEntity" useGeneratedKeys="true" keyProperty="id">
-        insert into haikong_member_score_change_record(
-        `open_id`,
-        `score`,
-        `out_biz_no`,
-        `change_reason`,
-        `change_event`,
-        `change_id`,
-        `statement_id`,
-        `modify_time`,
-        `create_time`)
-        values(
-        #{openId},
-        #{score},
-        #{outBizNo},
-        #{changeReason},
-        #{changeId},
-        #{changeEvent},
-        #{statementId},
-        #{modifyTime},
-        #{createTime}
+        insert into haikong_member_score_change_record
+        (
+            `open_id`,
+            `score`,
+            `out_biz_no`,
+            `change_reason`,
+            `change_event`,
+            `change_id`,
+            `statement_id`,
+            `resend_status`,
+            `modify_time`,
+            `create_time`
+        )
+        values
+        (
+            #{openId},
+            #{score},
+            #{outBizNo},
+            #{changeReason},
+            #{changeEvent},
+            #{changeId},
+            #{statementId},
+            #{resendStatus},
+            #{modifyTime},
+            #{createTime}
+        )
     </insert>
 
     <update id="updateByOutBizNo" parameterType="com.kmall.admin.entity.haikong.HaiKongMemberScoreChangeRecordEntity">
@@ -69,12 +82,31 @@
             <if test="changeId != null">`change_id` = #{changeId}, </if>
             <if test="changeEvent != null">`change_event` = #{changeEvent}, </if>
             <if test="statementId != null">`statement_id` = #{statementId}, </if>
+            <if test="resendStatus != null">`resend_status` = #{resendStatus}, </if>
             <if test="modifyTime != null">`modify_time` = #{modifyTime}</if>
             <if test="createTime != null">`create_time` = #{createTime}</if>
         </set>
         where out_biz_no = #{outBizNo}
     </update>
 
+    <update id="updateResendStatusBatch">
+        update haikong_member_score_change_record
+        <trim prefix="set" suffixOverrides=",">
+            resend_status =
+            <foreach collection="list" item="item" open="case " close=" end,">
+                when id = #{item.id} then #{item.resendStatus}
+            </foreach>
+            statement_id =
+            <foreach collection="list" item="item" open="case " close=" end,">
+                when id = #{item.id} then #{item.statementId}
+            </foreach>
+        </trim>
+        where id in
+        <foreach collection="list" item="item" open="(" separator="," close=")">
+            #{item.id}
+        </foreach>
+    </update>
+
     <delete id="deleteByOutBizNo">
         delete from haikong_member_score_change_record where out_biz_no = #{outBizNo}
     </delete>