测试定位打卡

简介: 测试定位打卡
{
    "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定位方法完全使用攻略
133 0
|
4天前
|
JavaScript Java 测试技术
《手把手教你》系列技巧篇(四十六)-java+ selenium自动化测试-web页面定位toast-下篇(详解教程)
【5月更文挑战第10天】本文介绍了使用Java和Selenium进行Web自动化测试的实践,以安居客网站为例。最后,提到了在浏览器开发者工具中调试和观察页面元素的方法。
15 2
|
5天前
|
Web App开发 JavaScript 测试技术
《手把手教你》系列技巧篇(四十五)-java+ selenium自动化测试-web页面定位toast-上篇(详解教程)
【5月更文挑战第9天】本文介绍了在Appium中处理App自动化测试中遇到的Toast元素定位的方法。Toast在Web UI测试中也常见,通常作为轻量级反馈短暂显示。文章提供了两种定位Toast元素的技巧.
11 0
|
6天前
|
测试技术 Python Windows
【如何学习Python自动化测试】—— 多层窗口定位
【如何学习Python自动化测试】—— 多层窗口定位
8 1
|
6天前
|
XML 数据格式
Xpath高阶定位技巧,轻松玩转App测试元素定位!
XPath是一种用于XML文档中节点定位的语言,支持逻辑运算符(and、or、not)、轴定位、谓词和内置函数。
19 0
|
6天前
|
前端开发 JavaScript 测试技术
自动化测试定位方式那么多,应该选哪个?
本文介绍了移动应用自动化测试中的定位策略,包括 ID、XPath、ClassName、AccessibilityID、Name、XPath 模糊定位、Android UI Automator、iOS Predicate 等。在Web测试中,使用class name、css selector、id等定位元素。选择定位器应遵循与研发约定、优先使用特定属性及组合定位的原则。当元素定位不到时,可能因定位信息错误、元素状态等问题,可通过调整策略、等待元素加载或使用JS操作解决。特殊控件如弹框、下拉框等,需采用特定方法如JS注入或send_keys()处理。
13 3
|
6天前
|
测试技术 Android开发 索引
XPath定位如何在App自动化测试中大显神威
本文介绍了如何在Appium中使用XPath进行自动化App测试。通过淘宝App实例,展示了XPath在定位元素上的应用,包括基础定位(如通过text、resource-id、class和content-desc属性),contains模糊定位,组合定位以及层级定位(如父、子、兄弟和祖元素定位)。XPath的灵活性和强大功能使得在Appium中高效地定位元素成为可能,从而提升移动应用的测试效率。
17 0
|
6天前
|
人工智能 前端开发 Java
软件测试/人工智能|熟练使用web控件定位技巧,提升测试工作效率!
软件测试/人工智能|熟练使用web控件定位技巧,提升测试工作效率!
200 1
|
6天前
|
SQL 前端开发 测试技术
软件测试/测试开发|如何定位bug,一篇文章告诉你
软件测试/测试开发|如何定位bug,一篇文章告诉你
52 0
|
6天前
|
前端开发 测试技术 Python
软件测试/测试开发|Python selenium CSS定位方法详解
软件测试/测试开发|Python selenium CSS定位方法详解
31 0

热门文章

最新文章