feat (farm): 业务功能

- 农场首页,右侧天气弹框展示农场概要信息
- 管理中心,字典表内容整合
- 模拟测试数据
This commit is contained in:
达富斌
2025-08-17 18:29:23 +08:00
parent cbf3703c47
commit 130ff09807
26 changed files with 799 additions and 21 deletions

View File

@@ -0,0 +1,270 @@
package cn.iocoder.yudao.module.farm.controller.admin.dict;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.farm.controller.admin.dict.vo.CommonDictRespVO;
import cn.iocoder.yudao.module.farm.controller.admin.dict.vo.FarmingTypeRespVO;
import cn.iocoder.yudao.module.farm.controller.admin.dict.vo.SpeciesClassifyLibraryRespVO;
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.FarmingNameMaintenanceSaveReqVO;
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.FarmingTypeMaintenanceSaveReqVO;
import cn.iocoder.yudao.module.farm.controller.admin.inputlibrary.vo.InputLibraryPageReqVO;
import cn.iocoder.yudao.module.farm.controller.admin.inputlibrary.vo.InputLibraryRespVO;
import cn.iocoder.yudao.module.farm.controller.admin.inputlibrary.vo.InputLibrarySaveReqVO;
import cn.iocoder.yudao.module.farm.controller.admin.specieslibrary.vo.SpeciesLibraryPageReqVO;
import cn.iocoder.yudao.module.farm.controller.admin.specieslibrary.vo.SpeciesLibraryRespVO;
import cn.iocoder.yudao.module.farm.controller.admin.specieslibrary.vo.SpeciesLibrarySaveReqVO;
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.dataobject.inputlibrary.InputLibraryDO;
import cn.iocoder.yudao.module.farm.dal.dataobject.speciesclassifylibrary.SpeciesClassifyLibraryDO;
import cn.iocoder.yudao.module.farm.dal.dataobject.specieslibrary.SpeciesLibraryDO;
import cn.iocoder.yudao.module.farm.service.farmingnamemaintenance.FarmingNameMaintenanceService;
import cn.iocoder.yudao.module.farm.service.farmingtypemaintenance.FarmingTypeMaintenanceService;
import cn.iocoder.yudao.module.farm.service.inputlibrary.InputLibraryService;
import cn.iocoder.yudao.module.farm.service.speciesclassifylibrary.SpeciesClassifyLibraryService;
import cn.iocoder.yudao.module.farm.service.specieslibrary.SpeciesLibraryService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.Arrays;
import java.util.List;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
/**
* @description: 字典表接口
* 农事类型维护: farm_farming_type_maintenance
* 农事名称维护: farm_farming_name_maintenance
* 物种库维护: farm_species_library
* 物种分类库维护 farm_species_classify_library
* 投入品库维护: farm_input_library
* 灾害库维护: farm_disaster_data
* 气象灾害库维护 : farm_weather_disaster_library
* @author: binda
* @date: 2025/8/16 16:07
*/
@Tag(name = "管理中心 - 基础数据管理")
@RestController
@RequestMapping("/farm/management-center/dict")
@Validated
public class DictController {
private final FarmingTypeMaintenanceService farmingTypeMaintenanceService;
private final FarmingNameMaintenanceService farmingNameMaintenanceService;
private final SpeciesLibraryService speciesLibraryService;
private final SpeciesClassifyLibraryService speciesClassifyLibraryService;
private final InputLibraryService inputLibraryService;
public DictController(FarmingTypeMaintenanceService farmingTypeMaintenanceService, FarmingNameMaintenanceService farmingNameMaintenanceService, SpeciesLibraryService speciesLibraryService, SpeciesClassifyLibraryService speciesClassifyLibraryService, InputLibraryService inputLibraryService) {
this.farmingTypeMaintenanceService = farmingTypeMaintenanceService;
this.farmingNameMaintenanceService = farmingNameMaintenanceService;
this.speciesLibraryService = speciesLibraryService;
this.speciesClassifyLibraryService = speciesClassifyLibraryService;
this.inputLibraryService = inputLibraryService;
}
// 农事类型
@Operation(summary = "字典数据维护-农事类型-分页")
@GetMapping("/farming-type/page")
public CommonResult<PageResult<FarmingTypeMaintenanceRespVO>> getFarmingTypePage(FarmingTypeMaintenancePageReqVO reqVO) {
PageResult<FarmingTypeMaintenanceDO> pageResult = farmingTypeMaintenanceService.getFarmingTypeMaintenancePage(reqVO);
return success(BeanUtils.toBean(pageResult, FarmingTypeMaintenanceRespVO.class));
}
@Operation(summary = "字典数据维护-农事类型-新增")
@PostMapping("/farming-type/create")
public CommonResult<String> createFarmingType(@RequestBody FarmingTypeMaintenanceSaveReqVO saveVO) {
String res = farmingTypeMaintenanceService.createFarmingTypeMaintenance(saveVO);
return success(res);
}
@Operation(summary = "字典数据维护-农事类型-编辑")
@PutMapping("/farming-type/update")
public CommonResult<Boolean> updateFarmingType(@RequestBody FarmingTypeMaintenanceSaveReqVO updateVO) {
farmingTypeMaintenanceService.updateFarmingTypeMaintenance(updateVO);
return success(true);
}
@Operation(summary = "字典数据维护-农事类型-删除")
@DeleteMapping("/farming-type/delete/{id}")
public CommonResult<Boolean> delFarmingType(@PathVariable("id") String id) {
farmingTypeMaintenanceService.deleteFarmingTypeMaintenance(id);
return success(true);
}
// 农事名称
@Operation(summary = "字典数据维护-农事名称-分页")
@GetMapping("/farming-name/page")
public CommonResult<PageResult<FarmingNameMaintenanceRespVO>> getFarmingNameMaintenancePage(@Valid FarmingNameMaintenancePageReqVO pageReqVO) {
PageResult<FarmingNameMaintenanceDO> pageResult = farmingNameMaintenanceService.getFarmingNameMaintenancePage(pageReqVO);
return success(BeanUtils.toBean(pageResult, FarmingNameMaintenanceRespVO.class));
}
@Operation(summary = "字典数据维护-农事名称-新增")
@PostMapping("/farming-name/create")
public CommonResult<String> createFarmingNameMaintenance(@Valid @RequestBody FarmingNameMaintenanceSaveReqVO createReqVO) {
return success(farmingNameMaintenanceService.createFarmingNameMaintenance(createReqVO));
}
@Operation(summary = "字典数据维护-农事名称-编辑")
@PutMapping("/farming-name/update")
public CommonResult<Boolean> updateFarmingNameMaintenance(@Valid @RequestBody FarmingNameMaintenanceSaveReqVO updateReqVO) {
farmingNameMaintenanceService.updateFarmingNameMaintenance(updateReqVO);
return success(true);
}
@Operation(summary = "字典数据维护-农事名称-删除")
@DeleteMapping("/farming-name/delete/{id}")
public CommonResult<Boolean> deleteFarmingNameMaintenance(@PathVariable("id") String id) {
farmingNameMaintenanceService.deleteFarmingNameMaintenance(id);
return success(true);
}
// 物种库维护
@Operation(summary = "字典数据维护-物种库-分页")
@GetMapping("/species/page")
public CommonResult<PageResult<SpeciesLibraryRespVO>> getSpeciesLibraryPage(@Valid SpeciesLibraryPageReqVO pageReqVO) {
PageResult<SpeciesLibraryDO> pageResult = speciesLibraryService.getSpeciesLibraryPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, SpeciesLibraryRespVO.class));
}
@Operation(summary = "字典数据维护-物种库-新增")
@PostMapping("/species/create")
public CommonResult<String> createSpeciesLibrary(@Valid @RequestBody SpeciesLibrarySaveReqVO createReqVO) {
return success(speciesLibraryService.createSpeciesLibrary(createReqVO));
}
@Operation(summary = "字典数据维护-物种库-编辑")
@PutMapping("/species/update")
public CommonResult<Boolean> updateSpeciesLibrary(@Valid @RequestBody SpeciesLibrarySaveReqVO updateReqVO) {
speciesLibraryService.updateSpeciesLibrary(updateReqVO);
return success(true);
}
@Operation(summary = "字典数据维护-物种库-删除")
@DeleteMapping("/species/delete/{id}")
public CommonResult<Boolean> deleteSpeciesLibrary(@PathVariable("id") String id) {
speciesLibraryService.deleteSpeciesLibrary(id);
return success(true);
}
// 物种类别维护 todo 后续
// 投入品维护
@Operation(summary = "字典数据维护-投入品-分页")
@GetMapping("/invest-goods/page")
public CommonResult<PageResult<InputLibraryRespVO>> getInputLibraryPage(@Valid InputLibraryPageReqVO pageReqVO) {
PageResult<InputLibraryDO> pageResult = inputLibraryService.getInputLibraryPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, InputLibraryRespVO.class));
}
@Operation(summary = "字典数据维护-投入品-新增")
@PostMapping("/invest-goods/create")
public CommonResult<String> createInputLibrary(@Valid @RequestBody InputLibrarySaveReqVO createReqVO) {
return success(inputLibraryService.createInputLibrary(createReqVO));
}
@PutMapping("/invest-goods/update")
@Operation(summary = "字典数据维护-投入品-编辑")
public CommonResult<Boolean> updateInputLibrary(@Valid @RequestBody InputLibrarySaveReqVO updateReqVO) {
inputLibraryService.updateInputLibrary(updateReqVO);
return success(true);
}
@Operation(summary = "字典数据维护-投入品-删除")
@DeleteMapping("/invest-goods/delete/{id}")
public CommonResult<Boolean> deleteInputLibrary(@PathVariable("id") String id) {
inputLibraryService.deleteInputLibrary(id);
return success(true);
}
// 灾害库维护
// 气象灾害库维护
// 下拉框列表
@Operation(summary = "字典数据维护-下拉框列表-农事类型")
@GetMapping("/list/farming-type")
public CommonResult<List<FarmingTypeRespVO>> getFarmingTypeList() {
List<FarmingTypeMaintenanceDO> res = farmingTypeMaintenanceService.getFarmingTypeList();
return success(BeanUtils.toBean(res, FarmingTypeRespVO.class));
}
@Operation(summary = "字典数据维护-下拉框列表-物种类别")
@GetMapping("/list/species-classify-library")
public CommonResult<List<SpeciesClassifyLibraryRespVO>> getSpeciesClassifyLibraryList() {
List<SpeciesClassifyLibraryDO> res = speciesClassifyLibraryService.getSpeciesClassifyLibraryList();
return success(BeanUtils.toBean(res, SpeciesClassifyLibraryRespVO.class));
}
@Operation(summary = "字典数据维护-下拉框列表-投入品类型")
@GetMapping("/list/invest-goods")
public CommonResult<List<CommonDictRespVO>> getInvestGoodsList() {
// todo 后续维护到字典表
List<CommonDictRespVO> list = Arrays.asList(
new CommonDictRespVO("1", "肥料", 1),
new CommonDictRespVO("2", "药物", 1),
new CommonDictRespVO("3", "种子", 1),
new CommonDictRespVO("4", "膜", 1),
new CommonDictRespVO("99", "其他", 1)
);
return success(list);
}
@Operation(summary = "字典数据维护-下拉框列表-投入品规格-单位1")
@GetMapping("/list/units/1")
public CommonResult<List<CommonDictRespVO>> getUnits1List() {
// todo 后续维护到字典表
List<CommonDictRespVO> list = Arrays.asList(
new CommonDictRespVO("1", "吨", 1),
new CommonDictRespVO("2", "千克", 1),
new CommonDictRespVO("3", "斤", 1),
new CommonDictRespVO("4", "立方米", 1),
new CommonDictRespVO("5", "米", 1),
new CommonDictRespVO("6", "克", 1)
);
return success(list);
}
@Operation(summary = "字典数据维护-下拉框列表-投入品规格-单位2")
@GetMapping("/list/units/2")
public CommonResult<List<CommonDictRespVO>> getUnits2List() {
// todo 后续维护到字典表
List<CommonDictRespVO> list = Arrays.asList(
new CommonDictRespVO("1", "包", 1),
new CommonDictRespVO("2", "袋", 1),
new CommonDictRespVO("3", "桶", 1),
new CommonDictRespVO("4", "车", 1),
new CommonDictRespVO("5", "捆", 1),
new CommonDictRespVO("6", "立方米", 1),
new CommonDictRespVO("7", "箱", 1)
);
return success(list);
}
}

