Browse Source

Merge branch 'master' of gitee.com:ccsens_s/ccsenscloud

master
zhangye 5 years ago
parent
commit
5ec9c75639
  1. 2
      health/src/main/java/com/ccsens/health/api/WeixinController.java
  2. 11
      health/src/main/java/com/ccsens/health/bean/dto/ClockDto.java
  3. 24
      health/src/main/java/com/ccsens/health/bean/po/SiteClockIn.java
  4. 107
      health/src/main/java/com/ccsens/health/bean/po/SiteClockInExample.java
  5. 22
      health/src/main/java/com/ccsens/health/service/ClockService.java
  6. 50
      health/src/main/resources/mapper_raw/SiteClockInMapper.xml
  7. 9
      tall/src/main/java/com/ccsens/tall/service/UserService.java
  8. 1
      util/src/main/java/com/ccsens/util/CodeEnum.java
  9. 48
      util/src/main/java/com/ccsens/util/DistanceUtil.java

2
health/src/main/java/com/ccsens/health/api/WeixinController.java

@ -202,7 +202,7 @@ public class WeixinController {
* @param bind
* @return
*/
@GetMapping("initMsg")
@PostMapping(value="initMsg", produces = {"application/json;charset=UTF-8"})
public JsonResponse<Employee> bindUser(@RequestBody EmployeeDto.Bind bind) {
Employee employee = weiXinService.bindUser(bind);
return JsonResponse.newInstance().ok(employee);

11
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

24
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);

107
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<BigDecimal> 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<BigDecimal> values) {
addCriterion("location_longitude not in", values, "locationLongitude");
return (Criteria) this;
}
public Criteria andLocationIn(List<String> 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<String> 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<BigDecimal> values) {
addCriterion("location_latitude in", values, "locationLatitude");
return (Criteria) this;
}
public Criteria andLocationLatitudeNotIn(List<BigDecimal> 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;
}

22
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);
//添加打卡记录

50
health/src/main/resources/mapper_raw/SiteClockInMapper.xml

@ -5,7 +5,8 @@
<id column="id" jdbcType="BIGINT" property="id" />
<result column="qrcode_id" jdbcType="BIGINT" property="qrcodeId" />
<result column="time" jdbcType="BIGINT" property="time" />
<result column="location" jdbcType="VARCHAR" property="location" />
<result column="location_longitude" jdbcType="DECIMAL" property="locationLongitude" />
<result column="location_latitude" jdbcType="DECIMAL" property="locationLatitude" />
<result column="user_id" jdbcType="BIGINT" property="userId" />
<result column="created_at" jdbcType="TIMESTAMP" property="createdAt" />
<result column="updated_at" jdbcType="TIMESTAMP" property="updatedAt" />
@ -70,7 +71,8 @@
</where>
</sql>
<sql id="Base_Column_List">
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
</sql>
<select id="selectByExample" parameterType="com.ccsens.health.bean.po.SiteClockInExample" resultMap="BaseResultMap">
select
@ -104,11 +106,13 @@
</delete>
<insert id="insert" parameterType="com.ccsens.health.bean.po.SiteClockIn">
insert into t_site_clock_in (id, qrcode_id, time,
location, user_id, created_at,
updated_at, rec_status)
location_longitude, location_latitude, user_id,
created_at, updated_at, rec_status
)
values (#{id,jdbcType=BIGINT}, #{qrcodeId,jdbcType=BIGINT}, #{time,jdbcType=BIGINT},
#{location,jdbcType=VARCHAR}, #{userId,jdbcType=BIGINT}, #{createdAt,jdbcType=TIMESTAMP},
#{updatedAt,jdbcType=TIMESTAMP}, #{recStatus,jdbcType=TINYINT})
#{locationLongitude,jdbcType=DECIMAL}, #{locationLatitude,jdbcType=DECIMAL}, #{userId,jdbcType=BIGINT},
#{createdAt,jdbcType=TIMESTAMP}, #{updatedAt,jdbcType=TIMESTAMP}, #{recStatus,jdbcType=TINYINT}
)
</insert>
<insert id="insertSelective" parameterType="com.ccsens.health.bean.po.SiteClockIn">
insert into t_site_clock_in
@ -122,8 +126,11 @@
<if test="time != null">
time,
</if>
<if test="location != null">
location,
<if test="locationLongitude != null">
location_longitude,
</if>
<if test="locationLatitude != null">
location_latitude,
</if>
<if test="userId != null">
user_id,
@ -148,8 +155,11 @@
<if test="time != null">
#{time,jdbcType=BIGINT},
</if>
<if test="location != null">
#{location,jdbcType=VARCHAR},
<if test="locationLongitude != null">
#{locationLongitude,jdbcType=DECIMAL},
</if>
<if test="locationLatitude != null">
#{locationLatitude,jdbcType=DECIMAL},
</if>
<if test="userId != null">
#{userId,jdbcType=BIGINT},
@ -183,8 +193,11 @@
<if test="record.time != null">
time = #{record.time,jdbcType=BIGINT},
</if>
<if test="record.location != null">
location = #{record.location,jdbcType=VARCHAR},
<if test="record.locationLongitude != null">
location_longitude = #{record.locationLongitude,jdbcType=DECIMAL},
</if>
<if test="record.locationLatitude != null">
location_latitude = #{record.locationLatitude,jdbcType=DECIMAL},
</if>
<if test="record.userId != null">
user_id = #{record.userId,jdbcType=BIGINT},
@ -208,7 +221,8 @@
set id = #{record.id,jdbcType=BIGINT},
qrcode_id = #{record.qrcodeId,jdbcType=BIGINT},
time = #{record.time,jdbcType=BIGINT},
location = #{record.location,jdbcType=VARCHAR},
location_longitude = #{record.locationLongitude,jdbcType=DECIMAL},
location_latitude = #{record.locationLatitude,jdbcType=DECIMAL},
user_id = #{record.userId,jdbcType=BIGINT},
created_at = #{record.createdAt,jdbcType=TIMESTAMP},
updated_at = #{record.updatedAt,jdbcType=TIMESTAMP},
@ -226,8 +240,11 @@
<if test="time != null">
time = #{time,jdbcType=BIGINT},
</if>
<if test="location != null">
location = #{location,jdbcType=VARCHAR},
<if test="locationLongitude != null">
location_longitude = #{locationLongitude,jdbcType=DECIMAL},
</if>
<if test="locationLatitude != null">
location_latitude = #{locationLatitude,jdbcType=DECIMAL},
</if>
<if test="userId != null">
user_id = #{userId,jdbcType=BIGINT},
@ -248,7 +265,8 @@
update t_site_clock_in
set qrcode_id = #{qrcodeId,jdbcType=BIGINT},
time = #{time,jdbcType=BIGINT},
location = #{location,jdbcType=VARCHAR},
location_longitude = #{locationLongitude,jdbcType=DECIMAL},
location_latitude = #{locationLatitude,jdbcType=DECIMAL},
user_id = #{userId,jdbcType=BIGINT},
created_at = #{createdAt,jdbcType=TIMESTAMP},
updated_at = #{updatedAt,jdbcType=TIMESTAMP},

