Parcourir la source

新需求基本完成

Huanyi il y a 3 jours
Parent
commit
4b407354db
57 fichiers modifiés avec 1466 ajouts et 114 suppressions
  1. 7 0
      pom.xml
  2. 5 0
      ruoyi-admin/pom.xml
  3. 7 0
      ruoyi-admin/src/main/resources/application-dev.yml
  4. 7 0
      ruoyi-admin/src/main/resources/application-prod.yml
  5. 2 0
      ruoyi-admin/src/main/resources/application.yml
  6. 4 1
      ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/config/MybatisPlusConfig.java
  7. 1 0
      ruoyi-modules/pom.xml
  8. 9 0
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysComplaintController.java
  9. 6 0
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysComplaintService.java
  10. 13 0
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysComplaintServiceImpl.java
  11. 62 0
      ruoyi-modules/yingpaipay-drawing/pom.xml
  12. 12 0
      ruoyi-modules/yingpaipay-drawing/src/main/java/org/dromara/drawing/config/DrawingDataSourceConfig.java
  13. 61 0
      ruoyi-modules/yingpaipay-drawing/src/main/java/org/dromara/drawing/controller/DrawingFileController.java
  14. 100 0
      ruoyi-modules/yingpaipay-drawing/src/main/java/org/dromara/drawing/domain/DrawingFile.java
  15. 38 0
      ruoyi-modules/yingpaipay-drawing/src/main/java/org/dromara/drawing/domain/query/DrawingFileQuery.java
  16. 47 0
      ruoyi-modules/yingpaipay-drawing/src/main/java/org/dromara/drawing/domain/vo/DrawingFileVo.java
  17. 15 0
      ruoyi-modules/yingpaipay-drawing/src/main/java/org/dromara/drawing/mapper/DrawingFileMapper.java
  18. 31 0
      ruoyi-modules/yingpaipay-drawing/src/main/java/org/dromara/drawing/service/IDrawingFileService.java
  19. 75 0
      ruoyi-modules/yingpaipay-drawing/src/main/java/org/dromara/drawing/service/impl/DrawingFileServiceImpl.java
  20. 1 0
      ruoyi-modules/yingpaipay-drawing/src/main/resources/mapper/.gitkeep
  21. 3 11
      ruoyi-modules/yingpaipay-erp/src/main/java/org/dromara/erp/controller/ErpColorController.java
  22. 4 13
      ruoyi-modules/yingpaipay-erp/src/main/java/org/dromara/erp/controller/ErpColorKindController.java
  23. 3 11
      ruoyi-modules/yingpaipay-erp/src/main/java/org/dromara/erp/controller/ErpModelController.java
  24. 36 0
      ruoyi-modules/yingpaipay-erp/src/main/java/org/dromara/erp/controller/ErpModelKindController.java
  25. 9 0
      ruoyi-modules/yingpaipay-erp/src/main/java/org/dromara/erp/controller/ErpOrderController.java
  26. 10 0
      ruoyi-modules/yingpaipay-erp/src/main/java/org/dromara/erp/controller/ErpOrderDetailController.java
  27. 186 3
      ruoyi-modules/yingpaipay-erp/src/main/java/org/dromara/erp/domain/ErpColorKind.java
  28. 7 0
      ruoyi-modules/yingpaipay-erp/src/main/java/org/dromara/erp/domain/ErpModel.java
  29. 141 0
      ruoyi-modules/yingpaipay-erp/src/main/java/org/dromara/erp/domain/ErpModelKind.java
  30. 7 0
      ruoyi-modules/yingpaipay-erp/src/main/java/org/dromara/erp/domain/ErpOrder.java
  31. 7 0
      ruoyi-modules/yingpaipay-erp/src/main/java/org/dromara/erp/domain/ErpOrderDetail.java
  32. 44 0
      ruoyi-modules/yingpaipay-erp/src/main/java/org/dromara/erp/domain/bo/ErpOrderDetailBatchUpdateBo.java
  33. 6 0
      ruoyi-modules/yingpaipay-erp/src/main/java/org/dromara/erp/domain/bo/ErpOrderDetailBo.java
  34. 6 0
      ruoyi-modules/yingpaipay-erp/src/main/java/org/dromara/erp/domain/query/ErpColorKindQuery.java
  35. 6 0
      ruoyi-modules/yingpaipay-erp/src/main/java/org/dromara/erp/domain/query/ErpColorQuery.java
  36. 33 0
      ruoyi-modules/yingpaipay-erp/src/main/java/org/dromara/erp/domain/query/ErpModelKindQuery.java
  37. 18 0
      ruoyi-modules/yingpaipay-erp/src/main/java/org/dromara/erp/domain/query/ErpModelQuery.java
  38. 54 1
      ruoyi-modules/yingpaipay-erp/src/main/java/org/dromara/erp/domain/vo/ErpColorKindVo.java
  39. 61 0
      ruoyi-modules/yingpaipay-erp/src/main/java/org/dromara/erp/domain/vo/ErpModelKindVo.java
  40. 12 0
      ruoyi-modules/yingpaipay-erp/src/main/java/org/dromara/erp/domain/vo/ErpModelVo.java
  41. 6 0
      ruoyi-modules/yingpaipay-erp/src/main/java/org/dromara/erp/domain/vo/ErpOrderDetailVo.java
  42. 6 0
      ruoyi-modules/yingpaipay-erp/src/main/java/org/dromara/erp/domain/vo/ErpOrderVo.java
  43. 15 0
      ruoyi-modules/yingpaipay-erp/src/main/java/org/dromara/erp/mapper/ErpModelKindMapper.java
  44. 5 9
      ruoyi-modules/yingpaipay-erp/src/main/java/org/dromara/erp/service/IErpColorKindService.java
  45. 4 8
      ruoyi-modules/yingpaipay-erp/src/main/java/org/dromara/erp/service/IErpColorService.java
  46. 22 0
      ruoyi-modules/yingpaipay-erp/src/main/java/org/dromara/erp/service/IErpModelKindService.java
  47. 4 8
      ruoyi-modules/yingpaipay-erp/src/main/java/org/dromara/erp/service/IErpModelService.java
  48. 7 0
      ruoyi-modules/yingpaipay-erp/src/main/java/org/dromara/erp/service/IErpOrderDetailService.java
  49. 6 0
      ruoyi-modules/yingpaipay-erp/src/main/java/org/dromara/erp/service/IErpOrderService.java
  50. 34 13
      ruoyi-modules/yingpaipay-erp/src/main/java/org/dromara/erp/service/impl/ErpColorKindServiceImpl.java
  51. 31 20
      ruoyi-modules/yingpaipay-erp/src/main/java/org/dromara/erp/service/impl/ErpColorServiceImpl.java
  52. 73 0
      ruoyi-modules/yingpaipay-erp/src/main/java/org/dromara/erp/service/impl/ErpModelKindServiceImpl.java
  53. 32 13
      ruoyi-modules/yingpaipay-erp/src/main/java/org/dromara/erp/service/impl/ErpModelServiceImpl.java
  54. 42 1
      ruoyi-modules/yingpaipay-erp/src/main/java/org/dromara/erp/service/impl/ErpOrderDetailServiceImpl.java
  55. 14 2
      ruoyi-modules/yingpaipay-erp/src/main/java/org/dromara/erp/service/impl/ErpOrderServiceImpl.java
  56. 3 0
      ruoyi-modules/yingpaipay-erp/src/main/resources/mapper/ErpOrderMapper.xml
  57. 6 0
      script/sql/sqlserver/v1/HTSail_CS-create.sql

+ 7 - 0
pom.xml

@@ -360,6 +360,13 @@
                 <version>${revision}</version>
             </dependency>
 
+            <!-- 盈派支付 图纸数据库对接模块 -->
+            <dependency>
+                <groupId>org.dromara</groupId>
+                <artifactId>yingpaipay-drawing</artifactId>
+                <version>${revision}</version>
+            </dependency>
+
         </dependencies>
     </dependencyManagement>
 

+ 5 - 0
ruoyi-admin/pom.xml

@@ -98,6 +98,11 @@
             <artifactId>yingpaipay-erp</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>org.dromara</groupId>
+            <artifactId>yingpaipay-drawing</artifactId>
+        </dependency>
+
         <dependency>
             <groupId>de.codecentric</groupId>
             <artifactId>spring-boot-admin-starter-client</artifactId>

+ 7 - 0
ruoyi-admin/src/main/resources/application-dev.yml

@@ -67,6 +67,13 @@ spring:
           url: jdbc:sqlserver://10.0.0.6:1433;DatabaseName=HTSail_CS;SelectMethod=cursor;encrypt=false
           username: sa
           password: abc,123
+        # Drawing_Data 数据源 (yingpaipay-drawing 模块专用)
+        drawing_data:
+          type: ${spring.datasource.type}
+          driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver
+          url: jdbc:sqlserver://10.0.0.6:1433;DatabaseName=Drawing_Data;SelectMethod=cursor;encrypt=false
+          username: sa
+          password: abc,123
 #        # 从库数据源
 #        slave:
 #          lazy: true

+ 7 - 0
ruoyi-admin/src/main/resources/application-prod.yml

@@ -70,6 +70,13 @@ spring:
           url: jdbc:sqlserver://192.168.1.250:1433;DatabaseName=HTSail_CS;SelectMethod=cursor;encrypt=false
           username: sa
           password: abc,123
+        # Drawing_Data 数据源 (yingpaipay-drawing 模块专用)
+        drawing_data:
+          type: ${spring.datasource.type}
+          driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver
+          url: jdbc:sqlserver://192.168.1.250:1433;DatabaseName=Drawing_Data;SelectMethod=cursor;encrypt=false
+          username: sa
+          password: abc,123
 #        # 从库数据源
 #        slave:
 #          lazy: true

+ 2 - 0
ruoyi-admin/src/main/resources/application.yml

