| | |
| | | import com.ruoyi.common.utils.StringUtils; |
| | | import com.ruoyi.common.utils.bean.BeanUtils; |
| | | import com.ruoyi.common.utils.poi.ExcelUtil; |
| | | |
| | | import java.time.LocalDateTime; |
| | | import com.ruoyi.stock.dto.StockInRecordDto; |
| | | import com.ruoyi.stock.dto.StockInventoryDto; |
| | | import com.ruoyi.stock.dto.StockUninventoryDto; |
| | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public int add(StockInRecordDto stockInRecordDto) { |
| | | String no = OrderUtils.countTodayByCreateTime(stockInRecordMapper, "RK","inbound_batches"); |
| | | String no = OrderUtils.countTodayByCreateTime(stockInRecordMapper, "RK","inbound_batches", stockInRecordDto.getCreateTime() != null ? stockInRecordDto.getCreateTime() : LocalDateTime.now()); |
| | | stockInRecordDto.setInboundBatches(no); |
| | | StockInRecord stockInRecord = new StockInRecord(); |
| | | BeanUtils.copyProperties(stockInRecordDto, stockInRecord); |
| | |
| | | return stockUninventoryMapper.selectOne(eq); |
| | | } |
| | | |
| | | /** |
| | | * 回滚生产退料入库的领料记录退料数量 |
| | | * @param stockInRecord 入库记录 |
| | | */ |
| | | private void rollbackFeedReturnQty(StockInRecord stockInRecord) { |
| | | ProductionOrderPick productionOrderPick = productionOrderPickMapper.selectById(stockInRecord.getRecordId()); |
| | | if (productionOrderPick != null) { |
| | | BigDecimal returnQty = productionOrderPick.getReturnQty(); |
| | | if (returnQty == null) { |
| | | returnQty = BigDecimal.ZERO; |
| | | } |
| | | BigDecimal newReturnQty = returnQty.subtract(stockInRecord.getStockInNum()); |
| | | if (newReturnQty.compareTo(BigDecimal.ZERO) < 0) { |
| | | newReturnQty = BigDecimal.ZERO; |
| | | } |
| | | productionOrderPick.setReturnQty(newReturnQty); |
| | | // 重新计算实际用量 |
| | | BigDecimal actualQty = productionOrderPick.getQuantity().add( |
| | | productionOrderPick.getFeedingQty() != null ? productionOrderPick.getFeedingQty() : BigDecimal.ZERO) |
| | | .subtract(newReturnQty); |
| | | productionOrderPick.setActualQty(actualQty); |
| | | productionOrderPick.setReturned(newReturnQty.compareTo(BigDecimal.ZERO) > 0); |
| | | productionOrderPickMapper.updateById(productionOrderPick); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public int batchDeletePending(List<Long> ids) { |
| | |
| | | } |
| | | if (stockInRecord.getApprovalStatus() != null && !ReviewStatusEnum.PENDING_REVIEW.getCode().equals(stockInRecord.getApprovalStatus())) { |
| | | throw new BaseException("只有待审批状态的记录才能删除,入库批次:" + stockInRecord.getInboundBatches()); |
| | | } |
| | | |
| | | // 如果是生产退料入库,删除时需要回滚领料记录的退料数量 |
| | | if (StockInQualifiedRecordTypeEnum.FEED_RETURN_IN.getCode().equals(stockInRecord.getRecordType())) { |
| | | rollbackFeedReturnQty(stockInRecord); |
| | | } |
| | | } |
| | | return stockInRecordMapper.deleteBatchIds(ids); |
| | |
| | | // 审批驳回时,如果是生产退料入库,需要回滚领料记录的退料数量 |
| | | if (ReviewStatusEnum.REJECTED.getCode().equals(approvalStatus) && |
| | | StockInQualifiedRecordTypeEnum.FEED_RETURN_IN.getCode().equals(stockInRecord.getRecordType())) { |
| | | // 找到对应的领料记录 |
| | | ProductionOrderPick productionOrderPick = productionOrderPickMapper.selectById(stockInRecord.getRecordId()); |
| | | if (productionOrderPick != null) { |
| | | // 回滚退料数量 |
| | | BigDecimal returnQty = productionOrderPick.getReturnQty(); |
| | | if (returnQty == null) { |
| | | returnQty = BigDecimal.ZERO; |
| | | } |
| | | BigDecimal newReturnQty = returnQty.subtract(stockInRecord.getStockInNum()); |
| | | if (newReturnQty.compareTo(BigDecimal.ZERO) < 0) { |
| | | newReturnQty = BigDecimal.ZERO; |
| | | } |
| | | productionOrderPick.setReturnQty(newReturnQty); |
| | | // 重新计算实际用量 |
| | | BigDecimal actualQty = productionOrderPick.getQuantity().add( |
| | | productionOrderPick.getFeedingQty() != null ? productionOrderPick.getFeedingQty() : BigDecimal.ZERO) |
| | | .subtract(newReturnQty); |
| | | productionOrderPick.setActualQty(actualQty); |
| | | productionOrderPick.setReturned(newReturnQty.compareTo(BigDecimal.ZERO) > 0); |
| | | productionOrderPickMapper.updateById(productionOrderPick); |
| | | } |
| | | rollbackFeedReturnQty(stockInRecord); |
| | | } |
| | | |
| | | // 审批通过时,库存增加 |
| | |
| | | setQualitity(stockInRecord.getStockInNum()); |
| | | setBatchNo(stockInRecord.getBatchNo()); |
| | | setRemark(stockInRecord.getRemark()); |
| | | setWarnNum(stockInRecord.getWarnNum()); |
| | | setVersion(1); |
| | | }}); |
| | | } else { |
| | |
| | | } |
| | | return ids.size(); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public int batchReAudit(List<Long> ids) { |
| | | if (CollectionUtils.isEmpty(ids)) { |
| | | throw new BaseException("请选择至少一条数据"); |
| | | } |
| | | |
| | | for (Long id : ids) { |
| | | StockInRecord stockInRecord = stockInRecordMapper.selectById(id); |
| | | if (stockInRecord == null) { |
| | | throw new BaseException("入库记录不存在,无法重新审核!!!"); |
| | | } |
| | | // 只有驳回状态才能重新审核 |
| | | if (!ReviewStatusEnum.REJECTED.getCode().equals(stockInRecord.getApprovalStatus())) { |
| | | throw new BaseException("只有驳回状态的记录才能重新审核,入库批次:" + stockInRecord.getInboundBatches()); |
| | | } |
| | | |
| | | // 如果是生产退料入库,恢复退料数量(因为驳回时已扣减) |
| | | if (StockInQualifiedRecordTypeEnum.FEED_RETURN_IN.getCode().equals(stockInRecord.getRecordType())) { |
| | | ProductionOrderPick productionOrderPick = productionOrderPickMapper.selectById(stockInRecord.getRecordId()); |
| | | if (productionOrderPick != null) { |
| | | BigDecimal returnQty = productionOrderPick.getReturnQty(); |
| | | if (returnQty == null) { |
| | | returnQty = BigDecimal.ZERO; |
| | | } |
| | | // 重新审核时恢复退料数量 |
| | | BigDecimal newReturnQty = returnQty.add(stockInRecord.getStockInNum()); |
| | | productionOrderPick.setReturnQty(newReturnQty); |
| | | // 重新计算实际用量 |
| | | BigDecimal actualQty = productionOrderPick.getQuantity().add( |
| | | productionOrderPick.getFeedingQty() != null ? productionOrderPick.getFeedingQty() : BigDecimal.ZERO) |
| | | .subtract(newReturnQty); |
| | | productionOrderPick.setActualQty(actualQty); |
| | | productionOrderPick.setReturned(newReturnQty.compareTo(BigDecimal.ZERO) > 0); |
| | | productionOrderPickMapper.updateById(productionOrderPick); |
| | | } |
| | | } |
| | | |
| | | // 将状态改为待审核 |
| | | stockInRecord.setApprovalStatus(ReviewStatusEnum.PENDING_REVIEW.getCode()); |
| | | stockInRecordMapper.updateById(stockInRecord); |
| | | } |
| | | |
| | | return ids.size(); |
| | | } |
| | | } |