| | |
| | | import org.sxkj.gd.workorder.enums.WorkOrderTypeEnum; |
| | | import org.sxkj.gd.workorder.excel.GdPatrolTaskExcel; |
| | | import org.sxkj.gd.workorder.mapper.GdPatrolTaskMapper; |
| | | import org.sxkj.gd.workorder.mapper.GdWorkOrderMapper; |
| | | import org.sxkj.gd.workorder.param.GdPatrolTaskAuditParam; |
| | | import org.sxkj.gd.workorder.param.GdPatrolTaskPageParam; |
| | | import org.sxkj.gd.workorder.service.IGdManageDeviceService; |
| | |
| | | private JianXingtuApiService jianXingtuApiService; |
| | | @Autowired |
| | | private IGdManageDeviceService gdManageDeviceService; |
| | | @Autowired |
| | | private GdWorkOrderMapper gdWorkOrderMapper; |
| | | |
| | | @Override |
| | | public IPage<GdPatrolTaskVO> selectGdPatrolTaskPage(IPage<GdPatrolTaskVO> page, GdPatrolTaskPageParam gdPatrolTask) { |
| | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public boolean savePatrolTask(List<GdPatrolTaskEntity> taskEntityList) { |
| | | // 参数校验:防止空指针 |
| | | if (taskEntityList == null || taskEntityList.isEmpty()) { |
| | | throw new RuntimeException("任务列表不能为空"); |
| | | } |
| | | |
| | | // 获取第一个任务的工单ID |
| | | Long workOrderId = taskEntityList.get(0).getWorkOrderId(); |
| | | if (workOrderId == null) { |
| | | throw new RuntimeException("工单ID不能为空"); |
| | | } |
| | | |
| | | // 查询工单信息 |
| | | GdWorkOrderEntity gdWorkOrderEntity = gdWorkOrderMapper.selectById(workOrderId); |
| | | if (gdWorkOrderEntity == null) { |
| | | throw new RuntimeException("工单不存在,工单ID: " + workOrderId); |
| | | } |
| | | |
| | | // 更新流程节点 |
| | | for (GdPatrolTaskEntity gdPatrolTaskEntity : taskEntityList) { |
| | | if (gdPatrolTaskEntity == null) { |
| | | log.warn("跳过空任务对象"); |
| | | continue; |
| | | } |
| | | |
| | | // 设置航线ID |
| | | gdPatrolTaskEntity.setAirlineId(gdPatrolTaskEntity.getPatrolRouteUrl()); |
| | | // 生成巡查任务编号 |
| | |
| | | String timestamp = OrderNumUtils.initOrderNum(WordOrderConstant.PATROL_TASK_KEY); |
| | | gdPatrolTaskEntity.setTaskNo(WordOrderConstant.PATROL_TASK_PREFIX + timestamp); |
| | | } |
| | | |
| | | // 从工单实体中获取区域编码,防止空指针 |
| | | String areaCode = gdWorkOrderEntity.getAreaCode(); |
| | | gdPatrolTaskEntity.setAreaCode(areaCode != null ? areaCode : ""); |
| | | // 设置初始状态为待签收(对应流程图:等待接单) |
| | | gdPatrolTaskEntity.setTaskStatus(PatrolTaskStatusEnum.PENDING_SIGNING.getValue()); |
| | | |
| | |
| | | gdWorkOrderFlowEntity.setFlowDesc(PatrolTaskStatusEnum.PENDING_SIGNING.getStageDesc()); |
| | | gdWorkOrderFlowEntity.setOperator(StringUtil.isBlank(AuthUtil.getNickName()) ? "系统" : AuthUtil.getNickName()); |
| | | gdWorkOrderFlowEntity.setType(WorkOrderTypeEnum.PATROL_TASK.getValue()); |
| | | gdWorkOrderFlowEntity.setAreaCode(gdPatrolTaskEntity.getAreaCode()); |
| | | // 使用局部变量areaCode,防止空指针 |
| | | gdWorkOrderFlowEntity.setAreaCode(areaCode != null ? areaCode : ""); |
| | | gdWorkOrderFlowEntity.setCreateDept(Long.valueOf(StringUtil.isBlank(AuthUtil.getDeptId()) ? "0" : AuthUtil.getDeptId())); |
| | | boolean save1 = gdWorkOrderFlowService.save(gdWorkOrderFlowEntity); |
| | | if (!save1) { |
| | |
| | | if (bladeFile == null || StringUtil.isBlank(bladeFile.getLink())) { |
| | | throw new RuntimeException("附件上传失败"); |
| | | } |
| | | Integer resultType = parseResultType(taskEntity != null ? taskEntity.getPatrolTaskType() : null); |
| | | Attach attach = buildAttachInfo(taskEntity, reportFile, bladeFile, resultType, desiredName); |
| | | // Integer resultType = parseResultType(taskEntity != null ? taskEntity.getPatrolTaskType() : null); |
| | | Attach attach = buildAttachInfo(taskEntity, reportFile, bladeFile, taskEntity.getPatrolTaskType(), desiredName); |
| | | Boolean saved = attachClient.saveAttachInfo(attach); |
| | | if (!Boolean.TRUE.equals(saved)) { |
| | | log.error("附件信息保存失败,报告文件:" + desiredName); |
| | |
| | | * @param desiredName 期望文件名 |
| | | * @return 附件信息 |
| | | */ |
| | | private Attach buildAttachInfo(GdPatrolTaskEntity taskEntity, File reportFile, BladeFile bladeFile, Integer resultType, String desiredName) { |
| | | private Attach buildAttachInfo(GdPatrolTaskEntity taskEntity, File reportFile, BladeFile bladeFile, List<List<String>> resultType, String desiredName) { |
| | | Attach attach = new Attach(); |
| | | attach.setDomainUrl(bladeFile.getDomain()); |
| | | attach.setLink(bladeFile.getLink()); |
| | |
| | | attach.setOriginalName(bladeFile.getOriginalName()); |
| | | attach.setAttachSize(reportFile.length()); |
| | | attach.setExtension(FileUtil.getFileExtension(reportFile.getName())); |
| | | attach.setResultType(resultType); |
| | | attach.setResultType(JSON.toJSONString(resultType)); |
| | | attach.setPatrolTaskId(String.valueOf(taskEntity != null ? taskEntity.getId() : null)); |
| | | Long createUser = taskEntity != null ? taskEntity.getCreateUser() : null; |
| | | Long updateUser = taskEntity != null ? taskEntity.getUpdateUser() : null; |
| | |
| | | return R.fail("巡查任务不存在"); |
| | | } |
| | | GdXingtuFlyTaskSaveDTO param = buildXingtuFlyTask(taskEntity); |
| | | return jianXingtuApiService.saveFlyTask(param); |
| | | return jianXingtuApiService.saveFlyTask(param); |
| | | } |
| | | |
| | | /** |
| | |
| | | } else if (StringUtil.isNotBlank(gdPatrolTaskVO.getTaskNo())) { |
| | | param.setName(gdPatrolTaskVO.getTaskNo()); |
| | | } |
| | | if (StringUtil.isNotBlank(gdPatrolTaskVO.getPatrolTaskType())) { |
| | | param.setInspectionType(gdPatrolTaskVO.getPatrolTaskType()); |
| | | } |
| | | // if (StringUtil.isNotBlank(gdPatrolTaskVO.getPatrolTaskType())) { |
| | | // param.setInspectionType(gdPatrolTaskVO.getPatrolTaskType()); |
| | | // } |
| | | if ((gdPatrolTaskVO.getId() != null)) { |
| | | param.setPatrolTaskId(String.valueOf(gdPatrolTaskVO.getId())); |
| | | } |
| | |
| | | } |
| | | if (gdPatrolTaskVO.getExecuteTime() != null) { |
| | | param.setSingleTime(DateUtil.format(gdPatrolTaskVO.getExecuteTime(), "yyyy-MM-dd HH:mm:ss")); |
| | | } |
| | | } |
| | | if (StringUtil.isNotBlank(gdPatrolTaskVO.getAreaCode())) { |
| | | param.setRegionCode(gdPatrolTaskVO.getAreaCode()); |
| | | // regionCode : "3600,3608,360802" |
| | | String regionCode = convertAreaCodeToRegionCode(gdPatrolTaskVO.getAreaCode()); |
| | | param.setRegionCode(regionCode); |
| | | } |
| | | if (StringUtil.isNotBlank(gdPatrolTaskVO.getAirportId())) { |
| | | param.setAirportId(gdPatrolTaskVO.getAirportId()); |
| | |
| | | if (StringUtil.isNotBlank(gdPatrolTaskVO.getDeviceFlyerId())) { |
| | | param.setDeviceFlyerId(gdPatrolTaskVO.getDeviceFlyerId()); |
| | | } |
| | | if (StringUtil.isNotBlank(JSON.toJSONString(gdPatrolTaskVO.getAlgorithmIds()))) { |
| | | param.setAlgorithmId(JSON.toJSONString(gdPatrolTaskVO.getAlgorithmIds())); |
| | | if (gdPatrolTaskVO.getAlgorithmIds() != null && !gdPatrolTaskVO.getAlgorithmIds().isEmpty()) { |
| | | // 将 List<String> 转换为逗号分隔的字符串 |
| | | String algorithmIdStr = String.join(",", gdPatrolTaskVO.getAlgorithmIds()); |
| | | param.setAlgorithmId(algorithmIdStr); |
| | | } |
| | | // 机构 |
| | | param.setDeptId(gdPatrolTaskVO.getCreateDept()); |
| | | // 巡检类型 |
| | | param.setInspectionTypeArr(Arrays.asList(gdPatrolTaskVO.getPatrolTaskType())); |
| | | param.setInspectionType(gdPatrolTaskVO.getPatrolTaskType()); |
| | | param.setInspectionTypeArr(gdPatrolTaskVO.getPatrolTaskType()); |
| | | // param.setInspectionType(gdPatrolTaskVO.getPatrolTaskType()); |
| | | // 机巢名称 |
| | | param.setAirportName(gdPatrolTaskVO.getDeviceName()); |
| | | param.setStatus("待执行"); |
| | |
| | | return baseMapper.selectListByWorkOrderId(workOrderId); |
| | | } |
| | | |
| | | /** |
| | | * 将区域编码转换为多级行政区划编码格式 |
| | | * |
| | | * @param areaCode 区域编码(如:360802) |
| | | * @return 多级行政区划编码,格式为 "省编码,市编码,区编码"(如:"3600,3608,360802") |
| | | */ |
| | | private String convertAreaCodeToRegionCode(String areaCode) { |
| | | if (StringUtil.isBlank(areaCode)) { |
| | | return null; |
| | | } |
| | | |
| | | // 如果已经是逗号分隔的格式,直接返回 |
| | | if (areaCode.contains(",")) { |
| | | return areaCode; |
| | | } |
| | | |
| | | // 去除空格并确保长度为6位 |
| | | String cleanCode = areaCode.trim(); |
| | | // 如果长度大于6位,只取前6位 |
| | | if (cleanCode.length() > 6) { |
| | | log.warn("区域编码长度超过6位,截取前6位: {}", cleanCode); |
| | | cleanCode = cleanCode.substring(0, 6); |
| | | } |
| | | if (cleanCode.length() != 6) { |
| | | log.warn("区域编码格式不正确,期望6位数字,实际为: {}", cleanCode); |
| | | return cleanCode; |
| | | } |
| | | |
| | | try { |
| | | // 提取省、市、区三级编码 |
| | | String provinceCode = cleanCode.substring(0, 2) + "00"; // 省级编码(如:3600) |
| | | String cityCode = cleanCode.substring(0, 4); // 市级编码(如:3608) |
| | | String districtCode = cleanCode; // 区级编码(如:360802) |
| | | |
| | | return provinceCode + "," + cityCode + "," + districtCode; |
| | | } catch (Exception e) { |
| | | log.error("区域编码转换失败: {}", e.getMessage()); |
| | | return areaCode; |
| | | } |
| | | } |
| | | |
| | | } |