| | |
| | | import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.ruoyi.common.enums.StockOutQualifiedRecordTypeEnum; |
| | | import com.ruoyi.common.enums.StockInUnQualifiedRecordTypeEnum; |
| | | import com.ruoyi.common.utils.bean.BeanUtils; |
| | | import com.ruoyi.procurementrecord.utils.StockUtils; |
| | | import com.ruoyi.production.dto.ProductOrderDto; |
| | | import com.ruoyi.production.dto.ProductStructureDto; |
| | |
| | | import com.ruoyi.production.pojo.*; |
| | | import com.ruoyi.production.service.ProductOrderService; |
| | | import com.ruoyi.quality.mapper.QualityInspectMapper; |
| | | import com.ruoyi.quality.pojo.QualityInspect; |
| | | import com.ruoyi.stock.mapper.StockInventoryMapper; |
| | | import com.ruoyi.stock.pojo.StockInventory; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | |
| | | import java.time.LocalDate; |
| | | import java.time.format.DateTimeFormatter; |
| | | import java.util.List; |
| | | import java.util.regex.Matcher; |
| | | import java.util.regex.Pattern; |
| | | import java.util.stream.Collectors; |
| | | |
| | | @Service |
| | |
| | | |
| | | @Autowired |
| | | private StockUtils stockUtils; |
| | | |
| | | @Autowired |
| | | private StockInventoryMapper stockInventoryMapper; |
| | | |
| | | @Override |
| | | public IPage<ProductOrderDto> pageProductOrder(Page page, ProductOrderDto productOrder) { |
| | |
| | | } |
| | | |
| | | @Override |
| | | public Boolean addProductOrder(ProductOrder productOrder) { |
| | | public Boolean addProductOrder(ProductOrderDto productOrderDto) { |
| | | String string = generateNextOrderNo(LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"))); |
| | | ProductOrder productOrder = new ProductOrder(); |
| | | BeanUtils.copyProperties(productOrderDto, productOrder); |
| | | productOrder.setNpsNo(string); |
| | | productOrder.setCompleteQuantity(BigDecimal.ZERO); |
| | | List<StockInventory> stockInventoryList = stockInventoryMapper.selectList(null); |
| | | if (productOrder.getBatchNo() == null || productOrder.getBatchNo().isEmpty()) { |
| | | String batchNo; |
| | | // 获取当前月份(两位) |
| | | LocalDate now = LocalDate.now(); |
| | | String monthFlag = now.format(DateTimeFormatter.ofPattern("MM")); |
| | | |
| | | // 获取当前月份的最大流水号 |
| | | int maxSeq = getCurrentMonthMaxSeq(productOrderDto.getMaterialCode(), |
| | | productOrderDto.getProductModelName(), monthFlag, stockInventoryList); |
| | | |
| | | // 新流水号 = 最大流水号 + 1 |
| | | int newSeq = maxSeq + 1; |
| | | String seqStr = String.format("%03d", newSeq); |
| | | |
| | | // 组装batchNo |
| | | batchNo = productOrderDto.getMaterialCode() + productOrderDto.getProductModelName() + "P" + monthFlag + seqStr; |
| | | productOrder.setBatchNo(batchNo); |
| | | } else { |
| | | productOrder.setBatchNo(productOrder.getBatchNo()); |
| | | } |
| | | this.save(productOrder); |
| | | if (ObjectUtils.isNotEmpty(productOrder.getRouteId())) { |
| | | this.bindingRoute(productOrder); |
| | |
| | | return true; |
| | | } |
| | | |
| | | /** |
| | | * 查询当前月份已存在的最大流水号 |
| | | */ |
| | | private static int getCurrentMonthMaxSeq(String materialCode, String model, String monthFlag, List<StockInventory> existingList) { |
| | | int maxSeq = 0; |
| | | String prefix = materialCode + model + "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; |
| | | } |
| | | |
| | | @Override |
| | | public Boolean delete(Long[] ids) { |
| | | //如果已经开始生产,不能删除 |
| | | //查询生产订单下的工单 |
| | | List<ProductWorkOrder> productWorkOrders = productWorkOrderMapper.selectList(Wrappers.<ProductWorkOrder>lambdaQuery().in(ProductWorkOrder::getProductOrderId, ids)); |
| | | if (productWorkOrders.size()>0){ |
| | | if (productWorkOrders.size() > 0) { |
| | | //判断是否有报工数据 |
| | | List<ProductionProductMain> productionProductMains = productionProductMainMapper.selectList(Wrappers.<ProductionProductMain>lambdaQuery() |
| | | .in(ProductionProductMain::getWorkOrderId, productWorkOrders.stream().map(ProductWorkOrder::getId).collect(Collectors.toList()))); |
| | | if (productionProductMains.size()>0){ |
| | | if (productionProductMains.size() > 0) { |
| | | throw new RuntimeException("生产订单已经开始生产,不能删除"); |
| | | } |
| | | //删除工单 |