doc/create_table_process_route_item.sql
@@ -50,6 +50,10 @@ create_time datetime null comment 'å½å ¥æ¶é´', update_time datetime null comment 'æ´æ°æ¶é´', work_order_no varchar(255) not null default '' comment 'å·¥åç¼å·', plan_start_time datetime null comment '计åå¼å§æ¶é´', plan_end_time datetime null comment '计åç»ææ¶é´', actual_start_time datetime null comment 'å®é å¼å§æ¶é´', actual_end_time datetime null comment 'å®é ç»ææ¶é´', status int not null default 0 comment 'ç¶æ 1 å¾ ç¡®è®¤ 2 å¾ ç产 3çäº§ä¸ 4å·²ç产 ', tenant_id bigint not null comment 'ç§æ·id' ); src/main/java/com/ruoyi/production/controller/ProductProcessRouteItemController.java
@@ -1,23 +1,39 @@ 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.ProcessRouteItemDto; import com.ruoyi.production.dto.ProductProcessRouteItemDto; import com.ruoyi.production.pojo.ProcessRouteItem; 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 org.springframework.beans.factory.annotation.Autowired; 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 { @Autowired private ProductProcessRouteItemService productProcessRouteItemService; private ProductWorkOrderService productWorkOrderService; private ProductWorkOrderMapper productWorkOrderMapper; @GetMapping("list") @ApiOperation("æ ¹æ®Idæ¥è¯¢å·¥èºé¡¹ç®") @@ -25,10 +41,88 @@ return R.ok(productProcessRouteItemService.listItem(orderId)); } @PostMapping () @ApiOperation("æ°å¢ä¿®æ¹") @PostMapping("/updateRouteItem") @ApiOperation("æ¹éæ°å¢ä¿®æ¹") @Transactional(rollbackFor = Exception.class) public R addOrUpdate(@RequestBody ProductProcessRouteItemDto processRouteItemDto) { productProcessRouteItemService.remove(new QueryWrapper<ProductProcessRouteItem>().lambda().eq(ProductProcessRouteItem::getRouteId, processRouteItemDto.getRouteId())); return R.ok(productProcessRouteItemService.saveBatch(processRouteItemDto.getProcessRouteItem())); 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).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.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()); } } } src/main/java/com/ruoyi/production/controller/ProductWorkOrderController.java
@@ -6,9 +6,7 @@ import com.ruoyi.production.service.ProductWorkOrderService; import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; 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.*; @RestController @AllArgsConstructor @@ -27,4 +25,13 @@ return R.ok(productWorkOrderservice.listPage(page, productWorkOrder)); } /** * 产åå·¥åæ´æ° */ @ApiOperation("产å工忴æ°") @PostMapping ("/updateProductWorkOrder") public R updateProductWorkOrder(@RequestBody ProductWorkOrderDto productWorkOrderDto) { return R.ok(productWorkOrderservice.updateProductWorkOrder(productWorkOrderDto)); } } src/main/java/com/ruoyi/production/controller/ProductionProductInputController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,25 @@ package com.ruoyi.production.controller; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.framework.web.domain.R; import com.ruoyi.production.dto.ProductionProductInputDto; import com.ruoyi.production.service.ProductionProductInputService; import io.swagger.annotations.Api; 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; @RequestMapping("productionProductInput") @RestController @Api(value = "ç产æå ¥") public class ProductionProductInputController { @Autowired private ProductionProductInputService productionProductInputService; @GetMapping("listPage") public R page(Page<ProductionProductInputDto> page, ProductionProductInputDto productionProductInputDto) { return R.ok(productionProductInputService.listPageProductionProductInputDto(page, productionProductInputDto)); } } src/main/java/com/ruoyi/production/controller/ProductionProductMainController.java
@@ -23,4 +23,9 @@ public R page(Page<ProductionProductMainDto> page, ProductionProductMainDto productionProductMainDto) { return R.ok(productionProductMainService.listPageProductionProductMainDto(page, productionProductMainDto)); } @GetMapping("addProductMain") public R addProductMain(ProductionProductMainDto productionProductMainDto) { return R.ok(productionProductMainService.addProductMain(productionProductMainDto)); } } src/main/java/com/ruoyi/production/controller/ProductionProductOutputController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,27 @@ package com.ruoyi.production.controller; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.framework.web.domain.R; import com.ruoyi.production.dto.ProductionProductInputDto; import com.ruoyi.production.dto.ProductionProductOutputDto; import com.ruoyi.production.service.ProductionProductInputService; import com.ruoyi.production.service.ProductionProductOutputService; import io.swagger.annotations.Api; 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; @RequestMapping("productionProductOutput") @RestController @Api(value = "ç产产åº") public class ProductionProductOutputController { @Autowired private ProductionProductOutputService productionProductOutputService; @GetMapping("listPage") public R page(Page<ProductionProductOutputDto> page, ProductionProductOutputDto productionProductOutputDto) { return R.ok(productionProductOutputService.listPageProductionProductOutputDto(page, productionProductOutputDto)); } } src/main/java/com/ruoyi/production/dto/ProductionProductInputDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,14 @@ package com.ruoyi.production.dto; import com.ruoyi.production.pojo.ProductionProductInput; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data public class ProductionProductInputDto extends ProductionProductInput { @ApiModelProperty(value = "æ¥å·¥åå·") private String productNo; @ApiModelProperty(value = "产ååå·") private String model; } src/main/java/com/ruoyi/production/dto/ProductionProductMainDto.java
@@ -4,6 +4,8 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; @Data public class ProductionProductMainDto extends ProductionProductMain { @ApiModelProperty(value = "å·¥åç¼å·") @@ -14,4 +16,7 @@ @ApiModelProperty(value = "æ¥å·¥äººåæµç§°") private String nickName; @ApiModelProperty(value = "æ¥å·¥æ°é") private BigDecimal quantity; } src/main/java/com/ruoyi/production/dto/ProductionProductOutputDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,15 @@ package com.ruoyi.production.dto; import com.ruoyi.production.pojo.ProductionProductInput; import com.ruoyi.production.pojo.ProductionProductOutput; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data public class ProductionProductOutputDto extends ProductionProductOutput { @ApiModelProperty(value = "æ¥å·¥åå·") private String productNo; @ApiModelProperty(value = "产ååå·") private String model; } src/main/java/com/ruoyi/production/mapper/ProductionProductInputMapper.java
@@ -1,9 +1,14 @@ package com.ruoyi.production.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.production.dto.ProductionProductInputDto; import com.ruoyi.production.pojo.ProductionProductInput; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @Mapper public interface ProductionProductInputMapper extends BaseMapper<ProductionProductInput> { IPage<ProductionProductInputDto> listPageProductionProductInputDto(Page page, @Param("c") ProductionProductInputDto productionProductInputDto); } src/main/java/com/ruoyi/production/mapper/ProductionProductOutputMapper.java
@@ -1,9 +1,15 @@ package com.ruoyi.production.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.production.dto.ProductionProductOutputDto; import com.ruoyi.production.pojo.ProductionProductOutput; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @Mapper public interface ProductionProductOutputMapper extends BaseMapper<ProductionProductOutput> { IPage<ProductionProductOutputDto> listPageProductionProductOutputDto(Page page, @Param("c") ProductionProductOutputDto productionProductOutputDto); } src/main/java/com/ruoyi/production/pojo/ProcessRouteItem.java
@@ -1,15 +1,13 @@ 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.*; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.time.LocalDateTime; @Data @TableName("process_route_item") public class ProcessRouteItem { @TableId(type = IdType.AUTO) src/main/java/com/ruoyi/production/pojo/ProductProcessRouteItem.java
@@ -32,4 +32,7 @@ @TableField(fill = FieldFill.UPDATE) private LocalDateTime updateTime; @ApiModelProperty(value ="æå¨æåº") private Integer dragSort; } src/main/java/com/ruoyi/production/pojo/ProductWorkOrder.java
@@ -5,6 +5,7 @@ import lombok.Data; import java.io.Serializable; import java.time.LocalDate; import java.time.LocalDateTime; /** @@ -66,23 +67,23 @@ * 计åå¼å§æ¶é´ */ @ApiModelProperty(value = "计åå¼å§æ¶é´") private LocalDateTime planStartTime; private LocalDate planStartTime; /** * 计åç»ææ¶é´ */ @ApiModelProperty(value = "计åç»ææ¶é´") private LocalDateTime planEndTime; private LocalDate planEndTime; /** * å®é å¼å§æ¶é´ */ @ApiModelProperty(value = "å®é å¼å§æ¶é´") private LocalDateTime actualStartTime; private LocalDate actualStartTime; /** * å®é ç»ææ¶é´ */ @ApiModelProperty(value = "å®é ç»ææ¶é´") private LocalDateTime actualEndTime; private LocalDate actualEndTime; } src/main/java/com/ruoyi/production/pojo/ProductionProductInput.java
@@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -10,13 +11,14 @@ import java.time.LocalDateTime; @Data @TableName("production_product_input") public class ProductionProductInput { @TableId private Long id; @ApiModelProperty(value = "æ¥å·¥id") private Long productionProductId; private Long productMainId; @ApiModelProperty(value = "产åid") private Long productModelId; src/main/java/com/ruoyi/production/pojo/ProductionProductMain.java
@@ -3,12 +3,14 @@ import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.time.LocalDateTime; @Data @TableName("production_product_main") public class ProductionProductMain { @TableId @@ -20,15 +22,24 @@ @ApiModelProperty(value = "æ¥å·¥äººåid") private Long userId; @ApiModelProperty(value = "æ¥å·¥äººå") private Long userName; @ApiModelProperty(value = "å·¥åid") private String workOrderId; private String productProcessRouteItemId; @ApiModelProperty(value = "æ¥å·¥ç¶æ") private Integer status; @TableField(fill = FieldFill.INSERT) @ApiModelProperty(value = "å建æ¶é´") @TableField(fill = FieldFill.INSERT) private LocalDateTime createTime; @ApiModelProperty(value = "æ´æ°æ¶é´") @TableField(fill = FieldFill.UPDATE) private LocalDateTime updateTime; @ApiModelProperty(value = "ç§æ·ID") @TableField(fill = FieldFill.INSERT) private Long tenantId; src/main/java/com/ruoyi/production/pojo/ProductionProductOutput.java
@@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -10,13 +11,14 @@ import java.time.LocalDateTime; @Data @TableName("production_product_input") public class ProductionProductOutput { @TableId private Long id; @ApiModelProperty(value = "æ¥å·¥id") private Long productionProductId; private Long productMainId; @ApiModelProperty(value = "产åid") private Long productModelId; src/main/java/com/ruoyi/production/service/ProductWorkOrderService.java
@@ -10,4 +10,6 @@ IPage<ProductWorkOrderDto> listPage(Page<ProductWorkOrderDto> page, ProductWorkOrderDto productWorkOrder); int updateProductWorkOrder(ProductWorkOrderDto productWorkOrderDto); } src/main/java/com/ruoyi/production/service/ProductionProductInputService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,11 @@ package com.ruoyi.production.service; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.production.dto.ProductionProductInputDto; import com.ruoyi.production.pojo.ProductionProductInput; public interface ProductionProductInputService extends IService<ProductionProductInput> { IPage<ProductionProductInputDto> listPageProductionProductInputDto(Page page, ProductionProductInputDto productionProductInputDto); } src/main/java/com/ruoyi/production/service/ProductionProductMainService.java
@@ -12,4 +12,7 @@ public interface ProductionProductMainService extends IService<ProductionProductMain> { IPage<ProductionProductMainDto> listPageProductionProductMainDto(Page page, ProductionProductMainDto productionProductMainDto); Boolean addProductMain(ProductionProductMainDto productionProductMainDto); } src/main/java/com/ruoyi/production/service/ProductionProductOutputService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,11 @@ package com.ruoyi.production.service; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.production.dto.ProductionProductOutputDto; import com.ruoyi.production.pojo.ProductionProductOutput; public interface ProductionProductOutputService extends IService<ProductionProductOutput> { IPage<ProductionProductOutputDto> listPageProductionProductOutputDto(Page page, ProductionProductOutputDto productionProductOutputDto); } src/main/java/com/ruoyi/production/service/impl/ProductWorkOrderServiceImpl.java
@@ -24,4 +24,9 @@ return productWorkOrdermapper.pageProductWorkOrder(page, productWorkOrder); } @Override public int updateProductWorkOrder(ProductWorkOrderDto productWorkOrderDto) { return productWorkOrdermapper.updateById(productWorkOrderDto); } } src/main/java/com/ruoyi/production/service/impl/ProductionProductInputServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,24 @@ package com.ruoyi.production.service.impl; 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.ProductionProductInputDto; import com.ruoyi.production.mapper.ProductionProductInputMapper; import com.ruoyi.production.pojo.ProductionProductInput; import com.ruoyi.production.service.ProductionProductInputService; import lombok.AllArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service @AllArgsConstructor public class ProductionProductInputServiceImpl extends ServiceImpl<ProductionProductInputMapper, ProductionProductInput> implements ProductionProductInputService { @Autowired private ProductionProductInputMapper productionProductInputMapper; @Override public IPage<ProductionProductInputDto> listPageProductionProductInputDto(Page page, ProductionProductInputDto productionProductInputDto) { return productionProductInputMapper.listPageProductionProductInputDto(page, productionProductInputDto); } } src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
@@ -1,19 +1,23 @@ 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.basic.mapper.ProductModelMapper; import com.ruoyi.production.controller.ProductWorkOrderController; import com.ruoyi.production.dto.ProcessRouteItemDto; import com.ruoyi.production.dto.ProductOrderDto; import com.ruoyi.production.dto.ProductionProductMainDto; import com.ruoyi.production.mapper.ProcessRouteItemMapper; import com.ruoyi.production.mapper.ProductionProductMainMapper; import com.ruoyi.production.pojo.ProductionProductMain; import com.ruoyi.production.mapper.*; import com.ruoyi.production.pojo.*; import com.ruoyi.production.service.ProductionProductMainService; import lombok.AllArgsConstructor; 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 @@ -21,9 +25,63 @@ public class ProductionProductMainServiceImpl extends ServiceImpl<ProductionProductMainMapper, ProductionProductMain> implements ProductionProductMainService { @Autowired private ProductionProductMainMapper productionProductMainMapper; @Autowired private ProductWorkOrderController productWorkOrderController; @Autowired private ProductWorkOrderMapper productWorkOrderMapper; @Autowired private ProductProcessRouteItemMapper productProcessRouteItemMapper; @Autowired private ProductionProductOutputMapper productionProductOutputMapper; @Autowired private ProcessRouteItemMapper processRouteItemMapper; @Autowired private ProductModelMapper productModelMapper; @Override public IPage<ProductionProductMainDto> listPageProductionProductMainDto(Page page, ProductionProductMainDto productionProductMainDto) { return productionProductMainMapper.listPageProductionProductMainDto(page, productionProductMainDto); } @Override public Boolean addProductMain(ProductionProductMainDto productionProductMainDto) { ProductionProductMain productionProductMain = new ProductionProductMain(); ProductProcessRouteItem productProcessRouteItem = productProcessRouteItemMapper.selectById(productionProductMainDto.getProductProcessRouteItemId()); String datePrefix = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")); // æ¥è¯¢ä»æ¥å·²åå¨çæå¤§å·¥åå· QueryWrapper<ProductionProductMain> queryWrapper = new QueryWrapper<>(); queryWrapper.likeRight("work_order_no", datePrefix) .orderByDesc("work_order_no") .last("LIMIT 1"); ProductionProductMain lastWorkOrder = productionProductMainMapper.selectOne(queryWrapper); int sequenceNumber = 1; // é»è®¤åºå· if (lastWorkOrder != null && lastWorkOrder.getProductNo() != null) { String lastNo = lastWorkOrder.getProductNo().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); productionProductMain.setProductNo(workOrderNoStr); productionProductMain.setUserId(productionProductMainDto.getUserId()); productionProductMain.setProductProcessRouteItemId(productionProductMainDto.getProductProcessRouteItemId()); productionProductMain.setStatus(0); //æ·»å æ¥å·¥ä¸»è¡¨ productionProductMainMapper.insert(productionProductMain); ProductionProductOutput productionProductOutput = new ProductionProductOutput(); productionProductOutput.setProductMainId(productionProductMain.getId()); productionProductOutput.setProductModelId(productProcessRouteItem.getProductModelId()); productionProductOutput.setQuantity(productionProductMainDto.getQuantity()); //æ·»å äº§åº productionProductOutputMapper.insert(productionProductOutput); return true; } } src/main/java/com/ruoyi/production/service/impl/ProductionProductOutputServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,24 @@ package com.ruoyi.production.service.impl; 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.ProductionProductOutputDto; import com.ruoyi.production.mapper.ProductionProductOutputMapper; import com.ruoyi.production.pojo.ProductionProductOutput; import com.ruoyi.production.service.ProductionProductOutputService; import lombok.AllArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service @AllArgsConstructor public class ProductionProductOutputServiceImpl extends ServiceImpl<ProductionProductOutputMapper, ProductionProductOutput> implements ProductionProductOutputService { @Autowired private ProductionProductOutputMapper productionProductOutputMapper; @Override public IPage<ProductionProductOutputDto> listPageProductionProductOutputDto(Page page, ProductionProductOutputDto productionProductOutputDto) { return productionProductOutputMapper.listPageProductionProductOutputDto(page, productionProductOutputDto); } } src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java
@@ -9,6 +9,7 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.io.Serializable; import java.math.BigDecimal; import java.time.LocalDateTime; @@ -20,7 +21,7 @@ */ @TableName("sales_ledger_product") @Data public class SalesLedgerProduct { public class SalesLedgerProduct implements Serializable { private static final long serialVersionUID = 1L; /** src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
@@ -367,15 +367,19 @@ return 0; } // å é¤éå®ç®¡çæ°æ® // 1. å å é¤åè¡¨æ°æ® LambdaQueryWrapper<SalesLedgerProduct> productWrapper = new LambdaQueryWrapper<>(); productWrapper.in(SalesLedgerProduct::getSalesLedgerId, idList); salesLedgerProductMapper.delete(productWrapper); LambdaQueryWrapper<SalesLedgerProduct> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.in(SalesLedgerProduct::getSalesLedgerId, idList) .select(SalesLedgerProduct::getId); List<SalesLedgerProduct> products = salesLedgerProductMapper.selectList(queryWrapper); List<Long> productIds = products.stream() .map(SalesLedgerProduct::getId) .collect(Collectors.toList()); //æ¹éæ¥è¯¢productOrder List<ProductOrder> productOrders = productOrderMapper.selectList( new LambdaQueryWrapper<ProductOrder>() .in(ProductOrder::getProductModelId, idList) .in(ProductOrder::getProductModelId, productIds) ); if (!org.springframework.util.CollectionUtils.isEmpty(productOrders)) { @@ -405,7 +409,12 @@ // æ¹éå é¤productOrder productOrderMapper.delete(new LambdaQueryWrapper<ProductOrder>() .in(ProductOrder::getProductModelId, idList)); .in(ProductOrder::getProductModelId, productIds)); } // æ¹éå é¤äº§åå表 if (!productIds.isEmpty()) { salesLedgerProductMapper.deleteBatchIds(productIds); } LambdaQueryWrapper<InvoiceRegistrationProduct> wrapper = new LambdaQueryWrapper<>(); @@ -635,11 +644,13 @@ 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); int insert = productProcessRouteItemMapper.insert(productProcessRouteItem); if (insert > 0) { // æ¥è¯¢ä»æ¥å·²åå¨çæå¤§å·¥åå· @@ -670,6 +681,7 @@ productWorkOrder.setStatus(1); productWorkOrderMapper.insert(productWorkOrder); } dragSort++; } productOrder.setRouteId(processRoute.getId()); productOrderMapper.updateById(productOrder); src/main/resources/mapper/production/ProductProcessRouteItemMapper.xml
@@ -21,7 +21,7 @@ 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} order by ppri.id order by ppri.drag_sort </select> src/main/resources/mapper/production/ProductionProductInputMapper.xml
@@ -2,5 +2,27 @@ "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.ruoyi.production.mapper.ProductionProductInputMapper"> <resultMap id="basicMap" type="com.ruoyi.production.pojo.ProductionProductInput"> <id property="id" column="id"/> <result property="productMainId" column="product_main_id"/> <result property="productModelId" column="product_model_id"/> <result property="quantity" column="quantity"/> <result property="tenantId" column="tenant_id"/> <result property="createTime" column="create_time"/> </resultMap> <select id="listPageProductionProductInputDto" resultType="com.ruoyi.production.dto.ProductionProductInputDto"> select ppi.*, pm.model as model, ppm.product_no as productNo from production_product_input ppi left join production_product_main ppm on ppm.id = ppi.product_main_id left join product_model pm on pm.id = ppi.product_model_id <where> <if test="c.productMainId != null and c.productMainId > 0"> and ppm.id = #{c.productMainId} </if> </where> order by ppi.id </select> </mapper> src/main/resources/mapper/production/ProductionProductOutputMapper.xml
@@ -2,5 +2,27 @@ "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.ruoyi.production.mapper.ProductionProductOutputMapper"> <resultMap id="basicMap" type="com.ruoyi.production.pojo.ProductionProductOutput"> <id property="id" column="id"/> <result property="productMainId" column="product_main_id"/> <result property="productModelId" column="product_model_id"/> <result property="quantity" column="quantity"/> <result property="tenantId" column="tenant_id"/> <result property="createTime" column="create_time"/> </resultMap> <select id="listPageProductionProductOutputDto" resultType="com.ruoyi.production.dto.ProductionProductOutputDto"> select ppo.*, pm.model as model, ppm.product_no as productNo from production_product_output ppo left join production_product_main ppm on ppm.id = ppo.product_main_id left join product_model pm on pm.id = ppo.product_model_id <where> <if test="c.productMainId != null and c.productMainId > 0"> and ppm.id = #{c.productMainId} </if> </where> order by ppo.id </select> </mapper>