feat(eightwork): 添加有限空间作业导出功能

master
zhaokai 2026-06-09 15:51:25 +08:00
parent b58a480c0f
commit eab5c0bac2
18 changed files with 177 additions and 4 deletions

View File

@ -3,8 +3,8 @@ spring:
import:
# - classpath:nacos.yml
# - classpath:sdk.yml
# - classpath:nacos-prod.yml
# - classpath:sdk-prod.yml
- classpath:nacos-prod-gwj.yml
- classpath:sdk-prod-gwj.yml
- classpath:nacos-prod.yml
- classpath:sdk-prod.yml
# - classpath:nacos-prod-gwj.yml
# - classpath:sdk-prod-gwj.yml
- classpath:swagger.yml

View File

@ -21,6 +21,7 @@ import lombok.AllArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
/**
@ -104,5 +105,12 @@ public class EightworkInfoController {
return MultiResponse.of(eightworkInfoService.statisticsByWorkType(qry));
}
@ApiOperation("有限空间导出")
@GetMapping("/exportConfinedspace")
public void exportConfinedspace(EightworkInfoPageQry qry,
HttpServletResponse httpServletResponse) {
eightworkInfoService.exportConfinedspace(qry,httpServletResponse);
}
}

View File

@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.zcloud.eightwork.dto.clientobject.EightworkInfoCO;
import com.zcloud.eightwork.persistence.dataobject.EightworkInfoDO;
import com.zcloud.gbscommon.excelEntity.EightworkConfinedspaceExcelExportEntity;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Named;
@ -70,5 +71,7 @@ public interface EightworkInfoCoConvertor {
}
return value.toJSONString();
}
List<EightworkConfinedspaceExcelExportEntity> converDOsToExcelEntitys(List<EightworkInfoDO> data);
}

View File

@ -1,19 +1,31 @@
package com.zcloud.eightwork.command.query;
import com.alibaba.cola.dto.PageResponse;
import com.alibaba.fastjson.JSONObject;
import com.jjb.saas.framework.auth.utils.AuthContext;
import com.zcloud.eightwork.command.convertor.EightworkInfoCoConvertor;
import com.zcloud.eightwork.domain.model.EightworkInfoE;
import com.zcloud.eightwork.domain.model.enums.WorkCodeEnum;
import com.zcloud.eightwork.dto.EightworkInfoPageQry;
import com.zcloud.eightwork.dto.clientobject.EightworkInfoCO;
import com.zcloud.eightwork.dto.clientobject.StatisticsByWorkTypeCO;
import com.zcloud.eightwork.persistence.dataobject.EightworkInfoDO;
import com.zcloud.eightwork.persistence.dataobject.EightworkSupplementaryInfoDO;
import com.zcloud.eightwork.persistence.dataobject.dto.StatisticsByWorkTypeDTO;
import com.zcloud.eightwork.persistence.repository.EightworkInfoRepository;
import com.zcloud.eightwork.persistence.repository.EightworkSupplementaryInfoRepository;
import com.zcloud.gbscommon.excelEntity.EightworkConfinedspaceExcelExportEntity;
import com.zcloud.gbscommon.excelEntity.UserExcelExportEntity;
import com.zcloud.gbscommon.utils.PageQueryHelper;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@ -27,10 +39,13 @@ import java.util.stream.Collectors;
*/
@Component
@AllArgsConstructor
@Slf4j
public class EightworkInfoQueryExe {
private final EightworkInfoRepository eightworkInfoRepository;
private final EightworkInfoCoConvertor eightworkInfoCoConvertor;
private final EightworkSupplementaryInfoRepository eightworkSupplementaryInfoRepository;
/**
* id
*
@ -66,5 +81,96 @@ public class EightworkInfoQueryExe {
return statisticsByWorkTypeCO;
}).collect(Collectors.toList());
}
public void exportConfinedspace(EightworkInfoPageQry qry, HttpServletResponse httpServletResponse) {
// Map<String, Object> params = new HashMap<>();
// params.put("ids",ids);
// params.put("eqWorkType", WorkCodeEnum.CONFINEDSPACE_WORK.getWorkType());
qry.setPageSize(10000);
Map<String, Object> params = PageQueryHelper.toHashMap(qry);
PageResponse<EightworkInfoDO> pageResponse = eightworkInfoRepository.listPage(params);
// List<EightworkConfinedspaceExcelExportEntity> userExcelExportEntities = eightworkInfoCoConvertor.converDOsToExcelEntitys(pageResponse.getData());
List<EightworkConfinedspaceExcelExportEntity> userExcelExportEntities = new ArrayList<>();
//获取idlist
List<String> workIdList = pageResponse.getData().stream().map(EightworkInfoDO::getWorkId).collect(Collectors.toList());
List<EightworkSupplementaryInfoDO> eightworkSupplementaryInfoDOList = eightworkSupplementaryInfoRepository.getListByWorkIdList(workIdList, "gas");
//分组,取创建时间排序取第一个
Map<String, EightworkSupplementaryInfoDO> eightworkSupplementaryInfoDOMap = eightworkSupplementaryInfoDOList.stream()
.collect(Collectors.groupingBy(
EightworkSupplementaryInfoDO::getWorkId,
Collectors.collectingAndThen(
Collectors.maxBy((o1, o2) -> {
if (o1.getCreateTime() == null && o2.getCreateTime() == null) return 0;
if (o1.getCreateTime() == null) return -1;
if (o2.getCreateTime() == null) return 1;
return o1.getCreateTime().compareTo(o2.getCreateTime());
}),
optional -> optional.orElse(null)
)
))
.entrySet().stream()
.filter(entry -> entry.getValue() != null)
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
for (EightworkInfoDO eightworkInfoDO : pageResponse.getData()) {
JSONObject infoJson;
if (StringUtils.isNotBlank(eightworkInfoDO.getInfo())) {
try {
infoJson = JSONObject.parseObject(eightworkInfoDO.getInfo());
} catch (Exception e) {
log.warn("解析 info 失败,使用空对象: workId={}", eightworkInfoDO.getWorkId(), e);
infoJson = new JSONObject();
}
} else {
infoJson = new JSONObject();
}
JSONObject chooseLimitedSpaceJson = infoJson.getJSONObject("chooseLimitedSpace");
if (chooseLimitedSpaceJson == null) {
chooseLimitedSpaceJson = new JSONObject();
}
EightworkConfinedspaceExcelExportEntity userExcelExportEntity = new EightworkConfinedspaceExcelExportEntity();
userExcelExportEntity.setWorkTime(infoJson.getString("applyTime"));
userExcelExportEntity.setWorkContent(infoJson.getString("workContent"));
userExcelExportEntity.setType(infoJson.getString("operationTypeName"));
userExcelExportEntity.setSpaceNameAndCode(infoJson.getString("limitedSpaceNameAndCode"));
userExcelExportEntity.setLocationAndRange(chooseLimitedSpaceJson.getString("positionAndRange"));
userExcelExportEntity.setRiskLevel(chooseLimitedSpaceJson.getString("riskLevelName"));
userExcelExportEntity.setWorkPersonCount(infoJson.getString("limitSpaceWorkNum"));
//获取
EightworkSupplementaryInfoDO eightworkSupplementaryInfoDO = eightworkSupplementaryInfoDOMap.get(eightworkInfoDO.getWorkId());
if (eightworkSupplementaryInfoDO != null) {
//{"oxygeAmount": "3", "samplingTime": "2026-06-09 11:24:39", "signImagePath": "1983773013086048256/202606/special_operation_restricted_space_gas_analysis_signature_photo/679bec60bf754ef69972051341714e5b.png", "samplingLocation": "4", "combustibleGasContent": "2", "toxicSubstanceContent": "1"}
JSONObject gasJson;
if (StringUtils.isNotBlank(eightworkSupplementaryInfoDO.getDetails())) {
try {
gasJson = JSONObject.parseObject(eightworkSupplementaryInfoDO.getDetails());
} catch (Exception e) {
log.warn("解析 info 失败,使用空对象: workId={}", eightworkInfoDO.getWorkId(), e);
gasJson = new JSONObject();
}
} else {
gasJson = new JSONObject();
}
StringBuilder sb = new StringBuilder();
sb.append("有毒有害物质含量:");
sb.append(gasJson.getString("toxicSubstanceContent"));
sb.append(";可燃气含量:");
sb.append(gasJson.getString("combustibleGasContent"));
sb.append(";氧气量:");
sb.append(gasJson.getString("oxygeAmount"));
sb.append(";");
userExcelExportEntity.setPreWorkDetection(sb.toString());
}
userExcelExportEntities.add(userExcelExportEntity);
}
EightworkInfoE eightworkInfoE = new EightworkInfoE();
eightworkInfoE.exportConfinedspace(httpServletResponse, userExcelExportEntities);
}
}

View File

@ -26,6 +26,7 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
@ -161,5 +162,10 @@ public class EightworkInfoServiceImpl implements EightworkInfoServiceI {
public List<StatisticsByWorkTypeCO> statisticsByWorkType(EightworkInfoPageQry qry){
return eightworkInfoQueryExe.statisticsByWorkType(qry);
}
@Override
public void exportConfinedspace(EightworkInfoPageQry qry, HttpServletResponse httpServletResponse) {
eightworkInfoQueryExe.exportConfinedspace(qry,httpServletResponse);
}
}

View File

@ -8,6 +8,7 @@ import com.zcloud.eightwork.dto.EightworkInfoUpdateCmd;
import com.zcloud.eightwork.dto.clientobject.EightworkInfoCO;
import com.zcloud.eightwork.dto.clientobject.StatisticsByWorkTypeCO;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
@ -46,5 +47,7 @@ public interface EightworkInfoServiceI {
* @param reason
*/
void withdraw(Long id, String reason);
void exportConfinedspace(EightworkInfoPageQry ids, HttpServletResponse httpServletResponse);
}

