package com.panzhihua.service_community.service.impl; import java.util.*; import java.util.stream.Collectors; import javax.annotation.Resource; import cn.hutool.core.collection.CollectionUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.panzhihua.common.model.dtos.community.building.BuildingDto; import com.panzhihua.common.model.dtos.community.large.AreaStreetDetail; import com.panzhihua.common.model.dtos.community.large.AreaStreetDetailResp; import com.panzhihua.common.model.dtos.community.large.SumAreaStreetResp; import com.panzhihua.common.model.dtos.partybuilding.QryReportResp; import com.panzhihua.common.model.vos.StreetVO; import com.panzhihua.common.model.vos.area.StreetAndBuildVO; import com.panzhihua.common.model.vos.community.bigscreen.ScreenStatics; import com.panzhihua.common.model.vos.community.screen.event.EventPopulationSpecialStatisticsVO; import com.panzhihua.common.model.vos.neighbor.ActivityAnalysisVO; import com.panzhihua.common.model.vos.neighbor.UnitActivityAnalysisVO; import com.panzhihua.common.model.vos.user.AdministratorsUserVO; import com.panzhihua.common.service.community.CommunityService; import com.panzhihua.common.service.user.UserService; import com.panzhihua.common.utlis.Snowflake; import com.panzhihua.service_community.dao.*; import com.panzhihua.service_community.entity.ComEvent; import com.panzhihua.service_community.service.ComAreaTownCommunityService; import com.panzhihua.service_community.util.MyAESUtil; import com.panzhihua.service_community.util.WxDataUtil; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.ObjectUtils; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.google.common.collect.Lists; import com.panzhihua.common.model.dtos.community.PageComStreetDTO; import com.panzhihua.common.model.vos.R; import com.panzhihua.common.model.vos.community.ComActVO; import com.panzhihua.common.model.vos.community.ComStreetVO; import com.panzhihua.service_community.model.dos.ComActDO; import com.panzhihua.service_community.model.dos.ComStreetDO; import com.panzhihua.service_community.service.ComStreetService; import org.springframework.util.StringUtils; /** * @author: llming * @description: 街道 **/ @Service public class ComStreetServiceImpl implements ComStreetService { @Resource private ComActDAO comActDAO; @Resource private ComStreetDAO comStreetDAO; @Resource private UserService userService; @Resource private ComEventMapper comEventMapper; @Autowired private CommunityService communityService; @Resource private StringRedisTemplate stringRedisTemplate; /** * 新增社区 * * @param comStreetVO * 街道信息 * @return 新增结果 */ @Override @Transactional public R addStreet(ComStreetVO comStreetVO) { ComStreetDO comStreetDO = new ComStreetDO(); LambdaQueryWrapper param = new QueryWrapper().lambda(); param.eq(ComStreetDO::getName, comStreetVO.getName()); param.eq(ComStreetDO::getProvinceCode, comStreetVO.getProvinceCode()); param.eq(ComStreetDO::getCityCode, comStreetVO.getCityCode()); param.eq(ComStreetDO::getAreaCode, comStreetVO.getAreaCode()); Integer integer = comStreetDAO.selectCount(param); if (integer > 0) { return R.fail(500, "街道已经存在"); } AdministratorsUserVO administratorsUserVO=new AdministratorsUserVO(); administratorsUserVO.setType(3); administratorsUserVO.setAccount(comStreetVO.getAccount()); administratorsUserVO.setPassword(comStreetVO.getPassword()); administratorsUserVO.setSocialType(1); administratorsUserVO.setRoleId(777777777L); administratorsUserVO.setStreetId(0L); administratorsUserVO.setName(comStreetVO.getName()); administratorsUserVO.setUserId(Snowflake.getId()); R r=userService.addUserBackstageProperty(administratorsUserVO); if(R.isOk(r)){ BeanUtils.copyProperties(comStreetVO, comStreetDO); int insert = comStreetDAO.insert(comStreetDO); if (insert > 0) { AdministratorsUserVO administratorsUserVO1=new AdministratorsUserVO(); administratorsUserVO1.setUserId(Long.parseLong(r.getData().toString())); administratorsUserVO1.setStreetId(comStreetDO.getStreetId()); userService.updateStreet(administratorsUserVO1); ComStreetDO comStreetDO1 = comStreetDAO.selectOne(param); BeanUtils.copyProperties(comStreetDO1, comStreetVO); return R.ok(comStreetVO); } return R.fail(500, ""); } return R.fail("账号已存在"); } /** * 查询街道 * * @param comStreetVO * 街道名 * @return 社区集合 */ @Override public R listStreet(ComStreetVO comStreetVO) { LambdaQueryWrapper param = new QueryWrapper().lambda(); if (comStreetVO.getProvinceCode() != null) { param.eq(ComStreetDO::getProvinceCode, comStreetVO.getProvinceCode()); } if (comStreetVO.getCityCode() != null) { param.eq(ComStreetDO::getCityCode, comStreetVO.getCityCode()); } if (comStreetVO.getAreaCode() != null) { param.eq(ComStreetDO::getAreaCode, comStreetVO.getAreaCode()); } List voList = Lists.newArrayList(); List comStreetDOS = comStreetDAO.selectList(param); comStreetDOS.forEach(dos -> { ComStreetVO vo = new ComStreetVO(); BeanUtils.copyProperties(dos, vo); voList.add(vo); }); return R.ok(voList); } /** * 社区详情 * * @param streetId * 街道id * @return 社区详情 */ @Override public R detailStreet(Long streetId) { ComStreetDO comStreetDO = comStreetDAO.selectById(streetId); if (ObjectUtils.isEmpty(comStreetDO)) { return R.fail(); } ComStreetVO comStreetVO = new ComStreetVO(); BeanUtils.copyProperties(comStreetDO, comStreetVO); comStreetVO.setAdministrativeRegions(comStreetDAO.retrieveRegions(comStreetVO.getAreaCode().toString())); return R.ok(comStreetVO); } /** * 分页查询社区 * * @param pageComStreetDTO * 查询参数 * @return 分页集合 */ @Override public R pageStreet(PageComStreetDTO pageComStreetDTO) { Page page = new Page<>(); Long pageNum = pageComStreetDTO.getPageNum(); Long pageSize = pageComStreetDTO.getPageSize(); if (null == pageNum || 0 == pageNum) { pageNum = 1L; } if (null == pageSize || 0 == pageSize) { pageSize = 10L; } page.setSize(pageSize); page.setCurrent(pageNum); LambdaQueryWrapper userLambdaQueryWrapper = Wrappers.lambdaQuery(); if (pageComStreetDTO.getName() != null) { userLambdaQueryWrapper.like(ComStreetDO::getName, pageComStreetDTO.getName()); } if (pageComStreetDTO.getAreaCode() != null) { userLambdaQueryWrapper.like(ComStreetDO::getAreaCode, pageComStreetDTO.getAreaCode()); } Page userPage = new Page(pageNum, pageSize); IPage doPager = comStreetDAO.selectPage(userPage, userLambdaQueryWrapper.orderByDesc(ComStreetDO::getCreateAt)); return R.ok(doPager); } /** * 批量删除街道 * * @param streetIds * 社区id * @return 删除结果 */ @Override public R delectStreat(List streetIds) { // 不能删除,已经绑定了社区的街道 LambdaQueryWrapper comActDOParam = new QueryWrapper().lambda().in(ComActDO::getStreetId, streetIds); List comActDOS = comActDAO.selectList(comActDOParam); if (comActDOS != null && comActDOS.size() > 0) { return R.fail("删除失败,批量删除街道中,街道下有社区无法删除!"); } int delete = comStreetDAO.deleteBatchIds(streetIds); if (delete > 0) { return R.ok(); } return R.fail(); } /** * 修改街道信息 * @param comStreetVO 街道信息 * */ @Override public R update(ComStreetVO comStreetVO) { ComStreetDO comStreetDO=new ComStreetDO(); BeanUtils.copyProperties(comStreetVO,comStreetDO ); return R.ok(comStreetDAO.updateById(comStreetDO)); } /** * 删除街道 * */ @Override public R remove(Long id) { //是否有未结事件 List longs = comActDAO.selectCommunityByStreetId(id); List comEvents = comEventMapper.selectList(new QueryWrapper().lambda().in(ComEvent::getEventProcessStatus, (4), (6), (7), (8)).in(ComEvent::getRequestUserCommunity, longs)); if (comEvents.size()!=0){ return R.fail("有未结事件不可删除"); } comStreetDAO.deleteById(id); return R.ok(); } @Override public R removeCommunity(Long id) { //是否有未结案件 List comEvents = comEventMapper.selectList(new QueryWrapper().lambda().in(ComEvent::getEventProcessStatus, (4), (6), (7), (8)).eq(ComEvent::getRequestUserCommunity, id)); if (comEvents.size()!=0){ return R.fail("有未结事件不可删除"); } comActDAO.deleteById(id); return R.ok(); } @Override public R repassCommunity(ComActVO comActVO) { ComActDO comActDO=new ComActDO(); try { comActDO.setPassword(MyAESUtil.Encrypt(comActVO.getPassword(),"Ryo7M3n8loC5Abcd" )); } catch (Exception e) { e.printStackTrace(); } comActDO.setCommunityId(comActVO.getCommunityId()); return R.ok(comActDAO.updateById(comActDO)); } @Override public R repssStreet(ComStreetVO comActVO) { ComStreetDO comStreetDO=new ComStreetDO(); try { comStreetDO.setPassword(MyAESUtil.Encrypt(comActVO.getPassword(),"Ryo7M3n8loC5Abcd" )); } catch (Exception e) { e.printStackTrace(); } comStreetDO.setStreetId(comActVO.getStreetId()); return R.ok(comStreetDAO.updateById(comStreetDO)); } @Override public R panzhihuaMap(String areaCode) { List comActVOS = comActDAO.panzhihuaMap(areaCode); return R.ok(comActVOS); } @Override public R searchStreet(BuildingDto buildingDto) { QueryWrapper wrapper = new QueryWrapper<>(); wrapper.eq(buildingDto.getAreaCode()!= null,"area_code",buildingDto.getAreaCode()); wrapper.eq("app_id","wx118de8a734d269f0"); List comStreetDOS = comStreetDAO.selectList(wrapper); // ArrayList collect = comStreetDOS.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>( // Comparator.comparing(ComStreetDO::getAreaCode))), ArrayList::new)); List list = comStreetDOS.stream().map(v -> { StreetVO vo = new StreetVO(); vo.setStreetId(String.valueOf(v.getStreetId())); vo.setName(v.getName()); return vo; }).collect(Collectors.toList()); return R.ok(list); } @Override public R oneTagThreeReal(Long street) { List streetAndBuildVOS = comActDAO.oneTagThreeReal(street); return R.ok(streetAndBuildVOS); } @Override public R getScreenStatics() { ScreenStatics screenStatics = comActDAO.getScreenStatics(); WxDataUtil wxDataUtil=new WxDataUtil(); //微信查询较慢 数据时有 时没有 缓存到 redis 里 //日 活跃 if(null != wxDataUtil.getDayUser()){ stringRedisTemplate.opsForValue().set("WxDataUtil_Day",String.valueOf(wxDataUtil.getDayUser())); screenStatics.setDayUser(wxDataUtil.getDayUser()); }else { Object obj = stringRedisTemplate.opsForValue().get("WxDataUtil_Day"); screenStatics.setDayUser(Integer.valueOf((String)obj)); } //月 活跃 if(null != wxDataUtil.getMonthUser()){ stringRedisTemplate.opsForValue().set("WxDataUtil_Month",String.valueOf(wxDataUtil.getMonthUser())); screenStatics.setCountUser(wxDataUtil.getMonthUser()); }else { Object obj = stringRedisTemplate.opsForValue().get("WxDataUtil_Month"); screenStatics.setCountUser(Integer.valueOf((String)obj)); } return R.ok(screenStatics); } @Override public R populationStatics(Long streetId) { StreetAndBuildVO vo = new StreetAndBuildVO(); List list = comActDAO.oneTagThreeReal(streetId); if(list != null){ for (StreetAndBuildVO basics : list) { vo.setPeopleNum(vo.getPeopleNum() + basics.getPeopleNum()); vo.setVillageNum(vo.getVillageNum() + basics.getVillageNum()); vo.setBuildNum(vo.getBuildNum() + basics.getBuildNum()); } } EventPopulationSpecialStatisticsVO populationSpecial = comActDAO.getPopulationSpecial(streetId); if(populationSpecial != null){ populationSpecial.setOtherTotal(populationSpecial.getZjTotal() + populationSpecial.getSfTotal() + populationSpecial.getXsTotal() + populationSpecial.getXjTotal() + populationSpecial.getJzTotal() + populationSpecial.getXdTotal()); populationSpecial.setLnTotal(comActDAO.getPopulationAge(streetId,60)); populationSpecial.setGlTotal(comActDAO.getPopulationAge(streetId,80)); vo.setSpecialStatisticsVo(populationSpecial); } vo.setSpecialStatisticsVo(populationSpecial); return R.ok(vo); } @Override public R probably(Integer year,String belongTo) { ActivityAnalysisVO activityVO=new ActivityAnalysisVO(); // String beginTime=null; // String endTime=null; // if (null != year){ // //设置开始,截止时间 // beginTime=year.toString().concat("-01-01"); // endTime=year.toString().concat("-12-31"); // } activityVO.setUnitCount(comActDAO.arriveUnit(belongTo)); R r = communityService.institutionalUnitServiceAnalysis(year, null, null, null, null, null, belongTo, null, null,null); Object data = r.getData(); String jsonString = JSON.toJSONString(data); ActivityAnalysisVO activityAnalysisVO = JSON.parseObject(jsonString, ActivityAnalysisVO.class); activityVO.setUnitServiceTotalTime(activityAnalysisVO.getUnitServiceTotalTime()); return R.ok(activityVO); } @Override public SumAreaStreetResp sumAreaStreet() { SumAreaStreetResp resp = comActDAO.sumAreaStreet(); return resp; } @Override public AreaStreetDetail areaStreetDetail(String code, String type) { //根据层级 查询 社区id LambdaQueryWrapper qry = new LambdaQueryWrapper<>(); if(type.equals("1")){// 1 查询 大区 qry.eq( !StringUtils.isEmpty(code),ComActDO::getAreaCode,code); } if(type.equals("2")){// 2 查询 街道 qry.eq( !StringUtils.isEmpty(code),ComActDO::getStreetId,code); } if(type.equals("3")){// 3 查询 小区 qry.eq( !StringUtils.isEmpty(code),ComActDO::getCommunityId,code); } // qry.eq(ComActDO::getAppId,"wx118de8a734d269f0"); List doList = comActDAO.selectList(qry); //解析 社区id List ids = doList.stream().map(ComActDO::getCommunityId).collect(Collectors.toList()); AreaStreetDetail result = new AreaStreetDetail(); if(CollectionUtil.isNotEmpty(ids)){ //查询 街道相关信息 AreaStreetDetailResp village = comActDAO.selectVillage(ids,type); result.setAreaStreetDetailResp(village); //查询 人口相关数据 EventPopulationSpecialStatisticsVO eventResult = comActDAO.selectEvent(ids); result.setEventPopulationVO(eventResult); } return result; } @Override public List qryReport(String yearTime) { List result = comActDAO.qryReport(yearTime); return result; } }