From 4470052c3b6bdeb18e45987f8aa293d1e93d0552 Mon Sep 17 00:00:00 2001
From: Ludc <2870569285@qq.com>
Date: 星期二, 18 十一月 2025 11:59:12 +0800
Subject: [PATCH] 所有文件上传接口增加文件安全校验逻辑。
---
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmCountServiceImpl.java | 123 ++++++++++++++++++++++++++++++++++++++---
1 files changed, 114 insertions(+), 9 deletions(-)
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmCountServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmCountServiceImpl.java
index 92c6569..3fce2a5 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmCountServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmCountServiceImpl.java
@@ -4,15 +4,27 @@
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.vci.ubcs.code.entity.CodeClassify;
import com.vci.ubcs.code.entity.MdmCount;
+import com.vci.ubcs.code.mapper.CommonsMapper;
import com.vci.ubcs.code.service.ICodeClassifyService;
import com.vci.ubcs.code.service.IMdmCountService;
+import com.vci.ubcs.starter.web.util.VciBaseUtil;
+import com.vci.ubcs.system.entity.MdmCountConfig;
+import com.vci.ubcs.system.entity.Menu;
import com.vci.ubcs.system.feign.ISysClient;
import lombok.extern.slf4j.Slf4j;
+import org.springblade.core.log.exception.ServiceException;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+import static com.vci.ubcs.starter.web.util.VciBaseUtil.getTableName;
/**
* 涓绘暟鎹粺璁℃湇鍔�
@@ -32,18 +44,111 @@
@Resource
private ICodeClassifyService codeClassifyService;
+ @Resource
+ private CommonsMapper commonsMapper;
+
+ /**
+ * 鏌ヨ涓绘暟鎹�绘暟
+ * @param userId
+ * @return
+ * @throws ServiceException
+ */
@Override
- public List<MdmCount> getMdmCounts() {
- // 1銆侀渶瑕佸厛鏌ヨ鍑哄垎绫讳笅椤剁骇鑺傜偣鏈夊摢浜涗富鏁版嵁,鎷垮埌涓氬姟绫诲瀷鍚嶇О
+ public List<MdmCount> getMdmCounts(String userId) throws ServiceException{
+ if(Func.isBlank(userId) && Func.isBlank(AuthUtil.getUserId().toString())){
+ throw new ServiceException("蹇呬紶鍙傛暟鐢ㄦ埛id涓嶈兘涓虹┖");
+ }
+ /** 1銆佸厛鏌ヨ鍑哄悇鍒嗙被椤跺眰鑺傜偣鏈夊摢浜涗富鏁版嵁,鎷垮埌缁戝畾鐨勪笟鍔$被鍨嬪悕绉帮紝鐩稿綋浜庢嬁鍒颁富鏁版嵁琛ㄥ悕
+ 椤跺眰鑺傜偣鐨刡tmtypeid锛�2024骞�1鏈�31鏃ョ殑鏃跺�欐敼鎴愪簡鐢ㄥ垎绫荤殑id锛夊幓鏌ヨ瀵瑰簲鐨勮彍鍗曡〃鐨刢ode瀛楁
+ 锛屾煡璇㈠嚭涓绘暟鎹鐞嗕笅闈㈡湁鍝簺涓绘暟鎹殑
+ 浣嗘槸涓轰簡鍑忓皯鏌ヨ娆℃暟锛屽氨闇�鍦ㄦ煡璇㈡槸浣跨敤id瀛楁杩涜鎺掑簭
+ */
LambdaQueryWrapper<CodeClassify> wrapper = Wrappers.<CodeClassify>query()
.lambda()
- .isNull(CodeClassify::getParentCodeClassifyOid).select(CodeClassify::getBtmTypeId);
- Map<String, Object> map = codeClassifyService.getMap(wrapper);
- // 2銆佺劧鍚庨渶瑕佹煡璇㈠嚭鑿滃崟璺敱鍜屽浘鏍�
+ .isNull(CodeClassify::getParentCodeClassifyOid)/*椤跺眰鑺傜偣*/
+ .orderByAsc(CodeClassify::getId);
+ // 鍔犱笂绉熸埛鏌ヨ鏉′欢
+ if(!VciBaseUtil.checkAdminTenant()){
+ wrapper.eq(CodeClassify::getTenantId,AuthUtil.getTenantId());
+ }
+ List<CodeClassify> codeClassifies = codeClassifyService.list(wrapper);
+ // List<String> btmTypeIds = codeClassifies.stream().map(CodeClassify::getBtmTypeId).collect(Collectors.toList());
+ List<String> classifyIds = codeClassifies.stream().map(CodeClassify::getId).collect(Collectors.toList());
+ // 2銆佺劧鍚巉eign璋冪敤闇�瑕佹煡璇㈠嚭鑿滃崟璺敱鍜屽浘鏍�
+ R<List<Menu>> menuList = sysClient.getMenuByCodes(classifyIds,Func.toLong(userId));
+ if(!menuList.isSuccess()){
+ throw new ServiceException("鑾峰彇涓绘暟鎹粺璁℃椂锛屼富鏁版嵁鑿滃崟鏌ヨ澶辫触锛屽師鍥狅細"+menuList.getMsg());
+ }
+ List<MdmCount> mdmCountList = new ArrayList<>();
+ // 3銆佹煡璇㈠綋鍓嶇櫥褰曠殑鐢ㄦ埛閰嶇疆浜嗛偅浜涗富鏁版嵁缁熻椤�
+ R<MdmCountConfig> mdmCountConfig = sysClient.getMdmCountConfig(Func.isBlank(userId) ? AuthUtil.getUserId().toString():userId);
+ if(!mdmCountConfig.isSuccess()){
+ throw new ServiceException("鑾峰彇涓绘暟鎹粺璁¢」閰嶇疆鏃跺嚭鐜伴敊璇紝鍘熷洜锛�"+mdmCountConfig.getMsg());
+ }
+ List<String> mdmNames = null;
+ //棣栭〉閰嶇疆鏄剧ず灏戜簬5涓氨榛樿鏄剧ず鍓嶄簲涓�
+ if(Func.isBlank(mdmCountConfig.getData().getMdmName())){
+ AtomicInteger count = new AtomicInteger();
+ mdmNames = menuList.getData().stream().map(item->{
+ if(count.getAndIncrement() <5){
+ return item.getCode();
+ }
+ return null;
+ }).collect(Collectors.toList());
+ }else {
+ mdmNames = Arrays.stream(mdmCountConfig.getData().getMdmName().split(",")).collect(Collectors.toList());
+ }
+ final List<String> mdmNamesFinal = mdmNames;
+ /* 4銆佽幏鍙栬〃鍚嶏紝褰撳墠鏈幏鍙栧埌琛ㄥ悕锛岃彍鍗曠殑code鍊煎搴斾簡鍒嗙被鐨刬d锛�
+ 鏈搴斾笟鍔$被鍨嬬殑id锛屾墍浠ラ渶瑕侀�氳繃鑿滃崟鐨刬d绛涢�夊嚭閰嶇疆骞朵笖鍦ㄤ娇鐢ㄧ殑涓绘暟鎹垎绫�,
+ 鐒跺悗閫氳繃鍒嗙被淇℃伅鏌ヨ鍒颁笟鍔$被鍨媔d锛屽湪閫氳繃涓氬姟绫诲瀷鎺ュ彛鏌ヨ鍑鸿〃鍚�(杩欎竴姝ュ彲浠ュ厛鐪佺暐鍥犱负鍒嗙被涓婂叧鑱旂殑涓氬姟绫诲瀷id涔熷彲浠ユ嫾鎺ュ嚭琛ㄥ悕)
+ */
+ // 鑾峰彇鍒嗙被涓婄殑涓氬姟绫诲瀷鐨刬d
+ Map<String, String> btmTypeIdMaps = menuList.getData().stream()
+ .filter(menu -> codeClassifies.stream()
+ .anyMatch(codeClassify -> codeClassify.getId().equals(menu.getCode()))
+ ).collect(Collectors.toMap(
+ Menu::getCode,
+ menu -> codeClassifies.stream()
+ .filter(codeClassify -> codeClassify.getId().equals(menu.getCode()))
+ .findFirst()
+ .map(CodeClassify::getBtmTypeId)
+ .orElse(null)
+ ));
- // 3銆佺劧鍚庤缃繘
+ // 5銆佺劧鍚巗et杩涘璞′腑
+ menuList.getData().stream().forEach(item->{
+ Integer isDefault = mdmNamesFinal.contains(item.getCode()) ? 1:0;
+ MdmCount mdmCount = new MdmCount(
+ item.getName(),
+ getCountByTableName(btmTypeIdMaps.get(item.getCode())), /*鏌ヨ涓绘暟鎹�绘暟*/
+ item.getPath(),
+ item.getSource(),
+ item.getCode(),
+ isDefault
+ );
+ mdmCountList.add(mdmCount);
+ });
+ return mdmCountList;
+ }
- return null;
+ /**
+ * 鎷兼帴琛ㄥ悕鏌ヨ鎬绘暟
+ * @param tableName
+ * @return
+ */
+ private String getCountByTableName(String tableName){
+ String count = "0";
+ if(Func.isBlank(tableName)){
+ return count;
+ }
+ String sql = "SELECT COUNT(*) FROM " + getTableName(tableName,true) +";";
+ try {
+ count = commonsMapper.queryCountStringBySql(sql);
+ }catch (Exception e){
+ throw new ServiceException("涓绘暟鎹�绘暟鏌ヨ澶辫触锛屽師鍥狅細"+e.getCause());
+ }
+ return count;
}
}
--
Gitblit v1.9.3