瀏覽代碼

手动填报

hfxc226 17 小時之前
父節點
當前提交
1da77f9fb3

+ 0 - 9
platform-rest/src/main/java/com/platform/rest/task/DegreeTask.java

@@ -1,29 +1,21 @@
 package com.platform.rest.task;
 
-import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.platform.common.cache.ConfigCache;
-import com.platform.common.constant.RedisKeyConstants;
 import com.platform.common.exception.BusinessException;
 import com.platform.common.util.DateUtils;
 import com.platform.common.util.HttpUtil;
-import com.platform.common.util.RedisUtils;
-import com.platform.common.util.StringUtils;
 import com.platform.dao.dto.remote.RemoteDegreeLogDTO;
 import com.platform.dao.enums.SysConfigEnum;
 import com.platform.dao.vo.query.remote.RemoteOpcVO;
-import com.platform.dao.vo.remote.RemotePositionVO;
 import com.platform.service.big.BigScreenSbInfoService;
 import com.platform.service.produce.ProduceReportService;
 import com.platform.service.remote.RemoteOpcService;
-import com.platform.service.remote.RemotePositionService;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;
-import org.springframework.util.CollectionUtils;
 import tk.mybatis.mapper.util.StringUtil;
 
-import javax.annotation.Resource;
 import java.io.IOException;
 import java.math.BigDecimal;
 import java.time.LocalDate;
@@ -127,7 +119,6 @@ public class DegreeTask {
         remoteOpcService.sendToPurchase();
     }
 
-
     /**
      * 生成前一天的数据
      */

+ 116 - 105
platform-service/src/main/java/com/platform/service/produce/impl/ProduceReportServiceImpl.java

@@ -602,7 +602,7 @@ public class ProduceReportServiceImpl extends BaseServiceImpl<ProduceReportMappe
         param.put("a3", a3.doubleValue());
         generateYeweiTotalReport(date, param);
 
-        // 计算耗用,耗用等于库存-液位
+        // 计算当日库存,当日库存=液位
         generateYeweiReport(date, "ck_", "0100087_hy", SysConfigEnum.PRODUCE_YEWEI_903_HY.name());// 903
         generateYeweiReport(date, "ck_", "0100083_hy", SysConfigEnum.PRODUCE_YEWEI_905_HY.name());// 905
         generateYeweiReport(date, "ck_", "0100003_hy", SysConfigEnum.PRODUCE_YEWEI_907_HY.name());// 907
@@ -613,20 +613,31 @@ public class ProduceReportServiceImpl extends BaseServiceImpl<ProduceReportMappe
         generateYeweiReport(date, "ck_", "0100160_hy", SysConfigEnum.PRODUCE_YEWEI_YJ_HY.name());// 液碱
         generateYeweiReport(date, "ck_", "0100086_hy", SysConfigEnum.PRODUCE_YEWEI_YS_HY.name());// 盐酸
 
+        // 当日耗用
+        generateYWLStock(date, "ck_", "0100087_hy", SysConfigEnum.PRODUCE_YEWEI_903_HY.name());// 903
+        generateYWLStock(date, "ck_", "0100083_hy", SysConfigEnum.PRODUCE_YEWEI_905_HY.name());// 905
+        generateYWLStock(date, "ck_", "0100003_hy", SysConfigEnum.PRODUCE_YEWEI_907_HY.name());// 907
+        generateYWLStock(date, "ck_", "0100026_hy", SysConfigEnum.PRODUCE_YEWEI_F160C_HY.name());// F160C
+        generateYWLStock(date, "ck_", "0100010_hy", SysConfigEnum.PRODUCE_YEWEI_CM47B_HY.name());// CM47B
+        generateYWLStock(date, "ck_", "0100065_hy", SysConfigEnum.PRODUCE_YEWEI_QFS_HY.name());// 氢氟酸
+        generateYWLStock(date, "ck_", "0100120_hy", SysConfigEnum.PRODUCE_YEWEI_LXL_HY.name());// 硫酰氯
+        generateYWLStock(date, "ck_", "0100160_hy", SysConfigEnum.PRODUCE_YEWEI_YJ_HY.name());// 液碱
+        generateYWLStock(date, "ck_", "0100086_hy", SysConfigEnum.PRODUCE_YEWEI_YS_HY.name());// 盐酸
+
         // 单独计算904:月均单耗 = 本月耗用/CS-977月累计产量
-        generate904Report(date, "ck_", "0100074_hy");// 904
+        generate904Report(date, "ck_", "0100074_hy");// 904,977
 
         // 重新更新:24当日耗用=23当日库存+24当日入库-24库存
