Bladeren bron

生产报表

hfxc226 23 uur geleden
bovenliggende
commit
5bb70f6d35
47 gewijzigde bestanden met toevoegingen van 5881 en 3 verwijderingen
  1. 9 0
      platform-common/pom.xml
  2. 86 0
      platform-common/src/main/java/com/platform/common/util/FelUtil.java
  3. 102 0
      platform-dao/src/main/java/com/platform/dao/dto/produce/ProduceDataDTO.java
  4. 106 0
      platform-dao/src/main/java/com/platform/dao/dto/produce/ProduceLogDTO.java
  5. 133 0
      platform-dao/src/main/java/com/platform/dao/dto/produce/ProduceRecordDTO.java
  6. 143 0
      platform-dao/src/main/java/com/platform/dao/dto/produce/ProduceReportDTO.java
  7. 88 0
      platform-dao/src/main/java/com/platform/dao/entity/produce/ProduceData.java
  8. 76 0
      platform-dao/src/main/java/com/platform/dao/entity/produce/ProduceLog.java
  9. 106 0
      platform-dao/src/main/java/com/platform/dao/entity/produce/ProduceRecord.java
  10. 113 0
      platform-dao/src/main/java/com/platform/dao/entity/produce/ProduceReport.java
  11. 0 2
      platform-dao/src/main/java/com/platform/dao/entity/store/Store.java
  12. 30 0
      platform-dao/src/main/java/com/platform/dao/enums/ProduceLogTypeEnum.java
  13. 51 0
      platform-dao/src/main/java/com/platform/dao/enums/ProduceRecordTypeEnum.java
  14. 9 1
      platform-dao/src/main/java/com/platform/dao/enums/SysConfigEnum.java
  15. 27 0
      platform-dao/src/main/java/com/platform/dao/mapper/produce/ProduceDataMapper.java
  16. 27 0
      platform-dao/src/main/java/com/platform/dao/mapper/produce/ProduceLogMapper.java
  17. 27 0
      platform-dao/src/main/java/com/platform/dao/mapper/produce/ProduceRecordMapper.java
  18. 29 0
      platform-dao/src/main/java/com/platform/dao/mapper/produce/ProduceReportMapper.java
  19. 99 0
      platform-dao/src/main/java/com/platform/dao/vo/export/produce/ExportProduceDataVO.java
  20. 87 0
      platform-dao/src/main/java/com/platform/dao/vo/export/produce/ExportProduceLogVO.java
  21. 119 0
      platform-dao/src/main/java/com/platform/dao/vo/export/produce/ExportProduceRecordVO.java
  22. 129 0
      platform-dao/src/main/java/com/platform/dao/vo/export/produce/ExportProduceReportDayVO.java
  23. 48 0
      platform-dao/src/main/java/com/platform/dao/vo/export/produce/ExportProduceReportTianVO.java
  24. 129 0
      platform-dao/src/main/java/com/platform/dao/vo/export/produce/ExportProduceReportVO.java
  25. 80 0
      platform-dao/src/main/java/com/platform/dao/vo/query/produce/ProduceDataVO.java
  26. 69 0
      platform-dao/src/main/java/com/platform/dao/vo/query/produce/ProduceLogVO.java
  27. 98 0
      platform-dao/src/main/java/com/platform/dao/vo/query/produce/ProduceRecordVO.java
  28. 332 0
      platform-dao/src/main/java/com/platform/dao/vo/query/produce/ProduceReportTianVO.java
  29. 109 0
      platform-dao/src/main/java/com/platform/dao/vo/query/produce/ProduceReportVO.java
  30. 104 0
      platform-dao/src/main/resources/mapper/produce/ProduceDataMapper.xml
  31. 92 0
      platform-dao/src/main/resources/mapper/produce/ProduceLogMapper.xml
  32. 128 0
      platform-dao/src/main/resources/mapper/produce/ProduceRecordMapper.xml
  33. 162 0
      platform-dao/src/main/resources/mapper/produce/ProduceReportMapper.xml
  34. 123 0
      platform-rest/src/main/java/com/platform/rest/controller/produce/ProduceController.java
  35. 142 0
      platform-rest/src/main/java/com/platform/rest/controller/produce/ProduceDataController.java
  36. 142 0
      platform-rest/src/main/java/com/platform/rest/controller/produce/ProduceLogController.java
  37. 142 0
      platform-rest/src/main/java/com/platform/rest/controller/produce/ProduceRecordController.java
  38. 221 0
      platform-rest/src/main/java/com/platform/rest/controller/produce/ProduceReportController.java
  39. 96 0
      platform-rest/src/main/java/com/platform/rest/task/ProduceReportTask.java
  40. 62 0
      platform-service/src/main/java/com/platform/service/produce/ProduceDataService.java
  41. 52 0
      platform-service/src/main/java/com/platform/service/produce/ProduceLogService.java
  42. 68 0
      platform-service/src/main/java/com/platform/service/produce/ProduceRecordService.java
  43. 95 0
      platform-service/src/main/java/com/platform/service/produce/ProduceReportService.java
  44. 103 0
      platform-service/src/main/java/com/platform/service/produce/impl/ProduceDataServiceImpl.java
  45. 74 0
      platform-service/src/main/java/com/platform/service/produce/impl/ProduceLogServiceImpl.java
  46. 198 0
      platform-service/src/main/java/com/platform/service/produce/impl/ProduceRecordServiceImpl.java
  47. 1416 0
      platform-service/src/main/java/com/platform/service/produce/impl/ProduceReportServiceImpl.java

+ 9 - 0
platform-common/pom.xml

@@ -20,6 +20,15 @@
 
     <dependencies>
 
+        <!--fel-->
+        <dependency>
+            <groupId>com.fel</groupId>
+            <artifactId>fel</artifactId>
+            <version>1.0.0</version>
+            <scope>system</scope>
+            <systemPath>${pom.basedir}/src/lib/fel.jar</systemPath>
+        </dependency>
+
         <!--hutool-->
         <dependency>
             <groupId>cn.hutool</groupId>

+ 86 - 0
platform-common/src/main/java/com/platform/common/util/FelUtil.java

@@ -0,0 +1,86 @@
+package com.platform.common.util;
+
+import com.greenpineyu.fel.FelEngine;
+import com.greenpineyu.fel.FelEngineImpl;
+import com.greenpineyu.fel.context.FelContext;
+import lombok.extern.slf4j.Slf4j;
+
+import java.io.IOException;
+import java.text.DecimalFormat;
+import java.time.LocalDateTime;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @description: 数学公式解析计算的参数转换
+ * @author: jxq
+ * @date: 2021/3/25 12:44 下午
+ * @version: 1.0
+ **/
+@Slf4j
+public class FelUtil {
+
+    private final static FelEngine fel = new FelEngineImpl();
+    private final static FelContext ctx = fel.getContext();
+
+    public static void main(String[] args) throws IOException {
+        String expression = "(3.1415926*(3.6/2)*(3.6/2)*value/100*6.05)*1000*1.325";
+        Map<String, Double> param = new HashMap<>();
+        param.put("value", 79.24);
+        int scale = 2;
+        String result = getResultFromMap(expression, param, scale);
+        System.out.println(result);
+    }
+
+    /**
+     * 计算一条表达式的值
+     *
+     * @param expression
+     * @param param
+     * @param scale
+     * @return
+     */
+    public static String getResultFromMap(String expression, Map<String, Double> param, int scale) {
+
+        log.info("开始时间:" + LocalDateTime.now());
+        for (Map.Entry<String, Double> entry : param.entrySet()) {
+            log.info("key = " + entry.getKey() + ", value = " + entry.getValue());
+            String entryKey = entry.getKey();
+            Double entryValue = entry.getValue();
+            ctx.set(entryKey, entryValue);
+        }
+        log.info("expression = " + expression);
+        Object obj = fel.eval(expression);
+        String resultD = "";
+        if (obj instanceof Integer) {
+            log.info("Integer: " + obj.toString());
+            resultD = obj.toString();
+        } else {
+            if (Double.isNaN((double) obj)) {
+                resultD = "0";
+            } else {
+                resultD = obj.toString();
+            }
+        }
+
+        log.info("结束时间:" + LocalDateTime.now());
+        return getScaleResult(Double.valueOf(resultD), scale);
+    }
+
+    /**
+     * 返回指定精度的结果
+     * @param result
+     * @param scale
+     * @return
+     */
+    public static String getScaleResult(Double result, int scale){
+        StringBuffer sb = new StringBuffer("#0.");
+        for (int i = 0; i < scale; i++) {
+            sb.append("0");
+        }
+        String pattern = sb.toString();
+        DecimalFormat decimalFormat = new DecimalFormat(pattern);// 格式化设置
+        return decimalFormat.format(result);
+    }
+
+}

+ 102 - 0
platform-dao/src/main/java/com/platform/dao/dto/produce/ProduceDataDTO.java

@@ -0,0 +1,102 @@
+package com.platform.dao.dto.produce;
+
+import com.platform.common.bean.BaseDTO;
+import com.platform.common.validation.group.UpdateGroup;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * @Description 生产日报字段DTO
+ * @Author xc
+ * @Date 2024-12-16 23:16:05
+ * @Version Copyright (c) 2020,合肥乾元坤合科技有限公司 All rights reserved.
+ */
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = true)
+public class ProduceDataDTO extends BaseDTO implements Serializable {
+
+    /**
+     * 类型
+     */
+    private Integer type;
+    /**
+     * id
+     */
+    @NotNull(groups = {UpdateGroup.class}, message = "ID不能为空")
+    private String id;
+    /**
+     * 编号
+     */
+    private String no;
+    /**
+     * 名称
+     */
+    private String name;
+    /**
+     * 单位
+     */
+    private String unit;
+    /**
+     * 分组1
+     */
+    private String lineOne;
+    /**
+     * 分租2
+     */
+    private String lineTwo;
+    /**
+     * 排序
+     */
+    private Integer sort;
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createdTime;
+    /**
+     * 创建时间开始
+     */
+    private LocalDateTime createdTimeStart;
+    /**
+     * 创建时间结束
+     */
+    private LocalDateTime createdTimeEnd;
+    /**
+     * 创建人ID
+     */
+    private String createdUserId;
+    /**
+     * 创建人
+     */
+    private String createdUserName;
+    /**
+     * 更新时间
+     */
+    private LocalDateTime updateTime;
+    /**
+     * 更新时间开始
+     */
+    private LocalDateTime updateTimeStart;
+    /**
+     * 更新时间结束
+     */
+    private LocalDateTime updateTimeEnd;
+    /**
+     * 更新人ID
+     */
+    private String updateUserId;
+    /**
+     * 更新人
+     */
+    private String updateUserName;
+    /**
+     * 关键字
+     */
+    private String keyword;
+
+}

+ 106 - 0
platform-dao/src/main/java/com/platform/dao/dto/produce/ProduceLogDTO.java

@@ -0,0 +1,106 @@
+package com.platform.dao.dto.produce;
+
+import com.platform.common.bean.BaseDTO;
+import com.platform.common.validation.group.UpdateGroup;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * @Description 同步日志DTO
+ * @Author xc
+ * @Date 2024-12-20 10:50:04
+ * @Version Copyright (c) 2020,合肥乾元坤合科技有限公司 All rights reserved.
+ */
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = true)
+public class ProduceLogDTO extends BaseDTO implements Serializable {
+
+    /**
+     * id
+     */
+    @NotNull(groups = {UpdateGroup.class}, message = "ID不能为空")
+    private String id;
+    /**
+     * 类型
+     */
+    private Integer type;
+    /**
+     * 状态
+     */
+    private Integer status;
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createdTime;
+    /**
+     * 创建时间开始
+     */
+    private LocalDateTime createdTimeStart;
+    /**
+     * 创建时间结束
+     */
+    private LocalDateTime createdTimeEnd;
+    /**
+     * 创建人ID
+     */
+    private String createdUserId;
+    /**
+     * 创建人
+     */
+    private String createdUserName;
+    /**
+     * 更新时间
+     */
+    private LocalDateTime updateTime;
+    /**
+     * 更新时间开始
+     */
+    private LocalDateTime updateTimeStart;
+    /**
+     * 更新时间结束
+     */
+    private LocalDateTime updateTimeEnd;
+    /**
+     * 更新人ID
+     */
+    private String updateUserId;
+    /**
+     * 更新人
+     */
+    private String updateUserName;
+    /**
+     * 开始时间
+     */
+    private LocalDateTime startTime;
+    /**
+     * 开始时间开始
+     */
+    private LocalDateTime startTimeStart;
+    /**
+     * 开始时间结束
+     */
+    private LocalDateTime startTimeEnd;
+    /**
+     * 结束时间
+     */
+    private LocalDateTime endTime;
+    /**
+     * 结束时间开始
+     */
+    private LocalDateTime endTimeStart;
+    /**
+     * 结束时间结束
+     */
+    private LocalDateTime endTimeEnd;
+    /**
+     * 关键字
+     */
+    private String keyword;
+
+}

+ 133 - 0
platform-dao/src/main/java/com/platform/dao/dto/produce/ProduceRecordDTO.java

@@ -0,0 +1,133 @@
+package com.platform.dao.dto.produce;
+
+import com.platform.common.bean.BaseDTO;
+import com.platform.common.validation.group.UpdateGroup;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * @Description 同步记录DTO
+ * @Author xc
+ * @Date 2024-12-20 10:50:24
+ * @Version Copyright (c) 2020,合肥乾元坤合科技有限公司 All rights reserved.
+ */
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = true)
+public class ProduceRecordDTO extends BaseDTO implements Serializable {
+
+    /**
+     * id
+     */
+    @NotNull(groups = {UpdateGroup.class}, message = "ID不能为空")
+    private String id;
+    /**
+     * 单据类型
+     */
+    private Integer type;
+    /**
+     * 单据类型名称
+     */
+    private String typeName;
+    /**
+     * 单据单号
+     */
+    private String no;
+    /**
+     * 批次号
+     */
+    private String batchNo;
+    /**
+     * 产品编码
+     */
+    private String productNo;
+    /**
+     * 产品名称
+     */
+    private String productName;
+    /**
+     * 单据日期
+     */
+    private LocalDate date;
+    /**
+     * 单据日期开始
+     */
+    private LocalDateTime dateStart;
+    /**
+     * 单据日期结束
+     */
+    private LocalDateTime dateEnd;
+    /**
+     * 数量
+     */
+    private BigDecimal num;
+    /**
+     * 关联单号
+     */
+    private String relationNo;
+    /**
+     * 单位
+     */
+    private String unit;
+    /**
+     * 状态
+     */
+    private Integer status;
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createdTime;
+    /**
+     * 创建时间开始
+     */
+    private LocalDateTime createdTimeStart;
+    /**
+     * 创建时间结束
+     */
+    private LocalDateTime createdTimeEnd;
+    /**
+     * 创建人ID
+     */
+    private String createdUserId;
+    /**
+     * 创建人
+     */
+    private String createdUserName;
+    /**
+     * 更新时间
+     */
+    private LocalDateTime updateTime;
+    /**
+     * 更新时间开始
+     */
+    private LocalDateTime updateTimeStart;
+    /**
+     * 更新时间结束
+     */
+    private LocalDateTime updateTimeEnd;
+    /**
+     * 更新人ID
+     */
+    private String updateUserId;
+    /**
+     * 更新人
+     */
+    private String updateUserName;
+    /**
+     * 关键字
+     */
+    private String keyword;
+
+    /**
+     * str
+     */
+    private String str;
+
+}

+ 143 - 0
platform-dao/src/main/java/com/platform/dao/dto/produce/ProduceReportDTO.java

@@ -0,0 +1,143 @@
+package com.platform.dao.dto.produce;
+
+import com.platform.common.bean.BaseDTO;
+import com.platform.common.validation.group.UpdateGroup;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * @Description 生产每日报表DTO
+ * @Author xc
+ * @Date 2024-12-16 13:29:22
+ * @Version Copyright (c) 2020,合肥乾元坤合科技有限公司 All rights reserved.
+ */
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = true)
+public class ProduceReportDTO extends BaseDTO implements Serializable {
+    /**
+     * id
+     */
+    @NotNull(groups = {UpdateGroup.class}, message = "ID不能为空")
+    private String id;
+    /**
+     * 填报字段
+     */
+    private String dataId;
+    /**
+     * id
+     */
+    private List<String> dataIds;
+    /**
+     * 数据日期:年月日
+     */
+    private LocalDate date;
+    /**
+     * 查询数据日期-开始:年月日
+     */
+    private LocalDate dateStart;
+    /**
+     * 查询数据日期-截止:年月日
+     */
+    private LocalDate dateEnd;
+    /**
+     * 编号
+     */
+    private String no;
+    /**
+     * 编号
+     */
+    private List<String> noList;
+    /**
+     * 名称
+     */
+    private String name;
+    /**
+     * 天
+     */
+    private Integer day;
+    /**
+     * 月
+     */
+    private Integer month;
+    /**
+     * 年
+     */
+    private Integer year;
+    /**
+     * 平均
+     */
+    private String avg;
+    /**
+     * 单位
+     */
+    private String unit;
+    /**
+     * 分组1
+     */
+    private String lineOne;
+    /**
+     * 分租2
+     */
+    private String lineTwo;
+    /**
+     * 排序
+     */
+    private Integer sort;
+    /**
+     * 值
+     */
+    private String value;
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createdTime;
+    /**
+     * 创建时间开始
+     */
+    private LocalDateTime createdTimeStart;
+    /**
+     * 创建时间结束
+     */
+    private LocalDateTime createdTimeEnd;
+    /**
+     * 创建人ID
+     */
+    private String createdUserId;
+    /**
+     * 创建人
+     */
+    private String createdUserName;
+    /**
+     * 更新时间
+     */
+    private LocalDateTime updateTime;
+    /**
+     * 更新时间开始
+     */
+    private LocalDateTime updateTimeStart;
+    /**
+     * 更新时间结束
+     */
+    private LocalDateTime updateTimeEnd;
+    /**
+     * 更新人ID
+     */
+    private String updateUserId;
+    /**
+     * 更新人
+     */
+    private String updateUserName;
+    /**
+     * 关键字
+     */
+    private String keyword;
+
+}

+ 88 - 0
platform-dao/src/main/java/com/platform/dao/entity/produce/ProduceData.java

@@ -0,0 +1,88 @@
+package com.platform.dao.entity.produce;
+
+import com.platform.common.bean.DataScope;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import javax.persistence.Id;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * @Description 生产日报字段实体类
+ * @Author xc
+ * @Date 2024-12-16 23:16:05
+ * @Version Copyright (c) 2020,合肥乾元坤合科技有限公司 All rights reserved.
+ */
+@Data
+@Accessors(chain = true)
+@Table(name = "t_produce_data")
+public class ProduceData implements Serializable {
+
+    /**
+     * 类型
+     */
+    private Integer type;
+    /**
+     * id
+     */
+    @Id
+    private String id;
+    /**
+     * 编号
+     */
+    private String no;
+    /**
+     * 名称
+     */
+    private String name;
+    /**
+     * 单位
+     */
+    private String unit;
+    /**
+     * 分组1
+     */
+    private String lineOne;
+    /**
+     * 分租2
+     */
+    private String lineTwo;
+    /**
+     * 排序
+     */
+    private Integer sort;
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createdTime;
+    /**
+     * 创建人ID
+     */
+    private String createdUserId;
+    /**
+     * 创建人
+     */
+    private String createdUserName;
+    /**
+     * 更新时间
+     */
+    private LocalDateTime updateTime;
+    /**
+     * 更新人ID
+     */
+    private String updateUserId;
+    /**
+     * 更新人
+     */
+    private String updateUserName;
+
+    /**
+     * 数据权限
+     */
+    @Transient
+    private DataScope dataScope;
+
+}

+ 76 - 0
platform-dao/src/main/java/com/platform/dao/entity/produce/ProduceLog.java

@@ -0,0 +1,76 @@
+package com.platform.dao.entity.produce;
+
+import com.platform.common.bean.DataScope;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import javax.persistence.Id;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * @Description 同步日志实体类
+ * @Author xc
+ * @Date 2024-12-20 10:50:04
+ * @Version Copyright (c) 2020,合肥乾元坤合科技有限公司 All rights reserved.
+ */
+@Data
+@Accessors(chain = true)
+@Table(name = "t_produce_log")
+public class ProduceLog implements Serializable{
+
+    /**
+     * id
+     */
+        @Id
+    private String id;
+    /**
+     * 类型
+     */
+    private Integer type;
+    /**
+     * 状态
+     */
+    private Integer status;
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createdTime;
+    /**
+     * 创建人ID
+     */
+    private String createdUserId;
+    /**
+     * 创建人
+     */
+    private String createdUserName;
+    /**
+     * 更新时间
+     */
+    private LocalDateTime updateTime;
+    /**
+     * 更新人ID
+     */
+    private String updateUserId;
+    /**
+     * 更新人
+     */
+    private String updateUserName;
+    /**
+     * 开始时间
+     */
+    private LocalDateTime startTime;
+    /**
+     * 结束时间
+     */
+    private LocalDateTime endTime;
+
+   /**
+    * 数据权限
+    */
+    @Transient
+    private DataScope dataScope;
+
+}

+ 106 - 0
platform-dao/src/main/java/com/platform/dao/entity/produce/ProduceRecord.java

@@ -0,0 +1,106 @@
+package com.platform.dao.entity.produce;
+
+import com.platform.common.bean.DataScope;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import javax.persistence.Id;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * @Description 同步记录实体类
+ * @Author xc
+ * @Date 2024-12-20 10:50:24
+ * @Version Copyright (c) 2020,合肥乾元坤合科技有限公司 All rights reserved.
+ */
+@Data
+@Accessors(chain = true)
+@Table(name = "t_produce_record")
+public class ProduceRecord implements Serializable {
+
+    /**
+     * id
+     */
+    @Id
+    private String id;
+    /**
+     * 单据类型
+     */
+    private Integer type;
+    /**
+     * 单据类型名称
+     */
+    private String typeName;
+    /**
+     * 单据单号
+     */
+    private String no;
+    /**
+     * 批次号
+     */
+    private String batchNo;
+    /**
+     * 产品编码
+     */
+    private String productNo;
+    /**
+     * 产品名称
+     */
+    private String productName;
+    /**
+     * 单据日期
+     */
+    private LocalDate date;
+    /**
+     * 数量
+     */
+    private BigDecimal num;
+    /**
+     * 关联单号
+     */
+    private String relationNo;
+    /**
+     * 单位
+     */
+    private String unit;
+    /**
+     * 状态
+     */
+    private Integer status;
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createdTime;
+    /**
+     * 创建人ID
+     */
+    private String createdUserId;
+    /**
+     * 创建人
+     */
+    private String createdUserName;
+    /**
+     * 更新时间
+     */
+    private LocalDateTime updateTime;
+    /**
+     * 更新人ID
+     */
+    private String updateUserId;
+    /**
+     * 更新人
+     */
+    private String updateUserName;
+
+    /**
+     * 数据权限
+     */
+    @Transient
+    private DataScope dataScope;
+
+}

+ 113 - 0
platform-dao/src/main/java/com/platform/dao/entity/produce/ProduceReport.java

@@ -0,0 +1,113 @@
+package com.platform.dao.entity.produce;
+
+import com.platform.common.bean.DataScope;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import javax.persistence.Id;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * @Description 生产每日报表实体类
+ * @Author xc
+ * @Date 2024-12-16 13:29:22
+ * @Version Copyright (c) 2020,合肥乾元坤合科技有限公司 All rights reserved.
+ */
+@Data
+@Accessors(chain = true)
+@Table(name = "t_produce_report")
+public class ProduceReport implements Serializable {
+
+    /**
+     * id
+     */
+    @Id
+    private String id;
+    /**
+     * 填报字段
+     */
+    private String dataId;
+    /**
+     * 数据日期:年月日
+     */
+    private LocalDate date;
+    /**
+     * 编号
+     */
+    private String no;
+    /**
+     * 名称
+     */
+    private String name;
+    /**
+     * 天
+     */
+    private Integer day;
+    /**
+     * 月
+     */
+    private Integer month;
+    /**
+     * 年
+     */
+    private Integer year;
+    /**
+     * 平均
+     */
+    private String avg;
+    /**
+     * 单位
+     */
+    private String unit;
+    /**
+     * 分组1
+     */
+    private String lineOne;
+    /**
+     * 分租2
+     */
+    private String lineTwo;
+    /**
+     * 排序
+     */
+    private Integer sort;
+    /**
+     * 值
+     */
+    private String value;
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createdTime;
+    /**
+     * 创建人ID
+     */
+    private String createdUserId;
+    /**
+     * 创建人
+     */
+    private String createdUserName;
+    /**
+     * 更新时间
+     */
+    private LocalDateTime updateTime;
+    /**
+     * 更新人ID
+     */
+    private String updateUserId;
+    /**
+     * 更新人
+     */
+    private String updateUserName;
+
+    /**
+     * 数据权限
+     */
+    @Transient
+    private DataScope dataScope;
+
+}

