Quellcode durchsuchen

理疗浏览统计

wjj vor 3 Tagen
Ursprung
Commit
d28556d941

+ 6 - 0
fs-admin/src/main/java/com/fs/his/controller/FsProjectController.java

@@ -100,4 +100,10 @@ public class FsProjectController extends BaseController
     {
         return toAjax(fsProjectService.deleteFsProjectByIds(ids));
     }
+
+    @GetMapping("/options")
+    public AjaxResult selectFsProjectListOptions(){
+        List<FsProject> list = fsProjectService.selectFsProjectListOptions();
+        return AjaxResult.success(list);
+    }
 }

+ 32 - 0
fs-admin/src/main/java/com/fs/his/controller/FsProjectRedDetailController.java

@@ -0,0 +1,32 @@
+package com.fs.his.controller;
+
+import com.fs.common.core.controller.BaseController;
+import com.fs.common.core.page.TableDataInfo;
+import com.fs.his.param.FsProjectRedDetailStatisticsParam;
+import com.fs.his.service.IFsProjectRedDetailService;
+import com.fs.his.vo.FsProjectRedDetailStatisticsVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("/his/projectRedDetail")
+public class FsProjectRedDetailController extends BaseController {
+
+    @Autowired
+    private IFsProjectRedDetailService fsProjectRedDetailService;
+
+
+    /**
+     * 理疗浏览统计
+     */
+    @GetMapping("/statistics")
+    public TableDataInfo statistics(FsProjectRedDetailStatisticsParam param) {
+        startPage();
+        List<FsProjectRedDetailStatisticsVO> statisticsVOS = fsProjectRedDetailService.selectDetailStatisticsVOList(param);
+        return getDataTable(statisticsVOS);
+    }
+}

+ 5 - 0
fs-service/src/main/java/com/fs/his/mapper/FsProjectRedDetailMapper.java

@@ -3,7 +3,9 @@ package com.fs.his.mapper;
 import java.util.List;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.fs.his.domain.FsProjectRedDetail;
+import com.fs.his.param.FsProjectRedDetailStatisticsParam;
 import com.fs.his.param.ProjectRedParam;
+import com.fs.his.vo.FsProjectRedDetailStatisticsVO;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
 
@@ -65,4 +67,7 @@ public interface FsProjectRedDetailMapper extends BaseMapper<FsProjectRedDetail>
 
     @Select("select *  FROM fs_project_red_detail WHERE user_id = #{param.userId} AND project_id = #{param.projectId} AND company_user_id = #{param.companyUserId}")
     FsProjectRedDetail selectFsProjectRedDetailDataByCompanyUserIdAndProjectId(@Param("param")ProjectRedParam param);
+
+
+    List<FsProjectRedDetailStatisticsVO> selectDetailStatisticsVOList(FsProjectRedDetailStatisticsParam param);
 }

+ 13 - 0
fs-service/src/main/java/com/fs/his/param/FsProjectRedDetailStatisticsParam.java

@@ -0,0 +1,13 @@
+package com.fs.his.param;
+
+import lombok.Data;
+
+@Data
+public class FsProjectRedDetailStatisticsParam {
+
+    private String sendDate;
+
+    private String companyUserName;
+
+    private Long projectId;
+}

+ 4 - 0
fs-service/src/main/java/com/fs/his/service/IFsProjectRedDetailService.java

@@ -4,7 +4,9 @@ import java.util.List;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.fs.common.core.domain.R;
 import com.fs.his.domain.FsProjectRedDetail;
+import com.fs.his.param.FsProjectRedDetailStatisticsParam;
 import com.fs.his.param.ProjectRedParam;
+import com.fs.his.vo.FsProjectRedDetailStatisticsVO;
 
 /**
  * 理疗浏览记录Service接口
@@ -66,4 +68,6 @@ public interface IFsProjectRedDetailService extends IService<FsProjectRedDetail>
      * @param param 浏览参数
      */
     R userRedProject(ProjectRedParam param);