-        generateHyAgain(date, "ck_", "0100087_hy");// 903
+        generateHyAgain(date, "ck_", "0100087_hy");// 903,977
         //generateHyAgain(date, "ck_", "0100074_hy");// 904,还是从u8取,不用液位
-        generateHyAgain(date, "ck_", "0100083_hy");// 905
-        generateHyAgain(date, "ck_", "0100003_hy");// 907
-        generateHyAgain(date, "ck_", "0100026_hy");// F160C
-        generateHyAgain(date, "ck_", "0100010_hy");// CM47B
-        generateHyAgain(date, "ck_", "0100065_hy");// 氢氟酸
-        generateHyAgain(date, "ck_", "0100120_hy");// 硫酰氯
-        generateHyAgain(date, "ck_", "0100160_hy");// 液碱
-        generateHyAgain(date, "ck_", "0100086_hy");// 盐酸
+        generateHyAgain(date, "ck_", "0100083_hy");// 905,977
+        generateHyAgain(date, "ck_", "0100003_hy");// 907,977
+        generateHyAgain(date, "ck_", "0100026_hy");// F160C,977
+        generateHyAgain(date, "ck_", "0100010_hy");// CM47B,902
+        generateHyAgain(date, "ck_", "0100065_hy");// 氢氟酸,902
+        generateHyAgain(date, "ck_", "0100120_hy");// 硫酰氯,902
+        generateHyAgain(date, "ck_", "0100160_hy");// 液碱,902
+        generateHyAgain(date, "ck_", "0100086_hy");// 盐酸,902
 
         // 重新计算977的库存,直接从液位里面取得
         Weekend<ProduceReport> weekend = new Weekend<>(ProduceReport.class);
