Forráskód Böngészése

fix:积分变动记录、消费订单同步重发逻辑bug

lhm 3 éve
szülő
commit
648d15c1c0

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

@@ -65,5 +65,5 @@ public interface HaiKongMemberOrderSyncResendDao {
 
     List<HaiKongMemberOrderSyncResendEntity> queryListByResendStatus();
 
-    void updateResendStatusBatch(@Param("list") List<Long> ids, @Param("resendStatus") String status);
+    void updateResendStatusBatch(List<HaiKongMemberOrderSyncResendEntity> entities);
 }

+ 1 - 4
kmall-admin/src/main/java/com/kmall/admin/dao/haikong/HaiKongMemberScoreChangeRecordDao.java

@@ -32,9 +32,6 @@ public interface HaiKongMemberScoreChangeRecordDao {
 
     /**
      * 批量更新重发状态
-     *
-     * @param ids 需要更新的记录id
-     * @param status   重发状态
      */
-    void updateResendStatusBatch(@Param("list") List<Long> ids, @Param("resendStatus") String status);
+    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 +

+ 15 - 12
kmall-admin/src/main/java/com/kmall/admin/haikong/task/MemberOrderSyncResendTask.java

@@ -47,8 +47,8 @@ public class MemberOrderSyncResendTask {
         if (CollectionUtils.isEmpty(haiKongMemberOrderSyncResendEntities)) {
             return;
         }
-        List<Long> successIdList = new ArrayList<>();
-        List<Long> failedIdList = new ArrayList<>();
+        List<HaiKongMemberOrderSyncResendEntity> successList = new ArrayList<>();
+        List<HaiKongMemberOrderSyncResendEntity> failedList = new ArrayList<>();
         haiKongMemberOrderSyncResendEntities.forEach(haiKongMemberOrderSyncResendEntity -> {
             MemberOrderInfoSyncDTO memberOrderInfoSyncDTO = new MemberOrderInfoSyncDTO();
             BeanUtils.copyProperties(haiKongMemberOrderSyncResendEntity, memberOrderInfoSyncDTO);
@@ -56,29 +56,32 @@ public class MemberOrderSyncResendTask {
             log.info("【重发】请求会员消费订单同步接口!请求体:{}", body);
             try {
                 String responseJson = haiKongMemberTemplate.changeMemberScore(body);
-                Response<MemberScoreChangeResponseDTO> response = JacksonUtil.fromListJson(responseJson, new TypeReference<Response<MemberScoreChangeResponseDTO>>() {});
+                Response<Long> response = JacksonUtil.fromListJson(responseJson, new TypeReference<Response<Long>>() {});
                 if (Objects.nonNull(response) && response.getSuccess()) {
-                    MemberScoreChangeResponseDTO responseData = response.getData();
-                    BeanUtils.copyProperties(responseData, haiKongMemberOrderSyncResendEntity);
+                    haiKongMemberOrderSyncResendEntity.setMemberSysOrderId(response.getData());
                     haiKongMemberOrderSyncResendEntity.setResendStatus(HaiKongMemberOrderResendStatusEnum.RESEND_SUCCESS.getStatus());
-                    successIdList.add(haiKongMemberOrderSyncResendEntity.getId().longValue());
+                    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());
-                failedIdList.add(haiKongMemberOrderSyncResendEntity.getId().longValue());
+                failedList.add(haiKongMemberOrderSyncResendEntity);
                 log.error("【重发】请求会员消费订单同步接口失败!异常:", e);
             }
         });
 
-        if (!CollectionUtils.isEmpty(successIdList)) {
-            haiKongMemberOrderSyncResendService.updateResendStatusBatch(successIdList, HaiKongMemberOrderResendStatusEnum.RESEND_SUCCESS.getStatus());
+        if (!CollectionUtils.isEmpty(successList)) {
+            haiKongMemberOrderSyncResendService.updateResendStatusBatch(successList);
         }
 
-        if (!CollectionUtils.isEmpty(failedIdList)) {
-            haiKongMemberOrderSyncResendService.updateResendStatusBatch(failedIdList, HaiKongMemberOrderResendStatusEnum.RESEND_FAILED.getStatus());
+        if (!CollectionUtils.isEmpty(failedList)) {
+            haiKongMemberOrderSyncResendService.updateResendStatusBatch(failedList);
         }
-        log.info("【重发】此次重发会员消费订单同步接口!成功【{}】条,失败【{}】条!", successIdList.size(), failedIdList.size());
+        log.info("【重发】此次重发会员消费订单同步接口!成功【{}】条,失败【{}】条!", successList.size(), failedList.size());
     }
 
 

+ 14 - 10
kmall-admin/src/main/java/com/kmall/admin/haikong/task/MemberScoreChangeResendTask.java

@@ -46,8 +46,8 @@ public class MemberScoreChangeResendTask {
         if (CollectionUtils.isEmpty(haiKongMemberScoreChangeRecordEntities)) {
             return;
         }
-        List<Long> successIdList = new ArrayList<>();
-        List<Long> failedIdList = new ArrayList<>();
+        List<HaiKongMemberScoreChangeRecordEntity> successList = new ArrayList<>();
+        List<HaiKongMemberScoreChangeRecordEntity> failedList = new ArrayList<>();
         haiKongMemberScoreChangeRecordEntities.forEach(haiKongMemberScoreChangeRecordEntity -> {
             MemberScoreChangeDTO memberScoreChangeDTO = new MemberScoreChangeDTO();
             BeanUtils.copyProperties(haiKongMemberScoreChangeRecordEntity, memberScoreChangeDTO);
@@ -58,26 +58,30 @@ public class MemberScoreChangeResendTask {
                 Response<MemberScoreChangeResponseDTO> response = JacksonUtil.fromListJson(responseJson, new TypeReference<Response<MemberScoreChangeResponseDTO>>() {});
                 if (Objects.nonNull(response) && response.getSuccess()) {
                     MemberScoreChangeResponseDTO responseData = response.getData();
-                    BeanUtils.copyProperties(responseData, haiKongMemberScoreChangeRecordEntity);
+                    haiKongMemberScoreChangeRecordEntity.setStatementId(responseData.getStatementId());
                     haiKongMemberScoreChangeRecordEntity.setResendStatus(HaiKongMemberOrderResendStatusEnum.RESEND_SUCCESS.getStatus());
-                    successIdList.add(haiKongMemberScoreChangeRecordEntity.getId());
+                    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());
-                failedIdList.add(haiKongMemberScoreChangeRecordEntity.getId());
+                failedList.add(haiKongMemberScoreChangeRecordEntity);
                 log.error("【重发】请求会员系统积分变动接口失败!异常:", e);
             }
         });
 
-        if (!CollectionUtils.isEmpty(successIdList)) {
-            haiKongMemberScoreChangeRecordService.updateResendStatusBatch(successIdList, HaiKongMemberOrderResendStatusEnum.RESEND_SUCCESS.getStatus());
+        if (!CollectionUtils.isEmpty(successList)) {
+            haiKongMemberScoreChangeRecordService.updateResendStatusBatch(successList);
         }
 
-        if (!CollectionUtils.isEmpty(failedIdList)) {
-            haiKongMemberScoreChangeRecordService.updateResendStatusBatch(failedIdList, HaiKongMemberOrderResendStatusEnum.RESEND_FAILED.getStatus());
+        if (!CollectionUtils.isEmpty(failedList)) {
+            haiKongMemberScoreChangeRecordService.updateResendStatusBatch(failedList);
         }
-        log.info("【重发】此次重发会员积分变动接口!成功【{}】条,失败【{}】条!", successIdList.size(), failedIdList.size());
+        log.info("【重发】此次重发会员积分变动接口!成功【{}】条,失败【{}】条!", successList.size(), failedList.size());
     }
 
 

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

@@ -38,5 +38,5 @@ public interface HaiKongMemberOrderSyncResendService {
 
     List<HaiKongMemberOrderSyncResendEntity> queryListByResendStatus();
 
-    void updateResendStatusBatch(List<Long> ids, String status);
+    void updateResendStatusBatch(List<HaiKongMemberOrderSyncResendEntity> entities);
 }

+ 1 - 3
kmall-admin/src/main/java/com/kmall/admin/service/haikong/HaiKongMemberScoreChangeRecordService.java

@@ -31,8 +31,6 @@ public interface HaiKongMemberScoreChangeRecordService {
 
     /**
      * 批量更新重发状态
-     * @param ids  需要更新的记录id
-     * @param status    重发状态
      */
-    void updateResendStatusBatch(List<Long> ids, String status);
+    void updateResendStatusBatch(List<HaiKongMemberScoreChangeRecordEntity> entities);
 }

+ 14 - 4
kmall-admin/src/main/java/com/kmall/admin/service/impl/OrderServiceImpl.java

@@ -3006,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) {
@@ -3039,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) {

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

@@ -66,7 +66,7 @@ public class HaiKongMemberOrderSyncResendServiceImpl implements HaiKongMemberOrd
     }
 
     @Override
-    public void updateResendStatusBatch(List<Long> ids, String status) {
-        haiKongMemberOrderSyncResendDao.updateResendStatusBatch(ids, status);
+    public void updateResendStatusBatch(List<HaiKongMemberOrderSyncResendEntity> entities) {
+        haiKongMemberOrderSyncResendDao.updateResendStatusBatch(entities);
     }
 }

+ 2 - 5
kmall-admin/src/main/java/com/kmall/admin/service/impl/haikong/HaiKongMemberScoreChangeRecordServiceImpl.java

@@ -66,12 +66,9 @@ public class HaiKongMemberScoreChangeRecordServiceImpl implements HaiKongMemberS
 
     /**
      * 批量更新重发状态
-     *
-     * @param ids 需要更新的记录id
-     * @param status   重发状态
      */
     @Override
-    public void updateResendStatusBatch(List<Long> ids, String status) {
-        haiKongMemberScoreChangeRecordDao.updateResendStatusBatch(ids, status);
+    public void updateResendStatusBatch(List<HaiKongMemberScoreChangeRecordEntity> entities) {
+        haiKongMemberScoreChangeRecordDao.updateResendStatusBatch(entities);
     }
 }

+ 15 - 2
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" />
@@ -49,6 +50,7 @@
             `order_amount`,
             `order_no`,
             `order_score`,
+            `member_sys_order_id`,
             `resend_status`,
             `last_resend_time`,
             `create_time`
@@ -61,6 +63,7 @@
             #{orderAmount},
             #{orderNo},
             #{orderScore},
+            #{memberSysOrderId},
             #{resendStatus},
             #{lastResendTime},
             #{createTime}
@@ -97,10 +100,20 @@
         </foreach>
     </update>
     <update id="updateResendStatusBatch">
-        update haikong_member_order_sync_resend set resend_status = #{resendStatus}
+        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}
+            #{item.id}
         </foreach>
     </update>
 

+ 12 - 2
kmall-admin/src/main/resources/mybatis/mapper/haikong/HaiKongMemberScoreChangeRecordDao.xml

@@ -90,10 +90,20 @@
     </update>
 
     <update id="updateResendStatusBatch">
-        update haikong_member_score_change_record set resend_status = #{resendStatus}
+        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}
+            #{item.id}
         </foreach>
     </update>