+ 0 - 2
platform-dao/src/main/java/com/platform/dao/entity/store/Store.java

@@ -1,13 +1,11 @@
 package com.platform.dao.entity.store;
 
-import com.platform.dao.vo.sb.SbTypeVO;
 import lombok.Data;
 
 import javax.persistence.Id;
 import javax.persistence.Table;
 import java.io.Serializable;
 import java.time.LocalDateTime;
-import java.time.LocalDate;
 import java.util.List;
 
 import lombok.experimental.Accessors;

+ 30 - 0
platform-dao/src/main/java/com/platform/dao/enums/ProduceLogTypeEnum.java

@@ -0,0 +1,30 @@
+package com.platform.dao.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @Description 同步日志类型
+ * @Author liuyu
+ * @Date 2020/05/05
+ * @Version Copyright (c) 2019,合肥乾元坤合科技有限公司 All rights reserved.
+ */
+@Getter
+@AllArgsConstructor
+public enum ProduceLogTypeEnum {
+
+    /**
+     * 产成品入库和半成品入库
+     */
+    CCP_RK(1),
+    /**
+     * 材料出库
+     */
+    CL_CK(2),
+    /**
+     * 销售出库
+     */
+    XS_CK(3);
+    private final Integer value;
+
+}

+ 51 - 0
platform-dao/src/main/java/com/platform/dao/enums/ProduceRecordTypeEnum.java

@@ -0,0 +1,51 @@
+package com.platform.dao.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @Description 同步记录类型
+ * @Author liuyu
+ * @Date 2020/05/05
+ * @Version Copyright (c) 2019,合肥乾元坤合科技有限公司 All rights reserved.
+ */
+@Getter
+@AllArgsConstructor
+public enum ProduceRecordTypeEnum {
+
+    /**
+     * 产成品入库
+     */
+    CCP_RK(1),
+    /**
+     * 半成品入库
+     */
+    BCP_RK(2),
+    /**
+     * 材料出库
+     */
+    CL_CK(3),
+    /**
+     * 销售出库
+     */
+    XS_CK(4),
+    /**
+     * 现存量
+     */
+    XCL(5),
+    /**
+     * 采购入库
+     */
+    CG_RK(6),
+    /**
+     * 电量
+     */
+    DIAN(7),
+    /**
+     * 液位
+     */
+    YEWEI(8);
+
+    private final Integer value;
+
+}

+ 9 - 1
platform-dao/src/main/java/com/platform/dao/enums/SysConfigEnum.java

@@ -67,7 +67,15 @@ public enum SysConfigEnum {
     PREPARATION_SPECIAL_USER_IDS("指定账号ID为默认审核主管和部门负责人"),
     PURCHASE_SYSTEM_URL_DEGREE("采购系统接收电量数据的接口"),
     PURCHASE_DEGREE_NO("采购系统需要的电量数据的点位"),
-    PURCHASE_SYSTEM_URL_YEWEI("采购系统接收液位数据的接口");
+    PURCHASE_SYSTEM_URL_YEWEI("采购系统接收液位数据的接口"),
+    PRODUCE_YEWEI_GS907("GS-907"),
+    PRODUCE_YEWEI_GS905("GS-905"),
+    PRODUCE_YEWEI_GS904("GS-904"),
+    PRODUCE_YEWEI_F160C("F-160C"),
+    PRODUCE_YEWEI_A1("a1"),
+    PRODUCE_YEWEI_A2("a2"),
+    PRODUCE_YEWEI_A3("a3"),
+    PRODUCE_YEWEI_B("b");
     private final String typeName;
 
 }

+ 27 - 0
platform-dao/src/main/java/com/platform/dao/mapper/produce/ProduceDataMapper.java

@@ -0,0 +1,27 @@
+package com.platform.dao.mapper.produce;
+
+import com.platform.dao.config.MyMapper;
+import com.platform.dao.dto.produce.ProduceDataDTO;
+import com.platform.dao.entity.produce.ProduceData;
+import com.platform.dao.vo.query.produce.ProduceDataVO;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+
+/**
+ * @Description 生产日报字段 mapper
+ * @Author xc
+ * @Date 2024-12-16 23:16:05
+ * @Version Copyright (c) 2020,合肥乾元坤合科技有限公司 All rights reserved.
+ */
+@Component
+public interface ProduceDataMapper extends MyMapper<ProduceData> {
+    /**
+     * 分页查询
+     * @param dto
+     * @return
+     */
+    List<ProduceDataVO> selectList(ProduceDataDTO dto);
+
+}

+ 27 - 0
platform-dao/src/main/java/com/platform/dao/mapper/produce/ProduceLogMapper.java

@@ -0,0 +1,27 @@
+package com.platform.dao.mapper.produce;
+
+import com.platform.dao.config.MyMapper;
+import com.platform.dao.dto.produce.ProduceLogDTO;
+import com.platform.dao.entity.produce.ProduceLog;
+import com.platform.dao.vo.query.produce.ProduceLogVO;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+
+/**
+ * @Description 同步日志 mapper
+ * @Author xc
+ * @Date 2024-12-20 10:50:04
+ * @Version Copyright (c) 2020,合肥乾元坤合科技有限公司 All rights reserved.
+ */
+@Component
+public interface ProduceLogMapper extends MyMapper<ProduceLog> {
+    /**
+     * 分页查询
+     * @param dto
+     * @return
+     */
+    List<ProduceLogVO> selectList(ProduceLogDTO dto);
+
+}

+ 27 - 0
platform-dao/src/main/java/com/platform/dao/mapper/produce/ProduceRecordMapper.java

@@ -0,0 +1,27 @@
+package com.platform.dao.mapper.produce;
+
+import com.platform.dao.config.MyMapper;
+import com.platform.dao.dto.produce.ProduceRecordDTO;
+import com.platform.dao.entity.produce.ProduceRecord;
+import com.platform.dao.vo.query.produce.ProduceRecordVO;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+
+/**
+ * @Description 同步记录 mapper
+ * @Author xc
+ * @Date 2024-12-20 10:50:24
+ * @Version Copyright (c) 2020,合肥乾元坤合科技有限公司 All rights reserved.
+ */
+@Component
+public interface ProduceRecordMapper extends MyMapper<ProduceRecord> {
+    /**
+     * 分页查询
+     * @param dto
+     * @return
+     */
+    List<ProduceRecordVO> selectList(ProduceRecordDTO dto);
+
+}

+ 29 - 0
platform-dao/src/main/java/com/platform/dao/mapper/produce/ProduceReportMapper.java

@@ -0,0 +1,29 @@
+package com.platform.dao.mapper.produce;
+
+import com.platform.dao.config.MyMapper;
+import com.platform.dao.dto.produce.ProduceReportDTO;
+import com.platform.dao.entity.produce.ProduceReport;
+import com.platform.dao.vo.query.produce.ProduceReportVO;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+
+/**
+ * @Description 生产每日报表 mapper
+ * @Author xc
+ * @Date 2024-12-16 13:29:22
+ * @Version Copyright (c) 2020,合肥乾元坤合科技有限公司 All rights reserved.
+ */
+@Component
+public interface ProduceReportMapper extends MyMapper<ProduceReport> {
+    /**
+     * 分页查询
+     * @param dto
+     * @return
+     */
+    List<ProduceReportVO> selectList(ProduceReportDTO dto);
+
+    ProduceReportVO sumMonthYear(ProduceReportDTO record);
+
+}

+ 99 - 0
platform-dao/src/main/java/com/platform/dao/vo/export/produce/ExportProduceDataVO.java

@@ -0,0 +1,99 @@
+package com.platform.dao.vo.export.produce;
+
+import com.platform.office.annotation.Excel;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * @Description 生产日报字段导出VO
+ * @Author xc
+ * @Date 2024-12-16 23:16:05
+ * @Version Copyright (c) 2020,合肥乾元坤合科技有限公司 All rights reserved.
+ */
+@Data
+@Accessors(chain = true)
+public class ExportProduceDataVO implements Serializable {
+
+    /**
+   * id
+   */
+          @Excel(name = "id", orderNum = "1")
+      private String id;
+    
+    /**
+   * 编号
+   */
+          @Excel(name = "编号", orderNum = "2")
+      private String no;
+    
+    /**
+   * 名称
+   */
+          @Excel(name = "名称", orderNum = "3")
+      private String name;
+    
+    /**
+   * 单位
+   */
+          @Excel(name = "单位", orderNum = "4")
+      private String unit;
+    
+    /**
+   * 分组1
+   */
+          @Excel(name = "分组1", orderNum = "5")
+      private String lineOne;
+    
+    /**
+   * 分租2
+   */
+          @Excel(name = "分租2", orderNum = "6")
+      private String lineTwo;
+    
+    /**
+   * 排序
+   */
+          @Excel(name = "排序", orderNum = "7")
+      private Integer sort;
+    
+    /**
+   * 创建时间
+   */
+          @Excel(name = "创建时间", orderNum = "8")
+      private LocalDateTime createdTime;
+    
+    /**
+   * 创建人ID
+   */
+          @Excel(name = "创建人ID", orderNum = "9")
+      private String createdUserId;
+    
+    /**
+   * 创建人
+   */
+          @Excel(name = "创建人", orderNum = "10")
+      private String createdUserName;
+    
+    /**
+   * 更新时间
+   */
+          @Excel(name = "更新时间", orderNum = "11")
+      private LocalDateTime updateTime;
+    
+    /**
+   * 更新人ID
+   */
+          @Excel(name = "更新人ID", orderNum = "12")
+      private String updateUserId;
+    
+    /**
+   * 更新人
+   */
+          @Excel(name = "更新人", orderNum = "13")
+      private String updateUserName;
+    
+  
+}

+ 87 - 0
platform-dao/src/main/java/com/platform/dao/vo/export/produce/ExportProduceLogVO.java

@@ -0,0 +1,87 @@
+package com.platform.dao.vo.export.produce;
+
+import com.platform.office.annotation.Excel;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * @Description 同步日志导出VO
+ * @Author xc
+ * @Date 2024-12-20 10:50:04
+ * @Version Copyright (c) 2020,合肥乾元坤合科技有限公司 All rights reserved.
+ */
+@Data
+@Accessors(chain = true)
+public class ExportProduceLogVO implements Serializable {
+
+    /**
+   * id
+   */
+          @Excel(name = "id", orderNum = "1")
+      private String id;
+    
+    /**
+   * 类型
+   */
+          @Excel(name = "类型", orderNum = "2")
+      private Integer type;
+    
+    /**
+   * 状态
+   */
+          @Excel(name = "状态", orderNum = "3")
+      private Integer status;
+    
+    /**
+   * 创建时间
+   */
+          @Excel(name = "创建时间", orderNum = "4")
+      private LocalDateTime createdTime;
+    
+    /**
+   * 创建人ID
+   */
+          @Excel(name = "创建人ID", orderNum = "5")
+      private String createdUserId;
+    
+    /**
+   * 创建人
+   */
+          @Excel(name = "创建人", orderNum = "6")
+      private String createdUserName;
+    
+    /**
+   * 更新时间
+   */
+          @Excel(name = "更新时间", orderNum = "7")
+      private LocalDateTime updateTime;
+    
+    /**
+   * 更新人ID
+   */
+          @Excel(name = "更新人ID", orderNum = "8")
+      private String updateUserId;
+    
+    /**
+   * 更新人
+   */
+          @Excel(name = "更新人", orderNum = "9")
+      private String updateUserName;
+    
+    /**
+   * 开始时间
+   */
+          @Excel(name = "开始时间", orderNum = "10")
+      private LocalDateTime startTime;
+    
+    /**
+   * 结束时间
+   */
+          @Excel(name = "结束时间", orderNum = "11")
+      private LocalDateTime endTime;
+    
+  
+}

+ 119 - 0
platform-dao/src/main/java/com/platform/dao/vo/export/produce/ExportProduceRecordVO.java

@@ -0,0 +1,119 @@
+package com.platform.dao.vo.export.produce;
+
+import com.platform.office.annotation.Excel;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * @Description 同步记录导出VO
+ * @Author xc
+ * @Date 2024-12-20 10:50:24
+ * @Version Copyright (c) 2020,合肥乾元坤合科技有限公司 All rights reserved.
+ */
+@Data
+@Accessors(chain = true)
+public class ExportProduceRecordVO implements Serializable {
+
+    /**
+     * id
+     */
+    @Excel(name = "id", orderNum = "1")
+    private String id;
+
+    /**
+     * 单据类型
+     */
+    @Excel(name = "单据类型", orderNum = "2")
+    private Integer type;
+
+    /**
+     * 单据单号
+     */
+    @Excel(name = "单据单号", orderNum = "3")
+    private String no;
+
+    /**
+     * 产品编码
+     */
+    @Excel(name = "产品编码", orderNum = "4")
+    private String productNo;
+
+    /**
+     * 产品名称
+     */
+    @Excel(name = "产品名称", orderNum = "5")
+    private String productName;
+
+    /**
+     * 单据日期
+     */
+    @Excel(name = "单据日期", orderNum = "6")
+    private LocalDate date;
+
+    /**
+     * 数量
+     */
+    @Excel(name = "数量", orderNum = "7")
+    private BigDecimal num;
+
+    /**
+     * 关联单号
+     */
+    @Excel(name = "关联单号", orderNum = "8")
+    private String relationNo;
+
+    /**
+     * 单位
+     */
+    @Excel(name = "单位", orderNum = "9")
+    private String unit;
+
+    /**
+     * 状态
+     */
+    @Excel(name = "状态", orderNum = "10")
+    private Integer status;
+
+    /**
+     * 创建时间
+     */
+    @Excel(name = "创建时间", orderNum = "11")
+    private LocalDateTime createdTime;
+
+    /**
+     * 创建人ID
+     */
+    @Excel(name = "创建人ID", orderNum = "12")
+    private String createdUserId;
+
+    /**
+     * 创建人
+     */
+    @Excel(name = "创建人", orderNum = "13")
+    private String createdUserName;
+
+    /**
+     * 更新时间
+     */
+    @Excel(name = "更新时间", orderNum = "14")
+    private LocalDateTime updateTime;
+
+    /**
+     * 更新人ID
+     */
+    @Excel(name = "更新人ID", orderNum = "15")
+    private String updateUserId;
+
+    /**
+     * 更新人
+     */
+    @Excel(name = "更新人", orderNum = "16")
+    private String updateUserName;
+
+
+}

+ 129 - 0
platform-dao/src/main/java/com/platform/dao/vo/export/produce/ExportProduceReportDayVO.java

@@ -0,0 +1,129 @@
+package com.platform.dao.vo.export.produce;
+
+import com.platform.office.annotation.Excel;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+
+/**
+ * @Description 生产每日报表导出VO
+ * @Author xc
+ * @Date 2024-12-16 13:29:22
+ * @Version Copyright (c) 2020,合肥乾元坤合科技有限公司 All rights reserved.
+ */
+@Data
+@Accessors(chain = true)
+public class ExportProduceReportDayVO implements Serializable {
+
+    /**
+     * 日期
+     */
+    @Excel(name = "日期")
+    private LocalDate date;
+    /**
+     * gs902
+     */
+    @Excel(name = "gs902")
+    private String gs902;
+
+    /**
+     * gs903
+     */
+    @Excel(name = "gs903")
+    private String gs903;
+
+    /**
+     * gs903
+     */
+    @Excel(name = "gs904")
+    private String gs904;
+
+    /**
+     * gs905
+     */
+    @Excel(name = "gs905")
+    private String gs905;
+
+    /**
+     * gs907
+     */
+    @Excel(name = "gs907")
+    private String gs907;
+
+    /**
+     * f160C
+     */
+    @Excel(name = "f160C")
+    private String f160C;
+
+    /**
+     * CM47B
+     */
+    @Excel(name = "CM47B")
+    private String cM47B;
+
+    /**
+     * 氟化氢
+     */
+    @Excel(name = "氟化氢")
+    private String fhq;
+
+    /**
+     * 硫酰氯(合成)
+     */
+    @Excel(name = "硫酰氯(合成)")
+    private String lxl;
+
+    /**
+     * 液碱
+     */
+    @Excel(name = "液碱")
+    private String yj;
+
+    /**
+     * 盐酸
+     */
+    @Excel(name = "盐酸")
+    private String ys;
+
+    /**
+     * 氢氧化钠
+     */
+    @Excel(name = "氢氧化钠")
+    private String qyhn;
+
+    /**
+     * 电
+     */
+    @Excel(name = "电")
+    private String dian;
+
+    /**
+     * 天然气
+     */
+    @Excel(name = "天然气")
+    private String gas;
+
+    /**
+     * 蒸汽
+     */
+    @Excel(name = "蒸汽")
+    private String steam;
+
+    /**
+     * 河水
+     */
+    @Excel(name = "河水")
+    private String riverWater;
+
+    /**
+     * 污水
+     */
+    @Excel(name = "污水")
+    private String sewage;
+
+
+
+}

+ 48 - 0
platform-dao/src/main/java/com/platform/dao/vo/export/produce/ExportProduceReportTianVO.java

@@ -0,0 +1,48 @@
+package com.platform.dao.vo.export.produce;
+
+import com.platform.office.annotation.Excel;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+
+/**
+ * @Description 生产每日报表导出VO
+ * @Author xc
+ * @Date 2024-12-16 13:29:22
+ * @Version Copyright (c) 2020,合肥乾元坤合科技有限公司 All rights reserved.
+ */
+@Data
+@Accessors(chain = true)
+public class ExportProduceReportTianVO implements Serializable {
+
+    /**
+     * 日期
+     */
+    @Excel(name = "日期")
+    private LocalDate date;
+    /**
+     * 天然气
+     */
+    @Excel(name = "天然气")
+    private String gas;
+
+    /**
+     * 蒸汽
+     */
+    @Excel(name = "蒸汽")
+    private String steam;
+
+    /**
+     * 河水
+     */
+    @Excel(name = "河水")
+    private String riverWater;
+
+    /**
+     * 污水
+     */
+    @Excel(name = "污水")
+    private String sewage;
+}

+ 129 - 0
platform-dao/src/main/java/com/platform/dao/vo/export/produce/ExportProduceReportVO.java

@@ -0,0 +1,129 @@
+package com.platform.dao.vo.export.produce;
+
+import com.platform.office.annotation.Excel;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * @Description 生产每日报表导出VO
+ * @Author xc
+ * @Date 2024-12-16 13:29:22
+ * @Version Copyright (c) 2020,合肥乾元坤合科技有限公司 All rights reserved.
+ */
+@Data
+@Accessors(chain = true)
+public class ExportProduceReportVO implements Serializable {
+
+    /**
+     * id
+     */
+    @Excel(name = "id", orderNum = "1")
+    private String id;
+
+    /**
+     * 编号
+     */
+    @Excel(name = "编号", orderNum = "2")
+    private String no;
+
+    /**
+     * 名称
+     */
+    @Excel(name = "名称", orderNum = "3")
+    private String name;
+
+    /**
+     * 天
+     */
+    @Excel(name = "天", orderNum = "4")
+    private String day;
+
+    /**
+     * 月
+     */
+    @Excel(name = "月", orderNum = "5")
+    private String month;
+
+    /**
+     * 年
+     */
+    @Excel(name = "年", orderNum = "6")
+    private String year;
+
+    /**
+     * 平均
+     */
+    @Excel(name = "平均", orderNum = "7")
+    private String avg;
+
+    /**
+     * 单位
+     */
+    @Excel(name = "单位", orderNum = "8")
+    private String unit;
+
+    /**
+     * 分组1
+     */
+    @Excel(name = "分组1", orderNum = "9")
+    private String lineOne;
+
+    /**
+     * 分租2
+     */
+    @Excel(name = "分租2", orderNum = "10")
+    private String lineTwo;
+
+    /**
+     * 排序
+     */
+    @Excel(name = "排序", orderNum = "11")
+    private Integer sort;
+
+    /**
+     * 值
+     */
+    @Excel(name = "值", orderNum = "12")
+    private String value;
+
+    /**
+     * 创建时间
+     */
+    @Excel(name = "创建时间", orderNum = "13")
+    private LocalDateTime createdTime;
+
+    /**
+     * 创建人ID
+     */
+    @Excel(name = "创建人ID", orderNum = "14")
+    private String createdUserId;
+
+    /**
+     * 创建人
+     */
+    @Excel(name = "创建人", orderNum = "15")
+    private String createdUserName;
+
+    /**
+     * 更新时间
+     */
+    @Excel(name = "更新时间", orderNum = "16")
+    private LocalDateTime updateTime;
+
+    /**
+     * 更新人ID
+     */
+    @Excel(name = "更新人ID", orderNum = "17")
+    private String updateUserId;
+
+    /**
+     * 更新人
+     */
+    @Excel(name = "更新人", orderNum = "18")
+    private String updateUserName;
+
+
+}

+ 80 - 0
platform-dao/src/main/java/com/platform/dao/vo/query/produce/ProduceDataVO.java

@@ -0,0 +1,80 @@
+package com.platform.dao.vo.query.produce;
+
+import com.platform.common.bean.BaseVO;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * @Description 生产日报字段VO结果类
+ * @Author xc
+ * @Date 2024-12-16 23:16:05
+ * @Version Copyright (c) 2020,合肥乾元坤合科技有限公司 All rights reserved.
+ */
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = true)
+public class ProduceDataVO extends BaseVO implements Serializable {
+
+    /**
+     * 类型
+     */
+    private Integer type;
+    /**
+     * id
+     */
+    private String id;
+    /**
+     * 编号:不带前缀,前缀自动的
+     */
+    private String no;
+    /**
+     * 名称
+     */
+    private String name;
+    /**
+     * 单位
+     */
+    private String unit;
+    /**
+     * 分组1:物料名称
+     */
+    private String lineOne;
+    /**
+     * 分租2:前缀
+     */
+    private String lineTwo;
+    /**
+     * 排序
+     */
+    private Integer sort;
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createdTime;
+    /**
+     * 创建人ID
+     */
+    private String createdUserId;
+    /**
+     * 创建人
+     */
+    private String createdUserName;
+    /**
+     * 更新时间
+     */
+    private LocalDateTime updateTime;
+    /**
+     * 更新人ID
+     */
+    private String updateUserId;
+    /**
+     * 更新人
+     */
+    private String updateUserName;
+
+
+}

+ 69 - 0
platform-dao/src/main/java/com/platform/dao/vo/query/produce/ProduceLogVO.java

@@ -0,0 +1,69 @@
+package com.platform.dao.vo.query.produce;
+
+import com.platform.common.bean.BaseVO;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * @Description 同步日志VO结果类
+ * @Author xc
+ * @Date 2024-12-20 10:50:04
+ * @Version Copyright (c) 2020,合肥乾元坤合科技有限公司 All rights reserved.
+ */
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = true)
+public class ProduceLogVO extends BaseVO implements Serializable{
+
+    /**
+     * id
+     */
+        private String id;
+        /**
+     * 类型
+     */
+        private Integer type;
+        /**
+     * 状态
+     */
+        private Integer status;
+        /**
+     * 创建时间
+     */
+        private LocalDateTime createdTime;
+        /**
+     * 创建人ID
+     */
+        private String createdUserId;
+        /**
+     * 创建人
+     */
+        private String createdUserName;
+        /**
+     * 更新时间
+     */
+        private LocalDateTime updateTime;
+        /**
+     * 更新人ID
+     */
+        private String updateUserId;
+        /**
+     * 更新人
+     */
+        private String updateUserName;
+        /**
+     * 开始时间
+     */
+        private LocalDateTime startTime;
+        /**
+     * 结束时间
+     */
+        private LocalDateTime endTime;
+    
+
+
+}

