Bladeren bron

Merge branch 'master' into lcy

云殇忆 1 jaar geleden
bovenliggende
commit
ac4e59886b
25 gewijzigde bestanden met toevoegingen van 874 en 143 verwijderingen
  1. 17 5
      benyun-core/src/main/java/com/ruoyi/benyun/config/QuartzConfig.java
  2. 4 0
      benyun-core/src/main/java/com/ruoyi/benyun/entity/Brand.java
  3. 15 5
      benyun-core/src/main/java/com/ruoyi/benyun/job/WriteRedisJob.java
  4. 1 1
      benyun-core/src/main/java/com/ruoyi/benyun/mapper/BrandCityDao.java
  5. 2 1
      benyun-core/src/main/java/com/ruoyi/benyun/mapper/BrandStatisticsMapper.java
  6. 68 45
      benyun-core/src/main/java/com/ruoyi/benyun/service/impl/ChannelAnalyseServiceImpl.java
  7. 18 2
      benyun-core/src/test/java/com/ruoyi/benyun/BenyunCoreApplicationTests.java
  8. 76 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/benyun/IUserinfoController.java
  9. 0 18
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/benyun/TestController.java
  10. 13 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/constant/RedisContant.java
  11. 4 4
      ruoyi-demo/src/main/java/com/ruoyi/demo/controller/ChannelAnalyseController.java
  12. 7 7
      ruoyi-demo/src/main/java/com/ruoyi/demo/controller/ChannelMapController.java
  13. 37 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/controller/CommonController.java
  14. 2 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/service/CommonService.java
  15. 152 47
      ruoyi-demo/src/main/java/com/ruoyi/demo/service/impl/ChannelAnalyseServiceImpl.java
  16. 27 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/service/impl/CommonServiceImpl.java
  17. 191 0
      ruoyi-system/src/main/java/com/ruoyi/system/domain/OpenAccount.java
  18. 67 0
      ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/OpenAccountVO.java
  19. 9 0
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/IUserinfoMapper.java
  20. 5 0
      ruoyi-system/src/main/java/com/ruoyi/system/service/AccountService.java
  21. 10 0
      ruoyi-system/src/main/java/com/ruoyi/system/service/IUserinfoService.java
  22. 13 0
      ruoyi-system/src/main/java/com/ruoyi/system/service/SysLoginService.java
  23. 38 0
      ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AccountServiceImpl.java
  24. 97 0
      ruoyi-system/src/main/java/com/ruoyi/system/service/impl/IUserinfoServiceImpl.java
  25. 1 8
      ruoyi-ui/vue.config.js

+ 17 - 5
benyun-core/src/main/java/com/ruoyi/benyun/config/QuartzConfig.java

