dangsn
2024-06-07 7664ba49025a6c549885fc6019e4d3c1886f45a6
调整项目BUG
已修改28个文件
已删除1个文件
已添加2个文件
1662 ■■■■■ 文件已修改
Source/plt-web/plt-web-parent/plt-web-base/pom.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/constant/TokenKeyConstant.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/pagemodel/TokenVO.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/util/JwtUtils.java 135 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/SmFunctionQueryServicePlatformImpl.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/SmSessionForLoginImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/SmUserQueryServiceImpl.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/constant/FrameWorkBusLangCodeConstant.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/pagemodel/SmUserVO.java 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/constant/CacheKeyConstant.java 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/constant/CacheNameConstant.java 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/initTask/VciWebInitTaskComponent.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/redis/RedisConfig.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/redis/RedisService.java 361 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/LoginServiceI.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/LoginServiceImpl.java 527 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsAttributeServiceImpl.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsBtmServiceImpl.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsEnumServiceImpl.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsLifeCycleServiceImpl.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsLinkTypeServiceImpl.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsRevisionRuleServiceImpl.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsStatusServiceImpl.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/UIEngineServiceImpl.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/WebBoServiceImpl.java 151 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/WebHomeTaskServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/util/BusAnnotationUtil.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/util/PlatformClientUtil.java 36 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/resources/application-dev.yml 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/resources/i18n/messages.properties 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/resources/i18n/messages_zh_CN.properties 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web-base/pom.xml
@@ -46,6 +46,11 @@
            <artifactId>hutool-all</artifactId>
            <version>5.4.3</version>
        </dependency>
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt</artifactId>
            <version>0.9.1</version>
        </dependency>
    </dependencies>
</project>
Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/constant/TokenKeyConstant.java
@@ -37,4 +37,38 @@
     */
    public static final String REQUEST_TIMESTAMP = "vciHttpStartRequestTime";
    /**
     * ç”¨æˆ·è®¸å¯åœ¨redis里的前缀
     */
    public static final String TOKEN_KEY_PREFIX_IN_REDIS = "jwt-token:";
    /**
     * ä»¤ç‰Œç§˜é’¥
     */
    public static final String SECRET = "thisissecretforjwt";
    /**
     * JWT中的用户主键的Key
     */
    public static final String JWT_USER_KEY = "user_key";
    /**
     * JWT中token的key
     */
    public static final String JWT_TOKEN_KEY = "token_key";
    /**
     * JWT中用户账号的key
     */
    public static final String JWT_USER_CODE_KEY = "user_code_key";
    /**
     * JWT中用户名字key
     */
    public static final String JWT_USER_NAME_KEY = "user_name_key";
    /**
     * ç¼“存有效期,默认30(分钟)
     */
    public static final long EXPIRATION = 30;
}
Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/pagemodel/TokenVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,52 @@
package com.vci.starter.web.pagemodel;
/**
 * @Description è®¸å¯çš„æ˜¾ç¤ºä¿¡æ¯
 * @Author dangsn
 * @Date 2024/6/6 17:37
 */
public class TokenVO {
    /**
     * åºåˆ—化
     */
    private static final long serialVersionUID = -1067382417908970897L;
    /**
     * token的值
     */
    private String accessToken;
    /**
     * æœ‰æ•ˆæœŸ
     */
    private Long expireTime;
    /**
     * æ˜¯å¦èŽ·å–æ‰‹æœºå·,为true的时候表示需要手机号
     */
    private Boolean phoneFlag;
    public String getAccessToken() {
        return accessToken;
    }
    public void setAccessToken(String accessToken) {
        this.accessToken = accessToken;
    }
    public Long getExpireTime() {
        return expireTime;
    }
    public void setExpireTime(Long expireTime) {
        this.expireTime = expireTime;
    }
    public Boolean getPhoneFlag() {
        return phoneFlag;
    }
    public void setPhoneFlag(Boolean phoneFlag) {
        this.phoneFlag = phoneFlag;
    }
}
Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/util/JwtUtils.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,135 @@
package com.vci.starter.web.util;
import cn.hutool.core.convert.Convert;
import com.vci.starter.web.constant.TokenKeyConstant;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import java.util.Map;
/**
 * @Description Jwt工具类
 * @Author dangsn
 * @Date 2024/6/6 17:32
 */
public class JwtUtils {
    /**
     * ä»Žæ•°æ®å£°æ˜Žç”Ÿæˆä»¤ç‰Œ
     *
     * @param claims æ•°æ®å£°æ˜Ž
     * @return ä»¤ç‰Œ
     */
    public static String createToken(Map<String, Object> claims) {
        String token = Jwts.builder().setClaims(claims).signWith(SignatureAlgorithm.HS512, TokenKeyConstant.SECRET).compact();
        return token;
    }
    /**
     * ä»Žä»¤ç‰Œä¸­èŽ·å–æ•°æ®å£°æ˜Ž
     *
     * @param token ä»¤ç‰Œ
     * @return æ•°æ®å£°æ˜Ž
     */
    public static Claims parseToken(String token) {
        return Jwts.parser().setSigningKey(TokenKeyConstant.SECRET).parseClaimsJws(token).getBody();
    }
    /**
     * ä½¿ç”¨jwt的token获取在redis里存储的token
     * @param token jwt的许可
     * @return redis里的token值
     */
    public static final String getUserToken(String token){
        Claims claims = parseToken(token);
        return getValue(claims, TokenKeyConstant.JWT_TOKEN_KEY);
    }
    /**
     * ä½¿ç”¨jwt的数据对象获取redis里存储的token
     * @param claims å¯¹è±¡
     * @return redis里的token值
     */
    public static final String getUserToken(Claims claims){
        return getValue(claims, TokenKeyConstant.JWT_TOKEN_KEY);
    }
    /**
     * æ ¹æ®ä»¤ç‰ŒèŽ·å–ç”¨æˆ·æ ‡è¯†
     *
     * @param token ä»¤ç‰Œ
     * @return ç”¨æˆ·ID
     */
    public static String getUserKey(String token) {
        Claims claims = parseToken(token);
        return getValue(claims, TokenKeyConstant.JWT_USER_KEY);
    }
    /**
     * æ ¹æ®ä»¤ç‰ŒèŽ·å–ç”¨æˆ·æ ‡è¯†
     *
     * @param claims èº«ä»½ä¿¡æ¯
     * @return ç”¨æˆ·ID
     */
    public static String getUserKey(Claims claims)
    {
        return getValue(claims,  TokenKeyConstant.JWT_USER_KEY);
    }
    /**
     * æ ¹æ®ä»¤ç‰ŒèŽ·å–ç”¨æˆ·ID
     *
     * @param token ä»¤ç‰Œ
     * @return ç”¨æˆ·ID
     */
    public static String getUserId(String token) {
        Claims claims = parseToken(token);
        return getValue(claims, TokenKeyConstant.JWT_USER_KEY);
    }
    /**
     * æ ¹æ®èº«ä»½ä¿¡æ¯èŽ·å–ç”¨æˆ·ID
     *
     * @param claims èº«ä»½ä¿¡æ¯
     * @return ç”¨æˆ·ID
     */
    public static String getUserId(Claims claims)
    {
        return getValue(claims, TokenKeyConstant.JWT_USER_KEY);
    }
    /**
     * æ ¹æ®ä»¤ç‰ŒèŽ·å–ç”¨æˆ·å
     *
     * @param token ä»¤ç‰Œ
     * @return ç”¨æˆ·å
     */
    public static String getUserCode(String token) {
        Claims claims = parseToken(token);
        return getValue(claims, TokenKeyConstant.JWT_USER_CODE_KEY);
    }
    /**
     * æ ¹æ®èº«ä»½ä¿¡æ¯èŽ·å–ç”¨æˆ·å
     *
     * @param claims èº«ä»½ä¿¡æ¯
     * @return ç”¨æˆ·å
     */
    public static String getUserCode(Claims claims)
    {
        return getValue(claims,  TokenKeyConstant.JWT_USER_CODE_KEY);
    }
    /**
     * æ ¹æ®èº«ä»½ä¿¡æ¯èŽ·å–é”®å€¼
     *
     * @param claims èº«ä»½ä¿¡æ¯
     * @param key é”®
     * @return å€¼
     */
    public static String getValue(Claims claims, String key)
    {
        return Convert.toStr(claims.get(key), "");
    }
}
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/SmFunctionQueryServicePlatformImpl.java
@@ -23,17 +23,12 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.*;
import java.util.stream.Collectors;
import static com.vci.web.constant.CacheKeyConstant.ALL_FUNCTION;
import static com.vci.web.constant.CacheNameConstant.VCI_OBJECT_SERVICE;
/**
 * è€å¹³å°çš„æƒé™æœåŠ¡
@@ -94,7 +89,6 @@
     * @return åŠŸèƒ½çš„æ˜¾ç¤ºå¯¹è±¡
     */
    @Override
    @Cacheable(value = VCI_OBJECT_SERVICE,key = ALL_FUNCTION,unless = "#result == null")
    public Map<String, SmFunctionVO> selectAllFunctionMap() {
        return Optional.ofNullable(self.selectAllFunction()).orElseGet(()->new ArrayList<>()).stream().collect(Collectors.toMap(s->s.getOid(),t->t));
    }
@@ -678,7 +672,6 @@
     * æ¸…除缓存
     */
    @Override
    @CacheEvict(value = VCI_OBJECT_SERVICE,key = ALL_FUNCTION)
    public void clearCache() {
    }
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/SmSessionForLoginImpl.java
@@ -14,8 +14,6 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
@@ -25,8 +23,6 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static com.vci.web.constant.CacheNameConstant.VCI_SESSION;
/**
 * ä¼šè¯å­˜å‚¨çš„æœåŠ¡
@@ -155,7 +151,6 @@
     * @return ç”¨æˆ·ä¼šè¯å¯¹è±¡
     */
    @Override
    @Cacheable(value = VCI_SESSION,key = "#p0",unless = "#target == null")
    public SessionInfo getSessionInfoByToken(String userToken) {
        WebUtil.alertNotNull(userToken,"许可的信息");
        List<Map> dataList = boService.queryBySqlForMap("select JSONSTRING as JSONSTRING from VCI_SESSIONINFO where TOKEN ='" + userToken.trim() + "'", new HashMap<>());
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/SmUserQueryServiceImpl.java
@@ -22,7 +22,6 @@
import com.vci.web.util.WebUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
@@ -31,7 +30,6 @@
import java.util.stream.Collectors;
import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
import static com.vci.web.constant.CacheNameConstant.VCI_USER;
import static com.vci.web.util.WebUtil.arryAndSqlToClientBusinessObject;
/**
@@ -95,7 +93,6 @@
     * @throws VciBaseException å‚数为空或者数据库存在问题的时候会抛出异常
     */
    @Override
    @Cacheable(value = VCI_USER,key = "#p0",unless = "#result == null")
    public SmUserVO getUserByUserId(String userId) throws VciBaseException {
        WebUtil.alertNotNull(userId,"用户名");
        return getUserByField("plusername",userId);
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/constant/FrameWorkBusLangCodeConstant.java
@@ -105,6 +105,11 @@
     */
    public static final String PASSWORD_REMAIN_DAY = "passwordRemainDay";
    /**
     * å¯†ç å·²è¿‡æœŸ
     */
    public static final String PASSWORD_EXPIRE = "passwordExpire";
    //组织
@@ -516,4 +521,23 @@
     */
    public static final String DISPATCH_TASK_NOT_EXIST_BY_PLAN = "dispatchTaskNotExistByPlan";
    /**
     * ç³»ç»Ÿå¼‚常
     */
    public static final String SYSTEM_ERROR = "systemError";
    /**
     * ç™»å½•成功
     */
    public static final String LOGIN_SUCCESS = "loginSuccess";
    /**
     * åˆå§‹å¯†ç éœ€è¦ä¿®æ”¹
     */
    public static final String PASSWORD_INIT = "passwordInit";
    /**
     * å¯†ç ç­–略已经修改,需修改账号密码
     */
    public static final String PASSWORD_POLICY_UPDATED = "passwordPolicyUpdated";
}
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/pagemodel/SmUserVO.java
@@ -146,6 +146,11 @@
     */
    private String photo;
    /**
     * token值
     */
    private String token;
    @Override
    public String getId() {
        return id;
@@ -357,11 +362,18 @@
        this.photo = photo;
    }
    public String getToken() {
        return token;
    }
    public void setToken(String token) {
        this.token = token;
    }
    @Override
    public String toString() {
        return "SmUserVO{" +
                "oid='" + getOid() + '\'' +
                ",id='" + id + '\'' +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", userType='" + userType + '\'' +
                ", userTypeText='" + userTypeText + '\'' +
@@ -385,9 +397,9 @@
                ", sexText='" + sexText + '\'' +
                ", langCode='" + langCode + '\'' +
                ", langCodeText='" + langCodeText + '\'' +
                ", lockFlag='" + lockFlag + '\'' +
                ", lockFlag=" + lockFlag +
                ", photo='" + photo + '\'' +
                 ",description='" + getDescription() + '\'' +
                ", token='" + token + '\'' +
                '}';
    }
}
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/constant/CacheKeyConstant.java
ÎļþÒÑɾ³ý
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/constant/CacheNameConstant.java
@@ -8,6 +8,82 @@
public class CacheNameConstant {
    /**
     * æ‰€æœ‰çš„属性
     */
    public static final String ALL_STATUS = "allStatus";
    /**
     * æ‰€æœ‰çš„业务类型
     */
    public static final String ALL_BTM = "allBtm";
    /**
     * æ‰€æœ‰çš„æžšä¸¾
     */
    public static final String ALL_ENUM = "allEnum";
    /**
     * æ‰€æœ‰ç”Ÿå‘½å‘¨æœŸ
     */
    public static final String ALL_LIFE_CYCLE = "allLife";
    /**
     * æ‰€æœ‰çš„链接关系
     */
    public static final String ALL_Link = "allLink";
    /**
     * æ‰€æœ‰çš„版本规则
     */
    public static final String ALL_REVISION = "allRevisionRule";
    /**
     * æ‰€æœ‰çš„功能
     */
    public static final String ALL_FUNCTION = "allFunction";
    /**
     * æ‰€æœ‰çš„属性
     */
    public static final String ALL_ATTRIBUTE = "allAttribute";
    /**
     * æ‰€æœ‰çš„UI区域
     */
    public static final String ALL_LAYOUT = "allLayout" ;
    /**
     * æ‰€æœ‰çš„表单和表格
     */
    public static final String ALL_FORM_AND_TABLE = "allFormAndTable";
    /**
     * æ‰€æœ‰çš„表单
     */
    public static final String ALL_FORM = "allForm";
    /**
     * æ‰€æœ‰çš„表格
     */
    public static final String ALL_TABLE = "allTable";
    /**
     * æ‰€æœ‰çš„action
     */
    public static final String ALL_ACTION = "allAction";
    /**
     * æ‰€æœ‰çš„UI
     */
    public static final String ALL_UI = "allUI";
    /**
     * æ‰€æœ‰çš„组件
     */
    public static final String ALL_COMP = "allComp";
    /**
     * ä¼šè¯çš„信息
     */
    public static final String VCI_SESSION = "vci_session_cache";
@@ -20,5 +96,29 @@
    /**
     * ç”¨æˆ·
     */
    public static final String VCI_USER = "VCI_USER";
    public static final String VCI_USER = "vci_user:";
    /**
     * ç”¨æˆ·å”¯ä¸€æ ‡è¯†
     */
    public static final String VCI_USER_OID = "vci_user_oid:";
    /**
     * ç”¨æˆ·
     */
    public static final String VCI_USER_LOGIN = "vci_user_login:";
    /**
     * è¿”回拼接后的key
     *
     * @param cacheKey      ç¼“å­˜key
     * @param cacheKeyValue ç¼“å­˜key值
     * @return tenantKey
     */
    public static String cacheKey(String cacheKey, String cacheKeyValue) {
        if(cacheKeyValue == null){
            cacheKeyValue = "";
        }
        return cacheKey.concat(cacheKeyValue);
    }
}
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/initTask/VciWebInitTaskComponent.java
@@ -143,7 +143,7 @@
//        secretService.getMinDataSecret();
//        secretService.getMinIpSecret();
//        secretService.getMinUserSecret();
        initService.clearAllCache();
