4 Commitit 0d6b0b0d92 ... 6344a09549

Tekijä SHA1 Viesti Päivämäärä
  wangxy 6344a09549 需求 18 tuntia sitten
  wangxy 37a344b56d Merge remote-tracking branch 'origin/红德堂' into 红德堂-test 3 päivää sitten
  wangxy 221323d1a0 app销售标签,小节备注 1 viikko sitten
  wangxy 16f94b84f6 直播配置 1 viikko sitten
19 muutettua tiedostoa jossa 212 lisäystä ja 26 poistoa
  1. 19 0
      fs-company/src/main/java/com/fs/company/controller/course/FsUserCourseVideoController.java
  2. 24 0
      fs-service/src/main/java/com/fs/course/domain/CompanyCourseRedpacket.java
  3. 6 0
      fs-service/src/main/java/com/fs/course/domain/FsUserCourseComplaintRecord.java
  4. 5 0
      fs-service/src/main/java/com/fs/course/domain/FsUserCourseVideo.java
  5. 37 7
      fs-service/src/main/java/com/fs/course/mapper/FsUserCourseVideoMapper.java
  6. 8 1
      fs-service/src/main/java/com/fs/course/param/FsUserCourseVideoParam.java
  7. 13 1
      fs-service/src/main/java/com/fs/course/service/IFsUserCourseVideoService.java
  8. 45 4
      fs-service/src/main/java/com/fs/course/service/impl/FsUserCourseVideoServiceImpl.java
  9. 8 0
      fs-service/src/main/java/com/fs/course/vo/FsUserCourseComplaintRecordPageListVO.java
  10. 2 0
      fs-service/src/main/java/com/fs/course/vo/FsUserCourseVideoQVO.java
  11. 2 0
      fs-service/src/main/java/com/fs/his/domain/FsUser.java
  12. 1 1
      fs-service/src/main/java/com/fs/his/service/IFsUserService.java
  13. 18 0
      fs-service/src/main/java/com/fs/his/service/impl/FsUserServiceImpl.java
  14. 1 0
      fs-service/src/main/java/com/fs/his/vo/OptionsVO.java
  15. 5 0
      fs-service/src/main/resources/mapper/course/FsUserCourseComplaintRecordMapper.xml
  16. 4 0
      fs-service/src/main/resources/mapper/course/FsUserCourseVideoMapper.xml
  17. 2 1
      fs-service/src/main/resources/mapper/his/FsUserMapper.xml
  18. 9 9
      fs-user-app/src/main/java/com/fs/app/controller/course/CourseFsUserController.java
  19. 3 2
      fs-user-app/src/main/java/com/fs/app/facade/impl/LiveFacadeServiceImpl.java

+ 19 - 0
fs-company/src/main/java/com/fs/company/controller/course/FsUserCourseVideoController.java

@@ -8,6 +8,7 @@ import com.fs.common.core.page.TableDataInfo;
 import com.fs.common.enums.BusinessType;
 import com.fs.common.utils.ServletUtils;
 import com.fs.common.utils.poi.ExcelUtil;
+import com.fs.course.domain.CompanyCourseRedpacket;
 import com.fs.course.domain.FsUserCourseVideo;
 import com.fs.course.mapper.FsUserCourseVideoMapper;
 import com.fs.course.param.FsUserCourseVideoParam;
@@ -138,4 +139,22 @@ public class FsUserCourseVideoController extends BaseController
 
         return R.ok().put("data",fsUserCourseVideoService.selectCourseVideoSort(courseId));
     }
+
+    /**
+     * 设置红包金额
+     */
+    @PostMapping("/setRedpacketAmount")
+    public R setRedpacketAmount(@RequestBody FsUserCourseVideoParam fsUserCourseVideo)
+    {
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        fsUserCourseVideo.setCompanyId(loginUser.getCompany().getCompanyId());
+        return fsUserCourseVideoService.setRedpacketAmount(fsUserCourseVideo);
+    }
+
+    @GetMapping("/getRedpacketAmount")
+    public AjaxResult getRedpacketAmount(Long videoId){
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        CompanyCourseRedpacket companyCourseRedpacket = fsUserCourseVideoService.selectCompanyCourseRedpacket(videoId, loginUser.getCompany().getCompanyId());
+        return AjaxResult.success(companyCourseRedpacket);
+    }
 }

+ 24 - 0
fs-service/src/main/java/com/fs/course/domain/CompanyCourseRedpacket.java

