From e7b250fb8b2968f56f1d832b42ca8d95c9aabdb3 Mon Sep 17 00:00:00 2001 From: shenzhouyu Date: Thu, 30 Apr 2026 17:03:50 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=80=E6=A8=A1=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pms/controller/DmBasicController.java | 7 + .../sys/modules/pms/service/DmService.java | 3 + .../pms/service/Impl/DmFaiServiceImpl.java | 6 +- .../pms/service/Impl/DmServiceImpl.java | 174 ++++++++++++++---- 4 files changed, 151 insertions(+), 39 deletions(-) diff --git a/src/main/java/com/xujie/sys/modules/pms/controller/DmBasicController.java b/src/main/java/com/xujie/sys/modules/pms/controller/DmBasicController.java index 79bc1e6e..df01b840 100644 --- a/src/main/java/com/xujie/sys/modules/pms/controller/DmBasicController.java +++ b/src/main/java/com/xujie/sys/modules/pms/controller/DmBasicController.java @@ -396,4 +396,11 @@ public class DmBasicController { qcService.qcFamilyAttributeDelete(data); return R.ok(); } + + @PostMapping("/upload") + public R upload(@RequestParam("file") MultipartFile[] list, @ModelAttribute GetParamInData inData){ + List ossEntity = dmService.upload(list, inData); + return R.ok().put("ossEntity", ossEntity); + + } } diff --git a/src/main/java/com/xujie/sys/modules/pms/service/DmService.java b/src/main/java/com/xujie/sys/modules/pms/service/DmService.java index b25689ad..63587c7a 100644 --- a/src/main/java/com/xujie/sys/modules/pms/service/DmService.java +++ b/src/main/java/com/xujie/sys/modules/pms/service/DmService.java @@ -1,6 +1,7 @@ package com.xujie.sys.modules.pms.service; import com.xujie.sys.common.utils.PageUtils; +import com.xujie.sys.modules.oss.entity.SysOssEntity; import com.xujie.sys.modules.pms.data.*; import com.xujie.sys.modules.pms.entity.vo.CheckSubDetailValueVo; import org.springframework.web.multipart.MultipartFile; @@ -179,4 +180,6 @@ public interface DmService { void dmDeleteItemObject(EamObjectInData data); void dmUpdateItemObject(EamObjectInData data); + + List upload(MultipartFile[] list, GetParamInData inData); } diff --git a/src/main/java/com/xujie/sys/modules/pms/service/Impl/DmFaiServiceImpl.java b/src/main/java/com/xujie/sys/modules/pms/service/Impl/DmFaiServiceImpl.java index 00d0bba9..5d9e4d27 100644 --- a/src/main/java/com/xujie/sys/modules/pms/service/Impl/DmFaiServiceImpl.java +++ b/src/main/java/com/xujie/sys/modules/pms/service/Impl/DmFaiServiceImpl.java @@ -64,6 +64,7 @@ public class DmFaiServiceImpl implements DmFaiService { dmFaiMapper.updateDMFAIMasterRecord(data); for (QcFAIRecordData item : data.getItemList()) { dmFaiMapper.updateDMFAIDetailedRecord(item); + } qcMapper.delOperator(data); List operators = new ArrayList<>(); @@ -98,9 +99,9 @@ public class DmFaiServiceImpl implements DmFaiService { if (!operators.isEmpty()) { qcMapper.saveOperator(operators); } - if ("2".equals(data.getType()) && "合格".equals(data.getInspectionResult()) && StringUtils.isNotBlank(data.getSku())) { + /*if ("2".equals(data.getType()) && "合格".equals(data.getInspectionResult()) && StringUtils.isNotBlank(data.getSku())) { dmFaiMapper.updateToolDetailIsInspectionBySku(data); - } + }*/ } @Override @@ -110,6 +111,7 @@ public class DmFaiServiceImpl implements DmFaiService { dmFaiMapper.updateDMFAIMasterSubmitFlag(row); dmFaiMapper.updateDMFAIDetailSubmitFlag(row); dmFaiMapper.updateDMFAISubDetailSubmitFlag(row); + dmFaiMapper.updateToolDetailIsInspectionBySku(data); } } diff --git a/src/main/java/com/xujie/sys/modules/pms/service/Impl/DmServiceImpl.java b/src/main/java/com/xujie/sys/modules/pms/service/Impl/DmServiceImpl.java index 01cdf3ad..17c9536d 100644 --- a/src/main/java/com/xujie/sys/modules/pms/service/Impl/DmServiceImpl.java +++ b/src/main/java/com/xujie/sys/modules/pms/service/Impl/DmServiceImpl.java @@ -2,7 +2,12 @@ package com.xujie.sys.modules.pms.service.Impl; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.xujie.sys.common.exception.XJException; +import com.xujie.sys.common.utils.DateUtils; import com.xujie.sys.common.utils.PageUtils; +import com.xujie.sys.common.utils.RandomUtil; +import com.xujie.sys.modules.oss.entity.SysOssEntity; +import com.xujie.sys.modules.oss.service.SysOssService; import com.xujie.sys.modules.pms.data.*; import com.xujie.sys.modules.pms.entity.vo.CheckSubDetailValueVo; import com.xujie.sys.modules.pms.mapper.DmTemplateMapper; @@ -17,16 +22,18 @@ import com.xujie.sys.modules.sys.entity.SysSceneDynamicControlModelEntity; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; +import java.io.File; +import java.io.FileOutputStream; +import java.io.OutputStream; import java.math.BigDecimal; import java.io.InputStream; -import java.util.ArrayList; -import java.util.Comparator; -import java.util.List; +import java.util.*; import java.util.stream.Collectors; import org.apache.commons.lang3.StringUtils; @@ -48,6 +55,10 @@ public class DmServiceImpl implements DmService { private RedisTemplate redisTemplate; @Autowired private SeqRuleService seqRuleService; + @Value("${sys-file.file-path}") + private String filePath; + @Autowired + private SysOssService sysOssService; private static final Logger logger = LoggerFactory.getLogger(HttpClientUtil.class); @Override @@ -710,40 +721,43 @@ public class DmServiceImpl implements DmService { @Override public List dmAttributeTemplateItemDetailsSearch(DmAttributeTemplateItemData data) { - // 需求:并集返回(覆盖表 + 属性项目表),同 itemNo 以覆盖表为准 - List propertyList = dmMapper.dmAttributeTemplateItemPropertyList(data); - List overrideList = dmMapper.dmAttributeTemplateItemDetailsSearch(data); - - java.util.LinkedHashMap merged = new java.util.LinkedHashMap<>(); - - // 先放属性项目表(基表) - if (propertyList != null) { - for (DmAttributeTemplateItemData p : propertyList) { - merged.put(p.getItemNo(), p); - } - } - - // 再放覆盖表(同 key 自动覆盖) - if (overrideList != null) { - for (DmAttributeTemplateItemData o : overrideList) { - merged.put(o.getItemNo(), o); - } - } - - List result = new ArrayList<>(merged.values()); - // 有 orderId 的(覆盖表)优先按 orderId,无 orderId 的按 itemNo - result.sort((a, b) -> { - Integer oa = a.getOrderId() == null ? Integer.MAX_VALUE : a.getOrderId(); - Integer ob = b.getOrderId() == null ? Integer.MAX_VALUE : b.getOrderId(); - int cmp = oa.compareTo(ob); - if (cmp != 0) { - return cmp; - } - String ia = a.getItemNo() == null ? "" : a.getItemNo(); - String ib = b.getItemNo() == null ? "" : b.getItemNo(); - return ia.compareTo(ib); - }); - return result; + // 当前需求:仅查询 dm_attribute_template_item,不再做“覆盖表 + 属性项目表”合并展示 + return dmMapper.dmAttributeTemplateItemDetailsSearch(data); + + // 原合并展示逻辑(暂注释保留) +// List propertyList = dmMapper.dmAttributeTemplateItemPropertyList(data); +// List overrideList = dmMapper.dmAttributeTemplateItemDetailsSearch(data); +// +// java.util.LinkedHashMap merged = new java.util.LinkedHashMap<>(); +// +// // 先放属性项目表(基表) +// if (propertyList != null) { +// for (DmAttributeTemplateItemData p : propertyList) { +// merged.put(p.getItemNo(), p); +// } +// } +// +// // 再放覆盖表(同 key 自动覆盖) +// if (overrideList != null) { +// for (DmAttributeTemplateItemData o : overrideList) { +// merged.put(o.getItemNo(), o); +// } +// } +// +// List result = new ArrayList<>(merged.values()); +// // 有 orderId 的(覆盖表)优先按 orderId,无 orderId 的按 itemNo +// result.sort((a, b) -> { +// Integer oa = a.getOrderId() == null ? Integer.MAX_VALUE : a.getOrderId(); +// Integer ob = b.getOrderId() == null ? Integer.MAX_VALUE : b.getOrderId(); +// int cmp = oa.compareTo(ob); +// if (cmp != 0) { +// return cmp; +// } +// String ia = a.getItemNo() == null ? "" : a.getItemNo(); +// String ib = b.getItemNo() == null ? "" : b.getItemNo(); +// return ia.compareTo(ib); +// }); +// return result; } @Override @@ -1634,4 +1648,90 @@ public class DmServiceImpl implements DmService { dmMapper.updateDmItemObject(row); } } + + /** + * 文件上传 + */ + @Override + public List upload(MultipartFile[] list, GetParamInData inData) { + if (Objects.isNull(list) || list.length == 0) { + throw new XJException("上传文件不能为空"); + } + List ossEntityList = new ArrayList<>(); + for (MultipartFile file : list) { + // 保存文件信息 + SysOssEntity ossEntity = new SysOssEntity(); + // 处理文件后缀 + int chartIndex = file.getOriginalFilename().lastIndexOf("."); + String suffix = ""; + String fileName = ""; + // 判断是否存在 + if (chartIndex > 0) { + suffix = file.getOriginalFilename().substring(chartIndex); + fileName = file.getOriginalFilename().substring(0, chartIndex); + } + String newFileName = RandomUtil.getOrderNoByAtomic1("file") + suffix; + String basePath = filePath; + String baseDatePath = DateUtils.format(new Date()); + File baseFilePath = new File(basePath + "\\" + baseDatePath + "\\" + inData.getFolder()); + if (!baseFilePath.exists()) { + baseFilePath.mkdirs(); + } + //最终的目录 + String finalFileName = baseFilePath.getPath() + "\\" + newFileName; + try { + baseFilePath = multipartFileToFile(file, finalFileName); + }catch (Exception e){ + throw new XJException(e.getMessage()); + } + ossEntity.setUrl(baseFilePath.getPath()); + ossEntity.setCreatedBy(inData.getCreateBy()); + ossEntity.setFileType(suffix.substring(1)); + ossEntity.setFileName(fileName+suffix); + ossEntity.setNewFileName(newFileName); + ossEntity.setCreateDate(new Date()); + ossEntity.setOrderRef1(inData.getOrderRef1()); + ossEntity.setOrderRef2(inData.getOrderRef2()); + ossEntity.setOrderRef3(inData.getOrderRef3()); + ossEntity.setOrderRef4(inData.getOrderRef4()); + ossEntity.setOrderReftype("刀模图纸"); + sysOssService.save(ossEntity); + ossEntityList.add(ossEntity); + } + return ossEntityList; + } + + public static File multipartFileToFile(MultipartFile file ,String fileName) throws Exception { + File toFile = null; + if (file.equals("") || file.getSize() <= 0) { + file = null; + } else { + InputStream ins = null; + ins = file.getInputStream(); + if(fileName != null && !"".equals(fileName)){ + toFile = new File(fileName); + }else{ + toFile = new File(file.getOriginalFilename()); + } + inputStreamToFile(ins, toFile); + ins.close(); + } + return toFile; + } + + //获取流文件 + private static void inputStreamToFile(InputStream ins, File file) { + try { + OutputStream os = new FileOutputStream(file); + int bytesRead = 0; + byte[] buffer = new byte[8192]; + while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) { + os.write(buffer, 0, bytesRead); + } + os.close(); + ins.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } }