From 3d828ba07224d1935f47cb0c20dcb959281361d6 Mon Sep 17 00:00:00 2001 From: 田源 <lastanimals@163.com> Date: 星期四, 07 十二月 2023 14:06:23 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java | 1219 ++++++++++++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 1,023 insertions(+), 196 deletions(-) diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java index 9396577..e187c23 100644 --- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java +++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java @@ -1,15 +1,19 @@ package com.vci.ubcs.code.service.impl; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.vci.ubcs.code.applyjtcodeservice.vo.BaseModelVO; import com.vci.ubcs.code.bo.CodeClassifyFullInfoBO; import com.vci.ubcs.code.bo.CodeTemplateAttrSqlBO; import com.vci.ubcs.code.constant.FrameWorkDefaultValueConstant; +import com.vci.ubcs.code.dto.CodeBZApplyDTO; import com.vci.ubcs.code.dto.CodeDeleteBatchDTO; import com.vci.ubcs.code.dto.CodeOrderDTO; +import com.vci.ubcs.code.dto.CodeOrderSecDTO; import com.vci.ubcs.code.dto.datapush.BaseModelDTO; import com.vci.ubcs.code.entity.*; import com.vci.ubcs.code.enumpack.*; @@ -20,6 +24,9 @@ import com.vci.ubcs.code.vo.pagemodel.UITableFieldVO; import com.vci.ubcs.code.vo.pagemodel.UITablePageVO; import com.vci.ubcs.code.vo.pagemodel.*; +import com.vci.ubcs.code.wrapper.BaseMdodelWrapper; +import com.vci.ubcs.code.wrapper.CodeAllcodeWrapper; +import com.vci.ubcs.flow.core.dto.FlowStatusDTO; import com.vci.ubcs.flow.core.feign.IMDMIFlowAttrClient; import com.vci.ubcs.flow.core.vo.ProcessStageAttrVO; import com.vci.ubcs.omd.constant.BtmTypeLcStatusConstant; @@ -35,6 +42,9 @@ import com.vci.ubcs.starter.revision.model.TreeQueryObject; import com.vci.ubcs.starter.revision.model.TreeWrapperOptions; import com.vci.ubcs.starter.revision.service.RevisionModelUtil; +import com.vci.ubcs.starter.util.MdmBtmTypeConstant; +import com.vci.ubcs.starter.util.SaveLogUtil; +import com.vci.ubcs.starter.util.SpecialCharacterConverter; import com.vci.ubcs.starter.util.UBCSSqlKeyword; import com.vci.ubcs.starter.web.constant.QueryOptionConstant; import com.vci.ubcs.starter.web.constant.RegExpConstant; @@ -50,18 +60,23 @@ import com.vci.ubcs.system.feign.ISysClient; import com.vci.ubcs.system.user.entity.User; import com.vci.ubcs.system.user.feign.IUserClient; +import io.swagger.models.auth.In; import net.logstash.logback.encoder.org.apache.commons.lang3.StringUtils; import oracle.sql.TIMESTAMP; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springblade.core.cache.utils.CacheUtil; +import org.springblade.core.log.annotation.OperateLog; import org.springblade.core.log.exception.ServiceException; +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.DateUtil; import org.springblade.core.tool.utils.Func; import org.springblade.core.tool.utils.StringPool; +import org.springblade.core.tool.utils.StringUtil; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.cache.Cache; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -77,7 +92,7 @@ import java.time.ZoneId; import java.time.ZonedDateTime; import java.util.*; -import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.*; import java.util.stream.Collectors; import static com.vci.ubcs.code.constant.FrameWorkLangCodeConstant.DATA_OID_NOT_EXIST; @@ -93,12 +108,72 @@ @Service public class MdmEngineServiceImpl implements MdmEngineService { + /** + * 澶氱嚎绋嬫柟寮忔壒閲忔墽琛屽紑鍚嚎绋嬫睜鐨勬�绘暟 + */ + @Value("${batchadd.thread_num:10}") + private Integer THREAD_NUM; + + /** + * 鍗曟sql鐨勬渶澶氬鍏ユ暟閲� + */ + @Value("${batchadd.single_maxnum:200}") + private Integer MAX_IMPORT_NUM; + + /** + * 鏄惁寮�鍚绾跨▼鏂瑰紡瀵煎叆鍘嗗彶鏁版嵁 + */ + @Value("${batchadd.is_thread_import:false}") + private boolean IS_THREAD_IMPORT; + + /*** + * 鎿嶄綔绫诲瀷 + */ + @Value("${bzApply.operationType:operationType}") + private String operationType; + /*** + * 鏄惁绯诲垪 + */ + @Value("${bzApply.isSeries:isSeries}") + private String isSeries; + /*** + *鍙戝竷鏃堕棿 + */ + @Value("${bzApply.releaseTime:releaseTime}") + private String releaseTime; + /*** + * 婧愭爣鍑嗗彿 + */ + @Value("${bzApply.oldCode:oldCode}") + private String oldCode; + + /*** + * 绯诲垪娴佹按 + */ + @Value("${bzApply.seriesFlow:seriesFlow}") + private String seriesFlow; + /*** + * 鏄惁鍙樻洿绯诲垪 + */ + @Value("${bzApply.isEditSeries:isEditSeries}") + private String isEditSeries; + /*** + * 鎺у埗鏄惁鍐欏叆鍊肩殑鐮佹鍚嶇О + */ + @Value("${bzApply.secName:绯诲垪鍙穧") + private String secName; + + /*** + * 鎺у埗鏄惁鍐欏叆鍊肩殑鐮佹鍚嶇О + */ + @Value("${bzApply.yearSecName:骞翠唬鍙穧") + private String yearSecName; /** * 妯℃澘鐨勬湇鍔� */ @Resource - private CodeClstemplateServiceImpl templateService; + private ICodeClstemplateService templateService; /** * 鐢熸垚缂栫爜鐨勬湇鍔� @@ -131,6 +206,11 @@ */ @Resource IEnumClient enumClient; + /** + * 鐗堟湰瑙勫垯鏈嶅姟 + */ + @Resource + private IRevisionRuleClient revisionRuleClient; /** * 鍏紡鐨勬湇鍔� @@ -138,13 +218,11 @@ @Autowired private FormulaServiceImpl formulaService; - /** * 瀵筼md涓彁渚涚殑feign鎺ュ彛杩涜璋冪敤锛屼互鍙婂鐞嗙浉鍏抽�昏緫 */ @Autowired ICodeReferBtmTypeService codeReferBtmTypeService; - /** * 鐩镐技椤规煡璇㈣鍒� @@ -168,20 +246,12 @@ */ @Autowired private IBtmTypeClient btmTypeClient; - /** - * 鐗堟湰瑙勫垯鐨勬湇鍔� - */ - @Resource - private IRevisionRuleClient revisionRuleClient; -// + /** * 閫氱敤鏌ヨ */ @Resource - CommonsMapper commonsMapper; - - @Resource - ICodeBasicSecService codeBasicSecService; + private CommonsMapper commonsMapper; /** * 缂栫爜瑙勫垯鐨勬湇鍔� @@ -283,8 +353,15 @@ */ @Autowired private IMDMIFlowAttrClient imdmiFlowAttrClient; -// @Autowired -// private CodeOsbtmtypeMapper codeOsbtmtypeMapper;---- + + // @Autowired + // private CodeOsbtmtypeMapper codeOsbtmtypeMapper; + + /** + * 鏃ュ織淇濆瓨宸ュ叿绫� + */ + @Autowired + private SaveLogUtil saveLogUtil; /** @@ -347,40 +424,75 @@ @Transactional @Override public void changeStatus(BaseModelDTO baseModelDTO) { - VciBaseUtil.alertNotNull(baseModelDTO, "鏁版嵁淇℃伅", baseModelDTO.getOid(), "涓婚敭", baseModelDTO.getBtmname(), "涓氬姟绫诲瀷", baseModelDTO.getLcStatus(), "鐩爣鐘舵��"); - List<String> oids = VciBaseUtil.str2List(baseModelDTO.getOid()); - List<BaseModel> baseModels = new ArrayList<>(); - baseModels = selectByTypeAndOid(baseModelDTO.getBtmname(), baseModelDTO.getOid()); - if (baseModels.size() == 0) { - throw new VciBaseException("鏈煡璇㈠埌鐩稿叧鏁版嵁銆�"); - } - //杩橀渶瑕佷慨鏀筧llCode鐨勭敓鍛藉懆鏈� - QueryWrapper<CodeAllCode> allCodeWrapper = new QueryWrapper<>(); - allCodeWrapper.eq("createcodebtm", baseModelDTO.getBtmname()); - allCodeWrapper.in("createcodeoid", oids); - List<CodeAllCode> codeCbos = codeAllCodeService.selectByWrapper(allCodeWrapper);// 鍥炴敹闇�瑕佷笟鍔℃暟鎹垹闄� - if (CodeDefaultLC.TASK_BACK.getValue().equals(baseModelDTO.getLcStatus())) { - R<List<BtmTypeVO>> listR = btmTypeClient.selectByIdCollection(Collections.singletonList(baseModelDTO.getBtmname())); - if (!listR.isSuccess() || listR.getData().size() == 0) { - throw new VciBaseException("浼犲叆涓氬姟绫诲瀷鏈煡璇㈠埌鐩稿簲琛ㄥ崟锛岃妫�鏌ワ紒"); - } - // 鐩存帴鍒犻櫎锛屼笉缁欑姸鎬� - commonsMapper.deleteByTaleAndOid(listR.getData().get(0).getTableName(), VciBaseUtil.toInSql(baseModelDTO.getOid())); - // commonsMapper.updateByTaleAndOid(listR.getData().get(0).getTableName(), VciBaseUtil.toInSql(baseModelDTO.getOid()),CodeDefaultLC.TASK_BACK.getValue()); - } else { - for (BaseModel baseModel : baseModels) { - baseModel.setLcStatus(baseModelDTO.getLcStatus()); - } - R r = updateBatchByBaseModel(baseModelDTO.getBtmname(), baseModels); - if(!r.isSuccess()){ - throw new VciBaseException("鏇存柊鏁版嵁鍑洪敊锛岄噸璇曪紒"+r.getMsg()); + try { + VciBaseUtil.alertNotNull(baseModelDTO, "鏁版嵁淇℃伅", baseModelDTO.getOid(), "涓婚敭", baseModelDTO.getBtmname(), "涓氬姟绫诲瀷", baseModelDTO.getLcStatus(), "鐩爣鐘舵��"); + List<String> oids = VciBaseUtil.str2List(baseModelDTO.getOid()); + List<BaseModel> baseModels = new ArrayList<>(); + baseModels = selectByTypeAndOid(baseModelDTO.getBtmname(), baseModelDTO.getOid()); + if (baseModels.size() == 0) { + throw new VciBaseException("鏈煡璇㈠埌鐩稿叧鏁版嵁銆�"); } + //杩橀渶瑕佷慨鏀筧llCode鐨勭敓鍛藉懆鏈� + QueryWrapper<CodeAllCode> allCodeWrapper = new QueryWrapper<>(); + allCodeWrapper.eq("createcodebtm", baseModelDTO.getBtmname()); + allCodeWrapper.in("createcodeoid", oids); + List<CodeAllCode> codeCbos = codeAllCodeService.selectByWrapper(allCodeWrapper);// 鍥炴敹闇�瑕佷笟鍔℃暟鎹垹闄� + if (CodeDefaultLC.TASK_BACK.getValue().equals(baseModelDTO.getLcStatus())) { + R<List<BtmTypeVO>> listR = btmTypeClient.selectByIdCollection(Collections.singletonList(baseModelDTO.getBtmname())); + if (!listR.isSuccess() || listR.getData().size() == 0) { + throw new VciBaseException("浼犲叆涓氬姟绫诲瀷鏈煡璇㈠埌鐩稿簲琛ㄥ崟锛岃妫�鏌ワ紒"); + } + // 鐩存帴鍒犻櫎锛屼笉缁欑姸鎬� + commonsMapper.deleteByTaleAndOid(listR.getData().get(0).getTableName(), VciBaseUtil.toInSql(baseModelDTO.getOid())); + // commonsMapper.updateByTaleAndOid(listR.getData().get(0).getTableName(), VciBaseUtil.toInSql(baseModelDTO.getOid()),CodeDefaultLC.TASK_BACK.getValue()); + } else { + for (BaseModel baseModel : baseModels) { + baseModel.setLcStatus(baseModelDTO.getLcStatus()); + } + R r = updateBatchByBaseModel(baseModelDTO.getBtmname(), baseModels); + if(!r.isSuccess()){ + throw new VciBaseException("鏇存柊鏁版嵁鍑洪敊锛岄噸璇曪紒"+r.getMsg()); + } + } + for (CodeAllCode codeCbo : codeCbos) { + codeCbo.setLcStatus(baseModelDTO.getLcStatus()); + } + codeAllCodeService.updateBatchById(codeCbos); + + //璁板綍鏃ュ織淇℃伅 + saveLogUtil.operateLog( + CodeDefaultLC.getTextByValue(baseModelDTO.getLcStatus()), + false, + JSON.toJSONString(baseModels) + ); + }catch (Exception e){ + // 鎻掑叆鏇存敼鏃ュ織璁板綍 + saveLogUtil.operateLog(CodeDefaultLC.getTextByValue(baseModelDTO.getLcStatus()),true,e.toString()); + throw e; } - for (CodeAllCode codeCbo : codeCbos) { - codeCbo.setLcStatus(baseModelDTO.getLcStatus()); - } - codeAllCodeService.updateBatchById(codeCbos); } + + /** + * 鐢宠鍗曚竴缂栫爜 + * + * @param orderDTO 鐢宠鐨勪俊鎭紝闇�瑕佸寘鍚睘鎬х殑鍐呭鍜岀爜娈电浉鍏崇殑鍐呭 + * @return 杩斿洖缂栫爜鐨勫唴瀹� + */ + @Override + public String addSaveCode(CodeOrderDTO orderDTO) throws Exception { + return addSaveCode(orderDTO,true); + } + + /*** + * 闆嗘垚鍙彉鐮佹鐢宠鎺ュ彛 + * @param orderDTO 鐢宠鐨勪俊鎭紝闇�瑕佸寘鍚睘鎬х殑鍐呭鍜岀爜娈电浉鍏崇殑鍐呭 + * @return + * @throws Exception + */ + @Override + public String addSaveCodeNotauthUser(CodeOrderDTO orderDTO, boolean authUser) throws Exception { + return addSaveCode(orderDTO,authUser); + } /** * 鐢宠鍗曚竴缂栫爜 @@ -388,13 +500,13 @@ * @param orderDTO 鐢宠鐨勪俊鎭紝闇�瑕佸寘鍚睘鎬х殑鍐呭鍜岀爜娈电浉鍏崇殑鍐呭 * @return 杩斿洖缂栫爜鐨勫唴瀹� */ - @Override - public String addSaveCode(CodeOrderDTO orderDTO) throws Exception { + private String addSaveCode(CodeOrderDTO orderDTO, boolean authUser) throws Exception { VciBaseUtil.alertNotNull(orderDTO, "缂栫爜鐢宠鐩稿叧鐨勫睘鎬у拰鐮佹鐨勫唴瀹归兘涓虹┖", orderDTO.getCodeClassifyOid(), "涓婚搴撳垎绫荤殑涓婚敭", orderDTO.getTemplateOid(), "妯℃澘鐨勪富閿�", orderDTO.getCodeRuleOid(), "缂栫爜瑙勫垯鐨勪富閿�"); CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(orderDTO.getCodeClassifyOid()); CodeClassifyTemplateVO templateVO = templateService.getObjectHasAttrByOid(orderDTO.getTemplateOid()); CodeRuleVO ruleVO = ruleService.getObjectHasSecByOid(orderDTO.getCodeRuleOid()); + final BladeUser user = AuthUtil.getUser(); //1.鍒ゆ柇瑙勫垯涓櫎浜嗘祦姘寸爜娈碉紝鏄惁鏈夊叾浠栫爜娈� checkSecValueOnOrder(ruleVO, orderDTO); //2.鍒ゆ柇蹇呰緭椤� @@ -411,40 +523,43 @@ checkEnumOnOrder(templateVO, orderDTO); //8.澶勭悊鏃堕棿鏍煎紡锛屽湪鏁版嵁搴撻噷闈笉璁烘槸瀛楃涓茶繕鏄棩鏈熸牸寮忥紝閮戒娇鐢ㄧ浉鍚岀殑鏍煎紡瀛樺偍 switchDateAttrOnOrder(templateVO, orderDTO); - //9.鐢熸垚缂栫爜鐨勪俊鎭� -// ClientBusinessObject cbo = boService.createCBOByBtmName(classifyFullInfo.getTopClassifyVO().getBtmtypeid()); - BaseModel cbo = createCBOByBtmName(classifyFullInfo.getTopClassifyVO().getBtmTypeId()); -// //榛樿鐨勫睘鎬ч兘涓嶇敤浠庡墠绔嫹璐� -// //璁剧疆缂栫爜闇�瑕佺殑榛樿灞炴�х殑鍐呭 + //9.鐢熸垚缂栫爜鐨勪俊鎭� 锛屽垵濮嬪寲涓氬姟绫诲瀷锛氱紦瀛樺厛鍙栨秷锛屽洜涓虹増鏈鍒欎細鍑虹幇鍙樺姩鐨勬儏鍐垫墍浠ユ棤娉曚娇鐢ㄧ紦瀛� + // BaseModel cbo = createCBOByBtmName(classifyFullInfo.getTopClassifyVO().getBtmTypeId()); + BaseModel cbo = createBaseModel(classifyFullInfo.getTopClassifyVO().getBtmTypeId().trim().toLowerCase()); + //榛樿鐨勫睘鎬ч兘涓嶇敤浠庡墠绔嫹璐� + //璁剧疆缂栫爜闇�瑕佺殑榛樿灞炴�х殑鍐呭 copyValueToCBO(classifyFullInfo, cbo, orderDTO, templateVO, false); cbo.setOid(VciBaseUtil.getPk()); cbo.setRevisionOid(VciBaseUtil.getPk()); cbo.setNameOid(VciBaseUtil.getPk()); cbo.setCreateTime(new Date()); cbo.setLastModifyTime(new Date()); - cbo.setCreator(String.valueOf(AuthUtil.getUser().getUserId())); - cbo.setLastModifier(String.valueOf(AuthUtil.getUser().getUserId())); - cbo.setTenantId(AuthUtil.getTenantId()); -// //TODO:鍥犱负榛樿鐨勫睘鎬ч兘涓嶆嫹璐濓紝鐩墠闆嗗洟鐮佸彨name锛屽苟娌℃湁浠嶥TO鎷疯礉鍒癱bo閲屻�傚鍔犱竴涓崟鐙鐞嗭紝浠ュ悗鍐嶇湅瑕佷笉瑕佽皟鏁� + //cbo.setCreator(String.valueOf(AuthUtil.getUser().getUserId()));銆� + if(authUser) { + // 瑕佹眰鏄剧ず璐﹀彿锛屾墍浠ュ仛浜嗘洿鏀� + cbo.setCreator(String.valueOf(user.getAccount())); + cbo.setLastModifier(String.valueOf(user.getAccount())); + }else{ + cbo.setCreator(orderDTO.getCreator()); + cbo.setLastModifier(orderDTO.getLastModifier()); + } + cbo.setTenantId(user.getTenantId()); + if(StringUtils.isNotBlank(orderDTO.getLcStatus())||StringUtils.isNotBlank(orderDTO.getData().get("lcStatus"))){ + cbo.setLcStatus(StringUtils.isNotBlank(orderDTO.getLcStatus())?orderDTO.getLcStatus():orderDTO.getData().get("lcStatus")); + } + //TODO:鍥犱负榛樿鐨勫睘鎬ч兘涓嶆嫹璐濓紝鐩墠闆嗗洟鐮佸彨name锛屽苟娌℃湁浠嶥TO鎷疯礉鍒癱bo閲屻�傚鍔犱竴涓崟鐙鐞嗭紝浠ュ悗鍐嶇湅瑕佷笉瑕佽皟鏁� cbo.setName(orderDTO.getName() == null ? "" : orderDTO.getName()); -// //end -- modify by lihang @20220407 + //end -- modify by lihang @20220407 List<BaseModel> cboList = new ArrayList<>(); //澶囨敞 cbo.setDescription(orderDTO.getDescription()); cboList.add(cbo); -// -// cboList.add(cbo); - List<String> codeList = productCodeService.productCodeAndSaveData(classifyFullInfo, templateVO, ruleVO, orderDTO.getSecDTOList(), cboList); + List<String> codeList = productCodeService.productCodeAndSaveData(classifyFullInfo, templateVO, ruleVO, orderDTO.getSecDTOList(), cboList,user); -// List<String> charList = new ArrayList<>(); -// for (BaseModel baseModel : cboList) { -// charList.add(baseModel.getId()); -// } batchSaveSelectChar(templateVO, cboList); return codeList.size() > 0 ? codeList.get(0) : ""; -// return null; } /** @@ -469,7 +584,7 @@ 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()); + 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); @@ -490,7 +605,6 @@ }); } } - /** * 鍒ゆ柇缂栫爜鐨勭爜娈垫槸鍚﹁緭鍏ユ垨鑰呴�夋嫨浜嗙爜鍊� @@ -552,10 +666,15 @@ String value = null; if (VciQueryWrapperForDO.BASIC_FIELD_MAP.containsKey(attrId)) { value = WebUtil.getStringValueFromObject(WebUtil.getValueFromField(WebUtil.getFieldForObject(attrId, orderDTO.getClass()).getName(), orderDTO)); - } else { + if(StringUtils.isBlank(value)){ + value = orderDTO.getData().getOrDefault(attrId, ""); + } + } else { //璇存槑鏄嚜琛岄厤缃殑 //鍓嶇蹇呴』瑕佷紶閫掑皬鍐欑殑灞炴�� - value = orderDTO.getData().getOrDefault(attrId, ""); + String orDefault = orderDTO.getData().getOrDefault(attrId, ""); + value = Func.isBlank(orDefault) ? orderDTO.getData() + .getOrDefault(attrId.toUpperCase(Locale.ROOT), ""):orDefault; } return value; } @@ -586,7 +705,6 @@ }); } } - /** * 璁剧疆鏂扮殑鍊煎埌鐢宠瀵硅薄涓� @@ -649,20 +767,25 @@ } wrapperKeyAttrConditionMap(value, keyRuleVO, attrId, trim, ignoreCase, ignoreWidth, trimAll, conditionMap); }); - conditionMap.put("CODETEMPLATEOID","'" + orderDTO.getTemplateOid() + "'"); //娌℃湁闄愬埗鍒嗙被锛屼絾鏄竴涓ā鏉垮彧鍙兘鍦ㄤ竴涓笟鍔$被鍨嬮噷闈紝鎵�浠ョ洿鎺ユ煡璇㈣繖涓笟鍔$被鍨嬪嵆鍙� - if (!CollectionUtils.isEmpty(conditionMap)) { + // TODO: 鍚屼竴涓簱鍒ら噸涓嶉渶瑕佸尯鍒嗗垎绫籵id + // conditionMap.put("CODETEMPLATEOID","'" + orderDTO.getTemplateOid() + "'"); // final String[] sql = {"select count(*) from " + VciBaseUtil.getTableName(classifyFullInfo.getTopClassifyVO().getBtmtypeid()) + " t where 1 = 1 "}; R<List<BtmTypeVO>> listR = btmTypeClient.selectByIdCollection(Collections.singletonList(classifyFullInfo.getTopClassifyVO().getBtmTypeId())); // String referTable = VciBaseUtil.getTableName(referVO.getReferType()); if (!listR.isSuccess() || listR.getData().size() == 0) { throw new VciBaseException("浼犲叆涓氬姟绫诲瀷鏈煡璇㈠埌鐩稿簲琛ㄥ崟锛岃妫�鏌ワ紒"); } - final String[] sql = {"select count(*) from " + listR.getData().get(0).getTableName() + " t where 1 = 1 "}; + //final String[] sql = {"select count(*) from " + listR.getData().get(0).getTableName() + " t where 1 = 1 "}; + final String[] sql = {"select id from " + listR.getData().get(0).getTableName() + " t where 1 = 1 "}; conditionMap.forEach((key, value) -> { - sql[0] += " and " + 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())) { //淇敼鐨勬椂鍊欙紝闇�瑕佹帓闄よ嚜宸� @@ -671,16 +794,427 @@ sql[0] += " and oid != '" + orderDTO.getCopyFromVersion() + "'"; } sql[0] += " and lastR = '1' and lastV = '1' "; + // 鑾峰彇涓嶅弬涓庢牎楠岀殑鍒嗙被oid + String isParticipateCheckOids = classifyService.selectLeafByParentClassifyOid(classifyFullInfo.getTopClassifyVO().getOid(), classifyFullInfo.getCurrentClassifyVO().getOid()); + if(Func.isNotEmpty(isParticipateCheckOids)){ + sql[0] += " and codeclsfid not in(" + isParticipateCheckOids + ")"; + } // if (boService.queryCountBySql(sql[0], new HashMap<>()) > 0) { - if (Integer.parseInt(commonsMapper.selectById(sql[0]).get(0)) > 0) { + 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 ? "鏄�" : "鍚�"}; - throw new VciBaseException("鏍规嵁鎮ㄥ~鍐欑殑鍏抽敭灞炴�х殑鍐呭锛岀粨鍚堝叧閿睘鎬ф煡璇㈣鍒欙紝鍙戠幇杩欎釜鏁版嵁宸茬粡鍦ㄧ郴缁熶腑瀛樺湪浜嗐�傝淇!銆�" + ruleInfoMsg, objs); + throw new VciBaseException("鏍规嵁鎮ㄥ~鍐欑殑鍏抽敭灞炴�х殑鍐呭锛岀粨鍚堝叧閿睘鎬ф煡璇㈣鍒欙紝鍙戠幇璇ユ暟鎹凡缁忎笌绯荤粺涓紪鍙蜂负"+repeatData.stream().collect(Collectors.joining(","))+"鐨勬暟鎹噸澶嶃�傝淇!銆�" + ruleInfoMsg, objs); } } } - /** + /** + * 鏍¢獙鍏抽敭灞炴�� + * + * @param orderDTO 缂栫爜鐢宠鐨勭浉鍏崇殑淇℃伅 + */ + @Override + public List<Map> checkKeyAttrOnOrderFordatas(CodeOrderDTO orderDTO) { + List<Map>dataList=new ArrayList<>(); + CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(orderDTO.getCodeClassifyOid()); + CodeClassifyTemplateVO templateVO = templateService.getObjectHasAttrByOid(orderDTO.getTemplateOid()); + //鍏堣幏鍙栧叧閿睘鎬х殑瑙勫垯锛屼篃鍒╃敤缁ф壙鐨勬柟寮� + 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 = ""; + } + wrapperKeyAttrConditionMap(value, keyRuleVO, attrId, trim, ignoreCase, ignoreWidth, trimAll, conditionMap); + }); + + //娌℃湁闄愬埗鍒嗙被锛屼絾鏄竴涓ā鏉垮彧鍙兘鍦ㄤ竴涓笟鍔$被鍨嬮噷闈紝鎵�浠ョ洿鎺ユ煡璇㈣繖涓笟鍔$被鍨嬪嵆鍙� + if (!CollectionUtils.isEmpty(conditionMap)) { + conditionMap.put("CODETEMPLATEOID","'" + orderDTO.getTemplateOid() + "'"); +// final String[] sql = {"select count(*) from " + VciBaseUtil.getTableName(classifyFullInfo.getTopClassifyVO().getBtmtypeid()) + " t where 1 = 1 "}; + R<List<BtmTypeVO>> listR = btmTypeClient.selectByIdCollection(Collections.singletonList(classifyFullInfo.getTopClassifyVO().getBtmTypeId())); +// String referTable = VciBaseUtil.getTableName(referVO.getReferType()); + if (!listR.isSuccess() || listR.getData().size() == 0) { + throw new VciBaseException("浼犲叆涓氬姟绫诲瀷鏈煡璇㈠埌鐩稿簲琛ㄥ崟锛岃妫�鏌ワ紒"); + } + final String[] sql = {"select * from " + listR.getData().get(0).getTableName() + " 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 oid != '" + orderDTO.getOid() + "'"; + } else if (StringUtils.isNotBlank(orderDTO.getCopyFromVersion())) { + sql[0] += " and oid != '" + orderDTO.getCopyFromVersion() + "'"; + } + sql[0] += " and lastR = '1' and lastV = '1' "; +// if (boService.queryCountBySql(sql[0], new HashMap<>()) > 0) { + dataList=commonsMapper.selectBySql(sql[0]); + if (!CollectionUtils.isEmpty(dataList)) { +// String ruleInfoMsg = keyRuleVO == null ? "" : "鏌ヨ瑙勫垯锛氬幓闄ょ┖鏍�--{0},蹇界暐澶у皬鍐�--{1},蹇界暐鍏ㄥ崐瑙�--{2},蹇界暐鍏ㄩ儴绌烘牸--{3}"; +// String[] objs = new String[]{trim ? "鏄�" : "鍚�", ignoreCase ? "鏄�" : "鍚�", ignoreWidth ? "鏄�" : "鍚�", trimAll ? "鏄�" : "鍚�"}; +// throw new VciBaseException("鏍规嵁鎮ㄥ~鍐欑殑鍏抽敭灞炴�х殑鍐呭锛岀粨鍚堝叧閿睘鎬ф煡璇㈣鍒欙紝鍙戠幇杩欎釜鏁版嵁宸茬粡鍦ㄧ郴缁熶腑瀛樺湪浜嗐�傝淇!銆�" + ruleInfoMsg, objs); + return dataList; + } + } + return dataList; + } + + /** + * 鏍规嵁褰撳墠鐢宠缂栫爜鐨勫垎绫伙紝閫愬眰寰�涓婃牎楠屾槸鍚︾鍚堝睘浜庨厤缃殑涓殑鍒嗙被瀛愯妭鐐圭殑鍒� + * 绫伙紝濡傛灉绗﹀悎锛屽垯璇ュ垎绫荤敵璇风殑缂栫爜涓洪泦鍥㈢爜杩斿洖true锛屽弽涔嬪垯涓轰紒涓氱紪鐮佽繑鍥瀎alse + * @param parameter 浼犲叆鏁版嵁,classifyGroupCode:閰嶇疆鐨勪腑鐨勫垎绫婚《鑺傜偣锛宱id锛氶�夋嫨鑺傜偣鐨刼id + */ + @Override + public R checkGroupCode(Map<String, String> parameter) { + List<CodeClassify> codeClassifyList = classifyService.selectAllLevelParentByOid(parameter.get("oid")); + Set<String> configGroupCode = Arrays.stream(parameter.get("classifyGroupCode").split("#")).collect(Collectors.toSet()); +// Boolean checkGroupFlag = false;//鏄惁鏌ヨ鍒伴厤缃殑椤跺眰鍒嗙被涓� + for (int i = codeClassifyList.size()-1; i >= 0; i--) { + if(configGroupCode.contains(codeClassifyList.get(i).getId())){ +// checkGroupFlag = true; + return R.data("true"); + } +// if(checkGroupFlag && parameter.get("nowApplyCode").equals(codeClassifyList.get(i).getId())){ +// return R.data(true); +// } + } + return R.data("false"); + } + + /*** + * + * @param codeBZApplyDTO 缂栫爜鐢宠鐩稿叧鐨勪俊鎭紝闇�瑕佹湁灞炴�у拰鐮佹鐩稿叧鐨勪俊鎭� + * @return + * @throws Exception + */ + @Override + public String addSaveBZ(CodeBZApplyDTO codeBZApplyDTO) throws Exception { + return addSaveBZCode(codeBZApplyDTO,true); + } + + /** + * 鏍囧噯鐢宠鍜屼慨璁㈢敤 + * + * @param codeBZApplyDTO 缂栫爜鐢宠鐩稿叧鐨勪俊鎭紝闇�瑕佹湁灞炴�у拰鐮佹鐩稿叧鐨勪俊鎭� + * @param authUser + * @return + */ + public String addSaveBZCode(CodeBZApplyDTO codeBZApplyDTO, boolean authUser) throws Exception { + String code=""; + VciBaseUtil.alertNotNull(codeBZApplyDTO.getCodeClassifyOid(), "涓婚搴撳垎绫荤殑涓婚敭", + codeBZApplyDTO.getTemplateOid(), "妯℃澘鐨勪富閿�", codeBZApplyDTO.getCodeRuleOid(), "缂栫爜瑙勫垯鐨勪富閿�"); + //鎿嶄綔绫诲瀷 + if(StringUtils.isBlank(codeBZApplyDTO.getOperationType())){ + String operationTypeValue=codeBZApplyDTO.getData().get(operationType); + codeBZApplyDTO.setOperationType(operationTypeValue); + } + //鏄惁绯诲垪 + if(!codeBZApplyDTO.isSeries()){ + boolean isSeriesValue=codeBZApplyDTO.getData().get(isSeries).equals("true")?true:false; + codeBZApplyDTO.setSeries(isSeriesValue); + } + //鍘熸爣鍑嗗彿 + if(StringUtils.isBlank(codeBZApplyDTO.getOldCode())){ + String oldCodeValue=codeBZApplyDTO.getData().get(oldCode); + codeBZApplyDTO.setOldCode(oldCodeValue); + } + //绯诲垪娴佹按 + if(StringUtils.isBlank(codeBZApplyDTO.getSeriesFlow())){ + String seriesFlowValue=codeBZApplyDTO.getData().get(seriesFlow); + codeBZApplyDTO.setSeriesFlow(seriesFlowValue); + } + //鍙戝竷鏃堕棿 + if(StringUtils.isBlank(codeBZApplyDTO.getReleaseTime())){ + String releaseTimeValue=codeBZApplyDTO.getData().get(releaseTime); + codeBZApplyDTO.setReleaseTime(releaseTimeValue); + } + //鏄惁鍙樻洿绯诲垪 + if(!codeBZApplyDTO.isEditSeries()){ + boolean isEditSeriesValue=codeBZApplyDTO.getData().get(isEditSeries).equals("true")?true:false; + codeBZApplyDTO.setEditSeries(isEditSeriesValue); + } + VciBaseUtil.alertNotNull(codeBZApplyDTO.getOperationType(), "鎿嶄綔绫诲瀷", + codeBZApplyDTO.isSeries(), "鏄惁绯诲垪", codeBZApplyDTO.getReleaseTime(), "鍙戝竷鏃堕棿"); + + if(codeBZApplyDTO.getOperationType().equals(CodeBZOperationTypeEnum.CODE_BZ_FORMULATE.getValue())){//鍒跺畾 + code= addsaveDataBZ(codeBZApplyDTO,authUser); + }else if(codeBZApplyDTO.getOperationType().equals(CodeBZOperationTypeEnum.CODE_BZ_AMENDMENT.getValue())){//淇 + VciBaseUtil.alertNotNull(codeBZApplyDTO.getOldCode(), "婧愭爣鍑嗗彿"); + code= amendmentDataBZ(codeBZApplyDTO,authUser); + createChangeOder(code,codeBZApplyDTO,authUser); + }else if(codeBZApplyDTO.getOperationType().equals(CodeBZOperationTypeEnum.CODE_BZ_EDIT.getValue())){//鏇存敼 + code= amendmentDataBZ(codeBZApplyDTO,authUser); + createChangeOder(code,codeBZApplyDTO,authUser); + }else if(codeBZApplyDTO.getOperationType().equals(CodeBZOperationTypeEnum.CODE_BZ_DISABLE.getValue())) {//浣滃簾 + code= amendmentDataBZ(codeBZApplyDTO,authUser); + createChangeOder(code,codeBZApplyDTO,authUser); + }else if(codeBZApplyDTO.getOperationType().equals(CodeBZOperationTypeEnum.CODE_BZ_AMENDMENT.getValue())) {//澶囨煡 + code= amendmentDataBZ(codeBZApplyDTO,authUser); + createChangeOder(code,codeBZApplyDTO,authUser); + } + return code; + } + + /*** + * 淇 + * @param codeBZApplyDTO + * @param authUser + * @return + */ + private String amendmentDataBZ(CodeBZApplyDTO codeBZApplyDTO, boolean authUser) throws Exception { + CodeOrderDTO orderDTO=new CodeOrderDTO(); + BeanUtil.convert(codeBZApplyDTO,orderDTO); + CodeRuleVO ruleVO = ruleService.getObjectHasSecByOid(codeBZApplyDTO.getCodeRuleOid()); + Map<String, CodeBasicSecVO> codeCodeBasicSecMap = ruleVO.getSecVOList().stream().filter(s -> StringUtils.isNotBlank(s.getOid())).collect(Collectors.toMap(s -> s.getOid().toLowerCase(Locale.ROOT), t -> t)); + VciBaseUtil.alertNotNull(orderDTO, "缂栫爜鐢宠鐩稿叧鐨勫睘鎬у拰鐮佹鐨勫唴瀹归兘涓虹┖", orderDTO.getCodeClassifyOid(), "涓婚搴撳垎绫荤殑涓婚敭", + orderDTO.getTemplateOid(), "妯℃澘鐨勪富閿�", orderDTO.getCodeRuleOid(), "缂栫爜瑙勫垯鐨勪富閿�"); + String oldCode=codeBZApplyDTO.getOldCode();//婧愭爣鍑嗙紪鐮� + String releaseTime=codeBZApplyDTO.getReleaseTime(); + List<CodeOrderSecDTO> secDTOS= orderDTO.getSecDTOList(); + LinkedList<CodeOrderSecDTO> newSecDTOList=new LinkedList<>(); + changeCodeOrderSecDTO(ruleVO,secDTOS,oldCode,newSecDTOList);//鏍规嵁瑕佹眰閲嶆柊绠楃爜娈电爜鍊� + if(!codeBZApplyDTO.isEditSeries()){//鍙樻洿涓烘爣鍑� + //if(!codeBZApplyDTO.isSeries()){//濡傛灉鏄〃鍑嗭紝鍒欓渶瑕佸皢绯诲垪濂芥祦姘寸疆涓簄ull + //鍥犱负鏄爣鍑嗗垯鎺у埗鐮佹涓殑绯诲垪娴佹按鐮佹鍊间负绌� + newSecDTOList.stream().forEach(codeOrderSecDTO -> { + if(codeCodeBasicSecMap.containsKey(codeOrderSecDTO.getSecOid())&&codeCodeBasicSecMap.get(codeOrderSecDTO.getSecOid()).getName().equals(secName)){ + codeOrderSecDTO.setSecValue(""); + } + }); + //} + orderDTO.setSecDTOList(newSecDTOList); + return createDataBZ(orderDTO,ruleVO,authUser); + }else{//鍙樻洿涓虹郴鍒�.鍒欐寜鐓ч�昏緫鍘诲鐞� + orderDTO.setSecDTOList(newSecDTOList); + return createDataBZ(orderDTO,ruleVO,authUser); + } + } + private String createDataBZ(CodeOrderDTO orderDTO, CodeRuleVO ruleVO,boolean authUser) throws Exception { + CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(orderDTO.getCodeClassifyOid()); + CodeClassifyTemplateVO templateVO = templateService.getObjectHasAttrByOid(orderDTO.getTemplateOid()); + //1.鍒ゆ柇瑙勫垯涓櫎浜嗘祦姘寸爜娈碉紝鏄惁鏈夊叾浠栫爜娈� + checkSecValueOnOrder(ruleVO, orderDTO); + //2.鍒ゆ柇蹇呰緭椤� + checkRequiredAttrOnOrder(templateVO, orderDTO); + //3.鍏堟敞鍏ワ紝鍐嶇粍鍚堬紝鏈�鍚庢牎楠� + switchClassifyLevelOnOrder(templateVO, classifyFullInfo, orderDTO); + //4.澶勭悊缁勫悎瑙勫垯銆傜粍鍚堣鍒欎笉鑳戒娇鐢ㄧ紪鐮佺殑灞炴�э紝鍥犱负缂栫爜鐨勭敓鎴愬彲鑳芥槸闇�瑕佸睘鎬х殑 + switchComponentAttrOnOrder(templateVO, orderDTO); + //5.鏍¢獙瑙勫垯 + checkVerifyOnOrder(templateVO, orderDTO); + //6.鍏抽敭灞炴�� + checkKeyAttrOnOrder(classifyFullInfo, templateVO, orderDTO); + //7.鏋氫妇杞崲 + checkEnumOnOrder(templateVO, orderDTO); + //8.澶勭悊鏃堕棿鏍煎紡锛屽湪鏁版嵁搴撻噷闈笉璁烘槸瀛楃涓茶繕鏄棩鏈熸牸寮忥紝閮戒娇鐢ㄧ浉鍚岀殑鏍煎紡瀛樺偍 + switchDateAttrOnOrder(templateVO, orderDTO); + //9.鐢熸垚缂栫爜鐨勪俊鎭� 锛屽垵濮嬪寲涓氬姟绫诲瀷锛氱紦瀛樺厛鍙栨秷锛屽洜涓虹増鏈鍒欎細鍑虹幇鍙樺姩鐨勬儏鍐垫墍浠ユ棤娉曚娇鐢ㄧ紦瀛� + // BaseModel cbo = createCBOByBtmName(classifyFullInfo.getTopClassifyVO().getBtmTypeId()); + BaseModel cbo = createBaseModel(classifyFullInfo.getTopClassifyVO().getBtmTypeId().trim().toLowerCase()); + //榛樿鐨勫睘鎬ч兘涓嶇敤浠庡墠绔嫹璐� + //璁剧疆缂栫爜闇�瑕佺殑榛樿灞炴�х殑鍐呭 + copyValueToCBO(classifyFullInfo, cbo, orderDTO, templateVO, false); + cbo.setOid(VciBaseUtil.getPk()); + cbo.setRevisionOid(VciBaseUtil.getPk()); + cbo.setNameOid(VciBaseUtil.getPk()); + cbo.setCreateTime(new Date()); + cbo.setLastModifyTime(new Date()); + //cbo.setCreator(String.valueOf(AuthUtil.getUser().getUserId()));銆� + if(authUser) { + // 瑕佹眰鏄剧ず璐﹀彿锛屾墍浠ュ仛浜嗘洿鏀� + cbo.setCreator(String.valueOf(AuthUtil.getUser().getAccount())); + cbo.setLastModifier(String.valueOf(AuthUtil.getUser().getAccount())); + }else{ + cbo.setCreator(orderDTO.getCreator()); + cbo.setLastModifier(orderDTO.getLastModifier()); + } + cbo.setTenantId(AuthUtil.getTenantId()); + if(StringUtils.isNotBlank(orderDTO.getLcStatus())||StringUtils.isNotBlank(orderDTO.getData().get("lcStatus"))){ + cbo.setLcStatus(StringUtils.isNotBlank(orderDTO.getLcStatus())?orderDTO.getLcStatus():orderDTO.getData().get("lcStatus")); + } + //TODO:鍥犱负榛樿鐨勫睘鎬ч兘涓嶆嫹璐濓紝鐩墠闆嗗洟鐮佸彨name锛屽苟娌℃湁浠嶥TO鎷疯礉鍒癱bo閲屻�傚鍔犱竴涓崟鐙鐞嗭紝浠ュ悗鍐嶇湅瑕佷笉瑕佽皟鏁� + cbo.setName(orderDTO.getName() == null ? "" : orderDTO.getName()); + //end -- modify by lihang @20220407 + List<BaseModel> cboList = new ArrayList<>(); + //澶囨敞 + cbo.setDescription(orderDTO.getDescription()); + cboList.add(cbo); + List<String> codeList = productCodeService.productCodeAndSaveDataBZ(classifyFullInfo, templateVO, ruleVO, orderDTO.getSecDTOList(), cboList); + batchSaveSelectChar(templateVO, cboList); + return codeList.size() > 0 ? codeList.get(0) : ""; + + } + /*** + * 鏍规嵁缂栧彿鑾峰彇鐮佹鐮佸�� + * @param secDTOList + */ + private void changeCodeOrderSecDTO(CodeRuleVO ruleVO,List<CodeOrderSecDTO> secDTOList,String oldCode,LinkedList<CodeOrderSecDTO> newSecDTOList) throws Exception { + + //杩橀渶瑕佷慨鏀筧llCode鐨勭敓鍛藉懆鏈� + QueryWrapper<CodeAllCode> allCodeWrapper = new QueryWrapper<>(); + allCodeWrapper.in("id", VciBaseUtil.str2List(oldCode)); + Map<String,String> secDTOMap=secDTOList.stream().collect(Collectors.toMap(s -> s.getSecOid(), t -> t.getSecValue(),(o1, o2)->o2)); + List<CodeAllCode>codeAllcodeList=codeAllCodeService.selectByWrapper(allCodeWrapper); + if(!CollectionUtils.isEmpty(codeAllcodeList)){ + String codeDelimit=codeAllcodeList.get(0).getCodeDelimit(); + String[] secValues=StringUtils.splitByWholeSeparatorPreserveAllTokens(codeDelimit,SERIAL_VALUE_SPACE); + //VciBaseUtil.str2List() + for (int i=0; i<ruleVO.getSecVOList().size();i++){ + CodeBasicSecVO codeBasicSecVO=ruleVO.getSecVOList().get(i); + CodeOrderSecDTO codeOrderSecDTO=new CodeOrderSecDTO(); + String secValue=secValues[i]; + boolean isRoman=VciBaseUtil.isRoman(secValue); + if(isRoman){ + continue; + } + if(secDTOMap.containsKey(codeBasicSecVO.getOid())){ + secValue= secDTOMap.get(codeBasicSecVO.getOid()) ; + } + if(StringUtils.isNotBlank(secValue)) { + codeOrderSecDTO.setSecOid(codeBasicSecVO.getOid()); + codeOrderSecDTO.setSecValue(secValue); + newSecDTOList.add(codeOrderSecDTO); + } + } + }else{ + throw new Exception("鏍规嵁鍘熸爣鍑嗙紪鍙凤紝鍦ㄧ郴缁熶腑鏈煡璇㈠埌鐩稿簲鐨勪俊鎭�"); + } + } + /*** + * 鍒跺畾锛屽垯涓嶉渶瑕佷骇鐢熸洿鏀瑰崟鐩存帴鐢熸垚缂栫爜 + * @param codeBZApplyDTO + * @param authUser + * @return + */ + private String addsaveDataBZ(CodeBZApplyDTO codeBZApplyDTO, boolean authUser) throws Exception { + String code=""; + CodeOrderDTO orderDTO=new CodeOrderDTO(); + BeanUtil.convert(codeBZApplyDTO,orderDTO); + CodeRuleVO ruleVO = ruleService.getObjectHasSecByOid(codeBZApplyDTO.getCodeRuleOid()); + Map<String, CodeBasicSecVO> codeCodeBasicSecMap = ruleVO.getSecVOList().stream().filter(s -> StringUtils.isNotBlank(s.getOid())).collect(Collectors.toMap(s -> s.getOid(), t -> t)); + //鏄惁鏄爣鍑�,涓嶆槸鏍囧噯鐨勪笉浼氬幓绠� + if(!codeBZApplyDTO.isSeries()){ + //鍥犱负鏄爣鍑嗗垯鎺у埗鐮佹涓殑绯诲垪娴佹按鐮佹鍊间负绌� + orderDTO.getSecDTOList().stream().forEach(codeOrderSecDTO -> { + if(codeCodeBasicSecMap.containsKey(codeOrderSecDTO.getSecOid())&&codeCodeBasicSecMap.get(codeOrderSecDTO.getSecOid()).getName().equals(secName)){ + codeOrderSecDTO.setSecValue(""); + } + }); + } + VciBaseUtil.alertNotNull(orderDTO, "缂栫爜鐢宠鐩稿叧鐨勫睘鎬у拰鐮佹鐨勫唴瀹归兘涓虹┖", orderDTO.getCodeClassifyOid(), "涓婚搴撳垎绫荤殑涓婚敭", + orderDTO.getTemplateOid(), "妯℃澘鐨勪富閿�", orderDTO.getCodeRuleOid(), "缂栫爜瑙勫垯鐨勪富閿�"); + return createDataBZ(orderDTO,ruleVO,authUser); + } + + /*** + * 鏇存敼鍗曠殑鍒涘缓 + * @param code + * @param codeBZApplyDTO + * @param authUser + * @return + */ + private String createChangeOder(String code,CodeBZApplyDTO codeBZApplyDTO, boolean authUser){ + + return ""; + + } + /*** + * 闆嗘垚鍙彉鐮佹鐢宠鎺ュ彛 + * @param codeBZApplyDTO 鐢宠鐨勪俊鎭紝闇�瑕佸寘鍚睘鎬х殑鍐呭鍜岀爜娈电浉鍏崇殑鍐呭 + * @param authUser 鏄惁鐢ㄧ櫥褰曠敤鎴疯褰� + * @return + * @throws Exception + */ + @Override + public String addSaveBZCodeNotauthUser(CodeBZApplyDTO codeBZApplyDTO, boolean authUser) throws Exception { + return addSaveBZCode(codeBZApplyDTO,authUser); + } + + /** + * 鑾峰彇缁熻鍒嗘瀽鏁版嵁 + * @param btmNames 涓氬姟绫诲瀷 + * @return 鏁版嵁闆� + */ + @Override + public R getStatisticAnalysis(String btmNames) { + //鏌ヨ涓氬姟绫诲瀷瀵瑰簲鐨勬暟鎹簱琛� + R<List<BtmTypeVO>> listR = btmTypeClient.selectByIdCollection(Arrays.asList(btmNames.split(","))); + if (!listR.isSuccess() || listR.getData().size() == 0) { + throw new ServiceException("浼犲叆涓氬姟绫诲瀷鏈煡璇㈠埌鐩稿簲琛ㄥ崟锛岃妫�鏌ワ紒"); + } + List tableData = new ArrayList(); + for (BtmTypeVO datum : listR.getData()) { + String sql = "select count(*) countNum, to_char(CREATETIME, 'mm') countDate\n" + + "from "+ datum.getTableName() +"\n" + + "where CREATETIME >= to_date(EXTRACT(YEAR FROM SYSDATE) || '-01-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss') AND LASTV = '1'\n" + + "group by to_char(CREATETIME, 'mm')\n" + + "order by to_char(CREATETIME, 'mm')"; + //鏌ヨ鍑洪渶瑕佸鐞嗙殑鏁版嵁 + List<Map> maps = commonsMapper.selectBySql(sql); + if(maps.size() == 0){ + throw new ServiceException("浼犲叆绫诲瀷["+ datum.getName() + ":" + + datum.getId() +"]鏈煡鍒扮浉鍏崇粺璁℃暟鎹紝璇风‘璁�!!!!"); + } + //褰撳勾姣忔湀鏈堜唤涔嬪墠涔嬪拰 + List<Integer> monthCount = new ArrayList<>(12); + //褰撳勾姣忔湀鐨勬湀浠芥暟鎹� + List<Integer> month = new ArrayList<>(); + //鑾峰彇褰撳墠鏈堢殑鏁板瓧 + Calendar instance = Calendar.getInstance(); + int nowmonth = instance.get(Calendar.MONTH) + 1; + //浠�1鍒�12鏈堣繘琛屽鐞� + for (Integer i = 1; i <= 12; i++) { + //褰撳墠鏈堝悗鎵�鏈夋暟鎹缃负0 + if(i>nowmonth){ + monthCount.add(0); + month.add(0); + } + //褰撳墠鏈堜唤涔嬪墠涔嬪拰 + Integer count = 0; + //褰撳墠鏈堜唤鏁版嵁 + Integer sameMonth = 0; + //瀵规暟鎹簱鏌ョ殑鏁版嵁杩涜澶勭悊锛屽褰撳墠鏈堜唤杩涜绱姞 + for (Map map : maps) { + Integer mounDate = Integer.parseInt(String.valueOf(map.get("COUNTDATE"))); + if(mounDate <= i){ + count += Integer.parseInt(String.valueOf(map.get("COUNTNUM"))); + } + if (mounDate == i) { + sameMonth = Integer.parseInt(String.valueOf(map.get("COUNTNUM"))); + } + } + monthCount.add(count); + month.add(sameMonth); + } + //瀵规暟鎹繘琛屾暣鍚� + HashMap<String,Object> menuData = new HashMap<>(); + menuData.put("menuName",datum.getName()); + menuData.put("codeType",null); + ArrayList monthData = new ArrayList(); + monthData.add(monthCount); + monthData.add(month); + menuData.put("menuData",monthData); + tableData.add(menuData); + } + return R.data(tableData); + } + + /** * 灏佽鍏抽敭灞炴�х殑鏌ヨ璇彞 * * @param value 褰撳墠鐨勫�� @@ -699,7 +1233,7 @@ boolean ignoreSpace = trim || trimAll; if (StringUtils.isBlank(value)) { //涓虹┖鐨勬椂鍊欙紝涓嶈兘鐢≦ueryOperation.ISNULL锛屽钩鍙颁笉鐭ラ亾鍟ユ椂鍊欎笉澶勭悊杩欑浜� - conditionMap.put("t." + attrId, "null"); + conditionMap.put("t." + attrId, QueryOptionConstant.ISNULL); } else { if (keyRuleVO != null) { String queryKey = ""; @@ -731,12 +1265,16 @@ //涓嶅拷鐣ュぇ灏忓啓銆佷笉鍘荤┖銆佷笉蹇界暐鍏ㄥ崐瑙� temp = "%s"; } - queryKey = String.format(temp, "t." + attrId); - queryValue = String.format(temp, "'" + (trim ? value.trim() : value) + "'"); + queryKey = String.format(temp, "nvl("+ "t." + attrId +",'/')"); + queryValue = String.format(temp, "'" + (trim ? SpecialCharacterConverter.escapeSpecialCharacters(value.trim()):SpecialCharacterConverter.escapeSpecialCharacters(value)) + "'"); conditionMap.put(queryKey, queryValue); } else { - //涓虹┖鐨勬椂鍊欎笉浠h〃涓嶆牎楠岋紝鍙槸涓嶅幓闄ょ浉鍏崇殑淇℃伅 - conditionMap.put("t." + attrId, "'" +value+ "'"); + if(StringUtils.isNotBlank(value)) { + //涓虹┖鐨勬椂鍊欎笉浠h〃涓嶆牎楠岋紝鍙槸涓嶅幓闄ょ浉鍏崇殑淇℃伅 + conditionMap.put("nvl("+ "t." + attrId+",'/')", "'" + SpecialCharacterConverter.escapeSpecialCharacters(value) + "'"); + }else{ + conditionMap.put("t." + attrId, QueryOptionConstant.ISNULL); + } } } } @@ -805,10 +1343,6 @@ } else { fullPath = classifyFullInfo.getCurrentClassifyVO().getOid(); } - -// BeanUtils. -// BeanUtils.copyProperties(orderDTO.getData(),cbo); -// cbo.setMaterialtype(Short.valueOf("1001")); orderDTO.getData().forEach((key, value) -> { if (!edit || (!checkUnAttrUnEdit(key) && !VciQueryWrapperForDO.LC_STATUS_FIELD.equalsIgnoreCase(key))) { @@ -819,9 +1353,6 @@ } } }); -// BeanMap beanMap = BeanMap.create(cbo); -// beanMap.putAll(orderDTO.getData()); - try { Map<String, String> data = new HashMap<>(); data.put(cbo.getData().containsKey(CODE_CLASSIFY_OID_FIELD.toUpperCase())?CODE_CLASSIFY_OID_FIELD.toUpperCase():CODE_CLASSIFY_OID_FIELD, classifyFullInfo.getCurrentClassifyVO().getOid()); @@ -829,7 +1360,8 @@ data.put(cbo.getData().containsKey(CODE_FULL_PATH_FILED.toUpperCase())?CODE_FULL_PATH_FILED.toUpperCase():CODE_FULL_PATH_FILED, fullPath); cbo.getData().putAll(data); cbo.setLastModifyTime(new Date()); - cbo.setLastModifier(AuthUtil.getUser().getUserName()); + //cbo.setLastModifier(AuthUtil.getUser().getUserName()); + cbo.setLastModifier(AuthUtil.getUser().getAccount()); cbo.setTs(new Date()); if (!edit && StringUtils.isBlank(orderDTO.getLcStatus())) { //TODO 鍏堝啓鍥哄畾锛屽悗闈㈢敓鍛藉懆鏈熷ソ浜嗗湪缂栧啓 @@ -839,10 +1371,10 @@ // cbo.setLcStatus("Editing"); //// cbo.setLcStatus(lifeCycleVO.getStartStatus()); // } else { - cbo.setLcStatus(CodeDefaultLC.EDITING.getValue()); + cbo.setLcStatus(CodeDefaultLC.RELEASED.getValue()); // } } else { - cbo.setLcStatus(CodeDefaultLC.EDITING.getValue()); + cbo.setLcStatus(CodeDefaultLC.RELEASED.getValue()); } } @@ -857,7 +1389,6 @@ logger.error("璁剧疆榛樿鐨勫睘鎬х殑鍊奸敊璇�", e); } } - /** * 鍒濆鍖栦笟鍔$被鍨� @@ -883,7 +1414,7 @@ return (BaseModel) valueWrapper.get(); } catch (Exception e) { logger.error("鍒涘缓涓氬姟绫诲瀷瀵硅薄", e); - throw new VciBaseException("initBtmError", new String[]{btmName}); + throw new ServiceException("initBtmError:"+"涓氬姟绫诲瀷锛�"+btmName+":"+e.getMessage()); } } @@ -902,22 +1433,22 @@ List<CodeClassifyTemplateAttrVO> selectAttrVOs = templateVO.getAttributes().stream().filter(s -> StringUtils.isNotBlank(s.getLibraryIdentification())).collect(Collectors.toList()); if (!CollectionUtils.isEmpty(selectAttrVOs)) { -// SessionInfo sessionInfo = VciBaseUtil.getCurrentUserSessionInfo(); + //SessionInfo sessionInfo = VciBaseUtil.getCurrentUserSessionInfo(); selectAttrVOs.parallelStream().forEach(attrVO -> { List<String> valuesList = new ArrayList<>(); cboList.parallelStream().forEach(cbo -> { -// String value = cbo.get.getAttributeValue(attrVO.getId()); + //String value = cbo.get.getAttributeValue(attrVO.getId()); //灏哹ean杞负map,mybatis缁熶竴澶勭悊 Map<String, String> map = null; -// baseModels.stream().forEach(model-> { + //baseModels.stream().forEach(model-> { try { map = VciBaseUtil.convertBean2Map(cbo,null); } catch (Exception e) { throw new VciBaseException("绫诲瀷杞崲閿欒锛�" + e.getMessage()); } -// }); + //}); String value = map.get(attrVO.getId()); if (StringUtils.isNotBlank(value)) { @@ -1261,6 +1792,7 @@ } fieldVO.setOptionJsMap(eventJsMap); fieldVO.setStyle(attrVO.getTableDisplayStyle()); + fieldVO.setTableDisplayFlag(attrVO.getTableDisplayFlag()); //鍒楄〃閲屼笉鍏佽鐩存帴缂栬緫 fieldVO.setDateFormate(attrVO.getCodeDateFormat()); return fieldVO; @@ -1301,9 +1833,13 @@ uiTableConfigVO.setQueryColumns(queryColumns); //set缁欒〃鏍奸厤缃睘鎬� uiFormReferVO.setTableConfig(uiTableConfigVO); + //瀛楁鍚嶄笉涓�鑷达紝闇�瑕佹墜鍔╯et + + uiFormReferVO.setMuti(StringUtils.isBlank(codeReferConfig.getIsMuti())?false:true); + uiFormReferVO.setInitSort(new UIFieldSortVO(codeReferConfig.getSortField(),codeReferConfig.getSortType())); // 绛涢�夋潯浠� HashMap<String, String> whereMap = new HashMap<>(); - if(!codeReferConfig.getCodeSrchCondConfigVOS().isEmpty()){ + if(!CollectionUtils.isEmpty(codeReferConfig.getCodeSrchCondConfigVOS())){ codeReferConfig.getCodeSrchCondConfigVOS().stream().forEach(srch->{ whereMap.put(srch.getFilterField()+srch.getFilterType(),srch.getFilterValue()); }); @@ -1441,7 +1977,6 @@ conditionMap.put(queryKey, QueryOptionConstant.OR + queryValue); } } - /** * 鏌ヨ缂栫爜鏁版嵁鐨勫垪琛� @@ -1653,7 +2188,6 @@ } } - /** * 鏍规嵁妯℃澘灞炴�х敓鎴愮浉搴旂殑sql淇℃伅 * @@ -1819,6 +2353,8 @@ String sqlHasPage = pageHelper.getLimit() > 0 ? ("select * from (select A.*,rownum RN from (" + sql + whereSubfixForPage) : sql; String sqlCount = "select count(1) from " + tableName + SPACE + "t" + SPACE + joinTableList.values().stream().collect(Collectors.joining(SPACE)) + (StringUtils.isBlank(whereSql) ? "" : " where ") + whereSql; + String sqlId = "select t.ID from " + tableName + SPACE + "t" + SPACE + joinTableList.values().stream().collect(Collectors.joining(SPACE)) + + (StringUtils.isBlank(whereSql) ? "" : " where ") + whereSql; CodeTemplateAttrSqlBO sqlBO = new CodeTemplateAttrSqlBO(); sqlBO.setTableName(tableName); sqlBO.setJoinTable(joinTableList); @@ -1827,9 +2363,9 @@ sqlBO.setSqlHasPage(sqlHasPage); sqlBO.setSqlCount(sqlCount); sqlBO.setSqlUnPage(sql); + sqlBO.setSqlId(sqlId); return sqlBO; } - /** * 缁勫悎鏌ヨ鏉′欢鐨剆ql @@ -1848,7 +2384,7 @@ //璇存槑杩樻槸鍙傜収閲岄潰鐨勶紝鎴戜滑榛樿杩欑鎯呭喌涓嬮兘鏄瓧绗︿覆鍚э紝鍥犱负鍙傜収鐨勫睘鎬т笉涓�瀹氱敤鐨勫钩鍙扮殑灞炴�ф睜閲岀殑锛屾墍浠ュぇ閮ㄥ垎鎯呭喌涓嬶紝鏄剧ず鐨勫睘鎬ч兘鏄瓧绗︿覆鍚� return referFieldMap.get(field) + SPACE + "LIKE" + SPACE + "'%" + value + "%'" + SPACE; } else { - return (field.contains(".") ? "" : "t.") + field + SPACE + "LIKE " + "'%" + getStringValueInWhere(field, value, attrVOMap) + "%'" + SPACE; + return (field.contains(".") ? "" : "t.") + field + SPACE + "LIKE " + "'%" + value + "%'" + SPACE; } } else if (key.endsWith("_notequal")) { String field = UBCSSqlKeyword.getColumn(key, "_notequal"); @@ -1883,7 +2419,7 @@ if (referFieldMap.containsKey(field)) { return referFieldMap.get(field) + SPACE + " >= " + value + SPACE; } else { - return (field.contains(".") ? "" : "t.") + field + SPACE + " >= " + getStringValueInWhere(value, field, attrVOMap) + SPACE; + return (field.contains(".") ? "" : "t.") + field + SPACE + " >= " + getStringValueInWhere(field, value, attrVOMap) + SPACE; } } else if (key.endsWith("_le")) { //璇存槑鏄�<=鐨勩�傛垜浠渶瑕佸厛鑾峰彇涓�涓� @@ -1968,9 +2504,17 @@ if (referFieldMap.containsKey(field)) { return referFieldMap.get(field) + SPACE + "= '" + value + "'" + SPACE; } else { - return (field.contains(".") ? "" : "t.") + field + SPACE + "= '" + getStringValueInWhere(field, value, attrVOMap) + "'" + SPACE; + return (field.contains(".") ? "" : "t.") + field + SPACE + "= " + getStringValueInWhere(field, value, attrVOMap) + "" + SPACE; } - } else { + } else if(key.endsWith("_in")){ + String field = UBCSSqlKeyword.getColumn(key, "_in"); + if (referFieldMap.containsKey(field)) { + return VciBaseUtil.toInSql(referFieldMap.get(field),value); //referFieldMap.get(field) + SPACE + "= '" + value + "'" + SPACE; + } else { + return (field.contains(".") ? "" : "t.") + field + SPACE + "= " + getStringValueInWhere(field, value, attrVOMap) + "" + SPACE; + } + + }else { // if (referFieldMap.containsKey(key)) { // //璇存槑鏄弬鐓х殑锛屾垜浠弬鐓х殑鏌ヨ閮借涓烘槸瀛楃涓诧紝濡傛灉鏄椂闂存牸寮忕殑鏌ヨ鑲畾鏈夐棶棰橈紝 // String selectKey = referFieldMap.get(key); @@ -2009,7 +2553,6 @@ return getSqlByValue(key, value, attrVOMap,btmType); } }*/ - } /** @@ -2264,9 +2807,13 @@ } // cbo.getData().putAll(orderDTO.getData()); cbo.setLastModifyTime(new Date()); - cbo.setLastModifier(String.valueOf(AuthUtil.getUser().getUserId())); - updateBatchByBaseModel(classifyFullInfo.getTopClassifyVO().getBtmTypeId(), Collections.singletonList(cbo)); - batchSaveSelectChar(templateVO, Collections.singletonList(cbo)); + cbo.setLastModifier(String.valueOf(AuthUtil.getUser().getAccount())); + R r = updateBatchByBaseModel(classifyFullInfo.getTopClassifyVO().getBtmTypeId(), Collections.singletonList(cbo)); + + if(!r.isSuccess()){ + throw new ServiceException(r.getMsg()); + } + batchSaveSelectChar(templateVO, Collections.singletonList(cbo)); } /** @@ -2304,7 +2851,7 @@ } //鍙兘鍒犻櫎鑷繁鍒涘缓鐨勬暟鎹� - String userId = String.valueOf(AuthUtil.getUser().getUserId()); + String userId = String.valueOf(AuthUtil.getUser().getAccount()); for (BaseModel clientBusinessObject : cboList) { String creator = clientBusinessObject.getCreator(); if (!userId.equalsIgnoreCase(creator)) { @@ -2316,10 +2863,10 @@ // batchCBO.getDeleteCbos().addAll(cboList); // WebUtil.setPersistence(false); // batchCBO.copyFromOther( - productCodeService.recycleCode(classifyFullInfo.getCurrentClassifyVO().getBtmTypeId(), deleteBatchDTO.getOidList()); + productCodeService.recycleCode(classifyFullInfo.getTopClassifyVO().getBtmTypeId(), deleteBatchDTO.getOidList()); // baseMapper.deleteBatchIds(cboList); //浣跨敤浼犲叆鐨勪笟鍔$被鍨嬫煡璇㈣〃 - R<List<BtmTypeVO>> listR = btmTypeClient.selectByIdCollection(Collections.singletonList(classifyFullInfo.getCurrentClassifyVO().getBtmTypeId())); + R<List<BtmTypeVO>> listR = btmTypeClient.selectByIdCollection(Collections.singletonList(classifyFullInfo.getTopClassifyVO().getBtmTypeId())); if (!listR.isSuccess() || listR.getData().size() == 0) { throw new VciBaseException("浼犲叆涓氬姟绫诲瀷鏈煡璇㈠埌鐩稿簲琛ㄥ崟锛岃妫�鏌ワ紒"); } @@ -2343,7 +2890,6 @@ //鎵鹃樁娈� return phaseAttrService.listAttrByTemplateOidAndPhaseId(templateVO.getOid(), phase); } - /** * 璺緞涓婂寘鍚綋鍓嶅垎绫荤殑鎵�鏈夊垎绫讳俊鎭� @@ -2396,16 +2942,18 @@ if (conditionMap == null) { conditionMap = new HashMap<>(); } - //pageHelper.addDefaultDesc("createTime"); - pageHelper.addDefaultDesc("id"); + pageHelper.addDefaultDesc("createTime"); +// pageHelper.addDefaultDesc("id"); if (!classifyService.checkHasChild(codeClassifyOid)) { conditionMap.put("t." + CODE_CLASSIFY_OID_FIELD, codeClassifyOid); } else { // conditionMap.put(CODE_CLASSIFY_OID_FIELD, QueryOptionConstant.IN + "(select oid from " + VciBaseUtil.getTableName(MdmBtmTypeConstant.CODE_CLASSIFY) - + List<BtmTypeVO> classifyData = btmTypeClient.selectByIdCollection(Collections.singletonList(MdmBtmTypeConstant.CODE_CLASSIFY)).getData(); + if(Func.isEmpty(classifyData)){ + throw new ServiceException("涓氬姟绫诲瀷涓嫳鏂囧悕绉板拰鏌ヨ鏉′欢閰嶇疆涓嶄竴鑷达紝璇蜂慨鏀逛笟鍔$被鍨嬩腑鍒嗙被琛ㄨ嫳鏂囧悕绉颁负"+MdmBtmTypeConstant.CODE_CLASSIFY); + } conditionMap.put("t." + CODE_CLASSIFY_OID_FIELD, QueryOptionConstant.IN + "(select oid from " + - btmTypeClient.selectByIdCollection(Collections.singletonList("classify")) - .getData().get(0).getTableName() + " where lcstatus='" + FrameWorkDefaultValueConstant + classifyData.get(0).getTableName() + " where lcstatus='" + FrameWorkDefaultValueConstant .FRAMEWORK_DATA_ENABLED + "' start with parentCodeClassifyOid = '" + codeClassifyOid + "' CONNECT BY PRIOR OID = parentCodeClassifyOid )"); } @@ -2451,27 +2999,22 @@ List<BaseModel> updateList = new ArrayList<>(); // 搴旇閮芥槸涓�涓垎绫讳笅鐨勪笟鍔℃暟鎹紝鎵剧涓�鏉$殑灏辫 CodeClassifyFullInfoBO topClassifyFullInfo = classifyService.getClassifyFullInfo(orderDTOList.get(0).getCodeClassifyOid()); -// Map<String,String> cboOidMap = new HashMap<>(); if (CollectionUtils.isEmpty(orderDTOMap.keySet())) { throw new VciBaseException(DATA_OID_NOT_EXIST); } List<BaseModel> cboList = selectByTypeAndOid(topClassifyFullInfo.getTopClassifyVO().getBtmTypeId(), VciBaseUtil.array2String(orderDTOMap.keySet().toArray(new String[0]))); -// cboOidMap.put("oid",QueryOptionConstant.IN + "(" + VciBaseUtil.toInSql(orderDTOMap.keySet().toArray(new String[0])) + ")"); -// List<ClientBusinessObject> cboList = boService.queryCBO(classifyFullInfo.getTopClassifyVO().getBtmtypeid(), cboOidMap); - if (CollectionUtils.isEmpty(cboList)) { + if (CollectionUtils.isEmpty(cboList)) { throw new VciBaseException(DATA_OID_NOT_EXIST); } -// BatchCBO batchCBO = new BatchCBO(); -// CodeClassifyTemplateVO firstTemplateVO = templateService.getObjectHasAttrByOid(orderDTOMap.values().stream().findFirst().get().getTemplateOid()); - Map<String, BaseModel> cboMap = cboList.stream().filter(cbo -> cbo != null).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getOid(), t -> t)); + Map<String, BaseModel> cboMap = cboList.stream().filter(cbo -> cbo != null).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getOid(), t -> t)); orderDTOMap.keySet().stream().forEach(oid -> { CodeOrderDTO orderDTO = orderDTOMap.get(oid); CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(orderDTO.getCodeClassifyOid()); CodeClassifyTemplateVO firstTemplateVO = templateService.getObjectHasAttrByOid(orderDTOMap.values().stream().findFirst().get().getTemplateOid()); BaseModel cbo = cboMap.get(oid); String code = cbo.getId(); - if (!cbo.getTs().toString().contains(orderDTO.getTs().toString())) { + if (!cbo.getTs().toString().contains(VciDateUtil.date2Str(orderDTO.getTs(), VciDateUtil.DateTimeFormat))) { throw new VciBaseException("鏁版嵁涓嶆槸鏈�鏂扮殑锛屽彲鑳戒粬浜哄凡缁忎慨鏀癸紝璇峰埛鏂板悗鍐嶈瘯"); } if (!CodeDefaultLC.EDITING.getValue().equalsIgnoreCase(cbo.getLcStatus()) && !orderDTO.isEditInProcess()) { @@ -2497,21 +3040,13 @@ //浼佷笟鐮佸拰闆嗗洟鐮佺殑涓嶄慨鏀� cbo.setDescription(StringUtils.isBlank(orderDTO.getDescription()) ? "" : orderDTO.getDescription()); cbo.setName(orderDTO.getName()); -// try { -// cbo.setAttributeValue("id",code); cbo.setId(code); cbo.setDescription(StringUtils.isBlank(orderDTO.getDescription()) ? "" : orderDTO.getDescription()); -// cbo.setAttributeValueWithNoCheck("description", StringUtils.isBlank(orderDTO.getDescription())?"":orderDTO.getDescription()); -// cbo.setAttributeValue("name", orderDTO.getName()); cbo.setName(orderDTO.getName()); -// } catch (VCIError e) { -// e.printStackTrace(); -// } -// batchCBO.getUpdateCbos().add(cbo); + updateList.add(cbo); batchSaveSelectChar(firstTemplateVO, cboList); }); -// boService.persistenceBatch(batchCBO); updateBatchByBaseModel(topClassifyFullInfo.getTopClassifyVO().getBtmTypeId(), updateList); return R.success("鎿嶄綔鎴愬姛锛�"); } @@ -2617,17 +3152,10 @@ orderDTO.getCodeClassifyOid(), "涓婚搴撳垎绫荤殑涓婚敭"); //闇�瑕佸崌鐗� -// ClientBusinessObjectOperation cboOperation = new ClientBusinessObjectOperation(); BaseModel cbo = null; -// try { -// //cbo = cboOperation.createBusinessObjectVersion(oldCbo,VciBaseUtil.getCurrentUserId()); cbo = reviseBusinessObject(oldCbo); -// } catch (VCIError e) { -// throw new VciBaseException("鍒濆鍖栫浉鍏崇殑鍐呭鍑虹幇浜嗛敊璇�", new String[0], e); -// } //1. 鍒ゆ柇蹇呰緭椤� - //CodeClassifyTemplateVO templateVO = templateService.getObjectHasAttrByOid(orderDTO.getTemplateOid()); - checkRequiredAttrOnOrder(templateVO, orderDTO); + checkRequiredAttrOnOrder(templateVO, orderDTO); //2.鍏堟敞鍏ワ紝鍐嶇粍鍚堬紝鏈�鍚庢牎楠� switchClassifyLevelOnOrder(templateVO, classifyFullInfo, orderDTO); //3.澶勭悊缁勫悎瑙勫垯銆傜粍鍚堣鍒欎笉鑳戒娇鐢ㄧ紪鐮佺殑灞炴�э紝鍥犱负缂栫爜鐨勭敓鎴愬彲鑳芥槸闇�瑕佸睘鎬х殑 @@ -2645,24 +3173,38 @@ //浼佷笟鐮佸拰闆嗗洟鐮佺殑涓嶄慨鏀� cbo.setDescription(StringUtils.isBlank(orderDTO.getDescription()) ? "" : orderDTO.getDescription()); cbo.setName(orderDTO.getName()); -// try { cbo.setDescription(StringUtils.isBlank(orderDTO.getDescription()) ? "" : orderDTO.getDescription()); -// cbo.setAttributeValueWithNoCheck("description", StringUtils.isBlank(orderDTO.getDescription())?"":orderDTO.getDescription()); cbo.setName(orderDTO.getName()); -// } catch (VCIError e) { -// e.printStackTrace(); -// } //鏁版嵁鐨勬椂鍊欙紝缂栫爜鏄笉鍙樼殑 cbo.setCreateTime(cbo.getCreateTime()); + cbo.setCreator(cbo.getCreator()); cbo.setLastModifyTime(cbo.getLastModifyTime()); -// List<ClientBusinessObject> cboList = new ArrayList<>(); -// cboList.add(cbo); + cbo.setTenantId(AuthUtil.getTenantId()); + oldCbo.setLastV("0"); + oldCbo.setLastModifier(String.valueOf(AuthUtil.getUser().getAccount())); + oldCbo.setLastModifyTime(new Date()); try { -// cboOperation.saveRevisionBuinessObject(cbo); + // 淇敼鐗堟鍙� + updateBatchByBaseModel(oldCbo.getBtmname(), Collections.singletonList(oldCbo)); + // 鎻掑叆鏂扮殑鏁版嵁 insertBatchByType(cbo.getBtmname(), Collections.singletonList(cbo)); - } catch (Exception vciError) { - throw new VciBaseException("鏁版嵁鏇存敼淇濆瓨鍑洪敊浜�", new String[0], vciError); - } + //澶勭悊鐮佸�艰〃锛屽鐮佸�艰〃杩涜澶勭悊鏇挎崲鍒涘缓鏁版嵁鐨刼id + QueryWrapper<CodeAllCode> wrapper = new QueryWrapper<>(); + wrapper.eq("CREATECODEOID",orderDTO.getCopyFromVersion()); + CodeAllCode codeAllCode = codeAllCodeService.getOne(wrapper); + codeAllCode.setCreateCodeOid(cbo.getOid()); + codeAllCode.setLastModifyTime(new Date()); + codeAllCode.setTs(new Date()); + codeAllCode.setLastModifier(AuthUtil.getUser().getUserName()); + codeAllCodeService.updateById(codeAllCode); + // 璁板綍鏁版嵁鏇存敼鏃ュ織 + saveLogUtil.operateLog("鏁版嵁鏇存敼",false, StringUtil.format("{}\n淇敼涓�:\n{}",JSON.toJSONString(Collections.singletonList(oldCbo)),JSON.toJSONString(Collections.singletonList(cbo)))); + } catch (Exception vciError) { + // 璁板綍鏁版嵁鏇存敼鎶ラ敊鏃剁殑鏃ュ織 + saveLogUtil.operateLog("鏁版嵁鏇存敼",true,vciError.toString()); + throw new VciBaseException("鏁版嵁鏇存敼淇濆瓨鍑洪敊浜�", new String[0], vciError); + } + batchSaveSelectChar(templateVO, Collections.singletonList(cbo)); } @@ -2691,12 +3233,102 @@ String codeRuleOid = classifyVO.getCodeRuleOid(); if (StringUtils.isBlank(codeRuleOid)) { //寰�涓婃壘 - CodeClassifyFullInfoBO fullInfo = classifyService.getClassifyFullInfo(codeClassifyOid); - return getCodeRuleByClassifyFullInfo(fullInfo); + CodeRuleVO classifyFullInfoCodeRule = getCodeRuleByClassifyFullInfo(classifyService.getClassifyFullInfo(codeClassifyOid)); + return toCodeValueApplyStatus(classifyFullInfoCodeRule); } - //鎴戜滑鏌ヨ缂栫爜瑙勫垯 - return ruleService.getObjectHasSecByOid(codeRuleOid); + //鏌ヨ缂栫爜瑙勫垯 + CodeRuleVO objectHasSecByOid = ruleService.getObjectHasSecByOid(codeRuleOid); + return toCodeValueApplyStatus(objectHasSecByOid); } + + /** + * 缂栫爜鐢宠琛ㄥ崟锛岄殣钘忋�佸彲杈撱�佸彧璇昏浆鎹� + * @param codeRuleVO + * @return + */ + private CodeRuleVO toCodeValueApplyStatus(CodeRuleVO codeRuleVO){ + if(codeRuleVO.getSecVOList().isEmpty()){ + return codeRuleVO; + } + // 鍙緭鐮佹绫诲瀷 + List<String> inputTypes = Arrays.asList( + CodeSecTypeEnum.CODE_FIXED_SEC.getValue(), + CodeSecTypeEnum.CODE_VARIABLE_SEC.getValue(), + CodeSecTypeEnum.CODE_CLASSIFY_SEC.getValue(), + CodeSecTypeEnum.CODE_REFER_SEC.getValue(), + CodeSecTypeEnum.CODE_DATE_SEC.getValue() + ); + // 鍙鐮佹绫诲瀷 + List<String> readOnlyTypes = Arrays.asList( + CodeSecTypeEnum.CODE_LEVEL_SEC.getValue(), + CodeSecTypeEnum.CODE_ATTR_SEC.getValue() + ); + // 闅愯棌鐮佹绫诲瀷 + /*List<String> hideType = Arrays.asList( + CodeSecTypeEnum.CODE_SERIAL_SEC.getValue() + );*/ + // 褰撳墠瑙勫垯鐨勬墍鏈夌被鍨嬬爜娈� + List<String> secTypeList = codeRuleVO.getSecVOList().stream().map(CodeBasicSecVO::getSecType).collect(Collectors.toList()); + // 鎯呭喌涓� 鍏ㄩ儴鏄彧璇荤殑鐮佹绫诲瀷 + boolean hasAllReadOnlyType =secTypeList.stream().allMatch(item -> readOnlyTypes.stream().anyMatch(item1-> item.equals(item1))); + // 鍏ㄩ儴鏄彧璇荤殑鐮佹绫诲瀷 + if(hasAllReadOnlyType){ + List<CodeBasicSecVO> basicSecVOS = codeRuleVO.getSecVOList().stream().map(secVO -> { + secVO.setCodeValueApplyStatus(3); + // 鏃ユ湡鐮佹璁剧疆榛樿鍊� + if (secVO.getSecType().equals(CodeSecTypeEnum.CODE_DATE_SEC.getValue())) { + try { + secVO.setCodeDateValue(Func.format(new Date(),secVO.getCodeDateFormatStr())); + }catch (Exception e){ + throw new ServiceException("鏃ユ湡鐮佹鏃ユ湡鏍煎紡閰嶇疆鏈夎锛屽鑷磋浆鎹㈠嚭閿欙細"+e.getMessage()); + } + } + return secVO; + }).collect(Collectors.toList()); + codeRuleVO.setSecVOList(basicSecVOS); + return codeRuleVO; + } + // 鎯呭喌浜� 鍏ㄩ儴閮芥槸鍙緭鍏ョ被鍨嬬殑 + boolean hasAllInputType = secTypeList.stream().allMatch(item -> inputTypes.stream().anyMatch(item1-> item.equals(item1))); + if(hasAllInputType){ + List<CodeBasicSecVO> basicSecVOS = codeRuleVO.getSecVOList().stream().map(secVO -> { + secVO.setCodeValueApplyStatus(1); + // 鏃ユ湡鐮佹璁剧疆榛樿鍊� + if (secVO.getSecType().equals(CodeSecTypeEnum.CODE_DATE_SEC.getValue())) { + try { + secVO.setCodeDateValue(Func.format(new Date(),secVO.getCodeDateFormatStr())); + }catch (Exception e){ + throw new ServiceException("鏃ユ湡鐮佹鏃ユ湡鏍煎紡閰嶇疆鏈夎锛屽鑷磋浆鎹㈠嚭閿欙細"+e.getMessage()); + } + } + return secVO; + }).collect(Collectors.toList()); + codeRuleVO.setSecVOList(basicSecVOS); + return codeRuleVO; + } + // 鎯呭喌涓夊寘鍚汉涓洪�夋嫨鐨勭爜娈碉紝鍙堟湁鍙绫诲瀷鐮佹鐨勶紝鎵�鏈夌爜娈甸兘瑕佹樉绀哄嚭鏉ワ紝鍙緭璁剧疆涓�1锛屽彧璇昏缃负2锛岄殣钘忚缃负3 + List<CodeBasicSecVO> basicSecVOS = codeRuleVO.getSecVOList().stream().map(secVO -> { + if(inputTypes.contains(secVO.getSecType())){ + secVO.setCodeValueApplyStatus(1); + }else if(readOnlyTypes.contains(secVO.getSecType())){ + secVO.setCodeValueApplyStatus(2); + }else{ + secVO.setCodeValueApplyStatus(3); + } + // 鏃ユ湡鐮佹璁剧疆榛樿鍊� + if (secVO.getSecType().equals(CodeSecTypeEnum.CODE_DATE_SEC.getValue())) { + try { + secVO.setCodeDateValue(Func.format(new Date(),secVO.getCodeDateFormatStr())); + }catch (Exception e){ + throw new ServiceException("鏃ユ湡鐮佹鏃ユ湡鏍煎紡閰嶇疆鏈夎锛屽鑷磋浆鎹㈠嚭閿欙細"+e.getMessage()); + } + } + return secVO; + }).collect(Collectors.toList()); + codeRuleVO.setSecVOList(basicSecVOS); + codeRuleVO.setIsShowHideStatus(hasAllReadOnlyType ? "readOnly":(hasAllInputType ? "input":"readAndInput")); + return codeRuleVO; + } /** * 浣跨敤鍒嗙被鐨勫叏閮ㄤ俊鎭幏鍙栫紪鐮佽鍒� @@ -2713,11 +3345,11 @@ } else { if (CollectionUtils.isEmpty(fullInfoBO.getParentClassifyVOs())) { //璇存槑宸茬粡鏄渶楂樺眰绾�, - throw new VciBaseException("褰撳墠涓婚搴撳垎绫伙紝浠ュ強瀹冪殑鎵�鏈夌殑涓婄骇鍒嗙被閮芥病鏈夎缃紪鐮佽鍒�"); + throw new ServiceException("褰撳墠涓婚搴撳垎绫伙紝浠ュ強瀹冪殑鎵�鏈夌殑涓婄骇鍒嗙被閮芥病鏈夎缃紪鐮佽鍒�"); } List<CodeClassifyVO> parentClassifyVOList = fullInfoBO.getParentClassifyVOs().stream().sorted((o1, o2) -> o1.getDataLevel().compareTo(o2.getDataLevel())).collect(Collectors.toList()); //浠庢渶楂樼殑level寮�濮嬭幏鍙� - for (int i = 0; i < parentClassifyVOList.size(); i++) { + for (int i = parentClassifyVOList.size()-1; i >= 0; i--) { CodeClassifyVO record = parentClassifyVOList.get(i); if (StringUtils.isNotBlank(record.getCodeRuleOid())) { codeRuleOid = record.getCodeRuleOid(); @@ -2725,7 +3357,7 @@ } } if (StringUtils.isBlank(codeRuleOid)) { - throw new VciBaseException("褰撳墠涓婚搴撳垎绫伙紝浠ュ強瀹冪殑鎵�鏈夌殑涓婄骇鍒嗙被閮芥病鏈夎缃紪鐮佽鍒�"); + throw new ServiceException("褰撳墠涓婚搴撳垎绫伙紝浠ュ強瀹冪殑鎵�鏈夌殑涓婄骇鍒嗙被閮芥病鏈夎缃紪鐮佽鍒�"); } } return ruleService.getObjectHasSecByOid(codeRuleOid); @@ -2771,7 +3403,7 @@ wrapperData(dataList, templateVO, sqlBO.getSelectFieldList(), true); R<List<Map<String, String>>> result = R.data(Collections.singletonList(cbo)); //鎴戜滑瑕佺湅鏄惁涓嶆槸鍗囩増鐨勶紝鍗囩増鐨勮瘽锛岄渶瑕佸姣斾笉鐩哥瓑鐨勫睘鎬� - String copy = cbo.get("copyfromversion"); +/* String copy = cbo.get("copyfromversion"); // if (StringUtils.isBlank(copy)) { // copy = cbo.getAttributeValue("copyfromversion"); // } @@ -2790,11 +3422,12 @@ Map<String, String> difFieldMap = new HashMap<>(); Map<String, String> finalOldData = oldData; cbo.forEach((key, value) -> { - String oldValue = finalOldData.getOrDefault(key, ""); - if (value == null) { + // 杩欏効oldmap涓殑鍏ㄦ槸澶у啓锛岃�宑bo涓殑鍏ㄦ槸灏忓啓鎵�浠ヤ細鎷夸笉鍒板彧锛岃繖鍎跨洿鎺ュ鐞嗘垚灏忓啓鎷夸笉鍒板氨鐢ㄥぇ鍐欐嬁 + String oldValue = String.valueOf(finalOldData.getOrDefault(key.toUpperCase(Locale.ROOT), finalOldData.getOrDefault(key, ""))); + if (value == null || value == "null") { value = ""; } - if (oldValue == null) { + if (oldValue == null || oldValue == "null") { oldValue = ""; } if (!value.equalsIgnoreCase(oldValue)) { @@ -2805,7 +3438,7 @@ difFieldList.add(difFieldMap); result.setData(difFieldList); } - } + }*/ return result; } @@ -3163,7 +3796,6 @@ return getTableDefineByTemplateVO(templateService.getObjectHasAttrByOid(templateOid)); } - /** * 浣跨敤妯℃澘鏄剧ず瀵硅薄杞崲涓鸿〃鏍肩殑淇℃伅锛堝寘鍚墿灞曠殑鎸夐挳锛� * @@ -3260,6 +3892,7 @@ } return uiInfoVO; } + @Override public MdmUIInfoVO getFlowUIInfoByClassifyOid(String codeClassifyOid, String functionId,String templateId,String taskId,String modelKey){ // MdmUIInfoVO uiInfoVO = getTableDefineByClassifyOid_v2(codeClassifyOid,templateId,taskId,modelKey); @@ -3347,6 +3980,7 @@ }).collect(Collectors.toSet()); //灏哹ean杞负map,mybatis缁熶竴澶勭悊 List<Map<String, String>> maps = new ArrayList<>(); + baseModels.stream().forEach(model -> { try { maps.add(VciBaseUtil.convertBean2Map(model,existFild)); @@ -3354,8 +3988,106 @@ throw new VciBaseException("绫诲瀷杞崲閿欒锛�" + e.toString()); } }); - return commonsMapper.insertByBaseModel(listR.getData().get(0).getTableName(), maps.get(0), maps); + // 鏄惁寮�鍚绾跨▼鎵ц鎻掑叆璇彞 + if(IS_THREAD_IMPORT){ + try { + threadBactchExecuteInsert(listR.getData().get(0).getTableName(),maps); + }catch (Exception e){ + throw new ServiceException("鍒嗘壒鎵цinsert璇彞鎶ラ敊:"+e.getMessage()); + } + }else { + bacthExcecuteInsert(listR.getData().get(0).getTableName(),maps); + } + + return maps.size(); } + + /** + * 澶氱嚎绋嬫柟寮忓垎鎵规墽琛宨nsert璇彞 + * @param tableName + * @param maps + * @throws ServiceException + */ + private void threadBactchExecuteInsert(String tableName, List<Map<String, String>> maps) throws ServiceException{ + ExecutorService executor = Executors.newFixedThreadPool(THREAD_NUM); // 鍒涘缓涓�涓浐瀹氬ぇ灏忕殑绾跨▼姹� + List<Map<String, String>> threadSafeMaps = new CopyOnWriteArrayList<>(maps); + + for (int i = 0; i < threadSafeMaps.size(); i += MAX_IMPORT_NUM) { + final int startIndex = i; + final int endIndex = Math.min(i + MAX_IMPORT_NUM, threadSafeMaps.size()); + try { + executor.execute(() -> { + List<Map<String, String>> subList = threadSafeMaps.subList(startIndex, endIndex); + // 璋冪敤鎻掑叆鏁版嵁搴撶殑鏂规硶 + commonsMapper.insertByBaseModel(tableName, threadSafeMaps.get(0), subList); + }); + }catch (Throwable e){ + throw new ServiceException(e.getMessage()); + } + } + + // 鍏抽棴绾跨▼姹� + executor.shutdown(); + try { + // 绛夊緟鎵�鏈変换鍔℃墽琛屽畬鎴� + executor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS); + } catch (InterruptedException e) { + // 澶勭悊寮傚父 + throw new ServiceException("澶氱嚎绋嬫柟寮忔墽琛屾壒閲忔彃鍏ユ椂浜х敓閿欒:"+e.getMessage()); + } + } + + /** + * 鍗曠嚎绋嬫柟寮忓垎鎵规墽琛� + * @param tableName + * @param maps + */ + private void bacthExcecuteInsert(String tableName, List<Map<String, String>> maps){ + for (int i = 0; i < maps.size(); i += MAX_IMPORT_NUM) { + final int startIndex = i; + final int endIndex = Math.min(i + MAX_IMPORT_NUM, maps.size()); + List<Map<String, String>> subList = maps.subList(startIndex, endIndex); + // 璋冪敤鎻掑叆鏁版嵁搴撶殑鏂规硶 + commonsMapper.insertByBaseModel(tableName, maps.get(0), subList); + } + } + + /** + * 浼犲叆涓氬姟绫诲瀷浠ュ強ID鏌ヨ涓氬姟琛ㄦ暟鎹槸鍚﹂噸澶� + * + * @param btmType 涓氬姟绫诲瀷 + * @param ids 澶勭悊鏁版嵁 + * @return 鏌ヨ鍒版暟鎹殑鎬绘暟 + */ + @Override + public Integer selectIdsCounts(String btmType, List<String> ids) { + //浣跨敤浼犲叆鐨勪笟鍔$被鍨嬫煡璇㈣〃 + R<List<BtmTypeVO>> listR = btmTypeClient.selectByIdCollection(Collections.singletonList(btmType)); + if (!listR.isSuccess() || listR.getData().size() == 0) { + throw new VciBaseException("浼犲叆涓氬姟绫诲瀷鏈煡璇㈠埌鐩稿簲琛ㄥ崟锛岃妫�鏌ワ紒"); + } + return commonsMapper.queryCountBySql("select count(*) from " + + listR.getData().get(0).getTableName() + " where id in ("+ ids.stream().map(s -> "'" + s + "'").collect(Collectors.joining(",")) +")"); + } + + /** + * 浼犲叆涓氬姟绫诲瀷浠ュ強ID銆丱ID鏌ヨ涓氬姟琛ㄦ暟鎹槸鍚﹂噸澶� + * + * @param btmType 涓氬姟绫诲瀷 + * @param id 澶勭悊鏁版嵁id + * @param oid 澶勭悊鏁版嵁oid + * @return 鏌ヨ鍒版暟鎹殑鎬绘暟 + */ + @Override + public Integer selectIdAndOidCounts(String btmType, String id, String oid) { + //浣跨敤浼犲叆鐨勪笟鍔$被鍨嬫煡璇㈣〃 + R<List<BtmTypeVO>> listR = btmTypeClient.selectByIdCollection(Collections.singletonList(btmType)); + if (!listR.isSuccess() || listR.getData().size() == 0) { + throw new VciBaseException("浼犲叆涓氬姟绫诲瀷鏈煡璇㈠埌鐩稿簲琛ㄥ崟锛岃妫�鏌ワ紒"); + } + return commonsMapper.queryCountBySql("select count(*) from " + + listR.getData().get(0).getTableName() + " where id ='" + id + "' and oid <> '" + oid + "'"); + } /** * 浼犲叆涓氬姟绫诲瀷浠ュ強鐩竜id闆嗗悎鏌ヨ鏁版嵁杩涜杩斿洖 @@ -3421,7 +4153,6 @@ } return baseModels; } - /** * 鏍规嵁涓氬姟绫诲瀷鍚嶇О鍒涘缓涓氬姟鏁版嵁婧愬璞� @@ -3531,20 +4262,80 @@ return R.success("鏇存柊鎴愬姛锛�"); } + /** + * 鏇存柊涓氬姟鏁版嵁鍚屾椂瀵圭爜鍊艰〃鏁版嵁鎿嶄綔鎺ュ彛 + * + * @param btmType 涓氬姟绫诲瀷 + * @param baseModels 澶勭悊鏁版嵁 + * @return 澶勭悊鐘舵�� + */ + @Transactional(rollbackFor = VciBaseException.class) + @Override + public R<Integer> updateBatchBtypeDatas(String btmType, List<BaseModel> baseModels) { - /** + //浣跨敤浼犲叆鐨勪笟鍔$被鍨嬫煡璇㈣〃 + R<List<BtmTypeVO>> listR = btmTypeClient.selectByIdCollection(Collections.singletonList(btmType)); + if (!listR.isSuccess() || listR.getData().size() == 0) { + throw new VciBaseException("浼犲叆涓氬姟绫诲瀷鏈煡璇㈠埌鐩稿簲琛ㄥ崟锛岃妫�鏌ワ紒"); + } + //鑾峰彇褰撳墠涓氬姟绫诲瀷鎵�鏈夊瓧娈电敤鏉ュ仛瀵规瘮 + R<BtmTypeVO> allAttributeByBtmId = btmTypeClient.getAllAttributeByBtmId(btmType); + if (!allAttributeByBtmId.isSuccess() || allAttributeByBtmId.getData().getAttributes().size() == 0) { + throw new VciBaseException("浼犲叆涓氬姟绫诲瀷鏈煡璇㈠埌鐩稿簲瀛楁淇℃伅锛岃妫�鏌ワ紒"); + } + Set<String> existFild = allAttributeByBtmId.getData().getAttributes().stream().map(btmTypeAttributeVO -> { + return btmTypeAttributeVO.getId(); + }).collect(Collectors.toSet()); + if(!CollectionUtils.isEmpty(baseModels)){ + List<String> oidList=baseModels.stream().filter(data-> com.baomidou.mybatisplus.core.toolkit.StringUtils.isNotBlank(data.getOid())).map(BaseModel::getOid).distinct().collect(Collectors.toList()); + LambdaQueryWrapper<CodeAllCode> lqw = new LambdaQueryWrapper<>(); + lqw.in(CodeAllCode::getCreateCodeOid,oidList); + List<CodeAllCode> codeAllCodeList= codeAllCodeService.selectByWrapper(lqw); + Map<String, CodeAllCode> cboMap = codeAllCodeList.stream().filter(cbo -> cbo != null).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getCreateCodeOid(), t -> t)); + List<CodeAllCode> newCodeAllCodeList=new ArrayList<>(); + //灏哹ean杞负map,mybatis缁熶竴澶勭悊 + List<Map<String, String>> maps = new ArrayList<>(); + try { + baseModels.stream().forEach(baseModel->{ + String oid=baseModel.getOid(); + try { + maps.add(VciBaseUtil.convertBean2Map(baseModel,existFild)); + } catch (Exception e) { + throw new VciBaseException("绫诲瀷杞崲閿欒锛�" + e.getMessage()); + } + if(cboMap.containsKey(oid)){ + CodeAllCode codeAllCode= cboMap.get(oid); + codeAllCode.setId(baseModel.getId()); + // codeAllCode.setLastModifier(AuthUtil.getUser().getUserName()); + codeAllCode.setLastModifier(AuthUtil.getUser().getAccount()); + codeAllCode.setLastModifyTime(new Date()); + codeAllCode.setLcStatus(baseModel.getLcStatus()); + newCodeAllCodeList.add(codeAllCode); + } + }); + commonsMapper.updateBatchByBaseModel(listR.getData().get(0).getTableName(), maps); + codeAllCodeService.saveOrUpdateBatch(newCodeAllCodeList); + } catch (Exception e) { + throw new VciBaseException("绫诲瀷杞崲閿欒锛�" + e.getMessage()); + } + + } + return R.success("鏇存柊鎴愬姛锛�"); + } + + /** * 鑾峰彇鍙傜収鐨勪俊鎭� * * @param referConfigVO 鍙傜収鐨勯厤缃� * @return 鍒楄〃鏁版嵁 */ @Override - public IPage<BaseModel> referDataGrid(UIFormReferVO referConfigVO, BaseQueryObject baseQueryObject) throws VciBaseException { + public IPage<BaseModelVO> referDataGrid(UIFormReferVO referConfigVO, BaseQueryObject baseQueryObject) throws VciBaseException { //checkReferConfig(referConfigVO); //浣跨敤涓氬姟绫诲瀷鏌ヨ R<BtmTypeVO> allAttributeByBtmId = btmTypeClient.getAllAttributeByBtmId(referConfigVO.getReferType()); if (!allAttributeByBtmId.isSuccess()) { - throw new ServiceException("涓氬姟绫诲瀷feign鎺ュ彛璋冪敤閿欒锛�"); + throw new ServiceException("涓氬姟绫诲瀷feign鎺ュ彛璋冪敤閿欒;"+allAttributeByBtmId.getMsg()); } if (Func.isEmpty(allAttributeByBtmId.getData())) { throw new VciBaseException("浼犲叆涓氬姟绫诲瀷鏈煡璇㈠埌鐩稿簲琛ㄥ崟锛岃妫�鏌ワ紒"); @@ -3569,8 +4360,9 @@ throw new ServiceException(Func.isNotBlank(listR.getMsg()) ? listR.getMsg() : "涓氬姟绫诲瀷feign鎺ュ彛璋冪敤閿欒锛�"); } if (listR.getData().isEmpty()) { - throw new VciBaseException(Func.isNotBlank(listR.getMsg()) ? listR.getMsg() : "浼犲叆涓氬姟绫诲瀷鏈煡璇㈠埌鐩稿簲琛ㄥ崟锛岃妫�鏌ワ紒"); + throw new VciBaseException("浼犲叆涓氬姟绫诲瀷鏈煡璇㈠埌鐩稿簲琛ㄥ崟锛岃妫�鏌ワ紒"); } + // TODO:鍙傜収閰嶇疆鐨勬ā绯婃煡璇㈣繃婊ゆ潯浠舵殏鏈鐞� String namesql = ""; if (StringUtils.isNotBlank(baseQueryObject.getConditionMap().get("name"))) { String s = baseQueryObject.getConditionMap().get("name"); @@ -3601,8 +4393,8 @@ List<Map> maps = commonsMapper.selectBySql("select * from ( select rownum rn, t.* from (select * from " + listR.getData().get(0).getTableName() + SPACE + (StringUtils.isNotBlank(listR.getData().get(0).getRevisionRuleId()) ? (" where lastr = " + VciBaseUtil.toInSql(baseQueryObject.getConditionMap().get("lastr").toString()) + " and lastv =" + VciBaseUtil.toInSql(baseQueryObject.getConditionMap().get("lastv").toString())) + " and" : "where") + SPACE + "1=1 " - + lcstatusSql + namesql + codesql + ") t where rownum <=" + num1 + ") where rn >=" + num2 - ); + + lcstatusSql + namesql + codesql + ") t "+ (baseQueryObject.getLimit()==-1?")": ("where rownum <=" + num1 + ") where rn >=" + num2) + )); List<BaseModel> baseModels = new ArrayList<>(); //灏嗘煡璇㈠埌鐨勬暟鎹浆鎹负basemodel锛屼娇鐢ㄧ殑鍙嶅皠鏂瑰紡鏉ヨ繘琛屽垱寤虹殑 try { @@ -3620,27 +4412,28 @@ ZonedDateTime zdt = localDateTime.atZone(zoneId); Date date = Date.from(zdt.toInstant()); setter.invoke(obj, date); - map.remove(property.getName().toUpperCase()); + //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()); + //map.remove(property.getName().toUpperCase()); } else if (map.get(property.getName().toUpperCase()) != null) { 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()); + //map.remove(property.getName().toUpperCase()); } } } for (Object key : map.keySet()) { map.put(key, String.valueOf(map.get(key))); } - - ((BaseModel) obj).setData(map); + Map<String, String> newMap = new HashMap<>(); + map.forEach((key, value) -> newMap.put(String.valueOf(key).toLowerCase(), String.valueOf(value))); + ((BaseModel) obj).setData(newMap); baseModels.add((BaseModel) obj); } } catch (Exception e) { @@ -3651,10 +4444,10 @@ + "and lastv = " + VciBaseUtil.toInSql(baseQueryObject.getConditionMap().get("lastv").toString())) + " and" : "where") + SPACE + "1=1 " + lcstatusSql + namesql + codesql ); - IPage<BaseModel> objectDataGrid = new Page<>(); + IPage<BaseModelVO> objectDataGrid = new Page<>(); objectDataGrid.setPages(baseQueryObject.getPage()); objectDataGrid.setCurrent(baseQueryObject.getPage()); - objectDataGrid.setRecords(baseModels); + objectDataGrid.setRecords(BaseMdodelWrapper.build().listVO(baseModels)); objectDataGrid.setSize(baseQueryObject.getLimit()); objectDataGrid.setTotal(total); return objectDataGrid; @@ -3780,7 +4573,6 @@ return revisionModelUtil.doList2Trees(codeClassifies, treeWrapperOptions, null); } - @Override public boolean checkUnAttrUnEdit(String attrName) { return (VciQueryWrapperForDO.OID_FIELD.equalsIgnoreCase(attrName) @@ -3813,25 +4605,44 @@ toBo.setNameOid(fromBo.getNameOid()); toBo.setBtmname(fromBo.getBtmname()); toBo.setLastR(String.valueOf(1)); - toBo.setFirstR(String.valueOf(1)); + // 鍗囩増灏咶irstR淇敼涓�0 + toBo.setFirstR(String.valueOf(0)); toBo.setFirstV(String.valueOf(1)); toBo.setLastV(String.valueOf(1)); - toBo.setCreator(String.valueOf(AuthUtil.getUser().getUserId())); - toBo.setCreateTime(new Date()); - toBo.setLastModifier(String.valueOf(AuthUtil.getUser().getUserId())); + // 鏁版嵁鍗囩増涓嶉渶瑕侀噸鏂拌缃垱寤轰汉锛屽彧瀵规渶鍚庝慨鏀逛汉鍋氭洿鏂板氨鍙互浜� + //toBo.setCreator(String.valueOf(AuthUtil.getUser().getUserId())); + toBo.setCreateTime(fromBo.getCreateTime()); + // toBo.setLastModifier(String.valueOf(AuthUtil.getUser().getUserId())); + toBo.setLastModifier(String.valueOf(AuthUtil.getUser().getAccount())); toBo.setLastModifyTime(new Date()); toBo.setRevisionRule(fromBo.getRevisionRule()); - toBo.setVersionRule(fromBo.getVersionRule());R<List<BtmTypeVO>> listR = btmTypeClient.selectByIdCollection(Collections.singletonList(fromBo.getBtmname())); + toBo.setVersionRule(fromBo.getVersionRule()); + //鏌ヨ涓氬姟绫诲瀷淇℃伅锛屽彲浠ヨ幏鍙栧埌鐗堟湰瑙勫垯淇℃伅锛坮evisionRuleId锛� + R<List<BtmTypeVO>> listR = btmTypeClient.selectByIdCollection(Collections.singletonList(fromBo.getBtmname())); if (!listR.isSuccess() || listR.getData().size() == 0) { throw new VciBaseException("浼犲叆涓氬姟绫诲瀷鏈煡璇㈠埌鐩稿簲琛ㄥ崟锛岃妫�鏌ワ紒"); } - Map<String, Object> nextRevision = commonsMapper.getNextRevision(listR.getData().get(0).getTableName(), fromBo.getNameOid()); - toBo.setRevisionSeq(Integer.parseInt(nextRevision.get("REVISIONSEQ").toString())); - toBo.setRevisionValue(nextRevision.get("REVISIONVAL").toString()); + //Map<String, Object> nextRevision = commonsMapper.getNextRevision(listR.getData().get(0).getTableName(), fromBo.getNameOid()); + /* + TODO:杩欐槸涓�涓緟鍚庢湡瀹屽杽鐨勫姛鑳斤紝鐩墠瀹炵幇鏂瑰紡鏄紝鍏堟煡璇㈠嚭褰撳墠鏁版嵁鐨勫ぇ鐗堟湰瑙勫垯锛� + 鐒跺悗鍐嶆煡璇笟鍔¤〃浣跨敤鐨勮鍒欑殑姝ラ暱鏄灏戠劧鍚庤绠楀嚭璇ュ崌鐗堜负澶氬皯 + */ + Map<String, Object> nextRevision = commonsMapper.getCurrentRevision(listR.getData().get(0).getTableName(), fromBo.getNameOid()); + R<RevisionRuleVO> revisionRuleVOR = revisionRuleClient.selectById(listR.getData().get(0).getRevisionRuleId()); + String revisionval = nextRevision.get("REVISIONVAL").toString(); + // 鏈煡璇㈠埌鐗堟湰瑙勫垯锛岄粯璁ょ洿鎺ョ粰澶х増鏈姞涓� + if(!revisionRuleVOR.isSuccess() || Func.isEmpty(revisionRuleVOR.getData())){ + revisionval = String.valueOf((Integer.parseInt(revisionval)+1)); + }else { + revisionval = String.valueOf(Integer.parseInt(revisionval)+revisionRuleVOR.getData().getSerialStep()); + } + toBo.setRevisionValue(revisionval); + toBo.setRevisionSeq(Integer.parseInt(nextRevision.get("REVISIONSEQ").toString())); toBo.setVersionSeq(Integer.valueOf(nextRevision.get("VERSIONSEQ").toString())); toBo.setVersionValue(nextRevision.get("VERSIONVAL").toString()); toBo.setLctid(fromBo.getLctid()); - toBo.setLcStatus("Editing"); + //toBo.setLcStatus("Editing"); + toBo.setLcStatus(CodeDefaultLC.RELEASED.getValue()); toBo.setId(fromBo.getId()); toBo.setName(fromBo.getName()); toBo.setDescription(fromBo.getDescription()); @@ -3840,6 +4651,22 @@ toBo.getData().putAll(fromBo.getData()); toBo.getData().put("CHECKINBY", String.valueOf(AuthUtil.getUser().getUserId())); return toBo; - } + + /** + * 娴佺▼涓彉鏇寸姸鎬佸�� + * @param flowDTO + * @return + */ + @Override + public R processChangeStatus(FlowStatusDTO flowDTO) { + flowDTO.getOids().forEach(s -> { + BaseModelDTO baseModel = new BaseModelDTO(); + baseModel.setOid(s); + baseModel.setBtmname(flowDTO.getBtmType()); + baseModel.setLcStatus(String.valueOf(flowDTO.getVariableMap().getOrDefault("statusValue","Auditing"))); + changeStatus(baseModel); + }); + return R.success("鎴愬姛"); + } } -- Gitblit v1.9.3