+ 98 - 0
platform-dao/src/main/java/com/platform/dao/vo/query/produce/ProduceRecordVO.java

@@ -0,0 +1,98 @@
+package com.platform.dao.vo.query.produce;
+
+import com.platform.common.bean.BaseVO;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * @Description 同步记录VO结果类
+ * @Author xc
+ * @Date 2024-12-20 10:50:24
+ * @Version Copyright (c) 2020,合肥乾元坤合科技有限公司 All rights reserved.
+ */
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = true)
+public class ProduceRecordVO extends BaseVO implements Serializable {
+
+    /**
+     * id
+     */
+    private String id;
+    /**
+     * 单据类型
+     */
+    private Integer type;
+    /**
+     * 单据类型名称
+     */
+    private String typeName;
+    /**
+     * 单据单号
+     */
+    private String no;
+    /**
+     * 批次号
+     */
+    private String batchNo;
+    /**
+     * 产品编码
+     */
+    private String productNo;
+    /**
+     * 产品名称
+     */
+    private String productName;
+    /**
+     * 单据日期
+     */
+    private LocalDate date;
+    /**
+     * 数量
+     */
+    private BigDecimal num;
+    /**
+     * 关联单号
+     */
+    private String relationNo;
+    /**
+     * 单位
+     */
+    private String unit;
+    /**
+     * 状态
+     */
+    private Integer status;
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createdTime;
+    /**
+     * 创建人ID
+     */
+    private String createdUserId;
+    /**
+     * 创建人
+     */
+    private String createdUserName;
+    /**
+     * 更新时间
+     */
+    private LocalDateTime updateTime;
+    /**
+     * 更新人ID
+     */
+    private String updateUserId;
+    /**
+     * 更新人
+     */
+    private String updateUserName;
+
+
+}

+ 332 - 0
platform-dao/src/main/java/com/platform/dao/vo/query/produce/ProduceReportTianVO.java

@@ -0,0 +1,332 @@
+package com.platform.dao.vo.query.produce;
+
+import com.platform.common.bean.BaseVO;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+
+/**
+ * @Description 生产每日报表VO结果类-填报
+ * @Author xc
+ * @Date 2024-12-16 13:29:22
+ * @Version Copyright (c) 2020,合肥乾元坤合科技有限公司 All rights reserved.
+ */
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = true)
+public class ProduceReportTianVO extends BaseVO implements Serializable {
+
+    /**
+     * gs902
+     */
+    private String gs902;
+    /**
+     * gs902
+     */
+    private String gs902No;
+    /**
+     * gs902-reportId
+     */
+    private String gs902Id;
+    /**
+     * gs902-dataId
+     */
+    private String gs902DataId;
+
+
+    /**
+     * gs903
+     */
+    private String gs903;
+    /**
+     * gs903
+     */
+    private String gs903No;
+    /**
+     * gs903-reportId
+     */
+    private String gs903Id;
+    /**
+     * gs903-dataId
+     */
+    private String gs903DataId;
+
+    /**
+     * gs903
+     */
+    private String gs904;
+    /**
+     * gs904
+     */
+    private String gs904No;
+    /**
+     * gs904-reportId
+     */
+    private String gs904Id;
+    /**
+     * gs904-dataId
+     */
+    private String gs904DataId;
+
+    /**
+     * gs905
+     */
+    private String gs905;
+    /**
+     * gs905
+     */
+    private String gs905No;
+    /**
+     * gs905-reportId
+     */
+    private String gs905Id;
+    /**
+     * gs905-dataId
+     */
+    private String gs905DataId;
+
+    /**
+     * gs907
+     */
+    private String gs907;
+    /**
+     * gs907
+     */
+    private String gs907No;
+    /**
+     * gs907-reportId
+     */
+    private String gs907Id;
+    /**
+     * gs907-dataId
+     */
+    private String gs907DataId;
+
+
+    /**
+     * f160C
+     */
+    private String f160C;
+    /**
+     * f160C
+     */
+    private String f160CNo;
+    /**
+     * f160C-reportId
+     */
+    private String f160CId;
+    /**
+     * f160C-dataId
+     */
+    private String f160CDataId;
+
+    /**
+     * CM47B
+     */
+    private String cM47B;
+    /**
+     * cM47B
+     */
+    private String cM47BNo;
+    /**
+     * cM47B-reportId
+     */
+    private String cM47BId;
+    /**
+     * cM47B-dataId
+     */
+    private String cM47BDataId;
+
+
+    /**
+     * 氟化氢
+     */
+    private String fhq;
+    /**
+     * 氟化氢
+     */
+    private String fhqNo;
+    /**
+     * 氟化氢-reportId
+     */
+    private String fhqId;
+    /**
+     * 氟化氢-dataId
+     */
+    private String fhqDataId;
+
+
+    /**
+     * 硫酰氯(合成)
+     */
+    private String lxl;
+    /**
+     * 硫酰氯(合成)
+     */
+    private String lxlNo;
+    /**
+     * 硫酰氯(合成)-reportId
+     */
+    private String lxlId;
+    /**
+     * 硫酰氯(合成)-dataId
+     */
+    private String lxlDataId;
+
+    /**
+     * 液碱32
+     */
+    private String yj;
+    /**
+     * 液碱32
+     */
+    private String yjNo;
+    /**
+     * 液碱32-reportId
+     */
+    private String yjId;
+    /**
+     * 液碱32-dataId
+     */
+    private String yjDataId;
+
+    /**
+     * 盐酸
+     */
+    private String ys;
+    /**
+     * 盐酸
+     */
+    private String ysNo;
+    /**
+     * 盐酸-reportId
+     */
+    private String ysId;
+    /**
+     * 盐酸-dataId
+     */
+    private String ysDataId;
+
+    /**
+     * 氢氧化钠
+     */
+    private String qyhn;
+    /**
+     * 氢氧化钠
+     */
+    private String qyhnNo;
+    /**
+     * 氢氧化钠-reportId
+     */
+    private String qyhnId;
+    /**
+     * 氢氧化钠-dataId
+     */
+    private String qyhnDataId;
+
+    /**
+     * 电
+     */
+    private String dian;
+    /**
+     * 电
+     */
+    private String dianNo;
+    /**
+     * 电-reportId
+     */
+    private String dianId;
+    /**
+     * 电-dataId
+     */
+    private String dianDataId;
+
+    /**
+     * 天然气
+     */
+    private String gas;
+    /**
+     * 天然气
+     */
+    private String gasNo;
+    /**
+     * 天然气reportId
+     */
+    private String gasId;
+    /**
+     * 天然气reportId
+     */
+    private String gasDataId;
+
+    /**
+     * 蒸汽
+     */
+    private String steam;
+
+    /**
+     * 蒸汽
+     */
+    private String steamNo;
+    /**
+     * 蒸汽reportId
+     */
+    private String steamId;
+    /**
+     * 蒸汽reportId
+     */
+    private String steamDataId;
+    /**
+     * 河水
+     */
+    private String riverWater;
+    /**
+     * 河水
+     */
+    private String riverWaterNo;
+    /**
+     * 河水reportId
+     */
+    private String riverWaterId;
+    /**
+     * 河水reportId
+     */
+    private String riverWaterDataId;
+    /**
+     * 污水
+     */
+    private String sewage;
+    /**
+     * 污水
+     */
+    private String sewageNo;
+    /**
+     * 污水reportId
+     */
+    private String sewageId;
+    /**
+     * 污水reportId
+     */
+    private String sewageDataId;
+
+    /**
+     * 数据日期:年月日
+     */
+    private LocalDate date;
+    /**
+     * 天
+     */
+    private Integer day;
+    /**
+     * 月
+     */
+    private Integer month;
+    /**
+     * 年
+     */
+    private Integer year;
+
+
+}

+ 109 - 0
platform-dao/src/main/java/com/platform/dao/vo/query/produce/ProduceReportVO.java

@@ -0,0 +1,109 @@
+package com.platform.dao.vo.query.produce;
+
+import com.platform.common.bean.BaseVO;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * @Description 生产每日报表VO结果类
+ * @Author xc
+ * @Date 2024-12-16 13:29:22
+ * @Version Copyright (c) 2020,合肥乾元坤合科技有限公司 All rights reserved.
+ */
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = true)
+public class ProduceReportVO extends BaseVO implements Serializable {
+
+    /**
+     * id
+     */
+    private String id;
+    /**
+     * 填报字段
+     */
+    private String dataId;
+    /**
+     * 数据日期:年月日
+     */
+    private LocalDate date;
+    /**
+     * 编号
+     */
+    private String no;
+    /**
+     * 名称
+     */
+    private String name;
+    /**
+     * 天
+     */
+    private Integer day;
+    /**
+     * 月
+     */
+    private Integer month;
+    /**
+     * 年
+     */
+    private Integer year;
+    /**
+     * 平均
+     */
+    private String avg;
+    /**
+     * 单位
+     */
+    private String unit;
+    /**
+     * 分组1
+     */
+    private String lineOne;
+    /**
+     * 分租2
+     */
+    private String lineTwo;
+    /**
+     * 排序
+     */
+    private Integer sort;
+    /**
+     * 值
+     */
+    private String value;
+    /**
+     * 值
+     */
+    private String totalValue;
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createdTime;
+    /**
+     * 创建人ID
+     */
+    private String createdUserId;
+    /**
+     * 创建人
+     */
+    private String createdUserName;
+    /**
+     * 更新时间
+     */
+    private LocalDateTime updateTime;
+    /**
+     * 更新人ID
+     */
+    private String updateUserId;
+    /**
+     * 更新人
+     */
+    private String updateUserName;
+
+
+}

+ 104 - 0
platform-dao/src/main/resources/mapper/produce/ProduceDataMapper.xml