@@ -201,6 +201,8 @@ springdoc:
       packages-to-scan: org.dromara.workflow
     - group: 6.原ERP系统数据对接模块
       packages-to-scan: org.dromara.yingpaipay
+    - group: 7.图纸数据库对接模块
+      packages-to-scan: org.dromara.drawing
 
 # 防止XSS攻击
 xss:

+ 4 - 1
ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/config/MybatisPlusConfig.java

@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.incrementer.DefaultIdentifierGenerator;
 import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator;
 import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
 import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
+import com.baomidou.mybatisplus.annotation.DbType;
 import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
 import com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor;
 import org.dromara.common.core.factory.YmlPropertySourceFactory;
@@ -70,12 +71,14 @@ public class MybatisPlusConfig {
     }
 
     /**
-     * 分页插件,自动识别数据库类型
+     * 分页插件,使用 SQL Server 2005 兼容分页语法,兼容所有 SQL Server 版本
      */
     public PaginationInnerInterceptor paginationInnerInterceptor() {
         PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor();
         // 分页合理化
         paginationInnerInterceptor.setOverflow(true);
+        // 使用 SQL Server 2005 的 ROW_NUMBER() 分页方式,兼容 SQL Server 2008/2012+
+        paginationInnerInterceptor.setDbType(DbType.SQL_SERVER2005);
         return paginationInnerInterceptor;
     }
 

+ 1 - 0
ruoyi-modules/pom.xml

@@ -16,6 +16,7 @@
         <module>ruoyi-system</module>
         <module>ruoyi-workflow</module>
         <module>yingpaipay-erp</module>
+        <module>yingpaipay-drawing</module>
     </modules>
 
     <artifactId>ruoyi-modules</artifactId>

+ 9 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysComplaintController.java

@@ -39,6 +39,15 @@ public class SysComplaintController extends BaseController {
         return sysComplaintService.queryPageList(bo, pageQuery);
     }
 
+    /**
+     * 查询当前客户的投诉建议列表(小程序端)
+     * @Author: Trae
+     */
+    @GetMapping("/myList")
+    public TableDataInfo<SysComplaintVo> myList(PageQuery pageQuery) {
+        return sysComplaintService.queryMyPageList(LoginHelper.getUserId(), pageQuery);
+    }
+
     /**
      * 提交投诉建议(小程序端,需登录)
      */

+ 6 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysComplaintService.java

@@ -38,4 +38,10 @@ public interface ISysComplaintService {
      */
     Boolean deleteWithValidByIds(Collection<Long> ids);
 
+    /**
+     * 分页查询当前客户的投诉建议列表(小程序端)
+     * @Author: Trae
+     */
+    TableDataInfo<SysComplaintVo> queryMyPageList(Long customerId, PageQuery pageQuery);
+
 }

+ 13 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysComplaintServiceImpl.java

@@ -116,4 +116,17 @@ public class SysComplaintServiceImpl implements ISysComplaintService {
         return baseMapper.deleteByIds(ids) > 0;
     }
 
+    /**
+     * 分页查询当前客户的投诉建议列表(小程序端)
+     * @Author: Trae
+     */
+    @Override
+    public TableDataInfo<SysComplaintVo> queryMyPageList(Long customerId, PageQuery pageQuery) {
+        LambdaQueryWrapper<SysComplaint> lqw = Wrappers.lambdaQuery();
+        lqw.eq(SysComplaint::getCustomerId, customerId);
+        lqw.orderByDesc(SysComplaint::getCreateTime);
+        Page<SysComplaintVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+        return TableDataInfo.build(result);
+    }
+
 }

+ 62 - 0
ruoyi-modules/yingpaipay-drawing/pom.xml

@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <groupId>org.dromara</groupId>
+        <artifactId>ruoyi-modules</artifactId>
+        <version>${revision}</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>yingpaipay-drawing</artifactId>
+
+    <description>
+        盈派支付 - 图纸数据库对接模块 - 使用 Drawing_Data 数据库
+    </description>
+
+    <dependencies>
+
+        <dependency>
+            <groupId>org.dromara</groupId>
+            <artifactId>ruoyi-common-core</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.dromara</groupId>
+            <artifactId>ruoyi-common-doc</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.dromara</groupId>
+            <artifactId>ruoyi-common-mybatis</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.dromara</groupId>
+            <artifactId>ruoyi-common-log</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.dromara</groupId>
+            <artifactId>ruoyi-common-security</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.dromara</groupId>
+            <artifactId>ruoyi-common-web</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.dromara</groupId>
+            <artifactId>ruoyi-common-excel</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.dromara</groupId>
+            <artifactId>ruoyi-common-translation</artifactId>
+        </dependency>
+
+    </dependencies>
+
+</project>

+ 12 - 0
ruoyi-modules/yingpaipay-drawing/src/main/java/org/dromara/drawing/config/DrawingDataSourceConfig.java

@@ -0,0 +1,12 @@
+package org.dromara.drawing.config;
+
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * 图纸数据库数据源配置
+ *
+ * @Author: Trae
+ */
+@Configuration
+public class DrawingDataSourceConfig {
+}

+ 61 - 0
ruoyi-modules/yingpaipay-drawing/src/main/java/org/dromara/drawing/controller/DrawingFileController.java

@@ -0,0 +1,61 @@
+package org.dromara.drawing.controller;
+
+import lombok.RequiredArgsConstructor;
+import org.dromara.common.core.domain.R;
+import org.dromara.drawing.domain.query.DrawingFileQuery;
+import org.dromara.drawing.domain.vo.DrawingFileVo;
+import org.dromara.drawing.service.IDrawingFileService;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 图纸文件控制器
+ *
+ * @Author: Trae
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/drawing/file")
+public class DrawingFileController {
+
+    private final IDrawingFileService drawingFileService;
+
+    /**
+     * 查询图纸文件列表
+     */
+    @GetMapping("/list")
+    public R<List<DrawingFileVo>> list(DrawingFileQuery query) {
+        return R.ok(drawingFileService.queryList(query));
+    }
+
+    /**
+     * 根据ID查询图纸文件详情
+     */
+    @GetMapping("/{id}")
+    public R<DrawingFileVo> getById(@PathVariable Integer id) {
+        DrawingFileVo vo = drawingFileService.queryById(id);
+        if (vo != null) {
+            vo.setFileValue(null);
+        }
+        return R.ok(vo);
+    }
+
+    /**
+     * 根据图纸代码批量查询JPG简图(返回 FNum -> base64 的映射)
+     */
+    @GetMapping("/imageByNums")
+    public R<Map<String, String>> imageByNums(@RequestParam("nums") String nums) {
+        List<String> numList = Arrays.asList(nums.split(","));
+        return R.ok(drawingFileService.queryImagesByNums(numList));
+    }
+
+}

+ 100 - 0
ruoyi-modules/yingpaipay-drawing/src/main/java/org/dromara/drawing/domain/DrawingFile.java

@@ -0,0 +1,100 @@
+package org.dromara.drawing.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import org.dromara.drawing.domain.vo.DrawingFileVo;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 图纸文件 Drawing_File
+ *
+ * @Author: Trae
+ */
+@Data
+@AutoMapper(target = DrawingFileVo.class)
+@TableName("Drawing_File")
+public class DrawingFile implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 自增主键
+     */
+    @TableId(value = "FID", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 图纸代码
+     */
+    @TableField("FNum")
+    private String num;
+
+    /**
+     * 图纸名称
+     */
+    @TableField("FName")
+    private String name;
+
+    /**
+     * 扩展名
+     */
+    @TableField("EName")
+    private String ename;
+
+    /**
+     * 图纸类别
+     */
+    @TableField("FClass")
+    private String fileClass;
+
+    /**
+     * 图纸内容(二进制)
+     */
+    @TableField("FValue")
+    private byte[] fileValue;
+
+    /**
+     * 上传时间
+     */
+    @TableField("FDate")
+    private Date fileDate;
+
+    /**
+     * 上传人
+     */
+    @TableField("FOper")
+    private String fileOper;
+
+    /**
+     * 图纸类型
+     */
+    @TableField("FType")
+    private Integer fileType;
+
+    /**
+     * 图纸种类ID
+     */
+    @TableField("FDrawingClassID")
+    private Integer drawingClassId;
+
+    /**
+     * 审核人
+     */
+    @TableField("PostName")
+    private String postName;
+
+    /**
+     * 审核时间
+     */
+    @TableField("PostDate")
+    private Date postDate;
+
+}

+ 38 - 0
ruoyi-modules/yingpaipay-drawing/src/main/java/org/dromara/drawing/domain/query/DrawingFileQuery.java

@@ -0,0 +1,38 @@
+package org.dromara.drawing.domain.query;
+
+import lombok.Data;
+
+/**
+ * 图纸文件查询对象
+ *
+ * @Author: Trae
+ */
+@Data
+public class DrawingFileQuery {
+
+    /**
+     * 图纸代码
+     */
+    private String num;
+
+    /**
+     * 图纸名称
+     */
+    private String name;
+
+    /**
+     * 图纸类别
+     */
+    private String fileClass;
+
+    /**
+     * 图纸类型
+     */
+    private Integer fileType;
+
+    /**
+     * 图纸种类ID
+     */
+    private Integer drawingClassId;
+
+}

+ 47 - 0
ruoyi-modules/yingpaipay-drawing/src/main/java/org/dromara/drawing/domain/vo/DrawingFileVo.java

@@ -0,0 +1,47 @@
+package org.dromara.drawing.domain.vo;
+
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import org.dromara.drawing.domain.DrawingFile;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 图纸文件 VO
+ *
+ * @Author: Trae
+ */
+@Data
+@AutoMapper(target = DrawingFile.class)
+public class DrawingFileVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    private Integer id;
+
+    private String num;
+
+    private String name;
+
+    private String ename;
+
+    private String fileClass;
+
+    private byte[] fileValue;
+
+    private Date fileDate;
+
+    private String fileOper;
+
+    private Integer fileType;
+
+    private Integer drawingClassId;
+
+    private String postName;
+
+    private Date postDate;
+
+}

