فهرست منبع

营期-公司设置红包按需求大幅度调整(第一版)

caoliqin 1 ماه پیش
والد
کامیت
7299a2cd35

+ 13 - 13
fs-admin/src/main/java/com/fs/course/controller/FsUserCoursePeriodController.java

@@ -5,7 +5,8 @@ import java.util.List;
 import com.fs.common.core.domain.R;
 import com.fs.course.domain.FsUserCoursePeriodDays;
 import com.fs.course.domain.FsUserCourseVideoRedPackage;
-import com.fs.course.param.CompanyRedPacket;
+import com.fs.course.param.CompanyRedPacketParam;
+import com.fs.course.param.PeriodRedPacketParam;
 import com.fs.course.service.IFsUserCoursePeriodDaysService;
 import com.fs.course.service.IFsUserCourseVideoRedPackageService;
 import com.fs.course.vo.FsUserCoursePeriodVO;
@@ -138,25 +139,24 @@ public class FsUserCoursePeriodController extends BaseController {
         return fsUserCoursePeriodDaysService.updateListCourseData(entity);
     }
 
-    @ApiOperation("根据营期id获取公司红包金额列表")
+    @ApiOperation("根据营期id获取公司红包金额列表(暂废弃)")
     @GetMapping("/companyList")
     public R getCompanyByPeriod(Long periodId, Long videoId) {
-        List<CompanyRedPacket> companyList = fsUserCoursePeriodDaysService.getCompanyByPeriod(periodId, videoId);
+        List<CompanyRedPacketParam> companyList = fsUserCoursePeriodDaysService.getCompanyByPeriod(periodId, videoId);
         return R.ok().put("data", companyList);
     }
 
-    @ApiOperation("批量保存设置红包金额")
+    @ApiOperation("获取设置红包金额列表")
+    @GetMapping("/redPacketList")
+    public R getPeriodRedPacketList(Long periodId, Long companyId) {
+        List<PeriodRedPacketParam> periodRedPacketList = fsUserCoursePeriodDaysService.getPeriodRedPacketList(periodId, companyId);
+        return R.ok().put("data", periodRedPacketList);
+    }
+
+    @ApiOperation("批量保存设置红包金额(全删全增)")
     @PostMapping("/batchRedPacket")
     public R batchRedPacketMoney(@RequestBody List<FsUserCourseVideoRedPackage> videoRedPackageList) {
-        //查询该公司红包金额数据是否存在,如果存在,则修改
-        try {
-            fsUserCourseVideoRedPackageService.batchDeleteParams(videoRedPackageList);
-        } catch (Exception e) {
-            e.printStackTrace();
-            log.info("删除数据失败,参数:{}", videoRedPackageList);
-        }
-
-        int i = fsUserCourseVideoRedPackageService.batchSaveFsUserCourseVideoRedPackage(videoRedPackageList);
+        int i = fsUserCourseVideoRedPackageService.batchSaveCompanyRedPackage(videoRedPackageList);
         if (i <= 0) {
             return R.error("保存失败!");
         }

+ 1 - 1
fs-admin/src/main/resources/application-dev.yml

@@ -28,7 +28,7 @@ spring:
             druid:
                 # 主库数据源
                 master:
-                    url: jdbc:mysql://139.186.77.83:3306/ylrz_scrm?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+                    url: jdbc:mysql://139.186.77.83:3306/ylrz_scrm?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&useSSL=true&serverTimezone=GMT%2B8
                     username: Rtroot
                     password: Rtroot
                 # 从库数据源

+ 1 - 1
fs-admin/src/main/resources/application-druid-fby.yml

@@ -28,7 +28,7 @@ spring:
             druid:
                 # 主库数据源
                 master:
-                    url: jdbc:mysql://192.168.0.74:3306/fby_store?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+                    url: jdbc:mysql://192.168.0.74:3306/fby_store?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&useSSL=true&serverTimezone=GMT%2B8
                     username: root
                     password: Ylrztek250218!3@.
                 # 从库数据源

+ 19 - 2
fs-service-system/src/main/java/com/fs/course/mapper/FsUserCoursePeriodMapper.java

@@ -3,7 +3,8 @@ package com.fs.course.mapper;
 import java.util.List;
 
 import com.fs.course.domain.FsUserCoursePeriod;
-import com.fs.course.param.CompanyRedPacket;
+import com.fs.course.param.CompanyRedPacketParam;
+import com.fs.course.param.PeriodRedPacketParam;
 import com.fs.course.vo.FsUserCoursePeriodVO;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
@@ -78,5 +79,21 @@ public interface FsUserCoursePeriodMapper
     @Select("select * from fs_user_course_period where training_camp_id = #{id}")
     List<FsUserCoursePeriod> selectFsUserCoursePeriodListByTrainingCampId(@Param("id") Long id);
 
-    List<CompanyRedPacket> selectCompanyByPeriod(@Param("periodId")Long periodId, @Param("videoId") Long videoId);
+    /**
+     * 根据营期id和视频id查询关联的公司
+     * @param periodId 营期id
+     * @param videoId 视频id
+     * @return
+     */
+    List<CompanyRedPacketParam> selectCompanyByPeriodVideo(@Param("periodId")Long periodId, @Param("videoId") Long videoId);
+
+    /**
+     * 根据营期id查询对应的公司
+     * @param periodId 营期id
+     * @return
+     */
+    List<CompanyRedPacketParam> selectCompanyByPeriod(@Param("periodId")Long periodId);
+
+    List<PeriodRedPacketParam> selectPeriodRedPacket(@Param("periodId")Long periodId, @Param("companyId")Long companyId);
+
 }

