Explorar o código

Merge remote-tracking branch 'origin/dev_20260131' into dev_20260131

xucaiqin hai 2 meses
pai
achega
bfbd9fad1c
Modificáronse 37 ficheiros con 1843 adicións e 5 borrados
  1. 1 1
      pom.xml
  2. 4 4
      sckw-modules/sckw-fleet/src/main/resources/bootstrap-test.yml
  3. 9 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/dao/KwsPrinterDao.java
  4. 9 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/dao/KwsWeighbridgeDao.java
  5. 12 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/dao/KwsWeighbridgeDiffConfigDao.java
  6. 9 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/dao/KwsWeighbridgeRecordDao.java
  7. 78 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/model/KwsPrinter.java
  8. 85 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/model/KwsWeighbridge.java
  9. 58 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/model/KwsWeighbridgeDiffConfig.java
  10. 59 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/model/KwsWeighbridgeRecord.java
  11. 45 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/model/report/WeighbridgeRecordExcel.java
  12. 33 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/model/vo/req/PrinterPageReqVo.java
  13. 54 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/model/vo/req/PrinterSaveReqVo.java
  14. 30 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/model/vo/req/PrinterStatusReqVo.java
  15. 43 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/model/vo/req/WeighbridgeDiffConfigReqVo.java
  16. 33 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/model/vo/req/WeighbridgePageReqVo.java
  17. 88 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/model/vo/req/WeighbridgeRecordPageReqVo.java
  18. 24 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/model/vo/req/WeighbridgeRestartReqVo.java
  19. 66 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/model/vo/req/WeighbridgeSaveReqVo.java
  20. 30 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/model/vo/req/WeighbridgeStatusReqVo.java
  21. 19 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/model/vo/res/PrinterDetailResVo.java
  22. 30 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/model/vo/res/PrinterOptionResVo.java
  23. 94 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/model/vo/res/PrinterPageResVo.java
  24. 25 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/model/vo/res/WeighbridgeDetailResVo.java
  25. 55 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/model/vo/res/WeighbridgeDiffConfigResVo.java
  26. 106 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/model/vo/res/WeighbridgePageResVo.java
  27. 83 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/model/vo/res/WeighbridgeRecordResVo.java
  28. 49 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/repository/KwsPrinterRepository.java
  29. 21 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/repository/KwsWeighbridgeDiffConfigRepository.java
  30. 55 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/repository/KwsWeighbridgeRecordRepository.java
  31. 58 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/repository/KwsWeighbridgeRepository.java
  32. 393 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/service/KwsPrinterManageService.java
  33. 19 0
      sql/2026/04/2026_04_08_kws_printer_create.sql
  34. 24 0
      sql/2026/04/2026_04_08_kws_weighbridge_create.sql
  35. 16 0
      sql/2026/04/2026_04_08_kws_weighbridge_diff_config_create.sql
  36. 8 0
      sql/2026/04/2026_04_08_kws_weighbridge_printer_alert.sql
  37. 18 0
      sql/2026/04/2026_04_08_kws_weighbridge_record_create.sql

+ 1 - 1
pom.xml

@@ -396,7 +396,7 @@
             </activation>
             <properties>
                 <profiles.active>test</profiles.active>
-                <nacos.server>118.116.4.155:38848</nacos.server>
+                <nacos.server>nacos-server:8848</nacos.server>
                 <nacos.namespace>sckw-ng-service-platform</nacos.namespace>
             </properties>
         </profile>

+ 4 - 4
sckw-modules/sckw-fleet/src/main/resources/bootstrap-test.yml

@@ -3,16 +3,16 @@ spring:
     nacos:
       discovery:
         # 服务注册地址
-        server-addr: 10.10.10.224:8848
+        server-addr: @nacos.server@
         # 命名空间
-        namespace: sckw-ng-service-platform
+        namespace: @nacos.namespace@
         # 共享配置
         group: sckw-ng-service-platform
       config:
         # 配置中心地址
-        server-addr: 10.10.10.224:8848
+        server-addr: @nacos.server@
         # 命名空间
-        namespace: sckw-ng-service-platform
+        namespace: @nacos.namespace@
         # 共享配置
         group: sckw-ng-service-platform
         # 配置文件格式

+ 9 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/dao/KwsPrinterDao.java

@@ -0,0 +1,9 @@
+package com.sckw.system.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.sckw.system.model.KwsPrinter;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface KwsPrinterDao extends BaseMapper<KwsPrinter> {
+}

+ 9 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/dao/KwsWeighbridgeDao.java

@@ -0,0 +1,9 @@
+package com.sckw.system.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.sckw.system.model.KwsWeighbridge;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface KwsWeighbridgeDao extends BaseMapper<KwsWeighbridge> {
+}

+ 12 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/dao/KwsWeighbridgeDiffConfigDao.java

@@ -0,0 +1,12 @@
+package com.sckw.system.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.sckw.system.model.KwsWeighbridgeDiffConfig;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 地磅差异化配置 Mapper。
+ */
+@Mapper
+public interface KwsWeighbridgeDiffConfigDao extends BaseMapper<KwsWeighbridgeDiffConfig> {
+}

+ 9 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/dao/KwsWeighbridgeRecordDao.java

@@ -0,0 +1,9 @@
+package com.sckw.system.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.sckw.system.model.KwsWeighbridgeRecord;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface KwsWeighbridgeRecordDao extends BaseMapper<KwsWeighbridgeRecord> {
+}

+ 78 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/model/KwsPrinter.java

@@ -0,0 +1,78 @@
+package com.sckw.system.model;
+
+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 com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 打印机
+ */
+@Data
+@Accessors(chain = true)
+@TableName("kws_printer")
+public class KwsPrinter implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    @TableId(type = IdType.ASSIGN_ID)
+    private Long id;
+
+    @TableField("ent_id")
+    private Long entId;
+
+    @TableField("printer_name")
+    private String printerName;
+
+    /**
+     * 打印机类型,如:热敏打印机、墨带打印机
+     */
+    @TableField("printer_type")
+    private String printerType;
+
+    /**
+     * 可使用寿命
+     */
+    @TableField("useful_life")
+    private String usefulLife;
+
+    /**
+     * 在线状态: 0-离线, 1-在线
+     */
+    @TableField("online_status")
+    private Integer onlineStatus;
+
+    /**
+     * 启停状态: 0-启用, 1-停用
+     */
+    @TableField("status")
+    private Integer status;
+
+    @TableField("create_by")
+    private Long createBy;
+
+    @TableField("create_time")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createTime;
+
+    @TableField("update_by")
+    private Long updateBy;
+
+    @TableField("update_time")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date updateTime;
+
+    @TableField("del_flag")
+    private Integer delFlag;
+
+    @TableField("remark")
+    private String remark;
+}

+ 85 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/model/KwsWeighbridge.java

@@ -0,0 +1,85 @@
+package com.sckw.system.model;
+
+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 com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 无人地磅
+ */
+@Data
+@Accessors(chain = true)
+@TableName("kws_weighbridge")
+public class KwsWeighbridge implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    @TableId(type = IdType.ASSIGN_ID)
+    private Long id;
+
+    @TableField("ent_id")
+    private Long entId;
+
+    @TableField("weighbridge_name")
+    private String weighbridgeName;
+
+    @TableField("unique_code")
+    private String uniqueCode;
+
+    /**
+     * 在线状态: 0-离线, 1-在线
+     */
+    @TableField("online_status")
+    private Integer onlineStatus;
+
+    @TableField("printer_id")
+    private Long printerId;
+
+    @TableField("description")
+    private String description;
+
+    /**
+     * 差异化配置,先用 JSON 字符串承载
+     */
+    @TableField("diff_config")
+    private String diffConfig;
+
+    @TableField("last_restart_time")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date lastRestartTime;
+
+    /**
+     * 启停状态: 0-启用, 1-停用
+     */
+    @TableField("status")
+    private Integer status;
+
+    @TableField("create_by")
+    private Long createBy;
+
+    @TableField("create_time")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createTime;
+
+    @TableField("update_by")
+    private Long updateBy;
+
+    @TableField("update_time")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date updateTime;
+
+    @TableField("del_flag")
+    private Integer delFlag;
+
+    @TableField("remark")
+    private String remark;
+}

