完善生产报表

This commit is contained in:
2023-10-11 16:26:33 +08:00
parent ddafe51d55
commit 10922c5c94
9 changed files with 162 additions and 254 deletions

View File

@@ -32,6 +32,12 @@ public class CoalWashingDailyAnalysisController extends BaseController {
return this.service.calculate(dto);
}
// @PostMapping("/predict")
// @SysLog(action = "预测分析")
// public CoalWashingDailyAnalysisDto predict(
// @RequestBody CreateCoalWashingDailyAnalysisDto dto) {
// return this.service.predict(dto);
// }
@PostMapping("/create")
@SysLog(action = "新增")
public CoalWashingDailyAnalysisDto create(@RequestBody CreateCoalWashingDailyAnalysisDto dto) {

View File

@@ -29,10 +29,10 @@ public class CoalWashingDailyAnalysisDto extends OrgCommonDto {
@CollectionTable(foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT))
private List<CoalWashingDailyAnalysisItemVo> inputItems;
@ElementCollection
@Comment("连续平均值")
@CollectionTable(foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT))
private List<CoalWashingDailyAnalysisItemVo> rollingAvgItems;
// @ElementCollection
// @Comment("连续平均值")
// @CollectionTable(foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT))
// private List<CoalWashingDailyAnalysisItemVo> rollingAvgItems;
@ElementCollection
@Comment("参数配置")
@@ -42,17 +42,35 @@ public class CoalWashingDailyAnalysisDto extends OrgCommonDto {
@Comment("目标大堆 灰")
private Double ddp1;
@Comment("目标大堆 灰")
private Double ddp1Min;
@Comment("目标大堆 硫")
private Double ddp2;
private Double ddp2Min;
@Comment("目标大堆 挥发")
private Double ddp3;
private Double ddp3Min;
@Comment("目标大堆 粘结")
private Double ddp4;
private Double ddp4Min;
@Comment("目标大堆 备用")
private Double ddp5;
private Double ddp5Min;
@Comment("目标大堆 灰")
private Double ddp1Max;
@Comment("目标大堆 硫")
private Double ddp2Max;
@Comment("目标大堆 挥发")
private Double ddp3Max;
@Comment("目标大堆 粘结")
private Double ddp4Max;
@Comment("目标大堆 备用")
private Double ddp5Max;
@Comment("产量初始值")
private Double initTotalNumber = 0.0;

View File

@@ -29,10 +29,10 @@ public class CreateCoalWashingDailyAnalysisDto extends OrgCommonDto {
@CollectionTable(foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT))
private List<CoalWashingDailyAnalysisItemVo> inputItems;
@ElementCollection
@Comment("连续平均值")
@CollectionTable(foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT))
private List<CoalWashingDailyAnalysisItemVo> rollingAvgItems;
// @ElementCollection
// @Comment("连续平均值")
// @CollectionTable(foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT))
// private List<CoalWashingDailyAnalysisItemVo> rollingAvgItems;
@ElementCollection
@Comment("参数配置")
@@ -40,19 +40,34 @@ public class CreateCoalWashingDailyAnalysisDto extends OrgCommonDto {
private List<CoalWashingDailyAnalysisParamVo> paramsInfo;
@Comment("目标大堆 灰")
private Double ddp1;
private Double ddp1Min;
@Comment("目标大堆 硫")
private Double ddp2;
private Double ddp2Min;
@Comment("目标大堆 挥发")
private Double ddp3;
private Double ddp3Min;
@Comment("目标大堆 粘结")
private Double ddp4;
private Double ddp4Min;
@Comment("目标大堆 备用")
private Double ddp5;
private Double ddp5Min;
@Comment("目标大堆 灰")
private Double ddp1Max;
@Comment("目标大堆 硫")
private Double ddp2Max;
@Comment("目标大堆 挥发")
private Double ddp3Max;
@Comment("目标大堆 粘结")
private Double ddp4Max;
@Comment("目标大堆 备用")
private Double ddp5Max;
@Comment("产量初始值")
private Double initTotalNumber = 0.0;
@@ -61,4 +76,6 @@ public class CreateCoalWashingDailyAnalysisDto extends OrgCommonDto {
private String remark2;
private String remark3;
private String remark4;
}

View File

@@ -0,0 +1,18 @@
package cn.lihongjie.coal.coalWashingDailyAnalysis.dto;
import lombok.Data;
import org.hibernate.annotations.Comment;
@Data
public class PredictCoalWashingDailyAnalysisDto extends CreateCoalWashingDailyAnalysisDto {
@Comment("选中行索引")
private Integer rowIndex;
@Comment("选中字段名称")
private String fieldName;
@Comment("需要计算的参数编码 c0 c1 c2 c3")
private String predictFieldName;
}

View File

@@ -29,10 +29,10 @@ public class UpdateCoalWashingDailyAnalysisDto extends OrgCommonDto {
@CollectionTable(foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT))
private List<CoalWashingDailyAnalysisItemVo> inputItems;
@ElementCollection
@Comment("连续平均值")
@CollectionTable(foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT))
private List<CoalWashingDailyAnalysisItemVo> rollingAvgItems;
// @ElementCollection
// @Comment("连续平均值")
// @CollectionTable(foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT))
// private List<CoalWashingDailyAnalysisItemVo> rollingAvgItems;
@ElementCollection
@Comment("参数配置")
@@ -40,19 +40,34 @@ public class UpdateCoalWashingDailyAnalysisDto extends OrgCommonDto {
private List<CoalWashingDailyAnalysisParamVo> paramsInfo;
@Comment("目标大堆 灰")
private Double ddp1;
private Double ddp1Min;
@Comment("目标大堆 硫")
private Double ddp2;
private Double ddp2Min;
@Comment("目标大堆 挥发")
private Double ddp3;
private Double ddp3Min;
@Comment("目标大堆 粘结")
private Double ddp4;
private Double ddp4Min;
@Comment("目标大堆 备用")
private Double ddp5;
private Double ddp5Min;
@Comment("目标大堆 灰")
private Double ddp1Max;
@Comment("目标大堆 硫")
private Double ddp2Max;
@Comment("目标大堆 挥发")
private Double ddp3Max;
@Comment("目标大堆 粘结")
private Double ddp4Max;
@Comment("目标大堆 备用")
private Double ddp5Max;
@Comment("产量初始值")
private Double initTotalNumber = 0.0;

View File

@@ -12,7 +12,6 @@ import org.hibernate.annotations.Comment;
import java.time.LocalDate;
import java.time.LocalTime;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
@@ -30,10 +29,10 @@ public class CoalWashingDailyAnalysisEntity extends OrgCommonEntity {
@CollectionTable(foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT))
private List<CoalWashingDailyAnalysisItemVo> inputItems;
@ElementCollection
@Comment("连续平均值")
@CollectionTable(foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT))
private List<CoalWashingDailyAnalysisItemVo> rollingAvgItems;
// @ElementCollection
// @Comment("连续平均值")
// @CollectionTable(foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT))
// private List<CoalWashingDailyAnalysisItemVo> rollingAvgItems;
@ElementCollection
@Comment("参数配置")
@@ -41,19 +40,34 @@ public class CoalWashingDailyAnalysisEntity extends OrgCommonEntity {
private List<CoalWashingDailyAnalysisParamVo> paramsInfo;
@Comment("目标大堆 灰")
private Double ddp1;
private Double ddp1Min;
@Comment("目标大堆 硫")
private Double ddp2;
private Double ddp2Min;
@Comment("目标大堆 挥发")
private Double ddp3;
private Double ddp3Min;
@Comment("目标大堆 粘结")
private Double ddp4;
private Double ddp4Min;
@Comment("目标大堆 备用")
private Double ddp5;
private Double ddp5Min;
@Comment("目标大堆 灰")
private Double ddp1Max;
@Comment("目标大堆 硫")
private Double ddp2Max;
@Comment("目标大堆 挥发")
private Double ddp3Max;
@Comment("目标大堆 粘结")
private Double ddp4Max;
@Comment("目标大堆 备用")
private Double ddp5Max;
@Comment("产量初始值")
private Double initTotalNumber = 0.0;
@@ -63,231 +77,34 @@ public class CoalWashingDailyAnalysisEntity extends OrgCommonEntity {
private String remark3;
private String remark4;
public void rollingAvg() {
rollingAvgItems = new ArrayList<>();
public void calculate() {
if (CollectionUtils.isEmpty(inputItems)) {
return;
}
inputItems.sort(
Comparator.comparing(x -> ObjectUtils.defaultIfNull(x.getTime(), LocalTime.MIN)));
inputItems.forEach(x -> x.calculate());
inputItems.forEach(CoalWashingDailyAnalysisItemVo::calculate);
for (int i = 0; i < inputItems.size(); i++) {
Double prevNumber = ObjectUtils.defaultIfNull(initTotalNumber, 0.0);
// 总的权重
Double totalWeight = 0.0;
// 大堆平均之和
Double avgSum1 = 0.0;
Double avgSum2 = 0.0;
List<CoalWashingDailyAnalysisItemVo> current = inputItems.subList(0, i + 1);
rollingAvgItems.add(rollingAvg(current));
for (CoalWashingDailyAnalysisItemVo inputItem : inputItems) {
totalWeight +=
inputItem.getTotalNumber() == null
? 1
: inputItem.getTotalNumber() - prevNumber;
avgSum1 += ObjectUtils.defaultIfNull(inputItem.getAvgDdp1(), 0.0);
avgSum2 += ObjectUtils.defaultIfNull(inputItem.getAvgDdp2(), 0.0);
inputItem.setRollingAvgDdp1(avgSum1 / totalWeight);
inputItem.setRollingAvgDdp2(avgSum2 / totalWeight);
}
}
private CoalWashingDailyAnalysisItemVo rollingAvg(
List<CoalWashingDailyAnalysisItemVo> current) {
CoalWashingDailyAnalysisItemVo vo = new CoalWashingDailyAnalysisItemVo();
int size = current.size();
vo.setTime(current.get(size - 1).getTime());
vo.setTotalNumber(current.get(size - 1).getTotalNumber());
vo.setC0p0(current.get(size - 1).getC0p0());
vo.setC1p0(current.get(size - 1).getC1p0());
vo.setC2p0(current.get(size - 1).getC2p0());
vo.setC3p0(current.get(size - 1).getC3p0());
vo.setC4p0(current.get(size - 1).getC4p0());
vo.setC5p0(current.get(size - 1).getC5p0());
vo.setC6p0(current.get(size - 1).getC6p0());
vo.setC7p0(current.get(size - 1).getC7p0());
vo.setC8p0(current.get(size - 1).getC8p0());
vo.setC9p0(current.get(size - 1).getC9p0());
for (int i = 0; i < size; i++) {
var c = current.get(i);
var p = i == 0 ? c.withTotalNumber(initTotalNumber) : current.get(i - 1);
double diff = c.getTotalNumber() - p.getTotalNumber();
if (vo.getC0p0() != null && vo.getC0p0() > 0) {
vo.setC0p1(ObjectUtils.defaultIfNull(vo.getC0p1(), 0.0) + diff * c.getC0p1());
vo.setC0p2(ObjectUtils.defaultIfNull(vo.getC0p2(), 0.0) + diff * c.getC0p1());
if (i == size - 1) {
vo.setC0p1(vo.getC0p1() / c.getTotalNumber());
vo.setC0p2(vo.getC0p2() / c.getTotalNumber());
}
}
if (vo.getC1p0() != null && vo.getC1p0() > 0) {
vo.setC1p1(ObjectUtils.defaultIfNull(vo.getC1p1(), 0.0) + diff * c.getC1p1());
vo.setC1p2(ObjectUtils.defaultIfNull(vo.getC1p2(), 0.0) + diff * c.getC1p1());
if (i == size - 1) {
vo.setC1p1(vo.getC1p1() / c.getTotalNumber());
vo.setC1p2(vo.getC1p2() / c.getTotalNumber());
}
}
if (vo.getC2p0() != null && vo.getC2p0() > 0) {
vo.setC2p1(ObjectUtils.defaultIfNull(vo.getC2p1(), 0.0) + diff * c.getC2p1());
vo.setC2p2(ObjectUtils.defaultIfNull(vo.getC2p2(), 0.0) + diff * c.getC2p1());
if (i == size - 1) {
vo.setC2p1(vo.getC2p1() / c.getTotalNumber());
vo.setC2p2(vo.getC2p2() / c.getTotalNumber());
}
}
if (vo.getC3p0() != null && vo.getC3p0() > 0) {
vo.setC3p1(ObjectUtils.defaultIfNull(vo.getC3p1(), 0.0) + diff * c.getC3p1());
vo.setC3p2(ObjectUtils.defaultIfNull(vo.getC3p2(), 0.0) + diff * c.getC3p1());
if (i == size - 1) {
vo.setC3p1(vo.getC3p1() / c.getTotalNumber());
vo.setC3p2(vo.getC3p2() / c.getTotalNumber());
}
}
if (vo.getC4p0() != null && vo.getC4p0() > 0) {
vo.setC4p1(ObjectUtils.defaultIfNull(vo.getC4p1(), 0.0) + diff * c.getC4p1());
vo.setC4p2(ObjectUtils.defaultIfNull(vo.getC4p2(), 0.0) + diff * c.getC4p1());
if (i == size - 1) {
vo.setC4p1(vo.getC4p1() / c.getTotalNumber());
vo.setC4p2(vo.getC4p2() / c.getTotalNumber());
}
}
if (vo.getC5p0() != null && vo.getC5p0() > 0) {
vo.setC5p1(ObjectUtils.defaultIfNull(vo.getC5p1(), 0.0) + diff * c.getC5p1());
vo.setC5p2(ObjectUtils.defaultIfNull(vo.getC5p2(), 0.0) + diff * c.getC5p1());
if (i == size - 1) {
vo.setC5p1(vo.getC5p1() / c.getTotalNumber());
vo.setC5p2(vo.getC5p2() / c.getTotalNumber());
}
}
if (vo.getC6p0() != null && vo.getC6p0() > 0) {
vo.setC6p1(ObjectUtils.defaultIfNull(vo.getC6p1(), 0.0) + diff * c.getC6p1());
vo.setC6p2(ObjectUtils.defaultIfNull(vo.getC6p2(), 0.0) + diff * c.getC6p1());
if (i == size - 1) {
vo.setC6p1(vo.getC6p1() / c.getTotalNumber());
vo.setC6p2(vo.getC6p2() / c.getTotalNumber());
}
}
if (vo.getC7p0() != null && vo.getC7p0() > 0) {
vo.setC7p1(ObjectUtils.defaultIfNull(vo.getC7p1(), 0.0) + diff * c.getC7p1());
vo.setC7p2(ObjectUtils.defaultIfNull(vo.getC7p2(), 0.0) + diff * c.getC7p1());
if (i == size - 1) {
vo.setC7p1(vo.getC7p1() / c.getTotalNumber());
vo.setC7p2(vo.getC7p2() / c.getTotalNumber());
}
}
if (vo.getC8p0() != null && vo.getC8p0() > 0) {
vo.setC8p1(ObjectUtils.defaultIfNull(vo.getC8p1(), 0.0) + diff * c.getC8p1());
vo.setC8p2(ObjectUtils.defaultIfNull(vo.getC8p2(), 0.0) + diff * c.getC8p1());
if (i == size - 1) {
vo.setC8p1(vo.getC8p1() / c.getTotalNumber());
vo.setC8p2(vo.getC8p2() / c.getTotalNumber());
}
}
if (vo.getC9p0() != null && vo.getC9p0() > 0) {
vo.setC9p1(ObjectUtils.defaultIfNull(vo.getC9p1(), 0.0) + diff * c.getC9p1());
vo.setC9p2(ObjectUtils.defaultIfNull(vo.getC9p2(), 0.0) + diff * c.getC9p1());
if (i == size - 1) {
vo.setC9p1(vo.getC9p1() / c.getTotalNumber());
vo.setC9p2(vo.getC9p2() / c.getTotalNumber());
}
}
vo.setDdp1(
ObjectUtils.defaultIfNull(vo.getDdp1(), 0.0)
+ diff * ObjectUtils.defaultIfNull(c.getDdp1(), 0.0));
if (i == size - 1) {
vo.setDdp1(vo.getDdp1() / c.getTotalNumber());
}
vo.setDdp2(
ObjectUtils.defaultIfNull(vo.getDdp2(), 0.0)
+ diff * ObjectUtils.defaultIfNull(c.getDdp2(), 0.0));
if (i == size - 1) {
vo.setDdp2(vo.getDdp2() / c.getTotalNumber());
}
vo.setDdp3(
ObjectUtils.defaultIfNull(vo.getDdp3(), 0.0)
+ diff * ObjectUtils.defaultIfNull(c.getDdp3(), 0.0));
if (i == size - 1) {
vo.setDdp3(vo.getDdp3() / c.getTotalNumber());
}
vo.setDdp4(
ObjectUtils.defaultIfNull(vo.getDdp4(), 0.0)
+ diff * ObjectUtils.defaultIfNull(c.getDdp4(), 0.0));
if (i == size - 1) {
vo.setDdp4(vo.getDdp4() / c.getTotalNumber());
}
vo.setDdp5(
ObjectUtils.defaultIfNull(vo.getDdp5(), 0.0)
+ diff * ObjectUtils.defaultIfNull(c.getDdp5(), 0.0));
if (i == size - 1) {
vo.setDdp5(vo.getDdp5() / c.getTotalNumber());
}
vo.setSysDdp1(
ObjectUtils.defaultIfNull(vo.getSysDdp1(), 0.0)
+ diff * ObjectUtils.defaultIfNull(c.getSysDdp1(), 0.0));
if (i == size - 1) {
vo.setSysDdp1(vo.getSysDdp1() / c.getTotalNumber());
}
vo.setSysDdp2(
ObjectUtils.defaultIfNull(vo.getSysDdp2(), 0.0)
+ diff * ObjectUtils.defaultIfNull(c.getSysDdp2(), 0.0));
if (i == size - 1) {
vo.setSysDdp2(vo.getSysDdp2() / c.getTotalNumber());
}
vo.setSysDdp3(
ObjectUtils.defaultIfNull(vo.getSysDdp3(), 0.0)
+ diff * ObjectUtils.defaultIfNull(c.getSysDdp3(), 0.0));
if (i == size - 1) {
vo.setSysDdp3(vo.getSysDdp3() / c.getTotalNumber());
}
vo.setSysDdp4(
ObjectUtils.defaultIfNull(vo.getSysDdp4(), 0.0)
+ diff * ObjectUtils.defaultIfNull(c.getSysDdp4(), 0.0));
if (i == size - 1) {
vo.setSysDdp4(vo.getSysDdp4() / c.getTotalNumber());
}
vo.setSysDdp5(
ObjectUtils.defaultIfNull(vo.getSysDdp5(), 0.0)
+ diff * ObjectUtils.defaultIfNull(c.getSysDdp5(), 0.0));
if (i == size - 1) {
vo.setSysDdp5(vo.getSysDdp5() / c.getTotalNumber());
}
vo.setAvgDdp1(
ObjectUtils.defaultIfNull(vo.getAvgDdp1(), 0.0)
+ diff * ObjectUtils.defaultIfNull(c.getAvgDdp1(), 0.0));
if (i == size - 1) {
vo.setAvgDdp1(vo.getAvgDdp1() / c.getTotalNumber());
}
vo.setAvgDdp2(
ObjectUtils.defaultIfNull(vo.getAvgDdp2(), 0.0)
+ diff * ObjectUtils.defaultIfNull(c.getAvgDdp2(), 0.0));
if (i == size - 1) {
vo.setAvgDdp2(vo.getAvgDdp2() / c.getTotalNumber());
}
vo.setAvgDdp3(
ObjectUtils.defaultIfNull(vo.getAvgDdp3(), 0.0)
+ diff * ObjectUtils.defaultIfNull(c.getAvgDdp3(), 0.0));
if (i == size - 1) {
vo.setAvgDdp3(vo.getAvgDdp3() / c.getTotalNumber());
}
vo.setAvgDdp4(
ObjectUtils.defaultIfNull(vo.getAvgDdp4(), 0.0)
+ diff * ObjectUtils.defaultIfNull(c.getAvgDdp4(), 0.0));
if (i == size - 1) {
vo.setAvgDdp4(vo.getAvgDdp4() / c.getTotalNumber());
}
vo.setAvgDdp5(
ObjectUtils.defaultIfNull(vo.getAvgDdp5(), 0.0)
+ diff * ObjectUtils.defaultIfNull(c.getAvgDdp5(), 0.0));
if (i == size - 1) {
vo.setAvgDdp5(vo.getAvgDdp5() / c.getTotalNumber());
}
}
return vo;
}
}

View File

@@ -179,6 +179,21 @@ public class CoalWashingDailyAnalysisItemVo {
@Comment("用户输入与系统计算的平均值 大堆 备用")
private Double avgDdp5;
@Comment("累计平均 大堆 灰")
private Double rollingAvgDdp1;
@Comment("累计平均 大堆 硫")
private Double rollingAvgDdp2;
@Comment("累计平均 大堆 挥发")
private Double rollingAvgDdp3;
@Comment("累计平均 大堆 粘结")
private Double rollingAvgDdp4;
@Comment("累计平均 大堆 备用")
private Double rollingAvgDdp5;
public void calculate() {
if (Stream.of(c0p0, c1p0, c2p0, c3p0, c4p0, c5p0, c6p0, c7p0, c8p0, c9p0)

View File

@@ -49,7 +49,7 @@ public class CoalWashingDailyAnalysisService
CoalWashingDailyAnalysisEntity entity = mapper.toEntity(request);
entity.rollingAvg();
entity.calculate();
return mapper.toDto(roundMapper.round(entity));
}
@@ -87,4 +87,6 @@ public class CoalWashingDailyAnalysisService
return page.map(this.mapper::toDto);
}
}

View File

@@ -31,7 +31,7 @@ class CoalWashingDailyAnalysisEntityTest {
analysis.setInputItems(Arrays.asList(vo1, vo2));
analysis.rollingAvg();
analysis.calculate();
System.out.println(analysis);
}