记得上下班打卡 | git大法好,push需谨慎

Commit ec009028 authored by wangyifan's avatar wangyifan

Merge branch 'master' into dev-wyf-partner

parents 9d326f4c 0146c258
ALTER TABLE `smile_volunteers`
ADD COLUMN `nation` varchar(16) NOT NULL DEFAULT '' COMMENT '民族' AFTER `sex`;
package com.liquidnet.service.goblin.constant;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/**
* 中国民族(GB/T 3304),汉族置顶便于前端默认选中。
*/
public final class NationConst {
private NationConst() {
}
public static final List<String> NATIONS = Collections.unmodifiableList(Arrays.asList(
"汉族", "蒙古族", "回族", "藏族", "维吾尔族", "苗族", "彝族", "壮族", "布依族", "朝鲜族",
"满族", "侗族", "瑶族", "白族", "土家族", "哈尼族", "哈萨克族", "傣族", "黎族", "傈僳族",
"佤族", "畲族", "高山族", "拉祜族", "水族", "东乡族", "纳西族", "景颇族", "柯尔克孜族", "土族",
"达斡尔族", "仫佬族", "羌族", "布朗族", "撒拉族", "毛南族", "仡佬族", "锡伯族", "阿昌族", "普米族",
"塔吉克族", "怒族", "乌孜别克族", "俄罗斯族", "鄂温克族", "德昂族", "保安族", "裕固族", "京族", "塔塔尔族",
"独龙族", "鄂伦春族", "赫哲族", "门巴族", "珞巴族", "基诺族"
));
private static final Set<String> NATION_SET = Collections.unmodifiableSet(new HashSet<>(NATIONS));
public static boolean isValid(String nation) {
return nation != null && NATION_SET.contains(nation.trim());
}
}
......@@ -28,6 +28,8 @@ public class SmileVolunteersDetailsVo implements Cloneable {
private String idCard;
@ApiModelProperty(value = "性别", example = "")
private Integer sex;
@ApiModelProperty(value = "民族", example = "")
private String nation;
@ApiModelProperty(value = "审核状态", example = "")
private Integer status;
@ApiModelProperty(value = "学校", example = "")
......@@ -65,6 +67,7 @@ public class SmileVolunteersDetailsVo implements Cloneable {
this.setImg(source.getImg());
this.setIdCard(source.getIdCard());
this.setSex(source.getSex());
this.setNation(source.getNation());
this.setStatus(source.getStatus());
this.setSchool(source.getSchool());
this.setSchoolAddress(source.getSchoolAddress());
......
......@@ -36,6 +36,8 @@ public class SmileVolunteersApplyParam implements Serializable {
private String idCard;
@ApiModelProperty(value = "性别[0-未知|1-男|2-女]")
private Integer sex;
@ApiModelProperty(value = "民族,参见 /volunteers/nations")
private String nation;
@ApiModelProperty(value = "学校名称")
private String school;
@ApiModelProperty(value = "学校地址")
......
......@@ -18,4 +18,6 @@ public interface SmileVolunteersService {
ResponseDto<SmileVProjectVo> projectDetails(String uid, String projectId);
ResponseDto<Boolean> apply(SmileVolunteersApplyParam param);
ResponseDto<List<String>> nations();
}
package com.liquidnet.service.sweet.dto.param;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import java.io.Serializable;
import java.util.Map;
@ApiModel(value = "SweetFormSubmissionParam", description = "动态表单报名入参")
@Data
public class SweetFormSubmissionParam implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(position = 1, required = true, value = "活动名称/标识", example = "talent_2026_spring")
@NotBlank(message = "请填写活动名称")
private String activityName;
@ApiModelProperty(position = 2, required = true, value = "报名字段与值,key 为字段名")
@NotEmpty(message = "请填写报名信息")
private Map<String, Object> data;
}
package com.liquidnet.service.sweet.service;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.sweet.dto.param.SweetFormSubmissionParam;
/**
* 动态表单报名
*/
public interface ISweetFormSubmissionService {
ResponseDto<Boolean> submit(SweetFormSubmissionParam param);
}
......@@ -47,6 +47,12 @@
<input name="sex" class="form-control" type="text" th:if="*{sex==2}" th:value="女" readonly required>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label is-required">民族:</label>
<div class="col-sm-8">
<input name="nation" class="form-control" type="text" th:value="*{nation}" readonly required>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label is-required">学校:</label>
<div class="col-sm-8">
......
......@@ -107,6 +107,10 @@
field: 'sex',
title: '性别'
},
{
field: 'nation',
title: '民族'
},
{
field: 'phone',
title: '手机号'
......
......@@ -16,6 +16,8 @@ public class VolunteersExportVo implements Serializable, Cloneable{
private String idCard;
@Excel(name = "性别", cellType = Excel.ColumnType.STRING)
private String sex;
@Excel(name = "民族", cellType = Excel.ColumnType.STRING)
private String nation;
@Excel(name = "审核状态", cellType = Excel.ColumnType.STRING)
private String status;
@Excel(name = "学校", cellType = Excel.ColumnType.STRING)
......@@ -56,6 +58,7 @@ public class VolunteersExportVo implements Serializable, Cloneable{
this.setName(source.getName());
this.setIdCard(source.getIdCard());
this.setSex(source.getSex());
this.setNation(source.getNation());
this.setStatus(source.getStatus());
this.setSchool(source.getSchool());
// this.setSchoolAddress(source.getSchoolAddress());
......
......@@ -56,6 +56,11 @@ public class SmileVolunteers implements Serializable ,Cloneable{
*/
private Integer sex;
/**
* 民族
*/
private String nation;
/**
* 状态[0-待审核|1-审核通过|2-审核未通过]
*/
......
......@@ -12,6 +12,7 @@ public class VolunteersExportDto implements Serializable, Cloneable {
private String name;
private String idCard;
private String sex;
private String nation;
private String status;
private String school;
private String schoolAddress;
......
......@@ -9,6 +9,7 @@
<result column="name" property="name"/>
<result column="id_card" property="idCard"/>
<result column="sex" property="sex"/>
<result column="nation" property="nation"/>
<result column="status" property="status"/>
<result column="school" property="school"/>
<result column="school_address" property="schoolAddress"/>
......@@ -35,6 +36,7 @@
WHEN sex = 1 THEN '男'
WHEN sex = 2 THEN '女'
ELSE '其他' END) as 'sex',
sv.nation,
(CASE
WHEN sv.status = 0 THEN '待审核'
WHEN sv.status = 1 THEN '审核通过'
......
package com.liquidnet.service.sweet.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* 动态表单报名提交表
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class SweetFormSubmission implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "mid", type = IdType.AUTO)
private Long mid;
/**
* 提交ID
*/
private String submissionId;
/**
* 活动名称/标识
*/
private String activityName;
/**
* 报名数据 JSON
*/
private String data;
/**
* 创建时间
*/
private LocalDateTime createdAt;
/**
* 更新时间
*/
private LocalDateTime updatedAt;
}
package com.liquidnet.service.sweet.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.liquidnet.service.sweet.entity.SweetFormSubmission;
/**
* 动态表单报名提交表 Mapper
*/
public interface SweetFormSubmissionMapper extends BaseMapper<SweetFormSubmission> {
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.liquidnet.service.sweet.mapper.SweetFormSubmissionMapper">
</mapper>
......@@ -71,7 +71,8 @@ public interface FeignAdamBaseClient {
@NotBlank(message = "手机号不能为空")
@RequestParam(value = "mobile") String mobile,
@NotBlank(message = "临时票据不能为空")
@RequestParam(value = "otp") String otp);
@RequestParam(value = "otp") String otp,
@RequestParam(value = "isComplete", required = false) Integer isComplete);
@GetMapping(value = "member/check/depth", headers = {"Inner-Required=1"})
ResponseDto<Boolean> isMember(@NotBlank(message = "用户ID不能为空") @RequestParam(value = "uid") String uid);
......
......@@ -339,7 +339,8 @@ public class AdamLoginController {
@NotBlank(message = "手机号不能为空")
@RequestParam String mobile,
@NotBlank(message = "临时票据不能为空")
@RequestParam String otp) {
@RequestParam String otp,
@RequestParam(required = false) Integer isComplete) {
log.info("login by silent for mobile:{},{}", mobile, otp);
long reql = 0, l = LocalDateTime.now().toEpochSecond(ZoneOffset.UTC);
String otpDecrypt = null;
......@@ -352,7 +353,7 @@ public class AdamLoginController {
log.error("login by silent for mobile:{},{}/{},{}-{}", mobile, otp, otpDecrypt, l, reql);
return ResponseDto.failure(ErrorMapping.get("10005"));
}
return this.silentMobileLoginSuccess(mobile, null);
return this.silentMobileLoginSuccess(mobile, null, null == isComplete ? 0 : isComplete);
}
@ApiOperationSupport(order = 7)
......@@ -372,15 +373,15 @@ public class AdamLoginController {
log.error("login by silent v2 otp invalid, mobile:{}", mobile);
return ResponseDto.failure(ErrorMapping.get("10005"));
}
return this.silentMobileLoginSuccess(mobile, AdamConst.REGIST_SOURCE_DOUDOU);
return this.silentMobileLoginSuccess(mobile, AdamConst.REGIST_SOURCE_DOUDOU, 0);
}
private ResponseDto<AdamLoginInfoVo> silentMobileLoginSuccess(String mobile, String registSource) {
private ResponseDto<AdamLoginInfoVo> silentMobileLoginSuccess(String mobile, String registSource, int isComplete) {
String uid = adamRdmService.getUidByMobile(mobile);
boolean toRegister = StringUtils.isEmpty(uid);
AdamUserInfoVo userInfoVo = toRegister
? adamUserService.register(mobile, 0, registSource)
? adamUserService.register(mobile, isComplete, registSource)
: adamRdmService.getUserInfoVoByUid(uid);
if (!toRegister && (null == userInfoVo || userInfoVo.getState() == 2)) {
......
......@@ -66,14 +66,7 @@ public class SlimeFieldAppliesServiceImpl implements ISlimeFieldAppliesService {
}
}
// 申请场地 vos 上限
List<SlimeFieldAppliesVo> fieldAppliesVos = slimeRdmService.getFieldAppliesVosByUid(uid);
if (!CollectionUtils.isEmpty(fieldAppliesVos)) {
if (fieldAppliesVos.size() >= 10) {
ErrorMapping.ErrorMessage errorMessage = ErrorMapping.get("13111");
throw new LiquidnetServiceException(errorMessage.getCode(), errorMessage.getMessage());
}
}
LocalDateTime now = LocalDateTime.now();
long s = System.currentTimeMillis();
......
......@@ -8,6 +8,7 @@ CREATE TABLE `smile_volunteers`
`img` varchar(256) DEFAULT '' COMMENT '头像',
`id_card` varchar(32) DEFAULT '' COMMENT '证件号',
`sex` tinyint(2) DEFAULT 0 COMMENT '性别[0-未知|1-男|2-女]',
`nation` varchar(16) DEFAULT '' COMMENT '民族',
`status` tinyint(2) DEFAULT 0 COMMENT '状态[0-待审核|1-审核通过|2-审核未通过]',
`school` varchar(64) DEFAULT '' COMMENT '学校',
`school_address` varchar(64) DEFAULT '' COMMENT '学校地址',
......
......@@ -44,4 +44,10 @@ public class SmileVolunteersController {
return volunteersService.apply(param);
}
@GetMapping("nations")
@ApiOperation("民族字典(GB/T 3304)")
public ResponseDto<List<String>> nations() {
return volunteersService.nations();
}
}
......@@ -6,6 +6,7 @@ import com.liquidnet.commons.lang.util.IDCard;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.base.SqlMapping;
import com.liquidnet.service.base.constant.MQConst;
import com.liquidnet.service.goblin.constant.NationConst;
import com.liquidnet.service.goblin.dto.vo.*;
import com.liquidnet.service.goblin.param.SmileVolunteersApplyParam;
import com.liquidnet.service.goblin.service.manage.SmileFrontService;
......@@ -119,6 +120,12 @@ public class SmileVolunteerServerImpl implements SmileVolunteersService {
if (!utils.validate(param.getName(), param.getIdCard())) {
return ResponseDto.failure("验证身份证失败!");
}
if (StringUtils.isBlank(param.getNation())) {
return ResponseDto.failure("请选择民族");
}
if (!NationConst.isValid(param.getNation())) {
return ResponseDto.failure("民族选项无效");
}
smileRedisUtils.setProjectIdCard(param.getProjectId(), param.getIdCard());
......@@ -135,7 +142,7 @@ public class SmileVolunteerServerImpl implements SmileVolunteersService {
queueUtils.sendMsgByRedis(MQConst.SmileQueue.SMILE_USER.getKey(),
SqlMapping.get("smile_volunteers.apply",
uid, param.getProjectId(), param.getName(), param.getImg(),
param.getIdCard(), param.getSex(), param.getSchool(), param.getSchoolAddress(),
param.getIdCard(), param.getSex(), param.getNation(), param.getSchool(), param.getSchoolAddress(),
param.getSpecialty(), param.getSpecialty2(), param.getPhone(), param.getTeamId1(),
param.getTeamId2(), param.getTeamId3(), param.getIntroduce(), LocalDateTime.now()
));
......@@ -145,4 +152,9 @@ public class SmileVolunteerServerImpl implements SmileVolunteersService {
}
return ResponseDto.success();
}
@Override
public ResponseDto<List<String>> nations() {
return ResponseDto.success(NationConst.NATIONS);
}
}
......@@ -7,4 +7,4 @@ smile_service.delete_user= delete from smile_user where uid=?
#---- 志愿者报名
smile_volunteers.apply = INSERT INTO smile_volunteers (`uid`,`project_id`,`name`,`img`,`id_card`,`sex`,`school`,`school_address`,`specialty`,`specialty2`,`phone`,`team_id1`,`team_id2`,`team_id3`,`introduce`,`created_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
\ No newline at end of file
smile_volunteers.apply = INSERT INTO smile_volunteers (`uid`,`project_id`,`name`,`img`,`id_card`,`sex`,`nation`,`school`,`school_address`,`specialty`,`specialty2`,`phone`,`team_id1`,`team_id2`,`team_id3`,`introduce`,`created_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
\ No newline at end of file
-- 动态表单报名提交表
DROP TABLE IF EXISTS `sweet_form_submission`;
CREATE TABLE `sweet_form_submission`
(
`mid` bigint unsigned NOT NULL AUTO_INCREMENT primary key,
`submission_id` varchar(64) NOT NULL DEFAULT '' COMMENT '提交ID',
`activity_name` varchar(128) NOT NULL DEFAULT '' COMMENT '活动名称/标识',
`data` json NOT NULL COMMENT '报名数据JSON',
`created_at` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` datetime NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
KEY `idx_submission_id` (`submission_id`),
KEY `idx_activity_name` (`activity_name`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_unicode_ci
ROW_FORMAT = DYNAMIC COMMENT ='动态表单报名提交表';
package com.liquidnet.service.sweet.controller;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.sweet.dto.param.SweetFormSubmissionParam;
import com.liquidnet.service.sweet.service.ISweetFormSubmissionService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.Valid;
/**
* 动态表单报名
*/
@Api(tags = "动态表单报名")
@RestController
@RequestMapping("/form")
public class SweetFormSubmissionController {
@Autowired
private ISweetFormSubmissionService sweetFormSubmissionService;
@PostMapping("submit")
@ApiOperation("提交报名")
public ResponseDto<Boolean> submit(@Valid @RequestBody SweetFormSubmissionParam param) {
return sweetFormSubmissionService.submit(param);
}
}
......@@ -2,6 +2,7 @@ package com.liquidnet.service.sweet.controller;
import com.liquidnet.service.adam.dto.vo.AdamLoginInfoVo;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.sweet.dto.vo.WechatAppletLoginInfoVo;
import com.liquidnet.service.sweet.dto.vo.WechatTokenInfoVo;
import com.liquidnet.service.sweet.dto.vo.WechatUserInfoVo;
import com.liquidnet.service.sweet.service.impl.SweetWechatLoginServiceImpl;
......@@ -26,7 +27,7 @@ public class SweetWechatLoginController {
private SweetWechatLoginServiceImpl sweetLoginService;
@GetMapping("userInfo")
@ApiOperation("小程序解密手机号")
@ApiOperation("小程序授权手机号登录")
@ApiImplicitParams({
@ApiImplicitParam(type = "query", dataType = "String", name = "userCode", value = " 获取 uid oid的 code"),
@ApiImplicitParam(type = "query", dataType = "String", name = "code", value = "获取手机号的 code", required = true),
......@@ -34,7 +35,7 @@ public class SweetWechatLoginController {
@ApiImplicitParam(type = "query", dataType = "String", name = "iv", value = "iv"),
@ApiImplicitParam(type = "query", dataType = "Integer", name = "type", value = "1草莓 2五百里 3mdsk 4正在 5跳飞船 6小家伙 7摩登 8DouDou 9mootoo 10wenque", required = true),
})
public ResponseDto userInfo(
public ResponseDto<WechatAppletLoginInfoVo> userInfo(
@RequestParam(required = false) String userCode,
@RequestParam() String code,
@RequestParam(required = false) String encryptedData,
......
package com.liquidnet.service.sweet.dto.vo;
import com.liquidnet.service.adam.dto.vo.AdamLoginInfoVo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@ApiModel(value = "WechatAppletLoginInfoVo", description = "小程序登录响应(含旧版兼容字段)")
public class WechatAppletLoginInfoVo extends AdamLoginInfoVo {
private static final long serialVersionUID = 1L;
@ApiModelProperty("兼容旧版,同 userInfo.uid")
private String userId;
@ApiModelProperty("兼容旧版,同 wechatOpenid")
private String openId;
@ApiModelProperty("兼容旧版,同 wechatUnionid")
private String unionId;
@ApiModelProperty("兼容旧版")
private String getPhoneNumber;
@ApiModelProperty("兼容旧版")
private String getPurePhoneNumber;
@ApiModelProperty("兼容旧版")
private String getCountryCode;
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getOpenId() {
return openId;
}
public void setOpenId(String openId) {
this.openId = openId;
}
public String getUnionId() {
return unionId;
}
public void setUnionId(String unionId) {
this.unionId = unionId;
}
public String getGetPhoneNumber() {
return getPhoneNumber;
}
public void setGetPhoneNumber(String getPhoneNumber) {
this.getPhoneNumber = getPhoneNumber;
}
public String getGetPurePhoneNumber() {
return getPurePhoneNumber;
}
public void setGetPurePhoneNumber(String getPurePhoneNumber) {
this.getPurePhoneNumber = getPurePhoneNumber;
}
public String getGetCountryCode() {
return getCountryCode;
}
public void setGetCountryCode(String getCountryCode) {
this.getCountryCode = getCountryCode;
}
public static WechatAppletLoginInfoVo wrap(AdamLoginInfoVo loginInfo, String phoneNumber,
String purePhoneNumber, String countryCode,
String openId, String unionId) {
WechatAppletLoginInfoVo vo = new WechatAppletLoginInfoVo();
vo.setToken(loginInfo.getToken());
vo.setUserInfo(loginInfo.getUserInfo());
vo.setUserMemberVo(loginInfo.getUserMemberVo());
vo.setWechatOpenid(loginInfo.getWechatOpenid());
vo.setWechatUnionid(loginInfo.getWechatUnionid());
if (null != loginInfo.getUserInfo()) {
vo.setUserId(loginInfo.getUserInfo().getUid());
}
vo.setOpenId(openId);
vo.setUnionId(unionId);
vo.setGetPhoneNumber(phoneNumber);
vo.setGetPurePhoneNumber(purePhoneNumber);
vo.setGetCountryCode(countryCode);
return vo;
}
}
package com.liquidnet.service.sweet.service.impl;
import com.alibaba.fastjson.JSON;
import com.liquidnet.commons.lang.util.CollectionUtil;
import com.liquidnet.commons.lang.util.IDGenerator;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.base.SqlMapping;
import com.liquidnet.service.base.constant.MQConst;
import com.liquidnet.service.sweet.dto.param.SweetFormSubmissionParam;
import com.liquidnet.service.sweet.service.ISweetFormSubmissionService;
import com.liquidnet.service.sweet.utils.QueueUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.LinkedList;
/**
* 动态表单报名
*/
@Service
public class SweetFormSubmissionServiceImpl implements ISweetFormSubmissionService {
@Autowired
private QueueUtils queueUtils;
@Override
public ResponseDto<Boolean> submit(SweetFormSubmissionParam param) {
String submissionId = IDGenerator.nextSnowId();
String activityName = param.getActivityName().trim();
String dataJson = JSON.toJSONString(param.getData());
LinkedList<String> sqls = CollectionUtil.linkedListString();
LinkedList<Object[]> sqlsDataA = CollectionUtil.linkedListObjectArr();
sqls.add(SqlMapping.get("sweet_form_submission.insert"));
sqlsDataA.add(new Object[]{submissionId, activityName, dataJson});
queueUtils.sendMsgByRedis(MQConst.SweetQueue.SWEET_ANSWER_INSERT.getKey(),
SqlMapping.gets(sqls, sqlsDataA));
return ResponseDto.success(true);
}
}
......@@ -6,12 +6,12 @@ import com.liquidnet.commons.lang.util.CollectionUtil;
import com.liquidnet.commons.lang.util.DESUtils;
import com.liquidnet.commons.lang.util.IDGenerator;
import com.liquidnet.service.adam.dto.vo.AdamLoginInfoVo;
import com.liquidnet.service.adam.dto.vo.AdamUserInfoVo;
import com.liquidnet.service.base.ErrorMapping;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.base.SqlMapping;
import com.liquidnet.service.base.constant.MQConst;
import com.liquidnet.service.feign.adam.api.FeignAdamBaseClient;
import com.liquidnet.service.sweet.dto.vo.WechatAppletLoginInfoVo;
import com.liquidnet.service.sweet.dto.vo.WechatTokenInfoVo;
import com.liquidnet.service.sweet.dto.vo.WechatUserInfoVo;
import com.liquidnet.service.sweet.utils.QueueUtils;
......@@ -27,7 +27,6 @@ import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Objects;
......@@ -56,7 +55,7 @@ public class SweetWechatLoginServiceImpl {
@Lazy
private FeignAdamBaseClient feignAdamBaseClient;
public ResponseDto userInfo(String userCode, String code, String encryptedData, String iv, Integer type) {
public ResponseDto<WechatAppletLoginInfoVo> userInfo(String userCode, String code, String encryptedData, String iv, Integer type) {
log.info("小程序解密用户信息参数:[code=[{}], encryptedData=[{}], [iv=[{}], type=[{}]", code, encryptedData, iv, type);
try {
WxMaJscode2SessionResult sessionInfo = null;
......@@ -83,54 +82,19 @@ public class SweetWechatLoginServiceImpl {
String phoneNumber = wxMaPhoneNumberInfo.getPhoneNumber();
String purePhoneNumber = wxMaPhoneNumberInfo.getPurePhoneNumber();
String countryCode = wxMaPhoneNumberInfo.getCountryCode();
// mysql redis
SweetAppletUsersVo sweetAppletUsers = redisUtils.getSweetAppletUsersOfPhone(purePhoneNumber);
String userId = "";
if (null == sweetAppletUsers) {
// 获取adam用户信息 自动注册
ResponseDto<AdamUserInfoVo> userInfoVo = feignAdamBaseClient.registerByMobile(purePhoneNumber);
AdamUserInfoVo userInfoVoData = userInfoVo.getData();
userId = userInfoVoData.getUid();
String appletUserId = IDGenerator.nextSnowId();
LinkedList<String> sqlsA = CollectionUtil.linkedListString();
LinkedList<Object[]> sqlsDataA = CollectionUtil.linkedListObjectArr();
sqlsA.add(SqlMapping.get("sweet_applet_users.insert"));
sqlsDataA.add(new Object[]{
appletUserId, userId, openId, unionId, phoneNumber, purePhoneNumber, countryCode, type
});
queueUtils.sendMsgByRedis(MQConst.SweetQueue.SWEET_WECHAT_USER_INSERT.getKey(),
SqlMapping.gets(sqlsA, sqlsDataA));
SweetAppletUsersVo sweetAppletUsersVo = SweetAppletUsersVo.getNew();
sweetAppletUsersVo.setAppletUserId(appletUserId);
sweetAppletUsersVo.setUserId(userId);
sweetAppletUsersVo.setOpenId(openId);
sweetAppletUsersVo.setUnionId(unionId);
sweetAppletUsersVo.setPhoneNumber(phoneNumber);
sweetAppletUsersVo.setPurePhoneNumber(purePhoneNumber);
sweetAppletUsersVo.setCountryCode(countryCode);
sweetAppletUsersVo.setType(type);
redisUtils.setSweetAppletUsers(sweetAppletUsersVo);
// 调用关注赠积分任务 这里如果不调用的话
// 1。关注过了也登陆过小程序的可以脚本处理 脚本不处理就需要每个用户点进入小程序登陆
// 2。关注过了 无小程序的 本次登陆才有的 接口也不是前端请求的 就没有地方触发做任务接口
// 3。有小程序未关注的就关注时候适用
/*SweetWechatUsersVo sweetWechatUsersSky = redisUtils.getSweetWechatUsersOfUnionId(unionId, 2);
if (null != sweetWechatUsersSky) {
feignStoneIntegralClient.doTask(4, userId);
}*/
} else {
userId = sweetAppletUsers.getUserId();
boolean needSweetBinding = null == redisUtils.getSweetAppletUsersOfPhone(purePhoneNumber);
ResponseDto<AdamLoginInfoVo> loginResp = this.loginByPhoneWithWechat(
purePhoneNumber, openId, unionId, needSweetBinding ? 1 : null);
if (!loginResp.isSuccess() || null == loginResp.getData()) {
return ResponseDto.failure(loginResp.getCode(), loginResp.getMessage());
}
if (needSweetBinding) {
this.bindSweetAppletUser(
loginResp.getData().getUserInfo().getUid(),
openId, unionId, phoneNumber, purePhoneNumber, countryCode, type);
}
// 返回给前端数据
HashMap<String, Object> userInfo = CollectionUtil.mapStringObject();
userInfo.put("unionId", unionId);
userInfo.put("openId", openId);
userInfo.put("userId", userId);
userInfo.put("getPhoneNumber", phoneNumber);
userInfo.put("getPurePhoneNumber", purePhoneNumber);
userInfo.put("getCountryCode", countryCode);
return ResponseDto.success(userInfo);
return ResponseDto.success(WechatAppletLoginInfoVo.wrap(
loginResp.getData(), phoneNumber, purePhoneNumber, countryCode, openId, unionId));
} catch (Exception e) {
log.error("WechatUserInfoError Exception:{}", e);
return ResponseDto.failure();
......@@ -186,16 +150,58 @@ public class SweetWechatLoginServiceImpl {
if (null == sweetAppletUsersVo) {
return ResponseDto.failure(ErrorMapping.get("90081"));
}
String purePhone = sweetAppletUsersVo.getPurePhoneNumber();
String otp = DESUtils.DES().encrypt(purePhone + LocalDateTime.now().toEpochSecond(ZoneOffset.UTC));
ResponseDto<AdamLoginInfoVo> adamUserInfoVoResponseDto = feignAdamBaseClient.loginBySilentMobile(purePhone, otp);
AdamLoginInfoVo adamLoginInfoVo = adamUserInfoVoResponseDto.getData();
adamLoginInfoVo.setWechatOpenid(sweetAppletUsersVo.getOpenId());
adamLoginInfoVo.setWechatUnionid(sweetAppletUsersVo.getUnionId());
return ResponseDto.success(adamLoginInfoVo);
return this.loginByPhoneWithWechat(
sweetAppletUsersVo.getPurePhoneNumber(),
sweetAppletUsersVo.getOpenId(),
sweetAppletUsersVo.getUnionId()
);
} catch (Exception e) {
log.error("userInfoMaError Exception:{}", e);
return ResponseDto.failure("获取用户信息失败~");
}
}
private ResponseDto<AdamLoginInfoVo> loginByPhoneWithWechat(String purePhone, String openId, String unionId) {
return this.loginByPhoneWithWechat(purePhone, openId, unionId, null);
}
private ResponseDto<AdamLoginInfoVo> loginByPhoneWithWechat(String purePhone, String openId, String unionId, Integer isComplete) {
try {
String otp = DESUtils.DES().encrypt(purePhone + LocalDateTime.now().toEpochSecond(ZoneOffset.UTC));
ResponseDto<AdamLoginInfoVo> loginResp = feignAdamBaseClient.loginBySilentMobile(purePhone, otp, isComplete);
if (!loginResp.isSuccess() || null == loginResp.getData()) {
return ResponseDto.failure(loginResp.getCode(), loginResp.getMessage());
}
AdamLoginInfoVo loginInfoVo = loginResp.getData();
loginInfoVo.setWechatOpenid(openId);
loginInfoVo.setWechatUnionid(unionId);
return ResponseDto.success(loginInfoVo);
} catch (Exception e) {
log.error("loginByPhoneWithWechat error, mobile:{}", purePhone, e);
return ResponseDto.failure("获取用户信息失败~");
}
}
private void bindSweetAppletUser(String userId, String openId, String unionId, String phoneNumber,
String purePhoneNumber, String countryCode, Integer type) {
String appletUserId = IDGenerator.nextSnowId();
LinkedList<String> sqlsA = CollectionUtil.linkedListString();
LinkedList<Object[]> sqlsDataA = CollectionUtil.linkedListObjectArr();
sqlsA.add(SqlMapping.get("sweet_applet_users.insert"));
sqlsDataA.add(new Object[]{
appletUserId, userId, openId, unionId, phoneNumber, purePhoneNumber, countryCode, type
});
queueUtils.sendMsgByRedis(MQConst.SweetQueue.SWEET_WECHAT_USER_INSERT.getKey(),
SqlMapping.gets(sqlsA, sqlsDataA));
SweetAppletUsersVo sweetAppletUsersVo = SweetAppletUsersVo.getNew();
sweetAppletUsersVo.setAppletUserId(appletUserId);
sweetAppletUsersVo.setUserId(userId);
sweetAppletUsersVo.setOpenId(openId);
sweetAppletUsersVo.setUnionId(unionId);
sweetAppletUsersVo.setPhoneNumber(phoneNumber);
sweetAppletUsersVo.setPurePhoneNumber(purePhoneNumber);
sweetAppletUsersVo.setCountryCode(countryCode);
sweetAppletUsersVo.setType(type);
redisUtils.setSweetAppletUsers(sweetAppletUsersVo);
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment