From 070005ffba3ce5cb80e27448bca668aa25edee62 Mon Sep 17 00:00:00 2001
From: riku <risaku@163.com>
Date: 星期五, 11 六月 2021 17:02:51 +0800
Subject: [PATCH] 1. 新增走航任务增删改查相关功能 2. 新增无人船数据excel导入功能 3. 优化多参数接收逻辑,解决单个数据头导致数据包结构判断错误问题

---
 src/main/kotlin/com/flightfeather/uav/lightshare/web/RealTimeDataController.kt           |   11 +
 src/main/resources/mapper/MissionMapper.xml                                              |   20 +++
 src/main/kotlin/com/flightfeather/uav/common/utils/FileExchange.kt                       |   75 ++++++++++++
 src/main/kotlin/com/flightfeather/uav/lightshare/service/RealTimeDataService.kt          |    4 
 src/main/kotlin/com/flightfeather/uav/socket/UAVByteDataDecoder.kt                       |    5 
 src/main/kotlin/com/flightfeather/uav/lightshare/web/MissionController.kt                |   27 ++++
 src/main/kotlin/com/flightfeather/uav/domain/entity/Mission.java                         |   92 +++++++++++++++
 src/main/kotlin/com/flightfeather/uav/domain/mapper/MissionMapper.kt                     |    8 +
 src/main/resources/generator/generatorConfig.xml                                         |   14 -
 src/main/kotlin/com/flightfeather/uav/lightshare/service/MissionService.kt               |   13 ++
 src/main/kotlin/com/flightfeather/uav/lightshare/bean/DataImportResult.kt                |   11 +
 src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/MissionServiceImpl.kt      |   42 +++++++
 src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/RealTimeDataServiceImpl.kt |   15 ++
 src/main/resources/application.yml                                                       |    5 
 14 files changed, 326 insertions(+), 16 deletions(-)

diff --git a/src/main/kotlin/com/flightfeather/uav/common/utils/FileExchange.kt b/src/main/kotlin/com/flightfeather/uav/common/utils/FileExchange.kt
index b282399..3c9d5fb 100644
--- a/src/main/kotlin/com/flightfeather/uav/common/utils/FileExchange.kt
+++ b/src/main/kotlin/com/flightfeather/uav/common/utils/FileExchange.kt
@@ -1,11 +1,13 @@
 package com.flightfeather.uav.common.utils
 
 import com.alibaba.fastjson.JSONObject
+import com.flightfeather.uav.domain.entity.RealTimeData
 import com.flightfeather.uav.socket.bean.AirData
 import org.apache.poi.hssf.usermodel.HSSFWorkbook
 import java.io.File
 import java.io.FileInputStream
 import java.io.FileOutputStream
+import java.io.InputStream
 import java.text.SimpleDateFormat
 import java.util.*
 
@@ -21,6 +23,79 @@
         private val format = SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
     }
 
