From f8d4f3017991aba4186fc06c06bd3b68693f89d1 Mon Sep 17 00:00:00 2001 From: xiejun <xj@2023> Date: 星期四, 15 六月 2023 18:22:21 +0800 Subject: [PATCH] 统一接口添加 --- Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/MdmEngineService.java | 17 + Source/UBCS/ubcs-service/ubcs-webservice/src/main/java/com/vci/ubcs/code/webservice/service/impl/GroupMdmInterServiceImpl.java | 4 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java | 885 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeImportResultVO.java | 16 4 files changed, 909 insertions(+), 13 deletions(-) diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeImportResultVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeImportResultVO.java index 93f152f..9592564 100644 --- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeImportResultVO.java +++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeImportResultVO.java @@ -1,6 +1,8 @@ package com.vci.ubcs.code.vo.pagemodel; +import com.vci.ubcs.starter.revision.model.BaseModel; + import java.util.*; /** @@ -28,7 +30,10 @@ * 鍏抽敭灞炴�ф牎楠屽悗锛岄噸澶嶇殑琛屽彿 */ private Set<String> keyAttrRepeatRowIndexList = new HashSet<>(); - + /*** + * 鏍规嵁鍏抽敭鐔熸倝鏌ヨ鐨勯噸澶嶇殑鏁版嵁瀵硅薄 + */ + private Map<String, List<BaseModel>> indexTODataMap=new HashMap<>(); /*** * 鏍规嵁鍏抽敭鐔熸倝鏌ヨ鐨勯噸澶嶇殑鏁版嵁瀵硅薄 */ @@ -89,7 +94,14 @@ this.selfRepeatRowIndexList = selfRepeatRowIndexList; } - /*public Map<String,List<ClientBusinessObject>> getIndexTODataMap() { + public Map<String, List<BaseModel>> getIndexTODataMap() { + return indexTODataMap; + } + + public void setIndexTODataMap(Map<String, List<BaseModel>> indexTODataMap) { + this.indexTODataMap = indexTODataMap; + } + /*public Map<String,List<ClientBusinessObject>> getIndexTODataMap() { return indexTODataMap; } diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/MdmEngineService.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/MdmEngineService.java index 5d9b9f6..7374475 100644 --- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/MdmEngineService.java +++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/MdmEngineService.java @@ -14,6 +14,7 @@ import com.vci.ubcs.starter.revision.model.BaseModel; import com.vci.ubcs.starter.revision.model.TreeQueryObject; import com.vci.ubcs.starter.web.pagemodel.*; +import com.vci.ubcs.starter.web.util.VciQueryWrapperForDO; import org.springblade.core.tool.api.R; import java.beans.IntrospectionException; @@ -411,4 +412,20 @@ * @return 鏍戝舰鐨勬暟鎹� */ List<Tree> referTree(UIFormReferVO referConfigVO, TreeQueryObject queryObject); + + /** + * 鏄惁涓轰慨鏀瑰拷鐣ョ殑灞炴�� + * @param attrName 灞炴�х殑鍚嶅瓧 + * @return true 琛ㄧず搴旇蹇界暐 + */ + default boolean checkUnAttrUnEdit(String attrName){ + return (VciQueryWrapperForDO.OID_FIELD.equalsIgnoreCase(attrName) + ||"ts".equalsIgnoreCase(attrName) + || "lastmodifier".equalsIgnoreCase(attrName) + || "lastmodifytime".equalsIgnoreCase(attrName) + || "createtime".equalsIgnoreCase(attrName) + || "checkintime".equalsIgnoreCase(attrName) + ||"checkouttime".equalsIgnoreCase(attrName)); + } + } 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 cc8e8a7..118c0c2 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 @@ -35,6 +35,7 @@ import com.vci.ubcs.starter.util.MdmBtmTypeConstant; 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; @@ -62,6 +63,7 @@ import javax.annotation.Resource; import java.io.File; import java.io.IOException; +import java.text.MessageFormat; import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.CopyOnWriteArrayList; @@ -1621,7 +1623,7 @@ if(!CollectionUtils.isEmpty(unExistAttrVOs)){ throw new VciBaseException("銆�" + unExistAttrVOs.stream().map(CodeClassifyTemplateAttrVO::getName) + "銆戣繖浜涘睘鎬у湪excel涓病鏈夋壘鍒�"); } - + List<ClientBusinessObject> cboList = new ArrayList<>(); String fullPath = getFullPath(classifyFullInfo); // List<CodeClassifyProcessTempVO> codeClassifyProcessTempVOS=codeClassifyProcessTempService.listProcessTemplate(templateVO.getOid(),"code_cls_flow_use_order"); @@ -1630,19 +1632,765 @@ /** 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.鍒ゆ柇蹇呰緭椤广�傘�傞渶瑕佸叏閮ㄧ殑灞炴�э紝濡傛灉鏄繀杈擄紝浣嗘槸琛ㄥ崟閲岄潰涓嶆樉绀虹殑锛屽彧鑳芥槸鍒嗙被娉ㄥ叆鎴栬�呯粍鍚堣鍒� + batchCheckRequiredAttrOnOrder(templateVO,cboList,errorMap); + + + /** + * 鍏抽敭鐔熸倝閿欒鎻愮ず + */ + Map<String,String> errorKeyMap=new HashMap<>(); + + + //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->{ + /* //浼犲叆鏁版嵁涔嬮棿鍏抽敭灞炴�х殑鏍¢獙 + 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,errorMap.getOrDefault(rowIndex,"") + ";浼犲叆鐨勬暟鎹腑鍏抽敭灞炴�ч噸澶�"); + }); + } + /**** + * 鍏抽敭灞炴�т笌绯荤粺涓噸澶嶇殑鍒ゆ柇 + */ + 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); + */ + errorKeyMap.put(rowIndex,errorMap.getOrDefault(rowIndex,"") + ";鍏抽敭灞炴�т笌绯荤粺涓殑閲嶅" ); + }); + } + //鍒嗙被娉ㄥ叆 + batchSwitchClassifyAttrOnOrder(attrVOS,cboList,classifyFullInfo,false); + //boolean + reSwitchBooleanAttrOnOrder(attrVOS,cboList); + // cboList.stream().forEach(cbo->{ + //4.鏍¢獙瑙勫垯 + batchCheckVerifyOnOrder(attrVOS, cboList,errorMap); + //5.鏍¢獙鏋氫妇鏄惁姝g‘ + batchSwitchEnumAttrOnOrder(attrVOS,cboList,errorMap); + //6.鏃堕棿鏍煎紡鐨勯獙璇� + //6.鏃堕棿鐨勶紝蹇呴』缁熶竴涓簓yyy-MM-dd HH:mm:ss + batchSwitchDateAttrOnOrder(attrVOS,cboList,errorMap); + //7.澶勭悊鍙傜収鐨勬儏鍐� + batchSwitchReferAttrOnOrder(attrVOS,cboList,errorMap); + //鏍¢獙灞炴�ф槸鍚︽纭敊璇俊鎭� + 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 errorid="103"; + String mes=errorMap.get(rowIndex); + XMLResultDataObjectDetailDO resultDataObjectDetailDO=new XMLResultDataObjectDetailDO(); + 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); + 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)) { + BaseModel newCbo= newCboList.get(0); + String lcstatus =newCbo.getLcStatus(); + String newOid =newCbo.getOid(); + Date ts =newCbo.getTs(); + code=newCbo.getId(); + String lastmodifier=newCbo.getLastModifier(); + if (!lcstatus.equals(CodeDefaultLC.RELEASED.getValue())) { + newCbo.setOid(newOid); + newCbo.setLastModifier(lastmodifier); + newCbo.setId(code); + newCbo.setTs(ts); + cbo.setLastModifier(cbo.getLastModifier()); + editBoList.add(newCbo); + } + String mes = errorKeyMap.get(rowIndex); + XMLResultDataObjectDetailDO resultDataObjectDetailDO = new XMLResultDataObjectDetailDO(); + resultDataObjectDetailDO.setCode(code); + resultDataObjectDetailDO.setId(sourceOid); + resultDataObjectDetailDO.setErrorid(errorid); + resultDataObjectDetailDO.setMsg(mes); + resultDataObjectDetailDOs.add(resultDataObjectDetailDO); + } + } + }); + //鍏抽敭鐔熸倝鏇存敼 + if (!CollectionUtils.isEmpty(editBoList)) { + engineService.updateBatchByBaseModel(classifyFullInfo.getTopClassifyVO().getBtmtypeid(),editBoList);//淇濆瓨鏁版嵁 + } + errorMap.putAll(errorKeyMap); + } + } + + // }); + //璁剧疆榛樿鍊� + batchSwitchAttrDefault(attrVOS, cboList); + //鏈�鍚庡紕缁勫悎瑙勫垯 + batchSwitchComponentAttrOnOrder(attrVOS,cboList); + //瑕佹妸浠ヤ笂鐨勯敊璇殑閮芥姏鍑哄悗锛屽啀缁х画澶勭悊鏃堕棿鍜岀粍鍚堣鍒� + 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<>(); + needSaveCboList.stream().forEach(clientBusinessObject -> { + BaseModel baseModel=new BaseModel(); + BeanUtil.convert(clientBusinessObject,baseModel); + baseModel.setData(VciBaseUtil.objectToMapString(clientBusinessObject)); + dataCBOList.add(baseModel); + allNeedSaveCboList.add(baseModel.getOid()); + }); + try { + productCodeService.productCodeAndSaveData(classifyFullInfo, templateVO, ruleVO, orderDTO.getSecDTOList(), dataCBOList); + //濡傛灉鏄紪鐮佺敓鎴愬け璐ワ紝鍒欑洿鎺ュ氨澶辫触浜嗭紝鍏朵粬鐨勫垽鏂嚭鏉ユ湁閿欒鐨勬垜浠兘缁熶竴杩斿洖鍒癳xcel閲岄潰 + engineService.batchSaveSelectChar(templateVO, allNeedSaveCboList); + // if(!isProcess){ + 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("0"); + resultDataObjectDetailDO.setMsg("鐢宠缂栫爜鎴愬姛"); + resultDataObjectDetailDOs.add(resultDataObjectDetailDO); + }); + /* }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); + }); + + }*/ + }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); + }); + + } + } } - + /*** + * 闆嗘垚鎵归噺鍚屾鏇存柊鎺ュ彛 + * @param codeClassifyVO; + * @param dataObjectVO 鏁版嵁淇℃伅 + * @param resultDataObjectDetailDOs 閿欒淇℃伅 + */ @Override public void batchSyncEditDatas(CodeClassifyVO codeClassifyVO, DataObjectVO dataObjectVO, LinkedList<XMLResultDataObjectDetailDO> resultDataObjectDetailDOs) { + 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()) && 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])) + ")"); + R<BtmTypeVO> r= btmTypeClient.getDetail(templateVO.getBtmTypeId()); + BtmTypeVO btmTypeVO =r.getData(); + String tableName=btmTypeVO.getTableName(); + StringBuffer sb=new StringBuffer(); + sb.append(" select * from "); + sb.append(tableName); + sb.append(" where 1=1 "); + sb.append(" id in ("); + sb.append(VciBaseUtil.toInSql(codeDataMap.keySet().toArray(new String[0]))); + sb.append(")"); + List<Map<String,String>> dataMapList=commonsMapper.queryByOnlySqlForMap(sb.toString()); + 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); + // 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<BaseModel> 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 operation=rowData.getOperation(); + if (cbo.getTs().compareTo(orderDTO.getTs())==0?true:false) { + // 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. 鍒ゆ柇蹇呰緭椤� + checkRequiredAttrOnOrder(templateVO, orderDTO, errorMap); + //2.鍏堟敞鍏ワ紝鍐嶇粍鍚堬紝鏈�鍚庢牎楠� + switchClassifyLevelOnOrder(templateVO, classifyFullInfo, orderDTO, errorMap); + //3.澶勭悊缁勫悎瑙勫垯銆傜粍鍚堣鍒欎笉鑳戒娇鐢ㄧ紪鐮佺殑灞炴�э紝鍥犱负缂栫爜鐨勭敓鎴愬彲鑳芥槸闇�瑕佸睘鎬х殑 + switchComponentAttrOnOrder(templateVO, orderDTO); + //4.鏍¢獙瑙勫垯 + checkVerifyOnOrder(templateVO, orderDTO, errorMap); + //5.鍒ゆ柇鍏抽敭灞炴�� + checkKeyAttrOnOrder(classifyFullInfo, templateVO, orderDTO, errorMap); + //6.鏍¢獙鏋氫妇鐨勫唴瀹规槸鍚︽纭� + checkEnumOnOrder(templateVO, orderDTO, errorMap); + //7.澶勭悊鏃堕棿鏍煎紡锛屽湪鏁版嵁搴撻噷闈笉璁烘槸瀛楃涓茶繕鏄棩鏈熸牸寮忥紝閮戒娇鐢ㄧ浉鍚岀殑鏍煎紡瀛樺偍 + switchDateAttrOnOrder(templateVO, orderDTO); + //榛樿鐨勫唴瀹逛笉鑳藉彉锛屾墍浠ュ彧闇�瑕佹嫹璐濊嚜瀹氫箟鐨勭浉鍏冲睘鎬у嵆鍙� + copyValueToCBO(classifyFullInfo, cbo, orderDTO, templateVO, true, errorMap); + //浼佷笟鐮佸拰闆嗗洟鐮佺殑涓嶄慨鏀� + cbo.setDescription(StringUtils.isBlank(orderDTO.getDescription())?"":orderDTO.getDescription()); + cbo.setName(orderDTO.getName()); + try { + cbo.setAttributeValueWithNoCheck("description", orderDTO.getDescription()); + cbo.setAttributeValue("name", orderDTO.getName()); + // if(finalIsProcess){//鍦ㄦ祦绋嬩腑涓嶅厑璁告洿鏀� + // errorMap.put(code,errorMap.getOrDefault(code, errorMap.getOrDefault(code,"")+";鏁版嵁"+code+"鍦ㄦ祦绋嬩腑锛屼笉鍏佽鏇存敼!")); + // }else{ + cbo.setLcStatus(status); + cbo.setAttributeValue("lcstatus",status); + // } + } catch (VciBaseException e) { + e.printStackTrace(); + } + 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 { + Map<String, String> condtionMap = new HashMap<>(); + condtionMap.put("createcodeoid", cbo.getOid()); + 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 = codeAllCodeList.get(0); + log.info("codeCbos code:" + codeCbo.getId()); + codeCbo.setLcStatus(CodeDefaultLC.TASK_BACK.getValue()); + codeAllCodeList.add(codeCbo); + } + deleteList.add(cbo); + }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); + + // } + 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.saveBatch(codeAllCodeList); + commonsMapper.deleteByTaleAndOid("",null); + + // engineService.del(deleteList); + 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)); + 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()); + ketAttrMap.forEach((attrId, attrVO) -> { + String value = getValueFromOrderDTO(orderDTO, attrId); + if (value == null) { + value = ""; + } + engineService.wrapperKeyAttrConditionMap(value, keyRuleVO, attrId, trim, ignoreCase, ignoreWidth, trimAll, conditionMap); + }); + + //娌℃湁闄愬埗鍒嗙被锛屼絾鏄竴涓ā鏉垮彧鍙兘鍦ㄤ竴涓笟鍔$被鍨嬮噷闈紝鎵�浠ョ洿鎺ユ煡璇㈣繖涓笟鍔$被鍨嬪嵆鍙� + + if (!CollectionUtils.isEmpty(conditionMap)) { + final String[] sql = {"select count(*) from " + VciBaseUtil.getTableName(classifyFullInfo.getTopClassifyVO().getBtmtypeid()) + " where 1 = 1 "}; + conditionMap.forEach((key, value) -> { + sql[0] += " and " + key + " = " + value; + }); + if (StringUtils.isNotBlank(orderDTO.getOid())) { + //淇敼鐨勬椂鍊欙紝闇�瑕佹帓闄よ嚜宸� + sql[0] += " and oid != '" + orderDTO.getOid() + "'"; + } else if (StringUtils.isNotBlank(orderDTO.getCopyFromVersion())) { + sql[0] += " and oid != '" + orderDTO.getCopyFromVersion() + "'"; + } + sql[0] += " and islastR = '1' and islastV = '1' "; + if (commonsMapper.queryCountBySql(sql[0]) > 0) { + String ruleInfoMsg = keyRuleVO == null ? "" : "鏌ヨ瑙勫垯锛氬幓闄ょ┖鏍�--{0},蹇界暐澶у皬鍐�--{1},蹇界暐鍏ㄥ崐瑙�--{2},蹇界暐鍏ㄩ儴绌烘牸--{3}"; + String[] objs = new String[]{trim ? "鏄�" : "鍚�", ignoreCase ? "鏄�" : "鍚�", ignoreWidth ? "鏄�" : "鍚�", trimAll ? "鏄�" : "鍚�"}; + String defaultValue=";鏍规嵁鎮ㄥ~鍐欑殑鍏抽敭灞炴�х殑鍐呭锛岀粨鍚堝叧閿睘鎬ф煡璇㈣鍒欙紝鍙戠幇杩欎釜鏁版嵁宸茬粡鍦ㄧ郴缁熶腑瀛樺湪浜嗐�傝淇!銆�"; + 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.EDITING.getValue()); +// } + } else { + cbo.setLcStatus(CodeDefaultLC.EDITING.getValue()); + } + + } + int secret = VciBaseUtil.getInt(cbo.getAttributeValue(SECRET_FIELD)); + /*if (secret == 0 || !secretService.checkDataSecret(secret)) { + 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){ + codeDataMap.keySet().forEach(code->{ + RowDatas rowDatas=codeDataMap.get(code); + Map<String, String> data= rowDatas.getFiledValue(); + CodeOrderDTO orderDTO = new CodeOrderDTO(); + if(codeSystemObjectMap.containsKey(code)){ + ClientBusinessObject sysDataObject= codeSystemObjectMap.get(code); + 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); + }); } /** @@ -1728,7 +2476,118 @@ } }); } + /** + * 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 -> { + 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) ){ + 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 鍒嗙被鐨勫叏閮ㄤ俊鎭� @@ -2428,7 +3287,7 @@ //2.鍒ゆ柇鍏抽敭灞炴�у湪绯荤粺閲屾槸鍚﹂噸澶� //鍥犱负鏁版嵁閲忓緢澶э紝鎵�浠ュ緱鎯冲姙娉曞苟琛� //SessionInfo sessionInfo = VciBaseUtil.getCurrentUserSessionInfo(); - Map<String,List<ClientBusinessObject>> indexTODataMap=new HashMap<>(); + Map<String,List<BaseModel>> indexTODataMap=new HashMap<>(); List<ClientBusinessObject> repeatDataMap = cboList.parallelStream().filter(cbo -> { //姣忚閮藉緱鏌ヨ.濡傛灉鍏朵腑鍑虹幇浜嗛敊璇紝鎴戜滑灏辩洿鎺ユ姏鍑哄紓甯革紝鍏朵綑鐨勬樉绀� //VciBaseUtil.setCurrentUserSessionInfo(sessionInfo); @@ -2446,8 +3305,16 @@ 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); + //List<ClientBusinessObject> newCboList= ChangeMapTOClientBusinessObjects(newDataList); + List<BaseModel> newCboList=new ArrayList<>(); + newDataList.stream().forEach(stringStringMap -> { + BaseModel baseModel=new BaseModel(); + DefaultAttrAssimtUtil.copplyDefaultAttrAssimt(stringStringMap,baseModel); + newCboList.add(baseModel); + }); + if(!CollectionUtils.isEmpty(newCboList)) { + indexTODataMap.put(cbo.getAttributeValue(IMPORT_ROW_INDEX), newCboList); + } } return isKeyCheck; }else{ @@ -2457,7 +3324,7 @@ 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; } diff --git a/Source/UBCS/ubcs-service/ubcs-webservice/src/main/java/com/vci/ubcs/code/webservice/service/impl/GroupMdmInterServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-webservice/src/main/java/com/vci/ubcs/code/webservice/service/impl/GroupMdmInterServiceImpl.java index 0fa9c0d..0424584 100644 --- a/Source/UBCS/ubcs-service/ubcs-webservice/src/main/java/com/vci/ubcs/code/webservice/service/impl/GroupMdmInterServiceImpl.java +++ b/Source/UBCS/ubcs-service/ubcs-webservice/src/main/java/com/vci/ubcs/code/webservice/service/impl/GroupMdmInterServiceImpl.java @@ -198,7 +198,7 @@ } //淇濆瓨琛ㄥ崟鏁版嵁 dockingPreApplyFormService.saveOrUpdateBatch(dockingPreAttrMappings); - mdmEngineClient.insertBatchByType(btmName,updateCbos);//淇濆瓨鏁版嵁 + mdmEngineClient.updateBatchByType(btmName,updateCbos);//淇濆瓨鏁版嵁 } return R.success("鐢宠鎺ュ彛璋冪敤鎴愬姛"); }catch (VciBaseException e){ @@ -312,7 +312,7 @@ } //淇濆瓨琛ㄥ崟鏁版嵁 dockingPreApplyFormService.saveOrUpdateBatch(dockingPreAttrMappings); - mdmEngineClient.insertBatchByType(btmName,updateCbos);//淇濆瓨鏁版嵁 + mdmEngineClient.updateBatchByType(btmName,updateCbos);//淇濆瓨鏁版嵁 } return R.success("鐢宠鎺ュ彛璋冪敤鎴愬姛"); }catch (VciBaseException e){ -- Gitblit v1.9.3