SysPcAddressServiceImpl.java 40 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786
  1. package com.ydtech.modules.admin.service.impl;
  2. import cn.hutool.core.bean.BeanUtil;
  3. import cn.hutool.core.collection.CollectionUtil;
  4. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  5. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  6. import com.baomidou.mybatisplus.core.metadata.IPage;
  7. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  8. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  9. import com.ydtech.modules.admin.dao.*;
  10. import com.ydtech.modules.admin.model.SysDept;
  11. import com.ydtech.modules.admin.model.SysUser;
  12. import com.ydtech.modules.admin.model.dto.*;
  13. import com.ydtech.modules.admin.model.po.SysPcAddressHistory;
  14. import com.ydtech.modules.admin.model.po.SysPcAddress;
  15. import com.ydtech.modules.admin.model.vo.*;
  16. import com.ydtech.modules.admin.service.*;
  17. import com.ydtech.modules.base.controller.BaseController;
  18. import com.ydtech.modules.order.entity.BasePageResult;
  19. import com.ydtech.utils.StringUtils;
  20. import lombok.RequiredArgsConstructor;
  21. import org.springframework.beans.BeanUtils;
  22. import org.springframework.beans.factory.annotation.Autowired;
  23. import org.springframework.stereotype.Service;
  24. import org.springframework.transaction.annotation.Transactional;
  25. import javax.annotation.Resource;
  26. import java.text.ParseException;
  27. import java.text.SimpleDateFormat;
  28. import java.util.*;
  29. import java.util.stream.Collectors;
  30. /**
  31. * @author Administrator
  32. * @description 针对表【sys_pc_address(pc获取ip地址)】的数据库操作Service实现
  33. * @createDate 2024-09-02 09:40:08
  34. */
  35. @Service
  36. @RequiredArgsConstructor
  37. public class SysPcAddressServiceImpl extends ServiceImpl<SysPcAddressMapper, SysPcAddress> implements SysPcAddressService {
  38. private final SysPcAddressHistoryService sysPcAddressHistoryService;
  39. private final SysPcAddressMapper sysPcAddressMapper;
  40. private final SysPcAddressHistoryMapper sysPcAddressHistoryMapper;
  41. private final GeoService geoService;
  42. private final SysUserService sysUserService;
  43. private static final String PC_GEO_KEY = "PCLocations";
  44. @Resource
  45. private SysDeptMapper sysDeptMapper;
  46. @Resource
  47. private SysDeptService sysDeptService;
  48. @Resource
  49. private SysUserMapper sysUserMapper;
  50. @Autowired
  51. private SysUserDeptRelationshipMapper sysUserDeptRelationshipMapper;
  52. @Override
  53. @Transactional(rollbackFor = Exception.class)
  54. public void saveSysPcAddress(IpInfoDto ipInfoDto, SysUser user) {
  55. SysPcAddress sysPcAddress = getById(user.getId());
  56. if (sysPcAddress == null) {
  57. sysPcAddress = new SysPcAddress();
  58. }
  59. SysDept sysDept = sysDeptMapper.selectOne(new LambdaQueryWrapper<SysDept>()
  60. .eq(SysDept::getId, user.getDeptId()).eq(SysDept::getDelFlag, 0));
  61. sysPcAddress.setUserId(user.getId());
  62. sysPcAddress.setUserName(user.getName());
  63. sysPcAddress.setIp(ipInfoDto.getIp());
  64. sysPcAddress.setLatitude(ipInfoDto.getLat());
  65. sysPcAddress.setLongitude(ipInfoDto.getLng());
  66. sysPcAddress.setProvince(ipInfoDto.getProv());
  67. sysPcAddress.setCity(ipInfoDto.getCity());
  68. sysPcAddress.setDistrict(ipInfoDto.getDistrict());
  69. sysPcAddress.setSource(sysDept.getManagementSource());
  70. sysPcAddress.setAddress(ipInfoDto.getProv() + ipInfoDto.getCity() + ipInfoDto.getDistrict());
  71. sysPcAddress.setOperationTime(new Date());
  72. sysPcAddress.setLeaderName(user.getLeaderName());
  73. SysPcAddressHistory sysPcAddressHistory = new SysPcAddressHistory();
  74. BeanUtils.copyProperties(sysPcAddress, sysPcAddressHistory);
  75. this.saveOrUpdate(sysPcAddress);
  76. sysPcAddressHistoryService.save(sysPcAddressHistory);
  77. }
  78. @Override
  79. public List<SysPcAddress> getEveryone(SysPcAddressDto sysPcAddressDto) {
  80. List<SysPcAddress> sysPcAddresses = null;
  81. List<String> arrayList = new ArrayList<>();
  82. List<String> collectIds = new ArrayList<>();
  83. //admin看所有
  84. if (!"admin".equals(BaseController.getUserId())) {
  85. List<SysUser> sysUsers = sysUserMapper.selectList(new LambdaQueryWrapper<SysUser>()
  86. .eq(SysUser::getLeaderId, BaseController.getUserId()).ne(SysUser::getStatus, 0));
  87. collectIds = sysUsers.stream().map(SysUser::getId).collect(Collectors.toList());
  88. if (collectIds.size() > 0) {
  89. List<String> idList = queryList(collectIds, arrayList);
  90. collectIds.addAll(idList);
  91. }
  92. }
  93. // 类型:1。机构 2.用户
  94. if (sysPcAddressDto.getType() == 1) {
  95. sysPcAddresses = sysPcAddressMapper.selectList(new LambdaQueryWrapper<SysPcAddress>()
  96. .eq(StringUtils.isNotEmpty(sysPcAddressDto.getProvince()), SysPcAddress::getProvince, sysPcAddressDto.getProvince())
  97. .eq(StringUtils.isNotEmpty(sysPcAddressDto.getCity()), SysPcAddress::getCity, sysPcAddressDto.getCity())
  98. .eq(StringUtils.isNotEmpty(sysPcAddressDto.getDistrict()), SysPcAddress::getDistrict, sysPcAddressDto.getDistrict())
  99. .in(SysPcAddress::getSource, Arrays.asList("1", "2"))
  100. .in(CollectionUtil.isNotEmpty(collectIds), SysPcAddress::getUserId, collectIds)
  101. .likeRight(StringUtils.isNotEmpty(sysPcAddressDto.getQueryId()), SysPcAddress::getUserId, sysPcAddressDto.getQueryId())
  102. .eq(StringUtils.isNotEmpty(sysPcAddressDto.getSource()), SysPcAddress::getSource, sysPcAddressDto.getSource())
  103. .eq(sysPcAddressDto.getStatus() != null, SysPcAddress::getStatus, sysPcAddressDto.getStatus())
  104. .orderByDesc(SysPcAddress::getOperationTime));
  105. } else if (sysPcAddressDto.getType() == 2) {
  106. List<String> ids = new ArrayList<>();
  107. List<SysUser> sysUsers = sysUserMapper.selectList(new LambdaQueryWrapper<SysUser>()
  108. .eq(SysUser::getLeaderId, sysPcAddressDto.getQueryId()).ne(SysUser::getStatus, 0));
  109. List<String> collect = sysUsers.stream().map(SysUser::getId).collect(Collectors.toList());
  110. if (collect.size() == 0) {
  111. return sysPcAddresses;
  112. }
  113. List<String> idList = queryList(collect, ids);
  114. collect.addAll(idList);
  115. sysPcAddresses = sysPcAddressMapper.selectList(new LambdaQueryWrapper<SysPcAddress>()
  116. .eq(StringUtils.isNotEmpty(sysPcAddressDto.getProvince()), SysPcAddress::getProvince, sysPcAddressDto.getProvince())
  117. .eq(StringUtils.isNotEmpty(sysPcAddressDto.getCity()), SysPcAddress::getCity, sysPcAddressDto.getCity())
  118. .eq(StringUtils.isNotEmpty(sysPcAddressDto.getDistrict()), SysPcAddress::getDistrict, sysPcAddressDto.getDistrict())
  119. .in(SysPcAddress::getSource, Arrays.asList("1", "2"))
  120. .in(CollectionUtil.isNotEmpty(collectIds), SysPcAddress::getUserId, collectIds)
  121. .in(CollectionUtil.isNotEmpty(collect), SysPcAddress::getUserId, collect)
  122. .eq(StringUtils.isNotEmpty(sysPcAddressDto.getSource()), SysPcAddress::getSource, sysPcAddressDto.getSource())
  123. .eq(sysPcAddressDto.getStatus() != null, SysPcAddress::getStatus, sysPcAddressDto.getStatus())
  124. .orderByDesc(SysPcAddress::getOperationTime));
  125. } else {
  126. sysPcAddresses = sysPcAddressMapper.selectList(new LambdaQueryWrapper<SysPcAddress>()
  127. .eq(StringUtils.isNotEmpty(sysPcAddressDto.getProvince()), SysPcAddress::getProvince, sysPcAddressDto.getProvince())
  128. .eq(StringUtils.isNotEmpty(sysPcAddressDto.getCity()), SysPcAddress::getCity, sysPcAddressDto.getCity())
  129. .eq(StringUtils.isNotEmpty(sysPcAddressDto.getDistrict()), SysPcAddress::getDistrict, sysPcAddressDto.getDistrict())
  130. .in(SysPcAddress::getSource, Arrays.asList("1", "2"))
  131. .in(CollectionUtil.isNotEmpty(collectIds), SysPcAddress::getUserId, collectIds)
  132. .eq(StringUtils.isNotEmpty(sysPcAddressDto.getSource()), SysPcAddress::getSource, sysPcAddressDto.getSource())
  133. .eq(sysPcAddressDto.getStatus() != null, SysPcAddress::getStatus, sysPcAddressDto.getStatus())
  134. .orderByDesc(SysPcAddress::getOperationTime));
  135. }
  136. for (SysPcAddress sysPcAddress : sysPcAddresses) {
  137. SysUser sysUser = sysUserService.getById(sysPcAddress.getUserId());
  138. if (sysUser == null) continue;
  139. sysPcAddress.setLeaderName(sysUser.getLeaderName());
  140. }
  141. return sysPcAddresses;
  142. }
  143. private List<String> queryList(List<String> collect, List<String> ids) {
  144. int size = collect.size();
  145. if (size > 0) {
  146. List<String> strings = new ArrayList<>();
  147. for (String id : collect) {
  148. List<SysUser> sysUsers = sysUserMapper.selectList(new LambdaQueryWrapper<SysUser>()
  149. .eq(SysUser::getLeaderId, id).ne(SysUser::getStatus, 0));
  150. // List<SysUser> sysUsers = sysUserMapper.querySourceId(id);
  151. if (sysUsers.size() > 0) {
  152. List<String> list = sysUsers.stream().map(SysUser::getId).collect(Collectors.toList());
  153. strings.addAll(list);
  154. ids.addAll(list);
  155. if (collect.indexOf(id) + 1 == size) {
  156. queryList(strings, ids);
  157. }
  158. }
  159. }
  160. }
  161. return ids;
  162. }
  163. @Override
  164. public List<SysPcAddress> findLocationsWithinRadius(AdressRangeDto adressRangeDto) {
  165. geoService.addLocations(list(), PC_GEO_KEY);
  166. List<String> nearbyIds = geoService.findNearbyIds(PC_GEO_KEY, adressRangeDto.getLongitude(), adressRangeDto.getLatitude(), adressRangeDto.getRadius());
  167. if (nearbyIds.size() == 0) return new ArrayList<>();
  168. geoService.move(nearbyIds, PC_GEO_KEY);
  169. return listByIds(nearbyIds);
  170. }
  171. @Override
  172. public SysPcAddressNumVo queryPcNum(SysPcAddressDto sysPcAddressDto) {
  173. SysPcAddressNumVo sysPcAddressNumVo = new SysPcAddressNumVo();
  174. String userId = BaseController.getUserId();
  175. List<String> collect = new ArrayList<>();
  176. //admin看所有人
  177. if (!"admin".equals(userId)) {
  178. List<String> ids = new ArrayList<>();
  179. List<SysUser> sysUsers = sysUserMapper.selectList(new LambdaQueryWrapper<SysUser>()
  180. .eq(SysUser::getLeaderId, BaseController.getUserId()).ne(SysUser::getStatus, 0));
  181. collect = sysUsers.stream().map(SysUser::getId).collect(Collectors.toList());
  182. if (collect.size() == 0) return sysPcAddressNumVo;
  183. List<String> idList = queryList(collect, ids);
  184. collect.addAll(idList);
  185. }
  186. //区域数量统计
  187. Long all = sysPcAddressMapper.selectCount(new LambdaQueryWrapper<SysPcAddress>()
  188. .eq(StringUtils.isNotEmpty(sysPcAddressDto.getProvince()), SysPcAddress::getProvince, sysPcAddressDto.getProvince())
  189. .eq(StringUtils.isNotEmpty(sysPcAddressDto.getCity()), SysPcAddress::getCity, sysPcAddressDto.getCity())
  190. .eq(StringUtils.isNotEmpty(sysPcAddressDto.getDistrict()), SysPcAddress::getDistrict, sysPcAddressDto.getDistrict())
  191. .in(SysPcAddress::getSource, Arrays.asList("1", "2"))
  192. .in(CollectionUtil.isNotEmpty(collect), SysPcAddress::getUserId, collect)
  193. .eq(sysPcAddressDto.getStatus() != null, SysPcAddress::getStatus, sysPcAddressDto.getStatus()));
  194. Long channelNum = sysPcAddressMapper.selectCount(new LambdaQueryWrapper<SysPcAddress>()
  195. .eq(StringUtils.isNotEmpty(sysPcAddressDto.getProvince()), SysPcAddress::getProvince, sysPcAddressDto.getProvince())
  196. .eq(StringUtils.isNotEmpty(sysPcAddressDto.getCity()), SysPcAddress::getCity, sysPcAddressDto.getCity())
  197. .eq(StringUtils.isNotEmpty(sysPcAddressDto.getDistrict()), SysPcAddress::getDistrict, sysPcAddressDto.getDistrict())
  198. .eq(SysPcAddress::getSource, 1)
  199. .in(CollectionUtil.isNotEmpty(collect), SysPcAddress::getUserId, collect)
  200. .eq(sysPcAddressDto.getStatus() != null, SysPcAddress::getStatus, sysPcAddressDto.getStatus()));
  201. Long proxyNum = sysPcAddressMapper.selectCount(new LambdaQueryWrapper<SysPcAddress>()
  202. .eq(StringUtils.isNotEmpty(sysPcAddressDto.getProvince()), SysPcAddress::getProvince, sysPcAddressDto.getProvince())
  203. .eq(StringUtils.isNotEmpty(sysPcAddressDto.getCity()), SysPcAddress::getCity, sysPcAddressDto.getCity())
  204. .in(CollectionUtil.isNotEmpty(collect), SysPcAddress::getUserId, collect)
  205. .eq(StringUtils.isNotEmpty(sysPcAddressDto.getDistrict()), SysPcAddress::getDistrict, sysPcAddressDto.getDistrict())
  206. .eq(SysPcAddress::getSource, 2)
  207. .eq(sysPcAddressDto.getStatus() != null, SysPcAddress::getStatus, sysPcAddressDto.getStatus()));
  208. Long onlineNum = sysPcAddressMapper.selectCount(new LambdaQueryWrapper<SysPcAddress>()
  209. .eq(StringUtils.isNotEmpty(sysPcAddressDto.getProvince()), SysPcAddress::getProvince, sysPcAddressDto.getProvince())
  210. .eq(StringUtils.isNotEmpty(sysPcAddressDto.getCity()), SysPcAddress::getCity, sysPcAddressDto.getCity())
  211. .eq(StringUtils.isNotEmpty(sysPcAddressDto.getDistrict()), SysPcAddress::getDistrict, sysPcAddressDto.getDistrict())
  212. .in(SysPcAddress::getSource, Arrays.asList("1", "2"))
  213. .in(CollectionUtil.isNotEmpty(collect), SysPcAddress::getUserId, collect)
  214. .eq(sysPcAddressDto.getStatus() == null, SysPcAddress::getStatus, 1)
  215. .eq(sysPcAddressDto.getStatus() != null, SysPcAddress::getStatus, sysPcAddressDto.getStatus()));
  216. sysPcAddressNumVo.setAllNum(all);
  217. sysPcAddressNumVo.setProxyNum(proxyNum);
  218. sysPcAddressNumVo.setChannelNum(channelNum);
  219. sysPcAddressNumVo.setOnlineNum(onlineNum);
  220. return sysPcAddressNumVo;
  221. }
  222. @Override
  223. public List<RegionInfoVo> queryRegionInfo(SysPcAddressDto sysPcAddressDto) {
  224. List<RegionInfoVo> regionInfoVos = new ArrayList<>();
  225. //admin 看所有,其他人看自己下属的人员信息
  226. String userId = BaseController.getUserId();
  227. List<String> collect = new ArrayList<>();
  228. if (!"admin".equals(userId)) {
  229. //admin看所有人
  230. List<String> ids = new ArrayList<>();
  231. List<SysUser> sysUsers = sysUserMapper.selectList(new LambdaQueryWrapper<SysUser>()
  232. .eq(SysUser::getLeaderId, BaseController.getUserId()).ne(SysUser::getStatus, 0));
  233. collect = sysUsers.stream().map(SysUser::getId).collect(Collectors.toList());
  234. if (collect.size() == 0) return regionInfoVos;
  235. List<String> idList = queryList(collect, ids);
  236. collect.addAll(idList);
  237. }
  238. //全部:null 渠道:1 代理:2
  239. List<SysPcAddress> sysPcAddresses = sysPcAddressMapper.selectList(new LambdaQueryWrapper<SysPcAddress>()
  240. .eq(StringUtils.isNotEmpty(sysPcAddressDto.getProvince()), SysPcAddress::getProvince, sysPcAddressDto.getProvince())
  241. .eq(StringUtils.isNotEmpty(sysPcAddressDto.getCity()), SysPcAddress::getCity, sysPcAddressDto.getCity())
  242. .eq(StringUtils.isNotEmpty(sysPcAddressDto.getDistrict()), SysPcAddress::getDistrict, sysPcAddressDto.getDistrict())
  243. .in(SysPcAddress::getSource, Arrays.asList("1", "2"))
  244. .in(CollectionUtil.isNotEmpty(collect), SysPcAddress::getUserId, collect)
  245. .eq(StringUtils.isNotEmpty(sysPcAddressDto.getSource()), SysPcAddress::getSource, sysPcAddressDto.getSource())
  246. .eq(sysPcAddressDto.getStatus() != null, SysPcAddress::getStatus, sysPcAddressDto.getStatus()));
  247. if (CollectionUtil.isEmpty(sysPcAddresses)) return regionInfoVos;
  248. Map<String, List<SysPcAddress>> map;
  249. if (CollectionUtil.isEmpty(sysPcAddresses)) return regionInfoVos;
  250. if (StringUtils.isEmpty(sysPcAddressDto.getProvince())) {
  251. map = sysPcAddresses.stream().collect(Collectors.groupingBy(SysPcAddress::getProvince));
  252. } else {
  253. if (StringUtils.isNotEmpty(sysPcAddressDto.getCity())) {
  254. map = sysPcAddresses.stream().collect(Collectors.groupingBy(SysPcAddress::getDistrict));
  255. } else {
  256. map = sysPcAddresses.stream().collect(Collectors.groupingBy(SysPcAddress::getCity));
  257. }
  258. }
  259. for (Map.Entry<String, List<SysPcAddress>> entry : map.entrySet()) {
  260. RegionInfoVo regionInfoVo = new RegionInfoVo();
  261. regionInfoVo.setDistrictName(entry.getKey());
  262. regionInfoVo.setNumber(entry.getValue().size());
  263. regionInfoVos.add(regionInfoVo);
  264. }
  265. return regionInfoVos;
  266. }
  267. @Override
  268. public BasePageResult<SysPcAddress> queryPcAddressInfo(PcAddressInfoDto addressInfoDto) {
  269. Page<SysPcAddress> page = new Page<>(addressInfoDto.getPageNum(), addressInfoDto.getPageSize());
  270. List<String> arrayList = new ArrayList<>();
  271. List<String> collectIds = new ArrayList<>();
  272. //admin看所有
  273. if (!"admin".equals(BaseController.getUserId())) {
  274. List<SysUser> sysUsers = sysUserMapper.selectList(new LambdaQueryWrapper<SysUser>()
  275. .eq(SysUser::getLeaderId, BaseController.getUserId()).ne(SysUser::getStatus, 0));
  276. collectIds = sysUsers.stream().map(SysUser::getId).collect(Collectors.toList());
  277. if (collectIds.size() > 0) {
  278. List<String> idList = queryList(collectIds, arrayList);
  279. collectIds.addAll(idList);
  280. }
  281. }
  282. Page<SysPcAddress> insOrdersPage = null;
  283. // 类型:1。机构 2.用户
  284. if (addressInfoDto.getType() == 1) {
  285. LambdaQueryWrapper<SysPcAddress> wrapper = new LambdaQueryWrapper<>();
  286. wrapper.eq(StringUtils.isNotEmpty(addressInfoDto.getLng()), SysPcAddress::getLongitude, addressInfoDto.getLng());
  287. wrapper.eq(StringUtils.isNotEmpty(addressInfoDto.getLat()), SysPcAddress::getLatitude, addressInfoDto.getLat());
  288. wrapper.in(SysPcAddress::getSource, Arrays.asList("1", "2"));
  289. wrapper.eq(StringUtils.isNotEmpty(addressInfoDto.getSource()), SysPcAddress::getSource, addressInfoDto.getSource());
  290. wrapper.in(CollectionUtil.isNotEmpty(collectIds), SysPcAddress::getUserId, collectIds);
  291. wrapper.likeRight(StringUtils.isNotEmpty(addressInfoDto.getQueryId()), SysPcAddress::getUserId, addressInfoDto.getQueryId());
  292. wrapper.eq(addressInfoDto.getStatus() != null, SysPcAddress::getStatus, addressInfoDto.getStatus());
  293. wrapper.orderByDesc(SysPcAddress::getOperationTime);
  294. insOrdersPage = page(page, wrapper);
  295. } else if (addressInfoDto.getType() == 2) {
  296. List<String> ids = new ArrayList<>();
  297. List<SysUser> sysUsers = sysUserMapper.selectList(new LambdaQueryWrapper<SysUser>()
  298. .eq(SysUser::getLeaderId, addressInfoDto.getQueryId()).ne(SysUser::getStatus, 0));
  299. List<String> collect = sysUsers.stream().map(SysUser::getId).collect(Collectors.toList());
  300. if (collect.size() == 0)
  301. return new BasePageResult<>(addressInfoDto.getPageNum(), page.getSize(), insOrdersPage.getTotal(), page.getPages(),
  302. insOrdersPage.getRecords());
  303. List<String> idList = queryList(collect, ids);
  304. collect.addAll(idList);
  305. LambdaQueryWrapper<SysPcAddress> wrapper = new LambdaQueryWrapper<>();
  306. wrapper.eq(StringUtils.isNotEmpty(addressInfoDto.getLng()), SysPcAddress::getLongitude, addressInfoDto.getLng());
  307. wrapper.eq(StringUtils.isNotEmpty(addressInfoDto.getLat()), SysPcAddress::getLatitude, addressInfoDto.getLat());
  308. wrapper.in(SysPcAddress::getSource, Arrays.asList("1", "2"));
  309. wrapper.in(CollectionUtil.isNotEmpty(collectIds), SysPcAddress::getUserId, collectIds);
  310. wrapper.in(CollectionUtil.isNotEmpty(collect), SysPcAddress::getUserId, collect);
  311. wrapper.eq(StringUtils.isNotEmpty(addressInfoDto.getSource()), SysPcAddress::getSource, addressInfoDto.getSource());
  312. wrapper.eq(addressInfoDto.getStatus() != null, SysPcAddress::getStatus, addressInfoDto.getStatus());
  313. wrapper.orderByDesc(SysPcAddress::getOperationTime);
  314. insOrdersPage = page(page, wrapper);
  315. } else {
  316. LambdaQueryWrapper<SysPcAddress> wrapper = new LambdaQueryWrapper<>();
  317. wrapper.eq(StringUtils.isNotEmpty(addressInfoDto.getLng()), SysPcAddress::getLongitude, addressInfoDto.getLng());
  318. wrapper.eq(StringUtils.isNotEmpty(addressInfoDto.getLat()), SysPcAddress::getLatitude, addressInfoDto.getLat());
  319. wrapper.in(SysPcAddress::getSource, Arrays.asList("1", "2"));
  320. wrapper.in(CollectionUtil.isNotEmpty(collectIds), SysPcAddress::getUserId, collectIds);
  321. wrapper.eq(StringUtils.isNotEmpty(addressInfoDto.getSource()), SysPcAddress::getSource, addressInfoDto.getSource());
  322. wrapper.eq(addressInfoDto.getStatus() != null, SysPcAddress::getStatus, addressInfoDto.getStatus());
  323. wrapper.orderByDesc(SysPcAddress::getOperationTime);
  324. insOrdersPage = page(page, wrapper);
  325. }
  326. return new BasePageResult<>(addressInfoDto.getPageNum(), page.getSize(), insOrdersPage.getTotal(), page.getPages(),
  327. insOrdersPage.getRecords());
  328. }
  329. @Override
  330. public PcAddressHistoryInfoVo getPcAddress(String startTime, String endTime, String source) {
  331. PcAddressHistoryInfoVo pcAddressHistoryInfoVo = new PcAddressHistoryInfoVo();
  332. //admin 看所有,其他人看自己下属的人员信息
  333. String userId = BaseController.getUserId();
  334. List<String> collect = new ArrayList<>();
  335. if (!"admin".equals(userId)) {
  336. //admin看所有人
  337. List<String> ids = new ArrayList<>();
  338. List<SysUser> sysUsers = sysUserMapper.selectList(new LambdaQueryWrapper<SysUser>()
  339. .eq(SysUser::getLeaderId, BaseController.getUserId()).ne(SysUser::getStatus, 0));
  340. collect = sysUsers.stream().map(SysUser::getId).collect(Collectors.toList());
  341. List<String> idList = queryList(collect, ids);
  342. collect.addAll(idList);
  343. }
  344. if (StringUtils.isEmpty(startTime) || startTime.equals(endTime)) {
  345. if (StringUtils.isNullOrEmpty(startTime)) {
  346. Date date = new Date();
  347. SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
  348. startTime = simpleDateFormat.format(date);
  349. }
  350. QueryWrapper<SysPcAddressHistory> queryWrapper = new QueryWrapper<>();
  351. // 指定 COUNT(DISTINCT user_id) 查询
  352. queryWrapper.select("COUNT(DISTINCT user_id) AS total")
  353. .likeRight(StringUtils.isNotEmpty(startTime), "operation_time", startTime)
  354. .in("source", Arrays.asList(1, 2))
  355. .in(CollectionUtil.isNotEmpty(collect), "user_id", collect)
  356. .eq(StringUtils.isNotEmpty(source), "source", source);
  357. Map<String, Object> result = sysPcAddressHistoryService.getMap(queryWrapper);
  358. Long total = (Long) result.get("total");
  359. pcAddressHistoryInfoVo.setOnlineNum(total);
  360. List<PcAddressHistoryTimeVo> pcAddress = sysPcAddressHistoryMapper.getPcAddress(startTime, source, collect);
  361. pcAddressHistoryInfoVo.setList(pcAddress);
  362. List<SysPcAddressHistory> sysPcAddressHistories = sysPcAddressHistoryMapper.getPcAddressInfo(startTime, source, collect);
  363. extracted(sysPcAddressHistories);
  364. System.out.println("********************" + sysPcAddressHistories.size());
  365. pcAddressHistoryInfoVo.setPcAddressList(sysPcAddressHistories);
  366. } else {
  367. SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  368. startTime = startTime + " 00:00:01";
  369. endTime = endTime + " 23:59:59";
  370. try {
  371. Date parse = simpleDateFormat.parse(startTime);
  372. Date parse1 = simpleDateFormat.parse(endTime);
  373. startTime = simpleDateFormat.format(parse);
  374. endTime = simpleDateFormat.format(parse1);
  375. } catch (ParseException e) {
  376. throw new RuntimeException(e);
  377. }
  378. QueryWrapper<SysPcAddressHistory> queryWrapper = new QueryWrapper<>();
  379. // 指定 COUNT(DISTINCT user_id) 查询
  380. queryWrapper.select("COUNT(DISTINCT user_id) AS total").between("operation_time", startTime, endTime)
  381. .in("source", Arrays.asList(1, 2))
  382. .eq(StringUtils.isNotEmpty(source), "source", source)
  383. .in(CollectionUtil.isNotEmpty(collect), "user_id", collect);
  384. Map<String, Object> result = sysPcAddressHistoryService.getMap(queryWrapper);
  385. Long total = (Long) result.get("total");
  386. pcAddressHistoryInfoVo.setOnlineNum(total);
  387. List<PcAddressHistoryTimeVo> pcAddress = sysPcAddressHistoryMapper.getPcAddressSection(startTime, endTime, source, collect);
  388. pcAddressHistoryInfoVo.setList(pcAddress);
  389. List<SysPcAddressHistory> sysPcAddressHistories = sysPcAddressHistoryMapper.getPcAddressHistory(startTime, endTime, source, collect);
  390. extracted(sysPcAddressHistories);
  391. System.out.println("********************" + sysPcAddressHistories.size());
  392. pcAddressHistoryInfoVo.setPcAddressList(sysPcAddressHistories);
  393. }
  394. return pcAddressHistoryInfoVo;
  395. }
  396. private void extracted(List<SysPcAddressHistory> sysPcAddressHistories) {
  397. for (SysPcAddressHistory sysPcAddressHistory : sysPcAddressHistories) {
  398. SysUser sysUser = sysUserService.getById(sysPcAddressHistory.getUserId());
  399. if (sysUser == null) continue;
  400. sysPcAddressHistory.setLeaderName(sysUser.getLeaderName());
  401. SysDept sysDept = sysDeptMapper.selectById(sysUser.getDeptId());
  402. if (sysDept == null) continue;
  403. sysPcAddressHistory.setDeptName(sysDept.getName());
  404. }
  405. }
  406. @Override
  407. public List<SysPcAddress> getOnlinePeople() {
  408. return sysPcAddressMapper.selectList(new LambdaQueryWrapper<SysPcAddress>().eq(SysPcAddress::getStatus, 1));
  409. }
  410. @Override
  411. public BasePageResult<SysPcAddressHistory> queryPcAddressHistoryInfo(PcAddressInfoDto addressInfoDto) {
  412. Page page = new Page(addressInfoDto.getPageNum(), addressInfoDto.getPageSize());
  413. IPage<SysPcAddressHistory> sysPcAddressHistoryIPage = null;
  414. //登陆人的下属id
  415. String userId = BaseController.getUserId();
  416. List<String> collectIds = new ArrayList<>();
  417. if (!"admin".equals(userId)) {
  418. //admin看所有人
  419. List<String> ids = new ArrayList<>();
  420. List<SysUser> sysUsers = sysUserMapper.selectList(new LambdaQueryWrapper<SysUser>()
  421. .eq(SysUser::getLeaderId, BaseController.getUserId()).ne(SysUser::getStatus, 0));
  422. collectIds = sysUsers.stream().map(SysUser::getId).collect(Collectors.toList());
  423. if (collectIds.size() == 0)
  424. return new BasePageResult<>(addressInfoDto.getPageNum(), addressInfoDto.getPageSize(), 0l, 0l, null);
  425. List<String> idList = queryList(collectIds, ids);
  426. collectIds.addAll(idList);
  427. }
  428. addressInfoDto.setCollectIds(collectIds);
  429. // 类型:1。机构树 2.用户树 0:默认查询
  430. Integer type = addressInfoDto.getType();
  431. if (type == 1) {
  432. sysPcAddressHistoryIPage = sysPcAddressHistoryMapper.queryAddressHistory(page, addressInfoDto);
  433. } else if (type == 2) {
  434. List<String> ids = new ArrayList<>();
  435. List<SysUser> sysUsers = sysUserMapper.selectList(new LambdaQueryWrapper<SysUser>()
  436. .eq(SysUser::getLeaderId, addressInfoDto.getQueryId()).ne(SysUser::getStatus, 0));
  437. List<String> collect = sysUsers.stream().map(SysUser::getId).collect(Collectors.toList());
  438. if (collect.size() > 0) {
  439. List<String> idList = queryList(collect, ids);
  440. collect.addAll(idList);
  441. }
  442. addressInfoDto.setQueryId("");
  443. addressInfoDto.setCollect(collect);
  444. sysPcAddressHistoryIPage = sysPcAddressHistoryMapper.queryAddressHistory(page, addressInfoDto);
  445. } else {
  446. sysPcAddressHistoryIPage = sysPcAddressHistoryMapper.queryAddressHistory(page, addressInfoDto);
  447. }
  448. return new BasePageResult<>(addressInfoDto.getPageNum(), addressInfoDto.getPageSize(), sysPcAddressHistoryIPage.getTotal(), sysPcAddressHistoryIPage.getPages(),
  449. sysPcAddressHistoryIPage.getRecords());
  450. }
  451. /**
  452. * 前线只要机构 后线人员(按照领导人) 机构
  453. *
  454. * @return
  455. */
  456. @Override
  457. public KztUserDeptTreeDto getUserDeptTree() {
  458. KztUserDeptTreeDto kztUserDeptTreeDto = new KztUserDeptTreeDto();
  459. String userId = BaseController.getUserId();
  460. List<SysDept> sysDeptList1 = sysDeptMapper.selectList(new LambdaQueryWrapper<SysDept>().eq(SysDept::getLeaderId, userId));
  461. if (sysDeptList1.size() > 0) {
  462. //展示机构
  463. kztUserDeptTreeDto.setType("1");
  464. } else {
  465. //展示机构 人员
  466. kztUserDeptTreeDto.setType("2"); //代理
  467. }
  468. SysUser byUserId = sysUserMapper.getByUserId(userId);
  469. List<SysDeptTreeVo> resultDeptList = this.getFiveLevelDeptKzt(byUserId);
  470. kztUserDeptTreeDto.setDeptList(resultDeptList);
  471. if (!userId.contains("M")) {
  472. if (sysDeptList1.size() == 0) {
  473. List<SysUser> resultList = this.getUserTreeHx(byUserId);
  474. kztUserDeptTreeDto.setUserList(resultList);
  475. }
  476. }
  477. return kztUserDeptTreeDto;
  478. }
  479. private List<SysDeptTreeVo> getFiveLevelDeptKzt(SysUser byUserId) {
  480. SysDept sysDept = sysDeptService.getById("9");
  481. SysDept dept = sysDeptMapper.selectById(BaseController.getDeptId());
  482. SysDept sysDept1 = new SysDept();
  483. SysDeptVo sysDeptVo = new SysDeptVo();
  484. String id = byUserId.getId();
  485. List<String> deptIds = new ArrayList<>();
  486. //admin看全部
  487. if ("admin".equals(byUserId.getId())) {
  488. List<SysDept> sysDeptList = sysDeptMapper.queryFiveLevelDept(sysDeptVo);
  489. deptIds.addAll(sysDeptList.stream().map(SysDept::getId).collect(Collectors.toList()));
  490. } else {
  491. //后线员工判断:是否为机构负责人,是:看所属机构下的 ;否:看所有的
  492. List<SysDept> sysDeptList1 = sysDeptMapper.selectList(new LambdaQueryWrapper<SysDept>().eq(SysDept::getLeaderId, id));
  493. if (sysDeptList1.size() > 0) {
  494. if (sysDeptList1.size() == 1) {
  495. SysDept sysDept2 = sysDeptList1.get(0);
  496. BeanUtil.copyProperties(sysDept2, sysDept1);
  497. deptIds = getDeptIds(sysDept2.getId(), deptIds, deptIds);
  498. } else {
  499. Optional<SysDept> max = sysDeptList1.stream().min((o1, o2) -> o1.getComlevel().compareTo(o2.getComlevel()));
  500. SysDept sysDept2 = max.get();
  501. BeanUtil.copyProperties(sysDept2, sysDept1);
  502. deptIds = getDeptIds(sysDept2.getId(), deptIds, deptIds);
  503. }
  504. } else {
  505. List<SysDept> sysDeptList = sysDeptMapper.queryFiveLevelDept(sysDeptVo);
  506. deptIds.addAll(sysDeptList.stream().map(SysDept::getId).collect(Collectors.toList()));
  507. }
  508. }
  509. sysDeptVo.setDeptIds(deptIds);
  510. List<SysDept> sysDeptList = sysDeptMapper.queryFiveLevelDept(sysDeptVo);
  511. if ("admin".equals(byUserId.getId())) {
  512. sysDept.setComlevel("1");
  513. sysDeptList.add(sysDept);
  514. }
  515. List<SysDeptTreeVo> sysDeptTreeVos = BeanUtil.copyToList(sysDeptList, SysDeptTreeVo.class);
  516. Map<String, List<SysDeptTreeVo>> map = sysDeptTreeVos.stream().sorted(Comparator.comparing(SysDeptTreeVo::getId))
  517. .collect(Collectors.groupingBy(SysDeptTreeVo::getParentId));
  518. sysDeptTreeVos.forEach(i -> {
  519. if (Integer.parseInt(i.getComlevel()) <= 5) {
  520. i.setChildren(map.getOrDefault(i.getId(), new ArrayList<>()));
  521. i.setDeptCount(i.getChildren().size());
  522. }
  523. });
  524. if ("admin".equals(byUserId.getId())) {
  525. return map.get(BaseController.getDeptId());
  526. }
  527. List<SysDept> sysDeptList1 = sysDeptMapper.selectList(new LambdaQueryWrapper<SysDept>().eq(SysDept::getLeaderId, id));
  528. if (sysDeptList1.size() == 0) {
  529. return map.get(sysDept.getId());
  530. }
  531. String parentId = sysDept1.getParentId();
  532. if (parentId.equals("0")) {
  533. sysDept1.setParentId(sysDept1.getId());
  534. }
  535. return map.get(sysDept1.getParentId());
  536. }
  537. private List<String> getDeptIds(String deptId, List<String> ids, List<String> deptIds) {
  538. if (ids.size() > 0) {
  539. List<String> list = new ArrayList<>();
  540. for (String id : ids) {
  541. List<SysDept> sysDeptList = sysDeptMapper.selectList(new LambdaQueryWrapper<SysDept>().eq(SysDept::getParentId, id).isNotNull(SysDept::getComlevel));
  542. if (sysDeptList.size() > 0) {
  543. List<String> collect = sysDeptList.stream().map(SysDept::getId).collect(Collectors.toList());
  544. deptIds.addAll(sysDeptList.stream().map(SysDept::getId).collect(Collectors.toList()));
  545. list.addAll(collect);
  546. }
  547. }
  548. if (list.size() == 0) {
  549. return deptIds;
  550. } else {
  551. getDeptIds(deptId, list, deptIds);
  552. }
  553. } else {
  554. List<SysDept> sysDeptList = sysDeptMapper.selectList(new LambdaQueryWrapper<SysDept>().eq(SysDept::getParentId, deptId).isNotNull(SysDept::getComlevel));
  555. if (sysDeptList.size() > 0) {
  556. List<String> collect = sysDeptList.stream().map(SysDept::getId).collect(Collectors.toList());
  557. deptIds.add(deptId);
  558. deptIds.addAll(collect);
  559. getDeptIds(deptId, collect, deptIds);
  560. }
  561. }
  562. return deptIds;
  563. }
  564. private List<SysUser> getUserTreeHx(SysUser sysUser) {
  565. //获取领导字段不为空的人的ID
  566. QueryWrapper<SysUser> queryWrapper = new QueryWrapper<>();
  567. queryWrapper.isNotNull("leader_id");
  568. List<SysUser> userList = null;
  569. List<SysUser> users = sysUserMapper.selectList(queryWrapper);
  570. if (users.size() > 0) {
  571. //排除前线员工
  572. userList = users.stream().filter(SysUser -> !SysUser.getId().contains("M")).collect(Collectors.toList());
  573. //填充所属机构名称
  574. for (SysUser user : userList) {
  575. String deptName = getDeptName(user.getDeptId());
  576. user.setDeptName(deptName);
  577. }
  578. }
  579. if (users == null || users.size() == 0) {
  580. return new ArrayList<>();
  581. }
  582. List<SysUser> topUsers = new ArrayList<>(); //存放1级用户,即没有直接上级的用户
  583. // 根据组织结构展示级别,筛选顶层节点并构建组织结构树
  584. if ("admin".equals(sysUser.getName())) {
  585. topUsers.add(sysUserMapper.selectById("99D1501"));
  586. } else {
  587. topUsers.add(sysUser);
  588. }
  589. // 递归构建用户树结构
  590. buildUserTree(topUsers, userList);
  591. //登陆人员无下属不展示
  592. // SysUser sysUser1 = topUsers.get(0);
  593. // if (sysUser1.getChildren().size() == 0) {
  594. // return new ArrayList<>();
  595. // }
  596. return topUsers;
  597. }
  598. private void buildUserTree(List<SysUser> topUsers, List<SysUser> users) {
  599. for (SysUser user : topUsers) {
  600. List<SysUser> children = new ArrayList<>();
  601. for (SysUser childUser : users) {
  602. if (user.getId().equals(childUser.getLeaderId())) {
  603. children.add(childUser);
  604. // 递归查找下一级
  605. buildUserTree(children, users);
  606. }
  607. }
  608. user.setChildren(children);
  609. }
  610. }
  611. private String getDeptName(String deptId) {
  612. StringBuilder stringBuilder = new StringBuilder();
  613. SysDept sysDept = sysDeptMapper.selectOne(new LambdaQueryWrapper<SysDept>()
  614. .eq(SysDept::getId, deptId).eq(SysDept::getDelFlag, 0));
  615. if (StringUtils.isEmpty(sysDept.getComlevel())) {
  616. SysDept sysDept5 = sysDeptMapper.selectById(sysDept.getParentId());
  617. if (sysDept5 == null) {
  618. stringBuilder.append(sysDept.getName());
  619. } else {
  620. SysDept sysDept4 = sysDeptMapper.selectById(sysDept5.getParentId());
  621. if (sysDept4 == null) {
  622. stringBuilder.append(sysDept5.getName()).append("-").append(sysDept.getName());
  623. } else {
  624. SysDept sysDept3 = sysDeptMapper.selectById(sysDept4.getParentId());
  625. if (sysDept3 == null) {
  626. stringBuilder.append(sysDept4.getName())
  627. .append("-").append(sysDept5.getName()).append("-").append(sysDept.getName());
  628. } else {
  629. SysDept sysDept2 = sysDeptMapper.selectById(sysDept3.getParentId());
  630. if (sysDept2 == null) {
  631. stringBuilder.append(sysDept3.getName()).append("-").append(sysDept4.getName())
  632. .append("-").append(sysDept5.getName()).append("-").append(sysDept.getName());
  633. } else {
  634. stringBuilder.append(sysDept2.getName()).append("-").append(sysDept3.getName())
  635. .append("-").append(sysDept4.getName()).append("-").append(sysDept5.getName()).append("-").append(sysDept.getName());
  636. }
  637. }
  638. }
  639. }
  640. } else if (sysDept.getComlevel().equals("5")) {
  641. SysDept sysDept4 = sysDeptMapper.selectById(sysDept.getParentId());
  642. if (sysDept4 == null) {
  643. stringBuilder.append(sysDept.getName());
  644. } else {
  645. SysDept sysDept3 = sysDeptMapper.selectById(sysDept4.getParentId());
  646. if (sysDept3 == null) {
  647. stringBuilder.append(sysDept4.getName()).append("-").append(sysDept.getName());
  648. } else {
  649. SysDept sysDept2 = sysDeptMapper.selectById(sysDept3.getParentId());
  650. if (sysDept2 == null) {
  651. stringBuilder.append(sysDept3.getName()).append("-").append(sysDept4.getName()).append("-").append(sysDept.getName());
  652. } else {
  653. stringBuilder.append(sysDept2.getName()).append("-").append(sysDept3.getName()).append("-").append(sysDept4.getName()).append("-").append(sysDept.getName());
  654. }
  655. }
  656. }
  657. } else if (sysDept.getComlevel().equals("4")) {
  658. SysDept sysDept3 = sysDeptMapper.selectById(sysDept.getParentId());
  659. if (sysDept3 == null) {
  660. stringBuilder.append(sysDept.getName());
  661. } else {
  662. SysDept sysDept2 = sysDeptMapper.selectById(sysDept3.getParentId());
  663. if (sysDept2 == null) {
  664. stringBuilder.append(sysDept3.getName()).append("-").append(sysDept.getName());
  665. } else {
  666. stringBuilder.append(sysDept2.getName()).append("-").append(sysDept3.getName()).append("-").append(sysDept.getName());
  667. }
  668. }
  669. } else if (sysDept.getComlevel().equals("3")) {
  670. SysDept sysDept2 = sysDeptMapper.selectById(sysDept.getParentId());
  671. if (sysDept2 == null) {
  672. stringBuilder.append(sysDept.getName());
  673. } else {
  674. stringBuilder.append(sysDept2.getName()).append("-").append(sysDept.getName());
  675. }
  676. } else if (sysDept.getComlevel().equals("2")) {
  677. stringBuilder.append(sysDept.getName());
  678. }
  679. String s = stringBuilder.toString();
  680. if (s.contains("总部-")) {
  681. stringBuilder.replace(0, 3, "");
  682. }
  683. return stringBuilder.toString();
  684. }
  685. }