+ 17 - 2
fs-service-system/src/main/java/com/fs/course/mapper/FsUserCourseVideoRedPackageMapper.java

@@ -71,8 +71,23 @@ public interface FsUserCourseVideoRedPackageMapper
     @Select("select * from fs_user_course_video_red_package where video_id =#{videoId} and company_id = #{companyId}")
     FsUserCourseVideoRedPackage selectRedPacketByCompanyId(@Param("videoId") Long videoId,@Param("companyId") Long companyId);
 
-    int batchSaveFsUserCourseVideoRedPackage(@Param("list") List<FsUserCourseVideoRedPackage> redPackageList);
+        int batchSaveFsUserCourseVideoRedPackage(@Param("list") List<FsUserCourseVideoRedPackage> redPackageList);
 
-    int batchDeleteParams(@Param("list") List<FsUserCourseVideoRedPackage> videoRedPackageList);
+        int batchDeleteParams(@Param("list") List<FsUserCourseVideoRedPackage> videoRedPackageList);
 
+        /**
+         * 批量更新红包数据
+         *
+         * @param list 红包数据列表
+         * @return 更新结果
+         */
+        int batchUpdateFsUserCourseVideoRedPackage(@Param("list") List<FsUserCourseVideoRedPackage> list);
+
+        /**
+         * 批量查询匹配的红包数据
+         *
+         * @param list 红包数据列表
+         * @return 匹配的红包数据列表
+         */
+        List<FsUserCourseVideoRedPackage> selectByParamsList(@Param("list") List<FsUserCourseVideoRedPackage> list);
 }

+ 1 - 1
fs-service-system/src/main/java/com/fs/course/param/CompanyRedPacket.java → fs-service-system/src/main/java/com/fs/course/param/CompanyRedPacketParam.java

@@ -10,7 +10,7 @@ import java.math.BigDecimal;
 
 @Data
 @ApiModel("公司红包金额列表")
-public class CompanyRedPacket implements Serializable {
+public class CompanyRedPacketParam implements Serializable {
     private static final long serialVersionUID = 1L;
 
     @ApiModelProperty(value = "公司id")

+ 29 - 0
fs-service-system/src/main/java/com/fs/course/param/PeriodRedPacketParam.java

@@ -0,0 +1,29 @@
+package com.fs.course.param;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+@Data
+@ApiModel("营期红包金额列表")
+public class PeriodRedPacketParam implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "课程id")
+    private Long courseId;
+
+    @ApiModelProperty(value = "视频小节id")
+    private Long videoId;
+
+    @ApiModelProperty(value = "课程名称")
+    private String courseName;
+
+    @ApiModelProperty(value = "视频名称")
+    private String videoName;
+
+    @ApiModelProperty(value = "金额")
+    private BigDecimal amount;
+
+}

+ 12 - 2
fs-service-system/src/main/java/com/fs/course/service/IFsUserCoursePeriodDaysService.java

@@ -4,7 +4,8 @@ import java.util.List;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.fs.common.core.domain.R;
 import com.fs.course.domain.FsUserCoursePeriodDays;
-import com.fs.course.param.CompanyRedPacket;
+import com.fs.course.param.CompanyRedPacketParam;
+import com.fs.course.param.PeriodRedPacketParam;
 
 /**
  * 营期课程Service接口
@@ -68,7 +69,16 @@ public interface IFsUserCoursePeriodDaysService extends IService<FsUserCoursePer
     /**
      * 根据营期id获取关联的公司
      * @param periodId 营期id
+     * @param videoId 视频id
      * @return
      */
