Browse Source

Merge branch 'lcy' of http://47.107.53.207:3000/traineeCoder001/Bailian-Al

JensionDzero 1 year ago
parent
commit
dd9aa64af3
24 changed files with 716 additions and 42 deletions
  1. 33 0
      benyun-core/src/main/java/com/ruoyi/benyun/entity/StoreWdOpclose.java
  2. 11 0
      benyun-core/src/main/java/com/ruoyi/benyun/entity/vo/OpcloseTimeVo.java
  3. 17 0
      benyun-core/src/main/java/com/ruoyi/benyun/mapper/StoreWdOpcloseDao.java
  4. 116 0
      benyun-core/src/main/resources/mapper/benyun/StoreWdOpcloseMapper.xml
  5. 28 2
      ruoyi-demo/src/main/java/com/ruoyi/demo/controller/BrandController.java
  6. 19 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/controller/WdInfoController.java
  7. 42 16
      ruoyi-demo/src/main/java/com/ruoyi/demo/controller/WorkTableController.java
  8. 1 1
      ruoyi-demo/src/main/java/com/ruoyi/demo/entity/AttentionPoolStatistics.java
  9. 33 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/entity/StoreWdOpclose.java
  10. 11 4
      ruoyi-demo/src/main/java/com/ruoyi/demo/entity/bo/AttentionPoolStatisticsBo.java
  11. 11 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/entity/bo/WorkTableBo.java
  12. 1 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/entity/vo/ListQueryBody.java
  13. 11 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/entity/vo/OpcloseTimeVo.java
  14. 1 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/AttentionPoolDao.java
  15. 4 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/AttentionPoolStatisticsDao.java
  16. 17 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/StoreWdOpcloseDao.java
  17. 4 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/service/BrandService.java
  18. 3 2
      ruoyi-demo/src/main/java/com/ruoyi/demo/service/DatabackService.java
  19. 3 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/service/WdInfoService.java
  20. 59 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/service/impl/BrandServiceImpl.java
  21. 66 17
      ruoyi-demo/src/main/java/com/ruoyi/demo/service/impl/DatabackServiceImpl.java
  22. 60 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/service/impl/WdInfoServiceImpl.java
  23. 49 0
      ruoyi-demo/src/main/resources/mapper/demo/AttentionPoolStatisticsMapper.xml
  24. 116 0
      ruoyi-demo/src/main/resources/mapper/demo/StoreWdOpcloseMapper.xml

+ 33 - 0
benyun-core/src/main/java/com/ruoyi/benyun/entity/StoreWdOpclose.java

@@ -0,0 +1,33 @@
+package com.ruoyi.benyun.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+@Data
+@TableName("bl_store_wd_opclose")
+public class StoreWdOpclose {
+    @TableField("wd_id")
+    private String wdId;
+
+    @TableField("addr_code")
+    private String addrCode;
+
+    @TableField("type_code_by")
+    private String typeCodeBy;
+
+    @TableField("brand_id")
+    private String brandId;
+
+    @TableField("brand_name")
+    private String brandName;
+
+    @TableField("business_time")
+    private String businessTime;
+
+    @TableField("start_time")
+    private String startTime;
+
+    @TableField("end_time")
+    private String endTime;
+}

+ 11 - 0
benyun-core/src/main/java/com/ruoyi/benyun/entity/vo/OpcloseTimeVo.java

@@ -0,0 +1,11 @@
+package com.ruoyi.benyun.entity.vo;
+
+import lombok.Data;
+
+@Data
+public class OpcloseTimeVo {
+    private String brandId;
+    private String brandName;
+    private String time;
+    private Integer count;
+}

+ 17 - 0
benyun-core/src/main/java/com/ruoyi/benyun/mapper/StoreWdOpcloseDao.java

@@ -0,0 +1,17 @@
+package com.ruoyi.benyun.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.benyun.entity.StoreWdOpclose;
+import com.ruoyi.benyun.entity.vo.OpcloseTimeVo;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+@Mapper
+public interface StoreWdOpcloseDao extends BaseMapper<StoreWdOpclose> {
+    List<OpcloseTimeVo> selectWdOpenTimes(@Param("addrCodes") List<String> addrCodes, @Param("typeCodeBys") List<String> typeCodeBys);
+    List<OpcloseTimeVo> selectWdCloseTimes(@Param("addrCodes") List<String> addrCodes, @Param("typeCodeBys") List<String> typeCodeBys);
+    List<OpcloseTimeVo> selectBrandOpenTimes(@Param("brandIds") List<String> brandIds, @Param("addrCodes") List<String> addrCodes, @Param("typeCodeBys") List<String> typeCodeBys);
+    List<OpcloseTimeVo> selectBrandCloseTimes(@Param("brandIds") List<String> brandIds, @Param("addrCodes") List<String> addrCodes, @Param("typeCodeBys") List<String> typeCodeBys);
+}

+ 116 - 0
benyun-core/src/main/resources/mapper/benyun/StoreWdOpcloseMapper.xml

