Procházet zdrojové kódy

在线人数,管理人。历史在线人数

helixiao před 2 roky
rodič
revize
9fbde6b259
22 změnil soubory, kde provedl 379 přidání a 18 odebrání
  1. 2 0
      src/main/java/com/ydtech/components/TokenInterceptor.java
  2. 15 0
      src/main/java/com/ydtech/modules/admin/controller/SysPcAddressController.java
  3. 141 0
      src/main/java/com/ydtech/modules/admin/controller/websocket/PCSocketServer.java
  4. 15 0
      src/main/java/com/ydtech/modules/admin/controller/websocket/SysGeographyPositionController.java
  5. 6 6
      src/main/java/com/ydtech/modules/admin/controller/websocket/WebSocketServer.java
  6. 4 0
      src/main/java/com/ydtech/modules/admin/dao/SysGeographyPositionRecordMapper.java
  7. 6 0
      src/main/java/com/ydtech/modules/admin/dao/SysPcAddressHistoryMapper.java
  8. 3 0
      src/main/java/com/ydtech/modules/admin/dao/SysPcAddressMapper.java
  9. 3 0
      src/main/java/com/ydtech/modules/admin/model/SysGeographyPosition.java
  10. 3 0
      src/main/java/com/ydtech/modules/admin/model/SysGeographyPositionRecord.java
  11. 4 0
      src/main/java/com/ydtech/modules/admin/model/dto/SysPcAddressNumVo.java
  12. 7 0
      src/main/java/com/ydtech/modules/admin/model/po/SysPcAddress.java
  13. 4 1
      src/main/java/com/ydtech/modules/admin/model/po/SysPcAddressHistory.java
  14. 20 0
      src/main/java/com/ydtech/modules/admin/model/vo/PcAddressHistoryInfoVo.java
  15. 17 0
      src/main/java/com/ydtech/modules/admin/model/vo/PcAddressHistoryTimeVo.java
  16. 3 0
      src/main/java/com/ydtech/modules/admin/service/SysGeographyPositionService.java
  17. 5 0
      src/main/java/com/ydtech/modules/admin/service/SysPcAddressService.java
  18. 25 3
      src/main/java/com/ydtech/modules/admin/service/impl/SysGeographyPositionServiceImpl.java
  19. 35 1
      src/main/java/com/ydtech/modules/admin/service/impl/SysPcAddressServiceImpl.java
  20. 26 1
      src/main/resources/mapper/modules/admin/SysGeographyPositionRecordMapper.xml
  21. 28 5
      src/main/resources/mapper/modules/admin/SysPcAddressHistoryMapper.xml
  22. 7 1
      src/main/resources/mapper/modules/admin/SysPcAddressMapper.xml

+ 2 - 0
src/main/java/com/ydtech/components/TokenInterceptor.java

@@ -90,6 +90,8 @@ public class TokenInterceptor {
         notMatchList.add("/order/pingAnApi/payReturn");
 
         notMatchList.add("/sysSys/sysList");//登录2  去除验证
+        notMatchList.add("/pcWebsocket/*");//登录2  去除验证
+        notMatchList.add("/websocket/*");//登录2  去除验证
 
         return new SaInterceptor(handler -> {
             // 指定一条 match 规则

+ 15 - 0
src/main/java/com/ydtech/modules/admin/controller/SysPcAddressController.java

@@ -7,17 +7,21 @@ import com.ydtech.modules.admin.model.SysUser;
 import com.ydtech.modules.admin.model.dto.*;
 import com.ydtech.modules.admin.model.po.SysPcAddressHistory;
 import com.ydtech.modules.admin.model.po.SysPcAddress;
+import com.ydtech.modules.admin.model.vo.PcAddressHistoryInfoVo;
 import com.ydtech.modules.admin.model.vo.RegionInfoVo;
 import com.ydtech.modules.admin.service.SysPcAddressHistoryService;
 import com.ydtech.modules.admin.service.SysPcAddressService;
 import com.ydtech.modules.admin.service.SysUserService;
 import com.ydtech.modules.base.controller.BaseController;
 import com.ydtech.modules.order.entity.BasePageResult;
+import com.ydtech.utils.StringUtils;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.RequiredArgsConstructor;
 import org.springframework.web.bind.annotation.*;
 
+import java.text.SimpleDateFormat;
+import java.util.Date;
 import java.util.List;
 
 @RestController
@@ -98,6 +102,17 @@ public class SysPcAddressController extends BaseController{
         return HttpResult.ok("success", this.sysPcAddressService.queryPcAddressInfo(addressInfoDto));
     }
 
+    @GetMapping("/getPcAddress")
+    @ApiOperation(value = "历史在线人数")
+    public HttpResult<PcAddressHistoryInfoVo> getPcAddress(@RequestParam(value = "dates",required = false) String dates) {
+        if (StringUtils.isNullOrEmpty(dates)) {
+            Date date = new Date();
+            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
+            dates = simpleDateFormat.format(date);
+        }
+        return HttpResult.ok("success", this.sysPcAddressService.getPcAddress(dates));
+    }
+
 
 
 

+ 141 - 0
src/main/java/com/ydtech/modules/admin/controller/websocket/PCSocketServer.java

@@ -0,0 +1,141 @@
+package com.ydtech.modules.admin.controller.websocket;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.ydtech.config.SpringContextUtils;
+import com.ydtech.modules.admin.constants.SystemType;
+import com.ydtech.modules.admin.dao.SysDeptMapper;
+import com.ydtech.modules.admin.model.SysDept;
+import com.ydtech.modules.admin.model.SysGeographyPosition;
+import com.ydtech.modules.admin.model.SysGeographyPositionRecord;
+import com.ydtech.modules.admin.model.SysUser;
+import com.ydtech.modules.admin.model.dto.IpInfoDto;
+import com.ydtech.modules.admin.model.po.SysPcAddress;
+import com.ydtech.modules.admin.service.SysGeographyPositionRecordService;
+import com.ydtech.modules.admin.service.SysGeographyPositionService;
+import com.ydtech.modules.admin.service.SysPcAddressService;
+import com.ydtech.modules.admin.service.SysUserService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+import javax.websocket.*;
+import javax.websocket.server.PathParam;
+import javax.websocket.server.ServerEndpoint;
+import java.util.Date;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.atomic.AtomicInteger;
+
+@Slf4j
+@ServerEndpoint(value = "/pcWebsocket/{userId}")
+@Component
+public class PCSocketServer {
+
+    private String userId;
+
+    private Session session;
+
+    private static Map<String, Session> sessionClientMap = new ConcurrentHashMap<>();
+
+    /**静态变量,用来记录当前在线连接数*/
+    private static final AtomicInteger onlineCount = new AtomicInteger(0);
+
+    /**
+     * 连接成功调用的方法
+     * @param userId
+     * @param session
+     */
+    @OnOpen
+    public void onOpen(@PathParam("userId") String userId, Session session) {
+        this.session=session;
+        this.userId=userId;
+        if (sessionClientMap.containsKey(userId)) {
+            sessionClientMap.remove(userId);
+            // 加入map中
+            sessionClientMap.put(userId, session);
+        } else {
+            // 加入map中
+            sessionClientMap.put(userId, session);
+            // 在线数加1
+            onlineCount.incrementAndGet();
+        }
+        editStatus(userId);
+        log.info("PC用户连接:" + userId + ",当前在线人数为:" + onlineCount);
+        sendMessage("连接成功");
+    }
+
+    @OnMessage
+    public void onMessage(String message, Session session) {
+        JSONObject jsonObject = JSONObject.parseObject(message);
+        String userId = jsonObject.getString("userId");
+        String longitude = jsonObject.getString("lng");
+        String latitude = jsonObject.getString("lat");
+        String province = jsonObject.getString("prov");
+        String city = jsonObject.getString("city");
+        String district = jsonObject.getString("district");
+        String ip = jsonObject.getString("ip");
+        String systemType = jsonObject.getString("systemType");
+        saveLocationData(userId, latitude, longitude,province,city,district,ip,systemType);
+        log.info("服务端收到PC用户消息:{} ,主体:{}", message, userId);
+        sendMessage("服务端已收到PC用户信息:" +message);
+    }
+
+
+    @OnClose
+    public void onClose(@PathParam("userId") String userId, Session session) {
+        delStatus(userId);
+        sessionClientMap.remove(userId);
+        log.info("PC用户断联成功!");
+    }
+
+    @OnError
+    public void onError(Throwable throwable) {
+        log.info("websocket异常,错误信息:{}", throwable.getMessage());
+    }
+
+    private void delStatus(String userId) {
+        SysPcAddressService sysPcAddressService= SpringContextUtils.getBean(SysPcAddressService.class);
+        SysPcAddress sysPcAddress = sysPcAddressService.getById(userId);
+        if (sysPcAddress != null) {
+            sysPcAddress.setStatus(0);
+            sysPcAddressService.updateById(sysPcAddress);
+        }
+    }
+
+    private void editStatus(String userId) {
+        SysPcAddressService sysPcAddressService= SpringContextUtils.getBean(SysPcAddressService.class);
+        SysPcAddress sysPcAddress = sysPcAddressService.getById(userId);
+        if (sysPcAddress != null) {
+            sysPcAddress.setStatus(1);
+            sysPcAddressService.updateById(sysPcAddress);
+        }
+    }
+
+    public void sendMessage(String message) {
+        this.session.getAsyncRemote().sendText(message);
+    }
+
+    public void saveLocationData(String userId, String latitude, String longitude,
+                                 String province,String city,String district,
+                                 String ip,String systemType) {
+        SysPcAddressService sysPcAddressService = SpringContextUtils.getBean(SysPcAddressService.class);
+        SysUserService sysUserService = SpringContextUtils.getBean(SysUserService.class);
+        if (SystemType.ST_1.getCode().equals(systemType)) {
+            try {
+                IpInfoDto ipInfoDto = new IpInfoDto();
+                ipInfoDto.setIp(ip);
+                ipInfoDto.setLng(longitude);
+                ipInfoDto.setLat(latitude);
+                ipInfoDto.setProv(province);
+                ipInfoDto.setCity(city);
+                ipInfoDto.setDistrict(district);
+
+                SysUser user = sysUserService.getById(userId);
+                // 保存登录信息
+                sysPcAddressService.saveSysPcAddress(ipInfoDto,user);
+            }catch (Exception e){}
+        }
+    }
+
+}

+ 15 - 0
src/main/java/com/ydtech/modules/admin/controller/websocket/SysGeographyPositionController.java

@@ -4,16 +4,20 @@ package com.ydtech.modules.admin.controller.websocket;
 import com.ydtech.core.page.HttpResult;
 import com.ydtech.modules.admin.model.SysGeographyPositionRecord;
 import com.ydtech.modules.admin.model.dto.*;
+import com.ydtech.modules.admin.model.vo.PcAddressHistoryInfoVo;
 import com.ydtech.modules.admin.model.vo.RegionInfoVo;
 import com.ydtech.modules.admin.model.vo.SysGeographyPositionInfoVo;
 import com.ydtech.modules.admin.model.vo.SysGeographyPositionVo;
 import com.ydtech.modules.admin.service.SysGeographyPositionService;
 import com.ydtech.modules.order.entity.BasePageResult;
+import com.ydtech.utils.StringUtils;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import java.text.SimpleDateFormat;
+import java.util.Date;
 import java.util.List;
 
 @RestController
@@ -74,6 +78,17 @@ public class SysGeographyPositionController {
         return HttpResult.ok("success", this.sysGeographyPositionService.queryPcAddressInfo(addressInfoDto));
     }
 
+    @GetMapping("/getGeographyPosition")
+    @ApiOperation(value = "历史在线人数")
+    public HttpResult<PcAddressHistoryInfoVo> getGeographyPosition(@RequestParam(value = "dates",required = false) String dates) {
+        if (StringUtils.isNullOrEmpty(dates)) {
+            Date date = new Date();
+            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
+            dates = simpleDateFormat.format(date);
+        }
+        return HttpResult.ok("success", this.sysGeographyPositionService.getGeographyPosition(dates));
+    }
+
 
 
 }

+ 6 - 6
src/main/java/com/ydtech/modules/admin/controller/websocket/WebSocketServer.java

@@ -59,8 +59,8 @@ public class WebSocketServer {
             onlineCount.incrementAndGet();
         }
         editStatus(userId);
-        log.info("用户连接:" + userId + ",当前在线人数为:" + onlineCount);
-        sendMessage("连接成功");
+        log.info("APP用户连接:" + userId + ",当前在线人数为:" + onlineCount);
+        sendMessage("APP用户连接成功");
     }
 
     @OnMessage
@@ -77,8 +77,8 @@ public class WebSocketServer {
         String poiName = jsonObject.getString("poiName");
         String cityCode = jsonObject.getString("cityCode");
         saveLocationData(userId, latitude, longitude,province,city,district,street,streetNum,poiName,cityCode);
-        log.info("服务端收到消息:{} ,主体:{}", message, userId);
-        sendMessage("服务端已收到信息:" +message);
+        log.info("服务端收到APP用户消息:{} ,主体:{}", message, userId);
+        sendMessage("服务端已收到APP用户信息:" +message);
     }
 
 
@@ -86,8 +86,7 @@ public class WebSocketServer {
     public void onClose(@PathParam("userId") String userId, Session session) {
         delStatus(userId);
         sessionClientMap.remove(userId);
-        log.info("断联成功!");
-        sendMessage("断联成功!");
+        log.info("APP用户断联成功!");
     }
 
     @OnError
@@ -150,6 +149,7 @@ public class WebSocketServer {
             sysGeographyPosition.setCreateTime(new Date());
             sysGeographyPosition.setCreateBy(sysUser.getName());
             sysGeographyPosition.setSource(sysDept.getManagementSource());
+            sysGeographyPosition.setLeaderName(sysUser.getLeaderName());
             sysGeographyPositionService.save(sysGeographyPosition);
 
             SysGeographyPositionRecord sysGeographyPositionRecord = BeanUtil.copyProperties(sysGeographyPosition, SysGeographyPositionRecord.class);

+ 4 - 0
src/main/java/com/ydtech/modules/admin/dao/SysGeographyPositionRecordMapper.java

@@ -3,8 +3,11 @@ package com.ydtech.modules.admin.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ydtech.modules.admin.model.SysGeographyPositionRecord;
+import com.ydtech.modules.admin.model.vo.PcAddressHistoryTimeVo;
 import org.apache.ibatis.annotations.Mapper;
 
+import java.util.List;
+
 /**
  * APP用户地理位置记录表(SysGeographyPositionRecord)表数据库访问层
  *
@@ -15,5 +18,6 @@ import org.apache.ibatis.annotations.Mapper;
 public interface SysGeographyPositionRecordMapper extends BaseMapper<SysGeographyPositionRecord> {
 
 
+    List<PcAddressHistoryTimeVo> getGeographyPosition(String dates);
 }
 

+ 6 - 0
src/main/java/com/ydtech/modules/admin/dao/SysPcAddressHistoryMapper.java

@@ -2,6 +2,11 @@ package com.ydtech.modules.admin.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ydtech.modules.admin.model.po.SysPcAddressHistory;
+import com.ydtech.modules.admin.model.vo.PcAddressHistoryTimeVo;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.Date;
+import java.util.List;
 
 /**
 * @author Administrator
@@ -11,6 +16,7 @@ import com.ydtech.modules.admin.model.po.SysPcAddressHistory;
 */
 public interface SysPcAddressHistoryMapper extends BaseMapper<SysPcAddressHistory> {
 
+    List<PcAddressHistoryTimeVo> getPcAddress(@Param("dates") String dates);
 }
 
 

+ 3 - 0
src/main/java/com/ydtech/modules/admin/dao/SysPcAddressMapper.java

@@ -2,6 +2,9 @@ package com.ydtech.modules.admin.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ydtech.modules.admin.model.po.SysPcAddress;
+import com.ydtech.modules.admin.model.vo.PcAddressHistoryTimeVo;
+
+import java.util.List;
 
 /**
 * @author Administrator

+ 3 - 0
src/main/java/com/ydtech/modules/admin/model/SysGeographyPosition.java

@@ -80,6 +80,9 @@ public class SysGeographyPosition implements Serializable {
     @ApiModelProperty(value = "机构来源")
     private String source;
 
+    @ApiModelProperty(value = "领导人姓名")
+    private String leaderName;
+
 
 }
 

+ 3 - 0
src/main/java/com/ydtech/modules/admin/model/SysGeographyPositionRecord.java

@@ -60,5 +60,8 @@ public class SysGeographyPositionRecord implements Serializable {
      */
     private String createBy;
 
+    @ApiModelProperty(value = "机构来源")
+    private String source;
+
 }
 

+ 4 - 0
src/main/java/com/ydtech/modules/admin/model/dto/SysPcAddressNumVo.java

@@ -17,5 +17,9 @@ public class SysPcAddressNumVo {
     @ApiModelProperty(value = "渠道数量")
     private Long channelNum;
 
+    @ApiModelProperty(value = "在线人数")
+    private Long onlineNum;
+
+
 
 }

+ 7 - 0
src/main/java/com/ydtech/modules/admin/model/po/SysPcAddress.java

@@ -80,6 +80,13 @@ public class SysPcAddress implements Serializable {
     private String district;
     @ApiModelProperty(value = "机构来源")
     private String source;
+    @ApiModelProperty(value = "领导人姓名")
+    private String leaderName;
+    /**
+     * 在线状态
+     */
+    @ApiModelProperty(value = "在线状态(0:离线; 1:在线)")
+    private Integer status;
 
 
 }

+ 4 - 1
src/main/java/com/ydtech/modules/admin/model/po/SysPcAddressHistory.java

@@ -65,7 +65,7 @@ public class SysPcAddressHistory implements Serializable {
     private Date operationTime;
 
     @ApiModelProperty("省会")
-    private String prov;
+    private String province;
 
 
     @ApiModelProperty("城市")
@@ -74,6 +74,9 @@ public class SysPcAddressHistory implements Serializable {
     @ApiModelProperty("区")
     private String district;
 
+    @ApiModelProperty(value = "机构来源(1-渠道、2-个代)'")
+    private String source;
+
     @TableField(exist = false)
     private static final long serialVersionUID = 1L;
 

+ 20 - 0
src/main/java/com/ydtech/modules/admin/model/vo/PcAddressHistoryInfoVo.java

@@ -0,0 +1,20 @@
+package com.ydtech.modules.admin.model.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+@ApiModel(value ="历史在线人数")
+public class PcAddressHistoryInfoVo {
+
+    @ApiModelProperty(value = "历史在线总人数")
+    private Long onlineNum;
+
+    @ApiModelProperty(value = "历史时间点在线人数")
+    List<PcAddressHistoryTimeVo> list;
+
+
+}

+ 17 - 0
src/main/java/com/ydtech/modules/admin/model/vo/PcAddressHistoryTimeVo.java

@@ -0,0 +1,17 @@
+package com.ydtech.modules.admin.model.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value ="历史在线人数")
+public class PcAddressHistoryTimeVo {
+
+    @ApiModelProperty("时间段")
+    private String time;
+
+    @ApiModelProperty("人数")
+    private Long countNum;
+
+}

+ 3 - 0
src/main/java/com/ydtech/modules/admin/service/SysGeographyPositionService.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.ydtech.modules.admin.model.SysGeographyPosition;
 import com.ydtech.modules.admin.model.SysGeographyPositionRecord;
 import com.ydtech.modules.admin.model.dto.*;
+import com.ydtech.modules.admin.model.vo.PcAddressHistoryInfoVo;
 import com.ydtech.modules.admin.model.vo.RegionInfoVo;
 import com.ydtech.modules.admin.model.vo.SysGeographyPositionInfoVo;
 import com.ydtech.modules.admin.model.vo.SysGeographyPositionVo;
@@ -24,4 +25,6 @@ public interface SysGeographyPositionService extends IService<SysGeographyPositi
     List<SysGeographyPositionInfoVo> findLocationsWithinRadius(AdressRangeDto adressRangeDto);
 
     BasePageResult<SysGeographyPositionInfoVo> queryPcAddressInfo(PcAddressInfoDto addressInfoDto);
+
+    PcAddressHistoryInfoVo getGeographyPosition(String dates);
 }

+ 5 - 0
src/main/java/com/ydtech/modules/admin/service/SysPcAddressService.java

@@ -4,9 +4,12 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.ydtech.modules.admin.model.SysUser;
 import com.ydtech.modules.admin.model.dto.*;
 import com.ydtech.modules.admin.model.po.SysPcAddress;
+import com.ydtech.modules.admin.model.vo.PcAddressHistoryInfoVo;
+import com.ydtech.modules.admin.model.vo.PcAddressHistoryTimeVo;
 import com.ydtech.modules.admin.model.vo.RegionInfoVo;
 import com.ydtech.modules.order.entity.BasePageResult;
 
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -38,4 +41,6 @@ public interface SysPcAddressService extends IService<SysPcAddress> {
     List<RegionInfoVo> queryRegionInfo(SysPcAddressDto sysPcAddressDto);
 
     BasePageResult<SysPcAddress> queryPcAddressInfo(PcAddressInfoDto addressInfoDto);
+
+    PcAddressHistoryInfoVo getPcAddress(String dates);
 }

+ 25 - 3
src/main/java/com/ydtech/modules/admin/service/impl/SysGeographyPositionServiceImpl.java

@@ -3,6 +3,7 @@ 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.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ydtech.modules.admin.dao.SysDeptMapper;
@@ -13,9 +14,7 @@ import com.ydtech.modules.admin.model.SysGeographyPosition;
 import com.ydtech.modules.admin.model.SysGeographyPositionRecord;
 import com.ydtech.modules.admin.model.SysUser;
 import com.ydtech.modules.admin.model.dto.*;
-import com.ydtech.modules.admin.model.vo.RegionInfoVo;
-import com.ydtech.modules.admin.model.vo.SysGeographyPositionInfoVo;
-import com.ydtech.modules.admin.model.vo.SysGeographyPositionVo;
+import com.ydtech.modules.admin.model.vo.*;
 import com.ydtech.modules.admin.service.GeoService;
 import com.ydtech.modules.admin.service.SysGeographyPositionRecordService;
 import com.ydtech.modules.admin.service.SysGeographyPositionService;
@@ -116,9 +115,15 @@ public class SysGeographyPositionServiceImpl extends ServiceImpl<SysGeographyPos
                 .eq(StringUtils.isNotEmpty(sysGeographyPositionDto.getCity()), SysGeographyPosition::getCity, sysGeographyPositionDto.getCity())
                 .eq(StringUtils.isNotEmpty(sysGeographyPositionDto.getDistrict()), SysGeographyPosition::getDistrict, sysGeographyPositionDto.getDistrict())
                 .eq(SysGeographyPosition::getSource, 2));
+        Long onlineNum = sysGeographyPositionMapper.selectCount(new LambdaQueryWrapper<SysGeographyPosition>()
+                .eq(StringUtils.isNotEmpty(sysGeographyPositionDto.getProvince()), SysGeographyPosition::getProvince, sysGeographyPositionDto.getProvince())
+                .eq(StringUtils.isNotEmpty(sysGeographyPositionDto.getCity()), SysGeographyPosition::getCity, sysGeographyPositionDto.getCity())
+                .eq(StringUtils.isNotEmpty(sysGeographyPositionDto.getDistrict()), SysGeographyPosition::getDistrict, sysGeographyPositionDto.getDistrict())
+                .in(SysGeographyPosition::getSource, Arrays.asList("1", "2")).eq(SysGeographyPosition::getStatus,1));
         sysPcAddressNumVo.setAllNum(all);
         sysPcAddressNumVo.setProxyNum(proxyNum);
         sysPcAddressNumVo.setChannelNum(channelNum);
+        sysPcAddressNumVo.setOnlineNum(onlineNum);
 
 
         return sysPcAddressNumVo;
@@ -161,11 +166,13 @@ public class SysGeographyPositionServiceImpl extends ServiceImpl<SysGeographyPos
 
     }
 
+
     @Override
     public List<SysGeographyPositionInfoVo> findLocationsWithinRadius(AdressRangeDto adressRangeDto) {
 
         geoService.addLocationGeography(list(), APP_GEO_KEY);
         List<String> nearbyIds = geoService.findNearbyIds(APP_GEO_KEY, adressRangeDto.getLongitude(), adressRangeDto.getLatitude(), adressRangeDto.getRadius());
+        if (CollectionUtil.isEmpty(nearbyIds)) return new ArrayList<>();
         List<SysGeographyPosition> sysGeographyPositions = listByIds(nearbyIds);
         List<SysGeographyPositionInfoVo> sysGeographyPositionInfoVoList = BeanUtil.copyToList(sysGeographyPositions, SysGeographyPositionInfoVo.class);
         if (sysGeographyPositionInfoVoList.size()==0) return sysGeographyPositionInfoVoList;
@@ -212,5 +219,20 @@ public class SysGeographyPositionServiceImpl extends ServiceImpl<SysGeographyPos
                 sysGeographyPositionList);
     }
 
+    @Override
+    public PcAddressHistoryInfoVo getGeographyPosition(String dates) {
+        PcAddressHistoryInfoVo pcAddressHistoryInfoVo = new PcAddressHistoryInfoVo();
+        List<PcAddressHistoryTimeVo> geographyPosition = sysGeographyPositionRecordMapper.getGeographyPosition(dates);
+        pcAddressHistoryInfoVo.setList(geographyPosition);
+        QueryWrapper<SysGeographyPositionRecord> queryWrapper = new QueryWrapper<>();
+        // 指定 COUNT(DISTINCT user_id) 查询
+        queryWrapper.select("COUNT(DISTINCT user_id) AS total").likeRight(StringUtils.isNotEmpty(dates),"create_time",dates)
+                .in("source",Arrays.asList(1,2));
+        Map<String, Object> result = sysGeographyPositionRecordService.getMap(queryWrapper);
+        Long total = (Long)result.get("total");
+        pcAddressHistoryInfoVo.setOnlineNum(total);
+        return pcAddressHistoryInfoVo;
+    }
+
 
 }

+ 35 - 1
src/main/java/com/ydtech/modules/admin/service/impl/SysPcAddressServiceImpl.java

@@ -2,19 +2,24 @@ package com.ydtech.modules.admin.service.impl;
 
 import cn.hutool.core.collection.CollectionUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ydtech.modules.admin.dao.SysDeptMapper;
+import com.ydtech.modules.admin.dao.SysPcAddressHistoryMapper;
 import com.ydtech.modules.admin.dao.SysPcAddressMapper;
 import com.ydtech.modules.admin.model.SysDept;
 import com.ydtech.modules.admin.model.SysUser;
 import com.ydtech.modules.admin.model.dto.*;
 import com.ydtech.modules.admin.model.po.SysPcAddressHistory;
 import com.ydtech.modules.admin.model.po.SysPcAddress;
+import com.ydtech.modules.admin.model.vo.PcAddressHistoryInfoVo;
+import com.ydtech.modules.admin.model.vo.PcAddressHistoryTimeVo;
 import com.ydtech.modules.admin.model.vo.RegionInfoVo;
 import com.ydtech.modules.admin.service.GeoService;
 import com.ydtech.modules.admin.service.SysPcAddressHistoryService;
 import com.ydtech.modules.admin.service.SysPcAddressService;
+import com.ydtech.modules.admin.service.SysUserService;
 import com.ydtech.modules.order.entity.BasePageResult;
 import com.ydtech.utils.StringUtils;
 import lombok.RequiredArgsConstructor;
@@ -39,7 +44,10 @@ public class SysPcAddressServiceImpl extends ServiceImpl<SysPcAddressMapper, Sys
 
     private final SysPcAddressMapper sysPcAddressMapper;
 
+    private final SysPcAddressHistoryMapper sysPcAddressHistoryMapper;
+
     private final GeoService geoService;
+    private final SysUserService sysUserService;
 
     private static final String PC_GEO_KEY = "PCLocations";
 
@@ -68,7 +76,7 @@ public class SysPcAddressServiceImpl extends ServiceImpl<SysPcAddressMapper, Sys
         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);
@@ -96,6 +104,7 @@ public class SysPcAddressServiceImpl extends ServiceImpl<SysPcAddressMapper, Sys
     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 (CollectionUtil.isEmpty(nearbyIds)) return new ArrayList<>();
         return listByIds(nearbyIds);
     }
 
@@ -119,9 +128,18 @@ public class SysPcAddressServiceImpl extends ServiceImpl<SysPcAddressMapper, Sys
                 .eq(StringUtils.isNotEmpty(sysPcAddressDto.getCity()), SysPcAddress::getCity, sysPcAddressDto.getCity())
                 .eq(StringUtils.isNotEmpty(sysPcAddressDto.getDistrict()), SysPcAddress::getDistrict, sysPcAddressDto.getDistrict())
                 .eq(SysPcAddress::getSource,2));
+
+        Long onlineNum = sysPcAddressMapper.selectCount(new LambdaQueryWrapper<SysPcAddress>()
+                .eq(StringUtils.isNotEmpty(sysPcAddressDto.getProvince()), SysPcAddress::getProvince, sysPcAddressDto.getProvince())
+                .eq(StringUtils.isNotEmpty(sysPcAddressDto.getCity()), SysPcAddress::getCity, sysPcAddressDto.getCity())
+                .eq(StringUtils.isNotEmpty(sysPcAddressDto.getDistrict()), SysPcAddress::getDistrict, sysPcAddressDto.getDistrict())
+                .in(SysPcAddress::getSource, Arrays.asList("1","2")).eq(SysPcAddress::getStatus,1));
+
+
         sysPcAddressNumVo.setAllNum(all);
         sysPcAddressNumVo.setProxyNum(proxyNum);
         sysPcAddressNumVo.setChannelNum(channelNum);
+        sysPcAddressNumVo.setOnlineNum(onlineNum);
 
         return sysPcAddressNumVo;
     }
@@ -179,6 +197,22 @@ public class SysPcAddressServiceImpl extends ServiceImpl<SysPcAddressMapper, Sys
                 insOrdersPage.getRecords());
     }
 
+    @Override
+    public PcAddressHistoryInfoVo getPcAddress(String dates) {
+        PcAddressHistoryInfoVo pcAddressHistoryInfoVo = new PcAddressHistoryInfoVo();
+        List<PcAddressHistoryTimeVo> pcAddress = sysPcAddressHistoryMapper.getPcAddress(dates);
+        pcAddressHistoryInfoVo.setList(pcAddress);
+        QueryWrapper<SysPcAddressHistory> queryWrapper = new QueryWrapper<>();
+        // 指定 COUNT(DISTINCT user_id) 查询
+        queryWrapper.select("COUNT(DISTINCT user_id) AS total").likeRight(StringUtils.isNotEmpty(dates),"operation_time",dates)
+                .in("source",Arrays.asList(1,2));
+        Map<String, Object> result = sysPcAddressHistoryService.getMap(queryWrapper);
+        Long total = (Long)result.get("total");
+        pcAddressHistoryInfoVo.setOnlineNum(total);
+
+        return pcAddressHistoryInfoVo;
+    }
+
 
 }
 

+ 26 - 1
src/main/resources/mapper/modules/admin/SysGeographyPositionRecordMapper.xml

@@ -4,14 +4,39 @@
 
     <resultMap type="com.ydtech.modules.admin.model.SysGeographyPositionRecord" id="SysGeographyPositionRecordMap">
         <result property="id" column="id" jdbcType="VARCHAR"/>
-        <result property="positionId" column="position_id" jdbcType="INTEGER"/>
         <result property="userId" column="user_id" jdbcType="VARCHAR"/>
         <result property="userName" column="user_name" jdbcType="VARCHAR"/>
         <result property="longitude" column="longitude" jdbcType="VARCHAR"/>
         <result property="latitude" column="latitude" jdbcType="VARCHAR"/>
+        <result property="address" column="address" jdbcType="VARCHAR"/>
         <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
         <result property="createBy" column="create_by" jdbcType="VARCHAR"/>
+        <result property="source" column="source" jdbcType="VARCHAR"/>
     </resultMap>
 
+    <select id="getGeographyPosition" resultType="com.ydtech.modules.admin.model.vo.PcAddressHistoryTimeVo">
+        select spa.time ,COUNT(spa.countNum) as countNum
+        from(
+        SELECT
+        DATE_FORMAT(s.create_time, '%Y-%m-%d %H' ) as time,
+        COUNT( DISTINCT s.user_id) as countNum
+        FROM
+        sys_geography_position_record s
+        where
+        s.source in (1,2)
+        <if test="dates != null and dates != ''">
+            and DATE_FORMAT(s.create_time, '%Y-%m-%d' ) = DATE_FORMAT( #{dates}, '%Y-%m-%d' )
+        </if>
+        GROUP BY
+        s.create_time
+        ) as spa
+        GROUP BY
+        spa.time
+        ORDER BY
+        spa.time
+
+    </select>
+
+
 </mapper>
 

+ 28 - 5
src/main/resources/mapper/modules/admin/SysPcAddressHistoryMapper.xml

@@ -13,11 +13,34 @@
             <result property="latitude" column="latitude" jdbcType="VARCHAR"/>
             <result property="address" column="address" jdbcType="VARCHAR"/>
             <result property="operationTime" column="operation_time" jdbcType="TIMESTAMP"/>
+            <result property="province" column="prov" jdbcType="VARCHAR"/>
+            <result property="city" column="city" jdbcType="VARCHAR"/>
+            <result property="district" column="district" jdbcType="VARCHAR"/>
+            <result property="source" column="source" jdbcType="VARCHAR"/>
     </resultMap>
 
-    <sql id="Base_Column_List">
-        id, user_id,user_name,ip,
-        longitude,latitude,address,
-        operation_time
-    </sql>
+
+    <select id="getPcAddress" resultType="com.ydtech.modules.admin.model.vo.PcAddressHistoryTimeVo">
+        select spa.time ,COUNT(spa.countNum) as countNum
+        from(
+        SELECT
+             DATE_FORMAT(s.operation_time, '%Y-%m-%d %H' ) as time,
+             COUNT( DISTINCT s.user_id) as countNum
+             FROM
+                 sys_pc_address_history  s
+
+             where
+                s.source in (1,2)
+                <if test="dates != null and dates != ''">
+                 and DATE_FORMAT(s.operation_time, '%Y-%m-%d' ) = DATE_FORMAT( #{dates}, '%Y-%m-%d' )
+                </if>
+             GROUP BY
+                s.operation_time
+             ) as spa
+        GROUP BY
+            spa.time
+        ORDER BY
+            spa.time
+
+    </select>
 </mapper>

+ 7 - 1
src/main/resources/mapper/modules/admin/SysPcAddressMapper.xml

@@ -12,11 +12,17 @@
             <result property="latitude" column="latitude" jdbcType="VARCHAR"/>
             <result property="address" column="address" jdbcType="VARCHAR"/>
             <result property="operationTime" column="operation_time" jdbcType="TIMESTAMP"/>
+            <result property="province" column="prov" jdbcType="VARCHAR"/>
+            <result property="city" column="city" jdbcType="VARCHAR"/>
+            <result property="district" column="district" jdbcType="VARCHAR"/>
+            <result property="source" column="source" jdbcType="VARCHAR"/>
+            <result property="status" column="status" jdbcType="INTEGER"/>
+            <result property="leaderName" column="leader_name" jdbcType="VARCHAR"/>
     </resultMap>
 
     <sql id="Base_Column_List">
         user_id,user_name,ip,
         longitude,latitude,address,
-        operation_time
+        operation_time,province,city,district,source,status,leaderName
     </sql>
 </mapper>