liyong
5 天以前 1125327095d325c9b248b3b72be7bc167e0b31d0
feat(production): 生产报工
已修改9个文件
96 ■■■■■ 文件已修改
doc/create_table_process_route_item.sql 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/controller/ProductionProductMainController.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/dto/ProductionProductMainDto.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/pojo/ProcessRouteItem.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/pojo/ProductionProductInput.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/pojo/ProductionProductMain.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/pojo/ProductionProductOutput.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/service/ProductionProductMainService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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/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/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/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/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,6 +11,7 @@
import java.time.LocalDateTime;
@Data
@TableName("production_product_input")
public class ProductionProductInput {
    @TableId
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
@@ -21,12 +23,13 @@
    private Long userId;
    @ApiModelProperty(value = "工单id")
    private String workOrderId;
    private String productProcessRouteItemId;
    @ApiModelProperty(value = "报工状态")
    private Integer status;
    @ApiModelProperty(value = "创建时间")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @ApiModelProperty(value = "租户ID")
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,6 +11,7 @@
import java.time.LocalDateTime;
@Data
@TableName("production_product_input")
public class ProductionProductOutput {
    @TableId
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/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;
    }
}