Просмотр исходного кода

新增 一张图数字农田 种植作物占比饼图接口

zhaiyifei 8 месяцев назад
Родитель
Сommit
6160547ad2

+ 111 - 0
src/main/java/com/yunfeiyun/agmp/fms/controller/FmsScreenController.java

@@ -0,0 +1,111 @@
+package com.yunfeiyun.agmp.fms.controller;
+
+import com.yunfeiyun.agmp.common.constant.ErrorCode;
+import com.yunfeiyun.agmp.common.core.controller.BaseController;
+import com.yunfeiyun.agmp.common.core.domain.AjaxResult;
+import com.yunfeiyun.agmp.common.core.page.TableDataInfo;
+import com.yunfeiyun.agmp.common.exception.BizException;
+import com.yunfeiyun.agmp.common.utils.SecurityUtils;
+import com.yunfeiyun.agmp.common.utils.StringUtils;
+import com.yunfeiyun.agmp.fms.domain.FmsBlock;
+import com.yunfeiyun.agmp.fms.domain.FmsLand;
+import com.yunfeiyun.agmp.fms.domain.reqvo.FmsScreenStatReqVo;
+import com.yunfeiyun.agmp.fms.domain.resvo.FmsScreenLandStatResVo;
+import com.yunfeiyun.agmp.fms.domain.resvo.FmsScreenPlanStatResVo;
+import com.yunfeiyun.agmp.fms.service.IFmsBlockService;
+import com.yunfeiyun.agmp.fms.service.IFmsLandService;
+import com.yunfeiyun.agmp.fms.service.IFmsScreenService;
+import com.yunfeiyun.agmp.fms.util.DataAuthUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@RestController
+@RequestMapping("/fms/screen")
+public class FmsScreenController extends BaseController {
+
+    @Autowired
+    private DataAuthUtil dataAuthUtil;
+
+    @Autowired
+    private IFmsLandService fmsLandService;
+    @Autowired
+    private IFmsBlockService fmsBlockService;
+
+    @Autowired
+    private IFmsScreenService fmsScreenService;
+
+    /**
+     * 查询基地列表不分页
+     */
+    @PreAuthorize("@ss.hasPermi('fms:screen:land:all:list')")
+    @GetMapping("/land/all/list")
+    public TableDataInfo listNoPage(FmsLand fmsLand) {
+        boolean b = SecurityUtils.isValidate();
+        if (b) {
+            //true需要进行权限校验。基地列表需要分配的基地才能查询
+            List<String> strings = dataAuthUtil.landList();
+            if (strings.isEmpty()) {
+                return getDataTable(new ArrayList<>());
+            }
+            fmsLand.setDataFilter(true);
+            fmsLand.setLandIds(strings);
+        }
+        List<FmsLand> list = fmsLandService.selectFmsLandList(fmsLand);
+        return getDataTable(list);
+    }
+
+    /**
+     * 查询所有地块列表 不分页
+     */
+    @PreAuthorize("@ss.hasPermi('fms:screen:block:all:list')")
+    @GetMapping("/block/all/list")
+    public TableDataInfo list(FmsBlock fmsBlock) {
+        boolean b = SecurityUtils.isValidate();
+        if (b) {
+            //true需要进行权限校验。下拉框基地列表查询需要包含分配的基地以及分配地块所属基地
+            List<String> strings = dataAuthUtil.blockList();
+            if (strings.isEmpty()) {
+                return getDataTable(new ArrayList<>());
+            }
+            fmsBlock.setDataFilter(true);
+            fmsBlock.setBlockIds(strings);
+        }
+        fmsBlock.setTid(SecurityUtils.getTid());
+        List<FmsBlock> list = fmsBlockService.selectFmsBlockList(fmsBlock);
+        return getDataTable(list);
+    }
+
+    /**
+     * 查询所有地块列表 不分页
+     */
+    @PreAuthorize("@ss.hasPermi('fms:screen:block:all:list')")
+    @GetMapping("/land/stat/{landId}")
+    public AjaxResult landStat(@PathVariable("landId") String landId) {
+        if(StringUtils.isEmpty(landId)){
+            throw new BizException(ErrorCode.INVALID_PARAMETER.getCode(), "参数异常");
+        }
+        FmsScreenLandStatResVo landStat = fmsScreenService.landStat(landId);
+        return success(landStat);
+    }
+
+    /**
+     * 查询所有地块列表 不分页
+     */
+    @PreAuthorize("@ss.hasPermi('fms:screen:block:all:list')")
+    @GetMapping("/plan/stat")
+    public AjaxResult planStat(FmsScreenStatReqVo reqVo) {
+        String landId = reqVo.getLandId();
+        if(StringUtils.isEmpty(landId)){
+            throw new BizException(ErrorCode.INVALID_PARAMETER.getCode(), "参数异常");
+        }
+        FmsScreenPlanStatResVo planStatResVo = fmsScreenService.planStat(reqVo);
+        return success(planStatResVo);
+    }
+}

