Ver Fonte

系统编码配置

李进 há 2 anos atrás
pai
commit
c1044f0adc

+ 0 - 15
sys-api-service/src/main/java/com/xy/entity/SysCodeConfigure.java

@@ -1,6 +1,5 @@
 package com.xy.entity;
 
-import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.xy.base.BaseEntity3;
 import io.swagger.annotations.ApiModel;
@@ -10,7 +9,6 @@ import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
 
 import java.io.Serializable;
-import java.time.LocalDateTime;
 
 /**
  * <p>
@@ -44,17 +42,4 @@ public class SysCodeConfigure extends BaseEntity3<SysCodeConfigure> implements S
     @ApiModelProperty(value = "扩展字段")
     private String expand;
 
-    @ApiModelProperty(value = "创建人")
-    private Long createUser;
-
-    @ApiModelProperty(value = "创建时间")
-    private LocalDateTime createTime;
-
-    @ApiModelProperty(value = "更新人")
-    private Long updateUser;
-
-    @ApiModelProperty(value = "更新时间")
-    private LocalDateTime updateTime;
-
-
 }

+ 89 - 13
sys-api-service/src/main/java/com/xy/service/SysCodeConfigureServiceImpl.java

@@ -1,26 +1,30 @@
 package com.xy.service;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.xy.annotate.Runners;
+import com.xy.collections.list.JArrayList;
+import com.xy.collections.list.JList;
+import com.xy.dto.SysCodeConfigureDto;
+import com.xy.dto.SysDictDto;
 import com.xy.entity.SysCodeConfigure;
+import com.xy.entity.SysCodeConfigureRedis;
+import com.xy.entity.SysDict;
 import com.xy.mapper.SysCodeConfigureMapper;
-import com.xy.service.SysCodeConfigureService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.xy.utils.*;
-import org.springframework.stereotype.Service;
 import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 
-import java.time.LocalDateTime;
 import java.util.List;
 
-import com.xy.dto.SysCodeConfigureDto;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.PostMapping;
-import io.swagger.annotations.ApiOperation;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import org.springframework.validation.annotation.Validated;
-import sun.rmi.runtime.Log;
-
 import static com.xy.utils.Beans.copy;
 import static com.xy.utils.PlusBeans.toIPage;
 import static com.xy.utils.PlusBeans.toPageBean;
@@ -34,11 +38,14 @@ import static com.xy.utils.PlusBeans.toPageBean;
  * @author lijin
  * @since 2023-04-20
  */
+@Slf4j
 @Service
 @AllArgsConstructor
 @Api(tags = "系统编码配置表")
 public class SysCodeConfigureServiceImpl extends ServiceImpl<SysCodeConfigureMapper, SysCodeConfigure> implements SysCodeConfigureService {
 
+    private RedisService<SysCodeConfigureRedis> redisService;
+
     @PostMapping("obj")
     @ApiOperation("对象查询")
     public R<SysCodeConfigureDto.Vo> obj(@RequestBody SysCodeConfigureDto.Vo vo) {
@@ -79,6 +86,7 @@ public class SysCodeConfigureServiceImpl extends ServiceImpl<SysCodeConfigureMap
         SysCodeConfigure saveInfo = copy(SysCodeConfigure.class, save)
                 .createUserTime(AuthorizeUtils.getLoginId(Long.class));
         save(saveInfo);
+        refuRedis(saveInfo);
         return R.ok();
     }
 
@@ -88,6 +96,74 @@ public class SysCodeConfigureServiceImpl extends ServiceImpl<SysCodeConfigureMap
         SysCodeConfigure updateInfo = copy(SysCodeConfigure.class, update)
                 .updateUserTime(AuthorizeUtils.getLoginId(Long.class));
         updateById(updateInfo);
+        refuRedis(updateInfo);
+        return R.ok();
+    }
+
+    @ApiOperation("删除")
+    @PostMapping("del")
+    @Transactional(rollbackFor = Exception.class)
+    public R del(@RequestBody @Validated SysCodeConfigureDto.Del del) {
+        //删除编码
+        List<SysCodeConfigure> list = list(new LambdaQueryWrapper<SysCodeConfigure>().in(SysCodeConfigure::getCode, del.getCode()));
+        removeBatchByIds(del.getCode());
+        //删除子编码
+        JList<SysCodeConfigure> paters = new JArrayList<>(list).filter().isNull(SysCodeConfigure::getPaterCode).list();
+        JList<SysCodeConfigure> paters2 = new JArrayList<>(list).filter().eq(SysCodeConfigure::getPaterCode, "").list();
+        if (Emptys.check(paters2)) {
+            paters.addAll(paters2);
+        }
+        if (Emptys.check(paters)) {
+            JList<String> codes = paters.getProperty(SysCodeConfigure::getCode);
+            remove(new LambdaQueryWrapper<SysCodeConfigure>().in(SysCodeConfigure::getPaterCode, codes));
+        }
+        //刷新redis
+        list.forEach(sysDict -> refuRedis(sysDict));
         return R.ok();
     }
