src/main/java/com/ruoyi/other/controller/TempFileController.java
@@ -8,10 +8,7 @@ import com.ruoyi.purchase.service.ITicketRegistrationService; import com.ruoyi.purchase.service.impl.TicketRegistrationServiceImpl; import lombok.AllArgsConstructor; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; @@ -25,7 +22,7 @@ private TicketRegistrationServiceImpl ticketRegistrationServiceImpl; @PostMapping("/upload") public AjaxResult uploadFile(MultipartFile file, Integer type) { public AjaxResult uploadFile(MultipartFile file, @RequestParam(required = false) Integer type) { try { return AjaxResult.success(tempFileService.uploadFile(file, type)); } catch (Exception e) { src/main/java/com/ruoyi/other/service/impl/TempFileServiceImpl.java
@@ -165,7 +165,7 @@ } } // @Scheduled(cron = "0 0 3 * * ?") // æ¯å¤©åæ¨3ç¹æ§è¡ @Scheduled(cron = "0 0 3 * * ?") // æ¯å¤©åæ¨3ç¹æ§è¡ public void cleanupExpiredTempFiles() { LambdaQueryWrapper<TempFile> wrapper = new LambdaQueryWrapper<>(); wrapper.lt(TempFile::getExpireTime, LocalDateTime.now()); // expireTime < å½åæ¶é´ src/main/java/com/ruoyi/production/controller/ProductionProductRouteItemController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,20 @@ package com.ruoyi.production.controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * <p> * ç产æ¥å·¥è®°å½çå·¥åºè¡¨(å å«å²ä½äººå+设å¤å¼å¸¸å¤ç½®+å·¥èºäººåäº¤å¾ ) å端æ§å¶å¨ * </p> * * @author deslrey * @since 2026-03-23 */ @RestController @RequestMapping("/production-product-route-item") public class ProductionProductRouteItemController { } src/main/java/com/ruoyi/production/controller/ProductionProductRouteItemFileController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,37 @@ package com.ruoyi.production.controller; import com.ruoyi.framework.web.domain.AjaxResult; import com.ruoyi.production.service.IProductionProductRouteItemFileService; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * <p> * ç产æ¥å·¥è®°å½çå·¥åºé件表 å端æ§å¶å¨ * </p> * * @author deslrey * @since 2026-03-23 */ @RestController @RequestMapping("/productionProductRouteItemFile") public class ProductionProductRouteItemFileController { @Autowired private IProductionProductRouteItemFileService productionProductRouteItemFileService; @DeleteMapping("/{fileId}") @ApiOperation("ç产æ¥å·¥-å é¤éä»¶") public AjaxResult deleteFile(@PathVariable Long fileId) { productionProductRouteItemFileService.deleteFile(fileId); return AjaxResult.success(); } } src/main/java/com/ruoyi/production/controller/ProductionProductRouteItemParamController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,20 @@ package com.ruoyi.production.controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * <p> * ç产æ¥å·¥è®°å½å·¥åºçåæ°æç»è¡¨ å端æ§å¶å¨ * </p> * * @author deslrey * @since 2026-03-23 */ @RestController @RequestMapping("/production-product-route-item-param") public class ProductionProductRouteItemParamController { } src/main/java/com/ruoyi/production/controller/ProductionRecordController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,48 @@ package com.ruoyi.production.controller; import com.ruoyi.framework.web.domain.AjaxResult; import com.ruoyi.production.dto.ProductionRecordDto; import com.ruoyi.production.service.ProductionRecordService; import com.ruoyi.production.vo.ProductionRecordVo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import java.util.ArrayList; import java.util.List; /** * <br> * ç产æ¥å·¥è®°å½æ§å¶å± * </br> * * @author deslrey * @since 2026/03/23 */ @RestController @RequestMapping("/productionRecord") @ApiModel(value = "ProductionRecordController", description = "ç产æ¥å·¥è®°å½æ§å¶å±") public class ProductionRecordController { @Autowired private ProductionRecordService productionRecordService; @GetMapping("/add/{productOrderId}") @ApiOperation("ç产æ¥å·¥-æ ¹æ®ç产订åIDè·åå·¥èºè·¯çº¿çå·¥åºãBOM") public AjaxResult productRouteItem(@PathVariable Long productOrderId) { ProductionRecordVo vo = productionRecordService.productRouteItem(productOrderId); return AjaxResult.success(vo); } @PostMapping("/add") @ApiOperation("ç产æ¥å·¥-æ°å¢") public AjaxResult addProductionRecordService(@RequestBody ProductionRecordDto dto) { productionRecordService.addProductionRecordService(dto); return AjaxResult.success(); } } src/main/java/com/ruoyi/production/dto/ProductionProductMainDto.java
@@ -6,13 +6,14 @@ import com.ruoyi.production.pojo.ProductionProductMain; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; import org.springframework.format.annotation.DateTimeFormat; import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; @Data @EqualsAndHashCode(callSuper = true) @ExcelIgnoreUnannotated public class ProductionProductMainDto extends ProductionProductMain { @ApiModelProperty(value = "å·¥åç¼å·") @@ -61,5 +62,15 @@ private BigDecimal workHours; private BigDecimal wages; @ApiModelProperty(value = "ç产订åå·") @Excel(name = "ç产订åå·") private String npsNo; @ApiModelProperty(value = "产åç¼ç ") @Excel(name = "产åç¼ç ") private String materialCode; @ApiModelProperty(value = "äº§åºæ¹é") @Excel(name = "äº§åºæ¹é") private BigDecimal totalQuantity; } src/main/java/com/ruoyi/production/dto/ProductionProductRouteItemDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,29 @@ package com.ruoyi.production.dto; import com.ruoyi.production.pojo.ProductionProductRouteItem; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; import java.util.List; /** * <br> * ç产æ¥å·¥è®°å½çå·¥åºè¡¨(å å«å²ä½äººå+设å¤å¼å¸¸å¤ç½®+å·¥èºäººåäº¤å¾ )Dto * </br> * * @author deslrey * @version 1.0 * @since 2026/03/23 11:01 */ @Data @EqualsAndHashCode(callSuper = false) public class ProductionProductRouteItemDto extends ProductionProductRouteItem { @ApiModelProperty("å·¥åºç»å®çåæ°ä¿¡æ¯") private List<ProductionProductRouteItemParamDto> productionProductRouteItemParamDtoList; @ApiModelProperty("å·¥åºä¸´æ¶éä»¶ID") private List<String> files; } src/main/java/com/ruoyi/production/dto/ProductionProductRouteItemFileDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,19 @@ package com.ruoyi.production.dto; import com.ruoyi.production.pojo.ProductionProductRouteItemFile; import lombok.Data; import lombok.EqualsAndHashCode; /** * <br> * ç产æ¥å·¥è®°å½çå·¥åºé件表Dto * </br> * * @author deslrey * @version 1.0 * @since 2026/03/23 11:01 */ @Data @EqualsAndHashCode(callSuper = false) public class ProductionProductRouteItemFileDto extends ProductionProductRouteItemFile { } src/main/java/com/ruoyi/production/dto/ProductionProductRouteItemParamDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,19 @@ package com.ruoyi.production.dto; import com.ruoyi.production.pojo.ProductionProductRouteItemParam; import lombok.Data; import lombok.EqualsAndHashCode; /** * <br> * ç产æ¥å·¥è®°å½å·¥åºçåæ°æç»è¡¨Dto * </br> * * @author deslrey * @version 1.0 * @since 2026/03/23 11:01 */ @Data @EqualsAndHashCode(callSuper = false) public class ProductionProductRouteItemParamDto extends ProductionProductRouteItemParam { } src/main/java/com/ruoyi/production/dto/ProductionRecordDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,51 @@ package com.ruoyi.production.dto; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.List; /** * <br> * ç产æ¥å·¥è®°å½Dto * </br> * * @author deslrey * @version 1.0 * @since 2026/03/23 10:30 */ @Data @ApiModel(value = "ProductionRecordDto", description = "ç产æ¥å·¥è®°å½Dto") public class ProductionRecordDto { @ApiModelProperty("ç产订åID") private Long productOrderId; @ApiModelProperty("产åID") private Long productId; @ApiModelProperty(value = "å²ä½äººå") private String postName; @ApiModelProperty(value = "çæ¬¡") private String schedule; @ApiModelProperty(value = "çæ¬¡æ¥æ") private LocalDateTime reportingTime; @ApiModelProperty("åæ ¼æ°é") private BigDecimal qualifiedQuantity; @ApiModelProperty("ä¸åæ ¼æ°é") private BigDecimal unqualifiedQuantity; @ApiModelProperty("äº§åºæ°é") private BigDecimal quantity; @ApiModelProperty("å·¥èºè·¯çº¿ç»å®çå·¥åº") private List<ProductionProductRouteItemDto> productionProductRouteItemDtoList; } src/main/java/com/ruoyi/production/mapper/ProductionProductRouteItemFileMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,16 @@ package com.ruoyi.production.mapper; import com.ruoyi.production.pojo.ProductionProductRouteItemFile; import com.baomidou.mybatisplus.core.mapper.BaseMapper; /** * <p> * ç产æ¥å·¥è®°å½çå·¥åºé件表 Mapper æ¥å£ * </p> * * @author deslrey * @since 2026-03-23 */ public interface ProductionProductRouteItemFileMapper extends BaseMapper<ProductionProductRouteItemFile> { } src/main/java/com/ruoyi/production/mapper/ProductionProductRouteItemMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,16 @@ package com.ruoyi.production.mapper; import com.ruoyi.production.pojo.ProductionProductRouteItem; import com.baomidou.mybatisplus.core.mapper.BaseMapper; /** * <p> * ç产æ¥å·¥è®°å½çå·¥åºè¡¨(å å«å²ä½äººå+设å¤å¼å¸¸å¤ç½®+å·¥èºäººåäº¤å¾ ) Mapper æ¥å£ * </p> * * @author deslrey * @since 2026-03-23 */ public interface ProductionProductRouteItemMapper extends BaseMapper<ProductionProductRouteItem> { } src/main/java/com/ruoyi/production/mapper/ProductionProductRouteItemParamMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,16 @@ package com.ruoyi.production.mapper; import com.ruoyi.production.pojo.ProductionProductRouteItemParam; import com.baomidou.mybatisplus.core.mapper.BaseMapper; /** * <p> * ç产æ¥å·¥è®°å½å·¥åºçåæ°æç»è¡¨ Mapper æ¥å£ * </p> * * @author deslrey * @since 2026-03-23 */ public interface ProductionProductRouteItemParamMapper extends BaseMapper<ProductionProductRouteItemParam> { } src/main/java/com/ruoyi/production/pojo/ProductionProductMain.java
@@ -33,7 +33,6 @@ private Long workOrderId; @ApiModelProperty(value = "ç产订åid") @TableField(exist = false) private Long productOrderId; @ApiModelProperty(value = "æ¥å·¥ç¶æ") @@ -55,4 +54,16 @@ @ApiModelProperty(value = "ç§æ·ID") @TableField(fill = FieldFill.INSERT) private Long tenantId; @ApiModelProperty(value = "å²ä½äººå") private String postName; @ApiModelProperty(value = "çæ¬¡") private String schedule; @ApiModelProperty(value = "çæ¬¡æ¥æ") @TableField(fill = FieldFill.INSERT) @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime reportingTime; } src/main/java/com/ruoyi/production/pojo/ProductionProductOutput.java
@@ -20,7 +20,7 @@ @ApiModelProperty(value = "产åid") private Long productModelId; @ApiModelProperty(value = "æ¥å·¥æ°é(æ»æ°é)") @ApiModelProperty(value = "åæ ¼æ°é") private BigDecimal quantity; @ApiModelProperty(value = "å建æ¶é´") @@ -31,6 +31,6 @@ @TableField(fill = FieldFill.INSERT) private Long tenantId; @ApiModelProperty(value = "æ¥åºæ°é") @ApiModelProperty(value = "ä¸åæ ¼æ°é") private BigDecimal scrapQty; } src/main/java/com/ruoyi/production/pojo/ProductionProductRouteItem.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,65 @@ package com.ruoyi.production.pojo; import com.baomidou.mybatisplus.annotation.*; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import java.io.Serializable; import java.time.LocalDateTime; /** * <p> * ç产æ¥å·¥è®°å½çå·¥åºè¡¨(å å«å²ä½äººå+设å¤å¼å¸¸å¤ç½®+å·¥èºäººåäº¤å¾ ) * </p> * * @author deslrey * @since 2026-03-23 */ @Data @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) @TableName("production_product_route_item") @ApiModel(value = "ProductionProductRouteItem对象", description = "ç产æ¥å·¥è®°å½çå·¥åºè¡¨(å å«å²ä½äººå+设å¤å¼å¸¸å¤ç½®+å·¥èºäººåäº¤å¾ )") public class ProductionProductRouteItem implements Serializable { private static final long serialVersionUID = 1L; @ApiModelProperty(value = "主é®ID") @TableId(value = "id", type = IdType.AUTO) private Long id; @ApiModelProperty(value = "æ¥å·¥ä¸»è¡¨ID") private Long productMainId; @ApiModelProperty(value = "å²ä½äººå") private String postName; @ApiModelProperty(value = "设å¤å¼å¸¸") private String equipmentMalfunction; @ApiModelProperty(value = "设å¤å¤ç½®") private String equipmentDisposal; @ApiModelProperty(value = "å·¥èºäººå交代") private String processExplained; @ApiModelProperty(value = "å·¥åºID") private Long processId; @ApiModelProperty(value = "åå»ºæ¥æ") @TableField(fill = FieldFill.INSERT) private LocalDateTime createTime; @ApiModelProperty(value = "æ´æ°æ¥æ") @TableField(fill = FieldFill.INSERT_UPDATE) private LocalDateTime updateTime; @ApiModelProperty(value = "ç§æ·ID") @TableField(fill = FieldFill.INSERT) private Long tenantId; } src/main/java/com/ruoyi/production/pojo/ProductionProductRouteItemFile.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,68 @@ package com.ruoyi.production.pojo; import com.baomidou.mybatisplus.annotation.*; import java.time.LocalDateTime; import java.io.Serializable; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; /** * <p> * ç产æ¥å·¥è®°å½çå·¥åºé件表 * </p> * * @author deslrey * @since 2026-03-23 */ @Data @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) @TableName("production_product_route_item_file") @ApiModel(value="ProductionProductRouteItemFile对象", description="ç产æ¥å·¥è®°å½çå·¥åºé件表") public class ProductionProductRouteItemFile implements Serializable { private static final long serialVersionUID = 1L; @ApiModelProperty(value = "主é®ID") @TableId(value = "id", type = IdType.AUTO) private Long id; @ApiModelProperty(value = "ç产æ¥å·¥è®°å½çå·¥åºè¡¨ID") private Long productionProductRouteItemId; @ApiModelProperty(value = "æä»¶åç§°") private String fileName; @ApiModelProperty(value = "æä»¶è®¿é®å°å") private String fileUrl; @ApiModelProperty(value = "æä»¶å¤§å°") private Long fileSize; @ApiModelProperty(value = "æä»¶åç¼") private String fileSuffix; @ApiModelProperty(value = "ä¸ä¼ è ") private String createUser; @ApiModelProperty(value = "å建æ¶é´") @TableField(fill = FieldFill.INSERT) private LocalDateTime createTime; @ApiModelProperty(value = "ä¿®æ¹è ") private LocalDateTime updateUser; @ApiModelProperty(value = "ä¿®æ¹æ¶é´") @TableField(fill = FieldFill.INSERT_UPDATE) private LocalDateTime updateTime; @ApiModelProperty(value = "ç§æ·ID") @TableField(fill = FieldFill.INSERT) private Long tenantId; } src/main/java/com/ruoyi/production/pojo/ProductionProductRouteItemParam.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,100 @@ package com.ruoyi.production.pojo; import java.math.BigDecimal; import com.baomidou.mybatisplus.annotation.*; import java.time.LocalDateTime; import java.io.Serializable; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; /** * <p> * ç产æ¥å·¥è®°å½å·¥åºçåæ°æç»è¡¨ * </p> * * @author deslrey * @since 2026-03-23 */ @Data @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) @TableName("production_product_route_item_param") @ApiModel(value = "ProductionProductRouteItemParam对象", description = "ç产æ¥å·¥è®°å½å·¥åºçåæ°æç»è¡¨") public class ProductionProductRouteItemParam implements Serializable { private static final long serialVersionUID = 1L; @ApiModelProperty(value = "主é®ID") @TableId(value = "id", type = IdType.AUTO) private Long id; @ApiModelProperty(value = "ç产æ¥å·¥è®°å½çå·¥åºè¡¨ID") private Long productionProductRouteItemId; @ApiModelProperty(value = "åæ°åç§°") private String paramName; @ApiModelProperty(value = "åæ°ç±»å(1æ°å 2ææ¬ 3䏿鿩 4æ¶é´)") private Integer paramType; @ApiModelProperty(value = "åæ°æ ¼å¼") private String paramFormat; @ApiModelProperty(value = "弿¨¡å¼(1åå¼ 2åºé´)") private Integer valueMode; @ApiModelProperty(value = "æ åå¼") private String standardValue; @ApiModelProperty(value = "æå°å¼") private BigDecimal minValue; @ApiModelProperty(value = "æå¤§å¼") private BigDecimal maxValue; @ApiModelProperty(value = "产åID") private Long productId; @ApiModelProperty(value = "产åæå ¥å¼") private BigDecimal productValue; @ApiModelProperty(value = "BOM ID") private BigDecimal bomId; @ApiModelProperty(value = "åä½") private String unit; @ApiModelProperty(value = "æ¯å¦å¿ å¡«(0å¦ 1æ¯)") private Boolean isRequired; @ApiModelProperty(value = "åæ°æåº") private Integer sourceSort; @ApiModelProperty(value = "产åç±»å") private Long dictCode; @ApiModelProperty(value = "ä¸ä¼ è ") private Long createUser; @ApiModelProperty(value = "å建æ¶é´") @TableField(fill = FieldFill.INSERT) private LocalDateTime createTime; @ApiModelProperty(value = "ä¿®æ¹è ") private Long updateUser; @ApiModelProperty(value = "ä¿®æ¹æ¶é´") @TableField(fill = FieldFill.INSERT_UPDATE) private LocalDateTime updateTime; @ApiModelProperty(value = "ç§æ·ID") @TableField(fill = FieldFill.INSERT) private Long tenantId; } src/main/java/com/ruoyi/production/service/IProductionProductRouteItemFileService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,17 @@ package com.ruoyi.production.service; import com.ruoyi.production.pojo.ProductionProductRouteItemFile; import com.baomidou.mybatisplus.extension.service.IService; /** * <p> * ç产æ¥å·¥è®°å½çå·¥åºé件表 æå¡ç±» * </p> * * @author deslrey * @since 2026-03-23 */ public interface IProductionProductRouteItemFileService extends IService<ProductionProductRouteItemFile> { void deleteFile(Long fileId); } src/main/java/com/ruoyi/production/service/IProductionProductRouteItemParamService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,16 @@ package com.ruoyi.production.service; import com.ruoyi.production.pojo.ProductionProductRouteItemParam; import com.baomidou.mybatisplus.extension.service.IService; /** * <p> * ç产æ¥å·¥è®°å½å·¥åºçåæ°æç»è¡¨ æå¡ç±» * </p> * * @author deslrey * @since 2026-03-23 */ public interface IProductionProductRouteItemParamService extends IService<ProductionProductRouteItemParam> { } src/main/java/com/ruoyi/production/service/IProductionProductRouteItemService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,16 @@ package com.ruoyi.production.service; import com.ruoyi.production.pojo.ProductionProductRouteItem; import com.baomidou.mybatisplus.extension.service.IService; /** * <p> * ç产æ¥å·¥è®°å½çå·¥åºè¡¨(å å«å²ä½äººå+设å¤å¼å¸¸å¤ç½®+å·¥èºäººåäº¤å¾ ) æå¡ç±» * </p> * * @author deslrey * @since 2026-03-23 */ public interface IProductionProductRouteItemService extends IService<ProductionProductRouteItem> { } src/main/java/com/ruoyi/production/service/ProductionRecordService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,21 @@ package com.ruoyi.production.service; import com.ruoyi.production.dto.ProductionRecordDto; import com.ruoyi.production.vo.ProductionRecordVo; /** * <br> * ç产æ¥å·¥è®°å½Service * </br> * * @author deslrey * @version 1.0 * @since 2026/03/23 10:22 */ public interface ProductionRecordService { ProductionRecordVo productRouteItem(Long productOrderId); void addProductionRecordService(ProductionRecordDto dto); } src/main/java/com/ruoyi/production/service/impl/ProductionProductRouteItemFileServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,59 @@ package com.ruoyi.production.service.impl; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.production.pojo.ProductionProductRouteItemFile; import com.ruoyi.production.mapper.ProductionProductRouteItemFileMapper; import com.ruoyi.production.service.IProductionProductRouteItemFileService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.nio.file.Files; /** * <p> * ç产æ¥å·¥è®°å½çå·¥åºé件表 æå¡å®ç°ç±» * </p> * * @author deslrey * @since 2026-03-23 */ @Slf4j @Service public class ProductionProductRouteItemFileServiceImpl extends ServiceImpl<ProductionProductRouteItemFileMapper, ProductionProductRouteItemFile> implements IProductionProductRouteItemFileService { @Override @Transactional(rollbackFor = Exception.class) public void deleteFile(Long fileId) { if (fileId == null) { throw new ServiceException("éä»¶å é¤å¤±è´¥,æ°æ®ä¸è½ä¸ºç©º"); } ProductionProductRouteItemFile productionProductRouteItemFile = baseMapper.selectById(fileId); if (productionProductRouteItemFile == null) { throw new ServiceException("éä»¶å é¤å¤±è´¥,éä»¶ä¸åå¨"); } String fileUrl = productionProductRouteItemFile.getFileUrl(); if (fileUrl != null) { try { java.nio.file.Path path = java.nio.file.Paths.get(fileUrl); if (Files.exists(path)) { Files.delete(path); } else { log.warn("æä»¶ä¸åå¨ï¼æ éå é¤: {}", fileUrl); } } catch (Exception e) { log.error("å é¤æä»¶å¤±è´¥: {}", fileUrl, e); throw new ServiceException("éä»¶å é¤å¤±è´¥,ç©çæä»¶å é¤å¼å¸¸"); } } int result = baseMapper.deleteById(fileId); if (result == 0) { throw new ServiceException("éä»¶å é¤å¤±è´¥,æ°æ®åºå é¤å¤±è´¥"); } } } src/main/java/com/ruoyi/production/service/impl/ProductionProductRouteItemParamServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,20 @@ package com.ruoyi.production.service.impl; import com.ruoyi.production.pojo.ProductionProductRouteItemParam; import com.ruoyi.production.mapper.ProductionProductRouteItemParamMapper; import com.ruoyi.production.service.IProductionProductRouteItemParamService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; /** * <p> * ç产æ¥å·¥è®°å½å·¥åºçåæ°æç»è¡¨ æå¡å®ç°ç±» * </p> * * @author deslrey * @since 2026-03-23 */ @Service public class ProductionProductRouteItemParamServiceImpl extends ServiceImpl<ProductionProductRouteItemParamMapper, ProductionProductRouteItemParam> implements IProductionProductRouteItemParamService { } src/main/java/com/ruoyi/production/service/impl/ProductionProductRouteItemServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,20 @@ package com.ruoyi.production.service.impl; import com.ruoyi.production.pojo.ProductionProductRouteItem; import com.ruoyi.production.mapper.ProductionProductRouteItemMapper; import com.ruoyi.production.service.IProductionProductRouteItemService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; /** * <p> * ç产æ¥å·¥è®°å½çå·¥åºè¡¨(å å«å²ä½äººå+设å¤å¼å¸¸å¤ç½®+å·¥èºäººåäº¤å¾ ) æå¡å®ç°ç±» * </p> * * @author deslrey * @since 2026-03-23 */ @Service public class ProductionProductRouteItemServiceImpl extends ServiceImpl<ProductionProductRouteItemMapper, ProductionProductRouteItem> implements IProductionProductRouteItemService { } src/main/java/com/ruoyi/production/service/impl/ProductionRecordServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,348 @@ package com.ruoyi.production.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.other.mapper.TempFileMapper; import com.ruoyi.other.pojo.TempFile; import com.ruoyi.production.dto.ProductionProductRouteItemDto; import com.ruoyi.production.dto.ProductionProductRouteItemParamDto; import com.ruoyi.production.dto.ProductionRecordDto; import com.ruoyi.production.enums.ProductOrderStatusEnum; import com.ruoyi.production.pojo.*; import com.ruoyi.production.service.*; import com.ruoyi.production.vo.ProductionOrderRouteItemParamVo; import com.ruoyi.production.vo.ProductionOrderRouteItemVo; import com.ruoyi.production.vo.ProductionOrderStructureVo; import com.ruoyi.production.vo.ProductionRecordVo; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.FilenameUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.io.IOException; import java.math.BigDecimal; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.StandardCopyOption; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.List; import java.util.UUID; import java.util.stream.Collectors; /** * <br> * ç产æ¥å·¥è®°å½Serviceå®ç°ç±» * </br> * * @author deslrey * @version 1.0 * @since 2026/03/23 10:23 */ @Slf4j @Service public class ProductionRecordServiceImpl implements ProductionRecordService { @Value("${file.upload-dir}") private String uploadDir; @Autowired private ProductionProductMainService productionProductMainService; @Autowired private ProductionProductInputService productionProductInputService; @Autowired private ProductionProductOutputService productionProductOutputService; @Autowired private IProductionProductRouteItemService productionProductRouteItemService; @Autowired private IProductionProductRouteItemParamService productionProductRouteItemParamService; @Autowired private IProductionProductRouteItemFileService productionProductRouteItemFileService; @Autowired private ProductOrderService productOrderService; @Autowired private IProductionOrderRouteItemService productionOrderRouteItemService; @Autowired private IProductionOrderRouteItemParamService productionOrderRouteItemParamService; @Autowired private IProductionOrderStructureService productionOrderStructureService; @Autowired private ProductProcessService productProcessService; @Autowired private ProductMaterialSkuService productMaterialSkuService; @Autowired private ProductMaterialService productMaterialService; @Autowired private TempFileMapper tempFileMapper; @Override public ProductionRecordVo productRouteItem(Long productOrderId) { if (productOrderId == null) { throw new ServiceException("è¯·éæ©ç产订å忰墿¥å·¥"); } // æ¥è¯¢åºç产订åç»å®çå·¥èºè·¯çº¿ ProductOrder productOrder = productOrderService.getById(productOrderId); if (productOrder == null) { throw new ServiceException("æªæ¥è¯¢å°è¯¥ç产订åçä¿¡æ¯"); } // éè¿å·¥èºè·¯çº¿æ¥è¯¢åºç»å®çå·¥åºååæ° List<ProductionOrderRouteItem> productionOrderRouteItemList = productionOrderRouteItemService.list(new LambdaQueryWrapper<ProductionOrderRouteItem>() .eq(ProductionOrderRouteItem::getOrderId, productOrderId) .eq(ProductionOrderRouteItem::getRouteId, productOrder.getRouteId())); if (productionOrderRouteItemList == null || productionOrderRouteItemList.isEmpty()) { throw new ServiceException("该ç产订åç»å®çå·¥èºè·¯çº¿æ å·¥åº"); } ProductionRecordVo productionRecordVo = new ProductionRecordVo(); productionRecordVo.setProductOrderId(productOrderId); productionRecordVo.setProductRouteId(productOrder.getRouteId()); List<ProductionOrderRouteItemVo> productionOrderRouteItemVoList = new ArrayList<>(); // æ ¹æ®ç»å®çå·¥åºæ¥è¯¢åºå·¥åºåæ°åBOMéè¦æ¶èç产å for (ProductionOrderRouteItem orderRouteItem : productionOrderRouteItemList) { ProductionOrderRouteItemVo productionOrderRouteItemVo = new ProductionOrderRouteItemVo(); productionOrderRouteItemVo.setProcessId(orderRouteItem.getProcessId()); if (orderRouteItem.getProcessId() != null) { ProductProcess process = productProcessService.getById(orderRouteItem.getProcessId()); if (process != null) { productionOrderRouteItemVo.setProcessName(process.getName()); } } List<ProductionOrderRouteItemParam> orderRouteItemParamList = productionOrderRouteItemParamService.list(new LambdaQueryWrapper<ProductionOrderRouteItemParam>() .eq(ProductionOrderRouteItemParam::getOrderId, productOrderId) .eq(ProductionOrderRouteItemParam::getRouteItemId, orderRouteItem.getId())); if (orderRouteItemParamList != null && !orderRouteItemParamList.isEmpty()) { List<ProductionOrderRouteItemParamVo> paraVoList = orderRouteItemParamList.stream().map(param -> { ProductionOrderRouteItemParamVo paraVo = new ProductionOrderRouteItemParamVo(); BeanUtils.copyProperties(param, paraVo); paraVo.setParamFormat(DateUtils.toUpperCasePattern(paraVo.getParamFormat())); return paraVo; }).collect(Collectors.toList()); productionOrderRouteItemVo.setOrderRouteItemParaVos(paraVoList); } List<ProductionOrderStructure> orderStructureList = productionOrderStructureService.list(new LambdaQueryWrapper<ProductionOrderStructure>() .eq(ProductionOrderStructure::getOrderId, productOrderId) .eq(ProductionOrderStructure::getProcessId, orderRouteItem.getProcessId())); if (orderStructureList != null && !orderStructureList.isEmpty()) { List<ProductionOrderStructureVo> structureVoList = orderStructureList.stream().map(struct -> { ProductionOrderStructureVo structureVo = new ProductionOrderStructureVo(); BeanUtils.copyProperties(struct, structureVo); // æ¥è¯¢åºäº§åçåç§°/模å ProductMaterialSku productMaterialSku = productMaterialSkuService.getById(structureVo.getProductModelId()); ProductMaterial productMaterial = productMaterialService.getById(productMaterialSku.getProductId()); structureVo.setProductName(productMaterial.getProductName()); structureVo.setModel(productMaterialSku.getModel()); return structureVo; }).collect(Collectors.toList()); productionOrderRouteItemVo.setOrderStructureVos(structureVoList); } // æ¯ä¸ä¸ªå·¥åºçåæ°ãBOMæ¶è产å productionOrderRouteItemVoList.add(productionOrderRouteItemVo); } productionRecordVo.setProductionOrderRouteItemVos(productionOrderRouteItemVoList); return productionRecordVo; } @Override @Transactional(rollbackFor = Exception.class) public void addProductionRecordService(ProductionRecordDto dto) { if (dto == null) { throw new ServiceException("æ¥å·¥å¤±è´¥,æ°æ®ä¸è½ä¸ºç©º"); } if (dto.getProductOrderId() == null) { throw new ServiceException("æ¥å·¥å¤±è´¥,ç产订åIDä¸è½ä¸ºç©º"); } if (dto.getProductId() == null) { throw new ServiceException("æ¥å·¥å¤±è´¥,产åä¿¡æ¯ä¸è½ä¸ºç©º"); } if (StringUtils.isEmpty(dto.getPostName()) || StringUtils.isEmpty(dto.getSchedule())) { throw new ServiceException("æ¥å·¥å¤±è´¥,å²ä½äººå/çæ¬¡ä¿¡æ¯ä¸è½ä¸ºç©º"); } // æ´æ°çäº§è®¢åæ°æ® ProductOrder productOrder = productOrderService.getById(dto.getProductOrderId()); if (productOrder == null) { throw new ServiceException("æ¥å·¥å¤±è´¥,ç产订åä¸åå¨"); } // å½åæ¥å·¥åæ ¼æ°é BigDecimal qualifiedQty = dto.getQualifiedQuantity() == null ? BigDecimal.ZERO : dto.getQualifiedQuantity(); // 已宿æ°é BigDecimal completeQty = productOrder.getCompleteQuantity() == null ? BigDecimal.ZERO : productOrder.getCompleteQuantity(); // ç´¯å (åªç®åæ ¼) BigDecimal newCompleteQty = completeQty.add(qualifiedQty); productOrder.setCompleteQuantity(newCompleteQty); // éæ±æ°é BigDecimal totalQty = productOrder.getQuantity() == null ? BigDecimal.ZERO : productOrder.getQuantity(); // å©ä½å¯æ¥å·¥æ°é BigDecimal remainQty = totalQty.subtract(completeQty); // æ¬æ¬¡æ¥å·¥ä¸è½è¶ è¿å©ä½æ°é if (qualifiedQty.compareTo(remainQty) > 0) { throw new ServiceException("æ¥å·¥å¤±è´¥ï¼æ¬æ¬¡æ¥å·¥æ°éä¸è½å¤§äºå©ä½å¯æ¥å·¥æ°é"); } // 设置å¼å§æ¶é´ï¼ç¬¬ä¸æ¬¡æ¥å·¥ï¼ if (productOrder.getStartTime() == null) { productOrder.setStartTime(LocalDateTime.now()); } // ç¶æå¤æ if (newCompleteQty.compareTo(totalQty) >= 0 && totalQty.compareTo(BigDecimal.ZERO) > 0) { productOrder.setStatus(ProductOrderStatusEnum.FINISHED.getCode()); productOrder.setEndTime(LocalDateTime.now()); } else { productOrder.setStatus(ProductOrderStatusEnum.RUNNING.getCode()); } boolean update = productOrderService.updateById(productOrder); if (!update) { throw new ServiceException("æ¥å·¥å¤±è´¥,çäº§è®¢åæ´æ°å¤±è´¥"); } // 宿æ¥å·¥ä¸»è¡¨-æå ¥è¡¨-产åºè¡¨æ°æ® ProductionProductMain productionProductMain = new ProductionProductMain(); productionProductMain.setProductNo("BG" + UUID.randomUUID()); productionProductMain.setProductOrderId(dto.getProductOrderId()); productionProductMain.setSchedule(dto.getSchedule()); boolean result = productionProductMainService.save(productionProductMain); if (!result) { throw new ServiceException("æ¥å·¥å¤±è´¥,æ°æ®åå¨å¤±è´¥"); } ProductionProductInput productionProductInput = new ProductionProductInput(); productionProductInput.setProductMainId(productionProductMain.getId()); productionProductInput.setProductModelId(dto.getProductId()); productionProductInput.setQuantity(dto.getQuantity()); result = productionProductInputService.save(productionProductInput); if (!result) { throw new ServiceException("æ¥å·¥å¤±è´¥,ç产æå ¥åå¨å¤±è´¥"); } ProductionProductOutput productionProductOutput = new ProductionProductOutput(); productionProductOutput.setProductMainId(productionProductMain.getId()); productionProductOutput.setProductModelId(dto.getProductId()); productionProductOutput.setQuantity(dto.getQualifiedQuantity()); productionProductOutput.setScrapQty(dto.getUnqualifiedQuantity()); result = productionProductOutputService.save(productionProductOutput); if (!result) { throw new ServiceException("æ¥å·¥å¤±è´¥,ç产产åºåå¨å¤±è´¥"); } // å¤çå·¥åº List<ProductionProductRouteItemDto> productionProductRouteItemDtoList = dto.getProductionProductRouteItemDtoList(); if (productionProductRouteItemDtoList == null || productionProductRouteItemDtoList.isEmpty()) { throw new ServiceException("æ¥å·¥å¤±è´¥,å·¥åºåæ°ä¸è½ä¸ºç©º"); } for (ProductionProductRouteItemDto productRouteItemDto : productionProductRouteItemDtoList) { // å¤çå·¥åºä¸»è¡¨ ProductionProductRouteItem productRouteItemEntity = new ProductionProductRouteItem(); BeanUtils.copyProperties(productRouteItemDto, productRouteItemEntity, "id"); productRouteItemEntity.setProductMainId(productionProductMain.getId()); productionProductRouteItemService.save(productRouteItemEntity); // å¤çåæ°åæ¶è产å List<ProductionProductRouteItemParamDto> productionProductRouteItemParamDtoList = productRouteItemDto.getProductionProductRouteItemParamDtoList(); if (productionProductRouteItemParamDtoList != null && !productionProductRouteItemParamDtoList.isEmpty()) { for (ProductionProductRouteItemParamDto productRouteItemParamDto : productionProductRouteItemParamDtoList) { ProductionProductRouteItemParam paramEntity = new ProductionProductRouteItemParam(); BeanUtils.copyProperties(productRouteItemParamDto, paramEntity, "id"); paramEntity.setProductionProductRouteItemId(productRouteItemEntity.getId()); if (paramEntity.getProductId() != null) { } else { ProductionOrderRouteItemParam productionOrderRouteItemParam = productionOrderRouteItemParamService.getById(productRouteItemParamDto.getId()); paramEntity.setParamName(productionOrderRouteItemParam.getParamName()); paramEntity.setParamType(productionOrderRouteItemParam.getParamType()); paramEntity.setParamFormat(productionOrderRouteItemParam.getParamFormat()); paramEntity.setValueMode(productionOrderRouteItemParam.getValueMode()); } productionProductRouteItemParamService.save(paramEntity); } } // å¤çå·¥åºä¸ä¼ çéä»¶ List<String> files = productRouteItemDto.getFiles(); if (files != null && !files.isEmpty()) { for (String tempId : files) { TempFile tempFile = tempFileMapper.selectById(tempId); if (tempFile == null) { log.warn("æªæ¾å°ä¸´æ¶æä»¶è®°å½: {}", tempId); continue; } try { // æ£å¼ç®å½è·¯å¾ï¼ææ¥æåç»ï¼ String formalDir = uploadDir + LocalDate.now().format(DateTimeFormatter.ISO_LOCAL_DATE); Path formalDirPath = Paths.get(formalDir); if (!Files.exists(formalDirPath)) { Files.createDirectories(formalDirPath); } // æ£å¼æä»¶å String originalFilename = tempFile.getOriginalName(); String fileExtension = FilenameUtils.getExtension(originalFilename); String formalFilename = productRouteItemEntity.getId() + "_" + System.currentTimeMillis() + "_" + UUID.randomUUID().toString().substring(0, 8) + (StringUtils.hasText(fileExtension) ? "." + fileExtension : ""); Path formalFilePath = formalDirPath.resolve(formalFilename); // æä»¶è¿ç§» (å¤å¶+å é¤) Files.copy(Paths.get(tempFile.getTempPath()), formalFilePath, StandardCopyOption.REPLACE_EXISTING); Files.deleteIfExists(Paths.get(tempFile.getTempPath())); // ä¿åæ¥å·¥éä»¶è®°å½ ProductionProductRouteItemFile fileEntity = new ProductionProductRouteItemFile(); fileEntity.setProductionProductRouteItemId(productRouteItemEntity.getId()); fileEntity.setFileName(originalFilename); fileEntity.setFileUrl(formalFilePath.toString()); fileEntity.setFileSuffix(fileExtension); fileEntity.setFileSize(Files.size(formalFilePath)); fileEntity.setCreateTime(LocalDateTime.now()); fileEntity.setTenantId(SecurityUtils.getLoginUser().getTenantId()); productionProductRouteItemFileService.save(fileEntity); // å é¤ä¸´æ¶æä»¶è®°å½ tempFileMapper.deleteById(tempId); log.info("å·¥åºéä»¶è¿ç§»æå: {} -> {}", tempFile.getTempPath(), formalFilePath); } catch (IOException e) { log.error("å·¥åºéä»¶è¿ç§»å¤±è´¥: {}", tempFile.getTempPath(), e); throw new ServiceException("å·¥åºéä»¶å¤çå¼å¸¸: " + e.getMessage()); } } } } } } src/main/java/com/ruoyi/production/vo/ProductionOrderRouteItemParamVo.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,51 @@ package com.ruoyi.production.vo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; /** * <br> * * </br> * * @author deslrey * @version 1.0 * @since 2026/03/23 13:05 */ @Data public class ProductionOrderRouteItemParamVo { @ApiModelProperty(value = "主é®ID") private Long id; @ApiModelProperty(value = "åæ°å¯ä¸æ è¯") private String paramKey; @ApiModelProperty(value = "åæ°åç§°") private String paramName; @ApiModelProperty(value = "åæ°ç±»å(1æ°å 2ææ¬ 3䏿鿩 4æ¶é´)") private Integer paramType; @ApiModelProperty(value = "åæ°æ ¼å¼") private String paramFormat; @ApiModelProperty(value = "弿¨¡å¼(1åå¼ 2åºé´)") private Integer valueMode; @ApiModelProperty(value = "åä½") private String unit; @ApiModelProperty(value = "æ åå¼") private String standardValue; @ApiModelProperty(value = "æ¤è·¯çº¿èç¹è®¾å®çæ åæå°å¼") private java.math.BigDecimal minValue; @ApiModelProperty(value = "æ¤è·¯çº¿èç¹è®¾å®çæ åæå¤§å¼") private java.math.BigDecimal maxValue; @ApiModelProperty(value = "æ¯å¦å¿ å¡«") private Boolean isRequired; } src/main/java/com/ruoyi/production/vo/ProductionOrderRouteItemVo.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,31 @@ package com.ruoyi.production.vo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; /** * <br> * ç产订åç»å®çå·¥èºè·¯çº¿--å·¥åºè¡¨Vo * </br> * * @author deslrey * @version 1.0 * @since 2026/03/23 12:00 */ @Data public class ProductionOrderRouteItemVo { @ApiModelProperty(value = "å·¥åºid") private Long processId; @ApiModelProperty(value = "å·¥åºåç§°") private String processName; @ApiModelProperty("å·¥åºç»å®çåæ°å表") private List<ProductionOrderRouteItemParamVo> orderRouteItemParaVos; @ApiModelProperty("BOMå å·¥åºéè¦æ¶èç产åå表") private List<ProductionOrderStructureVo> orderStructureVos; } src/main/java/com/ruoyi/production/vo/ProductionOrderStructureVo.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,43 @@ package com.ruoyi.production.vo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; /** * <br> * * </br> * * @author deslrey * @version 1.0 * @since 2026/03/23 13:05 */ @Data public class ProductionOrderStructureVo { @ApiModelProperty(value = "主é®ID") private Long id; @ApiModelProperty(value = "产åid") private Long productModelId; @ApiModelProperty(value = "产ååç§°") private String productName; @ApiModelProperty(value = "äº§åæ¨¡å") private String model; @ApiModelProperty(value = "åä½äº§åºéè¦æ°é") private BigDecimal unitQuantity; // @ApiModelProperty(value = "éæ±æ°é") // private java.math.BigDecimal demandedQuantity; @ApiModelProperty(value = "åä½") private String unit; @ApiModelProperty(value = "bomçid") private Long bomId; } src/main/java/com/ruoyi/production/vo/ProductionRecordVo.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,31 @@ package com.ruoyi.production.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; /** * <br> * ç产æ¥å·¥è®°å½Vo * </br> * * @author deslrey * @version 1.0 * @since 2026/03/23 11:36 */ @Data @ApiModel(value = "ProductionRecordVo", description = "ç产æ¥å·¥è®°å½Vo") public class ProductionRecordVo { @ApiModelProperty("ç产订åID") private Long productOrderId; @ApiModelProperty("å·¥èºè·¯çº¿ID") private Long productRouteId; @ApiModelProperty("å·¥èºè·¯çº¿ç»å®çå·¥åº") private List<ProductionOrderRouteItemVo> productionOrderRouteItemVos; } src/main/resources/mapper/production/ProductionProductMainMapper.xml
@@ -10,48 +10,43 @@ <result property="tenantId" column="tenant_id"/> <result property="createTime" column="create_time"/> <result property="status" column="status"/> <result property="postName" column="post_name"/> <result property="schedule" column="schedule"/> <result property="reportingTime" column="reporting_time"/> </resultMap> <select id="listPageProductionProductMainDto" resultType="com.ruoyi.production.dto.ProductionProductMainDto"> select ppm.*, pwo.work_order_no as workOrderNo, pwo.status as workOrderStatus, u.nick_name as nickName, p.product_name as productName, pp.name as process, pm.model as productModelName, ppo.quantity, ppo.scrap_qty, pm.unit, sl.sales_contract_no salesContractNo po.nps_no as npsNo, pms.material_code as materialCode, pm.product_name as productName, pms.model as productModelName, IFNULL(ppo.quantity, 0) as totalQuantity, IFNULL(ppo.scrap_qty, 0) as scrapQty, IFNULL(ppo.quantity, 0) as quantity from production_product_main ppm left join product_work_order pwo on pwo.id = ppm.work_order_id left join product_process_route_item ppri on ppri.id = pwo.product_process_route_item_id left join product_process pp on pp.id = ppri.process_id left join product_order po on po.id = pwo.product_order_id left join production_product_output ppo on ppm.id = ppo.product_main_id left join product_model pm on pm.id = ppo.product_model_id left join product p on p.id = pm.product_id left join sales_ledger sl on sl.id = po.sales_ledger_id left join sys_user u on u.user_id = ppm.user_id left join production_product_output ppo on ppo.product_main_id = ppm.id left join production_product_input ppi on ppi.product_main_id = ppm.id left join product_order po on po.id = ppm.product_order_id left join product_order_plan pop on po.id = pop.product_order_id left join production_plan pp on pop.production_plan_id = pp.id left join product_material_sku pms on pp.product_material_sku_id = pms.id left join product_material pm on pm.id = pms.product_id <where> <if test="c.nickName != null and c.nickName != ''"> and u.nick_name like concat('%',#{c.nickName},'%') <if test="c.npsNo != null and c.npsNo != ''"> AND po.nps_no like concat('%', #{c.npsNo}, '%') </if> <if test="c.workOrderNo != null and c.workOrderNo != ''"> and pwo.work_order_no like concat('%',#{c.workOrderNo},'%') <if test="c.schedule != null and c.schedule != ''"> AND ppm.schedule like concat('%', #{c.schedule}, '%') </if> <if test="c.workOrderStatus != null and c.workOrderStatus != ''"> and pwo.status = #{c.workOrderStatus} </if> <if test="c.status != null and c.status != ''"> and ppm.status = #{c.status} <if test="c.productName != null and c.productName != ''"> AND pm.product_name like concat('%', #{c.productName}, '%') </if> </where> order by ppm.id order by ppm.id desc </select> <select id="getOrderByMainId" resultType="com.ruoyi.production.pojo.ProductOrder"> select po.* from product_order po @@ -86,11 +81,11 @@ <if test="ew.schedulingUserName != null and ew.schedulingUserName !=''"> and slpa.scheduling_user_name = #{ew.schedulingUserName} </if> <if test="ew.entryDate != null " > <if test="ew.entryDate != null "> and slpa.scheduling_date >= #{ew.entryDate} and slpa.scheduling_date < DATE_ADD(#{ew.entryDate}, INTERVAL 1 DAY) </if> <if test="ew.entryDateStart != null and ew.entryDateEnd != null" > <if test="ew.entryDateStart != null and ew.entryDateEnd != null"> and slpa.scheduling_date >= #{ew.entryDateStart} and slpa.scheduling_date < date_add(#{ew.entryDateEnd}, INTERVAL 1 DAY) </if> @@ -98,9 +93,9 @@ </select> <select id="listMain" resultType="java.lang.Long"> SELECT ppm.id FROM production_product_main ppm left join product_work_order pwo on pwo.id = ppm.work_order_id left join product_order po on po.id = pwo.product_order_id left join sales_ledger sl on sl.id = po.sales_ledger_id left join product_work_order pwo on pwo.id = ppm.work_order_id left join product_order po on po.id = pwo.product_order_id left join sales_ledger sl on sl.id = po.sales_ledger_id <where> <if test="idList != null and idList.size() > 0"> and sl.id in src/main/resources/mapper/production/ProductionProductRouteItemFileMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,19 @@ <?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.ProductionProductRouteItemFileMapper"> <resultMap id="BaseResultMap" type="com.ruoyi.production.pojo.ProductionProductRouteItemFile"> <id column="id" property="id" /> <result column="production_product_route_item_id" property="productionProductRouteItemId" /> <result column="file_name" property="fileName" /> <result column="file_url" property="fileUrl" /> <result column="file_size" property="fileSize" /> <result column="file_suffix" property="fileSuffix" /> <result column="create_user" property="createUser" /> <result column="create_time" property="createTime" /> <result column="update_user" property="updateUser" /> <result column="update_time" property="updateTime" /> <result column="tenant_id" property="tenantId" /> </resultMap> </mapper> src/main/resources/mapper/production/ProductionProductRouteItemMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,18 @@ <?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.ProductionProductRouteItemMapper"> <resultMap id="BaseResultMap" type="com.ruoyi.production.pojo.ProductionProductRouteItem"> <id column="id" property="id"/> <result column="product_main_id" property="productMainId"/> <result column="post_name" property="postName"/> <result column="equipment_malfunction" property="equipmentMalfunction"/> <result column="equipment_disposal" property="equipmentDisposal"/> <result column="process_explained" property="processExplained"/> <result column="process_id" property="processId"/> <result column="create_time" property="createTime"/> <result column="update_time" property="updateTime"/> <result column="tenant_id" property="tenantId"/> </resultMap> </mapper> src/main/resources/mapper/production/ProductionProductRouteItemParamMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,29 @@ <?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.ProductionProductRouteItemParamMapper"> <resultMap id="BaseResultMap" type="com.ruoyi.production.pojo.ProductionProductRouteItemParam"> <id column="id" property="id"/> <result column="production_product_route_item_id" property="productionProductRouteItemId"/> <result column="param_name" property="paramName"/> <result column="param_type" property="paramType"/> <result column="param_format" property="paramFormat"/> <result column="value_mode" property="valueMode"/> <result column="standard_value" property="standardValue"/> <result column="min_value" property="minValue"/> <result column="max_value" property="maxValue"/> <result column="product_id" property="productId"/> <result column="bom_id" property="bomId"/> <result column="product_value" property="productValue"/> <result column="unit" property="unit"/> <result column="is_required" property="isRequired"/> <result column="source_sort" property="sourceSort"/> <result column="dict_code" property="dictCode"/> <result column="create_user" property="createUser"/> <result column="create_time" property="createTime"/> <result column="update_user" property="updateUser"/> <result column="update_time" property="updateTime"/> <result column="tenant_id" property="tenantId"/> </resultMap> </mapper>