+ 58 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/model/KwsWeighbridgeDiffConfig.java

@@ -0,0 +1,58 @@
+package com.sckw.system.model;
+
+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 com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 地磅差异化配置。
+ */
+@Data
+@Accessors(chain = true)
+@TableName("kws_weighbridge_diff_config")
+public class KwsWeighbridgeDiffConfig implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    @TableId(type = IdType.ASSIGN_ID)
+    private Long id;
+
+    @TableField("ent_id")
+    private Long entId;
+
+    @TableField("tare_error_value")
+    private BigDecimal tareErrorValue;
+
+    @TableField("load_error_value")
+    private BigDecimal loadErrorValue;
+
+    @TableField("empty_load_value")
+    private BigDecimal emptyLoadValue;
+
+    @TableField("create_by")
+    private Long createBy;
+
+    @TableField("create_time")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createTime;
+
+    @TableField("update_by")
+    private Long updateBy;
+
+    @TableField("update_time")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date updateTime;
+
+    @TableField("del_flag")
+    private Integer delFlag;
+}

+ 59 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/model/KwsWeighbridgeRecord.java

@@ -0,0 +1,59 @@
+package com.sckw.system.model;
+
+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 com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 地磅称重记录
+ */
+@Data
+@Accessors(chain = true)
+@TableName("kws_weighbridge_record")
+public class KwsWeighbridgeRecord implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    @TableId(type = IdType.ASSIGN_ID)
+    private Long id;
+
+    @TableField("weighbridge_id")
+    private Long weighbridgeId;
+
+    @TableField("truck_no")
+    private String truckNo;
+
+    @TableField("weight")
+    private BigDecimal weight;
+
+    @TableField("receive_time")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date receiveTime;
+
+    @TableField("create_by")
+    private Long createBy;
+
+    @TableField("create_time")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createTime;
+
+    @TableField("update_by")
+    private Long updateBy;
+
+    @TableField("update_time")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date updateTime;
+
+    @TableField("del_flag")
+    private Integer delFlag;
+}

+ 45 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/model/report/WeighbridgeRecordExcel.java

@@ -0,0 +1,45 @@
+package com.sckw.system.model.report;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.sckw.excel.annotation.ExcelContext;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * Weighbridge record export model.
+ */
+@Data
+@ExcelContext(fileName = "weighbridge-record", sheetName = "records")
+public class WeighbridgeRecordExcel implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    @ExcelProperty("Weighbridge Name")
+    private String weighbridgeName;
+
+    @ExcelProperty("Unique Code")
+    private String uniqueCode;
+
+    @ExcelProperty("Enterprise Name")
+    private String enterpriseName;
+
+    @ExcelProperty("Truck No")
+    private String truckNo;
+
+    @ExcelProperty("Weight")
+    private BigDecimal weight;
+
+    @ExcelProperty("Create Time")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createTime;
+
+    @ExcelProperty("Receive Time")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date receiveTime;
+}

+ 33 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/model/vo/req/PrinterPageReqVo.java

@@ -0,0 +1,33 @@
+package com.sckw.system.model.vo.req;
+
+import com.sckw.core.model.page.PageRequest;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * 打印机分页查询请求。
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@Schema(description = "打印机分页查询请求")
+public class PrinterPageReqVo extends PageRequest implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 企业名称模糊关键字。
+     */
+    @Schema(description = "企业名称模糊关键字")
+    private String enterpriseName;
+
+    /**
+     * 打印机名称模糊关键字。
+     */
+    @Schema(description = "打印机名称模糊关键字")
+    private String printerName;
+}

+ 54 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/model/vo/req/PrinterSaveReqVo.java

@@ -0,0 +1,54 @@
+package com.sckw.system.model.vo.req;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * 打印机保存请求。
+ */
+@Data
+@Schema(description = "打印机保存请求")
+public class PrinterSaveReqVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID,编辑时必传。
+     */
+    @Schema(description = "主键ID,编辑时必传")
+    private Long id;
+
+    /**
+     * 企业ID。
+     */
+    @Schema(description = "企业ID")
+    private Long entId;
+
+    /**
+     * 打印机名称。
+     */
+    @Schema(description = "打印机名称")
+    private String printerName;
+
+    /**
+     * 打印机类型。
+     */
+    @Schema(description = "打印机类型")
+    private String printerType;
+
+    /**
+     * 可使用寿命。
+     */
+    @Schema(description = "可使用寿命")
+    private String usefulLife;
+
+    /**
+     * 在线状态,0-离线,1-在线。
+     */
+    @Schema(description = "在线状态,0-离线,1-在线")
+    private Integer onlineStatus;
+}

+ 30 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/model/vo/req/PrinterStatusReqVo.java

@@ -0,0 +1,30 @@
+package com.sckw.system.model.vo.req;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * 打印机状态更新请求。
+ */
+@Data
+@Schema(description = "打印机状态更新请求")
+public class PrinterStatusReqVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 打印机ID。
+     */
+    @Schema(description = "打印机ID")
+    private Long id;
+
+    /**
+     * 启停状态,0-启用,1-停用。
+     */
+    @Schema(description = "启停状态,0-启用,1-停用")
+    private Integer status;
+}

+ 43 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/model/vo/req/WeighbridgeDiffConfigReqVo.java

@@ -0,0 +1,43 @@
+package com.sckw.system.model.vo.req;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * 地磅差异配置请求参数
+ */
+@Data
+@Schema(description = "地磅差异配置请求参数")
+public class WeighbridgeDiffConfigReqVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 企业ID
+     */
+    @Schema(description = "企业ID")
+    private Long entId;
+
+    /**
+     * 皮重误差值(吨)
+     */
+    @Schema(description = "皮重误差值(吨)")
+    private BigDecimal tareErrorValue;
+
+    /**
+     * 毛重误差值(吨)
+     */
+    @Schema(description = "毛重误差值(吨)")
+    private BigDecimal loadErrorValue;
+
+    /**
+     * 空载重量值(吨)
+     */
+    @Schema(description = "空载重量值(吨)")
+    private BigDecimal emptyLoadValue;
+}

+ 33 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/model/vo/req/WeighbridgePageReqVo.java

@@ -0,0 +1,33 @@
+package com.sckw.system.model.vo.req;
+
+import com.sckw.core.model.page.PageRequest;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * 地磅分页查询请求。
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@Schema(description = "地磅分页查询请求")
+public class WeighbridgePageReqVo extends PageRequest implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 企业名称模糊关键字。
+     */
+    @Schema(description = "企业名称模糊关键字")
+    private String enterpriseName;
+
+    /**
+     * 地磅名称模糊关键字。
+     */
+    @Schema(description = "地磅名称模糊关键字")
+    private String weighbridgeName;
+}

+ 88 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/model/vo/req/WeighbridgeRecordPageReqVo.java

