Pārlūkot izejas kodu

优化打卡文章红包领取接口

cgp 1 nedēļu atpakaļ
vecāks
revīzija
c1f0c9bc30

+ 12 - 1
fs-service/src/main/java/com/fs/course/service/impl/FsCourseRedPacketLogServiceImpl.java

@@ -24,6 +24,7 @@ import com.fs.his.service.IFsStorePaymentService;
 import com.fs.qw.domain.BindPhoneRedPacketRecord;
 import com.fs.qw.domain.SignRedPacketRecord;
 import com.fs.qw.mapper.BindPhoneRedPacketRecordMapper;
+import com.fs.qw.mapper.SignRedPacketRecordMapper;
 import com.fs.system.service.ISysConfigService;
 import com.github.binarywang.wxpay.bean.transfer.TransferBillsResult;
 import org.slf4j.Logger;
@@ -55,6 +56,9 @@ public class FsCourseRedPacketLogServiceImpl implements IFsCourseRedPacketLogSer
 
     @Autowired
     private BindPhoneRedPacketRecordMapper bindPhoneRedPacketRecordMapper;
+
+    @Autowired
+    private SignRedPacketRecordMapper signRedPacketRecordMapper;
     /**
      * 查询短链课程看课记录
      *
@@ -154,7 +158,14 @@ public class FsCourseRedPacketLogServiceImpl implements IFsCourseRedPacketLogSer
             }
         } else if (outBatchNo.contains("articlePacket")) {
             //打卡红包回调
-            SignRedPacketRecord record = new SignRedPacketRecord();
+            SignRedPacketRecord record=signRedPacketRecordMapper.selectSignRedPacketRecordByOutBatchNo(outBatchNo);
+            if (record!=null){
+                record.setCollectType(1);
+                record.setUpdateTime(new Date());
+                record.setBatchId(batchId);
+                signRedPacketRecordMapper.updateSignRedPacketRecord(record);
+                return R.ok();
+            }
         }else {
             //看课红包回调
             FsCourseRedPacketLog log = fsCourseRedPacketLogMapper.selectFsCourseRedPacketLogByBatchNo(outBatchNo);

+ 4 - 0
fs-service/src/main/java/com/fs/his/param/ClaimArticleRedPacketParam.java

@@ -24,6 +24,10 @@ public class ClaimArticleRedPacketParam {
     /** 签到图片/视频地址 */
     private String signUrl;
 
+    /** 打卡类型 打卡类型:1-直接打卡 2-上传图片 3-上传视频 */
+    private Integer signType;
+
+
     private Integer source=2;//H5、小程序发打卡文章红包时默认为2
 
 }

+ 21 - 19
fs-service/src/main/java/com/fs/his/service/impl/FsSignArticleReadDetailServiceImpl.java

@@ -224,25 +224,24 @@ public class FsSignArticleReadDetailServiceImpl implements IFsSignArticleReadDet
         QwUser qwUser = qwUserMapper.selectQwUserById(Long.valueOf(param.getQwUserId()));
         if (qwUser == null) throw new CustomException("企微用户信息缺失");
 
-        // 4. 获取用户在该小程序的 openId(若不存在则尝试补救一次)
-        FsUserWx fsUserWx = fsUserWxService.selectByAppIdAndUserId(param.getAppId(), user.getUserId(), 1);
-        if (fsUserWx == null) {
-            handleFsUserWx(user, param.getAppId());   // 补救逻辑(已存在的老方法)
-            fsUserWx = fsUserWxService.selectByAppIdAndUserId(param.getAppId(), user.getUserId(), 1);
-        }
-        if (fsUserWx == null || StringUtils.isEmpty(fsUserWx.getOpenId())) {
-            throw new CustomException("用户openId获取失败");
-        }
-
         // ******************** 阶段二:组装微信参数并发送 ********************
         WxSendRedPacketParam wxParam = new WxSendRedPacketParam();
