diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/api/user/OriginalBomApi.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/api/user/OriginalBomApi.java index 35887dcf..674aecec 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/api/user/OriginalBomApi.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/api/user/OriginalBomApi.java @@ -114,9 +114,9 @@ public class OriginalBomApi extends BaseApi { @Transactional(rollbackFor = Exception.class) @LogRecord(success = "从cad获取bom到原始BOM,操作结果:{{#_ret}}", bizNo = "" ,type = "从CAD获取BOM数据") - public ResultVO> pullFromPlm() { + public ResultVO> pullFromCad() { - List result = originalParentService.pullFromPlm(SessionUtil.getUserCode()); + List result = originalParentService.pullFromCad(SessionUtil.getUserCode()); originalParentService.computeLevelNumAndRootState(); diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/constant/OriginalConstant.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/constant/OriginalConstant.java index d5ebac36..0d338063 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/constant/OriginalConstant.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/constant/OriginalConstant.java @@ -11,4 +11,6 @@ public class OriginalConstant { public static final String COMMON_MATERIAL_CATEGORY_CODE = "200901"; public static final String NO_BOM_VERSION="A-1"; + + public static final String DEFAULT_BOM_VERSION="A00"; } diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/BomNewEbomParentService.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/BomNewEbomParentService.java index 42491a12..12d657f2 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/BomNewEbomParentService.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/BomNewEbomParentService.java @@ -117,8 +117,8 @@ public class BomNewEbomParentService extends ServiceImpl materialBoms = this.lambdaQuery().eq(BomNewEbomParentEntity::getMaterialNo, materialNo).eq(BomNewEbomParentEntity::getLastVersionIs, 1) - .ne(BomNewEbomParentEntity::getStatus, EBomStatusEnum.PUBLISHED.getValue()).list(); - if (query.getDataType().equals(0) && CollUtil.isEmpty(materialBoms)) { + .eq(BomNewEbomParentEntity::getStatus, EBomStatusEnum.PUBLISHED.getValue()).list(); + if (query.getDataType().equals(0) && CollUtil.isNotEmpty(materialBoms)) { return returnResult; } List materialNos = new ArrayList<>(); @@ -645,9 +645,12 @@ public class BomNewEbomParentService extends ServiceImpl materialBoms = this.lambdaQuery().in(BomNewOriginalParentEntity::getDrawingNo, queryDrawingNos).eq(BomNewOriginalParentEntity::getLastVersionIs, 1) - .eq(BomNewOriginalParentEntity::getStatus, OriginalStatusEnum.UN_CONVERT.getValue()).list(); - if(query.getStatus().equals(1) && CollUtil.isEmpty(materialBoms)){ - return result; - } +// List materialBoms = this.lambdaQuery().in(BomNewOriginalParentEntity::getDrawingNo, queryDrawingNos).eq(BomNewOriginalParentEntity::getLastVersionIs, 1) +// .eq(BomNewOriginalParentEntity::getStatus, OriginalStatusEnum.UN_CONVERT.getValue()).list(); +// if(query.getStatus().equals(1) && CollUtil.isEmpty(materialBoms)){ +// return result; +// } List parentDrawingNos = new ArrayList<>(getParentDrawingNoByMaterialNo(queryDrawingNos)); parentDrawingNos.addAll(queryDrawingNos); if (CollUtil.isNotEmpty(parentDrawingNos)) { List parents = this.getBaseMapper().getParentForDrawingNoSeach(parentDrawingNos, query.getStatus()); + materialMainService.intiMaterialInfo(parents, EBomConstant.EBOM_IGNORED_FIELDS_INIT_MATERIAL_DEFAULT); List childs = this.getBaseMapper().getChildForDrawingNoSeach(parentDrawingNos,query.getStatus()); - List data = new ArrayList<>(); - data.addAll(parents); - data.addAll(childs); - materialMainService.intiMaterialInfo(data, EBomConstant.EBOM_IGNORED_FIELDS_INIT_MATERIAL_DEFAULT); + materialMainService.intiMaterialInfo(childs, EBomConstant.EBOM_IGNORED_FIELDS_INIT_MATERIAL_DEFAULT); + childs.stream().filter(f -> StrUtil.isBlank(f.getCurrentVersion())).forEach(f -> { + if (MaterialshouldBomExistUtil.checkShouldBomExist(f.getMaterialCategoryCode(), f.getMaterialGetType())) { + f.setCurrentVersion(OriginalConstant.NO_BOM_VERSION); + } else { + f.setCurrentVersion(OriginalConstant.DEFAULT_BOM_VERSION); + } + }); +// List data = new ArrayList<>(); +// data.addAll(parents); +// data.addAll(childs); +// materialMainService.intiMaterialInfo(data, EBomConstant.EBOM_IGNORED_FIELDS_INIT_MATERIAL_DEFAULT); result = handSeachToTree(parents, childs); } } @@ -393,7 +402,7 @@ public class BomNewOriginalParentService extends ServiceImpl pullFromPlm(String userCode) { + public List pullFromCad(String userCode) { List parents = originalCadParentService.lambdaQuery().eq(BomOriginalCadParentEntity::getStatus, 1).eq(BomOriginalCadParentEntity::getCreatedBy, userCode).list(); VUtils.isTure(CollUtil.isEmpty(parents)).throwMessage("没有你的数据,你无需转换"); @@ -411,8 +420,8 @@ public class BomNewOriginalParentService extends ServiceImpl delRowIds = parents.stream().map(u -> u.getRowId()).collect(Collectors.toList()); + //删除cad临时表数据 + List delRowIds = parents.stream().map(BomOriginalCadParentEntity::getRowId).collect(Collectors.toList()); if (CollUtil.isNotEmpty(delRowIds)) { originalCadParentService.getBaseMapper().deleteBatchIds(delRowIds); originalCadParentService.getBaseMapper().delChildByParentRowIds(delRowIds); @@ -486,11 +495,11 @@ public class BomNewOriginalParentService extends ServiceImplf.getMaterialNo().trim().equalsIgnoreCase("无")).forEach(it->{ + it.setMaterialNo(""); + }); List noMaterialNoList = childs.stream().filter(u -> StrUtil.isBlank(u.getMaterialNo())).collect(Collectors.toList()); if(CollUtil.isNotEmpty(noMaterialNoList)){ SpringUtil.getBean(MaterialMainService.class).initMaterialForDrawdingNo(noMaterialNoList ,BomOriginalPlmBomVO::getDrawingNo,BomOriginalPlmBomVO::setMaterialNo,BomOriginalPlmBomVO::setMaterialName); diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/log/DbLogRecordServiceImpl.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/log/DbLogRecordServiceImpl.java index 0ebf58a3..ad06b9ce 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/log/DbLogRecordServiceImpl.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/log/DbLogRecordServiceImpl.java @@ -1,37 +1,43 @@ package com.nflg.product.bomnew.service.log; +import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.mzt.logapi.beans.LogRecord; import com.mzt.logapi.service.ILogRecordService; import com.nflg.product.base.core.conmon.util.SessionUtil; import com.nflg.product.bomnew.pojo.entity.BomNewLogEntity; import com.nflg.product.bomnew.service.BomNewLogService; +import com.nflg.product.bomnew.util.StringUtil; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; - import javax.annotation.Resource; import java.time.LocalDateTime; import java.util.List; @Service +@Slf4j public class DbLogRecordServiceImpl implements ILogRecordService { @Resource BomNewLogService logService; @Override public void record(LogRecord logRecord) { - - BomNewLogEntity logEnt=new BomNewLogEntity(); - logEnt.setRowId(IdWorker.getId()); - logEnt.setModelName(logRecord.getTenant()); - logEnt.setOpBizNo(logRecord.getBizNo()); - logEnt.setOpAction(logRecord.getType()); - logEnt.setOpContent(logRecord.getAction()); - logEnt.setOpContentExt(logRecord.getExtra()); - logEnt.setOpUserJobNo(SessionUtil.getUserCode()); - logEnt.setOpUserName(SessionUtil.getUserName()); - logEnt.setOpTime(LocalDateTime.now()); - logEnt.setDptName(SessionUtil.getDepartName()); - logService.save(logEnt); + BomNewLogEntity logEnt = new BomNewLogEntity(); + try { + logEnt.setRowId(IdWorker.getId()); + logEnt.setModelName(StringUtil.trimText(logRecord.getTenant(),60)); + logEnt.setOpBizNo(StringUtil.trimText(logRecord.getBizNo(),30)); + logEnt.setOpAction(StringUtil.trimText(logRecord.getType(),30)); + logEnt.setOpContent(StringUtil.trimText(logRecord.getAction(),600)); + logEnt.setOpContentExt(StringUtil.trimText(logRecord.getExtra(),4000)); + logEnt.setOpUserJobNo(StringUtil.trimText(SessionUtil.getUserCode(),20)); + logEnt.setOpUserName(StringUtil.trimText(SessionUtil.getUserName(),20)); + logEnt.setOpTime(LocalDateTime.now()); + logEnt.setDptName(SessionUtil.getDepartName()); + logService.save(logEnt); + } catch (Exception ex) { + log.error("保存操作日志出错:" + ex.getMessage() + ",数据:" + JSON.toJSONString(logEnt)); + } } @Override diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/util/HttpUtils.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/util/HttpUtils.java index ab9a4bd6..fadf73fe 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/util/HttpUtils.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/util/HttpUtils.java @@ -6,8 +6,6 @@ import com.nflg.product.base.core.exception.NflgBusinessException; import lombok.extern.slf4j.Slf4j; import nflg.product.common.constant.STATE; import okhttp3.*; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.springframework.http.HttpStatus; import java.io.File; @@ -26,8 +24,6 @@ public class HttpUtils { //请求类 private OkHttpClient okHttpClient; - private static final Logger LOGGER = LoggerFactory.getLogger(HttpUtils.class); - //请求头类型 private final MediaType jsonMediaType = MediaType.parse("application/json;charset=utf-8"); @@ -217,7 +213,7 @@ public class HttpUtils { public String doPost(String url, String json) throws IOException { String ret = null; String traceId = IdWorker.getIdStr(); - LOGGER.info(traceId + ",http请求,地址:" + url + ",参数:" + json); + log.info(traceId + ",http请求,地址:" + url + ",参数:" + json); long start = System.currentTimeMillis(); try (Response response = doPostRtnRsp(url, json)) { if (response == null || response.body() == null) { @@ -225,10 +221,10 @@ public class HttpUtils { } ret = response.body().string(); } catch (Exception ex) { - LOGGER.error(traceId + ",http请求,出错", ex); + log.error(traceId + ",http请求,出错", ex); } finally { long end = System.currentTimeMillis(); - LOGGER.info(traceId + ",http请求,耗时:" + (end - start) + "毫秒,返回:" + ret); + log.info(traceId + ",http请求,耗时:" + (end - start) + "毫秒,返回:" + ret); } return ret; } diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/util/MaterialshouldBomExistUtil.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/util/MaterialshouldBomExistUtil.java index 643e59e2..559cf1ab 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/util/MaterialshouldBomExistUtil.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/util/MaterialshouldBomExistUtil.java @@ -28,15 +28,12 @@ public class MaterialshouldBomExistUtil { } public static boolean checkShouldBomExist(BaseMaterialVO material){ - - if(StrUtil.isNotBlank(material.getMaterialCategoryCode()) && - (material.getMaterialCategoryCode().startsWith("30") || material.getMaterialCategoryCode().equals(OriginalConstant.COMMON_MATERIAL_CATEGORY_CODE) || - ( material.getMaterialCategoryCode().startsWith("20") && MaterialGetEnum.developing.equalsValue(material.getMaterialGetType()) ))){ - - return true; - } - return false; + return checkShouldBomExist(material.getMaterialCategoryCode(), material.getMaterialGetType()); + } + public static boolean checkShouldBomExist(String materialCategoryCode, Integer materialGetType){ + return StrUtil.isNotBlank(materialCategoryCode) && + (materialCategoryCode.startsWith("30") || materialCategoryCode.equals(OriginalConstant.COMMON_MATERIAL_CATEGORY_CODE) || + (materialCategoryCode.startsWith("20") && MaterialGetEnum.developing.equalsValue(materialGetType))); } - } diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/util/StringUtil.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/util/StringUtil.java new file mode 100644 index 00000000..e477ef0f --- /dev/null +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/util/StringUtil.java @@ -0,0 +1,107 @@ +package com.nflg.product.bomnew.util; + +/** + * @author 曹鹏飞 + * @date 2024-03-29 16:52:05 + */ +public class StringUtil { + + public static String subString(String input,int maxLen){ + if (input == null) { + return null; + } + + int byteCount = 0; + int charCount = 0; + StringBuilder sb = new StringBuilder(); + + // 遍历字符串的每一个字符 + for (int i = 0; i < input.length(); i++) { + char c = input.charAt(i); + + // 检查字符是否是双字节或多字节字符,这里简单地通过Character.isHighSurrogate检查,适用于大部分情况 + if (Character.isHighSurrogate(c)) { + // 如果是高代理项,则下一个字符也是有效部分,一起计算长度 + if (i + 1 < input.length() && Character.isLowSurrogate(input.charAt(i + 1))) { + sb.append(c); + sb.append(input.charAt(i + 1)); + i++; // 跳过低代理项 + byteCount += 3; // 中文等宽字体一般认为占3个长度单位 + charCount += 1; // Unicode字符数增加1 + } else { + // 不完整的 surrogate pair,跳过 + continue; + } + } else if (c > '\u00ff') { // 这里假设非代理项的非ASCII字符都按3个长度单位计算 + sb.append(c); + byteCount += 3; + charCount += 1; + } else { + sb.append(c); + byteCount += 1; + charCount += 1; + } + + if (byteCount > maxLen) { + break; + } + } + + return sb.toString(); + } + + /** + * 截取文本,只取30个有效长度,每个中文占用3个长度,其余字符占用1个长度。 + * + * @param text 需要截取的文本 + * @param maxLength 有效长度上限 + * @return 截取后的文本 + */ + public static String trimText(String text, int maxLength) { + if (text == null || text.isEmpty()) { + return text; + } + + int lengthCount = 0; // 用于记录有效长度 + StringBuilder trimmedStringBuilder = new StringBuilder(); + + for (char c : text.toCharArray()) { + if (isChineseCharacter(c)) { + // 如果是中文字符,检查剩余有效长度是否足够3个长度 + if (lengthCount + 3 <= maxLength) { + trimmedStringBuilder.append(c); + lengthCount += 3; + } else { + // 不足3个长度,直接返回已截取的文本 + return trimmedStringBuilder.toString(); + } + } else { + // 非中文字符,检查剩余有效长度是否足够1个长度 + if (lengthCount + 1 <= maxLength) { + trimmedStringBuilder.append(c); + lengthCount++; + } else { + // 不足1个长度,直接返回已截取的文本 + return trimmedStringBuilder.toString(); + } + } + } + + return trimmedStringBuilder.toString(); + } + + /** + * 检查字符是否为中文字符。 + * + * @param ch 需要检查的字符 + * @return 如果是中文字符则返回true,否则返回false + */ + private static boolean isChineseCharacter(char ch) { + Character.UnicodeBlock block = Character.UnicodeBlock.of(ch); + return block == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS + || block == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS + || block == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A + || block == Character.UnicodeBlock.GENERAL_PUNCTUATION + || block == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS; + } +} diff --git a/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/BomNewOriginalParentMapper.xml b/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/BomNewOriginalParentMapper.xml index 4f560eb6..35ba020a 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/BomNewOriginalParentMapper.xml +++ b/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/BomNewOriginalParentMapper.xml @@ -216,8 +216,9 @@