|
@@ -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
|