Переглянути джерело

fix: 时间入参改为可选

Signed-off-by: sunshihao <sunshihaoemail>
sunshihao 6 днів тому
батько
коміт
7cec1ee113

+ 5 - 2
xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/controller/statistics/screen/ScreenAnalysisController.java

@@ -307,8 +307,11 @@ public class ScreenAnalysisController extends BaseController {
      */
     @GetMapping("memberTrend")
     @ApiOperation("会员新增趋势")
-    public JsonResult<List<ScreenMemberTrendVO>> memberTrend(HttpServletRequest request,@RequestParam(value = "webSite", required = false, defaultValue = "1") String webSite) {
-        return SldResponse.success(memberModel.getMemberTrend(webSite));
+    public JsonResult<List<ScreenMemberTrendVO>> memberTrend(HttpServletRequest request,
+                                                             @RequestParam(value = "webSite", required = false, defaultValue = "1") String webSite,
+                                                             @RequestParam(value = "startTime", required = true) String startTime,
+                                                             @RequestParam(value = "startTime", required = true) String endTime) {
+        return SldResponse.success(memberModel.getMemberTrend(webSite,startTime,endTime));
     }
 
 

+ 3 - 1
xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/dao/read/member/MemberReadMapper.java

@@ -13,5 +13,7 @@ public interface MemberReadMapper extends BaseReadMapper<Member, MemberExample>
 
     List<ScreenMemberDistribution> getMemberDistribution(@Param("webSite") String webSite);
 
-    List<ScreenMemberTrendVO> getMemberTrend(@Param("webSite")String webSite);
+    List<ScreenMemberTrendVO> getMemberTrend(@Param("webSite")String webSite,
+                                             @Param("startTime")String startTime,
+                                             @Param("endTime")String endTime);
 }

+ 2 - 2
xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/model/member/MemberModel.java

@@ -387,7 +387,7 @@ public class MemberModel {
      * @param webSite
      * @return
      */
-    public List<ScreenMemberTrendVO> getMemberTrend(String webSite) {
-        return memberReadMapper.getMemberTrend(webSite);
+    public List<ScreenMemberTrendVO> getMemberTrend(String webSite,String startTime,String endTime) {
+        return memberReadMapper.getMemberTrend(webSite,startTime,endTime);
     }
 }

+ 1 - 1
xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/vo/statistics/ScreenMemberTrendVO.java

@@ -12,7 +12,7 @@ import lombok.Data;
 public class ScreenMemberTrendVO {
 
     @ApiModelProperty("年月")
-    private String month;
+    private String day;
 
     @ApiModelProperty("新增会员数")
     private String newMemberNum;

+ 19 - 19
xinkeaboard-server/b2b2c-web/src/main/resources/mapper/read/member/MemberReadMapper.xml

@@ -335,24 +335,24 @@
     </select>
 
     <select id="getMemberTrend" resultType="com.slodon.b2b2c.vo.statistics.ScreenMemberTrendVO">
-        SELECT DATE_FORMAT(months.month_date, '%Y-%m') as month,
-        COALESCE(COUNT(m.member_id), 0) as newMemberNum
-        FROM (
-            SELECT DATE_SUB(CURDATE(), INTERVAL (a.a + (10 * b.a)) MONTH) as month_date
-            FROM (SELECT 0 as a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3
-            UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7
-            UNION ALL SELECT 8 UNION ALL SELECT 9) as a
-            CROSS JOIN (SELECT 0 as a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3
-            UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7
-            UNION ALL SELECT 8 UNION ALL SELECT 9) as b
-            ) months
-            LEFT JOIN member m
-        ON DATE_FORMAT(m.register_time, '%Y-%m') = DATE_FORMAT(months.month_date, '%Y-%m')
-            AND m.web_site = #{webSite}
-        WHERE months.month_date <![CDATA[ >= ]]> DATE_SUB(CURDATE()
-            , INTERVAL 6 MONTH)
-          AND months.month_date<![CDATA[ <= ]]> CURDATE()
-        GROUP BY months.month_date
-        ORDER BY months.month_date;
+        -- 生成日期序列并关联统计
+        WITH RECURSIVE dates AS (
+        SELECT DATE(#{startTime}) AS day
+        UNION ALL
+        SELECT DATE_ADD(day, INTERVAL 1 DAY)
+        FROM dates
+        WHERE DATE_ADD(day, INTERVAL 1 DAY) 	&lt;= DATE(#{endTime})
+        )
+        SELECT
+        d.day,
+        COALESCE(COUNT(m.member_id), 0) AS newMemberNum
+        FROM dates d
+        LEFT JOIN member m
+        ON DATE(m.register_time) = d.day
+        AND m.register_time BETWEEN #{startTime} AND #{endTime}
+        where m.web_site = #{webSite}
+        GROUP BY d.day
+        ORDER BY d.day;
+
     </select>
 </mapper>