@@ -700,7 +711,12 @@ public class ProduceReportServiceImpl extends BaseServiceImpl<ProduceReportMappe
 
 
     /**
-     * 重新计算耗用:当日耗用=当日库存+当日入库-前一天库存
+     * 重新计算耗用:
+     * 1:当日耗用=DCS液位库存+当日入库-昨天的液位库存
+     * 2:本月耗用=累加单日耗用
+     * 3:年耗用=累加每日耗用
+     * 4:月均单耗=本月耗用/CS977
+     * 5:年耗用=累加每日耗用
      *
      * @param date
      * @param prefix
@@ -750,7 +766,8 @@ public class ProduceReportServiceImpl extends BaseServiceImpl<ProduceReportMappe
             ProduceReport inStock = mapper.selectOneByExample(weekend4);
 
             // 更新
-            report.setValue(new BigDecimal(reportStockPre.getValue()).add(new BigDecimal(inStock.getValue())).subtract(new BigDecimal(reportStock.getValue())).toString());
+            log.info("no: " + no + ", 液位库存: " + reportStock.getValue() + ", 当日入库: " + inStock.getValue() + ", 昨天液位: " + reportStockPre.getValue());
+            report.setValue(new BigDecimal(reportStock.getValue()).add(new BigDecimal(inStock.getValue())).subtract(new BigDecimal(reportStockPre.getValue())).toString());
             this.modModelByPrimaryKey(report);
 
             // 重新计算当日单耗和月均单耗
@@ -860,7 +877,7 @@ public class ProduceReportServiceImpl extends BaseServiceImpl<ProduceReportMappe
             monthReport.setUpdateTime(LocalDateTime.now());
             monthReport.setUpdateUserId(SecurityUtils.getUserInfo().getUserId());
             mapper.updateByPrimaryKey(monthReport);
-        }catch(Exception e){
+        } catch (Exception e) {
             e.printStackTrace();
             log.error(e.getStackTrace().toString());
             log.error(e.getMessage());
@@ -949,97 +966,7 @@ public class ProduceReportServiceImpl extends BaseServiceImpl<ProduceReportMappe
                 .andEqualTo(ProduceReport::getYear, date.getYear())
                 .andEqualTo(ProduceReport::getMonth, date.getMonthValue()).andEqualTo(ProduceReport::getDate, date);
         ProduceReport report = mapper.selectOneByExample(weekend2);
-        if (report != null) {// 说明存在了,是当日消耗,这个时候需要找到库存减去现在的数据就行了,然后计算单日
-            ProduceReportDTO dto = BeanConverterUtil.copyObjectProperties(report, ProduceReportDTO.class);
-            // 数据除以1000,换算成吨
-            total = total.divide(new BigDecimal(1000)).setScale(2, RoundingMode.HALF_UP);
-            dto.setUpdateTime(LocalDateTime.now());
-            Weekend<ProduceReport> weekend3 = new Weekend<>(ProduceReport.class);
-            WeekendCriteria<ProduceReport, Object> weekendCriteria3 = weekend3.weekendCriteria();
-            weekendCriteria3.andEqualTo(ProduceReport::getNo, "hy_" + no.replace("_hy", "_stock"))
-                    .andEqualTo(ProduceReport::getYear, date.getYear())
-                    .andEqualTo(ProduceReport::getMonth, date.getMonthValue())
-                    .andEqualTo(ProduceReport::getDay, date.getDayOfMonth())
-                    .andEqualTo(ProduceReport::getDate, date);
-            ProduceReport reportStock = mapper.selectOneByExample(weekend3);
-
-            // 液位量
-            BigDecimal yeweiStock = new BigDecimal(reportStock.getValue()).subtract(total);
-            dto.setValue(yeweiStock.toString());// 库存量-液位量
-            this.modModelByDTO(dto);
-
-            // 库存量改成液位库存量
-            reportStock.setValue(total.toString());
-            this.modModelByPrimaryKey(reportStock);
-
-            // 每单当日单耗和977生产量,如果生产量为0,则当日单耗为0
-            Weekend<ProduceReport> weekendDanhao = new Weekend<>(ProduceReport.class);
-            WeekendCriteria<ProduceReport, Object> weekendCriteriaDanhao = weekendDanhao.weekendCriteria();
-            weekendCriteriaDanhao.andEqualTo(ProduceReport::getNo, "hy_" + no.replace("_hy", ""))
-                    .andEqualTo(ProduceReport::getYear, date.getYear())
-                    .andEqualTo(ProduceReport::getMonth, date.getMonthValue())
-                    .andEqualTo(ProduceReport::getDay, date.getDayOfMonth())
-                    .andEqualTo(ProduceReport::getDate, date);
-            ProduceReport danhao = mapper.selectOneByExample(weekendDanhao);
-
-            // 默认977
-            String sclNo = "scl_0300027";
-            BigDecimal rate = new BigDecimal(1);
-            if (no.equals("0100010_hy") || no.equals("0100065_hy") || no.equals("0100120_hy") || no.equals("0100160_hy") || no.equals("0100086_hy")) {
-                sclNo = "scl_0600032";// 902
-                rate = new BigDecimal(1);
-            }
-            Weekend<ProduceReport> weekend977 = new Weekend<>(ProduceReport.class);
-            WeekendCriteria<ProduceReport, Object> weekendCriteria977 = weekend977.weekendCriteria();
-            weekendCriteria977.andEqualTo(ProduceReport::getNo, sclNo)
-                    .andEqualTo(ProduceReport::getYear, date.getYear())
-                    .andEqualTo(ProduceReport::getMonth, date.getMonthValue())
-                    .andEqualTo(ProduceReport::getDay, date.getDayOfMonth())
-                    .andEqualTo(ProduceReport::getDate, date);
-            ProduceReport cs077 = mapper.selectOneByExample(weekend977);
-
-            if (StringUtils.isBlank(cs077.getValue()) || new BigDecimal(cs077.getValue()).compareTo(new BigDecimal(0)) == 0 || new BigDecimal(cs077.getValue()).compareTo(new BigDecimal(0)) == 0) {
-                danhao.setValue("0");
-            } else {
-                danhao.setValue(yeweiStock.divide(new BigDecimal(cs077.getValue()).multiply(rate), RoundingMode.HALF_UP).setScale(2, RoundingMode.HALF_UP).toString());
-            }
-            this.modModelByPrimaryKey(danhao);
-
-            // 月均单耗=本月耗用/月累计产量,月均单耗和月产量977生产量,如果生产量为0,则单耗为0
-            Weekend<ProduceReport> weekendHyoMonth = new Weekend<>(ProduceReport.class);
-            WeekendCriteria<ProduceReport, Object> weekendCriteriaHyMonth = weekendHyoMonth.weekendCriteria();
-            weekendCriteriaHyMonth.andEqualTo(ProduceReport::getNo, "hy_" + no.replace("_hy", "_month"))
-                    .andEqualTo(ProduceReport::getYear, date.getYear())
-                    .andEqualTo(ProduceReport::getMonth, date.getMonthValue())
-                    .andEqualTo(ProduceReport::getDay, date.getDayOfMonth())
-                    .andEqualTo(ProduceReport::getDate, date);
-            ProduceReport danhaoMonth = mapper.selectOneByExample(weekendHyoMonth);
-
-            log.info("no: " + no);
-            Weekend<ProduceReport> weekendDanhaoMonth = new Weekend<>(ProduceReport.class);
-            WeekendCriteria<ProduceReport, Object> weekendCriteriaDanhaoMonth = weekendDanhaoMonth.weekendCriteria();
-            weekendCriteriaDanhaoMonth.andEqualTo(ProduceReport::getNo, "ck_" + no.replace("_hy", "_hy_month"))
-                    .andEqualTo(ProduceReport::getYear, date.getYear())
-                    .andEqualTo(ProduceReport::getMonth, date.getMonthValue())
-                    .andEqualTo(ProduceReport::getDay, date.getDayOfMonth())
-                    .andEqualTo(ProduceReport::getDate, date);
-            ProduceReport month = mapper.selectOneByExample(weekendDanhaoMonth);
-
-            Weekend<ProduceReport> weekend977Month = new Weekend<>(ProduceReport.class);
-            WeekendCriteria<ProduceReport, Object> weekendCriteria977Month = weekend977Month.weekendCriteria();
-            weekendCriteria977Month.andEqualTo(ProduceReport::getNo, sclNo + "_month")
-                    .andEqualTo(ProduceReport::getYear, date.getYear())
-                    .andEqualTo(ProduceReport::getMonth, date.getMonthValue())
-                    .andEqualTo(ProduceReport::getDay, date.getDayOfMonth())
-                    .andEqualTo(ProduceReport::getDate, date);
-            ProduceReport cs077Month = mapper.selectOneByExample(weekend977Month);
-            if (StringUtils.isBlank(cs077Month.getValue()) || new BigDecimal(cs077Month.getValue()).compareTo(new BigDecimal(0)) == 0) {
-                danhaoMonth.setValue("0");
-            } else {
-                danhaoMonth.setValue(new BigDecimal(month.getValue()).divide(new BigDecimal(cs077Month.getValue()).multiply(rate), RoundingMode.HALF_UP).setScale(2, RoundingMode.HALF_UP).toString());
-            }
-            this.modModelByPrimaryKey(danhaoMonth);
-        } else {
+        if (report == null) {
             report = BeanConverterUtil.copyObjectProperties(produceData, ProduceReport.class);
             report.setDate(date);
             report.setDataId(produceData.getId());
@@ -1056,6 +983,90 @@ public class ProduceReportServiceImpl extends BaseServiceImpl<ProduceReportMappe
         return total;
     }
 
+    /**
+     * 主要原物料用量
+     * 1:库存量=DCS液位库存
+     *
+     * @param date
+     */
+    public void generateYWLStock(LocalDate date, String prefix, String no, String configName) {
+        log.info("正在处理主要原物料用量耗用量:" + prefix + no);
+
+        // 找到对应填报数据
+        String value = ConfigCache.getLabelByValueAllowNull(configName);
+        log.info(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));
+            log.info("value:" + param.get("value"));
+            String result = null;
+            try {
+                result = getResultFromMap(col.get(1), param, 2);
+                log.info("表达式计算成功,结果:{}", result);
+            } catch (Exception e) {
+                e.printStackTrace();
+                log.error("表达式计算失败,表达式: {}, 错误: {}", col.get(1), e.getMessage(), e);
+                continue;
+            }
+            // 类型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);
+        }
+
+        // 数据除以1000,换算成吨
+        total = total.divide(new BigDecimal(1000)).setScale(2, RoundingMode.HALF_UP);
+        Weekend<ProduceReport> weekend3 = new Weekend<>(ProduceReport.class);
+        WeekendCriteria<ProduceReport, Object> weekendCriteria3 = weekend3.weekendCriteria();
+        weekendCriteria3.andEqualTo(ProduceReport::getNo, "hy_" + no.replace("_hy", "_stock"))
+                .andEqualTo(ProduceReport::getYear, date.getYear())
+                .andEqualTo(ProduceReport::getMonth, date.getMonthValue())
+                .andEqualTo(ProduceReport::getDay, date.getDayOfMonth())
+                .andEqualTo(ProduceReport::getDate, date);
+        ProduceReport reportStock = mapper.selectOneByExample(weekend3);
+
+        // 库存量改成液位库存量
+        reportStock.setValue(total.toString());
+        this.modModelByPrimaryKey(reportStock);
+
+    }
+
     /**
      * 液位:总计
      * 2:大于多少值,有值,小于多少为0