@@ -0,0 +1,88 @@
+package com.sckw.system.model.vo.req;
+
+import com.sckw.core.model.page.PageRequest;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 地磅记录分页查询请求
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+@Schema(description = "地磅记录分页查询请求")
+public class WeighbridgeRecordPageReqVo extends PageRequest implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 地磅ID
+     */
+    @Schema(description = "地磅ID")
+    private Long weighbridgeId;
+
+    /**
+     * 地磅名称模糊关键字
+     */
+    @Schema(description = "地磅名称模糊关键字")
+    private String weighbridgeName;
+
+    /**
+     * 唯一编码模糊关键字
+     */
+    @Schema(description = "唯一编码模糊关键字")
+    private String uniqueCode;
+
+    /**
+     * 车牌号模糊关键字
+     */
+    @Schema(description = "车牌号模糊关键字")
+    private String truckNo;
+
+    /**
+     * 最小重量
+     */
+    @Schema(description = "最小重量")
+    private BigDecimal minWeight;
+
+    /**
+     * 最大重量
+     */
+    @Schema(description = "最大重量")
+    private BigDecimal maxWeight;
+
+    /**
+     * 创建开始时间
+     */
+    @Schema(description = "创建开始时间,格式 yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createStartTime;
+
+    /**
+     * 创建结束时间
+     */
+    @Schema(description = "创建结束时间,格式 yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createEndTime;
+
+    /**
+     * 接收开始时间
+     */
+    @Schema(description = "接收开始时间,格式 yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date receiveStartTime;
+
+    /**
+     * 接收结束时间
+     */
+    @Schema(description = "接收结束时间,格式 yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date receiveEndTime;
+}

+ 24 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/model/vo/req/WeighbridgeRestartReqVo.java

@@ -0,0 +1,24 @@
+package com.sckw.system.model.vo.req;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * 地磅重启请求。
+ */
+@Data
+@Schema(description = "地磅重启请求")
+public class WeighbridgeRestartReqVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 地磅ID。
+     */
+    @Schema(description = "地磅ID")
+    private Long id;
+}

+ 66 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/model/vo/req/WeighbridgeSaveReqVo.java

@@ -0,0 +1,66 @@
+package com.sckw.system.model.vo.req;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * 地磅保存请求。
+ */
+@Data
+@Schema(description = "地磅保存请求")
+public class WeighbridgeSaveReqVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID,编辑时必传。
+     */
+    @Schema(description = "主键ID,编辑时必传")
+    private Long id;
+
+    /**
+     * 企业ID。
+     */
+    @Schema(description = "企业ID")
+    private Long entId;
+
+    /**
+     * 地磅名称。
+     */
+    @Schema(description = "地磅名称")
+    private String weighbridgeName;
+
+    /**
+     * 唯一编码。
+     */
+    @Schema(description = "唯一编码")
+    private String uniqueCode;
+
+    /**
+     * 在线状态,0-离线,1-在线。
+     */
+    @Schema(description = "在线状态,0-离线,1-在线")
+    private Integer onlineStatus;
+
+    /**
+     * 关联打印机ID。
+     */
+    @Schema(description = "关联打印机ID")
+    private Long printerId;
+
+    /**
+     * 描述。
+     */
+    @Schema(description = "描述")
+    private String description;
+
+    /**
+     * 差异化配置JSON。
+     */
+    @Schema(description = "差异化配置JSON")
+    private String diffConfig;
+}

+ 30 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/model/vo/req/WeighbridgeStatusReqVo.java

@@ -0,0 +1,30 @@
+package com.sckw.system.model.vo.req;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * 地磅状态更新请求。
+ */
+@Data
+@Schema(description = "地磅状态更新请求")
+public class WeighbridgeStatusReqVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 地磅ID。
+     */
+    @Schema(description = "地磅ID")
+    private Long id;
+
+    /**
+     * 启停状态,0-启用,1-停用。
+     */
+    @Schema(description = "启停状态,0-启用,1-停用")
+    private Integer status;
+}

+ 19 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/model/vo/res/PrinterDetailResVo.java

@@ -0,0 +1,19 @@
+package com.sckw.system.model.vo.res;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+
+/**
+ * 打印机详情响应。
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@Schema(description = "打印机详情响应")
+public class PrinterDetailResVo extends PrinterPageResVo {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+}

+ 30 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/model/vo/res/PrinterOptionResVo.java

@@ -0,0 +1,30 @@
+package com.sckw.system.model.vo.res;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * 打印机下拉选项响应。
+ */
+@Data
+@Schema(description = "打印机下拉选项响应")
+public class PrinterOptionResVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 打印机ID。
+     */
+    @Schema(description = "打印机ID")
+    private Long id;
+
+    /**
+     * 打印机名称。
+     */
+    @Schema(description = "打印机名称")
+    private String printerName;
+}

+ 94 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/model/vo/res/PrinterPageResVo.java

@@ -0,0 +1,94 @@
+package com.sckw.system.model.vo.res;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 打印机分页响应。
+ */
+@Data
+@Schema(description = "打印机分页响应")
+public class PrinterPageResVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID。
+     */
+    @Schema(description = "主键ID")
+    private Long id;
+
+    /**
+     * 企业ID。
+     */
+    @Schema(description = "企业ID")
+    private Long entId;
+
+    /**
+     * 企业名称。
+     */
+    @Schema(description = "企业名称")
+    private String enterpriseName;
+
+    /**
+     * 打印机名称。
+     */
+    @Schema(description = "打印机名称")
+    private String printerName;
+
+    /**
+     * 打印机类型。
+     */
+    @Schema(description = "打印机类型")
+    private String printerType;
+
+    /**
+     * 可使用寿命。
+     */
+    @Schema(description = "可使用寿命")
+    private String usefulLife;
+
+    /**
+     * 在线状态,0-离线,1-在线。
+     */
+    @Schema(description = "在线状态,0-离线,1-在线")
+    private Integer onlineStatus;
+
+    /**
+     * 在线状态名称。
+     */
+    @Schema(description = "在线状态名称")
+    private String onlineStatusName;
+
+    /**
+     * 启停状态,0-启用,1-停用。
+     */
+    @Schema(description = "启停状态,0-启用,1-停用")
+    private Integer status;
+
+    /**
+     * 启停状态名称。
+     */
+    @Schema(description = "启停状态名称")
+    private String statusName;
+
+    /**
+     * 创建时间。
+     */
+    @Schema(description = "创建时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createTime;
+
+    /**
+     * 更新时间。
+     */
+    @Schema(description = "更新时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date updateTime;
+}

+ 25 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/model/vo/res/WeighbridgeDetailResVo.java

@@ -0,0 +1,25 @@
+package com.sckw.system.model.vo.res;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+
+/**
+ * 地磅详情响应。
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@Schema(description = "地磅详情响应")
+public class WeighbridgeDetailResVo extends WeighbridgePageResVo {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 差异化配置JSON。
+     */
+    @Schema(description = "差异化配置JSON")
+    private String diffConfig;
+}

+ 55 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/model/vo/res/WeighbridgeDiffConfigResVo.java

