|
|
@ -37,6 +37,7 @@ import org.springframework.transaction.annotation.Transactional; |
|
|
|
import org.springframework.validation.annotation.Validated; |
|
|
|
|
|
|
|
import javax.annotation.Resource; |
|
|
|
import java.math.BigDecimal; |
|
|
|
import java.time.LocalDateTime; |
|
|
|
import java.util.ArrayList; |
|
|
|
import java.util.Collection; |
|
|
@ -107,11 +108,58 @@ public class ProductputawayRecordMainServiceImpl implements ProductputawayRecord |
|
|
|
RecordsettingDO recordsettingDO = recordsettingService.selectRecordsettingExist("MaterialReturnRecord"); |
|
|
|
mainDO.setInterfaceType(recordsettingDO.getInterfaceType()); |
|
|
|
productputawayRecordMainMapper.insert(mainDO); |
|
|
|
|
|
|
|
BigDecimal singlePrice = BigDecimal.ZERO; |
|
|
|
BigDecimal amount = BigDecimal.ZERO; |
|
|
|
LocalDateTime arriveDate = null; |
|
|
|
LocalDateTime produceDate = null; |
|
|
|
LocalDateTime expireDate = null; |
|
|
|
String locationCode = ""; |
|
|
|
|
|
|
|
//库存事务
|
|
|
|
List<TransactionCreateReqVO> transactionCreateReqVOList = new ArrayList<>(); |
|
|
|
List<ProductputawayRecordDetailDO> detailDOList = new ArrayList<>(); |
|
|
|
for (ProductputawayRecordDetailCreateReqVO createReqVOTemp : subDOList) { |
|
|
|
ProductputawayRecordDetailDO detailDO = ProductputawayRecordDetailConvert.INSTANCE.convert(createReqVOTemp); |
|
|
|
|
|
|
|
String fromBatch = detailDO.getFromBatch(); |
|
|
|
locationCode = detailDO.getFromLocationCode(); |
|
|
|
String fromPackingNumber = detailDO.getFromPackingNumber(); |
|
|
|
String fromParentPackingNumber = createReqVOTemp.getFromParentPackingNumber() == null ? "" : createReqVOTemp.getFromParentPackingNumber(); |
|
|
|
|
|
|
|
//查询库存余额
|
|
|
|
List<String> inventoryStatusList = new ArrayList<>(); |
|
|
|
inventoryStatusList.add(detailDO.getInventoryStatus()); |
|
|
|
List<BalanceDO> balanceDO = jobUtils.selectlocationReturnManagementAccuracyToBalance(detailDO.getItemCode(),fromPackingNumber,fromBatch,locationCode,inventoryStatusList); |
|
|
|
if (balanceDO != null && balanceDO.size() > 0) { |
|
|
|
singlePrice = balanceDO.get(0).getSinglePrice(); |
|
|
|
amount = balanceDO.get(0).getAmount(); |
|
|
|
arriveDate = balanceDO.get(0).getArriveDate(); |
|
|
|
produceDate = balanceDO.get(0).getProduceDate(); |
|
|
|
expireDate = balanceDO.get(0).getExpireDate(); |
|
|
|
} |
|
|
|
// 扫描的箱码 没查询到库存,同时 父包装 有值
|
|
|
|
List<BalanceDO> balanceDOParent = new ArrayList<>(); |
|
|
|
if ((balanceDO == null || balanceDO.size() == 0) && !fromParentPackingNumber.equals("")) { |
|
|
|
balanceDOParent = jobUtils.selectlocationReturnManagementAccuracyToBalance(detailDO.getItemCode(),fromParentPackingNumber,fromBatch,locationCode,inventoryStatusList); |
|
|
|
if (balanceDOParent == null || balanceDOParent.size() == 0) { |
|
|
|
// redisCache.deleteLock(lockKey);
|
|
|
|
throw exception(REPLEINSH_JOB_MAIN_PACK_PARENT_BALANCE_ERROR,locationCode,fromParentPackingNumber,fromPackingNumber); |
|
|
|
} else { |
|
|
|
singlePrice = balanceDOParent.get(0).getSinglePrice(); |
|
|
|
amount = balanceDOParent.get(0).getAmount(); |
|
|
|
arriveDate = balanceDOParent.get(0).getArriveDate(); |
|
|
|
produceDate = balanceDOParent.get(0).getProduceDate(); |
|
|
|
expireDate = balanceDOParent.get(0).getExpireDate(); |
|
|
|
detailDO.setFromPackingNumber(fromParentPackingNumber); |
|
|
|
} |
|
|
|
} |
|
|
|
// 扫描子或父 没查询到 ,同时 无父情况
|
|
|
|
if (balanceDO == null && fromParentPackingNumber.equals("")) { |
|
|
|
// redisCache.deleteLock(lockKey);
|
|
|
|
throw exception(REPLEINSH_JOB_MAIN_PACK_BALANCE_ERROR,locationCode,fromPackingNumber); |
|
|
|
} |
|
|
|
|
|
|
|
detailDO.setId(null); |
|
|
|
detailDO.setMasterId(mainDO.getId()); |
|
|
|
detailDO.setNumber(number); |
|
|
@ -142,10 +190,10 @@ public class ProductputawayRecordMainServiceImpl implements ProductputawayRecord |
|
|
|
throw exception(ITEMBASIC_NOT_EXISTS); |
|
|
|
} |
|
|
|
//查询库存余额
|
|
|
|
BalanceDO balanceDO = balanceService.checkBalance(detailDO.getFromPackingNumber(), detailDO.getItemCode(), detailDO.getFromBatch(), detailDO.getInventoryStatus(), detailDO.getFromLocationCode()); |
|
|
|
if (balanceDO == null) { |
|
|
|
throw exception(BALANCE_NOT_EXISTS); |
|
|
|
} |
|
|
|
// BalanceDO balanceDO = balanceService.checkBalance(detailDO.getFromPackingNumber(), detailDO.getItemCode(), detailDO.getFromBatch(), detailDO.getInventoryStatus(), detailDO.getFromLocationCode());
|
|
|
|
// if (balanceDO == null) {
|
|
|
|
// throw exception(BALANCE_NOT_EXISTS);
|
|
|
|
// }
|
|
|
|
detailDOList.add(detailDO); |
|
|
|
// 库存事务——入
|
|
|
|
TransactionCreateReqVO transactionCreateReqVOIn = new TransactionCreateReqVO(); |
|
|
@ -156,15 +204,14 @@ public class ProductputawayRecordMainServiceImpl implements ProductputawayRecord |
|
|
|
transactionCreateReqVOIn.setTransactionType(transactiontypeDOIn.getCode()); |
|
|
|
transactionCreateReqVOIn.setWorker(String.valueOf(userRespDTO.getId())); |
|
|
|
transactionCreateReqVOIn.setBatch(detailDO.getToBatch()); |
|
|
|
transactionCreateReqVOIn.setAltBatch(balanceDO.getAltBatch()); |
|
|
|
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(singlePrice); |
|
|
|
transactionCreateReqVOIn.setAmount(amount); |
|
|
|
transactionCreateReqVOIn.setArriveDate(arriveDate); |
|
|
|
transactionCreateReqVOIn.setProduceDate(produceDate); |
|
|
|
transactionCreateReqVOIn.setExpireDate(expireDate); |
|
|
|
transactionCreateReqVOIn.setWarehouseCode(mainDO.getFromWarehouseCode()); |
|
|
|
transactionCreateReqVOIn.setRecordNumber(number); |
|
|
|
transactionCreateReqVOIn.setId(null); |
|
|
@ -187,14 +234,13 @@ public class ProductputawayRecordMainServiceImpl implements ProductputawayRecord |
|
|
|
transactionCreateReqVOOut.setInventoryStatus(detailDO.getInventoryStatus()); |
|
|
|
transactionCreateReqVOOut.setWorker(String.valueOf(userRespDTO.getId())); |
|
|
|
transactionCreateReqVOOut.setBatch(detailDO.getFromBatch()); |
|
|
|
transactionCreateReqVOOut.setAltBatch(balanceDO.getAltBatch()); |
|
|
|
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(singlePrice); |
|
|
|
transactionCreateReqVOOut.setAmount(amount); |
|
|
|
transactionCreateReqVOOut.setArriveDate(arriveDate); |
|
|
|
transactionCreateReqVOOut.setProduceDate(produceDate); |
|
|
|
transactionCreateReqVOOut.setExpireDate(expireDate); |
|
|
|
transactionCreateReqVOOut.setWarehouseCode(mainDO.getFromWarehouseCode()); |
|
|
|
transactionCreateReqVOOut.setId(null); |
|
|
|
// 根据 库位 获取 库区DO
|
|
|
|