Browse Source

恒春来
-红包记录新增营期+档期
今正
-增加手动关闭发群功能

lk 1 day ago
parent
commit
fd7fc46e19

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

@@ -68,6 +68,19 @@ public class FsUserCourseTrainingCampController {
         return AjaxResult.success(new PageInfo<>(list));
     }
 
+    /**
+     * 查全部训练营
+     * @param
+     * @param
+     * @param
+     * @return
+     */
+    @GetMapping("/listAll")
+    public R listAll() {
+        List<FsUserCourseTrainingCampVO> campList = fsUserCourseTrainingCampService.selectFsUserCourseTrainingCampListAll();
+        return R.ok().put("data", new PageInfo<>(campList));
+    }
+
     /**
      * 新增训练营
      * @param params    参数

+ 8 - 0
fs-admin/src/main/java/com/fs/qw/controller/QwSopController.java

@@ -123,6 +123,14 @@ public class QwSopController extends BaseController
         List<QwSop> list = qwSopService.selectQwSopMyList(qwSop);
         return getDataTable(list);
     }
+    /**
+     * 查询企微sop列表-全部
+     */
+//    @PreAuthorize("@ss.hasPermi('qw:sop:allList')")
+    @PostMapping("/allList")
+    public R allList(@RequestBody QwSop qwSop) {
+        return R.ok().put("data", qwSopService.selectQwSopMyList(qwSop));
+    }
     /**
      * 导出企微sop列表
      */

+ 5 - 0
fs-admin/src/main/java/com/fs/web/controller/system/SysConfigController.java

@@ -6,6 +6,7 @@ import cn.hutool.core.util.ObjectUtil;
 import com.fs.common.core.domain.R;
 import com.fs.common.core.redis.RedisCache;
 import com.fs.common.utils.SecurityUtils;