@@ -0,0 +1,55 @@
+package com.sckw.system.model.vo.res;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * Weighbridge diff config response.
+ */
+@Data
+@Schema(description = "Weighbridge diff config response")
+public class WeighbridgeDiffConfigResVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * Config id.
+     */
+    @Schema(description = "Config id")
+    private Long id;
+
+    /**
+     * Enterprise id.
+     */
+    @Schema(description = "Enterprise id")
+    private Long entId;
+
+    /**
+     * Enterprise name.
+     */
+    @Schema(description = "Enterprise name")
+    private String enterpriseName;
+
+    /**
+     * Tare error value in ton.
+     */
+    @Schema(description = "Tare error value in ton")
+    private BigDecimal tareErrorValue;
+
+    /**
+     * Load error value in ton.
+     */
+    @Schema(description = "Load error value in ton")
+    private BigDecimal loadErrorValue;
+
+    /**
+     * Empty load value in ton.
+     */
+    @Schema(description = "Empty load value in ton")
+    private BigDecimal emptyLoadValue;
+}

+ 106 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/model/vo/res/WeighbridgePageResVo.java

@@ -0,0 +1,106 @@
+package com.sckw.system.model.vo.res;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 地磅分页响应。
+ */
+@Data
+@Schema(description = "地磅分页响应")
+public class WeighbridgePageResVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID。
+     */
+    @Schema(description = "主键ID")
+    private Long id;
+
+    /**
+     * 企业ID。
+     */
+    @Schema(description = "企业ID")
+    private Long entId;
+
+    /**
+     * 企业名称。
+     */
+    @Schema(description = "企业名称")
+    private String enterpriseName;
+
+    /**
+     * 地磅名称。
+     */
+    @Schema(description = "地磅名称")
+    private String weighbridgeName;
+
+    /**
+     * 唯一编码。
+     */
+    @Schema(description = "唯一编码")
+    private String uniqueCode;
+
+    /**
+     * 在线状态,0-离线,1-在线。
+     */
+    @Schema(description = "在线状态,0-离线,1-在线")
+    private Integer onlineStatus;
+
+    /**
+     * 在线状态名称。
+     */
+    @Schema(description = "在线状态名称")
+    private String onlineStatusName;
+
+    /**
+     * 关联打印机ID。
+     */
+    @Schema(description = "关联打印机ID")
+    private Long printerId;
+
+    /**
+     * 关联打印机名称。
+     */
+    @Schema(description = "关联打印机名称")
+    private String printerName;
+
+    /**
+     * 描述。
+     */
+    @Schema(description = "描述")
+    private String description;
+
+    /**
+     * 启停状态,0-启用,1-停用。
+     */
+    @Schema(description = "启停状态,0-启用,1-停用")
+    private Integer status;
+
+    /**
+     * 启停状态名称。
+     */
+    @Schema(description = "启停状态名称")
+    private String statusName;
+
+    /**
+     * 创建时间。
+     */
+    @Schema(description = "创建时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createTime;
+
+    /**
+     * 最近重启时间。
+     */
+    @Schema(description = "最近重启时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date lastRestartTime;
+}

+ 83 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/model/vo/res/WeighbridgeRecordResVo.java

@@ -0,0 +1,83 @@
+package com.sckw.system.model.vo.res;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * Weighbridge record response.
+ */
+@Data
+@Schema(description = "Weighbridge record response")
+public class WeighbridgeRecordResVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * Primary key.
+     */
+    @Schema(description = "Primary key")
+    private Long id;
+
+    /**
+     * Weighbridge id.
+     */
+    @Schema(description = "Weighbridge id")
+    private Long weighbridgeId;
+
+    /**
+     * Weighbridge name.
+     */
+    @Schema(description = "Weighbridge name")
+    private String weighbridgeName;
+
+    /**
+     * Unique code.
+     */
+    @Schema(description = "Unique code")
+    private String uniqueCode;
+
+    /**
+     * Enterprise id.
+     */
+    @Schema(description = "Enterprise id")
+    private Long entId;
+
+    /**
+     * Enterprise name.
+     */
+    @Schema(description = "Enterprise name")
+    private String enterpriseName;
+
+    /**
+     * Truck number.
+     */
+    @Schema(description = "Truck number")
+    private String truckNo;
+
+    /**
+     * Weight.
+     */
+    @Schema(description = "Weight")
+    private BigDecimal weight;
+
+    /**
+     * Create time.
+     */
+    @Schema(description = "Create time")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createTime;
+
+    /**
+     * Receive time.
+     */
+    @Schema(description = "Receive time")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date receiveTime;
+}

+ 49 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/repository/KwsPrinterRepository.java

@@ -0,0 +1,49 @@
+package com.sckw.system.repository;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.sckw.system.dao.KwsPrinterDao;
+import com.sckw.system.model.KwsPrinter;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Repository;
+
+import java.util.Collection;
+import java.util.List;
+
+@Repository
+public class KwsPrinterRepository extends ServiceImpl<KwsPrinterDao, KwsPrinter> {
+
+    public IPage<KwsPrinter> pageQuery(int pageNum, int pageSize, String printerName, Collection<Long> entIds) {
+        return page(new Page<>(pageNum, pageSize), Wrappers.<KwsPrinter>lambdaQuery()
+                .eq(KwsPrinter::getDelFlag, 0)
+                .like(StringUtils.isNotBlank(printerName), KwsPrinter::getPrinterName, printerName)
+                .in(entIds != null && !entIds.isEmpty(), KwsPrinter::getEntId, entIds)
+                .orderByDesc(KwsPrinter::getCreateTime)
+                .orderByDesc(KwsPrinter::getId));
+    }
+
+    public KwsPrinter findAvailableById(Long id) {
+        return getOne(Wrappers.<KwsPrinter>lambdaQuery()
+                .eq(KwsPrinter::getId, id)
+                .eq(KwsPrinter::getDelFlag, 0)
+                .last("limit 1"));
+    }
+
+    public KwsPrinter findByEntIdAndName(Long entId, String printerName) {
+        return getOne(Wrappers.<KwsPrinter>lambdaQuery()
+                .eq(KwsPrinter::getDelFlag, 0)
+                .eq(KwsPrinter::getEntId, entId)
+                .eq(KwsPrinter::getPrinterName, printerName)
+                .last("limit 1"));
+    }
+
+    public List<KwsPrinter> listByEntId(Long entId) {
+        return list(Wrappers.<KwsPrinter>lambdaQuery()
+                .eq(KwsPrinter::getDelFlag, 0)
+                .eq(KwsPrinter::getStatus, 0)
+                .eq(KwsPrinter::getEntId, entId)
+                .orderByDesc(KwsPrinter::getCreateTime));
+    }
+}

+ 21 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/repository/KwsWeighbridgeDiffConfigRepository.java

@@ -0,0 +1,21 @@
+package com.sckw.system.repository;
+
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.sckw.system.dao.KwsWeighbridgeDiffConfigDao;
+import com.sckw.system.model.KwsWeighbridgeDiffConfig;
+import org.springframework.stereotype.Repository;
+
+/**
+ * 地磅差异化配置仓储。
+ */
+@Repository
+public class KwsWeighbridgeDiffConfigRepository extends ServiceImpl<KwsWeighbridgeDiffConfigDao, KwsWeighbridgeDiffConfig> {
+
+    public KwsWeighbridgeDiffConfig findByEntId(Long entId) {
+        return getOne(Wrappers.<KwsWeighbridgeDiffConfig>lambdaQuery()
+                .eq(KwsWeighbridgeDiffConfig::getEntId, entId)
+                .eq(KwsWeighbridgeDiffConfig::getDelFlag, 0)
+                .last("limit 1"));
+    }
+}

+ 55 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/repository/KwsWeighbridgeRecordRepository.java

@@ -0,0 +1,55 @@
+package com.sckw.system.repository;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.sckw.system.dao.KwsWeighbridgeRecordDao;
+import com.sckw.system.model.KwsWeighbridgeRecord;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Repository;
+
+import java.math.BigDecimal;
+import java.util.Collection;
+import java.util.Date;
+import java.util.List;
+
+@Repository
+public class KwsWeighbridgeRecordRepository extends ServiceImpl<KwsWeighbridgeRecordDao, KwsWeighbridgeRecord> {
+
+    public IPage<KwsWeighbridgeRecord> pageQuery(int pageNum, int pageSize, Collection<Long> weighbridgeIds,
+                                                 String truckNo, BigDecimal minWeight, BigDecimal maxWeight,
+                                                 Date createStartTime, Date createEndTime,
+                                                 Date receiveStartTime, Date receiveEndTime) {
+        return page(new Page<>(pageNum, pageSize), Wrappers.<KwsWeighbridgeRecord>lambdaQuery()
+                .eq(KwsWeighbridgeRecord::getDelFlag, 0)
+                .in(weighbridgeIds != null && !weighbridgeIds.isEmpty(), KwsWeighbridgeRecord::getWeighbridgeId, weighbridgeIds)
+                .like(StringUtils.isNotBlank(truckNo), KwsWeighbridgeRecord::getTruckNo, truckNo)
+                .ge(minWeight != null, KwsWeighbridgeRecord::getWeight, minWeight)
+                .le(maxWeight != null, KwsWeighbridgeRecord::getWeight, maxWeight)
+                .ge(createStartTime != null, KwsWeighbridgeRecord::getCreateTime, createStartTime)
+                .le(createEndTime != null, KwsWeighbridgeRecord::getCreateTime, createEndTime)
+                .ge(receiveStartTime != null, KwsWeighbridgeRecord::getReceiveTime, receiveStartTime)
+                .le(receiveEndTime != null, KwsWeighbridgeRecord::getReceiveTime, receiveEndTime)
+                .orderByDesc(KwsWeighbridgeRecord::getCreateTime)
+                .orderByDesc(KwsWeighbridgeRecord::getId));
+    }
+
+    public List<KwsWeighbridgeRecord> listQuery(Collection<Long> weighbridgeIds,
+                                                String truckNo, BigDecimal minWeight, BigDecimal maxWeight,
+                                                Date createStartTime, Date createEndTime,
+                                                Date receiveStartTime, Date receiveEndTime) {
+        return list(Wrappers.<KwsWeighbridgeRecord>lambdaQuery()
+                .eq(KwsWeighbridgeRecord::getDelFlag, 0)
+                .in(weighbridgeIds != null && !weighbridgeIds.isEmpty(), KwsWeighbridgeRecord::getWeighbridgeId, weighbridgeIds)
+                .like(StringUtils.isNotBlank(truckNo), KwsWeighbridgeRecord::getTruckNo, truckNo)
+                .ge(minWeight != null, KwsWeighbridgeRecord::getWeight, minWeight)
+                .le(maxWeight != null, KwsWeighbridgeRecord::getWeight, maxWeight)
+                .ge(createStartTime != null, KwsWeighbridgeRecord::getCreateTime, createStartTime)
+                .le(createEndTime != null, KwsWeighbridgeRecord::getCreateTime, createEndTime)
+                .ge(receiveStartTime != null, KwsWeighbridgeRecord::getReceiveTime, receiveStartTime)
+                .le(receiveEndTime != null, KwsWeighbridgeRecord::getReceiveTime, receiveEndTime)
+                .orderByDesc(KwsWeighbridgeRecord::getCreateTime)
+                .orderByDesc(KwsWeighbridgeRecord::getId));
+    }
+}

+ 58 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/repository/KwsWeighbridgeRepository.java

@@ -0,0 +1,58 @@
+package com.sckw.system.repository;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.sckw.system.dao.KwsWeighbridgeDao;
+import com.sckw.system.model.KwsWeighbridge;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Repository;
+
+import java.util.Collection;
+import java.util.List;
+
+@Repository
+public class KwsWeighbridgeRepository extends ServiceImpl<KwsWeighbridgeDao, KwsWeighbridge> {
+
+    public IPage<KwsWeighbridge> pageQuery(int pageNum, int pageSize, String weighbridgeName, Collection<Long> entIds) {
+        return page(new Page<>(pageNum, pageSize), Wrappers.<KwsWeighbridge>lambdaQuery()
+                .eq(KwsWeighbridge::getDelFlag, 0)
+                .like(StringUtils.isNotBlank(weighbridgeName), KwsWeighbridge::getWeighbridgeName, weighbridgeName)
+                .in(entIds != null && !entIds.isEmpty(), KwsWeighbridge::getEntId, entIds)
+                .orderByDesc(KwsWeighbridge::getCreateTime)
+                .orderByDesc(KwsWeighbridge::getId));
+    }
+
+    public KwsWeighbridge findAvailableById(Long id) {
+        return getOne(Wrappers.<KwsWeighbridge>lambdaQuery()
+                .eq(KwsWeighbridge::getId, id)
+                .eq(KwsWeighbridge::getDelFlag, 0)
+                .last("limit 1"));
+    }
+
+    public KwsWeighbridge findByUniqueCode(String uniqueCode) {
+        return getOne(Wrappers.<KwsWeighbridge>lambdaQuery()
+                .eq(KwsWeighbridge::getUniqueCode, uniqueCode)
+                .eq(KwsWeighbridge::getDelFlag, 0)
+                .last("limit 1"));
+    }
+
+    public List<KwsWeighbridge> listByNameAndCode(String weighbridgeName, String uniqueCode, Collection<Long> entIds) {
+        return list(Wrappers.<KwsWeighbridge>lambdaQuery()
+                .eq(KwsWeighbridge::getDelFlag, 0)
+                .like(StringUtils.isNotBlank(weighbridgeName), KwsWeighbridge::getWeighbridgeName, weighbridgeName)
+                .like(StringUtils.isNotBlank(uniqueCode), KwsWeighbridge::getUniqueCode, uniqueCode)
+                .in(entIds != null && !entIds.isEmpty(), KwsWeighbridge::getEntId, entIds)
+                .orderByDesc(KwsWeighbridge::getCreateTime));
+    }
+
+    public boolean updateDiffConfigByEntId(Long entId, String diffConfig, Long updateBy) {
+        return update(Wrappers.<KwsWeighbridge>lambdaUpdate()
+                .eq(KwsWeighbridge::getEntId, entId)
+                .eq(KwsWeighbridge::getDelFlag, 0)
+                .set(KwsWeighbridge::getDiffConfig, diffConfig)
+                .set(KwsWeighbridge::getUpdateBy, updateBy)
+                .set(KwsWeighbridge::getUpdateTime, new java.util.Date()));
+    }
+}

+ 393 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/service/KwsPrinterManageService.java