+
+    /**
+     * 刷新redis
+     *
+     * @param sysCodeConfigure
+     */
+    public void refuRedis(SysCodeConfigure sysCodeConfigure) {
+        List<SysCodeConfigure> list;
+        String key = sysCodeConfigure.getPaterCode();
+        if (!Emptys.check(key)) {
+            //父字典
+            list = list(new LambdaQueryWrapper<SysCodeConfigure>().eq(SysCodeConfigure::getPaterCode, sysCodeConfigure.getCode()));
+            key = sysCodeConfigure.getCode();
+        } else {
+            //子字典
+            list = list(new LambdaQueryWrapper<SysCodeConfigure>().eq(SysCodeConfigure::getPaterCode, key));
+        }
+        redisService.removeMap(SysCodeConfigureUtils.getKey(key));
+        for (SysCodeConfigure sysCodeConfigureInfo : list) {
+            redisService.setMap(SysCodeConfigureUtils.getKey(key), sysCodeConfigureInfo.getCode(), copy(SysCodeConfigureRedis.class, sysCodeConfigureInfo));
+        }
+        log.info("系统编码刷新redis完成~");
+    }
+
+    /**
+     * 全量加载配置到redis
+     */
+    @Runners
+    public void loadRedis() {
+        List<SysCodeConfigure> sysCodeConfigures = list();
+        List<SysCodeConfigureRedis> sysCodeConfigureRedis = Beans.copy(SysCodeConfigureRedis.class, sysCodeConfigures);
+        JList<SysCodeConfigureRedis> list = new JArrayList<>(sysCodeConfigureRedis);
+        JList<SysCodeConfigureRedis> paters = list.filter().isNull(SysCodeConfigureRedis::getPaterCode).list();
+        JList<SysCodeConfigureRedis> paters2 = list.filter().eq(SysCodeConfigureRedis::getPaterCode, "").list();
+        if (Emptys.check(paters2)) {
+            paters.addAll(paters2);
+        }
+        redisService.removeLikeMap(SysCodeConfigureUtils.SYS_CODE_CONFIGURE_PREFIX);
+        //[父code -> 子列表]数据结构写入redis
+        paters.forEach(sysDict -> {
+            JList<SysCodeConfigureRedis> sysCodeConfigureRedisJList = list.filter().eq(SysCodeConfigureRedis::getPaterCode, sysDict.getCode()).list();
+            sysCodeConfigureRedisJList.forEach(sysCodeConfigureRediss -> redisService.setMap(SysCodeConfigureUtils.getKey(sysDict.getCode()), sysCodeConfigureRediss.getCode(), sysCodeConfigureRediss));
+        });
+        log.info("系统编码写入redis完成~");
+    }
 }

+ 2 - 2
sys-api-service/src/main/java/com/xy/service/SysDictServiceImpl.java

