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<ProductProcessRouteItem> items = processRouteItemDto.getProcessRouteItem();
|
if (CollectionUtils.isEmpty(items)) {
|
return R.ok();
|
}
|
|
Map<Boolean, List<ProductProcessRouteItem>> partitioned = items.stream()
|
.collect(Collectors.partitioningBy(
|
item -> item.getId() != null && item.getId() > 0
|
));
|
|
List<ProductProcessRouteItem> toUpdate = partitioned.get(true);
|
List<ProductProcessRouteItem> 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<ProductWorkOrder> queryWrapper = new QueryWrapper<>();
|
queryWrapper.likeRight("work_order_no", datePrefix)
|
.select("MAX(work_order_no) as maxNo");
|
|
List<Map<String, Object>> 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<ProductWorkOrder> 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<ProductWorkOrder> 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());
|
}
|
}
|
|
}
|