|
|
@ -14,8 +14,10 @@ import com.win.module.system.enums.serialNumber.RuleCodeEnum; |
|
|
|
import com.win.module.wms.controller.productputawayRequest.vo.ProductputawayRequestDetailCreateReqVO; |
|
|
|
import com.win.module.wms.controller.productputawayRequest.vo.ProductputawayRequestMainCreateReqVO; |
|
|
|
import com.win.module.wms.controller.productreceiptJob.vo.*; |
|
|
|
import com.win.module.wms.controller.productreceiptRequest.vo.ProductreceiptRequestMainUpdateReqVO; |
|
|
|
import com.win.module.wms.controller.transaction.vo.TransactionCreateReqVO; |
|
|
|
import com.win.module.wms.convert.productreceiptJob.ProductreceiptJobMainConvert; |
|
|
|
import com.win.module.wms.convert.productreceiptRequest.ProductreceiptRequestMainConvert; |
|
|
|
import com.win.module.wms.dal.dataobject.backflushRequest.BackflushRequestDetailbDO; |
|
|
|
import com.win.module.wms.dal.dataobject.balance.BalanceDO; |
|
|
|
import com.win.module.wms.dal.dataobject.businesstype.BusinesstypeDO; |
|
|
@ -30,6 +32,7 @@ import com.win.module.wms.dal.dataobject.productreceiptRecord.BackflushRecordDet |
|
|
|
import com.win.module.wms.dal.dataobject.productreceiptRecord.ProductreceiptRecordDetailDO; |
|
|
|
import com.win.module.wms.dal.dataobject.productreceiptRecord.ProductreceiptRecordMainDO; |
|
|
|
import com.win.module.wms.dal.dataobject.productreceiptRequest.ProductreceiptRequestDetailDO; |
|
|
|
import com.win.module.wms.dal.dataobject.productreceiptRequest.ProductreceiptRequestMainDO; |
|
|
|
import com.win.module.wms.dal.dataobject.transactiontype.TransactiontypeDO; |
|
|
|
import com.win.module.wms.dal.dataobject.workstation.WorkstationDO; |
|
|
|
import com.win.module.wms.dal.mysql.backflushRequest.BackflushRequestDetailbMapper; |
|
|
@ -40,6 +43,7 @@ import com.win.module.wms.dal.mysql.productreceiptJob.ProductreceiptJobMainMappe |
|
|
|
import com.win.module.wms.dal.mysql.productreceiptRecord.BackflushRecordDetailbMapper; |
|
|
|
import com.win.module.wms.dal.mysql.productreceiptRecord.ProductreceiptRecordDetailMapper; |
|
|
|
import com.win.module.wms.dal.mysql.productreceiptRecord.ProductreceiptRecordMainMapper; |
|
|
|
import com.win.module.wms.dal.mysql.productreceiptRequest.ProductreceiptRequestMainMapper; |
|
|
|
import com.win.module.wms.enums.job.JobStatusEnum; |
|
|
|
import com.win.module.wms.enums.job.JobStatusState; |
|
|
|
import com.win.module.wms.enums.request.RequestStatusEnum; |
|
|
@ -51,6 +55,7 @@ import com.win.module.wms.service.itembasic.ItembasicService; |
|
|
|
import com.win.module.wms.service.location.LocationService; |
|
|
|
import com.win.module.wms.service.production.ProductionMainService; |
|
|
|
import com.win.module.wms.service.productputawayRequest.ProductputawayRequestMainService; |
|
|
|
import com.win.module.wms.service.productreceiptRecord.ProductreceiptRecordMainService; |
|
|
|
import com.win.module.wms.service.productreceiptRequest.ProductreceiptRequestDetailService; |
|
|
|
import com.win.module.wms.service.productreceiptRequest.ProductreceiptRequestMainService; |
|
|
|
import com.win.module.wms.service.recordsetting.RecordsettingService; |
|
|
@ -84,35 +89,22 @@ import static com.win.module.wms.enums.ErrorCodeConstants.*; |
|
|
|
public class ProductreceiptJobMainServiceImpl implements ProductreceiptJobMainService { |
|
|
|
|
|
|
|
@Resource |
|
|
|
private BalanceMapper balanceMapper; |
|
|
|
@Resource |
|
|
|
private ProductputawayRequestMainService productputawayRequestMainService; |
|
|
|
private ProductreceiptRecordMainService productreceiptRecordMainService; |
|
|
|
@Resource |
|
|
|
private OfflinesettlementRecordDetailMapper offlinesettlementRecordDetailMapper; |
|
|
|
@Resource |
|
|
|
private OfflinesettlementRecordMainMapper offlinesettlementRecordMainMapper; |
|
|
|
@Resource |
|
|
|
private SupplieritemService supplieritemService; |
|
|
|
private ProductreceiptRequestMainService productreceiptRequestService; |
|
|
|
@Resource |
|
|
|
private ItembasicService itembasicService; |
|
|
|
private ProductreceiptRequestMainMapper productreceiptRequestMainMapper; |
|
|
|
@Resource |
|
|
|
private BusinesstypeService businesstypeService; |
|
|
|
private BalanceMapper balanceMapper; |
|
|
|
@Resource |
|
|
|
private TransactiontypeService transactiontypeService; |
|
|
|
private ProductputawayRequestMainService productputawayRequestMainService; |
|
|
|
|
|
|
|
|
|
|
|
@Resource |
|
|
|
private SwitchService switchService; |
|
|
|
@Resource |
|
|
|
private BackflushRecordDetailbMapper backflushRecordDetailbMapper; |
|
|
|
@Resource |
|
|
|
private BalanceService balanceService; |
|
|
|
@Resource |
|
|
|
private WorkstationService workstationService; |
|
|
|
@Resource |
|
|
|
private BackflushRequestDetailbMapper backflushRequestDetailbMapper; |
|
|
|
@Resource |
|
|
|
private ProductreceiptRequestMainService productreceiptRequestService; |
|
|
|
@Resource |
|
|
|
private ProductreceiptRequestDetailService productreceiptRequestDetailService; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Resource |
|
|
|
private ExpectinService expectinService; |
|
|
|
@Resource |
|
|
@ -316,7 +308,7 @@ public class ProductreceiptJobMainServiceImpl implements ProductreceiptJobMainSe |
|
|
|
productreceiptRecordMainDO.setUpdater(null); |
|
|
|
productreceiptRecordMainDO.setUpdateTime(null); |
|
|
|
// 接口类型
|
|
|
|
productreceiptRecordMainDO.setInterfaceType(recordsettingService.selectRecordsettingExist("IssueRecord").getInterfaceType()); |
|
|
|
productreceiptRecordMainDO.setInterfaceType(recordsettingService.selectRecordsettingExist("ProductPutawayRecord").getInterfaceType()); |
|
|
|
//增加业务类型
|
|
|
|
BusinesstypeDO businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("ProductReceiptRecord"); |
|
|
|
productreceiptRecordMainDO.setOutTransactionType(businesstypeDO.getOutTransactionType()); |
|
|
@ -388,19 +380,26 @@ public class ProductreceiptJobMainServiceImpl implements ProductreceiptJobMainSe |
|
|
|
transactionService.createTransaction(transactionCreateReqVOList); |
|
|
|
//移除预计入
|
|
|
|
expectinService.deleteExpectinByJobNumber(productreceiptJobMainDO.getNumber()); |
|
|
|
// 更新申请状态为已完成
|
|
|
|
QueryWrapper queryWrapper = new QueryWrapper<>(); |
|
|
|
queryWrapper.eq("number", productreceiptJobMainDO.getRequestNumber()); |
|
|
|
ProductreceiptRequestMainDO productreceiptRequestMainDO = productreceiptRequestMainMapper.selectOne(queryWrapper); |
|
|
|
productreceiptRequestMainDO.setStatus(RequestStatusEnum.COMPLETED.getCode()); |
|
|
|
productreceiptRequestMainMapper.updateById(productreceiptRequestMainDO); |
|
|
|
//变更记录
|
|
|
|
trendsApi.createTrends(productreceiptJobMainDO.getId(), "productreceiptJob", "执行了制品收货任务", TrendsTypeEnum.UPDATE); |
|
|
|
// 根据单据开关判断是否创建 回冲记录
|
|
|
|
SwitchDO switchDOBack = switchService.selectSwitchExist("CreateBackflushRecordAfterProductreceiptRecordCreated"); |
|
|
|
if (switchDOBack.getEffectiveSetValue().equals("TRUE")) { |
|
|
|
// 创建 回冲记录(record_backflush_detailb)
|
|
|
|
generateBackflushRecord(productreceiptRecordMainDO, productreceiptRecordDetailDOList); |
|
|
|
productreceiptRecordMainService.generateBackflushRecord(productreceiptRecordMainDO, productreceiptRecordDetailDOList); |
|
|
|
} |
|
|
|
// 根据单据开关判断是否创建 制品上架申请
|
|
|
|
SwitchDO switchDO = switchService.selectSwitchExist("CreateProductputawayRequestAfterProductreceiptRecordCreated"); |
|
|
|
if (switchDO.getEffectiveSetValue().equals("TRUE")) { |
|
|
|
generateProductputawayRequest(productreceiptRecordMainDO, productreceiptRecordDetailDOList); |
|
|
|
} |
|
|
|
|
|
|
|
return number; |
|
|
|
} |
|
|
|
|
|
|
@ -430,95 +429,6 @@ public class ProductreceiptJobMainServiceImpl implements ProductreceiptJobMainSe |
|
|
|
productputawayRequestMainService.createProductputawayRequestMain(productputawayRequestMainCreateReqVO); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 创建 回冲记录 |
|
|
|
* @param productreceiptRecordMainDO |
|
|
|
* @param productreceiptRecordDetailDOList |
|
|
|
*/ |
|
|
|
public void generateBackflushRecord(ProductreceiptRecordMainDO productreceiptRecordMainDO, List<ProductreceiptRecordDetailDO> productreceiptRecordDetailDOList) { |
|
|
|
List<ProductreceiptRequestDetailDO> productreceiptRequestDetailDOList = productreceiptRequestService.getProductreceiptRequestDetailDOByNumber(productreceiptRecordMainDO.getRequestNumber()); |
|
|
|
List<BackflushRecordDetailbDO> backflushRecordDetailbDOList = new ArrayList<>(); |
|
|
|
// 下线结算集合
|
|
|
|
List<BackflushRecordDetailbDO> offlinesettlementRecordList = new ArrayList<>(); |
|
|
|
//库存事务
|
|
|
|
List<TransactionCreateReqVO> transactionCreateReqVOList = new ArrayList<>(); |
|
|
|
for(ProductreceiptRequestDetailDO productreceiptRequestDetailDO: productreceiptRequestDetailDOList){ |
|
|
|
QueryWrapper queryWrapper = new QueryWrapper(); |
|
|
|
queryWrapper.eq("master_id",productreceiptRequestDetailDO.getId().toString()); |
|
|
|
List<BackflushRequestDetailbDO> backflushRequestDetailbDOList = backflushRequestDetailbMapper.selectList(queryWrapper); |
|
|
|
for(BackflushRequestDetailbDO backflushRequestDetailbDO: backflushRequestDetailbDOList ) { |
|
|
|
ProductreceiptRecordDetailDO productreceiptRecordDetailDO = productreceiptRecordDetailDOList.stream().filter(item -> item.getItemCode().equals(productreceiptRequestDetailDO.getItemCode())).collect(Collectors.toList()).get(0); |
|
|
|
BackflushRecordDetailbDO backflushRecordDetailbDO = new BackflushRecordDetailbDO(); |
|
|
|
BeanUtils.copyProperties(backflushRequestDetailbDO,backflushRecordDetailbDO); |
|
|
|
backflushRecordDetailbDO.setMasterId(productreceiptRecordDetailDO.getId()); |
|
|
|
backflushRecordDetailbDO.setNumber(productreceiptRecordDetailDO.getNumber()); |
|
|
|
backflushRecordDetailbDO.setId(null); |
|
|
|
backflushRecordDetailbDO.setCreator(null); |
|
|
|
backflushRecordDetailbDO.setCreateTime(null); |
|
|
|
backflushRecordDetailbDO.setUpdater(null); |
|
|
|
backflushRecordDetailbDO.setUpdateTime(null); |
|
|
|
// from_location_code 工位表中原料库位
|
|
|
|
// 根据 生产线 工位 查询工位信息 并赋值 from_location_code
|
|
|
|
WorkstationDO workstationDO = workstationService.selectWorkstationExist(productreceiptRecordDetailDO.getWorkStationCode(),productreceiptRecordMainDO.getWorkshopCode(),productreceiptRecordDetailDO.getProductionlineCode()); |
|
|
|
backflushRecordDetailbDO.setFromLocationCode(workstationDO.getRawLocationCode()); |
|
|
|
// 根据 from_location_code 查询库存余额
|
|
|
|
// TODO: 如果按批次 查询批次获取库存余额 排序批次 如果第一条批次不够数量 需要扣除第二条余额 库存事务出的动作要存2条
|
|
|
|
List<String> inventoryStatus = new ArrayList<>(); |
|
|
|
inventoryStatus.add("OK"); |
|
|
|
List<BalanceDO> balanceDOList = balanceService.selectByNumber(backflushRequestDetailbDO.getItemCode(),inventoryStatus,workstationDO.getRawLocationCode()); |
|
|
|
backflushRecordDetailbDO.setPackingNumber(balanceDOList.get(0).getPackingNumber()); |
|
|
|
backflushRecordDetailbDO.setBatch(balanceDOList.get(0).getBatch()); |
|
|
|
backflushRecordDetailbDO.setInventoryStatus("OK"); |
|
|
|
backflushRecordDetailbDO.setFromAreaCode(balanceDOList.get(0).getAreaCode()); |
|
|
|
backflushRecordDetailbDO.setFromLocationGroupCode(balanceDOList.get(0).getLocationGroupCode()); |
|
|
|
// 消耗数量 = 成品数量 * bom数量
|
|
|
|
BigDecimal qty = productreceiptRecordDetailDO.getQty().multiply(backflushRecordDetailbDO.getQty()); |
|
|
|
backflushRecordDetailbDO.setQty(qty); |
|
|
|
backflushRecordDetailbDOList.add(backflushRecordDetailbDO); |
|
|
|
//查询库存余额
|
|
|
|
BalanceDO balanceDO = balanceMapper.getBalanceQty(productreceiptRecordDetailDO.getPackingNumber(), productreceiptRecordDetailDO.getItemCode(), productreceiptRecordDetailDO.getBatch(), productreceiptRecordDetailDO.getInventoryStatus(), productreceiptRecordDetailDO.getToLocationCode()); |
|
|
|
if (balanceDO == null) { |
|
|
|
throw exception(BALANCE_NOT_EXISTS); |
|
|
|
} |
|
|
|
//添加库存事务list
|
|
|
|
// 出动作
|
|
|
|
TransactionCreateReqVO transactionCreateReqVO = new TransactionCreateReqVO(); |
|
|
|
BeanUtils.copyProperties(backflushRecordDetailbDO, transactionCreateReqVO); |
|
|
|
BusinesstypeDO businesstypeDO = businesstypeService.selectBusinesstypeExist(productreceiptRecordMainDO.getBusinessType()); |
|
|
|
TransactiontypeDO transactiontypeDO = jobUtils.selectDocumentFromTransactionType(businesstypeDO.getOutTransactionType()); |
|
|
|
transactionCreateReqVO.setWorker(String.valueOf(userApi.getUser(getLoginUserId()).getId())); |
|
|
|
transactionCreateReqVO.setInventoryAction(transactiontypeDO.getInventoryAction()); |
|
|
|
transactionCreateReqVO.setTransactionType(transactiontypeDO.getCode()); |
|
|
|
transactionCreateReqVO.setBusinessType(businesstypeDO.getCode()); |
|
|
|
transactionCreateReqVO.setOwnerCode(""); |
|
|
|
transactionCreateReqVO.setRecordNumber(backflushRecordDetailbDO.getNumber()); |
|
|
|
transactionCreateReqVO.setId(null); |
|
|
|
transactionCreateReqVO.setPackingNumber(backflushRecordDetailbDO.getPackingNumber()); |
|
|
|
transactionCreateReqVO.setBatch(backflushRecordDetailbDO.getBatch()); |
|
|
|
transactionCreateReqVO.setContainerNumber(""); |
|
|
|
transactionCreateReqVO.setSinglePrice(balanceDO.getSinglePrice()); |
|
|
|
transactionCreateReqVO.setAmount(balanceDO.getAmount()); |
|
|
|
transactionCreateReqVO.setArriveDate(balanceDO.getArriveDate()); |
|
|
|
transactionCreateReqVO.setProduceDate(balanceDO.getProduceDate()); |
|
|
|
transactionCreateReqVO.setExpireDate(balanceDO.getExpireDate()); |
|
|
|
transactionCreateReqVO.setWarehouseCode(""); |
|
|
|
transactionCreateReqVO.setLocationCode(backflushRecordDetailbDO.getFromLocationCode()); |
|
|
|
transactionCreateReqVO.setQty(qty); |
|
|
|
transactionCreateReqVOList.add(transactionCreateReqVO); |
|
|
|
// 判断 物品 是否为 下线结算物品 创建 下线结算记录
|
|
|
|
if (itembasicService.isOfflines(backflushRecordDetailbDO.getItemCode())) { |
|
|
|
offlinesettlementRecordList.add(backflushRecordDetailbDO); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
backflushRecordDetailbMapper.insertBatch(backflushRecordDetailbDOList); |
|
|
|
//增加库存事务
|
|
|
|
transactionService.createTransaction(transactionCreateReqVOList); |
|
|
|
// 创建 下线结算记录
|
|
|
|
if (offlinesettlementRecordList != null && offlinesettlementRecordList.size() > 0) { |
|
|
|
generateOfflinesettlementRecord(productreceiptRecordMainDO, offlinesettlementRecordList); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public Long getProductreceiptJobCount() { |
|
|
@ -536,45 +446,4 @@ public class ProductreceiptJobMainServiceImpl implements ProductreceiptJobMainSe |
|
|
|
queryWrapper.eq("`status`", JobStatusEnum.PENDING.getCode()); |
|
|
|
return productreceiptJobMainMapper.selectCount(queryWrapper); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 创建 下线结算 记录 |
|
|
|
* @param productreceiptRecordMainDO |
|
|
|
* @param offlinesettlementRecordList |
|
|
|
*/ |
|
|
|
private void generateOfflinesettlementRecord(ProductreceiptRecordMainDO productreceiptRecordMainDO, List<BackflushRecordDetailbDO> offlinesettlementRecordList) { |
|
|
|
OfflinesettlementRecordMainDO offlinesettlementRecordMainDO = new OfflinesettlementRecordMainDO(); |
|
|
|
BeanUtils.copyProperties(productreceiptRecordMainDO,offlinesettlementRecordMainDO); |
|
|
|
String number = serialNumberApi.generateCode(RuleCodeEnum.OFFLINE_SETTLEMENT_RECORD.getCode()); |
|
|
|
offlinesettlementRecordMainDO.setNumber(number); |
|
|
|
offlinesettlementRecordMainDO.setProductReceiptRecordNumber(productreceiptRecordMainDO.getNumber()); |
|
|
|
offlinesettlementRecordMainDO.setBusinessType(""); |
|
|
|
offlinesettlementRecordMainDO.setInTransactionType(""); |
|
|
|
offlinesettlementRecordMainDO.setOutTransactionType(""); |
|
|
|
offlinesettlementRecordMainDO.setId(null); |
|
|
|
offlinesettlementRecordMainDO.setCreator(null); |
|
|
|
offlinesettlementRecordMainDO.setCreateTime(null); |
|
|
|
offlinesettlementRecordMainDO.setUpdater(null); |
|
|
|
offlinesettlementRecordMainDO.setUpdateTime(null); |
|
|
|
offlinesettlementRecordMainMapper.insert(offlinesettlementRecordMainDO); |
|
|
|
//上线结算记录子 集合
|
|
|
|
List<OfflinesettlementRecordDetailDO> offlinesettlementRecordDetailDOList = new ArrayList<>(); |
|
|
|
for(BackflushRecordDetailbDO backflushRecordDetailbDO : offlinesettlementRecordList ) { |
|
|
|
OfflinesettlementRecordDetailDO offlinesettlementRecordDetailDO = new OfflinesettlementRecordDetailDO(); |
|
|
|
BeanUtils.copyProperties(backflushRecordDetailbDO,offlinesettlementRecordDetailDO); |
|
|
|
offlinesettlementRecordDetailDO.setLocationCode(backflushRecordDetailbDO.getFromLocationCode()); |
|
|
|
offlinesettlementRecordDetailDO.setLocationGroupCode(backflushRecordDetailbDO.getFromLocationGroupCode()); |
|
|
|
offlinesettlementRecordDetailDO.setAreaCode(backflushRecordDetailbDO.getFromAreaCode()); |
|
|
|
offlinesettlementRecordDetailDO.setMasterId(offlinesettlementRecordMainDO.getId()); |
|
|
|
offlinesettlementRecordDetailDO.setId(null); |
|
|
|
offlinesettlementRecordDetailDO.setCreator(null); |
|
|
|
offlinesettlementRecordDetailDO.setCreateTime(null); |
|
|
|
offlinesettlementRecordDetailDO.setUpdater(null); |
|
|
|
offlinesettlementRecordDetailDO.setUpdateTime(null); |
|
|
|
offlinesettlementRecordDetailDOList.add(offlinesettlementRecordDetailDO); |
|
|
|
} |
|
|
|
if(offlinesettlementRecordDetailDOList != null && offlinesettlementRecordDetailDOList.size() > 0) { |
|
|
|
offlinesettlementRecordDetailMapper.insertBatch(offlinesettlementRecordDetailDOList); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|