liyong
2026-04-23 a5e08addf5745b587d54c7536996259d5505261a
Merge remote-tracking branch 'origin/dev_天津_阳光彩印' into dev_天津_阳光彩印
已添加10个文件
已修改7个文件
496 ■■■■■ 文件已修改
src/main/java/com/ruoyi/production/controller/ProductOrderController.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/dto/MaterialInfoDto.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/dto/PlateMakingDto.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/dto/ProcessContentDto.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/dto/ProductOrderDto.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/dto/ProductionPrintOrderDto.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/dto/SaveProductionPrintOrderDto.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/mapper/ProductionPrintOrderMapper.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/pojo/ProductWorkOrder.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/pojo/ProductionPrintOrder.java 219 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/service/ProductOrderService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/service/ProductionPrintOrderService.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/service/impl/ProductionPrintOrderServiceImpl.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/production/ProductOrderMapper.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/production/ProductionPrintOrderMapper.xml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/controller/ProductOrderController.java
@@ -75,4 +75,10 @@
    public R delete(@PathVariable("ids") Long[] ids) {
        return R.ok(productOrderService.delete(ids));
    }
    @ApiOperation("开始报工")
    @PostMapping("/startProduction/{id}")
    public R startProduction(@PathVariable("id") Long id) {
        return R.ok(productOrderService.startProduction(id));
    }
}
src/main/java/com/ruoyi/production/dto/MaterialInfoDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
package com.ruoyi.production.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
 * @author buhuazhen
 * @date 2026/4/22
 * @email 3038525872@qq.com
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class MaterialInfoDto implements Serializable {
    private Long id;
    private String name;
    private String model;
    private String num;
    private String numSuffix = "å¼ ";
    private String unit;
    private String unitSuffix = "元/kg";
    private String price;
    private String totalAmount;
}
src/main/java/com/ruoyi/production/dto/PlateMakingDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
package com.ruoyi.production.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
 * åˆ¶ç‰ˆDTO
 * @author buhuazhen
 * @date 2026/4/22
 * @email 3038525872@qq.com
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class PlateMakingDto implements Serializable {
    private String designProductionFee;   // è®¾è®¡åˆ¶ä½œè´¹
    private String impositionFee;         // æ‹¼ç‰ˆè´¹
    private String filmOutputFee;         // å‡ºç‰‡è´¹
    private String proofingFee;           // æ‰“æ ·è´¹
    private String doctorBladePlateFee;   // åˆ®åˆ€ç‰ˆè´¹
    private String hotEmbossingPlateFee;  // çƒ«/凸版费
    private String subtotalFee;           // å°è®¡
}
src/main/java/com/ruoyi/production/dto/ProcessContentDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,25 @@
package com.ruoyi.production.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
 * å·¥åºåР工内容Dto
 * @author buhuazhen
 * @date 2026/4/22
 * @email 3038525872@qq.com
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ProcessContentDto implements Serializable {
    private String id;
    private Long processId;             // å·¥åºid
    private String processContent;    // å·¥è‰ºåР工内容
    private String openCount;         // å¼€æ•°
    private String processPositive;   // å·¥è‰ºæ­£æ•°
    private String allowanceQty;      // åŠ æ”¾æ•°
}
src/main/java/com/ruoyi/production/dto/ProductOrderDto.java
@@ -57,4 +57,6 @@
    //是否发货(台账页面颜色控制)
    private Boolean isFh;
    private Long saleLedgerId;
}
src/main/java/com/ruoyi/production/dto/ProductionPrintOrderDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
package com.ruoyi.production.dto;
import com.ruoyi.production.pojo.ProductionPrintOrder;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
 * @author buhuazhen
 * @date 2026/4/22
 * @email 3038525872@qq.com
 */
@EqualsAndHashCode(callSuper = true)
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ProductionPrintOrderDto extends ProductionPrintOrder implements Serializable {
}
src/main/java/com/ruoyi/production/dto/SaveProductionPrintOrderDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
package com.ruoyi.production.dto;
import com.ruoyi.production.pojo.ProductionPrintOrder;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
 * ç”¨äºŽä¿å­˜çš„dto
 * @author buhuazhen
 * @date 2026/4/22
 * @email 3038525872@qq.com
 */
