| | |
| | | import org.springblade.core.mp.base.BaseServiceImpl; |
| | | import org.springblade.core.oss.model.BladeFile; |
| | | import org.springblade.core.secure.utils.AuthUtil; |
| | | import org.springblade.core.tool.api.R; |
| | | import org.springblade.core.tool.constant.BladeConstant; |
| | | import org.springblade.core.tool.utils.DateUtil; |
| | | import org.springblade.core.tool.utils.FileUtil; |
| | | import org.springblade.core.tool.utils.StringUtil; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.scheduling.annotation.Async; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.sxkj.common.constant.WordOrderConstant; |
| | | import org.sxkj.common.utils.OrderNumUtils; |
| | | import org.springblade.core.tool.api.R; |
| | | import org.springblade.core.tool.constant.BladeConstant; |
| | | import org.springblade.core.tool.utils.FileUtil; |
| | | import org.springblade.core.tool.utils.StringUtil; |
| | | import org.sxkj.gd.common.GdMultipartFileUtil; |
| | | import org.sxkj.gd.workorder.dto.GdXingtuFlyTaskSaveDTO; |
| | | import org.sxkj.gd.workorder.entity.GdManageDeviceEntity; |
| | | import org.sxkj.gd.workorder.entity.GdPatrolTaskEntity; |
| | | import org.sxkj.gd.workorder.entity.GdTaskResultEntity; |
| | | import org.sxkj.gd.workorder.entity.GdWorkOrderEntity; |
| | |
| | | import org.sxkj.gd.workorder.mapper.GdPatrolTaskMapper; |
| | | import org.sxkj.gd.workorder.param.GdPatrolTaskAuditParam; |
| | | import org.sxkj.gd.workorder.param.GdPatrolTaskPageParam; |
| | | import org.sxkj.gd.workorder.service.IGdPatrolTaskService; |
| | | import org.sxkj.gd.workorder.service.IGdManageDeviceService; |
| | | import org.sxkj.gd.workorder.service.IGdPatrolTaskService; |
| | | import org.sxkj.gd.workorder.service.IGdTaskResultService; |
| | | import org.sxkj.gd.workorder.service.IGdWorkOrderFlowService; |
| | | import org.sxkj.gd.workorder.utils.GdPatrolReportWordUtil; |
| | | import org.sxkj.gd.workorder.vo.GdPatrolTaskVO; |
| | | import org.sxkj.gd.common.GdMultipartFileUtil; |
| | | import org.sxkj.gd.xingtu.JianXingtuApiService; |
| | | import org.sxkj.resource.entity.Attach; |
| | | import org.sxkj.resource.feign.IAttachClient; |
| | |
| | | |
| | | import java.io.File; |
| | | import java.io.IOException; |
| | | import java.util.ArrayList; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import java.util.stream.Collectors; |
| | | import java.util.stream.Stream; |
| | | |
| | | /** |
| | | * 巡查任务表 服务实现类 |
| | |
| | | |
| | | @Override |
| | | public IPage<GdPatrolTaskVO> selectGdPatrolTaskPage(IPage<GdPatrolTaskVO> page, GdPatrolTaskPageParam gdPatrolTask) { |
| | | List<Long> deptList = SysCache.getDeptChildIds(Long.valueOf(AuthUtil.getDeptId())); |
| | | List<Long> deptList = new ArrayList<>(); |
| | | if (!AuthUtil.isAdministrator()) { |
| | | deptList = SysCache.getDeptChildIds(Long.valueOf(AuthUtil.getDeptId())); |
| | | } |
| | | gdPatrolTask.setDeptList(deptList); |
| | | List<GdPatrolTaskVO> gdPatrolTaskVOS = baseMapper.selectGdPatrolTaskPage(page, gdPatrolTask); |
| | | return page.setRecords(gdPatrolTaskVOS); |
| | |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * 根据部门ID获取部门名称 |
| | | * |
| | | * @param deptId 部门ID |
| | | * @return 部门名称,缺失时返回"/" |
| | | */ |
| | | private String getDeptName(Long deptId) { |
| | | if (deptId == null) { |
| | | return "/"; |
| | |
| | | return dept.getDeptName(); |
| | | } |
| | | |
| | | /** |
| | | * 根据用户ID获取用户姓名 |
| | | * |
| | | * @param userId 用户ID |
| | | * @return 用户姓名,缺失时返回"/" |
| | | */ |
| | | private String getUserName(Long userId) { |
| | | if (userId == null) { |
| | | return "/"; |
| | |
| | | return StringUtil.isBlank(realName) ? "/" : realName; |
| | | } |
| | | |
| | | /** |
| | | * 上传巡查报告并保存附件信息 |
| | | * |
| | | * @param reportFile 报告文件 |
| | | * @param taskEntity 巡查任务 |
| | | * @return 是否保存成功 |
| | | */ |
| | | private boolean saveAttachFile(File reportFile, GdPatrolTaskEntity taskEntity) throws IOException { |
| | | if (reportFile == null || !reportFile.exists()) { |
| | | throw new RuntimeException("巡查报告文件不存在"); |
| | |
| | | return true; |
| | | } |
| | | |
| | | /** |
| | | * 构建附件元数据 |
| | | * |
| | | * @param taskEntity 巡查任务 |
| | | * @param reportFile 报告文件 |
| | | * @param bladeFile 文件上传结果 |
| | | * @param resultType 结果类型 |
| | | * @param desiredName 期望文件名 |
| | | * @return 附件信息 |
| | | */ |
| | | private Attach buildAttachInfo(GdPatrolTaskEntity taskEntity, File reportFile, BladeFile bladeFile, Integer resultType, String desiredName) { |
| | | Attach attach = new Attach(); |
| | | attach.setDomainUrl(bladeFile.getDomain()); |
| | |
| | | return attach; |
| | | } |
| | | |
| | | /** |
| | | * 生成报告附件名称 |
| | | * |
| | | * @param taskEntity 巡查任务 |
| | | * @param fallbackName 兜底文件名 |
| | | * @return 附件名称 |
| | | */ |
| | | private String buildReportAttachName(GdPatrolTaskEntity taskEntity, String fallbackName) { |
| | | String taskNo = taskEntity != null ? taskEntity.getTaskNo() : null; |
| | | if (StringUtil.isBlank(taskNo)) { |
| | |
| | | return taskNo + ".docx"; |
| | | } |
| | | |
| | | /** |
| | | * 解析巡查任务类型为结果类型 |
| | | * |
| | | * @param patrolTaskType 巡查任务类型 |
| | | * @return 结果类型 |
| | | */ |
| | | private Integer parseResultType(String patrolTaskType) { |
| | | if (StringUtil.isBlank(patrolTaskType)) { |
| | | return null; |
| | |
| | | } |
| | | if (StringUtil.isNotBlank(gdPatrolTaskVO.getAirportId())) { |
| | | param.setAirportId(gdPatrolTaskVO.getAirportId()); |
| | | // GdManageDeviceEntity device = null; |
| | | // if (StringUtils.isNumeric(taskEntity.getAirportId())) { |
| | | // device = gdManageDeviceService.getById(Long.valueOf(taskEntity.getDeviceId())); |
| | | // } |
| | | // if (device == null) { |
| | | // device = gdManageDeviceService.lambdaQuery() |
| | | // .eq(GdManageDeviceEntity::getAirportId, taskEntity.getDeviceId()) |
| | | // .one(); |
| | | // } |
| | | // if (device != null && StringUtil.isNotBlank(device.getAirportId())) { |
| | | // param.setAirportId(device.getAirportId()); |
| | | // } else { |
| | | // param.setAirportId(taskEntity.getAirportId()); |
| | | // } |
| | | } |
| | | String status = parseStatus(gdPatrolTaskVO.getTaskStatus()); |
| | | if (StringUtil.isNotBlank(status)) { |
| | | param.setStatus(status); |
| | | } |
| | | param.setTaskType("定时执行"); |
| | | param.setStatus("待执行"); |
| | | param.setTaskType("航线飞行"); |
| | | return param; |
| | | } |
| | | |
| | | private String parseStatus(String taskStatus) { |
| | | if (StringUtil.isBlank(taskStatus)) { |
| | | return null; |
| | | } |
| | | switch (taskStatus) { |
| | | case "0": |
| | | return "待签收"; |
| | | case "1": |
| | | return "拒绝签收"; |
| | | case "2": |
| | | return "已撤回"; |
| | | case "3": |
| | | return "待审核"; |
| | | case "4": |
| | | return "审核驳回"; |
| | | case "5": |
| | | return "审核通过"; |
| | | case "6": |
| | | return "待验收"; |
| | | case "7": |
| | | return "拒绝验收"; |
| | | case "8": |
| | | return "验收通过"; |
| | | default: |
| | | return taskStatus; |
| | | } |
| | | @Override |
| | | public GdPatrolTaskVO getPatrolTaskDetail(GdPatrolTaskEntity gdPatrolTaskEntity) { |
| | | return baseMapper.getPatrolTaskDetail(gdPatrolTaskEntity); |
| | | } |
| | | |
| | | @Override |
| | | public boolean updatePatrolTaskById(GdPatrolTaskEntity auditParam) { |
| | | GdPatrolTaskEntity patrolTaskEntity = getById(auditParam.getId()); |
| | | // 保存巡查工单流转 |
| | | saveWorkOrderFlow(patrolTaskEntity.getWorkOrderId(), PatrolTaskStatusEnum.PENDING_ACCEPTANCE, null, null); |
| | | // 保存工单流转 |
| | | GdWorkOrderEntity workOrderEntity = baseMapper.getWorkOrderIdById(auditParam.getId(), WorkOrderStatusEnum.EXECUTING_TO_BE_COMPLETED.getCode()); |
| | | // 工单流转 |
| | | if (workOrderEntity == null) { |
| | | updateWorkOrderStatusAndFlow(patrolTaskEntity.getWorkOrderId(), WorkOrderStatusEnum.EXECUTING_TO_BE_COMPLETED); |
| | | } |
| | | return updateById(auditParam); |
| | | } |
| | | } |