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