From cb3685beb83b645608c3339db4522466939b0b20 Mon Sep 17 00:00:00 2001 From: shenzhouyu Date: Wed, 13 May 2026 14:20:12 +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/data/DmAttributeTemplateItemData.java | 1 + .../sys/modules/pms/mapper/DmMapper.java | 2 + .../pms/service/Impl/DmServiceImpl.java | 109 ++++++++++++++---- src/main/resources/mapper/pms/DmMapper.xml | 32 ++++- 4 files changed, 118 insertions(+), 26 deletions(-) diff --git a/src/main/java/com/xujie/sys/modules/pms/data/DmAttributeTemplateItemData.java b/src/main/java/com/xujie/sys/modules/pms/data/DmAttributeTemplateItemData.java index 4b982fb6..6c905bc3 100644 --- a/src/main/java/com/xujie/sys/modules/pms/data/DmAttributeTemplateItemData.java +++ b/src/main/java/com/xujie/sys/modules/pms/data/DmAttributeTemplateItemData.java @@ -46,6 +46,7 @@ public class DmAttributeTemplateItemData { private String createBy; private String updateBy; + private String inspectionTypeNo; /** 前端保存/新增/删除时传入的明细列表 */ private List itemList; } diff --git a/src/main/java/com/xujie/sys/modules/pms/mapper/DmMapper.java b/src/main/java/com/xujie/sys/modules/pms/mapper/DmMapper.java index 91bc0293..dcb14da6 100644 --- a/src/main/java/com/xujie/sys/modules/pms/mapper/DmMapper.java +++ b/src/main/java/com/xujie/sys/modules/pms/mapper/DmMapper.java @@ -221,4 +221,6 @@ public interface DmMapper { void deleteDmUploadFileAddressById(@Param("id") Integer id); DmUploadFileAddressRow selectDmUploadFileAddressById(@Param("id") Long id); + + List dmAttributeTemplateItemList(DmAttributeTemplateItemData 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 be7fc2be..bc636de6 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 @@ -772,7 +772,8 @@ public class DmServiceImpl implements DmService { @Override public List dmAttributeTemplateItemGetRow1(DmAttributeTemplateItemData data) { // 左侧:可选项目 = 模板范围内项目 - 已有项目(并集结果) - List templateItems = dmMapper.dmAttributeTemplateItemPropertyList(data); + //List templateItems = dmMapper.dmAttributeTemplateItemPropertyList(data); + List templateItems = dmMapper.dmAttributeTemplateItemList(data); List existing = dmAttributeTemplateItemDetailsSearch(data); java.util.HashSet existNos = new java.util.HashSet<>(); if (existing != null) { @@ -912,6 +913,7 @@ public class DmServiceImpl implements DmService { } @Override + @Transactional public void dmAttributeTemplateDelete(DmAttributeTemplateData data) { if (data.getItemList() != null && !data.getItemList().isEmpty()) { // 批量删除 for (DmTemplateData partData : data.getItemList()) { @@ -920,25 +922,85 @@ public class DmServiceImpl implements DmService { partData.setAttributeNo(data.getAttributeNo()); partData.setAttributeType(data.getAttributeType()); dmMapper.dmAttributeTemplateDelete(partData); - - // 同步删除覆盖项目表(dm_attribute_template_item) - DmAttributeTemplateItemData del = new DmAttributeTemplateItemData(); - del.setSite(partData.getSite()); - del.setBuNo(partData.getBuNo()); - del.setAttributeNo(partData.getAttributeNo()); - del.setTemplateId(partData.getTemplateId()); - dmMapper.dmAttributeTemplateItemDeleteByKey(del); + deleteDmAttributeTemplateItemsByTemplateKey( + partData.getSite(), partData.getBuNo(), partData.getAttributeNo(), partData.getTemplateId()); } } else { // 单条删除 dmMapper.dmAttributeTemplateDelete(data); + deleteDmAttributeTemplateItemsByTemplateKey( + data.getSite(), data.getBuNo(), data.getAttributeNo(), data.getTemplateId()); + } + } - // 同步删除覆盖项目表(dm_attribute_template_item) - DmAttributeTemplateItemData del = new DmAttributeTemplateItemData(); - del.setSite(data.getSite()); - del.setBuNo(data.getBuNo()); - del.setAttributeNo(data.getAttributeNo()); - del.setTemplateId(data.getTemplateId()); - dmMapper.dmAttributeTemplateItemDeleteByKey(del); + /** 按 site + bu + attributeNo + templateId 删除 dm_attribute_template_item。 */ + private void deleteDmAttributeTemplateItemsByTemplateKey(String site, String buNo, String attributeNo, String templateId) { + DmAttributeTemplateItemData del = new DmAttributeTemplateItemData(); + del.setSite(site); + del.setBuNo(buNo); + del.setAttributeNo(attributeNo); + del.setTemplateId(templateId); + dmMapper.dmAttributeTemplateItemDeleteByKey(del); + } + + /** + * 822/823时,按 site+bu+attributeNo+templateId 将模板明细中的检验项目写入 dm_attribute_template_item。 + */ + private void insertDmAttributeTemplateItemsAfterBind822823(DmTemplateData partData, DmAttributeTemplateData request) { + DmAttributeTemplateItemData ctx = new DmAttributeTemplateItemData(); + ctx.setSite(partData.getSite()); + ctx.setBuNo(partData.getBuNo()); + ctx.setAttributeNo(partData.getAttributeNo()); + ctx.setTemplateId(partData.getTemplateId()); + + List fromTemplateDetailed = dmMapper.dmAttributeTemplateItemPropertyList(ctx); + if (fromTemplateDetailed == null || fromTemplateDetailed.isEmpty()) { + return; + } + + List inOverlay = dmMapper.dmAttributeTemplateItemDetailsSearch(ctx); + Set existingItemNos = new HashSet<>(); + int maxOrder = 0; + if (inOverlay != null) { + for (DmAttributeTemplateItemData row : inOverlay) { + if (row != null && row.getItemNo() != null) { + existingItemNos.add(row.getItemNo()); + } + if (row != null && row.getOrderId() != null && row.getOrderId() > maxOrder) { + maxOrder = row.getOrderId(); + } + } + } + + String createBy = request.getCreateBy() != null ? request.getCreateBy() : partData.getCreateBy(); + String updateBy = request.getUpdateBy() != null ? request.getUpdateBy() : partData.getUpdateBy(); + + List insertRows = new ArrayList<>(); + int nextOrder = maxOrder + 1; + boolean overlayEmpty = inOverlay == null || inOverlay.isEmpty(); + for (DmAttributeTemplateItemData src : fromTemplateDetailed) { + if (src == null || src.getItemNo() == null || existingItemNos.contains(src.getItemNo())) { + continue; + } + DmAttributeTemplateItemData row = new DmAttributeTemplateItemData(); + row.setSite(partData.getSite()); + row.setBuNo(partData.getBuNo()); + row.setAttributeNo(partData.getAttributeNo()); + row.setTemplateId(partData.getTemplateId()); + row.setItemNo(src.getItemNo()); + row.setDefaultValue(src.getDefaultValue()); + row.setMaxValue(src.getMaxValue()); + row.setMinValue(src.getMinValue()); + if (overlayEmpty) { + row.setOrderId(src.getOrderId() != null ? src.getOrderId() : nextOrder++); + } else { + row.setOrderId(nextOrder++); + } + row.setCreateBy(createBy); + row.setUpdateBy(updateBy); + insertRows.add(row); + } + if (!insertRows.isEmpty()) { + dmMapper.dmAttributeTemplateItemInsertList(insertRows); } } @@ -966,13 +1028,14 @@ public class DmServiceImpl implements DmService { // 根据检验类型写入 operation / resource / manufacturer if ("822".equals(partData.getInspectionTypeNo()) || "823".equals(partData.getInspectionTypeNo())) { - partData.setOperation(data.getOperation()); - partData.setResourceID(data.getResourceID()); - DmTemplateData repeat = dmMapper.searchDmPartRepeat(partData); - if (repeat != null) { - continue; - } - dmMapper.dmAttributeTemplateSave(partData); + partData.setOperation(data.getOperation()); + partData.setResourceID(data.getResourceID()); + DmTemplateData repeat = dmMapper.searchDmPartRepeat(partData); + if (repeat != null) { + continue; + } + dmMapper.dmAttributeTemplateSave(partData); + insertDmAttributeTemplateItemsAfterBind822823(partData, data); } else if ("105".equals(partData.getInspectionTypeNo())) { // IQC if (data.getManufacturerList() != null && !data.getManufacturerList().isEmpty()) { for (String manufacturer : data.getManufacturerList()) { diff --git a/src/main/resources/mapper/pms/DmMapper.xml b/src/main/resources/mapper/pms/DmMapper.xml index 29fd4377..b56b688a 100644 --- a/src/main/resources/mapper/pms/DmMapper.xml +++ b/src/main/resources/mapper/pms/DmMapper.xml @@ -967,9 +967,9 @@ a.ItemDesc as itemDesc, a.ValueType as valueType, a.ValueType_DB as valueTypeDb, - a.DefaultValue as defaultValue, - a.MaxValue as maxValue, - a.MinValue as minValue + try_convert(decimal(18,6), nullif(ltrim(rtrim(convert(varchar(100), a.DefaultValue))), '')) as defaultValue, + try_convert(decimal(18,6), a.MaxValue) as maxValue, + try_convert(decimal(18,6), a.MinValue) as minValue from dm_properties_item a where a.site = #{site} and a.bu_no = #{buNo} and a.ItemType = 'D' and not exists ( @@ -1460,5 +1460,31 @@ FROM upload_file_address WHERE id = #{id} +