测试定位打卡

简介: 测试定位打卡
{
    "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;
    }
目录
相关文章
|
5月前
|
编解码 Java 测试技术
『App自动化测试之Appium应用篇』| uiautomator + accessibility_id定位方法完全使用攻略
『App自动化测试之Appium应用篇』| uiautomator + accessibility_id定位方法完全使用攻略
130 0
|
3月前
|
人工智能 前端开发 Java
软件测试/人工智能|熟练使用web控件定位技巧,提升测试工作效率!
软件测试/人工智能|熟练使用web控件定位技巧,提升测试工作效率!
197 1
|
5月前
|
SQL 前端开发 测试技术
软件测试/测试开发|如何定位bug,一篇文章告诉你
软件测试/测试开发|如何定位bug,一篇文章告诉你
49 0
|
5月前
|
前端开发 测试技术 Python
软件测试/测试开发|Python selenium CSS定位方法详解
软件测试/测试开发|Python selenium CSS定位方法详解
30 0
|
5月前
|
XML 人工智能 测试技术
软件测试/人工智能|详解selenium xpath定位
软件测试/人工智能|详解selenium xpath定位
53 2
|
10月前
|
移动开发 定位技术 API
百度地图开发:H5获取GPS-wg84经纬度与百度定位API的偏差测试
百度地图开发:H5获取GPS-wg84经纬度与百度定位API的偏差测试
143 0
|
12月前
|
测试技术
Sonic 开源移动端云真机测试平台 - 用例编写与回放流程实例演示,任务定时执行、图像相似度定位、公共步骤、公共参数、测试套件等(下)
Sonic 开源移动端云真机测试平台 - 用例编写与回放流程实例演示,任务定时执行、图像相似度定位、公共步骤、公共参数、测试套件等(下)
201 0
|
12月前
|
测试技术 数据安全/隐私保护
Sonic 开源移动端云真机测试平台 - 用例编写与回放流程实例演示,任务定时执行、图像相似度定位、公共步骤、公共参数、测试套件等(上)
Sonic 开源移动端云真机测试平台 - 用例编写与回放流程实例演示,任务定时执行、图像相似度定位、公共步骤、公共参数、测试套件等
533 0
麒麟系统开发笔记(十一):在国产麒麟系统上使用gdb定位崩溃异常方法流程进阶定位代码行数及专项测试Demo
上一篇,通过研究,可以定位到函数,本篇进一步优化,没有行数,程序较为复杂的时候,就无法定位,所以进一步定位。   本篇做了qBreakpad的研究,但是没有成功,过程也还是填出来,后来突然注意到gdb出现行数的方法,并通过了几轮测试以及实战,确实可以定位到行数,所以为了大家方便,把国企麒麟上的Qt崩溃方法分享出来。   本篇文章比较长,就不分篇了,同时还做了专项测试。
麒麟系统开发笔记(十一):在国产麒麟系统上使用gdb定位崩溃异常方法流程进阶定位代码行数及专项测试Demo
|
NoSQL Ubuntu
麟系统开发笔记(十):在国产麒麟系统上使用gdb定位崩溃异常方法流程以及测试Demo
本篇就适合代码崩溃的方法,可以定位到代码崩溃原因,测试Demo。
麟系统开发笔记(十):在国产麒麟系统上使用gdb定位崩溃异常方法流程以及测试Demo

热门文章

最新文章