Compare commits
10 Commits
02d71d6bfb
...
c9ef3a8bbb
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c9ef3a8bbb | ||
|
|
64bb5cdc8a | ||
|
|
153f376268 | ||
|
|
d73b86c794 | ||
|
|
e6cb5601c6 | ||
|
|
91dcfd73c1 | ||
|
|
d27757f9dc | ||
|
|
cb9781f6f1 | ||
|
|
e430062aa5 | ||
|
|
c99967d0b9 |
@@ -138,6 +138,13 @@ public class DeviceInfoController {
|
|||||||
@Operation(summary = "获得设备信息分页")
|
@Operation(summary = "获得设备信息分页")
|
||||||
public CommonResult<PageResult<DeviceInfoPageV2RespVO>> getDeviceInfoPage(@Valid DeviceInfoPageV2ReqVO pageReqVO) {
|
public CommonResult<PageResult<DeviceInfoPageV2RespVO>> getDeviceInfoPage(@Valid DeviceInfoPageV2ReqVO pageReqVO) {
|
||||||
|
|
||||||
|
Map<String, String> typeNameMap = deviceClassifyService.getTypeNameMap();
|
||||||
|
Map<String, String> typeCodeMap = deviceClassifyService.getTypeCodeMap();
|
||||||
|
Map<String, String> imageMap = deviceClassifyService.getImageMap();
|
||||||
|
// Map<String, String> basePointMap = baseInfoService.getBasePointMap();
|
||||||
|
Map<String, String> plotPointMap = plotInfoService.getPlotPointMap();
|
||||||
|
|
||||||
|
|
||||||
DeviceInfoPageReqVO targetObj = new DeviceInfoPageReqVO();
|
DeviceInfoPageReqVO targetObj = new DeviceInfoPageReqVO();
|
||||||
targetObj.setPageSize(100);
|
targetObj.setPageSize(100);
|
||||||
targetObj.setBaseId(pageReqVO.getBaseId());
|
targetObj.setBaseId(pageReqVO.getBaseId());
|
||||||
@@ -151,14 +158,11 @@ public class DeviceInfoController {
|
|||||||
for (DeviceInfoPageV2RespVO d : deviceInfoRespVOPageResult.getList()) {
|
for (DeviceInfoPageV2RespVO d : deviceInfoRespVOPageResult.getList()) {
|
||||||
|
|
||||||
if (!StringUtils.isEmpty(d.getBaseId()) && !StringUtils.isEmpty(d.getBaseId())) {
|
if (!StringUtils.isEmpty(d.getBaseId()) && !StringUtils.isEmpty(d.getBaseId())) {
|
||||||
BaseInfoDO b = baseInfoService.getBaseInfo(d.getBaseId());
|
// d.setBasePoint(basePointMap.get(d.getBaseId()));
|
||||||
PlotInfoDO p = plotInfoService.getPlotInfo(d.getPlotId());
|
d.setPlotPoint(plotPointMap.get(d.getPlotId()));
|
||||||
d.setBasePoint(b.getPoint());
|
|
||||||
d.setPlotPoint(p.getPoint());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Map<String, String> typeNameMap = deviceClassifyService.getTypeNameMap();
|
d.setImage(imageMap.get(d.getDeviceType()));
|
||||||
Map<String, String> typeCodeMap = deviceClassifyService.getTypeCodeMap();
|
|
||||||
d.setDeviceTypeName(typeNameMap.get(d.getDeviceType()));
|
d.setDeviceTypeName(typeNameMap.get(d.getDeviceType()));
|
||||||
d.setDeviceTypeCode(typeCodeMap.get(d.getDeviceType()));
|
d.setDeviceTypeCode(typeCodeMap.get(d.getDeviceType()));
|
||||||
d.setDeviceStateName(DEVICE_STATE_MAP.get(d.getDeviceState()));
|
d.setDeviceStateName(DEVICE_STATE_MAP.get(d.getDeviceState()));
|
||||||
|
|||||||
@@ -1,204 +0,0 @@
|
|||||||
package cn.iocoder.yudao.module.farm.controller.admin.devicestatus;
|
|
||||||
|
|
||||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
|
||||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
|
||||||
import cn.iocoder.yudao.module.farm.controller.admin.devicestatus.vo.DeviceStatusRespVO;
|
|
||||||
import cn.iocoder.yudao.module.farm.controller.admin.devicestatus.vo.DeviceStatusStatisticsRespVO;
|
|
||||||
import cn.iocoder.yudao.module.farm.dal.dataobject.deviceinfo.DeviceInfoDO;
|
|
||||||
import cn.iocoder.yudao.module.farm.dal.mysql.deviceinfo.DeviceInfoMapper;
|
|
||||||
import cn.iocoder.yudao.module.farm.enums.DeviceStateEnum;
|
|
||||||
import cn.iocoder.yudao.module.farm.service.devicestatus.DeviceStatusService;
|
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
|
||||||
import io.swagger.v3.oas.annotations.Parameter;
|
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
|
||||||
import jakarta.annotation.Resource;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
|
||||||
import org.springframework.security.access.prepost.PreAuthorize;
|
|
||||||
import org.springframework.validation.annotation.Validated;
|
|
||||||
import org.springframework.web.bind.annotation.*;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
|
||||||
|
|
||||||
//@Tag(name = "管理后台 - 设备状态管理")
|
|
||||||
//@RestController
|
|
||||||
//@RequestMapping("/farm/device-status")
|
|
||||||
//@Validated
|
|
||||||
//@Slf4j
|
|
||||||
public class DeviceStatusController {
|
|
||||||
//
|
|
||||||
// @Resource
|
|
||||||
// private DeviceStatusService deviceStatusService;
|
|
||||||
//
|
|
||||||
// @Resource
|
|
||||||
// private DeviceInfoMapper deviceInfoMapper;
|
|
||||||
//
|
|
||||||
// @GetMapping("/check/{deviceUniqueId}")
|
|
||||||
// @Operation(summary = "检查设备是否在线")
|
|
||||||
// @Parameter(name = "deviceUniqueId", description = "设备唯一标识", required = true, example = "2409AA01")
|
|
||||||
// @PreAuthorize("@ss.hasPermission('farm:device-status:query')")
|
|
||||||
// public CommonResult<Boolean> checkDeviceOnline(@PathVariable("deviceUniqueId") String deviceUniqueId) {
|
|
||||||
// boolean online = deviceStatusService.isDeviceOnline(deviceUniqueId);
|
|
||||||
// return success(online);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// @GetMapping("/state/{deviceUniqueId}")
|
|
||||||
// @Operation(summary = "获取设备状态")
|
|
||||||
// @Parameter(name = "deviceUniqueId", description = "设备唯一标识", required = true, example = "2409AA01")
|
|
||||||
// @PreAuthorize("@ss.hasPermission('farm:device-status:query')")
|
|
||||||
// public CommonResult<DeviceStatusRespVO> getDeviceStatus(@PathVariable("deviceUniqueId") String deviceUniqueId) {
|
|
||||||
// DeviceInfoDO device = deviceInfoMapper.selectOne(DeviceInfoDO::getDeviceUniqueId, deviceUniqueId);
|
|
||||||
// if (device == null) {
|
|
||||||
// return success(null);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// DeviceStatusRespVO respVO = BeanUtils.toBean(device, DeviceStatusRespVO.class);
|
|
||||||
// if (device.getDeviceState() != null) {
|
|
||||||
// DeviceStateEnum stateEnum = DeviceStateEnum.valueOf(device.getDeviceState());
|
|
||||||
// if (stateEnum != null) {
|
|
||||||
// respVO.setStateName(stateEnum.getName());
|
|
||||||
// respVO.setOnline(DeviceStateEnum.isOnline(device.getDeviceState()));
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// return success(respVO);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// @GetMapping("/online-devices")
|
|
||||||
// @Operation(summary = "获取在线设备列表")
|
|
||||||
// @PreAuthorize("@ss.hasPermission('farm:device-status:query')")
|
|
||||||
// public CommonResult<List<DeviceStatusRespVO>> getOnlineDevices() {
|
|
||||||
// List<DeviceInfoDO> devices = deviceStatusService.getOnlineDevices();
|
|
||||||
// List<DeviceStatusRespVO> respList = BeanUtils.toBean(devices, DeviceStatusRespVO.class);
|
|
||||||
//
|
|
||||||
// // 填充状态信息
|
|
||||||
// respList.forEach(resp -> {
|
|
||||||
// if (resp.getState() != null) {
|
|
||||||
// DeviceStateEnum stateEnum = DeviceStateEnum.valueOf(resp.getState());
|
|
||||||
// if (stateEnum != null) {
|
|
||||||
// resp.setStateName(stateEnum.getName());
|
|
||||||
// resp.setOnline(DeviceStateEnum.isOnline(resp.getState()));
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// });
|
|
||||||
//
|
|
||||||
// return success(respList);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// @GetMapping("/offline-devices")
|
|
||||||
// @Operation(summary = "获取离线设备列表")
|
|
||||||
// @PreAuthorize("@ss.hasPermission('farm:device-status:query')")
|
|
||||||
// public CommonResult<List<DeviceStatusRespVO>> getOfflineDevices() {
|
|
||||||
// List<DeviceInfoDO> devices = deviceStatusService.getOfflineDevices();
|
|
||||||
// List<DeviceStatusRespVO> respList = BeanUtils.toBean(devices, DeviceStatusRespVO.class);
|
|
||||||
//
|
|
||||||
// // 填充状态信息
|
|
||||||
// respList.forEach(resp -> {
|
|
||||||
// if (resp.getState() != null) {
|
|
||||||
// DeviceStateEnum stateEnum = DeviceStateEnum.valueOf(resp.getState());
|
|
||||||
// if (stateEnum != null) {
|
|
||||||
// resp.setStateName(stateEnum.getName());
|
|
||||||
// resp.setOnline(DeviceStateEnum.isOnline(resp.getState()));
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// });
|
|
||||||
//
|
|
||||||
// return success(respList);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// @GetMapping("/timeout-devices")
|
|
||||||
// @Operation(summary = "获取超时未上报的设备列表")
|
|
||||||
// @Parameter(name = "timeoutMinutes", description = "超时分钟数", required = false, example = "10")
|
|
||||||
// @PreAuthorize("@ss.hasPermission('farm:device-status:query')")
|
|
||||||
// public CommonResult<List<DeviceStatusRespVO>> getTimeoutDevices(
|
|
||||||
// @RequestParam(value = "timeoutMinutes", defaultValue = "10") int timeoutMinutes) {
|
|
||||||
// List<DeviceInfoDO> devices = deviceStatusService.getTimeoutDevices(timeoutMinutes);
|
|
||||||
// List<DeviceStatusRespVO> respList = BeanUtils.toBean(devices, DeviceStatusRespVO.class);
|
|
||||||
//
|
|
||||||
// // 填充状态信息
|
|
||||||
// respList.forEach(resp -> {
|
|
||||||
// if (resp.getState() != null) {
|
|
||||||
// DeviceStateEnum stateEnum = DeviceStateEnum.valueOf(resp.getState());
|
|
||||||
// if (stateEnum != null) {
|
|
||||||
// resp.setStateName(stateEnum.getName());
|
|
||||||
// resp.setOnline(DeviceStateEnum.isOnline(resp.getState()));
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// });
|
|
||||||
//
|
|
||||||
// return success(respList);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// @GetMapping("/statistics")
|
|
||||||
// @Operation(summary = "获取设备状态统计")
|
|
||||||
// @PreAuthorize("@ss.hasPermission('farm:device-status:query')")
|
|
||||||
// public CommonResult<DeviceStatusStatisticsRespVO> getDeviceStatusStatistics() {
|
|
||||||
// DeviceStatusStatisticsRespVO statistics = new DeviceStatusStatisticsRespVO();
|
|
||||||
//
|
|
||||||
// // 统计各状态设备数量
|
|
||||||
// Long totalCount = deviceInfoMapper.selectCount();
|
|
||||||
// Long onlineCount = deviceInfoMapper.selectCountByState(DeviceStateEnum.ONLINE.getState());
|
|
||||||
// Long offlineCount = deviceInfoMapper.selectCountByState(DeviceStateEnum.OFFLINE.getState());
|
|
||||||
// Long inactiveCount = deviceInfoMapper.selectCountByState(DeviceStateEnum.INACTIVE.getState());
|
|
||||||
// Long maintenanceCount = deviceInfoMapper.selectCountByState(DeviceStateEnum.MAINTENANCE.getState());
|
|
||||||
// Long faultCount = deviceInfoMapper.selectCountByState(DeviceStateEnum.FAULT.getState());
|
|
||||||
//
|
|
||||||
// statistics.setTotalCount(totalCount);
|
|
||||||
// statistics.setOnlineCount(onlineCount != null ? onlineCount : 0L);
|
|
||||||
// statistics.setOfflineCount(offlineCount != null ? offlineCount : 0L);
|
|
||||||
// statistics.setInactiveCount(inactiveCount != null ? inactiveCount : 0L);
|
|
||||||
// statistics.setMaintenanceCount(maintenanceCount != null ? maintenanceCount : 0L);
|
|
||||||
// statistics.setFaultCount(faultCount != null ? faultCount : 0L);
|
|
||||||
//
|
|
||||||
// // 计算在线率和离线率
|
|
||||||
// if (totalCount > 0) {
|
|
||||||
// statistics.setOnlineRate((double) statistics.getOnlineCount() / totalCount * 100);
|
|
||||||
// statistics.setOfflineRate((double) statistics.getOfflineCount() / totalCount * 100);
|
|
||||||
// } else {
|
|
||||||
// statistics.setOnlineRate(0.0);
|
|
||||||
// statistics.setOfflineRate(0.0);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// return success(statistics);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// @PostMapping("/update-state/{deviceUniqueId}")
|
|
||||||
// @Operation(summary = "手动更新设备状态")
|
|
||||||
// @Parameter(name = "deviceUniqueId", description = "设备唯一标识", required = true, example = "2409AA01")
|
|
||||||
// @Parameter(name = "state", description = "设备状态", required = true, example = "1")
|
|
||||||
// @PreAuthorize("@ss.hasPermission('farm:device-status:update')")
|
|
||||||
// public CommonResult<Boolean> updateDeviceState(
|
|
||||||
// @PathVariable("deviceUniqueId") String deviceUniqueId,
|
|
||||||
// @RequestParam("state") Integer state) {
|
|
||||||
// deviceStatusService.updateDeviceState(deviceUniqueId, state);
|
|
||||||
// return success(true);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// @PostMapping("/set-online/{deviceUniqueId}")
|
|
||||||
// @Operation(summary = "手动设置设备上线")
|
|
||||||
// @Parameter(name = "deviceUniqueId", description = "设备唯一标识", required = true, example = "2409AA01")
|
|
||||||
// @PreAuthorize("@ss.hasPermission('farm:device-status:update')")
|
|
||||||
// public CommonResult<Boolean> setDeviceOnline(@PathVariable("deviceUniqueId") String deviceUniqueId) {
|
|
||||||
// deviceStatusService.deviceOnline(deviceUniqueId);
|
|
||||||
// return success(true);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// @PostMapping("/set-offline/{deviceUniqueId}")
|
|
||||||
// @Operation(summary = "手动设置设备离线")
|
|
||||||
// @Parameter(name = "deviceUniqueId", description = "设备唯一标识", required = true, example = "2409AA01")
|
|
||||||
// @PreAuthorize("@ss.hasPermission('farm:device-status:update')")
|
|
||||||
// public CommonResult<Boolean> setDeviceOffline(@PathVariable("deviceUniqueId") String deviceUniqueId) {
|
|
||||||
// deviceStatusService.deviceOffline(deviceUniqueId);
|
|
||||||
// return success(true);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// @PostMapping("/check-offline")
|
|
||||||
// @Operation(summary = "手动检查离线设备")
|
|
||||||
// @Parameter(name = "timeoutMinutes", description = "超时分钟数", required = false, example = "10")
|
|
||||||
// @PreAuthorize("@ss.hasPermission('farm:device-status:update')")
|
|
||||||
// public CommonResult<Integer> checkOfflineDevices(
|
|
||||||
// @RequestParam(value = "timeoutMinutes", defaultValue = "10") int timeoutMinutes) {
|
|
||||||
// int count = deviceStatusService.checkAndUpdateOfflineDevices(timeoutMinutes);
|
|
||||||
// return success(count);
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
@@ -1,41 +0,0 @@
|
|||||||
package cn.iocoder.yudao.module.farm.controller.admin.devicestatus.vo;
|
|
||||||
|
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
|
||||||
import lombok.Data;
|
|
||||||
import lombok.EqualsAndHashCode;
|
|
||||||
import lombok.ToString;
|
|
||||||
import org.springframework.format.annotation.DateTimeFormat;
|
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
|
||||||
|
|
||||||
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
|
|
||||||
|
|
||||||
@Schema(description = "管理后台 - 设备状态分页 Request VO")
|
|
||||||
@Data
|
|
||||||
@EqualsAndHashCode(callSuper = true)
|
|
||||||
@ToString(callSuper = true)
|
|
||||||
public class DeviceStatusPageReqVO extends PageParam {
|
|
||||||
|
|
||||||
@Schema(description = "设备名称", example = "温湿度传感器")
|
|
||||||
private String deviceName;
|
|
||||||
|
|
||||||
@Schema(description = "设备状态", example = "1")
|
|
||||||
private Integer state;
|
|
||||||
|
|
||||||
@Schema(description = "设备分类名称", example = "传感器")
|
|
||||||
private String deviceCategoryName;
|
|
||||||
|
|
||||||
@Schema(description = "基地名称", example = "示范基地1")
|
|
||||||
private String baseName;
|
|
||||||
|
|
||||||
@Schema(description = "地块名称", example = "A1地块")
|
|
||||||
private String plotName;
|
|
||||||
|
|
||||||
@Schema(description = "是否在线", example = "true")
|
|
||||||
private Boolean online;
|
|
||||||
|
|
||||||
@Schema(description = "最后消息时间范围")
|
|
||||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
|
||||||
private LocalDateTime[] lastMessageTime;
|
|
||||||
}
|
|
||||||
@@ -1,47 +0,0 @@
|
|||||||
package cn.iocoder.yudao.module.farm.controller.admin.devicestatus.vo;
|
|
||||||
|
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
|
||||||
import lombok.Data;
|
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
|
||||||
|
|
||||||
@Schema(description = "管理后台 - 设备状态 Response VO")
|
|
||||||
@Data
|
|
||||||
public class DeviceStatusRespVO {
|
|
||||||
|
|
||||||
@Schema(description = "设备唯一标识", requiredMode = Schema.RequiredMode.REQUIRED, example = "2409AA01")
|
|
||||||
private String deviceUniqueId;
|
|
||||||
|
|
||||||
@Schema(description = "设备名称", example = "温湿度传感器1")
|
|
||||||
private String deviceName;
|
|
||||||
|
|
||||||
@Schema(description = "设备状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
|
|
||||||
private Integer state;
|
|
||||||
|
|
||||||
@Schema(description = "设备状态名称", example = "在线")
|
|
||||||
private String stateName;
|
|
||||||
|
|
||||||
@Schema(description = "是否在线", example = "true")
|
|
||||||
private Boolean online;
|
|
||||||
|
|
||||||
@Schema(description = "设备激活时间")
|
|
||||||
private LocalDateTime activeTime;
|
|
||||||
|
|
||||||
@Schema(description = "设备最后上线时间")
|
|
||||||
private LocalDateTime onlineTime;
|
|
||||||
|
|
||||||
@Schema(description = "设备最后离线时间")
|
|
||||||
private LocalDateTime offlineTime;
|
|
||||||
|
|
||||||
@Schema(description = "设备最后消息时间")
|
|
||||||
private LocalDateTime lastMessageTime;
|
|
||||||
|
|
||||||
@Schema(description = "设备分类名称", example = "传感器")
|
|
||||||
private String deviceCategoryName;
|
|
||||||
|
|
||||||
@Schema(description = "基地名称", example = "示范基地1")
|
|
||||||
private String baseName;
|
|
||||||
|
|
||||||
@Schema(description = "地块名称", example = "A1地块")
|
|
||||||
private String plotName;
|
|
||||||
}
|
|
||||||
@@ -1,33 +0,0 @@
|
|||||||
package cn.iocoder.yudao.module.farm.controller.admin.devicestatus.vo;
|
|
||||||
|
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
|
||||||
import lombok.Data;
|
|
||||||
|
|
||||||
@Schema(description = "管理后台 - 设备状态统计 Response VO")
|
|
||||||
@Data
|
|
||||||
public class DeviceStatusStatisticsRespVO {
|
|
||||||
|
|
||||||
@Schema(description = "设备总数", example = "100")
|
|
||||||
private Long totalCount;
|
|
||||||
|
|
||||||
@Schema(description = "在线设备数", example = "85")
|
|
||||||
private Long onlineCount;
|
|
||||||
|
|
||||||
@Schema(description = "离线设备数", example = "10")
|
|
||||||
private Long offlineCount;
|
|
||||||
|
|
||||||
@Schema(description = "未激活设备数", example = "3")
|
|
||||||
private Long inactiveCount;
|
|
||||||
|
|
||||||
@Schema(description = "维护中设备数", example = "1")
|
|
||||||
private Long maintenanceCount;
|
|
||||||
|
|
||||||
@Schema(description = "故障设备数", example = "1")
|
|
||||||
private Long faultCount;
|
|
||||||
|
|
||||||
@Schema(description = "在线率(百分比)", example = "85.0")
|
|
||||||
private Double onlineRate;
|
|
||||||
|
|
||||||
@Schema(description = "离线率(百分比)", example = "10.0")
|
|
||||||
private Double offlineRate;
|
|
||||||
}
|
|
||||||
@@ -13,6 +13,7 @@ import cn.iocoder.yudao.module.farm.service.baseinfo.BaseInfoService;
|
|||||||
import cn.iocoder.yudao.module.farm.service.companyinfo.CompanyInfoService;
|
import cn.iocoder.yudao.module.farm.service.companyinfo.CompanyInfoService;
|
||||||
import cn.iocoder.yudao.module.farm.service.deviceinfo.DeviceInfoService;
|
import cn.iocoder.yudao.module.farm.service.deviceinfo.DeviceInfoService;
|
||||||
import cn.iocoder.yudao.module.farm.service.farmingrecord.FarmingRecordService;
|
import cn.iocoder.yudao.module.farm.service.farmingrecord.FarmingRecordService;
|
||||||
|
import cn.iocoder.yudao.module.farm.service.messagecenter.MessageCenterService;
|
||||||
import cn.iocoder.yudao.module.farm.service.modelmanagement.ModelManagementService;
|
import cn.iocoder.yudao.module.farm.service.modelmanagement.ModelManagementService;
|
||||||
import cn.iocoder.yudao.module.farm.service.plotinfo.PlotInfoService;
|
import cn.iocoder.yudao.module.farm.service.plotinfo.PlotInfoService;
|
||||||
import cn.iocoder.yudao.module.farm.service.productionplan.ProductionPlanService;
|
import cn.iocoder.yudao.module.farm.service.productionplan.ProductionPlanService;
|
||||||
@@ -24,9 +25,9 @@ import org.springframework.validation.annotation.Validated;
|
|||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.error;
|
|
||||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
||||||
import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUser;
|
import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUser;
|
||||||
|
|
||||||
@@ -48,8 +49,9 @@ public class DigitalCockpitController {
|
|||||||
private final ProductionPlanService productionPlanService;
|
private final ProductionPlanService productionPlanService;
|
||||||
private final FarmingRecordService farmingRecordService;
|
private final FarmingRecordService farmingRecordService;
|
||||||
private final ModelManagementService modelManagementService;
|
private final ModelManagementService modelManagementService;
|
||||||
|
private final MessageCenterService messageCenterService;
|
||||||
|
|
||||||
public DigitalCockpitController(BaseInfoService baseInfoService, PlotInfoService plotInfoService, CompanyInfoService companyInfoService, DeviceInfoService deviceInfoService, ProductionPlanService productionPlanService, FarmingRecordService farmingRecordService, ModelManagementService modelManagementService) {
|
public DigitalCockpitController(BaseInfoService baseInfoService, PlotInfoService plotInfoService, CompanyInfoService companyInfoService, DeviceInfoService deviceInfoService, ProductionPlanService productionPlanService, FarmingRecordService farmingRecordService, ModelManagementService modelManagementService, MessageCenterService messageCenterService) {
|
||||||
this.baseInfoService = baseInfoService;
|
this.baseInfoService = baseInfoService;
|
||||||
this.plotInfoService = plotInfoService;
|
this.plotInfoService = plotInfoService;
|
||||||
this.companyInfoService = companyInfoService;
|
this.companyInfoService = companyInfoService;
|
||||||
@@ -57,6 +59,7 @@ public class DigitalCockpitController {
|
|||||||
this.productionPlanService = productionPlanService;
|
this.productionPlanService = productionPlanService;
|
||||||
this.farmingRecordService = farmingRecordService;
|
this.farmingRecordService = farmingRecordService;
|
||||||
this.modelManagementService = modelManagementService;
|
this.modelManagementService = modelManagementService;
|
||||||
|
this.messageCenterService = messageCenterService;
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/company-info")
|
@GetMapping("/company-info")
|
||||||
@@ -111,13 +114,8 @@ public class DigitalCockpitController {
|
|||||||
@Operation(summary = "各项数据统计")
|
@Operation(summary = "各项数据统计")
|
||||||
@Parameter(name = "baseId", description = "基地ID", required = true)
|
@Parameter(name = "baseId", description = "基地ID", required = true)
|
||||||
public CommonResult<VariousIndexesRespVO> getVariousIndexes(@RequestParam("baseId") String baseId) {
|
public CommonResult<VariousIndexesRespVO> getVariousIndexes(@RequestParam("baseId") String baseId) {
|
||||||
// TODO: 2025/9/24 待实现
|
VariousIndexesRespVO res = messageCenterService.getVariousIndexes(baseId);
|
||||||
int weatherAlertCount = 10;
|
return success(res);
|
||||||
int pestAlertCount = 11;
|
|
||||||
int environmentalAlertCount = 12;
|
|
||||||
int deviceAlertCount = 13;
|
|
||||||
int farmingReminderCount = 14;
|
|
||||||
return success(new VariousIndexesRespVO(weatherAlertCount, pestAlertCount, environmentalAlertCount, deviceAlertCount, farmingReminderCount));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/crop-statistics/type/1")
|
@GetMapping("/crop-statistics/type/1")
|
||||||
@@ -137,6 +135,10 @@ public class DigitalCockpitController {
|
|||||||
public CommonResult<List<YieldStatisticsRespVO>> getYieldStatisticsInfo(@RequestParam("baseId") String baseId,
|
public CommonResult<List<YieldStatisticsRespVO>> getYieldStatisticsInfo(@RequestParam("baseId") String baseId,
|
||||||
@RequestParam("year") String year) {
|
@RequestParam("year") String year) {
|
||||||
List<YieldStatisticsRespVO> res = productionPlanService.getCultivatingYieldInfo(baseId, year);
|
List<YieldStatisticsRespVO> res = productionPlanService.getCultivatingYieldInfo(baseId, year);
|
||||||
|
res = Arrays.asList(
|
||||||
|
new YieldStatisticsRespVO("红玫瑰",10000,20000),
|
||||||
|
new YieldStatisticsRespVO("褚橙",25000,50000)
|
||||||
|
);
|
||||||
return success(res);
|
return success(res);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -191,7 +193,7 @@ public class DigitalCockpitController {
|
|||||||
|
|
||||||
ModelManagementDO mObj = modelManagementService.getTopQuoteCount();
|
ModelManagementDO mObj = modelManagementService.getTopQuoteCount();
|
||||||
if (ObjectUtils.isEmpty(mObj)) {
|
if (ObjectUtils.isEmpty(mObj)) {
|
||||||
return error(500,"还未创建模型");
|
return success(new PlanSpeciesRespVO());
|
||||||
}
|
}
|
||||||
PlanSpeciesRespVO res = new PlanSpeciesRespVO();
|
PlanSpeciesRespVO res = new PlanSpeciesRespVO();
|
||||||
res.setImage(mObj.getSpeciesImage());
|
res.setImage(mObj.getSpeciesImage());
|
||||||
|
|||||||
@@ -14,14 +14,14 @@ import lombok.NoArgsConstructor;
|
|||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
public class VariousIndexesRespVO {
|
public class VariousIndexesRespVO {
|
||||||
@Schema(description = "气象预警数量")
|
@Schema(description = "气象告警数量")
|
||||||
private Integer weatherAlertCount;
|
private Integer weatherAlertCount;
|
||||||
@Schema(description = "病虫害告警数量")
|
@Schema(description = "虫害告警数量")
|
||||||
private Integer pestAlertCount;
|
private Integer pestAlertCount;
|
||||||
@Schema(description = "环境告警数量")
|
@Schema(description = "环境告警数量")
|
||||||
private Integer environmentalAlertCount;
|
private Integer environmentalAlertCount;
|
||||||
@Schema(description = "设备告警数量")
|
@Schema(description = "预警数量")
|
||||||
private Integer deviceAlertCount;
|
private Integer deviceAlertCount;
|
||||||
@Schema(description = "农事提醒刷领")
|
@Schema(description = "消息数量")
|
||||||
private Integer farmingReminderCount;
|
private Integer farmingReminderCount;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -198,7 +198,9 @@ public class HomeInfo {
|
|||||||
@Schema(description = "任务进度-分母")
|
@Schema(description = "任务进度-分母")
|
||||||
private Integer progressBarDenominator;
|
private Integer progressBarDenominator;
|
||||||
@Schema(description = "种植面积")
|
@Schema(description = "种植面积")
|
||||||
private Double predictedArea;
|
private String predictedArea;
|
||||||
|
@Schema(description = "计划网箱数")
|
||||||
|
private Integer predictedGridNumber;
|
||||||
@Schema(description = "预计产量")
|
@Schema(description = "预计产量")
|
||||||
private Integer predictedYields;
|
private Integer predictedYields;
|
||||||
@Schema(description = "计划执行状态")
|
@Schema(description = "计划执行状态")
|
||||||
|
|||||||
@@ -101,6 +101,24 @@ public class BaseInfoController {
|
|||||||
return success(res);
|
return success(res);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@GetMapping("/base-overview/base")
|
||||||
|
@Operation(summary = "基地详情")
|
||||||
|
@Parameter(name = "baseId", description = "基地编号", required = true, example = "1024")
|
||||||
|
public CommonResult<BaseInfoRespVO.BaseInfo> getBaseOverviewDetails(@RequestParam("baseId") String baseId) {
|
||||||
|
BaseInfoRespVO.BaseInfo res = baseInfoService.getBaseOverviewDetails(baseId);
|
||||||
|
return success(res);
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/base-overview/plot")
|
||||||
|
@Operation(summary = "地块详情")
|
||||||
|
@Parameter(name = "plotId", description = "地块编号", required = true, example = "1024")
|
||||||
|
public CommonResult<BaseInfoRespVO.PlotInfo> getPlotDetails(@RequestParam("plotId") String plotId) {
|
||||||
|
BaseInfoRespVO.PlotInfo res = baseInfoService.getPlotDetails(plotId);
|
||||||
|
return success(res);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@GetMapping("/export-excel")
|
@GetMapping("/export-excel")
|
||||||
@Operation(summary = "导出基地 Excel")
|
@Operation(summary = "导出基地 Excel")
|
||||||
@ApiAccessLog(operateType = EXPORT)
|
@ApiAccessLog(operateType = EXPORT)
|
||||||
|
|||||||
@@ -6,10 +6,9 @@ import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
|||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||||
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
|
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
|
||||||
import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.largescreen.foundationinfo.vo.FoundationInfoPageReqVO;
|
import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.largescreen.foundationinfo.vo.*;
|
||||||
import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.largescreen.foundationinfo.vo.FoundationInfoRespVO;
|
|
||||||
import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.largescreen.foundationinfo.vo.FoundationInfoSaveReqVO;
|
|
||||||
import cn.iocoder.yudao.module.farm.dal.dataobject.foundationinfo.FoundationInfoDO;
|
import cn.iocoder.yudao.module.farm.dal.dataobject.foundationinfo.FoundationInfoDO;
|
||||||
|
import cn.iocoder.yudao.module.farm.service.foundationinfo.CockpitMockInfoService;
|
||||||
import cn.iocoder.yudao.module.farm.service.foundationinfo.FoundationInfoService;
|
import cn.iocoder.yudao.module.farm.service.foundationinfo.FoundationInfoService;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.Parameter;
|
import io.swagger.v3.oas.annotations.Parameter;
|
||||||
@@ -34,6 +33,8 @@ public class FoundationInfoController {
|
|||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private FoundationInfoService foundationInfoService;
|
private FoundationInfoService foundationInfoService;
|
||||||
|
@Resource
|
||||||
|
private CockpitMockInfoService cockpitMockInfoService;
|
||||||
|
|
||||||
@PostMapping("/create")
|
@PostMapping("/create")
|
||||||
@Operation(summary = "创建基础信息")
|
@Operation(summary = "创建基础信息")
|
||||||
@@ -93,17 +94,16 @@ public class FoundationInfoController {
|
|||||||
|
|
||||||
@GetMapping("/data-toggle/get")
|
@GetMapping("/data-toggle/get")
|
||||||
@Operation(summary = "数据切换-获取")
|
@Operation(summary = "数据切换-获取")
|
||||||
@Parameter(name = "data", description = "数据", required = true)
|
@Parameter(name = "baseId", description = "数据", required = true)
|
||||||
public CommonResult<String> getDataToggle(@RequestParam("data") String data) {
|
public CommonResult<List<DataToggleRespVO>> getDataToggle(@RequestParam("baseId") String baseId) {
|
||||||
String res = "";
|
return success(cockpitMockInfoService.getDataToggle(baseId));
|
||||||
return success(res);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping("/data-toggle/create")
|
@PostMapping("/data-toggle/create")
|
||||||
@Operation(summary = "数据切换-保存")
|
@Operation(summary = "数据切换-保存")
|
||||||
@Parameter(name = "data", description = "数据", required = true)
|
public CommonResult<String> createDataToggle(@Valid @RequestBody List<DataToggleReqVO> createReqVO) {
|
||||||
public CommonResult<String> createDataToggle(@RequestParam("data") String data) {
|
cockpitMockInfoService.createDataToggle(createReqVO);
|
||||||
|
|
||||||
return success("success");
|
return success("success");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
package cn.iocoder.yudao.module.farm.controller.admin.managementcenter.largescreen.foundationinfo.vo;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description: TODO
|
||||||
|
* @author: binda
|
||||||
|
* @date: 2025/11/20 22:26
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
public class DataToggleReqVO {
|
||||||
|
|
||||||
|
private String baseId;
|
||||||
|
private String flag;
|
||||||
|
private String type;
|
||||||
|
private Object data;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
package cn.iocoder.yudao.module.farm.controller.admin.managementcenter.largescreen.foundationinfo.vo;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description: TODO
|
||||||
|
* @author: binda
|
||||||
|
* @date: 2025/11/20 22:26
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
public class DataToggleRespVO {
|
||||||
|
|
||||||
|
private String id;
|
||||||
|
private String baseId;
|
||||||
|
private String flag;
|
||||||
|
private String type;
|
||||||
|
private Object data;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,12 +1,9 @@
|
|||||||
package cn.iocoder.yudao.module.farm.controller.admin.managementcenter.largescreen.screendisasterdata;
|
package cn.iocoder.yudao.module.farm.controller.admin.managementcenter.largescreen.screendisasterdata;
|
||||||
|
|
||||||
import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.largescreen.screendisasterdata.vo.ScreenDisasterDataPageReqVO;
|
import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.largescreen.screendisasterdata.vo.*;
|
||||||
import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.largescreen.screendisasterdata.vo.ScreenDisasterDataRespVO;
|
|
||||||
import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.largescreen.screendisasterdata.vo.ScreenDisasterDataSaveReqVO;
|
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import jakarta.annotation.Resource;
|
import jakarta.annotation.Resource;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
import org.springframework.security.access.prepost.PreAuthorize;
|
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
import io.swagger.v3.oas.annotations.Parameter;
|
import io.swagger.v3.oas.annotations.Parameter;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
@@ -89,6 +86,14 @@ public class ScreenDisasterDataController {
|
|||||||
return success(BeanUtils.toBean(pageResult, ScreenDisasterDataRespVO.class));
|
return success(BeanUtils.toBean(pageResult, ScreenDisasterDataRespVO.class));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@GetMapping("/statistics")
|
||||||
|
@Operation(summary = "获得大屏数据-灾害数据统计")
|
||||||
|
public CommonResult<List<DisasterDataStatisticsInfoV2RespVO>> getScreenDisasterDataStatisticsInfo() {
|
||||||
|
List<DisasterDataStatisticsInfoV2RespVO> res = screenDisasterDataService.getScreenDisasterDataStatisticsInfo();
|
||||||
|
return success(res);
|
||||||
|
}
|
||||||
|
|
||||||
@GetMapping("/export-excel")
|
@GetMapping("/export-excel")
|
||||||
@Operation(summary = "导出大屏数据-灾害数据 Excel")
|
@Operation(summary = "导出大屏数据-灾害数据 Excel")
|
||||||
// @PreAuthorize("@ss.hasPermission('farm:screen-disaster-data:export')")
|
// @PreAuthorize("@ss.hasPermission('farm:screen-disaster-data:export')")
|
||||||
|
|||||||
@@ -0,0 +1,20 @@
|
|||||||
|
package cn.iocoder.yudao.module.farm.controller.admin.managementcenter.largescreen.screendisasterdata.vo;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description: TODO
|
||||||
|
* @author: binda
|
||||||
|
* @date: 2025/11/21 00:37
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
public class DisasterDataStatisticsInfoRespVO {
|
||||||
|
private String category; // 灾害类型
|
||||||
|
private String disasterTime; // 发生月份
|
||||||
|
private Integer totalCount; // 总发生次数
|
||||||
|
private Integer year; // 年份
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
package cn.iocoder.yudao.module.farm.controller.admin.managementcenter.largescreen.screendisasterdata.vo;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description: TODO
|
||||||
|
* @author: binda
|
||||||
|
* @date: 2025/11/21 01:03
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
public class DisasterDataStatisticsInfoV2RespVO {
|
||||||
|
|
||||||
|
private String category;
|
||||||
|
private List<DisasterDataStatisticsInfoRespVO> data;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,108 +0,0 @@
|
|||||||
package cn.iocoder.yudao.module.farm.controller.admin.pestdiseaseweedlibrary;
|
|
||||||
|
|
||||||
import cn.iocoder.yudao.module.farm.controller.admin.pestdiseaseweedlibrary.vo.PestDiseaseWeedLibraryPageReqVO;
|
|
||||||
import cn.iocoder.yudao.module.farm.controller.admin.pestdiseaseweedlibrary.vo.PestDiseaseWeedLibraryRespVO;
|
|
||||||
import cn.iocoder.yudao.module.farm.controller.admin.pestdiseaseweedlibrary.vo.PestDiseaseWeedLibrarySaveReqVO;
|
|
||||||
import org.springframework.web.bind.annotation.*;
|
|
||||||
import jakarta.validation.Valid;
|
|
||||||
import jakarta.validation.Valid;
|
|
||||||
import jakarta.validation.Valid;
|
|
||||||
import jakarta.servlet.http.HttpServletResponse;
|
|
||||||
import java.util.List;
|
|
||||||
import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
|
|
||||||
|
|
||||||
import jakarta.annotation.Resource;
|
|
||||||
import org.springframework.validation.annotation.Validated;
|
|
||||||
|
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
|
||||||
import io.swagger.v3.oas.annotations.Parameter;
|
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
|
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
|
||||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
|
||||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
|
||||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
|
||||||
|
|
||||||
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
|
|
||||||
|
|
||||||
import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
|
|
||||||
|
|
||||||
import cn.iocoder.yudao.module.farm.dal.dataobject.pestdiseaseweedlibrary.PestDiseaseWeedLibraryDO;
|
|
||||||
import cn.iocoder.yudao.module.farm.service.pestdiseaseweedlibrary.PestDiseaseWeedLibraryService;
|
|
||||||
|
|
||||||
//@Tag(name = "管理后台 - 病虫草害库维护")
|
|
||||||
//@RestController
|
|
||||||
//@RequestMapping("/farm/pest-disease-weed-library")
|
|
||||||
//@Validated
|
|
||||||
public class PestDiseaseWeedLibraryController {
|
|
||||||
|
|
||||||
// @Resource
|
|
||||||
// private PestDiseaseWeedLibraryService pestDiseaseWeedLibraryService;
|
|
||||||
//
|
|
||||||
// @PostMapping("/create")
|
|
||||||
// @Operation(summary = "创建病虫草害库维护")
|
|
||||||
//
|
|
||||||
// public CommonResult<String> createPestDiseaseWeedLibrary(@Valid @RequestBody PestDiseaseWeedLibrarySaveReqVO createReqVO) {
|
|
||||||
// return success(pestDiseaseWeedLibraryService.createPestDiseaseWeedLibrary(createReqVO));
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// @PutMapping("/update")
|
|
||||||
// @Operation(summary = "更新病虫草害库维护")
|
|
||||||
//
|
|
||||||
// public CommonResult<Boolean> updatePestDiseaseWeedLibrary(@Valid @RequestBody PestDiseaseWeedLibrarySaveReqVO updateReqVO) {
|
|
||||||
// pestDiseaseWeedLibraryService.updatePestDiseaseWeedLibrary(updateReqVO);
|
|
||||||
// return success(true);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// @DeleteMapping("/delete")
|
|
||||||
// @Operation(summary = "删除病虫草害库维护")
|
|
||||||
// @Parameter(name = "id", description = "编号", required = true)
|
|
||||||
//
|
|
||||||
// public CommonResult<Boolean> deletePestDiseaseWeedLibrary(@RequestParam("id") String id) {
|
|
||||||
// pestDiseaseWeedLibraryService.deletePestDiseaseWeedLibrary(id);
|
|
||||||
// return success(true);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// @DeleteMapping("/delete-list")
|
|
||||||
// @Parameter(name = "ids", description = "编号", required = true)
|
|
||||||
// @Operation(summary = "批量删除病虫草害库维护")
|
|
||||||
//
|
|
||||||
// public CommonResult<Boolean> deletePestDiseaseWeedLibraryList(@RequestParam("ids") List<String> ids) {
|
|
||||||
// pestDiseaseWeedLibraryService.deletePestDiseaseWeedLibraryListByIds(ids);
|
|
||||||
// return success(true);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// @GetMapping("/get")
|
|
||||||
// @Operation(summary = "获得病虫草害库维护")
|
|
||||||
// @Parameter(name = "id", description = "编号", required = true, example = "1024")
|
|
||||||
//
|
|
||||||
// public CommonResult<PestDiseaseWeedLibraryRespVO> getPestDiseaseWeedLibrary(@RequestParam("id") String id) {
|
|
||||||
// PestDiseaseWeedLibraryDO pestDiseaseWeedLibrary = pestDiseaseWeedLibraryService.getPestDiseaseWeedLibrary(id);
|
|
||||||
// return success(BeanUtils.toBean(pestDiseaseWeedLibrary, PestDiseaseWeedLibraryRespVO.class));
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// @GetMapping("/page")
|
|
||||||
// @Operation(summary = "获得病虫草害库维护分页")
|
|
||||||
//
|
|
||||||
// public CommonResult<PageResult<PestDiseaseWeedLibraryRespVO>> getPestDiseaseWeedLibraryPage(@Valid PestDiseaseWeedLibraryPageReqVO pageReqVO) {
|
|
||||||
// PageResult<PestDiseaseWeedLibraryDO> pageResult = pestDiseaseWeedLibraryService.getPestDiseaseWeedLibraryPage(pageReqVO);
|
|
||||||
// return success(BeanUtils.toBean(pageResult, PestDiseaseWeedLibraryRespVO.class));
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// @GetMapping("/export-excel")
|
|
||||||
// @Operation(summary = "导出病虫草害库维护 Excel")
|
|
||||||
//
|
|
||||||
// @ApiAccessLog(operateType = EXPORT)
|
|
||||||
// public void exportPestDiseaseWeedLibraryExcel(@Valid PestDiseaseWeedLibraryPageReqVO pageReqVO,
|
|
||||||
// HttpServletResponse response) throws IOException {
|
|
||||||
// pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
|
||||||
// List<PestDiseaseWeedLibraryDO> list = pestDiseaseWeedLibraryService.getPestDiseaseWeedLibraryPage(pageReqVO).getList();
|
|
||||||
// // 导出 Excel
|
|
||||||
// ExcelUtils.write(response, "病虫草害库维护.xls", "数据", PestDiseaseWeedLibraryRespVO.class,
|
|
||||||
// BeanUtils.toBean(list, PestDiseaseWeedLibraryRespVO.class));
|
|
||||||
// }
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,53 +0,0 @@
|
|||||||
package cn.iocoder.yudao.module.farm.controller.admin.pestdiseaseweedlibrary.vo;
|
|
||||||
|
|
||||||
import lombok.*;
|
|
||||||
|
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
|
||||||
import org.springframework.format.annotation.DateTimeFormat;
|
|
||||||
import java.time.LocalDateTime;
|
|
||||||
|
|
||||||
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
|
|
||||||
|
|
||||||
@Schema(description = "管理后台 - 病虫草害库维护分页 Request VO")
|
|
||||||
@Data
|
|
||||||
public class PestDiseaseWeedLibraryPageReqVO extends PageParam {
|
|
||||||
|
|
||||||
@Schema(description = "灾害类型", example = "2")
|
|
||||||
private Integer type;
|
|
||||||
|
|
||||||
@Schema(description = "灾害名称", example = "李四")
|
|
||||||
private String name;
|
|
||||||
|
|
||||||
@Schema(description = "灾害描述", example = "你说的对")
|
|
||||||
private String description;
|
|
||||||
|
|
||||||
@Schema(description = "防治建议")
|
|
||||||
private String propose;
|
|
||||||
|
|
||||||
@Schema(description = "图片")
|
|
||||||
private String images;
|
|
||||||
|
|
||||||
@Schema(description = "0=启用,1=停用", example = "1")
|
|
||||||
private Integer useStatus;
|
|
||||||
|
|
||||||
@Schema(description = "创建时间")
|
|
||||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
|
||||||
private LocalDateTime[] createTime;
|
|
||||||
|
|
||||||
@Schema(description = "基地id", example = "427")
|
|
||||||
private String baseId;
|
|
||||||
|
|
||||||
@Schema(description = "基地", example = "王五")
|
|
||||||
private String baseName;
|
|
||||||
|
|
||||||
@Schema(description = "地块ID", example = "27747")
|
|
||||||
private String plotId;
|
|
||||||
|
|
||||||
@Schema(description = "地块", example = "芋艿")
|
|
||||||
private String plotName;
|
|
||||||
|
|
||||||
@Schema(description = "租户id", example = "27978")
|
|
||||||
private String tenantId;
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,64 +0,0 @@
|
|||||||
package cn.iocoder.yudao.module.farm.controller.admin.pestdiseaseweedlibrary.vo;
|
|
||||||
|
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
|
||||||
import lombok.*;
|
|
||||||
|
|
||||||
import org.springframework.format.annotation.DateTimeFormat;
|
|
||||||
import java.time.LocalDateTime;
|
|
||||||
import cn.idev.excel.annotation.*;
|
|
||||||
|
|
||||||
@Schema(description = "管理后台 - 病虫草害库维护 Response VO")
|
|
||||||
@Data
|
|
||||||
@ExcelIgnoreUnannotated
|
|
||||||
public class PestDiseaseWeedLibraryRespVO {
|
|
||||||
|
|
||||||
@Schema(description = "基础id", requiredMode = Schema.RequiredMode.REQUIRED, example = "521")
|
|
||||||
@ExcelProperty("基础id")
|
|
||||||
private String id;
|
|
||||||
|
|
||||||
@Schema(description = "灾害类型", example = "2")
|
|
||||||
@ExcelProperty("灾害类型")
|
|
||||||
private Integer type;
|
|
||||||
|
|
||||||
@Schema(description = "灾害名称", example = "李四")
|
|
||||||
@ExcelProperty("灾害名称")
|
|
||||||
private String name;
|
|
||||||
|
|
||||||
@Schema(description = "灾害描述", example = "你说的对")
|
|
||||||
@ExcelProperty("灾害描述")
|
|
||||||
private String description;
|
|
||||||
|
|
||||||
@Schema(description = "防治建议")
|
|
||||||
@ExcelProperty("防治建议")
|
|
||||||
private String propose;
|
|
||||||
|
|
||||||
@Schema(description = "图片")
|
|
||||||
@ExcelProperty("图片")
|
|
||||||
private String images;
|
|
||||||
|
|
||||||
@Schema(description = "0=启用,1=停用", example = "1")
|
|
||||||
@ExcelProperty("0=启用,1=停用")
|
|
||||||
private Integer useStatus;
|
|
||||||
|
|
||||||
@Schema(description = "创建时间")
|
|
||||||
@ExcelProperty("创建时间")
|
|
||||||
private LocalDateTime createTime;
|
|
||||||
|
|
||||||
@Schema(description = "基地id", example = "427")
|
|
||||||
@ExcelProperty("基地id")
|
|
||||||
private String baseId;
|
|
||||||
|
|
||||||
@Schema(description = "基地", example = "王五")
|
|
||||||
@ExcelProperty("基地")
|
|
||||||
private String baseName;
|
|
||||||
|
|
||||||
@Schema(description = "地块ID", example = "27747")
|
|
||||||
@ExcelProperty("地块ID")
|
|
||||||
private String plotId;
|
|
||||||
|
|
||||||
@Schema(description = "地块", example = "芋艿")
|
|
||||||
@ExcelProperty("地块")
|
|
||||||
private String plotName;
|
|
||||||
@Schema(description = "租户id")
|
|
||||||
private String tenantId;
|
|
||||||
}
|
|
||||||
@@ -1,46 +0,0 @@
|
|||||||
package cn.iocoder.yudao.module.farm.controller.admin.pestdiseaseweedlibrary.vo;
|
|
||||||
|
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
|
||||||
import lombok.*;
|
|
||||||
|
|
||||||
@Schema(description = "管理后台 - 病虫草害库维护新增/修改 Request VO")
|
|
||||||
@Data
|
|
||||||
public class PestDiseaseWeedLibrarySaveReqVO {
|
|
||||||
|
|
||||||
@Schema(description = "基础id", requiredMode = Schema.RequiredMode.REQUIRED, example = "521")
|
|
||||||
private String id;
|
|
||||||
|
|
||||||
@Schema(description = "灾害类型", example = "2")
|
|
||||||
private Integer type;
|
|
||||||
|
|
||||||
@Schema(description = "灾害名称", example = "李四")
|
|
||||||
private String name;
|
|
||||||
|
|
||||||
@Schema(description = "灾害描述", example = "你说的对")
|
|
||||||
private String description;
|
|
||||||
|
|
||||||
@Schema(description = "防治建议")
|
|
||||||
private String propose;
|
|
||||||
|
|
||||||
@Schema(description = "图片")
|
|
||||||
private String images;
|
|
||||||
|
|
||||||
@Schema(description = "0=启用,1=停用", example = "1")
|
|
||||||
private Integer useStatus;
|
|
||||||
|
|
||||||
@Schema(description = "基地id", example = "427")
|
|
||||||
private String baseId;
|
|
||||||
|
|
||||||
@Schema(description = "基地", example = "王五")
|
|
||||||
private String baseName;
|
|
||||||
|
|
||||||
@Schema(description = "地块ID", example = "27747")
|
|
||||||
private String plotId;
|
|
||||||
|
|
||||||
@Schema(description = "地块", example = "芋艿")
|
|
||||||
private String plotName;
|
|
||||||
|
|
||||||
@Schema(description = "租户id", example = "27978")
|
|
||||||
private String tenantId;
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,69 @@
|
|||||||
|
package cn.iocoder.yudao.module.farm.dal.dataobject.foundationinfo;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
|
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
|
||||||
|
import lombok.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description: 驾驶舱模拟数据
|
||||||
|
* @author: binda
|
||||||
|
* @date: 2025/11/20 22:50
|
||||||
|
*/
|
||||||
|
@TableName("farm_cockpit_mock_info")
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@ToString(callSuper = true)
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class CockpitMockInfoDO extends BaseDO {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 基础id
|
||||||
|
*/
|
||||||
|
private String id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 数据维护开关 (1: 开; 0: 关;)
|
||||||
|
*/
|
||||||
|
private String flag;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 数据类型
|
||||||
|
*/
|
||||||
|
private String type;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* mock数据
|
||||||
|
*/
|
||||||
|
@TableField(typeHandler = JacksonTypeHandler.class)
|
||||||
|
private String jsonData;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 基地id
|
||||||
|
*/
|
||||||
|
private String baseId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 基地
|
||||||
|
*/
|
||||||
|
private String baseName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 地块ID
|
||||||
|
*/
|
||||||
|
private String plotId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 地块
|
||||||
|
*/
|
||||||
|
private String plotName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 租户id
|
||||||
|
*/
|
||||||
|
private String tenantId;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,99 +0,0 @@
|
|||||||
package cn.iocoder.yudao.module.farm.dal.dataobject.pestdiseaseweedlibrary;
|
|
||||||
|
|
||||||
import lombok.*;
|
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
|
||||||
import java.time.LocalDateTime;
|
|
||||||
import java.util.List;
|
|
||||||
import com.baomidou.mybatisplus.annotation.*;
|
|
||||||
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
|
|
||||||
import cn.iocoder.yudao.module.farm.framework.util.ImageCollectionUtil;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 病虫草害库维护 DO
|
|
||||||
*
|
|
||||||
* @author 芋道源码
|
|
||||||
*/
|
|
||||||
@TableName("farm_pest_disease_weed_library")
|
|
||||||
@KeySequence("farm_pest_disease_weed_library_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
|
|
||||||
@Data
|
|
||||||
@EqualsAndHashCode(callSuper = true)
|
|
||||||
@ToString(callSuper = true)
|
|
||||||
@Builder
|
|
||||||
@NoArgsConstructor
|
|
||||||
@AllArgsConstructor
|
|
||||||
public class PestDiseaseWeedLibraryDO extends BaseDO {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 基础id
|
|
||||||
*/
|
|
||||||
@TableId(type = IdType.INPUT)
|
|
||||||
private String id;
|
|
||||||
/**
|
|
||||||
* 灾害类型
|
|
||||||
*/
|
|
||||||
private Integer type;
|
|
||||||
/**
|
|
||||||
* 灾害名称
|
|
||||||
*/
|
|
||||||
private String name;
|
|
||||||
/**
|
|
||||||
* 灾害描述
|
|
||||||
*/
|
|
||||||
private String description;
|
|
||||||
/**
|
|
||||||
* 防治建议
|
|
||||||
*/
|
|
||||||
private String propose;
|
|
||||||
/**
|
|
||||||
* 图片(数据库存储为逗号分隔的字符串)
|
|
||||||
*/
|
|
||||||
@TableField(value = "images")
|
|
||||||
private String images;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 图片集合(业务层使用)
|
|
||||||
*/
|
|
||||||
@TableField(exist = false)
|
|
||||||
private List<String> imageList;
|
|
||||||
/**
|
|
||||||
* 0=启用,1=停用
|
|
||||||
*/
|
|
||||||
private Integer useStatus;
|
|
||||||
/**
|
|
||||||
* 基地id
|
|
||||||
*/
|
|
||||||
private String baseId;
|
|
||||||
/**
|
|
||||||
* 基地
|
|
||||||
*/
|
|
||||||
private String baseName;
|
|
||||||
/**
|
|
||||||
* 地块ID
|
|
||||||
*/
|
|
||||||
private String plotId;
|
|
||||||
/**
|
|
||||||
* 地块
|
|
||||||
*/
|
|
||||||
private String plotName;
|
|
||||||
|
|
||||||
private String tenantId;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取图片集合
|
|
||||||
*/
|
|
||||||
public List<String> getImageList() {
|
|
||||||
if (imageList == null) {
|
|
||||||
imageList = ImageCollectionUtil.toImageList(this.images);
|
|
||||||
}
|
|
||||||
return imageList;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 设置图片集合
|
|
||||||
*/
|
|
||||||
public void setImageList(List<String> imageList) {
|
|
||||||
this.imageList = imageList;
|
|
||||||
this.images = ImageCollectionUtil.toDatabaseString(imageList);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
package cn.iocoder.yudao.module.farm.dal.mysql.foundationinfo;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
||||||
|
import cn.iocoder.yudao.module.farm.dal.dataobject.foundationinfo.CockpitMockInfoDO;
|
||||||
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description:
|
||||||
|
* @author: binda
|
||||||
|
* @date: 2025/11/20 22:53
|
||||||
|
*/
|
||||||
|
@Mapper
|
||||||
|
public interface CockpitMockInfoMapper extends BaseMapperX<CockpitMockInfoDO> {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.farm.dal.mysql.messagecenter;
|
|||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
||||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||||
|
import cn.iocoder.yudao.module.farm.controller.admin.digitalcockpit.vo.VariousIndexesRespVO;
|
||||||
import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.messagecenter.vo.MessageCenterPageReqVO;
|
import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.messagecenter.vo.MessageCenterPageReqVO;
|
||||||
import cn.iocoder.yudao.module.farm.dal.dataobject.messagecenter.MessageCenterDO;
|
import cn.iocoder.yudao.module.farm.dal.dataobject.messagecenter.MessageCenterDO;
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
@@ -83,4 +84,5 @@ public interface MessageCenterMapper extends BaseMapperX<MessageCenterDO> {
|
|||||||
@Param("startTime") String startTime,
|
@Param("startTime") String startTime,
|
||||||
@Param("endTime") String endTime);
|
@Param("endTime") String endTime);
|
||||||
|
|
||||||
|
VariousIndexesRespVO getVariousIndexes(String baseId);
|
||||||
}
|
}
|
||||||
@@ -1,35 +0,0 @@
|
|||||||
package cn.iocoder.yudao.module.farm.dal.mysql.pestdiseaseweedlibrary;
|
|
||||||
|
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
|
||||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
|
||||||
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
|
||||||
import cn.iocoder.yudao.module.farm.controller.admin.pestdiseaseweedlibrary.vo.PestDiseaseWeedLibraryPageReqVO;
|
|
||||||
import cn.iocoder.yudao.module.farm.dal.dataobject.pestdiseaseweedlibrary.PestDiseaseWeedLibraryDO;
|
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 病虫草害库维护 Mapper
|
|
||||||
*
|
|
||||||
* @author 芋道源码
|
|
||||||
*/
|
|
||||||
@Mapper
|
|
||||||
public interface PestDiseaseWeedLibraryMapper extends BaseMapperX<PestDiseaseWeedLibraryDO> {
|
|
||||||
|
|
||||||
default PageResult<PestDiseaseWeedLibraryDO> selectPage(PestDiseaseWeedLibraryPageReqVO reqVO) {
|
|
||||||
return selectPage(reqVO, new LambdaQueryWrapperX<PestDiseaseWeedLibraryDO>()
|
|
||||||
.eqIfPresent(PestDiseaseWeedLibraryDO::getType, reqVO.getType())
|
|
||||||
.likeIfPresent(PestDiseaseWeedLibraryDO::getName, reqVO.getName())
|
|
||||||
.eqIfPresent(PestDiseaseWeedLibraryDO::getDescription, reqVO.getDescription())
|
|
||||||
.eqIfPresent(PestDiseaseWeedLibraryDO::getPropose, reqVO.getPropose())
|
|
||||||
.eqIfPresent(PestDiseaseWeedLibraryDO::getImages, reqVO.getImages())
|
|
||||||
.eqIfPresent(PestDiseaseWeedLibraryDO::getUseStatus, reqVO.getUseStatus())
|
|
||||||
.betweenIfPresent(PestDiseaseWeedLibraryDO::getCreateTime, reqVO.getCreateTime())
|
|
||||||
.eqIfPresent(PestDiseaseWeedLibraryDO::getBaseId, reqVO.getBaseId())
|
|
||||||
.likeIfPresent(PestDiseaseWeedLibraryDO::getBaseName, reqVO.getBaseName())
|
|
||||||
.eqIfPresent(PestDiseaseWeedLibraryDO::getPlotId, reqVO.getPlotId())
|
|
||||||
.likeIfPresent(PestDiseaseWeedLibraryDO::getPlotName, reqVO.getPlotName())
|
|
||||||
.eqIfPresent(PestDiseaseWeedLibraryDO::getTenantId, reqVO.getTenantId())
|
|
||||||
.orderByDesc(PestDiseaseWeedLibraryDO::getCreateTime));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -5,6 +5,7 @@ import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
|||||||
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
||||||
import cn.iocoder.yudao.module.farm.controller.admin.api.vo.DisasterAnalysisReqVO;
|
import cn.iocoder.yudao.module.farm.controller.admin.api.vo.DisasterAnalysisReqVO;
|
||||||
import cn.iocoder.yudao.module.farm.controller.admin.api.vo.DisasterAnalysisRespVO;
|
import cn.iocoder.yudao.module.farm.controller.admin.api.vo.DisasterAnalysisRespVO;
|
||||||
|
import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.largescreen.screendisasterdata.vo.DisasterDataStatisticsInfoRespVO;
|
||||||
import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.largescreen.screendisasterdata.vo.ScreenDisasterDataPageReqVO;
|
import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.largescreen.screendisasterdata.vo.ScreenDisasterDataPageReqVO;
|
||||||
import cn.iocoder.yudao.module.farm.dal.dataobject.screendisasterdata.ScreenDisasterDataDO;
|
import cn.iocoder.yudao.module.farm.dal.dataobject.screendisasterdata.ScreenDisasterDataDO;
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
@@ -34,4 +35,6 @@ public interface ScreenDisasterDataMapper extends BaseMapperX<ScreenDisasterData
|
|||||||
}
|
}
|
||||||
|
|
||||||
List<DisasterAnalysisRespVO> countDisasterAnalysis(DisasterAnalysisReqVO req);
|
List<DisasterAnalysisRespVO> countDisasterAnalysis(DisasterAnalysisReqVO req);
|
||||||
|
|
||||||
|
List<DisasterDataStatisticsInfoRespVO> getScreenDisasterDataStatisticsInfo();
|
||||||
}
|
}
|
||||||
@@ -86,6 +86,20 @@ public interface BaseInfoService {
|
|||||||
*/
|
*/
|
||||||
TenantInfoRespVO getBaseOverviewInfo();
|
TenantInfoRespVO getBaseOverviewInfo();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 基地概述详情
|
||||||
|
* @param baseId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
BaseInfoRespVO.BaseInfo getBaseOverviewDetails(String baseId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 地块详情
|
||||||
|
* @param plotId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
BaseInfoRespVO.PlotInfo getPlotDetails(String plotId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取网箱信息
|
* 获取网箱信息
|
||||||
* @param plotId
|
* @param plotId
|
||||||
@@ -132,4 +146,5 @@ public interface BaseInfoService {
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
BaseCountInfoRespVO countBaseInfo(String tenantId);
|
BaseCountInfoRespVO countBaseInfo(String tenantId);
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -120,11 +120,6 @@ public class BaseInfoServiceImpl implements BaseInfoService {
|
|||||||
if (flag2) {
|
if (flag2) {
|
||||||
throw exception(PLOT_AREA_EXISTS_ERRORS);
|
throw exception(PLOT_AREA_EXISTS_ERRORS);
|
||||||
}
|
}
|
||||||
// 校验: 存在在种地块时 不允许删除
|
|
||||||
// boolean flag = productionPlanService.validateIncompletePlansBId("base_id", id);
|
|
||||||
// if (!flag) {
|
|
||||||
// throw exception(BEING_PLOT_AREA_EXISTS_ERRORS);
|
|
||||||
// }
|
|
||||||
// 删除
|
// 删除
|
||||||
baseInfoMapper.deleteById(id);
|
baseInfoMapper.deleteById(id);
|
||||||
plotInfoService.deleteByBaseId(id);
|
plotInfoService.deleteByBaseId(id);
|
||||||
@@ -234,12 +229,46 @@ public class BaseInfoServiceImpl implements BaseInfoService {
|
|||||||
List<BaseInfoRespVO> baseList = BeanUtils.toBean(pageResult, BaseInfoRespVO.class);
|
List<BaseInfoRespVO> baseList = BeanUtils.toBean(pageResult, BaseInfoRespVO.class);
|
||||||
this.packageBaseInfo(tenantId, baseList, employeeMap);
|
this.packageBaseInfo(tenantId, baseList, employeeMap);
|
||||||
|
|
||||||
// 基地面积 取整
|
|
||||||
baseList.forEach(e -> e.setArea(BigDecimalUtil.roundedViaMath(e.getArea())));
|
|
||||||
|
|
||||||
return new TenantInfoRespVO(tenantInfo, baseList);
|
return new TenantInfoRespVO(tenantInfo, baseList);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BaseInfoRespVO.BaseInfo getBaseOverviewDetails(String baseId) {
|
||||||
|
BaseInfoDO bObj = baseInfoMapper.selectOne("id", baseId);
|
||||||
|
List<PlotInfoDO> plotList = plotInfoService.getPlotInfos(baseId);
|
||||||
|
|
||||||
|
return this.packageBaseOverview(
|
||||||
|
getLoginUser().getTenantId(),
|
||||||
|
baseId, bObj.getName(),
|
||||||
|
bObj.getArea(),
|
||||||
|
plotList.size());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BaseInfoRespVO.PlotInfo getPlotDetails(String plotId) {
|
||||||
|
Map<String, String> employeeMap = adminUserService.getIdAndNickNameMap();
|
||||||
|
PlotInfoDO aDo = plotInfoService.getPlotInfo(plotId);
|
||||||
|
|
||||||
|
// 户主
|
||||||
|
List<PlotLesseeDetailsRespVO> lesseeList = plotLesseeService.getPlotLesseeList(aDo.getId());
|
||||||
|
String plotManager = employeeMap.getOrDefault(aDo.getEmployeeId(), "系统");
|
||||||
|
|
||||||
|
BaseInfoRespVO.PlotInfo target = new BaseInfoRespVO.PlotInfo(
|
||||||
|
aDo.getId(),
|
||||||
|
aDo.getPlotName(),
|
||||||
|
aDo.getPlotColor(),
|
||||||
|
BigDecimalUtil.roundedViaMath( aDo.getPlotArea()),
|
||||||
|
plotManager,
|
||||||
|
aDo.getPoint(),
|
||||||
|
aDo.getPlotLeaseStatus(),
|
||||||
|
LEASE_STATUS_MAP.get(aDo.getPlotLeaseStatus()),
|
||||||
|
aDo.getGridNumber(),
|
||||||
|
Collections.EMPTY_LIST,
|
||||||
|
lesseeList);
|
||||||
|
|
||||||
|
return target;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<ProductionPlanGridRespVO> getGridInfo(String plotId) {
|
public List<ProductionPlanGridRespVO> getGridInfo(String plotId) {
|
||||||
String plotCode = plotId;
|
String plotCode = plotId;
|
||||||
@@ -434,29 +463,28 @@ public class BaseInfoServiceImpl implements BaseInfoService {
|
|||||||
|
|
||||||
private void packageBaseInfo(long tenantId, List<BaseInfoRespVO> respVOS, Map<String, String> employeeMap) {
|
private void packageBaseInfo(long tenantId, List<BaseInfoRespVO> respVOS, Map<String, String> employeeMap) {
|
||||||
for (BaseInfoRespVO obj : respVOS) {
|
for (BaseInfoRespVO obj : respVOS) {
|
||||||
|
obj.setArea(BigDecimalUtil.roundedViaMath(obj.getArea()));
|
||||||
String baseId = obj.getId();
|
String baseId = obj.getId();
|
||||||
String baseName = obj.getName();
|
String baseName = obj.getName();
|
||||||
BigDecimal baseArea = BigDecimalUtil.roundedViaMath(obj.getArea());
|
|
||||||
List<PlotInfoDO> plotList = plotInfoService.getPlotInfos(baseId);
|
List<PlotInfoDO> plotList = plotInfoService.getPlotInfos(baseId);
|
||||||
|
|
||||||
// 基地概述
|
// 基地概述
|
||||||
BaseInfoRespVO.BaseInfo baseOverview = this.packageBaseOverview(tenantId, baseId, baseName, baseArea, plotList);
|
// BaseInfoRespVO.BaseInfo baseOverview = this.packageBaseOverview(tenantId, baseId, baseName, baseArea, plotList.size());
|
||||||
obj.setBaseOverview(baseOverview);
|
// obj.setBaseOverview(baseOverview);
|
||||||
// 地块集合
|
// 地块集合
|
||||||
List<BaseInfoRespVO.PlotInfo> targetList = this.packagePlotInfo(employeeMap, plotList);
|
List<BaseInfoRespVO.PlotInfo> targetList = this.packagePlotInfo(employeeMap, plotList);
|
||||||
obj.setPlotOverviewList(targetList);
|
obj.setPlotOverviewList(targetList);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private BaseInfoRespVO.BaseInfo packageBaseOverview(long tenantId, String baseId, String baseName, BigDecimal baseArea, List<PlotInfoDO> plotList) {
|
private BaseInfoRespVO.BaseInfo packageBaseOverview(long tenantId, String baseId, String baseName, BigDecimal baseArea, int plotTotalCount) {
|
||||||
// 在种作物数量
|
// 在种作物数量
|
||||||
Integer cropCount = speciesLibraryMapper.getSpeciesCount(tenantId, baseId);
|
Integer cropCount = speciesLibraryMapper.getSpeciesCount(tenantId, baseId);
|
||||||
// 在种地块占比
|
// 在种地块占比
|
||||||
double plotRatio = 0.00;
|
double plotRatio = 0.00;
|
||||||
// 在种地块数量
|
// 在种地块数量
|
||||||
int plotCount = productionPlanService.getGrowingPlotCount(baseId);
|
int plotCount = productionPlanService.getGrowingPlotCount(baseId);
|
||||||
// 地块总数
|
|
||||||
int plotTotalCount = plotList.size();
|
|
||||||
if (plotTotalCount > 0) {
|
if (plotTotalCount > 0) {
|
||||||
plotRatio = Math.round((plotCount * 10000.0) / plotTotalCount) / 100.0;
|
plotRatio = Math.round((plotCount * 10000.0) / plotTotalCount) / 100.0;
|
||||||
}
|
}
|
||||||
@@ -464,29 +492,21 @@ public class BaseInfoServiceImpl implements BaseInfoService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private List<BaseInfoRespVO.PlotInfo> packagePlotInfo(Map<String, String> employeeMap, List<PlotInfoDO> plotList) {
|
private List<BaseInfoRespVO.PlotInfo> packagePlotInfo(Map<String, String> employeeMap, List<PlotInfoDO> plotList) {
|
||||||
List<BaseInfoRespVO.PlotInfo> targetList = new ArrayList<>();
|
return plotList.stream().map(aDo ->
|
||||||
for (PlotInfoDO aDo : plotList) {
|
new BaseInfoRespVO.PlotInfo(
|
||||||
// 网箱
|
|
||||||
// List<ProductionPlanGridRespVO> gridInfos = this.packageGridInfo(aDo.getPlotId());
|
|
||||||
List<ProductionPlanGridRespVO> gridInfos = Collections.EMPTY_LIST;
|
|
||||||
// 户主
|
|
||||||
List<PlotLesseeDetailsRespVO> lesseeList = plotLesseeService.getPlotLesseeList(aDo.getId());
|
|
||||||
String plotManager = employeeMap.getOrDefault(aDo.getEmployeeId(), "系统");
|
|
||||||
BaseInfoRespVO.PlotInfo target = new BaseInfoRespVO.PlotInfo(
|
|
||||||
aDo.getId(),
|
aDo.getId(),
|
||||||
aDo.getPlotName(),
|
aDo.getPlotName(),
|
||||||
aDo.getPlotColor(),
|
aDo.getPlotColor(),
|
||||||
BigDecimalUtil.roundedViaMath(aDo.getPlotArea()),
|
BigDecimalUtil.roundedViaMath(aDo.getPlotArea()),
|
||||||
plotManager,
|
"",
|
||||||
aDo.getPoint(),
|
aDo.getPoint(),
|
||||||
aDo.getPlotLeaseStatus(),
|
aDo.getPlotLeaseStatus(),
|
||||||
LEASE_STATUS_MAP.get(aDo.getPlotLeaseStatus()),
|
"",
|
||||||
|
// LEASE_STATUS_MAP.get(aDo.getPlotLeaseStatus()),
|
||||||
aDo.getGridNumber(),
|
aDo.getGridNumber(),
|
||||||
gridInfos,
|
Collections.EMPTY_LIST,
|
||||||
lesseeList);
|
Collections.EMPTY_LIST)
|
||||||
targetList.add(target);
|
).toList();
|
||||||
}
|
|
||||||
return targetList;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<ProductionPlanGridRespVO> packageGridInfo(String plotId) {
|
private List<ProductionPlanGridRespVO> packageGridInfo(String plotId) {
|
||||||
|
|||||||
@@ -70,7 +70,10 @@ public interface DeviceClassifyService {
|
|||||||
|
|
||||||
Map<String, String> getTypeNameMap();
|
Map<String, String> getTypeNameMap();
|
||||||
Map<String, String> getTypeCodeMap();
|
Map<String, String> getTypeCodeMap();
|
||||||
|
Map<String, String> getImageMap();
|
||||||
|
|
||||||
Map<String, String> getTypeNameMap(String tenantId);
|
Map<String, String> getTypeNameMap(String tenantId);
|
||||||
Map<String, String> getTypeCodeMap(String tenantId);
|
Map<String, String> getTypeCodeMap(String tenantId);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -234,6 +234,18 @@ public class DeviceClassifyServiceImpl implements DeviceClassifyService {
|
|||||||
return typeCodeMap;
|
return typeCodeMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<String, String> getImageMap() {
|
||||||
|
LambdaQueryWrapperX<DeviceClassifyDO> x = new LambdaQueryWrapperX<>();
|
||||||
|
x.eq(DeviceClassifyDO::getTenantId, getLoginUser().getTenantId());
|
||||||
|
List<DeviceClassifyDO> deviceClassifyDOS = deviceClassifyMapper.selectList(x);
|
||||||
|
|
||||||
|
Map<String, String> imageMap = deviceClassifyDOS.stream().filter(device -> device.getParentId() != null && device.getParentId() != 0)
|
||||||
|
.collect(Collectors.toMap(e -> e.getParentId().toString(), DeviceClassifyDO::getImage));
|
||||||
|
|
||||||
|
return imageMap;
|
||||||
|
}
|
||||||
|
|
||||||
public Map<String, String> getTypeNameMap(String tenantId) {
|
public Map<String, String> getTypeNameMap(String tenantId) {
|
||||||
LambdaQueryWrapperX<DeviceClassifyDO> x = new LambdaQueryWrapperX<>();
|
LambdaQueryWrapperX<DeviceClassifyDO> x = new LambdaQueryWrapperX<>();
|
||||||
x.eq(DeviceClassifyDO::getTenantId, tenantId);
|
x.eq(DeviceClassifyDO::getTenantId, tenantId);
|
||||||
@@ -254,4 +266,5 @@ public class DeviceClassifyServiceImpl implements DeviceClassifyService {
|
|||||||
return typeCodeMap;
|
return typeCodeMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -275,17 +275,17 @@ public class DeviceInfoServiceImpl implements DeviceInfoService {
|
|||||||
@Override
|
@Override
|
||||||
public PageResult<DeviceInfoDO> getDeviceInfoPage(DeviceInfoPageReqVO pageReqVO) {
|
public PageResult<DeviceInfoDO> getDeviceInfoPage(DeviceInfoPageReqVO pageReqVO) {
|
||||||
PageResult<DeviceInfoDO> pageResult = deviceInfoMapper.selectPage(pageReqVO);
|
PageResult<DeviceInfoDO> pageResult = deviceInfoMapper.selectPage(pageReqVO);
|
||||||
if (pageResult.getList() != null) {
|
// if (pageResult.getList() != null) {
|
||||||
// 触发图片集合转换,确保分页结果中的每个DO对象都包含转换后的图片集合
|
// // 触发图片集合转换,确保分页结果中的每个DO对象都包含转换后的图片集合
|
||||||
for (DeviceInfoDO d : pageResult.getList()) {
|
// for (DeviceInfoDO d : pageResult.getList()) {
|
||||||
if (d == null) {
|
// if (d == null) {
|
||||||
continue;
|
// continue;
|
||||||
}
|
// }
|
||||||
DeviceClassifyDO dc = deviceClassifyMapper.selectOne(DeviceClassifyDO::getId, d.getDeviceType());
|
// DeviceClassifyDO dc = deviceClassifyMapper.selectOne(DeviceClassifyDO::getId, d.getDeviceType());
|
||||||
d.setImage(dc.getImage());
|
// d.setImage(dc.getImage());
|
||||||
d.setImageList(dc.getImageList());
|
//// d.setImageList(dc.getImageList());
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
return pageResult;
|
return pageResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,19 @@
|
|||||||
|
package cn.iocoder.yudao.module.farm.service.foundationinfo;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.largescreen.foundationinfo.vo.DataToggleReqVO;
|
||||||
|
import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.largescreen.foundationinfo.vo.DataToggleRespVO;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description:
|
||||||
|
* @author: binda
|
||||||
|
* @date: 2025/11/20 22:56
|
||||||
|
*/
|
||||||
|
public interface CockpitMockInfoService {
|
||||||
|
|
||||||
|
|
||||||
|
void createDataToggle(List<DataToggleReqVO> createReqVO);
|
||||||
|
|
||||||
|
List<DataToggleRespVO> getDataToggle(String baseId);
|
||||||
|
}
|
||||||
@@ -0,0 +1,109 @@
|
|||||||
|
package cn.iocoder.yudao.module.farm.service.foundationinfo;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.IdUtil;
|
||||||
|
import cn.hutool.json.JSONUtil;
|
||||||
|
import cn.idev.excel.util.StringUtils;
|
||||||
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||||
|
import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.largescreen.foundationinfo.vo.DataToggleReqVO;
|
||||||
|
import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.largescreen.foundationinfo.vo.DataToggleRespVO;
|
||||||
|
import cn.iocoder.yudao.module.farm.dal.dataobject.foundationinfo.CockpitMockInfoDO;
|
||||||
|
import cn.iocoder.yudao.module.farm.dal.mysql.foundationinfo.CockpitMockInfoMapper;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
|
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
||||||
|
import jakarta.annotation.Resource;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description: TODO
|
||||||
|
* @author: binda
|
||||||
|
* @date: 2025/11/20 22:57
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
public class CockpitMockInfoServiceImpl implements CockpitMockInfoService {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private CockpitMockInfoMapper cockpitMockInfoMapper;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
public void createDataToggle(List<DataToggleReqVO> createReqVO) {
|
||||||
|
if (CollectionUtils.isEmpty(createReqVO)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 1. 处理 baseId 为 null 的情况,设置为 "0"
|
||||||
|
for (DataToggleReqVO vo : createReqVO) {
|
||||||
|
if (vo.getBaseId() == null) {
|
||||||
|
vo.setBaseId("0");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2. 获取所有需要处理的 baseId(包括全局数据 baseId=0)
|
||||||
|
Set<String> baseIds = createReqVO.stream()
|
||||||
|
.map(DataToggleReqVO::getBaseId)
|
||||||
|
.collect(Collectors.toSet());
|
||||||
|
|
||||||
|
// 3. 删除这些 baseId 对应的所有现有数据
|
||||||
|
if (!baseIds.isEmpty()) {
|
||||||
|
cockpitMockInfoMapper.delete(new LambdaQueryWrapper<CockpitMockInfoDO>()
|
||||||
|
.in(CockpitMockInfoDO::getBaseId, baseIds));
|
||||||
|
}
|
||||||
|
|
||||||
|
// 4. 保存新的数据
|
||||||
|
List<CockpitMockInfoDO> saveList = new ArrayList<>();
|
||||||
|
for (DataToggleReqVO vo : createReqVO) {
|
||||||
|
CockpitMockInfoDO entity = new CockpitMockInfoDO();
|
||||||
|
entity.setId(IdUtil.fastUUID());
|
||||||
|
entity.setBaseId(vo.getBaseId());
|
||||||
|
entity.setFlag(vo.getFlag());
|
||||||
|
entity.setType(vo.getType());
|
||||||
|
|
||||||
|
// 将 data 对象转换为 JSON 字符串
|
||||||
|
if (vo.getData() != null) {
|
||||||
|
entity.setJsonData(JSONUtil.toJsonStr(vo.getData()));
|
||||||
|
}
|
||||||
|
|
||||||
|
saveList.add(entity);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 5. 批量插入新数据
|
||||||
|
if (!saveList.isEmpty()) {
|
||||||
|
cockpitMockInfoMapper.insertBatch(saveList);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<DataToggleRespVO> getDataToggle(String baseId) {
|
||||||
|
// 查询数据库记录
|
||||||
|
List<CockpitMockInfoDO> entityList = cockpitMockInfoMapper.selectList(
|
||||||
|
new LambdaQueryWrapper<CockpitMockInfoDO>()
|
||||||
|
.eq(CockpitMockInfoDO::getBaseId, baseId)
|
||||||
|
);
|
||||||
|
|
||||||
|
// 转换为响应VO
|
||||||
|
List<DataToggleRespVO> result = new ArrayList<>();
|
||||||
|
for (CockpitMockInfoDO entity : entityList) {
|
||||||
|
DataToggleRespVO vo = BeanUtils.toBean(entity, DataToggleRespVO.class);
|
||||||
|
|
||||||
|
// 特殊处理 jsonData 到 data 的转换
|
||||||
|
if (StringUtils.isNotBlank(entity.getJsonData())) {
|
||||||
|
try {
|
||||||
|
Object data = JSONUtil.parse(entity.getJsonData());
|
||||||
|
vo.setData(data);
|
||||||
|
} catch (Exception e) {
|
||||||
|
vo.setData(entity.getJsonData());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
result.add(vo);
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -7,6 +7,7 @@ import cn.iocoder.yudao.framework.security.core.LoginUser;
|
|||||||
import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.largescreen.foundationinfo.vo.FoundationInfoPageReqVO;
|
import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.largescreen.foundationinfo.vo.FoundationInfoPageReqVO;
|
||||||
import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.largescreen.foundationinfo.vo.FoundationInfoSaveReqVO;
|
import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.largescreen.foundationinfo.vo.FoundationInfoSaveReqVO;
|
||||||
import cn.iocoder.yudao.module.farm.dal.dataobject.foundationinfo.FoundationInfoDO;
|
import cn.iocoder.yudao.module.farm.dal.dataobject.foundationinfo.FoundationInfoDO;
|
||||||
|
import cn.iocoder.yudao.module.farm.dal.mysql.foundationinfo.CockpitMockInfoMapper;
|
||||||
import cn.iocoder.yudao.module.farm.dal.mysql.foundationinfo.FoundationInfoMapper;
|
import cn.iocoder.yudao.module.farm.dal.mysql.foundationinfo.FoundationInfoMapper;
|
||||||
import jakarta.annotation.Resource;
|
import jakarta.annotation.Resource;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
@@ -29,6 +30,8 @@ public class FoundationInfoServiceImpl implements FoundationInfoService {
|
|||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private FoundationInfoMapper foundationInfoMapper;
|
private FoundationInfoMapper foundationInfoMapper;
|
||||||
|
@Resource
|
||||||
|
private CockpitMockInfoMapper cockpitMockMapper;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String createFoundationInfo(FoundationInfoSaveReqVO createReqVO) {
|
public String createFoundationInfo(FoundationInfoSaveReqVO createReqVO) {
|
||||||
|
|||||||
@@ -369,7 +369,7 @@ public class HomeServiceImpl implements HomeService {
|
|||||||
int progressBarDenominator = modelManagementService.getFarmRecordCount(e.getSpeciesModelId());
|
int progressBarDenominator = modelManagementService.getFarmRecordCount(e.getSpeciesModelId());
|
||||||
// 任务进度
|
// 任务进度
|
||||||
String progressBar = progressBarNumerator +"/"+progressBarDenominator;
|
String progressBar = progressBarNumerator +"/"+progressBarDenominator;
|
||||||
|
Integer predictedGridNumber = e.getPredictedGridNumber();
|
||||||
|
|
||||||
PlanInfo target = new PlanInfo();
|
PlanInfo target = new PlanInfo();
|
||||||
target.setBaseId(e.getBaseId());
|
target.setBaseId(e.getBaseId());
|
||||||
@@ -383,7 +383,8 @@ public class HomeServiceImpl implements HomeService {
|
|||||||
target.setProgressBar(progressBar);
|
target.setProgressBar(progressBar);
|
||||||
target.setProgressBarNumerator(progressBarNumerator);
|
target.setProgressBarNumerator(progressBarNumerator);
|
||||||
target.setProgressBarDenominator(progressBarDenominator);
|
target.setProgressBarDenominator(progressBarDenominator);
|
||||||
target.setPredictedArea(Double.valueOf(beingPlotArea));
|
target.setPredictedArea(beingPlotArea);
|
||||||
|
target.setPredictedGridNumber(predictedGridNumber);
|
||||||
target.setPredictedYields(e.getPredictedYields());
|
target.setPredictedYields(e.getPredictedYields());
|
||||||
target.setPlanStatus(e.getPlanStatus());
|
target.setPlanStatus(e.getPlanStatus());
|
||||||
target.setPlanStatusName(PLAN_MAP.getOrDefault(e.getPlanStatus(),"未开始"));
|
target.setPlanStatusName(PLAN_MAP.getOrDefault(e.getPlanStatus(),"未开始"));
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package cn.iocoder.yudao.module.farm.service.messagecenter;
|
package cn.iocoder.yudao.module.farm.service.messagecenter;
|
||||||
|
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
|
import cn.iocoder.yudao.module.farm.controller.admin.digitalcockpit.vo.VariousIndexesRespVO;
|
||||||
import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.messagecenter.vo.MessageCenterPageReqVO;
|
import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.messagecenter.vo.MessageCenterPageReqVO;
|
||||||
import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.messagecenter.vo.MessageCenterSaveReqVO;
|
import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.messagecenter.vo.MessageCenterSaveReqVO;
|
||||||
import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.messagecenter.vo.MessageStatisticsRespVO;
|
import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.messagecenter.vo.MessageStatisticsRespVO;
|
||||||
@@ -77,4 +78,11 @@ public interface MessageCenterService {
|
|||||||
* @param messageType
|
* @param messageType
|
||||||
*/
|
*/
|
||||||
void pushMessage(String title, String content, Integer messageType);
|
void pushMessage(String title, String content, Integer messageType);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 预警统计
|
||||||
|
* @param baseId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
VariousIndexesRespVO getVariousIndexes(String baseId);
|
||||||
}
|
}
|
||||||
@@ -4,6 +4,7 @@ import cn.hutool.core.util.IdUtil;
|
|||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||||
import cn.iocoder.yudao.framework.security.core.LoginUser;
|
import cn.iocoder.yudao.framework.security.core.LoginUser;
|
||||||
|
import cn.iocoder.yudao.module.farm.controller.admin.digitalcockpit.vo.VariousIndexesRespVO;
|
||||||
import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.messagecenter.vo.MessageCenterPageReqVO;
|
import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.messagecenter.vo.MessageCenterPageReqVO;
|
||||||
import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.messagecenter.vo.MessageCenterSaveReqVO;
|
import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.messagecenter.vo.MessageCenterSaveReqVO;
|
||||||
import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.messagecenter.vo.MessageStatisticsRespVO;
|
import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.messagecenter.vo.MessageStatisticsRespVO;
|
||||||
@@ -146,4 +147,10 @@ public class MessageCenterServiceImpl implements MessageCenterService {
|
|||||||
|
|
||||||
this.createMessageCenter(m);
|
this.createMessageCenter(m);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public VariousIndexesRespVO getVariousIndexes(String baseId) {
|
||||||
|
VariousIndexesRespVO res = messageCenterMapper.getVariousIndexes(baseId);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -1,64 +0,0 @@
|
|||||||
package cn.iocoder.yudao.module.farm.service.pestdiseaseweedlibrary;
|
|
||||||
|
|
||||||
import cn.iocoder.yudao.module.farm.controller.admin.pestdiseaseweedlibrary.vo.PestDiseaseWeedLibraryPageReqVO;
|
|
||||||
import cn.iocoder.yudao.module.farm.controller.admin.pestdiseaseweedlibrary.vo.PestDiseaseWeedLibrarySaveReqVO;
|
|
||||||
import cn.iocoder.yudao.module.farm.dal.dataobject.pestdiseaseweedlibrary.PestDiseaseWeedLibraryDO;
|
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
|
||||||
import jakarta.validation.Valid;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 病虫草害库维护 Service 接口
|
|
||||||
*
|
|
||||||
* @author 芋道源码
|
|
||||||
*/
|
|
||||||
public interface PestDiseaseWeedLibraryService {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 创建病虫草害库维护
|
|
||||||
*
|
|
||||||
* @param createReqVO 创建信息
|
|
||||||
* @return 编号
|
|
||||||
*/
|
|
||||||
String createPestDiseaseWeedLibrary(@Valid PestDiseaseWeedLibrarySaveReqVO createReqVO);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 更新病虫草害库维护
|
|
||||||
*
|
|
||||||
* @param updateReqVO 更新信息
|
|
||||||
*/
|
|
||||||
void updatePestDiseaseWeedLibrary(@Valid PestDiseaseWeedLibrarySaveReqVO updateReqVO);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 删除病虫草害库维护
|
|
||||||
*
|
|
||||||
* @param id 编号
|
|
||||||
*/
|
|
||||||
void deletePestDiseaseWeedLibrary(String id);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 批量删除病虫草害库维护
|
|
||||||
*
|
|
||||||
* @param ids 编号
|
|
||||||
*/
|
|
||||||
void deletePestDiseaseWeedLibraryListByIds(List<String> ids);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获得病虫草害库维护
|
|
||||||
*
|
|
||||||
* @param id 编号
|
|
||||||
* @return 病虫草害库维护
|
|
||||||
*/
|
|
||||||
PestDiseaseWeedLibraryDO getPestDiseaseWeedLibrary(String id);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获得病虫草害库维护分页
|
|
||||||
*
|
|
||||||
* @param pageReqVO 分页查询
|
|
||||||
* @return 病虫草害库维护分页
|
|
||||||
*/
|
|
||||||
PageResult<PestDiseaseWeedLibraryDO> getPestDiseaseWeedLibraryPage(PestDiseaseWeedLibraryPageReqVO pageReqVO);
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,106 +0,0 @@
|
|||||||
package cn.iocoder.yudao.module.farm.service.pestdiseaseweedlibrary;
|
|
||||||
|
|
||||||
import cn.hutool.core.collection.CollUtil;
|
|
||||||
import cn.hutool.core.util.IdUtil;
|
|
||||||
import cn.iocoder.yudao.module.farm.controller.admin.pestdiseaseweedlibrary.vo.PestDiseaseWeedLibraryPageReqVO;
|
|
||||||
import cn.iocoder.yudao.module.farm.controller.admin.pestdiseaseweedlibrary.vo.PestDiseaseWeedLibrarySaveReqVO;
|
|
||||||
import org.springframework.stereotype.Service;
|
|
||||||
import jakarta.annotation.Resource;
|
|
||||||
import org.springframework.validation.annotation.Validated;
|
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
|
||||||
|
|
||||||
import cn.iocoder.yudao.module.farm.dal.dataobject.pestdiseaseweedlibrary.PestDiseaseWeedLibraryDO;
|
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
|
||||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
|
||||||
import cn.iocoder.yudao.framework.security.core.LoginUser;
|
|
||||||
|
|
||||||
import cn.iocoder.yudao.module.farm.dal.mysql.pestdiseaseweedlibrary.PestDiseaseWeedLibraryMapper;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
|
||||||
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
|
|
||||||
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.diffList;
|
|
||||||
import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUser;
|
|
||||||
import static cn.iocoder.yudao.module.farm.enums.ErrorCodeConstants.PEST_DISEASE_WEED_LIBRARY_NOT_EXISTS;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 病虫草害库维护 Service 实现类
|
|
||||||
*
|
|
||||||
* @author 芋道源码
|
|
||||||
*/
|
|
||||||
@Service
|
|
||||||
@Validated
|
|
||||||
public class PestDiseaseWeedLibraryServiceImpl implements PestDiseaseWeedLibraryService {
|
|
||||||
|
|
||||||
@Resource
|
|
||||||
private PestDiseaseWeedLibraryMapper pestDiseaseWeedLibraryMapper;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String createPestDiseaseWeedLibrary(PestDiseaseWeedLibrarySaveReqVO createReqVO) {
|
|
||||||
LoginUser user = getLoginUser();
|
|
||||||
// 插入
|
|
||||||
PestDiseaseWeedLibraryDO pestDiseaseWeedLibrary = BeanUtils.toBean(createReqVO, PestDiseaseWeedLibraryDO.class);
|
|
||||||
pestDiseaseWeedLibrary.setId(IdUtil.fastUUID());
|
|
||||||
pestDiseaseWeedLibrary.setTenantId(String.valueOf(user.getTenantId()));
|
|
||||||
pestDiseaseWeedLibraryMapper.insert(pestDiseaseWeedLibrary);
|
|
||||||
|
|
||||||
// 返回
|
|
||||||
return pestDiseaseWeedLibrary.getId();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void updatePestDiseaseWeedLibrary(PestDiseaseWeedLibrarySaveReqVO updateReqVO) {
|
|
||||||
// 校验存在
|
|
||||||
validatePestDiseaseWeedLibraryExists(updateReqVO.getId());
|
|
||||||
// 更新
|
|
||||||
PestDiseaseWeedLibraryDO updateObj = BeanUtils.toBean(updateReqVO, PestDiseaseWeedLibraryDO.class);
|
|
||||||
pestDiseaseWeedLibraryMapper.updateById(updateObj);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void deletePestDiseaseWeedLibrary(String id) {
|
|
||||||
// 校验存在
|
|
||||||
validatePestDiseaseWeedLibraryExists(id);
|
|
||||||
// 删除
|
|
||||||
pestDiseaseWeedLibraryMapper.deleteById(id);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void deletePestDiseaseWeedLibraryListByIds(List<String> ids) {
|
|
||||||
// 删除
|
|
||||||
pestDiseaseWeedLibraryMapper.deleteByIds(ids);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void validatePestDiseaseWeedLibraryExists(String id) {
|
|
||||||
if (pestDiseaseWeedLibraryMapper.selectById(id) == null) {
|
|
||||||
throw exception(PEST_DISEASE_WEED_LIBRARY_NOT_EXISTS);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public PestDiseaseWeedLibraryDO getPestDiseaseWeedLibrary(String id) {
|
|
||||||
PestDiseaseWeedLibraryDO pestDiseaseWeedLibrary = pestDiseaseWeedLibraryMapper.selectById(id);
|
|
||||||
if (pestDiseaseWeedLibrary != null) {
|
|
||||||
// 触发图片集合转换,确保返回的DO对象包含转换后的图片集合
|
|
||||||
pestDiseaseWeedLibrary.getImageList();
|
|
||||||
}
|
|
||||||
return pestDiseaseWeedLibrary;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public PageResult<PestDiseaseWeedLibraryDO> getPestDiseaseWeedLibraryPage(PestDiseaseWeedLibraryPageReqVO pageReqVO) {
|
|
||||||
PageResult<PestDiseaseWeedLibraryDO> pageResult = pestDiseaseWeedLibraryMapper.selectPage(pageReqVO);
|
|
||||||
if (pageResult.getList() != null) {
|
|
||||||
// 触发图片集合转换,确保分页结果中的每个DO对象都包含转换后的图片集合
|
|
||||||
pageResult.getList().forEach(pestDiseaseWeedLibrary -> {
|
|
||||||
if (pestDiseaseWeedLibrary != null) {
|
|
||||||
pestDiseaseWeedLibrary.getImageList();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
return pageResult;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -9,6 +9,7 @@ import jakarta.validation.Valid;
|
|||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 地块 Service 接口
|
* 地块 Service 接口
|
||||||
@@ -117,4 +118,11 @@ public interface PlotInfoService {
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
List<PlotListRespVO> listPlotInfo(String baseId);
|
List<PlotListRespVO> listPlotInfo(String baseId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* id
|
||||||
|
* point
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
Map<String, String> getPlotPointMap();
|
||||||
}
|
}
|
||||||
@@ -26,6 +26,7 @@ import org.springframework.validation.annotation.Validated;
|
|||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||||
import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUser;
|
import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUser;
|
||||||
@@ -311,6 +312,17 @@ public class PlotInfoServiceImpl implements PlotInfoService {
|
|||||||
return pList;
|
return pList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<String, String> getPlotPointMap() {
|
||||||
|
LambdaQueryWrapperX<PlotInfoDO> wrapperX = new LambdaQueryWrapperX<>();
|
||||||
|
wrapperX.eq(PlotInfoDO::getDeleted, CommonConstants.NO_CODE);
|
||||||
|
List<PlotInfoDO> plotInfoDOS = plotInfoMapper.selectList(wrapperX);
|
||||||
|
|
||||||
|
Map<String, String> pointMap = plotInfoDOS.stream().collect(Collectors.toMap(PlotInfoDO::getId, PlotInfoDO::getPoint, (v1, v2) -> v1));
|
||||||
|
|
||||||
|
return pointMap;
|
||||||
|
}
|
||||||
|
|
||||||
// ==================== 私有方法 ====================
|
// ==================== 私有方法 ====================
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -36,11 +36,13 @@ public class PlotLesseeServiceImpl implements PlotLesseeService {
|
|||||||
private final BaseInfoMapper baseInfoMapper;
|
private final BaseInfoMapper baseInfoMapper;
|
||||||
private final PlotInfoMapper plotInfoMapper;
|
private final PlotInfoMapper plotInfoMapper;
|
||||||
private final PlotLesseeMapper plotLesseeMapper;
|
private final PlotLesseeMapper plotLesseeMapper;
|
||||||
|
private final PlotInfoCacheService pCatchService;
|
||||||
|
|
||||||
public PlotLesseeServiceImpl(BaseInfoMapper baseInfoMapper, PlotInfoMapper plotInfoMapper, PlotLesseeMapper plotLesseeMapper) {
|
public PlotLesseeServiceImpl(BaseInfoMapper baseInfoMapper, PlotInfoMapper plotInfoMapper, PlotLesseeMapper plotLesseeMapper, PlotInfoCacheService pCatchService) {
|
||||||
this.baseInfoMapper = baseInfoMapper;
|
this.baseInfoMapper = baseInfoMapper;
|
||||||
this.plotInfoMapper = plotInfoMapper;
|
this.plotInfoMapper = plotInfoMapper;
|
||||||
this.plotLesseeMapper = plotLesseeMapper;
|
this.plotLesseeMapper = plotLesseeMapper;
|
||||||
|
this.pCatchService = pCatchService;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -90,7 +92,7 @@ public class PlotLesseeServiceImpl implements PlotLesseeService {
|
|||||||
@Override
|
@Override
|
||||||
public PlotLesseeImportRespVO importPlotLesseeInfoExcel(List<PlotLesseeForImportExcelRespVO> req) {
|
public PlotLesseeImportRespVO importPlotLesseeInfoExcel(List<PlotLesseeForImportExcelRespVO> req) {
|
||||||
Map<String, String> baseNameMap = baseInfoMapper.selectList().stream().collect(Collectors.toMap(BaseInfoDO::getId, BaseInfoDO::getName, (v1, v2) -> v1));
|
Map<String, String> baseNameMap = baseInfoMapper.selectList().stream().collect(Collectors.toMap(BaseInfoDO::getId, BaseInfoDO::getName, (v1, v2) -> v1));
|
||||||
Map<String, String> plotNameMap = plotInfoMapper.selectList().stream().collect(Collectors.toMap(PlotInfoDO::getPlotName, PlotInfoDO::getId, (v1, v2) -> v1));
|
// Map<String, String> plotNameMap = plotInfoMapper.selectList().stream().collect(Collectors.toMap(PlotInfoDO::getPlotName, PlotInfoDO::getId, (v1, v2) -> v1));
|
||||||
|
|
||||||
PlotLesseeImportRespVO res = new PlotLesseeImportRespVO();
|
PlotLesseeImportRespVO res = new PlotLesseeImportRespVO();
|
||||||
res.setTotal(req.size());
|
res.setTotal(req.size());
|
||||||
@@ -124,6 +126,7 @@ public class PlotLesseeServiceImpl implements PlotLesseeService {
|
|||||||
p.setPlotLeaseStatus(NO_CODE);
|
p.setPlotLeaseStatus(NO_CODE);
|
||||||
p.setPlotColor(PLOT_COLOR_GREEN);
|
p.setPlotColor(PLOT_COLOR_GREEN);
|
||||||
plotInfoMapper.updateById(p);
|
plotInfoMapper.updateById(p);
|
||||||
|
pCatchService.createOrUpdatePlotInfo(p);
|
||||||
|
|
||||||
sourcePObj.setLeaseStatus(NO_CODE);
|
sourcePObj.setLeaseStatus(NO_CODE);
|
||||||
plotLesseeMapper.updateById(sourcePObj);
|
plotLesseeMapper.updateById(sourcePObj);
|
||||||
@@ -201,7 +204,7 @@ public class PlotLesseeServiceImpl implements PlotLesseeService {
|
|||||||
public List<PlotLesseeDetailsRespVO> getPlotLesseeHistoryList(String plotId) {
|
public List<PlotLesseeDetailsRespVO> getPlotLesseeHistoryList(String plotId) {
|
||||||
LambdaQueryWrapperX<PlotLesseeDO> x = new LambdaQueryWrapperX<>();
|
LambdaQueryWrapperX<PlotLesseeDO> x = new LambdaQueryWrapperX<>();
|
||||||
x.eq(PlotLesseeDO::getDeleted, NO_CODE);
|
x.eq(PlotLesseeDO::getDeleted, NO_CODE);
|
||||||
x.eq(PlotLesseeDO::getLeaseStatus, NO_CODE);
|
x.eq(PlotLesseeDO::getLeaseStatus, YES_CODE);
|
||||||
x.eq(PlotLesseeDO::getPlotId, plotId);
|
x.eq(PlotLesseeDO::getPlotId, plotId);
|
||||||
List<PlotLesseeDO> list = plotLesseeMapper.selectList(x);
|
List<PlotLesseeDO> list = plotLesseeMapper.selectList(x);
|
||||||
|
|
||||||
@@ -276,6 +279,7 @@ public class PlotLesseeServiceImpl implements PlotLesseeService {
|
|||||||
p.setPlotLeaseStatus(YES_CODE);
|
p.setPlotLeaseStatus(YES_CODE);
|
||||||
p.setPlotColor(PLOT_COLOR_BLUE);
|
p.setPlotColor(PLOT_COLOR_BLUE);
|
||||||
plotInfoMapper.updateById(p);
|
plotInfoMapper.updateById(p);
|
||||||
|
pCatchService.createOrUpdatePlotInfo(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -475,7 +475,7 @@ public class ProductionPlanServiceImpl implements ProductionPlanService {
|
|||||||
@Override
|
@Override
|
||||||
public List<YieldStatisticsRespVO> getCultivatingYieldInfo(String baseId, String year) {
|
public List<YieldStatisticsRespVO> getCultivatingYieldInfo(String baseId, String year) {
|
||||||
|
|
||||||
return null;
|
return Collections.EMPTY_LIST;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import java.util.*;
|
|||||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||||
import cn.iocoder.yudao.module.farm.controller.admin.api.vo.DisasterAnalysisReqVO;
|
import cn.iocoder.yudao.module.farm.controller.admin.api.vo.DisasterAnalysisReqVO;
|
||||||
import cn.iocoder.yudao.module.farm.controller.admin.api.vo.DisasterAnalysisRespVO;
|
import cn.iocoder.yudao.module.farm.controller.admin.api.vo.DisasterAnalysisRespVO;
|
||||||
|
import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.largescreen.screendisasterdata.vo.DisasterDataStatisticsInfoV2RespVO;
|
||||||
import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.largescreen.screendisasterdata.vo.ScreenDisasterDataPageReqVO;
|
import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.largescreen.screendisasterdata.vo.ScreenDisasterDataPageReqVO;
|
||||||
import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.largescreen.screendisasterdata.vo.ScreenDisasterDataSaveReqVO;
|
import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.largescreen.screendisasterdata.vo.ScreenDisasterDataSaveReqVO;
|
||||||
import jakarta.validation.*;
|
import jakarta.validation.*;
|
||||||
@@ -71,4 +72,6 @@ public interface ScreenDisasterDataService {
|
|||||||
*/
|
*/
|
||||||
CommonResult<List<DisasterAnalysisRespVO>> getDisasterStatisticsChart(DisasterAnalysisReqVO req);
|
CommonResult<List<DisasterAnalysisRespVO>> getDisasterStatisticsChart(DisasterAnalysisReqVO req);
|
||||||
|
|
||||||
|
List<DisasterDataStatisticsInfoV2RespVO> getScreenDisasterDataStatisticsInfo();
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -6,6 +6,8 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
|||||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||||
import cn.iocoder.yudao.module.farm.controller.admin.api.vo.DisasterAnalysisReqVO;
|
import cn.iocoder.yudao.module.farm.controller.admin.api.vo.DisasterAnalysisReqVO;
|
||||||
import cn.iocoder.yudao.module.farm.controller.admin.api.vo.DisasterAnalysisRespVO;
|
import cn.iocoder.yudao.module.farm.controller.admin.api.vo.DisasterAnalysisRespVO;
|
||||||
|
import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.largescreen.screendisasterdata.vo.DisasterDataStatisticsInfoRespVO;
|
||||||
|
import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.largescreen.screendisasterdata.vo.DisasterDataStatisticsInfoV2RespVO;
|
||||||
import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.largescreen.screendisasterdata.vo.ScreenDisasterDataPageReqVO;
|
import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.largescreen.screendisasterdata.vo.ScreenDisasterDataPageReqVO;
|
||||||
import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.largescreen.screendisasterdata.vo.ScreenDisasterDataSaveReqVO;
|
import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.largescreen.screendisasterdata.vo.ScreenDisasterDataSaveReqVO;
|
||||||
import cn.iocoder.yudao.module.farm.dal.dataobject.baseinfo.BaseInfoDO;
|
import cn.iocoder.yudao.module.farm.dal.dataobject.baseinfo.BaseInfoDO;
|
||||||
@@ -105,4 +107,23 @@ public class ScreenDisasterDataServiceImpl implements ScreenDisasterDataService
|
|||||||
return CommonResult.success(res);
|
return CommonResult.success(res);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<DisasterDataStatisticsInfoV2RespVO> getScreenDisasterDataStatisticsInfo() {
|
||||||
|
List<DisasterDataStatisticsInfoRespVO> sourceList = screenDisasterDataMapper.getScreenDisasterDataStatisticsInfo();
|
||||||
|
List<DisasterDataStatisticsInfoV2RespVO> result = sourceList.stream()
|
||||||
|
.collect(Collectors.groupingBy(
|
||||||
|
DisasterDataStatisticsInfoRespVO::getCategory,
|
||||||
|
Collectors.toList()
|
||||||
|
))
|
||||||
|
.entrySet()
|
||||||
|
.stream()
|
||||||
|
.map(entry -> new DisasterDataStatisticsInfoV2RespVO(
|
||||||
|
entry.getKey(),
|
||||||
|
entry.getValue()
|
||||||
|
))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?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">
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
<mapper namespace="cn.iocoder.yudao.module.farm.dal.mysql.pestdiseaseweedlibrary.PestDiseaseWeedLibraryMapper">
|
<mapper namespace="cn.iocoder.yudao.module.farm.dal.mysql.foundationinfo.CockpitMockInfoMapper">
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
|
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
|
||||||
@@ -9,4 +9,5 @@
|
|||||||
文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
|
文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
|
||||||
-->
|
-->
|
||||||
|
|
||||||
|
|
||||||
</mapper>
|
</mapper>
|
||||||
@@ -9,4 +9,20 @@
|
|||||||
文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
|
文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
|
||||||
-->
|
-->
|
||||||
|
|
||||||
|
<select id="getVariousIndexes"
|
||||||
|
resultType="cn.iocoder.yudao.module.farm.controller.admin.digitalcockpit.vo.VariousIndexesRespVO">
|
||||||
|
SELECT
|
||||||
|
COALESCE(SUM(CASE WHEN message_type = 1 THEN 1 ELSE 0 END), 0) as weatherAlertCount,
|
||||||
|
COALESCE(SUM(CASE WHEN message_type = 100 THEN 1 ELSE 0 END), 0) as pestAlertCount,
|
||||||
|
COALESCE(SUM(CASE WHEN message_type = 10 THEN 1 ELSE 0 END), 0) as environmentalAlertCount,
|
||||||
|
COALESCE(SUM(CASE WHEN message_type = 2 THEN 1 ELSE 0 END), 0) as deviceAlertCount,
|
||||||
|
COALESCE(SUM(CASE WHEN message_type = 3 THEN 1 ELSE 0 END), 0) as farmingReminderCount
|
||||||
|
FROM farm_message_center
|
||||||
|
<where>
|
||||||
|
deleted = 0
|
||||||
|
<if test="baseId != null and baseId != ''">
|
||||||
|
AND base_id = #{baseId}
|
||||||
|
</if>
|
||||||
|
</where>
|
||||||
|
</select>
|
||||||
</mapper>
|
</mapper>
|
||||||
@@ -68,4 +68,43 @@
|
|||||||
|
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<select id="getScreenDisasterDataStatisticsInfo"
|
||||||
|
resultType="cn.iocoder.yudao.module.farm.controller.admin.managementcenter.largescreen.screendisasterdata.vo.DisasterDataStatisticsInfoRespVO">
|
||||||
|
SELECT
|
||||||
|
CASE ct.category_type
|
||||||
|
WHEN '0' THEN '气象'
|
||||||
|
WHEN '1' THEN '虫害'
|
||||||
|
WHEN '2' THEN '病害'
|
||||||
|
WHEN '3' THEN '草害'
|
||||||
|
END as category,
|
||||||
|
ms.month_str as disasterTime,
|
||||||
|
YEAR(STR_TO_DATE(CONCAT(ms.month_str, '-01'), '%Y-%m-%d')) as year,
|
||||||
|
COALESCE(SUM(fsdd.disaster_count), 0) as totalCount
|
||||||
|
FROM (
|
||||||
|
SELECT DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL n MONTH), '%Y-%m') as month_str
|
||||||
|
FROM (
|
||||||
|
SELECT 0 as n UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5
|
||||||
|
UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION SELECT 10 UNION SELECT 11
|
||||||
|
UNION SELECT 12 UNION SELECT 13 UNION SELECT 14 UNION SELECT 15 UNION SELECT 16 UNION SELECT 17
|
||||||
|
UNION SELECT 18 UNION SELECT 19 UNION SELECT 20 UNION SELECT 21 UNION SELECT 22 UNION SELECT 23
|
||||||
|
) months
|
||||||
|
) ms
|
||||||
|
CROSS JOIN (
|
||||||
|
SELECT '0' as category_type
|
||||||
|
UNION ALL
|
||||||
|
SELECT '1' as category_type
|
||||||
|
UNION ALL
|
||||||
|
SELECT '2' as category_type
|
||||||
|
UNION ALL
|
||||||
|
SELECT '3' as category_type
|
||||||
|
) ct
|
||||||
|
LEFT JOIN farm_screen_disaster_data fsdd ON
|
||||||
|
ct.category_type = fsdd.category
|
||||||
|
AND ms.month_str = fsdd.disaster_time
|
||||||
|
AND fsdd.deleted = 0
|
||||||
|
AND fsdd.use_status = 1
|
||||||
|
GROUP BY ct.category_type, ms.month_str
|
||||||
|
ORDER BY ms.month_str, ct.category_type
|
||||||
|
</select>
|
||||||
|
|
||||||
</mapper>
|
</mapper>
|
||||||
@@ -8,6 +8,7 @@ import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
|||||||
import cn.iocoder.yudao.framework.security.config.SecurityProperties;
|
import cn.iocoder.yudao.framework.security.config.SecurityProperties;
|
||||||
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
|
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
|
||||||
import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore;
|
import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore;
|
||||||
|
import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.auth.vo.*;
|
import cn.iocoder.yudao.module.system.controller.admin.auth.vo.*;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.auth.vo.diy.LoginForTenantReqVO;
|
import cn.iocoder.yudao.module.system.controller.admin.auth.vo.diy.LoginForTenantReqVO;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.auth.vo.diy.TenantRespVO;
|
import cn.iocoder.yudao.module.system.controller.admin.auth.vo.diy.TenantRespVO;
|
||||||
@@ -22,7 +23,6 @@ import cn.iocoder.yudao.module.system.service.permission.PermissionService;
|
|||||||
import cn.iocoder.yudao.module.system.service.permission.RoleService;
|
import cn.iocoder.yudao.module.system.service.permission.RoleService;
|
||||||
import cn.iocoder.yudao.module.system.service.social.SocialClientService;
|
import cn.iocoder.yudao.module.system.service.social.SocialClientService;
|
||||||
import cn.iocoder.yudao.module.system.service.user.AdminUserService;
|
import cn.iocoder.yudao.module.system.service.user.AdminUserService;
|
||||||
import cn.iocoder.yudao.module.system.util.TokenExtractorUtil;
|
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.Parameter;
|
import io.swagger.v3.oas.annotations.Parameter;
|
||||||
import io.swagger.v3.oas.annotations.Parameters;
|
import io.swagger.v3.oas.annotations.Parameters;
|
||||||
@@ -86,11 +86,13 @@ public class AuthController {
|
|||||||
@PermitAll
|
@PermitAll
|
||||||
@Operation(summary = "登出系统")
|
@Operation(summary = "登出系统")
|
||||||
public CommonResult<Boolean> logout(HttpServletRequest request) {
|
public CommonResult<Boolean> logout(HttpServletRequest request) {
|
||||||
|
log.info("logout 之前: tenantId ==> {}", TenantContextHolder.getTenantId() );
|
||||||
String token = SecurityFrameworkUtils.obtainAuthorization(request,
|
String token = SecurityFrameworkUtils.obtainAuthorization(request,
|
||||||
securityProperties.getTokenHeader(), securityProperties.getTokenParameter());
|
securityProperties.getTokenHeader(), securityProperties.getTokenParameter());
|
||||||
if (StrUtil.isNotBlank(token)) {
|
if (StrUtil.isNotBlank(token)) {
|
||||||
authService.logout(token, LoginLogTypeEnum.LOGOUT_SELF.getType());
|
authService.logout(token, LoginLogTypeEnum.LOGOUT_SELF.getType());
|
||||||
}
|
}
|
||||||
|
log.info("logout 之后: tenantId ==> {}", TenantContextHolder.getTenantId() );
|
||||||
return success(true);
|
return success(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -162,12 +164,43 @@ public class AuthController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// @PermitAll
|
||||||
|
// @PostMapping("/login-by-tenant")
|
||||||
|
// @Operation(summary = "登录 (切换租户之后调用)")
|
||||||
|
// public CommonResult<AuthLoginRespVO> getPhoneNumber4Login(@RequestBody @Valid TenantTokenReqVO reqVO) {
|
||||||
|
// // 强行清楚 本地线程 中的租户ID , 请设置为当前将要登录的租户ID
|
||||||
|
//// TenantContextHolder.clear();
|
||||||
|
//// TenantContextHolder.setTenantId(Long.valueOf(reqVO.getTenantId()));
|
||||||
|
// AuthLoginRespVO login = authService.getPhoneNumber4Login(reqVO);
|
||||||
|
// if (login != null) {
|
||||||
|
// return success(login);
|
||||||
|
// } else {
|
||||||
|
// return error(405, "该手机号不是平台用户");
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
@PermitAll
|
@PermitAll
|
||||||
|
@TenantIgnore
|
||||||
@PostMapping("/login-by-tenant")
|
@PostMapping("/login-by-tenant")
|
||||||
@Operation(summary = "登录 (切换租户之后调用)")
|
@Operation(summary = "登录 (切换租户之后调用)")
|
||||||
public CommonResult<AuthLoginRespVO> getPhoneNumber4Login(@RequestBody @Valid TenantTokenReqVO reqVO) {
|
public CommonResult<AuthLoginRespVO> loginByTenant(@RequestBody @Valid TenantTokenReqVO reqVO) {
|
||||||
|
// 强行清除本地线程中的租户ID,设置为当前将要登录的租户ID
|
||||||
|
Long targetTenantId;
|
||||||
|
try {
|
||||||
|
targetTenantId = Long.valueOf(reqVO.getTenantId());
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
log.error("[loginByTenant][租户ID格式错误: {}]", reqVO.getTenantId());
|
||||||
|
return error(400, "租户ID格式错误");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 清除并设置租户ID,确保后续操作使用正确的租户上下文
|
||||||
|
// TenantContextHolder.clear();
|
||||||
|
// TenantContextHolder.setTenantId(targetTenantId);
|
||||||
|
// log.info("[loginByTenant][设置租户ID: {}, 手机号: {}]", targetTenantId, reqVO.getPhoneNumber());
|
||||||
|
|
||||||
AuthLoginRespVO login = authService.getPhoneNumber4Login(reqVO);
|
AuthLoginRespVO login = authService.getPhoneNumber4Login(reqVO);
|
||||||
if (login != null) {
|
if (login != null) {
|
||||||
|
log.info("[loginByTenant][登录成功,最终租户ID: {}]", TenantContextHolder.getTenantId());
|
||||||
return success(login);
|
return success(login);
|
||||||
} else {
|
} else {
|
||||||
return error(405, "该手机号不是平台用户");
|
return error(405, "该手机号不是平台用户");
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import lombok.Data;
|
|||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @description: TODO
|
* @description:
|
||||||
* @author: binda
|
* @author: binda
|
||||||
* @date: 2025/11/20 15:37
|
* @date: 2025/11/20 15:37
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -251,7 +251,8 @@ public class AdminAuthServiceImpl implements AdminAuthService {
|
|||||||
createLoginLog(userId, username, logType, LoginResultEnum.SUCCESS);
|
createLoginLog(userId, username, logType, LoginResultEnum.SUCCESS);
|
||||||
|
|
||||||
// 确保租户上下文中有正确的租户ID
|
// 确保租户上下文中有正确的租户ID
|
||||||
ensureTenantContext(userId);
|
// ensureTenantContext(userId);
|
||||||
|
ensureTenantContextPlus(userId);
|
||||||
|
|
||||||
// 创建访问令牌
|
// 创建访问令牌
|
||||||
OAuth2AccessTokenDO accessTokenDO = oauth2TokenService.createAccessToken(userId, getUserType().getValue(),
|
OAuth2AccessTokenDO accessTokenDO = oauth2TokenService.createAccessToken(userId, getUserType().getValue(),
|
||||||
@@ -294,6 +295,19 @@ public class AdminAuthServiceImpl implements AdminAuthService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void ensureTenantContextPlus(Long userId) {
|
||||||
|
// 如果TenantContextHolder中没有租户ID,尝试从用户信息中获取并设置
|
||||||
|
Long currentTenantId = TenantContextHolder.getTenantId();
|
||||||
|
|
||||||
|
// 设置到租户上下文中
|
||||||
|
if (currentTenantId != null) {
|
||||||
|
TenantContextHolder.setTenantId(currentTenantId);
|
||||||
|
log.info("[ensureTenantContext][设置租户上下文: {}]", currentTenantId);
|
||||||
|
} else {
|
||||||
|
log.warn("[ensureTenantContext][用户({}) 无法获取租户ID,可能导致登录后无法获取租户信息]", userId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public AuthLoginRespVO refreshToken(String refreshToken) {
|
public AuthLoginRespVO refreshToken(String refreshToken) {
|
||||||
OAuth2AccessTokenDO accessTokenDO = oauth2TokenService.refreshAccessToken(refreshToken, OAuth2ClientConstants.CLIENT_ID_DEFAULT);
|
OAuth2AccessTokenDO accessTokenDO = oauth2TokenService.refreshAccessToken(refreshToken, OAuth2ClientConstants.CLIENT_ID_DEFAULT);
|
||||||
@@ -437,13 +451,44 @@ public class AdminAuthServiceImpl implements AdminAuthService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
// @Override
|
||||||
|
// public AuthLoginRespVO getPhoneNumber4Login(TenantTokenReqVO reqVO) {
|
||||||
|
// String phoneNumber = reqVO.getPhoneNumber();
|
||||||
|
// AdminUserDO user = userService.getUserByMobileAndTenantId2(phoneNumber,reqVO.getTenantId());
|
||||||
|
//
|
||||||
|
// AuthLoginRespVO tokenAfterLoginSuccess = createTokenAfterLoginSuccess(user.getId(), user.getUsername(), LoginLogTypeEnum.LOGIN_MOBILE);
|
||||||
|
// tokenAfterLoginSuccess.setMobile(phoneNumber);
|
||||||
|
// return tokenAfterLoginSuccess;
|
||||||
|
// }
|
||||||
|
|
||||||
public AuthLoginRespVO getPhoneNumber4Login(TenantTokenReqVO reqVO) {
|
public AuthLoginRespVO getPhoneNumber4Login(TenantTokenReqVO reqVO) {
|
||||||
String phoneNumber = reqVO.getPhoneNumber();
|
String phoneNumber = reqVO.getPhoneNumber();
|
||||||
AdminUserDO user = userService.getUserByMobileAndTenantId2(phoneNumber,reqVO.getTenantId());
|
// 切换租户:强制使用请求中的租户ID,这是用户要切换到的目标租户ID
|
||||||
|
Long targetTenantId = Long.valueOf(reqVO.getTenantId());
|
||||||
|
|
||||||
|
// 清除并设置目标租户ID,确保后续操作使用新的租户上下文
|
||||||
|
TenantContextHolder.clear();
|
||||||
|
TenantContextHolder.setTenantId(targetTenantId);
|
||||||
|
log.info("[getPhoneNumber4Login][切换租户登录,设置目标租户ID: {}, 手机号: {}]", targetTenantId, phoneNumber);
|
||||||
|
|
||||||
|
// 根据手机号和目标租户ID查询用户(该租户下的用户账号)
|
||||||
|
AdminUserDO user = userService.getUserByMobileAndTenantId2(phoneNumber, reqVO.getTenantId());
|
||||||
|
if (user == null) {
|
||||||
|
log.warn("[getPhoneNumber4Login][用户不存在,手机号: {}, 目标租户ID: {}]", phoneNumber, targetTenantId);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
log.info("[getPhoneNumber4Login][找到用户: {}, 用户所属租户ID: {}, 目标租户ID: {}]",
|
||||||
|
user.getId(), user.getTenantId(), targetTenantId);
|
||||||
|
|
||||||
|
// 再次确保使用目标租户ID(防止在查询过程中被覆盖)
|
||||||
|
TenantContextHolder.setTenantId(targetTenantId);
|
||||||
|
log.info("[getPhoneNumber4Login][创建Token前,确认使用目标租户ID: {}]", TenantContextHolder.getTenantId());
|
||||||
|
|
||||||
|
// 创建token,确保使用目标租户ID
|
||||||
AuthLoginRespVO tokenAfterLoginSuccess = createTokenAfterLoginSuccess(user.getId(), user.getUsername(), LoginLogTypeEnum.LOGIN_MOBILE);
|
AuthLoginRespVO tokenAfterLoginSuccess = createTokenAfterLoginSuccess(user.getId(), user.getUsername(), LoginLogTypeEnum.LOGIN_MOBILE);
|
||||||
tokenAfterLoginSuccess.setMobile(phoneNumber);
|
tokenAfterLoginSuccess.setMobile(phoneNumber);
|
||||||
|
log.info("[getPhoneNumber4Login][Token创建完成,租户ID: {}]", TenantContextHolder.getTenantId());
|
||||||
return tokenAfterLoginSuccess;
|
return tokenAfterLoginSuccess;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -194,7 +194,7 @@ public class RoleServiceImpl implements RoleService {
|
|||||||
public List<RoleDO> getRoleByCode(String code) {
|
public List<RoleDO> getRoleByCode(String code) {
|
||||||
LambdaQueryWrapperX<RoleDO> x = new LambdaQueryWrapperX<>();
|
LambdaQueryWrapperX<RoleDO> x = new LambdaQueryWrapperX<>();
|
||||||
x.eqIfPresent(RoleDO::getCode, code);
|
x.eqIfPresent(RoleDO::getCode, code);
|
||||||
x.ne(RoleDO::getType, 1);
|
// x.ne(RoleDO::getType, 1);
|
||||||
return roleMapper.selectList(x);
|
return roleMapper.selectList(x);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -165,7 +165,8 @@ public class TenantServiceImpl implements TenantService {
|
|||||||
// 创建租户的管理员
|
// 创建租户的管理员
|
||||||
TenantUtils.execute(tenant.getId(), () -> {
|
TenantUtils.execute(tenant.getId(), () -> {
|
||||||
// 创建角色
|
// 创建角色
|
||||||
Long roleId = createRole(tenantPackage);
|
// Long roleId = createRole(tenantPackage);
|
||||||
|
Long roleId = createRole4Customization(tenantPackage);
|
||||||
// 创建用户,并分配角色
|
// 创建用户,并分配角色
|
||||||
Long userId = createUser(roleId, createReqVO);
|
Long userId = createUser(roleId, createReqVO);
|
||||||
// 修改租户的管理员
|
// 修改租户的管理员
|
||||||
@@ -193,6 +194,23 @@ public class TenantServiceImpl implements TenantService {
|
|||||||
return roleId;
|
return roleId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Long createRole4Customization(TenantPackageDO tenantPackage) {
|
||||||
|
RoleSaveReqVO reqVO = new RoleSaveReqVO();
|
||||||
|
reqVO.setName("管理员").setCode("1").setSort(1).setRemark("系统自动生成");
|
||||||
|
roleService.createRole(reqVO, RoleTypeEnum.SYSTEM.getType());
|
||||||
|
|
||||||
|
reqVO.setName("基地主管").setCode("2").setSort(2).setRemark("系统自动生成");
|
||||||
|
roleService.createRole(reqVO, RoleTypeEnum.SYSTEM.getType());
|
||||||
|
|
||||||
|
reqVO.setName("技术员").setCode("3").setSort(3).setRemark("系统自动生成");
|
||||||
|
roleService.createRole(reqVO, RoleTypeEnum.SYSTEM.getType());
|
||||||
|
|
||||||
|
reqVO.setName("普通用户").setCode("4").setSort(4).setRemark("系统自动生成");
|
||||||
|
roleService.createRole(reqVO, RoleTypeEnum.SYSTEM.getType());
|
||||||
|
|
||||||
|
return this.createRole(tenantPackage);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@DSTransactional // 多数据源,使用 @DSTransactional 保证本地事务,以及数据源的切换
|
@DSTransactional // 多数据源,使用 @DSTransactional 保证本地事务,以及数据源的切换
|
||||||
public void updateTenant(TenantSaveReqVO updateReqVO) {
|
public void updateTenant(TenantSaveReqVO updateReqVO) {
|
||||||
|
|||||||
@@ -694,6 +694,9 @@ public class AdminUserServiceImpl implements AdminUserService {
|
|||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
Set<Long> userIds = permissionService.getUserRoleIdListByRoleId(roleIds);
|
Set<Long> userIds = permissionService.getUserRoleIdListByRoleId(roleIds);
|
||||||
|
if (null == userIds || userIds.size() == 0) {
|
||||||
|
return Collections.EMPTY_LIST;
|
||||||
|
}
|
||||||
|
|
||||||
List<AdminUserDO> userList = userMapper.selectByIds(userIds);
|
List<AdminUserDO> userList = userMapper.selectByIds(userIds);
|
||||||
return userList;
|
return userList;
|
||||||
|
|||||||
@@ -1,58 +1,18 @@
|
|||||||
#########################
|
#########################
|
||||||
# wanmao server
|
# yun ge server
|
||||||
#########################
|
#########################
|
||||||
|
|
||||||
mysql.url=jdbc:mysql://223.83.129.121:3360/farming-platform?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true
|
#mysql.url=jdbc:mysql://223.83.129.121:3360/farming-platform?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true
|
||||||
#mysql.url=jdbc:mysql://Mysql:3306/farming-platform?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true
|
##mysql.url=jdbc:mysql://Mysql:3306/farming-platform?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true
|
||||||
mysql.username=farming-platform
|
#mysql.username=farming-platform
|
||||||
mysql.password=wCM7fBMhFP3zNdJ3
|
#mysql.password=wCM7fBMhFP3zNdJ3
|
||||||
|
|
||||||
redis.host= 112.126.60.236
|
|
||||||
#redis.host=Redis
|
|
||||||
redis.port=65532
|
|
||||||
redis.database=5
|
|
||||||
redis.username=
|
|
||||||
redis.password=luxifa970219
|
|
||||||
|
|
||||||
wm.wx.mp.app-id=wx508d9a9ab84f67d0
|
|
||||||
wm.wx.mp.secret=92c571b9973f9078c11da47a16c4094c
|
|
||||||
wm.wx.miniapp.app-id=wx508d9a9ab84f67d0
|
|
||||||
wm.wx.miniapp.secret=92c571b9973f9078c11da47a16c4094c
|
|
||||||
|
|
||||||
wanmao.wms.url_1=getTenantByMobile
|
|
||||||
# prod
|
|
||||||
wanmao.wms.hosts=https://wms.simple.gltec.cn/prod-api
|
|
||||||
# test
|
|
||||||
#wanmao.wms.hosts=47.111.15.9:8074/prod-api
|
|
||||||
|
|
||||||
# gaode key
|
|
||||||
gaode.weather.webkey=ea0a0486aaea8dbf9f68274df1160df3
|
|
||||||
|
|
||||||
# print
|
|
||||||
print.jby.hosts=http://api.poscom.cn/apisc/templetPrint
|
|
||||||
print.jby.api-key=8KOSGN3SX11QV80IY8N6PYFMNF29R1N9
|
|
||||||
print.jby.member-code=7A7453F04CB067987229F7BBAD888CFF
|
|
||||||
print.jby.template-id=be64feabccf44de189f7019daa0dd7fb
|
|
||||||
print.jby.device-id=00543113467925660
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#========================
|
|
||||||
# wan mao server
|
|
||||||
#========================
|
|
||||||
|
|
||||||
#mysql.url=jdbc:mysql://rm-2ze979o6dt71z2mf6so.mysql.rds.aliyuncs.com:3306/farming-platform?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true
|
|
||||||
#mysql.username=root
|
|
||||||
#mysql.password=Wm@123456
|
|
||||||
#
|
#
|
||||||
#redis.host=r-2zepgu4tu2ofnhhgzopd.redis.rds.aliyuncs.com
|
#redis.host= 112.126.60.236
|
||||||
#redis.port=6379
|
##redis.host=Redis
|
||||||
|
#redis.port=65532
|
||||||
#redis.database=5
|
#redis.database=5
|
||||||
#redis.username=yunge
|
#redis.username=
|
||||||
#redis.password=Yunge123
|
#redis.password=luxifa970219
|
||||||
#
|
#
|
||||||
#wm.wx.mp.app-id=wx508d9a9ab84f67d0
|
#wm.wx.mp.app-id=wx508d9a9ab84f67d0
|
||||||
#wm.wx.mp.secret=92c571b9973f9078c11da47a16c4094c
|
#wm.wx.mp.secret=92c571b9973f9078c11da47a16c4094c
|
||||||
@@ -80,6 +40,46 @@ print.jby.device-id=00543113467925660
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#========================
|
||||||
|
# wan mao server
|
||||||
|
#========================
|
||||||
|
|
||||||
|
mysql.url=jdbc:mysql://rm-2ze979o6dt71z2mf6so.mysql.rds.aliyuncs.com:3306/farming-platform?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true
|
||||||
|
mysql.username=root
|
||||||
|
mysql.password=Wm@123456
|
||||||
|
|
||||||
|
redis.host=r-2zepgu4tu2ofnhhgzopd.redis.rds.aliyuncs.com
|
||||||
|
redis.port=6379
|
||||||
|
redis.database=5
|
||||||
|
redis.username=yunge
|
||||||
|
redis.password=Yunge123
|
||||||
|
|
||||||
|
wm.wx.mp.app-id=wx508d9a9ab84f67d0
|
||||||
|
wm.wx.mp.secret=92c571b9973f9078c11da47a16c4094c
|
||||||
|
wm.wx.miniapp.app-id=wx508d9a9ab84f67d0
|
||||||
|
wm.wx.miniapp.secret=92c571b9973f9078c11da47a16c4094c
|
||||||
|
|
||||||
|
wanmao.wms.url_1=getTenantByMobile
|
||||||
|
# prod
|
||||||
|
wanmao.wms.hosts=https://wms.simple.gltec.cn/prod-api
|
||||||
|
# test
|
||||||
|
#wanmao.wms.hosts=47.111.15.9:8074/prod-api
|
||||||
|
|
||||||
|
# gaode key
|
||||||
|
gaode.weather.webkey=ea0a0486aaea8dbf9f68274df1160df3
|
||||||
|
|
||||||
|
# print
|
||||||
|
print.jby.hosts=http://api.poscom.cn/apisc/templetPrint
|
||||||
|
print.jby.api-key=8KOSGN3SX11QV80IY8N6PYFMNF29R1N9
|
||||||
|
print.jby.member-code=7A7453F04CB067987229F7BBAD888CFF
|
||||||
|
print.jby.template-id=be64feabccf44de189f7019daa0dd7fb
|
||||||
|
print.jby.device-id=00543113467925660
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#========================
|
#========================
|
||||||
# ji shui server
|
# ji shui server
|
||||||
#========================
|
#========================
|
||||||
|
|||||||
Reference in New Issue
Block a user