mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-11-04 04:08:43 +08:00 
			
		
		
		
	Merge branch 'master' of https://gitee.com/zhijiantianya/ruoyi-vue-pro into feature/1.8.0-uniapp
# Conflicts: # yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/jackson/config/YudaoJacksonAutoConfiguration.java # yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/notify/PayNotifyServiceImpl.java # yudao-ui-admin/src/views/mall/trade/order/index.vue
This commit is contained in:
		@@ -30,6 +30,7 @@ public class CaptchaController extends com.anji.captcha.controller.CaptchaContro
 | 
			
		||||
    @ApiOperation("获得验证码")
 | 
			
		||||
    @PermitAll
 | 
			
		||||
    @OperateLog(enable = false) // 避免 Post 请求被记录操作日志
 | 
			
		||||
    @Override
 | 
			
		||||
    public ResponseModel get(@RequestBody CaptchaVO data, HttpServletRequest request) {
 | 
			
		||||
        return super.get(data, request);
 | 
			
		||||
    }
 | 
			
		||||
@@ -38,6 +39,7 @@ public class CaptchaController extends com.anji.captcha.controller.CaptchaContro
 | 
			
		||||
    @ApiOperation("校验验证码")
 | 
			
		||||
    @PermitAll
 | 
			
		||||
    @OperateLog(enable = false) // 避免 Post 请求被记录操作日志
 | 
			
		||||
    @Override
 | 
			
		||||
    public ResponseModel check(@RequestBody CaptchaVO data, HttpServletRequest request) {
 | 
			
		||||
        return super.check(data, request);
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -8,6 +8,8 @@ import com.baomidou.mybatisplus.annotation.TableId;
 | 
			
		||||
import com.baomidou.mybatisplus.annotation.TableName;
 | 
			
		||||
import lombok.*;
 | 
			
		||||
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 字典类型表
 | 
			
		||||
 *
 | 
			
		||||
@@ -47,4 +49,9 @@ public class DictTypeDO extends BaseDO {
 | 
			
		||||
     */
 | 
			
		||||
    private String remark;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 删除时间
 | 
			
		||||
     */
 | 
			
		||||
    private LocalDateTime deletedTime;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -7,8 +7,12 @@ import cn.iocoder.yudao.module.system.controller.admin.dict.vo.type.DictTypeExpo
 | 
			
		||||
import cn.iocoder.yudao.module.system.controller.admin.dict.vo.type.DictTypePageReqVO;
 | 
			
		||||
import cn.iocoder.yudao.module.system.dal.dataobject.dict.DictDataDO;
 | 
			
		||||
import cn.iocoder.yudao.module.system.dal.dataobject.dict.DictTypeDO;
 | 
			
		||||
import org.apache.ibatis.annotations.Delete;
 | 
			
		||||
import org.apache.ibatis.annotations.Mapper;
 | 
			
		||||
import org.apache.ibatis.annotations.Param;
 | 
			
		||||
import org.apache.ibatis.annotations.Update;
 | 
			
		||||
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
@Mapper
 | 
			
		||||
@@ -39,4 +43,10 @@ public interface DictTypeMapper extends BaseMapperX<DictTypeDO> {
 | 
			
		||||
        return selectOne(DictTypeDO::getName, name);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Update("UPDATE system_dict_type SET DELETED = 1,DELETED_TIME=#{deletedTime} WHERE id = #{id}")
 | 
			
		||||
    int deleteById(@Param("id") Long id, @Param("deletedTime") LocalDateTime deletedTime);
 | 
			
		||||
 | 
			
		||||
    default int deleteById(Long id) {
 | 
			
		||||
        return deleteById(id, LocalDateTime.now());
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -13,6 +13,7 @@ import com.google.common.annotations.VisibleForTesting;
 | 
			
		||||
import org.springframework.stereotype.Service;
 | 
			
		||||
 | 
			
		||||
import javax.annotation.Resource;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
 | 
			
		||||
 
 | 
			
		||||
@@ -86,11 +86,30 @@ public class MenuServiceImpl implements MenuService {
 | 
			
		||||
    @Override
 | 
			
		||||
    @PostConstruct
 | 
			
		||||
    public synchronized void initLocalCache() {
 | 
			
		||||
        // 获取菜单列表,如果有更新
 | 
			
		||||
        List<MenuDO> menuList = this.loadMenuIfUpdate(maxUpdateTime);
 | 
			
		||||
        if (CollUtil.isEmpty(menuList)) {
 | 
			
		||||
        initLocalCacheIfUpdate(null);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Scheduled(fixedDelay = SCHEDULER_PERIOD, initialDelay = SCHEDULER_PERIOD)
 | 
			
		||||
    public void schedulePeriodicRefresh() {
 | 
			
		||||
        initLocalCacheIfUpdate(this.maxUpdateTime);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 刷新本地缓存
 | 
			
		||||
     *
 | 
			
		||||
     * @param maxUpdateTime 最大更新时间
 | 
			
		||||
     *                      1. 如果 maxUpdateTime 为 null,则“强制”刷新缓存
 | 
			
		||||
     *                      2. 如果 maxUpdateTime 不为 null,判断自 maxUpdateTime 是否有数据发生变化,有的情况下才刷新缓存
 | 
			
		||||
     */
 | 
			
		||||
    private void initLocalCacheIfUpdate(LocalDateTime maxUpdateTime) {
 | 
			
		||||
        // 如果没有增量的数据变化,则不进行本地缓存的刷新
 | 
			
		||||
        if (maxUpdateTime != null
 | 
			
		||||
            && menuMapper.selectCountByUpdateTimeGt(maxUpdateTime) == 0) {
 | 
			
		||||
            log.info("[initLocalCacheIfUpdate][数据未发生变化({}),本地缓存不刷新]", maxUpdateTime);
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        List<MenuDO> menuList = menuMapper.selectList();
 | 
			
		||||
        log.info("[initLocalCacheIfUpdate][缓存菜单,数量为:{}]", menuList.size());
 | 
			
		||||
 | 
			
		||||
        // 构建缓存
 | 
			
		||||
        ImmutableMap.Builder<Long, MenuDO> menuCacheBuilder = ImmutableMap.builder();
 | 
			
		||||
@@ -103,34 +122,9 @@ public class MenuServiceImpl implements MenuService {
 | 
			
		||||
        });
 | 
			
		||||
        menuCache = menuCacheBuilder.build();
 | 
			
		||||
        permissionMenuCache = permMenuCacheBuilder.build();
 | 
			
		||||
        maxUpdateTime = CollectionUtils.getMaxValue(menuList, MenuDO::getUpdateTime);
 | 
			
		||||
        log.info("[initLocalCache][缓存菜单,数量为:{}]", menuList.size());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Scheduled(fixedDelay = SCHEDULER_PERIOD, initialDelay = SCHEDULER_PERIOD)
 | 
			
		||||
    public void schedulePeriodicRefresh() {
 | 
			
		||||
        initLocalCache();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 如果菜单发生变化,从数据库中获取最新的全量菜单。
 | 
			
		||||
     * 如果未发生变化,则返回空
 | 
			
		||||
     *
 | 
			
		||||
     * @param maxUpdateTime 当前菜单的最大更新时间
 | 
			
		||||
     * @return 菜单列表
 | 
			
		||||
     */
 | 
			
		||||
    private List<MenuDO> loadMenuIfUpdate(LocalDateTime maxUpdateTime) {
 | 
			
		||||
        // 第一步,判断是否要更新。
 | 
			
		||||
        if (maxUpdateTime == null) { // 如果更新时间为空,说明 DB 一定有新数据
 | 
			
		||||
            log.info("[loadMenuIfUpdate][首次加载全量菜单]");
 | 
			
		||||
        } else { // 判断数据库中是否有更新的菜单
 | 
			
		||||
            if (menuMapper.selectCountByUpdateTimeGt(maxUpdateTime) == 0) {
 | 
			
		||||
                return null;
 | 
			
		||||
            }
 | 
			
		||||
            log.info("[loadMenuIfUpdate][增量加载全量菜单]");
 | 
			
		||||
        }
 | 
			
		||||
        // 第二步,如果有更新,则从数据库加载所有菜单
 | 
			
		||||
        return menuMapper.selectList();
 | 
			
		||||
        // 设置最新的 maxUpdateTime,用于下次的增量判断
 | 
			
		||||
        this.maxUpdateTime = CollectionUtils.getMaxValue(menuList, MenuDO::getUpdateTime);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user