diff --git a/src/main/java/com/zhgd/xmgl/modules/xz/controller/XzFlowController.java b/src/main/java/com/zhgd/xmgl/modules/xz/controller/XzFlowController.java index fb65e9301..aa8332ac3 100644 --- a/src/main/java/com/zhgd/xmgl/modules/xz/controller/XzFlowController.java +++ b/src/main/java/com/zhgd/xmgl/modules/xz/controller/XzFlowController.java @@ -5,7 +5,10 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.wflow.bean.entity.WflowModelGroups; import com.wflow.bean.entity.WflowModelHistorys; +import com.wflow.bean.entity.WflowModels; +import com.wflow.mapper.WflowModelGroupsMapper; import com.wflow.mapper.WflowModelHistorysMapper; import com.wflow.mapper.WflowModelsMapper; import com.wflow.workflow.bean.process.OrgUser; @@ -49,9 +52,15 @@ public class XzFlowController { @Autowired private HistoryService historyService; + @Autowired + private WflowModelsMapper wflowModelsMapper; + @Autowired private WflowModelHistorysMapper wflowModelHistorysMapper; + @Autowired + private WflowModelGroupsMapper wflowModelGroupsMapper; + @ApiOperation(value = "查询工作流统计信息", notes = "查询工作流统计信息", httpMethod = "GET") @ApiImplicitParams({ @@ -112,6 +121,51 @@ public class XzFlowController { return Result.success(resultList); } + @ApiOperation(value = "查询特殊作业统计信息", notes = "查询特殊作业统计信息", httpMethod = "GET") + @ApiImplicitParams({ + @ApiImplicitParam(name = "projectSn", value = "项目SN", paramType = "query", required = true, dataType = "String"), + }) + @GetMapping(value = "/getStatBySpecial") + public Result> getStatBySpecial(@ApiIgnore @RequestParam HashMap param) { + Map resultMap = new HashMap<>(); + String projectSn = MapUtils.getString(param, "projectSn"); + WflowModelGroups modelGroups = wflowModelGroupsMapper.selectOne(Wrappers.lambdaQuery() + .eq(WflowModelGroups::getGroupName, "特殊作业")); + List wflowModels = wflowModelsMapper.selectList(Wrappers.lambdaQuery() + .eq(WflowModels::getGroupId, modelGroups.getGroupId())); + List wflowModelHistorys = wflowModelHistorysMapper.selectList(Wrappers.lambdaQuery() + .in(WflowModelHistorys::getFormId, wflowModels.stream().map(w -> w.getFormId()).collect(Collectors.toList()))); + List list = new ArrayList<>(); + for (WflowModelHistorys wflowModelHistory : wflowModelHistorys) { + HistoricProcessInstanceQuery instanceQuery = historyService.createHistoricProcessInstanceQuery(); + instanceQuery.processDefinitionId(wflowModelHistory.getProcessDefId()); + instanceQuery.processInstanceTenantId(projectSn); + list.addAll(instanceQuery.list()); + } + List processInstanceVos = getInstances(list); + Map total = new HashMap<>(); + total.put("running", processInstanceVos.stream().filter(l -> l.getFinishTime() == null).count()); + total.put("complete", processInstanceVos.stream().filter(l -> l.getFinishTime() != null).count()); + resultMap.put("total", total); + List formIds = wflowModels.stream().map(p -> p.getFormId()).collect(Collectors.toList()); + List> resultList = new ArrayList<>(); + for (String formId : formIds) { + Map map = new HashMap<>(); + List collect = wflowModelHistorys.stream().filter(w -> w.getFormId().equals(formId)).collect(Collectors.toList()); + map.put("name", collect.get(collect.size() - 1).getFormName()); + List typeList = processInstanceVos.stream().filter(p -> p.getFormId().equals(formId)).collect(Collectors.toList()); + long count = processInstanceVos.stream().filter(p -> p.getFormId().equals(formId)).count(); + int number = (int) count; + map.put("num", number); + map.put("ratio", new BigDecimal(number).divide(new BigDecimal(processInstanceVos.size()), 2, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100))); + map.put("running", typeList.stream().filter(l -> l.getFinishTime() == null).count()); + map.put("complete", typeList.stream().filter(l -> l.getFinishTime() != null).count()); + resultList.add(map); + } + resultMap.put("groupByType", resultList); + return Result.success(resultMap); + } + /** * 构造流程实例列表 * diff --git a/src/main/java/com/zhgd/xmgl/modules/xz/controller/XzRiskPredictionController.java b/src/main/java/com/zhgd/xmgl/modules/xz/controller/XzRiskPredictionController.java index ecbcca261..1d15767c5 100644 --- a/src/main/java/com/zhgd/xmgl/modules/xz/controller/XzRiskPredictionController.java +++ b/src/main/java/com/zhgd/xmgl/modules/xz/controller/XzRiskPredictionController.java @@ -5,8 +5,19 @@ import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.wflow.workflow.bean.vo.ProcessInstanceVo; import com.zhgd.jeecg.common.api.vo.Result; +import com.zhgd.xmgl.modules.exam.entity.ExamTrain; +import com.zhgd.xmgl.modules.exam.entity.ExamTrainRecord; +import com.zhgd.xmgl.modules.exam.service.IExamTrainRecordService; +import com.zhgd.xmgl.modules.exam.service.IExamTrainService; +import com.zhgd.xmgl.modules.worker.entity.TeamInfo; import com.zhgd.xmgl.modules.worker.entity.WorkerInfo; +import com.zhgd.xmgl.modules.worker.entity.WorkerType; +import com.zhgd.xmgl.modules.worker.service.ITeamInfoService; import com.zhgd.xmgl.modules.worker.service.IWorkerInfoService; +import com.zhgd.xmgl.modules.worker.service.IWorkerTypeService; +import com.zhgd.xmgl.modules.xz.security.entity.XzSecurityQualityInspectionRecord; +import com.zhgd.xmgl.modules.xz.security.service.IXzSecurityInspectTaskRecordService; +import com.zhgd.xmgl.modules.xz.security.service.IXzSecurityQualityInspectionRecordService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; @@ -22,10 +33,13 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import springfox.documentation.annotations.ApiIgnore; +import java.math.BigDecimal; +import java.math.RoundingMode; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; @RestController @RequestMapping("/xmgl/xzRiskPrediction") @@ -36,6 +50,21 @@ public class XzRiskPredictionController { @Autowired private IWorkerInfoService workerInfoService; + @Autowired + private IWorkerTypeService workerTypeService; + + @Autowired + private ITeamInfoService teamInfoService; + + @Autowired + private IExamTrainService examTrainService; + + @Autowired + private IExamTrainRecordService examTrainRecordService; + + @Autowired + private IXzSecurityQualityInspectionRecordService xzSecurityQualityInspectionRecordService; + @ApiOperation(value = "查询总项目的人员风险趋势分析", notes = "查询总项目的人员风险趋势分析", httpMethod = "GET") @ApiImplicitParams({ @ApiImplicitParam(name = "projectSn", value = "项目SN", paramType = "query", required = true, dataType = "String"), @@ -44,10 +73,55 @@ public class XzRiskPredictionController { public Result> getWorkerRiskByProject(@ApiIgnore @RequestParam HashMap param) { String projectSn = MapUtils.getString(param, "projectSn"); Map resultMap = new HashMap<>(); + // 人员数量 List list = workerInfoService.list(Wrappers.lambdaQuery().eq(WorkerInfo::getProjectSn, projectSn)); resultMap.put("total", list.size()); - long count = list.stream().filter(l -> StringUtils.isNotBlank(l.getBirthday()) && DateUtil.ageOfNow(l.getBirthday()) >= 50).count(); - resultMap.put("age", count); + // 高龄人员 + long ageCount = list.stream().filter(l -> StringUtils.isNotBlank(l.getBirthday()) && DateUtil.ageOfNow(l.getBirthday()) >= 50).count(); + resultMap.put("age", new BigDecimal(ageCount).divide(new BigDecimal(list.size()), 2, BigDecimal.ROUND_HALF_UP)); + // 特殊工种人数 + WorkerType workerType = workerTypeService.getOne(Wrappers.lambdaQuery() + .eq(WorkerType::getProjectSn, projectSn) + .eq(WorkerType::getTypeName, "特殊工种")); + if (workerType != null) { + List teamInfoList = teamInfoService.list(Wrappers.lambdaQuery() + .eq(TeamInfo::getWorkerTypeId, workerType.getId())); + if (teamInfoList.size() > 0) { + long workerTypeCount = list.stream().filter(l -> teamInfoList.stream().map(t -> t.getId()).collect(Collectors.toList()).contains(l.getTeamId())).count(); + resultMap.put("workerType", new BigDecimal(workerTypeCount).divide(new BigDecimal(list.size()), 2, BigDecimal.ROUND_HALF_UP)); + } else { + resultMap.put("workerType", 0); + } + } else { + resultMap.put("workerType", 0); + } + List examTrainList = examTrainService.list(Wrappers.lambdaQuery().eq(ExamTrain::getProjectSn, projectSn) + .isNotNull(ExamTrain::getExamPaperId)); + List ids = examTrainList.stream().map(e -> e.getId()).collect(Collectors.toList()); + if (ids.size() > 0) { + List examTrainRecordList = examTrainRecordService.list(Wrappers.lambdaQuery().in(ExamTrainRecord::getTrainId, ids)); + for (ExamTrain record : examTrainList) { + if (record.getExamPaperId() != null) { + List trainRecordList = examTrainRecordList.stream().filter(e -> e.getTrainId().toString().equals(record.getId().toString())).collect(Collectors.toList()); + if (trainRecordList.size() > 0) { + int pass = trainRecordList.stream().filter(t -> t.getIsPass() == 1).collect(Collectors.toList()).size(); + record.setPassRadio(new BigDecimal(pass).divide(new BigDecimal(trainRecordList.size()), 2, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100))); + } + } + } + } + // 教育培训 + BigDecimal passRadio = examTrainList.stream().map(e -> e.getPassRadio()).reduce(BigDecimal.ZERO, BigDecimal::add); + resultMap.put("exam", new BigDecimal(1).subtract(passRadio.divide(new BigDecimal(examTrainList.size()), 2, BigDecimal.ROUND_HALF_UP))); + // 安全评分 + Double safeScore = list.stream().mapToDouble(e -> e.getSafeScore()).sum(); + resultMap.put("safe", new BigDecimal(1).subtract(new BigDecimal(safeScore).divide(new BigDecimal(list.size()), 2, BigDecimal.ROUND_HALF_UP))); + // 安全检查隐患 + List xzSecurityQualityInspectionRecords = xzSecurityQualityInspectionRecordService.list(Wrappers.lambdaQuery() + .eq(XzSecurityQualityInspectionRecord::getRecordType, 1) + .eq(XzSecurityQualityInspectionRecord::getProjectSn, projectSn)); + long inspectionCount = xzSecurityQualityInspectionRecords.stream().filter(x -> x.getStatus() != 5 && x.getStatus() != 6).count(); + resultMap.put("security", new BigDecimal(inspectionCount).divide(new BigDecimal(xzSecurityQualityInspectionRecords.size()), 2, BigDecimal.ROUND_HALF_UP)); return Result.success(resultMap); } diff --git a/src/main/java/com/zhgd/xmgl/modules/xz/special/controller/XzHoistSafetyWorkController.java b/src/main/java/com/zhgd/xmgl/modules/xz/special/controller/XzHoistSafetyWorkController.java index 28655f203..e642f75d4 100644 --- a/src/main/java/com/zhgd/xmgl/modules/xz/special/controller/XzHoistSafetyWorkController.java +++ b/src/main/java/com/zhgd/xmgl/modules/xz/special/controller/XzHoistSafetyWorkController.java @@ -141,10 +141,10 @@ public class XzHoistSafetyWorkController { List siSuoPersonName = JSONObject.parseObject(JSON.toJSONString(siSuoPersonNameArray), List.class); paramMap.put("siSuoPersonName", siSuoPersonName == null ? "" : siSuoPersonName.stream().collect(Collectors.joining(","))); } - JSONArray commanderArray = paramMap.getJSONArray("commander"); + JSONArray commanderArray = paramMap.getJSONArray("commanderName"); if (commanderArray != null) { - List commander = JSONObject.parseObject(JSON.toJSONString(commanderArray), List.class); - paramMap.put("commander", commander == null ? "" : commander.stream().collect(Collectors.joining(","))); + List commanderName = JSONObject.parseObject(JSON.toJSONString(commanderArray), List.class); + paramMap.put("commanderName", commanderName == null ? "" : commanderName.stream().collect(Collectors.joining(","))); } String [] param1 = {"name", "flag"}; JSONArray safeMeasures = paramMap.getJSONArray("safeMeasure");