@@ -155,13 +155,13 @@ public class SysDictServiceImpl extends ServiceImpl<SysDictMapper, SysDict> impl
     public void refuRedis(SysDict sysDict) {
         List<SysDict> list;
         String key = sysDict.getPaterCode();
-        if (!Emptys.check(sysDict.getPaterCode())) {
+        if (!Emptys.check(key)) {
             //父字典
             list = list(new LambdaQueryWrapper<SysDict>().eq(SysDict::getPaterCode, sysDict.getCode()).eq(SysDict::getStatus, true));
             key = sysDict.getCode();
         } else {
             //子字典
-            list = list(new LambdaQueryWrapper<SysDict>().eq(SysDict::getPaterCode, sysDict.getPaterCode()).eq(SysDict::getStatus, true));
+            list = list(new LambdaQueryWrapper<SysDict>().eq(SysDict::getPaterCode, key).eq(SysDict::getStatus, true));
         }
         redisService.removeMap(SysDictUtils.getKey(key));
         for (SysDict dict : list) {

+ 11 - 0
sys-api/src/main/java/com/xy/dto/SysCodeConfigureDto.java

@@ -7,6 +7,7 @@ import lombok.Data;
 import lombok.experimental.Accessors;
 
 import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotEmpty;
 import java.time.LocalDateTime;
 import java.util.List;
 
@@ -55,6 +56,16 @@ public class SysCodeConfigureDto {
         private String code;
     }
 
+    @Data
+    @Accessors(chain = true)
+    public static class Del {
+
+        @NotEmpty(message = "id不能为空")
+        @ApiModelProperty("唯一标识")
+        private List<String> code;
+    }
+
+
     @Data
     @Accessors(chain = true)
     public static class Vo {

+ 67 - 0
sys-sdk/src/main/java/com/xy/entity/SysCodeConfigureRedis.java

@@ -0,0 +1,67 @@
+package com.xy.entity;
+
+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 lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+@Data
+@Accessors(chain = true)
+public class SysCodeConfigureRedis implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 编码
+     */
+    private String code;
+
+    /**
+     * 上级编码
+     */
+    private String paterCode;
+
+    /**
+     * 说明
+     */
+    private String msg;
+
+    /**
+     * 建议
+     */
+    private String propose;
+
+    /**
+     * 扩展字段
+     */
+    private String expand;
+
+    /**
+     * 创建人
+     */
+    private Long createUser;
+
+    /**
+     * 创建时间
+     */
+    @JsonDeserialize(using = LocalDateTimeDeserializer.class)
+    @JsonSerialize(using = LocalDateTimeSerializer.class)
+    private LocalDateTime createTime;
+
+    /**
+     * 更新人
+     */
+    private Long updateUser;
+
+    /**
+     * 更新时间
+     */
+    @JsonDeserialize(using = LocalDateTimeDeserializer.class)
+    @JsonSerialize(using = LocalDateTimeSerializer.class)
+    private LocalDateTime updateTime;
+}

+ 52 - 0
sys-sdk/src/main/java/com/xy/utils/SysCodeConfigureUtils.java

@@ -0,0 +1,52 @@
+package com.xy.utils;
+
+import com.xy.entity.SysCodeConfigureRedis;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 系统编码工具类
+ */
+public class SysCodeConfigureUtils {
+
+    public static final String SYS_CODE_CONFIGURE_PREFIX = "sys_code_configure";
+
+    public static String getKey(String key) {
+        return String.format("%s:%s", SYS_CODE_CONFIGURE_PREFIX, key);
+    }
+
+    private static RedisService<SysCodeConfigureRedis> getRedisService() {
+        return SpringBeanUtils.getBean(RedisService.class);
+    }
+
+    /**
+     * 父code获取所有子级列表
+     *
+     * @param paterCode 父code
+     * @return k=code v=子对象
+     */
+    public static Map<String, SysCodeConfigureRedis> get(String paterCode) {
+        return getRedisService().getMap(getKey(paterCode));
+    }
+
+    /**
+     * 父code和code获取对象
+     *
+     * @param paterCode 父code
+     * @param code      code
+     * @return 子对象
+     */
+    public static SysCodeConfigureRedis get(String paterCode, String code) {
+        return getRedisService().getMap(getKey(paterCode), code);
+    }
+
+    /**
+     * 获取所有
+     *
+     * @return
+     */
+    public static List<Map<String, Map<String, SysCodeConfigureRedis>>> all() {
+        return getRedisService().likeMap(SYS_CODE_CONFIGURE_PREFIX);
+    }
+}