Bläddra i källkod

益寿缘app-优化App奖品发红包逻辑

cgp 1 vecka sedan
förälder
incheckning
ba13a6c120

+ 8 - 0
fs-service/src/main/java/com/fs/his/domain/FsPackageOrder.java

@@ -1,5 +1,6 @@
 package com.fs.his.domain;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fs.common.annotation.Excel;
 import com.fs.common.core.domain.BaseEntity;
@@ -158,4 +159,11 @@ public class FsPackageOrder extends BaseEntity
     private Long userCouponId;
     private String icdCode;
     private Integer source;
+
+    /**
+     * app奖品订单(不参与常规订单统计),
+     * 1:首次注册奖品订单,2:看课奖品订单;常规订单可不传
+     * */
+    @TableField(exist = false)
+    private Integer appRewardFlag;
 }

+ 6 - 0
fs-service/src/main/java/com/fs/his/domain/FsStoreOrder.java

@@ -288,4 +288,10 @@ public class FsStoreOrder extends BaseEntity
 
     //是签收时通知 0否 1是
     private Integer isReceiveNotice;
+
+    /**
+     * app奖品订单(不参与常规订单统计),
+     * 1:首次注册奖品订单,2:看课奖品订单;常规订单可不传
+     * */
+    private Integer appRewardFlag;
 }

+ 3 - 4
fs-service/src/main/java/com/fs/his/param/FsPackageOrderAddRewardsParam.java

@@ -17,9 +17,8 @@ public class FsPackageOrderAddRewardsParam {
     private Long companyId;
     private Long companyUserId;
     /**
-     * 订单来源
-     * 10000-首次注册登录App0元订单
-     * 10001-App看课0元订单
+     * app奖品订单(不参与常规订单统计);
+     * 1:首次注册奖品订单、2:看课奖品订单;常规订单可不传
      * */
-    private Integer orderResource;
+    private Integer appRewardFlag;
 }

+ 0 - 1
fs-service/src/main/java/com/fs/his/param/WxSendRedPacketParam.java

@@ -28,5 +28,4 @@ public class WxSendRedPacketParam implements Serializable {
 
     private String mpAppId;
 
-
 }

+ 5 - 0
fs-service/src/main/java/com/fs/his/service/IFsPackageOrderService.java

@@ -90,6 +90,11 @@ public interface IFsPackageOrderService
 //    R  payConfirm(String orderSn,String payCode, String tradeNo,String payType,Integer type);
     R  payConfirm(String orderSn,String payCode, String tradeNo,String payType,Integer type,String bankTransactionId,String bankSerialNo);
 
+    /**
+     * App奖品套餐包订单支付成功后处理(主要用于创建fs_store_order订单)
+     * */
+    R payConfirmAppReward(String orderSn,Integer type,Integer appRewardFlag);
+
     List<FsPackageOrderListUVO> selectFsPackageOrderListUVO(FsPackageOrderListUParam param);
 
     List<FsStorePayment> selectFsPackagePaymentByOrderId(Long orderId);

+ 42 - 2
fs-service/src/main/java/com/fs/his/service/impl/FsPackageOrderServiceImpl.java

@@ -1205,6 +1205,47 @@ public class FsPackageOrderServiceImpl implements IFsPackageOrderService
         return R.ok();
     }
 
