Browse Source

总后台新增CID订单统计、进粉数、购买人数

cgp 4 ngày trước cách đây
mục cha
commit
cac2336832

+ 6 - 2
fs-admin/src/main/java/com/fs/company/controller/CompanyStatisticsController.java

@@ -28,6 +28,7 @@ import com.fs.his.service.IFsStoreOrderService;
 import com.fs.his.service.IFsStorePaymentService;
 import com.fs.his.vo.FsStoreOrderStatsRowVo;
 import com.fs.hisStore.service.IFsStoreOrderScrmService;
+import com.github.pagehelper.PageHelper;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
@@ -679,8 +680,11 @@ public class CompanyStatisticsController extends BaseController
     @PostMapping("/salesStat")
     @PreAuthorize("@ss.hasPermi('company:statistics:salesStat')")
     public TableDataInfo salesStat(@RequestBody SalesStatCIDParam param) {
-        startPage();
-        List<SalesStatCIDVO> voList = statisticsCIDService.getSalesStatistics(param);
+        if (param.getPageNum() != null && param.getPageSize() != null) {
+            PageHelper.startPage(param.getPageNum(), param.getPageSize());
+        }
+
+        List<SalesStatCIDVO> voList = statisticsCIDService.getSalesStatisticsCID(param);
         return getDataTable(voList);
     }
 }

+ 1 - 1
fs-service/src/main/java/com/fs/company/mapper/CompanyStatisticsCIDMapper.java

@@ -7,5 +7,5 @@ import org.apache.ibatis.annotations.Param;
 import java.util.List;
 
 public interface CompanyStatisticsCIDMapper {
-    List<SalesStatCIDVO> getSalesStatistics(@Param("param") SalesStatCIDParam param);
+    List<SalesStatCIDVO> getSalesStatisticsCID(@Param("param") SalesStatCIDParam param);
 }

+ 4 - 2
fs-service/src/main/java/com/fs/company/param/SalesStatCIDParam.java

@@ -6,11 +6,13 @@ import lombok.Data;
 public class SalesStatCIDParam {
     private Long deptId;
     private Long userId;
+    private Long companyId;
+    private String companyUserNickName;
     private String startAddTime;    // 进粉开始时间
     private String endAddTime;      // 进粉结束时间
     private String startOrderTime;  // 下单开始时间
     private String endOrderTime;    // 下单结束时间
 
-    private Integer pageNum;
-    private Integer pageSize;
+    private Integer pageNum=1;
+    private Integer pageSize=10;
 }

+ 1 - 1
fs-service/src/main/java/com/fs/company/service/ICompanyStatisticsCIDService.java

@@ -6,5 +6,5 @@ import com.fs.company.param.SalesStatCIDParam;
 import java.util.List;
 
 public interface ICompanyStatisticsCIDService {
-    List<SalesStatCIDVO> getSalesStatistics(SalesStatCIDParam param);
+    List<SalesStatCIDVO> getSalesStatisticsCID(SalesStatCIDParam param);
 }

+ 3 - 2
fs-service/src/main/java/com/fs/company/service/impl/CompanyStatisticsCIDCIDServiceImpl.java

@@ -16,7 +16,8 @@ public class CompanyStatisticsCIDCIDServiceImpl implements ICompanyStatisticsCID
     private CompanyStatisticsCIDMapper companyStatisticsMapper;
 
     @Override
-    public List<SalesStatCIDVO> getSalesStatistics(SalesStatCIDParam param) {
-        return companyStatisticsMapper.getSalesStatistics(param);
+    public List<SalesStatCIDVO> getSalesStatisticsCID(SalesStatCIDParam param) {
+        param.setCompanyId(2L);//只查询益寿缘中医院的CID订单
+        return companyStatisticsMapper.getSalesStatisticsCID(param);
     }
 }

+ 3 - 0
fs-service/src/main/java/com/fs/company/vo/SalesStatCIDVO.java