@@ -18,7 +18,11 @@ import java.util.TimeZone;
 @Slf4j
 @Configuration
 public class QuartzConfig {
-    // 创建一个封装Job对象的类型JobDetall,并放入Spring容器中
+
+    /**
+     * 给网点打标签
+     * @return
+     */
     @Bean
     public JobDetail AnalyseJobDetail() {
         log.info("AnalyseJobDetail");
@@ -29,11 +33,11 @@ public class QuartzConfig {
             .build();
     }
 
-    //触发器声明,设置job的运行时机,并放入Spring容器中
+
     @Bean
     public Trigger AnalyseTrigger() {
         //定义Cron表达式
-        CronScheduleBuilder cron = CronScheduleBuilder.cronSchedule("0 0 0 1/15 * ? ");
+        CronScheduleBuilder cron = CronScheduleBuilder.cronSchedule("0 0 23 26 * ? ");
         cron.inTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
 
         return TriggerBuilder
@@ -44,6 +48,10 @@ public class QuartzConfig {
             .build();
     }
 
+    /**
+     * 将网点载入redis中
+     * @return
+     */
     @Bean
     public JobDetail WriteRedisJobDetail() {
         log.info("WriteRedisJobDetail");
@@ -59,7 +67,7 @@ public class QuartzConfig {
     @Bean
     public Trigger WriteRedisTrigger(){
         //定义Cron表达式
-        CronScheduleBuilder cron  = CronScheduleBuilder.cronSchedule("0 0 0 22 11 ? *");
+        CronScheduleBuilder cron  = CronScheduleBuilder.cronSchedule("0 0 1 * * ? ");
 
         cron.inTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
 
@@ -71,6 +79,9 @@ public class QuartzConfig {
             .build();
     }
 
+    /**
+     * 品牌分析
+     * */
     @Bean
     public JobDetail BrandStatsiticsJobDetail() {
         log.info("BrandStatsiticsJobDetail");
@@ -85,7 +96,8 @@ public class QuartzConfig {
     @Bean
     public Trigger BrandStatsiticsTrigger() {
         //定义Cron表达式
-        CronScheduleBuilder cron = CronScheduleBuilder.cronSchedule("0 0 18 13 11 ? ");
+        CronScheduleBuilder cron = CronScheduleBuilder.cronSchedule("0 0 23 30 * ? ");
+        //CronScheduleBuilder cron = CronScheduleBuilder.cronSchedule("0 30 11 16 11 ? ");
         cron.inTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
 
         return TriggerBuilder

+ 4 - 0
benyun-core/src/main/java/com/ruoyi/benyun/entity/Brand.java

@@ -19,12 +19,16 @@ public class Brand {
     private String brandId;
     @TableField("brand_img")
     private String brandImg;
+
     @TableField("brand_name")
     private String brandName;
+
     @TableField("industry_code")
     private String industryCode;
+
     @TableField("enterprise_usci")
     private String enterpriseUsci;
+
     @TableField("per_capita_consumption")
     private Float perCapitaConsumption;
     @TableField("comment_count")

+ 15 - 5
benyun-core/src/main/java/com/ruoyi/benyun/job/WriteRedisJob.java

@@ -8,6 +8,7 @@ import org.quartz.Job;
 import org.quartz.JobExecutionContext;
 import org.quartz.JobExecutionException;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Component;
 
 import java.time.LocalDateTime;
@@ -23,12 +24,21 @@ public class WriteRedisJob implements Job {
     @Autowired
     WdInfoDao wdInfoDao;
 
+    @Autowired
+    RedisTemplate redisTemplate;
+
     @Override
     public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
-        LocalDateTime now = LocalDateTime.now(ZoneId.of("Asia/Shanghai"));
-        //LocalDateTime localDateTime = now.plusDays(-1);
-        LocalDateTime localDateTime = LocalDateTime.of(2023, 6, 1, 0,0);
-        log.info("开始载入redis:" + localDateTime.toString());
-        wdRedisStoreage.writeWdGeoRedis1(localDateTime.toString());
+        Boolean aBoolean = redisTemplate.hasKey("4501");
+        if (aBoolean){
+            LocalDateTime now = LocalDateTime.now(ZoneId.of("Asia/Shanghai"));
+            LocalDateTime localDateTime = now.plusDays(-1);
+            log.info("开始载入redis:" + localDateTime.toString());
+            wdRedisStoreage.writeWdGeoRedis1(localDateTime.toString());
+        }else {
+            LocalDateTime localDateTime = LocalDateTime.of(2023, 6, 1, 0,0);
+            log.info("开始载入redis:" + localDateTime.toString());
+            wdRedisStoreage.writeWdGeoRedis1(localDateTime.toString());
+        }
     }
 }

+ 1 - 1
benyun-core/src/main/java/com/ruoyi/benyun/mapper/BrandCityDao.java

@@ -11,7 +11,7 @@ import java.util.List;
 @Mapper
 public interface BrandCityDao extends BaseMapper<BrandCity> {
     List<BrandCity> searchByBrandId(String brandId);
-    List<BrandCity> searchByBrandIdOrderByCity(String brandId,String month);
+    List<BrandCity> searchByBrandIdOrderByCity(@Param("cities") String brandId,@Param("cities") String month);
     void insertAll(@Param("cities") List<BrandCity> cities);
     List<String> selectIns();
     Integer selectCountByBrandId(String brandId);

+ 2 - 1
benyun-core/src/main/java/com/ruoyi/benyun/mapper/BrandStatisticsMapper.java

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

+ 68 - 45
benyun-core/src/main/java/com/ruoyi/benyun/service/impl/ChannelAnalyseServiceImpl.java

@@ -65,7 +65,7 @@ public class ChannelAnalyseServiceImpl implements ChannelAnalyseService {
 
         //1.获取所有符合条件的网点信息
         QueryWrapper<WdInfo> queryWrapper = new QueryWrapper<>();
-        queryWrapper.select("addr_code","count(wd_id) as audit");
+        queryWrapper.select("addr_code","count(*) as audit");
         assembleQueryWrapper(queryWrapper,channelMapAceeptVo);
         queryWrapper.groupBy("addr_code");
         List<WdInfo> wdInfos = wdInfoDao.selectList(queryWrapper);
@@ -94,7 +94,6 @@ public class ChannelAnalyseServiceImpl implements ChannelAnalyseService {
     }
 
 
-    //TODO 待测试(redis版本)
     @Override
     public HashMap<String, Object> tagAnalyse(ChannelMapAceeptVo channelMapAceeptVo) {
         //1.根据条件的到位网点信息
@@ -102,60 +101,84 @@ public class ChannelAnalyseServiceImpl implements ChannelAnalyseService {
         queryWrapper.select("wd_id");
         assembleQueryWrapper(queryWrapper,channelMapAceeptVo);
         List<WdInfo> queryWd = wdInfoDao.selectList(queryWrapper);
+        if (!queryWd.isEmpty()) {
+            List<String> wdIds = queryWd.stream().map(item -> {
+                return item.getWdId();
+            }).collect(Collectors.toList());
+            queryWd.clear();
+
+
+            //分批统计
+            int pageSizePoint = 20;
+            int p = 0;
+            int q = pageSizePoint;
+            int total = 0;
+            HashMap<String,Integer> hashMap = new HashMap<>();
+            while(p < queryWd.size()){
+                if(q >= queryWd.size())
+                    q = queryWd.size();
+
+                //统计
+                total+=tagAnalyseItem(hashMap,wdIds.subList(p,q));
+                p=q;
+                q+=pageSizePoint;
+            }
+
+            //3.封装统计值
+            HashMap<String, Object> result = new HashMap<>();
+            List<TagAnalyse> list = new ArrayList<>();
+            for (String s : hashMap.keySet()) {
+                TagAnalyse tagAnalyse = new TagAnalyse();
+                tagAnalyse.setName(s);
+                tagAnalyse.setCount(hashMap.get(s));
+                BigDecimal bigDecimal = new BigDecimal((double) tagAnalyse.getCount() / total);
+                double v = bigDecimal.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
+                tagAnalyse.setRadio(v);
+                list.add(tagAnalyse);
+            }
+
+            //4.对结果集进行排序
+            Collections.sort(list, new Comparator<TagAnalyse>() {
+                @Override
+                public int compare(TagAnalyse o1, TagAnalyse o2) {
+                    return o2.getCount() - o1.getCount();
+                }
+            });
 
+            //5.分页返回结果集
+            int i = 1;
+            int start = 0,end = 6;
+            while(start<list.size()){
+                if(end>=list.size())
+                    end = list.size();
+                result.put(""+i++,new ArrayList(list.subList(start,end)));
+                start=end;
+                end+=6;
+            }
+            result.put("pages",i-1);
+            result.put("total",total);
+            return result;
+        }
+        return new HashMap<>();
+    }
+
+    public int tagAnalyseItem(HashMap<String,Integer> hashMap,List<String> keys){
         //2.获取网点周边标签,并进行统计
         int total = 0;
-        HashMap<String,Integer> hashMap = new HashMap<>();
-        for (WdInfo wdInfo : queryWd) {
-            List<String> wdTag = wdRedisStoreage.getWdTag(wdInfo);
-            if (wdTag == null)
+        List<List<String>> wdTagList = wdRedisStoreage.getWdTagList(keys);
+        for (List<String> list : wdTagList) {
+            if (list == null || list.size() == 0)
                 continue;
-            total++;
-            for (String s : wdTag) {
+            for (String s : list) {
                 Integer integer = hashMap.get(s);
                 if (integer == null)
                     hashMap.put(s,1);
                 else
                     hashMap.put(s,integer+1);
             }
-
-        }
-
-        //3.封装统计值
-        HashMap<String, Object> result = new HashMap<>();
-        List<TagAnalyse> list = new ArrayList<>();
-        for (String s : hashMap.keySet()) {
-            TagAnalyse tagAnalyse = new TagAnalyse();
-            tagAnalyse.setName(s);
-            tagAnalyse.setCount(hashMap.get(s));
-            BigDecimal bigDecimal = new BigDecimal((double) tagAnalyse.getCount() / total);
-            double v = bigDecimal.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
-            tagAnalyse.setRadio(v);
-            list.add(tagAnalyse);
-        }
-
-        //4.对结果集进行排序
-        Collections.sort(list, new Comparator<TagAnalyse>() {
-            @Override
-            public int compare(TagAnalyse o1, TagAnalyse o2) {
-                return o2.getCount() - o1.getCount();
-            }
-        });
-
-
-        //5.分页返回结果集
-        int i = 1;
-        int start = 0,end = 6;
-        while(start<list.size()){
-            if(end>=list.size())
-                end = list.size();
-            result.put(""+i++,new ArrayList(list.subList(start,end)));
-            start=end;
-            end+=6;
+            total++;
         }
-        result.put("pages",i-1);
-        result.put("total",total);
-        return result;
+        return total;
     }
 
     @Override

+ 18 - 2
benyun-core/src/test/java/com/ruoyi/benyun/BenyunCoreApplicationTests.java

@@ -5,8 +5,10 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.ruoyi.benyun.constant.RedisContant;
 import com.ruoyi.benyun.constant.RedisInitContant;
 import com.ruoyi.benyun.entity.Brand;
+import com.ruoyi.benyun.entity.BrandStatistics;
 import com.ruoyi.benyun.entity.StoreWd;
 import com.ruoyi.benyun.mapper.BrandMapper;
+import com.ruoyi.benyun.mapper.BrandStatisticsMapper;
 import com.ruoyi.benyun.mapper.StoreWdDao;
 import com.ruoyi.benyun.mapper.WdInfoDao;
 //import com.ruoyi.benyun.service.WriteService;
@@ -50,14 +52,28 @@ class BenyunCoreApplicationTests {
     @Autowired
     BrandMapper brandMapper;
 
+    @Autowired
+    BrandStatisticsMapper brandStatisticsMapper;
+
     @Autowired
     StoreWdDao storeWdDao;
 
     @Test
     void contextLoads() {
+        QueryWrapper<BrandStatistics> queryWrapper3 = new QueryWrapper<>();
+        queryWrapper3.select("brand_name");
+        queryWrapper3.ge("total",30);
+        queryWrapper3.orderByDesc("total");
+        List<BrandStatistics> brandStatistics = brandStatisticsMapper.selectList(queryWrapper3);
+        List<String> collect1 = brandStatistics.stream().map(item -> {
+            return item.getBrandName();
+        }).collect(Collectors.toList());
+
         ArrayList<String> moreBrandName = new ArrayList<>();
         ArrayList<String> existBrandName = new ArrayList<>();
-        for (String brandName : brandNames) {
+        int i = 1;
+        for (String brandName : collect1) {
+            System.out.println((i++) + "/"+collect1.size());
             //1.找到主品牌
             QueryWrapper<Brand> queryWrapper = new QueryWrapper<>();
             queryWrapper.select("brand_id","brand_name");
@@ -98,7 +114,7 @@ class BenyunCoreApplicationTests {
                 queryWrapper2.in("brand_id",collect);
                 brandMapper.delete(queryWrapper2);
             }catch (Exception exception){
-                exception.printStackTrace();
+                System.out.println("多个: "+brandName);
                 moreBrandName.add(brandName);
             }
         }

+ 76 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/benyun/IUserinfoController.java

@@ -0,0 +1,76 @@
+package com.ruoyi.web.controller.benyun;
+
+import cn.dev33.satoken.annotation.SaIgnore;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.system.domain.vo.OpenAccountVO;
+import com.ruoyi.system.service.AccountService;
+import com.ruoyi.system.service.IUserinfoService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.ArrayList;
+
+@RestController
+@RequiredArgsConstructor
+public class IUserinfoController {
+    @Autowired
+    private IUserinfoService iUserinfoService;
+
+    @Autowired
+    private AccountService accountService;
+
+
+    /**
+     * 创建管理员
+     * @param openAccountVO
+     * @return
+     */
+    @PostMapping("/createAdmin")
+    public R createAdmin(@Validated @RequestBody OpenAccountVO openAccountVO) {
+        ArrayList<Integer> integers = new ArrayList<>();
+        integers.add(1); //管理员
+        openAccountVO.setRoles(integers);
+        R admin = iUserinfoService.createAdmin(openAccountVO);
+        return admin;
+    }
+
+    /**
+     * 创建用户
+     * @param openAccountVO
+     * @return
+     */
+    @PostMapping("/createUser")
+    public R createUser(@Validated @RequestBody OpenAccountVO openAccountVO) {
+        ArrayList<Integer> integers = new ArrayList<>();
+        integers.add(2); //管理员
+        openAccountVO.setRoles(integers);
+        R user = iUserinfoService.createUser(openAccountVO);
+        return user;
+    }
+
+
+    @PostMapping("/disableUser")
+    public R disableUser(@Validated @RequestBody OpenAccountVO openAccountVO) {
+        iUserinfoService.disableUser(openAccountVO);
+        return R.ok();
+    }
+
+
+    /**
+     * uId免密登录
+     * @Author Yyz
+     * @Date 2020/12/1 13:58
+     */
+    @SaIgnore
+    @PostMapping("/loginByUId")
+    public R login(String uId)  {
+        R<Object> ok = R.ok();
+        ok.setData(accountService.login(uId));
+        return ok;
+    }
+
+}

+ 0 - 18
ruoyi-admin/src/main/java/com/ruoyi/web/controller/benyun/TestController.java

@@ -1,18 +0,0 @@
-package com.ruoyi.web.controller.benyun;
-
-
-import com.ruoyi.common.core.domain.R;
-import lombok.RequiredArgsConstructor;
-import org.springframework.web.bind.annotation.RequestMapping;
-
-@RequiredArgsConstructor
-@RequestMapping("/test")
-public class TestController {
-
-
-    @RequestMapping("/test2")
-    public R test2(){
-        return R.ok("test2");
-    }
-
-}

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

@@ -90,4 +90,17 @@ public class RedisContant {
 
     public int CITY_TIER_MAP_time = 60*8;
 
+    public static String COMMON_LEVEL = "commonLevel";
+
+    public static int COMMON_LEVEL_TIME = 60*8;
+
+
+    public static String COMMON_ADDR_CODE_MAP = "commonAddrCodeMap";
+
+    public static int COMMON_ADDR_CODE_MAP_TIME = 60*8;
+
+    public static String COMMON_TAG= "commonTag";
+
+    public static int COMMON_TAG_TIME = 60*8;
+
 }

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

@@ -117,10 +117,10 @@ public class ChannelAnalyseController {
         String md5 = channelMapAceeptVo.getHash();
 
         //2.查看redis中是否存在有缓存
-//        HashMap<String,Integer> wdCount = (HashMap<String,Integer>) redisTemplate.boundHashOps(RedisContant.CHANNEL_ANALYSE_BUSINESS_STATUS_ANALYSE).get(md5);
-//        if (wdCount != null) {
-//            return R.ok(wdCount);
-//        }
+        HashMap<String,Integer> wdCount = (HashMap<String,Integer>) redisTemplate.boundHashOps(RedisContant.CHANNEL_ANALYSE_BUSINESS_STATUS_ANALYSE).get(md5);
+        if (wdCount != null) {
+            return R.ok(wdCount);
+        }
         HashMap<String,Integer> hashMap = channelAnalyseService.businessStatusAnalyse(channelMapAceeptVo);
 
         //4.保存到redis中

+ 7 - 7
ruoyi-demo/src/main/java/com/ruoyi/demo/controller/ChannelMapController.java

@@ -67,13 +67,13 @@ public class ChannelMapController {
     public R list(@Validated(value={ChannelListGroup.class}) ChannelMapAceeptVo channel){
 
         String md5 = channel.getHash();
-//        HashMap pageInfo = (HashMap) redisTemplate.boundHashOps(RedisContant.CHANNEL_MAP_LIST).get(md5);
-//        if(pageInfo != null){
-//            List<WdTopologicalInfoBo> data = (List<WdTopologicalInfoBo>) pageInfo.get("data");
-//            attention(data);
-//            pageInfo.put("data",data);
-//            return R.ok(pageInfo);
-//        }
+        HashMap pageInfo = (HashMap) redisTemplate.boundHashOps(RedisContant.CHANNEL_MAP_LIST).get(md5);
+        if(pageInfo != null){
+            List<WdTopologicalInfoBo> data = (List<WdTopologicalInfoBo>) pageInfo.get("data");
+            attention(data);
+            pageInfo.put("data",data);
+            return R.ok(pageInfo);
+        }
 
         HashMap hashMap = channelMapService.list(channel);
         if(hashMap == null)

+ 37 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/controller/CommonController.java

@@ -2,32 +2,69 @@ package com.ruoyi.demo.controller;
 
 
 import com.ruoyi.common.core.domain.R;
+import com.ruoyi.demo.constant.RedisContant;
+import com.ruoyi.demo.entity.AddrCategory;
+import com.ruoyi.demo.entity.bo.WdCount;
 import com.ruoyi.demo.entity.vo.AddrCategoryBody;
 import com.ruoyi.demo.entity.vo.TypeByBody;
 import com.ruoyi.demo.service.CommonService;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import java.util.List;
+import java.util.concurrent.TimeUnit;
 
 @RestController
 @RequestMapping("/common")
 public class CommonController {
     @Autowired
     CommonService commonService;
+
+    @Autowired
+    RedisTemplate redisTemplate;
     //获取网点标签
     @GetMapping("/tag")
     public R tag(){
+        List<TypeByBody>  wdCount = (List<TypeByBody>) redisTemplate.boundValueOps(RedisContant.COMMON_TAG).get();
+        if (wdCount != null) {
+            return R.ok(wdCount);
+        }
+
         List<TypeByBody> tag = commonService.tag();
+        //4.保存到redis中
+        redisTemplate.boundValueOps(RedisContant.COMMON_TAG).set(tag);
+        redisTemplate.expire(RedisContant.COMMON_TAG,RedisContant.COMMON_TAG_TIME, TimeUnit.MINUTES); //30分钟
         return R.ok(tag);
     }
 
     //获取网点标签
     @GetMapping("/addrCodeMap")
     public R addrCodeMap(){
+        List<AddrCategoryBody>  wdCount = (List<AddrCategoryBody>) redisTemplate.boundValueOps(RedisContant.COMMON_ADDR_CODE_MAP).get();
+        if (wdCount != null) {
+            return R.ok(wdCount);
+        }
+
         List<AddrCategoryBody> addrCategoryBodies = commonService.addrCodeMap();
+        redisTemplate.boundValueOps(RedisContant.COMMON_ADDR_CODE_MAP).set(wdCount);
+        redisTemplate.expire(RedisContant.COMMON_ADDR_CODE_MAP,RedisContant.COMMON_ADDR_CODE_MAP_TIME, TimeUnit.MINUTES); //30分钟
         return R.ok(addrCategoryBodies);
     }
+
+    @GetMapping("/addrCodeLevel")
+    public R addrCodeLevel(String code,String level){
+        //2.查看redis中是否存在有缓存
+        List<AddrCategory>  wdCount = (List<AddrCategory> ) redisTemplate.boundHashOps(RedisContant.COMMON_LEVEL).get(code+level);
+        if (wdCount != null) {
+            return R.ok(wdCount);
+        }
+
+        List<AddrCategory> addrCategories = commonService.addrCodeLevel(code,level);
+        redisTemplate.boundHashOps(RedisContant.COMMON_LEVEL).put(code+level,addrCategories);
+        redisTemplate.expire(RedisContant.COMMON_LEVEL,RedisContant.COMMON_LEVEL_TIME, TimeUnit.MINUTES); //30分钟
+        return R.ok(addrCategories);
+    }
 }

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

@@ -2,6 +2,7 @@ package com.ruoyi.demo.service;
 
 
 
+import com.ruoyi.demo.entity.AddrCategory;
 import com.ruoyi.demo.entity.vo.AddrCategoryBody;
 import com.ruoyi.demo.entity.vo.TypeByBody;
 
@@ -11,4 +12,5 @@ public interface CommonService {
     List<AddrCategoryBody> addrCodeMap();
     List<TypeByBody> tag();
 
+    List<AddrCategory> addrCodeLevel(String code, String level);
 }

+ 152 - 47
ruoyi-demo/src/main/java/com/ruoyi/demo/service/impl/ChannelAnalyseServiceImpl.java

@@ -36,6 +36,7 @@ import org.springframework.web.client.RestTemplate;
 import java.math.BigDecimal;
 import java.util.*;
 import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.ExecutorService;
 import java.util.stream.Collectors;
@@ -112,7 +113,119 @@ public class ChannelAnalyseServiceImpl implements ChannelAnalyseService {
     }
 
 
-    //TODO 待测试(redis版本)
+    //版本1
+//    @Override
+//    public HashMap<String, Object> tagAnalyse(ChannelMapAceeptVo channelMapAceeptVo) {
+//        //1.根据条件的到位网点信息
+//        QueryWrapper<WdInfo> queryWrapper = new QueryWrapper<>();
+//        queryWrapper.select("wd_id");
+//        assembleQueryWrapper(queryWrapper,channelMapAceeptVo);
+//        queryWrapper.and(queryWrapper2 ->{
+//            queryWrapper2.eq("show_delete",0);
+//        });
+//        List<WdInfo> queryWd = wdInfoDao.selectList(queryWrapper);
+//
+//        //2.获取周边标签
+//        List<String> collect = queryWd.stream().map(item -> {
+//            return RedisContant.WD_TAG + "_" + item.getWdId();
+//        }).collect(Collectors.toList());
+//
+//        //切割获取redis数据
+//        int split = 60000;
+//        int splitCount = collect.size()/split;
+//        int p1 = 0,p2 = split;
+//        ArrayList<CompletableFuture<List<List<String>>>> splitList = new ArrayList<>();
+//        for (int i=1;i<=splitCount;i++){
+//            if (p2 > collect.size())
+//                p2 = collect.size();
+//            List<String> list2 = collect.subList(p1, p2);
+//            CompletableFuture<List<List<String>>> future = CompletableFuture.supplyAsync(()->{
+//                return wdRedisStoreage.getWdTagList(list2);
+//            },executor);
+//            splitList.add(future);
+//            p1 = p2;
+//            p2+=split;
+//        }
+//
+//        //3.统计
+//        Hashtable<String, Integer> hashtable = new Hashtable<>();
+//        hashtable.put("total",0);
+//        ArrayList<CompletableFuture<Void>> list1 = new ArrayList<>();
+//        for (CompletableFuture<List<List<String>>> listCompletableFuture : splitList) {
+//            try {
+//                List<List<String>> lists = listCompletableFuture.get();
+//                for (List<String> list : lists) {
+//                    if (list != null && !list.isEmpty()){
+//                        CompletableFuture<Void> future = CompletableFuture.runAsync(()->{
+//                            for (String s : list) {
+//                                s += "边";
+//                                Integer integer = hashtable.get(s);
+//                                if (integer == null)
+//                                    hashtable.put(s,1);
+//                                else
+//                                    hashtable.put(s,integer+1);
+//                            }
+//                            hashtable.put("total",hashtable.get("total")+1);
+//                        },executor);
+//                        list1.add(future);
+//                    }
+//                }
+//                CompletableFuture.allOf(list1.toArray(new CompletableFuture[list1.size()])).join();
+//                lists = null;
+//            } catch (InterruptedException e) {
+//                throw new RuntimeException(e);
+//            } catch (ExecutionException e) {
+//                throw new RuntimeException(e);
+//            }
+//
+//        }
+//
+//        collect = null;
+//        queryWd = null;
+//
+//
+//        //4.封装统计值
+//        HashMap<String, Object> result = new HashMap<>();
+//        List<TagAnalyse> list = new ArrayList<>();
+//        Integer total = hashtable.get("total");
+//        for (String s : hashtable.keySet()) {
+//            if (s.equals("total"))
+//                continue;
+//
+//            TagAnalyse tagAnalyse = new TagAnalyse();
+//            tagAnalyse.setName(s);
+//            tagAnalyse.setCount(hashtable.get(s));
+//            BigDecimal bigDecimal = new BigDecimal((double) tagAnalyse.getCount() / total);
+//            double v = bigDecimal.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
+//            tagAnalyse.setRadio(v);
+//            list.add(tagAnalyse);
+//        }
+//
+//        //5.对结果集进行排序
+//        Collections.sort(list, new Comparator<TagAnalyse>() {
+//            @Override
+//            public int compare(TagAnalyse o1, TagAnalyse o2) {
+//                return o2.getCount() - o1.getCount();
+//            }
+//        });
+//
+//
+//        //5.分页返回结果集
+//        int i = 1;
+//        int start = 0,end = 6;
+//        while(start<list.size()){
+//            if(end>=list.size())
+//                end = list.size();
+//            result.put(""+i++,new ArrayList(list.subList(start,end)));
+//            start=end;
+//            end+=6;
+//        }
+//        result.put("pages",i-1);
+//        result.put("total",total);
+//        return result;
+//    }
+
+    //版本2
     @Override
     public HashMap<String, Object> tagAnalyse(ChannelMapAceeptVo channelMapAceeptVo) {
         //1.根据条件的到位网点信息
@@ -128,18 +241,22 @@ public class ChannelAnalyseServiceImpl implements ChannelAnalyseService {
         List<String> collect = queryWd.stream().map(item -> {
             return RedisContant.WD_TAG + "_" + item.getWdId();
         }).collect(Collectors.toList());
+        queryWd = null;
+
+        //切割网点 并 统计分析标签
+        ConcurrentHashMap<String, Integer> concurrentHashMap = new ConcurrentHashMap<>();
+        concurrentHashMap.put("total",0);
 
-        //切割获取redis数据
-        int split = 60000;
+        int split = 8000;
         int splitCount = collect.size()/split;
         int p1 = 0,p2 = split;
-        ArrayList<CompletableFuture<List<List<String>>>> splitList = new ArrayList<>();
+        ArrayList<CompletableFuture<Void>> splitList = new ArrayList<>();
         for (int i=1;i<=splitCount;i++){
             if (p2 > collect.size())
                 p2 = collect.size();
             List<String> list2 = collect.subList(p1, p2);
-            CompletableFuture<List<List<String>>> future = CompletableFuture.supplyAsync(()->{
-                return wdRedisStoreage.getWdTagList(list2);
+            CompletableFuture<Void> future = CompletableFuture.runAsync(()->{
+                tagAnalyseItem(concurrentHashMap,list2);
             },executor);
             splitList.add(future);
             p1 = p2;
@@ -147,53 +264,20 @@ public class ChannelAnalyseServiceImpl implements ChannelAnalyseService {
         }
 
         //3.统计
-        Hashtable<String, Integer> hashtable = new Hashtable<>();
-        hashtable.put("total",0);
-        ArrayList<CompletableFuture<Void>> list1 = new ArrayList<>();
-        for (CompletableFuture<List<List<String>>> listCompletableFuture : splitList) {
-            try {
-                List<List<String>> lists = listCompletableFuture.get();
-                for (List<String> list : lists) {
-                    if (list != null && !list.isEmpty()){
-                        CompletableFuture<Void> future = CompletableFuture.runAsync(()->{
-                            for (String s : list) {
-                                s += "边";
-                                Integer integer = hashtable.get(s);
-                                if (integer == null)
-                                    hashtable.put(s,1);
-                                else
-                                    hashtable.put(s,integer+1);
-                            }
-                            hashtable.put("total",hashtable.get("total")+1);
-                        },executor);
-                        list1.add(future);
-                    }
-                }
-                CompletableFuture.allOf(list1.toArray(new CompletableFuture[list1.size()])).join();
-                lists = null;
-            } catch (InterruptedException e) {
-                throw new RuntimeException(e);
-            } catch (ExecutionException e) {
-                throw new RuntimeException(e);
-            }
-
-        }
-
-        collect = null;
-        queryWd = null;
-
+        CompletableFuture.allOf(splitList.toArray(new CompletableFuture[splitList.size()])).join();
+        splitList = null;
 
         //4.封装统计值
         HashMap<String, Object> result = new HashMap<>();
         List<TagAnalyse> list = new ArrayList<>();
-        Integer total = hashtable.get("total");
-        for (String s : hashtable.keySet()) {
+        Integer total = concurrentHashMap.get("total");
+        for (String s : concurrentHashMap.keySet()) {
             if (s.equals("total"))
                 continue;
 
             TagAnalyse tagAnalyse = new TagAnalyse();
             tagAnalyse.setName(s);
-            tagAnalyse.setCount(hashtable.get(s));
+            tagAnalyse.setCount(concurrentHashMap.get(s));
             BigDecimal bigDecimal = new BigDecimal((double) tagAnalyse.getCount() / total);
             double v = bigDecimal.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
             tagAnalyse.setRadio(v);
@@ -211,19 +295,40 @@ public class ChannelAnalyseServiceImpl implements ChannelAnalyseService {
 
         //5.分页返回结果集
         int i = 1;
-        int start = 0,end = 6;
+        int start = 0,end = channelMapAceeptVo.getPageSize();
         while(start<list.size()){
             if(end>=list.size())
                 end = list.size();
             result.put(""+i++,new ArrayList(list.subList(start,end)));
             start=end;
-            end+=6;
+            end += channelMapAceeptVo.getPageSize();
         }
         result.put("pages",i-1);
-        result.put("total",total);
+        result.put("total",list.size());
         return result;
     }
 
+    public void tagAnalyseItem(ConcurrentHashMap<String,Integer> concurrentHashMap, List<String> keys){
+        //2.获取网点周边标签,并进行统计
+        int total = 0;
+        List<List<String>> wdTagList = wdRedisStoreage.getWdTagList(keys);
+        for (List<String> list : wdTagList) {
+            if (list == null || list.size() == 0)
+                continue;
+            for (String s : list) {
+                s += "边";
+                Integer integer = concurrentHashMap.get(s);
+                if (integer == null)
+                    concurrentHashMap.put(s,1);
+                else
+                    concurrentHashMap.put(s,integer+1);
+            }
+            total++;
+        }
+        wdTagList = null;
+        concurrentHashMap.put("total",concurrentHashMap.get("total")+total);
+    }
+
     @Override
     public List<StoreWdCategoryCount> category(ChannelMapAceeptVo channelMapAceeptVo) {
 

+ 27 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/service/impl/CommonServiceImpl.java

@@ -1,6 +1,7 @@
 package com.ruoyi.demo.service.impl;
 
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.ruoyi.demo.entity.AddrCategory;
 import com.ruoyi.demo.entity.TypeBy;
 import com.ruoyi.demo.entity.vo.AddrCategoryBody;
@@ -48,6 +49,32 @@ public class CommonServiceImpl implements CommonService {
         return typeByBodies;
     }
 
+    @Override
+    public List<AddrCategory> addrCodeLevel(String code,String level) {
+        if ("province".equals(level)){
+            QueryWrapper<AddrCategory> queryWrapper = new QueryWrapper<>();
+            queryWrapper.eq("city","");
+            return addrCategoryDao.selectList(queryWrapper);
+        }else if("city".equals(level)){
+            QueryWrapper<AddrCategory> queryWrapper = new QueryWrapper<>();
+            queryWrapper.likeRight("addr_code",code.substring(0,2));
+            queryWrapper.and(categoryQueryWrapper -> {
+                categoryQueryWrapper.eq("district", "").and(addrCategoryQueryWrapper -> {
+                    addrCategoryQueryWrapper.ne("city", "");
+                });
+            });
+            return addrCategoryDao.selectList(queryWrapper);
+        }else if("zone".equals(level)){
+            QueryWrapper<AddrCategory> queryWrapper = new QueryWrapper<>();
+            queryWrapper.likeRight("addr_code",code.substring(0,4));
+            queryWrapper.and(categoryQueryWrapper -> {
+                categoryQueryWrapper.ne("district", "");
+            });
+            return addrCategoryDao.selectList(queryWrapper);
+        }
+        return null;
+    }
+
     public List<TypeByBody> findChild(List<TypeBy> typeBIES, String typeCodeBy, int randType){
         String substring = typeCodeBy.substring(0, randType);
         if(randType == 2){

+ 191 - 0
ruoyi-system/src/main/java/com/ruoyi/system/domain/OpenAccount.java

@@ -0,0 +1,191 @@
+package com.ruoyi.system.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.ruoyi.common.annotation.Sensitive;
+import com.ruoyi.common.constant.UserConstants;
+import com.ruoyi.common.core.domain.entity.SysDept;
+import com.ruoyi.common.core.domain.entity.SysRole;
+import com.ruoyi.common.enums.SensitiveStrategy;
+import com.ruoyi.system.domain.vo.OpenAccountVO;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.Email;
+import javax.validation.constraints.Size;
+import java.util.Date;
+import java.util.List;
+
+@Data
+@NoArgsConstructor
+@TableName("sys_user")
+public class OpenAccount {
+    /**
+     * 统一用户id
+     */
+    @TableField("u_id")
+    private Long uId;
+
+    /**
+     * 用户账号
+     */
+    @TableField("user_name")
+    private String userName;
+
+    /**
+     * 用户Id
+     */
+    @TableId(value = "user_id",type = IdType.ASSIGN_ID)
+    private Long userId;
+
+    /**
+     * 用户昵称
+     */
+    @TableField("nick_name")
+    private String nickName;
+
+    /**
+     *
+     */
+
+    /**
+     * 手机号码
+     */
+
+    @TableField("phonenumber")
+    private String phonenumber;
+
+    /**
+     * 帐号状态(0正常 1停用)
+     */
+    @TableField("status")
+    private String status;
+    /**
+     * 删除标志(0代表存在 2代表删除)
+     */
+    @TableField("del_flag")
+    private String delFlag;
+
+
+    /**
+     * 创建人uId
+     */
+    @TableField("create_by")
+    private String createBy;
+
+    /**
+     * 密码
+     */
+    @TableField("password")
+    private String password;
+
+
+    /**
+     * 部门ID
+     */
+    private Long deptId;
+
+
+
+    /**
+     * 用户类型(sys_user系统用户)
+     */
+    private String userType;
+
+    /**
+     * 用户邮箱
+     */
+    @Sensitive(strategy = SensitiveStrategy.EMAIL)
+    @Email(message = "邮箱格式不正确")
+    @Size(min = 0, max = 50, message = "邮箱长度不能超过{max}个字符")
+    private String email;
+
+
+    /**
+     * 用户性别
+     */
+    private String sex;
+
+    /**
+     * 用户头像
+     */
+    private String avatar;
+
+
+
+    @JsonIgnore
+    @JsonProperty
+    public String getPassword() {
+        return password;
+    }
+
+
+
+    /**
+     * 最后登录IP
+     */
+    private String loginIp;
+
+    /**
+     * 最后登录时间
+     */
+    private Date loginDate;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 部门对象
+     */
+    @TableField(exist = false)
+    private SysDept dept;
+
+    /**
+     * 角色对象
+     */
+    @TableField(exist = false)
+    private List<SysRole> roles;
+
+    /**
+     * 角色组
+     */
+    @TableField(exist = false)
+    private Long[] roleIds;
+
+    /**
+     * 岗位组
+     */
+    @TableField(exist = false)
+    private Long[] postIds;
+
+    /**
+     * 数据权限 当前角色ID
+     */
+    @TableField(exist = false)
+    private Long roleId;
+
+    public OpenAccount(Long userId) {
+        this.userId = userId;
+    }
+
+    public boolean isAdmin() {
+        return UserConstants.ADMIN_ID.equals(this.userId);
+    }
+
+    public OpenAccount(OpenAccountVO openAccountVO) {
+        this.uId = openAccountVO.getU_id();
+        this.userName = openAccountVO.getUserName();
+        this.nickName = openAccountVO.getNickName();
+        this.phonenumber = openAccountVO.getPhonenumber();
+        this.status = openAccountVO.getStatus();
+        this.delFlag = openAccountVO.getDelFlag();
+        this.createBy = openAccountVO.getCreateBy();
+        this.password = openAccountVO.getPassword();
+    }
+}

+ 67 - 0
ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/OpenAccountVO.java

@@ -0,0 +1,67 @@
+package com.ruoyi.system.domain.vo;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+import java.io.Serializable;
+import java.util.List;
+
+@Data
+public class OpenAccountVO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 统一用户id(uId不懂为什么用不了)
+     */
+//    @NotBlank(message = "uId不能为空")
+//    private Long uId;
+
+    @NotNull(message = "u_id不能为空")
+    private Long u_id;
+
+    /**
+     * 用户账号
+     */
+    @NotBlank(message = "用户账号不能为空")
+    @Size(min = 0, max = 30, message = "用户账号长度不能超过30个字符")
+    private String userName;
+
+    /**
+     * 用户昵称
+     */
+    @NotBlank(message = "用户昵称不能为空")
+    @Size(min = 0, max = 30, message = "用户昵称长度不能超过30个字符")
+    private String nickName;
+
+    /**
+     * 手机号码
+     */
+    private String phonenumber;
+
+    /**
+     * 帐号状态(0正常 1停用)
+     */
+    private String status;
+    /**
+     * 删除标志(0代表存在 2代表删除)
+     */
+    private String delFlag;
+
+    /**
+     * 创建人uId
+     */
+    private String createBy;
+
+    /**
+     * 密码
+     */
+    @NotBlank(message = "密码不能为空")
+    private String password;
+    /**
+     * 角色列表
+     */
+    private List<Integer> roles;
+}

+ 9 - 0
ruoyi-system/src/main/java/com/ruoyi/system/mapper/IUserinfoMapper.java

@@ -0,0 +1,9 @@
+package com.ruoyi.system.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.system.domain.OpenAccount;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface IUserinfoMapper extends BaseMapper<OpenAccount> {
+}

+ 5 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/AccountService.java

@@ -0,0 +1,5 @@
+package com.ruoyi.system.service;
+
+public interface AccountService {
+    String login(String uId);
+}

+ 10 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/IUserinfoService.java

@@ -0,0 +1,10 @@
+package com.ruoyi.system.service;
+
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.system.domain.vo.OpenAccountVO;
+
+public interface IUserinfoService {
+    R createAdmin(OpenAccountVO openAccountVO);
+    R createUser(OpenAccountVO openAccountVO);
+    void disableUser(OpenAccountVO openAccountVO);
+}

+ 13 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/SysLoginService.java

@@ -331,4 +331,17 @@ public class SysLoginService {
         // 登录成功 清空错误次数
         RedisUtils.deleteObject(errorKey);
     }
+
+    public String UIdLogin(String username) {
+        // 框架登录不限制从什么表查询 只要最终构建出 LoginUser 即可
+        SysUser user = loadUserByUsername(username);
+        // 此处可根据登录用户的数据不同 自行创建 loginUser 属性不够用继承扩展就行了
+        LoginUser loginUser = buildLoginUser(user);
+        // 生成token
+        LoginHelper.loginByDevice(loginUser, DeviceType.PC);
+
+        recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"));
+        recordLoginInfo(user.getUserId(), username);
+        return StpUtil.getTokenValue();
+    }
 }

+ 38 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AccountServiceImpl.java

@@ -0,0 +1,38 @@
+package com.ruoyi.system.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.ruoyi.system.domain.OpenAccount;
+import com.ruoyi.system.mapper.IUserinfoMapper;
+import com.ruoyi.system.mapper.SysUserMapper;
+import com.ruoyi.system.service.AccountService;
+import com.ruoyi.system.service.SysLoginService;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@RequiredArgsConstructor
+@Service
+@Slf4j
+public class AccountServiceImpl implements AccountService {
+
+    @Autowired
+    IUserinfoMapper iUserinfoMapper;
+
+
+    private final SysLoginService sysLoginService;
+
+    @Override
+    public String login(String uId) {
+        QueryWrapper<OpenAccount> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("u_id",uId);
+        OpenAccount openAccount = iUserinfoMapper.selectOne(queryWrapper);
+
+        if (openAccount != null){
+            //登录
+            String token = sysLoginService.UIdLogin(openAccount.getUserName());
+            return token;
+        }
+        return null;
+    }
+}

+ 97 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/IUserinfoServiceImpl.java

@@ -0,0 +1,97 @@
+package com.ruoyi.system.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.system.domain.OpenAccount;
+import com.ruoyi.system.domain.SysUserRole;
+import com.ruoyi.system.domain.vo.OpenAccountVO;
+import com.ruoyi.system.mapper.IUserinfoMapper;
+import com.ruoyi.system.mapper.SysUserRoleMapper;
+import com.ruoyi.system.service.IUserinfoService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+@Service
+@RequiredArgsConstructor
+@Transactional
+public class IUserinfoServiceImpl implements IUserinfoService {
+    @Autowired
+    IUserinfoMapper iUserinfoMapper;
+    private final SysUserRoleMapper userRoleMapper;
+
+
+    @Override
+    public R createAdmin(OpenAccountVO openAccountVO) {
+        //检查用户名称、Uid是否重复
+        String s = checkUIdAndUserName(openAccountVO);
+        if (s == null){
+            //注册用户
+            OpenAccount openAccount = new OpenAccount(openAccountVO);
+            iUserinfoMapper.insert(openAccount);
+            //设置角色
+            for (Integer role : openAccountVO.getRoles()) {
+                SysUserRole sysUserRole = new SysUserRole();
+                sysUserRole.setUserId(openAccount.getUserId());
+                sysUserRole.setRoleId(Long.valueOf(role));
+                userRoleMapper.insert(sysUserRole);
+            }
+            return R.ok();
+        }
+        return R.fail(s);
+    }
+
+    @Override
+    public R createUser(OpenAccountVO openAccountVO) {
+        //检查用户名称、Uid是否重复
+        String s = checkUIdAndUserName(openAccountVO);
+        if (s == null){
+            //注册用户
+            OpenAccount openAccount = new OpenAccount(openAccountVO);
+            iUserinfoMapper.insert(openAccount);
+            //设置角色
+            for (Integer role : openAccountVO.getRoles()) {
+                SysUserRole sysUserRole = new SysUserRole();
+                sysUserRole.setUserId(openAccount.getUserId());
+                sysUserRole.setRoleId(Long.valueOf(role));
+                userRoleMapper.insert(sysUserRole);
+            }
+            return R.ok();
+        }
+        return R.fail(s);
+    }
+
+    @Override
+    public void disableUser(OpenAccountVO openAccountVO) {
+        UpdateWrapper<OpenAccount> updateWrapper = new UpdateWrapper<>();
+        updateWrapper.eq("u_id",openAccountVO.getU_id());
+        updateWrapper.set("delFlag",2);
+        iUserinfoMapper.update(null,updateWrapper);
+    }
+
+    /**
+     * 判断用户是否存在
+     * */
+    public String checkUIdAndUserName(OpenAccountVO openAccountVO){
+        //判断u_id 和 用户名称是否存在
+        QueryWrapper<OpenAccount> queryWrapper = new QueryWrapper<>();
+        queryWrapper.select("u_id","user_name");
+        queryWrapper.eq("u_id",openAccountVO.getU_id());
+        queryWrapper.or();
+        queryWrapper.eq("user_name",openAccountVO.getUserName());
+        List<OpenAccount> openAccounts = iUserinfoMapper.selectList(queryWrapper);
+        if (!openAccounts.isEmpty()){
+            if (openAccounts.size() == 2)
+                return "u_id、userName已存在";
+            else if (openAccounts.get(0).getUId() == openAccountVO.getU_id())
+                return "u_id已存在";
+            else
+                return "userName已存在";
+        }
+        return null;
+    }
+}

+ 1 - 8
ruoyi-ui/vue.config.js

@@ -34,15 +34,8 @@ module.exports = {
     open: true,
     proxy: {
       // detail: https://cli.vuejs.org/config/#devserver-proxy
-      [process.env.VUE_APP_BASE_API + "/bailianAi"]:{
-        target: `http://192.168.2.207:8080`,
-        changeOrigin: true,
-        pathRewrite: {
-          ['^' + process.env.VUE_APP_BASE_API + '/bailianAi']: '/jzyx',
-        }
-      },
       [process.env.VUE_APP_BASE_API]: {
-        target: `http://192.168.2.207:8080`,
+        target: `http://192.168.2.38:8080`,
         changeOrigin: true,
         pathRewrite: {
           ['^' + process.env.VUE_APP_BASE_API]: '/jzyx'