Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/DefaultAttrAssimtUtil.java
@@ -4,6 +4,7 @@ import com.vci.ubcs.starter.exception.VciBaseException; import com.vci.ubcs.starter.revision.model.BaseModel; import com.vci.ubcs.starter.web.util.VciBaseUtil; import org.springblade.core.secure.BladeUser; import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.tool.utils.Func; import java.text.ParseException; @@ -65,6 +66,52 @@ } /** * 当在多线程流中调用时,获取不到请求头信息, * 所以得在多线程流外面获取到request * @param object 继承了BaseModel的实体对象 * @param <T> 返回值的类型 * @param btmName 业务类型 * @return * @throws VciBaseException */ public static <T extends BaseModel> T addDefaultAttrAssimt(T object, String btmName, BladeUser user) throws VciBaseException { BaseModel baseModel = object; try { baseModel.setOid(VciBaseUtil.getPk()); baseModel.setCreateTime(new Date()); baseModel.setNameOid(VciBaseUtil.getPk()); baseModel.setLastModifyTime(new Date()); baseModel.setTs(new Date()); baseModel.setRevisionOid(VciBaseUtil.getPk()); baseModel.setBtmname(btmName); String account = Func.isNotEmpty(user) ? user.getAccount():AuthUtil.getUser().getAccount(); baseModel.setCreator(account); baseModel.setFirstR("1"); baseModel.setFirstV("1"); baseModel.setLastR("1"); baseModel.setLastV("1"); baseModel.setRevisionSeq(1); // TODO:目前只有编码规则中有用到,后期需要去掉这段代码的话,就把他加在编码规则新增中去 if(Func.isBlank(baseModel.getOwner())){ // 设置所有者 baseModel.setOwner(Func.isNotEmpty(user) ? user.getUserId().toString():AuthUtil.getUserId().toString()); } baseModel.setVersionSeq(1); baseModel.setVersionRule("0"); baseModel.setVersionValue("1"); baseModel.setRevisionOid(VciBaseUtil.getPk()); baseModel.setLastModifier(account); baseModel.setRevisionValue("1"); baseModel.setRevisionRule("1"); baseModel.setTenantId(Func.isNotEmpty(user) ? user.getTenantId():AuthUtil.getTenantId()); }catch (VciBaseException e){ e.printStackTrace(); } return (T)baseModel; } /** * 修改时填充默认值 * @param object 继承了BaseModel的实体对象 * @param <T> 返回值的类型 @@ -80,6 +127,28 @@ // String userId = AuthUtil.getUserId().toString(); // 要求改成账号 baseModel.setLastModifier(AuthUtil.getUser().getAccount()); }catch (VciBaseException e){ e.printStackTrace(); } return (T)baseModel; } /** * 修改时填充默认值:多线程流中调用 * @param object 继承了BaseModel的实体对象 * @param <T> 返回值的类型 * @return * @throws VciBaseException */ public static <T extends BaseModel> T updateDefaultAttrAssimt(T object, BladeUser user) throws VciBaseException { BaseModel baseModel = object; try { baseModel.setLastModifyTime(new Date()); baseModel.setTs(new Date()); // 用户id // String userId = AuthUtil.getUserId().toString(); // 要求改成账号 baseModel.setLastModifier(Func.isNotEmpty(user) ? user.getAccount():AuthUtil.getUser().getAccount()); }catch (VciBaseException e){ e.printStackTrace(); } @@ -164,6 +233,84 @@ return (T)baseModel; } /** * 新增时填充默认值:多线程流中调用 * @param object 继承了BaseModel的实体对象 * @param <T> 返回值的类型 * @return * @throws VciBaseException */ public static <T extends BaseModel> T copplyDefaultAttrAssimt(Map<String,String> dataMap, T object, BladeUser user) throws VciBaseException { BaseModel baseModel = object; try { SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); baseModel.setOid(dataMap.getOrDefault("OID","")); baseModel.setId(dataMap.getOrDefault("ID","")); Map<String,Object> newDataMap=new HashMap<>(); /*for (String key:dataMap.keySet()){ Object value=dataMap.get(key); newDataMap.put(key.toLowerCase(Locale.ROOT),value); }*/ /* dataMap.forEach((key,value)->{ newDataMap.put(key.toLowerCase(Locale.ROOT),value); });*/ //baseModel.setData((Map)newDataMap); Object createTimeObj=dataMap.getOrDefault("CREATETIME",""); if(createTimeObj!=null) { String createTime = createTimeObj.toString(); baseModel.setCreateTime(chageStringToDate(createTime)); } baseModel.setNameOid(dataMap.getOrDefault("NAMEOID","")); Object lastModifyTimeObj=dataMap.getOrDefault("LASTMODIFYTIME",""); if(lastModifyTimeObj!=null) { String lastModifyTime = lastModifyTimeObj.toString(); baseModel.setLastModifyTime(chageStringToDate(lastModifyTime)); } Object tsObj=dataMap.getOrDefault("TS",""); if(tsObj!=null) { String ts = tsObj.toString(); baseModel.setTs(chageStringToDate(ts)); } baseModel.setRevisionOid(dataMap.getOrDefault("REVISIONOID","")); //用户id ; 要求改成了账号 // String userId = AuthUtil.getUserId().toString(); baseModel.setBtmname(dataMap.getOrDefault("BTMNAME","")); baseModel.setCreator(dataMap.getOrDefault("CREATOR","")); baseModel.setFirstR(dataMap.getOrDefault("FIRSTR","")); baseModel.setFirstV(dataMap.getOrDefault("FIRSTV","")); baseModel.setLastR(dataMap.getOrDefault("LASTR","")); baseModel.setLastV(dataMap.getOrDefault("LASTV","")); Object revisionseq =dataMap.getOrDefault("REVISIONSEQ",""); if(revisionseq!=null){ baseModel.setRevisionSeq(chageStringToInt(revisionseq.toString())); } baseModel.setOwner(dataMap.getOrDefault("OWNER","")); Object versionseq =dataMap.getOrDefault("VERSIONSEQ",""); if(versionseq!=null){ baseModel.setVersionSeq(chageStringToInt(versionseq.toString())); } baseModel.setVersionRule(dataMap.getOrDefault("VERSIONRULE","")); baseModel.setVersionValue(dataMap.getOrDefault("VERSIONVALUE","")); baseModel.setRevisionOid(dataMap.getOrDefault("REVISIONOID","")); baseModel.setLastModifier(Func.isNotEmpty(user) ? user.getAccount():AuthUtil.getUser().getAccount()); baseModel.setLcStatus(dataMap.getOrDefault("LCSTATUS","")); baseModel.setName(dataMap.getOrDefault("NAME","")); baseModel.setTenantId(dataMap.getOrDefault("TENADTID","")); baseModel.setDescription(dataMap.getOrDefault("DESCRIOTION","")); baseModel.setCopyFromVersion(dataMap.getOrDefault("COPYFROMVERSION","")); Object secretgrade=dataMap.get("SECRETGRADE"); if(secretgrade!=null){ baseModel.setSecretGrade(chageStringToInt(secretgrade.toString())); } }catch (VciBaseException e){ e.printStackTrace(); throw e; } return (T)baseModel; } private static int chageStringToInt(String value){ int newValue=0; if(StringUtils.isNotBlank(value)){ @@ -184,4 +331,5 @@ } return date; } } Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/MdmProductCodeService.java
@@ -5,6 +5,7 @@ import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateVO; import com.vci.ubcs.code.vo.pagemodel.CodeRuleVO; import com.vci.ubcs.starter.revision.model.BaseModel; import org.springblade.core.secure.BladeUser; import java.util.Collection; import java.util.List; @@ -20,7 +21,7 @@ * @param dataCBOList 业务数据 */ List<String> productCodeAndSaveData(CodeClassifyFullInfoBO classifyFullInfoBO, CodeClassifyTemplateVO templateVO, CodeRuleVO ruleVO, List<CodeOrderSecDTO> secDTOList, List<BaseModel> dataCBOList) throws Exception; CodeRuleVO ruleVO, List<CodeOrderSecDTO> secDTOList, List<BaseModel> dataCBOList, BladeUser user) throws Exception; /** * 回收码值 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java
@@ -68,6 +68,7 @@ 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; @@ -505,6 +506,7 @@ 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.判断必输项 @@ -535,13 +537,13 @@ //cbo.setCreator(String.valueOf(AuthUtil.getUser().getUserId()));、 if(authUser) { // 要求显示账号,所以做了更改 cbo.setCreator(String.valueOf(AuthUtil.getUser().getAccount())); cbo.setLastModifier(String.valueOf(AuthUtil.getUser().getAccount())); cbo.setCreator(String.valueOf(user.getAccount())); cbo.setLastModifier(String.valueOf(user.getAccount())); }else{ cbo.setCreator(orderDTO.getCreator()); cbo.setLastModifier(orderDTO.getLastModifier()); } cbo.setTenantId(AuthUtil.getTenantId()); 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")); } @@ -554,7 +556,7 @@ cbo.setDescription(orderDTO.getDescription()); 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); batchSaveSelectChar(templateVO, cboList); return codeList.size() > 0 ? codeList.get(0) : ""; Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java
@@ -58,6 +58,7 @@ import org.apache.poi.ss.usermodel.RichTextString; import org.apache.poi.ss.usermodel.Workbook; import org.springblade.core.redis.cache.BladeRedis; import org.springblade.core.secure.BladeUser; import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.Func; @@ -1206,6 +1207,7 @@ //SessionInfo sessionInfo = VciBaseUtil.getCurrentUserSessionInfo(); List<ClientBusinessObject> finalNeedSaveCboList = needSaveCboList; CodeClassifyTemplateVO finalTemplateVO = templateVO; final BladeUser user = AuthUtil.getUser(); ruleRowIndexMap.keySet().parallelStream().forEach(ruleOid -> { //VciBaseUtil.setCurrentUserSessionInfo(sessionInfo); List<String> rowIndexList = ruleRowIndexMap.get(ruleOid); @@ -1222,7 +1224,7 @@ if (!CollectionUtils.isEmpty(thisCbos)) { try { // TODO 多线程流问题 productCodeService.productCodeAndSaveData(classifyFullInfo, finalTemplateVO, ruleVOMap.get(ruleOid), null, dataCBOList); productCodeService.productCodeAndSaveData(classifyFullInfo, finalTemplateVO, ruleVOMap.get(ruleOid), null, dataCBOList,user); importCount.add(dataCBOList.size()); } catch (Throwable e) { log.error("批量产生编码的时候出错了", e); @@ -1674,7 +1676,7 @@ createRedisDatas(uuid + "-ok",templateVO, rowIndexCboMap, dataSet, fieldIndexMap, newErrorMap,true); }else { uuid=""; final BladeUser user = AuthUtil.getUser(); //要把以上的错误的都抛出后,再继续处理时间和组合规则 needSaveCboList = cboList.stream().filter(cbo -> { String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX); @@ -1694,7 +1696,7 @@ dataCBOIdList.add(baseModel.getOid()); }); try { codeList = productCodeService.productCodeAndSaveData(classifyFullInfo,templateVO,ruleVO, orderDTO.getSecDTOList(),dataCBOList); codeList = productCodeService.productCodeAndSaveData(classifyFullInfo,templateVO,ruleVO, orderDTO.getSecDTOList(),dataCBOList,user); //如果是编码生成失败,则直接就失败了,其他的判断出来有错误的我们都统一返回到excel里面 engineService.batchSaveSelectChar(templateVO, dataCBOList); } catch (Exception e) { @@ -2109,7 +2111,8 @@ }).collect(Collectors.toList()); List<ClientBusinessObject> finalNeedSaveCboList = needSaveCboList; Map<String, CodeRuleVO> finalRuleVOMap = ruleVOMap; // TODO: 多线程流套多线程流,有坑,我把这儿改了 // TODO: 多线程流套多线程流,有坑,我把这儿改成单线程了 final BladeUser user = AuthUtil.getUser(); ruleRowIndexMap.keySet().stream().forEach(ruleOid -> { List <BaseModel>dataCBOList=new CopyOnWriteArrayList<>(); List<String> rowIndexList = ruleRowIndexMap.get(ruleOid); @@ -2121,7 +2124,7 @@ dataCBOList.add(baseModel); }); try { productCodeService.productCodeAndSaveData(classifyFullInfo, codeClassifyTemplateVO, finalRuleVOMap.get(ruleOid), null, dataCBOList); productCodeService.productCodeAndSaveData(classifyFullInfo, codeClassifyTemplateVO, finalRuleVOMap.get(ruleOid), null, dataCBOList, user); } catch (Throwable e) { //success=false; log.error("批量产生编码的时候出错了", e); @@ -2134,6 +2137,7 @@ engineService.batchSaveSelectChar(codeClassifyTemplateVO, dataCBOList); }); }else { final BladeUser user = AuthUtil.getUser(); List<BaseModel> dataCBOList=new ArrayList<>(); List<ClientBusinessObject> needSaveCboList = cboList.stream().filter(cbo -> { String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX); @@ -2147,7 +2151,7 @@ dataCBOList.add(baseModel); }); try { productCodeService.productCodeAndSaveData(classifyFullInfo, codeClassifyTemplateVO, ruleVO, orderDTO.getSecDTOList(), dataCBOList); productCodeService.productCodeAndSaveData(classifyFullInfo, codeClassifyTemplateVO, ruleVO, orderDTO.getSecDTOList(), dataCBOList,user); } catch (Exception e) { log.error("批量产生编码的时候出错了", e); needSaveCboList.stream().forEach(cbo -> { @@ -2455,6 +2459,7 @@ List<String>allNeedSaveCboList=new ArrayList<>(); List<BaseModel> dataCBOList=new ArrayList<>(); final BladeUser user = AuthUtil.getUser(); needSaveCboList.stream().forEach(clientBusinessObject -> { BaseModel baseModel=new BaseModel(); BeanUtil.convert(clientBusinessObject,baseModel); @@ -2464,7 +2469,7 @@ }); try { List<String>applyGroupCodeIdList=new ArrayList<>(); productCodeService.productCodeAndSaveData(classifyFullInfo, templateVO, ruleVO, orderDTO.getSecDTOList(), dataCBOList); productCodeService.productCodeAndSaveData(classifyFullInfo, templateVO, ruleVO, orderDTO.getSecDTOList(), dataCBOList,user); //如果是编码生成失败,则直接就失败了,其他的判断出来有错误的我们都统一返回到excel里面 engineService.batchSaveSelectChar(templateVO, dataCBOList); // if(!isProcess){ @@ -4260,6 +4265,7 @@ Map<String,List<BaseModel>> indexTODataMap=new ConcurrentHashMap<>(); // 查询不需要参与关键属性校验的除自己以外的所有分类oid final String isParticipateCheckOids = classifyService.selectLeafByParentClassifyOid(classifyFullInfo.getTopClassifyVO().getOid(), classifyFullInfo.getCurrentClassifyVO().getOid()); final BladeUser user = AuthUtil.getUser(); List<ClientBusinessObject> repeatDataMap = cboList.parallelStream().filter(cbo -> { //每行都得查询.如果其中出现了错误,我们就直接抛出异常,其余的显示 //VciBaseUtil.setCurrentUserSessionInfo(sessionInfo); @@ -4285,7 +4291,7 @@ List<BaseModel> newCboList = new ArrayList<>(); newDataList.stream().forEach(stringStringMap -> { BaseModel baseModel=new BaseModel(); DefaultAttrAssimtUtil.copplyDefaultAttrAssimt(stringStringMap,baseModel); DefaultAttrAssimtUtil.copplyDefaultAttrAssimt(stringStringMap,baseModel,user); baseModel.setData(stringStringMap); newCboList.add(baseModel); }); Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmProductCodeServiceImpl.java
@@ -36,6 +36,7 @@ import com.vci.ubcs.starter.web.util.VciDateUtil; import lombok.extern.slf4j.Slf4j; 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.utils.Func; import org.springblade.core.tool.utils.WebUtil; @@ -98,7 +99,7 @@ @Override @Transactional(rollbackFor = Exception.class) public List<String> productCodeAndSaveData(CodeClassifyFullInfoBO classifyFullInfoBO, CodeClassifyTemplateVO templateVO, CodeRuleVO ruleVO, List<CodeOrderSecDTO> secDTOList, List<BaseModel> dataCBOList) throws Exception { public List<String> productCodeAndSaveData(CodeClassifyFullInfoBO classifyFullInfoBO, CodeClassifyTemplateVO templateVO, CodeRuleVO ruleVO, List<CodeOrderSecDTO> secDTOList, List<BaseModel> dataCBOList,BladeUser user) throws Exception { dataCBOList = dataCBOList.stream().sorted(((o1, o2) -> o1.getCreateTime().compareTo(o2.getCreateTime()))).collect(Collectors.toList()); List<String> codeList = new ArrayList<>(); final CodeRuleVO finalRuleVO = ruleVO; @@ -203,7 +204,7 @@ }); } CodeAllCode allCodeDO = new CodeAllCode(); DefaultAttrAssimtUtil.addDefaultAttrAssimt(allCodeDO, MdmBtmTypeConstant.CODE_ALL_CODE); DefaultAttrAssimtUtil.addDefaultAttrAssimt(allCodeDO, MdmBtmTypeConstant.CODE_ALL_CODE,user); allCodeDO.setCodeClassifyOid(classifyFullInfoBO.getCurrentClassifyVO().getOid()); allCodeDO.setCodeRuleOid(finalRuleVO.getOid()); allCodeDO.setId(cbo.getId()); @@ -236,13 +237,13 @@ log.info("oldmaxSerial--->"+serialValueDO.getMaxSerial()+"---- newmaxSerial---->"+maxSerial); if(VciBaseUtil.getDouble(serialValueDO.getMaxSerial())<VciBaseUtil.getDouble(maxSerial)){ serialValueDO.setMaxSerial(String.valueOf(maxSerial)); DefaultAttrAssimtUtil.updateDefaultAttrAssimt(serialValueDO); DefaultAttrAssimtUtil.updateDefaultAttrAssimt(serialValueDO,user); editSerialValueList.add(serialValueDO); } }else{ //没有 CodeSerialValue serialValueDO = new CodeSerialValue(); DefaultAttrAssimtUtil.addDefaultAttrAssimt(serialValueDO, MdmBtmTypeConstant.CODE_SERIAL_VALUE); DefaultAttrAssimtUtil.addDefaultAttrAssimt(serialValueDO, MdmBtmTypeConstant.CODE_SERIAL_VALUE,user); serialValueDO.setCodeRuleOid(finalRuleVO.getOid()); serialValueDO.setSerialUnit(serialUnit); serialValueDO.setCodeSecOid(secOid); @@ -418,7 +419,7 @@ saveSerialValue( finalRuleVO, lastMaxSerialValueMap, maxSerialValueMap); allCodeDOList.stream().forEach( allCode -> {DefaultAttrAssimtUtil.addDefaultAttrAssimt(allCode,"codeallcode");allCode.setLctid("codeAllCodeLC");} allCode -> {DefaultAttrAssimtUtil.addDefaultAttrAssimt(allCode,"codeallcode",user);allCode.setLctid("codeAllCodeLC");} );