|
|
|
|
@ -19,6 +19,8 @@ import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductDO;
|
|
|
|
|
import cn.iocoder.yudao.module.erp.dal.dataobject.stock.ErpStockOutApproveRecordDO;
|
|
|
|
|
import cn.iocoder.yudao.module.erp.dal.dataobject.stock.ErpStockOutDO;
|
|
|
|
|
import cn.iocoder.yudao.module.erp.dal.dataobject.stock.ErpStockOutItemDO;
|
|
|
|
|
import cn.iocoder.yudao.module.erp.dal.dataobject.stock.ErpWarehouseDO;
|
|
|
|
|
import cn.iocoder.yudao.module.erp.dal.dataobject.warehousearea.WarehouseAreaDO;
|
|
|
|
|
import cn.iocoder.yudao.module.erp.dal.mysql.stock.ErpStockOutApproveRecordMapper;
|
|
|
|
|
import cn.iocoder.yudao.module.erp.dal.mysql.stock.ErpStockOutItemMapper;
|
|
|
|
|
import cn.iocoder.yudao.module.erp.dal.mysql.stock.ErpStockOutMapper;
|
|
|
|
|
@ -31,6 +33,7 @@ import cn.iocoder.yudao.module.erp.service.mold.MoldService;
|
|
|
|
|
import cn.iocoder.yudao.module.erp.service.product.ErpProductService;
|
|
|
|
|
import cn.iocoder.yudao.module.erp.service.sale.ErpCustomerService;
|
|
|
|
|
import cn.iocoder.yudao.module.erp.service.stock.bo.ErpStockRecordCreateReqBO;
|
|
|
|
|
import cn.iocoder.yudao.module.erp.service.warehousearea.WarehouseAreaService;
|
|
|
|
|
import cn.iocoder.yudao.module.infra.api.config.ConfigApi;
|
|
|
|
|
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
|
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
@ -84,6 +87,8 @@ public class ErpStockOutServiceImpl implements ErpStockOutService {
|
|
|
|
|
@Resource
|
|
|
|
|
private ErpStockRecordService stockRecordService;
|
|
|
|
|
@Resource
|
|
|
|
|
private WarehouseAreaService warehouseAreaService;
|
|
|
|
|
@Resource
|
|
|
|
|
private AdminUserApi adminUserApi;
|
|
|
|
|
@Resource
|
|
|
|
|
private ConfigApi configApi;
|
|
|
|
|
@ -118,16 +123,16 @@ public class ErpStockOutServiceImpl implements ErpStockOutService {
|
|
|
|
|
stockOutItems.forEach(item -> item.setOutId(stockOut.getId()));
|
|
|
|
|
stockOutItemMapper.insertBatch(stockOutItems);
|
|
|
|
|
|
|
|
|
|
if (createReqVO.getOutType().equals("模具出库")) {
|
|
|
|
|
//修改模具组状态
|
|
|
|
|
for (ErpStockOutSaveReqVO.Item item : createReqVO.getItems()) {
|
|
|
|
|
MoldBrandDO moldBrandDO = moldBrandMapper.selectById(item.getMoldSetId());
|
|
|
|
|
moldBrandDO.setStatus(MoldBrandStatusEnum.STANDBY.getStatus());
|
|
|
|
|
moldBrandMapper.updateById(moldBrandDO);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//修改模具组状态
|
|
|
|
|
for (ErpStockOutSaveReqVO.Item item : createReqVO.getItems()) {
|
|
|
|
|
MoldBrandDO moldBrandDO = moldBrandMapper.selectById(item.getMoldSetId());
|
|
|
|
|
moldBrandDO.setStatus(MoldBrandStatusEnum.STANDBY.getStatus());
|
|
|
|
|
moldBrandMapper.updateById(moldBrandDO);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return stockOut.getId();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -350,7 +355,8 @@ public class ErpStockOutServiceImpl implements ErpStockOutService {
|
|
|
|
|
: (approve ? ErpStockRecordBizTypeEnum.OTHER_OUT.getType()
|
|
|
|
|
: ErpStockRecordBizTypeEnum.OTHER_OUT_CANCEL.getType());
|
|
|
|
|
stockRecordService.createStockRecord(new ErpStockRecordCreateReqBO(
|
|
|
|
|
stockOutItem.getProductId(), moldDO.getId(), null, stockOutItem.getWarehouseId(), count,
|
|
|
|
|
stockOutItem.getProductId(), moldDO.getId(), null, stockOutItem.getWarehouseId(),
|
|
|
|
|
stockOutItem.getAreaId(), stockOutItem.getAreaName(), count,
|
|
|
|
|
recordBizType, stockOutItem.getOutId(), stockOutItem.getId(), stockOut.getNo(), stockOut.getOutTime()));
|
|
|
|
|
if (approve && itemNeedUpdateMoldStatus(moldDO)) {
|
|
|
|
|
moldDO.setStatus(3);
|
|
|
|
|
@ -362,7 +368,8 @@ public class ErpStockOutServiceImpl implements ErpStockOutService {
|
|
|
|
|
: (approve ? ErpStockRecordBizTypeEnum.getTypeByName(stockOut.getOutType())
|
|
|
|
|
: ErpStockRecordBizTypeEnum.getTypeByName(stockOut.getOutType(), 10));
|
|
|
|
|
stockRecordService.createStockRecord(new ErpStockRecordCreateReqBO(
|
|
|
|
|
stockOutItem.getProductId(), product.getCategoryId(), product.getCategoryType(), stockOutItem.getWarehouseId(), count,
|
|
|
|
|
stockOutItem.getProductId(), product.getCategoryId(), product.getCategoryType(), stockOutItem.getWarehouseId(),
|
|
|
|
|
stockOutItem.getAreaId(), stockOutItem.getAreaName(), count,
|
|
|
|
|
recordBizType, stockOutItem.getOutId(), stockOutItem.getId(), stockOut.getNo(), stockOut.getOutTime()));
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
@ -392,9 +399,12 @@ public class ErpStockOutServiceImpl implements ErpStockOutService {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private List<ErpStockOutItemDO> validateStockOutItems(List<ErpStockOutSaveReqVO.Item> list, String outType) {
|
|
|
|
|
validateWarehouseAreas(list);
|
|
|
|
|
if (Objects.equals(outType, "模具出库")) {
|
|
|
|
|
List<MoldBrandDO> moldList = moldBrandService.validMoldList(convertSet(list, ErpStockOutSaveReqVO.Item::getMoldSetId));
|
|
|
|
|
Map<Long, MoldBrandDO> moldMap = convertMap(moldList, MoldBrandDO::getId);
|
|
|
|
|
Map<Long, WarehouseAreaDO> areaMap = warehouseAreaService.getWarehouseAreaMap(
|
|
|
|
|
convertSet(list, ErpStockOutSaveReqVO.Item::getAreaId));
|
|
|
|
|
return convertList(list, item -> {
|
|
|
|
|
MoldBrandDO moldBrand = moldMap.get(item.getMoldSetId());
|
|
|
|
|
return ErpStockOutItemDO.builder()
|
|
|
|
|
@ -402,6 +412,8 @@ public class ErpStockOutServiceImpl implements ErpStockOutService {
|
|
|
|
|
.moldSetId(moldBrand.getId())
|
|
|
|
|
.moldSetName(moldBrand.getName())
|
|
|
|
|
.warehouseId(item.getWarehouseId())
|
|
|
|
|
.areaId(item.getAreaId())
|
|
|
|
|
.areaName(areaMap.containsKey(item.getAreaId()) ? areaMap.get(item.getAreaId()).getAreaName() : null)
|
|
|
|
|
.productId(moldBrand.getId())
|
|
|
|
|
.productUnitId(null)
|
|
|
|
|
.productPrice(item.getProductPrice())
|
|
|
|
|
@ -413,11 +425,35 @@ public class ErpStockOutServiceImpl implements ErpStockOutService {
|
|
|
|
|
}
|
|
|
|
|
List<ErpProductDO> productList = productService.validProductList(convertSet(list, ErpStockOutSaveReqVO.Item::getProductId));
|
|
|
|
|
Map<Long, ErpProductDO> productMap = convertMap(productList, ErpProductDO::getId);
|
|
|
|
|
Map<Long, WarehouseAreaDO> areaMap = warehouseAreaService.getWarehouseAreaMap(
|
|
|
|
|
convertSet(list, ErpStockOutSaveReqVO.Item::getAreaId));
|
|
|
|
|
return convertList(list, item -> BeanUtils.toBean(item, ErpStockOutItemDO.class, target -> target
|
|
|
|
|
.setAreaName(areaMap.containsKey(target.getAreaId()) ? areaMap.get(target.getAreaId()).getAreaName() : null)
|
|
|
|
|
.setProductUnitId(productMap.get(target.getProductId()).getUnitId())
|
|
|
|
|
.setTotalPrice(MoneyUtils.priceMultiply(target.getProductPrice(), target.getCount()))));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void validateWarehouseAreas(List<ErpStockOutSaveReqVO.Item> list) {
|
|
|
|
|
Map<Long, ErpWarehouseDO> warehouseMap = convertMap(
|
|
|
|
|
warehouseService.validWarehouseList(convertSet(list, ErpStockOutSaveReqVO.Item::getWarehouseId)),
|
|
|
|
|
ErpWarehouseDO::getId);
|
|
|
|
|
Map<Long, WarehouseAreaDO> areaMap = warehouseAreaService.getWarehouseAreaMap(
|
|
|
|
|
convertSet(list, ErpStockOutSaveReqVO.Item::getAreaId));
|
|
|
|
|
list.forEach(item -> {
|
|
|
|
|
if (item.getAreaId() == null) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
WarehouseAreaDO area = areaMap.get(item.getAreaId());
|
|
|
|
|
if (area == null) {
|
|
|
|
|
throw exception(WAREHOUSE_AREA_NOT_EXISTS);
|
|
|
|
|
}
|
|
|
|
|
if (!warehouseMap.containsKey(item.getWarehouseId())
|
|
|
|
|
|| !Objects.equals(item.getWarehouseId(), area.getWarehouseId())) {
|
|
|
|
|
throw exception(WAREHOUSE_LOCATION_WAREHOUSE_AREA_NOT_MATCH);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void updateStockOutItemList(Long id, List<ErpStockOutItemDO> newList) {
|
|
|
|
|
boolean moldStockOut = CollUtil.isNotEmpty(newList)
|
|
|
|
|
&& newList.stream().anyMatch(item -> item.getMoldSetId() != null);
|
|
|
|
|
|