diff --git a/src/main/java/com/xujie/sys/modules/part/service/impl/BomManagementServiceImpl.java b/src/main/java/com/xujie/sys/modules/part/service/impl/BomManagementServiceImpl.java index ca20928a..726c8389 100644 --- a/src/main/java/com/xujie/sys/modules/part/service/impl/BomManagementServiceImpl.java +++ b/src/main/java/com/xujie/sys/modules/part/service/impl/BomManagementServiceImpl.java @@ -599,6 +599,79 @@ public class BomManagementServiceImpl extends ServiceImpl updateAlternativeStatus (BomDetailEntity data) { + BomHeaderEntity bomHeader = bomManagementMapper.selectOne(new QueryWrapper().eq("site", data.getSite()).eq("bu_no", data.getBuNo()).eq("part_no", data.getPartNo()).eq("eng_chg_level", data.getEngChgLevel()).eq("bom_type", data.getBomType())); + + // 如果是Build,则校验日期是否重叠 + if ("Tentative".equals(data.getStatus())) { +// // 校验日期 +// List headerEntities = bomManagementMapper.queryHeaderPhaseDate(bomHeader); +// if (!headerEntities.isEmpty() && headerEntities.size() > 1) { +// throw new RuntimeException("日期冲突,不允许Build!"); +// } + List historyBom = bomManagementMapper.selectList(new QueryWrapper().eq("site", data.getSite()).eq("bu_no", data.getBuNo()).eq("part_no", data.getPartNo()).eq("bom_type", data.getBomType())); + Date newEffPhaseInDate = bomHeader.getEffPhaseInDate(); + Date newEffPhaseOutDate = bomHeader.getEffPhaseOutDate(); + // 过滤掉自己 + List filteredList = historyBom.stream() + .filter(a -> a.getEngChgLevel() != data.getEngChgLevel()) + .collect(Collectors.toList()); + boolean b = false; + for (BomHeaderEntity existingBomHeader : filteredList) { + Date existingEffPhaseInDate = existingBomHeader.getEffPhaseInDate(); + Date existingEffPhaseOutDate = existingBomHeader.getEffPhaseOutDate(); + + // 如果新对象的开始时间在现有对象的时间范围内,则重叠 + if (newEffPhaseInDate != null && newEffPhaseInDate.after(existingEffPhaseInDate) && newEffPhaseInDate.before(existingEffPhaseOutDate)) { + b = true; + break; + } + // 如果新对象的结束时间在现有对象的时间范围内,则重叠 + else if (newEffPhaseOutDate != null && newEffPhaseOutDate.after(existingEffPhaseInDate) && newEffPhaseOutDate.before(existingEffPhaseOutDate)) { + b = true; + break; + } + // 如果现有对象的开始时间在新对象的时间范围内,则重叠 + else if (existingEffPhaseInDate != null && existingEffPhaseInDate.after(newEffPhaseInDate) && existingEffPhaseInDate.before(newEffPhaseOutDate)) { + b = true; + break; + } + // 如果现有对象的结束时间在新对象的时间范围内,则重叠 + else if (existingEffPhaseOutDate != null && existingEffPhaseOutDate.after(newEffPhaseInDate) && existingEffPhaseOutDate.before(newEffPhaseOutDate)) { + b = true; + break; + } + // 如果两个时间段完全相同,则重叠 + else if (newEffPhaseInDate != null && newEffPhaseInDate.equals(existingEffPhaseInDate) && newEffPhaseOutDate.equals(existingEffPhaseOutDate)) { + b = true; + break; + } + } + if (b) { + throw new RuntimeException("日期冲突,不允许Build!"); + } + } + + // 如果是Retire,则校验失效日期 + if ("Buildable".equals(data.getStatus())) { + if (bomHeader.getEffPhaseOutDate() == null) { + throw new RuntimeException("失效日期不能为空!"); + } + // 获取当前日期 + Date currentDate = new Date(); + // 设置当前日期的时间部分为午夜 + Calendar calendar = Calendar.getInstance(); + calendar.setTime(currentDate); + calendar.set(Calendar.HOUR_OF_DAY, 0); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + calendar.set(Calendar.MILLISECOND, 0); + Date startOfDay = calendar.getTime(); + // 比较日期 + if (!bomHeader.getEffPhaseOutDate().before(startOfDay)) { + throw new RuntimeException("失效日期要小于今天!"); + } + } + // 判断该物料的该替代下有无子料 List componentPartList = bomManagementMapper.queryComponentPart2(data); if (componentPartList.isEmpty()) { @@ -611,12 +684,6 @@ public class BomManagementServiceImpl extends ServiceImpl().eq("site", data.getSite()).eq("bu_no", data.getBuNo()).eq("part_no", data.getPartNo()).eq("eng_chg_level", data.getEngChgLevel()).eq("bom_type", data.getBomType())); - List headerEntities = bomManagementMapper.queryHeaderPhaseDate(bomHeaderEntity); - if (!headerEntities.isEmpty() && headerEntities.size() > 1) { - throw new RuntimeException("日期冲突!"); - } data.setStatus("Buildable"); } else if ("Buildable".equals(checkList.get(0).getStatus())) { data.setStatus("Obsolete"); @@ -624,9 +691,9 @@ public class BomManagementServiceImpl extends ServiceImpl detailDataList = bomManagementMapper.queryBomDetail(bomHeader); + BomHeaderEntity bomHeader2 = new BomHeaderEntity(); + BeanUtils.copyProperties(data, bomHeader2); + List detailDataList = bomManagementMapper.queryBomDetail(bomHeader2); // 被修改的替代 BomDetailEntity detailData = bomManagementMapper.checkBomDetailOnlyOne(data).get(0); // 该替代的子明细列表 diff --git a/src/main/java/com/xujie/sys/modules/part/service/impl/RoutingManagementServiceImpl.java b/src/main/java/com/xujie/sys/modules/part/service/impl/RoutingManagementServiceImpl.java index 5ee8b127..67884e0a 100644 --- a/src/main/java/com/xujie/sys/modules/part/service/impl/RoutingManagementServiceImpl.java +++ b/src/main/java/com/xujie/sys/modules/part/service/impl/RoutingManagementServiceImpl.java @@ -607,6 +607,28 @@ public class RoutingManagementServiceImpl extends ServiceImpl updateAlternativeStatus(RoutingDetailEntity data) { + // 如果是Retire,则校验失效日期 + if ("Buildable".equals(data.getStatus())) { + RoutingHeaderEntity routingHeader = routingManagementMapper.selectOne(new QueryWrapper().eq("site", data.getSite()).eq("bu_no", data.getBuNo()).eq("part_no", data.getPartNo()).eq("routing_revision", data.getRoutingRevision()).eq("routing_type", data.getRoutingType())); + if (routingHeader.getPhaseOutDate() == null) { + throw new RuntimeException("失效日期不能为空!"); + } + // 获取当前日期 + Date currentDate = new Date(); + // 设置当前日期的时间部分为午夜 + Calendar calendar = Calendar.getInstance(); + calendar.setTime(currentDate); + calendar.set(Calendar.HOUR_OF_DAY, 0); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + calendar.set(Calendar.MILLISECOND, 0); + Date startOfDay = calendar.getTime(); + // 比较日期 + if (!routingHeader.getPhaseOutDate().before(startOfDay)) { + System.out.println("失效日期要小于今天!"); + } + } + // 判断该物料的该替代下有无工序 List componentOperationList = routingManagementMapper.queryComponent(data); if (componentOperationList.isEmpty()) { @@ -619,12 +641,12 @@ public class RoutingManagementServiceImpl extends ServiceImpl().eq("site", data.getSite()).eq("bu_no", data.getBuNo()).eq("part_no", data.getPartNo()).eq("routing_revision", data.getRoutingRevision()).eq("routing_type", data.getRoutingType())); - List headerEntities = routingManagementMapper.queryHeaderPhaseDate(routingHeaderEntity); - if (!headerEntities.isEmpty() && headerEntities.size() > 1) { - throw new RuntimeException("日期冲突!"); - } +// // 校验日期 +// RoutingHeaderEntity routingHeaderEntity = routingManagementMapper.selectOne(new QueryWrapper().eq("site", data.getSite()).eq("bu_no", data.getBuNo()).eq("part_no", data.getPartNo()).eq("routing_revision", data.getRoutingRevision()).eq("routing_type", data.getRoutingType())); +// List headerEntities = routingManagementMapper.queryHeaderPhaseDate(routingHeaderEntity); +// if (!headerEntities.isEmpty() && headerEntities.size() > 1) { +// throw new RuntimeException("日期冲突!"); +// } data.setStatus("Buildable"); } else if ("Buildable".equals(checkList.get(0).getStatus())) { data.setStatus("Obsolete"); diff --git a/src/main/resources/mapper/part/BomManagementMapper.xml b/src/main/resources/mapper/part/BomManagementMapper.xml index 6fc9bb7c..131ad289 100644 --- a/src/main/resources/mapper/part/BomManagementMapper.xml +++ b/src/main/resources/mapper/part/BomManagementMapper.xml @@ -262,7 +262,7 @@ note_text = #{noteText}, update_date = getDate(), update_by = #{updateBy} - where site = #{site} and part_no = #{partNo} and eng_chg_level = #{engChgLevel} and bom_type = #{bomType} + where site = #{site} and bu_no = #{buNo} and part_no = #{partNo} and eng_chg_level = #{engChgLevel} and bom_type = #{bomType} diff --git a/src/main/resources/mapper/pms/QcMapper.xml b/src/main/resources/mapper/pms/QcMapper.xml index f7d3f471..90d9582d 100644 --- a/src/main/resources/mapper/pms/QcMapper.xml +++ b/src/main/resources/mapper/pms/QcMapper.xml @@ -2371,6 +2371,9 @@ AND submission_type = #{query.submissionType} + + AND dbo.qc_get_invdefinetype(site, part_no) LIKE '%' + #{query.invdefinetype} + '%' + ORDER BY CASE WHEN state = '待检验' THEN 1 @@ -3418,17 +3421,14 @@