-    List<CompanyRedPacket> getCompanyByPeriod(Long periodId, Long videoId);
+    List<CompanyRedPacketParam> getCompanyByPeriod(Long periodId, Long videoId);
+
+    /**
+     *
+     * @param periodId 营期id
+     * @param companyId 公司id
+     * @return
+     */
+    List<PeriodRedPacketParam> getPeriodRedPacketList(Long periodId, Long companyId);
 }

+ 7 - 0
fs-service-system/src/main/java/com/fs/course/service/IFsUserCourseVideoRedPackageService.java

@@ -74,4 +74,11 @@ public interface IFsUserCourseVideoRedPackageService
      */
     int batchDeleteParams(List<FsUserCourseVideoRedPackage> videoRedPackageList);
 
+    /**
+     *  批量保存公司设置红包金额
+     * @param fsUserCourseVideoRedPackageList
+     * @return
+     */
+    int batchSaveCompanyRedPackage(List<FsUserCourseVideoRedPackage> fsUserCourseVideoRedPackageList);
+
 }

+ 12 - 4
fs-service-system/src/main/java/com/fs/course/service/impl/FsUserCoursePeriodDaysServiceImpl.java

@@ -7,14 +7,14 @@ import java.util.stream.Collectors;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.fs.common.core.domain.R;
-import com.fs.common.exception.base.BaseException;
 import com.fs.common.utils.DateUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fs.common.utils.date.DateUtil;
 import com.fs.common.utils.date.TimeTypeEnum;
 import com.fs.course.domain.FsUserCoursePeriod;
 import com.fs.course.mapper.FsUserCoursePeriodMapper;
-import com.fs.course.param.CompanyRedPacket;
+import com.fs.course.param.CompanyRedPacketParam;
+import com.fs.course.param.PeriodRedPacketParam;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 import com.fs.course.mapper.FsUserCoursePeriodDaysMapper;
@@ -146,7 +146,15 @@ public class FsUserCoursePeriodDaysServiceImpl extends ServiceImpl<FsUserCourseP
     }
 
     @Override
-    public List<CompanyRedPacket> getCompanyByPeriod(Long periodId, Long videoId) {
-        return fsUserCoursePeriodMapper.selectCompanyByPeriod(periodId, videoId);
+    public List<CompanyRedPacketParam> getCompanyByPeriod(Long periodId, Long videoId) {
+        if(videoId == null ){
+            return fsUserCoursePeriodMapper.selectCompanyByPeriod(periodId);
+        }
+        return fsUserCoursePeriodMapper.selectCompanyByPeriodVideo(periodId, videoId);
+    }
+
+    @Override
+    public List<PeriodRedPacketParam> getPeriodRedPacketList(Long periodId, Long companyId) {
+        return fsUserCoursePeriodMapper.selectPeriodRedPacket(periodId, companyId);
     }
 }

+ 52 - 0
fs-service-system/src/main/java/com/fs/course/service/impl/FsUserCourseVideoRedPackageServiceImpl.java

@@ -1,11 +1,15 @@
 package com.fs.course.service.impl;
 
 import java.util.List;
+import java.util.ArrayList;
+import java.util.Set;
+import java.util.HashSet;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.fs.course.mapper.FsUserCourseVideoRedPackageMapper;
 import com.fs.course.domain.FsUserCourseVideoRedPackage;
 import com.fs.course.service.IFsUserCourseVideoRedPackageService;
