SysPcAddressServiceImpl.java 41 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804
  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. String deptName = getDeptName(sysUser.getDeptId());
  141. sysPcAddress.setDeptName(deptName);
  142. }
  143. return sysPcAddresses;
  144. }
  145. private List<String> queryList(List<String> collect, List<String> ids) {
  146. int size = collect.size();
  147. if (size > 0) {
  148. List<String> strings = new ArrayList<>();
  149. for (String id : collect) {
  150. List<SysUser> sysUsers = sysUserMapper.selectList(new LambdaQueryWrapper<SysUser>()
  151. .eq(SysUser::getLeaderId, id).ne(SysUser::getStatus, 0));
  152. // List<SysUser> sysUsers = sysUserMapper.querySourceId(id);
  153. if (sysUsers.size() > 0) {
  154. List<String> list = sysUsers.stream().map(SysUser::getId).collect(Collectors.toList());
  155. strings.addAll(list);
  156. ids.addAll(list);
  157. if (collect.indexOf(id) + 1 == size) {
  158. queryList(strings, ids);
  159. }
  160. }
  161. }
  162. }
  163. return ids;
  164. }
  165. @Override
  166. public List<SysPcAddress> findLocationsWithinRadius(AdressRangeDto adressRangeDto) {
  167. geoService.addLocations(list(), PC_GEO_KEY);
  168. List<String> nearbyIds = geoService.findNearbyIds(PC_GEO_KEY, adressRangeDto.getLongitude(), adressRangeDto.getLatitude(), adressRangeDto.getRadius());
  169. if (nearbyIds.size() == 0) return new ArrayList<>();
  170. geoService.move(nearbyIds, PC_GEO_KEY);
  171. return listByIds(nearbyIds);
  172. }
  173. @Override
  174. public SysPcAddressNumVo queryPcNum(SysPcAddressDto sysPcAddressDto) {
  175. SysPcAddressNumVo sysPcAddressNumVo = new SysPcAddressNumVo();
  176. String userId = BaseController.getUserId();
  177. List<String> collect = new ArrayList<>();
  178. //admin看所有人
  179. if (!"admin".equals(userId)) {
  180. List<String> ids = new ArrayList<>();
  181. List<SysUser> sysUsers = sysUserMapper.selectList(new LambdaQueryWrapper<SysUser>()
  182. .eq(SysUser::getLeaderId, BaseController.getUserId()).ne(SysUser::getStatus, 0));
  183. collect = sysUsers.stream().map(SysUser::getId).collect(Collectors.toList());
  184. if (collect.size() == 0) return sysPcAddressNumVo;
  185. List<String> idList = queryList(collect, ids);
  186. collect.addAll(idList);
  187. }
  188. //区域数量统计
  189. Long all = sysPcAddressMapper.selectCount(new LambdaQueryWrapper<SysPcAddress>()
  190. .eq(StringUtils.isNotEmpty(sysPcAddressDto.getProvince()), SysPcAddress::getProvince, sysPcAddressDto.getProvince())
  191. .eq(StringUtils.isNotEmpty(sysPcAddressDto.getCity()), SysPcAddress::getCity, sysPcAddressDto.getCity())
  192. .eq(StringUtils.isNotEmpty(sysPcAddressDto.getDistrict()), SysPcAddress::getDistrict, sysPcAddressDto.getDistrict())
  193. .in(SysPcAddress::getSource, Arrays.asList("1", "2"))
  194. .in(CollectionUtil.isNotEmpty(collect), SysPcAddress::getUserId, collect)
  195. .eq(sysPcAddressDto.getStatus() != null, SysPcAddress::getStatus, sysPcAddressDto.getStatus()));
  196. Long channelNum = sysPcAddressMapper.selectCount(new LambdaQueryWrapper<SysPcAddress>()
  197. .eq(StringUtils.isNotEmpty(sysPcAddressDto.getProvince()), SysPcAddress::getProvince, sysPcAddressDto.getProvince())
  198. .eq(StringUtils.isNotEmpty(sysPcAddressDto.getCity()), SysPcAddress::getCity, sysPcAddressDto.getCity())
  199. .eq(StringUtils.isNotEmpty(sysPcAddressDto.getDistrict()), SysPcAddress::getDistrict, sysPcAddressDto.getDistrict())
  200. .eq(SysPcAddress::getSource, 1)
  201. .in(CollectionUtil.isNotEmpty(collect), SysPcAddress::getUserId, collect)
  202. .eq(sysPcAddressDto.getStatus() != null, SysPcAddress::getStatus, sysPcAddressDto.getStatus()));
  203. Long proxyNum = sysPcAddressMapper.selectCount(new LambdaQueryWrapper<SysPcAddress>()
  204. .eq(StringUtils.isNotEmpty(sysPcAddressDto.getProvince()), SysPcAddress::getProvince, sysPcAddressDto.getProvince())
  205. .eq(StringUtils.isNotEmpty(sysPcAddressDto.getCity()), SysPcAddress::getCity, sysPcAddressDto.getCity())
  206. .in(CollectionUtil.isNotEmpty(collect), SysPcAddress::getUserId, collect)
  207. .eq(StringUtils.isNotEmpty(sysPcAddressDto.getDistrict()), SysPcAddress::getDistrict, sysPcAddressDto.getDistrict())
  208. .eq(SysPcAddress::getSource, 2)
  209. .eq(sysPcAddressDto.getStatus() != null, SysPcAddress::getStatus, sysPcAddressDto.getStatus()));
  210. Long onlineNum = sysPcAddressMapper.selectCount(new LambdaQueryWrapper<SysPcAddress>()
  211. .eq(StringUtils.isNotEmpty(sysPcAddressDto.getProvince()), SysPcAddress::getProvince, sysPcAddressDto.getProvince())
  212. .eq(StringUtils.isNotEmpty(sysPcAddressDto.getCity()), SysPcAddress::getCity, sysPcAddressDto.getCity())
  213. .eq(StringUtils.isNotEmpty(sysPcAddressDto.getDistrict()), SysPcAddress::getDistrict, sysPcAddressDto.getDistrict())
  214. .in(SysPcAddress::getSource, Arrays.asList("1", "2"))
  215. .in(CollectionUtil.isNotEmpty(collect), SysPcAddress::getUserId, collect)
  216. .eq(sysPcAddressDto.getStatus() == null, SysPcAddress::getStatus, 1)
  217. .eq(sysPcAddressDto.getStatus() != null, SysPcAddress::getStatus, sysPcAddressDto.getStatus()));
  218. sysPcAddressNumVo.setAllNum(all);
  219. sysPcAddressNumVo.setProxyNum(proxyNum);
  220. sysPcAddressNumVo.setChannelNum(channelNum);
  221. sysPcAddressNumVo.setOnlineNum(onlineNum);
  222. return sysPcAddressNumVo;
  223. }
  224. @Override
  225. public List<RegionInfoVo> queryRegionInfo(SysPcAddressDto sysPcAddressDto) {
  226. List<RegionInfoVo> regionInfoVos = new ArrayList<>();
  227. //admin 看所有,其他人看自己下属的人员信息
  228. String userId = BaseController.getUserId();
  229. List<String> collect = new ArrayList<>();
  230. if (!"admin".equals(userId)) {
  231. //admin看所有人
  232. List<String> ids = new ArrayList<>();
  233. List<SysUser> sysUsers = sysUserMapper.selectList(new LambdaQueryWrapper<SysUser>()
  234. .eq(SysUser::getLeaderId, BaseController.getUserId()).ne(SysUser::getStatus, 0));
  235. collect = sysUsers.stream().map(SysUser::getId).collect(Collectors.toList());
  236. if (collect.size() == 0) return regionInfoVos;
  237. List<String> idList = queryList(collect, ids);
  238. collect.addAll(idList);
  239. }
  240. //全部:null 渠道:1 代理:2
  241. List<SysPcAddress> sysPcAddresses = sysPcAddressMapper.selectList(new LambdaQueryWrapper<SysPcAddress>()
  242. .eq(StringUtils.isNotEmpty(sysPcAddressDto.getProvince()), SysPcAddress::getProvince, sysPcAddressDto.getProvince())
  243. .eq(StringUtils.isNotEmpty(sysPcAddressDto.getCity()), SysPcAddress::getCity, sysPcAddressDto.getCity())
  244. .eq(StringUtils.isNotEmpty(sysPcAddressDto.getDistrict()), SysPcAddress::getDistrict, sysPcAddressDto.getDistrict())
  245. .in(SysPcAddress::getSource, Arrays.asList("1", "2"))
  246. .in(CollectionUtil.isNotEmpty(collect), SysPcAddress::getUserId, collect)
  247. .eq(StringUtils.isNotEmpty(sysPcAddressDto.getSource()), SysPcAddress::getSource, sysPcAddressDto.getSource())
  248. .eq(sysPcAddressDto.getStatus() != null, SysPcAddress::getStatus, sysPcAddressDto.getStatus()));
  249. if (CollectionUtil.isEmpty(sysPcAddresses)) return regionInfoVos;
  250. Map<String, List<SysPcAddress>> map;
  251. if (CollectionUtil.isEmpty(sysPcAddresses)) return regionInfoVos;
  252. if (StringUtils.isEmpty(sysPcAddressDto.getProvince())) {
  253. map = sysPcAddresses.stream().collect(Collectors.groupingBy(SysPcAddress::getProvince));
  254. } else {
  255. if (StringUtils.isNotEmpty(sysPcAddressDto.getCity())) {
  256. map = sysPcAddresses.stream().collect(Collectors.groupingBy(SysPcAddress::getDistrict));
  257. } else {
  258. map = sysPcAddresses.stream().collect(Collectors.groupingBy(SysPcAddress::getCity));
  259. }
  260. }
  261. for (Map.Entry<String, List<SysPcAddress>> entry : map.entrySet()) {
  262. RegionInfoVo regionInfoVo = new RegionInfoVo();
  263. regionInfoVo.setDistrictName(entry.getKey());
  264. regionInfoVo.setNumber(entry.getValue().size());
  265. regionInfoVos.add(regionInfoVo);
  266. }
  267. return regionInfoVos;
  268. }
  269. @Override
  270. public BasePageResult<SysPcAddress> queryPcAddressInfo(PcAddressInfoDto addressInfoDto) {
  271. Page<SysPcAddress> page = new Page<>(addressInfoDto.getPageNum(), addressInfoDto.getPageSize());
  272. List<String> arrayList = new ArrayList<>();
  273. List<String> collectIds = new ArrayList<>();
  274. //admin看所有
  275. if (!"admin".equals(BaseController.getUserId())) {
  276. List<SysUser> sysUsers = sysUserMapper.selectList(new LambdaQueryWrapper<SysUser>()
  277. .eq(SysUser::getLeaderId, BaseController.getUserId()).ne(SysUser::getStatus, 0));
  278. collectIds = sysUsers.stream().map(SysUser::getId).collect(Collectors.toList());
  279. if (collectIds.size() > 0) {
  280. List<String> idList = queryList(collectIds, arrayList);
  281. collectIds.addAll(idList);
  282. }
  283. }
  284. Page<SysPcAddress> insOrdersPage = null;
  285. // 类型:1。机构 2.用户
  286. if (addressInfoDto.getType() == 1) {
  287. LambdaQueryWrapper<SysPcAddress> wrapper = new LambdaQueryWrapper<>();
  288. wrapper.eq(StringUtils.isNotEmpty(addressInfoDto.getLng()), SysPcAddress::getLongitude, addressInfoDto.getLng());
  289. wrapper.eq(StringUtils.isNotEmpty(addressInfoDto.getLat()), SysPcAddress::getLatitude, addressInfoDto.getLat());
  290. wrapper.in(SysPcAddress::getSource, Arrays.asList("1", "2"));
  291. wrapper.eq(StringUtils.isNotEmpty(addressInfoDto.getSource()), SysPcAddress::getSource, addressInfoDto.getSource());
  292. wrapper.in(CollectionUtil.isNotEmpty(collectIds), SysPcAddress::getUserId, collectIds);
  293. wrapper.likeRight(StringUtils.isNotEmpty(addressInfoDto.getQueryId()), SysPcAddress::getUserId, addressInfoDto.getQueryId());
  294. wrapper.eq(addressInfoDto.getStatus() != null, SysPcAddress::getStatus, addressInfoDto.getStatus());
  295. wrapper.orderByDesc(SysPcAddress::getOperationTime);
  296. insOrdersPage = page(page, wrapper);
  297. } else if (addressInfoDto.getType() == 2) {
  298. List<String> ids = new ArrayList<>();
  299. List<SysUser> sysUsers = sysUserMapper.selectList(new LambdaQueryWrapper<SysUser>()
  300. .eq(SysUser::getLeaderId, addressInfoDto.getQueryId()).ne(SysUser::getStatus, 0));
  301. List<String> collect = sysUsers.stream().map(SysUser::getId).collect(Collectors.toList());
  302. if (collect.size() == 0)
  303. return new BasePageResult<>(addressInfoDto.getPageNum(), page.getSize(), insOrdersPage.getTotal(), page.getPages(),
  304. insOrdersPage.getRecords());
  305. List<String> idList = queryList(collect, ids);
  306. collect.addAll(idList);
  307. LambdaQueryWrapper<SysPcAddress> wrapper = new LambdaQueryWrapper<>();
  308. wrapper.eq(StringUtils.isNotEmpty(addressInfoDto.getLng()), SysPcAddress::getLongitude, addressInfoDto.getLng());
  309. wrapper.eq(StringUtils.isNotEmpty(addressInfoDto.getLat()), SysPcAddress::getLatitude, addressInfoDto.getLat());
  310. wrapper.in(SysPcAddress::getSource, Arrays.asList("1", "2"));
  311. wrapper.in(CollectionUtil.isNotEmpty(collectIds), SysPcAddress::getUserId, collectIds);
  312. wrapper.in(CollectionUtil.isNotEmpty(collect), SysPcAddress::getUserId, collect);
  313. wrapper.eq(StringUtils.isNotEmpty(addressInfoDto.getSource()), SysPcAddress::getSource, addressInfoDto.getSource());
  314. wrapper.eq(addressInfoDto.getStatus() != null, SysPcAddress::getStatus, addressInfoDto.getStatus());
  315. wrapper.orderByDesc(SysPcAddress::getOperationTime);
  316. insOrdersPage = page(page, wrapper);
  317. } else {
  318. LambdaQueryWrapper<SysPcAddress> wrapper = new LambdaQueryWrapper<>();
  319. wrapper.eq(StringUtils.isNotEmpty(addressInfoDto.getLng()), SysPcAddress::getLongitude, addressInfoDto.getLng());
  320. wrapper.eq(StringUtils.isNotEmpty(addressInfoDto.getLat()), SysPcAddress::getLatitude, addressInfoDto.getLat());
  321. wrapper.in(SysPcAddress::getSource, Arrays.asList("1", "2"));
  322. wrapper.in(CollectionUtil.isNotEmpty(collectIds), SysPcAddress::getUserId, collectIds);
  323. wrapper.eq(StringUtils.isNotEmpty(addressInfoDto.getSource()), SysPcAddress::getSource, addressInfoDto.getSource());
  324. wrapper.eq(addressInfoDto.getStatus() != null, SysPcAddress::getStatus, addressInfoDto.getStatus());
  325. wrapper.orderByDesc(SysPcAddress::getOperationTime);
  326. insOrdersPage = page(page, wrapper);
  327. }
  328. List<SysPcAddress> records = insOrdersPage.getRecords();
  329. for (SysPcAddress sysPcAddress : records) {
  330. SysUser sysUser = sysUserService.getById(sysPcAddress.getUserId());
  331. if (sysUser == null) continue;
  332. sysPcAddress.setLeaderName(sysUser.getLeaderName());
  333. String deptName = getDeptName(sysUser.getDeptId());
  334. sysPcAddress.setDeptName(deptName);
  335. }
  336. return new BasePageResult<>(addressInfoDto.getPageNum(), page.getSize(), insOrdersPage.getTotal(), page.getPages(),
  337. insOrdersPage.getRecords());
  338. }
  339. @Override
  340. public PcAddressHistoryInfoVo getPcAddress(String startTime, String endTime, String source) {
  341. PcAddressHistoryInfoVo pcAddressHistoryInfoVo = new PcAddressHistoryInfoVo();
  342. //admin 看所有,其他人看自己下属的人员信息
  343. String userId = BaseController.getUserId();
  344. List<String> collect = new ArrayList<>();
  345. if (!"admin".equals(userId)) {
  346. //admin看所有人
  347. List<String> ids = new ArrayList<>();
  348. List<SysUser> sysUsers = sysUserMapper.selectList(new LambdaQueryWrapper<SysUser>()
  349. .eq(SysUser::getLeaderId, BaseController.getUserId()).ne(SysUser::getStatus, 0));
  350. collect = sysUsers.stream().map(SysUser::getId).collect(Collectors.toList());
  351. List<String> idList = queryList(collect, ids);
  352. collect.addAll(idList);
  353. }
  354. if (StringUtils.isEmpty(startTime) || startTime.equals(endTime)) {
  355. if (StringUtils.isNullOrEmpty(startTime)) {
  356. Date date = new Date();
  357. SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
  358. startTime = simpleDateFormat.format(date);
  359. }
  360. QueryWrapper<SysPcAddressHistory> queryWrapper = new QueryWrapper<>();
  361. // 指定 COUNT(DISTINCT user_id) 查询
  362. queryWrapper.select("COUNT(DISTINCT user_id) AS total")
  363. .likeRight(StringUtils.isNotEmpty(startTime), "operation_time", startTime)
  364. .in("source", Arrays.asList(1, 2))
  365. .in(CollectionUtil.isNotEmpty(collect), "user_id", collect)
  366. .eq(StringUtils.isNotEmpty(source), "source", source);
  367. Map<String, Object> result = sysPcAddressHistoryService.getMap(queryWrapper);
  368. Long total = (Long) result.get("total");
  369. pcAddressHistoryInfoVo.setOnlineNum(total);
  370. List<PcAddressHistoryTimeVo> pcAddress = sysPcAddressHistoryMapper.getPcAddress(startTime, source, collect);
  371. pcAddressHistoryInfoVo.setList(pcAddress);
  372. List<SysPcAddressHistory> sysPcAddressHistories = sysPcAddressHistoryMapper.getPcAddressInfo(startTime, source, collect);
  373. extracted(sysPcAddressHistories);
  374. System.out.println("********************" + sysPcAddressHistories.size());
  375. pcAddressHistoryInfoVo.setPcAddressList(sysPcAddressHistories);
  376. } else {
  377. SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  378. startTime = startTime + " 00:00:01";
  379. endTime = endTime + " 23:59:59";
  380. try {
  381. Date parse = simpleDateFormat.parse(startTime);
  382. Date parse1 = simpleDateFormat.parse(endTime);
  383. startTime = simpleDateFormat.format(parse);
  384. endTime = simpleDateFormat.format(parse1);
  385. } catch (ParseException e) {
  386. throw new RuntimeException(e);
  387. }
  388. QueryWrapper<SysPcAddressHistory> queryWrapper = new QueryWrapper<>();
  389. // 指定 COUNT(DISTINCT user_id) 查询
  390. queryWrapper.select("COUNT(DISTINCT user_id) AS total").between("operation_time", startTime, endTime)
  391. .in("source", Arrays.asList(1, 2))
  392. .eq(StringUtils.isNotEmpty(source), "source", source)
  393. .in(CollectionUtil.isNotEmpty(collect), "user_id", collect);
  394. Map<String, Object> result = sysPcAddressHistoryService.getMap(queryWrapper);
  395. Long total = (Long) result.get("total");
  396. pcAddressHistoryInfoVo.setOnlineNum(total);
  397. List<PcAddressHistoryTimeVo> pcAddress = sysPcAddressHistoryMapper.getPcAddressSection(startTime, endTime, source, collect);
  398. pcAddressHistoryInfoVo.setList(pcAddress);
  399. List<SysPcAddressHistory> sysPcAddressHistories = sysPcAddressHistoryMapper.getPcAddressHistory(startTime, endTime, source, collect);
  400. extracted(sysPcAddressHistories);
  401. System.out.println("********************" + sysPcAddressHistories.size());
  402. pcAddressHistoryInfoVo.setPcAddressList(sysPcAddressHistories);
  403. }
  404. return pcAddressHistoryInfoVo;
  405. }
  406. private void extracted(List<SysPcAddressHistory> sysPcAddressHistories) {
  407. for (SysPcAddressHistory sysPcAddressHistory : sysPcAddressHistories) {
  408. SysUser sysUser = sysUserService.getById(sysPcAddressHistory.getUserId());
  409. if (sysUser == null) continue;
  410. sysPcAddressHistory.setLeaderName(sysUser.getLeaderName());
  411. SysDept sysDept = sysDeptMapper.selectById(sysUser.getDeptId());
  412. if (sysDept == null) continue;
  413. sysPcAddressHistory.setDeptName(sysDept.getName());
  414. }
  415. }
  416. @Override
  417. public List<SysPcAddress> getOnlinePeople() {
  418. return sysPcAddressMapper.selectList(new LambdaQueryWrapper<SysPcAddress>().eq(SysPcAddress::getStatus, 1));
  419. }
  420. @Override
  421. public BasePageResult<SysPcAddressHistory> queryPcAddressHistoryInfo(PcAddressInfoDto addressInfoDto) {
  422. Page page = new Page(addressInfoDto.getPageNum(), addressInfoDto.getPageSize());
  423. IPage<SysPcAddressHistory> sysPcAddressHistoryIPage;
  424. //登陆人的下属id
  425. String userId = BaseController.getUserId();
  426. List<String> collectIds = new ArrayList<>();
  427. if (!"admin".equals(userId)) {
  428. //admin看所有人
  429. List<String> ids = new ArrayList<>();
  430. List<SysUser> sysUsers = sysUserMapper.selectList(new LambdaQueryWrapper<SysUser>()
  431. .eq(SysUser::getLeaderId, BaseController.getUserId()).ne(SysUser::getStatus, 0));
  432. collectIds = sysUsers.stream().map(SysUser::getId).collect(Collectors.toList());
  433. if (collectIds.size() == 0)
  434. return new BasePageResult<>(addressInfoDto.getPageNum(), addressInfoDto.getPageSize(), 0L, 0L, null);
  435. List<String> idList = queryList(collectIds, ids);
  436. collectIds.addAll(idList);
  437. }
  438. addressInfoDto.setCollectIds(collectIds);
  439. // 类型:1。机构树 2.用户树 0:默认查询
  440. Integer type = addressInfoDto.getType();
  441. if (type == 1) {
  442. sysPcAddressHistoryIPage = sysPcAddressHistoryMapper.queryAddressHistory(page, addressInfoDto);
  443. } else if (type == 2) {
  444. List<String> ids = new ArrayList<>();
  445. List<SysUser> sysUsers = sysUserMapper.selectList(new LambdaQueryWrapper<SysUser>()
  446. .eq(SysUser::getLeaderId, addressInfoDto.getQueryId()).ne(SysUser::getStatus, 0));
  447. List<String> collect = sysUsers.stream().map(SysUser::getId).collect(Collectors.toList());
  448. if (collect.size() > 0) {
  449. List<String> idList = queryList(collect, ids);
  450. collect.addAll(idList);
  451. }
  452. addressInfoDto.setQueryId("");
  453. addressInfoDto.setCollect(collect);
  454. sysPcAddressHistoryIPage = sysPcAddressHistoryMapper.queryAddressHistory(page, addressInfoDto);
  455. } else {
  456. sysPcAddressHistoryIPage = sysPcAddressHistoryMapper.queryAddressHistory(page, addressInfoDto);
  457. }
  458. List<SysPcAddressHistory> records = sysPcAddressHistoryIPage.getRecords();
  459. for (SysPcAddressHistory record : records) {
  460. SysUser sysUser = sysUserService.getById(record.getUserId());
  461. if (sysUser == null) continue;
  462. record.setLeaderName(sysUser.getLeaderName());
  463. String deptName = getDeptName(sysUser.getDeptId());
  464. record.setDeptName(deptName);
  465. }
  466. return new BasePageResult<>(addressInfoDto.getPageNum(), addressInfoDto.getPageSize(), sysPcAddressHistoryIPage.getTotal(), sysPcAddressHistoryIPage.getPages(),
  467. records);
  468. }
  469. /**
  470. * 前线只要机构 后线人员(按照领导人) 机构
  471. *
  472. * @return
  473. */
  474. @Override
  475. public KztUserDeptTreeDto getUserDeptTree() {
  476. KztUserDeptTreeDto kztUserDeptTreeDto = new KztUserDeptTreeDto();
  477. String userId = BaseController.getUserId();
  478. List<SysDept> sysDeptList1 = sysDeptMapper.selectList(new LambdaQueryWrapper<SysDept>().eq(SysDept::getLeaderId, userId));
  479. if (sysDeptList1.size() > 0) {
  480. //展示机构
  481. kztUserDeptTreeDto.setType("1");
  482. } else {
  483. //展示机构 人员
  484. kztUserDeptTreeDto.setType("2"); //代理
  485. }
  486. SysUser byUserId = sysUserMapper.getByUserId(userId);
  487. List<SysDeptTreeVo> resultDeptList = this.getFiveLevelDeptKzt(byUserId);
  488. kztUserDeptTreeDto.setDeptList(resultDeptList);
  489. if (!userId.contains("M")) {
  490. if (sysDeptList1.size() == 0) {
  491. List<SysUser> resultList = this.getUserTreeHx(byUserId);
  492. kztUserDeptTreeDto.setUserList(resultList);
  493. }
  494. }
  495. return kztUserDeptTreeDto;
  496. }
  497. private List<SysDeptTreeVo> getFiveLevelDeptKzt(SysUser byUserId) {
  498. SysDept sysDept = sysDeptService.getById("9");
  499. SysDept dept = sysDeptMapper.selectById(BaseController.getDeptId());
  500. SysDept sysDept1 = new SysDept();
  501. SysDeptVo sysDeptVo = new SysDeptVo();
  502. String id = byUserId.getId();
  503. List<String> deptIds = new ArrayList<>();
  504. //admin看全部
  505. if ("admin".equals(byUserId.getId())) {
  506. List<SysDept> sysDeptList = sysDeptMapper.queryFiveLevelDept(sysDeptVo);
  507. deptIds.addAll(sysDeptList.stream().map(SysDept::getId).collect(Collectors.toList()));
  508. } else {
  509. //后线员工判断:是否为机构负责人,是:看所属机构下的 ;否:看所有的
  510. List<SysDept> sysDeptList1 = sysDeptMapper.selectList(new LambdaQueryWrapper<SysDept>().eq(SysDept::getLeaderId, id));
  511. if (sysDeptList1.size() > 0) {
  512. if (sysDeptList1.size() == 1) {
  513. SysDept sysDept2 = sysDeptList1.get(0);
  514. BeanUtil.copyProperties(sysDept2, sysDept1);
  515. deptIds = getDeptIds(sysDept2.getId(), deptIds, deptIds);
  516. } else {
  517. Optional<SysDept> max = sysDeptList1.stream().min((o1, o2) -> o1.getComlevel().compareTo(o2.getComlevel()));
  518. SysDept sysDept2 = max.get();
  519. BeanUtil.copyProperties(sysDept2, sysDept1);
  520. deptIds = getDeptIds(sysDept2.getId(), deptIds, deptIds);
  521. }
  522. } else {
  523. List<SysDept> sysDeptList = sysDeptMapper.queryFiveLevelDept(sysDeptVo);
  524. deptIds.addAll(sysDeptList.stream().map(SysDept::getId).collect(Collectors.toList()));
  525. }
  526. }
  527. sysDeptVo.setDeptIds(deptIds);
  528. List<SysDept> sysDeptList = sysDeptMapper.queryFiveLevelDept(sysDeptVo);
  529. if ("admin".equals(byUserId.getId())) {
  530. sysDept.setComlevel("1");
  531. sysDeptList.add(sysDept);
  532. }
  533. List<SysDeptTreeVo> sysDeptTreeVos = BeanUtil.copyToList(sysDeptList, SysDeptTreeVo.class);
  534. Map<String, List<SysDeptTreeVo>> map = sysDeptTreeVos.stream().sorted(Comparator.comparing(SysDeptTreeVo::getId))
  535. .collect(Collectors.groupingBy(SysDeptTreeVo::getParentId));
  536. sysDeptTreeVos.forEach(i -> {
  537. if (Integer.parseInt(i.getComlevel()) <= 5) {
  538. i.setChildren(map.getOrDefault(i.getId(), new ArrayList<>()));
  539. i.setDeptCount(i.getChildren().size());
  540. }
  541. });
  542. if ("admin".equals(byUserId.getId())) {
  543. return map.get(BaseController.getDeptId());
  544. }
  545. List<SysDept> sysDeptList1 = sysDeptMapper.selectList(new LambdaQueryWrapper<SysDept>().eq(SysDept::getLeaderId, id));
  546. if (sysDeptList1.size() == 0) {
  547. return map.get(sysDept.getId());
  548. }
  549. String parentId = sysDept1.getParentId();
  550. if (parentId.equals("0")) {
  551. sysDept1.setParentId(sysDept1.getId());
  552. }
  553. return map.get(sysDept1.getParentId());
  554. }
  555. private List<String> getDeptIds(String deptId, List<String> ids, List<String> deptIds) {
  556. if (ids.size() > 0) {
  557. List<String> list = new ArrayList<>();
  558. for (String id : ids) {
  559. List<SysDept> sysDeptList = sysDeptMapper.selectList(new LambdaQueryWrapper<SysDept>().eq(SysDept::getParentId, id).isNotNull(SysDept::getComlevel));
  560. if (sysDeptList.size() > 0) {
  561. List<String> collect = sysDeptList.stream().map(SysDept::getId).collect(Collectors.toList());
  562. deptIds.addAll(sysDeptList.stream().map(SysDept::getId).collect(Collectors.toList()));
  563. list.addAll(collect);
  564. }
  565. }
  566. if (list.size() == 0) {
  567. return deptIds;
  568. } else {
  569. getDeptIds(deptId, list, deptIds);
  570. }
  571. } else {
  572. List<SysDept> sysDeptList = sysDeptMapper.selectList(new LambdaQueryWrapper<SysDept>().eq(SysDept::getParentId, deptId).isNotNull(SysDept::getComlevel));
  573. if (sysDeptList.size() > 0) {
  574. List<String> collect = sysDeptList.stream().map(SysDept::getId).collect(Collectors.toList());
  575. deptIds.add(deptId);
  576. deptIds.addAll(collect);
  577. getDeptIds(deptId, collect, deptIds);
  578. }
  579. }
  580. return deptIds;
  581. }
  582. private List<SysUser> getUserTreeHx(SysUser sysUser) {
  583. //获取领导字段不为空的人的ID
  584. QueryWrapper<SysUser> queryWrapper = new QueryWrapper<>();
  585. queryWrapper.isNotNull("leader_id");
  586. List<SysUser> userList = null;
  587. List<SysUser> users = sysUserMapper.selectList(queryWrapper);
  588. if (users.size() > 0) {
  589. //排除前线员工
  590. userList = users.stream().filter(SysUser -> !SysUser.getId().contains("M")).collect(Collectors.toList());
  591. //填充所属机构名称
  592. for (SysUser user : userList) {
  593. String deptName = getDeptName(user.getDeptId());
  594. user.setDeptName(deptName);
  595. }
  596. }
  597. if (users == null || users.size() == 0) {
  598. return new ArrayList<>();
  599. }
  600. List<SysUser> topUsers = new ArrayList<>(); //存放1级用户,即没有直接上级的用户
  601. // 根据组织结构展示级别,筛选顶层节点并构建组织结构树
  602. if ("admin".equals(sysUser.getName())) {
  603. topUsers.add(sysUserMapper.selectById("99D1501"));
  604. } else {
  605. topUsers.add(sysUser);
  606. }
  607. // 递归构建用户树结构
  608. buildUserTree(topUsers, userList);
  609. //登陆人员无下属不展示
  610. // SysUser sysUser1 = topUsers.get(0);
  611. // if (sysUser1.getChildren().size() == 0) {
  612. // return new ArrayList<>();
  613. // }
  614. return topUsers;
  615. }
  616. private void buildUserTree(List<SysUser> topUsers, List<SysUser> users) {
  617. for (SysUser user : topUsers) {
  618. List<SysUser> children = new ArrayList<>();
  619. for (SysUser childUser : users) {
  620. if (user.getId().equals(childUser.getLeaderId())) {
  621. children.add(childUser);
  622. // 递归查找下一级
  623. buildUserTree(children, users);
  624. }
  625. }
  626. user.setChildren(children);
  627. }
  628. }
  629. private String getDeptName(String deptId) {
  630. StringBuilder stringBuilder = new StringBuilder();
  631. SysDept sysDept = sysDeptMapper.selectOne(new LambdaQueryWrapper<SysDept>()
  632. .eq(SysDept::getId, deptId).eq(SysDept::getDelFlag, 0));
  633. if (StringUtils.isEmpty(sysDept.getComlevel())) {
  634. SysDept sysDept5 = sysDeptMapper.selectById(sysDept.getParentId());
  635. if (sysDept5 == null) {
  636. stringBuilder.append(sysDept.getName());
  637. } else {
  638. SysDept sysDept4 = sysDeptMapper.selectById(sysDept5.getParentId());
  639. if (sysDept4 == null) {
  640. stringBuilder.append(sysDept5.getName()).append("-").append(sysDept.getName());
  641. } else {
  642. SysDept sysDept3 = sysDeptMapper.selectById(sysDept4.getParentId());
  643. if (sysDept3 == null) {
  644. stringBuilder.append(sysDept4.getName())
  645. .append("-").append(sysDept5.getName()).append("-").append(sysDept.getName());
  646. } else {
  647. SysDept sysDept2 = sysDeptMapper.selectById(sysDept3.getParentId());
  648. if (sysDept2 == null) {
  649. stringBuilder.append(sysDept3.getName()).append("-").append(sysDept4.getName())
  650. .append("-").append(sysDept5.getName()).append("-").append(sysDept.getName());
  651. } else {
  652. stringBuilder.append(sysDept2.getName()).append("-").append(sysDept3.getName())
  653. .append("-").append(sysDept4.getName()).append("-").append(sysDept5.getName()).append("-").append(sysDept.getName());
  654. }
  655. }
  656. }
  657. }
  658. } else if (sysDept.getComlevel().equals("5")) {
  659. SysDept sysDept4 = sysDeptMapper.selectById(sysDept.getParentId());
  660. if (sysDept4 == null) {
  661. stringBuilder.append(sysDept.getName());
  662. } else {
  663. SysDept sysDept3 = sysDeptMapper.selectById(sysDept4.getParentId());
  664. if (sysDept3 == null) {
  665. stringBuilder.append(sysDept4.getName()).append("-").append(sysDept.getName());
  666. } else {
  667. SysDept sysDept2 = sysDeptMapper.selectById(sysDept3.getParentId());
  668. if (sysDept2 == null) {
  669. stringBuilder.append(sysDept3.getName()).append("-").append(sysDept4.getName()).append("-").append(sysDept.getName());
  670. } else {
  671. stringBuilder.append(sysDept2.getName()).append("-").append(sysDept3.getName()).append("-").append(sysDept4.getName()).append("-").append(sysDept.getName());
  672. }
  673. }
  674. }
  675. } else if (sysDept.getComlevel().equals("4")) {
  676. SysDept sysDept3 = sysDeptMapper.selectById(sysDept.getParentId());
  677. if (sysDept3 == null) {
  678. stringBuilder.append(sysDept.getName());
  679. } else {
  680. SysDept sysDept2 = sysDeptMapper.selectById(sysDept3.getParentId());
  681. if (sysDept2 == null) {
  682. stringBuilder.append(sysDept3.getName()).append("-").append(sysDept.getName());
  683. } else {
  684. stringBuilder.append(sysDept2.getName()).append("-").append(sysDept3.getName()).append("-").append(sysDept.getName());
  685. }
  686. }
  687. } else if (sysDept.getComlevel().equals("3")) {
  688. SysDept sysDept2 = sysDeptMapper.selectById(sysDept.getParentId());
  689. if (sysDept2 == null) {
  690. stringBuilder.append(sysDept.getName());
  691. } else {
  692. stringBuilder.append(sysDept2.getName()).append("-").append(sysDept.getName());
  693. }
  694. } else if (sysDept.getComlevel().equals("2")) {
  695. stringBuilder.append(sysDept.getName());
  696. }
  697. String s = stringBuilder.toString();
  698. if (s.contains("总部-")) {
  699. stringBuilder.replace(0, 3, "");
  700. }
  701. return stringBuilder.toString();
  702. }
  703. }