@@ -5,6 +5,9 @@ import lombok.Data;
 import java.math.BigDecimal;
 @Data
 public class SalesStatCIDVO {
+    private Long userId;
+    private String nickName;
+    private String deptName;
     private Integer fansCount;       // 进粉数
     private BigDecimal totalAmount;  // 订单总金额
     private Integer orderCount;      // 购买次数

+ 67 - 23
fs-service/src/main/resources/mapper/company/CompanyStatisticsCIDMapper.xml

@@ -10,30 +10,74 @@
         <result column="buyerCount" property="buyerCount"/>
     </resultMap>
 
-    <select id="getSalesStatistics" parameterType="com.fs.company.param.SalesStatCIDParam" resultMap="SalesStatMap">
+    <select id="getSalesStatisticsCID" resultMap="SalesStatMap">
         SELECT
-            COUNT(DISTINCT CASE
-                               WHEN ec.create_time BETWEEN #{param.startAddTime} AND #{param.endAddTime}
-                                   THEN ec.id
-                END) AS fansCount,
-            IFNULL(SUM(CASE
-                           WHEN log.order_time BETWEEN #{param.startOrderTime} AND #{param.endOrderTime}
-                               THEN log.amount
-                END), 0) AS totalAmount,
-            COUNT(DISTINCT CASE
-                               WHEN log.order_time BETWEEN #{param.startOrderTime} AND #{param.endOrderTime}
-                                   THEN log.package_order_code
-                END) AS orderCount,
-            COUNT(DISTINCT CASE
-                               WHEN log.order_time BETWEEN #{param.startOrderTime} AND #{param.endOrderTime}
-                                   THEN log.user_id
-                END) AS buyerCount
+        cu.user_id AS userId,
+        cu.nick_name AS nickName,
+        d.dept_name AS deptName,
+        COALESCE(fc.fans_count, 0) AS fansCount,
+        COALESCE(oc.total_amount, 0) AS totalAmount,
+        COALESCE(oc.order_count, 0) AS orderCount,
+        COALESCE(oc.buyer_count, 0) AS buyerCount
         FROM company_user cu
-                 INNER JOIN qw_user qu ON qu.company_user_id = cu.user_id
-                 INNER JOIN qw_external_contact ec ON ec.qw_user_id = qu.id
-                 LEFT JOIN fs_user fu ON ec.fs_user_id = fu.user_id
-                 LEFT JOIN fs_user_information_collection_personal_log log ON log.user_id = fu.user_id
-        WHERE cu.user_id = #{param.userId}
-          AND cu.del_flag = '0'
+        LEFT JOIN company_dept d ON cu.dept_id = d.dept_id AND d.del_flag = '0'
+
+        -- 进粉统计(始终关联,内部按条件动态过滤)
+        LEFT JOIN (
+        SELECT
+        qu.company_user_id,
+        COUNT(DISTINCT ec.id) AS fans_count
+        FROM qw_user qu
+        INNER JOIN qw_external_contact ec ON ec.qw_user_id = qu.id
+        WHERE 1 = 1
+        <if test="param.startAddTime != null and param.endAddTime != null">
+            AND ec.create_time BETWEEN #{param.startAddTime} AND #{param.endAddTime}
+        </if>
+        GROUP BY qu.company_user_id
+        ) fc ON fc.company_user_id = cu.user_id
+
+        -- 订单统计(始终关联,内部按条件动态过滤)
+        LEFT JOIN (
+        SELECT
+        log.company_user_id,
+        SUM(o.pay_price) AS total_amount,
+        COUNT(DISTINCT o.order_code) AS order_count,
+        COUNT(DISTINCT o.user_id) AS buyer_count
+        FROM fs_store_order o
+        INNER JOIN (
+        SELECT DISTINCT
+        package_order_code,
+        company_user_id,
+        user_id
+        FROM fs_user_information_collection_personal_log
+        WHERE 1 = 1
+        <if test="param.startOrderTime != null and param.endOrderTime != null">
+            AND order_time BETWEEN #{param.startOrderTime} AND #{param.endOrderTime}
+        </if>
+        ) log ON o.order_code = log.package_order_code
+        WHERE o.is_pay = 1
+        AND o.refund_status = 0
+        GROUP BY log.company_user_id
+        ) oc ON oc.company_user_id = cu.user_id
+
+        WHERE cu.del_flag = '0'
+        <if test="param.companyId != null">
+            AND cu.company_id = #{param.companyId}
+        </if>
+        <if test="param.deptId != null">
+            AND (cu.dept_id = #{param.deptId}
+            OR cu.dept_id IN (
+            SELECT t.dept_id FROM company_dept t
+            WHERE t.del_flag = '0' AND FIND_IN_SET(#{param.deptId}, t.ancestors)
+            ))
+        </if>
+        <if test="param.userId != null">
+            AND cu.user_id = #{param.userId}
+        </if>
+        <if test="param.companyUserNickName != null and param.companyUserNickName.trim() != ''">
+            AND cu.nick_name LIKE CONCAT('%', #{param.companyUserNickName}, '%')
+        </if>
+        GROUP BY cu.user_id, cu.nick_name, d.dept_name
+        ORDER BY cu.user_id
     </select>
 </mapper>