浏览代码

Merge remote-tracking branch 'origin/master'

yjwang 1 天之前
父节点
当前提交
20c7dfcfb9
共有 18 个文件被更改,包括 212 次插入44 次删除
  1. 8 0
      fs-admin/src/main/java/com/fs/his/task/Task.java
  2. 39 0
      fs-qw-task/src/main/java/com/fs/app/controller/CommonController.java
  3. 2 0
      fs-service/src/main/java/com/fs/company/service/ICompanyService.java
  4. 21 0
      fs-service/src/main/java/com/fs/company/service/impl/CompanyServiceImpl.java
  5. 1 1
      fs-service/src/main/java/com/fs/course/domain/FsCourseRealLink.java
  6. 1 1
      fs-service/src/main/java/com/fs/course/mapper/FsCourseLinkMapper.java
  7. 13 1
      fs-service/src/main/java/com/fs/course/mapper/FsCourseRedPacketLogMapper.java
  8. 7 0
      fs-service/src/main/java/com/fs/course/mapper/FsCourseWatchLogMapper.java
  9. 6 3
      fs-service/src/main/java/com/fs/course/service/impl/FsCourseLinkServiceImpl.java
  10. 6 1
      fs-service/src/main/java/com/fs/course/service/impl/FsCourseRedPacketLogServiceImpl.java
  11. 1 1
      fs-service/src/main/java/com/fs/course/service/impl/FsCourseWatchLogServiceImpl.java
  12. 66 14
      fs-service/src/main/java/com/fs/course/service/impl/FsUserCourseVideoServiceImpl.java
  13. 1 1
      fs-service/src/main/resources/application-config-druid-fcky.yml
  14. 1 0
      fs-service/src/main/resources/db/20250528-sop.sql
  15. 1 0
      fs-service/src/main/resources/db/20250528.sql
  16. 5 1
      fs-service/src/main/resources/mapper/course/FsCourseLinkMapper.xml
  17. 18 0
      fs-service/src/main/resources/mapper/course/FsCourseWatchLogMapper.xml
  18. 15 20
      fs-service/src/main/resources/mapper/statis/ConsumptionBalanceMapper.xml

+ 8 - 0
fs-admin/src/main/java/com/fs/his/task/Task.java

@@ -199,6 +199,14 @@ public class Task {
     }
     }
 
 
 
 
+    public void redPacketAddMoney() throws Exception
+    {
+        List<RedPacketMoneyVO> redPacketMoneyVOS = fsCourseRedPacketLogMapper.selectFsCourseAddRedPacketLogByCompany();
+        for (RedPacketMoneyVO redPacketMoneyVO : redPacketMoneyVOS) {
+            companyService.addRedPacketCompanyMoney(redPacketMoneyVO.getMoney(),redPacketMoneyVO.getCompanyId());
+        }
+    }
+
     public void updateCompanyUserStatus()
     public void updateCompanyUserStatus()
     {
     {
         CompanyUser user = new CompanyUser();
         CompanyUser user = new CompanyUser();

+ 39 - 0
fs-qw-task/src/main/java/com/fs/app/controller/CommonController.java

@@ -29,6 +29,9 @@ import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.bind.annotation.RestController;
 
 
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.Arrays;
 import java.util.Arrays;
 import java.util.List;
 import java.util.List;
 
 
@@ -87,6 +90,42 @@ public class CommonController {
     private IFsUserCourseCountService userCourseCountService;
     private IFsUserCourseCountService userCourseCountService;
 
 
 
 
+    /**
+    * 发官方通连
+    */
+    @GetMapping("/sopguanfanone")
+    public R sopguanfanone(String dateTime) throws Exception {
+
+        LocalDateTime localDateTime = DateUtil.parseLocalDateTime(dateTime);
+
+        int currentHour = localDateTime.getHour();
+        LocalDate localDate = localDateTime.toLocalDate();
+
+        String taskStartTime = localDate.atTime(currentHour, 0, 0)
+                .format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
+        String taskEndTime = localDate.atTime(currentHour, 59, 59)
+                .format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
+
+        qwSopLogsService.createCorpMassSendingByUserLogs( taskStartTime, taskEndTime);
+        return R.ok();
+    }
+
+    /**
+    * 发一对一
+    */
+    @GetMapping("/sopguanfantwo")
+    public R sopguanfantwo(String dateTime) throws Exception {
+
+        LocalDateTime localDateTime = DateUtil.parseLocalDateTime(dateTime);
+
+
+        LocalDate localDate = localDateTime.toLocalDate();
+        String date = localDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+
+        qwSopLogsService.createCorpMassSending(date);
+        return R.ok();
+    }
+
     @GetMapping("/testSop")
     @GetMapping("/testSop")
     public R testSop() throws Exception {
     public R testSop() throws Exception {
 
 

+ 2 - 0
fs-service/src/main/java/com/fs/company/service/ICompanyService.java

@@ -116,4 +116,6 @@ public interface ICompanyService
     List<Long> selectCompanyIds();
     List<Long> selectCompanyIds();
 
 
     void configUserCheck(Long companyId, Integer userIsDefaultBlack);
     void configUserCheck(Long companyId, Integer userIsDefaultBlack);
+
+    void addRedPacketCompanyMoney(BigDecimal money, Long companyId);
 }
 }

+ 21 - 0
fs-service/src/main/java/com/fs/company/service/impl/CompanyServiceImpl.java

@@ -588,4 +588,25 @@ public class CompanyServiceImpl implements ICompanyService
             companyMapper.updateCompany(company);
             companyMapper.updateCompany(company);
         }
         }
     }
     }
