¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.modules.system.service.impl; |
| | | |
| | | import cn.hutool.core.lang.Validator; |
| | | import cn.hutool.core.util.ArrayUtil; |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.jeecg.common.constant.CacheConstant; |
| | | import org.jeecg.common.constant.CommonConstant; |
| | | import org.jeecg.common.constant.DataBaseConstant; |
| | | import org.jeecg.common.constant.SymbolConstant; |
| | | import org.jeecg.common.system.query.QueryGenerator; |
| | | import org.jeecg.common.system.util.ResourceUtil; |
| | | import org.jeecg.common.system.vo.DictModel; |
| | | import org.jeecg.common.system.vo.DictModelMany; |
| | | import org.jeecg.common.system.vo.DictQuery; |
| | | import org.jeecg.common.util.SqlInjectionUtil; |
| | | import org.jeecg.common.util.oConvertUtils; |
| | | import org.jeecg.modules.system.entity.SysDict; |
| | | import org.jeecg.modules.system.entity.SysDictItem; |
| | | import org.jeecg.modules.system.mapper.SysDictItemMapper; |
| | | import org.jeecg.modules.system.mapper.SysDictMapper; |
| | | import org.jeecg.modules.system.model.TreeSelectModel; |
| | | import org.jeecg.modules.system.service.ISysDictService; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.cache.annotation.Cacheable; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * <p> |
| | | * åå
¸è¡¨ æå¡å®ç°ç±» |
| | | * </p> |
| | | * |
| | | * @Author zhangweijian |
| | | * @since 2018-12-28 |
| | | */ |
| | | @Service |
| | | @Slf4j |
| | | public class SysDictServiceImpl extends ServiceImpl<SysDictMapper, SysDict> implements ISysDictService { |
| | | |
| | | @Autowired |
| | | private SysDictMapper sysDictMapper; |
| | | @Autowired |
| | | private SysDictItemMapper sysDictItemMapper; |
| | | |
| | | /** |
| | | * éè¿æ¥è¯¢æå®code è·ååå
¸ |
| | | * @param code |
| | | * @return |
| | | */ |
| | | @Override |
| | | @Cacheable(value = CacheConstant.SYS_DICT_CACHE,key = "#code", unless = "#result == null ") |
| | | public List<DictModel> queryDictItemsByCode(String code) { |
| | | log.debug("æ ç¼ådictCacheçæ¶åè°ç¨è¿éï¼"); |
| | | return sysDictMapper.queryDictItemsByCode(code); |
| | | } |
| | | |
| | | @Override |
| | | @Cacheable(value = CacheConstant.SYS_ENABLE_DICT_CACHE,key = "#code", unless = "#result == null ") |
| | | public List<DictModel> queryEnableDictItemsByCode(String code) { |
| | | log.debug("æ ç¼ådictCacheçæ¶åè°ç¨è¿éï¼"); |
| | | return sysDictMapper.queryEnableDictItemsByCode(code); |
| | | } |
| | | |
| | | @Override |
| | | public Map<String, List<DictModel>> queryDictItemsByCodeList(List<String> dictCodeList) { |
| | | List<DictModelMany> list = sysDictMapper.queryDictItemsByCodeList(dictCodeList); |
| | | Map<String, List<DictModel>> dictMap = new HashMap(5); |
| | | for (DictModelMany dict : list) { |
| | | List<DictModel> dictItemList = dictMap.computeIfAbsent(dict.getDictCode(), i -> new ArrayList<>()); |
| | | dict.setDictCode(null); |
| | | dictItemList.add(new DictModel(dict.getValue(), dict.getText())); |
| | | } |
| | | return dictMap; |
| | | } |
| | | |
| | | @Override |
| | | public Map<String, List<DictModel>> queryAllDictItems() { |
| | | Map<String, List<DictModel>> res = new HashMap(5); |
| | | List<SysDict> ls = sysDictMapper.selectList(null); |
| | | LambdaQueryWrapper<SysDictItem> queryWrapper = new LambdaQueryWrapper<SysDictItem>(); |
| | | queryWrapper.eq(SysDictItem::getStatus, 1); |
| | | queryWrapper.orderByAsc(SysDictItem::getSortOrder); |
| | | List<SysDictItem> sysDictItemList = sysDictItemMapper.selectList(queryWrapper); |
| | | |
| | | for (SysDict d : ls) { |
| | | List<DictModel> dictModelList = sysDictItemList.stream().filter(s -> d.getId().equals(s.getDictId())).map(item -> { |
| | | DictModel dictModel = new DictModel(); |
| | | dictModel.setText(item.getItemText()); |
| | | dictModel.setValue(item.getItemValue()); |
| | | return dictModel; |
| | | }).collect(Collectors.toList()); |
| | | res.put(d.getDictCode(), dictModelList); |
| | | } |
| | | //update-begin-author:taoyan date:2022-7-8 for: ç³»ç»åå
¸æ°æ®åºè¯¥å
æ¬èªå®ä¹çjavaç±»-æä¸¾ |
| | | Map<String, List<DictModel>> enumRes = ResourceUtil.getEnumDictData(); |
| | | res.putAll(enumRes); |
| | | //update-end-author:taoyan date:2022-7-8 for: ç³»ç»åå
¸æ°æ®åºè¯¥å
æ¬èªå®ä¹çjavaç±»-æä¸¾ |
| | | log.debug("-------ç»å½å 载系ç»åå
¸-----" + res.toString()); |
| | | return res; |
| | | } |
| | | |
| | | /** |
| | | * éè¿æ¥è¯¢æå®code è·ååå
¸å¼text |
| | | * @param code |
| | | * @param key |
| | | * @return |
| | | */ |
| | | |
| | | @Override |
| | | @Cacheable(value = CacheConstant.SYS_DICT_CACHE,key = "#code+':'+#key", unless = "#result == null ") |
| | | public String queryDictTextByKey(String code, String key) { |
| | | log.debug("æ ç¼ådictTextçæ¶åè°ç¨è¿éï¼"); |
| | | return sysDictMapper.queryDictTextByKey(code, key); |
| | | } |
| | | |
| | | @Override |
| | | public Map<String, List<DictModel>> queryManyDictByKeys(List<String> dictCodeList, List<String> keys) { |
| | | List<DictModelMany> list = sysDictMapper.queryManyDictByKeys(dictCodeList, keys); |
| | | Map<String, List<DictModel>> dictMap = new HashMap(5); |
| | | for (DictModelMany dict : list) { |
| | | List<DictModel> dictItemList = dictMap.computeIfAbsent(dict.getDictCode(), i -> new ArrayList<>()); |
| | | dictItemList.add(new DictModel(dict.getValue(), dict.getText())); |
| | | } |
| | | //update-begin-author:taoyan date:2022-7-8 for: ç³»ç»åå
¸æ°æ®åºè¯¥å
æ¬èªå®ä¹çjavaç±»-æä¸¾ |
| | | Map<String, List<DictModel>> enumRes = ResourceUtil.queryManyDictByKeys(dictCodeList, keys); |
| | | dictMap.putAll(enumRes); |
| | | //update-end-author:taoyan date:2022-7-8 for: ç³»ç»åå
¸æ°æ®åºè¯¥å
æ¬èªå®ä¹çjavaç±»-æä¸¾ |
| | | return dictMap; |
| | | } |
| | | |
| | | /** |
| | | * éè¿æ¥è¯¢æå®tableç text code è·ååå
¸ |
| | | * dictTableCacheéç¨redisç¼åæææ10åé |
| | | * @param table |
| | | * @param text |
| | | * @param code |
| | | * @return |
| | | */ |
| | | @Override |
| | | //@Cacheable(value = CacheConstant.SYS_DICT_TABLE_CACHE) |
| | | public List<DictModel> queryTableDictItemsByCode(String table, String text, String code) { |
| | | log.debug("æ ç¼ådictTableListçæ¶åè°ç¨è¿éï¼"); |
| | | return sysDictMapper.queryTableDictItemsByCode(table,text,code); |
| | | } |
| | | |
| | | @Override |
| | | public List<DictModel> queryTableDictItemsByCodeAndFilter(String table, String text, String code, String filterSql) { |
| | | log.debug("æ ç¼ådictTableListçæ¶åè°ç¨è¿éï¼"); |
| | | return sysDictMapper.queryTableDictItemsByCodeAndFilter(table,text,code,filterSql); |
| | | } |
| | | |
| | | /** |
| | | * éè¿æ¥è¯¢æå®tableç text code è·ååå
¸å¼text |
| | | * dictTableCacheéç¨redisç¼åæææ10åé |
| | | * @param table |
| | | * @param text |
| | | * @param code |
| | | * @param key |
| | | * @return |
| | | */ |
| | | @Override |
| | | @Cacheable(value = CacheConstant.SYS_DICT_TABLE_CACHE, unless = "#result == null ") |
| | | public String queryTableDictTextByKey(String table,String text,String code, String key) { |
| | | log.debug("æ ç¼ådictTableçæ¶åè°ç¨è¿éï¼"); |
| | | return sysDictMapper.queryTableDictTextByKey(table,text,code,key); |
| | | } |
| | | |
| | | @Override |
| | | public List<DictModel> queryTableDictTextByKeys(String table, String text, String code, List<String> keys) { |
| | | //update-begin-author:taoyan date:20220113 for: @dictæ³¨è§£æ¯æ dicttable 设置whereæ¡ä»¶ |
| | | String filterSql = null; |
| | | if(table.toLowerCase().indexOf(DataBaseConstant.SQL_WHERE)>0){ |
| | | String[] arr = table.split(" (?i)where "); |
| | | table = arr[0]; |
| | | filterSql = arr[1]; |
| | | } |
| | | String[] tableAndFields = new String[]{table, text, code}; |
| | | SqlInjectionUtil.filterContent(tableAndFields); |
| | | SqlInjectionUtil.specialFilterContentForDictSql(filterSql); |
| | | return sysDictMapper.queryTableDictByKeysAndFilterSql(table, text, code, filterSql, keys); |
| | | //update-end-author:taoyan date:20220113 for: @dictæ³¨è§£æ¯æ dicttable 设置whereæ¡ä»¶ |
| | | } |
| | | |
| | | @Override |
| | | public List<String> queryTableDictByKeys(String table, String text, String code, String keys) { |
| | | return this.queryTableDictByKeys(table, text, code, keys, true); |
| | | } |
| | | |
| | | /** |
| | | * éè¿æ¥è¯¢æå®tableç text code è·ååå
¸ï¼å
å«textåvalue |
| | | * dictTableCacheéç¨redisç¼åæææ10åé |
| | | * @param table |
| | | * @param text |
| | | * @param code |
| | | * @param keys (éå·åé) |
| | | * @param delNotExist æ¯å¦ç§»é¤ä¸åå¨ç项ï¼é»è®¤ä¸ºtrueï¼è®¾ä¸ºfalse妿æä¸ªkeyä¸å卿°æ®åºä¸ï¼åç´æ¥è¿åkeyæ¬èº« |
| | | * @return |
| | | */ |
| | | @Override |
| | | //update-begin--Author:lvdandan Date:20201204 forï¼JT-36ãonlineãæ å½¢å表bugä¿®æ¹åï¼è¿æ¯æ¾ç¤ºåæ¥å¼ ææ¶å»æç¼å |
| | | //@Cacheable(value = CacheConstant.SYS_DICT_TABLE_BY_KEYS_CACHE) |
| | | //update-end--Author:lvdandan Date:20201204 forï¼JT-36ãonlineãæ å½¢å表bugä¿®æ¹åï¼è¿æ¯æ¾ç¤ºåæ¥å¼ ææ¶å»æç¼å |
| | | public List<String> queryTableDictByKeys(String table, String text, String code, String keys, boolean delNotExist) { |
| | | if(oConvertUtils.isEmpty(keys)){ |
| | | return null; |
| | | } |
| | | String[] keyArray = keys.split(","); |
| | | |
| | | //update-begin-author:taoyan date:2022-4-24 for: 䏿æç´¢ç»ä»¶ï¼è¡¨åç¼è¾é¡µé¢åæ¾ä¸ææç´¢çææ¬çæ¶åï¼å 为表ååé
ç½®äºæ¡ä»¶ï¼å¯¼è´sqlæ§è¡å¤±è´¥ï¼ |
| | | String filterSql = null; |
| | | if(table.toLowerCase().indexOf("where")!=-1){ |
| | | String[] arr = table.split(" (?i)where "); |
| | | table = arr[0]; |
| | | filterSql = arr[1]; |
| | | } |
| | | String[] tableAndFields = new String[]{table, text, code}; |
| | | SqlInjectionUtil.filterContent(tableAndFields); |
| | | SqlInjectionUtil.specialFilterContentForDictSql(filterSql); |
| | | List<DictModel> dicts = sysDictMapper.queryTableDictByKeysAndFilterSql(table, text, code, filterSql, Arrays.asList(keyArray)); |
| | | //update-end-author:taoyan date:2022-4-24 for: 䏿æç´¢ç»ä»¶ï¼è¡¨åç¼è¾é¡µé¢åæ¾ä¸ææç´¢çææ¬çæ¶åï¼å 为表ååé
ç½®äºæ¡ä»¶ï¼å¯¼è´sqlæ§è¡å¤±è´¥ï¼ |
| | | List<String> texts = new ArrayList<>(dicts.size()); |
| | | |
| | | // update-begin--author:sunjianlei--date:20210514--forï¼æ°å¢delNotExiståæ°ï¼è®¾ä¸ºfalseä¸å 餿°æ®åºéä¸åå¨çkey ---- |
| | | // æ¥è¯¢åºæ¥ç顺åºå¯è½æ¯ä¹±çï¼éè¦æä¸ªåº |
| | | for (String key : keyArray) { |
| | | List<DictModel> res = dicts.stream().filter(i -> key.equals(i.getValue())).collect(Collectors.toList()); |
| | | if (res.size() > 0) { |
| | | texts.add(res.get(0).getText()); |
| | | } else if (!delNotExist) { |
| | | texts.add(key); |
| | | } |
| | | } |
| | | // update-end--author:sunjianlei--date:20210514--forï¼æ°å¢delNotExiståæ°ï¼è®¾ä¸ºfalseä¸å 餿°æ®åºéä¸åå¨çkey ---- |
| | | |
| | | return texts; |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ®åå
¸ç±»åidå é¤å
³è表ä¸å
¶å¯¹åºçæ°æ® |
| | | */ |
| | | @Override |
| | | public boolean deleteByDictId(SysDict sysDict) { |
| | | sysDict.setDelFlag(CommonConstant.DEL_FLAG_1); |
| | | return this.updateById(sysDict); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public Integer saveMain(SysDict sysDict, List<SysDictItem> sysDictItemList) { |
| | | int insert=0; |
| | | try{ |
| | | insert = sysDictMapper.insert(sysDict); |
| | | if (sysDictItemList != null) { |
| | | for (SysDictItem entity : sysDictItemList) { |
| | | //update-begin---author:wangshuai ---date:20220211 forï¼[JTC-1168]妿åå
¸é¡¹å¼ä¸ºç©ºï¼ååå
¸é¡¹å¿½ç¥å¯¼å
¥------------ |
| | | if(oConvertUtils.isEmpty(entity.getItemValue())){ |
| | | return -1; |
| | | } |
| | | //update-end---author:wangshuai ---date:20220211 forï¼[JTC-1168]妿åå
¸é¡¹å¼ä¸ºç©ºï¼ååå
¸é¡¹å¿½ç¥å¯¼å
¥------------ |
| | | entity.setDictId(sysDict.getId()); |
| | | entity.setStatus(1); |
| | | sysDictItemMapper.insert(entity); |
| | | } |
| | | } |
| | | }catch(Exception e){ |
| | | return insert; |
| | | } |
| | | return insert; |
| | | } |
| | | |
| | | @Override |
| | | public List<DictModel> queryAllDepartBackDictModel() { |
| | | return baseMapper.queryAllDepartBackDictModel(); |
| | | } |
| | | |
| | | @Override |
| | | public List<DictModel> queryAllUserBackDictModel() { |
| | | return baseMapper.queryAllUserBackDictModel(); |
| | | } |
| | | |
| | | // @Override |
| | | // public List<DictModel> queryTableDictItems(String table, String text, String code, String keyword) { |
| | | // return baseMapper.queryTableDictItems(table, text, code, "%"+keyword+"%"); |
| | | // } |
| | | |
| | | @Override |
| | | public List<DictModel> queryLittleTableDictItems(String table, String text, String code, String condition, String keyword, int pageSize) { |
| | | Page<DictModel> page = new Page<DictModel>(1, pageSize); |
| | | page.setSearchCount(false); |
| | | |
| | | //ãissues/3713ãåå
¸æ¥å£åå¨SQL注å
¥é£é© |
| | | SqlInjectionUtil.specialFilterContentForDictSql(code); |
| | | |
| | | String filterSql = getFilterSql(table, text, code, condition, keyword); |
| | | IPage<DictModel> pageList = baseMapper.queryTableDictWithFilter(page, table, text, code, filterSql); |
| | | return pageList.getRecords(); |
| | | } |
| | | |
| | | /** |
| | | * è·åæ¡ä»¶è¯å¥ |
| | | * @param text |
| | | * @param code |
| | | * @param condition |
| | | * @param keyword |
| | | * @return |
| | | */ |
| | | private String getFilterSql(String table, String text, String code, String condition, String keyword){ |
| | | String keywordSql = null, filterSql = "", sqlWhere = " where "; |
| | | // update-begin-author:sunjianlei date:20220112 for: ãJTC-631ã夿妿 table æºå¸¦äº where æ¡ä»¶ï¼é£ä¹å°±ä½¿ç¨ and æ¥è¯¢ï¼é²æ¢æ¥é |
| | | if (table.toLowerCase().contains(sqlWhere)) { |
| | | sqlWhere = " and "; |
| | | } |
| | | // update-end-author:sunjianlei date:20220112 for: ãJTC-631ã夿妿 table æºå¸¦äº where æ¡ä»¶ï¼é£ä¹å°±ä½¿ç¨ and æ¥è¯¢ï¼é²æ¢æ¥é |
| | | |
| | | //update-begin-author:taoyan date:2022-8-15 for: 䏿æç´¢ç»ä»¶ æ¯æä¼ å
¥æåºä¿¡æ¯ æ¥è¯¢æåº |
| | | String orderField = "", orderType = ""; |
| | | if (oConvertUtils.isNotEmpty(keyword)) { |
| | | // å
³é®åéé¢å¦æåå
¥äº æåºä¿¡æ¯ xxxxx[orderby:create_time,desc] |
| | | String orderKey = "[orderby"; |
| | | if (keyword.indexOf(orderKey) >= 0 && keyword.endsWith("]")) { |
| | | String orderInfo = keyword.substring(keyword.indexOf(orderKey) + orderKey.length() + 1, keyword.length() - 1); |
| | | keyword = keyword.substring(0, keyword.indexOf(orderKey)); |
| | | String[] orderInfoArray = orderInfo.split(SymbolConstant.COMMA); |
| | | orderField = orderInfoArray[0]; |
| | | orderType = orderInfoArray[1]; |
| | | } |
| | | |
| | | if (oConvertUtils.isNotEmpty(keyword)) { |
| | | // 夿æ¯å¦æ¯å¤é |
| | | if (keyword.contains(SymbolConstant.COMMA)) { |
| | | //update-begin--author:scott--date:20220105--forï¼JTC-529ã表å设计å¨ã ç¼è¾é¡µé¢æ¥éï¼inåæ°éç¨åå¼å·å¯¼è´ ---- |
| | | String inKeywords = "'" + String.join("','", keyword.split(",")) + "'"; |
| | | //update-end--author:scott--date:20220105--forï¼JTC-529ã表å设计å¨ã ç¼è¾é¡µé¢æ¥éï¼inåæ°éç¨åå¼å·å¯¼è´---- |
| | | keywordSql = "(" + text + " in (" + inKeywords + ") or " + code + " in (" + inKeywords + "))"; |
| | | } else { |
| | | keywordSql = "("+text + " like '%"+keyword+"%' or "+ code + " like '%"+keyword+"%')"; |
| | | } |
| | | } |
| | | } |
| | | //update-end-author:taoyan date:2022-8-15 for: 䏿æç´¢ç»ä»¶ æ¯æä¼ å
¥æåºä¿¡æ¯ æ¥è¯¢æåº |
| | | if(oConvertUtils.isNotEmpty(condition) && oConvertUtils.isNotEmpty(keywordSql)){ |
| | | filterSql+= sqlWhere + condition + " and " + keywordSql; |
| | | }else if(oConvertUtils.isNotEmpty(condition)){ |
| | | filterSql+= sqlWhere + condition; |
| | | }else if(oConvertUtils.isNotEmpty(keywordSql)){ |
| | | filterSql+= sqlWhere + keywordSql; |
| | | } |
| | | //update-begin-author:taoyan date:2022-8-15 for: 䏿æç´¢ç»ä»¶ æ¯æä¼ å
¥æåºä¿¡æ¯ æ¥è¯¢æåº |
| | | // å¢å æåºé»è¾ |
| | | if (oConvertUtils.isNotEmpty(orderField)) { |
| | | filterSql += " order by " + orderField + " " + orderType; |
| | | } |
| | | //update-end-author:taoyan date:2022-8-15 for: 䏿æç´¢ç»ä»¶ æ¯æä¼ å
¥æåºä¿¡æ¯ æ¥è¯¢æåº |
| | | return filterSql; |
| | | } |
| | | @Override |
| | | public List<DictModel> queryAllTableDictItems(String table, String text, String code, String condition, String keyword) { |
| | | String filterSql = getFilterSql(table, text, code, condition, keyword); |
| | | List<DictModel> ls = baseMapper.queryAllTableDictItems(table, text, code, filterSql); |
| | | return ls; |
| | | } |
| | | |
| | | @Override |
| | | public List<TreeSelectModel> queryTreeList(Map<String, String> query,String table, String text, String code, String pidField,String pid,String hasChildField,int converIsLeafVal) { |
| | | return baseMapper.queryTreeList(query, table, text, code, pidField, pid, hasChildField,converIsLeafVal); |
| | | } |
| | | |
| | | @Override |
| | | public void deleteOneDictPhysically(String id) { |
| | | this.baseMapper.deleteOneById(id); |
| | | this.sysDictItemMapper.delete(new LambdaQueryWrapper<SysDictItem>().eq(SysDictItem::getDictId,id)); |
| | | } |
| | | |
| | | @Override |
| | | public void updateDictDelFlag(int delFlag, String id) { |
| | | baseMapper.updateDictDelFlag(delFlag,id); |
| | | } |
| | | |
| | | @Override |
| | | public List<SysDict> queryDeleteList() { |
| | | return baseMapper.queryDeleteList(); |
| | | } |
| | | |
| | | @Override |
| | | public List<DictModel> queryDictTablePageList(DictQuery query, int pageSize, int pageNo) { |
| | | Page page = new Page(pageNo,pageSize,false); |
| | | Page<DictModel> pageList = baseMapper.queryDictTablePageList(page, query); |
| | | return pageList.getRecords(); |
| | | } |
| | | |
| | | @Override |
| | | public List<DictModel> getDictItems(String dictCode) { |
| | | List<DictModel> ls; |
| | | if (dictCode.contains(SymbolConstant.COMMA)) { |
| | | //å
³è表åå
¸ï¼ä¸¾ä¾ï¼sys_user,realname,idï¼ |
| | | String[] params = dictCode.split(","); |
| | | if (params.length < 3) { |
| | | // åå
¸Codeæ ¼å¼ä¸æ£ç¡® |
| | | return null; |
| | | } |
| | | //SQL注å
¥æ ¡éªï¼åªéå¶éæ³ä¸²æ¹æ°æ®åºï¼ |
| | | //update-begin-author:taoyan date:2022-7-4 for: issues/I5BNY9 æå®å¸¦è¿æ»¤æ¡ä»¶çåå
¸tableå¨çæä»£ç å失æ |
| | | // 表åå乿å¯è½å¸¦æ¡ä»¶andè¯å¥ ä¸è½èµ°filterContentæ¹æ³ |
| | | SqlInjectionUtil.specialFilterContentForDictSql(params[0]); |
| | | final String[] sqlInjCheck = {params[1], params[2]}; |
| | | //update-end-author:taoyan date:2022-7-4 for: issues/I5BNY9 æå®å¸¦è¿æ»¤æ¡ä»¶çåå
¸tableå¨çæä»£ç å失æ |
| | | //ãissues/3713ãåå
¸æ¥å£åå¨SQL注å
¥é£é© |
| | | SqlInjectionUtil.filterContent(sqlInjCheck); |
| | | if (params.length == 4) { |
| | | // SQL注å
¥æ ¡éªï¼æ¥è¯¢æ¡ä»¶SQL ç¹æ®checkï¼æ¤æ¹æ³ä»
便¤å¤ä½¿ç¨ï¼ |
| | | SqlInjectionUtil.specialFilterContentForDictSql(params[3]); |
| | | ls = this.queryTableDictItemsByCodeAndFilter(params[0], params[1], params[2], params[3]); |
| | | } else if (params.length == 3) { |
| | | ls = this.queryTableDictItemsByCode(params[0], params[1], params[2]); |
| | | } else { |
| | | // åå
¸Codeæ ¼å¼ä¸æ£ç¡® |
| | | return null; |
| | | } |
| | | } else { |
| | | //åå
¸è¡¨ |
| | | ls = this.queryDictItemsByCode(dictCode); |
| | | } |
| | | //update-begin-author:taoyan date:2022-8-30 for: åå
¸è·åå¯ä»¥è·åæä¸¾ç±»çæ°æ® |
| | | if (ls == null || ls.size() == 0) { |
| | | Map<String, List<DictModel>> map = ResourceUtil.getEnumDictData(); |
| | | if (map.containsKey(dictCode)) { |
| | | return map.get(dictCode); |
| | | } |
| | | } |
| | | //update-end-author:taoyan date:2022-8-30 for: åå
¸è·åå¯ä»¥è·åæä¸¾ç±»çæ°æ® |
| | | return ls; |
| | | } |
| | | |
| | | @Override |
| | | public List<DictModel> loadDict(String dictCode, String keyword, Integer pageSize) { |
| | | //ãissues/3713ãåå
¸æ¥å£åå¨SQL注å
¥é£é© |
| | | SqlInjectionUtil.specialFilterContentForDictSql(dictCode); |
| | | |
| | | if (dictCode.contains(SymbolConstant.COMMA)) { |
| | | //update-begin-author:taoyan date:20210329 for: 䏿æç´¢ä¸æ¯æè¡¨ååå æ¥è¯¢æ¡ä»¶ |
| | | String[] params = dictCode.split(","); |
| | | String condition = null; |
| | | if (params.length != 3 && params.length != 4) { |
| | | // åå
¸Codeæ ¼å¼ä¸æ£ç¡® |
| | | return null; |
| | | } else if (params.length == 4) { |
| | | condition = params[3]; |
| | | // update-begin-author:taoyan date:20220314 for: online表å䏿æç´¢æ¡è¡¨åå
¸é
ç½®#{sys_org_code}æ¥é #3500 |
| | | if(condition.indexOf(SymbolConstant.SYS_VAR_PREFIX)>=0){ |
| | | condition = QueryGenerator.getSqlRuleValue(condition); |
| | | } |
| | | // update-end-author:taoyan date:20220314 for: online表å䏿æç´¢æ¡è¡¨åå
¸é
ç½®#{sys_org_code}æ¥é #3500 |
| | | } |
| | | |
| | | // åå
¸Codeæ ¼å¼ä¸æ£ç¡® [表å为空] |
| | | if(oConvertUtils.isEmpty(params[0])){ |
| | | return null; |
| | | } |
| | | List<DictModel> ls; |
| | | if (pageSize != null) { |
| | | ls = this.queryLittleTableDictItems(params[0], params[1], params[2], condition, keyword, pageSize); |
| | | } else { |
| | | ls = this.queryAllTableDictItems(params[0], params[1], params[2], condition, keyword); |
| | | } |
| | | //update-end-author:taoyan date:20210329 for: 䏿æç´¢ä¸æ¯æè¡¨ååå æ¥è¯¢æ¡ä»¶ |
| | | return ls; |
| | | } else { |
| | | // åå
¸Codeæ ¼å¼ä¸æ£ç¡® |
| | | return null; |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | @Cacheable(value = CacheConstant.SYS_DICT_TABLE_CACHE) |
| | | public String queryTableDictByParams(String table, String text, String codes, String params) { |
| | | log.info("æ ç¼ådictTable queryTableDictByKeysçæ¶åè°ç¨è¿éï¼"); |
| | | String[] codeArr = codes.split("&&"); |
| | | String[] paramArr = params.split("&&"); |
| | | |
| | | String subSql = ""; |
| | | for (int i = 0; i < codeArr.length; i++) { |
| | | String column = codeArr[i]; |
| | | // é»è®¤åæ°ä¸ºç©ºå符串 |
| | | String param = paramArr.length > i ? paramArr[i] : ""; |
| | | if(column == null || ! Validator.isGeneral(column)){ |
| | | log.error("<<<鿳忮µ:" + column); |
| | | return null; |
| | | } |
| | | if(null == param || (!"-1".equals(param) && ! Validator.isGeneralWithChinese(param.replaceAll(" ", "")))){ |
| | | log.error("<<<鿳忰:" + param); |
| | | return null; |
| | | } |
| | | |
| | | if(i != 0) subSql += " and "; |
| | | subSql += column+" = '"+param+"'"; |
| | | } |
| | | return sysDictMapper.queryTableDictTextBySubSql(table,text,subSql); |
| | | } |
| | | |
| | | @Override |
| | | public List<Map> queryTableFieldByParams(String queryTable, String[] columns, String paramName, String[] paramValues) { |
| | | String column = ArrayUtil.join(columns, ","); |
| | | return this.baseMapper.queryTableFieldByParams(queryTable, column, paramName, paramValues); |
| | | } |
| | | |
| | | } |