特殊作业修改

This commit is contained in:
pengjie 2024-06-18 17:57:56 +08:00
parent c46e7a0505
commit 2d331ca5c7
3 changed files with 133 additions and 5 deletions

View File

@ -5,7 +5,10 @@ import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.wflow.bean.entity.WflowModelGroups;
import com.wflow.bean.entity.WflowModelHistorys; 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.WflowModelHistorysMapper;
import com.wflow.mapper.WflowModelsMapper; import com.wflow.mapper.WflowModelsMapper;
import com.wflow.workflow.bean.process.OrgUser; import com.wflow.workflow.bean.process.OrgUser;
@ -49,9 +52,15 @@ public class XzFlowController {
@Autowired @Autowired
private HistoryService historyService; private HistoryService historyService;
@Autowired
private WflowModelsMapper wflowModelsMapper;
@Autowired @Autowired
private WflowModelHistorysMapper wflowModelHistorysMapper; private WflowModelHistorysMapper wflowModelHistorysMapper;
@Autowired
private WflowModelGroupsMapper wflowModelGroupsMapper;
@ApiOperation(value = "查询工作流统计信息", notes = "查询工作流统计信息", httpMethod = "GET") @ApiOperation(value = "查询工作流统计信息", notes = "查询工作流统计信息", httpMethod = "GET")
@ApiImplicitParams({ @ApiImplicitParams({
@ -112,6 +121,51 @@ public class XzFlowController {
return Result.success(resultList); 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<Map<String, Object>> getStatBySpecial(@ApiIgnore @RequestParam HashMap<String, Object> param) {
Map<String, Object> resultMap = new HashMap<>();
String projectSn = MapUtils.getString(param, "projectSn");
WflowModelGroups modelGroups = wflowModelGroupsMapper.selectOne(Wrappers.<WflowModelGroups>lambdaQuery()
.eq(WflowModelGroups::getGroupName, "特殊作业"));
List<WflowModels> wflowModels = wflowModelsMapper.selectList(Wrappers.<WflowModels>lambdaQuery()
.eq(WflowModels::getGroupId, modelGroups.getGroupId()));
List<WflowModelHistorys> wflowModelHistorys = wflowModelHistorysMapper.selectList(Wrappers.<WflowModelHistorys>lambdaQuery()
.in(WflowModelHistorys::getFormId, wflowModels.stream().map(w -> w.getFormId()).collect(Collectors.toList())));
List<HistoricProcessInstance> list = new ArrayList<>();
for (WflowModelHistorys wflowModelHistory : wflowModelHistorys) {
HistoricProcessInstanceQuery instanceQuery = historyService.createHistoricProcessInstanceQuery();
instanceQuery.processDefinitionId(wflowModelHistory.getProcessDefId());
instanceQuery.processInstanceTenantId(projectSn);
list.addAll(instanceQuery.list());
}
List<ProcessInstanceVo> processInstanceVos = getInstances(list);
Map<String, Object> 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<String> formIds = wflowModels.stream().map(p -> p.getFormId()).collect(Collectors.toList());
List<Map<String, Object>> resultList = new ArrayList<>();
for (String formId : formIds) {
Map<String, Object> map = new HashMap<>();
List<WflowModelHistorys> collect = wflowModelHistorys.stream().filter(w -> w.getFormId().equals(formId)).collect(Collectors.toList());
map.put("name", collect.get(collect.size() - 1).getFormName());
List<ProcessInstanceVo> 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);
}
/** /**
* 构造流程实例列表 * 构造流程实例列表
* *

View File

@ -5,8 +5,19 @@ import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.wflow.workflow.bean.vo.ProcessInstanceVo; import com.wflow.workflow.bean.vo.ProcessInstanceVo;
import com.zhgd.jeecg.common.api.vo.Result; 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.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.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.Api;
import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiImplicitParams;
@ -22,10 +33,13 @@ import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import springfox.documentation.annotations.ApiIgnore; import springfox.documentation.annotations.ApiIgnore;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Date; import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors;
@RestController @RestController
@RequestMapping("/xmgl/xzRiskPrediction") @RequestMapping("/xmgl/xzRiskPrediction")
@ -36,6 +50,21 @@ public class XzRiskPredictionController {
@Autowired @Autowired
private IWorkerInfoService workerInfoService; 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") @ApiOperation(value = "查询总项目的人员风险趋势分析", notes = "查询总项目的人员风险趋势分析", httpMethod = "GET")
@ApiImplicitParams({ @ApiImplicitParams({
@ApiImplicitParam(name = "projectSn", value = "项目SN", paramType = "query", required = true, dataType = "String"), @ApiImplicitParam(name = "projectSn", value = "项目SN", paramType = "query", required = true, dataType = "String"),
@ -44,10 +73,55 @@ public class XzRiskPredictionController {
public Result<Map<String, Object>> getWorkerRiskByProject(@ApiIgnore @RequestParam HashMap<String, Object> param) { public Result<Map<String, Object>> getWorkerRiskByProject(@ApiIgnore @RequestParam HashMap<String, Object> param) {
String projectSn = MapUtils.getString(param, "projectSn"); String projectSn = MapUtils.getString(param, "projectSn");
Map<String, Object> resultMap = new HashMap<>(); Map<String, Object> resultMap = new HashMap<>();
// 人员数量
List<WorkerInfo> list = workerInfoService.list(Wrappers.<WorkerInfo>lambdaQuery().eq(WorkerInfo::getProjectSn, projectSn)); List<WorkerInfo> list = workerInfoService.list(Wrappers.<WorkerInfo>lambdaQuery().eq(WorkerInfo::getProjectSn, projectSn));
resultMap.put("total", list.size()); 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.<WorkerType>lambdaQuery()
.eq(WorkerType::getProjectSn, projectSn)
.eq(WorkerType::getTypeName, "特殊工种"));
if (workerType != null) {
List<TeamInfo> teamInfoList = teamInfoService.list(Wrappers.<TeamInfo>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<ExamTrain> examTrainList = examTrainService.list(Wrappers.<ExamTrain>lambdaQuery().eq(ExamTrain::getProjectSn, projectSn)
.isNotNull(ExamTrain::getExamPaperId));
List<Long> ids = examTrainList.stream().map(e -> e.getId()).collect(Collectors.toList());
if (ids.size() > 0) {
List<ExamTrainRecord> examTrainRecordList = examTrainRecordService.list(Wrappers.<ExamTrainRecord>lambdaQuery().in(ExamTrainRecord::getTrainId, ids));
for (ExamTrain record : examTrainList) {
if (record.getExamPaperId() != null) {
List<ExamTrainRecord> 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<XzSecurityQualityInspectionRecord> xzSecurityQualityInspectionRecords = xzSecurityQualityInspectionRecordService.list(Wrappers.<XzSecurityQualityInspectionRecord>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); return Result.success(resultMap);
} }

View File

@ -141,10 +141,10 @@ public class XzHoistSafetyWorkController {
List<String> siSuoPersonName = JSONObject.parseObject(JSON.toJSONString(siSuoPersonNameArray), List.class); List<String> siSuoPersonName = JSONObject.parseObject(JSON.toJSONString(siSuoPersonNameArray), List.class);
paramMap.put("siSuoPersonName", siSuoPersonName == null ? "" : siSuoPersonName.stream().collect(Collectors.joining(","))); paramMap.put("siSuoPersonName", siSuoPersonName == null ? "" : siSuoPersonName.stream().collect(Collectors.joining(",")));
} }
JSONArray commanderArray = paramMap.getJSONArray("commander"); JSONArray commanderArray = paramMap.getJSONArray("commanderName");
if (commanderArray != null) { if (commanderArray != null) {
List<String> commander = JSONObject.parseObject(JSON.toJSONString(commanderArray), List.class); List<String> commanderName = JSONObject.parseObject(JSON.toJSONString(commanderArray), List.class);
paramMap.put("commander", commander == null ? "" : commander.stream().collect(Collectors.joining(","))); paramMap.put("commanderName", commanderName == null ? "" : commanderName.stream().collect(Collectors.joining(",")));
} }
String [] param1 = {"name", "flag"}; String [] param1 = {"name", "flag"};
JSONArray safeMeasures = paramMap.getJSONArray("safeMeasure"); JSONArray safeMeasures = paramMap.getJSONArray("safeMeasure");