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>