Merge branch 'feature/DM/nflg-bom' of http://112.74.186.154:3000/nflj/nflg_project into feature/DM/nflg-bom

This commit is contained in:
jing's 2023-12-06 18:10:19 +08:00
commit b6cd238c50
14 changed files with 102 additions and 29 deletions

View File

@ -3,6 +3,7 @@ package com.nflg;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.scheduling.annotation.EnableScheduling;
@ -18,6 +19,7 @@ import java.util.TimeZone;
@EnableOpenApi
@EnableDiscoveryClient
@EnableScheduling
@EnableFeignClients
public class BomnewApplication {
public static void main(String[] args) {

View File

@ -19,6 +19,8 @@ import io.swagger.annotations.ApiOperation;
import nflg.product.common.constant.STATE;
import nflg.product.common.vo.ResultVO;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.support.TransactionSynchronizationAdapter;
import org.springframework.transaction.support.TransactionSynchronizationManager;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.ttzero.excel.entity.ListMapSheet;
@ -135,8 +137,13 @@ public class OriginalBomApi extends BaseApi {
return ResultVO.error("请上传Excel文件");
}
originalParentService.importBom(file);
TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {
@Override
public void afterCommit() {
originalParentService.computeLevelNumAndRootState();
}
});
originalParentService.computeLevelNumAndRootState();
return ResultVO.success(true);
}

View File

@ -8,7 +8,7 @@ import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
@FeignClient(value = "service-material")
@FeignClient(value = "material")
public interface MaterialMainClient {

View File

@ -2,6 +2,9 @@ package com.nflg.product.bomnew.mapper.master;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.nflg.product.bomnew.pojo.entity.BomNewOriginalChildEntity;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* t_bom_new_original_child 表数据库访问层
@ -11,4 +14,7 @@ import com.nflg.product.bomnew.pojo.entity.BomNewOriginalChildEntity;
* @since 2023-11-09 09:25:02
*/
public interface BomNewOriginalChildMapper extends BaseMapper<BomNewOriginalChildEntity> {
void delOriginalChildNotInRowIds(@Param("rowIds")List<Long> rowIds);
}

View File

@ -49,4 +49,7 @@ public class BaseMaterialVO {
*/
@ApiModelProperty(value = "材料")
private String material;
@ApiModelProperty("材质")
private String materialTexture;
}

View File

@ -85,11 +85,7 @@ public class BomNewEbomParentVO extends BaseMaterialVO implements Serializable {
@ApiModelProperty(value = "是否最新版 0-否 1-是")
private Integer lastVersionIs;
/**
* 材质
*/
@ApiModelProperty(value = "材质")
private String materialTexture;
/**
* 单重

View File

@ -112,7 +112,7 @@ public class BomOriginalListVO extends BaseMaterialVO {
/**
* 状态 1=待转换2=已转换3=借用件
*/
@ApiModelProperty(value = "状态 1=待转换、2=已转换、3=借用件")
@ApiModelProperty(value = "状态 1=待转换、2=已转换、3=借用件,4=引用件")
private Integer status;
/**

View File

@ -41,6 +41,7 @@ import java.util.concurrent.ExecutionException;
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.ForkJoinTask;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
@ -106,8 +107,8 @@ public class BomNewOriginalParentService extends ServiceImpl<BomNewOriginalParen
if (CollUtil.isNotEmpty(childEntities)) {
//删除行
List<Long> delRowIds = bom.getBomList().stream().filter(u -> u.getDelIs().equals(1)).map(u -> u.getRowId()).collect(Collectors.toList());
originalChildService.getBaseMapper().deleteBatchIds(delRowIds);
List<Long> delRowIds = bom.getBomList().stream().map(u->u.getRowId()).collect(Collectors.toList());
originalChildService.getBaseMapper().delOriginalChildNotInRowIds(delRowIds);
originalChildService.saveOrUpdateBatch(childEntities);
}
return true;
@ -160,15 +161,15 @@ public class BomNewOriginalParentService extends ServiceImpl<BomNewOriginalParen
child.setLevelNum(parentEntity.getLevelNum());
child.setDeptName(parentEntity.getDeptName());
child.setSource(parentEntity.getSource());
if(child.equals(OriginalStatusEnum.OVER_CONVERT)){
if(parentEntity.getStatus().equals(OriginalStatusEnum.OVER_CONVERT)){
child.setStatus(OriginalStatusEnum.BORROWED_PARTS.getValue());
}
//非本人则为借用件
if (child.getCreatedBy().equals(SessionUtil.getUserCode()) && OriginalStatusEnum.UN_CONVERT.equalsValue(parentEntity.getStatus())) {
if (!parentEntity.getCreatedBy().equals(child.getCreatedBy()) && OriginalStatusEnum.UN_CONVERT.equalsValue(parentEntity.getStatus())) {
child.setStatus(OriginalStatusEnum.REFERENCE.getValue());
}
} else { //无BOM-版本时 确定版本号
child.setStatus(OriginalStatusEnum.UN_CONVERT.getValue());
child.setStatus(parent.getStatus());
child.setSource(Objects.nonNull(parent) ? parent.getSource() : OriginalSourceEnum.CAD_IMPORT.getValue());
child.setDeviseUserCode(parent.getDeviseUserCode());
child.setDeviseName(parent.getDeviseName());
@ -206,6 +207,7 @@ public class BomNewOriginalParentService extends ServiceImpl<BomNewOriginalParen
*/
private List<BomOriginalListVO> getBomTree(Long rowId) throws ExecutionException, InterruptedException {
List<BomOriginalListVO> bomDetail = this.getBaseMapper().getParentChild(rowId);
BomNewOriginalParentEntity parentEntity = this.getBaseMapper().selectById(rowId);
OriginalBomDetailTask detailTask = new OriginalBomDetailTask(bomDetail);
ForkJoinTask<List<BomOriginalListVO>> submit = bomDetailPool.submit(detailTask);
@ -301,9 +303,12 @@ public class BomNewOriginalParentService extends ServiceImpl<BomNewOriginalParen
VUtils.isTure(Objects.isNull(parentEntity)).throwMessage("该节点不存在,请检查参数是否正确");
VUtils.isTure(!parentEntity.getCreatedBy().equals(SessionUtil.getUserCode())).throwMessage("该节点不属于你,你无权删除");
List<BomOriginalListVO> bomTree = getBomTree(bomRowId);
List<Long> delParentRowId = bomTree.stream().filter(u -> u.getCreatedBy().equals(SessionUtil.getUserCode()) && OriginalStatusEnum.UN_CONVERT.equalsValue(u.getStatus())).map(u -> u.getParentRowId()).collect(Collectors.toList());
//需删除的BOM
List<BomOriginalListVO> delBom = bomTree.stream().filter(u -> u.getBomRowId() > 0 && OriginalStatusEnum.UN_CONVERT.equalsValue(u.getStatus())).collect(Collectors.toList());
List<Long> delParentRowId=new ArrayList<>();
for ( BomOriginalListVO bom: delBom) {
delParentRowId.add(bom.getBomRowId());
}
delParentRowId.add(bomRowId);
if (CollUtil.isNotEmpty(delParentRowId)) {
this.getBaseMapper().delBatch(delParentRowId);

View File

@ -122,7 +122,7 @@ public abstract class BaseConvert {
parentEntity.setStatus(OriginalStatusEnum.UN_CONVERT.getValue());
parentEntity.setEditStatus(OriginalEditStatusEnum.HANDLER_CREATED.getValue());
parentEntity.setDeptRowId(SessionUtil.getPartRowId());
parentEntity.setDeptName(SessionUtil.getSecondFullDeptName());
parentEntity.setDeptName(SessionUtil.getDepartName());
parentEntity.setSource(originalSourceEnum.getValue());
parentEntity.setCreatedBy(material.getCreatedBy());

View File

@ -4,6 +4,8 @@ import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.extra.spring.SpringUtil;
import com.google.common.collect.ImmutableList;
import com.nflg.product.base.core.conmon.util.SessionUtil;
import com.nflg.product.bomnew.constant.OriginalStatusEnum;
import com.nflg.product.bomnew.pojo.entity.BomNewOriginalParentEntity;
import com.nflg.product.bomnew.pojo.vo.BomOriginalListVO;
import com.nflg.product.bomnew.service.BomNewOriginalParentService;
@ -59,6 +61,14 @@ public class OriginalBomDetailTask extends RecursiveTask<List<BomOriginalListVO>
detailVO.setChildBomRowId(bomNewOriginalParentEntity.getRowId());
detailVO.setBomRowId(bomNewOriginalParentEntity.getRowId());
if(bomNewOriginalParentEntity.getStatus().equals(OriginalStatusEnum.OVER_CONVERT)){
detailVO.setStatus(OriginalStatusEnum.BORROWED_PARTS.getValue());
}
//非本人则为借用件
if (!bomNewOriginalParentEntity.getCreatedBy().equals(detailVO.getCreatedBy()) && OriginalStatusEnum.UN_CONVERT.equalsValue(bomNewOriginalParentEntity.getStatus())) {
detailVO.setStatus(OriginalStatusEnum.REFERENCE.getValue());
}
}
}
@ -82,7 +92,8 @@ public class OriginalBomDetailTask extends RecursiveTask<List<BomOriginalListVO>
result.addAll(bomDetail);
if (CollUtil.isNotEmpty(bomDetail)) {
levelNumAdd();
List<BomOriginalListVO> collect = bomDetail.stream().filter(u -> u.getStatus().equals(1)).collect(Collectors.toList());
levelNumAdd(collect.size());
List<Long> childBowIds = bomDetail.stream().filter(u-> u.getChildBomRowId()!=null && u.getChildBomRowId() > 0).map(u->u.getChildBomRowId()).collect(Collectors.toList());
if(CollUtil.isNotEmpty(childBowIds)) {
List<BomOriginalListVO> bom = SpringUtil.getBean(BomNewOriginalParentService.class).getBaseMapper().getParentChildBatch(childBowIds);
@ -99,7 +110,7 @@ public class OriginalBomDetailTask extends RecursiveTask<List<BomOriginalListVO>
}
public synchronized void levelNumAdd(){
levelNum++;
public synchronized void levelNumAdd(Integer num){
levelNum=levelNum+num;
}
}

View File

@ -62,7 +62,7 @@ public class OriginalBomToEBomConvert extends BaseConvert {
}
public void convert() {
checkData();
// checkData();
SpringUtil.getBean(MaterialMainService.class).intiMaterialInfo(ImmutableList.of(parent));
SpringUtil.getBean(MaterialMainService.class).intiMaterialInfo(bomDetail);

View File

@ -131,10 +131,20 @@ public class PlmBomToOriginalConvert extends BaseConvert {
{
BomNewOriginalParentEntity oBOM =getOriginalBomForMaterial(parent.getChartNo());
if(Objects.isNull(oBOM)){
BomNewOriginalParentEntity parentEntity = buildParentEntity(parent,"",originalSourceEnum);
if (StrUtil.isNotBlank(parent.getMaterialCategoryCode()) && parent.getMaterialCategoryCode().equals(OriginalConstant.COMMON_MATERIAL_CATEGORY_CODE) && CollUtil.isEmpty(childs)) {
handlerCommonMaterial(parentEntity);
// 一般零部件
if(StrUtil.isNotBlank(parent.getMaterialCategoryCode()) && parent.getMaterialCategoryCode().equals(OriginalConstant.COMMON_MATERIAL_CATEGORY_CODE) && CollUtil.isEmpty(childs)) {
// 有物料编码则通过规则匹配物料作为下级
if (StrUtil.isNotBlank(parent.getMaterialNo())) {
BomNewOriginalParentEntity parentEntity = buildParentEntity(parent, "", originalSourceEnum);
handlerCommonMaterial(parentEntity);
}
else { //无物料编码则通过规则找物料 找到则替换未找到则直接进库ebom 再处理
handlerCommonMaterialForReplace(parent);
BomNewOriginalParentEntity parentEntity = buildParentEntity(parent, "", originalSourceEnum);
}
}
else {
BomNewOriginalParentEntity parentEntity = buildParentEntity(parent, "", originalSourceEnum);
}
}
}
@ -149,10 +159,14 @@ public class PlmBomToOriginalConvert extends BaseConvert {
//通过规则- 获取子级物料
BomNewOriginalParentEntity originalBomForMaterial = getOriginalBomForMaterial(childVo.getChartNo());
List<BomNewOriginalParentEntity> parentResultOne = this.resultParent.stream().filter(u -> u.getDrawingNo().equals(childVo.getChartNo())).collect(Collectors.toList());
if (Objects.isNull(originalBomForMaterial) && CollUtil.isEmpty(parentResultOne) ) {
childVo.setCreatedBy(parentEntity.getCreatedBy());
BomNewOriginalParentEntity parentEntity1 = buildParentEntity(childVo, "",originalSourceEnum);
handlerCommonMaterial(parentEntity1);
if(StrUtil.isNotBlank(childVo.getMaterialNo())) {
if (Objects.isNull(originalBomForMaterial) && CollUtil.isEmpty(parentResultOne)) {
childVo.setCreatedBy(parentEntity.getCreatedBy());
BomNewOriginalParentEntity parentEntity1 = buildParentEntity(childVo, "", originalSourceEnum);
handlerCommonMaterial(parentEntity1);
}
}else {
handlerCommonMaterialForReplace(childVo);
}
buildChildEntity(childVo,parentEntity);
@ -184,6 +198,27 @@ public class PlmBomToOriginalConvert extends BaseConvert {
}
}
private void handlerCommonMaterialForReplace(BomOriginalPlmBomVO parentEntity) {
//通过规则获取物料编码
MaterialMateVO materialMate = getMaterialByRel(parentEntity);
//找到对应物料
if (Objects.nonNull(materialMate)) {
List<BaseMaterialVO> materialBaseInfo = SpringUtil.getBean(MaterialMainMapper.class).getMaterialBaseInfo(ImmutableList.of(materialMate.getMaterialNo()));
if (CollUtil.isNotEmpty(materialBaseInfo)) {
//根据物料编码-
BaseMaterialVO baseMaterialVO = materialBaseInfo.get(0);
parentEntity.setMaterialNo(baseMaterialVO.getMaterialNo());
parentEntity.setMaterialName(baseMaterialVO.getMaterialName());
parentEntity.setMaterialDesc(baseMaterialVO.getMaterialDesc());
parentEntity.setMaterialTexture(baseMaterialVO.getMaterialTexture());
}
}
}

View File

@ -26,4 +26,11 @@
row_id, parent_row_id, order_number, drawing_no, material_no, material_name, material_desc, unit_weight, num, total_weight ,remark,created_by,created_time ,edit_status </sql>
<delete id="delOriginalChildNotInRowIds">
delete from t_bom_new_original_child where row_id not in
<foreach collection="rowIds" item="rowId" open="(" separator="," close=")">
#{rowId}
</foreach>
</delete>
</mapper>

View File

@ -71,6 +71,7 @@
<select id="getMaterialBaseInfo" resultType="com.nflg.product.bomnew.pojo.vo.BaseMaterialVO">
select row_id as materialRowId, material_no, material_name, material_desc, procure_type, project_type, material_state,drawing_no,material_category_code ,material_get_type,drawing_no
,material_texture as material ,material_texture
from t_material_main
where material_no in
<foreach collection="materialNos" item="item" open="(" close=")" separator=",">