变更通知单
This commit is contained in:
parent
ae38289524
commit
fd94ef194b
|
|
@ -0,0 +1,11 @@
|
|||
package com.nflg.product.bomnew.mapper.master;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.nflg.product.bomnew.pojo.entity.BomNewNoticeNumDetail2Entity;
|
||||
|
||||
/**
|
||||
* @author makejava
|
||||
*/
|
||||
public interface BomNewNoticeNumDetail2Mapper extends BaseMapper<BomNewNoticeNumDetail2Entity> {
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,77 @@
|
|||
package com.nflg.product.bomnew.pojo.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* t_bom_new_notice_num_detail2
|
||||
* 变更通知单明细表2
|
||||
*
|
||||
* @author makejava
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
@ApiModel(value = "com-nflg-product-bomnew-pojo-main-entity-BomNewNoticeNumDetail2Entity")
|
||||
@TableName(value = "t_bom_new_notice_num_detail2")
|
||||
public class BomNewNoticeNumDetail2Entity implements Serializable {
|
||||
|
||||
/**
|
||||
* 行ID 雪花
|
||||
*/
|
||||
@TableId(value = "row_id", type = IdType.ASSIGN_ID)
|
||||
@ApiModelProperty(value = "行ID 雪花")
|
||||
private Long rowId;
|
||||
|
||||
/**
|
||||
* 行ID 雪花抬头行ID
|
||||
*/
|
||||
@ApiModelProperty(value = "header_row_id")
|
||||
private Long headerRowId;
|
||||
|
||||
/**
|
||||
* 父级编码
|
||||
*/
|
||||
@TableField(value = "parent_material_no")
|
||||
@ApiModelProperty(value = "父级编码")
|
||||
private String parentMaterialNo;
|
||||
|
||||
/**
|
||||
* BOM行编号
|
||||
*/
|
||||
@TableField(value = "order_num")
|
||||
@ApiModelProperty(value = "BOM行编号")
|
||||
private String orderNum;
|
||||
|
||||
|
||||
/**
|
||||
* 物料编码
|
||||
*/
|
||||
@TableField(value = "material_no")
|
||||
@ApiModelProperty(value = "物料编码")
|
||||
private String materialNo;
|
||||
|
||||
/**
|
||||
* 变更内容 1=BOM物料增加 2=BOM物料减少 3=BOM物料替换 4=BOM物料数量变更 5=BOM项目类别变更
|
||||
*/
|
||||
@TableField(value = "change_type")
|
||||
@ApiModelProperty(value = "变更内容 1=BOM物料增加 2=BOM物料减少 3=BOM物料替换 4=BOM物料数量变更 5=BOM项目类别变更")
|
||||
private Integer changeType;
|
||||
|
||||
/**
|
||||
* 变更内容 1=BOM物料增加 2=BOM物料减少 3=BOM物料替换 4=BOM物料数量变更 5=BOM项目类别变更
|
||||
*/
|
||||
@TableField(value = "change_content")
|
||||
@ApiModelProperty(value = "变更内容 1=BOM物料增加 2=BOM物料减少 3=BOM物料替换 4=BOM物料数量变更 5=BOM项目类别变更")
|
||||
private String changeContent;
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
}
|
||||
|
|
@ -115,6 +115,8 @@ public class BomNewEbomParentService extends ServiceImpl<BomNewEbomParentMapper,
|
|||
private BomNewNoticeNumService bomNewNoticeNumService;
|
||||
@Resource
|
||||
private BomNewNoticeNumDetailService bomNewNoticeNumDetailService;
|
||||
@Resource
|
||||
private BomNewNoticeNumDetail2Service bomNewNoticeNumDetail2Service;
|
||||
|
||||
public List<BomNewEbomParentVO> getParentChild( Long rowId) {
|
||||
|
||||
|
|
@ -2978,126 +2980,241 @@ public class BomNewEbomParentService extends ServiceImpl<BomNewEbomParentMapper,
|
|||
|
||||
saveEntity.setChangeDesc(param.getChangeDesc());
|
||||
saveEntity.setNoticeContent(newestParent.getMaterialDesc() + "BOM变更(由EBOM发起),详见下方明细:");
|
||||
saveEntity.setNoticeTitle("关于" + newestParent.getMaterialDesc() + "BOM变更的通知");
|
||||
saveEntity.setNoticeTitle(param.getChangeDesc());
|
||||
saveEntity.setOaStatus(1); // 待提交
|
||||
saveEntity.setCreatedName(SessionUtil.getRealName());
|
||||
saveEntity.setCreatedBy(SessionUtil.getUserCode());
|
||||
saveEntity.setCreatedTime(LocalDateTime.now());
|
||||
|
||||
String autoCode = null;
|
||||
// 关联已有通知单
|
||||
if (param.getNumType() == 2) {
|
||||
saveEntity.setNoticeNum(param.getNoticeNums());
|
||||
} else {
|
||||
saveEntity.setNoticeNum(bomNewNoticeNumService.generateNoticeNum());
|
||||
autoCode = bomNewNoticeNumService.generateNoticeNum();
|
||||
saveEntity.setNoticeNum(autoCode);
|
||||
}
|
||||
bomNewNoticeNumService.save(saveEntity);
|
||||
|
||||
// 正式表回写通知单号,升版说明
|
||||
BomNewEbomParentFormalEntity updateFormalParent = new BomNewEbomParentFormalEntity();
|
||||
updateFormalParent.setRowId(versionList.get(0).getRowId());
|
||||
if (param.getNumType() == 2) {
|
||||
updateFormalParent.setNoticeNums(param.getNoticeNums());
|
||||
} else {
|
||||
updateFormalParent.setNoticeNums(autoCode);
|
||||
}
|
||||
updateFormalParent.setChangeDesc(param.getChangeDesc());
|
||||
bomNewEbomParentFormalService.updateById(updateFormalParent);
|
||||
// 工作表最新版回写通知单号,升版说明(因为正式表标签页查询的也是工作表最新版的数据?)
|
||||
BomNewEbomParentEntity updateParent = new BomNewEbomParentEntity();
|
||||
updateParent.setRowId(versionList.get(0).getRowId());
|
||||
if (param.getNumType() == 2) {
|
||||
updateParent.setNoticeNums(param.getNoticeNums());
|
||||
} else {
|
||||
updateParent.setNoticeNums(autoCode);
|
||||
}
|
||||
updateParent.setChangeDesc(param.getChangeDesc());
|
||||
this.updateById(updateParent);
|
||||
|
||||
// 新建通知单
|
||||
if (param.getNumType() == 1) {
|
||||
List<BomNewEbomChildFormalEntity> newestChildList = bomNewEbomChildFormalService.lambdaQuery().eq(BomNewEbomChildFormalEntity::getParentRowId, newestParent.getRowId()).list();
|
||||
List<BomNewEbomChildFormalEntity> lastChildList = bomNewEbomChildFormalService.lambdaQuery().eq(BomNewEbomChildFormalEntity::getParentRowId, lastParent.getRowId()).list();
|
||||
List<String> newestMaterialNos = newestChildList.stream().map(BomNewEbomChildFormalEntity::getMaterialNo).collect(Collectors.toList());
|
||||
List<String> lastMaterialNos = lastChildList.stream().map(BomNewEbomChildFormalEntity::getMaterialNo).collect(Collectors.toList());
|
||||
// BOM明细集合1,如果某父级A的任一子级,相对于上一版本有变更(变更判断优先顺序:物料增加>物料减少>物料替代>改物料数量>改物料项目类别),则记录父级A到集合1
|
||||
List<BomNewNoticeNumDetailEntity> noticeNumDetailEntityList = new ArrayList<>();
|
||||
// BOM明细集合2,如果某父级A的子级,相对于上一版本有变更(5种情况都得考虑),则记录变更的子级到集合2
|
||||
List<BomNewNoticeNumDetail2Entity> noticeNumDetailEntity2List = new ArrayList<>();
|
||||
|
||||
// 假设旧版 [1,2,3,4,5] 新版 [3,4,5,6,7]
|
||||
// 旧版和新版的交集 -> [3,4,5]
|
||||
List<String> intersection =new ArrayList<>(lastMaterialNos);
|
||||
intersection.retainAll(newestMaterialNos);
|
||||
// 旧版相对于新版的差集 -> [1,2]
|
||||
List<String> difference = new ArrayList<>(lastMaterialNos);
|
||||
difference.removeAll(newestMaterialNos);
|
||||
// 新版相对于旧版的差集 -> [6,7]
|
||||
List<String> difference2 = new ArrayList<>(newestMaterialNos);
|
||||
difference2.removeAll(lastMaterialNos);
|
||||
long start = System.currentTimeMillis();
|
||||
// 递归调用
|
||||
buildNoticeNumDetailList(saveEntity.getRowId(), noticeNumDetailEntityList, noticeNumDetailEntity2List, newestParent, lastParent);
|
||||
long end = System.currentTimeMillis();
|
||||
log.info("【EBOM {} 生成变更通知单】递归调用耗时(ms):{}", newestParent.getMaterialNo(), (end - start));
|
||||
|
||||
List<BomNewNoticeNumDetailEntity> saveDetailList = new ArrayList<>();
|
||||
// 物料变更的场景有5种:物料增加,物料减少,物料替代,改物料数量,改物料项目类别
|
||||
|
||||
// 两个差集元素的个数不等,则认为 difference2 的物料是增加,difference 的物料是减少
|
||||
if (difference.size() != difference2.size()) {
|
||||
difference.forEach(remove -> {
|
||||
BomNewEbomChildFormalEntity removeEntity = lastChildList.stream().filter(item -> item.getMaterialNo().equals(remove)).findFirst().orElse(null);
|
||||
if (ObjectUtil.isNotEmpty(removeEntity)) {
|
||||
BomNewNoticeNumDetailEntity saveDetail = new BomNewNoticeNumDetailEntity();
|
||||
saveDetail.setRowId(IdWorker.getId());
|
||||
saveDetail.setHeaderRowId(saveEntity.getRowId());
|
||||
saveDetail.setMaterialNo(removeEntity.getMaterialNo());
|
||||
saveDetail.setDrawingNo(removeEntity.getDrawingNo());
|
||||
saveDetail.setMaterialName(removeEntity.getMaterialName());
|
||||
saveDetail.setParentMaterialNo("");
|
||||
saveDetail.setChangeType(2);
|
||||
saveDetail.setChangeContent("BOM物料减少");
|
||||
saveDetailList.add(saveDetail);
|
||||
}
|
||||
});
|
||||
difference2.forEach(add -> {
|
||||
BomNewEbomChildFormalEntity addEntity = newestChildList.stream().filter(item -> item.getMaterialNo().equals(add)).findFirst().orElse(null);
|
||||
if (ObjectUtil.isNotEmpty(addEntity)) {
|
||||
BomNewNoticeNumDetailEntity saveDetail = new BomNewNoticeNumDetailEntity();
|
||||
saveDetail.setRowId(IdWorker.getId());
|
||||
saveDetail.setHeaderRowId(saveEntity.getRowId());
|
||||
saveDetail.setMaterialNo(addEntity.getMaterialNo());
|
||||
saveDetail.setDrawingNo(addEntity.getDrawingNo());
|
||||
saveDetail.setMaterialName(addEntity.getMaterialName());
|
||||
saveDetail.setParentMaterialNo("");
|
||||
saveDetail.setChangeType(1);
|
||||
saveDetail.setChangeContent("BOM物料增加");
|
||||
saveDetailList.add(saveDetail);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
// 个数相等,则认为 difference2 是 difference 的替代物料
|
||||
if (CollectionUtil.isNotEmpty(difference2)) {
|
||||
difference2.forEach(replace -> {
|
||||
BomNewEbomChildFormalEntity replaceEntity = newestChildList.stream().filter(item -> item.getMaterialNo().equals(replace)).findFirst().orElse(null);
|
||||
if (ObjectUtil.isNotEmpty(replaceEntity)) {
|
||||
BomNewNoticeNumDetailEntity saveDetail = new BomNewNoticeNumDetailEntity();
|
||||
saveDetail.setRowId(IdWorker.getId());
|
||||
saveDetail.setHeaderRowId(saveEntity.getRowId());
|
||||
saveDetail.setMaterialNo(replaceEntity.getMaterialNo());
|
||||
saveDetail.setDrawingNo(replaceEntity.getDrawingNo());
|
||||
saveDetail.setMaterialName(replaceEntity.getMaterialName());
|
||||
saveDetail.setParentMaterialNo("");
|
||||
saveDetail.setChangeType(3);
|
||||
saveDetail.setChangeContent("BOM物料替换");
|
||||
saveDetailList.add(saveDetail);
|
||||
}
|
||||
});
|
||||
}
|
||||
if (CollectionUtil.isNotEmpty(noticeNumDetailEntityList)) {
|
||||
bomNewNoticeNumDetailService.saveBatch(noticeNumDetailEntityList);
|
||||
}
|
||||
// 遍历交集,如果旧版和新版物料的数量不等,则认为是改物料数量;如果旧版和新版物料的项目类别不一致,则认为是改物料项目类别
|
||||
intersection.forEach(entity -> {
|
||||
BomNewEbomChildFormalEntity lastChild = lastChildList.stream().filter(item -> item.getMaterialNo().equals(entity)).findFirst().orElse(null);
|
||||
BomNewEbomChildFormalEntity newestChild = newestChildList.stream().filter(item -> item.getMaterialNo().equals(entity)).findFirst().orElse(null);
|
||||
if (ObjectUtil.isNotEmpty(newestChild.getNum()) && newestChild.getNum().compareTo(lastChild.getNum()) != 0) {
|
||||
BomNewNoticeNumDetailEntity saveDetail = new BomNewNoticeNumDetailEntity();
|
||||
saveDetail.setRowId(IdWorker.getId());
|
||||
saveDetail.setHeaderRowId(saveEntity.getRowId());
|
||||
saveDetail.setMaterialNo(newestChild.getMaterialNo());
|
||||
saveDetail.setDrawingNo(newestChild.getDrawingNo());
|
||||
saveDetail.setMaterialName(newestChild.getMaterialName());
|
||||
saveDetail.setParentMaterialNo("");
|
||||
saveDetail.setChangeType(4);
|
||||
saveDetail.setChangeContent("BOM物料数量变更");
|
||||
saveDetailList.add(saveDetail);
|
||||
}
|
||||
if (ObjectUtil.isNotEmpty(newestChild.getProjectType()) && !newestChild.getProjectType().equals(lastChild.getProjectType())) {
|
||||
BomNewNoticeNumDetailEntity saveDetail = new BomNewNoticeNumDetailEntity();
|
||||
saveDetail.setRowId(IdWorker.getId());
|
||||
saveDetail.setHeaderRowId(saveEntity.getRowId());
|
||||
saveDetail.setMaterialNo(newestChild.getMaterialNo());
|
||||
saveDetail.setDrawingNo(newestChild.getDrawingNo());
|
||||
saveDetail.setMaterialName(newestChild.getMaterialName());
|
||||
saveDetail.setParentMaterialNo("");
|
||||
saveDetail.setChangeType(5);
|
||||
saveDetail.setChangeContent("BOM项目类别变更");
|
||||
saveDetailList.add(saveDetail);
|
||||
}
|
||||
});
|
||||
bomNewNoticeNumDetailService.saveBatch(saveDetailList);
|
||||
bomNewNoticeNumService.sync2Oa(saveEntity, saveDetailList);
|
||||
if (CollectionUtil.isNotEmpty(noticeNumDetailEntity2List)) {
|
||||
bomNewNoticeNumDetail2Service.saveBatch(noticeNumDetailEntity2List);
|
||||
}
|
||||
bomNewNoticeNumService.sync2Oa(saveEntity, noticeNumDetailEntityList, noticeNumDetailEntity2List);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
private void buildNoticeNumDetailList(Long noticeNumRowId, List<BomNewNoticeNumDetailEntity> noticeNumDetailEntityList, List<BomNewNoticeNumDetail2Entity> noticeNumDetailEntity2List,
|
||||
BomNewEbomParentFormalEntity newestParent, BomNewEbomParentFormalEntity lastParent) {
|
||||
if (ObjectUtil.isEmpty(newestParent) || ObjectUtil.isEmpty(lastParent)) {
|
||||
return;
|
||||
}
|
||||
List<BomNewEbomChildFormalEntity> newestChildList = bomNewEbomChildFormalService.lambdaQuery().eq(BomNewEbomChildFormalEntity::getParentRowId, newestParent.getRowId()).list();
|
||||
List<BomNewEbomChildFormalEntity> lastChildList = bomNewEbomChildFormalService.lambdaQuery().eq(BomNewEbomChildFormalEntity::getParentRowId, lastParent.getRowId()).list();
|
||||
if (CollectionUtil.isEmpty(newestChildList) || CollectionUtil.isEmpty(lastChildList)) {
|
||||
return;
|
||||
}
|
||||
List<String> newestMaterialNos = newestChildList.stream().map(BomNewEbomChildFormalEntity::getMaterialNo).collect(Collectors.toList());
|
||||
List<String> lastMaterialNos = lastChildList.stream().map(BomNewEbomChildFormalEntity::getMaterialNo).collect(Collectors.toList());
|
||||
|
||||
// Bom明细1 是否已经添加过该父级(只需添加一次)
|
||||
boolean noticeNumDetailEntityListAdded = false;
|
||||
|
||||
// 假设旧版 [1,2,3,4,5] 新版 [3,4,5,6,7]
|
||||
// 旧版和新版的交集 -> [3,4,5]
|
||||
List<String> intersection = new ArrayList<>(lastMaterialNos);
|
||||
intersection.retainAll(newestMaterialNos);
|
||||
// 旧版相对于新版的差集 -> [1,2]
|
||||
List<String> difference = new ArrayList<>(lastMaterialNos);
|
||||
difference.removeAll(newestMaterialNos);
|
||||
// 新版相对于旧版的差集 -> [6,7]
|
||||
List<String> difference2 = new ArrayList<>(newestMaterialNos);
|
||||
difference2.removeAll(lastMaterialNos);
|
||||
|
||||
// 物料变更的场景有5种:物料增加,物料减少,物料替代,改物料数量,改物料项目类别
|
||||
|
||||
// 两个差集元素的个数不等,则认为 difference2 的物料是增加,difference 的物料是减少
|
||||
if (difference.size() != difference2.size()) {
|
||||
for (String add : difference2) {
|
||||
BomNewEbomChildFormalEntity addEntity = newestChildList.stream().filter(item -> item.getMaterialNo().equals(add)).findFirst().orElse(null);
|
||||
if (ObjectUtil.isNotEmpty(addEntity)) {
|
||||
if (!noticeNumDetailEntityListAdded) {
|
||||
BomNewNoticeNumDetailEntity saveDetail = new BomNewNoticeNumDetailEntity();
|
||||
saveDetail.setRowId(IdWorker.getId());
|
||||
saveDetail.setHeaderRowId(noticeNumRowId);
|
||||
saveDetail.setMaterialNo(newestParent.getMaterialNo());
|
||||
saveDetail.setDrawingNo(newestParent.getDrawingNo());
|
||||
saveDetail.setMaterialName(newestParent.getMaterialName());
|
||||
saveDetail.setParentMaterialNo("");
|
||||
saveDetail.setChangeType(1);
|
||||
saveDetail.setChangeContent("BOM物料增加");
|
||||
noticeNumDetailEntityList.add(saveDetail);
|
||||
noticeNumDetailEntityListAdded = true;
|
||||
}
|
||||
BomNewNoticeNumDetail2Entity saveDetail2 = new BomNewNoticeNumDetail2Entity();
|
||||
saveDetail2.setRowId(IdWorker.getId());
|
||||
saveDetail2.setHeaderRowId(noticeNumRowId);
|
||||
saveDetail2.setParentMaterialNo(newestParent.getMaterialNo());
|
||||
saveDetail2.setOrderNum(addEntity.getOrderNumber());
|
||||
saveDetail2.setMaterialNo(addEntity.getMaterialNo());
|
||||
saveDetail2.setChangeType(1);
|
||||
saveDetail2.setChangeContent("BOM物料增加");
|
||||
noticeNumDetailEntity2List.add(saveDetail2);
|
||||
}
|
||||
}
|
||||
for (String remove : difference) {
|
||||
BomNewEbomChildFormalEntity removeEntity = lastChildList.stream().filter(item -> item.getMaterialNo().equals(remove)).findFirst().orElse(null);
|
||||
if (ObjectUtil.isNotEmpty(removeEntity)) {
|
||||
if (!noticeNumDetailEntityListAdded) {
|
||||
BomNewNoticeNumDetailEntity saveDetail = new BomNewNoticeNumDetailEntity();
|
||||
saveDetail.setRowId(IdWorker.getId());
|
||||
saveDetail.setHeaderRowId(noticeNumRowId);
|
||||
saveDetail.setMaterialNo(newestParent.getMaterialNo());
|
||||
saveDetail.setDrawingNo(newestParent.getDrawingNo());
|
||||
saveDetail.setMaterialName(newestParent.getMaterialName());
|
||||
saveDetail.setParentMaterialNo("");
|
||||
saveDetail.setChangeType(2);
|
||||
saveDetail.setChangeContent("BOM物料减少");
|
||||
noticeNumDetailEntityList.add(saveDetail);
|
||||
noticeNumDetailEntityListAdded = true;
|
||||
}
|
||||
BomNewNoticeNumDetail2Entity saveDetail2 = new BomNewNoticeNumDetail2Entity();
|
||||
saveDetail2.setRowId(IdWorker.getId());
|
||||
saveDetail2.setHeaderRowId(noticeNumRowId);
|
||||
saveDetail2.setParentMaterialNo(lastParent.getMaterialNo());
|
||||
saveDetail2.setOrderNum(removeEntity.getOrderNumber());
|
||||
saveDetail2.setMaterialNo(removeEntity.getMaterialNo());
|
||||
saveDetail2.setChangeType(2);
|
||||
saveDetail2.setChangeContent("BOM物料减少");
|
||||
noticeNumDetailEntity2List.add(saveDetail2);
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
// 个数相等,则认为 difference2 是 difference 的替代物料
|
||||
if (CollectionUtil.isNotEmpty(difference2)) {
|
||||
for (String replace : difference2) {
|
||||
BomNewEbomChildFormalEntity replaceEntity = newestChildList.stream().filter(item -> item.getMaterialNo().equals(replace)).findFirst().orElse(null);
|
||||
if (ObjectUtil.isNotEmpty(replaceEntity)) {
|
||||
if (!noticeNumDetailEntityListAdded) {
|
||||
BomNewNoticeNumDetailEntity saveDetail = new BomNewNoticeNumDetailEntity();
|
||||
saveDetail.setRowId(IdWorker.getId());
|
||||
saveDetail.setHeaderRowId(noticeNumRowId);
|
||||
saveDetail.setMaterialNo(newestParent.getMaterialNo());
|
||||
saveDetail.setDrawingNo(newestParent.getDrawingNo());
|
||||
saveDetail.setMaterialName(newestParent.getMaterialName());
|
||||
saveDetail.setParentMaterialNo("");
|
||||
saveDetail.setChangeType(3);
|
||||
saveDetail.setChangeContent("BOM物料替换");
|
||||
noticeNumDetailEntityList.add(saveDetail);
|
||||
noticeNumDetailEntityListAdded = true;
|
||||
}
|
||||
BomNewNoticeNumDetail2Entity saveDetail2 = new BomNewNoticeNumDetail2Entity();
|
||||
saveDetail2.setRowId(IdWorker.getId());
|
||||
saveDetail2.setHeaderRowId(noticeNumRowId);
|
||||
saveDetail2.setParentMaterialNo(newestParent.getMaterialNo());
|
||||
saveDetail2.setOrderNum(replaceEntity.getOrderNumber());
|
||||
saveDetail2.setMaterialNo(replaceEntity.getMaterialNo());
|
||||
saveDetail2.setChangeType(3);
|
||||
saveDetail2.setChangeContent("BOM物料替换");
|
||||
noticeNumDetailEntity2List.add(saveDetail2);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// 遍历交集,如果旧版和新版物料的数量不等,则认为是改物料数量;如果旧版和新版物料的项目类别不一致,则认为是改物料项目类别
|
||||
for (String entity : intersection) {
|
||||
BomNewEbomChildFormalEntity lastChild = lastChildList.stream().filter(item -> item.getMaterialNo().equals(entity)).findFirst().orElse(null);
|
||||
BomNewEbomChildFormalEntity newestChild = newestChildList.stream().filter(item -> item.getMaterialNo().equals(entity)).findFirst().orElse(null);
|
||||
if (ObjectUtil.isNotEmpty(newestChild.getNum()) && newestChild.getNum().compareTo(lastChild.getNum()) != 0) {
|
||||
if (!noticeNumDetailEntityListAdded) {
|
||||
BomNewNoticeNumDetailEntity saveDetail = new BomNewNoticeNumDetailEntity();
|
||||
saveDetail.setRowId(IdWorker.getId());
|
||||
saveDetail.setHeaderRowId(noticeNumRowId);
|
||||
saveDetail.setMaterialNo(newestParent.getMaterialNo());
|
||||
saveDetail.setDrawingNo(newestParent.getDrawingNo());
|
||||
saveDetail.setMaterialName(newestParent.getMaterialName());
|
||||
saveDetail.setParentMaterialNo("");
|
||||
saveDetail.setChangeType(4);
|
||||
saveDetail.setChangeContent("BOM物料数量变更");
|
||||
noticeNumDetailEntityList.add(saveDetail);
|
||||
noticeNumDetailEntityListAdded = true;
|
||||
}
|
||||
BomNewNoticeNumDetail2Entity saveDetail2 = new BomNewNoticeNumDetail2Entity();
|
||||
saveDetail2.setRowId(IdWorker.getId());
|
||||
saveDetail2.setHeaderRowId(noticeNumRowId);
|
||||
saveDetail2.setParentMaterialNo(newestParent.getMaterialNo());
|
||||
saveDetail2.setOrderNum(newestChild.getOrderNumber());
|
||||
saveDetail2.setMaterialNo(newestChild.getMaterialNo());
|
||||
saveDetail2.setChangeType(4);
|
||||
saveDetail2.setChangeContent("BOM物料数量变更:" + lastChild.getNum() + "->" + newestChild.getNum());
|
||||
noticeNumDetailEntity2List.add(saveDetail2);
|
||||
}
|
||||
if (ObjectUtil.isNotEmpty(newestChild.getProjectType()) && !newestChild.getProjectType().equals(lastChild.getProjectType())) {
|
||||
if (!noticeNumDetailEntityListAdded) {
|
||||
BomNewNoticeNumDetailEntity saveDetail = new BomNewNoticeNumDetailEntity();
|
||||
saveDetail.setRowId(IdWorker.getId());
|
||||
saveDetail.setHeaderRowId(noticeNumRowId);
|
||||
saveDetail.setMaterialNo(newestParent.getMaterialNo());
|
||||
saveDetail.setDrawingNo(newestParent.getDrawingNo());
|
||||
saveDetail.setMaterialName(newestParent.getMaterialName());
|
||||
saveDetail.setParentMaterialNo("");
|
||||
saveDetail.setChangeType(5);
|
||||
saveDetail.setChangeContent("BOM项目类别变更");
|
||||
noticeNumDetailEntityList.add(saveDetail);
|
||||
noticeNumDetailEntityListAdded = true;
|
||||
}
|
||||
BomNewNoticeNumDetail2Entity saveDetail2 = new BomNewNoticeNumDetail2Entity();
|
||||
saveDetail2.setRowId(IdWorker.getId());
|
||||
saveDetail2.setHeaderRowId(noticeNumRowId);
|
||||
saveDetail2.setParentMaterialNo(newestParent.getMaterialNo());
|
||||
saveDetail2.setOrderNum(newestChild.getOrderNumber());
|
||||
saveDetail2.setMaterialNo(newestChild.getMaterialNo());
|
||||
saveDetail2.setChangeType(5);
|
||||
saveDetail2.setChangeContent("BOM项目类别变更:" + lastChild.getProjectType() + "->" + newestChild.getProjectType());
|
||||
noticeNumDetailEntity2List.add(saveDetail2);
|
||||
}
|
||||
BomNewEbomParentFormalEntity newestP = bomNewEbomParentFormalService.lambdaQuery().eq(BomNewEbomParentFormalEntity::getRowId, newestChild.getBomVersionRowId()).one();
|
||||
BomNewEbomParentFormalEntity lastP = bomNewEbomParentFormalService.lambdaQuery().eq(BomNewEbomParentFormalEntity::getRowId, lastChild.getBomVersionRowId()).one();
|
||||
buildNoticeNumDetailList(noticeNumRowId, noticeNumDetailEntityList, noticeNumDetailEntity2List, newestP, lastP);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,15 @@
|
|||
package com.nflg.product.bomnew.service;
|
||||
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.nflg.product.bomnew.mapper.master.BomNewNoticeNumDetail2Mapper;
|
||||
import com.nflg.product.bomnew.pojo.entity.BomNewNoticeNumDetail2Entity;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
|
||||
/**
|
||||
* @author makejava
|
||||
*/
|
||||
@Service
|
||||
public class BomNewNoticeNumDetail2Service extends ServiceImpl<BomNewNoticeNumDetail2Mapper, BomNewNoticeNumDetail2Entity> {
|
||||
}
|
||||
|
|
@ -14,6 +14,7 @@ import com.nflg.product.bomnew.config.NacosConfig;
|
|||
import com.nflg.product.bomnew.mapper.master.BomNewNoticeNumMapper;
|
||||
import com.nflg.product.bomnew.pojo.dto.OaNoticeNumParamDto;
|
||||
import com.nflg.product.bomnew.pojo.dto.OaResult;
|
||||
import com.nflg.product.bomnew.pojo.entity.BomNewNoticeNumDetail2Entity;
|
||||
import com.nflg.product.bomnew.pojo.entity.BomNewNoticeNumDetailEntity;
|
||||
import com.nflg.product.bomnew.pojo.entity.BomNewNoticeNumEntity;
|
||||
import com.nflg.product.bomnew.util.HttpUtils;
|
||||
|
|
@ -61,8 +62,8 @@ public class BomNewNoticeNumService extends ServiceImpl<BomNewNoticeNumMapper, B
|
|||
return "MJT" + today + "01";
|
||||
}
|
||||
|
||||
public void sync2Oa(BomNewNoticeNumEntity saveEntity, List<BomNewNoticeNumDetailEntity> saveDetailList) {
|
||||
if (CollectionUtil.isEmpty(saveDetailList)) {
|
||||
public void sync2Oa(BomNewNoticeNumEntity saveEntity, List<BomNewNoticeNumDetailEntity> saveDetailList, List<BomNewNoticeNumDetail2Entity> saveDetail2List) {
|
||||
if (CollectionUtil.isEmpty(saveDetailList) && CollectionUtil.isEmpty(saveDetail2List)) {
|
||||
return;
|
||||
}
|
||||
String employeeNo = SessionUtil.getUserCode();
|
||||
|
|
@ -85,6 +86,16 @@ public class BomNewNoticeNumService extends ServiceImpl<BomNewNoticeNumMapper, B
|
|||
bomList.add(bom);
|
||||
});
|
||||
main.put("bomList", bomList);
|
||||
List<Map<String, Object>> bomList2 = new ArrayList<>(saveDetail2List.size());
|
||||
saveDetail2List.forEach(saveDetail2 -> {
|
||||
Map<String, Object> bom = new HashMap<>();
|
||||
bom.put("parentMaterialNo", saveDetail2.getParentMaterialNo()); // 父级编码
|
||||
bom.put("orderNum", saveDetail2.getOrderNum()); // BOM行编号
|
||||
bom.put("materialNo", saveDetail2.getMaterialNo()); // 编码
|
||||
bom.put("changeContent", saveDetail2.getChangeContent()); // 变更内容
|
||||
bomList2.add(bom);
|
||||
});
|
||||
main.put("bomList2", bomList2);
|
||||
log.info("发起变更通知单-JSON:" + JSONArray.toJSONString(main));
|
||||
HttpUtils httpUtils = new HttpUtils();
|
||||
try {
|
||||
|
|
|
|||
|
|
@ -120,6 +120,8 @@ public class BomNewPbomParentService extends ServiceImpl<BomNewPbomParentMapper,
|
|||
private BomNewNoticeNumService bomNewNoticeNumService;
|
||||
@Resource
|
||||
private BomNewNoticeNumDetailService bomNewNoticeNumDetailService;
|
||||
@Resource
|
||||
private BomNewNoticeNumDetail2Service bomNewNoticeNumDetail2Service;
|
||||
|
||||
/**
|
||||
* pbom-工作列表
|
||||
|
|
@ -1541,126 +1543,241 @@ public class BomNewPbomParentService extends ServiceImpl<BomNewPbomParentMapper,
|
|||
|
||||
saveEntity.setChangeDesc(param.getChangeDesc());
|
||||
saveEntity.setNoticeContent(newestParent.getMaterialDesc() + "BOM变更(由PBOM发起),详见下方明细:");
|
||||
saveEntity.setNoticeTitle("关于" + newestParent.getMaterialDesc() + "BOM变更的通知");
|
||||
saveEntity.setNoticeTitle(param.getChangeDesc());
|
||||
saveEntity.setOaStatus(1); // 待提交
|
||||
saveEntity.setCreatedName(SessionUtil.getRealName());
|
||||
saveEntity.setCreatedBy(SessionUtil.getUserCode());
|
||||
saveEntity.setCreatedTime(LocalDateTime.now());
|
||||
|
||||
String autoCode = null;
|
||||
// 关联已有通知单
|
||||
if (param.getNumType() == 2) {
|
||||
saveEntity.setNoticeNum(param.getNoticeNums());
|
||||
} else {
|
||||
saveEntity.setNoticeNum(bomNewNoticeNumService.generateNoticeNum());
|
||||
autoCode = bomNewNoticeNumService.generateNoticeNum();
|
||||
saveEntity.setNoticeNum(autoCode);
|
||||
}
|
||||
bomNewNoticeNumService.save(saveEntity);
|
||||
|
||||
// 正式表回写通知单号,升版说明
|
||||
BomNewPbomParentFormalEntity updateFormalParent = new BomNewPbomParentFormalEntity();
|
||||
updateFormalParent.setRowId(versionList.get(0).getRowId());
|
||||
if (param.getNumType() == 2) {
|
||||
updateFormalParent.setNoticeNums(param.getNoticeNums());
|
||||
} else {
|
||||
updateFormalParent.setNoticeNums(autoCode);
|
||||
}
|
||||
updateFormalParent.setChangeDesc(param.getChangeDesc());
|
||||
bomNewPbomParentFormalService.updateById(updateFormalParent);
|
||||
// 工作表最新版回写通知单号,升版说明(因为正式表标签页查询的也是工作表最新版的数据?)
|
||||
BomNewPbomParentEntity updateParent = new BomNewPbomParentEntity();
|
||||
updateParent.setRowId(versionList.get(0).getRowId());
|
||||
if (param.getNumType() == 2) {
|
||||
updateParent.setNoticeNums(param.getNoticeNums());
|
||||
} else {
|
||||
updateParent.setNoticeNums(autoCode);
|
||||
}
|
||||
updateParent.setChangeDesc(param.getChangeDesc());
|
||||
this.updateById(updateParent);
|
||||
|
||||
// 新建通知单
|
||||
if (param.getNumType() == 1) {
|
||||
List<BomNewPbomChildFormalEntity> newestChildList = bomNewPbomChildFormalService.lambdaQuery().eq(BomNewPbomChildFormalEntity::getParentRowId, newestParent.getRowId()).list();
|
||||
List<BomNewPbomChildFormalEntity> lastChildList = bomNewPbomChildFormalService.lambdaQuery().eq(BomNewPbomChildFormalEntity::getParentRowId, lastParent.getRowId()).list();
|
||||
List<String> newestMaterialNos = newestChildList.stream().map(BomNewPbomChildFormalEntity::getMaterialNo).collect(Collectors.toList());
|
||||
List<String> lastMaterialNos = lastChildList.stream().map(BomNewPbomChildFormalEntity::getMaterialNo).collect(Collectors.toList());
|
||||
// BOM明细集合1,如果某父级A的任一子级,相对于上一版本有变更(变更判断优先顺序:物料增加>物料减少>物料替代>改物料数量>改物料项目类别),则记录父级A到集合1
|
||||
List<BomNewNoticeNumDetailEntity> noticeNumDetailEntityList = new ArrayList<>();
|
||||
// BOM明细集合2,如果某父级A的子级,相对于上一版本有变更(5种情况都得考虑),则记录变更的子级到集合2
|
||||
List<BomNewNoticeNumDetail2Entity> noticeNumDetailEntity2List = new ArrayList<>();
|
||||
|
||||
// 假设旧版 [1,2,3,4,5] 新版 [3,4,5,6,7]
|
||||
// 旧版和新版的交集 -> [3,4,5]
|
||||
List<String> intersection =new ArrayList<>(lastMaterialNos);
|
||||
intersection.retainAll(newestMaterialNos);
|
||||
// 旧版相对于新版的差集 -> [1,2]
|
||||
List<String> difference = new ArrayList<>(lastMaterialNos);
|
||||
difference.removeAll(newestMaterialNos);
|
||||
// 新版相对于旧版的差集 -> [6,7]
|
||||
List<String> difference2 = new ArrayList<>(newestMaterialNos);
|
||||
difference2.removeAll(lastMaterialNos);
|
||||
long start = System.currentTimeMillis();
|
||||
// 递归调用
|
||||
buildNoticeNumDetailList(saveEntity.getRowId(), noticeNumDetailEntityList, noticeNumDetailEntity2List, newestParent, lastParent);
|
||||
long end = System.currentTimeMillis();
|
||||
log.info("【PBOM {} 生成变更通知单】递归调用耗时(ms):{}", newestParent.getMaterialNo(), (end - start));
|
||||
|
||||
List<BomNewNoticeNumDetailEntity> saveDetailList = new ArrayList<>();
|
||||
// 物料变更的场景有5种:物料增加,物料减少,物料替代,改物料数量,改物料项目类别
|
||||
|
||||
// 两个差集元素的个数不等,则认为 difference2 的物料是增加,difference 的物料是减少
|
||||
if (difference.size() != difference2.size()) {
|
||||
difference.forEach(remove -> {
|
||||
BomNewPbomChildFormalEntity removeEntity = lastChildList.stream().filter(item -> item.getMaterialNo().equals(remove)).findFirst().orElse(null);
|
||||
if (ObjectUtil.isNotEmpty(removeEntity)) {
|
||||
BomNewNoticeNumDetailEntity saveDetail = new BomNewNoticeNumDetailEntity();
|
||||
saveDetail.setRowId(IdWorker.getId());
|
||||
saveDetail.setHeaderRowId(saveEntity.getRowId());
|
||||
saveDetail.setMaterialNo(removeEntity.getMaterialNo());
|
||||
saveDetail.setDrawingNo(removeEntity.getDrawingNo());
|
||||
saveDetail.setMaterialName(removeEntity.getMaterialName());
|
||||
saveDetail.setParentMaterialNo("");
|
||||
saveDetail.setChangeType(2);
|
||||
saveDetail.setChangeContent("BOM物料减少");
|
||||
saveDetailList.add(saveDetail);
|
||||
}
|
||||
});
|
||||
difference2.forEach(add -> {
|
||||
BomNewPbomChildFormalEntity addEntity = newestChildList.stream().filter(item -> item.getMaterialNo().equals(add)).findFirst().orElse(null);
|
||||
if (ObjectUtil.isNotEmpty(addEntity)) {
|
||||
BomNewNoticeNumDetailEntity saveDetail = new BomNewNoticeNumDetailEntity();
|
||||
saveDetail.setRowId(IdWorker.getId());
|
||||
saveDetail.setHeaderRowId(saveEntity.getRowId());
|
||||
saveDetail.setMaterialNo(addEntity.getMaterialNo());
|
||||
saveDetail.setDrawingNo(addEntity.getDrawingNo());
|
||||
saveDetail.setMaterialName(addEntity.getMaterialName());
|
||||
saveDetail.setParentMaterialNo("");
|
||||
saveDetail.setChangeType(1);
|
||||
saveDetail.setChangeContent("BOM物料增加");
|
||||
saveDetailList.add(saveDetail);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
// 个数相等,则认为 difference2 是 difference 的替代物料
|
||||
if (CollectionUtil.isNotEmpty(difference2)) {
|
||||
difference2.forEach(replace -> {
|
||||
BomNewPbomChildFormalEntity replaceEntity = newestChildList.stream().filter(item -> item.getMaterialNo().equals(replace)).findFirst().orElse(null);
|
||||
if (ObjectUtil.isNotEmpty(replaceEntity)) {
|
||||
BomNewNoticeNumDetailEntity saveDetail = new BomNewNoticeNumDetailEntity();
|
||||
saveDetail.setRowId(IdWorker.getId());
|
||||
saveDetail.setHeaderRowId(saveEntity.getRowId());
|
||||
saveDetail.setMaterialNo(replaceEntity.getMaterialNo());
|
||||
saveDetail.setDrawingNo(replaceEntity.getDrawingNo());
|
||||
saveDetail.setMaterialName(replaceEntity.getMaterialName());
|
||||
saveDetail.setParentMaterialNo("");
|
||||
saveDetail.setChangeType(3);
|
||||
saveDetail.setChangeContent("BOM物料替换");
|
||||
saveDetailList.add(saveDetail);
|
||||
}
|
||||
});
|
||||
}
|
||||
if (CollectionUtil.isNotEmpty(noticeNumDetailEntityList)) {
|
||||
bomNewNoticeNumDetailService.saveBatch(noticeNumDetailEntityList);
|
||||
}
|
||||
// 遍历交集,如果旧版和新版物料的数量不等,则认为是改物料数量;如果旧版和新版物料的项目类别不一致,则认为是改物料项目类别
|
||||
intersection.forEach(entity -> {
|
||||
BomNewPbomChildFormalEntity lastChild = lastChildList.stream().filter(item -> item.getMaterialNo().equals(entity)).findFirst().orElse(null);
|
||||
BomNewPbomChildFormalEntity newestChild = newestChildList.stream().filter(item -> item.getMaterialNo().equals(entity)).findFirst().orElse(null);
|
||||
if (ObjectUtil.isNotEmpty(newestChild.getNum()) && newestChild.getNum().compareTo(lastChild.getNum()) != 0) {
|
||||
BomNewNoticeNumDetailEntity saveDetail = new BomNewNoticeNumDetailEntity();
|
||||
saveDetail.setRowId(IdWorker.getId());
|
||||
saveDetail.setHeaderRowId(saveEntity.getRowId());
|
||||
saveDetail.setMaterialNo(newestChild.getMaterialNo());
|
||||
saveDetail.setDrawingNo(newestChild.getDrawingNo());
|
||||
saveDetail.setMaterialName(newestChild.getMaterialName());
|
||||
saveDetail.setParentMaterialNo("");
|
||||
saveDetail.setChangeType(4);
|
||||
saveDetail.setChangeContent("BOM物料数量变更");
|
||||
saveDetailList.add(saveDetail);
|
||||
}
|
||||
if (ObjectUtil.isNotEmpty(newestChild.getProjectType()) && !newestChild.getProjectType().equals(lastChild.getProjectType())) {
|
||||
BomNewNoticeNumDetailEntity saveDetail = new BomNewNoticeNumDetailEntity();
|
||||
saveDetail.setRowId(IdWorker.getId());
|
||||
saveDetail.setHeaderRowId(saveEntity.getRowId());
|
||||
saveDetail.setMaterialNo(newestChild.getMaterialNo());
|
||||
saveDetail.setDrawingNo(newestChild.getDrawingNo());
|
||||
saveDetail.setMaterialName(newestChild.getMaterialName());
|
||||
saveDetail.setParentMaterialNo("");
|
||||
saveDetail.setChangeType(5);
|
||||
saveDetail.setChangeContent("BOM项目类别变更");
|
||||
saveDetailList.add(saveDetail);
|
||||
}
|
||||
});
|
||||
bomNewNoticeNumDetailService.saveBatch(saveDetailList);
|
||||
bomNewNoticeNumService.sync2Oa(saveEntity, saveDetailList);
|
||||
if (CollectionUtil.isNotEmpty(noticeNumDetailEntity2List)) {
|
||||
bomNewNoticeNumDetail2Service.saveBatch(noticeNumDetailEntity2List);
|
||||
}
|
||||
bomNewNoticeNumService.sync2Oa(saveEntity, noticeNumDetailEntityList, noticeNumDetailEntity2List);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
private void buildNoticeNumDetailList(Long noticeNumRowId, List<BomNewNoticeNumDetailEntity> noticeNumDetailEntityList, List<BomNewNoticeNumDetail2Entity> noticeNumDetailEntity2List,
|
||||
BomNewPbomParentFormalEntity newestParent, BomNewPbomParentFormalEntity lastParent) {
|
||||
if (ObjectUtil.isEmpty(newestParent) || ObjectUtil.isEmpty(lastParent)) {
|
||||
return;
|
||||
}
|
||||
List<BomNewPbomChildFormalEntity> newestChildList = bomNewPbomChildFormalService.lambdaQuery().eq(BomNewPbomChildFormalEntity::getParentRowId, newestParent.getRowId()).list();
|
||||
List<BomNewPbomChildFormalEntity> lastChildList = bomNewPbomChildFormalService.lambdaQuery().eq(BomNewPbomChildFormalEntity::getParentRowId, lastParent.getRowId()).list();
|
||||
if (CollectionUtil.isEmpty(newestChildList) || CollectionUtil.isEmpty(lastChildList)) {
|
||||
return;
|
||||
}
|
||||
List<String> newestMaterialNos = newestChildList.stream().map(BomNewPbomChildFormalEntity::getMaterialNo).collect(Collectors.toList());
|
||||
List<String> lastMaterialNos = lastChildList.stream().map(BomNewPbomChildFormalEntity::getMaterialNo).collect(Collectors.toList());
|
||||
|
||||
// Bom明细1 是否已经添加过该父级(只需添加一次)
|
||||
boolean noticeNumDetailEntityListAdded = false;
|
||||
|
||||
// 假设旧版 [1,2,3,4,5] 新版 [3,4,5,6,7]
|
||||
// 旧版和新版的交集 -> [3,4,5]
|
||||
List<String> intersection = new ArrayList<>(lastMaterialNos);
|
||||
intersection.retainAll(newestMaterialNos);
|
||||
// 旧版相对于新版的差集 -> [1,2]
|
||||
List<String> difference = new ArrayList<>(lastMaterialNos);
|
||||
difference.removeAll(newestMaterialNos);
|
||||
// 新版相对于旧版的差集 -> [6,7]
|
||||
List<String> difference2 = new ArrayList<>(newestMaterialNos);
|
||||
difference2.removeAll(lastMaterialNos);
|
||||
|
||||
// 物料变更的场景有5种:物料增加,物料减少,物料替代,改物料数量,改物料项目类别
|
||||
|
||||
// 两个差集元素的个数不等,则认为 difference2 的物料是增加,difference 的物料是减少
|
||||
if (difference.size() != difference2.size()) {
|
||||
for (String add : difference2) {
|
||||
BomNewPbomChildFormalEntity addEntity = newestChildList.stream().filter(item -> item.getMaterialNo().equals(add)).findFirst().orElse(null);
|
||||
if (ObjectUtil.isNotEmpty(addEntity)) {
|
||||
if (!noticeNumDetailEntityListAdded) {
|
||||
BomNewNoticeNumDetailEntity saveDetail = new BomNewNoticeNumDetailEntity();
|
||||
saveDetail.setRowId(IdWorker.getId());
|
||||
saveDetail.setHeaderRowId(noticeNumRowId);
|
||||
saveDetail.setMaterialNo(newestParent.getMaterialNo());
|
||||
saveDetail.setDrawingNo(newestParent.getDrawingNo());
|
||||
saveDetail.setMaterialName(newestParent.getMaterialName());
|
||||
saveDetail.setParentMaterialNo("");
|
||||
saveDetail.setChangeType(1);
|
||||
saveDetail.setChangeContent("BOM物料增加");
|
||||
noticeNumDetailEntityList.add(saveDetail);
|
||||
noticeNumDetailEntityListAdded = true;
|
||||
}
|
||||
BomNewNoticeNumDetail2Entity saveDetail2 = new BomNewNoticeNumDetail2Entity();
|
||||
saveDetail2.setRowId(IdWorker.getId());
|
||||
saveDetail2.setHeaderRowId(noticeNumRowId);
|
||||
saveDetail2.setParentMaterialNo(newestParent.getMaterialNo());
|
||||
saveDetail2.setOrderNum(addEntity.getOrderNumber());
|
||||
saveDetail2.setMaterialNo(addEntity.getMaterialNo());
|
||||
saveDetail2.setChangeType(1);
|
||||
saveDetail2.setChangeContent("BOM物料增加");
|
||||
noticeNumDetailEntity2List.add(saveDetail2);
|
||||
}
|
||||
}
|
||||
for (String remove : difference) {
|
||||
BomNewPbomChildFormalEntity removeEntity = lastChildList.stream().filter(item -> item.getMaterialNo().equals(remove)).findFirst().orElse(null);
|
||||
if (ObjectUtil.isNotEmpty(removeEntity)) {
|
||||
if (!noticeNumDetailEntityListAdded) {
|
||||
BomNewNoticeNumDetailEntity saveDetail = new BomNewNoticeNumDetailEntity();
|
||||
saveDetail.setRowId(IdWorker.getId());
|
||||
saveDetail.setHeaderRowId(noticeNumRowId);
|
||||
saveDetail.setMaterialNo(newestParent.getMaterialNo());
|
||||
saveDetail.setDrawingNo(newestParent.getDrawingNo());
|
||||
saveDetail.setMaterialName(newestParent.getMaterialName());
|
||||
saveDetail.setParentMaterialNo("");
|
||||
saveDetail.setChangeType(2);
|
||||
saveDetail.setChangeContent("BOM物料减少");
|
||||
noticeNumDetailEntityList.add(saveDetail);
|
||||
noticeNumDetailEntityListAdded = true;
|
||||
}
|
||||
BomNewNoticeNumDetail2Entity saveDetail2 = new BomNewNoticeNumDetail2Entity();
|
||||
saveDetail2.setRowId(IdWorker.getId());
|
||||
saveDetail2.setHeaderRowId(noticeNumRowId);
|
||||
saveDetail2.setParentMaterialNo(lastParent.getMaterialNo());
|
||||
saveDetail2.setOrderNum(removeEntity.getOrderNumber());
|
||||
saveDetail2.setMaterialNo(removeEntity.getMaterialNo());
|
||||
saveDetail2.setChangeType(2);
|
||||
saveDetail2.setChangeContent("BOM物料减少");
|
||||
noticeNumDetailEntity2List.add(saveDetail2);
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
// 个数相等,则认为 difference2 是 difference 的替代物料
|
||||
if (CollectionUtil.isNotEmpty(difference2)) {
|
||||
for (String replace : difference2) {
|
||||
BomNewPbomChildFormalEntity replaceEntity = newestChildList.stream().filter(item -> item.getMaterialNo().equals(replace)).findFirst().orElse(null);
|
||||
if (ObjectUtil.isNotEmpty(replaceEntity)) {
|
||||
if (!noticeNumDetailEntityListAdded) {
|
||||
BomNewNoticeNumDetailEntity saveDetail = new BomNewNoticeNumDetailEntity();
|
||||
saveDetail.setRowId(IdWorker.getId());
|
||||
saveDetail.setHeaderRowId(noticeNumRowId);
|
||||
saveDetail.setMaterialNo(newestParent.getMaterialNo());
|
||||
saveDetail.setDrawingNo(newestParent.getDrawingNo());
|
||||
saveDetail.setMaterialName(newestParent.getMaterialName());
|
||||
saveDetail.setParentMaterialNo("");
|
||||
saveDetail.setChangeType(3);
|
||||
saveDetail.setChangeContent("BOM物料替换");
|
||||
noticeNumDetailEntityList.add(saveDetail);
|
||||
noticeNumDetailEntityListAdded = true;
|
||||
}
|
||||
BomNewNoticeNumDetail2Entity saveDetail2 = new BomNewNoticeNumDetail2Entity();
|
||||
saveDetail2.setRowId(IdWorker.getId());
|
||||
saveDetail2.setHeaderRowId(noticeNumRowId);
|
||||
saveDetail2.setParentMaterialNo(newestParent.getMaterialNo());
|
||||
saveDetail2.setOrderNum(replaceEntity.getOrderNumber());
|
||||
saveDetail2.setMaterialNo(replaceEntity.getMaterialNo());
|
||||
saveDetail2.setChangeType(3);
|
||||
saveDetail2.setChangeContent("BOM物料替换");
|
||||
noticeNumDetailEntity2List.add(saveDetail2);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// 遍历交集,如果旧版和新版物料的数量不等,则认为是改物料数量;如果旧版和新版物料的项目类别不一致,则认为是改物料项目类别
|
||||
for (String entity : intersection) {
|
||||
BomNewPbomChildFormalEntity lastChild = lastChildList.stream().filter(item -> item.getMaterialNo().equals(entity)).findFirst().orElse(null);
|
||||
BomNewPbomChildFormalEntity newestChild = newestChildList.stream().filter(item -> item.getMaterialNo().equals(entity)).findFirst().orElse(null);
|
||||
if (ObjectUtil.isNotEmpty(newestChild.getNum()) && newestChild.getNum().compareTo(lastChild.getNum()) != 0) {
|
||||
if (!noticeNumDetailEntityListAdded) {
|
||||
BomNewNoticeNumDetailEntity saveDetail = new BomNewNoticeNumDetailEntity();
|
||||
saveDetail.setRowId(IdWorker.getId());
|
||||
saveDetail.setHeaderRowId(noticeNumRowId);
|
||||
saveDetail.setMaterialNo(newestParent.getMaterialNo());
|
||||
saveDetail.setDrawingNo(newestParent.getDrawingNo());
|
||||
saveDetail.setMaterialName(newestParent.getMaterialName());
|
||||
saveDetail.setParentMaterialNo("");
|
||||
saveDetail.setChangeType(4);
|
||||
saveDetail.setChangeContent("BOM物料数量变更");
|
||||
noticeNumDetailEntityList.add(saveDetail);
|
||||
noticeNumDetailEntityListAdded = true;
|
||||
}
|
||||
BomNewNoticeNumDetail2Entity saveDetail2 = new BomNewNoticeNumDetail2Entity();
|
||||
saveDetail2.setRowId(IdWorker.getId());
|
||||
saveDetail2.setHeaderRowId(noticeNumRowId);
|
||||
saveDetail2.setParentMaterialNo(newestParent.getMaterialNo());
|
||||
saveDetail2.setOrderNum(newestChild.getOrderNumber());
|
||||
saveDetail2.setMaterialNo(newestChild.getMaterialNo());
|
||||
saveDetail2.setChangeType(4);
|
||||
saveDetail2.setChangeContent("BOM物料数量变更:" + lastChild.getNum() + "->" + newestChild.getNum());
|
||||
noticeNumDetailEntity2List.add(saveDetail2);
|
||||
}
|
||||
if (ObjectUtil.isNotEmpty(newestChild.getProjectType()) && !newestChild.getProjectType().equals(lastChild.getProjectType())) {
|
||||
if (!noticeNumDetailEntityListAdded) {
|
||||
BomNewNoticeNumDetailEntity saveDetail = new BomNewNoticeNumDetailEntity();
|
||||
saveDetail.setRowId(IdWorker.getId());
|
||||
saveDetail.setHeaderRowId(noticeNumRowId);
|
||||
saveDetail.setMaterialNo(newestParent.getMaterialNo());
|
||||
saveDetail.setDrawingNo(newestParent.getDrawingNo());
|
||||
saveDetail.setMaterialName(newestParent.getMaterialName());
|
||||
saveDetail.setParentMaterialNo("");
|
||||
saveDetail.setChangeType(5);
|
||||
saveDetail.setChangeContent("BOM项目类别变更");
|
||||
noticeNumDetailEntityList.add(saveDetail);
|
||||
noticeNumDetailEntityListAdded = true;
|
||||
}
|
||||
BomNewNoticeNumDetail2Entity saveDetail2 = new BomNewNoticeNumDetail2Entity();
|
||||
saveDetail2.setRowId(IdWorker.getId());
|
||||
saveDetail2.setHeaderRowId(noticeNumRowId);
|
||||
saveDetail2.setParentMaterialNo(newestParent.getMaterialNo());
|
||||
saveDetail2.setOrderNum(newestChild.getOrderNumber());
|
||||
saveDetail2.setMaterialNo(newestChild.getMaterialNo());
|
||||
saveDetail2.setChangeType(5);
|
||||
saveDetail2.setChangeContent("BOM项目类别变更:" + lastChild.getProjectType() + "->" + newestChild.getProjectType());
|
||||
noticeNumDetailEntity2List.add(saveDetail2);
|
||||
}
|
||||
BomNewPbomParentFormalEntity newestP = bomNewPbomParentFormalService.lambdaQuery().eq(BomNewPbomParentFormalEntity::getRowId, newestChild.getBomVersionRowId()).one();
|
||||
BomNewPbomParentFormalEntity lastP = bomNewPbomParentFormalService.lambdaQuery().eq(BomNewPbomParentFormalEntity::getRowId, lastChild.getBomVersionRowId()).one();
|
||||
buildNoticeNumDetailList(noticeNumRowId, noticeNumDetailEntityList, noticeNumDetailEntity2List, newestP, lastP);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.nflg.product.bomnew.mapper.master.BomNewNoticeNumDetail2Mapper">
|
||||
</mapper>
|
||||
Loading…
Reference in New Issue