9
tall/src/main/java/com/ccsens/tall/service/UserService.java

@ -422,13 +422,12 @@ public class UserService implements IUserService {
}
if (CollectionUtil.isEmpty(authList)) {
List<SysAuth> sysAuthList = null;
if (ObjectUtil.isNotNull(unionId)) {
if (ObjectUtil.isNotNull(unionId) && identifyType == WebConstant.IDENTIFY_TYPE.Wxmp.value) {
SysAuthExample sysAuthExample = new SysAuthExample();
sysAuthExample.createCriteria().andCredentialEqualTo(unionId);
sysAuthList = authDao.selectByExample(sysAuthExample);
}
if (CollectionUtil.isNotEmpty(sysAuthList)) {
if (identifyType == WebConstant.IDENTIFY_TYPE.Wxmp.value) {
//添加认证方式
theAuth = new SysAuth();
theAuth.setId(snowflake.nextId());
@ -437,9 +436,7 @@ public class UserService implements IUserService {
theAuth.setIdentifier(openId);
theAuth.setCredential(unionId);
authDao.insertSelective(theAuth);
} else {
theAuth = sysAuthList.get(0);
}
} else {
//新建用户并保存微信信息
@ -493,7 +490,7 @@ public class UserService implements IUserService {
map.put("userid", userid);
map.put("corpid", corpId);
String result = RestTemplateUtil.postBody(redirect, map);
log.info("{}绑定关系结果:{}", result);
log.info("{}绑定关系结果:{}", map, result);
JSONObject json = JSONObject.parseObject(result);
if (json.getIntValue("code") == 0) {

1
util/src/main/java/com/ccsens/util/CodeEnum.java

@ -102,6 +102,7 @@ public enum CodeEnum {
NOT_BUSINESS(85,"未找到商户信息",true),
SITE_EXCEED(86,"您所添加的场所数量已超出上限,请联系客服提高场所上限",true),
SITE_NAME_REPETITION(86,"场所名重复",true),
LOCATION_LONG(87,"对不起,您的距离太远了,请靠近目的地后重试。",true),
;
public CodeEnum addMsg(String msg){

48
util/src/main/java/com/ccsens/util/DistanceUtil.java

@ -0,0 +1,48 @@
package com.ccsens.util;
import lombok.extern.slf4j.Slf4j;
import java.math.BigDecimal;
@Slf4j
public class DistanceUtil {
private static double EARTH_RADIUS = 6378.137;
private static BigDecimal rad(BigDecimal d) {
return d.multiply(new BigDecimal(Math.PI)).divide(new BigDecimal(180.0));
}
/**
* 通过经纬度获取距离(单位)
*
* @param lat1
* @param lng1
* @param lat2
* @param lng2
* @return
*/
public static double getDistance(BigDecimal lat1, BigDecimal lng1, BigDecimal lat2,
BigDecimal lng2) {
log.info("坐标:{},{},{},{}", lat1, lng1, lat2, lng2);
BigDecimal radLat1 = rad(lat1);
BigDecimal radLat2 = rad(lat2);
BigDecimal a = radLat1.subtract(radLat2);
BigDecimal b = rad(lng1).subtract(rad(lng2));
double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a.divide(new BigDecimal(2)).doubleValue()), 2) +
Math.cos(radLat1.doubleValue()) * Math.cos(radLat2.doubleValue()) * Math.pow(Math.sin(b.divide(new BigDecimal(2)).doubleValue()), 2)));
s = s * EARTH_RADIUS;
s = Math.round(s * 10000d) / 10000d;
log.info("距离:{}", s);
return s;
}
/**
* 判断一个点是否在圆形区域内
*/
public static boolean isInCircle(BigDecimal lng1, BigDecimal lat1, BigDecimal lng2, BigDecimal lat2, String radius) {
log.info("判断距离参数:{},{},{},{},{}", lat1, lng1, lat2, lng2,radius);
return getDistance(lat1, lng1, lat2, lng2) > Double.parseDouble(radius);
}
}
Loading…
Cancel
Save