package com.huaheng.pc.task.taskHeader.service; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.huaheng.common.utils.Wrappers; import com.huaheng.common.constant.QuantityConstant; import com.huaheng.common.exception.service.ServiceException; import com.huaheng.common.utils.DataUtils; import com.huaheng.common.utils.StringUtils; import com.huaheng.common.utils.security.ShiroUtils; import com.huaheng.framework.web.domain.AjaxResult; import com.huaheng.pc.config.container.domain.Container; import com.huaheng.pc.config.container.service.ContainerService; import com.huaheng.pc.config.location.domain.Location; import com.huaheng.pc.config.location.service.LocationService; import com.huaheng.pc.config.material.domain.Material; import com.huaheng.pc.config.material.service.MaterialService; import com.huaheng.pc.config.materialMultiple.domain.MaterialMultiple; import com.huaheng.pc.config.materialMultiple.service.MaterialMultipleServiceImpl; import com.huaheng.pc.config.materialUnit.domain.MaterialUnit; import com.huaheng.pc.config.materialWarnning.domain.MaterialWarning; import com.huaheng.pc.config.materialWarnning.service.IMaterialWarningService; import com.huaheng.pc.config.materialWarnning.service.impl.MaterialWarningServiceImpl; import com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail; import com.huaheng.pc.inventory.inventoryDetail.service.InventoryDetailService; import com.huaheng.pc.inventory.inventoryHeader.domain.InventoryHeader; import com.huaheng.pc.inventory.inventoryHeader.service.InventoryHeaderService; import com.huaheng.pc.inventory.inventoryTransaction.domain.InventoryTransaction; import com.huaheng.pc.inventory.inventoryTransaction.service.InventoryTransactionService; import com.huaheng.pc.receipt.receiptContainerDetail.domain.ReceiptContainerDetail; import com.huaheng.pc.receipt.receiptContainerDetail.service.ReceiptContainerDetailService; import com.huaheng.pc.receipt.receiptContainerHeader.domain.ReceiptContainerHeader; import com.huaheng.pc.receipt.receiptContainerHeader.service.ReceiptContainerHeaderService; import com.huaheng.pc.receipt.receiptDetail.domain.ReceiptDetail; import com.huaheng.pc.receipt.receiptDetail.service.ReceiptDetailService; import com.huaheng.pc.receipt.receiptHeader.domain.ReceiptHeader; import com.huaheng.pc.receipt.receiptHeader.service.ReceiptHeaderService; import com.huaheng.pc.system.config.domain.Config; import com.huaheng.pc.task.taskDetail.domain.TaskDetail; import com.huaheng.pc.task.taskDetail.service.TaskDetailService; import com.huaheng.pc.task.taskHeader.domain.TaskHeader; import com.huaheng.pc.task.taskHeader.mapper.TaskHeaderMapper; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.math.BigDecimal; import java.text.MessageFormat; import java.util.*; /** * 入库任务创建和完成 * @author mahua * @date 2020/7/6 */ @Service public class ReceiptTaskService { @Resource private TaskHeaderService taskHeaderService; @Resource private TaskDetailService taskDetailService; @Resource private InventoryHeaderService inventoryHeaderService; @Resource private InventoryDetailService inventoryDetailService; @Resource private InventoryTransactionService inventoryTransactionService; @Resource private ReceiptHeaderService receiptHeaderService; @Resource private ReceiptDetailService receiptDetailService; @Resource private ReceiptContainerDetailService receiptContainerDetailService; @Resource private ReceiptContainerHeaderService receiptContainerHeaderService; @Resource private TaskHeaderMapper taskHeaderMapper; @Resource private ContainerService containerService; @Resource private LocationService locationService; @Resource private MaterialService materialService; @Resource private MaterialMultipleServiceImpl materialMultipleService; @Resource private IMaterialWarningService materialWarningService; /** * 创建入库任务(整盘入库、补充入库) * * @param ids 入库组盘头表id * @return AjaxResult 创建结果 */ @Transactional(rollbackFor = Exception.class) public AjaxResult createReceiptTask(List<Integer> ids) { List<String> taskIds = new ArrayList<>(); for (Integer id : ids) { ReceiptContainerHeader receiptContainerHeader = receiptContainerHeaderService.getById(id); if (receiptContainerHeader == null) { throw new ServiceException("id:" + id + "的入库组盘不存在!"); } if (!receiptContainerHeader.getWarehouseCode().equals(ShiroUtils.getWarehouseCode())) { throw new ServiceException("id:" + id + "的入库组盘不能在" + ShiroUtils.getWarehouseCode() + "仓库操作"); } Container container = containerService.getContainerByCode(receiptContainerHeader.getContainerCode()); if(container.getStatus().equals(QuantityConstant.STATUS_CONTAINER_LOCK)) { throw new ServiceException("托盘已经锁定,不能生成任务"); } //锁定容器 containerService.updateStatus(receiptContainerHeader.getContainerCode(), QuantityConstant.STATUS_CONTAINER_LOCK, container.getWarehouseCode()); //查询入库组盘明细 LambdaQueryWrapper<ReceiptContainerDetail> containerDetailLambda = Wrappers.lambdaQuery(); containerDetailLambda.eq(ReceiptContainerDetail::getReceiptContainerId, id); List<ReceiptContainerDetail> list = receiptContainerDetailService.list(containerDetailLambda); if (list.isEmpty()) { throw new ServiceException("id:" + id + "的入库组盘,没有组盘明细,请先组盘!"); } if(StringUtils.isNotEmpty(receiptContainerHeader.getFromLocation())) { locationService.updateStatus(receiptContainerHeader.getFromLocation(), QuantityConstant.STATUS_LOCATION_LOCK); } String locationCode = receiptContainerHeader.getToLocation(); if(StringUtils.isNotEmpty(locationCode)) { locationService.updateStatus(locationCode, QuantityConstant.STATUS_LOCATION_LOCK); Location desLocation = locationService.getLocationByCode(locationCode); String loginWarehouse = ShiroUtils.getWarehouseCode(); if(!desLocation.getWarehouseCode().equals(loginWarehouse)) { return AjaxResult.error("库位对应仓库不对"); } if (taskHeaderService.getUncompleteTaskInNear(desLocation) > 0) { return AjaxResult.error("目标库位:" + desLocation + "旁边存在任务,请完成任务以后再分配"); } } if (receiptContainerHeader.getStatus() == QuantityConstant.RECEIPT_CONTAINER_BUILD.intValue()) { if (receiptContainerHeader.getStatus() < QuantityConstant.RECEIPT_CONTAINER_TASK) { receiptContainerHeader.setStatus(QuantityConstant.RECEIPT_CONTAINER_TASK); receiptContainerHeaderService.updateById(receiptContainerHeader); } //添加任务主表 TaskHeader task = new TaskHeader(); task.setAllocationHeadId(receiptContainerHeader.getId()); task.setInternalTaskType(QuantityConstant.TASK_INTENERTYPE_RECEIPT); task.setWarehouseCode(receiptContainerHeader.getWarehouseCode()); task.setCompanyCode(receiptContainerHeader.getCompanyCode()); task.setStatus(QuantityConstant.TASK_STATUS_BUILD); task.setTaskType(receiptContainerHeader.getTaskType()); task.setFromLocation(receiptContainerHeader.getFromLocation()); if(receiptContainerHeader.getToLocation() != null){ task.setToLocation(receiptContainerHeader.getToLocation()); } Location location = locationService.getLocationByCode( task.getToLocation(), ShiroUtils.getWarehouseCode()); if(location != null) { task.setZoneCode(location.getZoneCode()); } task.setContainerCode(receiptContainerHeader.getContainerCode()); task.setRecvDock(receiptContainerHeader.getRecvDock()); task.setPort(receiptContainerHeader.getPort()); if (taskHeaderService.save(task)) { //添加任务明细表 for (ReceiptContainerDetail item : list) { TaskDetail taskDetail = new TaskDetail(); taskDetail.setTaskId(task.getId()); taskDetail.setTaskType(task.getTaskType()); taskDetail.setInternalTaskType(QuantityConstant.TASK_INTENERTYPE_RECEIPT); taskDetail.setWarehouseCode(task.getWarehouseCode()); taskDetail.setAllocationId(item.getId()); taskDetail.setCompanyCode(task.getCompanyCode()); taskDetail.setMaterialCode(item.getMaterialCode()); taskDetail.setMaterialName(item.getMaterialName()); taskDetail.setMaterialSpec(item.getMaterialSpec()); taskDetail.setMaterialUnit(item.getMaterialUnit()); taskDetail.setInventorySts(item.getInventorySts()); taskDetail.setBillCode(item.getReceiptCode()); taskDetail.setBillDetailId(item.getReceiptDetailId()); taskDetail.setQty(item.getQty()); taskDetail.setContainerCode(task.getContainerCode()); taskDetail.setFromLocation(task.getFromLocation()); if(task.getToLocation() != null) { taskDetail.setToLocation(task.getToLocation()); } taskDetail.setBatch(item.getBatch()); taskDetail.setProjectNo(item.getProjectNo()); if (!taskDetailService.save(taskDetail)) { throw new ServiceException("生成任务明细失败"); } //更新入库组盘明细状态 item.setStatus(QuantityConstant.RECEIPT_CONTAINER_TASK); if (!receiptContainerDetailService.updateById(item)) { throw new ServiceException("更新入库组盘明细状态出错"); } /* 修改明细状态为上架*/ ReceiptDetail receiptDetail = receiptDetailService.getById(item.getReceiptDetailId()); receiptDetail.setProcessStamp(String.valueOf(QuantityConstant.RECEIPT_HEADER_SHELF)); if (!receiptDetailService.updateById(receiptDetail)) { throw new ServiceException("更新入库单详情失败"); } //更新头表状态 receiptDetailService.updateReceiptHeaderLastStatus(receiptDetail.getReceiptId()); } String taskId = String.valueOf(task.getId()); taskIds.add(taskId); } else { throw new ServiceException("任务生成失败"); } } } return AjaxResult.success("生成上架任务成功").setData(taskIds); } /** * 自动生成容器编码 * @return 容器编码 */ @Transactional public String createContainer(){ String code = MessageFormat.format("{0}{1}", "LS", String.format("%d", Calendar.getInstance().getTimeInMillis())); Container container = new Container(); container.setCode(code); container.setWarehouseCode(ShiroUtils.getWarehouseCode()); container.setCompanyCode(ShiroUtils.getCompanyCodeList().get(0)); container.setContainerType("LS"); container.setCreatedBy(ShiroUtils.getLoginName()); container.setLastUpdated(new Date()); container.setLastUpdatedBy(ShiroUtils.getLoginName()); container.setEnable(true); container.setStatus(QuantityConstant.STATUS_CONTAINER_EMPTY); if (!containerService.save(container)){ throw new ServiceException("新增容器失败"); } return code; } /** * 完成入库任务 * @param task 任务 * @return AjaxResult 完成入库任务结果 */ @Transactional(rollbackFor = Exception.class) public AjaxResult completeReceiptTask(TaskHeader task) { /* 判断任务状态*/ if (task.getStatus().equals(QuantityConstant.TASK_STATUS_COMPLETED)) { return AjaxResult.error("任务已完成"); } if (StringUtils.isEmpty(task.getToLocation())) { throw new ServiceException("任务" + task.getId() + "没有目的库位,执行中止"); } String warehouseCode = task.getWarehouseCode(); BigDecimal totalQty = BigDecimal.ZERO; List<TaskDetail> taskDetailList = taskDetailService.findByTaskId(task.getId()); if (taskDetailList.isEmpty()) { throw new ServiceException("任务明细为空"); } InventoryHeader inventoryHeader = null; if(task.getTaskType().equals(QuantityConstant.TASK_TYPE_SUPPLEMENTRECEIPT)) { LambdaQueryWrapper<InventoryHeader> lambdaQueryWrapper = Wrappers.lambdaQuery(); lambdaQueryWrapper.eq(InventoryHeader::getWarehouseCode, warehouseCode) .eq(InventoryHeader::getLocationCode, task.getFromLocation()) .eq(InventoryHeader::getContainerCode, task.getContainerCode()); inventoryHeader= inventoryHeaderService.getOne(lambdaQueryWrapper); if(inventoryHeader != null) { String locationCode = inventoryHeader.getLocationCode(); Location location = locationService.getLocationByCode(locationCode, warehouseCode); location.setContainerCode(""); location.setStatus(QuantityConstant.STATUS_LOCATION_EMPTY); locationService.updateById(location); inventoryHeader.setLocationCode(task.getToLocation()); inventoryHeaderService.updateById(inventoryHeader); LambdaQueryWrapper<InventoryDetail> lambdaQueryWrapper2 = Wrappers.lambdaQuery(); lambdaQueryWrapper2.eq(InventoryDetail::getWarehouseCode, warehouseCode) .eq(InventoryDetail::getInventoryHeaderId, inventoryHeader.getId()); List<InventoryDetail> inventoryDetails = inventoryDetailService.list(lambdaQueryWrapper2); if(inventoryDetails != null && inventoryDetails.size() > 0) { for(InventoryDetail inventoryDetail : inventoryDetails) { inventoryDetail.setLocationCode(task.getToLocation()); inventoryDetail.setZoneCode(location.getZoneCode()); inventoryDetailService.updateById(inventoryDetail); } } } } if (StringUtils.isNull(inventoryHeader)) { LambdaQueryWrapper<InventoryHeader> inventoryHeaderLambdaQueryWrapper = Wrappers.lambdaQuery(); inventoryHeaderLambdaQueryWrapper.eq(InventoryHeader::getWarehouseCode, warehouseCode) .eq(InventoryHeader::getLocationCode, task.getToLocation()) .eq(InventoryHeader::getContainerCode, task.getContainerCode()); inventoryHeader = inventoryHeaderService.getOne(inventoryHeaderLambdaQueryWrapper); } /* 如果库存 头明细不存在则新增库存头表记录*/ if (StringUtils.isNull(inventoryHeader)) { inventoryHeader = new InventoryHeader(); inventoryHeader.setWarehouseCode(warehouseCode); inventoryHeader.setLocationCode(task.getToLocation()); Location location = locationService.getLocationByCode(task.getToLocation(), warehouseCode); inventoryHeader.setZoneCode(location.getZoneCode()); inventoryHeader.setTotalWeight(task.getWeight()); inventoryHeader.setContainerCode(task.getContainerCode()); inventoryHeader.setContainerStatus(QuantityConstant.STATUS_CONTAINER_SOME); inventoryHeader.setTotalQty(new BigDecimal(0)); inventoryHeader.setTotalLines(0); inventoryHeader.setLocking(1); inventoryHeader.setEnable(1); inventoryHeader.setCompanyCode(task.getCompanyCode()); inventoryHeader.setCreated(new Date()); inventoryHeader.setCreatedBy(""); inventoryHeader.setLastUpdated(new Date()); inventoryHeader.setLastUpdatedBy(""); if (!inventoryHeaderService.save(inventoryHeader)) { throw new ServiceException("添加库存单失败"); } } /* 遍历任务明细,修改关联的入库组盘、入库单状态、添加库存*/ for (TaskDetail taskDetail : taskDetailList) { if (taskDetail.getStatus() < QuantityConstant.TASK_STATUS_COMPLETED) { totalQty = totalQty.add(taskDetail.getQty()); /*查询入库单明细*/ ReceiptDetail receiptDetail = receiptDetailService.getById(taskDetail.getBillDetailId()); if (StringUtils.isNotNull(receiptDetail)) { totalQty = this.addInventoryDetail(taskDetail, receiptDetail, inventoryHeader); //修改组盘表状态为完成 ReceiptContainerDetail receiptContainerDetail = new ReceiptContainerDetail(); receiptContainerDetail.setStatus(QuantityConstant.RECEIPT_CONTAINER_FINISHED); receiptContainerDetail.setLastUpdatedBy(receiptDetail.getCreatedBy()); LambdaUpdateWrapper<ReceiptContainerDetail> receiptContainerDetailLambdaUpdateWrapper = Wrappers.lambdaUpdate(); receiptContainerDetailLambdaUpdateWrapper.eq(ReceiptContainerDetail::getId, taskDetail.getAllocationId()); if (!receiptContainerDetailService.update(receiptContainerDetail, receiptContainerDetailLambdaUpdateWrapper)){ throw new ServiceException("更新组盘状态失败"); } } else { throw new ServiceException("未找到id:" + taskDetail.getBillDetailId() + "入库单明细"); } receiptDetail.setProcessStamp(String.valueOf(QuantityConstant.RECEIPT_HEADER_POSTING)); receiptDetailService.updateById(receiptDetail); receiptDetailService.updateReceiptHeaderLastStatus(receiptDetail.getReceiptId()); materialWarningService.materialWarning(taskDetail.getMaterialCode(), taskDetail.getCompanyCode()); taskDetail.setStatus(QuantityConstant.TASK_STATUS_COMPLETED); taskDetailService.updateById(taskDetail); } } if (StringUtils.isNull(inventoryHeader)) { throw new ServiceException("库存添加失败"); } //修改库位状态和对应的容器 Location location = new Location(); location.setContainerCode(task.getContainerCode()); location.setWarehouseCode(warehouseCode); location.setStatus(QuantityConstant.STATUS_LOCATION_EMPTY); LambdaUpdateWrapper<Location> locationLambdaUpdateWrapper = Wrappers.lambdaUpdate(); locationLambdaUpdateWrapper.eq(Location::getCode, task.getToLocation()); locationLambdaUpdateWrapper.eq(Location::getWarehouseCode, warehouseCode); if (!locationService.update(location, locationLambdaUpdateWrapper)){ throw new ServiceException("更新库位失败"); } //修改任务主表状态,因为立库任务表单头只对应一个货箱,表单详情的任务会同时完成 task.setStatus(QuantityConstant.TASK_STATUS_COMPLETED); LambdaUpdateWrapper<TaskHeader> taskHeaderLambdaUpdateWrapper = Wrappers.lambdaUpdate(); taskHeaderLambdaUpdateWrapper.eq(TaskHeader::getId, task.getId()); if (!taskHeaderService.update(task, taskHeaderLambdaUpdateWrapper)){ throw new ServiceException("更新任务主表失败"); } //修改容器状态和对应的库位 Container container = new Container(); container.setLocationCode(task.getToLocation()); container.setStatus(QuantityConstant.STATUS_CONTAINER_SOME); LambdaUpdateWrapper<Container> containerLambdaUpdateWrapper = Wrappers.lambdaUpdate(); containerLambdaUpdateWrapper.eq(Container::getCode, task.getContainerCode()); if (!containerService.update(container, containerLambdaUpdateWrapper)) { throw new ServiceException("更新容器失败"); } //修改入库组盘头表状态 ReceiptContainerHeader receiptContainerHeader = new ReceiptContainerHeader(); receiptContainerHeader.setId(task.getAllocationHeadId()); receiptContainerHeader.setLastUpdatedBy(task.getCreatedBy()); receiptContainerHeader.setStatus(QuantityConstant.RECEIPT_CONTAINER_FINISHED); if (!receiptContainerHeaderService.updateById(receiptContainerHeader)) { throw new ServiceException("更新入库组盘头表状态失败"); } return AjaxResult.success(); } /** * 添加库存明细与库存交易记录 * @param taskDetail 任务明细 * @param receiptDetail 入库单明细 * @param inventoryHeader 库存头表 * @return 任务数量 */ private BigDecimal addInventoryDetail(TaskDetail taskDetail, ReceiptDetail receiptDetail, InventoryHeader inventoryHeader) { String warehouseCode = inventoryHeader.getWarehouseCode(); /*该入库明细是否已存在库存明细记录,已存在更新数量、不存在新增记录*/ LambdaQueryWrapper<InventoryDetail> inventory = Wrappers.lambdaQuery(); inventory.eq(InventoryDetail::getWarehouseCode, warehouseCode) .eq(InventoryDetail::getLocationCode, inventoryHeader.getLocationCode()) .eq(InventoryDetail::getMaterialCode, taskDetail.getMaterialCode()) .eq(InventoryDetail::getContainerCode, inventoryHeader.getContainerCode()) .eq(InventoryDetail::getCompanyCode, taskDetail.getCompanyCode()) .eq(InventoryDetail::getBatch,taskDetail.getBatch()) .eq(InventoryDetail::getReceiptDetailId, taskDetail.getBillDetailId()); InventoryDetail inventoryDetail = inventoryDetailService.getOne(inventory); Material material = materialService.getMaterialByCode(receiptDetail.getMaterialCode(), warehouseCode); /*单位换算*/ BigDecimal receiptQty = taskDetail.getQty(); if (StringUtils.isNotEmpty(receiptDetail.getMaterialUnit()) && StringUtils.isNotEmpty(material.getUnit()) && !receiptDetail.getMaterialUnit().equals(material.getUnit())) { LambdaQueryWrapper<MaterialMultiple> queryWrapper = Wrappers.lambdaQuery(); queryWrapper.eq(MaterialMultiple::getMaterialCode, receiptDetail.getMaterialCode()) .eq(MaterialMultiple::getUnitId1, receiptDetail.getMaterialUnit()) .eq(MaterialMultiple::getUnitId2, material.getUnit()); MaterialMultiple materialMultiple = materialMultipleService.getOne(queryWrapper); if (StringUtils.isNull(materialMultiple)) { throw new ServiceException("入库单单位与物料绑定主单位不一致且单位换算不存在"); } else { receiptQty = receiptQty.multiply(materialMultiple.getMultiple()); } } if (StringUtils.isNotNull(inventoryDetail)) { inventoryDetail.setQty(inventoryDetail.getQty().add(taskDetail.getQty())); } else { ReceiptHeader receiptHeader = receiptHeaderService.getById(receiptDetail.getReceiptId()); inventoryDetail = new InventoryDetail(); inventoryDetail.setInventoryHeaderId(inventoryHeader.getId()); inventoryDetail.setWarehouseCode(taskDetail.getWarehouseCode()); inventoryDetail.setZoneCode(inventoryHeader.getZoneCode()); inventoryDetail.setCompanyCode(taskDetail.getCompanyCode()); inventoryDetail.setLocationCode(taskDetail.getToLocation()); inventoryDetail.setContainerCode(taskDetail.getContainerCode()); inventoryDetail.setMaterialCode(taskDetail.getMaterialCode()); inventoryDetail.setMaterialName(taskDetail.getMaterialName()); inventoryDetail.setMaterialSpec(taskDetail.getMaterialSpec()); inventoryDetail.setMaterialUnit(material.getUnit()); inventoryDetail.setQty(receiptQty); inventoryDetail.setTaskQty(new BigDecimal(0)); inventoryDetail.setInventorySts(taskDetail.getInventorySts()); inventoryDetail.setSupplierCode(receiptDetail.getSupplierCode()); inventoryDetail.setReferCode(receiptDetail.getReferCode()); inventoryDetail.setReferDetailId(receiptDetail.getReferLineNum()); inventoryDetail.setBatch(receiptDetail.getBatch()); inventoryDetail.setLot(receiptDetail.getLot()); inventoryDetail.setProjectNo(receiptDetail.getProjectNo());; inventoryDetail.setManufactureDate(receiptDetail.getManufactureDate()); inventoryDetail.setExpirationDate(receiptDetail.getExpirationDate()); inventoryDetail.setAgingDate(receiptDetail.getAgingDate()); inventoryDetail.setAttribute1(receiptDetail.getAttribute1()); inventoryDetail.setAttribute2(receiptDetail.getAttribute2()); inventoryDetail.setAttribute3(receiptDetail.getAttribute3()); inventoryDetail.setReceiptCode(receiptHeader.getCode()); inventoryDetail.setReceiptDetailId(receiptDetail.getId()); inventoryHeader.setTotalLines(inventoryHeader.getTotalLines()+1); } if (!inventoryDetailService.saveOrUpdate(inventoryDetail)) { throw new ServiceException("保存库存明细失败"); } inventoryHeader.setTotalQty(inventoryHeader.getTotalQty().add(taskDetail.getQty())); inventoryHeaderService.updateById(inventoryHeader); //记录库存交易记录 InventoryTransaction inventoryTransaction = new InventoryTransaction(); inventoryTransaction.setTransactionType(QuantityConstant.INVENTORY_TRANSACTION_RECEIPT); inventoryTransaction.setWarehouseCode(taskDetail.getWarehouseCode()); inventoryTransaction.setCompanyCode(taskDetail.getCompanyCode()); inventoryTransaction.setLocationCode(inventoryHeader.getLocationCode()); inventoryTransaction.setContainerCode(inventoryHeader.getContainerCode()); inventoryTransaction.setMaterialCode(taskDetail.getMaterialCode()); inventoryTransaction.setMaterialName(taskDetail.getMaterialName()); inventoryTransaction.setMaterialSpec(taskDetail.getMaterialSpec()); inventoryTransaction.setMaterialUnit(material.getUnit()); inventoryTransaction.setBillCode(taskDetail.getBillCode()); inventoryTransaction.setBillDetailId(taskDetail.getBillDetailId()); inventoryTransaction.setBatch(receiptDetail.getBatch()); inventoryTransaction.setLot(receiptDetail.getLot()); inventoryTransaction.setInventorySts(receiptDetail.getInventorySts()); inventoryTransaction.setTaskQty(receiptQty); if (!inventoryTransactionService.save(inventoryTransaction)) { throw new ServiceException("新增库存记录失败"); } return receiptQty; } }