+import com.fs.sop.service.impl.QwSopServiceImpl;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.validation.annotation.Validated;
@@ -38,6 +39,8 @@ public class SysConfigController extends BaseController {
     private ISysConfigService configService;
     @Autowired
     public RedisCache redisCache;
+    @Autowired
+    private QwSopServiceImpl qwSopServiceImpl;
 
     /**
      * 获取参数配置列表
@@ -140,6 +143,8 @@ public class SysConfigController extends BaseController {
         config.setCreateBy(SecurityUtils.getUsername());
         //修复只能更新的BUG
         if (null != config.getConfigId()) {
+//            今正加了手动关发群
+            qwSopServiceImpl.updateGroupSopStatus(config);
             return toAjax(configService.updateConfig(config));
         } else {
             return toAjax(configService.insertConfig(config));

+ 8 - 0
fs-qw-task/src/main/java/com/fs/app/taskService/impl/SopLogsTaskServiceImpl.java

@@ -21,6 +21,8 @@ import com.fs.course.domain.*;
 import com.fs.course.mapper.*;
 import com.fs.course.service.IFsCourseLinkService;
 import com.fs.course.service.IFsUserCompanyBindService;
+import com.fs.his.utils.ConfigUtil;
+import com.fs.hisStore.enums.SysConfigEnum;
 import com.fs.live.domain.LiveWatchLog;
 import com.fs.live.mapper.LiveWatchLogMapper;
 import com.fs.qw.domain.*;
@@ -191,6 +193,8 @@ public class SopLogsTaskServiceImpl implements SopLogsTaskService {
 
     @Autowired
     LiveWatchLogMapper liveWatchLogMapper;
+    @Autowired
+    private ConfigUtil configUtil;
 
     @PostConstruct
     public void init() {
@@ -437,6 +441,10 @@ public class SopLogsTaskServiceImpl implements SopLogsTaskService {
 
         CountDownLatch userLogsLatch = new CountDownLatch(userLogsVos.size());
         for (SopUserLogsVo logVo : userLogsVos) {
+            CourseConfig courseConfig = configUtil.generateStructConfigByKey(SysConfigEnum.COURSE_CONFIG.getKey(), CourseConfig.class);
+            if (courseConfig!= null && courseConfig.getRoomLinkAllow()){
+                continue;
+            }
             processUserLogAsync(logVo, ruleTimeVO, rulesList, userLogsLatch, currentTime, groupChatMap,qwCompany.getMiniAppId(),
                     config,miniMap,companies);
         }

+ 7 - 0
fs-qwhook-sop/src/main/java/com/fs/app/controller/ApisFsUserCourseVideoController.java

@@ -22,6 +22,7 @@ import com.fs.course.vo.FsCourseVideoListBySidebarVO;
 import com.fs.course.vo.newfs.FsUserCourseVideoPageListVO;
 import com.fs.his.config.FsSysConfig;
 import com.fs.his.utils.ConfigUtil;
+import com.fs.hisStore.enums.SysConfigEnum;
 import com.fs.qw.domain.QwUser;
 import com.fs.qw.service.IQwExternalContactService;
 import com.fs.system.service.ISysConfigService;
@@ -61,6 +62,8 @@ public class ApisFsUserCourseVideoController extends BaseController {
 
     @Autowired
     private ISysConfigService configService;
+    @Autowired
+    private ConfigUtil configUtil;
 
 
     @ApiOperation("课程视频详情")
@@ -210,6 +213,10 @@ public class ApisFsUserCourseVideoController extends BaseController {
         if (StringUtil.strIsNullOrEmpty(param.getCorpId())){
             return R.error("企业id不能为空");
         }
+        CourseConfig courseConfig = configUtil.generateStructConfigByKey(SysConfigEnum.COURSE_CONFIG.getKey(), CourseConfig.class);
+        if (courseConfig!= null && courseConfig.getRoomLinkAllow()){
+            return R.error("创建群链接已禁止");
+        }
 
 
         return fsUserCourseVideoService.createRoomMiniLink(param);

+ 9 - 0
fs-qwhook-sop/src/main/java/com/fs/app/controller/FsUserCourseVideoController.java

@@ -5,6 +5,7 @@ import com.fs.common.annotation.RepeatSubmit;
 import com.fs.common.core.domain.R;
 import com.fs.common.core.domain.ResponseResult;
 import com.fs.common.utils.CloudHostUtils;
+import com.fs.course.config.CourseConfig;
 import com.fs.course.domain.FsUserCourse;
 import com.fs.course.param.FsCourseLinkCreateParam;
 import com.fs.course.param.FsCourseLinkMiniParam;
@@ -21,6 +22,8 @@ import com.fs.course.vo.newfs.FsUserCourseListVO;
 import com.fs.course.vo.newfs.FsUserCourseVideoDetailsVO;
 import com.fs.course.vo.newfs.FsUserCourseVideoPageListVO;
 import com.fs.course.vo.newfs.FsUserVideoListVO;
+import com.fs.his.utils.ConfigUtil;
+import com.fs.hisStore.enums.SysConfigEnum;
 import com.fs.qw.domain.QwUser;
 import com.fs.qw.service.IQwExternalContactService;
 import com.fs.qw.service.IQwUserService;
@@ -53,6 +56,8 @@ public class FsUserCourseVideoController {
 
     @Autowired
     private IQwExternalContactService qwExternalContactService;
+    @Autowired
+    private ConfigUtil configUtil;
 
 
     @ApiOperation("课程视频详情")
@@ -118,6 +123,10 @@ public class FsUserCourseVideoController {
         if (StringUtil.strIsNullOrEmpty(param.getCorpId())){
             return R.error("企业id不能为空");
         }
+        CourseConfig courseConfig = configUtil.generateStructConfigByKey(SysConfigEnum.COURSE_CONFIG.getKey(), CourseConfig.class);
+        if (courseConfig!= null && courseConfig.getRoomLinkAllow()){
+            return R.error("创建发群链接已禁止");
+        }
 
         return fsUserCourseVideoService.createRoomMiniLink(param);
     }

+ 3 - 0
fs-service/src/main/java/com/fs/course/config/CourseConfig.java

@@ -97,6 +97,9 @@ public class CourseConfig implements Serializable {
     // 控制休息提示是否打开 默认打开 0-关闭 1-打开
     private Integer isOpenRestReminder;
 
+    // 发课发群是否打开false打开,true关闭
+    private Boolean roomLinkAllow;
+
 
     @Data
     public static class DisabledTimeVo{

+ 9 - 2
fs-service/src/main/java/com/fs/course/mapper/FsCourseRedPacketLogMapper.java

@@ -114,13 +114,15 @@ public interface FsCourseRedPacketLogMapper
     List<FsCourseRedPacketLogListPVO> selectRedPacketLogListVO(@Param("maps") FsCourseRedPacketLogParam param);
 
     @Select({"<script> " +
-            "select l.*,v.title,u.nick_name as fsNickName,u.avatar as fsAvatar,u.phone,cu.nick_name company_user_name,c.company_name,qu.qw_user_name,fuc.course_name,u.phone as phoneNumber,cu.dept_id   from fs_course_red_packet_log l  \n" +
+            "select l.*,v.title,u.nick_name as fsNickName,u.avatar as fsAvatar,u.phone,cu.nick_name company_user_name,c.company_name,qu.qw_user_name,fuc.course_name,u.phone as phoneNumber,cu.dept_id   " +
+            "from fs_course_red_packet_log l  \n" +
             "left join fs_user_course_video v on v.video_id = l.video_id \n" +
             "left join fs_user u on u.user_id = l.user_id \n" +
             "left join fs_user_course fuc on fuc.course_id = l.course_id \n" +
             "left join company_user cu on cu.user_id=l.company_user_id \n" +
             "left join company c on c.company_id=cu.company_id \n" +
             "LEFT JOIN qw_user qu on qu.id= l.qw_user_id  \n" +
+            "left join fs_course_watch_log fcwl on fcwl.log_id = l.watch_log_id \n" +
             "where 1=1   " +
             "<if test = ' maps.userId !=null '> and l.user_id = #{maps.userId} </if>" +
             "<if test = ' maps.logId !=null '> and l.log_id = #{maps.logId} </if>" +
@@ -131,7 +133,6 @@ public interface FsCourseRedPacketLogMapper
             "<if test = ' maps.nickName !=null '> and u.nick_name  like concat('%', #{maps.nickName}, '%') </if>" +
             "<if test = ' maps.courseId !=null '> and l.course_id = #{maps.courseId} </if>" +
             "<if test = ' maps.videoId !=null '> and l.video_id = #{maps.videoId} </if>" +
-            "<if test = ' maps.periodId !=null '> and l.period_id = #{maps.periodId} </if>" +
             "<if test = ' maps.status !=null '> and l.status = #{maps.status} </if>" +
             "<if test = \"maps.phone !=null and maps.phone != '' \"> and u.phone = #{maps.phone} </if>" +
             "<if test = ' maps.qwUserId !=null '> and l.qw_user_id = #{maps.qwUserId} </if>" +
@@ -143,6 +144,12 @@ public interface FsCourseRedPacketLogMapper
             "                    ${item}\n" +
             "                </foreach>\n" +
             "</if>" +
+            "<if test = 'maps.trainingCampId != null and maps.periodId !=null'>\n" +
+            "and fcwl.period_id = #{maps.periodId}\n " +
+            "</if>" +
+            "<if test = 'maps.sopId != null and maps.sopDate != null' >\n" +
+            "and fcwl.sop_id = #{maps.sopId} and fcwl.camp_period_time = #{maps.sopDate}\n"+
+            "</if>"+
             " order by l.log_id desc  "+
             "</script>"})
     List<FsCourseRedPacketLogListPVO> selectFsCourseRedPacketLogListVO(@Param("maps")FsCourseRedPacketLogParam fsCourseRedPacketLog);

+ 17 - 0
fs-service/src/main/java/com/fs/course/param/FsCourseRedPacketLogParam.java

@@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 
 import java.io.Serializable;
+import java.time.LocalDate;
 import java.util.Date;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -54,6 +55,22 @@ public class FsCourseRedPacketLogParam implements Serializable {
 
     private List<String> userIds;
 
+    /**
+     * 训练营id
+     */
+    private Long trainingCampId;
+
+    /**
+     * 自动发课营期时间
+     */
+    private LocalDate sopDate;
+    /**
+     * 自动发课营期id
+     */
+    private String sopId;
+
+
+
     public List<String> getUserIds() {
         if (userIds == null || userIds.isEmpty()) {
             return userIds;

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

@@ -49,4 +49,6 @@ public interface IFsUserCourseTrainingCampService extends IService<FsUserCourseT
      * @return  list
      */
     List<OptionsVO> selectCampListByMap(Map<String, Object> params);
+
+    List<FsUserCourseTrainingCampVO> selectFsUserCourseTrainingCampListAll();
 }

+ 5 - 0
fs-service/src/main/java/com/fs/course/service/impl/FsUserCourseTrainingCampServiceImpl.java

@@ -181,4 +181,9 @@ public class FsUserCourseTrainingCampServiceImpl extends ServiceImpl<FsUserCours
     public List<OptionsVO> selectCampListByMap(Map<String, Object> params) {
         return baseMapper.selectCampListByMap(params);
     }
+
+    @Override
+    public List<FsUserCourseTrainingCampVO> selectFsUserCourseTrainingCampListAll() {
+        return baseMapper.selectFsUserCourseTrainingCampVOListByMap(null);
+    }
 }

+ 3 - 0
fs-service/src/main/java/com/fs/sop/mapper/QwSopLogsMapper.java

@@ -354,4 +354,7 @@ public interface QwSopLogsMapper extends BaseMapper<QwSopLogs> {
             "ORDER BY qw_user_key" +
             "</script>")
     List<QwApiSopLogToken> countQwApiAopLogToken(@Param("data") String dateStr);
+
+    @DataSource(DataSourceType.SOP)
+    void updateGroupSopStatus();
 }