@@ -0,0 +1,116 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.benyun.mapper.StoreWdOpcloseDao">
+    <select id="selectWdOpenTimes" resultType="com.ruoyi.benyun.entity.vo.OpcloseTimeVo">
+        SELECT
+            start_time time,
+	        COUNT(*) count
+        FROM
+            `bl_store_wd_opclose`
+        <trim prefix="where" prefixOverrides="and">
+            <if test="addrCodes != null">
+                <foreach collection="addrCodes" item="code" open="and addr_code in (" separator="," close=")">
+                    #{code,jdbcType=VARCHAR}
+                </foreach>
+            </if>
+            <if test="typeCodeBys != null">
+                <foreach collection="typeCodeBys" item="code" open="and type_code_by in (" separator="," close=")">
+                    #{code,jdbcType=VARCHAR}
+                </foreach>
+            </if>
+        </trim>
+        GROUP BY
+            start_time
+        ORDER BY
+            count DESC;
+    </select>
+    <select id="selectWdCloseTimes" resultType="com.ruoyi.benyun.entity.vo.OpcloseTimeVo">
+        SELECT
+            end_time time,
+            COUNT(*) count
+        FROM
+            `bl_store_wd_opclose`
+        <trim prefix="where" prefixOverrides="and">
+            <if test="addrCodes != null">
+                <foreach collection="addrCodes" item="code" open="and addr_code in (" separator="," close=")">
+                    #{code,jdbcType=VARCHAR}
+                </foreach>
+            </if>
+            <if test="typeCodeBys != null">
+                <foreach collection="typeCodeBys" item="code" open="and type_code_by in (" separator="," close=")">
+                    #{code,jdbcType=VARCHAR}
+                </foreach>
+            </if>
+        </trim>
+        GROUP BY
+            end_time
+        ORDER BY
+            count DESC;
+    </select>
+    <select id="selectBrandOpenTimes" resultType="com.ruoyi.benyun.entity.vo.OpcloseTimeVo">
+        SELECT
+            brand_id,
+            brand_name,
+            start_time time,
+            COUNT(*) count
+        FROM
+            `bl_store_wd_opclose`
+        <trim prefix="where" prefixOverrides="and">
+            <if test="brandIds != null">
+                <foreach collection="brandIds" item="id" open="and brand_id in (" separator="," close=")">
+                    #{id,jdbcType=VARCHAR}
+                </foreach>
+            </if>
+            <if test="addrCodes != null">
+                <foreach collection="addrCodes" item="code" open="and addr_code in (" separator="," close=")">
+                    #{code,jdbcType=VARCHAR}
+                </foreach>
+            </if>
+            <if test="typeCodeBys != null">
+                <foreach collection="typeCodeBys" item="code" open="and type_code_by in (" separator="," close=")">
+                    #{code,jdbcType=VARCHAR}
+                </foreach>
+            </if>
+        </trim>
+        GROUP BY
+            brand_id,
+            brand_name,
+            start_time
+        ORDER BY
+            count DESC;
+    </select>
+    <select id="selectBrandCloseTimes" resultType="com.ruoyi.benyun.entity.vo.OpcloseTimeVo">
+        SELECT
+            brand_id,
+            brand_name,
+            end_time time,
+            COUNT(*) count
+        FROM
+            `bl_store_wd_opclose`
+        <trim prefix="where" prefixOverrides="and">
+            <if test="brandIds != null">
+                <foreach collection="brandIds" item="id" open="and brand_id in (" separator="," close=")">
+                    #{id,jdbcType=VARCHAR}
+                </foreach>
+            </if>
+            <if test="addrCodes != null">
+                <foreach collection="addrCodes" item="code" open="and addr_code in (" separator="," close=")">
+                    #{code,jdbcType=VARCHAR}
+                </foreach>
+            </if>
+            <if test="typeCodeBys != null">
+                <foreach collection="typeCodeBys" item="code" open="and type_code_by in (" separator="," close=")">
+                    #{code,jdbcType=VARCHAR}
+                </foreach>
+            </if>
+        </trim>
+        GROUP BY
+            brand_id,
+            brand_name,
+            end_time
+        ORDER BY
+            count DESC;
+    </select>
+</mapper>

+ 28 - 2
ruoyi-demo/src/main/java/com/ruoyi/demo/controller/BrandController.java

@@ -1,6 +1,7 @@
 package com.ruoyi.demo.controller;
 
 
+import cn.dev33.satoken.stp.StpUtil;
 import com.ruoyi.common.core.controller.BaseController;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.demo.constant.RedisContant;
@@ -10,6 +11,7 @@ import com.ruoyi.demo.entity.bo.BrandSearch;
 import com.ruoyi.demo.entity.vo.BrandEvolveVo;
 import com.ruoyi.demo.entity.vo.BrandOpcloseVo;
 import com.ruoyi.demo.entity.vo.ListQueryBody;
+import com.ruoyi.demo.entity.vo.OpcloseTimeVo;
 import com.ruoyi.demo.service.BrandService;
 import com.ruoyi.demo.utils.HashUtil;
 import lombok.RequiredArgsConstructor;
@@ -42,14 +44,18 @@ public class BrandController extends BaseController {
 //    获取品牌信息列表
     @PostMapping("/list")
     public R list(ListQueryBody body){
-        String userId = "1";
+        String loginId = String.valueOf(StpUtil.getLoginId());
+        Long userid = Long.valueOf(loginId.split(":")[1]);
+        String userId = userid.toString();
         return R.ok(brandService.searchListByMulti(body,userId));
     }
 
 //    获取品牌详细信息
     @GetMapping("/info")
     public R info(String brandId){
-        String userId = "1";
+        String loginId = String.valueOf(StpUtil.getLoginId());
+        Long userid = Long.valueOf(loginId.split(":")[1]);
+        String userId = userid.toString();
         return R.ok(brandService.searchByBrandId(brandId,userId));
     }
 
@@ -157,4 +163,24 @@ public class BrandController extends BaseController {
         List<BrandOpcloseVo> vos = brandService.searchCloseByMulti(typeCodes, startTime, endTime);
         return R.ok(vos);
     }
+
+    //    品牌各地区网点开店时间分布情况
+    @PostMapping("/opentime")
+    public R openTime (@RequestBody ListQueryBody body) {
+        List<String> brandIds = body.getBrandId();
+        List<String> addrCodes = body.getAddrCode();
+        List<String> typeCodeBys = body.getTypeCodeBy();
+        List<OpcloseTimeVo> vos = brandService.searchOpenTims(brandIds, addrCodes, typeCodeBys);
+        return R.ok(vos);
+    }
+
+    //    品牌各地区网点关店时间分布情况
+    @PostMapping("/closetime")
+    public R closeTime (@RequestBody ListQueryBody body) {
+        List<String> brandIds = body.getBrandId();
+        List<String> addrCodes = body.getAddrCode();
+        List<String> typeCodeBys = body.getTypeCodeBy();
+        List<OpcloseTimeVo> vos = brandService.searchCloseTims(brandIds, addrCodes, typeCodeBys);
+        return R.ok(vos);
+    }
 }

+ 19 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/controller/WdInfoController.java

@@ -4,6 +4,7 @@ package com.ruoyi.demo.controller;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.demo.entity.vo.AddStatusVo;
 import com.ruoyi.demo.entity.vo.ListQueryBody;
+import com.ruoyi.demo.entity.vo.OpcloseTimeVo;
 import com.ruoyi.demo.entity.vo.WdOpcloseVo;
 import com.ruoyi.demo.service.WdInfoService;
 import lombok.RequiredArgsConstructor;
@@ -66,4 +67,22 @@ public class WdInfoController {
         List<WdOpcloseVo> wdOpcloseVos = wdInfoService.searchWdOpcloses(addrCode, wdTypeCode);
         return R.ok(wdOpcloseVos);
     }
