diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/api/user/DQBomApi.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/api/user/DQBomApi.java index d520a197..30947c66 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/api/user/DQBomApi.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/api/user/DQBomApi.java @@ -5,6 +5,7 @@ import com.mzt.logapi.context.LogRecordContext; import com.mzt.logapi.starter.annotation.LogRecord; import com.nflg.product.base.core.api.BaseApi; import com.nflg.product.bomnew.pojo.query.BomNewDQbomPageQuery; +import com.nflg.product.bomnew.pojo.query.BomNewDQbomSaveQuery; import com.nflg.product.bomnew.pojo.vo.BomNewDQbomVO; import com.nflg.product.bomnew.pojo.vo.OperationErrorMsgVO; import com.nflg.product.bomnew.service.DQBomImportService; @@ -16,6 +17,8 @@ import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; +import javax.validation.Valid; +import javax.validation.constraints.NotNull; import java.io.IOException; import java.util.List; @@ -60,13 +63,42 @@ public class DQBomApi extends BaseApi { */ @PostMapping("getPageList") @ApiOperation("分页查询数据") - public ResultVO> getPageList(@RequestBody BomNewDQbomPageQuery query) { + public ResultVO> getPageList(@Valid @RequestBody @NotNull BomNewDQbomPageQuery query) { return ResultVO.success(dQBomService.getPageList(query)); } + /** + * 获取子级数据 + * @param bomRowId 父级rowId + * @return + */ @GetMapping("getChild") @ApiOperation("获取子级数据") - public ResultVO> getChild(@RequestParam("bomRowId") Long bomRowId) { + public ResultVO> getChild(@Valid @RequestParam("bomRowId") @NotNull Long bomRowId) { return ResultVO.success(dQBomService.getChild(bomRowId)); } + + /** + * 保存数据 + * @param query 保存的数据 + * @return + */ + @GetMapping("save") + @ApiOperation("保存数据") + public ResultVO save(@Valid @RequestBody @NotNull BomNewDQbomSaveQuery query) { + dQBomService.save(query); + return ResultVO.success(); + } + + /** + * 异常检查 + * @param rootRowIds 顶级rowId + * @return + */ + @PostMapping("checkException") + @ApiOperation("异常检查") + public ResultVO checkException(@RequestBody List rootRowIds) { + dQBomService.checkException(rootRowIds); + return ResultVO.success(); + } } diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/constant/BomNewDQbomStatusEnum.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/constant/BomNewDQbomStatusEnum.java new file mode 100644 index 00000000..6d634584 --- /dev/null +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/constant/BomNewDQbomStatusEnum.java @@ -0,0 +1,28 @@ +package com.nflg.product.bomnew.constant; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * @author 曹鹏飞 + * @date 2024/4/11 14:37:26 + */ +@AllArgsConstructor +@Getter +public enum BomNewDQbomStatusEnum implements ValueEnum { + + WAIT_CONVERT(1, "待转换"), + CONVERTED(2, "已转换"); + + private final Integer value; + private final String description; + + public static BomNewDQbomStatusEnum findByValue(Integer value) { + for (BomNewDQbomStatusEnum statusEnum : BomNewDQbomStatusEnum.values()) { + if (statusEnum.getValue().equals(value)) { + return statusEnum; + } + } + throw new IllegalArgumentException("无效的值"); + } +} diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/constant/EBomExceptionStatusEnum.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/constant/EBomExceptionStatusEnum.java index 180fa8a8..144c5f5d 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/constant/EBomExceptionStatusEnum.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/constant/EBomExceptionStatusEnum.java @@ -34,7 +34,7 @@ public enum EBomExceptionStatusEnum implements ValueEnum { EXCEPT_NO_11(11, "未填写变更原因和技术通知单"), EXCEPT_NO_12(12, "数量需要用户确认"), EXCEPT_NO_13(13, "项目类型需要用户确认") , - EXCEPT_NO_14(14, "黄色警告"), + EXCEPT_NO_14(14, "黄色警告(下级节点存在异常)"), EXCEPT_NO_15(15, "物料名称不一致"); diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/mapper/master/BomNewDQbomChildMapper.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/mapper/master/BomNewDQbomChildMapper.java index 774db0b9..ceb22129 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/mapper/master/BomNewDQbomChildMapper.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/mapper/master/BomNewDQbomChildMapper.java @@ -10,4 +10,5 @@ import com.nflg.product.bomnew.pojo.entity.BomNewDQbomChildEntity; public interface BomNewDQbomChildMapper extends BaseMapper { + void deleteAllChildren(Long parentRowId); } diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/mapper/master/BomNewDQbomParentMapper.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/mapper/master/BomNewDQbomParentMapper.java index 2b925deb..1a4e121c 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/mapper/master/BomNewDQbomParentMapper.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/mapper/master/BomNewDQbomParentMapper.java @@ -17,4 +17,6 @@ public interface BomNewDQbomParentMapper extends BaseMapper getPageList(Page objectPage, BomNewDQbomPageQuery query, String userCode); List getChild(Long bomRowId); + + void resetBomExist(Long rowId); } diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/entity/BomNewDQbomChildEntity.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/entity/BomNewDQbomChildEntity.java index d1e27217..d461a1b2 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/entity/BomNewDQbomChildEntity.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/entity/BomNewDQbomChildEntity.java @@ -78,6 +78,21 @@ public class BomNewDQbomChildEntity implements Serializable { @TableField(value = "total_weight") @ApiModelProperty(value = "总重") private BigDecimal totalWeight; + + /** + * 异常状态 + */ + @TableField(value = "exception_status") + @ApiModelProperty(value = "异常状态") + private Integer exceptionStatus = -1; + + /** + * 异常标记 + */ + @TableField(value = "exception_tag") + @ApiModelProperty(value = "异常标记") + private String exceptionTag; + /** * 创建人名称 */ diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/entity/BomNewDQbomParentEntity.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/entity/BomNewDQbomParentEntity.java index e72c1b07..02f4df0c 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/entity/BomNewDQbomParentEntity.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/entity/BomNewDQbomParentEntity.java @@ -135,20 +135,6 @@ public class BomNewDQbomParentEntity implements Serializable { @ApiModelProperty(value = "转换状态") private Integer status = 1; - /** - * 异常状态 - */ - @TableField(value = "exception_status") - @ApiModelProperty(value = "异常状态") - private Integer exceptionStatus = -1; - - /** - * 异常标记 - */ - @TableField(value = "exception_tag") - @ApiModelProperty(value = "异常标记") - private String exceptionTag; - /** * 创建人名称 */ diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/query/BomNewDQbomSaveQuery.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/query/BomNewDQbomSaveQuery.java new file mode 100644 index 00000000..5b72df23 --- /dev/null +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/query/BomNewDQbomSaveQuery.java @@ -0,0 +1,31 @@ +package com.nflg.product.bomnew.pojo.query; + +import com.nflg.product.bomnew.pojo.vo.BomNewDQbomSaveVO; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.util.List; + +/** + * @author 曹鹏飞 + * @date 2024/4/11 13:53:56 + */ +@Data +@Accessors(chain = true) +@ApiModel(value = "com-nflg-product-bomnew-pojo-new-query-BomNewDQbomSaveQuery") +public class BomNewDQbomSaveQuery implements Serializable { + + /** + * 父级rowId + */ + @ApiModelProperty(value = "图号") + private Long parentRowId; + + /** + * 子级数据 + */ + private List children; +} diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/BomNewDQbomSaveVO.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/BomNewDQbomSaveVO.java new file mode 100644 index 00000000..43a20cf3 --- /dev/null +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/BomNewDQbomSaveVO.java @@ -0,0 +1,38 @@ +package com.nflg.product.bomnew.pojo.vo; + +import com.nflg.product.bomnew.pojo.entity.BomNewDQbomParentEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.math.BigDecimal; + +/** + * @author 曹鹏飞 + * @date 2024/4/11 13:59:52 + */ +@Data +@Accessors(chain = true) +@ApiModel(value = "com-nflg-product-bomnew-pojo-new-vo-BomNewDQbomSaveVO") +public class BomNewDQbomSaveVO extends BomNewDQbomParentEntity implements Serializable { + + /** + * 父行ID + */ + @ApiModelProperty(value = "父行ID") + private Long parentRowId; + + /** + * 排序号 + */ + @ApiModelProperty(value = "排序号") + private String orderNumber; + + /** + * 数量 + */ + @ApiModelProperty(value = "数量") + private BigDecimal num; +} diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/BomNewDQbomExceptionCheckService.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/BomNewDQbomExceptionCheckService.java new file mode 100644 index 00000000..b8dbabdd --- /dev/null +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/BomNewDQbomExceptionCheckService.java @@ -0,0 +1,117 @@ +package com.nflg.product.bomnew.service; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.nflg.product.bomnew.constant.EBomExceptionStatusEnum; +import com.nflg.product.bomnew.constant.MaterialGetEnum; +import com.nflg.product.bomnew.pojo.entity.BomNewDQbomChildEntity; +import com.nflg.product.bomnew.pojo.entity.BomNewDQbomParentEntity; +import com.nflg.product.bomnew.pojo.vo.BaseMaterialVO; +import com.nflg.product.bomnew.util.VUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @author 曹鹏飞 + * @date 2024/4/11 15:30:16 + */ +@Service +@Slf4j +public class BomNewDQbomExceptionCheckService { + + @Resource + MaterialMainService materialMainService; + + @Resource + DQBomParentService dQBomParentService; + + @Resource + DQBomChildService dQBomChildService; + + private List parents = new ArrayList<>(); + private List children = new ArrayList<>(); + private List materialVOS; + + public void check(Long parentRowId) { + VUtils.isTure(ObjectUtil.isNull(parentRowId) || parentRowId == 0L).throwMessage("无效的参数:" + parentRowId); + + parents.clear(); + children.clear(); + + BomNewDQbomParentEntity parent = dQBomParentService.getById(parentRowId); + VUtils.isTure(ObjectUtil.isNull(parent)).throwMessage("未找到数据:" + parentRowId); + buildData(parent); + check(); + } + + private void buildData(BomNewDQbomParentEntity parent) { + parents.add(parent); + + BomNewDQbomChildEntity child = dQBomChildService.getRoot(parent.getMaterialNo()); + children.add(child); + + List cc = dQBomChildService.getByParentRowId(parent.getRowId()); + if (CollUtil.isNotEmpty(cc)) { + children.addAll(cc); + List pp = dQBomParentService.getLatestByMaterialNo(cc.stream() + .map(BomNewDQbomChildEntity::getMaterialNo) + .collect(Collectors.toList())); + parents.addAll(pp); + pp.forEach(this::buildData); + } + } + + public void check(List parents, List children) { + if (CollUtil.isEmpty(children)) return; + this.parents = parents; + this.children = children; + check(); + } + + private void check() { + List materialNos = children.stream().map(BomNewDQbomChildEntity::getMaterialNo).collect(Collectors.toList()); + materialVOS = materialMainService.getMaterialBaseInfo(materialNos); + check(children.get(0)); + } + + private EBomExceptionStatusEnum check(BomNewDQbomChildEntity child) { + BomNewDQbomParentEntity parent = parents.stream().filter(p -> p.getMaterialNo().equals(child.getMaterialNo())) + .findFirst() + .orElse(null); + VUtils.isTure(ObjectUtil.isNull(parent)).throwMessage(StrUtil.format("编号为{}的数据不完整", child.getMaterialNo())); + + EBomExceptionStatusEnum status = EBomExceptionStatusEnum.OK; + assert parent != null; + if ("T".equals(parent.getProjectType())) { + child.setExceptionStatus(EBomExceptionStatusEnum.OK.getValue()); + } else { + BaseMaterialVO materialVO = materialVOS.stream().filter(v -> v.getMaterialNo().equals(parent.getMaterialNo())).findFirst().orElse(null); + if (materialVO == null) { + status = EBomExceptionStatusEnum.EXCEPT_NO_7; + } else if (materialVO.getMaterialState().equals(MaterialGetEnum.MaterialStateEnum.STATE_NO_4.getValue())) { + status = EBomExceptionStatusEnum.EXCEPT_NO_2; + } else if (!materialVO.getMaterialName().equals(parent.getMaterialName())) { + status = EBomExceptionStatusEnum.EXCEPT_NO_15; + } + } + + //检查下级节点 + List cc = children.stream().filter(c -> c.getParentRowId().equals(parent.getRowId())) + .collect(Collectors.toList()); + boolean hasError = cc.stream().map(this::check) + .collect(Collectors.toList()) + .stream().anyMatch(e -> !e.equals(EBomExceptionStatusEnum.OK)); + if (status == EBomExceptionStatusEnum.OK && hasError) { + status = EBomExceptionStatusEnum.EXCEPT_NO_14; + } + + child.setExceptionStatus(status.getValue()); + return status; + } +} diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/DQBomChildService.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/DQBomChildService.java index bf25311e..5bba3149 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/DQBomChildService.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/DQBomChildService.java @@ -1,10 +1,13 @@ package com.nflg.product.bomnew.service; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.nflg.product.bomnew.mapper.master.BomNewDQbomChildMapper; import com.nflg.product.bomnew.pojo.entity.BomNewDQbomChildEntity; import org.springframework.stereotype.Service; +import java.util.List; + /** * @author 曹鹏飞 * @date 2024/4/7 11:10:58 @@ -12,4 +15,25 @@ import org.springframework.stereotype.Service; @Service public class DQBomChildService extends ServiceImpl { + public void deleteAllChildren(Long parentRowId) { + this.getBaseMapper().deleteAllChildren(parentRowId); + } + + public List getByParentRowId(Long parentRowId) { + return this.lambdaQuery().eq(BomNewDQbomChildEntity::getParentRowId, parentRowId).list(); + } + + public BomNewDQbomChildEntity getRoot(String materialNo) { + return this.lambdaQuery() + .eq(BomNewDQbomChildEntity::getMaterialNo, materialNo) + .eq(BomNewDQbomChildEntity::getParentRowId, 0L) + .one(); + } + + public int deleteNotIn(Long parentRowId, List rowIds) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(BomNewDQbomChildEntity::getParentRowId, parentRowId); + queryWrapper.notIn(BomNewDQbomChildEntity::getRowId, rowIds); + return this.getBaseMapper().delete(queryWrapper); + } } diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/DQBomImportService.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/DQBomImportService.java index afbe30e2..e79924f4 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/DQBomImportService.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/DQBomImportService.java @@ -6,13 +6,10 @@ import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.fasterxml.jackson.core.JsonProcessingException; import com.nflg.product.base.core.conmon.util.SessionUtil; import com.nflg.product.base.core.exception.NflgBusinessException; -import com.nflg.product.bomnew.constant.EBomExceptionStatusEnum; -import com.nflg.product.bomnew.constant.MaterialGetEnum; import com.nflg.product.bomnew.constant.UserJobEnum; import com.nflg.product.bomnew.pojo.dto.BaseImportExcelDTO; import com.nflg.product.bomnew.pojo.entity.BomNewDQbomChildEntity; import com.nflg.product.bomnew.pojo.entity.BomNewDQbomParentEntity; -import com.nflg.product.bomnew.pojo.vo.BaseMaterialVO; import com.nflg.product.bomnew.pojo.vo.DQbomExcelVO; import com.nflg.product.bomnew.pojo.vo.OperationErrorMsgVO; import com.nflg.product.bomnew.util.*; @@ -102,34 +99,8 @@ public class DQBomImportService { } private void checkExceptionStatus(List parents, List children) { - List materialNos = children.stream().map(BomNewDQbomChildEntity::getMaterialNo).collect(Collectors.toList()); - List materialVOS = materialMainService.getMaterialBaseInfo(materialNos); - checkChildExceptionStatus(parents.get(0), parents, children, materialVOS); - } - - private void checkChildExceptionStatus(BomNewDQbomParentEntity parent, List parents, List children, List materialVOS) { - //BomNewDQbomParentEntity parent = parents.stream().filter(p -> p.getMaterialNo().equals(child.getMaterialNo())).findFirst().get(); - if (parent.getProjectType().equals("T")) { - parent.setExceptionStatus(EBomExceptionStatusEnum.OK.getValue()); - } else { - BaseMaterialVO materialVO = materialVOS.stream().filter(v -> v.getMaterialNo().equals(parent.getMaterialNo())).findFirst().orElse(null); - if (materialVO == null) { - parent.setExceptionStatus(EBomExceptionStatusEnum.EXCEPT_NO_7.getValue()); - } else if (materialVO.getMaterialState().equals(MaterialGetEnum.MaterialStateEnum.STATE_NO_4.getValue())) { - parent.setExceptionStatus(EBomExceptionStatusEnum.EXCEPT_NO_2.getValue()); - } else if (!materialVO.getMaterialName().equals(parent.getMaterialName())) { - parent.setExceptionStatus(EBomExceptionStatusEnum.EXCEPT_NO_15.getValue()); - } else { - parent.setExceptionStatus(EBomExceptionStatusEnum.OK.getValue()); - } - } - List cc = children.stream().filter(c -> c.getParentRowId().equals(parent.getRowId())) - .map(BomNewDQbomChildEntity::getMaterialNo) - .collect(Collectors.toList()); - List pp = parents.stream().filter(p -> cc.contains(p.getMaterialNo())).collect(Collectors.toList()); - for (BomNewDQbomParentEntity p : pp) { - checkChildExceptionStatus(p, parents, children, materialVOS); - } + BomNewDQbomExceptionCheckService checkService = new BomNewDQbomExceptionCheckService(); + checkService.check(parents, children); } private void checkInconsistentData(BomNewDQbomParentEntity parent, List parents, List children) throws JsonProcessingException { @@ -197,7 +168,7 @@ public class DQBomImportService { List children = new ArrayList<>(); Map parentRowIdMap = new HashMap<>(); Map orderMap = new HashMap<>(); - for (int index = 0; index < datas.size(); index++) { + for (int index = 0, count = datas.size(); index < count; index++) { DQbomExcelVO data = datas.get(index); BomNewDQbomParentEntity parent = parents.stream().filter(p -> p.getMaterialNo().equals(data.getMaterialNo())) @@ -209,7 +180,7 @@ public class DQBomImportService { .list() .stream().findFirst().orElse(null) ); - if (parent == null) { + if (parent == null && (count - 1 != index || datas.get(index + 1).getLevel() > data.getLevel())) { parent = new BomNewDQbomParentEntity(); parent.setRowId(IdWorker.getId()); parent.setLevel(data.getLevel()); @@ -226,14 +197,16 @@ public class DQBomImportService { parent.setCreatedName(SessionUtil.getRealName()); parent.setCreatedJob(userRoleService.technician() ? UserJobEnum.ENGINEER.getValue() : UserJobEnum.DESIGNER.getValue()); parent.setRemark(data.getRemark()); - if (index == datas.size() - 1 || datas.get(index + 1).getLevel() <= data.getLevel()) { - parent.setBomExist(0); - } else { + // if (index == datas.size() - 1 || datas.get(index + 1).getLevel() <= data.getLevel()) { + // parent.setBomExist(0); + // } else { parent.setBomExist(1); - } + // } parents.add(parent); } - parentRowIdMap.put(data.getLevel(), parent.getRowId()); + if (parent != null) { + parentRowIdMap.put(data.getLevel(), parent.getRowId()); + } BomNewDQbomChildEntity child = new BomNewDQbomChildEntity(); child.setRowId(IdWorker.getId()); diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/DQBomParentService.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/DQBomParentService.java index 948635fd..8dbb7d31 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/DQBomParentService.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/DQBomParentService.java @@ -28,4 +28,22 @@ public class DQBomParentService extends ServiceImpl getLatestByMaterialNo(List materialNos) { + return this.lambdaQuery() + .in(BomNewDQbomParentEntity::getMaterialNo, materialNos) + .eq(BomNewDQbomParentEntity::getLastVersionIs, 1) + .list(); + } } diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/DQBomService.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/DQBomService.java index de31bb3d..a6d0f972 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/DQBomService.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/DQBomService.java @@ -1,12 +1,21 @@ package com.nflg.product.bomnew.service; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.nflg.product.base.core.conmon.util.SessionUtil; +import com.nflg.product.bomnew.pojo.entity.BomNewDQbomChildEntity; +import com.nflg.product.bomnew.pojo.entity.BomNewDQbomParentEntity; import com.nflg.product.bomnew.pojo.query.BomNewDQbomPageQuery; +import com.nflg.product.bomnew.pojo.query.BomNewDQbomSaveQuery; import com.nflg.product.bomnew.pojo.vo.BaseMaterialVO; +import com.nflg.product.bomnew.pojo.vo.BomNewDQbomSaveVO; import com.nflg.product.bomnew.pojo.vo.BomNewDQbomVO; +import com.nflg.product.bomnew.util.VUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.List; @@ -29,6 +38,9 @@ public class DQBomService { @Resource MaterialMainService materialMainService; + @Resource + UserRoleService userRoleService; + public Page getPageList(BomNewDQbomPageQuery query) { Page ret = dQBomParentService.getBaseMapper().getPageList(new Page<>(query.getPage(), query.getPageSize()), query, SessionUtil.getUserCode()); initMaterialInfo(ret.getRecords()); @@ -36,6 +48,7 @@ public class DQBomService { } public List getChild(Long bomRowId) { + VUtils.isTure(bomRowId == 0).throwMessage("无效的参数"); List data = dQBomParentService.getBaseMapper().getChild(bomRowId); initMaterialInfo(data); return data; @@ -53,4 +66,42 @@ public class DQBomService { } }); } + + public void checkException(List rootRowIds) { + BomNewDQbomExceptionCheckService checkService = new BomNewDQbomExceptionCheckService(); + rootRowIds.forEach(checkService::check); + } + + /** + * 保存 + * @param query 请求参数 + */ + @Transactional(rollbackFor = Exception.class) + public void save(BomNewDQbomSaveQuery query) { + VUtils.isTure(query.getParentRowId() == 0).throwMessage("无效的参数"); + + BomNewDQbomParentEntity parent = dQBomParentService.getBaseMapper().selectById(query.getParentRowId()); + VUtils.isTure(ObjectUtil.isNull(parent)).throwMessage("bom不存在"); + + VUtils.isTure(!parent.getCreatedBy().equals(SessionUtil.getUserCode())).throwMessage("不能修改他人的数据"); + + if (CollUtil.isEmpty(query.getChildren())) { + dQBomChildService.deleteAllChildren(query.getParentRowId()); + return; + } + + List datas = query.getChildren(); + //删除 + dQBomChildService.deleteNotIn(parent.getRowId(), datas.stream().map(BomNewDQbomSaveVO::getRowId) + .filter(d -> ObjectUtil.isNotNull(d) && d > 0L) + .collect(Collectors.toList())); + + //处理子级 + List children = Convert.toList(BomNewDQbomChildEntity.class, datas); + children.forEach(c -> { + c.setParentRowId(query.getParentRowId()); + }); + + dQBomParentService.resetBomExist(query.getParentRowId()); + } } diff --git a/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/BomNewDQbomChildMapper.xml b/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/BomNewDQbomChildMapper.xml new file mode 100644 index 00000000..6c1fb294 --- /dev/null +++ b/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/BomNewDQbomChildMapper.xml @@ -0,0 +1,12 @@ + + + + + DELETE + FROM t_bom_new_dqbom_child + WHERE parent_row_id = #{parentRowId}; + UPDATE t_bom_new_dqbom_parent + SET bom_exist=0 + WHERE row_id = #{parentRowId}; + + \ No newline at end of file diff --git a/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/BomNewDQbomParentMapper.xml b/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/BomNewDQbomParentMapper.xml index 2f793c9d..3dc8446c 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/BomNewDQbomParentMapper.xml +++ b/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/BomNewDQbomParentMapper.xml @@ -64,4 +64,10 @@ WHERE c.parent_row_id = #{bomRowId} ORDER BY c.order_number + + \ No newline at end of file