@EqualsAndHashCode(callSuper = true)
@Data
@AllArgsConstructor
@NoArgsConstructor
public class SaveProductionPrintOrderDto extends ProductionPrintOrder implements Serializable {
    private String notNeed;
}
src/main/java/com/ruoyi/production/mapper/ProductionPrintOrderMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
package com.ruoyi.production.mapper;
import com.ruoyi.production.pojo.ProductionPrintOrder;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @author buhuazhen
* @description é’ˆå¯¹è¡¨ã€production_print_order(印刷定印单)】的数据库操作Mapper
* @createDate 2026-04-22 15:14:51
* @Entity com.ruoyi.production.pojo.ProductionPrintOrder
*/
public interface ProductionPrintOrderMapper extends BaseMapper<ProductionPrintOrder> {
}
src/main/java/com/ruoyi/production/pojo/ProductWorkOrder.java
@@ -129,4 +129,15 @@
    @TableField(fill = FieldFill.INSERT)
    private Long deptId;
    // å¼€å§‹æŠ¥å·¥
    @TableField(value = "start_product_time")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime startProductTime;
    // ç»“束报工
    @TableField(value = "end_product_time")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime endProductTime;
}
src/main/java/com/ruoyi/production/pojo/ProductionPrintOrder.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,219 @@
package com.ruoyi.production.pojo;
import com.baomidou.mybatisplus.annotation.*;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.List;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import com.ruoyi.production.dto.MaterialInfoDto;
import com.ruoyi.production.dto.PlateMakingDto;
import com.ruoyi.production.dto.ProcessContentDto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * å°åˆ·å®šå°å•
 * @TableName production_print_order
 */
@TableName(value ="production_print_order",autoResultMap = true)
@Data
public class ProductionPrintOrder implements Serializable {
    /**
     *
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    /**
     * å¯¹åº”的销售订单
     */
    @TableField(value = "sales_ledger_id")
    private Long salesLedgerId;
    /**
     * å¯¹åº”的生产工单
     */
    @TableField(value = "product_order")
    private Long productOrder;
    /**
     * åˆ¶å•日期
     */
    @TableField(value = "print_order_time")
    private LocalDateTime printOrderTime;
    /**
     * å®Œæˆæ—¥æœŸ
     */
    @TableField(value = "finish_time")
    private LocalDateTime finishTime;
    /**
     * ç¼–号 åº”该为sale的合同号
     */
    @TableField(value = "no")
    private String no;
    /**
     * æˆå“å°ºå¯¸
     */
    @TableField(value = "finished_size")
    private String finishedSize;
    /**
     * ä»‹ç»ä¿¡ å­˜åœ¨ , è¡¨ç¤ºå¤šä¸ª
     */
    @TableField(value = "introduction_letter")
    private String introductionLetter;
    /**
     * äº§å“åç§°
     */
    @TableField(value = "product_name")
    private String productName;
    /**
     * äº§å“è¯´æ˜Ž
     */
    @TableField(value = "product_description")
    private String productDescription;
    /**
     * åˆ‡æ–™å°ºå¯¸
     */
    @TableField(value = "cut_size")
    private String cutSize;
    /**
     * åˆ‡æ–™å°ºå¯¸æ•°é‡
     */
    @TableField(value = "cut_num")
    private String cutNum;
    /**
     * æ­£æ•°
     */
    @TableField(value = "positive_qty")
    private String positiveQty;
    /**
     * åŠ æ”¾æ•°
     */
    @TableField(value = "allowance_qty")
    private String allowanceQty;
    /**
     * åˆ¶ç‰ˆ
     */
    @TableField(value = "plate_making",typeHandler = JacksonTypeHandler.class)
    private List<PlateMakingDto> plateMaking;
    /**
     * å·¥åºåР工内容
     */
    @TableField(value = "process_content",typeHandler = JacksonTypeHandler.class)
    private List<ProcessContentDto> processContent;
    /**
     * ææ–™ä¿¡æ¯
     */
    @TableField(value = "material_info",typeHandler = JacksonTypeHandler.class)
    private List<MaterialInfoDto> materialInfo;
    /**
     * å·¥è‰ºè¦æ±‚
     */
    @TableField(value = "process_requirement")
    private String processRequirement;
    /**
     * é€è´§åœ°ç‚¹
     */
    @TableField(value = "delivery_address")
    private String deliveryAddress;
    /**
     * è”系人
     */
    @TableField(value = "contact_name")
    private String contactName;
    /**
     * åŒ…装要求
     */
    @TableField(value = "packaging_requirement")
    private String packagingRequirement;
    /**
     * åŠ å·¥åŽå°ºå¯¸
     */
    @TableField(value = "post_process_size")
    private String postProcessSize;
    /**
     * è®¢è´§æ•°é‡
     */
    @TableField(value = "order_qty")
    private String orderQty;
    /**
     * å®žé™…交付数量
     */
    @TableField(value = "actual_delivery_qty")
    private String actualDeliveryQty;
    /**
     * ç”Ÿäº§éƒ¨é—¨
     */
    @TableField(value = "production_dept")
    private String productionDept;
    /**
     * æŠ€æœ¯éƒ¨
     */
    @TableField(value = "technical_dept")
    private String technicalDept;
    /**
     * åº“房
     */
    @TableField(value = "warehouse_dept")
    private String warehouseDept;
    /**
     *
     */
    @TableField(value = "create_time")
    private LocalDateTime createTime;
    /**
     *
     */
    @TableField(value = "update_time")
    private LocalDateTime updateTime;
    @TableField(exist = false)
    private static final long serialVersionUID = 1L;
    /**
     *
     */
    @TableField(value = "create_user",fill = FieldFill.INSERT)
    @ApiModelProperty(value="创建人")
    private Integer createUser;
    /**
     *
     */
    @TableField(value = "update_user",fill = FieldFill.INSERT_UPDATE)
    @ApiModelProperty(value="更新人")
    private Integer updateUser;
    @TableField(value = "create_user_name", fill = FieldFill.INSERT)
    private String createUserName;
    @TableField(value = "update_user_name", fill = FieldFill.INSERT_UPDATE)
    private String updateUserName;
}
src/main/java/com/ruoyi/production/service/ProductOrderService.java
@@ -8,6 +8,7 @@
import com.ruoyi.production.dto.ProductStructureDto;
import com.ruoyi.production.pojo.ProcessRoute;
import com.ruoyi.production.pojo.ProductOrder;
import com.ruoyi.production.pojo.ProductWorkOrder;
import java.util.List;
@@ -25,4 +26,10 @@
    Boolean addProductOrder(ProductOrder productOrder);
    Boolean delete(Long[] id);
    /**
     * å¼€å§‹æŠ¥å·¥
     * @param id
     */
    ProductWorkOrder startProduction(Long id);
}
src/main/java/com/ruoyi/production/service/ProductionPrintOrderService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
package com.ruoyi.production.service;
import com.ruoyi.production.dto.SaveProductionPrintOrderDto;
import com.ruoyi.production.pojo.ProductionPrintOrder;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @author buhuazhen
* @description é’ˆå¯¹è¡¨ã€production_print_order(印刷定印单)】的数据库操作Service
* @createDate 2026-04-22 15:14:51
*/
public interface ProductionPrintOrderService extends IService<ProductionPrintOrder> {
    /**
     * ä¿å­˜
     * @param dto
     */
    void save(SaveProductionPrintOrderDto dto);
}
src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java
@@ -1,6 +1,7 @@
package com.ruoyi.production.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.Assert;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -23,6 +24,7 @@
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.HashMap;
import java.util.List;
@@ -157,6 +159,22 @@
        return true;
    }
    @Override
    public ProductWorkOrder startProduction(Long id) {
        LocalDateTime now = LocalDateTime.now();
        ProductWorkOrder productWorkOrder = productWorkOrderMapper.selectById(id);
        productWorkOrder.setStartProductTime(now);
        Assert.notNull(productWorkOrder, "工单不存在");
        ProductWorkOrder needUpdate = new ProductWorkOrder();
        needUpdate.setId(id);
        needUpdate.setStartProductTime(now);
        productWorkOrderMapper.updateById(needUpdate);
        return productWorkOrder;
    }
    //获取当前生产订单号
    public String getMaxOrderNoByDate(String datePrefix) {
        QueryWrapper<ProductOrder> queryWrapper = new QueryWrapper<>();
src/main/java/com/ruoyi/production/service/impl/ProductionPrintOrderServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,49 @@
package com.ruoyi.production.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.production.dto.ProcessContentDto;
import com.ruoyi.production.dto.SaveProductionPrintOrderDto;
import com.ruoyi.production.pojo.ProductionPrintOrder;
import com.ruoyi.production.service.ProductionPrintOrderService;
import com.ruoyi.production.mapper.ProductionPrintOrderMapper;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
* @author buhuazhen
* @description é’ˆå¯¹è¡¨ã€production_print_order(印刷定印单)】的数据库操作Service实现
* @createDate 2026-04-22 15:14:51
*/
@Service
@RequiredArgsConstructor
public class ProductionPrintOrderServiceImpl extends ServiceImpl<ProductionPrintOrderMapper, ProductionPrintOrder>
    implements ProductionPrintOrderService{
    private final ProductionPrintOrderMapper productionPrintOrderMapper;
    @Override
    @Transactional
    public void save(SaveProductionPrintOrderDto dto) {
        ProductionPrintOrder productionPrintOrder = BeanUtil.copyProperties(dto, ProductionPrintOrder.class);
        List<ProcessContentDto> processContentDtoList = productionPrintOrder.getProcessContent();
        // ç»™æ²¡æœ‰id的信息设置uuid
        processContentDtoList.forEach(processContentDto -> {
            if (StrUtil.isBlank(processContentDto.getId())) {
                processContentDto.setId(IdUtil.simpleUUID());
            }
        });
        int i = dto.getId() == null ? productionPrintOrderMapper.insert(productionPrintOrder) : productionPrintOrderMapper.updateById(productionPrintOrder);
    }
}
src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
@@ -101,6 +101,9 @@
    @Override
    @Transactional(rollbackFor = Exception.class)
    public Boolean addProductMain(ProductionProductMainDto dto) {
        LocalDateTime now = LocalDateTime.now();
        ProductWorkOrder productWorkOrder = productWorkOrderMapper.selectById(dto.getWorkOrderId());
        SysUser user = userMapper.selectUserById(dto.getUserId());
        ProductionProductMain productionProductMain = new ProductionProductMain();
        //当前工艺路线对应的工序详情
@@ -159,8 +162,8 @@
        productionProductMain.setAuditUserId(dto.getAuditUserId());
        productionProductMain.setAuditUserName(dto.getAuditUserName());
        productionProductMain.setStatus(0);
        productionProductMain.setStartTime(dto.getStartTime());
        productionProductMain.setEndTime(dto.getEndTime());
        productionProductMain.setStartTime(productWorkOrder.getStartProductTime());
        productionProductMain.setEndTime(now);
        productionProductMain.setDeviceId(productProcess.getDeviceId());
        productionProductMain.setDeviceName(productProcess.getDeviceName());
        productionProductMainMapper.insert(productionProductMain);
@@ -197,7 +200,6 @@
        if (productQty.compareTo(BigDecimal.ZERO) > 0) {
            List<ProductProcessRouteItem> productProcessRouteItems = productProcessRouteItemMapper.selectList(Wrappers.<ProductProcessRouteItem>lambdaQuery().eq(ProductProcessRouteItem::getProductRouteId, productProcessRouteItem.getProductRouteId()));
            /*更新工单和生产订单*/
            ProductWorkOrder productWorkOrder = productWorkOrderMapper.selectById(dto.getWorkOrderId());
            productWorkOrder.setCompleteQuantity(productWorkOrder.getCompleteQuantity().add(productQty));
            if (ObjectUtils.isNull(productWorkOrder.getActualStartTime())) {
                productWorkOrder.setActualStartTime(LocalDate.now());//实际开始时间
@@ -205,17 +207,18 @@
            if (productWorkOrder.getCompleteQuantity().compareTo(productWorkOrder.getPlanQuantity()) == 0) {
                productWorkOrder.setActualEndTime(LocalDate.now());//实际结束时间
            }
            productWorkOrder.setEndProductTime(now);
            productWorkOrderMapper.updateById(productWorkOrder);
            //生产订单
            ProductOrder productOrder = productOrderMapper.selectById(productWorkOrder.getProductOrderId());
            if (ObjectUtils.isNull(productOrder.getStartTime())) {
                productOrder.setStartTime(LocalDateTime.now());//开始时间
                productOrder.setStartTime(now);//开始时间
            }
            if (productProcessRouteItem.getDragSort() == productProcessRouteItems.size()) {
                //如果是最后一道工序报工之后生产订单完成数量+
                productOrder.setCompleteQuantity(productOrder.getCompleteQuantity().add(productQty));
                if (productOrder.getCompleteQuantity().compareTo(productOrder.getQuantity()) == 0) {
                    productOrder.setEndTime(LocalDateTime.now());//结束时间
                    productOrder.setEndTime(now);//结束时间
                }
            }
            productOrderMapper.updateById(productOrder);
src/main/resources/mapper/production/ProductOrderMapper.xml
@@ -22,6 +22,7 @@
        pm.unit,
        ppr.process_route_code,
        pb.bom_no,
        sl.id as sales_ledger_id,
        ROUND(po.complete_quantity / po.quantity * 100, 2) AS completionStatus,
        DATEDIFF(sl.delivery_date, CURDATE()) AS delivery_days_diff,
        sl.delivery_date,
src/main/resources/mapper/production/ProductionPrintOrderMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
<?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.ProductionPrintOrderMapper">
</mapper>