rain
2024-05-06 571661af0ff0b14c7b8915adb3859013b2dd7058
定时任务
1 files added
131 ■■■■■ changed files
src/main/java/com/dji/sample/patches/utils/TimerUtil.java 131 ●●●●● patch | view | raw | blame | history
src/main/java/com/dji/sample/patches/utils/TimerUtil.java
New file
@@ -0,0 +1,131 @@
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<LotInfo> 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<LotInfo> list) throws IOException {
        List<PointPO> 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<LotInfo> getNoPlan() {
        return shpToDataSourceMapper.selectList(new LambdaQueryWrapper<LotInfo>().eq(LotInfo::getIsplan, 0));
    }
    public void updateStatu(List<LotInfo> list) {
        for (LotInfo lotInfo : list) {
            lotInfo.setIsplan(1);
            shpToDataSourceMapper.updateById(lotInfo);
        }
    }
    public CreateJobParam JobParam(String waylineId) {
        List<List<Long>> listOfLists = new ArrayList<>();
        List<Long> sublist = new ArrayList<>();
        sublist.add(1714944600L); // 添加整数值
        listOfLists.add(sublist);
        List<Long> 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;
    }
}