+
+    // 各地区网点开店时间分布情况
+    @PostMapping("/opentime")
+    public R openTime (@RequestBody ListQueryBody body) {
+        List<String> addrCodes = body.getAddrCode();
+        List<String> typeCodeBys = body.getTypeCodeBy();
+        List<OpcloseTimeVo> vos = wdInfoService.searchOpenTimes(addrCodes, typeCodeBys);
+        return R.ok(vos);
+    }
+
+    // 各地区网点关店时间分布情况
+    @PostMapping("/closetime")
+    public R closeTime (@RequestBody ListQueryBody body) {
+        List<String> addrCodes = body.getAddrCode();
+        List<String> typeCodeBys = body.getTypeCodeBy();
+        List<OpcloseTimeVo> vos = wdInfoService.searchCloseTimes(addrCodes, typeCodeBys);
+        return R.ok(vos);
+    }
 }

+ 42 - 16
ruoyi-demo/src/main/java/com/ruoyi/demo/controller/WorkTableController.java

@@ -1,10 +1,12 @@
 package com.ruoyi.demo.controller;
 
+import cn.dev33.satoken.stp.StpUtil;
 import com.github.pagehelper.PageInfo;
 
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.demo.entity.bo.AttentionPoolBo;
 import com.ruoyi.demo.entity.bo.AttentionPoolStatisticsBo;
+import com.ruoyi.demo.entity.bo.WorkTableBo;
 import com.ruoyi.demo.entity.vo.AddFollowRecordVo;
 import com.ruoyi.demo.entity.vo.TurnBusinessOpportunitiesVo;
 import com.ruoyi.demo.entity.vo.WorkTableSearchVo;
