package com.ruoyi.production.controller; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.ruoyi.framework.web.domain.R; import com.ruoyi.production.dto.ProductProcessRouteItemDto; import com.ruoyi.production.mapper.ProductWorkOrderMapper; import com.ruoyi.production.pojo.ProductProcessRouteItem; import com.ruoyi.production.pojo.ProductWorkOrder; import com.ruoyi.production.service.ProductProcessRouteItemService; import com.ruoyi.production.service.ProductWorkOrderService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.*; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @RequestMapping("/productProcessRoute") @RestController @AllArgsConstructor @Api(tags = "生产工艺路线") public class ProductProcessRouteItemController { private ProductProcessRouteItemService productProcessRouteItemService; private ProductWorkOrderService productWorkOrderService; private ProductWorkOrderMapper productWorkOrderMapper; @GetMapping("list") @ApiOperation("根据Id查询工艺项目") public R list(Long orderId) { return R.ok(productProcessRouteItemService.listItem(orderId)); } @PostMapping("/updateRouteItem") @ApiOperation("批量新增修改") @Transactional(rollbackFor = Exception.class) public R addOrUpdate(@RequestBody ProductProcessRouteItemDto processRouteItemDto) { List items = processRouteItemDto.getProcessRouteItem(); if (CollectionUtils.isEmpty(items)) { return R.ok(); } Map> partitioned = items.stream() .collect(Collectors.partitioningBy( item -> item.getId() != null && item.getId() > 0 )); List toUpdate = partitioned.get(true); List toInsert = partitioned.get(false); // 批量处理 boolean result = true; if (!toInsert.isEmpty()) { result = productProcessRouteItemService.saveBatch(toInsert); if (result) { // 生成工单号 String datePrefix = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")); // 查询今日最大工单号 QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.likeRight("work_order_no", datePrefix) .select("MAX(work_order_no) as maxNo"); List> maxNoList = productWorkOrderMapper.selectMaps(queryWrapper); String maxWorkOrderNo = null; if (!maxNoList.isEmpty() && maxNoList.get(0) != null && maxNoList.get(0).get("maxNo") != null) { maxWorkOrderNo = maxNoList.get(0).get("maxNo").toString(); } int startSequence = 1; if (maxWorkOrderNo != null && maxWorkOrderNo.startsWith(datePrefix)) { try { String seqStr = maxWorkOrderNo.substring(datePrefix.length()); startSequence = Integer.parseInt(seqStr) + 1; } catch (NumberFormatException e) { startSequence = 1; } } // 批量生成工单 List workOrders = new ArrayList<>(); for (int i = 0; i < toInsert.size(); i++) { ProductProcessRouteItem item = toInsert.get(i); String workOrderNoStr = String.format("%s%03d", datePrefix, startSequence + i); ProductWorkOrder workOrder = new ProductWorkOrder(); workOrder.setProductProcessRouteItemId(item.getId()); workOrder.setProductOrderId(item.getRouteId()); workOrder.setWorkOrderNo(workOrderNoStr); workOrder.setStatus(1); workOrders.add(workOrder); } result = productWorkOrderService.saveBatch(workOrders); } } if (!toUpdate.isEmpty()) { result = productProcessRouteItemService.updateBatchById(toUpdate) && result; } return R.ok(result); } @DeleteMapping("/deleteRouteItem") @ApiOperation("删除生产工艺路线") @Transactional(rollbackFor = Exception.class) public R deleteRouteItem(@RequestBody ProductProcessRouteItemDto processRouteItemDto) { if (processRouteItemDto == null || processRouteItemDto.getId() == null) { return R.fail("参数错误,ID不能为空"); } try { // 先删除关联的工单数据 LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(ProductWorkOrder::getProductProcessRouteItemId, processRouteItemDto.getId()); productWorkOrderMapper.delete(wrapper); // 删除主表数据 productProcessRouteItemService.removeById(processRouteItemDto.getId()); return R.ok(); } catch (Exception e) { throw new RuntimeException("删除失败:" + e.getMessage()); } } }