src/main/java/com/ruoyi/common/config/MybatisHandler.java
@@ -18,7 +18,6 @@ tenantId = SecurityUtils.getLoginUser().getTenantId(); } catch (Exception ignored) { } System.out.println("æ§è¡æå ¥å¡«å ..."); this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now()); this.strictInsertFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now()); this.strictInsertFill(metaObject, "createUser", Integer.class, userId); src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java
@@ -514,9 +514,9 @@ List<ProductOrderDto> productOrderDtoList = new ArrayList<>(); productOrderList.forEach(productOrder -> { ProductOrderDto productOrderDto = productOrderMapper.productMainByOrderId(productOrder); if (productOrderDto != null && productOrderDto.getPlanQuantity() != null && productOrderDto.getQuantity() != null) { productOrderDto.setCompletionStatus(BigDecimal.valueOf(productOrderDto.getPlanQuantity()-productOrderDto.getQuantity()).divide(BigDecimal.valueOf(productOrderDto.getPlanQuantity()), 2, RoundingMode.HALF_UP)); } // if (productOrderDto != null && productOrderDto.getPlanQuantity() != null && productOrderDto.getQuantity() != null) { // productOrderDto.setCompletionStatus((productOrderDto.getPlanQuantity().subtract(productOrderDto.getQuantity())).divide(productOrderDto.getPlanQuantity(), 2, RoundingMode.HALF_UP)); // } productOrderDtoList.add(productOrderDto); }); productionProgressDto.setCompletedOrderDetails(productOrderDtoList); @@ -525,7 +525,7 @@ // 2. åå§åæ±æ»æ°æ® int totalCount = productOrderDtoIPage.getRecords().size(); int completedCount = (int) productOrderDtoIPage.getRecords().stream().map(productOrderDto -> productOrderMapper.productMainByOrderId(productOrderDto)).filter(productOrderDto1 -> productOrderDto1.getQuantity() != null && productOrderDto1.getQuantity() == 0).count(); int completedCount = (int) productOrderDtoIPage.getRecords().stream().map(productOrderDto -> productOrderMapper.productMainByOrderId(productOrderDto)).filter(productOrderDto1 -> productOrderDto1.getQuantity() != null && productOrderDto1.getQuantity().compareTo(BigDecimal.ZERO) == 0).count(); // 6. èµå¼æ±æ»æ°æ® productionProgressDto.setTotalOrderCount(totalCount); src/main/java/com/ruoyi/production/controller/ProductOrderController.java
@@ -1,18 +1,26 @@ package com.ruoyi.production.controller; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.basic.pojo.Customer; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.framework.aspectj.lang.annotation.Log; import com.ruoyi.framework.aspectj.lang.enums.BusinessType; import com.ruoyi.framework.web.domain.R; import com.ruoyi.production.dto.ProductOrderDto; import com.ruoyi.production.pojo.ProcessRoute; import com.ruoyi.production.pojo.ProductOrder; import com.ruoyi.production.service.ProductOrderService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; import java.util.List; @RequestMapping("productOrder") @RestController @Api(tags = "ç产订å") public class ProductOrderController { @Autowired @@ -25,6 +33,28 @@ return R.ok(productOrderService.pageProductOrder(page, productOrder)); } @ApiOperation("ç»å®å·¥èºè·¯çº¿") @PostMapping("/bindingRoute") public R bindingRoute(@RequestBody ProductOrder productOrder) { return R.ok(productOrderService.bindingRoute(productOrder)); } @ApiOperation("æ¥è¯¢è§æ ¼åå·å¯¹åºçå·¥èºè·¯çº¿") @GetMapping("/listProcessRoute") public R listProcessRoute(Long productModelId) { return R.ok(productOrderService.listProcessRoute(productModelId)); } /** * 导åºç产订å */ @Log(title = "ç产订å", businessType = BusinessType.EXPORT) @PostMapping("/export") public void export(HttpServletResponse response, ProductOrderDto productOrderDto) { List<ProductOrderDto> list; list = productOrderService.pageProductOrder(new Page<>(1, -1), productOrderDto).getRecords(); ExcelUtil<ProductOrderDto> util = new ExcelUtil<ProductOrderDto>(ProductOrderDto.class); util.exportExcel(response, list, "çäº§è®¢åæ°æ®"); } } src/main/java/com/ruoyi/production/controller/ProductProcessRouteController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,18 @@ package com.ruoyi.production.controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * <p> * å端æ§å¶å¨ * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-01-15 02:51:09 */ @RestController @RequestMapping("/productProcessRoute") public class ProductProcessRouteController { } src/main/java/com/ruoyi/production/controller/ProductProcessRouteItemController.java
@@ -2,11 +2,13 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.ruoyi.framework.web.domain.R; import com.ruoyi.production.dto.ProductProcessRouteItemDto; import com.ruoyi.production.mapper.*; import com.ruoyi.production.pojo.*; import com.ruoyi.production.service.ProductProcessRouteItemService; import com.ruoyi.production.service.ProductProcessRouteService; import com.ruoyi.production.service.ProductWorkOrderService; import com.ruoyi.quality.mapper.QualityInspectMapper; import com.ruoyi.quality.pojo.QualityInspect; @@ -34,175 +36,43 @@ @Api(tags = "ç产工èºè·¯çº¿") public class ProductProcessRouteItemController { private final ProductOrderMapper productOrderMapper; private ProductProcessRouteItemService productProcessRouteItemService; private ProductWorkOrderService productWorkOrderService; private ProductWorkOrderMapper productWorkOrderMapper; private SalesLedgerProductMapper salesLedgerProductMapper; private ProductionProductMainMapper productionProductMainMapper; private ProductionProductInputMapper productionProductInputMapper; private ProductionProductOutputMapper productionProductOutputMapper; private QualityInspectMapper qualityInspectMapper; private SalesLedgerProductionAccountingMapper salesLedgerProductionAccountingMapper; private ProductProcessRouteService productProcessRouteService; @GetMapping("list") @ApiOperation("æ ¹æ®Idæ¥è¯¢å·¥èºé¡¹ç®") @ApiOperation("æ ¹æ®Idæ¥è¯¢å·¥èºè·¯çº¿å表") public R list(Long orderId) { return R.ok(productProcessRouteItemService.listItem(orderId)); } @GetMapping("listMain") @ApiOperation("æ ¹æ®Idæ¥è¯¢å·¥èºè·¯çº¿ä¸»è¡¨") public R listMain(Long orderId) { return R.ok(productProcessRouteService.listMain(orderId)); } @PostMapping("/addRouteItem") @ApiOperation("æ°å¢ç产订åçå·¥èºè·¯çº¿è¯¦æ ") public R addRouteItem(@RequestBody ProductProcessRouteItem productProcessRouteItem) { return productProcessRouteItemService.addRouteItem(productProcessRouteItem); } @PostMapping("/updateRouteItem") @ApiOperation("æ¹éæ°å¢ä¿®æ¹") @Transactional(rollbackFor = Exception.class) public R addOrUpdate(@RequestBody ProductProcessRouteItemDto processRouteItemDto) { ProductOrder productOrder = productOrderMapper.selectById(processRouteItemDto.getRouteId()); if (productOrder == null) { return R.fail("æªæ¾å°ID为[" + processRouteItemDto.getRouteId() + "]ç产å订å"); } SalesLedgerProduct salesLedgerProduct = salesLedgerProductMapper.selectOne(new LambdaQueryWrapper<SalesLedgerProduct>() .eq(SalesLedgerProduct::getSalesLedgerId, productOrder.getSalesLedgerId())); if (salesLedgerProduct == null) { return R.fail("æªæ¾å°éå®å°è´¦ID为[" + productOrder.getSalesLedgerId() + "]çå°è´¦äº§å"); @ApiOperation("ä¿®æ¹ç产订åçå·¥èºè·¯çº¿è¯¦æ ") public R updateRouteItem(@RequestBody ProductProcessRouteItem productProcessRouteItem) { return R.ok(productProcessRouteItemService.updateById(productProcessRouteItem)); } 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.setPlanQuantity(salesLedgerProduct.getQuantity()); workOrder.setStatus(1); workOrders.add(workOrder); } result = productWorkOrderService.saveBatch(workOrders); } } if (!toUpdate.isEmpty()) { result = productProcessRouteItemService.updateBatchById(toUpdate) && result; } return R.ok(result); } @DeleteMapping("/deleteRouteItem") @DeleteMapping("/deleteRouteItem/{id}") @ApiOperation("å é¤ç产工èºè·¯çº¿") @Transactional(rollbackFor = Exception.class) public R deleteRouteItem(@RequestBody ProductProcessRouteItemDto processRouteItemDto) { if (processRouteItemDto == null || processRouteItemDto.getId() == null) { return R.fail("å é¤å¤±è´¥ï¼å·¥èºè·¯çº¿é¡¹IDä¸è½ä¸ºç©º"); } Long routeItemId = processRouteItemDto.getId(); try { // æ¥è¯¢å·¥å ProductWorkOrder productWorkOrder = productWorkOrderMapper.selectOne( new LambdaQueryWrapper<ProductWorkOrder>() .eq(ProductWorkOrder::getProductProcessRouteItemId, routeItemId) .last("LIMIT 1") ); if (productWorkOrder == null) { return R.fail("å é¤å¤±è´¥ï¼æªæ¾å°å ³èçç产工å"); } Long workOrderId = productWorkOrder.getId(); Long productOrderId = productWorkOrder.getProductOrderId(); // æ¥è¯¢ç产主表 List<ProductionProductMain> productionProductMains = productionProductMainMapper.selectList( new LambdaQueryWrapper<ProductionProductMain>() .eq(ProductionProductMain::getWorkOrderId, workOrderId) ); if (!productionProductMains.isEmpty()) { // æ¹éå é¤å表 for (ProductionProductMain main : productionProductMains) { Long mainId = main.getId(); // å é¤æå ¥ productionProductInputMapper.delete(new LambdaQueryWrapper<ProductionProductInput>() .eq(ProductionProductInput::getProductMainId, mainId)); // å é¤äº§åº productionProductOutputMapper.delete(new LambdaQueryWrapper<ProductionProductOutput>() .eq(ProductionProductOutput::getProductMainId, mainId)); // å é¤è´¨æ£ qualityInspectMapper.delete(new LambdaQueryWrapper<QualityInspect>() .eq(QualityInspect::getProductMainId, mainId)); } public R deleteRouteItem(@PathVariable("id") Long id) { return productProcessRouteItemService.deleteRouteItem(id); } // å 餿¥å·¥ï¼çäº§ä¸»è¡¨ï¼ productionProductMainMapper.delete(new LambdaQueryWrapper<ProductionProductMain>() .eq(ProductionProductMain::getWorkOrderId, workOrderId)); // æ¥è¯¢è®¢å + å 餿 ¸ç® ProductOrder productOrder = productOrderMapper.selectById(productOrderId); if (productOrder != null && productOrder.getSalesLedgerId() != null) { salesLedgerProductionAccountingMapper.delete(new LambdaQueryWrapper<SalesLedgerProductionAccounting>() .eq(SalesLedgerProductionAccounting::getSalesLedgerId, productOrder.getSalesLedgerId())); } // å é¤å ³èå·¥å productWorkOrderMapper.delete(new LambdaQueryWrapper<ProductWorkOrder>() .eq(ProductWorkOrder::getProductProcessRouteItemId, routeItemId)); // å é¤ä¸»è¡¨æ°æ® boolean removeFlag = productProcessRouteItemService.removeById(routeItemId); if (!removeFlag) { return R.fail("å é¤å¤±è´¥ï¼å·¥èºè·¯çº¿é¡¹ä¸»è¡¨æ°æ®ä¸åå¨"); } return R.ok(); } catch (Exception e) { return R.fail("å é¤ç产工èºè·¯çº¿å¤±è´¥ï¼" + e.getMessage()); } @PostMapping ("/sortRouteItem") @ApiOperation("æåº") public R sortRouteItem(@RequestBody ProductProcessRouteItem productProcessRouteItem) { return R.ok(productProcessRouteItemService.sortRouteItem(productProcessRouteItem)); } } src/main/java/com/ruoyi/production/dto/ProductOrderDto.java
@@ -1,5 +1,7 @@ package com.ruoyi.production.dto; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.ruoyi.framework.aspectj.lang.annotation.Excel; import com.ruoyi.production.pojo.ProductOrder; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -7,32 +9,30 @@ import java.math.BigDecimal; @Data @ExcelIgnoreUnannotated public class ProductOrderDto extends ProductOrder { @ApiModelProperty(value = "éå®ååå·") @Excel(name = "éå®ååå·") private String salesContractNo; @ApiModelProperty(value = "项ç®å") @Excel(name = "项ç®å") private String projectName; @ApiModelProperty(value = "客æ·å") @ApiModelProperty(value = "客æ·åç§°") @Excel(name = "客æ·åç§°") private String customerName; @ApiModelProperty(value = "产ååç§°") @Excel(name = "产ååç§°") private String productCategory; @ApiModelProperty(value = "è§æ ¼") @Excel(name = "è§æ ¼") private String specificationModel; @ApiModelProperty(value = "è®¡åæ°é") private Integer planQuantity; @ApiModelProperty(value = "æ°é") private Integer Quantity; @ApiModelProperty(value = "å·¥åå·") private String workOrderNo; @ApiModelProperty(value = "æ¯å¦æ¥å·¥") private Integer reportWork; @ApiModelProperty(value = "å·¥åç¶æ") private Integer status; @ApiModelProperty(value = "订åå®æåº¦") private BigDecimal completionStatus; @ApiModelProperty(value = "å·¥èºè·¯çº¿ç¼å·") @Excel(name = "å·¥èºè·¯çº¿ç¼å·") private String processRouteCode; } src/main/java/com/ruoyi/production/dto/ProductProcessRouteItemDto.java
@@ -23,7 +23,5 @@ private String productName; private List<ProductProcessRouteItem> processRouteItem; private String model; } src/main/java/com/ruoyi/production/mapper/ProductOrderMapper.java
@@ -4,9 +4,12 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.production.dto.ProductOrderDto; import com.ruoyi.production.pojo.ProcessRoute; import com.ruoyi.production.pojo.ProductOrder; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.util.List; @Mapper public interface ProductOrderMapper extends BaseMapper<ProductOrder> { @@ -16,4 +19,6 @@ * æ ¹æ®è®¢åIDæ¥è¯¢å·¥åæ¥å·¥ */ ProductOrderDto productMainByOrderId(@Param("c") ProductOrder productOrder); List<ProcessRoute> listProcessRoute(@Param("productModelId") Long productModelId); } src/main/java/com/ruoyi/production/mapper/ProductProcessRouteMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,21 @@ package com.ruoyi.production.mapper; import com.ruoyi.production.dto.ProcessRouteDto; import com.ruoyi.production.pojo.ProductProcessRoute; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; /** * <p> * Mapper æ¥å£ * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-01-15 02:51:09 */ @Mapper public interface ProductProcessRouteMapper extends BaseMapper<ProductProcessRoute> { ProcessRouteDto listMain(@Param("orderId") Long orderId); } src/main/java/com/ruoyi/production/pojo/ProcessRoute.java
@@ -18,6 +18,7 @@ private Long id; @ApiModelProperty(value = "产åID") //product_model private Long productModelId; @ApiModelProperty(value = "æè¿°") @@ -32,7 +33,7 @@ private LocalDateTime createTime; @ApiModelProperty(value = "æ´æ°æ¶é´") @TableField(fill = FieldFill.UPDATE) @TableField(fill = FieldFill.INSERT_UPDATE) private LocalDateTime updateTime; @ApiModelProperty(value = "å·¥èºè·¯çº¿ç¼ç ") src/main/java/com/ruoyi/production/pojo/ProductOrder.java
@@ -1,11 +1,15 @@ package com.ruoyi.production.pojo; import com.baomidou.mybatisplus.annotation.*; import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.framework.aspectj.lang.annotation.Excel; import io.swagger.annotations.Api; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; import java.io.Serializable; import java.math.BigDecimal; import java.time.LocalDateTime; @Data @@ -24,7 +28,7 @@ private Long salesLedgerId; /** * éå®å°è´¦äº§åid * éå®å°è´¦äº§åid(sales_ledger_product) */ @ApiModelProperty(value = "éå®å°è´¦äº§åid") private Long productModelId; @@ -39,6 +43,7 @@ * ç产订åå· */ @ApiModelProperty(value = "ç产订åå·") @Excel(name = "ç产订åå·") private String npsNo; /** @@ -51,11 +56,45 @@ //å建æ¶é´ @ApiModelProperty(value = "å建æ¶é´") @TableField(fill = FieldFill.INSERT) @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Excel(name = "å建æ¶é´") private LocalDateTime createTime; //ä¿®æ¹æ¶é´ @ApiModelProperty(value = "ä¿®æ¹æ¶é´") @TableField(fill = FieldFill.UPDATE) @TableField(fill = FieldFill.INSERT_UPDATE) @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime updateTime; /** * éæ±æ°é */ @ApiModelProperty(value = "éæ±æ°é") @Excel(name = "éæ±æ°é") private BigDecimal quantity; /** * 宿æ°é */ @ApiModelProperty(value = "宿æ°é") @Excel(name = "宿æ°é") private BigDecimal completeQuantity; @Excel(name = "å¼å§æ¶é´") @ApiModelProperty(value = "å¼å§æ¶é´") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime startTime; @ApiModelProperty(value = "ç»ææ¶é´") @Excel(name = "ç»ææ¶é´") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime endTime; } src/main/java/com/ruoyi/production/pojo/ProductProcessRoute.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,61 @@ package com.ruoyi.production.pojo; import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import java.io.Serializable; import java.time.LocalDateTime; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; import lombok.Setter; /** * <p> * * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-01-15 02:51:09 */ @Getter @Setter @TableName("product_process_route") @ApiModel(value = "ProductProcessRoute对象", description = "") public class ProductProcessRoute implements Serializable { private static final long serialVersionUID = 1L; @TableId(value = "id", type = IdType.AUTO) private Long id; @ApiModelProperty("产åid") //product_model private Long productModelId; @ApiModelProperty("æè¿°") private String description; @ApiModelProperty("ç§æ·id") @TableField(fill = FieldFill.INSERT) private Long tenantId; @ApiModelProperty("å½å ¥æ¶é´") @TableField(fill = FieldFill.INSERT) private LocalDateTime createTime; @ApiModelProperty("æ´æ°æ¶é´") @TableField(fill = FieldFill.INSERT_UPDATE) private LocalDateTime updateTime; @ApiModelProperty("å ³èbomçid") private Long bomId; @ApiModelProperty("å·¥èºè·¯çº¿ç¼ç ") private String processRouteCode; @ApiModelProperty("ç产订åçid") private Long productOrderId; } src/main/java/com/ruoyi/production/pojo/ProductProcessRouteItem.java
@@ -14,7 +14,10 @@ private Long id; @ApiModelProperty(value = "ç产订åid(product_order_id)") private Long routeId; private Long productOrderId; @ApiModelProperty(value = "ç产订åçå·¥èºè·¯çº¿id(product_process_route)") private Long productRouteId; @ApiModelProperty(value = "å·¥åºid") private Long processId; src/main/java/com/ruoyi/production/pojo/ProductWorkOrder.java
@@ -1,8 +1,10 @@ package com.ruoyi.production.pojo; import com.baomidou.mybatisplus.annotation.*; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; import java.io.Serializable; import java.math.BigDecimal; @@ -42,13 +44,17 @@ */ @ApiModelProperty(value = "å建æ¶é´") @TableField(fill = FieldFill.INSERT) @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime createTime; /** * ä¿®æ¹æ¶é´ */ @ApiModelProperty(value = "ä¿®æ¹æ¶é´") @TableField(fill = FieldFill.UPDATE) @TableField(fill = FieldFill.INSERT_UPDATE) @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime updateTime; /** @@ -102,20 +108,10 @@ /** * è®¡åæ°é */ @ApiModelProperty(value = "è®¡åæ°é") private BigDecimal planQuantity; /** * å®é æ°é */ @ApiModelProperty(value = "æ°é") private BigDecimal quantity; private BigDecimal planQuantity; /** * æ¥å·¥id */ @ApiModelProperty(value = "æ¥å·¥id") private Long productMainId; } src/main/java/com/ruoyi/production/service/ProductOrderService.java
@@ -4,10 +4,18 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.production.dto.ProductOrderDto; import com.ruoyi.production.pojo.ProcessRoute; import com.ruoyi.production.pojo.ProductOrder; import java.util.List; public interface ProductOrderService extends IService<ProductOrder> { IPage<ProductOrderDto> pageProductOrder(Page page, ProductOrderDto productOrder); int bindingRoute(ProductOrder productOrder); List<ProcessRoute> listProcessRoute(Long productModelId); } src/main/java/com/ruoyi/production/service/ProductProcessRouteItemService.java
@@ -1,6 +1,7 @@ package com.ruoyi.production.service; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.framework.web.domain.R; import com.ruoyi.production.dto.ProductProcessRouteItemDto; import com.ruoyi.production.pojo.ProductProcessRouteItem; @@ -8,4 +9,10 @@ public interface ProductProcessRouteItemService extends IService<ProductProcessRouteItem> { List<ProductProcessRouteItemDto> listItem(Long orderId); R deleteRouteItem(Long id); R addRouteItem(ProductProcessRouteItem productProcessRouteItem); int sortRouteItem(ProductProcessRouteItem productProcessRouteItem); } src/main/java/com/ruoyi/production/service/ProductProcessRouteService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,18 @@ package com.ruoyi.production.service; import com.ruoyi.production.dto.ProcessRouteDto; import com.ruoyi.production.pojo.ProductProcessRoute; import com.baomidou.mybatisplus.extension.service.IService; /** * <p> * æå¡ç±» * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-01-15 02:51:09 */ public interface ProductProcessRouteService extends IService<ProductProcessRoute> { ProcessRouteDto listMain(Long orderId); } src/main/java/com/ruoyi/production/service/impl/ProcessRouteItemServiceImpl.java
@@ -37,8 +37,6 @@ List<ProcessRouteItem> processRouteItems = processRouteItemMapper.selectList(Wrappers.<ProcessRouteItem>lambdaQuery() .eq(ProcessRouteItem::getRouteId, oldProcessRouteItem.getRouteId()) .orderByAsc(ProcessRouteItem::getDragSort)); //æ¥è¯¢è¢«æ´æ¹ç飿¡æ°æ®åæ¥æ¯ç¬¬å æ¡ int oldIndex = processRouteItems.indexOf(oldProcessRouteItem); // è·åç®æ ä½ç½®ï¼ç§»å¨å°ç¬¬å 个ä¹åï¼ Integer targetPosition = processRouteItem.getDragSort(); if (targetPosition != null && targetPosition >= 0) { src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java
@@ -1,22 +1,104 @@ package com.ruoyi.production.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.production.dto.ProductOrderDto; import com.ruoyi.production.mapper.ProductOrderMapper; import com.ruoyi.production.pojo.ProductOrder; import com.ruoyi.production.mapper.*; import com.ruoyi.production.pojo.*; import com.ruoyi.production.service.ProcessRouteService; import com.ruoyi.production.service.ProductOrderService; 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; @Service public class ProductOrderServiceImpl extends ServiceImpl<ProductOrderMapper, ProductOrder> implements ProductOrderService { @Autowired private ProductOrderMapper productOrderMapper; @Autowired private ProcessRouteMapper processRouteMapper; @Autowired private ProductProcessRouteMapper productProcessRouteMapper; @Autowired private ProcessRouteItemMapper processRouteItemMapper; @Autowired private ProductProcessRouteItemMapper productProcessRouteItemMapper; @Autowired private ProductWorkOrderMapper productWorkOrderMapper; @Override public IPage<ProductOrderDto> pageProductOrder(Page page, ProductOrderDto productOrder) { return productOrderMapper.pageProductOrder(page, productOrder); } @Override public int bindingRoute(ProductOrder productOrder) { //æ°å¢ç产订åä¸çå·¥èºè·¯çº¿ä¸»è¡¨ ProcessRoute processRoute = processRouteMapper.selectById(productOrder.getRouteId()); ProductProcessRoute productProcessRoute = new ProductProcessRoute(); productProcessRoute.setProductModelId(processRoute.getProductModelId()); productProcessRoute.setProcessRouteCode(processRoute.getProcessRouteCode()); productProcessRoute.setProductOrderId(productOrder.getId()); productProcessRoute.setBomId(processRoute.getBomId()); productProcessRouteMapper.insert(productProcessRoute); //æ°å¢ç产订åä¸çå·¥èºè·¯çº¿å表 List<ProcessRouteItem> processRouteItems = processRouteItemMapper.selectList(new QueryWrapper<ProcessRouteItem>().lambda().eq(ProcessRouteItem::getRouteId, processRoute.getId())); // çæå½åæ¥æçåç¼ï¼å¹´ææ¥ String datePrefix = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")); for (ProcessRouteItem processRouteItem : processRouteItems) { ProductProcessRouteItem productProcessRouteItem = new ProductProcessRouteItem(); productProcessRouteItem.setProductModelId(processRouteItem.getProductModelId()); productProcessRouteItem.setProcessId(processRouteItem.getProcessId()); productProcessRouteItem.setProductOrderId(productOrder.getId()); productProcessRouteItem.setProductRouteId(productProcessRoute.getId()); int insert = productProcessRouteItemMapper.insert(productProcessRouteItem); if (insert > 0) { // æ¥è¯¢ä»æ¥å·²åå¨çæå¤§å·¥åå· QueryWrapper<ProductWorkOrder> queryWrapper = new QueryWrapper<>(); queryWrapper.likeRight("work_order_no", datePrefix) .orderByDesc("work_order_no") .last("LIMIT 1"); ProductWorkOrder lastWorkOrder = productWorkOrderMapper.selectOne(queryWrapper); int sequenceNumber = 1; // é»è®¤åºå· if (lastWorkOrder != null && lastWorkOrder.getWorkOrderNo() != null) { String lastNo = lastWorkOrder.getWorkOrderNo().toString(); if (lastNo.startsWith(datePrefix)) { String seqStr = lastNo.substring(datePrefix.length()); try { sequenceNumber = Integer.parseInt(seqStr) + 1; } catch (NumberFormatException e) { sequenceNumber = 1; } } } // çæå®æ´çå·¥åå· String workOrderNoStr = String.format("%s%03d", datePrefix, sequenceNumber); ProductWorkOrder productWorkOrder = new ProductWorkOrder(); productWorkOrder.setProductProcessRouteItemId(productProcessRouteItem.getId()); productWorkOrder.setProductOrderId(productOrder.getId()); productWorkOrder.setPlanQuantity(productOrder.getQuantity()); productWorkOrder.setWorkOrderNo(workOrderNoStr); productWorkOrder.setStatus(1); productWorkOrderMapper.insert(productWorkOrder); } } return productOrderMapper.updateById(productOrder); } @Override public List<ProcessRoute> listProcessRoute(Long productModelId) { return productOrderMapper.listProcessRoute(productModelId); } } src/main/java/com/ruoyi/production/service/impl/ProductProcessRouteItemServiceImpl.java
@@ -1,23 +1,206 @@ package com.ruoyi.production.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.framework.web.domain.R; import com.ruoyi.production.dto.ProductProcessRouteItemDto; import com.ruoyi.production.mapper.ProductProcessRouteItemMapper; import com.ruoyi.production.pojo.ProductProcessRouteItem; import com.ruoyi.production.mapper.*; import com.ruoyi.production.pojo.*; import com.ruoyi.production.service.ProductProcessRouteItemService; import com.ruoyi.quality.mapper.QualityInspectMapper; import com.ruoyi.quality.pojo.QualityInspect; import com.ruoyi.sales.mapper.SalesLedgerProductMapper; import com.ruoyi.sales.pojo.SalesLedgerProduct; import lombok.AllArgsConstructor; import org.apache.poi.ss.formula.functions.T; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @Service @Transactional(rollbackFor = Exception.class) @AllArgsConstructor public class ProductProcessRouteItemServiceImpl extends ServiceImpl<ProductProcessRouteItemMapper, ProductProcessRouteItem> implements ProductProcessRouteItemService { @Autowired private ProductProcessRouteItemMapper productProcessRouteItemMapper; private ProductionProductMainMapper productionProductMainMapper; private ProductionProductInputMapper productionProductInputMapper; private ProductionProductOutputMapper productionProductOutputMapper; private QualityInspectMapper qualityInspectMapper; private SalesLedgerProductionAccountingMapper salesLedgerProductionAccountingMapper; private ProductWorkOrderMapper productWorkOrderMapper; private ProductOrderMapper productOrderMapper; private ProductProcessRouteMapper productProcessRouteMapper; private SalesLedgerProductMapper salesLedgerProductMapper; @Override public List<ProductProcessRouteItemDto> listItem(Long orderId) { return productProcessRouteItemMapper.listItem(orderId); } @Override public R deleteRouteItem(Long id) { Long routeItemId = id; try { // æ¥è¯¢å·¥å ProductWorkOrder productWorkOrder = productWorkOrderMapper.selectOne( new LambdaQueryWrapper<ProductWorkOrder>() .eq(ProductWorkOrder::getProductProcessRouteItemId, routeItemId) .last("LIMIT 1") ); if (productWorkOrder == null) { throw new RuntimeException("å é¤å¤±è´¥ï¼æªæ¾å°å ³èçç产工å"); } Long workOrderId = productWorkOrder.getId(); Long productOrderId = productWorkOrder.getProductOrderId(); // æ¥è¯¢ç产主表 List<ProductionProductMain> productionProductMains = productionProductMainMapper.selectList( new LambdaQueryWrapper<ProductionProductMain>() .eq(ProductionProductMain::getWorkOrderId, workOrderId) ); if (!productionProductMains.isEmpty()) { // æ¹éå é¤å表 for (ProductionProductMain main : productionProductMains) { Long mainId = main.getId(); // å é¤æå ¥ productionProductInputMapper.delete(new LambdaQueryWrapper<ProductionProductInput>() .eq(ProductionProductInput::getProductMainId, mainId)); // å é¤äº§åº productionProductOutputMapper.delete(new LambdaQueryWrapper<ProductionProductOutput>() .eq(ProductionProductOutput::getProductMainId, mainId)); // å é¤è´¨æ£ qualityInspectMapper.delete(new LambdaQueryWrapper<QualityInspect>() .eq(QualityInspect::getProductMainId, mainId)); } } // å 餿¥å·¥ï¼çäº§ä¸»è¡¨ï¼ productionProductMainMapper.delete(new LambdaQueryWrapper<ProductionProductMain>() .eq(ProductionProductMain::getWorkOrderId, workOrderId)); // æ¥è¯¢è®¢å + å 餿 ¸ç® ProductOrder productOrder = productOrderMapper.selectById(productOrderId); if (productOrder != null && productOrder.getSalesLedgerId() != null) { salesLedgerProductionAccountingMapper.delete(new LambdaQueryWrapper<SalesLedgerProductionAccounting>() .eq(SalesLedgerProductionAccounting::getSalesLedgerId, productOrder.getSalesLedgerId())); } // å é¤å ³èå·¥å productWorkOrderMapper.delete(new LambdaQueryWrapper<ProductWorkOrder>() .eq(ProductWorkOrder::getProductProcessRouteItemId, routeItemId)); // å é¤ä¸»è¡¨æ°æ® ProductProcessRouteItem deleteProductProcessRouteItem = productProcessRouteItemMapper.selectById(routeItemId); Long productRouteId = deleteProductProcessRouteItem.getProductRouteId(); // å 餿宿°æ® productProcessRouteItemMapper.deleteById(id); // æ¥è¯¢è¯¥å·¥èºè·¯çº¿çææå·¥åºå¹¶æç §é¡ºåºæåº List<ProductProcessRouteItem> productProcessRouteItems = productProcessRouteItemMapper.selectList(Wrappers.<ProductProcessRouteItem>lambdaQuery() .eq(ProductProcessRouteItem::getProductRouteId, productRouteId) .orderByAsc(ProductProcessRouteItem::getDragSort)); // éæ°è®¾ç½®æåºå¼ï¼ä½¿åºå·è¿ç» for (int i = 0; i < productProcessRouteItems.size(); i++) { ProductProcessRouteItem item = productProcessRouteItems.get(i); if (!item.getDragSort().equals(i + 1)) { item.setDragSort(i + 1); productProcessRouteItemMapper.updateById(item); } } return R.ok(); } catch (Exception e) { throw new RuntimeException("å é¤ç产工èºè·¯çº¿å¤±è´¥ï¼" + e.getMessage()); } } @Override public R addRouteItem(ProductProcessRouteItem productProcessRouteItem) { ProductOrder productOrder = productOrderMapper.selectById(productProcessRouteItem.getProductOrderId()); int insert = productProcessRouteItemMapper.insert(productProcessRouteItem); // çæå½åæ¥æçåç¼ï¼å¹´ææ¥ String datePrefix = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")); if (insert > 0) { // æ¥è¯¢ä»æ¥å·²åå¨çæå¤§å·¥åå· QueryWrapper<ProductWorkOrder> queryWrapper = new QueryWrapper<>(); queryWrapper.likeRight("work_order_no", datePrefix) .orderByDesc("work_order_no") .last("LIMIT 1"); ProductWorkOrder lastWorkOrder = productWorkOrderMapper.selectOne(queryWrapper); int sequenceNumber = 1; // é»è®¤åºå· if (lastWorkOrder != null && lastWorkOrder.getWorkOrderNo() != null) { String lastNo = lastWorkOrder.getWorkOrderNo().toString(); if (lastNo.startsWith(datePrefix)) { String seqStr = lastNo.substring(datePrefix.length()); try { sequenceNumber = Integer.parseInt(seqStr) + 1; } catch (NumberFormatException e) { sequenceNumber = 1; } } } // çæå®æ´çå·¥åå· String workOrderNoStr = String.format("%s%03d", datePrefix, sequenceNumber); ProductWorkOrder productWorkOrder = new ProductWorkOrder(); productWorkOrder.setProductProcessRouteItemId(productProcessRouteItem.getId()); productWorkOrder.setProductOrderId(productProcessRouteItem.getProductOrderId()); productWorkOrder.setPlanQuantity(productOrder.getQuantity()); productWorkOrder.setWorkOrderNo(workOrderNoStr); productWorkOrder.setStatus(1); productWorkOrderMapper.insert(productWorkOrder); } return R.ok(); } @Override public int sortRouteItem(ProductProcessRouteItem productProcessRouteItem) { //æ¥è¯¢è¢«æ¹å¨çè¿æ¡æ°æ® ProductProcessRouteItem oldProductProcessRouteItem = productProcessRouteItemMapper.selectById(productProcessRouteItem.getId()); //æ¥è¯¢è¯¥å·¥èºè·¯çº¿çææå·¥åºå¹¶æç §é¡ºåºæåº List<ProductProcessRouteItem> productProcessRouteItems = productProcessRouteItemMapper.selectList(Wrappers.<ProductProcessRouteItem>lambdaQuery() .eq(ProductProcessRouteItem::getProductRouteId, oldProductProcessRouteItem.getProductRouteId()) .orderByAsc(ProductProcessRouteItem::getDragSort)); // è·åç®æ ä½ç½®ï¼ç§»å¨å°ç¬¬å 个ä¹åï¼ Integer targetPosition = productProcessRouteItem.getDragSort(); if (targetPosition != null && targetPosition >= 0) { // ç§»å¨å ç´ å°æ°çä½ç½® productProcessRouteItems.remove(oldProductProcessRouteItem); productProcessRouteItems.add(targetPosition-1, oldProductProcessRouteItem); // æ´æ°ææåå½±åçæåºå段 for (int i = 0; i < productProcessRouteItems.size(); i++) { ProductProcessRouteItem item = productProcessRouteItems.get(i); if (!item.getId().equals(oldProductProcessRouteItem.getId())) { // æ£æ¥æ¯å¦éè¦æ´æ°æåºå¼ if (item.getDragSort() != i+1) { item.setDragSort(i+1); productProcessRouteItemMapper.updateById(item); } } else { // æ´æ°åè®°å½çæ°æåºä½ç½® oldProductProcessRouteItem.setDragSort(targetPosition); productProcessRouteItemMapper.updateById(oldProductProcessRouteItem); } } return 1; } return 0; } } src/main/java/com/ruoyi/production/service/impl/ProductProcessRouteServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,29 @@ package com.ruoyi.production.service.impl; import com.ruoyi.production.dto.ProcessRouteDto; import com.ruoyi.production.pojo.ProductProcessRoute; import com.ruoyi.production.mapper.ProductProcessRouteMapper; import com.ruoyi.production.service.ProductProcessRouteService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; /** * <p> * æå¡å®ç°ç±» * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-01-15 02:51:09 */ @Service public class ProductProcessRouteServiceImpl extends ServiceImpl<ProductProcessRouteMapper, ProductProcessRoute> implements ProductProcessRouteService { @Autowired private ProductProcessRouteMapper productProcessRouteMapper; @Override public ProcessRouteDto listMain(Long orderId) { return productProcessRouteMapper.listMain(orderId); } } src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
@@ -55,6 +55,7 @@ private InvoiceRegistrationProductMapper invoiceRegistrationProductMapper; private ProcessRouteMapper processRouteMapper; private ProductProcessRouteMapper productProcessRouteMapper; private ProductWorkOrderMapper productWorkOrderMapper; @@ -136,7 +137,7 @@ // æ¹éæ¥è¯¢processRouteItems List<ProductProcessRouteItem> allRouteItems = productProcessRouteItemMapper.selectList( new LambdaQueryWrapper<ProductProcessRouteItem>() .in(ProductProcessRouteItem::getRouteId, orderIds) .in(ProductProcessRouteItem::getProductOrderId, orderIds) ); if (!CollectionUtils.isEmpty(allRouteItems)) { @@ -149,9 +150,13 @@ .in(ProductWorkOrder::getProductProcessRouteItemId, routeItemIds)); } // æ¹éå é¤processRouteItem // æ¹éå é¤productProcessRouteItem productProcessRouteItemMapper.delete(new LambdaQueryWrapper<ProductProcessRouteItem>() .in(ProductProcessRouteItem::getRouteId, orderIds)); .in(ProductProcessRouteItem::getProductOrderId, orderIds)); // æ¹éå é¤productProcessRoute productProcessRouteMapper.delete(new LambdaQueryWrapper<ProductProcessRoute>() .in(ProductProcessRoute::getProductOrderId, orderIds)); // æ¹éå é¤productOrder productOrderMapper.delete(new LambdaQueryWrapper<ProductOrder>() @@ -190,10 +195,20 @@ productOrder.setSalesLedgerId(salesLedgerProduct.getSalesLedgerId()); productOrder.setProductModelId(salesLedgerProduct.getId()); productOrder.setNpsNo("SC" + String.format("%08d", salesLedgerProduct.getId())); productOrder.setQuantity(salesLedgerProduct.getQuantity());//éæ±æ°é productOrder.setCompleteQuantity(BigDecimal.ZERO);//宿æ°é productOrderMapper.insert(productOrder); ProcessRoute processRoute = processRouteMapper.selectOne(new QueryWrapper<ProcessRoute>().lambda().eq(ProcessRoute::getProductModelId, salesLedgerProduct.getProductModelId())); if (processRoute != null) { //æ°å¢ç产订åå·¥èºè·¯çº¿ä¸»è¡¨ ProductProcessRoute productProcessRoute = new ProductProcessRoute(); productProcessRoute.setProductModelId(processRoute.getProductModelId()); productProcessRoute.setProcessRouteCode(processRoute.getProcessRouteCode()); productProcessRoute.setProductOrderId(productOrder.getId()); productProcessRoute.setBomId(processRoute.getBomId()); productProcessRouteMapper.insert(productProcessRoute); //æ°å¢ç产订åå·¥èºè·¯çº¿å表 List<ProcessRouteItem> processRouteItems = processRouteItemMapper.selectList(new QueryWrapper<ProcessRouteItem>().lambda().eq(ProcessRouteItem::getRouteId, processRoute.getId())); // çæå½åæ¥æçåç¼ï¼å¹´ææ¥ String datePrefix = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")); @@ -201,7 +216,8 @@ ProductProcessRouteItem productProcessRouteItem = new ProductProcessRouteItem(); productProcessRouteItem.setProductModelId(processRouteItem.getProductModelId()); productProcessRouteItem.setProcessId(processRouteItem.getProcessId()); productProcessRouteItem.setRouteId(productOrder.getId()); productProcessRouteItem.setProductOrderId(productOrder.getId()); productProcessRouteItem.setProductRouteId(productProcessRoute.getId()); int insert = productProcessRouteItemMapper.insert(productProcessRouteItem); if (insert > 0) { // æ¥è¯¢ä»æ¥å·²åå¨çæå¤§å·¥åå· src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
@@ -96,6 +96,7 @@ private final ProductOrderMapper productOrderMapper; private final ProcessRouteMapper processRouteMapper; private final ProductProcessRouteMapper productProcessRouteMapper; private final ProcessRouteItemMapper processRouteItemMapper; @@ -400,7 +401,7 @@ // æ¹éæ¥è¯¢processRouteItems List<ProductProcessRouteItem> allRouteItems = productProcessRouteItemMapper.selectList( new LambdaQueryWrapper<ProductProcessRouteItem>() .in(ProductProcessRouteItem::getRouteId, orderIds) .in(ProductProcessRouteItem::getProductOrderId, orderIds) ); if (!CollectionUtils.isEmpty(allRouteItems)) { @@ -455,7 +456,11 @@ } // æ¹éå é¤processRouteItem productProcessRouteItemMapper.delete(new LambdaQueryWrapper<ProductProcessRouteItem>() .in(ProductProcessRouteItem::getRouteId, orderIds)); .in(ProductProcessRouteItem::getProductOrderId, orderIds)); // æ¹éå é¤productProcessRoute productProcessRouteMapper.delete(new LambdaQueryWrapper<ProductProcessRoute>() .in(ProductProcessRoute::getProductOrderId, orderIds)); // æ¹éå é¤productOrder productOrderMapper.delete(new LambdaQueryWrapper<ProductOrder>() @@ -686,20 +691,30 @@ productOrder.setSalesLedgerId(salesLedgerProduct.getSalesLedgerId()); productOrder.setProductModelId(salesLedgerProduct.getId()); productOrder.setNpsNo("SC" + String.format("%08d", salesLedgerProduct.getId())); productOrder.setQuantity(salesLedgerProduct.getQuantity());//éæ±æ°é productOrder.setCompleteQuantity(BigDecimal.ZERO);//宿æ°é productOrderMapper.insert(productOrder); ProcessRoute processRoute = processRouteMapper.selectOne(new QueryWrapper<ProcessRoute>().lambda().eq(ProcessRoute::getProductModelId, salesLedgerProduct.getProductModelId())); if (processRoute != null) { //æ°å¢ç产订åå·¥èºè·¯çº¿ä¸»è¡¨ ProductProcessRoute productProcessRoute = new ProductProcessRoute(); productProcessRoute.setProductModelId(processRoute.getProductModelId()); productProcessRoute.setProcessRouteCode(processRoute.getProcessRouteCode()); productProcessRoute.setProductOrderId(productOrder.getId()); productProcessRoute.setBomId(processRoute.getBomId()); productProcessRouteMapper.insert(productProcessRoute); //æ°å¢ç产订åå·¥èºè·¯çº¿å表 List<ProcessRouteItem> processRouteItems = processRouteItemMapper.selectList(new QueryWrapper<ProcessRouteItem>().lambda().eq(ProcessRouteItem::getRouteId, processRoute.getId())); // çæå½åæ¥æçåç¼ï¼å¹´ææ¥ String datePrefix = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")); int dragSort = 1; for (ProcessRouteItem processRouteItem : processRouteItems) { ProductProcessRouteItem productProcessRouteItem = new ProductProcessRouteItem(); productProcessRouteItem.setProductModelId(processRouteItem.getProductModelId()); productProcessRouteItem.setProcessId(processRouteItem.getProcessId()); productProcessRouteItem.setRouteId(productOrder.getId()); productProcessRouteItem.setDragSort(dragSort); productProcessRouteItem.setProductOrderId(productOrder.getId()); productProcessRouteItem.setProductRouteId(productProcessRoute.getId()); productProcessRouteItem.setDragSort(processRouteItem.getDragSort()); int insert = productProcessRouteItemMapper.insert(productProcessRouteItem); if (insert > 0) { // æ¥è¯¢ä»æ¥å·²åå¨çæå¤§å·¥åå· @@ -732,7 +747,6 @@ productWorkOrder.setStatus(1); productWorkOrderMapper.insert(productWorkOrder); } dragSort++; } productOrder.setRouteId(processRoute.getId()); productOrderMapper.updateById(productOrder); src/main/resources/mapper/production/ProductOrderMapper.xml
@@ -14,11 +14,17 @@ <result property="updateTime" column="update_time"/> </resultMap> <select id="pageProductOrder" resultType="com.ruoyi.production.dto.ProductOrderDto"> select po.*,sl.sales_contract_no,sl.customer_name,slp.product_category,slp.specification_model select po.*, sl.sales_contract_no, sl.customer_name, slp.product_category, slp.specification_model, ppr.process_route_code, ROUND(po.complete_quantity / po.quantity * 100, 2) AS completionStatus from product_order po left join sales_ledger sl on po.sales_ledger_id = sl.id left join sales_ledger_product slp on po.product_model_id = slp.id left join process_route pr on po.route_id = pr.id left join product_process_route ppr on po.id = ppr.product_order_id <where> <if test="c.npsNo != null and c.npsNo != ''"> and po.nps_no like concat('%',#{c.npsNo},'%') @@ -38,8 +44,7 @@ </where> </select> <select id="productMainByOrderId" resultType="com.ruoyi.production.dto.ProductOrderDto"> select po.*, select po.*, pwo.work_order_no, pwo.report_work, pwo.status, @@ -49,6 +54,13 @@ left join product_work_order pwo on po.id = pwo.product_order_id where po.id = #{c.id} </select> <select id="listProcessRoute" resultType="com.ruoyi.production.pojo.ProcessRoute"> select pr.* from process_route pr left join product_model pm on pr.product_model_id = pm.id left join sales_ledger_product slp on pm.id = slp.product_model_id where slp.id = #{productModelId} </select> </mapper> src/main/resources/mapper/production/ProductProcessRouteItemMapper.xml
@@ -20,7 +20,7 @@ left join product_model pm on ppri.product_model_id = pm.id left join product p on pm.product_id = p.id left join product_process pp on pp.id = ppri.process_id where ppri.route_id = #{orderId} where ppri.product_order_id = #{orderId} order by ppri.drag_sort </select> src/main/resources/mapper/production/ProductProcessRouteMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,26 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.ruoyi.production.mapper.ProductProcessRouteMapper"> <!-- éç¨æ¥è¯¢æ å°ç»æ --> <resultMap id="BaseResultMap" type="com.ruoyi.production.pojo.ProductProcessRoute"> <id column="id" property="id"/> <result column="product_model_id" property="productModelId"/> <result column="description" property="description"/> <result column="tenant_id" property="tenantId"/> <result column="create_time" property="createTime"/> <result column="update_time" property="updateTime"/> <result column="bom_id" property="bomId"/> <result column="process_route_code" property="processRouteCode"/> <result column="product_order_id" property="productOrderId"/> </resultMap> <select id="listMain" resultType="com.ruoyi.production.dto.ProcessRouteDto"> select ppr.*, p.product_name, pm.product_id, pm.model, pb.bom_no from product_process_route ppr left join product_bom pb on ppr.bom_id = pb.id left join product_model pm on ppr.product_model_id = pm.id left join product p on pm.product_id = p.id where ppr.product_order_id = #{orderId} </select> </mapper>