+
+    @Override
+    @Transactional
+    public void addRedPacketCompanyMoney(BigDecimal money, Long companyId) {
+        if(companyId!=null&&companyId>0){
+            Company company=companyMapper.selectCompanyByIdForUpdate(companyId);
+            if(company!=null){
+                logger.info("退回红包金额:"+money);
+                company.setMoney(company.getMoney().add(money));
+                companyMapper.updateCompany(company);
+                CompanyMoneyLogs log=new CompanyMoneyLogs();
+                log.setCompanyId(company.getCompanyId());
+                log.setRemark("退回红包金额");
+                log.setMoney(money);
+                log.setLogsType(16);
+                log.setBalance(company.getMoney());
+                log.setCreateTime(new Date());
+                moneyLogsMapper.insertCompanyMoneyLogs(log);
+            }
+        }
+    }
 }
 }

+ 1 - 1
fs-service/src/main/java/com/fs/course/domain/FsCourseRealLink.java

@@ -42,5 +42,5 @@ public class FsCourseRealLink implements Serializable
     @ApiModelProperty(value = "营期课程id")
     @ApiModelProperty(value = "营期课程id")
     private Long id;
     private Long id;
 
 
-
+    private String chatId;
 }
 }

+ 1 - 1
fs-service/src/main/java/com/fs/course/mapper/FsCourseLinkMapper.java

@@ -68,7 +68,7 @@ public interface FsCourseLinkMapper
      */
      */
     public int deleteFsCourseLinkByLinkIds(Long[] linkIds);
     public int deleteFsCourseLinkByLinkIds(Long[] linkIds);
 
 
-    @Select("select link, real_link, update_time,company_user_id from fs_course_link where link = #{suffix} order by link_id desc limit 1 ")
+    @Select("select link, real_link,chat_id, update_time,company_user_id from fs_course_link where link = #{suffix} order by link_id desc limit 1 ")
     FsCourseLink selectFsCourseLinkByLink(@Param("suffix") String suffix);
     FsCourseLink selectFsCourseLinkByLink(@Param("suffix") String suffix);
 
 
     void insertFsCourseLinkBatch(@Param("courseLinks")List<FsCourseLink> courseLinkToInsert);
     void insertFsCourseLinkBatch(@Param("courseLinks")List<FsCourseLink> courseLinkToInsert);

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

@@ -127,7 +127,7 @@ public interface FsCourseRedPacketLogMapper
             "</script>"})
             "</script>"})
     List<FsCourseRedPacketLogListPVO> selectFsCourseRedPacketLogListVO(@Param("maps")FsCourseRedPacketLogParam fsCourseRedPacketLog);
     List<FsCourseRedPacketLogListPVO> selectFsCourseRedPacketLogListVO(@Param("maps")FsCourseRedPacketLogParam fsCourseRedPacketLog);
 
 
-    @Select("SELECT company_id,sum(amount) as money from fs_course_red_packet_log  WHERE status = 1 and  DATE(create_time) = DATE_SUB(CURDATE(), INTERVAL 1 DAY) GROUP BY company_id")
+    @Select("SELECT company_id, SUM(amount) as money  FROM fs_course_red_packet_log    WHERE status in (0,1) and create_time >= DATE_SUB(CURDATE(), INTERVAL 1 DAY)   AND create_time < CURDATE()  GROUP BY company_id " )
     List<RedPacketMoneyVO> selectFsCourseRedPacketLogByCompany();
     List<RedPacketMoneyVO> selectFsCourseRedPacketLogByCompany();
 
 
     List<FsCourseRedPacketLogListPVO> selectFsCourseRedPacketLogListVONew(FsCourseRedPacketLogParam fsCourseRedPacketLog);
     List<FsCourseRedPacketLogListPVO> selectFsCourseRedPacketLogListVONew(FsCourseRedPacketLogParam fsCourseRedPacketLog);
@@ -144,4 +144,16 @@ public interface FsCourseRedPacketLogMapper
     int getCountByCompanyUserIdId(@Param("companyUserId") Long companyUserId);
     int getCountByCompanyUserIdId(@Param("companyUserId") Long companyUserId);
 
 
     BigDecimal getNewVipRedPackAmountByCompanyUserIdId(@Param("companyUserId") Long companyUserId);
     BigDecimal getNewVipRedPackAmountByCompanyUserIdId(@Param("companyUserId") Long companyUserId);