+ 11 - 0
src/main/java/com/yunfeiyun/agmp/fms/domain/dto/FmsScreenPlanStatDto.java

@@ -0,0 +1,11 @@
+package com.yunfeiyun.agmp.fms.domain.dto;
+
+import lombok.Data;
+
+@Data
+public class FmsScreenPlanStatDto {
+    private String cropId;
+    private String cropType;
+    private Double cropArea;
+    private Double rate;
+}

+ 8 - 0
src/main/java/com/yunfeiyun/agmp/fms/domain/reqvo/FmsScreenStatReqVo.java

@@ -0,0 +1,8 @@
+package com.yunfeiyun.agmp.fms.domain.reqvo;
+
+import lombok.Data;
+
+@Data
+public class FmsScreenStatReqVo {
+    private String landId;
+}

+ 27 - 0
src/main/java/com/yunfeiyun/agmp/fms/domain/resvo/FmsScreenLandStatResVo.java

@@ -0,0 +1,27 @@
+package com.yunfeiyun.agmp.fms.domain.resvo;
+
+import lombok.Data;
+
+@Data
+public class FmsScreenLandStatResVo {
+
+    /**
+     * 地块总面积 单位 亩
+     */
+    private String totalBlockArea;
+
+    /**
+     * 种植总面积 单位 亩
+     */
+    private String totalBlockAreaplant;
+
+    /**
+     * 地块数量 单位 个
+     */
+    private String totalBlockCount;
+
+    /**
+     * 土地使用率,单位 百分比
+     */
+    private String usedRate;
+}

+ 12 - 0
src/main/java/com/yunfeiyun/agmp/fms/domain/resvo/FmsScreenPlanStatResVo.java

@@ -0,0 +1,12 @@
+package com.yunfeiyun.agmp.fms.domain.resvo;
+
+import com.yunfeiyun.agmp.fms.domain.dto.FmsScreenPlanStatDto;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class FmsScreenPlanStatResVo {
+    private double total;
+    private List<FmsScreenPlanStatDto> planStatList;
+}

+ 30 - 0
src/main/java/com/yunfeiyun/agmp/fms/mapper/FmsScreenMapper.java

@@ -0,0 +1,30 @@
+package com.yunfeiyun.agmp.fms.mapper;
+
+import com.yunfeiyun.agmp.fms.domain.reqvo.FmsScreenStatReqVo;
+import com.yunfeiyun.agmp.fms.domain.dto.FmsScreenPlanStatDto;
+import com.yunfeiyun.agmp.fms.domain.resvo.FmsScreenLandStatResVo;
+
+import java.util.List;
+
+/**
+ * 大屏Mapper接口
+ * 
+ * @author 杨晓辉
+ * @date 2023-05-15
+ */
+public interface FmsScreenMapper
+{
+    /**
+     * 查询基地统计信息
+     * @param landId
+     * @return
+     */
+    public FmsScreenLandStatResVo landStat(String landId);
+
+    /**
+     * 查询种植作物占比信息
+     * @param
+     * @return
+     */
+    public List<FmsScreenPlanStatDto> planStat(FmsScreenStatReqVo reqVo);
+}

+ 21 - 0
src/main/java/com/yunfeiyun/agmp/fms/service/IFmsScreenService.java

@@ -0,0 +1,21 @@
+package com.yunfeiyun.agmp.fms.service;
+
+import com.yunfeiyun.agmp.fms.domain.reqvo.FmsScreenStatReqVo;
+import com.yunfeiyun.agmp.fms.domain.resvo.FmsScreenLandStatResVo;
+import com.yunfeiyun.agmp.fms.domain.resvo.FmsScreenPlanStatResVo;
+
+public interface IFmsScreenService {
+    /**
+     * 查询基地统计信息
+     * @param landId
+     * @return
+     */
+    public FmsScreenLandStatResVo landStat(String landId);
+
+    /**
+     * 查询种植作物占比信息
+     * @param
+     * @return
+     */
+    public FmsScreenPlanStatResVo planStat(FmsScreenStatReqVo reqVo);
+}

