From 72b971c98c46531064d74b68fc8fe8864ed0b544 Mon Sep 17 00:00:00 2001
From: guoshilong <123456>
Date: Tue, 08 Nov 2022 09:04:56 +0800
Subject: [PATCH] 大屏溯源统计次数sql修改

---
 src/main/java/org/springblade/modules/lang/controller/LandController.java |  415 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 410 insertions(+), 5 deletions(-)

diff --git a/src/main/java/org/springblade/modules/lang/controller/LandController.java b/src/main/java/org/springblade/modules/lang/controller/LandController.java
index 84c4321..91de7cf 100644
--- a/src/main/java/org/springblade/modules/lang/controller/LandController.java
+++ b/src/main/java/org/springblade/modules/lang/controller/LandController.java
@@ -16,17 +16,26 @@
  */
 package org.springblade.modules.lang.controller;
 
+import io.lettuce.core.output.DoubleOutput;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import lombok.AllArgsConstructor;
+
 import javax.validation.Valid;
 
+import org.springblade.common.utils.PolyginArea;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.StringUtil;
+import org.springblade.modules.farm.entity.Farm;
+import org.springblade.modules.farm.vo.FarmVO;
+import org.springblade.modules.resource.endpoint.OssEndpoint;
+import org.springblade.modules.system.entity.DictBiz;
+import org.springblade.modules.system.service.IDictBizService;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.RequestParam;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -34,6 +43,13 @@
 import org.springblade.modules.lang.vo.LandVO;
 import org.springblade.modules.lang.service.ILandService;
 import org.springblade.core.boot.ctrl.BladeController;
+
+import java.awt.geom.Point2D;
+import java.text.DecimalFormat;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 /**
  * 地块表 控制器
@@ -48,6 +64,8 @@
 public class LandController extends BladeController {
 
 	private final ILandService landService;
+	private final IDictBizService dictService;
+	private final OssEndpoint ossEndpoint;
 
 	/**
 	 * 详情
@@ -57,6 +75,15 @@
 	@ApiOperation(value = "详情", notes = "传入land")
 	public R<Land> detail(Land land) {
 		Land detail = landService.getOne(Condition.getQueryWrapper(land));
+		return R.data(detail);
+	}
+
+	/**
+	 * 详情信息(自定义查询)
+	 */
+	@GetMapping("/details")
+	public R<Land> details(LandVO land) {
+		Land detail = landService.getLandInfo(land);
 		return R.data(detail);
 	}
 
@@ -81,6 +108,23 @@
 		IPage<LandVO> pages = landService.selectLandPage(Condition.getPage(query), land);
 		return R.data(pages);
 	}
