package com.dji.sample.patches.utils; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.dji.sample.common.model.CustomClaim; import com.dji.sample.patches.config.pojo.PatchesConfigPojo; import com.dji.sample.patches.dao.ShpToDataSourceMapper; import com.dji.sample.patches.model.entity.LotInfo; import com.dji.sample.patches.xml.mode.XMLTemplateModel; import com.dji.sample.patches.xml.utils.CreateWaylineFileUtils; import com.dji.sample.wayline.model.dto.WaylineFileDTO; import com.dji.sample.wayline.model.entity.WaylineFileEntity; import com.dji.sample.wayline.model.enums.WaylineTaskTypeEnum; import com.dji.sample.wayline.model.param.CreateJobParam; import com.dji.sample.wayline.service.IWayLineTaskService; import com.dji.sample.wayline.service.IWaylineFileService; import com.dji.sample.wayline.service.IWaylineJobService; import org.locationtech.jts.geom.Coordinate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import org.springframework.web.multipart.MultipartFile; import java.io.File; import java.io.IOException; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import java.util.UUID; import static com.dji.sample.patches.utils.MultipartFileTOFileUtil.convert; import static com.dji.sample.patches.utils.ZipUtil.zipFolder; import static com.dji.sample.wayline.model.enums.WaylineTaskTypeEnum.TIMED; import static com.dji.sample.wayline.model.enums.WaylineTemplateTypeEnum.WAYPOINT; @Component public class TimerUtil { @Autowired private ShpToDataSourceMapper shpToDataSourceMapper; @Autowired private PatchesConfigPojo patchesConfigPojo; @Autowired public IWaylineFileService waylineFileService; @Autowired private IWaylineJobService waylineJobService; @Autowired private IWayLineTaskService wayLineTaskService; /** * 定时 * @throws IOException * @throws SQLException */ @Scheduled(cron = "0 25 14 * * ?") public void myTask() throws IOException, SQLException { //获取未规划的图斑集合 List list = getNoPlan(); long timestamp = System.currentTimeMillis(); String waylineName = "云飞行调查" + timestamp; String workspaceId ="4a574db8-4ad3-48f7-9f16-3edbcd8056e1"; //根据获取的图斑集合获得kmz航线文件 MultipartFile multipartFile = getFile(waylineName, list); //上传航线文件 String waylineId=backWayline(multipartFile, waylineName, workspaceId, backclaim().getUsername()); //将为规划的图斑状态更新为已规划 updateStatu(list); //调用publshFlightTask方法创建定时任务 waylineJobService.publishFlightTask(JobParam(waylineId), backclaim()); } public MultipartFile getFile(String waylineName, List list) throws IOException { List coordinates = GeoToolsUtil.getRoutePointOrder(list, 28.218512, 115.856725497); XMLTemplateModel xmlModel = XMLTemplateModel.init(coordinates, list); CreateWaylineFileUtils.createWaylineFile(xmlModel, patchesConfigPojo.getTemplate(), patchesConfigPojo.getTargetTemplate(), patchesConfigPojo.getWaylines(), patchesConfigPojo.getTargetWaylines()); String destKMZFile = patchesConfigPojo.getDestKMZFile() + waylineName + ".kmz"; zipFolder(patchesConfigPojo.getSourceDir(), destKMZFile); MultipartFile multipartFile = convert(new File(destKMZFile)); return multipartFile; } public String backWayline(MultipartFile multipartFile, String waylineName, String workspaceId,String username) { waylineFileService.importKmzFileBack(multipartFile, workspaceId,username); WaylineFileEntity entity = waylineFileService.selectByName(waylineName); try { waylineFileService.getObjectUrl(workspaceId, entity.getWaylineId()); } catch (SQLException e) { throw new RuntimeException(e); } return entity.getWaylineId(); } public List getNoPlan() { return shpToDataSourceMapper.selectList(new LambdaQueryWrapper().eq(LotInfo::getIsplan, 0)); } public void updateStatu(List list) { for (LotInfo lotInfo : list) { lotInfo.setIsplan(1); shpToDataSourceMapper.updateById(lotInfo); } } public CreateJobParam JobParam(String waylineId) { List> listOfLists = new ArrayList<>(); List sublist = new ArrayList<>(); sublist.add(1714944600L); // 添加整数值 listOfLists.add(sublist); List list = new ArrayList<>(); list.add(1714944600L); CreateJobParam param = new CreateJobParam(); param.setName("云飞行调查"); param.setTaskType(TIMED); param.setOutOfControlAction(0); param.setRepFreType(3); param.setRepFreVal(1); param.setRepRuleType(1); param.setExecuteStartTimeArr(listOfLists); param.setRthAltitude(80); param.setWaylineType(WAYPOINT); param.setTaskPeriods(listOfLists); param.setTaskDays(list); param.setFileId(waylineId); param.setDockSn("4TADKCMB010016"); return param; } public CustomClaim backclaim() { CustomClaim claim=new CustomClaim(); claim.setId("1"); claim.setUsername("adminPC"); claim.setWorkspaceId("4a574db8-4ad3-48f7-9f16-3edbcd8056e1"); claim.setUserType(1); return claim; } }