+    fun exchangeBoatData(deviceCode: String, file: InputStream): List<RealTimeData> {
+        val workbook = HSSFWorkbook(file)
+        val sheet = workbook.getSheetAt(0)
+
+        val dataList = mutableListOf<RealTimeData>()
+
+        for (i in 1 until sheet.lastRowNum) {
+            val row = sheet.getRow(i)
+            val time = row.getCell(2).numericCellValue.toLong() * 1000
+            val lat = row.getCell(4).numericCellValue
+            val lng = row.getCell(5).numericCellValue
+            val value = row.getCell(6).stringCellValue
+
+            //鏃堕棿
+            val datetime = Date(time)
+            //鐩戞祴鍥犲瓙
+            val jO = JSONObject.parseObject(value)
+            val tmp = jO.getDoubleValue(TMP)
+            val spC = jO.getDoubleValue(SPCOND)
+            val tur = jO.getDoubleValue(TUR)
+            val dO = jO.getDoubleValue(DO)
+            val ph = jO.getDoubleValue(PH)
+
+            val factorsList = mutableListOf<AirData>()
+
+            factorsList.apply {
+                add(AirData().apply {
+                    factorId = "1"
+                    factorName = "TMP"
+                    factorData = tmp
+                    physicalQuantity = 0.0
+                })
+                add(AirData().apply {
+                    factorId = "2"
+                    factorName = "spC"
+                    factorData = spC
+                    physicalQuantity = 0.0
+                })
+                add(AirData().apply {
+                    factorId = "3"
+                    factorName = "tur"
+                    factorData = tur
+                    physicalQuantity = 0.0
+                })
+                add(AirData().apply {
+                    factorId = "4"
+                    factorName = "DO"
+                    factorData = dO
+                    physicalQuantity = 0.0
+                })
+                add(AirData().apply {
+                    factorId = "5"
+                    factorName = "PH"
+                    factorData = ph
+                    physicalQuantity = 0.0
+                })
+            }
+
+            val factors = JSONObject.toJSON(factorsList).toString()
+
+            dataList.add(RealTimeData().apply {
+                this.deviceCode = deviceCode
+                latitude = lat.toBigDecimal()
+                longitude = lng.toBigDecimal()
+                dataTime = datetime
+                createTime = Date()
+                this.factors = factors
+            })
+        }
+
+        return dataList
+    }
+
     fun doTask() {
         //source
         val path = "E:\\宸ヤ綔\\閲戝北璧拌埅\\MissionData.xls"
diff --git a/src/main/kotlin/com/flightfeather/uav/domain/entity/Mission.java b/src/main/kotlin/com/flightfeather/uav/domain/entity/Mission.java
new file mode 100644
index 0000000..e5a55f1
--- /dev/null
+++ b/src/main/kotlin/com/flightfeather/uav/domain/entity/Mission.java
@@ -0,0 +1,92 @@
+package com.flightfeather.uav.domain.entity;
+
+import java.util.Date;
+import javax.persistence.*;
+
+public class Mission {
+    @Id
+    @Column(name = "mission_code")
+    private String missionCode;
+
+    @Column(name = "device_type")
+    private String deviceType;
+
+    @Column(name = "device_code")
+    private String deviceCode;
+
+    @Column(name = "start_time")
+    private Date startTime;
+
+    @Column(name = "end_time")
+    private Date endTime;
+
+    /**
+     * @return mission_code
+     */
+    public String getMissionCode() {
+        return missionCode;
+    }
+
+    /**
+     * @param missionCode
+     */
+    public void setMissionCode(String missionCode) {
+        this.missionCode = missionCode == null ? null : missionCode.trim();
+    }
+
+    /**
+     * @return device_type
+     */
+    public String getDeviceType() {
+        return deviceType;
+    }
+
+    /**
+     * @param deviceType
+     */
+    public void setDeviceType(String deviceType) {
+        this.deviceType = deviceType == null ? null : deviceType.trim();
+    }
+
+    /**
+     * @return device_code
+     */
+    public String getDeviceCode() {
+        return deviceCode;
+    }
+
+    /**
+     * @param deviceCode
+     */
+    public void setDeviceCode(String deviceCode) {
+        this.deviceCode = deviceCode == null ? null : deviceCode.trim();
+    }
+
+    /**
+     * @return start_time
+     */
+    public Date getStartTime() {
+        return startTime;
+    }
+
+    /**
+     * @param startTime
+     */
+    public void setStartTime(Date startTime) {
+        this.startTime = startTime;
+    }
+
+    /**
+     * @return end_time
+     */
+    public Date getEndTime() {
+        return endTime;
+    }
+
+    /**
+     * @param endTime
+     */
+    public void setEndTime(Date endTime) {
+        this.endTime = endTime;
+    }
+}
\ No newline at end of file
diff --git a/src/main/kotlin/com/flightfeather/uav/domain/mapper/MissionMapper.kt b/src/main/kotlin/com/flightfeather/uav/domain/mapper/MissionMapper.kt
new file mode 100644
index 0000000..550c9f6
--- /dev/null
+++ b/src/main/kotlin/com/flightfeather/uav/domain/mapper/MissionMapper.kt
@@ -0,0 +1,8 @@
+package com.flightfeather.uav.domain.mapper
+
+import com.flightfeather.uav.domain.MyMapper
+import com.flightfeather.uav.domain.entity.Mission
+import org.apache.ibatis.annotations.Mapper
+
+@Mapper
+interface MissionMapper : MyMapper<Mission?>
\ No newline at end of file
diff --git a/src/main/kotlin/com/flightfeather/uav/lightshare/bean/DataImportResult.kt b/src/main/kotlin/com/flightfeather/uav/lightshare/bean/DataImportResult.kt
new file mode 100644
index 0000000..4326c88
--- /dev/null
+++ b/src/main/kotlin/com/flightfeather/uav/lightshare/bean/DataImportResult.kt
@@ -0,0 +1,11 @@
+package com.flightfeather.uav.lightshare.bean
+
+import com.fasterxml.jackson.annotation.JsonInclude
+
+/**
+ * 鐩戞祴鏁版嵁瀵煎叆澶勭悊缁撴灉
+ */
+@JsonInclude(JsonInclude.Include.NON_NULL)
+data class DataImportResult(
+    val result: String
+)
\ No newline at end of file
diff --git a/src/main/kotlin/com/flightfeather/uav/lightshare/service/MissionService.kt b/src/main/kotlin/com/flightfeather/uav/lightshare/service/MissionService.kt
new file mode 100644
index 0000000..daa8992
--- /dev/null
+++ b/src/main/kotlin/com/flightfeather/uav/lightshare/service/MissionService.kt
@@ -0,0 +1,13 @@
+package com.flightfeather.uav.lightshare.service
+
+import com.flightfeather.uav.domain.entity.Mission
+import com.flightfeather.uav.lightshare.bean.BaseResponse
+
+interface MissionService {
+
+    fun getMission(type: String?, page: Int?, perPage: Int?): BaseResponse<List<Mission>>
+
+    fun createMission(mission: Mission): BaseResponse<Boolean>
+
+    fun deleteMission(missionCode: String): BaseResponse<Boolean>
+}
\ No newline at end of file
diff --git a/src/main/kotlin/com/flightfeather/uav/lightshare/service/RealTimeDataService.kt b/src/main/kotlin/com/flightfeather/uav/lightshare/service/RealTimeDataService.kt
index 85fb096..a1314d8 100644
--- a/src/main/kotlin/com/flightfeather/uav/lightshare/service/RealTimeDataService.kt
+++ b/src/main/kotlin/com/flightfeather/uav/lightshare/service/RealTimeDataService.kt
@@ -1,11 +1,15 @@
 package com.flightfeather.uav.lightshare.service
 
 import com.flightfeather.uav.lightshare.bean.BaseResponse
+import com.flightfeather.uav.lightshare.bean.DataImportResult
 import com.flightfeather.uav.lightshare.bean.DataVo
+import org.springframework.web.multipart.MultipartFile
 
 interface RealTimeDataService {
 
     fun getSecondData(deviceCode: String?, startTime: String?, endTime: String?, page: Int?, perPage: Int?): BaseResponse<List<DataVo>>
 
     fun getNextData(deviceCode: String, updateTime: String, page: Int?, perPage: Int?): BaseResponse<List<DataVo>>
+
+    fun importData(file: MultipartFile): BaseResponse<DataImportResult>
 }
\ No newline at end of file
diff --git a/src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/MissionServiceImpl.kt b/src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/MissionServiceImpl.kt
new file mode 100644
index 0000000..f88d392
--- /dev/null
+++ b/src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/MissionServiceImpl.kt
@@ -0,0 +1,42 @@
+package com.flightfeather.uav.lightshare.service.impl
+
+import com.flightfeather.uav.domain.entity.Mission
+import com.flightfeather.uav.domain.mapper.MissionMapper
+import com.flightfeather.uav.lightshare.bean.BaseResponse
+import com.flightfeather.uav.lightshare.bean.DataHead
+import com.flightfeather.uav.lightshare.service.MissionService
+import com.github.pagehelper.PageHelper
+import org.springframework.stereotype.Service
+import tk.mybatis.mapper.entity.Example
+
+@Service
+class MissionServiceImpl(private val missionMapper: MissionMapper) : MissionService {
+    override fun getMission(type: String?, page: Int?, perPage: Int?): BaseResponse<List<Mission>> {
+        val _perPage = perPage ?: 60
+        val _page = page ?: 1
+        val pageInfo = PageHelper.startPage<Mission>(_page, _perPage)
+        val result = mutableListOf<Mission>()
+        missionMapper.selectByExample(Example(Mission::class.java).apply {
+            type?.let {
+                createCriteria().andEqualTo("deviceType", type)
+            }
+            orderBy("startTime").desc()
+        }).forEach { it?.let { result.add(it) } }
+        return BaseResponse(true, head = DataHead(pageInfo.pageNum, pageInfo.pages),data = result)
+    }
+
+    override fun createMission(mission: Mission): BaseResponse<Boolean> {
+        missionMapper.selectByPrimaryKey(mission.missionCode)?.run {
+            return BaseResponse(false, "浠诲姟缂栧彿宸插瓨鍦�")
+        }
+        missionMapper.insert(mission).let {
+            return BaseResponse(it == 1)
+        }
+    }
+
+    override fun deleteMission(missionCode: String): BaseResponse<Boolean> {
+        missionMapper.deleteByPrimaryKey(missionCode).let {
+            return BaseResponse(it == 1)
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/RealTimeDataServiceImpl.kt b/src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/RealTimeDataServiceImpl.kt
index a22bee6..287c2e1 100644
--- a/src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/RealTimeDataServiceImpl.kt
+++ b/src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/RealTimeDataServiceImpl.kt
@@ -1,16 +1,22 @@
 package com.flightfeather.uav.lightshare.service.impl
 
+import com.flightfeather.uav.common.utils.FileExchange
 import com.flightfeather.uav.common.utils.GsonUtils
 import com.flightfeather.uav.domain.entity.RealTimeData
 import com.flightfeather.uav.domain.mapper.RealTimeDataMapper
 import com.flightfeather.uav.lightshare.bean.BaseResponse
 import com.flightfeather.uav.lightshare.bean.DataHead
+import com.flightfeather.uav.lightshare.bean.DataImportResult
 import com.flightfeather.uav.lightshare.bean.DataVo
 import com.flightfeather.uav.lightshare.service.RealTimeDataService
 import com.flightfeather.uav.socket.bean.AirData
 import com.github.pagehelper.PageHelper
 import org.springframework.stereotype.Service
+import org.springframework.web.multipart.MultipartFile
 import tk.mybatis.mapper.entity.Example
+import java.io.ByteArrayInputStream
+import java.io.FileInputStream
+import java.io.InputStream
 import java.text.DateFormat
 import java.text.SimpleDateFormat
 
@@ -18,6 +24,7 @@
 class RealTimeDataServiceImpl(val realTimeDataMapper: RealTimeDataMapper) : RealTimeDataService {
 
     private var dateFormatter = SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
+    private val fileExchange = FileExchange()
 
     override fun getSecondData(deviceCode: String?, startTime: String?, endTime: String?, page: Int?, perPage: Int?): BaseResponse<List<DataVo>> {
         val _perPage = perPage ?: 60
@@ -71,4 +78,12 @@
         }
         return BaseResponse(true, head = DataHead(pageInfo.pageNum, pageInfo.pages), data = result)
     }
+
+    override fun importData(file: MultipartFile): BaseResponse<DataImportResult> {
+        val f = ByteArrayInputStream(file.bytes)
+        fileExchange.exchangeBoatData("0c0000000001", f).forEach {
+            realTimeDataMapper.insert(it)
+        }
+        return BaseResponse(true, data = DataImportResult(""))
+    }
 }
\ No newline at end of file
diff --git a/src/main/kotlin/com/flightfeather/uav/lightshare/web/MissionController.kt b/src/main/kotlin/com/flightfeather/uav/lightshare/web/MissionController.kt
new file mode 100644
index 0000000..e96d5e5
--- /dev/null
+++ b/src/main/kotlin/com/flightfeather/uav/lightshare/web/MissionController.kt
@@ -0,0 +1,27 @@
+package com.flightfeather.uav.lightshare.web
+
+import com.flightfeather.uav.domain.entity.Mission
+import com.flightfeather.uav.lightshare.service.MissionService
+import org.springframework.web.bind.annotation.*
+
+@RestController
+@RequestMapping("air/mission")
+class MissionController(private val missionService: MissionService) {
+
+    @GetMapping("/type")
+    fun getMission(
+        @RequestParam(value = "type", required = false) type: String?,
+        @RequestParam(value = "page", required = false) page: Int?,
+        @RequestParam(value = "perPage", required = false) perPage: Int?
+    ) = missionService.getMission(type, page, perPage)
+
+    @PostMapping("/create")
+    fun createMission(
+        @RequestBody mission: Mission
+    ) = missionService.createMission(mission)
+
+    @PostMapping("/delete")
+    fun deleteMission(
+        @RequestParam("missionCode") missionCode: String
+    ) = missionService.deleteMission(missionCode)
+}
\ No newline at end of file
diff --git a/src/main/kotlin/com/flightfeather/uav/lightshare/web/RealTimeDataController.kt b/src/main/kotlin/com/flightfeather/uav/lightshare/web/RealTimeDataController.kt
index 365c0ef..a77dff3 100644
--- a/src/main/kotlin/com/flightfeather/uav/lightshare/web/RealTimeDataController.kt
+++ b/src/main/kotlin/com/flightfeather/uav/lightshare/web/RealTimeDataController.kt
@@ -1,10 +1,8 @@
 package com.flightfeather.uav.lightshare.web
 
 import com.flightfeather.uav.lightshare.service.RealTimeDataService
-import org.springframework.web.bind.annotation.GetMapping
-import org.springframework.web.bind.annotation.RequestMapping
-import org.springframework.web.bind.annotation.RequestParam
-import org.springframework.web.bind.annotation.RestController
+import org.springframework.web.bind.annotation.*
+import org.springframework.web.multipart.MultipartFile
 
 @RestController
 @RequestMapping("air/realtime")
@@ -26,4 +24,9 @@
         @RequestParam(value = "page", required = false) page: Int?,
         @RequestParam(value = "perPage", required = false) perPage: Int?
     ) = realTimeDataService.getNextData(deviceCode, updateTime, page, perPage)
+
+    @PostMapping("/import")
+    fun importData(
+        @RequestPart("excel") file: MultipartFile
+    ) = realTimeDataService.importData(file)
 }
\ No newline at end of file
diff --git a/src/main/kotlin/com/flightfeather/uav/socket/UAVByteDataDecoder.kt b/src/main/kotlin/com/flightfeather/uav/socket/UAVByteDataDecoder.kt
index 3ca630f..3a44958 100644
--- a/src/main/kotlin/com/flightfeather/uav/socket/UAVByteDataDecoder.kt
+++ b/src/main/kotlin/com/flightfeather/uav/socket/UAVByteDataDecoder.kt
@@ -17,6 +17,8 @@
         const val BASE_LENGTH = DataPackageDecoderImpl.HEAD_BYTES + DataPackageDecoderImpl.COMMAND_UNIT_BYTES +
                 DataPackageDecoderImpl.DEVICE_CODE_BYTES + DataPackageDecoderImpl.DATA_LENGTH + DataPackageDecoderImpl.BCC_BYTES
         const val HEAD1 = 0x01.toByte()
+        const val COMMAND_1 = 0x01.toByte()
+        const val COMMAND_2 = 0x01.toByte()
         const val HEAD_LENGTH = DataPackageDecoderImpl.HEAD_BYTES + DataPackageDecoderImpl.COMMAND_UNIT_BYTES +
                 DataPackageDecoderImpl.DEVICE_CODE_BYTES
     }
