From 4b5d0c06baa6542c7d9acde19e97b90232da0c88 Mon Sep 17 00:00:00 2001 From: riku <risaku@163.com> Date: 星期二, 20 四月 2021 09:42:42 +0800 Subject: [PATCH] 1. 新增获取工业企业信息接口; 2. 调整获取数据接口的结果按照时间升序排列; 3. 新增获取给定时间之后的数据的接口; --- src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/CompanyServiceImpl.kt | 16 src/main/kotlin/com/flightfeather/uav/domain/entity/Company.java | 915 ++++++++++++++++++++++++++++++++++++++ src/main/kotlin/com/flightfeather/uav/common/utils/ExcelUtil.kt | 157 ++++++ src/main/kotlin/com/flightfeather/uav/lightshare/web/RealTimeDataController.kt | 8 src/main/kotlin/com/flightfeather/uav/common/utils/FileExchange.kt | 176 +++++++ src/main/kotlin/com/flightfeather/uav/lightshare/service/RealTimeDataService.kt | 2 pom.xml | 59 + src/test/kotlin/com/flightfeather/uav/lightshare/service/impl/CompanyServiceImplTest.kt | 24 + src/test/kotlin/com/flightfeather/uav/Test.kt | 6 src/main/kotlin/com/flightfeather/uav/domain/mapper/CompanyMapper.kt | 8 src/main/kotlin/com/flightfeather/uav/lightshare/service/CompanyService.kt | 10 src/main/kotlin/com/flightfeather/uav/lightshare/web/CompanyController.kt | 14 src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/RealTimeDataServiceImpl.kt | 31 + src/main/resources/application.yml | 6 14 files changed, 1,404 insertions(+), 28 deletions(-) diff --git a/pom.xml b/pom.xml index 3f610f5..4e9ea76 100644 --- a/pom.xml +++ b/pom.xml @@ -116,35 +116,48 @@ <artifactId>spring-boot-starter-log4j2</artifactId> </dependency> + <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --> + <dependency> + <groupId>org.apache.poi</groupId> + <artifactId>poi</artifactId> + <version>4.1.2</version> + </dependency> + + <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson --> + <dependency> + <groupId>com.alibaba</groupId> + <artifactId>fastjson</artifactId> + <version>1.2.75</version> + </dependency> </dependencies> <build> <sourceDirectory>${project.basedir}/src/main/kotlin</sourceDirectory> <testSourceDirectory>${project.basedir}/src/test/kotlin</testSourceDirectory> <plugins> - <plugin> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-maven-plugin</artifactId> - </plugin> - <plugin> - <groupId>org.jetbrains.kotlin</groupId> - <artifactId>kotlin-maven-plugin</artifactId> - <configuration> - <args> - <arg>-Xjsr305=strict</arg> - </args> - <compilerPlugins> - <plugin>spring</plugin> - </compilerPlugins> - </configuration> - <dependencies> - <dependency> - <groupId>org.jetbrains.kotlin</groupId> - <artifactId>kotlin-maven-allopen</artifactId> - <version>${kotlin.version}</version> - </dependency> - </dependencies> - </plugin> +<!-- <plugin>--> +<!-- <groupId>org.springframework.boot</groupId>--> +<!-- <artifactId>spring-boot-maven-plugin</artifactId>--> +<!-- </plugin>--> +<!-- <plugin>--> +<!-- <groupId>org.jetbrains.kotlin</groupId>--> +<!-- <artifactId>kotlin-maven-plugin</artifactId>--> +<!-- <configuration>--> +<!-- <args>--> +<!-- <arg>-Xjsr305=strict</arg>--> +<!-- </args>--> +<!-- <compilerPlugins>--> +<!-- <plugin>spring</plugin>--> +<!-- </compilerPlugins>--> +<!-- </configuration>--> +<!-- <dependencies>--> +<!-- <dependency>--> +<!-- <groupId>org.jetbrains.kotlin</groupId>--> +<!-- <artifactId>kotlin-maven-allopen</artifactId>--> +<!-- <version>${kotlin.version}</version>--> +<!-- </dependency>--> +<!-- </dependencies>--> +<!-- </plugin>--> <!-- mybatis generator 鑷姩鐢熸垚浠g爜鎻掍欢 --> <plugin> <groupId>org.mybatis.generator</groupId> diff --git a/src/main/kotlin/com/flightfeather/uav/common/utils/ExcelUtil.kt b/src/main/kotlin/com/flightfeather/uav/common/utils/ExcelUtil.kt new file mode 100644 index 0000000..0d41d40 --- /dev/null +++ b/src/main/kotlin/com/flightfeather/uav/common/utils/ExcelUtil.kt @@ -0,0 +1,157 @@ +package com.flightfeather.uav.common.utils + +import org.apache.poi.hssf.usermodel.HSSFWorkbook +import org.apache.poi.ss.util.CellRangeAddress +import java.time.LocalDate +import java.util.* +import kotlin.math.max + +/** + * @author riku + * Date: 2020/6/12 + */ +object ExcelUtil { + + class MyCell( + var text: String, + var rowSpan: Int = 1 + ) + + /** + * 鑷姩澶勭悊琛屽悎骞舵暟鎹� + */ + fun write2(heads: List<String>, contents: List<Array<Any>>, workbook: HSSFWorkbook, sheetName:String) { + + val sheet = workbook.createSheet(sheetName) + + var rowIndex = 0 + + if (heads.isNotEmpty()) { + val rows = sheet.createRow(rowIndex) + for (i in 0 until heads.size) { + rows.createCell(i).setCellValue(heads[i]) + } + rowIndex++ + } + + contents.forEach { + val maxRow = getMaxRows(it) + + var rows = sheet.getRow(rowIndex) ?: sheet.createRow(rowIndex) + + val arrayMap = mutableMapOf<Int, Array<*>>() + + for (i in it.indices) { + val cell = it[i] + + var rowspan = maxRow//鍚堝苟鐨勮鐨勮法搴� + + val c = + if (cell is Array<*>) { + //褰撴暟鎹负鏁扮粍鏃讹紝闇�瑕佹牴鎹渶澶ц鏁伴噸鏂拌绠楄鍗曞厓鏍肩殑琛岃法搴� + arrayMap[i] = cell + rowspan = maxRow / if (cell.size == 0) 1 else cell.size + val c = cell[0] + if (c is MyCell) { + rowspan = c.rowSpan + } + if (rowspan > 1) { + println("鍚堝苟1-1锛�$rowIndex;${rowIndex + rowspan - 1};$i") + sheet.addMergedRegion(CellRangeAddress(rowIndex, rowIndex + rowspan - 1, i, i)) + } + if (cell.isEmpty()) { + "" + } else { + cell[0] + } + } else { + //褰撴暟鎹笉鏄暟缁勬椂锛岄渶瑕佹寜鏈�澶ц鏁板悎骞跺崟鍏冩牸 + if (rowspan > 1) { + println("鍚堝苟1-2锛�$rowIndex;${rowIndex + rowspan - 1};$i") + sheet.addMergedRegion(CellRangeAddress(rowIndex, rowIndex + rowspan - 1, i, i)) + } + cell + } + when (c) { + is MyCell -> { + rows.createCell(i).setCellValue(c.text) + println("write1-1: ${c.text};($rowIndex, ${i})") + } + is String -> { + rows.createCell(i).setCellValue(c) + println("write1-2: ${c};($rowIndex, ${i})") + } + is Double -> rows.createCell(i).setCellValue(c) + is Boolean -> rows.createCell(i).setCellValue(c) + is Date -> rows.createCell(i).setCellValue(c) + is Calendar -> rows.createCell(i).setCellValue(c) + is LocalDate -> rows.createCell(i).setCellValue(c) + } + } + + for (i in 1 until maxRow) { + rowIndex++ + arrayMap.forEach { map -> + rows = sheet.getRow(rowIndex) ?: sheet.createRow(rowIndex) + val array = map.value + if (i < array.size) { +// var rowspan = maxRow / array.size + var lastRowSpan = 1 + var rowspan = 1 + val c = array[i] + if (c is MyCell) { + rowspan = c.rowSpan + } + val _c = array[i-1] + if (_c is MyCell) { + lastRowSpan = _c.rowSpan + } + var _rowIndex = rowIndex + var index = rowIndex + if (lastRowSpan > 1) { + index = rowIndex + (i * lastRowSpan) - 1 + _rowIndex = index + rows = sheet.getRow(_rowIndex) ?: sheet.createRow(_rowIndex) + } + if (rowspan > 1) { + println("鍚堝苟2锛�${index};${index + rowspan - 1};$i") + sheet.addMergedRegion(CellRangeAddress(index, index + rowspan - 1, i, i)) + } + + when (c) { + is MyCell -> { + rows.createCell(map.key).setCellValue(c.text) + println("write2-1: ${c.text};($_rowIndex, ${map.key})") + } + is String -> { + rows.createCell(map.key).setCellValue(c) + println("write2-2: ${c};($_rowIndex, ${map.key})") + } + is Double -> rows.createCell(map.key).setCellValue(c) + is Boolean -> rows.createCell(map.key).setCellValue(c) + is Date -> rows.createCell(map.key).setCellValue(c) + is Calendar -> rows.createCell(map.key).setCellValue(c) + is LocalDate -> rows.createCell(map.key).setCellValue(c) + } + } + } + } + + rowIndex++ + } +// workbook.write(out) +// workbook.close() +// out.flush() +// out.close() + } + + private fun getMaxRows(rowArray: Array<Any>): Int { + var maxRows = 1 + rowArray.forEach { + if (it is Array<*>) { + maxRows = max(it.size, maxRows) + } + } + return maxRows + } +} \ No newline at end of file diff --git a/src/main/kotlin/com/flightfeather/uav/common/utils/FileExchange.kt b/src/main/kotlin/com/flightfeather/uav/common/utils/FileExchange.kt new file mode 100644 index 0000000..b282399 --- /dev/null +++ b/src/main/kotlin/com/flightfeather/uav/common/utils/FileExchange.kt @@ -0,0 +1,176 @@ +package com.flightfeather.uav.common.utils + +import com.alibaba.fastjson.JSONObject +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.text.SimpleDateFormat +import java.util.* + +class FileExchange { + + companion object { + private const val TMP = "65536" + private const val SPCOND = "65548" + private const val TUR = "65702" + private const val DO = "65542" + private const val PH = "65558" + + private val format = SimpleDateFormat("yyyy-MM-dd HH:mm:ss") + } + + fun doTask() { + //source + val path = "E:\\宸ヤ綔\\閲戝北璧拌埅\\MissionData.xls" + val workbook = HSSFWorkbook(FileInputStream(path)) + val sheet = workbook.getSheetAt(0) + + //target + val fileName = "鏃犱汉鑸规暟鎹�.xls" + val filePath = "e:/$fileName" + val out = FileOutputStream(File(filePath)) + + val heads = listOf("鏃堕棿", "缁忓害", "绾害", "Temperature(掳C)", "spCond(uS/cm)", "Turbidity(NTU)", "DO(mg/L)", "PH") + val contents = mutableListOf<Array<Any>>() + + val lastRow = mutableListOf<Any>() + 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 cList = mutableListOf<Any>() + //鏃堕棿 + val date = Date(time) + val d = format.format(date) + cList.add(d) + //缁忓害 + cList.add(lng) + cList.add(lat) + // + val jO = JSONObject.parseObject(value) + cList.add((jO[TMP] ?: "0").toString()) + cList.add((jO[SPCOND] ?: "0").toString()) + cList.add((jO[TUR] ?: "0").toString()) + cList.add((jO[DO] ?: "0").toString()) + cList.add((jO[PH] ?: "0").toString()) + +// if (lastRow.isEmpty()) { +// lastRow.addAll(cList) +// } else { +// for (i in cList.indices) { +// if (cList[i] == "") { +// cList[i] = lastRow[i] +// } +// } +// lastRow.clear() +// lastRow.addAll(cList) +// } + + contents.add(cList.toTypedArray()) + } + + + val newWorkBook = HSSFWorkbook() + ExcelUtil.write2(heads, contents, newWorkBook, "data") + + newWorkBook.write(out) + newWorkBook.close() + workbook.close() + out.flush() + out.close() + } + + fun doTask2() { + //source + val path = "E:\\宸ヤ綔\\閲戝北璧拌埅\\鏃犱汉鑸规暟鎹�-琛ュ厖绌虹櫧鍊�.xls" + val workbook = HSSFWorkbook(FileInputStream(path)) + val sheet = workbook.getSheetAt(0) + + //target + val fileName = "鏃犱汉鑸硅蛋鑸暟鎹�.xls" + val filePath = "e:/$fileName" + val out = FileOutputStream(File(filePath)) + + val heads = listOf("id", "device_code", "latitude", "longitude", "altitude", "height", "factors", "data_time", "create_time") + val contents = mutableListOf<Array<Any>>() + + for (i in 1..sheet.lastRowNum) { + val row = sheet.getRow(i) + val deviceCode = "0c" + val latitude = row.getCell(2).numericCellValue + val longitude = row.getCell(1).numericCellValue + val altitude = "" + val height = "" + val dataTime = row.getCell(0).stringCellValue + val createTime = dataTime + + val factorsList = mutableListOf<AirData>() + val tmp = row.getCell(3).numericCellValue + val spC = row.getCell(4).numericCellValue + val tur = row.getCell(5).numericCellValue + val dO = row.getCell(6).numericCellValue + val ph = row.getCell(7).numericCellValue + + 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() + val cList = mutableListOf<Any>() + cList.add("") + cList.add(deviceCode) + cList.add(latitude) + cList.add(longitude) + cList.add(altitude) + cList.add(height) + cList.add(factors) + cList.add(dataTime) + cList.add(createTime) + + contents.add(cList.toTypedArray()) + } + + val newWorkBook = HSSFWorkbook() + ExcelUtil.write2(heads, contents, newWorkBook, "data") + + newWorkBook.write(out) + newWorkBook.close() + workbook.close() + out.flush() + out.close() + } +} \ No newline at end of file diff --git a/src/main/kotlin/com/flightfeather/uav/domain/entity/Company.java b/src/main/kotlin/com/flightfeather/uav/domain/entity/Company.java new file mode 100644 index 0000000..11b103c --- /dev/null +++ b/src/main/kotlin/com/flightfeather/uav/domain/entity/Company.java @@ -0,0 +1,915 @@ +package com.flightfeather.uav.domain.entity; + +import com.fasterxml.jackson.annotation.JsonInclude; + +import javax.persistence.Column; +import javax.persistence.Id; +import javax.persistence.Table; +import java.math.BigDecimal; +import java.util.Date; + +@Table(name = "ea_companyinfo") +@JsonInclude(JsonInclude.Include.NON_NULL) +public class Company { + @Id + @Column(name = "CI_GUID") + private String ciGuid; + + /** + * 鍗曚綅鍚嶇О + */ + @Column(name = "CI_Name") + private String ciName; + + /** + * 涓昏浠庝簨涓氬姟 + */ + @Column(name = "CI_Main_Business") + private String ciMainBusiness; + + /** + * 鎵�灞為泦鍥� + */ + @Column(name = "CI_Member_Group") + private String ciMemberGroup; + + /** + * 鐪佷唤缂栫爜 + */ + @Column(name = "CI_Province_Code") + private String ciProvinceCode; + + /** + * 鐪佷唤鍚嶇О + */ + @Column(name = "CI_Province_Name") + private String ciProvinceName; + + /** + * 鍦板競缂栫爜 + */ + @Column(name = "CI_City_Code") + private String ciCityCode; + + /** + * 鍦板競鍚嶇О + */ + @Column(name = "CI_City_Name") + private String ciCityName; + + /** + * 鍖哄幙缂栧彿 + */ + @Column(name = "CI_District_Code") + private String ciDistrictCode; + + /** + * 鍖哄幙鍚嶇О + */ + @Column(name = "CI_District_Name") + private String ciDistrictName; + + /** + * 琛楅晣缂栫爜 + */ + @Column(name = "CI_Town_Code") + private String ciTownCode; + + /** + * 琛楅晣鍚嶇О + */ + @Column(name = "CI_Town_Name") + private String ciTownName; + + /** + * 鎵�鍦ㄥ伐涓氬尯 + */ + @Column(name = "CI_Ind_District") + private String ciIndDistrict; + + /** + * 鍗曚綅鍦板潃 + */ + @Column(name = "CI_Address") + private String ciAddress; + + /** + * 涓績缁忓害 + */ + @Column(name = "CI_Longitude") + private BigDecimal ciLongitude; + + /** + * 涓績绾害 + */ + @Column(name = "CI_Latitude") + private BigDecimal ciLatitude; + + /** + * 缁勭粐鏈烘瀯浠g爜 + */ + @Column(name = "CI_Org_Code") + private String ciOrgCode; + + /** + * 娉曚汉 + */ + @Column(name = "CI_Juridical_Person") + private String ciJuridicalPerson; + + /** + * 琛屼笟绫诲埆 + */ + @Column(name = "CI_Ind_Classification") + private String ciIndClassification; + + /** + * 琛屼笟浠g爜 + */ + @Column(name = "CI_Industry_Code") + private String ciIndustryCode; + + /** + * 鐧昏娉ㄥ唽绫诲瀷 + */ + @Column(name = "CI_Registration_Type") + private String ciRegistrationType; + + /** + * 娉ㄥ唽璧勬湰锛堜竾鍏冿級 + */ + @Column(name = "CI_Registered_Capital") + private Integer ciRegisteredCapital; + + /** + * 寤哄巶骞存湀 + */ + @Column(name = "CI_Build_Date") + private Date ciBuildDate; + + /** + * 鏈�鏂版敼鎵╁缓骞存湀 + */ + @Column(name = "CI_Expansion_Date") + private Date ciExpansionDate; + + /** + * 鑱屽伐浜烘暟 + */ + @Column(name = "CI_Workers_Number") + private Integer ciWorkersNumber; + + /** + * 浼佷笟瑙勬ā + */ + @Column(name = "CI_Scale") + private Byte ciScale; + + /** + * 鍘嗘鐜瘎瀹℃壒骞存湀 + */ + @Column(name = "CI_Eia_Approval_Date") + private String ciEiaApprovalDate; + + /** + * 鎺掓薄璁稿彲璇佺紪鍙� + */ + @Column(name = "CI_Plt_Permit_Code") + private String ciPltPermitCode; + + /** + * 鎺掓薄鏉冧氦鏄撴枃浠� + */ + @Column(name = "CI_Trading_Files") + private String ciTradingFiles; + + /** + * 閭斂缂栫爜 + */ + @Column(name = "CI_Postal_Code") + private String ciPostalCode; + + /** + * 鑱旂郴浜哄鍚� + */ + @Column(name = "CI_Contact_Name") + private String ciContactName; + + /** + * 鑱旂郴鐢佃瘽 + */ + @Column(name = "CI_Telephone") + private String ciTelephone; + + /** + * 鑱旂郴寰俊鍙� + */ + @Column(name = "CI_Contacts_WX") + private String ciContactsWx; + + /** + * 浼犵湡 + */ + @Column(name = "CI_Fax") + private String ciFax; + + /** + * 鐢靛瓙閭 + */ + @Column(name = "CI_Email") + private String ciEmail; + + @Column(name = "CI_Extension1") + private String ciExtension1; + + @Column(name = "CI_Extension2") + private String ciExtension2; + + @Column(name = "CI_Extension3") + private String ciExtension3; + + @Column(name = "CI_Remark") + private String ciRemark; + + /** + * @return CI_GUID + */ + public String getCiGuid() { + return ciGuid; + } + + /** + * @param ciGuid + */ + public void setCiGuid(String ciGuid) { + this.ciGuid = ciGuid == null ? null : ciGuid.trim(); + } + + /** + * 鑾峰彇鍗曚綅鍚嶇О + * + * @return CI_Name - 鍗曚綅鍚嶇О + */ + public String getCiName() { + return ciName; + } + + /** + * 璁剧疆鍗曚綅鍚嶇О + * + * @param ciName 鍗曚綅鍚嶇О + */ + public void setCiName(String ciName) { + this.ciName = ciName == null ? null : ciName.trim(); + } + + /** + * 鑾峰彇涓昏浠庝簨涓氬姟 + * + * @return CI_Main_Business - 涓昏浠庝簨涓氬姟 + */ + public String getCiMainBusiness() { + return ciMainBusiness; + } + + /** + * 璁剧疆涓昏浠庝簨涓氬姟 + * + * @param ciMainBusiness 涓昏浠庝簨涓氬姟 + */ + public void setCiMainBusiness(String ciMainBusiness) { + this.ciMainBusiness = ciMainBusiness == null ? null : ciMainBusiness.trim(); + } + + /** + * 鑾峰彇鎵�灞為泦鍥� + * + * @return CI_Member_Group - 鎵�灞為泦鍥� + */ + public String getCiMemberGroup() { + return ciMemberGroup; + } + + /** + * 璁剧疆鎵�灞為泦鍥� + * + * @param ciMemberGroup 鎵�灞為泦鍥� + */ + public void setCiMemberGroup(String ciMemberGroup) { + this.ciMemberGroup = ciMemberGroup == null ? null : ciMemberGroup.trim(); + } + + /** + * 鑾峰彇鐪佷唤缂栫爜 + * + * @return CI_Province_Code - 鐪佷唤缂栫爜 + */ + public String getCiProvinceCode() { + return ciProvinceCode; + } + + /** + * 璁剧疆鐪佷唤缂栫爜 + * + * @param ciProvinceCode 鐪佷唤缂栫爜 + */ + public void setCiProvinceCode(String ciProvinceCode) { + this.ciProvinceCode = ciProvinceCode == null ? null : ciProvinceCode.trim(); + } + + /** + * 鑾峰彇鐪佷唤鍚嶇О + * + * @return CI_Province_Name - 鐪佷唤鍚嶇О + */ + public String getCiProvinceName() { + return ciProvinceName; + } + + /** + * 璁剧疆鐪佷唤鍚嶇О + * + * @param ciProvinceName 鐪佷唤鍚嶇О + */ + public void setCiProvinceName(String ciProvinceName) { + this.ciProvinceName = ciProvinceName == null ? null : ciProvinceName.trim(); + } + + /** + * 鑾峰彇鍦板競缂栫爜 + * + * @return CI_City_Code - 鍦板競缂栫爜 + */ + public String getCiCityCode() { + return ciCityCode; + } + + /** + * 璁剧疆鍦板競缂栫爜 + * + * @param ciCityCode 鍦板競缂栫爜 + */ + public void setCiCityCode(String ciCityCode) { + this.ciCityCode = ciCityCode == null ? null : ciCityCode.trim(); + } + + /** + * 鑾峰彇鍦板競鍚嶇О + * + * @return CI_City_Name - 鍦板競鍚嶇О + */ + public String getCiCityName() { + return ciCityName; + } + + /** + * 璁剧疆鍦板競鍚嶇О + * + * @param ciCityName 鍦板競鍚嶇О + */ + public void setCiCityName(String ciCityName) { + this.ciCityName = ciCityName == null ? null : ciCityName.trim(); + } + + /** + * 鑾峰彇鍖哄幙缂栧彿 + * + * @return CI_District_Code - 鍖哄幙缂栧彿 + */ + public String getCiDistrictCode() { + return ciDistrictCode; + } + + /** + * 璁剧疆鍖哄幙缂栧彿 + * + * @param ciDistrictCode 鍖哄幙缂栧彿 + */ + public void setCiDistrictCode(String ciDistrictCode) { + this.ciDistrictCode = ciDistrictCode == null ? null : ciDistrictCode.trim(); + } + + /** + * 鑾峰彇鍖哄幙鍚嶇О + * + * @return CI_District_Name - 鍖哄幙鍚嶇О + */ + public String getCiDistrictName() { + return ciDistrictName; + } + + /** + * 璁剧疆鍖哄幙鍚嶇О + * + * @param ciDistrictName 鍖哄幙鍚嶇О + */ + public void setCiDistrictName(String ciDistrictName) { + this.ciDistrictName = ciDistrictName == null ? null : ciDistrictName.trim(); + } + + /** + * 鑾峰彇琛楅晣缂栫爜 + * + * @return CI_Town_Code - 琛楅晣缂栫爜 + */ + public String getCiTownCode() { + return ciTownCode; + } + + /** + * 璁剧疆琛楅晣缂栫爜 + * + * @param ciTownCode 琛楅晣缂栫爜 + */ + public void setCiTownCode(String ciTownCode) { + this.ciTownCode = ciTownCode == null ? null : ciTownCode.trim(); + } + + /** + * 鑾峰彇琛楅晣鍚嶇О + * + * @return CI_Town_Name - 琛楅晣鍚嶇О + */ + public String getCiTownName() { + return ciTownName; + } + + /** + * 璁剧疆琛楅晣鍚嶇О + * + * @param ciTownName 琛楅晣鍚嶇О + */ + public void setCiTownName(String ciTownName) { + this.ciTownName = ciTownName == null ? null : ciTownName.trim(); + } + + /** + * 鑾峰彇鎵�鍦ㄥ伐涓氬尯 + * + * @return CI_Ind_District - 鎵�鍦ㄥ伐涓氬尯 + */ + public String getCiIndDistrict() { + return ciIndDistrict; + } + + /** + * 璁剧疆鎵�鍦ㄥ伐涓氬尯 + * + * @param ciIndDistrict 鎵�鍦ㄥ伐涓氬尯 + */ + public void setCiIndDistrict(String ciIndDistrict) { + this.ciIndDistrict = ciIndDistrict == null ? null : ciIndDistrict.trim(); + } + + /** + * 鑾峰彇鍗曚綅鍦板潃 + * + * @return CI_Address - 鍗曚綅鍦板潃 + */ + public String getCiAddress() { + return ciAddress; + } + + /** + * 璁剧疆鍗曚綅鍦板潃 + * + * @param ciAddress 鍗曚綅鍦板潃 + */ + public void setCiAddress(String ciAddress) { + this.ciAddress = ciAddress == null ? null : ciAddress.trim(); + } + + /** + * 鑾峰彇涓績缁忓害 + * + * @return CI_Longitude - 涓績缁忓害 + */ + public BigDecimal getCiLongitude() { + return ciLongitude; + } + + /** + * 璁剧疆涓績缁忓害 + * + * @param ciLongitude 涓績缁忓害 + */ + public void setCiLongitude(BigDecimal ciLongitude) { + this.ciLongitude = ciLongitude; + } + + /** + * 鑾峰彇涓績绾害 + * + * @return CI_Latitude - 涓績绾害 + */ + public BigDecimal getCiLatitude() { + return ciLatitude; + } + + /** + * 璁剧疆涓績绾害 + * + * @param ciLatitude 涓績绾害 + */ + public void setCiLatitude(BigDecimal ciLatitude) { + this.ciLatitude = ciLatitude; + } + + /** + * 鑾峰彇缁勭粐鏈烘瀯浠g爜 + * + * @return CI_Org_Code - 缁勭粐鏈烘瀯浠g爜 + */ + public String getCiOrgCode() { + return ciOrgCode; + } + + /** + * 璁剧疆缁勭粐鏈烘瀯浠g爜 + * + * @param ciOrgCode 缁勭粐鏈烘瀯浠g爜 + */ + public void setCiOrgCode(String ciOrgCode) { + this.ciOrgCode = ciOrgCode == null ? null : ciOrgCode.trim(); + } + + /** + * 鑾峰彇娉曚汉 + * + * @return CI_Juridical_Person - 娉曚汉 + */ + public String getCiJuridicalPerson() { + return ciJuridicalPerson; + } + + /** + * 璁剧疆娉曚汉 + * + * @param ciJuridicalPerson 娉曚汉 + */ + public void setCiJuridicalPerson(String ciJuridicalPerson) { + this.ciJuridicalPerson = ciJuridicalPerson == null ? null : ciJuridicalPerson.trim(); + } + + /** + * 鑾峰彇琛屼笟绫诲埆 + * + * @return CI_Ind_Classification - 琛屼笟绫诲埆 + */ + public String getCiIndClassification() { + return ciIndClassification; + } + + /** + * 璁剧疆琛屼笟绫诲埆 + * + * @param ciIndClassification 琛屼笟绫诲埆 + */ + public void setCiIndClassification(String ciIndClassification) { + this.ciIndClassification = ciIndClassification == null ? null : ciIndClassification.trim(); + } + + /** + * 鑾峰彇琛屼笟浠g爜 + * + * @return CI_Industry_Code - 琛屼笟浠g爜 + */ + public String getCiIndustryCode() { + return ciIndustryCode; + } + + /** + * 璁剧疆琛屼笟浠g爜 + * + * @param ciIndustryCode 琛屼笟浠g爜 + */ + public void setCiIndustryCode(String ciIndustryCode) { + this.ciIndustryCode = ciIndustryCode == null ? null : ciIndustryCode.trim(); + } + + /** + * 鑾峰彇鐧昏娉ㄥ唽绫诲瀷 + * + * @return CI_Registration_Type - 鐧昏娉ㄥ唽绫诲瀷 + */ + public String getCiRegistrationType() { + return ciRegistrationType; + } + + /** + * 璁剧疆鐧昏娉ㄥ唽绫诲瀷 + * + * @param ciRegistrationType 鐧昏娉ㄥ唽绫诲瀷 + */ + public void setCiRegistrationType(String ciRegistrationType) { + this.ciRegistrationType = ciRegistrationType == null ? null : ciRegistrationType.trim(); + } + + /** + * 鑾峰彇娉ㄥ唽璧勬湰锛堜竾鍏冿級 + * + * @return CI_Registered_Capital - 娉ㄥ唽璧勬湰锛堜竾鍏冿級 + */ + public Integer getCiRegisteredCapital() { + return ciRegisteredCapital; + } + + /** + * 璁剧疆娉ㄥ唽璧勬湰锛堜竾鍏冿級 + * + * @param ciRegisteredCapital 娉ㄥ唽璧勬湰锛堜竾鍏冿級 + */ + public void setCiRegisteredCapital(Integer ciRegisteredCapital) { + this.ciRegisteredCapital = ciRegisteredCapital; + } + + /** + * 鑾峰彇寤哄巶骞存湀 + * + * @return CI_Build_Date - 寤哄巶骞存湀 + */ + public Date getCiBuildDate() { + return ciBuildDate; + } + + /** + * 璁剧疆寤哄巶骞存湀 + * + * @param ciBuildDate 寤哄巶骞存湀 + */ + public void setCiBuildDate(Date ciBuildDate) { + this.ciBuildDate = ciBuildDate; + } + + /** + * 鑾峰彇鏈�鏂版敼鎵╁缓骞存湀 + * + * @return CI_Expansion_Date - 鏈�鏂版敼鎵╁缓骞存湀 + */ + public Date getCiExpansionDate() { + return ciExpansionDate; + } + + /** + * 璁剧疆鏈�鏂版敼鎵╁缓骞存湀 + * + * @param ciExpansionDate 鏈�鏂版敼鎵╁缓骞存湀 + */ + public void setCiExpansionDate(Date ciExpansionDate) { + this.ciExpansionDate = ciExpansionDate; + } + + /** + * 鑾峰彇鑱屽伐浜烘暟 + * + * @return CI_Workers_Number - 鑱屽伐浜烘暟 + */ + public Integer getCiWorkersNumber() { + return ciWorkersNumber; + } + + /** + * 璁剧疆鑱屽伐浜烘暟 + * + * @param ciWorkersNumber 鑱屽伐浜烘暟 + */ + public void setCiWorkersNumber(Integer ciWorkersNumber) { + this.ciWorkersNumber = ciWorkersNumber; + } + + /** + * 鑾峰彇浼佷笟瑙勬ā + * + * @return CI_Scale - 浼佷笟瑙勬ā + */ + public Byte getCiScale() { + return ciScale; + } + + /** + * 璁剧疆浼佷笟瑙勬ā + * + * @param ciScale 浼佷笟瑙勬ā + */ + public void setCiScale(Byte ciScale) { + this.ciScale = ciScale; + } + + /** + * 鑾峰彇鍘嗘鐜瘎瀹℃壒骞存湀 + * + * @return CI_Eia_Approval_Date - 鍘嗘鐜瘎瀹℃壒骞存湀 + */ + public String getCiEiaApprovalDate() { + return ciEiaApprovalDate; + } + + /** + * 璁剧疆鍘嗘鐜瘎瀹℃壒骞存湀 + * + * @param ciEiaApprovalDate 鍘嗘鐜瘎瀹℃壒骞存湀 + */ + public void setCiEiaApprovalDate(String ciEiaApprovalDate) { + this.ciEiaApprovalDate = ciEiaApprovalDate == null ? null : ciEiaApprovalDate.trim(); + } + + /** + * 鑾峰彇鎺掓薄璁稿彲璇佺紪鍙� + * + * @return CI_Plt_Permit_Code - 鎺掓薄璁稿彲璇佺紪鍙� + */ + public String getCiPltPermitCode() { + return ciPltPermitCode; + } + + /** + * 璁剧疆鎺掓薄璁稿彲璇佺紪鍙� + * + * @param ciPltPermitCode 鎺掓薄璁稿彲璇佺紪鍙� + */ + public void setCiPltPermitCode(String ciPltPermitCode) { + this.ciPltPermitCode = ciPltPermitCode == null ? null : ciPltPermitCode.trim(); + } + + /** + * 鑾峰彇鎺掓薄鏉冧氦鏄撴枃浠� + * + * @return CI_Trading_Files - 鎺掓薄鏉冧氦鏄撴枃浠� + */ + public String getCiTradingFiles() { + return ciTradingFiles; + } + + /** + * 璁剧疆鎺掓薄鏉冧氦鏄撴枃浠� + * + * @param ciTradingFiles 鎺掓薄鏉冧氦鏄撴枃浠� + */ + public void setCiTradingFiles(String ciTradingFiles) { + this.ciTradingFiles = ciTradingFiles == null ? null : ciTradingFiles.trim(); + } + + /** + * 鑾峰彇閭斂缂栫爜 + * + * @return CI_Postal_Code - 閭斂缂栫爜 + */ + public String getCiPostalCode() { + return ciPostalCode; + } + + /** + * 璁剧疆閭斂缂栫爜 + * + * @param ciPostalCode 閭斂缂栫爜 + */ + public void setCiPostalCode(String ciPostalCode) { + this.ciPostalCode = ciPostalCode == null ? null : ciPostalCode.trim(); + } + + /** + * 鑾峰彇鑱旂郴浜哄鍚� + * + * @return CI_Contact_Name - 鑱旂郴浜哄鍚� + */ + public String getCiContactName() { + return ciContactName; + } + + /** + * 璁剧疆鑱旂郴浜哄鍚� + * + * @param ciContactName 鑱旂郴浜哄鍚� + */ + public void setCiContactName(String ciContactName) { + this.ciContactName = ciContactName == null ? null : ciContactName.trim(); + } + + /** + * 鑾峰彇鑱旂郴鐢佃瘽 + * + * @return CI_Telephone - 鑱旂郴鐢佃瘽 + */ + public String getCiTelephone() { + return ciTelephone; + } + + /** + * 璁剧疆鑱旂郴鐢佃瘽 + * + * @param ciTelephone 鑱旂郴鐢佃瘽 + */ + public void setCiTelephone(String ciTelephone) { + this.ciTelephone = ciTelephone == null ? null : ciTelephone.trim(); + } + + /** + * 鑾峰彇鑱旂郴寰俊鍙� + * + * @return CI_Contacts_WX - 鑱旂郴寰俊鍙� + */ + public String getCiContactsWx() { + return ciContactsWx; + } + + /** + * 璁剧疆鑱旂郴寰俊鍙� + * + * @param ciContactsWx 鑱旂郴寰俊鍙� + */ + public void setCiContactsWx(String ciContactsWx) { + this.ciContactsWx = ciContactsWx == null ? null : ciContactsWx.trim(); + } + + /** + * 鑾峰彇浼犵湡 + * + * @return CI_Fax - 浼犵湡 + */ + public String getCiFax() { + return ciFax; + } + + /** + * 璁剧疆浼犵湡 + * + * @param ciFax 浼犵湡 + */ + public void setCiFax(String ciFax) { + this.ciFax = ciFax == null ? null : ciFax.trim(); + } + + /** + * 鑾峰彇鐢靛瓙閭 + * + * @return CI_Email - 鐢靛瓙閭 + */ + public String getCiEmail() { + return ciEmail; + } + + /** + * 璁剧疆鐢靛瓙閭 + * + * @param ciEmail 鐢靛瓙閭 + */ + public void setCiEmail(String ciEmail) { + this.ciEmail = ciEmail == null ? null : ciEmail.trim(); + } + + /** + * @return CI_Extension1 + */ + public String getCiExtension1() { + return ciExtension1; + } + + /** + * @param ciExtension1 + */ + public void setCiExtension1(String ciExtension1) { + this.ciExtension1 = ciExtension1 == null ? null : ciExtension1.trim(); + } + + /** + * @return CI_Extension2 + */ + public String getCiExtension2() { + return ciExtension2; + } + + /** + * @param ciExtension2 + */ + public void setCiExtension2(String ciExtension2) { + this.ciExtension2 = ciExtension2 == null ? null : ciExtension2.trim(); + } + + /** + * @return CI_Extension3 + */ + public String getCiExtension3() { + return ciExtension3; + } + + /** + * @param ciExtension3 + */ + public void setCiExtension3(String ciExtension3) { + this.ciExtension3 = ciExtension3 == null ? null : ciExtension3.trim(); + } + + /** + * @return CI_Remark + */ + public String getCiRemark() { + return ciRemark; + } + + /** + * @param ciRemark + */ + public void setCiRemark(String ciRemark) { + this.ciRemark = ciRemark == null ? null : ciRemark.trim(); + } +} \ No newline at end of file diff --git a/src/main/kotlin/com/flightfeather/uav/domain/mapper/CompanyMapper.kt b/src/main/kotlin/com/flightfeather/uav/domain/mapper/CompanyMapper.kt new file mode 100644 index 0000000..55ca33d --- /dev/null +++ b/src/main/kotlin/com/flightfeather/uav/domain/mapper/CompanyMapper.kt @@ -0,0 +1,8 @@ +package com.flightfeather.uav.domain.mapper + +import com.flightfeather.uav.domain.MyMapper +import com.flightfeather.uav.domain.entity.Company +import org.apache.ibatis.annotations.Mapper + +@Mapper +interface CompanyMapper : MyMapper<Company> \ No newline at end of file diff --git a/src/main/kotlin/com/flightfeather/uav/lightshare/service/CompanyService.kt b/src/main/kotlin/com/flightfeather/uav/lightshare/service/CompanyService.kt new file mode 100644 index 0000000..8d4c723 --- /dev/null +++ b/src/main/kotlin/com/flightfeather/uav/lightshare/service/CompanyService.kt @@ -0,0 +1,10 @@ +package com.flightfeather.uav.lightshare.service + +import com.flightfeather.uav.domain.entity.Company +import com.flightfeather.uav.lightshare.bean.BaseResponse +import com.flightfeather.uav.lightshare.bean.DataVo + +interface CompanyService { + + fun getCompanyInfo(): BaseResponse<List<Company>> +} \ 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 d00d43c..85fb096 100644 --- a/src/main/kotlin/com/flightfeather/uav/lightshare/service/RealTimeDataService.kt +++ b/src/main/kotlin/com/flightfeather/uav/lightshare/service/RealTimeDataService.kt @@ -6,4 +6,6 @@ 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>> } \ No newline at end of file diff --git a/src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/CompanyServiceImpl.kt b/src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/CompanyServiceImpl.kt new file mode 100644 index 0000000..8e0c9af --- /dev/null +++ b/src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/CompanyServiceImpl.kt @@ -0,0 +1,16 @@ +package com.flightfeather.uav.lightshare.service.impl + +import com.flightfeather.uav.domain.entity.Company +import com.flightfeather.uav.domain.mapper.CompanyMapper +import com.flightfeather.uav.lightshare.bean.BaseResponse +import com.flightfeather.uav.lightshare.service.CompanyService +import org.springframework.stereotype.Service +import tk.mybatis.mapper.entity.Example + +@Service +class CompanyServiceImpl(private val companyMapper: CompanyMapper) : CompanyService { + override fun getCompanyInfo(): BaseResponse<List<Company>> { + val result = companyMapper.selectAll() + return BaseResponse(true, data = result) + } +} \ 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 0872846..a22bee6 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 @@ -32,7 +32,12 @@ sTime?.let { andGreaterThanOrEqualTo("dataTime", it) } eTime?.let { andLessThanOrEqualTo("dataTime", it) } } - orderBy("dataTime").desc() + orderBy("dataTime").apply { + // 褰撹姹傛帴鍙d笉浼犻�掕捣濮嬫椂闂达紝榛樿鑾峰彇鏈�鏂扮殑鏁版嵁 + if (startTime == null && endTime == null) { + desc() + } + } }).forEach { result.add(DataVo( dateFormatter.format(it.dataTime), @@ -41,7 +46,29 @@ it.longitude.toDouble(), it.latitude.toDouble() )) } -// result.reverse() + if (startTime == null && endTime == null) { + result.reverse() + } + return BaseResponse(true, head = DataHead(pageInfo.pageNum, pageInfo.pages), data = result) + } + + override fun getNextData(deviceCode: String, updateTime: String, page: Int?, perPage: Int?): BaseResponse<List<DataVo>> { + val _perPage = perPage ?: 60 + val _page = page ?: 1 + val pageInfo = PageHelper.startPage<RealTimeData>(_page, _perPage) + val result = mutableListOf<DataVo>() + realTimeDataMapper.selectByExample(Example(RealTimeData::class.java).apply { + createCriteria().andEqualTo("deviceCode", deviceCode) + .andGreaterThan("dataTime", updateTime) + orderBy("dataTime") + }).forEach { + result.add(DataVo( + dateFormatter.format(it.dataTime), + it.deviceCode, + GsonUtils.parserJsonToArrayBeans(it.factors, AirData::class.java), + it.longitude.toDouble(), it.latitude.toDouble() + )) + } return BaseResponse(true, head = DataHead(pageInfo.pageNum, pageInfo.pages), data = result) } } \ No newline at end of file diff --git a/src/main/kotlin/com/flightfeather/uav/lightshare/web/CompanyController.kt b/src/main/kotlin/com/flightfeather/uav/lightshare/web/CompanyController.kt new file mode 100644 index 0000000..e4c280e --- /dev/null +++ b/src/main/kotlin/com/flightfeather/uav/lightshare/web/CompanyController.kt @@ -0,0 +1,14 @@ +package com.flightfeather.uav.lightshare.web + +import com.flightfeather.uav.lightshare.service.CompanyService +import org.springframework.web.bind.annotation.GetMapping +import org.springframework.web.bind.annotation.RequestMapping +import org.springframework.web.bind.annotation.RestController + +@RestController +@RequestMapping("air/company") +class CompanyController(private val companyService: CompanyService) { + + @GetMapping("/info") + fun getCompanyInfo() = companyService.getCompanyInfo() +} 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 e491030..e97b121 100644 --- a/src/main/kotlin/com/flightfeather/uav/lightshare/web/RealTimeDataController.kt +++ b/src/main/kotlin/com/flightfeather/uav/lightshare/web/RealTimeDataController.kt @@ -18,4 +18,12 @@ @RequestParam(value = "page", required = false) page: Int?, @RequestParam(value = "perPage", required = false) perPage: Int? ) = realTimeDataService.getSecondData(deviceCode, startTime, endTime, page, perPage) + + @GetMapping("/sec/next") + fun getNextData( + @RequestParam(value = "deviceCode") deviceCode: String, + @RequestParam(value = "updateTime") updateTime: String, + @RequestParam(value = "page", required = false) page: Int?, + @RequestParam(value = "perPage", required = false) perPage: Int? + ) = realTimeDataService.getNextData(deviceCode, updateTime, page, perPage) } \ No newline at end of file diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 27d2245..be99472 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -1,9 +1,9 @@ spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver -# url: jdbc:mysql://47.100.191.150:3306/uav?serverTimezone=Asia/Shanghai&prepStmtCacheSize=517&cachePrepStmts=true&autoReconnect=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false -# username: uav -# password: obd2019 +# url: jdbc:mysql://192.168.0.200:3306/dronemonitor?serverTimezone=Asia/Shanghai&prepStmtCacheSize=517&cachePrepStmts=true&autoReconnect=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false +# username: root +# password: cn.FLIGHTFEATHER url: jdbc:mysql://localhost:3306/dronemonitor?serverTimezone=Asia/Shanghai&prepStmtCacheSize=517&cachePrepStmts=true&autoReconnect=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false username: dronemonitor diff --git a/src/test/kotlin/com/flightfeather/uav/Test.kt b/src/test/kotlin/com/flightfeather/uav/Test.kt index 9ab8a21..38e6067 100644 --- a/src/test/kotlin/com/flightfeather/uav/Test.kt +++ b/src/test/kotlin/com/flightfeather/uav/Test.kt @@ -1,5 +1,6 @@ package com.flightfeather.uav +import com.flightfeather.uav.common.utils.FileExchange import com.flightfeather.uav.socket.bean.DataUnit import com.flightfeather.uav.socket.decoder.AirDataDecoder import com.flightfeather.uav.socket.eunm.AirCommandUnit @@ -41,4 +42,9 @@ out.flush() out.close() } + + @Test + fun dataChange() { + FileExchange().doTask2() + } } \ No newline at end of file diff --git a/src/test/kotlin/com/flightfeather/uav/lightshare/service/impl/CompanyServiceImplTest.kt b/src/test/kotlin/com/flightfeather/uav/lightshare/service/impl/CompanyServiceImplTest.kt new file mode 100644 index 0000000..d0066ee --- /dev/null +++ b/src/test/kotlin/com/flightfeather/uav/lightshare/service/impl/CompanyServiceImplTest.kt @@ -0,0 +1,24 @@ +package com.flightfeather.uav.lightshare.service.impl + +import com.flightfeather.uav.lightshare.service.CompanyService +import org.junit.Test + +import org.junit.Assert.* +import org.junit.runner.RunWith +import org.springframework.beans.factory.annotation.Autowired +import org.springframework.boot.test.context.SpringBootTest +import org.springframework.test.context.junit4.SpringRunner + +@RunWith(SpringRunner::class) +@SpringBootTest +class CompanyServiceImplTest { + + @Autowired + lateinit var companyService: CompanyService + + @Test + fun getCompanyInfo() { + val r = companyService.getCompanyInfo() + println(r) + } +} \ No newline at end of file -- Gitblit v1.9.3