|
@@ -1,15 +1,21 @@
|
|
|
package com.sysu.admin.controller.crop;
|
|
|
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
+import com.querydsl.core.BooleanBuilder;
|
|
|
+import com.querydsl.core.types.Predicate;
|
|
|
+import com.querydsl.core.types.dsl.BooleanExpression;
|
|
|
+import com.querydsl.core.types.dsl.PathBuilder;
|
|
|
+import com.querydsl.jpa.impl.JPAUpdateClause;
|
|
|
import com.sysu.admin.api.crop.CropVo;
|
|
|
-import com.sysu.admin.controller.city.District;
|
|
|
-import com.sysu.admin.controller.city.DistrictRepository;
|
|
|
+import com.sysu.admin.controller.city.*;
|
|
|
import com.sysu.admin.controller.crop.CropLand;
|
|
|
import com.sysu.admin.controller.crop.CropLandService;
|
|
|
import com.sysu.admin.controller.crop.CropLandVo;
|
|
|
import com.sysu.admin.controller.geo.land.LandTaskStatus;
|
|
|
import com.sysu.admin.support.base.BaseVo;
|
|
|
+import com.sysu.admin.support.base.ServiceContext;
|
|
|
import com.sysu.admin.support.shiro.ShiroService;
|
|
|
+import com.sysu.admin.utils.GenericsUtil;
|
|
|
import com.sysu.admin.utils.shape.GeoCastUtil;
|
|
|
import com.xiesx.fastboot.base.result.BaseResult;
|
|
|
import com.xiesx.fastboot.base.result.R;
|
|
@@ -17,21 +23,25 @@ import com.xiesx.fastboot.utils.CopyUtils;
|
|
|
import org.locationtech.jts.geom.MultiPolygon;
|
|
|
import org.springframework.beans.BeanUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.data.domain.Sort;
|
|
|
import org.springframework.stereotype.Controller;
|
|
|
import org.springframework.web.bind.annotation.RequestMapping;
|
|
|
import org.springframework.web.bind.annotation.ResponseBody;
|
|
|
import org.springframework.web.bind.annotation.RestController;
|
|
|
|
|
|
import javax.transaction.Transactional;
|
|
|
+import java.util.ArrayList;
|
|
|
import java.util.Date;
|
|
|
import java.util.List;
|
|
|
+import java.util.concurrent.Executor;
|
|
|
+import java.util.concurrent.Executors;
|
|
|
|
|
|
/**
|
|
|
* 读取地图数据信息
|
|
|
*/
|
|
|
@RequestMapping("/crop")
|
|
|
@Controller
|
|
|
-public class CropLandController {
|
|
|
+public class CropLandController extends ServiceContext {
|
|
|
|
|
|
@Autowired
|
|
|
CropLandService cityLandService;
|
|
@@ -39,6 +49,8 @@ public class CropLandController {
|
|
|
ShiroService shiroService;
|
|
|
@Autowired
|
|
|
DistrictRepository districtRepository;
|
|
|
+ @Autowired
|
|
|
+ CityRepository cityRepository;
|
|
|
|
|
|
@RequestMapping("/getInfo")
|
|
|
@ResponseBody
|
|
@@ -72,6 +84,18 @@ public class CropLandController {
|
|
|
return R.succ(bean);
|
|
|
}
|
|
|
|
|
|
+ @RequestMapping("/publish")
|
|
|
+ @ResponseBody
|
|
|
+ public BaseResult publish(CropLandVo vo){
|
|
|
+ CropLand bean = cityLandService.findOne(vo.getId());
|
|
|
+ if(bean.getStatus().intValue() != LandTaskStatus.unpublished.ordinal()){
|
|
|
+ return R.fail("不是未发布的地块!");
|
|
|
+ }
|
|
|
+ bean.setStatus(LandTaskStatus.published.ordinal());
|
|
|
+ cityLandService.save(bean);
|
|
|
+ return R.succ();
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
|
|
|
@RequestMapping("/publish_index")
|
|
@@ -81,8 +105,27 @@ public class CropLandController {
|
|
|
|
|
|
@RequestMapping("/batchPublish")
|
|
|
@ResponseBody
|
|
|
+ @Transactional
|
|
|
public BaseResult batchPublish(CropLandVo vo){
|
|
|
-
|
|
|
+ QCropLand qCropLand = QCropLand.cropLand;
|
|
|
+ JPAUpdateClause jpaUpdateClause = mJPAQueryFactory.update(qCropLand);
|
|
|
+ jpaUpdateClause.set(qCropLand.status, LandTaskStatus.published.ordinal());
|
|
|
+ jpaUpdateClause.set(qCropLand.updateDate, new Date());
|
|
|
+ Predicate predicate = null;
|
|
|
+ if(vo.getProvinceId() != null){
|
|
|
+ predicate = qCropLand.province.eq(vo.getProvinceId());
|
|
|
+ }
|
|
|
+ if(vo.getCityId() != null){
|
|
|
+ predicate = qCropLand.city.eq(vo.getCityId()).and(predicate);
|
|
|
+ }
|
|
|
+ if(vo.getDistrictId() != null){
|
|
|
+ predicate = qCropLand.district.eq(vo.getDistrictId()).and(predicate);
|
|
|
+ }
|
|
|
+ if(predicate != null){
|
|
|
+ predicate = qCropLand.status.eq(LandTaskStatus.unpublished.ordinal()).and(predicate);
|
|
|
+ jpaUpdateClause.where(predicate);
|
|
|
+ jpaUpdateClause.execute();
|
|
|
+ }
|
|
|
return R.succ();
|
|
|
}
|
|
|
|
|
@@ -101,17 +144,67 @@ public class CropLandController {
|
|
|
return R.succ();
|
|
|
}
|
|
|
|
|
|
- @Transactional
|
|
|
- public BaseResult saveTest(){
|
|
|
- new Thread(new Runnable() {
|
|
|
- @Override
|
|
|
- public void run() {
|
|
|
- cityLandService.saveCityAll();
|
|
|
+ Executor executor = Executors.newFixedThreadPool(10);
|
|
|
+ int size = 0;
|
|
|
+
|
|
|
+ @RequestMapping("/saveTestAll")
|
|
|
+ @ResponseBody
|
|
|
+ public BaseResult saveTestAll(){
|
|
|
+ QCropLand qCropLand = QCropLand.cropLand;
|
|
|
+ List<CropLand> landList = cityLandService.findAll(qCropLand.district.isNull());
|
|
|
+ List<District> districtList = districtRepository.findAll(Sort.by(District.FIELDS.code));
|
|
|
+ List<City> cityList = cityRepository.findAll(Sort.by(City.FIELDS.code));
|
|
|
+ int i=0;
|
|
|
+ for(City city : cityList){
|
|
|
+ List<District> districts = new ArrayList<>();
|
|
|
+ while(i < districtList.size()){
|
|
|
+ if(city.getCode() / 100 == districtList.get(i).getCode() / 100){
|
|
|
+ districts.add(districtList.get(i));
|
|
|
+ i++;
|
|
|
+ }else{
|
|
|
+ break;
|
|
|
+ }
|
|
|
}
|
|
|
- });
|
|
|
+ city.setDistrictList(districts);
|
|
|
+ }
|
|
|
+ size = landList.size();
|
|
|
+ System.out.println("landList load finnish");
|
|
|
+ GenericsUtil<CropLand> genericsUtil = new GenericsUtil<>(CropLand.class);
|
|
|
+ List<List<CropLand>> list = genericsUtil.subListBySegment(landList, 10);
|
|
|
+ for(List<CropLand> cropLandList : list){
|
|
|
+ executor.execute(() -> {
|
|
|
+ for(CropLand bean : cropLandList){
|
|
|
+ District district = withinDistrict(cityList, bean);
|
|
|
+ if(district != null){
|
|
|
+ cityLandService.setCity(bean, district);
|
|
|
+ cityLandService.save(bean);
|
|
|
+ synchronized (this) {
|
|
|
+ System.out.println("剩余:" + (--size));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
return R.succ();
|
|
|
}
|
|
|
|
|
|
+ private District withinDistrict(List<City> cityList, CropLand bean){
|
|
|
+ for(City city : cityList){
|
|
|
+ if(bean.getCenterPoint() == null){
|
|
|
+ bean.setCenterPoint(cityLandService.getCenterPoint(bean.getGeom()));
|
|
|
+ }
|
|
|
+ if(bean.getCenterPoint().within(city.getGeom())){
|
|
|
+ for(District district : city.getDistrictList()){
|
|
|
+ if(bean.getCenterPoint().within(district.getGeom())){
|
|
|
+ return district;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
}
|
|
|
|
|
|
|