+
+
+    @Override
+    @Transactional
+    public R payConfirmAppReward(String orderSn,Integer type,Integer appRewardFlag) {
+        logger.info("进入订单");
+        FsPackageOrder order=null;
+        HuifuOrderConfirmResult result = null;
+        if(type.equals(2)){
+            order=fsPackageOrderMapper.selectFsPackageOrderByOrderSn(orderSn);
+        }
+        if(!order.getStatus().equals(FsPackageOrderStatusEnum.STATUS_1.getValue())&&!order.getStatus().equals(FsPackageOrderStatusEnum.STATUS_NE1.getValue())){
+            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+            return R.error("非法操作");
+        }
+        FsPackageOrder map = new FsPackageOrder();
+        map.setOrderId(order.getOrderId());
+        map.setIsPay(1);
+        map.setStatus(FsPackageOrderStatusEnum.STATUS_2.getValue());
+        map.setPayTime(new Date());
+        map.setPrescribePrice(order.getTotalPrice());
+        fsPackageOrderMapper.updateFsPackageOrder(map);
+        logger.info("更改App奖品套餐包订单记录");
+        Map<String,Object> packageJson = (Map)JSON.parse(order.getPackageJson());
+        Integer packageSubType = (Integer)packageJson.get("packageSubType");
+        if (packageSubType!=1){
+            logger.info("App奖品创建fs_store_order订单");
+            order.setAppRewardFlag(appRewardFlag);
+            storeOrderService.createOrderByPackageOrder(order,result);
+        }
+        FsUser fsUser = fsUserService.selectFsUserByUserId(order.getUserId());
+        if (fsUser.getIsBuy()==null||fsUser.getIsBuy()==0){
+            FsUser u = new FsUser();
+            u.setUserId(order.getUserId());
+            u.setIsBuy(1);
+            fsUserService.updateFsUser(u);
+        }
+        logger.info("更新完成");
+        return R.ok();
+    }
+
     @Override
     public List<FsPackageOrderListUVO> selectFsPackageOrderListUVO(FsPackageOrderListUParam param) {
         return  fsPackageOrderMapper.selectFsPackageOrderListUVO(param);
@@ -2171,7 +2212,6 @@ public class FsPackageOrderServiceImpl implements IFsPackageOrderService
         order.setPayPrice(fsPackage.getTotalPrice());
         order.setPayMoney(new BigDecimal(0));//这里要是全款订单 但实际没有实付金额
         order.setIsPay(0);
-        order.setSource(param.getOrderResource());//订单来源
         order.setPackageSecondName(fsPackage.getSecondName());
         order.setDoctorRemark(fsPackage.getDoctorRemark());
         order.setFollowTempId(fsPackage.getFollowTempId());
@@ -2232,7 +2272,7 @@ public class FsPackageOrderServiceImpl implements IFsPackageOrderService
         order.setPayRemain((BigDecimal)moneys.get("payRemain"));
         order.setPayType(param.getPayType());
         if(fsPackageOrderMapper.insertFsPackageOrder(order)>0){
-            this.payConfirm(order.getOrderSn(),"","","",2,null,null);
+            this.payConfirmAppReward(order.getOrderSn(),2,param.getAppRewardFlag());
             return R.ok().put("order",order);
         }
         else{

+ 4 - 0
fs-service/src/main/java/com/fs/his/service/impl/FsStoreOrderServiceImpl.java

@@ -1006,6 +1006,10 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService {
                 informationCollectionScheduleMapper.updateFsUserInformationCollectionSchedule(map);
             }
         }
+        if (packageOrder.getAppRewardFlag() != null) {
+            //标记这个订单是App奖品订单
+            order.setAppRewardFlag(packageOrder.getAppRewardFlag());
+        }
         order.setStatus(2);
         order.setPayDelivery(packageOrder.getPayDelivery());
         order.setPayRemain(packageOrder.getPayRemain());

+ 2 - 0
fs-service/src/main/java/com/fs/his/strategy/impl/FirstLoginProductStrategy.java

@@ -100,6 +100,7 @@ public class FirstLoginProductStrategy implements RewardStrategy {
         param.setAddressId(reward.getAddressId());
         param.setPackageId(reward.getGoodsId());
         param.setPayType(1);//全款
+        param.setAppRewardFlag(1);//首次注册奖品订单标识
         return param;
     }
 
@@ -116,6 +117,7 @@ public class FirstLoginProductStrategy implements RewardStrategy {
             throw new CustomException("商城商品不存在");
         }
         param.setErpType(fsStoreOrderScrm.getErpType());
+        param.setAppRewardFlag(1);//首次注册奖品订单标识
         return param;
     }
 

+ 39 - 2
fs-service/src/main/java/com/fs/his/strategy/impl/FirstLoginRedPacketStrategy.java

@@ -1,5 +1,9 @@
 package com.fs.his.strategy.impl;
 
+import com.alibaba.fastjson.JSON;
+import com.fs.common.core.domain.R;
+import com.fs.course.domain.FsCourseRedPacketLog;
+import com.fs.course.mapper.FsCourseRedPacketLogMapper;
 import com.fs.his.domain.FsUser;
 import com.fs.his.domain.FsUserRewards;
 import com.fs.his.enums.ActivityTypeEnum;
@@ -8,10 +12,13 @@ import com.fs.his.param.WxSendRedPacketParam;
 import com.fs.his.service.IFsStorePaymentService;
 import com.fs.his.strategy.RewardResult;
 import com.fs.his.strategy.RewardStrategy;
