Ver código fonte

近期各地区网点开关数量变化情况

云殇忆 1 ano atrás
pai
commit
6530001355

+ 6 - 7
benyun-core/src/main/java/com/benyun/core/controller/WdInfoController.java

@@ -2,15 +2,13 @@ package com.benyun.core.controller;
 
 import com.benyun.core.entity.vo.AddStatusVo;
 import com.benyun.core.entity.vo.ListQueryBody;
+import com.benyun.core.entity.vo.WdOpcloseVo;
 import com.benyun.core.service.WdInfoService;
 import com.ruoyi.common.core.domain.R;
 import lombok.RequiredArgsConstructor;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import java.time.LocalDateTime;
 import java.util.List;
@@ -59,9 +57,10 @@ public class WdInfoController {
 
 //    近期各地区网点开关数量变化情况
     @PostMapping("/opclose")
-    public R opclose(ListQueryBody body){
+    public R opclose(@RequestBody ListQueryBody body){
         List<String> addrCode = body.getAddrCode();
-        List<String> typeCode = body.getTypeCode(); // 网点分类(犇云)预留
-        return null;
+        List<String> wdTypeCode = body.getTypeCode(); // 网点类型
+        List<WdOpcloseVo> wdOpcloseVos = wdInfoService.searchWdOpcloses(addrCode, wdTypeCode);
+        return R.ok(wdOpcloseVos);
     }
 }

+ 14 - 0
benyun-core/src/main/java/com/benyun/core/dao/WdOpcloseDao.java

@@ -0,0 +1,14 @@
+package com.benyun.core.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.benyun.core.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);
+}

+ 37 - 0
benyun-core/src/main/java/com/benyun/core/entity/WdOpclose.java

@@ -0,0 +1,37 @@
+package com.benyun.core.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;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
+import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+@TableName("bl_wd_opclose_statistics")
+public class WdOpclose {
+    @TableField("stat_id")
+    private String statId;
+
+    @TableField("addr_code")
+    private String addrCode;
+
+    @TableField("wd_type_code")
+    private String wdTypeCode;
+
+    @TableField("open_count")
+    private Integer openCount;
+
+    @TableField("close_count")
+    private Integer closeCount;
+
+    @TableField("stat_time")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonSerialize(using = LocalDateTimeSerializer.class)
+    @JsonDeserialize(using = LocalDateTimeDeserializer.class)
+    private LocalDateTime statTime;
+}

+ 29 - 0
benyun-core/src/main/java/com/benyun/core/entity/vo/WdOpcloseVo.java

@@ -0,0 +1,29 @@
+package com.benyun.core.entity.vo;
+
+import com.benyun.core.entity.WdOpclose;
+import lombok.Data;
+
+@Data
+public class WdOpcloseVo {
+    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();
+    }
+}

+ 2 - 0
benyun-core/src/main/java/com/benyun/core/service/WdInfoService.java

@@ -5,6 +5,7 @@ import com.benyun.core.entity.bo.WdAddrTypeDistribution;
 import com.benyun.core.entity.vo.AddStatusVo;
 import com.benyun.core.entity.vo.TypeByBody;
 import com.benyun.core.entity.vo.WdInfoVo;
+import com.benyun.core.entity.vo.WdOpcloseVo;
 import com.github.pagehelper.PageInfo;
 
 import java.util.HashMap;
@@ -15,4 +16,5 @@ public interface WdInfoService {
 //    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);
 }

+ 29 - 129
benyun-core/src/main/java/com/benyun/core/service/impl/WdInfoServiceImpl.java

@@ -1,20 +1,16 @@
 package com.benyun.core.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.benyun.core.dao.AddrCategoryDao;
-import com.benyun.core.dao.CategoryMapper;
-import com.benyun.core.dao.TypeByDao;
-import com.benyun.core.dao.WdInfoMapper;
-import com.benyun.core.entity.AddrCategory;
-import com.benyun.core.entity.Category;
-import com.benyun.core.entity.TypeBy;
-import com.benyun.core.entity.WdInfo;
+import com.benyun.core.dao.*;
+import com.benyun.core.entity.*;
 import com.benyun.core.entity.bo.WdAddrTypeDistribution;
 import com.benyun.core.entity.vo.AddStatusVo;
 import com.benyun.core.entity.vo.TypeByBody;
 import com.benyun.core.entity.vo.WdInfoVo;
+import com.benyun.core.entity.vo.WdOpcloseVo;
 import com.benyun.core.service.CategoryService;
 import com.benyun.core.service.WdInfoService;