+
+    /**
+     * 查询红包金额数
+     * @param companyUserId 销售ID
+     * @return amount
+     */
+    @Select("select ifnull(sum(fcrpl.amount), 0) from fs_course_red_packet_log fcrpl where fcrpl.company_user_id = #{companyUserId}")
+    BigDecimal getSumByCompanyUserIdId(@Param("companyUserId") Long companyUserId);
+
+    @Select("SELECT company_id, SUM(amount) as money FROM fs_course_red_packet_log    WHERE status = 0 and create_time >= DATE_SUB(CURDATE(), INTERVAL 2 DAY)  AND create_time < DATE_SUB(CURDATE(), INTERVAL 1 DAY) GROUP BY company_id  ")
+    List<RedPacketMoneyVO> selectFsCourseAddRedPacketLogByCompany();
+
 }
 }

+ 7 - 0
fs-service/src/main/java/com/fs/course/mapper/FsCourseWatchLogMapper.java

@@ -396,4 +396,11 @@ public interface FsCourseWatchLogMapper extends BaseMapper<FsCourseWatchLog> {
 
 
     @Select("select * from fs_course_watch_log where user_id = #{userId} and video_id = #{videoId} and send_type = 1")
     @Select("select * from fs_course_watch_log where user_id = #{userId} and video_id = #{videoId} and send_type = 1")
     FsCourseWatchLog getCourseWatchLogByUser(@Param("userId") Long userId, @Param("videoId") Long videoId);
     FsCourseWatchLog getCourseWatchLogByUser(@Param("userId") Long userId, @Param("videoId") Long videoId);
+
+    /**
+     * 根据条件查询条数
+     * @param params    参数
+     * @return  count
+     */
+    int countByMap(@Param("params") Map<String, Object> params);
 }
 }

+ 6 - 3
fs-service/src/main/java/com/fs/course/service/impl/FsCourseLinkServiceImpl.java

@@ -235,13 +235,15 @@ public class FsCourseLinkServiceImpl implements IFsCourseLinkService
         BeanUtils.copyProperties(param,link);
         BeanUtils.copyProperties(param,link);
         link.setLinkType(0);
         link.setLinkType(0);
         link.setIsRoom(1);
         link.setIsRoom(1);
+        String randomString = generateRandomString();
+        link.setLink(randomString);
+        link.setChatId(param.getChatId());
+
         FsCourseRealLink courseMap = new FsCourseRealLink();
         FsCourseRealLink courseMap = new FsCourseRealLink();
         BeanUtils.copyProperties(link,courseMap);
         BeanUtils.copyProperties(link,courseMap);
         // 将实体类对象转换为 JSON 字符串
         // 将实体类对象转换为 JSON 字符串
         String course = JSON.toJSONString(courseMap);
         String course = JSON.toJSONString(courseMap);
         link.setRealLink(realLink+course);
         link.setRealLink(realLink+course);
-        String randomString = generateRandomString();
-        link.setLink(randomString);
         link.setCreateTime(new Date());
         link.setCreateTime(new Date());
         Integer expireDays = 0;
         Integer expireDays = 0;
         if (param.getDays() == null || param.getDays() == 0){
         if (param.getDays() == null || param.getDays() == 0){
@@ -257,6 +259,7 @@ public class FsCourseLinkServiceImpl implements IFsCourseLinkService
         if (fsCourseLinkMapper.insertFsCourseLink(link)>0){
         if (fsCourseLinkMapper.insertFsCourseLink(link)>0){
             String domainName = getDomainName(param.getCompanyUserId(), config);
             String domainName = getDomainName(param.getCompanyUserId(), config);
             String sortLink = domainName + shortLink + link.getLink();
             String sortLink = domainName + shortLink + link.getLink();
+
             return R.ok("短链生成").put("url",sortLink);
             return R.ok("短链生成").put("url",sortLink);
         }
         }
         return R.error("短链生成失败!");
         return R.error("短链生成失败!");
@@ -624,7 +627,7 @@ public class FsCourseLinkServiceImpl implements IFsCourseLinkService
         JSONObject news = new JSONObject(true); // true 表示保持字段顺序
         JSONObject news = new JSONObject(true); // true 表示保持字段顺序
         news.put("link", linkUrl);
         news.put("link", linkUrl);
         news.put("title", course.getCourseName());
         news.put("title", course.getCourseName());
-        news.put("desc", param.getTitle());
+        news.put("desc", param.getTitle()==null?"":param.getTitle());
         news.put("imgUrl", course.getImgUrl());
         news.put("imgUrl", course.getImgUrl());
         return R.ok().put("news",news);
         return R.ok().put("news",news);
     }
     }

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

