|
@@ -1,7 +1,6 @@
|
|
|
package com.fjhx.service.bom.impl;
|
|
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import com.fjhx.base.BaseEntity;
|
|
@@ -79,26 +78,46 @@ public class BomServiceImpl extends ServiceImpl<BomMapper, Bom> implements BomSe
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
@Override
|
|
|
public void add(BomVo bomVo) {
|
|
|
+ Integer addType = bomVo.getAddType();
|
|
|
+ Assert.notEmpty(addType, "新增类型不能为空");
|
|
|
|
|
|
Long productId = bomVo.getProductId();
|
|
|
Assert.notEmpty(productId, "产品id不能为空");
|
|
|
- Assert.notEmpty(bomVo.getEdition(), "版本号不能为空");
|
|
|
|
|
|
- // 保证一个产品只有一个bom是启用状态
|
|
|
- Boolean flag = redisLockClient.lockFair(IotManagementLockConstant.BOM_EDITION_LOCK + productId,
|
|
|
- () -> {
|
|
|
- long editionCount = count(q -> q.eq(Bom::getProductId, productId).eq(Bom::getEdition, bomVo.getEdition()));
|
|
|
- Assert.eqZero(editionCount, "此版本已存在");
|
|
|
-
|
|
|
- Long count = count(Bom::getProductId, productId);
|
|
|
- bomVo.setCurrentEdition(count == 0 ? StatusConstant.YES : StatusConstant.NO);
|
|
|
+ String edition = bomVo.getEdition();
|
|
|
+ Assert.notEmpty(edition, "版本号不能为空");
|
|
|
|
|
|
- save(bomVo);
|
|
|
- return true;
|
|
|
- });
|
|
|
+ // 保证一个产品只有一个bom是启用状态
|
|
|
+ Boolean flag = redisLockClient.lockFair(IotManagementLockConstant.BOM_EDITION_LOCK + productId, () -> {
|
|
|
+ List<Bom> list = list(Bom::getProductId, productId);
|
|
|
+
|
|
|
+ // 新增产品逻辑
|
|
|
+ if (addType == 1) {
|
|
|
+ Assert.eqZero(list.size(), "产品已添加");
|
|
|
+ bomVo.setCurrentEdition(StatusConstant.YES);
|
|
|
+ }
|
|
|
+ // 新建版本逻辑
|
|
|
+ else {
|
|
|
+ Assert.gtZero(list.size(), "未添加过产品");
|
|
|
+
|
|
|
+ long count = list.stream().filter(item -> edition.equals(item.getEdition())).count();
|
|
|
+ Assert.eqZero(count, "此版本已存在");
|
|
|
+ bomVo.setCurrentEdition(StatusConstant.NO);
|
|
|
+ }
|
|
|
+
|
|
|
+ save(bomVo);
|
|
|
+ return true;
|
|
|
+ });
|
|
|
|
|
|
Assert.eqTrue(flag, ErrorMsgConstant.SYSTEM_BUSY_ERROR);
|
|
|
|
|
|
+ // bom明细
|
|
|
+ List<BomDetails> bomDetailsList = bomVo.getBomDetailsList();
|
|
|
+ if (bomDetailsList.size() > 0) {
|
|
|
+ bomDetailsList.forEach(item -> item.setBomId(bomVo.getId()));
|
|
|
+ bomDetailsService.saveBatch(bomDetailsList);
|
|
|
+ }
|
|
|
+
|
|
|
// 绑定文件
|
|
|
FileClientUtil.bindingFile(bomVo.getId(), bomVo.getFileInfo());
|
|
|
}
|
|
@@ -106,22 +125,20 @@ public class BomServiceImpl extends ServiceImpl<BomMapper, Bom> implements BomSe
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
@Override
|
|
|
public void edit(BomVo bomVo) {
|
|
|
+ Long id = bomVo.getId();
|
|
|
+ Assert.notEmpty(id, "bomId不能为空");
|
|
|
|
|
|
- Long productId = bomVo.getProductId();
|
|
|
-
|
|
|
- Integer currentEdition = bomVo.getCurrentEdition();
|
|
|
-
|
|
|
- Assert.notEmpty(currentEdition, "是否启用版本不能为空");
|
|
|
+ // 删除bom明细
|
|
|
+ List<Long> deleteBomIdList = bomVo.getDeleteBomIdList();
|
|
|
+ if (deleteBomIdList.size() > 0) {
|
|
|
+ bomDetailsService.removeByIds(deleteBomIdList);
|
|
|
+ }
|
|
|
|
|
|
- if (StatusConstant.YES.equals(currentEdition)) {
|
|
|
- // 保证一个产品只有一个bom是启用状态
|
|
|
- Boolean flag = redisLockClient.lockFair(IotManagementLockConstant.BOM_EDITION_LOCK + productId,
|
|
|
- () -> {
|
|
|
- update(Wrappers.<Bom>lambdaUpdate().set(Bom::getCurrentEdition, StatusConstant.NO).eq(Bom::getProductId, productId));
|
|
|
- updateById(bomVo);
|
|
|
- return true;
|
|
|
- });
|
|
|
- Assert.eqTrue(flag, ErrorMsgConstant.SYSTEM_BUSY_ERROR);
|
|
|
+ // 新增或编辑bom明细
|
|
|
+ List<BomDetails> bomDetailsList = bomVo.getBomDetailsList();
|
|
|
+ if (bomDetailsList.size() > 0) {
|
|
|
+ bomDetailsList.forEach(item -> item.setBomId(bomVo.getId()));
|
|
|
+ bomDetailsService.saveOrUpdateBatch(bomDetailsList);
|
|
|
}
|
|
|
|
|
|
// 重新绑定
|