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

1.合并项目
2.各地区网点开、关店时间分布情况;品牌各地区网点开、关店时间分布情况

云殇忆 1 рік тому
батько
коміт
79fae1d570

+ 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>

+ 21 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/controller/BrandController.java

@@ -10,6 +10,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;
@@ -157,4 +158,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);
+    }
 }

+ 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;
+}

+ 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;
+}

+ 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 - 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;
+    }
 }

+ 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;
@@ -24,6 +26,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) {
@@ -67,6 +71,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<>();

+ 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>