@@ -122,9 +122,14 @@ public class FsCourseRedPacketLogServiceImpl implements IFsCourseRedPacketLogSer
         return fsCourseRedPacketLogMapper.selectFsCourseRedPacketLogListVONew(fsCourseRedPacketLog);
         return fsCourseRedPacketLogMapper.selectFsCourseRedPacketLogListVONew(fsCourseRedPacketLog);
     }
     }
 
 
+    /**
+     * 查询红包金额数
+     * @param companyUserId 销售ID
+     * @return amount
+     */
     @Override
     @Override
     public BigDecimal getSumByCompanyUserIdId(Long companyUserId) {
     public BigDecimal getSumByCompanyUserIdId(Long companyUserId) {
-        return null;
+        return fsCourseRedPacketLogMapper.getSumByCompanyUserIdId(companyUserId);
     }
     }
 
 
     @Override
     @Override

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

@@ -345,7 +345,7 @@ public class FsCourseWatchLogServiceImpl extends ServiceImpl<FsCourseWatchLogMap
 
 
     @Override
     @Override
     public int countByMap(Map<String, Object> params) {
     public int countByMap(Map<String, Object> params) {
-        return 0;
+        return baseMapper.countByMap(params);
     }
     }
 
 
     @Override
     @Override

+ 66 - 14
fs-service/src/main/java/com/fs/course/service/impl/FsUserCourseVideoServiceImpl.java

@@ -17,8 +17,10 @@ import com.fs.common.utils.DateUtils;
 import com.fs.common.utils.StringUtils;
 import com.fs.common.utils.StringUtils;
 import com.fs.common.utils.date.DateUtil;
 import com.fs.common.utils.date.DateUtil;
 import com.fs.company.domain.Company;
 import com.fs.company.domain.Company;
+import com.fs.company.domain.CompanyMoneyLogs;
 import com.fs.company.domain.CompanyUser;
 import com.fs.company.domain.CompanyUser;
 import com.fs.company.mapper.CompanyMapper;
 import com.fs.company.mapper.CompanyMapper;
+import com.fs.company.mapper.CompanyMoneyLogsMapper;
 import com.fs.company.mapper.CompanyUserMapper;
 import com.fs.company.mapper.CompanyUserMapper;
 import com.fs.course.config.CourseConfig;
 import com.fs.course.config.CourseConfig;
 import com.fs.course.domain.*;
 import com.fs.course.domain.*;
@@ -74,6 +76,7 @@ import org.springframework.transaction.annotation.Transactional;
 
 
 import java.math.BigDecimal;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.math.RoundingMode;
+import java.net.SocketTimeoutException;
 import java.time.Instant;
 import java.time.Instant;
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
 import java.time.ZoneId;
 import java.time.ZoneId;
@@ -100,7 +103,8 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
     private static final String miniappRealLink = "/pages_course/video.html?course=";
     private static final String miniappRealLink = "/pages_course/video.html?course=";
     private static final String REAL_LINK_PREFIX = "/courseH5/pages/course/learning?course=";
     private static final String REAL_LINK_PREFIX = "/courseH5/pages/course/learning?course=";
     private static final String SHORT_LINK_PREFIX = "/courseH5/pages/course/learning?s=";
     private static final String SHORT_LINK_PREFIX = "/courseH5/pages/course/learning?s=";
-
+    @Autowired
+    private CompanyMoneyLogsMapper moneyLogsMapper;
     @Autowired
     @Autowired
     private FsUserCourseVideoMapper fsUserCourseVideoMapper;
     private FsUserCourseVideoMapper fsUserCourseVideoMapper;
     @Autowired
     @Autowired
@@ -464,8 +468,10 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
 //        }
 //        }
 //        return R.ok().put("qwExternalId",matchedContact.getId());
 //        return R.ok().put("qwExternalId",matchedContact.getId());
         FsCourseLink courseLink = courseLinkMapper.selectFsCourseLinkByLink(param.getLink());
         FsCourseLink courseLink = courseLinkMapper.selectFsCourseLinkByLink(param.getLink());
+        System.out.println("查询的链接参数"+courseLink);
         String msg = "<div style=\"color: red;margin-bottom: 15px;font-weight: bold;\">本课程为群会员独享<br>请长按二维码</div>\n" +
         String msg = "<div style=\"color: red;margin-bottom: 15px;font-weight: bold;\">本课程为群会员独享<br>请长按二维码</div>\n" +
                 "\t\t\t\t\t<div style=\"color: #999;font-size: 14px;font-weight: bold;\">添加伴学助手免费领取会员权限</div>";
                 "\t\t\t\t\t<div style=\"color: #999;font-size: 14px;font-weight: bold;\">添加伴学助手免费领取会员权限</div>";