@@ -0,0 +1,24 @@
+package com.fs.course.domain;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class CompanyCourseRedpacket {
+
+    private Long id;
+
+    /** 公司id */
+    private Long companyId;
+    /** 视频id */
+    private Long videoId;
+    /** 红包金额 */
+    private BigDecimal redPacketMoney;
+    /** 状态:0-禁用,1-启用 */
+    private Integer status;
+    /** 创建时间 */
+    private java.util.Date createdTime;
+    /** 更新时间 */
+    private java.util.Date updatedTime;
+}

+ 6 - 0
fs-service/src/main/java/com/fs/course/domain/FsUserCourseComplaintRecord.java

@@ -71,5 +71,11 @@ public class FsUserCourseComplaintRecord extends BaseEntity{
     @Excel(name = "视频小节id")
     private Long videoId;
 
+    /** 状态:0-待处理,1-已分配,2-已处理 */
+    private Integer recordStatus;
+
+    /** 处理结果 */
+    private String handleResult;
+
 
 }

+ 5 - 0
fs-service/src/main/java/com/fs/course/domain/FsUserCourseVideo.java

@@ -115,4 +115,9 @@ public class FsUserCourseVideo extends BaseEntity
     private String jobId;
 
     private String vid;
+
+    /**
+     * 备注
+     */
+    private  String  remark;
 }

+ 37 - 7
fs-service/src/main/java/com/fs/course/mapper/FsUserCourseVideoMapper.java

@@ -1,5 +1,6 @@
 package com.fs.course.mapper;
 
+import com.fs.course.domain.CompanyCourseRedpacket;
 import com.fs.course.domain.FsUserCourseVideo;
 import com.fs.course.domain.FsVideoResource;
 import com.fs.course.param.CourseVideoUpdates;
@@ -11,10 +12,7 @@ import com.fs.course.vo.*;
 import com.fs.course.vo.newfs.FsUserCourseVideoPageListVO;
 import com.fs.his.vo.OptionsVO;
 import com.fs.qw.param.FsUserCourseRedPageParam;
-import org.apache.ibatis.annotations.MapKey;
-import org.apache.ibatis.annotations.Param;
-import org.apache.ibatis.annotations.Select;
-import org.apache.ibatis.annotations.Update;
+import org.apache.ibatis.annotations.*;
 
 import java.math.BigDecimal;
 import java.util.List;
@@ -147,12 +145,12 @@ public interface FsUserCourseVideoMapper
     Long selectFsUserCourseVideoByCourseSort(@Param("courseId")Long courseId, @Param("courseSort")Long courseSort);
 
 
-    @Select("select video_id dict_value, title dict_label from fs_user_course_video where course_id=#{id} and is_del = 0 order by course_sort")
+    @Select("select video_id dict_value, title dict_label,remark from fs_user_course_video where course_id=#{id} and is_del = 0 order by course_sort")
     List<OptionsVO> selectFsUserCourseVodeAllList(Long id);
 
     @Select({"<script> " +
-            "select v.*,p.red_packet_money company_red_packet_money from fs_user_course_video v " +
-            "LEFT JOIN fs_user_course_video_red_package p on p.video_id= v.video_id and p.company_id =#{maps.companyId} and p.data_type = 1 " +
+            "select v.*,p.red_packet_money companyRedPacketMoney from fs_user_course_video v " +
+            "LEFT JOIN company_course_redpacket p on p.video_id= v.video_id and p.company_id =#{maps.companyId} and p.status = 1 " +
             "where v.is_del = 0 and  v.course_id = #{maps.courseId}   " +
             "<if test = ' maps.title!=null and maps.title != \"\" '> " +
             "and v.title = #{maps.title} " +
@@ -161,6 +159,38 @@ public interface FsUserCourseVideoMapper
             "</script>"})
     List<FsUserCourseVideoVO> selectFsUserCourseVideoListByCourseIdAndCompany(@Param("maps") FsUserCourseVideoParam fsUserCourseVideo);
 
