| | |
| | | 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; |
| | |
| | | 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.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 java.beans.PropertyDescriptor; |
| | | import java.lang.reflect.Method; |
| | | import java.math.BigDecimal; |
| | | import java.text.ParseException; |
| | | import java.text.SimpleDateFormat; |
| | | import java.time.LocalDateTime; |
| | | import java.time.ZoneId; |
| | | import java.time.ZonedDateTime; |
| | |
| | | throw new VciBaseException("更新数据出错,重试!"+r.getMsg()); |
| | | } |
| | | } |
| | | // 刚好顺序是一致的,所以直接按照codeallcode的顺序来拿业务数据 |
| | | int i = -1; |
| | | for (CodeAllCode codeCbo : codeCbos) { |
| | | codeCbo.setLcStatus(baseModelDTO.getLcStatus()); |
| | | // 如果是回收,就需要将业务数据存储到码值表中 |
| | | if(baseModelDTO.getLcStatus().equals(FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_TAKEBACK)){ |
| | | codeCbo.setBusinessData(JSON.toJSONString(baseModels.get(++i))); |
| | | } |
| | | } |
| | | codeAllCodeService.updateBatchById(codeCbos); |
| | | |
| | |
| | | ); |
| | | }catch (Exception e){ |
| | | // 插入更改日志记录 |
| | | saveLogUtil.operateLog(CodeDefaultLC.getTextByValue(baseModelDTO.getLcStatus()),true,e.getMessage()); |
| | | saveLogUtil.operateLog(CodeDefaultLC.getTextByValue(baseModelDTO.getLcStatus()),true,e.toString()); |
| | | throw e; |
| | | } |
| | | } |
| | |
| | | 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.判断必输项 |
| | |
| | | //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")); |
| | | } |
| | |
| | | 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) : ""; |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 设置新的值到申请对象上 |
| | | * |
| | |
| | | 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 + ")"; |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取统计分析数据 |
| | | * @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); |
| | | |
| | | //当年每月月份之前之和 |
| | | List<Integer> monthCount = new ArrayList<>(12); |
| | | //当年每月的月份数据 |
| | | List<Integer> month = new ArrayList<>(); |
| | | //获取当前月的数字 |
| | | Calendar instance = Calendar.getInstance(); |
| | | int nowmonth = instance.get(Calendar.MONTH) + 1; |
| | | if(maps.size() == 0){ |
| | | nowmonth = 0; |
| | | } |
| | | //从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 当前的值 |
| | |
| | | temp = "%s"; |
| | | } |
| | | queryKey = String.format(temp, "nvl("+ "t." + attrId +",'/')"); |
| | | queryValue = String.format(temp, "'" + (trim ? value.trim() : value) + "'"); |
| | | queryValue = String.format(temp, "'" + (trim ? SpecialCharacterConverter.escapeSpecialCharacters(value.trim()):SpecialCharacterConverter.escapeSpecialCharacters(value)) + "'"); |
| | | conditionMap.put(queryKey, queryValue); |
| | | } else { |
| | | if(StringUtils.isNotBlank(value)) { |
| | | //为空的时候不代表不校验,只是不去除相关的信息 |
| | | conditionMap.put("nvl("+ "t." + attrId+",'/')", "'" + value + "'"); |
| | | conditionMap.put("nvl("+ "t." + attrId+",'/')", "'" + SpecialCharacterConverter.escapeSpecialCharacters(value) + "'"); |
| | | }else{ |
| | | conditionMap.put("t." + attrId, QueryOptionConstant.ISNULL); |
| | | } |
| | |
| | | } else { |
| | | 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); |
| | |
| | | return getSqlByValue(key, value, attrVOMap,btmType); |
| | | } |
| | | }*/ |
| | | |
| | | } |
| | | |
| | | /** |
| | |
| | | } |
| | | DateConverter dateConverter = new DateConverter(); |
| | | if (VciFieldTypeEnum.VTDateTime.equals(fieldTypeEnum)) { |
| | | //实际上,数据库都是timestamp的类型. |
| | | dateConverter.setAsText(value); |
| | | return "to_date('" + dateConverter.getAsText(VciDateUtil.DateTimeFormat) + "','" + DATETIME_FORMAT + "')"; |
| | | //实际上,数据库都是timestamp的类型. TODO:虽然没能解决查询日期的问题,但是能暂时解决报错问题 |
| | | if(value.contains("*")){ |
| | | value = value.replace("*","%"); |
| | | return "'" + value + "'"; |
| | | }else{ |
| | | value = value.replace("*",""); |
| | | dateConverter.setAsText(value); |
| | | return "to_date('" + dateConverter.getAsText(VciDateUtil.DateTimeFormat) + "','" + DATETIME_FORMAT + "')"; |
| | | } |
| | | } else if (VciFieldTypeEnum.VTDate.equals(fieldTypeEnum)) { |
| | | dateConverter.setAsText(value); |
| | | return "to_date('" + dateConverter.getAsText(VciDateUtil.DateFormat) + "','" + DATE_FORMAT + "')"; |
| | | if(value.contains("*")){ |
| | | value = value.replace("*","%"); |
| | | return "'" + value + "'"; |
| | | }else { |
| | | value = value.replace("*",""); |
| | | dateConverter.setAsText(value); |
| | | return "to_date('" + dateConverter.getAsText(VciDateUtil.DateFormat) + "','" + DATE_FORMAT + "')"; |
| | | } |
| | | } else if (VciFieldTypeEnum.VTDouble.equals(fieldTypeEnum) |
| | | || VciFieldTypeEnum.VTLong.equals(fieldTypeEnum) |
| | | || VciFieldTypeEnum.VTInteger.equals(fieldTypeEnum)) { |
| | |
| | | } |
| | | conditionMap.put("t.lastr", "1"); |
| | | conditionMap.put("t.lastv", "1"); |
| | | return queryGrid(btmTypeId, templateVO, conditionMap, pageHelper); |
| | | DataGrid<Map<String, String>> mapDataGrid = queryGrid(btmTypeId, templateVO, conditionMap, pageHelper); |
| | | //处理返回数据与模板数据配置的字段不一样问题 |
| | | templateVO.getAttributes().stream().forEach(e->{ |
| | | for (Map<String, String> datum : mapDataGrid.getData()) { |
| | | if(datum.containsKey(e.getId().toLowerCase()) && !datum.containsKey(e.getId())){ |
| | | datum.put(e.getId(),datum.get(e.getId().toLowerCase())); |
| | | datum.remove(e.getId().toLowerCase()); |
| | | } |
| | | } |
| | | }); |
| | | return mapDataGrid; |
| | | // List<String> selectFieldList = templateVO.getAttributes().stream().map(CodeClassifyTemplateAttrVO::getId).collect(Collectors.toList()); |
| | | // //参照让平台直接查询就行 |
| | | // List<String> finalSelectFieldList = selectFieldList; |
| | |
| | | updateBatchByBaseModel(oldCbo.getBtmname(), Collections.singletonList(oldCbo)); |
| | | // 插入新的数据 |
| | | insertBatchByType(cbo.getBtmname(), Collections.singletonList(cbo)); |
| | | //处理码值表,对码值表进行处理替换创建数据的oid |
| | | 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.getMessage()); |
| | | saveLogUtil.operateLog("数据更改",true,vciError.toString()); |
| | | throw new VciBaseException("数据更改保存出错了", new String[0], vciError); |
| | | } |
| | | |
| | |
| | | dataList.add(cbo); |
| | | wrapperData(dataList, templateVO, sqlBO.getSelectFieldList(), true); |
| | | R<List<Map<String, String>>> result = R.data(Collections.singletonList(cbo)); |
| | | //处理返回数据与模板数据配置的字段不一样问题 |
| | | templateVO.getAttributes().stream().forEach(e->{ |
| | | for (Map<String, String> datum : result.getData()) { |
| | | if(datum.containsKey(e.getId().toLowerCase()) && !datum.containsKey(e.getId())){ |
| | | datum.put(e.getId(),datum.get(e.getId().toLowerCase())); |
| | | datum.remove(e.getId().toLowerCase()); |
| | | } |
| | | } |
| | | }); |
| | | |
| | | //我们要看是否不是升版的,升版的话,需要对比不相等的属性 |
| | | /* String copy = cbo.get("copyfromversion"); |
| | | // if (StringUtils.isBlank(copy)) { |
| | |
| | | bo.setFirstV("1"); |
| | | bo.setLastV("1"); |
| | | bo.setRevisionRule(listR.getData().get(0).getRevisionRuleId()); |
| | | bo.setVersionRule("".equals(listR.getData().get(0).getVersionRule())?"0":listR.getData().get(0).getVersionRule()); |
| | | bo.setVersionRule("".equals(listR.getData().get(0).getVersionRule())?"1":listR.getData().get(0).getVersionRule()); |
| | | if (StringUtils.isNotBlank(listR.getData().get(0).getRevisionRuleId())) { |
| | | R<List<RevisionRuleVO>> revisionRuleVO = revisionRuleClient |
| | | .selectByIdCollection(Collections.singletonList(listR.getData().get(0).getRevisionRuleId().toLowerCase())); |
| | |
| | | bo.setId(""); |
| | | bo.setName(""); |
| | | bo.setDescription(""); |
| | | bo.setOwner("1"); |
| | | bo.setOwner(AuthUtil.getUser().getUserId().toString()); |
| | | // bo.setCheckinby(userName); |
| | | bo.setCopyFromVersion(""); |
| | | // this.initTypeAttributeValue(bo,btmTypeVO); |