+        System.out.println("企微传参:"+courseLink.getChatId()+"corpId:"+param.getCorpId());
         QwGroupChatDetailsResult result = qwApiService.groupChatDetails(courseLink.getChatId(), param.getCorpId());
         QwGroupChatDetailsResult result = qwApiService.groupChatDetails(courseLink.getChatId(), param.getCorpId());
         if(result.getErrCode() != 0){
         if(result.getErrCode() != 0){
             return R.error("企微接口请求失败,请联系管理员:" +result.getErrMsg());
             return R.error("企微接口请求失败,请联系管理员:" +result.getErrMsg());
@@ -825,9 +831,20 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
         // 根据链接类型判断是否已发放奖励
         // 根据链接类型判断是否已发放奖励
         if (param.getLinkType() != null && param.getLinkType() == 1) {
         if (param.getLinkType() != null && param.getLinkType() == 1) {
             FsCourseRedPacketLog packetLog = redPacketLogMapper.selectFsCourseRedPacketLogByTemporary(param.getVideoId(), param.getUserId());
             FsCourseRedPacketLog packetLog = redPacketLogMapper.selectFsCourseRedPacketLogByTemporary(param.getVideoId(), param.getUserId());
-            if (packetLog != null) {
+            if(packetLog != null && packetLog.getStatus() == 1) {
                 return R.error("奖励已发放");
                 return R.error("奖励已发放");
             }
             }
+            if(packetLog != null && packetLog.getStatus() == 0) {
+                if(StringUtils.isNotEmpty(packetLog.getResult())){
+                    R r = JSON.parseObject(packetLog.getResult(), R.class);
+                    return r;
+                } else {
+                    return R.error("奖励已发放");
+                }
+            }
+            if(packetLog != null && packetLog.getStatus() == 2) {
+                return R.error("请联系客服补发");
+            }
         } else {
         } else {
             log = courseWatchLogMapper.getWatchCourseVideo(param.getUserId(), param.getVideoId(), param.getQwUserId(), param.getQwExternalId());
             log = courseWatchLogMapper.getWatchCourseVideo(param.getUserId(), param.getVideoId(), param.getQwUserId(), param.getQwExternalId());
             if (log == null) {
             if (log == null) {
@@ -905,18 +922,22 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
      */
      */
     private R sendRedPacketReward(FsCourseSendRewardUParam param, FsUser user, FsCourseWatchLog log, FsUserCourseVideo video, CourseConfig config) {
     private R sendRedPacketReward(FsCourseSendRewardUParam param, FsUser user, FsCourseWatchLog log, FsUserCourseVideo video, CourseConfig config) {
         // 判断是否属于领取红包时间(会员看课发放红包)
         // 判断是否属于领取红包时间(会员看课发放红包)
-        FsUserCoursePeriodDays periodDays = new FsUserCoursePeriodDays();
-        periodDays.setVideoId(param.getVideoId());
-        periodDays.setPeriodId(param.getPeriodId());
-        //正常情况是只能查询到一条,之前可能存在重复的脏数据,暂使用查询list的方式
-        List<FsUserCoursePeriodDays> fsUserCoursePeriodDays = fsUserCoursePeriodDaysMapper.selectFsUserCoursePeriodDaysList(periodDays);
-        if(fsUserCoursePeriodDays != null && !fsUserCoursePeriodDays.isEmpty()){
-            periodDays = fsUserCoursePeriodDays.get(0);
+        if (param.getPeriodId()!=null && param.getPeriodId()>0) {
+            FsUserCoursePeriodDays periodDays = new FsUserCoursePeriodDays();
+            periodDays.setVideoId(param.getVideoId());
+            periodDays.setPeriodId(param.getPeriodId());
+            //正常情况是只能查询到一条,之前可能存在重复的脏数据,暂使用查询list的方式
+            List<FsUserCoursePeriodDays> fsUserCoursePeriodDays = fsUserCoursePeriodDaysMapper.selectFsUserCoursePeriodDaysList(periodDays);
+            if(fsUserCoursePeriodDays != null && !fsUserCoursePeriodDays.isEmpty()){
+                periodDays = fsUserCoursePeriodDays.get(0);
+            }
+            if(periodDays != null && periodDays.getLastJoinTime() !=null && LocalDateTime.now().isAfter(periodDays.getLastJoinTime())) {
+                return R.error(403,"已超过领取红包时间");
+            }
         }
         }
 
 
-        if(periodDays != null && periodDays.getLastJoinTime() !=null && LocalDateTime.now().isAfter(periodDays.getLastJoinTime())) {
-            return R.error(403,"已超过领取红包时间");
-        }
+
+
 
 
         // 确定红包金额
         // 确定红包金额
         BigDecimal amount = BigDecimal.ZERO;
         BigDecimal amount = BigDecimal.ZERO;
@@ -946,6 +967,26 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
         System.out.println("红包商户号"+packetParam);
         System.out.println("红包商户号"+packetParam);
         //2025.6.19 红包金额为0的时候
         //2025.6.19 红包金额为0的时候
         if (amount.compareTo(BigDecimal.ZERO)>0){
         if (amount.compareTo(BigDecimal.ZERO)>0){
+
+            Company company = companyMapper.selectCompanyByIdForUpdate(param.getCompanyId());
+            BigDecimal money = company.getMoney();
+            BigDecimal subtract = money.subtract(amount);
+            if (subtract.compareTo(BigDecimal.ZERO)<0){
+                FsCourseRedPacketLog redPacketLog = new FsCourseRedPacketLog();
+                redPacketLog.setCourseId(param.getCourseId());
+                redPacketLog.setCompanyId(param.getCompanyId());
+                redPacketLog.setUserId(param.getUserId());
+                redPacketLog.setVideoId(param.getVideoId());
+                redPacketLog.setStatus(2);
+                redPacketLog.setQwUserId(param.getQwUserId() != null ? param.getQwUserId() : null);
+                redPacketLog.setCompanyUserId(param.getCompanyUserId());
+                redPacketLog.setCreateTime(new Date());
+                redPacketLog.setAmount(amount);
+                redPacketLog.setWatchLogId(log.getLogId() != null ? log.getLogId() : null);
+                redPacketLog.setPeriodId(param.getPeriodId());
+                redPacketLogMapper.insertFsCourseRedPacketLog(redPacketLog);
+                return R.error("销售公司余额不足");
+            }
             // 发送红包
             // 发送红包
             R sendRedPacket = paymentService.sendRedPacket(packetParam);
             R sendRedPacket = paymentService.sendRedPacket(packetParam);
             if (sendRedPacket.get("code").equals(200)) {
             if (sendRedPacket.get("code").equals(200)) {
@@ -953,6 +994,7 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
                 TransferBillsResult transferBillsResult;
                 TransferBillsResult transferBillsResult;
                 if (sendRedPacket.get("isNew").equals(1)){
                 if (sendRedPacket.get("isNew").equals(1)){
                     transferBillsResult = (TransferBillsResult)sendRedPacket.get("data");
                     transferBillsResult = (TransferBillsResult)sendRedPacket.get("data");
+                    redPacketLog.setResult(JSON.toJSONString(sendRedPacket));
                     redPacketLog.setOutBatchNo(transferBillsResult.getOutBillNo());
                     redPacketLog.setOutBatchNo(transferBillsResult.getOutBillNo());
                 }else {
                 }else {
                     redPacketLog.setOutBatchNo(sendRedPacket.get("orderCode").toString());
                     redPacketLog.setOutBatchNo(sendRedPacket.get("orderCode").toString());
@@ -973,10 +1015,20 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
                 redPacketLogMapper.insertFsCourseRedPacketLog(redPacketLog);
                 redPacketLogMapper.insertFsCourseRedPacketLog(redPacketLog);
 
 
                 // 更新观看记录的奖励类型
                 // 更新观看记录的奖励类型
-//            if (param.getLinkType() == null || param.getLinkType() == 0) {
                 log.setRewardType(config.getRewardType());
                 log.setRewardType(config.getRewardType());
                 courseWatchLogMapper.updateFsCourseWatchLog(log);
                 courseWatchLogMapper.updateFsCourseWatchLog(log);
-//            }
+                company.setMoney(subtract);
+                companyMapper.updateCompany(company);
+
+                CompanyMoneyLogs logs=new CompanyMoneyLogs();
+                logs.setCompanyId(company.getCompanyId());
+                logs.setRemark("扣除红包金额");
+                logs.setMoney(amount.multiply(new BigDecimal(-1)));
+                logs.setLogsType(15);
+                logs.setBalance(company.getMoney());
+                logs.setCreateTime(new Date());
+                moneyLogsMapper.insertCompanyMoneyLogs(logs);
+
                 return sendRedPacket;
                 return sendRedPacket;
             } else {
             } else {
                 return R.error("奖励发送失败,请联系客服");
                 return R.error("奖励发送失败,请联系客服");

+ 1 - 1
fs-service/src/main/resources/application-config-druid-fcky.yml

@@ -63,7 +63,7 @@ tencent_cloud_config:
 cloud_host:
 cloud_host:
   company_name: 蜂巢快药
   company_name: 蜂巢快药
 headerImg:
 headerImg:
-  imgUrl: https://fc-1361520560.cos.ap-beijing.myqcloud.com/fs/20250619/ca569852d1da47f3bac8b209347c8011.png
+  imgUrl: https://fc-1361520560.cos.ap-beijing.myqcloud.com/fs/20250624/490729259f354c338ad6fc0fbbfe0e53.jpg
 ipad:
 ipad:
   ipadUrl: http://ipad.cdwjyyh.com
   ipadUrl: http://ipad.cdwjyyh.com
 wx_miniapp_temp:
 wx_miniapp_temp:

+ 1 - 0
fs-service/src/main/resources/db/20250528-sop.sql

@@ -16,3 +16,4 @@ END IF;
 END;
 END;
 
 
 CALL add_tb_column;
 CALL add_tb_column;
+DROP PROCEDURE IF EXISTS add_tb_column;

+ 1 - 0
fs-service/src/main/resources/db/20250528.sql

@@ -26,3 +26,4 @@ END IF;
 END;
 END;
 
 
 CALL add_tb_column;
 CALL add_tb_column;
+DROP PROCEDURE IF EXISTS add_tb_column;

+ 5 - 1
fs-service/src/main/resources/mapper/course/FsCourseLinkMapper.xml

@@ -19,10 +19,11 @@
         <result property="qwExternalId"    column="qw_external_id"    />
         <result property="qwExternalId"    column="qw_external_id"    />
         <result property="linkType"    column="link_type"    />
         <result property="linkType"    column="link_type"    />
         <result property="isRoom"    column="is_room"    />
         <result property="isRoom"    column="is_room"    />
+        <result property="chatId"    column="chat_id"    />
     </resultMap>
     </resultMap>
 
 
     <sql id="selectFsCourseLinkVo">
     <sql id="selectFsCourseLinkVo">
-        select link_id, is_room,link, real_link,link_type, create_time, update_time, company_id, company_user_id, qw_user_id, video_id, corp_id, course_id ,qw_external_id  from fs_course_link
+        select link_id,chat_id, is_room,link, real_link,link_type, create_time, update_time, company_id, company_user_id, qw_user_id, video_id, corp_id, course_id ,qw_external_id  from fs_course_link
     </sql>
     </sql>
 
 
     <select id="selectFsCourseLinkList" parameterType="FsCourseLink" resultMap="FsCourseLinkResult">
     <select id="selectFsCourseLinkList" parameterType="FsCourseLink" resultMap="FsCourseLinkResult">
@@ -62,6 +63,7 @@
             <if test="qwExternalId != null">qw_external_id,</if>
             <if test="qwExternalId != null">qw_external_id,</if>
             <if test="linkType != null">link_type,</if>
             <if test="linkType != null">link_type,</if>
             <if test="isRoom != null">is_room,</if>
             <if test="isRoom != null">is_room,</if>
+            <if test="chatId != null">chat_id,</if>
         </trim>
         </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="link != null">#{link},</if>
             <if test="link != null">#{link},</if>
@@ -77,6 +79,7 @@
             <if test="qwExternalId != null">#{qwExternalId},</if>
             <if test="qwExternalId != null">#{qwExternalId},</if>
             <if test="linkType != null">#{linkType},</if>
             <if test="linkType != null">#{linkType},</if>
             <if test="isRoom != null">#{isRoom},</if>
             <if test="isRoom != null">#{isRoom},</if>
+            <if test="chatId != null">#{chatId},</if>
         </trim>
         </trim>
     </insert>
     </insert>
 
 
@@ -143,6 +146,7 @@
             <if test="qwExternalId != null">qw_external_id = #{qwExternalId},</if>
             <if test="qwExternalId != null">qw_external_id = #{qwExternalId},</if>
             <if test="linkType != null">link_type = #{linkType},</if>
             <if test="linkType != null">link_type = #{linkType},</if>
             <if test="isRoom != null">is_room = #{isRoom},</if>
             <if test="isRoom != null">is_room = #{isRoom},</if>
+            <if test="chatId != null">chat_id = #{chatId},</if>
         </trim>
         </trim>
         where link_id = #{linkId}
         where link_id = #{linkId}
     </update>
     </update>

+ 18 - 0
fs-service/src/main/resources/mapper/course/FsCourseWatchLogMapper.xml

@@ -496,6 +496,24 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         ) AS grouped_results_count
         ) AS grouped_results_count
     </select>
     </select>
 
 
+    <!-- 根据条件查询条数 -->
+    <select id="countByMap" resultType="java.lang.Integer">
+        select count(fcwl.log_id) from fs_course_watch_log fcwl
+        <where>
+            <if test="params.logTypes != null and params.logTypes.size() > 0">
+                and fcwl.log_type in
+                <foreach collection="params.logTypes" open="(" close=")" separator="," item="logType">
+                    #{logType}
+                </foreach>
+            </if>
+            <if test="params.companyUserId != null">
+                and fcwl.company_user_id = #{params.companyUserId}
+            </if>
+            <if test="params.date != null">
+                and date(fcwl.create_time) = #{params.date}
+            </if>
+        </where>
+    </select>
 
 
     <update id="batchUpdateWatchLog" parameterType="java.util.List">
     <update id="batchUpdateWatchLog" parameterType="java.util.List">
         UPDATE fs_course_watch_log
         UPDATE fs_course_watch_log

+ 15 - 20
fs-service/src/main/resources/mapper/statis/ConsumptionBalanceMapper.xml

@@ -121,11 +121,10 @@
         </where>
         </where>
     </select>
     </select>
     <select id="queryRewardCount" resultType="java.lang.Long">
     <select id="queryRewardCount" resultType="java.lang.Long">
-        select count(*) from company_red_package_logs rpl
+        select count(*) from fs_course_red_packet_log rpl
             left join fs_course_watch_log log
             left join fs_course_watch_log log
             on rpl.watch_log_id=log.log_id
             on rpl.watch_log_id=log.log_id
         <where>
         <where>
-            rpl.operate_type=1
             <if test="startTime != null and endTime != null">
             <if test="startTime != null and endTime != null">
                 and rpl.create_time BETWEEN #{startTime} AND #{endTime}
                 and rpl.create_time BETWEEN #{startTime} AND #{endTime}
             </if>
             </if>
@@ -138,11 +137,10 @@
         </where>
         </where>
     </select>
     </select>
     <select id="queryRewardMoney" resultType="java.math.BigDecimal">
     <select id="queryRewardMoney" resultType="java.math.BigDecimal">
-        select sum(up_money) from company_red_package_logs rpl
+        select sum(rpl.amount) from fs_course_red_packet_log rpl
         left join fs_course_watch_log log
         left join fs_course_watch_log log
         on rpl.watch_log_id=log.log_id
         on rpl.watch_log_id=log.log_id
         <where>
         <where>
-            rpl.operate_type=1
             <if test="startTime != null and endTime != null">
             <if test="startTime != null and endTime != null">
                 and rpl.create_time BETWEEN #{startTime} AND #{endTime}
                 and rpl.create_time BETWEEN #{startTime} AND #{endTime}
             </if>
             </if>
@@ -280,14 +278,12 @@
             <if test="dataType == 1">
             <if test="dataType == 1">
                 rpl.course_id as course_id,
                 rpl.course_id as course_id,
             </if>
             </if>
-            SUM(rpl.money) as rewardMoney
+            SUM(rpl.amount) as rewardMoney
         FROM
         FROM
-            company_red_package_logs rpl
-        left join fs_course_watch_log log
-        on rpl.watch_log_id=log.log_id
+            fs_course_red_packet_log rpl
+            left join fs_course_watch_log log
+            on rpl.watch_log_id=log.log_id
         <where>
         <where>
-            rpl.operate_type = 1
-            AND rpl.status = 1
             <if test="startTime != null">
             <if test="startTime != null">
                 AND rpl.create_time <![CDATA[>=]]> #{startTime}
                 AND rpl.create_time <![CDATA[>=]]> #{startTime}
             </if>
             </if>
@@ -322,8 +318,8 @@
         <if test="type == 2 or type == 3 or type == 4">
         <if test="type == 2 or type == 3 or type == 4">
             DATE_FORMAT(rpl.create_time, '%Y-%m-%d') AS start_date,
             DATE_FORMAT(rpl.create_time, '%Y-%m-%d') AS start_date,
         </if>
         </if>
-               SUM(rpl.money) as rewardMoney
-        from company_red_package_logs rpl
+            SUM(rpl.amount) as rewardMoney
+        from fs_course_red_packet_log rpl
         left join fs_course_watch_log log
         left join fs_course_watch_log log
         on rpl.watch_log_id=log.log_id
         on rpl.watch_log_id=log.log_id
         <where>
         <where>
@@ -339,13 +335,11 @@
             <if test="companyId != null">
             <if test="companyId != null">
                 and log.company_id = ${companyId}
                 and log.company_id = ${companyId}
             </if>
             </if>
-            AND rpl.operate_type = 1
-            AND rpl.status = 1
         </where>
         </where>
         group by start_date
         group by start_date
     </select>
     </select>
     <select id="getCurrentBalance" resultType="java.math.BigDecimal">
     <select id="getCurrentBalance" resultType="java.math.BigDecimal">
-        select sum(money) from company
+        select sum(money) from company where is_del=0
     </select>
     </select>
     <select id="dealerAggregatedCompanyId" resultType="com.fs.statis.dto.DealerAggregatedDTO">
     <select id="dealerAggregatedCompanyId" resultType="com.fs.statis.dto.DealerAggregatedDTO">
         SELECT
         SELECT
@@ -381,11 +375,11 @@
                                 </where>
                                 </where>
                 ) AS black_num,
                 ) AS black_num,
                 (select COUNT(*) FROM qw_user
                 (select COUNT(*) FROM qw_user
-                    <where>
-                        <if test="companyId != null">
-                            company_id = ${companyId}
-                        </if>
-                    </where>
+                <where>
+                    <if test="companyId != null">
+                       AND company_id = ${companyId}
+                    </if>
+                </where>
         ) AS qw_member_num
         ) AS qw_member_num
     </select>
     </select>
     <select id="getCurrentBalanceCompanyId" resultType="java.math.BigDecimal">
     <select id="getCurrentBalanceCompanyId" resultType="java.math.BigDecimal">
@@ -394,6 +388,7 @@
             <if test="companyId != null">
             <if test="companyId != null">
                 company_id = #{companyId}
                 company_id = #{companyId}
             </if>
             </if>
+            AND is_del=0
         </where>
         </where>
     </select>
     </select>