package com.panzhihua.service_community.service.impl;
|
|
import cn.hutool.core.date.DateTime;
|
import cn.hutool.core.date.DateUtil;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.panzhihua.common.model.dtos.partybuilding.ComPbActivityDTO;
|
import com.panzhihua.common.model.vos.R;
|
import com.panzhihua.common.model.vos.screen.*;
|
import com.panzhihua.common.utlis.DateUtils;
|
import com.panzhihua.common.utlis.StringUtils;
|
import com.panzhihua.service_community.dao.*;
|
import com.panzhihua.service_community.model.dos.ComActDO;
|
import com.panzhihua.service_community.model.dos.ComActDynDO;
|
import com.panzhihua.service_community.service.ScreenWorkService;
|
import org.apache.commons.net.ntp.TimeStamp;
|
import org.springframework.stereotype.Service;
|
|
import javax.annotation.Resource;
|
import java.math.BigDecimal;
|
import java.math.RoundingMode;
|
import java.util.*;
|
import java.util.stream.Collectors;
|
import java.util.stream.Stream;
|
|
/**
|
* @author xyh
|
* @date 2021/6/15 15:14
|
*/
|
@Service
|
public class ScreenWorkServiceImpl implements ScreenWorkService {
|
|
private static final Integer pageSize = 200;
|
|
@Resource
|
private ComActDAO comActDAO;
|
@Resource
|
private ComActNeighborCircleDAO comActNeighborCircleDAO;
|
@Resource
|
private ComActDynDAO comActDynDAO;
|
@Resource
|
private ComActMicroWishDAO comActMicroWishDAO;
|
@Resource
|
private ComActActivityDAO actActivityDAO;
|
@Resource
|
private ComActDiscussDAO comActDiscussDAO;
|
@Resource
|
private ComPbDynDAO comPbDynDAO;
|
@Resource
|
private ComActEasyPhotoDAO comActEasyPhotoDAO;
|
|
private final String moth_format_str = "yyyy-MM";
|
|
private final String[] monthStr = new String[]{"一","二","三","四","五","六","七","八","九","十","十一","十二"};
|
|
@Override
|
public R statisticNeighborCircle(Long communityId) {
|
|
ComActNeighborCircleScreenVO comActNeighborCircleScreenVO = new ComActNeighborCircleScreenVO();
|
String date = DateUtils.getDateFormatString(new Date(),moth_format_str);
|
Map<String,Long> countMap = comActNeighborCircleDAO.countByCommunityId(communityId,date);
|
comActNeighborCircleScreenVO.setCurrentNum(countMap.get("currentNum"));
|
comActNeighborCircleScreenVO.setTotalNum(countMap.get("totalNum"));
|
Map<String,Object> sumMap = comActNeighborCircleDAO.sumScreenNum(communityId);
|
comActNeighborCircleScreenVO.setFabulousNum(sumMap.get("fabulousNum") == null?0L:Long.valueOf(sumMap.get("fabulousNum").toString()));
|
comActNeighborCircleScreenVO.setCommentNum(sumMap.get("commentNum") == null?0L:Long.valueOf(sumMap.get("commentNum").toString()));
|
comActNeighborCircleScreenVO.setSharedNum(sumMap.get("forwardNum") == null?0L:Long.valueOf(sumMap.get("forwardNum").toString()));
|
//查询最近发布的邻里圈
|
comActNeighborCircleScreenVO.setList(comActNeighborCircleDAO.screenNeighborCircle(communityId,pageSize));
|
//查询最近发布的邻里圈图片
|
comActNeighborCircleScreenVO.setImgs(convertStringList(comActNeighborCircleDAO.screenNeighborCircleImgs(communityId,pageSize)));
|
return R.ok(comActNeighborCircleScreenVO);
|
}
|
|
@Override
|
public R wish(Long communityId) {
|
ComActMicroWishScreenVO wishScreenVO = new ComActMicroWishScreenVO();
|
String date = DateUtils.getDateFormatString(new Date(),moth_format_str);
|
//统计本月新增,累计实现,待实现
|
Map<String,Long> countMap = comActMicroWishDAO.countByCommunityId(communityId,date);
|
wishScreenVO.setCompletedNum(countMap.get("completedNum") == null ? 0L : countMap.get("completedNum"));
|
wishScreenVO.setWillNum(countMap.get("willNum") == null ? 0L : countMap.get("willNum"));
|
wishScreenVO.setCurrentNum(countMap.get("currentNum") == null ? 0L : countMap.get("currentNum"));
|
//微心愿轮播图片
|
wishScreenVO.setImgs(convertStringList(comActMicroWishDAO.getAllImgs(communityId,pageSize)));
|
return R.ok(wishScreenVO);
|
}
|
|
|
|
private List<String> convertStringList(List<String> imgList) {
|
List<String> imgs = new ArrayList<>();
|
for(String img:imgList){
|
if(StringUtils.isEmpty(img)){
|
continue;
|
}
|
String[] arrs = img.split(",");
|
if(arrs.length > 1){
|
for(String arr: arrs){
|
imgs.add(arr);
|
}
|
}else{
|
imgs.add(img);
|
}
|
}
|
return imgs;
|
}
|
|
@Override
|
public R activity(Long communityId) {
|
ComActActivityScreenVO comActActivityScreenVO = new ComActActivityScreenVO();
|
|
comActActivityScreenVO.setImgs(convertStringList(actActivityDAO.listImg(communityId)));
|
//统计本月新增、居民活动,志愿者活动
|
String date = DateUtils.getDateFormatString(new Date(),moth_format_str);
|
Map<String,Long> countMap = actActivityDAO.countByCommunityId(communityId,date);
|
comActActivityScreenVO.setTotalNum(countMap.get("totalNum") == null ? 0L : countMap.get("totalNum"));
|
comActActivityScreenVO.setCurrentNum(countMap.get("currentNum") == null ? 0L : countMap.get("currentNum"));
|
comActActivityScreenVO.setCommonNum(countMap.get("commonNum") == null ? 0L : countMap.get("commonNum"));
|
comActActivityScreenVO.setCommonPeopleNum(countMap.get("commonPeopleNum") == null ? 0L : countMap.get("commonPeopleNum"));
|
comActActivityScreenVO.setVolunteerNum(countMap.get("volunteerNum") == null ? 0L : countMap.get("volunteerNum"));
|
comActActivityScreenVO.setVolunteerPeopleNum(countMap.get("volunteerPeopleNum") == null ? 0L : countMap.get("volunteerPeopleNum"));
|
//最近活动
|
comActActivityScreenVO.setList(actActivityDAO.screenActivity(communityId,pageSize));
|
return R.ok(comActActivityScreenVO);
|
}
|
|
@Override
|
public R discuss(Long communityId) {
|
ComActDiscussScreenVO discussScreenVO = new ComActDiscussScreenVO();
|
//统计本月新增,总共,图文,投票
|
String date = DateUtils.getDateFormatString(new Date(),moth_format_str);
|
Map<String,Long> countMap = comActDiscussDAO.countByCommunityId(communityId,date);
|
discussScreenVO.setCurrentNum(countMap.get("currentNum") == null ? 0L : countMap.get("currentNum"));
|
discussScreenVO.setTotalNum(countMap.get("totalNum") == null ? 0L : countMap.get("totalNum"));
|
discussScreenVO.setImgNum(countMap.get("imgNum") == null ? 0L : countMap.get("imgNum"));
|
discussScreenVO.setImgPeopleNum(countMap.get("imgPeopleNum") == null ? 0L : countMap.get("imgPeopleNum"));
|
discussScreenVO.setVoteNum(discussScreenVO.getTotalNum() - discussScreenVO.getImgNum());
|
discussScreenVO.setVotePeopleNum(countMap.get("votePeopleNum") == null ? 0L : countMap.get("votePeopleNum"));
|
discussScreenVO.setList(comActDiscussDAO.screenDiscuss(communityId,pageSize));
|
return R.ok(discussScreenVO);
|
}
|
|
@Override
|
public R pbWork(Long communityId) {
|
ComPbWorkScreenVO pbWorkScreenVO = new ComPbWorkScreenVO();
|
String date = DateUtils.getDateFormatString(new Date(),moth_format_str);
|
Map<String,Long> countMap = comPbDynDAO.countByCommunityId(communityId,date);
|
pbWorkScreenVO.setActivityNum(countMap.get("activityNum") == null ? 0L : countMap.get("activityNum"));
|
pbWorkScreenVO.setDynNum(countMap.get("dynNum") == null ? 0L : countMap.get("dynNum"));
|
pbWorkScreenVO.setTotalNum(pbWorkScreenVO.getActivityNum() + pbWorkScreenVO.getDynNum());
|
pbWorkScreenVO.setCurrentNum(countMap.get("currentNum") == null ? 0L : countMap.get("currentNum"));
|
//统计近半年数据
|
List<PbWorkVO> list = new ArrayList<>();
|
for(PbWorkVO workVO: listHalfYear()){
|
PbWorkVO result = comPbDynDAO.countByTime(workVO.getStart(),workVO.getEnd(),communityId);
|
result.setMonth(workVO.getMonth());
|
list.add(result);
|
}
|
pbWorkScreenVO.setList(list);
|
return R.ok(pbWorkScreenVO);
|
}
|
|
|
private List<PbWorkVO> listHalfYear() {
|
List<PbWorkVO> dateList = new ArrayList<>();
|
Date now = new Date();
|
for(int i= 6;i>=1;i--){
|
Date date = DateUtils.getDateM(now,-i);
|
DateTime endDay = DateUtil.endOfMonth(date);
|
|
int m = DateUtil.month(endDay);
|
if(m == 0){
|
m = 12;
|
}
|
m--;
|
int day = DateUtil.dayOfMonth(endDay);
|
int half = day/2;
|
String month = DateUtil.format(date,moth_format_str);
|
PbWorkVO pbWorkVO = new PbWorkVO();
|
pbWorkVO.setMonth(monthStr[m]+"月上旬");
|
pbWorkVO.setStart(month+ "-01 00:00:00");
|
pbWorkVO.setEnd(month+ "-"+half+" 23:59:58");
|
dateList.add(pbWorkVO);
|
PbWorkVO pbWorkVO2 = new PbWorkVO();
|
pbWorkVO2.setMonth(monthStr[m]+"月下旬");
|
pbWorkVO2.setStart(month+ "-"+half+" 23:59:58");
|
pbWorkVO2.setEnd(DateUtils.getDateFormatString(endDay,"yyyy-MM-dd HH:mm:ss"));
|
dateList.add(pbWorkVO2);
|
}
|
return dateList;
|
|
}
|
|
@Override
|
public R easyPhoto(Long communityId) {
|
ComActEasyPhotoScreenVO comActEasyPhotoScreenVO = new ComActEasyPhotoScreenVO();
|
comActEasyPhotoScreenVO.setDeal(comActEasyPhotoDAO.countDeal(communityId));
|
comActEasyPhotoScreenVO.setPub(comActEasyPhotoDAO.countPub(communityId));
|
comActEasyPhotoScreenVO.setApproved(comActEasyPhotoDAO.countApproved(communityId));
|
String date = DateUtils.getDateFormatString(new Date(),moth_format_str);
|
Map<String,Object> countMap = comActEasyPhotoDAO.countByCommunityId(communityId,date);
|
comActEasyPhotoScreenVO.setCurrentNum(countMap.get("currentNum") == null ? 0L : Long.valueOf(countMap.get("currentNum").toString()));
|
comActEasyPhotoScreenVO.setNoneDeal(countMap.get("noneDeal") == null ? 0L : Long.valueOf(countMap.get("noneDeal").toString()));
|
comActEasyPhotoScreenVO.setPubPoint(countMap.get("pubPoint") == null ? 0 : Integer.valueOf(countMap.get("pubPoint").toString()));
|
comActEasyPhotoScreenVO.setDealTime(countMap.get("dealTime") == null ? 0 : Double.valueOf(countMap.get("dealTime").toString()).intValue());
|
List<EastPhotoVO> list = new ArrayList<>();
|
for(PbWorkVO workVO: listHalfYear()){
|
String nowDate = DateUtils.getDateFormatString(DateUtil.parseDate(workVO.getStart()),moth_format_str);
|
EastPhotoVO result = comActEasyPhotoDAO.countByTime(workVO.getStart(),workVO.getEnd(),nowDate,communityId);
|
result.setMonth(workVO.getMonth());
|
list.add(result);
|
}
|
comActEasyPhotoScreenVO.setList(list);
|
return R.ok(comActEasyPhotoScreenVO);
|
}
|
|
private List<EasyPhotoPointVO> getList(Map<String, Long> dealMap) {
|
Set<Map.Entry<String,Long>> entrySet = dealMap.entrySet();
|
|
List<EasyPhotoPointVO> list = new ArrayList<>();
|
for(Map.Entry<String,Long> en:entrySet){
|
EasyPhotoPointVO easyPhotoPointVO = new EasyPhotoPointVO();
|
easyPhotoPointVO.setTypeName(en.getKey());
|
easyPhotoPointVO.setPoint(en.getValue().intValue());
|
list.add(easyPhotoPointVO);
|
}
|
return list;
|
|
}
|
|
@Override
|
public R workCount(Long communityId) {
|
ComActWorkScreenVO comActWorkScreenVO = new ComActWorkScreenVO();
|
//已完成
|
comActWorkScreenVO.setCompletetList(comActNeighborCircleDAO.countAllCompletedWorkByCommunityId(communityId));
|
|
//未完成
|
comActWorkScreenVO.setNoneList(comActNeighborCircleDAO.countAllNoneCompletedWorkByCommunityId(communityId));
|
comActWorkScreenVO.setTotalCompleted(comActWorkScreenVO.getCompletetList().stream().mapToInt(PieElementVO::getNum).sum());
|
comActWorkScreenVO.setTotalNoneCompleted(comActWorkScreenVO.getNoneList().stream().mapToInt(PieElementVO::getNum).sum());
|
|
//统计平均耗时、平均每天完成个数
|
Map<String,Object> avgMap = comActNeighborCircleDAO.countAvgByCommunityId(communityId);
|
comActWorkScreenVO.setAvgTime(avgMap.get("avgTime") == null?"0h":convertTimeStr(Double.valueOf(avgMap.get("avgTime").toString()).intValue()));
|
|
ComActDO comActDO = comActDAO.selectById(communityId);
|
BigDecimal days = new BigDecimal(DateUtil.betweenDay(comActDO.getCreateAt(),new Date(),false));
|
BigDecimal num = new BigDecimal(comActWorkScreenVO.getTotalCompleted());
|
BigDecimal rt = num.divide(days,1, RoundingMode.HALF_UP);
|
comActWorkScreenVO.setEveryDayNum(rt.toString());
|
return R.ok(comActWorkScreenVO);
|
}
|
|
private String convertTimeStr(int minute) {
|
int hour = minute/60;
|
int min = minute%60;
|
StringBuilder timestr = new StringBuilder();
|
if(hour > 0){
|
timestr.append(hour).append("h");
|
}
|
if(min > 0){
|
timestr.append(min).append("min");
|
}
|
return timestr.toString();
|
}
|
|
@Override
|
public R dynamicWork(Long communityId){
|
ComDynamicWorkScreenVO workScreenVO = new ComDynamicWorkScreenVO();
|
String date = DateUtils.getDateFormatString(new Date(),moth_format_str);
|
Map<String,Long> countMap = comActDynDAO.countByCommunityId(communityId,date);
|
if(!countMap.isEmpty()){
|
workScreenVO.setTotalNum(countMap.get("dynTotal")== null ? 0L : Long.valueOf(countMap.get("dynTotal").toString()));
|
workScreenVO.setCurrentNum(countMap.get("currentNum")== null ? 0L : Long.valueOf(countMap.get("currentNum").toString()));
|
}
|
|
//计算平均每天动态
|
DateScreenVO countAvg = comActDynDAO.countByAvgCommunityId(communityId);
|
if(countAvg != null){
|
int day = DateUtils.differentDays(countAvg.getStartTime(),countAvg.getEndTime());
|
if(day > 0){
|
workScreenVO.setCurrentAvgNum(workScreenVO.getTotalNum().intValue()/day);
|
}
|
}
|
|
//查询最新的10条社区动态
|
List<String> dynList = new ArrayList<>();
|
List<ComActDynDO> actDynDOList = comActDynDAO.selectList(new QueryWrapper<ComActDynDO>().lambda().eq(ComActDynDO::getCommunityId,communityId).orderByDesc(ComActDynDO::getCreateAt).last("limit 10"));
|
if(!actDynDOList.isEmpty()){
|
actDynDOList.forEach(actDyn -> {
|
dynList.add(actDyn.getTitle());
|
});
|
}
|
workScreenVO.setDynList(dynList);
|
|
//统计近半年数据
|
List<DynamicWorkVO> list = new ArrayList<>();
|
for(DynamicWorkVO dynamicWorkVO: listHalfYearByDyn()){
|
DynamicWorkVO result = comActDynDAO.countByTime(dynamicWorkVO.getStart(),dynamicWorkVO.getEnd(),communityId);
|
result.setMonth(dynamicWorkVO.getMonth());
|
list.add(result);
|
}
|
workScreenVO.setList(list);
|
|
return R.ok(workScreenVO);
|
}
|
|
private List<DynamicWorkVO> listHalfYearByDyn() {
|
List<DynamicWorkVO> dateList = new ArrayList<>();
|
Date now = new Date();
|
for(int i= 6;i>=1;i--){
|
Date date = DateUtils.getDateM(now,-i);
|
DateTime endDay = DateUtil.endOfMonth(date);
|
|
int m = DateUtil.month(endDay);
|
// if(m == 0){
|
// m = 12;
|
// }
|
// m--;
|
int day = DateUtil.dayOfMonth(endDay);
|
int half = day/2;
|
String month = DateUtil.format(date,moth_format_str);
|
DynamicWorkVO dynamicWorkVO = new DynamicWorkVO();
|
dynamicWorkVO.setMonth(monthStr[m]+"月上旬");
|
dynamicWorkVO.setStart(month+ "-01 00:00:00");
|
dynamicWorkVO.setEnd(month+ "-"+half+" 23:59:58");
|
dateList.add(dynamicWorkVO);
|
DynamicWorkVO dynamicWorkVO1 = new DynamicWorkVO();
|
dynamicWorkVO1.setMonth(monthStr[m]+"月下旬");
|
dynamicWorkVO1.setStart(month+ "-"+half+" 23:59:58");
|
dynamicWorkVO1.setEnd(DateUtils.getDateFormatString(endDay,"yyyy-MM-dd HH:mm:ss"));
|
dateList.add(dynamicWorkVO1);
|
}
|
return dateList;
|
|
}
|
|
|
}
|