+	/**
+	 * 根据品种id查询对应地块(农产品库存)
+	 */
+	@GetMapping("/selcetByStrainId")
+	public R selcetByStrainId(String strainId,String farmId) {
+		List<LandVO> list = landService.selectByStrainId(strainId,farmId);
+		return R.data(list);
+	}
+
+	/**
+	 * 根据品种id查询对应地块(种养品种)
+	 */
+	@GetMapping("/getByStrainIdFarmId")
+	public R getByStrainIdFarmId(LandVO land) {
+		List<Land> list = landService.getByStrainIdFarmId(land);
+		return R.data(list);
+	}
 
 	/**
 	 * 新增 地块表
@@ -89,7 +133,61 @@
 	@ApiOperationSupport(order = 4)
 	@ApiOperation(value = "新增", notes = "传入land")
 	public R save(@Valid @RequestBody Land land) {
-		return R.status(landService.save(land));
+		String range = land.getLandRange();
+		//坐标转换
+		if (null != land.getLandRange() && !land.getLandRange().equals("")) {
+			//替换逗号为空格
+			String sNull = land.getLandRange().replaceAll(",", " ");
+			//替换分号为逗号
+			String replaceAll = sNull.replaceAll(";", ",");
+			land.setLandRange("'POLYGON((" + replaceAll + "))'");
+
+			List<Point2D.Double> points = new ArrayList<Point2D.Double>();
+			double v1;
+			String landRange = range;
+			String[] s1 = landRange.split(";");
+			for (String ss : s1) {
+				String[] temp = ss.split(",");
+				Point2D.Double point = new Point2D.Double(Double.parseDouble(temp[0]),
+					Double.parseDouble(temp[1]));
+				points.add(point);
+			}
+			PolyginArea tp = new PolyginArea();
+			double area = tp.getAreaByxy(points);
+			Integer landUnit = land.getLandUnit();
+			//(0: 亩  1:分  2:平方米
+			if (landUnit == 0) {
+				double v = area * 0.0015;
+				v1 = (double) Math.round(v * 100) / 100;
+			} else if (landUnit == 1) {
+				double v = area * 0.015;
+				v1 = (double) Math.round(v * 100) / 100;
+			} else {
+				v1 = (double) Math.round(area * 100) / 100;
+			}
+			String myArea = land.getLandArea();
+			land.setLandArea(String.valueOf(v1));
+			land.setLandArea(myArea);
+		} else {
+			land.setLandArea("0");
+		}
+
+		//图片转换上传
+		if (null != land.getUrl() && !land.getUrl().equals("")) {
+			try {
+				//上传
+				String url = ossEndpoint.uploadBase64String(land.getUrl());
+				//回填url
+				land.setUrl(url);
+			} catch (Exception e) {
+				e.printStackTrace();
+			}
+		}
+
+
+
+		land.setType(1);
+		return R.status(landService.saveLandInfo(land));
 	}
 
 	/**
@@ -99,7 +197,116 @@
 	@ApiOperationSupport(order = 5)
 	@ApiOperation(value = "修改", notes = "传入land")
 	public R update(@Valid @RequestBody Land land) {
-		return R.status(landService.updateById(land));
+		String range = land.getLandRange();
+		//坐标转换
+		if (null != land.getLandRange() && !land.getLandRange().equals("")) {
+			//替换逗号为空格
+			String sNull = land.getLandRange().replaceAll(",", " ");
+			//替换分号为逗号
+			String replaceAll = sNull.replaceAll(";", ",");
+			land.setLandRange("'POLYGON((" + replaceAll + "))'");
+		}
+		List<Point2D.Double> points = new ArrayList<Point2D.Double>();
+		double v1;
+		String landRange = range;
+		String[] s1 = landRange.split(";");
+		for (String ss : s1) {
+			String[] temp = ss.split(",");
+			Point2D.Double point = new Point2D.Double(Double.parseDouble(temp[0]),
+				Double.parseDouble(temp[1]));
+			points.add(point);
+		}
+		PolyginArea tp = new PolyginArea();
+		double area = tp.getAreaByxy(points);
+		Integer landUnit = land.getLandUnit();
+		//(0: 亩  1:分  2:平方米
+		if (landUnit == 0) {
+			double v = area * 0.0015;
+			v1 = (double) Math.round(v * 100) / 100;
+		} else if (landUnit == 1) {
+			double v = area * 0.015;
+			v1 = (double) Math.round(v * 100) / 100;
+		} else {
+			v1 = (double) Math.round(area * 100) / 100;
+		}
+
+		//图片转换上传
+		if (null != land.getUrl() && !land.getUrl().equals("")) {
+			try {
+				//上传
+				String url = ossEndpoint.uploadBase64String(land.getUrl());
+				//回填url
+				land.setUrl(url);
+			} catch (Exception e) {
+				e.printStackTrace();
+			}
+		}
+		land.setLandArea(String.valueOf(v1));
+		land.setType(1);
+		return R.status(landService.updateLandById(land));
+	}
+
+	/**
+	 * 地块详情页面修改地块面积
+	 */
+	@PostMapping("/updateLandAr")
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "修改", notes = "传入land")
+	public R updateLandAr(@Valid @RequestBody Land land) {
+		String range = land.getLandRange();
+		//坐标转换
+		if (null != land.getLandRange() && !land.getLandRange().equals("")) {
+			//替换逗号为空格
+			String sNull = land.getLandRange().replaceAll(",", " ");
+			//替换分号为逗号
+			String replaceAll = sNull.replaceAll(";", ",");
+			land.setLandRange("'POLYGON((" + replaceAll + "))'");
+		}
+		List<Point2D.Double> points = new ArrayList<Point2D.Double>();
+		double v1;
+		String landRange = range;
+		String[] s1 = landRange.split(";");
+		for (String ss : s1) {
+			String[] temp = ss.split(",");
+			Point2D.Double point = new Point2D.Double(Double.parseDouble(temp[0]),
+				Double.parseDouble(temp[1]));
+			points.add(point);
+		}
+		PolyginArea tp = new PolyginArea();
+		double area = tp.getAreaByxy(points);
+		Integer landUnit = land.getLandUnit();
+		//(0: 亩  1:分  2:平方米
+		if (landUnit == 0) {
+			double v = area * 0.0015;
+			v1 = (double) Math.round(v * 100) / 100;
+		} else if (landUnit == 1) {
+			double v = area * 0.015;
+			v1 = (double) Math.round(v * 100) / 100;
+		} else {
+			v1 = (double) Math.round(area * 100) / 100;
+		}
+
+		//图片转换上传
+		if (null != land.getUrl() && !land.getUrl().equals("")) {
+			try {
+				//上传
+				String url = ossEndpoint.uploadBase64String(land.getUrl());
+				//回填url
+				land.setUrl(url);
+			} catch (Exception e) {
+				e.printStackTrace();
+			}
+		}
+
+		Land myLand = landService.getById(land.getId());
+		if (myLand.getLandArea().equals(land.getLandArea())){
+			land.setLandArea(String.valueOf(v1));
+		}else {
+			land.setLandArea(land.getLandArea());
+		}
+
+
+		return R.status(landService.updateLandById(land));
 	}
 
 	/**
@@ -112,7 +319,7 @@
 		return R.status(landService.saveOrUpdate(land));
 	}
 
-	
+
 	/**
 	 * 删除 地块表
 	 */
