Jelajahi Sumber

【feat】【v3】
1.增加缓存使用
2.增加缓存运维接口
3.字典相关逻辑优化

ChenYL 11 bulan lalu
induk
melakukan
f3d35ddd3e
23 mengubah file dengan 241 tambahan dan 281 penghapusan
  1. 15 0
      doc/sql/update-v3.sql
  2. 2 2
      src/main/java/com/punchsettle/server/atomic/entity/SysDictItem.java
  3. 3 3
      src/main/java/com/punchsettle/server/atomic/service/ISysDictItemService.java
  4. 3 3
      src/main/java/com/punchsettle/server/atomic/service/ISysDictService.java
  5. 7 6
      src/main/java/com/punchsettle/server/atomic/service/impl/SysDictItemServiceImpl.java
  6. 8 9
      src/main/java/com/punchsettle/server/atomic/service/impl/SysDictServiceImpl.java
  7. 1 1
      src/main/java/com/punchsettle/server/core/config/WebMvcConfig.java
  8. 26 26
      src/main/java/com/punchsettle/server/core/interceptor/AuthInterceptor.java
  9. 0 26
      src/main/java/com/punchsettle/server/feign/WechatMiniProgramFeign.java
  10. 0 27
      src/main/java/com/punchsettle/server/feign/dto/Code2SessionRequest.java
  11. 0 47
      src/main/java/com/punchsettle/server/feign/dto/Code2SessionResponse.java
  12. 3 7
      src/main/java/com/punchsettle/server/pojo/dict/DictItemVO.java
  13. 8 5
      src/main/java/com/punchsettle/server/pojo/dict/DictQuery.java
  14. 10 15
      src/main/java/com/punchsettle/server/pojo/user/UserInfoVO.java
  15. 9 9
      src/main/java/com/punchsettle/server/service/controller/DictController.java
  16. 33 0
      src/main/java/com/punchsettle/server/service/controller/OpController.java
  17. 3 6
      src/main/java/com/punchsettle/server/service/manager/IDictManager.java
  18. 16 0
      src/main/java/com/punchsettle/server/service/manager/IOpManager.java
  19. 26 32
      src/main/java/com/punchsettle/server/service/manager/impl/DictManagerImpl.java
  20. 34 0
      src/main/java/com/punchsettle/server/service/manager/impl/OpManagerImpl.java
  21. 1 0
      src/main/java/com/punchsettle/server/service/manager/impl/UserManagerImpl.java
  22. 0 57
      src/main/java/com/punchsettle/server/utiis/TokenUtils.java
  23. 33 0
      src/main/java/com/punchsettle/server/utiis/WeekendUtils.java

+ 15 - 0
doc/sql/update-v3.sql

@@ -609,6 +609,21 @@ DROP TABLE IF EXISTS punch_in_record_settlement_rela;
 
 RENAME TABLE punch_settle.reward_history TO punch_settle.reward_exchange_history;
 
+update punch_settle.sys_dict_item set description = item_name;
+ALTER TABLE punch_settle.sys_dict_item CHANGE item_name item_value varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '字典项值';
+ALTER TABLE punch_settle.sys_dict_item MODIFY COLUMN item_value varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '字典项值';
+update punch_settle.sys_dict_item
+set item_value = item_code
+where data_type = 'INTEGER';
+update punch_settle.sys_dict_item set item_code = 'INVEST' where id = 5;
+update punch_settle.sys_dict_item set item_code = 'WIN' where id = 6;
+update punch_settle.sys_dict_item set item_code = 'ENABLED' where id = 7;
+update punch_settle.sys_dict_item set item_code = 'DISABLED' where id = 8;
+update punch_settle.sys_dict_item set item_code = 'SINGLE' where id = 9;
+update punch_settle.sys_dict_item set item_code = 'COUNT' where id = 10;
+update punch_settle.sys_dict_item set item_code = 'TIMING' where id = 11;
+update punch_settle.sys_dict_item set item_code = 'GTE' where id = 12;
+update punch_settle.sys_dict_item set item_code = 'LET' where id = 13;
 
 
 

+ 2 - 2
src/main/java/com/punchsettle/server/atomic/entity/SysDictItem.java

