Преглед на файлове

总后台增加医生任务统计总览接口+已处理任务+待处理任务

cgp преди 1 седмица
родител
ревизия
f85a40d408

+ 40 - 4
fs-admin/src/main/java/com/fs/company/controller/SopStatsOverviewController.java

@@ -7,6 +7,7 @@ import com.fs.common.core.page.TableDataInfo;
 import com.fs.his.domain.FsUser;
 import com.fs.his.domain.FsUserAddress;
 import com.fs.his.dto.SopDoctorTaskDto;
+import com.fs.his.param.DoctorTaskStatsParam;
 import com.fs.his.param.FsStoreOrderParam;
 import com.fs.his.param.FsUserCouponParam;
 import com.fs.his.service.*;
@@ -15,16 +16,19 @@ import com.fs.his.vo.FsStoreOrderListVO;
 import com.fs.his.vo.FsUserCouponListVO;
 import com.fs.his.vo.SopDoctorTaskVo;
 import com.fs.qw.dto.SopCompanyUserTaskDto;
+import com.fs.qw.param.FsDoctorMemberSalesQueryParam;
+import com.fs.qw.service.IFsDoctorMemberSalesService;
 import com.fs.qw.service.IFsSopCompanyUserTaskService;
+import com.fs.qw.vo.DoctorTaskStatsVO;
+import com.fs.qw.vo.FsDoctorMemberSalesVO;
 import com.fs.qw.vo.SopCompanyUserTaskVo;
+import com.github.pagehelper.PageHelper;
 import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 
@@ -60,6 +64,8 @@ public class SopStatsOverviewController extends BaseController {
     @Autowired
     private IFsStoreOrderService fsStoreOrderService;
 
+    @Autowired
+    private IFsDoctorMemberSalesService doctorMemberSalesService;
 
     /**
      * 查询医生处理sop任务列表
@@ -211,4 +217,34 @@ public class SopStatsOverviewController extends BaseController {
 
     }
 
+    //统计所有医生的跟进会员处理任务数据列表
+    @PreAuthorize("@ss.hasPermi('sop:statistics:doctorFollowUpStats')")
+    @PostMapping("/doctor/followUp/stats")
+    public TableDataInfo doctorFollowUpStats(@RequestBody DoctorTaskStatsParam param){
+        PageHelper.startPage(param.getPageNum(),param.getPageSize());
+        List<DoctorTaskStatsVO> list =doctorMemberSalesService.selectDoctorTaskStats(param);
+        return getDataTable(list);
+    }
+
+    //查询医生待处理跟进会员列表
+    @GetMapping("/doctor/followUp/selectPendingTaskList")
+    public TableDataInfo doctorFollowUpStats(FsDoctorMemberSalesQueryParam param){
+        startPage();
+        List<FsDoctorMemberSalesVO> list =doctorMemberSalesService.selectFsDoctorMemberSalesVOList(param);
+        return getDataTable(list);
+    }
+
+    /**
+     * 查询医生已处理跟进会员列表
+     * @param queryDto 医生处理任务
+     * @return 医生处理sop任务集合
+     * */
+    @GetMapping("/doctor/followUp/selectCompletedTasksList")
+    public TableDataInfo selectFsSopDoctorTaskVoListHandleRecords(SopDoctorTaskDto queryDto)
+    {
+        startPage();
+        List<SopDoctorTaskVo> list = doctorMemberSalesService.selectCompletedTasksList(queryDto);
+        return getDataTable(list);
+
+    }
 }

+ 16 - 0
fs-service/src/main/java/com/fs/his/param/DoctorTaskStatsParam.java

@@ -0,0 +1,16 @@
+package com.fs.his.param;
+
+import lombok.Data;
+
+@Data
+public class DoctorTaskStatsParam {
+    //医生名称
+    private String doctorName;
+    //排序
+    private String sort;//asc.升序 desc.降序
+    //排序字段
+    private String sortField;
+    //分页参数
+    private Integer pageNum;
+    private Integer pageSize;
+}

+ 9 - 0
fs-service/src/main/java/com/fs/qw/mapper/FsDoctorMemberSalesMapper.java

@@ -2,8 +2,10 @@ package com.fs.qw.mapper;
 
 import java.util.List;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fs.his.param.DoctorTaskStatsParam;
 import com.fs.qw.domain.FsDoctorMemberSales;
 import com.fs.qw.param.FsDoctorMemberSalesQueryParam;
+import com.fs.qw.vo.DoctorTaskStatsVO;
 import com.fs.qw.vo.FsDoctorMemberSalesVO;
 
 /**
@@ -62,4 +64,11 @@ public interface FsDoctorMemberSalesMapper extends BaseMapper<FsDoctorMemberSale
     int deleteFsDoctorMemberSalesByIds(Long[] ids);
 
     List<FsDoctorMemberSalesVO> selectFsDoctorMemberSalesVOList(FsDoctorMemberSalesQueryParam param);
+
+    /**
+     * 统计医生的待处理和已处理任务数
+     * @param param 查询参数
+     * @return 医生任务统计列表
+     */
+    List<DoctorTaskStatsVO> selectDoctorTaskStats(DoctorTaskStatsParam param);
 }

