feat (farm): 业务功能

- 灾害库,气象灾害库
This commit is contained in:
达富斌
2025-08-20 17:37:27 +08:00
parent 0f48b11330
commit 6eebfe82f4
8 changed files with 245 additions and 185 deletions

View File

@@ -42,60 +42,60 @@ public class DisasterDataController {
@Resource
private DisasterDataService disasterDataService;
@PostMapping("/create")
@Operation(summary = "创建灾害数据")
public CommonResult<String> createDisasterData(@Valid @RequestBody DisasterDataSaveReqVO createReqVO) {
return success(disasterDataService.createDisasterData(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新灾害数据")
public CommonResult<Boolean> updateDisasterData(@Valid @RequestBody DisasterDataSaveReqVO updateReqVO) {
disasterDataService.updateDisasterData(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除灾害数据")
@Parameter(name = "id", description = "编号", required = true)
public CommonResult<Boolean> deleteDisasterData(@RequestParam("id") String id) {
disasterDataService.deleteDisasterData(id);
return success(true);
}
@DeleteMapping("/delete-list")
@Parameter(name = "ids", description = "编号", required = true)
@Operation(summary = "批量删除灾害数据")
public CommonResult<Boolean> deleteDisasterDataList(@RequestParam("ids") List<String> ids) {
disasterDataService.deleteDisasterDataListByIds(ids);
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得灾害数据")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
public CommonResult<DisasterDataRespVO> getDisasterData(@RequestParam("id") String id) {
DisasterDataDO disasterData = disasterDataService.getDisasterData(id);
return success(BeanUtils.toBean(disasterData, DisasterDataRespVO.class));
}
@GetMapping("/page")
@Operation(summary = "获得灾害数据分页")
public CommonResult<PageResult<DisasterDataRespVO>> getDisasterDataPage(@Valid DisasterDataPageReqVO pageReqVO) {
PageResult<DisasterDataDO> pageResult = disasterDataService.getDisasterDataPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, DisasterDataRespVO.class));
}
@GetMapping("/export-excel")
@Operation(summary = "导出灾害数据 Excel")
@ApiAccessLog(operateType = EXPORT)
public void exportDisasterDataExcel(@Valid DisasterDataPageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<DisasterDataDO> list = disasterDataService.getDisasterDataPage(pageReqVO).getList();
// 导出 Excel
ExcelUtils.write(response, "灾害数据.xls", "数据", DisasterDataRespVO.class,
BeanUtils.toBean(list, DisasterDataRespVO.class));
}
// @PostMapping("/create")
// @Operation(summary = "创建灾害数据")
// public CommonResult<String> createDisasterData(@Valid @RequestBody DisasterDataSaveReqVO createReqVO) {
// return success(disasterDataService.createDisasterData(createReqVO));
// }
//
// @PutMapping("/update")
// @Operation(summary = "更新灾害数据")
// public CommonResult<Boolean> updateDisasterData(@Valid @RequestBody DisasterDataSaveReqVO updateReqVO) {
// disasterDataService.updateDisasterData(updateReqVO);
// return success(true);
// }
//
// @DeleteMapping("/delete")
// @Operation(summary = "删除灾害数据")
// @Parameter(name = "id", description = "编号", required = true)
// public CommonResult<Boolean> deleteDisasterData(@RequestParam("id") String id) {
// disasterDataService.deleteDisasterData(id);
// return success(true);
// }
//
// @DeleteMapping("/delete-list")
// @Parameter(name = "ids", description = "编号", required = true)
// @Operation(summary = "批量删除灾害数据")
// public CommonResult<Boolean> deleteDisasterDataList(@RequestParam("ids") List<String> ids) {
// disasterDataService.deleteDisasterDataListByIds(ids);
// return success(true);
// }
//
// @GetMapping("/get")
// @Operation(summary = "获得灾害数据")
// @Parameter(name = "id", description = "编号", required = true, example = "1024")
// public CommonResult<DisasterDataRespVO> getDisasterData(@RequestParam("id") String id) {
// DisasterDataDO disasterData = disasterDataService.getDisasterData(id);
// return success(BeanUtils.toBean(disasterData, DisasterDataRespVO.class));
// }
//
// @GetMapping("/page")
// @Operation(summary = "获得灾害数据分页")
// public CommonResult<PageResult<DisasterDataRespVO>> getDisasterDataPage(@Valid DisasterDataPageReqVO pageReqVO) {
// PageResult<DisasterDataDO> pageResult = disasterDataService.getDisasterDataPage(pageReqVO);
// return success(BeanUtils.toBean(pageResult, DisasterDataRespVO.class));
// }
//
// @GetMapping("/export-excel")
// @Operation(summary = "导出灾害数据 Excel")
// @ApiAccessLog(operateType = EXPORT)
// public void exportDisasterDataExcel(@Valid DisasterDataPageReqVO pageReqVO,
// HttpServletResponse response) throws IOException {
// pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
// List<DisasterDataDO> list = disasterDataService.getDisasterDataPage(pageReqVO).getList();
// // 导出 Excel
// ExcelUtils.write(response, "灾害数据.xls", "数据", DisasterDataRespVO.class,
// BeanUtils.toBean(list, DisasterDataRespVO.class));
// }
}

View File

@@ -11,44 +11,25 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_
@Schema(description = "管理后台 - 灾害数据分页 Request VO")
@Data
public class DisasterDataPageReqVO extends PageParam {
public class DisasterDataPageReqVO {
private Integer pageNo;
private Integer pageSize;
private Integer offset;
@Schema(description = "灾害名称", example = "赵六")
private String name;
@Schema(description = "灾害类型1=环境,2=病害,3=虫害,4=草害")
@Schema(description = "灾害类型2=病害,1=虫害,3=草害")
private Integer category;
@Schema(description = "灾害类型 1:普通; 2:气象灾害")
private Integer type;
@Schema(description = "发生月份")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private String[] disasterTime;
@Schema(description = "使用状态 (1:启用;0:停用)")
private Integer useStatus;
@Schema(description = "发生次数", example = "17530")
private Integer disasterCount;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
@Schema(description = "基础id", example = "3322")
private String foundationId;
@Schema(description = "基地id", example = "21300")
private String baseId;
@Schema(description = "基地名称", example = "芋艿")
private String baseName;
@Schema(description = "地块ID", example = "21827")
private String plotId;
@Schema(description = "地块", example = "王五")
private String plotName;
@Schema(description = "租户id", example = "20422")
private String tenantId;
@Schema(description = "删除状态 (1:已删除;0:未删除)")
private Integer deleted;
}

View File

@@ -26,10 +26,13 @@ public class DisasterDataRespVO {
@Schema(description = "灾害类型 1:普通; 2:气象灾害")
private Integer type;
@Schema(description = "灾害描述")
private String disasterDescription;
@Schema(description = "防治建议")
private String treatmentSuggestion;
@Schema(description = "图片地址")
private String imgUrl;
@@ -57,30 +60,10 @@ public class DisasterDataRespVO {
@ExcelProperty("更新时间")
private LocalDateTime updateTime;
@Schema(description = "删除状态 (1:已删除;2:未删除)")
private Integer deleted;
@Schema(description = "基础id", example = "3322")
@ExcelProperty("基础id")
private String foundationId;
@Schema(description = "基地id", example = "21300")
@ExcelProperty("基地id")
private String baseId;
@Schema(description = "基地名称", example = "芋艿")
@ExcelProperty("基地名称")
private String baseName;
@Schema(description = "地块ID", example = "21827")
@ExcelProperty("地块ID")
private String plotId;
@Schema(description = "地块", example = "王五")
@ExcelProperty("地块")
private String plotName;
@Schema(description = "租户id", example = "20422")
@ExcelProperty("租户id")
private String tenantId;
@Schema(description = "使用状态 (1 启用;2:停用)")
private Integer useStatus;
}

View File

@@ -14,8 +14,6 @@ import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
*
* @author 芋道源码
*/
@TableName("farm_disaster_data")
@KeySequence("farm_disaster_data_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@@ -59,36 +57,12 @@ public class DisasterDataDO extends BaseDO {
*/
private Integer disasterCount;
/**
* 发生月份
*/
private String disasterTime;
private String creator;
private LocalDateTime createTime;
/**
* 基础id
* 删除状态 (1:已删除;2:未删除)
*/
private String foundationId;
/**
* 基地id
*/
private String baseId;
/**
* 基地名称
*/
private String baseName;
/**
* 地块ID
*/
private String plotId;
/**
* 地块
*/
private String plotName;
private Integer useStatus;
private String tenantId;
}

View File

@@ -16,19 +16,20 @@ import java.util.List;
* @author 芋道源码
*/
@Mapper
public interface DisasterDataMapper extends BaseMapperX<DisasterDataDO> {
default PageResult<DisasterDataDO> selectPage(DisasterDataPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<DisasterDataDO>()
.likeIfPresent(DisasterDataDO::getName, reqVO.getName())
.eqIfPresent(DisasterDataDO::getCategory, reqVO.getCategory())
.eqIfPresent(DisasterDataDO::getType, reqVO.getType())
);
}
public interface DisasterDataMapper {
List<DisasterDataDO> selectDisasterDataPage(@Param("req") DisasterDataPageReqVO reqVO);
long selectDisasterDataCount(@Param("req") DisasterDataPageReqVO reqVO);
DisasterDataDO selectById(String id);
void deleteByIds(List<String> ids);
void deleteById(String id);
void updateById(DisasterDataDO updateObj);
void insert(DisasterDataDO disasterData);
}

View File

@@ -1,17 +1,14 @@
package cn.iocoder.yudao.module.farm.service.disasterdata;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.IdUtil;
import cn.iocoder.yudao.module.farm.controller.admin.disasterdata.vo.DisasterDataPageReqVO;
import cn.iocoder.yudao.module.farm.controller.admin.disasterdata.vo.DisasterDataSaveReqVO;
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.disasterdata.DisasterDataDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.framework.security.core.LoginUser;
@@ -20,8 +17,6 @@ import cn.iocoder.yudao.module.farm.dal.mysql.disasterdata.DisasterDataMapper;
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.DISASTER_DATA_NOT_EXISTS;
@@ -43,7 +38,6 @@ public class DisasterDataServiceImpl implements DisasterDataService {
// 插入
DisasterDataDO disasterData = BeanUtils.toBean(createReqVO, DisasterDataDO.class);
disasterData.setId(IdUtil.fastUUID());
disasterData.setTenantId(String.valueOf(user.getTenantId()));
disasterDataMapper.insert(disasterData);
// 返回
@@ -64,16 +58,19 @@ public class DisasterDataServiceImpl implements DisasterDataService {
// 校验存在
validateDisasterDataExists(id);
// 删除
disasterDataMapper.deleteById(id);
DisasterDataDO aDo = new DisasterDataDO();
aDo.setId(id);
aDo.setDeleted(true);
disasterDataMapper.updateById(aDo);
}
@Override
public void deleteDisasterDataListByIds(List<String> ids) {
public void deleteDisasterDataListByIds(List<String> ids) {
// 删除
disasterDataMapper.deleteByIds(ids);
}
}
private void validateDisasterDataExists(String id) {
private void validateDisasterDataExists(String id) {
if (disasterDataMapper.selectById(id) == null) {
throw exception(DISASTER_DATA_NOT_EXISTS);
}
@@ -85,15 +82,20 @@ private void validateDisasterDataExists(String id) {
}
@Override
public PageResult<DisasterDataDO> getDisasterDataPage(DisasterDataPageReqVO pageReqVO) {
public PageResult<DisasterDataDO> getDisasterDataPage(DisasterDataPageReqVO reqVO) {
List<DisasterDataDO> list = disasterDataMapper.selectDisasterDataPage(pageReqVO);
long count = disasterDataMapper.selectDisasterDataCount(pageReqVO);
PageResult<DisasterDataDO> res = new PageResult<>();
res.setList(list);
res.setTotal(count);
Integer pageNo = reqVO.getPageNo();
Integer pageSize = reqVO.getPageSize();
return res;
// 计算偏移量
int offset = (pageNo - 1) * pageSize;
reqVO.setOffset(offset);
List<DisasterDataDO> list = disasterDataMapper.selectDisasterDataPage(reqVO);
long total = disasterDataMapper.selectDisasterDataCount(reqVO);
// long totalPages = (long) Math.ceil((double) total / pageSize);
return new PageResult<>(list,total);
}
}

View File

@@ -64,9 +64,9 @@ public class SysDictServiceImpl implements SysDictService{
List<SysDictDO> list = sysDictMapper.selectDictByPage(reqVO);
Long total = sysDictMapper.countDictByCondition(reqVO);
long totalPages = (long) Math.ceil((double) total / pageSize);
// long totalPages = (long) Math.ceil((double) total / pageSize);
return new PageResult<>(list,totalPages);
return new PageResult<>(list,total);
}
private void validateExists(String id) {

View File

@@ -20,40 +20,52 @@
<result column="img_url" property="imgUrl"/>
<result column="disaster_count" property="disasterCount"/>
<result column="disaster_time" property="disasterTime"/>
<!-- 其他字段 -->
<result column="creator" property="creator"/>
<result column="create_time" property="createTime"/>
<!-- 其他字段 -->
<result column="foundation_id" property="foundationId"/>
<result column="base_id" property="baseId"/>
<result column="base_name" property="baseName"/>
<result column="plot_id" property="plotId"/>
<result column="plot_name" property="plotName"/>
<result column="tenant_id" property="tenantId"/>
<!-- 表中存在但DO中没有的字段 -->
<result column="updater" property="updater"/>
<result column="update_time" property="updateTime"/>
<result column="use_status" property="useStatus"/>
<result column="deleted" property="deleted"/>
</resultMap>
<select id="selectDisasterDataPage" resultMap="DisasterDataResultMap">
SELECT *
<sql id="all_fields">
id,
name ,
category ,
type ,
disaster_description ,
treatment_suggestion ,
img_url,
disaster_count,
disaster_time ,
creator,
create_time,
updater,
update_time,
use_status,
deleted
</sql>
<!-- 分页查询 -->
<select id="selectDisasterDataPage"
parameterType="cn.iocoder.yudao.module.farm.controller.admin.disasterdata.vo.DisasterDataPageReqVO"
resultMap="DisasterDataResultMap">
SELECT
<include refid="all_fields"/>
FROM farm_disaster_data
WHERE deleted = 0
<if test="req.name != null and req.name != ''">
AND name LIKE CONCAT('%', #{req.name}, '%')
</if>
<if test="req.category != null">
AND category = #{req.category}
</if>
<if test="req.type != null">
AND type = #{req.type}
</if>
LIMIT #{req.pageSize} OFFSET #{req.pageNo}
<include refid="where_1"/>
LIMIT #{req.offset}, #{req.pageSize}
</select>
<!-- 统计总数 -->
<select id="selectDisasterDataCount" resultType="java.lang.Long">
SELECT COUNT(*)
FROM farm_disaster_data
<include refid="where_1"/>
</select>
<sql id="where_1">
WHERE deleted = 0
<if test="req.name != null and req.name != ''">
AND name LIKE CONCAT('%', #{req.name}, '%')
@@ -64,6 +76,113 @@
<if test="req.type != null">
AND type = #{req.type}
</if>
<if test="req.deleted != null">
AND deleted = #{req.deleted}
</if>
</sql>
<select id="selectById"
resultType="cn.iocoder.yudao.module.farm.dal.dataobject.disasterdata.DisasterDataDO">
SELECT
<include refid="all_fields"/>
FROM farm_disaster_data
WHERE deleted = 0 AND id = #{id}
</select>
<delete id="deleteByIds">
</delete>
<delete id="deleteById" parameterType="string">
</delete>
<update id="updateById" parameterType="cn.iocoder.yudao.module.farm.dal.dataobject.disasterdata.DisasterDataDO">
UPDATE farm_disaster_data
<set>
<if test="name != null and name != ''">
name = #{name},
</if>
<if test="category != null">
category = #{category},
</if>
<if test="type != null">
type = #{type},
</if>
<if test="disasterDescription != null">
disaster_description = #{disasterDescription},
</if>
<if test="treatmentSuggestion != null">
treatment_suggestion = #{treatmentSuggestion},
</if>
<if test="imgUrl != null and imgUrl != ''">
img_url = #{imgUrl},
</if>
<if test="disasterCount != null">
disaster_count = #{disasterCount},
</if>
<if test="disasterTime != null and disasterTime != ''">
disaster_time = #{disasterTime},
</if>
<if test="creator != null and creator != ''">
creator = #{creator},
</if>
<if test="updater != null and updater != ''">
updater = #{updater},
</if>
<if test="useStatus != null">
use_status = #{useStatus},
</if>
<if test="deleted != null">
deleted = #{deleted},
</if>
update_time = NOW()
</set>
WHERE id = #{id}
AND deleted = 0
</update>
<insert id="insert" parameterType="cn.iocoder.yudao.module.farm.dal.dataobject.disasterdata.DisasterDataDO">
INSERT INTO farm_disaster_data
<trim prefix="(" suffix=")" suffixOverrides=",">
id,
<if test="name != null and name != ''">name,</if>
<if test="category != null">category,</if>
<if test="type != null">type,</if>
<if test="disasterDescription != null">disaster_description,</if>
<if test="treatmentSuggestion != null">treatment_suggestion,</if>
<if test="imgUrl != null and imgUrl != ''">img_url,</if>
<if test="disasterCount != null">disaster_count,</if>
<if test="disasterTime != null and disasterTime != ''">disaster_time,</if>
<if test="creator != null and creator != ''">creator,</if>
<if test="createTime != null">create_time,</if>
<if test="updater != null and updater != ''">updater,</if>
<if test="updateTime != null">update_time,</if>
<if test="useStatus != null">use_status,</if>
<if test="deleted != null">deleted</if>
</trim>
<trim prefix="VALUES (" suffix=")" suffixOverrides=",">
#{id},
<if test="name != null and name != ''">#{name},</if>
<if test="category != null">#{category},</if>
<if test="type != null">#{type},</if>
<if test="disasterDescription != null">#{disasterDescription},</if>
<if test="treatmentSuggestion != null">#{treatmentSuggestion},</if>
<if test="imgUrl != null and imgUrl != ''">#{imgUrl},</if>
<if test="disasterCount != null">#{disasterCount},</if>
<if test="disasterTime != null and disasterTime != ''">#{disasterTime},</if>
<if test="creator != null and creator != ''">#{creator},</if>
<if test="createTime != null">#{createTime},</if>
<if test="updater != null and updater != ''">#{updater},</if>
<if test="updateTime != null">#{updateTime},</if>
<if test="useStatus != null">#{useStatus},</if>
<if test="deleted != null">#{deleted}</if>
</trim>
</insert>
</mapper>