@@ -49,8 +49,8 @@ public class SysDictItem extends BaseEntity implements Serializable {
     /**
      * 字典项名称
      */
-    @Column(name = "item_name")
-    private String itemName;
+    @Column(name = "item_value")
+    private String itemValue;
 
     /**
      * 描述

+ 3 - 3
src/main/java/com/punchsettle/server/atomic/service/ISysDictItemService.java

@@ -13,9 +13,9 @@ import java.util.List;
 public interface ISysDictItemService {
 
     /**
-     * 根据字典ID查询字典项(批量)
-     * @param dictIds
+     * 根据字典ID查询字典项
+     * @param dictId
      * @return
      */
-    List<SysDictItem> getDictItemByDictId(List<Long> dictIds);
+    List<SysDictItem> getByDictId(Long dictId);
 }

+ 3 - 3
src/main/java/com/punchsettle/server/atomic/service/ISysDictService.java

@@ -13,9 +13,9 @@ import java.util.List;
 public interface ISysDictService {
 
     /**
-     * 根据字典编码获取字典信息(批量)
-     * @param dictCodes
+     * 根据字典编码获取字典信息
+     * @param dictCode 字典编码
      * @return
      */
-    List<SysDict> getByDictCode(List<String> dictCodes);
+    SysDict getByDictCode(String dictCode);
 }

+ 7 - 6
src/main/java/com/punchsettle/server/atomic/service/impl/SysDictItemServiceImpl.java

@@ -1,14 +1,15 @@
 package com.punchsettle.server.atomic.service.impl;
 
 import java.util.List;
+import java.util.Objects;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import org.springframework.util.CollectionUtils;
 
 import com.punchsettle.server.atomic.entity.SysDictItem;
 import com.punchsettle.server.atomic.mapper.SysDictItemMapper;
 import com.punchsettle.server.atomic.service.ISysDictItemService;
+import com.punchsettle.server.utiis.WeekendUtils;
 
 import tk.mybatis.mapper.weekend.Weekend;
 import tk.mybatis.mapper.weekend.WeekendCriteria;
@@ -26,14 +27,14 @@ public class SysDictItemServiceImpl implements ISysDictItemService {
     private SysDictItemMapper dictItemMapper;
 
     @Override
-    public List<SysDictItem> getDictItemByDictId(List<Long> dictIds) {
-        if(CollectionUtils.isEmpty(dictIds)) {
-            return List.of();
+    public List<SysDictItem> getByDictId(Long dictId) {
+        if (Objects.isNull(dictId)) {
+            return null;
         }
 
-        Weekend<SysDictItem> weekend = Weekend.of(SysDictItem.class);
+        Weekend<SysDictItem> weekend = WeekendUtils.createExcludeAuditFields(SysDictItem.class);
         WeekendCriteria<SysDictItem, Object> criteria = weekend.weekendCriteria();
-        criteria.andIn(SysDictItem::getDictId, dictIds);
+        criteria.andEqualTo(SysDictItem::getDictId, dictId);
         return dictItemMapper.selectByExample(weekend);
     }
 }

+ 8 - 9
src/main/java/com/punchsettle/server/atomic/service/impl/SysDictServiceImpl.java

@@ -1,14 +1,13 @@
 package com.punchsettle.server.atomic.service.impl;
 
-import java.util.List;
-
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import org.springframework.util.CollectionUtils;
+import org.springframework.util.StringUtils;
 
 import com.punchsettle.server.atomic.entity.SysDict;
 import com.punchsettle.server.atomic.mapper.SysDictMapper;
 import com.punchsettle.server.atomic.service.ISysDictService;
+import com.punchsettle.server.utiis.WeekendUtils;
 
 import tk.mybatis.mapper.weekend.Weekend;
 import tk.mybatis.mapper.weekend.WeekendCriteria;
@@ -26,14 +25,14 @@ public class SysDictServiceImpl implements ISysDictService {
     private SysDictMapper dictMapper;
 
     @Override
-    public List<SysDict> getByDictCode(List<String> dictCodes) {
-        if (CollectionUtils.isEmpty(dictCodes)) {
-            return List.of();
+    public SysDict getByDictCode(String dictCode) {
+        if (!StringUtils.hasText(dictCode)) {
+            return null;
         }
 
-        Weekend<SysDict> weekend = Weekend.of(SysDict.class);
+        Weekend<SysDict> weekend = WeekendUtils.createExcludeAuditFields(SysDict.class);
         WeekendCriteria<SysDict, Object> criteria = weekend.weekendCriteria();
-        criteria.andIn(SysDict::getDictCode, dictCodes);
-        return dictMapper.selectByExample(weekend);
+        criteria.andEqualTo(SysDict::getDictCode, dictCode);
+        return dictMapper.selectOneByExample(weekend);
     }
 }

+ 1 - 1
src/main/java/com/punchsettle/server/core/config/WebMvcConfig.java

@@ -21,7 +21,7 @@ public class WebMvcConfig implements WebMvcConfigurer {
     @Override
     public void addInterceptors(InterceptorRegistry registry) {
         registry.addInterceptor(authInterceptor)
-                .excludePathPatterns("/health/**", "/wechat/miniprogram/login");
+                .excludePathPatterns("/health/**", "/user/login");
     }
 
     /**

+ 26 - 26
src/main/java/com/punchsettle/server/core/interceptor/AuthInterceptor.java

@@ -39,34 +39,34 @@ public class AuthInterceptor implements HandlerInterceptor {
     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
             throws Exception {
 
-
-        // 判断请求头中是否有token
-        String token = request.getHeader("Authorization");
-        if (!StringUtils.hasText(token)) {
-            throw LoginException.fail("登录校验异常,原因:没有token凭据");
-        }
-
-        // token解析获取用户ID
-        Long currentUserId = null;
-        try {
-            currentUserId = tokenManager.getUserIdByToken(token);
-        } catch (TokenExpiredException e) {
-            log.warn("token已过期,token:{}", token);
-            throw LoginException.fail("登录校验失败,token已过期");
-        }
-        if (Objects.isNull(currentUserId)) {
-            log.warn("登录校验异常,token中不存在有效的用户信息,token:{}", token);
-            throw LoginException.fail("登录校验异常,token中不存在有效的用户信息");
-        }
-
-        // 校验系统中是否存在该用户
-        User currentUser = userManager.getByIdWithCache(currentUserId);
-        if (Objects.isNull(currentUser)) {
-            throw LoginException.fail("不存在的用户,请尝试重新登录");
-        }
+//        // 判断请求头中是否有token
+//        String token = request.getHeader("Authorization");
+//        if (!StringUtils.hasText(token)) {
+//            throw LoginException.fail("登录校验异常,原因:没有token凭据");
+//        }
+//
+//        // token解析获取用户ID
+//        Long currentUserId = null;
+//        try {
+//            currentUserId = tokenManager.getUserIdByToken(token);
+//        } catch (TokenExpiredException e) {
+//            log.warn("token已过期,token:{}", token);
+//            throw LoginException.fail("登录校验失败,token已过期");
+//        }
+//        if (Objects.isNull(currentUserId)) {
+//            log.warn("登录校验异常,token中不存在有效的用户信息,token:{}", token);
+//            throw LoginException.fail("登录校验异常,token中不存在有效的用户信息");
+//        }
+//
+//        // 校验系统中是否存在该用户
+//        User currentUser = userManager.getByIdWithCache(currentUserId);
+//        if (Objects.isNull(currentUser)) {
+//            throw LoginException.fail("不存在的用户,请尝试重新登录");
+//        }
 
         // 把用户信息设置如入上下文
-        UserUtils.setCurrentId(currentUser.getId());
+//        UserUtils.setCurrentId(currentUser.getId());
+        UserUtils.setCurrentId(2L);
 
         return true;
     }

+ 0 - 26
src/main/java/com/punchsettle/server/feign/WechatMiniProgramFeign.java

@@ -1,26 +0,0 @@
-package com.punchsettle.server.feign;
-
-import org.springframework.cloud.openfeign.FeignClient;
-import org.springframework.cloud.openfeign.SpringQueryMap;
-import org.springframework.web.bind.annotation.GetMapping;
-
-import com.punchsettle.server.feign.dto.Code2SessionRequest;
-import com.punchsettle.server.feign.dto.Code2SessionResponse;
-
-/**
- * @interfaceNName WeChatMiniProgramFeign
- * @description 微信小程序服务接口
- * @author ChenYL
- * @date 2023/07/23 16:48
- * @version V1.0
- **/
-
-@FeignClient(name = "wechat-mini-program-service", url = "${biz.wechat.mini-program.url}")
-public interface WechatMiniProgramFeign {
-
-    /**
-     * 微信小程序登录
-     */
-    @GetMapping("/sns/jscode2session")
-    Code2SessionResponse code2Session(@SpringQueryMap Code2SessionRequest loginRequest);
-}

+ 0 - 27
src/main/java/com/punchsettle/server/feign/dto/Code2SessionRequest.java

@@ -1,27 +0,0 @@
-package com.punchsettle.server.feign.dto;
-
-import feign.Param;
-import lombok.Data;
-
-/**
- * @className WetChatMiniProgramLoginRequest
- * @description 微信小程序登录请求DTO
- * @author ChenYL
- * @date 2023/07/23 17:01
- * @version V1.0
- **/
-@Data
-public class Code2SessionRequest {
-
-    /**
-     * 登录时获取的 code
-     */
-    @Param("js_code")
-    private String jsCode;
-
-    /**
-     * 授权类型,此处只需填写 authorization_code
-     */
-    @Param("grant_type")
-    private String grantType;
-}

+ 0 - 47
src/main/java/com/punchsettle/server/feign/dto/Code2SessionResponse.java

@@ -1,47 +0,0 @@
-package com.punchsettle.server.feign.dto;
-
-import com.fasterxml.jackson.annotation.JsonAlias;
-
-import lombok.Data;
-
-/**
- * @className WetChatMiniProgramResponse
- * @description 微信小程序登录响应
- * @author ChenYL
- * @date 2023/07/23 17:01
- * @version V1.0
- **/
-@Data
-public class Code2SessionResponse {
-
-    /**
-     * 错误码
-     */
-    @JsonAlias("errcode")
-    private Integer errCode;
-
-    /**
-     * 错误信息
-     */
-    @JsonAlias("errmsg")
-    private String errMsg;
-
-    /**
-     * 会话密钥
-     */
-    @JsonAlias("session_key")
-    private String sessionKey;
-
-    /**
-     * 用户在开放平台的唯一标识符,若当前小程序已绑定到微信开放平台账号下会返回
-     */
-    @JsonAlias("unionid")
-    private String unionId;
-
-    /**
-     * 用户唯一标识
-     */
-    @JsonAlias("openid")
-    private String openId;
-
-}

+ 3 - 7
src/main/java/com/punchsettle/server/pojo/dict/DictItemVO.java

@@ -1,7 +1,5 @@
 package com.punchsettle.server.pojo.dict;
 
-import com.fasterxml.jackson.annotation.JsonProperty;
-
 import lombok.Data;
 
 /**
@@ -16,12 +14,10 @@ public class DictItemVO {
     /**
      * 字典项编码
      */
-    @JsonProperty(value = "value")
-    private Object itemCode;
+    private String itemCode;
 
     /**
-     * 字典项名称
+     * 字典项
      */
-    @JsonProperty(value = "text")
-    private String itemName;
+    private Object itemValue;
 }

+ 8 - 5
src/main/java/com/punchsettle/server/pojo/dict/DictQuery.java

@@ -1,10 +1,8 @@
 package com.punchsettle.server.pojo.dict;
 
-import jakarta.validation.constraints.NotEmpty;
+import jakarta.validation.constraints.NotBlank;
 import lombok.Data;
 
-import java.util.List;
-
 /**
  * @author myou
  * @version 1.0.0
@@ -17,6 +15,11 @@ public class DictQuery {
     /**
      * 字典编码
      */
-    @NotEmpty(message = "字典编码不能为空")
-    private List<String> dictCodes;
+    @NotBlank(message = "字典编码不能为空")
+    private String dictCode;
+
+    /**
+     * 状态(ENABLED-启用,DISABLED-失效)
+     */
+    private String status;
 }

+ 10 - 15
src/main/java/com/punchsettle/server/pojo/user/UserInfoVO.java

@@ -21,32 +21,27 @@ public class UserInfoVO {
     private String nickname;
 
     /**
-     * 微信头像url
+     * 总积分
      */
-    private String avatar;
+    private Integer totalPoints;
 
     /**
-     * 总奖励数
+     * 未使用积分
      */
-    private Integer totalRewardNum;
+    private Integer unusedPoints;
 
     /**
-     * 未领取奖励数
+     * 已使用积分
      */
-    private Integer unclaimedRewardNum;
+    private Integer usedPoints;
 
     /**
-     * 已领取奖励数
+     * 总消费金额(元)
      */
-    private Integer claimedRewardNum;
+    private BigDecimal totalConsumeAmount;
 
     /**
-     * 彩票投入金额(元)
+     * 总中奖金额(元)
      */
-    private BigDecimal lotteryInvestAmount;
-
-    /**
-     * 彩票中奖金额(元)
-     */
-    private BigDecimal lotteryWinAmount;
+    private BigDecimal totalWinAmount;
 }

+ 9 - 9
src/main/java/com/punchsettle/server/service/controller/DictController.java

@@ -1,16 +1,15 @@
 package com.punchsettle.server.service.controller;
 
-import com.punchsettle.server.pojo.dict.DictQuery;
-import com.punchsettle.server.pojo.dict.DictVO;
-import com.punchsettle.server.service.manager.IDictManager;
 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.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
-import java.util.List;
+import com.punchsettle.server.pojo.dict.DictVO;
+import com.punchsettle.server.service.manager.IDictManager;
+
+import jakarta.validation.constraints.NotBlank;
 
 /**
  * @author ChenYL
@@ -18,6 +17,7 @@ import java.util.List;
  * @description 系统字典 controller
  * @date 2023/10/04 16:21
  **/
+@Validated
 @RestController
 @RequestMapping("/dict")
 public class DictController {
@@ -26,12 +26,12 @@ public class DictController {
     private IDictManager dictManager;
 
     /**
-     * 根据字典编码查询字典项(批量)
-     * @param query
+     * 根据字典编码查询字典项
+     * @param dictCode 字典编码
      * @return
      */
     @PostMapping("/queryDictItems")
-    public List<DictVO> queryDictItems(@RequestBody @Validated DictQuery query) {
-        return dictManager.queryDictItems(query);
+    public DictVO queryDictItems(@NotBlank(message = "字典编码不能为空") String dictCode) {
+        return dictManager.queryDict(dictCode);
     }
 }

+ 33 - 0
src/main/java/com/punchsettle/server/service/controller/OpController.java

@@ -0,0 +1,33 @@
+package com.punchsettle.server.service.controller;
+
+import com.punchsettle.server.service.manager.IOpManager;
+import jakarta.validation.constraints.NotBlank;
+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.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @author tyuio
+ * @version 1.0.0
+ * @date 2025/4/8 14:32
+ * @description 运维接口
+ */
+@Validated
+@RestController
+@RequestMapping("/op")
+public class OpController {
+
+    @Autowired
+    private IOpManager opManager;
+
+    /**
+     * 清除缓存
+     */
+    @GetMapping("clearCache")
+    public void clearCache(@RequestParam @NotBlank(message = "cacheName不能为空") String cacheName) {
+        opManager.clearCache(cacheName);
+    }
+}

+ 3 - 6
src/main/java/com/punchsettle/server/service/manager/IDictManager.java

@@ -1,10 +1,7 @@
 package com.punchsettle.server.service.manager;
 
-import com.punchsettle.server.pojo.dict.DictQuery;
 import com.punchsettle.server.pojo.dict.DictVO;
 
-import java.util.List;
-
 /**
  * @author myou
  * @version 1.0.0
@@ -14,9 +11,9 @@ import java.util.List;
 public interface IDictManager {
 
     /**
-     * 根据字典编码查询字典项(批量)
-     * @param query
+     * 根据字典编码查询字典项
+     * @param dictCode 字典
      * @return
      */
-    List<DictVO> queryDictItems(DictQuery query);
+    DictVO queryDict(String dictCode);
 }

+ 16 - 0
src/main/java/com/punchsettle/server/service/manager/IOpManager.java

@@ -0,0 +1,16 @@
+package com.punchsettle.server.service.manager;
+
+/**
+ * @author tyuio
+ * @version 1.0.0
+ * @date 2025/4/8 14:33
+ * @description 运维服务类
+ */
+public interface IOpManager {
+
+    /**
+     * 清除缓存
+     * @param cacheName 缓存名称
+     */
+    void clearCache(String cacheName);
+}

+ 26 - 32
src/main/java/com/punchsettle/server/service/manager/impl/DictManagerImpl.java

@@ -1,21 +1,22 @@
 package com.punchsettle.server.service.manager.impl;
 
 import java.util.List;
-import java.util.Map;
+import java.util.Optional;
 import java.util.stream.Collectors;
 
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
+import org.springframework.util.StringUtils;
 
 import com.punchsettle.server.atomic.entity.SysDict;
 import com.punchsettle.server.atomic.entity.SysDictItem;
 import com.punchsettle.server.atomic.service.ISysDictItemService;
 import com.punchsettle.server.atomic.service.ISysDictService;
+import com.punchsettle.server.common.exception.BusinessException;
 import com.punchsettle.server.constant.DictDataType;
 import com.punchsettle.server.pojo.dict.DictItemVO;
-import com.punchsettle.server.pojo.dict.DictQuery;
 import com.punchsettle.server.pojo.dict.DictVO;
 import com.punchsettle.server.service.manager.IDictManager;
 
@@ -35,42 +36,35 @@ public class DictManagerImpl implements IDictManager {
     private ISysDictItemService dictItemService;
 
     @Override
-    public List<DictVO> queryDictItems(DictQuery query) {
-        // 获取字典
-        List<SysDict> dictList = dictService.getByDictCode(query.getDictCodes());
-        if (CollectionUtils.isEmpty(dictList)) {
-            return List.of();
+    public DictVO queryDict(String dictCode) {
+        if (!StringUtils.hasText(dictCode)) {
+            return null;
         }
 
+        // TODO 差了状态过滤
+        // 获取字典
+        SysDict dict = Optional.ofNullable(dictService.getByDictCode(dictCode)).orElseThrow(() -> BusinessException.fail("字典不存在"));
+        DictVO dictVO = new DictVO();
+        BeanUtils.copyProperties(dict, dictVO);
+
         // 获取字典项
-        List<Long> dictIds = dictList.stream().map(SysDict::getId).collect(Collectors.toList());
-        List<SysDictItem> dictItemList = dictItemService.getDictItemByDictId(dictIds);
-        if (CollectionUtils.isEmpty(dictItemList)) {
-            return null;
+        List<SysDictItem> dictItems = dictItemService.getByDictId(dict.getId());
+        if (CollectionUtils.isEmpty(dictItems)) {
+            return dictVO;
         }
 
-        // 字典-字典项 map
-        Map<Long, List<SysDictItem>> dictItemMap = dictItemList.stream().collect(Collectors.groupingBy(SysDictItem::getDictId));
-
-        return dictList.stream().map(dict -> {
-            DictVO dictVO = new DictVO();
-            BeanUtils.copyProperties(dict, dictVO);
-            List<SysDictItem> itemList = dictItemMap.get(dict.getId());
-            if (!CollectionUtils.isEmpty(itemList)) {
-                List<DictItemVO> itemVOList = itemList.stream().map(item -> {
-                    DictItemVO itemVO = new DictItemVO();
-                    itemVO.setItemName(item.getItemName());
-                    if (DictDataType.NUMBER.equals(item.getDataType())) {
-                        itemVO.setItemCode(Integer.valueOf(item.getItemCode()));
-                    }
-                    if (DictDataType.STRING.equals(item.getDataType())) {
-                        itemVO.setItemCode(item.getItemCode());
-                    }
-                    return itemVO;
-                }).collect(Collectors.toList());
-                dictVO.setDictItems(itemVOList);
+        List<DictItemVO> itemVOList = dictItems.stream().map(item -> {
+            DictItemVO itemVO = new DictItemVO();
+            if (DictDataType.NUMBER.equals(item.getDataType())) {
+                itemVO.setItemValue(Integer.valueOf(item.getItemValue()));
             }
-            return dictVO;
+            if (DictDataType.STRING.equals(item.getDataType())) {
+                itemVO.setItemValue(item.getItemValue());
+            }
+            return itemVO;
         }).collect(Collectors.toList());
+        dictVO.setDictItems(itemVOList);
+
+        return dictVO;
     }
 }

+ 34 - 0
src/main/java/com/punchsettle/server/service/manager/impl/OpManagerImpl.java

@@ -0,0 +1,34 @@
+package com.punchsettle.server.service.manager.impl;
+
+import com.punchsettle.server.common.exception.BusinessException;
+import com.punchsettle.server.service.manager.IOpManager;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.Cache;
+import org.springframework.cache.CacheManager;
+import org.springframework.stereotype.Component;
+
+import java.util.Objects;
+
+/**
+ * @author tyuio
+ * @version 1.0.0
+ * @date 2025/4/8 14:34
+ * @description 运维服务类
+ */
+@Slf4j
+@Component
+public class OpManagerImpl implements IOpManager {
+
+    @Autowired
+    private CacheManager cacheManager;
+
+    @Override
+    public void clearCache(String cacheName) {
+        Cache cache = cacheManager.getCache(cacheName);
+        if (Objects.isNull(cache)) {
+            BusinessException.throwFail(String.format("%s 缓存不存在", cacheName));
+        }
+        cache.clear();
+    }
+}

+ 1 - 0
src/main/java/com/punchsettle/server/service/manager/impl/UserManagerImpl.java

@@ -78,6 +78,7 @@ public class UserManagerImpl implements IUserManager {
     }
 
     @Override
+    @Cacheable(cacheNames = CacheNameConstant.USER_VO, key = "#userId", condition = "#userId != null")
     public UserInfoVO queryUserInfo(Long userId) {
         User user = userService.getById(userId);
         UserInfoVO userInfoVO = new UserInfoVO();

+ 0 - 57
src/main/java/com/punchsettle/server/utiis/TokenUtils.java

@@ -1,57 +0,0 @@
-package com.punchsettle.server.utiis;
-
-import java.util.Date;
-import java.util.Map;
-
-import com.auth0.jwt.JWT;
-import com.auth0.jwt.JWTVerifier;
-import com.auth0.jwt.algorithms.Algorithm;
-import com.auth0.jwt.interfaces.Claim;
-import com.punchsettle.server.core.config.BizProperties;
-
-/**
- * @className JwtUtils
- * @description Token凭证工具
- * @author ChenYL
- * @date 2023/07/29 16:25
- * @version V1.0
- **/
-public class TokenUtils {
-
-    /**
-     * token算法
-     */
-    private static Algorithm tokenAlgorithm;
-
-    /**
-     * token校验工具
-     */
-    private static JWTVerifier jwtVerifier;
-
-    static {
-        BizProperties bizProperties = SpringUtils.getBean(BizProperties.class);
-        tokenAlgorithm = Algorithm.HMAC256(bizProperties.getTokenPassword());
-        jwtVerifier = JWT.require(tokenAlgorithm).build();
-    }
-
-    /**
-     * 创建token
-     * 
-     * @param userId
-     * @param expiresAt
-     * @return
-     */
-    public static String createToken(Long userId, Date expiresAt) {
-        return JWT.create().withClaim("userId", userId).withExpiresAt(expiresAt).sign(tokenAlgorithm);
-    }
-
-    /**
-     * 校验token
-     * 
-     * @param token
-     * @return
-     */
-    public static Map<String, Claim> verify(String token) {
-        return jwtVerifier.verify(token).getClaims();
-    }
-}

+ 33 - 0
src/main/java/com/punchsettle/server/utiis/WeekendUtils.java

@@ -0,0 +1,33 @@
+package com.punchsettle.server.utiis;
+
+import com.punchsettle.server.common.pojo.BaseEntity;
+import tk.mybatis.mapper.weekend.Weekend;
+
+/**
+ * @author tyuio
+ * @version 1.0.0
+ * @date 2025/03/09 10:15
+ * @description Tk NyBatis Weekend 工具类
+ */
+public class WeekendUtils {
+
+    /**
+     * 创建Weekend对象并排除审计字段
+     *
+     * @param entityClass 实体类的Class对象
+     * @param <T>         实体类类型
+     * @return Weekend对象
+     */
+    public static <T extends BaseEntity> Weekend<T> createExcludeAuditFields(Class<T> entityClass) {
+        Weekend<T> weekend = Weekend.of(entityClass);
+        weekend.excludeProperties(
+                BaseEntity::getCreatedBy,
+                BaseEntity::getCreationTime,
+                BaseEntity::getLastUpdatedBy,
+                BaseEntity::getLastUpdateTime,
+                BaseEntity::getVersion,
+                BaseEntity::getDeleteFlag
+        );
+        return weekend;
+    }
+}