@@ -0,0 +1,393 @@
+package com.sckw.system.service;
+
+import com.alibaba.fastjson2.JSON;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.sckw.core.exception.SystemException;
+import com.sckw.core.model.page.PageResult;
+import com.sckw.core.web.constant.HttpStatus;
+import com.sckw.core.web.context.LoginUserHolder;
+import com.sckw.system.model.KwsEnterprise;
+import com.sckw.system.model.KwsPrinter;
+import com.sckw.system.model.vo.req.PrinterPageReqVo;
+import com.sckw.system.model.vo.req.PrinterSaveReqVo;
+import com.sckw.system.model.vo.req.PrinterStatusReqVo;
+import com.sckw.system.model.vo.res.PlatformEnterpriseResVo;
+import com.sckw.system.model.vo.res.PrinterDetailResVo;
+import com.sckw.system.model.vo.res.PrinterOptionResVo;
+import com.sckw.system.model.vo.res.PrinterPageResVo;
+import com.sckw.system.repository.KwsEnterpriseRepository;
+import com.sckw.system.repository.KwsPrinterRepository;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Date;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+/**
+ * 打印机管理服务类
+ * 负责打印机的增删改查、状态管理以及与企业信息的关联处理
+ */
+@Service
+@RequiredArgsConstructor
+@Slf4j
+public class KwsPrinterManageService {
+
+    private final KwsPrinterRepository kwsPrinterRepository;
+    private final KwsEnterpriseRepository kwsEnterpriseRepository;
+
+    /**
+     * 分页查询打印机列表
+     *
+     * @param reqVo 分页查询请求参数,包含页码、页大小、打印机名称模糊匹配、企业名称模糊匹配
+     * @return 分页结果集
+     */
+    public PageResult page(PrinterPageReqVo reqVo) {
+        log.info("分页查询打印机列表,参数:{}", JSON.toJSONString(reqVo));
+        // 根据企业名称解析出有权限查看的企业ID集合
+        Set<Long> entIds = resolveQueryEntIds(reqVo.getEnterpriseName());
+        if (entIds.isEmpty()) {
+            // 如果没有可查询的企业ID,直接返回空结果
+            return PageResult.build(reqVo.getPage(), reqVo.getPageSize(), 0L, Collections.emptyList());
+        }
+        // 执行数据库分页查询
+        IPage<KwsPrinter> page = kwsPrinterRepository.pageQuery(reqVo.getPage(), reqVo.getPageSize(),
+                reqVo.getPrinterName(), entIds);
+        // 构建返回结果,填充企业名称等额外信息
+        return PageResult.of(page, buildPageRes(page.getRecords()));
+    }
+
+    /**
+     * 获取打印机详情
+     *
+     * @param id 打印机ID
+     * @return 打印机详情响应对象
+     */
+    public PrinterDetailResVo detail(Long id) {
+        log.info("获取打印机详情,id:{}", id);
+        // 获取并校验打印机实体,同时检查权限
+        KwsPrinter printer = getAndCheck(id);
+        PrinterDetailResVo resVo = new PrinterDetailResVo();
+        // 填充基本信息及企业名称
+        fillBaseRes(printer, enterpriseNameMap(Collections.singleton(printer.getEntId())), resVo);
+        return resVo;
+    }
+
+    /**
+     * 新增打印机
+     *
+     * @param reqVo 新增请求参数
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public void add(PrinterSaveReqVo reqVo) {
+        log.info("新增打印机,参数:{}", JSON.toJSONString(reqVo));
+        // 校验请求参数合法性(非空、重复性、企业有效性等)
+        validateSaveReq(reqVo, null);
+        Date now = new Date();
+        // 构建打印机实体对象
+        KwsPrinter printer = new KwsPrinter()
+                .setEntId(reqVo.getEntId())
+                .setPrinterName(reqVo.getPrinterName())
+                .setPrinterType(reqVo.getPrinterType())
+                .setUsefulLife(reqVo.getUsefulLife())
+                .setOnlineStatus(defaultOnlineStatus(reqVo.getOnlineStatus()))
+                .setStatus(0) // 默认启用
+                .setDelFlag(0) // 未删除
+                .setCreateBy(LoginUserHolder.getUserId())
+                .setCreateTime(now)
+                .setUpdateBy(LoginUserHolder.getUserId())
+                .setUpdateTime(now);
+        // 保存至数据库,失败则抛出异常
+        if (!kwsPrinterRepository.save(printer)) {
+            throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.INSERT_FAIL);
+        }
+    }
+
+    /**
+     * 更新打印机信息
+     *
+     * @param reqVo 更新请求参数
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public void update(PrinterSaveReqVo reqVo) {
+        log.info("更新打印机信息,参数:{}", JSON.toJSONString(reqVo));
+        if (reqVo.getId() == null) {
+            throw new SystemException("打印机ID不能为空");
+        }
+        // 获取并校验原打印机数据及权限
+        KwsPrinter printer = getAndCheck(reqVo.getId());
+        // 校验更新参数的合法性
+        validateSaveReq(reqVo, printer.getId());
+        // 更新字段
+        printer.setEntId(reqVo.getEntId());
+        printer.setPrinterName(reqVo.getPrinterName());
+        printer.setPrinterType(reqVo.getPrinterType());
+        printer.setUsefulLife(reqVo.getUsefulLife());
+        printer.setOnlineStatus(defaultOnlineStatus(reqVo.getOnlineStatus()));
+        printer.setUpdateBy(LoginUserHolder.getUserId());
+        printer.setUpdateTime(new Date());
+        // 执行更新操作
+        if (!kwsPrinterRepository.updateById(printer)) {
+            throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.UPDATE_FAIL);
+        }
+    }
+
+    /**
+     * 更新打印机状态(启用/停用)
+     *
+     * @param reqVo 状态更新请求参数
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public void updateStatus(PrinterStatusReqVo reqVo) {
+        log.info("更新打印机状态,参数:{}", JSON.toJSONString(reqVo));
+        if (reqVo.getId() == null) {
+            throw new SystemException("打印机ID不能为空");
+        }
+        // 校验状态值是否合法(0:启用, 1:停用)
+        if (!Objects.equals(reqVo.getStatus(), 0) && !Objects.equals(reqVo.getStatus(), 1)) {
+            throw new SystemException("打印机状态值非法");
+        }
+        // 获取并校验打印机及权限
+        KwsPrinter printer = getAndCheck(reqVo.getId());
+        printer.setStatus(reqVo.getStatus());
+        printer.setUpdateBy(LoginUserHolder.getUserId());
+        printer.setUpdateTime(new Date());
+        // 执行更新操作
+        if (!kwsPrinterRepository.updateById(printer)) {
+            throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.UPDATE_FAIL);
+        }
+    }
+
+    /**
+     * 获取企业下拉选项列表
+     * 根据用户权限返回可见的企业列表,支持名称模糊搜索
+     *
+     * @param keyword 企业名称关键字
+     * @return 企业选项列表
+     */
+    public List<PlatformEnterpriseResVo> enterpriseOptions(String keyword) {
+        log.info("获取企业下拉选项列表,参数:{}", keyword);
+        // 获取当前用户有权限访问的企业ID集合
+        Set<Long> authEntIds = resolveAuthorizedEntIds();
+        List<KwsEnterprise> enterpriseList;
+        if (LoginUserHolder.isManager()) {
+            // 管理员可查看所有企业
+            enterpriseList = kwsEnterpriseRepository.queryByEntIdAndName(null, keyword);
+        } else if (authEntIds.isEmpty()) {
+            // 普通用户若无授权企业,返回空列表
+            return Collections.emptyList();
+        } else {
+            // 普通用户仅查看授权范围内的企业
+            enterpriseList = kwsEnterpriseRepository.queryByEntIds(authEntIds, keyword);
+        }
+        // 转换为响应VO
+        return enterpriseList.stream().map(item -> {
+            PlatformEnterpriseResVo resVo = new PlatformEnterpriseResVo();
+            resVo.setId(item.getId());
+            resVo.setFirmName(item.getFirmName());
+            return resVo;
+        }).toList();
+    }
+
+    /**
+     * 根据企业ID获取打印机下拉选项列表
+     *
+     * @param entId 企业ID
+     * @return 打印机选项列表
+     */
+    public List<PrinterOptionResVo> optionByEntId(Long entId) {
+        log.info("根据企业ID获取打印机下拉选项列表,参数:{}", entId);
+        // 校验企业是否存在及当前用户是否有该企业权限
+        checkEnterprise(entId);
+        // 查询该企业下的所有打印机并转换为VO
+        return kwsPrinterRepository.listByEntId(entId).stream().map(item -> {
+            PrinterOptionResVo resVo = new PrinterOptionResVo();
+            resVo.setId(item.getId());
+            resVo.setPrinterName(item.getPrinterName());
+            return resVo;
+        }).toList();
+    }
+
+    /**
+     * 构建分页响应数据列表
+     *
+     * @param records 数据库查询出的打印机实体列表
+     * @return 分页响应VO列表
+     */
+    private List<PrinterPageResVo> buildPageRes(List<KwsPrinter> records) {
+        if (records == null || records.isEmpty()) {
+            return Collections.emptyList();
+        }
+        // 批量获取企业名称映射,避免N+1查询问题
+        Map<Long, String> entNameMap = enterpriseNameMap(records.stream().map(KwsPrinter::getEntId).collect(Collectors.toSet()));
+        List<PrinterPageResVo> result = new ArrayList<>(records.size());
+        for (KwsPrinter record : records) {
+            PrinterPageResVo resVo = new PrinterPageResVo();
+            fillBaseRes(record, entNameMap, resVo);
+            result.add(resVo);
+        }
+        return result;
+    }
+
+    /**
+     * 填充打印机基础响应信息
+     *
+     * @param record     打印机实体
+     * @param entNameMap 企业ID到企业名称的映射
+     * @param resVo      待填充的响应VO
+     */
+    private void fillBaseRes(KwsPrinter record, Map<Long, String> entNameMap, PrinterPageResVo resVo) {
+        resVo.setId(record.getId());
+        resVo.setEntId(record.getEntId());
+        resVo.setEnterpriseName(entNameMap.getOrDefault(record.getEntId(), ""));
+        resVo.setPrinterName(record.getPrinterName());
+        resVo.setPrinterType(record.getPrinterType());
+        resVo.setUsefulLife(record.getUsefulLife());
+        resVo.setOnlineStatus(record.getOnlineStatus());
+        // 转换在线状态显示文本
+        resVo.setOnlineStatusName(Objects.equals(record.getOnlineStatus(), 1) ? "在线" : "离线");
+        resVo.setStatus(record.getStatus());
+        // 转换启用状态显示文本
+        resVo.setStatusName(Objects.equals(record.getStatus(), 0) ? "启用" : "停用");
+        resVo.setCreateTime(record.getCreateTime());
+        resVo.setUpdateTime(record.getUpdateTime());
+    }
+
+    /**
+     * 校验保存请求参数
+     *
+     * @param reqVo     请求参数
+     * @param excludeId 排除的ID(用于更新时排除自身)
+     */
+    private void validateSaveReq(PrinterSaveReqVo reqVo, Long excludeId) {
+        if (reqVo.getEntId() == null) {
+            throw new SystemException("所属企业不能为空");
+        }
+        if (StringUtils.isBlank(reqVo.getPrinterName())) {
+            throw new SystemException("打印机名称不能为空");
+        }
+        // 校验企业有效性及权限
+        checkEnterprise(reqVo.getEntId());
+        // 检查同一企业下打印机名称是否重复
+        KwsPrinter exists = kwsPrinterRepository.findByEntIdAndName(reqVo.getEntId(), reqVo.getPrinterName().trim());
+        if (exists != null && !Objects.equals(exists.getId(), excludeId)) {
+            throw new SystemException("同一企业下打印机名称不能重复");
+        }
+    }
+
+    /**
+     * 校验企业有效性及当前用户操作权限
+     *
+     * @param entId 企业ID
+     */
+    private void checkEnterprise(Long entId) {
+        // 判断是否有操作该企业的权限:管理员或授权企业列表中包含该企业
+        boolean allowed = LoginUserHolder.isManager() || resolveAuthorizedEntIds().contains(entId);
+        if (!allowed) {
+            throw new SystemException("没有当前企业的操作权限");
+        }
+        // 校验企业是否存在、未删除且状态正常
+        KwsEnterprise enterprise = kwsEnterpriseRepository.getById(entId);
+        if (enterprise == null || Objects.equals(enterprise.getDelFlag(), 1) || Objects.equals(enterprise.getStatus(), 1)) {
+            throw new SystemException(HttpStatus.ENT_NOT_EXISTS);
+        }
+    }
+
+    /**
+     * 获取打印机实体并校验权限
+     *
+     * @param id 打印机ID
+     * @return 打印机实体
+     */
+    private KwsPrinter getAndCheck(Long id) {
+        // 查询可用的打印机记录
+        KwsPrinter printer = kwsPrinterRepository.findAvailableById(id);
+        if (printer == null) {
+            throw new SystemException("打印机不存在");
+        }
+        // 非管理员需校验是否拥有该打印机所属企业的权限
+        if (!LoginUserHolder.isManager() && !resolveAuthorizedEntIds().contains(printer.getEntId())) {
+            throw new SystemException("没有当前打印机的操作权限");
+        }
+        return printer;
+    }
+
+    /**
+     * 获取企业ID到企业名称的映射
+     *
+     * @param entIds 企业ID集合
+     * @return 映射Map
+     */
+    private Map<Long, String> enterpriseNameMap(Collection<Long> entIds) {
+        if (entIds == null || entIds.isEmpty()) {
+            return Collections.emptyMap();
+        }
+        return kwsEnterpriseRepository.listByIds(entIds).stream()
+                .collect(Collectors.toMap(KwsEnterprise::getId, KwsEnterprise::getFirmName, (a, b) -> a));
+    }
+
+    /**
+     * 解析查询条件中的企业ID集合
+     * 根据用户权限和输入的企业名称关键字,筛选出符合条件的企业ID
+     *
+     * @param enterpriseName 企业名称关键字
+     * @return 企业ID集合
+     */
+    private Set<Long> resolveQueryEntIds(String enterpriseName) {
+        Set<Long> authEntIds = resolveAuthorizedEntIds();
+        List<KwsEnterprise> enterpriseList;
+        if (LoginUserHolder.isManager()) {
+            // 管理员可根据名称全局搜索
+            enterpriseList = kwsEnterpriseRepository.queryByEntIdAndName(null, enterpriseName);
+        } else if (authEntIds.isEmpty()) {
+            // 无授权企业则返回空集合
+            return Collections.emptySet();
+        } else {
+            // 普通用户在授权范围内根据名称搜索
+            enterpriseList = kwsEnterpriseRepository.queryByEntIds(authEntIds, enterpriseName);
+        }
+        // 提取ID并保持顺序
+        return enterpriseList.stream().map(KwsEnterprise::getId).collect(Collectors.toCollection(LinkedHashSet::new));
+    }
+
+    /**
+     * 解析当前用户有权限访问的企业ID集合
+     * 包括:用户所属企业、授权企业列表、子企业列表
+     * 如果是管理员,返回空集合表示无限制(具体逻辑视业务而定,此处空集合通常代表全选或特殊标记)
+     *
+     * @return 企业ID集合
+     */
+    private Set<Long> resolveAuthorizedEntIds() {
+        if (LoginUserHolder.isManager()) {
+            return Collections.emptySet();
+        }
+        Set<Long> result = new LinkedHashSet<>();
+        if (LoginUserHolder.getEntId() != null) {
+            result.add(LoginUserHolder.getEntId());
+        }
+        result.addAll(LoginUserHolder.getAuthEntIdList());
+        result.addAll(LoginUserHolder.getChildEntList());
+        return result;
+    }
+
+    /**
+     * 获取默认的在线状态
+     * 如果传入为1则在线,否则默认离线(0)
+     *
+     * @param onlineStatus 传入的在线状态
+     * @return 标准化后的在线状态
+     */
+    private Integer defaultOnlineStatus(Integer onlineStatus) {
+        return Objects.equals(onlineStatus, 1) ? 1 : 0;
+    }
+}

