Kaynağa Gözat

1.优化代码结构
2.品牌详情页-添加“品牌联系方式”字段
3.品牌详情页-添加“经营模式”字段
4.品牌详情页-添加“行业分类”字段
5.工作台-将“线下实地”改为“实地考察”

云殇忆 1 yıl önce
ebeveyn
işleme
c73500af7c
61 değiştirilmiş dosya ile 957 ekleme ve 1253 silme
  1. 0 2
      benyun-core/src/main/java/com/ruoyi/benyun/entity/BrandStoreOpclose.java
  2. 1 1
      benyun-core/src/main/java/com/ruoyi/benyun/service/impl/DatabackServiceImpl.java
  3. 1 1
      benyun-core/src/main/java/com/ruoyi/benyun/utils/statistics/AttentionPoolStat.java
  4. 3 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/constant/RedisContant.java
  5. 121 80
      ruoyi-demo/src/main/java/com/ruoyi/demo/controller/BrandController.java
  6. 20 4
      ruoyi-demo/src/main/java/com/ruoyi/demo/controller/CategoryCotroller.java
  7. 21 42
      ruoyi-demo/src/main/java/com/ruoyi/demo/controller/WdInfoController.java
  8. 99 47
      ruoyi-demo/src/main/java/com/ruoyi/demo/controller/WorkTableController.java
  9. 2 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/entity/Brand.java
  10. 9 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/entity/BrandCity.java
  11. 9 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/entity/BrandProvince.java
  12. 18 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/entity/IndustryCategory.java
  13. 14 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/entity/bo/AttentionPoolBo.java
  14. 19 8
      ruoyi-demo/src/main/java/com/ruoyi/demo/entity/bo/AttentionPoolStatisticsBo.java
  15. 17 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/entity/bo/BrandDisItem.java
  16. 24 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/entity/bo/BrandDistribution.java
  17. 15 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/entity/bo/BrandGeoLabelBo.java
  18. 26 2
      ruoyi-demo/src/main/java/com/ruoyi/demo/entity/bo/BrandInfo.java
  19. 15 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/entity/bo/BrandProvinceBo.java
  20. 11 2
      ruoyi-demo/src/main/java/com/ruoyi/demo/entity/bo/BrandSimilar.java
  21. 8 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/entity/bo/BrandStatus.java
  22. 11 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/entity/bo/BrandTotal.java
  23. 13 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/entity/bo/BusinessOpportunitiesClueBo.java
  24. 12 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/entity/bo/FollowUpRecordBo.java
  25. 0 14
      ruoyi-demo/src/main/java/com/ruoyi/demo/entity/bo/WdAddrTypeDistribution.java
  26. 0 16
      ruoyi-demo/src/main/java/com/ruoyi/demo/entity/vo/BrandOpcloseVo.java
  27. 0 31
      ruoyi-demo/src/main/java/com/ruoyi/demo/entity/vo/WdOpcloseVo.java
  28. 7 1
      ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/AttentionPoolDao.java
  29. 2 2
      ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/BrandCityMapper.java
  30. 1 2
      ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/BrandMapper.java
  31. 2 2
      ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/BrandProvinceMapper.java
  32. 2 3
      ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/BrandStatisticsMapper.java
  33. 0 16
      ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/BrandStoreOpcloseDao.java
  34. 4 3
      ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/BrandZoneMapper.java
  35. 6 3
      ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/BusinessOpportunitiesDao.java
  36. 2 2
      ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/EnterpriseMapper.java
  37. 5 1
      ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/FollowUpDao.java
  38. 9 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/IndustryCategoryDao.java
  39. 5 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/StoreWdOpcloseDao.java
  40. 0 5
      ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/WdInfoMapper.java
  41. 0 5
      ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/WdOpcloseDao.java
  42. 6 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/service/AttentionPoolService.java
  43. 16 8
      ruoyi-demo/src/main/java/com/ruoyi/demo/service/BrandService.java
  44. 2 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/service/BusinessOpportunitiesService.java
  45. 3 8
      ruoyi-demo/src/main/java/com/ruoyi/demo/service/WdInfoService.java
  46. 17 18
      ruoyi-demo/src/main/java/com/ruoyi/demo/service/impl/AttentionPoolServiceImpl.java
  47. 244 430
      ruoyi-demo/src/main/java/com/ruoyi/demo/service/impl/BrandServiceImpl.java
  48. 23 31
      ruoyi-demo/src/main/java/com/ruoyi/demo/service/impl/BusinessOpportunitiesServiceImpl.java
  49. 61 49
      ruoyi-demo/src/main/java/com/ruoyi/demo/service/impl/DatabackServiceImpl.java
  50. 48 133
      ruoyi-demo/src/main/java/com/ruoyi/demo/service/impl/WdInfoServiceImpl.java
  51. 1 1
      ruoyi-demo/src/main/java/com/ruoyi/demo/utils/statistics/AttentionPoolStat.java
  52. 0 19
      ruoyi-demo/src/main/resources/mapper/demo/BrandCityMapper.xml
  53. 2 7
      ruoyi-demo/src/main/resources/mapper/demo/BrandMapper.xml
  54. 0 20
      ruoyi-demo/src/main/resources/mapper/demo/BrandProvinceMapper.xml
  55. 0 24
      ruoyi-demo/src/main/resources/mapper/demo/BrandStatisticsMapper.xml
  56. 0 63
      ruoyi-demo/src/main/resources/mapper/demo/BrandStoreOpcloseMapper.xml
  57. 0 4
      ruoyi-demo/src/main/resources/mapper/demo/BrandZoneMapper.xml
  58. 0 12
      ruoyi-demo/src/main/resources/mapper/demo/BusinessOpportunitiesMapper.xml
  59. 0 27
      ruoyi-demo/src/main/resources/mapper/demo/EnterpriseMapper.xml
  60. 0 72
      ruoyi-demo/src/main/resources/mapper/demo/WdInfoMapper.xml
  61. 0 32
      ruoyi-demo/src/main/resources/mapper/demo/WdOpcloseMapper.xml

+ 0 - 2
benyun-core/src/main/java/com/ruoyi/benyun/entity/BrandStoreOpclose.java

@@ -37,7 +37,5 @@ public class BrandStoreOpclose {
 
     @TableField("stat_time")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    @JsonSerialize(using = LocalDateTimeSerializer.class)
-    @JsonDeserialize(using = LocalDateTimeDeserializer.class)
     private LocalDateTime statTime;
 }

+ 1 - 1
benyun-core/src/main/java/com/ruoyi/benyun/service/impl/DatabackServiceImpl.java