View File

@@ -0,0 +1,25 @@
package cn.iocoder.yudao.module.farm.controller.admin.dict.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @description: 投入品类型
* @author: binda
* @date: 2025/8/17 17:20
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class CommonDictRespVO {
@Schema(description = "字典-编码")
private String code;
@Schema(description = "字典-名称")
private String name;
@Schema(description = "使用状态")
private Integer useStatus;
}

View File

@@ -0,0 +1,20 @@
package cn.iocoder.yudao.module.farm.controller.admin.dict.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
/**
* @description:
* @author: binda
* @date: 2025/8/17 13:45
*/
@Data
public class FarmingTypeReqVO {
@Schema(description = "使用状态 (0=启用,1=停用)")
private Integer useStatus;
@Schema(description = "农事类型-名称")
private String farmingName;
}

View File

@@ -0,0 +1,24 @@
package cn.iocoder.yudao.module.farm.controller.admin.dict.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
/**
* @description: 字典表 - 农事类型
* @author: binda
* @date: 2025/8/17 13:28
*/
@Data
public class FarmingTypeRespVO {
@Schema(description = "ID")
private String id;
@Schema(description = "农事编码")
private String farmingCode;
@Schema(description = "农事类型-名称")
private String farmingName;
}

View File

@@ -0,0 +1,20 @@
package cn.iocoder.yudao.module.farm.controller.admin.dict.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
/**
* @description: 农事类型维护 - 新增
* @author: binda
* @date: 2025/8/17 13:52
*/
@Data
public class FarmingTypeSaveVO {
@Schema(description = "农事类型-名称")
private String farmingName;
@Schema(description = "使用状态 (0=启用,1=停用)")
private Integer useStatus;
}