@@ -44,7 +46,8 @@
                     // 璇诲埌浜嗗崗璁殑寮�濮嬫爣蹇楋紝缁撴潫while寰幆
                     val b = ByteArray(HEAD_LENGTH)
                     it.readBytes(b)
-                    if (b[0] == HEAD1) {
+                    if (b[0] == HEAD1 &&
+                        (b[1] == COMMAND_1 || b[2] == COMMAND_2)) {
                         b.forEach {b ->
                             dataList.add(b)
                         }
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index be99472..9b2cea4 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -16,6 +16,11 @@
   jmx:
     enabled: false
 
+  #鏂囦欢涓婁紶闄愬埗
+  servlet:
+    multipart:
+      max-file-size: 25MB
+      max-request-size: 100MB
 
 
 mybatis:
diff --git a/src/main/resources/generator/generatorConfig.xml b/src/main/resources/generator/generatorConfig.xml
index 47b4c78..6b93357 100644
--- a/src/main/resources/generator/generatorConfig.xml
+++ b/src/main/resources/generator/generatorConfig.xml
@@ -24,7 +24,7 @@
             <property name="suppressAllComments" value="true"/>
         </commentGenerator>
         <!--鏁版嵁搴撻摼鎺RL锛岀敤鎴峰悕銆佸瘑鐮� -->
-        <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://114.215.109.124:3306/dronemonitor"
+        <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/dronemonitor"
 						userId="root"
 						password="123456">
         </jdbcConnection>
@@ -45,15 +45,7 @@
             <property name="enableSubPackages" value="true"/>
         </javaClientGenerator>
         <!-- 瑕佺敓鎴愮殑琛� tableName鏄暟鎹簱涓殑琛ㄥ悕鎴栬鍥惧悕 domainObjectName鏄疄浣撶被鍚�-->
-        <!--<table tableName="obd_data" domainObjectName="ObdData" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>-->
-        <!--<table tableName="obd_user" domainObjectName="ObdUser" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>-->
-        <!--<table tableName="obd_threshold_value" domainObjectName="ThresholdValue" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>-->
-        <!--<table tableName="obd_alarm_data" domainObjectName="AlarmData" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>-->
-        <!--<table tableName="obd_origin_data" domainObjectName="OriginData" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>-->
-        <!--<table tableName="obd_car_login" domainObjectName="CarLogin" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>-->
-        <!--<table tableName="obd_car_logout" domainObjectName="CarLogout" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>-->
-        <!--<table tableName="obd_data_stream" domainObjectName="DataStream" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>-->
-        <!--<table tableName="obd_info" domainObjectName="ObdInfo" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>-->
-        <table tableName="air_real_time_data" domainObjectName="RealTimeData" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>
+<!--        <table tableName="air_real_time_data" domainObjectName="RealTimeData" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>-->
+        <table tableName="mission" domainObjectName="Mission" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>
     </context>
 </generatorConfiguration>
\ No newline at end of file
diff --git a/src/main/resources/mapper/MissionMapper.xml b/src/main/resources/mapper/MissionMapper.xml
new file mode 100644
index 0000000..f2b8507
--- /dev/null
+++ b/src/main/resources/mapper/MissionMapper.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.flightfeather.uav.domain.mapper.MissionMapper">
+  <resultMap id="BaseResultMap" type="com.flightfeather.uav.domain.entity.Mission">
+    <!--
+      WARNING - @mbg.generated
+    -->
+    <id column="mission_code" jdbcType="VARCHAR" property="missionCode" />
+    <result column="device_type" jdbcType="VARCHAR" property="deviceType" />
+    <result column="device_code" jdbcType="VARCHAR" property="deviceCode" />
+    <result column="start_time" jdbcType="TIMESTAMP" property="startTime" />
+    <result column="end_time" jdbcType="TIMESTAMP" property="endTime" />
+  </resultMap>
+  <sql id="Base_Column_List">
+    <!--
+      WARNING - @mbg.generated
+    -->
+    mission_code, device_type, device_code, start_time, end_time
+  </sql>
+</mapper>
\ No newline at end of file

--
Gitblit v1.9.3