+ 18 - 0
fs-service/src/main/java/com/fs/qw/service/IFsDoctorMemberSalesService.java

@@ -3,9 +3,13 @@ package com.fs.qw.service;
 import java.util.List;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.fs.common.core.domain.R;
+import com.fs.his.dto.SopDoctorTaskDto;
+import com.fs.his.param.DoctorTaskStatsParam;
+import com.fs.his.vo.SopDoctorTaskVo;
 import com.fs.qw.domain.FsDoctorMemberSales;
 import com.fs.qw.param.FsDoctorMemberSalesQueryParam;
 import com.fs.qw.param.MemberSalesParam;
+import com.fs.qw.vo.DoctorTaskStatsVO;
 import com.fs.qw.vo.FsDoctorMemberSalesVO;
 
 /**
@@ -74,4 +78,18 @@ public interface IFsDoctorMemberSalesService extends IService<FsDoctorMemberSale
      * @return 结果
      */
     int deleteFsDoctorMemberSalesById(Long id);
+
+    /**
+     * 统计医生的待处理和已处理任务数
+     * @param param 查询参数
+     * @return 医生任务统计列表
+     */
+    List<DoctorTaskStatsVO> selectDoctorTaskStats(DoctorTaskStatsParam param);
+
+    /**
+     * 统计医生已处理任务数据
+     * @param queryDto 查询参数
+     * @return 医生任务统计列表
+     */
+    List<SopDoctorTaskVo> selectCompletedTasksList(SopDoctorTaskDto queryDto);
 }

+ 27 - 7
fs-service/src/main/java/com/fs/qw/service/impl/FsDoctorMemberSalesServiceImpl.java

@@ -1,5 +1,6 @@
 package com.fs.qw.service.impl;
 
+import java.util.Collections;
 import java.util.List;
 
 import com.fs.common.core.domain.R;
@@ -7,13 +8,17 @@ import com.fs.common.utils.DateUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fs.common.utils.StringUtils;
 import com.fs.his.domain.FsSopDoctorTask;
+import com.fs.his.dto.SopDoctorTaskDto;
 import com.fs.his.mapper.FsSopDoctorTaskMapper;
+import com.fs.his.param.DoctorTaskStatsParam;
 import com.fs.his.utils.PhoneUtil;
+import com.fs.his.vo.SopDoctorTaskVo;
 import com.fs.hisStore.service.IFsUserInformationCollectionService;
 import com.fs.qw.domain.QwExternalContact;
 import com.fs.qw.mapper.QwExternalContactMapper;
 import com.fs.qw.param.FsDoctorMemberSalesQueryParam;
 import com.fs.qw.param.MemberSalesParam;
+import com.fs.qw.vo.DoctorTaskStatsVO;
 import com.fs.qw.vo.FsDoctorMemberSalesVO;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -45,6 +50,9 @@ public class FsDoctorMemberSalesServiceImpl extends ServiceImpl<FsDoctorMemberSa
     @Autowired
     private IFsUserInformationCollectionService userInformationCollectionService;
 
