From cd6b8e49e59cc76f711616bb5b99119419e5d286 Mon Sep 17 00:00:00 2001 From: wanghao Date: Wed, 17 Sep 2025 14:30:53 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E9=9C=80=E6=B1=82=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/sql/20250916-应急资源.sql | 3 + .../anyan/model/vo/HealthRoomBaseVO.java | 12 + .../emergency/entity/LargeScreenData.java | 2 - .../renkang/emergency/entity/Resource.java | 17 +- .../com/renkang/emergency/entity/XjAed.java | 71 ++++ .../emergency/entity/vo/LoveTrendVO.java | 58 +++ .../emergency/controller/XjAedController.java | 25 ++ .../controller/LargeScreenNewController.java | 80 ++-- .../largeScreen/entity/vo/LargeScreenMap.java | 22 + .../service/ILargeScreenDataService.java | 4 + .../impl/LargeScreenDataServiceImpl.java | 47 ++- .../service/impl/LargeScreenServiceImpl.java | 15 +- .../renkang/emergency/mapper/XjAedMapper.java | 7 + .../emergency/service/IXjAedService.java | 9 + .../service/impl/XjAedServiceImpl.java | 128 ++++++ .../org/jeecg/untils/CoordinateConverter.java | 388 ++++++++++++++++++ .../controller/SysDepartController.java | 4 + .../system/service/ISysDepartService.java | 2 + .../service/impl/SysDepartServiceImpl.java | 141 +++++++ 19 files changed, 991 insertions(+), 44 deletions(-) create mode 100644 db/sql/20250916-应急资源.sql create mode 100644 health-emergency/health-emergency-api/src/main/java/com/renkang/emergency/entity/XjAed.java create mode 100644 health-emergency/health-emergency-api/src/main/java/com/renkang/emergency/entity/vo/LoveTrendVO.java create mode 100644 health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/controller/XjAedController.java create mode 100644 health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/mapper/XjAedMapper.java create mode 100644 health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/service/IXjAedService.java create mode 100644 health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/service/impl/XjAedServiceImpl.java create mode 100644 jeecg-system/jeecg-system-api/jeecg-system-cloud-api/src/main/java/org/jeecg/untils/CoordinateConverter.java diff --git a/db/sql/20250916-应急资源.sql b/db/sql/20250916-应急资源.sql new file mode 100644 index 0000000..b6ba27c --- /dev/null +++ b/db/sql/20250916-应急资源.sql @@ -0,0 +1,3 @@ +ALTER TABLE `emergency_resource` + ADD COLUMN `job_num` int NULL DEFAULT NULL COMMENT '在岗人数' AFTER `memo`, +ADD COLUMN `run_time` int NULL DEFAULT NULL COMMENT '运转时间(分钟)' AFTER `job_num`; \ No newline at end of file diff --git a/functional-modules/xj-anyan-api/src/main/java/com/renkang/anyan/model/vo/HealthRoomBaseVO.java b/functional-modules/xj-anyan-api/src/main/java/com/renkang/anyan/model/vo/HealthRoomBaseVO.java index 83bde18..b0183de 100644 --- a/functional-modules/xj-anyan-api/src/main/java/com/renkang/anyan/model/vo/HealthRoomBaseVO.java +++ b/functional-modules/xj-anyan-api/src/main/java/com/renkang/anyan/model/vo/HealthRoomBaseVO.java @@ -35,4 +35,16 @@ public class HealthRoomBaseVO { */ @Schema(title = "建设时间") private String buildDate; + + /** + * 在岗人数 + */ + @Schema(title = "在岗人数") + private Integer jobNum; + + /** + * 运转时间(分钟) + */ + @Schema(title = "运转时间(分钟)") + private Integer runTime; } diff --git a/health-emergency/health-emergency-api/src/main/java/com/renkang/emergency/entity/LargeScreenData.java b/health-emergency/health-emergency-api/src/main/java/com/renkang/emergency/entity/LargeScreenData.java index 878e567..447edea 100644 --- a/health-emergency/health-emergency-api/src/main/java/com/renkang/emergency/entity/LargeScreenData.java +++ b/health-emergency/health-emergency-api/src/main/java/com/renkang/emergency/entity/LargeScreenData.java @@ -96,6 +96,4 @@ public class LargeScreenData implements Serializable { this.name = dto.getName(); this.value = dto.getValue(); } - - } diff --git a/health-emergency/health-emergency-api/src/main/java/com/renkang/emergency/entity/Resource.java b/health-emergency/health-emergency-api/src/main/java/com/renkang/emergency/entity/Resource.java index ac5f129..bc9f213 100644 --- a/health-emergency/health-emergency-api/src/main/java/com/renkang/emergency/entity/Resource.java +++ b/health-emergency/health-emergency-api/src/main/java/com/renkang/emergency/entity/Resource.java @@ -70,9 +70,22 @@ public class Resource implements Serializable { /** * 资源类型(1:油田医院 3:健康小屋 5:救护车) 202508xj 项目字典发生变化 , 使用字典resource_type , */ - @Excel(name = "资源类型(1:油田医院 3:健康小屋 5:救护车)", width = 15) - @Schema(title = "资源类型(1:油田医院 3:健康小屋 5:救护车 )") + @Excel(name = "资源类型(1:油田医院 3:健康小屋 4:AED 5:救护车)", width = 15) + @Schema(title = "资源类型(1:油田医院 3:健康小屋 4:AED 5:救护车 )") private String type; + + /** + * 在岗人数 + */ + @Schema(title = "在岗人数") + private Integer jobNum; + + /** + * 运转时间(分钟) + */ + @Schema(title = "运转时间(分钟)") + private Integer runTime; + /** * 救治范围 */ diff --git a/health-emergency/health-emergency-api/src/main/java/com/renkang/emergency/entity/XjAed.java b/health-emergency/health-emergency-api/src/main/java/com/renkang/emergency/entity/XjAed.java new file mode 100644 index 0000000..ff6b10a --- /dev/null +++ b/health-emergency/health-emergency-api/src/main/java/com/renkang/emergency/entity/XjAed.java @@ -0,0 +1,71 @@ +package com.renkang.emergency.entity; + +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; + +@Data +@TableName("xj_aed") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +public class XjAed implements Serializable { + private static final long serialVersionUID = 1L; + + @TableId(type = IdType.ASSIGN_ID) + @Schema(title = "主键") + private String id; + + @Excel(name = "aed名称", width = 15) + @Schema(title = "aed名称") + private String name; + + @Excel(name = "设置地点", width = 15) + @Schema(title = "设置地点") + private String address; + + @Excel(name = "经度", width = 15) + @Schema(title = "经度(火星坐标系)") + private BigDecimal longitude; + + @Excel(name = "纬度", width = 15) + @Schema(title = "纬度(火星坐标系)") + private BigDecimal latitude; + + @Excel(name = "管理员姓名", width = 15) + @Schema(title = "管理员姓名") + private String manageName; + + @Excel(name = "管理员电话", width = 15) + @Schema(title = "管理员电话") + private String managePhone; + + @Schema(title = "orgCode") + private String orgCode; + + @Schema(title = "orgName") + @TableField(exist = false) + private String orgName; + + private Integer delFlag; + + private String createBy; + + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date createTime; + + private String updateBy; + + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date updateTime; +} diff --git a/health-emergency/health-emergency-api/src/main/java/com/renkang/emergency/entity/vo/LoveTrendVO.java b/health-emergency/health-emergency-api/src/main/java/com/renkang/emergency/entity/vo/LoveTrendVO.java new file mode 100644 index 0000000..8da682c --- /dev/null +++ b/health-emergency/health-emergency-api/src/main/java/com/renkang/emergency/entity/vo/LoveTrendVO.java @@ -0,0 +1,58 @@ +package com.renkang.emergency.entity.vo; + +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class LoveTrendVO { + private String id; + private String empId; + private String treatPlanResponse; + private String dietSuggestionResponse; + private String sportGuideResponse; + private String lifeManageResponse; + private String createDate; + private String updateDate; + private String createBy; + private String updateBy; + private String delFlag; + private String dataLevel; + private String negativeList; + private Integer flagFat; + private BigDecimal bmi; + private BigDecimal height; + private BigDecimal weight; + private BigDecimal bmiCurrent; + private String hypertension; + private String systolicPressureAvg; + private String systolicPressureTarget; + private String systolicPressureCurrent; + private String diastolicPressureAvg; + private String diastolicPressureTarget; + private String diastolicPressureCurrent; + private String diabetes; + private String glu; + private String bloodSugarTarget; + private String bloodSugarCurrent; + private String ldl; + private String ldlTarget; + private String ldlCurrent; + private String tc; + private String tcTarget; + private String tcCurrent; + private String tg; + private String tgTarget; + private String tgCurrent; + private String uricAcid; + private String uricAcidTarget; + private String uricAcidCurrent; + private String homocysteine; + private String homocysteineTarget; + private String homocysteineCurrent; + private String workUnit; + private String workUnitId; + private Integer age; + private String sex; + private String name; +} diff --git a/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/controller/XjAedController.java b/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/controller/XjAedController.java new file mode 100644 index 0000000..2a90945 --- /dev/null +++ b/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/controller/XjAedController.java @@ -0,0 +1,25 @@ +package com.renkang.emergency.controller; + +import com.renkang.emergency.entity.XjAed; +import com.renkang.emergency.service.IXjAedService; +import lombok.RequiredArgsConstructor; +import org.jeecg.common.system.base.controller.JeecgController; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/emergency/xjAed") +public class XjAedController extends JeecgController { + + private final IXjAedService xjAedService; + + /** + * 初始化新疆aed数据 + */ + @GetMapping("dataInit") + public void aedDataInit() { + xjAedService.aedDataInit(); + } +} diff --git a/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/largeScreen/controller/LargeScreenNewController.java b/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/largeScreen/controller/LargeScreenNewController.java index 8a851b2..ffea4b8 100644 --- a/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/largeScreen/controller/LargeScreenNewController.java +++ b/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/largeScreen/controller/LargeScreenNewController.java @@ -4,26 +4,19 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.renkang.anyan.model.dto.HealthRoomDTO; import com.renkang.anyan.model.dto.HealthSignListParam; import com.renkang.anyan.model.dto.MedicalAbnormalDTO; -import com.renkang.anyan.model.vo.BloodSugarClockSList; -import com.renkang.anyan.model.vo.HealthRoomBaseVO; -import com.renkang.anyan.model.vo.MedicalAbnormalVO; -import com.renkang.anyan.model.vo.WeightPressureList; -import com.renkang.anyan.model.vo.BloodPressureList; -import com.renkang.anyan.model.vo.MedicalPeopleNumStatisticsVO; -import com.renkang.anyan.model.vo.MedicalAbnormalStatisticsVO; -import com.renkang.emergency.entity.dto.MedicalCenterDTO; -import com.renkang.emergency.entity.dto.PhoneListDTO; -import com.renkang.emergency.entity.dto.ResourcesAllDTO; -import com.renkang.emergency.entity.dto.StatisticsDTO; -import com.renkang.emergency.entity.dto.UserHealthCenterDTO; -import com.renkang.emergency.largeScreen.entity.dto.HealthRoomBaseDTO; -import com.renkang.emergency.entity.dto.LargeScreenDataValueDTO; +import com.renkang.anyan.model.vo.*; +import com.renkang.emergency.entity.dto.*; import com.renkang.emergency.entity.vo.DataDetailVO; +import com.renkang.emergency.entity.vo.LoveTrendVO; import com.renkang.emergency.entity.vo.MedicalDataVO; +import com.renkang.emergency.largeScreen.entity.dto.HealthRoomBaseDTO; import com.renkang.emergency.largeScreen.entity.dto.HealthSignDTO; import com.renkang.emergency.largeScreen.entity.dto.MedicalAbnormalStatisticsDTO; import com.renkang.emergency.largeScreen.entity.dto.MedicalPeopleNumStatisticsDTO; -import com.renkang.emergency.largeScreen.entity.vo.*; +import com.renkang.emergency.largeScreen.entity.vo.HealthRoomVO; +import com.renkang.emergency.largeScreen.entity.vo.HealthSignVO; +import com.renkang.emergency.largeScreen.entity.vo.HospitalVO; +import com.renkang.emergency.largeScreen.entity.vo.LargeScreenMap; import com.renkang.emergency.largeScreen.service.ILargeScreenDataService; import com.renkang.emergency.largeScreen.service.ILargeScreenService; import com.renkang.emergency.service.ITbUserHelpMacService; @@ -54,11 +47,12 @@ public class LargeScreenNewController { /** * 获取地图 - * @param type 1:油田医院 2:健康小屋 5:救护车 不传则全部 + * + * @param type 1:油田医院 3:健康小屋 4:aed 5:救护车 不传则全部 * @return */ @GetMapping("/map") - public Result> map(@RequestParam(name = "type",required = false) String type) { + public Result> map(@RequestParam(name = "type", required = false) String type) { return Result.ok(largeScreenService.map(type)); } @@ -109,118 +103,121 @@ public class LargeScreenNewController { @PostMapping("/healthRoomBase") @Operation(summary = "健康小屋基础数据", description = "健康小屋基础数据") - public Result> healthRoomBase(@RequestBody HealthRoomBaseDTO dto){ + public Result> healthRoomBase(@RequestBody HealthRoomBaseDTO dto) { return Result.ok(largeScreenService.healthRoomBase(dto)); } @PostMapping("/healthRoomDetail") @Operation(summary = "健康小屋详情", description = "健康小屋详情") - public Result> healthRoomDetail(@RequestBody HealthRoomDTO dto){ + public Result> healthRoomDetail(@RequestBody HealthRoomDTO dto) { return Result.ok(largeScreenService.healthRoomDetail(dto)); } @PostMapping("/medicalAbnormal") @Operation(summary = "体检异常数据详情列表", description = "体检异常数据详情列表") - public Result> medicalAbnormal(@RequestBody MedicalAbnormalDTO dto){ + public Result> medicalAbnormal(@RequestBody MedicalAbnormalDTO dto) { return Result.ok(largeScreenService.medicalAbnormal(dto)); } @PostMapping("/healthWeightLoss") @Operation(summary = "健康打卡减重详情列表", description = "健康打卡减重详情列表") - public Result> healthWeightLoss(@RequestBody HealthSignListParam dto){ + public Result> healthWeightLoss(@RequestBody HealthSignListParam dto) { return Result.ok(largeScreenService.healthWeightLoss(dto)); } @PostMapping("/healthBloodSugar") @Operation(summary = "健康打卡血糖详情列表", description = "健康打卡血糖详情列表") - public Result> healthBloodSugar(@RequestBody HealthSignListParam dto){ + public Result> healthBloodSugar(@RequestBody HealthSignListParam dto) { return Result.ok(largeScreenService.healthBloodSugar(dto)); } @PostMapping("/healthBloodPressure") @Operation(summary = "健康打卡血压详情列表", description = "健康打卡血压详情列表") - public Result> healthBloodPressure(@RequestBody HealthSignListParam dto){ + public Result> healthBloodPressure(@RequestBody HealthSignListParam dto) { return Result.ok(largeScreenService.healthBloodPressure(dto)); } @PostMapping("/medicalPeopleNumStatistics") @Operation(summary = "体检人数统计", description = "体检人数统计") - public Result> medicalPeopleNumStatistics(@RequestBody MedicalPeopleNumStatisticsDTO dto){ + public Result> medicalPeopleNumStatistics(@RequestBody MedicalPeopleNumStatisticsDTO dto) { return Result.ok(largeScreenService.medicalPeopleNumStatistics(dto)); } @PostMapping("/medicalAbnormalStatistics") @Operation(summary = "体检异常数据统计", description = "体检异常数据统计") - public Result medicalAbnormalStatistics(@RequestBody MedicalAbnormalStatisticsDTO dto){ + public Result medicalAbnormalStatistics(@RequestBody MedicalAbnormalStatisticsDTO dto) { return Result.ok(largeScreenService.medicalAbnormalStatistics(dto)); } @PostMapping("/healthSign") @Operation(summary = "健康打卡数据", description = "健康打卡数据") - public Result healthSign(@RequestBody HealthSignDTO dto){ + public Result healthSign(@RequestBody HealthSignDTO dto) { return Result.ok(largeScreenService.healthSign(dto)); } @GetMapping("/hospital") @Operation(summary = "医院数据", description = "医院数据") - public Result> hospital(){ + public Result> hospital() { return Result.ok(largeScreenService.hospital()); } @GetMapping("runTest") @Operation(summary = "初始化假数据", description = "初始化假数据") - public void runTest(){ + public void runTest() { largeScreenService.runJob(); } /** * 编辑或新增 + * * @param dto * @return */ @PostMapping("editValue") - public Result editValue(@RequestBody LargeScreenDataValueDTO dto){ + public Result editValue(@RequestBody LargeScreenDataValueDTO dto) { return Result.ok(largeScreenDataService.editValue(dto)); } /** * 编辑整个tab + * * @param dto * @return */ @PostMapping("editData") - public Result editData(@RequestBody DataDetailVO dto){ + public Result editData(@RequestBody DataDetailVO dto) { return Result.ok(largeScreenDataService.editData(dto)); } /** * 删除 + * * @param dto * @return */ @DeleteMapping("deleteValue") - public Result deleteValue(@RequestBody LargeScreenDataValueDTO dto){ + public Result deleteValue(@RequestBody LargeScreenDataValueDTO dto) { return Result.ok(largeScreenDataService.deleteValue(dto)); } /** * 体检医院编辑新增删除 + * * @param dtoList * @return */ @PostMapping("editMedicalValue") - public Result editMedicalValue(@RequestBody List dtoList){ + public Result editMedicalValue(@RequestBody List dtoList) { return Result.ok(largeScreenDataService.editMedicalValue(dtoList)); } - /** * 假数据查询 */ @GetMapping("dataDetail") - public Result dataDetail(@RequestParam(name = "centerId") String centerId, @RequestParam(name = "module") String module){ - return Result.ok(largeScreenDataService.dataDetail(centerId,module)); + public Result dataDetail(@RequestParam(name = "centerId") String centerId, @RequestParam(name = "module") String module) { + return Result.ok(largeScreenDataService.dataDetail(centerId, module)); } @@ -228,8 +225,19 @@ public class LargeScreenNewController { * 假数据查询(体检人数) */ @GetMapping("medicalDataDetail") - public Result> medicalDataDetail(@RequestParam(name = "centerId") String centerId){ + public Result> medicalDataDetail(@RequestParam(name = "centerId") String centerId) { return Result.ok(largeScreenDataService.medicalDataDetail(centerId)); } + /** + * 假数据查询(关爱趋势) + */ + @GetMapping("loveTrend") + public Result> loveTrend(@RequestParam(name = "centerId") String centerId, + @RequestParam(name = "name", required = false) String name, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) { + return Result.ok(largeScreenDataService.loveTrend(centerId, name,pageNo,pageSize)); + } + } diff --git a/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/largeScreen/entity/vo/LargeScreenMap.java b/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/largeScreen/entity/vo/LargeScreenMap.java index 2187ded..6968eaf 100644 --- a/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/largeScreen/entity/vo/LargeScreenMap.java +++ b/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/largeScreen/entity/vo/LargeScreenMap.java @@ -2,6 +2,7 @@ package com.renkang.emergency.largeScreen.entity.vo; import com.renkang.emergency.entity.EmergencyHealthRoom; import com.renkang.emergency.entity.Resource; +import com.renkang.emergency.entity.XjAed; import lombok.Data; @Data @@ -20,6 +21,14 @@ public class LargeScreenMap { private String latitude; + private Integer jobNum; + + private Integer runTime; + + private String manageName; + + private String managePhone; + public LargeScreenMap() {} public LargeScreenMap(Resource resource) { @@ -29,6 +38,8 @@ public class LargeScreenMap { this.type = resource.getType(); this.latitude = String.valueOf(resource.getLatitude()); this.longitude = String.valueOf(resource.getLongitude()); + this.jobNum = resource.getJobNum(); + this.runTime = resource.getRunTime(); } public LargeScreenMap(EmergencyHealthRoom room) { @@ -39,4 +50,15 @@ public class LargeScreenMap { this.latitude = room.getLatitude(); this.longitude = room.getLongitude(); } + + public LargeScreenMap(XjAed xjAed) { + this.id = xjAed.getId(); + this.name = xjAed.getName(); + this.orgName = xjAed.getOrgCode(); + this.type = "4"; + this.latitude = String.valueOf(xjAed.getLatitude()); + this.longitude = String.valueOf(xjAed.getLongitude()); + this.manageName = xjAed.getManageName(); + this.managePhone = xjAed.getManagePhone(); + } } diff --git a/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/largeScreen/service/ILargeScreenDataService.java b/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/largeScreen/service/ILargeScreenDataService.java index 42212b3..cb40b77 100644 --- a/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/largeScreen/service/ILargeScreenDataService.java +++ b/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/largeScreen/service/ILargeScreenDataService.java @@ -1,9 +1,11 @@ package com.renkang.emergency.largeScreen.service; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; import com.renkang.emergency.entity.LargeScreenData; import com.renkang.emergency.entity.dto.LargeScreenDataValueDTO; import com.renkang.emergency.entity.vo.DataDetailVO; +import com.renkang.emergency.entity.vo.LoveTrendVO; import com.renkang.emergency.entity.vo.MedicalDataVO; import java.util.List; @@ -27,4 +29,6 @@ public interface ILargeScreenDataService extends IService { DataDetailVO dataDetail(String centerId, String module); List medicalDataDetail(String centerId); + + IPage loveTrend(String centerId, String name,Integer pageNo,Integer pageSize); } diff --git a/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/largeScreen/service/impl/LargeScreenDataServiceImpl.java b/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/largeScreen/service/impl/LargeScreenDataServiceImpl.java index cda0b54..e4ce4fb 100644 --- a/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/largeScreen/service/impl/LargeScreenDataServiceImpl.java +++ b/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/largeScreen/service/impl/LargeScreenDataServiceImpl.java @@ -2,22 +2,28 @@ package com.renkang.emergency.largeScreen.service.impl; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjUtil; +import cn.hutool.core.util.PageUtil; import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.renkang.emergency.entity.LargeScreenData; import com.renkang.emergency.entity.dto.LargeScreenDataValueDTO; import com.renkang.emergency.entity.vo.DataDetailVO; +import com.renkang.emergency.entity.vo.LoveTrendVO; import com.renkang.emergency.entity.vo.MedicalDataVO; import com.renkang.emergency.largeScreen.mapper.LargeScreenDataMapper; -import com.renkang.emergency.largeScreen.mapper.LargeScreenMapper; import com.renkang.emergency.largeScreen.service.ILargeScreenDataService; -import com.renkang.emergency.largeScreen.service.ILargeScreenService; import lombok.RequiredArgsConstructor; +import org.springframework.core.io.ClassPathResource; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.StreamUtils; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -389,4 +395,41 @@ public class LargeScreenDataServiceImpl extends ServiceImpl loveTrend(String centerId, String name, Integer pageNo, Integer pageSize) { + try { + ClassPathResource resource = new ClassPathResource("tempData/guanaiList.json"); + String jsonContent = StreamUtils.copyToString(resource.getInputStream(), StandardCharsets.UTF_8); + List loveTrendVOList = JSONUtil.toList(jsonContent, LoveTrendVO.class); + + if (CollUtil.isEmpty(loveTrendVOList)) { + return new Page<>(); + } + + // 根据 name 过滤 + if (StrUtil.isNotBlank(name)) { + loveTrendVOList = loveTrendVOList.stream() + .filter(vo -> vo.getName() != null && vo.getName().contains(name)) + .collect(Collectors.toList()); + } + + int total = loveTrendVOList.size(); + int[] startEnd = PageUtil.transToStartEnd(pageNo - 1, pageSize); + + // 确保不越界 + int start = Math.min(startEnd[0], total); + int end = Math.min(startEnd[1], total); + + List pageList = loveTrendVOList.subList(start, end); + + Page page = new Page<>(pageNo, pageSize, total); + page.setRecords(pageList); + return page; + + } catch (Exception e) { + e.printStackTrace(); + return new Page<>(); + } + } } diff --git a/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/largeScreen/service/impl/LargeScreenServiceImpl.java b/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/largeScreen/service/impl/LargeScreenServiceImpl.java index 3068b03..14a2fed 100644 --- a/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/largeScreen/service/impl/LargeScreenServiceImpl.java +++ b/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/largeScreen/service/impl/LargeScreenServiceImpl.java @@ -19,6 +19,7 @@ import com.renkang.anyan.model.vo.*; import com.renkang.emergency.entity.EmergencyCenter; import com.renkang.emergency.entity.EmergencyHealthRoom; import com.renkang.emergency.entity.Resource; +import com.renkang.emergency.entity.XjAed; import com.renkang.emergency.entity.vo.DataDetailVO; import com.renkang.emergency.entity.vo.MedicalDataVO; import com.renkang.emergency.largeScreen.entity.dto.HealthRoomBaseDTO; @@ -35,6 +36,7 @@ import com.renkang.emergency.largeScreen.service.ILargeScreenService; import com.renkang.emergency.service.IEmergencyCenterService; import com.renkang.emergency.service.IEmergencyHealthRoomService; import com.renkang.emergency.service.IResourceService; +import com.renkang.emergency.service.IXjAedService; import lombok.RequiredArgsConstructor; import org.jeecg.util.RedisClientUtil; import org.jeecg.util.RedisKeyPrefix; @@ -64,6 +66,7 @@ public class LargeScreenServiceImpl extends ServiceImpl list = roomService.list(); + if (StrUtil.isEmpty(type) || type.equals("3")) { + List list = resourceService.list(new LambdaQueryWrapper() + .eq(StrUtil.isNotEmpty(type), Resource::getType, type) + .eq(StrUtil.isEmpty(type), Resource::getType, "3")); + maps.addAll(list.stream().map(LargeScreenMap::new).collect(Collectors.toList())); + } + if (StrUtil.isEmpty(type) || type.equals("4")){ + List list = xjAedService.list(new LambdaQueryWrapper().isNotNull(XjAed::getLatitude)); maps.addAll(list.stream().map(LargeScreenMap::new).collect(Collectors.toList())); } if (StrUtil.isEmpty(type) || type.equals("5")) { @@ -515,6 +524,8 @@ public class LargeScreenServiceImpl extends ServiceImpl { +} diff --git a/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/service/IXjAedService.java b/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/service/IXjAedService.java new file mode 100644 index 0000000..cdd39a7 --- /dev/null +++ b/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/service/IXjAedService.java @@ -0,0 +1,9 @@ +package com.renkang.emergency.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.renkang.emergency.entity.XjAed; + +public interface IXjAedService extends IService { + + void aedDataInit(); +} diff --git a/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/service/impl/XjAedServiceImpl.java b/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/service/impl/XjAedServiceImpl.java new file mode 100644 index 0000000..610684e --- /dev/null +++ b/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/service/impl/XjAedServiceImpl.java @@ -0,0 +1,128 @@ +package com.renkang.emergency.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.renkang.emergency.entity.XjAed; +import com.renkang.emergency.mapper.XjAedMapper; +import com.renkang.emergency.service.IXjAedService; +import lombok.RequiredArgsConstructor; +import org.apache.poi.ss.usermodel.DateUtil; +import org.apache.poi.xssf.usermodel.XSSFCell; +import org.apache.poi.xssf.usermodel.XSSFRow; +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.jeecg.untils.CoordinateConverter; +import org.jeecg.util.TypeConversionUtil; +import org.springframework.stereotype.Service; + +import java.io.FileInputStream; +import java.io.IOException; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +@Service +@RequiredArgsConstructor +public class XjAedServiceImpl extends ServiceImpl implements IXjAedService { + + private final CoordinateConverter converter; + + @Override + public void aedDataInit() { + String filePath = "D:\\Project\\Java\\rk\\文档\\新疆油田-24\\各二级单位坐标位置更正统计9.15(2).xlsx"; + + try (FileInputStream file = new FileInputStream(filePath); + XSSFWorkbook workbook = new XSSFWorkbook(file)) { + + // 获取第一个工作表 + XSSFSheet sheet = workbook.getSheetAt(0); + List xjAedList = new ArrayList<>(); + // 从第二行开始(索引为1) + for (int i = 2; i <= sheet.getLastRowNum(); i++) { + XSSFRow row = sheet.getRow(i); + if (row != null) { + // 获取第一个单元格(索引0)的数据 设置地点 + XSSFCell firstCell = row.getCell(0); + String firstCellValue = firstCell != null ? getCellValue(firstCell) : "[空]"; + + // 获取第二个单元格(索引1)的数据 经度 + XSSFCell secondCell = row.getCell(1); + String secondCellValue = secondCell != null ? getCellValue(secondCell) : "[空]"; + + // 获取第三个单元格(索引1)的数据 纬度 + XSSFCell threeCell = row.getCell(2); + String threeCellValue = secondCell != null ? getCellValue(threeCell) : "[空]"; + if (firstCellValue.equals("滴12生活点会议室")){ + System.out.println(1); + } + XjAed xjAed = new XjAed(); + xjAed.setName("自动体外除颤仪"); + xjAed.setAddress(firstCellValue); + try { + String[] split = converter.run(secondCellValue + "-" + threeCellValue).split("-"); + CoordinateConverter.Gps gps = CoordinateConverter.GPS84ToGCJ02( + TypeConversionUtil.toDoubleOfNull(split[0]), TypeConversionUtil.toDoubleOfNull(split[1])); + if (gps != null) { + xjAed.setLongitude(BigDecimal.valueOf(gps.getLongitude())); + xjAed.setLatitude(BigDecimal.valueOf(gps.getLatitude())); + } + }catch (Exception e){ + e.printStackTrace(); + + } + xjAedList.add(xjAed); + } + } + // 过滤掉地点为空的数据 + xjAedList.removeIf(item -> { + String address = item.getAddress(); + return address == null || address.isEmpty() || "/".equals(address) || "无".equals(address);}); + this.saveBatch(xjAedList); + + } catch (IOException e) { + e.printStackTrace(); + System.out.println("读取Excel文件失败: " + e.getMessage()); + } + + } + + /** + * 获取单元格的值 + */ + private String getCellValue(XSSFCell cell) { + if (cell == null) { + return ""; + } + + switch (cell.getCellType()) { + case STRING: + return cell.getStringCellValue().trim(); + case NUMERIC: + if (DateUtil.isCellDateFormatted(cell)) { + return cell.getDateCellValue().toString(); + } else { + // 处理数字格式,避免科学计数法 + double numericValue = cell.getNumericCellValue(); + if (numericValue == Math.floor(numericValue)) { + // 如果是整数 + return String.valueOf((long) numericValue); + } else { + // 如果是小数 + return String.valueOf(numericValue); + } + } + case BOOLEAN: + return String.valueOf(cell.getBooleanCellValue()); + case FORMULA: + try { + return String.valueOf(cell.getNumericCellValue()); + } catch (Exception e) { + return cell.getStringCellValue().trim(); + } + case BLANK: + return ""; + default: + return ""; + } + } +} diff --git a/jeecg-system/jeecg-system-api/jeecg-system-cloud-api/src/main/java/org/jeecg/untils/CoordinateConverter.java b/jeecg-system/jeecg-system-api/jeecg-system-cloud-api/src/main/java/org/jeecg/untils/CoordinateConverter.java new file mode 100644 index 0000000..760a248 --- /dev/null +++ b/jeecg-system/jeecg-system-api/jeecg-system-cloud-api/src/main/java/org/jeecg/untils/CoordinateConverter.java @@ -0,0 +1,388 @@ +package org.jeecg.untils; + +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class CoordinateConverter { + + public static double pi = 3.1415926535897932384626; + public static double a = 6378140.0;//1975年国际椭球体长半轴 + public static double ee = 0.0033528131778969143;//1975年国际椭球体扁率 + + /** + * 将经纬度转换为度分秒格式或定位地图 + * @param xy 经纬度字符串,格式如 "116.404,39.915" + * @param mode 1-定位地图,其他值-转换为度分秒 + * @return 转换结果或错误信息 + */ + public String convertToDMS(String xy, int mode) { + xy = xy.replace("°", ""); // 删除度符号 + + if (!isValidCoordinate(xy)) { + return "经纬度错误!请对照检查:\n" + + "不能为空,且必须是数字;\n" + + "经度不能大于179,不能小于-179;\n" + + "纬度不能大于89,不能小于-89。"; + } + + if (mode == 1) { + String[] parts = xy.split(","); + double longitude = Double.parseDouble(parts[0]); + double latitude = Double.parseDouble(parts[1]); + // 这里调用地图定位功能 + return "已经定位!\n" + + "上述经纬度位于当前地图的中心点\"+\"处,请查阅。\n" + + "若图像不好,可换卫星图。"; + } else { + return "转换结果是:\n" + convertToDegreeMinuteSecond(xy); + } + } + + /** + * 检查是否是有效的经纬度 + */ + private boolean isValidCoordinate(String xy) { + String[] parts = xy.split(","); + if (parts.length != 2) { + return false; + } + + try { + double longitude = Double.parseDouble(parts[0]); + double latitude = Double.parseDouble(parts[1]); + + if (Math.abs(longitude) > 179 || Math.abs(latitude) > 89) { + return false; + } + return true; + } catch (NumberFormatException e) { + return false; + } + } + + /** + * 将十进制经纬度转换为度分秒格式 + */ + private String convertToDegreeMinuteSecond(String xy) { + String[] parts = xy.split(","); + double longitude = Double.parseDouble(parts[0]); + double latitude = Double.parseDouble(parts[1]); + + String longitudeDMS = decimalToDMS(longitude, true); + String latitudeDMS = decimalToDMS(latitude, false); + + return longitudeDMS + "," + latitudeDMS; + } + + /** + * 将十进制转换为度分秒 + * @param decimal 十进制值 + * @param isLongitude 是否是经度 + */ + private String decimalToDMS(double decimal, boolean isLongitude) { + String direction; + if (isLongitude) { + direction = decimal >= 0 ? "东经" : "西经"; + } else { + direction = decimal >= 0 ? "北纬" : "南纬"; + } + + decimal = Math.abs(decimal); + int degrees = (int) decimal; + double remaining = (decimal - degrees) * 60; + int minutes = (int) remaining; + double seconds = (remaining - minutes) * 60; + + return String.format("%s%d°%d'%.3f\"", direction, degrees, minutes, seconds); + } + + /** + * 将度分秒转换为经纬度或定位地图 + * @param dms 度分秒字符串,格式如 "东经116°23'14.000",北纬39°54'54.000" + * @param mode 1-定位地图,其他值-转换为经纬度 + * @param isWest 是否是西经 + * @param isSouth 是否是南纬 + * @return 转换结果或错误信息 + */ + public String convertToDecimal(String dms, int mode, boolean isWest, boolean isSouth) { + dms = dms.replace(",", "\",") + "\""; + + if (!isValidDMS(dms)) { + return "度°分'秒\"错误!请对照检查:\n" + + "度、分、秒不能为空,必须是数字,且不能是负数;\n" + + "经°不能大于179,纬°不能大于89;分、秒不能大于、等于60。"; + } + + String longitudePrefix = isWest ? "西经" : "东经"; + String latitudePrefix = isSouth ? "南纬" : "北纬"; + + String formattedDMS = longitudePrefix + dms.replace(",", "," + latitudePrefix); + String decimal = dmsToDecimal(formattedDMS); + + // 格式化小数位数 + String[] parts = decimal.split(","); + double longitude = Double.parseDouble(parts[0].replace("经度", "")); + double latitude = Double.parseDouble(parts[1].replace("纬度", "")); + + // 保留6位小数 + String formattedLongitude = String.format("%.6f", longitude); + String formattedLatitude = String.format("%.6f", latitude); + String formattedResult = formattedLongitude + "-" + formattedLatitude; + + if (mode == 1) { + // 这里调用地图定位功能 + return "已经定位!\n" + + "上述经纬度位于当前地图的中心点\"+\"处,请查阅。\n" + + "若图像不好,可换卫星图。"; + } else { + return formattedResult; + } + } + + /** + * 检查是否是有效的度分秒格式 + */ + private boolean isValidDMS(String dms) { + String[] parts = dms.split(","); + if (parts.length != 2) { + return false; + } + + try { + String longitude = parts[0]; + String latitude = parts[1]; + + String[] lonParts = longitude.split("[°'\"]"); + String[] latParts = latitude.split("[°'\"]"); + + if (lonParts.length < 3 || latParts.length < 3) { + return false; + } + + double lonDegrees = Double.parseDouble(lonParts[0]); + double lonMinutes = Double.parseDouble(lonParts[1]); + double lonSeconds = Double.parseDouble(lonParts[2]); + + double latDegrees = Double.parseDouble(latParts[0]); + double latMinutes = Double.parseDouble(latParts[1]); + double latSeconds = Double.parseDouble(latParts[2]); + + if (lonDegrees > 179 || lonDegrees < 0 || latDegrees > 89 || latDegrees < 0) { + return false; + } + + if (lonMinutes >= 60 || lonMinutes < 0 || lonSeconds >= 60 || lonSeconds < 0 || + latMinutes >= 60 || latMinutes < 0 || latSeconds >= 60 || latSeconds < 0) { + return false; + } + + return true; + } catch (NumberFormatException | ArrayIndexOutOfBoundsException e) { + return false; + } + } + + /** + * 将度分秒转换为十进制 + */ + private String dmsToDecimal(String dms) { + String[] parts = dms.split(","); + String longitude = parts[0]; + String latitude = parts[1]; + + double lonDecimal = parseDMS(longitude); + double latDecimal = parseDMS(latitude); + + // 直接返回未格式化的原始值,由convertToDecimal统一处理格式 + return lonDecimal + "," + latDecimal; + } + + /** + * 解析度分秒字符串为十进制 + */ + private double parseDMS(String dms) { + boolean isNegative = dms.startsWith("西经") || dms.startsWith("南纬"); + dms = dms.replaceAll("[东经西经北纬南纬]", ""); + + String[] parts = dms.split("[°'\"]"); + double degrees = Double.parseDouble(parts[0]); + double minutes = Double.parseDouble(parts[1]); + double seconds = Double.parseDouble(parts[2]); + + double decimal = degrees + minutes / 60 + seconds / 3600; + return isNegative ? -decimal : decimal; + } + + /** + * 批量转换度分秒坐标为十进制度坐标 + * @param coordinates 坐标数组,每个元素格式为 "东经E:84°52′15.564″ 北纬N:45°35′53.948″" + * @return 转换结果列表 + */ + public List batchConvertToDecimal(String[] coordinates) { + List results = new ArrayList<>(); + + for (int i = 0; i < coordinates.length; i++) { + try { + String coord = coordinates[i]; + // 分割经度和纬度 + String[] parts = coord.split("\t"); + if (parts.length < 2) { + parts = coord.split("\\s+"); + } + + if (parts.length >= 2) { + String dj = parts[0].trim(); + String bw = parts[1].trim(); + + // 清洗数据格式 + String cleanDj = cleanCoordinateString(dj, true); + String cleanBw = cleanCoordinateString(bw, false); + + // 组合成标准DMS格式 + String dms = cleanDj + "," + cleanBw; + + // 转换并添加到结果列表 + String result = convertToDecimal(dms, 0, false, false); + results.add((i + 1) + ". " + result.replace("转换结果是:\n", "")); + } else { + results.add((i + 1) + ". 格式错误: " + coord); + } + } catch (Exception e) { + results.add((i + 1) + ". 转换失败: " + coordinates[i] + " - 错误: " + e.getMessage()); + } + } + + return results; + } + + /** + * 清洗坐标字符串 + */ + private String cleanCoordinateString(String coord, boolean isLongitude) { + // 替换各种符号为统一格式 + String cleaned = coord.replace(":", ":") + .replace("′", "'") + .replace("″", "\"") + .replace("‘", "'") + .replace("'", "'") + .replace("\"", "\"") + .replace(" ", ""); + + // 移除前缀 + if (isLongitude) { + cleaned = cleaned.replaceAll("[东经E]", ""); + } else { + cleaned = cleaned.replaceAll("[北纬N]", ""); + } + + // 移除冒号 + cleaned = cleaned.replace(":", "").trim(); + + return cleaned; + } + + public String run(String msg){ + String[] split = msg.split("-"); + String dj = split[0]; + String bw = split[1]; + String cleanDj = dj.replace(":", ":") + .replace("′", "'") + .replace("″", "\"") + .replaceAll("[东经E]", "") + .replaceAll("[东经N]", "") + .replace(":", "").trim(); + String cleanBw = bw.replace(":", ":") + .replace("′", "'") + .replace("″", "\"") + .replaceAll("[北纬N]", "") + .replaceAll("[北纬E]", "") + .replace(":", "").trim(); + String dms = cleanDj + "," + cleanBw; + return convertToDecimal(dms, 0, false, false); + } + + + public static Gps GPS84ToGCJ02(double lon, double lat) { + if (outOfChina(lon, lat)) { + return null; + } + double dLat = transformLat(lon - 105.0, lat - 35.0); + double dLon = transformLon(lon - 105.0, lat - 35.0); + double radLat = lat / 180.0 * pi; + double magic = Math.sin(radLat); + magic = 1 - ee * magic * magic; + double sqrtMagic = Math.sqrt(magic); + dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi); + dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi); + double mgLat = lat + dLat; + double mgLon = lon + dLon; + return new Gps(mgLon, mgLat); + } + + private static boolean outOfChina(double lon, double lat) { + if (lon < 72.004 || lon > 137.8347) + return true; + return lat < 0.8293 || lat > 55.8271; + } + + private static double transformLat(double x, double y) { + double ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + + 0.2 * Math.sqrt(Math.abs(x)); + ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0; + ret += (20.0 * Math.sin(y * pi) + 40.0 * Math.sin(y / 3.0 * pi)) * 2.0 / 3.0; + ret += (160.0 * Math.sin(y / 12.0 * pi) + 320 * Math.sin(y * pi / 30.0)) * 2.0 / 3.0; + return ret; + } + + private static double transformLon(double x, double y) { + double ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 + * Math.sqrt(Math.abs(x)); + ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0; + ret += (20.0 * Math.sin(x * pi) + 40.0 * Math.sin(x / 3.0 * pi)) * 2.0 / 3.0; + ret += (150.0 * Math.sin(x / 12.0 * pi) + 300.0 * Math.sin(x / 30.0 + * pi)) * 2.0 / 3.0; + return ret; + } + + public static class Gps { + private String id; + private double longitude; + private double latitude; + + public Gps(double lon, double lat) { + this.longitude = lon; + this.latitude = lat; + } + + public Gps() { + + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public double getLongitude() { + return longitude; + } + + public void setLongitude(double longitude) { + this.longitude = longitude; + } + + public double getLatitude() { + return latitude; + } + + public void setLatitude(double latitude) { + this.latitude = latitude; + } + } +} diff --git a/jeecg-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysDepartController.java b/jeecg-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysDepartController.java index 795e2de..3002123 100644 --- a/jeecg-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysDepartController.java +++ b/jeecg-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysDepartController.java @@ -913,4 +913,8 @@ public class SysDepartController { return sysDepartService.queryDepartNameByOrgCodes(orgCodeSet); } + @GetMapping("/departDataInit") + public void departDataInit(){ + sysDepartService.departDataInit(); + } } diff --git a/jeecg-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/ISysDepartService.java b/jeecg-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/ISysDepartService.java index 33a9853..bdf55ad 100644 --- a/jeecg-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/ISysDepartService.java +++ b/jeecg-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/ISysDepartService.java @@ -264,4 +264,6 @@ public interface ISysDepartService extends IService { List queryUserByOrgCode(String orgCode); Map queryDepartNameByOrgCodes(Set orgCodeSet); + + void departDataInit(); } diff --git a/jeecg-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysDepartServiceImpl.java b/jeecg-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysDepartServiceImpl.java index 90654df..6178f2c 100644 --- a/jeecg-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysDepartServiceImpl.java +++ b/jeecg-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysDepartServiceImpl.java @@ -15,6 +15,11 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import io.netty.util.internal.StringUtil; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang.StringUtils; +import org.apache.poi.ss.usermodel.DateUtil; +import org.apache.poi.xssf.usermodel.XSSFCell; +import org.apache.poi.xssf.usermodel.XSSFRow; +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.shiro.SecurityUtils; import org.jeecg.common.config.TenantContext; import org.jeecg.common.constant.CommonConstant; @@ -38,11 +43,14 @@ import org.jeecg.modules.system.manager.UserCacheManager; import org.jeecg.modules.system.mapper.*; import org.jeecg.modules.system.model.DepartIdModel; import org.jeecg.modules.system.service.ISysDepartService; +import org.jeecg.untils.CoordinateConverter; import org.jeecg.modules.system.util.FindsDepartsChildrenUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.io.FileInputStream; +import java.io.IOException; import java.util.*; import java.util.function.Consumer; import java.util.stream.Collectors; @@ -82,6 +90,8 @@ public class SysDepartServiceImpl extends ServiceImpl secondDeparts = departMapper + .selectList(new LambdaQueryWrapper().eq(SysDepart::getParentId, "1683768826307096578")); + // 二级单位名称分组 + Map secondMap = secondDeparts.stream() + .collect(Collectors.toMap(SysDepart::getDepartName, depart -> depart, (existing, replacement) -> existing)); + + // 获取目前的三级部门数据 + List threeDeparts = departMapper + .selectList(new LambdaQueryWrapper() + .in(SysDepart::getParentId, secondDeparts.stream().map(SysDepart::getId).collect(Collectors.toList()))); + // 三级部门名称分组 + Map threeMap = threeDeparts.stream() + .collect(Collectors.toMap(SysDepart::getDepartName, depart -> depart, (existing, replacement) -> existing)); + + // 获取目前的四级部门数据 + List fourDeparts = departMapper + .selectList(new LambdaQueryWrapper() + .in(SysDepart::getParentId, threeDeparts.stream().map(SysDepart::getId).collect(Collectors.toList()))); + // 三级部门名称分组 + Map fourMap = fourDeparts.stream() + .collect(Collectors.toMap(SysDepart::getDepartName, depart -> depart, (existing, replacement) -> existing)); + + List secondDepartList = new ArrayList<>(); + + List threeDepartList = new ArrayList<>(); + + List fourDepartList = new ArrayList<>(); + + try (FileInputStream file = new FileInputStream(filePath); + XSSFWorkbook workbook = new XSSFWorkbook(file)) { + + // 获取第一个工作表 + XSSFSheet sheet = workbook.getSheetAt(0); + + // 从第二行开始(索引为1) + for (int i = 2; i <= sheet.getLastRowNum(); i++) { + XSSFRow row = sheet.getRow(i); + if (row != null) { + // 获取第一个单元格(索引0)的数据 二级单位名称 + XSSFCell firstCell = row.getCell(0); + String firstCellValue = firstCell != null ? getCellValue(firstCell) : "[空]"; + + // 获取第二个单元格(索引1)的数据 三级部门名称 + XSSFCell secondCell = row.getCell(1); + String secondCellValue = secondCell != null ? getCellValue(secondCell) : "[空]"; + + // 获取第三个单元格(索引1)的数据 经度 + XSSFCell threeCell = row.getCell(2); + String threeCellValue = secondCell != null ? getCellValue(threeCell) : "[空]"; + + // 获取第四个单元格(索引1)的数据 经度 + XSSFCell fourCell = row.getCell(3); + String fourCellValue = secondCell != null ? getCellValue(fourCell) : "[空]"; + + if (StrUtil.isNotBlank(firstCellValue)) { + SysDepart depart = secondMap.get(firstCellValue); + if (depart == null) { + // 现有不存在 需添加 + SysDepart newDepart = new SysDepart(); + newDepart.setDepartName(firstCellValue); + newDepart.setParentId("1683768826307096578"); + newDepart.setOrgCategory("2"); + newDepart.setOrgType("2"); + this.saveDepartData(newDepart,GlobalUtils.getLoginUser().getUsername()); + if (null != newDepart.getId()){ + SysDepartGps departGps = new SysDepartGps(); + departGps.setDepartId(newDepart.getId()); + String run = converter.run(threeCellValue + "-" + fourCellValue); + System.out.println(run); +// // 经度 +// departGps.setLng(); +// // 纬度 +// departGps.setLat(); + + } + } + } + } + } + + } catch (IOException e) { + e.printStackTrace(); + System.out.println("读取Excel文件失败: " + e.getMessage()); + } + + } + + /** + * 获取单元格的值 + */ + private String getCellValue(XSSFCell cell) { + if (cell == null) { + return ""; + } + + switch (cell.getCellType()) { + case STRING: + return cell.getStringCellValue().trim(); + case NUMERIC: + if (DateUtil.isCellDateFormatted(cell)) { + return cell.getDateCellValue().toString(); + } else { + // 处理数字格式,避免科学计数法 + double numericValue = cell.getNumericCellValue(); + if (numericValue == Math.floor(numericValue)) { + // 如果是整数 + return String.valueOf((long) numericValue); + } else { + // 如果是小数 + return String.valueOf(numericValue); + } + } + case BOOLEAN: + return String.valueOf(cell.getBooleanCellValue()); + case FORMULA: + try { + return String.valueOf(cell.getNumericCellValue()); + } catch (Exception e) { + return cell.getStringCellValue().trim(); + } + case BLANK: + return ""; + default: + return ""; + } + } }