| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229 |
- package com.ydtech.modules.admin.service.impl;
- import cn.hutool.core.collection.CollectionUtil;
- import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
- import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
- import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
- import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
- import com.ydtech.modules.admin.dao.SysDeptMapper;
- import com.ydtech.modules.admin.dao.SysPcAddressHistoryMapper;
- import com.ydtech.modules.admin.dao.SysPcAddressMapper;
- import com.ydtech.modules.admin.model.SysDept;
- import com.ydtech.modules.admin.model.SysUser;
- import com.ydtech.modules.admin.model.dto.*;
- import com.ydtech.modules.admin.model.po.SysPcAddressHistory;
- import com.ydtech.modules.admin.model.po.SysPcAddress;
- import com.ydtech.modules.admin.model.vo.PcAddressHistoryInfoVo;
- import com.ydtech.modules.admin.model.vo.PcAddressHistoryTimeVo;
- import com.ydtech.modules.admin.model.vo.RegionInfoVo;
- import com.ydtech.modules.admin.service.GeoService;
- import com.ydtech.modules.admin.service.SysPcAddressHistoryService;
- import com.ydtech.modules.admin.service.SysPcAddressService;
- import com.ydtech.modules.admin.service.SysUserService;
- import com.ydtech.modules.order.entity.BasePageResult;
- import com.ydtech.utils.StringUtils;
- import lombok.RequiredArgsConstructor;
- import org.springframework.beans.BeanUtils;
- import org.springframework.stereotype.Service;
- import org.springframework.transaction.annotation.Transactional;
- import javax.annotation.Resource;
- import java.text.SimpleDateFormat;
- import java.util.*;
- import java.util.stream.Collectors;
- /**
- * @author Administrator
- * @description 针对表【sys_pc_address(pc获取ip地址)】的数据库操作Service实现
- * @createDate 2024-09-02 09:40:08
- */
- @Service
- @RequiredArgsConstructor
- public class SysPcAddressServiceImpl extends ServiceImpl<SysPcAddressMapper, SysPcAddress> implements SysPcAddressService {
- private final SysPcAddressHistoryService sysPcAddressHistoryService;
- private final SysPcAddressMapper sysPcAddressMapper;
- private final SysPcAddressHistoryMapper sysPcAddressHistoryMapper;
- private final GeoService geoService;
- private final SysUserService sysUserService;
- private static final String PC_GEO_KEY = "PCLocations";
- @Resource
- private SysDeptMapper sysDeptMapper;
- @Override
- @Transactional(rollbackFor = Exception.class)
- public void saveSysPcAddress(IpInfoDto ipInfoDto, SysUser user) {
- SysPcAddress sysPcAddress = getById(user.getId());
- if (sysPcAddress == null) {
- sysPcAddress = new SysPcAddress();
- }
- SysDept sysDept = sysDeptMapper.selectOne(new LambdaQueryWrapper<SysDept>()
- .eq(SysDept::getId, user.getDeptId()).eq(SysDept::getDelFlag, 0));
- sysPcAddress.setUserId(user.getId());
- sysPcAddress.setUserName(user.getName());
- sysPcAddress.setIp(ipInfoDto.getIp());
- sysPcAddress.setLatitude(ipInfoDto.getLat());
- sysPcAddress.setLongitude(ipInfoDto.getLng());
- sysPcAddress.setProvince(ipInfoDto.getProv());
- sysPcAddress.setCity(ipInfoDto.getCity());
- sysPcAddress.setDistrict(ipInfoDto.getDistrict());
- sysPcAddress.setSource(sysDept.getManagementSource());
- sysPcAddress.setAddress(ipInfoDto.getProv() + ipInfoDto.getCity() + ipInfoDto.getDistrict());
- sysPcAddress.setOperationTime(new Date());
- sysPcAddress.setLeaderName(user.getLeaderName());
- SysPcAddressHistory sysPcAddressHistory = new SysPcAddressHistory();
- BeanUtils.copyProperties(sysPcAddress, sysPcAddressHistory);
- this.saveOrUpdate(sysPcAddress);
- sysPcAddressHistoryService.save(sysPcAddressHistory);
- }
- @Override
- public List<SysPcAddress> getEveryone(SysPcAddressDto sysPcAddressDto) {
- List<SysPcAddress> sysPcAddresses = sysPcAddressMapper.selectList(new LambdaQueryWrapper<SysPcAddress>()
- .eq(StringUtils.isNotEmpty(sysPcAddressDto.getProvince()), SysPcAddress::getProvince, sysPcAddressDto.getProvince())
- .eq(StringUtils.isNotEmpty(sysPcAddressDto.getCity()), SysPcAddress::getCity, sysPcAddressDto.getCity())
- .eq(StringUtils.isNotEmpty(sysPcAddressDto.getDistrict()), SysPcAddress::getDistrict, sysPcAddressDto.getDistrict())
- .in(SysPcAddress::getSource, Arrays.asList("1", "2"))
- .eq(StringUtils.isNotEmpty(sysPcAddressDto.getSource()), SysPcAddress::getSource, sysPcAddressDto.getSource())
- .orderByDesc(SysPcAddress::getOperationTime));
- return sysPcAddresses;
- }
- @Override
- public List<SysPcAddress> findLocationsWithinRadius(AdressRangeDto adressRangeDto) {
- geoService.addLocations(list(), PC_GEO_KEY);
- List<String> nearbyIds = geoService.findNearbyIds(PC_GEO_KEY, adressRangeDto.getLongitude(), adressRangeDto.getLatitude(), adressRangeDto.getRadius());
- if (nearbyIds.size() == 0) return new ArrayList<>();
- geoService.move(nearbyIds, PC_GEO_KEY);
- return listByIds(nearbyIds);
- }
- @Override
- public SysPcAddressNumVo queryPcNum(SysPcAddressDto sysPcAddressDto) {
- SysPcAddressNumVo sysPcAddressNumVo = new SysPcAddressNumVo();
- //区域数量统计
- Long all = sysPcAddressMapper.selectCount(new LambdaQueryWrapper<SysPcAddress>()
- .eq(StringUtils.isNotEmpty(sysPcAddressDto.getProvince()), SysPcAddress::getProvince, sysPcAddressDto.getProvince())
- .eq(StringUtils.isNotEmpty(sysPcAddressDto.getCity()), SysPcAddress::getCity, sysPcAddressDto.getCity())
- .eq(StringUtils.isNotEmpty(sysPcAddressDto.getDistrict()), SysPcAddress::getDistrict, sysPcAddressDto.getDistrict())
- .in(SysPcAddress::getSource, Arrays.asList("1", "2")));
- Long channelNum = sysPcAddressMapper.selectCount(new LambdaQueryWrapper<SysPcAddress>()
- .eq(StringUtils.isNotEmpty(sysPcAddressDto.getProvince()), SysPcAddress::getProvince, sysPcAddressDto.getProvince())
- .eq(StringUtils.isNotEmpty(sysPcAddressDto.getCity()), SysPcAddress::getCity, sysPcAddressDto.getCity())
- .eq(StringUtils.isNotEmpty(sysPcAddressDto.getDistrict()), SysPcAddress::getDistrict, sysPcAddressDto.getDistrict())
- .eq(SysPcAddress::getSource, 1));
- Long proxyNum = sysPcAddressMapper.selectCount(new LambdaQueryWrapper<SysPcAddress>()
- .eq(StringUtils.isNotEmpty(sysPcAddressDto.getProvince()), SysPcAddress::getProvince, sysPcAddressDto.getProvince())
- .eq(StringUtils.isNotEmpty(sysPcAddressDto.getCity()), SysPcAddress::getCity, sysPcAddressDto.getCity())
- .eq(StringUtils.isNotEmpty(sysPcAddressDto.getDistrict()), SysPcAddress::getDistrict, sysPcAddressDto.getDistrict())
- .eq(SysPcAddress::getSource, 2));
- Long onlineNum = sysPcAddressMapper.selectCount(new LambdaQueryWrapper<SysPcAddress>()
- .eq(StringUtils.isNotEmpty(sysPcAddressDto.getProvince()), SysPcAddress::getProvince, sysPcAddressDto.getProvince())
- .eq(StringUtils.isNotEmpty(sysPcAddressDto.getCity()), SysPcAddress::getCity, sysPcAddressDto.getCity())
- .eq(StringUtils.isNotEmpty(sysPcAddressDto.getDistrict()), SysPcAddress::getDistrict, sysPcAddressDto.getDistrict())
- .in(SysPcAddress::getSource, Arrays.asList("1", "2")).eq(SysPcAddress::getStatus, 1));
- sysPcAddressNumVo.setAllNum(all);
- sysPcAddressNumVo.setProxyNum(proxyNum);
- sysPcAddressNumVo.setChannelNum(channelNum);
- sysPcAddressNumVo.setOnlineNum(onlineNum);
- return sysPcAddressNumVo;
- }
- @Override
- public List<RegionInfoVo> queryRegionInfo(SysPcAddressDto sysPcAddressDto) {
- List<RegionInfoVo> regionInfoVos = new ArrayList<>();
- //全部:null 渠道:1 代理:2
- List<SysPcAddress> sysPcAddresses = sysPcAddressMapper.selectList(new LambdaQueryWrapper<SysPcAddress>()
- .eq(StringUtils.isNotEmpty(sysPcAddressDto.getProvince()), SysPcAddress::getProvince, sysPcAddressDto.getProvince())
- .eq(StringUtils.isNotEmpty(sysPcAddressDto.getCity()), SysPcAddress::getCity, sysPcAddressDto.getCity())
- .eq(StringUtils.isNotEmpty(sysPcAddressDto.getDistrict()), SysPcAddress::getDistrict, sysPcAddressDto.getDistrict())
- .in(SysPcAddress::getSource, Arrays.asList("1", "2"))
- .eq(StringUtils.isNotEmpty(sysPcAddressDto.getSource()), SysPcAddress::getSource, sysPcAddressDto.getSource()));
- if (CollectionUtil.isEmpty(sysPcAddresses)) return regionInfoVos;
- Map<String, List<SysPcAddress>> map;
- if (CollectionUtil.isEmpty(sysPcAddresses)) return regionInfoVos;
- if (StringUtils.isEmpty(sysPcAddressDto.getProvince())) {
- map = sysPcAddresses.stream().collect(Collectors.groupingBy(SysPcAddress::getProvince));
- } else {
- if (StringUtils.isNotEmpty(sysPcAddressDto.getCity())) {
- map = sysPcAddresses.stream().collect(Collectors.groupingBy(SysPcAddress::getDistrict));
- } else {
- map = sysPcAddresses.stream().collect(Collectors.groupingBy(SysPcAddress::getCity));
- }
- }
- for (Map.Entry<String, List<SysPcAddress>> entry : map.entrySet()) {
- RegionInfoVo regionInfoVo = new RegionInfoVo();
- regionInfoVo.setDistrictName(entry.getKey());
- regionInfoVo.setNumber(entry.getValue().size());
- regionInfoVos.add(regionInfoVo);
- }
- return regionInfoVos;
- }
- @Override
- public BasePageResult<SysPcAddress> queryPcAddressInfo(PcAddressInfoDto addressInfoDto) {
- Page<SysPcAddress> page = new Page<>(addressInfoDto.getPageNum(), addressInfoDto.getPageSize());
- LambdaQueryWrapper<SysPcAddress> wrapper = new LambdaQueryWrapper<>();
- wrapper.eq(StringUtils.isNotEmpty(addressInfoDto.getLng()), SysPcAddress::getLongitude, addressInfoDto.getLng());
- wrapper.eq(StringUtils.isNotEmpty(addressInfoDto.getLat()), SysPcAddress::getLatitude, addressInfoDto.getLat());
- wrapper.in(SysPcAddress::getSource, Arrays.asList("1", "2"));
- wrapper.eq(StringUtils.isNotEmpty(addressInfoDto.getSource()), SysPcAddress::getSource, addressInfoDto.getSource());
- wrapper.orderByDesc(SysPcAddress::getOperationTime);
- Page<SysPcAddress> insOrdersPage = page(page, wrapper);
- return new BasePageResult<>(addressInfoDto.getPageNum(), page.getSize(), insOrdersPage.getTotal(), page.getPages(),
- insOrdersPage.getRecords());
- }
- @Override
- public PcAddressHistoryInfoVo getPcAddress(String dates) {
- PcAddressHistoryInfoVo pcAddressHistoryInfoVo = new PcAddressHistoryInfoVo();
- QueryWrapper<SysPcAddressHistory> queryWrapper = new QueryWrapper<>();
- // 指定 COUNT(DISTINCT user_id) 查询
- queryWrapper.select("COUNT(DISTINCT user_id) AS total").likeRight(StringUtils.isNotEmpty(dates), "operation_time", dates)
- .in("source", Arrays.asList(1, 2));
- Map<String, Object> result = sysPcAddressHistoryService.getMap(queryWrapper);
- Long total = (Long) result.get("total");
- pcAddressHistoryInfoVo.setOnlineNum(total);
- if (StringUtils.isNullOrEmpty(dates)) {
- Date date = new Date();
- SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
- dates = simpleDateFormat.format(date);
- }
- List<PcAddressHistoryTimeVo> pcAddress = sysPcAddressHistoryMapper.getPcAddress(dates);
- pcAddressHistoryInfoVo.setList(pcAddress);
- return pcAddressHistoryInfoVo;
- }
- }
|