@@ -32,23 +34,27 @@ public class WorkTableController {
 
 //    获取数据概览
     @GetMapping("/databack/about")
-    public R about(){
+    public R about(@RequestBody WorkTableBo vo){
         // 获取用户id
-        String userId = "1";
+        String loginId = String.valueOf(StpUtil.getLoginId());
+        Long userid = Long.valueOf(loginId.split(":")[1]);
+        String userId = userid.toString();
         if (userId == null || userId.equals(""))
             return R.fail("请登录");
-        AttentionPoolStatisticsBo bo = databackService.searchAbout(userId);
+        AttentionPoolStatisticsBo bo = databackService.searchAbout(userId,vo);
         return R.ok(bo);
     }
 
 //    获取客户数量变化趋势
     @GetMapping("/databack/trend")
-    public R trend(){
+    public R trend(String condition){
         // 获取用户id
-        String userId = "1";
+        String loginId = String.valueOf(StpUtil.getLoginId());
+        Long userid = Long.valueOf(loginId.split(":")[1]);
+        String userId = userid.toString();
         if (userId == null || userId.equals(""))
             return R.fail("请登录");
-        List<AttentionPoolStatisticsBo> bos = databackService.searchTrand(userId);
+        List<AttentionPoolStatisticsBo> bos = databackService.searchTrand(userId,condition);
         return R.ok(bos);
     }
 
@@ -56,7 +62,9 @@ public class WorkTableController {
     @PostMapping("/pool/list")
     public R poolList(WorkTableSearchVo workTableSearchVo){
         // 获取用户id
-        String userId = "1";
+        String loginId = String.valueOf(StpUtil.getLoginId());
+        Long userid = Long.valueOf(loginId.split(":")[1]);
+        String userId = userid.toString();
         if (userId == null || userId.equals(""))
             return R.fail("请登录");
         PageInfo<List<AttentionPoolBo>> listPageInfo = attentionPoolService.searchList(workTableSearchVo, userId);
@@ -67,7 +75,9 @@ public class WorkTableController {
     @DeleteMapping("/pool")
     public R cancel(String attentionId){
         // 获取用户id
-        String userId = "1";
+        String loginId = String.valueOf(StpUtil.getLoginId());
+        Long userid = Long.valueOf(loginId.split(":")[1]);
+        String userId = userid.toString();
         if (userId == null || userId.equals(""))
             return R.fail("请登录");
         if (attentionId == null || attentionId.equals(""))
@@ -82,7 +92,9 @@ public class WorkTableController {
     @PostMapping("/pool")
     public R turn(TurnBusinessOpportunitiesVo turnVo){
         // 获取用户id
-        String userId = "1";
+        String loginId = String.valueOf(StpUtil.getLoginId());
+        Long userid = Long.valueOf(loginId.split(":")[1]);
+        String userId = userid.toString();
         if (userId == null || userId.equals(""))
             return R.fail("请登录");
         int flag = attentionPoolService.turnBusinessOpportunities(turnVo, userId);
@@ -97,7 +109,9 @@ public class WorkTableController {
     @PostMapping("/clue/list")
     public R clueList(WorkTableSearchVo vo){
         // 获取用户id
-        String userId = "1";
+        String loginId = String.valueOf(StpUtil.getLoginId());
+        Long userid = Long.valueOf(loginId.split(":")[1]);
+        String userId = userid.toString();
         if (userId == null || userId.equals(""))
             return R.fail("请登录");
         return R.ok(businessOpportunitiesService.searchList(vo,userId));
@@ -107,7 +121,9 @@ public class WorkTableController {
     @PostMapping("/follow/list")
     public R followList(WorkTableSearchVo vo){
         // 获取用户id
-        String userId = "1";
+        String loginId = String.valueOf(StpUtil.getLoginId());
+        Long userid = Long.valueOf(loginId.split(":")[1]);
+        String userId = userid.toString();
         if (userId == null || userId.equals(""))
             return R.fail("请登录");
         return R.ok(businessOpportunitiesService.searchFollowList(vo,userId));
@@ -117,7 +133,9 @@ public class WorkTableController {
     @PostMapping("/follow")
     public R followAdd(AddFollowRecordVo addVo){
         // 获取用户id
-        String userId = "1";
+        String loginId = String.valueOf(StpUtil.getLoginId());
+        Long userid = Long.valueOf(loginId.split(":")[1]);
+        String userId = userid.toString();
         if (userId == null || userId.equals(""))
             return R.fail("请登录");
         int flag = businessOpportunitiesService.addFollow(addVo, userId);
@@ -129,7 +147,9 @@ public class WorkTableController {
     //    品牌关注
     @PostMapping("/brand")
     public R brandAttention(String brandId){
-        String userId = "1";
+        String loginId = String.valueOf(StpUtil.getLoginId());
+        Long userid = Long.valueOf(loginId.split(":")[1]);
+        String userId = userid.toString();
         if (userId == null || userId.equals(""))
             return R.fail("请登录");
         int flag = attentionPoolService.attentionBrand(brandId, userId);
@@ -146,7 +166,9 @@ public class WorkTableController {
     //    品牌取消关注
     @DeleteMapping("/brand")
     public R brandCancel(String brandId){
-        String userId = "1";
+        String loginId = String.valueOf(StpUtil.getLoginId());
+        Long userid = Long.valueOf(loginId.split(":")[1]);
+        String userId = userid.toString();
         if (userId == null || userId.equals(""))
             return R.fail("请登录");
         int flag = attentionPoolService.cancelBrand(brandId, userId);
@@ -159,7 +181,9 @@ public class WorkTableController {
 //    网点关注
     @PostMapping("/wdInfo")
     public R wdInfoAttention(String wdId){
-        String userId = "1";
+        String loginId = String.valueOf(StpUtil.getLoginId());
+        Long userid = Long.valueOf(loginId.split(":")[1]);
+        String userId = userid.toString();
         if (userId == null || userId.equals(""))
             return R.fail("请登录");
         int flag = attentionPoolService.attentionWdInfo(wdId,userId);
@@ -176,7 +200,9 @@ public class WorkTableController {
 //    网点取消关注
     @DeleteMapping("/wdInfo")
     public R wdInfoCancel(String wdId){
-        String userId = "1";
+        String loginId = String.valueOf(StpUtil.getLoginId());
+        Long userid = Long.valueOf(loginId.split(":")[1]);
+        String userId = userid.toString();
         if (userId == null || userId.equals(""))
             return R.fail("请登录");
         int flag = attentionPoolService.cancelWdInfo(wdId, userId);

+ 1 - 1
ruoyi-demo/src/main/java/com/ruoyi/demo/entity/AttentionPoolStatistics.java

@@ -27,7 +27,7 @@ public class AttentionPoolStatistics {
     @TableField("user_id")
     private String userId;
     @TableField("stat_time")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd")
     @JsonSerialize(using = LocalDateTimeSerializer.class)
     @JsonDeserialize(using = LocalDateTimeDeserializer.class)
     private LocalDateTime statTime;

+ 33 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/entity/StoreWdOpclose.java

@@ -0,0 +1,33 @@
+package com.ruoyi.demo.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+@Data
+@TableName("bl_store_wd_opclose")
+public class StoreWdOpclose {
+    @TableField("wd_id")
+    private String wdId;
+
+    @TableField("addr_code")
+    private String addrCode;
+
+    @TableField("type_code_by")
+    private String typeCodeBy;
+
+    @TableField("brand_id")
+    private String brandId;
+
+    @TableField("brand_name")
+    private String brandName;
+
+    @TableField("business_time")
+    private String businessTime;
+
+    @TableField("start_time")
+    private String startTime;
+
+    @TableField("end_time")
+    private String endTime;
+}

+ 11 - 4
ruoyi-demo/src/main/java/com/ruoyi/demo/entity/bo/AttentionPoolStatisticsBo.java

@@ -5,6 +5,7 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
 import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
+import com.ruoyi.demo.entity.AttentionPoolStatistics;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -16,8 +17,14 @@ public class AttentionPoolStatisticsBo implements Serializable {
     private Integer clueCount;
     private Integer onlineCount;
     private Integer offlineCount;
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    @JsonSerialize(using = LocalDateTimeSerializer.class)
-    @JsonDeserialize(using = LocalDateTimeDeserializer.class)
-    private LocalDateTime time;
+    private String time;
+
+    public AttentionPoolStatisticsBo () {}
+    public AttentionPoolStatisticsBo (AttentionPoolStatistics statistics) {
+        this.attentionCount = statistics.getAttentionCount();
+        this.clueCount = statistics.getClueCount();
+        this.onlineCount = statistics.getOnlineCount();
+        this.offlineCount = statistics.getOfflineCount();
+        this.time = statistics.getStatTime().toString();
+    }
 }

+ 11 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/entity/bo/WorkTableBo.java

@@ -0,0 +1,11 @@
+package com.ruoyi.demo.entity.bo;
+
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+public class WorkTableBo {
+    private LocalDateTime startTime;
+    private LocalDateTime endTime;
+}

+ 1 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/entity/vo/ListQueryBody.java

@@ -11,6 +11,7 @@ public class ListQueryBody implements Serializable {
     private List<String> brandId;
     private List<String> industryCode;
     private List<String> typeCode;
+    private List<String> typeCodeBy;
     private List<String> wdCount;
     private List<String> coverCityCount;
     private List<String> addrCode;

+ 11 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/entity/vo/OpcloseTimeVo.java

@@ -0,0 +1,11 @@
+package com.ruoyi.demo.entity.vo;
+
+import lombok.Data;
+
+@Data
+public class OpcloseTimeVo {
+    private String brandId;
+    private String brandName;
+    private String time;
+    private Integer count;
+}

+ 1 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/AttentionPoolDao.java

@@ -5,6 +5,7 @@ import com.ruoyi.demo.entity.AttentionPool;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
+import java.time.LocalDateTime;
 import java.util.List;
 
 @Mapper

+ 4 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/AttentionPoolStatisticsDao.java

@@ -2,6 +2,7 @@ package com.ruoyi.demo.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ruoyi.demo.entity.AttentionPoolStatistics;
+import com.ruoyi.demo.entity.bo.AttentionPoolStatisticsBo;
 import org.apache.ibatis.annotations.Mapper;
 
 import java.util.List;
@@ -9,4 +10,7 @@ import java.util.List;
 @Mapper
 public interface AttentionPoolStatisticsDao extends BaseMapper<AttentionPoolStatistics> {
     List<AttentionPoolStatistics> searchAllByUserId(String userId);
+    List<AttentionPoolStatisticsBo> selectAllByUserIdAndDay(String userId);
+    List<AttentionPoolStatisticsBo> selectAllByUserIdAndMonth(String userId);
+    List<AttentionPoolStatisticsBo> selectAllByUserIdAndYear(String userId);
 }

+ 17 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/StoreWdOpcloseDao.java

@@ -0,0 +1,17 @@
+package com.ruoyi.demo.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.demo.entity.StoreWdOpclose;
+import com.ruoyi.demo.entity.vo.OpcloseTimeVo;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+@Mapper
+public interface StoreWdOpcloseDao extends BaseMapper<StoreWdOpclose> {
+    List<OpcloseTimeVo> selectWdOpenTimes(@Param("addrCodes") List<String> addrCodes, @Param("typeCodeBys") List<String> typeCodeBys);
+    List<OpcloseTimeVo> selectWdCloseTimes(@Param("addrCodes") List<String> addrCodes, @Param("typeCodeBys") List<String> typeCodeBys);
+    List<OpcloseTimeVo> selectBrandOpenTimes(@Param("brandIds") List<String> brandIds, @Param("addrCodes") List<String> addrCodes, @Param("typeCodeBys") List<String> typeCodeBys);
+    List<OpcloseTimeVo> selectBrandCloseTimes(@Param("brandIds") List<String> brandIds, @Param("addrCodes") List<String> addrCodes, @Param("typeCodeBys") List<String> typeCodeBys);
+}

+ 4 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/service/BrandService.java

@@ -7,6 +7,7 @@ import com.ruoyi.demo.entity.bo.*;
 import com.ruoyi.demo.entity.vo.BrandEvolveVo;
 import com.ruoyi.demo.entity.vo.BrandOpcloseVo;
 import com.ruoyi.demo.entity.vo.ListQueryBody;
+import com.ruoyi.demo.entity.vo.OpcloseTimeVo;
 
 import java.time.LocalDateTime;
 import java.util.List;
@@ -28,4 +29,7 @@ public interface BrandService {
     List<BrandOpcloseVo> searchOpenByMulti(List<String> typeCodes, LocalDateTime startTime, LocalDateTime endTime);
     List<BrandOpcloseVo> searchCloseByMulti(List<String> typeCodes, LocalDateTime startTime, LocalDateTime endTime);
     List<BrandEvolveVo> searchEvolveByMulti(List<String> addrCodes, List<String> typeCodes, List<String> brandIds);
+    List<OpcloseTimeVo> searchOpenTims(List<String> brandIds, List<String> addrCodes, List<String> typeCodeBys);
+    List<OpcloseTimeVo> searchCloseTims(List<String> brandIds,List<String> addrCodes,List<String> typeCodeBys);
+
 }

+ 3 - 2
ruoyi-demo/src/main/java/com/ruoyi/demo/service/DatabackService.java

@@ -2,10 +2,11 @@ package com.ruoyi.demo.service;
 
 
 import com.ruoyi.demo.entity.bo.AttentionPoolStatisticsBo;
+import com.ruoyi.demo.entity.bo.WorkTableBo;
 
 import java.util.List;
 
 public interface DatabackService {
-    AttentionPoolStatisticsBo searchAbout(String userId);
-    List<AttentionPoolStatisticsBo> searchTrand(String userId);
+    AttentionPoolStatisticsBo searchAbout(String userId, WorkTableBo vo);
+    List<AttentionPoolStatisticsBo> searchTrand(String userId,String condition);
 }

+ 3 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/service/WdInfoService.java

@@ -3,6 +3,7 @@ package com.ruoyi.demo.service;
 
 
 import com.ruoyi.demo.entity.vo.AddStatusVo;
+import com.ruoyi.demo.entity.vo.OpcloseTimeVo;
 import com.ruoyi.demo.entity.vo.WdOpcloseVo;
 
 import java.util.List;
@@ -13,4 +14,6 @@ public interface WdInfoService {
 //    List<WdAddrTypeDistribution> searchWdTotal();
     List<AddStatusVo> searchAddStatus(List<String> addrCodes, List<String> typeCodes);
     List<WdOpcloseVo> searchWdOpcloses(List<String> addrCodes, List<String> wdTypeCodes);
+    List<OpcloseTimeVo> searchOpenTimes(List<String> addrCodes, List<String> typeCodeBys);
+    List<OpcloseTimeVo> searchCloseTimes(List<String> addrCodes,List<String> typeCodeBys);
 }

+ 59 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/service/impl/BrandServiceImpl.java

@@ -9,6 +9,7 @@ import com.ruoyi.demo.entity.bo.*;
 import com.ruoyi.demo.entity.vo.BrandEvolveVo;
 import com.ruoyi.demo.entity.vo.BrandOpcloseVo;
 import com.ruoyi.demo.entity.vo.ListQueryBody;
+import com.ruoyi.demo.entity.vo.OpcloseTimeVo;
 import com.ruoyi.demo.mapper.*;
 import com.ruoyi.demo.service.BrandService;
 import com.ruoyi.demo.utils.CategoryUtil;
@@ -50,6 +51,8 @@ public class BrandServiceImpl implements BrandService {
     CategoryUtil categoryUtil;
     @Autowired
     BrandEvolveDao brandEvolveDao;
+    @Autowired
+    StoreWdOpcloseDao storeWdOpcloseDao;
 
     @Override
     public List<BrandSearch> searchByLikeName(String text) {
@@ -527,4 +530,60 @@ public class BrandServiceImpl implements BrandService {
         }
         return vos;
     }
+
+    @Override
+    public List<OpcloseTimeVo> searchOpenTims(List<String> brandIds, List<String> addrCodes, List<String> typeCodeBys) {
+        List<String> addrs = new ArrayList<>();
+        if (addrCodes != null){
+            if (addrCodes.size() != 0)
+                for (String addr : addrCodes){
+                    List<String> otherAddrCode = categoryUtil.getAllOtherAddrCode(addr);
+                    addrs.addAll(otherAddrCode);
+                }
+            else
+                addrs = null;
+        }else
+            addrs = null;
+        List<String> types = new ArrayList<>();
+        if (typeCodeBys != null){
+            if (typeCodeBys.size() != 0)
+                for (String type : typeCodeBys){
+                    List<String> otherTypeBy = categoryUtil.getAllOtherTypeBy(type);
+                    types.addAll(otherTypeBy);
+                }
+            else
+                types = null;
+        }else
+            types = null;
+        List<OpcloseTimeVo> vos = storeWdOpcloseDao.selectBrandOpenTimes(brandIds, addrs, types);
+        return vos;
+    }
+
+    @Override
+    public List<OpcloseTimeVo> searchCloseTims(List<String> brandIds, List<String> addrCodes, List<String> typeCodeBys) {
+        List<String> addrs = new ArrayList<>();
+        if (addrCodes != null){
+            if (addrCodes.size() != 0)
+                for (String addr : addrCodes){
+                    List<String> otherAddrCode = categoryUtil.getAllOtherAddrCode(addr);
+                    addrs.addAll(otherAddrCode);
+                }
+            else
+                addrs = null;
+        }else
+            addrs = null;
+        List<String> types = new ArrayList<>();
+        if (typeCodeBys != null){
+            if (typeCodeBys.size() != 0)
+                for (String type : typeCodeBys){
+                    List<String> otherTypeBy = categoryUtil.getAllOtherTypeBy(type);
+                    types.addAll(otherTypeBy);
+                }
+            else
+                types = null;
+        }else
+            types = null;
+        List<OpcloseTimeVo> vos = storeWdOpcloseDao.selectBrandCloseTimes(brandIds, addrs, types);
+        return vos;
+    }
 }

+ 66 - 17
ruoyi-demo/src/main/java/com/ruoyi/demo/service/impl/DatabackServiceImpl.java

@@ -1,8 +1,13 @@
 package com.ruoyi.demo.service.impl;
 
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.ruoyi.demo.entity.AttentionPool;
 import com.ruoyi.demo.entity.AttentionPoolStatistics;
+import com.ruoyi.demo.entity.BusinessOpportunitiesClue;
+import com.ruoyi.demo.entity.FollowUpRecord;
 import com.ruoyi.demo.entity.bo.AttentionPoolStatisticsBo;
+import com.ruoyi.demo.entity.bo.WorkTableBo;
 import com.ruoyi.demo.mapper.AttentionPoolDao;
 import com.ruoyi.demo.mapper.AttentionPoolStatisticsDao;
 import com.ruoyi.demo.mapper.BusinessOpportunitiesDao;
@@ -11,6 +16,7 @@ import com.ruoyi.demo.service.DatabackService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -26,11 +32,53 @@ public class DatabackServiceImpl implements DatabackService {
     FollowUpDao followUpDao;
 
     @Override
-    public AttentionPoolStatisticsBo searchAbout(String userId) {
-        int attentionCount = attentionPoolDao.searchCountByUserId(userId);
-        int clueCount = businessOpportunitiesDao.searchCountByUserId(userId);
-        int onlineCount = followUpDao.searchCountByUserIdAndWay(userId, "线上电话");
-        int offlineCount = followUpDao.searchCountByUserIdAndWay(userId, "线下实地");
+    public AttentionPoolStatisticsBo searchAbout(String userId, WorkTableBo vo) {
+        int attentionCount = 0;
+        QueryWrapper<AttentionPool> attentionPoolQueryWrapper = new QueryWrapper<>();
+        attentionPoolQueryWrapper.eq("user_id",userId);
+        if (vo.getStartTime() != null)
+            attentionPoolQueryWrapper.apply("DATE_FORMAT(`attention_time`,'%Y-%m-%d %H:%i:%s') >= DATE_FORMAT({0},'%Y-%m-%d %H:%i:%s')",vo.getStartTime());
+        if (vo.getEndTime() != null)
+            attentionPoolQueryWrapper.apply("DATE_FORMAT(`attention_time`,'%Y-%m-%d %H:%i:%s') <= DATE_FORMAT({0},'%Y-%m-%d %H:%i:%s')",vo.getEndTime());
+        List<AttentionPool> attentionPools = attentionPoolDao.selectList(attentionPoolQueryWrapper);
+        if (attentionPools != null)
+            attentionCount = attentionPools.size();
+
+        int clueCount = 0;
+        QueryWrapper<BusinessOpportunitiesClue> businessOpportunitiesClueQueryWrapper = new QueryWrapper<>();
+        businessOpportunitiesClueQueryWrapper.eq("user_id",userId);
+        if (vo.getStartTime() != null)
+            businessOpportunitiesClueQueryWrapper.apply("DATE_FORMAT(`create_time`,'%Y-%m-%d %H:%i:%s') >= DATE_FORMAT({0},'%Y-%m-%d %H:%i:%s')",vo.getStartTime());
+        if (vo.getEndTime() != null)
+            businessOpportunitiesClueQueryWrapper.apply("DATE_FORMAT(`create_time`,'%Y-%m-%d %H:%i:%s') <= DATE_FORMAT({0},'%Y-%m-%d %H:%i:%s')",vo.getEndTime());
+        List<BusinessOpportunitiesClue> businessOpportunitiesClues = businessOpportunitiesDao.selectList(businessOpportunitiesClueQueryWrapper);
+        if (businessOpportunitiesClues != null)
+            clueCount = businessOpportunitiesClues.size();
+
+        int onlineCount = 0;
+        QueryWrapper<FollowUpRecord> followUpRecordQueryWrapper = new QueryWrapper<>();
+        followUpRecordQueryWrapper.eq("user_id",userId);
+        followUpRecordQueryWrapper.eq("follow_way","线上电话");
+        if (vo.getStartTime() != null)
+            followUpRecordQueryWrapper.apply("DATE_FORMAT(`follow_time`,'%Y-%m-%d %H:%i:%s') >= DATE_FORMAT({0},'%Y-%m-%d %H:%i:%s')",vo.getStartTime());
+        if (vo.getEndTime() != null)
+            followUpRecordQueryWrapper.apply("DATE_FORMAT(`follow_time`,'%Y-%m-%d %H:%i:%s') <= DATE_FORMAT({0},'%Y-%m-%d %H:%i:%s')",vo.getEndTime());
+        List<FollowUpRecord> followUpRecords = followUpDao.selectList(followUpRecordQueryWrapper);
+        if (followUpRecords != null)
+            onlineCount = followUpRecords.size();
+
+        int offlineCount = 0;
+        QueryWrapper<FollowUpRecord> followUpRecordQueryWrapper1 = new QueryWrapper<>();
+        followUpRecordQueryWrapper1.eq("user_id",userId);
+        followUpRecordQueryWrapper1.eq("follow_way","线下实地");
+        if (vo.getStartTime() != null)
+            followUpRecordQueryWrapper1.apply("DATE_FORMAT(`follow_time`,'%Y-%m-%d %H:%i:%s') >= DATE_FORMAT({0},'%Y-%m-%d %H:%i:%s')",vo.getStartTime());
+        if (vo.getEndTime() != null)
+            followUpRecordQueryWrapper1.apply("DATE_FORMAT(`follow_time`,'%Y-%m-%d %H:%i:%s') <= DATE_FORMAT({0},'%Y-%m-%d %H:%i:%s')",vo.getEndTime());
+        List<FollowUpRecord> followUpRecords1 = followUpDao.selectList(followUpRecordQueryWrapper1);
+        if (followUpRecords1 != null)
+            offlineCount = followUpRecords1.size();
+
         AttentionPoolStatisticsBo bo = new AttentionPoolStatisticsBo();
         bo.setAttentionCount(attentionCount);
         bo.setClueCount(clueCount);
@@ -40,18 +88,19 @@ public class DatabackServiceImpl implements DatabackService {
     }
 
     @Override
-    public List<AttentionPoolStatisticsBo> searchTrand(String userId) {
-        List<AttentionPoolStatistics> list = attentionPoolStatisticsDao.searchAllByUserId(userId);
-        List<AttentionPoolStatisticsBo> boList = new ArrayList<>();
-        for (AttentionPoolStatistics aps : list){
-            AttentionPoolStatisticsBo apsb = new AttentionPoolStatisticsBo();
-            apsb.setAttentionCount(aps.getAttentionCount());
-            apsb.setClueCount(aps.getClueCount());
-            apsb.setOnlineCount(aps.getOnlineCount());
-            apsb.setOfflineCount(aps.getOfflineCount());
-            apsb.setTime(aps.getStatTime());
-            boList.add(apsb);
+    public List<AttentionPoolStatisticsBo> searchTrand(String userId,String condition) {
+        if (condition == null)
+            condition = "day";
+        List<AttentionPoolStatisticsBo> list = new ArrayList<>();
+        if (condition != null){
+            if (condition.equals("day"))
+                list = attentionPoolStatisticsDao.selectAllByUserIdAndDay(userId);
+            if (condition.equals("month"))
+                list = attentionPoolStatisticsDao.selectAllByUserIdAndMonth(userId);
+            if (condition.equals("year"))
+                list = attentionPoolStatisticsDao.selectAllByUserIdAndYear(userId);
         }
-        return boList;
+//        List<AttentionPoolStatistics> list = attentionPoolStatisticsDao.searchAllByUserId(userId);
+        return list;
     }
 }

+ 60 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/service/impl/WdInfoServiceImpl.java

@@ -3,7 +3,9 @@ package com.ruoyi.demo.service.impl;
 
 import com.ruoyi.demo.entity.WdOpclose;
 import com.ruoyi.demo.entity.vo.AddStatusVo;
+import com.ruoyi.demo.entity.vo.OpcloseTimeVo;
 import com.ruoyi.demo.entity.vo.WdOpcloseVo;
+import com.ruoyi.demo.mapper.StoreWdOpcloseDao;
 import com.ruoyi.demo.mapper.WdInfoMapper;
 import com.ruoyi.demo.mapper.WdOpcloseDao;
 import com.ruoyi.demo.service.WdInfoService;
@@ -25,6 +27,8 @@ public class WdInfoServiceImpl implements WdInfoService {
     WdInfoMapper wdInfoMapper;
     @Autowired
     WdOpcloseDao wdOpcloseDao;
+    @Autowired
+    StoreWdOpcloseDao storeWdOpcloseDao;
 
     @Override
     public List<AddStatusVo> searchAddStatus(List<String> addrCodes, List<String> typeCodes) {
@@ -68,6 +72,62 @@ public class WdInfoServiceImpl implements WdInfoService {
         return vos;
     }
 
+    @Override
+    public List<OpcloseTimeVo> searchOpenTimes(List<String> addrCodes, List<String> typeCodeBys) {
+        List<String> addrs = new ArrayList<>();
+        if (addrCodes != null){
+            if (addrCodes.size() != 0)
+                for (String addr : addrCodes){
+                    List<String> otherAddrCode = categoryUtil.getAllOtherAddrCode(addr);
+                    addrs.addAll(otherAddrCode);
+                }
+            else
+                addrs = null;
+        }else
+            addrs = null;
+        List<String> types = new ArrayList<>();
+        if (typeCodeBys != null){
+            if (typeCodeBys.size() != 0)
+                for (String type : typeCodeBys){
+                    List<String> otherTypeBy = categoryUtil.getAllOtherTypeBy(type);
+                    types.addAll(otherTypeBy);
+                }
+            else
+                types = null;
+        }else
+            types = null;
+        List<OpcloseTimeVo> vos = storeWdOpcloseDao.selectWdOpenTimes(addrs, types);
+        return vos;
+    }
+
+    @Override
+    public List<OpcloseTimeVo> searchCloseTimes(List<String> addrCodes, List<String> typeCodeBys) {
+        List<String> addrs = new ArrayList<>();
+        if (addrCodes != null){
+            if (addrCodes.size() != 0)
+                for (String addr : addrCodes){
+                    List<String> otherAddrCode = categoryUtil.getAllOtherAddrCode(addr);
+                    addrs.addAll(otherAddrCode);
+                }
+            else
+                addrs = null;
+        }else
+            addrs = null;
+        List<String> types = new ArrayList<>();
+        if (typeCodeBys != null){
+            if (typeCodeBys.size() != 0)
+                for (String type : typeCodeBys){
+                    List<String> otherTypeBy = categoryUtil.getAllOtherTypeBy(type);
+                    types.addAll(otherTypeBy);
+                }
+            else
+                types = null;
+        }else
+            types = null;
+        List<OpcloseTimeVo> vos = storeWdOpcloseDao.selectWdCloseTimes(addrs, types);
+        return vos;
+    }
+
 //    @Override
 //    public List<WdAddrTypeDistribution> searchAddrTypeDistribution(List<String> addrCodes, List<String> typeCodes) {
 //        List<String> acodes = new ArrayList<>();

+ 49 - 0
ruoyi-demo/src/main/resources/mapper/demo/AttentionPoolStatisticsMapper.xml

@@ -12,6 +12,13 @@
         <result property="userId" column="user_id"/>
         <result property="statTime" column="stat_time"/>
     </resultMap>
+    <resultMap type="com.ruoyi.demo.entity.bo.AttentionPoolStatisticsBo" id="StatisticsBoResult">
+        <result property="attentionCount" column="attention_count"/>
+        <result property="clueCount" column="clue_count"/>
+        <result property="onlineCount" column="online_count"/>
+        <result property="offlineCount" column="offline_count"/>
+        <result property="time" column="stat_time"/>
+    </resultMap>
     <select id="searchAllByUserId" resultMap="StatisticsResult">
         select * from `bl_attention_pool_statistics`
         <where>
@@ -20,4 +27,46 @@
             </if>
         </where>
     </select>
+    <select id="selectAllByUserIdAndDay" resultMap="StatisticsBoResult">
+        SELECT
+            SUM(attention_count) attention_count,
+            SUM(clue_count) clue_count,
+            SUM(online_count) online_count,
+            SUM(offline_count) offline_count,
+            DATE_FORMAT(stat_time,'%Y-%m-%d') stat_time
+        FROM
+            `bl_attention_pool_statistics`
+        WHERE
+            user_id = #{userId}
+        GROUP BY
+            DATE_FORMAT(stat_time,'%Y-%m-%d');
+    </select>
+    <select id="selectAllByUserIdAndMonth" resultMap="StatisticsBoResult">
+        SELECT
+            SUM(attention_count) attention_count,
+            SUM(clue_count) clue_count,
+            SUM(online_count) online_count,
+            SUM(offline_count) offline_count,
+            DATE_FORMAT(stat_time,'%Y-%m') stat_time
+        FROM
+            `bl_attention_pool_statistics`
+        WHERE
+            user_id = #{userId}
+        GROUP BY
+            DATE_FORMAT(stat_time,'%Y-%m');
+    </select>
+    <select id="selectAllByUserIdAndYear" resultMap="StatisticsBoResult">
+        SELECT
+            SUM(attention_count) attention_count,
+            SUM(clue_count) clue_count,
+            SUM(online_count) online_count,
+            SUM(offline_count) offline_count,
+            DATE_FORMAT(stat_time,'%Y') stat_time
+        FROM
+            `bl_attention_pool_statistics`
+        WHERE
+            user_id = #{userId}
+        GROUP BY
+            DATE_FORMAT(stat_time,'%Y');
+    </select>
 </mapper>

+ 116 - 0
ruoyi-demo/src/main/resources/mapper/demo/StoreWdOpcloseMapper.xml

@@ -0,0 +1,116 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.demo.mapper.StoreWdOpcloseDao">
+    <select id="selectWdOpenTimes" resultType="com.ruoyi.demo.entity.vo.OpcloseTimeVo">
+        SELECT
+            start_time time,
+	        COUNT(*) count
+        FROM
+            `bl_store_wd_opclose`
+        <trim prefix="where" prefixOverrides="and">
+            <if test="addrCodes != null">
+                <foreach collection="addrCodes" item="code" open="and addr_code in (" separator="," close=")">
+                    #{code,jdbcType=VARCHAR}
+                </foreach>
+            </if>
+            <if test="typeCodeBys != null">
+                <foreach collection="typeCodeBys" item="code" open="and type_code_by in (" separator="," close=")">
+                    #{code,jdbcType=VARCHAR}
+                </foreach>
+            </if>
+        </trim>
+        GROUP BY
+            start_time
+        ORDER BY
+            count DESC;
+    </select>
+    <select id="selectWdCloseTimes" resultType="com.ruoyi.demo.entity.vo.OpcloseTimeVo">
+        SELECT
+            end_time time,
+            COUNT(*) count
+        FROM
+            `bl_store_wd_opclose`
+        <trim prefix="where" prefixOverrides="and">
+            <if test="addrCodes != null">
+                <foreach collection="addrCodes" item="code" open="and addr_code in (" separator="," close=")">
+                    #{code,jdbcType=VARCHAR}
+                </foreach>
+            </if>
+            <if test="typeCodeBys != null">
+                <foreach collection="typeCodeBys" item="code" open="and type_code_by in (" separator="," close=")">
+                    #{code,jdbcType=VARCHAR}
+                </foreach>
+            </if>
+        </trim>
+        GROUP BY
+            end_time
+        ORDER BY
+            count DESC;
+    </select>
+    <select id="selectBrandOpenTimes" resultType="com.ruoyi.demo.entity.vo.OpcloseTimeVo">
+        SELECT
+            brand_id,
+            brand_name,
+            start_time time,
+            COUNT(*) count
+        FROM
+            `bl_store_wd_opclose`
+        <trim prefix="where" prefixOverrides="and">
+            <if test="brandIds != null">
+                <foreach collection="brandIds" item="id" open="and brand_id in (" separator="," close=")">
+                    #{id,jdbcType=VARCHAR}
+                </foreach>
+            </if>
+            <if test="addrCodes != null">
+                <foreach collection="addrCodes" item="code" open="and addr_code in (" separator="," close=")">
+                    #{code,jdbcType=VARCHAR}
+                </foreach>
+            </if>
+            <if test="typeCodeBys != null">
+                <foreach collection="typeCodeBys" item="code" open="and type_code_by in (" separator="," close=")">
+                    #{code,jdbcType=VARCHAR}
+                </foreach>
+            </if>
+        </trim>
+        GROUP BY
+            brand_id,
+            brand_name,
+            start_time
+        ORDER BY
+            count DESC;
+    </select>
+    <select id="selectBrandCloseTimes" resultType="com.ruoyi.demo.entity.vo.OpcloseTimeVo">
+        SELECT
+            brand_id,
+            brand_name,
+            end_time time,
+            COUNT(*) count
+        FROM
+            `bl_store_wd_opclose`
+        <trim prefix="where" prefixOverrides="and">
+            <if test="brandIds != null">
+                <foreach collection="brandIds" item="id" open="and brand_id in (" separator="," close=")">
+                    #{id,jdbcType=VARCHAR}
+                </foreach>
+            </if>
+            <if test="addrCodes != null">
+                <foreach collection="addrCodes" item="code" open="and addr_code in (" separator="," close=")">
+                    #{code,jdbcType=VARCHAR}
+                </foreach>
+            </if>
+            <if test="typeCodeBys != null">
+                <foreach collection="typeCodeBys" item="code" open="and type_code_by in (" separator="," close=")">
+                    #{code,jdbcType=VARCHAR}
+                </foreach>
+            </if>
+        </trim>
+        GROUP BY
+            brand_id,
+            brand_name,
+            end_time
+        ORDER BY
+            count DESC;
+    </select>
+</mapper>