farm模块-字典优化
This commit is contained in:
@@ -13,7 +13,7 @@ public class DisasterDataSaveReqVO {
|
|||||||
@Schema(description = "灾害名称", example = "赵六")
|
@Schema(description = "灾害名称", example = "赵六")
|
||||||
private String name;
|
private String name;
|
||||||
@Schema(description = "灾害类型1=环境,2=病害,3=虫害,4=草害")
|
@Schema(description = "灾害类型1=环境,2=病害,3=虫害,4=草害")
|
||||||
private String category;
|
private Integer category;
|
||||||
@Schema(description = "灾害类型 1:普通; 2:气象灾害")
|
@Schema(description = "灾害类型 1:普通; 2:气象灾害")
|
||||||
private Integer type;
|
private Integer type;
|
||||||
@Schema(description = "灾害描述")
|
@Schema(description = "灾害描述")
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.farm.controller.admin.farmingnamemaintenance;
|
|||||||
import cn.iocoder.yudao.module.farm.controller.admin.farmingnamemaintenance.vo.FarmingNameMaintenancePageReqVO;
|
import cn.iocoder.yudao.module.farm.controller.admin.farmingnamemaintenance.vo.FarmingNameMaintenancePageReqVO;
|
||||||
import cn.iocoder.yudao.module.farm.controller.admin.farmingnamemaintenance.vo.FarmingNameMaintenanceRespVO;
|
import cn.iocoder.yudao.module.farm.controller.admin.farmingnamemaintenance.vo.FarmingNameMaintenanceRespVO;
|
||||||
import cn.iocoder.yudao.module.farm.controller.admin.farmingnamemaintenance.vo.FarmingNameMaintenanceSaveReqVO;
|
import cn.iocoder.yudao.module.farm.controller.admin.farmingnamemaintenance.vo.FarmingNameMaintenanceSaveReqVO;
|
||||||
|
import cn.iocoder.yudao.module.farm.controller.admin.farmingnamemaintenance.vo.FarmingNameMaintenanceTreeRespVO;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import jakarta.validation.Valid;
|
import jakarta.validation.Valid;
|
||||||
import jakarta.validation.Valid;
|
import jakarta.validation.Valid;
|
||||||
@@ -44,7 +45,6 @@ public class FarmingNameMaintenanceController {
|
|||||||
|
|
||||||
@PostMapping("/create")
|
@PostMapping("/create")
|
||||||
@Operation(summary = "创建农事名称维护")
|
@Operation(summary = "创建农事名称维护")
|
||||||
|
|
||||||
public CommonResult<String> createFarmingNameMaintenance(@Valid @RequestBody FarmingNameMaintenanceSaveReqVO createReqVO) {
|
public CommonResult<String> createFarmingNameMaintenance(@Valid @RequestBody FarmingNameMaintenanceSaveReqVO createReqVO) {
|
||||||
return success(farmingNameMaintenanceService.createFarmingNameMaintenance(createReqVO));
|
return success(farmingNameMaintenanceService.createFarmingNameMaintenance(createReqVO));
|
||||||
}
|
}
|
||||||
@@ -87,9 +87,15 @@ public class FarmingNameMaintenanceController {
|
|||||||
return success(BeanUtils.toBean(pageResult, FarmingNameMaintenanceRespVO.class));
|
return success(BeanUtils.toBean(pageResult, FarmingNameMaintenanceRespVO.class));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@GetMapping("/tree")
|
||||||
|
@Operation(summary = "获得农事名称维护树形结构")
|
||||||
|
public CommonResult<List<FarmingNameMaintenanceTreeRespVO>> getFarmingNameMaintenanceTree() {
|
||||||
|
List<FarmingNameMaintenanceTreeRespVO> tree = farmingNameMaintenanceService.getFarmingNameMaintenanceTree();
|
||||||
|
return success(tree);
|
||||||
|
}
|
||||||
|
|
||||||
@GetMapping("/export-excel")
|
@GetMapping("/export-excel")
|
||||||
@Operation(summary = "导出农事名称维护 Excel")
|
@Operation(summary = "导出农事名称维护 Excel")
|
||||||
|
|
||||||
@ApiAccessLog(operateType = EXPORT)
|
@ApiAccessLog(operateType = EXPORT)
|
||||||
public void exportFarmingNameMaintenanceExcel(@Valid FarmingNameMaintenancePageReqVO pageReqVO,
|
public void exportFarmingNameMaintenanceExcel(@Valid FarmingNameMaintenancePageReqVO pageReqVO,
|
||||||
HttpServletResponse response) throws IOException {
|
HttpServletResponse response) throws IOException {
|
||||||
|
|||||||
@@ -1,37 +1,30 @@
|
|||||||
package cn.iocoder.yudao.module.farm.controller.admin.farmingtypemaintenance;
|
package cn.iocoder.yudao.module.farm.controller.admin.farmingtypemaintenance;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||||
|
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
|
||||||
import cn.iocoder.yudao.module.farm.controller.admin.farmingtypemaintenance.vo.FarmingTypeMaintenancePageReqVO;
|
import cn.iocoder.yudao.module.farm.controller.admin.farmingtypemaintenance.vo.FarmingTypeMaintenancePageReqVO;
|
||||||
import cn.iocoder.yudao.module.farm.controller.admin.farmingtypemaintenance.vo.FarmingTypeMaintenanceRespVO;
|
import cn.iocoder.yudao.module.farm.controller.admin.farmingtypemaintenance.vo.FarmingTypeMaintenanceRespVO;
|
||||||
import cn.iocoder.yudao.module.farm.controller.admin.farmingtypemaintenance.vo.FarmingTypeMaintenanceSaveReqVO;
|
import cn.iocoder.yudao.module.farm.controller.admin.farmingtypemaintenance.vo.FarmingTypeMaintenanceSaveReqVO;
|
||||||
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.farmingtypemaintenance.FarmingTypeMaintenanceDO;
|
import cn.iocoder.yudao.module.farm.dal.dataobject.farmingtypemaintenance.FarmingTypeMaintenanceDO;
|
||||||
import cn.iocoder.yudao.module.farm.service.farmingtypemaintenance.FarmingTypeMaintenanceService;
|
import cn.iocoder.yudao.module.farm.service.farmingtypemaintenance.FarmingTypeMaintenanceService;
|
||||||
|
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 jakarta.servlet.http.HttpServletResponse;
|
||||||
|
import jakarta.validation.Valid;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
|
||||||
|
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
||||||
|
|
||||||
@Tag(name = "管理后台 - 农事类型维护")
|
@Tag(name = "管理后台 - 农事类型维护")
|
||||||
@RestController
|
@RestController
|
||||||
@@ -44,14 +37,12 @@ public class FarmingTypeMaintenanceController {
|
|||||||
|
|
||||||
@PostMapping("/create")
|
@PostMapping("/create")
|
||||||
@Operation(summary = "创建农事类型维护")
|
@Operation(summary = "创建农事类型维护")
|
||||||
|
|
||||||
public CommonResult<String> createFarmingTypeMaintenance(@Valid @RequestBody FarmingTypeMaintenanceSaveReqVO createReqVO) {
|
public CommonResult<String> createFarmingTypeMaintenance(@Valid @RequestBody FarmingTypeMaintenanceSaveReqVO createReqVO) {
|
||||||
return success(farmingTypeMaintenanceService.createFarmingTypeMaintenance(createReqVO));
|
return success(farmingTypeMaintenanceService.createFarmingTypeMaintenance(createReqVO));
|
||||||
}
|
}
|
||||||
|
|
||||||
@PutMapping("/update")
|
@PutMapping("/update")
|
||||||
@Operation(summary = "更新农事类型维护")
|
@Operation(summary = "更新农事类型维护")
|
||||||
|
|
||||||
public CommonResult<Boolean> updateFarmingTypeMaintenance(@Valid @RequestBody FarmingTypeMaintenanceSaveReqVO updateReqVO) {
|
public CommonResult<Boolean> updateFarmingTypeMaintenance(@Valid @RequestBody FarmingTypeMaintenanceSaveReqVO updateReqVO) {
|
||||||
farmingTypeMaintenanceService.updateFarmingTypeMaintenance(updateReqVO);
|
farmingTypeMaintenanceService.updateFarmingTypeMaintenance(updateReqVO);
|
||||||
return success(true);
|
return success(true);
|
||||||
@@ -60,7 +51,6 @@ public class FarmingTypeMaintenanceController {
|
|||||||
@DeleteMapping("/delete")
|
@DeleteMapping("/delete")
|
||||||
@Operation(summary = "删除农事类型维护")
|
@Operation(summary = "删除农事类型维护")
|
||||||
@Parameter(name = "id", description = "编号", required = true)
|
@Parameter(name = "id", description = "编号", required = true)
|
||||||
|
|
||||||
public CommonResult<Boolean> deleteFarmingTypeMaintenance(@RequestParam("id") String id) {
|
public CommonResult<Boolean> deleteFarmingTypeMaintenance(@RequestParam("id") String id) {
|
||||||
farmingTypeMaintenanceService.deleteFarmingTypeMaintenance(id);
|
farmingTypeMaintenanceService.deleteFarmingTypeMaintenance(id);
|
||||||
return success(true);
|
return success(true);
|
||||||
@@ -69,7 +59,6 @@ public class FarmingTypeMaintenanceController {
|
|||||||
@DeleteMapping("/delete-list")
|
@DeleteMapping("/delete-list")
|
||||||
@Parameter(name = "ids", description = "编号", required = true)
|
@Parameter(name = "ids", description = "编号", required = true)
|
||||||
@Operation(summary = "批量删除农事类型维护")
|
@Operation(summary = "批量删除农事类型维护")
|
||||||
|
|
||||||
public CommonResult<Boolean> deleteFarmingTypeMaintenanceList(@RequestParam("ids") List<String> ids) {
|
public CommonResult<Boolean> deleteFarmingTypeMaintenanceList(@RequestParam("ids") List<String> ids) {
|
||||||
farmingTypeMaintenanceService.deleteFarmingTypeMaintenanceListByIds(ids);
|
farmingTypeMaintenanceService.deleteFarmingTypeMaintenanceListByIds(ids);
|
||||||
return success(true);
|
return success(true);
|
||||||
@@ -78,15 +67,20 @@ public class FarmingTypeMaintenanceController {
|
|||||||
@GetMapping("/get")
|
@GetMapping("/get")
|
||||||
@Operation(summary = "获得农事类型维护")
|
@Operation(summary = "获得农事类型维护")
|
||||||
@Parameter(name = "id", description = "编号", required = true, example = "1024")
|
@Parameter(name = "id", description = "编号", required = true, example = "1024")
|
||||||
|
|
||||||
public CommonResult<FarmingTypeMaintenanceRespVO> getFarmingTypeMaintenance(@RequestParam("id") String id) {
|
public CommonResult<FarmingTypeMaintenanceRespVO> getFarmingTypeMaintenance(@RequestParam("id") String id) {
|
||||||
FarmingTypeMaintenanceDO farmingTypeMaintenance = farmingTypeMaintenanceService.getFarmingTypeMaintenance(id);
|
FarmingTypeMaintenanceDO farmingTypeMaintenance = farmingTypeMaintenanceService.getFarmingTypeMaintenance(id);
|
||||||
return success(BeanUtils.toBean(farmingTypeMaintenance, FarmingTypeMaintenanceRespVO.class));
|
return success(BeanUtils.toBean(farmingTypeMaintenance, FarmingTypeMaintenanceRespVO.class));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@GetMapping("/list")
|
||||||
|
@Operation(summary = "农事类型列表")
|
||||||
|
public CommonResult<List<FarmingTypeMaintenanceRespVO>> getFarmingTypeMaintenanceList() {
|
||||||
|
List<FarmingTypeMaintenanceDO> pageResult = farmingTypeMaintenanceService.getFarmingTypeMaintenanceList();
|
||||||
|
return success(BeanUtils.toBean(pageResult, FarmingTypeMaintenanceRespVO.class));
|
||||||
|
}
|
||||||
|
|
||||||
@GetMapping("/page")
|
@GetMapping("/page")
|
||||||
@Operation(summary = "获得农事类型维护分页")
|
@Operation(summary = "获得农事类型维护分页")
|
||||||
|
|
||||||
public CommonResult<PageResult<FarmingTypeMaintenanceRespVO>> getFarmingTypeMaintenancePage(@Valid FarmingTypeMaintenancePageReqVO pageReqVO) {
|
public CommonResult<PageResult<FarmingTypeMaintenanceRespVO>> getFarmingTypeMaintenancePage(@Valid FarmingTypeMaintenancePageReqVO pageReqVO) {
|
||||||
PageResult<FarmingTypeMaintenanceDO> pageResult = farmingTypeMaintenanceService.getFarmingTypeMaintenancePage(pageReqVO);
|
PageResult<FarmingTypeMaintenanceDO> pageResult = farmingTypeMaintenanceService.getFarmingTypeMaintenancePage(pageReqVO);
|
||||||
return success(BeanUtils.toBean(pageResult, FarmingTypeMaintenanceRespVO.class));
|
return success(BeanUtils.toBean(pageResult, FarmingTypeMaintenanceRespVO.class));
|
||||||
@@ -94,7 +88,6 @@ public class FarmingTypeMaintenanceController {
|
|||||||
|
|
||||||
@GetMapping("/export-excel")
|
@GetMapping("/export-excel")
|
||||||
@Operation(summary = "导出农事类型维护 Excel")
|
@Operation(summary = "导出农事类型维护 Excel")
|
||||||
|
|
||||||
@ApiAccessLog(operateType = EXPORT)
|
@ApiAccessLog(operateType = EXPORT)
|
||||||
public void exportFarmingTypeMaintenanceExcel(@Valid FarmingTypeMaintenancePageReqVO pageReqVO,
|
public void exportFarmingTypeMaintenanceExcel(@Valid FarmingTypeMaintenancePageReqVO pageReqVO,
|
||||||
HttpServletResponse response) throws IOException {
|
HttpServletResponse response) throws IOException {
|
||||||
|
|||||||
@@ -44,14 +44,12 @@ public class InputLibraryController {
|
|||||||
|
|
||||||
@PostMapping("/create")
|
@PostMapping("/create")
|
||||||
@Operation(summary = "创建投入品库维护")
|
@Operation(summary = "创建投入品库维护")
|
||||||
|
|
||||||
public CommonResult<String> createInputLibrary(@Valid @RequestBody InputLibrarySaveReqVO createReqVO) {
|
public CommonResult<String> createInputLibrary(@Valid @RequestBody InputLibrarySaveReqVO createReqVO) {
|
||||||
return success(inputLibraryService.createInputLibrary(createReqVO));
|
return success(inputLibraryService.createInputLibrary(createReqVO));
|
||||||
}
|
}
|
||||||
|
|
||||||
@PutMapping("/update")
|
@PutMapping("/update")
|
||||||
@Operation(summary = "更新投入品库维护")
|
@Operation(summary = "更新投入品库维护")
|
||||||
|
|
||||||
public CommonResult<Boolean> updateInputLibrary(@Valid @RequestBody InputLibrarySaveReqVO updateReqVO) {
|
public CommonResult<Boolean> updateInputLibrary(@Valid @RequestBody InputLibrarySaveReqVO updateReqVO) {
|
||||||
inputLibraryService.updateInputLibrary(updateReqVO);
|
inputLibraryService.updateInputLibrary(updateReqVO);
|
||||||
return success(true);
|
return success(true);
|
||||||
@@ -60,7 +58,6 @@ public class InputLibraryController {
|
|||||||
@DeleteMapping("/delete")
|
@DeleteMapping("/delete")
|
||||||
@Operation(summary = "删除投入品库维护")
|
@Operation(summary = "删除投入品库维护")
|
||||||
@Parameter(name = "id", description = "编号", required = true)
|
@Parameter(name = "id", description = "编号", required = true)
|
||||||
|
|
||||||
public CommonResult<Boolean> deleteInputLibrary(@RequestParam("id") String id) {
|
public CommonResult<Boolean> deleteInputLibrary(@RequestParam("id") String id) {
|
||||||
inputLibraryService.deleteInputLibrary(id);
|
inputLibraryService.deleteInputLibrary(id);
|
||||||
return success(true);
|
return success(true);
|
||||||
@@ -69,7 +66,6 @@ public class InputLibraryController {
|
|||||||
@DeleteMapping("/delete-list")
|
@DeleteMapping("/delete-list")
|
||||||
@Parameter(name = "ids", description = "编号", required = true)
|
@Parameter(name = "ids", description = "编号", required = true)
|
||||||
@Operation(summary = "批量删除投入品库维护")
|
@Operation(summary = "批量删除投入品库维护")
|
||||||
|
|
||||||
public CommonResult<Boolean> deleteInputLibraryList(@RequestParam("ids") List<String> ids) {
|
public CommonResult<Boolean> deleteInputLibraryList(@RequestParam("ids") List<String> ids) {
|
||||||
inputLibraryService.deleteInputLibraryListByIds(ids);
|
inputLibraryService.deleteInputLibraryListByIds(ids);
|
||||||
return success(true);
|
return success(true);
|
||||||
@@ -78,7 +74,6 @@ public class InputLibraryController {
|
|||||||
@GetMapping("/get")
|
@GetMapping("/get")
|
||||||
@Operation(summary = "获得投入品库维护")
|
@Operation(summary = "获得投入品库维护")
|
||||||
@Parameter(name = "id", description = "编号", required = true, example = "1024")
|
@Parameter(name = "id", description = "编号", required = true, example = "1024")
|
||||||
|
|
||||||
public CommonResult<InputLibraryRespVO> getInputLibrary(@RequestParam("id") String id) {
|
public CommonResult<InputLibraryRespVO> getInputLibrary(@RequestParam("id") String id) {
|
||||||
InputLibraryDO inputLibrary = inputLibraryService.getInputLibrary(id);
|
InputLibraryDO inputLibrary = inputLibraryService.getInputLibrary(id);
|
||||||
return success(BeanUtils.toBean(inputLibrary, InputLibraryRespVO.class));
|
return success(BeanUtils.toBean(inputLibrary, InputLibraryRespVO.class));
|
||||||
@@ -86,7 +81,6 @@ public class InputLibraryController {
|
|||||||
|
|
||||||
@GetMapping("/page")
|
@GetMapping("/page")
|
||||||
@Operation(summary = "获得投入品库维护分页")
|
@Operation(summary = "获得投入品库维护分页")
|
||||||
|
|
||||||
public CommonResult<PageResult<InputLibraryRespVO>> getInputLibraryPage(@Valid InputLibraryPageReqVO pageReqVO) {
|
public CommonResult<PageResult<InputLibraryRespVO>> getInputLibraryPage(@Valid InputLibraryPageReqVO pageReqVO) {
|
||||||
PageResult<InputLibraryDO> pageResult = inputLibraryService.getInputLibraryPage(pageReqVO);
|
PageResult<InputLibraryDO> pageResult = inputLibraryService.getInputLibraryPage(pageReqVO);
|
||||||
return success(BeanUtils.toBean(pageResult, InputLibraryRespVO.class));
|
return success(BeanUtils.toBean(pageResult, InputLibraryRespVO.class));
|
||||||
@@ -94,7 +88,6 @@ public class InputLibraryController {
|
|||||||
|
|
||||||
@GetMapping("/export-excel")
|
@GetMapping("/export-excel")
|
||||||
@Operation(summary = "导出投入品库维护 Excel")
|
@Operation(summary = "导出投入品库维护 Excel")
|
||||||
|
|
||||||
@ApiAccessLog(operateType = EXPORT)
|
@ApiAccessLog(operateType = EXPORT)
|
||||||
public void exportInputLibraryExcel(@Valid InputLibraryPageReqVO pageReqVO,
|
public void exportInputLibraryExcel(@Valid InputLibraryPageReqVO pageReqVO,
|
||||||
HttpServletResponse response) throws IOException {
|
HttpServletResponse response) throws IOException {
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_
|
|||||||
public class InputLibraryPageReqVO extends PageParam {
|
public class InputLibraryPageReqVO extends PageParam {
|
||||||
|
|
||||||
@Schema(description = "投入品类型", example = "2")
|
@Schema(description = "投入品类型", example = "2")
|
||||||
private String assetType;
|
private Integer assetType;
|
||||||
|
|
||||||
@Schema(description = "投入品名称", example = "王五")
|
@Schema(description = "投入品名称", example = "王五")
|
||||||
private String assetName;
|
private String assetName;
|
||||||
@@ -24,10 +24,10 @@ public class InputLibraryPageReqVO extends PageParam {
|
|||||||
private BigDecimal dose;
|
private BigDecimal dose;
|
||||||
|
|
||||||
@Schema(description = "单位")
|
@Schema(description = "单位")
|
||||||
private String unit;
|
private Integer unit;
|
||||||
|
|
||||||
@Schema(description = "单件")
|
@Schema(description = "单件")
|
||||||
private String packageUnit;
|
private Integer packageUnit;
|
||||||
|
|
||||||
@Schema(description = "单价", example = "23806")
|
@Schema(description = "单价", example = "23806")
|
||||||
private BigDecimal price;
|
private BigDecimal price;
|
||||||
@@ -39,7 +39,7 @@ public class InputLibraryPageReqVO extends PageParam {
|
|||||||
private String manufacturer;
|
private String manufacturer;
|
||||||
|
|
||||||
@Schema(description = "药物类型", example = "2")
|
@Schema(description = "药物类型", example = "2")
|
||||||
private String drugType;
|
private Integer drugType;
|
||||||
|
|
||||||
@Schema(description = "有效成分")
|
@Schema(description = "有效成分")
|
||||||
private String activePrinciple;
|
private String activePrinciple;
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package cn.iocoder.yudao.module.farm.controller.admin.inputlibrary.vo;
|
package cn.iocoder.yudao.module.farm.controller.admin.inputlibrary.vo;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
import lombok.*;
|
import lombok.*;
|
||||||
|
|
||||||
@@ -19,7 +20,8 @@ public class InputLibraryRespVO {
|
|||||||
|
|
||||||
@Schema(description = "投入品类型", example = "2")
|
@Schema(description = "投入品类型", example = "2")
|
||||||
@ExcelProperty("投入品类型")
|
@ExcelProperty("投入品类型")
|
||||||
private String assetType;
|
@DictFormat("asset_type")
|
||||||
|
private Integer assetType;
|
||||||
|
|
||||||
@Schema(description = "投入品名称-编号")
|
@Schema(description = "投入品名称-编号")
|
||||||
@ExcelProperty("投入品名称")
|
@ExcelProperty("投入品名称")
|
||||||
@@ -35,13 +37,15 @@ public class InputLibraryRespVO {
|
|||||||
|
|
||||||
@Schema(description = "单位")
|
@Schema(description = "单位")
|
||||||
@ExcelProperty("单位")
|
@ExcelProperty("单位")
|
||||||
private String unit;
|
@DictFormat("asset_unit")
|
||||||
|
private Integer unit;
|
||||||
private String unitName;
|
private String unitName;
|
||||||
|
|
||||||
|
|
||||||
@Schema(description = "单件")
|
@Schema(description = "单件")
|
||||||
@ExcelProperty("单件")
|
@ExcelProperty("单件")
|
||||||
private String packageUnit;
|
@DictFormat("asset_price")
|
||||||
|
private Integer packageUnit;
|
||||||
private String packageUnitName;
|
private String packageUnitName;
|
||||||
|
|
||||||
|
|
||||||
@@ -59,7 +63,8 @@ public class InputLibraryRespVO {
|
|||||||
|
|
||||||
@Schema(description = "药物类型", example = "2")
|
@Schema(description = "药物类型", example = "2")
|
||||||
@ExcelProperty("药物类型")
|
@ExcelProperty("药物类型")
|
||||||
private String drugType;
|
@DictFormat("drug_type")
|
||||||
|
private Integer drugType;
|
||||||
|
|
||||||
@Schema(description = "有效成分")
|
@Schema(description = "有效成分")
|
||||||
@ExcelProperty("有效成分")
|
@ExcelProperty("有效成分")
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ public class InputLibrarySaveReqVO {
|
|||||||
private String id;
|
private String id;
|
||||||
|
|
||||||
@Schema(description = "投入品类型", example = "2")
|
@Schema(description = "投入品类型", example = "2")
|
||||||
private String assetType;
|
private Integer assetType;
|
||||||
|
|
||||||
@Schema(description = "投入品名称", example = "王五")
|
@Schema(description = "投入品名称", example = "王五")
|
||||||
private String assetName;
|
private String assetName;
|
||||||
@@ -22,10 +22,10 @@ public class InputLibrarySaveReqVO {
|
|||||||
private BigDecimal dose;
|
private BigDecimal dose;
|
||||||
|
|
||||||
@Schema(description = "单位")
|
@Schema(description = "单位")
|
||||||
private String unit;
|
private Integer unit;
|
||||||
|
|
||||||
@Schema(description = "单件")
|
@Schema(description = "单件")
|
||||||
private String packageUnit;
|
private Integer packageUnit;
|
||||||
|
|
||||||
@Schema(description = "单价", example = "23806")
|
@Schema(description = "单价", example = "23806")
|
||||||
private BigDecimal price;
|
private BigDecimal price;
|
||||||
@@ -37,7 +37,7 @@ public class InputLibrarySaveReqVO {
|
|||||||
private String manufacturer;
|
private String manufacturer;
|
||||||
|
|
||||||
@Schema(description = "药物类型", example = "2")
|
@Schema(description = "药物类型", example = "2")
|
||||||
private String drugType;
|
private Integer drugType;
|
||||||
|
|
||||||
@Schema(description = "有效成分")
|
@Schema(description = "有效成分")
|
||||||
private String activePrinciple;
|
private String activePrinciple;
|
||||||
|
|||||||
@@ -14,7 +14,8 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_
|
|||||||
@Schema(description = "管理后台 - 模型管理分页 Request VO")
|
@Schema(description = "管理后台 - 模型管理分页 Request VO")
|
||||||
@Data
|
@Data
|
||||||
public class ModelManagementPageReqVO extends PageParam {
|
public class ModelManagementPageReqVO extends PageParam {
|
||||||
|
@Schema(description = "模型名称", example = "芋艿")
|
||||||
|
private String name;
|
||||||
@Schema(description = "模型名称", example = "芋艿")
|
@Schema(description = "模型名称", example = "芋艿")
|
||||||
private String modelName;
|
private String modelName;
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ public class ModelPestDiseaseWeedPageReqVO extends PageParam {
|
|||||||
private String cycleId;
|
private String cycleId;
|
||||||
|
|
||||||
@Schema(description = "病虫草害类型", example = "2")
|
@Schema(description = "病虫草害类型", example = "2")
|
||||||
private String type;
|
private Integer type;
|
||||||
|
|
||||||
@Schema(description = "病虫草害名称", example = "芋艿")
|
@Schema(description = "病虫草害名称", example = "芋艿")
|
||||||
private String name;
|
private String name;
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ public class ModelPestDiseaseWeedRespVO {
|
|||||||
|
|
||||||
@Schema(description = "病虫草害类型", example = "2")
|
@Schema(description = "病虫草害类型", example = "2")
|
||||||
@ExcelProperty("病虫草害类型")
|
@ExcelProperty("病虫草害类型")
|
||||||
private String type;
|
private Integer type;
|
||||||
|
|
||||||
@Schema(description = "病虫草害名称", example = "芋艿")
|
@Schema(description = "病虫草害名称", example = "芋艿")
|
||||||
@ExcelProperty("病虫草害名称")
|
@ExcelProperty("病虫草害名称")
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ public class ModelPestDiseaseWeedSaveReqVO {
|
|||||||
private String cycleId;
|
private String cycleId;
|
||||||
|
|
||||||
@Schema(description = "病虫草害类型", example = "2")
|
@Schema(description = "病虫草害类型", example = "2")
|
||||||
private String type;
|
private Integer type;
|
||||||
|
|
||||||
@Schema(description = "病虫草害名称", example = "芋艿")
|
@Schema(description = "病虫草害名称", example = "芋艿")
|
||||||
private String name;
|
private String name;
|
||||||
|
|||||||
@@ -93,4 +93,60 @@ public class FarmWebSocketController {
|
|||||||
|
|
||||||
return success("测试消息推送成功");
|
return success("测试消息推送成功");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@GetMapping("/status")
|
||||||
|
@Operation(summary = "检查WebSocket连接状态")
|
||||||
|
@PreAuthorize("@ss.hasPermission('farm:websocket:push')")
|
||||||
|
public CommonResult<String> checkWebSocketStatus() {
|
||||||
|
log.info("[checkWebSocketStatus][检查WebSocket连接状态]");
|
||||||
|
|
||||||
|
farmMessagePushService.checkWebSocketStatus();
|
||||||
|
|
||||||
|
return success("WebSocket状态检查完成,请查看日志");
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("/push-to-tenant")
|
||||||
|
@Operation(summary = "向指定租户推送系统通知")
|
||||||
|
@PreAuthorize("@ss.hasPermission('farm:websocket:push')")
|
||||||
|
public CommonResult<String> pushToTenant(
|
||||||
|
@RequestParam @NotBlank(message = "标题不能为空") String title,
|
||||||
|
@RequestParam @NotBlank(message = "内容不能为空") String content,
|
||||||
|
@RequestParam @NotNull(message = "租户ID不能为空") Long tenantId) {
|
||||||
|
|
||||||
|
log.info("[pushToTenant][向租户推送系统通知][tenantId: {}][title: {}]", tenantId, title);
|
||||||
|
|
||||||
|
farmMessagePushService.pushSystemNotificationToTenant(title, content, tenantId);
|
||||||
|
|
||||||
|
return success("向租户推送系统通知成功");
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("/push-all-tenants")
|
||||||
|
@Operation(summary = "向所有租户推送系统通知")
|
||||||
|
@PreAuthorize("@ss.hasPermission('farm:websocket:push')")
|
||||||
|
public CommonResult<String> pushToAllTenants(
|
||||||
|
@RequestParam @NotBlank(message = "标题不能为空") String title,
|
||||||
|
@RequestParam @NotBlank(message = "内容不能为空") String content) {
|
||||||
|
|
||||||
|
log.info("[pushToAllTenants][向所有租户推送系统通知][title: {}]", title);
|
||||||
|
|
||||||
|
// 向所有租户的所有用户类型推送消息
|
||||||
|
farmMessagePushService.pushSystemNotificationToAllTenants(title, content);
|
||||||
|
|
||||||
|
return success("向所有租户推送系统通知成功");
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("/push-all-user-types")
|
||||||
|
@Operation(summary = "向所有用户类型推送系统通知")
|
||||||
|
@PreAuthorize("@ss.hasPermission('farm:websocket:push')")
|
||||||
|
public CommonResult<String> pushToAllUserTypes(
|
||||||
|
@RequestParam @NotBlank(message = "标题不能为空") String title,
|
||||||
|
@RequestParam @NotBlank(message = "内容不能为空") String content) {
|
||||||
|
|
||||||
|
log.info("[pushToAllUserTypes][向所有用户类型推送系统通知][title: {}]", title);
|
||||||
|
|
||||||
|
// 向所有用户类型推送消息
|
||||||
|
farmMessagePushService.pushSystemNotificationToAllTenants(title, content);
|
||||||
|
|
||||||
|
return success("向所有用户类型推送系统通知成功");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,9 +2,7 @@ package cn.iocoder.yudao.module.farm.dal.dataobject.disasterdata;
|
|||||||
|
|
||||||
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
|
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
|
||||||
import cn.iocoder.yudao.module.farm.framework.util.ImageCollectionUtil;
|
import cn.iocoder.yudao.module.farm.framework.util.ImageCollectionUtil;
|
||||||
import com.baomidou.mybatisplus.annotation.IdType;
|
import com.baomidou.mybatisplus.annotation.*;
|
||||||
import com.baomidou.mybatisplus.annotation.TableField;
|
|
||||||
import com.baomidou.mybatisplus.annotation.TableId;
|
|
||||||
import lombok.*;
|
import lombok.*;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -14,6 +12,8 @@ import java.util.List;
|
|||||||
*
|
*
|
||||||
* @author 芋道源码
|
* @author 芋道源码
|
||||||
*/
|
*/
|
||||||
|
@TableName("farm_disaster_data")
|
||||||
|
@KeySequence("farm_disaster_data_seq")
|
||||||
@Data
|
@Data
|
||||||
@EqualsAndHashCode(callSuper = true)
|
@EqualsAndHashCode(callSuper = true)
|
||||||
@ToString(callSuper = true)
|
@ToString(callSuper = true)
|
||||||
@@ -35,7 +35,7 @@ public class DisasterDataDO extends BaseDO {
|
|||||||
/**
|
/**
|
||||||
* 灾害类型 2=病害,1=虫害,3=草害
|
* 灾害类型 2=病害,1=虫害,3=草害
|
||||||
*/
|
*/
|
||||||
private String category;
|
private int category;
|
||||||
private String categoryName;
|
private String categoryName;
|
||||||
/**
|
/**
|
||||||
* 灾害类别 1:普通; 2:气象灾害
|
* 灾害类别 1:普通; 2:气象灾害
|
||||||
|
|||||||
@@ -1,8 +1,10 @@
|
|||||||
package cn.iocoder.yudao.module.farm.dal.dataobject.inputlibrary;
|
package cn.iocoder.yudao.module.farm.dal.dataobject.inputlibrary;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
|
||||||
import lombok.*;
|
import lombok.*;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.annotation.*;
|
import com.baomidou.mybatisplus.annotation.*;
|
||||||
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
|
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
|
||||||
|
|
||||||
@@ -29,7 +31,8 @@ public class InputLibraryDO extends BaseDO {
|
|||||||
/**
|
/**
|
||||||
* 投入品类型
|
* 投入品类型
|
||||||
*/
|
*/
|
||||||
private String assetType;
|
@DictFormat("asset_type")
|
||||||
|
private Integer assetType;
|
||||||
/**
|
/**
|
||||||
* 投入品名称
|
* 投入品名称
|
||||||
*/
|
*/
|
||||||
@@ -41,11 +44,13 @@ public class InputLibraryDO extends BaseDO {
|
|||||||
/**
|
/**
|
||||||
* 单位
|
* 单位
|
||||||
*/
|
*/
|
||||||
private String unit;
|
@DictFormat("asset_unit")
|
||||||
|
private Integer unit;
|
||||||
/**
|
/**
|
||||||
* 单件
|
* 单件
|
||||||
*/
|
*/
|
||||||
private String packageUnit;
|
@DictFormat("asset_price")
|
||||||
|
private Integer packageUnit;
|
||||||
/**
|
/**
|
||||||
* 单价
|
* 单价
|
||||||
*/
|
*/
|
||||||
@@ -61,7 +66,8 @@ public class InputLibraryDO extends BaseDO {
|
|||||||
/**
|
/**
|
||||||
* 药物类型
|
* 药物类型
|
||||||
*/
|
*/
|
||||||
private String drugType;
|
@DictFormat("drug_type")
|
||||||
|
private Integer drugType;
|
||||||
/**
|
/**
|
||||||
* 有效成分
|
* 有效成分
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ public class ModelPestDiseaseWeedDO extends BaseDO {
|
|||||||
/**
|
/**
|
||||||
* 病虫草害类型
|
* 病虫草害类型
|
||||||
*/
|
*/
|
||||||
private String type;
|
private Integer type;
|
||||||
/**
|
/**
|
||||||
* 病虫草害名称
|
* 病虫草害名称
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -31,6 +31,4 @@ public interface FarmingTypeMaintenanceMapper extends BaseMapperX<FarmingTypeMai
|
|||||||
}
|
}
|
||||||
|
|
||||||
List<FarmingTypeMaintenanceDO> listForFarmingType();
|
List<FarmingTypeMaintenanceDO> listForFarmingType();
|
||||||
|
|
||||||
Boolean update(@Param("req") FarmingTypeMaintenanceDO reqVO);
|
|
||||||
}
|
}
|
||||||
@@ -22,6 +22,7 @@ public interface ModelManagementMapper extends BaseMapperX<ModelManagementDO> {
|
|||||||
MPJLambdaWrapperX<ModelManagementDO> query = new MPJLambdaWrapperX<ModelManagementDO>()
|
MPJLambdaWrapperX<ModelManagementDO> query = new MPJLambdaWrapperX<ModelManagementDO>()
|
||||||
.selectAll(ModelManagementDO.class)
|
.selectAll(ModelManagementDO.class)
|
||||||
.likeIfPresent(ModelManagementDO::getModelName, reqVO.getModelName())
|
.likeIfPresent(ModelManagementDO::getModelName, reqVO.getModelName())
|
||||||
|
.likeIfPresent(ModelManagementDO::getModelName, reqVO.getName())
|
||||||
.eqIfPresent(ModelManagementDO::getSpeciesId, reqVO.getSpeciesId())
|
.eqIfPresent(ModelManagementDO::getSpeciesId, reqVO.getSpeciesId())
|
||||||
.likeIfPresent(ModelManagementDO::getSpeciesName, reqVO.getSpeciesName())
|
.likeIfPresent(ModelManagementDO::getSpeciesName, reqVO.getSpeciesName())
|
||||||
.eqIfPresent(ModelManagementDO::getCycle, reqVO.getCycle())
|
.eqIfPresent(ModelManagementDO::getCycle, reqVO.getCycle())
|
||||||
|
|||||||
@@ -185,12 +185,14 @@ public class BaseInfoServiceImpl implements BaseInfoService {
|
|||||||
// 在种作物总数
|
// 在种作物总数
|
||||||
Integer cropCount = speciesLibraryMapper.getSpeciesCount(tenantId, "");
|
Integer cropCount = speciesLibraryMapper.getSpeciesCount(tenantId, "");
|
||||||
// 基地总面积
|
// 基地总面积
|
||||||
|
BigDecimal areaCount = new BigDecimal("0.00");
|
||||||
|
if (baseCount > 0) {
|
||||||
QueryWrapper<BaseInfoDO> wrapper = new QueryWrapper<>();
|
QueryWrapper<BaseInfoDO> wrapper = new QueryWrapper<>();
|
||||||
wrapper.eq("tenant_id", tenantId);
|
wrapper.eq("tenant_id", tenantId);
|
||||||
wrapper.select("SUM(area) as total_area");
|
wrapper.select("SUM(area) as total_area");
|
||||||
Object result = baseInfoMapper.selectObjs(wrapper).stream().findFirst().orElse(BigDecimal.ZERO);
|
Object result = baseInfoMapper.selectObjs(wrapper).stream().findFirst().orElse(BigDecimal.ZERO);
|
||||||
BigDecimal areaCount = (BigDecimal) result;
|
areaCount = (BigDecimal) result;
|
||||||
|
}
|
||||||
return new TenantInfoRespVO.TenantInfo(baseCount, cropCount, areaCount, employeeCount);
|
return new TenantInfoRespVO.TenantInfo(baseCount, cropCount, areaCount, employeeCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -81,14 +81,14 @@ public class DisasterDataServiceImpl implements DisasterDataService {
|
|||||||
SysDictDO insertObj = new SysDictDO();
|
SysDictDO insertObj = new SysDictDO();
|
||||||
if (type == 1) {
|
if (type == 1) {
|
||||||
// 一般灾害 父类编号
|
// 一般灾害 父类编号
|
||||||
String category = obj.getCategory();
|
Integer category = obj.getCategory();
|
||||||
// 一般灾害
|
// 一般灾害
|
||||||
List<SysDictDO> list = sysDictMapper.groupByFieldCode(DICT_TYPE_CODE_1);
|
List<SysDictDO> list = sysDictMapper.groupByFieldCode(DICT_TYPE_CODE_1);
|
||||||
Map<String, String> parentMap = list.stream().collect(Collectors.toMap(SysDictDO::getField1Code, SysDictDO::getField1Name, (v1, v2) -> v1));
|
Map<String, String> parentMap = list.stream().collect(Collectors.toMap(SysDictDO::getField1Code, SysDictDO::getField1Name, (v1, v2) -> v1));
|
||||||
|
|
||||||
insertObj.setDictTypeCode(DICT_TYPE_CODE_1);
|
insertObj.setDictTypeCode(DICT_TYPE_CODE_1);
|
||||||
insertObj.setDictTypeName("一般灾害");
|
insertObj.setDictTypeName("一般灾害");
|
||||||
insertObj.setField1Code(category);
|
insertObj.setField1Code(category.toString());
|
||||||
insertObj.setField1Name(parentMap.get(category));
|
insertObj.setField1Name(parentMap.get(category));
|
||||||
insertObj.setField2Code(StrHelperUtil.generate());
|
insertObj.setField2Code(StrHelperUtil.generate());
|
||||||
insertObj.setField2Name(name);
|
insertObj.setField2Name(name);
|
||||||
@@ -150,10 +150,10 @@ public class DisasterDataServiceImpl implements DisasterDataService {
|
|||||||
SysDictDO aDo = sysDictMapper.getDictByFieldCode(query);
|
SysDictDO aDo = sysDictMapper.getDictByFieldCode(query);
|
||||||
|
|
||||||
// 一般灾害 父类编号
|
// 一般灾害 父类编号
|
||||||
String category = obj.getCategory();
|
Integer category = obj.getCategory();
|
||||||
SysDictDO updateObj = new SysDictDO();
|
SysDictDO updateObj = new SysDictDO();
|
||||||
updateObj.setId(aDo.getId());
|
updateObj.setId(aDo.getId());
|
||||||
updateObj.setField1Code(category);
|
updateObj.setField1Code(category.toString());
|
||||||
updateObj.setField1Name(parentMap.get(category));
|
updateObj.setField1Name(parentMap.get(category));
|
||||||
updateObj.setField2Code(aDo.getField2Code());
|
updateObj.setField2Code(aDo.getField2Code());
|
||||||
updateObj.setField2Name(name);
|
updateObj.setField2Name(name);
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.farm.service.farmingnamemaintenance;
|
|||||||
|
|
||||||
import cn.iocoder.yudao.module.farm.controller.admin.farmingnamemaintenance.vo.FarmingNameMaintenancePageReqVO;
|
import cn.iocoder.yudao.module.farm.controller.admin.farmingnamemaintenance.vo.FarmingNameMaintenancePageReqVO;
|
||||||
import cn.iocoder.yudao.module.farm.controller.admin.farmingnamemaintenance.vo.FarmingNameMaintenanceSaveReqVO;
|
import cn.iocoder.yudao.module.farm.controller.admin.farmingnamemaintenance.vo.FarmingNameMaintenanceSaveReqVO;
|
||||||
|
import cn.iocoder.yudao.module.farm.controller.admin.farmingnamemaintenance.vo.FarmingNameMaintenanceTreeRespVO;
|
||||||
import cn.iocoder.yudao.module.farm.dal.dataobject.farmingnamemaintenance.FarmingNameMaintenanceDO;
|
import cn.iocoder.yudao.module.farm.dal.dataobject.farmingnamemaintenance.FarmingNameMaintenanceDO;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||||
@@ -61,4 +62,11 @@ public interface FarmingNameMaintenanceService {
|
|||||||
*/
|
*/
|
||||||
PageResult<FarmingNameMaintenanceDO> getFarmingNameMaintenancePage(FarmingNameMaintenancePageReqVO pageReqVO);
|
PageResult<FarmingNameMaintenanceDO> getFarmingNameMaintenancePage(FarmingNameMaintenancePageReqVO pageReqVO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得农事名称维护树形结构
|
||||||
|
*
|
||||||
|
* @return 农事名称维护树形结构
|
||||||
|
*/
|
||||||
|
List<FarmingNameMaintenanceTreeRespVO> getFarmingNameMaintenanceTree();
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -6,14 +6,19 @@ 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.farmingnamemaintenance.vo.FarmingNameMaintenancePageReqVO;
|
import cn.iocoder.yudao.module.farm.controller.admin.farmingnamemaintenance.vo.FarmingNameMaintenancePageReqVO;
|
||||||
import cn.iocoder.yudao.module.farm.controller.admin.farmingnamemaintenance.vo.FarmingNameMaintenanceSaveReqVO;
|
import cn.iocoder.yudao.module.farm.controller.admin.farmingnamemaintenance.vo.FarmingNameMaintenanceSaveReqVO;
|
||||||
|
import cn.iocoder.yudao.module.farm.controller.admin.farmingnamemaintenance.vo.FarmingNameMaintenanceTreeRespVO;
|
||||||
import cn.iocoder.yudao.module.farm.dal.dataobject.farmingnamemaintenance.FarmingNameMaintenanceDO;
|
import cn.iocoder.yudao.module.farm.dal.dataobject.farmingnamemaintenance.FarmingNameMaintenanceDO;
|
||||||
|
import cn.iocoder.yudao.module.farm.dal.dataobject.farmingtypemaintenance.FarmingTypeMaintenanceDO;
|
||||||
import cn.iocoder.yudao.module.farm.dal.mysql.farmingnamemaintenance.FarmingNameMaintenanceMapper;
|
import cn.iocoder.yudao.module.farm.dal.mysql.farmingnamemaintenance.FarmingNameMaintenanceMapper;
|
||||||
|
import cn.iocoder.yudao.module.farm.dal.mysql.farmingtypemaintenance.FarmingTypeMaintenanceMapper;
|
||||||
import cn.iocoder.yudao.module.farm.utils.StrHelperUtil;
|
import cn.iocoder.yudao.module.farm.utils.StrHelperUtil;
|
||||||
import jakarta.annotation.Resource;
|
import jakarta.annotation.Resource;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
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;
|
||||||
@@ -30,6 +35,8 @@ public class FarmingNameMaintenanceServiceImpl implements FarmingNameMaintenance
|
|||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private FarmingNameMaintenanceMapper farmingNameMaintenanceMapper;
|
private FarmingNameMaintenanceMapper farmingNameMaintenanceMapper;
|
||||||
|
@Resource
|
||||||
|
private FarmingTypeMaintenanceMapper farmingTypeMaintenanceMapper;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String createFarmingNameMaintenance(FarmingNameMaintenanceSaveReqVO createReqVO) {
|
public String createFarmingNameMaintenance(FarmingNameMaintenanceSaveReqVO createReqVO) {
|
||||||
@@ -39,6 +46,10 @@ public class FarmingNameMaintenanceServiceImpl implements FarmingNameMaintenance
|
|||||||
farmingNameMaintenance.setId(IdUtil.fastUUID());
|
farmingNameMaintenance.setId(IdUtil.fastUUID());
|
||||||
farmingNameMaintenance.setTenantId(String.valueOf(user.getTenantId()));
|
farmingNameMaintenance.setTenantId(String.valueOf(user.getTenantId()));
|
||||||
farmingNameMaintenance.setFarmingCode(StrHelperUtil.generate());
|
farmingNameMaintenance.setFarmingCode(StrHelperUtil.generate());
|
||||||
|
farmingNameMaintenance.setFarmingTypeCode(createReqVO.getFarmingType());
|
||||||
|
FarmingTypeMaintenanceDO farmingTypeMaintenanceDO = farmingTypeMaintenanceMapper.selectById(createReqVO.getFarmingType());
|
||||||
|
farmingNameMaintenance.setFarmingTypeName(farmingTypeMaintenanceDO.getFarmingName());
|
||||||
|
farmingNameMaintenance.setCreateTime(LocalDateTime.now());
|
||||||
farmingNameMaintenanceMapper.insert(farmingNameMaintenance);
|
farmingNameMaintenanceMapper.insert(farmingNameMaintenance);
|
||||||
|
|
||||||
// 返回
|
// 返回
|
||||||
@@ -84,4 +95,67 @@ private void validateFarmingNameMaintenanceExists(String id) {
|
|||||||
return farmingNameMaintenanceMapper.selectPage(pageReqVO);
|
return farmingNameMaintenanceMapper.selectPage(pageReqVO);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<FarmingNameMaintenanceTreeRespVO> getFarmingNameMaintenanceTree() {
|
||||||
|
|
||||||
|
List<FarmingTypeMaintenanceDO> allData = farmingTypeMaintenanceMapper.selectList(FarmingTypeMaintenanceDO::getUseStatus, 1);
|
||||||
|
|
||||||
|
if (allData == null || allData.isEmpty()) {
|
||||||
|
return new java.util.ArrayList<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 按农事类型分组
|
||||||
|
Map<String, List<FarmingTypeMaintenanceDO>> groupedByType = allData.stream()
|
||||||
|
.collect(java.util.stream.Collectors.groupingBy(
|
||||||
|
FarmingTypeMaintenanceDO::getId,
|
||||||
|
java.util.stream.Collectors.toList()
|
||||||
|
));
|
||||||
|
|
||||||
|
// 构建树形结构
|
||||||
|
List<FarmingNameMaintenanceTreeRespVO> result = new java.util.ArrayList<>();
|
||||||
|
|
||||||
|
for (Map.Entry<String, List<FarmingTypeMaintenanceDO>> entry : groupedByType.entrySet()) {
|
||||||
|
String typeCode = entry.getKey();
|
||||||
|
List<FarmingTypeMaintenanceDO> typeData = entry.getValue();
|
||||||
|
|
||||||
|
if (typeData.isEmpty()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取农事类型名称(从第一条记录获取)
|
||||||
|
String typeName = typeData.get(0).getFarmingName();
|
||||||
|
|
||||||
|
// 创建一级节点(农事类型)
|
||||||
|
FarmingNameMaintenanceTreeRespVO typeNode = FarmingNameMaintenanceTreeRespVO.builder()
|
||||||
|
.farmingTypeCode(typeCode)
|
||||||
|
.farmingTypeName(typeName)
|
||||||
|
.level(1)
|
||||||
|
.leaf(false)
|
||||||
|
.children(new java.util.ArrayList<>())
|
||||||
|
.build();
|
||||||
|
|
||||||
|
// 添加二级节点(农事名称)
|
||||||
|
List<FarmingNameMaintenanceDO> farmingNameMaintenanceDOS = farmingNameMaintenanceMapper.selectList(FarmingNameMaintenanceDO::getFarmingTypeCode, typeCode, FarmingNameMaintenanceDO::getUseStatus, 1);
|
||||||
|
for (FarmingNameMaintenanceDO nameData : farmingNameMaintenanceDOS) {
|
||||||
|
FarmingNameMaintenanceTreeRespVO nameNode = FarmingNameMaintenanceTreeRespVO.builder()
|
||||||
|
.farmingTypeCode(typeCode)
|
||||||
|
.farmingTypeName(typeName)
|
||||||
|
.farmingCode(nameData.getFarmingCode())
|
||||||
|
.farmingName(nameData.getFarmingName())
|
||||||
|
.useStatus(nameData.getUseStatus())
|
||||||
|
.createTime(nameData.getCreateTime())
|
||||||
|
.level(2)
|
||||||
|
.leaf(true)
|
||||||
|
.children(null)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
typeNode.getChildren().add(nameNode);
|
||||||
|
}
|
||||||
|
|
||||||
|
result.add(typeNode);
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -67,4 +67,7 @@ public interface FarmingTypeMaintenanceService {
|
|||||||
List<FarmingTypeMaintenanceDO> getFarmingTypeList();
|
List<FarmingTypeMaintenanceDO> getFarmingTypeList();
|
||||||
|
|
||||||
FarmingTypeMaintenanceDO getFarmingName(String farmingTypeCode);
|
FarmingTypeMaintenanceDO getFarmingName(String farmingTypeCode);
|
||||||
|
|
||||||
|
List<FarmingTypeMaintenanceDO> getFarmingTypeMaintenanceList();
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -54,7 +54,7 @@ public class FarmingTypeMaintenanceServiceImpl implements FarmingTypeMaintenance
|
|||||||
validateFarmingTypeMaintenanceExists(updateReqVO.getId());
|
validateFarmingTypeMaintenanceExists(updateReqVO.getId());
|
||||||
// 更新
|
// 更新
|
||||||
FarmingTypeMaintenanceDO updateObj = BeanUtils.toBean(updateReqVO, FarmingTypeMaintenanceDO.class);
|
FarmingTypeMaintenanceDO updateObj = BeanUtils.toBean(updateReqVO, FarmingTypeMaintenanceDO.class);
|
||||||
farmingTypeMaintenanceMapper.update(updateObj);
|
farmingTypeMaintenanceMapper.updateById(updateObj);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -96,4 +96,9 @@ public class FarmingTypeMaintenanceServiceImpl implements FarmingTypeMaintenance
|
|||||||
public FarmingTypeMaintenanceDO getFarmingName(String farmingTypeCode) {
|
public FarmingTypeMaintenanceDO getFarmingName(String farmingTypeCode) {
|
||||||
return farmingTypeMaintenanceMapper.selectOne(FarmingTypeMaintenanceDO::getFarmingCode, farmingTypeCode);
|
return farmingTypeMaintenanceMapper.selectOne(FarmingTypeMaintenanceDO::getFarmingCode, farmingTypeCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<FarmingTypeMaintenanceDO> getFarmingTypeMaintenanceList() {
|
||||||
|
return farmingTypeMaintenanceMapper.selectList(FarmingTypeMaintenanceDO::getTenantId, getLoginUser().getTenantId(), FarmingTypeMaintenanceDO::getUseStatus, 1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -69,13 +69,13 @@ public class InputLibraryServiceImpl implements InputLibraryService {
|
|||||||
Map<String, String> parentMap = list.stream().collect(Collectors.toMap(SysDictDO::getField1Code, SysDictDO::getField1Name, (v1, v2) -> v1));
|
Map<String, String> parentMap = list.stream().collect(Collectors.toMap(SysDictDO::getField1Code, SysDictDO::getField1Name, (v1, v2) -> v1));
|
||||||
|
|
||||||
InputLibraryDO aDo = inputLibraryMapper.selectById(id);
|
InputLibraryDO aDo = inputLibraryMapper.selectById(id);
|
||||||
String assetType = aDo.getAssetType();// 父类编号
|
Integer assetType = aDo.getAssetType();// 父类编号
|
||||||
String assetName = aDo.getAssetName();// 子类名称
|
String assetName = aDo.getAssetName();// 子类名称
|
||||||
|
|
||||||
SysDictDO insertObj = new SysDictDO();
|
SysDictDO insertObj = new SysDictDO();
|
||||||
insertObj.setDictTypeCode(DICT_TYPE_CODE_4);
|
insertObj.setDictTypeCode(DICT_TYPE_CODE_4);
|
||||||
insertObj.setDictTypeName("投入品");
|
insertObj.setDictTypeName("投入品");
|
||||||
insertObj.setField1Code(assetType);
|
insertObj.setField1Code(assetType.toString());
|
||||||
insertObj.setField1Name(parentMap.get(assetType));
|
insertObj.setField1Name(parentMap.get(assetType));
|
||||||
insertObj.setField2Code(StrHelperUtil.generate());
|
insertObj.setField2Code(StrHelperUtil.generate());
|
||||||
insertObj.setField2Name(assetName);
|
insertObj.setField2Name(assetName);
|
||||||
@@ -103,7 +103,7 @@ public class InputLibraryServiceImpl implements InputLibraryService {
|
|||||||
private void syncUpdateDict(String id) {
|
private void syncUpdateDict(String id) {
|
||||||
|
|
||||||
InputLibraryDO aDo = inputLibraryMapper.selectById(id);
|
InputLibraryDO aDo = inputLibraryMapper.selectById(id);
|
||||||
String assetType = aDo.getAssetType();// 父类编号
|
Integer assetType = aDo.getAssetType();// 父类编号
|
||||||
String assetName = aDo.getAssetName();// 子类名称
|
String assetName = aDo.getAssetName();// 子类名称
|
||||||
|
|
||||||
List<SysDictDO> list = sysDictMapper.groupByFieldCode(DICT_TYPE_CODE_4);
|
List<SysDictDO> list = sysDictMapper.groupByFieldCode(DICT_TYPE_CODE_4);
|
||||||
@@ -116,7 +116,7 @@ public class InputLibraryServiceImpl implements InputLibraryService {
|
|||||||
|
|
||||||
SysDictDO updateObj = new SysDictDO();
|
SysDictDO updateObj = new SysDictDO();
|
||||||
updateObj.setId(Integer.valueOf(id));
|
updateObj.setId(Integer.valueOf(id));
|
||||||
updateObj.setField1Code(assetType);
|
updateObj.setField1Code(assetType.toString());
|
||||||
updateObj.setField1Name(parentMap.get(assetType));
|
updateObj.setField1Name(parentMap.get(assetType));
|
||||||
updateObj.setField2Code(obj.getField2Code());
|
updateObj.setField2Code(obj.getField2Code());
|
||||||
updateObj.setField2Name(assetName);
|
updateObj.setField2Name(assetName);
|
||||||
|
|||||||
@@ -95,4 +95,41 @@ public interface FarmMessagePushService {
|
|||||||
* @param plotId 地块ID
|
* @param plotId 地块ID
|
||||||
*/
|
*/
|
||||||
void pushSystemNotification(String title, String content, String baseId, String plotId);
|
void pushSystemNotification(String title, String content, String baseId, String plotId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 检查WebSocket连接状态
|
||||||
|
*/
|
||||||
|
void checkWebSocketStatus();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 向指定租户的所有用户推送消息
|
||||||
|
*
|
||||||
|
* @param message 消息
|
||||||
|
* @param tenantId 租户ID
|
||||||
|
*/
|
||||||
|
void pushMessageToTenant(MessageCenterDO message, Long tenantId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 向指定租户的所有用户推送系统通知
|
||||||
|
*
|
||||||
|
* @param title 标题
|
||||||
|
* @param content 内容
|
||||||
|
* @param tenantId 租户ID
|
||||||
|
*/
|
||||||
|
void pushSystemNotificationToTenant(String title, String content, Long tenantId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 向所有租户的所有用户类型推送系统通知
|
||||||
|
*
|
||||||
|
* @param title 标题
|
||||||
|
* @param content 内容
|
||||||
|
*/
|
||||||
|
void pushSystemNotificationToAllTenants(String title, String content);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 向所有用户类型推送消息(不依赖租户)
|
||||||
|
*
|
||||||
|
* @param message 消息
|
||||||
|
*/
|
||||||
|
void pushMessageToAllUserTypes(MessageCenterDO message);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,10 @@ import cn.hutool.core.util.IdUtil;
|
|||||||
import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
|
import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
|
||||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||||
import cn.iocoder.yudao.framework.websocket.core.sender.WebSocketMessageSender;
|
import cn.iocoder.yudao.framework.websocket.core.sender.WebSocketMessageSender;
|
||||||
|
import cn.iocoder.yudao.framework.websocket.core.session.WebSocketSessionManager;
|
||||||
|
import cn.iocoder.yudao.framework.websocket.core.util.WebSocketFrameworkUtils;
|
||||||
|
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
|
||||||
|
import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder;
|
||||||
import cn.iocoder.yudao.module.farm.controller.admin.messagecenter.vo.MessageCenterSaveReqVO;
|
import cn.iocoder.yudao.module.farm.controller.admin.messagecenter.vo.MessageCenterSaveReqVO;
|
||||||
import cn.iocoder.yudao.module.farm.controller.admin.websocket.vo.FarmWebSocketMessageVO;
|
import cn.iocoder.yudao.module.farm.controller.admin.websocket.vo.FarmWebSocketMessageVO;
|
||||||
import cn.iocoder.yudao.module.farm.dal.dataobject.messagecenter.MessageCenterDO;
|
import cn.iocoder.yudao.module.farm.dal.dataobject.messagecenter.MessageCenterDO;
|
||||||
@@ -13,8 +17,11 @@ import cn.iocoder.yudao.module.farm.service.messagecenter.MessageCenterService;
|
|||||||
import jakarta.annotation.Resource;
|
import jakarta.annotation.Resource;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.web.socket.WebSocketSession;
|
||||||
|
import cn.iocoder.yudao.framework.security.core.LoginUser;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.Collection;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 农场消息推送 Service 实现类
|
* 农场消息推送 Service 实现类
|
||||||
@@ -31,6 +38,9 @@ public class FarmMessagePushServiceImpl implements FarmMessagePushService {
|
|||||||
@Resource
|
@Resource
|
||||||
private MessageCenterService messageCenterService;
|
private MessageCenterService messageCenterService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private WebSocketSessionManager webSocketSessionManager;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void pushAlarmMessage(MessageCenterDO message) {
|
public void pushAlarmMessage(MessageCenterDO message) {
|
||||||
log.info("[pushAlarmMessage][推送报警消息][messageId: {}][title: {}]",
|
log.info("[pushAlarmMessage][推送报警消息][messageId: {}][title: {}]",
|
||||||
@@ -101,8 +111,35 @@ public class FarmMessagePushServiceImpl implements FarmMessagePushService {
|
|||||||
// 转换为WebSocket消息格式
|
// 转换为WebSocket消息格式
|
||||||
FarmWebSocketMessageVO wsMessage = convertToWebSocketMessage(message);
|
FarmWebSocketMessageVO wsMessage = convertToWebSocketMessage(message);
|
||||||
|
|
||||||
// 推送到指定用户
|
// 推送到指定用户(所有用户类型)
|
||||||
webSocketMessageSender.send(1, Long.valueOf(userId), "farm", JsonUtils.toJsonString(wsMessage));
|
pushMessageToUserAllTypes(wsMessage, Long.valueOf(userId));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 向指定用户的所有用户类型推送消息
|
||||||
|
*/
|
||||||
|
private void pushMessageToUserAllTypes(FarmWebSocketMessageVO wsMessage, Long userId) {
|
||||||
|
log.info("[pushMessageToUserAllTypes][开始向用户{}的所有用户类型推送消息][messageId: {}]",
|
||||||
|
userId, wsMessage.getMessageId());
|
||||||
|
|
||||||
|
// 用户类型:1=会员,2=管理员
|
||||||
|
int successCount = 0;
|
||||||
|
int totalCount = 3;
|
||||||
|
|
||||||
|
for (int userType = 1; userType <= 3; userType++) {
|
||||||
|
try {
|
||||||
|
webSocketMessageSender.send(userType, userId, "farm", JsonUtils.toJsonString(wsMessage));
|
||||||
|
successCount++;
|
||||||
|
log.info("[pushMessageToUserAllTypes][向用户类型{}的用户{}推送消息成功][messageId: {}][userType: {}]",
|
||||||
|
userType, userId, wsMessage.getMessageId(), getUserTypeName(userType));
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.warn("[pushMessageToUserAllTypes][向用户类型{}的用户{}推送消息失败][messageId: {}][userType: {}]",
|
||||||
|
userType, userId, wsMessage.getMessageId(), getUserTypeName(userType), e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
log.info("[pushMessageToUserAllTypes][推送完成][userId: {}][messageId: {}][成功: {}/{}]",
|
||||||
|
userId, wsMessage.getMessageId(), successCount, totalCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -112,8 +149,8 @@ public class FarmMessagePushServiceImpl implements FarmMessagePushService {
|
|||||||
// 转换为WebSocket消息格式
|
// 转换为WebSocket消息格式
|
||||||
FarmWebSocketMessageVO wsMessage = convertToWebSocketMessage(message);
|
FarmWebSocketMessageVO wsMessage = convertToWebSocketMessage(message);
|
||||||
|
|
||||||
// 广播消息
|
// 广播消息到所有用户类型
|
||||||
webSocketMessageSender.send(1, "farm", JsonUtils.toJsonString(wsMessage));
|
pushMessageToAllUserTypes(wsMessage, getCurrentTenantId());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -181,6 +218,47 @@ public class FarmMessagePushServiceImpl implements FarmMessagePushService {
|
|||||||
pushNormalMessage(message);
|
pushNormalMessage(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 检查WebSocket连接状态
|
||||||
|
*/
|
||||||
|
public void checkWebSocketStatus() {
|
||||||
|
try {
|
||||||
|
log.info("[checkWebSocketStatus][开始检查WebSocket连接状态]");
|
||||||
|
|
||||||
|
// 获取当前租户ID
|
||||||
|
Long currentTenantId = getCurrentTenantId();
|
||||||
|
log.info("[checkWebSocketStatus][当前租户ID: {}]", currentTenantId);
|
||||||
|
|
||||||
|
// 检查所有用户类型的session
|
||||||
|
int totalSessions = 0;
|
||||||
|
for (int userType = 1; userType <= 3; userType++) {
|
||||||
|
Collection<WebSocketSession> sessions = webSocketSessionManager.getSessionList(userType);
|
||||||
|
log.info("[checkWebSocketStatus][用户类型{}的session数量: {}]", userType, sessions.size());
|
||||||
|
totalSessions += sessions.size();
|
||||||
|
|
||||||
|
// 打印每个session的信息
|
||||||
|
for (WebSocketSession session : sessions) {
|
||||||
|
LoginUser loginUser = WebSocketFrameworkUtils.getLoginUser(session);
|
||||||
|
if (loginUser != null) {
|
||||||
|
log.info("[checkWebSocketStatus][用户信息][sessionId: {}][userId: {}][userType: {}][tenantId: {}]",
|
||||||
|
session.getId(), loginUser.getId(), loginUser.getUserType(), loginUser.getTenantId());
|
||||||
|
} else {
|
||||||
|
log.warn("[checkWebSocketStatus][用户信息为空][sessionId: {}]", session.getId());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
log.info("[checkWebSocketStatus][总session数量: {}]", totalSessions);
|
||||||
|
|
||||||
|
if (totalSessions == 0) {
|
||||||
|
log.warn("[checkWebSocketStatus][没有找到WebSocket连接,但消息推送会继续执行]");
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("[checkWebSocketStatus][检查WebSocket状态失败]", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 转换为WebSocket消息格式
|
* 转换为WebSocket消息格式
|
||||||
*/
|
*/
|
||||||
@@ -260,8 +338,13 @@ public class FarmMessagePushServiceImpl implements FarmMessagePushService {
|
|||||||
*/
|
*/
|
||||||
private void pushMessage(FarmWebSocketMessageVO wsMessage) {
|
private void pushMessage(FarmWebSocketMessageVO wsMessage) {
|
||||||
try {
|
try {
|
||||||
// 广播消息到所有在线用户
|
// 获取当前租户ID
|
||||||
webSocketMessageSender.send(1, "farm", JsonUtils.toJsonString(wsMessage));
|
Long currentTenantId = getCurrentTenantId();
|
||||||
|
log.info("[pushMessage][准备推送消息][messageId: {}][title: {}][tenantId: {}]",
|
||||||
|
wsMessage.getMessageId(), wsMessage.getTitle(), currentTenantId);
|
||||||
|
|
||||||
|
// 向租户下的所有用户类型推送消息
|
||||||
|
pushMessageToAllUserTypes(wsMessage, currentTenantId);
|
||||||
|
|
||||||
log.info("[pushMessage][消息推送成功][messageId: {}][title: {}]",
|
log.info("[pushMessage][消息推送成功][messageId: {}][title: {}]",
|
||||||
wsMessage.getMessageId(), wsMessage.getTitle());
|
wsMessage.getMessageId(), wsMessage.getTitle());
|
||||||
@@ -270,4 +353,151 @@ public class FarmMessagePushServiceImpl implements FarmMessagePushService {
|
|||||||
wsMessage.getMessageId(), wsMessage.getTitle(), e);
|
wsMessage.getMessageId(), wsMessage.getTitle(), e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 向所有用户类型推送消息
|
||||||
|
*/
|
||||||
|
private void pushMessageToAllUserTypes(FarmWebSocketMessageVO wsMessage, Long tenantId) {
|
||||||
|
log.info("[pushMessageToAllUserTypes][开始向所有用户类型推送消息][messageId: {}][tenantId: {}]",
|
||||||
|
wsMessage.getMessageId(), tenantId);
|
||||||
|
|
||||||
|
// 用户类型:1=管理后台用户,2=用户APP用户,3=其他类型用户
|
||||||
|
int successCount = 0;
|
||||||
|
int totalCount = 3;
|
||||||
|
|
||||||
|
for (int userType = 1; userType <= 3; userType++) {
|
||||||
|
try {
|
||||||
|
// 向指定用户类型的所有用户推送消息
|
||||||
|
webSocketMessageSender.send(userType, "farm", JsonUtils.toJsonString(wsMessage));
|
||||||
|
successCount++;
|
||||||
|
log.info("[pushMessageToAllUserTypes][向用户类型{}推送消息成功][messageId: {}][userType: {}]",
|
||||||
|
userType, wsMessage.getMessageId(), getUserTypeName(userType));
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.warn("[pushMessageToAllUserTypes][向用户类型{}推送消息失败][messageId: {}][userType: {}]",
|
||||||
|
userType, wsMessage.getMessageId(), getUserTypeName(userType), e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
log.info("[pushMessageToAllUserTypes][推送完成][messageId: {}][成功: {}/{}]",
|
||||||
|
wsMessage.getMessageId(), successCount, totalCount);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取用户类型名称
|
||||||
|
*/
|
||||||
|
private String getUserTypeName(int userType) {
|
||||||
|
switch (userType) {
|
||||||
|
case 1: return "管理后台用户";
|
||||||
|
case 2: return "用户APP用户";
|
||||||
|
case 3: return "其他类型用户";
|
||||||
|
default: return "未知用户类型(" + userType + ")";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void pushMessageToTenant(MessageCenterDO message, Long tenantId) {
|
||||||
|
log.info("[pushMessageToTenant][向租户推送消息][tenantId: {}][title: {}]", tenantId, message.getTitle());
|
||||||
|
|
||||||
|
// 转换为WebSocket消息格式
|
||||||
|
FarmWebSocketMessageVO wsMessage = convertToWebSocketMessage(message);
|
||||||
|
|
||||||
|
// 向指定租户的所有用户类型推送消息
|
||||||
|
pushMessageToAllUserTypes(wsMessage, tenantId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void pushSystemNotificationToTenant(String title, String content, Long tenantId) {
|
||||||
|
log.info("[pushSystemNotificationToTenant][向租户推送系统通知][tenantId: {}][title: {}]", tenantId, title);
|
||||||
|
|
||||||
|
// 创建消息中心记录
|
||||||
|
MessageCenterDO message = createMessageCenterRecord(
|
||||||
|
MessageTypeEnum.MESSAGE.getType(),
|
||||||
|
title,
|
||||||
|
content,
|
||||||
|
null,
|
||||||
|
null,
|
||||||
|
null,
|
||||||
|
null
|
||||||
|
);
|
||||||
|
|
||||||
|
// 向指定租户推送消息
|
||||||
|
pushMessageToTenant(message, tenantId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void pushSystemNotificationToAllTenants(String title, String content) {
|
||||||
|
log.info("[pushSystemNotificationToAllTenants][向所有租户推送系统通知][title: {}]", title);
|
||||||
|
|
||||||
|
// 创建消息中心记录
|
||||||
|
MessageCenterDO message = createMessageCenterRecord(
|
||||||
|
MessageTypeEnum.MESSAGE.getType(),
|
||||||
|
title,
|
||||||
|
content,
|
||||||
|
null,
|
||||||
|
null,
|
||||||
|
null,
|
||||||
|
null
|
||||||
|
);
|
||||||
|
|
||||||
|
// 向所有用户类型推送消息(不依赖租户)
|
||||||
|
pushMessageToAllUserTypes(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void pushMessageToAllUserTypes(MessageCenterDO message) {
|
||||||
|
log.info("[pushMessageToAllUserTypes][向所有用户类型推送消息][title: {}]", message.getTitle());
|
||||||
|
|
||||||
|
// 转换为WebSocket消息格式
|
||||||
|
FarmWebSocketMessageVO wsMessage = convertToWebSocketMessage(message);
|
||||||
|
|
||||||
|
// 直接向所有用户类型推送,不依赖租户
|
||||||
|
pushMessageToAllUserTypesDirectly(wsMessage);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 直接向所有用户类型推送消息(不依赖租户)
|
||||||
|
*/
|
||||||
|
private void pushMessageToAllUserTypesDirectly(FarmWebSocketMessageVO wsMessage) {
|
||||||
|
log.info("[pushMessageToAllUserTypesDirectly][开始向所有用户类型推送消息][messageId: {}]",
|
||||||
|
wsMessage.getMessageId());
|
||||||
|
|
||||||
|
// 用户类型:1=管理后台用户,2=用户APP用户,3=其他类型用户
|
||||||
|
int successCount = 0;
|
||||||
|
int totalCount = 3;
|
||||||
|
|
||||||
|
for (int userType = 1; userType <= 3; userType++) {
|
||||||
|
try {
|
||||||
|
// 向指定用户类型的所有用户推送消息
|
||||||
|
webSocketMessageSender.send(userType, "farm", JsonUtils.toJsonString(wsMessage));
|
||||||
|
successCount++;
|
||||||
|
log.info("[pushMessageToAllUserTypesDirectly][向用户类型{}推送消息成功][messageId: {}][userType: {}]",
|
||||||
|
userType, wsMessage.getMessageId(), getUserTypeName(userType));
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.warn("[pushMessageToAllUserTypesDirectly][向用户类型{}推送消息失败][messageId: {}][userType: {}]",
|
||||||
|
userType, wsMessage.getMessageId(), getUserTypeName(userType), e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
log.info("[pushMessageToAllUserTypesDirectly][推送完成][messageId: {}][成功: {}/{}]",
|
||||||
|
wsMessage.getMessageId(), successCount, totalCount);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取当前租户ID
|
||||||
|
*/
|
||||||
|
private Long getCurrentTenantId() {
|
||||||
|
try {
|
||||||
|
// 从当前登录用户获取租户ID
|
||||||
|
LoginUser currentUser = SecurityFrameworkUtils.getLoginUser();
|
||||||
|
if (currentUser != null && currentUser.getTenantId() != null) {
|
||||||
|
return currentUser.getTenantId();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 从租户上下文获取
|
||||||
|
return TenantContextHolder.getTenantId();
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.warn("[getCurrentTenantId][获取租户ID失败]", e);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ import cn.iocoder.yudao.module.farm.controller.admin.specieslibrary.vo.SpeciesTh
|
|||||||
import cn.iocoder.yudao.module.farm.controller.admin.twodict.vo.TwoDictTreeRespVO;
|
import cn.iocoder.yudao.module.farm.controller.admin.twodict.vo.TwoDictTreeRespVO;
|
||||||
import cn.iocoder.yudao.module.farm.dal.dataobject.modelmanagement.ModelManagementDO;
|
import cn.iocoder.yudao.module.farm.dal.dataobject.modelmanagement.ModelManagementDO;
|
||||||
import cn.iocoder.yudao.module.farm.dal.dataobject.specieslibrary.SpeciesLibraryDO;
|
import cn.iocoder.yudao.module.farm.dal.dataobject.specieslibrary.SpeciesLibraryDO;
|
||||||
|
import cn.iocoder.yudao.module.farm.dal.dataobject.twodict.TwoDictDO;
|
||||||
import cn.iocoder.yudao.module.farm.dal.mysql.modelmanagement.ModelManagementMapper;
|
import cn.iocoder.yudao.module.farm.dal.mysql.modelmanagement.ModelManagementMapper;
|
||||||
import cn.iocoder.yudao.module.farm.dal.mysql.specieslibrary.SpeciesLibraryMapper;
|
import cn.iocoder.yudao.module.farm.dal.mysql.specieslibrary.SpeciesLibraryMapper;
|
||||||
import cn.iocoder.yudao.module.farm.dal.mysql.sysDict.SysDictDO;
|
import cn.iocoder.yudao.module.farm.dal.mysql.sysDict.SysDictDO;
|
||||||
@@ -70,11 +71,10 @@ public class SpeciesLibraryServiceImpl implements SpeciesLibraryService {
|
|||||||
speciesLibrary.setId(id);
|
speciesLibrary.setId(id);
|
||||||
speciesLibrary.setTenantId(String.valueOf(user.getTenantId()));
|
speciesLibrary.setTenantId(String.valueOf(user.getTenantId()));
|
||||||
speciesLibrary.setCreateTime(LocalDateTime.now());
|
speciesLibrary.setCreateTime(LocalDateTime.now());
|
||||||
SysDictThreeLvRespVO dictByField2Code = sysDictService.getDictByField2Code(speciesLibrary.getCategory());
|
TwoDictDO dictDO = twoDictService.getTwoDict(Long.valueOf(speciesLibrary.getCategory()));
|
||||||
speciesLibrary.setSpeciesName(dictByField2Code.getNames());
|
TwoDictDO twoDict = twoDictService.getTwoDict(dictDO.getParentId());
|
||||||
|
speciesLibrary.setSpeciesName(twoDict.getName() + "/" + dictDO.getName());
|
||||||
speciesLibraryMapper.insert(speciesLibrary);
|
speciesLibraryMapper.insert(speciesLibrary);
|
||||||
// 同步
|
|
||||||
this.syncCreateDict(id);
|
|
||||||
// 返回
|
// 返回
|
||||||
return speciesLibrary.getId();
|
return speciesLibrary.getId();
|
||||||
}
|
}
|
||||||
@@ -107,15 +107,12 @@ public class SpeciesLibraryServiceImpl implements SpeciesLibraryService {
|
|||||||
public void updateSpeciesLibrary(SpeciesLibrarySaveReqVO updateReqVO) {
|
public void updateSpeciesLibrary(SpeciesLibrarySaveReqVO updateReqVO) {
|
||||||
// 校验存在
|
// 校验存在
|
||||||
validateSpeciesLibraryExists(updateReqVO.getId());
|
validateSpeciesLibraryExists(updateReqVO.getId());
|
||||||
// 名称重复验证
|
|
||||||
SpeciesLibraryDO obj = speciesLibraryMapper.selectOne("cultivar_name", updateReqVO.getCultivarName());
|
|
||||||
if (ObjectUtils.isNotEmpty(obj)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// 更新
|
// 更新
|
||||||
SpeciesLibraryDO updateObj = BeanUtils.toBean(updateReqVO, SpeciesLibraryDO.class);
|
SpeciesLibraryDO updateObj = BeanUtils.toBean(updateReqVO, SpeciesLibraryDO.class);
|
||||||
SysDictThreeLvRespVO dictByField2Code = sysDictService.getDictByField2Code(updateObj.getCategory());
|
TwoDictDO dictDO = twoDictService.getTwoDict(Long.valueOf(updateReqVO.getCategory()));
|
||||||
updateObj.setSpeciesName(dictByField2Code.getNames());
|
TwoDictDO twoDict = twoDictService.getTwoDict(dictDO.getParentId());
|
||||||
|
updateObj.setSpeciesName(twoDict.getName() + "/" + dictDO.getName());
|
||||||
speciesLibraryMapper.updateById(updateObj);
|
speciesLibraryMapper.updateById(updateObj);
|
||||||
// 同步
|
// 同步
|
||||||
this.syncUpdateDict(updateObj.getId());
|
this.syncUpdateDict(updateObj.getId());
|
||||||
|
|||||||
Reference in New Issue
Block a user