@@ -29,7 +29,7 @@ public class DatabackServiceImpl implements DatabackService {
         int attentionCount = attentionPoolDao.searchCountByUserId(userId);
         int clueCount = businessOpportunitiesDao.searchCountByUserId(userId);
         int onlineCount = followUpDao.searchCountByUserIdAndWay(userId, "线上电话");
-        int offlineCount = followUpDao.searchCountByUserIdAndWay(userId, "线下实地");
+        int offlineCount = followUpDao.searchCountByUserIdAndWay(userId, "实地考察");
         AttentionPoolStatisticsBo bo = new AttentionPoolStatisticsBo();
         bo.setAttentionCount(attentionCount);
         bo.setClueCount(clueCount);

+ 1 - 1
benyun-core/src/main/java/com/ruoyi/benyun/utils/statistics/AttentionPoolStat.java

@@ -32,7 +32,7 @@ public class AttentionPoolStat {
             statistics.setAttentionCount(poolDao.selectCount(userId));
             statistics.setClueCount(opportunitiesDao.selectCount(userId));
             statistics.setOnlineCount(followUpDao.selectCountByWay(userId,"线上电话"));
-            statistics.setOfflineCount(followUpDao.selectCountByWay(userId,"线下实地"));
+            statistics.setOfflineCount(followUpDao.selectCountByWay(userId,"实地考察"));
             statistics.setUserId(userId);
             statistics.setStatTime(LocalDateTime.now(ZoneId.of("Asia/Shanghai")));
             statisticsDao.insert(statistics);

+ 3 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/constant/RedisContant.java

@@ -86,6 +86,9 @@ public class RedisContant {
     public static String BRAND_GEOLABEL = "brand_geolabel";
     public static int BRAND_GEOLABEL_TIME = 60*8;
 
+    public static String BRAND_EVOLVE = "brand_evolve";
+    public static int BRAND_EVOLVE_TIME = 60*8;
+
     public static String CITY_TIER_MAP = "cityTierMap";
 
     public int CITY_TIER_MAP_time = 60*8;

+ 121 - 80
ruoyi-demo/src/main/java/com/ruoyi/demo/controller/BrandController.java

@@ -1,15 +1,11 @@
 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;
 import com.ruoyi.demo.entity.bo.BrandGeoLabelBo;
-import com.ruoyi.demo.entity.bo.BrandOpcloseBo;
-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;
@@ -20,8 +16,8 @@ import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
-import java.time.LocalDateTime;
 import java.util.List;
+import java.util.Map;
 import java.util.concurrent.TimeUnit;
 
 @Validated
@@ -34,140 +30,180 @@ public class BrandController extends BaseController {
     @Autowired
     RedisTemplate redisTemplate;
 
-//    获取品牌信息列表
+    /**
+     * 获取品牌搜索推荐
+     *
+     * @param text 搜索关键字
+     * @return
+     */
     @GetMapping("/search")
-    public R search(String text){
-        List<BrandSearch> list = brandService.searchByLikeName(text);
-        return R.ok(list);
+    public R search(String text) {
+        return R.ok(brandService.searchByLikeName(text));
     }
 
-//    获取品牌信息列表
+    /**
+     * 获取品牌信息列表
+     *
+     * @param body 关键字、网点数量、覆盖城市数和地区码查询请求体
+     * @return
+     */
     @PostMapping("/list")
-    public R list(ListQueryBody body){
+    public R list(ListQueryBody body) {
         String loginId = String.valueOf(StpUtil.getLoginId());
         Long userid = Long.valueOf(loginId.split(":")[1]);
         String userId = userid.toString();
-        return R.ok(brandService.searchListByMulti(body,userId));
+        return R.ok(brandService.searchListByMulti(body, userId));
     }
 
-//    获取品牌详细信息
+    /**
+     * 获取品牌详细信息
+     *
+     * @param brandId 品牌id
+     * @return
+     */
     @GetMapping("/info")
-    public R info(String brandId){
+    public R info(String brandId) {
         String loginId = String.valueOf(StpUtil.getLoginId());
         Long userid = Long.valueOf(loginId.split(":")[1]);
         String userId = userid.toString();
-        return R.ok(brandService.searchByBrandId(brandId,userId));
+        return R.ok(brandService.searchByBrandId(brandId, userId));
     }
 
-//    获取品牌物业信息
+    /**
+     * 获取品牌物业信息
+     *
+     * @param brandId 品牌id
+     * @return
+     */
     @GetMapping("/property")
-    public R property(String brandId){
+    public R property(String brandId) {
         return R.ok(brandService.searchPropertyByBrandId(brandId));
     }
 
-//    获取品牌城市分布词云
+    /**
+     * 获取品牌地区分布词云
+     *
+     * @param brandId 品牌id
+     * @return
+     */
     @GetMapping("/distribution")
-    public R distribution(String brandId){
+    public R distribution(String brandId) {
         return R.ok(brandService.searchDisCloudByBrandId(brandId));
     }
 
-//    获取相似品牌
+    /**
+     * 获取相似品牌
+     *
+     * @param brandId 品牌id
+     * @return
+     */
     @GetMapping("/similar")
-    public R similar(String brandId){
+    public R similar(String brandId) {
         return R.ok(brandService.searchSimilarByBrandId(brandId));
     }
 
-//    获取品牌网点营业状态分布
+    /**
+     * 获取品牌网点营业状态分布
+     *
+     * @param brandId 品牌id
+     * @return
+     */
     @GetMapping("/status")
-    public R statusDistribution(String brandId){
+    public R statusDistribution(String brandId) {
         return R.ok(brandService.searchStatusByBrandId(brandId));
     }
 
-//    获取品牌网点地图信息
+    /**
+     * 获取品牌网点地图信息
+     *
+     * @param brandId 品牌id
+     * @return
+     */
     @GetMapping("/area")
-    public R area(String brandId){
+    public R area(String brandId) {
         return R.ok(brandService.searchProvinceByBrandId(brandId));
     }
 
-//    获取品牌网点数量及其城市数量分布
+    /**
+     * 获取品牌网点数量及其城市数量分布
+     *
+     * @param brandId 品牌id
+     * @return
+     */
     @GetMapping("/shopCount")
-    public R shopCount(String brandId){
+    public R shopCount(String brandId) {
         return R.ok(brandService.searchDistributionByBrandId(brandId));
     }
 
-//    品牌网点数量对比
+    /**
+     * 品牌网点数量对比
+     *
+     * @param pageSize 返回数据大小
+     * @return
+     */
     @GetMapping("/total")
-    public R total(Integer pageSize){
+    public R total(Integer pageSize) {
         return R.ok(brandService.searchTotal(pageSize));
     }
 
-//    获取品牌均分分布
-//    已废弃
-//    @GetMapping("/average")
-//    public R average(String brandId){
-//        return R.ok(brandService.searchAvgScoreByBrandId(brandId));
-//    }
-
-//    获取各地区品牌网点数量分布情况
-//    已废弃
-//    @PostMapping("/countDistribution")
-//    public R categoryDis(ListQueryBody body){
-//        List<String> addrCode = body.getAddrCode();
-//        return R.ok(brandService.searchAddrDistribution(addrCode));
-//    }
-
-//    获取品牌地理位置标签分布
+    /**
+     * 获取品牌地理位置标签分布
+     *
+     * @param brandId 品牌id
+     * @return
+     */
     @GetMapping("/geolabel")
-    public R geolabel(String brandId){
-        String md5 = HashUtil.hash(brandId,"MD5");
+    public R geolabel(String brandId) {
+        // 获取redis缓存
+        String md5 = HashUtil.hash(brandId, "MD5");
         List<BrandGeoLabelBo> bos = (List<BrandGeoLabelBo>) redisTemplate.boundHashOps(RedisContant.BRAND_GEOLABEL).get(md5);
-        if (bos != null)
-            return R.ok(bos);
+        if (bos != null) return R.ok(bos);
 
+        // 缓存中没有则计算一次
         List<BrandGeoLabelBo> brandGeoLabelBos = brandService.searchGeoLabel(brandId);
-
-        redisTemplate.boundHashOps(RedisContant.BRAND_GEOLABEL).put(md5,brandGeoLabelBos);
+        // 放入redis中
+        redisTemplate.boundHashOps(RedisContant.BRAND_GEOLABEL).put(md5, brandGeoLabelBos);
         redisTemplate.expire(RedisContant.BRAND_GEOLABEL, RedisContant.BRAND_GEOLABEL_TIME, TimeUnit.MINUTES);
 
         return R.ok(brandGeoLabelBos);
     }
 
-//    行业连锁品牌发展情况
+    /**
+     * 行业连锁品牌发展情况
+     *
+     * @param body 地址码、分类码和品牌ids查询请求体
+     * @return
+     */
     @PostMapping("/evolve")
-    public R develop(@RequestBody ListQueryBody body){
+    public R develop(@RequestBody ListQueryBody body) {
         List<String> addrCode = body.getAddrCode();
         List<String> typeCode = body.getTypeCode(); // 网点分类(犇云)
         List<String> brandId = body.getBrandId();
-        if (brandId == null || brandId.size() == 0)
-            return R.fail("brandId不允许为空");
-//        List<BrandEvolveVo> vos = brandService.searchEvolveByMulti(addrCode, typeCode, brandId);
-//        return R.ok(vos);
-        return R.ok(brandService.searchEvolveByMulti2Map(addrCode, typeCode, brandId));
-    }
+        if (brandId == null || brandId.size() == 0) return R.fail("brandId不允许为空");
 
-//    连锁品牌近期开关店情况(开点量)
-    @PostMapping("/open")
-    public R open(@RequestBody BrandOpcloseBo bo){
-        List<String> typeCodes = bo.getTypeCodes(); // 网点类型(犇云)
-        LocalDateTime startTime = bo.getStartTime();
-        LocalDateTime endTime = bo.getEndTime();
-        List<BrandOpcloseVo> vos = brandService.searchOpenByMulti(typeCodes, startTime, endTime);
-        return R.ok(vos);
-    }
+        // 获取redis缓存
+        String md5 = HashUtil.hash(addrCode.toString() + typeCode.toString() + brandId.toString(), "MD5");
+        Map<String, List<BrandEvolveVo>> map = (Map<String, List<BrandEvolveVo>>) redisTemplate.boundHashOps(RedisContant.BRAND_EVOLVE).get(md5);
+        if (map != null) return R.ok(map);
+
+        // Map<String, List<BrandEvolveVo>> stringListMap = brandService.searchEvolveByMulti(addrCode, typeCode, brandId);
+        Map<String, List<BrandEvolveVo>> listMap = brandService.searchEvolveByMulti2Map(addrCode, typeCode, brandId);
+
+        redisTemplate.boundHashOps(RedisContant.BRAND_EVOLVE).put(md5, listMap);
+        redisTemplate.expire(RedisContant.BRAND_EVOLVE, RedisContant.BRAND_EVOLVE_TIME, TimeUnit.MINUTES);
+
+        return R.ok(listMap);
 
-//    连锁品牌近期开关店情况(关店量)
-    @PostMapping("/close")
-    public R close(@RequestBody BrandOpcloseBo bo){
-        List<String> typeCodes = bo.getTypeCodes(); // 网点类型(犇云)
-        LocalDateTime startTime = bo.getStartTime();
-        LocalDateTime endTime = bo.getEndTime();
-        List<BrandOpcloseVo> vos = brandService.searchCloseByMulti(typeCodes, startTime, endTime);
-        return R.ok(vos);
     }
 
-    //    品牌各地区网点开店时间分布情况
+    /**
+     * 品牌各地区网点开店时间分布情况
+     *
+     * @param body 地址码、分类码和品牌ids查询请求体
+     * @return
+     */
     @PostMapping("/opentime")
-    public R openTime (@RequestBody ListQueryBody body) {
+    public R openTime(@RequestBody ListQueryBody body) {
         List<String> brandIds = body.getBrandId();
         List<String> addrCodes = body.getAddrCode();
         List<String> typeCodeBys = body.getTypeCodeBy();
@@ -175,9 +211,14 @@ public class BrandController extends BaseController {
         return R.ok(vos);
     }
 
-    //    品牌各地区网点关店时间分布情况
+    /**
+     * 品牌各地区网点关店时间分布情况
+     *
+     * @param body 地址码、分类码和品牌ids查询请求体
+     * @return
+     */
     @PostMapping("/closetime")
-    public R closeTime (@RequestBody ListQueryBody body) {
+    public R closeTime(@RequestBody ListQueryBody body) {
         List<String> brandIds = body.getBrandId();
         List<String> addrCodes = body.getAddrCode();
         List<String> typeCodeBys = body.getTypeCodeBy();

+ 20 - 4
ruoyi-demo/src/main/java/com/ruoyi/demo/controller/CategoryCotroller.java

@@ -15,25 +15,41 @@ public class CategoryCotroller {
     @Autowired
     CategoryService categoryService;
 
-//    获取地区信息
+    /**
+     * 获取地区信息
+     *
+     * @return
+     */
     @GetMapping("/getAddrCategory")
     public R getAddrCategory(){
         return R.ok(categoryService.getAddrCategory());
     }
 
-//    获取经营分类
+    /**
+     * 获取经营分类
+     *
+     * @return
+     */
     @GetMapping("/getManageCategory")
     public R getManageCategory(){
         return R.ok(categoryService.getManageCategory());
     }
 
-//    获取网点分类
+    /**
+     * 获取网点分类(犇云)
+     *
+     * @return
+     */
     @GetMapping("/getTypeByCategory")
     public R getTypeByCategoryTest(){
         return R.ok(categoryService.getTypeByCategory());
     }
 
-//    获取网点类型
+    /**
+     * 获取网点类型
+     *
+     * @return
+     */
     @GetMapping("/getWdTypeCategory")
     public R getWdTypeCategory(){
         return R.ok(categoryService.getWdTypeCategory());

+ 21 - 42
ruoyi-demo/src/main/java/com/ruoyi/demo/controller/WdInfoController.java

@@ -1,11 +1,9 @@
 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;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -25,61 +23,42 @@ public class WdInfoController {
     @Autowired
     WdInfoService wdInfoService;
 
-//    获取各地区网点分类分布情况
-//    已废弃
-//    @PostMapping("/categoryDistribution")
-//    public R categoryDistribution(ListQueryBody body){
-//        List<String> addrCodes = body.getAddrCode();
-//        List<String> typeCodes = body.getTypeCode();
-//        return R.ok(wdInfoService.searchAddrTypeDistribution(addrCodes,typeCodes));
-//    }
-
-//    获取各地区网点类型分布情况
-//    已废弃
-//    @PostMapping("/wdTypeDistribution")
-//    public R wdTypeDistribution(ListQueryBody body){
-//        List<String> addrCodes = body.getAddrCode();
-//        List<String> typeCodes = body.getTypeCode();
-//        return R.ok(wdInfoService.searchWdTypeDistribution(addrCodes,typeCodes));
-//    }
-
-//    获取所有网点类型网点数量(降序)
-//    已废弃
-//    @GetMapping("/total")
-//    public R total(){
-//        return R.ok(wdInfoService.searchWdTotal());
-//    }
-
-    //    网点数量新增情况
+    /**
+     * 网点数量新增情况
+     *
+     * @param body 地址码和网点类型码查询请求体
+     * @return
+     */
     @PostMapping("/addStatus")
-    public R addStatus(ListQueryBody body){
+    public R addStatus(ListQueryBody body) {
         List<String> addrCode = body.getAddrCode();
         List<String> typeCode = body.getTypeCode(); // 网点类型
         List<AddStatusVo> addStatusVos = wdInfoService.searchAddStatus(addrCode, typeCode);
         return R.ok(addStatusVos);
     }
 
-    //    近期各地区网点开关数量变化情况
-    @PostMapping("/opclose")
-    public R opclose(@RequestBody ListQueryBody body){
-        List<String> addrCode = body.getAddrCode();
-        List<String> wdTypeCode = body.getTypeCode(); // 网点类型
-        List<WdOpcloseVo> wdOpcloseVos = wdInfoService.searchWdOpcloses(addrCode, wdTypeCode);
-        return R.ok(wdOpcloseVos);
-    }
-
-    // 各地区网点开店时间分布情况
+    /**
+     * 各地区网点开店时间分布情况
+     *
+     * @param body 地址码和网点类型(犇云)码查询请求体
+     * @return
+     */
     @PostMapping("/opentime")
-    public R openTime (@RequestBody ListQueryBody body) {
+    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);
     }
 
-    // 各地区网点关店时间分布情况
+    /**
+     * 各地区网点关店时间分布情况
+     *
+     * @param body 地址码和网点类型(犇云)码查询请求体
+     * @return
+     */
     @PostMapping("/closetime")
-    public R closeTime (@RequestBody ListQueryBody body) {
+    public R closeTime(@RequestBody ListQueryBody body) {
         List<String> addrCodes = body.getAddrCode();
         List<String> typeCodeBys = body.getTypeCodeBy();
         List<OpcloseTimeVo> vos = wdInfoService.searchCloseTimes(addrCodes, typeCodeBys);

+ 99 - 47
ruoyi-demo/src/main/java/com/ruoyi/demo/controller/WorkTableController.java

@@ -1,11 +1,8 @@
 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;
@@ -18,7 +15,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
-import java.util.List;
+import javax.validation.constraints.NotBlank;
 
 @Validated
 @RequiredArgsConstructor
@@ -32,65 +29,85 @@ public class WorkTableController {
     @Autowired
     BusinessOpportunitiesService businessOpportunitiesService;
 
-//    获取数据概览
+    /**
+     * 获取数据概览
+     *
+     * @param bo 开始时间和截止时间查询请求体
+     * @return
+     */
     @PostMapping("/databack/about")
-    public R about(@RequestBody WorkTableBo vo){
+    public R about(@RequestBody WorkTableBo bo) {
         // 获取用户id
         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,vo);
-        return R.ok(bo);
+        return R.ok(databackService.searchAbout(userId, bo));
     }
 
-//    获取客户数量变化趋势
+    /**
+     * 获取客户数量变化趋势
+     *
+     * @param condition 条件
+     * @return
+     */
     @GetMapping("/databack/trend")
-    public R trend(String condition){
+    public R trend(String condition) {
         // 获取用户id
         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,condition);
-        return R.ok(bos);
+        return R.ok(databackService.searchTrand(userId, condition));
     }
 
-//    分页获取潜客列表
+    /**
+     * 分页获取潜客列表
+     *
+     * @param bo 请求体
+     * @return
+     */
     @PostMapping("/pool/list")
-    public R poolList(WorkTableSearchVo workTableSearchVo){
+    public R poolList(WorkTableSearchVo bo) {
         // 获取用户id
         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);
-        return R.ok(listPageInfo);
+        return R.ok(attentionPoolService.searchList(bo, userId));
     }
 
-//    取消关注
+    /**
+     * 取消关注
+     *
+     * @param attentionId 潜客id
+     * @return
+     */
     @DeleteMapping("/pool")
-    public R cancel(String attentionId){
+    public R cancel(@NotBlank String attentionId) {
         // 获取用户id
         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(""))
-            return R.fail("attentionId不能为空");
         int flag = attentionPoolService.cancelAttention(attentionId, userId);
         if (flag == 1)
             return R.ok("取消关注成功!");
         return R.fail("取消关注失败。");
     }
 
-//    转化商机
+    /**
+     * 转化商机
+     *
+     * @param turnVo
+     * @return
+     */
     @PostMapping("/pool")
-    public R turn(TurnBusinessOpportunitiesVo turnVo){
+    public R turn(TurnBusinessOpportunitiesVo turnVo) {
         // 获取用户id
         String loginId = String.valueOf(StpUtil.getLoginId());
         Long userid = Long.valueOf(loginId.split(":")[1]);
@@ -105,33 +122,48 @@ public class WorkTableController {
         return R.fail("转化失败。");
     }
 
-//    分页获取线索列表
+    /**
+     * 分页获取线索列表
+     *
+     * @param vo
+     * @return
+     */
     @PostMapping("/clue/list")
-    public R clueList(WorkTableSearchVo vo){
+    public R clueList(WorkTableSearchVo vo) {
         // 获取用户id
         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));
+        return R.ok(businessOpportunitiesService.searchList(vo, userId));
     }
 
-//    分页获取跟进记录
+    /**
+     * 分页获取跟进记录
+     *
+     * @param vo
+     * @return
+     */
     @PostMapping("/follow/list")
-    public R followList(WorkTableSearchVo vo){
+    public R followList(WorkTableSearchVo vo) {
         // 获取用户id
         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));
+        return R.ok(businessOpportunitiesService.searchFollowList(vo, userId));
     }
 
-//    添加跟进记录
+    /**
+     * 添加跟进记录
+     *
+     * @param addVo
+     * @return
+     */
     @PostMapping("/follow")
-    public R followAdd(AddFollowRecordVo addVo){
+    public R followAdd(AddFollowRecordVo addVo) {
         // 获取用户id
         String loginId = String.valueOf(StpUtil.getLoginId());
         Long userid = Long.valueOf(loginId.split(":")[1]);
@@ -144,69 +176,89 @@ public class WorkTableController {
         return R.fail("添加失败");
     }
 
-    //    品牌关注
+    /**
+     * 品牌关注
+     *
+     * @param brandId 品牌id
+     * @return
+     */
     @PostMapping("/brand")
-    public R brandAttention(@RequestParam("brandId") String brandId){
+    public R brandAttention(@RequestParam("brandId") String brandId) {
         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);
-        if (flag == 1){
+        if (flag == 1) {
             return R.ok("关注成功!");
-        }else if (flag == 2){
+        } else if (flag == 2) {
             return R.fail("重复关注。");
-        }else if (flag == 3){
+        } else if (flag == 3) {
             return R.fail("未知品牌");
         }
         return R.fail("关注失败。");
     }
 
-    //    品牌取消关注
+    /**
+     * 品牌取消关注
+     *
+     * @param brandId 品牌id
+     * @return
+     */
     @DeleteMapping("/brand")
-    public R brandCancel(String brandId){
+    public R brandCancel(String brandId) {
         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);
-        if (flag == 1){
+        if (flag == 1) {
             return R.ok("取消关注成功!");
         }
         return R.fail("取消关注失败。");
     }
 
-//    网点关注
+    /**
+     * 网点关注
+     *
+     * @param wdId 网点id
+     * @return
+     */
     @PostMapping("/wdInfo")
-    public R wdInfoAttention(@RequestParam("wdId") String wdId){
+    public R wdInfoAttention(@RequestParam("wdId") String wdId) {
         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);
-        if (flag == 1){
+        int flag = attentionPoolService.attentionWdInfo(wdId, userId);
+        if (flag == 1) {
             return R.ok("关注成功!");
-        }else if (flag == 2){
+        } else if (flag == 2) {
             return R.fail("重复关注。");
-        }else if (flag == 3){
+        } else if (flag == 3) {
             return R.fail("未知网点");
         }
         return R.fail("关注失败。");
     }
 
-//    网点取消关注
+    /**
+     * 网点取消关注
+     *
+     * @param wdId 网点id
+     * @return
+     */
     @DeleteMapping("/wdInfo")
-    public R wdInfoCancel(@RequestParam("wdId") String wdId){
+    public R wdInfoCancel(@RequestParam("wdId") String wdId) {
         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);
-        if (flag == 1){
+        if (flag == 1) {
             return R.ok("取消关注成功!");
         }
         return R.fail("取消关注失败。");

+ 2 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/entity/Brand.java

@@ -23,6 +23,8 @@ public class Brand implements Serializable {
     private String brandImg;
     @TableField("brand_name")
     private String brandName;
+    @TableField("business_model")
+    private String businessModel;
     @TableField("industry_code")
     private String industryCode;
     @TableField("enterprise_usci")

+ 9 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/entity/BrandCity.java

@@ -1,5 +1,6 @@
 package com.ruoyi.demo.entity;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
@@ -14,13 +15,21 @@ import java.time.LocalDateTime;
 @Data
 @TableName("bl_brand_city_distribution")
 public class BrandCity implements Serializable {
+    @TableField("dis_id")
     private String disId;
+    @TableField("brand_id")
     private String brandId;
+    @TableField("addr_code")
     private String addrCode;
+    @TableField("city")
     private String city;
+    @TableField("lat")
     private Float lat;
+    @TableField("lng")
     private Float lng;
+    @TableField("dis_count")
     private Integer disCount;
+    @TableField("update_time")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @JsonSerialize(using = LocalDateTimeSerializer.class)
     @JsonDeserialize(using = LocalDateTimeDeserializer.class)

+ 9 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/entity/BrandProvince.java

@@ -1,5 +1,6 @@
 package com.ruoyi.demo.entity;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
@@ -14,13 +15,21 @@ import java.time.LocalDateTime;
 @Data
 @TableName("bl_brand_province_distribution")
 public class BrandProvince implements Serializable {
+    @TableField("dis_id")
     private String disId;
+    @TableField("brand_id")
     private String brandId;
+    @TableField("addr_code")
     private String addrCode;
+    @TableField("province")
     private String province;
+    @TableField("lat")
     private Float lat;
+    @TableField("lng")
     private Float lng;
+    @TableField("dis_count")
     private Integer disCount;
+    @TableField("update_time")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @JsonSerialize(using = LocalDateTimeSerializer.class)
     @JsonDeserialize(using = LocalDateTimeDeserializer.class)

+ 18 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/entity/IndustryCategory.java

@@ -0,0 +1,18 @@
+package com.ruoyi.demo.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+@Data
+@TableName("ddt_industry_category")
+public class IndustryCategory {
+    @TableField("industry_code")
+    private String industryCode;
+    @TableField("big_category")
+    private String bigCategory;
+    @TableField("mid_category")
+    private String midCategory;
+    @TableField("sub_category")
+    private String subCategory;
+}

+ 14 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/entity/bo/AttentionPoolBo.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.AttentionPool;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -22,4 +23,17 @@ public class AttentionPoolBo implements Serializable {
     @JsonSerialize(using = LocalDateTimeSerializer.class)
     @JsonDeserialize(using = LocalDateTimeDeserializer.class)
     private LocalDateTime attentionTime;
+
+    public AttentionPoolBo() {
+    }
+
+    public AttentionPoolBo(AttentionPool pool) {
+        this.attentionId = pool.getAttentionId();
+        this.contact = pool.getContact();
+        this.telephone = pool.getTelephone();
+        this.wdName = pool.getWdName();
+        this.wdAddrInfo = pool.getWdAddrInfo();
+        this.brandName = pool.getBrandName();
+        this.attentionTime = pool.getAttentionTime();
+    }
 }

+ 19 - 8
ruoyi-demo/src/main/java/com/ruoyi/demo/entity/bo/AttentionPoolStatisticsBo.java

@@ -1,15 +1,9 @@
 package com.ruoyi.demo.entity.bo;
 
-import com.fasterxml.jackson.annotation.JsonFormat;
-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;
-import java.time.LocalDateTime;
 
 @Data
 public class AttentionPoolStatisticsBo implements Serializable {
@@ -19,12 +13,29 @@ public class AttentionPoolStatisticsBo implements Serializable {
     private Integer offlineCount;
     private String time;
 
-    public AttentionPoolStatisticsBo () {}
-    public AttentionPoolStatisticsBo (AttentionPoolStatistics statistics) {
+    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();
     }
+
+    public AttentionPoolStatisticsBo(String time) {
+        this.attentionCount = 0;
+        this.clueCount = 0;
+        this.onlineCount = 0;
+        this.offlineCount = 0;
+        this.time = time;
+    }
+
+    public AttentionPoolStatisticsBo(Integer attentionCount, Integer clueCount, Integer onlineCount, Integer offlineCount) {
+        this.attentionCount = attentionCount;
+        this.clueCount = clueCount;
+        this.onlineCount = onlineCount;
+        this.offlineCount = offlineCount;
+    }
 }

+ 17 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/entity/bo/BrandDisItem.java

@@ -1,5 +1,7 @@
 package com.ruoyi.demo.entity.bo;
 
+import com.ruoyi.demo.entity.BrandCity;
+import com.ruoyi.demo.entity.BrandZone;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -9,4 +11,19 @@ public class BrandDisItem implements Serializable {
     private String code;
     private String name;
     private Integer count;
+
+    public BrandDisItem() {
+    }
+
+    public BrandDisItem(BrandZone zone) {
+        this.code = zone.getAddrCode();
+        this.name = zone.getZone();
+        this.count = zone.getDisCount();
+    }
+
+    public BrandDisItem(BrandCity city) {
+        this.code = city.getAddrCode();
+        this.name = city.getCity();
+        this.count = city.getDisCount();
+    }
 }

+ 24 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/entity/bo/BrandDistribution.java

@@ -1,5 +1,6 @@
 package com.ruoyi.demo.entity.bo;
 
+import com.ruoyi.demo.entity.BrandStatistics;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -13,4 +14,27 @@ public class BrandDistribution implements Serializable {
     private String coverCityRatio;
     private Integer coverZoneCount;
     private String coverZoneRatio;
+
+    public BrandDistribution() {
+    }
+
+    public BrandDistribution(BrandStatistics statistics, int province, int city, int zone) {
+        int cpc = statistics.getCoverProvinceCount();
+        int ccc = statistics.getCoverCityCount();
+        int czc = statistics.getCoverZoneCount();
+        float provinceRatio = (float) cpc / province;
+        float cityRatio = (float) ccc / city;
+        float zoneRatio = (float) czc / zone;
+
+        this.coverProvinceCount = cpc;
+        this.coverProvinceRatio = (int) (provinceRatio * 100) + "%";
+
+        this.coverCityCount = ccc;
+        this.coverCityRatio = (int) (cityRatio * 100) + "%";
+
+        this.coverZoneCount = czc;
+        this.coverZoneRatio = (int) (zoneRatio * 100) + "%";
+
+        this.total = statistics.getTotal();
+    }
 }

+ 15 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/entity/bo/BrandGeoLabelBo.java

@@ -10,4 +10,19 @@ public class BrandGeoLabelBo implements Serializable {
     private String name;
     private Integer total;
     private String ratio;
+
+    public BrandGeoLabelBo() {
+    }
+
+    public BrandGeoLabelBo(String name, Integer total, int count) {
+        this.name = name;
+        if (total == null) {
+            this.total = 0;
+            ratio = "0%";
+        } else {
+            this.total = total;
+            float ratio = (float) total / count;
+            this.ratio = ratio + "%";
+        }
+    }
 }

+ 26 - 2
ruoyi-demo/src/main/java/com/ruoyi/demo/entity/bo/BrandInfo.java

@@ -1,31 +1,55 @@
 package com.ruoyi.demo.entity.bo;
 
-import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
 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.Brand;
+import com.ruoyi.demo.entity.Enterprise;
 import lombok.Data;
 
 import java.io.Serializable;
 import java.time.LocalDateTime;
 
 @Data
-@TableName("ddt_origin_brand")
 public class BrandInfo implements Serializable {
     private String brandId;
     private String brandName;
     private String brandImg;
+    private String industryName;
+    private String businessModel;
     private Float indexScore;
     private String enterpriseUsci;
     private String enterpriseName;
     private String addrInfo;
     private String addrCode;
+    private String contact;
     private String telephone;
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @JsonSerialize(using = LocalDateTimeSerializer.class)
     @JsonDeserialize(using = LocalDateTimeDeserializer.class)
     private LocalDateTime updateTime;
     private Integer attention;
+
+    public BrandInfo() {
+    }
+
+    public BrandInfo(Brand brand, Enterprise enterprise) {
+        this.brandId = brand.getBrandId();
+        this.brandName = brand.getBrandName();
+        this.brandImg = brand.getBrandImg();
+        this.businessModel = brand.getBusinessModel();
+        this.indexScore = brand.getIndexScore();
+        if (enterprise != null) {
+            this.enterpriseUsci = enterprise.getEnterpriseUsci();
+            this.enterpriseName = enterprise.getEnterpriseName();
+            this.addrCode = enterprise.getAddrCode();
+            this.addrInfo = enterprise.getAddrInfo();
+        }
+        this.contact = brand.getContact();
+        this.telephone = brand.getTelephone();
+        this.updateTime = brand.getUpdateTime();
+        this.attention = 0;
+    }
 }

+ 15 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/entity/bo/BrandProvinceBo.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.BrandProvince;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -22,4 +23,18 @@ public class BrandProvinceBo implements Serializable {
     @JsonSerialize(using = LocalDateTimeSerializer.class)
     @JsonDeserialize(using = LocalDateTimeDeserializer.class)
     private LocalDateTime updateTime;
+
+    public BrandProvinceBo() {
+    }
+
+    public BrandProvinceBo(BrandProvince province, Integer total) {
+        // this.brandId = province.getBrandId();
+        this.code = province.getAddrCode();
+        this.name = province.getProvince();
+        this.location = province.getLat().toString() + "," + province.getLng().toString();
+        this.count = province.getDisCount();
+        float ratio = (float) province.getDisCount() / total;
+        this.ratio = (ratio * 100) + "%";
+        this.updateTime = province.getUpdateTime();
+    }
 }

+ 11 - 2
ruoyi-demo/src/main/java/com/ruoyi/demo/entity/bo/BrandSimilar.java

@@ -1,18 +1,17 @@
 package com.ruoyi.demo.entity.bo;
 
-import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
 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.Brand;
 import lombok.Data;
 
 import java.io.Serializable;
 import java.time.LocalDateTime;
 
 @Data
-@TableName("ddt_origin_brand")
 public class BrandSimilar implements Serializable {
     private String brandId;
     private String brandName;
@@ -21,4 +20,14 @@ public class BrandSimilar implements Serializable {
     @JsonSerialize(using = LocalDateTimeSerializer.class)
     @JsonDeserialize(using = LocalDateTimeDeserializer.class)
     private LocalDateTime updateTime;
+
+    public BrandSimilar() {
+    }
+
+    public BrandSimilar(Brand brand) {
+        this.brandId = brand.getBrandId();
+        this.brandName = brand.getBrandName();
+        this.brandImg = brand.getBrandImg();
+        this.updateTime = brand.getUpdateTime();
+    }
 }

+ 8 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/entity/bo/BrandStatus.java

@@ -8,4 +8,12 @@ import java.io.Serializable;
 public class BrandStatus implements Serializable {
     private String businessStatus;
     private Integer count;
+
+    public BrandStatus() {
+    }
+
+    public BrandStatus(String status, Integer count) {
+        this.businessStatus = status;
+        this.count = count;
+    }
 }

+ 11 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/entity/bo/BrandTotal.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.BrandStatistics;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -19,4 +20,14 @@ public class BrandTotal implements Serializable {
     @JsonSerialize(using = LocalDateTimeSerializer.class)
     @JsonDeserialize(using = LocalDateTimeDeserializer.class)
     private LocalDateTime updateTime;
+
+    public BrandTotal() {
+    }
+
+    public BrandTotal(BrandStatistics bs) {
+        this.brandId = bs.getBrandId();
+        this.brandName = bs.getBrandName();
+        this.total = bs.getTotal();
+        this.updateTime = bs.getUpdateTime();
+    }
 }

+ 13 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/entity/bo/BusinessOpportunitiesClueBo.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.BusinessOpportunitiesClue;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -21,4 +22,16 @@ public class BusinessOpportunitiesClueBo implements Serializable {
     @JsonSerialize(using = LocalDateTimeSerializer.class)
     @JsonDeserialize(using = LocalDateTimeDeserializer.class)
     private LocalDateTime createTime;
+
+    public BusinessOpportunitiesClueBo() {
+    }
+
+    public BusinessOpportunitiesClueBo(BusinessOpportunitiesClue clue) {
+        this.clueId = clue.getClueId();
+        this.attentionId = clue.getAttentionId();
+        this.contact = clue.getContact();
+        this.telephone = clue.getTelephone();
+        this.followUpCount = clue.getFollowUpCount();
+        this.createTime = clue.getCreateTime();
+    }
 }

+ 12 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/entity/bo/FollowUpRecordBo.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.FollowUpRecord;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -20,4 +21,15 @@ public class FollowUpRecordBo implements Serializable {
     @JsonSerialize(using = LocalDateTimeSerializer.class)
     @JsonDeserialize(using = LocalDateTimeDeserializer.class)
     private LocalDateTime followTime;
+
+    public FollowUpRecordBo() {
+    }
+
+    public FollowUpRecordBo(FollowUpRecord record) {
+        this.recordId = record.getRecordId();
+        this.way = record.getFollowWay();
+        this.content = record.getFollowContent();
+        this.person = record.getFollowPerson();
+        this.followTime = record.getFollowTime();
+    }
 }

+ 0 - 14
ruoyi-demo/src/main/java/com/ruoyi/demo/entity/bo/WdAddrTypeDistribution.java

@@ -1,14 +0,0 @@
-package com.ruoyi.demo.entity.bo;
-
-import lombok.Data;
-
-import java.io.Serializable;
-
-@Data
-public class WdAddrTypeDistribution implements Serializable {
-    private String typeCode;
-    private String typeName;
-    private String addrCode;
-    private String addrName;
-    private Integer count;
-}

+ 0 - 16
ruoyi-demo/src/main/java/com/ruoyi/demo/entity/vo/BrandOpcloseVo.java

@@ -1,16 +0,0 @@
-package com.ruoyi.demo.entity.vo;
-
-import lombok.Data;
-
-import java.io.Serializable;
-
-@Data
-public class BrandOpcloseVo implements Serializable {
-    private String brandId;
-
-    private String brandName;
-
-    private Integer count;
-
-    private String ratio;
-}

+ 0 - 31
ruoyi-demo/src/main/java/com/ruoyi/demo/entity/vo/WdOpcloseVo.java

@@ -1,31 +0,0 @@
-package com.ruoyi.demo.entity.vo;
-
-import com.ruoyi.demo.entity.WdOpclose;
-import lombok.Data;
-
-import java.io.Serializable;
-
-@Data
-public class WdOpcloseVo implements Serializable {
-    private String addrCode;
-
-    private String addrName;
-
-    private Integer openCount;
-
-    private Integer closeCount;
-
-    public WdOpcloseVo(){}
-
-    public WdOpcloseVo(WdOpclose wdOpclose){
-        this.addrCode = wdOpclose.getAddrCode();
-        this.openCount = wdOpclose.getOpenCount();
-        this.closeCount = wdOpclose.getCloseCount();
-    }
-
-    public WdOpcloseVo(String addrCode, WdOpclose wdOpclose){
-        this.addrCode = addrCode;
-        this.openCount = wdOpclose.getOpenCount();
-        this.closeCount = wdOpclose.getCloseCount();
-    }
-}

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

@@ -5,17 +5,23 @@ 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
 public interface AttentionPoolDao extends BaseMapper<AttentionPool> {
     int searchCountByUserId(String userId);
+
     List<AttentionPool> searchByMulti(@Param("text") String text, @Param("userId") String userId);
+
     int deleteByAttentionIdAndUserId(@Param("attentionId") String attentionId, @Param("userId") String userId);
+
     AttentionPool searchByAttentionIdAndUserId(@Param("attentionId") String attentionId, @Param("userId") String userId);
+
     AttentionPool searchByBrandIdOrWdIdAndUserId(@Param("brandId") String brandId, @Param("wdId") String wdId, @Param("userId") String userId);
+
     int deleteByBrandIdOrWdIdAndUserId(@Param("brandId") String brandId, @Param("wdId") String wdId, @Param("userId") String userId);
+
     Integer selectCount(@Param("userId") String userId);
+
     List<String> selectAllUser();
 }

+ 2 - 2
ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/BrandCityMapper.java

@@ -1,11 +1,11 @@
 package com.ruoyi.demo.mapper;
 
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ruoyi.demo.entity.BrandCity;
 import org.apache.ibatis.annotations.Mapper;
 
 import java.util.List;
 
 @Mapper
-public interface BrandCityMapper {
-    List<BrandCity> searchByBrandId(String brandId);
+public interface BrandCityMapper extends BaseMapper<BrandCity> {
 }

+ 1 - 2
ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/BrandMapper.java

@@ -12,9 +12,8 @@ import java.util.List;
 
 @Mapper
 public interface BrandMapper extends BaseMapper<Brand> {
-    List<Brand> searchList(String text);
-    Brand searchById(String brandId);
     List<Brand> searchByIndustryCodeList(String brandId, String industryCode);
+
     List<BrandSearch> searchSearchByMulti(@Param("text") String text, @Param("industryCode") List<String> industryCode, @Param("countUp") Integer countUp, @Param("countDown") Integer countDown, @Param("coverUp") Integer coverUp, @Param("coverDown") Integer coverDown);
 
     //管理中心:品牌回收站

+ 2 - 2
ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/BrandProvinceMapper.java

@@ -1,11 +1,11 @@
 package com.ruoyi.demo.mapper;
 
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ruoyi.demo.entity.BrandProvince;
 import org.apache.ibatis.annotations.Mapper;
 
 import java.util.List;
 
 @Mapper
-public interface BrandProvinceMapper {
-    List<BrandProvince> searchByBrandId(String brandId);
+public interface BrandProvinceMapper extends BaseMapper<BrandProvince> {
 }

+ 2 - 3
ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/BrandStatisticsMapper.java

@@ -1,12 +1,11 @@
 package com.ruoyi.demo.mapper;
 
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ruoyi.demo.entity.BrandStatistics;
 import org.apache.ibatis.annotations.Mapper;
 
 import java.util.List;
 
 @Mapper
-public interface BrandStatisticsMapper {
-    BrandStatistics searchByBrandId(String brandId);
-    List<BrandStatistics> searchList();
+public interface BrandStatisticsMapper extends BaseMapper<BrandStatistics> {
 }

+ 0 - 16
ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/BrandStoreOpcloseDao.java

@@ -1,16 +0,0 @@
-package com.ruoyi.demo.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.ruoyi.demo.entity.BrandStoreOpclose;
-import com.ruoyi.demo.entity.vo.BrandOpcloseVo;
-import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Param;
-
-import java.time.LocalDateTime;
-import java.util.List;
-
-@Mapper
-public interface BrandStoreOpcloseDao extends BaseMapper<BrandStoreOpclose> {
-    List<BrandOpcloseVo> selectOpenByMulti(@Param("typeCodes") List<String> typeCodes, @Param("startTime") LocalDateTime startTime, @Param("endTime") LocalDateTime endTime);
-    List<BrandOpcloseVo> selectCloseByMulti(@Param("typeCodes") List<String> typeCodes, @Param("startTime") LocalDateTime startTime, @Param("endTime") LocalDateTime endTime);
-}

+ 4 - 3
ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/BrandZoneMapper.java

@@ -1,6 +1,7 @@
 package com.ruoyi.demo.mapper;
 
 
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ruoyi.demo.entity.BrandZone;
 import com.ruoyi.demo.entity.bo.BrandAddrDistribution;
 import org.apache.ibatis.annotations.Mapper;
@@ -9,8 +10,8 @@ import org.apache.ibatis.annotations.Param;
 import java.util.List;
 
 @Mapper
-public interface BrandZoneMapper {
-    List<BrandZone> searchByBrandId(String brandId);
-    List<BrandZone> searchByMulti(@Param("addrCodes") List<String> addrCodes,@Param("industryCodes") List<String> industryCodes,@Param("brandIds") List<String> brandIds);
+public interface BrandZoneMapper extends BaseMapper<BrandZone> {
+    List<BrandZone> searchByMulti(@Param("addrCodes") List<String> addrCodes, @Param("industryCodes") List<String> industryCodes, @Param("brandIds") List<String> brandIds);
+
     List<BrandAddrDistribution> searchByAddrCodeGroup(@Param("addrCodes") List<String> addrCodes);
 }

+ 6 - 3
ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/BusinessOpportunitiesDao.java

@@ -10,9 +10,12 @@ import java.util.List;
 @Mapper
 public interface BusinessOpportunitiesDao extends BaseMapper<BusinessOpportunitiesClue> {
     int searchCountByUserId(@Param("userId") String userId);
+
     BusinessOpportunitiesClue searchByClueIdOrAttentionIdAndUserId(@Param("clueId") String clueId, @Param("attentionId") String attentionId, @Param("userId") String userId);
-    int deleteByAttentionIdAndUserId(@Param("attentionId")String attentionId, @Param("userId") String userId);
-    List<BusinessOpportunitiesClue> searchAllByMulti(@Param("text") String text, @Param("userId") String userId);
-    int updateFollowUpCountByClueIdAndUserId(@Param("clueId") String clueId, @Param("count") Integer count , @Param("userId") String userId);
+
+    int deleteByAttentionIdAndUserId(@Param("attentionId") String attentionId, @Param("userId") String userId);
+
+    int updateFollowUpCountByClueIdAndUserId(@Param("clueId") String clueId, @Param("count") Integer count, @Param("userId") String userId);
+
     Integer selectCount(@Param("userId") String userId);
 }

+ 2 - 2
ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/EnterpriseMapper.java

@@ -1,9 +1,9 @@
 package com.ruoyi.demo.mapper;
 
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ruoyi.demo.entity.Enterprise;
 import org.apache.ibatis.annotations.Mapper;
 
 @Mapper
-public interface EnterpriseMapper {
-    Enterprise searchByUsci(String EnterpriseUsci);
+public interface EnterpriseMapper extends BaseMapper<Enterprise> {
 }

+ 5 - 1
ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/FollowUpDao.java

@@ -10,8 +10,12 @@ import java.util.List;
 @Mapper
 public interface FollowUpDao extends BaseMapper<FollowUpRecord> {
     int searchCountByUserIdAndWay(@Param("userId") String userId, @Param("way") String way);
+
     List<FollowUpRecord> searchAllByClueIdAndUserId(@Param("clueId") String clueId, @Param("userId") String userId);
+
     int deleteByClueIdAndUserId(@Param("clueId") String clueId, @Param("userId") String userId);
-    List<FollowUpRecord> searchAllByMulti(@Param("clueId") String clueId,@Param("text") String text, @Param("startTime") String startTime, @Param("endTime") String endTime, @Param("userId") String userId);
+
+    List<FollowUpRecord> searchAllByMulti(@Param("clueId") String clueId, @Param("text") String text, @Param("startTime") String startTime, @Param("endTime") String endTime, @Param("userId") String userId);
+
     Integer selectCountByWay(@Param("userId") String userId, @Param("way") String way);
 }

+ 9 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/IndustryCategoryDao.java

@@ -0,0 +1,9 @@
+package com.ruoyi.demo.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.demo.entity.IndustryCategory;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface IndustryCategoryDao extends BaseMapper<IndustryCategory> {
+}

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

@@ -11,9 +11,14 @@ 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);
+
     List<String> selectIns();
+
     List<StoreWdOpclose> selectStatistics(@Param("notIns") List<String> notIns);
 }

+ 0 - 5
ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/WdInfoMapper.java

@@ -3,7 +3,6 @@ package com.ruoyi.demo.mapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 
 import com.ruoyi.demo.entity.WdInfo;
-import com.ruoyi.demo.entity.bo.WdAddrTypeDistribution;
 import com.ruoyi.demo.entity.vo.AddStatusVo;
 import com.ruoyi.demo.entity.vo.WdInfoVo;
 import org.apache.ibatis.annotations.Mapper;
@@ -13,10 +12,6 @@ import java.util.List;
 
 @Mapper
 public interface WdInfoMapper extends BaseMapper<WdInfo> {
-    List<WdAddrTypeDistribution> searchAddrDisByMulti(@Param("addrCodes") List<String> addrCodes, @Param("typeCodes") List<String> typeCodes);
-    List<WdAddrTypeDistribution> searchWdTypeDisByMulti(@Param("addrCodes") List<String> addrCodes,@Param("typeCodes") List<String> typeCodes);
-    List<WdAddrTypeDistribution> searchWdTotal();
-
     List<WdInfo> list(WdInfoVo wdInfoVo);
 
     void recoverWd(String wdId);

+ 0 - 5
ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/WdOpcloseDao.java

@@ -3,12 +3,7 @@ package com.ruoyi.demo.mapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ruoyi.demo.entity.WdOpclose;
 import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Param;
-
-import java.time.LocalDateTime;
-import java.util.List;
 
 @Mapper
 public interface WdOpcloseDao extends BaseMapper<WdOpclose> {
-    WdOpclose selectListByAddrCodeAndWdTypeCodes(@Param("addrCode") String addrCode, @Param("wdTypeCodes") List<String> wdTypeCodes, @Param("time") LocalDateTime time);
 }

+ 6 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/service/AttentionPoolService.java

@@ -9,10 +9,16 @@ import java.util.List;
 
 public interface AttentionPoolService {
     PageInfo<List<AttentionPoolBo>> searchList(WorkTableSearchVo workVo, String userId);
+
     int cancelAttention(String attentionId, String userId);
+
     int turnBusinessOpportunities(TurnBusinessOpportunitiesVo turnVo, String userId);
+
     int attentionBrand(String brandId, String userId);
+
     int cancelBrand(String brnadId, String userId);
+
     int attentionWdInfo(String wdId, String userId);
+
     int cancelWdInfo(String wdId, String userId);
 }

+ 16 - 8
ruoyi-demo/src/main/java/com/ruoyi/demo/service/BrandService.java

@@ -5,33 +5,41 @@ import com.github.pagehelper.PageInfo;
 
 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;
 import java.util.Map;
 
 public interface BrandService {
     List<BrandSearch> searchByLikeName(String text);
+
     BrandInfo searchByBrandId(String brandId, String userId);
+
     BrandProperty searchPropertyByBrandId(String brandId);
+
     List<BrandSimilar> searchSimilarByBrandId(String brandId);
+
     List<BrandStatus> searchStatusByBrandId(String brandId);
+
     BrandDistribution searchDistributionByBrandId(String brandId);
+
     List<BrandProvinceBo> searchProvinceByBrandId(String brandId);
+
     BrandDisCloud searchDisCloudByBrandId(String brandId);
+
     PageInfo<List<BrandSearch>> searchListByMulti(ListQueryBody body, String userId);
+
     List<BrandTotal> searchTotal(Integer pageSize);
-//    BStoreData searchAvgScoreByBrandId(String brandId);
-//    List<BrandAddrDistribution> searchAddrDistribution(List<String> addrCodes);
+
     List<BrandGeoLabelBo> searchGeoLabel(String brandId);
-    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);
-    Map<String,List<BrandEvolveVo>> searchEvolveByMulti2Map(List<String> addrCodes, List<String> typeCodes, List<String> brandIds);
+
+    Map<String, List<BrandEvolveVo>> searchEvolveByMulti2Map(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);
+
+    List<OpcloseTimeVo> searchCloseTims(List<String> brandIds, List<String> addrCodes, List<String> typeCodeBys);
 
 }

+ 2 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/service/BusinessOpportunitiesService.java

@@ -11,6 +11,8 @@ import java.util.List;
 
 public interface BusinessOpportunitiesService {
     PageInfo<List<BusinessOpportunitiesClueBo>> searchList(WorkTableSearchVo workVo, String userId);
+
     PageInfo<List<FollowUpRecordBo>> searchFollowList(WorkTableSearchVo workVo, String userId);
+
     int addFollow(AddFollowRecordVo addVo, String userId);
 }

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

@@ -1,19 +1,14 @@
 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;
 
 public interface WdInfoService {
-    //    List<WdAddrTypeDistribution> searchAddrTypeDistribution(List<String> addrCodes, List<String> typeCodes);
-//    List<WdAddrTypeDistribution> searchWdTypeDistribution(List<String> addrCodes, List<String> typeCodes);
-//    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);
+
+    List<OpcloseTimeVo> searchCloseTimes(List<String> addrCodes, List<String> typeCodeBys);
 }

+ 17 - 18
ruoyi-demo/src/main/java/com/ruoyi/demo/service/impl/AttentionPoolServiceImpl.java

@@ -1,6 +1,7 @@
 package com.ruoyi.demo.service.impl;
 
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 
@@ -41,24 +42,14 @@ public class AttentionPoolServiceImpl implements AttentionPoolService {
         PageHelper.startPage(workVo.getPageNum(),workVo.getPageSize(),true);
         List<AttentionPool> pools = attentionPoolDao.searchByMulti(workVo.getText(), userId);
         List<AttentionPoolBo> bos = new ArrayList<>();
-        for (AttentionPool pool : pools){
-            AttentionPoolBo bo = new AttentionPoolBo();
-            bo.setAttentionId(pool.getAttentionId());
-            bo.setContact(pool.getContact());
-            bo.setTelephone(pool.getTelephone());
-            bo.setBrandName(pool.getBrandName());
-            bo.setWdName(pool.getWdName());
-            bo.setWdAddrInfo(pool.getWdAddrInfo());
-            bo.setAttentionTime(pool.getAttentionTime());
-            bos.add(bo);
-        }
+        pools.forEach(pool -> bos.add(new AttentionPoolBo(pool)));
         return new PageInfo(bos);
     }
 
     @Override
     public int cancelAttention(String attentionId, String userId) {
         BusinessOpportunitiesClue clue = businessOpportunitiesDao.searchByClueIdOrAttentionIdAndUserId(null, attentionId, userId);
-        if (clue != null){
+        if (clue != null){ // 协同删除
             List<FollowUpRecord> followUpRecords = followUpDao.searchAllByClueIdAndUserId(clue.getClueId(), userId);
             if (!followUpRecords.isEmpty())
                 followUpDao.deleteByClueIdAndUserId(clue.getClueId(), userId);
@@ -73,9 +64,9 @@ public class AttentionPoolServiceImpl implements AttentionPoolService {
         if (pool == null)
             return 0;
         BusinessOpportunitiesClue businessOpportunitiesClue = businessOpportunitiesDao.searchByClueIdOrAttentionIdAndUserId(null, turnVo.getAttentionId(), userId);
-        if (businessOpportunitiesClue != null){
+        if (businessOpportunitiesClue != null)
             return 2;
-        }
+
         BusinessOpportunitiesClue clue = new BusinessOpportunitiesClue();
         clue.setClueId(UUID.randomUUID().toString().replace("-",""));
         clue.setAttentionId(turnVo.getAttentionId());
@@ -92,7 +83,11 @@ public class AttentionPoolServiceImpl implements AttentionPoolService {
         AttentionPool attentionPool = attentionPoolDao.searchByBrandIdOrWdIdAndUserId(brandId,null, userId);
         if (attentionPool != null) // 判断是否已经关注
             return 2;
-        Brand brand = brandMapper.searchById(brandId);
+
+        QueryWrapper<Brand> brandQueryWrapper = new QueryWrapper<>();
+        brandQueryWrapper.eq("brand_id",brandId)
+            .eq("show_delete",0);
+        Brand brand = brandMapper.selectOne(brandQueryWrapper);
         if (brand == null) // 判断是否有该品牌
             return 3;
         AttentionPool pool = new AttentionPool();
@@ -119,7 +114,7 @@ public class AttentionPoolServiceImpl implements AttentionPoolService {
         if (attentionPool == null)
             return 1;
         BusinessOpportunitiesClue clue = businessOpportunitiesDao.searchByClueIdOrAttentionIdAndUserId(null, attentionPool.getAttentionId(), userId);
-        if (clue != null){
+        if (clue != null){ // 协同删除
             if (followUpDao.deleteByClueIdAndUserId(clue.getClueId(), userId) == 0)
                 return 0;
             if (businessOpportunitiesDao.deleteByAttentionIdAndUserId(attentionPool.getAttentionId(),userId) == 0)
@@ -141,6 +136,7 @@ public class AttentionPoolServiceImpl implements AttentionPoolService {
         pool.setWdId(wdInfo.getWdId());
         pool.setWdName(wdInfo.getWdName());
         pool.setWdAddrInfo(wdInfo.getAddrInfo());
+        // 补齐信息
         StoreWd storeWd = storeWdDao.selectById(wdId);
         if (storeWd != null){
             pool.setContact(storeWd.getContact());
@@ -150,7 +146,10 @@ public class AttentionPoolServiceImpl implements AttentionPoolService {
             if (storeWd.getTelephone() == null)
                 pool.setTelephone("");
             if (storeWd.getBrandId() != null || !storeWd.getBrandId().equals("")){
-                Brand brand = brandMapper.searchById(storeWd.getBrandId());
+                QueryWrapper<Brand> brandQueryWrapper = new QueryWrapper<>();
+                brandQueryWrapper.eq("brand_id",storeWd.getBrandId())
+                    .eq("show_delete",0);
+                Brand brand = brandMapper.selectOne(brandQueryWrapper);
                 if (brand != null){
                     pool.setBrandId(brand.getBrandId());
                     pool.setBrandName(brand.getBrandName());
@@ -176,7 +175,7 @@ public class AttentionPoolServiceImpl implements AttentionPoolService {
         if (attentionPool == null)
             return 1;
         BusinessOpportunitiesClue clue = businessOpportunitiesDao.searchByClueIdOrAttentionIdAndUserId(null, attentionPool.getAttentionId(), userId);
-        if (clue != null){
+        if (clue != null){ // 协同删除
             if (followUpDao.deleteByClueIdAndUserId(clue.getClueId(), userId) == 0)
                 return 0;
             if (businessOpportunitiesDao.deleteByAttentionIdAndUserId(attentionPool.getAttentionId(),userId) == 0)

+ 244 - 430
ruoyi-demo/src/main/java/com/ruoyi/demo/service/impl/BrandServiceImpl.java

@@ -38,14 +38,14 @@ public class BrandServiceImpl implements BrandService {
     @Autowired
     CategoryMapper categoryMapper;
     @Autowired
+    IndustryCategoryDao industryCategoryDao;
+    @Autowired
     StoreWdDao storeWdDao;
     @Autowired
     TypeByDao typeByDao;
     @Autowired
     WdInfoServiceImpl wdInfoService;
     @Autowired
-    BrandStoreOpcloseDao storeOpcloseDao;
-    @Autowired
     CategoryUtil categoryUtil;
     @Autowired
     BrandEvolveDao brandEvolveDao;
@@ -59,10 +59,18 @@ public class BrandServiceImpl implements BrandService {
 
     @Override
     public List<BrandSearch> searchByLikeName(String text) {
-        List<Brand> list = brandMapper.searchList(text);
+        // 根据品牌名称模糊查询
+        QueryWrapper<Brand> brandQueryWrapper = new QueryWrapper<>();
+        brandQueryWrapper.like("brand_name", text)
+            .eq("show_delete", 0);
+        List<Brand> list = brandMapper.selectList(brandQueryWrapper);
+
         List<BrandSearch> sList = new ArrayList<>();
-        for (Brand brand : list){
-            Enterprise enterprise = enterpriseMapper.searchByUsci(brand.getEnterpriseUsci());
+        // 补齐品牌的企业信息
+        for (Brand brand : list) {
+            QueryWrapper<Enterprise> enterpriseQueryWrapper = new QueryWrapper<>();
+            enterpriseQueryWrapper.eq("enterprise_usci", brand.getEnterpriseUsci());
+            Enterprise enterprise = enterpriseMapper.selectOne(enterpriseQueryWrapper);
             BrandSearch bs = new BrandSearch();
             bs.setBrandId(brand.getBrandId());
             bs.setBrandName(brand.getBrandName());
@@ -76,116 +84,107 @@ public class BrandServiceImpl implements BrandService {
 
     @Override
     public BrandInfo searchByBrandId(String brandId, String userId) {
-        Brand brand = brandMapper.searchById(brandId);
-        BrandInfo info = new BrandInfo();
-        if (brand != null){
-            Enterprise enterprise = enterpriseMapper.searchByUsci(brand.getEnterpriseUsci());
-            info.setBrandId(brandId);
-            info.setBrandName(brand.getBrandName());
-            info.setBrandImg(brand.getBrandImg());
-            info.setIndexScore(brand.getIndexScore());
-            if (enterprise != null){
-                info.setEnterpriseUsci(enterprise.getEnterpriseUsci());
-                info.setEnterpriseName(enterprise.getEnterpriseName());
-                info.setAddrCode(enterprise.getAddrCode());
-                info.setAddrInfo(enterprise.getAddrInfo());
-            }
-            info.setUpdateTime(brand.getUpdateTime());
-            QueryWrapper<AttentionPool> queryWrapper = new QueryWrapper<>();
-            queryWrapper.eq("brand_id",brandId);
-            queryWrapper.eq("wd_id","");
-            AttentionPool pool = attentionPoolDao.selectOne(queryWrapper);
-            if (pool == null)
-                info.setAttention(0);
-            else
-                info.setAttention(1);
-        }else return null;
+        // 查询品牌
+        QueryWrapper<Brand> brandQueryWrapper = new QueryWrapper<>();
+        brandQueryWrapper.eq("brand_id", brandId)
+            .eq("show_delete", 0);
+        Brand brand = brandMapper.selectOne(brandQueryWrapper);
+
+        if (brand == null)
+            return null;
+        // 查询企业
+        QueryWrapper<Enterprise> enterpriseQueryWrapper = new QueryWrapper<>();
+        enterpriseQueryWrapper.eq("enterprise_usci", brand.getEnterpriseUsci());
+        Enterprise enterprise = enterpriseMapper.selectOne(enterpriseQueryWrapper);
+        // 赋值
+        BrandInfo info = new BrandInfo(brand, enterprise);
+        if (brand.getIndustryCode() != null) {
+            QueryWrapper<IndustryCategory> industryCategoryQueryWrapper = new QueryWrapper<>();
+            industryCategoryQueryWrapper.eq("industry_code", brand.getIndustryCode());
+            IndustryCategory industryCategory = industryCategoryDao.selectOne(industryCategoryQueryWrapper);
+            info.setIndustryName(industryCategory != null ? industryCategory.getSubCategory() : null);
+        } else info.setIndustryName(null);
+        // 是否已经关注
+        QueryWrapper<AttentionPool> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("brand_id", brandId)
+            .eq("wd_id", "");
+        AttentionPool pool = attentionPoolDao.selectOne(queryWrapper);
+        info.setAttention(pool == null ? 0 : 1);
         return info;
     }
 
     @Override
     public BrandProperty searchPropertyByBrandId(String brandId) {
-        BrandStatistics brandStatistics = brandStatisticsMapper.searchByBrandId(brandId);
-        Brand brand = brandMapper.searchById(brandId);
+        // 获取品牌统计信息
+        QueryWrapper<BrandStatistics> statisticsQueryWrapper = new QueryWrapper<>();
+        statisticsQueryWrapper.eq("brand_id", brandId);
+        BrandStatistics brandStatistics = brandStatisticsMapper.selectOne(statisticsQueryWrapper);
+
+        QueryWrapper<Brand> brandQueryWrapper = new QueryWrapper<>();
+        brandQueryWrapper.eq("brand_id", brandId)
+            .eq("show_delete", 0);
+        Brand brand = brandMapper.selectOne(brandQueryWrapper);
+
+        // 赋值
         BrandProperty bp = new BrandProperty();
-        if (brand != null){
+        if (brand != null) {
             bp.setIndustryCode(brand.getIndustryCode());
             if (brand.getIndustryCode() == null || brand.getIndustryCode().equals(""))
                 bp.setIndustryName("");
-            else{
-                Category category = categoryMapper.searchSubIndustryByCode(brand.getIndustryCode());
-                bp.setIndustryName(category.getName());
-            }
+            else
+                bp.setIndustryName(categoryMapper.searchSubIndustryByCode(brand.getIndustryCode()).getName());
             bp.setPerCapitaConsumption(brand.getPerCapitaConsumption());
             bp.setCommentCount(brand.getCommentCount());
             bp.setScore(brand.getScore());
-        }else {
-            bp.setIndustryName("****");
-            bp.setPerCapitaConsumption(null);
-            bp.setCommentCount(null);
-            bp.setScore(null);
-        }
-        if (brandStatistics != null){
-            float activeRatio = (float) brandStatistics.getBusinessCount()/brandStatistics.getTotal();
-            bp.setActiveRatio((int)(activeRatio*100)+"%");
-        }else {
-            bp.setActiveRatio("****");
-        }
+        } else bp.setIndustryName("****");
+        if (brandStatistics != null) {
+            float activeRatio = (float) brandStatistics.getBusinessCount() / brandStatistics.getTotal();
+            bp.setActiveRatio((int) (activeRatio * 100) + "%");
+        } else bp.setActiveRatio("****");
         return bp;
     }
 
     @Override
     public List<BrandSimilar> searchSimilarByBrandId(String brandId) {
-//        先查询品牌id得到industryCode
-        Brand brand = brandMapper.searchById(brandId);
+        // 先查询品牌id得到industryCode
+        QueryWrapper<Brand> brandQueryWrapper = new QueryWrapper<>();
+        brandQueryWrapper.eq("brand_id", brandId)
+            .eq("show_delete", 0);
+        Brand brand = brandMapper.selectOne(brandQueryWrapper);
         if (brand == null)
             return new ArrayList<>();
-//        再根据industryCode得到其他品牌的信息
+
+        // 再根据industryCode得到其他品牌的信息
         if (brand.getIndustryCode() == null)
             return new ArrayList<>();
         List<Brand> brands = brandMapper.searchByIndustryCodeList(brandId, brand.getIndustryCode());
         if (brands.isEmpty())
             return new ArrayList<>();
+
         List<BrandSimilar> similarList = new ArrayList<>();
-        for (Brand b : brands){
-            BrandSimilar bs = new BrandSimilar();
-            bs.setBrandId(b.getBrandId());
-            bs.setBrandImg(b.getBrandImg());
-            bs.setBrandName(b.getBrandName());
-            bs.setUpdateTime(b.getUpdateTime());
-            similarList.add(bs);
-        }
+        brands.forEach(b -> similarList.add(new BrandSimilar(b)));
         return similarList;
     }
 
     @Override
     public List<BrandStatus> searchStatusByBrandId(String brandId) {
 //        查询状态后拆分
-        BrandStatistics statistics = brandStatisticsMapper.searchByBrandId(brandId);
-        if (statistics == null)
-            return new ArrayList<>();
+        QueryWrapper<BrandStatistics> statisticsQueryWrapper = new QueryWrapper<>();
+        statisticsQueryWrapper.eq("brand_id", brandId);
+        BrandStatistics statistics = brandStatisticsMapper.selectOne(statisticsQueryWrapper);
+
+        if (statistics == null) return new ArrayList<>();
         int businessCount = statistics.getBusinessCount();
         int pauseBusinessCount = statistics.getPauseBusinessCount();
         int noBusinessCount = statistics.getNoBusinessCount();
+
         List<BrandStatus> statuses = new ArrayList<>();
-        if (businessCount != 0){
-            BrandStatus status = new BrandStatus();
-            status.setBusinessStatus("正常");
-            status.setCount(businessCount);
-            statuses.add(status);
-        }
-        if (pauseBusinessCount != 0){
-            BrandStatus status = new BrandStatus();
-            status.setBusinessStatus("暂停");
-            status.setCount(pauseBusinessCount);
-            statuses.add(status);
-        }
-        if (noBusinessCount != 0){
-            BrandStatus status = new BrandStatus();
-            status.setBusinessStatus("尚未营业");
-            status.setCount(noBusinessCount);
-            statuses.add(status);
-        }
+        if (businessCount != 0)
+            statuses.add(new BrandStatus("正常", businessCount));
+        if (pauseBusinessCount != 0)
+            statuses.add(new BrandStatus("暂停", pauseBusinessCount));
+        if (noBusinessCount != 0)
+            statuses.add(new BrandStatus("尚未营业", noBusinessCount));
         return statuses;
     }
 
@@ -198,71 +197,51 @@ public class BrandServiceImpl implements BrandService {
         int province = 31;
         int city = 342;
         int zone = 2989;
-        BrandStatistics statistics = brandStatisticsMapper.searchByBrandId(brandId);
+
+        QueryWrapper<BrandStatistics> statisticsQueryWrapper = new QueryWrapper<>();
+        statisticsQueryWrapper.eq("brand_id", brandId);
+        BrandStatistics statistics = brandStatisticsMapper.selectOne(statisticsQueryWrapper);
         if (statistics == null)
             return null;
-        BrandDistribution bd = new BrandDistribution();
-        int cpc = statistics.getCoverProvinceCount();
-        int ccc = statistics.getCoverCityCount();
-        int czc = statistics.getCoverZoneCount();
-        bd.setTotal(statistics.getTotal());
-        bd.setCoverProvinceCount(cpc);
-        float provinceRatio = (float) cpc/province;
-        bd.setCoverProvinceRatio((int)(provinceRatio*100) + "%");
-        bd.setCoverCityCount(ccc);
-        float cityRatio = (float) ccc/city;
-        bd.setCoverCityRatio((int)(cityRatio*100) + "%");
-        bd.setCoverZoneCount(czc);
-        float zoneRatio = (float) czc/zone;
-        bd.setCoverZoneRatio((int)(zoneRatio*100) + "%");
-        return bd;
+
+        return new BrandDistribution(statistics, province, city, zone);
     }
 
     @Override
     public List<BrandProvinceBo> searchProvinceByBrandId(String brandId) {
-        List<BrandProvince> provinces = brandProvinceMapper.searchByBrandId(brandId);
-        BrandStatistics statistics = brandStatisticsMapper.searchByBrandId(brandId);
-        if (provinces.isEmpty() || statistics == null)
+        // 查询品牌省级分布
+        QueryWrapper<BrandProvince> provinceQueryWrapper = new QueryWrapper<>();
+        provinceQueryWrapper.eq("brand_id", brandId);
+        List<BrandProvince> provinces = brandProvinceMapper.selectList(provinceQueryWrapper);
+        // 查询品牌统计信息
+        QueryWrapper<BrandStatistics> statisticsQueryWrapper = new QueryWrapper<>();
+        statisticsQueryWrapper.eq("brand_id", brandId);
+        BrandStatistics statistics = brandStatisticsMapper.selectOne(statisticsQueryWrapper);
+
+        if (provinces == null || provinces.isEmpty() || statistics == null)
             return new ArrayList<>();
-        int total = statistics.getTotal();
+
         List<BrandProvinceBo> bpbs = new ArrayList<>();
-        for (BrandProvince bp : provinces){
-            int disCount = bp.getDisCount();
-            BrandProvinceBo bpb = new BrandProvinceBo();
-//            bpb.setBrandId(bp.getBrandId());
-            bpb.setCode(bp.getAddrCode());
-            bpb.setName(bp.getProvince());
-            bpb.setLocation(bp.getLat().toString() + "," + bp.getLng().toString());
-            bpb.setCount(disCount);
-            float ratio = (float) disCount/total;
-            bpb.setRatio((ratio*100) + "%");
-            bpb.setUpdateTime(bp.getUpdateTime());
-            bpbs.add(bpb);
-        }
+        provinces.forEach(bp -> bpbs.add(new BrandProvinceBo(bp, statistics.getTotal())));
         return bpbs;
     }
 
     @Override
     public BrandDisCloud searchDisCloudByBrandId(String brandId) {
-        List<BrandCity> brandCities = brandCityMapper.searchByBrandId(brandId);
-        List<BrandZone> brandZones = brandZoneMapper.searchByBrandId(brandId);
+        // 获取市级别统计分布数据
+        QueryWrapper<BrandCity> cityQueryWrapper = new QueryWrapper<>();
+        cityQueryWrapper.eq("brand_id", brandId);
+        List<BrandCity> brandCities = brandCityMapper.selectList(cityQueryWrapper);
+        // 获取区级别统计分布数据
+        QueryWrapper<BrandZone> zoneQueryWrapper = new QueryWrapper<>();
+        zoneQueryWrapper.eq("brand_id", brandId);
+        List<BrandZone> brandZones = brandZoneMapper.selectList(zoneQueryWrapper);
+
         BrandDisCloud disCloud = new BrandDisCloud();
         List<BrandDisItem> zoneDis = new ArrayList<>();
         List<BrandDisItem> cityDis = new ArrayList<>();
-        for (BrandZone bz : brandZones){
-            BrandDisItem bdi = new BrandDisItem();
-            bdi.setCode(bz.getAddrCode());
-            bdi.setName(bz.getZone());
-            bdi.setCount(bz.getDisCount());
-            zoneDis.add(bdi);
-        }
-        for (BrandCity bc : brandCities){
-            BrandDisItem bdi = new BrandDisItem();
-            bdi.setCode(bc.getAddrCode());
-            bdi.setName(bc.getCity());
-            bdi.setCount(bc.getDisCount());
-            cityDis.add(bdi);
-        }
+        brandZones.forEach(zone -> zoneDis.add(new BrandDisItem(zone)));
+        brandCities.forEach(city -> zoneDis.add(new BrandDisItem(city)));
         disCloud.setZoneDistribution(zoneDis);
         disCloud.setCityDistribution(cityDis);
         return disCloud;
@@ -270,48 +249,53 @@ public class BrandServiceImpl implements BrandService {
 
     @Override
     public PageInfo<List<BrandSearch>> searchListByMulti(ListQueryBody body, String userId) {
-        PageHelper.startPage(body.getPageNum(),body.getPageSize(),true);
-        String text = body.getText();
+        PageHelper.startPage(body.getPageNum(), body.getPageSize(), true);
         List<String> industryCode = body.getIndustryCode();
+        /*
+        industryCode行业类别码,例如101000,但不确定,需要对其拆解,查询其子类别。
+        因数据库数据不齐,这里没有进行相关处理
+         */
         Integer countDown = null;
         Integer countUp = null;
         Integer coverDown = null;
         Integer coverUp = null;
-        if (body.getWdCount() != null){
+        if (body.getWdCount() != null) { // 拆分搜索字段:网点数量
             if (body.getWdCount().size() == 1)
                 countDown = Integer.parseInt(body.getWdCount().get(0));
-            else if (body.getWdCount().size() >= 2){
+            else if (body.getWdCount().size() >= 2) {
                 countDown = Integer.parseInt(body.getWdCount().get(0));
                 countUp = Integer.parseInt(body.getWdCount().get(1));
             }
         }
-        if (body.getCoverCityCount() != null){
-            if (body.getCoverCityCount().size() == 1){
+        if (body.getCoverCityCount() != null) { // 拆分搜索字段:覆盖城市数
+            if (body.getCoverCityCount().size() == 1) {
                 coverDown = Integer.parseInt(body.getCoverCityCount().get(0));
-            }else if (body.getCoverCityCount().size() >= 2){
+            } else if (body.getCoverCityCount().size() >= 2) {
                 coverDown = Integer.parseInt(body.getCoverCityCount().get(0));
                 coverUp = Integer.parseInt(body.getCoverCityCount().get(1));
             }
         }
-//        System.out.println(countDown+","+countUp);
-//        System.out.println(coverDown+","+coverUp);
-        List<BrandSearch> brandSearches = brandMapper.searchSearchByMulti(text, industryCode, countUp, countDown, coverUp, coverDown);
-        if (userId == null || userId.equals("")){
-            for (BrandSearch search : brandSearches){
+        List<BrandSearch> brandSearches = brandMapper.searchSearchByMulti(body.getText(), industryCode, countUp, countDown, coverUp, coverDown);
+        // 赋予attention字段信息,0:未关注;1:已关注
+        if (userId == null || userId.equals("")) { // 用户未登录或无效用户id,都是未关注状态
+            for (BrandSearch search : brandSearches) {
+                QueryWrapper<Enterprise> enterpriseQueryWrapper = new QueryWrapper<>();
+                enterpriseQueryWrapper.eq("enterprise_usci", search.getEnterpriseName());
+                Enterprise enterprise = enterpriseMapper.selectOne(enterpriseQueryWrapper);
+                search.setEnterpriseName(enterprise != null ? enterprise.getEnterpriseName() : null);
                 search.setAttention(0);
             }
-        }else {
+        } else { // 否则,根据用户潜客池,赋予字段相应的值
             List<AttentionPool> pools = attentionPoolDao.searchByMulti(null, userId);
-            Map<String ,String> map = new HashMap<>();
-            for (AttentionPool pool : pools){
-                map.put(pool.getBrandId(),"1");
-            }
-            for (BrandSearch search : brandSearches){
-                if (map.get(search.getBrandId()) == null){
-                    search.setAttention(0);
-                }else {
-                    search.setAttention(1);
-                }
+            Map<String, String> map = new HashMap<>();
+            for (AttentionPool pool : pools)
+                map.put(pool.getBrandId(), "1");
+            for (BrandSearch search : brandSearches) {
+                QueryWrapper<Enterprise> enterpriseQueryWrapper = new QueryWrapper<>();
+                enterpriseQueryWrapper.eq("enterprise_usci", search.getEnterpriseName());
+                Enterprise enterprise = enterpriseMapper.selectOne(enterpriseQueryWrapper);
+                search.setEnterpriseName(enterprise != null ? enterprise.getEnterpriseName() : null);
+                search.setAttention(map.get(search.getBrandId()) == null ? 0 : 1);
             }
         }
         return new PageInfo(brandSearches);
@@ -319,247 +303,97 @@ public class BrandServiceImpl implements BrandService {
 
     @Override
     public List<BrandTotal> searchTotal(Integer pageSize) {
-        List<BrandStatistics> list = brandStatisticsMapper.searchList();
-        if (list.isEmpty())
+        QueryWrapper<BrandStatistics> statisticsQueryWrapper = new QueryWrapper<>();
+        statisticsQueryWrapper.orderByDesc("total");
+        List<BrandStatistics> list = brandStatisticsMapper.selectList(statisticsQueryWrapper);
+        if (list == null || list.isEmpty())
             return new ArrayList<>();
+
+        // 取pageSize大小的数量,默认10条
         List<BrandTotal> tList = new ArrayList<>();
-        if (pageSize == null)
-            pageSize = 10;
+        if (pageSize == null) pageSize = 10;
         int index = 0;
-        for (BrandStatistics bs : list){
+        for (BrandStatistics bs : list) {
             if (index >= pageSize)
                 break;
-            BrandTotal bt = new BrandTotal();
-            bt.setBrandId(bs.getBrandId());
-            bt.setBrandName(bs.getBrandName());
-            bt.setTotal(bs.getTotal());
-            bt.setUpdateTime(bs.getUpdateTime());
-            tList.add(bt);
+            tList.add(new BrandTotal(bs));
             index++;
         }
         return tList;
     }
 
-//    @Override
-//    public BStoreData searchAvgScoreByBrandId(String brandId) {
-//        Brand brand = brandMapper.searchById(brandId);
-//        if (brand == null)
-//            return null;
-//        BStoreData bStoreData = new BStoreData();
-//        bStoreData.setBrandName(brand.getBrandName());
-//        List<BrandZone> zones = brandZoneMapper.searchByBrandId(brandId);
-//        if (zones.isEmpty())
-//            return null;
-//        List<Info> infos = new ArrayList<>();
-//        wdInfoService.setAddrMap();
-//        for (BrandZone bz : zones){
-//            Info info = new Info();
-//            info.setAddrCode(bz.getAddrCode());
-//            info.setAddrName(wdInfoService.addrMap.get(bz.getAddrCode()));
-//            info.setAvgScore(bz.getAvgScore());
-//            infos.add(info);
-//        }
-//        bStoreData.setInfo(infos);
-//        return bStoreData;
-//    }
-
-//    @Override
-//    public List<BrandAddrDistribution> searchAddrDistribution(List<String> addrCodes) {
-//        List<BrandAddrDistribution> list = brandZoneMapper.searchByAddrCodeGroup(addrCodes);
-//        wdInfoService.setAddrMap();
-//        for (BrandAddrDistribution dis : list){
-//            dis.setAddrName(wdInfoService.addrMap.get(dis.getAddrCode()));
-//        }
-//        return list;
-//    }
-
     @Override
     public List<BrandGeoLabelBo> searchGeoLabel(String brandId) {
         List<BrandGeoLabelBo> bos = new ArrayList<>();
-
         // 查询门店
         QueryWrapper<StoreWd> storeWdQueryWrapper = new QueryWrapper<>();
-        storeWdQueryWrapper.eq("brand_id",brandId);
+        storeWdQueryWrapper.eq("brand_id", brandId);
         List<StoreWd> storeWds = storeWdDao.selectList(storeWdQueryWrapper);
-        if (storeWds.size() == 0)
+        if (storeWds.isEmpty())
             return bos;
-
-        // 查询门店标签
+//         查询门店标签
         int count = storeWds.size(); // 总数,用于做比率
+        // 将门店列表中的网点id抽取出来
         List<String> wdIds = new ArrayList<>();
-        for (StoreWd storeWd : storeWds){
-            wdIds.add(storeWd.getWdId());
-        }
+        storeWds.forEach(storeWd -> wdIds.add(storeWd.getWdId()));
+        // 查询网点基本信息列表
         QueryWrapper<WdInfo> wdInfoQueryWrapper = new QueryWrapper<>();
-        wdInfoQueryWrapper.in("wd_id",wdIds);
+        wdInfoQueryWrapper.in("wd_id", wdIds);
         List<WdInfo> wdInfos = wdInfoDao.selectList(wdInfoQueryWrapper);
-//        System.out.println(wdIds);
-//        QueryWrapper<WdTopologicalInfo> infoQueryWrapper = new QueryWrapper<>();
-//        List<String> wdIds = new ArrayList<>();
-//        for (StoreWd storeWd : storeWds){
-//            wdIds.add(storeWd.getWdId());
-//        }
-//        infoQueryWrapper.eq("radius",1000).and(info -> {
-//            info.in("center_wd_id",wdIds);
-//        });
-//        List<WdTopologicalInfo> infos = wdTopologicalInfoDao.selectList(infoQueryWrapper);
-
         // 统计标签
-        Map<String,Integer> typeMap = new HashMap<>();
-        for (WdInfo wdInfo : wdInfos){
+        Map<String, Integer> typeMap = new HashMap<>();
+        for (WdInfo wdInfo : wdInfos) {
             List<String> wdTag = wdRedisStoreage.getWdTag(wdInfo);
-//            System.out.println(wdTag);
-            for (String tag : wdTag){
-                if (typeMap.get(tag) != null){
-                    typeMap.replace(tag,typeMap.get(tag)+1);
+            for (String tag : wdTag) {
+                if (typeMap.get(tag) != null) {
+                    typeMap.replace(tag, typeMap.get(tag) + 1);
                     continue;
                 }
-                typeMap.put(tag,1);
+                typeMap.put(tag, 1);
             }
         }
-//        System.out.println(typeMap);
-
-//        for (WdTopologicalInfo info : infos){
-//            String tag = info.getTag();
-//            String[] tags = tag.split(";");
-//            for (String t : tags){
-//                String[] split = t.split(":");
-//                if (split.length < 2)
-//                    continue;
-//                if (typeMap.get(split[0]) != null){
-//                    typeMap.replace(split[0],typeMap.get(split[0])+Integer.parseInt(split[1]));
-//                }
-//                typeMap.put(split[0],Integer.parseInt(split[1]));
-//            }
-//        }
-//        Set<String> keySet = typeMap.keySet();
-//        QueryWrapper<TypeBy> typeByQueryWrapper = new QueryWrapper<>();
-//        typeByQueryWrapper.in("type_code_by",keySet).and(typeByQueryWrapper1 -> {
-//            typeByQueryWrapper1.ne("mid_category","");
-//        }).and(typeByQueryWrapper1 -> {
-//            typeByQueryWrapper1.ne("sub_category","");
-//        });
-
-        // 排序
-//        Map<String,Integer> sortMap = new LinkedHashMap<>();
-//        typeMap.entrySet()
-//            .stream().sorted(Map.Entry.comparingByValue())
-//            .forEachOrdered(x -> sortMap.put(x.getKey(),x.getValue()));
-        List<Map.Entry<String,Integer>> sortMap = new ArrayList<>(typeMap.entrySet());
+        // 排序标签统计结果
+        List<Map.Entry<String, Integer>> sortMap = new ArrayList<>(typeMap.entrySet());
         Collections.sort(sortMap, new Comparator<Map.Entry<String, Integer>>() {
             @Override
             public int compare(Map.Entry<String, Integer> t1, Map.Entry<String, Integer> t2) {
                 return t2.getValue().compareTo(t1.getValue()); // 降序
             }
         });
-        // 获取前10项
+        // 获取前10项标签统计结果
         List<String> searchList = new ArrayList<>();
-        for (int i=0;i<sortMap.size();i++){
-            // System.out.println(sortMap.get(i).getKey()+" "+sortMap.get(i).getValue());
+        for (int i = 0; i < sortMap.size(); i++) {
             searchList.add(sortMap.get(i).getKey());
             if (searchList.size() >= 10)
                 break;
         }
-//        System.out.println(searchList);
-        // 查询标签
-//        QueryWrapper<TypeBy> typeByQueryWrapper = new QueryWrapper<>();
-//        typeByQueryWrapper.in("type_code_by",searchList);
-//        List<TypeBy> typeByList = typeByDao.selectList(typeByQueryWrapper);
         // 赋值
-        for (String s : searchList){
-            BrandGeoLabelBo bo = new BrandGeoLabelBo();
-            bo.setName(s);
-            bo.setTotal(typeMap.get(s));
-            float ratio = (float) bo.getTotal()/count;
-            bo.setRatio((ratio*100) + "%");
-            bos.add(bo);
-        }
-//        for (TypeBy typeBy : typeByList){
-//            BrandGeoLabelBo bo = new BrandGeoLabelBo();
-//            bo.setCode(typeBy.getTypeCodeBy());
-//            bo.setTotal(typeMap.get(typeBy.getTypeCodeBy()));
-//            if (!typeBy.getSubCategory().equals("")){
-//                bo.setName(typeBy.getSubCategory());
-//            }else if (!typeBy.getMidCategory().equals("")){
-//                bo.setName(typeBy.getMidCategory());
-//            }else{
-//                bo.setName(typeBy.getBigCategory());
-//            }
-//            float ratio = (float) bo.getTotal()/count;
-//            bo.setRatio((ratio*100) + "%");
-//            bos.add(bo);
-//        }
-//        bos.sort(new Comparator<BrandGeoLabelBo>() {
-//            @Override
-//            public int compare(BrandGeoLabelBo t1, BrandGeoLabelBo t2) {
-//                return t2.getTotal().compareTo(t1.getTotal());
-//            }
-//        });
+        searchList.forEach(s -> bos.add(new BrandGeoLabelBo(s, typeMap.get(s), count)));
         return bos;
     }
 
-    @Override
-    public List<BrandOpcloseVo> searchOpenByMulti(List<String> typeCodes, LocalDateTime startTime, LocalDateTime endTime) {
-        List<String> codes = new ArrayList<>();
-        if (typeCodes != null){
-            for (String code : typeCodes){
-                codes.add(code);
-                List<String> otherTypeBy = categoryUtil.getAllOtherTypeBy(code);
-                codes.addAll(otherTypeBy);
-            }
-        }else{
-            codes = null;
-        }
-        List<BrandOpcloseVo> vos = storeOpcloseDao.selectOpenByMulti(codes, startTime, endTime);
-        return vos.subList(0, 9);
-    }
-
-    @Override
-    public List<BrandOpcloseVo> searchCloseByMulti(List<String> typeCodes, LocalDateTime startTime, LocalDateTime endTime) {
-        List<String> codes = new ArrayList<>();
-        if (typeCodes != null){
-            for (String code : typeCodes){
-                codes.add(code);
-                List<String> otherTypeBy = categoryUtil.getAllOtherTypeBy(code);
-                codes.addAll(otherTypeBy);
-            }
-        }else{
-            codes = null;
-        }
-        List<BrandOpcloseVo> vos = storeOpcloseDao.selectCloseByMulti(codes, startTime, endTime);
-        return vos.subList(0,9);
-    }
-
     @Override
     public List<BrandEvolveVo> searchEvolveByMulti(List<String> addrCodes, List<String> typeCodes, List<String> brandIds) {
+        // 补齐地址码
         List<String> addrs = new ArrayList<>();
-        if (addrCodes != null){
-            for (String code : addrCodes){
-                addrs.add(code);
-                List<String> otherAddrCode = categoryUtil.getAllOtherAddrCode(code);
-                addrs.addAll(otherAddrCode);
-            }
-        }else{
+        if (addrCodes != null || !addrCodes.isEmpty()) {
+            for (String code : addrCodes)
+                addrs.addAll(categoryUtil.getAllOtherAddrCode(code));
+        } else
             addrs = null;
-        }
+        // 补齐网点分类(犇云)
         List<String> types = new ArrayList<>();
-        if (typeCodes != null){
-            for (String code : typeCodes){
-                types.add(code);
-                List<String> otherTypeBy = categoryUtil.getAllOtherTypeBy(code);
-                types.addAll(otherTypeBy);
-            }
-        }else{
+        if (typeCodes != null || !typeCodes.isEmpty()) {
+            for (String code : typeCodes)
+                types.addAll(categoryUtil.getAllOtherTypeBy(code));
+        } else
             types = null;
-        }
+
         List<BrandEvolveVo> vos = new ArrayList<>();
-        for (String brandId : brandIds){
+        for (String brandId : brandIds) {
             List<BrandEvolveVo> evolveVos = brandEvolveDao.selectByMulti(addrs, types, brandId);
-            for (int i=0; i<evolveVos.size(); i++){
-                if (i == 0)
-                    continue;
-                evolveVos.get(i).setTotal(evolveVos.get(i-1).getTotal()+evolveVos.get(i).getTotal());
-            }
+            for (int i = 1; i < evolveVos.size(); i++)
+                evolveVos.get(i).setTotal(evolveVos.get(i - 1).getTotal() + evolveVos.get(i).getTotal());
             vos.addAll(evolveVos);
         }
         return vos;
@@ -567,149 +401,129 @@ public class BrandServiceImpl implements BrandService {
 
     @Override
     public Map<String, List<BrandEvolveVo>> searchEvolveByMulti2Map(List<String> addrCodes, List<String> typeCodes, List<String> brandIds) {
+        // 补齐地址码
         List<String> addrs = new ArrayList<>();
-        if (addrCodes != null){
-            for (String code : addrCodes){
-                addrs.add(code);
-                List<String> otherAddrCode = categoryUtil.getAllOtherAddrCode(code);
-                addrs.addAll(otherAddrCode);
-            }
-        }else{
+        if (addrCodes != null || !addrCodes.isEmpty()) {
+            for (String code : addrCodes)
+                addrs.addAll(categoryUtil.getAllOtherAddrCode(code));
+        } else
             addrs = null;
-        }
+        // 补齐网点分类(犇云)
         List<String> types = new ArrayList<>();
-        if (typeCodes != null){
-            for (String code : typeCodes){
-                types.add(code);
-                List<String> otherTypeBy = categoryUtil.getAllOtherTypeBy(code);
-                types.addAll(otherTypeBy);
-            }
-        }else{
+        if (typeCodes != null || !typeCodes.isEmpty()) {
+            for (String code : typeCodes)
+                types.addAll(categoryUtil.getAllOtherTypeBy(code));
+        } else
             types = null;
-        }
+
         List<BrandEvolveVo> vos = new ArrayList<>();
-        for (String brandId : brandIds){
+        // 向后累和
+        for (String brandId : brandIds) {
             List<BrandEvolveVo> evolveVos = brandEvolveDao.selectByMulti(addrs, types, brandId);
-            for (int i=0; i<evolveVos.size(); i++){
-                if (i == 0)
-                    continue;
-                evolveVos.get(i).setTotal(evolveVos.get(i-1).getTotal()+evolveVos.get(i).getTotal());
-            }
+            for (int i = 1; i < evolveVos.size(); i++)
+                evolveVos.get(i).setTotal(evolveVos.get(i - 1).getTotal() + evolveVos.get(i).getTotal());
             vos.addAll(evolveVos);
         }
-        Map<String,List<BrandEvolveVo>> times = new HashMap<>();
-        for (int i = 0; i < 12; i++){
+        // 构造时间映射对象
+        Map<String, List<BrandEvolveVo>> times = new HashMap<>();
+        for (int i = 0; i < 12; i++) {
             List<BrandEvolveVo> evos = new ArrayList<>();
-            times.put(LocalDateTime.now(ZoneId.of("Asia/Shanghai")).plusMonths(-i).format(DateTimeFormatter.ofPattern("yyyy-MM")),evos);
+            times.put(LocalDateTime.now(ZoneId.of("Asia/Shanghai")).plusMonths(-i).format(DateTimeFormatter.ofPattern("yyyy-MM")), evos);
         }
-        for (BrandEvolveVo vo : vos){
-            if (times.get(vo.getTime()) != null){
+        // 向时间映射对象中赋值
+        vos.forEach(vo -> {
+            if (times.get(vo.getTime()) != null) {
                 List<BrandEvolveVo> brandEvolveVos = times.get(vo.getTime());
                 brandEvolveVos.add(vo);
             }
-        }
+        });
         return times;
     }
 
-    public Integer timeUtil(String time){
+    public Integer timeUtil(String time) {
         String[] split = time.split(":");
         int hour = Integer.parseInt(split[0]);
         int min = Integer.parseInt(split[1]);
-        return hour*100+min;
+        return hour * 100 + min;
     }
-    public int compareTime(String time1, String time2){
-        int result = timeUtil(time1).compareTo(timeUtil(time2));
-//        if (result > 0)
-//            System.out.println(time1 + " > " + time2);
-//        if (result == 0)
-//            System.out.println(time1 + " = " + time2);
-//        if (result < 0)
-//            System.out.println(time1 + " < " + time2);
-        return result;
+
+    public int compareTime(String time1, String time2) {
+        return timeUtil(time1).compareTo(timeUtil(time2));
     }
+
     @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
+        if (addrCodes != null || !addrCodes.isEmpty()) {
+            for (String addr : addrCodes)
+                addrs.addAll(categoryUtil.getAllOtherAddrCode(addr));
+        } 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
+        if (typeCodeBys != null || !typeCodeBys.isEmpty()) {
+            for (String type : typeCodeBys)
+                types.addAll(categoryUtil.getAllOtherTypeBy(type));
+        } else
             types = null;
+
+        // 合并,计算
         List<OpcloseTimeVo> vos = storeWdOpcloseDao.selectBrandOpenTimes(brandIds, addrs, types);
         List<OpcloseTimeVo> rvos = new ArrayList<>();
-        for (int i = 0;i < 24; i+=2){
+        for (int i = 0; i < 24; i += 2) {
             OpcloseTimeVo vo = new OpcloseTimeVo();
-            vo.setTime(i+":00~"+(i+2)+":00");
+            vo.setTime(i + ":00~" + (i + 2) + ":00");
             vo.setCount(0);
             rvos.add(vo);
         }
-        for (OpcloseTimeVo vo : vos){
-            for (OpcloseTimeVo rvo : rvos){
+        vos.forEach(vo -> {
+            for (OpcloseTimeVo rvo : rvos) {
                 String[] times = rvo.getTime().split("~");
-                if (compareTime(vo.getTime(),times[0]) < 0 || compareTime(times[1],vo.getTime()) < 0)
+                if (compareTime(vo.getTime(), times[0]) < 0 || compareTime(times[1], vo.getTime()) < 0)
                     continue;
                 rvo.setCount(rvo.getCount() + vo.getCount());
             }
-        }
+        });
         return rvos;
     }
 
     @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
+        if (addrCodes != null || !addrCodes.isEmpty()) {
+            for (String addr : addrCodes)
+                addrs.addAll(categoryUtil.getAllOtherAddrCode(addr));
+        } 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
+        if (typeCodeBys != null || !typeCodeBys.isEmpty()) {
+            for (String type : typeCodeBys)
+                types.addAll(categoryUtil.getAllOtherTypeBy(type));
+        } else
             types = null;
+
+        // 合并,计算
         List<OpcloseTimeVo> vos = storeWdOpcloseDao.selectBrandCloseTimes(brandIds, addrs, types);
         List<OpcloseTimeVo> rvos = new ArrayList<>();
-        for (int i = 0;i < 24; i+=2){
+        for (int i = 0; i < 24; i += 2) {
             OpcloseTimeVo vo = new OpcloseTimeVo();
-            vo.setTime(i+":00~"+(i+2)+":00");
+            vo.setTime(i + ":00~" + (i + 2) + ":00");
             vo.setCount(0);
             rvos.add(vo);
         }
-        for (OpcloseTimeVo vo : vos){
-            for (OpcloseTimeVo rvo : rvos){
+        vos.forEach(vo -> {
+            for (OpcloseTimeVo rvo : rvos) {
                 String[] times = rvo.getTime().split("~");
-                if (compareTime(vo.getTime(),times[0]) < 0 || compareTime(times[1],vo.getTime()) < 0)
+                if (compareTime(vo.getTime(), times[0]) < 0 || compareTime(times[1], vo.getTime()) < 0)
                     continue;
                 rvo.setCount(rvo.getCount() + vo.getCount());
             }
-        }
+        });
         return rvos;
     }
 }

+ 23 - 31
ruoyi-demo/src/main/java/com/ruoyi/demo/service/impl/BusinessOpportunitiesServiceImpl.java

@@ -1,5 +1,6 @@
 package com.ruoyi.demo.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 
@@ -32,44 +33,34 @@ public class BusinessOpportunitiesServiceImpl implements BusinessOpportunitiesSe
 
     @Override
     public PageInfo<List<BusinessOpportunitiesClueBo>> searchList(WorkTableSearchVo workVo, String userId) {
-        PageHelper.startPage(workVo.getPageNum(),workVo.getPageSize(),true);
-        List<BusinessOpportunitiesClue> clues = businessOpportunitiesDao.searchAllByMulti(workVo.getText(), userId);
+        PageHelper.startPage(workVo.getPageNum(), workVo.getPageSize(), true);
+
+        QueryWrapper<BusinessOpportunitiesClue> clueQueryWrapper = new QueryWrapper<>();
+        clueQueryWrapper.eq("user_id", userId);
+        if (workVo.getText() != null)
+            clueQueryWrapper.and(businessOpportunitiesClueQueryWrapper -> {
+                businessOpportunitiesClueQueryWrapper.like("contact", workVo.getText())
+                    .or()
+                    .like("telephone", workVo.getText());
+            });
+        List<BusinessOpportunitiesClue> clues = businessOpportunitiesDao.selectList(clueQueryWrapper);
+
         List<BusinessOpportunitiesClueBo> clueBos = new ArrayList<>();
-        for (BusinessOpportunitiesClue clue : clues){
-            BusinessOpportunitiesClueBo clueBo = new BusinessOpportunitiesClueBo();
-            clueBo.setClueId(clue.getClueId());
-            clueBo.setAttentionId(clue.getAttentionId());
-            clueBo.setContact(clue.getContact());
-            clueBo.setTelephone(clue.getTelephone());
-            clueBo.setFollowUpCount(clue.getFollowUpCount());
-            clueBo.setCreateTime(clue.getCreateTime());
-            clueBos.add(clueBo);
-        }
+        clues.forEach(clue -> clueBos.add(new BusinessOpportunitiesClueBo(clue)));
         return new PageInfo(clueBos);
     }
 
     @Override
     public PageInfo<List<FollowUpRecordBo>> searchFollowList(WorkTableSearchVo workVo, String userId) {
-        PageHelper.startPage(workVo.getPageNum(),workVo.getPageSize(),true);
-        if (workVo.getStartTime() != null){
-            if (workVo.getStartTime().equals(""))
+        PageHelper.startPage(workVo.getPageNum(), workVo.getPageSize(), true);
+        if (workVo.getStartTime() != null || workVo.getStartTime().equals(""))
                 workVo.setStartTime(null);
-        }
-        if (workVo.getEndTime() != null){
-            if (workVo.getEndTime().equals(""))
+        if (workVo.getEndTime() != null || workVo.getEndTime().equals(""))
                 workVo.setEndTime(null);
-        }
+
         List<FollowUpRecord> records = followUpDao.searchAllByMulti(workVo.getClueId(), workVo.getText(), workVo.getStartTime(), workVo.getEndTime(), userId);
         List<FollowUpRecordBo> recordBos = new ArrayList<>();
-        for (FollowUpRecord record : records){
-            FollowUpRecordBo recordBo = new FollowUpRecordBo();
-            recordBo.setRecordId(record.getRecordId());
-            recordBo.setContent(record.getFollowContent());
-            recordBo.setPerson(record.getFollowPerson());
-            recordBo.setWay(record.getFollowWay());
-            recordBo.setFollowTime(record.getFollowTime());
-            recordBos.add(recordBo);
-        }
+        records.forEach(record -> recordBos.add(new FollowUpRecordBo(record)));
         return new PageInfo(recordBos);
     }
 
@@ -77,18 +68,19 @@ public class BusinessOpportunitiesServiceImpl implements BusinessOpportunitiesSe
     public int addFollow(AddFollowRecordVo addVo, String userId) {
         if (addVo.getClueId() == null || addVo.getClueId().equals(""))
             return 0;
-        BusinessOpportunitiesClue clue = businessOpportunitiesDao.searchByClueIdOrAttentionIdAndUserId(addVo.getClueId(),null, userId);
+        BusinessOpportunitiesClue clue = businessOpportunitiesDao.searchByClueIdOrAttentionIdAndUserId(addVo.getClueId(), null, userId);
         if (clue == null)
             return 0;
         FollowUpRecord record = new FollowUpRecord();
-        record.setRecordId(UUID.randomUUID().toString().replace("-",""));
+        record.setRecordId(UUID.randomUUID().toString().replace("-", ""));
         record.setClueId(addVo.getClueId());
         record.setFollowContent(addVo.getContent());
         record.setFollowPerson(addVo.getPerson());
         record.setFollowWay(addVo.getWay());
         record.setUserId(userId);
         record.setFollowTime(LocalDateTime.now(ZoneId.of("Asia/Shanghai")));
-        if (followUpDao.insert(record) == 1){
+        // 插入并更新跟进数
+        if (followUpDao.insert(record) == 1) {
             return businessOpportunitiesDao.updateFollowUpCountByClueIdAndUserId(clue.getClueId(), clue.getFollowUpCount() + 1, userId);
         }
         return 0;

+ 61 - 49
ruoyi-demo/src/main/java/com/ruoyi/demo/service/impl/DatabackServiceImpl.java

@@ -21,6 +21,7 @@ import java.time.LocalDateTime;
 import java.time.ZoneId;
 import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
+import java.util.Comparator;
 import java.util.List;
 
 @Service
@@ -37,92 +38,103 @@ public class DatabackServiceImpl implements DatabackService {
 
     @Override
     public AttentionPoolStatisticsBo searchAbout(String userId, WorkTableBo vo) {
+        // 查询潜客数
         int attentionCount = 0;
         QueryWrapper<AttentionPool> attentionPoolQueryWrapper = new QueryWrapper<>();
-        attentionPoolQueryWrapper.eq("user_id",userId);
+        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());
+            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());
+            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);
+        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());
+            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());
+            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","线上电话");
+        followUpRecordQueryWrapper.eq("user_id", userId)
+            .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());
+            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());
+            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","线下实地");
+        followUpRecordQueryWrapper1.eq("user_id", userId)
+            .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());
+            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());
+            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);
-        bo.setOnlineCount(onlineCount);
-        bo.setOfflineCount(offlineCount);
-        return bo;
+        return new AttentionPoolStatisticsBo(attentionCount, clueCount, onlineCount, offlineCount);
     }
 
     @Override
-    public List<AttentionPoolStatisticsBo> searchTrand(String userId,String condition) {
-        if (condition == null)
-            condition = "day";
+    public List<AttentionPoolStatisticsBo> searchTrand(String userId, String condition) {
         List<AttentionPoolStatisticsBo> list = new ArrayList<>();
-        if (condition != null){
-            if (condition.equals("day")){
-                List<String> days = new ArrayList<>();
-                for (int i = 1;i <= 30;i++){
-                    days.add(LocalDateTime.now(ZoneId.of("Asia/Shanghai")).plusDays(-i).format(DateTimeFormatter.ofPattern("yyyy-MM-dd")).toString());
-                }
-//                System.out.println(days);
-                list = attentionPoolStatisticsDao.selectAllByUserIdAndDay(userId,days);
-            }
-            if (condition.equals("month")){
-                List<String> months = new ArrayList<>();
-                for (int i = 0;i < 12;i++){
-                    months.add(LocalDateTime.now(ZoneId.of("Asia/Shanghai")).plusMonths(-i).format(DateTimeFormatter.ofPattern("yyyy-MM")).toString());
-                }
-//                System.out.println(months);
-                list = attentionPoolStatisticsDao.selectAllByUserIdAndMonth(userId,months);
-            }
-            if (condition.equals("year")){
-                List<String> years = new ArrayList<>();
-                for (int i = 0;i < 5;i++){
-                    years.add(LocalDateTime.now(ZoneId.of("Asia/Shanghai")).plusYears(-i).format(DateTimeFormatter.ofPattern("yyyy")).toString());
-                }
-//                System.out.println(years);
-                list = attentionPoolStatisticsDao.selectAllByUserIdAndYear(userId,years);
-            }
+        if (condition.equals("day")) { // 时间粒度:天
+            List<String> days = new ArrayList<>();
+            for (int i = 1; i <= 30; i++)
+                days.add(LocalDateTime.now(ZoneId.of("Asia/Shanghai")).plusDays(-i).format(DateTimeFormatter.ofPattern("yyyy-MM-dd")).toString());
+
+            list = attentionPoolStatisticsDao.selectAllByUserIdAndDay(userId, days);
+            // 补齐空数据
+            list.forEach(bo -> days.remove(bo.getTime()));
+            if (!days.isEmpty())
+                for (String day : days)
+                    list.add(new AttentionPoolStatisticsBo(day));
+        } else if (condition.equals("year")) { // 时间粒度:年
+            List<String> years = new ArrayList<>();
+            for (int i = 0; i < 5; i++)
+                years.add(LocalDateTime.now(ZoneId.of("Asia/Shanghai")).plusYears(-i).format(DateTimeFormatter.ofPattern("yyyy")).toString());
+
+            list = attentionPoolStatisticsDao.selectAllByUserIdAndYear(userId, years);
+            // 补齐数据
+            list.forEach(bo -> years.remove(bo.getTime()));
+            if (!years.isEmpty())
+                for (String year : years)
+                    list.add(new AttentionPoolStatisticsBo(year));
+        } else { // 时间粒度:月
+            List<String> months = new ArrayList<>();
+            for (int i = 0; i < 12; i++)
+                months.add(LocalDateTime.now(ZoneId.of("Asia/Shanghai")).plusMonths(-i).format(DateTimeFormatter.ofPattern("yyyy-MM")).toString());
+
+            list = attentionPoolStatisticsDao.selectAllByUserIdAndMonth(userId, months);
+            // 补齐空数据
+            list.forEach(bo -> months.remove(bo.getTime()));
+            if (!months.isEmpty())
+                for (String month : months)
+                    list.add(new AttentionPoolStatisticsBo(month));
         }
-//        List<AttentionPoolStatistics> list = attentionPoolStatisticsDao.searchAllByUserId(userId);
+        // 排序
+        list.sort(new Comparator<AttentionPoolStatisticsBo>() {
+            @Override
+            public int compare(AttentionPoolStatisticsBo bo1, AttentionPoolStatisticsBo bo2) {
+                return bo1.getTime().compareTo(bo2.getTime());
+            }
+        });
         return list;
     }
 }

+ 48 - 133
ruoyi-demo/src/main/java/com/ruoyi/demo/service/impl/WdInfoServiceImpl.java

@@ -1,10 +1,7 @@
 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;
@@ -34,187 +31,105 @@ public class WdInfoServiceImpl implements WdInfoService {
 
     @Override
     public List<AddStatusVo> searchAddStatus(List<String> addrCodes, List<String> typeCodes) {
+        // 初始化时间信息,补齐地址信息
         categoryUtil.setWdTypeMap();
         List<String> addrs = new ArrayList<>();
         List<String> times = new ArrayList<>();
-        for (int i = 0; i < 12; i++){
+        for (int i = 0; i < 12; i++)
             times.add(LocalDateTime.now(ZoneId.of("Asia/Shanghai")).plusMonths(-i).format(DateTimeFormatter.ofPattern("yyyy-MM")));
-        }
-        if (addrCodes != null){
-            for (String s : addrCodes){
-                List<String> allOtherAddrCode = categoryUtil.getAllOtherAddrCode(s);
-                addrs.addAll(allOtherAddrCode);
-            }
-        }else{
+        if (addrCodes != null || !addrCodes.isEmpty()) {
+            for (String s : addrCodes)
+                addrs.addAll(categoryUtil.getAllOtherAddrCode(s));
+        } else
             addrs = null;
-        }
+
         List<AddStatusVo> addStatusVos = wdInfoMapper.searchAddStatusByMulti(times, addrs, typeCodes);
-        for (AddStatusVo vo : addStatusVos){
-            vo.setTypeName(categoryUtil.wdTypeMap.get(vo.getTypeCode()));
-        }
+        addStatusVos.forEach(vo -> vo.setTypeName(categoryUtil.wdTypeMap.get(vo.getTypeCode())));
         return addStatusVos;
     }
 
-    @Override
-    public List<WdOpcloseVo> searchWdOpcloses(List<String> addrCodes, List<String> wdTypeCodes) {
-        categoryUtil.setAddrMap();
-
-        List<WdOpcloseVo> vos = new ArrayList<>();
-        if (addrCodes != null){
-            for (String s : addrCodes){
-                WdOpclose opclose = wdOpcloseDao.selectListByAddrCodeAndWdTypeCodes(categoryUtil.whatis(s), wdTypeCodes, LocalDateTime.now(ZoneId.of("Asia/Shanghai")).plusMonths(-1));
-                if (opclose != null){
-                    WdOpcloseVo vo = new WdOpcloseVo(s,opclose);
-                    vo.setAddrName(categoryUtil.addrMap.get(s));
-                    vos.add(vo);
-                }
-            }
-            return vos;
-        }
-        return vos;
-    }
-
-    public Integer timeUtil(String time){
+    public Integer timeUtil(String time) {
         String[] split = time.split(":");
         int hour = Integer.parseInt(split[0]);
         int min = Integer.parseInt(split[1]);
-        return hour*100+min;
+        return hour * 100 + min;
     }
 
-    public int compareTime(String time1, String time2){
-        int result = timeUtil(time1).compareTo(timeUtil(time2));
-//        if (result > 0)
-//            System.out.println(time1 + " > " + time2);
-//        if (result == 0)
-//            System.out.println(time1 + " = " + time2);
-//        if (result < 0)
-//            System.out.println(time1 + " < " + time2);
-        return result;
+    public int compareTime(String time1, String time2) {
+        return timeUtil(time1).compareTo(timeUtil(time2));
     }
 
     @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
+        if (addrCodes != null || !addrCodes.isEmpty()) {
+            for (String addr : addrCodes)
+                addrs.addAll(categoryUtil.getAllOtherAddrCode(addr));
+        } 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
+        if (typeCodeBys != null || !typeCodeBys.isEmpty()) {
+            for (String type : typeCodeBys)
+                types.addAll(categoryUtil.getAllOtherTypeBy(type));
+        } else
             types = null;
+
         List<OpcloseTimeVo> vos = storeWdOpcloseDao.selectWdOpenTimes(addrs, types);
+        // 初始化
         List<OpcloseTimeVo> rvos = new ArrayList<>();
-        for (int i = 0;i < 24; i+=2){
+        for (int i = 0; i < 24; i += 2) {
             OpcloseTimeVo vo = new OpcloseTimeVo();
-            vo.setTime(i+":00~"+(i+2)+":00");
+            vo.setTime(i + ":00~" + (i + 2) + ":00");
             vo.setCount(0);
             rvos.add(vo);
         }
-        for (OpcloseTimeVo vo : vos){
-            for (OpcloseTimeVo rvo : rvos){
+        // 赋值
+        vos.forEach(vo -> {
+            for (OpcloseTimeVo rvo : rvos) {
                 String[] times = rvo.getTime().split("~");
-                if (compareTime(vo.getTime(),times[0]) < 0 || compareTime(times[1],vo.getTime()) < 0)
+                if (compareTime(vo.getTime(), times[0]) < 0 || compareTime(times[1], vo.getTime()) < 0)
                     continue;
                 rvo.setCount(rvo.getCount() + vo.getCount());
             }
-        }
+        });
         return rvos;
     }
 
     @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
+        if (addrCodes != null || !addrCodes.isEmpty()) {
+            for (String addr : addrCodes)
+                addrs.addAll(categoryUtil.getAllOtherAddrCode(addr));
+        } 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
+        if (typeCodeBys != null || !typeCodeBys.isEmpty()) {
+            for (String type : typeCodeBys)
+                types.addAll(categoryUtil.getAllOtherTypeBy(type));
+        } else
             types = null;
+
         List<OpcloseTimeVo> vos = storeWdOpcloseDao.selectWdCloseTimes(addrs, types);
+        // 初始化
         List<OpcloseTimeVo> rvos = new ArrayList<>();
-        for (int i = 0;i < 24; i+=2){
+        for (int i = 0; i < 24; i += 2) {
             OpcloseTimeVo vo = new OpcloseTimeVo();
-            vo.setTime(i+":00~"+(i+2)+":00");
+            vo.setTime(i + ":00~" + (i + 2) + ":00");
             vo.setCount(0);
             rvos.add(vo);
         }
-        for (OpcloseTimeVo vo : vos){
-            for (OpcloseTimeVo rvo : rvos){
+        // 赋值
+        vos.forEach(vo -> {
+            for (OpcloseTimeVo rvo : rvos) {
                 String[] times = rvo.getTime().split("~");
-                if (compareTime(vo.getTime(),times[0]) < 0 || compareTime(times[1],vo.getTime()) < 0)
+                if (compareTime(vo.getTime(), times[0]) < 0 || compareTime(times[1], vo.getTime()) < 0)
                     continue;
                 rvo.setCount(rvo.getCount() + vo.getCount());
             }
-        }
+        });
         return rvos;
     }
-
-//    @Override
-//    public List<WdAddrTypeDistribution> searchAddrTypeDistribution(List<String> addrCodes, List<String> typeCodes) {
-//        List<String> acodes = new ArrayList<>();
-//        for (String s : addrCodes){
-//            List<String> allOtherAddrCode = getAllOtherAddrCode(s);
-//            acodes.addAll(allOtherAddrCode);
-//        }
-//        List<WdAddrTypeDistribution> list = wdInfoMapper.searchAddrDisByMulti(acodes, typeCodes);
-//        setTypeMap();
-//        setAddrMap();
-//        for (WdAddrTypeDistribution wd : list){
-//            wd.setTypeName(typeMap.get(wd.getTypeCode()));
-//            wd.setAddrName(addrMap.get(wd.getAddrCode()));
-//        }
-//        return list;
-//    }
-
-//    @Override
-//    public List<WdAddrTypeDistribution> searchWdTypeDistribution(List<String> addrCodes, List<String> typeCodes) {
-//        List<WdAddrTypeDistribution> list = wdInfoMapper.searchWdTypeDisByMulti(addrCodes, typeCodes);
-//        setAddrMap();
-//        setWdTypeMap();
-//        for (WdAddrTypeDistribution wd : list){
-//            wd.setAddrName(addrMap.get(wd.getAddrCode()));
-//            wd.setTypeName(wdTypeMap.get(wd.getTypeCode()));
-//        }
-//        return list;
-//    }
-
-//    @Override
-//    public List<WdAddrTypeDistribution> searchWdTotal() {
-//        List<WdAddrTypeDistribution> list = wdInfoMapper.searchWdTotal();
-//        setWdTypeMap();
-//        for (WdAddrTypeDistribution wd : list){
-//            wd.setTypeName(wdTypeMap.get(wd.getTypeCode()));
-//        }
-//        return list;
-//    }
-
 }

+ 1 - 1
ruoyi-demo/src/main/java/com/ruoyi/demo/utils/statistics/AttentionPoolStat.java

@@ -32,7 +32,7 @@ public class AttentionPoolStat {
             statistics.setAttentionCount(poolDao.selectCount(userId));
             statistics.setClueCount(opportunitiesDao.selectCount(userId));
             statistics.setOnlineCount(followUpDao.selectCountByWay(userId,"线上电话"));
-            statistics.setOfflineCount(followUpDao.selectCountByWay(userId,"线下实地"));
+            statistics.setOfflineCount(followUpDao.selectCountByWay(userId,"实地考察"));
             statistics.setUserId(userId);
             statistics.setStatTime(LocalDateTime.now(ZoneId.of("Asia/Shanghai")));
             statisticsDao.insert(statistics);

+ 0 - 19
ruoyi-demo/src/main/resources/mapper/demo/BrandCityMapper.xml

@@ -1,19 +0,0 @@
-<?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.BrandCityMapper">
-    <resultMap type="com.ruoyi.demo.entity.BrandCity" id="BrandCityResult">
-        <result property="disId" column="dis_id"/>
-        <result property="brandId" column="brand_id"/>
-        <result property="addrCode" column="addr_code"/>
-        <result property="city" column="city"/>
-        <result property="lat" column="lat"/>
-        <result property="lng" column="lng"/>
-        <result property="disCount" column="dis_count"/>
-        <result property="updateTime" column="update_time"/>
-    </resultMap>
-    <select id="searchByBrandId" resultMap="BrandCityResult">
-        select * from bl_brand_city_distribution where brand_id = #{brandId}
-    </select>
-</mapper>

+ 2 - 7
ruoyi-demo/src/main/resources/mapper/demo/BrandMapper.xml

@@ -30,7 +30,7 @@
         <result property="brandImg" column="brand_img"/>
         <result property="brandName" column="brand_name"/>
         <result property="indexScore" column="index_score"/>
-        <result property="enterpriseName" column="enterprise_name"/>
+        <result property="enterpriseName" column="enterprise_usci"/>
         <result property="coverCityCount" column="cover_city_count"/>
         <result property="total" column="total"/>
         <result property="updateTime" column="update_time"/>
@@ -39,12 +39,6 @@
         <result property="addrCode" column="addr_code"/>
         <result property="count" column="count"/>
     </resultMap>
-    <select id="searchList" resultMap="BrandResult">
-        select * from ddt_brand where brand_name like concat("%",#{text},"%") and show_delete=0
-    </select>
-    <select id="searchById" resultMap="BrandResult">
-        select * from ddt_brand where brand_id = #{brandId} and show_delete=0
-    </select>
     <select id="searchByIndustryCodeList" resultMap="BrandResult">
         select * from ddt_brand where industry_code = #{industryCode} and brand_id <![CDATA[<>]]> #{brandId} and show_delete=0
     </select>
@@ -53,6 +47,7 @@
             db.brand_id as brand_id,
             db.brand_name as brand_name,
             brand_img,
+            enterprise_usci,
             index_score,
             cover_city_count,
             total,

+ 0 - 20
ruoyi-demo/src/main/resources/mapper/demo/BrandProvinceMapper.xml

@@ -1,20 +0,0 @@
-<?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.BrandProvinceMapper">
-    <resultMap type="com.ruoyi.demo.entity.BrandProvince" id="BrandProvinceResult">
-        <result property="disId" column="dis_id"/>
-        <result property="brandId" column="brand_id"/>
-        <result property="addrCode" column="addr_code"/>
-        <result property="province" column="province"/>
-        <result property="lat" column="lat"/>
-        <result property="lng" column="lng"/>
-        <result property="disCount" column="dis_count"/>
-        <result property="updateTime" column="update_time"/>
-    </resultMap>
-    <select id="searchByBrandId" resultMap="BrandProvinceResult">
-        select * from bl_brand_province_distribution where brand_id = #{brandId}
-    </select>
-
-</mapper>

+ 0 - 24
ruoyi-demo/src/main/resources/mapper/demo/BrandStatisticsMapper.xml

@@ -1,24 +0,0 @@
-<?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.BrandStatisticsMapper">
-    <resultMap type="com.ruoyi.demo.entity.BrandStatistics" id="BrandStatisticsResult">
-        <result property="brandId" column="brand_id"/>
-        <result property="brandName" column="brand_name"/>
-        <result property="coverProvinceCount" column="cover_province_count"/>
-        <result property="coverCityCount" column="cover_city_count"/>
-        <result property="coverZoneCount" column="cover_zone_count"/>
-        <result property="businessCount" column="business_count"/>
-        <result property="pauseBusinessCount" column="pause_business_count"/>
-        <result property="noBusinessCount" column="no_business_count"/>
-        <result property="total" column="total"/>
-        <result property="updateTime" column="update_time"/>
-    </resultMap>
-    <select id="searchByBrandId" resultMap="BrandStatisticsResult">
-        select * from bl_brand_statistics where brand_id = #{brandId}
-    </select>
-    <select id="searchList" resultMap="BrandStatisticsResult">
-        select * from bl_brand_statistics order by total desc;
-    </select>
-</mapper>

+ 0 - 63
ruoyi-demo/src/main/resources/mapper/demo/BrandStoreOpcloseMapper.xml

@@ -1,63 +0,0 @@
-<?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.BrandStoreOpcloseDao">
-    <resultMap type="com.ruoyi.demo.entity.vo.BrandOpcloseVo" id="BrandOpcloseResult">
-        <result property="brandId" column="brand_id"/>
-        <result property="brandName" column="brand_name"/>
-        <result property="count" column="count"/>
-    </resultMap>
-    <select id="selectOpenByMulti" resultMap="BrandOpcloseResult">
-        SELECT
-            brand_id,
-            brand_name,
-            SUM(open_count) count
-        FROM
-            `bl_brand_store_opclose_statistics`
-        <trim prefix="where" prefixOverrides="and">
-            <if test="typeCodes != null">
-                <foreach collection="typeCodes" item="typeCode" open="and type_code_by in (" separator="," close=")">
-                    #{typeCode,jdbcType=VARCHAR}
-                </foreach>
-            </if>
-            <if test="startTime != null">
-                and DATE_FORMAT(#{startTime},'%Y-%m-%d') <![CDATA[<=]]> DATE_FORMAT(stat_time, '%Y-%m-%d')
-            </if>
-            <if test="endTime != null">
-                and DATE_FORMAT(stat_time, '%Y-%m-%d') <![CDATA[<=]]> DATE_FORMAT(#{endTime},'%Y-%m-%d')
-            </if>
-        </trim>
-        GROUP BY
-            brand_id,
-            brand_name
-        ORDER BY
-            count DESC;
-    </select>
-    <select id="selectCloseByMulti" resultMap="BrandOpcloseResult">
-        SELECT
-            brand_id,
-            brand_name,
-            SUM(close_count) count
-        FROM
-            `bl_brand_store_opclose_statistics`
-        <trim prefix="where" prefixOverrides="and">
-            <if test="typeCodes != null">
-                <foreach collection="typeCodes" item="typeCode" open="and type_code_by in (" separator="," close=")">
-                    #{typeCode,jdbcType=VARCHAR}
-                </foreach>
-            </if>
-            <if test="startTime != null">
-                and DATE_FORMAT(#{startTime},'%Y-%m-%d') <![CDATA[<=]]> DATE_FORMAT(stat_time, '%Y-%m-%d')
-            </if>
-            <if test="endTime != null">
-                and DATE_FORMAT(stat_time, '%Y-%m-%d') <![CDATA[<=]]> DATE_FORMAT(#{endTime},'%Y-%m-%d')
-            </if>
-        </trim>
-        GROUP BY
-            brand_id,
-            brand_name
-        ORDER BY
-            count DESC;
-    </select>
-</mapper>

+ 0 - 4
ruoyi-demo/src/main/resources/mapper/demo/BrandZoneMapper.xml

@@ -6,7 +6,6 @@
     <resultMap type="com.ruoyi.demo.entity.BrandZone" id="BrandZoneResult">
         <result property="disId" column="dis_id"/>
         <result property="brandId" column="brand_id"/>
-        <result property="industryCode" column="industry_code"/>
         <result property="addrCode" column="addr_code"/>
         <result property="province" column="province"/>
         <result property="city" column="city"/>
@@ -21,9 +20,6 @@
         <result property="addrCode" column="addr_code"/>
         <result property="count" column="count"/>
     </resultMap>
-    <select id="searchByBrandId" resultMap="BrandZoneResult">
-        select * from bl_brand_zone_distribution where brand_id = #{brandId}
-    </select>
     <select id="searchByMulti" resultMap="BrandZoneResult">
         SELECT
             *

+ 0 - 12
ruoyi-demo/src/main/resources/mapper/demo/BusinessOpportunitiesMapper.xml

@@ -53,18 +53,6 @@
             </if>
         </trim>
     </select>
-    <select id="searchAllByMulti" resultMap="ClueResult">
-        select * from `bl_business_opportunities_clue`
-        <trim prefix="where" prefixOverrides="and">
-            <if test="userId != null">
-                user_id = #{userId}
-            </if>
-            <if test="text != null">
-                and (contact like concat('%',#{text},'%')
-                or telephone like concat('%',#{text},'%'))
-            </if>
-        </trim>
-    </select>
     <select id="selectCount" resultType="java.lang.Integer">
         SELECT
             COUNT(*) count

+ 0 - 27
ruoyi-demo/src/main/resources/mapper/demo/EnterpriseMapper.xml

@@ -1,27 +0,0 @@
-<?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.EnterpriseMapper">
-    <resultMap type="com.ruoyi.demo.entity.Enterprise" id="EnterpriseResult">
-        <result property="enterpriseUsci" column="enterprise_usci"/>
-        <result property="enterpriseImg" column="enterprise_img"/>
-        <result property="enterpriseName" column="enterprise_name"/>
-        <result property="addrCode" column="addr_code"/>
-        <result property="addrInfo" column="addr_info"/>
-        <result property="enterpriseInfo" column="enterprise_info"/>
-        <result property="manageRangeInfo" column="manage_range_info"/>
-        <result property="enterpriseScale" column="enterprise_scale"/>
-        <result property="registeredCapital" column="registered_capital"/>
-        <result property="createTime" column="create_time"/>
-        <result property="enterpriseItin" column="enterprise_itin"/>
-        <result property="businessStatus" column="business_status"/>
-        <result property="industryCode" column="industry_code"/>
-        <result property="enterpriseType" column="enterprise_type"/>
-        <result property="creditScore" column="credit_score"/>
-        <result property="updateTime" column="update_time"/>
-    </resultMap>
-    <select id="searchByUsci" resultMap="EnterpriseResult">
-        select * from ddt_enterprise where enterprise_usci = #{enterpriseUsci}
-    </select>
-</mapper>

+ 0 - 72
ruoyi-demo/src/main/resources/mapper/demo/WdInfoMapper.xml

@@ -3,83 +3,11 @@
     PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.ruoyi.demo.mapper.WdInfoMapper">
-    <resultMap type="com.ruoyi.demo.entity.bo.WdAddrTypeDistribution" id="WdAddrDisResult">
-        <result property="addrCode" column="addr_code"/>
-        <result property="typeCode" column="type_code_by"/>
-        <result property="count" column="count"/>
-    </resultMap>
-    <resultMap type="com.ruoyi.demo.entity.bo.WdAddrTypeDistribution" id="WdTypeDisResult">
-        <result property="addrCode" column="addr_code"/>
-        <result property="typeCode" column="wd_type_code"/>
-        <result property="count" column="count"/>
-    </resultMap>
-    <resultMap type="com.ruoyi.demo.entity.bo.WdAddrTypeDistribution" id="WdTotalDisResult">
-        <result property="typeCode" column="wd_type_code"/>
-        <result property="count" column="count"/>
-    </resultMap>
     <resultMap type="com.ruoyi.demo.entity.vo.AddStatusVo" id="AddStatusResult">
         <result property="typeCode" column="wd_type_code"/>
         <result property="count" column="count"/>
         <result property="time" column="time"/>
     </resultMap>
-    <select id="searchAddrDisByMulti" resultMap="WdAddrDisResult">
-        SELECT
-            addr_code,
-            type_code_by,
-            COUNT(*) count
-        FROM
-            `ddt_wd_info`
-        WHERE
-            type_code_by IS NOT NULL
-        <if test="addrCodes != null">
-            <foreach collection="addrCodes" item="addrCode" open="AND addr_code IN (" separator="," close=")">
-                #{addrCode,jdbcType=VARCHAR}
-            </foreach>
-        </if>
-        <if test="typeCodes != null">
-            <foreach collection="typeCodes" item="typeCode" open="AND type_code_by IN (" separator="," close=")">
-                #{typeCode,jdbcType=VARCHAR}
-            </foreach>
-        </if>
-        GROUP BY
-            addr_code,
-            type_code_by
-        ORDER BY count DESC;
-    </select>
-    <select id="searchWdTypeDisByMulti" resultMap="WdTypeDisResult">
-        SELECT
-            addr_code,
-            wd_type_code,
-            COUNT(*) count
-        FROM
-            `ddt_wd_info`
-        <trim prefix="WHERE" prefixOverrides="AND">
-            <if test="addrCodes != null">
-                <foreach collection="addrCodes" item="addrCode" open="AND addr_code IN (" separator="," close=")">
-                    #{addrCode,jdbcType=VARCHAR}
-                </foreach>
-            </if>
-            <if test="typeCodes != null">
-                <foreach collection="typeCodes" item="typeCode" open="AND wd_type_code IN (" separator="," close=")">
-                    #{typeCode,jdbcType=VARCHAR}
-                </foreach>
-            </if>
-        </trim>
-        GROUP BY
-            addr_code,
-            wd_type_code
-        ORDER BY count DESC
-    </select>
-    <select id="searchWdTotal" resultMap="WdTotalDisResult">
-        SELECT
-            wd_type_code,
-            COUNT(*) count
-        FROM
-            `ddt_wd_info`
-        GROUP BY
-            wd_type_code
-        ORDER BY count DESC
-    </select>
 
     <select id="list" parameterType="com.ruoyi.demo.entity.vo.WdInfoVo" resultType="com.ruoyi.demo.entity.WdInfo">
         select * from ddt_wd_info

+ 0 - 32
ruoyi-demo/src/main/resources/mapper/demo/WdOpcloseMapper.xml

@@ -1,32 +0,0 @@
-<?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.WdOpcloseDao">
-    <resultMap type="com.ruoyi.demo.entity.WdOpclose" id="WdOpcloseResult">
-        <result property="statId" column="stat_id"/>
-        <result property="addrCode" column="addr_code"/>
-        <result property="wdTypeCode" column="wd_type_code"/>
-        <result property="openCount" column="open_count"/>
-        <result property="closeCount" column="close_count"/>
-        <result property="statTime" column="stat_time"/>
-    </resultMap>
-    <select id="selectListByAddrCodeAndWdTypeCodes" resultMap="WdOpcloseResult">
-        SELECT
-            SUM(open_count) open_count,
-            SUM(close_count) close_count
-        FROM
-            `bl_wd_opclose_statistics`
-        <trim prefix="where" prefixOverrides="and">
-            <if test="addrCode != null">
-                and addr_code LIKE CONCAT(#{addrCode}, '%')
-            </if>
-            <if test="wdTypeCodes != null">
-                <foreach collection="wdTypeCodes" item="code" open="and wd_type_code in (" separator="," close=")">
-                    #{code,jdbcType=VARCHAR}
-                </foreach>
-            </if>
-            and DATE_FORMAT(stat_time, '%Y-%m') = DATE_FORMAT(#{time}, '%Y-%m');
-        </trim>
-    </select>
-</mapper>
-