+
+    List<FsProjectRedDetailStatisticsVO> selectDetailStatisticsVOList(FsProjectRedDetailStatisticsParam param);
 }

+ 8 - 0
fs-service/src/main/java/com/fs/his/service/impl/FsProjectRedDetailServiceImpl.java

@@ -1,5 +1,6 @@
 package com.fs.his.service.impl;
 
+import java.util.Collections;
 import java.util.Date;
 import java.util.List;
 
@@ -7,7 +8,9 @@ import com.fs.common.core.domain.R;
 import com.fs.common.core.redis.RedisCache;
 import com.fs.common.utils.DateUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fs.his.param.FsProjectRedDetailStatisticsParam;
 import com.fs.his.param.ProjectRedParam;
+import com.fs.his.vo.FsProjectRedDetailStatisticsVO;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -182,4 +185,9 @@ public R userRedProject(ProjectRedParam param) {
     }
     return R.error();
 }
+
+    @Override
+    public List<FsProjectRedDetailStatisticsVO> selectDetailStatisticsVOList(FsProjectRedDetailStatisticsParam param) {
+        return fsProjectRedDetailMapper.selectDetailStatisticsVOList(param);
+    }
 }

+ 54 - 0
fs-service/src/main/java/com/fs/his/vo/FsProjectRedDetailStatisticsVO.java

@@ -0,0 +1,54 @@
+package com.fs.his.vo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class FsProjectRedDetailStatisticsVO {
+
+    /**
+     * 发送日期
+     */
+    private String sendDate;
+
+    /**
+     * 销售id
+     */
+    private Long salesId;
+
+    /**
+     * 销售名称
+     */
+    private String companyUserName;
+
+    /**
+     * 理疗名称
+     */
+    private String projectName;
+
+    /**
+     * 理疗id
+     */
+    private Long physioId;
+
+    /**
+     * 总发送数
+     */
+    private Long totalSendCount;
+
+    /**
+     * 总点击数
+     */
+    private Long clickedUserCount;
+
+    /**
+     * 总浏览时长
+     */
+    private Long totalStayDuration;
+
+    /**
+     * 平均浏览时长
+     */
+    private BigDecimal avgStayDuration;
+}

+ 23 - 0
fs-service/src/main/resources/mapper/his/FsProjectRedDetailMapper.xml

@@ -89,4 +89,27 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             #{id}
         </foreach>
     </delete>
+
+    <select id="selectDetailStatisticsVOList" parameterType="com.fs.his.param.FsProjectRedDetailStatisticsParam" resultType="com.fs.his.vo.FsProjectRedDetailStatisticsVO">
+        SELECT
+        DATE(d.send_time) AS send_date,
+        d.company_user_id AS sales_id,
+        u.nick_name as company_user_name,
+        CONCAT_WS('-',p.project_name,p.day_name) as project_name,
+        d.project_id AS physio_id,
+        COUNT(*) AS total_send_count,
+        COUNT(DISTINCT CASE WHEN d.status = 1 THEN d.user_id END) AS clicked_user_count,
+        SUM(CASE WHEN d.status = 1 THEN d.read_duration ELSE 0 END) AS total_stay_duration,
+        ROUND(AVG(CASE WHEN d.status = 1 THEN d.read_duration END), 2) AS avg_stay_duration
+        FROM fs_project_red_detail d
+        LEFT JOIN company_user u ON d.company_user_id = u.user_id
+        LEFT JOIN fs_project p ON d.project_id = p.id
+        <where>
+            <if test="sendDate != null and sendDate !=''"> AND  DATE(d.send_time) = #{sendDate} </if>
+            <if test="companyUserName != null"> AND u.nick_name like concat('%', #{companyUserName}, '%') </if>
+            <if test="projectId != null "> AND d.project_id = #{projectId}</if>
+        </where>
+        GROUP BY DATE(send_time), company_user_id, project_id
+        ORDER BY send_date, sales_id, physio_id DESC
+    </select>
 </mapper>