+    @Autowired
+    private FsSopDoctorTaskMapper fsSopDoctorTaskMapper;
+
     @Transactional
     @Override
     public R push(MemberSalesParam param) {
@@ -89,10 +97,6 @@ public class FsDoctorMemberSalesServiceImpl extends ServiceImpl<FsDoctorMemberSa
     public List<FsDoctorMemberSalesVO> selectFsDoctorMemberSalesVOList(FsDoctorMemberSalesQueryParam param) {
         //1.跟进会员信息
         List<FsDoctorMemberSalesVO> voList = memberSalesMapper.selectFsDoctorMemberSalesVOList(param);
-        //2.获取填写的会员的采集信息
-        //List<Long> fsUserIds=voList.stream().map(FsDoctorMemberSalesVO::getFsUserId).filter(Objects::nonNull).collect(Collectors.toList());
-        //List<FsUserInformationCollection> userInformationCollections =userInformationCollectionService.selectFsUserInformationCollectionListByUserIds(fsUserIds);
-        //Map<Long, FsUserInformationCollection> userInformationCollectionMap=userInformationCollections.stream().collect(Collectors.toMap(FsUserInformationCollection::getUserId,v->v));
         if (!CollectionUtils.isEmpty(voList)) {
             for (FsDoctorMemberSalesVO vo : voList) {
                 if (!StringUtils.isEmpty(vo.getPhone())) {
@@ -106,9 +110,6 @@ public class FsDoctorMemberSalesServiceImpl extends ServiceImpl<FsDoctorMemberSa
                 //2.获取跟进会员待处理的总数
                 Long unprocessedDoctorTaskCount = sopDoctorTaskMapper.selectUnprocessedDoctorTaskCount(vo.getId());
                 vo.setUnprocessed(unprocessedDoctorTaskCount);
-                //3.获取会员真实姓名
-                //FsUserInformationCollection collection = userInformationCollectionMap.get(vo.getFsUserId());
-                //vo.setRealName(collection != null ? collection.getUserName() : null);
             }
         }
         return voList;
@@ -187,4 +188,23 @@ public class FsDoctorMemberSalesServiceImpl extends ServiceImpl<FsDoctorMemberSa
     {
         return baseMapper.deleteFsDoctorMemberSalesById(id);
     }
+
+    @Override
+    public List<DoctorTaskStatsVO> selectDoctorTaskStats(DoctorTaskStatsParam param) {
+        List<DoctorTaskStatsVO> doctorTaskStatsVOS = memberSalesMapper.selectDoctorTaskStats(param);
+        if (CollectionUtils.isEmpty(doctorTaskStatsVOS)){
+            return Collections.emptyList();
+        }
+        return doctorTaskStatsVOS;
+    }
+
+    @Override
+    public List<SopDoctorTaskVo> selectCompletedTasksList(SopDoctorTaskDto queryDto) {
+        queryDto.setStatus(1);//1:已处理
+        List<SopDoctorTaskVo> sopDoctorTaskVos = fsSopDoctorTaskMapper.selectFsSopDoctorTaskVoList(queryDto);
+        if (!CollectionUtils.isEmpty(sopDoctorTaskVos)){
+            return sopDoctorTaskVos;
+        }
+        return sopDoctorTaskVos;
+    }
 }

+ 12 - 0
fs-service/src/main/java/com/fs/qw/vo/DoctorTaskStatsVO.java

@@ -0,0 +1,12 @@
+package com.fs.qw.vo;
+
+import lombok.Data;
+
+@Data
+public class DoctorTaskStatsVO {
+    private Long doctorId;
+    private String doctorName;
+    private Long pendingTaskNum; // 待处理任务数
+    private Long completedTaskNum; // 已完成任务数
+    private Long totalTaskNum; // 总任务数
+}

+ 44 - 0
fs-service/src/main/resources/mapper/qw/FsDoctorMemberSalesMapper.xml

@@ -99,4 +99,48 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <if test="companyUserName != null and companyUserName != '' "> and cu.nick_name like concat('%', #{companyUserName}, '%')</if>
         order by dms.create_time desc
     </select>
+    <select id="selectDoctorTaskStats" parameterType="com.fs.his.param.DoctorTaskStatsParam" resultType="com.fs.qw.vo.DoctorTaskStatsVO">
+        SELECT
+        fd.doctor_id AS doctorId,
+        fd.doctor_name AS doctorName,
+        -- 使用子查询分别统计任务数
+        COALESCE(task_stats.pendingTaskNum, 0) AS pendingTaskNum,
+        COALESCE(task_stats.completedTaskNum, 0) AS completedTaskNum,
+        COALESCE(task_stats.totalTaskNum, 0) AS totalTaskNum
+        FROM fs_doctor fd
+        LEFT JOIN (
+        SELECT
+        doctor_id,
+        COUNT(CASE WHEN status = 0 THEN 1 END) AS pendingTaskNum,
+        COUNT(CASE WHEN status = 1 THEN 1 END) AS completedTaskNum,
+        COUNT(*) AS totalTaskNum
+        FROM fs_sop_doctor_task
+        GROUP BY doctor_id
+        ) task_stats ON fd.doctor_id = task_stats.doctor_id
+        WHERE 1=1
+        <if test="doctorName != null and doctorName != '' ">
+            AND fd.doctor_name LIKE CONCAT('%', #{doctorName}, '%')
+        </if>
+        ORDER BY
+        <choose>
+            <when test="sortField != null and sortField != ''">
+                <choose>
+                    <!-- 根据 sortField 的值选择排序字段 -->
+                    <when test="sortField == 'doctorName'">fd.doctor_name</when>
+                    <when test="sortField == 'pendingTaskNum'">pendingTaskNum</when>
+                    <when test="sortField == 'completedTaskNum'">completedTaskNum</when>
+                    <when test="sortField == 'doctorId'">fd.doctor_id</when>
+                    <!-- 默认按 doctor_id 排序 -->
+                    <otherwise>fd.doctor_id</otherwise>
+                </choose>
+                <choose>
+                    <when test="sort != null and sort == 'desc'">DESC</when>
+                    <otherwise>ASC</otherwise>
+                </choose>
+            </when>
+            <otherwise>
+                totalTaskNum DESC
+            </otherwise>
+        </choose>
+    </select>
 </mapper>