xw 2 недель назад
Родитель
Сommit
f42b057cd5

+ 19 - 0
fs-admin/src/main/java/com/fs/course/controller/FsCourseWatchLogController.java

@@ -1,6 +1,8 @@
 package com.fs.course.controller;
 
+import java.time.LocalDate;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 import java.util.Objects;
 import java.util.stream.Collectors;
@@ -254,8 +256,25 @@ public class FsCourseWatchLogController extends BaseController
      */
     @GetMapping("/getUserIdList")
     public TableDataInfo getUserIdList( FsCourseWatchLogParam fsCourseWatchLog) {
+    if (fsCourseWatchLog.getCreateTime() == null) {
+        fsCourseWatchLog.setCreateTime(new Date());
+    }
         startPage();
         List<FsCoureseWatchLogVO> list = fsCourseWatchLogService.selectUserIdList(fsCourseWatchLog);
         return getDataTable(list);
     }
+
+    /**
+     * 导出每个公司对应观看人数统计
+     *
+     * @param fsCourseWatchLog
+     * @return
+     */
+    @Log(title = "公司观看人数统计", businessType = BusinessType.EXPORT)
+    @GetMapping("/exportUserIdList")
+    public AjaxResult exportUserIdList(FsCourseWatchLogParam fsCourseWatchLog) {
+        List<FsCoureseWatchLogVO> list = fsCourseWatchLogService.selectUserIdList(fsCourseWatchLog);
+        ExcelUtil<FsCoureseWatchLogVO> util = new ExcelUtil<FsCoureseWatchLogVO>(FsCoureseWatchLogVO.class);
+        return util.exportExcel(list, "公司观看人数统计数据");
+    }
 }

+ 2 - 0
fs-admin/src/main/java/com/fs/course/controller/FsUserCourseVideoController.java

@@ -3,6 +3,7 @@ package com.fs.course.controller;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.json.JSONUtil;
 import com.fs.common.annotation.Log;
+import com.fs.common.annotation.RepeatSubmit;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.domain.AjaxResult;
 import com.fs.common.core.domain.R;
@@ -263,6 +264,7 @@ public class FsUserCourseVideoController extends BaseController
         fsUserCourseVideoService.updates(vo);
         return R.ok();
     }