View File

@@ -0,0 +1,25 @@
package cn.iocoder.yudao.module.farm.controller.admin.dict.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @description: 投入品类型
* @author: binda
* @date: 2025/8/17 17:20
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class InvestGoodsRespVO {
@Schema(description = "投入品-编码")
private String code;
@Schema(description = "投入品-名称")
private String name;
@Schema(description = "使用状态")
private Integer useStatus;
}

View File

@@ -0,0 +1,25 @@
package cn.iocoder.yudao.module.farm.controller.admin.dict.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
/**
* @description:
* @author: binda
* @date: 2025/8/17 16:51
*/
@Data
public class SpeciesClassifyLibraryReqVO {
@Schema(description = "ID")
private String id;
@Schema(description = "一级分类-编码")
private String primaryClassCode;
@Schema(description = "一级分类-名称")
private String primaryClassName;
@Schema(description = "二级分类-编码")
private String secondaryClassCode;
@Schema(description = "二级分类-名称")
private String secondaryClassName;
@Schema(description = "使用状态")
private Integer useStatus;
}

View File

@@ -0,0 +1,25 @@
package cn.iocoder.yudao.module.farm.controller.admin.dict.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
/**
* @description: 物种分类
* @author: binda
* @date: 2025/8/17 16:43
*/
@Data
public class SpeciesClassifyLibraryRespVO {
@Schema(description = "ID")
private String id;
@Schema(description = "一级分类-编码")
private String primaryClassCode;
@Schema(description = "一级分类-名称")
private String primaryClassName;
@Schema(description = "二级分类-编码")
private String secondaryClassCode;
@Schema(description = "二级分类-名称")
private String secondaryClassName;
@Schema(description = "使用状态")
private String useStatus;
}