//        initService.clearAllCache();
//        initService.initServerCache();
        mdService.scanAllMdFile();
        initDefaultAttribute();
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/redis/RedisConfig.java
@@ -20,8 +20,8 @@
 * @author wang1
 */
@Configuration
@ConditionalOnProperty(value = "spring.redis.enabled",havingValue = "true",matchIfMissing = false)
@EnableCaching
@ConditionalOnProperty(value = "spring.redis.enabled",havingValue = "true",matchIfMissing = false)
public class RedisConfig extends CachingConfigurerSupport
{
    @Bean
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/redis/RedisService.java
@@ -1,25 +1,28 @@
package com.vci.web.redis;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.BoundSetOperations;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.data.geo.Distance;
import org.springframework.data.geo.Metrics;
import org.springframework.data.geo.Point;
import org.springframework.data.redis.core.*;
import org.springframework.data.redis.core.script.DefaultRedisScript;
import org.springframework.data.redis.core.script.RedisScript;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.util.*;
import java.util.concurrent.TimeUnit;
/**
 * spring redis å·¥å…·ç±»
 *
 * @author wang1
 * @author dangsn
 **/
@SuppressWarnings(value = { "unchecked", "rawtypes" })
@Component
@Slf4j
public class RedisService
{
    @Autowired(required = false)
@@ -31,8 +34,7 @@
     * @param key ç¼“存的键值
     * @param value ç¼“存的值
     */
    public <T> void setCacheObject(final String key, final T value)
    {
    public <T> void setCacheObject(final String key, final T value) {
        redisTemplate.opsForValue().set(key, value);
    }
@@ -44,8 +46,7 @@
     * @param timeout æ—¶é—´
     * @param timeUnit æ—¶é—´é¢—粒度
     */
    public <T> void setCacheObject(final String key, final T value, final Long timeout, final TimeUnit timeUnit)
    {
    public <T> void setCacheObject(final String key, final T value, final Long timeout, final TimeUnit timeUnit) {
        redisTemplate.opsForValue().set(key, value, timeout, timeUnit);
    }
@@ -69,8 +70,7 @@
     * @param unit æ—¶é—´å•位
     * @return true=设置成功;false=设置失败
     */
    public boolean expire(final String key, final long timeout, final TimeUnit unit)
    {
    public boolean expire(final String key, final long timeout, final TimeUnit unit) {
        return redisTemplate.expire(key, timeout, unit);
    }
@@ -91,8 +91,7 @@
     * @param key é”®
     * @return true å­˜åœ¨ false不存在
     */
    public Boolean hasKey(String key)
    {
    public Boolean hasKey(String key) {
        return redisTemplate.hasKey(key);
    }
@@ -102,8 +101,7 @@
     * @param key ç¼“存键值
     * @return ç¼“存键值对应的数据
     */
    public <T> T getCacheObject(final String key)
    {
    public <T> T getCacheObject(final String key) {
        ValueOperations<String, T> operation = redisTemplate.opsForValue();
        return operation.get(key);
    }
@@ -111,7 +109,8 @@
    /**
     * åˆ é™¤å•个对象
     *
     * @param key
     * @param key å¯ä»¥
     * @return  åˆ é™¤æ˜¯å¦æˆåŠŸ
     */
    public boolean deleteObject(final String key)
    {
@@ -122,7 +121,7 @@
     * åˆ é™¤é›†åˆå¯¹è±¡
     *
     * @param collection å¤šä¸ªå¯¹è±¡
     * @return
     * @return åˆ é™¤çš„个数
     */
    public long deleteObject(final Collection collection)
    {
@@ -130,50 +129,14 @@
    }
    /**
     * list的长度
     *
     * @param key ç¼“存的键值
     * @return ç¼“存的对象
     */
    public <T> Long listSize(final String key)
    {
        return redisTemplate.opsForList().size(key);
    }
    /**
     * ä»Žå·¦è¾¹å–出一个list元素
     *
     * @param key ç¼“存的键值
     * @return ç¼“存的对象
     */
    public <T> Object leftPop(final String key)
    {
        return redisTemplate.opsForList().leftPop(key);
    }
    /**
     * ä»Žå³è¾¹ç¼“å­˜List数据
     * ç¼“å­˜List数据
     *
     * @param key ç¼“存的键值
     * @param dataList å¾…缓存的List数据
     * @return ç¼“存的对象
     */
    public <T> long setCacheList(final String key, final List<T> dataList)
    {
    public <T> long setCacheList(final String key, final List<T> dataList) {
        Long count = redisTemplate.opsForList().rightPushAll(key, dataList);
        return count == null ? 0 : count;
    }
    /**
     * åˆ é™¤list中元素value
     * @param key
     * @param value
     * @param <T>
     * @return
     */
    public <T> long deleteCacheListByKeyAndValue(final String key, final T value)
    {
        Long count = redisTemplate.opsForList().remove(key,0,value);
        return count == null ? 0 : count;
    }
@@ -188,8 +151,6 @@
        return redisTemplate.opsForList().range(key, 0, -1);
    }
    /**
     * ç¼“å­˜Set
     *
@@ -197,36 +158,21 @@
     * @param dataSet ç¼“存的数据
     * @return ç¼“存数据的对象
     */
    public <T> BoundSetOperations<String, T> setCacheSet(final String key, final Set<T> dataSet)
    {
    public <T> BoundSetOperations<String, T> setCacheSet(final String key, final Set<T> dataSet) {
        BoundSetOperations<String, T> setOperation = redisTemplate.boundSetOps(key);
        Iterator<T> it = dataSet.iterator();
        while (it.hasNext())
        {
            setOperation.add(it.next());
        }
        String i = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
                "<Datas>\n" +
                "\t<Data code=\"A1100012\" deptLevel=\"开发部门#测试部门\">\n" +
                "\t\t<prop sName=\"供应商名称\" tName =\"供应商名称1\" >\n" +
                "\t\t\t北京宏博远达科技有限公司2\n" +
                "\t\t</prop>\n" +
                "\t\t<prop sName=\"户头\" tName =\"户头1\">\n" +
                "\t\t\t1111100012\n" +
                "\t\t</prop>\n" +
                "\t\t<prop sName=\"联系人\" tName=\"联系人1\">\n" +
                "\t\t\t谢军2\n" +
                "\t\t</prop>\n" +
                "\t</Data>\n" +
                "</Datas>";
        return setOperation;
    }
    /**
     * èŽ·å¾—ç¼“å­˜çš„set
     *
     * @param key
     * @return
     * @param key key
     * @return é›†åˆçš„内容
     */
    public <T> Set<T> getCacheSet(final String key)
    {
@@ -236,11 +182,10 @@
    /**
     * ç¼“å­˜Map
     *
     * @param key
     * @param dataMap
     * @param key key
     * @param dataMap æ•°æ®æ˜ å°„
     */
    public <T> void setCacheMap(final String key, final Map<String, T> dataMap)
    {
    public <T> void setCacheMap(final String key, final Map<String, T> dataMap) {
        if (dataMap != null) {
            redisTemplate.opsForHash().putAll(key, dataMap);
        }
@@ -249,8 +194,8 @@
    /**
     * èŽ·å¾—ç¼“å­˜çš„Map
     *
     * @param key
     * @return
     * @param key key
     * @return æ˜ å°„
     */
    public <T> Map<String, T> getCacheMap(final String key)
    {
@@ -264,8 +209,7 @@
     * @param hKey Hash键
     * @param value å€¼
     */
    public <T> void setCacheMapValue(final String key, final String hKey, final T value)
    {
    public <T> void setCacheMapValue(final String key, final String hKey, final T value) {
        redisTemplate.opsForHash().put(key, hKey, value);
    }
@@ -276,8 +220,7 @@
     * @param hKey Hash键
     * @return Hash中的对象
     */
    public <T> T getCacheMapValue(final String key, final String hKey)
    {
    public <T> T getCacheMapValue(final String key, final String hKey) {
        HashOperations<String, String, T> opsForHash = redisTemplate.opsForHash();
        return opsForHash.get(key, hKey);
    }
@@ -289,19 +232,243 @@
     * @param hKeys Hash键集合
     * @return Hash对象集合
     */
    public <T> List<T> getMultiCacheMapValue(final String key, final Collection<Object> hKeys)
    {
    public <T> List<T> getMultiCacheMapValue(final String key, final Collection<Object> hKeys) {
        return redisTemplate.opsForHash().multiGet(key, hKeys);
    }
    /**
     * èŽ·å¾—ç¼“å­˜çš„åŸºæœ¬å¯¹è±¡åˆ—è¡¨
     *
     *
     * @param pattern å­—符串前缀
     * @return å¯¹è±¡åˆ—表
     */
    public Collection<String> keys(final String pattern)
    {
    public Collection<String> keys(final String pattern) {
        return redisTemplate.keys(pattern);
    }
    /**
     * è®¾ç½®åˆ†å¸ƒå¼é”
     * @param key é”çš„key
     * @param value å€¼
     * @return true表示存在,false表示不存在
     */
    public synchronized Boolean setNX(final String key, final String value) throws Exception{
        Object obj = null;
        try {
            obj = redisTemplate.execute((RedisCallback<Object>) connection -> {
                StringRedisSerializer serializer = new StringRedisSerializer();
                Boolean success = connection.setNX(serializer.serialize(key), serializer.serialize(value));
                connection.close();
                return success;
            });
        } catch (Exception e) {
            log.error("setNX redis error, key : {} - {}", key,e);
            throw e;
        }
        return obj != null ? (Boolean) obj : false;
    }
    /**
     * è®¾ç½®åˆ†å¸ƒå¼é”ï¼Œè¶…时间单位秒
     * @param key é”çš„key
     * @param value å€¼
     * @param timeOut è¶…æ—¶æ—¶é—´
     * @return true表示存在,false表示不存在
     */
    public synchronized Boolean setNX(final String key, final String value,long timeOut) throws Exception {
        boolean b = this.setNX(key,value);
        redisTemplate.expire(key,timeOut,TimeUnit.SECONDS);
        return b;
    }
    /**
     * åˆ é™¤é”
     * @param key é”çš„key
     */
    public void unlock(final String key) {
        redisTemplate.delete(key);
    }
    /**
     * è‡ªå‡ å¤§äºŽç­‰äºŽ0
     * @param key é”çš„key
     * @return Boolean
     */
    public Boolean decrement(final String key) {
        return redisTemplate.opsForValue().decrement(key) >= 0;
    }
    public Boolean decrement(final String key, long count) {
        return redisTemplate.opsForValue().decrement(key,count) >= 0;
    }
    /**
     * è‡ªå‡
     * @param key é”çš„key
     * @return Boolean
     */
    public Long decrementLong(final String key) {
        return redisTemplate.opsForValue().decrement(key);
    }
    /**
     * è‡ªå¢ž
     * @param key é”çš„key
     * @return Boolean
     */
    public Long increment(final String key) {
        return redisTemplate.opsForValue().increment(key);
    }
    public Long increment(final String key, long count) {
        return redisTemplate.opsForValue().increment(key,count);
    }
    /**
     * å‰ç¼€åŒ¹é…åˆ é™¤
     * @param keyPrefix key前缀
     */
    public Boolean deleteByPrefix(final String keyPrefix) {
        List<String> list = new LinkedList<>();
        ScanOptions build = ScanOptions.scanOptions().match(keyPrefix+":*").count(5000).build();
        RedisSerializer<String> redisSerializer = redisTemplate.getKeySerializer();
        Cursor cursor = (Cursor) redisTemplate.executeWithStickyConnection(redis -> new ConvertingCursor<>(redis.scan(build), redisSerializer::deserialize));
        if (cursor != null){
            try {
                while ( cursor.hasNext()) {
                    list.add(cursor.next().toString());
                }
                try {
                    cursor.close();
                } catch (IOException e) {
                    e.printStackTrace();
                    log.error("redis中的Cursor关闭失败!");
                }
            } finally {
                try {
                    cursor.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            Long delete = redisTemplate.delete(list);
            log.info("删除菜单key: "+delete+"个。\n è¯¦æƒ…:"+list.toString());
            return delete > 0L;
        }
        return false;
    }
    /**
     * å‰ç¼€åŒ¹é…
     * @param keyPrefix key前缀
     *
     */
    public <T> List<T> findKeysByPrefix(final String keyPrefix) {
        List<T> list = new ArrayList<>();
        ScanOptions build = ScanOptions.scanOptions().match(keyPrefix+":*").count(5000).build();
        RedisSerializer<String> redisSerializer = redisTemplate.getKeySerializer();
        Cursor cursor = (Cursor) redisTemplate.executeWithStickyConnection(redis -> new ConvertingCursor<>(redis.scan(build), redisSerializer::deserialize));
        if (cursor != null){
            try {
                while (cursor.hasNext()) {
                    list.add(getCacheObject(cursor.next().toString()));
                }
                try {
                    cursor.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            } finally {
                try {
                    cursor.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return list;
        }
        return new ArrayList<>();
    }
    /**
     * åŸºäºŽLua脚本实现原子查询并删除
     * @param key
     * @return
     */
    public Boolean deleteLuaByKey(String key) {
        String str2 = "if redis.call('EXISTS', KEYS[1]) == 1 then redis.call('DEL', KEYS[1]) return 1 else return 0 end";
        RedisScript<Boolean> redisScript = new DefaultRedisScript<>(str2,Boolean.class);
        Boolean execute = (Boolean) redisTemplate.execute(redisScript, Collections.singletonList(key));
        return execute;
    }
    /**
     * GEO æ·»åŠ æ•°æ®(经纬度)
     * @param key
     * @return
     */
    public <T extends Point> void addGEO(String key, Map<String,T> map) {
        redisTemplate.opsForGeo().add(key,map);
    }
    /**
     * GEO æ·»åŠ æ•°æ®(经纬度)
     * @param key
     * @return
     */
    public <T extends Point> void addGEO(String key, Point point, String member) {
        redisTemplate.opsForGeo().add(key,point,member);
    }
    public <T extends Point> void removeGEO(String key,String... member) {
        redisTemplate.opsForGeo().remove(key,member);
    }
    /**
     * GEO æŸ¥è¯¢è·ç¦»
     * @param point éœ€è¦æŸ¥è¯¢çš„地址
     * @param key åŸŽå¸‚
     * @param members èŠ‚ç‚¹
     * @return map(商铺,距离)
     */
    public  Map<String,String> distanceGEO(Point point,String key, List<String> members) {
        GeoOperations geo = redisTemplate.opsForGeo();
        long l = System.currentTimeMillis();
        String member = "geo"+l;
        addGEO(key,point,member);
        Map<String,String> map = new HashMap<>();
        members.forEach(e->{
            Distance distance = geo.distance(key, member, e, Metrics.KILOMETERS);
            map.put(e,String.valueOf(distance.getValue()));
        });
        removeGEO(key,key,member);
        return map;
    }
    /**
     * èŽ·å–List集合操作
     * @return æ“ä½œ
     */
    public ListOperations opsForList(){
        return this.redisTemplate.opsForList();
    }
    /**
     * èŽ·å–Set集合操作
     * @return æ“ä½œ
     */
    public SetOperations opsForSet(){
        return this.redisTemplate.opsForSet();
    }
    /**
     * èŽ·å–hash操作
     * @return æ“ä½œ
     */
    public HashOperations opsForHash(){
        return this.redisTemplate.opsForHash();
    }
}
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/LoginServiceI.java
@@ -2,6 +2,8 @@
import com.vci.starter.web.exception.VciBaseException;
import com.vci.starter.web.pagemodel.RequestClientInfo;
import com.vci.starter.web.pagemodel.SessionInfo;
import com.vci.starter.web.pagemodel.TokenVO;
import com.vci.web.bo.LoginResultBO;
import com.vci.web.dto.LoginUserDTO;
@@ -36,4 +38,32 @@
     * @throws VciBaseException åˆ é™¤ä¼šè¯ä¿¡æ¯å‡ºé”™çš„æ—¶å€™ä¼šæŠ›å‡ºå¼‚常
     */
    void logout(String userToken) throws VciBaseException;
    /**
     * åˆ·æ–°token
     * @param sessionInfo session的信息
     */
    void refreshToken(SessionInfo sessionInfo);
    /**
     * åˆ·æ–°token
     * @param key token在redis中的key
     * @param sessionInfo session的信息
     */
    void refreshToken(String key, SessionInfo sessionInfo);
    /**
     * åˆ›å»ºè®¸å¯çš„信息
     * @param sessionInfo session的信息
     * @return è®¸å¯ä¿¡æ¯
     */
    TokenVO createToken(SessionInfo sessionInfo) ;
    /**
     * åˆ›å»ºè®¸å¯çš„信息
     * @param key token在redis中的key。
     * @param sessionInfo session的信息
     * @return è®¸å¯ä¿¡æ¯
     */
    TokenVO createToken(String key, SessionInfo sessionInfo) ;
}
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/LoginServiceImpl.java
@@ -1,5 +1,8 @@
package com.vci.web.service.impl;
import com.vci.client.logon.base.LogonHandler;
import com.vci.corba.framework.data.LoginResult;
import com.vci.corba.framework.data.LoginState;
import com.vci.frameworkcore.ajaxTask.SmUserUnLockTask;
import com.vci.frameworkcore.ajaxTask.SmUserUnLockTaskManager;
import com.vci.frameworkcore.compatibility.ISmFunctionQueryService;
@@ -7,27 +10,41 @@
import com.vci.frameworkcore.compatibility.SmUserQueryServiceI;
import com.vci.frameworkcore.pagemodel.SmUserVO;
import com.vci.frameworkcore.properties.VciSecurityManageProperties;
import com.vci.starter.web.annotation.bus.*;
import com.vci.starter.web.annotation.bus.VciLoginAfter;
import com.vci.starter.web.annotation.bus.VciLogoutBefore;
import com.vci.starter.web.annotation.bus.VciLogoutPlugin;
import com.vci.starter.web.constant.TokenKeyConstant;
import com.vci.starter.web.exception.VciBaseException;
import com.vci.starter.web.interceptor.VciSessionForLoginI;
import com.vci.starter.web.pagemodel.RequestClientInfo;
import com.vci.starter.web.pagemodel.SessionInfo;
import com.vci.starter.web.pagemodel.TokenVO;
import com.vci.starter.web.util.ApplicationContextProvider;
import com.vci.starter.web.util.JwtUtils;
import com.vci.starter.web.util.Md5;
import com.vci.starter.web.util.VciBaseUtil;
import com.vci.web.bo.LoginResultBO;
import com.vci.web.constant.CacheNameConstant;
import com.vci.web.dto.LoginUserDTO;
import com.vci.web.properties.WebProperties;
import com.vci.web.redis.RedisService;
import com.vci.web.service.LoginServiceI;
import com.vci.web.util.BusAnnotationUtil;
import com.vci.web.util.PlatformClientUtil;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.*;
/**
 * ç™»å½•的服务
@@ -45,38 +62,56 @@
    /**
     * ä¼šè¯å¤„理
     */
    @Autowired
    @Resource
    private VciSessionForLoginI sessionForLogin;
    /**
     * è§£é”ä»»åŠ¡
     */
    @Autowired
    @Resource
    private SmUserUnLockTaskManager unLockTaskManager;
    /**
     * æƒé™ç®¡ç†çš„相关配置
     */
    @Autowired
    @Resource
    private VciSecurityManageProperties securityManageProperties;
    /**
     * ç”¨æˆ·æŸ¥è¯¢æœåŠ¡ï¼Œå¯ä»¥å…¼å®¹è€å¹³å°
     */
    @Autowired()
    @Resource
    private SmUserQueryServiceI userQueryService;
    /**
     * è§’色的查询服务,可以兼容老平台
     */
    @Autowired
    @Resource
    private SmRoleQueryServiceI roleQueryService;
    /**
     * æƒé™çš„æŸ¥è¯¢æœåŠ¡ï¼Œå¯ä»¥å…¼å®¹è€å¹³å°
     */
    @Autowired
    @Resource
    private ISmFunctionQueryService functionQueryService;
    /**
     * redis服务
     */
    @Resource
    private RedisService redisService;
    /**
     * å®¢æˆ·ç«¯é…ç½®æ–‡ä»¶
     */
    @Resource
    private WebProperties webProperties;
    /**
     * å¹³å°è°ƒç”¨å®¢æˆ·ç«¯
     */
    @Resource
    private PlatformClientUtil platformClientUtil;
    /**
     * æ‰§è¡Œç™»å½•
@@ -101,195 +136,200 @@
        LoginResultBO loginResult = new LoginResultBO();
        loginResult.setSuccess(false);
        //1.判断用户的基本信息
//        VciBaseUtil.alertNotNull(userDTO, "登录信息", userDTO.getUserId(), "用户账号");
//        if (checkPassword) {
//            VciBaseUtil.alertNotNull(userDTO.getPassword(), "登录密码");
//        }
        //登录之前调用插件
        BusAnnotationUtil.callForAnnotation(VciLoginPlugin.class,VciLoginBefore.class,userDTO,clientInfo);
        VciBaseUtil.alertNotNull(userDTO, "登录信息", userDTO.getUserId(), "用户账号");
        if (checkPassword) {
            VciBaseUtil.alertNotNull(userDTO.getPassword(), "登录密码");
        }
//        String loginInfo = checkIsLogined(userDTO.getUserId());
//        if (!userDTO.isForceLogin() && securityManageProperties.isUserOneLogin()) {
//            //需要看看是否已经登录了
//            if (StringUtils.isNotBlank(loginInfo)) {
//                loginResult.setFailCode(USER_IS_LOGINED);
//                loginResult.setFailMsg(loginInfo);
//                return loginResult;
//            }
//        }
        //2.获取用户的对象.这里需要兼容老平台和老pdm,老编码和老平台是一个表
//        SmUserVO user = userQueryService.getUserByUserId(userDTO.getUserId().trim());
//        if (user == null || StringUtils.isEmpty(user.getOid())) {
//            loginResult.setFailCode(USER_NOT_FOUND);
//            loginResult.setFailMsgArray(new String[]{userDTO.getUserId()});
//            return loginResult;
//        }
        //需要看看是否已经登录了
        String loginKey = CacheNameConstant.cacheKey(CacheNameConstant.VCI_USER_LOGIN, userDTO.getUserId());
        if(redisService.hasKey(loginKey) && !userDTO.isForceLogin() && securityManageProperties.isUserOneLogin()){
            loginResult.setFailCode(USER_IS_LOGINED);
            loginResult.setFailMsg("当前用户已经在其他地方登录!");
            return loginResult;
        }
        //说明已经登录了,那应该取消原来的登录
        if (redisService.hasKey(loginKey) && userDTO.isForceLogin() && securityManageProperties.isUserOneLogin()) {
            redisService.deleteObject(CacheNameConstant.VCI_USER_LOGIN);
        }
        //2.获取用户的对象.
        SmUserVO user = getUserByUserId(userDTO.getUserId().trim());
        if (user == null || StringUtils.isBlank(user.getOid())) {
            loginResult.setFailCode(USER_NOT_FOUND);
            loginResult.setFailMsgArray(new String[]{userDTO.getUserId()});
            return loginResult;
        }
        //3、判断密码是否正确
        if (checkPassword) {
            boolean passwordIsEqual = userQueryService.checkPasswordEqual(userDTO.getPassword(), user.getOid());
            if (!passwordIsEqual) {
                if (logger.isDebugEnabled()) {
                    logger.debug("{}密码不正确", user.getId());
                }
            }
        }
        //4、调用平台登录接口,进行登录
        LogonHandler handler = new LogonHandler();
        try {
            LoginResult chkRes = handler.checkLogin(userDTO.getUserId(), userDTO.getPassword());
            loginResult.setFailCode(getErrorCode(chkRes));
            loginResult.setFailMsgArray(new String[]{userDTO.getUserId(), String.valueOf(chkRes.auxInfo)});
            if(chkRes.state == LoginState.Error || chkRes.state == LoginState.Locked || chkRes.state == LoginState.Freeze){
                return loginResult;
            }
        } catch (Exception e) {
            loginResult.setFailCode(SYSTEM_ERROR);
            loginResult.setFailMsgArray(new String[]{userDTO.getUserId()});
            return loginResult;
        }
        //如果用户已经被停用和锁定,不能登录
        //如果用户的失效日期已经超过了当前时间,不能登录
        //只有新平台的用户才判断失效
//        if (FrameworkDataLCStatus.DISABLED.getValue().equals(user.getLcStatus())) {
//            loginResult.setFailCode(USER_IS_DISABLED);
//            loginResult.setFailMsgArray(new String[]{userDTO.getUserId()});
//            return loginResult;
//        }
//        if (userQueryService.checkUserLock(user, user.getPwdWrongCount())) {
//            loginResult.setFailCode(USER_IS_LOCK);
//            loginResult.setFailMsgArray(new String[]{userDTO.getUserId()});
//            return loginResult;
//        }
//        if (user.getDisabledate() != null) {
//            //2021版本才有这个属性的值,当前这个没有这个值
//            Date disableDate = VciDateUtil.addOrSubDate(user.getDisabledate(), Calendar.DATE, 1);
//            if (disableDate != null && disableDate.getTime() < System.currentTimeMillis()) {
//                loginResult.setFailCode(USER_MORE_THAN_DISABLE_DATE);
//                loginResult.setFailMsgArray(new String[]{userDTO.getUserId()});
//                return loginResult;
//            }
//        }
//        if (user.getPwdWrongCount() == null) {
//            user.setPwdWrongCount(0);
//        }
//        SmPasswordStrategyVO passwordStrategyVO = userQueryService.getPasswordStrategyVOByUserOid(user.getOid());
//        if (checkPassword) {
//            boolean passwordIsEqual = userQueryService.checkPasswordEqual(userDTO.getPassword(), user.getOid());
//            //3.判断用户的密码是否正确
//            if (!passwordIsEqual) {
//                //前端需要先md5一次,然后后台再MD5一次,
//                if (logger.isDebugEnabled()) {
//                    logger.debug("{}密码不正确", user.getId());
//                }
//                if (passwordStrategyVO == null) {
//                    //可能数据问题没有设置密码策略
//                    passwordStrategyVO = new SmPasswordStrategyVO();
//                    passwordStrategyVO.setRetryTime(6);
//                    passwordStrategyVO.setLockTime(30);
//                }
//                if (passwordStrategyVO.getRetryTime() <= (user.getPwdWrongCount() + 1)) {
//                    user.setLockFlag(true);
//                    updateUserPwdWrongCount(user.getOid(), user.getPwdWrongCount() + 1);
//                    addUserToUnLock(userDTO.getUserId(), passwordStrategyVO.getLockTime());
//                    updateUserPwdWrongCount(user.getOid(), user.getPwdWrongCount() + 1);
//                    loginResult.setFailCode(USER_PWD_LOCK);
//                    loginResult.setFailMsgArray(new String[]{userDTO.getUserId(), passwordStrategyVO.getLockTime() + ""});
//                    return loginResult;
//                } else {
//                    //还没有到锁定的次数
//                    updateUserPwdWrongCount(user.getOid(), user.getPwdWrongCount() + 1);
//                    //5, è¿™æ˜¯ç¬¬ä¸€æ¬¡é”™è¯¯ï¼Œå‰©ä¸‹çš„æ˜¯ 5- ï¼ˆ0+1)
//                    loginResult.setFailCode(USER_PWD_NOT_EQUAL);
//                    loginResult.setFailMsgArray(new String[]{userDTO.getUserId(), (passwordStrategyVO.getRetryTime() - (user.getPwdWrongCount() + 1)) + ""});
//                    return loginResult;
//                }
//            }
//        }
        /**if (FrameworkDataLCStatus.DISABLED.getValue().equals(user.getLcStatus())) {
            loginResult.setFailCode(USER_IS_DISABLED);
            loginResult.setFailMsgArray(new String[]{userDTO.getUserId()});
            return loginResult;
        }
        if (userQueryService.checkUserLock(user, user.getPwdWrongCount())) {
            loginResult.setFailCode(USER_IS_LOCK);
            loginResult.setFailMsgArray(new String[]{userDTO.getUserId()});
            return loginResult;
        }
        if (user.getDisabledate() != null) {
            //2021版本才有这个属性的值,当前这个没有这个值
            Date disableDate = VciDateUtil.addOrSubDate(user.getDisabledate(), Calendar.DATE, 1);
            if (disableDate != null && disableDate.getTime() < System.currentTimeMillis()) {
                loginResult.setFailCode(USER_MORE_THAN_DISABLE_DATE);
                loginResult.setFailMsgArray(new String[]{userDTO.getUserId()});
                return loginResult;
            }
        }
        SmPasswordStrategyVO passwordStrategyVO = userQueryService.getPasswordStrategyVOByUserOid(user.getOid());
        if (checkPassword) {
            boolean passwordIsEqual = userQueryService.checkPasswordEqual(userDTO.getPassword(), user.getOid());
            //3.判断用户的密码是否正确
            if (!passwordIsEqual) {
                //前端需要先md5一次,然后后台再MD5一次,
                if (logger.isDebugEnabled()) {
                    logger.debug("{}密码不正确", user.getId());
                }
                if (passwordStrategyVO == null) {
                    //可能数据问题没有设置密码策略
                    passwordStrategyVO = new SmPasswordStrategyVO();
                    passwordStrategyVO.setRetryTime(6);
                    passwordStrategyVO.setLockTime(30);
                }
                if (passwordStrategyVO.getRetryTime() <= (user.getPwdWrongCount() + 1)) {
                    user.setLockFlag(true);
                    updateUserPwdWrongCount(user.getOid(), user.getPwdWrongCount() + 1);
                    addUserToUnLock(userDTO.getUserId(), passwordStrategyVO.getLockTime());
                    updateUserPwdWrongCount(user.getOid(), user.getPwdWrongCount() + 1);
                    loginResult.setFailCode(USER_PWD_LOCK);
                    loginResult.setFailMsgArray(new String[]{userDTO.getUserId(), passwordStrategyVO.getLockTime() + ""});
                    return loginResult;
                } else {
                    //还没有到锁定的次数
                    updateUserPwdWrongCount(user.getOid(), user.getPwdWrongCount() + 1);
                    //5, è¿™æ˜¯ç¬¬ä¸€æ¬¡é”™è¯¯ï¼Œå‰©ä¸‹çš„æ˜¯ 5- ï¼ˆ0+1)
                    loginResult.setFailCode(USER_PWD_NOT_EQUAL);
                    loginResult.setFailMsgArray(new String[]{userDTO.getUserId(), (passwordStrategyVO.getRetryTime() - (user.getPwdWrongCount() + 1)) + ""});
                    return loginResult;
                }
            }
        }
        //检查是否该修改密码
        if (!clientInfo.isSso() && checkPassword) {
            //最后修改时间+ å¤±æ•ˆæ—¶é—´ï¼Œå¤§äºŽç­‰äºŽå½“前日期,则需要马上修改密码
            Date currentDay = null;
            try {
                currentDay = VciDateUtil.getNow(VciDateUtil.DateFormat);
            } catch (Throwable e) {
                if (logger.isErrorEnabled()) {
                    logger.error("获取当前日期", e);
                }
            }
            if (currentDay != null && passwordStrategyVO != null && passwordStrategyVO.getValidDay() != null) {
                Date inValidDay = null;
                if (user.getLastModifyPasswordTime() == null) {
                    //重来没有登录过
                    loginResult.setMustChangePassword(true);
                } else {
                    inValidDay = VciDateUtil.addOrSubDate(user.getLastModifyPasswordTime(), Calendar.DATE, passwordStrategyVO.getValidDay());
                    if (inValidDay.getTime() <= (currentDay).getTime()) {
                        loginResult.setMustChangePassword(true);
                    }
                }
                if (!loginResult.isMustChangePassword()) {
                    if (VciDateUtil.addOrSubDate(inValidDay, Calendar.DATE, -(passwordStrategyVO.getRemindDay())).getTime()
                            <= (currentDay).getTime()) {
                        //您的密码还有{0}天过期,请及时修改密码
                        long remainDay = VciDateUtil.getDaySub(inValidDay, currentDay);
                        loginResult.setPasswordInfo(MessageFormat.format(PASSWORD_REMAIN_DAY, new String[]{String.valueOf(remainDay)}));
                    }
                }
            }
        }*/
        //说明密码正确的
//        if (logger.isDebugEnabled()) {
//            logger.debug("{}的密码正确", user.getId());
//        }
//        user.setLastLoginTime(new Date());
//        user.setPwdWrongCount(0);
        SmUserVO user = new SmUserVO();
        user.setId("1");
        user.setName("1");
        user.setOid("1");
        user.setUserType("1");
        user.setUserTypeText("1");
        user.setSecretGrade(1);
        user.setSecretGradeText("1");
        user.setSex("1");
        user.setSexText("1");
        user.setPkPerson("1");
        user.setPkPersonName("1");
        user.setPkDepartment("1");
        user.setPkDepartmentName("1");
        user.setPkDuty("1");
        user.setPkDutyName("1");
        user.setEmail("1");
        user.setTel("1");
        user.setRtxNo("1");
        user.setIMNo("1");
        if (logger.isDebugEnabled()) {
            logger.debug("{}的密码正确", user.getId());
        }
        user.setLastLoginTime(new Date());
        user.setPwdWrongCount(0);
        SessionInfo sessionInfo = new SessionInfo();
        //拷贝用户的新到session会话中
        copyUser2SessionInfo(user, sessionInfo, userDTO.getLangCode());
        //拷贝请求信息到session会话中
        copyRequest2SessionInfo(clientInfo, sessionInfo);
        //查询所有的角色
//        List<SmRoleVO> roleVOList = roleQueryService.listRoleByUserOid(user.getOid(), null);
//        if (!CollectionUtils.isEmpty(roleVOList)) {
//            Map<String, String> roleOidNameMap = roleVOList.stream().collect(Collectors.toMap(s -> s.getOid(), t -> t.getName()));
//            sessionInfo.setRolesName(roleOidNameMap);
//        } else {
//            sessionInfo.setRolesName(new HashMap());
//        }
        /** //查询所有的角色
        List<SmRoleVO> roleVOList = roleQueryService.listRoleByUserOid(user.getOid(), null);
        if (!CollectionUtils.isEmpty(roleVOList)) {
            Map<String, String> roleOidNameMap = roleVOList.stream().collect(Collectors.toMap(s -> s.getOid(), t -> t.getName()));
            sessionInfo.setRolesName(roleOidNameMap);
        } else {
            sessionInfo.setRolesName(new HashMap());
        }
        //查询所有的权限
//        List<SmFunctionVO> functionVOList = functionQueryService.listFunctionByUserOid(user.getOid(), null, ResourceControlTypeEnum.BS);
//        if (!CollectionUtils.isEmpty(functionVOList)) {
//            List<String> functionOidList = functionVOList.stream().map(s -> s.getOid()).collect(Collectors.toList());
//            sessionInfo.setFunctionOids(functionOidList);
//        } else {
//            sessionInfo.setFunctionOids(new ArrayList());
//        }
        List<SmFunctionVO> functionVOList = functionQueryService.listFunctionByUserOid(user.getOid(), null, ResourceControlTypeEnum.BS);
        if (!CollectionUtils.isEmpty(functionVOList)) {
            List<String> functionOidList = functionVOList.stream().map(s -> s.getOid()).collect(Collectors.toList());
            sessionInfo.setFunctionOids(functionOidList);
        } else {
            sessionInfo.setFunctionOids(new ArrayList());
        }*/
        loginResult.setSuccess(true);
        //检查是否该修改密码
//        if (!clientInfo.isSso() && checkPassword) {
//            //最后修改时间+ å¤±æ•ˆæ—¶é—´ï¼Œå¤§äºŽç­‰äºŽå½“前日期,则需要马上修改密码
//            Date currentDay = null;
//            try {
//                currentDay = VciDateUtil.getNow(VciDateUtil.DateFormat);
//            } catch (Throwable e) {
//                if (logger.isErrorEnabled()) {
//                    logger.error("获取当前日期", e);
//                }
//            }
//            if (currentDay != null && passwordStrategyVO != null && passwordStrategyVO.getValidDay() != null) {
//                Date inValidDay = null;
//                if (user.getLastModifyPasswordTime() == null) {
//                    //重来没有登录过
//                    loginResult.setMustChangePassword(true);
//                } else {
//                    inValidDay = VciDateUtil.addOrSubDate(user.getLastModifyPasswordTime(), Calendar.DATE, passwordStrategyVO.getValidDay());
//                    if (inValidDay.getTime() <= (currentDay).getTime()) {
//                        loginResult.setMustChangePassword(true);
//                    }
//                }
//                if (!loginResult.isMustChangePassword()) {
//                    if (VciDateUtil.addOrSubDate(inValidDay, Calendar.DATE, -(passwordStrategyVO.getRemindDay())).getTime()
//                            <= (currentDay).getTime()) {
//                        //您的密码还有{0}天过期,请及时修改密码
//                        long remainDay = VciDateUtil.getDaySub(inValidDay, currentDay);
//                        loginResult.setPasswordInfo(MessageFormat.format(PASSWORD_REMAIN_DAY, new String[]{String.valueOf(remainDay)}));
//                    }
//                }
//            }
//        }
        //原本想使用jwt来生成token,但是有以下问题
        //1.jwt不能处理注销的问题
        //2.jwt生成的token太长了
        //3.因为本平台不是互联网系统,只需要解决分布式用户信息的获取和权限的校验即可。
        //4.平台引用了redis和数据库来存储会话的信息,只需要保证根据token能获取到会话信息即可
        //5.在服务启动的时候,将会话信息清除,在注销的时候将会话信息清除
        //uuid在高并发的情况下会重复,但是传统软件并发很小,所以出现的重复的概率很小
        sessionInfo.setToken(Md5.md5(VciBaseUtil.getPk() + "_" + user.getId()));
        loginResult.setSessionInfo(sessionInfo);
//        updateUserForLoginSuccess(user.getOid());
//        if (StringUtils.isNotBlank(loginInfo) && userDTO.isForceLogin() && securityManageProperties.isUserOneLogin()) {
//            //说明已经登录了,那应该取消原来的登录
//            popUser(userDTO.getUserId());
//        }
        //添加到会话信息
//        saveSessionInfo(sessionInfo);
        saveSessionInfo(sessionInfo);
        //登录后执行
//        BusAnnotationUtil.callForAnnotation(VciLoginPlugin.class,VciLoginAfter.class,userDTO,clientInfo,loginResult);
        return loginResult;
    }
    /**
     * èŽ·å–ç”¨æˆ·ä¿¡æ¯
     * @param userId userId
     * @Return com.vci.frameworkcore.pagemodel.SmUserVO
     */
    private SmUserVO getUserByUserId(String userId) {
        String userKey = CacheNameConstant.cacheKey(CacheNameConstant.VCI_USER,userId);
        String userOid = redisService.getCacheObject(userKey);
        String oidKey = CacheNameConstant.cacheKey(CacheNameConstant.VCI_USER_OID, userOid);
        SmUserVO userVO = redisService.getCacheObject(oidKey);
        if(userVO == null || StringUtils.isBlank(userVO.getOid())){
            userVO = userQueryService.getUserByUserId(userId);
        }
        return userVO;
    }
@@ -357,28 +397,7 @@
        }
    }
    /**
     * æ ¡éªŒæ˜¯å¦ç™»å½•
     * @param userId ç”¨æˆ·å
     * @return å·²ç»ç™»å½•时,
     */
    private String checkIsLogined(String userId) {
        if(sessionForLogin == null){
            throw new VciBaseException("没有配置会话存储的服务");
        }
        return sessionForLogin.checkIsLogined(userId);
    }
    /**
     * æŠŠä»¥å‰çš„登录信息移除
     * @param userId ç”¨æˆ·å
     */
    private void popUser(String userId){
        if(sessionForLogin == null){
            throw new VciBaseException("没有配置会话存储的服务");
        }
        sessionForLogin.popUser(userId);
    }
    /**
     * ä¿å­˜ä¼šè¯ä¿¡æ¯
@@ -388,6 +407,11 @@
        if(sessionForLogin == null){
            throw new VciBaseException("没有配置会话存储的服务");
        }
        //将权限信息,放入redis缓存中。以防止session中的信息过多,存入数据库中出现错误
        redisService.setCacheList(sessionInfo.getToken(),sessionInfo.getFunctionOids());
        redisService.expire(sessionInfo.getToken(), 1, TimeUnit.HOURS);
        sessionInfo.setFunctionOids(new ArrayList<>());
        sessionForLogin.saveSessionInfo(sessionInfo);
    }
@@ -438,10 +462,6 @@
        sessionInfo.setRtxNo(user.getRtxNo());
        sessionInfo.setIMId(user.getIMNo());
        sessionInfo.setPortalId(user.getId());
//        sessionInfo.setWorkNo(user.getWorkNo());
//        sessionInfo.setWorkTypeOid(user.getPkWorkType());
//        sessionInfo.setWorkTypeName(user.getPkWorkTypeText());
    }
    /**
@@ -475,4 +495,105 @@
    private void updateUserForLoginSuccess(String userOid){
        userQueryService.updateUserLoginTime(userOid);
    }
    /**
     * åˆ›å»ºè®¸å¯çš„信息
     *
     * @param sessionInfo session的信息
     * @return è®¸å¯ä¿¡æ¯
     */
    @Override
    public TokenVO createToken(SessionInfo sessionInfo) {
        return createToken(TokenKeyConstant.TOKEN_KEY_PREFIX_IN_REDIS, sessionInfo);
    }
    /**
     * åˆ›å»ºè®¸å¯çš„信息
     * @param key token在redis中的key
     * @param sessionInfo session的信息
     * @return è®¸å¯ä¿¡æ¯
     */
    @Override
    public TokenVO createToken(String key, SessionInfo sessionInfo) {
        if(StringUtils.isBlank(sessionInfo.getToken())) {
            String token = Md5.md5(VciBaseUtil.getPk() + "_" + sessionInfo.getUserId());
            sessionInfo.setToken(token);
        }
        if(StringUtils.isBlank(key)){
            key = TokenKeyConstant.TOKEN_KEY_PREFIX_IN_REDIS;
        }
        refreshToken(key, sessionInfo);
        Map<String,Object> claimsMap = new HashMap<>();
        claimsMap.put(TokenKeyConstant.JWT_TOKEN_KEY,sessionInfo.getToken());
        claimsMap.put(TokenKeyConstant.JWT_USER_KEY,sessionInfo.getUserOid());
        claimsMap.put(TokenKeyConstant.JWT_USER_NAME_KEY,sessionInfo.getUserName());
        claimsMap.put(TokenKeyConstant.JWT_USER_CODE_KEY,sessionInfo.getUserId());
        TokenVO tokenVO = new TokenVO();
        tokenVO.setAccessToken(JwtUtils.createToken(claimsMap));
        tokenVO.setExpireTime(TokenKeyConstant.EXPIRATION);
        return tokenVO;
    }
    /**
     * åˆ·æ–°token
     * @param sessionInfo session的信息
     */
    @Override
    public void refreshToken(SessionInfo sessionInfo) {
        refreshToken(TokenKeyConstant.TOKEN_KEY_PREFIX_IN_REDIS, sessionInfo);
    }
    /**
     * åˆ·æ–°token
     * @param key token在redis中的key
     * @param sessionInfo session的信息
     */
    @Override
    public void refreshToken(String key, SessionInfo sessionInfo) {
        if(sessionInfo!=null && StringUtils.isNotBlank(sessionInfo.getToken())){
            if(StringUtils.isBlank(key)){
                key = TokenKeyConstant.TOKEN_KEY_PREFIX_IN_REDIS;
            }
            String redisKey = key + sessionInfo.getToken();
            redisService.setCacheObject(redisKey, sessionInfo, webProperties.getClientSessionAliveMax()!=0?webProperties.getClientSessionAliveMax(): TokenKeyConstant.EXPIRATION, TimeUnit.MINUTES);
        }
    }
    /**
     * èŽ·å–ç™»å½•é”™è¯¯ç 
     * @param chkRes å¹³å°ç™»å½•校验结果
     * @Return java.lang.String
     */
    public String getErrorCode(LoginResult chkRes){
        String message = "";
        switch(chkRes.state.value())
        {
            case 0:
                return "";
            case 1:
                return LOGIN_SUCCESS;
            case 10:
                return USER_NOT_FOUND;
            case 11:
                return USER_PWD_NOT_EQUAL;
            case 12:
                return USER_IS_DISABLED;
            case 13:
                return USER_IS_LOCK;
            case 14:
                return PASSWORD_INIT;
            case 15:
                return PASSWORD_REMAIN_DAY;
            case 16:
                return PASSWORD_EXPIRE;
            case 17:
                return PASSWORD_POLICY_UPDATED;
            case 20:
                return SYSTEM_ERROR;
            default:
                message = SYSTEM_ERROR;
                break;
        }
        return message;
    }
}
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsAttributeServiceImpl.java
@@ -9,7 +9,6 @@
import com.vci.starter.web.pagemodel.DataGrid;
import com.vci.starter.web.util.VciBaseUtil;
import com.vci.starter.web.util.VciDateUtil;
import com.vci.web.constant.CacheKeyConstant;
import com.vci.web.model.OsAttributeDO;
import com.vci.web.pageModel.OsAttributeVO;
import com.vci.web.service.OsAttributeServiceI;
@@ -19,8 +18,6 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
@@ -29,7 +26,6 @@
import java.util.stream.Collectors;
import static com.vci.client.omd.attribpool.ui.VTDataTypePanel.*;
import static com.vci.web.constant.CacheNameConstant.VCI_OBJECT_SERVICE;
/**
 * å±žæ€§æ± æœåŠ¡  --已经调用了平台的服务,因此不在提供Dao层
@@ -126,7 +122,6 @@
     * @return key是属性的英文名称小写,value是属性的显示对象
     */
    @Override
    @Cacheable(value = VCI_OBJECT_SERVICE,key = CacheKeyConstant.ALL_ATTRIBUTE,unless = "#result == null")
    @VciUnLog
    public Map<String, OsAttributeVO> selectAllAttributeMap() {
        return Optional.ofNullable(self.selectAllAttribute()).orElseGet(()->new ArrayList<>()).stream().collect(Collectors.toMap(s->s.getId().toLowerCase(),t->t,(o1,o2)->o1));
@@ -428,7 +423,6 @@
     * æ¸…除缓存
     */
    @Override
    @CacheEvict(value = VCI_OBJECT_SERVICE,key = CacheKeyConstant.ALL_ATTRIBUTE)
    public void clearCache() {
    }
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsBtmServiceImpl.java
@@ -11,7 +11,6 @@
import com.vci.starter.web.util.BeanUtil;
import com.vci.starter.web.util.VciBaseUtil;
import com.vci.starter.web.util.VciDateUtil;
import com.vci.web.constant.CacheKeyConstant;
import com.vci.web.pageModel.*;
import com.vci.web.service.*;
import com.vci.web.util.ConcurrentDateFormat;
@@ -20,16 +19,12 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.*;
import java.util.stream.Collectors;
import static com.vci.web.constant.CacheNameConstant.VCI_OBJECT_SERVICE;
/**
 * ä¸šåŠ¡ç±»åž‹æœåŠ¡
@@ -106,7 +101,6 @@
     */
    @Override
    @VciUnLog
    @Cacheable(value = VCI_OBJECT_SERVICE,key = CacheKeyConstant.ALL_BTM,unless = "#result == null")
    public Map<String, OsBtmTypeVO> selectAllBtmMap() {
        return Optional.ofNullable(self.selectAllBtm()).orElseGet(()->new ArrayList<OsBtmTypeVO>()).stream().collect(Collectors.toMap(s->s.getId().toLowerCase(), t->t,(o1,o2)->o1));
    }
@@ -339,7 +333,6 @@
     * æ¸…除缓存
     */
    @Override
    @CacheEvict(value = VCI_OBJECT_SERVICE,key = CacheKeyConstant.ALL_BTM)
    public void clearCache() {
    }
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsEnumServiceImpl.java
@@ -11,7 +11,6 @@
import com.vci.starter.web.pagemodel.PageHelper;
import com.vci.starter.web.util.VciBaseUtil;
import com.vci.starter.web.util.VciDateUtil;
import com.vci.web.constant.CacheKeyConstant;
import com.vci.web.constant.EnumIdConstant;
import com.vci.web.pageModel.KeyValue;
import com.vci.web.pageModel.OsEnumItemVO;
@@ -26,8 +25,6 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
@@ -36,7 +33,6 @@
import java.util.*;
import java.util.stream.Collectors;
import static com.vci.web.constant.CacheNameConstant.VCI_OBJECT_SERVICE;
import static com.vci.web.constant.EnumIdConstant.LC_STATUS_SUBFIX;
/**
@@ -226,7 +222,6 @@
     */
    @Override
    @VciUnLog
    @Cacheable(value = VCI_OBJECT_SERVICE,key = CacheKeyConstant.ALL_ENUM,unless = "#result ==null")
    public Map<String, OsEnumVO> selectAllEnumMap() {
        return Optional.ofNullable(self.selectAllEnum()).orElseGet(()->new ArrayList<>()).stream().collect(Collectors.toMap(s->s.getId().toLowerCase(),t->t,(o1,o2)->o1));
    }
@@ -465,7 +460,6 @@
     * æ¸…除缓存
     */
    @Override
    @CacheEvict(value = VCI_OBJECT_SERVICE,key = CacheKeyConstant.ALL_ENUM)
    public void clearCache() {
    }
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsLifeCycleServiceImpl.java
@@ -10,7 +10,6 @@
import com.vci.starter.web.pagemodel.BaseQueryObject;
import com.vci.starter.web.pagemodel.DataGrid;
import com.vci.starter.web.util.VciDateUtil;
import com.vci.web.constant.CacheKeyConstant;
import com.vci.web.model.OsLifeCycleDO;
import com.vci.web.pageModel.*;
import com.vci.web.service.OsLifeCycleServiceI;
@@ -22,8 +21,6 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
@@ -32,7 +29,6 @@
import java.util.stream.Collectors;
import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_ID_NOT_EXIST;
import static com.vci.web.constant.CacheNameConstant.VCI_OBJECT_SERVICE;
import static com.vci.web.constant.WebLangCodeConstant.LIFE_CYCLE_ROUTER_NULL;
import static com.vci.web.constant.WebLangCodeConstant.LIFE_CYCLE_TRANS_ERROR;
@@ -331,7 +327,6 @@
     */
    @Override
    @VciUnLog
    @Cacheable(value = VCI_OBJECT_SERVICE,key = CacheKeyConstant.ALL_LIFE_CYCLE,unless="#result == null")
    public Map<String,OsLifeCycleVO> selectAllLifeCycleMap() throws VciBaseException{
        return Optional.ofNullable(self.selectAllLifeCycle()).orElseGet(()->new ArrayList<>()).stream().collect(Collectors.toMap(s->s.getId(),t->t,(o1,o2)->o1));
    }
@@ -340,7 +335,6 @@
     * æ¸…除缓存
     */
    @Override
    @CacheEvict(value = VCI_OBJECT_SERVICE,key = CacheKeyConstant.ALL_LIFE_CYCLE)
    public void clearCache() {
    }
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsLinkTypeServiceImpl.java
@@ -9,7 +9,6 @@
import com.vci.starter.web.util.BeanUtil;
import com.vci.starter.web.util.VciBaseUtil;
import com.vci.starter.web.util.VciDateUtil;
import com.vci.web.constant.CacheKeyConstant;
import com.vci.web.model.OsLinkTypeDO;
import com.vci.web.pageModel.*;
import com.vci.web.service.*;
@@ -19,16 +18,12 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.*;
import java.util.stream.Collectors;
import static com.vci.web.constant.CacheNameConstant.VCI_OBJECT_SERVICE;
/**
 * é“¾æŽ¥ç±»åž‹æœåŠ¡
@@ -103,7 +98,6 @@
     */
    @Override
    @VciUnLog
    @Cacheable(value = VCI_OBJECT_SERVICE,key = CacheKeyConstant.ALL_Link,unless = "#result == null")
    public Map<String, OsLinkTypeVO> selectAllLinkMap() {
        return Optional.ofNullable(self.selectAllLink()).orElseGet(()->new ArrayList<>()).stream().collect(Collectors.toMap(s->s.getId().toLowerCase(),t->t,(o1,o2)->o1));
    }
@@ -328,7 +322,6 @@
     * æ¸…除缓存
     */
    @Override
    @CacheEvict(value = VCI_OBJECT_SERVICE,key = CacheKeyConstant.ALL_Link)
    public void clearCache() {
    }
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsRevisionRuleServiceImpl.java
@@ -4,21 +4,17 @@
import com.vci.corba.omd.vrm.VersionRule;
import com.vci.starter.web.annotation.log.VciUnLog;
import com.vci.starter.web.util.VciDateUtil;
import com.vci.web.constant.CacheKeyConstant;
import com.vci.web.pageModel.OsRevisionRuleVO;
import com.vci.web.service.OsRevisionRuleServiceI;
import com.vci.web.util.PlatformClientUtil;
import com.vci.web.util.WebUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CachePut;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import java.util.*;
import java.util.stream.Collectors;
import static com.vci.web.constant.CacheNameConstant.VCI_OBJECT_SERVICE;
/**
 * ç‰ˆæœ¬è§„则的服务
@@ -60,7 +56,6 @@
     * @return key æ˜¯ç‰ˆæœ¬çš„英文名称
     */
    @Override
    @CachePut(value = VCI_OBJECT_SERVICE,key = CacheKeyConstant.ALL_REVISION,unless = "#result ==null ")
    @VciUnLog
    public Map<String, OsRevisionRuleVO> selectAllRevisionMap() {
        return Optional.ofNullable(self.selectAllRevision()).orElseGet(()->new ArrayList<>()).stream().collect(Collectors.toMap(s->s.getId().toLowerCase(),t->t,(o1,o2)->o1));
@@ -133,7 +128,6 @@
     * æ¸…除缓存
     */
    @Override
    @CachePut(value = VCI_OBJECT_SERVICE,key = CacheKeyConstant.ALL_REVISION)
    public void clearCache() {
    }
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsStatusServiceImpl.java
@@ -23,8 +23,6 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
@@ -33,8 +31,6 @@
import java.util.stream.Collectors;
import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
import static com.vci.web.constant.CacheKeyConstant.ALL_STATUS;
import static com.vci.web.constant.CacheNameConstant.VCI_OBJECT_SERVICE;
/**
 * çŠ¶æ€çš„æœåŠ¡
@@ -139,7 +135,6 @@
    /**
     * æ¸…除缓存
     */
    @CacheEvict(value = VCI_OBJECT_SERVICE,key = ALL_STATUS)
    @Override
    public void clearCache(){
        //
@@ -151,7 +146,6 @@
     */
    @Override
    @VciUnLog
    @Cacheable(value = VCI_OBJECT_SERVICE,key = ALL_STATUS,unless = "#result == null")
    public Map<String,OsStatusVO> selectAllStatusMap(){
        return Optional.ofNullable(self.selectAllStatus()).orElseGet(()->new ArrayList<>()).stream().collect(Collectors.toMap(s->s.getId(),t->t,(o1,o2)->o1));
    }
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/UIEngineServiceImpl.java
@@ -14,7 +14,6 @@
import com.vci.starter.web.util.VciBaseUtil;
import com.vci.starter.web.util.VciDateUtil;
import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
import com.vci.web.constant.CacheKeyConstant;
import com.vci.web.enumpck.UIComponentDisplayTypeEnum;
import com.vci.web.enumpck.UIComponentTypeEnum;
import com.vci.web.enumpck.UIFieldTypeEnum;
@@ -33,9 +32,6 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.cache.annotation.Caching;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
@@ -43,7 +39,6 @@
import java.util.*;
import java.util.stream.Collectors;
import static com.vci.web.constant.CacheNameConstant.VCI_OBJECT_SERVICE;
import static com.vci.web.constant.EnumIdConstant.LC_STATUS_SUBFIX;
/**
@@ -175,7 +170,6 @@
     * @return key是表单英文名称
     */
    @Override
    @Cacheable(value = VCI_OBJECT_SERVICE,key = CacheKeyConstant.ALL_FORM,unless = "#result == null")
    public Map<String, UIFormDefineVO> selectAllFormMap() {
        return Optional.ofNullable(self.selectAllForm()).orElseGet(()->new ArrayList<>()).stream().collect(Collectors.toMap(s->s.getBtmType().toLowerCase() + SEP + s.getId().toLowerCase(),t->t,(o1,o2)->o1));
    }
@@ -404,7 +398,6 @@
     * @return è¡¨å•的定义
     */
    @Override
    @Cacheable(value = VCI_OBJECT_SERVICE,key = "#p0.concat('${formcache}').concat(#p1)",unless = "#result == null || #p0 == null || #p1 == null")
    public UIFormDefineVO getFormById(String btmId, String id) {
        if(StringUtils.isBlank(btmId) || StringUtils.isBlank(id)){
            return null;
@@ -450,7 +443,6 @@
     * @return è¡¨æ ¼çš„定义
     */
    @Override
    @Cacheable(value = VCI_OBJECT_SERVICE,key = CacheKeyConstant.ALL_TABLE,unless = "#result == null")
    @VciUnLog
    public List<UITableDefineVO> selectAllTable() {
        PortalVI[] portalVIS = null;
@@ -724,7 +716,6 @@
     * @return è¡¨å•的定义
     */
    @Override
    @Cacheable(value = VCI_OBJECT_SERVICE,key = "#p0.concat('${tablecache}').concat(#p1)",unless = "#result == null || #p0 == null || #p1 == null")
    public UITableDefineVO getTableById(String btmId, String id) {
        if(StringUtils.isBlank(btmId) || StringUtils.isBlank(id)){
            return null;
@@ -786,7 +777,6 @@
     * @return æ˜¾ç¤ºå¯¹è±¡ï¼Œkey是action的主键
     */
    @Override
    @Cacheable(value = VCI_OBJECT_SERVICE,key=CacheKeyConstant.ALL_ACTION,unless = "#result == null")
    public Map<String, UIActionVO> selectAllActionMap() {
        return Optional.ofNullable(self.selectAllAction()).orElseGet(()->new ArrayList<>()).stream().collect(Collectors.toMap(s->s.getOid(),t->t));
    }
@@ -843,13 +833,6 @@
     * æ¸…除缓存
     */
    @Override
    @Caching(evict = {
            @CacheEvict(value = VCI_OBJECT_SERVICE,key = CacheKeyConstant.ALL_UI),
            @CacheEvict(value = VCI_OBJECT_SERVICE,key = CacheKeyConstant.ALL_ACTION),
            @CacheEvict(value = VCI_OBJECT_SERVICE,key = CacheKeyConstant.ALL_FORM),
            @CacheEvict(value = VCI_OBJECT_SERVICE,key = CacheKeyConstant.ALL_TABLE),
            @CacheEvict(value = VCI_OBJECT_SERVICE,key = CacheKeyConstant.ALL_FORM_AND_TABLE)
    })
    public void clearCache()  {
    }
@@ -861,7 +844,6 @@
     */
    @Override
    @VciUnLog
    @Cacheable(value = VCI_OBJECT_SERVICE,key = CacheKeyConstant.ALL_UI,unless = "#result == null")
    public List<UIContentVO> selectAllUIContent() {
        try {
            return UIContentDO2VOs(Arrays.stream(platformClientUtil.getPortalService().getAllPLUILayouts()).collect(Collectors.toList()));
@@ -1067,7 +1049,6 @@
     * @return åŒºåŸŸçš„æ˜¾ç¤ºå¯¹è±¡
     */
    @Override
    @Cacheable(value = VCI_OBJECT_SERVICE,key = CacheKeyConstant.ALL_LAYOUT,unless = "#result == null")
    public List<UILayoutVO> selectAllUILayout() {
//        try {
//            return UILayoutDO2VOs(Arrays.stream(platformClientUtil.getPortalService().getAllPLTabPages()).collect(Collectors.toList()),true);
@@ -1173,7 +1154,6 @@
     * @return UI组件
     */
    @Override
    @Cacheable(value = VCI_OBJECT_SERVICE,key = CacheKeyConstant.ALL_COMP ,unless = "#result ==null")
    public List<UIComponentVO> selectAllUIComponent() {
//        try {
//            return uiComponentDO2VOs(Arrays.stream(platformClientUtil.getPortalService().getAllPLPageDefinations()).collect(Collectors.toList()),false);
@@ -1542,7 +1522,6 @@
     * @return UI上下文的信息
     */
    @Override
    @Cacheable(value = VCI_OBJECT_SERVICE,key = "#p0.concat('${uicache}').concat(#p1)",unless = "#result == null || #p0 == null || #p1 ==null")
    public UIContentVO getUIContentByBtmTypeAndId(String btmType, String id) {
        WebUtil.alertNotNull(btmType,"业务类型或者链接类型",id,"UI上下文的编号");
        PLUILayout[] obj = null;
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/WebBoServiceImpl.java
@@ -1,13 +1,14 @@
package com.vci.web.service.impl;
import com.vci.client.bof.ClientBusinessObject;
import com.vci.client.bof.ClientLinkObject;
import com.vci.client.common.oq.OQTool;
import com.vci.client.common.providers.ServiceProvider;
import com.vci.common.qt.object.*;
import com.vci.common.utility.ObjectUtility;
import com.vci.corba.common.PLException;
import com.vci.corba.omd.data.AttributeValue;
import com.vci.corba.omd.data.BusinessObject;
import com.vci.corba.omd.data.LinkObject;
import com.vci.corba.omd.qtm.QTInfo;
import com.vci.corba.query.ObjectQueryService;
import com.vci.corba.query.ObjectQueryServicePrx;
@@ -36,7 +37,6 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.lang.reflect.Field;
import java.util.*;
@@ -256,8 +256,8 @@
     */
    private  ClientBusinessObject cloneClientBusinessObject(ClientBusinessObject cbo){
        if(cbo !=null){
            com.vci.corba.omd.data.BusinessObject businessObject = new com.vci.corba.omd.data.BusinessObject();
            com.vci.corba.omd.data.BusinessObject bo = cbo.getBusinessObject();
            BusinessObject businessObject = new BusinessObject();
            BusinessObject bo = cbo.getBusinessObject();
            businessObject.oid = new ObjectUtility().getNewObjectID36();
            businessObject.revisionid = new ObjectUtility().getNewObjectID36();
            businessObject.nameoid = new ObjectUtility().getNewObjectID36();
@@ -307,10 +307,10 @@
     * @param newAttrValList å±žæ€§å€¼å¯¹è±¡æ•°ç»„
     * @return æ‹·è´åŽçš„æ–°å±žæ€§æ•°ç»„
     */
    private  com.vci.corba.omd.data.AttributeValue[] clone(com.vci.corba.omd.data.AttributeValue[] newAttrValList) {
        com.vci.corba.omd.data.AttributeValue[] n = new com.vci.corba.omd.data.AttributeValue[newAttrValList.length];
    private  AttributeValue[] clone(AttributeValue[] newAttrValList) {
        AttributeValue[] n = new AttributeValue[newAttrValList.length];
        for (int i = 0; i < newAttrValList.length; i++) {
            n[i] = new com.vci.corba.omd.data.AttributeValue(newAttrValList[i].attrName,newAttrValList[i].attrVal);
            n[i] = new AttributeValue(newAttrValList[i].attrName,newAttrValList[i].attrVal);
        }
        return n;
    }
@@ -400,7 +400,7 @@
        Map<String,String> data = new HashMap<String, String>();
        if(cbos!=null && cbos.size() > 0){
            for(com.vci.client.bof.ClientBusinessObject cbo : cbos){
            for(ClientBusinessObject cbo : cbos){
                data.put(cbo.getAttributeValue(fieldName),cbo.getOid());
            }
        }
@@ -430,9 +430,9 @@
            throw new VciBaseException("属性" + columnName + "的值为空");
        }
        conditionMap.put(columnName,QueryOptionConstant.IN + "(" + VciBaseUtil.toInSql(oidSet.toArray(new String[0])) + ")");
        List<com.vci.client.bof.ClientBusinessObject> cbos = queryCBO(btmName,conditionMap,null,Arrays.asList(new String[]{columnName}));
        List<ClientBusinessObject> cbos = queryCBO(btmName,conditionMap,null,Arrays.asList(new String[]{columnName}));
        if(cbos !=null && cbos.size() >0){
            for(com.vci.client.bof.ClientBusinessObject cbo : cbos){
            for(ClientBusinessObject cbo : cbos){
                String oid = cbo.getAttributeValue(columnName);
                if(oidSet.contains(oid)){
                    oidSet.remove(oid);
@@ -470,7 +470,7 @@
     * @throws VciBaseException æŸ¥è¯¢å‡ºé”™çš„æ˜¯æŠ›å‡ºå¼‚常
     */
    @Override
    public List<com.vci.client.bof.ClientBusinessObject> queryCBO(String btmType,
    public List<ClientBusinessObject> queryCBO(String btmType,
            Map<String, String> conditionMap) throws VciBaseException {
        List<String> clauseList = new ArrayList<String>();
        clauseList.add("*");
@@ -487,7 +487,7 @@
     * @throws VciBaseException æŸ¥è¯¢å‡ºé”™çš„æ˜¯æŠ›å‡ºå¼‚常
     */
    @Override
    public List<com.vci.client.bof.ClientBusinessObject> queryCBO(String btmType,
    public List<ClientBusinessObject> queryCBO(String btmType,
            Map<String, String> conditionMap, PageHelper ph)
            throws VciBaseException {
        List<String> clauseList = new ArrayList<String>();
@@ -505,7 +505,7 @@
     * @throws VciBaseException æŸ¥è¯¢å‡ºé”™çš„æ˜¯æŠ›å‡ºå¼‚常
     */
    @Override
    public List<com.vci.client.bof.ClientBusinessObject> queryCBO(String btmType,
    public List<ClientBusinessObject> queryCBO(String btmType,
            Map<String, String> conditionMap, PageHelper ph,
            List<String> clauseList) throws VciBaseException {
        QueryTemplate qt = new QueryTemplate();
@@ -557,7 +557,7 @@
     * @throws VciBaseException æŸ¥è¯¢å‡ºé”™çš„æ—¶å€™ä¼šæŠ›å‡ºå¼‚常
     */
    private List<ClientBusinessObject> baseQueryCBO(QueryTemplate qt,Map<String,String> conditionMap,PageHelper ph,List<String> clauseList) throws VciBaseException{
        List<com.vci.client.bof.ClientBusinessObject> allCbos = new ArrayList<com.vci.client.bof.ClientBusinessObject>();
        List<ClientBusinessObject> allCbos = new ArrayList<ClientBusinessObject>();
        if(clauseList == null){
            clauseList = new ArrayList<String>();
            clauseList.add("*");
@@ -632,7 +632,7 @@
        return allCbos;
    }
    public AttributeValue[] copyToAttributeValue(com.vci.corba.omd.data.AttributeValue[] attributeValues){
    public AttributeValue[] copyToAttributeValue(AttributeValue[] attributeValues){
        AttributeValue[] attributeValueList = new AttributeValue[attributeValues.length];
        for (int i = 0; i < attributeValues.length; i++) {
            AttributeValue newAttributeValue = new AttributeValue();
@@ -716,7 +716,7 @@
     * æŸ¥è¯¢ç”Ÿå‘½å‘¨æœŸçš„值
     * @param cbos ä¸šåŠ¡å¯¹è±¡
     */
    private void queryLcStatus(List<com.vci.client.bof.ClientBusinessObject> cbos){
    private void queryLcStatus(List<ClientBusinessObject> cbos){
        if(!CollectionUtils.isEmpty(cbos)){
            Map<String, OsStatusVO> statusVOMap = statusService.selectAllStatusMap();
@@ -736,7 +736,7 @@
     * @param enumAttrName æžšä¸¾å±žæ€§çš„值
     * @throws VciBaseException
     */
    private void queryEnumText(com.vci.client.bof.ClientBusinessObject cbo,List<String> enumAttrName) throws VciBaseException{
    private void queryEnumText(ClientBusinessObject cbo,List<String> enumAttrName) throws VciBaseException{
        queryEnumText(cbo,null,enumAttrName);
    }
@@ -748,7 +748,7 @@
     * @throws VciBaseException æŸ¥è¯¢æžšä¸¾å‡ºé”™çš„æ—¶å€™ä¼šæŠ›å‡ºå¼‚常
     */
    @Override
    public void queryEnumText(com.vci.client.bof.ClientBusinessObject cbo, com.vci.client.bof.ClientLinkObject clo, List<String> enumAttrName) throws VciBaseException{
    public void queryEnumText(ClientBusinessObject cbo, ClientLinkObject clo, List<String> enumAttrName) throws VciBaseException{
        if(enumAttrName.size()>0){//查询枚举
            for(String enumAttr:enumAttrName){//格式为   code_field  code是枚举的编码,field是当前业务类型存储枚举值的字段
                if(enumAttr.toLowerCase().equals("creator_name")){
@@ -826,7 +826,7 @@
     * @param attr å±žæ€§å
     * @param value å€¼
     */
    private void setValueToCboOrClo(com.vci.client.bof.ClientBusinessObject cbo,com.vci.client.bof.ClientLinkObject clo,String attr,String value){
    private void setValueToCboOrClo(ClientBusinessObject cbo,ClientLinkObject clo,String attr,String value){
        try {
            if (cbo != null) {
                cbo.setAttributeValueWithNoCheck(attr, value);
@@ -845,13 +845,13 @@
     * @param attributeValue å±žæ€§çš„值
     */
    @Override
    public void setAttributeValueForClo(com.vci.client.bof.ClientLinkObject clo, String attributeName, String attributeValue) {
        com.vci.corba.omd.data.AttributeValue[] attrValues = clo.getLinkObject().newAttrValList;
        ArrayList<com.vci.corba.omd.data.AttributeValue> attrValList = new ArrayList();
        com.vci.corba.omd.data.AttributeValue attrVal;
    public void setAttributeValueForClo(ClientLinkObject clo, String attributeName, String attributeValue) {
        AttributeValue[] attrValues = clo.getLinkObject().newAttrValList;
        ArrayList<AttributeValue> attrValList = new ArrayList();
        AttributeValue attrVal;
        int i;
        if (attrValues != null && attrValues.length > 0) {
            com.vci.corba.omd.data.AttributeValue[] var9 = attrValues;
            AttributeValue[] var9 = attrValues;
            i = attrValues.length;
            for (int var7 = 0; var7 < i; ++var7) {
@@ -864,7 +864,7 @@
        boolean isExist = false;
        for (i = 0; i < attrValList.size(); ++i) {
            attrVal = (com.vci.corba.omd.data.AttributeValue) attrValList.get(i);
            attrVal = (AttributeValue) attrValList.get(i);
            if (attrVal.attrName.toUpperCase().equals(attributeName.toUpperCase())) {
                attrVal.attrVal = attributeValue;
                isExist = true;
@@ -873,13 +873,13 @@
        }
        if (!isExist) {
            attrVal = new com.vci.corba.omd.data.AttributeValue();
            attrVal = new AttributeValue();
            attrVal.attrName = attributeName.toUpperCase();
            attrVal.attrVal = attributeValue;
            attrValList.add(attrVal);
        }
        clo.getLinkObject().newAttrValList = (com.vci.corba.omd.data.AttributeValue[]) attrValList.toArray(new com.vci.corba.omd.data.AttributeValue[attrValList.size()]);
        clo.getLinkObject().newAttrValList = (AttributeValue[]) attrValList.toArray(new AttributeValue[attrValList.size()]);
    }
@@ -889,7 +889,7 @@
     * @param enumAttrName æžšä¸¾å±žæ€§
     * @throws VciBaseException æŸ¥è¯¢å‡ºé”™çš„æ—¶å€™ä¼šæŠ›å‡ºå¼‚常
     */
    private void queryEnumTextClo(com.vci.client.bof.ClientLinkObject clo,List<String> enumAttrName) throws VciBaseException{
    private void queryEnumTextClo(ClientLinkObject clo,List<String> enumAttrName) throws VciBaseException{
        queryEnumText(null,clo,enumAttrName);
    }
@@ -902,7 +902,7 @@
     * @throws VciBaseException æŸ¥è¯¢å‡ºé”™çš„æ—¶å€™ä¼šæŠ›å‡ºå¼‚常
     */
    @Override
    public List<com.vci.client.bof.ClientBusinessObject> queryCBOByScheme(String queryScheme,
    public List<ClientBusinessObject> queryCBOByScheme(String queryScheme,
            Map<String, String> conditionMap, Map<String, String> replaceMap)
            throws VciBaseException {
        PageHelper ph = new PageHelper(-1);
@@ -920,7 +920,7 @@
     * @throws VciBaseException æŸ¥è¯¢å‡ºé”™çš„æ—¶å€™ä¼šæŠ›å‡ºå¼‚常
     */
    @Override
    public List<com.vci.client.bof.ClientBusinessObject> queryCBOByScheme(String queryScheme,
    public List<ClientBusinessObject> queryCBOByScheme(String queryScheme,
            Map<String, String> conditionMap, Map<String, String> replaceMap,
            PageHelper ph) throws VciBaseException {
        List<String> clauseList = new ArrayList<String>();
@@ -940,8 +940,7 @@
        QueryTemplate qt = null;
        try{
            VciBaseUtil.alertNotNull(name,"查询模板的名称");
            // QTWrapper wrapper = platformClientUtil.getQueryService().getQT(name);
            QTInfo wrapper = ServiceProvider.getOMDService().getQTDService().getQT(name);
            QTInfo wrapper = platformClientUtil.getQTDService().getQT(name);
            qt = OQTool.getQTByDoc(DocumentHelper.parseText(wrapper.qtText), name);
            //因为之前平台的Tool.replaceQTValues æ²¡æœ‰å¤„理 ${xxx}。, ä¸ºäº†å¿½ç•¥å¤§å°å†™ï¼Œæˆ‘们这里单独处理 weidy@2021-3-10
            //我们转换为小写
@@ -1000,7 +999,7 @@
     * @throws VciBaseException æŸ¥è¯¢å‡ºé”™ä¼šæŠ›å‡ºå¼‚常
     */
    @Override
    public List<com.vci.client.bof.ClientBusinessObject> queryCBOByScheme(String queryScheme,
    public List<ClientBusinessObject> queryCBOByScheme(String queryScheme,
            Map<String, String> conditionMap, Map<String, String> replaceMap,
            PageHelper ph, List<String> clauseList) throws VciBaseException {
        QueryTemplate qt = getQtByName(queryScheme,replaceMap);
@@ -1132,11 +1131,11 @@
     * @throws VciBaseException æŸ¥è¯¢å‡ºé”™ä¼šæŠ›å‡ºå¼‚常
     */
    @Override
    public List<com.vci.client.bof.ClientBusinessObject> queryBySql(String sql,
    public List<ClientBusinessObject> queryBySql(String sql,
            Map<String, String> conditionMap) throws VciBaseException {
        List<Map> allData = queryBySqlForMap(sql,conditionMap);
        if(allData == null || allData.size() == 0){
            return new ArrayList<com.vci.client.bof.ClientBusinessObject>();
            return new ArrayList<ClientBusinessObject>();
        }else{
            return map2Cbos(allData);
        }
@@ -1149,10 +1148,10 @@
     * @throws VciBaseException æŸ¥è¯¢å‡ºé”™æ´»æŠ›å‡ºå¼‚常
     */
    @Override
    public List<com.vci.client.bof.ClientBusinessObject> queryByOnlySql(String sql) throws VciBaseException{
    public List<ClientBusinessObject> queryByOnlySql(String sql) throws VciBaseException{
        List<Map> allData = queryByOnlySqlForMap(sql);
        if(allData == null || allData.size() == 0){
            return new ArrayList<com.vci.client.bof.ClientBusinessObject>();
            return new ArrayList<ClientBusinessObject>();
        }else{
            return map2Cbos(allData);
        }
@@ -1171,12 +1170,11 @@
        }
        List<Map> dataList = new ArrayList<>();
        try {
//            KV[][] kvs = platformClientUtil.getQueryService().queryBySql(sql);
            com.vci.corba.query.data.KV[][] kvs = ServiceProvider.getOQService().queryBySql(sql);
            KV[][] kvs = platformClientUtil.getQueryService().queryBySql(sql);
            if(kvs!=null && kvs.length>0){
                for (int i = 0; i < kvs.length; i++) {
                    Map<String,String> data = new HashMap<>();
                    com.vci.corba.query.data.KV[] kv = kvs[i];
                    KV[] kv = kvs[i];
                    if(kv!=null && kv.length >0){
                        for (int j = 0; j < kv.length; j++) {
                            KV kv1 = kv[j];
@@ -1260,9 +1258,9 @@
            sql = sql.replaceAll(" FROM "," from ");
        }
        com.vci.corba.omd.data.AttributeValue[] ava = null;
        AttributeValue[] ava = null;
        if(conditionMap!=null&&!conditionMap.isEmpty()){
            ava = new com.vci.corba.omd.data.AttributeValue[conditionMap.size()];
            ava = new AttributeValue[conditionMap.size()];
            Iterator<String> it = conditionMap.keySet().iterator();
            int i = 0 ;
            while(it.hasNext()){
@@ -1271,16 +1269,15 @@
                if(value == null){
                    value = "";
                }
                com.vci.corba.omd.data.AttributeValue av = new com.vci.corba.omd.data.AttributeValue(key, value);
                AttributeValue av = new AttributeValue(key, value);
                ava[i] = av;
                i++;
            }
        }else{
            ava = new com.vci.corba.omd.data.AttributeValue[0];
            ava = new AttributeValue[0];
        }
        try {
//            String[][] results =platformClientUtil.getBOFactoryService().getSqlQueryResult(sql, ava);
            String[][] results =ServiceProvider.getBOFService().getSqlQueryResult(sql, ava);
            String[][] results =platformClientUtil.getSqlQueryService(sql, ava);
            if(results.length>0){
                if(selectKeys==null) {
                    String selectSql = sql.substring(sql.toLowerCase(Locale.ROOT).indexOf("select") + 6, sql.toLowerCase(Locale.ROOT).indexOf(" from")).trim();
@@ -1367,11 +1364,11 @@
            allFieldAttrMap.put(columnName.toLowerCase(),fieldName);
        }
        List<T> allObject = new ArrayList<T>();
        List<com.vci.client.bof.ClientBusinessObject> allCbos = queryCBO(WebUtil.getBtmTypeByObject(c), conditionMap, ph, allFieldAttrMap.keySet().stream().collect(Collectors.toList()));//执行查询
        List<ClientBusinessObject> allCbos = queryCBO(WebUtil.getBtmTypeByObject(c), conditionMap, ph, allFieldAttrMap.keySet().stream().collect(Collectors.toList()));//执行查询
        List<String> oids = new ArrayList<String>();
        
        if(allCbos!=null&&allCbos.size()>0){
            for(com.vci.client.bof.ClientBusinessObject cbo : allCbos){
            for(ClientBusinessObject cbo : allCbos){
                T obj  = null;
                try {
                    obj = c.newInstance();
@@ -1472,10 +1469,10 @@
            allFieldAttrMap.put(columnName.toLowerCase(),fieldName);
        }
        List<T> allObject = new ArrayList<T>();
        List<com.vci.client.bof.ClientBusinessObject> allCbos = queryCBOByScheme(queryScheme, conditionMap, replaceMap,ph, allFieldAttrMap.keySet().stream().collect(Collectors.toList()));
        List<ClientBusinessObject> allCbos = queryCBOByScheme(queryScheme, conditionMap, replaceMap,ph, allFieldAttrMap.keySet().stream().collect(Collectors.toList()));
        List<String> oids = new ArrayList<String>();
        if(allCbos!=null&&allCbos.size()>0){
            for(com.vci.client.bof.ClientBusinessObject cbo : allCbos){
            for(ClientBusinessObject cbo : allCbos){
                T obj  = null;
                try {
                    obj = c.newInstance();
@@ -1539,7 +1536,7 @@
     * @param isEdit æ˜¯å¦ä¸ºç¼–辑
     * @throws VciBaseException è®¾ç½®å‡ºé”™ä¼šæŠ›å‡ºå¼‚常
     */
    private void setValueToCbo(Object obj,String btmType,com.vci.client.bof.ClientBusinessObject cbo ,boolean isEdit) throws VciBaseException{
    private void setValueToCbo(Object obj,String btmType,ClientBusinessObject cbo ,boolean isEdit) throws VciBaseException{
        Field pkField = WebUtil.getPkFieldForObj(obj.getClass());
        if(pkField == null){
            throw new VciBaseException("{0}类中没有定义主键属性",new Object[]{obj.getClass()});
@@ -1684,9 +1681,9 @@
        if(list==null){
            throw new VciBaseException(VciBaseException.paramNull);
        }
        Set<com.vci.client.bof.ClientBusinessObject> allUpdateCbos = new HashSet<com.vci.client.bof.ClientBusinessObject>();
        Set<com.vci.client.bof.ClientBusinessObject> allDeleteCbos = new HashSet<com.vci.client.bof.ClientBusinessObject>();
        Set<com.vci.client.bof.ClientBusinessObject> allAddCbos = new HashSet<com.vci.client.bof.ClientBusinessObject>();
        Set<ClientBusinessObject> allUpdateCbos = new HashSet<ClientBusinessObject>();
        Set<ClientBusinessObject> allDeleteCbos = new HashSet<ClientBusinessObject>();
        Set<ClientBusinessObject> allAddCbos = new HashSet<ClientBusinessObject>();
        Map<String,String> btmOidsMap = new HashMap<String, String>();
        for(T obj : list){
            String btmType = WebUtil.getBtmTypeByObject(obj.getClass());
@@ -1707,7 +1704,7 @@
            }
            btmOidsMap.put(btmType, tempOids);
        }
        List<com.vci.client.bof.ClientBusinessObject> needUpdateCbos = new ArrayList<com.vci.client.bof.ClientBusinessObject>();
        List<ClientBusinessObject> needUpdateCbos = new ArrayList<ClientBusinessObject>();
        Iterator<String> it = btmOidsMap.keySet().iterator();
        while(it.hasNext()){
            String btmType = it.next();
@@ -1725,11 +1722,11 @@
            }
            //主键
            Object pkValue = WebUtil.getValueFromField(pkField.getName(), obj);
            com.vci.client.bof.ClientBusinessObject cbo = null;
            ClientBusinessObject cbo = null;
            if(pkValue == null || (pkValue instanceof String && WebUtil.isNull(pkValue.toString()))){
                continue;
            }else{
                for(com.vci.client.bof.ClientBusinessObject tempCbo : needUpdateCbos){
                for(ClientBusinessObject tempCbo : needUpdateCbos){
                    if(tempCbo.getOid().equalsIgnoreCase(pkValue.toString().trim())){
                        cbo = tempCbo;
                        break;
@@ -1738,7 +1735,7 @@
            }
            String btmType = WebUtil.getBtmTypeByObject(obj.getClass());
            //拷贝之前先清除已经有的值
            cbo.getBusinessObject().newAttrValList = new com.vci.corba.omd.data.AttributeValue[0];
            cbo.getBusinessObject().newAttrValList = new AttributeValue[0];
            setValueToCbo(obj,btmType,cbo,true);
            allUpdateCbos.add(cbo);
        }
@@ -2246,7 +2243,7 @@
     * @throws VciBaseException è½¬æ¢å‡ºé”™ä¼šæŠ›å‡ºå¼‚常
     */
    @Override
    public Map cbo2Map(com.vci.client.bof.ClientBusinessObject cbo) throws VciBaseException {
    public Map cbo2Map(ClientBusinessObject cbo) throws VciBaseException {
        Map<String,String> map = new HashMap<String, String>();
        WebUtil.copyValueToMapFromCbos(cbo, map);
        return map;
@@ -2260,9 +2257,9 @@
     * @throws VciBaseException è½¬æ¢å‡ºé”™ä¼šæŠ›å‡ºå¼‚常
     */
    @Override
    public List<com.vci.client.bof.ClientBusinessObject> map2Cbos(List<Map> mapList)
    public List<ClientBusinessObject> map2Cbos(List<Map> mapList)
            throws VciBaseException {
        List<com.vci.client.bof.ClientBusinessObject> cboList = new ArrayList<com.vci.client.bof.ClientBusinessObject>();
        List<ClientBusinessObject> cboList = new ArrayList<ClientBusinessObject>();
        for(Map map : mapList){
            cboList.add(map2Cbo(map));
        }
@@ -2277,8 +2274,8 @@
     * @throws VciBaseException è½¬æ¢å‡ºé”™ä¼šæŠ›å‡ºå¼‚常
     */
    @Override
    public com.vci.client.bof.ClientBusinessObject map2Cbo(Map map) throws VciBaseException {
        com.vci.client.bof.ClientBusinessObject cbo = new com.vci.client.bof.ClientBusinessObject();
    public ClientBusinessObject map2Cbo(Map map) throws VciBaseException {
        ClientBusinessObject cbo = new ClientBusinessObject();
        WebUtil.copyValueToCboFromMap(cbo, map);
        return cbo;
    }
@@ -2311,13 +2308,7 @@
            deleteReferAttrInCbo(batchCbos.getDeleteCbos());
        }
        try {
//            platformClientUtil.getBOFactoryService().batchCUDBOLO(new BusinessObjectListHolder(cboArray2Bo(batchCbos.getCreateCboArray())),
//                    new LinkObjectListHolder(cloArray2Lo(batchCbos.getCreateCloArray())),
//                    new BusinessObjectListHolder(cboArray2Bo(batchCbos.getUpdateCboArray())),
//                    new LinkObjectListHolder(cloArray2Lo(batchCbos.getUpdateCloArray())),
//                    cboArray2Bo(batchCbos.getDeleteCboArray()), cloArray2Lo(batchCbos.getDeleteCloArray()));
//            new BusinessObjectListHolder(cboArray2Bo(batchCbos.getCreateCboArray()))
            ServiceProvider.getBOFService().batchCUDBOLO(cboArray2Bo(batchCbos.getCreateCboArray()),
            platformClientUtil.getBOFactoryService().batchCUDBOLO(cboArray2Bo(batchCbos.getCreateCboArray()),
                    cloArray2Lo(batchCbos.getCreateCloArray()),
                    cboArray2Bo(batchCbos.getUpdateCboArray()),
                    cloArray2Lo(batchCbos.getUpdateCloArray()),
@@ -2332,11 +2323,11 @@
     * @param cbos å®¢æˆ·ç«¯å¯¹è±¡
     * @return ä¸šåŠ¡å¯¹è±¡
     */
    private com.vci.corba.omd.data.BusinessObject[] cboArray2Bo(ClientBusinessObject[] cbos){
    private BusinessObject[] cboArray2Bo(ClientBusinessObject[] cbos){
        if(cbos == null ||cbos.length == 0){
            return new com.vci.corba.omd.data.BusinessObject[0];
            return new BusinessObject[0];
        }
        com.vci.corba.omd.data.BusinessObject[] bos = new com.vci.corba.omd.data.BusinessObject[cbos.length];
        BusinessObject[] bos = new BusinessObject[cbos.length];
        for(int i = 0; i < cbos.length; i++){
            bos[i] = cbos[i].getBusinessObject();
        }
@@ -2348,11 +2339,11 @@
     * @param clos å®¢æˆ·ç«¯å¯¹è±¡
     * @return ä¸šåŠ¡å¯¹è±¡
     */
    private com.vci.corba.omd.data.LinkObject[] cloArray2Lo(com.vci.client.bof.ClientLinkObject[] clos){
    private LinkObject[] cloArray2Lo(ClientLinkObject[] clos){
        if(clos == null ||clos.length == 0){
            return new com.vci.corba.omd.data.LinkObject[0];
            return new LinkObject[0];
        }
        com.vci.corba.omd.data.LinkObject[] bos = new com.vci.corba.omd.data.LinkObject[clos.length];
        LinkObject[] bos = new LinkObject[clos.length];
        for(int i = 0; i < clos.length; i++){
            bos[i] = clos[i].getLinkObject();
        }
@@ -2366,11 +2357,11 @@
    private void deleteReferAttrInCbo(Set<ClientBusinessObject> cbos){
        if(cbos !=null){
            for(ClientBusinessObject cbo : cbos){
                com.vci.corba.omd.data.BusinessObject bo = cbo.getBusinessObject();
                List<com.vci.corba.omd.data.AttributeValue> newAttr = new ArrayList<com.vci.corba.omd.data.AttributeValue>();
                BusinessObject bo = cbo.getBusinessObject();
                List<AttributeValue> newAttr = new ArrayList<AttributeValue>();
                if (bo.newAttrValList != null) {
                    for (int i = 0; i < bo.newAttrValList.length; ++i) {
                        com.vci.corba.omd.data.AttributeValue av = bo.newAttrValList[i];
                        AttributeValue av = bo.newAttrValList[i];
                        if (WebUtil.isNormalAttr(av.attrName)) {
                            if(av.attrVal == null){
                                av.attrVal = "";
@@ -2379,7 +2370,7 @@
                        }
                    }
                }
                bo.newAttrValList = newAttr.toArray(new com.vci.corba.omd.data.AttributeValue[0]);
                bo.newAttrValList = newAttr.toArray(new AttributeValue[0]);
                cbo.setBusinessObject(bo);
            }
        }
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/WebHomeTaskServiceImpl.java
@@ -50,7 +50,6 @@
     * @return ä»»åŠ¡æ±‡æ€»çš„æ•°é‡
     */
    @Override
    @Cacheable(value = VCI_USER,key = "'userHomeTask'.concat(#root.target.getCurrentUserOid())", unless = "#result == null")
    public List<WebHomeTaskActionVO> listMyHomeTask()  {
        List<WebHomeTaskActionVO> actionVOS = new ArrayList<>();
        List<WebHomeTaskActionDO> allActions = boService.queryObject(WebHomeTaskActionDO.class,null);
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/util/BusAnnotationUtil.java
@@ -1,7 +1,5 @@
package com.vci.web.util;
import com.vci.starter.web.annotation.bus.VciLoginBefore;
import com.vci.starter.web.annotation.bus.VciLoginPlugin;
import com.vci.starter.web.exception.VciBaseException;
import com.vci.starter.web.util.ApplicationContextProvider;
import org.slf4j.Logger;
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/util/PlatformClientUtil.java
@@ -4,11 +4,14 @@
import com.vci.corba.bofactory.BOFactoryServicePrx;
import com.vci.corba.common.PLException;
import com.vci.corba.framework.FrameworkServicePrx;
import com.vci.corba.log.LogServicePrx;
import com.vci.corba.omd.atm.AttPoolServicePrx;
import com.vci.corba.omd.btm.BTMServicePrx;
import com.vci.corba.omd.data.AttributeValue;
import com.vci.corba.omd.etm.EnumServicePrx;
import com.vci.corba.omd.lcm.LifeCycleServicePrx;
import com.vci.corba.omd.ltm.LinkTypeServicePrx;
import com.vci.corba.omd.qtm.QTDServicePrx;
import com.vci.corba.omd.stm.StatePoolServicePrx;
import com.vci.corba.omd.vrm.VersionRuleServicePrx;
import com.vci.corba.portal.PortalServicePrx;
@@ -125,7 +128,6 @@
     */
    public EnumServicePrx getEnumService() throws PLException {
        return ServiceProvider.getOMDService().getEnumService();
//        return EnumServiceHelper.narrow(jacorbClientConnector.getCorbaServiceObjectByServiceName(ENUM_SERVICE_NAME));
    }
    /**
@@ -134,7 +136,6 @@
     */
    public VersionRuleServicePrx getVersionService() throws PLException {
        return ServiceProvider.getOMDService().getVerRuleService();
//        return VersionRuleServiceHelper.narrow(jacorbClientConnector.getCorbaServiceObjectByServiceName(VERSION_SERVICE_NAME));
    }
    /**
@@ -143,7 +144,6 @@
     */
    public AttPoolServicePrx getAttributeService() throws PLException {
        return ServiceProvider.getOMDService().getAttributeService();
//        return AttPoolServiceHelper.narrow(jacorbClientConnector.getCorbaServiceObjectByServiceName(ATTRIBUTE_SERVICE_NAME));
    }
    /**
@@ -152,7 +152,6 @@
     */
    public BTMServicePrx getBtmService() throws PLException {
        return ServiceProvider.getOMDService().getBTMService();
//        return BTMServiceHelper.narrow(jacorbClientConnector.getCorbaServiceObjectByServiceName(BTM_SERVICE_NAME));
    }
    /**
@@ -161,7 +160,6 @@
     */
    public LinkTypeServicePrx getLinkTypeService() throws PLException {
        return ServiceProvider.getOMDService().getLinkTypeService();
//        return LinkTypeServiceHelper.narrow(jacorbClientConnector.getCorbaServiceObjectByServiceName(LINK_SERVICE_NAME));
    }
    /**
@@ -170,7 +168,6 @@
     */
    public PortalServicePrx getPortalService(){
        return ServiceProvider.getUIService();
//        return PortalServiceHelper.narrow(jacorbClientConnector.getCorbaServiceObjectByServiceName(PORTAL_SERVICE_NAME));
    }
    /**
@@ -179,7 +176,6 @@
     */
    public ObjectQueryServicePrx getQueryService(){
        return ServiceProvider.getOQService();
//        return QTServiceHelper.narrow(jacorbClientConnector.getCorbaServiceObjectByServiceName(QUERY_SERVICE_NAME));
    }
    /**
@@ -189,7 +185,31 @@
     */
    public VolumeServicePrx getVolumeService(String volumeName){
        return ServiceProvider.getVolumeService(volumeName);
//        return VolumnFactoryHelper.narrow(jacorbClientConnector.getCorbaServiceObjectByUrlAndServiceName(serverUrl,volumeName));
    }
    /**
     * æŸ¥è¯¢æ¨¡æ¿æœåŠ¡
     * @return å·æœåŠ¡çš„çš„å¯¹è±¡
     */
    public QTDServicePrx getQTDService() throws PLException {
        return ServiceProvider.getOMDService().getQTDService();
    }
    /**
     * æŸ¥è¯¢æ¨¡æ¿æœåŠ¡
     * @param sql sql语句
     * @param attrVals å ä½ç¬¦çš„值
     * @return å·æœåŠ¡çš„çš„å¯¹è±¡
     */
    public String[][] getSqlQueryService(String sql, AttributeValue[] attrVals) throws PLException {
        return ServiceProvider.getBOFService().getSqlQueryResult(sql, attrVals);
    }
    /**
     * èŽ·å–ç™»å½•æ—¥å¿—æœåŠ¡
     * @Return com.vci.corba.log.LogServicePrx
     */
    public LogServicePrx getLogService(){
        return ServiceProvider.getLogService();
    }
}
Source/plt-web/plt-web-parent/plt-web/src/main/resources/application-dev.yml
@@ -38,11 +38,11 @@
spring:
  # redis配置
  redis:  ###### redis é…ç½®
    enabled: false  #true,启用redi,false不启用,默认false,配置文件没有这些默认不启用redis
    host: vciserver  # ip地址
    database: 0  # redis数据库  0-15
    enabled: true  #true,启用redi,false不启用,默认false,配置文件没有这些默认不启用redis
    host: localhost  # ip地址
    database: 2  # redis数据库  0-15
    port: 6379  # ç«¯å£å·
    password: vcitest # æ— å¯†ç ä¸å¡«
    password: 123456 # æ— å¯†ç ä¸å¡«
    timeout: 30000s   # è¿žæŽ¥è¶…æ—¶æ—¶é—´ ï¼ˆé»˜è®¤1天)
    lettuce:
      shutdown-timeout: 100ms # å…³é—­è¶…æ—¶æ—¶é—´ é»˜è®¤ 100ms
Source/plt-web/plt-web-parent/plt-web/src/main/resources/i18n/messages.properties
@@ -71,6 +71,11 @@
lessMinLength=\u5BC6\u7801\u4E0D\u6EE1\u8DB3\u6700\u4F4E\u957F\u5EA6\u8981\u6C42\uFF0C\u9700\u8981{0}\u957F\u5EA6
moreMaxLength=\u5BC6\u7801\u4E0D\u6EE1\u8DB3\u6700\u5927\u957F\u5EA6\u8981\u6C42\uFF0C\u4EC5\u80FD\u8F93\u5165{0}\u957F\u5EA6
passwordRemainDay=\u5BC6\u7801\u5373\u5C06\u8FC7\u671F\uFF0C\u8BF7\u5C3D\u5FEB\u4FEE\u6539
systemError=\u7CFB\u7EDF\u5F02\u5E38
loginSuccess=\u767B\u5F55\u6210\u529F
passwordInit=\u8D26\u53F7\u5BC6\u7801\u4E3A\u521D\u59CB\u5BC6\u7801\uFF0C\u9700\u8981\u4FEE\u6539\u540E\u624D\u80FD\u767B\u5F55
passwordExpire=\u5BC6\u7801\u5DF2\u8FC7\u671F
passwordPolicyUpdated=\u5BC6\u7801\u7B56\u7565\u5DF2\u7ECF\u4FEE\u6539\uFF0C\u9700\u4FEE\u6539\u8D26\u53F7\u5BC6\u7801
#########\u7CFB\u7EDF\u8D44\u6E90\u76F8\u5173######
com.vci.web.menu.noHasFunction= {0}\u6CA1\u6709\u4EFB\u4F55\u7684\u6743\u9650
Source/plt-web/plt-web-parent/plt-web/src/main/resources/i18n/messages_zh_CN.properties
@@ -71,6 +71,11 @@
lessMinLength=\u5BC6\u7801\u4E0D\u6EE1\u8DB3\u6700\u4F4E\u957F\u5EA6\u8981\u6C42\uFF0C\u9700\u8981{0}\u957F\u5EA6
moreMaxLength=\u5BC6\u7801\u4E0D\u6EE1\u8DB3\u6700\u5927\u957F\u5EA6\u8981\u6C42\uFF0C\u4EC5\u80FD\u8F93\u5165{0}\u957F\u5EA6
passwordRemainDay=\u5BC6\u7801\u5373\u5C06\u8FC7\u671F\uFF0C\u8BF7\u5C3D\u5FEB\u4FEE\u6539
systemError=\u7CFB\u7EDF\u5F02\u5E38
loginSuccess=\u767B\u5F55\u6210\u529F
passwordInit=\u8D26\u53F7\u5BC6\u7801\u4E3A\u521D\u59CB\u5BC6\u7801\uFF0C\u9700\u8981\u4FEE\u6539\u540E\u624D\u80FD\u767B\u5F55
passwordExpire=\u5BC6\u7801\u5DF2\u8FC7\u671F
passwordPolicyUpdated=\u5BC6\u7801\u7B56\u7565\u5DF2\u7ECF\u4FEE\u6539\uFF0C\u9700\u4FEE\u6539\u8D26\u53F7\u5BC6\u7801
#########\u7CFB\u7EDF\u8D44\u6E90\u76F8\u5173######
com.vci.web.menu.noHasFunction= {0}\u6CA1\u6709\u4EFB\u4F55\u7684\u6743\u9650