| | |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.ruoyi.approve.service.impl.ApproveProcessServiceImpl; |
| | | import com.ruoyi.approve.vo.ApproveProcessVO; |
| | | import com.ruoyi.basic.mapper.ProductMapper; |
| | | import com.ruoyi.basic.mapper.ProductModelMapper; |
| | | import com.ruoyi.basic.pojo.Product; |
| | | import com.ruoyi.basic.pojo.ProductModel; |
| | | import com.ruoyi.common.enums.StockInQualifiedRecordTypeEnum; |
| | | import com.ruoyi.common.utils.SecurityUtils; |
| | | import com.ruoyi.common.utils.poi.ExcelUtil; |
| | |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.math.BigDecimal; |
| | | import java.time.LocalDate; |
| | | import java.time.format.DateTimeFormatter; |
| | | import java.util.ArrayList; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import java.util.regex.Matcher; |
| | | import java.util.regex.Pattern; |
| | | |
| | | /** |
| | | * <p> |
| | |
| | | private SalesLedgerProductMapper salesLedgerProductMapper; |
| | | @Autowired |
| | | private ApproveProcessServiceImpl approveProcessService; |
| | | @Autowired |
| | | private ProductModelMapper productModelMapper; |
| | | @Autowired |
| | | private ProductMapper productMapper; |
| | | |
| | | @Override |
| | | public IPage<StockInventoryDto> pagestockInventory(Page page, StockInventoryDto stockInventoryDto) { |
| | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public Boolean addstockInventory(StockInventoryDto stockInventoryDto) { |
| | | List<StockInventory> stockInventoryList = stockInventoryMapper.selectList(null); |
| | | //新增入库记录再添加库存 |
| | | StockInRecordDto stockInRecordDto = new StockInRecordDto(); |
| | | stockInRecordDto.setRecordId(stockInventoryDto.getRecordId()); |
| | |
| | | stockInRecordDto.setLockedQuantity(stockInventoryDto.getLockedQuantity()); |
| | | stockInRecordDto.setApproveStatus(0); |
| | | stockInRecordDto.setType("0"); |
| | | if (stockInventoryDto.getBatchNo() == null || stockInventoryDto.getBatchNo().isEmpty()) { |
| | | String batchNo; |
| | | // 获取当前月份(两位) |
| | | LocalDate now = LocalDate.now(); |
| | | String monthFlag = now.format(DateTimeFormatter.ofPattern("MM")); |
| | | |
| | | // 获取当前月份的最大流水号 |
| | | int maxSeq = getCurrentMonthMaxSeq(stockInventoryDto, monthFlag, stockInventoryList); |
| | | |
| | | // 新流水号 = 最大流水号 + 1 |
| | | int newSeq = maxSeq + 1; |
| | | String seqStr = String.format("%03d", newSeq); |
| | | |
| | | // 组装batchNo |
| | | batchNo = stockInventoryDto.getMaterialCode() + stockInventoryDto.getModel() + "P" + monthFlag + seqStr; |
| | | stockInRecordDto.setBatchNo(batchNo); |
| | | } else { |
| | | stockInRecordDto.setBatchNo(stockInventoryDto.getBatchNo()); |
| | | } |
| | | Long id = stockInRecordService.add(stockInRecordDto); |
| | | LoginUser loginUser = SecurityUtils.getLoginUser(); |
| | | if (id != null) { |
| | | try { |
| | | addApproveByPurchase(loginUser, stockInRecordDto,id); |
| | | addApproveByPurchase(loginUser, stockInRecordDto, id); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | throw new RuntimeException(e.getMessage()); |
| | | } |
| | | } |
| | | return true; |
| | | } |
| | | |
| | | public void addApproveByPurchase(LoginUser loginUser, StockInRecordDto stockInRecordDto,Long id) throws Exception { |
| | | /** |
| | | * 查询当前月份已存在的最大流水号 |
| | | */ |
| | | private static int getCurrentMonthMaxSeq(StockInventoryDto dto, String monthFlag, List<StockInventory> existingList) { |
| | | int maxSeq = 0; |
| | | |
| | | String prefix = dto.getMaterialCode() + dto.getModel() + "P" + monthFlag; |
| | | |
| | | // 正则匹配:前缀 + 3位数字 |
| | | Pattern pattern = Pattern.compile(Pattern.quote(prefix) + "(\\d{3})"); |
| | | |
| | | for (StockInventory item : existingList) { |
| | | String batchNo = item.getBatchNo(); |
| | | if (batchNo == null) continue; |
| | | |
| | | Matcher matcher = pattern.matcher(batchNo); |
| | | if (matcher.find()) { |
| | | int seq = Integer.parseInt(matcher.group(1)); |
| | | if (seq > maxSeq) { |
| | | maxSeq = seq; |
| | | } |
| | | } |
| | | } |
| | | |
| | | return maxSeq; |
| | | } |
| | | |
| | | public void addApproveByPurchase(LoginUser loginUser, StockInRecordDto stockInRecordDto, Long id) throws Exception { |
| | | ApproveProcessVO approveProcessVO = new ApproveProcessVO(); |
| | | approveProcessVO.setApproveType(9); |
| | | approveProcessVO.setApproveDeptId(loginUser.getCurrentDeptId()); |
| | |
| | | StockInventory oldStockInventory = stockInventoryMapper.selectOne( |
| | | new QueryWrapper<StockInventory>().lambda() |
| | | .eq(StockInventory::getProductModelId, stockInRecord.getProductModelId()) |
| | | .eq(StockInventory::getBatchNo, stockInRecord.getBatchNo()) |
| | | ); |
| | | |
| | | if (ObjectUtils.isEmpty(oldStockInventory)) { |
| | |
| | | newStockInventory.setRemark(stockInRecord.getRemark()); |
| | | newStockInventory.setLockedQuantity(stockInRecord.getLockedQuantity()); |
| | | newStockInventory.setWarnNum(stockInRecord.getWarnNum()); |
| | | newStockInventory.setBatchNo(stockInRecord.getBatchNo()); |
| | | stockInventoryMapper.insert(newStockInventory); |
| | | } else { |
| | | // 存在则更新 |
| | | LambdaUpdateWrapper<StockInventory> updateWrapper = new LambdaUpdateWrapper<>(); |
| | | updateWrapper |
| | | .eq(StockInventory::getProductModelId, stockInRecord.getProductModelId()) |
| | | .eq(StockInventory::getBatchNo, stockInRecord.getBatchNo()) |
| | | .setSql(stockInRecord.getStockInNum() != null, |
| | | "qualitity = qualitity + " + stockInRecord.getStockInNum()) |
| | | .setSql(true, "version = version + 1") |
| | |
| | | newStockInventory.setLockedQuantity(stockInventoryDto.getLockedQuantity()); |
| | | newStockInventory.setWarnNum(stockInventoryDto.getWarnNum()); |
| | | stockInventoryMapper.insert(newStockInventory); |
| | | }else { |
| | | } else { |
| | | stockInventoryMapper.updateAddStockInventory(stockInventoryDto); |
| | | } |
| | | return true; |
| | |
| | | lockedQty = BigDecimal.ZERO; |
| | | } |
| | | if (stockInventoryDto.getQualitity().compareTo(oldStockInventory.getQualitity().subtract(lockedQty)) > 0) { |
| | | throw new RuntimeException("库存不足无法出库"); |
| | | // 查询产品规格名 |
| | | ProductModel productModel = productModelMapper.selectById(stockInventoryDto.getProductModelId()); |
| | | Product product = productMapper.selectById(productModel.getProductId()); |
| | | throw new RuntimeException(product.getProductName() + "/" + productModel.getModel() + "库存不足无法出库"); |
| | | } |
| | | |
| | | stockInventoryMapper.updateSubtractStockInventory(stockInventoryDto); |