+import com.github.binarywang.wxpay.bean.transfer.TransferBillsResult;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import java.util.Date;
+
 @Slf4j
 @Component
 public class FirstLoginRedPacketStrategy implements RewardStrategy {
@@ -21,6 +28,9 @@ public class FirstLoginRedPacketStrategy implements RewardStrategy {
 
     @Autowired
     private IFsStorePaymentService fsStorePaymentService;
+
+    @Autowired
+    private FsCourseRedPacketLogMapper redPacketLogMapper;
     @Override
     public RewardResult process(FsUserRewards reward) {
         log.info("处理首次登录红包发放: rewardId={}", reward.getId());
@@ -29,11 +39,38 @@ public class FirstLoginRedPacketStrategy implements RewardStrategy {
             if (fsUser!=null){
                 WxSendRedPacketParam param=buildRedPacketParam(reward, fsUser);
                 //调用发送红包接口逻辑
-                fsStorePaymentService.sendRedPacket(param);
+                R sendRedPacket = fsStorePaymentService.sendRedPacket(param);
+                if (sendRedPacket.get("code").equals(200)) {
+                    FsCourseRedPacketLog redPacketLog = new FsCourseRedPacketLog();
+                    TransferBillsResult transferBillsResult;
+                    if (sendRedPacket.get("isNew").equals(1)){
+                        transferBillsResult = (TransferBillsResult)sendRedPacket.get("data");
+                        redPacketLog.setResult(JSON.toJSONString(sendRedPacket));
+                        redPacketLog.setOutBatchNo(transferBillsResult.getOutBillNo());
+                    }else {
+                        redPacketLog.setOutBatchNo(sendRedPacket.get("orderCode").toString());
+                        redPacketLog.setBatchId(sendRedPacket.get("batchId").toString());
+                    }
+                    // 添加红包记录
+                    //redPacketLog.setCourseId(param.getCourseId());
+                    redPacketLog.setCompanyId(param.getCompanyId());
+                    redPacketLog.setUserId(reward.getFsUserId());
+                    //redPacketLog.setVideoId(param.getVideoId());
+                    redPacketLog.setStatus(0);
+                    redPacketLog.setCreateTime(new Date());
+                    redPacketLog.setAmount(reward.getRewardAmount());
+                    //redPacketLog.setWatchLogId(log.getLogId() != null ? log.getLogId() : null);
+                    //redPacketLog.setPeriodI d(param.getPeriodId());
+                    redPacketLog.setAppId(param.getAppId());
+
+                    redPacketLogMapper.insertFsCourseRedPacketLog(redPacketLog);
+                } else {
+                    return RewardResult.fail("红包发放失败,请联系客服");
+                }
             }
             return RewardResult.success();
         } catch (Exception e) {
-            return RewardResult.fail("红包发放失败");
+            return RewardResult.fail("红包发放失败,请联系客服");
         }
     }
 

+ 2 - 0
fs-service/src/main/java/com/fs/his/strategy/impl/WatchCourseProductStrategy.java

@@ -100,6 +100,7 @@ public class WatchCourseProductStrategy  implements RewardStrategy {
         param.setAddressId(reward.getAddressId());
         param.setPackageId(reward.getGoodsId());
         param.setPayType(1);//全款
+        param.setAppRewardFlag(2);//2:看课奖品订单
         return param;
     }
 
@@ -116,6 +117,7 @@ public class WatchCourseProductStrategy  implements RewardStrategy {
             throw new CustomException("商城商品不存在");
         }
         param.setErpType(fsStoreOrderScrm.getErpType());
+        param.setAppRewardFlag(2);//2:看课奖品订单
         return param;
     }
 

+ 39 - 2
fs-service/src/main/java/com/fs/his/strategy/impl/WatchCourseRedPacketStrategy.java

@@ -1,5 +1,9 @@
 package com.fs.his.strategy.impl;
 
+import com.alibaba.fastjson.JSON;
+import com.fs.common.core.domain.R;
+import com.fs.course.domain.FsCourseRedPacketLog;
+import com.fs.course.mapper.FsCourseRedPacketLogMapper;
 import com.fs.his.domain.FsUser;
 import com.fs.his.domain.FsUserRewards;
 import com.fs.his.enums.ActivityTypeEnum;
@@ -8,10 +12,13 @@ import com.fs.his.param.WxSendRedPacketParam;
 import com.fs.his.service.IFsStorePaymentService;
 import com.fs.his.strategy.RewardResult;
 import com.fs.his.strategy.RewardStrategy;
+import com.github.binarywang.wxpay.bean.transfer.TransferBillsResult;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import java.util.Date;
+
 @Slf4j
 @Component
 public class WatchCourseRedPacketStrategy implements RewardStrategy {
@@ -21,6 +28,9 @@ public class WatchCourseRedPacketStrategy implements RewardStrategy {
 
     @Autowired
     private IFsStorePaymentService fsStorePaymentService;
+
+    @Autowired
+    private FsCourseRedPacketLogMapper redPacketLogMapper;
     @Override
     public RewardResult process(FsUserRewards reward) {
         log.info("处理看课红包发放: rewardId={}", reward.getId());
@@ -29,12 +39,39 @@ public class WatchCourseRedPacketStrategy implements RewardStrategy {
             if (fsUser!=null){
                 WxSendRedPacketParam param=buildRedPacketParam(reward, fsUser);
                 //调用发送红包接口逻辑
-                fsStorePaymentService.sendRedPacket(param);
+                R sendRedPacket = fsStorePaymentService.sendRedPacket(param);
+                if (sendRedPacket.get("code").equals(200)) {
+                    FsCourseRedPacketLog redPacketLog = new FsCourseRedPacketLog();
+                    TransferBillsResult transferBillsResult;
+                    if (sendRedPacket.get("isNew").equals(1)){
+                        transferBillsResult = (TransferBillsResult)sendRedPacket.get("data");
+                        redPacketLog.setResult(JSON.toJSONString(sendRedPacket));
+                        redPacketLog.setOutBatchNo(transferBillsResult.getOutBillNo());
+                    }else {
+                        redPacketLog.setOutBatchNo(sendRedPacket.get("orderCode").toString());
+                        redPacketLog.setBatchId(sendRedPacket.get("batchId").toString());
+                    }
+                    // 添加红包记录
+                    //redPacketLog.setCourseId(param.getCourseId());
+                    redPacketLog.setCompanyId(param.getCompanyId());
+                    redPacketLog.setUserId(reward.getFsUserId());
+                    //redPacketLog.setVideoId(param.getVideoId());
+                    redPacketLog.setStatus(0);
+                    redPacketLog.setCreateTime(new Date());
+                    redPacketLog.setAmount(reward.getRewardAmount());
+                    //redPacketLog.setWatchLogId(log.getLogId() != null ? log.getLogId() : null);
+                    //redPacketLog.setPeriodI d(param.getPeriodId());
+                    redPacketLog.setAppId(param.getAppId());
+
+                    redPacketLogMapper.insertFsCourseRedPacketLog(redPacketLog);
+                } else {
+                    return RewardResult.fail("红包发放失败,请联系客服");
+                }
             }
             return RewardResult.success();
 
         } catch (Exception e) {
-            return RewardResult.fail("红包发放失败");
+            return RewardResult.fail("红包发放失败,请联系客服");
         }
     }
 

+ 6 - 0
fs-service/src/main/java/com/fs/hisStore/domain/FsStoreOrderScrm.java

@@ -366,4 +366,10 @@ public class FsStoreOrderScrm extends BaseEntity
 
     //1 聚水潭 2 兔灵
     private Integer erpType;
+
+    /**
+     * app奖品订单(不参与常规订单统计);
+     * 1:首次注册奖品订单、2:看课奖品订单;常规订单可不传
+     * */
+    private Integer appRewardFlag;
 }

+ 5 - 0
fs-service/src/main/java/com/fs/hisStore/param/FsStoreOrderCreateParamAppReward.java

@@ -55,4 +55,9 @@ public class FsStoreOrderCreateParamAppReward implements Serializable {
     private Integer erpType;//erp类型
     private BigDecimal costPrice;//商品成本价
     private Long goodsId;//商品id
+    /**
+     * app奖品订单(不参与常规订单统计);
+     * 1:首次注册奖品订单、2:看课奖品订单;常规订单可不传
+     * */
+    private Integer appRewardFlag;
 }

+ 4 - 0
fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreOrderScrmServiceImpl.java

@@ -1081,6 +1081,10 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
 
         storeOrder.setOrderType(param.getOrderType());
         storeOrder.setOrderMedium(param.getOrderMedium());
+        if (param.getAppRewardFlag()!=null){
+            //标记这个订单是App奖品订单
+            storeOrder.setAppRewardFlag(param.getAppRewardFlag());
+        }
         Integer flag = fsStoreOrderMapper.insertFsStoreOrder(storeOrder);
         if (flag == 0) {
             return R.error("订单创建失败");

+ 6 - 1
fs-service/src/main/resources/mapper/his/FsStoreOrderMapper.xml

@@ -99,6 +99,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="zyyHuifuId"    column="zyy_huifu_id"    />
         <result property="tagNames"    column="tag_names"    />
         <result property="erpType"    column="erp_type"    />
+        <result property="appRewardFlag"    column="app_reward_flag"    />
     </resultMap>
 
     <sql id="selectFsStoreOrderVo">
@@ -147,7 +148,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="tuiUserId != null "> and tui_user_id = #{tuiUserId}</if>
             <if test="orderCreateType != null "> and order_create_type = #{orderCreateType}</if>
             <if test="doctorId != null "> and doctor_id = #{doctorId}</if>
-            <if test="orderType != null "> and order_type = #{doctorId}</if>
+            <if test="orderType != null "> and order_type = #{orderType}</if>
+            <if test="appRewardFlag != null "> and app_reward_flag = #{appRewardFlag}</if>
         </where>
         order by create_time desc
     </select>
@@ -252,6 +254,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="zyyHuifuId != null">zyy_huifu_id,</if>
             <if test="tagNames != null">tag_names,</if>
             <if test="erpType != null">erp_type,</if>
+            <if test="appRewardFlag != null">app_reward_flag,</if>
         </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="storeId != null">#{storeId},</if>
@@ -346,6 +349,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="zyyDivAmount != null">#{zyyDivAmount},</if>
             <if test="tagNames != null">#{tagNames},</if>
             <if test="erpType != null">#{erpType},</if>
+            <if test="appRewardFlag != null">#{appRewardFlag},</if>
          </trim>
     </insert>
 
@@ -446,6 +450,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="tagNames != null and tagNames != ''">tag_names = #{tagNames},</if>
             <if test="erpType != null">erp_type = #{erpType},</if>
             <if test="isReceiveNotice != null">is_receive_notice = #{isReceiveNotice},</if>
+            <if test="appRewardFlag != null">app_reward_flag = #{appRewardFlag},</if>
         </trim>
         where order_id = #{orderId}
     </update>

+ 6 - 1
fs-service/src/main/resources/mapper/hisStore/FsStoreOrderScrmMapper.xml

@@ -95,6 +95,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <!--<result property="orderMedium"    column="order_medium"    />-->
         <result property="tagNames"    column="tag_names"    />
         <result property="erpType"    column="erp_type"    />
+        <result property="appRewardFlag"    column="app_reward_flag"    />
     </resultMap>
 
     <sql id="selectFsStoreOrderVo">
@@ -109,7 +110,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                company_id,company_user_id,is_package,package_json,item_json,order_type,package_id,finish_time,delivery_status,
                delivery_pay_status,delivery_time,delivery_pay_time,delivery_pay_money,tui_money,tui_money_status,delivery_import_time,
                tui_user_id,tui_user_money_status,order_create_type,store_house_code,dept_id,is_edit_money,customer_id,is_pay_remain,
-               delivery_send_time,certificates,schedule_id,div_amount, div_huifu_id,zyy_div_amount,zyy_huifu_id,tag_names,erp_type from fs_store_order_scrm
+               delivery_send_time,certificates,schedule_id,div_amount, div_huifu_id,zyy_div_amount,zyy_huifu_id,tag_names,erp_type,app_reward_flag from fs_store_order_scrm
     </sql>
 
     <select id="selectFsStoreOrderList" parameterType="FsStoreOrderScrm" resultMap="FsStoreOrderResult">
@@ -169,6 +170,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="deliveryPayStatus != null "> and delivery_pay_status = #{deliveryPayStatus}</if>
             <if test="deliveryTime != null "> and delivery_time = #{deliveryTime}</if>
             <if test="deliveryImportTime != null "> and delivery_import_time = #{deliveryImportTime}</if>
+            <if test="appRewardFlag != null "> and app_reward_flag = #{appRewardFlag}</if>
         </where>
     </select>
 
@@ -271,6 +273,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="zyyHuifuId != null">zyy_huifu_id,</if>
             <if test="tagNames != null">tag_names,</if>
             <if test="erpType != null">erp_type,</if>
+            <if test="appRewardFlag != null">app_reward_flag,</if>
          </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="orderCode != null and orderCode != ''">#{orderCode},</if>
@@ -363,6 +366,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="cycle != null">#{cycle},</if>
             <if test="tagNames != null">#{tagNames},</if>
             <if test="erpType != null">#{erpType},</if>
+            <if test="appRewardFlag != null">#{appRewardFlag},</if>
          </trim>
     </insert>
 
@@ -462,6 +466,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="zyyDivAmount != null and zyyDivAmount != ''">zyy_div_amount = #{zyyDivAmount},</if>
             <if test="tagNames != null and tagNames != ''">tag_names = #{tagNames},</if>
             <if test="erpType != null and erpType != ''">erp_type = #{erpType},</if>
+            <if test="appRewardFlag != null and appRewardFlag != ''">app_reward_flag = #{appRewardFlag},</if>
         </trim>
         where id = #{id}
     </update>