+import com.benyun.core.utils.CategoryUtil;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -33,131 +29,16 @@ import java.util.stream.Collectors;
 
 @Service
 public class WdInfoServiceImpl implements WdInfoService {
-    public Map<String,String> typeMap;
-    public Map<String,List<String>> typeChildren = new HashMap<>();
-
-    public Map<String,String> addrMap;
-    public Map<String,List<String>> addrChildren = new HashMap<>();
-
-    public Map<String,String> wdTypeMap;
     @Autowired
-    WdInfoMapper wdInfoMapper;
+    CategoryUtil categoryUtil;
     @Autowired
-    TypeByDao byDao;
+    WdInfoMapper wdInfoMapper;
     @Autowired
-    AddrCategoryDao addrCategoryDao;
-
-    public void setTypeMap(){
-        if (typeMap == null){
-            typeMap = new HashMap<>();
-            QueryWrapper<TypeBy> queryWrapper = new QueryWrapper<>();
-            List<TypeBy> typeByList = byDao.selectList(queryWrapper);
-            for (TypeBy by : typeByList){
-                if (!by.getSubCategory().equals(""))
-                    typeMap.put(by.getTypeCodeBy(),by.getSubCategory());
-                else if (!by.getMidCategory().equals(""))
-                    typeMap.put(by.getTypeCodeBy(),by.getMidCategory());
-                else
-                    typeMap.put(by.getTypeCodeBy(),by.getBigCategory());
-            }
-        }
-    }
-    public void setAddrMap(){
-        if (addrMap == null){
-            addrMap = new HashMap<>();
-            QueryWrapper<AddrCategory> queryWrapper = new QueryWrapper<>();
-            List<AddrCategory> addrCategories = addrCategoryDao.selectList(queryWrapper);
-            for (AddrCategory addr : addrCategories){
-                if (!addr.getDistrict().equals(""))
-                    addrMap.put(addr.getAddrCode(),addr.getDistrict());
-                else if (!addr.getCity().equals(""))
-                    addrMap.put(addr.getAddrCode(),addr.getCity());
-                else
-                    addrMap.put(addr.getAddrCode(),addr.getProvince());
-            }
-        }
-    }
-    public void setWdTypeMap(){
-        if (wdTypeMap == null){
-            wdTypeMap = new HashMap<>();
-            wdTypeMap.put("0","基础设施网点");
-            wdTypeMap.put("1","门店网点");
-            wdTypeMap.put("2","小区网点");
-            wdTypeMap.put("3","楼宇网点");
-            wdTypeMap.put("4","交通设施网点");
-            wdTypeMap.put("5","公司网点");
-        }
-    }
-    public List<String> getAllOtherAddrCode(String addrCode){
-        if (addrChildren.get(addrCode) != null){
-//            System.out.println("quickly");
-            return addrChildren.get(addrCode);
-        }
-        List<String> addrCodes = new ArrayList<>();
-        String big = String.valueOf(addrCode.charAt(0))+String.valueOf(addrCode.charAt(1));
-        String mid = String.valueOf(addrCode.charAt(2))+String.valueOf(addrCode.charAt(3));
-        String sub = String.valueOf(addrCode.charAt(4))+String.valueOf(addrCode.charAt(5));
-        if (sub.equals("00")){
-            QueryWrapper<AddrCategory> queryWrapper = new QueryWrapper<>();
-            if (mid.equals("00")){
-                queryWrapper.likeRight("addr_code",big).and(addrCategoryQueryWrapper -> {
-                    addrCategoryQueryWrapper.ne("city","");
-                }).and(addrCategoryQueryWrapper -> {
-                    addrCategoryQueryWrapper.ne("district","");
-                });
-            }else{
-                queryWrapper.likeRight("addr_code",big+mid).and(addrCategoryQueryWrapper -> {
-                    addrCategoryQueryWrapper.ne("city","");
-                }).and(addrCategoryQueryWrapper -> {
-                    addrCategoryQueryWrapper.ne("district","");
-                });
-            }
-            List<AddrCategory> zones = addrCategoryDao.selectList(queryWrapper);
-            for (AddrCategory zone : zones){
-                addrCodes.add(zone.getAddrCode());
-            }
-            addrChildren.put(addrCode,addrCodes);
-        }else
-            addrCodes.add(addrCode);
-        return addrCodes;
-    }
-    public List<String> getAllOtherTypeBy(String typeCode){
-        if (typeChildren.get(typeCode) != null){
-//            System.out.println("quickly");
-            return typeChildren.get(typeCode);
-        }
-        List<String> types = new ArrayList<>();
-        String big = String.valueOf(typeCode.charAt(0)) + String.valueOf(typeCode.charAt(1));
-        String mid = String.valueOf(typeCode.charAt(2)) + String.valueOf(typeCode.charAt(3));
-        String sub = String.valueOf(typeCode.charAt(4)) + String.valueOf(typeCode.charAt(5));
-        if (sub.equals("00")){
-            QueryWrapper<TypeBy> queryWrapper = new QueryWrapper<>();
-            if (mid.equals("00")){
-                queryWrapper.likeRight("type_code_by",big).and(addrCategoryQueryWrapper -> {
-                    addrCategoryQueryWrapper.ne("mid_category","");
-                }).and(addrCategoryQueryWrapper -> {
-                    addrCategoryQueryWrapper.ne("sub_category","");
-                });
-            }else{
-                queryWrapper.likeRight("type_code_by",big+mid).and(addrCategoryQueryWrapper -> {
-                    addrCategoryQueryWrapper.ne("mid_category","");
-                }).and(addrCategoryQueryWrapper -> {
-                    addrCategoryQueryWrapper.ne("sub_category","");
-                });
-            }
-            List<TypeBy> typeByList = byDao.selectList(queryWrapper);
-            for (TypeBy typeBy : typeByList){
-                types.add(typeBy.getTypeCodeBy());
-            }
-            typeChildren.put(typeCode,types);
-        }else
-            types.add(typeCode);
-        return types;
-    }
+    WdOpcloseDao wdOpcloseDao;
 
     @Override
     public List<AddStatusVo> searchAddStatus(List<String> addrCodes, List<String> typeCodes) {
-        setWdTypeMap();
+        categoryUtil.setWdTypeMap();
         List<String> addrs = new ArrayList<>();
         List<String> times = new ArrayList<>();
         for (int i = 0; i < 12; i++){
@@ -165,7 +46,7 @@ public class WdInfoServiceImpl implements WdInfoService {
         }
         if (addrCodes != null){
             for (String s : addrCodes){
-                List<String> allOtherAddrCode = getAllOtherAddrCode(s);
+                List<String> allOtherAddrCode = categoryUtil.getAllOtherAddrCode(s);
                 addrs.addAll(allOtherAddrCode);
             }
         }else{
@@ -173,11 +54,30 @@ public class WdInfoServiceImpl implements WdInfoService {
         }
         List<AddStatusVo> addStatusVos = wdInfoMapper.searchAddStatusByMulti(times, addrs, typeCodes);
         for (AddStatusVo vo : addStatusVos){
-            vo.setTypeName(wdTypeMap.get(vo.getTypeCode()));
+            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().plusMonths(-1));
+                if (opclose != null){
+                    WdOpcloseVo vo = new WdOpcloseVo(s,opclose);
+                    vo.setAddrName(categoryUtil.addrMap.get(s));
+                    vos.add(vo);
+                }
+            }
+            return vos;
+        }
+        return vos;
+    }
+
 //    @Override
 //    public List<WdAddrTypeDistribution> searchAddrTypeDistribution(List<String> addrCodes, List<String> typeCodes) {
 //        List<String> acodes = new ArrayList<>();

+ 157 - 0
benyun-core/src/main/java/com/benyun/core/utils/CategoryUtil.java

@@ -0,0 +1,157 @@
+package com.benyun.core.utils;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.benyun.core.dao.AddrCategoryDao;
+import com.benyun.core.dao.TypeByDao;
+import com.benyun.core.entity.AddrCategory;
+import com.benyun.core.entity.TypeBy;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Component
+public class CategoryUtil {
+    public Map<String,String> typeMap;
+    public Map<String, List<String>> typeChildren = new HashMap<>();
+
+    public Map<String,String> addrMap;
+    public Map<String,List<String>> addrChildren = new HashMap<>();
+
+    public Map<String,String> wdTypeMap;
+
+    @Autowired
+    TypeByDao byDao;
+    @Autowired
+    AddrCategoryDao addrCategoryDao;
+
+    public String whatis(String addrCode){
+        String big = String.valueOf(addrCode.charAt(0))+String.valueOf(addrCode.charAt(1));
+        String mid = String.valueOf(addrCode.charAt(2))+String.valueOf(addrCode.charAt(3));
+        String sub = String.valueOf(addrCode.charAt(4))+String.valueOf(addrCode.charAt(5));
+        if (sub.equals("00")){
+            if (mid.equals("00")){
+                return big;
+            }
+            return big+mid;
+        }
+        return big+mid+sub;
+    }
+
+    public void setTypeMap(){
+        if (typeMap == null){
+            typeMap = new HashMap<>();
+            QueryWrapper<TypeBy> queryWrapper = new QueryWrapper<>();
+            List<TypeBy> typeByList = byDao.selectList(queryWrapper);
+            for (TypeBy by : typeByList){
+                if (!by.getSubCategory().equals(""))
+                    typeMap.put(by.getTypeCodeBy(),by.getSubCategory());
+                else if (!by.getMidCategory().equals(""))
+                    typeMap.put(by.getTypeCodeBy(),by.getMidCategory());
+                else
+                    typeMap.put(by.getTypeCodeBy(),by.getBigCategory());
+            }
+        }
+    }
+
+    public void setAddrMap(){
+        if (addrMap == null){
+            addrMap = new HashMap<>();
+            QueryWrapper<AddrCategory> queryWrapper = new QueryWrapper<>();
+            List<AddrCategory> addrCategories = addrCategoryDao.selectList(queryWrapper);
+            for (AddrCategory addr : addrCategories){
+                if (!addr.getDistrict().equals(""))
+                    addrMap.put(addr.getAddrCode(),addr.getDistrict());
+                else if (!addr.getCity().equals(""))
+                    addrMap.put(addr.getAddrCode(),addr.getCity());
+                else
+                    addrMap.put(addr.getAddrCode(),addr.getProvince());
+            }
+        }
+    }
+
+    public void setWdTypeMap(){
+        if (wdTypeMap == null){
+            wdTypeMap = new HashMap<>();
+            wdTypeMap.put("0","基础设施网点");
+            wdTypeMap.put("1","门店网点");
+            wdTypeMap.put("2","小区网点");
+            wdTypeMap.put("3","楼宇网点");
+            wdTypeMap.put("4","交通设施网点");
+            wdTypeMap.put("5","公司网点");
+        }
+    }
+
+    public List<String> getAllOtherAddrCode(String addrCode){
+        setAddrMap();
+        if (addrChildren.get(addrCode) != null){
+//            System.out.println("quickly");
+            return addrChildren.get(addrCode);
+        }
+        List<String> addrCodes = new ArrayList<>();
+        String big = String.valueOf(addrCode.charAt(0))+String.valueOf(addrCode.charAt(1));
+        String mid = String.valueOf(addrCode.charAt(2))+String.valueOf(addrCode.charAt(3));
+        String sub = String.valueOf(addrCode.charAt(4))+String.valueOf(addrCode.charAt(5));
+        if (sub.equals("00")){
+            QueryWrapper<AddrCategory> queryWrapper = new QueryWrapper<>();
+            if (mid.equals("00")){
+                queryWrapper.likeRight("addr_code",big).and(addrCategoryQueryWrapper -> {
+                    addrCategoryQueryWrapper.ne("city","");
+                }).and(addrCategoryQueryWrapper -> {
+                    addrCategoryQueryWrapper.ne("district","");
+                });
+            }else{
+                queryWrapper.likeRight("addr_code",big+mid).and(addrCategoryQueryWrapper -> {
+                    addrCategoryQueryWrapper.ne("city","");
+                }).and(addrCategoryQueryWrapper -> {
+                    addrCategoryQueryWrapper.ne("district","");
+                });
+            }
+            List<AddrCategory> zones = addrCategoryDao.selectList(queryWrapper);
+            for (AddrCategory zone : zones){
+                addrCodes.add(zone.getAddrCode());
+            }
+            addrChildren.put(addrCode,addrCodes);
+        }else
+            addrCodes.add(addrCode);
+        return addrCodes;
+    }
+
+    public List<String> getAllOtherTypeBy(String typeCode){
+        setTypeMap();
+        if (typeChildren.get(typeCode) != null){
+//            System.out.println("quickly");
+            return typeChildren.get(typeCode);
+        }
+        List<String> types = new ArrayList<>();
+        String big = String.valueOf(typeCode.charAt(0)) + String.valueOf(typeCode.charAt(1));
+        String mid = String.valueOf(typeCode.charAt(2)) + String.valueOf(typeCode.charAt(3));
+        String sub = String.valueOf(typeCode.charAt(4)) + String.valueOf(typeCode.charAt(5));
+        if (sub.equals("00")){
+            QueryWrapper<TypeBy> queryWrapper = new QueryWrapper<>();
+            if (mid.equals("00")){
+                queryWrapper.likeRight("type_code_by",big).and(addrCategoryQueryWrapper -> {
+                    addrCategoryQueryWrapper.ne("mid_category","");
+                }).and(addrCategoryQueryWrapper -> {
+                    addrCategoryQueryWrapper.ne("sub_category","");
+                });
+            }else{
+                queryWrapper.likeRight("type_code_by",big+mid).and(addrCategoryQueryWrapper -> {
+                    addrCategoryQueryWrapper.ne("mid_category","");
+                }).and(addrCategoryQueryWrapper -> {
+                    addrCategoryQueryWrapper.ne("sub_category","");
+                });
+            }
+            List<TypeBy> typeByList = byDao.selectList(queryWrapper);
+            for (TypeBy typeBy : typeByList){
+                types.add(typeBy.getTypeCodeBy());
+            }
+            typeChildren.put(typeCode,types);
+        }else
+            types.add(typeCode);
+        return types;
+    }
+}

+ 32 - 0
benyun-core/src/main/resources/mapper/WdOpcloseMapper.xml

@@ -0,0 +1,32 @@
+<?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.benyun.core.dao.WdOpcloseDao">
+    <resultMap type="com.benyun.core.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>
+