+    @Select("SELECT * FROM company_course_redpacket WHERE company_id = #{companyId} AND video_id = #{videoId}")
+    CompanyCourseRedpacket selectByCompanyAndSection(@Param("companyId") Long companyId,
+                                                     @Param("videoId") Long videoId);
+
+    @Select("SELECT * FROM company_course_redpacket WHERE company_id = #{companyId} AND video_id = #{videoId} AND status = 1")
+    CompanyCourseRedpacket  getOpenRedpacket(@Param("companyId") Long companyId,
+                                             @Param("videoId") Long videoId);
+    /**
+     * 新增企业课程红包配置
+     */
+    @Insert("INSERT INTO company_course_redpacket (company_id, video_id, red_packet_money, status, created_time, updated_time) " +
+            "VALUES (#{entity.companyId}, #{entity.videoId}, #{entity.redPacketMoney}, #{entity.status}, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP)")
+    int insertCompanyCourseRedpacket(@Param("entity") CompanyCourseRedpacket entity);
+
+
+
+    /**
+     * 更新企业课程红包配置
+     */
+    @Update("UPDATE company_course_redpacket SET " +
+            "red_packet_money = #{entity.redPacketMoney}, " +
+            "status = #{entity.status}, " +
+            "updated_time = CURRENT_TIMESTAMP " +
+            "WHERE company_id = #{entity.companyId} AND video_id = #{entity.videoId}")
+    int updateCompanyCourseRedpacket(@Param("entity") CompanyCourseRedpacket entity);
+
+
+
+
+
+
+
     @Select("select v.* from fs_user_course_video v " +
             "left join fs_user_course c on c.course_id = v.course_id " +
             "where c.is_private = 1 and v.is_del = 0 ")

+ 8 - 1
fs-service/src/main/java/com/fs/course/param/FsUserCourseVideoParam.java

@@ -4,6 +4,8 @@ import com.baidu.dev2.thirdparty.swagger.annotations.ApiModelProperty;
 import com.fs.common.annotation.Excel;
 import lombok.Data;
 