View File

@ -26,6 +26,7 @@ public class EightworkInfoPageQry extends PageQuery {
* - `le`:
* - `ne`: SQL!=
*/
private List<Long> ids;
private String menuPath;
private String eqWorkType;
private List<Long> inCorpInfoId;

View File

@ -57,6 +57,8 @@ public class TaskFlowCO extends ClientObject {
//sign_step_flag == 1 在那个步骤选人
@ApiModelProperty(value = "sign_step_flag == 1 在那个步骤选人")
private Integer selectSignStep;
@ApiModelProperty(value = "是否显示选人按钮1是,2否")
private Integer showSignFlag;
@ApiModelProperty(value = "是否可以添加安全措施")
private Integer measuresStepFlag;
//是否可以打回1是2否

View File

@ -98,6 +98,8 @@ public class TaskLogCO extends ClientObject {
//sign_step_flag == 1 在那个步骤选人
@ApiModelProperty(value = "sign_step_flag == 1 在那个步骤选人")
private Integer selectSignStep;
@ApiModelProperty(value = "是否显示选人按钮1是,2否")
private Integer showSignFlag;
@ApiModelProperty(value = "是否可以添加安全措施")
private Integer measuresStepFlag;
//是否可以打回1是2否

View File

@ -1,10 +1,17 @@
package com.zcloud.eightwork.domain.model;
import com.alibaba.cola.exception.BizException;
import com.alibaba.fastjson.JSONObject;
import com.jjb.saas.framework.domain.model.BaseE;
import com.zcloud.gbscommon.excelEntity.EightworkConfinedspaceExcelExportEntity;
import com.zcloud.gbscommon.excelEntity.UserExcelExportEntity;
import com.zcloud.gbscommon.utils.ExcelUtils;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
* web-domain
*
@ -41,5 +48,13 @@ public class EightworkInfoE extends BaseE {
private Integer lockFlag;
//详细信息
private String info;
public void exportConfinedspace(HttpServletResponse httpServletResponse, List<EightworkConfinedspaceExcelExportEntity> userExcelExportEntities) {
try {
ExcelUtils.exportExcel(httpServletResponse, EightworkConfinedspaceExcelExportEntity.class, "有限空间作业台账", userExcelExportEntities);
} catch (Exception e) {
throw new BizException("导出失败");
}
}
}

View File

@ -44,6 +44,8 @@ public class TaskFlowE extends BaseE {
private String specialStepCode;
//sign_step_flag == 1 在那个步骤选人
private Integer selectSignStep;
@ApiModelProperty(value = "是否显示选人按钮1是,2否")
private Integer showSignFlag;
//是否可以添加安全措施
private Integer measuresStepFlag;
//是否可以打回1是2否

View File

@ -70,6 +70,8 @@ public class TaskLogE extends BaseE {
private String specialStepCode;
//sign_step_flag == 1 在那个步骤选人
private Integer selectSignStep;
@ApiModelProperty(value = "是否显示选人按钮1是,2否")
private Integer showSignFlag;
//是否可以添加安全措施
private Integer measuresStepFlag;
//是否可以打回1是2否

View File

@ -60,6 +60,8 @@ public class TaskFlowDO extends BaseDO {
//sign_step_flag == 1 在那个步骤选人
@ApiModelProperty(value = "sign_step_flag == 1 在那个步骤选人")
private Integer selectSignStep;
@ApiModelProperty(value = "是否显示选人按钮1是,2否")
private Integer showSignFlag;
@ApiModelProperty(value = "是否可以添加安全措施")
private Integer measuresStepFlag;
//是否可以打回1是2否

View File

@ -95,6 +95,8 @@ public class TaskLogArchiveDO extends BaseDO {
//sign_step_flag == 1 在那个步骤选人
@ApiModelProperty(value = "sign_step_flag == 1 在那个步骤选人")
private Integer selectSignStep;
@ApiModelProperty(value = "是否显示选人按钮1是,2否")
private Integer showSignFlag;
@ApiModelProperty(value = "是否可以添加安全措施")
private Integer measuresStepFlag;
//0无分支1有分支开始2有分支结束

View File

@ -98,6 +98,8 @@ public class TaskLogDO extends BaseDO {
//sign_step_flag == 1 在那个步骤选人
@ApiModelProperty(value = "sign_step_flag == 1 在那个步骤选人")
private Integer selectSignStep;
@ApiModelProperty(value = "是否显示选人按钮1是,2否")
private Integer showSignFlag;
@ApiModelProperty(value = "是否可以添加安全措施")
private Integer measuresStepFlag;
//是否可以打回1是2否

View File

@ -25,5 +25,7 @@ public interface EightworkSupplementaryInfoRepository extends BaseRepository<Eig
* @return
*/
int physicalDeleteByWorkId(String workId);
List<EightworkSupplementaryInfoDO> getListByWorkIdList(List<String> workIdList, String gas);
}

View File

@ -14,6 +14,7 @@ import com.zcloud.gbscommon.utils.Query;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.Collections;
import java.util.List;
import java.util.Map;
@ -50,5 +51,13 @@ public class EightworkSupplementaryInfoRepositoryImpl extends BaseRepositoryImpl
// 使用 Mapper 中定义的物理删除 SQL
return eightworkSupplementaryInfoMapper.physicalDeleteByWorkId(workId);
}
@Override
public List<EightworkSupplementaryInfoDO> getListByWorkIdList(List<String> workIdList, String type) {
LambdaQueryWrapper<EightworkSupplementaryInfoDO> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.in(EightworkSupplementaryInfoDO::getWorkId, workIdList);
queryWrapper.eq(EightworkSupplementaryInfoDO::getType, type);
return list(queryWrapper);
}
}

View File

@ -9,6 +9,12 @@
left join vi_corp_info c on t.corpinfo_id = c.id
where t.delete_enum = 'FALSE'
and t.status !=0
<if test="params.ids != null and params.ids.size() > 0">
and t.id in
<foreach collection="params.ids" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
<if test="params.eqWorkType != null and params.eqWorkType != ''">
and t.work_type = #{params.eqWorkType}
</if>