@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.platform.dao.mapper.produce.ProduceDataMapper">
+    <sql id="Base_Column_List">
+        data
+        .
+        id
+        ,
+                                     data.no,
+                                     data.name,
+                                     data.unit,
+                                     data.type,
+                                     data.line_one,
+                                     data.line_two,
+                                     data.sort,
+                                     data.created_time,
+                                     data.created_user_id,
+                                     data.created_user_name,
+                                     data.update_time,
+                                     data.update_user_id,
+                                     data.update_user_name
+    </sql>
+    <sql id="Ref_Column_List">
+        data
+        .
+        no
+        ,
+                                     data.name,
+                                     data.unit,
+                                     data.type,
+                                     data.line_one,
+                                     data.line_two,
+                                     data.sort,
+    </sql>
+    <sql id="List_Condition">
+        <if test="id != null and id != ''">
+            and data.id = #{id}
+        </if>
+        <if test="no != null and no != ''">
+            and data.no = #{no}
+        </if>
+        <if test="name != null and name != ''">
+            and data.name = #{name}
+        </if>
+        <if test="type != null">
+            and data.type = #{type}
+        </if>
+        <if test="unit != null and unit != ''">
+            and data.unit = #{unit}
+        </if>
+        <if test="lineOne != null and lineOne != ''">
+            and data.line_one = #{lineOne}
+        </if>
+        <if test="lineTwo != null and lineTwo != ''">
+            and data.line_two = #{lineTwo}
+        </if>
+        <if test="sort != null">
+            and data.sort = #{sort}
+        </if>
+        <if test="createdTimeStart != null">
+            and data.created_time <![CDATA[>=]]>; #{createdTimeStart}
+        </if>
+        <if test="createdTimeEnd != null">
+            and data.created_time <![CDATA[<=]]> #{createdTimeEnd}
+        </if>
+        <if test="createdTime != null">
+            and data.created_time = #{createdTime}
+        </if>
+        <if test="createdUserId != null and createdUserId != ''">
+            and data.created_user_id = #{createdUserId}
+        </if>
+        <if test="createdUserName != null and createdUserName != ''">
+            and data.created_user_name = #{createdUserName}
+        </if>
+        <if test="updateTimeStart != null">
+            and data.update_time <![CDATA[>=]]>; #{updateTimeStart}
+        </if>
+        <if test="updateTimeEnd != null">
+            and data.update_time <![CDATA[<=]]> #{updateTimeEnd}
+        </if>
+        <if test="updateTime != null">
+            and data.update_time = #{updateTime}
+        </if>
+        <if test="updateUserId != null and updateUserId != ''">
+            and data.update_user_id = #{updateUserId}
+        </if>
+        <if test="updateUserName != null and updateUserName != ''">
+            and data.update_user_name = #{updateUserName}
+        </if>
+        <if test="keyword != null and keyword != ''">
+            and (data.no like concat(concat('%',#{keyword}),'%')
+                or data.name like concat(concat('%',#{keyword}),'%')
+            )
+        </if>
+    </sql>
+    <select id="selectList" parameterType="com.platform.dao.dto.produce.ProduceDataDTO"
+            resultType="com.platform.dao.vo.query.produce.ProduceDataVO">
+        select data.*
+        from t_produce_data as data
+        <where>
+            <include refid="List_Condition"/>
+        </where>
+    </select>
+</mapper>

+ 92 - 0
platform-dao/src/main/resources/mapper/produce/ProduceLogMapper.xml

@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.platform.dao.mapper.produce.ProduceLogMapper">
+    <sql id="Base_Column_List">
+                             log.id,
+                                     log.type,
+                                     log.status,
+                                     log.created_time,
+                                     log.created_user_id,
+                                     log.created_user_name,
+                                     log.update_time,
+                                     log.update_user_id,
+                                     log.update_user_name,
+                                     log.start_time,
+                                     log.end_time
+                        </sql>
+    <sql id="Ref_Column_List">
+                                                                         log.type,
+                                     log.status,
+                                                                                                                                                                                                                                                                                                             log.start_time,
+                                     log.end_time
+                                </sql>
+    <sql id="List_Condition">
+                                    <if test="id != null and id != ''">
+                    and log.id = #{id}
+                </if>
+                                                <if test="type != null">
+                    and log.type = #{type}
+                </if>
+                                                <if test="status != null">
+                    and log.status = #{status}
+                </if>
+                                                <if test="createdTimeStart != null">
+                    and log.created_time <![CDATA[>=]]>; #{createdTimeStart}
+                </if>
+                <if test="createdTimeEnd != null">
+                    and log.created_time <![CDATA[<=]]> #{createdTimeEnd}
+                </if>
+                <if test="createdTime != null">
+                    and log.created_time = #{createdTime}
+                </if>
+                                                <if test="createdUserId != null and createdUserId != ''">
+                    and log.created_user_id = #{createdUserId}
+                </if>
+                                                <if test="createdUserName != null and createdUserName != ''">
+                    and log.created_user_name = #{createdUserName}
+                </if>
+                                                <if test="updateTimeStart != null">
+                    and log.update_time <![CDATA[>=]]>; #{updateTimeStart}
+                </if>
+                <if test="updateTimeEnd != null">
+                    and log.update_time <![CDATA[<=]]> #{updateTimeEnd}
+                </if>
+                <if test="updateTime != null">
+                    and log.update_time = #{updateTime}
+                </if>
+                                                <if test="updateUserId != null and updateUserId != ''">
+                    and log.update_user_id = #{updateUserId}
+                </if>
+                                                <if test="updateUserName != null and updateUserName != ''">
+                    and log.update_user_name = #{updateUserName}
+                </if>
+                                                <if test="startTimeStart != null">
+                    and log.start_time <![CDATA[>=]]>; #{startTimeStart}
+                </if>
+                <if test="startTimeEnd != null">
+                    and log.start_time <![CDATA[<=]]> #{startTimeEnd}
+                </if>
+                <if test="startTime != null">
+                    and log.start_time = #{startTime}
+                </if>
+                                                <if test="endTimeStart != null">
+                    and log.end_time <![CDATA[>=]]>; #{endTimeStart}
+                </if>
+                <if test="endTimeEnd != null">
+                    and log.end_time <![CDATA[<=]]> #{endTimeEnd}
+                </if>
+                <if test="endTime != null">
+                    and log.end_time = #{endTime}
+                </if>
+                            <if test="keyword != null and keyword != ''">
+            and log.id like concat(concat('%',#{keyword}),'%')
+        </if>
+    </sql>
+    <select id="selectList" parameterType="com.platform.dao.dto.produce.ProduceLogDTO" resultType="com.platform.dao.vo.query.produce.ProduceLogVO">
+        select log.*
+                                                                                                                                                                                                                                            from t_produce_log as log
+                                                                                                                                                                                                                                            <where>
+            <include refid="List_Condition" />
+        </where>
+    </select>
+</mapper>

+ 128 - 0
platform-dao/src/main/resources/mapper/produce/ProduceRecordMapper.xml

@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.platform.dao.mapper.produce.ProduceRecordMapper">
+    <sql id="Base_Column_List">
+        record
+        .
+        id
+        ,
+                                     record.type,
+                                     record.type_name,
+                                     record.no,
+                                     record.batch_no,
+                                     record.product_no,
+                                     record.product_name,
+                                     record.date,
+                                     record.num,
+                                     record.relation_no,
+                                     record.unit,
+                                     record.status,
+                                     record.created_time,
+                                     record.created_user_id,
+                                     record.created_user_name,
+                                     record.update_time,
+                                     record.update_user_id,
+                                     record.update_user_name
+    </sql>
+    <sql id="Ref_Column_List">
+        record
+        .
+        type
+        ,
+                                     record.type_name,
+                                     record.no,
+                                     record.batch_no,
+                                     record.product_no,
+                                     record.product_name,
+                                     record.date,
+                                     record.num,
+                                     record.relation_no,
+                                     record.unit,
+                                     record.status,
+    </sql>
+    <sql id="List_Condition">
+        <if test="id != null and id != ''">
+            and record.id = #{id}
+        </if>
+        <if test="type != null">
+            and record.type = #{type}
+        </if>
+        <if test="typeName != null">
+            and record.type_name = #{typeName}
+        </if>
+        <if test="no != null and no != ''">
+            and record.no = #{no}
+        </if>
+        <if test="batchNo != null and batchNo != ''">
+            and record.batch_no = #{batchNo}
+        </if>
+        <if test="productNo != null and productNo != ''">
+            and record.product_no = #{productNo}
+        </if>
+        <if test="productName != null and productName != ''">
+            and record.product_name = #{productName}
+        </if>
+        <if test="dateStart != null">
+            and record.date <![CDATA[>=]]>; #{dateStart}
+        </if>
+        <if test="dateEnd != null">
+            and record.date <![CDATA[<=]]> #{dateEnd}
+        </if>
+        <if test="date != null">
+            and record.date = #{date}
+        </if>
+        <if test="num != null">
+            and record.num = #{num}
+        </if>
+        <if test="relationNo != null and relationNo != ''">
+            and record.relation_no = #{relationNo}
+        </if>
+        <if test="unit != null and unit != ''">
+            and record.unit = #{unit}
+        </if>
+        <if test="status != null">
+            and record.status = #{status}
+        </if>
+        <if test="createdTimeStart != null">
+            and record.created_time <![CDATA[>=]]>; #{createdTimeStart}
+        </if>
+        <if test="createdTimeEnd != null">
+            and record.created_time <![CDATA[<=]]> #{createdTimeEnd}
+        </if>
+        <if test="createdTime != null">
+            and record.created_time = #{createdTime}
+        </if>
+        <if test="createdUserId != null and createdUserId != ''">
+            and record.created_user_id = #{createdUserId}
+        </if>
+        <if test="createdUserName != null and createdUserName != ''">
+            and record.created_user_name = #{createdUserName}
+        </if>
+        <if test="updateTimeStart != null">
+            and record.update_time <![CDATA[>=]]>; #{updateTimeStart}
+        </if>
+        <if test="updateTimeEnd != null">
+            and record.update_time <![CDATA[<=]]> #{updateTimeEnd}
+        </if>
+        <if test="updateTime != null">
+            and record.update_time = #{updateTime}
+        </if>
+        <if test="updateUserId != null and updateUserId != ''">
+            and record.update_user_id = #{updateUserId}
+        </if>
+        <if test="updateUserName != null and updateUserName != ''">
+            and record.update_user_name = #{updateUserName}
+        </if>
+        <if test="keyword != null and keyword != ''">
+            and record.no like concat(concat('%',#{keyword}),'%')
+        </if>
+    </sql>
+    <select id="selectList" parameterType="com.platform.dao.dto.produce.ProduceRecordDTO"
+            resultType="com.platform.dao.vo.query.produce.ProduceRecordVO">
+        select record.*
+        from t_produce_record as record
+        <where>
+            <include refid="List_Condition"/>
+        </where>
+    </select>
+</mapper>

+ 162 - 0
platform-dao/src/main/resources/mapper/produce/ProduceReportMapper.xml

@@ -0,0 +1,162 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.platform.dao.mapper.produce.ProduceReportMapper">
+    <sql id="Base_Column_List">
+        report
+        .
+        id
+        ,
+                                     report.data_id,
+                                     report.no,
+                                     report.name,
+                                     report.date,
+                                     report.day,
+                                     report.month,
+                                     report.year,
+                                     report.avg,
+                                     report.unit,
+                                     report.line_one,
+                                     report.line_two,
+                                     report.sort,
+                                     report.value,
+                                     report.created_time,
+                                     report.created_user_id,
+                                     report.created_user_name,
+                                     report.update_time,
+                                     report.update_user_id,
+                                     report.update_user_name
+    </sql>
+    <sql id="Ref_Column_List">
+        report
+        .
+        no
+        ,
+                                     report.data_id,
+                                     report.name,
+                                     report.date,
+                                     report.day,
+                                     report.month,
+                                     report.year,
+                                     report.avg,
+                                     report.unit,
+                                     report.line_one,
+                                     report.line_two,
+                                     report.sort,
+                                     report.value,
+    </sql>
+    <sql id="List_Condition">
+        <if test="id != null and id != ''">
+            and report.id = #{id}
+        </if>
+        <if test="date != null">
+            and report.date = #{date}
+        </if>
+        <if test="dateStart != null">
+            and report.date <![CDATA[>=]]> #{dateStart}
+        </if>
+        <if test="dateEnd != null">
+            and report.date <![CDATA[<=]]> #{dateEnd}
+        </if>
+        <if test="dataId != null and dataId != ''">
+            and report.data_id = #{dataId}
+        </if>
+        <if test="no != null and no != ''">
+            and report.no = #{no}
+        </if>
+        <if test="name != null and name != ''">
+            and report.name = #{name}
+        </if>
+        <if test="day != null and day != ''">
+            and report.day = #{day}
+        </if>
+        <if test="month != null and month != ''">
+            and report.month = #{month}
+        </if>
+        <if test="year != null and year != ''">
+            and report.year = #{year}
+        </if>
+        <if test="avg != null and avg != ''">
+            and report.avg = #{avg}
+        </if>
+        <if test="unit != null and unit != ''">
+            and report.unit = #{unit}
+        </if>
+        <if test="lineOne != null and lineOne != ''">
+            and report.line_one = #{lineOne}
+        </if>
+        <if test="lineTwo != null and lineTwo != ''">
+            and report.line_two = #{lineTwo}
+        </if>
+        <if test="sort != null">
+            and report.sort = #{sort}
+        </if>
+        <if test="value != null and value != ''">
+            and report.value = #{value}
+        </if>
+        <if test="createdTimeStart != null">
+            and report.created_time <![CDATA[>=]]>; #{createdTimeStart}
+        </if>
+        <if test="createdTimeEnd != null">
+            and report.created_time <![CDATA[<=]]> #{createdTimeEnd}
+        </if>
+        <if test="createdTime != null">
+            and report.created_time = #{createdTime}
+        </if>
+        <if test="createdUserId != null and createdUserId != ''">
+            and report.created_user_id = #{createdUserId}
+        </if>
+        <if test="createdUserName != null and createdUserName != ''">
+            and report.created_user_name = #{createdUserName}
+        </if>
+        <if test="updateTimeStart != null">
+            and report.update_time <![CDATA[>=]]>; #{updateTimeStart}
+        </if>
+        <if test="updateTimeEnd != null">
+            and report.update_time <![CDATA[<=]]> #{updateTimeEnd}
+        </if>
+        <if test="updateTime != null">
+            and report.update_time = #{updateTime}
+        </if>
+        <if test="updateUserId != null and updateUserId != ''">
+            and report.update_user_id = #{updateUserId}
+        </if>
+        <if test="updateUserName != null and updateUserName != ''">
+            and report.update_user_name = #{updateUserName}
+        </if>
+        <if test="keyword != null and keyword != ''">
+            and (report.no like concat(concat('%',#{keyword}),'%')
+            or report.name like concat(concat('%',#{keyword}),'%')
+            )
+        </if>
+        <if test="dataIds != null and dataIds.size > 0">
+            and report.data_id in
+            <foreach item="item" index="index" collection="dataIds" open="(" close=")" separator=",">
+                #{item}
+            </foreach>
+        </if>
+        <if test="noList != null and noList.size > 0">
+            and report.no in
+            <foreach item="item" index="index" collection="noList" open="(" close=")" separator=",">
+                #{item}
+            </foreach>
+        </if>
+    </sql>
+    <select id="selectList" parameterType="com.platform.dao.dto.produce.ProduceReportDTO"
+            resultType="com.platform.dao.vo.query.produce.ProduceReportVO">
+        select report.*
+        from t_produce_report as report
+        <where>
+            <include refid="List_Condition"/>
+        </where>
+    </select>
+
+    <select id="sumMonthYear" parameterType="com.platform.dao.dto.produce.ProduceReportDTO"
+            resultType="com.platform.dao.vo.query.produce.ProduceReportVO">
+        select SUM(value) as totalValue
+        from t_produce_report as report
+        <where>
+            <include refid="List_Condition"/>
+        </where>
+    </select>
+
+</mapper>

+ 123 - 0
platform-rest/src/main/java/com/platform/rest/controller/produce/ProduceController.java

@@ -0,0 +1,123 @@
+package com.platform.rest.controller.produce;
+
+import com.platform.common.util.R;
+import com.platform.common.validation.group.AddGroup;
+import com.platform.dao.dto.produce.ProduceRecordDTO;
+import com.platform.dao.dto.produce.ProduceReportDTO;
+import com.platform.dao.entity.produce.ProduceLog;
+import com.platform.dao.entity.produce.ProduceRecord;
+import com.platform.rest.log.annotation.SysLog;
+import com.platform.service.produce.ProduceLogService;
+import com.platform.service.produce.ProduceRecordService;
+import com.platform.service.produce.ProduceReportService;
+import lombok.AllArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * @Description 接受RPA同步来的数据 控制器
+ * @Author xc
+ * @Date 2024-12-20 10:50:04
+ * @Version Copyright (c) 2020,合肥乾元坤合科技有限公司 All rights reserved.
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/ignores/produce")
+public class ProduceController {
+
+    private final ProduceLogService produceLogService;
+    private final ProduceRecordService produceRecordService;
+    private final ProduceReportService produceReportService;
+
+    /**
+     * 新增记录
+     *
+     * @param produceLog 同步日志DTO
+     * @return R
+     */
+    @SysLog("新增同步日志")
+    @PostMapping("/log")
+    public R save(@Validated({AddGroup.class}) @RequestBody ProduceLog produceLog) {
+        return new R<>(produceLogService.saveIgnores(produceLog));
+    }
+
+    /**
+     * 修改记录,已完成状态
+     *
+     * @param id 同步日志DTO
+     * @return R
+     */
+    @SysLog("修改同步日志")
+    @PutMapping("/log/{id}")
+    public R update(@PathVariable("id") String id) {
+        produceLogService.finish(id);
+        return new R<>();
+    }
+
+    /**
+     * 新增记录
+     *
+     * @param produceRecord
+     * @return R
+     */
+    @SysLog("新增同步记录")
+    @PostMapping("/record")
+    public R saveRecord(@Validated({AddGroup.class}) @RequestBody ProduceRecord produceRecord) {
+        return new R<>(produceRecordService.saveIgnores(produceRecord));
+    }
+
+    /**
+     * 新增记录-str类型,后台自行解析
+     *
+     * @param produceRecordDTO
+     * @return R
+     */
+    @SysLog("新增同步记录")
+    @PostMapping("/record/str")
+    public R saveRecord(@Validated({AddGroup.class}) @RequestBody ProduceRecordDTO produceRecordDTO) {
+        return new R<>(produceRecordService.saveIgnoresStr(produceRecordDTO.getStr()));
+    }
+
+    /**
+     * 新增记录-str类型,后台自行解析
+     *
+     * @param produceRecordDTO
+     * @return R
+     */
+    @SysLog("新增现存量同步记录")
+    @PostMapping("/record/stock/str")
+    public R saveRecordStock(@Validated({AddGroup.class}) @RequestBody ProduceRecordDTO produceRecordDTO) {
+        return new R<>(produceRecordService.saveIgnoresStrStock(produceRecordDTO.getStr()));
+    }
+
+
+    /**
+     * 接收设备管理系统发送的-电力记录
+     *
+     * 1:将电量数据保存起来,保存到record里面
+     * @param produceReportDTO
+     * @return R
+     */
+    @SysLog("新增电量同步记录")
+    @PostMapping("/record/dian")
+    public R saveRecordDian(@Validated({AddGroup.class}) @RequestBody ProduceReportDTO produceReportDTO) {
+        produceReportService.generateDian(produceReportDTO.getDate(), produceReportDTO.getValue());
+        return new R<>("已处理");
+    }
+
+    /**
+     * 接收设备管理系统发送的-液位数据
+     * 1:将液位数据保存起来
+     *
+     * @param produceRecordDTO
+     * @return R
+     */
+    @SysLog("新增液位同步记录")
+    @PostMapping("/record/yewei")
+    public R saveRecordYewei(@Validated({AddGroup.class}) @RequestBody List<ProduceRecordDTO> produceRecordDTO) {
+        produceReportService.addYeweiRecord(produceRecordDTO);
+        return new R<>("已处理");
+    }
+}

+ 142 - 0
platform-rest/src/main/java/com/platform/rest/controller/produce/ProduceDataController.java

@@ -0,0 +1,142 @@
+package com.platform.rest.controller.produce;
+
+import com.platform.common.bean.AbstractPageResultBean;
+import com.platform.common.util.BeanConverterUtil;
+import com.platform.common.util.R;
+import com.platform.common.validation.group.AddGroup;
+import com.platform.common.validation.group.UpdateGroup;
+import com.platform.dao.dto.produce.ProduceDataDTO;
+import com.platform.dao.entity.produce.ProduceData;
+import com.platform.dao.util.ExcelUtil;
+import com.platform.dao.vo.export.produce.ExportProduceDataVO;
+import com.platform.dao.vo.query.produce.ProduceDataVO;
+import com.platform.rest.log.annotation.SysLog;
+import com.platform.service.produce.ProduceDataService;
+import lombok.AllArgsConstructor;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * @Description 生产日报字段 控制器
+ * @Author xc
+ * @Date 2024-12-16 23:16:05
+ * @Version Copyright (c) 2020,合肥乾元坤合科技有限公司 All rights reserved.
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/produce/datas")
+public class ProduceDataController {
+
+  private final  ProduceDataService produceDataService;
+
+  /**
+   * 通过id查询单条记录
+   *
+   * @param id 主键
+   * @return R
+   */
+  @GetMapping("/{id}")
+  public R<ProduceData> getById(@PathVariable("id") String id){
+      return new R<>(produceDataService.getModelById(id));
+  }
+
+  /**
+   * 新增记录
+   *
+   * @param produceDataDTO 生产日报字段DTO
+   * @return R
+   */
+  @SysLog("新增生产日报字段")
+  @PostMapping
+  @PreAuthorize("@pms.hasPermission('produce-datas-add')")
+  public R save(@Validated({AddGroup.class}) @RequestBody ProduceDataDTO produceDataDTO) {
+      return new R<>(produceDataService.saveModelByDTO(produceDataDTO));
+  }
+
+  /**
+   * 修改记录
+   *
+   * @param produceDataDTO 生产日报字段DTO
+   * @return R
+   */
+  @SysLog("修改生产日报字段")
+  @PutMapping("/{id}")
+  @PreAuthorize("@pms.hasPermission('produce-datas-edit')")
+  public R update(@PathVariable("id") String id, @Validated({UpdateGroup.class}) @RequestBody ProduceDataDTO produceDataDTO) {
+      produceDataService.modModelByDTO(produceDataDTO);
+      return new R<>();
+  }
+
+
+                                                                                
+  /**
+   * 通过id删除一条记录
+   *
+   * @param id 主键
+   * @return R
+   */
+  @SysLog("删除生产日报字段")
+  @DeleteMapping("/{id}")
+  @PreAuthorize("@pms.hasPermission('produce-datas-del')")
+  public R removeById(@PathVariable String id){
+    produceDataService.deleteByPrimaryKey(id);
+    return new R<>();
+  }
+
+    /**
+     * 批量记录
+     *
+     * @param ids 主键
+     * @return R
+     */
+    @SysLog("批量删除生产日报字段")
+    @DeleteMapping("")
+    @PreAuthorize("@pms.hasPermission('produce-datas-del')")
+    public R removeIds(@RequestBody List<String> ids){
+        produceDataService.batchDelete(ids);
+        return new R<>();
+    }
+
+  /**
+   * 获取分页
+   *
+   * @param pageNum 当前页码
+   * @param pageSize 每页条数
+   * @param produceDataDTO 生产日报字段DTO
+   * @return R
+   */
+  @GetMapping("/page")
+  public R<AbstractPageResultBean<ProduceDataVO>> query(ProduceDataDTO produceDataDTO, @RequestParam(defaultValue = "1") int pageNum, @RequestParam(defaultValue = "20") int pageSize) {
+      return new R<>(produceDataService.selectPageList(produceDataDTO, pageNum, pageSize));
+  }
+
+  /**
+   * 获取列表
+   *
+   * @param produceDataDTO 生产日报字段DTO
+   * @return R
+   */
+  @GetMapping("")
+  public R query(ProduceDataDTO produceDataDTO) {
+      return new R<>(produceDataService.getModelListByDTO(produceDataDTO));
+  }
+
+  /**
+     * 生产日报字段导出
+     *
+     * @param produceDataDTO 生产日报字段DTO
+     * @return R
+     */
+  @GetMapping("/export")
+  @SysLog("生产日报字段导出")
+  @PreAuthorize("@pms.hasPermission('produce-datas-export')")
+  public void export(HttpServletResponse response, ProduceDataDTO produceDataDTO) {
+    List<ProduceData> list = produceDataService.getModelListByDTO(produceDataDTO);
+    ExcelUtil.exportResponseDict(response, ExportProduceDataVO.class, BeanConverterUtil.copyListProperties(list, ExportProduceDataVO.class), "生产日报字段");
+  }
+
+}

+ 142 - 0
platform-rest/src/main/java/com/platform/rest/controller/produce/ProduceLogController.java

@@ -0,0 +1,142 @@
+package com.platform.rest.controller.produce;
+
+import com.platform.common.bean.AbstractPageResultBean;
+import com.platform.common.util.BeanConverterUtil;
+import com.platform.common.util.R;
+import com.platform.common.validation.group.AddGroup;
+import com.platform.common.validation.group.UpdateGroup;
+import com.platform.dao.dto.produce.ProduceLogDTO;
+import com.platform.dao.entity.produce.ProduceLog;
+import com.platform.dao.util.ExcelUtil;
+import com.platform.dao.vo.export.produce.ExportProduceLogVO;
+import com.platform.dao.vo.query.produce.ProduceLogVO;
+import com.platform.rest.log.annotation.SysLog;
+import com.platform.service.produce.ProduceLogService;
+import lombok.AllArgsConstructor;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * @Description 同步日志 控制器
+ * @Author xc
+ * @Date 2024-12-20 10:50:04
+ * @Version Copyright (c) 2020,合肥乾元坤合科技有限公司 All rights reserved.
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/produce/logs")
+public class ProduceLogController {
+
+  private final  ProduceLogService produceLogService;
+
+  /**
+   * 通过id查询单条记录
+   *
+   * @param id 主键
+   * @return R
+   */
+  @GetMapping("/{id}")
+  public R<ProduceLog> getById(@PathVariable("id") String id){
+      return new R<>(produceLogService.getModelById(id));
+  }
+
+  /**
+   * 新增记录
+   *
+   * @param produceLogDTO 同步日志DTO
+   * @return R
+   */
+  @SysLog("新增同步日志")
+  @PostMapping
+  @PreAuthorize("@pms.hasPermission('produce-logs-add')")
+  public R save(@Validated({AddGroup.class}) @RequestBody ProduceLogDTO produceLogDTO) {
+      return new R<>(produceLogService.saveModelByDTO(produceLogDTO));
+  }
+
+  /**
+   * 修改记录
+   *
+   * @param produceLogDTO 同步日志DTO
+   * @return R
+   */
+  @SysLog("修改同步日志")
+  @PutMapping("/{id}")
+  @PreAuthorize("@pms.hasPermission('produce-logs-edit')")
+  public R update(@PathVariable("id") String id, @Validated({UpdateGroup.class}) @RequestBody ProduceLogDTO produceLogDTO) {
+      produceLogService.modModelByDTO(produceLogDTO);
+      return new R<>();
+  }
+
+
+                                                                    
+  /**
+   * 通过id删除一条记录
+   *
+   * @param id 主键
+   * @return R
+   */
+  @SysLog("删除同步日志")
+  @DeleteMapping("/{id}")
+  @PreAuthorize("@pms.hasPermission('produce-logs-del')")
+  public R removeById(@PathVariable String id){
+    produceLogService.deleteByPrimaryKey(id);
+    return new R<>();
+  }
+
+    /**
+     * 批量记录
+     *
+     * @param ids 主键
+     * @return R
+     */
+    @SysLog("批量删除同步日志")
+    @DeleteMapping("")
+    @PreAuthorize("@pms.hasPermission('produce-logs-del')")
+    public R removeIds(@RequestBody List<String> ids){
+        produceLogService.batchDelete(ids);
+        return new R<>();
+    }
+
+  /**
+   * 获取分页
+   *
+   * @param pageNum 当前页码
+   * @param pageSize 每页条数
+   * @param produceLogDTO 同步日志DTO
+   * @return R
+   */
+  @GetMapping("/page")
+  public R<AbstractPageResultBean<ProduceLogVO>> query(ProduceLogDTO produceLogDTO, @RequestParam(defaultValue = "1") int pageNum, @RequestParam(defaultValue = "20") int pageSize) {
+      return new R<>(produceLogService.selectPageList(produceLogDTO, pageNum, pageSize));
+  }
+
+  /**
+   * 获取列表
+   *
+   * @param produceLogDTO 同步日志DTO
+   * @return R
+   */
+  @GetMapping("")
+  public R query(ProduceLogDTO produceLogDTO) {
+      return new R<>(produceLogService.getModelListByDTO(produceLogDTO));
+  }
+
+  /**
+     * 同步日志导出
+     *
+     * @param produceLogDTO 同步日志DTO
+     * @return R
+     */
+  @GetMapping("/export")
+  @SysLog("同步日志导出")
+  @PreAuthorize("@pms.hasPermission('produce-logs-export')")
+  public void export(HttpServletResponse response, ProduceLogDTO produceLogDTO) {
+    List<ProduceLog> list = produceLogService.getModelListByDTO(produceLogDTO);
+    ExcelUtil.exportResponseDict(response, ExportProduceLogVO.class, BeanConverterUtil.copyListProperties(list, ExportProduceLogVO.class), "同步日志");
+  }
+
+}

+ 142 - 0
platform-rest/src/main/java/com/platform/rest/controller/produce/ProduceRecordController.java

@@ -0,0 +1,142 @@
+package com.platform.rest.controller.produce;
+
+import com.platform.common.bean.AbstractPageResultBean;
+import com.platform.common.util.BeanConverterUtil;
+import com.platform.common.util.R;
+import com.platform.common.validation.group.AddGroup;
+import com.platform.common.validation.group.UpdateGroup;
+import com.platform.dao.dto.produce.ProduceRecordDTO;
+import com.platform.dao.entity.produce.ProduceRecord;
+import com.platform.dao.util.ExcelUtil;
+import com.platform.dao.vo.export.produce.ExportProduceRecordVO;
+import com.platform.dao.vo.query.produce.ProduceRecordVO;
+import com.platform.rest.log.annotation.SysLog;
+import com.platform.service.produce.ProduceRecordService;
+import lombok.AllArgsConstructor;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * @Description 同步记录 控制器
+ * @Author xc
+ * @Date 2024-12-20 10:50:24
+ * @Version Copyright (c) 2020,合肥乾元坤合科技有限公司 All rights reserved.
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/produce/records")
+public class ProduceRecordController {
+
+  private final  ProduceRecordService produceRecordService;
+
+  /**
+   * 通过id查询单条记录
+   *
+   * @param id 主键
+   * @return R
+   */
+  @GetMapping("/{id}")
+  public R<ProduceRecord> getById(@PathVariable("id") String id){
+      return new R<>(produceRecordService.getModelById(id));
+  }
+
+  /**
+   * 新增记录
+   *
+   * @param produceRecordDTO 同步记录DTO
+   * @return R
+   */
+  @SysLog("新增同步记录")
+  @PostMapping
+  @PreAuthorize("@pms.hasPermission('produce-records-add')")
+  public R save(@Validated({AddGroup.class}) @RequestBody ProduceRecordDTO produceRecordDTO) {
+      return new R<>(produceRecordService.saveModelByDTO(produceRecordDTO));
+  }
+
+  /**
+   * 修改记录
+   *
+   * @param produceRecordDTO 同步记录DTO
+   * @return R
+   */
+  @SysLog("修改同步记录")
+  @PutMapping("/{id}")
+  @PreAuthorize("@pms.hasPermission('produce-records-edit')")
+  public R update(@PathVariable("id") String id, @Validated({UpdateGroup.class}) @RequestBody ProduceRecordDTO produceRecordDTO) {
+      produceRecordService.modModelByDTO(produceRecordDTO);
+      return new R<>();
+  }
+
+
+                                                                                                  
+  /**
+   * 通过id删除一条记录
+   *
+   * @param id 主键
+   * @return R
+   */
+  @SysLog("删除同步记录")
+  @DeleteMapping("/{id}")
+  @PreAuthorize("@pms.hasPermission('produce-records-del')")
+  public R removeById(@PathVariable String id){
+    produceRecordService.deleteByPrimaryKey(id);
+    return new R<>();
+  }
+
+    /**
+     * 批量记录
+     *
+     * @param ids 主键
+     * @return R
+     */
+    @SysLog("批量删除同步记录")
+    @DeleteMapping("")
+    @PreAuthorize("@pms.hasPermission('produce-records-del')")
+    public R removeIds(@RequestBody List<String> ids){
+        produceRecordService.batchDelete(ids);
+        return new R<>();
+    }
+
+  /**
+   * 获取分页
+   *
+   * @param pageNum 当前页码
+   * @param pageSize 每页条数
+   * @param produceRecordDTO 同步记录DTO
+   * @return R
+   */
+  @GetMapping("/page")
+  public R<AbstractPageResultBean<ProduceRecordVO>> query(ProduceRecordDTO produceRecordDTO, @RequestParam(defaultValue = "1") int pageNum, @RequestParam(defaultValue = "20") int pageSize) {
+      return new R<>(produceRecordService.selectPageList(produceRecordDTO, pageNum, pageSize));
+  }
+
+  /**
+   * 获取列表
+   *
+   * @param produceRecordDTO 同步记录DTO
+   * @return R
+   */
+  @GetMapping("")
+  public R query(ProduceRecordDTO produceRecordDTO) {
+      return new R<>(produceRecordService.getModelListByDTO(produceRecordDTO));
+  }
+
+  /**
+     * 同步记录导出
+     *
+     * @param produceRecordDTO 同步记录DTO
+     * @return R
+     */
+  @GetMapping("/export")
+  @SysLog("同步记录导出")
+  @PreAuthorize("@pms.hasPermission('produce-records-export')")
+  public void export(HttpServletResponse response, ProduceRecordDTO produceRecordDTO) {
+    List<ProduceRecord> list = produceRecordService.getModelListByDTO(produceRecordDTO);
+    ExcelUtil.exportResponseDict(response, ExportProduceRecordVO.class, BeanConverterUtil.copyListProperties(list, ExportProduceRecordVO.class), "同步记录");
+  }
+
+}

+ 221 - 0
platform-rest/src/main/java/com/platform/rest/controller/produce/ProduceReportController.java

@@ -0,0 +1,221 @@
+package com.platform.rest.controller.produce;
+
+import com.platform.common.bean.AbstractPageResultBean;
+import com.platform.common.util.BeanConverterUtil;
+import com.platform.common.util.R;
+import com.platform.common.validation.group.AddGroup;
+import com.platform.common.validation.group.UpdateGroup;
+import com.platform.dao.dto.produce.ProduceReportDTO;
+import com.platform.dao.entity.produce.ProduceReport;
+import com.platform.dao.util.ExcelUtil;
+import com.platform.dao.vo.export.produce.ExportProduceReportDayVO;
+import com.platform.dao.vo.export.produce.ExportProduceReportTianVO;
+import com.platform.dao.vo.export.produce.ExportProduceReportVO;
+import com.platform.dao.vo.query.produce.ProduceReportTianVO;
+import com.platform.dao.vo.query.produce.ProduceReportVO;
+import com.platform.rest.log.annotation.SysLog;
+import com.platform.service.produce.ProduceReportService;
+import lombok.AllArgsConstructor;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * @Description 生产每日报表 控制器
+ * @Author xc
+ * @Date 2024-12-16 13:29:22
+ * @Version Copyright (c) 2020,合肥乾元坤合科技有限公司 All rights reserved.
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/produce/reports")
+public class ProduceReportController {
+
+    private final ProduceReportService produceReportService;
+
+    /**
+     * 通过id查询单条记录
+     *
+     * @param id 主键
+     * @return R
+     */
+    @GetMapping("/{id}")
+    public R<ProduceReport> getById(@PathVariable("id") String id) {
+        return new R<>(produceReportService.getModelById(id));
+    }
+
+    /**
+     * 生产指定日期报表
+     *
+     * @param produceReportDTO 生产每日报表DTO
+     * @return R
+     */
+    @PostMapping("/generate")
+    @SysLog("生产指定日期报表")
+    @PreAuthorize("@pms.hasPermission('produce-reports-export')")
+    public R generate(@RequestBody ProduceReportDTO produceReportDTO) {
+        produceReportService.generate(produceReportDTO.getDate());
+        return new R("生成中,请稍后查看");
+    }
+
+    /**
+     * 新增记录
+     *
+     * @param produceReportDTO 生产每日报表DTO
+     * @return R
+     */
+    @SysLog("新增生产每日报表")
+    @PostMapping
+    @PreAuthorize("@pms.hasPermission('produce-reports-add')")
+    public R save(@Validated({AddGroup.class}) @RequestBody ProduceReportDTO produceReportDTO) {
+        return new R<>(produceReportService.saveModelByDTO(produceReportDTO));
+    }
+
+    /**
+     * 修改记录
+     *
+     * @param produceReportDTO 生产每日报表DTO
+     * @return R
+     */
+    @SysLog("修改生产每日报表")
+    @PutMapping("/{id}")
+    @PreAuthorize("@pms.hasPermission('produce-reports-edit')")
+    public R update(@PathVariable("id") String id, @Validated({UpdateGroup.class}) @RequestBody ProduceReportDTO produceReportDTO) {
+        produceReportService.modModelByDTO(produceReportDTO);
+        return new R<>();
+    }
+
+    /**
+     * 通过id删除一条记录
+     *
+     * @param id 主键
+     * @return R
+     */
+    @SysLog("删除生产每日报表")
+    @DeleteMapping("/{id}")
+    @PreAuthorize("@pms.hasPermission('produce-reports-del')")
+    public R removeById(@PathVariable String id) {
+        produceReportService.deleteByPrimaryKey(id);
+        return new R<>();
+    }
+
+    /**
+     * 批量记录
+     *
+     * @param ids 主键
+     * @return R
+     */
+    @SysLog("批量删除生产每日报表")
+    @DeleteMapping("")
+    @PreAuthorize("@pms.hasPermission('produce-reports-del')")
+    public R removeIds(@RequestBody List<String> ids) {
+        produceReportService.batchDelete(ids);
+        return new R<>();
+    }
+
+    /**
+     * 获取分页
+     *
+     * @param pageNum          当前页码
+     * @param pageSize         每页条数
+     * @param produceReportDTO 生产每日报表DTO
+     * @return R
+     */
+    @GetMapping("/page")
+    public R<AbstractPageResultBean<ProduceReportVO>> query(ProduceReportDTO produceReportDTO, @RequestParam(defaultValue = "1") int pageNum, @RequestParam(defaultValue = "20") int pageSize) {
+        return new R<>(produceReportService.selectPageList(produceReportDTO, pageNum, pageSize));
+    }
+
+    /**
+     * 获取列表
+     *
+     * @param produceReportDTO 生产每日报表DTO
+     * @return R
+     */
+    @GetMapping("")
+    public R query(ProduceReportDTO produceReportDTO) {
+        return new R<>(produceReportService.selectList(produceReportDTO));
+    }
+
+    /**
+     * 生产每日报表导出
+     *
+     * @param produceReportDTO 生产每日报表DTO
+     * @return R
+     */
+    @GetMapping("/export")
+    @SysLog("生产每日报表导出")
+    @PreAuthorize("@pms.hasPermission('produce-reports-export')")
+    public void export(HttpServletResponse response, ProduceReportDTO produceReportDTO) {
+        List<ProduceReport> list = produceReportService.getModelListByDTO(produceReportDTO);
+        ExcelUtil.exportResponseDict(response, ExportProduceReportVO.class, BeanConverterUtil.copyListProperties(list, ExportProduceReportVO.class), "生产每日报表");
+    }
+
+    /**
+     * 获取手工填报列表
+     *
+     * @param produceReportDTO 生产每日报表DTO
+     * @return R
+     */
+    @GetMapping("/tian")
+    public R queryTian(ProduceReportDTO produceReportDTO) {
+        return new R<>(produceReportService.selectListByDayTian(produceReportDTO));
+    }
+
+    /**
+     * 获取列表-合在一起的,方便导出
+     *
+     * @param produceReportDTO 生产每日报表DTO
+     * @return R
+     */
+    @GetMapping("/day")
+    public R queryDay(ProduceReportDTO produceReportDTO) {
+        return new R<>(produceReportService.selectListByDay(produceReportDTO));
+    }
+
+    /**
+     * 生产每日报表导出
+     *
+     * @param produceReportDTO 生产每日报表DTO
+     * @return R
+     */
+    @GetMapping("/day/export")
+    @SysLog("生产每日报表导出")
+    @PreAuthorize("@pms.hasPermission('produce-reports-export')")
+    public void exportDay(HttpServletResponse response, ProduceReportDTO produceReportDTO) {
+        List<ProduceReportTianVO> list = produceReportService.selectListByDay(produceReportDTO);
+        ExcelUtil.exportResponseDict(response, ExportProduceReportDayVO.class, BeanConverterUtil.copyListProperties(list, ExportProduceReportDayVO.class), "生产日报表导出");
+    }
+
+
+    /**
+     * 修改记录
+     *
+     * @param produceReportTianVO 生产每日报表DTO
+     * @return R
+     */
+    @SysLog("修改生产每日报表")
+    @PutMapping("/tian/update")
+    @PreAuthorize("@pms.hasPermission('produce-reports-edit')")
+    public R updateTian(@Validated({UpdateGroup.class}) @RequestBody ProduceReportTianVO produceReportTianVO) {
+        produceReportService.updateByDay(produceReportTianVO);
+        return new R<>("已更新");
+    }
+
+    /**
+     * 获取手工填报列表导出
+     *
+     * @param produceReportDTO 生产每日报表DTO
+     * @return R
+     */
+    @GetMapping("/tian/export")
+    public void queryTianExport(HttpServletResponse response, ProduceReportDTO produceReportDTO) {
+        List<ProduceReportTianVO> list = produceReportService.selectListByDayTian(produceReportDTO);
+        ExcelUtil.exportResponseDict(response, ExportProduceReportTianVO.class, BeanConverterUtil.copyListProperties(list, ExportProduceReportTianVO.class), "生产日填报报表导出");
+    }
+
+
+}

+ 96 - 0
platform-rest/src/main/java/com/platform/rest/task/ProduceReportTask.java

@@ -0,0 +1,96 @@
+package com.platform.rest.task;
+
+import com.platform.dao.enums.SysConfigEnum;
+import com.platform.service.produce.ProduceReportService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 生产报表每日统计:每天凌晨3点统计,
+ * 1:用友同步:23点
+ * 2:电量:第二天凌晨1点
+ * 3:液位,23点半
+ */
+@Slf4j
+@Component("produceReportTask")
+public class ProduceReportTask {
+
+    @Resource
+    private ProduceReportService produceReportService;
+
+    /**
+     * 生成前一天的数据
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public void generate() {
+        log.info("开始-计算生产报表");
+        produceReportService.generate(LocalDate.now().plusDays(-1));
+        log.info("结束-计算生产报表");
+    }
+
+
+    /**
+     * 生成前一天的液位数据,每天晚上:2点开始
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public void generateYeweiReport() {
+        try {
+            log.info("开始-计算液位");
+            LocalDate now = LocalDate.now().plusDays(-1);
+            produceReportService.generateYeweiReport(now, "GS-907", SysConfigEnum.PRODUCE_YEWEI_GS907.name());
+            produceReportService.generateYeweiReport(now, "GS-905", SysConfigEnum.PRODUCE_YEWEI_GS905.name());
+            produceReportService.generateYeweiReport(now, "GS-904", SysConfigEnum.PRODUCE_YEWEI_GS904.name());
+            produceReportService.generateYeweiReport(now, "F-160C", SysConfigEnum.PRODUCE_YEWEI_F160C.name());
+            BigDecimal a1 = produceReportService.generateYeweiReport(now, "a1", SysConfigEnum.PRODUCE_YEWEI_A1.name());
+            BigDecimal a2 = produceReportService.generateYeweiReport(now, "a2", SysConfigEnum.PRODUCE_YEWEI_A2.name());
+            BigDecimal a3 = produceReportService.generateYeweiReport(now, "a3", SysConfigEnum.PRODUCE_YEWEI_A3.name());
+            produceReportService.generateYeweiReport(now, "b", SysConfigEnum.PRODUCE_YEWEI_B.name());
+
+            // 计算total总数据((a1+a2)*0.58+a3)/2
+            Map<String, Double> param = new HashMap<>();
+            param.put("a1", a1.doubleValue());
+            param.put("a2", a2.doubleValue());
+            param.put("a3", a3.doubleValue());
+            produceReportService.generateYeweiTotalReport(now, param);
+            log.info("结束-计算液位");
+        } catch (Exception e) {
+            e.printStackTrace();
+            log.error("液位定时任务出错");
+        }
+    }
+
+    public static void main(String[] args) throws InterruptedException {
+        /*String[] nos = new String[]{"600032", "100087", "100074", "100083", "100003", "100026", "100075", "100010", "100120", "100065", "100160", "100086", "电", "天然气", "蒸汽"};
+        String[] names = new String[]{"GS-902", "GS-903", "GS-904", "GS-905", "GS-907", "F-160C", "氢氧化钠", "CM47B", "硫酰氯", "氢氟酸", "液碱", "盐酸", "电", "天然气", "蒸汽"};
+        String prefix = "hy_";// 耗用量
+
+        for (int i = 0; i < 15; i++) {
+            System.out.println("INSERT INTO `t_produce_data`(`id`, `no`, `name`, `unit`, `line_one`, `line_two`, `sort`, `created_time`, `created_user_id`, `created_user_name`, `update_time`, `update_user_id`, `update_user_name`, `type`) VALUES " +
+                    "('" + IdGeneratorUtils.getObjectId() + "', '" + prefix + nos[i] + "', '当日单耗', '吨', '" + names[i] + "', '单位耗用量', 1, '2024-12-16 14:30:46', '1', '成信盛', '2024-12-27 16:46:24', '1', '成信盛', NULL);");
+            System.out.println("INSERT INTO `t_produce_data`(`id`, `no`, `name`, `unit`, `line_one`, `line_two`, `sort`, `created_time`, `created_user_id`, `created_user_name`, `update_time`, `update_user_id`, `update_user_name`, `type`) VALUES " +
+                    "('" + IdGeneratorUtils.getObjectId() + "', '" + prefix + nos[i] + "_month" + "', '月均单耗', '吨', '" + names[i] + "', '单位耗用量', 1, '2024-12-16 14:30:46', '1', '成信盛', '2024-12-27 16:46:24', '1', '成信盛', NULL);");
+            System.out.println("INSERT INTO `t_produce_data`(`id`, `no`, `name`, `unit`, `line_one`, `line_two`, `sort`, `created_time`, `created_user_id`, `created_user_name`, `update_time`, `update_user_id`, `update_user_name`, `type`) VALUES " +
+                    "('" + IdGeneratorUtils.getObjectId() + "', '" + prefix + nos[i] + "_stock" + "', '库存量', '吨', '" + names[i] + "', '单位耗用量', 1, '2024-12-16 14:30:46', '1', '成信盛', '2024-12-27 16:46:24', '1', '成信盛', NULL);");
+            System.out.println("INSERT INTO `t_produce_data`(`id`, `no`, `name`, `unit`, `line_one`, `line_two`, `sort`, `created_time`, `created_user_id`, `created_user_name`, `update_time`, `update_user_id`, `update_user_name`, `type`) VALUES " +
+                    "('" + IdGeneratorUtils.getObjectId() + "', '" + prefix + nos[i] + "_avg" + "', '可用天数', '吨', '" + names[i] + "', '单位耗用量', 1, '2024-12-16 14:30:46', '1', '成信盛', '2024-12-27 16:46:24', '1', '成信盛', NULL);");
+        }*/
+
+
+        LocalDate now = LocalDate.now();
+        Thread.sleep(2000);
+
+        LocalDate now2 = LocalDate.now();
+        if (now.equals(now2)) {
+            log.error("1");
+        } else {
+            log.error("2");
+        }
+    }
+}

+ 62 - 0
platform-service/src/main/java/com/platform/service/produce/ProduceDataService.java

@@ -0,0 +1,62 @@
+package com.platform.service.produce;
+
+import com.platform.common.bean.AbstractPageResultBean;
+import com.platform.dao.dto.produce.ProduceDataDTO;
+import com.platform.dao.entity.produce.ProduceData;
+import com.platform.dao.vo.query.produce.ProduceDataVO;
+import com.platform.service.base.IBaseService;
+
+import java.util.List;
+
+/**
+ * @Description 生产日报字段 service
+ * @Author xc
+ * @Date 2024-12-16 23:16:05
+ * @Version Copyright (c) 2020,合肥乾元坤合科技有限公司 All rights reserved.
+ */
+public interface ProduceDataService extends IBaseService<ProduceData, ProduceDataDTO> {
+
+    /**
+     * 批量删除
+     *
+     * @param ids :
+     * @return :
+     */
+    int batchDelete(List<String> ids);
+
+    /**
+     * 分页查询
+     *
+     * @param record
+     * @param pageNum
+     * @param pageSize
+     * @return
+     */
+    AbstractPageResultBean<ProduceDataVO> selectPageList(ProduceDataDTO record, int pageNum, int pageSize);
+
+    /**根据编号查询
+     *
+     * @param no
+     * @return
+     */
+    ProduceData selectByNo(String no);
+
+    /**根据前缀查询
+     *
+     * @param prefix
+     * @return
+     */
+    List<ProduceData> selectByPrefix(String prefix);
+
+    /**
+     * 查询需要手工填报的
+     * @return
+     */
+    List<ProduceData> selectByDayTianPrefix();
+
+    /**
+     * 查询需要手工填报的
+     * @return
+     */
+    List<ProduceData> selectByDayPrefix();
+}

+ 52 - 0
platform-service/src/main/java/com/platform/service/produce/ProduceLogService.java

@@ -0,0 +1,52 @@
+package com.platform.service.produce;
+
+import com.platform.common.bean.AbstractPageResultBean;
+import com.platform.dao.dto.produce.ProduceLogDTO;
+import com.platform.dao.entity.produce.ProduceLog;
+import com.platform.dao.vo.query.produce.ProduceLogVO;
+import com.platform.service.base.IBaseService;
+
+import java.util.List;
+
+/**
+ * @Description 同步日志 service
+ * @Author xc
+ * @Date 2024-12-20 10:50:04
+ * @Version Copyright (c) 2020,合肥乾元坤合科技有限公司 All rights reserved.
+ */
+public interface ProduceLogService extends IBaseService<ProduceLog, ProduceLogDTO> {
+
+    /**
+     * 批量删除
+     *
+     * @param ids :
+     * @return :
+     */
+    int batchDelete(List<String> ids);
+
+    /**
+     * 分页查询
+     *
+     * @param record
+     * @param pageNum
+     * @param pageSize
+     * @return
+     */
+    AbstractPageResultBean<ProduceLogVO> selectPageList(ProduceLogDTO record, int pageNum, int pageSize);
+
+    /**
+     * 保存日志
+     *
+     * @param record :
+     * @return :
+     */
+    ProduceLog saveIgnores(ProduceLog record);
+
+    /**
+     * 更新状态
+     *
+     * @param id :
+     * @return :
+     */
+    void finish(String id);
+}

+ 68 - 0
platform-service/src/main/java/com/platform/service/produce/ProduceRecordService.java

@@ -0,0 +1,68 @@
+package com.platform.service.produce;
+
+import com.platform.common.bean.AbstractPageResultBean;
+import com.platform.dao.dto.produce.ProduceRecordDTO;
+import com.platform.dao.entity.produce.ProduceRecord;
+import com.platform.dao.vo.query.produce.ProduceRecordVO;
+import com.platform.service.base.IBaseService;
+
+import java.util.List;
+
+/**
+ * @Description 同步记录 service
+ * @Author xc
+ * @Date 2024-12-20 10:50:24
+ * @Version Copyright (c) 2020,合肥乾元坤合科技有限公司 All rights reserved.
+ */
+public interface ProduceRecordService extends IBaseService<ProduceRecord, ProduceRecordDTO> {
+
+    /**
+     * 批量删除
+     *
+     * @param ids :
+     * @return :
+     */
+    int batchDelete(List<String> ids);
+
+    /**
+     * 分页查询
+     *
+     * @param record
+     * @param pageNum
+     * @param pageSize
+     * @return
+     */
+    AbstractPageResultBean<ProduceRecordVO> selectPageList(ProduceRecordDTO record, int pageNum, int pageSize);
+
+    /**
+     * 列表
+     *
+     * @param record
+     * @return
+     */
+    List<ProduceRecordVO> selectList(ProduceRecordDTO record);
+
+    /**
+     * 保存记录
+     *
+     * @param record :
+     * @return :
+     */
+    ProduceRecord saveIgnores(ProduceRecord record);
+
+    /**
+     * 保存记录
+     *
+     * @param str :
+     * @return :
+     */
+    ProduceRecord saveIgnoresStr(String str);
+
+    /**
+     * 现存量
+     *
+     * @param str :
+     * @return :
+     */
+    ProduceRecord saveIgnoresStrStock(String str);
+}

+ 95 - 0
platform-service/src/main/java/com/platform/service/produce/ProduceReportService.java

@@ -0,0 +1,95 @@
+package com.platform.service.produce;
+
+import com.platform.common.bean.AbstractPageResultBean;
+import com.platform.dao.dto.produce.ProduceRecordDTO;
+import com.platform.dao.dto.produce.ProduceReportDTO;
+import com.platform.dao.entity.produce.ProduceReport;
+import com.platform.dao.vo.query.produce.ProduceReportTianVO;
+import com.platform.dao.vo.query.produce.ProduceReportVO;
+import com.platform.service.base.IBaseService;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description 生产每日报表 service
+ * @Author xc
+ * @Date 2024-12-16 13:29:22
+ * @Version Copyright (c) 2020,合肥乾元坤合科技有限公司 All rights reserved.
+ */
+public interface ProduceReportService extends IBaseService<ProduceReport, ProduceReportDTO> {
+
+    /**
+     * 批量删除
+     *
+     * @param ids :
+     * @return :
+     */
+    int batchDelete(List<String> ids);
+
+    /**
+     * 分页查询
+     *
+     * @param record
+     * @param pageNum
+     * @param pageSize
+     * @return
+     */
+    AbstractPageResultBean<ProduceReportVO> selectPageList(ProduceReportDTO record, int pageNum, int pageSize);
+
+    /**
+     * 月累加
+     *
+     * @param record
+     * @return
+     */
+    ProduceReportVO sumMonthYear(ProduceReportDTO record);
+
+    /**
+     * 生成某日的数据
+     *
+     * @param date 生成日期
+     * @return
+     */
+    void generate(LocalDate date);
+
+    void generateDian(LocalDate date, String value);
+    BigDecimal generateYeweiReport(LocalDate date, String no, String configName);
+    void generateYeweiTotalReport(LocalDate date, Map<String, Double> param);
+    /**
+     * 获取某日的数据,可以传递其他参数
+     *
+     * @param record
+     * @return
+     */
+    List<ProduceReportVO> selectList(ProduceReportDTO record);
+
+    void addYeweiRecord(List<ProduceRecordDTO> produceRecordDTO);
+
+    /**
+     * 获取某个时间段的数据,某个天-某个天
+     *
+     * @param record
+     * @return
+     */
+    List<ProduceReportTianVO> selectListByDayTian(ProduceReportDTO record);
+
+    /**
+     * 获取某个时间段的数据,某个天-某个天
+     *
+     * @param record
+     * @return
+     */
+    List<ProduceReportTianVO> selectListByDay(ProduceReportDTO record);
+
+    /**
+     * 获取某个时间段的数据,某个天-某个天
+     *
+     * @param produceReportTianVO
+     * @return
+     */
+    void updateByDay(ProduceReportTianVO produceReportTianVO);
+
+}

+ 103 - 0
platform-service/src/main/java/com/platform/service/produce/impl/ProduceDataServiceImpl.java

@@ -0,0 +1,103 @@
+package com.platform.service.produce.impl;
+
+import com.github.pagehelper.PageHelper;
+import com.platform.common.bean.AbstractPageResultBean;
+import com.platform.dao.bean.MyPage;
+import com.platform.dao.dto.produce.ProduceDataDTO;
+import com.platform.dao.entity.produce.ProduceData;
+import com.platform.dao.mapper.produce.ProduceDataMapper;
+import com.platform.dao.vo.query.produce.ProduceDataVO;
+import com.platform.service.base.impl.BaseServiceImpl;
+import com.platform.service.produce.ProduceDataService;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+import tk.mybatis.mapper.weekend.Weekend;
+import tk.mybatis.mapper.weekend.WeekendCriteria;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * @Description 生产日报字段 service 实现类
+ * @Author xc
+ * @Date 2024-12-16 23:16:05
+ * @Version Copyright (c) 2020,合肥乾元坤合科技有限公司 All rights reserved.
+ */
+@AllArgsConstructor
+@Service("produceDataService")
+public class ProduceDataServiceImpl extends BaseServiceImpl<ProduceDataMapper, ProduceData, ProduceDataDTO> implements ProduceDataService {
+
+    @Override
+    public int batchDelete(List<String> ids) {
+        Weekend<ProduceData> weekend = new Weekend<>(ProduceData.class);
+        WeekendCriteria<ProduceData, Object> weekendCriteria = weekend.weekendCriteria();
+        weekendCriteria.andIn(ProduceData::getId, ids);
+        mapper.deleteByExample(weekend);
+        return 1;
+    }
+
+    @Override
+    public AbstractPageResultBean<ProduceDataVO> selectPageList(ProduceDataDTO record, int pageNum, int pageSize) {
+        PageHelper.startPage(pageNum, pageSize);
+        return new MyPage(mapper.selectList(record));
+    }
+
+    @Override
+    public ProduceData selectByNo(String no) {
+        Weekend<ProduceData> weekend = new Weekend<>(ProduceData.class);
+        WeekendCriteria<ProduceData, Object> weekendCriteria = weekend.weekendCriteria();
+        weekendCriteria.andEqualTo(ProduceData::getNo, no);
+        return mapper.selectOneByExample(weekend);
+    }
+
+    @Override
+    public List<ProduceData> selectByPrefix(String prefix){
+        Weekend<ProduceData> weekend = new Weekend<>(ProduceData.class);
+        WeekendCriteria<ProduceData, Object> weekendCriteria = weekend.weekendCriteria();
+        weekendCriteria.andLike(ProduceData::getNo, prefix + "%");;
+        return mapper.selectByExample(weekend);
+    }
+
+    // 天然气,蒸汽,河水,污水
+    @Override
+    public List<ProduceData> selectByDayTianPrefix(){
+        List<String> nos = Arrays.asList("dl_天然气_hy","dl_蒸汽_hy","dl_河水","dl_污水");
+        Weekend<ProduceData> weekend = new Weekend<>(ProduceData.class);
+        WeekendCriteria<ProduceData, Object> weekendCriteria = weekend.weekendCriteria();
+        weekendCriteria.andIn(ProduceData::getNo, nos);;
+        return mapper.selectByExample(weekend);
+    }
+
+    /**
+     * 主要原物料用量数:出库
+     * GS-902   600032
+     * GS-903   100087
+     * GS-904   100074
+     * GS-905   100083
+     * GS-907   100003
+     * F-160C   100026
+     * CM47B    100010
+     * 氟化氢      100065
+     * 硫酰氯(合成)  100120
+     * 液碱32%      100160
+     * 盐酸           100086
+     * 氢氧化钠(工业级片碱)  100075
+     */
+    // 加:天然气,蒸汽,河水,污水
+    @Override
+    public List<ProduceData> selectByDayPrefix(){
+        List<String> nos = Arrays.asList("ck_0600032","ck_0100087","ck_0100074","ck_0100083","ck_0100003","ck_0100026","ck_0100010","ck_0100065","ck_0100120",
+                "ck_0100160","ck_0100086","ck_0100075","dl_电","dl_天然气_hy","dl_蒸汽_hy","dl_河水","dl_污水");
+        Weekend<ProduceData> weekend = new Weekend<>(ProduceData.class);
+        WeekendCriteria<ProduceData, Object> weekendCriteria = weekend.weekendCriteria();
+        weekendCriteria.andIn(ProduceData::getNo, nos);;
+        return mapper.selectByExample(weekend);
+    }
+
+    @Override
+    public AbstractPageResultBean<ProduceData> selectPageInfo(ProduceDataDTO record, int pageNum, int pageSize) {
+        PageHelper.startPage(pageNum, pageSize);
+        return new MyPage(mapper.selectList(record));
+    }
+
+}

+ 74 - 0
platform-service/src/main/java/com/platform/service/produce/impl/ProduceLogServiceImpl.java

@@ -0,0 +1,74 @@
+package com.platform.service.produce.impl;
+
+import com.github.pagehelper.PageHelper;
+import com.platform.common.bean.AbstractPageResultBean;
+import com.platform.common.util.IdGeneratorUtils;
+import com.platform.dao.bean.MyPage;
+import com.platform.dao.dto.produce.ProduceLogDTO;
+import com.platform.dao.entity.produce.ProduceLog;
+import com.platform.dao.enums.YesNoEnum;
+import com.platform.dao.mapper.produce.ProduceLogMapper;
+import com.platform.dao.vo.query.produce.ProduceLogVO;
+import com.platform.service.base.impl.BaseServiceImpl;
+import com.platform.service.produce.ProduceLogService;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+import tk.mybatis.mapper.weekend.Weekend;
+import tk.mybatis.mapper.weekend.WeekendCriteria;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * @Description 同步日志 service 实现类
+ * @Author xc
+ * @Date 2024-12-20 10:50:04
+ * @Version Copyright (c) 2020,合肥乾元坤合科技有限公司 All rights reserved.
+ */
+@AllArgsConstructor
+@Service("produceLogService")
+public class ProduceLogServiceImpl extends BaseServiceImpl<ProduceLogMapper, ProduceLog, ProduceLogDTO> implements ProduceLogService {
+
+    @Override
+    public int batchDelete(List<String> ids) {
+        Weekend<ProduceLog> weekend = new Weekend<>(ProduceLog.class);
+        WeekendCriteria<ProduceLog, Object> weekendCriteria = weekend.weekendCriteria();
+        weekendCriteria.andIn(ProduceLog::getId, ids);
+        mapper.deleteByExample(weekend);
+        return 1;
+    }
+
+    @Override
+    public AbstractPageResultBean<ProduceLogVO> selectPageList(ProduceLogDTO record, int pageNum, int pageSize) {
+        PageHelper.startPage(pageNum, pageSize);
+        return new MyPage(mapper.selectList(record));
+    }
+
+    @Override
+    public AbstractPageResultBean<ProduceLog> selectPageInfo(ProduceLogDTO record, int pageNum, int pageSize) {
+        PageHelper.startPage(pageNum, pageSize);
+        return new MyPage(mapper.selectList(record));
+    }
+
+    @Override
+    public ProduceLog saveIgnores(ProduceLog record) {
+        record.setId(IdGeneratorUtils.getObjectId());
+        record.setCreatedTime(LocalDateTime.now());
+        record.setStatus(YesNoEnum.NO.getValue());
+        record.setStartTime(LocalDateTime.now());
+        mapper.insert(record);
+        return record;
+    }
+
+    @Override
+    public void finish(String id) {
+        ProduceLog produceLog = new ProduceLog();
+        produceLog.setId(id);
+        produceLog.setStatus(YesNoEnum.YES.getValue());
+        produceLog.setEndTime(LocalDateTime.now());
+        produceLog.setUpdateTime(LocalDateTime.now());
+        mapper.updateByPrimaryKeySelective(produceLog);
+    }
+
+
+}

+ 198 - 0
platform-service/src/main/java/com/platform/service/produce/impl/ProduceRecordServiceImpl.java

@@ -0,0 +1,198 @@
+package com.platform.service.produce.impl;
+
+import com.github.pagehelper.PageHelper;
+import com.platform.common.bean.AbstractPageResultBean;
+import com.platform.common.util.DateUtils;
+import com.platform.common.util.IdGeneratorUtils;
+import com.platform.common.util.StringUtils;
+import com.platform.dao.bean.MyPage;
+import com.platform.dao.dto.produce.ProduceRecordDTO;
+import com.platform.dao.entity.produce.ProduceRecord;
+import com.platform.dao.enums.ProduceRecordTypeEnum;
+import com.platform.dao.enums.YesNoEnum;
+import com.platform.dao.mapper.produce.ProduceRecordMapper;
+import com.platform.dao.vo.query.produce.ProduceRecordVO;
+import com.platform.service.base.impl.BaseServiceImpl;
+import com.platform.service.produce.ProduceRecordService;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import tk.mybatis.mapper.weekend.Weekend;
+import tk.mybatis.mapper.weekend.WeekendCriteria;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * @Description 同步记录 service 实现类
+ * @Author xc
+ * @Date 2024-12-20 10:50:24
+ * @Version Copyright (c) 2020,合肥乾元坤合科技有限公司 All rights reserved.
+ */
+@AllArgsConstructor
+@Service("produceRecordService")
+@Slf4j
+public class ProduceRecordServiceImpl extends BaseServiceImpl<ProduceRecordMapper, ProduceRecord, ProduceRecordDTO> implements ProduceRecordService {
+
+    @Override
+    public int batchDelete(List<String> ids) {
+        Weekend<ProduceRecord> weekend = new Weekend<>(ProduceRecord.class);
+        WeekendCriteria<ProduceRecord, Object> weekendCriteria = weekend.weekendCriteria();
+        weekendCriteria.andIn(ProduceRecord::getId, ids);
+        mapper.deleteByExample(weekend);
+        return 1;
+    }
+
+    @Override
+    public AbstractPageResultBean<ProduceRecordVO> selectPageList(ProduceRecordDTO record, int pageNum, int pageSize) {
+        PageHelper.startPage(pageNum, pageSize);
+        return new MyPage(mapper.selectList(record));
+    }
+
+    @Override
+    public List<ProduceRecordVO> selectList(ProduceRecordDTO record) {
+        return mapper.selectList(record);
+    }
+
+    @Override
+    public AbstractPageResultBean<ProduceRecord> selectPageInfo(ProduceRecordDTO record, int pageNum, int pageSize) {
+        PageHelper.startPage(pageNum, pageSize);
+        return new MyPage(mapper.selectList(record));
+    }
+
+    @Override
+    public ProduceRecord saveIgnores(ProduceRecord record) {
+        record.setId(IdGeneratorUtils.getObjectId());
+        record.setCreatedTime(LocalDateTime.now());
+        record.setStatus(YesNoEnum.NO.getValue());
+        mapper.insert(record);
+        return record;
+    }
+
+    /**
+     * 如果有重复的,说明已经写入了,不需要
+     * 因为编号会重复,所以只能通过日期来判断,如果当前日期已经有了?
+     * data2 = { 'no': 0, 'batch_no': 1, 'type_name': 1, 'date': 0, 'productNo': 0, 'productName': 0,  'num': 0, 'unit': 0, 'relationNo': 0}
+     *
+     * @param str
+     * @return
+     */
+    @Override
+    public ProduceRecord saveIgnoresStr(String str) {
+        ProduceRecord record = new ProduceRecord();
+        String[] strs = str.split(",");
+        if (strs[0].trim().isEmpty()) {
+            return null;
+        }
+        record.setNo(strs[0].trim());
+        record.setBatchNo(strs[1].trim());
+        record.setTypeName(strs[2].trim());
+        record.setType(typeNameToType(record.getTypeName()));
+        record.setDate(DateUtils.strToLocalDate(strs[3].trim(), DateUtils.PATTERN_YMD));
+        record.setProductNo(strs[4].trim());
+        record.setProductName(strs[5].trim());
+        record.setNum(new BigDecimal(strs[6].trim()));
+        record.setUnit(strs[7].trim());
+        if (strs.length > 8) {
+            record.setRelationNo(strs[8].trim());
+        } else {
+            record.setRelationNo("");
+        }
+        record.setId(IdGeneratorUtils.getObjectId());
+        record.setCreatedTime(LocalDateTime.now());
+        record.setStatus(YesNoEnum.NO.getValue());
+        mapper.insert(record);
+        return record;
+    }
+
+    /**
+     * 四个数据的库存
+     * 977:0300027
+     * 锂渣:0300083
+     * 氟化钠:0300073
+     * <p>
+     * <p>
+     * 氯化钠:0300094--,这个手填
+     * <p>
+     * 因为编号会重复,所以只能通过日期来判断,如果当前日期已经有了?
+     * data2 = { 'no': 0, 'batch_no': 1, 'type_name': 1, 'date': 0, 'productNo': 0, 'productName': 0,  'num': 0, 'unit': 0, 'relationNo': 0}
+     * <p>
+     * 注意:前端需要处理数字的逗号,把逗号去掉才行
+     * python: text = text.replace(",", "")
+     *
+     * @param str
+     * @return
+     */
+    @Override
+    public ProduceRecord saveIgnoresStrStock(String str) {
+        log.info("str: " + str);
+        ProduceRecord record = new ProduceRecord();
+        String[] strs = str.split(",");
+        if (strs[0].trim().isEmpty()) {
+            return null;
+        }
+
+        // 如果不是 这三个数据,就返回,不写入
+        if (!"0300027".equals(strs[0].trim()) && !"0300083".equals(strs[0].trim()) && !"0300073".equals(strs[0].trim())) {
+            return null;
+        }
+        record.setProductNo(strs[0].trim());
+        record.setProductName(productNoToName(record.getProductNo()));
+        if (strs.length == 1 || StringUtils.isBlank(strs[1])) {
+            record.setNum(new BigDecimal(0));
+        } else {
+            record.setNum(new BigDecimal(strs[1].trim()));
+        }
+        record.setTypeName("现存量");
+        record.setType(ProduceRecordTypeEnum.XCL.getValue());
+        record.setId(IdGeneratorUtils.getObjectId());
+        record.setCreatedTime(LocalDateTime.now());
+        record.setStatus(YesNoEnum.NO.getValue());
+        record.setDate(LocalDate.now());
+        mapper.insert(record);
+        return record;
+    }
+
+    /**
+     * 文字装换为类型
+     *
+     * @param typeName
+     * @return
+     */
+    public Integer typeNameToType(String typeName) {
+        if ("产成品入库".equals(typeName.trim())) {
+            return ProduceRecordTypeEnum.CCP_RK.getValue();
+        } else if ("半成品入库".equals(typeName.trim())) {
+            return ProduceRecordTypeEnum.BCP_RK.getValue();
+        } else if ("材料出库".equals(typeName.trim())) {
+            return ProduceRecordTypeEnum.CL_CK.getValue();
+        } else if ("非关联-产品销售出库".equals(typeName.trim())) {
+            return ProduceRecordTypeEnum.XS_CK.getValue();
+        } else if ("采购入库".equals(typeName.trim())) {
+            return ProduceRecordTypeEnum.CG_RK.getValue();
+        } else {
+            return 0;
+        }
+    }
+
+    /**
+     * 存货编码转存货名称
+     *
+     * @param productNo
+     * @return
+     */
+    public String productNoToName(String productNo) {
+        if ("0300027".equals(productNo.trim())) {
+            return "977";
+        } else if ("0300083".equals(productNo.trim())) {
+            return "锂渣";
+        } else if ("0300073".equals(productNo.trim())) {
+            return "氟化钠";
+        } else {
+            return "无";
+        }
+    }
+
+}

+ 1416 - 0
platform-service/src/main/java/com/platform/service/produce/impl/ProduceReportServiceImpl.java

@@ -0,0 +1,1416 @@
+package com.platform.service.produce.impl;
+
+import com.github.pagehelper.PageHelper;
+import com.platform.common.bean.AbstractPageResultBean;
+import com.platform.common.cache.ConfigCache;
+import com.platform.common.exception.BusinessException;
+import com.platform.common.util.*;
+import com.platform.dao.bean.MyPage;
+import com.platform.dao.dto.produce.ProduceRecordDTO;
+import com.platform.dao.dto.produce.ProduceReportDTO;
+import com.platform.dao.entity.produce.ProduceData;
+import com.platform.dao.entity.produce.ProduceRecord;
+import com.platform.dao.entity.produce.ProduceReport;
+import com.platform.dao.enums.ProduceRecordTypeEnum;
+import com.platform.dao.enums.YesNoEnum;
+import com.platform.dao.mapper.produce.ProduceReportMapper;
+import com.platform.dao.vo.query.produce.ProduceRecordVO;
+import com.platform.dao.vo.query.produce.ProduceReportTianVO;
+import com.platform.dao.vo.query.produce.ProduceReportVO;
+import com.platform.service.base.impl.BaseServiceImpl;
+import com.platform.service.produce.ProduceDataService;
+import com.platform.service.produce.ProduceRecordService;
+import com.platform.service.produce.ProduceReportService;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+import tk.mybatis.mapper.weekend.Weekend;
+import tk.mybatis.mapper.weekend.WeekendCriteria;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * @Description 生产每日报表 service 实现类
+ * @Author xc
+ * @Date 2024-12-16 13:29:22
+ * @Version Copyright (c) 2020,合肥乾元坤合科技有限公司 All rights reserved.
+ */
+@AllArgsConstructor
+@Service("produceReportService")
+@Slf4j
+public class ProduceReportServiceImpl extends BaseServiceImpl<ProduceReportMapper, ProduceReport, ProduceReportDTO> implements ProduceReportService {
+
+    private ProduceDataService produceDataService;
+    private ProduceRecordService produceRecordService;
+
+    @Override
+    public int batchDelete(List<String> ids) {
+        Weekend<ProduceReport> weekend = new Weekend<>(ProduceReport.class);
+        WeekendCriteria<ProduceReport, Object> weekendCriteria = weekend.weekendCriteria();
+        weekendCriteria.andIn(ProduceReport::getId, ids);
+        mapper.deleteByExample(weekend);
+
+        // 如果有月计划的不能删除
+        return 1;
+    }
+
+    @Override
+    public AbstractPageResultBean<ProduceReportVO> selectPageList(ProduceReportDTO record, int pageNum, int pageSize) {
+        PageHelper.startPage(pageNum, pageSize);
+        return new MyPage(mapper.selectList(record));
+    }
+
+    @Override
+    public ProduceReportVO sumMonthYear(ProduceReportDTO record) {
+        return mapper.sumMonthYear(record);
+    }
+
+
+    @Override
+    public AbstractPageResultBean<ProduceReport> selectPageInfo(ProduceReportDTO record, int pageNum, int pageSize) {
+        PageHelper.startPage(pageNum, pageSize);
+        return new MyPage(mapper.selectList(record));
+    }
+
+    @Override
+    public ProduceReport saveModelByDTO(ProduceReportDTO model) {
+
+        // 如果是月计划类的,只需要一个数据就行了
+        if (model.getNo().endsWith("_yjh")) {
+            LocalDate date = model.getDate();
+            model.setYear(date.getYear());
+            model.setMonth(date.getMonthValue());
+            ProduceData produceData = produceDataService.selectByNo(model.getNo());
+            Weekend<ProduceReport> weekend = new Weekend<>(ProduceReport.class);
+            WeekendCriteria<ProduceReport, Object> weekendCriteria = weekend.weekendCriteria();
+            weekendCriteria.andEqualTo(ProduceReport::getDataId, produceData.getId())
+                    .andEqualTo(ProduceReport::getYear, date.getYear())
+                    .andEqualTo(ProduceReport::getMonth, date.getMonthValue());
+            mapper.deleteByExample(weekend);
+
+            // 新增这一个月的数据
+            List<ProduceReport> reportList = new ArrayList<>();
+            ProduceData wcl = produceDataService.selectByNo(model.getNo() + "_wcl");
+            for (int i = 1; i <= date.lengthOfMonth(); i++) {
+                ProduceReport report = BeanConverterUtil.copyObjectProperties(model, ProduceReport.class);
+                report.setDay(i);
+                report.setDataId(produceData.getId());
+                LocalDate localDate = LocalDate.of(date.getYear(), date.getMonthValue(), i);
+                report.setDate(localDate);
+                reportList.add(report);
+
+                // 月累计产量
+                Weekend<ProduceReport> weekend2 = new Weekend<>(ProduceReport.class);
+                WeekendCriteria<ProduceReport, Object> weekendCriteria2 = weekend2.weekendCriteria();
+                weekendCriteria2.andEqualTo(ProduceReport::getDataId, produceData.getId())
+                        .andEqualTo(ProduceReport::getYear, date.getYear())
+                        .andEqualTo(ProduceReport::getMonth, date.getMonthValue()).andEqualTo(ProduceReport::getDay, i);
+                ProduceReport monthReport = mapper.selectOneByExample(weekendCriteria2);
+                if (monthReport == null) {
+                    monthReport = BeanConverterUtil.copyObjectProperties(model, ProduceReport.class);
+                    monthReport.setDay(i);
+                    monthReport.setDataId(wcl.getId());
+                    monthReport.setDate(localDate);
+                    monthReport.setValue("0");
+                    reportList.add(monthReport);
+                }
+            }
+
+            // 重新计算这一个月的数据和完成率
+            if (!CollectionUtils.isEmpty(reportList)) {
+                mapper.insertListforComplex(reportList);
+            }
+
+            return reportList.stream().filter(dept -> dept.getDay().equals(date.getDayOfMonth()) && dept.getDataId().equals(produceData.getId()))
+                    .collect(Collectors.toList()).get(0);
+        } else {
+            LocalDate date = model.getDate();
+            model.setYear(date.getYear());
+            model.setMonth(date.getMonthValue());
+            model.setDay(date.getDayOfMonth());
+            return super.saveModelByDTO(model);
+        }
+    }
+
+    @Override
+    public void modModelByDTO(ProduceReportDTO model) {
+        // 如果是月计划类的,只需要一个数据就行了
+        if (model.getNo().endsWith("_yjh")) {
+            LocalDate date = model.getDate();
+            model.setYear(date.getYear());
+            model.setMonth(date.getMonthValue());
+            model.setDay(date.getDayOfMonth());
+            ProduceData produceData = produceDataService.getModelById(model.getDataId());
+            Weekend<ProduceReport> weekend = new Weekend<>(ProduceReport.class);
+            WeekendCriteria<ProduceReport, Object> weekendCriteria = weekend.weekendCriteria();
+            weekendCriteria.andEqualTo(ProduceReport::getDataId, produceData.getId())
+                    .andEqualTo(ProduceReport::getYear, date.getYear())
+                    .andEqualTo(ProduceReport::getMonth, date.getMonthValue());
+            mapper.deleteByExample(weekend);
+
+            // 新增这一个月的数据
+            List<ProduceReport> reportList = new ArrayList<>();
+            ProduceData wcl = produceDataService.selectByNo(model.getNo() + "_wcl");
+            for (int i = 1; i <= date.lengthOfMonth(); i++) {
+                ProduceReport report = BeanConverterUtil.copyObjectProperties(produceData, ProduceReport.class);
+                report.setYear(date.getYear());
+                report.setMonth(date.getMonthValue());
+                report.setDay(i);
+                report.setValue(model.getValue());
+                report.setDataId(produceData.getId());
+                LocalDate localDate = LocalDate.of(date.getYear(), date.getMonthValue(), i);
+                report.setDate(localDate);
+                reportList.add(report);
+
+                // 月累计产量
+                Weekend<ProduceReport> weekend2 = new Weekend<>(ProduceReport.class);
+                WeekendCriteria<ProduceReport, Object> weekendCriteria2 = weekend2.weekendCriteria();
+                weekendCriteria2.andEqualTo(ProduceReport::getDataId, produceData.getId())
+                        .andEqualTo(ProduceReport::getYear, date.getYear())
+                        .andEqualTo(ProduceReport::getMonth, date.getMonthValue()).andEqualTo(ProduceReport::getDay, i);
+                ProduceReport monthReport = mapper.selectOneByExample(weekend2);
+                if (monthReport == null) {
+                    monthReport = BeanConverterUtil.copyObjectProperties(wcl, ProduceReport.class);
+                    monthReport.setYear(date.getYear());
+                    monthReport.setMonth(date.getMonthValue());
+                    monthReport.setDay(i);
+                    monthReport.setDataId(wcl.getId());
+                    monthReport.setDate(localDate);
+                    monthReport.setValue("0");
+                    reportList.add(monthReport);
+                }
+            }
+
+            // 重新计算这一个月的数据和完成率
+            if (!CollectionUtils.isEmpty(reportList)) {
+                mapper.insertListforComplex(reportList);
+            }
+        } else if (model.getNo().equals("dl_天然气_hy") || model.getNo().equals("dl_蒸汽_hy") || model.getNo().equals("dl_污水") || model.getNo().equals("dl_河水")) {
+            // 当日耗用,自动计算:本月耗用,本年耗用
+            // 本年耗用:更新
+            ProduceData yearData = produceDataService.selectByNo(model.getNo() + "_year");
+            ProduceReportDTO month = new ProduceReportDTO();
+            month.setDataId(model.getDataId());
+            month.setYear(model.getYear());
+            ProduceReportVO yearVO = this.sumMonthYear(month);
+
+            // 查找年
+            ProduceReport yearReport = new ProduceReport();
+            yearReport.setNo(model.getNo() + "_year");
+            yearReport.setDate(model.getDate());
+            yearReport.setYear(model.getYear());
+            yearReport = super.getModelListByModel(yearReport).get(0);
+            yearReport.setValue(yearVO.getTotalValue());
+            yearReport.setUpdateTime(LocalDateTime.now());
+            yearReport.setUpdateUserId(SecurityUtils.getUserInfo().getUserId());
+            mapper.updateByPrimaryKey(yearReport);
+
+            // 本月耗用:更新
+            ProduceData monthData = produceDataService.selectByNo(model.getNo() + "_month");
+            month.setMonth(model.getMonth());
+            ProduceReportVO monthVO = this.sumMonthYear(month);
+            // 查找年
+            ProduceReport monthReport = new ProduceReport();
+            monthReport.setNo(model.getNo() + "_month");
+            monthReport.setDate(model.getDate());
+            monthReport.setYear(model.getYear());
+            monthReport.setMonth(model.getMonth());
+            monthReport = super.getModelListByModel(monthReport).get(0);
+            monthReport.setValue(monthVO.getTotalValue());
+            monthReport.setUpdateTime(LocalDateTime.now());
+            monthReport.setUpdateUserId(SecurityUtils.getUserInfo().getUserId());
+            mapper.updateByPrimaryKey(monthReport);
+
+            LocalDate date = model.getDate();
+            model.setYear(date.getYear());
+            model.setMonth(date.getMonthValue());
+            model.setDay(date.getDayOfMonth());
+            super.modModelByDTO(model);
+        } else if (model.getNo().equals("dl_天然气") || model.getNo().equals("dl_蒸汽")) {
+            throw new BusinessException("无需填写");
+        } else {
+            LocalDate date = model.getDate();
+            model.setYear(date.getYear());
+            model.setMonth(date.getMonthValue());
+            model.setDay(date.getDayOfMonth());
+            super.modModelByDTO(model);
+        }
+    }
+
+    /**
+     * 异步的
+     * <p>
+     * 生成某一天的生产量
+     * 生产报表每日统计:每天凌晨1点统计
+     *
+     * @param date 日期
+     *             <p>
+     *             1: 生产量:
+     *             CS-977   0300027
+     *             902      0600032
+     */
+    @Override
+    @Async
+    @Transactional(rollbackFor = Exception.class)
+    public void generate(LocalDate date) {
+        LocalDate now = LocalDate.now();
+        if (now.equals(date)) {
+            throw new BusinessException("无法生成当日数据,只能生成前一天以前的数据");
+        }
+        // 如果当天已经有数据了,则不生成
+        Weekend<ProduceReport> weekend = new Weekend<>(ProduceReport.class);
+        WeekendCriteria<ProduceReport, Object> weekendCriteria = weekend.weekendCriteria();
+        weekendCriteria.andEqualTo(ProduceReport::getYear, date.getYear())
+                .andEqualTo(ProduceReport::getMonth, date.getMonthValue())
+                .andEqualTo(ProduceReport::getDay, date.getDayOfMonth())
+                .andNotLike(ProduceReport::getNo, "%_yjh%").andNotLike(ProduceReport::getNo, "%_yjh%");
+        List<ProduceReport> exsit = mapper.selectByExample(weekend);// 只有月计划可以提前生成,其他不行
+        if (!CollectionUtils.isEmpty(exsit)) {
+            throw new BusinessException("该日期的数据已经存在");
+        }
+
+        // 生产量数据
+        List<ProduceReport> sclList = new ArrayList<>();
+        sclList.addAll(generateSCL("scl_", date, "0300027", ProduceRecordTypeEnum.CCP_RK.getValue()));// 生产量:977,产成品
+        generateSCL("scl_", date, "0600032", ProduceRecordTypeEnum.BCP_RK.getValue());// 生产量:902,半成品
+
+        // 销售出货量
+        generateSCL("xiaoshou_", date, "0300027", ProduceRecordTypeEnum.XS_CK.getValue());// 977:0300027
+        generateSCL("xiaoshou_", date, "0300083", ProduceRecordTypeEnum.XS_CK.getValue());// 锂渣:0300083
+        generateSCL("xiaoshou_", date, "0300073", ProduceRecordTypeEnum.XS_CK.getValue());// 氟化钠:0300073
+        generateSCL("xiaoshou_", date, "lhn", ProduceRecordTypeEnum.XS_CK.getValue());//氯化钠:手填,先生成0
+
+        // 库存数据
+        generateStock(date, "0300027");//977:0300027,
+        generateStock(date, "0300073");//氟化钠:0300073
+        generateStock(date, "0300083");//锂渣:0300083
+        generateStock(date, "lhn");//氯化钠:手填,先生成0
+
+        // 物料入库数据
+        generateRk(date, "0600032");//GS-902
+        generateRk(date, "0100087");//GS-903
+        generateRk(date, "0100074");// GS-904
+        generateRk(date, "0100083");// GS-905
+        generateRk(date, "0100003");//GS-907
+        generateRk(date, "0100026");//F-160C
+        generateRk(date, "0100010");// CM47B
+        generateRk(date, "0100065");//氟化氢
+        generateRk(date, "0100120");// 硫酰氯(合成)
+        generateRk(date, "0100160");//液碱32%
+        generateRk(date, "0100086");//盐酸
+        generateRk(date, "0100075");//氢氧化钠(工业级片碱)
+
+        // 物料使用数据:物料出库数据
+        generateCk(date, "0600032", sclList);//GS-902
+        generateCk(date, "0100087", sclList);//GS-903
+        generateCk(date, "0100074", sclList);// GS-904
+        generateCk(date, "0100083", sclList);// GS-905
+        generateCk(date, "0100003", sclList);//GS-907
+        generateCk(date, "0100026", sclList);//F-160C
+        generateCk(date, "0100010", sclList);// CM47B
+        generateCk(date, "0100065", sclList);//氟化氢
+        generateCk(date, "0100120", sclList);// 硫酰氯(合成)
+        generateCk(date, "0100160", sclList);//液碱32%
+        generateCk(date, "0100086", sclList);//盐酸
+        generateCk(date, "0100075", sclList);//氢氧化钠(工业级片碱),这个是手工录入,不计算
+
+        // 动力用量生成dl_,手填,都先生成0
+        generateDlAndHy(date, "dl_");
+
+        // 生成电量数据
+        generateDianReport(date, sclList);
+
+
+        // 手填的,如果为空,则新建为0,月计划不管了,上面已经生成了
+        // 在产品情况生成 zcp,需要从液位获取,系统物料持有量生和在产品生成方式一样
+        // generateSt(date, "zcp_");
+    }
+
+    /**
+     * 手填的数据,先生成0
+     * 1:跟进液位进行生成
+     *
+     * @param date
+     * @param prefix
+     */
+    private void generateSt(LocalDate date, String prefix) {
+        List<ProduceData> produceDataList = produceDataService.selectByPrefix(prefix);
+        for (ProduceData produceData : produceDataList) {
+            ProduceReport report = BeanConverterUtil.copyObjectProperties(produceData, ProduceReport.class);
+            report.setValue("0");
+            report.setDate(date);
+            report.setDataId(produceData.getId());
+            report.setYear(date.getYear());
+            report.setMonth(date.getMonthValue());
+            report.setDay(date.getDayOfMonth());
+            report.setCreatedTime(LocalDateTime.now());
+            this.saveModel(report);
+
+            // 当日数据
+            /*ProduceData produceData = produceDataService.selectByNo(prefix + recordDTO.getNo());
+            ProduceReport report = BeanConverterUtil.copyObjectProperties(produceData, ProduceReport.class);
+            report.setDate(recordDTO.getDate());
+            report.setDataId(produceData.getId());
+            report.setValue(recordDTO.getNum().toString());
+            report.setYear(date.getYear());
+            report.setMonth(date.getMonthValue());
+            report.setDay(date.getDayOfMonth());
+            report.setCreatedTime(LocalDateTime.now());
+            this.saveModel(report);*/
+        }
+
+
+    }
+
+    /**
+     * 电:
+     * <p>
+     * 当日入库:0,dl_电
+     * 当日耗用:dl_电_hy,本月耗用:dl_电_hy_month,本年耗用:dl_电_hy_year
+     * 当日单耗:hy_电、月均单耗:hy_电_month、
+     * 库存0:hy_电_stock、可用天数0:hy_电_avg
+     *
+     * @param date
+     */
+    public void generateDianReport(LocalDate date, List<ProduceReport> sclList) {
+
+        // 电力记录数据
+        // 统计当天数据
+        ProduceRecord find = new ProduceRecord();
+        find.setProductNo("电");
+        find.setDate(date);
+        find.setType(ProduceRecordTypeEnum.DIAN.getValue());
+        ProduceRecord produceRecord = produceRecordService.getModelByModel(find);
+
+
+        String prefix = "dl_";
+        String no = "电";
+
+        // 当日数据
+        ProduceData produceData = produceDataService.selectByNo(prefix + no);
+        ProduceReport report = BeanConverterUtil.copyObjectProperties(produceData, ProduceReport.class);
+        report.setDate(date);
+        report.setDataId(produceData.getId());
+        report.setValue(produceRecord.getNum().toString());
+        report.setYear(date.getYear());
+        report.setMonth(date.getMonthValue());
+        report.setDay(date.getDayOfMonth());
+        report.setCreatedTime(LocalDateTime.now());
+        this.saveModel(report);
+
+        // 当日耗用
+        produceData = produceDataService.selectByNo(prefix + no + "_hy");
+        report = BeanConverterUtil.copyObjectProperties(produceData, ProduceReport.class);
+        report.setDate(date);
+        report.setDataId(produceData.getId());
+        report.setValue(produceRecord.getNum().toString());
+        report.setYear(date.getYear());
+        report.setMonth(date.getMonthValue());
+        report.setDay(date.getDayOfMonth());
+        report.setCreatedTime(LocalDateTime.now());
+        this.saveModel(report);
+
+        // 本年耗用
+        ProduceReportDTO month = new ProduceReportDTO();
+        month.setDataId(produceData.getId());
+        month.setYear(date.getYear());
+        ProduceReportVO yearVO = this.sumMonthYear(month);
+
+        produceData = produceDataService.selectByNo(prefix + no + "_hy_year");
+        report = BeanConverterUtil.copyObjectProperties(produceData, ProduceReport.class);
+        report.setDate(date);
+        report.setDataId(produceData.getId());
+        report.setValue(yearVO.getTotalValue());
+        report.setYear(date.getYear());
+        report.setMonth(date.getMonthValue());
+        report.setDay(date.getDayOfMonth());
+        report.setCreatedTime(LocalDateTime.now());
+        this.saveModel(report);
+
+        // 本月耗用
+        report.setMonth(date.getMonthValue());
+        ProduceReportVO monthVO = this.sumMonthYear(month);
+        produceData = produceDataService.selectByNo(prefix + no + "_hy_month");
+        report = BeanConverterUtil.copyObjectProperties(produceData, ProduceReport.class);
+        report.setDate(date);
+        report.setDataId(produceData.getId());
+        report.setValue(monthVO.getTotalValue());
+        report.setYear(date.getYear());
+        report.setMonth(date.getMonthValue());
+        report.setDay(date.getDayOfMonth());
+        report.setCreatedTime(LocalDateTime.now());
+        this.saveModel(report);
+
+        // 当日单耗=单日耗用/977当日产量
+        // 当日单耗=
+        ProduceReport dayScl = sclList.stream().filter(dept -> dept.getNo().endsWith("_0300027")).collect(Collectors.toList()).get(0);
+        String prefixHy = "hy_";
+        produceData = produceDataService.selectByNo(prefixHy + no);
+        report = BeanConverterUtil.copyObjectProperties(produceData, ProduceReport.class);
+        report.setDate(date);
+        report.setDataId(produceData.getId());
+
+        if (dayScl == null || dayScl.getValue().compareTo("1") == 0) {
+            dayScl.setValue("1");
+        } else {
+            if (new BigDecimal(dayScl.getValue()).compareTo(new BigDecimal("0")) == 0) {
+                report.setValue(produceRecord.getNum().toString());
+            } else {
+                BigDecimal hyDayValue = new BigDecimal(produceRecord.getNum().toString()).divide(new BigDecimal(dayScl.getValue()), BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(0.3 * 1000)).setScale(2);
+                report.setValue(hyDayValue.toString());
+            }
+        }
+        report.setYear(date.getYear());
+        report.setMonth(date.getMonthValue());
+        report.setDay(date.getDayOfMonth());
+        report.setCreatedTime(LocalDateTime.now());
+        this.saveModel(report);
+
+        // 当月单耗
+        ProduceReport monthScl = sclList.stream().filter(dept -> dept.getNo().endsWith("_0300027_month")).collect(Collectors.toList()).get(0);
+        produceData = produceDataService.selectByNo(prefixHy + no + "_month");
+        report = BeanConverterUtil.copyObjectProperties(produceData, ProduceReport.class);
+        report.setDate(date);
+        report.setDataId(produceData.getId());
+
+        if (monthScl == null) {
+            monthScl.setValue("1");
+        } else {
+            if (new BigDecimal(monthScl.getValue()).compareTo(new BigDecimal("0")) == 0) {
+                report.setValue(monthVO.getTotalValue());
+            } else {
+                BigDecimal hyDayValue = new BigDecimal(monthVO.getTotalValue()).divide(new BigDecimal(monthScl.getValue()), BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(0.3 * 1000)).setScale(2);
+                report.setValue(hyDayValue.toString());
+            }
+        }
+        report.setYear(date.getYear());
+        report.setMonth(date.getMonthValue());
+        report.setDay(date.getDayOfMonth());
+        report.setCreatedTime(LocalDateTime.now());
+        this.saveModel(report);
+
+
+        // 库存0:hy_电_stock、可用天数0:hy_电_avg
+        // 库存
+        produceData = produceDataService.selectByNo(prefixHy + no + "_stock");
+        report = BeanConverterUtil.copyObjectProperties(produceData, ProduceReport.class);
+        report.setDate(date);
+        report.setDataId(produceData.getId());
+        report.setValue("0");
+        report.setYear(date.getYear());
+        report.setMonth(date.getMonthValue());
+        report.setDay(date.getDayOfMonth());
+        report.setCreatedTime(LocalDateTime.now());
+        this.saveModel(report);
+
+        // 可用天数
+        produceData = produceDataService.selectByNo(prefixHy + no + "_avg");
+        report = BeanConverterUtil.copyObjectProperties(produceData, ProduceReport.class);
+        report.setDate(date);
+        report.setDataId(produceData.getId());
+        report.setValue("0");
+        report.setYear(date.getYear());
+        report.setMonth(date.getMonthValue());
+        report.setDay(date.getDayOfMonth());
+        report.setCreatedTime(LocalDateTime.now());
+        this.saveModel(report);
+    }
+
+    /**
+     * 液位:
+     * 液位号1,公式1,折算类型1,折算比例1;
+     * 液位号2,公式2,折算类型2,折算比例2;
+     * <p>
+     * 折算类型,1:直接乘以多少
+     * 2:大于多少值,有值,小于多少为0
+     *
+     * @param date
+     */
+    @Override
+    public BigDecimal generateYeweiReport(LocalDate date, String no, String configName) {
+        log.info("正在处理液位:" + no);
+        // GS-907
+        String prefix = "zcp_";
+
+        // 找到对应填报数据
+        ProduceData produceData = produceDataService.selectByNo(prefix + no);
+        String value = ConfigCache.getLabelByValueAllowNull(configName);
+        List<String> list = Arrays.asList(value.split(";"));
+
+        BigDecimal total = new BigDecimal(0);
+        for (String line : list) {
+            List<String> col = Arrays.asList(line.split(","));
+
+            // 找到液位数据
+            ProduceRecord find = new ProduceRecord();
+            find.setProductNo(col.get(0));
+            find.setDate(date);
+            find.setType(ProduceRecordTypeEnum.YEWEI.getValue());
+            List<ProduceRecord> produceRecord = produceRecordService.getModelListByModel(find);
+            Map<String, Double> param = new HashMap<>();
+            if (!CollectionUtils.isEmpty(produceRecord)) {
+                param.put("value", produceRecord.get(0).getNum().doubleValue());
+            } else {
+                param.put("value", 1.0);
+            }
+
+            log.info("公式:" + col.get(1));
+            String result = FelUtil.getResultFromMap(col.get(1), param, 2);
+
+            // 类型1,直接乘以系数
+            BigDecimal bak = null;
+            if ("1".equals(col.get(2))) {
+                bak = (new BigDecimal(result).multiply(new BigDecimal(col.get(3)))).setScale(2, RoundingMode.HALF_UP);
+            } else if ("2".equals(col.get(2))) {// 大于多少有值,小于多少设置为0
+                if (new BigDecimal(result).compareTo(new BigDecimal(col.get(3))) > 0) {
+                    bak = new BigDecimal(col.get(4));
+                } else {
+                    bak = new BigDecimal(0);
+                }
+            } else if ("3".equals(col.get(2))) {// 小于多少,计算结果才算,否则魏0
+                if (new BigDecimal(result).compareTo(new BigDecimal(col.get(3))) <= 0) {
+                    bak = new BigDecimal(result);
+                } else {
+                    bak = new BigDecimal(0);
+                }
+            } else if ("4".equals(col.get(2))) {// 大于多少,计算结果才算,否则魏0
+                if (new BigDecimal(result).compareTo(new BigDecimal(col.get(3))) >= 0) {
+                    bak = new BigDecimal(result);
+                } else {
+                    bak = new BigDecimal(0);
+                }
+            }
+            total = total.add(bak);
+        }
+
+        ProduceReport report = BeanConverterUtil.copyObjectProperties(produceData, ProduceReport.class);
+        report.setDate(date);
+        report.setDataId(produceData.getId());
+        report.setValue(total.toString());
+        report.setYear(date.getYear());
+        report.setMonth(date.getMonthValue());
+        report.setDay(date.getDayOfMonth());
+        report.setCreatedTime(LocalDateTime.now());
+        this.saveModel(report);
+        return total;
+    }
+
+    /**
+     * 液位:总计
+     * 2:大于多少值,有值,小于多少为0
+     *
+     * @param date
+     */
+    @Override
+    public void generateYeweiTotalReport(LocalDate date, Map<String, Double> param) {
+
+        // GS-907
+        String prefix = "zcp_";
+        String result = FelUtil.getResultFromMap("((a1+a2)*0.58+a3)/2", param, 2);
+        // 找到对应填报数据
+        ProduceData produceData = produceDataService.selectByNo(prefix + "total");
+        ProduceReport report = BeanConverterUtil.copyObjectProperties(produceData, ProduceReport.class);
+        report.setDate(date);
+        report.setDataId(produceData.getId());
+        report.setValue(result);
+        report.setYear(date.getYear());
+        report.setMonth(date.getMonthValue());
+        report.setDay(date.getDayOfMonth());
+        report.setCreatedTime(LocalDateTime.now());
+        this.saveModel(report);
+    }
+
+    /**
+     * 能源+能源单耗
+     * 24个
+     * dl_
+     * hy_
+     *
+     * @param date
+     * @param prefix
+     */
+    private void generateDlAndHy(LocalDate date, String prefix) {
+/*        List<ProduceData> produceDataList = produceDataService.selectByPrefix(prefix);
+        for (ProduceData produceData : produceDataList) {
+            ProduceReport report = BeanConverterUtil.copyObjectProperties(produceData, ProduceReport.class);
+            report.setValue("0");
+            report.setDate(date);
+            report.setDataId(produceData.getId());
+            report.setYear(date.getYear());
+            report.setMonth(date.getMonthValue());
+            report.setDay(date.getDayOfMonth());
+            report.setCreatedTime(LocalDateTime.now());
+            this.saveModel(report);
+        }*/
+
+        // 天然气
+        List<ProduceData> list = produceDataService.selectByPrefix(prefix + "天然气");
+        for (ProduceData produceData : list) {
+            ProduceReport report = BeanConverterUtil.copyObjectProperties(produceData, ProduceReport.class);
+            report.setValue("0");
+            report.setDate(date);
+            report.setDataId(produceData.getId());
+            report.setYear(date.getYear());
+            report.setMonth(date.getMonthValue());
+            report.setDay(date.getDayOfMonth());
+            report.setCreatedTime(LocalDateTime.now());
+            this.saveModel(report);
+        }
+
+        // 天然气
+        list = produceDataService.selectByPrefix("hy_" + "天然气");
+        for (ProduceData produceData : list) {
+            ProduceReport report = BeanConverterUtil.copyObjectProperties(produceData, ProduceReport.class);
+            report.setValue("0");
+            report.setDate(date);
+            report.setDataId(produceData.getId());
+            report.setYear(date.getYear());
+            report.setMonth(date.getMonthValue());
+            report.setDay(date.getDayOfMonth());
+            report.setCreatedTime(LocalDateTime.now());
+            this.saveModel(report);
+        }
+
+        // 蒸汽
+        list = produceDataService.selectByPrefix(prefix + "蒸汽");
+        for (ProduceData produceData : list) {
+            ProduceReport report = BeanConverterUtil.copyObjectProperties(produceData, ProduceReport.class);
+            report.setValue("0");
+            report.setDate(date);
+            report.setDataId(produceData.getId());
+            report.setYear(date.getYear());
+            report.setMonth(date.getMonthValue());
+            report.setDay(date.getDayOfMonth());
+            report.setCreatedTime(LocalDateTime.now());
+            this.saveModel(report);
+        }
+        // 蒸汽
+        list = produceDataService.selectByPrefix("hy_" + "蒸汽");
+        for (ProduceData produceData : list) {
+            ProduceReport report = BeanConverterUtil.copyObjectProperties(produceData, ProduceReport.class);
+            report.setValue("0");
+            report.setDate(date);
+            report.setDataId(produceData.getId());
+            report.setYear(date.getYear());
+            report.setMonth(date.getMonthValue());
+            report.setDay(date.getDayOfMonth());
+            report.setCreatedTime(LocalDateTime.now());
+            this.saveModel(report);
+        }
+
+        // 污水
+        list = produceDataService.selectByPrefix(prefix + "污水");
+        for (ProduceData produceData : list) {
+            ProduceReport report = BeanConverterUtil.copyObjectProperties(produceData, ProduceReport.class);
+            report.setValue("0");
+            report.setDate(date);
+            report.setDataId(produceData.getId());
+            report.setYear(date.getYear());
+            report.setMonth(date.getMonthValue());
+            report.setDay(date.getDayOfMonth());
+            report.setCreatedTime(LocalDateTime.now());
+            this.saveModel(report);
+        }
+
+        // 河水
+        list = produceDataService.selectByPrefix(prefix + "河水");
+        for (ProduceData produceData : list) {
+            ProduceReport report = BeanConverterUtil.copyObjectProperties(produceData, ProduceReport.class);
+            report.setValue("0");
+            report.setDate(date);
+            report.setDataId(produceData.getId());
+            report.setYear(date.getYear());
+            report.setMonth(date.getMonthValue());
+            report.setDay(date.getDayOfMonth());
+            report.setCreatedTime(LocalDateTime.now());
+            this.saveModel(report);
+        }
+    }
+
+    /**
+     * 手填的数据,先生成0
+     * <p>
+     * 1:动力单耗的计算逻辑:动力使用量/当日产量*0.3
+     * 当日产量是977的产量
+     * <p>
+     * 当日单耗
+     * 月均单耗
+     *
+     * @param date
+     * @param no
+     */
+    private void generateHy(LocalDate date, String no) {
+        String prefix = "hy_";
+
+
+        List<ProduceData> produceDataList = produceDataService.selectByPrefix(prefix);
+        for (ProduceData produceData : produceDataList) {
+            ProduceReport report = BeanConverterUtil.copyObjectProperties(produceData, ProduceReport.class);
+            report.setValue("0");
+            report.setDate(date);
+            report.setDataId(produceData.getId());
+            report.setYear(date.getYear());
+            report.setMonth(date.getMonthValue());
+            report.setDay(date.getDayOfMonth());
+            report.setCreatedTime(LocalDateTime.now());
+            this.saveModel(report);
+        }
+    }
+
+    /**
+     * 生成某一天的生产量
+     * 生产报表每日统计:每天凌晨1点统计
+     *
+     * @param date 日期
+     * @param no   编号
+     * @param type 类型
+     *             <p>
+     *             1: 生产量:
+     *             CS-977   0300027
+     *             902      0600032
+     */
+    public List<ProduceReport> generateSCL(String prefix, LocalDate date, String no, Integer type) {
+        List<ProduceReport> resultList = new ArrayList<>();
+        // 统计当天数据
+        ProduceRecordDTO dto = new ProduceRecordDTO();
+        dto.setProductNo(no);
+        dto.setDate(date);
+        dto.setType(type);
+        List<ProduceRecordVO> produceRecordList = produceRecordService.selectList(dto);
+
+        // 统计总额
+        BigDecimal total = new BigDecimal(0);
+        for (ProduceRecordVO vo : produceRecordList) {
+            total = total.add(vo.getNum());
+        }
+
+        // 当日数据
+        ProduceData produceData = produceDataService.selectByNo(prefix + no);
+        ProduceReport report = BeanConverterUtil.copyObjectProperties(produceData, ProduceReport.class);
+        report.setDate(date);
+        report.setDataId(produceData.getId());
+        report.setValue(total.toString());
+        report.setYear(date.getYear());
+        report.setMonth(date.getMonthValue());
+        report.setDay(date.getDayOfMonth());
+        report.setCreatedTime(LocalDateTime.now());
+        this.saveModel(report);
+        resultList.add(report);
+        // 年累计
+        ProduceReportDTO month = new ProduceReportDTO();
+        month.setDataId(produceData.getId());
+        month.setYear(date.getYear());
+        ProduceReportVO yearVO = this.sumMonthYear(month);
+        ProduceData yearData = produceDataService.selectByNo(prefix + no + "_year");
+        ProduceReport yearReport = BeanConverterUtil.copyObjectProperties(yearData, ProduceReport.class);
+        yearReport.setDate(date);
+        yearReport.setDataId(yearData.getId());
+        yearReport.setValue(yearVO.getTotalValue());
+        yearReport.setYear(date.getYear());
+        yearReport.setMonth(date.getMonthValue());
+        yearReport.setDay(date.getDayOfMonth());
+        yearReport.setCreatedTime(LocalDateTime.now());
+        this.saveModel(yearReport);
+
+        // 月累计
+        report.setMonth(date.getMonthValue());
+        ProduceReportVO monthVO = this.sumMonthYear(month);
+        ProduceData monthData = produceDataService.selectByNo(prefix + no + "_month");
+        ProduceReport monthReport = BeanConverterUtil.copyObjectProperties(monthData, ProduceReport.class);
+        monthReport.setDate(date);
+        monthReport.setDataId(monthData.getId());
+        monthReport.setValue(monthVO.getTotalValue());
+        monthReport.setYear(date.getYear());
+        monthReport.setMonth(date.getMonthValue());
+        monthReport.setDay(date.getDayOfMonth());
+        monthReport.setCreatedTime(LocalDateTime.now());
+        this.saveModel(monthReport);
+        resultList.add(monthReport);
+        // 月计划
+        ProduceData yjhData = produceDataService.selectByNo(prefix + no + "_yjh");
+        ProduceReport yjhReport = BeanConverterUtil.copyObjectProperties(yjhData, ProduceReport.class);
+        yjhReport.setDate(date);
+        yjhReport.setDataId(yjhData.getId());
+        yjhReport.setYear(date.getYear());
+        yjhReport.setMonth(date.getMonthValue());
+        yjhReport.setDay(date.getDayOfMonth());
+        // 计算完成率,如月计划没有,则新建一个0,等待人员填写
+        ProduceReport yjh = this.getModelByModel(yjhReport);
+        if (yjh == null) {
+            yjhReport.setValue("0");// 新增为
+            yjhReport.setDate(date);
+            yjhReport.setCreatedTime(LocalDateTime.now());
+            this.saveModel(yjhReport);
+            yjh = yjhReport;
+        }
+        // 新增当日月计划完成率
+        ProduceData wclData = produceDataService.selectByNo(prefix + no + "_yjh_wcl");
+        ProduceReport wclReport = BeanConverterUtil.copyObjectProperties(wclData, ProduceReport.class);
+        wclReport.setDate(date);
+        wclReport.setDataId(wclData.getId());
+        if (yjh.getValue().equals("0")) {
+            wclReport.setValue("0");
+        } else {
+            wclReport.setValue(BigDecimalUtil.div(Double.valueOf(monthReport.getValue()) * 100, Double.valueOf(yjh.getValue()), 2) + "");
+        }
+        wclReport.setYear(date.getYear());
+        wclReport.setMonth(date.getMonthValue());
+        wclReport.setDay(date.getDayOfMonth());
+        wclReport.setCreatedTime(LocalDateTime.now());
+        this.saveModel(wclReport);
+        return resultList;
+    }
+
+    /**
+     * 生成某一天的库存量,三个库存量
+     * 977:0300027
+     * 锂渣:0300083
+     * 氟化钠:0300073
+     * <p>
+     * <p>
+     * 氯化钠:0300094:手填
+     */
+    public void generateStock(LocalDate date, String no) {
+        String prefix = "stock_";
+        // 统计当天数据,累加
+        ProduceRecordDTO dto = new ProduceRecordDTO();
+        dto.setProductNo(no);
+        dto.setDate(date);
+        dto.setType(ProduceRecordTypeEnum.XCL.getValue());
+        List<ProduceRecordVO> produceRecordList = produceRecordService.selectList(dto);
+
+        // 统计总额
+        BigDecimal total = new BigDecimal(0);
+        for (ProduceRecordVO vo : produceRecordList) {
+            total = total.add(vo.getNum());
+        }
+
+        // 找到填报字段
+        ProduceData data = produceDataService.selectByNo(prefix + no);
+        ProduceReport monthReport = BeanConverterUtil.copyObjectProperties(data, ProduceReport.class);
+        monthReport.setDate(date);
+        monthReport.setDataId(data.getId());
+        monthReport.setValue(total.toString());
+        monthReport.setYear(date.getYear());
+        monthReport.setMonth(date.getMonthValue());
+        monthReport.setDay(date.getDayOfMonth());
+        monthReport.setCreatedTime(LocalDateTime.now());
+        this.saveModel(monthReport);
+    }
+
+    /**
+     * 主要原物料用量数:入库
+     * GS-902   600032
+     * CS-977  0300027
+     * GS-903   100087
+     * GS-904   100074
+     * GS-905   100083
+     * GS-907   100003
+     * F-160C   100026
+     * CM47B    100010
+     * 氟化氢      100065
+     * 硫酰氯(合成)  100120
+     * 液碱32%      100160
+     * 盐酸           100086
+     * 氢氧化钠(工业级片碱)  100075
+     */
+    public void generateRk(LocalDate date, String no) {
+        log.info("正在处理入库:" + no);
+        String prefix = "ck_";// 入库和出库一样,用ck统计
+        // 统计当天数据
+        ProduceRecordDTO dto = new ProduceRecordDTO();
+        dto.setProductNo(no);
+        dto.setDate(date);
+        dto.setType(ProduceRecordTypeEnum.CG_RK.getValue());
+        List<ProduceRecordVO> produceRecordList = produceRecordService.selectList(dto);
+
+        // 统计总额
+        BigDecimal total = new BigDecimal(0);
+        for (ProduceRecordVO vo : produceRecordList) {
+            total = total.add(vo.getNum());
+        }
+
+        // 当日数据
+        ProduceData produceData = produceDataService.selectByNo(prefix + no);
+        ProduceReport report = BeanConverterUtil.copyObjectProperties(produceData, ProduceReport.class);
+        report.setDate(date);
+        report.setDataId(produceData.getId());
+        report.setValue(total.toString());
+        report.setYear(date.getYear());
+        report.setMonth(date.getMonthValue());
+        report.setDay(date.getDayOfMonth());
+        report.setCreatedTime(LocalDateTime.now());
+        this.saveModel(report);
+
+    }
+
+    /**
+     * 主要原物料用量数:出库
+     * GS-902   600032
+     * GS-903   100087
+     * GS-904   100074
+     * GS-905   100083
+     * GS-907   100003
+     * F-160C   100026
+     * CM47B    100010
+     * 氟化氢      100065
+     * 硫酰氯(合成)  100120
+     * 液碱32%      100160
+     * 盐酸           100086
+     * 氢氧化钠(工业级片碱)  100075
+     */
+    public void generateCk(LocalDate date, String no, List<ProduceReport> sclList) {
+        log.info("generateCk:" + no);
+        String prefix = "ck_";// 出库
+        // 统计当天数据
+        ProduceRecordDTO dto = new ProduceRecordDTO();
+        dto.setProductNo(no);
+        dto.setDate(date);
+        dto.setType(ProduceRecordTypeEnum.CL_CK.getValue());
+        List<ProduceRecordVO> produceRecordList = produceRecordService.selectList(dto);
+
+        // 统计总额
+        BigDecimal total = new BigDecimal(0);
+        for (ProduceRecordVO vo : produceRecordList) {
+            total = total.add(vo.getNum());
+        }
+
+        // 当日数据
+        ProduceData produceData = produceDataService.selectByNo(prefix + no + "_hy");
+        ProduceReport report = BeanConverterUtil.copyObjectProperties(produceData, ProduceReport.class);
+        report.setDate(date);
+        report.setDataId(produceData.getId());
+        report.setValue(total.toString());
+        report.setYear(date.getYear());
+        report.setMonth(date.getMonthValue());
+        report.setDay(date.getDayOfMonth());
+        report.setCreatedTime(LocalDateTime.now());
+        this.saveModel(report);
+
+        // 年累计
+        ProduceReportDTO month = new ProduceReportDTO();
+        month.setDataId(produceData.getId());
+        month.setYear(date.getYear());
+        ProduceReportVO yearVO = this.sumMonthYear(month);
+        ProduceData yearData = produceDataService.selectByNo(prefix + no + "_hy" + "_year");
+        ProduceReport yearReport = BeanConverterUtil.copyObjectProperties(yearData, ProduceReport.class);
+        yearReport.setDate(date);
+        yearReport.setDataId(yearData.getId());
+        yearReport.setValue(yearVO.getTotalValue());
+        yearReport.setYear(date.getYear());
+        yearReport.setMonth(date.getMonthValue());
+        yearReport.setDay(date.getDayOfMonth());
+        yearReport.setCreatedTime(LocalDateTime.now());
+        this.saveModel(yearReport);
+
+        // 月累计
+        report.setMonth(date.getMonthValue());
+        ProduceReportVO monthVO = this.sumMonthYear(month);
+        ProduceData monthData = produceDataService.selectByNo(prefix + no + "_hy" + "_month");
+        ProduceReport monthReport = BeanConverterUtil.copyObjectProperties(monthData, ProduceReport.class);
+        monthReport.setDate(date);
+        monthReport.setDataId(monthData.getId());
+        monthReport.setValue(monthVO.getTotalValue());
+        monthReport.setYear(date.getYear());
+        monthReport.setMonth(date.getMonthValue());
+        monthReport.setDay(date.getDayOfMonth());
+        monthReport.setCreatedTime(LocalDateTime.now());
+        this.saveModel(monthReport);
+
+
+        // 计算每日单耗,找到每日scl量
+        ProduceReport dayScl = sclList.stream().filter(dept -> dept.getNo().endsWith("_0300027")).collect(Collectors.toList()).get(0);
+        String hyPrefix = "hy_";
+        ProduceData hy = produceDataService.selectByNo(hyPrefix + no);
+        ProduceReport dayHy = BeanConverterUtil.copyObjectProperties(hy, ProduceReport.class);
+        dayHy.setDate(date);
+        dayHy.setDataId(hy.getId());
+        if (new BigDecimal("0").compareTo(new BigDecimal(dayScl.getValue())) == 0) {
+            dayHy.setValue("0");
+        } else {
+            BigDecimal hyDayValue = total.divide(new BigDecimal(dayScl.getValue()), 2).multiply(new BigDecimal(0.3));
+            dayHy.setValue(hyDayValue.toString());
+        }
+        dayHy.setYear(date.getYear());
+        dayHy.setMonth(date.getMonthValue());
+        dayHy.setDay(date.getDayOfMonth());
+        dayHy.setCreatedTime(LocalDateTime.now());
+        this.saveModel(dayHy);
+
+        //月单耗, 找到月生产量,在找到
+        ProduceReport monthScl = sclList.stream().filter(dept -> dept.getNo().endsWith("_0300027_month")).collect(Collectors.toList()).get(0);
+        ProduceData hyMonth = produceDataService.selectByNo(hyPrefix + no + "_month");
+        ProduceReport monthHy = BeanConverterUtil.copyObjectProperties(hyMonth, ProduceReport.class);
+        monthHy.setDate(date);
+        monthHy.setDataId(hyMonth.getId());
+        if (new BigDecimal("0").compareTo(new BigDecimal(monthVO.getTotalValue())) == 0) {
+            monthHy.setValue("0");
+        } else {
+            BigDecimal hyMonthValue = (new BigDecimal(monthVO.getTotalValue()).divide(new BigDecimal(monthScl.getValue()), RoundingMode.HALF_UP).multiply(new BigDecimal(0.3))).setScale(2, RoundingMode.HALF_UP);
+            monthHy.setValue(hyMonthValue.toString());
+        }
+        monthHy.setYear(date.getYear());
+        monthHy.setMonth(date.getMonthValue());
+        monthHy.setDay(date.getDayOfMonth());
+        monthHy.setCreatedTime(LocalDateTime.now());
+        this.saveModel(monthHy);
+
+        // 库存量
+        ProduceData stock = produceDataService.selectByNo(hyPrefix + no + "_stock");
+        ProduceReport reportStock = BeanConverterUtil.copyObjectProperties(stock, ProduceReport.class);
+        reportStock.setValue("0");
+        reportStock.setDate(date);
+        reportStock.setDataId(stock.getId());
+        reportStock.setYear(date.getYear());
+        reportStock.setMonth(date.getMonthValue());
+        reportStock.setDay(date.getDayOfMonth());
+        reportStock.setCreatedTime(LocalDateTime.now());
+        this.saveModel(reportStock);
+        // 可用天数
+        ProduceData avg = produceDataService.selectByNo(hyPrefix + no + "_avg");
+        ProduceReport reportAvg = BeanConverterUtil.copyObjectProperties(avg, ProduceReport.class);
+        reportAvg.setValue("0");
+        reportAvg.setDate(date);
+        reportAvg.setDataId(avg.getId());
+        reportAvg.setYear(date.getYear());
+        reportAvg.setMonth(date.getMonthValue());
+        reportAvg.setDay(date.getDayOfMonth());
+        reportAvg.setCreatedTime(LocalDateTime.now());
+        this.saveModel(reportAvg);
+    }
+
+    /**
+     * 核算为吨
+     *
+     * @param dto
+     * @return
+     */
+    @Override
+    public List<ProduceReportVO> selectList(ProduceReportDTO dto) {
+        // 统计某日数据,计算kg-吨的转化
+        List<ProduceReportVO> list = mapper.selectList(dto);
+        for (ProduceReportVO item : list) {// 计算吨
+            if (item.getNo().startsWith("scl_") || item.getNo().startsWith("stock_") || item.getNo().startsWith("xiaoshou") || item.getNo().startsWith("ck_")) {
+                if (!"0".equals(item.getValue())) {
+                    item.setValue(BigDecimalUtil.valueOf(item.getValue()).divide(new BigDecimal("1000")).toString());
+                }
+            }
+        }
+        return list;
+    }
+
+    /**
+     * 查询某贴需要手工填报的数据
+     * 水111
+     * 电
+     * 污水
+     * 河水
+     * 汽
+     *
+     * @param dto
+     * @return
+     */
+    @Override
+    public List<ProduceReportTianVO> selectListByDayTian(ProduceReportDTO dto) {
+        // 天然气,蒸汽,河水,污水
+        List<ProduceData> list = produceDataService.selectByDayTianPrefix();
+        List<String> ids = list.stream().map(ProduceData::getId).distinct().collect(Collectors.toList());
+        dto.setDataIds(ids);
+        List<ProduceReportVO> reportVOList = mapper.selectList(dto);
+        Map<LocalDate, List<ProduceReportVO>> groupMap = reportVOList.stream().collect(Collectors.groupingBy(ProduceReportVO::getDate));
+        // 转化前台可以识别的数据
+        List<ProduceReportTianVO> resultList = new ArrayList<>();
+
+        for (Map.Entry<LocalDate, List<ProduceReportVO>> entry : groupMap.entrySet()) {
+            ProduceReportTianVO vo = new ProduceReportTianVO();
+            LocalDate date = entry.getKey();
+            vo.setDate(date);
+            vo.setDay(date.getDayOfMonth());
+            vo.setMonth(date.getMonthValue());
+            vo.setYear(date.getYear());
+            for (ProduceReportVO produceReportVO : entry.getValue()) {
+                if (produceReportVO.getNo().equals("dl_天然气_hy")) {
+                    vo.setGas(produceReportVO.getValue());
+                    vo.setGasId(produceReportVO.getId());
+                    vo.setGasNo(produceReportVO.getNo());
+                    vo.setGasDataId(produceReportVO.getDataId());
+                } else if (produceReportVO.getNo().equals("dl_蒸汽_hy")) {
+                    vo.setSteam(produceReportVO.getValue());
+                    vo.setSteamId(produceReportVO.getId());
+                    vo.setSteamNo(produceReportVO.getNo());
+                    vo.setSteamDataId(produceReportVO.getDataId());
+                } else if (produceReportVO.getNo().equals("dl_河水")) {
+                    vo.setRiverWater(produceReportVO.getValue());
+                    vo.setRiverWaterId(produceReportVO.getId());
+                    vo.setRiverWaterNo(produceReportVO.getNo());
+                    vo.setRiverWaterDataId(produceReportVO.getDataId());
+                } else {
+                    vo.setSewage(produceReportVO.getValue());
+                    vo.setSewageId(produceReportVO.getId());
+                    vo.setSewageNo(produceReportVO.getNo());
+                    vo.setSewageDataId(produceReportVO.getDataId());
+                }
+            }
+            resultList.add(vo);
+        }
+
+        // 排序
+        if (!CollectionUtils.isEmpty(resultList)) {
+            resultList = resultList.stream().sorted(Comparator.comparing(ProduceReportTianVO::getDate)).collect(Collectors.toList());
+        }
+        return resultList;
+    }
+
+    /**
+     * 查询某天的数据
+     * 水111
+     * 电
+     * 污水
+     * 河水
+     * 汽
+     *
+     * @param dto
+     * @return
+     */
+    @Override
+    public List<ProduceReportTianVO> selectListByDay(ProduceReportDTO dto) {
+        // 天然气,蒸汽,河水,污水
+        List<ProduceData> list = produceDataService.selectByDayPrefix();
+        List<String> ids = list.stream().map(ProduceData::getId).distinct().collect(Collectors.toList());
+        dto.setDataIds(ids);
+        List<ProduceReportVO> reportVOList = mapper.selectList(dto);
+        Map<LocalDate, List<ProduceReportVO>> groupMap = reportVOList.stream().collect(Collectors.groupingBy(ProduceReportVO::getDate));
+        // 转化前台可以识别的数据
+        List<ProduceReportTianVO> resultList = new ArrayList<>();
+
+        for (Map.Entry<LocalDate, List<ProduceReportVO>> entry : groupMap.entrySet()) {
+            ProduceReportTianVO vo = new ProduceReportTianVO();
+            LocalDate date = entry.getKey();
+            vo.setDate(date);
+            vo.setDay(date.getDayOfMonth());
+            vo.setMonth(date.getMonthValue());
+            vo.setYear(date.getYear());
+            for (ProduceReportVO produceReportVO : entry.getValue()) {
+                if (produceReportVO.getNo().equals("ck_0600032")) {
+                    vo.setGs902(produceReportVO.getValue());
+                    vo.setGs902Id(produceReportVO.getId());
+                    vo.setGs902No(produceReportVO.getNo());
+                    vo.setGs902DataId(produceReportVO.getDataId());
+                } else if (produceReportVO.getNo().equals("ck_0100087")) {
+                    vo.setGs903(produceReportVO.getValue());
+                    vo.setGs903Id(produceReportVO.getId());
+                    vo.setGs903No(produceReportVO.getNo());
+                    vo.setGs903DataId(produceReportVO.getDataId());
+                } else if (produceReportVO.getNo().equals("ck_0100074")) {
+                    vo.setGs904(produceReportVO.getValue());
+                    vo.setGs904Id(produceReportVO.getId());
+                    vo.setGs904No(produceReportVO.getNo());
+                    vo.setGs904DataId(produceReportVO.getDataId());
+                } else if (produceReportVO.getNo().equals("ck_0100083")) {
+                    vo.setGs905(produceReportVO.getValue());
+                    vo.setGs905Id(produceReportVO.getId());
+                    vo.setGs905No(produceReportVO.getNo());
+                    vo.setGs905DataId(produceReportVO.getDataId());
+                } else if (produceReportVO.getNo().equals("ck_0100003")) {
+                    vo.setGs907(produceReportVO.getValue());
+                    vo.setGs907Id(produceReportVO.getId());
+                    vo.setGs907No(produceReportVO.getNo());
+                    vo.setGs907DataId(produceReportVO.getDataId());
+                } else if (produceReportVO.getNo().equals("ck_0100026")) {
+                    vo.setF160C(produceReportVO.getValue());
+                    vo.setF160CId(produceReportVO.getId());
+                    vo.setF160CNo(produceReportVO.getNo());
+                    vo.setF160CDataId(produceReportVO.getDataId());
+                } else if (produceReportVO.getNo().equals("ck_0100010")) {
+                    vo.setCM47B(produceReportVO.getValue());
+                    vo.setCM47BId(produceReportVO.getId());
+                    vo.setCM47BNo(produceReportVO.getNo());
+                    vo.setCM47BDataId(produceReportVO.getDataId());
+                } else if (produceReportVO.getNo().equals("ck_0100065")) {
+                    vo.setFhq(produceReportVO.getValue());
+                    vo.setFhqId(produceReportVO.getId());
+                    vo.setFhqNo(produceReportVO.getNo());
+                    vo.setFhqDataId(produceReportVO.getDataId());
+                } else if (produceReportVO.getNo().equals("ck_0100120")) {
+                    vo.setLxl(produceReportVO.getValue());
+                    vo.setLxlId(produceReportVO.getId());
+                    vo.setLxlNo(produceReportVO.getNo());
+                    vo.setLxlDataId(produceReportVO.getDataId());
+                } else if (produceReportVO.getNo().equals("ck_0100160")) {
+                    vo.setYj(produceReportVO.getValue());
+                    vo.setYjId(produceReportVO.getId());
+                    vo.setYjNo(produceReportVO.getNo());
+                    vo.setYjDataId(produceReportVO.getDataId());
+                } else if (produceReportVO.getNo().equals("ck_0100086")) {
+                    vo.setYs(produceReportVO.getValue());
+                    vo.setYsId(produceReportVO.getId());
+                    vo.setYsNo(produceReportVO.getNo());
+                    vo.setYsDataId(produceReportVO.getDataId());
+                } else if (produceReportVO.getNo().equals("ck_0100075")) {
+                    vo.setQyhn(produceReportVO.getValue());
+                    vo.setQyhnId(produceReportVO.getId());
+                    vo.setQyhnNo(produceReportVO.getNo());
+                    vo.setQyhnDataId(produceReportVO.getDataId());
+                } else if (produceReportVO.getNo().equals("dl_电")) {
+                    vo.setDian(produceReportVO.getValue());
+                    vo.setDianId(produceReportVO.getId());
+                    vo.setDianNo(produceReportVO.getNo());
+                    vo.setDianDataId(produceReportVO.getDataId());
+                } else if (produceReportVO.getNo().equals("dl_天然气_hy")) {
+                    vo.setGas(produceReportVO.getValue());
+                    vo.setGasId(produceReportVO.getId());
+                    vo.setGasNo(produceReportVO.getNo());
+                    vo.setGasDataId(produceReportVO.getDataId());
+                } else if (produceReportVO.getNo().equals("dl_蒸汽_hy")) {
+                    vo.setSteam(produceReportVO.getValue());
+                    vo.setSteamId(produceReportVO.getId());
+                    vo.setSteamNo(produceReportVO.getNo());
+                    vo.setSteamDataId(produceReportVO.getDataId());
+                } else if (produceReportVO.getNo().equals("dl_河水")) {
+                    vo.setRiverWater(produceReportVO.getValue());
+                    vo.setRiverWaterId(produceReportVO.getId());
+                    vo.setRiverWaterNo(produceReportVO.getNo());
+                    vo.setRiverWaterDataId(produceReportVO.getDataId());
+                } else {
+                    vo.setSewage(produceReportVO.getValue());
+                    vo.setSewageId(produceReportVO.getId());
+                    vo.setSewageNo(produceReportVO.getNo());
+                    vo.setSewageDataId(produceReportVO.getDataId());
+                }
+            }
+            resultList.add(vo);
+        }
+
+        // 排序
+        if (!CollectionUtils.isEmpty(resultList)) {
+            resultList = resultList.stream().sorted(Comparator.comparing(ProduceReportTianVO::getDate)).collect(Collectors.toList());
+        }
+        return resultList;
+    }
+
+    /**
+     * 更新每天的手工填报数据,需要重新计算年月数据
+     *
+     * @param produceReportTianVO
+     */
+    @Override
+    public void updateByDay(ProduceReportTianVO produceReportTianVO) {
+
+        // 天然气
+        if (StringUtils.isNotBlank(produceReportTianVO.getGasNo())) {
+            ProduceReportDTO model = new ProduceReportDTO();
+            model.setId(produceReportTianVO.getGasId());
+            model.setDataId(produceReportTianVO.getGasDataId());
+            model.setDate(produceReportTianVO.getDate());
+            model.setMonth(produceReportTianVO.getMonth());
+            model.setDay(produceReportTianVO.getDay());
+            model.setYear(produceReportTianVO.getYear());
+            model.setNo(produceReportTianVO.getGasNo());
+            model.setValue(produceReportTianVO.getGas());
+            this.modModelByDTO(model);
+        }
+        // 蒸汽
+        if (StringUtils.isNotBlank(produceReportTianVO.getSteamNo())) {
+            ProduceReportDTO model = new ProduceReportDTO();
+            model = new ProduceReportDTO();
+            model.setId(produceReportTianVO.getSteamId());
+            model.setDataId(produceReportTianVO.getSteamDataId());
+            model.setDate(produceReportTianVO.getDate());
+            model.setMonth(produceReportTianVO.getMonth());
+            model.setDay(produceReportTianVO.getDay());
+            model.setYear(produceReportTianVO.getYear());
+            model.setNo(produceReportTianVO.getSteamNo());
+            model.setValue(produceReportTianVO.getSteam());
+            this.modModelByDTO(model);
+        }
+        // 河水
+        if (StringUtils.isNotBlank(produceReportTianVO.getRiverWaterNo())) {
+            ProduceReportDTO model = new ProduceReportDTO();
+            model = new ProduceReportDTO();
+            model.setId(produceReportTianVO.getRiverWaterId());
+            model.setDataId(produceReportTianVO.getRiverWaterDataId());
+            model.setDate(produceReportTianVO.getDate());
+            model.setMonth(produceReportTianVO.getMonth());
+            model.setDay(produceReportTianVO.getDay());
+            model.setYear(produceReportTianVO.getYear());
+            model.setNo(produceReportTianVO.getRiverWaterNo());
+            model.setValue(produceReportTianVO.getRiverWater());
+            this.modModelByDTO(model);
+        }
+        // 污水
+        if (StringUtils.isNotBlank(produceReportTianVO.getSewageNo())) {
+            ProduceReportDTO model = new ProduceReportDTO();
+            model = new ProduceReportDTO();
+            model.setId(produceReportTianVO.getSewageId());
+            model.setDataId(produceReportTianVO.getSewageDataId());
+            model.setDate(produceReportTianVO.getDate());
+            model.setMonth(produceReportTianVO.getMonth());
+            model.setDay(produceReportTianVO.getDay());
+            model.setYear(produceReportTianVO.getYear());
+            model.setNo(produceReportTianVO.getSewageNo());
+            model.setValue(produceReportTianVO.getSewage());
+            this.modModelByDTO(model);
+        }
+    }
+
+    /**
+     * 电:
+     * <p>
+     *
+     * @param date
+     */
+    @Override
+    @Async
+    public void generateDian(LocalDate date, String value) {
+
+        // 电力记录数据
+        ProduceRecord record = new ProduceRecord();
+        record.setNo("电");
+        record.setTypeName("电量");
+        record.setType(ProduceRecordTypeEnum.DIAN.getValue());
+        record.setDate(date);
+        record.setProductNo("电");
+        record.setProductName("电");
+        record.setNum(new BigDecimal(value.trim()));
+        record.setUnit("度");
+        record.setId(IdGeneratorUtils.getObjectId());
+        record.setCreatedTime(LocalDateTime.now());
+        record.setStatus(YesNoEnum.NO.getValue());
+        produceRecordService.saveModel(record);
+    }
+
+    /**
+     * 同步液位数据:每天晚上11点开始同步
+     * 1: 新增记录
+     *
+     * @param produceRecordDTO
+     */
+    @Override
+    @Async
+    public void addYeweiRecord(List<ProduceRecordDTO> produceRecordDTO) {
+        for (ProduceRecordDTO recordDTO : produceRecordDTO) {
+            // 液位记录数据,只记录,不计算,计算留给计算任务来做,防止计算规则变动,影响采集
+            ProduceRecord record = new ProduceRecord();
+            record.setNo(recordDTO.getNo());
+            record.setTypeName("液位");
+            record.setType(ProduceRecordTypeEnum.YEWEI.getValue());
+            record.setDate(recordDTO.getDate());
+            record.setProductNo(recordDTO.getNo());
+            record.setProductName(recordDTO.getNo());
+            record.setNum(recordDTO.getNum());
+            record.setUnit("吨");
+            record.setId(IdGeneratorUtils.getObjectId());
+            record.setCreatedTime(LocalDateTime.now());
+            record.setStatus(YesNoEnum.NO.getValue());
+            produceRecordService.saveModel(record);
+        }
+    }
+}