|
|
@ -30,6 +30,7 @@ import com.win.module.wms.dal.dataobject.transactiontype.TransactiontypeDO; |
|
|
|
import com.win.module.wms.dal.mysql.balance.BalanceMapper; |
|
|
|
import com.win.module.wms.dal.mysql.productionreturnRecord.ProductionreturnRecordDetailMapper; |
|
|
|
import com.win.module.wms.dal.mysql.productionreturnRecord.ProductionreturnRecordMainMapper; |
|
|
|
import com.win.module.wms.service.balance.BalanceService; |
|
|
|
import com.win.module.wms.service.itembasic.ItembasicService; |
|
|
|
import com.win.module.wms.service.location.LocationService; |
|
|
|
import com.win.module.wms.service.recordsetting.RecordsettingService; |
|
|
@ -60,6 +61,8 @@ import static com.win.module.wms.enums.ErrorCodeConstants.*; |
|
|
|
@Validated |
|
|
|
public class ProductionreturnRecordMainServiceImpl implements ProductionreturnRecordMainService { |
|
|
|
|
|
|
|
@Resource |
|
|
|
private BalanceService balanceService; |
|
|
|
@Resource |
|
|
|
private BalanceMapper balanceMapper; |
|
|
|
@Resource |
|
|
@ -121,16 +124,21 @@ public class ProductionreturnRecordMainServiceImpl implements ProductionreturnRe |
|
|
|
productionreturnRecordMainMapper.insert(mainDO); |
|
|
|
//库存事务
|
|
|
|
List<TransactionCreateReqVO> transactionCreateReqVOList = new ArrayList<>(); |
|
|
|
// 求和
|
|
|
|
BigDecimal sumQty = BigDecimal.ZERO; |
|
|
|
for (ProductionreturnRecordDetailDO detailDO : subDOList) { |
|
|
|
sumQty = sumQty.add(detailDO.getQty()); |
|
|
|
} |
|
|
|
for (ProductionreturnRecordDetailDO detailDO : subDOList) { |
|
|
|
detailDO.setMasterId(mainDO.getId()); |
|
|
|
detailDO.setNumber(number); |
|
|
|
// LocationDO locationDOFrom = locationService.selectLocation(detailDO.getFromLocationCode());
|
|
|
|
// if(locationDOFrom != null) {
|
|
|
|
// detailDO.setFromAreaCode(locationDOFrom.getAreaCode());
|
|
|
|
// detailDO.setFromLocationGroupCode(locationDOFrom.getLocationGroupCode());
|
|
|
|
// } else {
|
|
|
|
// throw exception(LOCATION_NOT_EXISTS);
|
|
|
|
// }
|
|
|
|
LocationDO locationDOFrom = locationService.selectLocation(detailDO.getFromLocationCode()); |
|
|
|
if(locationDOFrom != null) { |
|
|
|
detailDO.setFromAreaCode(locationDOFrom.getAreaCode()); |
|
|
|
detailDO.setFromLocationGroupCode(locationDOFrom.getLocationGroupCode()); |
|
|
|
} else { |
|
|
|
throw exception(LOCATION_NOT_EXISTS); |
|
|
|
} |
|
|
|
LocationDO locationDOTo = locationService.selectLocation(detailDO.getToLocationCode()); |
|
|
|
if(locationDOTo != null) { |
|
|
|
detailDO.setToAreaCode(locationDOTo.getAreaCode()); |
|
|
@ -149,10 +157,17 @@ public class ProductionreturnRecordMainServiceImpl implements ProductionreturnRe |
|
|
|
throw exception(ITEMBASIC_NOT_EXISTS); |
|
|
|
} |
|
|
|
//查询库存余额
|
|
|
|
BalanceDO balanceDO = balanceMapper.getBalanceQty(detailDO.getFromPackingNumber(), detailDO.getItemCode(), detailDO.getFromBatch(), detailDO.getInventoryStatus(), detailDO.getToLocationCode()); |
|
|
|
if (balanceDO == null) { |
|
|
|
List<String> status = new ArrayList<>(); |
|
|
|
status.add(detailDO.getInventoryStatus()); |
|
|
|
List<BalanceDO> balanceDOList = balanceService.selectNumber(detailDO.getItemCode(),status,detailDO.getFromLocationCode()); |
|
|
|
if (balanceDOList == null || balanceDOList.size() == 0) { |
|
|
|
throw exception(UNPLANNEDISSUE_REQUEST_DETAIL_BALANCE_NOT_EXISTS); |
|
|
|
} |
|
|
|
// balanceDOList.get(0) 线边库 管理模式为 数量管理 库存余额应该就是一个
|
|
|
|
// 退料总数量 大于 库存余额数量 返回 错误信息
|
|
|
|
if (sumQty.compareTo(balanceDOList.get(0).getQty()) == 1) { |
|
|
|
throw exception(PRODUCTIONRETURN_RECORD_QTY_ERROR, sumQty, balanceDOList.get(0).getQty()); |
|
|
|
} |
|
|
|
// 库存事务——入
|
|
|
|
TransactionCreateReqVO transactionCreateReqVOIn = new TransactionCreateReqVO(); |
|
|
|
BeanUtils.copyProperties(detailDO, transactionCreateReqVOIn); |
|
|
@ -165,11 +180,11 @@ public class ProductionreturnRecordMainServiceImpl implements ProductionreturnRe |
|
|
|
transactionCreateReqVOIn.setPackingNumber(detailDO.getToPackingNumber()); |
|
|
|
transactionCreateReqVOIn.setInventoryStatus(detailDO.getInventoryStatus()); |
|
|
|
transactionCreateReqVOIn.setLocationCode(detailDO.getToLocationCode()); |
|
|
|
transactionCreateReqVOIn.setSinglePrice(balanceDO.getSinglePrice()); |
|
|
|
transactionCreateReqVOIn.setAmount(balanceDO.getAmount()); |
|
|
|
transactionCreateReqVOIn.setArriveDate(balanceDO.getArriveDate()); |
|
|
|
transactionCreateReqVOIn.setProduceDate(balanceDO.getProduceDate()); |
|
|
|
transactionCreateReqVOIn.setExpireDate(balanceDO.getExpireDate()); |
|
|
|
transactionCreateReqVOIn.setSinglePrice(balanceDOList.get(0).getSinglePrice()); |
|
|
|
transactionCreateReqVOIn.setAmount(balanceDOList.get(0).getAmount()); |
|
|
|
transactionCreateReqVOIn.setArriveDate(balanceDOList.get(0).getArriveDate()); |
|
|
|
transactionCreateReqVOIn.setProduceDate(balanceDOList.get(0).getProduceDate()); |
|
|
|
transactionCreateReqVOIn.setExpireDate(balanceDOList.get(0).getExpireDate()); |
|
|
|
transactionCreateReqVOIn.setWarehouseCode(mainDO.getFromWarehouseCode()); |
|
|
|
transactionCreateReqVOIn.setRecordNumber(number); |
|
|
|
transactionCreateReqVOIn.setId(null); |
|
|
@ -187,11 +202,11 @@ public class ProductionreturnRecordMainServiceImpl implements ProductionreturnRe |
|
|
|
transactionCreateReqVOOut.setBatch(detailDO.getFromBatch()); |
|
|
|
transactionCreateReqVOOut.setPackingNumber(detailDO.getFromPackingNumber()); |
|
|
|
transactionCreateReqVOOut.setLocationCode(detailDO.getFromLocationCode()); |
|
|
|
transactionCreateReqVOOut.setSinglePrice(balanceDO.getSinglePrice()); |
|
|
|
transactionCreateReqVOOut.setAmount(balanceDO.getAmount()); |
|
|
|
transactionCreateReqVOOut.setArriveDate(balanceDO.getArriveDate()); |
|
|
|
transactionCreateReqVOOut.setProduceDate(balanceDO.getProduceDate()); |
|
|
|
transactionCreateReqVOOut.setExpireDate(balanceDO.getExpireDate()); |
|
|
|
transactionCreateReqVOOut.setSinglePrice(balanceDOList.get(0).getSinglePrice()); |
|
|
|
transactionCreateReqVOOut.setAmount(balanceDOList.get(0).getAmount()); |
|
|
|
transactionCreateReqVOOut.setArriveDate(balanceDOList.get(0).getArriveDate()); |
|
|
|
transactionCreateReqVOOut.setProduceDate(balanceDOList.get(0).getProduceDate()); |
|
|
|
transactionCreateReqVOOut.setExpireDate(balanceDOList.get(0).getExpireDate()); |
|
|
|
transactionCreateReqVOOut.setWarehouseCode(mainDO.getFromWarehouseCode()); |
|
|
|
transactionCreateReqVOOut.setId(null); |
|
|
|
transactionCreateReqVOList.add(transactionCreateReqVOOut); |
|
|
|