+ 15 - 0
ruoyi-modules/yingpaipay-drawing/src/main/java/org/dromara/drawing/mapper/DrawingFileMapper.java

@@ -0,0 +1,15 @@
+package org.dromara.drawing.mapper;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+import org.dromara.drawing.domain.DrawingFile;
+import org.dromara.drawing.domain.vo.DrawingFileVo;
+
+/**
+ * 图纸文件 Mapper
+ *
+ * @Author: Trae
+ */
+@DS("drawing_data")
+public interface DrawingFileMapper extends BaseMapperPlus<DrawingFile, DrawingFileVo> {
+}

+ 31 - 0
ruoyi-modules/yingpaipay-drawing/src/main/java/org/dromara/drawing/service/IDrawingFileService.java

@@ -0,0 +1,31 @@
+package org.dromara.drawing.service;
+
+import org.dromara.drawing.domain.query.DrawingFileQuery;
+import org.dromara.drawing.domain.vo.DrawingFileVo;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 图纸文件 Service 接口
+ *
+ * @Author: Trae
+ */
+public interface IDrawingFileService {
+
+    /**
+     * 查询图纸文件列表
+     */
+    List<DrawingFileVo> queryList(DrawingFileQuery query);
+
+    /**
+     * 根据ID查询图纸文件
+     */
+    DrawingFileVo queryById(Integer id);
+
+    /**
+     * 根据图纸代码批量查询JPG简图(返回 FNum -> base64 的映射)
+     */
+    Map<String, String> queryImagesByNums(List<String> nums);
+
+}

+ 75 - 0
ruoyi-modules/yingpaipay-drawing/src/main/java/org/dromara/drawing/service/impl/DrawingFileServiceImpl.java

@@ -0,0 +1,75 @@
+package org.dromara.drawing.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import lombok.RequiredArgsConstructor;
+import org.dromara.drawing.domain.DrawingFile;
+import org.dromara.drawing.domain.query.DrawingFileQuery;
+import org.dromara.drawing.domain.vo.DrawingFileVo;
+import org.dromara.drawing.mapper.DrawingFileMapper;
+import org.dromara.drawing.service.IDrawingFileService;
+import org.springframework.stereotype.Service;
+
+import java.util.Base64;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 图纸文件 Service 业务层处理
+ *
+ * @Author: Trae
+ */
+@RequiredArgsConstructor
+@Service
+public class DrawingFileServiceImpl implements IDrawingFileService {
+
+    private final DrawingFileMapper baseMapper;
+
+    @Override
+    public List<DrawingFileVo> queryList(DrawingFileQuery query) {
+        LambdaQueryWrapper<DrawingFile> lqw = buildQueryWrapper(query);
+        return baseMapper.selectVoList(lqw);
+    }
+
+    @Override
+    public DrawingFileVo queryById(Integer id) {
+        return baseMapper.selectVoById(id);
+    }
+
+    @Override
+    public Map<String, String> queryImagesByNums(List<String> nums) {
+        if (CollUtil.isEmpty(nums)) {
+            return new HashMap<>();
+        }
+        LambdaQueryWrapper<DrawingFile> lqw = Wrappers.lambdaQuery();
+        lqw.in(DrawingFile::getNum, nums);
+        lqw.eq(DrawingFile::getEname, ".JPG");
+        lqw.select(DrawingFile::getNum, DrawingFile::getFileValue);
+        List<DrawingFile> list = baseMapper.selectList(lqw);
+        Map<String, String> result = new HashMap<>();
+        for (DrawingFile df : list) {
+            if (df.getFileValue() != null && df.getFileValue().length > 0) {
+                result.put(df.getNum(), Base64.getEncoder().encodeToString(df.getFileValue()));
+            }
+        }
+        return result;
+    }
+
+    private LambdaQueryWrapper<DrawingFile> buildQueryWrapper(DrawingFileQuery query) {
+        LambdaQueryWrapper<DrawingFile> lqw = Wrappers.lambdaQuery();
+        if (query != null) {
+            lqw.like(StrUtil.isNotBlank(query.getNum()), DrawingFile::getNum, query.getNum());
+            lqw.like(StrUtil.isNotBlank(query.getName()), DrawingFile::getName, query.getName());
+            lqw.like(StrUtil.isNotBlank(query.getFileClass()), DrawingFile::getFileClass, query.getFileClass());
+            lqw.eq(ObjectUtil.isNotEmpty(query.getFileType()), DrawingFile::getFileType, query.getFileType());
+            lqw.eq(ObjectUtil.isNotEmpty(query.getDrawingClassId()), DrawingFile::getDrawingClassId, query.getDrawingClassId());
+        }
+        lqw.orderByAsc(DrawingFile::getNum);
+        return lqw;
+    }
+
+}

+ 1 - 0
ruoyi-modules/yingpaipay-drawing/src/main/resources/mapper/.gitkeep

@@ -0,0 +1 @@
+

+ 3 - 11
ruoyi-modules/yingpaipay-erp/src/main/java/org/dromara/erp/controller/ErpColorController.java

@@ -2,8 +2,6 @@ package org.dromara.erp.controller;
 
 import lombok.RequiredArgsConstructor;
 import org.dromara.common.core.domain.R;
-import org.dromara.common.mybatis.core.page.PageQuery;
-import org.dromara.common.mybatis.core.page.TableDataInfo;
 import org.dromara.erp.domain.query.ErpColorQuery;
 import org.dromara.erp.domain.vo.ErpColorVo;
 import org.dromara.erp.service.IErpColorService;
