执行及取消执行;
This commit is contained in:
+88
@@ -842,6 +842,14 @@ public class StockOutOrderApplicationService {
|
||||
return stockOutOrderDomainService.auditState(stockOutOrderDO);
|
||||
}
|
||||
|
||||
public Boolean execution(String outOrderNumber){
|
||||
//Boolean execution = stockOutOrderDomainService.execution(outOrderNumber);
|
||||
StockOutOrderDO stockOutOrderDO = new StockOutOrderDO();
|
||||
stockOutOrderDO.setOutOrderNumber(outOrderNumber);
|
||||
Boolean b = omsAutoAssign(stockOutOrderDO);
|
||||
return b;
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 手动分配
|
||||
* @author ZhouGY
|
||||
@@ -934,6 +942,82 @@ public class StockOutOrderApplicationService {
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
public Boolean omsAutoAssign(StockOutOrderDO stockOutOrderDO){
|
||||
List<String> outOrderNumbers = stockOutOrderDO.getOutOrderNumbers();
|
||||
if (outOrderNumbers == null || outOrderNumbers.isEmpty()){
|
||||
throw new ServiceException("出库单ID不能为空");
|
||||
}
|
||||
Boolean result = true;
|
||||
for (String outOrderNumber : outOrderNumbers){
|
||||
StockOutOrderDO stockOutOrderD = new StockOutOrderDO();
|
||||
StockOutOrder stockOutOrderDb = stockOutOrderService.getOne(new QueryWrapper<StockOutOrder>().lambda()
|
||||
.eq(StockOutOrder::getOutOrderNumber, outOrderNumber)
|
||||
.eq(StockOutOrder::getDelFlag, 1), false);
|
||||
if (stockOutOrderDb == null){
|
||||
throw new ServiceException("出库单不存在");
|
||||
}
|
||||
BeanUtils.copyProperties(stockOutOrderDb, stockOutOrderD);
|
||||
List<OutMaterialDetail> outMaterialDetailList = outMaterialDetailService.list(new QueryWrapper<OutMaterialDetail>().lambda()
|
||||
.eq(OutMaterialDetail::getOutOrderNumber, stockOutOrderDb.getOutOrderNumber()));
|
||||
List<OutMaterialDetailDO> materialDetailList = cn.hutool.core.bean.BeanUtil.copyToList(outMaterialDetailList, OutMaterialDetailDO.class);
|
||||
List<OutMaterialDetailDO> materialDetailList2 = new ArrayList<>();
|
||||
for (OutMaterialDetailDO detail : materialDetailList) {
|
||||
String batchRefNo = detail.getBatchRefNo();
|
||||
String sheetRefNo = detail.getSheetRefNo();
|
||||
String boxPalletNo = detail.getBoxPalletNo();
|
||||
Long materialBaseInfoId = detail.getMaterialBaseInfoId();
|
||||
Long warehouseId = detail.getWarehouseId();
|
||||
List<MaterialInventory> materialInventories = materialInventoryMapper.selectList(new QueryWrapper<MaterialInventory>().lambda()
|
||||
.eq(MaterialInventory::getBatchRefNo, batchRefNo)
|
||||
.eq(MaterialInventory::getSheetRefNo, sheetRefNo)
|
||||
.eq(MaterialInventory::getBoxPalletNo, boxPalletNo)
|
||||
.eq(MaterialInventory::getWarehouseId, warehouseId)
|
||||
.eq(MaterialInventory::getMaterialBaseInfoId, materialBaseInfoId));
|
||||
if (materialInventories == null || materialInventories.isEmpty()) {
|
||||
throw new ServiceException("库存不存在:" + batchRefNo + " " + sheetRefNo + " " + boxPalletNo);
|
||||
}
|
||||
|
||||
BigDecimal remainingQuantity = detail.getQuantity(); // 计划数量
|
||||
for (MaterialInventory materialInventory : materialInventories) {
|
||||
if (remainingQuantity.compareTo(BigDecimal.ZERO) <= 0) {
|
||||
break;
|
||||
}
|
||||
// 当前物料的可用库存
|
||||
BigDecimal availableStock = materialInventory.getAllocationQuantity();
|
||||
// 如果当前物料没有库存,跳过
|
||||
if (availableStock == null || availableStock.compareTo(BigDecimal.ZERO) <= 0) {
|
||||
continue;
|
||||
}
|
||||
// 计算本次能扣减的数量:取 剩余计划 和 当前库存 的较小值
|
||||
BigDecimal deductQuantity = remainingQuantity.compareTo(availableStock) <= 0
|
||||
? remainingQuantity // 剩余计划 <= 库存,扣剩余计划
|
||||
: availableStock; // 剩余计划 > 库存,扣全部库存
|
||||
|
||||
detail.setMaterialInventoryId(materialInventory.getMaterialInventoryId());
|
||||
detail.setStorageLocationId(materialInventory.getStorageLocationId());
|
||||
detail.setStorageLocationName(materialInventory.getStorageLocationName());
|
||||
detail.setStorageLocationCode(materialInventory.getStorageLocationCode());
|
||||
detail.setStorageSectionId(materialInventory.getStorageSectionId());
|
||||
detail.setStorageName(materialInventory.getStorageName());
|
||||
detail.setStorageCode(materialInventory.getStorageCode());
|
||||
detail.setInventoryQuantity(materialInventory.getInventoryQuantity());
|
||||
detail.setAllocationQuantity(deductQuantity);
|
||||
materialDetailList2.add(detail);
|
||||
// 更新剩余计划数量
|
||||
remainingQuantity = remainingQuantity.subtract(deductQuantity);
|
||||
}
|
||||
}
|
||||
stockOutOrderD.setMaterialDetailList(materialDetailList2);
|
||||
StockOutOrderDO assembleStockOutOrderDO = assembleParamByOutOrder(stockOutOrderD);
|
||||
Boolean assignResult = stockOutOrderDomainService.autoAssign(assembleStockOutOrderDO);
|
||||
if (!assignResult) {
|
||||
result = false;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/*public Boolean autoAssign(StockOutOrderDO stockOutOrderDO){
|
||||
StockOutOrderDO assembleStockOutOrderDO = assembleParamByOutOrder(stockOutOrderDO);
|
||||
return stockOutOrderDomainService.autoAssign(assembleStockOutOrderDO);
|
||||
@@ -1487,6 +1571,10 @@ public class StockOutOrderApplicationService {
|
||||
stockOutOrderDomainService.omsOrderAdd(stockOutOrder);
|
||||
}
|
||||
|
||||
public void cancelExecutionOrder(StockOutOrder stockOutOrder){
|
||||
stockOutOrderDomainService.cancelExecutionOrder(stockOutOrder);
|
||||
}
|
||||
|
||||
public void omsOrderAddDetail(List<OutMaterialDetail> outMaterialDetails){
|
||||
stockOutOrderDomainService.omsOrderAddDetail(outMaterialDetails);
|
||||
}
|
||||
|
||||
+3
@@ -261,6 +261,9 @@ public class StockOutOrderDO extends BaseVOEntity {
|
||||
@ApiModelProperty("出库单id集合")
|
||||
private List<Long> outOrderIds;
|
||||
|
||||
@ApiModelProperty("出库单number集合")
|
||||
private List<String> outOrderNumbers;
|
||||
|
||||
@ApiModelProperty("物料明细")
|
||||
private List<OutMaterialDetailDO> materialDetailList;
|
||||
|
||||
|
||||
+63
@@ -4,6 +4,7 @@ import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson2.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||
@@ -26,6 +27,8 @@ import com.mhd.wms.domain.handoverTaskOrder.repository.facade.IHandoverTaskOrder
|
||||
import com.mhd.wms.domain.handoverTaskOrder.repository.todo.HandoverTaskOrderDO;
|
||||
import com.mhd.wms.domain.inMaterialDetail.entity.InMaterialDetail;
|
||||
import com.mhd.wms.domain.inMaterialDetail.repository.todo.InMaterialDetailDO;
|
||||
import com.mhd.wms.domain.inventoryAdjustmentRecord.entity.InventoryAdjustmentRecord;
|
||||
import com.mhd.wms.domain.inventoryAdjustmentRecord.repository.facade.IInventoryAdjustmentRecordService;
|
||||
import com.mhd.wms.domain.inventoryStandingDetail.repository.facade.IInventoryStandingDetailService;
|
||||
import com.mhd.wms.domain.inventoryStandingDetail.repository.todo.InventoryStandingDetailDO;
|
||||
import com.mhd.wms.domain.materialBarCode.repository.facade.IMaterialBarCodeService;
|
||||
@@ -34,6 +37,7 @@ import com.mhd.wms.domain.materialBaseInfo.entity.MaterialBaseInfo;
|
||||
import com.mhd.wms.domain.materialBaseInfo.repository.facade.IMaterialBaseInfoService;
|
||||
import com.mhd.wms.domain.materialBaseInfo.repository.mapper.MaterialBaseInfoMapper;
|
||||
import com.mhd.wms.domain.materialBaseInfo.repository.po.MaterialBaseInfoPO;
|
||||
import com.mhd.wms.domain.materialInventory.entity.MaterialInventory;
|
||||
import com.mhd.wms.domain.materialInventory.repository.facade.IMaterialInventoryService;
|
||||
import com.mhd.wms.domain.materialInventory.repository.mapper.MaterialInventoryMapper;
|
||||
import com.mhd.wms.domain.materialInventory.repository.po.MaterialInventoryPO;
|
||||
@@ -137,6 +141,8 @@ public class StockOutOrderDomainService {
|
||||
@Autowired
|
||||
private MaterialInventoryMapper materialInventoryMapper;
|
||||
@Autowired
|
||||
private IInventoryAdjustmentRecordService inventoryAdjustmentRecordService;
|
||||
@Autowired
|
||||
private IPickingMaterialDetailService pickingMaterialDetailService;
|
||||
|
||||
/**
|
||||
@@ -594,6 +600,23 @@ public class StockOutOrderDomainService {
|
||||
.in(StockOutOrder::getOutOrderId, stockOutOrderDO.getOutOrderIds()));
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Boolean execution(String outOrderNumber) {
|
||||
StockOutOrder stockOutOrder = stockOutOrderService.getOne(new QueryWrapper<StockOutOrder>().lambda()
|
||||
.eq(StockOutOrder::getOutOrderNumber, outOrderNumber)
|
||||
.eq(StockOutOrder::getDelFlag, 1));
|
||||
if (stockOutOrder == null) {
|
||||
throw new ServiceException("出库单不存在");
|
||||
}
|
||||
StockOutOrderDO stockOutOrderDO = new StockOutOrderDO();
|
||||
Long outOrderId = stockOutOrder.getOutOrderId();
|
||||
List<Long> outOrderIds = Collections.singletonList(outOrderId);
|
||||
stockOutOrderDO.setOutOrderIds(outOrderIds);
|
||||
auditState(stockOutOrderDO);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @description 生成拣货单
|
||||
@@ -1727,6 +1750,46 @@ public class StockOutOrderDomainService {
|
||||
stockOutOrderService.save(stockOutOrder);
|
||||
}
|
||||
|
||||
public void cancelExecutionOrder(StockOutOrder stockOutOrder) {
|
||||
String outOrderNumber = stockOutOrder.getOutOrderNumber();
|
||||
StockOutOrder stockOutOrderDB = stockOutOrderService.getOne(new LambdaQueryWrapper<StockOutOrder>()
|
||||
.eq(StockOutOrder::getOutOrderNumber, outOrderNumber)
|
||||
.eq(StockOutOrder::getDelFlag, 1));
|
||||
if (stockOutOrderDB == null) {
|
||||
throw new ServiceException("出库单不存在");
|
||||
}
|
||||
List<OutMaterialDetail> materialDetails = outMaterialDetailService.list(new LambdaQueryWrapper<OutMaterialDetail>()
|
||||
.eq(OutMaterialDetail::getOutOrderNumber, outOrderNumber)
|
||||
.eq(OutMaterialDetail::getDelFlag, 1));
|
||||
if (CollectionUtils.isEmpty(materialDetails)) {
|
||||
throw new ServiceException("出库单明细不存在");
|
||||
}
|
||||
for (OutMaterialDetail materialDetail : materialDetails) {
|
||||
//还原库存
|
||||
BigDecimal allocationQuantity = materialDetail.getAllocationQuantity();
|
||||
Long materialInventoryId = materialDetail.getMaterialInventoryId();
|
||||
MaterialInventory materialInventory = materialInventoryMapper.selectById(materialInventoryId);
|
||||
if (materialInventory == null) {
|
||||
throw new ServiceException("库存信息不存在");
|
||||
}
|
||||
materialInventory.setAllocationQuantity(materialInventory.getAllocationQuantity().add(allocationQuantity));
|
||||
materialInventory.setFreezeQuantity(materialInventory.getFreezeQuantity().subtract(allocationQuantity));
|
||||
materialInventoryMapper.updateById(materialInventory);
|
||||
//逻辑删除库存调整记录
|
||||
Long uniqueId = materialDetail.getUniqueId();
|
||||
String relateNo = outOrderNumber+"#"+uniqueId;
|
||||
inventoryAdjustmentRecordService.update(new InventoryAdjustmentRecord(), new LambdaUpdateWrapper<InventoryAdjustmentRecord>()
|
||||
.set(InventoryAdjustmentRecord::getDelFlag, 2)
|
||||
.eq(InventoryAdjustmentRecord::getRelateNo, relateNo));
|
||||
//逻辑删除出库单明细
|
||||
materialDetail.setDelFlag(2);
|
||||
outMaterialDetailService.updateById(materialDetail);
|
||||
}
|
||||
//逻辑删除出库单
|
||||
stockOutOrder.setDelFlag(2);
|
||||
stockOutOrderService.updateById(stockOutOrder);
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void omsOrderAddDetail(List<OutMaterialDetail> outMaterialDetails) {
|
||||
if (CollectionUtils.isEmpty(outMaterialDetails)) {
|
||||
|
||||
+27
@@ -217,6 +217,16 @@ public class StockOutOrderApi extends BaseController {
|
||||
return AjaxResult.success(stockOutOrderApplicationService.auditState(stockOutOrderDO));
|
||||
}
|
||||
|
||||
/**
|
||||
* 审核出库单
|
||||
*/
|
||||
@ApiOperation("oms执行")
|
||||
@PostMapping(value = "/execution")
|
||||
public AjaxResult execution(@RequestBody com.mhd.system.api.domain.StockOutOrderDTO stockOutOrderDTO) {
|
||||
String outOrderNumber = stockOutOrderDTO.getOutOrderNumber();
|
||||
return AjaxResult.success(stockOutOrderApplicationService.execution(outOrderNumber));
|
||||
}
|
||||
|
||||
/**
|
||||
* 手动分配
|
||||
*/
|
||||
@@ -242,6 +252,17 @@ public class StockOutOrderApi extends BaseController {
|
||||
return toAjax(stockOutOrderApplicationService.autoAssign(stockOutOrderDO));
|
||||
}
|
||||
|
||||
/**
|
||||
* 手动分配
|
||||
*/
|
||||
@ApiOperation("oms执行单下发自动分配")
|
||||
@PostMapping("/omsAutoAssign")
|
||||
public AjaxResult omsAutoAssign(@RequestBody StockOutOrderDTO stockOutOrderDTO) {
|
||||
StockOutOrderDO stockOutOrderDO = new StockOutOrderDO();
|
||||
BeanUtils.copyProperties(stockOutOrderDTO, stockOutOrderDO);
|
||||
return toAjax(stockOutOrderApplicationService.omsAutoAssign(stockOutOrderDO));
|
||||
}
|
||||
|
||||
/**
|
||||
* 取消分配
|
||||
*/
|
||||
@@ -422,6 +443,12 @@ public class StockOutOrderApi extends BaseController {
|
||||
stockOutOrderApplicationService.omsOrderAddDetail(outMaterialDetails);
|
||||
}
|
||||
|
||||
@ApiOperation("oms下发单保存")
|
||||
@PostMapping(value = "/cancelExecutionOrder")
|
||||
public void omsCancelExecutionOrder(@RequestBody StockOutOrder stockOutOrder) {
|
||||
stockOutOrderApplicationService.cancelExecutionOrder(stockOutOrder);
|
||||
}
|
||||
|
||||
/**
|
||||
* oms下发单配送明细保存
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user