wangxy преди 11 часа
родител
ревизия
6344a09549

+ 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;
+
 
 }

+ 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;
+
 }

+ 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>

+ 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)) {