@@ -120,8 +327,206 @@
 	@ApiOperationSupport(order = 7)
 	@ApiOperation(value = "逻辑删除", notes = "传入ids")
 	public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
-		return R.status(landService.deleteLogic(Func.toLongList(ids)));
+		//先要判断该地块是否还有正在种植的作物,先结束才能删除地块
+		List<LandVO> land= landService.findPlantInLand(ids);
+		if (land.size()<=0) {
+			return R.status(landService.deleteLogic(Func.toLongList(ids)));
+		}else {
+			throw new org.springblade.core.log.exception.ServiceException(StringUtil.format("请先结束该地块正在种养品种"));
+		}
 	}
 
-	
+	/**
+	 * 地块列表
+	 */
+	@GetMapping("/selectLandList")
+	public R selectLandList(String userid) {
+		return R.data(landService.selectLandList(userid));
+	}
+
+	/**
+	 * 获取采收地块列表
+	 */
+	@GetMapping("/selectRecoveryLandList")
+	public R selectRecoveryLandList(String farmId){return R.data(landService.selectRecoveryLandList(farmId));}
+
+	/**
+	 * 地块列表(不分页)
+	 *
+	 * @param land
+	 * @return
+	 */
+	@GetMapping("/getLandList")
+	public R getLandList(LandVO land) {
+		return R.data(landService.getLandList(land));
+	}
+
+
+	/**
+	 * 首页地块统计接口
+	 */
+	@GetMapping("/selectCount")
+	public R selectCount(LandVO land) {
+		List<Map<String, Object>> list = landService.selectZAre(land);
+		List<Map<String, Object>> lists = landService.selectSAre(land);
+		List list1 = landService.selectNum(land);
+		//总面积
+		Double num = 0.0;
+		for (int i = 0; i < list.size(); i++) {
+			//面积
+			String area = list.get(i).get("area").toString();
+			//单位
+			String unit = list.get(i).get("unit").toString();
+			Double area1 = Double.parseDouble(area);
+			//面积单位(0: 亩 1:分 2:平方米)
+			if (unit.equals("0")) {
+				num += area1;
+			}
+			else if (unit.equals("1")) {
+				double v = area1 * 0.1;
+				num += v;
+			} else {
+				double v = area1 * 0.0015;
+				num += v;
+			}
+		}
+		//使用面积
+		Double snum = 0.0;
+		for (int i = 0; i < lists.size(); i++) {
+			//面积
+			String area = lists.get(i).get("area").toString();
+			//单位
+			String unit = lists.get(i).get("unit").toString();
+			Double area1 = Double.parseDouble(area);
+			//面积单位(0: 亩 1:分 2:平方米)
+			if (unit.equals("0")) {
+				snum += area1;
+			}
+			else if (unit.equals("1")) {
+				double v = area1 * 0.1;
+				snum += v;
+			} else{
+				double v = area1 * 0.0015;
+				snum += v;
+			}
+		}
+		//品种数量
+		int size = list1.size();
+		Map map = new HashMap();
+		//地块使用率
+		if (snum != 0.0 || num != 0.0) {
+			double v = snum / num;
+			double v1 = v * 100;
+			DecimalFormat df = new DecimalFormat("#0.00");
+			String format = df.format(v1);
+			Double a = Double.parseDouble(format);
+			map.put("rate", a);
+			map.put("zarea", (double) Math.round(num * 100) / 100);
+			map.put("sarea", (double) Math.round(snum * 100) / 100);
+			map.put("num", size);
+		} else {
+			map.put("rate", 0.0);
+			map.put("zarea", 0.0);
+			map.put("sarea", 0.0);
+			map.put("num", size);
+		}
+		return R.data(map);
+	}
+
+	/**
+	 * 大屏地块统计接口
+	 *
+	 * @param land 农场
+	 * @return
+	 */
+	@GetMapping("/selectXCount")
+	public R selectXCount(LandVO land) {
+		List<Map<String, Object>> list = landService.selectZAre(land);
+		List<Map<String, Object>> lists = landService.selectSAre(land);
+		List<Map<String, Object>> listw = landService.selectWAre(land);
+		List list1 = landService.selectNum(land);
+		//总面积
+		Double num = 0.0;
+		for (int i = 0; i < list.size(); i++) {
+			//面积
+			String area = list.get(i).get("area").toString();
+			//单位
+			String unit = list.get(i).get("unit").toString();
+			Double area1 = Double.parseDouble(area);
+			//面积单位(0: 亩 1:分 2:平方米)
+			if (unit.equals("0")) {
+				num += area1;
+			}
+			else if (unit.equals("1")) {
+				double v = area1 * 0.1;
+				num += v;
+			} else {
+				double v = area1 * 0.0015;
+				num += v;
+			}
+		}
+		//使用面积
+		Double snum = 0.0;
+		for (int i = 0; i < lists.size(); i++) {
+			//面积
+			String area = lists.get(i).get("area").toString();
+			//单位
+			String unit = lists.get(i).get("unit").toString();
+			Double area1 = Double.parseDouble(area);
+			//面积单位(0: 亩 1:分 2:平方米)
+			if (unit.equals("0")) {
+				snum += area1;
+			}
+			else if (unit.equals("1")) {
+				double v = area1 * 0.1;
+				snum += v;
+			} else {
+				double v = area1 * 0.0015;
+				snum += v;
+			}
+		}
+		//未使用面积
+		Double wnum = 0.0;
+		for (int i = 0; i < listw.size(); i++) {
+			//面积
+			String area = listw.get(i).get("area").toString();
+			//单位
+			String unit = listw.get(i).get("unit").toString();
+			Double area1 = Double.parseDouble(area);
+			//面积单位(0: 亩 1:分 2:平方米)
+			if (unit.equals("0")) {
+				wnum += area1;
+			}
+			else if (unit.equals("1")) {
+				double v = area1 * 0.1;
+				wnum += v;
+			} else {
+				double v = area1 * 0.0015;
+				wnum += v;
+			}
+		}
+		//品种数量
+		int size = list1.size();
+		//农资种类
+		List<DictBiz> tree = dictService.getList("stockType");
+		int size1 = tree.size();
+		Map map = new HashMap();
+		map.put("num", num);
+		map.put("snum", snum);
+		map.put("wnum", wnum);
+		map.put("zynum", size);
+		map.put("nznum", size1);
+		return R.data(map);
+	}
+
+	/**
+	 * 查询统计地块是否有轮廓(是否有圈出区域)
+	 * @param land
+	 * @return
+	 */
+	@GetMapping("/getLandIsAreaStatistic")
+	public R getLandIsAreaStatistic(LandVO land){
+		return R.data(landService.getLandIsAreaStatistic(land));
+	}
+
 }

--
Gitblit v1.9.3