diff --git a/health/src/main/java/com/ccsens/health/api/WeixinController.java b/health/src/main/java/com/ccsens/health/api/WeixinController.java index fe0dd4f0..0557f9a2 100644 --- a/health/src/main/java/com/ccsens/health/api/WeixinController.java +++ b/health/src/main/java/com/ccsens/health/api/WeixinController.java @@ -202,7 +202,7 @@ public class WeixinController { * @param bind * @return */ - @PostMapping("initMsg") + @PostMapping(value="initMsg", produces = {"application/json;charset=UTF-8"}) public JsonResponse bindUser(@RequestBody EmployeeDto.Bind bind) { Employee employee = weiXinService.bindUser(bind); return JsonResponse.newInstance().ok(employee); diff --git a/health/src/main/java/com/ccsens/health/bean/dto/ClockDto.java b/health/src/main/java/com/ccsens/health/bean/dto/ClockDto.java index eda2f651..acf44270 100644 --- a/health/src/main/java/com/ccsens/health/bean/dto/ClockDto.java +++ b/health/src/main/java/com/ccsens/health/bean/dto/ClockDto.java @@ -4,15 +4,26 @@ import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import javax.validation.constraints.NotNull; +import java.math.BigDecimal; + @Data public class ClockDto { @Data @ApiModel("场景id") public static class SiteDto{ + @NotNull @ApiModelProperty("token") private Long token; + @NotNull @ApiModelProperty("场景二维码id") private Long siteId; + @NotNull + @ApiModelProperty("定位-经度") + private BigDecimal locationLongitude; + @NotNull + @ApiModelProperty("纬度") + private BigDecimal locationLatitude; } @Data diff --git a/health/src/main/java/com/ccsens/health/bean/po/SiteClockIn.java b/health/src/main/java/com/ccsens/health/bean/po/SiteClockIn.java index 6729950a..9494456d 100644 --- a/health/src/main/java/com/ccsens/health/bean/po/SiteClockIn.java +++ b/health/src/main/java/com/ccsens/health/bean/po/SiteClockIn.java @@ -1,6 +1,7 @@ package com.ccsens.health.bean.po; import java.io.Serializable; +import java.math.BigDecimal; import java.util.Date; public class SiteClockIn implements Serializable { @@ -10,7 +11,9 @@ public class SiteClockIn implements Serializable { private Long time; - private String location; + private BigDecimal locationLongitude; + + private BigDecimal locationLatitude; private Long userId; @@ -46,12 +49,20 @@ public class SiteClockIn implements Serializable { this.time = time; } - public String getLocation() { - return location; + public BigDecimal getLocationLongitude() { + return locationLongitude; + } + + public void setLocationLongitude(BigDecimal locationLongitude) { + this.locationLongitude = locationLongitude; + } + + public BigDecimal getLocationLatitude() { + return locationLatitude; } - public void setLocation(String location) { - this.location = location == null ? null : location.trim(); + public void setLocationLatitude(BigDecimal locationLatitude) { + this.locationLatitude = locationLatitude; } public Long getUserId() { @@ -95,7 +106,8 @@ public class SiteClockIn implements Serializable { sb.append(", id=").append(id); sb.append(", qrcodeId=").append(qrcodeId); sb.append(", time=").append(time); - sb.append(", location=").append(location); + sb.append(", locationLongitude=").append(locationLongitude); + sb.append(", locationLatitude=").append(locationLatitude); sb.append(", userId=").append(userId); sb.append(", createdAt=").append(createdAt); sb.append(", updatedAt=").append(updatedAt); diff --git a/health/src/main/java/com/ccsens/health/bean/po/SiteClockInExample.java b/health/src/main/java/com/ccsens/health/bean/po/SiteClockInExample.java index 2900acc6..15f4f730 100644 --- a/health/src/main/java/com/ccsens/health/bean/po/SiteClockInExample.java +++ b/health/src/main/java/com/ccsens/health/bean/po/SiteClockInExample.java @@ -1,5 +1,6 @@ package com.ccsens.health.bean.po; +import java.math.BigDecimal; import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -285,73 +286,123 @@ public class SiteClockInExample { return (Criteria) this; } - public Criteria andLocationIsNull() { - addCriterion("location is null"); + public Criteria andLocationLongitudeIsNull() { + addCriterion("location_longitude is null"); return (Criteria) this; } - public Criteria andLocationIsNotNull() { - addCriterion("location is not null"); + public Criteria andLocationLongitudeIsNotNull() { + addCriterion("location_longitude is not null"); return (Criteria) this; } - public Criteria andLocationEqualTo(String value) { - addCriterion("location =", value, "location"); + public Criteria andLocationLongitudeEqualTo(BigDecimal value) { + addCriterion("location_longitude =", value, "locationLongitude"); return (Criteria) this; } - public Criteria andLocationNotEqualTo(String value) { - addCriterion("location <>", value, "location"); + public Criteria andLocationLongitudeNotEqualTo(BigDecimal value) { + addCriterion("location_longitude <>", value, "locationLongitude"); return (Criteria) this; } - public Criteria andLocationGreaterThan(String value) { - addCriterion("location >", value, "location"); + public Criteria andLocationLongitudeGreaterThan(BigDecimal value) { + addCriterion("location_longitude >", value, "locationLongitude"); return (Criteria) this; } - public Criteria andLocationGreaterThanOrEqualTo(String value) { - addCriterion("location >=", value, "location"); + public Criteria andLocationLongitudeGreaterThanOrEqualTo(BigDecimal value) { + addCriterion("location_longitude >=", value, "locationLongitude"); return (Criteria) this; } - public Criteria andLocationLessThan(String value) { - addCriterion("location <", value, "location"); + public Criteria andLocationLongitudeLessThan(BigDecimal value) { + addCriterion("location_longitude <", value, "locationLongitude"); return (Criteria) this; } - public Criteria andLocationLessThanOrEqualTo(String value) { - addCriterion("location <=", value, "location"); + public Criteria andLocationLongitudeLessThanOrEqualTo(BigDecimal value) { + addCriterion("location_longitude <=", value, "locationLongitude"); return (Criteria) this; } - public Criteria andLocationLike(String value) { - addCriterion("location like", value, "location"); + public Criteria andLocationLongitudeIn(List values) { + addCriterion("location_longitude in", values, "locationLongitude"); return (Criteria) this; } - public Criteria andLocationNotLike(String value) { - addCriterion("location not like", value, "location"); + public Criteria andLocationLongitudeNotIn(List values) { + addCriterion("location_longitude not in", values, "locationLongitude"); return (Criteria) this; } - public Criteria andLocationIn(List values) { - addCriterion("location in", values, "location"); + public Criteria andLocationLongitudeBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("location_longitude between", value1, value2, "locationLongitude"); return (Criteria) this; } - public Criteria andLocationNotIn(List values) { - addCriterion("location not in", values, "location"); + public Criteria andLocationLongitudeNotBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("location_longitude not between", value1, value2, "locationLongitude"); return (Criteria) this; } - public Criteria andLocationBetween(String value1, String value2) { - addCriterion("location between", value1, value2, "location"); + public Criteria andLocationLatitudeIsNull() { + addCriterion("location_latitude is null"); return (Criteria) this; } - public Criteria andLocationNotBetween(String value1, String value2) { - addCriterion("location not between", value1, value2, "location"); + public Criteria andLocationLatitudeIsNotNull() { + addCriterion("location_latitude is not null"); + return (Criteria) this; + } + + public Criteria andLocationLatitudeEqualTo(BigDecimal value) { + addCriterion("location_latitude =", value, "locationLatitude"); + return (Criteria) this; + } + + public Criteria andLocationLatitudeNotEqualTo(BigDecimal value) { + addCriterion("location_latitude <>", value, "locationLatitude"); + return (Criteria) this; + } + + public Criteria andLocationLatitudeGreaterThan(BigDecimal value) { + addCriterion("location_latitude >", value, "locationLatitude"); + return (Criteria) this; + } + + public Criteria andLocationLatitudeGreaterThanOrEqualTo(BigDecimal value) { + addCriterion("location_latitude >=", value, "locationLatitude"); + return (Criteria) this; + } + + public Criteria andLocationLatitudeLessThan(BigDecimal value) { + addCriterion("location_latitude <", value, "locationLatitude"); + return (Criteria) this; + } + + public Criteria andLocationLatitudeLessThanOrEqualTo(BigDecimal value) { + addCriterion("location_latitude <=", value, "locationLatitude"); + return (Criteria) this; + } + + public Criteria andLocationLatitudeIn(List values) { + addCriterion("location_latitude in", values, "locationLatitude"); + return (Criteria) this; + } + + public Criteria andLocationLatitudeNotIn(List values) { + addCriterion("location_latitude not in", values, "locationLatitude"); + return (Criteria) this; + } + + public Criteria andLocationLatitudeBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("location_latitude between", value1, value2, "locationLatitude"); + return (Criteria) this; + } + + public Criteria andLocationLatitudeNotBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("location_latitude not between", value1, value2, "locationLatitude"); return (Criteria) this; } diff --git a/health/src/main/java/com/ccsens/health/service/ClockService.java b/health/src/main/java/com/ccsens/health/service/ClockService.java index 68329218..3d3e9714 100644 --- a/health/src/main/java/com/ccsens/health/service/ClockService.java +++ b/health/src/main/java/com/ccsens/health/service/ClockService.java @@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Snowflake; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import cn.hutool.core.util.ZipUtil; import com.ccsens.cloudutil.feign.TallFeignClient; import com.ccsens.health.bean.dto.ClockDto; import com.ccsens.health.bean.dto.HealthDto; @@ -14,15 +15,13 @@ import com.ccsens.health.bean.vo.HealthVo; import com.ccsens.health.persist.dao.SiteClockInDao; import com.ccsens.health.persist.dao.SiteDao; import com.ccsens.health.persist.dao.SiteQrcodeDao; -import com.ccsens.util.CodeEnum; -import com.ccsens.util.DateUtil; -import com.ccsens.util.QrCodeUtil; -import com.ccsens.util.WebConstant; +import com.ccsens.util.*; import com.ccsens.util.bean.dto.QueryDto; import com.ccsens.util.exception.BaseException; import com.ccsens.util.wx.WxXcxUtil; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -31,6 +30,7 @@ import java.util.ArrayList; import java.util.Date; import java.util.List; +@Slf4j @Service public class ClockService implements IClockService { @Autowired @@ -56,6 +56,20 @@ public class ClockService implements IClockService { //1、获取打卡信息和userId ClockDto.SiteDto clickIn = params.getParam(); Long userId = params.getUserId(); + //获取场所ID + Site site = siteDao.selectByPrimaryKey(clickIn.getSiteId()); + log.info("场所信息:{}", site); + if (site == null) { + throw new BaseException(CodeEnum.PARAM_ERROR); + } + + //判断经纬度是否正确 + boolean inCircle = DistanceUtil.isInCircle(site.getLongitude(), site.getLatitude(), clickIn.getLocationLongitude(), clickIn.getLocationLatitude(), "0.05"); + log.info("是否在半径内:{}", inCircle); + if (!inCircle) { + throw new BaseException(CodeEnum.LOCATION_LONG); + } + // //2、通过userId获取成员id // Employee employee = userService.getEmployeeByUserId(userId); //添加打卡记录 diff --git a/health/src/main/resources/mapper_raw/SiteClockInMapper.xml b/health/src/main/resources/mapper_raw/SiteClockInMapper.xml index a2d3e521..c44ed3fb 100644 --- a/health/src/main/resources/mapper_raw/SiteClockInMapper.xml +++ b/health/src/main/resources/mapper_raw/SiteClockInMapper.xml @@ -5,7 +5,8 @@ - + + @@ -70,7 +71,8 @@ - id, qrcode_id, time, location, user_id, created_at, updated_at, rec_status + id, qrcode_id, time, location_longitude, location_latitude, user_id, created_at, + updated_at, rec_status