From 46872a311da9480d3edb19223aca2e0833fb1e31 Mon Sep 17 00:00:00 2001
From: hcong <1050828145@qq.com>
Date: 星期二, 17 十二月 2024 11:41:00 +0800
Subject: [PATCH] 1. 完成数据产品中间结果基本信息和具体信息入库 2. 修改ColInspectionInfo.kt 监管时间格式修改为yyyy-mm-dd 3. 新增数据产品类型枚举类 DataProductType 4. 修改BaseTemplate实现类通过重写genData方法生成Template相关数据 5. TODO 其他未涉及到的产品对象的中间结果对象

---
 src/main/kotlin/cn/flightfeather/supervision/business/report/bean/ProAnalysisSummaryResult.kt      |   79 ++
 src/main/kotlin/cn/flightfeather/supervision/business/report/bean/ProTypeStatusSummaryResult.kt    |    7 
 src/main/resources/mapper/ds1/DataProductTownProAnalysisMapper.xml                                 |   37 
 src/main/resources/mapper/ds1/DataProductMapper.xml                                                |   37 
 src/main/kotlin/cn/flightfeather/supervision/business/bgtask/ReportTaskCtrl.kt                     |    7 
 src/main/kotlin/cn/flightfeather/supervision/business/report/BaseExcel.kt                          |   19 
 src/main/kotlin/cn/flightfeather/supervision/business/report/template/ProTypeStatusSummary.kt      |    5 
 src/main/kotlin/cn/flightfeather/supervision/business/report/template/ScoreAnalysisSummary.kt      |    6 
 src/main/kotlin/cn/flightfeather/supervision/business/report/bean/ScoreDetailSummaryResult.kt      |    7 
 src/main/kotlin/cn/flightfeather/supervision/domain/ds1/entity/DataProduct.java                    |  411 ++++++++++
 src/main/kotlin/cn/flightfeather/supervision/business/report/bean/BaseTemplateResult.kt            |   52 +
 src/main/kotlin/cn/flightfeather/supervision/business/report/cols/ColInspectionInfo.kt             |    2 
 src/main/kotlin/cn/flightfeather/supervision/business/report/bean/ProTypeRankSummaryResult.kt      |    7 
 src/main/kotlin/cn/flightfeather/supervision/domain/ds1/mapper/DataProductProDetailMapper.kt       |    8 
 src/main/kotlin/cn/flightfeather/supervision/business/report/bean/ProDetailSummaryResult.kt        |  132 +++
 src/main/kotlin/cn/flightfeather/supervision/business/report/template/ProTypeRankMainSummary.kt    |    4 
 src/main/kotlin/cn/flightfeather/supervision/domain/ds1/entity/DataProductTownProAnalysis.java     |  465 +++++++++++
 src/main/kotlin/cn/flightfeather/supervision/business/report/template/ProTypeRankSummary.kt        |    7 
 src/main/resources/mapper/ds1/DataProductProDetailMapper.xml                                       |   51 +
 src/main/kotlin/cn/flightfeather/supervision/domain/ds1/repository/DataProductRep.kt               |   86 ++
 src/main/kotlin/cn/flightfeather/supervision/business/report/template/ProTypeDetailSummary.kt      |    4 
 src/main/kotlin/cn/flightfeather/supervision/business/report/template/ScoreDetailSummary.kt        |    3 
 src/main/kotlin/cn/flightfeather/supervision/business/report/template/ProDetailSummary.kt          |    4 
 src/main/kotlin/cn/flightfeather/supervision/business/report/bean/ScoreAnalysisSummaryResult.kt    |    7 
 src/main/kotlin/cn/flightfeather/supervision/business/report/template/ProAnalysisSummary.kt        |    5 
 src/main/kotlin/cn/flightfeather/supervision/domain/ds1/mapper/DataProductTownProAnalysisMapper.kt |    9 
 src/main/kotlin/cn/flightfeather/supervision/business/report/bean/ProTypeDetailSummaryResult.kt    |    8 
 src/main/kotlin/cn/flightfeather/supervision/domain/ds1/mapper/DataProductMapper.java              |    7 
 src/main/kotlin/cn/flightfeather/supervision/domain/ds1/entity/DataProductProDetail.java           |  753 +++++++++++++++++++
 src/main/kotlin/cn/flightfeather/supervision/business/report/bean/ProTypeRankMainSummaryResult.kt  |    7 
 src/main/kotlin/cn/flightfeather/supervision/common/utils/Constant.kt                              |    5 
 src/main/kotlin/cn/flightfeather/supervision/business/report/BaseTemplate.kt                       |   95 ++
 32 files changed, 2,317 insertions(+), 19 deletions(-)

diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/bgtask/ReportTaskCtrl.kt b/src/main/kotlin/cn/flightfeather/supervision/business/bgtask/ReportTaskCtrl.kt
index 3c126f5..814b229 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/business/bgtask/ReportTaskCtrl.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/business/bgtask/ReportTaskCtrl.kt
@@ -9,6 +9,7 @@
 import cn.flightfeather.supervision.common.executor.BackgroundTaskCtrl
 import cn.flightfeather.supervision.common.executor.BgTaskStatus
 import cn.flightfeather.supervision.common.executor.BgTaskType
+import cn.flightfeather.supervision.domain.ds1.repository.DataProductRep
 import cn.flightfeather.supervision.lightshare.vo.ExcelConfigVo
 import org.springframework.beans.factory.annotation.Value
 import org.springframework.stereotype.Component