+import java.math.BigDecimal;
+
 @Data
 public class FsUserCourseVideoParam {
     /** ID */
@@ -14,7 +16,7 @@ public class FsUserCourseVideoParam {
     /** 视频标题 */
     @Excel(name = "视频标题")
     private String title;
-    private String redPacketMoney;
+    private BigDecimal redPacketMoney;
     private Long companyId;
 
     private Integer dataType;
@@ -24,4 +26,9 @@ public class FsUserCourseVideoParam {
 
     @ApiModelProperty(value = "页大小,默认为10")
     private Integer pageSize = 10;
+
+    /**
+     * 红包设置状态 0-未设置 1-已设置
+     */
+    private Integer isEnable;
 }

+ 13 - 1
fs-service/src/main/java/com/fs/course/service/IFsUserCourseVideoService.java

@@ -3,6 +3,7 @@ package com.fs.course.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.fs.common.core.domain.R;
 import com.fs.common.core.domain.ResponseResult;
+import com.fs.course.domain.CompanyCourseRedpacket;
 import com.fs.course.domain.FsUserCourseVideo;
 import com.fs.course.param.*;
 import com.fs.course.param.newfs.FsUserCourseAddCompanyUserParam;
@@ -95,12 +96,23 @@ public interface IFsUserCourseVideoService
 
     List<FsUserCourseVideoVO> selectFsUserCourseVideoListByCourseIdAndCompany(FsUserCourseVideoParam fsUserCourseVideo);
 
+    /**
+     * 设置公司下课程小节的红包金额
+     * @param fsUserCourseVideo
+     * @return
+     */
+    R setRedpacketAmount(FsUserCourseVideoParam fsUserCourseVideo);
+
+    CompanyCourseRedpacket selectCompanyCourseRedpacket(Long videoId, Long companyId);
+
+
+
     R updateFsUserCourseVideoCompanyRedPacket(FsUserCourseVideoParam fsUserCourseVideo);
 
     R getInternetTraffic(FsUserCourseVideoFinishUParam param);
 
     R getIntegralByH5Video(FsUserCourseVideoFinishUParam param);
-
+//
     R sendReward(FsCourseSendRewardUParam param);
 
     R sendRewardByFsUser(FsCourseSendRewardUParam param);

+ 45 - 4
fs-service/src/main/java/com/fs/course/service/impl/FsUserCourseVideoServiceImpl.java

@@ -976,6 +976,49 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService {
         return fsUserCourseVideoMapper.selectFsUserCourseVideoListByCourseIdAndCompany(fsUserCourseVideo);
     }
 
+    @Override
+    public R setRedpacketAmount(FsUserCourseVideoParam fsUserCourseVideo) {
+        try {
+            // 检查必要参数
+            if (fsUserCourseVideo.getCompanyId() == null || fsUserCourseVideo.getVideoId() == null) {
+                return R.error("公司ID和视频ID不能为空");
+            }
+
+            // 查询是否已存在记录
+            CompanyCourseRedpacket existing = fsUserCourseVideoMapper.selectByCompanyAndSection(
+                    fsUserCourseVideo.getCompanyId(),
+                    fsUserCourseVideo.getVideoId()
+            );
+            if (existing != null) {
+                // 记录已存在,执行更新操作
+                existing.setRedPacketMoney(fsUserCourseVideo.getRedPacketMoney());
+                existing.setStatus(fsUserCourseVideo.getIsEnable());
+                fsUserCourseVideoMapper.updateCompanyCourseRedpacket(existing);
+
+                return R.ok("红包金额更新成功").put("id", existing.getId());
+            } else {
+                // 记录不存在,执行新增操作
+                CompanyCourseRedpacket newRecord = new CompanyCourseRedpacket();
+                newRecord.setCompanyId(fsUserCourseVideo.getCompanyId());
+                newRecord.setVideoId(fsUserCourseVideo.getVideoId());
+                newRecord.setRedPacketMoney(fsUserCourseVideo.getRedPacketMoney());
+                newRecord.setStatus(fsUserCourseVideo.getIsEnable());
+                fsUserCourseVideoMapper.insertCompanyCourseRedpacket(newRecord);
+
+                return R.ok("红包金额设置成功").put("id", newRecord.getId());
+            }
+        } catch (Exception e) {
+            log.error("设置红包金额失败", e);
+            return R.error("设置红包金额失败: " + e.getMessage());
+        }
+    }
+
+    @Override
+    public CompanyCourseRedpacket selectCompanyCourseRedpacket(Long videoId, Long companyId) {
+        CompanyCourseRedpacket companyCourseRedpacket = fsUserCourseVideoMapper.selectByCompanyAndSection(companyId, videoId);
+        return companyCourseRedpacket;
+    }
+
     @Override
     public R updateFsUserCourseVideoCompanyRedPacket(FsUserCourseVideoParam fsUserCourseVideo) {
         fsUserCourseVideoRedPackageMapper.insertOrUpdateFsUserCourseVideoRedPackage(fsUserCourseVideo);
@@ -1422,7 +1465,8 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService {
         logger.info("进入发放红包");
         // 确定红包金额
         BigDecimal amount = BigDecimal.ZERO;
-        FsUserCourseVideoRedPackage redPackage = fsUserCourseVideoRedPackageMapper.selectRedPacketByCompanyId(param.getVideoId(), param.getCompanyId(), param.getPeriodId());
+        //获取公司课程的红包金额
+        CompanyCourseRedpacket redPackage = fsUserCourseVideoMapper.getOpenRedpacket(param.getCompanyId(), param.getVideoId());
 
         if (redPackage != null && redPackage.getRedPacketMoney() != null) {
             amount = redPackage.getRedPacketMoney();
@@ -1601,10 +1645,7 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService {
 
         if (redPackage != null && redPackage.getRedPacketMoney() != null) {
             amount = redPackage.getRedPacketMoney();
-        } else if (video != null && video.getRedPacketMoney() != null) {
-            amount = video.getRedPacketMoney();
         }
-
         // 准备发送红包参数
         WxSendRedPacketParam packetParam = new WxSendRedPacketParam();
         packetParam.setOpenId(user.getMpOpenId());

+ 8 - 0
fs-service/src/main/java/com/fs/course/vo/FsUserCourseComplaintRecordPageListVO.java

@@ -64,4 +64,12 @@ public class FsUserCourseComplaintRecordPageListVO extends BaseEntity{
     @Excel(name = "销售公司")
     private  String company;
 
+    /**
+     * 状态:0-待处理,1-已分配,2-已处理
+     */
+    private Integer recordStatus;
+
+   /** 处理结果 */
+    private String handleResult;
+
 }

+ 2 - 0
fs-service/src/main/java/com/fs/course/vo/FsUserCourseVideoQVO.java

@@ -95,4 +95,6 @@ public class FsUserCourseVideoQVO extends BaseEntity {
      * 课程关联的拍商品
      */
     private List<FsCourseProduct>  courseProducts;
+
+    private String remark;
 }

+ 2 - 0
fs-service/src/main/java/com/fs/his/domain/FsUser.java

@@ -183,6 +183,8 @@ public class FsUser extends BaseEntity
     /** 推广上级用户ID */
     private Long spreadUserId;
 
+    private  Long invitedBySalesId;//邀请人销售id
+
     public void setNickName(String nickname)
     {
         if(StringUtils.isNotEmpty(nickname)){

+ 1 - 1
fs-service/src/main/java/com/fs/his/service/IFsUserService.java

@@ -263,5 +263,5 @@ public interface IFsUserService
     /**
      * 销售分享app下载链接给用户
      */
-//    Boolean  bindUserToSales(Long userId, Long salesId);
+    Boolean  bindUserToSales(Long userId, Long salesId);
 }

+ 18 - 0
fs-service/src/main/java/com/fs/his/service/impl/FsUserServiceImpl.java

@@ -1805,4 +1805,22 @@ public class FsUserServiceImpl implements IFsUserService {
         fsExportTaskMapper.updateFsExportTask(task);
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean bindUserToSales(Long userId, Long salesId) {
+        FsUser fsUser = fsUserMapper.selectFsUserById(userId);
+        if (fsUser == null) {
+            throw new CustomException("用户不存在");
+        }
+        if(fsUser.getInvitedBySalesId() != null){
+            if(!fsUser.getInvitedBySalesId().equals(salesId)){
+                throw new CustomException("该用户已从其他销售的链接下载");
+            }else {
+                throw new CustomException("已发送给app下载链接给该用户");
+            }
+        }
+        fsUser.setInvitedBySalesId(salesId);
+        return fsUserMapper.updateFsUser(fsUser)>0;
+    }
+
 }

+ 1 - 0
fs-service/src/main/java/com/fs/his/vo/OptionsVO.java

@@ -8,4 +8,5 @@ public class OptionsVO implements Serializable {
     Long dictValue;
     String dictLabel;
     String dictImgUrl;
+    String remark;
 }

+ 5 - 0
fs-service/src/main/resources/mapper/course/FsUserCourseComplaintRecordMapper.xml

@@ -63,6 +63,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                 and DATE_FORMAT( cr.create_time, "%Y-%m-%d" ) &lt;= DATE_FORMAT(#{endCreateTime}, "%Y-%m-%d")
                 )
             </if>
+            <if test="recordStatus != null">
+            and cr.record_status = #{recordStatus}
+            </if>
         </where>
         order by cr.create_time desc
     </select>
@@ -115,6 +118,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="courseId != null">course_id = #{courseId},</if>
             <if test="videoId != null">video_id = #{videoId},</if>
             <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="recordStatus != null">record_status = #{recordStatus},</if>
+            <if test="handleResult != null">handle_result = #{handleResult},</if>
         </trim>
         where record_id = #{recordId}
     </update>

+ 4 - 0
fs-service/src/main/resources/mapper/course/FsUserCourseVideoMapper.xml

@@ -37,6 +37,7 @@
         <result property="lastJoinTime"    column="last_join_time"    />
         <result property="projectId"    column="project_id"    />
         <result property="isFirst"    column="is_first"    />
+        <result property="remark"    column="remark"    />
     </resultMap>
 
     <sql id="selectFsUserCourseVideoVo">
@@ -110,6 +111,7 @@
             <if test="isFirst != null">is_first,</if>
             <if test="jobId != null">job_id,</if>
             <if test="vid != null">vid,</if>
+            <if test="remark != null">remark,</if>
         </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="fileId != null">#{fileId},</if>
@@ -150,6 +152,7 @@
             <if test="isFirst != null">#{isFirst},</if>
             <if test="jobId != null">#{jobId},</if>
             <if test="vid != null">#{vid},</if>
+            <if test="remark != null">#{remark},</if>
         </trim>
     </insert>
     <insert id="insertBatchFsUserCourseVideo" parameterType="FsUserCourseVideo" useGeneratedKeys="true" keyProperty="videoId">
@@ -239,6 +242,7 @@
             <if test="isFirst != null">is_first = #{isFirst},</if>
             <if test="jobId != null">job_id = #{jobId},</if>
             <if test="vid != null">vid = #{vid},</if>
+            <if test="remark != null">remark = #{remark},</if>
         </trim>
         where video_id = #{videoId}
     </update>

+ 2 - 1
fs-service/src/main/resources/mapper/his/FsUserMapper.xml

@@ -53,7 +53,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </resultMap>
 
     <sql id="selectFsUserVo">
-        select user_id,qw_ext_id,sex,is_buy,`level`,course_ma_open_id,is_push,is_add_qw,source,login_device,is_individuation_push,store_open_id,password,jpush_id, is_vip,vip_start_date,vip_end_date,vip_level,vip_status,nick_name,integral_status, avatar, phone, integral,sign_num, status, tui_user_id, tui_time, tui_user_count, ma_open_id, mp_open_id, union_id, is_del, user_code, remark, create_time, update_time, last_ip, balance,is_weixin_auth,parent_id,qw_user_id,app_id,company_id,company_user_id,is_promoter,now_money,brokerage_price,spread_user_id, spread_time,pay_count, spread_count,user_type from fs_user
+        select user_id,qw_ext_id,sex,is_buy,`level`,course_ma_open_id,is_push,is_add_qw,source,login_device,is_individuation_push,store_open_id,password,jpush_id, is_vip,vip_start_date,vip_end_date,vip_level,vip_status,nick_name,integral_status, avatar, phone, integral,sign_num, status, tui_user_id, tui_time, tui_user_count, ma_open_id, mp_open_id, union_id, is_del, user_code, remark, create_time, update_time, last_ip, balance,is_weixin_auth,parent_id,qw_user_id,app_id,company_id,company_user_id,is_promoter,now_money,brokerage_price,spread_user_id, spread_time,pay_count, spread_count,user_type,invited_by_sales_id from fs_user
     </sql>
 
     <select id="selectFsUserList" parameterType="FsUser" resultMap="FsUserResult">
@@ -718,6 +718,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="orderCount != null">order_count = #{orderCount},</if>
             <if test="companyUserId != null">company_user_id = #{companyUserId},</if>
             <if test="appId != null">app_id = #{appId},</if>
+            <if test="invitedBySalesId != null">invited_by_sales_id = #{invitedBySalesId},</if>
         </trim>
         where user_id = #{userId}
     </update>

+ 9 - 9
fs-user-app/src/main/java/com/fs/app/controller/course/CourseFsUserController.java

@@ -186,14 +186,14 @@ public class CourseFsUserController extends AppBaseController {
         logger.error("zyp \n【h5看课中途报错】:{}",msg);
     }
 
-//    @PostMapping("/bindSales")
-//    @ApiOperation("销售分享app下载链接给用户")
-//    public R bindSalesToUser(@RequestBody FsUserBindSalesParamDTO param){
-//        Boolean r = fsUserService.bindUserToSales(param.getUserId(), param.getSalesId());
-//        if (r) {
-//            return R.ok();
-//        }
-//        return R.error();
-//    }
+    @PostMapping("/bindSales")
+    @ApiOperation("销售分享app下载链接给用户")
+    public R bindSalesToUser(@RequestBody FsUserBindSalesParamDTO param){
+        Boolean r = fsUserService.bindUserToSales(param.getUserId(), param.getSalesId());
+        if (r) {
+            return R.ok();
+        }
+        return R.error();
+    }
 
 }

+ 3 - 2
fs-user-app/src/main/java/com/fs/app/facade/impl/LiveFacadeServiceImpl.java

@@ -227,7 +227,8 @@ public class LiveFacadeServiceImpl extends BaseController implements LiveFacadeS
     }
 
     @Override
-    @DistributeLock(keyExpression = "#red.redId +'_'+#red.userId", scene = "red_claim", waitTime = 1000, errorMsg = "红包领取失败")
+    @DistributeLock(keyExpression ="(#red?.redId?:'default') + '_' + (#red?.userId?:'default')",
+            scene = "red_claim", waitTime = 1000, errorMsg = "红包领取失败")
     public R redClaim(RedPO red) {
         return iLiveRedConfService.claimRedPacket(red);
     }
@@ -241,7 +242,7 @@ public class LiveFacadeServiceImpl extends BaseController implements LiveFacadeS
 
 
     @Override
-    @DistributeLock(keyExpression = "#lottery.liveId +'_'+#lottery.userId", scene = "draw_claim")
+    @DistributeLock(keyExpression = "(#lottery?.liveId?:'default') + '_' + (#lottery?.userId?:'default')", scene = "draw_claim")
     public R drawClaim(LotteryPO lottery) {
         Object o = redisCache.hashGet(String.format(LiveKeysConstant.LIVE_HOME_PAGE_CONFIG_DRAW, lottery.getLiveId(), lottery.getLotteryId()), String.valueOf(lottery.getUserId()));
         if (ObjectUtil.isNotEmpty(o)) {