|
|
@ -1,7 +1,6 @@ |
|
|
|
package com.win.module.wms.service.issueRecord; |
|
|
|
|
|
|
|
import com.win.framework.common.pojo.CustomConditions; |
|
|
|
import com.win.framework.common.pojo.PageResult; |
|
|
|
import com.win.module.infra.api.trends.TrendsApi; |
|
|
|
import com.win.module.infra.enums.TrendsTypeEnum; |
|
|
|
import com.win.module.system.api.serialnumber.SerialNumberApi; |
|
|
@ -14,18 +13,15 @@ import com.win.module.wms.controller.issueRecord.vo.IssueRecordMainPageReqVO; |
|
|
|
import com.win.module.wms.controller.issueRecord.vo.IssueRecordMainUpdateReqVO; |
|
|
|
import com.win.module.wms.controller.transaction.vo.TransactionCreateReqVO; |
|
|
|
import com.win.module.wms.convert.issueRecord.IssueRecordDetailConvert; |
|
|
|
import com.win.module.wms.convert.issueRecord.IssueRecordMainConvert; |
|
|
|
import com.win.module.wms.dal.dataobject.balance.BalanceDO; |
|
|
|
import com.win.module.wms.dal.dataobject.businesstype.BusinesstypeDO; |
|
|
|
import com.win.module.wms.dal.dataobject.issueRecord.IssueRecordDetailDO; |
|
|
|
import com.win.module.wms.dal.dataobject.issueRecord.IssueRecordMainDO; |
|
|
|
import com.win.module.wms.dal.dataobject.itembasic.ItembasicDO; |
|
|
|
import com.win.module.wms.dal.dataobject.location.LocationDO; |
|
|
|
import com.win.module.wms.dal.dataobject.recordsetting.RecordsettingDO; |
|
|
|
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.issueRecord.IssueRecordDetailMapper; |
|
|
|
import com.win.module.wms.dal.mysql.issueRecord.IssueRecordMainMapper; |
|
|
|
import com.win.module.wms.service.itembasic.ItembasicService; |
|
|
|
import com.win.module.wms.service.location.LocationService; |
|
|
|
import com.win.module.wms.service.recordsetting.RecordsettingService; |
|
|
@ -33,14 +29,20 @@ import com.win.module.wms.service.transaction.TransactionService; |
|
|
|
import com.win.module.wms.util.JobUtils; |
|
|
|
import org.springframework.beans.BeanUtils; |
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
import javax.annotation.Resource; |
|
|
|
|
|
|
|
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; |
|
|
|
import java.util.List; |
|
|
|
import java.util.*; |
|
|
|
|
|
|
|
import com.win.module.wms.dal.dataobject.issueRecord.IssueRecordMainDO; |
|
|
|
import com.win.framework.common.pojo.PageResult; |
|
|
|
|
|
|
|
import com.win.module.wms.convert.issueRecord.IssueRecordMainConvert; |
|
|
|
import com.win.module.wms.dal.mysql.issueRecord.IssueRecordMainMapper; |
|
|
|
|
|
|
|
import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; |
|
|
|
import static com.win.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; |
|
|
@ -109,6 +111,7 @@ public class IssueRecordMainServiceImpl implements IssueRecordMainService { |
|
|
|
//库存事务
|
|
|
|
List<TransactionCreateReqVO> transactionCreateReqVOList = new ArrayList<>(); |
|
|
|
for (IssueRecordDetailDO detailDO : subDOList) { |
|
|
|
List<Map<String,String>> recordList = IssueRecordDetailConvert.INSTANCE.convert(detailDO).getRecordList(); |
|
|
|
detailDO.setMasterId(mainDO.getId()); |
|
|
|
detailDO.setNumber(number); |
|
|
|
LocationDO locationDOFrom = locationService.selectLocation(detailDO.getFromLocationCode()); |
|
|
@ -135,53 +138,66 @@ public class IssueRecordMainServiceImpl implements IssueRecordMainService { |
|
|
|
} else { |
|
|
|
throw exception(ITEMBASIC_NOT_EXISTS); |
|
|
|
} |
|
|
|
//查询库存余额
|
|
|
|
BalanceDO balanceDO = balanceMapper.getBalanceQty(detailDO.getFromPackingNumber(), detailDO.getItemCode(), detailDO.getFromBatch(), detailDO.getInventoryStatus(), detailDO.getFromLocationCode()); |
|
|
|
if (balanceDO == null) { |
|
|
|
throw exception(BALANCE_NOT_EXISTS); |
|
|
|
} |
|
|
|
// 库存事务——入
|
|
|
|
TransactionCreateReqVO transactionCreateReqVOIn = new TransactionCreateReqVO(); |
|
|
|
BeanUtils.copyProperties(detailDO, transactionCreateReqVOIn); |
|
|
|
transactionCreateReqVOIn.setBusinessType(businesstypeDO.getCode()); |
|
|
|
TransactiontypeDO transactiontypeDOIn = jobUtils.selectDocumentFromTransactionType(businesstypeDO.getInTransactionType()); |
|
|
|
transactionCreateReqVOIn.setInventoryAction(transactiontypeDOIn.getInventoryAction()); |
|
|
|
transactionCreateReqVOIn.setTransactionType(transactiontypeDOIn.getCode()); |
|
|
|
transactionCreateReqVOIn.setWorker(String.valueOf(userRespDTO.getId())); |
|
|
|
transactionCreateReqVOIn.setBatch(detailDO.getToBatch()); |
|
|
|
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.setWarehouseCode(mainDO.getFromWarehouseCode()); |
|
|
|
transactionCreateReqVOIn.setRecordNumber(number); |
|
|
|
transactionCreateReqVOIn.setId(null); |
|
|
|
transactionCreateReqVOList.add(transactionCreateReqVOIn); |
|
|
|
// 库存事务——出
|
|
|
|
TransactionCreateReqVO transactionCreateReqVOOut = new TransactionCreateReqVO(); |
|
|
|
BeanUtils.copyProperties(detailDO, transactionCreateReqVOOut); |
|
|
|
transactionCreateReqVOOut.setBusinessType(businesstypeDO.getCode()); |
|
|
|
TransactiontypeDO transactiontypeDOOut = jobUtils.selectDocumentFromTransactionType(businesstypeDO.getOutTransactionType()); |
|
|
|
transactionCreateReqVOOut.setInventoryAction(transactiontypeDOOut.getInventoryAction()); |
|
|
|
transactionCreateReqVOOut.setTransactionType(transactiontypeDOOut.getCode()); |
|
|
|
transactionCreateReqVOOut.setRecordNumber(number); |
|
|
|
transactionCreateReqVOOut.setInventoryStatus(detailDO.getInventoryStatus()); |
|
|
|
transactionCreateReqVOOut.setWorker(String.valueOf(userRespDTO.getId())); |
|
|
|
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.setWarehouseCode(mainDO.getFromWarehouseCode()); |
|
|
|
transactionCreateReqVOOut.setId(null); |
|
|
|
transactionCreateReqVOList.add(transactionCreateReqVOOut); |
|
|
|
recordList.forEach( recordListItem -> { |
|
|
|
// record 相关数据
|
|
|
|
String toInventoryStatus = recordListItem.get("toInventoryStatus").toString(); |
|
|
|
String fromPackingNumber = recordListItem.get("fromPackingNumber").toString(); |
|
|
|
String fromBatch = recordListItem.get("fromBatch").toString(); |
|
|
|
String toPackingNumber = recordListItem.get("toPackingNumber").toString(); |
|
|
|
String toBatch = recordListItem.get("toBatch").toString(); |
|
|
|
String fromLocationCode = recordListItem.get("fromLocationCode").toString(); |
|
|
|
String toLocationCode = recordListItem.get("toLocationCode").toString(); |
|
|
|
|
|
|
|
//查询库存余额
|
|
|
|
List<String> inventoryStatusList = new ArrayList<>(); |
|
|
|
inventoryStatusList.add(toInventoryStatus); |
|
|
|
List<BalanceDO> balanceDO = jobUtils.selectlocationReturnManagementAccuracyToBalance(detailDO.getItemCode(),fromPackingNumber,fromBatch,fromLocationCode,inventoryStatusList); |
|
|
|
if (balanceDO == null || balanceDO.size() == 0) { |
|
|
|
throw exception(BALANCE_NOT_EXISTS); |
|
|
|
} |
|
|
|
// 库存事务——入
|
|
|
|
TransactionCreateReqVO transactionCreateReqVOIn = new TransactionCreateReqVO(); |
|
|
|
BeanUtils.copyProperties(detailDO, transactionCreateReqVOIn); |
|
|
|
transactionCreateReqVOIn.setBusinessType(businesstypeDO.getCode()); |
|
|
|
TransactiontypeDO transactiontypeDOIn = jobUtils.selectDocumentFromTransactionType(businesstypeDO.getInTransactionType()); |
|
|
|
transactionCreateReqVOIn.setInventoryAction(transactiontypeDOIn.getInventoryAction()); |
|
|
|
transactionCreateReqVOIn.setTransactionType(transactiontypeDOIn.getCode()); |
|
|
|
transactionCreateReqVOIn.setWorker(String.valueOf(userRespDTO.getId())); |
|
|
|
transactionCreateReqVOIn.setBatch(toBatch); |
|
|
|
transactionCreateReqVOIn.setPackingNumber(toPackingNumber); |
|
|
|
transactionCreateReqVOIn.setInventoryStatus(toInventoryStatus); |
|
|
|
transactionCreateReqVOIn.setLocationCode(toLocationCode); |
|
|
|
transactionCreateReqVOIn.setSinglePrice(balanceDO.get(0).getSinglePrice()); |
|
|
|
transactionCreateReqVOIn.setAmount(balanceDO.get(0).getAmount()); |
|
|
|
transactionCreateReqVOIn.setArriveDate(balanceDO.get(0).getArriveDate()); |
|
|
|
transactionCreateReqVOIn.setProduceDate(balanceDO.get(0).getProduceDate()); |
|
|
|
transactionCreateReqVOIn.setExpireDate(balanceDO.get(0).getExpireDate()); |
|
|
|
transactionCreateReqVOIn.setWarehouseCode(mainDO.getFromWarehouseCode()); |
|
|
|
transactionCreateReqVOIn.setRecordNumber(number); |
|
|
|
transactionCreateReqVOIn.setId(null); |
|
|
|
transactionCreateReqVOList.add(transactionCreateReqVOIn); |
|
|
|
// 库存事务——出
|
|
|
|
TransactionCreateReqVO transactionCreateReqVOOut = new TransactionCreateReqVO(); |
|
|
|
BeanUtils.copyProperties(detailDO, transactionCreateReqVOOut); |
|
|
|
transactionCreateReqVOOut.setBusinessType(businesstypeDO.getCode()); |
|
|
|
TransactiontypeDO transactiontypeDOOut = jobUtils.selectDocumentFromTransactionType(businesstypeDO.getOutTransactionType()); |
|
|
|
transactionCreateReqVOOut.setInventoryAction(transactiontypeDOOut.getInventoryAction()); |
|
|
|
transactionCreateReqVOOut.setTransactionType(transactiontypeDOOut.getCode()); |
|
|
|
transactionCreateReqVOOut.setRecordNumber(number); |
|
|
|
transactionCreateReqVOOut.setInventoryStatus(toInventoryStatus); |
|
|
|
transactionCreateReqVOOut.setWorker(String.valueOf(userRespDTO.getId())); |
|
|
|
transactionCreateReqVOOut.setBatch(fromBatch); |
|
|
|
transactionCreateReqVOOut.setPackingNumber(fromPackingNumber); |
|
|
|
transactionCreateReqVOOut.setLocationCode(fromLocationCode); |
|
|
|
transactionCreateReqVOOut.setSinglePrice(balanceDO.get(0).getSinglePrice()); |
|
|
|
transactionCreateReqVOOut.setAmount(balanceDO.get(0).getAmount()); |
|
|
|
transactionCreateReqVOOut.setArriveDate(balanceDO.get(0).getArriveDate()); |
|
|
|
transactionCreateReqVOOut.setProduceDate(balanceDO.get(0).getProduceDate()); |
|
|
|
transactionCreateReqVOOut.setExpireDate(balanceDO.get(0).getExpireDate()); |
|
|
|
transactionCreateReqVOOut.setWarehouseCode(mainDO.getFromWarehouseCode()); |
|
|
|
transactionCreateReqVOOut.setId(null); |
|
|
|
transactionCreateReqVOList.add(transactionCreateReqVOOut); |
|
|
|
}); |
|
|
|
} |
|
|
|
issueRecordDetailMapper.insertBatch(subDOList); |
|
|
|
//增加库存事务
|
|
|
|