View File

@@ -13,10 +13,12 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_
@Data
public class FarmingTypeMaintenancePageReqVO extends PageParam {
@Schema(description = "农事类型", example = "1")
private String farmingType;
@Schema(description = "农事类型-编码", example = "1")
private String farmingCode;
@Schema(description = "农事类型-名称", example = "采收")
private String farmingName;
@Schema(description = "0=启用,1=停用", example = "2")
@Schema(description = "0=启用,1=停用", example = "0")
private Integer useStatus;
@Schema(description = "创建时间")

View File

@@ -13,8 +13,10 @@ public class FarmingTypeMaintenanceSaveReqVO {
@Schema(description = "农事类型", example = "1")
private String farmingType;
@Schema(description = "0=启用,1=停用", example = "2")
@Schema(description = "0=启用,1=停用", example = "0")
private Integer useStatus;
@Schema(description = "0=未删除,1=已删除", example = "0")
private Integer deleted;
@Schema(description = "基地id", example = "29265")
private String baseId;

View File

@@ -1,9 +1,9 @@
package cn.iocoder.yudao.module.farm.controller.admin.home;
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.home.vo.BaseNameVO;
import cn.iocoder.yudao.module.farm.controller.admin.home.vo.HomeInfoVO;
import cn.iocoder.yudao.module.farm.dal.dataobject.home.HomeInfoDO;
import cn.iocoder.yudao.module.farm.controller.admin.home.vo.OutlinedInfoVO;
import cn.iocoder.yudao.module.farm.service.home.HomeService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
@@ -12,6 +12,8 @@ import jakarta.annotation.Resource;
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;
/**
@@ -30,12 +32,27 @@ public class HomeController {
@Parameter(name = "baseId", description = "基地ID", required = true)
@Operation(summary = "农场首页")
@GetMapping("/get/{baseId}")
@GetMapping("/{baseId}")
public CommonResult<HomeInfoVO> getBaseInfo(@PathVariable("baseId") String baseId) {
HomeInfoVO res = homeService.getHomeInfo(baseId);
return success(res);
}
@Parameter(name = "baseId", description = "基地ID", required = true)
@Operation(summary = "农场首页-概要信息")
@GetMapping("/outlined/{baseId}")
public CommonResult<OutlinedInfoVO> getWeatherInfo(@PathVariable("baseId") String baseId) {
OutlinedInfoVO res = homeService.getOutlinedInfo(baseId);
return success(res);
}
@Operation(summary = "农场首页-基地名称列表")
@GetMapping("/baseNames")
public CommonResult<List<BaseNameVO>> getBaseNameList() {
List<BaseNameVO> res = homeService.getBaseNameList();
return success(res);
}
}

View File

@@ -0,0 +1,14 @@
package cn.iocoder.yudao.module.farm.controller.admin.home.vo;
import lombok.Data;
/**
* @description: 基地名称下拉列表
* @author: binda
* @date: 2025/8/15 18:04
*/
@Data
public class BaseNameVO {
public String baseId;
public String baseName;
}

View File

@@ -0,0 +1,25 @@
package cn.iocoder.yudao.module.farm.controller.admin.home.vo;
import lombok.Data;
/**
* @description: 农场首页-天气
* @author: binda
* @date: 2025/8/15 14:32
*/
@Data
public class OutlinedInfoVO {
/**
* 今日任务数量
*/
private Integer taskCount;
/**
* 告警数量
*/
private Integer warningCount;
/**
* 物联设备数量
*/
private Integer iotCount;
}

View File

@@ -30,7 +30,8 @@ public class FarmingTypeMaintenanceDO extends BaseDO {
/**
* 农事类型
*/
private String farmingType;
private String farmingCode;
private String farmingName;
/**
* 0=启用,1=停用
*/

View File

@@ -0,0 +1,49 @@
package cn.iocoder.yudao.module.farm.dal.dataobject.speciesclassifylibrary;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.*;
/**
* @description: 物种分类 DO
* @author: binda
* @date: 2025/8/17 16:31
*/
@TableName("farm_species_classify_library")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class SpeciesClassifyLibraryDO extends BaseDO {
/**
* id
*/
@TableId(type = IdType.INPUT)
private String id;
/**
* 一级分类-编码
*/
private String primaryClassCode;
/**
* 一级分类-名称
*/
private String primaryClassName;
/**
* 二级分类-编码
*/
private String secondaryClassCode;
/**
* 二级分类-名称
*/
private String secondaryClassName;
/**
* 0=启用,1=停用
*/
private Integer useStatus;
}

View File

@@ -4,8 +4,12 @@ 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.farmingtypemaintenance.vo.FarmingTypeMaintenancePageReqVO;
import cn.iocoder.yudao.module.farm.controller.admin.farmingtypemaintenance.vo.FarmingTypeMaintenanceSaveReqVO;
import cn.iocoder.yudao.module.farm.dal.dataobject.farmingtypemaintenance.FarmingTypeMaintenanceDO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 农事类型维护 Mapper
@@ -17,7 +21,8 @@ public interface FarmingTypeMaintenanceMapper extends BaseMapperX<FarmingTypeMai
default PageResult<FarmingTypeMaintenanceDO> selectPage(FarmingTypeMaintenancePageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<FarmingTypeMaintenanceDO>()
.eqIfPresent(FarmingTypeMaintenanceDO::getFarmingType, reqVO.getFarmingType())
.eqIfPresent(FarmingTypeMaintenanceDO::getFarmingCode, reqVO.getFarmingCode())
.eqIfPresent(FarmingTypeMaintenanceDO::getFarmingName, reqVO.getFarmingName())
.eqIfPresent(FarmingTypeMaintenanceDO::getUseStatus, reqVO.getUseStatus())
.betweenIfPresent(FarmingTypeMaintenanceDO::getCreateTime, reqVO.getCreateTime())
.eqIfPresent(FarmingTypeMaintenanceDO::getBaseId, reqVO.getBaseId())
@@ -28,4 +33,5 @@ public interface FarmingTypeMaintenanceMapper extends BaseMapperX<FarmingTypeMai
.orderByDesc(FarmingTypeMaintenanceDO::getCreateTime));
}
List<FarmingTypeMaintenanceDO> listForFarmingType(@Param("req") FarmingTypeMaintenanceSaveReqVO reqVO );
}

View File

@@ -0,0 +1,21 @@
package cn.iocoder.yudao.module.farm.dal.mysql.speciesclassifylibrary;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.module.farm.controller.admin.dict.vo.SpeciesClassifyLibraryReqVO;
import cn.iocoder.yudao.module.farm.dal.dataobject.speciesclassifylibrary.SpeciesClassifyLibraryDO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @description:
* @author: binda
* @date: 2025/8/17 16:30
*/
@Mapper
public interface SpeciesClassifyLibraryMapper extends BaseMapperX<SpeciesClassifyLibraryDO> {
List<SpeciesClassifyLibraryDO> getSpeciesClassifyLibraryList(@Param("req") SpeciesClassifyLibraryReqVO reqVO);
}

View File

@@ -0,0 +1,15 @@
package cn.iocoder.yudao.module.farm.enums;
/**
* @description: 通用常量
* @author: binda
* @date: 2025/8/17 15:48
*/
public class CommonConstants {
public final static Integer YES_CODE = 1;
public final static String YES_NAME = "是";
public final static Integer NO_CODE = 0;
public final static String NO_NAME = "否";
}

View File

@@ -4,7 +4,6 @@ import cn.iocoder.yudao.module.farm.controller.admin.farmingtypemaintenance.vo.F
import cn.iocoder.yudao.module.farm.controller.admin.farmingtypemaintenance.vo.FarmingTypeMaintenanceSaveReqVO;
import cn.iocoder.yudao.module.farm.dal.dataobject.farmingtypemaintenance.FarmingTypeMaintenanceDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import jakarta.validation.Valid;
import java.util.List;
@@ -61,4 +60,9 @@ public interface FarmingTypeMaintenanceService {
*/
PageResult<FarmingTypeMaintenanceDO> getFarmingTypeMaintenancePage(FarmingTypeMaintenancePageReqVO pageReqVO);
/**
* 列表查询
* @return
*/
List<FarmingTypeMaintenanceDO> getFarmingTypeList();
}

View File

@@ -1,18 +1,16 @@
package cn.iocoder.yudao.module.farm.service.farmingtypemaintenance;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.IdUtil;
import cn.iocoder.yudao.framework.security.core.LoginUser;
import cn.iocoder.yudao.module.farm.controller.admin.farmingtypemaintenance.vo.FarmingTypeMaintenancePageReqVO;
import cn.iocoder.yudao.module.farm.controller.admin.farmingtypemaintenance.vo.FarmingTypeMaintenanceSaveReqVO;
import cn.iocoder.yudao.module.farm.enums.CommonConstants;
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.farmingtypemaintenance.FarmingTypeMaintenanceDO;
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.module.farm.dal.mysql.farmingtypemaintenance.FarmingTypeMaintenanceMapper;
@@ -20,8 +18,6 @@ import cn.iocoder.yudao.module.farm.dal.mysql.farmingtypemaintenance.FarmingType
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.FARMING_TYPE_MAINTENANCE_NOT_EXISTS;
@@ -68,12 +64,12 @@ public class FarmingTypeMaintenanceServiceImpl implements FarmingTypeMaintenance
}
@Override
public void deleteFarmingTypeMaintenanceListByIds(List<String> ids) {
public void deleteFarmingTypeMaintenanceListByIds(List<String> ids) {
// 删除
farmingTypeMaintenanceMapper.deleteByIds(ids);
}
}
private void validateFarmingTypeMaintenanceExists(String id) {
private void validateFarmingTypeMaintenanceExists(String id) {
if (farmingTypeMaintenanceMapper.selectById(id) == null) {
throw exception(FARMING_TYPE_MAINTENANCE_NOT_EXISTS);
}
@@ -89,4 +85,11 @@ private void validateFarmingTypeMaintenanceExists(String id) {
return farmingTypeMaintenanceMapper.selectPage(pageReqVO);
}
@Override
public List<FarmingTypeMaintenanceDO> getFarmingTypeList() {
FarmingTypeMaintenanceSaveReqVO reqVO = new FarmingTypeMaintenanceSaveReqVO();
reqVO.setDeleted(CommonConstants.NO_CODE);
return farmingTypeMaintenanceMapper.listForFarmingType(reqVO);
}
}

View File

@@ -1,17 +1,30 @@
package cn.iocoder.yudao.module.farm.service.home;
import cn.iocoder.yudao.module.farm.controller.admin.home.vo.BaseNameVO;
import cn.iocoder.yudao.module.farm.controller.admin.home.vo.HomeInfoVO;
import cn.iocoder.yudao.module.farm.controller.admin.home.vo.OutlinedInfoVO;
import java.util.List;
/**
* @description:
* @description: 首页接口
* @author: binda
* @data: 2025/8/14 19:45
*/
public interface HomeService {
/**
* 首页综合信息
* @param baseId
* @param baseId 基地ID
* @return
*/
HomeInfoVO getHomeInfo(String baseId);
/**
* 首页概要信息
* @param baseId 基地ID
* @return
*/
OutlinedInfoVO getOutlinedInfo(String baseId);
List<BaseNameVO> getBaseNameList();
}

View File

@@ -1,10 +1,13 @@
package cn.iocoder.yudao.module.farm.service.home;
import cn.iocoder.yudao.module.farm.controller.admin.home.vo.BaseNameVO;
import cn.iocoder.yudao.module.farm.controller.admin.home.vo.HomeInfoVO;
import cn.iocoder.yudao.module.farm.controller.admin.home.vo.OutlinedInfoVO;
import cn.iocoder.yudao.module.farm.dal.dataobject.baseinfo.BaseInfoDO;
import cn.iocoder.yudao.module.farm.dal.dataobject.plotinfo.PlotInfoDO;
import cn.iocoder.yudao.module.farm.dal.dataobject.productionplan.ProductionPlanDO;
import cn.iocoder.yudao.module.farm.service.baseinfo.BaseInfoService;
import cn.iocoder.yudao.module.farm.service.deviceplotrelation.DevicePlotRelationService;
import cn.iocoder.yudao.module.farm.service.plotinfo.PlotInfoService;
import cn.iocoder.yudao.module.farm.service.productionplan.ProductionPlanService;
import org.springframework.stereotype.Service;
@@ -23,11 +26,13 @@ public class HomeServiceImpl implements HomeService {
private final BaseInfoService baseInfoService;
private final PlotInfoService plotInfoService;
private final ProductionPlanService productionPlanService;
private final DevicePlotRelationService driverPropertyInfoService;
public HomeServiceImpl(BaseInfoService baseInfoService, PlotInfoService plotInfoService, ProductionPlanService productionPlanService) {
public HomeServiceImpl(BaseInfoService baseInfoService, PlotInfoService plotInfoService, ProductionPlanService productionPlanService, DevicePlotRelationService driverPropertyInfoService) {
this.baseInfoService = baseInfoService;
this.plotInfoService = plotInfoService;
this.productionPlanService = productionPlanService;
this.driverPropertyInfoService = driverPropertyInfoService;
}
@Override
@@ -108,4 +113,20 @@ public class HomeServiceImpl implements HomeService {
return resList;
}
@Override
public OutlinedInfoVO getOutlinedInfo(String baseId) {
OutlinedInfoVO res = new OutlinedInfoVO();
res.setTaskCount(0); // todo 任务数量
res.setWarningCount(0); // todo 告警数量
res.setIotCount(0); // todo 物联设备
return res;
}
@Override
public List<BaseNameVO> getBaseNameList() {
return null;
}
}

View File

@@ -0,0 +1,14 @@
package cn.iocoder.yudao.module.farm.service.speciesclassifylibrary;
import cn.iocoder.yudao.module.farm.dal.dataobject.speciesclassifylibrary.SpeciesClassifyLibraryDO;
import java.util.List;
/**
* @description: 物种分类
* @author: binda
* @data: 2025/8/17 16:27
*/
public interface SpeciesClassifyLibraryService {
List<SpeciesClassifyLibraryDO> getSpeciesClassifyLibraryList();
}

View File

@@ -0,0 +1,29 @@
package cn.iocoder.yudao.module.farm.service.speciesclassifylibrary;
import cn.iocoder.yudao.module.farm.controller.admin.dict.vo.SpeciesClassifyLibraryReqVO;
import cn.iocoder.yudao.module.farm.dal.dataobject.speciesclassifylibrary.SpeciesClassifyLibraryDO;
import cn.iocoder.yudao.module.farm.dal.mysql.speciesclassifylibrary.SpeciesClassifyLibraryMapper;
import cn.iocoder.yudao.module.farm.enums.CommonConstants;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import java.util.List;
/**
* @description: 物种分类
* @author: binda
* @date: 2025/8/17 16:28
*/
@Service
@Validated
public class SpeciesClassifyLibraryServiceImpl implements SpeciesClassifyLibraryService {
@Resource
private SpeciesClassifyLibraryMapper speciesClassifyLibraryMapper;
@Override
public List<SpeciesClassifyLibraryDO> getSpeciesClassifyLibraryList() {
return speciesClassifyLibraryMapper.getSpeciesClassifyLibraryList(new SpeciesClassifyLibraryReqVO());
}
}

View File

@@ -9,4 +9,45 @@
文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
-->
<sql id="all_fields">
id,
farming_code,
farming_name,
use_status,
creator,
create_time,
updater,
update_time,
deleted,
base_id,
base_name,
plot_id,
plot_name,
tenant_id
</sql>
<select id="listForFarmingType"
parameterType="cn.iocoder.yudao.module.farm.controller.admin.farmingtypemaintenance.vo.FarmingTypeMaintenanceSaveReqVO"
resultType="cn.iocoder.yudao.module.farm.dal.dataobject.farmingtypemaintenance.FarmingTypeMaintenanceDO">
SELECT <include refid="all_fields"/> FROM farm_farming_type_maintenance t
<where>
<if test="req.id != null and req.id != ''">
AND t.id = #{req.id}
</if>
<if test="req.farmingCode != null and req.farmingCode != ''">
AND t.farming_code = #{req.farmingCode}
</if>
<if test="req.farmingName != null and req.farmingName != ''">
AND t.farming_name LIKE CONCAT('%', #{req.farmingName}, '%')
</if>
<if test="req.useStatus != null">
AND t.use_status = #{req.useStatus}
</if>
<if test="req.deleted != null">
AND t.deleted = #{req.deleted}
</if>
</where>
</select>
</mapper>

View File

@@ -0,0 +1,67 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.iocoder.yudao.module.farm.dal.mysql.speciesclassifylibrary.SpeciesClassifyLibraryMapper">
<!--
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
-->
<sql id="all_fields">
id,
primary_class_code,
primary_class_name,
secondary_class_code,
secondary_class_name,
use_status,
creator,
create_time,
updater,
update_time
</sql>
<select id="getSpeciesClassifyLibraryList"
parameterType="cn.iocoder.yudao.module.farm.controller.admin.dict.vo.SpeciesClassifyLibraryReqVO"
resultType="cn.iocoder.yudao.module.farm.dal.dataobject.speciesclassifylibrary.SpeciesClassifyLibraryDO">
SELECT <include refid="all_fields"/> FROM farm_species_classify_library t
<where>
<if test="req.id != null">
AND id = #{req.id}
</if>
<if test="req.primaryClassCode != null and req.primaryClassCode != ''">
AND primary_class_code = #{req.primaryClassCode}
</if>
<if test="req.primaryClassName != null and req.primaryClassName != ''">
AND primary_class_name LIKE CONCAT('%', #{req.primaryClassName}, '%')
</if>
<if test="req.secondaryClassCode != null and req.secondaryClassCode != ''">
AND secondary_class_code = #{req.secondaryClassCode}
</if>
<if test="req.secondaryClassName != null and req.secondaryClassName != ''">
AND secondary_class_name LIKE CONCAT('%', #{req.secondaryClassName}, '%')
</if>
<if test="req.useStatus != null">
AND use_status = #{req.useStatus}
</if>
<if test="req.creator != null and req.creator != ''">
AND creator = #{req.creator}
</if>
<if test="req.createTime != null">
AND create_time >= #{req.createTime}
</if>
<if test="req.updater != null and req.updater != ''">
AND updater = #{req.updater}
</if>
<if test="req.updateTime != null">
AND update_time >= #{req.updateTime}
</if>
</where>
ORDER BY t.id DESC
</select>
</mapper>