Bläddra i källkod

流失人数功能更改

lxb 1 vecka sedan
förälder
incheckning
6a32874a78

+ 11 - 3
fs-company/src/main/java/com/fs/company/controller/course/FsCourseRedPacketLogController.java

@@ -19,6 +19,7 @@ import com.fs.course.param.FsCourseRedPacketLogParam;
 import com.fs.course.param.FsCourseWatchLogStatisticsListParam;
 import com.fs.course.service.IFsCourseRedPacketLogService;
 import com.fs.course.vo.FsCourseRedPacketLogListPVO;
+import com.fs.course.vo.LostVo;
 import com.fs.framework.security.LoginUser;
 import com.fs.framework.service.TokenService;
 import com.fs.his.utils.PhoneUtil;
@@ -28,7 +29,11 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import static com.fs.his.utils.PhoneUtil.encryptPhone;
 
@@ -231,12 +236,15 @@ public class FsCourseRedPacketLogController extends BaseController
         return R.ok().put("list", optionsVOS);
     }
     @GetMapping("/courseLost")
-    public R courseLost(FsCourseWatchLogStatisticsListParam param)
+    public TableDataInfo courseLost(FsCourseWatchLogStatisticsListParam param)
     {
         LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
         Long trainingCampId = param.getCourseId();//训练营id
-        int num = fsCourseRedPacketLogService.courseLost(trainingCampId,loginUser.getCompany().getCompanyId());
-        return R.ok().put("data", num);
+        //(加个营期时间,营期名称,流失人数)
+        LostVo vo = fsCourseRedPacketLogService.courseLost(trainingCampId, loginUser.getUser().getUserId());
+        List<LostVo> lostVos=new ArrayList<>();
+        lostVos.add(vo);
+        return getDataTable(lostVos);
     }
 
     @GetMapping(value = "/videoList/{id}")

+ 50 - 8
fs-company/src/main/java/com/fs/company/controller/course/qw/FsQwCourseWatchLogController.java

@@ -12,10 +12,7 @@ import com.fs.common.utils.poi.ExcelUtil;
 import com.fs.course.domain.FsCourseWatchLog;
 import com.fs.course.param.*;
 import com.fs.course.service.IFsCourseWatchLogService;
-import com.fs.course.vo.FsCourseOverVO;
-import com.fs.course.vo.FsCourseUserStatisticsListVO;
-import com.fs.course.vo.FsCourseWatchLogListVO;
-import com.fs.course.vo.FsCourseWatchLogStatisticsListVO;
+import com.fs.course.vo.*;
 import com.fs.framework.security.LoginUser;
 import com.fs.framework.service.TokenService;
 import com.fs.qw.domain.QwExternalContact;
@@ -27,12 +24,16 @@ import com.fs.qw.vo.QwWatchLogStatisticsListVO;
 import com.fs.sop.domain.SopUserLogsInfo;
 import com.fs.sop.mapper.SopUserLogsInfoMapper;
 import com.fs.sop.mapper.SopUserLogsMapper;
+import com.fs.sop.params.GetSOPTaskDataParam;
+import com.fs.sop.service.IQwSopService;
+import com.fs.sop.vo.QwSopTask;
 import com.fs.statis.dto.StatsWatchLogPageListDTO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
+import java.time.LocalDate;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -59,6 +60,8 @@ public class FsQwCourseWatchLogController extends BaseController
     private SopUserLogsInfoMapper sopUserLogsInfoMapper;
     @Autowired
     private QwExternalContactMapper qwExternalContactMapper;
+    @Autowired
+    private IQwSopService qwSopService;
 
     @Value("${cloud_host.company_name}")
     private String signProjectName;
@@ -316,19 +319,58 @@ public class FsQwCourseWatchLogController extends BaseController
     }
     //@PreAuthorize("@ss.hasPermi('course:courseWatchLog:courseLost')")
     @PostMapping("/courseLost")