@@ -22,6 +23,7 @@
 class ReportTaskCtrl(
     private val backgroundTaskCtrl: BackgroundTaskCtrl,
     private val dbMapper: DbMapper,
+    private val mapper: DataProductRep,
     @Value("\${filePath}") private val filePath: String,
 ) {
 
@@ -32,6 +34,11 @@
         val bgTask = backgroundTaskCtrl.startNewTask(BgTaskType.DOCUMENT, id, taskName) {
             val p = "$filePath/autoscore/"
             baseExcel.toFile(p)
+            baseExcel.templates.forEach {
+                it.toDBEntity()
+                it.toDBBaseInfoEntity()
+                mapper.insertDataProduct(it.dataProduct, it.entities)
+            }
             true
         }
         bgTask.taskStatus.extra = downloadUrl
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/report/BaseExcel.kt b/src/main/kotlin/cn/flightfeather/supervision/business/report/BaseExcel.kt
index e182a98..86d3475 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/business/report/BaseExcel.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/business/report/BaseExcel.kt
@@ -1,10 +1,10 @@
 package cn.flightfeather.supervision.business.report
 
+import cn.flightfeather.supervision.business.report.bean.BaseTemplateResult
 import org.apache.poi.hssf.usermodel.HSSFWorkbook
 import java.io.File
 import java.io.FileOutputStream
 import java.io.OutputStream
-import java.util.*
 
 /**
  * 鍚勬ā鏉垮悎骞惰緭鍑轰负鏁翠綋鏂囨。
@@ -16,10 +16,23 @@
 
     abstract val fileName: String
 
+    // 涓棿缁撴灉瀵硅薄 by hc 2024.12.06
+    private val objectResults: MutableList<MutableList<BaseTemplateResult>> = mutableListOf()
+
     // excel鏂囨。
     private var workbook = HSSFWorkbook()
 
     fun getReportName(): String = "${dataSource.areaName()}-${fileName}.xlsx"
+
+    // 杈撳嚭鍒板璞�
+    fun toObject() {
+        templates.forEach {
+            if (!it.isExecuted) {
+                it.execute()
+            }
+            objectResults.add(it.toObject())
+        }
+    }
 
     fun toFile(path: String) {
         val fileName = getReportName()
@@ -33,7 +46,9 @@
 
     fun toOutputStream(out: OutputStream) {
         templates.forEach {
-            it.execute()
+            if (!it.isExecuted) {
+                it.execute()
+            }
             it.toWorkBook(workbook)
         }
         workbook.write(out)
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/report/BaseTemplate.kt b/src/main/kotlin/cn/flightfeather/supervision/business/report/BaseTemplate.kt
index fefb508..0c8047d 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/business/report/BaseTemplate.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/business/report/BaseTemplate.kt
@@ -1,14 +1,15 @@
 package cn.flightfeather.supervision.business.report
 
-import cn.flightfeather.supervision.common.utils.Constant
-import cn.flightfeather.supervision.common.utils.DateUtil
 import cn.flightfeather.supervision.common.utils.ExcelUtil
-import cn.flightfeather.supervision.domain.ds1.entity.Problemlist
+import cn.flightfeather.supervision.business.report.bean.BaseTemplateResult
+import cn.flightfeather.supervision.common.utils.UUIDGenerator
+import cn.flightfeather.supervision.domain.ds1.entity.DataProduct
 import org.apache.poi.hssf.usermodel.HSSFWorkbook
-import tk.mybatis.mapper.entity.Example
 import java.io.FileOutputStream
 import java.io.OutputStream
 import java.util.*
+import kotlin.collections.ArrayList
+import kotlin.reflect.full.createInstance
 
 /**
  * excel鎶ュ憡妯℃澘鍩虹被
@@ -23,14 +24,26 @@
     //妯℃澘鍚嶇О
     abstract val templateName: String
 
+    // 涓棿缁撴灉瀵硅薄 by hc 2024.12.5
+    abstract var resultObjects: MutableList<BaseTemplateResult>
+
+    // 涓棿缁撴灉鍩烘湰淇℃伅瀵瑰簲鏁版嵁搴撲腑鐨別ntity
+    var dataProduct = DataProduct()
+
+    // 涓棿缁撴灉鍏蜂綋淇℃伅瀵瑰簲鏁版嵁搴撲腑鐨別ntity
+    val entities = ArrayList<Any>()
+
+    // 鎵ц鐘舵�� by hc 2024.12.5
+    var isExecuted: Boolean = false
+
     //琛ㄥご
     val head = mutableListOf<MutableList<ExcelUtil.MyCell>>()
 
     //鍐呭
     val contents = mutableListOf<MutableList<Any>>()
 
-
-    open fun execute() {
+    // 鐢熸垚Template鐩稿叧鏁版嵁 by hc 2024.12.9
+    open fun genData() {
         //鏁版嵁婧愰噸缃�
         dataSource.reset()
         //鍚堟垚琛ㄥご
@@ -49,6 +62,16 @@
         }
     }
 
+    open fun execute() {
+        try {
+            genData()
+            // 娌℃湁閿欒姝e父杩愯缁撴潫
+            isExecuted = true
+        } catch (e: Exception) {
+            // TODO: handle exception
+        }
+    }
+
     override fun toWorkBook(wb: HSSFWorkbook) {
         val f = tableFormat()
         ExcelUtil.write(f.first, f.second, wb, templateName)
@@ -60,6 +83,66 @@
     }
 
     /**
+     * 杈撳嚭鍒板璞�
+     * hc 2024.12.06
+     */
+    fun toObject(): MutableList<BaseTemplateResult>  {
+        if (!isExecuted) {
+            execute()
+        }
+        // 鑾峰緱鍜宼emplate瀵瑰簲鐨勪腑闂寸粨鏋滄暟鎹璞CLASS瀵硅薄
+        val classType = resultObjects.first()::class
+        try {
+            // 娓呯┖鏁扮粍
+            resultObjects.clear()
+            contents.forEach {
+                // 鍒涘缓瀵瑰簲鐨勪腑闂寸粨鏋滄暟鎹璞�
+                val resultObj = classType.createInstance()
+                resultObj.setProperties(it)
+                resultObjects.add(resultObj)
+            }
+        }catch (e: Exception) {
+            // 濡傛灉鍑虹幇寮傚父鎭㈠鍒板垵濮嬬姸鎬� 閬垮厤涓嬫璋冪敤toObject鏁版嵁閲嶅
+            resultObjects.clear()
+            resultObjects.add(classType.createInstance())
+        }
+        return resultObjects
+    }
+
+    /**
+     * 鐢熸垚涓棿缁撴灉鍏蜂綋淇℃伅entity
+     * by hc 2024.12.12
+     */
+    fun toDBEntity() {
+        entities.clear()
+        if (!isExecuted) {
+            execute()
+        }
+        // 鍏堟墽琛宼oObject鍚庡皢toObject鐨勭粨鏋滆浆鍖栦负DBEntity
+        toObject()
+        resultObjects.forEach {
+            entities.add(it.convertToDBEntity())
+        }
+    }
+
+    /**
+     * 鐢熸垚涓棿缁撴灉鍩烘湰淇℃伅entity
+     * by hc 2024.12.12
+     */
+    fun toDBBaseInfoEntity() {
+        dataProduct = DataProduct()
+        dataProduct.guid = UUIDGenerator.generate16ShortUUID()
+        dataProduct.townCode = dataSource.config.townCode
+        dataProduct.cityCode = dataSource.config.cityCode
+        dataProduct.districtCode = dataSource.config.districtCode
+        dataProduct.endTime = dataSource.config.endTime
+        dataProduct.startTime = dataSource.config.startTime
+        dataProduct.provinceCode = dataSource.config.provinceCode
+        dataProduct.sceneTypeId = dataSource.config.sceneType?.toByte() ?: -1
+        dataProduct.taskGuid = dataSource.config.topTaskGuid
+    }
+
+    /**
      * 杈撳嚭涓烘枃妗�
      */
     override fun toFile(path: String) {
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/report/bean/BaseTemplateResult.kt b/src/main/kotlin/cn/flightfeather/supervision/business/report/bean/BaseTemplateResult.kt
new file mode 100644
index 0000000..dc3757a
--- /dev/null
+++ b/src/main/kotlin/cn/flightfeather/supervision/business/report/bean/BaseTemplateResult.kt
@@ -0,0 +1,52 @@
+package cn.flightfeather.supervision.business.report.bean
+
+import cn.flightfeather.supervision.common.utils.ExcelUtil
+import kotlin.reflect.KMutableProperty
+import kotlin.reflect.full.declaredMemberProperties
+import kotlin.reflect.full.findAnnotation
+
+/**
+ * excel鎶ュ憡妯℃澘涓棿缁撴灉瀵硅薄鍩虹被
+ * hc 2024.12.06
+ */
+abstract class BaseTemplateResult {
+    // 瀹氫箟娉ㄨВ
+    annotation class ExcelHead(val index: Int, val des: String)
+
+    /**
+     * 杞崲涓烘暟鎹簱琛ㄥ搴旂殑瀹炰綋绫诲璞�
+     */
+    abstract fun convertToDBEntity(): Any
+
+    fun setProperties(values: MutableList<Any>) {
+        // 閬嶅巻鎵�鏈夊睘鎬у苟璧嬪��
+        var index = 0
+        this::class.declaredMemberProperties.sortedBy { it.findAnnotation<ExcelHead>()?.index }.forEach { property ->
+            // 妫�鏌ュ睘鎬ф槸鍚﹀彲浠ヨ缃��
+            if (property is KMutableProperty<*>) {
+                try {
+                    // 鏆傚瓨鏈�鍚庣殑灞炴�у�肩殑鍙橀噺 榛樿灏辨槸values[index]
+                    var c: Any = values[index]
+                    // 浠呬粎涓轰簡绠�鍐檝alues[index]
+                    val v = values[index++]
+                    // 浠嶮yCell瀵硅薄涓嬁鍑虹櫨鍒嗘瘮绫诲瀷
+                    if (v is ExcelUtil.MyCell) {
+                        if (v.isPercent) {
+                            val percent = v.text.toBigDecimalOrNull()
+                            if (percent != null) {
+                                percent.setScale(2)
+                                c = percent
+                            }else {
+                                c = ""
+                            }
+                        }
+                    }
+                    // 鍚戝睘鎬т腑璧嬪��
+                    property.setter.call(this, c)
+                } catch (e: Exception) {
+
+                }
+            }
+        }
+    }
+}
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/report/bean/ProAnalysisSummaryResult.kt b/src/main/kotlin/cn/flightfeather/supervision/business/report/bean/ProAnalysisSummaryResult.kt
new file mode 100644
index 0000000..6c8cb06
--- /dev/null
+++ b/src/main/kotlin/cn/flightfeather/supervision/business/report/bean/ProAnalysisSummaryResult.kt
@@ -0,0 +1,79 @@
+package cn.flightfeather.supervision.business.report.bean
+
+import cn.flightfeather.supervision.domain.ds1.entity.DataProductTownProAnalysis
+import java.math.BigDecimal
+
+/**
+ * 鍒嗚闀囬棶棰樻暣鏀瑰垎鏋愭眹鎬昏〃涓棿缁撴灉瀵硅薄
+ * hc 2024.12.06
+ */
+class ProAnalysisSummaryResult : BaseTemplateResult()  {
+    @ExcelHead(1, "琛楅晣搴忓彿")
+    var formIndex: Int? = null
+
+    @ExcelHead(2, "琛楅晣/宸ヤ笟鍖�")
+    var sceneTownname: String? = null
+
+    @ExcelHead(3, "鍦烘櫙绫诲埆")
+    var sceneType: String? = null
+
+    @ExcelHead(4, "鍦烘櫙鏁�")
+    var sceneCount: Int? = null
+
+    @ExcelHead(5, "瀹屽伐銆佹湭鏂藉伐銆佸仠宸ユ垨鍋滀笟銆佸叧闂瓑")
+    var inactiveScenes: Int? = null
+
+    @ExcelHead(6, "鏂藉伐涓�佽繍钀ヤ腑鎬绘暟")
+    var activeScenes: Int? = null
+
+    @ExcelHead(7, "鏁存敼鍗曚綅鏁�")
+    var changeScenes: Int? = null
+
+    @ExcelHead(8, "鏁存敼鍗曚綅鍗犳瘮")
+    var changeScenePer: BigDecimal? = null
+
+    @ExcelHead(9, "闂鏁�")
+    var proNum: Int? = null
+
+    @ExcelHead(10, "闂鍗犳瘮")
+    var proPer: BigDecimal? = null
+
+    @ExcelHead(11, "鏁存敼鏁�")
+    var changeNum: Int? = null
+
+    @ExcelHead(12, "鏁存敼鐜�")
+    var changePer: BigDecimal? = null
+
+    @ExcelHead(13, "鏁存敼鍗曚綅姣旀帓鍚�")
+    var changeSceneRank: Int? = null
+
+    @ExcelHead(14, "闂鏁存敼鐜囨帓鍚�")
+    var proChangeRank: Int? = null
+
+    @ExcelHead(15, "鎷熷垪鍏ラ噸鐐圭洃绠℃暟")
+    var focusSceneNum: Int? = null
+
+    @ExcelHead(16, "鎷熷垪鍏ラ噸鐐圭洃绠″崰姣�")
+    var focusScenePer: BigDecimal? = null
+
+    override fun convertToDBEntity(): DataProductTownProAnalysis {
+        val entity = DataProductTownProAnalysis()
+        entity.formIndex = this.formIndex
+        entity.townName = this.sceneTownname
+        entity.sceneType = this.sceneType
+        entity.sceneCount = this.sceneCount
+        entity.inactiveSceneCount = this.inactiveScenes
+        entity.activeSceneCount = this.activeScenes
+        entity.changeSceneCount = this.changeScenes
+        entity.changeScenePer = this.changeScenePer
+        entity.proCount = this.proNum
+        entity.proPer = this.proPer
+        entity.changeCount = this.changeNum
+        entity.changePer = this.changePer
+        entity.changeSceneRank = this.changeSceneRank
+        entity.proChangeRank = this.proChangeRank
+        entity.focusSceneCount = this.focusSceneNum
+        entity.focusScenePer = this.focusScenePer
+        return entity
+    }
+}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/report/bean/ProDetailSummaryResult.kt b/src/main/kotlin/cn/flightfeather/supervision/business/report/bean/ProDetailSummaryResult.kt
new file mode 100644
index 0000000..0896414
--- /dev/null
+++ b/src/main/kotlin/cn/flightfeather/supervision/business/report/bean/ProDetailSummaryResult.kt
@@ -0,0 +1,132 @@
+package cn.flightfeather.supervision.business.report.bean
+
+import cn.flightfeather.supervision.common.utils.DateUtil
+import cn.flightfeather.supervision.domain.ds1.entity.DataProductProDetail
+import java.math.BigDecimal
+
+/**
+ * 闂涓庢暣鏀硅窡韪眹鎬昏〃涓棿缁撴灉瀵硅薄
+ * hc 2024.12.06
+ */
+class ProDetailSummaryResult : BaseTemplateResult() {
+
+    @ExcelHead(1, "琛ㄥ崟缂栧彿")
+    var formIndex: Int? = null
+
+    @ExcelHead(2, "鍞竴搴忓彿")
+    var sceneIndex: Int? = null
+
+    @ExcelHead(3, "鍦烘櫙绫诲瀷")
+    var sceneType: String? = null
+
+    @ExcelHead(4, "鍦烘櫙鍚嶇О")
+    var sceneName: String? = null
+
+    @ExcelHead(5, "鐩戠鏃堕棿")
+    var subTaskPlanstarttime: String? = null
+
+    @ExcelHead(6, "宸℃煡浜哄憳")
+    var subTaskExecutorrealtimes: String? = null
+
+    @ExcelHead(7, "闂绫诲瀷")
+    var problemTypename: String? = null
+
+    @ExcelHead(8, "闂鎻忚堪")
+    var problemDescription: String? = null
+
+    @ExcelHead(9, "闂浣嶇疆")
+    var problemLocation: String? = null
+
+    @ExcelHead(10, "闂鏁�")
+    var problemNum: Int? = null
+
+    @ExcelHead(11, "鏁存敼鏃堕棿")
+    var changeTime: String? = null
+
+    @ExcelHead(12, "鏁存敼鎯呭喌")
+    var problemChanged: String? = null
+
+    @ExcelHead(13, "鏁存敼闂")
+    var changedProblem: String? = null
+
+    @ExcelHead(14, "鏁存敼鏁�")
+    var changedNum: Int? = null
+
+    @ExcelHead(15, "鏈暣鏀归棶棰�")
+    var unchangedProblems: String? = null
+
+    @ExcelHead(16, "鏈暣鏀规暟")
+    var unChangedProblem: Int? = null
+
+    @ExcelHead(17, "闂鏁存敼鐜�")
+    var changePercent: BigDecimal? = null
+
+    @ExcelHead(18, "瀹℃牳鎯呭喌")
+    var checkStatus: String? = null
+
+    @ExcelHead(19, "闂瀹℃牳鏃堕棿")
+    var pCheckTime: String? = null
+
+    @ExcelHead(20, "鏁存敼瀹℃牳鏃堕棿")
+    var cCheckTime: String? = null
+
+    @ExcelHead(21, "闂瀹℃牳鏁�")
+    var pCheckNum: Int? = null
+
+    @ExcelHead(22, "闂瀹℃牳鍗犳瘮")
+    var pCheckPer: BigDecimal? = null
+
+    @ExcelHead(23, "鏁存敼瀹℃牳鏁�")
+    var cCheckNum: Int? = null
+
+    @ExcelHead(24, "鏁存敼瀹℃牳鍗犳瘮")
+    var cCheckPer: BigDecimal? = null
+
+    @ExcelHead(25, "鍙拌处鎻愪氦鐧惧垎姣�")
+    var ledgerPercent: BigDecimal? = null
+
+    @ExcelHead(26, "鍙拌处鎻愪氦鏃堕棿")
+    var ledgerSubmitdate: String? = null
+
+    @ExcelHead(27, "鍙拌处瀹℃牳鏃堕棿")
+    var ledgerCheckTime: String? = null
+
+    @ExcelHead(28, "鏁存敼璺熻釜鎻愰啋")
+    var changeTrackingReminder: String? = null
+
+    override fun convertToDBEntity(): DataProductProDetail {
+        val entity = DataProductProDetail()
+        entity.formIndex = this.formIndex
+        entity.sceneIndex = this.sceneIndex
+        entity.sceneType = this.sceneType
+        entity.sceneName = this.sceneName
+        // 灏哠tring绫诲瀷鐨勭洃绠℃椂闂磋浆鎹负Date绫诲瀷
+        entity.inspectionTime = DateUtil.StringToDate(this.subTaskPlanstarttime, "yyyy-mm-dd")
+        entity.executors = this.subTaskExecutorrealtimes
+        entity.problemType = this.problemTypename
+        entity.problemDescription = this.problemDescription
+        entity.problemLocation = this.problemLocation
+        entity.problemNum = this.problemNum
+        entity.changeTime = this.changeTime
+        entity.problemChanged = this.problemChanged
+        entity.changedProblem = this.changedProblem
+        entity.changedNum = this.changedNum
+        entity.unchangedProblems = this.unchangedProblems
+        entity.unchangedNum = this.unChangedProblem
+        entity.changePercent = this.changePercent
+        entity.checkStatus = this.checkStatus
+        entity.proCheckTime = this.pCheckTime
+        entity.changeCheckTime = this.cCheckTime
+        entity.proCheckNum = this.pCheckNum
+        entity.proCheckPer = this.pCheckPer
+        entity.changeCheckNum = this.cCheckNum
+        entity.changeCheckPer = this.cCheckPer
+        entity.ledgerPercent = this.ledgerPercent
+        // 灏哠tring绫诲瀷鐨勫彴璐︽彁浜ゆ椂闂磋浆鎹负Date绫诲瀷
+        entity.ledgerSubmitDate = DateUtil.StringToDate(this.ledgerSubmitdate, "yyyy-mm-dd hh:mm:ss")
+        // 灏哠tring绫诲瀷鐨勫彴璐﹀鏍告椂闂磋浆鎹负Date绫诲瀷锛岃繖閲屽亣璁緇edgerCheckTime鏄鍚圖ate鏍煎紡鐨勫瓧绗︿覆
+        entity.ledgerCheckTime = DateUtil.StringToDate(this.ledgerCheckTime, "yyyy-mm-dd hh:mm:ss")
+        entity.changeTrackingReminder = this.changeTrackingReminder
+        return entity
+    }
+}
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/report/bean/ProTypeDetailSummaryResult.kt b/src/main/kotlin/cn/flightfeather/supervision/business/report/bean/ProTypeDetailSummaryResult.kt
new file mode 100644
index 0000000..fa24018
--- /dev/null
+++ b/src/main/kotlin/cn/flightfeather/supervision/business/report/bean/ProTypeDetailSummaryResult.kt
@@ -0,0 +1,8 @@
+package cn.flightfeather.supervision.business.report.bean
+
+class ProTypeDetailSummaryResult() : BaseTemplateResult() {
+
+    override fun convertToDBEntity(): Any {
+        TODO("Not yet implemented")
+    }
+}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/report/bean/ProTypeRankMainSummaryResult.kt b/src/main/kotlin/cn/flightfeather/supervision/business/report/bean/ProTypeRankMainSummaryResult.kt
new file mode 100644
index 0000000..7f9805d
--- /dev/null
+++ b/src/main/kotlin/cn/flightfeather/supervision/business/report/bean/ProTypeRankMainSummaryResult.kt
@@ -0,0 +1,7 @@
+package cn.flightfeather.supervision.business.report.bean
+
+class ProTypeRankMainSummaryResult : BaseTemplateResult()  {
+    override fun convertToDBEntity(): Any {
+        TODO("Not yet implemented")
+    }
+}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/report/bean/ProTypeRankSummaryResult.kt b/src/main/kotlin/cn/flightfeather/supervision/business/report/bean/ProTypeRankSummaryResult.kt
new file mode 100644
index 0000000..c61e3c5
--- /dev/null
+++ b/src/main/kotlin/cn/flightfeather/supervision/business/report/bean/ProTypeRankSummaryResult.kt
@@ -0,0 +1,7 @@
+package cn.flightfeather.supervision.business.report.bean
+
+class ProTypeRankSummaryResult : BaseTemplateResult()  {
+    override fun convertToDBEntity(): Any {
+        TODO("Not yet implemented")
+    }
+}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/report/bean/ProTypeStatusSummaryResult.kt b/src/main/kotlin/cn/flightfeather/supervision/business/report/bean/ProTypeStatusSummaryResult.kt
new file mode 100644
index 0000000..b723f6e
--- /dev/null
+++ b/src/main/kotlin/cn/flightfeather/supervision/business/report/bean/ProTypeStatusSummaryResult.kt
@@ -0,0 +1,7 @@
+package cn.flightfeather.supervision.business.report.bean
+
+class ProTypeStatusSummaryResult : BaseTemplateResult()  {
+    override fun convertToDBEntity(): Any {
+        TODO("Not yet implemented")
+    }
+}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/report/bean/ScoreAnalysisSummaryResult.kt b/src/main/kotlin/cn/flightfeather/supervision/business/report/bean/ScoreAnalysisSummaryResult.kt
new file mode 100644
index 0000000..1c56ecc
--- /dev/null
+++ b/src/main/kotlin/cn/flightfeather/supervision/business/report/bean/ScoreAnalysisSummaryResult.kt
@@ -0,0 +1,7 @@
+package cn.flightfeather.supervision.business.report.bean
+
+class ScoreAnalysisSummaryResult : BaseTemplateResult()  {
+    override fun convertToDBEntity(): Any {
+        TODO("Not yet implemented")
+    }
+}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/report/bean/ScoreDetailSummaryResult.kt b/src/main/kotlin/cn/flightfeather/supervision/business/report/bean/ScoreDetailSummaryResult.kt
new file mode 100644
index 0000000..915020a
--- /dev/null
+++ b/src/main/kotlin/cn/flightfeather/supervision/business/report/bean/ScoreDetailSummaryResult.kt
@@ -0,0 +1,7 @@
+package cn.flightfeather.supervision.business.report.bean
+
+class ScoreDetailSummaryResult : BaseTemplateResult() {
+    override fun convertToDBEntity(): Any {
+        TODO("Not yet implemented")
+    }
+}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/report/cols/ColInspectionInfo.kt b/src/main/kotlin/cn/flightfeather/supervision/business/report/cols/ColInspectionInfo.kt
index adb52e9..7529d4f 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/business/report/cols/ColInspectionInfo.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/business/report/cols/ColInspectionInfo.kt
@@ -43,7 +43,7 @@
             row.apply {
                 // 琛ㄥご锛氬贰鏌ユ儏鍐靛強闂銆佹暣鏀圭粺璁�
                 //鐩戠鏃堕棿
-                add(DateUtil.DateToString(rowData.subTask?.planstarttime, DateUtil.DateStyle.MM_DD) ?: "")
+                add(DateUtil.DateToString(rowData.subTask?.planstarttime, DateUtil.DateStyle.YYYY_MM_DD) ?: "")
                 //宸℃煡浜哄憳
                 add(rowData.subTask?.executorrealtimes?.replace("#", "銆�") ?: "")
                 //鏌ヨ瀛愪换鍔″搴旂殑闂锛屽苟涓旀牴鎹潯浠惰繘琛岀瓫閫�
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/report/template/ProAnalysisSummary.kt b/src/main/kotlin/cn/flightfeather/supervision/business/report/template/ProAnalysisSummary.kt
index fdec9ce..80914bc 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/business/report/template/ProAnalysisSummary.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/business/report/template/ProAnalysisSummary.kt
@@ -12,16 +12,19 @@
 import cn.flightfeather.supervision.domain.ds1.entity.SceneMixingPlant
 import cn.flightfeather.supervision.domain.ds1.entity.SceneStorageYard
 import cn.flightfeather.supervision.domain.ds1.entity.SceneWharf
+import cn.flightfeather.supervision.business.report.bean.BaseTemplateResult
+import cn.flightfeather.supervision.business.report.bean.ProAnalysisSummaryResult
 
 /**
  * 鍒嗚闀囬棶棰樻暣鏀瑰垎鏋愭眹鎬昏〃
  */
 class ProAnalysisSummary(dataSource: DataSource) : BaseTemplate(dataSource) {
+    override var resultObjects: MutableList<BaseTemplateResult> = mutableListOf(ProAnalysisSummaryResult())
     override val cols: List<BaseCols> = listOf(ColInspectionInfo(), ColTotalGrade(), ColStrategy())
 
     override val templateName: String = "鍒嗚闀囬棶棰樻暣鏀瑰垎鏋愭眹鎬昏〃"
 
-    override fun execute() {
+    override fun genData() {
         //鏁版嵁婧愰噸缃�
         dataSource.reset()
 
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/report/template/ProDetailSummary.kt b/src/main/kotlin/cn/flightfeather/supervision/business/report/template/ProDetailSummary.kt
index 8ad525b..737af42 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/business/report/template/ProDetailSummary.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/business/report/template/ProDetailSummary.kt
@@ -7,9 +7,11 @@
 import cn.flightfeather.supervision.business.report.cols.ColLedger
 import cn.flightfeather.supervision.business.report.cols.ColSceneName
 import cn.flightfeather.supervision.business.report.cols.ColStrategy
+import cn.flightfeather.supervision.business.report.bean.BaseTemplateResult
+import cn.flightfeather.supervision.business.report.bean.ProDetailSummaryResult
 
 class ProDetailSummary(dataSource: DataSource) : BaseTemplate(dataSource) {
     override val cols: List<BaseCols> = listOf(ColSceneName(), ColInspectionInfo(), ColLedger(), ColStrategy())
-
+    override var resultObjects: MutableList<BaseTemplateResult> = mutableListOf(ProDetailSummaryResult())
     override val templateName: String = "闂涓庢暣鏀硅窡韪眹鎬昏〃"
 }
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/report/template/ProTypeDetailSummary.kt b/src/main/kotlin/cn/flightfeather/supervision/business/report/template/ProTypeDetailSummary.kt
index faf72d7..1c9f826 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/business/report/template/ProTypeDetailSummary.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/business/report/template/ProTypeDetailSummary.kt
@@ -3,10 +3,12 @@
 import cn.flightfeather.supervision.business.report.BaseCols
 import cn.flightfeather.supervision.business.report.BaseTemplate
 import cn.flightfeather.supervision.business.report.DataSource
+import cn.flightfeather.supervision.business.report.bean.BaseTemplateResult
+import cn.flightfeather.supervision.business.report.bean.ProTypeDetailSummaryResult
 import cn.flightfeather.supervision.business.report.cols.*
 
 class ProTypeDetailSummary(dataSource: DataSource) : BaseTemplate(dataSource) {
     override val cols: List<BaseCols> = listOf(ColSceneName(), ColTown(), ColStatus(), ColProChange(), ColProblemDistribution())
-
+    override var resultObjects: MutableList<BaseTemplateResult> = mutableListOf(ProTypeDetailSummaryResult())
     override val templateName: String = "闂涓庢暣鏀瑰垎绫荤粺璁¤〃"
 }
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/report/template/ProTypeRankMainSummary.kt b/src/main/kotlin/cn/flightfeather/supervision/business/report/template/ProTypeRankMainSummary.kt
index 1de9b3d..7b8bb95 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/business/report/template/ProTypeRankMainSummary.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/business/report/template/ProTypeRankMainSummary.kt
@@ -1,12 +1,14 @@
 package cn.flightfeather.supervision.business.report.template
 
 import cn.flightfeather.supervision.business.report.DataSource
+import cn.flightfeather.supervision.business.report.bean.BaseTemplateResult
+import cn.flightfeather.supervision.business.report.bean.ProTypeRankMainSummaryResult
 import cn.flightfeather.supervision.common.utils.Constant
 import cn.flightfeather.supervision.common.utils.ExcelUtil
 
 class ProTypeRankMainSummary(dataSource: DataSource) : ProTypeRankSummary(dataSource) {
     override val templateName: String = "鏈堝害涓昏鎴栧吀鍨嬮棶棰樺垎鏋愯〃"
-
+    override var resultObjects: MutableList<BaseTemplateResult> = mutableListOf(ProTypeRankMainSummaryResult())
     override fun formatTable(summarys: MutableList<Summary>) {
         //鎺掑悕闈犲墠鐨刴ax涓棶棰樿璁ゅ畾涓轰富瑕佹垨鍏稿瀷闂
         val max = when (dataSource.config.sceneType.toString()) {
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/report/template/ProTypeRankSummary.kt b/src/main/kotlin/cn/flightfeather/supervision/business/report/template/ProTypeRankSummary.kt
index 04aef32..642e304 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/business/report/template/ProTypeRankSummary.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/business/report/template/ProTypeRankSummary.kt
@@ -3,15 +3,16 @@
 import cn.flightfeather.supervision.business.report.BaseCols
 import cn.flightfeather.supervision.business.report.BaseTemplate
 import cn.flightfeather.supervision.business.report.DataSource
-import cn.flightfeather.supervision.business.report.cols.*
+import cn.flightfeather.supervision.business.report.bean.BaseTemplateResult
+import cn.flightfeather.supervision.business.report.bean.ProTypeRankSummaryResult
 import cn.flightfeather.supervision.common.utils.ExcelUtil
 import kotlin.math.round
 
 open class ProTypeRankSummary(dataSource: DataSource) : BaseTemplate(dataSource) {
     override val cols: List<BaseCols> = listOf()
     override val templateName: String = "闂涓庢暣鏀瑰垎绫绘帓鍚�"
-
-    override fun execute() {
+    override var resultObjects: MutableList<BaseTemplateResult> = mutableListOf(ProTypeRankSummaryResult())
+    override fun genData() {
         dataSource.reset()
 
         val proMap = mutableMapOf<String?, Summary>()
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/report/template/ProTypeStatusSummary.kt b/src/main/kotlin/cn/flightfeather/supervision/business/report/template/ProTypeStatusSummary.kt
index 2a12726..01ee856 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/business/report/template/ProTypeStatusSummary.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/business/report/template/ProTypeStatusSummary.kt
@@ -3,16 +3,19 @@
 import cn.flightfeather.supervision.business.report.BaseCols
 import cn.flightfeather.supervision.business.report.BaseTemplate
 import cn.flightfeather.supervision.business.report.DataSource
+import cn.flightfeather.supervision.business.report.bean.BaseTemplateResult
+import cn.flightfeather.supervision.business.report.bean.ProTypeStatusSummaryResult
 import cn.flightfeather.supervision.common.utils.Constant
 import cn.flightfeather.supervision.common.utils.ExcelUtil
 import cn.flightfeather.supervision.domain.ds1.entity.SceneConstructionSite
 
 class ProTypeStatusSummary(dataSource: DataSource) : BaseTemplate(dataSource) {
     override val cols: List<BaseCols> = listOf()
+    override var resultObjects: MutableList<BaseTemplateResult> = mutableListOf(ProTypeStatusSummaryResult())
     override val templateName: String = "宸ュ湴鏂藉伐闃舵闂鍒嗙被鍒嗘瀽琛�"
 
     @Throws(Exception::class)
-    override fun execute() {
+    override fun genData() {
         if (dataSource.config.sceneType.toString() != Constant.SceneType.TYPE1.value) {
 //            throw IllegalStateException("${templateName}鍙兘閽堝宸ュ湴杩涜鍒嗘瀽锛屽綋鍓嶄紶鍏ュ満鏅被鍨嬬紪鍙蜂负${dataSource.config.sceneType}")
             println("sadas")
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/report/template/ScoreAnalysisSummary.kt b/src/main/kotlin/cn/flightfeather/supervision/business/report/template/ScoreAnalysisSummary.kt
index 1dce64b..26a30c6 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/business/report/template/ScoreAnalysisSummary.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/business/report/template/ScoreAnalysisSummary.kt
@@ -3,16 +3,18 @@
 import cn.flightfeather.supervision.business.report.BaseCols
 import cn.flightfeather.supervision.business.report.BaseTemplate
 import cn.flightfeather.supervision.business.report.DataSource
+import cn.flightfeather.supervision.business.report.bean.BaseTemplateResult
+import cn.flightfeather.supervision.business.report.bean.ScoreAnalysisSummaryResult
 import cn.flightfeather.supervision.business.report.cols.ColTotalGrade
 import cn.flightfeather.supervision.common.utils.ExcelUtil
 import kotlin.math.round
 
 class ScoreAnalysisSummary(dataSource: DataSource) : BaseTemplate(dataSource) {
     override val cols: List<BaseCols> = listOf(ColTotalGrade())
-
+    override var resultObjects: MutableList<BaseTemplateResult> = mutableListOf(ScoreAnalysisSummaryResult())
     override val templateName: String = "鍒嗚闀囪鑼冩�у垎鏋愯〃"
 
-    override fun execute() {
+    override fun genData() {
         dataSource.reset()
         cols.forEach { it.combineHead(head,dataSource) }
 
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/report/template/ScoreDetailSummary.kt b/src/main/kotlin/cn/flightfeather/supervision/business/report/template/ScoreDetailSummary.kt
index c42eada..b0c5c50 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/business/report/template/ScoreDetailSummary.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/business/report/template/ScoreDetailSummary.kt
@@ -3,6 +3,8 @@
 import cn.flightfeather.supervision.business.report.BaseCols
 import cn.flightfeather.supervision.business.report.BaseTemplate
 import cn.flightfeather.supervision.business.report.DataSource
+import cn.flightfeather.supervision.business.report.bean.BaseTemplateResult
+import cn.flightfeather.supervision.business.report.bean.ScoreDetailSummaryResult
 import cn.flightfeather.supervision.business.report.cols.*
 
 class ScoreDetailSummary(dataSource: DataSource) : BaseTemplate(dataSource) {
@@ -11,5 +13,6 @@
         ColTotalGrade(),
         ColItemGrade()
     )
+    override var resultObjects: MutableList<BaseTemplateResult> = mutableListOf(ScoreDetailSummaryResult())
     override val templateName: String = "瑙勮寖鎬ц瘎浼拌鎯呰〃"
 }
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/common/utils/Constant.kt b/src/main/kotlin/cn/flightfeather/supervision/common/utils/Constant.kt
index d250d1b..86e1ae9 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/common/utils/Constant.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/common/utils/Constant.kt
@@ -211,6 +211,11 @@
         MULTI_MODE("multi_mode", "澶氶�夋ā寮�"),
     }
 
+    // 鏁版嵁浜у搧绫诲瀷
+    enum class DataProductType(val value: Byte, val des: String){
+        PRO_DETAIL_SUMMARY(1, "闂涓庢暣鏀硅窡韪眹鎬昏〃"),
+        PRO_ANALYSIS_SUMMARY(2, "鍒嗚闀囬棶棰樻暣鏀瑰垎鏋愭眹鎬昏〃")
+    }
 
     companion object {
         //闂瀹℃牳
diff --git a/src/main/kotlin/cn/flightfeather/supervision/domain/ds1/entity/DataProduct.java b/src/main/kotlin/cn/flightfeather/supervision/domain/ds1/entity/DataProduct.java
new file mode 100644
index 0000000..cbadfab
--- /dev/null
+++ b/src/main/kotlin/cn/flightfeather/supervision/domain/ds1/entity/DataProduct.java
@@ -0,0 +1,411 @@
+package cn.flightfeather.supervision.domain.ds1.entity;
+
+import java.util.Date;
+import javax.persistence.*;
+
+@Table(name = "sm_t_data_product")
+public class DataProduct {
+    @Id
+    @Column(name = "GUID")
+    private String guid;
+
+    /**
+     * 鎶ヨ〃绫诲瀷(1锛氶棶棰樹笌鏁存敼璺熻釜姹囨�昏〃 2锛氬垎琛楅晣闂鏁存敼鍒嗘瀽姹囨�昏〃)
+     */
+    @Column(name = "Type_ID")
+    private Byte typeId;
+
+    /**
+     * 鎬讳换鍔d
+     */
+    @Column(name = "Task_GUID")
+    private String taskGuid;
+
+    @Column(name = "Scene_Type_ID")
+    private Byte sceneTypeId;
+
+    @Column(name = "Province_Code")
+    private String provinceCode;
+
+    @Column(name = "Province_Name")
+    private String provinceName;
+
+    @Column(name = "City_Code")
+    private String cityCode;
+
+    @Column(name = "City_Name")
+    private String cityName;
+
+    @Column(name = "District_Code")
+    private String districtCode;
+
+    @Column(name = "District_Name")
+    private String districtName;
+
+    @Column(name = "Town_Code")
+    private String townCode;
+
+    @Column(name = "Town_Name")
+    private String townName;
+
+    /**
+     * 寮�濮嬫椂闂�
+     */
+    @Column(name = "Start_Time")
+    private Date startTime;
+
+    /**
+     * 缁撴潫鏃堕棿
+     */
+    @Column(name = "End_Time")
+    private Date endTime;
+
+    /**
+     * 鍒涘缓鏃堕棿
+     */
+    @Column(name = "Create_Time")
+    private Date createTime;
+
+    @Column(name = "Update_Time")
+    private Date updateTime;
+
+    /**
+     * 鎵╁睍瀛楁1
+     */
+    @Column(name = "Extension1")
+    private String extension1;
+
+    /**
+     * 鎵╁睍瀛楁2
+     */
+    @Column(name = "Extension2")
+    private String extension2;
+
+    /**
+     * 鎵╁睍瀛楁3
+     */
+    @Column(name = "Extension3")
+    private String extension3;
+
+    /**
+     * 澶囨敞
+     */
+    @Column(name = "Remark")
+    private String remark;
+
+    /**
+     * @return GUID
+     */
+    public String getGuid() {
+        return guid;
+    }
+
+    /**
+     * @param guid
+     */
+    public void setGuid(String guid) {
+        this.guid = guid == null ? null : guid.trim();
+    }
+
+    /**
+     * 鑾峰彇鎶ヨ〃绫诲瀷(1锛氶棶棰樹笌鏁存敼璺熻釜姹囨�昏〃 2锛氬垎琛楅晣闂鏁存敼鍒嗘瀽姹囨�昏〃)
+     *
+     * @return Type_ID - 鎶ヨ〃绫诲瀷(1锛氶棶棰樹笌鏁存敼璺熻釜姹囨�昏〃 2锛氬垎琛楅晣闂鏁存敼鍒嗘瀽姹囨�昏〃)
+     */
+    public Byte getTypeId() {
+        return typeId;
+    }
+
+    /**
+     * 璁剧疆鎶ヨ〃绫诲瀷(1锛氶棶棰樹笌鏁存敼璺熻釜姹囨�昏〃 2锛氬垎琛楅晣闂鏁存敼鍒嗘瀽姹囨�昏〃)
+     *
+     * @param typeId 鎶ヨ〃绫诲瀷(1锛氶棶棰樹笌鏁存敼璺熻釜姹囨�昏〃 2锛氬垎琛楅晣闂鏁存敼鍒嗘瀽姹囨�昏〃)
+     */
+    public void setTypeId(Byte typeId) {
+        this.typeId = typeId;
+    }
+
+    /**
+     * 鑾峰彇鎬讳换鍔d
+     *
+     * @return Task_GUID - 鎬讳换鍔d
+     */
+    public String getTaskGuid() {
+        return taskGuid;
+    }
+
+    /**
+     * 璁剧疆鎬讳换鍔d
+     *
+     * @param taskGuid 鎬讳换鍔d
+     */
+    public void setTaskGuid(String taskGuid) {
+        this.taskGuid = taskGuid == null ? null : taskGuid.trim();
+    }
+
+    /**
+     * @return Scene_Type_ID
+     */
+    public Byte getSceneTypeId() {
+        return sceneTypeId;
+    }
+
+    /**
+     * @param sceneTypeId
+     */
+    public void setSceneTypeId(Byte sceneTypeId) {
+        this.sceneTypeId = sceneTypeId;
+    }
+
+    /**
+     * @return Province_Code
+     */
+    public String getProvinceCode() {
+        return provinceCode;
+    }
+
+    /**
+     * @param provinceCode
+     */
+    public void setProvinceCode(String provinceCode) {
+        this.provinceCode = provinceCode == null ? null : provinceCode.trim();
+    }
+
+    /**
+     * @return Province_Name
+     */
+    public String getProvinceName() {
+        return provinceName;
+    }
+
+    /**
+     * @param provinceName
+     */
+    public void setProvinceName(String provinceName) {
+        this.provinceName = provinceName == null ? null : provinceName.trim();
+    }
+
+    /**
+     * @return City_Code
+     */
+    public String getCityCode() {
+        return cityCode;
+    }
+
+    /**
+     * @param cityCode
+     */
+    public void setCityCode(String cityCode) {
+        this.cityCode = cityCode == null ? null : cityCode.trim();
+    }
+
+    /**
+     * @return City_Name
+     */
+    public String getCityName() {
+        return cityName;
+    }
+
+    /**
+     * @param cityName
+     */
+    public void setCityName(String cityName) {
+        this.cityName = cityName == null ? null : cityName.trim();
+    }
+
+    /**
+     * @return District_Code
+     */
+    public String getDistrictCode() {
+        return districtCode;
+    }
+
+    /**
+     * @param districtCode
+     */
+    public void setDistrictCode(String districtCode) {
+        this.districtCode = districtCode == null ? null : districtCode.trim();
+    }
+
+    /**
+     * @return District_Name
+     */
+    public String getDistrictName() {
+        return districtName;
+    }
+
+    /**
+     * @param districtName
+     */
+    public void setDistrictName(String districtName) {
+        this.districtName = districtName == null ? null : districtName.trim();
+    }
+
+    /**
+     * @return Town_Code
+     */
+    public String getTownCode() {
+        return townCode;
+    }
+
+    /**
+     * @param townCode
+     */
+    public void setTownCode(String townCode) {
+        this.townCode = townCode == null ? null : townCode.trim();
+    }
+
+    /**
+     * @return Town_Name
+     */
+    public String getTownName() {
+        return townName;
+    }
+
+    /**
+     * @param townName
+     */
+    public void setTownName(String townName) {
+        this.townName = townName == null ? null : townName.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;
+    }
+
+    /**
+     * 鑾峰彇鍒涘缓鏃堕棿
+     *
+     * @return Create_Time - 鍒涘缓鏃堕棿
+     */
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    /**
+     * 璁剧疆鍒涘缓鏃堕棿
+     *
+     * @param createTime 鍒涘缓鏃堕棿
+     */
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    /**
+     * @return Update_Time
+     */
+    public Date getUpdateTime() {
+        return updateTime;
+    }
+
+    /**
+     * @param updateTime
+     */
+    public void setUpdateTime(Date updateTime) {
+        this.updateTime = updateTime;
+    }
+
+    /**
+     * 鑾峰彇鎵╁睍瀛楁1
+     *
+     * @return Extension1 - 鎵╁睍瀛楁1
+     */
+    public String getExtension1() {
+        return extension1;
+    }
+
+    /**
+     * 璁剧疆鎵╁睍瀛楁1
+     *
+     * @param extension1 鎵╁睍瀛楁1
+     */
+    public void setExtension1(String extension1) {
+        this.extension1 = extension1 == null ? null : extension1.trim();
+    }
+
+    /**
+     * 鑾峰彇鎵╁睍瀛楁2
+     *
+     * @return Extension2 - 鎵╁睍瀛楁2
+     */
+    public String getExtension2() {
+        return extension2;
+    }
+
+    /**
+     * 璁剧疆鎵╁睍瀛楁2
+     *
+     * @param extension2 鎵╁睍瀛楁2
+     */
+    public void setExtension2(String extension2) {
+        this.extension2 = extension2 == null ? null : extension2.trim();
+    }
+
+    /**
+     * 鑾峰彇鎵╁睍瀛楁3
+     *
+     * @return Extension3 - 鎵╁睍瀛楁3
+     */
+    public String getExtension3() {
+        return extension3;
+    }
+
+    /**
+     * 璁剧疆鎵╁睍瀛楁3
+     *
+     * @param extension3 鎵╁睍瀛楁3
+     */
+    public void setExtension3(String extension3) {
+        this.extension3 = extension3 == null ? null : extension3.trim();
+    }
+
+    /**
+     * 鑾峰彇澶囨敞
+     *
+     * @return Remark - 澶囨敞
+     */
+    public String getRemark() {
+        return remark;
+    }
+
+    /**
+     * 璁剧疆澶囨敞
+     *
+     * @param remark 澶囨敞
+     */
+    public void setRemark(String remark) {
+        this.remark = remark == null ? null : remark.trim();
+    }
+}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/domain/ds1/entity/DataProductProDetail.java b/src/main/kotlin/cn/flightfeather/supervision/domain/ds1/entity/DataProductProDetail.java
new file mode 100644
index 0000000..84778f1
--- /dev/null
+++ b/src/main/kotlin/cn/flightfeather/supervision/domain/ds1/entity/DataProductProDetail.java
@@ -0,0 +1,753 @@
+package cn.flightfeather.supervision.domain.ds1.entity;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import javax.persistence.*;
+
+@Table(name = "sm_t_data_product_prodetail")
+public class DataProductProDetail {
+    /**
+     * 涓婚敭ID
+     */
+    @Id
+    @Column(name = "ID")
+    private Integer id;
+
+    /**
+     * 涓棿缁撴灉鍩烘湰淇℃伅ID锛屽熀鏈俊鎭〃澶栭敭ID
+     */
+    @Column(name = "DP_GUID")
+    private String dpGuid;
+
+    /**
+     * 琛ㄥ崟缂栧彿
+     */
+    @Column(name = "Form_Index")
+    private Integer formIndex;
+
+    /**
+     * 鍞竴搴忓彿
+     */
+    @Column(name = "Scene_Index")
+    private Integer sceneIndex;
+
+    /**
+     * 鍦烘櫙绫诲瀷
+     */
+    @Column(name = "Scene_Type")
+    private String sceneType;
+
+    /**
+     * 鍦烘櫙鍚嶇О
+     */
+    @Column(name = "Scene_Name")
+    private String sceneName;
+
+    /**
+     * 鐩戠鏃堕棿
+     */
+    @Column(name = "Inspection_Time")
+    private Date inspectionTime;
+
+    /**
+     * 宸℃煡浜哄憳
+     */
+    @Column(name = "Executors")
+    private String executors;
+
+    /**
+     * 闂绫诲瀷
+     */
+    @Column(name = "Problem_Type")
+    private String problemType;
+
+    /**
+     * 闂鎻忚堪
+     */
+    @Column(name = "Problem_Description")
+    private String problemDescription;
+
+    /**
+     * 闂浣嶇疆
+     */
+    @Column(name = "Problem_Location")
+    private String problemLocation;
+
+    /**
+     * 闂鏁�
+     */
+    @Column(name = "Problem_Num")
+    private Integer problemNum;
+
+    /**
+     * 鏁存敼鏃堕棿
+     */
+    @Column(name = "Change_Time")
+    private String changeTime;
+
+    /**
+     * 鏁存敼鎯呭喌
+     */
+    @Column(name = "Problem_Changed")
+    private String problemChanged;
+
+    /**
+     * 鏁存敼闂
+     */
+    @Column(name = "Changed_Problem")
+    private String changedProblem;
+
+    /**
+     * 鏁存敼鏁�
+     */
+    @Column(name = "Changed_Num")
+    private Integer changedNum;
+
+    /**
+     * 鏈暣鏀归棶棰�
+     */
+    @Column(name = "Unchanged_Problems")
+    private String unchangedProblems;
+
+    /**
+     * 鏈暣鏀规暟
+     */
+    @Column(name = "UnChanged_Num")
+    private Integer unchangedNum;
+
+    /**
+     * 闂鏁存敼鐜�
+     */
+    @Column(name = "Change_Percent")
+    private BigDecimal changePercent;
+
+    /**
+     * 瀹℃牳鎯呭喌
+     */
+    @Column(name = "Check_Status")
+    private String checkStatus;
+
+    /**
+     * 闂瀹℃牳鏃堕棿
+     */
+    @Column(name = "Pro_Check_Time")
+    private String proCheckTime;
+
+    /**
+     * 鏁存敼瀹℃牳鏃堕棿
+     */
+    @Column(name = "Change_Check_Time")
+    private String changeCheckTime;
+
+    /**
+     * 闂瀹℃牳鏁�
+     */
+    @Column(name = "Pro_Check_Num")
+    private Integer proCheckNum;
+
+    /**
+     * 闂瀹℃牳鍗犳瘮
+     */
+    @Column(name = "Pro_Check_Per")
+    private BigDecimal proCheckPer;
+
+    /**
+     * 鏁存敼瀹℃牳鏁�
+     */
+    @Column(name = "Change_Check_Num")
+    private Integer changeCheckNum;
+
+    /**
+     * 鏁存敼瀹℃牳鍗犳瘮
+     */
+    @Column(name = "Change_Check_Per")
+    private BigDecimal changeCheckPer;
+
+    /**
+     * 鍙拌处鎻愪氦鐧惧垎姣�
+     */
+    @Column(name = "Ledger_Percent")
+    private BigDecimal ledgerPercent;
+
+    /**
+     * 鍙拌处鎻愪氦鏃堕棿
+     */
+    @Column(name = "Ledger_Submit_Date")
+    private Date ledgerSubmitDate;
+
+    /**
+     * 鍙拌处瀹℃牳鏃堕棿
+     */
+    @Column(name = "Ledger_Check_Time")
+    private Date ledgerCheckTime;
+
+    /**
+     * 鏁存敼璺熻釜鎻愰啋
+     */
+    @Column(name = "Change_Tracking_Reminder")
+    private String changeTrackingReminder;
+
+    /**
+     * 鍒涘缓鏃堕棿
+     */
+    @Column(name = "Create_Time")
+    private Date createTime;
+
+    /**
+     * 鑾峰彇涓婚敭ID
+     *
+     * @return ID - 涓婚敭ID
+     */
+    public Integer getId() {
+        return id;
+    }
+
+    /**
+     * 璁剧疆涓婚敭ID
+     *
+     * @param id 涓婚敭ID
+     */
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    /**
+     * 鑾峰彇涓棿缁撴灉鍩烘湰淇℃伅ID锛屽熀鏈俊鎭〃澶栭敭ID
+     *
+     * @return DP_GUID - 涓棿缁撴灉鍩烘湰淇℃伅ID锛屽熀鏈俊鎭〃澶栭敭ID
+     */
+    public String getDpGuid() {
+        return dpGuid;
+    }
+
+    /**
+     * 璁剧疆涓棿缁撴灉鍩烘湰淇℃伅ID锛屽熀鏈俊鎭〃澶栭敭ID
+     *
+     * @param dpGuid 涓棿缁撴灉鍩烘湰淇℃伅ID锛屽熀鏈俊鎭〃澶栭敭ID
+     */
+    public void setDpGuid(String dpGuid) {
+        this.dpGuid = dpGuid == null ? null : dpGuid.trim();
+    }
+
+    /**
+     * 鑾峰彇琛ㄥ崟缂栧彿
+     *
+     * @return Form_Index - 琛ㄥ崟缂栧彿
+     */
+    public Integer getFormIndex() {
+        return formIndex;
+    }
+
+    /**
+     * 璁剧疆琛ㄥ崟缂栧彿
+     *
+     * @param formIndex 琛ㄥ崟缂栧彿
+     */
+    public void setFormIndex(Integer formIndex) {
+        this.formIndex = formIndex;
+    }
+
+    /**
+     * 鑾峰彇鍞竴搴忓彿
+     *
+     * @return Scene_Index - 鍞竴搴忓彿
+     */
+    public Integer getSceneIndex() {
+        return sceneIndex;
+    }
+
+    /**
+     * 璁剧疆鍞竴搴忓彿
+     *
+     * @param sceneIndex 鍞竴搴忓彿
+     */
+    public void setSceneIndex(Integer sceneIndex) {
+        this.sceneIndex = sceneIndex;
+    }
+
+    /**
+     * 鑾峰彇鍦烘櫙绫诲瀷
+     *
+     * @return Scene_Type - 鍦烘櫙绫诲瀷
+     */
+    public String getSceneType() {
+        return sceneType;
+    }
+
+    /**
+     * 璁剧疆鍦烘櫙绫诲瀷
+     *
+     * @param sceneType 鍦烘櫙绫诲瀷
+     */
+    public void setSceneType(String sceneType) {
+        this.sceneType = sceneType == null ? null : sceneType.trim();
+    }
+
+    /**
+     * 鑾峰彇鍦烘櫙鍚嶇О
+     *
+     * @return Scene_Name - 鍦烘櫙鍚嶇О
+     */
+    public String getSceneName() {
+        return sceneName;
+    }
+
+    /**
+     * 璁剧疆鍦烘櫙鍚嶇О
+     *
+     * @param sceneName 鍦烘櫙鍚嶇О
+     */
+    public void setSceneName(String sceneName) {
+        this.sceneName = sceneName == null ? null : sceneName.trim();
+    }
+
+    /**
+     * 鑾峰彇鐩戠鏃堕棿
+     *
+     * @return Inspection_Time - 鐩戠鏃堕棿
+     */
+    public Date getInspectionTime() {
+        return inspectionTime;
+    }
+
+    /**
+     * 璁剧疆鐩戠鏃堕棿
+     *
+     * @param inspectionTime 鐩戠鏃堕棿
+     */
+    public void setInspectionTime(Date inspectionTime) {
+        this.inspectionTime = inspectionTime;
+    }
+
+    /**
+     * 鑾峰彇宸℃煡浜哄憳
+     *
+     * @return Executors - 宸℃煡浜哄憳
+     */
+    public String getExecutors() {
+        return executors;
+    }
+
+    /**
+     * 璁剧疆宸℃煡浜哄憳
+     *
+     * @param executors 宸℃煡浜哄憳
+     */
+    public void setExecutors(String executors) {
+        this.executors = executors == null ? null : executors.trim();
+    }
+
+    /**
+     * 鑾峰彇闂绫诲瀷
+     *
+     * @return Problem_Type - 闂绫诲瀷
+     */
+    public String getProblemType() {
+        return problemType;
+    }
+
+    /**
+     * 璁剧疆闂绫诲瀷
+     *
+     * @param problemType 闂绫诲瀷
+     */
+    public void setProblemType(String problemType) {
+        this.problemType = problemType == null ? null : problemType.trim();
+    }
+
+    /**
+     * 鑾峰彇闂鎻忚堪
+     *
+     * @return Problem_Description - 闂鎻忚堪
+     */
+    public String getProblemDescription() {
+        return problemDescription;
+    }
+
+    /**
+     * 璁剧疆闂鎻忚堪
+     *
+     * @param problemDescription 闂鎻忚堪
+     */
+    public void setProblemDescription(String problemDescription) {
+        this.problemDescription = problemDescription == null ? null : problemDescription.trim();
+    }
+
+    /**
+     * 鑾峰彇闂浣嶇疆
+     *
+     * @return Problem_Location - 闂浣嶇疆
+     */
+    public String getProblemLocation() {
+        return problemLocation;
+    }
+
+    /**
+     * 璁剧疆闂浣嶇疆
+     *
+     * @param problemLocation 闂浣嶇疆
+     */
+    public void setProblemLocation(String problemLocation) {
+        this.problemLocation = problemLocation == null ? null : problemLocation.trim();
+    }
+
+    /**
+     * 鑾峰彇闂鏁�
+     *
+     * @return Problem_Num - 闂鏁�
+     */
+    public Integer getProblemNum() {
+        return problemNum;
+    }
+
+    /**
+     * 璁剧疆闂鏁�
+     *
+     * @param problemNum 闂鏁�
+     */
+    public void setProblemNum(Integer problemNum) {
+        this.problemNum = problemNum;
+    }
+
+    /**
+     * 鑾峰彇鏁存敼鏃堕棿
+     *
+     * @return Change_Time - 鏁存敼鏃堕棿
+     */
+    public String getChangeTime() {
+        return changeTime;
+    }
+
+    /**
+     * 璁剧疆鏁存敼鏃堕棿
+     *
+     * @param changeTime 鏁存敼鏃堕棿
+     */
+    public void setChangeTime(String changeTime) {
+        this.changeTime = changeTime == null ? null : changeTime.trim();
+    }
+
+    /**
+     * 鑾峰彇鏁存敼鎯呭喌
+     *
+     * @return Problem_Changed - 鏁存敼鎯呭喌
+     */
+    public String getProblemChanged() {
+        return problemChanged;
+    }
+
+    /**
+     * 璁剧疆鏁存敼鎯呭喌
+     *
+     * @param problemChanged 鏁存敼鎯呭喌
+     */
+    public void setProblemChanged(String problemChanged) {
+        this.problemChanged = problemChanged == null ? null : problemChanged.trim();
+    }
+
+    /**
+     * 鑾峰彇鏁存敼闂
+     *
+     * @return Changed_Problem - 鏁存敼闂
+     */
+    public String getChangedProblem() {
+        return changedProblem;
+    }
+
+    /**
+     * 璁剧疆鏁存敼闂
+     *
+     * @param changedProblem 鏁存敼闂
+     */
+    public void setChangedProblem(String changedProblem) {
+        this.changedProblem = changedProblem == null ? null : changedProblem.trim();
+    }
+
+    /**
+     * 鑾峰彇鏁存敼鏁�
+     *
+     * @return Changed_Num - 鏁存敼鏁�
+     */
+    public Integer getChangedNum() {
+        return changedNum;
+    }
+
+    /**
+     * 璁剧疆鏁存敼鏁�
+     *
+     * @param changedNum 鏁存敼鏁�
+     */
+    public void setChangedNum(Integer changedNum) {
+        this.changedNum = changedNum;
+    }
+
+    /**
+     * 鑾峰彇鏈暣鏀归棶棰�
+     *
+     * @return Unchanged_Problems - 鏈暣鏀归棶棰�
+     */
+    public String getUnchangedProblems() {
+        return unchangedProblems;
+    }
+
+    /**
+     * 璁剧疆鏈暣鏀归棶棰�
+     *
+     * @param unchangedProblems 鏈暣鏀归棶棰�
+     */
+    public void setUnchangedProblems(String unchangedProblems) {
+        this.unchangedProblems = unchangedProblems == null ? null : unchangedProblems.trim();
+    }
+
+    /**
+     * 鑾峰彇鏈暣鏀规暟
+     *
+     * @return UnChanged_Num - 鏈暣鏀规暟
+     */
+    public Integer getUnchangedNum() {
+        return unchangedNum;
+    }
+
+    /**
+     * 璁剧疆鏈暣鏀规暟
+     *
+     * @param unchangedNum 鏈暣鏀规暟
+     */
+    public void setUnchangedNum(Integer unchangedNum) {
+        this.unchangedNum = unchangedNum;
+    }
+
+    /**
+     * 鑾峰彇闂鏁存敼鐜�
+     *
+     * @return Change_Percent - 闂鏁存敼鐜�
+     */
+    public BigDecimal getChangePercent() {
+        return changePercent;
+    }
+
+    /**
+     * 璁剧疆闂鏁存敼鐜�
+     *
+     * @param changePercent 闂鏁存敼鐜�
+     */
+    public void setChangePercent(BigDecimal changePercent) {
+        this.changePercent = changePercent;
+    }
+
+    /**
+     * 鑾峰彇瀹℃牳鎯呭喌
+     *
+     * @return Check_Status - 瀹℃牳鎯呭喌
+     */
+    public String getCheckStatus() {
+        return checkStatus;
+    }
+
+    /**
+     * 璁剧疆瀹℃牳鎯呭喌
+     *
+     * @param checkStatus 瀹℃牳鎯呭喌
+     */
+    public void setCheckStatus(String checkStatus) {
+        this.checkStatus = checkStatus == null ? null : checkStatus.trim();
+    }
+
+    /**
+     * 鑾峰彇闂瀹℃牳鏃堕棿
+     *
+     * @return Pro_Check_Time - 闂瀹℃牳鏃堕棿
+     */
+    public String getProCheckTime() {
+        return proCheckTime;
+    }
+
+    /**
+     * 璁剧疆闂瀹℃牳鏃堕棿
+     *
+     * @param proCheckTime 闂瀹℃牳鏃堕棿
+     */
+    public void setProCheckTime(String proCheckTime) {
+        this.proCheckTime = proCheckTime == null ? null : proCheckTime.trim();
+    }
+
+    /**
+     * 鑾峰彇鏁存敼瀹℃牳鏃堕棿
+     *
+     * @return Change_Check_Time - 鏁存敼瀹℃牳鏃堕棿
+     */
+    public String getChangeCheckTime() {
+        return changeCheckTime;
+    }
+
+    /**
+     * 璁剧疆鏁存敼瀹℃牳鏃堕棿
+     *
+     * @param changeCheckTime 鏁存敼瀹℃牳鏃堕棿
+     */
+    public void setChangeCheckTime(String changeCheckTime) {
+        this.changeCheckTime = changeCheckTime == null ? null : changeCheckTime.trim();
+    }
+
+    /**
+     * 鑾峰彇闂瀹℃牳鏁�
+     *
+     * @return Pro_Check_Num - 闂瀹℃牳鏁�
+     */
+    public Integer getProCheckNum() {
+        return proCheckNum;
+    }
+
+    /**
+     * 璁剧疆闂瀹℃牳鏁�
+     *
+     * @param proCheckNum 闂瀹℃牳鏁�
+     */
+    public void setProCheckNum(Integer proCheckNum) {
+        this.proCheckNum = proCheckNum;
+    }
+
+    /**
+     * 鑾峰彇闂瀹℃牳鍗犳瘮
+     *
+     * @return Pro_Check_Per - 闂瀹℃牳鍗犳瘮
+     */
+    public BigDecimal getProCheckPer() {
+        return proCheckPer;
+    }
+
+    /**
+     * 璁剧疆闂瀹℃牳鍗犳瘮
+     *
+     * @param proCheckPer 闂瀹℃牳鍗犳瘮
+     */
+    public void setProCheckPer(BigDecimal proCheckPer) {
+        this.proCheckPer = proCheckPer;
+    }
+
+    /**
+     * 鑾峰彇鏁存敼瀹℃牳鏁�
+     *
+     * @return Change_Check_Num - 鏁存敼瀹℃牳鏁�
+     */
+    public Integer getChangeCheckNum() {
+        return changeCheckNum;
+    }
+
+    /**
+     * 璁剧疆鏁存敼瀹℃牳鏁�
+     *
+     * @param changeCheckNum 鏁存敼瀹℃牳鏁�
+     */
+    public void setChangeCheckNum(Integer changeCheckNum) {
+        this.changeCheckNum = changeCheckNum;
+    }
+
+    /**
+     * 鑾峰彇鏁存敼瀹℃牳鍗犳瘮
+     *
+     * @return Change_Check_Per - 鏁存敼瀹℃牳鍗犳瘮
+     */
+    public BigDecimal getChangeCheckPer() {
+        return changeCheckPer;
+    }
+
+    /**
+     * 璁剧疆鏁存敼瀹℃牳鍗犳瘮
+     *
+     * @param changeCheckPer 鏁存敼瀹℃牳鍗犳瘮
+     */
+    public void setChangeCheckPer(BigDecimal changeCheckPer) {
+        this.changeCheckPer = changeCheckPer;
+    }
+
+    /**
+     * 鑾峰彇鍙拌处鎻愪氦鐧惧垎姣�
+     *
+     * @return Ledger_Percent - 鍙拌处鎻愪氦鐧惧垎姣�
+     */
+    public BigDecimal getLedgerPercent() {
+        return ledgerPercent;
+    }
+
+    /**
+     * 璁剧疆鍙拌处鎻愪氦鐧惧垎姣�
+     *
+     * @param ledgerPercent 鍙拌处鎻愪氦鐧惧垎姣�
+     */
+    public void setLedgerPercent(BigDecimal ledgerPercent) {
+        this.ledgerPercent = ledgerPercent;
+    }
+
+    /**
+     * 鑾峰彇鍙拌处鎻愪氦鏃堕棿
+     *
+     * @return Ledger_Submit_Date - 鍙拌处鎻愪氦鏃堕棿
+     */
+    public Date getLedgerSubmitDate() {
+        return ledgerSubmitDate;
+    }
+
+    /**
+     * 璁剧疆鍙拌处鎻愪氦鏃堕棿
+     *
+     * @param ledgerSubmitDate 鍙拌处鎻愪氦鏃堕棿
+     */
+    public void setLedgerSubmitDate(Date ledgerSubmitDate) {
+        this.ledgerSubmitDate = ledgerSubmitDate;
+    }
+
+    /**
+     * 鑾峰彇鍙拌处瀹℃牳鏃堕棿
+     *
+     * @return Ledger_Check_Time - 鍙拌处瀹℃牳鏃堕棿
+     */
+    public Date getLedgerCheckTime() {
+        return ledgerCheckTime;
+    }
+
+    /**
+     * 璁剧疆鍙拌处瀹℃牳鏃堕棿
+     *
+     * @param ledgerCheckTime 鍙拌处瀹℃牳鏃堕棿
+     */
+    public void setLedgerCheckTime(Date ledgerCheckTime) {
+        this.ledgerCheckTime = ledgerCheckTime;
+    }
+
+    /**
+     * 鑾峰彇鏁存敼璺熻釜鎻愰啋
+     *
+     * @return Change_Tracking_Reminder - 鏁存敼璺熻釜鎻愰啋
+     */
+    public String getChangeTrackingReminder() {
+        return changeTrackingReminder;
+    }
+
+    /**
+     * 璁剧疆鏁存敼璺熻釜鎻愰啋
+     *
+     * @param changeTrackingReminder 鏁存敼璺熻釜鎻愰啋
+     */
+    public void setChangeTrackingReminder(String changeTrackingReminder) {
+        this.changeTrackingReminder = changeTrackingReminder == null ? null : changeTrackingReminder.trim();
+    }
+
+    /**
+     * 鑾峰彇鍒涘缓鏃堕棿
+     *
+     * @return Create_Time - 鍒涘缓鏃堕棿
+     */
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    /**
+     * 璁剧疆鍒涘缓鏃堕棿
+     *
+     * @param createTime 鍒涘缓鏃堕棿
+     */
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/domain/ds1/entity/DataProductTownProAnalysis.java b/src/main/kotlin/cn/flightfeather/supervision/domain/ds1/entity/DataProductTownProAnalysis.java
new file mode 100644
index 0000000..8248465
--- /dev/null
+++ b/src/main/kotlin/cn/flightfeather/supervision/domain/ds1/entity/DataProductTownProAnalysis.java
@@ -0,0 +1,465 @@
+package cn.flightfeather.supervision.domain.ds1.entity;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import javax.persistence.*;
+
+@Table(name = "sm_t_data_product_townproanalysis")
+public class DataProductTownProAnalysis {
+    /**
+     * 涓婚敭ID
+     */
+    @Id
+    @Column(name = "ID")
+    private Integer id;
+
+    /**
+     * 涓棿缁撴灉鍩烘湰淇℃伅ID
+     */
+    @Column(name = "DP_GUID")
+    private String dpGuid;
+
+    /**
+     * 琛楅晣搴忓彿
+     */
+    @Column(name = "Form_Index")
+    private Integer formIndex;
+
+    /**
+     * 琛楅晣/宸ヤ笟鍖哄悕绉�
+     */
+    @Column(name = "Town_Name")
+    private String townName;
+
+    /**
+     * 鍦烘櫙绫诲埆
+     */
+    @Column(name = "Scene_Type")
+    private String sceneType;
+
+    /**
+     * 鍦烘櫙鏁�
+     */
+    @Column(name = "Scene_Count")
+    private Integer sceneCount;
+
+    /**
+     * 瀹屽伐銆佹湭鏂藉伐銆佸仠宸ユ垨鍋滀笟銆佸叧闂瓑鍦烘櫙鏁�
+     */
+    @Column(name = "Inactive_Scene_Count")
+    private Integer inactiveSceneCount;
+
+    /**
+     * 鏂藉伐涓�佽繍钀ヤ腑鎬绘暟
+     */
+    @Column(name = "Active_Scene_Count")
+    private Integer activeSceneCount;
+
+    /**
+     * 鏁存敼鍗曚綅鏁�
+     */
+    @Column(name = "Change_Scene_Count")
+    private Integer changeSceneCount;
+
+    /**
+     * 鏁存敼鍗曚綅鍗犳瘮
+     */
+    @Column(name = "Change_Scene_Per")
+    private BigDecimal changeScenePer;
+
+    /**
+     * 闂鏁�
+     */
+    @Column(name = "Pro_Count")
+    private Integer proCount;
+
+    /**
+     * 闂鍗犳瘮
+     */
+    @Column(name = "Pro_Per")
+    private BigDecimal proPer;
+
+    /**
+     * 鏁存敼鏁�
+     */
+    @Column(name = "Change_Count")
+    private Integer changeCount;
+
+    /**
+     * 鏁存敼鐜�
+     */
+    @Column(name = "Change_Per")
+    private BigDecimal changePer;
+
+    /**
+     * 鏁存敼鍗曚綅姣旀帓鍚�
+     */
+    @Column(name = "Change_Scene_Rank")
+    private Integer changeSceneRank;
+
+    /**
+     * 闂鏁存敼鐜囨帓鍚�
+     */
+    @Column(name = "Pro_Change_Rank")
+    private Integer proChangeRank;
+
+    /**
+     * 鎷熷垪鍏ラ噸鐐圭洃绠℃暟
+     */
+    @Column(name = "Focus_Scene_Count")
+    private Integer focusSceneCount;
+
+    /**
+     * 鎷熷垪鍏ラ噸鐐圭洃绠″崰姣�
+     */
+    @Column(name = "Focus_Scene_Per")
+    private BigDecimal focusScenePer;
+
+    /**
+     * 鍒涘缓鏃堕棿
+     */
+    @Column(name = "Create_Time")
+    private Date createTime;
+
+    /**
+     * 鑾峰彇涓婚敭ID
+     *
+     * @return ID - 涓婚敭ID
+     */
+    public Integer getId() {
+        return id;
+    }
+
+    /**
+     * 璁剧疆涓婚敭ID
+     *
+     * @param id 涓婚敭ID
+     */
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    /**
+     * 鑾峰彇涓棿缁撴灉鍩烘湰淇℃伅ID
+     *
+     * @return DP_GUID - 涓棿缁撴灉鍩烘湰淇℃伅ID
+     */
+    public String getDpGuid() {
+        return dpGuid;
+    }
+
+    /**
+     * 璁剧疆涓棿缁撴灉鍩烘湰淇℃伅ID
+     *
+     * @param dpGuid 涓棿缁撴灉鍩烘湰淇℃伅ID
+     */
+    public void setDpGuid(String dpGuid) {
+        this.dpGuid = dpGuid == null ? null : dpGuid.trim();
+    }
+
+    /**
+     * 鑾峰彇琛楅晣搴忓彿
+     *
+     * @return Form_Index - 琛楅晣搴忓彿
+     */
+    public Integer getFormIndex() {
+        return formIndex;
+    }
+
+    /**
+     * 璁剧疆琛楅晣搴忓彿
+     *
+     * @param formIndex 琛楅晣搴忓彿
+     */
+    public void setFormIndex(Integer formIndex) {
+        this.formIndex = formIndex;
+    }
+
+    /**
+     * 鑾峰彇琛楅晣/宸ヤ笟鍖哄悕绉�
+     *
+     * @return Town_Name - 琛楅晣/宸ヤ笟鍖哄悕绉�
+     */
+    public String getTownName() {
+        return townName;
+    }
+
+    /**
+     * 璁剧疆琛楅晣/宸ヤ笟鍖哄悕绉�
+     *
+     * @param townName 琛楅晣/宸ヤ笟鍖哄悕绉�
+     */
+    public void setTownName(String townName) {
+        this.townName = townName == null ? null : townName.trim();
+    }
+
+    /**
+     * 鑾峰彇鍦烘櫙绫诲埆
+     *
+     * @return Scene_Type - 鍦烘櫙绫诲埆
+     */
+    public String getSceneType() {
+        return sceneType;
+    }
+
+    /**
+     * 璁剧疆鍦烘櫙绫诲埆
+     *
+     * @param sceneType 鍦烘櫙绫诲埆
+     */
+    public void setSceneType(String sceneType) {
+        this.sceneType = sceneType == null ? null : sceneType.trim();
+    }
+
+    /**
+     * 鑾峰彇鍦烘櫙鏁�
+     *
+     * @return Scene_Count - 鍦烘櫙鏁�
+     */
+    public Integer getSceneCount() {
+        return sceneCount;
+    }
+
+    /**
+     * 璁剧疆鍦烘櫙鏁�
+     *
+     * @param sceneCount 鍦烘櫙鏁�
+     */
+    public void setSceneCount(Integer sceneCount) {
+        this.sceneCount = sceneCount;
+    }
+
+    /**
+     * 鑾峰彇瀹屽伐銆佹湭鏂藉伐銆佸仠宸ユ垨鍋滀笟銆佸叧闂瓑鍦烘櫙鏁�
+     *
+     * @return Inactive_Scene_Count - 瀹屽伐銆佹湭鏂藉伐銆佸仠宸ユ垨鍋滀笟銆佸叧闂瓑鍦烘櫙鏁�
+     */
+    public Integer getInactiveSceneCount() {
+        return inactiveSceneCount;
+    }
+
+    /**
+     * 璁剧疆瀹屽伐銆佹湭鏂藉伐銆佸仠宸ユ垨鍋滀笟銆佸叧闂瓑鍦烘櫙鏁�
+     *
+     * @param inactiveSceneCount 瀹屽伐銆佹湭鏂藉伐銆佸仠宸ユ垨鍋滀笟銆佸叧闂瓑鍦烘櫙鏁�
+     */
+    public void setInactiveSceneCount(Integer inactiveSceneCount) {
+        this.inactiveSceneCount = inactiveSceneCount;
+    }
+
+    /**
+     * 鑾峰彇鏂藉伐涓�佽繍钀ヤ腑鎬绘暟
+     *
+     * @return Active_Scene_Count - 鏂藉伐涓�佽繍钀ヤ腑鎬绘暟
+     */
+    public Integer getActiveSceneCount() {
+        return activeSceneCount;
+    }
+
+    /**
+     * 璁剧疆鏂藉伐涓�佽繍钀ヤ腑鎬绘暟
+     *
+     * @param activeSceneCount 鏂藉伐涓�佽繍钀ヤ腑鎬绘暟
+     */
+    public void setActiveSceneCount(Integer activeSceneCount) {
+        this.activeSceneCount = activeSceneCount;
+    }
+
+    /**
+     * 鑾峰彇鏁存敼鍗曚綅鏁�
+     *
+     * @return Change_Scene_Count - 鏁存敼鍗曚綅鏁�
+     */
+    public Integer getChangeSceneCount() {
+        return changeSceneCount;
+    }
+
+    /**
+     * 璁剧疆鏁存敼鍗曚綅鏁�
+     *
+     * @param changeSceneCount 鏁存敼鍗曚綅鏁�
+     */
+    public void setChangeSceneCount(Integer changeSceneCount) {
+        this.changeSceneCount = changeSceneCount;
+    }
+
+    /**
+     * 鑾峰彇鏁存敼鍗曚綅鍗犳瘮
+     *
+     * @return Change_Scene_Per - 鏁存敼鍗曚綅鍗犳瘮
+     */
+    public BigDecimal getChangeScenePer() {
+        return changeScenePer;
+    }
+
+    /**
+     * 璁剧疆鏁存敼鍗曚綅鍗犳瘮
+     *
+     * @param changeScenePer 鏁存敼鍗曚綅鍗犳瘮
+     */
+    public void setChangeScenePer(BigDecimal changeScenePer) {
+        this.changeScenePer = changeScenePer;
+    }
+
+    /**
+     * 鑾峰彇闂鏁�
+     *
+     * @return Pro_Count - 闂鏁�
+     */
+    public Integer getProCount() {
+        return proCount;
+    }
+
+    /**
+     * 璁剧疆闂鏁�
+     *
+     * @param proCount 闂鏁�
+     */
+    public void setProCount(Integer proCount) {
+        this.proCount = proCount;
+    }
+
+    /**
+     * 鑾峰彇闂鍗犳瘮
+     *
+     * @return Pro_Per - 闂鍗犳瘮
+     */
+    public BigDecimal getProPer() {
+        return proPer;
+    }
+
+    /**
+     * 璁剧疆闂鍗犳瘮
+     *
+     * @param proPer 闂鍗犳瘮
+     */
+    public void setProPer(BigDecimal proPer) {
+        this.proPer = proPer;
+    }
+
+    /**
+     * 鑾峰彇鏁存敼鏁�
+     *
+     * @return Change_Count - 鏁存敼鏁�
+     */
+    public Integer getChangeCount() {
+        return changeCount;
+    }
+
+    /**
+     * 璁剧疆鏁存敼鏁�
+     *
+     * @param changeCount 鏁存敼鏁�
+     */
+    public void setChangeCount(Integer changeCount) {
+        this.changeCount = changeCount;
+    }
+
+    /**
+     * 鑾峰彇鏁存敼鐜�
+     *
+     * @return Change_Per - 鏁存敼鐜�
+     */
+    public BigDecimal getChangePer() {
+        return changePer;
+    }
+
+    /**
+     * 璁剧疆鏁存敼鐜�
+     *
+     * @param changePer 鏁存敼鐜�
+     */
+    public void setChangePer(BigDecimal changePer) {
+        this.changePer = changePer;
+    }
+
+    /**
+     * 鑾峰彇鏁存敼鍗曚綅姣旀帓鍚�
+     *
+     * @return Change_Scene_Rank - 鏁存敼鍗曚綅姣旀帓鍚�
+     */
+    public Integer getChangeSceneRank() {
+        return changeSceneRank;
+    }
+
+    /**
+     * 璁剧疆鏁存敼鍗曚綅姣旀帓鍚�
+     *
+     * @param changeSceneRank 鏁存敼鍗曚綅姣旀帓鍚�
+     */
+    public void setChangeSceneRank(Integer changeSceneRank) {
+        this.changeSceneRank = changeSceneRank;
+    }
+
+    /**
+     * 鑾峰彇闂鏁存敼鐜囨帓鍚�
+     *
+     * @return Pro_Change_Rank - 闂鏁存敼鐜囨帓鍚�
+     */
+    public Integer getProChangeRank() {
+        return proChangeRank;
+    }
+
+    /**
+     * 璁剧疆闂鏁存敼鐜囨帓鍚�
+     *
+     * @param proChangeRank 闂鏁存敼鐜囨帓鍚�
+     */
+    public void setProChangeRank(Integer proChangeRank) {
+        this.proChangeRank = proChangeRank;
+    }
+
+    /**
+     * 鑾峰彇鎷熷垪鍏ラ噸鐐圭洃绠℃暟
+     *
+     * @return Focus_Scene_Count - 鎷熷垪鍏ラ噸鐐圭洃绠℃暟
+     */
+    public Integer getFocusSceneCount() {
+        return focusSceneCount;
+    }
+
+    /**
+     * 璁剧疆鎷熷垪鍏ラ噸鐐圭洃绠℃暟
+     *
+     * @param focusSceneCount 鎷熷垪鍏ラ噸鐐圭洃绠℃暟
+     */
+    public void setFocusSceneCount(Integer focusSceneCount) {
+        this.focusSceneCount = focusSceneCount;
+    }
+
+    /**
+     * 鑾峰彇鎷熷垪鍏ラ噸鐐圭洃绠″崰姣�
+     *
+     * @return Focus_Scene_Per - 鎷熷垪鍏ラ噸鐐圭洃绠″崰姣�
+     */
+    public BigDecimal getFocusScenePer() {
+        return focusScenePer;
+    }
+
+    /**
+     * 璁剧疆鎷熷垪鍏ラ噸鐐圭洃绠″崰姣�
+     *
+     * @param focusScenePer 鎷熷垪鍏ラ噸鐐圭洃绠″崰姣�
+     */
+    public void setFocusScenePer(BigDecimal focusScenePer) {
+        this.focusScenePer = focusScenePer;
+    }
+
+    /**
+     * 鑾峰彇鍒涘缓鏃堕棿
+     *
+     * @return Create_Time - 鍒涘缓鏃堕棿
+     */
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    /**
+     * 璁剧疆鍒涘缓鏃堕棿
+     *
+     * @param createTime 鍒涘缓鏃堕棿
+     */
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/domain/ds1/mapper/DataProductMapper.java b/src/main/kotlin/cn/flightfeather/supervision/domain/ds1/mapper/DataProductMapper.java
new file mode 100644
index 0000000..b39afdf
--- /dev/null
+++ b/src/main/kotlin/cn/flightfeather/supervision/domain/ds1/mapper/DataProductMapper.java
@@ -0,0 +1,7 @@
+package cn.flightfeather.supervision.domain.ds1.mapper;
+
+import cn.flightfeather.supervision.domain.ds1.entity.DataProduct;
+import cn.flightfeather.supervision.domain.util.MyMapper;
+
+public interface DataProductMapper extends MyMapper<DataProduct> {
+}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/domain/ds1/mapper/DataProductProDetailMapper.kt b/src/main/kotlin/cn/flightfeather/supervision/domain/ds1/mapper/DataProductProDetailMapper.kt
new file mode 100644
index 0000000..6a73f2f
--- /dev/null
+++ b/src/main/kotlin/cn/flightfeather/supervision/domain/ds1/mapper/DataProductProDetailMapper.kt
@@ -0,0 +1,8 @@
+package cn.flightfeather.supervision.domain.ds1.mapper
+
+import cn.flightfeather.supervision.domain.ds1.entity.DataProductProDetail
+import cn.flightfeather.supervision.domain.util.MyMapper
+
+interface DataProductProDetailMapper : MyMapper<DataProductProDetail> {
+
+}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/domain/ds1/mapper/DataProductTownProAnalysisMapper.kt b/src/main/kotlin/cn/flightfeather/supervision/domain/ds1/mapper/DataProductTownProAnalysisMapper.kt
new file mode 100644
index 0000000..2479912
--- /dev/null
+++ b/src/main/kotlin/cn/flightfeather/supervision/domain/ds1/mapper/DataProductTownProAnalysisMapper.kt
@@ -0,0 +1,9 @@
+package cn.flightfeather.supervision.domain.ds1.mapper
+
+import cn.flightfeather.supervision.domain.ds1.entity.DataProductTownProAnalysis
+import cn.flightfeather.supervision.domain.util.MyMapper
+import tk.mybatis.mapper.common.Mapper
+
+interface DataProductTownProAnalysisMapper : MyMapper<DataProductTownProAnalysis> {
+
+}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/domain/ds1/repository/DataProductRep.kt b/src/main/kotlin/cn/flightfeather/supervision/domain/ds1/repository/DataProductRep.kt
new file mode 100644
index 0000000..3b2f334
--- /dev/null
+++ b/src/main/kotlin/cn/flightfeather/supervision/domain/ds1/repository/DataProductRep.kt
@@ -0,0 +1,86 @@
+package cn.flightfeather.supervision.domain.ds1.repository
+
+import cn.flightfeather.supervision.common.utils.Constant
+import cn.flightfeather.supervision.domain.ds1.entity.*
+import cn.flightfeather.supervision.domain.ds1.mapper.*
+import org.apache.commons.lang3.ObjectUtils
+import org.springframework.stereotype.Repository
+import tk.mybatis.mapper.entity.Example
+import java.util.*
+
+@Repository
+class DataProductRep(
+    private val dataProductMapper: DataProductMapper,
+    private val dataProductProDetailMapper: DataProductProDetailMapper,
+    private val dataProductTownProAnalysisMapper: DataProductTownProAnalysisMapper,
+    private val provinceMapper: ProvinceMapper,
+    private val townMapper: TownMapper,
+    private val cityMapper: CityMapper,
+    private val districtMapper: DistrictMapper
+
+) {
+
+    /**
+     * 鎻掑叆鏁版嵁浜у搧涓棿缁撴灉鍩烘湰淇℃伅鍜屽叿浣撲俊鎭�
+     */
+    fun insertDataProduct(dataProduct: DataProduct, specificEntities: List<Any>) {
+        // 鏍规嵁绫诲瀷鎻掑叆鎸囧畾鏁版嵁搴撹〃
+        if (specificEntities.isNotEmpty()) {
+            when (specificEntities.first()::class) {
+                DataProductProDetail::class -> {
+                    (specificEntities as? List<DataProductProDetail>)?.let { let_it ->
+                        specificEntities.forEach { for_it ->
+                            for_it.dpGuid = dataProduct.guid
+                        }
+                        dataProduct.typeId = Constant.DataProductType.PRO_DETAIL_SUMMARY.value
+                        insertProDetailSpecificInfo(let_it)
+                    }
+                }
+                DataProductTownProAnalysis::class -> {
+                    (specificEntities as? List<DataProductTownProAnalysis>)?.let { let_it ->
+                        specificEntities.forEach { for_it ->
+                            for_it.dpGuid = dataProduct.guid
+                        }
+                        dataProduct.typeId = Constant.DataProductType.PRO_ANALYSIS_SUMMARY.value
+                        insertTownProAnalysisSpecificInfo(let_it)
+                    }
+                }
+            }
+        }
+        insertDataProductBaseInfo(dataProduct)
+    }
+
+    private fun insertProDetailSpecificInfo(specificEntities: List<DataProductProDetail>) {
+        dataProductProDetailMapper.insertList(specificEntities)
+    }
+
+    private fun insertTownProAnalysisSpecificInfo(specificEntities: List<DataProductTownProAnalysis>) {
+        dataProductTownProAnalysisMapper.insertList(specificEntities)
+    }
+
+     private fun insertDataProductBaseInfo(dataProduct: DataProduct) {
+         // 琛屾斂鍖哄煙name濉厖
+         if (dataProduct.townCode != null) {
+             townMapper.selectByExample(Example(Town::class.java).apply {
+                 createCriteria().andEqualTo("towncode", dataProduct.townCode)
+             })?.takeIf { it.isNotEmpty() }?.get(0)?.let { dataProduct.townName = it.townname ?: "" }
+         }
+         if (dataProduct.provinceCode != null) {
+             provinceMapper.selectByExample(Example(Province::class.java).apply {
+                 createCriteria().andEqualTo("provincecode", dataProduct.provinceCode)
+             })?.takeIf { it.isNotEmpty() }?.get(0)?.let { dataProduct.provinceName = it.provincename ?: "" }
+         }
+         if (dataProduct.cityCode != null) {
+             cityMapper.selectByExample(Example(City::class.java).apply {
+                 createCriteria().andEqualTo("citycode", dataProduct.cityCode)
+             })?.takeIf { it.isNotEmpty() }?.get(0)?.let { dataProduct.cityName = it.cityname ?: "" }
+         }
+         if (dataProduct.districtCode != null) {
+             districtMapper.selectByExample(Example(District::class.java).apply {
+                 createCriteria().andEqualTo("districtcode", dataProduct.districtCode)
+             })?.takeIf { it.isNotEmpty() }?.get(0)?.let { dataProduct.districtName = it.districtname ?: "" }
+         }
+         dataProduct.createTime = Date()
+         dataProductMapper.insert(dataProduct)
+    }
+}
\ No newline at end of file
diff --git a/src/main/resources/mapper/ds1/DataProductMapper.xml b/src/main/resources/mapper/ds1/DataProductMapper.xml
new file mode 100644
index 0000000..dfdec35
--- /dev/null
+++ b/src/main/resources/mapper/ds1/DataProductMapper.xml
@@ -0,0 +1,37 @@
+<?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="cn.flightfeather.supervision.domain.ds1.mapper.DataProductMapper" >
+  <resultMap id="BaseResultMap" type="cn.flightfeather.supervision.domain.ds1.entity.DataProduct" >
+    <!--
+      WARNING - @mbg.generated
+    -->
+    <id column="GUID" property="guid" jdbcType="VARCHAR" />
+    <result column="Type_ID" property="typeId" jdbcType="TINYINT" />
+    <result column="Task_GUID" property="taskGuid" jdbcType="VARCHAR" />
+    <result column="Scene_Type_ID" property="sceneTypeId" jdbcType="TINYINT" />
+    <result column="Province_Code" property="provinceCode" jdbcType="VARCHAR" />
+    <result column="Province_Name" property="provinceName" jdbcType="VARCHAR" />
+    <result column="City_Code" property="cityCode" jdbcType="VARCHAR" />
+    <result column="City_Name" property="cityName" jdbcType="VARCHAR" />
+    <result column="District_Code" property="districtCode" jdbcType="VARCHAR" />
+    <result column="District_Name" property="districtName" jdbcType="VARCHAR" />
+    <result column="Town_Code" property="townCode" jdbcType="VARCHAR" />
+    <result column="Town_Name" property="townName" jdbcType="VARCHAR" />
+    <result column="Start_Time" property="startTime" jdbcType="TIMESTAMP" />
+    <result column="End_Time" property="endTime" jdbcType="TIMESTAMP" />
+    <result column="Create_Time" property="createTime" jdbcType="TIMESTAMP" />
+    <result column="Update_Time" property="updateTime" jdbcType="TIMESTAMP" />
+    <result column="Extension1" property="extension1" jdbcType="VARCHAR" />
+    <result column="Extension2" property="extension2" jdbcType="VARCHAR" />
+    <result column="Extension3" property="extension3" jdbcType="VARCHAR" />
+    <result column="Remark" property="remark" jdbcType="VARCHAR" />
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--
+      WARNING - @mbg.generated
+    -->
+    GUID, Type_ID, Task_GUID, Scene_Type_ID, Province_Code, Province_Name, City_Code, 
+    City_Name, District_Code, District_Name, Town_Code, Town_Name, Start_Time, End_Time, 
+    Create_Time, Update_Time, Extension1, Extension2, Extension3, Remark
+  </sql>
+</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/ds1/DataProductProDetailMapper.xml b/src/main/resources/mapper/ds1/DataProductProDetailMapper.xml
new file mode 100644
index 0000000..8938c0d
--- /dev/null
+++ b/src/main/resources/mapper/ds1/DataProductProDetailMapper.xml
@@ -0,0 +1,51 @@
+<?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="cn.flightfeather.supervision.domain.ds1.mapper.DataProductProDetailMapper" >
+  <resultMap id="BaseResultMap" type="cn.flightfeather.supervision.domain.ds1.entity.DataProductProDetail" >
+    <!--
+      WARNING - @mbg.generated
+    -->
+    <id column="ID" property="id" jdbcType="INTEGER" />
+    <result column="DP_GUID" property="dpGuid" jdbcType="VARCHAR" />
+    <result column="Form_Index" property="formIndex" jdbcType="INTEGER" />
+    <result column="Scene_Index" property="sceneIndex" jdbcType="INTEGER" />
+    <result column="Scene_Type" property="sceneType" jdbcType="VARCHAR" />
+    <result column="Scene_Name" property="sceneName" jdbcType="VARCHAR" />
+    <result column="Inspection_Time" property="inspectionTime" jdbcType="TIMESTAMP" />
+    <result column="Executors" property="executors" jdbcType="VARCHAR" />
+    <result column="Problem_Type" property="problemType" jdbcType="VARCHAR" />
+    <result column="Problem_Description" property="problemDescription" jdbcType="VARCHAR" />
+    <result column="Problem_Location" property="problemLocation" jdbcType="VARCHAR" />
+    <result column="Problem_Num" property="problemNum" jdbcType="INTEGER" />
+    <result column="Change_Time" property="changeTime" jdbcType="VARCHAR" />
+    <result column="Problem_Changed" property="problemChanged" jdbcType="VARCHAR" />
+    <result column="Changed_Problem" property="changedProblem" jdbcType="VARCHAR" />
+    <result column="Changed_Num" property="changedNum" jdbcType="INTEGER" />
+    <result column="Unchanged_Problems" property="unchangedProblems" jdbcType="VARCHAR" />
+    <result column="UnChanged_Num" property="unchangedNum" jdbcType="INTEGER" />
+    <result column="Change_Percent" property="changePercent" jdbcType="DECIMAL" />
+    <result column="Check_Status" property="checkStatus" jdbcType="VARCHAR" />
+    <result column="Pro_Check_Time" property="proCheckTime" jdbcType="VARCHAR" />
+    <result column="Change_Check_Time" property="changeCheckTime" jdbcType="VARCHAR" />
+    <result column="Pro_Check_Num" property="proCheckNum" jdbcType="INTEGER" />
+    <result column="Pro_Check_Per" property="proCheckPer" jdbcType="DECIMAL" />
+    <result column="Change_Check_Num" property="changeCheckNum" jdbcType="INTEGER" />
+    <result column="Change_Check_Per" property="changeCheckPer" jdbcType="DECIMAL" />
+    <result column="Ledger_Percent" property="ledgerPercent" jdbcType="DECIMAL" />
+    <result column="Ledger_Submit_Date" property="ledgerSubmitDate" jdbcType="TIMESTAMP" />
+    <result column="Ledger_Check_Time" property="ledgerCheckTime" jdbcType="TIMESTAMP" />
+    <result column="Change_Tracking_Reminder" property="changeTrackingReminder" jdbcType="VARCHAR" />
+    <result column="Create_Time" property="createTime" jdbcType="TIMESTAMP" />
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--
+      WARNING - @mbg.generated
+    -->
+    ID, DP_GUID, Form_Index, Scene_Index, Scene_Type, Scene_Name, Inspection_Time, Executors, 
+    Problem_Type, Problem_Description, Problem_Location, Problem_Num, Change_Time, Problem_Changed, 
+    Changed_Problem, Changed_Num, Unchanged_Problems, UnChanged_Num, Change_Percent, 
+    Check_Status, Pro_Check_Time, Change_Check_Time, Pro_Check_Num, Pro_Check_Per, Change_Check_Num, 
+    Change_Check_Per, Ledger_Percent, Ledger_Submit_Date, Ledger_Check_Time, Change_Tracking_Reminder, 
+    Create_Time
+  </sql>
+</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/ds1/DataProductTownProAnalysisMapper.xml b/src/main/resources/mapper/ds1/DataProductTownProAnalysisMapper.xml
new file mode 100644
index 0000000..5de608e
--- /dev/null
+++ b/src/main/resources/mapper/ds1/DataProductTownProAnalysisMapper.xml
@@ -0,0 +1,37 @@
+<?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="cn.flightfeather.supervision.domain.ds1.mapper.DataProductTownProAnalysisMapper" >
+  <resultMap id="BaseResultMap" type="cn.flightfeather.supervision.domain.ds1.entity.DataProductTownProAnalysis" >
+    <!--
+      WARNING - @mbg.generated
+    -->
+    <id column="ID" property="id" jdbcType="INTEGER" />
+    <result column="DP_GUID" property="dpGuid" jdbcType="VARCHAR" />
+    <result column="Form_Index" property="formIndex" jdbcType="INTEGER" />
+    <result column="Town_Name" property="townName" jdbcType="VARCHAR" />
+    <result column="Scene_Type" property="sceneType" jdbcType="VARCHAR" />
+    <result column="Scene_Count" property="sceneCount" jdbcType="INTEGER" />
+    <result column="Inactive_Scene_Count" property="inactiveSceneCount" jdbcType="INTEGER" />
+    <result column="Active_Scene_Count" property="activeSceneCount" jdbcType="INTEGER" />
+    <result column="Change_Scene_Count" property="changeSceneCount" jdbcType="INTEGER" />
+    <result column="Change_Scene_Per" property="changeScenePer" jdbcType="DECIMAL" />
+    <result column="Pro_Count" property="proCount" jdbcType="INTEGER" />
+    <result column="Pro_Per" property="proPer" jdbcType="DECIMAL" />
+    <result column="Change_Count" property="changeCount" jdbcType="INTEGER" />
+    <result column="Change_Per" property="changePer" jdbcType="DECIMAL" />
+    <result column="Change_Scene_Rank" property="changeSceneRank" jdbcType="INTEGER" />
+    <result column="Pro_Change_Rank" property="proChangeRank" jdbcType="INTEGER" />
+    <result column="Focus_Scene_Count" property="focusSceneCount" jdbcType="INTEGER" />
+    <result column="Focus_Scene_Per" property="focusScenePer" jdbcType="DECIMAL" />
+    <result column="Create_Time" property="createTime" jdbcType="TIMESTAMP" />
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--
+      WARNING - @mbg.generated
+    -->
+    ID, DP_GUID, Form_Index, Town_Name, Scene_Type, Scene_Count, Inactive_Scene_Count, 
+    Active_Scene_Count, Change_Scene_Count, Change_Scene_Per, Pro_Count, Pro_Per, Change_Count, 
+    Change_Per, Change_Scene_Rank, Pro_Change_Rank, Focus_Scene_Count, Focus_Scene_Per, 
+    Create_Time
+  </sql>
+</mapper>
\ No newline at end of file

--
Gitblit v1.9.3