+ 19 - 0
sql/2026/04/2026_04_08_kws_printer_create.sql

@@ -0,0 +1,19 @@
+CREATE TABLE `kws_printer`
+(
+    `id`            bigint        NOT NULL COMMENT '主键ID',
+    `ent_id`        bigint        NOT NULL COMMENT '所属企业ID',
+    `printer_name`  varchar(100)  NOT NULL DEFAULT '' COMMENT '打印机名称',
+    `printer_type`  varchar(50)   NOT NULL DEFAULT '' COMMENT '打印机类型',
+    `useful_life`   varchar(50)   NOT NULL DEFAULT '' COMMENT '可使用寿命',
+    `online_status` tinyint       NOT NULL DEFAULT 0 COMMENT '在线状态: 0-离线, 1-在线',
+    `remark`        varchar(255)  NOT NULL DEFAULT '' COMMENT '备注',
+    `status`        tinyint       NOT NULL DEFAULT 0 COMMENT '启停状态: 0-启用, 1-停用',
+    `create_by`     bigint        NOT NULL DEFAULT 0 COMMENT '创建人',
+    `create_time`   datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+    `update_by`     bigint        NOT NULL DEFAULT 0 COMMENT '更新人',
+    `update_time`   datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+    `del_flag`      int           NOT NULL DEFAULT 0 COMMENT '删除标识: 0-正常, 1-删除',
+    PRIMARY KEY (`id`) USING BTREE,
+    UNIQUE KEY `uk_ent_printer_name_del_flag` (`ent_id`, `printer_name`, `del_flag`) USING BTREE,
+    KEY `idx_create_time` (`create_time`) USING BTREE
+) COMMENT ='打印机表';