-        wxParam.setOpenId(fsUserWx.getOpenId());
+        //处理多小程序问题
+        FsUserWx fsUserWx = fsUserWxService.selectByAppIdAndUserId(param.getAppId(),user.getUserId(),1);
+        if (fsUserWx ==null){
+            try {
+                handleFsUserWx(user,param.getAppId());
+            }catch (Exception e){
+                log.error("【更新或插入用户与小程序的绑定关系失败】:{}", user.getUserId());
+            }
+        }else {
+            wxParam.setOpenId(fsUserWx.getOpenId());
+        }
         wxParam.setAmount(article.getAmount());
         wxParam.setRedPacketMode(1);
         wxParam.setAppId(param.getAppId());
         wxParam.setMpAppId(param.getAppId());
         wxParam.setUser(user);
-        wxParam.setPhoneTag(true);
         wxParam.setSource(2);
         wxParam.setCompanyId(companyUser.getCompanyId());
         wxParam.setSourceType(1L);      // 文章红包标识
@@ -260,8 +259,12 @@ public class FsSignArticleReadDetailServiceImpl implements IFsSignArticleReadDet
     private R handleExistingRecord(SignRedPacketRecord record) {
         if (record.getCollectType() == 1) {
             return R.error("您已领取过该文章红包");
-        } else if (record.getCollectType() == 0) {
-            return R.ok(record.getResult());
+        } else if (record.getCollectType()==0||record.getCollectTag() == 1) {
+                if (StringUtils.isNotEmpty(record.getResult())) {
+                    return R.ok().put("data",JSON.parseObject(record.getResult(), R.class));
+                } else {
+                    return R.error("操作频繁,请稍后再试!");
+                }
         }
         return R.error("红包状态异常");
     }
@@ -278,8 +281,7 @@ public class FsSignArticleReadDetailServiceImpl implements IFsSignArticleReadDet
                                   QwUser qwUser,
                                   FsSignArticle article) {
 
-        // 修正:code 是 Integer,必须用 equals 比较
-        if (!Integer.valueOf(200).equals(sendResult.get("code"))) {
+        if (!sendResult.get("code").equals(200)) {
             log.error("打卡文章红包-领取失败: {}", sendResult);
             throw new CustomException("领取失败");
         }
@@ -299,9 +301,9 @@ public class FsSignArticleReadDetailServiceImpl implements IFsSignArticleReadDet
 
         Date now = DateUtils.getNowDate();
         record.setSignUrl(param.getSignUrl());
-        record.setCollectTag(0);
+        record.setCollectTag(1);
         record.setCollectType(0);
-        record.setSignType(1);                  // 1-直接打卡
+        record.setSignType(param.getSignType());
         record.setSendTime(now);
         record.setUpdateTime(now);
         record.setCreateTime(now);
@@ -316,7 +318,7 @@ public class FsSignArticleReadDetailServiceImpl implements IFsSignArticleReadDet
         record.setQwUserName(qwUser.getQwUserName());
 
         signRedPacketRecordMapper.insertSignRedPacketRecord(record);
-        return sendResult;
+        return R.ok().put("data",sendResult);
     }
 
     /**

+ 7 - 0
fs-service/src/main/java/com/fs/qw/mapper/SignRedPacketRecordMapper.java

@@ -77,6 +77,13 @@ public interface SignRedPacketRecordMapper extends BaseMapper<SignRedPacketRecor
      */
     int deleteSignRedPacketRecordByIds(Long[] ids);
 
+    /**
+     * 根据商户订单号查询红包记录
+     * @param outBatchNo 商户订单号
+     * @return 红包记录
+     */
+    SignRedPacketRecord selectSignRedPacketRecordByOutBatchNo(String outBatchNo);
+
     /**
      * 查询用户领取文章红包记录
      * @param articleId 文章id

+ 6 - 0
fs-service/src/main/resources/mapper/qw/SignRedPacketRecordMapper.xml

@@ -72,6 +72,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         WHERE user_id = #{userId}
         AND article_id = #{articleId}
     </select>
+    <select id="selectSignRedPacketRecordByOutBatchNo" resultType="com.fs.qw.domain.SignRedPacketRecord">
+        <include refid="selectSignRedPacketRecordVo"/>
+        <where>
+            out_batch_no = #{outBatchNo}
+        </where>
+    </select>
 
     <insert id="insertSignRedPacketRecord" parameterType="SignRedPacketRecord">
         insert into sign_red_packet_record