diff --git a/src/main/java/com/spring/modules/part/mapper/PartInformationMapper.java b/src/main/java/com/spring/modules/part/mapper/PartInformationMapper.java index 94a12946..b4ea59a0 100644 --- a/src/main/java/com/spring/modules/part/mapper/PartInformationMapper.java +++ b/src/main/java/com/spring/modules/part/mapper/PartInformationMapper.java @@ -283,7 +283,7 @@ public interface PartInformationMapper extends BaseMapper * @date 2024/9/25 16:19 * @version 1.0 */ - void updateProjectPartBuNo(PartInformationEntity data); + void updateProjectPartBuNo(PartInformationVo data); IPage queryPartByPartNo(@Param("page")Page page, @Param("params") PartInformationVo part); diff --git a/src/main/java/com/spring/modules/part/service/impl/PartInformationServiceImpl.java b/src/main/java/com/spring/modules/part/service/impl/PartInformationServiceImpl.java index 3f1a528f..694efc6e 100644 --- a/src/main/java/com/spring/modules/part/service/impl/PartInformationServiceImpl.java +++ b/src/main/java/com/spring/modules/part/service/impl/PartInformationServiceImpl.java @@ -108,6 +108,7 @@ import static com.spring.modules.part.task.PartRelatedTask.convertToSQLString; public class PartInformationServiceImpl extends ServiceImpl implements PartInformationService { private static final int DRAWING_NO_SYNC_PART_PREFIX_LENGTH = 8; + private static final List PROJECT_PART_PRODUCT_CATEGORIES = Arrays.asList("Label", "Diecut", "Decoration", "Material"); @Autowired private ProcedureDao procedureDao; @@ -742,6 +743,7 @@ public class PartInformationServiceImpl extends ServiceImpl customerPartNos = partInformationMapper.getProjectCustomerPartNo(data); @@ -2900,6 +2900,7 @@ public class PartInformationServiceImpl extends ServiceImpl repeatPartNoRows = new ArrayList<>(); List wrongBuNoRows = new ArrayList<>(); List wrongIfsPartNoRows = new ArrayList<>(); + List wrongProductCategoryRows = new ArrayList<>(); + List emptyApplicationDescRows = new ArrayList<>(); + List emptyProductCategoryRows = new ArrayList<>(); List partList = new ArrayList<>(); BuData buData = new BuData(); buData.setSite(data.getOrderRef1()); @@ -5553,6 +5567,19 @@ public class PartInformationServiceImpl extends ServiceImpl partList) { + if (partList == null || partList.isEmpty()) { + return; + } + for (int i = 0; i < partList.size(); i++) { + PartInformationVo part = partList.get(i); + String partNo = part == null ? null : (StringUtils.hasText(part.getPartNo()) ? part.getPartNo() : part.getPlmPartNo()); + String prefix = StringUtils.hasText(partNo) ? "物料[" + partNo + "]:" : "第" + (i + 1) + "条物料:"; + validateProjectPartRequiredFields(part == null ? null : part.getApplicationDesc(), + part == null ? null : part.getProductCategory(), prefix); + } + } + + private void validateProjectPartRequiredFields(String applicationDesc, String productCategory, String prefix) { + String p = StringUtils.hasText(prefix) ? prefix : ""; + if (!StringUtils.hasText(applicationDesc)) { + throw new RuntimeException(p + "应用描述不能为空"); + } + if (!StringUtils.hasText(productCategory)) { + throw new RuntimeException(p + "产品类别不能为空"); + } + if (!isValidProjectPartProductCategory(productCategory)) { + throw new RuntimeException(p + "产品类别无效,仅支持 Label/Diecut/Decoration/Material"); + } + } + + private String parseProjectPartProductCategory(String value, int excelRowNumber) { + if (!StringUtils.hasText(value)) { + return null; + } + String trimmed = value.trim(); + if (!PROJECT_PART_PRODUCT_CATEGORIES.contains(trimmed)) { + throw new RuntimeException("第" + excelRowNumber + "行产品类别无效,仅支持 Label/Diecut/Decoration/Material"); + } + return trimmed; + } + } diff --git a/src/main/java/com/spring/modules/part/vo/PartInformationVo.java b/src/main/java/com/spring/modules/part/vo/PartInformationVo.java index 99d254c0..52af4601 100644 --- a/src/main/java/com/spring/modules/part/vo/PartInformationVo.java +++ b/src/main/java/com/spring/modules/part/vo/PartInformationVo.java @@ -181,4 +181,12 @@ public class PartInformationVo extends PartInformationEntity { private Boolean planningInfoFlag; private Boolean partItemInfoFlag; private String partNo; + /** + * 应用描述(项目物料) + */ + private String applicationDesc; + /** + * 产品类别 Label/Diecut/Decoration/Material + */ + private String productCategory; } diff --git a/src/main/java/com/spring/modules/project/entity/PlmProjectPart.java b/src/main/java/com/spring/modules/project/entity/PlmProjectPart.java index 956667a1..dde06583 100644 --- a/src/main/java/com/spring/modules/project/entity/PlmProjectPart.java +++ b/src/main/java/com/spring/modules/project/entity/PlmProjectPart.java @@ -309,5 +309,31 @@ public class PlmProjectPart extends QueryPage { public void setBuDesc(String buDesc) { this.buDesc = buDesc; } + + /** + * 应用描述 + */ + private String applicationDesc; + + /** + * 产品类别 Label/Diecut/Decoration/Material + */ + private String productCategory; + + public String getApplicationDesc() { + return applicationDesc; + } + + public void setApplicationDesc(String applicationDesc) { + this.applicationDesc = applicationDesc; + } + + public String getProductCategory() { + return productCategory; + } + + public void setProductCategory(String productCategory) { + this.productCategory = productCategory; + } } diff --git a/src/main/resources/mapper/part/PartInformationMapper.xml b/src/main/resources/mapper/part/PartInformationMapper.xml index c84849b9..45df8f54 100644 --- a/src/main/resources/mapper/part/PartInformationMapper.xml +++ b/src/main/resources/mapper/part/PartInformationMapper.xml @@ -1117,9 +1117,9 @@ insert into plm_project_part - (site, project_id, test_part_no, base_no, rev_no, part_no_source, bu_no, virtual_part_no) + (site, project_id, test_part_no, base_no, rev_no, part_no_source, bu_no, virtual_part_no, application_desc, product_category) values - (#{site}, #{projectId}, #{partNo}, #{baseNo}, #{revNo}, #{partNoSource}, #{buNo}, #{virtualPartNo}) + (#{site}, #{projectId}, #{partNo}, #{baseNo}, #{revNo}, #{partNoSource}, #{buNo}, #{virtualPartNo}, #{applicationDesc}, #{productCategory}) @@ -1362,7 +1362,9 @@ a.ifs_part_no, a.show_in_query_flag, a.temporary_part_flag, - a.drawing_no + a.drawing_no, + b.application_desc as applicationDesc, + b.product_category as productCategory FROM part as a LEFT JOIN plm_project_part as b on a.site = b.site and (a.part_no = b.test_part_no or a.part_no = b.final_part_no) LEFT JOIN plm_project_info as c on b.site = c.site and b.project_id = c.project_id @@ -1499,10 +1501,10 @@ insert into plm_project_part - (site, project_id, test_part_no, create_date, create_by, part_no_source, bu_no, final_part_no, virtual_part_no) + (site, project_id, test_part_no, create_date, create_by, part_no_source, bu_no, final_part_no, virtual_part_no, application_desc, product_category) VALUES - (#{item.site}, #{item.projectId}, #{item.partNo}, getDate(), #{item.createBy}, #{item.partNoSource}, #{item.buNo}, #{item.finalPartNo}, #{item.virtualPartNo}) + (#{item.site}, #{item.projectId}, #{item.partNo}, getDate(), #{item.createBy}, #{item.partNoSource}, #{item.buNo}, #{item.finalPartNo}, #{item.virtualPartNo}, #{item.applicationDesc}, #{item.productCategory}) @@ -2070,11 +2072,17 @@ and show_in_query_flag = 'Y' - - + + UPDATE plm_project_part - SET bu_no = #{buNo} - WHERE site = #{site} AND project_id = #{projectId} AND test_part_no = #{partNo} + SET bu_no = #{buNo}, + application_desc = #{applicationDesc}, + product_category = #{productCategory}, + update_date = getDate(), + update_by = #{updateBy} + WHERE site = #{site} + AND project_id = #{projectId} + AND (test_part_no = #{partNo} OR final_part_no = #{partNo})