+    @RepeatSubmit
     @PostMapping("/batchSaveVideo")
     public R batchSaveVideo(@RequestBody BatchVideoSvae vo){
         // 设置项目ID

+ 18 - 4
fs-ipad-task/src/main/java/com/fs/app/service/IpadSendServer.java

@@ -100,12 +100,26 @@ public class IpadSendServer {
                                 List<String> miniAppList = Arrays.asList(fsUser.getAppId().split(","));
                                 // 根据小程序ID查询小程序列表
                                 List<FsCoursePlaySourceConfig> configList = playSourceConfigService.selectByAppIds(miniAppList);
+                                // 过滤掉完全封禁(status=2)的小程序,只保留正常(status=0)和半封禁(status=1)的小程序
+                                List<FsCoursePlaySourceConfig> availableList = configList.stream()
+                                    .filter(e -> e.getStatus() == null || e.getStatus() != 2)
+                                    .collect(Collectors.toList());
                                 // 筛选出半封禁的小程序数据,得到这个数据然后优先发这个小程序
-                                Optional<FsCoursePlaySourceConfig> optional = configList.stream().filter(e -> e.getStatus() != null && e.getStatus() == 1).findFirst();
-                                Optional<FsCoursePlaySourceConfig> optional2 = configList.stream().filter(e -> e.getStatus() != null && e.getStatus() == 0).findFirst();
+                                Optional<FsCoursePlaySourceConfig> optional = availableList.stream().filter(e -> e.getStatus() != null && e.getStatus() == 1).findFirst();
+                                Optional<FsCoursePlaySourceConfig> optional2 = availableList.stream().filter(e -> e.getStatus() != null && e.getStatus() == 0).findFirst();
                                 if(miniAppList.size() == 1){
-                                    appid = miniAppList.get(0);
-                                    log.info("ID:{}, qwUserId:{},externalId:{},判断看过一个小程序:{}", vo.getId(), vo.getQwUserId(), vo.getExId(), appid);
+                                    // 用户只看过一个小程序,检查是否可用
+                                    if(!availableList.isEmpty()){
+                                        appid = availableList.get(0).getAppid();
+                                        log.info("ID:{}, qwUserId:{},externalId:{},判断看过一个小程序:{}", vo.getId(), vo.getQwUserId(), vo.getExId(), appid);
+                                    }else{
+                                        // 用户看过的小程序已完全封禁,使用备用小程序
+                                        Optional<CompanyMiniapp> first = listAll.stream().filter(e -> e.getType() == 1).findFirst();
+                                        if(first.isPresent()){
+                                            appid = first.get().getAppId();
+                                            log.info("ID:{}, qwUserId:{},externalId:{},看过的小程序已封禁,使用备用小程序:{}", vo.getId(), vo.getQwUserId(), vo.getExId(), appid);
+                                        }
+                                    }
                                 }else{
                                     // 判断是否找到半封禁
                                     if(optional.isPresent()){

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

@@ -111,13 +111,14 @@ 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,w.send_type   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 w on w.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>" +
@@ -132,6 +133,7 @@ public interface FsCourseRedPacketLogMapper
             "<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>" +
+            "<if test = ' maps.sendType !=null '> and w.send_type = #{maps.sendType} </if>" +
             "<if test=\"maps.sTime != null \">  and DATE(l.create_time) &gt;= DATE(#{maps.sTime})</if>\n" +
             "<if test=\"maps.eTime != null \">  and DATE(l.create_time) &lt;= DATE(#{maps.eTime})</if>\n" +
             "<if test=\"maps.userIds != null and maps.userIds.size() > 0\">\n" +

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

@@ -37,6 +37,11 @@ public class FsCourseRedPacketLogParam implements Serializable {
     private String qwUserId;
     private String logType;
     private Long watchLogId;
+    
+    /**
+     * 发送方式
+     */
+    private Integer sendType;
 
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date eTime;

+ 13 - 5
fs-service/src/main/java/com/fs/course/vo/FsCoureseWatchLogVO.java

@@ -1,24 +1,32 @@
 package com.fs.course.vo;
 
+import com.fs.common.annotation.Excel;
 import lombok.Data;
 
 @Data
 public class FsCoureseWatchLogVO {
     
     private Long companyId;
+    
+    @Excel(name = "公司名称")
     private String companyName;
+    
     private String appName;
+    
     private String appId;
+    
     //总人数
     private Integer appAllNum;
     
-    
-    //个微完播人数
+    @Excel(name = "个微完播人数")
     private Integer typeOneAll;
-    //企微完播人数
+    
+    @Excel(name = "企微完播人数")
     private Integer typeTwoAll;
-    //总完播人数
+    
+    @Excel(name = "总完播人数")
     private Integer typeAll;
-    //总观看人数
+    
+    @Excel(name = "总观看人数")
     private Integer allUserId;
 }

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

@@ -217,13 +217,14 @@ public class QwSopServiceImpl implements IQwSopService
 
         try {
 
-            if (qwSop.getExpiryTime()!=null||qwSop.getIsRating()!=null){
+            // 如果只是修改部分简单字段(不需要同步语音和营期),则直接更新
+            if (qwSop.getExpiryTime()!=null||qwSop.getIsRating()!=null||StringUtil.strIsNullOrEmpty(qwSop.getTempId())){
                 qwSopMapper.updateQwSop(qwSop);
                 return R.ok("修改成功");
             }
 
-            if (StringUtil.strIsNullOrEmpty(qwSop.getId())||StringUtil.strIsNullOrEmpty(qwSop.getTempId())){
-                return R.error("sop编号或模板编号不能为空");
+            if (StringUtil.strIsNullOrEmpty(qwSop.getId())){
+                return R.error("sop编号不能为空");
             }
 
             int i = qwSopMapper.updateQwSop(qwSop);