From 029b101d319812460441d3d706c0654d8b0dcda6 Mon Sep 17 00:00:00 2001
From: yuxc <653031404@qq.com>
Date: 星期五, 19 五月 2023 18:43:05 +0800
Subject: [PATCH] 主数据定义接口移植

---
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java |  222 +++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 207 insertions(+), 15 deletions(-)

diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java
index f313a07..689147f 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java
@@ -6,10 +6,10 @@
 import com.vci.ubcs.code.service.ICodeClassifyService;
 import com.vci.ubcs.code.service.MdmEngineService;
 import com.vci.ubcs.code.service.MdmIOService;
-import com.vci.ubcs.code.vo.CodeClstemplateVO;
-import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateAttrVO;
-import com.vci.ubcs.code.vo.pagemodel.CodeClassifyVO;
-import com.vci.ubcs.code.vo.pagemodel.CodeImProtRusultVO;
+import com.vci.ubcs.code.vo.pagemodel.*;
+import com.vci.ubcs.code.vo.webserviceModel.attrmap.DataObjectVO;
+import com.vci.ubcs.code.vo.webserviceModel.attrmap.RowDatas;
+import com.vci.ubcs.code.vo.webserviceModel.result.xml.XMLResultDataObjectDetailDO;
 import com.vci.ubcs.starter.bo.WriteExcelData;
 import com.vci.ubcs.starter.exception.VciBaseException;
 import com.vci.ubcs.starter.poi.bo.ReadExcelOption;
@@ -19,15 +19,19 @@
 import com.vci.ubcs.starter.poi.util.ExcelUtil;
 import com.vci.ubcs.starter.util.LocalFileUtil;
 import com.vci.ubcs.starter.web.enumpck.VciFieldTypeEnum;
+import com.vci.ubcs.starter.web.pagemodel.DataGrid;
 import com.vci.ubcs.starter.web.pagemodel.KeyValue;
 import com.vci.ubcs.starter.web.util.VciBaseUtil;
 import com.vci.ubcs.starter.web.util.VciDateUtil;
+import lombok.AllArgsConstructor;
 import org.apache.poi.hssf.usermodel.HSSFRichTextString;
 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 import org.apache.poi.hssf.util.HSSFColor;
 import org.apache.poi.ss.usermodel.Font;
 import org.apache.poi.ss.usermodel.RichTextString;
 import org.apache.poi.ss.usermodel.Workbook;
+import org.springblade.core.redis.cache.BladeRedis;
+import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
@@ -37,11 +41,11 @@
 import java.util.stream.Collectors;
 
 import static com.alibaba.druid.util.FnvHash.Constants.LIMIT;
-import static com.vci.ubcs.code.constant.MdmEngineConstant.CODE_FIELD;
-import static com.vci.ubcs.code.constant.MdmEngineConstant.DEFAULT_ATTR_LIST;
+import static com.vci.ubcs.code.constant.MdmEngineConstant.*;
 import static com.vci.ubcs.starter.poi.util.ExcelUtil.KEY_ATTR_CHAR;
 import static com.vci.ubcs.starter.poi.util.ExcelUtil.REQUIRED_CHAR;
 