-    public R courseLost(@RequestBody StatsWatchLogPageListDTO param)
+    public TableDataInfo courseLost(@RequestBody StatsWatchLogPageListDTO param)
     {
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        Long companyId = loginUser.getUser().getUserId();
+        List<LostVo> lostVos=new ArrayList<>();
         List<String> periodList = param.getPeriodList();
-        //sop用户数据
+        if (periodList==null || periodList.isEmpty()){
+            GetSOPTaskDataParam para=new GetSOPTaskDataParam();
+            para.setStartDate(LocalDate.now().minusDays(7).toString());
+            para.setEndDate(LocalDate.now().toString());
+            para.setCompanyId(companyId);
+            List<QwSopTask> qwSopTaskList = qwSopService.getQwSopTaskList(para);
+            List<String> all=new ArrayList<>();
+            qwSopTaskList.forEach(qwSopTask -> {
+                List<QwSopTask> child=  qwSopTask.getChildren();
+                if (!child.isEmpty()){
+                    List<String> list = child.stream().map(QwSopTask::getId).collect(Collectors.toList());
+                    all.addAll(list);
+                }
+            });
+            periodList=all;
+        }
+        periodList.forEach(id->{
+            List<SopUserLogsInfo> sopUserLogsInfos = sopUserLogsInfoMapper.selectByUserLogId(id);
+            List<Long> list = sopUserLogsInfos.stream().map(SopUserLogsInfo::getExternalId).collect(Collectors.toList());
+            //最后查看是否被拉黑
+            QueryWrapper<QwExternalContact> queryWrapper=new QueryWrapper<>();
+            queryWrapper.eq("'status'",3);
+            queryWrapper.select("id");
+            if (!list.isEmpty()){
+                queryWrapper.in("id",list);
+            }
+            List<QwExternalContact> qwExternalContacts = qwExternalContactMapper.selectList(queryWrapper);
+            LostVo vo=new LostVo();
+            vo.setTotal(list.size());
+            vo.setNum(qwExternalContacts.size());
+            vo.setUserLogsId(id);
+            lostVos.add(vo);
+        });
+/*        //sop用户数据
         List<SopUserLogsInfo> sopUserLogsInfos = sopUserLogsInfoMapper.selectByUserLogIds(periodList);
         List<Long> list = sopUserLogsInfos.stream().map(SopUserLogsInfo::getExternalId).collect(Collectors.toList());
-
         //最后查看是否被拉黑
         QueryWrapper<QwExternalContact> queryWrapper=new QueryWrapper<>();
         queryWrapper.eq("'status'",3);
         queryWrapper.select("id");
         queryWrapper.in("id",list);
         List<QwExternalContact> qwExternalContacts = qwExternalContactMapper.selectList(queryWrapper);
-        return R.ok().put("data", qwExternalContacts.size());
+        vo.setTotal(list.size());
+        vo.setNum(qwExternalContacts.size());
+        lostVos.add(vo);*/
+        return getDataTable(lostVos);
+
     }
 }

+ 1 - 1
fs-company/src/main/java/com/fs/company/controller/stats/SalesWatchStatisController.java