+ 56 - 0
src/main/java/com/yunfeiyun/agmp/fms/service/impl/FmsScreenServiceImpl.java

@@ -0,0 +1,56 @@
+package com.yunfeiyun.agmp.fms.service.impl;
+
+import com.yunfeiyun.agmp.fms.domain.dto.FmsScreenPlanStatDto;
+import com.yunfeiyun.agmp.fms.domain.reqvo.FmsScreenStatReqVo;
+import com.yunfeiyun.agmp.fms.domain.resvo.FmsScreenLandStatResVo;
+import com.yunfeiyun.agmp.fms.domain.resvo.FmsScreenPlanStatResVo;
+import com.yunfeiyun.agmp.fms.mapper.FmsScreenMapper;
+import com.yunfeiyun.agmp.fms.service.IFmsScreenService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class FmsScreenServiceImpl implements IFmsScreenService {
+    @Autowired
+    private FmsScreenMapper fmsScreenMapper;
+    /**
+     * 查询基地统计信息
+     *
+     * @param landId
+     * @return
+     */
+    @Override
+    public FmsScreenLandStatResVo landStat(String landId) {
+        return fmsScreenMapper.landStat(landId);
+    }
+
+    /**
+     * 查询种植作物占比信息
+     *
+     * @param reqVo@return
+     */
+    @Override
+    public FmsScreenPlanStatResVo planStat(FmsScreenStatReqVo reqVo) {
+        List<FmsScreenPlanStatDto> planStatResVoList = fmsScreenMapper.planStat(reqVo);
+        Double total = 0.0;
+        for (FmsScreenPlanStatDto planStatResVo : planStatResVoList) {
+            total += planStatResVo.getCropArea();
+        }
+
+        for (FmsScreenPlanStatDto planStatResVo : planStatResVoList) {
+            Double cropArea = planStatResVo.getCropArea();
+            Double rate = cropArea / total * 100;
+
+            planStatResVo.setRate(Double.valueOf(String.format("%.2f", rate)));
+            planStatResVo.setCropArea(Double.valueOf(String.format("%.2f", cropArea)));
+        }
+        total = Double.valueOf(String.format("%.2f", total));
+
+        FmsScreenPlanStatResVo planStatResVo = new FmsScreenPlanStatResVo();
+        planStatResVo.setTotal(total);
+        planStatResVo.setPlanStatList(planStatResVoList);
+        return planStatResVo;
+    }
+}

+ 29 - 0
src/main/resources/mapper/FmsScreenMapper.xml

@@ -0,0 +1,29 @@
+<?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="com.yunfeiyun.agmp.fms.mapper.FmsScreenMapper">
+
+    <select id="landStat" parameterType="string" resultType="com.yunfeiyun.agmp.fms.domain.resvo.FmsScreenLandStatResVo">
+        SELECT fb.*, IFNULL(CAST(fb.totalBlockAreaplant / fb.totalBlockArea AS DECIMAL(30, 2)) * 100, 0) AS usedRate
+        FROM (
+            SELECT COUNT(*) AS totalBlockCount,  SUM(fb.blockArea) AS totalBlockArea, SUM(fb.blockAreaplant) AS totalBlockAreaplant
+            FROM FmsBlock AS fb
+            WHERE fb.landId = #{landId}
+        ) AS fb
+    </select>
+
+    <select id="planStat" parameterType="com.yunfeiyun.agmp.fms.domain.reqvo.FmsScreenStatReqVo"
+            resultType="com.yunfeiyun.agmp.fms.domain.dto.FmsScreenPlanStatDto">
+        SELECT f.cropId, f.cropName, f.cropType, f.cropArea
+        FROM (
+            SELECT fc.cropId, fc.cropName, SUM(fb.blockAreaplant) AS cropArea, fc.cropType
+            FROM FmsBlock AS fb
+            LEFT JOIN FmsPlan AS fp ON fp.blockId = fb.blockId
+            LEFT JOIN FmsCrop AS fc ON fc.cropId = fp.cropId
+            WHERE fb.landId = #{landId} AND fp.planStatus = "1"
+            GROUP BY fc.cropId
+        ) AS f
+    </select>
+
+</mapper>