From 6e577ee1020d94d9e9416bacde3ee66e761dc813 Mon Sep 17 00:00:00 2001 From: yxw Date: Tue, 14 Nov 2023 18:57:27 +0800 Subject: [PATCH] =?UTF-8?q?=E5=98=89=E5=85=B4=E5=B7=A5=E7=A8=8B=E4=B8=8D?= =?UTF-8?q?=E8=89=AF=E5=AE=9E=E7=BB=A9=E6=8A=A5=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../busi/jx/IJxBadStatisticsReportFormService.java | 22 ++ .../controller/busi/jx/JxReportController.java | 22 ++ .../daoimpl/ProjectContainersComputeChartDao.java | 8 +- .../serviceimpl/base/jx/JxOqcProjectService.java | 1 + .../busi/SxBadStatisticsReportFormService.java | 1 + .../busi/jx/JxBadStatisticsReportFormService.java | 262 +++++++++++++++++++++ .../model/ProjectBadPerformanceReportModel.java | 10 + .../jx/JxProjectBadPerformanceReportModel.java | 34 +++ .../i3plus/ext/mes/pojo/util/MesExtConstWords.java | 3 + 9 files changed, 359 insertions(+), 4 deletions(-) create mode 100644 modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/jx/IJxBadStatisticsReportFormService.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/jx/JxBadStatisticsReportFormService.java create mode 100644 modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/jx/JxProjectBadPerformanceReportModel.java diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/jx/IJxBadStatisticsReportFormService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/jx/IJxBadStatisticsReportFormService.java new file mode 100644 index 0000000..95884e6 --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/jx/IJxBadStatisticsReportFormService.java @@ -0,0 +1,22 @@ +package cn.estsh.i3plus.ext.mes.api.busi.jx; + +import cn.estsh.i3plus.ext.mes.pojo.model.BadStatisticsReportParamModel; +import cn.estsh.i3plus.ext.mes.pojo.model.jx.JxProjectBadPerformanceReportModel; +import io.swagger.annotations.ApiOperation; + + +/** + * @Author: wangjie + * @CreateDate: 2021/01/19 15:06 下午 + * @Description: 不良统计报表 + **/ +public interface IJxBadStatisticsReportFormService { + + /** + * 工程不良实绩报表 + * @param model 查询条件 + * @return 工程不良实绩集合 + */ + @ApiOperation(value = "工程不良实绩报表", notes = "工程不良实绩报表") + JxProjectBadPerformanceReportModel queryProjectBadPerformance(BadStatisticsReportParamModel model); +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/jx/JxReportController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/jx/JxReportController.java index 0e41e31..7bb8aba 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/jx/JxReportController.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/jx/JxReportController.java @@ -1,7 +1,9 @@ package cn.estsh.i3plus.ext.mes.apiservice.controller.busi.jx; +import cn.estsh.i3plus.ext.mes.api.busi.jx.IJxBadStatisticsReportFormService; import cn.estsh.i3plus.ext.mes.api.busi.jx.IJxProductReportService; import cn.estsh.i3plus.ext.mes.pojo.bean.MesProdBindRecordExt; +import cn.estsh.i3plus.ext.mes.pojo.model.BadStatisticsReportParamModel; import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; @@ -11,6 +13,7 @@ import cn.estsh.impp.framework.boot.auth.AuthUtil; import cn.estsh.impp.framework.boot.exception.ImppBusiException; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; import cn.estsh.impp.framework.boot.util.ResultBean; +import cn.estsh.impp.framework.boot.util.ValidatorBean; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; @@ -32,6 +35,9 @@ public class JxReportController extends MesBaseController { @Autowired private IJxProductReportService productReportService; + @Autowired + private IJxBadStatisticsReportFormService badStatisticsReportFormService; + @GetMapping(value = "/mes-prod-bind-record/query") @ApiOperation(value = "按条件分页查询MES物料绑定记录数据") public ResultBean queryMesProdBindRecord(MesProdBindRecordExt prodBindRecordExt, Pager pager) { @@ -47,4 +53,20 @@ public class JxReportController extends MesBaseController { } } + @GetMapping(value = "/project-bad-performance/query") + @ApiOperation(value = "工程不良实绩报表") + public ResultBean queryProjectBadPerformance(BadStatisticsReportParamModel model) { + try { + ValidatorBean.beginValid(model) + .notNull(MesExtConstWords.DIMENSION, model.getDimension()); + model.setOrganizeCode(AuthUtil.getOrganize().getOrganizeCode()); + return ResultBean.success("查询成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()) + .setResultObject(badStatisticsReportFormService.queryProjectBadPerformance(model)); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/ProjectContainersComputeChartDao.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/ProjectContainersComputeChartDao.java index 2503b67..03ec7d4 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/ProjectContainersComputeChartDao.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/ProjectContainersComputeChartDao.java @@ -731,9 +731,9 @@ public class ProjectContainersComputeChartDao implements IProjectContainersCompu " o1.produce_qty AS produceQty, " + " b.part_no AS partNo, " + " b.part_name_rdd AS partNameRdd, " + - " re.repair_judge AS repairJudge, " + - " count( re.repair_judge ) AS rJuCounts, " + - " count( re.repair_judge ) / o1.produce_qty AS reRate " + + " re.repair_judge_code AS repairJudge, " + + " count( re.repair_judge_code ) AS rJuCounts, " + + " count( re.repair_judge_code ) / o1.produce_qty AS reRate " + " FROM " + " mes_bad_cell_detail AS b " + " LEFT JOIN mes_repair_record r ON r.defect_record_id = b.id " + @@ -773,7 +773,7 @@ public class ProjectContainersComputeChartDao implements IProjectContainersCompu hql.append(" AND b.part_no = :partNo " ); } if (!StringUtils.isEmpty(paramModel.getRepairJudge())) { - hql.append(" AND re.repair_judge = :repairJudge " ); + hql.append(" AND re.repair_judge_code = :repairJudge " ); } hql.append( diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/jx/JxOqcProjectService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/jx/JxOqcProjectService.java index 27a46c9..16f93c7 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/jx/JxOqcProjectService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/jx/JxOqcProjectService.java @@ -157,6 +157,7 @@ public class JxOqcProjectService implements IJxOqcProjectService { oqcProject.setOqcNoType(model.getOqcNoType()); oqcProject.setCheckItem(model.getCheckItem()); oqcProject.setStandard(model.getStandard()); + oqcProject.setStandardValue(model.getStandardValue()); oqcProject.setUpLimit(model.getUpLimit()); oqcProject.setDownLimit(model.getDownLimit()); oqcProject.setCheckType(model.getCheckType()); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/SxBadStatisticsReportFormService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/SxBadStatisticsReportFormService.java index a5599b7..c2ef043 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/SxBadStatisticsReportFormService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/SxBadStatisticsReportFormService.java @@ -102,6 +102,7 @@ public class SxBadStatisticsReportFormService implements ISxBadStatisticsReportF String[] keyArr = key.split(MesExtConstWords.AND); ProjectBadPerformanceReportModel result = new ProjectBadPerformanceReportModel(); + result.setWorkTime(keyArr[0]); result.setWorkCenterCode(keyArr[1]); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/jx/JxBadStatisticsReportFormService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/jx/JxBadStatisticsReportFormService.java new file mode 100644 index 0000000..744a890 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/jx/JxBadStatisticsReportFormService.java @@ -0,0 +1,262 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.busi.jx; + +import cn.estsh.i3plus.ext.mes.api.base.jx.IJxRepairJudgeTypeService; +import cn.estsh.i3plus.ext.mes.api.busi.ISxBadStatisticsReportFormService; +import cn.estsh.i3plus.ext.mes.api.busi.jx.IJxBadStatisticsReportFormService; +import cn.estsh.i3plus.ext.mes.apiservice.dao.ISxRepairRecordDao; +import cn.estsh.i3plus.ext.mes.pojo.bean.MesBadCell; +import cn.estsh.i3plus.ext.mes.pojo.bean.MesBadCellDetail; +import cn.estsh.i3plus.ext.mes.pojo.bean.MesOutPutStatistics; +import cn.estsh.i3plus.ext.mes.pojo.bean.MesRepairRecordExt; +import cn.estsh.i3plus.ext.mes.pojo.model.BadStatisticsReportModel; +import cn.estsh.i3plus.ext.mes.pojo.model.BadStatisticsReportParamModel; +import cn.estsh.i3plus.ext.mes.pojo.model.ProjectBadPerformanceReportModel; +import cn.estsh.i3plus.ext.mes.pojo.model.SxRepairRecordReportModel; +import cn.estsh.i3plus.ext.mes.pojo.model.jx.JxOqcCheckStatisticsReportModel; +import cn.estsh.i3plus.ext.mes.pojo.model.jx.JxProjectBadPerformanceReportModel; +import cn.estsh.i3plus.ext.mes.pojo.model.jx.SxDynamicAttributeModel; +import cn.estsh.i3plus.ext.mes.pojo.repository.MesBadCellDetailRepository; +import cn.estsh.i3plus.ext.mes.pojo.repository.MesBadCellRepository; +import cn.estsh.i3plus.ext.mes.pojo.repository.MesOutPutStatisticsRepository; +import cn.estsh.i3plus.ext.mes.pojo.repository.MesRepairRecordExtRepository; +import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; +import cn.estsh.i3plus.ext.mes.pojo.util.MesExtEnumUtil; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; +import cn.estsh.i3plus.platform.common.tool.MathOperation; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.common.PagerHelper; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.impp.framework.boot.auth.AuthUtil; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * @author wangjie + * @version 1.0 + * @date 2021/1/13 9:28 + **/ +@Slf4j +@Service +public class JxBadStatisticsReportFormService implements IJxBadStatisticsReportFormService { + + @Autowired + private MesOutPutStatisticsRepository outPutStatisticsRepository; + + @Autowired + private MesRepairRecordExtRepository repairRecordExtRepository; + + @Autowired + private IJxRepairJudgeTypeService repairJudgeTypeService; + + @Override + public JxProjectBadPerformanceReportModel queryProjectBadPerformance(BadStatisticsReportParamModel model) { + JxProjectBadPerformanceReportModel result = null; + DdlPackBean packBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(model.getWorkCenterCode(), MesExtConstWords.WORK_CENTER_CODE, packBean); + if (!StringUtils.isEmpty(model.getWorkTimeStart()) || !StringUtils.isEmpty(model.getWorkTimeEnd())) { + DdlPreparedPack.timeBuilder(model.getWorkTimeStart(), model.getWorkTimeEnd(), MesExtConstWords.WORK_TIME, packBean, false); + } + + List repairRecordExtList = repairRecordExtRepository.findByHqlWhere(packBean); + if (CollectionUtils.isEmpty(repairRecordExtList)) { + log.info("工程不良实绩未查询到维修数据,维度[{}]", MesExtEnumUtil.REPORT_DIMENSION_DAY_OR_MONTH.valueOfDescription(model.getDimension())); + return result; + } + + result = new JxProjectBadPerformanceReportModel(); + + log.info("工程不良实绩已查询到维修数据,维度[{}]", MesExtEnumUtil.REPORT_DIMENSION_DAY_OR_MONTH.valueOfDescription(model.getDimension())); + packRepairRecordWorkTime(repairRecordExtList, model); + + Map> repairRecordMap = packRepairRecordMap(repairRecordExtList); + + List outPutStatisticsList = outPutStatisticsRepository.findByHqlWhere(packBean); + Map> outPutStatisticsMap = null; + if (!CollectionUtils.isEmpty(outPutStatisticsList)) { + log.info("工程不良实绩已查询到产量数据,维度[{}]", MesExtEnumUtil.REPORT_DIMENSION_DAY_OR_MONTH.valueOfDescription(model.getDimension())); + packOutPutStatisticsWorkTime(outPutStatisticsList, model); + + outPutStatisticsMap = packOutPutStatisticsMapForProjectBadPerformance(outPutStatisticsList); + } else { + log.info("工程不良实绩未查询到产量数据,维度[{}]", MesExtEnumUtil.REPORT_DIMENSION_DAY_OR_MONTH.valueOfDescription(model.getDimension())); + } + + // 维修判定map + Map repairJudgeMap = repairJudgeTypeService.queryRepairJudgeMap(model.getOrganizeCode()); + + packBaseAttributeList4ProjectBadStatistics(result, repairJudgeMap); + + List> resultMapList = new ArrayList<>(); + + for (String key : repairRecordMap.keySet()) { + if (StringUtils.isEmpty(key)) { + continue; + } + List itemList = repairRecordMap.get(key); + if (CollectionUtils.isEmpty(itemList)) { + continue; + } + + String[] keyArr = key.split(MesExtConstWords.AND); + //ProjectBadPerformanceReportModel result = new ProjectBadPerformanceReportModel(); + + Map resultMap = new HashMap<>(); + + resultMap.put(MesExtConstWords.WORK_TIME, keyArr[0]); + resultMap.put(MesExtConstWords.WORK_CENTER_CODE, keyArr[1]); + + //result.setWorkTime(keyArr[0]); + //result.setWorkCenterCode(keyArr[1]); + + List itemOutPutStatisticsList = CollectionUtils.isEmpty(outPutStatisticsMap) ? null : outPutStatisticsMap.get(key); + //总产量 + //result.setQty(getQty(itemOutPutStatisticsList)); + resultMap.put(MesExtConstWords.QTY, getQty(itemOutPutStatisticsList)); + //误判数 + //result.setMisjudgeQty(getBadQtyByType(itemList, MesExtEnumUtil.REPAIR_JUDGE.MISJUDGE.getValue())); + if (!CollectionUtils.isEmpty(repairJudgeMap)) { + for (Map.Entry entry : repairJudgeMap.entrySet()) { + resultMap.put(entry.getKey(), getBadQtyByType(itemList, entry.getKey())); + resultMap.put(entry.getKey() + "Rate", getRateDecimalOne((Double)resultMap.get(entry.getKey()), (Double)resultMap.get(MesExtConstWords.QTY))); + } + } + ////误判率 + //result.setMisjudgeRate(getRateDecimalOne(result.getMisjudgeQty(), result.getQty())); + ////部品不良数 + //result.setPartsBadQty(getBadQtyByType(itemList, MesExtEnumUtil.REPAIR_JUDGE.PARTS_BAD.getValue())); + ////部品不良率 + //result.setPartsBadRate(getRateDecimalOne(result.getPartsBadQty(), result.getQty())); + ////作业不良数 + //result.setTaskBadQty(getBadQtyByType(itemList, MesExtEnumUtil.REPAIR_JUDGE.TASK_BAD.getValue())); + //作业不良率 + //result.setTaskBadRate(getRateDecimalOne(result.getTaskBadQty(), result.getQty())); + //总不良率 + resultMap.put(MesExtConstWords.AMOUNT_BAD_RATE, getRateDecimalOne(CollectionUtils.isEmpty(itemList) ? new Double(0) : new Double(itemList.size()), (Double)resultMap.get(MesExtConstWords.QTY))); + //result.setAmountBadRate(getRateDecimalOne(CollectionUtils.isEmpty(itemList) ? new Double(0) : new Double(itemList.size()), result.getQty())); + + resultMapList.add(resultMap); + //resultList.add(result); + } + + log.info("工程不良实绩报表数据开始重新排序,维度[{}]", MesExtEnumUtil.REPORT_DIMENSION_DAY_OR_MONTH.valueOfDescription(model.getDimension())); + if (!CollectionUtils.isEmpty(resultMapList)) { + resultMapList = sortProjectBadPerformanceResult(resultMapList); + log.info("不良统计报表数据重新排序成功,维度[{}]", MesExtEnumUtil.REPORT_DIMENSION_DAY_OR_MONTH.valueOfDescription(model.getDimension())); + } + result.setDataList(resultMapList); + return result; + } + + private void packBaseAttributeList4ProjectBadStatistics(JxProjectBadPerformanceReportModel model, Map repairJudgeMap) { + model.addAttribute(new SxDynamicAttributeModel("生产日期", MesExtConstWords.WORK_TIME)) + .addAttribute(new SxDynamicAttributeModel("产线代码", MesExtConstWords.WORK_CENTER_CODE)) + .addAttribute(new SxDynamicAttributeModel("总产量", MesExtConstWords.QTY)); + + if (!CollectionUtils.isEmpty(repairJudgeMap)) { + for (Map.Entry entry : repairJudgeMap.entrySet()) { + model.addAttribute(new SxDynamicAttributeModel(entry.getValue(), entry.getKey())); + model.addAttribute(new SxDynamicAttributeModel(entry.getValue() + "率", entry.getKey()+ "Rate")); + } + } + + model.addAttribute(new SxDynamicAttributeModel("总不良率", MesExtConstWords.AMOUNT_BAD_RATE)); + } + + private List> sortProjectBadPerformanceResult(List> resultMapList) { + + //Collections.sort(resultMapList, new Comparator>() { + // @Override + // public int compare(Map map1, Map map2) { + // String workTime1 = (String) map1.get(MesExtConstWords.WORK_TIME); + // String workTime2w = (String) map2.get(MesExtConstWords.WORK_TIME); + // int result = workTime1.compareTo(workTime2w); + // if (result == 0) { + // String workCenterCode1 = (String) map1.get(MesExtConstWords.WORK_CENTER_CODE); + // String workCenterCode2 = (String) map2.get(MesExtConstWords.WORK_CENTER_CODE); + // return workCenterCode1.compareTo(workCenterCode2); + // } + // return result; + // } + //}); + + return resultMapList.stream().sorted( + Comparator.comparing(m -> new StringJoiner(MesExtConstWords.AND).add((String) m.get(MesExtConstWords.WORK_TIME)).add((String)m.get(MesExtConstWords.WORK_CENTER_CODE)).toString()) + ).collect(Collectors.toList()); + } + + private Double getBadQtyByType(List itemList, String type) { + List list = CollectionUtils.isEmpty(itemList) ? null : + itemList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getRepairJudgeCode()) && o.getRepairJudgeCode().compareTo(type) == 0)).collect(Collectors.toList()); + return CollectionUtils.isEmpty(list) ? new Double(0) : new Double(list.size()); + } + + private Map> packRepairRecordMap(List repairRecordExtList) { + return repairRecordExtList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getWorkTime()) && !StringUtils.isEmpty(o.getWorkCenterCode()))) + .collect(Collectors.groupingBy(o -> (new StringJoiner(MesExtConstWords.AND).add(o.getWorkTime()).add(o.getWorkCenterCode()).toString()))); + } + + private void packRepairRecordWorkTime(List repairRecordExtList, BadStatisticsReportParamModel model) { + if (MesExtEnumUtil.REPORT_DIMENSION_DAY_OR_MONTH.MONTH.getValue() == model.getDimension()) { + repairRecordExtList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getWorkTime()))).forEach(o -> { + o.setWorkTime(o.getWorkTime().substring(0, 7)); + }); + } + } + + private void packOutPutStatisticsWorkTime(List outPutStatisticsList, BadStatisticsReportParamModel model) { + if (MesExtEnumUtil.REPORT_DIMENSION_DAY_OR_MONTH.MONTH.getValue() == model.getDimension()) { + outPutStatisticsList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getWorkTime()))).forEach(o -> { + o.setWorkTime(o.getWorkTime().substring(0, 7)); + }); + } + } + + private Map> packOutPutStatisticsMapForProjectBadPerformance(List outPutStatisticsList) { + return outPutStatisticsList.stream().filter(o -> (null != o && + !StringUtils.isEmpty(o.getWorkTime()) && !StringUtils.isEmpty(o.getWorkCenterCode()))) + .collect(Collectors.groupingBy(o -> (new StringJoiner(MesExtConstWords.AND).add(o.getWorkTime()).add(o.getWorkCenterCode()).toString()))); + } + + private Double getQty(List itemOutPutStatisticsList) { + return CollectionUtils.isEmpty(itemOutPutStatisticsList) ? new Double(0) : + itemOutPutStatisticsList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getQty()))).mapToDouble(MesOutPutStatistics::getQty).sum(); + } + + private String getRateDecimalOne(Double d1, Double d2) { + if (StringUtils.isEmpty(d2) || MathOperation.compareTo(d2, new Double(0)) == 0) { + return null; + } + return MathOperation.div(MathOperation.mul(d1, 100), d2, 1) + MesExtConstWords.PERCENT; + } + + private List sortBadStatisticsResult(List resultList, Integer dimension) { + switch (MesExtEnumUtil.BAD_STATISTICS_REPORT_DIMENSION.getByValue(dimension)) { + case CELL: + resultList = resultList.stream().sorted(Comparator.comparing(BadStatisticsReportModel::getWorkTime) + .thenComparing(BadStatisticsReportModel::getShiftCode) + .thenComparing(BadStatisticsReportModel::getWorkCenterCode) + .thenComparing(BadStatisticsReportModel::getWorkCellCode) + .thenComparing(BadStatisticsReportModel::getPartNo)).collect(Collectors.toList()); + break; + case CENTER: + default: + resultList = resultList.stream().sorted(Comparator.comparing(BadStatisticsReportModel::getWorkTime) + .thenComparing(BadStatisticsReportModel::getShiftCode) + .thenComparing(BadStatisticsReportModel::getWorkCenterCode) + .thenComparing(BadStatisticsReportModel::getPartNo)).collect(Collectors.toList()); + break; + } + return resultList; + } +} diff --git a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/ProjectBadPerformanceReportModel.java b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/ProjectBadPerformanceReportModel.java index ec932bb..74cb93b 100644 --- a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/ProjectBadPerformanceReportModel.java +++ b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/ProjectBadPerformanceReportModel.java @@ -1,10 +1,14 @@ package cn.estsh.i3plus.ext.mes.pojo.model; +import cn.estsh.i3plus.ext.mes.pojo.model.jx.SxDynamicAttributeModel; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiParam; import lombok.Data; import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; /** * @author wangjie @@ -47,4 +51,10 @@ public class ProjectBadPerformanceReportModel implements Serializable { @ApiParam("总不良率") private String amountBadRate; + @ApiParam("table动态列名") + private List attributeList = new ArrayList<>(); + + @ApiParam("table数据") + private List> dataList; + } diff --git a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/jx/JxProjectBadPerformanceReportModel.java b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/jx/JxProjectBadPerformanceReportModel.java new file mode 100644 index 0000000..25cd768 --- /dev/null +++ b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/jx/JxProjectBadPerformanceReportModel.java @@ -0,0 +1,34 @@ +package cn.estsh.i3plus.ext.mes.pojo.model.jx; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiParam; +import lombok.Data; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @author wangjie + * @version 1.0 + * @date 2021/1/15 15:32 + **/ +@Data +@ApiModel("嘉兴工程不良实绩报表Model") +public class JxProjectBadPerformanceReportModel implements Serializable { + + private static final long serialVersionUID = 4014662051649634949L; + + @ApiParam("table动态列名") + private List attributeList = new ArrayList<>(); + + @ApiParam("table数据") + private List> dataList; + + public JxProjectBadPerformanceReportModel addAttribute(SxDynamicAttributeModel attribute) { + this.attributeList.add(attribute); + return this; + } + +} diff --git a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java index df6ecfa..93305a4 100644 --- a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java +++ b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java @@ -888,4 +888,7 @@ public class MesExtConstWords { //维修判定名称 public static final String REPAIR_JUDGE_NAME = "repairJudgeName"; + //总不良率 + public static final String AMOUNT_BAD_RATE = "amountBadRate"; + }