无人机项目后端代码
guoshilong
2023-10-08 1ad4e77cc910abdb7e95ebea160473526c8ac9ce
添加重复定时和连续执行
5 files modified
2 files added
178 ■■■■■ changed files
pom.xml 5 ●●●●● patch | view | raw | blame | history
src/main/java/com/dji/sample/wayline/dao/IWaylineJobMapper.xml 1 ●●●● patch | view | raw | blame | history
src/main/java/com/dji/sample/wayline/model/entity/WaylineJobEntity.java 32 ●●●●● patch | view | raw | blame | history
src/main/java/com/dji/sample/wayline/model/enums/WaylineRepFreTypeEnum.java 19 ●●●●● patch | view | raw | blame | history
src/main/java/com/dji/sample/wayline/model/param/CreateJobParam.java 8 ●●●●● patch | view | raw | blame | history
src/main/java/com/dji/sample/wayline/service/impl/WaylineJobServiceImpl.java 39 ●●●●● patch | view | raw | blame | history
src/main/java/com/dji/sample/wayline/utils/JobTimeUtils.java 74 ●●●●● patch | view | raw | blame | history
pom.xml
@@ -179,6 +179,11 @@
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.33</version>
        </dependency>
    </dependencies>
src/main/java/com/dji/sample/wayline/dao/IWaylineJobMapper.xml
@@ -37,6 +37,7 @@
                    #{item}
                </foreach>
            </if>
        ORDER BY job.create_time DESC
    </select>
</mapper>
src/main/java/com/dji/sample/wayline/model/entity/WaylineJobEntity.java
@@ -1,12 +1,14 @@
package com.dji.sample.wayline.model.entity;
import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.List;
/**
 * @author sean
@@ -17,7 +19,7 @@
@Builder
@NoArgsConstructor
@AllArgsConstructor
@TableName("wayline_job")
@TableName(value = "wayline_job",autoResultMap = true)
public class WaylineJobEntity implements Serializable {
    @TableId(type = IdType.AUTO)
@@ -82,4 +84,32 @@
    @TableField("parent_id")
    private String parentId;
    /**
     * 电量
     */
    @TableField("battery_capacity")
    private Integer batteryCapacity;
    /**
     * 执行时间数组
     */
    @TableField(value = "execute_time_arr",typeHandler = FastjsonTypeHandler.class)
    private List<List<Long>> executeTimeArr;
    /**
     * 重复频率类型
     */
    @TableField("rep_fre_type")
    private Integer repFreType;
    @TableField("rep_fre_val")
    private Integer repFreVal;
    @TableField("rep_rule_type")
    private Integer repRuleType;
    @TableField(value = "rep_rule_val",typeHandler = FastjsonTypeHandler.class)
    private List<Integer> repRuleVal;
}
src/main/java/com/dji/sample/wayline/model/enums/WaylineRepFreTypeEnum.java
New file
@@ -0,0 +1,19 @@
package com.dji.sample.wayline.model.enums;
import lombok.Getter;
/**
 * 任务重复频率类型
 */
@Getter
public enum WaylineRepFreTypeEnum {
    DAY(1),
    WEEK(2),
    MONTH(3);
    private Integer val;
    WaylineRepFreTypeEnum(Integer val) {
        this.val = val;
    }
}
src/main/java/com/dji/sample/wayline/model/param/CreateJobParam.java
@@ -48,4 +48,12 @@
    private List<Long> taskDays;
    private List<List<Long>> taskPeriods;
    private Integer repFreType;
    private Integer repFreVal;
    private Integer repRuleType;
    private List<Integer> repRuleVal;
}
src/main/java/com/dji/sample/wayline/service/impl/WaylineJobServiceImpl.java
@@ -158,6 +158,45 @@
    @Override
    public ResponseResult publishFlightTask(CreateJobParam param, CustomClaim customClaim) throws SQLException {
        //当重复定时和连续执行时走这个逻辑
        if (param.getTaskType().getVal() == WaylineTaskTypeEnum.CONDITION.getVal()){
            //保存数据
            WaylineJobEntity waylineJobEntity = WaylineJobEntity.builder()
                    .jobId(UUID.randomUUID().toString())
                    .name(param.getName())
                    .dockSn(param.getDockSn())
                    .fileId(param.getFileId())
                    .username(customClaim.getUsername())
                    .workspaceId(customClaim.getWorkspaceId())
                    .beginTime(param.getTaskDays().get(0)*1000)
                    .endTime(param.getTaskDays().get(1)*1000)
                    .status(WaylineJobStatusEnum.PENDING.getVal())
                    .taskType(param.getTaskType().getVal())
                    .waylineType(param.getWaylineType().getVal())
                    .outOfControlAction(param.getOutOfControlAction())
                    .batteryCapacity(param.getMinBatteryCapacity())
                    .rthAltitude(param.getRthAltitude())
                    .mediaCount(0)
                    .repFreVal(param.getRepFreVal())
                    .repFreType(param.getRepFreType())
                    .repRuleType(param.getRepRuleType())
                    .repRuleVal(param.getRepRuleVal())
                    .executeTimeArr(param.getTaskPeriods())
                    .build();
            Boolean insert = mapper.insert(waylineJobEntity)>0;
            return ResponseResult.success(insert);
        }
        fillImmediateTime(param);
//        param.getTaskDays().sort((a, b) -> (int) (a - b));
src/main/java/com/dji/sample/wayline/utils/JobTimeUtils.java
New file
@@ -0,0 +1,74 @@
package com.dji.sample.wayline.utils;
import com.dji.sample.wayline.model.entity.WaylineJobEntity;
import com.dji.sample.wayline.model.enums.WaylineRepFreTypeEnum;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
 * 处理任务时间
 */
public  class JobTimeUtils {
    public static void getJobTime(WaylineJobEntity waylineJobEntity) {
        //获取开始时间
        if (waylineJobEntity.getRepFreType() == WaylineRepFreTypeEnum.DAY.getVal()) {
            //日
        } else if (waylineJobEntity.getRepFreType() == WaylineRepFreTypeEnum.WEEK.getVal()) {
            //周
        } else if (waylineJobEntity.getRepFreType() == WaylineRepFreTypeEnum.MONTH.getVal()) {
            //月
        } else {
        }
    }
    /**
     * 根据开始时间和结束时间获取日期列表
     * @param beginTime
     * @param endTime
     * @return
     */
    public static List<LocalDate> getDateBetweenTime(Long beginTime,Long endTime){
        //开始日期
        LocalDate beginDate = LocalDate.ofInstant(Instant.ofEpochMilli(beginTime), ZoneId.systemDefault());
        //结束日期
        LocalDate endDate =LocalDate.ofInstant(Instant.ofEpochMilli(endTime), ZoneId.systemDefault());
        LocalDate date = beginDate;
        List<LocalDate> dates = new ArrayList<>();
        //遍历日期
        while (!date.equals(endDate.plusDays(1))) {
            dates.add(date);
            date = date.plusDays(1);
        }
        return dates;
    }
    public static void main(String[] args) {
        LocalTime localTime = LocalTime.ofInstant(Instant.ofEpochSecond(1696761468L), ZoneId.systemDefault());
        DateFormat dateFormat = new SimpleDateFormat("HH:mm");
        String format = localTime.format(DateTimeFormatter.ofPattern("HH:mm"));
        System.out.println(format);
    }
}