+ 24 - 0
sql/2026/04/2026_04_08_kws_weighbridge_create.sql

@@ -0,0 +1,24 @@
+CREATE TABLE `kws_weighbridge`
+(
+    `id`                bigint        NOT NULL COMMENT '主键ID',
+    `ent_id`            bigint        NOT NULL COMMENT '所属企业ID',
+    `weighbridge_name`  varchar(100)  NOT NULL DEFAULT '' COMMENT '地磅名称',
+    `unique_code`       varchar(64)   NOT NULL DEFAULT '' COMMENT '唯一编码',
+    `online_status`     tinyint       NOT NULL DEFAULT 0 COMMENT '在线状态: 0-离线, 1-在线',
+    `printer_id`        bigint        NULL COMMENT '关联打印机ID',
+    `description`       varchar(255)  NOT NULL DEFAULT '' COMMENT '描述',
+    `diff_config`       text          NULL COMMENT '差异化配置(JSON)',
+    `last_restart_time` datetime      NULL COMMENT '最近重启时间',
+    `remark`            varchar(255)  NOT NULL DEFAULT '' COMMENT '备注',
+    `status`            tinyint       NOT NULL DEFAULT 0 COMMENT '启停状态: 0-启用, 1-停用',
+    `create_by`         bigint        NOT NULL DEFAULT 0 COMMENT '创建人',
+    `create_time`       datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+    `update_by`         bigint        NOT NULL DEFAULT 0 COMMENT '更新人',
+    `update_time`       datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+    `del_flag`          int           NOT NULL DEFAULT 0 COMMENT '删除标识: 0-正常, 1-删除',
+    PRIMARY KEY (`id`) USING BTREE,
+    UNIQUE KEY `uk_unique_code_del_flag` (`unique_code`, `del_flag`) USING BTREE,
+    KEY `idx_ent_id` (`ent_id`) USING BTREE,
+    KEY `idx_printer_id` (`printer_id`) USING BTREE,
+    KEY `idx_create_time` (`create_time`) USING BTREE
+) COMMENT ='无人地磅表';

+ 16 - 0
sql/2026/04/2026_04_08_kws_weighbridge_diff_config_create.sql

@@ -0,0 +1,16 @@
+CREATE TABLE `kws_weighbridge_diff_config`
+(
+    `id`                bigint          NOT NULL COMMENT '主键ID',
+    `ent_id`            bigint          NOT NULL COMMENT '企业ID',
+    `tare_error_value`  decimal(10, 3)  NOT NULL DEFAULT 0.000 COMMENT '皮重误差值(吨)',
+    `load_error_value`  decimal(10, 3)  NOT NULL DEFAULT 0.000 COMMENT '载重误差值(吨)',
+    `empty_load_value`  decimal(10, 3)  NOT NULL DEFAULT 0.000 COMMENT '空载判定值(吨)',
+    `create_by`         bigint          NOT NULL DEFAULT 0 COMMENT '创建人',
+    `create_time`       datetime        NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+    `update_by`         bigint          NOT NULL DEFAULT 0 COMMENT '更新人',
+    `update_time`       datetime        NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+    `del_flag`          int             NOT NULL DEFAULT 0 COMMENT '删除标识: 0-正常, 1-删除',
+    PRIMARY KEY (`id`) USING BTREE,
+    UNIQUE KEY `uk_ent_id_del_flag` (`ent_id`, `del_flag`) USING BTREE,
+    KEY `idx_update_time` (`update_time`) USING BTREE
+) COMMENT ='地磅差异化配置表';

+ 8 - 0
sql/2026/04/2026_04_08_kws_weighbridge_printer_alert.sql

@@ -0,0 +1,8 @@
+ALTER TABLE `kws_weighbridge`
+    ADD COLUMN `printer_id` bigint NULL COMMENT '关联打印机ID' AFTER `online_status`;
+
+ALTER TABLE `kws_weighbridge`
+    ADD KEY `idx_printer_id` (`printer_id`) USING BTREE;
+
+ALTER TABLE `kws_weighbridge`
+    DROP COLUMN `printer_name`;

+ 18 - 0
sql/2026/04/2026_04_08_kws_weighbridge_record_create.sql

@@ -0,0 +1,18 @@
+CREATE TABLE `kws_weighbridge_record`
+(
+    `id`             bigint         NOT NULL COMMENT '主键ID',
+    `weighbridge_id` bigint         NOT NULL COMMENT '地磅ID',
+    `truck_no`       varchar(32)    NOT NULL DEFAULT '' COMMENT '车牌号',
+    `weight`         decimal(10, 2) NOT NULL DEFAULT 0.00 COMMENT '重量(吨)',
+    `receive_time`   datetime       NULL COMMENT '接收时间',
+    `create_by`      bigint         NOT NULL DEFAULT 0 COMMENT '创建人',
+    `create_time`    datetime       NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+    `update_by`      bigint         NOT NULL DEFAULT 0 COMMENT '更新人',
+    `update_time`    datetime       NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+    `del_flag`       int            NOT NULL DEFAULT 0 COMMENT '删除标识: 0-正常, 1-删除',
+    PRIMARY KEY (`id`) USING BTREE,
+    KEY `idx_weighbridge_id` (`weighbridge_id`) USING BTREE,
+    KEY `idx_truck_no` (`truck_no`) USING BTREE,
+    KEY `idx_create_time` (`create_time`) USING BTREE,
+    KEY `idx_receive_time` (`receive_time`) USING BTREE
+) COMMENT ='地磅称重记录表';