@@ -28,15 +26,9 @@ public class ErpColorController {
     private final IErpColorService erpColorService;
 
     /**
-     * 分页查询 ERP 颜色列表
-     */
-    @GetMapping("/page")
-    public TableDataInfo<ErpColorVo> page(ErpColorQuery query, PageQuery pageQuery) {
-        return erpColorService.queryPageList(query, pageQuery);
-    }
-
-    /**
-     * 查询 ERP 颜色列表(不分页)
+     * 查询 ERP 颜色列表(按父级ID分级)
+     * parentRowId 为空时查询第一级(parentRowId IS NULL),非空时查询下级
+     * @Author: Trae
      */
     @GetMapping("/list")
     public R<List<ErpColorVo>> list(ErpColorQuery query) {

+ 4 - 13
ruoyi-modules/yingpaipay-erp/src/main/java/org/dromara/erp/controller/ErpColorKindController.java

@@ -2,8 +2,6 @@ package org.dromara.erp.controller;
 
 import lombok.RequiredArgsConstructor;
 import org.dromara.common.core.domain.R;
-import org.dromara.common.mybatis.core.page.PageQuery;
-import org.dromara.common.mybatis.core.page.TableDataInfo;
 import org.dromara.erp.domain.query.ErpColorKindQuery;
 import org.dromara.erp.domain.vo.ErpColorKindVo;
 import org.dromara.erp.service.IErpColorKindService;
@@ -28,19 +26,12 @@ public class ErpColorKindController {
     private final IErpColorKindService erpColorKindService;
 
     /**
-     * 分页查询颜色种类列表
-     */
-    @GetMapping("/page")
-    public TableDataInfo<ErpColorKindVo> page(ErpColorKindQuery query, PageQuery pageQuery) {
-        return erpColorKindService.queryPageList(query, pageQuery);
-    }
-
-    /**
-     * 查询颜色种类列表(不分页)
+     * 查询颜色种类列表(按父级ID分级)
+     * @Author: Trae
      */
     @GetMapping("/list")
-    public R<List<ErpColorKindVo>> list() {
-        return R.ok(erpColorKindService.queryList());
+    public R<List<ErpColorKindVo>> list(ErpColorKindQuery query) {
+        return R.ok(erpColorKindService.queryList(query));
     }
 
 }

+ 3 - 11
ruoyi-modules/yingpaipay-erp/src/main/java/org/dromara/erp/controller/ErpModelController.java

@@ -2,8 +2,6 @@ package org.dromara.erp.controller;
 
 import lombok.RequiredArgsConstructor;
 import org.dromara.common.core.domain.R;
-import org.dromara.common.mybatis.core.page.PageQuery;
-import org.dromara.common.mybatis.core.page.TableDataInfo;
 import org.dromara.erp.domain.query.ErpModelQuery;
 import org.dromara.erp.domain.vo.ErpModelVo;
 import org.dromara.erp.service.IErpModelService;
@@ -28,15 +26,9 @@ public class ErpModelController {
     private final IErpModelService erpModelService;
 
     /**
-     * 分页查询型材列表
-     */
-    @GetMapping("/page")
-    public TableDataInfo<ErpModelVo> page(ErpModelQuery query, PageQuery pageQuery) {
-        return erpModelService.queryPageList(query, pageQuery);
-    }
-
-    /**
-     * 查询型材列表(不分页)
+     * 查询型材列表(按父级ID分级)
+     * parentRowId 为空时查询第一级(parentRowId IS NULL),非空时查询下级
+     * @Author: Trae
      */
     @GetMapping("/list")
     public R<List<ErpModelVo>> list(ErpModelQuery query) {

+ 36 - 0
ruoyi-modules/yingpaipay-erp/src/main/java/org/dromara/erp/controller/ErpModelKindController.java

@@ -0,0 +1,36 @@
+package org.dromara.erp.controller;
+
+import lombok.RequiredArgsConstructor;
+import org.dromara.common.core.domain.R;
+import org.dromara.erp.domain.query.ErpModelKindQuery;
+import org.dromara.erp.domain.vo.ErpModelKindVo;
+import org.dromara.erp.service.IErpModelKindService;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * ERP 型号类别控制器
+ *
+ * @Author: Trae
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/erp/modelKind")
+public class ErpModelKindController {
+
+    private final IErpModelKindService erpModelKindService;
+
+    /**
+     * 查询型号类别列表(按父级ID分级)
+     */
+    @GetMapping("/list")
+    public R<List<ErpModelKindVo>> list(ErpModelKindQuery query) {
+        return R.ok(erpModelKindService.queryList(query));
+    }
+
+}

+ 9 - 0
ruoyi-modules/yingpaipay-erp/src/main/java/org/dromara/erp/controller/ErpOrderController.java

@@ -84,4 +84,13 @@ public class ErpOrderController {
     public R<Void> cancel(@PathVariable("rowId") String rowId) {
         return erpOrderService.cancelOrder(rowId) ? R.ok() : R.fail();
     }
+
+    /**
+     * 加急订单
+     * @Author: Trae
+     */
+    @PostMapping("/urgent/{rowId}")
+    public R<Void> markUrgent(@PathVariable("rowId") String rowId) {
+        return erpOrderService.markUrgent(rowId) ? R.ok() : R.fail();
+    }
 }

+ 10 - 0
ruoyi-modules/yingpaipay-erp/src/main/java/org/dromara/erp/controller/ErpOrderDetailController.java

@@ -63,4 +63,14 @@ public class ErpOrderDetailController {
         return erpOrderDetailService.deleteById(rowId) ? R.ok() : R.fail();
     }
 
+    /**
+     * 批量修改订单明细(表面处理 / 包装方式)
+     *
+     * @Author: Trae
+     */
+    @PutMapping("/batchUpdate")
+    public R<Void> batchUpdate(@RequestBody org.dromara.erp.domain.bo.ErpOrderDetailBatchUpdateBo bo) {
+        return erpOrderDetailService.batchUpdate(bo) ? R.ok() : R.fail();
+    }
+
 }

+ 186 - 3
ruoyi-modules/yingpaipay-erp/src/main/java/org/dromara/erp/domain/ErpColorKind.java

@@ -10,6 +10,7 @@ import org.dromara.erp.domain.vo.ErpColorKindVo;
 import java.io.Serial;
 import java.io.Serializable;
 import java.math.BigDecimal;
+import java.util.Date;
 
 /**
  * ERP 颜色种类 t_Bdi_ColorKind
@@ -42,6 +43,54 @@ public class ErpColorKind implements Serializable {
     @TableField("FName")
     private String name;
 
+    /**
+     * 电泳面积
+     */
+    @TableField("ElectricQty")
+    private BigDecimal electricQty;
+
+    /**
+     * 科目代码
+     * @Author: Trae
+     */
+    @TableField("AccountNum")
+    private String accountNum;
+
+    /**
+     * 废料代码
+     * @Author: Trae
+     */
+    @TableField("BadNum")
+    private String badNum;
+
+    /**
+     * 窗体功能ID
+     * @Author: Trae
+     */
+    @TableField("FormID")
+    private String formId;
+
+    /**
+     * 公司ID
+     * @Author: Trae
+     */
+    @TableField("CompanyID")
+    private Integer companyId;
+
+    /**
+     * 级联ID
+     * @Author: Trae
+     */
+    @TableField("ParentRowID")
+    private String parentRowId;
+
+    /**
+     * 树记录号
+     * @Author: Trae
+     */
+    @TableField("TreeControl")
+    private String treeControl;
+
     /**
      * 停用 (0-否, 1-是)
      */
@@ -49,10 +98,137 @@ public class ErpColorKind implements Serializable {
     private Integer stopUse;
 
     /**
-     * 电泳面积
+     * 级数
+     * @Author: Trae
      */
-    @TableField("ElectricQty")
-    private BigDecimal electricQty;
+    @TableField("LevelNum")
+    private Integer levelNum;
+
+    /**
+     * 修改人ID
+     * @Author: Trae
+     */
+    @TableField("ModifyUserID")
+    private String modifyUserId;
+
+    /**
+     * 编辑人
+     * @Author: Trae
+     */
+    @TableField("ModifyName")
+    private String modifyName;
+
+    /**
+     * 编辑时间
+     * @Author: Trae
+     */
+    @TableField("ModifyDate")
+    private Date modifyDate;
+
+    /**
+     * 创建人ID
+     * @Author: Trae
+     */
+    @TableField("EnterUserID")
+    private String enterUserId;
+
+    /**
+     * 创建人
+     * @Author: Trae
+     */
+    @TableField("EnterName")
+    private String enterName;
+
+    /**
+     * 创建时间
+     * @Author: Trae
+     */
+    @TableField("EnterDate")
+    private Date enterDate;
+
+    /**
+     * 修改状态
+     * @Author: Trae
+     */
+    @TableField("IsModifyFlag")
+    private Integer isModifyFlag;
+
+    /**
+     * 喷砂
+     * @Author: Trae
+     */
+    @TableField("IsSand")
+    private Integer isSand;
+
+    /**
+     * 氧化
+     * @Author: Trae
+     */
+    @TableField("IsOxidize")
+    private Integer isOxidize;
+
+    /**
+     * 电泳
+     * @Author: Trae
+     */
+    @TableField("IsElectro")
+    private Integer isElectro;
+
+    /**
+     * 喷涂
+     * @Author: Trae
+     */
+    @TableField("IsPowder")
+    private Integer isPowder;
+
+    /**
+     * 喷漆
+     * @Author: Trae
+     */
+    @TableField("IsPaint")
+    private Integer isPaint;
+
+    /**
+     * 木纹
+     * @Author: Trae
+     */
+    @TableField("IsStripe")
+    private Integer isStripe;
+
+    /**
+     * 发外
+     * @Author: Trae
+     */
+    @TableField("IsWithOut")
+    private Integer isWithOut;
+
+    /**
+     * 树节点ID
+     * @Author: Trae
+     */
+    @TableField("TreeID")
+    private String treeId;
+
+    /**
+     * 父节点ID
+     * @Author: Trae
+     */
+    @TableField("ParentID")
+    private String parentId;
+
+    /**
+     * 工艺ID
+     * @Author: Trae
+     */
+    @TableField("CraftID")
+    private String craftId;
+
+    /**
+     * 工艺代码
+     * @Author: Trae
+     */
+    @TableField("CraftNum")
+    private String craftNum;
 
     /**
      * 工艺名称
@@ -72,4 +248,11 @@ public class ErpColorKind implements Serializable {
     @TableField("ProcessType")
     private String processType;
 
+    /**
+     * 保护膜规格
+     * @Author: Trae
+     */
+    @TableField("FilmReqSpec")
+    private String filmReqSpec;
+
 }

+ 7 - 0
ruoyi-modules/yingpaipay-erp/src/main/java/org/dromara/erp/domain/ErpModel.java

@@ -91,6 +91,13 @@ public class ErpModel implements Serializable {
     @TableField("StopUse")
     private Integer stopUse;
 
+    /**
+     * 父级ID
+     * @Author: Trae
+     */
+    @TableField("ParentRowID")
+    private String parentRowId;
+
     /**
      * 备注
      */

+ 141 - 0
ruoyi-modules/yingpaipay-erp/src/main/java/org/dromara/erp/domain/ErpModelKind.java

@@ -0,0 +1,141 @@
+package org.dromara.erp.domain;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import org.dromara.erp.domain.vo.ErpModelKindVo;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * ERP 型号类别 t_Bdi_ModelKind
+ *
+ * @Author: Trae
+ */
+@Data
+@AutoMapper(target = ErpModelKindVo.class)
+@TableName("t_Bdi_ModelKind")
+public class ErpModelKind implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 序号(主键)
+     */
+    @TableId("FRowID")
+    private String rowId;
+
+    /**
+     * 代码
+     */
+    @TableField("FNum")
+    private String num;
+
+    /**
+     * 名称
+     */
+    @TableField("FName")
+    private String name;
+
+    /**
+     * 窗体功能ID
+     */
+    @TableField("FormID")
+    private String formId;
+
+    /**
+     * 公司ID
+     */
+    @TableField("CompanyID")
+    private Integer companyId;
+
+    /**
+     * 树记录号
+     */
+    @TableField("TreeControl")
+    private String treeControl;
+
+    /**
+     * 级联ID
+     */
+    @TableField("ParentRowID")
+    private String parentRowId;
+
+    /**
+     * 停用 (0-否, 1-是)
+     */
+    @TableField("StopUse")
+    private Integer stopUse;
+
+    /**
+     * 修改人ID
+     */
+    @TableField("ModifyUserID")
+    private String modifyUserId;
+
+    /**
+     * 编辑人
+     */
+    @TableField("ModifyName")
+    private String modifyName;
+
+    /**
+     * 编辑时间
+     */
+    @TableField("ModifyDate")
+    private Date modifyDate;
+
+    /**
+     * 创建人ID
+     */
+    @TableField("EnterUserID")
+    private String enterUserId;
+
+    /**
+     * 创建人
+     */
+    @TableField("EnterName")
+    private String enterName;
+
+    /**
+     * 创建时间
+     */
+    @TableField("EnterDate")
+    private Date enterDate;
+
+    /**
+     * 修改状态
+     */
+    @TableField("IsModifyFlag")
+    private Integer isModifyFlag;
+
+    /**
+     * 分组类别
+     */
+    @TableField("GroupKind")
+    private String groupKind;
+
+    /**
+     * 树节点ID
+     */
+    @TableField("TreeID")
+    private String treeId;
+
+    /**
+     * 父节点ID
+     */
+    @TableField("ParentID")
+    private String parentId;
+
+    /**
+     * 型号类别(建材/工业材/门窗型材等)
+     */
+    @TableField("ModelKind")
+    private String modelKind;
+
+}

+ 7 - 0
ruoyi-modules/yingpaipay-erp/src/main/java/org/dromara/erp/domain/ErpOrder.java

@@ -55,6 +55,13 @@ public class ErpOrder implements Serializable {
     @TableField("FIsConfirmed")
     private Integer isConfirmed;
 
+    /**
+     * 是否加急 (0-否 1-是)
+     * @Author: Trae
+     */
+    @TableField("FUrgentFlag")
+    private Integer urgentFlag;
+
     /**
      * 单据编号 (对应物理列 FErpDocCode)
      * @Author: Antigravity

+ 7 - 0
ruoyi-modules/yingpaipay-erp/src/main/java/org/dromara/erp/domain/ErpOrderDetail.java

@@ -98,6 +98,13 @@ public class ErpOrderDetail implements Serializable {
     @TableField("WallThickness")
     private BigDecimal wallThickness;
 
+    /**
+     * 理论米重
+     * @Author: Trae
+     */
+    @TableField("MeterWeight")
+    private BigDecimal meterWeight;
+
     /**
      * 支数
      */

+ 44 - 0
ruoyi-modules/yingpaipay-erp/src/main/java/org/dromara/erp/domain/bo/ErpOrderDetailBatchUpdateBo.java

@@ -0,0 +1,44 @@
+package org.dromara.erp.domain.bo;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 订单明细批量修改请求对象
+ *
+ * @Author: Trae
+ */
+@Data
+public class ErpOrderDetailBatchUpdateBo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 要修改的明细 ID 列表
+     */
+    private List<String> rowIds;
+
+    /**
+     * 表面处理ID
+     */
+    private String surfaceId;
+
+    /**
+     * 表面处理名称
+     */
+    private String surfaceName;
+
+    /**
+     * 包装方式ID
+     */
+    private String packId;
+
+    /**
+     * 包装方式名称
+     */
+    private String packName;
+}

+ 6 - 0
ruoyi-modules/yingpaipay-erp/src/main/java/org/dromara/erp/domain/bo/ErpOrderDetailBo.java

@@ -44,6 +44,12 @@ public class ErpOrderDetailBo implements Serializable {
 
     private BigDecimal wallThickness;
 
+    /**
+     * 理论米重
+     * @Author: Trae
+     */
+    private BigDecimal meterWeight;
+
     private Integer count;
 
     /**

+ 6 - 0
ruoyi-modules/yingpaipay-erp/src/main/java/org/dromara/erp/domain/query/ErpColorKindQuery.java

@@ -20,4 +20,10 @@ public class ErpColorKindQuery {
      */
     private String name;
 
+    /**
+     * 父级ID(为空时查第一级,非空时查该父级下的子级)
+     * @Author: Trae
+     */
+    private String parentRowId;
+
 }

+ 6 - 0
ruoyi-modules/yingpaipay-erp/src/main/java/org/dromara/erp/domain/query/ErpColorQuery.java

@@ -25,4 +25,10 @@ public class ErpColorQuery {
      */
     private String colorKind;
 
+    /**
+     * 父级ID(为空时查第一级,非空时查该父级下的子级)
+     * @Author: Trae
+     */
+    private String parentRowId;
+
 }

+ 33 - 0
ruoyi-modules/yingpaipay-erp/src/main/java/org/dromara/erp/domain/query/ErpModelKindQuery.java

@@ -0,0 +1,33 @@
+package org.dromara.erp.domain.query;
+
+import lombok.Data;
+
+/**
+ * ERP 型号类别查询对象
+ *
+ * @Author: Trae
+ */
+@Data
+public class ErpModelKindQuery {
+
+    /**
+     * 代码
+     */
+    private String num;
+
+    /**
+     * 名称
+     */
+    private String name;
+
+    /**
+     * 型号类别
+     */
+    private String modelKind;
+
+    /**
+     * 父级ID(为空时查第一级,非空时查该父级下的子级)
+     */
+    private String parentRowId;
+
+}

+ 18 - 0
ruoyi-modules/yingpaipay-erp/src/main/java/org/dromara/erp/domain/query/ErpModelQuery.java

@@ -20,4 +20,22 @@ public class ErpModelQuery {
      */
     private String name;
 
+    /**
+     * 料别
+     * @Author: Trae
+     */
+    private String modelSort;
+
+    /**
+     * 型号类别
+     * @Author: Trae
+     */
+    private String modelKind;
+
+    /**
+     * 父级ID(为空时查第一级,非空时查该父级下的子级)
+     * @Author: Trae
+     */
+    private String parentRowId;
+
 }

+ 54 - 1
ruoyi-modules/yingpaipay-erp/src/main/java/org/dromara/erp/domain/vo/ErpColorKindVo.java

@@ -7,6 +7,7 @@ import org.dromara.erp.domain.ErpColorKind;
 import java.io.Serial;
 import java.io.Serializable;
 import java.math.BigDecimal;
+import java.util.Date;
 
 /**
  * ERP 颜色种类 VO
@@ -26,9 +27,59 @@ public class ErpColorKindVo implements Serializable {
 
     private String name;
 
+    private BigDecimal electricQty;
+
+    private String accountNum;
+
+    private String badNum;
+
+    private String formId;
+
+    private Integer companyId;
+
+    private String parentRowId;
+
+    private String treeControl;
+
     private Integer stopUse;
 
-    private BigDecimal electricQty;
+    private Integer levelNum;
+
+    private String modifyUserId;
+
+    private String modifyName;
+
+    private Date modifyDate;
+
+    private String enterUserId;
+
+    private String enterName;
+
+    private Date enterDate;
+
+    private Integer isModifyFlag;
+
+    private Integer isSand;
+
+    private Integer isOxidize;
+
+    private Integer isElectro;
+
+    private Integer isPowder;
+
+    private Integer isPaint;
+
+    private Integer isStripe;
+
+    private Integer isWithOut;
+
+    private String treeId;
+
+    private String parentId;
+
+    private String craftId;
+
+    private String craftNum;
 
     private String craftName;
 
@@ -36,4 +87,6 @@ public class ErpColorKindVo implements Serializable {
 
     private String processType;
 
+    private String filmReqSpec;
+
 }

+ 61 - 0
ruoyi-modules/yingpaipay-erp/src/main/java/org/dromara/erp/domain/vo/ErpModelKindVo.java

@@ -0,0 +1,61 @@
+package org.dromara.erp.domain.vo;
+
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import org.dromara.erp.domain.ErpModelKind;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * ERP 型号类别 VO
+ *
+ * @Author: Trae
+ */
+@Data
+@AutoMapper(target = ErpModelKind.class)
+public class ErpModelKindVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    private String rowId;
+
+    private String num;
+
+    private String name;
+
+    private String formId;
+
+    private Integer companyId;
+
+    private String treeControl;
+
+    private String parentRowId;
+
+    private Integer stopUse;
+
+    private String modifyUserId;
+
+    private String modifyName;
+
+    private Date modifyDate;
+
+    private String enterUserId;
+
+    private String enterName;
+
+    private Date enterDate;
+
+    private Integer isModifyFlag;
+
+    private String groupKind;
+
+    private String treeId;
+
+    private String parentId;
+
+    private String modelKind;
+
+}

+ 12 - 0
ruoyi-modules/yingpaipay-erp/src/main/java/org/dromara/erp/domain/vo/ErpModelVo.java

@@ -60,4 +60,16 @@ public class ErpModelVo implements Serializable {
      */
     private Integer stopUse;
 
+    /**
+     * 父级ID
+     * @Author: Trae
+     */
+    private String parentRowId;
+
+    /**
+     * 理论米重
+     * @Author: Trae
+     */
+    private BigDecimal meterWt;
+
 }

+ 6 - 0
ruoyi-modules/yingpaipay-erp/src/main/java/org/dromara/erp/domain/vo/ErpOrderDetailVo.java

@@ -55,6 +55,12 @@ public class ErpOrderDetailVo implements Serializable {
 
     private Integer count;
 
+    /**
+     * 理论米重(关联 ErpModel 查询)
+     * @Author: Trae
+     */
+    private java.math.BigDecimal meterWeight;
+
     /**
      * 单据编号
      * @Author: Antigravity

+ 6 - 0
ruoyi-modules/yingpaipay-erp/src/main/java/org/dromara/erp/domain/vo/ErpOrderVo.java

@@ -56,6 +56,12 @@ public class ErpOrderVo implements Serializable {
      */
     private Integer isConfirmed;
 
+    /**
+     * 是否加急 (0-否 1-是)
+     * @Author: Trae
+     */
+    private Integer urgentFlag;
+
     /**
      * 单据编号
      * @Author: Antigravity

+ 15 - 0
ruoyi-modules/yingpaipay-erp/src/main/java/org/dromara/erp/mapper/ErpModelKindMapper.java

@@ -0,0 +1,15 @@
+package org.dromara.erp.mapper;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+import org.dromara.erp.domain.ErpModelKind;
+import org.dromara.erp.domain.vo.ErpModelKindVo;
+
+/**
+ * ERP 型号类别 Mapper
+ *
+ * @Author: Trae
+ */
+@DS("htsail_cs")
+public interface ErpModelKindMapper extends BaseMapperPlus<ErpModelKind, ErpModelKindVo> {
+}

+ 5 - 9
ruoyi-modules/yingpaipay-erp/src/main/java/org/dromara/erp/service/IErpColorKindService.java

@@ -1,7 +1,5 @@
 package org.dromara.erp.service;
 
-import org.dromara.common.mybatis.core.page.PageQuery;
-import org.dromara.common.mybatis.core.page.TableDataInfo;
 import org.dromara.erp.domain.query.ErpColorKindQuery;
 import org.dromara.erp.domain.vo.ErpColorKindVo;
 
@@ -15,13 +13,11 @@ import java.util.List;
 public interface IErpColorKindService {
 
     /**
-     * 分页查询颜色种类列表
+     * 查询颜色种类列表
+     * parentRowId 为空时查第一级(全表查,parentRowId 不匹配任何 rowId 的为一级)
+     * parentRowId 有值时查子级
+     * @Author: Trae
      */
-    TableDataInfo<ErpColorKindVo> queryPageList(ErpColorKindQuery query, PageQuery pageQuery);
-
-    /**
-     * 查询所有颜色种类(不分页)
-     */
-    List<ErpColorKindVo> queryList();
+    List<ErpColorKindVo> queryList(ErpColorKindQuery query);
 
 }

+ 4 - 8
ruoyi-modules/yingpaipay-erp/src/main/java/org/dromara/erp/service/IErpColorService.java

@@ -1,7 +1,5 @@
 package org.dromara.erp.service;
 
-import org.dromara.common.mybatis.core.page.PageQuery;
-import org.dromara.common.mybatis.core.page.TableDataInfo;
 import org.dromara.erp.domain.query.ErpColorQuery;
 import org.dromara.erp.domain.vo.ErpColorVo;
 
@@ -15,12 +13,10 @@ import java.util.List;
 public interface IErpColorService {
 
     /**
-     * 分页查询 ERP 颜色列表
-     */
-    TableDataInfo<ErpColorVo> queryPageList(ErpColorQuery query, PageQuery pageQuery);
-
-    /**
-     * 查询所有启用的 ERP 颜色列表(不分页)
+     * 查询颜色列表
+     * parentRowId 为空时查第一级(全表查,parentRowId 不匹配任何 rowId 的为一级)
+     * parentRowId 有值时查子级
+     * @Author: Trae
      */
     List<ErpColorVo> queryList(ErpColorQuery query);
 

+ 22 - 0
ruoyi-modules/yingpaipay-erp/src/main/java/org/dromara/erp/service/IErpModelKindService.java

@@ -0,0 +1,22 @@
+package org.dromara.erp.service;
+
+import org.dromara.erp.domain.query.ErpModelKindQuery;
+import org.dromara.erp.domain.vo.ErpModelKindVo;
+
+import java.util.List;
+
+/**
+ * ERP 型号类别 Service 接口
+ *
+ * @Author: Trae
+ */
+public interface IErpModelKindService {
+
+    /**
+     * 查询型号类别列表
+     * parentRowId 为空时查第一级(全表查,parentRowId 不匹配任何 rowId 的为一级)
+     * parentRowId 有值时查子级
+     */
+    List<ErpModelKindVo> queryList(ErpModelKindQuery query);
+
+}

+ 4 - 8
ruoyi-modules/yingpaipay-erp/src/main/java/org/dromara/erp/service/IErpModelService.java

@@ -1,7 +1,5 @@
 package org.dromara.erp.service;
 
-import org.dromara.common.mybatis.core.page.PageQuery;
-import org.dromara.common.mybatis.core.page.TableDataInfo;
 import org.dromara.erp.domain.query.ErpModelQuery;
 import org.dromara.erp.domain.vo.ErpModelVo;
 
@@ -15,12 +13,10 @@ import java.util.List;
 public interface IErpModelService {
 
     /**
-     * 分页查询型材列表
-     */
-    TableDataInfo<ErpModelVo> queryPageList(ErpModelQuery query, PageQuery pageQuery);
-
-    /**
-     * 查询所有型材(不分页,建议限流或加条件)
+     * 查询型材列表
+     * parentRowId 为空时查第一级(全表查,parentRowId 不匹配任何 rowId 的为一级)
+     * parentRowId 有值时查子级
+     * @Author: Trae
      */
     List<ErpModelVo> queryList(ErpModelQuery query);
 

+ 7 - 0
ruoyi-modules/yingpaipay-erp/src/main/java/org/dromara/erp/service/IErpOrderDetailService.java

@@ -3,6 +3,7 @@ package org.dromara.erp.service;
 import org.dromara.erp.domain.vo.ErpOrderDetailVo;
 import org.dromara.erp.domain.query.ErpOrderDetailQuery;
 import org.dromara.erp.domain.bo.ErpOrderDetailBo;
+import org.dromara.erp.domain.bo.ErpOrderDetailBatchUpdateBo;
 
 import java.util.List;
 
@@ -38,4 +39,10 @@ public interface IErpOrderDetailService {
      */
     Boolean deleteById(String rowId);
 
+    /**
+     * 批量修改订单明细(表面处理 / 包装方式)
+     *
+     * @Author: Trae
+     */
+    Boolean batchUpdate(ErpOrderDetailBatchUpdateBo bo);
 }

+ 6 - 0
ruoyi-modules/yingpaipay-erp/src/main/java/org/dromara/erp/service/IErpOrderService.java

@@ -44,6 +44,12 @@ public interface IErpOrderService {
      */
     Boolean cancelOrder(String rowId);
 
+    /**
+     * 加急订单
+     * @Author: Trae
+     */
+    Boolean markUrgent(String rowId);
+
     /**
      * 同步 ERP 订单状态(定时任务)
      * 根据 ErpSaleOrderMaster 中的 Finished/Reviewed/Approved 字段更新本地订单状态

+ 34 - 13
ruoyi-modules/yingpaipay-erp/src/main/java/org/dromara/erp/service/impl/ErpColorKindServiceImpl.java

@@ -1,11 +1,10 @@
 package org.dromara.erp.service.impl;
 
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.RequiredArgsConstructor;
-import org.dromara.common.mybatis.core.page.PageQuery;
-import org.dromara.common.mybatis.core.page.TableDataInfo;
 import org.dromara.erp.domain.ErpColorKind;
 import org.dromara.erp.domain.query.ErpColorKindQuery;
 import org.dromara.erp.domain.vo.ErpColorKindVo;
@@ -14,6 +13,8 @@ import org.dromara.erp.service.IErpColorKindService;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
 
 /**
  * ERP 颜色种类 Service 业务层处理
@@ -27,24 +28,44 @@ public class ErpColorKindServiceImpl implements IErpColorKindService {
     private final ErpColorKindMapper baseMapper;
 
     @Override
-    public TableDataInfo<ErpColorKindVo> queryPageList(ErpColorKindQuery query, PageQuery pageQuery) {
-        LambdaQueryWrapper<ErpColorKind> lqw = buildQueryWrapper(query);
-        IPage<ErpColorKindVo> page = baseMapper.selectVoPage(pageQuery.build(), lqw);
-        return TableDataInfo.build(page);
+    public List<ErpColorKindVo> queryList(ErpColorKindQuery query) {
+        if (query != null && StrUtil.isNotBlank(query.getParentRowId())) {
+            LambdaQueryWrapper<ErpColorKind> lqw = buildQueryWrapper(query);
+            return baseMapper.selectVoList(lqw);
+        }
+        LambdaQueryWrapper<ErpColorKind> lqw = buildFirstLevelWrapper(query);
+        List<ErpColorKindVo> all = baseMapper.selectVoList(lqw);
+        Set<String> rowIds = all.stream()
+            .map(ErpColorKindVo::getRowId)
+            .filter(ObjectUtil::isNotEmpty)
+            .collect(Collectors.toSet());
+        return all.stream()
+            .filter(item -> {
+                String pid = item.getParentRowId();
+                return ObjectUtil.isEmpty(pid) || !rowIds.contains(pid);
+            })
+            .collect(Collectors.toList());
     }
 
-    private LambdaQueryWrapper<ErpColorKind> buildQueryWrapper(ErpColorKindQuery query) {
+    private LambdaQueryWrapper<ErpColorKind> buildFirstLevelWrapper(ErpColorKindQuery query) {
         LambdaQueryWrapper<ErpColorKind> lqw = Wrappers.lambdaQuery();
+        if (query != null) {
+            lqw.like(StrUtil.isNotBlank(query.getNum()), ErpColorKind::getNum, query.getNum());
+            lqw.like(StrUtil.isNotBlank(query.getName()), ErpColorKind::getName, query.getName());
+        }
         lqw.eq(ErpColorKind::getStopUse, 0);
         lqw.orderByAsc(ErpColorKind::getNum);
         return lqw;
     }
 
-    @Override
-    public List<ErpColorKindVo> queryList() {
-        return baseMapper.selectVoList(Wrappers.lambdaQuery(ErpColorKind.class)
-            .eq(ErpColorKind::getStopUse, 0)
-            .orderByAsc(ErpColorKind::getNum));
+    private LambdaQueryWrapper<ErpColorKind> buildQueryWrapper(ErpColorKindQuery query) {
+        LambdaQueryWrapper<ErpColorKind> lqw = Wrappers.lambdaQuery();
+        lqw.like(StrUtil.isNotBlank(query.getNum()), ErpColorKind::getNum, query.getNum());
+        lqw.like(StrUtil.isNotBlank(query.getName()), ErpColorKind::getName, query.getName());
+        lqw.eq(ErpColorKind::getParentRowId, query.getParentRowId());
+        lqw.eq(ErpColorKind::getStopUse, 0);
+        lqw.orderByAsc(ErpColorKind::getNum);
+        return lqw;
     }
 
 }

+ 31 - 20
ruoyi-modules/yingpaipay-erp/src/main/java/org/dromara/erp/service/impl/ErpColorServiceImpl.java

@@ -1,12 +1,10 @@
 package org.dromara.erp.service.impl;
 
+import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.RequiredArgsConstructor;
-import org.dromara.common.mybatis.core.page.PageQuery;
-import org.dromara.common.mybatis.core.page.TableDataInfo;
 import org.dromara.erp.domain.ErpColor;
 import org.dromara.erp.domain.query.ErpColorQuery;
 import org.dromara.erp.domain.vo.ErpColorVo;
@@ -15,6 +13,8 @@ import org.dromara.erp.service.IErpColorService;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
 
 /**
  * ERP 颜色 Service 业务层处理
@@ -27,34 +27,45 @@ public class ErpColorServiceImpl implements IErpColorService {
 
     private final ErpColorMapper baseMapper;
 
-    @Override
-    public TableDataInfo<ErpColorVo> queryPageList(ErpColorQuery query, PageQuery pageQuery) {
-        LambdaQueryWrapper<ErpColor> lqw = buildQueryWrapper(query);
-        IPage<ErpColorVo> page = baseMapper.selectVoPage(pageQuery.build(), lqw);
-        return TableDataInfo.build(page);
-    }
-
     @Override
     public List<ErpColorVo> queryList(ErpColorQuery query) {
-        LambdaQueryWrapper<ErpColor> lqw = buildQueryWrapper(query);
-        return baseMapper.selectVoList(lqw);
+        if (query != null && StrUtil.isNotBlank(query.getParentRowId())) {
+            LambdaQueryWrapper<ErpColor> lqw = buildQueryWrapper(query);
+            return baseMapper.selectVoList(lqw);
+        }
+        LambdaQueryWrapper<ErpColor> lqw = buildFirstLevelWrapper(query);
+        List<ErpColorVo> all = baseMapper.selectVoList(lqw);
+        Set<String> rowIds = all.stream()
+            .map(ErpColorVo::getRowId)
+            .filter(ObjectUtil::isNotEmpty)
+            .collect(Collectors.toSet());
+        return all.stream()
+            .filter(item -> {
+                String pid = item.getParentRowId();
+                return ObjectUtil.isEmpty(pid) || !rowIds.contains(pid);
+            })
+            .collect(Collectors.toList());
     }
 
-    private LambdaQueryWrapper<ErpColor> buildQueryWrapper(ErpColorQuery query) {
+    private LambdaQueryWrapper<ErpColor> buildFirstLevelWrapper(ErpColorQuery query) {
         LambdaQueryWrapper<ErpColor> lqw = Wrappers.lambdaQuery();
-        // 仅查询启用的颜色记录
-        lqw.eq(ErpColor::getStopUse, 0);
-
         if (query != null) {
-            // 代码模糊检索
             lqw.like(StrUtil.isNotBlank(query.getNum()), ErpColor::getNum, query.getNum());
-            // 名称模糊检索
             lqw.like(StrUtil.isNotBlank(query.getName()), ErpColor::getName, query.getName());
-            // 颜色大类检索
             lqw.eq(StrUtil.isNotBlank(query.getColorKind()), ErpColor::getColorKind, query.getColorKind());
         }
+        lqw.eq(ErpColor::getStopUse, 0);
+        lqw.orderByAsc(ErpColor::getNum);
+        return lqw;
+    }
 
-        // 默认按代码顺序升序排列
+    private LambdaQueryWrapper<ErpColor> buildQueryWrapper(ErpColorQuery query) {
+        LambdaQueryWrapper<ErpColor> lqw = Wrappers.lambdaQuery();
+        lqw.eq(ErpColor::getStopUse, 0);
+        lqw.like(StrUtil.isNotBlank(query.getNum()), ErpColor::getNum, query.getNum());
+        lqw.like(StrUtil.isNotBlank(query.getName()), ErpColor::getName, query.getName());
+        lqw.eq(StrUtil.isNotBlank(query.getColorKind()), ErpColor::getColorKind, query.getColorKind());
+        lqw.eq(ErpColor::getParentRowId, query.getParentRowId());
         lqw.orderByAsc(ErpColor::getNum);
         return lqw;
     }

+ 73 - 0
ruoyi-modules/yingpaipay-erp/src/main/java/org/dromara/erp/service/impl/ErpModelKindServiceImpl.java

@@ -0,0 +1,73 @@
+package org.dromara.erp.service.impl;
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import lombok.RequiredArgsConstructor;
+import org.dromara.erp.domain.ErpModelKind;
+import org.dromara.erp.domain.query.ErpModelKindQuery;
+import org.dromara.erp.domain.vo.ErpModelKindVo;
+import org.dromara.erp.mapper.ErpModelKindMapper;
+import org.dromara.erp.service.IErpModelKindService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+/**
+ * ERP 型号类别 Service 业务层处理
+ *
+ * @Author: Trae
+ */
+@RequiredArgsConstructor
+@Service
+public class ErpModelKindServiceImpl implements IErpModelKindService {
+
+    private final ErpModelKindMapper baseMapper;
+
+    @Override
+    public List<ErpModelKindVo> queryList(ErpModelKindQuery query) {
+        if (query != null && StrUtil.isNotBlank(query.getParentRowId())) {
+            LambdaQueryWrapper<ErpModelKind> lqw = buildQueryWrapper(query);
+            return baseMapper.selectVoList(lqw);
+        }
+        LambdaQueryWrapper<ErpModelKind> lqw = buildFirstLevelWrapper(query);
+        List<ErpModelKindVo> all = baseMapper.selectVoList(lqw);
+        Set<String> rowIds = all.stream()
+            .map(ErpModelKindVo::getRowId)
+            .filter(ObjectUtil::isNotEmpty)
+            .collect(Collectors.toSet());
+        return all.stream()
+            .filter(item -> {
+                String pid = item.getParentRowId();
+                return ObjectUtil.isEmpty(pid) || !rowIds.contains(pid);
+            })
+            .collect(Collectors.toList());
+    }
+
+    private LambdaQueryWrapper<ErpModelKind> buildFirstLevelWrapper(ErpModelKindQuery query) {
+        LambdaQueryWrapper<ErpModelKind> lqw = Wrappers.lambdaQuery();
+        if (query != null) {
+            lqw.like(StrUtil.isNotBlank(query.getNum()), ErpModelKind::getNum, query.getNum());
+            lqw.like(StrUtil.isNotBlank(query.getName()), ErpModelKind::getName, query.getName());
+            lqw.eq(StrUtil.isNotBlank(query.getModelKind()), ErpModelKind::getModelKind, query.getModelKind());
+        }
+        lqw.eq(ErpModelKind::getStopUse, 0);
+        lqw.orderByAsc(ErpModelKind::getNum);
+        return lqw;
+    }
+
+    private LambdaQueryWrapper<ErpModelKind> buildQueryWrapper(ErpModelKindQuery query) {
+        LambdaQueryWrapper<ErpModelKind> lqw = Wrappers.lambdaQuery();
+        lqw.like(StrUtil.isNotBlank(query.getNum()), ErpModelKind::getNum, query.getNum());
+        lqw.like(StrUtil.isNotBlank(query.getName()), ErpModelKind::getName, query.getName());
+        lqw.eq(StrUtil.isNotBlank(query.getModelKind()), ErpModelKind::getModelKind, query.getModelKind());
+        lqw.eq(ErpModelKind::getParentRowId, query.getParentRowId());
+        lqw.eq(ErpModelKind::getStopUse, 0);
+        lqw.orderByAsc(ErpModelKind::getNum);
+        return lqw;
+    }
+
+}

+ 32 - 13
ruoyi-modules/yingpaipay-erp/src/main/java/org/dromara/erp/service/impl/ErpModelServiceImpl.java

@@ -3,10 +3,7 @@ package org.dromara.erp.service.impl;
 import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.RequiredArgsConstructor;
-import org.dromara.common.mybatis.core.page.PageQuery;
-import org.dromara.common.mybatis.core.page.TableDataInfo;
 import org.dromara.erp.domain.ErpModel;
 import org.dromara.erp.domain.query.ErpModelQuery;
 import org.dromara.erp.domain.vo.ErpModelVo;
@@ -15,6 +12,8 @@ import org.dromara.erp.service.IErpModelService;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
 
 /**
  * ERP 型材档案 Service 业务层处理
@@ -28,25 +27,45 @@ public class ErpModelServiceImpl implements IErpModelService {
     private final ErpModelMapper baseMapper;
 
     @Override
-    public TableDataInfo<ErpModelVo> queryPageList(ErpModelQuery query, PageQuery pageQuery) {
-        LambdaQueryWrapper<ErpModel> lqw = buildQueryWrapper(query);
-        Page<ErpModelVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
-        return TableDataInfo.build(result);
+    public List<ErpModelVo> queryList(ErpModelQuery query) {
+        if (query != null && ObjectUtil.isNotEmpty(query.getParentRowId())) {
+            LambdaQueryWrapper<ErpModel> lqw = buildQueryWrapper(query);
+            return baseMapper.selectVoList(lqw);
+        }
+        LambdaQueryWrapper<ErpModel> lqw = buildFirstLevelWrapper(query);
+        List<ErpModelVo> all = baseMapper.selectVoList(lqw);
+        Set<String> rowIds = all.stream()
+            .map(ErpModelVo::getRowId)
+            .filter(ObjectUtil::isNotEmpty)
+            .collect(Collectors.toSet());
+        return all.stream()
+            .filter(item -> {
+                String pid = item.getParentRowId();
+                return ObjectUtil.isEmpty(pid) || !rowIds.contains(pid);
+            })
+            .collect(Collectors.toList());
     }
 
-    @Override
-    public List<ErpModelVo> queryList(ErpModelQuery query) {
-        LambdaQueryWrapper<ErpModel> lqw = buildQueryWrapper(query);
-        if (ObjectUtil.isEmpty(query.getNum()) && ObjectUtil.isEmpty(query.getName())) {
-            lqw.last("OFFSET 0 ROWS FETCH NEXT 100 ROWS ONLY");
+    private LambdaQueryWrapper<ErpModel> buildFirstLevelWrapper(ErpModelQuery query) {
+        LambdaQueryWrapper<ErpModel> lqw = Wrappers.lambdaQuery();
+        if (query != null) {
+            lqw.like(ObjectUtil.isNotEmpty(query.getNum()), ErpModel::getNum, query.getNum());
+            lqw.like(ObjectUtil.isNotEmpty(query.getName()), ErpModel::getName, query.getName());
+            lqw.eq(ObjectUtil.isNotEmpty(query.getModelSort()), ErpModel::getModelSort, query.getModelSort());
+            lqw.eq(ObjectUtil.isNotEmpty(query.getModelKind()), ErpModel::getModelKind, query.getModelKind());
         }
-        return baseMapper.selectVoList(lqw);
+        lqw.eq(ErpModel::getStopUse, 0);
+        lqw.orderByAsc(ErpModel::getNum);
+        return lqw;
     }
 
     private LambdaQueryWrapper<ErpModel> buildQueryWrapper(ErpModelQuery query) {
         LambdaQueryWrapper<ErpModel> lqw = Wrappers.lambdaQuery();
         lqw.like(ObjectUtil.isNotEmpty(query.getNum()), ErpModel::getNum, query.getNum());
         lqw.like(ObjectUtil.isNotEmpty(query.getName()), ErpModel::getName, query.getName());
+        lqw.eq(ObjectUtil.isNotEmpty(query.getModelSort()), ErpModel::getModelSort, query.getModelSort());
+        lqw.eq(ObjectUtil.isNotEmpty(query.getModelKind()), ErpModel::getModelKind, query.getModelKind());
+        lqw.eq(ErpModel::getParentRowId, query.getParentRowId());
         lqw.eq(ErpModel::getStopUse, 0);
         lqw.orderByAsc(ErpModel::getNum);
         return lqw;

+ 42 - 1
ruoyi-modules/yingpaipay-erp/src/main/java/org/dromara/erp/service/impl/ErpOrderDetailServiceImpl.java

@@ -3,6 +3,7 @@ package org.dromara.erp.service.impl;
 import cn.hutool.core.util.IdUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.RequiredArgsConstructor;
 import org.dromara.common.core.utils.MapstructUtils;
@@ -33,7 +34,6 @@ public class ErpOrderDetailServiceImpl implements IErpOrderDetailService {
         if (ObjectUtil.isNotEmpty(query.getOrderId())) {
             lqw.eq(ErpOrderDetail::getOrderId, query.getOrderId());
         } else {
-            // 如果没传订单ID,默认查询未下单的草稿(即 OrderID 为 NULL)
             lqw.isNull(ErpOrderDetail::getOrderId);
         }
         lqw.orderByDesc(ErpOrderDetail::getCreateTime);
@@ -91,4 +91,45 @@ public class ErpOrderDetailServiceImpl implements IErpOrderDetailService {
         return baseMapper.deleteById(rowId) > 0;
     }
 
+    /**
+     * 批量修改订单明细(表面处理 / 包装方式)
+     *
+     * @Author: Trae
+     */
+    @Override
+    public Boolean batchUpdate(org.dromara.erp.domain.bo.ErpOrderDetailBatchUpdateBo bo) {
+        if (bo.getRowIds() == null || bo.getRowIds().isEmpty()) {
+            return false;
+        }
+
+        LambdaUpdateWrapper<ErpOrderDetail> luw = Wrappers.lambdaUpdate();
+        boolean hasUpdate = false;
+
+        if (ObjectUtil.isNotEmpty(bo.getSurfaceId()) || ObjectUtil.isNotEmpty(bo.getSurfaceName())) {
+            luw.set(ErpOrderDetail::getSurfaceId, bo.getSurfaceId());
+            luw.set(ErpOrderDetail::getSurfaceName, bo.getSurfaceName());
+            hasUpdate = true;
+        }
+
+        if (ObjectUtil.isNotEmpty(bo.getPackId()) || ObjectUtil.isNotEmpty(bo.getPackName())) {
+            luw.set(ErpOrderDetail::getPackId, bo.getPackId());
+            luw.set(ErpOrderDetail::getPackName, bo.getPackName());
+            hasUpdate = true;
+        }
+
+        if (!hasUpdate) {
+            return false;
+        }
+
+        Long userId = null;
+        try {
+            userId = org.dromara.common.satoken.utils.LoginHelper.getUserId();
+        } catch (Exception e) {}
+        luw.set(ErpOrderDetail::getUpdateBy, userId);
+        luw.set(ErpOrderDetail::getUpdateTime, new Date());
+
+        luw.in(ErpOrderDetail::getRowId, bo.getRowIds());
+        return baseMapper.update(null, luw) > 0;
+    }
+
 }

+ 14 - 2
ruoyi-modules/yingpaipay-erp/src/main/java/org/dromara/erp/service/impl/ErpOrderServiceImpl.java

@@ -9,7 +9,6 @@ import lombok.extern.slf4j.Slf4j;
 import org.dromara.common.core.utils.MapstructUtils;
 import org.dromara.common.mybatis.core.page.PageQuery;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
-import org.dromara.common.mybatis.utils.IdGeneratorUtil;
 import org.dromara.erp.domain.ErpOrder;
 import org.dromara.erp.domain.query.ErpOrderQuery;
 import org.dromara.erp.domain.vo.ErpOrderVo;
@@ -114,7 +113,10 @@ public class ErpOrderServiceImpl implements IErpOrderService {
             entity.setRowId(IdUtil.fastUUID());
         }
         if (ObjectUtil.isEmpty(entity.getCode())) {
-            entity.setCode(IdGeneratorUtil.nextIdWithPrefix("ORD"));
+            String dateStr = new java.text.SimpleDateFormat("yyMMdd").format(new java.util.Date());
+            String redisKey = "erp:order:code:" + dateStr;
+            long seq = org.dromara.common.redis.utils.RedisUtils.incrAtomicValue(redisKey);
+            entity.setCode("WD" + dateStr + String.format("%03d", seq));
         }
         if (entity.getPlacer() == null) {
             try {
@@ -167,6 +169,16 @@ public class ErpOrderServiceImpl implements IErpOrderService {
         return baseMapper.updateById(order) > 0;
     }
 
+    @Override
+    public Boolean markUrgent(String rowId) {
+        ErpOrder order = baseMapper.selectById(rowId);
+        if (order == null) {
+            throw new org.dromara.common.core.exception.ServiceException("订单不存在");
+        }
+        order.setUrgentFlag(1);
+        return baseMapper.updateById(order) > 0;
+    }
+
     @Override
     public void syncErpOrderStatus() {
         log.info("[ERP状态同步] 开始同步...");

+ 3 - 0
ruoyi-modules/yingpaipay-erp/src/main/resources/mapper/ErpOrderMapper.xml

@@ -16,6 +16,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             o.FPlacer as placer,
             o.FPlaceTime as placeTime,
             o.FIsConfirmed as isConfirmed,
+            o.FUrgentFlag as urgentFlag,
             o.FErpDocCode as docCode,
             o.CreateTime as createTime,
             o.FClientID as clientId,
@@ -117,6 +118,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             o.FPlacer as placer,
             o.FPlaceTime as placeTime,
             o.FIsConfirmed as isConfirmed,
+            o.FUrgentFlag as urgentFlag,
             o.FErpDocCode as docCode,
             o.CreateTime as createTime,
             o.FClientID as clientId,
@@ -218,6 +220,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             o.FPlacer as placer,
             o.FPlaceTime as placeTime,
             o.FIsConfirmed as isConfirmed,
+            o.FUrgentFlag as urgentFlag,
             o.FErpDocCode as docCode,
             o.CreateTime as createTime,
             o.FClientID as clientId,

+ 6 - 0
script/sql/sqlserver/v1/HTSail_CS-create.sql

@@ -8,6 +8,7 @@ CREATE TABLE [dbo].[t_Applet_Order] (
   [FPlacer] bigint NULL,
   [FPlaceTime] datetime DEFAULT GETDATE() NULL,
   [FIsConfirmed] int DEFAULT 0 NULL,
+  [FUrgentFlag] int DEFAULT 0 NULL,
   [FErpDocCode] varchar(50) NULL,
 
   -- 下单客户信息
@@ -37,6 +38,8 @@ EXEC sp_addextendedproperty 'MS_Description', N'下单时间', 'SCHEMA', N'dbo',
 GO
 EXEC sp_addextendedproperty 'MS_Description', N'是否已确认', 'SCHEMA', N'dbo', 'TABLE', N't_Applet_Order', 'COLUMN', N'FIsConfirmed'
 GO
+EXEC sp_addextendedproperty 'MS_Description', N'是否加急(0-否 1-是)', 'SCHEMA', N'dbo', 'TABLE', N't_Applet_Order', 'COLUMN', N'FUrgentFlag'
+GO
 EXEC sp_addextendedproperty 'MS_Description', N'ERP单据编号', 'SCHEMA', N'dbo', 'TABLE', N't_Applet_Order', 'COLUMN', N'FErpDocCode'
 GO
 EXEC sp_addextendedproperty 'MS_Description', N'下单客户ID', 'SCHEMA', N'dbo', 'TABLE', N't_Applet_Order', 'COLUMN', N'FClientID'
@@ -71,6 +74,7 @@ CREATE TABLE [dbo].[t_Applet_Order_Details] (
   -- 规格与数量
   [Length] [dbo].[CustomFloat] NULL,
   [WallThickness] [dbo].[CustomFloat] NULL,
+  [MeterWeight] [dbo].[CustomFloat] NULL,
   [Count] int NULL,
   [DocCode] varchar(50) NULL,
   [ItemNo] varchar(50) NULL,
@@ -113,6 +117,8 @@ EXEC sp_addextendedproperty 'MS_Description', N'长度(mm)', 'SCHEMA', N'dbo', '
 GO
 EXEC sp_addextendedproperty 'MS_Description', N'壁厚(mm)', 'SCHEMA', N'dbo', 'TABLE', N't_Applet_Order_Details', 'COLUMN', N'WallThickness'
 GO
+EXEC sp_addextendedproperty 'MS_Description', N'理论米重', 'SCHEMA', N'dbo', 'TABLE', N't_Applet_Order_Details', 'COLUMN', N'MeterWeight'
+GO
 EXEC sp_addextendedproperty 'MS_Description', N'支数', 'SCHEMA', N'dbo', 'TABLE', N't_Applet_Order_Details', 'COLUMN', N'Count'
 GO
 EXEC sp_addextendedproperty 'MS_Description', N'单据编号', 'SCHEMA', N'dbo', 'TABLE', N't_Applet_Order_Details', 'COLUMN', N'DocCode'