|
|
@ -599,6 +599,79 @@ public class BomManagementServiceImpl extends ServiceImpl<BomManagementMapper, B |
|
|
@Override |
|
|
@Override |
|
|
@Transactional |
|
|
@Transactional |
|
|
public Map<String, Object> updateAlternativeStatus (BomDetailEntity data) { |
|
|
public Map<String, Object> updateAlternativeStatus (BomDetailEntity data) { |
|
|
|
|
|
BomHeaderEntity bomHeader = bomManagementMapper.selectOne(new QueryWrapper<BomHeaderEntity>().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<BomHeaderEntity> headerEntities = bomManagementMapper.queryHeaderPhaseDate(bomHeader); |
|
|
|
|
|
// if (!headerEntities.isEmpty() && headerEntities.size() > 1) { |
|
|
|
|
|
// throw new RuntimeException("日期冲突,不允许Build!"); |
|
|
|
|
|
// } |
|
|
|
|
|
List<BomHeaderEntity> historyBom = bomManagementMapper.selectList(new QueryWrapper<BomHeaderEntity>().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<BomHeaderEntity> 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<BomComponentVo> componentPartList = bomManagementMapper.queryComponentPart2(data); |
|
|
List<BomComponentVo> componentPartList = bomManagementMapper.queryComponentPart2(data); |
|
|
if (componentPartList.isEmpty()) { |
|
|
if (componentPartList.isEmpty()) { |
|
|
@ -611,12 +684,6 @@ public class BomManagementServiceImpl extends ServiceImpl<BomManagementMapper, B |
|
|
if (StringUtils.isNotBlank(data.getStatus()) && StringUtils.isNotBlank(checkList.get(0).getStatus())) { // 判断状态是否为null |
|
|
if (StringUtils.isNotBlank(data.getStatus()) && StringUtils.isNotBlank(checkList.get(0).getStatus())) { // 判断状态是否为null |
|
|
if (data.getStatus().equals(checkList.get(0).getStatus())) { // 判断状态是否已改变 |
|
|
if (data.getStatus().equals(checkList.get(0).getStatus())) { // 判断状态是否已改变 |
|
|
if ("Tentative".equals(checkList.get(0).getStatus()) || "Obsolete".equals(checkList.get(0).getStatus())) { |
|
|
if ("Tentative".equals(checkList.get(0).getStatus()) || "Obsolete".equals(checkList.get(0).getStatus())) { |
|
|
// 校验日期 |
|
|
|
|
|
BomHeaderEntity bomHeaderEntity = bomManagementMapper.selectOne(new QueryWrapper<BomHeaderEntity>().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<BomHeaderEntity> headerEntities = bomManagementMapper.queryHeaderPhaseDate(bomHeaderEntity); |
|
|
|
|
|
if (!headerEntities.isEmpty() && headerEntities.size() > 1) { |
|
|
|
|
|
throw new RuntimeException("日期冲突!"); |
|
|
|
|
|
} |
|
|
|
|
|
data.setStatus("Buildable"); |
|
|
data.setStatus("Buildable"); |
|
|
} else if ("Buildable".equals(checkList.get(0).getStatus())) { |
|
|
} else if ("Buildable".equals(checkList.get(0).getStatus())) { |
|
|
data.setStatus("Obsolete"); |
|
|
data.setStatus("Obsolete"); |
|
|
@ -624,9 +691,9 @@ public class BomManagementServiceImpl extends ServiceImpl<BomManagementMapper, B |
|
|
// 修改替代状态 |
|
|
// 修改替代状态 |
|
|
bomManagementMapper.updateAlternativeStatus(data); |
|
|
bomManagementMapper.updateAlternativeStatus(data); |
|
|
// 查询替代列表 |
|
|
// 查询替代列表 |
|
|
BomHeaderEntity bomHeader = new BomHeaderEntity(); |
|
|
|
|
|
BeanUtils.copyProperties(data,bomHeader); |
|
|
|
|
|
List<BomDetailEntity> detailDataList = bomManagementMapper.queryBomDetail(bomHeader); |
|
|
|
|
|
|
|
|
BomHeaderEntity bomHeader2 = new BomHeaderEntity(); |
|
|
|
|
|
BeanUtils.copyProperties(data, bomHeader2); |
|
|
|
|
|
List<BomDetailEntity> detailDataList = bomManagementMapper.queryBomDetail(bomHeader2); |
|
|
// 被修改的替代 |
|
|
// 被修改的替代 |
|
|
BomDetailEntity detailData = bomManagementMapper.checkBomDetailOnlyOne(data).get(0); |
|
|
BomDetailEntity detailData = bomManagementMapper.checkBomDetailOnlyOne(data).get(0); |
|
|
// 该替代的子明细列表 |
|
|
// 该替代的子明细列表 |
|
|
|