Commit 1b57f4b5 authored by 周健威's avatar 周健威

修改代码

parent e8722162
......@@ -18,6 +18,10 @@ import java.math.BigDecimal;
@Table(name = "rscp_image_cover")
@ApiModel(description = "")
public class RscpImageCover implements java.io.Serializable {
public static final int TYPE_MONTH = 2;
public static final int TYPE_YEAR = 3;
/** 版本号 */
private static final long serialVersionUID = -2790155170329491146L;
......@@ -28,7 +32,7 @@ public class RscpImageCover implements java.io.Serializable {
@KeySql(useGeneratedKeys = true)
@Column(name = "id",insertable = false)
@ApiModelProperty(value = "id标识")
private String id;
private Integer id;
/** 统计类型 2--月份;3--年份 */
@ApiModelProperty(value = "统计类型 2--月份;3--年份")
......
......@@ -290,4 +290,7 @@ public class RscpImageDataTotal implements java.io.Serializable {
@ApiModelProperty(value = "")
private Long dataId;
@ApiModelProperty(value = "是否已经统计覆盖率")
private Integer coverStatistics;
}
\ No newline at end of file
package com.upyuns.platform.rs.datacenter.pojo.imagedata;
import com.github.wxiaoqi.security.common.vo.PageParam;
import com.upyuns.platform.rs.datacenter.entity.RscpImageCover;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
@Data
public class InsertCoverDTO extends RscpImageCover {
List<Long> ids;
}
\ No newline at end of file
package com.upyuns.platform.rs.datacenter.biz;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.upyuns.platform.rs.datacenter.entity.RscpImageCover;
import com.upyuns.platform.rs.datacenter.entity.RscpImageStatistics;
import com.github.wxiaoqi.security.common.util.Query;
import com.github.wxiaoqi.security.common.vo.PageDataVO;
import com.github.wxiaoqi.security.common.vo.PageParam;
import com.upyuns.platform.rs.datacenter.entity.*;
import com.upyuns.platform.rs.datacenter.mapper.RscpImageCoverMapper;
import com.upyuns.platform.rs.datacenter.mapper.RscpImageStatisticsMapper;
import com.upyuns.platform.rs.datacenter.pojo.BgImageCoverQueryDTO;
import com.upyuns.platform.rs.datacenter.pojo.imagedata.InsertCoverDTO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
import static com.github.wxiaoqi.security.common.constant.CommonConstants.SYS_FALSE;
import static com.github.wxiaoqi.security.common.constant.CommonConstants.SYS_TRUE;
@Service
public class RscpImageCoverBiz extends BaseBiz<RscpImageCoverMapper, RscpImageCover> {
@Autowired
RscpImagePriceBiz rscpImagePriceBiz;
@Autowired
RscpImageDataTotalBiz rscpImageDataTotalBiz;
@Autowired
RscpImageStatisticsBiz rscpImageStatisticsBiz;
@Autowired
RscpAreaImageTotalBiz rscpAreaImageTotalBiz;
@Autowired
RscpAreaInfoBiz rscpAreaInfoBiz;
public List<RscpImageCover> bgQueryDataList(BgImageCoverQueryDTO dto) {
return mapper.bgQueryDataList(dto);
}
public int coverInserver(InsertCoverDTO dto){
return mapper.coverInserver(dto);
}
public void coverTask() {
Date now = new Date();
Long count= rscpImageDataTotalBiz.selectCount(new RscpImageDataTotal(){{
setCoverStatistics(0);
}});
long cirle = 1;
if(count > 500L) {
cirle = (count/500L) + 1;
}
for (int i = 0; i < cirle; i++) {
PageDataVO<RscpImageDataTotal> vos = PageDataVO.pageInfo(new Query(new PageParam(){{
setPage(1);
setLimit(500);
}}), () -> rscpImageDataTotalBiz.selectByWeekend(w -> {
w.andEqualTo(RscpImageDataTotal::getCoverStatistics, 0);
return w;
}, " image_take_time asc"));
if(CollUtil.isNotEmpty(vos.getData())) {
List<Long> ids = vos.getData().parallelStream().map(RscpImageDataTotal::getId).collect(Collectors.toList());
Map<Long, RscpImageDataTotal> map = vos.getData().parallelStream().collect(Collectors.toMap(RscpImageDataTotal::getId, Function.identity()));
//根据id查询区域信息
List<RscpAreaImageTotal> areas = rscpAreaImageTotalBiz.selectByWeekend(w -> {
w.andIn(RscpAreaImageTotal::getDataId, ids);
return w;
});
Map<String, List<RscpAreaImageTotal>> areaMap = areas.parallelStream().collect(Collectors.groupingBy(RscpAreaImageTotal::getAreaNo));
areaMap.forEach((k,v) -> {
//根据月份 处理覆盖率
Integer areaCode = Integer.valueOf(k);
RscpAreaInfo rscpAreaInfo = rscpAreaInfoBiz.queryAreaInfoByAreaId(k);
//按月份
Map<String, List<RscpAreaImageTotal>> monthMap = v.parallelStream().collect(Collectors.groupingBy(a->{
DateTime dateTime = DateUtil.parseDate(a.getBeginTime());
return DateUtil.format(dateTime, "yyyy-MM");
}));
//按年份
Map<String, List<RscpAreaImageTotal>> yearMap = v.parallelStream().collect(Collectors.groupingBy(a->{
DateTime dateTime = DateUtil.parseDate(a.getBeginTime());
return DateUtil.format(dateTime, "yyyy");
}));
//处理月份份融合
monthMap.forEach((mk,mv) -> {
String[] mks = mk.split("-");
String yearMk = mks[0];
String monthMk = mks[1];
//查询旧数据
List<RscpImageCover> list = selectList(new RscpImageCover(){{
setDateMonth(monthMk);
setDateYear(yearMk);
setIsDel(SYS_FALSE);
setAreaCode(areaCode);
setType(TYPE_MONTH);
}});
List<Long> dataIds = mv.parallelStream().map(RscpAreaImageTotal::getDataId).collect(Collectors.toList());
if(CollUtil.isNotEmpty(list)) {
Integer oldId = list.get(0).getId();
updateById(new RscpImageCover(){{
setId(oldId);
setIsDel(SYS_TRUE);
}});
}else {
int hasSucc = coverInserver(new InsertCoverDTO(){{
setIds(dataIds);
setAreaCode(areaCode);
setAreaName(rscpAreaInfo.getName());
setCrtTime(now.getTime());
setUpdTime(now.getTime());
setDateMonth(monthMk);
setDateYear(yearMk);
setType(TYPE_MONTH);
}});
}
});
});
}
}
}
}
package com.upyuns.platform.rs.datacenter.job;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import com.upyuns.platform.rs.datacenter.biz.RscpImageDataTotalBiz;
import com.upyuns.platform.rs.datacenter.biz.RscpImagePriceBiz;
import com.upyuns.platform.rs.datacenter.biz.RscpImageStatisticsBiz;
import com.upyuns.platform.rs.datacenter.entity.RscpImageDataTotal;
import com.upyuns.platform.rs.datacenter.entity.RscpImagePrice;
import com.upyuns.platform.rs.datacenter.entity.RscpImageStatistics;
import com.github.pagehelper.PageInfo;
import com.github.wxiaoqi.security.common.util.Query;
import com.github.wxiaoqi.security.common.vo.PageDataVO;
import com.github.wxiaoqi.security.common.vo.PageParam;
import com.upyuns.platform.rs.datacenter.biz.*;
import com.upyuns.platform.rs.datacenter.entity.*;
import com.upyuns.platform.rs.datacenter.pojo.imagedata.InsertCoverDTO;
import com.upyuns.platform.rs.datacenter.vo.MaxMinVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -15,7 +18,11 @@ import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
import static com.github.wxiaoqi.security.common.constant.CommonConstants.SYS_FALSE;
......@@ -35,6 +42,15 @@ public class CoverScheduleTask {
@Autowired
RscpImageStatisticsBiz rscpImageStatisticsBiz;
@Autowired
RscpAreaImageTotalBiz rscpAreaImageTotalBiz;
@Autowired
RscpImageCoverBiz rscpImageCoverBiz;
@Autowired
RscpAreaInfoBiz rscpAreaInfoBiz;
//定时按月份统计覆盖率
//@Scheduled(cron = "0 0 2 * * ?")
//或直接指定时间间隔,例如:5秒
......@@ -42,20 +58,12 @@ public class CoverScheduleTask {
public void configureTasks() {
//定时统计覆盖率数据
//查询未处理覆盖率影像最早时间和最晚时间
MaxMinVO vo = rscpImageDataTotalBiz.coverStatisticsMaxMin();
if(null == vo.getMaxTime()) {
log.info("无需更新");
return;
}
// //生成月份循环
// DateUtil.
// for(String satelliteType : satelliteTypes){
//
// MaxMinVO vo = rscpImageDataTotalBiz.coverStatisticsMaxMin();
// if(null == vo.getMaxTime()) {
// log.info("无需更新");
// return;
// }
//生成年循环
}
......
......@@ -2,11 +2,12 @@ package com.upyuns.platform.rs.datacenter.mapper;
import com.upyuns.platform.rs.datacenter.entity.RscpImageCover;
import com.upyuns.platform.rs.datacenter.pojo.BgImageCoverQueryDTO;
import com.upyuns.platform.rs.datacenter.pojo.imagedata.InsertCoverDTO;
import tk.mybatis.mapper.common.Mapper;
import java.util.List;
public interface RscpImageCoverMapper extends Mapper<RscpImageCover> {
public List<RscpImageCover> bgQueryDataList(BgImageCoverQueryDTO dto);
public int coverInserver(InsertCoverDTO dto);
}
\ No newline at end of file
package com.upyuns.platform.rs.datacenter.rest.backstage;
import com.github.wxiaoqi.security.auth.client.annotation.IgnoreClientToken;
import com.github.wxiaoqi.security.auth.client.annotation.IgnoreUserToken;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.rest.BaseController;
......@@ -29,4 +30,14 @@ public class BgRscpImageCoverController extends BaseController<RscpImageCoverBiz
public ObjectRestResponse<PageDataVO<RscpImageCover>> bgPages(BgImageCoverQueryDTO dto) {
return ObjectRestResponse.succ(PageDataVO.pageInfo(dto.initQuery(), () -> baseBiz.bgQueryDataList(dto)));
}
@ApiOperation("定时处理")
@RequestMapping(value = "/app/unauth/coverTask",method = RequestMethod.GET)
@ResponseBody
@IgnoreUserToken
@IgnoreClientToken
public ObjectRestResponse coverTask() {
baseBiz.coverTask();
return ObjectRestResponse.succ();
}
}
\ No newline at end of file
......@@ -32,8 +32,50 @@
ric.id, ric.type, ric.name, ric.ratio, ric.date_year, ric.date_month,
ric.is_del, ric.crt_time, ric.upd_time, ric.area_code, ric.area_name
</sql>
<!-- This code was generated by TableGo tools, mark 2 end. -->
<insert id="coverInserver">
INSERT INTO
rscp_image_cover
(
range, type, name, ratio, date_year, date_month, crt_time, upd_time, area_code, area_name, cover_acreage, region_acreage
)
(
select temp.unrange, #{type}, #{name}, cover_acreage/region_acreage, #{dateYear}, #{dateMonth}, #{crtTime}, #{updTime}, #{areaCode}, #{areaName},
cover_acreage, region_acreage
from
( select ridt_temp.unrange, cast(st_area(ST_Intersection(ridt_temp.unrange, area_temp.geom),true)/1000/1000 as numeric(10,3)) as cover_acreage, cast(st_area(area_temp.geom,true)/1000/1000 as numeric(10,3)) as region_acreage
from
(
select st_union(ridt.range) as unrange
from rscp_image_data_total ridt
<where>
<if test="dataIds !=null and dataIds.size()>0">
and ( ridt.id in
<foreach collection="dataIds" item="dataIdsVal" open="(" close=")" separator=",">
#{dataIdsVal}
</foreach>
)
</if>
</where>
) ridt_temp
, (
select geom from rscp_area_info rai
<where>
<if test="areaCode != null">
and rai.admincode = #{areaCode}
</if>
</where>
) area_temp
) temp
)
</insert>
<select id="bgQueryDataList" resultMap="rscpImageCoverMap">
select
<include refid="allColumns2"></include>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment