| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786 |
- package com.ydtech.modules.admin.service.impl;
- import cn.hutool.core.bean.BeanUtil;
- 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.core.metadata.IPage;
- import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
- import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
- import com.ydtech.modules.admin.dao.*;
- 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.*;
- import com.ydtech.modules.admin.service.*;
- import com.ydtech.modules.base.controller.BaseController;
- import com.ydtech.modules.order.entity.BasePageResult;
- import com.ydtech.utils.StringUtils;
- import lombok.RequiredArgsConstructor;
- import org.springframework.beans.BeanUtils;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import org.springframework.transaction.annotation.Transactional;
- import javax.annotation.Resource;
- import java.text.ParseException;
- 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;
- @Resource
- private SysDeptService sysDeptService;
- @Resource
- private SysUserMapper sysUserMapper;
- @Autowired
- private SysUserDeptRelationshipMapper sysUserDeptRelationshipMapper;
- @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 = null;
- List<String> arrayList = new ArrayList<>();
- List<String> collectIds = new ArrayList<>();
- //admin看所有
- if (!"admin".equals(BaseController.getUserId())) {
- List<SysUser> sysUsers = sysUserMapper.selectList(new LambdaQueryWrapper<SysUser>()
- .eq(SysUser::getLeaderId, BaseController.getUserId()).ne(SysUser::getStatus, 0));
- collectIds = sysUsers.stream().map(SysUser::getId).collect(Collectors.toList());
- if (collectIds.size() > 0) {
- List<String> idList = queryList(collectIds, arrayList);
- collectIds.addAll(idList);
- }
- }
- // 类型:1。机构 2.用户
- if (sysPcAddressDto.getType() == 1) {
- 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"))
- .in(CollectionUtil.isNotEmpty(collectIds), SysPcAddress::getUserId, collectIds)
- .likeRight(StringUtils.isNotEmpty(sysPcAddressDto.getQueryId()), SysPcAddress::getUserId, sysPcAddressDto.getQueryId())
- .eq(StringUtils.isNotEmpty(sysPcAddressDto.getSource()), SysPcAddress::getSource, sysPcAddressDto.getSource())
- .eq(sysPcAddressDto.getStatus() != null, SysPcAddress::getStatus, sysPcAddressDto.getStatus())
- .orderByDesc(SysPcAddress::getOperationTime));
- } else if (sysPcAddressDto.getType() == 2) {
- List<String> ids = new ArrayList<>();
- List<SysUser> sysUsers = sysUserMapper.selectList(new LambdaQueryWrapper<SysUser>()
- .eq(SysUser::getLeaderId, sysPcAddressDto.getQueryId()).ne(SysUser::getStatus, 0));
- List<String> collect = sysUsers.stream().map(SysUser::getId).collect(Collectors.toList());
- if (collect.size() == 0) {
- return sysPcAddresses;
- }
- List<String> idList = queryList(collect, ids);
- collect.addAll(idList);
- 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"))
- .in(CollectionUtil.isNotEmpty(collectIds), SysPcAddress::getUserId, collectIds)
- .in(CollectionUtil.isNotEmpty(collect), SysPcAddress::getUserId, collect)
- .eq(StringUtils.isNotEmpty(sysPcAddressDto.getSource()), SysPcAddress::getSource, sysPcAddressDto.getSource())
- .eq(sysPcAddressDto.getStatus() != null, SysPcAddress::getStatus, sysPcAddressDto.getStatus())
- .orderByDesc(SysPcAddress::getOperationTime));
- } else {
- 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"))
- .in(CollectionUtil.isNotEmpty(collectIds), SysPcAddress::getUserId, collectIds)
- .eq(StringUtils.isNotEmpty(sysPcAddressDto.getSource()), SysPcAddress::getSource, sysPcAddressDto.getSource())
- .eq(sysPcAddressDto.getStatus() != null, SysPcAddress::getStatus, sysPcAddressDto.getStatus())
- .orderByDesc(SysPcAddress::getOperationTime));
- }
- for (SysPcAddress sysPcAddress : sysPcAddresses) {
- SysUser sysUser = sysUserService.getById(sysPcAddress.getUserId());
- if (sysUser == null) continue;
- sysPcAddress.setLeaderName(sysUser.getLeaderName());
- }
- return sysPcAddresses;
- }
- private List<String> queryList(List<String> collect, List<String> ids) {
- int size = collect.size();
- if (size > 0) {
- List<String> strings = new ArrayList<>();
- for (String id : collect) {
- List<SysUser> sysUsers = sysUserMapper.selectList(new LambdaQueryWrapper<SysUser>()
- .eq(SysUser::getLeaderId, id).ne(SysUser::getStatus, 0));
- // List<SysUser> sysUsers = sysUserMapper.querySourceId(id);
- if (sysUsers.size() > 0) {
- List<String> list = sysUsers.stream().map(SysUser::getId).collect(Collectors.toList());
- strings.addAll(list);
- ids.addAll(list);
- if (collect.indexOf(id) + 1 == size) {
- queryList(strings, ids);
- }
- }
- }
- }
- return ids;
- }
- @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();
- String userId = BaseController.getUserId();
- List<String> collect = new ArrayList<>();
- //admin看所有人
- if (!"admin".equals(userId)) {
- List<String> ids = new ArrayList<>();
- List<SysUser> sysUsers = sysUserMapper.selectList(new LambdaQueryWrapper<SysUser>()
- .eq(SysUser::getLeaderId, BaseController.getUserId()).ne(SysUser::getStatus, 0));
- collect = sysUsers.stream().map(SysUser::getId).collect(Collectors.toList());
- if (collect.size() == 0) return sysPcAddressNumVo;
- List<String> idList = queryList(collect, ids);
- collect.addAll(idList);
- }
- //区域数量统计
- 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"))
- .in(CollectionUtil.isNotEmpty(collect), SysPcAddress::getUserId, collect)
- .eq(sysPcAddressDto.getStatus() != null, SysPcAddress::getStatus, sysPcAddressDto.getStatus()));
- 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)
- .in(CollectionUtil.isNotEmpty(collect), SysPcAddress::getUserId, collect)
- .eq(sysPcAddressDto.getStatus() != null, SysPcAddress::getStatus, sysPcAddressDto.getStatus()));
- 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())
- .in(CollectionUtil.isNotEmpty(collect), SysPcAddress::getUserId, collect)
- .eq(StringUtils.isNotEmpty(sysPcAddressDto.getDistrict()), SysPcAddress::getDistrict, sysPcAddressDto.getDistrict())
- .eq(SysPcAddress::getSource, 2)
- .eq(sysPcAddressDto.getStatus() != null, SysPcAddress::getStatus, sysPcAddressDto.getStatus()));
- 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"))
- .in(CollectionUtil.isNotEmpty(collect), SysPcAddress::getUserId, collect)
- .eq(sysPcAddressDto.getStatus() == null, SysPcAddress::getStatus, 1)
- .eq(sysPcAddressDto.getStatus() != null, SysPcAddress::getStatus, sysPcAddressDto.getStatus()));
- 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<>();
- //admin 看所有,其他人看自己下属的人员信息
- String userId = BaseController.getUserId();
- List<String> collect = new ArrayList<>();
- if (!"admin".equals(userId)) {
- //admin看所有人
- List<String> ids = new ArrayList<>();
- List<SysUser> sysUsers = sysUserMapper.selectList(new LambdaQueryWrapper<SysUser>()
- .eq(SysUser::getLeaderId, BaseController.getUserId()).ne(SysUser::getStatus, 0));
- collect = sysUsers.stream().map(SysUser::getId).collect(Collectors.toList());
- if (collect.size() == 0) return regionInfoVos;
- List<String> idList = queryList(collect, ids);
- collect.addAll(idList);
- }
- //全部: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"))
- .in(CollectionUtil.isNotEmpty(collect), SysPcAddress::getUserId, collect)
- .eq(StringUtils.isNotEmpty(sysPcAddressDto.getSource()), SysPcAddress::getSource, sysPcAddressDto.getSource())
- .eq(sysPcAddressDto.getStatus() != null, SysPcAddress::getStatus, sysPcAddressDto.getStatus()));
- 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());
- List<String> arrayList = new ArrayList<>();
- List<String> collectIds = new ArrayList<>();
- //admin看所有
- if (!"admin".equals(BaseController.getUserId())) {
- List<SysUser> sysUsers = sysUserMapper.selectList(new LambdaQueryWrapper<SysUser>()
- .eq(SysUser::getLeaderId, BaseController.getUserId()).ne(SysUser::getStatus, 0));
- collectIds = sysUsers.stream().map(SysUser::getId).collect(Collectors.toList());
- if (collectIds.size() > 0) {
- List<String> idList = queryList(collectIds, arrayList);
- collectIds.addAll(idList);
- }
- }
- Page<SysPcAddress> insOrdersPage = null;
- // 类型:1。机构 2.用户
- if (addressInfoDto.getType() == 1) {
- 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.in(CollectionUtil.isNotEmpty(collectIds), SysPcAddress::getUserId, collectIds);
- wrapper.likeRight(StringUtils.isNotEmpty(addressInfoDto.getQueryId()), SysPcAddress::getUserId, addressInfoDto.getQueryId());
- wrapper.eq(addressInfoDto.getStatus() != null, SysPcAddress::getStatus, addressInfoDto.getStatus());
- wrapper.orderByDesc(SysPcAddress::getOperationTime);
- insOrdersPage = page(page, wrapper);
- } else if (addressInfoDto.getType() == 2) {
- List<String> ids = new ArrayList<>();
- List<SysUser> sysUsers = sysUserMapper.selectList(new LambdaQueryWrapper<SysUser>()
- .eq(SysUser::getLeaderId, addressInfoDto.getQueryId()).ne(SysUser::getStatus, 0));
- List<String> collect = sysUsers.stream().map(SysUser::getId).collect(Collectors.toList());
- if (collect.size() == 0)
- return new BasePageResult<>(addressInfoDto.getPageNum(), page.getSize(), insOrdersPage.getTotal(), page.getPages(),
- insOrdersPage.getRecords());
- List<String> idList = queryList(collect, ids);
- collect.addAll(idList);
- 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.in(CollectionUtil.isNotEmpty(collectIds), SysPcAddress::getUserId, collectIds);
- wrapper.in(CollectionUtil.isNotEmpty(collect), SysPcAddress::getUserId, collect);
- wrapper.eq(StringUtils.isNotEmpty(addressInfoDto.getSource()), SysPcAddress::getSource, addressInfoDto.getSource());
- wrapper.eq(addressInfoDto.getStatus() != null, SysPcAddress::getStatus, addressInfoDto.getStatus());
- wrapper.orderByDesc(SysPcAddress::getOperationTime);
- insOrdersPage = page(page, wrapper);
- } else {
- 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.in(CollectionUtil.isNotEmpty(collectIds), SysPcAddress::getUserId, collectIds);
- wrapper.eq(StringUtils.isNotEmpty(addressInfoDto.getSource()), SysPcAddress::getSource, addressInfoDto.getSource());
- wrapper.eq(addressInfoDto.getStatus() != null, SysPcAddress::getStatus, addressInfoDto.getStatus());
- wrapper.orderByDesc(SysPcAddress::getOperationTime);
- insOrdersPage = page(page, wrapper);
- }
- return new BasePageResult<>(addressInfoDto.getPageNum(), page.getSize(), insOrdersPage.getTotal(), page.getPages(),
- insOrdersPage.getRecords());
- }
- @Override
- public PcAddressHistoryInfoVo getPcAddress(String startTime, String endTime, String source) {
- PcAddressHistoryInfoVo pcAddressHistoryInfoVo = new PcAddressHistoryInfoVo();
- //admin 看所有,其他人看自己下属的人员信息
- String userId = BaseController.getUserId();
- List<String> collect = new ArrayList<>();
- if (!"admin".equals(userId)) {
- //admin看所有人
- List<String> ids = new ArrayList<>();
- List<SysUser> sysUsers = sysUserMapper.selectList(new LambdaQueryWrapper<SysUser>()
- .eq(SysUser::getLeaderId, BaseController.getUserId()).ne(SysUser::getStatus, 0));
- collect = sysUsers.stream().map(SysUser::getId).collect(Collectors.toList());
- List<String> idList = queryList(collect, ids);
- collect.addAll(idList);
- }
- if (StringUtils.isEmpty(startTime) || startTime.equals(endTime)) {
- if (StringUtils.isNullOrEmpty(startTime)) {
- Date date = new Date();
- SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
- startTime = simpleDateFormat.format(date);
- }
- QueryWrapper<SysPcAddressHistory> queryWrapper = new QueryWrapper<>();
- // 指定 COUNT(DISTINCT user_id) 查询
- queryWrapper.select("COUNT(DISTINCT user_id) AS total")
- .likeRight(StringUtils.isNotEmpty(startTime), "operation_time", startTime)
- .in("source", Arrays.asList(1, 2))
- .in(CollectionUtil.isNotEmpty(collect), "user_id", collect)
- .eq(StringUtils.isNotEmpty(source), "source", source);
- Map<String, Object> result = sysPcAddressHistoryService.getMap(queryWrapper);
- Long total = (Long) result.get("total");
- pcAddressHistoryInfoVo.setOnlineNum(total);
- List<PcAddressHistoryTimeVo> pcAddress = sysPcAddressHistoryMapper.getPcAddress(startTime, source, collect);
- pcAddressHistoryInfoVo.setList(pcAddress);
- List<SysPcAddressHistory> sysPcAddressHistories = sysPcAddressHistoryMapper.getPcAddressInfo(startTime, source, collect);
- extracted(sysPcAddressHistories);
- System.out.println("********************" + sysPcAddressHistories.size());
- pcAddressHistoryInfoVo.setPcAddressList(sysPcAddressHistories);
- } else {
- SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- startTime = startTime + " 00:00:01";
- endTime = endTime + " 23:59:59";
- try {
- Date parse = simpleDateFormat.parse(startTime);
- Date parse1 = simpleDateFormat.parse(endTime);
- startTime = simpleDateFormat.format(parse);
- endTime = simpleDateFormat.format(parse1);
- } catch (ParseException e) {
- throw new RuntimeException(e);
- }
- QueryWrapper<SysPcAddressHistory> queryWrapper = new QueryWrapper<>();
- // 指定 COUNT(DISTINCT user_id) 查询
- queryWrapper.select("COUNT(DISTINCT user_id) AS total").between("operation_time", startTime, endTime)
- .in("source", Arrays.asList(1, 2))
- .eq(StringUtils.isNotEmpty(source), "source", source)
- .in(CollectionUtil.isNotEmpty(collect), "user_id", collect);
- Map<String, Object> result = sysPcAddressHistoryService.getMap(queryWrapper);
- Long total = (Long) result.get("total");
- pcAddressHistoryInfoVo.setOnlineNum(total);
- List<PcAddressHistoryTimeVo> pcAddress = sysPcAddressHistoryMapper.getPcAddressSection(startTime, endTime, source, collect);
- pcAddressHistoryInfoVo.setList(pcAddress);
- List<SysPcAddressHistory> sysPcAddressHistories = sysPcAddressHistoryMapper.getPcAddressHistory(startTime, endTime, source, collect);
- extracted(sysPcAddressHistories);
- System.out.println("********************" + sysPcAddressHistories.size());
- pcAddressHistoryInfoVo.setPcAddressList(sysPcAddressHistories);
- }
- return pcAddressHistoryInfoVo;
- }
- private void extracted(List<SysPcAddressHistory> sysPcAddressHistories) {
- for (SysPcAddressHistory sysPcAddressHistory : sysPcAddressHistories) {
- SysUser sysUser = sysUserService.getById(sysPcAddressHistory.getUserId());
- if (sysUser == null) continue;
- sysPcAddressHistory.setLeaderName(sysUser.getLeaderName());
- SysDept sysDept = sysDeptMapper.selectById(sysUser.getDeptId());
- if (sysDept == null) continue;
- sysPcAddressHistory.setDeptName(sysDept.getName());
- }
- }
- @Override
- public List<SysPcAddress> getOnlinePeople() {
- return sysPcAddressMapper.selectList(new LambdaQueryWrapper<SysPcAddress>().eq(SysPcAddress::getStatus, 1));
- }
- @Override
- public BasePageResult<SysPcAddressHistory> queryPcAddressHistoryInfo(PcAddressInfoDto addressInfoDto) {
- Page page = new Page(addressInfoDto.getPageNum(), addressInfoDto.getPageSize());
- IPage<SysPcAddressHistory> sysPcAddressHistoryIPage = null;
- //登陆人的下属id
- String userId = BaseController.getUserId();
- List<String> collectIds = new ArrayList<>();
- if (!"admin".equals(userId)) {
- //admin看所有人
- List<String> ids = new ArrayList<>();
- List<SysUser> sysUsers = sysUserMapper.selectList(new LambdaQueryWrapper<SysUser>()
- .eq(SysUser::getLeaderId, BaseController.getUserId()).ne(SysUser::getStatus, 0));
- collectIds = sysUsers.stream().map(SysUser::getId).collect(Collectors.toList());
- if (collectIds.size() == 0)
- return new BasePageResult<>(addressInfoDto.getPageNum(), addressInfoDto.getPageSize(), 0l, 0l, null);
- List<String> idList = queryList(collectIds, ids);
- collectIds.addAll(idList);
- }
- addressInfoDto.setCollectIds(collectIds);
- // 类型:1。机构树 2.用户树 0:默认查询
- Integer type = addressInfoDto.getType();
- if (type == 1) {
- sysPcAddressHistoryIPage = sysPcAddressHistoryMapper.queryAddressHistory(page, addressInfoDto);
- } else if (type == 2) {
- List<String> ids = new ArrayList<>();
- List<SysUser> sysUsers = sysUserMapper.selectList(new LambdaQueryWrapper<SysUser>()
- .eq(SysUser::getLeaderId, addressInfoDto.getQueryId()).ne(SysUser::getStatus, 0));
- List<String> collect = sysUsers.stream().map(SysUser::getId).collect(Collectors.toList());
- if (collect.size() > 0) {
- List<String> idList = queryList(collect, ids);
- collect.addAll(idList);
- }
- addressInfoDto.setQueryId("");
- addressInfoDto.setCollect(collect);
- sysPcAddressHistoryIPage = sysPcAddressHistoryMapper.queryAddressHistory(page, addressInfoDto);
- } else {
- sysPcAddressHistoryIPage = sysPcAddressHistoryMapper.queryAddressHistory(page, addressInfoDto);
- }
- return new BasePageResult<>(addressInfoDto.getPageNum(), addressInfoDto.getPageSize(), sysPcAddressHistoryIPage.getTotal(), sysPcAddressHistoryIPage.getPages(),
- sysPcAddressHistoryIPage.getRecords());
- }
- /**
- * 前线只要机构 后线人员(按照领导人) 机构
- *
- * @return
- */
- @Override
- public KztUserDeptTreeDto getUserDeptTree() {
- KztUserDeptTreeDto kztUserDeptTreeDto = new KztUserDeptTreeDto();
- String userId = BaseController.getUserId();
- List<SysDept> sysDeptList1 = sysDeptMapper.selectList(new LambdaQueryWrapper<SysDept>().eq(SysDept::getLeaderId, userId));
- if (sysDeptList1.size() > 0) {
- //展示机构
- kztUserDeptTreeDto.setType("1");
- } else {
- //展示机构 人员
- kztUserDeptTreeDto.setType("2"); //代理
- }
- SysUser byUserId = sysUserMapper.getByUserId(userId);
- List<SysDeptTreeVo> resultDeptList = this.getFiveLevelDeptKzt(byUserId);
- kztUserDeptTreeDto.setDeptList(resultDeptList);
- if (!userId.contains("M")) {
- if (sysDeptList1.size() == 0) {
- List<SysUser> resultList = this.getUserTreeHx(byUserId);
- kztUserDeptTreeDto.setUserList(resultList);
- }
- }
- return kztUserDeptTreeDto;
- }
- private List<SysDeptTreeVo> getFiveLevelDeptKzt(SysUser byUserId) {
- SysDept sysDept = sysDeptService.getById("9");
- SysDept dept = sysDeptMapper.selectById(BaseController.getDeptId());
- SysDept sysDept1 = new SysDept();
- SysDeptVo sysDeptVo = new SysDeptVo();
- String id = byUserId.getId();
- List<String> deptIds = new ArrayList<>();
- //admin看全部
- if ("admin".equals(byUserId.getId())) {
- List<SysDept> sysDeptList = sysDeptMapper.queryFiveLevelDept(sysDeptVo);
- deptIds.addAll(sysDeptList.stream().map(SysDept::getId).collect(Collectors.toList()));
- } else {
- //后线员工判断:是否为机构负责人,是:看所属机构下的 ;否:看所有的
- List<SysDept> sysDeptList1 = sysDeptMapper.selectList(new LambdaQueryWrapper<SysDept>().eq(SysDept::getLeaderId, id));
- if (sysDeptList1.size() > 0) {
- if (sysDeptList1.size() == 1) {
- SysDept sysDept2 = sysDeptList1.get(0);
- BeanUtil.copyProperties(sysDept2, sysDept1);
- deptIds = getDeptIds(sysDept2.getId(), deptIds, deptIds);
- } else {
- Optional<SysDept> max = sysDeptList1.stream().min((o1, o2) -> o1.getComlevel().compareTo(o2.getComlevel()));
- SysDept sysDept2 = max.get();
- BeanUtil.copyProperties(sysDept2, sysDept1);
- deptIds = getDeptIds(sysDept2.getId(), deptIds, deptIds);
- }
- } else {
- List<SysDept> sysDeptList = sysDeptMapper.queryFiveLevelDept(sysDeptVo);
- deptIds.addAll(sysDeptList.stream().map(SysDept::getId).collect(Collectors.toList()));
- }
- }
- sysDeptVo.setDeptIds(deptIds);
- List<SysDept> sysDeptList = sysDeptMapper.queryFiveLevelDept(sysDeptVo);
- if ("admin".equals(byUserId.getId())) {
- sysDept.setComlevel("1");
- sysDeptList.add(sysDept);
- }
- List<SysDeptTreeVo> sysDeptTreeVos = BeanUtil.copyToList(sysDeptList, SysDeptTreeVo.class);
- Map<String, List<SysDeptTreeVo>> map = sysDeptTreeVos.stream().sorted(Comparator.comparing(SysDeptTreeVo::getId))
- .collect(Collectors.groupingBy(SysDeptTreeVo::getParentId));
- sysDeptTreeVos.forEach(i -> {
- if (Integer.parseInt(i.getComlevel()) <= 5) {
- i.setChildren(map.getOrDefault(i.getId(), new ArrayList<>()));
- i.setDeptCount(i.getChildren().size());
- }
- });
- if ("admin".equals(byUserId.getId())) {
- return map.get(BaseController.getDeptId());
- }
- List<SysDept> sysDeptList1 = sysDeptMapper.selectList(new LambdaQueryWrapper<SysDept>().eq(SysDept::getLeaderId, id));
- if (sysDeptList1.size() == 0) {
- return map.get(sysDept.getId());
- }
- String parentId = sysDept1.getParentId();
- if (parentId.equals("0")) {
- sysDept1.setParentId(sysDept1.getId());
- }
- return map.get(sysDept1.getParentId());
- }
- private List<String> getDeptIds(String deptId, List<String> ids, List<String> deptIds) {
- if (ids.size() > 0) {
- List<String> list = new ArrayList<>();
- for (String id : ids) {
- List<SysDept> sysDeptList = sysDeptMapper.selectList(new LambdaQueryWrapper<SysDept>().eq(SysDept::getParentId, id).isNotNull(SysDept::getComlevel));
- if (sysDeptList.size() > 0) {
- List<String> collect = sysDeptList.stream().map(SysDept::getId).collect(Collectors.toList());
- deptIds.addAll(sysDeptList.stream().map(SysDept::getId).collect(Collectors.toList()));
- list.addAll(collect);
- }
- }
- if (list.size() == 0) {
- return deptIds;
- } else {
- getDeptIds(deptId, list, deptIds);
- }
- } else {
- List<SysDept> sysDeptList = sysDeptMapper.selectList(new LambdaQueryWrapper<SysDept>().eq(SysDept::getParentId, deptId).isNotNull(SysDept::getComlevel));
- if (sysDeptList.size() > 0) {
- List<String> collect = sysDeptList.stream().map(SysDept::getId).collect(Collectors.toList());
- deptIds.add(deptId);
- deptIds.addAll(collect);
- getDeptIds(deptId, collect, deptIds);
- }
- }
- return deptIds;
- }
- private List<SysUser> getUserTreeHx(SysUser sysUser) {
- //获取领导字段不为空的人的ID
- QueryWrapper<SysUser> queryWrapper = new QueryWrapper<>();
- queryWrapper.isNotNull("leader_id");
- List<SysUser> userList = null;
- List<SysUser> users = sysUserMapper.selectList(queryWrapper);
- if (users.size() > 0) {
- //排除前线员工
- userList = users.stream().filter(SysUser -> !SysUser.getId().contains("M")).collect(Collectors.toList());
- //填充所属机构名称
- for (SysUser user : userList) {
- String deptName = getDeptName(user.getDeptId());
- user.setDeptName(deptName);
- }
- }
- if (users == null || users.size() == 0) {
- return new ArrayList<>();
- }
- List<SysUser> topUsers = new ArrayList<>(); //存放1级用户,即没有直接上级的用户
- // 根据组织结构展示级别,筛选顶层节点并构建组织结构树
- if ("admin".equals(sysUser.getName())) {
- topUsers.add(sysUserMapper.selectById("99D1501"));
- } else {
- topUsers.add(sysUser);
- }
- // 递归构建用户树结构
- buildUserTree(topUsers, userList);
- //登陆人员无下属不展示
- // SysUser sysUser1 = topUsers.get(0);
- // if (sysUser1.getChildren().size() == 0) {
- // return new ArrayList<>();
- // }
- return topUsers;
- }
- private void buildUserTree(List<SysUser> topUsers, List<SysUser> users) {
- for (SysUser user : topUsers) {
- List<SysUser> children = new ArrayList<>();
- for (SysUser childUser : users) {
- if (user.getId().equals(childUser.getLeaderId())) {
- children.add(childUser);
- // 递归查找下一级
- buildUserTree(children, users);
- }
- }
- user.setChildren(children);
- }
- }
- private String getDeptName(String deptId) {
- StringBuilder stringBuilder = new StringBuilder();
- SysDept sysDept = sysDeptMapper.selectOne(new LambdaQueryWrapper<SysDept>()
- .eq(SysDept::getId, deptId).eq(SysDept::getDelFlag, 0));
- if (StringUtils.isEmpty(sysDept.getComlevel())) {
- SysDept sysDept5 = sysDeptMapper.selectById(sysDept.getParentId());
- if (sysDept5 == null) {
- stringBuilder.append(sysDept.getName());
- } else {
- SysDept sysDept4 = sysDeptMapper.selectById(sysDept5.getParentId());
- if (sysDept4 == null) {
- stringBuilder.append(sysDept5.getName()).append("-").append(sysDept.getName());
- } else {
- SysDept sysDept3 = sysDeptMapper.selectById(sysDept4.getParentId());
- if (sysDept3 == null) {
- stringBuilder.append(sysDept4.getName())
- .append("-").append(sysDept5.getName()).append("-").append(sysDept.getName());
- } else {
- SysDept sysDept2 = sysDeptMapper.selectById(sysDept3.getParentId());
- if (sysDept2 == null) {
- stringBuilder.append(sysDept3.getName()).append("-").append(sysDept4.getName())
- .append("-").append(sysDept5.getName()).append("-").append(sysDept.getName());
- } else {
- stringBuilder.append(sysDept2.getName()).append("-").append(sysDept3.getName())
- .append("-").append(sysDept4.getName()).append("-").append(sysDept5.getName()).append("-").append(sysDept.getName());
- }
- }
- }
- }
- } else if (sysDept.getComlevel().equals("5")) {
- SysDept sysDept4 = sysDeptMapper.selectById(sysDept.getParentId());
- if (sysDept4 == null) {
- stringBuilder.append(sysDept.getName());
- } else {
- SysDept sysDept3 = sysDeptMapper.selectById(sysDept4.getParentId());
- if (sysDept3 == null) {
- stringBuilder.append(sysDept4.getName()).append("-").append(sysDept.getName());
- } else {
- SysDept sysDept2 = sysDeptMapper.selectById(sysDept3.getParentId());
- if (sysDept2 == null) {
- stringBuilder.append(sysDept3.getName()).append("-").append(sysDept4.getName()).append("-").append(sysDept.getName());
- } else {
- stringBuilder.append(sysDept2.getName()).append("-").append(sysDept3.getName()).append("-").append(sysDept4.getName()).append("-").append(sysDept.getName());
- }
- }
- }
- } else if (sysDept.getComlevel().equals("4")) {
- SysDept sysDept3 = sysDeptMapper.selectById(sysDept.getParentId());
- if (sysDept3 == null) {
- stringBuilder.append(sysDept.getName());
- } else {
- SysDept sysDept2 = sysDeptMapper.selectById(sysDept3.getParentId());
- if (sysDept2 == null) {
- stringBuilder.append(sysDept3.getName()).append("-").append(sysDept.getName());
- } else {
- stringBuilder.append(sysDept2.getName()).append("-").append(sysDept3.getName()).append("-").append(sysDept.getName());
- }
- }
- } else if (sysDept.getComlevel().equals("3")) {
- SysDept sysDept2 = sysDeptMapper.selectById(sysDept.getParentId());
- if (sysDept2 == null) {
- stringBuilder.append(sysDept.getName());
- } else {
- stringBuilder.append(sysDept2.getName()).append("-").append(sysDept.getName());
- }
- } else if (sysDept.getComlevel().equals("2")) {
- stringBuilder.append(sysDept.getName());
- }
- String s = stringBuilder.toString();
- if (s.contains("总部-")) {
- stringBuilder.replace(0, 3, "");
- }
- return stringBuilder.toString();
- }
- }
|