From 1ded6c0f9054a2c2a20d3216c6807ff1dfac8f8c Mon Sep 17 00:00:00 2001 From: Yen Date: Fri, 7 Jun 2024 17:24:43 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E9=94=81=E8=A7=A3?= =?UTF-8?q?=E5=86=B3=E8=B7=A8=E7=B3=BB=E7=BB=9F=E9=87=8D=E5=A4=8D=E5=BC=80?= =?UTF-8?q?=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mvc/HttpServletRequestFilter.java | 12 +++++++ .../common/framework/redis/RedisService.java | 35 +++++++++++++++++++ .../serve/common/util/AuthContextUtils.java | 12 +++++++ .../sys/service/impl/SysPostServiceImpl.java | 1 + .../service/impl/SysPostUserServiceImpl.java | 2 +- .../service/impl/TbsBudgetServiceImpl.java | 6 +++- .../service/impl/TbsCostApplyServiceImpl.java | 5 ++- .../controller/TzcPolicyItemController.java | 10 ++++++ .../modules/tzc/entity/TzcPolicyItem.java | 8 +++++ .../service/TzcPolicyApplicationService.java | 4 +++ .../impl/TzcPolicyApplicationServiceImpl.java | 7 +++- .../controller/VtbVerificationController.java | 2 +- .../impl/VtbVerificationServiceImpl.java | 7 ++-- 13 files changed, 104 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/qs/serve/common/framework/mvc/HttpServletRequestFilter.java b/src/main/java/com/qs/serve/common/framework/mvc/HttpServletRequestFilter.java index d858718c..6492549d 100644 --- a/src/main/java/com/qs/serve/common/framework/mvc/HttpServletRequestFilter.java +++ b/src/main/java/com/qs/serve/common/framework/mvc/HttpServletRequestFilter.java @@ -1,15 +1,18 @@ package com.qs.serve.common.framework.mvc; import com.qs.serve.common.config.DevEnvironmentConfig; +import com.qs.serve.common.framework.redis.RedisService; import com.qs.serve.common.framework.security.model.LoginUser; import com.qs.serve.common.util.AuthContextUtils; import com.qs.serve.common.util.DateUtils; import com.qs.serve.common.util.ServletUtils; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; import org.springframework.util.StringUtils; +import javax.annotation.Resource; import javax.servlet.*; import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletRequest; @@ -36,6 +39,8 @@ import java.time.format.DateTimeFormatter; @Order(10000) public class HttpServletRequestFilter implements Filter{ + @Resource + RedisService redisService; @Override public void init(FilterConfig filterConfig) throws ServletException { @@ -98,6 +103,13 @@ public class HttpServletRequestFilter implements Filter{ }else { log.error(buffer.toString()); } + String themeKey = AuthContextUtils.getLockTheme(); + if(StringUtils.hasText(themeKey)){ + log.warn("释放资源key:{}",themeKey); + redisService.remove(themeKey); + } + //释放资源 防止线程池重复利用出现脏数据 + AuthContextUtils.removeThreadLocal(); } @Override diff --git a/src/main/java/com/qs/serve/common/framework/redis/RedisService.java b/src/main/java/com/qs/serve/common/framework/redis/RedisService.java index e054ec96..b4f51e8f 100644 --- a/src/main/java/com/qs/serve/common/framework/redis/RedisService.java +++ b/src/main/java/com/qs/serve/common/framework/redis/RedisService.java @@ -1,5 +1,7 @@ package com.qs.serve.common.framework.redis; +import com.qs.serve.common.util.Assert; +import com.qs.serve.common.util.AuthContextUtils; import lombok.AllArgsConstructor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Primary; @@ -34,6 +36,39 @@ public class RedisService { private StringRedisTemplate stringRedisTemplate; + /** + * 加锁 + * @param theme + * @param id + * @return 是否在锁 + */ + public void throwResLock(String theme,String id){ + String key = "LOCK_RES:"+theme+":"+id; + String value = this.getString(key); + System.out.println("throwResLock:"+value); + String newVal = "lock"; + if(newVal.equals(value)){ + Assert.throwEx("服务正在处理,请稍后再试"); + } + this.set(key,newVal,10,TimeUnit.MINUTES); + String value2 = this.getString(key); + if(!newVal.equals(value2)){ + Assert.throwEx("锁失效"); + } + AuthContextUtils.setLockTheme(key); + } + + /** + * 释放锁 + * @param theme + * @param id + * @return 是否在锁 + */ + public void removeResLock(String theme,String id){ + String key = "LOCK_RES:"+theme+":"+id; + this.remove(key); + } + /** * 写入缓存 diff --git a/src/main/java/com/qs/serve/common/util/AuthContextUtils.java b/src/main/java/com/qs/serve/common/util/AuthContextUtils.java index 9fdcf7fe..c8cd5cb2 100644 --- a/src/main/java/com/qs/serve/common/util/AuthContextUtils.java +++ b/src/main/java/com/qs/serve/common/util/AuthContextUtils.java @@ -26,6 +26,13 @@ public class AuthContextUtils { private final static ThreadLocal THREAD_TENANT = new ThreadLocal<>(); private final static ThreadLocal THREAD_SUPPLIER = new ThreadLocal<>(); + private final static ThreadLocal RES_THEME_LOCK = new ThreadLocal<>(); + + public static void removeThreadLocal(){ + THREAD_TENANT.remove(); + THREAD_SUPPLIER.remove(); + RES_THEME_LOCK.remove(); + } public static String getAppId(){ return getAppId(true); @@ -69,6 +76,11 @@ public class AuthContextUtils { public static String getTenant(){return THREAD_TENANT.get();} + + public static void setLockTheme(String value){RES_THEME_LOCK.set(value);} + + public static String getLockTheme(){return RES_THEME_LOCK.get();} + public static void setSupplierId(String value){ if(value!=null){ try { diff --git a/src/main/java/com/qs/serve/modules/sys/service/impl/SysPostServiceImpl.java b/src/main/java/com/qs/serve/modules/sys/service/impl/SysPostServiceImpl.java index 237bc266..b556d194 100644 --- a/src/main/java/com/qs/serve/modules/sys/service/impl/SysPostServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/sys/service/impl/SysPostServiceImpl.java @@ -119,6 +119,7 @@ public class SysPostServiceImpl extends ServiceImpl impl post.setPathIds(pPathId +"_"+post.getId()); post.setPathNames(pPathName+"_"+post.getPostName()); } + this.updateById(post); this.toFlushPathIds(post.getId(),post.getPathIds(),post.getPostName()); } } diff --git a/src/main/java/com/qs/serve/modules/sys/service/impl/SysPostUserServiceImpl.java b/src/main/java/com/qs/serve/modules/sys/service/impl/SysPostUserServiceImpl.java index e79ce4ac..f15e5227 100644 --- a/src/main/java/com/qs/serve/modules/sys/service/impl/SysPostUserServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/sys/service/impl/SysPostUserServiceImpl.java @@ -44,7 +44,7 @@ public class SysPostUserServiceImpl extends ServiceImpl lqw = new LambdaQueryWrapper<>(); lqw.likeRight(SysPostUser::getPathIds,postUser.getPathIds()+"_"); - lqw.select(SysPostUser::getUserId,SysPostUser::getId); + //lqw.select(SysPostUser::getUserId,SysPostUser::getId); List sysPostUsers = this.list(lqw); for (SysPostUser childUser : sysPostUsers) { userIdSet.add(childUser.getUserId()); diff --git a/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetServiceImpl.java b/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetServiceImpl.java index 0f128367..87ec0280 100644 --- a/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetServiceImpl.java @@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.qs.serve.common.config.properties.ProjectProperties; import com.qs.serve.common.framework.manager.AsyncFactory; import com.qs.serve.common.framework.manager.AsyncManager; +import com.qs.serve.common.framework.redis.RedisService; import com.qs.serve.common.model.dto.R; import com.qs.serve.common.model.enums.BudgetLogOptFlag; import com.qs.serve.common.util.*; @@ -83,6 +84,7 @@ public class TbsBudgetServiceImpl extends ServiceImpl private final VtbFundFlowService vtbFundFlowService; private final TbsActivityTemplateMapper tbsActivityTemplateMapper; + private RedisService redisService; private SysAttachService attachService; private SeeYonRequestService seeYonService; private ProjectProperties projectProperties; @@ -90,10 +92,12 @@ public class TbsBudgetServiceImpl extends ServiceImpl @Override public void commitApply(Long id) { + TbsBudget tbsBudget = this.getById(id); + redisService.throwResLock(TbsBudget.class.getSimpleName(),id.toString()); seeYonService.testConnection(); String templateCode = TbsSeeYonConst.BudgetApplyConf.Code(); SysUser sysUser = sysUserService.getById(AuthContextUtils.getSysUserId()); - TbsBudget tbsBudget = this.getById(id); + if(tbsBudget.getBudgetState().equals(1)){ Assert.throwEx("已开启"); } diff --git a/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyServiceImpl.java b/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyServiceImpl.java index bb8f9fee..22a56e8e 100644 --- a/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyServiceImpl.java @@ -8,6 +8,7 @@ import com.qs.serve.common.config.properties.ProjectApisProperties; import com.qs.serve.common.config.properties.ProjectProperties; import com.qs.serve.common.framework.manager.AsyncFactory; import com.qs.serve.common.framework.manager.AsyncManager; +import com.qs.serve.common.framework.redis.RedisService; import com.qs.serve.common.model.consts.ApplyTypeConst; import com.qs.serve.common.model.enums.BudgetLogOptFlag; import com.qs.serve.common.model.consts.BudgetLogRollbackFlag; @@ -88,6 +89,7 @@ import java.util.stream.Collectors; @AllArgsConstructor public class TbsCostApplyServiceImpl extends ServiceImpl implements TbsCostApplyService { + private RedisService redisService; private TbsActivityChannelPointMapper tbsActivityChannelPointMapper; private VtbVerificationMapper vtbVerificationMapper; private TbsBudgetApplicationService budgetApplicationService; @@ -499,8 +501,9 @@ public class TbsCostApplyServiceImpl extends ServiceImpl policyGoodsList = tzcPolicyGoodsService.listByItemId(policyItem.getId()); policyItem.setPolicyGoodsList(policyGoodsList); if(policyItem.getAttachIds()!=null&&policyItem.getAttachIds().length>0){ diff --git a/src/main/java/com/qs/serve/modules/tzc/entity/TzcPolicyItem.java b/src/main/java/com/qs/serve/modules/tzc/entity/TzcPolicyItem.java index 027929d0..e4393182 100644 --- a/src/main/java/com/qs/serve/modules/tzc/entity/TzcPolicyItem.java +++ b/src/main/java/com/qs/serve/modules/tzc/entity/TzcPolicyItem.java @@ -85,6 +85,8 @@ public class TzcPolicyItem implements Serializable { private Integer releaseFlag; /** 释放时间 */ + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") @TableField(updateStrategy = FieldStrategy.NOT_NULL) private LocalDateTime releaseTime; @@ -232,6 +234,12 @@ public class TzcPolicyItem implements Serializable { @TableField(exist = false) private List matchBudgetList; + /** + * 是否过期 + */ + @TableField(exist = false) + private Integer expireFlag; + public void initSetNull(){ this.setId(null); this.setCreateBy(null); diff --git a/src/main/java/com/qs/serve/modules/tzc/service/TzcPolicyApplicationService.java b/src/main/java/com/qs/serve/modules/tzc/service/TzcPolicyApplicationService.java index 7d60257d..9405c050 100644 --- a/src/main/java/com/qs/serve/modules/tzc/service/TzcPolicyApplicationService.java +++ b/src/main/java/com/qs/serve/modules/tzc/service/TzcPolicyApplicationService.java @@ -27,6 +27,10 @@ public interface TzcPolicyApplicationService { */ void syncExpireRelease(); + /** + * 取消释放 + * @param policyItemId + */ void cancelReleasePolicyItem(Long policyItemId); void releasePolicyItem(Long policyItemId, SysUser user); diff --git a/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcPolicyApplicationServiceImpl.java b/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcPolicyApplicationServiceImpl.java index da54e851..402bbed6 100644 --- a/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcPolicyApplicationServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcPolicyApplicationServiceImpl.java @@ -7,6 +7,7 @@ import com.qs.serve.common.config.properties.ProjectApisProperties; import com.qs.serve.common.config.properties.ProjectProperties; import com.qs.serve.common.framework.manager.AsyncFactory; import com.qs.serve.common.framework.manager.AsyncManager; +import com.qs.serve.common.framework.redis.RedisService; import com.qs.serve.common.model.enums.BudgetLogOptFlag; import com.qs.serve.common.model.consts.BudgetLogRollbackFlag; import com.qs.serve.common.model.dto.R; @@ -61,6 +62,7 @@ import com.qs.serve.modules.tzc.service.TzcPolicyItemService; import com.qs.serve.modules.tzc.service.TzcPolicyService; import com.qs.serve.modules.vtb.common.VtbFundFlowType; import com.qs.serve.modules.vtb.entity.VtbFundFlow; +import com.qs.serve.modules.vtb.entity.VtbVerification; import com.qs.serve.modules.vtb.service.VtbFundFlowService; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -84,6 +86,7 @@ import java.util.stream.Collectors; @AllArgsConstructor public class TzcPolicyApplicationServiceImpl implements TzcPolicyApplicationService { + private RedisService redisService; private TzcPolicyMapper tzcPolicyMapper; private TzcPolicyService tzcPolicyService; private TzcPolicyItemService tzcPolicyItemService; @@ -378,8 +381,10 @@ public class TzcPolicyApplicationServiceImpl implements TzcPolicyApplicationServ @Override @Transactional(rollbackFor = Exception.class) public void commitPolicy(Long policyId){ - seeYonService.testConnection(); TzcPolicy tzcPolicy = tzcPolicyService.getById(policyId); + + redisService.throwResLock(TzcPolicy.class.getSimpleName(),tzcPolicy.getId()+""); + seeYonService.testConnection(); Integer tzcPolicyStatus = tzcPolicy.getPolicyStatus(); if(!tzcPolicy.allowEditFlag()){ Assert.throwEx("操作失败,政策状态不支持"); diff --git a/src/main/java/com/qs/serve/modules/vtb/controller/VtbVerificationController.java b/src/main/java/com/qs/serve/modules/vtb/controller/VtbVerificationController.java index 3efda2c6..977e8d38 100644 --- a/src/main/java/com/qs/serve/modules/vtb/controller/VtbVerificationController.java +++ b/src/main/java/com/qs/serve/modules/vtb/controller/VtbVerificationController.java @@ -335,7 +335,7 @@ public class VtbVerificationController { * @param commitBo * @return */ - @LimitSubmit(interval = 3000) + @LimitSubmit(interval = 30000) @PostMapping("/commit") @SysLog(module = SystemModule.Verification, title = "核销", biz = BizType.UPDATE) @PreAuthorize("hasRole('vtb:verification:commit')") diff --git a/src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationServiceImpl.java b/src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationServiceImpl.java index 69b68964..483d9b41 100644 --- a/src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationServiceImpl.java @@ -8,6 +8,7 @@ import com.qs.serve.common.config.properties.ProjectApisProperties; import com.qs.serve.common.config.properties.ProjectProperties; import com.qs.serve.common.framework.manager.AsyncFactory; import com.qs.serve.common.framework.manager.AsyncManager; +import com.qs.serve.common.framework.redis.RedisService; import com.qs.serve.common.model.AmountDTO; import com.qs.serve.common.model.enums.BudgetLogOptFlag; import com.qs.serve.common.model.dto.R; @@ -103,6 +104,7 @@ public class VtbVerificationServiceImpl extends ServiceImpl subjectCenterBoList = verificationBo.getSubjectCenterList(); boolean isCenterCheck = CollectionUtil.isNotEmpty(subjectCenterBoList); @@ -850,6 +852,7 @@ public class VtbVerificationServiceImpl extends ServiceImpl