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: import:
# - classpath:nacos.yml # - classpath:nacos.yml
# - classpath:sdk.yml # - classpath:sdk.yml
# - classpath:nacos-prod.yml - classpath:nacos-prod.yml
# - classpath:sdk-prod.yml - classpath:sdk-prod.yml
- classpath:nacos-prod-gwj.yml # - classpath:nacos-prod-gwj.yml
- classpath:sdk-prod-gwj.yml # - classpath:sdk-prod-gwj.yml
- classpath:swagger.yml - classpath:swagger.yml

View File

@ -21,6 +21,7 @@ import lombok.AllArgsConstructor;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList; import java.util.ArrayList;
/** /**
@ -104,5 +105,12 @@ public class EightworkInfoController {
return MultiResponse.of(eightworkInfoService.statisticsByWorkType(qry)); 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.alibaba.fastjson.JSONObject;
import com.zcloud.eightwork.dto.clientobject.EightworkInfoCO; import com.zcloud.eightwork.dto.clientobject.EightworkInfoCO;
import com.zcloud.eightwork.persistence.dataobject.EightworkInfoDO; import com.zcloud.eightwork.persistence.dataobject.EightworkInfoDO;
import com.zcloud.gbscommon.excelEntity.EightworkConfinedspaceExcelExportEntity;
import org.mapstruct.Mapper; import org.mapstruct.Mapper;
import org.mapstruct.Mapping; import org.mapstruct.Mapping;
import org.mapstruct.Named; import org.mapstruct.Named;
@ -70,5 +71,7 @@ public interface EightworkInfoCoConvertor {
} }
return value.toJSONString(); return value.toJSONString();
} }
List<EightworkConfinedspaceExcelExportEntity> converDOsToExcelEntitys(List<EightworkInfoDO> data);
} }

View File

@ -1,19 +1,31 @@
package com.zcloud.eightwork.command.query; package com.zcloud.eightwork.command.query;
import com.alibaba.cola.dto.PageResponse; import com.alibaba.cola.dto.PageResponse;
import com.alibaba.fastjson.JSONObject;
import com.jjb.saas.framework.auth.utils.AuthContext; import com.jjb.saas.framework.auth.utils.AuthContext;
import com.zcloud.eightwork.command.convertor.EightworkInfoCoConvertor; 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.EightworkInfoPageQry;
import com.zcloud.eightwork.dto.clientobject.EightworkInfoCO; import com.zcloud.eightwork.dto.clientobject.EightworkInfoCO;
import com.zcloud.eightwork.dto.clientobject.StatisticsByWorkTypeCO; import com.zcloud.eightwork.dto.clientobject.StatisticsByWorkTypeCO;
import com.zcloud.eightwork.persistence.dataobject.EightworkInfoDO; 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.dataobject.dto.StatisticsByWorkTypeDTO;
import com.zcloud.eightwork.persistence.repository.EightworkInfoRepository; 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 com.zcloud.gbscommon.utils.PageQueryHelper;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Component; 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.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -27,10 +39,13 @@ import java.util.stream.Collectors;
*/ */
@Component @Component
@AllArgsConstructor @AllArgsConstructor
@Slf4j
public class EightworkInfoQueryExe { public class EightworkInfoQueryExe {
private final EightworkInfoRepository eightworkInfoRepository; private final EightworkInfoRepository eightworkInfoRepository;
private final EightworkInfoCoConvertor eightworkInfoCoConvertor; private final EightworkInfoCoConvertor eightworkInfoCoConvertor;
private final EightworkSupplementaryInfoRepository eightworkSupplementaryInfoRepository;
/** /**
* id * id
* *
@ -66,5 +81,96 @@ public class EightworkInfoQueryExe {
return statisticsByWorkTypeCO; return statisticsByWorkTypeCO;
}).collect(Collectors.toList()); }).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.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import javax.servlet.http.HttpServletResponse;
import java.util.List; import java.util.List;
/** /**
@ -161,5 +162,10 @@ public class EightworkInfoServiceImpl implements EightworkInfoServiceI {
public List<StatisticsByWorkTypeCO> statisticsByWorkType(EightworkInfoPageQry qry){ public List<StatisticsByWorkTypeCO> statisticsByWorkType(EightworkInfoPageQry qry){
return eightworkInfoQueryExe.statisticsByWorkType(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.EightworkInfoCO;
import com.zcloud.eightwork.dto.clientobject.StatisticsByWorkTypeCO; import com.zcloud.eightwork.dto.clientobject.StatisticsByWorkTypeCO;
import javax.servlet.http.HttpServletResponse;
import java.util.List; import java.util.List;
/** /**
@ -46,5 +47,7 @@ public interface EightworkInfoServiceI {
* @param reason * @param reason
*/ */
void withdraw(Long id, String 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`: * - `le`:
* - `ne`: SQL!= * - `ne`: SQL!=
*/ */
private List<Long> ids;
private String menuPath; private String menuPath;
private String eqWorkType; private String eqWorkType;
private List<Long> inCorpInfoId; private List<Long> inCorpInfoId;

View File

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

View File

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

View File

@ -1,10 +1,17 @@
package com.zcloud.eightwork.domain.model; package com.zcloud.eightwork.domain.model;
import com.alibaba.cola.exception.BizException;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.jjb.saas.framework.domain.model.BaseE; 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 io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/** /**
* web-domain * web-domain
* *
@ -41,5 +48,13 @@ public class EightworkInfoE extends BaseE {
private Integer lockFlag; private Integer lockFlag;
//详细信息 //详细信息
private String info; 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; private String specialStepCode;
//sign_step_flag == 1 在那个步骤选人 //sign_step_flag == 1 在那个步骤选人
private Integer selectSignStep; private Integer selectSignStep;
@ApiModelProperty(value = "是否显示选人按钮1是,2否")
private Integer showSignFlag;
//是否可以添加安全措施 //是否可以添加安全措施
private Integer measuresStepFlag; private Integer measuresStepFlag;
//是否可以打回1是2否 //是否可以打回1是2否

View File

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

View File

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

View File

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

View File

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

View File

@ -25,5 +25,7 @@ public interface EightworkSupplementaryInfoRepository extends BaseRepository<Eig
* @return * @return
*/ */
int physicalDeleteByWorkId(String workId); 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 lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -50,5 +51,13 @@ public class EightworkSupplementaryInfoRepositoryImpl extends BaseRepositoryImpl
// 使用 Mapper 中定义的物理删除 SQL // 使用 Mapper 中定义的物理删除 SQL
return eightworkSupplementaryInfoMapper.physicalDeleteByWorkId(workId); 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 left join vi_corp_info c on t.corpinfo_id = c.id
where t.delete_enum = 'FALSE' where t.delete_enum = 'FALSE'
and t.status !=0 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 != ''"> <if test="params.eqWorkType != null and params.eqWorkType != ''">
and t.work_type = #{params.eqWorkType} and t.work_type = #{params.eqWorkType}
</if> </if>