+ 4 - 0
fs-service/src/main/java/com/fs/sop/service/IQwSopService.java

@@ -13,6 +13,7 @@ import com.fs.sop.vo.QwSopTask;
 import com.fs.sop.vo.SopVoiceListVo;
 import com.fs.store.vo.h5.ExternalUserStatsVO;
 import com.fs.store.vo.h5.FsUserStatisticsVO;
+import com.fs.system.domain.SysConfig;
 
 import java.io.IOException;
 import java.util.List;
@@ -116,4 +117,7 @@ public interface IQwSopService
 
     //看课足迹--侧边栏
     List<FsCourseWatchLogStatisticsListVO> externalWatchRecordStatsList (QwSidebarStatsParam qwParam);
+
+    //批量修改群发sop为暂停
+    public Integer updateGroupSopStatus(SysConfig config);
 }

+ 58 - 3
fs-service/src/main/java/com/fs/sop/service/impl/QwSopServiceImpl.java

@@ -1,6 +1,8 @@
 package com.fs.sop.service.impl;
 
+import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.fs.common.annotation.DataSource;
 import com.fs.common.core.domain.R;
@@ -11,12 +13,15 @@ import com.fs.common.utils.StringUtils;
 import com.fs.company.domain.CompanyUser;
 import com.fs.company.mapper.CompanyUserMapper;
 import com.fs.company.vo.CompanyQwUserByIdsVo;
+import com.fs.course.config.CourseConfig;
 import com.fs.course.mapper.FsCourseWatchLogMapper;
 import com.fs.course.service.IFsCourseLinkService;
 import com.fs.course.service.IFsCourseWatchLogService;
 import com.fs.course.vo.FsCourseWatchLogStatisticsListVO;
 import com.fs.his.mapper.FsUserMapper;
 import com.fs.his.service.IFsUserService;
+import com.fs.his.utils.ConfigUtil;
+import com.fs.hisStore.enums.SysConfigEnum;
 import com.fs.qw.domain.QwExternalContact;
 import com.fs.qw.domain.QwSopUpdateStatus;
 import com.fs.qw.domain.QwUser;
@@ -39,6 +44,7 @@ import com.fs.sop.vo.SopVoiceListVo;
 import com.fs.sop.vo.VoiceVo;
 import com.fs.store.param.h5.UserStatisticsCommonParam;
 import com.fs.store.vo.h5.*;
+import com.fs.system.domain.SysConfig;
 import com.fs.voice.utils.StringUtil;
 import com.fs.wxUser.mapper.CompanyWxUserMapper;
 import com.fs.wxUser.param.CompanyWxUserSopParam;
@@ -69,8 +75,7 @@ import java.util.stream.Collectors;
  * @date 2024-07-31
  */
 @Service
-public class QwSopServiceImpl implements IQwSopService
-{
+public class QwSopServiceImpl implements IQwSopService {
     private static final Logger log = LoggerFactory.getLogger(QwSopServiceImpl.class);
 
     @Autowired
@@ -117,6 +122,8 @@ public class QwSopServiceImpl implements IQwSopService
     private CompanyUserMapper companyUserMapper;
 
     private IQwSopTempVoiceService qwSopTempVoiceService;
+    @Autowired
+    private ConfigUtil configUtil;
 
     @Autowired
     public void setIQwSopTempVoiceService(@Lazy IQwSopTempVoiceService qwSopTempVoiceService) {
@@ -142,6 +149,9 @@ public class QwSopServiceImpl implements IQwSopService
 
     @Autowired
     private FsUserMapper fsUserMapper;
+
+    private static final Long COURSE_CONFIG_ID = 10L;
+
     /**
      * 查询企微sop
      *
@@ -155,7 +165,6 @@ public class QwSopServiceImpl implements IQwSopService
     }
 
 
-
     /**
      * 查询企微sop列表
      *
@@ -1370,6 +1379,52 @@ public class QwSopServiceImpl implements IQwSopService
         return list;
     }
 
+    @Override
+    public Integer updateGroupSopStatus(SysConfig config) {
+        if (Objects.equals(config.getConfigId(), COURSE_CONFIG_ID)) {
+            String configValue = config.getConfigValue();
+            if (configValue != null && configValue.contains("roomLinkAllow")) {
+                try {
+                    CourseConfig newConfig = JSONUtil.toBean(configValue, CourseConfig.class);
+                    if (Boolean.TRUE.equals(newConfig.getRoomLinkAllow())) {
+                        // 获取旧配置
+                        JSONObject oldConfig = configUtil.generateConfigByKey(SysConfigEnum.COURSE_CONFIG.getKey());
+                        Boolean needUpdate = false;
+                        if (oldConfig == null) {
+                            // 旧配置不存在,需要更新
+                            needUpdate = true;
+                        } else {
+                            String oldValueStr = oldConfig.getString("roomLinkAllow");
+                            if (oldValueStr == null) {
+                                // 旧配置没有该字段,需要更新
+                                needUpdate = true;
+                            } else {
+                                Boolean oldValue = Boolean.parseBoolean(oldValueStr);
+                                // 新旧值不同时才需要更新
+                                needUpdate = !newConfig.getRoomLinkAllow().equals(oldValue);
+                            }
+                        }
+                        if (needUpdate) {
+                            qwSopLogsMapper.updateGroupSopStatus();
+                        }
+                    }
+                } catch (Exception e) {
+                    log.error("处理课程配置异常", e);
+                }
+            }
+        }
+        return null;
+    }
+
+    private CourseConfig parseCourseConfig(String configValue) {
+        try {
+            return JSONUtil.toBean(configValue, CourseConfig.class);
+        } catch (Exception e) {
+            log.error("解析课程配置失败: {}", configValue, e);
+            return null;
+        }
+    }
+
     /**
      *  获取外部联系人信息
      * */

+ 8 - 0
fs-service/src/main/resources/mapper/sop/QwSopLogsMapper.xml

@@ -847,6 +847,14 @@
             #{log.id}
         </foreach>
     </update>
+    <update id="updateGroupSopStatus">
+        update qw_sop_logs
+        set send_status = 5,
+        remark = '群聊发送已被禁止'
+        where
+        type = 1 and
+        send_status = 3
+    </update>
 
     <select id="selectByQwUserId" resultType="com.fs.sop.domain.QwSopLogs">
         select ql.*,