fix:修改物料信息单位限制

main
HuangHuiKang 2 days ago
parent f5be8bc03a
commit d4d3ad4f57

@ -17,6 +17,10 @@ public interface ErrorCodeConstants {
ErrorCode BOM_NOT_EXISTS = new ErrorCode(5_001, "产品BOM不存在");
ErrorCode BOM_EXISTS = new ErrorCode(5_002, "产品BOM已存在");
ErrorCode UNIT_ERROR = new ErrorCode(5_002, "物料bom单位不一致");
ErrorCode BOM_ONLY = new ErrorCode(5_002, "每个产品启用的BOM只能有一个请先禁用改产品其他BOM");
ErrorCode ORGANIZATION_NOT_EXISTS = new ErrorCode(5_0011, "产线工位不存在");
ErrorCode ORGANIZATION_ID_NOT_EXISTS = new ErrorCode(5_0011, "产线工位不存在");
ErrorCode ORGANIZATION_EXITS_CHILDREN = new ErrorCode(5_0012, "存在存在子产线工位,无法删除");

@ -36,7 +36,11 @@ public class DevicePlanGanttRespVO {
private Long planNumber;
@Schema(description = "产品名称")
private String productName;
@Schema(description = "产品编码")
private String productCode;
@Schema(description = "设备名称")
private String deviceName;
@Schema(description = "设备编码")
private String deviceCode;
}
}

@ -34,8 +34,7 @@ import java.util.Objects;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.BOM_EXISTS;
import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.BOM_NOT_EXISTS;
import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*;
/**
* BOM Service
@ -91,7 +90,7 @@ public class BomServiceImpl implements BomService {
if (updateReqVO.getIsEnable()) {
BomDO temp = bomMapper.selectByProductId(updateReqVO.getProductId());
if (temp != null && !Objects.equals(temp.getId(), updateReqVO.getId())) {
throw exception(new ErrorCode(500, "每个产品启用的BOM只能有一个请先禁用改产品其他BOM"));
throw exception((BOM_ONLY));
}
}
// 校验存在

@ -32,6 +32,7 @@ import java.util.*;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.UNIT_ERROR;
/**
* Service
@ -42,7 +43,7 @@ import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.
@Validated
public class ItemAnalysisServiceImpl implements ItemAnalysisService {
private static final Logger log = LoggerFactory.getLogger(ItemAnalysisServiceImpl.class);
private static final String UNIT_ERROR = "物料bom单位不一致";
// private static final String UNIT_ERROR = "物料bom单位不一致";
@Resource
private ErpStockService erpStockService;
@Resource
@ -78,7 +79,7 @@ public class ItemAnalysisServiceImpl implements ItemAnalysisService {
//每个taskDetail计算一次物料需求汇总到map里面
List<BomDetailDO> bomDetailDOList =
bomService.getBomDetailListByProductId(detail.getProductId(), detail.getNumber());
buildItemMap(itemMap, bomDetailDOList);
buildItemMap(itemMap, bomDetailDOList,detail.getProductId());
}
//算库存
for (Long key : itemMap.keySet()) {
@ -135,13 +136,13 @@ public class ItemAnalysisServiceImpl implements ItemAnalysisService {
BomDO bomDO = bomService.selectByProductId(detail.getProductId());
if (!bomDO.getUnitId().equals(ProductUnitEnum.Each.getUnitId())
|| !detail.getProductUnitId().equals(ProductUnitEnum.Each.getUnitId())) {
log.error(UNIT_ERROR);
throw exception(new ErrorCode(500, UNIT_ERROR));
log.error(String.valueOf(UNIT_ERROR));
throw exception(UNIT_ERROR);
}
//每个detail计算一次物料需求汇总到map里面
List<BomDetailDO> bomDetailDOList =
bomService.getBomDetailListByProductId(detail.getProductId(), detail.getCount().longValue());
buildItemMap(itemMap, bomDetailDOList);
buildItemMap(itemMap, bomDetailDOList,detail.getProductId());
}
//算库存
for (Long key : itemMap.keySet()) {
@ -173,22 +174,58 @@ public class ItemAnalysisServiceImpl implements ItemAnalysisService {
});
}
private void buildItemMap(Map<Long, ItemRequisitionAndStock> itemMap, List<BomDetailDO> bomDetailDOList) {
private void buildItemMap(Map<Long, ItemRequisitionAndStock> itemMap,
List<BomDetailDO> bomDetailDOList,
Long currentProductId) {
for (BomDetailDO bomDetail : bomDetailDOList) {
if (itemMap.containsKey(bomDetail.getProductId())) {
ItemRequisitionAndStock temp = itemMap.get(bomDetail.getProductId());
//比较单位是否一致
Long itemId = bomDetail.getProductId();
if (itemMap.containsKey(itemId)) {
ItemRequisitionAndStock temp = itemMap.get(itemId);
if (!temp.getUnitId().equals(bomDetail.getUnitId())) {
log.error(UNIT_ERROR);
throw exception(new ErrorCode(500, UNIT_ERROR));
BomDO currBom = bomService.getBom(bomDetail.getBomId());
BomDO prevBom = temp.getSourceBomId() == null ? null : bomService.getBom(temp.getSourceBomId());
ErpProductDO subItem = productService.getProduct(itemId);
ErpProductDO currProduct = currentProductId == null ? null : productService.getProduct(currentProductId);
ErpProductDO prevProduct = temp.getSourceProductId() == null ? null : productService.getProduct(temp.getSourceProductId());
ErpProductUnitDO currUnit = productUnitService.getProductUnit(bomDetail.getUnitId());
ErpProductUnitDO prevUnit = productUnitService.getProductUnit(temp.getUnitId());
String currProductCode = currProduct == null ? "-" : Objects.toString(currProduct.getBarCode(), "-");
String currProductName = currProduct == null ? "-" : Objects.toString(currProduct.getName(), "-");
String prevProductCode = prevProduct == null ? "-" : Objects.toString(prevProduct.getBarCode(), "-");
String prevProductName = prevProduct == null ? "-" : Objects.toString(prevProduct.getName(), "-");
String currBomCode = currBom == null ? "-" : Objects.toString(currBom.getCode(), "-");
String prevBomCode = prevBom == null ? "-" : Objects.toString(prevBom.getCode(), "-");
String subItemCode = subItem == null ? "-" : Objects.toString(subItem.getBarCode(), "-");
String subItemName = subItem == null ? "-" : Objects.toString(subItem.getName(), "-");
String currUnitName = currUnit == null ? "-" : Objects.toString(currUnit.getName(), "-");
String prevUnitName = prevUnit == null ? "-" : Objects.toString(prevUnit.getName(), "-");
String msg = String.format(
"产品[%s-%s] 的 BOM[%s] 中,子物料[%s-%s] 单位[%s] 与 产品[%s-%s] 的 BOM[%s] 中子物料单位[%s] 冲突!应改成一致的单位",
currProductCode, currProductName, currBomCode,
subItemCode, subItemName, currUnitName,
prevProductCode, prevProductName, prevBomCode, prevUnitName
);
log.error(msg);
throw exception(new ErrorCode(5_002, msg));
}
temp.setNumber(temp.getNumber().add(bomDetail.getUsageNumber()));
} else {
ItemRequisitionAndStock temp = new ItemRequisitionAndStock()
.setItemId(bomDetail.getProductId())
.setItemId(itemId)
.setNumber(bomDetail.getUsageNumber())
.setUnitId(bomDetail.getUnitId());
itemMap.put(bomDetail.getProductId(), temp);
.setUnitId(bomDetail.getUnitId())
.setSourceBomId(bomDetail.getBomId())
.setSourceProductId(currentProductId);
itemMap.put(itemId, temp);
}
}
}

@ -47,5 +47,12 @@ public class ItemRequisitionAndStock {
*
*/
private BigDecimal stockWorkshopNumber;
/**
* BOM
*/
private Long sourceBomId;
/**
*
*/
private Long sourceProductId;
}

@ -567,6 +567,8 @@ public class PlanServiceImpl implements PlanService {
ErpProductDO product = productMap.get(plan.getProductId());
item.setProductName(product == null ? null : product.getName());
item.setDeviceName(device == null ? null : device.getDeviceName());
item.setProductCode(product == null ? null : product.getBarCode());
item.setDeviceCode(device == null ? null : device.getDeviceCode());
plans.add(item);
}
vo.setPlans(plans);

Loading…
Cancel
Save