From 29ab7773efe351a879ce9b3c29ab3ca50f4e62cb Mon Sep 17 00:00:00 2001 From: xiejun <xiejun@vci-tech.com> Date: 星期三, 15 一月 2025 21:36:08 +0800 Subject: [PATCH] 产品型号集成,类型转换,人员组织加日志,申请接口引用码段值校验 --- Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java | 5334 +++++++++++++++++++++++++++++++++++++++++++++++++++++------ 1 files changed, 4,749 insertions(+), 585 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 14905bf..e6798b6 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 @@ -1,13 +1,21 @@ package com.vci.ubcs.code.service.impl; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.alibaba.nacos.common.utils.StringUtils; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.google.protobuf.ServiceException; +import com.vci.ubcs.code.applyjtcodeservice.feign.IMdmInterJtClient; +import com.vci.ubcs.code.applyjtcodeservice.vo.DockingPreAttrMappingVO; import com.vci.ubcs.code.bo.AttributeValue; import com.vci.ubcs.code.bo.CodeClassifyFullInfoBO; import com.vci.ubcs.code.bo.CodeTemplateAttrSqlBO; -import com.vci.ubcs.code.dto.CodeOrderDTO; -import com.vci.ubcs.code.enumpack.CodeDefaultLC; -import com.vci.ubcs.code.enumpack.CodeLevelTypeEnum; +import com.vci.ubcs.code.dto.*; +import com.vci.ubcs.code.entity.CodeAllCode; +import com.vci.ubcs.code.entity.CodeSynonym; +import com.vci.ubcs.code.enumpack.*; +import com.vci.ubcs.code.lifecycle.CodeAllCodeLC; import com.vci.ubcs.code.mapper.CommonsMapper; import com.vci.ubcs.code.service.*; import com.vci.ubcs.code.util.ClientBusinessObject; @@ -16,6 +24,10 @@ 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.file.util.VciZipUtil; +import com.vci.ubcs.omd.feign.IBtmTypeClient; +import com.vci.ubcs.omd.feign.IWebSecretClient; +import com.vci.ubcs.omd.vo.BtmTypeVO; import com.vci.ubcs.starter.bo.WriteExcelData; import com.vci.ubcs.starter.exception.VciBaseException; import com.vci.ubcs.starter.poi.bo.ReadExcelOption; @@ -26,16 +38,18 @@ import com.vci.ubcs.starter.revision.model.BaseModel; import com.vci.ubcs.starter.util.DefaultAttrAssimtUtil; import com.vci.ubcs.starter.util.LocalFileUtil; +import com.vci.ubcs.starter.util.SaveLogUtil; +import com.vci.ubcs.starter.web.constant.QueryOptionConstant; import com.vci.ubcs.starter.web.enumpck.BooleanEnum; +import com.vci.ubcs.starter.web.enumpck.UserSecretEnum; 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.pagemodel.PageHelper; -import com.vci.ubcs.starter.web.pagemodel.UIFormReferVO; +import com.vci.ubcs.starter.web.pagemodel.*; import com.vci.ubcs.starter.web.toolmodel.DateConverter; import com.vci.ubcs.starter.web.util.*; -import lombok.AllArgsConstructor; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import oracle.sql.TIMESTAMP; +import org.apache.commons.collections4.map.HashedMap; import org.apache.poi.hssf.usermodel.HSSFRichTextString; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hssf.util.HSSFColor; @@ -43,36 +57,77 @@ import org.apache.poi.ss.usermodel.RichTextString; import org.apache.poi.ss.usermodel.Workbook; import org.springblade.core.redis.cache.BladeRedis; +import org.springblade.core.secure.BladeUser; +import org.springblade.core.secure.utils.AuthUtil; +import org.springblade.core.tool.api.R; +import org.springblade.core.tool.utils.Func; +import org.springblade.core.tool.utils.StringUtil; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; -import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import javax.annotation.Resource; +import javax.xml.bind.ValidationEvent; +import java.beans.BeanInfo; +import java.beans.Introspector; +import java.beans.PropertyDescriptor; import java.io.File; import java.io.IOException; +import java.lang.reflect.Method; +import java.math.BigDecimal; +import java.text.MessageFormat; +import java.text.SimpleDateFormat; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.ZonedDateTime; import java.util.*; +import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.CopyOnWriteArraySet; +import java.util.concurrent.ForkJoinPool; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Collectors; import static com.alibaba.druid.util.FnvHash.Constants.LIMIT; import static com.vci.ubcs.code.constant.MdmEngineConstant.*; import static com.vci.ubcs.starter.poi.util.ExcelUtil.*; -@AllArgsConstructor +@RequiredArgsConstructor @Service @Slf4j public class MdmIOServiceImpl implements MdmIOService { + + /** + * 瀛楁 + */ + public static final String ROW_INDEX = "LAY_TABLE_INDEX"; + + /** + * 閿欒淇℃伅鐨勫瓧娈� + */ + public static final String ERROR_MSG = "errorMsg"; + + @Value("${batchadd.exportattr.type:鍩烘湰淇℃伅}") + public String BATCHADD_EXCEPORT_ATTR_TYPE; + @Value("${batchadd.redis.time:6000000}") public int BATCHADD_REDIS_TIME; + + @Value("${batchadd.import_data_limit:5001}") + private Integer IMPORT_DATA_LIMIT; + /** * 涓婚搴撳垎绫荤殑鏈嶅姟 */ @Resource private ICodeClassifyService classifyService; + + @Resource + private MdmEngineService mdmEngineService; /** * 閫氱敤鏌ヨ @@ -80,11 +135,17 @@ @Resource private CommonsMapper commonsMapper; + /**** + * 鐮佸�兼湇鍔� + */ + @Resource + ICodeAllCodeService codeAllCodeService; + /** * 妯℃澘鐨勬湇鍔� */ @Resource - private CodeClstemplateServiceImpl templateService; + private ICodeClstemplateService templateService; /** * 涓绘暟鎹紩鎿庣殑鏈嶅姟 @@ -107,28 +168,241 @@ private ICodeKeyAttrRepeatService keyRuleService; /** + * 杩戜箟璇嶈鍒欐煡璇㈡湇鍔� + */ + @Autowired + ICodeSynonymService codeSynonymService; + + /** * 鍏紡鐨勬湇鍔� */ @Autowired private FormulaServiceImpl formulaService; + + /** + * 瑙勫垯鐨勬湇鍔� + */ + @Autowired + private ICodeRuleService ruleService; + + /** + * 涓氬姟绫诲瀷鐨勬湇鍔� + */ + @Autowired + private IBtmTypeClient btmTypeClient; + + /*** + * 鐢宠闆嗗洟缂栫爜鏈嶅姟 + */ + @Resource + private IMdmInterJtClient mdmInterJtClient; + + /*** + * 瀵嗙骇鏈嶅姟 + */ + @Resource + private IWebSecretClient secretService; + + /** + * 鏃ュ織淇濆瓨宸ュ叿绫� + */ + @Autowired + private SaveLogUtil saveLogUtil; + + /** + * 瀹㈡埛鐜板満excel涓鸿�佺増鏈紝瀵煎嚭鐨勬�绘暟闄愬埗涓�65535 + */ + public static final int EXPORT_LIMIT = 65535; + + /** + * 鑷畾涔夊苟鍙慒orkJoinPool + */ + private static final ForkJoinPool customForkJoinPool = new ForkJoinPool(Runtime.getRuntime().availableProcessors() - 1); + + /** + * 鎵归噺鐢宠锛氶�夊彇閫変腑鍒嗙被涓嬬殑鎵�鏈夋ā鏉垮叧閿睘鎬э紝鐩镐技灞炴�э紝蹇呭~灞炴�э紝鍐欏叆execl涓� + * + * @param codeClassifyOid 鍒嗙被鐨勪富閿� + * @return excel鐨勬枃浠跺湴鍧� + */ + @Override + public String downloadTopImportExcel(String codeClassifyOid) { + List<CodeClassifyTemplateVO> templateVOList = new ArrayList<>(); + VciBaseUtil.alertNotNull("瀵煎嚭妯℃澘", "瀵煎嚭鐨勯厤缃�", codeClassifyOid, "涓婚搴撳垎绫荤殑涓婚敭"); + CodeClassifyVO codeClassifyVO = classifyService.getObjectByOid(codeClassifyOid); + templateVOList = templateService.childTemplates(codeClassifyOid); + List<CodeClassifyVO> codeClassifyVOS = classifyService.getIdPathToNamePathByParentId(codeClassifyOid, true); + WriteExcelOption eo = new WriteExcelOption(); + LinkedHashMap<String, CodeClassifyTemplateAttrVO> allFieldToOutNameMap = new LinkedHashMap<>(); + templateVOList.stream().forEach(templateVO -> { + //缁勫悎鏍煎紡鐨勪笉瀵煎叆锛� + // 鏋氫妇鐨勬彁渚涘簭鍒楃殑閫夋嫨 + //鏃堕棿鍏ㄩ儴缁熶竴涓簓yyy-MM-dd HH:mm:ss + //鍙傜収鐨勮嚜琛岃緭鍏ュ悕绉� + //鍒嗙被娉ㄥ叆鐨勪笉鐢紝閮芥槸瀵煎叆鍚庤嚜鍔ㄥ鐞嗙殑 + //缂栫爜锛岀姸鎬佺瓑瀛楁涓嶅鍏� + if (!CollectionUtils.isEmpty(templateVO.getAttributes())) { + List<CodeClassifyTemplateAttrVO> templateAttrVOS = templateVO.getAttributes().stream().filter(s -> + !DEFAULT_ATTR_LIST.contains(s.getId()) + && StringUtils.isBlank(s.getComponentRule()) + && StringUtils.isBlank(s.getClassifyInvokeAttr()) + && (VciBaseUtil.getBoolean(s.getFormDisplayFlag())) + ).collect(Collectors.toList()); + if (CollectionUtils.isEmpty(templateAttrVOS)) { + throw new VciBaseException("妯℃澘娌℃湁閰嶇疆浠讳綍銆愯〃鍗曟樉绀恒�戜负銆愭槸銆戠殑灞炴��"); + } + templateAttrVOS.stream().forEach(codetemplateAttr -> { + String field = codetemplateAttr.getId(); + String name = codetemplateAttr.getName(); + CodeClassifyTemplateAttrVO codeBaseAttributeDTO = new CodeClassifyTemplateAttrVO(); + boolean res = (StringUtils.isNotBlank(codetemplateAttr.getAttributeGroup()) && codetemplateAttr.getAttributeGroup().equals(BATCHADD_EXCEPORT_ATTR_TYPE))//鍩烘湰灞炴�у瓧娈垫樉绀� + || (StringUtils.isNotBlank(codetemplateAttr.getKeyAttrFlag()) && Boolean.parseBoolean(codetemplateAttr.getKeyAttrFlag()))//鍏抽敭灞炴�х殑瀛樺叆 + || (StringUtils.isNotBlank(codetemplateAttr.getSameRepeatAttrFlag()) && Boolean.parseBoolean(codetemplateAttr.getSameRepeatAttrFlag())) //鐩镐技灞炴�х殑瀛樺叆 + || (StringUtils.isNotBlank(codetemplateAttr.getRequireFlag()) && Boolean.parseBoolean(codetemplateAttr.getRequireFlag())); + if (allFieldToOutNameMap.containsKey(name)) {//濡傛灉瀛樺湪鐨勮瘽鍒欓渶瑕佹牴鎹叿浣撶殑鍘昏祴鍊� + codeBaseAttributeDTO = allFieldToOutNameMap.get(name); + if (StringUtils.isNotBlank(codetemplateAttr.getKeyAttrFlag()) && Boolean.parseBoolean(codetemplateAttr.getKeyAttrFlag())) { + codeBaseAttributeDTO.setKeyAttrFlag(codetemplateAttr.getKeyAttrFlag());//灞炴�у叧閿睘鎬� + } + if (StringUtils.isNotBlank(codetemplateAttr.getRequireFlag()) && Boolean.parseBoolean(codetemplateAttr.getRequireFlag())) { + codeBaseAttributeDTO.setRequireFlag(codetemplateAttr.getRequireFlag());//灞炴�у繀濉」 + } + if (StringUtils.isNotBlank(codetemplateAttr.getSameRepeatAttrFlag()) && Boolean.parseBoolean(codetemplateAttr.getSameRepeatAttrFlag())) { + codeBaseAttributeDTO.setSameRepeatAttrFlag(codetemplateAttr.getSameRepeatAttrFlag());//灞炴�х浉浼煎睘鎬� + } + } else if (res) { + allFieldToOutNameMap.put(name, codetemplateAttr); + } + }); + } + }); + //鏁寸悊濂芥墍鏈夋ā鏉块渶瑕佸啓鍏xecl鐨勫睘鎬т俊鎭� + Workbook workbook = new HSSFWorkbook(); + LinkedList<WriteExcelData> excelDataList = new LinkedList<>(); + if (!CollectionUtils.isEmpty(allFieldToOutNameMap)) { + excelDataList.add(new WriteExcelData(0, 0, "鍒嗙被璺緞")); + final int[] index = {0}; + allFieldToOutNameMap.values().stream().forEach(attrVO -> { + Object text = attrVO.getName(); + text = exportKeyAndRequired(workbook, attrVO, text); + int colIndex = 1 + index[0]++; + WriteExcelData excelData = new WriteExcelData(0, colIndex, text); + if (StringUtils.isNotBlank(attrVO.getCodeDateFormat()) + || VciFieldTypeEnum.VTDateTime.name().equalsIgnoreCase(attrVO.getAttributeDataType()) + || VciFieldTypeEnum.VTDate.name().equalsIgnoreCase(attrVO.getAttributeDataType()) + || VciFieldTypeEnum.VTTime.name().equalsIgnoreCase(attrVO.getAttributeDataType())) { + excelData.setDateFormat(VciDateUtil.DateTimeFormat); + } + if (text instanceof RichTextString) { + excelData.setFontColor(String.valueOf(HSSFColor.HSSFColorPredefined.RED.getIndex())); + } + excelDataList.add(excelData); + if (StringUtils.isNotBlank(attrVO.getEnumString()) || StringUtils.isNotBlank(attrVO.getEnumId())) { + //娣诲姞鏁版嵁鏈夋晥鎬� + List<String> enumValueList = new ArrayList<>(); + enumValueList.add(""); + List<KeyValue> valueList = engineService.listComboboxItems(attrVO); + if (!CollectionUtils.isEmpty(valueList)) { + valueList.stream().forEach(kv -> { + enumValueList.add(kv.getValue()); + }); + } + //榛樿鍔�1涓囨潯 + WriteExcelData ed = new WriteExcelData(1, colIndex, ""); + ed.setRowTo(100); + ed.setColTo(colIndex); + ed.setValidation(true); + ed.setValidationDataList(enumValueList); + ed.setValidationErrorMsg("璇峰湪搴忓垪涓�夋嫨姝g‘鐨勫��"); + excelDataList.add(ed); + } + if (VciFieldTypeEnum.VTBoolean.name().equalsIgnoreCase(attrVO.getAttributeDataType())) { + List<String> booleanList = new ArrayList<>(); + booleanList.add("鏄�"); + booleanList.add("鍚�"); + //榛樿鍔�1涓囨潯 + WriteExcelData ed = new WriteExcelData(1, colIndex, ""); + ed.setRowTo(100); + ed.setColTo(colIndex); + ed.setValidation(true); + ed.setValidationDataList(booleanList); + ed.setValidationErrorMsg("璇峰湪搴忓垪涓�夋嫨姝g‘鐨勫��"); + excelDataList.add(ed); + } + }); + eo.addSheetDataList(codeClassifyVO.getName() + "瀵煎叆妯℃澘", excelDataList); + } + LinkedList<WriteExcelData> classPathList = new LinkedList<>(); + classPathList.add(new WriteExcelData(0, 0, "鍒嗙被灞傜骇")); + + WriteExcelData idPathWriteExcelTitle = new WriteExcelData(0, 1, "鍒嗙被ID璺緞"); + idPathWriteExcelTitle.setWidth(20); + idPathWriteExcelTitle.setCenter(false); + classPathList.add(idPathWriteExcelTitle); + WriteExcelData namePathWriteExcelTitle = new WriteExcelData(0, 2, "鍒嗙被鍚嶇О璺緞"); + namePathWriteExcelTitle.setWidth(20); + namePathWriteExcelTitle.setCenter(false); + classPathList.add(namePathWriteExcelTitle); + + + final int[] rowIndex = {1}; + codeClassifyVOS.stream().forEach(codeClassifyVO1 -> { + classPathList.add(new WriteExcelData(rowIndex[0], 0, codeClassifyVO1.getDataLevel())); + + String idPath = codeClassifyVO1.getIdPath().startsWith("#") ? codeClassifyVO1.getIdPath().substring(1) : codeClassifyVO1.getIdPath(); + WriteExcelData idPathWriteExcelData = new WriteExcelData(rowIndex[0], 1, idPath); + idPathWriteExcelData.setWidth(30); + idPathWriteExcelData.setCenter(false); + classPathList.add(idPathWriteExcelData); + + String namePath = codeClassifyVO1.getNamePath().startsWith("#") ? codeClassifyVO1.getNamePath().substring(1) : codeClassifyVO1.getNamePath(); + WriteExcelData namePathWriteExcelData = new WriteExcelData(rowIndex[0], 2, namePath); + namePathWriteExcelData.setWidth(40); + namePathWriteExcelData.setCenter(false); + classPathList.add(namePathWriteExcelData); + rowIndex[0]++; + }); + + WriteExcelData excelData = new WriteExcelData(); + excelData.setMerged(true); + excelData.setRow(1); + excelData.setRowTo(2); + excelData.setCol(4); + excelData.setColTo(9); + excelData.setCenter(false); + excelData.setReadOnly(true); + excelData.setObj("瀵煎叆鏁版嵁鏃讹紝鍒嗙被璺緞蹇呴』濉啓鍙跺瓙鑺傜偣璺緞\n(閫夋嫨鍙跺瓙鑺傜偣瀵煎叆鍒欎笉闇�瑕佸~鍐欏垎绫昏矾寰�)"); + excelData.setFontColor(String.valueOf(HSSFColor.HSSFColorPredefined.RED.getIndex())); + classPathList.add(excelData); + + eo.addSheetDataList(codeClassifyVO.getName() + "鍒嗙被瀵圭収琛�", classPathList); + + String excelName = LocalFileUtil.getDefaultTempFolder() + File.separator + codeClassifyVO.getName() + "_瀵煎叆妯℃澘.xls"; + // eo.addSheetDataList(templateVOList.size()+"妯℃澘淇℃伅銆愯鍕垮垹闄ゆ垨绉诲姩銆�",tempEDList); + ExcelUtil.writeDataToFile(excelName, eo); + return excelName; + } + /** * 鐢熸垚瀵煎叆鐨勬枃浠� * * @param codeClassifyOid 鍒嗙被鐨勪富閿� - * @param isHistory 鏄惁鍘嗗彶鏁版嵁瀵煎叆 + * @param isHistory 鏄惁鍘嗗彶鏁版嵁瀵煎叆 * @return excel鐨勬枃浠跺湴鍧� */ @Override public String createImportExcel(String codeClassifyOid, boolean isHistory) { - List<CodeClassifyTemplateVO> templateVOList=new ArrayList<>(); - - VciBaseUtil.alertNotNull("瀵煎嚭妯℃澘","瀵煎嚭鐨勯厤缃�",codeClassifyOid,"涓婚搴撳垎绫荤殑涓婚敭"); + List<CodeClassifyTemplateVO> templateVOList = new ArrayList<>(); + VciBaseUtil.alertNotNull("瀵煎嚭妯℃澘", "瀵煎嚭鐨勯厤缃�", codeClassifyOid, "涓婚搴撳垎绫荤殑涓婚敭"); CodeClassifyVO codeClassifyVO = classifyService.getObjectByOid(codeClassifyOid); - if(isHistory){ - templateVOList= templateService.childTemplates(codeClassifyOid); - }else{ + //鑾峰彇鐮佹瀹藉害 + String secWidth = getCodeSegmentWidth(codeClassifyVO.getOid()); + + if (isHistory) { + templateVOList = templateService.childTemplates(codeClassifyOid); + } else { //鎵炬ā鏉� CodeClassifyTemplateVO templateVO = engineService.getUsedTemplateByClassifyOid(codeClassifyOid); templateVOList.add(templateVO); @@ -138,66 +412,76 @@ eo.setAppend(true); //澧炲姞妯℃澘鐨勪俊鎭鍏� LinkedList<WriteExcelData> tempEDList = new LinkedList<>(); - tempEDList.add(new WriteExcelData(0,0,"妯℃澘涓婚敭")); - tempEDList.add(new WriteExcelData(0,1,"妯℃澘浠e彿")); - tempEDList.add(new WriteExcelData(0,2,"妯℃澘鍚嶇О")); - for(int j=0;j<templateVOList.size();j++){ - CodeClassifyTemplateVO templateVO=templateVOList.get(j); + tempEDList.add(new WriteExcelData(0, 0, "妯℃澘涓婚敭")); + tempEDList.add(new WriteExcelData(0, 1, "妯℃澘浠e彿")); + tempEDList.add(new WriteExcelData(0, 2, "妯℃澘鍚嶇О")); + for (int j = 0; j < templateVOList.size(); j++) { + CodeClassifyTemplateVO templateVO = templateVOList.get(j); CodeClassifyTemplateVO codeClassifyTemplateVO = new CodeClassifyTemplateVO(); - BeanUtils.copyProperties(templateVO,codeClassifyTemplateVO); + BeanUtils.copyProperties(templateVO, codeClassifyTemplateVO); //缁勫悎鏍煎紡鐨勪笉瀵煎叆锛� // 鏋氫妇鐨勬彁渚涘簭鍒楃殑閫夋嫨 //鏃堕棿鍏ㄩ儴缁熶竴涓簓yyy-MM-dd HH:mm:ss //鍙傜収鐨勮嚜琛岃緭鍏ュ悕绉� //鍒嗙被娉ㄥ叆鐨勪笉鐢紝閮芥槸瀵煎叆鍚庤嚜鍔ㄥ鐞嗙殑 //缂栫爜锛岀姸鎬佺瓑瀛楁涓嶅鍏� - List<CodeClassifyTemplateAttrVO> templateAttrVOS = codeClassifyTemplateVO.getAttributes().stream().filter(s -> + List<CodeClassifyTemplateAttrVO> codeClassifyTemplateAttrVOList = codeClassifyTemplateVO.getAttributes(); + if (!CollectionUtils.isEmpty(codeClassifyTemplateAttrVOList)) { + if (CollectionUtils.isEmpty(codeClassifyTemplateAttrVOList)) { + throw new VciBaseException("妯℃澘娌℃湁閰嶇疆灞炴��"); + } + } + //鍓旈櫎鎺夐粯璁ょ殑灞炴�э紝浠ュ強琛ㄥ崟涓嶆樉绀虹殑灞炴�� + List<CodeClassifyTemplateAttrVO> templateAttrVOS = codeClassifyTemplateAttrVOList.stream().filter(s -> !DEFAULT_ATTR_LIST.contains(s.getId()) && StringUtils.isBlank(s.getComponentRule()) && StringUtils.isBlank(s.getClassifyInvokeAttr()) && (isHistory || VciBaseUtil.getBoolean(s.getFormDisplayFlag())) ).collect(Collectors.toList()); - if(CollectionUtils.isEmpty(templateAttrVOS)){ + if (CollectionUtils.isEmpty(templateAttrVOS)) { throw new VciBaseException("妯℃澘娌℃湁閰嶇疆浠讳綍銆愯〃鍗曟樉绀恒�戜负銆愭槸銆戠殑灞炴��"); } + 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){ - excelDataList.add(new WriteExcelData(0,0,"鍒嗙被璺緞")); - excelDataList.add(new WriteExcelData(0,1,"鐮佹瀹藉害")); - excelDataList.add(new WriteExcelData(0,2,!CollectionUtils.isEmpty(idAttrVOList)?idAttrVOList.get(0).getName():"浼佷笟缂栫爜")); + if (isHistory) { + excelDataList.add(new WriteExcelData(0, 0, "鍒嗙被璺緞", "")); + excelDataList.add(new WriteExcelData(0, 1, "鐮佹瀹藉害", "")); + excelDataList.add(new WriteExcelData(0, 2, !CollectionUtils.isEmpty(idAttrVOList) ? idAttrVOList.get(0).getName() : "浼佷笟缂栫爜", idAttrVOList.get(0).getId())); + // 濉厖鐮佹 + excelDataList.add(new WriteExcelData(1, 1, secWidth)); } for (int i = 0; i < templateAttrVOS.size(); i++) { CodeClassifyTemplateAttrVO attrVO = templateAttrVOS.get(i); Object text = attrVO.getName(); - text = exportKeyAndRequired(workbook,attrVO,text); - int colIndex = (isHistory?3:0) + i; - WriteExcelData excelData = new WriteExcelData(0, colIndex, text); - if(StringUtils.isNotBlank(attrVO.getCodeDateFormat()) + text = exportKeyAndRequired(workbook, attrVO, text); + int colIndex = (isHistory ? 3 : 0) + i; + WriteExcelData excelData = new WriteExcelData(0, colIndex, text, attrVO.getId()); + if (StringUtils.isNotBlank(attrVO.getCodeDateFormat()) || VciFieldTypeEnum.VTDateTime.name().equalsIgnoreCase(attrVO.getAttributeDataType()) || VciFieldTypeEnum.VTDate.name().equalsIgnoreCase(attrVO.getAttributeDataType()) - ||VciFieldTypeEnum.VTTime.name().equalsIgnoreCase(attrVO.getAttributeDataType())){ + || VciFieldTypeEnum.VTTime.name().equalsIgnoreCase(attrVO.getAttributeDataType())) { excelData.setDateFormat(VciDateUtil.DateTimeFormat); } - if(text instanceof RichTextString){ + if (text instanceof RichTextString) { excelData.setFontColor(String.valueOf(HSSFColor.HSSFColorPredefined.RED.getIndex())); } excelDataList.add(excelData); - if(StringUtils.isNotBlank(attrVO.getEnumString()) || StringUtils.isNotBlank(attrVO.getEnumId())){ + if (StringUtils.isNotBlank(attrVO.getEnumString()) || StringUtils.isNotBlank(attrVO.getEnumId())) { //娣诲姞鏁版嵁鏈夋晥鎬� List<String> enumValueList = new ArrayList<>(); enumValueList.add(""); List<KeyValue> valueList = engineService.listComboboxItems(attrVO); - if(!CollectionUtils.isEmpty(valueList)){ - valueList.stream().forEach(kv->{ + if (!CollectionUtils.isEmpty(valueList)) { + valueList.stream().forEach(kv -> { enumValueList.add(kv.getValue()); }); } //榛樿鍔�1涓囨潯 - WriteExcelData ed = new WriteExcelData(1,colIndex,""); + WriteExcelData ed = new WriteExcelData(1, colIndex, ""); ed.setRowTo(100); ed.setColTo(colIndex); ed.setValidation(true); @@ -205,13 +489,13 @@ ed.setValidationErrorMsg("璇峰湪搴忓垪涓�夋嫨姝g‘鐨勫��"); excelDataList.add(ed); } - if(VciFieldTypeEnum.VTBoolean.name().equalsIgnoreCase(attrVO.getAttributeDataType())){ + if (VciFieldTypeEnum.VTBoolean.name().equalsIgnoreCase(attrVO.getAttributeDataType())) { List<String> booleanList = new ArrayList<>(); booleanList.add("鏄�"); booleanList.add("鍚�"); //榛樿鍔�1涓囨潯 - WriteExcelData ed = new WriteExcelData(1,colIndex,""); + WriteExcelData ed = new WriteExcelData(1, colIndex, ""); ed.setRowTo(100); ed.setColTo(colIndex); ed.setValidation(true); @@ -220,41 +504,284 @@ excelDataList.add(ed); } } - eo.addSheetDataList(j+templateVO.getName(),excelDataList); - tempEDList.add(new WriteExcelData(j+1,0,templateVO.getOid())); - tempEDList.add(new WriteExcelData(j+1,1,templateVO.getId())); - tempEDList.add(new WriteExcelData(j+1,2,templateVO.getName())); + eo.addSheetDataList(j + templateVO.getName(), excelDataList); + tempEDList.add(new WriteExcelData(j + 1, 0, templateVO.getOid())); + tempEDList.add(new WriteExcelData(j + 1, 1, templateVO.getId())); + tempEDList.add(new WriteExcelData(j + 1, 2, templateVO.getName())); } - String excelName = LocalFileUtil.getDefaultTempFolder() + File.separator + codeClassifyVO.getName() + (isHistory?"_鍘嗗彶鏁版嵁瀵煎叆妯℃澘.xls": "_瀵煎叆妯℃澘.xls"); - eo.addSheetDataList(templateVOList.size()+"妯℃澘淇℃伅銆愯鍕垮垹闄ゆ垨绉诲姩銆�",tempEDList); - ExcelUtil.writeDataToFile(excelName,eo); + String excelName = LocalFileUtil.getDefaultTempFolder() + File.separator + codeClassifyVO.getName() + (isHistory ? "_鍘嗗彶鏁版嵁瀵煎叆妯℃澘.xls" : "_瀵煎叆妯℃澘.xls"); + eo.addSheetDataList(templateVOList.size() + "妯℃澘淇℃伅銆愯鍕垮垹闄ゆ垨绉诲姩銆�", tempEDList); + ExcelUtil.writeDataToFile(excelName, eo); return excelName; } /** - * 瀵煎嚭鐨勬椂鍊欏皝瑁呭繀杈撳拰鍏抽敭灞炴�� - * @param attrVO 灞炴�х殑鏄剧ず瀵硅薄 - * @param text 鍗曞厓鏍肩殑鍊� + * 鐢熸垚鎵归噺淇敼瀵煎叆鐨勬枃浠� + * + * @param codeClassifyOid 鍒嗙被鐨勪富閿� + * @return excel鐨勬枃浠跺湴鍧� */ - private Object exportKeyAndRequired(Workbook workbook,CodeClassifyTemplateAttrVO attrVO,Object text){ + @Override + public String downloadImportExcelBatchEdit(String codeClassifyOid) { + List<CodeClassifyTemplateVO> templateVOList = new ArrayList<>(); + VciBaseUtil.alertNotNull("瀵煎嚭妯℃澘", "瀵煎嚭鐨勯厤缃�", codeClassifyOid, "涓婚搴撳垎绫荤殑涓婚敭"); + + CodeClassifyVO codeClassifyVO = classifyService.getObjectByOid(codeClassifyOid); + + templateVOList = templateService.childTemplates(codeClassifyOid); + + WriteExcelOption eo = new WriteExcelOption(); + eo.setAppend(true); + //澧炲姞妯℃澘鐨勪俊鎭鍏� + LinkedList<WriteExcelData> tempEDList = new LinkedList<>(); + tempEDList.add(new WriteExcelData(0, 0, "缂栧彿")); + for (int j = 0; j < templateVOList.size(); j++) { + CodeClassifyTemplateVO templateVO = templateVOList.get(j); + CodeClassifyTemplateVO codeClassifyTemplateVO = new CodeClassifyTemplateVO(); + BeanUtils.copyProperties(templateVO, codeClassifyTemplateVO); + //缁勫悎鏍煎紡鐨勪笉瀵煎叆锛� + // 鏋氫妇鐨勬彁渚涘簭鍒楃殑閫夋嫨 + //鏃堕棿鍏ㄩ儴缁熶竴涓簓yyy-MM-dd HH:mm:ss + //鍙傜収鐨勮嚜琛岃緭鍏ュ悕绉� + //鍒嗙被娉ㄥ叆鐨勪笉鐢紝閮芥槸瀵煎叆鍚庤嚜鍔ㄥ鐞嗙殑 + //缂栫爜锛岀姸鎬佺瓑瀛楁涓嶅鍏� + List<CodeClassifyTemplateAttrVO> codeClassifyTemplateAttrVOList = codeClassifyTemplateVO.getAttributes(); + if (!CollectionUtils.isEmpty(codeClassifyTemplateAttrVOList)) { + if (CollectionUtils.isEmpty(codeClassifyTemplateAttrVOList)) { + throw new VciBaseException("妯℃澘娌℃湁閰嶇疆灞炴��"); + } + } + List<CodeClassifyTemplateAttrVO> templateAttrVOS = codeClassifyTemplateAttrVOList.stream().filter(s -> + !DEFAULT_ATTR_LIST.contains(s.getId()) + && StringUtils.isBlank(s.getComponentRule()) + && StringUtils.isBlank(s.getClassifyInvokeAttr()) + && (VciBaseUtil.getBoolean(s.getFormDisplayFlag())) + ).collect(Collectors.toList()); + + if (CollectionUtils.isEmpty(templateAttrVOS)) { + throw new VciBaseException("妯℃澘娌℃湁閰嶇疆浠讳綍銆愯〃鍗曟樉绀恒�戜负銆愭槸銆戠殑灞炴��"); + } + +// 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){ + excelDataList.add(new WriteExcelData(0, 0, "缂栫爜(id)", "")); +// excelDataList.add(new WriteExcelData(0,1,"鐮佹瀹藉害","")); +// excelDataList.add(new WriteExcelData(0,1,!CollectionUtils.isEmpty(idAttrVOList)?idAttrVOList.get(0).getName():"浼佷笟缂栫爜",idAttrVOList.get(0).getId())); +// } + for (int i = 0; i < templateAttrVOS.size(); i++) { + CodeClassifyTemplateAttrVO attrVO = templateAttrVOS.get(i); + + Object text = attrVO.getName(); + text = exportKeyAndRequired(workbook, attrVO, text); + int colIndex = 1 + i; + WriteExcelData excelData = new WriteExcelData(0, colIndex, text, attrVO.getId()); + if (StringUtils.isNotBlank(attrVO.getCodeDateFormat()) + || VciFieldTypeEnum.VTDateTime.name().equalsIgnoreCase(attrVO.getAttributeDataType()) + || VciFieldTypeEnum.VTDate.name().equalsIgnoreCase(attrVO.getAttributeDataType()) + || VciFieldTypeEnum.VTTime.name().equalsIgnoreCase(attrVO.getAttributeDataType())) { + excelData.setDateFormat(VciDateUtil.DateTimeFormat); + } + if (text instanceof RichTextString) { + excelData.setFontColor(String.valueOf(HSSFColor.HSSFColorPredefined.RED.getIndex())); + } + excelDataList.add(excelData); + if (StringUtils.isNotBlank(attrVO.getEnumString()) || StringUtils.isNotBlank(attrVO.getEnumId())) { + //娣诲姞鏁版嵁鏈夋晥鎬� + List<String> enumValueList = new ArrayList<>(); + enumValueList.add(""); + List<KeyValue> valueList = engineService.listComboboxItems(attrVO); + if (!CollectionUtils.isEmpty(valueList)) { + valueList.stream().forEach(kv -> { + enumValueList.add(kv.getValue()); + }); + } + //榛樿鍔�1涓囨潯 + WriteExcelData ed = new WriteExcelData(1, colIndex, ""); + ed.setRowTo(100); + ed.setColTo(colIndex); + ed.setValidation(true); + ed.setValidationDataList(enumValueList); + ed.setValidationErrorMsg("璇峰湪搴忓垪涓�夋嫨姝g‘鐨勫��"); + excelDataList.add(ed); + } + if (VciFieldTypeEnum.VTBoolean.name().equalsIgnoreCase(attrVO.getAttributeDataType())) { + List<String> booleanList = new ArrayList<>(); + + booleanList.add("鏄�"); + booleanList.add("鍚�"); + //榛樿鍔�1涓囨潯 + WriteExcelData ed = new WriteExcelData(1, colIndex, ""); + ed.setRowTo(100); + ed.setColTo(colIndex); + ed.setValidation(true); + ed.setValidationDataList(booleanList); + ed.setValidationErrorMsg("璇峰湪搴忓垪涓�夋嫨姝g‘鐨勫��"); + excelDataList.add(ed); + } + } + eo.addSheetDataList(j + templateVO.getName(), excelDataList); + tempEDList.add(new WriteExcelData(j + 1, 0, templateVO.getOid())); + tempEDList.add(new WriteExcelData(j + 1, 1, templateVO.getId())); + tempEDList.add(new WriteExcelData(j + 1, 2, templateVO.getName())); + } + String excelName = LocalFileUtil.getDefaultTempFolder() + File.separator + codeClassifyVO.getName() + ("_灞炴�ф壒閲忎慨鏀规ā鏉�.xls"); + eo.addSheetDataList(templateVOList.size() + "妯℃澘淇℃伅銆愯鍕垮垹闄ゆ垨绉诲姩銆�", tempEDList); + ExcelUtil.writeDataToFile(excelName, eo); + return excelName; + } + + /** + * 鑾峰彇鐮佹瀹藉害 + * + * @param codeClassifyOid + * @return + */ + private String getCodeSegmentWidth(String codeClassifyOid) { + CodeClassifyFullInfoBO classifyFullInfoBO = classifyService.getClassifyFullInfo(codeClassifyOid); + // 瑕佽幏鍙栫爜娈靛搴︼紝鍏堣鑾峰彇瑙勫垯锛屽綋鍓嶆病鏈夊線涓婃壘 + CodeRuleVO codeRuleByClassifyFullInfo = mdmEngineService.getCodeRuleByClassifyFullInfo(classifyService.getClassifyFullInfo(codeClassifyOid)); + List<CodeBasicSecVO> secVOList = codeRuleByClassifyFullInfo.getSecVOList(); + if (secVOList.isEmpty()) { + return ""; + } + StringBuffer secWidth = new StringBuffer(""); + secVOList.stream().forEach(item -> { + switch (item.getSecType().toLowerCase(Locale.ROOT)) { + case "codeclassifysec": + case "codevariablesec": + case "coderefersec": + case "codefixedsec": + case "codeattrsec": + case "codeserialsec": + countSecWith(item, secWidth); + break; + case "codelevelsec": + //灞傜骇鐮佹锛岄渶瑕佷粠鍒嗙被涓婅幏鍙栫浉搴旂殑淇℃伅 + String secValue = ""; + if (CodeLevelTypeEnum.MIN.getValue().equalsIgnoreCase(item.getCodeLevelType())) { + //鏈�灏忓眰锛屽洜涓烘垜浠彧鑳藉湪鍙跺瓙鑺傜偣涓婄敵璇风紪鐮侊紝鎵�浠ヨ繖涓氨鏄綋鍓嶅垎绫荤殑 + if (CodeGetValueTypeEnum.CURRENT.getValue().equalsIgnoreCase(item.getCodeGetValueType()) || CollectionUtils.isEmpty(classifyFullInfoBO.getParentClassifyVOs())) { + //灏辨槸褰撳墠鍒嗙被鐨� + secValue = classifyFullInfoBO.getCurrentClassifyVO().getId(); + } else { + //鎴戜滑闇�瑕佷粠椤跺眰寮�濮嬫壘鍒板綋鍓嶅垎绫讳负姝� + secValue = classifyFullInfoBO.getParentClassifyVOs().stream().sorted(((o1, o2) -> -o1.getDataLevel().compareTo(o2.getDataLevel()))).map(CodeClassifyVO::getId).collect(Collectors.joining()) + classifyFullInfoBO.getCurrentClassifyVO().getId(); + } + } else { + //鎸囧畾灞傦紝鎴戜滑闇�瑕侀�氳繃涓婄骇鐨勬潵鑾峰彇 + if (CollectionUtils.isEmpty(classifyFullInfoBO.getParentClassifyVOs())) { + //璇存槑褰撳墠宸茬粡鏄渶楂樼殑浜� + secValue = classifyFullInfoBO.getCurrentClassifyVO().getId(); + } else { + //杩欎釜鎴戜滑闇�瑕佺湅鐪�,灞傜骇鏄笉鏄ぇ浜庝簡鏈�澶у眰绾х殑鏁� + List<CodeClassifyVO> parentClassifyVOList = classifyFullInfoBO.getParentClassifyVOs().stream().sorted(((o1, o2) -> -o1.getDataLevel().compareTo(o2.getDataLevel()))).collect(Collectors.toList()); + if (item.getCodeLevelValue() > (parentClassifyVOList.size() + 1)) { + //鎸囧畾鐨勫眰绾ф瘮褰撳墠鐨勫眰绾ц繕澶т簡锛屾墍浠ュ彧鑳借幏鍙栧綋鍓嶅眰绾т簡 + if (CodeGetValueTypeEnum.CURRENT.getValue().equalsIgnoreCase(item.getCodeGetValueType())) { + secValue = classifyFullInfoBO.getCurrentClassifyVO().getId(); + } else { + secValue = parentClassifyVOList.stream().map(CodeClassifyVO::getId).collect(Collectors.joining()) + classifyFullInfoBO.getCurrentClassifyVO().getId(); + } + } else { + //鎴戜滑鑾峰彇鍏朵腑鎸囧畾灞傜殑鍐呭 + if (CodeGetValueTypeEnum.CURRENT.getValue().equalsIgnoreCase(item.getCodeGetValueType())) { + CodeClassifyVO classifyVO = parentClassifyVOList.stream().filter(s -> s.getDataLevel().intValue() == item.getCodeLevelValue().intValue()).findFirst().orElseGet(() -> null); + if (classifyVO != null) { + secValue = classifyVO.getId(); + } + } else { + //灏忎簬绛変簬鐨勫叏閮ㄦ嬁鍑烘潵 + secValue = parentClassifyVOList.stream().filter(s -> s.getDataLevel().intValue() <= item.getCodeLevelValue().intValue()).sorted(((o1, o2) -> -o1.getDataLevel().compareTo(o2.getDataLevel()))).map(CodeClassifyVO::getId).collect(Collectors.joining()); + } + } + } + } + //鐪嬬湅闀垮害鏄惁闇�瑕佹埅鏂� + if (!CodeCutTypeEnum.NONE.getValue().equalsIgnoreCase(item.getValueCutType()) && + item.getValueCutLength() != null && item.getValueCutLength() > 0 && secValue.length() > item.getValueCutLength()) { + if (CodeCutTypeEnum.RIGHT.getValue().equalsIgnoreCase(item.getValueCutType())) { + //宸︽埅鍙栨槸浠庡乏杈瑰壀鎺夛紝鍙虫埅鍙栨槸浠庡彸杈瑰壀鎺�--淇濈暀宸﹁竟 + secValue = secValue.substring(0, item.getValueCutLength()); + } else { + secValue = secValue.substring(secValue.length() - item.getValueCutLength()); + } + } + secValue = productCodeService.joinPreffixAndSuffix(item, secValue); + secWidth.append(secValue.length()).append("#"); + break; + case "codedatesec": + String dateFormatStr = item.getCodeDateFormatStr(); + if (Func.isNotEmpty(dateFormatStr)) { + // 鑾峰彇褰撳墠鏃堕棿 + Date currentDate = new Date(); + // 鎸囧畾鏃ユ湡鏍煎紡 + SimpleDateFormat dateFormat = new SimpleDateFormat(dateFormatStr); + // 灏嗗綋鍓嶆椂闂磋浆鎹负鎸囧畾鏃ユ湡鏍煎紡 + // 浣跨敤姝e垯琛ㄨ揪寮忓幓鎺夐櫎鏁板瓧浠ュ鐨勬墍鏈夊瓧绗︿覆 + String cleanedDate = dateFormat.format(currentDate).replaceAll("[^0-9]", ""); + int width = cleanedDate.length(); + if (Func.isNotEmpty(item.getPrefixCode())) { + width += item.getPrefixCode().length(); + } + if (Func.isNotEmpty(item.getSuffixCode())) { + width += item.getSuffixCode().length(); + } + secWidth.append(width).append("#"); + } + break; + } + }); + return secWidth.toString().substring(0, secWidth.length() - 1); + } + + /** + * 璁$畻鐮佹闀垮害鍔犲墠鍚庣紑鐨勯暱搴� + * + * @param codeBasicSecVO + * @param secWidth + */ + private void countSecWith(CodeBasicSecVO codeBasicSecVO, StringBuffer secWidth) { + if (Func.isNotEmpty(codeBasicSecVO.getCodeSecLength())) { + int width = VciBaseUtil.getInt(codeBasicSecVO.getCodeSecLength()); + if (Func.isNotEmpty(codeBasicSecVO.getPrefixCode())) { + width += codeBasicSecVO.getPrefixCode().length(); + } + if (Func.isNotEmpty(codeBasicSecVO.getSuffixCode())) { + width += codeBasicSecVO.getSuffixCode().length(); + } + secWidth.append(width).append("#"); + } else { + secWidth.append(0).append("#"); + } + } + + /** + * 瀵煎嚭鐨勬椂鍊欏皝瑁呭繀杈撳拰鍏抽敭灞炴�� + * + * @param attrVO 灞炴�х殑鏄剧ず瀵硅薄 + * @param text 鍗曞厓鏍肩殑鍊� + */ + private Object exportKeyAndRequired(Workbook workbook, CodeClassifyTemplateAttrVO attrVO, Object text) { //蹇呰緭鍔�*锛屽叧閿睘鎬т负钃濊壊 if (VciBaseUtil.getBoolean(attrVO.getRequireFlag()) || VciBaseUtil.getBoolean(attrVO.getKeyAttrFlag())) { String value = text.toString(); - if(VciBaseUtil.getBoolean(attrVO.getRequireFlag())) { + if (VciBaseUtil.getBoolean(attrVO.getRequireFlag())) { value += REQUIRED_CHAR; } - if(VciBaseUtil.getBoolean(attrVO.getKeyAttrFlag())){ + if (VciBaseUtil.getBoolean(attrVO.getKeyAttrFlag())) { value += KEY_ATTR_CHAR; } RichTextString ts = new HSSFRichTextString(value); - if(VciBaseUtil.getBoolean(attrVO.getRequireFlag())){ - Font font = workbook.createFont(); + if (VciBaseUtil.getBoolean(attrVO.getRequireFlag())) { + Font font = workbook.createFont(); font.setColor(HSSFColor.HSSFColorPredefined.RED.getIndex()); ts.applyFont(font); } - if(VciBaseUtil.getBoolean(attrVO.getKeyAttrFlag())){ - Font font = workbook.createFont(); + if (VciBaseUtil.getBoolean(attrVO.getKeyAttrFlag())) { + Font font = workbook.createFont(); font.setColor(HSSFColor.HSSFColorPredefined.BLUE.getIndex()); ts.applyFont(font); } @@ -263,25 +790,24 @@ return text; } - /** * 鎵归噺鐢宠缂栫爜鏁版嵁 * * @param orderDTO 缂栫爜鐢宠淇℃伅锛屽繀椤诲寘鍚垎绫讳富閿拰鐮佹鐨勪俊鎭� * @param file excel鏂囦欢鐨勪俊鎭� - * @return 鏈夐敊璇俊鎭殑excel鐨勬枃浠� + * @return 鏈夐敊璇俊鎭殑excel鐨勬枃浠� */ @Override - public CodeImProtRusultVO batchImportCode(CodeOrderDTO orderDTO, File file) { - VciBaseUtil.alertNotNull(orderDTO,"缂栫爜鐢宠鐩稿叧鐨勬暟鎹�",orderDTO.getCodeClassifyOid(),"涓婚搴撳垎绫讳富閿�"); + public CodeImProtRusultVO batchImportCode(CodeOrderDTO orderDTO, File file) throws Exception { + VciBaseUtil.alertNotNull(orderDTO, "缂栫爜鐢宠鐩稿叧鐨勬暟鎹�", orderDTO.getCodeClassifyOid(), "涓婚搴撳垎绫讳富閿�"); ReadExcelOption reo = new ReadExcelOption(); reo.setReadAllSheet(true); - List<SheetDataSet> sheetDataSetList = ExcelUtil.readDataObjectFromExcel(file,null,reo); - if(CollectionUtils.isEmpty(sheetDataSetList) || CollectionUtils.isEmpty(sheetDataSetList.get(0).getRowData()) - ||sheetDataSetList.get(0).getRowData().size()<1){ + List<SheetDataSet> sheetDataSetList = ExcelUtil.readDataObjectFromExcel(file, null, reo); + if (CollectionUtils.isEmpty(sheetDataSetList) || CollectionUtils.isEmpty(sheetDataSetList.get(0).getRowData()) + || sheetDataSetList.get(0).getRowData().size() < 1) { throw new VciBaseException("娌℃湁璇诲彇鍒颁换浣曠殑鏁版嵁"); } - if(sheetDataSetList.size()>LIMIT+1){ + if (sheetDataSetList.size() > LIMIT + 1) { throw new VciBaseException("涓轰簡淇濊瘉绯荤粺鐨勭ǔ瀹氭�э紝璇蜂竴娆′笉瑕佸鍏ヨ秴杩�1涓囨潯鐨勬暟鎹�"); } //鍏堟壘鍒版瘡涓�琛岀殑鏍囬锛岀劧鍚庢牴鎹爣棰樻潵鑾峰彇瀵瑰簲鐨勫睘鎬� @@ -290,53 +816,838 @@ CodeClassifyTemplateVO templateVO = engineService.getUsedTemplateByClassifyOid(orderDTO.getCodeClassifyOid()); //鏍¢獙妯℃澘鏄笉鏄渶鏂扮殑 - checkTemplateSync(sheetDataSetList,templateVO,0); + checkTemplateSync(sheetDataSetList, templateVO, 0); //鍏堜笉鐢ㄧ灞炴�ф槸鍚﹂兘瀛樺湪锛屽厛杞崲涓�涓嬫暟鎹� - Map<String,String> errorMap = new HashMap<>(); - String redisUUid=batchImportCodes(orderDTO,templateVO,dataSet,errorMap,true); + Map<String, String> errorMap = new ConcurrentHashMap<>(); + String redisUUid = batchImportCodes(orderDTO, templateVO, dataSet, errorMap, true); CodeImProtRusultVO codeImProtRusultVO = new CodeImProtRusultVO(); List<String> needRowIndexList = new ArrayList<>(); String filePath = returnErrorToExcel(dataSet.getRowData(), errorMap, needRowIndexList, dataSet.getColName()); - if(StringUtils.isNotBlank(filePath)) { + if (StringUtils.isNotBlank(filePath)) { codeImProtRusultVO.setFilePath(filePath); } - if(StringUtils.isNotBlank(redisUUid)){ + if (StringUtils.isNotBlank(redisUUid)) { codeImProtRusultVO.setRedisUuid(redisUUid); } // return null; return codeImProtRusultVO; } + /*** + * 浠庨《灞傛壒閲忕敵璇峰鍏ユ柟娉� + * @param codeClassifyOid 鍒嗙被鐨勪富閿� + * @param classifyAttr 鍒嗙被璺緞浣跨敤鐨勫睘鎬� + * @param file excel鏂囦欢鐨勪俊鎭� + * @return + */ + @Override + public CodeImProtRusultVO batchTopImportCode(String codeClassifyOid, String classifyAttr, File file) { + VciBaseUtil.alertNotNull(codeClassifyOid, "鍒嗙被鐨勪富閿�"); + ReadExcelOption reo = new ReadExcelOption(); + reo.setReadAllSheet(true); + List<SheetDataSet> sheetDataSetList = ExcelUtil.readDataObjectFromExcel(file, null, reo); + if (CollectionUtils.isEmpty(sheetDataSetList) || CollectionUtils.isEmpty(sheetDataSetList.get(0).getRowData()) + || sheetDataSetList.get(0).getRowData().size() < 1) { + throw new VciBaseException("娌℃湁璇诲彇鍒颁换浣曠殑鏁版嵁"); + } + if (sheetDataSetList.size() > LIMIT + 1) { + throw new VciBaseException("涓轰簡淇濊瘉绯荤粺鐨勭ǔ瀹氭�э紝璇蜂竴娆′笉瑕佸鍏ヨ秴杩�1涓囨潯鐨勬暟鎹�"); + } + //鍏堟壘鍒版瘡涓�琛岀殑鏍囬锛岀劧鍚庢牴鎹爣棰樻潵鑾峰彇瀵瑰簲鐨勫睘鎬� + SheetDataSet dataSet = sheetDataSetList.get(0); + CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(codeClassifyOid); + //鑾峰彇褰撳墠妯℃澘 + CodeClassifyTemplateVO selectCodeClassifyTemplateVO = engineService.getUsedTemplateByClassifyOid(codeClassifyOid); + Map<String, List<ColumnVO>> templateColumnVOMap = new HashMap<>(); + createTemplate(selectCodeClassifyTemplateVO, templateColumnVOMap); + + List<CodeClassifyVO> childClassifyVOs = classifyService.listChildrenClassify(codeClassifyOid, true, classifyAttr, true); + Map<String/**璺緞**/, CodeClassifyVO> pathMap = Optional.ofNullable(childClassifyVOs).orElseGet(() -> new ArrayList<>()).stream().collect(Collectors.toMap(s -> s.getPath().startsWith("#") ? s.getPath().substring(1) : s.getPath(), t -> t)); + pathMap.put("#current#", classifyFullInfo.getCurrentClassifyVO()); + List<String> titleRowData = dataSet.getColName(); + Map<String, String> errorMap = new ConcurrentHashMap<>(); + //棣栧厛灏嗘暟鎹互妯℃澘鐨勫舰寮忓垎寮� + LinkedHashMap<String, List<CodeImprotDataVO>> codeclassifyDataMap = new LinkedHashMap<>(); + List<CodeImprotDataVO> codeClassifyDatas = new ArrayList<>(); + createExeclClassData(dataSet, pathMap, errorMap, codeClassifyDatas); + + //鏍规嵁妯℃澘灏嗘暟鎹暣鍚堝湪涓�璧凤紝鍘绘牎楠� + Map<String/**妯℃澘oid**/, List<CodeImprotDataVO>/**鏁版嵁瀵硅薄**/> templateDatasMap = codeClassifyDatas.stream().collect(Collectors.toMap(CodeImprotDataVO::getTemplateOid, s -> { + List<CodeImprotDataVO> l = new ArrayList<>(); + l.add(s); + return l; + }, (List<CodeImprotDataVO> s1, List<CodeImprotDataVO> s2) -> { + s1.addAll(s2); + return s1; + })); + String uuid = VciBaseUtil.getPk(); + List<CodeImportTemplateVO> codeImportTemplateVOS = new ArrayList<>(); + Map<String, CodeImportTemplateVO> codeRuleMap = new HashMap<>(); + + //鐩镐技鏁版嵁 + // Map<String,String>wpResembleMap=new HashMap<>(); + // List<CodeImprotDataVO> wpCodeImprotDataVOList=new ArrayList<>(); + //鎸夌収妯℃澘鍘绘暣鐞嗘暟鎹� + templateDatasMap.keySet().stream().forEach(templateVOOid -> { + List<CodeImprotDataVO> codeImprotDataVOS = templateDatasMap.get(templateVOOid); + CodeClassifyTemplateVO templateVO = templateService.getObjectHasAttrByOid(templateVOOid); + + //闄ゅ幓榛樿鐨勫睘鎬�.杩樻湁鍙湁琛ㄥ崟鏄剧ず鐨勫瓧娈垫墠瀵煎叆 + List<CodeClassifyTemplateAttrVO> attrVOS = templateVO.getAttributes().stream().filter(s -> + !DEFAULT_ATTR_LIST.contains(s.getId()) && + ((Func.isNotEmpty(s.getClassifyInvokeAttr()) || Func.isNotEmpty(s.getClassifyInvokeAttrName())) || VciBaseUtil.getBoolean(s.getFormDisplayFlag())) + ).collect(Collectors.toList()); + + Map<String/**妯℃澘灞炴�у瓧娈祇id**/, String /**妯℃澘灞炴�у閮ㄥ悕绉�**/> fieldNameMap = attrVOS.stream().collect(Collectors.toMap(CodeClassifyTemplateAttrVO::getId, s -> s.getName())); + + List<ClientBusinessObject> allCboList = new ArrayList<>(); + codeImprotDataVOS.stream().forEach(codeImprotDataVO -> { + List<ColumnVO> columnVOList = new ArrayList(); + String templateOid = selectCodeClassifyTemplateVO.getOid(); + if (templateColumnVOMap.containsKey(templateOid)) { + columnVOList = columnVOList = templateColumnVOMap.get(templateOid); + } else { + createTemplate(templateVO, templateColumnVOMap); + columnVOList = columnVOList = templateColumnVOMap.get(templateOid); + } + String codeRuleOid = codeImprotDataVO.getCodeRuleOid(); + if (!codeRuleMap.containsKey(codeRuleOid)) { + CodeImportTemplateVO codeImportTemplateVO = new CodeImportTemplateVO(); + codeImportTemplateVO.setRoot(false); + codeImportTemplateVO.setCodeClassifyOid(codeImprotDataVO.getCodeClassifyOid()); + codeImportTemplateVO.setCodeRuleOid(codeImprotDataVO.getCodeRuleOid()); + codeImportTemplateVO.setCodeTemplateOid(codeImprotDataVO.getTemplateOid()); + codeImportTemplateVO.setCodeClassifyVO(codeImprotDataVO.getCodeClassifyVO()); + codeImportTemplateVO.setCodeClassifyTemplateVO(codeImprotDataVO.getCodeClassifyTemplateVO()); + codeImportTemplateVO.setCodeRuleVO(codeImprotDataVO.getCodeRuleVO()); + List<String> colNames = codeImprotDataVO.getColNames(); + codeImportTemplateVO.setCloNamesList(columnVOList); + codeImportTemplateVOS.add(codeImportTemplateVO); + codeRuleMap.put(codeRuleOid, codeImportTemplateVO); + } + List<ClientBusinessObject> cboList = new ArrayList<>(); + excelToCbo(classifyFullInfo, codeImprotDataVO, cboList, true); + allCboList.addAll(cboList); + //寰�閫夋嫨鐨勮妭鐐归噷闈㈠姞鏁版嵁 + // CodeImprotDataVO wpcodeImprotDataVO=new CodeImprotDataVO(); + // BeanUtilForVCI.copyPropertiesIgnoreCase(codeImprotDataVO,wpcodeImprotDataVO); + /* wpcodeImprotDataVO.setCodeClassifyOid(codeClassifyOid); + wpcodeImprotDataVO.setCodeClassifyVO(classifyFullInfo.getCurrentClassifyVO()); + wpcodeImprotDataVO.setCodeClassifyTemplateVO(selectCodeClassifyTemplateVO); + wpcodeImprotDataVO.setCodeRuleOid(classifyFullInfo.getCurrentClassifyVO().getCoderuleoid());*/ + // wpCodeImprotDataVOList.add(wpcodeImprotDataVO);//寰�鐗╁搧瀵硅薄閲屾坊鍔� + + }); + + //閮借浆鎹㈠畬浜嗐�傞渶瑕佹壒閲忔鏌� + //濡傛灉鍑洪敊浜嗭紝鎴戜滑渚濈劧鎵ц鏈夋晥鐨勬暟鎹紝鏃犳晥鐨勬暟鎹啓鍥炲埌excel涓� + //2.鍒ゆ柇蹇呰緭椤广�傘�傞渶瑕佸叏閮ㄧ殑灞炴�э紝濡傛灉鏄繀杈擄紝浣嗘槸琛ㄥ崟閲岄潰涓嶆樉绀虹殑锛屽彧鑳芥槸鍒嗙被娉ㄥ叆鎴栬�呯粍鍚堣鍒� + batchCheckRequiredAttrOnOrder(templateVO, allCboList, errorMap); + //3.鍒ゆ柇鍏抽敭灞炴�� + CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, templateVO, allCboList, false, errorMap); + Set<String> selfRepeatRowIndexList = keyResultVO.getSelfRepeatRowIndexList(); + Set<String> keyAttrRepeatRowIndexList = keyResultVO.getKeyAttrRepeatRowIndexList(); + if (!CollectionUtils.isEmpty(selfRepeatRowIndexList)) { + selfRepeatRowIndexList.stream().forEach(rowIndex -> { + errorMap.put(rowIndex, errorMap.getOrDefault(rowIndex, "") + String.format(";鍦ㄥ綋鍓嶅鐞嗙殑鏁版嵁鏂囦欢涓叧閿睘鎬ч噸澶峓%s],[%s];", keyResultVO.getKeyAttrRuleInfo(), keyResultVO.getSynonymRuleInfo())); + }); + } + if (!CollectionUtils.isEmpty(keyAttrRepeatRowIndexList)) { + keyAttrRepeatRowIndexList.stream().forEach(rowIndex -> { + errorMap.put(rowIndex, errorMap.getOrDefault(rowIndex, "") + String.format("鍏抽敭灞炴�т笌绯荤粺涓殑閲嶅[%s],[%s];", keyResultVO.getKeyAttrRuleInfo(), keyResultVO.getSynonymRuleInfo())); + }); + } + //鍒嗙被娉ㄥ叆 + // batchSwitchClassifyAttrOnOrder(attrVOS,allCboList,classifyFullInfo,false); + //boolean + reSwitchBooleanAttrOnOrder(attrVOS, allCboList); + //4.鏍¢獙瑙勫垯 + batchCheckVerifyOnOrder(attrVOS, allCboList, errorMap); + //鏄惁闇�瑕佹牎楠屾灇涓�/鍙傜収 + //5.鏍¢獙鏋氫妇鏄惁姝g‘ + batchSwitchEnumAttrOnOrder(attrVOS, allCboList, errorMap); + //7.澶勭悊鍙傜収鐨勬儏鍐� + batchSwitchReferAttrOnOrder(attrVOS, allCboList, errorMap); + + //6.鏃堕棿鏍煎紡鐨勯獙璇� + //6.鏃堕棿鐨勶紝蹇呴』缁熶竴涓簓yyy-MM-dd HH:mm:ss + batchSwitchDateAttrOnOrder(attrVOS, allCboList, errorMap); + //璁剧疆榛樿鍊� + batchSwitchAttrDefault(attrVOS, allCboList); + //鏈�鍚庡紕缁勫悎瑙勫垯 + batchSwitchComponentAttrOnOrder(attrVOS, allCboList); + + Map<String, ClientBusinessObject> rowIndexCboMap = allCboList.stream().filter(cbo -> cbo != null).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getAttributeValue((IMPORT_ROW_INDEX)), t -> t)); + + List<ClientBusinessObject> needSaveCboList = allCboList.stream().filter(cbo -> { + String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX); + return !errorMap.containsKey(rowIndex); + }).collect(Collectors.toList()); + //鐩镐技鏍¢獙 + Map<String, String> resembleMap = new HashMap<>(); + List<DataResembleVO> dataResembleVOS = new ArrayList<>(); + String btmtypeid = classifyFullInfo.getTopClassifyVO().getBtmTypeId(); + //鐩镐技椤规煡璇㈣鍒� + bathcResembleQuery(codeClassifyOid, templateVO, needSaveCboList, resembleMap, btmtypeid, dataResembleVOS); + if (resembleMap.size() > 0) { + if (!CollectionUtils.isEmpty(dataResembleVOS)) { + bladeRedis.set(uuid + "-resemble-data", dataResembleVOS); + bladeRedis.expire(uuid + "-resemble-data", BATCHADD_REDIS_TIME);//redis杩囨湡鏃堕棿 + // createRedisDatas(uuid + "-resemble", codeImprotDataVOS, resembleMap, false); + // wpResembleMap.putAll(resembleMap); + } + } + //鎺掗櫎閿欒鐨勶紝鍓╀笅姝g‘鐨� + Map<String, String> newErrorMap = new HashMap<>(); + newErrorMap.putAll(resembleMap); + newErrorMap.putAll(errorMap); + needSaveCboList = allCboList.stream().filter(cbo -> { + String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX); + return !newErrorMap.containsKey(rowIndex); + }).collect(Collectors.toList()); + if (newErrorMap.size() > 0) { + createRedisDatas(uuid + "-resemble", codeImprotDataVOS, newErrorMap, false); + } + createRedisDatas(uuid + "-ok", codeImprotDataVOS, newErrorMap, true); + + }); + + //寰�鐗╁搧鑺傜偣涓婂姞妯℃澘 + List<String> needRowIndexList = new ArrayList<>(); + CodeImProtRusultVO codeImProtRusultVO = new CodeImProtRusultVO(); + if (errorMap.size() > 0) { + String filePath = returnErrorToExcel(dataSet.getRowData(), errorMap, needRowIndexList, dataSet.getColName()); + if (StringUtils.isNotBlank(filePath)) { + codeImProtRusultVO.setFilePath(filePath); + } + } + if (StringUtils.isNotBlank(uuid)) { + //灏嗘墍鏈夌殑鍒嗙被瀛樺叆缂撳瓨涔嬩腑 + codeImProtRusultVO.setRedisUuid(uuid); + /** List<ColumnVO>columnVOList=new ArrayList<>(); + CodeImportTemplateVO wpCodeImportTemplateVO=new CodeImportTemplateVO(); + wpCodeImportTemplateVO.setRoot(true); + wpCodeImportTemplateVO.setCodeClassifyTemplateVO(selectCodeClassifyTemplateVO); + wpCodeImportTemplateVO.setCodeClassifyVO(classifyFullInfo.getCurrentClassifyVO()); + String templateOid=selectCodeClassifyTemplateVO.getOid(); + if(templateColumnVOMap.containsKey(templateOid)){ + columnVOList= columnVOList=templateColumnVOMap.get(templateOid); + }else{ + createTemplate(selectCodeClassifyTemplateVO,templateColumnVOMap); + columnVOList= columnVOList=templateColumnVOMap.get(templateOid); + } + wpCodeImportTemplateVO.setCloNamesList(columnVOList); + codeImportTemplateVOS.add(wpCodeImportTemplateVO); + + if(wpResembleMap.size()>0){ + // redisService.setCacheList(uuid + "-resemble-data", wpDataResembleVOList); + createRedisDatas(uuid + "-resemble",selectCodeClassifyTemplateVO, wpCodeImprotDataVOList, wpResembleMap, false,codeClassifyOid); + } + //鎺掗櫎閿欒鐨勶紝鍓╀笅姝g‘鐨� + Map<String,String> newErrorMap=new HashMap<>(); + newErrorMap.putAll(wpResembleMap); + newErrorMap.putAll(errorMap); + List<CodeImprotDataVO> needSaveCboList = wpCodeImprotDataVOList.stream().filter(cbo -> { + String rowIndex = cbo.getRowIndex(); + return !newErrorMap.containsKey(rowIndex); + }).collect(Collectors.toList()); + createRedisDatas(uuid + "-ok",selectCodeClassifyTemplateVO,wpCodeImprotDataVOList, newErrorMap,true,codeClassifyOid);****/ + if (codeImportTemplateVOS.size() > 0) { + bladeRedis.set(uuid + "-class", codeImportTemplateVOS); + bladeRedis.expire(uuid + "-class", BATCHADD_REDIS_TIME); + } + } + return codeImProtRusultVO; + } + + /** + * 瀵煎叆鍘嗗彶鏁版嵁 + * + * @param codeClassifyOid 鍒嗙被鐨勪富閿� + * @param classifyAttr 鍒嗙被璺緞浣跨敤鐨勫睘鎬� + * @param file excel鏂囦欢鐨勪俊鎭� + * @return 鏈夐敊璇俊鎭殑excel + */ + @Override + public CodeImProtRusultVO batchImportHistoryData(String codeClassifyOid, String classifyAttr, File file) throws Throwable { + try { + VciBaseUtil.alertNotNull(codeClassifyOid, "鍒嗙被鐨勪富閿�"); + ReadExcelOption reo = new ReadExcelOption(); + reo.setReadAllSheet(true); + List<SheetDataSet> sheetDataSetList = ExcelUtil.readDataObjectFromExcel(file, null, reo); + if (sheetDataSetList.size() > LIMIT + 1) { + throw new VciBaseException("涓轰簡淇濊瘉绯荤粺鐨勭ǔ瀹氭�э紝璇蜂竴娆′笉瑕佸鍏ヨ秴杩�1涓囨潯鐨勬暟鎹�"); + } + Map<String, List<WriteExcelData>> shetNameMap = new HashMap<>(); + //鐩镐技椤圭洰鏌ラ噸 + String uuid = VciBaseUtil.getPk(); + boolean isCreateUUid = false; + boolean isExport = false; + //long start = System.currentTimeMillis(); + // 璁板綍瀵煎叆鎴愬姛鐨勬�绘暟 + List<Integer> importCount = new ArrayList<>(); + CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(codeClassifyOid); + for (int i = 0; i < sheetDataSetList.size() - 1; i++) { + if (CollectionUtils.isEmpty(sheetDataSetList) || CollectionUtils.isEmpty(sheetDataSetList.get(i).getRowData()) + || sheetDataSetList.get(i).getRowData().size() < 1) { + continue; + } + // 鍗曟瀵煎叆鏁伴噺闄愬埗 + if (sheetDataSetList.get(i).getRowData().size() > IMPORT_DATA_LIMIT) { + throw new ServiceException(StringUtil.format("涓轰簡淇濊瘉绯荤粺鐨勭ǔ瀹氭�э紝璇蜂竴娆′笉瑕佸鍏ヨ秴杩噞}鏉$殑鏁版嵁", IMPORT_DATA_LIMIT)); + } + //鍘嗗彶瀵煎叆鐨勬椂鍊欎笉澶勭悊缂栫爜 + //----閫昏緫鍐呭---- + //1. 鍒嗙被鐨勮矾寰勫彲浠ュ湪椤甸潰涓婇�夋嫨鏄垎绫荤紪鍙疯繕鏄垎绫荤殑鍚嶇О + //2. 鍒嗙被鐨勮矾寰勶紝蹇呴』鏄綋鍓嶅鍏ラ�夋嫨鐨勫垎绫荤殑鑺傜偣锛屼互鍙婂叾涓嬬骇鑺傜偣 + //3. 閫氳繃鏁版嵁瑕佸鍏ョ殑鍒嗙被鍘绘煡鎵惧搴旂殑缂栫爜瑙勫垯 + //4. 鏁版嵁瀛樺偍鍜屾壒閲忕敵璇蜂竴鏍凤紝 + //5. 闇�瑕佸崟鐙鐞嗕紒涓氱紪鐮佺殑鍐呭锛� + // 5.1 浼佷笟缂栫爜鍦ㄥ綋鍓峞xcel閲屼笉鑳介噸澶� + // 5.2 浼佷笟缂栫爜鍦ㄧ郴缁熶腑涓嶈兘閲嶅锛堝彲浠ユ槸宸茬粡鍥炴敹鐨勶級 + // 5.3 浼佷笟缂栫爜鐨勯暱搴︼紝鍜岀紪鐮佽鍒欑殑闀垮害瑕佸搴斾笂 + // 5.4 鑾峰彇娴佹按鐮佹鐨勫�硷紝鍘婚櫎濉厖鐨勫瓧绗︼紝鐪嬫祦姘村彿鏄灏戯紝鐒跺悗灏嗘祦姘村彿鍜岀幇鍦ㄧ殑鏈�澶ф祦姘村彿鍒ゆ柇锛屽皬浜庡氨鐩存帴褰曞叆锛屽ぇ浜庡垯淇敼鏈�澶ф祦姘村彿 + // 5.5 瀛樺偍浼佷笟缂栫爜鍒癮llcode涓� + //鏌ヨ鍒嗙被鍜屾ā鏉� + + //鍏堟壘鍒版瘡涓�琛岀殑鏍囬锛岀劧鍚庢牴鎹爣棰樻潵鑾峰彇瀵瑰簲鐨勫睘鎬� + SheetDataSet dataSet = sheetDataSetList.get(i); + List<SheetRowData> rowDataList = dataSet.getRowData(); + + //鎵剧涓�琛岋紝涓轰簡鎵炬爣棰� + CodeClassifyTemplateVO templateVO = new CodeClassifyTemplateVO(); + /** if (!templateService.checkChildHasSameTemplate(classifyFullInfo.getCurrentClassifyVO().getOid())) { + throw new VciBaseException("褰撳墠鐨勫垎绫讳互鍙婁笅绾у垎绫荤殑妯℃澘涓嶇浉鍚�"); + }***/ + //閮借浆鎹㈠畬浜嗐�傞渶瑕佹壒閲忔鏌� + //鎵炬墍鏈夌殑鍒嗙被璺緞,闇�瑕佹牎楠岃矾寰勬槸鍚︽纭紝鏄惁閮藉湪褰撳墠鐨勫垎绫荤殑涓嬬骇 + List<CodeClassifyVO> childClassifyVOs = classifyService.listChildrenClassify(codeClassifyOid, true, classifyAttr, true); + Map<String/**璺緞**/, CodeClassifyVO> pathMap = Optional.ofNullable(childClassifyVOs).orElseGet(() -> new ArrayList<>()).stream().collect(Collectors.toMap(s -> s.getPath().startsWith("#") ? s.getPath().substring(1) : s.getPath(), t -> t)); + List<String> titleRowData = dataSet.getColName(); + Map<String, String> errorMap = new ConcurrentHashMap<>(); + pathMap.put("#current#", classifyFullInfo.getCurrentClassifyVO()); + + try { + List<CodeClassifyTemplateVO> templateVOList = checkSamesTemplate(titleRowData, sheetDataSetList, i, pathMap, errorMap); + templateVO = templateVOList.get(0); + } catch (Throwable e) { + throw new VciBaseException(e.getMessage()); + } + + List<SheetRowData> needowDataList = rowDataList.stream().filter(cbo -> { + String rowIndex = cbo.getRowIndex(); + return !errorMap.containsKey(rowIndex); + }).collect(Collectors.toList()); + + //checkTemplateSync(sheetDataSetList, templateVO,i); + //杩欓噷涓嶉櫎鍘婚粯璁ょ殑灞炴�� + List<CodeClassifyTemplateAttrVO> attrVOS = templateVO.getAttributes(); + Map<Integer/**鍒楀彿**/, String/**瀛楁鐨勫悕绉�**/> fieldIndexMap = new HashMap<>(); + + Map<String/**涓枃鍚嶇О**/, String/**鑻辨枃鍚嶇О**/> attrNameIdMap = attrVOS.stream().collect(Collectors.toMap(s -> s.getName(), t -> t.getId())); + String idFieldName = attrVOS.stream().filter(s -> VciQueryWrapperForDO.ID_FIELD.equalsIgnoreCase(s.getId())).findFirst().orElseGet(() -> new CodeClassifyTemplateAttrVO()).getName(); + getFieldIndexMap(titleRowData, attrNameIdMap, fieldIndexMap); + //鍏堜笉鐢ㄧ灞炴�ф槸鍚﹂兘瀛樺湪锛屽厛杞崲涓�涓嬫暟鎹� + List<ClientBusinessObject> cboList = new ArrayList<>(); + String fullPath = getFullPath(classifyFullInfo); + //鎴戜滑闇�瑕佽幏鍙栧埌鎵�鏈夌殑涓嬬骇鍒嗙被鐨刼id鐨勮矾寰勶紝鍥犱负鍚庨潰闇�瑕� + Map<String/**涓婚敭**/, String/**璺緞**/> childOidPathMap = getChildClassifyPathMap(classifyFullInfo, fullPath); + excelToCbo(classifyFullInfo, fieldIndexMap, needowDataList, templateVO, cboList, fullPath, false); + + + Map<String/**涓婚敭**/, CodeClassifyVO> classifyVOMap = Optional.ofNullable(childClassifyVOs).orElseGet(() -> new ArrayList<>()).stream().collect(Collectors.toMap(s -> s.getOid(), t -> t)); + classifyVOMap.put(classifyFullInfo.getCurrentClassifyVO().getOid(), classifyFullInfo.getCurrentClassifyVO()); + pathMap.put("#current#", classifyFullInfo.getCurrentClassifyVO()); + + //鍒ゆ柇缂栧彿鍦╡xcel閲屾湰韬氨閲嶅鐨� + Map<String, Long> idCountMap = cboList.stream().collect(Collectors.groupingBy(ClientBusinessObject::getId, Collectors.counting())); + List<String> repeatIdList = new ArrayList<>(); + idCountMap.forEach((id, count) -> { + if (count > 1) { + repeatIdList.add(id); + } + }); + if (!CollectionUtils.isEmpty(repeatIdList)) { + cboList.stream().filter(s -> repeatIdList.contains(s.getId())).map(s -> s.getAttributeValue(IMPORT_ROW_INDEX)).forEach(rowIndex -> { + errorMap.put(rowIndex, "缂栧彿鍦ㄥ綋鍓峞xcel涓噸澶�;"); + }); + } + //鎴戜滑闇�瑕佸垽鏂繖浜涘垎绫荤殑妯℃澘鏄笉鏄竴鏍风殑锛屽彧闇�瑕佹牎楠岋紝涓嶇敤鑾峰彇 + //妫�鏌ュ垎绫荤殑璺緞 + checkClassifyPathInHistory(cboList, errorMap, pathMap, childOidPathMap); + + //妫�鏌ヨ鍒� + Map<String/**鍒嗙被涓婚敭**/, String/**瑙勫垯涓婚敭**/> ruleOidMap = new ConcurrentHashMap<String, String>(); + List<String> unExistRuleClassifyOidList = new CopyOnWriteArrayList<>(); + checkRuleOidInHistory(classifyVOMap, ruleOidMap, unExistRuleClassifyOidList); + //濡傛灉鍑洪敊浜嗭紝鎴戜滑渚濈劧鎵ц鏈夋晥鐨勬暟鎹紝鏃犳晥鐨勬暟鎹啓鍥炲埌excel涓� + + //鎴戜滑鏍规嵁鍑洪敊鐨勫垎绫荤殑涓婚敭锛屽幓鎵捐鍙� + if (!CollectionUtils.isEmpty(unExistRuleClassifyOidList)) { + cboList.stream().forEach(cbo -> { + if (unExistRuleClassifyOidList.contains(cbo.getAttributeValue(CODE_CLASSIFY_OID_FIELD))) { + String row_index = cbo.getAttributeValue(IMPORT_ROW_INDEX); + errorMap.put(row_index, errorMap.getOrDefault(row_index, "") + ";鏍规嵁鍒嗙被璺緞瀵瑰簲鐨勫垎绫伙紝娌℃湁璁剧疆缂栫爜瑙勫垯"); + } + }); + } + + //鍒ゆ柇蹇呰緭椤� + batchCheckRequiredAttrOnOrder(templateVO, cboList, errorMap); + + //浼樺厛鏍¢獙缂栫爜鏄惁瀛樺湪 + batchCheckIdExistOnOrder(templateVO, cboList, errorMap); + + //boolean + reSwitchBooleanAttrOnOrder(attrVOS, cboList); + + // 鏋氫妇鐨勫唴瀹归渶瑕佹牴鎹悕绉拌浆鎹负鏋氫妇鐨勫�� + batchSwitchEnumAttrOnOrder(attrVOS, cboList, errorMap); + + batchSwitchReferAttrOnOrder(attrVOS, cboList, errorMap); + + //6.澶勭悊鍒嗙被娉ㄥ叆 + batchSwitchClassifyAttrOnOrder(attrVOS, cboList, classifyFullInfo, true); + + //璁剧疆榛樿鍊� + batchSwitchAttrDefault(attrVOS, cboList); + + //7.澶勭悊缁勫悎瑙勫垯 + batchSwitchComponentAttrOnOrder(attrVOS, cboList); + + //3.鍒ゆ柇鍏抽敭灞炴�� + CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, templateVO, cboList, false, errorMap); + Set<String> selfRepeatRowIndexList = keyResultVO.getSelfRepeatRowIndexList(); + Set<String> keyAttrRepeatRowIndexList = keyResultVO.getKeyAttrRepeatRowIndexList(); + if (!CollectionUtils.isEmpty(selfRepeatRowIndexList)) { + selfRepeatRowIndexList.stream().forEach(rowIndex -> { + errorMap.put(rowIndex, errorMap.getOrDefault(rowIndex, "") + String.format(";鍦ㄥ綋鍓峞xcel鏂囦欢涓叧閿睘鎬ч噸澶峓%s],[%s];", keyResultVO.getKeyAttrRuleInfo(), keyResultVO.getSynonymRuleInfo())); + }); + } + if (!CollectionUtils.isEmpty(keyAttrRepeatRowIndexList)) { + keyAttrRepeatRowIndexList.stream().forEach(rowIndex -> { + errorMap.put(rowIndex, errorMap.getOrDefault(rowIndex, "") + String.format("鍏抽敭灞炴�т笌绯荤粺涓殑閲嶅[%s],[%s];", keyResultVO.getKeyAttrRuleInfo(), keyResultVO.getSynonymRuleInfo())); + }); + } + //4.鏍¢獙瑙勫垯 + batchCheckVerifyOnOrder(attrVOS, cboList, errorMap); + + //6.鏃堕棿鐨勶紝蹇呴』缁熶竴涓簓yyy-MM-dd HH:mm:ss + batchSwitchDateAttrOnOrder(attrVOS, cboList, errorMap); + if (CollectionUtils.isEmpty(ruleOidMap.values())) { + throw new VciBaseException("瀵煎叆鐨勬暟鎹墍閫夋嫨鐨勫垎绫婚兘娌℃湁璁剧疆缂栫爜瑙勫垯"); + } + // TODO: 璇ョ敤oid鏌ヨ瑙勫垯鐨勶紝鍒敤id + Map<String, CodeRuleVO> ruleVOMap = ruleService.listCodeRuleByOids(ruleOidMap.values()).stream().collect(Collectors.toMap(s -> s.getOid(), t -> t)); + //鏍¢獙缂栫爜瑙勫垯鍜岀爜娈垫槸鍚︽纭� + Map<String, List<String>> ruleRowIndexMap = new ConcurrentHashMap<>(); + checkSecLengthInHistory(cboList, classifyVOMap, ruleVOMap, ruleOidMap, errorMap, ruleRowIndexMap); + ruleRowIndexMap.keySet().parallelStream().forEach(ruleOid -> { + List<String> rowIndexList = ruleRowIndexMap.get(ruleOid); + List<ClientBusinessObject> thisCbos = cboList.stream().filter(cbo -> rowIndexList.contains(cbo.getAttributeValue(IMPORT_ROW_INDEX)) && !errorMap.containsKey(cbo.getAttributeValue(IMPORT_ROW_INDEX))).collect(Collectors.toList()); + //鎴戜滑闇�瑕佸厛鏌ヨ涓�涓嬶紝鍐呭鏄惁宸茬粡瀛樺湪 + if (!CollectionUtils.isEmpty(thisCbos)) { + List<String> existIds = new ArrayList<>(); + // TODO: 2024/12/3 Ludc 杩欏効鏌ヨ鍋氫簡淇敼鏀规垚缁勬垚涓�鍙ql鏌ヨ锛岃�屼笉鏄垎鎵规鏌ヨ + LambdaQueryWrapper<CodeAllCode> wrapper = Wrappers.<CodeAllCode>query().lambda() + .eq(CodeAllCode::getCodeRuleOid, ruleOid); + VciBaseUtil.switchCollectionForOracleIn(thisCbos).stream().forEach(cbos -> { + wrapper.notIn(CodeAllCode::getId, cbos.stream().map(s -> s.getId()).collect(Collectors.toSet()).toArray(new String[0])); + }); + wrapper.notIn(CodeAllCode::getLcStatus, CodeAllCodeLC.TASK_BACK.getValue() + "','" + CodeAllCodeLC.OBSOLETED.getValue()); + List<CodeAllCode> codeAllCodeList = codeAllCodeService.selectByWrapper(wrapper); + existIds.addAll(Optional.ofNullable(codeAllCodeList).orElseGet(() -> new ArrayList<>()).stream().map(s -> { + String id = s.getId(); + if (StringUtils.isBlank(id)) { + id = s.getId(); + } + return id; + }).collect(Collectors.toList())); + List<String> existIdCbos = thisCbos.stream().filter(s -> { + String id = s.getId(); + if (StringUtils.isBlank(id)) { + id = s.getAttributeValue("id"); + } + return existIds.contains(id); + }).map(s -> s.getAttributeValue(IMPORT_ROW_INDEX)).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(existIdCbos)) { + thisCbos = thisCbos.stream().filter(s -> { + String id = s.getId(); + if (StringUtils.isBlank(id)) { + id = s.getAttributeValue("id"); + } + return !existIdCbos.contains(id); + }).collect(Collectors.toList()); + existIdCbos.stream().forEach(rowIndex -> { + errorMap.put(rowIndex, errorMap.getOrDefault(rowIndex, "") + ";銆�" + idFieldName + "銆戝湪绯荤粺涓凡缁忚鍗犵敤"); + }); + } + } + }); + + Map<String, ClientBusinessObject> rowIndexCboMap = cboList.stream().filter(cbo -> cbo != null).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getAttributeValue((IMPORT_ROW_INDEX)), t -> t)); + if (errorMap.size() > 0) { + isExport = true; + createRedisDatas(uuid + "-error", templateVO, rowIndexCboMap, dataSet, fieldIndexMap, errorMap, false); + } + createWriteExcelData(rowDataList, errorMap, new ArrayList<>(), titleRowData, shetNameMap, templateVO); + List<ClientBusinessObject> needSaveCboList = cboList.stream().filter(cbo -> { + String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX); + return !errorMap.containsKey(rowIndex); + }).collect(Collectors.toList()); + //鐩镐技鏍¢獙 + Map<String, String> resembleMap = new HashMap<>(); + List<DataResembleVO> dataResembleVOS = new ArrayList<>(); + String btmtypeid = classifyFullInfo.getTopClassifyVO().getBtmTypeId(); + // 鐩镐技椤规煡璇� + bathcResembleQuery(templateVO.getCodeclassifyoid(), templateVO, needSaveCboList, resembleMap, btmtypeid, dataResembleVOS); + if (resembleMap.size() > 0) { + if (!CollectionUtils.isEmpty(dataResembleVOS)) { + bladeRedis.set(uuid + "-resemble-data", dataResembleVOS); + createRedisDatas(uuid + "-resemble", templateVO, rowIndexCboMap, dataSet, fieldIndexMap, resembleMap, false); + } + } + + //鐢熸垚class缂撳瓨 + Map<String, String> rowIndexClsOidMap = cboList.stream().filter(cbo -> cbo != null).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getAttributeValue((IMPORT_ROW_INDEX)), t -> t.getAttributeValue(CODE_CLASSIFY_OID_FIELD))); + createRedisByCodeClassify(uuid + "-class", templateVO, dataSet, fieldIndexMap, true); + //鑾峰彇缂栫爜锛屾煡璇㈠湪绯荤粺涓槸鍚﹁鍏朵粬鐨勫紩鐢ㄤ簡 + //鎺掗櫎閿欒鐨勶紝鍓╀笅姝g‘鐨� + Map<String, String> newErrorMap = new HashMap<>(); + newErrorMap.putAll(resembleMap); + newErrorMap.putAll(errorMap); + //瑕佹妸浠ヤ笂鐨勯敊璇殑閮芥姏鍑哄悗锛屽啀缁х画澶勭悊鏃堕棿鍜岀粍鍚堣鍒� + needSaveCboList = cboList.stream().filter(cbo -> { + String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX); + return !newErrorMap.containsKey(rowIndex); + }).collect(Collectors.toList()); + if ((errorMap.size() > 0 && needSaveCboList.size() > 0) || resembleMap.size() > 0) { + isCreateUUid = true; + } + + List<String> needRowIndexList = needSaveCboList.stream().filter(s -> errorMap.containsKey(s.getAttributeValue(IMPORT_ROW_INDEX))).map(s -> s.getAttributeValue(IMPORT_ROW_INDEX)).collect(Collectors.toList()); + if (isExport || newErrorMap.size() > 0) { + createRedisDatas(uuid + "-ok", templateVO, rowIndexCboMap, dataSet, fieldIndexMap, newErrorMap, true); + } else { + List<BaseModel> dataCBOIdList = new ArrayList<>(); + //SessionInfo sessionInfo = VciBaseUtil.getCurrentUserSessionInfo(); + List<ClientBusinessObject> finalNeedSaveCboList = needSaveCboList; + CodeClassifyTemplateVO finalTemplateVO = templateVO; + final BladeUser user = AuthUtil.getUser(); + ruleRowIndexMap.keySet().parallelStream().forEach(ruleOid -> { + //VciBaseUtil.setCurrentUserSessionInfo(sessionInfo); + List<String> rowIndexList = ruleRowIndexMap.get(ruleOid); + List<ClientBusinessObject> thisCbos = finalNeedSaveCboList.stream().filter(cbo -> rowIndexList.contains(cbo.getAttributeValue(IMPORT_ROW_INDEX)) && !errorMap.containsKey(cbo.getAttributeValue(IMPORT_ROW_INDEX))).collect(Collectors.toList()); + List<BaseModel> dataCBOList = new CopyOnWriteArrayList<>(); + thisCbos.stream().forEach(clientBusinessObject -> { + BaseModel baseModel = new BaseModel(); + BeanUtil.convert(clientBusinessObject, baseModel); + //baseModel.setData(VciBaseUtil.objectToMapString(clientBusinessObject)); + dataCBOList.add(baseModel); + dataCBOIdList.add(baseModel); + }); + + if (!CollectionUtils.isEmpty(thisCbos)) { + try { + // TODO 澶氱嚎绋嬫祦闂 + productCodeService.productCodeAndSaveData(classifyFullInfo, finalTemplateVO, ruleVOMap.get(ruleOid), null, dataCBOList, user); + importCount.add(dataCBOList.size()); + } catch (Throwable e) { + log.error("鎵归噺浜х敓缂栫爜鐨勬椂鍊欏嚭閿欎簡", e); + thisCbos.stream().forEach(cbo -> { + String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX); + errorMap.put(rowIndex, errorMap.getOrDefault(rowIndex, "") + ";绯荤粺閿欒锛屽瓨鍌ㄦ暟鎹殑鏃跺�欏嚭閿欎簡:" + e.getMessage()); + }); + } + } + }); + if (errorMap.size() > 0) { + isExport = true; + } + createWriteExcelData(rowDataList, errorMap, new ArrayList<>(), titleRowData, shetNameMap, finalTemplateVO); + engineService.batchSaveSelectChar(templateVO, dataCBOIdList); + } + } + String excelFileName = ""; + if (isExport && !CollectionUtils.isEmpty(shetNameMap)) { + excelFileName = LocalFileUtil.getDefaultTempFolder() + File.separator + "閿欒淇℃伅.xls"; + WriteExcelOption eo = new WriteExcelOption(); + shetNameMap.forEach((shetName, errorDataList) -> { + eo.addSheetDataList(shetName, errorDataList); + }); + try { + new File(excelFileName).createNewFile(); + } catch (IOException e) { + throw new VciBaseException(LangBaseUtil.getErrorMsg(e)); + } + ExcelUtil.writeDataToFile(excelFileName, eo); + saveLogUtil.operateLog("鍘嗗彶鏁版嵁瀵煎叆", true, StringUtil.format("閿欒淇℃伅锛歿}", JSON.toJSONString(shetNameMap))); + } else { + // 鍘嗗彶鏁版嵁瀵煎叆鏃跺嚭鐜颁簡鐩镐技椤硅繑鍥炵粨鏋滄椂涓嶇畻瀵煎叆鎴愬姛 + if (shetNameMap.isEmpty() || !isCreateUUid) { + saveLogUtil.operateLog("鍘嗗彶鏁版嵁瀵煎叆", false, StringUtil.format("瀵煎叆鍒板垎绫粄}涓紝瀵煎叆鎴愬姛鎬绘暟涓猴細{}", JSON.toJSONString(classifyFullInfo), Func.isEmpty(importCount) ? 0 : importCount.get(0))); + } + } + CodeImProtRusultVO codeImProtRusultVO = new CodeImProtRusultVO(); + if (StringUtils.isNotBlank(excelFileName)) { + codeImProtRusultVO.setFilePath(excelFileName); + codeImProtRusultVO.setFileOid(""); + } + if (isCreateUUid) { + codeImProtRusultVO.setRedisUuid(uuid); + } + return codeImProtRusultVO; + } catch (Exception e) { + saveLogUtil.operateLog("鍘嗗彶鏁版嵁瀵煎叆", true, e.toString()); + throw e; + } + } + + /** + * 瀵煎叆鎵归噺缂栬緫鏁版嵁 + * + * @param codeClassifyOid 鍒嗙被鐨勪富閿� + * @param classifyAttr 鍒嗙被璺緞浣跨敤鐨勫睘鎬� + * @param file excel鏂囦欢鐨勪俊鎭� + * @return 鏈夐敊璇俊鎭殑excel + */ + @Transactional + @Override + public CodeImProtRusultVO batchImportEdit(String codeClassifyOid, String classifyAttr, File file) throws Throwable { + VciBaseUtil.alertNotNull(codeClassifyOid, "鍒嗙被鐨勪富閿�"); + ReadExcelOption reo = new ReadExcelOption(); + reo.setReadAllSheet(true); + List<SheetDataSet> sheetDataSetList = ExcelUtil.readDataObjectFromExcel(file, null, reo); + if (sheetDataSetList.get(0).getRowData().size() > LIMIT + 1) { + throw new ServiceException("涓轰簡淇濊瘉绯荤粺鐨勭ǔ瀹氭�э紝璇蜂竴娆′笉瑕佸鍏ヨ秴杩�1涓囨潯鐨勬暟鎹�"); + } + if (sheetDataSetList.get(0).getRowData().size() == 0) { + throw new ServiceException("鏈鍙栧埌excle鐩稿叧鏁版嵁锛岃纭锛侊紒锛�"); + } + boolean isExport = false; + Map<String, List<WriteExcelData>> shetNameMap = new HashMap<>(); + for (int i = 0; i < sheetDataSetList.size() - 1; i++) { + if (CollectionUtils.isEmpty(sheetDataSetList) || CollectionUtils.isEmpty(sheetDataSetList.get(i).getRowData()) + || sheetDataSetList.get(i).getRowData().size() < 1) { + continue; + } + // 鍗曟瀵煎叆鏁伴噺闄愬埗 + if (sheetDataSetList.get(i).getRowData().size() > IMPORT_DATA_LIMIT) { + throw new ServiceException("涓轰簡淇濊瘉绯荤粺鐨勭ǔ瀹氭�э紝璇蜂竴娆′笉瑕佸鍏ヨ秴杩�" + IMPORT_DATA_LIMIT + "鏉$殑鏁版嵁"); + } + //鏌ヨ鍒嗙被鍜屾ā鏉� + CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(codeClassifyOid); + + //鍏堟壘鍒版瘡涓�琛岀殑鏍囬锛岀劧鍚庢牴鎹爣棰樻潵鑾峰彇瀵瑰簲鐨勫睘鎬� + SheetDataSet dataSet = sheetDataSetList.get(i); + List<SheetRowData> rowDataList = dataSet.getRowData(); + + //鎵剧涓�琛岋紝涓轰簡鎵炬爣棰� + CodeClassifyTemplateVO templateVO; + //閮借浆鎹㈠畬浜嗐�傞渶瑕佹壒閲忔鏌� + //鎵炬墍鏈夌殑鍒嗙被璺緞,闇�瑕佹牎楠岃矾寰勬槸鍚︽纭紝鏄惁閮藉湪褰撳墠鐨勫垎绫荤殑涓嬬骇 + List<CodeClassifyVO> childClassifyVOs = classifyService.listChildrenClassify(codeClassifyOid, true, classifyAttr, true); + Map<String/**璺緞**/, CodeClassifyVO> pathMap = Optional.ofNullable(childClassifyVOs).orElseGet(() -> new ArrayList<>()).stream().collect(Collectors.toMap(s -> s.getPath().startsWith("#") ? s.getPath().substring(1) : s.getPath(), t -> t)); + List<String> titleRowData = dataSet.getColName(); + Map<String, String> errorMap = new ConcurrentHashMap<>(); + pathMap.put("#current#", classifyFullInfo.getCurrentClassifyVO()); + + try { + titleRowData.add("鍒嗙被璺緞"); + List<CodeClassifyTemplateVO> templateVOList = checkSamesTemplate(titleRowData, sheetDataSetList, i, pathMap, errorMap); + titleRowData.remove(titleRowData.size() - 1); + templateVO = templateVOList.get(0); + } catch (Throwable e) { + throw new ServiceException(e.getMessage()); + } + + CodeClassifyTemplateVO finalTemplateVO = templateVO; + + List<SheetRowData> needowDataList = rowDataList.stream().filter(cbo -> { + String rowIndex = cbo.getRowIndex(); + return !errorMap.containsKey(rowIndex); + }).collect(Collectors.toList()); + //杩欓噷涓嶉櫎鍘婚粯璁ょ殑灞炴�� + List<CodeClassifyTemplateAttrVO> attrVOS = templateVO.getAttributes(); + Map<Integer/**鍒楀彿**/, String/**瀛楁鐨勫悕绉�**/> fieldIndexMap = new HashMap<>(); + + Map<String/**涓枃鍚嶇О**/, String/**鑻辨枃鍚嶇О**/> attrNameIdMap = attrVOS.stream().collect(Collectors.toMap(s -> s.getName(), t -> t.getId())); + fieldIndexMap.put(0, "id"); + getFieldIndexMap(titleRowData, attrNameIdMap, fieldIndexMap); + //鍏堜笉鐢ㄧ灞炴�ф槸鍚﹂兘瀛樺湪锛屽厛杞崲涓�涓嬫暟鎹� + CodeOrderDTO orderDTO = new CodeOrderDTO(); + for (SheetRowData sheetRowData : needowDataList) { + //鏌ヨ鏁版嵁 + Map<String, String> conditionMap = new HashMap<>(); + conditionMap.put("t.id", sheetRowData.getData().get(0)); + conditionMap.put("t.lastv", "1"); + CodeTemplateAttrSqlBO sqlBO = mdmEngineService.getSqlByTemplateVO(classifyFullInfo.getTopClassifyVO().getBtmTypeId(), templateVO, conditionMap, new PageHelper(-1)); + //鎴戜滑浣跨敤鍜屼笟鍔$被鍨嬬殑鏉ユ煡璇� + List<Map> cbosB = commonsMapper.selectBySql(sqlBO.getSqlUnPage()); + if (cbosB.size() == 0) { + throw new ServiceException("缂栫爜锛�" + sheetRowData.getData().get(0) + ",鏈兘鏌ヨ鍒扮浉鍏虫暟鎹��"); + } + excelToCboEdit(fieldIndexMap, sheetRowData, orderDTO, cbosB.get(0)); + orderDTO.setCopyFromVersion(orderDTO.getOid()); + orderDTO.setOid(null); + try { + mdmEngineService.upSaveCode(orderDTO); + } catch (Throwable e) { + log.error("鎵归噺浜х敓缂栫爜鐨勬椂鍊欏嚭閿欎簡", e); + errorMap.put(sheetRowData.getRowIndex(), ";绯荤粺閿欒锛屽瓨鍌ㄦ暟鎹殑鏃跺�欏嚭閿欎簡:" + e.getMessage()); + } + } + if (errorMap.size() > 0) { + isExport = true; + } + createWriteExcelData(rowDataList, errorMap, new ArrayList<>(), titleRowData, shetNameMap, finalTemplateVO); + + } + String excelFileName = ""; + if (isExport && !CollectionUtils.isEmpty(shetNameMap)) { + excelFileName = LocalFileUtil.getDefaultTempFolder() + File.separator + "閿欒淇℃伅.xls"; + WriteExcelOption eo = new WriteExcelOption(); + shetNameMap.forEach((shetName, errorDataList) -> { + eo.addSheetDataList(shetName, errorDataList); + }); + try { + new File(excelFileName).createNewFile(); + } catch (IOException e) { + throw new VciBaseException(LangBaseUtil.getErrorMsg(e)); + } + ExcelUtil.writeDataToFile(excelFileName, eo); + } + CodeImProtRusultVO codeImProtRusultVO = new CodeImProtRusultVO(); + if (StringUtils.isNotBlank(excelFileName)) { + codeImProtRusultVO.setFilePath(excelFileName); + codeImProtRusultVO.setFileOid(""); + saveLogUtil.operateLog("鏁版嵁鎵归噺鏇存敼", true, StringUtil.format("閿欒淇℃伅锛歿}", JSON.toJSONString(shetNameMap))); + } else { + saveLogUtil.operateLog("鏁版嵁鎵归噺鏇存敼", false, StringUtil.format("瀵煎叆鎴愬姛鎬绘暟涓猴細{}", + sheetDataSetList.size() - 1)); + } + return codeImProtRusultVO; + } + /*private void converBaseModels(List<ClientBusinessObject> clientBusinessObjects,List<BaseModel>dataCBOList){ + clientBusinessObjects.stream().forEach(clientBusinessObject -> { + BaseModel baseModel=new BaseModel(); + BeanUtil.convert(clientBusinessObject,baseModel); + Map<String,String> dataMap=new HashMap<>(); + clientBusinessObject.getHisAttrValList() + baseModel.setData(VciBaseUtil.objectToMapString(baseModel)); + + AttributeValue[] newAttributeValue= clientBusinessObject.getNewAttrValList(); + dataCBOList.add(baseModel); + }); + + }*/ + + /*** + * 浠巈xecl閲屾瀯寤哄璞� + * @param rowDataList + * @param errorMap + * @param needRowIndexList + * @param titleRowData + * @param shetNameMap + * @param templateVO + */ + private void createWriteExcelData(Collection<SheetRowData> rowDataList, Map<String, String> errorMap, + List<String> needRowIndexList, List<String> titleRowData, Map<String, List<WriteExcelData>> shetNameMap, CodeClassifyTemplateVO templateVO) { + List<WriteExcelData> errorDataList = new ArrayList<>(); + Map<String, SheetRowData> rowIndexDataMap = rowDataList.stream().filter(s -> !needRowIndexList.contains(s.getRowIndex())).collect(Collectors.toMap(s -> s.getRowIndex(), t -> t)); + errorDataList.add(new WriteExcelData(0, 0, "閿欒淇℃伅")); + for (int i = 0; i < titleRowData.size(); i++) { + //閿欒淇℃伅鍦ㄦ渶鍚� + errorDataList.add(new WriteExcelData(0, i + 1, titleRowData.get(i))); + } + Integer[] newRowIndex = new Integer[]{1}; + errorMap.forEach((index, error) -> { + //閿欒淇℃伅鍏ㄩ儴缁勫悎鍒颁竴璧� + SheetRowData rowData = rowIndexDataMap.getOrDefault(index, null); + if (rowData != null) { + errorDataList.add(new WriteExcelData(newRowIndex[0], 0, error)); + rowData.getData().forEach((colIndex, value) -> { + errorDataList.add(new WriteExcelData(newRowIndex[0], colIndex + 1, value)); + }); + newRowIndex[0]++; + } + }); + + shetNameMap.put(templateVO.getName(), errorDataList); + } + + /*** + * + * @param currentTemplateVO + * @param templateColumnVOMap + */ + private void createTemplate(CodeClassifyTemplateVO currentTemplateVO, Map<String, List<ColumnVO>> templateColumnVOMap) { + + List<CodeClassifyTemplateAttrVO> templateAttrVOS = currentTemplateVO.getAttributes().stream().filter(s -> + !DEFAULT_ATTR_LIST.contains(s.getId()) + && StringUtils.isBlank(s.getComponentRule()) + && StringUtils.isBlank(s.getClassifyInvokeAttr()) + && (VciBaseUtil.getBoolean(s.getFormDisplayFlag())) + ).collect(Collectors.toList()); + if (CollectionUtils.isEmpty(templateAttrVOS)) { + throw new VciBaseException("妯℃澘娌℃湁閰嶇疆浠讳綍銆愯〃鍗曟樉绀恒�戜负銆愭槸銆戠殑灞炴��"); + } + List<ColumnVO> columnVOList = new ArrayList<>(); + + ColumnVO errorMsgColumnVO = new ColumnVO(); + errorMsgColumnVO.setTitle("閿欒淇℃伅"); + errorMsgColumnVO.setField("errorMsg"); + columnVOList.add(errorMsgColumnVO); + + + ColumnVO pathColumnVO = new ColumnVO(); + pathColumnVO.setTitle("鍒嗙被璺緞"); + pathColumnVO.setField("codeclsfid"); + columnVOList.add(pathColumnVO); + templateAttrVOS.stream().forEach(codetemplateAttr -> { + String field = codetemplateAttr.getId(); + String name = codetemplateAttr.getName(); + ColumnVO columnVO = new ColumnVO(); + columnVO.setTitle(name); + columnVO.setField(field); + columnVO.setWidth(codetemplateAttr.getAttrTableWidth() == 0 ? columnVO.getWidth() : codetemplateAttr.getAttrTableWidth()); + columnVOList.add(columnVO); + }); + + templateColumnVOMap.put(currentTemplateVO.getOid(), columnVOList); + log.info("妯℃澘" + currentTemplateVO.getName() + "瀵瑰簲鐨勫睘鎬�" + columnVOList.size()); + } + /** * 閿欒淇℃伅杩斿洖excel - * @param rowDataList 鎵�鏈夌殑瀵煎叆鏁版嵁 - * @param errorMap 閿欒鐨勪俊鎭� - * @param needRowIndexList 闇�瑕佸啓鍏ョ殑鏁版嵁鐨勮鍙� - * @param titleRowData 鏍囬琛� * + * @param rowDataList 鎵�鏈夌殑瀵煎叆鏁版嵁 + * @param errorMap 閿欒鐨勪俊鎭� + * @param needRowIndexList 闇�瑕佸啓鍏ョ殑鏁版嵁鐨勮鍙� + * @param titleRowData 鏍囬琛� * @return 閿欒鐨別xcel鏂囦欢锛屾病鏈夐敊璇細杩斿洖绌� */ private String returnErrorToExcel(Collection<SheetRowData> rowDataList, - Map<String,String> errorMap, - List<String> needRowIndexList,List<String> titleRowData){ - if(CollectionUtils.isEmpty(errorMap)){ + Map<String, String> errorMap, + List<String> needRowIndexList, List<String> titleRowData) { + if (CollectionUtils.isEmpty(errorMap)) { return ""; } Map<String, SheetRowData> rowIndexDataMap = rowDataList.stream().filter(s -> !needRowIndexList.contains(s.getRowIndex())).collect(Collectors.toMap(s -> s.getRowIndex(), t -> t)); List<WriteExcelData> errorDataList = new ArrayList<>(); - errorDataList.add(new WriteExcelData(0,0,"閿欒淇℃伅")); + errorDataList.add(new WriteExcelData(0, 0, "閿欒淇℃伅")); for (int i = 0; i < titleRowData.size(); i++) { //閿欒淇℃伅鍦ㄦ渶鍚� - errorDataList.add(new WriteExcelData(0,i+1,titleRowData.get(i))); + errorDataList.add(new WriteExcelData(0, i + 1, titleRowData.get(i))); } Integer[] newRowIndex = new Integer[]{1}; - errorMap.forEach((index,error)->{ + errorMap.forEach((index, error) -> { //閿欒淇℃伅鍏ㄩ儴缁勫悎鍒颁竴璧� SheetRowData rowData = rowIndexDataMap.getOrDefault(index, null); - if(rowData!=null){ - errorDataList.add(new WriteExcelData(newRowIndex[0],0,error)); - rowData.getData().forEach((colIndex,value)->{ - errorDataList.add(new WriteExcelData(newRowIndex[0],colIndex+1,value)); + if (rowData != null) { + errorDataList.add(new WriteExcelData(newRowIndex[0], 0, error)); + rowData.getData().forEach((colIndex, value) -> { + errorDataList.add(new WriteExcelData(newRowIndex[0], colIndex + 1, value)); }); newRowIndex[0]++; } @@ -348,23 +1659,24 @@ } catch (IOException e) { throw new VciBaseException(LangBaseUtil.getErrorMsg(e)); } - ExcelUtil.writeDataToFile(excelFileName,eo); + ExcelUtil.writeDataToFile(excelFileName, eo); return excelFileName; } /** * 鏍¢獙妯℃澘鏄惁涓哄悓姝ョ殑 + * * @param sheetDataSetList excel閲岀殑鍐呭 - * @param templateVO 妯℃澘鐨勪俊鎭� + * @param templateVO 妯℃澘鐨勪俊鎭� */ - private void checkTemplateSync(List<SheetDataSet> sheetDataSetList,CodeClassifyTemplateVO templateVO,int i){ + private void checkTemplateSync(List<SheetDataSet> sheetDataSetList, CodeClassifyTemplateVO templateVO, int i) { String templateOidInExcel = ""; - String templateName=""; - if(!CollectionUtils.isEmpty(sheetDataSetList) - && sheetDataSetList.size()>1 && !CollectionUtils.isEmpty(sheetDataSetList.get(sheetDataSetList.size()-1).getColName())){ - List<SheetRowData> rowData= sheetDataSetList.get(sheetDataSetList.size()-1).getRowData(); - templateName=rowData.get(i).getData().get(2); - templateOidInExcel=rowData.get(i).getData().get(0); + String templateName = ""; + if (!CollectionUtils.isEmpty(sheetDataSetList) + && sheetDataSetList.size() > 1 && !CollectionUtils.isEmpty(sheetDataSetList.get(sheetDataSetList.size() - 1).getColName())) { + List<SheetRowData> rowData = sheetDataSetList.get(sheetDataSetList.size() - 1).getRowData(); + templateName = rowData.get(i).getData().get(2); + templateOidInExcel = rowData.get(i).getData().get(0); //templateOidInExcel = sheetDataSetList.get(sheetDataSetList.size()-1).getColName().get(sheetDataSetList.size()-i); } /* if(!CollectionUtils.isEmpty(sheetDataSetList) @@ -373,12 +1685,11 @@ templateOidInExcel=rowData.get(i).getData().get(0); //templateOidInExcel = sheetDataSetList.get(sheetDataSetList.size()-1).getColName().get(sheetDataSetList.size()-i); }*/ - if(StringUtils.isBlank(templateOidInExcel) || !templateOidInExcel.equalsIgnoreCase(templateVO.getOid())){ - throw new VciBaseException("妯℃澘銆�"+templateName+"銆戜腑鐨勬暟鎹幏鍙栫殑妯$増淇℃伅涓庡綋鍓嶆ā鏉夸笉鍖归厤锛岃纭繚excel鏂囦欢閲屾湁銆愭ā鏉夸俊鎭�-璇峰嬁绉诲姩鎴栧垹闄ゃ�戠殑宸ヤ綔琛紝涓旂‘淇濇瘡娆″鍏ラ兘鏄厛涓嬭浇鐨勫鍏ユā鏉垮悗娣诲姞鐨勬暟鎹�"); + if (StringUtils.isBlank(templateOidInExcel) || !templateOidInExcel.equalsIgnoreCase(templateVO.getOid())) { + throw new VciBaseException("妯℃澘銆�" + templateName + "銆戜腑鐨勬暟鎹幏鍙栫殑妯$増淇℃伅涓庡綋鍓嶆ā鏉夸笉鍖归厤锛岃纭繚excel鏂囦欢閲屾湁銆愭ā鏉夸俊鎭�-璇峰嬁绉诲姩鎴栧垹闄ゃ�戠殑宸ヤ綔琛紝涓旂‘淇濇瘡娆″鍏ラ兘鏄厛涓嬭浇鐨勫鍏ユā鏉垮悗娣诲姞鐨勬暟鎹�"); } } - /*** * 鎵归噺澶勭悊鐢宠鏁版嵁 @@ -387,152 +1698,161 @@ * @param dataSet * @return */ - 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()); - //瑙勫垯鐨勪富閿渶瑕佸幓鑾峰彇 - CodeRuleVO ruleVO = engineService.getCodeRuleByClassifyFullInfo(classifyFullInfo); - //1.鍒ゆ柇瑙勫垯涓櫎浜嗘祦姘寸爜娈碉紝鏄惁鏈夊叾浠栫爜娈� - engineService.checkSecValueOnOrder(ruleVO,orderDTO); - List<SheetRowData> rowDataList = dataSet.getRowData(); + private String batchImportCodes(CodeOrderDTO orderDTO, CodeClassifyTemplateVO templateVO, SheetDataSet dataSet, Map<String, String> errorMap, boolean isEnumType) throws Exception { + List<String> codeList = new ArrayList<>(); + String uuid = ""; + try { + CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(orderDTO.getCodeClassifyOid()); + //瑙勫垯鐨勪富閿渶瑕佸幓鑾峰彇 + CodeRuleVO ruleVO = engineService.getCodeRuleByClassifyFullInfo(classifyFullInfo); + //1.鍒ゆ柇瑙勫垯涓櫎浜嗘祦姘寸爜娈碉紝鏄惁鏈夊叾浠栫爜娈� + engineService.checkSecValueOnOrder(ruleVO, orderDTO); + List<SheetRowData> rowDataList = dataSet.getRowData(); - //闄ゅ幓榛樿鐨勫睘鎬�.杩樻湁鍙湁琛ㄥ崟鏄剧ず鐨勫瓧娈垫墠瀵煎叆 - List<CodeClassifyTemplateAttrVO> attrVOS = templateVO.getAttributes().stream().filter(s -> - !DEFAULT_ATTR_LIST.contains(s.getId()) && VciBaseUtil.getBoolean(s.getFormDisplayFlag()) - ).collect(Collectors.toList()); - Map<Integer/**鍒楀彿**/,String/**瀛楁鐨勫悕绉�**/> fieldIndexMap = new HashMap<>(); - List<String> titleRowData = dataSet.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> attrVOS = templateVO.getAttributes().stream().filter(s -> + !DEFAULT_ATTR_LIST.contains(s.getId()) && + ((Func.isNotEmpty(s.getClassifyInvokeAttr()) || Func.isNotEmpty(s.getClassifyInvokeAttrName())) || VciBaseUtil.getBoolean(s.getFormDisplayFlag())) + ).collect(Collectors.toList()); + Map<Integer/**鍒楀彿**/, String/**瀛楁鐨勫悕绉�**/> fieldIndexMap = new HashMap<>(); + List<String> titleRowData = dataSet.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)) - && StringUtils.isBlank(s.getComponentRule()) && StringUtils.isBlank(s.getClassifyInvokeAttr())//缁勫悎瑙勫垯鍜屽垎绫绘敞鍏ョ‘瀹炴病缁欑敤鎴峰鍑哄幓 - ).collect(Collectors.toList()); - if(!CollectionUtils.isEmpty(unExistAttrVOs)){ - throw new VciBaseException("銆�" + unExistAttrVOs.stream().map(CodeClassifyTemplateAttrVO::getName) + "銆戣繖浜涘睘鎬у湪鍒楄〃涓病鏈夋壘鍒�"); - } - List<ClientBusinessObject> cboList = new ArrayList<>(); - String fullPath = getFullPath(classifyFullInfo); - excelToCbo(classifyFullInfo,fieldIndexMap,rowDataList,templateVO,cboList,fullPath,true); - - //閮借浆鎹㈠畬浜嗐�傞渶瑕佹壒閲忔鏌� - //濡傛灉鍑洪敊浜嗭紝鎴戜滑渚濈劧鎵ц鏈夋晥鐨勬暟鎹紝鏃犳晥鐨勬暟鎹啓鍥炲埌excel涓� - //2.鍒ゆ柇蹇呰緭椤广�傘�傞渶瑕佸叏閮ㄧ殑灞炴�э紝濡傛灉鏄繀杈擄紝浣嗘槸琛ㄥ崟閲岄潰涓嶆樉绀虹殑锛屽彧鑳芥槸鍒嗙被娉ㄥ叆鎴栬�呯粍鍚堣鍒� - batchCheckRequiredAttrOnOrder(templateVO,cboList,errorMap); - //3.鍒ゆ柇鍏抽敭灞炴�� - CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, templateVO, cboList); - Set<String> selfRepeatRowIndexList = keyResultVO.getSelfRepeatRowIndexList(); - Set<String> keyAttrRepeatRowIndexList = keyResultVO.getKeyAttrRepeatRowIndexList(); - if(!CollectionUtils.isEmpty(selfRepeatRowIndexList)){ - selfRepeatRowIndexList.stream().forEach(rowIndex->{ - errorMap.put(rowIndex,errorMap.getOrDefault(rowIndex,"") + ";鍦ㄥ綋鍓嶅鐞嗙殑鏁版嵁鏂囦欢涓叧閿睘鎬ч噸澶�" ); - }); - } - if(!CollectionUtils.isEmpty(keyAttrRepeatRowIndexList)){ - keyAttrRepeatRowIndexList.stream().forEach(rowIndex->{ - errorMap.put(rowIndex,errorMap.getOrDefault(rowIndex,"") + ";鍏抽敭灞炴�т笌绯荤粺涓殑閲嶅" ); - }); - } - //鍒嗙被娉ㄥ叆 - batchSwitchClassifyAttrOnOrder(attrVOS,cboList,classifyFullInfo,false); - //boolean - reSwitchBooleanAttrOnOrder(attrVOS,cboList); - //4.鏍¢獙瑙勫垯 - batchCheckVerifyOnOrder(attrVOS, cboList,errorMap); - if(isEnumType) {//鏄惁闇�瑕佹牎楠屾灇涓�/鍙傜収 - //5.鏍¢獙鏋氫妇鏄惁姝g‘ - batchSwitchEnumAttrOnOrder(attrVOS, cboList, errorMap); - //7.澶勭悊鍙傜収鐨勬儏鍐� - batchSwitchReferAttrOnOrder(attrVOS,cboList,errorMap); - } - //6.鏃堕棿鏍煎紡鐨勯獙璇� - //6.鏃堕棿鐨勶紝蹇呴』缁熶竴涓簓yyy-MM-dd HH:mm:ss - batchSwitchDateAttrOnOrder(attrVOS,cboList,errorMap); - //鏈�鍚庡紕缁勫悎瑙勫垯 - batchSwitchComponentAttrOnOrder(attrVOS,cboList); - String uuid=VciBaseUtil.getPk(); - Map<String, ClientBusinessObject> rowIndexCboMap = cboList.stream().filter(cbo -> cbo != null).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getAttributeValue((IMPORT_ROW_INDEX)), t -> t)); - - if(errorMap.size()>0) { - createRedisDatas(uuid + "-error",templateVO, rowIndexCboMap, dataSet, fieldIndexMap, errorMap,false); - } - boolean isCreateUUid=false; - List<ClientBusinessObject> needSaveCboList = cboList.stream().filter(cbo -> { - String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX); - return !errorMap.containsKey(rowIndex); - }).collect(Collectors.toList()); - //鐩镐技鏍¢獙 - Map<String,String>resembleMap=new HashMap<>(); - List<DataResembleVO> dataResembleVOS=new ArrayList<>(); - String btmtypeid= classifyFullInfo.getTopClassifyVO().getBtmtypeid(); - bathcResembleQuery(orderDTO.getCodeClassifyOid(),templateVO,needSaveCboList,resembleMap,btmtypeid,dataResembleVOS); - if(resembleMap.size()>0) { - isCreateUUid=true; - if(!CollectionUtils.isEmpty(dataResembleVOS)) { - bladeRedis.set(uuid + "-resemble-data", dataResembleVOS); - createRedisDatas(uuid + "-resemble",templateVO, rowIndexCboMap, dataSet, fieldIndexMap, resembleMap, false); + //闇�瑕佸垽鏂槸鍚︽墍鏈夌殑灞炴�ч兘鍦ㄦā鏉夸笂浜� + List<CodeClassifyTemplateAttrVO> unExistAttrVOs = attrVOS.stream().filter(s -> !fieldIndexMap.containsValue(s.getId().toLowerCase(Locale.ROOT)) + && StringUtils.isBlank(s.getComponentRule()) && StringUtils.isBlank(s.getClassifyInvokeAttr())//缁勫悎瑙勫垯鍜屽垎绫绘敞鍏ョ‘瀹炴病缁欑敤鎴峰鍑哄幓 + ).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(unExistAttrVOs)) { + throw new VciBaseException("銆�" + unExistAttrVOs.stream().map(CodeClassifyTemplateAttrVO::getName) + "銆戣繖浜涘睘鎬у湪鍒楄〃涓病鏈夋壘鍒�"); } - } - //鎺掗櫎閿欒鐨勶紝鍓╀笅姝g‘鐨� - Map<String,String> newErrorMap=new HashMap<>(); - newErrorMap.putAll(resembleMap); - newErrorMap.putAll(errorMap); - needSaveCboList = cboList.stream().filter(cbo -> { - String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX); - return !newErrorMap.containsKey(rowIndex); - }).collect(Collectors.toList()); - if((errorMap.size()>0&&needSaveCboList.size()>0)||resembleMap.size()>0){ - isCreateUUid=true; - } - createRedisByCodeClassify(uuid + "-class",templateVO,dataSet,fieldIndexMap,false); - if(newErrorMap.size()>0) { - createRedisDatas(uuid + "-ok",templateVO, rowIndexCboMap, dataSet, fieldIndexMap, newErrorMap,true); - }else { - uuid=""; + List<ClientBusinessObject> cboList = new ArrayList<>(); + String fullPath = getFullPath(classifyFullInfo); + excelToCbo(classifyFullInfo, fieldIndexMap, rowDataList, templateVO, cboList, fullPath, true); - //瑕佹妸浠ヤ笂鐨勯敊璇殑閮芥姏鍑哄悗锛屽啀缁х画澶勭悊鏃堕棿鍜岀粍鍚堣鍒� - /*dataCBOList = cboList.stream().filter(cbo -> { + //閮借浆鎹㈠畬浜嗐�傞渶瑕佹壒閲忔鏌� + //濡傛灉鍑洪敊浜嗭紝鎴戜滑渚濈劧鎵ц鏈夋晥鐨勬暟鎹紝鏃犳晥鐨勬暟鎹啓鍥炲埌excel涓� + //2.鍒ゆ柇蹇呰緭椤广�傘�傞渶瑕佸叏閮ㄧ殑灞炴�э紝濡傛灉鏄繀杈擄紝浣嗘槸琛ㄥ崟閲岄潰涓嶆樉绀虹殑锛屽彧鑳芥槸鍒嗙被娉ㄥ叆鎴栬�呯粍鍚堣鍒� + batchCheckRequiredAttrOnOrder(templateVO, cboList, errorMap); + //3.鍒ゆ柇鍏抽敭灞炴�� + CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, templateVO, cboList, false, errorMap); + Set<String> selfRepeatRowIndexList = keyResultVO.getSelfRepeatRowIndexList(); + Set<String> keyAttrRepeatRowIndexList = keyResultVO.getKeyAttrRepeatRowIndexList(); + if (!CollectionUtils.isEmpty(selfRepeatRowIndexList)) { + selfRepeatRowIndexList.stream().forEach(rowIndex -> { + errorMap.put(rowIndex, errorMap.getOrDefault(rowIndex, "") + String.format(";鍦ㄥ綋鍓嶅鐞嗙殑鏁版嵁鏂囦欢涓叧閿睘鎬ч噸澶峓%s],[%s];", keyResultVO.getKeyAttrRuleInfo(), keyResultVO.getSynonymRuleInfo())); + }); + } + if (!CollectionUtils.isEmpty(keyAttrRepeatRowIndexList)) { + keyAttrRepeatRowIndexList.stream().forEach(rowIndex -> { + errorMap.put(rowIndex, errorMap.getOrDefault(rowIndex, "") + String.format("鍏抽敭灞炴�т笌绯荤粺涓殑閲嶅[%s],[%s];", keyResultVO.getKeyAttrRuleInfo(), keyResultVO.getSynonymRuleInfo())); + }); + } + //鍒嗙被娉ㄥ叆 + batchSwitchClassifyAttrOnOrder(attrVOS, cboList, classifyFullInfo, false); + //boolean + reSwitchBooleanAttrOnOrder(attrVOS, cboList); + //4.鏍¢獙瑙勫垯 + batchCheckVerifyOnOrder(attrVOS, cboList, errorMap); + if (isEnumType) {//鏄惁闇�瑕佹牎楠屾灇涓�/鍙傜収 + //5.鏍¢獙鏋氫妇鏄惁姝g‘ + batchSwitchEnumAttrOnOrder(attrVOS, cboList, errorMap); + //7.澶勭悊鍙傜収鐨勬儏鍐� + batchSwitchReferAttrOnOrder(attrVOS, cboList, errorMap); + } + //6.鏃堕棿鏍煎紡鐨勯獙璇� + //6.鏃堕棿鐨勶紝蹇呴』缁熶竴涓簓yyy-MM-dd HH:mm:ss + batchSwitchDateAttrOnOrder(attrVOS, cboList, errorMap); + //鏈�鍚庡紕缁勫悎瑙勫垯 + batchSwitchComponentAttrOnOrder(attrVOS, cboList); + uuid = VciBaseUtil.getPk(); + Map<String, ClientBusinessObject> rowIndexCboMap = cboList.stream().filter(cbo -> cbo != null).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getAttributeValue((IMPORT_ROW_INDEX)), t -> t)); + + if (errorMap.size() > 0) { + createRedisDatas(uuid + "-error", templateVO, rowIndexCboMap, dataSet, fieldIndexMap, errorMap, false); + } + boolean isCreateUUid = false; + List<ClientBusinessObject> needSaveCboList = cboList.stream().filter(cbo -> { + String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX); + return !errorMap.containsKey(rowIndex); + }).collect(Collectors.toList()); + //鐩镐技鏍¢獙 + Map<String, String> resembleMap = new HashMap<>(); + List<DataResembleVO> dataResembleVOS = new ArrayList<>(); + String btmtypeid = classifyFullInfo.getTopClassifyVO().getBtmTypeId(); + //鐩镐技椤规煡璇� + bathcResembleQuery(orderDTO.getCodeClassifyOid(), templateVO, needSaveCboList, resembleMap, btmtypeid, dataResembleVOS); + if (resembleMap.size() > 0) { + isCreateUUid = true; + if (!CollectionUtils.isEmpty(dataResembleVOS)) { + bladeRedis.set(uuid + "-resemble-data", dataResembleVOS); + createRedisDatas(uuid + "-resemble", templateVO, rowIndexCboMap, dataSet, fieldIndexMap, resembleMap, false); + } + } + //鎺掗櫎閿欒鐨勶紝鍓╀笅姝g‘鐨� + Map<String, String> newErrorMap = new HashMap<>(); + newErrorMap.putAll(resembleMap); + newErrorMap.putAll(errorMap); + needSaveCboList = cboList.stream().filter(cbo -> { String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX); return !newErrorMap.containsKey(rowIndex); }).collect(Collectors.toList()); -*/ List<String> dataCBOIdList=new ArrayList<>(); - List<BaseModel> dataCBOList=new ArrayList<>(); - cboList.stream().forEach(clientBusinessObject -> { - BaseModel baseModel=new BaseModel(); - BeanUtil.convert(clientBusinessObject,baseModel); - baseModel.setData(VciBaseUtil.objectToMapString(clientBusinessObject)); - dataCBOList.add(baseModel); - dataCBOIdList.add(baseModel.getOid()); - }); + if ((errorMap.size() > 0 && needSaveCboList.size() > 0) || resembleMap.size() > 0) { + isCreateUUid = true; + } + createRedisByCodeClassify(uuid + "-class", templateVO, dataSet, fieldIndexMap, false); + if (newErrorMap.size() > 0) { + createRedisDatas(uuid + "-ok", templateVO, rowIndexCboMap, dataSet, fieldIndexMap, newErrorMap, true); + } else { + uuid = ""; + final BladeUser user = AuthUtil.getUser(); + //瑕佹妸浠ヤ笂鐨勯敊璇殑閮芥姏鍑哄悗锛屽啀缁х画澶勭悊鏃堕棿鍜岀粍鍚堣鍒� + needSaveCboList = cboList.stream().filter(cbo -> { + String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX); + return !newErrorMap.containsKey(rowIndex); + }).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(needSaveCboList)) { - //9.鎴戜滑澶勭悊涓氬姟鏁版嵁 - //鐢熸垚缂栫爜鐨勫唴瀹� - try { - codeList = productCodeService.productCodeAndSaveData(classifyFullInfo,templateVO,ruleVO, orderDTO.getSecDTOList(),dataCBOList); - //濡傛灉鏄紪鐮佺敓鎴愬け璐ワ紝鍒欑洿鎺ュ氨澶辫触浜嗭紝鍏朵粬鐨勫垽鏂嚭鏉ユ湁閿欒鐨勬垜浠兘缁熶竴杩斿洖鍒癳xcel閲岄潰 - engineService.batchSaveSelectChar(templateVO, dataCBOIdList); - } catch (Exception e) { - e.printStackTrace(); - log.error("鎵逛簡鐢宠鏃跺け璐�"); + if (!CollectionUtils.isEmpty(needSaveCboList)) { + //9.鎴戜滑澶勭悊涓氬姟鏁版嵁 + //鐢熸垚缂栫爜鐨勫唴瀹� + List<String> dataCBOIdList = new ArrayList<>(); + List<BaseModel> dataCBOList = new ArrayList<>(); + cboList.stream().forEach(clientBusinessObject -> { + BaseModel baseModel = new BaseModel(); + BeanUtil.convert(clientBusinessObject, baseModel); + //baseModel.setData(VciBaseUtil.objectToMapString(clientBusinessObject)); + dataCBOList.add(baseModel); + dataCBOIdList.add(baseModel.getOid()); + }); + try { + codeList = productCodeService.productCodeAndSaveData(classifyFullInfo, templateVO, ruleVO, orderDTO.getSecDTOList(), dataCBOList, user); + //濡傛灉鏄紪鐮佺敓鎴愬け璐ワ紝鍒欑洿鎺ュ氨澶辫触浜嗭紝鍏朵粬鐨勫垽鏂嚭鏉ユ湁閿欒鐨勬垜浠兘缁熶竴杩斿洖鍒癳xcel閲岄潰 + engineService.batchSaveSelectChar(templateVO, dataCBOList); + } catch (Exception e) { + e.printStackTrace(); + log.error("鎵归噺鐢宠鏃跺け璐�"); + throw e; + } } } - } - if(!isCreateUUid){ - return uuid=""; + if (!isCreateUUid) { + return uuid = ""; + } + saveLogUtil.operateLog("鎵归噺鐢宠缂栫爜", false, StringUtil.format("鎵归噺瀵煎叆鐢宠鎴愬姛鍏眥}鏉℃暟鎹紝鐢熸垚鐨勭爜鍊煎涓嬨�恵}銆�", codeList.size(), codeList)); + } catch (Exception e) { + saveLogUtil.operateLog("鎵归噺鐢宠缂栫爜", true, e.toString()); + throw e; } return uuid; } @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; + List<CodeImportTemplateVO> codeImportTemplateVOs = new ArrayList<>(); + VciBaseUtil.alertNotNull(redisOid, "鍒嗙被", redisOid, "鍒嗙被缂撳瓨涓婚敭"); + List<CodeImportTemplateVO> redisServiceCacheObjects = bladeRedis.get(redisOid); + if (redisServiceCacheObjects != null) { + codeImportTemplateVOs = redisServiceCacheObjects; } return codeImportTemplateVOs; } @@ -545,24 +1865,24 @@ */ @Override public DataGrid<Map<String, String>> gridDatas(String codeClssifyOid, String redisOid) { - VciBaseUtil.alertNotNull(redisOid,"瀵煎叆鐩镐技鏁版嵁",redisOid,"鏁版嵁缂撳瓨涓婚敭"); - List<CodeImprotDataVO> codeImprotDataVOs = bladeRedis.lRange(redisOid+"-"+codeClssifyOid,0,-1); + VciBaseUtil.alertNotNull(redisOid, "瀵煎叆鐩镐技鏁版嵁", redisOid, "鏁版嵁缂撳瓨涓婚敭"); + List<CodeImprotDataVO> codeImprotDataVOs = bladeRedis.get(redisOid + "-" + codeClssifyOid); // 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); + 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(); + if (codeImprotDataVO != null) { + dataList = codeImprotDataVO.getDatas(); } dataGrid.setData(dataList); if (!CollectionUtils.isEmpty(dataList)) { @@ -572,23 +1892,23 @@ } /** - * * @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);; + public DataGrid<Map<String, String>> gridRowResemble(String oid, String redisOid) { + VciBaseUtil.alertNotNull(redisOid, "瀵煎叆鐩镐技鏁版嵁", redisOid, "鏁版嵁缂撳瓨涓婚敭"); + List<DataResembleVO> codeImprotDataVOs = bladeRedis.get(redisOid); + ; 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(); + 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(); } } @@ -600,16 +1920,464 @@ } /** + * 瀵煎嚭涓婚搴撶殑鏁版嵁 + * + * @param exportAttrDTO 瀵煎嚭鐩稿叧鐨勯厤缃紝蹇呴』瑕佹湁涓婚搴撳垎绫荤殑涓婚敭 + * @return 瀵煎嚭鐨別xcel鐨勬枃浠� + */ + @Override + public String exportCode(CodeExportAttrDTO exportAttrDTO) { + VciBaseUtil.alertNotNull(exportAttrDTO, "瀵煎嚭鐨勯厤缃�", exportAttrDTO.getCodeClassifyOid(), "涓婚搴撳垎绫荤殑涓婚敭"); + CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(exportAttrDTO.getCodeClassifyOid()); + //鑾峰彇鏈�鏂扮殑妯℃澘 + CodeClassifyTemplateVO templateVO = engineService.getUsedTemplateByClassifyOid(exportAttrDTO.getCodeClassifyOid()); + //鍏堟煡璇㈡暟鎹� + String btmTypeId = classifyFullInfo.getTopClassifyVO().getBtmTypeId(); + Map<String, String> conditionMap = exportAttrDTO.getConditionMap(); + if (conditionMap == null) { + conditionMap = new HashMap<>(); + } + if (conditionMap.containsKey(VciQueryWrapperForDO.OID_FIELD)) { + conditionMap.put(VciQueryWrapperForDO.OID_FIELD, QueryOptionConstant.IN + "(" + VciBaseUtil.toInSql(conditionMap.get(VciQueryWrapperForDO.OID_FIELD)) + ")"); + } + PageHelper pageHelper = new PageHelper(exportAttrDTO.getLimit() == null ? -1 : exportAttrDTO.getLimit()); + pageHelper.setPage(exportAttrDTO.getPage() == null ? 1 : exportAttrDTO.getPage()); + pageHelper.setSort(exportAttrDTO.getSort()); + pageHelper.setOrder(exportAttrDTO.getOrder()); + + pageHelper.addDefaultDesc("createTime"); + conditionMap.put("codeclsfpath", "*" + exportAttrDTO.getCodeClassifyOid() + "*"); + conditionMap.put("lastr", "1"); + conditionMap.put("lastv", "1"); + + R<List<BtmTypeVO>> listR = btmTypeClient.selectByIdCollection(Arrays.asList(btmTypeId)); + String tableName = ""; + if (listR.isSuccess() && !listR.getData().isEmpty()) { + tableName = Func.isNotBlank(listR.getData().get(0).getTableName()) ? listR.getData().get(0).getTableName() : VciBaseUtil.getTableName(btmTypeId); + } else { + tableName = VciBaseUtil.getTableName(btmTypeId); + } + + String countSql = "select count(*) from " + tableName + " where 1=1" + + " and lastr = '1'" + + " and lastv='1'" + + " and codeclsfpath like '%" + exportAttrDTO.getCodeClassifyOid() + "%'"; + //鍏堟煡璇㈡�绘暟 + int total = 0; + if (exportAttrDTO.getEndPage() != null && exportAttrDTO.getEndPage() > 0 + && exportAttrDTO.getPage() != null && exportAttrDTO.getPage() > 0 + && exportAttrDTO.getEndPage() > exportAttrDTO.getPage()) { + //浠庡灏戦〉鍒板灏戦〉鐨勬煡璇㈡柟寮忥紝 + String countPageSql = "select count(*) from (select * FROM " + tableName + " where 1=1" + + " and lastr = '1'" + + " and lastv='1'" + + " and codeclsfpath like '%" + exportAttrDTO.getCodeClassifyOid() + "%' {}"; + for (int i = exportAttrDTO.getPage(); i <= exportAttrDTO.getEndPage(); i++) { + PageHelper thisPage = new PageHelper(exportAttrDTO.getLimit() == null ? -1 : exportAttrDTO.getLimit()); + thisPage.setPage(exportAttrDTO.getPage() == null ? 1 : exportAttrDTO.getPage()); + thisPage.setSort(exportAttrDTO.getSort()); + thisPage.setOrder(exportAttrDTO.getOrder()); + thisPage.addDefaultDesc("createTime"); + total += commonsMapper.queryCountBySql(StringUtil.format(countPageSql, " limit " + exportAttrDTO.getLimit() + " offset " + i + ")subquery;")); + } + } else { + total = commonsMapper.queryCountBySql(countSql); + } + List<String> selectFieldList = new ArrayList<>(); + if (!CollectionUtils.isEmpty(exportAttrDTO.getAttrIdIndexMap())) { + selectFieldList = exportAttrDTO.getAttrIdIndexMap().values().stream().map(s -> s.toLowerCase(Locale.ROOT)).collect(Collectors.toList()); + } else { + selectFieldList = templateVO.getAttributes().stream().filter(s -> VciBaseUtil.getBoolean(s.getFormDisplayFlag()) + || VciBaseUtil.getBoolean(s.getTableDisplayFlag())).map(s -> s.getId().toLowerCase(Locale.ROOT)).collect(Collectors.toList()); + } + //鍙傜収璁╁钩鍙扮洿鎺ユ煡璇㈠氨琛� + List<String> finalSelectFieldList = selectFieldList; + List<CodeClassifyTemplateAttrVO> referAttrVOs = templateVO.getAttributes().stream().filter( + s -> StringUtils.isNotBlank(s.getReferBtmId()) + && + (finalSelectFieldList.size() == 0 || finalSelectFieldList.contains(s.getId().toLowerCase(Locale.ROOT))) + ).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(referAttrVOs)) { + for (int i = 0; i < referAttrVOs.size(); i++) { + selectFieldList.add(referAttrVOs.get(i).getId() + ".name"); + } + } + List<String> excelNameList = new CopyOnWriteArrayList<>(); + String tempFolder = LocalFileUtil.getDefaultTempFolder(); + if (total > EXPORT_LIMIT) { + //鍒嗙粍鏉ユ墽琛� + int queryCount = (total - total % EXPORT_LIMIT) / EXPORT_LIMIT; + if (total % EXPORT_LIMIT > 0) { + queryCount = queryCount + 1; + } + List<Integer> indexList = new ArrayList<>(); + for (int i = 0; i < queryCount; i++) { + indexList.add(i); + } + Map<String, String> finalConditionMap = conditionMap; + //骞惰鏌ヨ鐪嬬湅 + //SessionInfo sessionInfo = VciBaseUtil.getCurrentUserSessionInfo(); + indexList.stream().forEach(index -> { + //绾跨▼鐨勬柟寮忥紝鎵�浠ラ渶瑕佽缃綋鍓嶇敤鎴� + //VciBaseUtil.setCurrentUserSessionInfo(sessionInfo); + PageHelper thisPage = new PageHelper(EXPORT_LIMIT); + thisPage.setPage(index + 1); + thisPage.setSort(exportAttrDTO.getSort()); + thisPage.setOrder(exportAttrDTO.getOrder()); + thisPage.addDefaultDesc("createTime"); + selectDataAndExportExcelName(btmTypeId, finalConditionMap, thisPage, finalSelectFieldList, + classifyFullInfo, templateVO, exportAttrDTO, + excelNameList, tempFolder, index); + }); + } else { + pageHelper.setLimit(total); + pageHelper.setPage(1); + selectDataAndExportExcelName(btmTypeId, conditionMap, pageHelper, finalSelectFieldList, + classifyFullInfo, templateVO, exportAttrDTO, + excelNameList, tempFolder, 1); + } + if (excelNameList.size() == 0) { + throw new VciBaseException("娌℃湁鏁版嵁鍙互琚鍑�"); + } + if (excelNameList.size() == 1) { + return excelNameList.get(0); + } + //鏄涓紝鎴戜滑闇�瑕佹墦鎴愬帇缂╁寘 + String zipFileName = LocalFileUtil.getDefaultTempFolder() + File.separator + classifyFullInfo.getCurrentClassifyVO().getId() + "_" + classifyFullInfo.getCurrentClassifyVO().getName() + "_瀵煎嚭_" + excelNameList.size() + ".zip"; + VciZipUtil zipUtil = new VciZipUtil(); + File file = new File(tempFolder); + zipUtil.addFileToZip(file, zipFileName); + File[] files = file.listFiles(); + for (int i = 0; i < files.length; i++) { + LocalFileUtil.deleteTempFile(files[i], false); + } + LocalFileUtil.deleteTempFile(file, true); + return zipFileName; + } + + /** + * 鏌ヨ鏁版嵁骞跺鍑哄埌excel + * + * @param btmTypeId 涓氬姟绫诲瀷 + * @param conditionMap 鏌ヨ鏉′欢 + * @param pageHelper 鍒嗛〉 + * @param selectFieldList 鏌ヨ鐨勫瓧娈� + * @param classifyFullInfo 鍒嗙被鐨勫叏閮ㄤ俊鎭� + * @param templateVO 妯℃澘鐨勪俊鎭� + * @param exportAttrDTO 瀵煎嚭鐨勫睘鎬� + * @param excelNameList excel鐨勬枃浠跺悕绉� + * @param tempFolder 涓存椂鏂囦欢澶� + * @param excelIndex excel鐨勯『搴� + */ + private void selectDataAndExportExcelName(String btmTypeId, Map<String, String> conditionMap, PageHelper pageHelper, List<String> selectFieldList, + CodeClassifyFullInfoBO classifyFullInfo, CodeClassifyTemplateVO templateVO, CodeExportAttrDTO exportAttrDTO, + List<String> excelNameList, String tempFolder, + Integer excelIndex) { + DataGrid<Map<String, String>> dataGrid = engineService.queryGrid(btmTypeId, templateVO, conditionMap, pageHelper); + if (dataGrid == null || CollectionUtils.isEmpty(dataGrid.getData())) { + return; + } + //杞崲鏁版嵁 + List<Map<String, String>> dataMap = dataGrid.getData(); + //灏佽鏌ヨ鍑烘潵鐨勬暟鎹� + engineService.wrapperData(dataMap, templateVO, selectFieldList, false); + //modify by weidy@2022-09-27 + //鍥犱负鍦ㄥ垪琛ㄥ拰琛ㄥ崟鐨勬樉绀虹殑鏃跺�欙紝鎴戜滑鐨勫紑鍏崇被鍨嬮〉闈細澶勭悊锛屼絾鏄湪瀵煎嚭鐨勬椂鍊欙紝鎴戜滑闇�瑕佸皢true鍜宖alse閮芥浛鎹㈡垚涓枃 + engineService.wrapperBoolean(dataMap, templateVO); + Map<String, CodeClassifyTemplateAttrVO> attrVOMap = templateVO.getAttributes().stream().filter(s -> selectFieldList.contains(s.getId().toLowerCase(Locale.ROOT))).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t)); + Map<Integer, String> attrIdIndexMap = exportAttrDTO.getAttrIdIndexMap(); + if (CollectionUtils.isEmpty(attrIdIndexMap)) { + attrIdIndexMap = templateVO.getAttributes().stream().filter(s -> selectFieldList.contains(s.getId().toLowerCase(Locale.ROOT))).collect(Collectors.toMap(s -> s.getOrderNum(), t -> t.getId())); + } + List<Integer> indexList = attrIdIndexMap.keySet().stream().sorted().collect(Collectors.toList()); + + String excelName = tempFolder + File.separator + + classifyFullInfo.getCurrentClassifyVO().getId() + "_" + classifyFullInfo.getCurrentClassifyVO().getName() + "_瀵煎嚭_" + excelIndex + ".xls"; + try { + new File(excelName).createNewFile(); + } catch (Throwable e) { + throw new VciBaseException(LangBaseUtil.getErrorMsg(e), new String[]{excelName}, e); + } + excelNameList.add(excelName); + List<WriteExcelData> excelDataList = new ArrayList<>(); + Workbook workbook = new HSSFWorkbook(); + for (int i = 0; i < indexList.size(); i++) { + String attrId = attrIdIndexMap.get(indexList.get(i)).toLowerCase(Locale.ROOT); + if (attrVOMap.containsKey(attrId)) { + CodeClassifyTemplateAttrVO attrVO = attrVOMap.get(attrId); + Object text = attrVO.getName(); + text = exportKeyAndRequired(workbook, attrVO, text); + WriteExcelData excelData = new WriteExcelData(0, i, text); + if (text instanceof RichTextString) { + excelData.setFontColor(String.valueOf(HSSFColor.HSSFColorPredefined.RED.getIndex())); + } + excelDataList.add(excelData); + } + } + final Integer[] rowIndex = {0}; + Map<Integer, String> finalAttrIdIndexMap = attrIdIndexMap; + dataMap.stream().forEach(data -> { + rowIndex[0]++; + for (int i = 0; i < indexList.size(); i++) { + Integer index = indexList.get(i); + String attrId = finalAttrIdIndexMap.get(index).toLowerCase(Locale.ROOT); + if (attrVOMap.containsKey(attrId)) { + CodeClassifyTemplateAttrVO attrVO = attrVOMap.get(attrId); + if (StringUtils.isNotBlank(attrVO.getEnumId()) || StringUtils.isNotBlank(attrVO.getEnumString())) { + attrId = attrId + "Text"; + } + if (StringUtils.isNotBlank(attrVO.getReferBtmId()) || StringUtils.isNotBlank(attrVO.getReferConfig())) { + attrId = attrId + "name"; + } + if (VciQueryWrapperForDO.LC_STATUS_FIELD.equalsIgnoreCase(attrId)) { + attrId = VciQueryWrapperForDO.LC_STATUS_FIELD_TEXT.toLowerCase(Locale.ROOT); + } + excelDataList.add(new WriteExcelData(rowIndex[0], i, data.getOrDefault(attrId, ""))); + } + } + }); + WriteExcelOption excelOption = new WriteExcelOption(excelDataList); + ExcelUtil.writeDataToFile(excelName, excelOption); + } + + /** + * 鐩镐技椤规煡璇㈠嚭鏉ヤ箣鍚庡啀鐐瑰嚮纭鏃惰皟鐢ㄧ殑 + * + * @param codeImprotSaveDatVOList + * @param classifyAttr + * @param isImprot + * @return + */ + @Override + public R batchImportData(List<CodeImprotSaveDatVO> codeImprotSaveDatVOList, String classifyAttr, boolean isImprot) { + WriteExcelOption eo = new WriteExcelOption(); + AtomicBoolean success = new AtomicBoolean(true); + AtomicReference<CodeClassifyTemplateVO> codeClassifyTemplateVO = new AtomicReference<>(); + codeImprotSaveDatVOList.stream().forEach(codeImprotSaveDatVO -> { + List<SheetRowData> rowDataList = new ArrayList<>(); + List<ClientBusinessObject> cboList = new ArrayList<>(); + List<String> colList = codeImprotSaveDatVO.getClos(); + CodeOrderDTO orderDTO = codeImprotSaveDatVO.getOrderDTO(); + List<Map<String, String>> dataList = codeImprotSaveDatVO.getDataList(); + Map<Integer, String> fieldIndexMap = new HashMap(); + for (int i = 0; i < dataList.size(); i++) { + SheetRowData sheetRowData = new SheetRowData(); + Map<String, String> dataMap = dataList.get(i); + Map<Integer, String> data = new HashMap(); + final int[] colIndex = {0}; + Map<Integer, String> finalFieldIndexMap = new HashMap<>(); + dataMap.forEach((field, value) -> { + if (!ROW_INDEX.equalsIgnoreCase(field) && !ERROR_MSG.equalsIgnoreCase(field)) { + data.put(colIndex[0], value); + finalFieldIndexMap.put(colIndex[0]++, field); + } + }); + fieldIndexMap = finalFieldIndexMap; + sheetRowData.setData(data); + sheetRowData.setRowIndex(i + ""); + rowDataList.add(sheetRowData); + } + CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(orderDTO.getCodeClassifyOid()); + log.info("鍒嗙被锛�" + classifyFullInfo.getCurrentClassifyVO().getName() + "鏁版嵁:" + codeImprotSaveDatVO.getDataList().size()); + + // CodeClassifyTemplateVO codeClassifyTemplateVO= engineService.getUsedTemplateByClassifyOid(orderDTO.getCodeClassifyOid()); + codeClassifyTemplateVO.set(templateService.getObjectHasAttrByOid(orderDTO.getTemplateOid())); + //瑙勫垯鐨勪富閿渶瑕佸幓鑾峰彇 + CodeRuleVO ruleVO = engineService.getCodeRuleByClassifyFullInfo(classifyFullInfo); + //闄ゅ幓榛樿鐨勫睘鎬�.杩樻湁鍙湁琛ㄥ崟鏄剧ず鐨勫瓧娈垫墠瀵煎叆 + List<CodeClassifyTemplateAttrVO> attrVOS = codeClassifyTemplateVO.get().getAttributes().stream().filter(s -> + !DEFAULT_ATTR_LIST.contains(s.getId()) && + ((Func.isNotEmpty(s.getClassifyInvokeAttr()) || Func.isNotEmpty(s.getClassifyInvokeAttrName())) || VciBaseUtil.getBoolean(s.getFormDisplayFlag())) + ).collect(Collectors.toList()); + String fullPath = getFullPath(classifyFullInfo); + excelToCbo(classifyFullInfo, fieldIndexMap, rowDataList, codeClassifyTemplateVO.get(), cboList, fullPath, !isImprot); + Map<String, String> errorMap = new ConcurrentHashMap<>(); + Map<String/**璺緞**/, CodeClassifyVO> pathMap = new HashMap<>(); + //鏍¢獙缂栫爜瑙勫垯鍜岀爜娈垫槸鍚︽纭� + Map<String, List<String>> ruleRowIndexMap = new ConcurrentHashMap<>(); + Map<String, CodeRuleVO> ruleVOMap = new ConcurrentHashMap<>(); + if (isImprot) { + Map<String/**涓婚敭**/, String/**璺緞**/> childOidPathMap = getChildClassifyPathMap(classifyFullInfo, fullPath); + //閮借浆鎹㈠畬浜嗐�傞渶瑕佹壒閲忔鏌� + //鎵炬墍鏈夌殑鍒嗙被璺緞,闇�瑕佹牎楠岃矾寰勬槸鍚︽纭紝鏄惁閮藉湪褰撳墠鐨勫垎绫荤殑涓嬬骇 + List<CodeClassifyVO> childClassifyVOs = classifyService.listChildrenClassify(orderDTO.getCodeClassifyOid(), true, classifyAttr, true); + pathMap = Optional.ofNullable(childClassifyVOs).orElseGet(() -> new ArrayList<>()).stream().collect(Collectors.toMap(s -> s.getPath().startsWith("#") ? s.getPath().substring(1) : s.getPath(), t -> t)); + Map<String/**涓婚敭**/, CodeClassifyVO> classifyVOMap = Optional.ofNullable(childClassifyVOs).orElseGet(() -> new ArrayList<>()).stream().collect(Collectors.toMap(s -> s.getOid(), t -> t)); + classifyVOMap.put(classifyFullInfo.getCurrentClassifyVO().getOid(), classifyFullInfo.getCurrentClassifyVO()); + pathMap.put("#current#", classifyFullInfo.getCurrentClassifyVO()); + //鎴戜滑闇�瑕佸垽鏂繖浜涘垎绫荤殑妯℃澘鏄笉鏄竴鏍风殑锛屽彧闇�瑕佹牎楠岋紝涓嶇敤鑾峰彇 + //妫�鏌ュ垎绫荤殑璺緞 + checkClassifyPathInHistory(cboList, errorMap, pathMap, childOidPathMap); + //妫�鏌ヨ鍒� + Map<String/**鍒嗙被涓婚敭**/, String/**瑙勫垯涓婚敭**/> ruleOidMap = new ConcurrentHashMap<String, String>(); + List<String> unExistRuleClassifyOidList = new CopyOnWriteArrayList<>(); + checkRuleOidInHistory(classifyVOMap, ruleOidMap, unExistRuleClassifyOidList); + // TODO 鏀圭敤oid鏌ヨ鐨勶紝杩欏効涓嶈鐢╥d + ruleVOMap = ruleService.listCodeRuleByOids(ruleOidMap.values()).stream().collect(Collectors.toMap(s -> s.getOid(), t -> t)); + + checkSecLengthInHistory(cboList, classifyVOMap, ruleVOMap, ruleOidMap, errorMap, ruleRowIndexMap); + } + + //鍒嗙被娉ㄥ叆 + batchSwitchClassifyAttrOnOrder(attrVOS, cboList, classifyFullInfo, isImprot); + //boolean + reSwitchBooleanAttrOnOrder(attrVOS, cboList); + //4.鏍¢獙瑙勫垯 + batchCheckVerifyOnOrder(attrVOS, cboList, errorMap); + //5.鏍¢獙鏋氫妇鏄惁姝g‘ + batchSwitchEnumAttrOnOrder(attrVOS, cboList, errorMap); + //7.澶勭悊鍙傜収鐨勬儏鍐� + batchSwitchReferAttrOnOrder(attrVOS, cboList, errorMap); + //6.鏃堕棿鏍煎紡鐨勯獙璇� + //6.鏃堕棿鐨勶紝蹇呴』缁熶竴涓簓yyy-MM-dd HH:mm:ss + batchSwitchDateAttrOnOrder(attrVOS, cboList, errorMap); + //璁剧疆榛樿鍊� + batchSwitchAttrDefault(attrVOS, cboList); + //鏈�鍚庡紕缁勫悎瑙勫垯 + batchSwitchComponentAttrOnOrder(attrVOS, cboList); + //3.鍒ゆ柇鍏抽敭灞炴�� + CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, codeClassifyTemplateVO.get(), cboList, false, errorMap); + Set<String> selfRepeatRowIndexList = keyResultVO.getSelfRepeatRowIndexList(); + Set<String> keyAttrRepeatRowIndexList = keyResultVO.getKeyAttrRepeatRowIndexList(); + if (!CollectionUtils.isEmpty(keyAttrRepeatRowIndexList)) { + keyAttrRepeatRowIndexList.stream().forEach(rowIndex -> { + errorMap.put(rowIndex, errorMap.getOrDefault(rowIndex, "") + String.format("鍏抽敭灞炴�т笌绯荤粺涓殑閲嶅[%s],[%s];", keyResultVO.getKeyAttrRuleInfo(), keyResultVO.getSynonymRuleInfo())); + }); + } + //4.鏍¢獙瑙勫垯 + batchCheckVerifyOnOrder(attrVOS, cboList, errorMap); + + if (isImprot) { + List<ClientBusinessObject> needSaveCboList = cboList.stream().filter(cbo -> { + String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX); + return !errorMap.containsKey(rowIndex); + }).collect(Collectors.toList()); + List<ClientBusinessObject> finalNeedSaveCboList = needSaveCboList; + Map<String, CodeRuleVO> finalRuleVOMap = ruleVOMap; + // TODO锛� 澶氱嚎绋嬫祦濂楀绾跨▼娴侊紝鏈夊潙锛屾垜鎶婅繖鍎挎敼鎴愬崟绾跨▼浜� + final BladeUser user = AuthUtil.getUser(); + ruleRowIndexMap.keySet().stream().forEach(ruleOid -> { + List<BaseModel> dataCBOList = new CopyOnWriteArrayList<>(); + List<String> rowIndexList = ruleRowIndexMap.get(ruleOid); + List<ClientBusinessObject> thisCbos = needSaveCboList.stream().filter(cbo -> rowIndexList.contains(cbo.getAttributeValue(IMPORT_ROW_INDEX)) && !errorMap.containsKey(cbo.getAttributeValue(IMPORT_ROW_INDEX))).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(thisCbos)) { + thisCbos.stream().forEach(clientBusinessObject -> { + BaseModel baseModel = new BaseModel(); + BeanUtil.convert(clientBusinessObject, baseModel); + dataCBOList.add(baseModel); + }); + try { + productCodeService.productCodeAndSaveData(classifyFullInfo, codeClassifyTemplateVO.get(), finalRuleVOMap.get(ruleOid), null, dataCBOList, user); + } catch (Throwable e) { + //success=false; + log.error("鎵归噺浜х敓缂栫爜鐨勬椂鍊欏嚭閿欎簡", e); + thisCbos.stream().forEach(cbo -> { + String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX); + errorMap.put(rowIndex, errorMap.getOrDefault(rowIndex, "") + ";绯荤粺閿欒锛屽瓨鍌ㄦ暟鎹殑鏃跺�欏嚭閿欎簡:" + e.getMessage()); + }); + } + } + engineService.batchSaveSelectChar(codeClassifyTemplateVO.get(), dataCBOList); + }); + } else { + final BladeUser user = AuthUtil.getUser(); + List<BaseModel> dataCBOList = new ArrayList<>(); + List<ClientBusinessObject> needSaveCboList = cboList.stream().filter(cbo -> { + String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX); + return !errorMap.containsKey(rowIndex); + }).collect(Collectors.toList()); + log.info("鍒嗙被锛�" + classifyFullInfo.getCurrentClassifyVO().getName() + "鏁版嵁:" + needSaveCboList.size()); + if (!CollectionUtils.isEmpty(needSaveCboList)) { + needSaveCboList.stream().forEach(clientBusinessObject -> { + BaseModel baseModel = new BaseModel(); + BeanUtil.convert(clientBusinessObject, baseModel); + dataCBOList.add(baseModel); + }); + try { + productCodeService.productCodeAndSaveData(classifyFullInfo, codeClassifyTemplateVO.get(), ruleVO, orderDTO.getSecDTOList(), dataCBOList, user); + } catch (Exception e) { + log.error("鎵归噺浜х敓缂栫爜鐨勬椂鍊欏嚭閿欎簡", e); + needSaveCboList.stream().forEach(cbo -> { + String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX); + errorMap.put(rowIndex, errorMap.getOrDefault(rowIndex, "") + ";绯荤粺閿欒锛屽瓨鍌ㄦ暟鎹殑鏃跺�欏嚭閿欎簡:" + e.getMessage()); + }); + } + //濡傛灉鏄紪鐮佺敓鎴愬け璐ワ紝鍒欑洿鎺ュ氨澶辫触浜嗭紝鍏朵粬鐨勫垽鏂嚭鏉ユ湁閿欒鐨勬垜浠兘缁熶竴杩斿洖鍒癳xcel閲岄潰 + engineService.batchSaveSelectChar(codeClassifyTemplateVO.get(), dataCBOList); + } + } + if (errorMap.size() > 0) { + success.set(false); + LinkedList<WriteExcelData> excelDataList = new LinkedList<>(); + excelDataList.add(new WriteExcelData(0, 0, "閿欒淇℃伅")); + final int[] index = {1}; + errorMap.forEach((key, v) -> { + excelDataList.add(new WriteExcelData(index[0]++, 0, "绗�" + (Integer.parseInt(key) + 1) + "琛屾暟鎹細" + v)); + }); + eo.addSheetDataList(codeClassifyTemplateVO.get().getName() + "瀵煎叆妯℃澘", excelDataList); + } + }); + if (!success.get()) { + String excelName = LocalFileUtil.getDefaultTempFolder() + File.separator + (isImprot ? "鎵归噺鍘嗗彶閿欒淇℃伅.xls" : "鎵归噺鐢宠閿欒淇℃伅.xls"); + ExcelUtil.writeDataToFile(excelName, eo); + saveLogUtil.operateLog("鍘嗗彶鏁版嵁瀵煎叆", true, StringUtil.format("閿欒淇℃伅锛歿}", JSON.toJSONString(eo.getWriteDataMap()))); + return R.fail(excelName); + } else { + saveLogUtil.operateLog("鍘嗗彶鏁版嵁瀵煎叆", false, StringUtil.format("瀵煎叆鍒板垎绫粄}涓紝瀵煎叆鎴愬姛鎬绘暟涓猴細{}", JSON.toJSONString(codeClassifyTemplateVO), Func.isEmpty(codeImprotSaveDatVOList.get(0).getDataList().size()))); + return R.success(isImprot ? "鎵归噺鍘嗗彶瀵煎叆鎴愬姛" : "鎵归噺鐢宠鎴愬姛"); + } + } + + /*** + *鏍规嵁鏁版嵁oid浠庣紦瀛樹腑绉婚櫎鏁版嵁 + * @param redisOid redisid + * @param codeClssifyOid 瀛樺偍瑙勫垯鐨刼id + * @param dataOids 鎵�闇�鍒犻櫎鐨勬暟鎹� + * @return + */ + @Override + public R deleteDatas(String redisOid, String codeClssifyOid, String dataOids) { + VciBaseUtil.alertNotNull(redisOid, "鏁版嵁鍒犻櫎", redisOid, "鏁版嵁缂撳瓨涓婚敭"); + VciBaseUtil.alertNotNull(codeClssifyOid, "鏁版嵁鍒犻櫎", codeClssifyOid, "缂栫爜瑙勫垯缂撳瓨涓婚敭"); + VciBaseUtil.alertNotNull(dataOids, "鏁版嵁鍒犻櫎", dataOids, "鎵�闇�鍒犻櫎鐨勬暟鎹富閿�"); + try { + List<CodeImprotDataVO> codeImprotDataVOs = bladeRedis.lRange(redisOid + "-" + codeClssifyOid, 0, -1); + List<String> dataOidList = new ArrayList<>(); + codeImprotDataVOs.stream().forEach(codeImprotDataVO -> { + List<Map<String, String>> newDataList = new ArrayList<>(); + List<Map<String, String>> dataList = codeImprotDataVO.getDatas(); + dataList.stream().forEach(dataMap -> { + String oid = dataMap.get("oid"); + if (!dataOidList.contains(oid)) { + newDataList.add(dataMap); + } + + }); + codeImprotDataVO.setDatas(newDataList); + + }); + //閲嶆柊缂撳瓨 + bladeRedis.del(redisOid + "-" + codeClssifyOid); + bladeRedis.set(redisOid + "-" + codeClssifyOid, codeImprotDataVOs); + bladeRedis.expire(redisOid + "-" + codeClssifyOid, BATCHADD_REDIS_TIME); + return R.success("鍒犻櫎缂撳瓨鏁版嵁鎴愬姛"); + } catch (Throwable e) { + return R.fail("鍒犻櫎缂撳瓨鏁版嵁澶辫触!"); + } + } + + /** * 闆嗘垚鎵归噺鐢宠鏁版嵁 - * @param orderDTO 鍒嗙被鐨勪富閿� - * @param dataObjectVO 鏁版嵁淇℃伅 + * + * @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(),"涓婚搴撳垎绫讳富閿�"); + public void batchSyncApplyCode(CodeOrderDTO orderDTO, DataObjectVO dataObjectVO, LinkedList<XMLResultDataObjectDetailDO> resultDataObjectDetailDOs, boolean isCodeOrGroupCode) { + Map<String, String> errorMap = new ConcurrentHashMap<>(); + VciBaseUtil.alertNotNull(orderDTO, "缂栫爜鐢宠鐩稿叧鐨勬暟鎹�", orderDTO.getCodeClassifyOid(), "涓婚搴撳垎绫讳富閿�"); CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(orderDTO.getCodeClassifyOid()); //瑙勫垯鐨勪富閿渶瑕佸幓鑾峰彇 CodeRuleVO ruleVO = engineService.getCodeRuleByClassifyFullInfo(classifyFullInfo); @@ -618,87 +2386,1302 @@ //鏌ヨ鍒嗙被鍜屾ā鏉� //鍏堟壘鍒版瘡涓�琛岀殑鏍囬锛岀劧鍚庢牴鎹爣棰樻潵鑾峰彇瀵瑰簲鐨勫睘鎬� List<RowDatas> rowDataList = dataObjectVO.getRowData(); - Map<String , RowDatas>rowDataMap=new LinkedHashMap<>(); - rowDataList.stream().forEach(rowData->{ - rowDataMap.put(rowData.getRowIndex(),rowData); + 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()) + //闄ゅ幓榛樿鐨勫睘鎬�.杩樻湁鍙湁鍏锋湁鍒嗙被娉ㄥ叆鐨勬墠杩囨护鍑烘潵 + List<CodeClassifyTemplateAttrVO> attrVOS = templateVO.getAttributes().stream().filter( + s -> !DEFAULT_SYNC_ATTR_LIST.contains(s.getId()) && + ((Func.isNotEmpty(s.getClassifyInvokeAttr()) || Func.isNotEmpty(s.getClassifyInvokeAttrName())) || VciBaseUtil.getBoolean(s.getFormDisplayFlag())) ).collect(Collectors.toList()); - Map<Integer/**鍒楀彿**/,String/**瀛楁鐨勫悕绉�**/> fieldIndexMap = new HashMap<>(); + 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); + 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涓病鏈夋壘鍒�"); + if (!CollectionUtils.isEmpty(unExistAttrVOs)) { + String message = unExistAttrVOs.stream().map(CodeClassifyTemplateAttrVO::getName).collect(Collectors.joining(SERIAL_UNIT_SPACE)); + throw new VciBaseException("銆�" + message + "銆戣繖浜涘睘鎬у湪excel涓病鏈夋壘鍒�"); } - + List<ClientBusinessObject> cboList = new ArrayList<>(); String fullPath = getFullPath(classifyFullInfo); // List<CodeClassifyProcessTempVO> codeClassifyProcessTempVOS=codeClassifyProcessTempService.listProcessTemplate(templateVO.getOid(),"code_cls_flow_use_order"); - boolean isProcess=false; + 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); + Map<String, String> codeOidToSystemOidMap = new HashMap<>();//瀛樺偍缂栫爜鏁版嵁鍜岄泦鎴愮郴缁熸暟鎹畂id瀵圭収鏄犲皠 + excelToCbo(classifyFullInfo, titleRowData, fieldIndexMap, rowDataList, templateVO, cboList, fullPath, isProcess, "create", errorMap, codeOidToSystemOidMap); //閮借浆鎹㈠畬浜嗐�傞渶瑕佹壒閲忔鏌� //濡傛灉鍑洪敊浜嗭紝鎴戜滑渚濈劧鎵ц鏈夋晥鐨勬暟鎹紝鏃犳晥鐨勬暟鎹啓鍥炲埌excel涓� - //2.鍒ゆ柇蹇呰緭椤广�傘�傞渶瑕佸叏閮ㄧ殑灞炴�э紝濡傛灉鏄繀杈擄紝浣嗘槸琛ㄥ崟閲岄潰涓嶆樉绀虹殑锛屽彧鑳芥槸鍒嗙被娉ㄥ叆鎴栬�呯粍鍚堣鍒� + Map<String, String> errorKeyMap = new ConcurrentHashMap<>(); + //1.鍒嗙被娉ㄥ叆 + batchSwitchClassifyAttrOnOrder(attrVOS, cboList, classifyFullInfo, false); + //boolean + reSwitchBooleanAttrOnOrder(attrVOS, cboList); + // cboList.stream().forEach(cbo->{ + //2.鏍¢獙瑙勫垯 + batchCheckVerifyOnOrder(attrVOS, cboList, errorMap); + //3.鏍¢獙鏋氫妇鏄惁姝g‘ + batchSwitchEnumAttrOnOrder(attrVOS, cboList, errorMap); + //4.鏃堕棿鏍煎紡鐨勯獙璇� + //4.鏃堕棿鐨勶紝蹇呴』缁熶竴涓簓yyy-MM-dd HH:mm:ss + batchSwitchDateAttrOnOrder(attrVOS, cboList, errorMap); + //5.澶勭悊鍙傜収鐨勬儏鍐� + batchSwitchReferAttrOnOrder(attrVOS, cboList, errorMap); + //6璁剧疆榛樿鍊� + batchSwitchAttrDefault(attrVOS, cboList); + //2.鍒ゆ柇蹇呰緭椤广�傘�傞渶瑕佸叏閮ㄧ殑灞炴�э紝濡傛灉鏄繀杈擄紝浣嗘槸琛ㄥ崟閲岄潰涓嶆樉绀虹殑锛屽彧鑳芥槸鍒嗙被娉ㄥ叆鎴栬�呯粍鍚堣鍒� + batchCheckRequiredAttrOnOrder(templateVO, cboList, errorMap); + //鏈�鍚庡紕缁勫悎瑙勫垯 + batchSwitchComponentAttrOnOrder(attrVOS, cboList); + //3.鍒ゆ柇鍏抽敭灞炴�� + CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, templateVO, cboList, false, errorKeyMap); + log.info("================鏌ラ噸鍚庣殑errorKeyMap閿欒淇℃伅================="+JSON.toJSONString(errorKeyMap)); + Set<String> selfRepeatRowIndexList = keyResultVO.getSelfRepeatRowIndexList(); + Set<String> keyAttrRepeatRowIndexList = keyResultVO.getKeyAttrRepeatRowIndexList(); + + Map<String, List<String>> keyAttrOkOidTORepeatOidMap = keyResultVO.getKeyAttrOkOidTORepeatOidMap(); + if (!CollectionUtils.isEmpty(selfRepeatRowIndexList)) { + selfRepeatRowIndexList.stream().forEach(rowIndex -> { + /* //浼犲叆鏁版嵁涔嬮棿鍏抽敭灞炴�х殑鏍¢獙 + RowDatas rowData= rowDataMap.get(rowIndex); + XMLResultDataObjectDetailDO resultDataObjectDetailDO=new XMLResultDataObjectDetailDO(); + resultDataObjectDetailDO.setCode(""); + resultDataObjectDetailDO.setId(rowData.getOid()); + resultDataObjectDetailDO.setErrorid("1"); + resultDataObjectDetailDO.setMsg(errorMap.getOrDefault(rowIndex,"") + ";鍏抽敭灞炴�ч噸澶�"); + resultDataObjectDetailDOs.add(resultDataObjectDetailDO); + */ + errorKeyMap.put(rowIndex, errorKeyMap.getOrDefault(rowIndex, "") + String.format(";浼犲叆鐨勬暟鎹腑鍏抽敭灞炴�ч噸澶峓%s],[%s];", keyResultVO.getKeyAttrRuleInfo(), keyResultVO.getSynonymRuleInfo())); + }); + } + /**** + * 鍏抽敭灞炴�т笌绯荤粺涓噸澶嶇殑鍒ゆ柇 + */ + if (!CollectionUtils.isEmpty(keyAttrRepeatRowIndexList)) { + keyAttrRepeatRowIndexList.stream().forEach(rowIndex -> { + //浼犲叆鏁版嵁涔嬮棿鍏抽敭灞炴�х殑鏍¢獙 + /* RowDatas rowData= rowDataMap.get(rowIndex); + XMLResultDataObjectDetailDO resultDataObjectDetailDO=new XMLResultDataObjectDetailDO(); + resultDataObjectDetailDO.setCode(""); + resultDataObjectDetailDO.setId(rowData.getOid()); + resultDataObjectDetailDO.setErrorid("1"); + resultDataObjectDetailDO.setMsg(errorMap.getOrDefault(rowIndex,"") + ";鍏抽敭灞炴�т笌绯荤粺涓殑閲嶅" ); + resultDataObjectDetailDOs.add(resultDataObjectDetailDO); + */ + Map<String, List<BaseModel>> indexTODataMap = keyResultVO.getIndexTODataMap(); + if (indexTODataMap.containsKey(rowIndex)) { + List<BaseModel> baseModelList = indexTODataMap.get(rowIndex); + } + errorKeyMap.put(rowIndex, errorKeyMap.getOrDefault(rowIndex, "") + String.format("鍏抽敭灞炴�т笌绯荤粺涓殑閲嶅[%s],[%s];", keyResultVO.getKeyAttrRuleInfo(), keyResultVO.getSynonymRuleInfo())); + }); + } + //鏍¢獙灞炴�ф槸鍚︽纭敊璇俊鎭� + if (errorMap.size() > 0) { + String[] newMsg = {""}; + cboList.stream().forEach(cbo -> { + String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX); + if (errorMap.containsKey(rowIndex)) { + String oid = cbo.getOid(); + String sourceOid = oid; + if (codeOidToSystemOidMap.containsKey(oid)) { + sourceOid = codeOidToSystemOidMap.get(oid); + } + String code = ""; + String groupCode = ""; + String errorid = "103"; + String mes = errorMap.get(rowIndex); + XMLResultDataObjectDetailDO resultDataObjectDetailDO = new XMLResultDataObjectDetailDO(); + if (isCodeOrGroupCode) { + resultDataObjectDetailDO.setCode(groupCode); + } else { + resultDataObjectDetailDO.setCode(code); + } + resultDataObjectDetailDO.setId(sourceOid); + resultDataObjectDetailDO.setErrorid(errorid); + resultDataObjectDetailDO.setMsg(mes); + resultDataObjectDetailDOs.add(resultDataObjectDetailDO); + } + }); + + } + + Map<String, String> newKeyMap = new HashedMap(); + if (errorKeyMap.size() > 0) { + errorKeyMap.keySet().forEach(key -> { + if (!errorMap.containsKey(key)) { + newKeyMap.put(key, errorKeyMap.get(key)); + } + }); + if (newKeyMap.size() > 0) { + List<BaseModel> editBoList = new ArrayList<>(); + Map<String, List<BaseModel>> indexTodataMap = keyResultVO.getIndexTODataMap(); + cboList.stream().forEach(cbo -> { + String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX); + String msg = errorKeyMap.get(rowIndex); + if (indexTodataMap.containsKey(rowIndex)) { + String oid = cbo.getOid(); + String sourceOid = oid; + String code = ""; + String errorid = "201"; + if (codeOidToSystemOidMap.containsKey(oid)) { + sourceOid = codeOidToSystemOidMap.get(oid); + } + List<BaseModel> newCboList = indexTodataMap.get(rowIndex); + if (!CollectionUtils.isEmpty(newCboList)) { + //澶勭悊鍏抽敭灞炴�ф煡鍑哄鏉$殑璇濓紝鏍规嵁闆嗘垚璋冪敤鐨勫綋鍓嶅垎绫讳唬鍙峰彇褰撳墠鍒嗙被鐨勭爜鍊笺�� + Map<String/**缂栫爜**/, BaseModel/**閲嶅缂栫爜鏁版嵁**/> classOidTOBaseModelMap = new HashMap<>(); + newCboList.stream().forEach(baseModel -> { + String codeclsfid = baseModel.getData().get(CODE_CLASSIFY_OID_FIELD.toLowerCase(Locale.ROOT)); + classOidTOBaseModelMap.put(codeclsfid, baseModel); + }); + String codeclsfid = classifyFullInfo.getCurrentClassifyVO().getOid(); + if (classOidTOBaseModelMap.containsKey(codeclsfid)) { + BaseModel newCbo = classOidTOBaseModelMap.get(codeclsfid); + String lcstatus = newCbo.getLcStatus(); + String newOid = newCbo.getOid(); + Date ts = newCbo.getTs(); + code = StringUtils.isBlank(newCbo.getId()) ? "" : newCbo.getId(); + if (isCodeOrGroupCode) { + code = newCbo.getData().getOrDefault("GROUPCODE", ""); + if (StringUtils.isBlank(code)) { + errorid = "1"; + msg = "锛涚敵璇风殑缂栫爜绫诲瀷涓洪泦鍥㈢爜锛岀瓑寰呴泦鍥㈢紪鐮佽祴鍊�"; + } + } + String lastmodifier = newCbo.getLastModifier(); + if (lcstatus != null && !lcstatus.equals(CodeDefaultLC.RELEASED.getValue())) { + newCbo.setOid(newOid); + newCbo.setLastModifier(lastmodifier); + newCbo.setTs(ts); + cbo.setLastModifier(cbo.getLastModifier()); + editBoList.add(newCbo); + } + } else { + errorid = "205"; + msg += "锛涚紪鐮佸垯灞炰簬鍏朵粬鍒嗙被銆�"; + } + XMLResultDataObjectDetailDO resultDataObjectDetailDO = new XMLResultDataObjectDetailDO(); + resultDataObjectDetailDO.setCode(code); + resultDataObjectDetailDO.setId(sourceOid); + resultDataObjectDetailDO.setErrorid(errorid); + resultDataObjectDetailDO.setMsg(msg); + + resultDataObjectDetailDOs.add(resultDataObjectDetailDO); + } + } + }); + //鍏抽敭灞炴�ф洿鏀� + if (!CollectionUtils.isEmpty(editBoList)) { + engineService.updateBatchByBaseModel(classifyFullInfo.getTopClassifyVO().getBtmTypeId(), editBoList);//淇濆瓨鏁版嵁 + } + errorMap.putAll(errorKeyMap); + } + } + + // }); + + //瑕佹妸浠ヤ笂鐨勯敊璇殑閮芥姏鍑哄悗锛屽啀缁х画澶勭悊鏃堕棿鍜岀粍鍚堣鍒� + List<ClientBusinessObject> needSaveCboList = cboList.stream().filter(cbo -> { + String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX); + return !errorMap.containsKey(rowIndex); + }).collect(Collectors.toList()); + List<String> needRowIndexList = new ArrayList<>(); + if (!CollectionUtils.isEmpty(needSaveCboList)) { + //9.鎴戜滑澶勭悊涓氬姟鏁版嵁 + //鐢熸垚缂栫爜鐨勫唴瀹� + + List<String> allNeedSaveCboList = new ArrayList<>(); + List<BaseModel> dataCBOList = new ArrayList<>(); + final BladeUser user = AuthUtil.getUser(); + needSaveCboList.stream().forEach(clientBusinessObject -> { + BaseModel baseModel = new BaseModel(); + BeanUtil.convert(clientBusinessObject, baseModel); + //(VciBaseUtil.objectToMapString(clientBusinessObject)); + dataCBOList.add(baseModel); + allNeedSaveCboList.add(baseModel.getOid()); + }); + try { + List<String> applyGroupCodeIdList = new ArrayList<>(); + productCodeService.productCodeAndSaveData(classifyFullInfo, templateVO, ruleVO, orderDTO.getSecDTOList(), dataCBOList, user); + //濡傛灉鏄紪鐮佺敓鎴愬け璐ワ紝鍒欑洿鎺ュ氨澶辫触浜嗭紝鍏朵粬鐨勫垽鏂嚭鏉ユ湁閿欒鐨勬垜浠兘缁熶竴杩斿洖鍒癳xcel閲岄潰 + engineService.batchSaveSelectChar(templateVO, dataCBOList); + // if(!isProcess){ + dataCBOList.stream().forEach(needSaveCbo -> { + + XMLResultDataObjectDetailDO resultDataObjectDetailDO = new XMLResultDataObjectDetailDO(); + String code = StringUtils.isBlank(needSaveCbo.getId()) ? " " : needSaveCbo.getId(); + String groupCode = needSaveCbo.getData().getOrDefault("GROUPCODE", " "); + //resultDataObjectDetailDO.setCode(needSaveCbo.getId()); + String msg = "鐢宠缂栫爜鎴愬姛"; + String oid = needSaveCbo.getOid(); + String sourceOid = oid; + applyGroupCodeIdList.add(oid); + if (codeOidToSystemOidMap.containsKey(oid)) { + sourceOid = codeOidToSystemOidMap.get(oid); + } + if (isCodeOrGroupCode) { + if (StringUtils.isBlank(groupCode)) { + resultDataObjectDetailDO.setErrorid("1"); + msg = "鐢宠鐨勭紪鐮佺被鍨嬩负闆嗗洟鐮侊紝绛夊緟闆嗗洟缂栫爜璧嬪��"; + } + resultDataObjectDetailDO.setCode(groupCode); + } else { + resultDataObjectDetailDO.setCode(code); + resultDataObjectDetailDO.setErrorid("0"); + } + resultDataObjectDetailDO.setId(sourceOid); + resultDataObjectDetailDO.setMsg(msg); + resultDataObjectDetailDOs.add(resultDataObjectDetailDO); + //澶勭悊浼犻�佺殑鏁版嵁涓叧閿睘鎬ч噸澶嶇殑锛岀洿鎺ユ嬁鍒板凡缁忕敵璇峰埌缂栫爜鐨勬暟鎹紪鐮佺洿鎺ュ皢璧嬬粰鍏抽敭灞炴�ч噸澶嶇殑鏁版嵁 + LinkedList<XMLResultDataObjectDetailDO> repeatDataObjectDetailDOS = handleApplyDataKeyAttrRepeat(keyAttrOkOidTORepeatOidMap, codeOidToSystemOidMap, needSaveCbo, isCodeOrGroupCode); + resultDataObjectDetailDOs.addAll(repeatDataObjectDetailDOS); + }); + /* }else{ + needSaveCboList.stream().forEach(needSaveCbo->{ + XMLResultDataObjectDetailDO resultDataObjectDetailDO=new XMLResultDataObjectDetailDO(); + // resultDataObjectDetailDO.setCode(needSaveCbo.getId());//涓嶇敤杩斿洖缂栫爜 + String oid=needSaveCbo.getOid(); + String sourceOid=oid; + if(codeOidToSystemOidMap.containsKey(oid)){ + sourceOid=codeOidToSystemOidMap.get(oid); + } + resultDataObjectDetailDO.setId(sourceOid); + resultDataObjectDetailDO.setErrorid("204"); + resultDataObjectDetailDO.setMsg("鐢宠缂栫爜鎴愬姛锛岀瓑寰呯紪鐮佺郴缁熷彂甯冿紒"); + resultDataObjectDetailDOs.add(resultDataObjectDetailDO); + }); + + }*/ + //鏄惁璋冪敤闆嗗洟鎺ュ彛鐢宠鎺ュ彛 + if (isCodeOrGroupCode) { + if (!CollectionUtils.isEmpty(applyGroupCodeIdList)) { + this.sendApplyGroupcode(applyGroupCodeIdList, classifyFullInfo.getTopClassifyVO().getId(), sysIntegrationPushTypeEnum.ACCPET_APPCODE.getValue()); + } + } + + } catch (Throwable e) { + e.printStackTrace(); + needSaveCboList.stream().forEach(needSaveCbo -> { + XMLResultDataObjectDetailDO resultDataObjectDetailDO = new XMLResultDataObjectDetailDO(); + resultDataObjectDetailDO.setCode(""); + String oid = needSaveCbo.getOid(); + String sourceOid = oid; + if (codeOidToSystemOidMap.containsKey(oid)) { + sourceOid = codeOidToSystemOidMap.get(oid); + } + resultDataObjectDetailDO.setId(sourceOid); + resultDataObjectDetailDO.setErrorid("1"); + resultDataObjectDetailDO.setMsg("淇濆瓨鍑虹幇闂:" + e.getMessage()); + resultDataObjectDetailDOs.add(resultDataObjectDetailDO); + }); + + } + } } - @Override - public void batchSyncEditDatas(CodeClassifyVO codeClassifyVO, DataObjectVO dataObjectVO, LinkedList<XMLResultDataObjectDetailDO> resultDataObjectDetailDOs) { + /*** + *缁欏悓涓�鎵圭敵璇风紪鐮佸瓨鍦ㄥ叧閿睘鎬х殑鏁版嵁璧嬩笂涓�鑷寸紪鐮� + * @param keyAttrOkOidTORepeatOidMap 涓�鎵圭敵璇锋暟鎹叧閿睘鎬т竴鑷寸殑閲嶅鏁版嵁鏄犲皠鍏崇郴 + * @param codeOidToSystemOidMap + * @param needSaveCbo + * @param isCodeOrGroupCode + */ + private LinkedList<XMLResultDataObjectDetailDO> handleApplyDataKeyAttrRepeat(Map<String, List<String>> keyAttrOkOidTORepeatOidMap, Map<String, String> codeOidToSystemOidMap, BaseModel needSaveCbo, boolean isCodeOrGroupCode) { + LinkedList<XMLResultDataObjectDetailDO> resultDataObjectDetailDOs = new LinkedList<>(); + String oid = needSaveCbo.getOid(); + if (keyAttrOkOidTORepeatOidMap.containsKey(oid)) { + List<String> repeatOidList = keyAttrOkOidTORepeatOidMap.get(oid); + if (!CollectionUtils.isEmpty(repeatOidList)) { + String sourceNewOid = needSaveCbo.getOid(); + String sourceOid = sourceNewOid; + if (codeOidToSystemOidMap.containsKey(oid)) { + sourceOid = codeOidToSystemOidMap.get(oid); + } + String code = StringUtils.isBlank(needSaveCbo.getId()) ? " " : needSaveCbo.getId(); + String groupCode = needSaveCbo.getData().getOrDefault("GROUPCODE", " "); + String finalSourceOid = sourceOid; + repeatOidList.stream().forEach(repeatOid -> { + if (codeOidToSystemOidMap.containsKey(repeatOid)) { + XMLResultDataObjectDetailDO repeatresultDataObjectDetailDO = new XMLResultDataObjectDetailDO(); + String repeatSourceOid = codeOidToSystemOidMap.get(repeatOid); + //String repeatMsg = "姝ゆ暟鎹笌鐢宠鐨勭紪鐮佹暟鎹甶d涓恒��" + finalSourceOid + "銆戠殑鍏抽敭灞炴�т竴鑷达紝鍒欏彇鐩稿悓缂栫爜"; + String repeatMsg = "姝ゆ暟鎹笌鐢宠鐨勭紪鐮佹暟鎹甶d涓恒��" + code + "銆戠殑鍏抽敭灞炴�т竴鑷达紝鍒欏彇鐩稿悓缂栫爜"; + if (isCodeOrGroupCode) { + if (StringUtils.isBlank(groupCode)) { + repeatMsg = "鐢宠鐨勭紪鐮佺被鍨嬩负闆嗗洟鐮侊紝绛夊緟闆嗗洟缂栫爜璧嬪��"; + } + repeatresultDataObjectDetailDO.setCode(groupCode); + } else { + repeatresultDataObjectDetailDO.setCode(code); + } + repeatresultDataObjectDetailDO.setId(repeatSourceOid); + repeatresultDataObjectDetailDO.setErrorid("0"); + repeatresultDataObjectDetailDO.setMsg(repeatMsg); + resultDataObjectDetailDOs.add(repeatresultDataObjectDetailDO); + } + }); + } + } + return resultDataObjectDetailDOs; + } + /*** + * 闆嗘垚鎵归噺鍚屾鏇存柊鎺ュ彛 + * @param codeClassifyVO; + * @param dataObjectVO 鏁版嵁淇℃伅 + * @param resultDataObjectDetailDOs 閿欒淇℃伅 + * @param isCodeOrGroupCode 鏄惁鏇撮泦鍥㈢郴缁熸暟鎹� + */ + @Transactional(rollbackFor = VciBaseException.class) + @Override + public void batchSyncEditDatas(CodeClassifyVO codeClassifyVO, DataObjectVO dataObjectVO, LinkedList<XMLResultDataObjectDetailDO> resultDataObjectDetailDOs, boolean isCodeOrGroupCode) { + String errorid = ""; + String msg = ""; + //鏌ヨ鍒嗙被鍜屾ā鏉� + //鍏堟壘鍒版瘡涓�琛岀殑鏍囬锛岀劧鍚庢牴鎹爣棰樻潵鑾峰彇瀵瑰簲鐨勫睘鎬� + List<RowDatas> rowDataList = dataObjectVO.getRowData(); + Map<String, RowDatas> rowDataMap = new LinkedHashMap<>(); + Map<String, RowDatas> codeDataMap = new LinkedHashMap<>(); + rowDataList.stream().forEach(rowData -> { + rowDataMap.put(rowData.getRowIndex(), rowData); + codeDataMap.put(rowData.getCode(), rowData); + }); + //鎵剧涓�琛岋紝涓轰簡鎵炬爣棰� + CodeClassifyTemplateVO templateVO = engineService.getUsedTemplateByClassifyOid(codeClassifyVO.getOid()); + // 搴旇閮芥槸涓�涓垎绫讳笅鐨勪笟鍔℃暟鎹紝鎵剧涓�鏉$殑灏辫 + CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(codeClassifyVO.getOid()); + //鏍¢獙妯℃澘鏄笉鏄渶鏂扮殑 + //checkTemplateSync(sheetDataSetList,templateVO); + //闄ゅ幓榛樿鐨勫睘鎬�.杩樻湁鍙湁琛ㄥ崟鏄剧ず鐨勫瓧娈垫墠瀵煎叆 + List<CodeClassifyTemplateAttrVO> attrVOS = templateVO.getAttributes().stream().filter(s -> !DEFAULT_SYNC_ATTR_LIST.contains(s.getId()) && + ((Func.isNotEmpty(s.getClassifyInvokeAttr()) || Func.isNotEmpty(s.getClassifyInvokeAttrName())) || 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); + //Map<String, String> cboOidMap = new HashMap<>(); + //cboOidMap.put("id", QueryOptionConstant.IN + "(" + VciBaseUtil.toInSql(codeDataMap.keySet().toArray(new String[0])) + ")"); + String tableName = ""; + try { + R<BtmTypeVO> r = btmTypeClient.getAllAttributeByBtmId(classifyFullInfo.getTopClassifyVO().getBtmTypeId()); + if (!r.isSuccess()) { + throw new Throwable(r.getMsg()); + } + BtmTypeVO btmTypeVO = r.getData(); + if (btmTypeVO == null) { + throw new Throwable("鏍规嵁涓氬姟绫诲瀷鏈煡璇㈠埌涓氬姟绫诲瀷瀵硅薄锛�"); + } + tableName = btmTypeVO.getTableName(); + if (StringUtils.isBlank(tableName)) { + throw new Throwable("鏍规嵁涓氬姟绫诲瀷鏈煡璇㈠埌涓氬姟绫诲瀷鐩稿叧鑱旂殑琛�"); + } + } catch (Throwable e) { + log.error("鏌ヨ涓氬姟瀵硅薄琛�" + e); + XMLResultDataObjectDetailDO xmlResultDataObjectDetailDO = new XMLResultDataObjectDetailDO(); + xmlResultDataObjectDetailDO.setErrorid("103"); + xmlResultDataObjectDetailDO.setMsg("鏌ヨ涓氬姟瀵硅薄琛�" + e); + xmlResultDataObjectDetailDO.setId(""); + xmlResultDataObjectDetailDO.setCode(""); + resultDataObjectDetailDOs.add(xmlResultDataObjectDetailDO); + return; + } + + StringBuffer sb = new StringBuffer(); + sb.append(" select * from "); + sb.append(tableName); + sb.append(" where 1=1 "); + sb.append(" and lastr=1 and lastv=1"); + if (isCodeOrGroupCode) { + sb.append(" and ( groupcode in ("); + sb.append(VciBaseUtil.toInSql(codeDataMap.keySet().toArray(new String[0]))); + sb.append(")"); + sb.append(" or id in ("); + sb.append(VciBaseUtil.toInSql(codeDataMap.keySet().toArray(new String[0]))); + sb.append("))"); + } else { + sb.append(" and id in ("); + sb.append(VciBaseUtil.toInSql(codeDataMap.keySet().toArray(new String[0]))); + sb.append(")"); + } + + List<Map<String, String>> dataMapList = commonsMapper.queryByOnlySqlForMap(sb.toString()); + DefaultAttrAssimtUtil.mapToLowerCase(dataMapList, true); + List<ClientBusinessObject> cboList = ChangeMapTOClientBusinessObjects(dataMapList); + Map<String, ClientBusinessObject> codeSystemObjectMap = cboList.stream().filter(systeDataObject -> systeDataObject != null && StringUtils.isNotBlank(systeDataObject.getId())).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getId(), t -> t)); + Map<String, String> errorMap = new HashMap<>(); + List<CodeOrderDTO> codeOrderDTOList = new ArrayList<>(); + this.getCodeOrderDTOs(codeClassifyVO, templateVO, codeDataMap, codeSystemObjectMap, codeOrderDTOList, errorMap, isCodeOrGroupCode); + // List<CodeClassifyProcessTempVO> codeClassifyProcessTempVOS=codeClassifyProcessTempService.listProcessTemplate(templateVO.getOid(),"code_cls_flow_use_order"); + boolean isProcess = false; + /** if(!CollectionUtils.isEmpty(codeClassifyProcessTempVOS)){ + isProcess=true; + }**/ + + Map<String, CodeOrderDTO> orderDTOMap = codeOrderDTOList.stream().filter(orderDTO -> orderDTO != null && StringUtils.isNotBlank(orderDTO.getId())).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getId(), t -> t)); + List<BaseModel> updateList = new ArrayList<>(); + List<CodeAllCode> codeAllCodeList = new ArrayList<>(); + List<String> deleteList = new ArrayList<>(); + + // CodeClassifyTemplateVO firstTemplateVO = templateService.getObjectHasAttrByOid(orderDTOMap.values().stream().findFirst().get().getTemplateOid()); + Map<String, ClientBusinessObject> cboMap = cboList.stream().filter(cbo -> cbo != null).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getId(), t -> t)); + // boolean finalIsProcess = isProcess; + orderDTOMap.keySet().stream().forEach(code -> { + CodeOrderDTO orderDTO = orderDTOMap.get(code); + ClientBusinessObject cbo = cboMap.get(code); + String dataStatus = cbo.getLcStatus(); + RowDatas rowData = codeDataMap.get(code); + String status = rowData.getStatus(); + String lastModifier = rowData.getEditor(); + String operation = rowData.getOperation(); + if (cbo.getTs().compareTo(orderDTO.getTs()) == 0 ? false : true) { + // throw new VciBaseException("鏁版嵁涓嶆槸鏈�鏂扮殑锛屽彲鑳戒粬浜哄凡缁忎慨鏀癸紝璇峰埛鏂板悗鍐嶈瘯"); + errorMap.put(orderDTO.getId(), errorMap.getOrDefault(orderDTO.getId(), "") + ";鏁版嵁涓嶆槸鏈�鏂扮殑锛屽彲鑳戒粬浜哄凡缁忎慨鏀癸紝璇峰埛鏂板悗鍐嶈瘯"); + } + /* if (!CodeDefaultLC.EDITING.getValue().equalsIgnoreCase(cbo.getLcStatus()) && !orderDTO.isEditInProcess()) { + throw new VciBaseException("鏁版嵁涓嶆槸{0}鐨勭姸鎬侊紝涓嶅厑璁镐慨鏀�", new String[]{CodeDefaultLC.EDITING.getText()}); + }*/ + if (operation.equals("update")) { + //1.鍏堟敞鍏ワ紝鍐嶇粍鍚堬紝鏈�鍚庢牎楠� + switchClassifyLevelOnOrder(templateVO, classifyFullInfo, orderDTO, errorMap); + //2.澶勭悊缁勫悎瑙勫垯銆傜粍鍚堣鍒欎笉鑳戒娇鐢ㄧ紪鐮佺殑灞炴�э紝鍥犱负缂栫爜鐨勭敓鎴愬彲鑳芥槸闇�瑕佸睘鎬х殑 + switchComponentAttrOnOrder(templateVO, orderDTO); + //3.鏍¢獙瑙勫垯 + checkVerifyOnOrder(templateVO, orderDTO, errorMap); + //4.鏍¢獙鏋氫妇鐨勫唴瀹规槸鍚︽纭� + checkEnumOnOrder(templateVO, orderDTO, errorMap); + //5.澶勭悊鏃堕棿鏍煎紡锛屽湪鏁版嵁搴撻噷闈笉璁烘槸瀛楃涓茶繕鏄棩鏈熸牸寮忥紝閮戒娇鐢ㄧ浉鍚岀殑鏍煎紡瀛樺偍 + switchDateAttrOnOrder(templateVO, orderDTO); + //6. 鍒ゆ柇蹇呰緭椤� + checkRequiredAttrOnOrder(templateVO, orderDTO, errorMap); + //7.鍒ゆ柇鍏抽敭灞炴�� + checkKeyAttrOnOrder(classifyFullInfo, templateVO, orderDTO, errorMap); + //榛樿鐨勫唴瀹逛笉鑳藉彉锛屾墍浠ュ彧闇�瑕佹嫹璐濊嚜瀹氫箟鐨勭浉鍏冲睘鎬у嵆鍙� + copyValueToCBO(classifyFullInfo, cbo, orderDTO, templateVO, true, errorMap); + //浼佷笟鐮佸拰闆嗗洟鐮佺殑涓嶄慨鏀� + cbo.setDescription(StringUtils.isBlank(orderDTO.getDescription()) ? "" : orderDTO.getDescription()); + cbo.setName(orderDTO.getName()); + try { + //涓昏澶勭悊澶у皬鍐欓棶棰橈紝灏哾ata閲岄潰鐨勬暟鎹殑key閮借浆涓哄皬鍐� + HashMap<String, String> lowerData = new HashMap<>(); + Iterator<Map.Entry<String, String>> iterator = cbo.getData().entrySet().iterator(); + while (iterator.hasNext()) { + Map.Entry<String, String> next = iterator.next(); + lowerData.put(next.getKey().toLowerCase(Locale.ROOT), next.getValue()); + } + cbo.getData().clear(); + cbo.getData().putAll(lowerData); + cbo.setAttributeValueWithNoCheck("description", (StringUtil.isNotBlank(orderDTO.getData() + .get("description")) ? orderDTO.getData().get("description") : orderDTO.getDescription())); + // cbo.setAttributeValue("name", orderDTO.getName()); + // if(finalIsProcess){//鍦ㄦ祦绋嬩腑涓嶅厑璁告洿鏀� + // errorMap.put(code,errorMap.getOrDefault(code, errorMap.getOrDefault(code,"")+";鏁版嵁"+code+"鍦ㄦ祦绋嬩腑锛屼笉鍏佽鏇存敼!")); + // }else{ + Date date = new Date(); + cbo.setLcStatus(status); + cbo.setAttributeValue("lcstatus", status); + cbo.setLastModifyTime(date); + cbo.setLastModifier(lastModifier); + cbo.setLastModifyTime(date); + cbo.setAttributeValue("lastmodifier", lastModifier); + cbo.setAttributeValue("lastmodifytime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(date)); + cbo.setTs(date); + cbo.setAttributeValue("ts", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(date)); + // } + } catch (VciBaseException e) { + e.printStackTrace(); + } + + List<CodeAllCode> newCodeAllCodeList = codeAllCodeService.selectByWrapper(Wrappers.<CodeAllCode>query().lambda().eq(CodeAllCode::getCreateCodeOid, cbo.getOid())); + if (!CollectionUtils.isEmpty(newCodeAllCodeList)) { + CodeAllCode codeCbo = newCodeAllCodeList.get(0); + log.info("codeCbos code:" + codeCbo.getId()); + codeCbo.setLcStatus(status); + codeAllCodeList.add(codeCbo); + } + + BaseModel baseModel = new BaseModel(); + BeanUtil.convert(cbo, baseModel); + //baseModel.setData(VciBaseUtil.objectToMapString(cbo)); + updateList.add(baseModel); + } else if (operation.equals("delete")) {//濡傛灉鍦ㄦ祦绋嬩腑涓嶅厑璁稿垹闄わ紝涓嶅湪娴佺▼涓姸鎬佷负鍙戝竷鎴栬�呭仠鐢ㄧ殑鏁版嵁涓嶅厑璁稿垹闄わ紝灏嗗叾鏇存敼涓哄仠鐢紝鍏朵粬鐨勬儏鍐电洿鎺ュ垹闄� + // if(finalIsProcess){ + // errorMap.put(code,errorMap.getOrDefault(code, errorMap.getOrDefault(code,"")+";鏁版嵁"+code+"鍦ㄦ祦绋嬩腑锛屼笉鍏佽鍒犻櫎!")); + //}else { + try { + log.info("oid:" + cbo.getOid()); + List<CodeAllCode> newCodeAllCodeList = codeAllCodeService.selectByWrapper(Wrappers.<CodeAllCode>query().lambda().eq(CodeAllCode::getCreateCodeOid, cbo.getOid())); + log.info("codeCbos size:" + newCodeAllCodeList.size()); + if (!CollectionUtils.isEmpty(newCodeAllCodeList)) { + CodeAllCode codeCbo = newCodeAllCodeList.get(0); + log.info("codeCbos code:" + codeCbo.getId()); + codeCbo.setLcStatus(CodeDefaultLC.TASK_BACK.getValue()); + codeAllCodeList.add(codeCbo); + } + deleteList.add(cbo.getOid()); + } catch (VciBaseException e) { + e.printStackTrace(); + } + // } + } else if (operation.equals("editstatus")) { + try { + // if (finalIsProcess) { + // errorMap.put(code, errorMap.getOrDefault(code, errorMap.getOrDefault(code, "") + ";鏁版嵁" + code + "鍦ㄦ祦绋嬩腑锛屼笉鍏佽鏇存敼鐘舵��!")); + // } else { + cbo.setLcStatus(status); + cbo.setAttributeValue("lcstatus", status); + + // } + + List<CodeAllCode> newCodeAllCodeList = codeAllCodeService.selectByWrapper(Wrappers.<CodeAllCode>query().lambda().eq(CodeAllCode::getCreateCodeOid, cbo.getOid())); + if (!CollectionUtils.isEmpty(newCodeAllCodeList)) { + CodeAllCode codeCbo = newCodeAllCodeList.get(0); + log.info("codeCbos code:" + codeCbo.getId()); + codeCbo.setLcStatus(status); + codeAllCodeList.add(codeCbo); + } + + BaseModel baseModel = new BaseModel(); + BeanUtil.convert(cbo, baseModel); + //baseModel.setData(VciBaseUtil.objectToMapString(cbo)); + updateList.add(baseModel); + } catch (VciBaseException e) { + e.printStackTrace(); + } + } + }); + /** + * 閿欒淇℃伅杈撳嚭 + */ + if (errorMap.size() > 0) { + errorMap.keySet().forEach(code -> { + if (codeDataMap.containsKey(code)) { + RowDatas rowDatas = codeDataMap.get(code); + String dataMsg = errorMap.get(code); + String oid = rowDatas.getOid(); + XMLResultDataObjectDetailDO xmlResultDataObjectDetailDO = new XMLResultDataObjectDetailDO(); + xmlResultDataObjectDetailDO.setErrorid("103"); + xmlResultDataObjectDetailDO.setMsg(dataMsg); + xmlResultDataObjectDetailDO.setId(oid); + xmlResultDataObjectDetailDO.setCode(code); + resultDataObjectDetailDOs.add(xmlResultDataObjectDetailDO); + } + }); + } else { + //瀛樺偍鏁版嵁 + try { + engineService.updateBatchByBaseModel(classifyFullInfo.getTopClassifyVO().getBtmTypeId(), updateList); + codeAllCodeService.saveOrUpdateBatch(codeAllCodeList); + if (deleteList.size() > 0) { + commonsMapper.deleteByTaleAndOid(tableName, VciBaseUtil.toInSql(deleteList.toArray(new String[]{}))); + } + //鏄惁璋冪敤闆嗗洟鎺ュ彛鐢宠鎺ュ彛 + if (isCodeOrGroupCode) { + List<String> IdList = resultDataObjectDetailDOs.stream().filter(xMLResultDataObjectDetailDO -> com.alibaba.cloud.commons.lang.StringUtils.isNotBlank(xMLResultDataObjectDetailDO.getId())).map(XMLResultDataObjectDetailDO::getId).distinct().collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(IdList)) { + this.sendApplyGroupcode(IdList, classifyFullInfo.getTopClassifyVO().getBtmTypeId(), sysIntegrationPushTypeEnum.ACCPET_EDITCODE.getValue()); + } + } + errorid = "0"; + msg = "鏇存柊/鐘舵�佹洿鏀�/鍒犻櫎鎴愬姛锛�"; + } catch (Throwable e) { + errorid = "1"; + msg = "淇濆瓨澶辫触锛�" + e; + } finally { + String finalMsg = msg; + String finalErrorid = errorid; + cboList.stream().forEach(cbo -> { + String code = cbo.getId(); + if (codeDataMap.containsKey(code)) { + RowDatas rowDatas = codeDataMap.get(code); + String oid = rowDatas.getOid(); + XMLResultDataObjectDetailDO xmlResultDataObjectDetailDO = new XMLResultDataObjectDetailDO(); + xmlResultDataObjectDetailDO.setErrorid(finalErrorid); + xmlResultDataObjectDetailDO.setMsg(finalMsg); + xmlResultDataObjectDetailDO.setId(oid); + xmlResultDataObjectDetailDO.setCode(code); + resultDataObjectDetailDOs.add(xmlResultDataObjectDetailDO); + } + }); + + } + } + } + + /** + * 鏍¢獙灞炴�ф槸鍚︿负蹇呰緭 + * + * @param templateVO 妯℃澘鐨勬樉绀哄璞★紝闇�瑕佸寘鍚ā鏉垮睘鎬� + * @param orderDTO 缂栫爜鐢宠鐨勪俊鎭� + */ + private void checkRequiredAttrOnOrder(CodeClassifyTemplateVO templateVO, CodeOrderDTO orderDTO, Map<String, String> errorMap) { + Map<String, CodeClassifyTemplateAttrVO> requiredAttrMap = templateVO.getAttributes().stream().filter( + s -> VciBaseUtil.getBoolean(s.getRequireFlag()) && StringUtils.isBlank(s.getComponentRule()) + && StringUtils.isBlank(s.getClassifyInvokeAttr())) + .collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t)); + if (!CollectionUtils.isEmpty(requiredAttrMap)) { + requiredAttrMap.forEach((attrId, attrVO) -> { + //鍙湁浼佷笟缂栫爜锛岀姸鎬侊紝澶囨敞锛屾ā鏉夸富閿紝鍒嗙被涓婚敭杩欏嚑涓槸鍥哄畾鐨勶紝鍏朵綑閮芥槸鑷閰嶇疆鐨� + if (StringUtils.isBlank(getValueFromOrderDTO(orderDTO, attrId))) { + errorMap.put(orderDTO.getId(), errorMap.getOrDefault(orderDTO.getId(), "") + ";灞炴�с�恵" + attrVO.getName() + "}銆戝繀椤昏杈撳叆(閫夋嫨)鍐呭"); + // throw new VciBaseException("灞炴�с�恵0}銆戝繀椤昏杈撳叆(閫夋嫨)鍐呭", new String[]{attrVO.getName()}); + } + }); + } + } + + /** + * 杞崲缁勫悎瑙勫垯鐨勫�� + * + * @param templateVO 妯℃澘鐨勬樉绀哄璞★紝闇�瑕佸寘鍚ā鏉垮睘鎬� + * @param orderDTO 缂栫爜鐢宠鐨勪俊鎭� + */ + private void switchComponentAttrOnOrder(CodeClassifyTemplateVO templateVO, CodeOrderDTO orderDTO) { + Map<String, CodeClassifyTemplateAttrVO> compAttrVOMap = templateVO.getAttributes().stream().filter(s -> StringUtils.isNotBlank(s.getComponentRule())).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t)); + if (!CollectionUtils.isEmpty(compAttrVOMap)) { + Map<String, String> dataMap = WebUtil.objectToMapString(orderDTO); + + Map<String, String> dataLowMap = new HashMap<>(); + if (!CollectionUtils.isEmpty(dataMap)) { + dataMap.forEach((key, value) -> { + dataLowMap.put(key.toLowerCase(Locale.ROOT), value); + }); + } + dataLowMap.putAll(orderDTO.getData()); + compAttrVOMap.forEach((attrId, attrVO) -> { + dataLowMap.put(attrId, formulaService.getValueByFormula(dataLowMap, attrVO.getComponentRule())); + }); + dataLowMap.forEach((key, value) -> { + setValueToOrderDTO(orderDTO, key, value); + }); + } + } + + /** + * 鏍¢獙姝e垯琛ㄨ揪寮忔槸鍚︽纭� + * + * @param templateVO 妯℃澘鐨勪俊鎭紝蹇呴』鍖呭惈灞炴�х殑鍐呭 + * @param orderDTO 缂栫爜鐢宠鐨勭浉鍏崇殑淇℃伅 + */ + private void checkVerifyOnOrder(CodeClassifyTemplateVO templateVO, CodeOrderDTO orderDTO, Map<String, String> errorMap) { + Map<String, CodeClassifyTemplateAttrVO> verifyAttrVOMap = templateVO.getAttributes().stream().filter(s -> StringUtils.isNotBlank(s.getVerifyRule())).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t)); + if (!CollectionUtils.isEmpty(verifyAttrVOMap)) { + verifyAttrVOMap.forEach((attrId, attrVO) -> { + String value = getValueFromOrderDTO(orderDTO, attrId); + if (StringUtils.isNotBlank(value) && !value.matches(attrVO.getVerifyRule())) { + errorMap.put(orderDTO.getId(), errorMap.getOrDefault(orderDTO.getId(), "") + ";灞炴�" + attrVO.getName() + "]鐨勫�间笉绗﹀悎鏍¢獙瑙勫垯鐨勮姹�"); + //鏍¢獙姝e垯琛ㄨ揪寮� + // throw new VciBaseException("灞炴�{0}]鐨勫�间笉绗﹀悎鏍¢獙瑙勫垯鐨勮姹�", new String[]{attrVO.getName()}); + } + }); + } + } + + /** + * 鏍¢獙鍏抽敭灞炴�� + * + * @param classifyFullInfo 鍒嗙被鐨勫叏閮ㄤ俊鎭� + * @param templateVO 妯℃澘鐨勫唴瀹癸紝蹇呴』鍖呭惈妯℃澘灞炴�� + * @param orderDTO 缂栫爜鐢宠鐨勭浉鍏崇殑淇℃伅 + */ + private void checkKeyAttrOnOrder(CodeClassifyFullInfoBO classifyFullInfo, CodeClassifyTemplateVO templateVO, CodeOrderDTO orderDTO, Map<String, String> errorMap) { + //鍏堣幏鍙栧叧閿睘鎬х殑瑙勫垯锛屼篃鍒╃敤缁ф壙鐨勬柟寮� + CodeKeyAttrRepeatVO keyRuleVO = keyRuleService.getRuleByClassifyFullInfo(classifyFullInfo); + //娉ㄦ剰鐨勬槸keyRuleVO鍙兘涓虹┖锛岃〃绀轰笉浣跨敤瑙勫垯鎺у埗 + //鑾峰彇鎵�鏈夌殑鍏抽敭灞炴�� + Map<String, CodeClassifyTemplateAttrVO> ketAttrMap = templateVO.getAttributes().stream().filter(s -> VciBaseUtil.getBoolean(s.getKeyAttrFlag())).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t)); + // TODO:2024-02-01 鍏堣幏鍙栭厤缃簡杩戜箟璇嶆煡璇㈣鍒欑殑灞炴�э紝涓嶅悓浜庡叧閿睘鎬э紝璁剧疆浜嗚繎涔夎瘝鏌ヨ瑙勫垯鐨勫睘鎬у彲鑳芥槸澶氭潯涓嶅悓鐨勮繎涔夎瘝鏌ヨ瑙勫垯 + Map<String, CodeClassifyTemplateAttrVO> sysonymAttrMaps = templateVO.getAttributes().stream().filter(item -> Func.isNotBlank(item.getSysonymRuleOids())).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t)); + // 鑾峰彇鏄惁鏈夐厤缃繎涔夎瘝鏌ヨ瑙勫垯灞炴�� + Map<String, List<CodeSynonym>> codeSynonymMaps = new HashMap<>(); + if (!sysonymAttrMaps.isEmpty()) { + // 鏌ヨ杩戜箟璇嶈鍒欙紝瀛樺偍鏂瑰紡key锛氬睘鎬d锛寁alue杩戜箟璇嶆煡璇㈣鍒欏垪琛� + codeSynonymMaps = codeSynonymService.getCodeSynonymByOids(sysonymAttrMaps); + } + Map<String, String> conditionMap = new HashMap<>(); + boolean trimAll = keyRuleVO == null ? false : VciBaseUtil.getBoolean(keyRuleVO.getIgnoreallspaceflag()); + //鍏ㄩ儴鍘荤┖鐨勪紭鍏堢骇澶т簬鍘荤┖ + boolean trim = keyRuleVO == null ? false : VciBaseUtil.getBoolean(keyRuleVO.getIgnorespaceflag()); + boolean ignoreCase = keyRuleVO == null ? false : VciBaseUtil.getBoolean(keyRuleVO.getIgnorecaseflag()); + boolean ignoreWidth = keyRuleVO == null ? false : VciBaseUtil.getBoolean(keyRuleVO.getIgnorewidthflag()); + Map<String, List<CodeSynonym>> finalCodeSynonymMaps = codeSynonymMaps; + ketAttrMap.forEach((attrId, attrVO) -> { + String value = getValueFromOrderDTO(orderDTO, attrId); + if (value == null) { + value = ""; + } + engineService.wrapperKeyAttrConditionMap(value, keyRuleVO, finalCodeSynonymMaps.get(attrId), attrId, trim, ignoreCase, ignoreWidth, trimAll, conditionMap); + }); + + //娌℃湁闄愬埗鍒嗙被锛屼絾鏄竴涓ā鏉垮彧鍙兘鍦ㄤ竴涓笟鍔$被鍨嬮噷闈紝鎵�浠ョ洿鎺ユ煡璇㈣繖涓笟鍔$被鍨嬪嵆鍙� + if (!CollectionUtils.isEmpty(conditionMap)) { + String tableName = ""; + R<BtmTypeVO> r = btmTypeClient.getAllAttributeByBtmId(templateVO.getBtmTypeId()); + if (r.isSuccess()) { + BtmTypeVO btmTypeVO = r.getData(); + if (btmTypeVO != null) { + tableName = btmTypeVO.getTableName(); + + } + } + if (StringUtils.isBlank(tableName)) { + String errormsg = "鏍规嵁涓氬姟绫诲瀷鏈煡璇㈠埌鐩稿叧涓氬姟琛�"; + errorMap.put(orderDTO.getId(), errorMap.getOrDefault(orderDTO.getId(), "") + errormsg); + return; + } + //final String[] sql = {"select count(*) from " + tableName + " t where 1 = 1 "}; + final String[] sql = {"select t.id from " + tableName + " t where 1 = 1 "}; + conditionMap.forEach((key, value) -> { + if (StringUtils.isBlank(value) || value.equals(QueryOptionConstant.ISNULL)) { + sql[0] += " and " + key + " is null "; + } else { + sql[0] += " and " + key + " = " + value; + } + + }); + if (StringUtils.isNotBlank(orderDTO.getOid())) { + //淇敼鐨勬椂鍊欙紝闇�瑕佹帓闄よ嚜宸� + sql[0] += " and t.oid != '" + orderDTO.getOid() + "'"; + } else if (StringUtils.isNotBlank(orderDTO.getCopyFromVersion())) { + sql[0] += " and t.oid != '" + orderDTO.getCopyFromVersion() + "'"; + } + // 涓嶉渶瑕佸弬涓庢牎楠岀殑瑙勫垯oid + String isParticipateCheckOids = classifyService.selectLeafByParentClassifyOid(classifyFullInfo.getTopClassifyVO().getOid(), classifyFullInfo.getCurrentClassifyVO().getOid()); + if (Func.isNotBlank(isParticipateCheckOids)) { + sql[0] += " and codeclsfid not in(" + isParticipateCheckOids + ")"; + } + sql[0] += " and t.lastR = '1' and t.lastV = '1' "; + List<String> repeatData = commonsMapper.selectList(sql[0]); + if (!repeatData.isEmpty()) { + String ruleInfoMsg = keyRuleVO == null ? "" : "鏌ヨ瑙勫垯锛氬幓闄ょ┖鏍�--{0},蹇界暐澶у皬鍐�--{1},蹇界暐鍏ㄥ崐瑙�--{2},蹇界暐鍏ㄩ儴绌烘牸--{3}"; + String[] objs = new String[]{trim ? "鏄�" : "鍚�", ignoreCase ? "鏄�" : "鍚�", ignoreWidth ? "鏄�" : "鍚�", trimAll ? "鏄�" : "鍚�"}; + String defaultValue = ";鏍规嵁鎮ㄥ~鍐欑殑鍏抽敭灞炴�х殑鍐呭锛岀粨鍚堝叧閿睘鎬ф煡璇㈣鍒欙紝鍙戠幇杩欎釜鏁版嵁宸茬粡鍦ㄧ郴缁熶腑瀛樺湪浜�,鏁版嵁鐨勭紪鍙峰涓嬶細" + repeatData.stream().collect(Collectors.joining(",")) + "銆傝淇!銆�"; + String errormsg = defaultValue + MessageFormat.format(ruleInfoMsg, objs); + errorMap.put(orderDTO.getId(), errorMap.getOrDefault(orderDTO.getId(), "") + errormsg); + // throw new VciBaseException("鏍规嵁鎮ㄥ~鍐欑殑鍏抽敭灞炴�х殑鍐呭锛岀粨鍚堝叧閿睘鎬ф煡璇㈣鍒欙紝鍙戠幇杩欎釜鏁版嵁宸茬粡鍦ㄧ郴缁熶腑瀛樺湪浜嗐�傝淇!銆�" + ruleInfoMsg, objs); + } + } + } + + /** + * 鏍¢獙鏋氫妇鐨勫唴瀹� + * + * @param templateVO 妯℃澘鐨勬樉绀哄璞★紝闇�瑕佸寘鍚睘鎬� + * @param orderDTO 缂栫爜鐢宠鐨勪俊鎭� + */ + private void checkEnumOnOrder(CodeClassifyTemplateVO templateVO, CodeOrderDTO orderDTO, Map<String, String> errorMap) { + //濡傛灉鏋氫妇鍙互淇敼锛屽垯涓嶉渶瑕佹牎楠屾槸鍚︾鍚堟灇涓剧殑閫夐」 + Map<String, CodeClassifyTemplateAttrVO> enumAttrVOMap = templateVO.getAttributes().stream().filter(s -> (StringUtils.isNotBlank(s.getEnumString()) || StringUtils.isNotBlank(s.getEnumId())) && !VciBaseUtil.getBoolean(s.getEnumEditFlag())).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t)); + if (!CollectionUtils.isEmpty(enumAttrVOMap)) { + enumAttrVOMap.forEach((attrId, attrVO) -> { + String value = getValueFromOrderDTO(orderDTO, attrId); + if (StringUtils.isNotBlank(value)) { + //鏈夊�兼墠鑳芥牎楠� + List<KeyValue> comboboxKVs = this.engineService.listComboboxItems(attrVO); + if (!comboboxKVs.stream().anyMatch(s -> value.equalsIgnoreCase(s.getKey()))) { + errorMap.put(orderDTO.getId(), errorMap.getOrDefault(orderDTO.getId(), "") + ";灞炴�с��" + attrVO.getName() + "銆戠殑鍊间笉绗﹀悎鏋氫妇鐨勮姹�"); + //throw new VciBaseException("灞炴�с�恵0}銆戠殑鍊间笉绗﹀悎鏋氫妇鐨勮姹�", new String[]{attrVO.getName()}); + } + } + }); + } + } + + /** + * 杞崲鏃堕棿鐨勬牸寮� + * + * @param templateVO 妯℃澘鐨勬樉绀哄璞★紝闇�瑕佸寘鍚睘鎬� + * @param orderDTO 缂栫爜鐢宠鐨勪俊鎭� + */ + private void switchDateAttrOnOrder(CodeClassifyTemplateVO templateVO, CodeOrderDTO orderDTO) { + Map<String, CodeClassifyTemplateAttrVO> dateAttrVOMap = templateVO.getAttributes().stream().filter(s -> StringUtils.isNotBlank(s.getCodeDateFormat())).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t)); + if (!CollectionUtils.isEmpty(dateAttrVOMap)) { + dateAttrVOMap.forEach((attrId, attrVO) -> { + String value = getValueFromOrderDTO(orderDTO, attrId); + if (StringUtils.isNotBlank(value)) { + DateConverter dateConverter = new DateConverter(); + dateConverter.setAsText(value); + value = VciDateUtil.date2Str(dateConverter.getValue(), VciDateUtil.DateTimeMillFormat); + setValueToOrderDTO(orderDTO, attrId, value); + } + }); + } + } + + /** + * 鎷疯礉鏁版嵁鍒癱bo瀵硅薄涓� + * + * @param classifyFullInfo 鍒嗙被鐨勫叏閮ㄤ俊鎭� + * @param cbo 涓氬姟鏁版嵁 + * @param orderDTO 缂栫爜鐢宠鐨勪俊鎭� + * @param templateVO 妯℃澘鐨勬樉绀哄璞� + * @param edit 鏄惁涓轰慨鏀� + */ + private void copyValueToCBO(CodeClassifyFullInfoBO classifyFullInfo, ClientBusinessObject cbo, + CodeOrderDTO orderDTO, CodeClassifyTemplateVO templateVO, + boolean edit, Map<String, String> errorMap) { + String fullPath = ""; + if (!CollectionUtils.isEmpty(classifyFullInfo.getParentClassifyVOs())) { + fullPath = classifyFullInfo.getParentClassifyVOs().stream().sorted(((o1, o2) -> o2.getDataLevel().compareTo(o1.getDataLevel()))) + .map(CodeClassifyVO::getOid).collect(Collectors.joining("##")); + } else { + fullPath = classifyFullInfo.getCurrentClassifyVO().getOid(); + } + orderDTO.getData().forEach((key, value) -> { + if (!edit || (!engineService.checkUnAttrUnEdit(key) && + !VciQueryWrapperForDO.LC_STATUS_FIELD.equalsIgnoreCase(key))) { + try { + cbo.setAttributeValue(key, value); + } catch (VciBaseException e) { + log.error("璁剧疆灞炴�х殑鍊奸敊璇�", e); + } + } + }); + try { + cbo.setAttributeValue(CODE_CLASSIFY_OID_FIELD, classifyFullInfo.getCurrentClassifyVO().getOid()); + cbo.setAttributeValue(CODE_TEMPLATE_OID_FIELD, templateVO.getOid()); + cbo.setAttributeValue(CODE_FULL_PATH_FILED, fullPath); + if (!edit && StringUtils.isBlank(orderDTO.getLcStatus())) { + //鎵剧敓鍛藉懆鏈熺殑璧峰鐘舵�侊紝 + if (StringUtils.isNotBlank(cbo.getLctid())) { + //OsLifeCycleVO lifeCycleVO = lifeCycleService.getLifeCycleById(cbo.getLctid()); +// if (lifeCycleVO != null) { +// cbo.setLcStatus(lifeCycleVO.getStartStatus()); +// } else { + cbo.setLcStatus(CodeDefaultLC.RELEASED.getValue()); +// } + } else { + cbo.setLcStatus(CodeDefaultLC.RELEASED.getValue()); + } + + } + int secret = VciBaseUtil.getInt(cbo.getAttributeValue(SECRET_FIELD)); + if (secret == 0 || !secretService.checkDataSecret(secret).getData()) { + Integer userSecret = VciBaseUtil.getCurrentUserSecret(); + cbo.setAttributeValue(SECRET_FIELD, String.valueOf((userSecret == null || userSecret == 0) ? UserSecretEnum.NONE.getValue() : userSecret)); + } + } catch (Throwable e) { + log.error("璁剧疆榛樿鐨勫睘鎬х殑鍊奸敊璇�", e); + } + } + + /** + * 璁剧疆鏂扮殑鍊煎埌鐢宠瀵硅薄涓� + * + * @param orderDTO 缂栫爜鐢宠瀵硅薄 + * @param attrId 灞炴�х殑缂栧彿 + * @param value 鍊� + */ + private void setValueToOrderDTO(CodeOrderDTO orderDTO, String attrId, String value) { + attrId = attrId.toLowerCase(Locale.ROOT); + if (VciQueryWrapperForDO.BASIC_FIELD_MAP.containsKey(attrId)) { + WebUtil.setValueToField(WebUtil.getFieldForObject(attrId, orderDTO.getClass()).getName(), orderDTO, value); + } else { + orderDTO.getData().put(attrId, value); + } + } + + /** + * 浠庣紪鐮佺敵璇蜂俊鎭璞′笂鑾峰彇鏌愪釜灞炴�х殑鍊� + * + * @param orderDTO 缂栫爜鐢宠瀵硅薄 + * @param attrId 灞炴�х殑缂栧彿 + * @return 鍊� + */ + private String getValueFromOrderDTO(CodeOrderDTO orderDTO, String attrId) { + attrId = attrId.toLowerCase(Locale.ROOT); + String value = null; + if (VciQueryWrapperForDO.BASIC_FIELD_MAP.containsKey(attrId)) { + value = WebUtil.getStringValueFromObject(WebUtil.getValueFromField(WebUtil.getFieldForObject(attrId, orderDTO.getClass()).getName(), orderDTO)); + } else { + //璇存槑鏄嚜琛岄厤缃殑 + //鍓嶇蹇呴』瑕佷紶閫掑皬鍐欑殑灞炴�� + value = orderDTO.getData().getOrDefault(attrId, ""); + } + return value; + } + + /** + * 澶勭悊鍒嗙被娉ㄥ叆鐨勪俊鎭� + * + * @param templateVO 妯℃澘鐨勬樉绀哄璞★紝蹇呴』瑕佸悗妯℃澘鐨勫睘鎬� + * @param classifyFullInfoBO 鍒嗙被鐨勫叏璺緞 + * @param orderDTO 缂栫爜鐢宠鐨勪俊鎭� + */ + private void switchClassifyLevelOnOrder(CodeClassifyTemplateVO templateVO, CodeClassifyFullInfoBO classifyFullInfoBO, CodeOrderDTO orderDTO, Map<String, String> errorMap) { + Map<String, CodeClassifyTemplateAttrVO> classifyAttrVOMap = templateVO.getAttributes().stream().filter( + s -> StringUtils.isNotBlank(s.getClassifyInvokeAttr()) && StringUtils.isNotBlank(s.getClassifyInvokeLevel()) + ).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t)); + if (classifyFullInfoBO.getTopClassifyVO() == null) { + //闇�瑕侀噸鏂版煡璇竴涓嬶紝鍥犱负杩欎釜鏄寚瀹氱殑鍒嗙被杩涙潵鐨� + + } + if (!CollectionUtils.isEmpty(classifyAttrVOMap)) { + classifyAttrVOMap.forEach((attrId, attrVO) -> { + //鍒嗙被娉ㄥ叆鐨勭紪鍙锋垨鑰呭悕绉帮紝 + //灞傜骇鍖呭惈鎸囧畾灞傚拰鏈�灏忓眰 + CodeClassifyVO classifyVO = null; + if (!CodeLevelTypeEnum.MIN.getValue().equalsIgnoreCase(attrVO.getClassifyInvokeLevel()) && !"min".equalsIgnoreCase(attrVO.getClassifyInvokeLevel())) { + //鎸囧畾浜嗗眰绾х殑 + //娉ㄦ剰锛屽洜涓烘煡璇笂绾у垎绫诲嚭鏉ョ殑灞傜骇鏄�掑簭鐨勶紝鍗抽《灞傝妭鐐规槸鏈�澶х殑鍊� + List<CodeClassifyVO> classifyVOS = classifyFullInfoBO.getParentClassifyVOs().stream().sorted(((o1, o2) -> o2.getDataLevel().compareTo(o1.getDataLevel()))).collect(Collectors.toList()); + int level = VciBaseUtil.getInt(attrVO.getClassifyInvokeLevel()); + if (classifyVOS.size() >= level && level > 0) { + classifyVO = classifyVOS.get(level - 1); + } + } else { + //褰撳墠鐨勫垎绫� + classifyVO = classifyFullInfoBO.getCurrentClassifyVO(); + } + if (classifyVO == null) { + //璇存槑灞傜骇鏈夎 + errorMap.put(orderDTO.getId(), errorMap.getOrDefault(orderDTO.getId(), "") + ";鍒嗙被鏍戜笂娌℃湁灞傜骇[" + attrVO.getClassifyInvokeLevel() + "]"); + //orderDTO.getData().put(attrId, "鍒嗙被鏍戜笂娌℃湁灞傜骇[" + attrVO.getClassifyinvokelevel() + "]"); + // classifyVO = classifyFullInfoBO.getCurrentClassifyVO(); + } else { + Map<String, String> classifyDataMap = VciBaseUtil.objectToMapString(classifyVO); + String value = classifyDataMap.getOrDefault(attrVO.getClassifyInvokeAttr(), ""); + orderDTO.getData().put(attrId, value); + } + }); + } + } + + /*** + * + * @param codeClassifyVO + * @param templateVO + * @param codeDataMap + * @param codeSystemObjectMap + * @param codeOrderDTOList + * @param errorMap + * @return + */ + private void getCodeOrderDTOs(CodeClassifyVO codeClassifyVO, CodeClassifyTemplateVO templateVO, Map<String, RowDatas> codeDataMap, Map<String, ClientBusinessObject> codeSystemObjectMap, List<CodeOrderDTO> codeOrderDTOList, Map<String, String> errorMap, boolean isCodeOrGroupCode) { + codeSystemObjectMap.keySet().forEach(code -> { + ClientBusinessObject sysDataObject = codeSystemObjectMap.get(code); + if (isCodeOrGroupCode) { + // code = sysDataObject.getAttributeValue("GROUPCODE"); + if (StringUtils.isBlank(code)) { + code = sysDataObject.getId(); + } + } + CodeOrderDTO orderDTO = new CodeOrderDTO(); + if (codeDataMap.containsKey(code)) { + RowDatas rowDatas = codeDataMap.get(code); + Map<String, String> data = rowDatas.getFiledValue(); + orderDTO.setCodeClassifyOid(codeClassifyVO.getOid());//鍒嗙被涓婚敭 + orderDTO.setOid(sysDataObject.getOid());//鏁版嵁oid + orderDTO.setLcStatus(rowDatas.getStatus());//鐘舵�� + orderDTO.setId(code); + orderDTO.setTs(sysDataObject.getTs()); + orderDTO.setBtmname(codeClassifyVO.getBtmname());//涓氬姟绫诲瀷 + orderDTO.setDescription("闆嗘垚璋冪敤:鏇存柊");//鏁版嵁鎻忚堪 + if (data.containsKey("name")) { + String name = data.get("name"); + orderDTO.setName(name);//鍚嶇О灞炴�у�� + } + orderDTO.setData(data);//璁剧疆鏁版嵁 + orderDTO.setSecDTOList(null);//鍒嗙被鐮佹 + orderDTO.setEditInProcess(false);//鏄惁鍦ㄦ祦绋嬩腑 + orderDTO.setTemplateOid(templateVO.getOid()); + } else { + errorMap.put("code", "缂栫爜涓猴細銆�" + code + "銆戠殑鏁版嵁鍦ㄧ郴缁熶腑涓嶅瓨鍦�"); + } + codeOrderDTOList.add(orderDTO); + }); } /** * 鑾峰彇鍒嗙被鐨勫叏璺緞 + * * @param classifyFullInfo 鍒嗙被鐨勫叏閮ㄤ俊鎭� * @return 鍏ㄨ矾寰� */ - private String getFullPath(CodeClassifyFullInfoBO classifyFullInfo){ + private String getFullPath(CodeClassifyFullInfoBO classifyFullInfo) { String fullPath = ""; - if(!CollectionUtils.isEmpty(classifyFullInfo.getParentClassifyVOs())){ + if (!CollectionUtils.isEmpty(classifyFullInfo.getParentClassifyVOs())) { fullPath = classifyFullInfo.getParentClassifyVOs().stream().sorted(((o1, o2) -> o1.getDataLevel().compareTo(o2.getDataLevel()))) .map(CodeClassifyVO::getOid).collect(Collectors.joining("##")); - }else{ + } else { fullPath = classifyFullInfo.getCurrentClassifyVO().getOid(); } return fullPath; } /** - * excel杞崲涓篶bo鐨勫璞� - * @param classifyFullInfo 鍒嗙被鐨勫叏閮ㄤ俊鎭� - * @param fieldIndexMap 瀛楁鐨勪綅缃� - * @param rowDataList excel閲岀殑琛屾暟鎹� - * @param templateVO 妯℃澘鐨勬樉绀哄璞� - * @param cboList 鏁版嵁鐨勫垪琛� - * @param fullPath 鍏ㄨ矾寰� - * @param newCode 鏄惁涓烘壒閲忕敵璇� + * 妫�鏌ョ爜娈电殑闀垮害鏄惁绗﹀悎瑕佹眰 + * + * @param cboList 鏁版嵁 + * @param classifyVOMap 鍒嗙被鏄犲皠 + * @param ruleVOMap 瑙勫垯瀵硅薄 + * @param ruleOidMap 鍒嗙被鍖呭惈瑙勫垯 + * @param errorMap 閿欒鐨勪俊鎭� + * @param ruleRowIndexMap 瑙勫垯鍖呭惈鐨勮鍙凤紝key鏄鍒欎富閿紝value鏄寘鍚殑鍏ㄩ儴琛屽彿 */ - private void excelToCbo(CodeClassifyFullInfoBO classifyFullInfo,Map<Integer,String> fieldIndexMap,List<SheetRowData> rowDataList, - CodeClassifyTemplateVO templateVO,List<ClientBusinessObject> cboList, - String fullPath,boolean newCode){ + private void checkSecLengthInHistory(List<ClientBusinessObject> cboList, Map<String, CodeClassifyVO> classifyVOMap, Map<String, CodeRuleVO> ruleVOMap, + Map<String/**鍒嗙被涓婚敭**/, String/**瑙勫垯涓婚敭**/> ruleOidMap, Map<String, String> errorMap, Map<String, List<String>> ruleRowIndexMap) { + + cboList.stream().forEach(cbo -> { + String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX); + String secLength = cbo.getAttributeValue(CODE_SEC_LENGTH_FIELD); + //鎵惧垎绫� + String classifyOid = cbo.getAttributeValue(CODE_CLASSIFY_OID_FIELD); + CodeClassifyVO classifyVO = classifyVOMap.get(classifyOid); + if (classifyVO != null) { + //2#2#4#1杩欐牱鐨勬柟寮� + CodeRuleVO ruleVO = ruleVOMap.getOrDefault(ruleOidMap.get(classifyVO.getOid()), null); + if (ruleVO != null) { + String[] secValues = secLength.split("#"); + //鎬婚暱搴﹀拰缂栫爜鐨勯暱搴� + String code = cbo.getAttributeValue(CODE_FIELD); + if (code.length() != Arrays.stream(secValues).mapToInt(s -> VciBaseUtil.getInt(s)).sum()) { + errorMap.put(rowIndex, errorMap.getOrDefault(rowIndex, "") + ";鐮佹瀹藉害涓庣郴缁熶腑鐨勭紪鐮佽鍒欎笉鍚�"); + } else if (secValues.length != ruleVO.getSecVOList().size()) { + errorMap.put(rowIndex, errorMap.getOrDefault(rowIndex, "") + ";鐮佹瀹藉害涓庣郴缁熶腑鐨勭紪鐮佽鍒欎笉鍚�"); + } else { + //姣忎竴涓暱搴﹂兘涓嶈兘瓒呰繃鐮佹鐨� + boolean fined = false; + for (int j = 0; j < ruleVO.getSecVOList().size(); j++) { + CodeBasicSecVO secVO = ruleVO.getSecVOList().get(j); + String length = secValues[j]; + if (StringUtils.isNotBlank(secVO.getCodeSecLength()) && VciBaseUtil.getInt(length) > (VciBaseUtil.getInt(secVO.getCodeSecLength()) + ((secVO.getPrefixCode() + secVO.getSuffixCode()).length()))) { + errorMap.put(rowIndex, errorMap.getOrDefault(rowIndex, "") + ";鐮佹瀹藉害涓庣郴缁熶腑鐨勭紪鐮佽鍒欎笉鍚�"); + fined = true; + break; + } + } + /**for (int i = 0; i < secValues.length; i++) { + for (int j = 0; j < ruleVO.getSecVOList().size(); j++) { + CodeBasicSecVO secVO = ruleVO.getSecVOList().get(j); + if (VciBaseUtil.getInt(secValues[i]) > VciBaseUtil.getInt(secVO.getCodeSecLength())) { + errorMap.put(rowIndex,errorMap.getOrDefault(rowIndex,"") + ";鐮佹瀹藉害涓庣郴缁熶腑鐨勭紪鐮佽鍒欎笉鍚�" ); + fined = true; + break; + } + } + if(fined){ + break; + } + }***/ + if (!fined) { + //鏆傛椂涓嶅彇娴佹按鐨勫唴瀹癸紝鍥犱负璋冪敤produceCode鐨勬椂鍊欏幓澶勭悊 + List<String> rowIndexList = ruleRowIndexMap.getOrDefault(ruleVO.getOid(), new ArrayList<>()); + rowIndexList.add(rowIndex); + ruleRowIndexMap.put(ruleVO.getOid(), rowIndexList); + } + } + } else { + errorMap.put(rowIndex, errorMap.getOrDefault(rowIndex, "") + ";鍒嗙被娌℃湁璁剧疆缂栫爜瑙勫垯"); + } + } + }); + } + + /** + * excel杞崲涓篶bo鐨勫璞� + * + * @param classifyFullInfo 鍒嗙被鐨勫叏閮ㄤ俊鎭� + * @param fieldIndexMap 瀛楁鐨勪綅缃� + * @param rowDataList excel閲岀殑琛屾暟鎹� + * @param templateVO 妯℃澘鐨勬樉绀哄璞� + * @param cboList 鏁版嵁鐨勫垪琛� + * @param fullPath 鍏ㄨ矾寰� + * @param operation 鎿嶄綔绫诲瀷 + * @param errorMap 閿欒淇℃伅璁板綍 + */ + private void excelToCbo(CodeClassifyFullInfoBO classifyFullInfo, List<String> titleRowData, Map<Integer, String> fieldIndexMap, List<RowDatas> rowDataList, + CodeClassifyTemplateVO templateVO, List<ClientBusinessObject> cboList, + String fullPath, boolean isProcess, String operation, Map<String, String> errorMap, Map<String, String> codeOidToSystemOidMap) { rowDataList.stream().forEach(rowData -> { - ClientBusinessObject cbo=new ClientBusinessObject(); - DefaultAttrAssimtUtil.addDefaultAttrAssimt(cbo, classifyFullInfo.getTopClassifyVO().getBtmtypeid()); - rowData.getData().forEach((index,value)->{ + String oid = rowData.getOid(); + String rowNumber = rowData.getRowIndex(); + ClientBusinessObject cbo = new ClientBusinessObject(); + DefaultAttrAssimtUtil.addDefaultAttrAssimt(cbo, classifyFullInfo.getTopClassifyVO().getBtmTypeId()); + rowData.getData().forEach((index, value) -> { + String field = fieldIndexMap.get(index); + if (StringUtils.isBlank(field)) { + errorMap.put(rowNumber, "灞炴�э細銆�" + titleRowData.get(index) + "銆戝湪绯荤粺涓笉瀛樺湪"); + } + try { + cbo.setAttributeValueWithNoCheck(field, value); + if (WebUtil.isDefaultField(field)) { + WebUtil.setValueToField(field, cbo, value); + } + } catch (VciBaseException e) { + log.error("璁剧疆灞炴�х殑鍊奸敊璇�", e); + errorMap.put(rowNumber, "灞炴�э細銆�" + titleRowData.get(index) + "銆戝湪绯荤粺涓笉瀛樺湪"); + } + }); + try { + cbo.setAttributeValue(IMPORT_ROW_INDEX, rowData.getRowIndex()); + cbo.setAttributeValue(CODE_TEMPLATE_OID_FIELD, templateVO.getOid()); + if (operation.equals("create")) { + log.info("鍒嗙被瀵硅薄锛�" + classifyFullInfo.getCurrentClassifyVO()); + log.info("codeClassoid:" + classifyFullInfo.getCurrentClassifyVO().getOid()); + cbo.setAttributeValue(CODE_CLASSIFY_OID_FIELD, classifyFullInfo.getCurrentClassifyVO().getOid()); + cbo.setAttributeValue(CODE_FULL_PATH_FILED, fullPath); + int secret = VciBaseUtil.getInt(cbo.getAttributeValue(SECRET_FIELD)); + if (secret == 0 || !secretService.checkDataSecret(secret).getData()) { + Integer userSecret = VciBaseUtil.getCurrentUserSecret(); + String secretValue = String.valueOf((userSecret == null || userSecret == 0) ? UserSecretEnum.NONE.getValue() : userSecret); + cbo.setAttributeValue(SECRET_FIELD, secretValue); + } + if (rowData.getStatus().equals(CodeDefaultLC.DISABLE.getValue())) {//鍋滅敤 + cbo.setLcStatus(CodeDefaultLC.DISABLE.getValue()); + } else if (rowData.getStatus().equals(CodeDefaultLC.EDITING.getValue())) {//缂栬緫 + cbo.setLcStatus(CodeDefaultLC.EDITING.getValue()); + } else if (rowData.getStatus().equals(CodeDefaultLC.AUDITING.getValue())) {//瀹℃壒涓� + cbo.setLcStatus(CodeDefaultLC.AUDITING.getValue()); + } else if (rowData.getStatus().equals(CodeDefaultLC.TASK_BACK.getValue())) {//鍥炴敹 + cbo.setLcStatus(CodeDefaultLC.TASK_BACK.getValue()); + } else { + cbo.setLcStatus(CodeDefaultLC.RELEASED.getValue());//鍙戝竷 + } + /** if(!isProcess){ + cbo.setLcStatus(CodeDefaultLC.RELEASED.getValue()); + }else { + if(rowData.getStatus().equals(CodeDefaultLC.DISABLE.getValue())){//鍋滅敤 + cbo.setLcStatus(CodeDefaultLC.DISABLE.getValue()); + }else if(rowData.getStatus().equals(CodeDefaultLC.EDITING.getValue())){//缂栬緫 + cbo.setLcStatus(CodeDefaultLC.EDITING.getValue()); + }else {//鍙戝竷 + cbo.setLcStatus(CodeDefaultLC.RELEASED.getValue()); + } + }***/ + cbo.setCreator(rowData.getCreator()); + cbo.setLastModifier(rowData.getEditor() == null ? "" : rowData.getEditor()); + } else if (operation.equals("update")) { + //姝ゆ椂杩樻病鏈夎浆鎹㈣矾寰� + //cbo.setAttributeValue(CODE_FULL_PATH_FILED, childOidPathMap.getOrDefault(rowData.getData().getOrDefault(CODE_CLASSIFY_OID_FIELD,""),fullPath)); + if (rowData.getStatus().equals(CodeDefaultLC.DISABLE.getValue())) {//鍋滅敤 + cbo.setLcStatus(CodeDefaultLC.DISABLE.getValue()); + } else if (rowData.getStatus().equals(CodeDefaultLC.RELEASED.getValue())) {//鍙戝竷 + cbo.setLcStatus(CodeDefaultLC.RELEASED.getValue()); + } else if (rowData.getStatus().equals(CodeDefaultLC.EDITING.getValue())) {//缂栬緫 + cbo.setLcStatus(CodeDefaultLC.EDITING.getValue()); + } else if (rowData.getStatus().equals(CodeDefaultLC.AUDITING.getValue())) {//瀹℃壒涓� + cbo.setLcStatus(CodeDefaultLC.AUDITING.getValue()); + } else if (rowData.getStatus().equals(CodeDefaultLC.TASK_BACK.getValue())) {//鍥炴敹 + cbo.setLcStatus(CodeDefaultLC.TASK_BACK.getValue()); + } + cbo.setLastModifier(rowData.getEditor() == null ? "" : rowData.getEditor());//淇敼鑰� + } else if (operation.equals("delete")) { + if (rowData.getStatus().equals(CodeDefaultLC.TASK_BACK.getValue())) {//鍥炴敹 + cbo.setLcStatus(CodeDefaultLC.TASK_BACK.getValue()); + } else { + cbo.setLcStatus(CodeDefaultLC.DISABLE.getValue());//鍋滅敤 + } + } + + + } catch (Throwable e) { + log.error("璁剧疆榛樿鐨勫睘鎬х殑鍊奸敊璇�", e); + if (e instanceof VciBaseException) { + errorMap.put(rowNumber, "璁剧疆榛樿鐨勫睘鎬х殑鍊奸敊璇�" + ((VciBaseException) e).getMessage()); + } else { + errorMap.put(rowNumber, "璁剧疆榛樿鐨勫睘鎬х殑鍊奸敊璇�" + e.getMessage()); + } + + } finally { + codeOidToSystemOidMap.put(cbo.getOid(), oid); + } + cbo.setDescription(""); + cboList.add(cbo); + }); + + } + + /** + * excel杞崲涓篶bo鐨勫璞� + * + * @param classifyFullInfo 鍒嗙被鐨勫叏閮ㄤ俊鎭� + * @param codeImprotDataVO: 鍒嗙被瀵瑰簲鐨勬暟鎹� + * @param cboList 鏁版嵁鐨勫垪琛� + * @param newCode 鏄惁涓烘壒閲忕敵璇� + */ + private void excelToCbo(CodeClassifyFullInfoBO classifyFullInfo, CodeImprotDataVO codeImprotDataVO, List<ClientBusinessObject> cboList, boolean newCode) { + String fullPath = getFullPath(classifyFullInfo); + codeImprotDataVO.getDatas().stream().forEach(rowData -> { + ClientBusinessObject cbo = new ClientBusinessObject(); + DefaultAttrAssimtUtil.addDefaultAttrAssimt(cbo, classifyFullInfo.getTopClassifyVO().getBtmTypeId()); + rowData.forEach((field, value) -> { + try { + cbo.setAttributeValueWithNoCheck(field, value); + if (WebUtil.isDefaultField(field)) { + WebUtil.setValueToField(field, cbo, value); + } + } catch (VciBaseException e) { + log.error("璁剧疆灞炴�х殑鍊奸敊璇�", e); + } + }); + try { + cbo.setAttributeValue(CODE_TEMPLATE_OID_FIELD, codeImprotDataVO.getTemplateOid()); + cbo.setAttributeValue(IMPORT_ROW_INDEX, rowData.get(IMPORT_ROW_INDEX)); + if (newCode) { + cbo.setAttributeValue(CODE_CLASSIFY_OID_FIELD, classifyFullInfo.getCurrentClassifyVO().getOid()); + cbo.setAttributeValue(CODE_FULL_PATH_FILED, fullPath); + //cbo.setLcStatus(CodeDefaultLC.EDITING.getValue()); + int secret = VciBaseUtil.getInt(cbo.getAttributeValue(SECRET_FIELD)); + if (secret == 0 || !secretService.checkDataSecret(secret).getData()) { + Integer userSecret = VciBaseUtil.getCurrentUserSecret(); + cbo.setAttributeValue(SECRET_FIELD, String.valueOf((userSecret == null || userSecret == 0) ? UserSecretEnum.NONE.getValue() : userSecret)); + } + cbo.setLcStatus(CodeDefaultLC.RELEASED.getValue()); + } else { + //姝ゆ椂杩樻病鏈夎浆鎹㈣矾寰� + //cbo.setAttributeValue(CODE_FULL_PATH_FILED, childOidPathMap.getOrDefault(rowData.getData().getOrDefault(CODE_CLASSIFY_OID_FIELD,""),fullPath)); + cbo.setLcStatus(CodeDefaultLC.RELEASED.getValue()); + } + rowData.put("oid", cbo.getOid()); + + } catch (Throwable e) { + log.error("璁剧疆榛樿鐨勫睘鎬х殑鍊奸敊璇�", e); + } + cboList.add(cbo); + }); + + } + + /** + * excel杞崲涓篶bo鐨勫璞� + * + * @param classifyFullInfo 鍒嗙被鐨勫叏閮ㄤ俊鎭� + * @param fieldIndexMap 瀛楁鐨勪綅缃� + * @param rowDataList excel閲岀殑琛屾暟鎹� + * @param templateVO 妯℃澘鐨勬樉绀哄璞� + * @param cboList 鏁版嵁鐨勫垪琛� + * @param fullPath 鍏ㄨ矾寰� + * @param newCode 鏄惁涓烘壒閲忕敵璇� + */ + private void excelToCbo(CodeClassifyFullInfoBO classifyFullInfo, Map<Integer, String> fieldIndexMap, List<SheetRowData> rowDataList, + CodeClassifyTemplateVO templateVO, List<ClientBusinessObject> cboList, + String fullPath, boolean newCode) { + rowDataList.stream().forEach(rowData -> { + ClientBusinessObject cbo = new ClientBusinessObject(); + DefaultAttrAssimtUtil.addDefaultAttrAssimt(cbo, classifyFullInfo.getTopClassifyVO().getBtmTypeId()); + R<List<BtmTypeVO>> listR = btmTypeClient.selectByIdCollection(Collections.singletonList(classifyFullInfo.getTopClassifyVO().getBtmTypeId())); + if (!listR.isSuccess() || listR.getData().size() == 0) { + throw new VciBaseException("浼犲叆涓氬姟绫诲瀷鏈煡璇㈠埌鐩稿簲琛ㄥ崟锛岃妫�鏌ワ紒"); + } + cbo.setRevisionRule("".equals(listR.getData().get(0).getVersionRule()) ? "1" : listR.getData().get(0).getVersionRule()); + rowData.getData().forEach((index, value) -> { String field = fieldIndexMap.get(index); if (StringUtils.isBlank(field)) { throw new VciBaseException("绗�" + (index + 1) + "鍒楃殑鏍囬鍦ㄧ郴缁熶腑涓嶅瓨鍦�"); @@ -713,25 +3696,26 @@ } }); try { - cbo.setAttributeValue(CODE_TEMPLATE_OID_FIELD,templateVO.getOid()); - cbo.setAttributeValue(IMPORT_ROW_INDEX,rowData.getRowIndex()); - if(newCode){ - cbo.setAttributeValue(CODE_CLASSIFY_OID_FIELD,classifyFullInfo.getCurrentClassifyVO().getOid()); - cbo.setAttributeValue(CODE_FULL_PATH_FILED,fullPath); + cbo.setAttributeValue(CODE_TEMPLATE_OID_FIELD, templateVO.getOid()); + cbo.setAttributeValue(IMPORT_ROW_INDEX, rowData.getRowIndex()); + if (newCode) { + cbo.setAttributeValue(CODE_CLASSIFY_OID_FIELD, classifyFullInfo.getCurrentClassifyVO().getOid()); + cbo.setAttributeValue(CODE_FULL_PATH_FILED, fullPath); //cbo.setLcStatus(CodeDefaultLC.EDITING.getValue()); int secret = VciBaseUtil.getInt(cbo.getAttributeValue(SECRET_FIELD)); - /*if(secret == 0 || !secretService.checkDataSecret(secret) ){ + if (secret == 0 || !secretService.checkDataSecret(secret).getData()) { Integer userSecret = VciBaseUtil.getCurrentUserSecret(); - cbo.setAttributeValue(SECRET_FIELD,String.valueOf((userSecret==null || userSecret ==0)? UserSecretEnum.NONE.getValue():userSecret)); - }*/ - }else{ + cbo.setAttributeValue(SECRET_FIELD, String.valueOf((userSecret == null || userSecret == 0) ? UserSecretEnum.NONE.getValue() : userSecret)); + } + cbo.setLcStatus(CodeDefaultLC.RELEASED.getValue()); + } else { //姝ゆ椂杩樻病鏈夎浆鎹㈣矾寰� //cbo.setAttributeValue(CODE_FULL_PATH_FILED, childOidPathMap.getOrDefault(rowData.getData().getOrDefault(CODE_CLASSIFY_OID_FIELD,""),fullPath)); cbo.setLcStatus(CodeDefaultLC.RELEASED.getValue()); } - }catch (Throwable e){ - log.error("璁剧疆榛樿鐨勫睘鎬х殑鍊奸敊璇�",e); + } catch (Throwable e) { + log.error("璁剧疆榛樿鐨勫睘鎬х殑鍊奸敊璇�", e); } cboList.add(cbo); }); @@ -739,48 +3723,151 @@ } /** + * excel杞崲涓篶bo鐨勫璞� + * + * @param fieldIndexMap 瀛楁鐨勪綅缃� + * @param rowDataList excel閲岀殑琛屾暟鎹� + * @param orderDTO 鏁寸悊鐨勬暟鎹� + * @param map 鏁版嵁鐨勫垪琛� + */ + private void excelToCboEdit(Map<Integer, String> fieldIndexMap, SheetRowData rowDataList, + CodeOrderDTO orderDTO, + Map map) { + rowDataList.getData().forEach((index, value) -> { + String field = fieldIndexMap.get(index); + if (StringUtils.isBlank(field)) { + throw new VciBaseException("绗�" + (index + 1) + "鍒楃殑鏍囬鍦ㄧ郴缁熶腑涓嶅瓨鍦�"); + } + map.put(field.toUpperCase(), value); + }); + + try { +// for (Map map : cbos) { +// Object obj = CodeOrderDTO.class.newInstance(); + BeanInfo beanInfo = Introspector.getBeanInfo(orderDTO.getClass()); + PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors(); + for (PropertyDescriptor property : propertyDescriptors) { + Method setter = property.getWriteMethod(); + if (setter != null) { + //oracle鐨勬椂闂翠负TIMESTAMP鐨勶紝闇�瑕佽繘琛岃浆鎹㈡垚data锛屽惁鍒欏皢鎶ラ敊 + if (map.get(property.getName().toUpperCase()) instanceof TIMESTAMP) { + LocalDateTime localDateTime = ((TIMESTAMP) map.get(property.getName().toUpperCase())).toLocalDateTime(); + ZoneId zoneId = ZoneId.systemDefault(); + ZonedDateTime zdt = localDateTime.atZone(zoneId); + Date date = Date.from(zdt.toInstant()); + setter.invoke(orderDTO, date); + map.remove(property.getName().toUpperCase()); + } //oracle鐨勬暟瀛椾负BigDecimal鐨勶紝闇�瑕佽繘琛岃浆鎹㈡垚Integer锛屽惁鍒欏皢鎶ラ敊 + else if (map.get(property.getName().toUpperCase()) instanceof BigDecimal + && ("Integer").equals(setter.getParameterTypes()[0].getSimpleName())) { + setter.invoke(orderDTO, ((BigDecimal) map.get(property.getName().toUpperCase())).intValue()); + map.remove(property.getName().toUpperCase()); + } else if (map.containsKey(property.getName().toUpperCase())) { + if (setter.getParameterTypes()[0].getSimpleName().equals("String")) { + setter.invoke(orderDTO, map.get(property.getName().toUpperCase()) == null ? null : String.valueOf(map.get(property.getName().toUpperCase()))); + } else { + setter.invoke(orderDTO, map.get(property.getName().toUpperCase())); + } + map.remove(property.getName().toUpperCase()); + } + } + } + for (Object key : map.keySet()) { + map.put(key, map.get(key) == null ? null : String.valueOf(map.get(key))); + } + } catch (Exception e) { + throw new VciBaseException("鏌ヨ澶辫触锛�" + e.getMessage()); + } + + +// Iterator<Map.Entry<String, String>> iterator = cbos.entrySet().iterator(); +// +// Map.Entry<String, String> entry; +// while (iterator.hasNext()) { +// entry = iterator.next(); +//// if (WebUtil.isDefaultField(entry.getKey())) { +// Object obj = BaseModel.class.newInstance(); +// BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass()); +// PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors(); +// for (PropertyDescriptor property : propertyDescriptors) { +// Method setter = property.getWriteMethod(); +// if (setter != null) { +// //oracle鐨勬椂闂翠负TIMESTAMP鐨勶紝闇�瑕佽繘琛岃浆鎹㈡垚data锛屽惁鍒欏皢鎶ラ敊 +// if (map.get(property.getName().toUpperCase()) instanceof TIMESTAMP) { +// LocalDateTime localDateTime = ((TIMESTAMP) map.get(property.getName().toUpperCase())).toLocalDateTime(); +// ZoneId zoneId = ZoneId.systemDefault(); +// ZonedDateTime zdt = localDateTime.atZone(zoneId); +// Date date = Date.from(zdt.toInstant()); +// setter.invoke(obj, date); +// map.remove(property.getName().toUpperCase()); +// } //oracle鐨勬暟瀛椾负BigDecimal鐨勶紝闇�瑕佽繘琛岃浆鎹㈡垚Integer锛屽惁鍒欏皢鎶ラ敊 +// else if (map.get(property.getName().toUpperCase()) instanceof BigDecimal +// && ("Integer").equals(setter.getParameterTypes()[0].getSimpleName())) { +// setter.invoke(obj, ((BigDecimal) map.get(property.getName().toUpperCase())).intValue()); +// map.remove(property.getName().toUpperCase()); +// } else if (map.containsKey(property.getName().toUpperCase())) { +// if(setter.getParameterTypes()[0].getSimpleName().equals("String")){ +// setter.invoke(obj, map.get(property.getName().toUpperCase()) == null ? null:String.valueOf(map.get(property.getName().toUpperCase()))); +// }else{ +// setter.invoke(obj, map.get(property.getName().toUpperCase())); +// } +// map.remove(property.getName().toUpperCase()); +// } +// } +// } +// WebUtil.setValueToField(entry.getKey(), orderDTO, entry.getValue()); +// iterator.remove(); +//// } +// } + orderDTO.setData(map); + } + + /** * 妫�鏌ユ牎楠岃鍒欐病鏈夐�氳繃鐨勫唴瀹� - * @param attrVOS 闇�瑕佹牎楠岀殑灞炴�� + * + * @param attrVOS 闇�瑕佹牎楠岀殑灞炴�� * @param dataList 鏁版嵁鐨勫垪琛� * @param errorMap 閿欒鐨勪俊鎭槧灏� * @return 鏍¢獙涓嶉�氳繃鐨勮鏁� */ - private void batchCheckVerifyOnOrder(Collection<CodeClassifyTemplateAttrVO> attrVOS, List<ClientBusinessObject> dataList,Map<String,String> errorMap) { + private void batchCheckVerifyOnOrder(Collection<CodeClassifyTemplateAttrVO> attrVOS, List<ClientBusinessObject> dataList, Map<String, String> errorMap) { Map<String, CodeClassifyTemplateAttrVO> verifyAttrVOMap = attrVOS.stream().filter(s -> StringUtils.isNotBlank(s.getVerifyRule()) && StringUtils.isBlank(s.getComponentRule()) - &&StringUtils.isBlank(s.getClassifyInvokeAttr()) + && StringUtils.isBlank(s.getClassifyInvokeAttr()) ).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t)); - if(!CollectionUtils.isEmpty(verifyAttrVOMap)){ - Map<String/**琛屽彿**/,List<String>/**鏍¢獙涓嶉�氳繃鐨勫睘鎬�**/> unPassCheckMap = new HashMap<>(); - verifyAttrVOMap.forEach((attrId,attrVO)->{ + if (!CollectionUtils.isEmpty(verifyAttrVOMap)) { + Map<String/**琛屽彿**/, List<String>/**鏍¢獙涓嶉�氳繃鐨勫睘鎬�**/> unPassCheckMap = new HashMap<>(); + verifyAttrVOMap.forEach((attrId, attrVO) -> { dataList.stream().forEach(cbo -> { String value = cbo.getAttributeValue(attrId); - if(StringUtils.isNotBlank(value) && !value.matches(attrVO.getVerifyRule())){ + if (StringUtils.isNotBlank(value) && !value.matches(attrVO.getVerifyRule())) { String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX); List<String> unPassAttrs = unPassCheckMap.getOrDefault(rowIndex, new ArrayList<>()); unPassAttrs.add(attrVO.getName()); - unPassCheckMap.put(rowIndex,unPassAttrs); + unPassCheckMap.put(rowIndex, unPassAttrs); } }); }); - if(!CollectionUtils.isEmpty(unPassCheckMap)){ - unPassCheckMap.forEach((rowIndex,unPassAttrs)->{ - errorMap.put(rowIndex,";灞炴�" + unPassAttrs.stream().collect(Collectors.joining(",")) + "]鍐呭涓嶇鍚堟牎楠岃鍒欑殑瑕佹眰"); + if (!CollectionUtils.isEmpty(unPassCheckMap)) { + unPassCheckMap.forEach((rowIndex, unPassAttrs) -> { + errorMap.put(rowIndex, ";灞炴�" + unPassAttrs.stream().collect(Collectors.joining(",")) + "]鍐呭涓嶇鍚堟牎楠岃鍒欑殑瑕佹眰"); }); } } } + /** * 鎵归噺杞崲鏃堕棿閮戒负鎸囧畾鐨勬牸寮� - * @param attrVOS 妯℃澘灞炴�� - * @param cboList 鏁版嵁鐨勫垪琛� + * + * @param attrVOS 妯℃澘灞炴�� + * @param cboList 鏁版嵁鐨勫垪琛� * @param errorMap 閿欒鐨勪俊鎭� */ - private void batchSwitchDateAttrOnOrder(Collection<CodeClassifyTemplateAttrVO> attrVOS,List<ClientBusinessObject> cboList,Map<String,String> errorMap){ - Map<String, CodeClassifyTemplateAttrVO> dateAttrVOMap =attrVOS.stream().filter(s -> + private void batchSwitchDateAttrOnOrder(Collection<CodeClassifyTemplateAttrVO> attrVOS, List<ClientBusinessObject> cboList, Map<String, String> errorMap) { + Map<String, CodeClassifyTemplateAttrVO> dateAttrVOMap = attrVOS.stream().filter(s -> StringUtils.isNotBlank(s.getCodeDateFormat()) && VciBaseUtil.getBoolean(s.getCodeDateFormat()) && StringUtils.isBlank(s.getComponentRule()) && StringUtils.isBlank(s.getClassifyInvokeAttr()) ).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t)); - if(!CollectionUtils.isEmpty(dateAttrVOMap)) { + if (!CollectionUtils.isEmpty(dateAttrVOMap)) { dateAttrVOMap.forEach((attrId, attrVO) -> { cboList.stream().forEach(cbo -> { String value = cbo.getAttributeValue(attrId); @@ -789,27 +3876,27 @@ } if (StringUtils.isNotBlank(value)) { boolean formated = false; - if(StringUtils.isNotBlank(attrVO.getCodeDateFormat())){ + if (StringUtils.isNotBlank(attrVO.getCodeDateFormat())) { try { Date date = VciDateUtil.str2Date(value, attrVO.getCodeDateFormat()); - if(date!=null){ - cbo.setAttributeValue(attrId,value); + if (date != null) { + cbo.setAttributeValue(attrId, value); formated = true; } } catch (Exception e) { //璇存槑涓嶆槸杩欎釜鏍煎紡 } } - if(!formated) { + if (!formated) { try { DateConverter dateConverter = new DateConverter(); dateConverter.setAsText(value); value = VciDateUtil.date2Str(dateConverter.getValue(), VciDateUtil.DateTimeMillFormat); - cbo.setAttributeValue(attrId,value); - }catch (Throwable e){ + cbo.setAttributeValue(attrId, value); + } catch (Throwable e) { //杞崲涓嶄簡 String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX); - errorMap.put(rowIndex,errorMap.getOrDefault(rowIndex,"") + ";灞炴�" + attrVO.getName() + "]鏃堕棿鏍煎紡涓嶆纭�" ); + errorMap.put(rowIndex, errorMap.getOrDefault(rowIndex, "") + ";灞炴�" + attrVO.getName() + "]鏃堕棿鏍煎紡涓嶆纭�"); } } } @@ -817,12 +3904,40 @@ }); } } + + /** + * 绯荤粺妯℃澘涓粯璁ゅ�艰缃� + * + * @param attrVOS 妯℃澘灞炴�� + * @param dataList excel鐨勬暟鎹唴瀹� + */ + private void batchSwitchAttrDefault(Collection<CodeClassifyTemplateAttrVO> attrVOS, List<ClientBusinessObject> dataList) { + Map<String, CodeClassifyTemplateAttrVO> dateAttrVOMap = attrVOS.stream().filter(s -> StringUtils.isNotBlank(s.getDefaultValue())).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t)); + if (!CollectionUtils.isEmpty(dateAttrVOMap)) { + dateAttrVOMap.forEach((attrId, attrVO) -> { + String defaultValue = attrVO.getDefaultValue(); + dataList.stream().forEach(cbo -> { + String dataValue = cbo.getAttributeValue(attrId); + if (StringUtils.isBlank(dataValue)) { + dataValue = defaultValue; + } + try { + cbo.setAttributeValue(attrId, dataValue); + } catch (Throwable e) { + log.error("璁剧疆灞炴�х殑閿欒", e); + } + }); + }); + } + } + /** * 杞Щboolean鍨嬬殑灞炴�� - * @param attrVOS 灞炴�х殑瀵硅薄 + * + * @param attrVOS 灞炴�х殑瀵硅薄 * @param dataList 鏁版嵁 */ - private void reSwitchBooleanAttrOnOrder(Collection<CodeClassifyTemplateAttrVO> attrVOS,List<ClientBusinessObject> dataList){ + private void reSwitchBooleanAttrOnOrder(Collection<CodeClassifyTemplateAttrVO> attrVOS, List<ClientBusinessObject> dataList) { Map<String, CodeClassifyTemplateAttrVO> booleanAttrMap = attrVOS.stream().filter( s -> VciFieldTypeEnum.VTBoolean.name().equalsIgnoreCase(s.getAttributeDataType()) ).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t)); @@ -836,7 +3951,7 @@ } else { cbo.setAttributeValue(attrId, BooleanEnum.FASLE.getValue()); } - }catch (Throwable e){ + } catch (Throwable e) { } }); @@ -846,26 +3961,27 @@ /** * 澶勭悊缁勫悎瑙勫垯 - * @param attrVOS 妯℃澘灞炴�� + * + * @param attrVOS 妯℃澘灞炴�� * @param dataList excel鐨勬暟鎹唴瀹� */ - private void batchSwitchComponentAttrOnOrder(Collection<CodeClassifyTemplateAttrVO> attrVOS,List<ClientBusinessObject> dataList) { + private void batchSwitchComponentAttrOnOrder(Collection<CodeClassifyTemplateAttrVO> attrVOS, List<ClientBusinessObject> dataList) { Map<String, CodeClassifyTemplateAttrVO> dateAttrVOMap = attrVOS.stream().filter(s -> StringUtils.isNotBlank(s.getComponentRule())).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t)); - if(!CollectionUtils.isEmpty(dateAttrVOMap)) { + if (!CollectionUtils.isEmpty(dateAttrVOMap)) { dateAttrVOMap.forEach((attrId, attrVO) -> { dataList.stream().forEach(cbo -> { //浠巈xcel涓婃妸灞炴�ц浆鎹负map - Map<String,String> thisRowDataMap = new HashMap<>(); - copyValueToMapFromCbos(cbo,thisRowDataMap); + Map<String, String> thisRowDataMap = new HashMap<>(); + copyValueToMapFromCbos(cbo, thisRowDataMap); //缁勫悎鍐呭 - String value = formulaService.getValueByFormula(thisRowDataMap,attrVO.getComponentRule()); - if(value == null){ + String value = formulaService.getValueByFormula(thisRowDataMap, attrVO.getComponentRule()); + if (value == null) { value = ""; } try { cbo.setAttributeValue(attrId, value); - }catch (Throwable e){ - log.error("璁剧疆灞炴�х殑閿欒",e); + } catch (Throwable e) { + log.error("璁剧疆灞炴�х殑閿欒", e); } }); }); @@ -874,58 +3990,60 @@ /** * 杞崲鍙傜収鐨勫�� - * @param attrVOS 灞炴�х殑鏄剧ず瀵硅薄 + * + * @param attrVOS 灞炴�х殑鏄剧ず瀵硅薄 * @param dataList 鏁版嵁鍒楄〃 * @param errorMap 閿欒鐨勪俊鎭� */ - private void batchSwitchReferAttrOnOrder(Collection<CodeClassifyTemplateAttrVO> attrVOS,List<ClientBusinessObject> dataList,Map<String,String> errorMap){ + private void batchSwitchReferAttrOnOrder(Collection<CodeClassifyTemplateAttrVO> attrVOS, List<ClientBusinessObject> dataList, Map<String, String> errorMap) { Map<String, CodeClassifyTemplateAttrVO> referAttrVOMap = attrVOS.stream().filter( s -> (StringUtils.isNotBlank(s.getReferBtmId()) || StringUtils.isNotBlank(s.getReferConfig())) ).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t)); - if(!CollectionUtils.isEmpty(referAttrVOMap)){ - Map<String/**琛ㄦ牸鍜屽�肩殑灞炴��**/,Map<String/**鏄剧ず灞炴�х殑鍊�**/,List<String>/**琛ㄦ牸閲岀殑鍊�**/>> linkValueMap = new HashMap<>(); - referAttrVOMap.forEach((attrId,attrVO)->{ + if (!CollectionUtils.isEmpty(referAttrVOMap)) { + Map<String/**琛ㄦ牸鍜屽�肩殑灞炴��**/, Map<String/**鏄剧ず灞炴�х殑鍊�**/, List<String>/**琛ㄦ牸閲岀殑鍊�**/>> linkValueMap = new HashMap<>(); + referAttrVOMap.forEach((attrId, attrVO) -> { dataList.stream().forEach(cbo -> { String text = cbo.getAttributeValue(attrId); - if(StringUtils.isNotBlank(text)){ + if (StringUtils.isNotBlank(text)) { UIFormReferVO referVO = getReferVO(attrVO); String valueField = getValueField(referVO); String showText = getTextField(referVO); String tableAndAttr = VciBaseUtil.getTableName(referVO.getReferType()) + "#" + valueField; Map<String, List<String>> showTextMap = linkValueMap.getOrDefault(tableAndAttr, new HashMap<>()); List<String> textList = showTextMap.getOrDefault(showText, new ArrayList<>()); - if(!textList.contains(text)) { + if (!textList.contains(text)) { textList.add(text); } - showTextMap.put(showText,textList); - linkValueMap.put(tableAndAttr,showTextMap); + showTextMap.put(showText, textList); + linkValueMap.put(tableAndAttr, showTextMap); } }); }); - if(!CollectionUtils.isEmpty(linkValueMap)){ + if (!CollectionUtils.isEmpty(linkValueMap)) { //闇�瑕侀�愪釜琛ㄧ殑鍊煎瓧娈碉紝閫愪釜鏌ヨ - Map<String/**琛ㄦ牸鍜屽�煎睘鎬�**/,Map<String/**鏄剧ず灞炴��**/, Map<String/**鍊�**/,String/**鏄剧ず鐨勫��**/>>> linkCboMap = new HashMap<>(); - linkValueMap.forEach((tableAndAttr,showValueMap)->{ + Map<String/**琛ㄦ牸鍜屽�煎睘鎬�**/, Map<String/**鏄剧ず灞炴��**/, Map<String/**鍊�**/, String/**鏄剧ず鐨勫��**/>>> linkCboMap = new HashMap<>(); + linkValueMap.forEach((tableAndAttr, showValueMap) -> { String[] split = tableAndAttr.split("#"); String table = split[0]; String valueField = split[1].toLowerCase(Locale.ROOT); - Map<String,Map<String,String>> dataMap = new HashMap<>(); - showValueMap.forEach((showText,valueList)->{ - Map<String,String> valueOidTextMap = new HashMap<>(); + Map<String, Map<String, String>> dataMap = new HashMap<>(); + showValueMap.forEach((showText, valueList) -> { + Map<String, String> valueOidTextMap = new HashMap<>(); List<List<String>> valueCollections = VciBaseUtil.switchListForOracleIn(valueList); - String sql = "select " + valueField + "," + showText.toLowerCase(Locale.ROOT) +" from " + table + " where " + showText + " in (%s)"; - valueCollections.stream().forEach(values->{ - List<Map<String,String>> dataMapList = commonsMapper.queryByOnlySqlForMap(String.format(sql, VciBaseUtil.toInSql(values.toArray(new String[0])))); - List<ClientBusinessObject> cbos= ChangeMapTOClientBusinessObjects(dataMapList); - if(!CollectionUtils.isEmpty(cbos)){ - valueOidTextMap.putAll(cbos.stream().collect(Collectors.toMap(s->s.getAttributeValue(valueField),t->t.getAttributeValue(showText)))); + String sql = "select " + valueField + "," + showText.toLowerCase(Locale.ROOT) + " from " + table + " where " + showText + " in (%s)"; + valueCollections.stream().forEach(values -> { + List<Map<String, String>> dataMapList = commonsMapper.queryByOnlySqlForMap(String.format(sql, VciBaseUtil.toInSql(values.toArray(new String[0])))); + DefaultAttrAssimtUtil.mapToLowerCase(dataMapList, true); + List<ClientBusinessObject> cbos = ChangeMapTOClientBusinessObjects(dataMapList); + if (!CollectionUtils.isEmpty(cbos)) { + valueOidTextMap.putAll(cbos.stream().collect(Collectors.toMap(s -> s.getAttributeValue(valueField), t -> t.getAttributeValue(showText)))); } }); - dataMap.put(showText,valueOidTextMap); + dataMap.put(showText, valueOidTextMap); }); - linkCboMap.put(tableAndAttr,dataMap); + linkCboMap.put(tableAndAttr, dataMap); }); - referAttrVOMap.forEach((attrId,attrVO)->{ + referAttrVOMap.forEach((attrId, attrVO) -> { dataList.stream().forEach(cbo -> { String text = cbo.getAttributeValue(attrId); if (StringUtils.isNotBlank(text)) { @@ -933,31 +4051,31 @@ String valueField = getValueField(referVO); String showText = getTextField(referVO); String tableAndAttr = VciBaseUtil.getTableName(referVO.getReferType()) + "#" + valueField; - if(!linkCboMap.containsKey(tableAndAttr)){ + if (!linkCboMap.containsKey(tableAndAttr)) { String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX); - errorMap.put(rowIndex,errorMap.getOrDefault(rowIndex,"") + ";鍙傛暟灞炴�" + attrVO.getName() + "]鐨勫�煎湪绯荤粺涓笉瀛樺湪" ); + errorMap.put(rowIndex, errorMap.getOrDefault(rowIndex, "") + ";鍙傛暟灞炴�" + attrVO.getName() + "]鐨勫�煎湪绯荤粺涓笉瀛樺湪"); - }else{ + } else { Map<String, Map<String, String>> dataMap = linkCboMap.get(tableAndAttr); - if(!dataMap.containsKey(showText)){ + if (!dataMap.containsKey(showText)) { String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX); - errorMap.put(rowIndex,errorMap.getOrDefault(rowIndex,"") + ";鍙傛暟灞炴�" + attrVO.getName() + "]鐨勫�煎湪绯荤粺涓笉瀛樺湪" ); - }else{ + errorMap.put(rowIndex, errorMap.getOrDefault(rowIndex, "") + ";鍙傛暟灞炴�" + attrVO.getName() + "]鐨勫�煎湪绯荤粺涓笉瀛樺湪"); + } else { Map<String, String> data = dataMap.get(showText); final boolean[] fined = {false}; - data.forEach((key,value)->{ - if(value.equalsIgnoreCase(text)){ + data.forEach((key, value) -> { + if (value.equalsIgnoreCase(text)) { fined[0] = true; try { cbo.setAttributeValue(attrId, key); - }catch (Throwable e){ + } catch (Throwable e) { } } }); - if(!fined[0]){ + if (!fined[0]) { String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX); - errorMap.put(rowIndex,errorMap.getOrDefault(rowIndex,"") + ";鍙傛暟灞炴�" + attrVO.getName() + "]鐨勫�煎湪绯荤粺涓笉瀛樺湪" ); + errorMap.put(rowIndex, errorMap.getOrDefault(rowIndex, "") + ";鍙傛暟灞炴�" + attrVO.getName() + "]鐨勫�煎湪绯荤粺涓笉瀛樺湪"); } } } @@ -970,15 +4088,164 @@ } /** + * 鎵归噺妫�鏌ヤ紒涓氱紪鐮佹槸鍚﹀瓨鍦� + * + * @param templateVO 妯℃澘鐨勬樉绀哄璞� + * @param cboList 鏁版嵁鐨勫垪琛� + * @param errorMap 閿欒鐨勪俊鎭� + */ + private void batchCheckIdExistOnOrder(CodeClassifyTemplateVO templateVO, List<ClientBusinessObject> cboList, Map<String, String> errorMap) throws Throwable { + List<String> existIds = new ArrayList<>(); + String tableName = ""; + try { + R<BtmTypeVO> r = btmTypeClient.getAllAttributeByBtmId(templateVO.getBtmTypeId()); + if (!r.isSuccess()) { + throw new Throwable(r.getMsg()); + } + BtmTypeVO btmTypeVO = r.getData(); + if (btmTypeVO == null) { + throw new Throwable("鏍规嵁涓氬姟绫诲瀷鏈煡璇㈠埌涓氬姟绫诲瀷瀵硅薄锛�"); + } + tableName = btmTypeVO.getTableName(); + if (StringUtils.isBlank(tableName)) { + throw new Throwable("鏍规嵁涓氬姟绫诲瀷鏈煡璇㈠埌涓氬姟绫诲瀷鐩稿叧鑱旂殑琛�"); + } + } catch (Throwable e) { + throw e; + } + String finalTableName = tableName; + VciBaseUtil.switchCollectionForOracleIn(cboList).stream().forEach(cbos -> { + Map<String, String> conditionMap = new HashMap<>(); + conditionMap.put("id", QueryOptionConstant.IN + "(" + VciBaseUtil.toInSql(cbos.stream().map(s -> s.getId()).collect(Collectors.toSet()).toArray(new String[0])) + ")"); + + StringBuffer sb = new StringBuffer(); + sb.append(" select id from "); + sb.append(finalTableName); + //sb.append(" where 1 = 1"); + sb.append(" where lastr = 1 and lastv = 1"); //TODO:娑夊強鍒板凡鍗囩増鐨勬暟鎹篃搴旇鎺掗櫎鎺夛紝鍚﹀垯浼氭姤閲� + sb.append(" and id in ("); + sb.append(VciBaseUtil.toInSql(cbos.stream().map(s -> s.getId()).collect(Collectors.toSet()).toArray(new String[0]))); + sb.append(")"); + List<String> idList = commonsMapper.selectById(sb.toString()); + //涓氬姟鏁版嵁濡傛灉鐮佸�煎洖鏀朵細鐩存帴鍒犻櫎鏁版嵁锛屾墍浠ヨ繖閲岀洿鎺ュ垽鏂槸鍚﹀瓨鍦ㄥ嵆鍙� + existIds.addAll(Optional.ofNullable(idList).orElseGet(() -> new ArrayList<>()).stream().map(s -> s.toLowerCase(Locale.ROOT)).collect(Collectors.toList())); + }); + if (!CollectionUtils.isEmpty(existIds)) { + String idFieldName = templateVO.getAttributes().stream().filter(s -> VciQueryWrapperForDO.ID_FIELD.equalsIgnoreCase(s.getId())).findFirst().orElseGet(() -> new CodeClassifyTemplateAttrVO()).getName(); + if (StringUtils.isBlank(idFieldName)) { + idFieldName = "浼佷笟缂栫爜"; + } + String finalIdFieldName = idFieldName; + cboList.stream().forEach(cbo -> { + String id = cbo.getId(); + if (StringUtils.isBlank(id)) { + id = cbo.getAttributeValue("id"); + } + if (existIds.contains(id)) { + String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX); + String msg = errorMap.getOrDefault(rowIndex, ""); + msg += ";" + finalIdFieldName + "鐨勫�煎湪绯荤粺涓凡缁忓瓨鍦�"; + errorMap.put(rowIndex, msg); + } + }); + } + } + + /*** + * 鏍¢獙鍒嗙被瀵瑰簲鐨勬ā鏉夸俊鎭� + * @param titleRowData + * @param sheetDataSetList + * @param shetNumber + * @param pathMap + * @param errorMap + * @return + * @throws Throwable + */ + private LinkedList<CodeClassifyTemplateVO> checkSamesTemplate(List<String> titleRowData, List<SheetDataSet> sheetDataSetList, int shetNumber, Map<String/**璺緞**/, CodeClassifyVO> pathMap, Map<String, String> errorMap) throws Throwable { + Map<String, String> pathOidMap = new HashMap<>(); + Map<String, String> templateIdRowIndex = new HashedMap(); + SheetDataSet dataSet = sheetDataSetList.get(shetNumber); + LinkedHashMap<String, CodeClassifyTemplateVO> codeClassifyTemplateVOMap = new LinkedHashMap<String, CodeClassifyTemplateVO>(); + for (int i = 0; i < titleRowData.size(); i++) { + String title = titleRowData.get(i); + if (title.equals("鍒嗙被璺緞")) { + int finalI = i; + dataSet.getRowData().stream().forEach(sheetRowData -> { + String Path = sheetRowData.getData().get(finalI); + String rowIndex = sheetRowData.getRowIndex(); + if (StringUtils.isBlank(Path)) { + Path = "#current#"; + } + CodeClassifyTemplateVO newTemplateVO = new CodeClassifyTemplateVO(); + String templateOid = ""; + if (pathOidMap.containsKey(Path)) { + templateOid = pathOidMap.get(Path); + newTemplateVO = codeClassifyTemplateVOMap.get(templateOid); + } else { + if (pathMap.containsKey(Path)) { + CodeClassifyVO codeClassifyVO = pathMap.get(Path); + newTemplateVO = engineService.getUsedTemplateByClassifyOid(codeClassifyVO.getOid()); + if (newTemplateVO != null) { + templateOid = newTemplateVO.getOid(); + } else { + errorMap.put(rowIndex, "绗�" + rowIndex + "琛岋紝鍒嗙被璺緞鏈煡璇㈠埌鐩稿簲鐨勫垎绫绘ā鏉�"); + } + } else { + errorMap.put(rowIndex, "绗�" + rowIndex + "琛岋紝鍒嗙被璺緞鏈煡璇㈠埌鐩稿簲鐨勫垎绫�"); + } + + } + pathOidMap.put(Path, templateOid); + codeClassifyTemplateVOMap.put(templateOid, newTemplateVO); + templateIdRowIndex.put(templateOid, templateIdRowIndex.getOrDefault(templateOid, "") + "锛�" + rowIndex); + }); + break; + } + } + LinkedList<CodeClassifyTemplateVO> codeClassifyTemplateVOList = new LinkedList<>(); + StringBuffer sb = new StringBuffer(); + codeClassifyTemplateVOMap.keySet().forEach(tempateOid -> { + String templateOidInExcel = ""; + String tempateName = ""; + CodeClassifyTemplateVO t = codeClassifyTemplateVOMap.get(tempateOid); + codeClassifyTemplateVOList.add(t); + if (!CollectionUtils.isEmpty(sheetDataSetList) + && sheetDataSetList.size() > 1 && !CollectionUtils.isEmpty(sheetDataSetList.get(sheetDataSetList.size() - 1).getColName())) { + List<SheetRowData> rowData = sheetDataSetList.get(sheetDataSetList.size() - 1).getRowData(); + templateOidInExcel = rowData.get(shetNumber).getData().get(0); + tempateName = rowData.get(shetNumber).getData().get(2); + //templateOidInExcel = sheetDataSetList.get(sheetDataSetList.size()-1).getColName().get(sheetDataSetList.size()-i); + } + if (StringUtils.isBlank(templateOidInExcel) || !templateOidInExcel.equalsIgnoreCase(tempateOid)) { + sb.append("妯℃澘銆�" + tempateName + "銆戜腑绗�" + templateIdRowIndex.get(tempateOid) + "琛屾暟鎹笉灞炰簬褰撳墠妯℃澘鐨勬暟鎹紝璇锋牳瀵�!"); + } + }); + if (StringUtils.isNotBlank(sb.toString())) { + throw new Throwable(sb.toString()); + } + if (codeClassifyTemplateVOList.size() > 1) { + String message = "妯℃澘銆�" + dataSet.getSheetName() + "銆戞牴鎹垎绫昏矾寰勫垽鏂紝鍒嗙被瀛樺湪澶氫釜妯℃澘"; + + throw new Throwable(message); + } + if (codeClassifyTemplateVOList.size() == 0) { + String message = "妯℃澘銆�" + dataSet.getSheetName() + "銆戞牴鎹暟鎹垎绫昏矾寰勫垽鏂紝鏈尮閰嶅埌瀵瑰簲妯℃澘"; + throw new Throwable(message); + } + return codeClassifyTemplateVOList; + } + + /** * 浠庡睘鎬т笂鑾峰彇鍙傜収鐨勫唴瀹� + * * @param attrVO 灞炴�х殑淇℃伅 * @return 鍙傜収鐨勫唴瀹� */ - private UIFormReferVO getReferVO(CodeClassifyTemplateAttrVO attrVO){ + private UIFormReferVO getReferVO(CodeClassifyTemplateAttrVO attrVO) { UIFormReferVO referVO = null; - if(StringUtils.isNotBlank(attrVO.getReferConfig())){ - referVO = JSONObject.parseObject(attrVO.getReferConfig(),UIFormReferVO.class); - }else{ + if (StringUtils.isNotBlank(attrVO.getReferConfig())) { + referVO = JSONObject.parseObject(attrVO.getReferConfig(), UIFormReferVO.class); + } else { referVO = new UIFormReferVO(); referVO.setReferType(attrVO.getReferBtmId()); referVO.setValueField(VciQueryWrapperForDO.OID_FIELD); @@ -989,20 +4256,21 @@ /** * 鑾峰彇鍙傜収涓殑鍊肩殑瀛楁 + * * @param referVO 鍙傜収鐨勫璞� * @return 榛樿涓篛id锛屾湁澶氫釜鐨勬椂鍊欙紝鑾峰彇绗竴涓� */ - private String getValueField(UIFormReferVO referVO){ + private String getValueField(UIFormReferVO referVO) { String showText = referVO.getValueField(); - if(StringUtils.isBlank(showText)){ + if (StringUtils.isBlank(showText)) { return "oid"; } - if(showText.contains(",")){ + if (showText.contains(",")) { //闃叉涓囦竴鏈夊涓紝鐪嬬湅鏈夋病鏈塷id List<String> strings = VciBaseUtil.str2List(showText); - if(strings.contains("oid")){ + if (strings.contains("oid")) { showText = "oid"; - }else{ + } else { showText = strings.get(0); } } @@ -1011,33 +4279,36 @@ /** * 鑾峰彇鍙傜収涓殑鏄剧ず鍐呭鐨勫瓧娈� + * * @param referVO 鍙傜収鐨勫璞� * @return 榛樿涓簄ame锛屾湁澶氫釜鐨勬椂鍊欙紝鑾峰彇绗竴涓� */ - private String getTextField(UIFormReferVO referVO){ + private String getTextField(UIFormReferVO referVO) { String showText = referVO.getTextField(); - if(StringUtils.isBlank(showText)){ + if (StringUtils.isBlank(showText)) { return "name"; } - if(showText.contains(",")){ + if (showText.contains(",")) { //闃叉涓囦竴鏈夊涓紝鐪嬬湅鏈夋病鏈塶ame List<String> strings = VciBaseUtil.str2List(showText); - if(strings.contains("name")){ + if (strings.contains("name")) { showText = "name"; - }else{ + } else { showText = strings.get(0); } } return showText; } + /** * 澶勭悊鏋氫妇鐨勬樉绀哄璞� - * @param attrVOS 妯℃澘灞炴�� + * + * @param attrVOS 妯℃澘灞炴�� * @param dataList excel鐨勬暟鎹唴瀹� * @param errorMap 閿欒淇℃伅鐨勬槧灏� */ - private void batchSwitchEnumAttrOnOrder(Collection<CodeClassifyTemplateAttrVO> attrVOS,List<ClientBusinessObject> dataList, - Map<String,String> errorMap ) { + private void batchSwitchEnumAttrOnOrder(Collection<CodeClassifyTemplateAttrVO> attrVOS, List<ClientBusinessObject> dataList, + Map<String, String> errorMap) { Map<String, CodeClassifyTemplateAttrVO> dateAttrVOMap = attrVOS.stream().filter( s -> (StringUtils.isNotBlank(s.getEnumString()) || StringUtils.isNotBlank(s.getEnumId())) ).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t)); @@ -1045,25 +4316,25 @@ dateAttrVOMap.forEach((attrId, attrVO) -> { dataList.stream().forEach(cbo -> { String text = cbo.getAttributeValue(attrId); - if(StringUtils.isNotBlank(text)){ + if (StringUtils.isNotBlank(text)) { List<KeyValue> valueList = engineService.listComboboxItems(attrVO); boolean fined = false; for (int i = 0; i < valueList.size(); i++) { KeyValue keyValue = valueList.get(i); //if(keyValue.getValue().equalsIgnoreCase(text)){ - if(keyValue.getValue().equalsIgnoreCase(text)||keyValue.getKey().equalsIgnoreCase(text)){ + if (keyValue.getValue().equalsIgnoreCase(text) || keyValue.getKey().equalsIgnoreCase(text)) { try { cbo.setAttributeValue(attrId, keyValue.getKey()); - }catch (Throwable e){ + } catch (Throwable e) { log.error("璁剧疆灞炴�у嚭閿�"); } fined = true; break; } } - if(!fined){ + if (!fined) { String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX); - errorMap.put(rowIndex,errorMap.getOrDefault(rowIndex,"") + ";灞炴�" + attrVO.getName() + "]鐨勫�间笉绗﹀悎涓嬫媺鐨勮姹�"); + errorMap.put(rowIndex, errorMap.getOrDefault(rowIndex, "") + ";灞炴�" + attrVO.getName() + "]鐨勫�间笉绗﹀悎涓嬫媺鐨勮姹�"); } } }); @@ -1073,59 +4344,63 @@ /** * 鎵归噺鏍¢獙鏁版嵁鐨勪俊鎭� + * * @param templateVO 妯℃澘鐨勬樉绀哄璞� - * @param cboList 鏁版嵁鐨勫唴瀹� + * @param cboList 鏁版嵁鐨勫唴瀹� */ - private void batchCheckRequiredAttrOnOrder(CodeClassifyTemplateVO templateVO,List<ClientBusinessObject> cboList,Map<String,String> errorMap){ + private void batchCheckRequiredAttrOnOrder(CodeClassifyTemplateVO templateVO, List<ClientBusinessObject> cboList, Map<String, String> errorMap) { Map<String, CodeClassifyTemplateAttrVO> requiredAttrMap = templateVO.getAttributes().stream().filter(s -> - VciBaseUtil.getBoolean(s.getRequireFlag()) && StringUtils.isBlank(s.getComponentRule()) && StringUtils.isBlank(s.getClassifyInvokeLevel())//涓嶈兘鏄粍鍚堢殑鍜屽垎绫绘敞鍏ョ殑 + VciBaseUtil.getBoolean(s.getRequireFlag()) && StringUtils.isBlank(s.getComponentRule()) && (StringUtils.isBlank(s.getClassifyInvokeLevel()) || s.getClassifyInvokeLevel().equals("none"))//涓嶈兘鏄粍鍚堢殑鍜屽垎绫绘敞鍏ョ殑 ).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t)); //涓嶮dmEngineServiceImpl閲岄潰鐨刢heckRequiredAttrOnOrder 閫昏緫搴旇鐩镐技 - if(!CollectionUtils.isEmpty(requiredAttrMap)) { + if (!CollectionUtils.isEmpty(requiredAttrMap)) { Set<String> nullRowIndex = cboList.stream().filter(cbo -> requiredAttrMap.keySet().stream().anyMatch(attrId -> StringUtils.isBlank(cbo.getAttributeValue(attrId)))).map(cbo -> cbo.getAttributeValue(IMPORT_ROW_INDEX)).collect(Collectors.toSet()); - if(!CollectionUtils.isEmpty(nullRowIndex)){ + if (!CollectionUtils.isEmpty(nullRowIndex)) { String checkAttr = requiredAttrMap.values().stream().map(CodeClassifyTemplateAttrVO::getName).collect(Collectors.joining(",")); - nullRowIndex.stream().forEach(rowIndex->{ - errorMap.put(rowIndex,errorMap.getOrDefault(rowIndex,"") + ";鏍¢獙瑙勫垯涓嶉�氳繃锛屾湁鏍¢獙鐨勫睘鎬т负" + checkAttr); + nullRowIndex.stream().forEach(rowIndex -> { + errorMap.put(rowIndex, errorMap.getOrDefault(rowIndex, "") + ";鏍¢獙瑙勫垯蹇呭~椤逛笉閫氳繃锛屽鏋滄湁蹇呭~灞炴�т负绌猴紝鍒欏~銆�/銆戜唬鏇�,鏈夋牎楠岀殑灞炴�т负" + checkAttr); }); } } } + /** * 澶勭悊鍒嗙被娉ㄥ叆 - * @param attrVOS 妯℃澘灞炴�� - * @param dataList excel鐨勬暟鎹唴瀹� + * + * @param attrVOS 妯℃澘灞炴�� + * @param dataList excel鐨勬暟鎹唴瀹� * @param classifyFullInfo 鍒嗙被鐨勫叏璺緞 */ - private void batchSwitchClassifyAttrOnOrder(Collection<CodeClassifyTemplateAttrVO> attrVOS,List<ClientBusinessObject> dataList, - CodeClassifyFullInfoBO classifyFullInfo,boolean isImPort) { + private void batchSwitchClassifyAttrOnOrder(Collection<CodeClassifyTemplateAttrVO> attrVOS, List<ClientBusinessObject> dataList, + CodeClassifyFullInfoBO classifyFullInfo, boolean isImPort) { Map<String, CodeClassifyTemplateAttrVO> dateAttrVOMap = attrVOS.stream().filter( - s -> StringUtils.isNotBlank(s.getClassifyInvokeAttr()) && StringUtils.isNotBlank(s.getClassifyInvokeAttr()) + s -> StringUtils.isNotBlank(s.getClassifyInvokeAttr()) ).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t)); - Map<String,CodeClassifyFullInfoBO> classifyFullInfoMap=new HashMap<>(); - classifyFullInfoMap.put(classifyFullInfo.getCurrentClassifyVO().getOid(),classifyFullInfo); + Map<String, CodeClassifyFullInfoBO> classifyFullInfoMap = new HashMap<>(); + classifyFullInfoMap.put(classifyFullInfo.getCurrentClassifyVO().getOid(), classifyFullInfo); if (!CollectionUtils.isEmpty(dateAttrVOMap)) { dataList.stream().forEach(cbo -> { dateAttrVOMap.forEach((attrId, attrVO) -> { //鍒嗙被娉ㄥ叆鐨勭紪鍙锋垨鑰呭悕绉帮紝 //灞傜骇鍖呭惈鎸囧畾灞傚拰鏈�灏忓眰 CodeClassifyVO classifyVO = null; - if(!CodeLevelTypeEnum.MIN.getValue().equalsIgnoreCase(attrVO.getClassifyInvokeLevel()) && !"min".equalsIgnoreCase(attrVO.getClassifyInvokeLevel())) { + if (!CodeLevelTypeEnum.MIN.getValue().equalsIgnoreCase(attrVO.getClassifyInvokeLevel()) && !"min".equalsIgnoreCase(attrVO.getClassifyInvokeLevel())) { //鎸囧畾浜嗗眰绾х殑 //娉ㄦ剰锛屽洜涓烘煡璇笂绾у垎绫诲嚭鏉ョ殑灞傜骇鏄�掑簭鐨勶紝鍗抽《灞傝妭鐐规槸鏈�澶х殑鍊� - if(isImPort){ - if(!classifyFullInfoMap.containsKey(cbo.getAttributeValue(CODE_CLASSIFY_OID_FIELD))) { + if (isImPort) { + if (!classifyFullInfoMap.containsKey(cbo.getAttributeValue(CODE_CLASSIFY_OID_FIELD))) { CodeClassifyFullInfoBO currentClassifyFullInfo = classifyService.getClassifyFullInfo(cbo.getAttributeValue(CODE_CLASSIFY_OID_FIELD)); classifyFullInfoMap.put(currentClassifyFullInfo.getCurrentClassifyVO().getOid(), currentClassifyFullInfo); } } - CodeClassifyFullInfoBO newClassifyFullInfo= classifyFullInfoMap.get(cbo.getAttributeValue(CODE_CLASSIFY_OID_FIELD)); - List<CodeClassifyVO> classifyVOS = newClassifyFullInfo.getParentClassifyVOs().stream().sorted(((o1, o2) -> o2.getDataLevel().compareTo(o1.getDataLevel()))).collect(Collectors.toList()); + CodeClassifyFullInfoBO newClassifyFullInfo = classifyFullInfoMap.get(cbo.getAttributeValue(CODE_CLASSIFY_OID_FIELD)); + List<CodeClassifyVO> classifyVOS = newClassifyFullInfo.getParentClassifyVOs().stream().sorted(((o1, o2) -> -o2.getDataLevel().compareTo(o1.getDataLevel()))).collect(Collectors.toList()); + int level = VciBaseUtil.getInt(attrVO.getClassifyInvokeLevel()); - if (classifyVOS.size()>=level && level > 0 ) { - classifyVO = classifyVOS.get(level-1); + if (classifyVOS.size() >= level && level > 0) { + classifyVO = classifyVOS.get(level - 1); } - }else{ + } else { //褰撳墠鐨勫垎绫� classifyVO = classifyFullInfo.getCurrentClassifyVO(); } @@ -1136,6 +4411,7 @@ } else { Map<String, String> classifyDataMap = VciBaseUtil.objectToMapString(classifyVO); String value = classifyDataMap.getOrDefault(attrVO.getClassifyInvokeAttr(), ""); +// log.error("================================褰撳墠鍒嗙被娉ㄥ叆鐨剉alue鍊间负锛�==========================",value); cbo.setAttributeValue(attrId, value); } } catch (Throwable e) { @@ -1145,163 +4421,483 @@ }); } } + /** - * 鏍¢獙鍏抽敭灞炴�� + * 鏍¢獙鍏抽敭灞炴�э紝鍜岃繎涔夎瘝鏌ヨ瑙勫垯 + * * @param classifyFullInfo 鍒嗙被鐨勫叏閮ㄤ俊鎭� - * @param templateVO 妯℃澘鐨勫唴瀹癸紝蹇呴』鍖呭惈妯℃澘灞炴�� - * @param cboList 鎵归噺鐨勬暟鎹� - */ + * @param templateVO 妯℃澘鐨勫唴瀹癸紝蹇呴』鍖呭惈妯℃澘灞炴�� + * @param cboList 鎵归噺鐨勬暟鎹� + * @param isEdit 鏄惁鏄慨鏀� + * @param errorMap 蹇呴』蹇呴』蹇呴』鏄嚎绋嬪畨鍏ㄧ殑闆嗗悎 + * */ private CodeImportResultVO batchCheckKeyAttrOnOrder(CodeClassifyFullInfoBO classifyFullInfo, CodeClassifyTemplateVO templateVO, - List<ClientBusinessObject> cboList) { + List<ClientBusinessObject> cboList, boolean isEdit, Map<String, String> errorMap/*蹇呴』瑕佹槸绾跨▼瀹夊叏鐨勯泦鍚�*/) { //涓嶮dmEngineServiceImpl閲岀殑checkKeyAttrOnOrder鐩镐技 //鍏堣幏鍙栧叧閿睘鎬х殑瑙勫垯锛屼篃鍒╃敤缁ф壙鐨勬柟寮� CodeKeyAttrRepeatVO keyRuleVO = keyRuleService.getRuleByClassifyFullInfo(classifyFullInfo); //娉ㄦ剰鐨勬槸keyRuleVO鍙兘涓虹┖锛岃〃绀轰笉浣跨敤瑙勫垯鎺у埗 //鑾峰彇鎵�鏈夌殑鍏抽敭灞炴�� - Map<String/**灞炴�х殑缂栧彿**/, CodeClassifyTemplateAttrVO> ketAttrMap = templateVO.getAttributes().stream().filter(s -> VciBaseUtil.getBoolean(s.getKeyAttrFlag())).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t)); + Map<String/**灞炴�х殑缂栧彿**/, CodeClassifyTemplateAttrVO> keyAttrMap = templateVO.getAttributes().stream().filter(s -> VciBaseUtil.getBoolean(s.getKeyAttrFlag())).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t)); - boolean trimAll =keyRuleVO ==null?false: VciBaseUtil.getBoolean(keyRuleVO.getIgnoreallspaceflag()); + // TODO:2024-02-01 鍏堣幏鍙栭厤缃簡杩戜箟璇嶆煡璇㈣鍒欑殑灞炴�э紝涓嶅悓浜庡叧閿睘鎬э紝璁剧疆浜嗚繎涔夎瘝鏌ヨ瑙勫垯鐨勫睘鎬у彲鑳芥槸澶氭潯涓嶅悓鐨勮繎涔夎瘝鏌ヨ瑙勫垯 + Map<String, CodeClassifyTemplateAttrVO> sysonymAttrMaps = templateVO.getAttributes().stream().filter(item -> Func.isNotBlank(item.getSysonymRuleOids())).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t)); + // 鑾峰彇鏄惁鏈夐厤缃繎涔夎瘝鏌ヨ瑙勫垯灞炴�� + Map<String, List<CodeSynonym>> codeSynonymMaps = new HashMap<>(); + if (!sysonymAttrMaps.isEmpty()) { + // 鏌ヨ杩戜箟璇嶈鍒欙紝瀛樺偍鏂瑰紡key锛氬睘鎬d锛寁alue杩戜箟璇嶆煡璇㈣鍒欏垪琛� + codeSynonymMaps = codeSynonymService.getCodeSynonymByOids(sysonymAttrMaps); + } + + boolean trimAll = keyRuleVO == null ? false : VciBaseUtil.getBoolean(keyRuleVO.getIgnoreallspaceflag()); //鍏ㄩ儴鍘荤┖鐨勪紭鍏堢骇澶т簬鍘荤┖ - boolean trim =keyRuleVO ==null?false: VciBaseUtil.getBoolean(keyRuleVO.getIgnorespaceflag()); - boolean ignoreCase = keyRuleVO ==null?false: VciBaseUtil.getBoolean(keyRuleVO.getIgnorecaseflag()); - boolean ignoreWidth = keyRuleVO ==null?false: VciBaseUtil.getBoolean(keyRuleVO.getIgnorewidthflag()); + boolean trim = keyRuleVO == null ? false : VciBaseUtil.getBoolean(keyRuleVO.getIgnorespaceflag()); + boolean ignoreCase = keyRuleVO == null ? false : VciBaseUtil.getBoolean(keyRuleVO.getIgnorecaseflag()); + boolean ignoreWidth = keyRuleVO == null ? false : VciBaseUtil.getBoolean(keyRuleVO.getIgnorewidthflag()); //1. 鎴戜滑闇�瑕佸厛鍒ゆ柇excel瀵煎叆鐨勫唴瀹规槸鍚︽纭� CodeImportResultVO resultVO = new CodeImportResultVO(); - resultVO.setKeyAttrRuleInfo(String.format(keyRuleVO ==null?"":"鏌ヨ瑙勫垯锛氬幓闄ょ┖鏍�--{0},蹇界暐澶у皬鍐�--{1},蹇界暐鍏ㄥ崐瑙�--{2},蹇界暐鍏ㄩ儴绌烘牸--{3}", - new String[]{trim?"鏄�":"鍚�",ignoreCase?"鏄�":"鍚�",ignoreWidth?"鏄�":"鍚�",trimAll?"鏄�":"鍚�"})); - resultVO.setSelfRepeatRowIndexList(getSelfRepeatRowIndex(ketAttrMap,cboList,keyRuleVO)); - if(!CollectionUtils.isEmpty(resultVO.getSelfRepeatRowIndexList())){ + StringBuilder synonymResString = new StringBuilder(); + if (Func.isNotEmpty(codeSynonymMaps)) { + codeSynonymMaps.keySet().stream().forEach(item -> { + synonymResString.append(item); + synonymResString.append(","); + }); + } + resultVO.setSynonymRuleInfo(Func.isEmpty(codeSynonymMaps) ? "" : String.format("浠ヤ笅[%s]琚缃簡杩戜箟璇嶆煡璇㈣鍒欑殑鍏抽敭灞炴��,涓嚭鐜颁簡閲嶅锛�", synonymResString)); + resultVO.setKeyAttrRuleInfo(keyRuleVO == null ? "" : String.format("鏌ヨ瑙勫垯锛氬幓闄ょ┖鏍�--{%s},蹇界暐澶у皬鍐�--{%s},蹇界暐鍏ㄥ崐瑙�--{%s},蹇界暐鍏ㄩ儴绌烘牸--{%s}" + , trim ? "鏄�" : "鍚�", ignoreCase ? "鏄�" : "鍚�", ignoreWidth ? "鏄�" : "鍚�", trimAll ? "鏄�" : "鍚�")); + //resultVO.setSelfRepeatRowIndexList(getSelfRepeatRowIndex(keyAttrMap,cboList,keyRuleVO)); + // 鍏堝湪琛ㄦ牸涓煡璇㈠叧閿睘鎬у拰杩戜箟璇嶈浆鎹㈠悗閲嶅鐨勫垪 + getSelfRepeatRowIndex(keyAttrMap, cboList, keyRuleVO, codeSynonymMaps, resultVO); + // 鍐嶅湪琛ㄦ牸涓煡璇㈣繎涔夎瘝鏌ヨ瑙勫垯鐨勫垪 + //getSelfRepeatSysnomRowIndex(sysonymAttrMaps,cboList,codeSynonymMaps,resultVO); + + if (!CollectionUtils.isEmpty(resultVO.getSelfRepeatRowIndexList())) { //鎴戜滑绉婚櫎鏈韩閲嶅鐨勬暟鎹� - cboList = cboList.stream().filter(s->!resultVO.getSelfRepeatRowIndexList().contains(s.getAttributeValue(IMPORT_ROW_INDEX))).collect(Collectors.toList()); + cboList = cboList.stream().filter(s -> !resultVO.getSelfRepeatRowIndexList().contains(s.getAttributeValue(IMPORT_ROW_INDEX))).collect(Collectors.toList()); } //2.鍒ゆ柇鍏抽敭灞炴�у湪绯荤粺閲屾槸鍚﹂噸澶� - //鍥犱负鏁版嵁閲忓緢澶э紝鎵�浠ュ緱鎯冲姙娉曞苟琛� - //SessionInfo sessionInfo = VciBaseUtil.getCurrentUserSessionInfo(); - Map<String,List<ClientBusinessObject>> indexTODataMap=new HashMap<>(); - List<ClientBusinessObject> repeatDataMap = cboList.parallelStream().filter(cbo -> { - //姣忚閮藉緱鏌ヨ.濡傛灉鍏朵腑鍑虹幇浜嗛敊璇紝鎴戜滑灏辩洿鎺ユ姏鍑哄紓甯革紝鍏朵綑鐨勬樉绀� - //VciBaseUtil.setCurrentUserSessionInfo(sessionInfo); - Map<String, String> conditionMap = new HashMap<>(); - ketAttrMap.forEach((attrId, attrVO) -> { - String value =cbo.getAttributeValue(attrId.toLowerCase(Locale.ROOT)); - if (value == null) { - value = ""; + Map<String, List<BaseModel>> indexTODataMap = new ConcurrentHashMap<>(); + // 鏌ヨ涓嶉渶瑕佸弬涓庡叧閿睘鎬ф牎楠岀殑闄よ嚜宸变互澶栫殑鎵�鏈夊垎绫籵id + final String isParticipateCheckOids = classifyService.selectLeafByParentClassifyOid(classifyFullInfo.getTopClassifyVO().getOid(), classifyFullInfo.getCurrentClassifyVO().getOid()); + final BladeUser user = AuthUtil.getUser(); + // TODO:Thread limit exceeded replacing blocked 寮傚父鏄繖閮ㄥ垎浠g爜鎶涘嚭鐨� + // ,鎵�浠ユ殏鏃跺皢parallelStream鏀规垚浜唖tream锛屾敼鎴愪簡stream涔嬪悗鍙戠幇宸ㄦ參 + // customForkJoinPool鎺у埗骞跺彂搴� + final List<ClientBusinessObject> finalCboList = cboList; + final Map<String, List<CodeSynonym>> finalCodeSynonymMaps = codeSynonymMaps; + List<ClientBusinessObject> repeatDataMap = (List<ClientBusinessObject>) customForkJoinPool.submit(() -> { + finalCboList.parallelStream().filter(cbo -> { + //姣忚閮藉緱鏌ヨ.濡傛灉鍏朵腑鍑虹幇浜嗛敊璇紝鎴戜滑灏辩洿鎺ユ姏鍑哄紓甯革紝鍏朵綑鐨勬樉绀� + //VciBaseUtil.setCurrentUserSessionInfo(sessionInfo); + Map<String, String> conditionMap = new HashMap<>(); + keyAttrMap.forEach((attrId, attrVO) -> { + String value = cbo.getAttributeValue(attrId.toLowerCase(Locale.ROOT)); + if (value == null) { + value = ""; + } + value = value.replace(REQUIRED_CHAR, SPECIAL_CHAR); + // 鍏抽敭灞炴�ф煡璇㈡潯浠秏ap鑾峰彇 + engineService.wrapperKeyAttrConditionMap(value, keyRuleVO, finalCodeSynonymMaps.get(attrId), attrId, trim, ignoreCase, ignoreWidth, trimAll, conditionMap); + }); + + if (!CollectionUtils.isEmpty(keyAttrMap)) { + // 娣诲姞涓嶅弬涓庡叧閿睘鎬ф牎楠岀殑鍒嗙被oid鍒ゆ柇 + if (Func.isNotBlank(isParticipateCheckOids)) { + conditionMap.put("t.codeclsfid", QueryOptionConstant.NOTIN + isParticipateCheckOids); + } + //濡傛灉鏄洿鏀瑰垯闇�鎺掗櫎绯荤粺鏈韩 + if (isEdit) { + conditionMap.put("t.id", QueryOptionConstant.NOTEQUAL + cbo.getId()); + } + conditionMap.put("t.lastr", "1"); + conditionMap.put("t.lastv", "1"); + + CodeTemplateAttrSqlBO sqlBO = engineService.getSqlByTemplateVO(classifyFullInfo.getTopClassifyVO().getBtmTypeId(), templateVO, conditionMap, null); + List<String> repeatData = commonsMapper.selectList(sqlBO.getSqlId()); + if (!repeatData.isEmpty()) { + final List<Map<String, String>> newDataList = commonsMapper.queryByOnlySqlForMap(sqlBO.getSqlUnPage()); + DefaultAttrAssimtUtil.mapToLowerCase(newDataList, true); + //List<ClientBusinessObject> newCboList=ChangeMapTOClientBusinessObjects(newDataList); + List<BaseModel> newCboList = new ArrayList<>(); + newDataList.stream().forEach(stringStringMap -> { + BaseModel baseModel = new BaseModel(); + DefaultAttrAssimtUtil.copplyDefaultAttrAssimt(stringStringMap, baseModel, false, user); + baseModel.setData(stringStringMap); + newCboList.add(baseModel); + }); + // 娣诲姞閿欒鍊� + String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX); + log.info("=============鍏抽敭灞炴�ф煡璇㈤噸澶嶇殑============="+JSON.toJSONString(repeatData)); + errorMap.put(rowIndex, "閲嶅鐨勮褰曠紪鍙蜂负:" + repeatData.stream().collect(Collectors.joining(","))); + if (!CollectionUtils.isEmpty(newCboList)) { + indexTODataMap.put(cbo.getAttributeValue(IMPORT_ROW_INDEX), newCboList); + } + } + return !repeatData.isEmpty(); + } else { + return false; } - value= value.replace(REQUIRED_CHAR,SPECIAL_CHAR); - engineService.wrapperKeyAttrConditionMap(value, keyRuleVO, attrId, trim, ignoreCase, ignoreWidth, trimAll, conditionMap); - }); - if (!CollectionUtils.isEmpty(ketAttrMap)) { - CodeTemplateAttrSqlBO sqlBO = engineService.getSqlByTemplateVO(classifyFullInfo.getTopClassifyVO().getBtmtypeid(), templateVO, conditionMap, null); - boolean isKeyCheck= commonsMapper.queryCountBySql(sqlBO.getSqlCount()) > 0; - if(isKeyCheck){ - List<Map<String,String>> newDataList= commonsMapper.queryByOnlySqlForMap(sqlBO.getSqlUnPage()); - List<ClientBusinessObject> newCboList= ChangeMapTOClientBusinessObjects(newDataList); - indexTODataMap.put(cbo.getAttributeValue(IMPORT_ROW_INDEX),newCboList); - } - return isKeyCheck; - }else{ - return false; - } - }).collect(Collectors.toList()); - if(!CollectionUtils.isEmpty(repeatDataMap)){ - resultVO.setKeyAttrRepeatRowIndexList(repeatDataMap.stream().map(s->s.getAttributeValue(IMPORT_ROW_INDEX)).collect(Collectors.toSet())); + }).collect(Collectors.toList()); + }).join(); + if (!CollectionUtils.isEmpty(repeatDataMap)) { + resultVO.setKeyAttrRepeatRowIndexList(repeatDataMap.stream().map(s -> s.getAttributeValue(IMPORT_ROW_INDEX)).collect(Collectors.toSet())); } - //resultVO.setIndexTODataMap(indexTODataMap); + resultVO.setIndexTODataMap(indexTODataMap); //resultVO.setSuccess(true); return resultVO; } + /** - * 鑾峰彇瀵煎叆鐨勫唴瀹逛腑鍏抽敭灞炴�ч噸澶嶇殑琛屽彿 + * 妫�鏌ュ垎绫荤殑璺緞鏄惁瀛樺湪 + * + * @param cboList 涓氬姟鏁版嵁 + * @param errorMap 閿欒淇℃伅 + * @param pathMap 璺緞鍜屽垎绫荤殑鏄犲皠 + */ + private void checkClassifyPathInHistory(List<ClientBusinessObject> cboList, + Map<String, String> errorMap, Map<String/**璺緞**/, CodeClassifyVO> pathMap, + Map<String/**涓婚敭**/, String/**璺緞**/> childOidPathMap) { + cboList.parallelStream().forEach(cbo -> { + String classifyPath = cbo.getAttributeValue(CODE_CLASSIFY_OID_FIELD); + //濡傛灉path涓虹┖锛屽垯琛ㄧず鏄鍏ュ綋鍓嶅垎绫� + if (StringUtils.isBlank(classifyPath)) { + classifyPath = "#current#"; + } + if (!pathMap.containsKey(classifyPath)) { + String row_index = cbo.getAttributeValue(IMPORT_ROW_INDEX); + errorMap.put(row_index, errorMap.getOrDefault(row_index, "") + ";鍒嗙被璺緞涓嶅瓨鍦�"); + } else { + //杞竴涓嬪垎绫荤殑涓婚敭 + try { + String classifyOid = pathMap.get(classifyPath).getOid(); + cbo.setAttributeValueWithNoCheck(CODE_CLASSIFY_OID_FIELD, classifyOid); + cbo.setAttributeValue(CODE_FULL_PATH_FILED, childOidPathMap.getOrDefault(classifyOid, classifyPath)); + } catch (VciBaseException e) { + log.error("璁剧疆灞炴�х殑閿欒", e); + } + } + }); + } + + /** + * 妫�鏌ュ垎绫讳互鍙婂瓙鍒嗙被鏄惁閮芥湁缂栫爜瑙勫垯 + * + * @param classifyVOMap 鍒嗙被鐨勬樉绀哄璞℃槧灏� + * @param ruleOidMap 瑙勫垯鐨勪富閿槧灏� + * @param unExistRuleClassifyOidList 涓嶅瓨鍦ㄧ紪鐮佽鍒欑殑鍒嗙被鐨勪富閿� + */ + private void checkRuleOidInHistory(Map<String/**涓婚敭**/, CodeClassifyVO> classifyVOMap, Map<String/**鍒嗙被涓婚敭**/, String/**瑙勫垯涓婚敭**/> ruleOidMap, + List<String> unExistRuleClassifyOidList) { + if (!CollectionUtils.isEmpty(classifyVOMap)) { + classifyVOMap.values().parallelStream().forEach(classifyVO -> { + if (StringUtils.isNotBlank(classifyVO.getCodeRuleOid())) { + ruleOidMap.put(classifyVO.getOid(), classifyVO.getCodeRuleOid()); + } else { + //閫掑綊鎵句笂绾� + List<String> ruleOidList = new ArrayList<>(); + recursionRule(classifyVOMap, classifyVO.getParentCodeClassifyOid(), ruleOidList); + if (!CollectionUtils.isEmpty(ruleOidList)) { + ruleOidMap.put(classifyVO.getOid(), ruleOidList.get(0)); + } else { + unExistRuleClassifyOidList.add(classifyVO.getOid()); + } + } + }); + } + log.info(";;;;"); + } + + /** + * 閫掑綊鎵剧紪鐮佽鍒� + * + * @param classifyVOMap 鍒嗙被鐨勬樉绀哄璞℃槧灏� + * @param classifyOid 鍒嗙被鐨勪富閿� + * @param ruleOidList 瑙勫垯鐨勪富閿甽ist + */ + private void recursionRule(Map<String, CodeClassifyVO> classifyVOMap, String classifyOid, List<String> ruleOidList) { + if (classifyVOMap.containsKey(classifyOid)) { + CodeClassifyVO classifyVO = classifyVOMap.get(classifyOid); + if (StringUtils.isNotBlank(classifyVO.getCodeRuleOid())) { + ruleOidList.add(classifyVO.getCodeRuleOid()); + return; + } else { + recursionRule(classifyVOMap, classifyVO.getParentCodeClassifyOid(), ruleOidList); + } + } else { + Map<String, CodeClassifyVO> parentClassifyVOMap = new HashMap<>(); + CodeClassifyVO codeClassifyVO = this.classifyService.getObjectByOid(classifyOid); + parentClassifyVOMap.put(codeClassifyVO.getOid(), codeClassifyVO); + recursionRule(parentClassifyVOMap, codeClassifyVO.getOid(), ruleOidList); + } + } + + /** + * 鑾峰彇瀛愬垎绫荤殑璺緞 + * + * @param classifyFullInfo 鍒嗙被鍏ㄩ儴淇℃伅 + * @param fullPath 鍒嗙被鐨勫叏璺緞 + * @return 瀛愬垎绫荤殑璺緞锛宬ey鏄垎绫荤殑涓婚敭 + */ + private Map<String/**鍒嗙被鐨勪富閿�**/, String/**鍒嗙被璺緞**/> getChildClassifyPathMap(CodeClassifyFullInfoBO classifyFullInfo, String fullPath) { + List<CodeClassifyVO> childPathVOs = classifyService.listChildrenClassify(classifyFullInfo.getCurrentClassifyVO().getOid(), true, VciQueryWrapperForDO.OID_FIELD, true); + Map<String/**鍒嗙被鐨勪富閿�**/, String/**鍒嗙被鐨勪富閿�**/> childOidPathMap = new ConcurrentHashMap<>(); + if (!CollectionUtils.isEmpty(childPathVOs)) { + childPathVOs.parallelStream().forEach(childPath -> { + // String thisClassifyPath = fullPath + "##" + childPath.getPath().replace("#" + classifyFullInfo.getCurrentClassifyVO().getOid() + "#","").replace("#","##"); + List<String> list = Arrays.asList(childPath.getPath().split("#")); + List<String> newPahtList = list.stream().sorted(Comparator.comparing(s -> s, Comparator.reverseOrder())).collect(Collectors.toList()); + String thisClassifyPath = StringUtils.join(newPahtList, "##") + fullPath; + childOidPathMap.put(childPath.getOid(), thisClassifyPath); + }); + } + String path = classifyFullInfo.getCurrentClassifyVO().getId(); + //鏍规嵁瀹㈡埛閫夋嫨鐨勫垎绫昏矾寰勬湭id锛岃繕鏄痭ame纭畾璺緞鎷兼帴 + childOidPathMap.put(classifyFullInfo.getCurrentClassifyVO().getOid(), fullPath); + return childOidPathMap; + } + + /** + * 鑾峰彇瀵煎叆鐨勫唴瀹逛腑鍏抽敭灞炴�ц繎涔夎瘝杞崲鍚庨噸澶嶇殑琛屽彿 + * * @param ketAttrMap 鍏抽敭灞炴�х殑鏄犲皠 - * @param dataList 瀵煎叆鐨勬暟鎹� - * @param keyRuleVO 鍏抽敭灞炴�ф帶鍒惰鍒� + * @param dataList 瀵煎叆鐨勬暟鎹� + * @param keyRuleVO 鍏抽敭灞炴�ф帶鍒惰鍒� * @return 閲嶅鐨勮鍙� */ - private Set<String> getSelfRepeatRowIndex(Map<String/**灞炴�х殑缂栧彿**/, CodeClassifyTemplateAttrVO> ketAttrMap, - List<ClientBusinessObject> dataList,CodeKeyAttrRepeatVO keyRuleVO){ + private void getSelfRepeatRowIndex(Map<String/**灞炴�х殑缂栧彿**/, CodeClassifyTemplateAttrVO> ketAttrMap, + List<ClientBusinessObject> dataList, CodeKeyAttrRepeatVO keyRuleVO,/*杩戜箟璇嶆煡璇㈣鍒�*/Map<String, List<CodeSynonym>> codeSynonymMaps, CodeImportResultVO resultVO) { Set<String> selfRepeatRowIndexList = new CopyOnWriteArraySet<>(); - boolean trimAll =keyRuleVO ==null?false: VciBaseUtil.getBoolean(keyRuleVO.getIgnoreallspaceflag()); + Map<String, List<String>> keyAttrOkOidTORepeatOidMap = new ConcurrentHashMap<>(); + boolean trimAll = keyRuleVO == null ? false : VciBaseUtil.getBoolean(keyRuleVO.getIgnoreallspaceflag()); //鍏ㄩ儴鍘荤┖鐨勪紭鍏堢骇澶т簬鍘荤┖ - boolean trim =keyRuleVO ==null?false: VciBaseUtil.getBoolean(keyRuleVO.getIgnorespaceflag()); - boolean ignoreCase = keyRuleVO ==null?false: VciBaseUtil.getBoolean(keyRuleVO.getIgnorecaseflag()); - boolean ignoreWidth = keyRuleVO ==null?false: VciBaseUtil.getBoolean(keyRuleVO.getIgnorewidthflag()); + boolean trim = keyRuleVO == null ? false : VciBaseUtil.getBoolean(keyRuleVO.getIgnorespaceflag()); + boolean ignoreCase = keyRuleVO == null ? false : VciBaseUtil.getBoolean(keyRuleVO.getIgnorecaseflag()); + boolean ignoreWidth = keyRuleVO == null ? false : VciBaseUtil.getBoolean(keyRuleVO.getIgnorewidthflag()); //蹇呴』灏嗗睘鎬ф寜鐓ч『搴忔帓搴忓ソ List<CodeClassifyTemplateAttrVO> attrVOList = ketAttrMap.values().stream().sorted(((o1, o2) -> o1.getOrderNum().compareTo(o2.getOrderNum()))).collect(Collectors.toList()); - Map<String/**琛屽彿**/,String/**鍏抽敭灞炴�х殑缁勫悎鍐呭**/> rowIndexKeyStringMap = new HashMap<>(); - dataList.parallelStream().forEach(cbo-> { + Map<String/**琛屽彿**/, String/**鍏抽敭灞炴�х殑缁勫悎鍐呭**/> rowIndexKeyStringMap = new ConcurrentHashMap<>(); + Map<String/**鍏抽敭灞炴�х殑缁勫悎鍐呭**/, String/**绗竴涓叧閿睘鎬х殑鏁版嵁oid**/> okOidKeyStringMap = new ConcurrentHashMap<>(); + dataList.stream().forEach(cbo -> { String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX); + String oid = cbo.getOid(); StringBuilder sb = new StringBuilder(); - for (int i = 0; i < attrVOList.size(); i++) { - CodeClassifyTemplateAttrVO attrVO = attrVOList.get(i); - String attrId = attrVO.getId().toLowerCase(Locale.ROOT); - String value = cbo.getAttributeValue( attrId); + // TODO锛� 2024-02-25鏀归�犲疄鐜拌繎涔夎瘝鏌ヨ瑙勫垯鍔熻兘锛涘叧閿睘鎬ч噸澶嶆牎楠屽�煎鐞� + attrVOList.stream().forEach(item -> { + String attrId = item.getId().toLowerCase(Locale.ROOT); + String value = cbo.getAttributeValue(attrId); if (value == null) { value = ""; } - if(trim){ + if (trim) { value = value.trim(); } - if(trimAll){ - value = value.replace(" ",""); + if (trimAll) { + value = value.replace(" ", ""); } - if(ignoreCase){ + if (ignoreCase) { value = value.toLowerCase(Locale.ROOT); } - if(ignoreWidth){ + if (ignoreWidth) { value = VciBaseUtil.toDBC(value); } + value = mdmEngineService.getValueToSynony(codeSynonymMaps.get(attrId), value); sb.append(value).append("${ks}"); - } + }); String keyString = sb.toString(); - if(rowIndexKeyStringMap.containsValue(keyString) && StringUtils.isNotBlank(keyString)){ + if (rowIndexKeyStringMap.containsValue(keyString) && StringUtils.isNotBlank(keyString)) { selfRepeatRowIndexList.add(rowIndex); - }else { - rowIndexKeyStringMap.put(rowIndex, sb.toString()); + String okOid = okOidKeyStringMap.getOrDefault(keyString, ""); + if (StringUtils.isNotBlank(okOid)) { + List<String> newOidList = new ArrayList<>(); + newOidList.add(oid); + if (keyAttrOkOidTORepeatOidMap.containsKey(okOid)) { + List<String> oldOidList = keyAttrOkOidTORepeatOidMap.get(okOid); + newOidList.addAll(oldOidList); + } + keyAttrOkOidTORepeatOidMap.put(okOid, newOidList); + } + } else { + okOidKeyStringMap.put(sb.toString(), oid); + rowIndexKeyStringMap.put(rowIndex, keyString); } }); //鍥犱负鍙槸鍏抽敭灞炴�ч噸澶嶏紝鎵�浠ユ垜浠笉鑳介噸澶嶇殑澶氭潯閫変竴鏉℃潵鎶ラ敊 - return selfRepeatRowIndexList; +// resultVO.setKeyAttrRepeatRowIndexList(selfRepeatRowIndexList); + resultVO.setSelfRepeatRowIndexList(selfRepeatRowIndexList); + resultVO.setKeyAttrOkOidTORepeatOidMap(keyAttrOkOidTORepeatOidMap); } + /** * excel鐨勬爣棰樹笂鑾峰彇瀛楁鎵�鍦ㄧ殑浣嶇疆 - * @param titleRowData 鏍囬鐨勫唴瀹� + * + * @param titleRowData 鏍囬鐨勫唴瀹� * @param attrNameIdMap 妯℃澘涓睘鎬у悕绉板拰鑻辨枃鐨勬槧灏� * @param fieldIndexMap 浣嶇疆鍜岃嫳鏂囧瓧娈电殑鏄犲皠 */ - private void getFieldIndexMap(List<String> titleRowData,Map<String/**鍚嶇О**/,String/**瀛楁鍚�**/> attrNameIdMap,Map<Integer/**浣嶇疆**/,String/**鑻辨枃鍚嶅瓧**/> 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)){ + 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)){ + 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)){ + 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); + if (com.alibaba.cloud.commons.lang.StringUtils.isNotBlank(id)) { + fieldIndexMap.put(i, id); } } } - private List<ClientBusinessObject> ChangeMapTOClientBusinessObjects(List<Map<String,String>> oldDataMap){ - List<ClientBusinessObject> clientBusinessObjectList=new CopyOnWriteArrayList<>(); - oldDataMap.parallelStream().forEach(dataMap->{ - ClientBusinessObject clientBusinessObject=new ClientBusinessObject(); - DefaultAttrAssimtUtil.copplyDefaultAttrAssimt(dataMap,clientBusinessObject); - dataMap.forEach((key,value)->{ - clientBusinessObject.setAttributeValue(key,value); - }); + + private List<ClientBusinessObject> ChangeMapTOClientBusinessObjects(List<Map<String, String>> oldDataMap) { + List<ClientBusinessObject> clientBusinessObjectList = new ArrayList<>(); + DefaultAttrAssimtUtil.mapToLowerCase(oldDataMap, true); + final BladeUser user = AuthUtil.getUser(); + oldDataMap.stream().forEach(dataMap -> { + ClientBusinessObject clientBusinessObject = new ClientBusinessObject(); + DefaultAttrAssimtUtil.copplyDefaultAttrAssimt(dataMap, clientBusinessObject, false, user); + for (String key : dataMap.keySet()) { + Object value = dataMap.getOrDefault(key, ""); + clientBusinessObject.setAttributeValue(key.toLowerCase(Locale.ROOT), value == null ? "" : value.toString()); + } + clientBusinessObjectList.add(clientBusinessObject); }); return clientBusinessObjectList; } /*** + * 鏍规嵁涓嶅悓妯℃澘缁勭粐execl鏁版嵁 + * @param dataSet + * @param pathMap + * @param errorMap + */ + private void createExeclClassData(SheetDataSet dataSet, Map<String/**璺緞**/, CodeClassifyVO> pathMap, Map<String, String> errorMap, List<CodeImprotDataVO> codeClassifyDatas) { + + Map<String, CodeImprotDataVO> pathDatas = new HashMap<>(); + List<String> titleRowData = dataSet.getColName(); + List<SheetRowData> rowDataList = dataSet.getRowData(); + LinkedHashMap<String, CodeClassifyTemplateVO> codeClassifyTemplateVOMap = new LinkedHashMap<String, CodeClassifyTemplateVO>(); + LinkedHashMap<String, CodeRuleVO> codeRuleVOVOMap = new LinkedHashMap<String, CodeRuleVO>(); + + for (int i = 0; i < titleRowData.size(); i++) { + String title = titleRowData.get(i); + if (title.equals("鍒嗙被璺緞")) { + int finalI = i; + rowDataList.stream().forEach(sheetRowData -> { + CodeImprotDataVO dataVO = new CodeImprotDataVO(); + String Path = sheetRowData.getData().get(finalI); + String rowIndex = sheetRowData.getRowIndex(); + Map<Integer, String> execlData = sheetRowData.getData(); + CodeClassifyTemplateVO newTemplateVO = new CodeClassifyTemplateVO(); + CodeRuleVO codeRuleVO = new CodeRuleVO(); + if (StringUtils.isEmpty(Path)) { + Path = "#current#"; + } + + if (pathMap.containsKey(Path)) { + CodeClassifyVO codeClassifyVO = pathMap.get(Path); + if (codeClassifyTemplateVOMap.containsKey(Path)) { + newTemplateVO = codeClassifyTemplateVOMap.get(Path); + codeRuleVO = codeRuleVOVOMap.get(Path); + if (newTemplateVO == null || StringUtils.isBlank(newTemplateVO.getOid())) { + errorMap.put(rowIndex, "绗�" + rowIndex + "琛岋紝鍒嗙被璺緞鏈煡璇㈠埌鐩稿簲鐨勫垎绫绘ā鏉�"); + } + if (codeRuleVO == null || StringUtils.isBlank(codeRuleVO.getOid())) { + errorMap.put(rowIndex, "绗�" + rowIndex + "琛岋紝鍒嗙被璺緞鏈煡璇㈠埌鐩稿簲鐨勫垎绫昏鍒�"); + } + } else { + newTemplateVO = engineService.getUsedTemplateByClassifyOid(codeClassifyVO.getOid()); + if (newTemplateVO == null || StringUtils.isBlank(newTemplateVO.getOid())) { + errorMap.put(rowIndex, "绗�" + rowIndex + "琛岋紝鍒嗙被璺緞鏈煡璇㈠埌鐩稿簲鐨勫垎绫绘ā鏉�"); + } + codeRuleVO = engineService.getCodeRuleByClassifyOid(codeClassifyVO.getOid()); + if (codeRuleVO == null || StringUtils.isBlank(codeRuleVO.getOid())) { + errorMap.put(rowIndex, "绗�" + rowIndex + "琛岋紝鍒嗙被璺緞鏈煡璇㈠埌鐩稿簲鐨勫垎绫昏鍒�"); + } + } + if (pathMap.containsKey(Path)) { + dataVO = pathDatas.getOrDefault(Path, dataVO); + } + dataVO.setTemplateOid(newTemplateVO == null ? "" : newTemplateVO.getOid()); + dataVO.setCodeClassifyTemplateVO(newTemplateVO); + dataVO.setCodeClassifyVO(codeClassifyVO); + dataVO.setCodeRuleVO(codeRuleVO); + dataVO.setRowIndex(rowIndex); + dataVO.setCodeClassifyOid(codeClassifyVO.getOid());//璁剧疆鍒嗙被oid + dataVO.setCodeRuleOid(codeRuleVO == null ? "" : codeRuleVO.getOid()); + createExeclClassData(titleRowData, newTemplateVO, execlData, dataVO); + pathDatas.put(Path, dataVO); + codeClassifyTemplateVOMap.put(Path, newTemplateVO); + codeRuleVOVOMap.put(Path, codeRuleVO); + } else { + errorMap.put(rowIndex, "绗�" + rowIndex + "琛岋紝鍒嗙被璺緞鏈煡璇㈠埌鐩稿簲鐨勫垎绫�"); + } + }); + break; + } + } + List<CodeImprotDataVO> newCodeImprotDataVO = pathDatas.values().stream().collect(Collectors.toList()); + codeClassifyDatas.addAll(newCodeImprotDataVO); + log.info("222"); + } + + /*** + * @param titleRowData + * @param newTemplateVO + * @param execlData + * @param codeImprotDataVO + */ + private void createExeclClassData(List<String> titleRowData, CodeClassifyTemplateVO newTemplateVO, Map<Integer, String> execlData, CodeImprotDataVO codeImprotDataVO) { + //闄ゅ幓榛樿鐨勫睘鎬�.杩樻湁鍙湁琛ㄥ崟鏄剧ず鐨勫瓧娈垫墠瀵煎叆 + List<CodeClassifyTemplateAttrVO> attrVOS = newTemplateVO.getAttributes().stream().filter(s -> + !DEFAULT_ATTR_LIST.contains(s.getId()) && + ((Func.isNotEmpty(s.getClassifyInvokeAttr()) || Func.isNotEmpty(s.getClassifyInvokeAttrName())) || VciBaseUtil.getBoolean(s.getFormDisplayFlag())) + ).collect(Collectors.toList()); + Map<String/**涓枃鍚嶇О**/, String/**鑻辨枃鍚嶇О**/> attrNameIdMap = attrVOS.stream().collect(Collectors.toMap(s -> s.getName(), t -> t.getId())); + List<String> fields = new ArrayList<>(); + Map<String, String> filedValueMap = new HashMap<>(); + List<String> colNames = new ArrayList<>(); + for (int i = 0; i < titleRowData.size(); i++) { + String title = titleRowData.get(i); + title = title.replace(KEY_ATTR_CHAR, "").replace(REQUIRED_CHAR, ""); + String id = attrNameIdMap.getOrDefault(title, ""); + if (StringUtils.isBlank(id) && "鍒嗙被璺緞".equalsIgnoreCase(title)) { + id = CODE_CLASSIFY_OID_FIELD; + } + if (StringUtils.isBlank(id) && "鐮佹瀹藉害".equalsIgnoreCase(title)) { + id = CODE_SEC_LENGTH_FIELD; + } + if (StringUtils.isBlank(id) && "浼佷笟缂栫爜".equalsIgnoreCase(title)) { + id = CODE_FIELD; + } + if (StringUtils.isNotBlank(id)) { + // fieldIndexMap.put(i,id);id + fields.add(id); + colNames.add(title); + String value = StringUtils.isNotBlank(execlData.get(i)) ? execlData.get(i) : ""; + filedValueMap.put(id, value); + + } + } + // filedValueMap.put(CODE_CLASSIFY_OID_FIELD,codeImprotDataVO.getCodeClassifyOid());//灏嗗綋鍓嶅垎绫籵id瀛樺叆瀛楁涓� + filedValueMap.put("codeclassifyid", codeImprotDataVO.getCodeClassifyOid()); + filedValueMap.put(IMPORT_ROW_INDEX, codeImprotDataVO.getRowIndex()); + filedValueMap.put("codetemplateoid", newTemplateVO.getOid()); + codeImprotDataVO.setFields(fields); + codeImprotDataVO.setColNames(colNames); + codeImprotDataVO.getDatas().add(filedValueMap); + } + + /** * 姝g‘閿欒鏁版嵁redis缂撳瓨 + * * @param uuid * @param templateVO * @param rowIndexCbo @@ -1310,26 +4906,26 @@ * @param errorMap * @param isok */ - private void createRedisDatas(String uuid,CodeClassifyTemplateVO templateVO,Map<String,ClientBusinessObject> rowIndexCbo, SheetDataSet dataSet, Map<Integer/**鍒楀彿**/,String/**瀛楁鐨勫悕绉�**/> fieldIndexMap,Map<String,String> errorMap,boolean isok){ - List<SheetRowData> needsheetRowDataList =new ArrayList<>(); - if(errorMap.size()>0) { + private void createRedisDatas(String uuid, CodeClassifyTemplateVO templateVO, Map<String, ClientBusinessObject> rowIndexCbo, SheetDataSet dataSet, Map<Integer/**鍒楀彿**/, String/**瀛楁鐨勫悕绉�**/> fieldIndexMap, Map<String, String> errorMap, boolean isok) { + List<SheetRowData> needsheetRowDataList = new ArrayList<>(); + if (errorMap.size() > 0) { //瑕佹妸浠ヤ笂鐨勯敊璇殑閮芥姏鍑哄悗锛屽啀缁х画澶勭悊鏃堕棿鍜岀粍鍚堣鍒� needsheetRowDataList = dataSet.getRowData().stream().filter(cbo -> { - String rowIndex=cbo.getRowIndex(); - return isok? !errorMap.containsKey(rowIndex):errorMap.containsKey(rowIndex); + String rowIndex = cbo.getRowIndex(); + return isok ? !errorMap.containsKey(rowIndex) : errorMap.containsKey(rowIndex); }).collect(Collectors.toList()); - }else{ - needsheetRowDataList= dataSet.getRowData(); + } else { + needsheetRowDataList = dataSet.getRowData(); } - Map<String/**涓枃鍚嶇О**/, SheetRowData/**鑻辨枃鍚嶇О**/> rowIdexDataMap = needsheetRowDataList.stream().collect(Collectors.toMap(s -> s.getRowIndex(), t -> t,(o1, o2)->o2)); - Map<String,CodeImprotDataVO> clsfDataMap=new HashMap<>(); - rowIndexCbo .forEach((rowIndex, cbo) -> { + Map<String/**涓枃鍚嶇О**/, SheetRowData/**鑻辨枃鍚嶇О**/> rowIdexDataMap = needsheetRowDataList.stream().collect(Collectors.toMap(s -> s.getRowIndex(), t -> t, (o1, o2) -> o2)); + Map<String, CodeImprotDataVO> clsfDataMap = new HashMap<>(); + rowIndexCbo.forEach((rowIndex, cbo) -> { CodeImprotDataVO codeImprotDataVO = new CodeImprotDataVO(); codeImprotDataVO.setTemplateOid(templateVO.getOid()); List<Map<String, String>> dataList = new ArrayList<>(); - if(rowIdexDataMap.containsKey(rowIndex)){ - SheetRowData sheetRowData=rowIdexDataMap.get(rowIndex); + if (rowIdexDataMap.containsKey(rowIndex)) { + SheetRowData sheetRowData = rowIdexDataMap.get(rowIndex); Map<String, String> dataMap = new HashMap<>(); Map<Integer, String> data = sheetRowData.getData(); fieldIndexMap.forEach((integer, s) -> { @@ -1339,27 +4935,71 @@ dataMap.put(field, vlues); } }); - dataMap.put("oid",cbo.getOid()); + dataMap.put("oid", cbo.getOid()); dataList.add(dataMap); } - if(clsfDataMap.containsKey(templateVO.getOid())){ - codeImprotDataVO=clsfDataMap.get(templateVO.getOid()); + if (clsfDataMap.containsKey(templateVO.getOid())) { + codeImprotDataVO = clsfDataMap.get(templateVO.getOid()); dataList.addAll(codeImprotDataVO.getDatas()); } codeImprotDataVO.setColNames(dataSet.getColName()); codeImprotDataVO.setDatas(dataList); - clsfDataMap.put(templateVO.getOid(),codeImprotDataVO); + clsfDataMap.put(templateVO.getOid(), codeImprotDataVO); }); - if(!CollectionUtils.isEmpty(clsfDataMap)) { - Collection codeImprotDataVOS=clsfDataMap.values(); - List<CodeImprotDataVO> codeImprotDataVOList=new ArrayList<>(); + if (!CollectionUtils.isEmpty(clsfDataMap)) { + Collection codeImprotDataVOS = clsfDataMap.values(); + List<CodeImprotDataVO> codeImprotDataVOList = new ArrayList<>(); codeImprotDataVOList.addAll(codeImprotDataVOS); - bladeRedis.set(uuid+"-"+templateVO.getOid(), codeImprotDataVOList); - bladeRedis.expire(uuid+"-"+templateVO.getOid(),BATCHADD_REDIS_TIME);//redis杩囨湡鏃堕棿 + bladeRedis.set(uuid + "-" + templateVO.getOid(), codeImprotDataVOList); + bladeRedis.expire(uuid + "-" + templateVO.getOid(), BATCHADD_REDIS_TIME);//redis杩囨湡鏃堕棿 } } - /**** + /** + * 鏍规嵁缂栫爜瑙勫垯缂撳瓨鏁版嵁 + * @param uuid + * @param codeImprotDataVOs + * @param errorMap + * @param isok + */ + private void createRedisDatas(String uuid, List<CodeImprotDataVO> codeImprotDataVOs, Map<String, String> errorMap, boolean isok) { + codeImprotDataVOs.stream().forEach(codeImprotDataVO -> { + List<Map<String, String>> dataLists = new ArrayList<>(); + CodeImprotDataVO newCodeImprotDataVO = new CodeImprotDataVO(); + if (errorMap.size() > 0) { + //瑕佹妸浠ヤ笂鐨勯敊璇殑閮芥姏鍑哄悗锛屽啀缁х画澶勭悊鏃堕棿鍜岀粍鍚堣鍒� + dataLists = codeImprotDataVO.getDatas().stream().filter(cbo -> { + String rowIndex = cbo.get(IMPORT_ROW_INDEX); + String msg = StringUtils.isBlank(errorMap.get(rowIndex)) ? "" : errorMap.get(rowIndex); + cbo.put("errorMsg", msg); + return isok ? !errorMap.containsKey(rowIndex) : errorMap.containsKey(rowIndex); + }).collect(Collectors.toList()); + + } else { + dataLists = codeImprotDataVO.getDatas(); + } + BeanUtilForVCI.copyPropertiesIgnoreCase(codeImprotDataVO, newCodeImprotDataVO); + newCodeImprotDataVO.setDatas(dataLists); + List<CodeImprotDataVO> codeImprotDataVOList = new ArrayList<>(); + codeImprotDataVOList.add(newCodeImprotDataVO); + /***update 鏇存敼鎴愪互瑙勫垯鍒嗙粍*****/ + String codeRuleOid = codeImprotDataVO.getCodeRuleOid(); + log.info(uuid + "-" + codeRuleOid + ":鏉$洰鏁�" + codeImprotDataVOList.size()); + if (codeImprotDataVOList.size() > 0) { + bladeRedis.set(uuid + "-" + codeRuleOid, codeImprotDataVOList); + bladeRedis.expire(uuid + "-" + codeRuleOid, BATCHADD_REDIS_TIME);//redis杩囨湡鏃堕棿 + + } + + /*** String codeClassifyOid=codeImprotDataVO.getCodeClassifyOid(); + + redisService.setCacheList(uuid+"-"+codeClassifyOid,codeImprotDataVOList); + logger.info(uuid+"-"+codeClassifyOid+":鏉$洰鏁�"+codeImprotDataVOList.size()); + redisService.expire(uuid+"-"+codeClassifyOid,BATCHADD_REDIS_TIME);//redis杩囨湡鏃堕棿***/ + }); + } + + /** * 鏁版嵁鐩镐技椤规暟鎹牎楠宺edis缂撳瓨 * @param codeClassifyOid * @param templateVO @@ -1368,7 +5008,7 @@ * @param btmtypeid * @param dataResembleVOS */ - private void bathcResembleQuery(String codeClassifyOid, CodeClassifyTemplateVO templateVO, List<ClientBusinessObject> cboList,Map<String,String>resembleMap,String btmtypeid,List<DataResembleVO> dataResembleVOS){ + private void bathcResembleQuery(String codeClassifyOid, CodeClassifyTemplateVO templateVO, List<ClientBusinessObject> cboList, Map<String, String> resembleMap, String btmtypeid, List<DataResembleVO> dataResembleVOS) { CodeClassifyFullInfoBO fullInfoBO = classifyService.getClassifyFullInfo(codeClassifyOid); Map<String, String> conditionMap = new HashMap<>(); CodeResembleRuleVO resembleRuleVO = Optional.ofNullable(engineService.getUseResembleRule(fullInfoBO, fullInfoBO.getCurrentClassifyVO())).orElseGet(() -> new CodeResembleRuleVO()); @@ -1377,57 +5017,58 @@ if (CollectionUtils.isEmpty(attrVOs)) { return; } - Map<String,CodeImprotResembleVO> codeImprotResembleVOMap=new HashMap<>(); - List<CodeImprotResembleVO> codeImprotResembleVOList=new ArrayList<>(); - Map<String,String> rowIndePathMap=new HashMap<>(); + Map<String, CodeImprotResembleVO> codeImprotResembleVOMap = new HashMap<>(); + List<CodeImprotResembleVO> codeImprotResembleVOList = new ArrayList<>(); + Map<String, String> rowIndePathMap = new HashMap<>(); cboList.stream().forEach(clientBusinessObject -> { - CodeImprotResembleVO codeImprotResembleVO=new CodeImprotResembleVO(); + CodeImprotResembleVO codeImprotResembleVO = new CodeImprotResembleVO(); final String[] path = {""}; - List<String> fieldList=new ArrayList<>(); - List<String> rowIndeList=new ArrayList<>(); + List<String> fieldList = new ArrayList<>(); + List<String> rowIndeList = new ArrayList<>(); String rowIndex = clientBusinessObject.getAttributeValue(IMPORT_ROW_INDEX); attrVOs.forEach((attrId, attrVO) -> { - String value=""; + String value = ""; /*if (VciQueryWrapperForDO.BASIC_FIELD_MAP.containsKey(attrId)) { value = WebUtil.getStringValueFromObject(WebUtil.getValueFromField(WebUtil.getFieldForObject(attrId, orderDTO.getClass()).getName(), orderDTO)); }else {*/ - value= clientBusinessObject.getAttributeValue(attrId); + value = clientBusinessObject.getAttributeValue(attrId); // } fieldList.add(attrId); - value=StringUtils.isBlank(value)?"":value; - path[0] +=value+"#"; + value = StringUtils.isBlank(value) ? "" : value; + path[0] += value + "#"; engineService.wrapperResembleConditionMap(value, resembleRuleVO, attrId, conditionMap); }); - List<Map<String,String>> dataMap=new ArrayList<>(); - if(codeImprotResembleVOMap.containsKey(path[0])) { - codeImprotResembleVO=codeImprotResembleVOMap.get(path[0]); - rowIndeList=codeImprotResembleVO.getRownIndex(); - dataMap= codeImprotResembleVO.getDataList(); + List<Map<String, String>> dataMap = new ArrayList<>(); + if (codeImprotResembleVOMap.containsKey(path[0])) { + codeImprotResembleVO = codeImprotResembleVOMap.get(path[0]); + rowIndeList = codeImprotResembleVO.getRownIndex(); + dataMap = codeImprotResembleVO.getDataList(); resembleMap.put(rowIndex, "瀛樺湪鐩镐技鏁版嵁"); - }else{ + } else { if (!CollectionUtils.isEmpty(conditionMap)) { Map<String, String> andConditionMap = new HashMap<>(); - andConditionMap.put("islastr", "1"); - andConditionMap.put("islastv", "1"); + andConditionMap.put("lastr", "1"); + andConditionMap.put("lastv", "1"); conditionMap.putAll(andConditionMap); PageHelper pageHelper = new PageHelper(-1); pageHelper.addDefaultDesc("id"); CodeTemplateAttrSqlBO sqlBO = engineService.getSqlByTemplateVO(btmtypeid, templateVO, conditionMap, pageHelper); - List<Map<String,String>> dataMapList=commonsMapper.queryByOnlySqlForMap(sqlBO.getSqlUnPage()); - List<ClientBusinessObject> resembleCboList= ChangeMapTOClientBusinessObjects(dataMapList); - if(!CollectionUtils.isEmpty(resembleCboList)) { + List<Map<String, String>> dataMapList = commonsMapper.queryByOnlySqlForMap(sqlBO.getSqlUnPage()); + DefaultAttrAssimtUtil.mapToLowerCase(dataMapList, true); + List<ClientBusinessObject> resembleCboList = ChangeMapTOClientBusinessObjects(dataMapList); + if (!CollectionUtils.isEmpty(resembleCboList)) { List<Map<String, String>> finalDataMap = dataMap; - resembleCboList.stream().forEach(cbo->{ - Map<String,String> resembDataMap=new HashMap<>(); - fieldList.stream().forEach(field->{ - String value=cbo.getAttributeValue(field); - value=StringUtils.isBlank(value)?"":value; - resembDataMap.put(field,value); + resembleCboList.stream().forEach(cbo -> { + Map<String, String> resembDataMap = new HashMap<>(); + fieldList.stream().forEach(field -> { + String value = cbo.getAttributeValue(field); + value = StringUtils.isBlank(value) ? "" : value; + resembDataMap.put(field, value); }); - resembDataMap.put("codetemplateoid",templateVO.getOid()); - resembDataMap.put("id",StringUtils.isBlank(cbo.getAttributeValue("id"))?"":cbo.getAttributeValue("id")); - resembDataMap.put("rowIndex",""); - resembDataMap.put("oid",cbo.getOid()); + resembDataMap.put("codetemplateoid", templateVO.getOid()); + resembDataMap.put("id", StringUtils.isBlank(cbo.getAttributeValue("id")) ? "" : cbo.getAttributeValue("id")); + resembDataMap.put("rowIndex", ""); + resembDataMap.put("oid", cbo.getOid()); finalDataMap.add(resembDataMap); }); resembleMap.put(rowIndex, "瀛樺湪鐩镐技鏁版嵁"); @@ -1435,36 +5076,36 @@ } } } - rowIndePathMap.put(rowIndex,path[0]); + rowIndePathMap.put(rowIndex, path[0]); rowIndeList.add(rowIndex); codeImprotResembleVO.setPath(path[0]); codeImprotResembleVO.setRownIndex(rowIndeList); codeImprotResembleVO.setConditionMap(conditionMap); codeImprotResembleVO.setFields(fieldList); codeImprotResembleVO.setDataList(dataMap); - codeImprotResembleVOMap.put(path[0],codeImprotResembleVO); + codeImprotResembleVOMap.put(path[0], codeImprotResembleVO); }); Map<String, ClientBusinessObject> cboMap = cboList.stream().filter(cbo -> cbo != null).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getAttributeValue((IMPORT_ROW_INDEX)), t -> t)); - if(!CollectionUtils.isEmpty(rowIndePathMap)){ + if (!CollectionUtils.isEmpty(rowIndePathMap)) { rowIndePathMap.forEach((rowIndex, path) -> { - if(codeImprotResembleVOMap.containsKey(path)){ - CodeImprotResembleVO codeImprotResembleVO= codeImprotResembleVOMap.get(path); - List<String> fieldList=codeImprotResembleVO.getFields(); - List<String> rownIndexList= codeImprotResembleVO.getRownIndex(); + if (codeImprotResembleVOMap.containsKey(path)) { + CodeImprotResembleVO codeImprotResembleVO = codeImprotResembleVOMap.get(path); + List<String> fieldList = codeImprotResembleVO.getFields(); + List<String> rownIndexList = codeImprotResembleVO.getRownIndex(); List<String> newRownIndexList = rownIndexList.stream().filter(cbo -> { - return rowIndex!=cbo; + return rowIndex != cbo; }).collect(Collectors.toList()); newRownIndexList.stream().forEach(s -> { resembleMap.put(s, "瀛樺湪鐩镐技鏁版嵁"); }); - List<Map<String, String>>newDataList=new ArrayList<>(); - DataResembleVO dataResembleVO=new DataResembleVO(); + List<Map<String, String>> newDataList = new ArrayList<>(); + DataResembleVO dataResembleVO = new DataResembleVO(); dataResembleVO.setOid(cboMap.get(rowIndex).getOid()); List<ClientBusinessObject> needSaveCboList = cboList.stream().filter(cbo -> { String newRowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX); - return rownIndexList.contains(newRowIndex)&&(!newRowIndex.equalsIgnoreCase(rowIndex)); + return rownIndexList.contains(newRowIndex) && (!newRowIndex.equalsIgnoreCase(rowIndex)); }).collect(Collectors.toList()); - if(!CollectionUtils.isEmpty(needSaveCboList)) { + if (!CollectionUtils.isEmpty(needSaveCboList)) { needSaveCboList.stream().forEach(cbo -> { String newRowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX); Map<String, String> resembDataMap = new HashMap<>(); @@ -1473,14 +5114,14 @@ value = StringUtils.isBlank(value) ? "" : value; resembDataMap.put(field, value); }); - resembDataMap.put("codetemplateoid",templateVO.getOid()); - resembDataMap.put("id",StringUtils.isBlank(cbo.getAttributeValue("id"))?"":cbo.getAttributeValue("id")); + resembDataMap.put("codetemplateoid", templateVO.getOid()); + resembDataMap.put("id", StringUtils.isBlank(cbo.getAttributeValue("id")) ? "" : cbo.getAttributeValue("id")); resembDataMap.put("rowIndex", newRowIndex); - resembDataMap.put("oid",cbo.getOid()); + resembDataMap.put("oid", cbo.getOid()); newDataList.add(resembDataMap); }); } - List<Map<String, String>>dataList=codeImprotResembleVO.getDataList(); + List<Map<String, String>> dataList = codeImprotResembleVO.getDataList(); newDataList.addAll(dataList); dataResembleVO.setDataList(newDataList); dataResembleVOS.add(dataResembleVO); @@ -1497,7 +5138,7 @@ * @param fieldIndexMap * @param iscContain */ - private void createRedisByCodeClassify(String uuid,CodeClassifyTemplateVO templateVOList,SheetDataSet dataSet, Map<Integer/**鍒楀彿**/,String/**瀛楁鐨勫悕绉�**/> fieldIndexMap,boolean iscContain){ + private void createRedisByCodeClassify(String uuid, CodeClassifyTemplateVO templateVOList, SheetDataSet dataSet, Map<Integer/**鍒楀彿**/, String/**瀛楁鐨勫悕绉�**/> fieldIndexMap, boolean iscContain) { List<ColumnVO> columnVOList = new ArrayList<>(); List<String> outNameList = dataSet.getColName(); fieldIndexMap.forEach((integer, s) -> { @@ -1508,47 +5149,50 @@ columnVOS.setTitle(outName); columnVOList.add(columnVOS); }); - CodeImportTemplateVO codeImportTemplateVO=new CodeImportTemplateVO(); + CodeImportTemplateVO codeImportTemplateVO = new CodeImportTemplateVO(); codeImportTemplateVO.setCodeClassifyTemplateVO(templateVOList); codeImportTemplateVO.setCloNamesList(columnVOList); - List<CodeImportTemplateVO> codeImportTemplateVOs= new ArrayList<>(); + List<CodeImportTemplateVO> codeImportTemplateVOs = new ArrayList<>(); codeImportTemplateVOs.add(codeImportTemplateVO); - if(codeImportTemplateVOs.size()>0) { + if (codeImportTemplateVOs.size() > 0) { bladeRedis.set(uuid, codeImportTemplateVOs); bladeRedis.expire(uuid, BATCHADD_REDIS_TIME);//redis杩囨湡鏃堕棿 } } + /** * 鎷疯礉涓氬姟绫诲瀷鍒癿ap + * * @param cbo 涓氬姟鏁版嵁 * @param map map */ - public static void copyValueToMapFromCbos(ClientBusinessObject cbo,Map<String,String> map){ - if(cbo!=null){ - copyValueToMapFromBos(cbo,map); + public static void copyValueToMapFromCbos(ClientBusinessObject cbo, Map<String, String> map) { + if (cbo != null) { + copyValueToMapFromBos(cbo, map); } } /** * 鎷疯礉涓氬姟绫诲瀷鍒癿ap - * @param bo 涓氬姟鏁版嵁 + * + * @param bo 涓氬姟鏁版嵁 * @param map map */ - public static void copyValueToMapFromBos(ClientBusinessObject bo,Map<String,String> map){ - if(bo!=null ){ + public static void copyValueToMapFromBos(ClientBusinessObject bo, Map<String, String> map) { + if (bo != null) { //鍏堟妸鎵�鏈夌殑瀛楁鏄犲皠鎵惧埌 AttributeValue[] newAList = bo.newAttrValList; AttributeValue[] hisAList = bo.hisAttrValList; - if(hisAList!=null&&hisAList.length>0){// - for(int i = 0 ; i < hisAList.length;i++){ + if (hisAList != null && hisAList.length > 0) {// + for (int i = 0; i < hisAList.length; i++) { AttributeValue av = hisAList[i]; String attrName = av.attrName.toLowerCase(); map.put(attrName, av.attrVal); } } - if(newAList!=null&&newAList.length>0){//NEW鐨勪紭鍏堢骇楂樹簺 - for(int i = 0 ; i < newAList.length;i++){ + if (newAList != null && newAList.length > 0) {//NEW鐨勪紭鍏堢骇楂樹簺 + for (int i = 0; i < newAList.length; i++) { AttributeValue av = newAList[i]; String attrName = av.attrName.toLowerCase(); map.put(attrName, av.attrVal); @@ -1556,4 +5200,524 @@ } } } + + /*** + * 鐢宠闆嗗洟缂栫爜 + * @param idList + * @param btmName + */ + public void sendApplyGroupcode(List<String> idList, String btmName, String operationType) { + String oids = VciBaseUtil.array2String(idList.toArray(new String[]{})); + if (operationType.equals(sysIntegrationPushTypeEnum.ACCPET_APPCODE.getValue())) { + mdmInterJtClient.applyGroupCode(oids, btmName); + } else if (operationType.equals(sysIntegrationPushTypeEnum.ACCPET_EDITCODE)) { + mdmInterJtClient.receiveEditApply(oids, btmName); + } + } + + /*** + * @param codeClassifyOid + * @return + */ + @Override + public String exportGroupCodeExcel(String codeClassifyOid) throws VciBaseException { + VciBaseUtil.alertNotNull(codeClassifyOid, "涓婚搴撳垎绫荤殑涓婚敭"); + CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(codeClassifyOid); + CodeClassifyVO codeClassifyVO = classifyFullInfo.getCurrentClassifyVO(); + //鑾峰彇鏈�鏂扮殑妯℃澘 + CodeClassifyTemplateVO templateVO = engineService.getUsedTemplateByClassifyOid(codeClassifyOid); + LinkedList<String> colName = new LinkedList<>();//鍒楀ご + LinkedList<String> fieldList = new LinkedList<>();//鍒楀瓧娈� + + ExecGroupCodePortDataDTO execGroupCodePortDataDTO = new ExecGroupCodePortDataDTO(); + createExportGroupCodeMapConfig(templateVO, execGroupCodePortDataDTO);//缁勭粐鏁版嵁 + if (CollectionUtils.isEmpty(execGroupCodePortDataDTO.getCodeAttrMapGroupAttrDTOS())) { + throw new VciBaseException("闆嗗洟灞炴�ф槧灏勬湭閰嶇疆"); + } + fieldList = execGroupCodePortDataDTO.getFieldList(); + List<Map<String, String>> dataList = new ArrayList<>(); + getDatas(classifyFullInfo, templateVO, fieldList, dataList, null); + execGroupCodePortDataDTO.setDataList(dataList);//鏀炬暟鎹� + execGroupCodePortDataDTO.setSheetName(codeClassifyVO.getName() + "闆嗗洟鐮佸鍏ユā鏉�"); + String tempFolder = LocalFileUtil.getDefaultTempFolder(); + String excelName = tempFolder + File.separator + + classifyFullInfo.getCurrentClassifyVO().getId() + "_" + classifyFullInfo.getCurrentClassifyVO().getName() + "_闆嗗洟鐮佸鍑烘ā鏉�.xls"; + try { + new File(excelName).createNewFile(); + } catch (Throwable e) { + throw new VciBaseException(LangBaseUtil.getErrorMsg(e), new String[]{excelName}, e); + } + LinkedList<String> finalFieldList = fieldList; + Map<String, CodeClassifyTemplateAttrVO> attrVOMap = templateVO.getAttributes().stream().filter(s -> finalFieldList.contains(s.getId().toLowerCase(Locale.ROOT))).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t)); + List<WriteExcelData> excelDataList = new ArrayList<>(); + Workbook workbook = new HSSFWorkbook(); + List<CodeAndGroupCodeAttrMappingDTO> codeAndGroupCodeAttrMappingDTOList = execGroupCodePortDataDTO.getCodeAttrMapGroupAttrDTOS(); + Map<String, CodeAndGroupCodeAttrMappingDTO> jAttrVOMap = codeAndGroupCodeAttrMappingDTOList.stream().filter(s -> finalFieldList.contains(s.getTargetAttrKey().toLowerCase(Locale.ROOT))).collect(Collectors.toMap(s -> s.getTargetAttrKey().toLowerCase(Locale.ROOT), t -> t)); + WriteExcelData codeExcelData = new WriteExcelData(0, 0, "浼佷笟缂栫爜"); + WriteExcelData groupExcelData = new WriteExcelData(0, 1, "闆嗗洟鐮�"); + excelDataList.add(codeExcelData); + excelDataList.add(groupExcelData); + for (int i = 0; i < fieldList.size(); i++) { + String attrId = fieldList.get(i); + if (attrId.equals(CODE_FIELD) || attrId.equals(CODE_GROUP_FIELD)) { + continue; + } + if (attrVOMap.containsKey(attrId)) { + CodeClassifyTemplateAttrVO attrVO = attrVOMap.get(attrId); + //Object text = attrVO.getName(); + CodeAndGroupCodeAttrMappingDTO codeAttrMappingDTO = jAttrVOMap.get(attrId); + Object text = codeAttrMappingDTO.getSourceAttrName(); + text = exportKeyAndRequired(workbook, attrVO, text); + WriteExcelData excelData = new WriteExcelData(0, i, text); + if (text instanceof RichTextString) { + excelData.setFontColor(String.valueOf(HSSFColor.HSSFColorPredefined.RED.getIndex())); + } + excelDataList.add(excelData); + } + } + final Integer[] rowIndex = {0}; + dataList.stream().forEach(data -> { + rowIndex[0]++; + String id = data.getOrDefault("id", ""); + excelDataList.add(new WriteExcelData(rowIndex[0], 0, id)); + String groupCode = data.getOrDefault("groupcode", ""); + excelDataList.add(new WriteExcelData(rowIndex[0], 1, groupCode)); + List<String> newFieldList = finalFieldList.stream().filter(e -> !e.equals("id") && !e.equals("groupcode")).collect(Collectors.toList()); + + for (int i = 0; i < newFieldList.size(); i++) { + String attrId = newFieldList.get(i).toLowerCase(Locale.ROOT); + if (attrId.equals("id")) { + + } else if (attrId.equals("groupcode")) { + + } else { + if (attrVOMap.containsKey(attrId)) { + CodeClassifyTemplateAttrVO attrVO = attrVOMap.get(attrId); + if (StringUtils.isNotBlank(attrVO.getEnumId()) || StringUtils.isNotBlank(attrVO.getEnumString())) { + attrId = attrId + "Text"; + } + if (StringUtils.isNotBlank(attrVO.getReferBtmId()) || StringUtils.isNotBlank(attrVO.getReferConfig())) { + attrId = attrId + "name"; + } + if (VciQueryWrapperForDO.LC_STATUS_FIELD.equalsIgnoreCase(attrId)) { + attrId = VciQueryWrapperForDO.LC_STATUS_FIELD_TEXT.toLowerCase(Locale.ROOT); + } + excelDataList.add(new WriteExcelData(rowIndex[0], i + 2, data.getOrDefault(attrId, ""))); + } + } + } + }); + WriteExcelOption excelOption = new WriteExcelOption(); + excelOption.addSheetDataList(execGroupCodePortDataDTO.getSheetName(), excelDataList); + + //澧炲姞妯℃澘鐨勪俊鎭鍏� + LinkedList<WriteExcelData> tempEDList = new LinkedList<>(); + tempEDList.add(new WriteExcelData(0, 0, "妯℃澘涓婚敭")); + tempEDList.add(new WriteExcelData(0, 1, "妯℃澘浠e彿")); + tempEDList.add(new WriteExcelData(0, 2, "妯℃澘鍚嶇О")); + tempEDList.add(new WriteExcelData(1, 0, templateVO.getOid())); + tempEDList.add(new WriteExcelData(1, 1, templateVO.getId())); + tempEDList.add(new WriteExcelData(1, 2, templateVO.getName())); + excelOption.addSheetDataList("妯℃澘淇℃伅銆愯鍕垮垹闄ゆ垨绉诲姩銆�", tempEDList); + ExcelUtil.writeDataToFile(excelName, excelOption); + log.info("鏂囦欢璺緞" + excelName); + return excelName; + } + + /*** + * 瀵煎叆闆嗗洟鐮� + * @param codeClassifyOid + * @param file + * @return + */ + @Override + @Transactional(rollbackFor = Exception.class) + public String importGroupCode(String codeClassifyOid, File file) throws Throwable { + VciBaseUtil.alertNotNull(codeClassifyOid, "鍒嗙被鐨勪富閿�"); + ReadExcelOption reo = new ReadExcelOption(); + reo.setReadAllSheet(true); + List<SheetDataSet> sheetDataSetList = ExcelUtil.readDataObjectFromExcel(file, null, reo); + + if (sheetDataSetList.size() > LIMIT + 1) { + throw new ServiceException("涓轰簡淇濊瘉绯荤粺鐨勭ǔ瀹氭�э紝璇蜂竴娆′笉瑕佸鍏ヨ秴杩�1涓囨潯鐨勬暟鎹�"); + } + CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(codeClassifyOid); + //鑾峰彇鏈�鏂扮殑妯℃澘 + CodeClassifyTemplateVO templateVO = engineService.getUsedTemplateByClassifyOid(codeClassifyOid); //闄ゅ幓榛樿鐨勫睘鎬�.杩樻湁鍙湁琛ㄥ崟鏄剧ず鐨勫瓧娈垫墠瀵煎叆 + List<CodeClassifyTemplateAttrVO> attrVOS = templateVO.getAttributes().stream().filter(s -> !DEFAULT_SYNC_ATTR_LIST.contains(s.getId()) && + ((Func.isNotEmpty(s.getClassifyInvokeAttr()) || Func.isNotEmpty(s.getClassifyInvokeAttrName())) || VciBaseUtil.getBoolean(s.getFormDisplayFlag())) + ).collect(Collectors.toList()); + ExecGroupCodePortDataDTO execGroupCodePortDataDTO = new ExecGroupCodePortDataDTO(); + createExportGroupCodeMapConfig(templateVO, execGroupCodePortDataDTO);//缁勭粐鏁版嵁 + List<CodeAndGroupCodeAttrMappingDTO> codeAttrMapGroupAttrDTOS = execGroupCodePortDataDTO.getCodeAttrMapGroupAttrDTOS(); + if (CollectionUtils.isEmpty(codeAttrMapGroupAttrDTOS)) { + throw new ServiceException("闆嗗洟灞炴�ф槧灏勬湭閰嶇疆"); + } + Map<String, CodeAndGroupCodeAttrMappingDTO> codeSystemObjectMap = codeAttrMapGroupAttrDTOS.stream().filter(codeAttrMappingDTO -> codeAttrMappingDTO != null && StringUtils.isNotBlank(codeAttrMappingDTO.getSourceAttrName())).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getSourceAttrName(), t -> t)); + SheetDataSet dataSet = sheetDataSetList.get(0); + List<String> titleRowData = dataSet.getColName(); + Map<Integer/**鍒楀彿**/, String/**瀛楁鐨勫悕绉�**/> fieldIndexMap = new HashMap<>(); + getGroupCodeFieldIndexMap(titleRowData, codeAttrMapGroupAttrDTOS, 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)){ + String message=unExistAttrVOs.stream().map(CodeClassifyTemplateAttrVO::getName).collect(Collectors.joining(SERIAL_UNIT_SPACE)); + throw new VciBaseException("銆�" + message + "銆戣繖浜涘睘鎬у湪excel涓病鏈夋壘鍒�"); + }**/ + List<ClientBusinessObject> cboList = new ArrayList<>(); + List<SheetRowData> rowDataList = dataSet.getRowData(); + + getExportGroupCodeDatas(fieldIndexMap, rowDataList, cboList);//鏋勫缓鏁版嵁瀵硅薄 + + List<String> codeList = cboList.stream().map(ClientBusinessObject::getId).collect(Collectors.toList()); + List<Map<String, String>> dataList = new ArrayList<>(); + Map<String, String> errorMap = new ConcurrentHashMap<>(); + batchSwitchCheckExist(errorMap, cboList, classifyFullInfo, templateVO, execGroupCodePortDataDTO, fieldIndexMap); + //鍒ゆ柇蹇呰緭椤� + batchCheckRequiredAttrOnOrder(templateVO, cboList, errorMap); + // //浼樺厛鏍¢獙缂栫爜鏄惁瀛樺湪 + // batchCheckIdExistOnOrder(templateVO, cboList, errorMap); + //boolean + reSwitchBooleanAttrOnOrder(attrVOS, cboList); + + // 鏋氫妇鐨勫唴瀹归渶瑕佹牴鎹悕绉拌浆鎹负鏋氫妇鐨勫�� + batchSwitchEnumAttrOnOrder(attrVOS, cboList, errorMap); + + batchSwitchReferAttrOnOrder(attrVOS, cboList, errorMap); + //6.澶勭悊鍒嗙被娉ㄥ叆 + batchSwitchClassifyAttrOnOrder(attrVOS, cboList, classifyFullInfo, false); + + //璁剧疆榛樿鍊� + batchSwitchAttrDefault(attrVOS, cboList); + + //7.澶勭悊缁勫悎瑙勫垯 + batchSwitchComponentAttrOnOrder(attrVOS, cboList); + //4.鏍¢獙瑙勫垯 + batchCheckVerifyOnOrder(attrVOS, cboList, errorMap); + //6.鏃堕棿鐨勶紝蹇呴』缁熶竴涓簓yyy-MM-dd HH:mm:ss + batchSwitchDateAttrOnOrder(attrVOS, cboList, errorMap); + //3.鍒ゆ柇鍏抽敭灞炴�� + CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, templateVO, cboList, true, errorMap); + Set<String> selfRepeatRowIndexList = keyResultVO.getSelfRepeatRowIndexList(); + Set<String> keyAttrRepeatRowIndexList = keyResultVO.getKeyAttrRepeatRowIndexList(); + if (!CollectionUtils.isEmpty(selfRepeatRowIndexList)) { + selfRepeatRowIndexList.stream().forEach(rowIndex -> { + errorMap.put(rowIndex, errorMap.getOrDefault(rowIndex, "") + String.format(";浼犲叆鐨勬暟鎹腑鍏抽敭灞炴�ч噸澶峓%s],[%s];", keyResultVO.getKeyAttrRuleInfo(), keyResultVO.getSynonymRuleInfo())); + // errorMap.put(rowIndex, errorMap.getOrDefault(rowIndex, "") + ";鍦ㄥ綋鍓峞xcel鏂囦欢涓叧閿睘鎬ч噸澶�"); + }); + } + if (!CollectionUtils.isEmpty(keyAttrRepeatRowIndexList)) { + keyAttrRepeatRowIndexList.stream().forEach(rowIndex -> { + errorMap.put(rowIndex, errorMap.getOrDefault(rowIndex, "") + String.format("鍏抽敭灞炴�т笌绯荤粺涓殑閲嶅[%s],[%s];", keyResultVO.getKeyAttrRuleInfo(), keyResultVO.getSynonymRuleInfo())); + // errorMap.put(rowIndex, "鍏抽敭灞炴�т笌绯荤粺涓殑閲嶅;" + errorMap.getOrDefault(rowIndex, "")); + }); + } + Map<String, List<WriteExcelData>> shetNameMap = new HashMap<>(); + createWriteExcelData(rowDataList, errorMap, new ArrayList<>(), titleRowData, shetNameMap, templateVO); + String excelFileName = ""; + if (errorMap.size() == 0) { + try { + String btmTypeId = classifyFullInfo.getTopClassifyVO().getBtmTypeId(); + List<BaseModel> oldCbos = execGroupCodePortDataDTO.getOldList(); + List<BaseModel> newCbos = new ArrayList<>(); + // 淇敼鐗堟鍙� + engineService.updateBatchByBaseModel(btmTypeId, oldCbos); + List<CodeAllCode> codeAllCodeList = new ArrayList<>(); + final BladeUser user = AuthUtil.getUser(); + cboList.stream().forEach(clientBusinessObject -> { + BaseModel newBaseModel = new BaseModel(); + DefaultAttrAssimtUtil.copplyDefaultAttrAssimt(clientBusinessObject.getData(), newBaseModel, false, user); + newCbos.add(newBaseModel); + }); + // 鎻掑叆鏂扮殑鏁版嵁 + engineService.insertBatchByType(btmTypeId, newCbos); + codeAllCodeService.saveOrUpdateBatch(execGroupCodePortDataDTO.getCodeAllCodeList()); + engineService.batchSaveSelectChar(templateVO, newCbos); + // 璁板綍鏁版嵁鏇存敼鏃ュ織 + saveLogUtil.operateLog("鏁版嵁鏇存敼", false, StringUtil.format("{}\n淇敼涓�:\n{}", JSON.toJSONString(oldCbos), JSON.toJSONString(newCbos))); + } catch (Exception vciError) { + // 璁板綍鏁版嵁鏇存敼鎶ラ敊鏃剁殑鏃ュ織 + saveLogUtil.operateLog("鏁版嵁鏇存敼", true, vciError.toString()); + throw new VciBaseException("鏁版嵁鏇存敼淇濆瓨鍑洪敊浜�", new String[0], vciError); + } + } else { + excelFileName = LocalFileUtil.getDefaultTempFolder() + File.separator + "閿欒淇℃伅.xls"; + WriteExcelOption eo = new WriteExcelOption(); + shetNameMap.forEach((shetName, errorDataList) -> { + eo.addSheetDataList(shetName, errorDataList); + }); + try { + new File(excelFileName).createNewFile(); + } catch (IOException e) { + throw new VciBaseException(LangBaseUtil.getErrorMsg(e)); + } + ExcelUtil.writeDataToFile(excelFileName, eo); + } + return excelFileName; + } + + public void batchSwitchCheckExist(Map<String, String> errorMap, List<ClientBusinessObject> cboList, CodeClassifyFullInfoBO classifyFullInfo, CodeClassifyTemplateVO templateVO, ExecGroupCodePortDataDTO execGroupCodePortDataDTO, Map<Integer/**鍒楀彿**/, String/**瀛楁鐨勫悕绉�**/> fieldIndexMap) { + List<BaseModel> oldBaseModelList = new ArrayList<>(); + List<CodeAllCode> codeAllCodeList = new ArrayList<>(); + final BladeUser user = AuthUtil.getUser(); + cboList.stream().forEach(clientBusinessObject -> { + String code = clientBusinessObject.getId(); + String rowIndex = clientBusinessObject.getAttributeValue(IMPORT_ROW_INDEX); + List<Map<String, String>> dataList = new ArrayList<>(); + List<String> fieldList = execGroupCodePortDataDTO.getFieldList(); + getDatas(classifyFullInfo, templateVO, execGroupCodePortDataDTO.getFieldList(), dataList, Arrays.asList(code)); + DefaultAttrAssimtUtil.mapToLowerCase(dataList, true); + if (!CollectionUtils.isEmpty(dataList)) { + Map<String, String> newDataMap = new HashMap<>();//灏嗘柊瀵硅薄灞炴�ф殏鏃跺瓨鍌ㄥ湪Map<> + newDataMap.putAll(clientBusinessObject.getData()); + Map<String, String> dataMap = dataList.get(0); + BaseModel oldBaseModel = new BaseModel(); + DefaultAttrAssimtUtil.copplyDefaultAttrAssimt(dataMap, oldBaseModel, false, user); + String oldOid = oldBaseModel.getOid(); + + clientBusinessObject.setCopyFromVersion(oldOid); + clientBusinessObject.setAttributeValueWithNoCheck("copyfromversion", oldOid); + String oid = VciBaseUtil.getPk(); + clientBusinessObject.setOid(oid); + clientBusinessObject.setAttributeValueWithNoCheck("oid", oid); + clientBusinessObject.setBtmname(oldBaseModel.getBtmname()); + clientBusinessObject.setAttributeValueWithNoCheck("btmname", oldBaseModel.getBtmname()); + clientBusinessObject.setLastR("1"); + clientBusinessObject.setAttributeValueWithNoCheck("lastr", "1"); + clientBusinessObject.setFirstR("1"); + clientBusinessObject.setAttributeValueWithNoCheck("firstr", "1"); + clientBusinessObject.setFirstV("1"); + clientBusinessObject.setAttributeValueWithNoCheck("firstv", "1"); + clientBusinessObject.setLastV("1"); + clientBusinessObject.setAttributeValueWithNoCheck("lastv", "1"); + clientBusinessObject.setRevisionSeq(1); + clientBusinessObject.setAttributeValueWithNoCheck("revisionseq", "1"); + clientBusinessObject.setVersionSeq(1); + clientBusinessObject.setAttributeValueWithNoCheck("versionseq", "1"); + clientBusinessObject.setRevisionRule(oldBaseModel.getRevisionRule()); + clientBusinessObject.setAttributeValueWithNoCheck("revisionrule", oldBaseModel.getRevisionRule()); + clientBusinessObject.setVersionRule(oldBaseModel.getRevisionRule()); + clientBusinessObject.setAttributeValueWithNoCheck("versionrule", oldBaseModel.getVersionRule()); + clientBusinessObject.setVersionValue(oldBaseModel.getVersionValue()); + clientBusinessObject.setAttributeValueWithNoCheck("versionvalue", oldBaseModel.getVersionValue()); + clientBusinessObject.setLctid(oldBaseModel.getLctid()); + clientBusinessObject.setAttributeValueWithNoCheck("lctid", oldBaseModel.getLctid()); + clientBusinessObject.setId(oldBaseModel.getId()); + clientBusinessObject.setAttributeValueWithNoCheck("id", oldBaseModel.getId()); + clientBusinessObject.setName(oldBaseModel.getName()); + clientBusinessObject.setAttributeValueWithNoCheck("name", oldBaseModel.getName()); + clientBusinessObject.setLcStatus(CodeDefaultLC.RELEASED.getValue()); + clientBusinessObject.setAttributeValueWithNoCheck("lcstatus", CodeDefaultLC.RELEASED.getValue()); + clientBusinessObject.setDescription("瀵煎叆闆嗗洟鐮�"); + clientBusinessObject.setAttributeValueWithNoCheck("description", "瀵煎叆闆嗗洟鐮�"); + clientBusinessObject.setOwner("1"); + clientBusinessObject.setAttributeValueWithNoCheck("owner", "1"); + clientBusinessObject.setTenantId(AuthUtil.getTenantId()); + clientBusinessObject.setAttributeValueWithNoCheck("tenant_id", AuthUtil.getTenantId()); + clientBusinessObject.setCreator(oldBaseModel.getCreator()); + clientBusinessObject.setAttributeValueWithNoCheck("creator", oldBaseModel.getCreator()); + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + clientBusinessObject.setCreateTime(oldBaseModel.getCreateTime()); + clientBusinessObject.setAttributeValueWithNoCheck("createtime", formatter.format(oldBaseModel.getCreateTime())); + clientBusinessObject.setLastModifier(AuthUtil.getUserAccount()); + clientBusinessObject.setAttributeValueWithNoCheck("lastmodifier", AuthUtil.getUserAccount()); + clientBusinessObject.setCreateTime(new Date()); + clientBusinessObject.setAttributeValueWithNoCheck("lastmodifytime", formatter.format(new Date())); + clientBusinessObject.setRevisionValue(String.valueOf(Integer.parseInt(oldBaseModel.getRevisionValue()) + 1)); + clientBusinessObject.setRevisionOid(oldBaseModel.getRevisionOid()); + clientBusinessObject.setAttributeValueWithNoCheck("revisionoid", oldBaseModel.getRevisionOid()); + clientBusinessObject.setAttributeValueWithNoCheck("revisionvalue", String.valueOf(Integer.parseInt(oldBaseModel.getRevisionValue()) + 1)); + + clientBusinessObject.setNameOid(oldBaseModel.getNameOid()); + clientBusinessObject.setAttributeValueWithNoCheck("nameoid", oldBaseModel.getNameOid()); + + clientBusinessObject.setAttributeValueWithNoCheck(CODE_CLASSIFY_OID_FIELD, oldBaseModel.getData().getOrDefault(CODE_CLASSIFY_OID_FIELD, "")); + clientBusinessObject.setAttributeValueWithNoCheck(CODE_FULL_PATH_FILED, oldBaseModel.getData().getOrDefault(CODE_FULL_PATH_FILED, "")); + clientBusinessObject.setAttributeValueWithNoCheck(CODE_TEMPLATE_OID_FIELD, oldBaseModel.getData().getOrDefault(CODE_TEMPLATE_OID_FIELD, "")); + clientBusinessObject.setTs(new Date()); + clientBusinessObject.setAttributeValueWithNoCheck("ts", formatter.format(new Date())); + oldBaseModel.setLastV("0"); + oldBaseModel.getData().put("lastv", "0"); + oldBaseModelList.add(oldBaseModel); + List<CodeAllCode> oldCodeAllCodeList = codeAllCodeService.selectByWrapper(Wrappers.<CodeAllCode>query().lambda().eq(CodeAllCode::getId, code)); + CodeAllCode codeAllCode = new CodeAllCode(); + if (!CollectionUtils.isEmpty(oldCodeAllCodeList)) { + codeAllCode = oldCodeAllCodeList.get(0); + codeAllCode.setId(code); + codeAllCode.setLcStatus(CodeDefaultLC.RELEASED.getValue()); + codeAllCode.setCreateCodeOid(clientBusinessObject.getOid()); + codeAllCode.setCreateCodeBtm(clientBusinessObject.getBtmname()); + codeAllCode.setLastModifyTime(new Date()); + codeAllCode.setLastModifier(AuthUtil.getUserAccount()); + codeAllCodeList.add(codeAllCode); + if (!oldBaseModel.getLcStatus().equals(CodeDefaultLC.RELEASED.getValue()) || !codeAllCode.getLcStatus().equals(CodeDefaultLC.RELEASED.getValue())) { + errorMap.put(rowIndex, "绗�" + rowIndex + "琛岋紝鍦ㄧ郴缁熶腑鏁版嵁涓嶆槸鍙戝竷鐘舵��"); + } + } else { + errorMap.put(rowIndex, "绗�" + rowIndex + "琛岋紝鍦ㄧ郴缁熶腑鏈煡璇㈠埌鐩稿簲鐨勭爜鍊兼暟鎹�"); + } + //闄ゅ幓榛樿鐨勫睘鎬�.杩樻湁鍙湁琛ㄥ崟鏄剧ず鐨勫瓧娈垫墠瀵煎叆 + List<CodeClassifyTemplateAttrVO> attrVOS = templateVO.getAttributes().stream().filter(s -> !fieldIndexMap.containsValue(s.getId()) && + ((Func.isNotEmpty(s.getClassifyInvokeAttr()) || Func.isNotEmpty(s.getClassifyInvokeAttrName())) || VciBaseUtil.getBoolean(s.getFormDisplayFlag())) + ).collect(Collectors.toList()); + attrVOS.stream().forEach(codeClassifyTemplateAttrVO -> {//灏嗕笉闇�瑕佹洿鏀圭殑榛樿瀛楁鎴栬�呬笉鏇存敼鐨勫睘鎬у鍒跺埌鏂扮殑鐗堟湰涓� + String arrtibuteKey = codeClassifyTemplateAttrVO.getId(); + Map<String, String> attrDataMap = oldBaseModel.getData(); + if (attrDataMap.containsKey(arrtibuteKey)) { + String arrtibuteValue = attrDataMap.get(arrtibuteKey); + clientBusinessObject.setAttributeValueWithNoCheck(arrtibuteKey, arrtibuteValue); + } + }); + } else { + errorMap.put(rowIndex, "绗�" + rowIndex + "琛岋紝鍦ㄧ郴缁熶腑鏈煡璇㈠埌鐩稿簲鐨勬渶鏂扮増鏁版嵁"); + } + }); + execGroupCodePortDataDTO.setOldList(oldBaseModelList); + execGroupCodePortDataDTO.setCodeAllCodeList(codeAllCodeList); + } + + /** + * @param fieldIndexMap + * @param rowDataList + * @param cboList + */ + private void getExportGroupCodeDatas(Map<Integer, String> fieldIndexMap, List<SheetRowData> rowDataList, List<ClientBusinessObject> cboList) { + rowDataList.stream().forEach(sheetRowData -> { + String rowIndex = sheetRowData.getRowIndex(); + ClientBusinessObject cbo = new ClientBusinessObject(); + cbo.setAttributeValue(IMPORT_ROW_INDEX, rowIndex); + sheetRowData.getData().forEach((index, value) -> { + String field = fieldIndexMap.get(index); + if (StringUtils.isBlank(field)) { + throw new VciBaseException("绗�" + (index + 1) + "鍒楃殑鏍囬鍦ㄧ郴缁熶腑涓嶅瓨鍦�"); + } + try { + cbo.setAttributeValueWithNoCheck(field, value); + if (WebUtil.isDefaultField(field)) { + WebUtil.setValueToField(field, cbo, value); + } + } catch (VciBaseException e) { + log.error("璁剧疆灞炴�х殑鍊奸敊璇�", e); + } + }); + cboList.add(cbo); + }); + } + + /*** + * 闆嗗洟瀵煎嚭妯℃澘灞炴�ф槧灏勪俊鎭幏鍙� + * @param templateVO + * @param execGroupCodePortDataDTO + */ + private void createExportGroupCodeMapConfig(CodeClassifyTemplateVO templateVO, ExecGroupCodePortDataDTO execGroupCodePortDataDTO) { + String classOid = templateVO.getCodeclassifyoid(); + String templateOid = templateVO.getOid(); + R r = mdmInterJtClient.list_mapping(classOid); + if (r.isSuccess()) { + List<DockingPreAttrMappingVO> dockingPreAttrMappingVOList = (List<DockingPreAttrMappingVO>) r.getData(); + List<CodeAndGroupCodeAttrMappingDTO> codeAttrMapGroupAttrDTOS = new ArrayList<>(); + LinkedList<String> fieldList = new LinkedList<>(); + LinkedList<String> colNameList = new LinkedList<>(); + dockingPreAttrMappingVOList.stream().forEach(dockingPreAttrMappingVO -> { + CodeAndGroupCodeAttrMappingDTO codeAndGroupCodeAttrMappingDTO = new CodeAndGroupCodeAttrMappingDTO(); + // TODO:2024/4/16鏀规垚鐢╧ey鍊煎垽鏂� + if (StringUtils.isNotBlank(dockingPreAttrMappingVO.getTargetAttrKey())) { + codeAndGroupCodeAttrMappingDTO.setDefaultValue(dockingPreAttrMappingVO.getDefaultValue()); + codeAndGroupCodeAttrMappingDTO.setMetaListId(dockingPreAttrMappingVO.getMetaListId()); + codeAndGroupCodeAttrMappingDTO.setSourceAttrKey(dockingPreAttrMappingVO.getSourceAttrKey()); + codeAndGroupCodeAttrMappingDTO.setSourceAttrName(dockingPreAttrMappingVO.getSourceAttrName()); + codeAndGroupCodeAttrMappingDTO.setTargetAttrId(dockingPreAttrMappingVO.getTargetAttrId()); + codeAndGroupCodeAttrMappingDTO.setTargetAttrKey(dockingPreAttrMappingVO.getTargetAttrKey()); + codeAndGroupCodeAttrMappingDTO.setTargetAttrName(dockingPreAttrMappingVO.getTargetAttrName()); + fieldList.add(dockingPreAttrMappingVO.getTargetAttrKey()); + colNameList.add(dockingPreAttrMappingVO.getSourceAttrName()); + } + codeAttrMapGroupAttrDTOS.add(codeAndGroupCodeAttrMappingDTO); + }); + execGroupCodePortDataDTO.setCodeAttrMapGroupAttrDTOS(codeAttrMapGroupAttrDTOS); + execGroupCodePortDataDTO.setFieldList(fieldList); + execGroupCodePortDataDTO.setColName(colNameList); + } + } + + /*** + * 闆嗗洟鐮佸睘鎬ц浆鎹� + * @param titleRowData + * @param codeAttrMapGroupAttrDTOS + * @param fieldIndexMap + */ + private void getGroupCodeFieldIndexMap(List<String> titleRowData, List<CodeAndGroupCodeAttrMappingDTO> codeAttrMapGroupAttrDTOS, Map<Integer/**鍒楀彿**/, String/**瀛楁鐨勫悕绉�**/> fieldIndexMap) { + Map<String, CodeAndGroupCodeAttrMappingDTO> codeSystemObjectMap = codeAttrMapGroupAttrDTOS.stream().filter(codeAttrMappingDTO -> codeAttrMappingDTO != null && StringUtils.isNotBlank(codeAttrMappingDTO.getSourceAttrName())).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getSourceAttrName(), t -> t)); + for (int i = 0; i < titleRowData.size(); i++) { + String title = titleRowData.get(i); + String id = ""; + if ("闆嗗洟鐮�".equalsIgnoreCase(title)) { + id = CODE_GROUP_FIELD; + } + if ("浼佷笟缂栫爜".equalsIgnoreCase(title)) { + id = CODE_FIELD; + } + if (codeSystemObjectMap.containsKey(title)) { + CodeAndGroupCodeAttrMappingDTO codeAndGroupCodeAttrMappingDTO = codeSystemObjectMap.get(title.replace(KEY_ATTR_CHAR, "").replace(REQUIRED_CHAR, "")); + id = codeAndGroupCodeAttrMappingDTO.getTargetAttrKey(); + } + if (com.alibaba.cloud.commons.lang.StringUtils.isNotBlank(id)) { + fieldIndexMap.put(i, id); + } + } + + + } + + /*** + * 鏌ヨ鏈湁闆嗗洟鐮佺殑鏁版嵁 + * @param classifyFullInfo + * @param templateVO + * @param selectFieldList + * @param dataList + */ + private void getDatas(CodeClassifyFullInfoBO classifyFullInfo, CodeClassifyTemplateVO templateVO, LinkedList<String> selectFieldList, List<Map<String, String>> dataList, List<String> codeList) { + //鍏堟煡璇㈡暟鎹� + String btmTypeId = classifyFullInfo.getTopClassifyVO().getBtmTypeId(); + String codeClassifyOid = classifyFullInfo.getCurrentClassifyVO().getOid(); + Map<String, String> conditionMap = new HashMap<>(); + if (conditionMap == null) { + conditionMap = new HashMap<>(); + } + if (conditionMap.containsKey(VciQueryWrapperForDO.OID_FIELD)) { + conditionMap.put(VciQueryWrapperForDO.OID_FIELD, QueryOptionConstant.IN + "(" + VciBaseUtil.toInSql(conditionMap.get(VciQueryWrapperForDO.OID_FIELD)) + ")"); + } + if (!CollectionUtils.isEmpty(codeList)) { + conditionMap.put("id_in", VciBaseUtil.array2String(codeList.toArray(new String[]{}))); + } + conditionMap.put("codeclsfpath", "*" + codeClassifyOid + "*"); + conditionMap.put("groupcode_null", "null"); + conditionMap.put("lastr", "1"); + conditionMap.put("lastv", "1"); + + R<List<BtmTypeVO>> listR = btmTypeClient.selectByIdCollection(Arrays.asList(btmTypeId)); + String tableName = ""; + if (listR.isSuccess() && !listR.getData().isEmpty()) { + tableName = Func.isNotBlank(listR.getData().get(0).getTableName()) ? listR.getData().get(0).getTableName() : VciBaseUtil.getTableName(btmTypeId); + } else { + tableName = VciBaseUtil.getTableName(btmTypeId); + } + PageHelper pageHelper = new PageHelper(); + pageHelper.setLimit(1000000); + pageHelper.setPage(1); + pageHelper.addDefaultDesc("createTime"); + DataGrid<Map<String, String>> dataGrid = engineService.queryGrid(btmTypeId, templateVO, conditionMap, pageHelper); + //杞崲鏁版嵁 + if (!CollectionUtils.isEmpty(dataGrid.getData())) { + dataList.addAll(dataGrid.getData()); + } + //灏佽鏌ヨ鍑烘潵鐨勬暟鎹� + engineService.wrapperData(dataList, templateVO, selectFieldList, false); + //modify by weidy@2022-09-27 + //鍥犱负鍦ㄥ垪琛ㄥ拰琛ㄥ崟鐨勬樉绀虹殑鏃跺�欙紝鎴戜滑鐨勫紑鍏崇被鍨嬮〉闈細澶勭悊锛屼絾鏄湪瀵煎嚭鐨勬椂鍊欙紝鎴戜滑闇�瑕佸皢true鍜宖alse閮芥浛鎹㈡垚涓枃 + engineService.wrapperBoolean(dataList, templateVO); + log.info("瀵煎嚭妯℃澘鐨勬暟鎹潯鐩暟:" + dataList.size()); + } } -- Gitblit v1.9.3