+import org.springframework.transaction.annotation.Transactional;
 
 /**
  * 课程公司红包Service业务层处理
@@ -100,4 +104,52 @@ public class FsUserCourseVideoRedPackageServiceImpl implements IFsUserCourseVide
     public int batchDeleteParams(List<FsUserCourseVideoRedPackage> videoRedPackageList) {
         return fsUserCourseVideoRedPackageMapper.batchDeleteParams(videoRedPackageList);
     }
+
+    @Override
+    @Transactional
+    public int batchSaveCompanyRedPackage(List<FsUserCourseVideoRedPackage> fsUserCourseVideoRedPackageList) {
+        if (fsUserCourseVideoRedPackageList == null || fsUserCourseVideoRedPackageList.isEmpty()) {
+            return 0;
+        }
+
+        // 一次性查询所有匹配的数据
+        List<FsUserCourseVideoRedPackage> existingData = fsUserCourseVideoRedPackageMapper
+                .selectByParamsList(fsUserCourseVideoRedPackageList);
+
+        // 创建匹配键集合,用于辅助快速查找
+        Set<String> existingKeys = new HashSet<>();
+        for (FsUserCourseVideoRedPackage data : existingData) {
+            String key = generateKey(data.getPeriodId(), data.getVideoId(), data.getCompanyId());
+            existingKeys.add(key);
+        }
+
+        // 分离需要更新和需要新增的数据
+        List<FsUserCourseVideoRedPackage> updateList = new ArrayList<>();
+        List<FsUserCourseVideoRedPackage> insertList = new ArrayList<>();
+
+        for (FsUserCourseVideoRedPackage redPackage : fsUserCourseVideoRedPackageList) {
+            String key = generateKey(redPackage.getPeriodId(), redPackage.getVideoId(), redPackage.getCompanyId());
+
+            if (existingKeys.contains(key)) {
+                // 存在则加入更新列表
+                updateList.add(redPackage);
+            } else {
+                // 不存在则加入新增列表
+                insertList.add(redPackage);
+            }
+        }
+
+        int result = 0;
+        if (!updateList.isEmpty()) {
+            result += fsUserCourseVideoRedPackageMapper.batchUpdateFsUserCourseVideoRedPackage(updateList);
+        }
+        if (!insertList.isEmpty()) {
+            result += fsUserCourseVideoRedPackageMapper.batchSaveFsUserCourseVideoRedPackage(insertList);
+        }
+        return result;
+    }
+
+    private String generateKey(Long periodId, Long videoId, Long companyId) {
+        return periodId + "_" + videoId + "_" + companyId;
+    }
 }

+ 40 - 1
fs-service-system/src/main/resources/mapper/course/FsUserCoursePeriodMapper.xml

@@ -141,7 +141,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </foreach>
     </delete>
 
-    <select id="selectCompanyByPeriod" resultType="com.fs.course.param.CompanyRedPacket">
+    <select id="selectCompanyByPeriodVideo" resultType="com.fs.course.param.CompanyRedPacketParam">
         SELECT
         company.company_id,
         company.company_name,
@@ -165,4 +165,43 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         )
     </select>
 
+    <select id="selectCompanyByPeriod" resultType="com.fs.course.param.CompanyRedPacketParam">
+        SELECT
+        company.company_id,
+        company.company_name
+        FROM
+        company
+        LEFT JOIN fs_user_course_period fcp ON FIND_IN_SET ( company.company_id, fcp.company_id ) > 0
+        where fcp.period_id = #{periodId}
+    </select>
+
+    <select id="selectPeriodRedPacket" resultType="com.fs.course.param.PeriodRedPacketParam">
+
+        SELECT
+            a.*,
+            c.course_name,
+            cv.title videoName,
+            ifnull ( fvrp.red_packet_money, 0 ) AS amount
+        FROM
+            fs_user_course_period_days a
+                LEFT JOIN fs_user_course_video cv ON a.video_id = cv.video_id
+                LEFT JOIN fs_user_course c ON c.course_id = cv.course_id
+                LEFT JOIN fs_user_course_video_red_package fvrp ON fvrp.period_id = a.period_id
+                AND fvrp.video_id = a.video_id
+                AND fvrp.period_id = #{periodId}
+                AND fvrp.company_id = #{companyId}
+                AND fvrp.data_type = 2
+        WHERE
+            a.video_id IN (
+                SELECT
+                    a.video_id
+                FROM
+                    fs_user_course_period_days a
+                        LEFT JOIN fs_user_course_video cv ON a.video_id = cv.video_id
+                        LEFT JOIN fs_user_course c ON c.course_id = cv.course_id
+                WHERE
+                    a.period_id = #{periodId}
+            )
+    </select>
+
 </mapper>

+ 24 - 0
fs-service-system/src/main/resources/mapper/course/FsUserCourseVideoRedPackageMapper.xml

@@ -93,4 +93,28 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             (data_type = 2 AND period_id = #{item.periodId} AND video_id = #{item.videoId} AND company_id = #{item.companyId})
         </foreach>
     </delete>
+
+    <!-- 批量更新红包数据 -->
+    <update id="batchUpdateFsUserCourseVideoRedPackage">
+        <foreach collection="list" item="item" separator=";">
+            update fs_user_course_video_red_package
+            set red_packet_money = #{item.redPacketMoney}
+            where period_id = #{item.periodId}
+            and video_id = #{item.videoId}
+            and company_id = #{item.companyId}
+            and data_type = 2
+        </foreach>
+    </update>
+
+    <!-- 批量查询匹配的红包数据 -->
+    <select id="selectByParamsList" resultMap="FsUserCourseVideoRedPackageResult">
+        select id, company_id, video_id, red_packet_money, period_id, data_type
+        from fs_user_course_video_red_package
+        where data_type = 2
+        and (
+        <foreach collection="list" item="item" separator=" OR ">
+            (period_id = #{item.periodId} AND video_id = #{item.videoId} AND company_id = #{item.companyId})
+        </foreach>
+        )
+    </select>
 </mapper>