+@AllArgsConstructor
 @Service
 public class MdmIOServiceImpl implements MdmIOService {
 
@@ -64,6 +68,8 @@
 	@Resource
 	private MdmEngineService engineService;
 
+	private final BladeRedis bladeRedis;
+
 	/**
 	 * 鐢熸垚瀵煎叆鐨勬枃浠�
 	 *
@@ -73,7 +79,7 @@
 	 */
 	@Override
 	public String createImportExcel(String codeClassifyOid, boolean isHistory) {
-		List<CodeClstemplateVO> templateVOList=new ArrayList<>();
+		List<CodeClassifyTemplateVO> templateVOList=new ArrayList<>();
 
 		VciBaseUtil.alertNotNull("瀵煎嚭妯℃澘","瀵煎嚭鐨勯厤缃�",codeClassifyOid,"涓婚搴撳垎绫荤殑涓婚敭");
 
@@ -83,7 +89,7 @@
 			templateVOList= templateService.childTemplates(codeClassifyOid);
 		}else{
 			//鎵炬ā鏉�
-			CodeClstemplateVO templateVO = engineService.getUsedTemplateByClassifyOid(codeClassifyOid);
+			CodeClassifyTemplateVO templateVO = engineService.getUsedTemplateByClassifyOid(codeClassifyOid);
 			templateVOList.add(templateVO);
 		}
 
@@ -95,15 +101,16 @@
 		tempEDList.add(new WriteExcelData(0,1,"妯℃澘浠e彿"));
 		tempEDList.add(new WriteExcelData(0,2,"妯℃澘鍚嶇О"));
 		for(int j=0;j<templateVOList.size();j++){
-			CodeClstemplateVO  templateVO=templateVOList.get(j);
-
+			CodeClassifyTemplateVO  templateVO=templateVOList.get(j);
+			CodeClassifyTemplateVO codeClassifyTemplateVO = new CodeClassifyTemplateVO();
+			BeanUtils.copyProperties(templateVO,codeClassifyTemplateVO);
 			//缁勫悎鏍煎紡鐨勪笉瀵煎叆锛�
 			// 鏋氫妇鐨勬彁渚涘簭鍒楃殑閫夋嫨
 			//鏃堕棿鍏ㄩ儴缁熶竴涓簓yyy-MM-dd HH:mm:ss
 			//鍙傜収鐨勮嚜琛岃緭鍏ュ悕绉�
 			//鍒嗙被娉ㄥ叆鐨勪笉鐢紝閮芥槸瀵煎叆鍚庤嚜鍔ㄥ鐞嗙殑
 			//缂栫爜锛岀姸鎬佺瓑瀛楁涓嶅鍏�
-			List<CodeClassifyTemplateAttrVO> templateAttrVOS = templateVO.getAttributes().stream().filter(s ->
+			List<CodeClassifyTemplateAttrVO> templateAttrVOS = codeClassifyTemplateVO.getAttributes().stream().filter(s ->
 				!DEFAULT_ATTR_LIST.contains(s.getId())
 					&& StringUtils.isBlank(s.getComponentRule())
 					&& StringUtils.isBlank(s.getClassifyInvokeAttr())
@@ -113,7 +120,7 @@
 			if(CollectionUtils.isEmpty(templateAttrVOS)){
 				throw new VciBaseException("妯℃澘娌℃湁閰嶇疆浠讳綍銆愯〃鍗曟樉绀恒�戜负銆愭槸銆戠殑灞炴��");
 			}
-			List<CodeClassifyTemplateAttrVO> idAttrVOList = templateVO.getAttributes().stream().filter(s -> s.getId().equalsIgnoreCase(CODE_FIELD)).collect(Collectors.toList());
+			List<CodeClassifyTemplateAttrVO> idAttrVOList = codeClassifyTemplateVO.getAttributes().stream().filter(s -> s.getId().equalsIgnoreCase(CODE_FIELD)).collect(Collectors.toList());
 			LinkedList<WriteExcelData> excelDataList = new LinkedList<>();
 			Workbook workbook = new HSSFWorkbook();
 			if(isHistory){
@@ -239,7 +246,7 @@
 		//鍏堟壘鍒版瘡涓�琛岀殑鏍囬锛岀劧鍚庢牴鎹爣棰樻潵鑾峰彇瀵瑰簲鐨勫睘鎬�
 		SheetDataSet dataSet = sheetDataSetList.get(0);
 		//鎵剧涓�琛岋紝涓轰簡鎵炬爣棰�
-		CodeClstemplateVO templateVO = engineService.getUsedTemplateByClassifyOid(orderDTO.getCodeClassifyOid());
+		CodeClassifyTemplateVO templateVO = engineService.getUsedTemplateByClassifyOid(orderDTO.getCodeClassifyOid());
 
 		//鏍¢獙妯℃澘鏄笉鏄渶鏂扮殑
 		checkTemplateSync(sheetDataSetList,templateVO,0);
@@ -264,7 +271,7 @@
 	 * @param sheetDataSetList excel閲岀殑鍐呭
 	 * @param templateVO 妯℃澘鐨勪俊鎭�
 	 */
-	private void checkTemplateSync(List<SheetDataSet> sheetDataSetList,CodeClstemplateVO templateVO,int i){
+	private void checkTemplateSync(List<SheetDataSet> sheetDataSetList,CodeClassifyTemplateVO templateVO,int i){
 		String templateOidInExcel = "";
 		String templateName="";
 		if(!CollectionUtils.isEmpty(sheetDataSetList)
@@ -294,7 +301,7 @@
 	 * @param dataSet
 	 * @return
 	 */
-	private String batchImportCodes(CodeOrderDTO orderDTO,CodeClstemplateVO templateVO,SheetDataSet dataSet,Map<String,String> errorMap,boolean isEnumType){
+	private String batchImportCodes(CodeOrderDTO orderDTO,CodeClassifyTemplateVO templateVO,SheetDataSet dataSet,Map<String,String> errorMap,boolean isEnumType){
 		List<String> codeList=new ArrayList<>();
 //		CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(orderDTO.getCodeClassifyOid());
 		//瑙勫垯鐨勪富閿渶瑕佸幓鑾峰彇
@@ -416,4 +423,189 @@
 //		return uuid;
 		return null;
 	}
+
+	@Override
+	public List<CodeImportTemplateVO> gridclassifys(String redisOid) {
+		List<CodeImportTemplateVO> codeImportTemplateVOs=new ArrayList<>();
+		VciBaseUtil.alertNotNull(redisOid,"鍒嗙被",redisOid,"鍒嗙被缂撳瓨涓婚敭");
+
+		List<CodeImportTemplateVO> redisServiceCacheObjects=bladeRedis.lRange(redisOid,0,-1);
+		if(redisServiceCacheObjects!=null){
+			codeImportTemplateVOs=  redisServiceCacheObjects;
+		}
+		return codeImportTemplateVOs;
+	}
+
+	/***
+	 * 浠庣紦瀛橀噷鑾峰彇鍒伴渶瑕佸鍏ョ殑鐩稿叧鏁版嵁
+	 * @param codeClssifyOid
+	 * @param redisOid
+	 * @return
+	 */
+	@Override
+	public DataGrid<Map<String, String>> gridDatas(String codeClssifyOid, String redisOid) {
+		VciBaseUtil.alertNotNull(redisOid,"瀵煎叆鐩镐技鏁版嵁",redisOid,"鏁版嵁缂撳瓨涓婚敭");
+		List<CodeImprotDataVO> codeImprotDataVOs = bladeRedis.lRange(redisOid+"-"+codeClssifyOid,0,-1);
+//		redisService.getCacheList(redisOid+"-"+codeClssifyOid);
+		CodeImprotDataVO codeImprotDataVO=new CodeImprotDataVO();
+		if(!CollectionUtils.isEmpty(codeImprotDataVOs)){
+			if(StringUtils.isNotBlank(codeClssifyOid)){
+				Map<String/**鍒嗙被鍚嶇О**/, CodeImprotDataVO/**鑻辨枃鍚嶇О**/> codeClassifyDatasMap = codeImprotDataVOs.stream().collect(Collectors.toMap(s -> s.getCodeClassifyOid(), t -> t,(o1, o2)->o2));
+				if(codeClassifyDatasMap.containsKey(codeClssifyOid)){
+					codeImprotDataVO= codeClassifyDatasMap.get(codeClssifyOid);
+				}else{
+					codeImprotDataVO=  codeImprotDataVOs.get(0);
+				}
+			}
+		}
+		DataGrid<Map<String, String>> dataGrid = new DataGrid<>();
+		List<Map<String, String>> dataList = new ArrayList<>();
+		if(codeImprotDataVO!=null){
+			dataList= codeImprotDataVO.getDatas();
+		}
+		dataGrid.setData(dataList);
+		if (!CollectionUtils.isEmpty(dataList)) {
+			dataGrid.setTotal(dataList.size());
+		}
+		return dataGrid;
+	}
+
+	/**
+	 *
+	 * @param oid
+	 * @param redisOid
+	 * @return
+	 */
+	@Override
+	public DataGrid<Map<String,String>> gridRowResemble(String oid,String redisOid){
+		VciBaseUtil.alertNotNull(redisOid,"瀵煎叆鐩镐技鏁版嵁",redisOid,"鏁版嵁缂撳瓨涓婚敭");
+		List<DataResembleVO> codeImprotDataVOs = bladeRedis.lRange(redisOid,0,-1);;
+		DataGrid<Map<String, String>> dataGrid = new DataGrid<>();
+		List<Map<String, String>> dataList = new ArrayList<>();
+
+		if(!CollectionUtils.isEmpty(codeImprotDataVOs)){
+			Map<String/**鍒嗙被鍚嶇О**/, DataResembleVO/**鏁版嵁瀵硅薄**/> rowResembleDataMap = codeImprotDataVOs.stream().collect(Collectors.toMap(s -> s.getOid(), t -> t,(o1, o2)->o2));
+			if(rowResembleDataMap.containsKey(oid)){
+				DataResembleVO dataResembleVO=  rowResembleDataMap.get(oid);
+				dataList= dataResembleVO.getDataList();
+			}
+		}
+
+		dataGrid.setData(dataList);
+		if (!CollectionUtils.isEmpty(dataList)) {
+			dataGrid.setTotal(dataList.size());
+		}
+		return dataGrid;
+	}
+
+	/**
+	 * 闆嗘垚鎵归噺鐢宠鏁版嵁
+	 * @param orderDTO 鍒嗙被鐨勪富閿�
+	 * @param dataObjectVO 鏁版嵁淇℃伅
+	 * @param resultDataObjectDetailDOs 閿欒淇℃伅
+	 * @return 鏈夐敊璇俊鎭殑excel
+	 */
+	@Override
+	public void batchSyncApplyCode(CodeOrderDTO orderDTO, DataObjectVO dataObjectVO, LinkedList<XMLResultDataObjectDetailDO> resultDataObjectDetailDOs) {
+		Map<String,String> errorMap=new HashMap<>();
+		VciBaseUtil.alertNotNull(orderDTO,"缂栫爜鐢宠鐩稿叧鐨勬暟鎹�",orderDTO.getCodeClassifyOid(),"涓婚搴撳垎绫讳富閿�");
+		CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(orderDTO.getCodeClassifyOid());
+		//瑙勫垯鐨勪富閿渶瑕佸幓鑾峰彇
+		CodeRuleVO ruleVO = engineService.getCodeRuleByClassifyFullInfo(classifyFullInfo);
+		//1.鍒ゆ柇瑙勫垯涓櫎浜嗘祦姘寸爜娈碉紝鏄惁鏈夊叾浠栫爜娈�
+		//engineService.checkSecValueOnOrder(ruleVO,orderDTO);
+		//鏌ヨ鍒嗙被鍜屾ā鏉�
+		//鍏堟壘鍒版瘡涓�琛岀殑鏍囬锛岀劧鍚庢牴鎹爣棰樻潵鑾峰彇瀵瑰簲鐨勫睘鎬�
+		List<RowDatas> rowDataList = dataObjectVO.getRowData();
+		Map<String , RowDatas>rowDataMap=new LinkedHashMap<>();
+		rowDataList.stream().forEach(rowData->{
+			rowDataMap.put(rowData.getRowIndex(),rowData);
+		});
+		//鎵剧涓�琛岋紝涓轰簡鎵炬爣棰�
+		CodeClassifyTemplateVO templateVO = engineService.getUsedTemplateByClassifyOid(orderDTO.getCodeClassifyOid());
+
+		//鏍¢獙妯℃澘鏄笉鏄渶鏂扮殑
+		//checkTemplateSync(sheetDataSetList,templateVO);
+		//闄ゅ幓榛樿鐨勫睘鎬�.杩樻湁鍙湁琛ㄥ崟鏄剧ず鐨勫瓧娈垫墠瀵煎叆
+		List<CodeClassifyTemplateAttrVO> attrVOS = templateVO.getAttributes().stream().filter(s ->!DEFAULT_SYNC_ATTR_LIST.contains(s.getId()) && VciBaseUtil.getBoolean(s.getFormDisplayFlag())
+		).collect(Collectors.toList());
+		Map<Integer/**鍒楀彿**/,String/**瀛楁鐨勫悕绉�**/> fieldIndexMap = new HashMap<>();
+		List<String> titleRowData = dataObjectVO.getColName();
+		Map<String/**涓枃鍚嶇О**/, String/**鑻辨枃鍚嶇О**/> attrNameIdMap = attrVOS.stream().collect(Collectors.toMap(s -> s.getName(), t -> t.getId().toLowerCase(Locale.ROOT),(o1, o2)->o2));
+		getFieldIndexMap(titleRowData,attrNameIdMap,fieldIndexMap);
+
+		//闇�瑕佸垽鏂槸鍚︽墍鏈夌殑灞炴�ч兘鍦ㄦā鏉夸笂浜�
+		List<CodeClassifyTemplateAttrVO> unExistAttrVOs = attrVOS.stream().filter(s -> !fieldIndexMap.containsValue(s.getId().toLowerCase(Locale.ROOT))
+			&& com.alibaba.cloud.commons.lang.StringUtils.isBlank(s.getComponentRule()) && com.alibaba.cloud.commons.lang.StringUtils.isBlank(s.getClassifyInvokeAttr())//缁勫悎瑙勫垯鍜屽垎绫绘敞鍏ョ‘瀹炴病缁欑敤鎴峰鍑哄幓
+		).collect(Collectors.toList());
+		if(!CollectionUtils.isEmpty(unExistAttrVOs)){
+			throw new VciBaseException("銆�" + unExistAttrVOs.stream().map(CodeClassifyTemplateAttrVO::getName) + "銆戣繖浜涘睘鎬у湪excel涓病鏈夋壘鍒�");
+		}
+
+		String fullPath = getFullPath(classifyFullInfo);
+
+		// List<CodeClassifyProcessTempVO> codeClassifyProcessTempVOS=codeClassifyProcessTempService.listProcessTemplate(templateVO.getOid(),"code_cls_flow_use_order");
+		boolean isProcess=false;
+		//娉ㄩ噴鎺夋澶勪笅闈㈡墍鏈夐兘鎸夌収涓嶅垽鏂祦绋嬪瓨鍌ㄧ姸鎬佷簡
+		/** if(!CollectionUtils.isEmpty(codeClassifyProcessTempVOS)){
+		 isProcess=true;
+		 }***/
+		//List<ClientBusinessObject> cboList = new ArrayList<>();
+		//Map<String,String> codeOidToSystemOidMap=new HashMap<>();//瀛樺偍缂栫爜鏁版嵁鍜岄泦鎴愮郴缁熸暟鎹畂id瀵圭収鏄犲皠
+		//excelToCbo(classifyFullInfo,titleRowData,fieldIndexMap,rowDataList,templateVO,cboList,fullPath,isProcess,"create",errorMap,codeOidToSystemOidMap);
+
+		//閮借浆鎹㈠畬浜嗐�傞渶瑕佹壒閲忔鏌�
+		//濡傛灉鍑洪敊浜嗭紝鎴戜滑渚濈劧鎵ц鏈夋晥鐨勬暟鎹紝鏃犳晥鐨勬暟鎹啓鍥炲埌excel涓�
+		//2.鍒ゆ柇蹇呰緭椤广�傘�傞渶瑕佸叏閮ㄧ殑灞炴�э紝濡傛灉鏄繀杈擄紝浣嗘槸琛ㄥ崟閲岄潰涓嶆樉绀虹殑锛屽彧鑳芥槸鍒嗙被娉ㄥ叆鎴栬�呯粍鍚堣鍒�
+
+	}
+
+	@Override
+	public void batchSyncEditDatas(CodeClassifyVO codeClassifyVO, DataObjectVO dataObjectVO, LinkedList<XMLResultDataObjectDetailDO> resultDataObjectDetailDOs) {
+
+	}
+
+	/**
+	 * 鑾峰彇鍒嗙被鐨勫叏璺緞
+	 * @param classifyFullInfo 鍒嗙被鐨勫叏閮ㄤ俊鎭�
+	 * @return 鍏ㄨ矾寰�
+	 */
+	private String getFullPath(CodeClassifyFullInfoBO classifyFullInfo){
+		String fullPath = "";
+		if(!CollectionUtils.isEmpty(classifyFullInfo.getParentClassifyVOs())){
+			fullPath = classifyFullInfo.getParentClassifyVOs().stream().sorted(((o1, o2) -> o1.getDataLevel().compareTo(o2.getDataLevel())))
+				.map(CodeClassifyVO::getOid).collect(Collectors.joining("##"));
+		}else{
+			fullPath = classifyFullInfo.getCurrentClassifyVO().getOid();
+		}
+		return fullPath;
+	}
+
+	/**
+	 * excel鐨勬爣棰樹笂鑾峰彇瀛楁鎵�鍦ㄧ殑浣嶇疆
+	 * @param titleRowData 鏍囬鐨勫唴瀹�
+	 * @param attrNameIdMap 妯℃澘涓睘鎬у悕绉板拰鑻辨枃鐨勬槧灏�
+	 * @param fieldIndexMap 浣嶇疆鍜岃嫳鏂囧瓧娈电殑鏄犲皠
+	 */
+	private void getFieldIndexMap(List<String> titleRowData,Map<String/**鍚嶇О**/,String/**瀛楁鍚�**/> attrNameIdMap,Map<Integer/**浣嶇疆**/,String/**鑻辨枃鍚嶅瓧**/> fieldIndexMap){
+		for (int i = 0; i < titleRowData.size(); i++) {
+			String title = titleRowData.get(i);
+			String id = attrNameIdMap.getOrDefault(title.replace(KEY_ATTR_CHAR,"").replace(REQUIRED_CHAR
+				,""),"");
+			if(com.alibaba.cloud.commons.lang.StringUtils.isBlank(id) && "鍒嗙被璺緞".equalsIgnoreCase(title)){
+				id = CODE_CLASSIFY_OID_FIELD;
+			}
+			if(com.alibaba.cloud.commons.lang.StringUtils.isBlank(id) && "鐮佹瀹藉害".equalsIgnoreCase(title)){
+				id = CODE_SEC_LENGTH_FIELD;
+			}
+			if(com.alibaba.cloud.commons.lang.StringUtils.isBlank(id) && "浼佷笟缂栫爜".equalsIgnoreCase(title)){
+				id = CODE_FIELD;
+			}
+			if(com.alibaba.cloud.commons.lang.StringUtils.isNotBlank(id)){
+				fieldIndexMap.put(i,id);
+			}
+		}
+	}
+
+
 }

--
Gitblit v1.9.3