@@ -176,7 +176,7 @@ public class SalesWatchStatisController {
     @PostMapping("/sopTaskData")
     public R getSOPTaskData(@RequestBody GetSOPTaskDataParam param){
         LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
-        Long companyId = loginUser.getCompany().getCompanyId();
+        Long companyId = loginUser.getUser().getUserId();
 
         if(StringUtils.isBlank(param.getStartDate()) && StringUtils.isBlank(param.getEndDate())) {
             param.setStartDate(LocalDate.now().minusDays(7).toString());

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

@@ -611,6 +611,8 @@ public interface FsCourseWatchLogMapper extends BaseMapper<FsCourseWatchLog> {
      * @return
      */
     Integer getUserBlackCountByCampId(@Param("trainingCampId") Long trainingCampId,@Param("companyId")Long companyId);
+    List<LostVo> getLostListByCampId(@Param("trainingCampId") Long trainingCampId,@Param("companyId")Long companyId);
+
     List<FsCourseWatchLogStatisticsListByCompanyVO> selectFsCourseWatchLogStatisticsListByCompanyVO(FsCourseWatchLogStatisticsListParam param);
 
     /**

+ 2 - 1
fs-service/src/main/java/com/fs/course/service/IFsCourseRedPacketLogService.java

@@ -7,6 +7,7 @@ import com.fs.common.core.domain.R;
 import com.fs.course.domain.FsCourseRedPacketLog;
 import com.fs.course.param.FsCourseRedPacketLogParam;
 import com.fs.course.vo.FsCourseRedPacketLogListPVO;
+import com.fs.course.vo.LostVo;
 
 /**
  * 短链课程看课记录Service接口
@@ -87,5 +88,5 @@ public interface IFsCourseRedPacketLogService
     void sendRedPacketBf();
 
     void queryRedPacketResult(String startTime, String endTime);
-    int courseLost(Long trainingCampId,Long companyId);
+    LostVo courseLost(Long trainingCampId, Long companyId);
 }

+ 17 - 3
fs-service/src/main/java/com/fs/course/service/impl/FsCourseRedPacketLogServiceImpl.java

@@ -23,6 +23,7 @@ import com.fs.course.domain.FsCourseWatchLog;
 import com.fs.course.mapper.FsCourseWatchLogMapper;
 import com.fs.course.param.FsCourseRedPacketLogParam;
 import com.fs.course.vo.FsCourseRedPacketLogListPVO;
+import com.fs.course.vo.LostVo;
 import com.fs.his.domain.FsUser;
 import com.fs.his.mapper.FsUserMapper;
 import com.fs.his.param.WxSendRedPacketParam;
@@ -468,11 +469,24 @@ public class FsCourseRedPacketLogServiceImpl implements IFsCourseRedPacketLogSer
      * @return
      */
     @Override
-    public int courseLost(Long trainingCampId,Long companyId) {
+    public LostVo courseLost(Long trainingCampId,Long companyId) {
         //查询训练营看课拉黑人数
         //companyId 5 有数据
         Integer userBlackCountByCampId = fsCourseWatchLogMapper.getUserBlackCountByCampId(trainingCampId,companyId);
-        return userBlackCountByCampId;
+        List<LostVo> lostList = fsCourseWatchLogMapper.getLostListByCampId(trainingCampId,companyId);
+        if (lostList.isEmpty()){
+            return null;
+        }
+        //总人数
+        int total = lostList.size();
+        LostVo vo = lostList.get(0);
+        LostVo resp=new LostVo();
+        resp.setTotal(total);
+        resp.setPeriodName(vo.getPeriodName());
+        resp.setPeriodStartingTime(vo.getPeriodStartingTime());
+        resp.setPeriodEndTime(vo.getPeriodEndTime());
+
+        resp.setNum(userBlackCountByCampId);
+        return resp;
     }
-
 }

+ 25 - 0
fs-service/src/main/java/com/fs/course/vo/LostVo.java

@@ -0,0 +1,25 @@
+package com.fs.course.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/***
+ * 流失vo
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class LostVo implements Serializable {
+    private Integer num;
+    private String periodName;
+    private String periodStartingTime;//营期时间开始
+    private String periodEndTime;//营期时间开始
+    private  Integer total;//总人数
+
+    private String userLogsId;//营期id
+}

+ 2 - 1
fs-service/src/main/java/com/fs/sop/mapper/SopUserLogsInfoMapper.java

@@ -156,7 +156,8 @@ public interface SopUserLogsInfoMapper {
 
     @DataSource(DataSourceType.SOP)
     public List<SopUserLogsInfo> selectByUserLogIds(@Param("userLogsIds") List<String> userLogsIds);
-
+    @DataSource(DataSourceType.SOP)
+    public List<SopUserLogsInfo> selectByUserLogId(@Param("userLogsId") String userLogsId);
     @DataSource(DataSourceType.SOP)
     void batchInsertSopUserLogsInfo(@Param("SopUserLogsInfo") List<SopUserLogsInfo> logsToInsert);
     @DataSource(DataSourceType.SOP)

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

@@ -1090,5 +1090,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </if>
 
     </select>
+    <select id="getLostListByCampId" resultType="com.fs.course.vo.LostVo">
+        select distinct cwl.user_id,ucp.period_name,ucp.period_starting_time,ucp.period_end_time
+        from fs_user_course_period ucp
+                 inner join fs_course_watch_log cwl on ucp.period_id = cwl.period_id
+        where  1=1
+        <if test="trainingCampId != null and trainingCampId !=''">
+            and ucp.training_camp_id = #{trainingCampId}
+        </if>
+       and  cwl.company_id=#{companyId}
+
+    </select>
 
 </mapper>

+ 6 - 0
fs-service/src/main/resources/mapper/sop/SopUserLogsInfoMapper.xml

@@ -358,5 +358,11 @@
         </if>
 
     </select>
+    <select id="selectByUserLogId" resultType="com.fs.sop.domain.SopUserLogsInfo">
+        SELECT * FROM sop_user_logs_info
+        <if test="userLogsId != null ">
+            where user_logs_id =#{userLogsId}
+        </if>
+    </select>
 
 </mapper>