Commit 4a8308c7 authored by 鲁鸿波's avatar 鲁鸿波

客户提的问题点修改

parent fa871ca2
......@@ -28,6 +28,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.*;
......@@ -60,7 +61,7 @@ public class THazardConditionConfirmationServiceImpl extends SuperServiceImpl<TH
String id = tHazardConditionConfirmationDTO.getId();
// 查询条件包装器
LambdaQueryWrapper<THazardConditionConfirmation> tHazardConditionConfirmationLambdaQueryWrapper = new LambdaQueryWrapper<THazardConditionConfirmation>()
/*LambdaQueryWrapper<THazardConditionConfirmation> tHazardConditionConfirmationLambdaQueryWrapper = new LambdaQueryWrapper<THazardConditionConfirmation>()
.eq(THazardConditionConfirmation::getPlanId, tHazardConditionConfirmationDTO.getPlanId())
.eq(THazardConditionConfirmation::getWorkTypeId, tHazardConditionConfirmationDTO.getWorkTypeId())
.orderByDesc(THazardConditionConfirmation::getBatch);
......@@ -101,6 +102,59 @@ public class THazardConditionConfirmationServiceImpl extends SuperServiceImpl<TH
throw new RuntimeException("当前计划已存在该作业类型的安全条件确认");
}
}
}*/
// 查询同一计划、作业类型的最大批次
Integer maxBatch = this.lambdaQuery()
.eq(THazardConditionConfirmation::getPlanId, tHazardConditionConfirmationDTO.getPlanId())
.eq(THazardConditionConfirmation::getWorkTypeId, tHazardConditionConfirmationDTO.getWorkTypeId())
.select(THazardConditionConfirmation::getBatch, THazardConditionConfirmation::getCreateDate)
.orderByDesc(THazardConditionConfirmation::getBatch)
.last("LIMIT 1")
.oneOpt()
.map(THazardConditionConfirmation::getBatch)
.orElse(0);
// 新增操作
if (StringUtils.isBlank(id)) {
if (maxBatch > 0) {
// 查询最大批次的创建日期
THazardConditionConfirmation maxRecord = this.lambdaQuery()
.eq(THazardConditionConfirmation::getPlanId, tHazardConditionConfirmationDTO.getPlanId())
.eq(THazardConditionConfirmation::getWorkTypeId, tHazardConditionConfirmationDTO.getWorkTypeId())
.eq(THazardConditionConfirmation::getBatch, maxBatch)
.orderByDesc(THazardConditionConfirmation::getCreateDate)
.last("LIMIT 1")
.one();
LocalDate maxDate = maxRecord.getCreateDate().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
LocalDate today = LocalDate.now();
if (!today.isEqual(maxDate)) {
// 跨天,新批次 = 最大批次 + 1
tHazardConditionConfirmation.setBatch(maxBatch + 1);
} else {
throw new ServiceException("同一天只能新增一次同作业类型的安全条件确认");
}
} else {
tHazardConditionConfirmation.setBatch(1);
}
} else {
// 更新操作逻辑
THazardConditionConfirmation existingEntity = this.getById(id);
if (existingEntity != null) {
Integer batch = existingEntity.getBatch();
// 检查同一批次是否有重复
long count = this.lambdaQuery()
.eq(THazardConditionConfirmation::getPlanId, tHazardConditionConfirmationDTO.getPlanId())
.eq(THazardConditionConfirmation::getWorkTypeId, tHazardConditionConfirmationDTO.getWorkTypeId())
.eq(THazardConditionConfirmation::getBatch, batch)
.ne(THazardConditionConfirmation::getId, id)
.count();
if (count > 0) {
throw new ServiceException("当前计划已存在该作业类型的安全条件确认");
}
}
}
log.info("保存或更新tHazardConditionConfirmation:{}", tHazardConditionConfirmation);
......
......@@ -10,6 +10,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.metadata.PageList;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.testor.biz.file.model.domain.SysFile;
import com.testor.biz.file.service.SysFileService;
......@@ -287,7 +288,26 @@ public class THazardWorkPlanServiceImpl extends SuperServiceImpl<THazardWorkPlan
tHazardWorkPlanDTO.setWorkSiteResponsibleName(getUserNamesByUserIds(workSiteResponsible));
SysOrgVo sysOrgVo = newSysOrgService.lookOrg(tHazardWorkPlanDTO.getOrgId());
if (sysOrgVo != null) {
tHazardWorkPlanDTO.setOrgName(sysOrgVo.getSubSectorPath());
//tHazardWorkPlanDTO.setOrgName(sysOrgVo.getSubSectorPath());
String subSectorPath = sysOrgVo.getSubSectorPath();
// 对路径进行去重处理
if (StringUtils.isNotBlank(subSectorPath)) {
String[] parts = subSectorPath.split("/");
List<String> uniqueParts = new ArrayList<>();
for (String part : parts) {
if (!uniqueParts.contains(part)) {
uniqueParts.add(part);
}
}
// 重新组合路径
String uniquePath = String.join("/", uniqueParts);
tHazardWorkPlanDTO.setOrgName(uniquePath);
} else {
tHazardWorkPlanDTO.setOrgName(subSectorPath);
}
}
String buildWorkStatus = buildWorkStatus(tHazardWorkPlanDTO);
tHazardWorkPlanDTO.setBuildWorkStatus(buildWorkStatus);
......@@ -569,6 +589,9 @@ public class THazardWorkPlanServiceImpl extends SuperServiceImpl<THazardWorkPlan
@Override
public void completeProcess(THazardWorkPlanDTO tHazardWorkPlanDTO) {
log.info("[WORK_PLAN_FLOW_START] ={}",tHazardWorkPlanDTO);
tHazardWorkPlanDTO.setWorkPlanFile(null);
String id = tHazardWorkPlanDTO.getId();
THazardWorkPlan tHazardWorkPlan = this.getById(id);
String workStatus = tHazardWorkPlan.getWorkStatus();
......@@ -626,10 +649,10 @@ public class THazardWorkPlanServiceImpl extends SuperServiceImpl<THazardWorkPlan
//流转到安全许可证关闭
executionWorkProcess(id, tHazardWorkPlanDTO.getTaskId(), WorkPlanStatusEnum.TO_BE_CLOSED.getValue(), tHazardWorkPlanDTO.getMap(), tHazardWorkPlan);
THazardWorkPlan updWorkPlan = new THazardWorkPlan();
updWorkPlan.setId(id);
//THazardWorkPlan updWorkPlan = new THazardWorkPlan();
//updWorkPlan.setId(id);
//updWorkPlan.setHazardLicensePassTime(new Date());
this.updateById(updWorkPlan);
//this.updateById(updWorkPlan);
}
//如果为安全许可证关闭
......@@ -640,23 +663,24 @@ public class THazardWorkPlanServiceImpl extends SuperServiceImpl<THazardWorkPlan
THazardWorkPlan updWorkPlan = new THazardWorkPlan();
updWorkPlan.setId(id);
Date scheduledEndTime = tHazardWorkPlan.getScheduledEndTime();
if(WorkPlanStatusEnum.TIMEOUT_CANCELED.getValue().equals(workStatus)){
updWorkPlan.setWorkStatus(WorkPlanStatusEnum.TIMEOUT_CANCELED.getValue());
}else{
//如果计划结束时间在当前时间之后
if (scheduledEndTime.after(new Date())) {
//更新状态 取消状态
updWorkPlan.setWorkStatus(WorkPlanStatusEnum.CLOSED.getValue());
String finalStatus;
if (WorkPlanStatusEnum.TIMEOUT_CANCELED.getValue().equals(workStatus)) {
finalStatus = WorkPlanStatusEnum.TIMEOUT_CANCELED.getValue();
} else {
//更新状态 超时
updWorkPlan.setWorkStatus(WorkPlanStatusEnum.OVERDUE.getValue());
}
Date scheduledEndTime = tHazardWorkPlan.getScheduledEndTime();
finalStatus = scheduledEndTime.after(new Date())
? WorkPlanStatusEnum.CLOSED.getValue()
: WorkPlanStatusEnum.OVERDUE.getValue();
}
//更新结束时间
updWorkPlan.setActualEndTime(new Date());
this.updateById(updWorkPlan);
// ✅ 只更新明确字段,绝不带 workPlanFile
this.update(
Wrappers.lambdaUpdate(THazardWorkPlan.class)
.eq(THazardWorkPlan::getId, id)
.set(THazardWorkPlan::getActualEndTime, new Date())
.set(THazardWorkPlan::getWorkStatus, finalStatus)
);
//关闭子级流程
CompleteTask completeTask = new CompleteTask();
......@@ -671,12 +695,18 @@ public class THazardWorkPlanServiceImpl extends SuperServiceImpl<THazardWorkPlan
public void executionWorkProcess(String bizId, String taskId, String processStatus, Map<String, Object> map, THazardWorkPlan tHazardWorkPlan) {
CompleteTask completeTask = new CompleteTask();
completeTask.setBizId(bizId);
completeTask.setTaskId(taskId);
Map<String, Object> vars = new HashMap<>();
vars.put("currentWorkerStatus", tHazardWorkPlan.getWorkStatus());
vars.put("workStatus", processStatus);
//防止文件被更新
map.remove("workPlanFile");
vars.remove("workPlanFile");
if (map != null) {
vars.putAll(map);
}
......
package com.testor.module.train.project.model.enums;
import java.util.Arrays;
/**
* packageName com.testor.module.train.project.model
*
......@@ -33,12 +35,39 @@ public enum VisitTypeEnum {
return name;
}
public static String getName(String value) {
/*public static String getName(String value) {
for (VisitTypeEnum bean : VisitTypeEnum.values()) {
if (bean.getValue().equals(value)) {
return bean.getName();
}
}
return value;
}*/
public static String getName(String value) {
if (org.apache.commons.lang3.StringUtils.isBlank(value)) {
return value;
}
// 如果包含逗号,处理多值
if (value.contains(",")) {
return Arrays.stream(value.split(","))
.map(String::trim)
.filter(org.apache.commons.lang3.StringUtils::isNotBlank)
.map(VisitTypeEnum::getSingleName)
.collect(java.util.stream.Collectors.joining(","));
}
// 单个值
return getSingleName(value);
}
private static String getSingleName(String value) {
for (VisitTypeEnum enumItem : VisitTypeEnum.values()) {
if (enumItem.getValue().equals(value.trim())) {
return enumItem.getName();
}
}
return value; // 找不到则返回原值
}
}
......@@ -55,7 +55,8 @@ public class TrainProjectStatisticsAllServiceImpl implements TrainProjectStatist
Integer projectCount = findProjectCount(orgId, startTime, endTime);
statTotalVo.setProjectTotal(String.valueOf(projectCount));
// 培训时长
String trainTimeSumByOrgId = tTrainProjectDao.findTrainTimeSumByOrgId(orgIdList, startTime, endTime);
//String trainTimeSumByOrgId = tTrainProjectDao.findTrainTimeSumByOrgId(orgIdList, startTime, endTime);
String trainTimeSumByOrgId = safeFindTrainTimeSumByOrgId(orgIdList, startTime, endTime);
if (StringUtils.isNotBlank(trainTimeSumByOrgId)) {
statTotalVo.setProjectTotalTime(trainTimeSumByOrgId);
}
......@@ -162,7 +163,8 @@ public class TrainProjectStatisticsAllServiceImpl implements TrainProjectStatist
}
for (NewSysOrg sysOrg : sysOrgList) {
List<String> orgIdList = findOrgIdList(sysOrg.getOrgId());
String projectNum = tTrainProjectDao.findTrainTimeSumByOrgId(orgIdList, startTime, endTime);
//String projectNum = tTrainProjectDao.findTrainTimeSumByOrgId(orgIdList, startTime, endTime);
String projectNum = safeFindTrainTimeSumByOrgId(orgIdList, startTime, endTime);
if (StringUtils.isNotBlank(projectNum) && !"0".equals(projectNum)) {
ProjectStatTotalVo projectStatTotalVo = new ProjectStatTotalVo();
projectStatTotalVo.setFanChartKey(sysOrg.getOrgName());
......@@ -212,6 +214,37 @@ public class TrainProjectStatisticsAllServiceImpl implements TrainProjectStatist
return sortList;
}
/**
* 安全执行大列表的 IN 查询,自动分批执行,返回累加结果
*
* @param orgIdList 机构 ID 列表
* @param startTime 开始时间
* @param endTime 结束时间
* @return 累加后的总结果(String 类型,兼容原 DAO 方法)
*/
public String safeFindTrainTimeSumByOrgId(List<String> orgIdList, String startTime, String endTime) {
if (CollectionUtils.isEmpty(orgIdList)) {
return "0";
}
int batchSize = 500; // Kingbase/Oracle 等数据库单次 IN 最大限制
int total = 0;
for (int i = 0; i < orgIdList.size(); i += batchSize) {
List<String> subList = orgIdList.subList(i, Math.min(i + batchSize, orgIdList.size()));
try {
String subResult = tTrainProjectDao.findTrainTimeSumByOrgId(subList, startTime, endTime);
if (StringUtils.isNotBlank(subResult)) {
total += Integer.parseInt(subResult);
}
} catch (Exception e) {
}
}
return String.valueOf(total);
}
@Override
public ProjectStatTotalVo findTrainEvaluateStat(String orgId, String startTime, String endTime, String projectId) {
......
......@@ -12,7 +12,7 @@ spring:
max-request-size: 200MB
#rabbitmq 配置,为了不将生产环境的信息搞乱,将端口号由原来的5672修改为15673
rabbitmq:
host: 43.132.165.103
host: 47.93.144.80
port: 5672
username: weather
password: cofco321
......
......@@ -385,7 +385,7 @@
<select id="findTrainTimeByOrgOrVisitType" resultType="com.testor.module.train.project.model.stat.ProjectStatTotalVo" databaseId="kingbase" >
SELECT
SUM(EXTRACT(EPOCH FROM AGE(p.visit_end_time, p.visit_start_time)) / 3600) AS fanChartValue
SUM(EXTRACT(EPOCH FROM AGE(p.visit_end_time, p.visit_start_time)) / 3600) AS fanChartValue,
<if test=" chartType !=null and chartType !='' and chartType == 1 ">
p.org_id ,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment