测试定位打卡

简介: 测试定位打卡
{
    "id": 16,
    "check_grand": null,
    "warn_grand": null,
    "status": 0,
    "rail_name": "测试打卡",
    "rail_contain": 120.66764032547655,30.764092330951797|120.66892242138567,30.764511798223253|120.66924965088549,30.763350192070362|120.66811239426318,30.762898452558346|120.66767787640276,30.763963263731313|120.66764032547655,30.764092330951797
    "rail_remark": null,
    "update_time": "2023-09-20T01:16:57.000+0000",
    "create_time": "2023-09-20T01:16:57.000+0000"
  }
]
/**
 * 新增考勤记录对象 attendance_record
 */
//@PreAuthorize("@ss.hasPermi('record:record:add')")
@Log(title = "考勤记录对象 attendance_record", businessType = BusinessType.INSERT)
@PostMapping
@ApiOperation("新增考勤记录对象 经纬度打卡  签到签到!!!!!")
public AjaxResult add(@RequestBody AttendanceRecorddto AttendanceRecorddto) {
    int i = attendanceRecordService.insertAttendanceRecord(AttendanceRecorddto);
    if (i==1){
        return AjaxResult.success("用户已成功打卡",i);
    }else {
        return AjaxResult.error("打卡失败不在打卡范围内",i);
    }
}
/**
 * 判断是否达到站点电子围栏内
 */
public boolean isInPolygon(String electronicFence, Double lon, Double lat) {
    //获取电子围栏
    String[] split = electronicFence.split("\\|");
    ArrayList<Point2D.Double> placeInnerList = new ArrayList<>();
    for (int i = 0; i < split.length; i++) {
        String positionItem = split[i];
        String[] positionSplit1s = positionItem.split(",");
        if (positionSplit1s.length != 2) {
            continue;
        }
        placeInnerList.add(new Point2D.Double(Double.valueOf(positionSplit1s[0]), Double.valueOf(positionSplit1s[1])));
    }
    Point2D.Double selfPosition = new Point2D.Double(lon, lat);
    GeneralPath generalPath = genGeneralPath(placeInnerList);
    boolean contains = generalPath.contains(selfPosition);
    return contains;
}
//是否在面内
public static GeneralPath genGeneralPath(ArrayList<Point2D.Double> points) {
    GeneralPath path = new GeneralPath();
    if (points.size() < 3) {
        return null;
    }
    path.moveTo((float) points.get(0).getX(), (float) points.get(0).getY());
    for (Iterator<Point2D.Double> it = points.iterator(); it.hasNext(); ) {
        Point2D.Double point = (Point2D.Double) it.next();
        path.lineTo((float) point.getX(), (float) point.getY());
    }
    path.closePath();
    return path;
}
    /**
     * 新增考勤记录对象 attendance_record
     *
     * @return 结果
     */
    @Override
    public int insertAttendanceRecord(AttendanceRecorddto AttendanceRecorddto) {
        int i = 0;
        AttendanceRecorddto.setCreateTime(DateUtils.getNowDate());
        //设置打卡时间
        AttendanceRecorddto.setSignInTime(DateUtils.getNowDate());
        //当前登录用户
        Long userId = SecurityUtils.getLoginUser().getUserId();
        SysUser sysUser = sysUserMapper.selectUserById(userId);
        AttendanceRecorddto.setUserTureName(sysUser.getUserTrueName());
        List<UserRecord> userRecords = SysPostMapper.selectUserByUserTrueName(sysUser.getUserTrueName());
        AttendanceRecorddto.setPostId(userRecords.get(0).getPostId());
        AttendanceRecorddto.setUserId(userId);
        AttendanceRecorddto.setStatus(0l);
        //精度
        double userLatitude = AttendanceRecorddto.getUserLatitude();
//        - --- 30.763973
//        - --- 120.668891
        log.info("---纬度 {}", userLatitude);
        //纬度
        double userLongitude = AttendanceRecorddto.getUserLongitude();
        log.info("---经度 {}", userLongitude);
        String electronicFence = "120.66764032547655,30.764092330951797|120.66892242138567,30.764511798223253|120.66924965088549,30.763350192070362|120.66811239426318,30.762898452558346|120.66767787640276,30.763963263731313|120.66764032547655,30.764092330951797";
//     boolean isWithinCheckInRadius = isInPolygon(userLongitude,userLatitude,partitionLocation);
        boolean isWithinCheckInRadius = isInPolygon(electronicFence, userLongitude, userLatitude);
        if (isWithinCheckInRadius) {
            System.out.println("用户已成功打卡!");
            i = attendanceRecordMapper.insertAttendanceRecord(AttendanceRecorddto);
        } else {
            System.out.println("用户不在打卡范围内,打卡失败!");
        }
        return i;
    }
目录
相关文章
|
6月前
|
编解码 Java 测试技术
『App自动化测试之Appium应用篇』| uiautomator + accessibility_id定位方法完全使用攻略
『App自动化测试之Appium应用篇』| uiautomator + accessibility_id定位方法完全使用攻略
282 0
|
5月前
|
监控 测试技术 UED
软件测试中的性能瓶颈定位与优化策略
在软件开发的生命周期中,性能测试是确保产品质量的关键步骤之一。本文深入探讨了性能测试的重要性,并提出了一套系统的性能瓶颈定位与优化策略。通过分析现代软件系统中常见的性能问题,结合最新的研究成果和行业最佳实践,文章详细介绍了如何运用科学严谨的方法来识别和解决性能瓶颈。此外,本文还强调了逻辑严密的问题分析框架和数据驱动的决策过程对于提升软件性能的重要性。
|
2月前
|
Java 测试技术 Android开发
Android性能测试——发现和定位内存泄露和卡顿
本文详细介绍了Android应用性能测试中的内存泄漏与卡顿问题及其解决方案。首先,文章描述了使用MAT工具定位内存泄漏的具体步骤,并通过实例展示了如何分析Histogram图表和Dominator Tree。接着,针对卡顿问题,文章探讨了其产生原因,并提供了多种测试方法,包括GPU呈现模式分析、FPS Meter软件测试、绘制圆点计数法及Android Studio自带的GPU监控功能。最后,文章给出了排查卡顿问题的四个方向,帮助开发者优化应用性能。
172 4
Android性能测试——发现和定位内存泄露和卡顿
|
1月前
|
网络协议 Ubuntu 前端开发
好好的容器突然起不来,经定位是容器内无法访问外网了?测试又说没改网络配置,该如何定位网络问题
本文记录了一次解决前端应用集成到主应用后出现502错误的问题。通过与测试人员的沟通,最终发现是DNS配置问题导致的。文章详细描述了问题的背景、沟通过程、解决方案,并总结了相关知识点和经验教训,帮助读者学习如何分析和定位网络问题。
103 0
|
2月前
|
缓存 监控 算法
软件测试中的性能瓶颈定位与优化策略
性能瓶颈,如同隐藏在系统深处的“拦路虎”,悄无声息地制约着软件的表现。本文将揭示如何通过一系列科学方法,识别并消除这些障碍,从而显著提升软件性能,确保用户享受到流畅无阻的数字体验。
|
6月前
|
JavaScript Java 测试技术
《手把手教你》系列技巧篇(四十六)-java+ selenium自动化测试-web页面定位toast-下篇(详解教程)
【5月更文挑战第10天】本文介绍了使用Java和Selenium进行Web自动化测试的实践,以安居客网站为例。最后,提到了在浏览器开发者工具中调试和观察页面元素的方法。
64 2
|
6月前
|
测试技术 Python Windows
【如何学习Python自动化测试】—— 多层窗口定位
【如何学习Python自动化测试】—— 多层窗口定位
|
6月前
|
前端开发 JavaScript 测试技术
自动化测试定位方式那么多,应该选哪个?
本文介绍了移动应用自动化测试中的定位策略,包括 ID、XPath、ClassName、AccessibilityID、Name、XPath 模糊定位、Android UI Automator、iOS Predicate 等。在Web测试中,使用class name、css selector、id等定位元素。选择定位器应遵循与研发约定、优先使用特定属性及组合定位的原则。当元素定位不到时,可能因定位信息错误、元素状态等问题,可通过调整策略、等待元素加载或使用JS操作解决。特殊控件如弹框、下拉框等,需采用特定方法如JS注入或send_keys()处理。
|
6月前
|
Web App开发 JavaScript 测试技术
《手把手教你》系列技巧篇(四十五)-java+ selenium自动化测试-web页面定位toast-上篇(详解教程)
【5月更文挑战第9天】本文介绍了在Appium中处理App自动化测试中遇到的Toast元素定位的方法。Toast在Web UI测试中也常见,通常作为轻量级反馈短暂显示。文章提供了两种定位Toast元素的技巧.
61 0
|
6月前
|
XML 数据格式
Xpath高阶定位技巧,轻松玩转App测试元素定位!
XPath是一种用于XML文档中节点定位的语言,支持逻辑运算符(and、or、not)、轴定位、谓词和内置函数。