Просмотр исходного кода

[小程序登录][修改]:小程序登录处理,分离其他逻辑

release_toaliyun_real
Stormeye Wu 7 лет назад
Родитель
Сommit
807aaee313
8 измененных файлов: 437 добавлений и 168 удалений
  1. +189
    -164
      mallinkCApi/src/main/java/com/iformall/controller/WxUserGrantController.java
  2. +4
    -0
      mallinkMQConsumer/src/main/java/com/iformall/mq/MqBaseConsumer.java
  3. +17
    -0
      mallinkService/src/main/java/com/iformall/domain/po/msg/FmInsideCLoginMsg.java
  4. +9
    -2
      mallinkService/src/main/java/com/iformall/domain/vo/WxCUserVo.java
  5. +1
    -0
      mallinkService/src/main/java/com/iformall/enums/EnumMsgRecordType.java
  6. +44
    -0
      mallinkService/src/main/java/com/iformall/service/WxCUserService.java
  7. +127
    -2
      mallinkService/src/main/java/com/iformall/service/impl/WxCUserServiceImpl.java
  8. +46
    -0
      mallinkService/src/main/java/com/iformall/service/msg/impl/FmInsideCLoginMsgServiceImpl.java

+ 189
- 164
mallinkCApi/src/main/java/com/iformall/controller/WxUserGrantController.java Просмотреть файл

@@ -89,6 +89,36 @@ public class WxUserGrantController extends BaseController {
@Autowired
WxCreditHistoryService wxCreditHistoryService;

/**
* 微信消息服务验证
*
* @param response
* @param request
* @throws IOException
*/
@AuthIgnore
@RequestMapping(value = "/signature")
@ResponseBody
public void signature(HttpServletResponse response, HttpServletRequest request) throws IOException {


String signature = request.getParameter("signature");
String timestamp = request.getParameter("timestamp");
String nonce = request.getParameter("nonce");
String echostr = request.getParameter("echostr");

logger.warn("收到的微信服务验证信息:" + signature + "\n" + timestamp + "\n" + nonce + "\n" + echostr);
PrintWriter out = response.getWriter();
// 通过检验signature对请求进行校验,若校验成功则原样返回echostr,表示接入成功,否则接入失败
// 当前无法确定此消息的appId及token, 所以直接返回echostr
//if (CheckUtil.checkSignature(wp.getToken(), signature, timestamp, nonce)) {
out.print(echostr);
logger.warn("微信服务验证成功====================" + echostr);
System.out.println("微信服务验证成功!");
//}
out.close();
}

/**
* 用户登录
*
@@ -179,154 +209,162 @@ public class WxUserGrantController extends BaseController {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
String ipaddress = IPUtil.getIpAddr(request);

WxCUser user = new WxCUser();
user.setTenantId(wxAuthorizerInfo.getTenantId());
user.setAppId(appId);
user.setOpenId(openId);
WxCUser newUser = new WxCUser();
newUser.setTenantId(wxAuthorizerInfo.getTenantId());
newUser.setAppId(appId);
newUser.setOpenId(openId);
if (bHaveUnionId) {
user.setUnionId(unionId);
newUser.setUnionId(unionId);
}
int score = 0;
int credit = 0;

WxCUser user1 = null;
WxCUser oldUser = null;
if (bHaveUnionId) {
// 优先根据unionId查询
WxCUser userQ = new WxCUser();
userQ.setTenantId(wxAuthorizerInfo.getTenantId());
userQ.setUnionId(unionId);
user1 = wxCUserService.getByObject(userQ);
oldUser = wxCUserService.getByObject(userQ);
}
if (user1 == null) {
user1 = wxCUserService.getByOpenId(user);
if (oldUser == null) {
oldUser = wxCUserService.getByOpenId(newUser);
}
if (user1 != null) {
userId = user1.getId();
token = user1.createToken(new Date());
if (oldUser != null) {
// 已有用户
userId = oldUser.getId();
token = oldUser.createToken(new Date());

resultMap.put("token", token);
request.setAttribute(Constant.LOGIN_USER_KEY, user1.getId());
request.setAttribute(Constant.TENANT_ID, user1.getTenantId());
request.setAttribute(Constant.LOGIN_USER_KEY, oldUser.getId());
request.setAttribute(Constant.TENANT_ID, oldUser.getTenantId());

user1.setRegisterIp(ipaddress);
user1.setSessionKey(session_key);
user1.setAppId(appId);
user1.setOpenId(openId);
oldUser.setRegisterIp(ipaddress);
oldUser.setSessionKey(session_key);
oldUser.setAppId(appId);
oldUser.setOpenId(openId);
if (bHaveUnionId) {
user1.setUnionId(unionId);
oldUser.setUnionId(unionId);
}
if (StringUtils.isNotBlank(wxAuthorizerInfo.getOpenAppid())) {
user1.setOpenAppId(wxAuthorizerInfo.getOpenAppid());
oldUser.setOpenAppId(wxAuthorizerInfo.getOpenAppid());
}
if (StringUtils.isBlank(oldUser.getSceneAddress()) ||
oldUser.getSceneAddress().equalsIgnoreCase("undefined")) { // from app.js onLaunch.options.scene
oldUser.setSceneAddress(sceneAddress);
}
if (StringUtils.isBlank(oldUser.getScene()) ||
oldUser.getScene().equals("undefined")) { // from pages/index/index onLoad.options.scene
oldUser.setScene(scene);
}
if (StringUtils.isNotBlank(longitude)) {
oldUser.setLongitude(BigDecimal.valueOf(Double.valueOf(longitude)));
}
if (StringUtils.isNotBlank(latitude)) {
oldUser.setLatitude(BigDecimal.valueOf(Double.valueOf(latitude)));
}
if (user1.getSceneAddress() == null || user1.getSceneAddress().equals("undefined"))
user1.setSceneAddress(sceneAddress);
if (user1.getScene() == null || user1.getScene().equals("undefined"))
user1.setScene(scene);
if (!StringUtils.isBlank(longitude))
user1.setLongitude(BigDecimal.valueOf(Double.valueOf(longitude)));
if (!StringUtils.isBlank(latitude))
user1.setLatitude(BigDecimal.valueOf(Double.valueOf(latitude)));

JSONObject extraInfo = new JSONObject();
extraInfo.put("systemInfo", JSONObject.parseObject(systemInfo));
user1.setExtraInfo(extraInfo.toJSONString());
if (StringUtils.isNotBlank(systemInfo)) {
JSONObject extraInfo = new JSONObject();
extraInfo.put("systemInfo", JSONObject.parseObject(systemInfo));
oldUser.setExtraInfo(extraInfo.toJSONString());
}

user1.setLoginCount(user1.getLoginCount() + 1);
userTokenService.saveOrUpdate(user1);
oldUser.setLoginCount(oldUser.getLoginCount() + 1);
userTokenService.saveOrUpdate(oldUser);

// 成长值
try {
score = wxScoreRulesService.addScore(EnumScoreType.LOGIN, user1);
} catch (MallinkException e) {
logger.error("c_user 成长值 " + e.getMessage());
} catch (Exception e) {
logger.error("c_user 成长值 " + e.getMessage());
// 登录后处理
int score = wxCUserService.actionAfterLogin(oldUser);
resultMap.put("score", score);
} else {
newUser.setTenantId(wxAuthorizerInfo.getTenantId());
token = newUser.createToken(new Date());

newUser.setRegisterIp(ipaddress);
if (StringUtils.isBlank(newUser.getSceneAddress()) ||
newUser.getSceneAddress().equalsIgnoreCase("undefined")) { // from app.js onLaunch.options.scene
newUser.setSceneAddress(sceneAddress);
}
// 积分
try {
logger.info("user:" + user.getId());
WxCreditHistory wxCreditHistory = addCredit(user1, EnumScoreType.LOGIN);
logger.info("wxCreditHistory_id" + wxCreditHistory.getId());
credit = wxCreditHistory.getCreditNum() == null ? 0 : wxCreditHistory.getCreditNum();
logger.info("user_id:" + user1.getId() + " 登录新增积分:" + credit);
} catch (MallinkException e) {
logger.error("c_user 积分 " + e.getMessage());
} catch (Exception e) {
logger.error("c_user 积分 " + e.getMessage());
if (StringUtils.isBlank(newUser.getScene()) ||
newUser.getScene().equals("undefined")) { // from pages/index/index onLoad.options.scene
newUser.setScene(scene);
}
newUser.setSessionKey(session_key);
if (StringUtils.isNotBlank(longitude)) {
newUser.setLongitude(BigDecimal.valueOf(Double.valueOf(longitude)));
}
if (StringUtils.isNotBlank(latitude)) {
newUser.setLatitude(BigDecimal.valueOf(Double.valueOf(latitude)));
}
wxCUserTagsService.triggerAssignTags(EnumAssignTagsTrigger.ASSIGN_TAGS_TRIGGER_LOGIN, user1);
} else {
userId = user.getId();
user.setTenantId(wxAuthorizerInfo.getTenantId());
token = user.createToken(new Date());

user.setRegisterIp(ipaddress);
if (user.getSceneAddress() == null || user.getSceneAddress().equals("undefined"))
user.setSceneAddress(sceneAddress);
if (user.getScene() == null || user.getScene().equals("undefined"))
user.setScene(scene);
user.setSessionKey(session_key);
if (!StringUtils.isBlank(longitude))
user.setLongitude(BigDecimal.valueOf(Double.valueOf(longitude)));
if (!StringUtils.isBlank(latitude))
user.setLatitude(BigDecimal.valueOf(Double.valueOf(latitude)));

JSONObject extraInfo = new JSONObject();
extraInfo.put("systemInfo", JSONObject.parseObject(systemInfo));
user.setExtraInfo(extraInfo.toJSONString());
user.setLoginCount(0);
if (StringUtils.isNotBlank(systemInfo)) {
JSONObject extraInfo = new JSONObject();
extraInfo.put("systemInfo", JSONObject.parseObject(systemInfo));
newUser.setExtraInfo(extraInfo.toJSONString());
}
newUser.setLoginCount(0);

userTokenService.saveOrUpdate(user);
userTokenService.saveOrUpdate(newUser);

resultMap.put("token", token);
request.setAttribute(Constant.LOGIN_USER_KEY, user.getId());
request.setAttribute(Constant.TENANT_ID, user.getTenantId());
// 成长值
try {
score = wxScoreRulesService.addScore(EnumScoreType.LOGIN, user);
} catch (MallinkException e) {
logger.error("c_user 成长值 " + e.getMessage());
} catch (Exception e) {
logger.error("c_user 成长值 " + e.getMessage());
}
request.setAttribute(Constant.LOGIN_USER_KEY, newUser.getId());
request.setAttribute(Constant.TENANT_ID, newUser.getTenantId());

// 积分
try {
logger.info("user:" + user.getId());
WxCreditHistory wxCreditHistory = addCredit(user, EnumScoreType.LOGIN);
logger.info("wxCreditHistory_id" + wxCreditHistory.getId());
credit = wxCreditHistory.getCreditNum() == null ? 0 : wxCreditHistory.getCreditNum();
logger.info("user_id:" + user.getId() + " 登录新增积分:" + credit);
} catch (MallinkException e) {
logger.error("c_user 积分 " + e.getMessage());
} catch (Exception e) {
logger.error("c_user 积分 " + e.getMessage());
}

wxCUserTagsService.triggerAssignTags(EnumAssignTagsTrigger.ASSIGN_TAGS_TRIGGER_LOGIN, user);
// 登录后处理
int score = wxCUserService.actionAfterLogin(newUser);
resultMap.put("score", score);
}

//用户登陆后 更新最后一次活跃时间
if (userId != null) {
WxCUserBasicInfo wxCUserBasicInfo = wxCUserBasicInfoService.getById(userId);
if (wxCUserBasicInfo != null) {
WxCUserBasicInfo basicInfo = new WxCUserBasicInfo();
basicInfo.setId(userId);
basicInfo.setActiveTime(new Date());
wxCUserBasicInfoService.update(basicInfo);
}
WxCUser wxCUser = wxCUserService.getById(userId);
if (wxCUser != null) {
WxCUser cUser = new WxCUser();
cUser.setId(userId);
cUser.setActiveTime(new Date());
wxCUserService.saveOrUpdate(cUser);
return new ResultData(resultMap);
}

@PostMapping("/updateScene")
@ApiOperation(value = "用户更新scene", notes = "{\"scene\":\"string\"}")
public ResultData updateScene(@RequestBody Map<String, String> map) {
logger.debug(map.toString());

String scene = map.get("scene");
WxCUser user = getUser();
if (StringUtils.isBlank(user.getScene())) {
if(StringUtils.isNotBlank(scene)) {
user.setScene(scene);
wxCUserService.updateScene(user);
}
}
return new ResultData();
}

resultMap.put("score", score);
resultMap.put("credit", credit);
return new ResultData(resultMap);
@PostMapping("/updateLBS")
@ApiOperation(value = "用户更新位置信息", notes = "{\"latitude\":\"string\",\"longitude\":\"string\"}")
public ResultData updateLBS(@RequestBody Map<String, String> map) {
logger.debug(map.toString());

String longitude = map.get("longitude");
String latitude = map.get("latitude");

WxCUser user = getUser();
if (!StringUtils.isBlank(longitude))
user.setLongitude(BigDecimal.valueOf(Double.valueOf(longitude)));
if (!StringUtils.isBlank(latitude))
user.setLatitude(BigDecimal.valueOf(Double.valueOf(latitude)));
wxCUserService.updateLBS(user);
return new ResultData();
}

@PostMapping("/updateExtInfo")
@ApiOperation(value = "用户更新扩展信息(手机)", notes = "{\"systemInfo\":\"string\"}")
public ResultData updateExtInfo(@RequestBody Map<String, String> map) {
logger.debug(map.toString());

String systemInfo = map.get("systemInfo");

WxCUser user = getUser();
if (StringUtils.isNotBlank(systemInfo)) {
JSONObject extraInfo = new JSONObject();
extraInfo.put("systemInfo", JSONObject.parseObject(systemInfo));
user.setExtraInfo(extraInfo.toJSONString());
}
wxCUserService.updateExtInfo(user);
return new ResultData();
}

/**
@@ -403,7 +441,7 @@ public class WxUserGrantController extends BaseController {
// 成长值
wxScoreRulesService.addScore(EnumScoreType.WECHAT_PERSION, user);
//增加积分
addCredit(user, EnumScoreType.WECHAT_PERSION);
wxCUserService.addCredit(user, EnumScoreType.WECHAT_PERSION);
}

resultMap.put("openId", user.getOpenId());
@@ -473,7 +511,7 @@ public class WxUserGrantController extends BaseController {
// 成长值
user.setScore(wxScoreRulesService.addScore(EnumScoreType.WECHAT_PHONE, user));
//增加积分
addCredit(user, EnumScoreType.WECHAT_PHONE);
wxCUserService.addCredit(user, EnumScoreType.WECHAT_PHONE);
}

resultMap.put("msg", "授权手机成功!");
@@ -495,13 +533,44 @@ public class WxUserGrantController extends BaseController {
return new ResultData(resultMap);
}

/**
* 检查微信用户状态
*
* @return
*/
@RequestMapping("/checkWechatStatus")
@ApiOperation(value = "判断用户是否完成授权", notes = "")
public ResultData checkWechatStatus() {
Map resultMap = new HashMap();
WxCUser user = getUser();
if (StringUtils.isNotBlank(user.getNickName())) {
resultMap.put("nickName", user.getNickName());
} else {
logger.warn("用户昵称未授权,跳转到用户授权页!");
return new ResultData(ErrorCode.NICK_NAME_NOT_FOUND.getCode(), "用户昵称未授权,请跳转到用户昵称授权页!", resultMap);
}
if (StringUtils.isNotBlank(user.getPhone())) {
resultMap.put("phone", user.getPhone());
} else {
if (StringUtils.isBlank(user.getPhone())) {
logger.warn("用户手机号未授权,跳转到授权手机号页!");
return new ResultData(ErrorCode.PHONE_NOT_FOUND.getCode(), "用户手机号未授权,请跳转到授权手机号页!", resultMap);
}
if (user.getPhone().contains("*")) {
logger.warn("用户手机号已加密,跳转到手工输入手机号页!");
return new ResultData(ErrorCode.PHONE_IS_ENCRYPTED.getCode(), "用户手机号已加密,手工输入手机号页!", resultMap);
}
}
return new ResultData(Result.SUCCESS, "是老用户,已完成用户昵称/手机号授权", resultMap);
}

/**
* 检查用户状态
*
* @return
*/
@RequestMapping("/checkUserStatus")
@ApiOperation(value = "判断是否是老用户", notes = "")
@ApiOperation(value = "判断用户是否完成昵称授权", notes = "")
public ResultData checkUserStatus() {
Map resultMap = new HashMap();
WxCUser user = getUser();
@@ -520,7 +589,7 @@ public class WxUserGrantController extends BaseController {
* @return
*/
@RequestMapping("/checkPhoneStatus")
@ApiOperation(value = "判断是否是老用户", notes = "")
@ApiOperation(value = "判断用户是否完成手机授权", notes = "")
public ResultData checkPhoneStatus() {
Map resultMap = new HashMap();
WxCUser user = getUser();
@@ -583,7 +652,6 @@ public class WxUserGrantController extends BaseController {
userVo.setAddress(wxCUserBasicInfo.getAddress());
}


return new ResultData(userVo);
}

@@ -620,36 +688,6 @@ public class WxUserGrantController extends BaseController {
return new ResultData(Result.SUCCESS, "获取查询成功", list);
}

/**
* 微信消息服务验证
*
* @param response
* @param request
* @throws IOException
*/
@AuthIgnore
@RequestMapping(value = "/signature")
@ResponseBody
public void signature(HttpServletResponse response, HttpServletRequest request) throws IOException {


String signature = request.getParameter("signature");
String timestamp = request.getParameter("timestamp");
String nonce = request.getParameter("nonce");
String echostr = request.getParameter("echostr");

logger.warn("收到的微信服务验证信息:" + signature + "\n" + timestamp + "\n" + nonce + "\n" + echostr);
PrintWriter out = response.getWriter();
// 通过检验signature对请求进行校验,若校验成功则原样返回echostr,表示接入成功,否则接入失败
// 当前无法确定此消息的appId及token, 所以直接返回echostr
//if (CheckUtil.checkSignature(wp.getToken(), signature, timestamp, nonce)) {
out.print(echostr);
logger.warn("微信服务验证成功====================" + echostr);
System.out.println("微信服务验证成功!");
//}
out.close();
}

/**
* 授权后获取用户的手机号等信息
*
@@ -762,17 +800,4 @@ public class WxUserGrantController extends BaseController {
return new ResultData(result);
}

private WxCreditHistory addCredit(WxCUser wxCUser, EnumScoreType enumScoreType) {
WxCreditHistory wxCreditHistory = new WxCreditHistory();
wxCreditHistory.setCUserId(wxCUser.getId());
wxCreditHistory.setTenantId(getTenantId());
wxCreditHistory.setCreateDate(new Date());
wxCreditHistory.setCreditType(enumScoreType.getCode());
wxCreditHistory.setOperatorType(EnumUserType.CUSER.getCode());
wxCreditHistory.setOperatorId(wxCUser.getId());
WxCreditHistory record = wxCreditHistoryService.saveOrUpdate(wxCreditHistory);
wxCUser.setCredit(record.getCreditAmount());
return record;
}

}

+ 4
- 0
mallinkMQConsumer/src/main/java/com/iformall/mq/MqBaseConsumer.java Просмотреть файл

@@ -74,6 +74,10 @@ public class MqBaseConsumer {
// 内部消息 - 券核销
FmInsideCouponVerifyMsg msg = (FmInsideCouponVerifyMsg)JsonUtil.readValue(message,FmInsideCouponVerifyMsg.class);
fmInsideCouponVerifyMsgService.send(msg);
} else if(EnumMsgRecordType.INSIDE_C_LOGIN.getCode().equals(baseMsg.getMsgType())) {
// 内部消息 - c端登录
FmInsideCLoginMsg msg = (FmInsideCLoginMsg)JsonUtil.readValue(message,FmInsideCLoginMsg.class);
fmInsideCouponVerifyMsgService.send(msg);
}
baseMsg.setMsgStatus(EnumMsgRecordStatus.CONSUME_SUCC.getCode());
wxMsgRecordMapper.update(baseMsg);


+ 17
- 0
mallinkService/src/main/java/com/iformall/domain/po/msg/FmInsideCLoginMsg.java Просмотреть файл

@@ -0,0 +1,17 @@
package com.iformall.domain.po.msg;

import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;

@Data
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
public class FmInsideCLoginMsg extends BaseMsg{
private static final long serialVersionUID = 1L;

@io.swagger.annotations.ApiModelProperty(value = "租户ID", name = "tenantId")
private String tenantId;
@io.swagger.annotations.ApiModelProperty(value = "用户ID", name = "cUserId")
private Long cUserId;
}

+ 9
- 2
mallinkService/src/main/java/com/iformall/domain/vo/WxCUserVo.java Просмотреть файл

@@ -16,17 +16,24 @@ import java.util.Date;
@EqualsAndHashCode(callSuper = true)
public class WxCUserVo extends WxCUser {

// 等级名称
@io.swagger.annotations.ApiModelProperty(value="等级ID",name="levelId")
private Long levelId;
@io.swagger.annotations.ApiModelProperty(value="等级名称",name="levelName")
private String levelName;
@io.swagger.annotations.ApiModelProperty(value="生日",name="birthdate")
private Date birthdate;
@io.swagger.annotations.ApiModelProperty(value="性别",name="sex")
private Integer sex;
@io.swagger.annotations.ApiModelProperty(value="地址",name="address")
private String address;
@io.swagger.annotations.ApiModelProperty(value="姓名",name="name")
private String name;

@io.swagger.annotations.ApiModelProperty(value="折扣率",name="discountRate")
private Integer discountRate;
private Integer amount;

@io.swagger.annotations.ApiModelProperty(value="升级进度",name="upgradePercent")
private Integer upgradePercent;
@io.swagger.annotations.ApiModelProperty(value="升级分",name="upgradeScore")
private Integer upgradeScore;
}

+ 1
- 0
mallinkService/src/main/java/com/iformall/enums/EnumMsgRecordType.java Просмотреть файл

@@ -14,6 +14,7 @@ public enum EnumMsgRecordType {
WEBSOCKET_APP(8, "小程序websocket"),
INSIDE_ORDER_SUCCESS(100, "下订单成功"),
INSIDE_COUPON_VERIFY(101, "券核销"),
INSIDE_C_LOGIN(102, "C端用户登录"),
;

public static EnumMsgRecordType getEnum(Integer code) {


+ 44
- 0
mallinkService/src/main/java/com/iformall/service/WxCUserService.java Просмотреть файл

@@ -4,6 +4,8 @@ import com.github.pagehelper.PageInfo;
import com.iformall.domain.dto.WxCUserBasicInfoDto;
import com.iformall.domain.po.WxAuthorizerInfo;
import com.iformall.domain.po.WxCUser;
import com.iformall.domain.po.WxCreditHistory;
import com.iformall.enums.EnumScoreType;
import me.chanjar.weixin.mp.bean.result.WxMpUser;

public interface WxCUserService {
@@ -57,6 +59,27 @@ public interface WxCUserService {
*/
int saveOrUpdateMpUser(WxMpUser mpUser, WxAuthorizerInfo authorizerInfo);

/**
* updateScene
*
* @param record
*/
int updateScene(WxCUser record);

/**
* updateLBS
*
* @param record
*/
int updateLBS(WxCUser record);

/**
* updateExtInfo
*
* @param record
*/
int updateExtInfo(WxCUser record);

/**
* 根据Id删除实体
*
@@ -82,4 +105,25 @@ public interface WxCUserService {
PageInfo<WxCUser> listByChannel(WxCUser user, Integer pageIndex, Integer pageSize);

long countByChannel(WxCUser user);

/**
* 登录后发消息
* @param user
*/
void actionMsgAfterLogin(WxCUser user);

/**
* 登录后处理
* @param user
* @return
*/
int actionAfterLogin(WxCUser user);

/**
* 积分
* @param wxCUser
* @param enumScoreType
* @return
*/
WxCreditHistory addCredit(WxCUser wxCUser, EnumScoreType enumScoreType);
}

+ 127
- 2
mallinkService/src/main/java/com/iformall/service/impl/WxCUserServiceImpl.java Просмотреть файл

@@ -6,9 +6,15 @@ import com.iformall.common.IdWorker;
import com.iformall.domain.dto.WxCUserBasicInfoDto;
import com.iformall.domain.po.WxAuthorizerInfo;
import com.iformall.domain.po.WxCUser;
import com.iformall.enums.EnumAppType;
import com.iformall.domain.po.WxCUserBasicInfo;
import com.iformall.domain.po.WxCreditHistory;
import com.iformall.domain.po.msg.FmInsideCLoginMsg;
import com.iformall.domain.po.msg.FmInsideCouponVerifyMsg;
import com.iformall.enums.*;
import com.iformall.exception.MallinkException;
import com.iformall.mapper.WxCUserMapper;
import com.iformall.service.WxCUserService;
import com.iformall.mq.MqBaseProducer;
import com.iformall.service.*;
import me.chanjar.weixin.mp.bean.result.WxMpUser;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
@@ -25,6 +31,21 @@ public class WxCUserServiceImpl implements WxCUserService {
@Autowired
WxCUserMapper wxCUserMapper;

@Autowired
private WxCUserBasicInfoService wxCUserBasicInfoService;

@Autowired
private WxScoreRulesService wxScoreRulesService;

@Autowired
private WxCreditHistoryService wxCreditHistoryService;

@Autowired
private WxCUserTagsService wxCUserTagsService;

@Autowired
private MqBaseProducer mqBaseProducer;

@Override
public PageInfo<WxCUser> listAsPage(WxCUser record, Integer pageIndex, Integer pageSize) {
return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxCUserMapper.findList(record));
@@ -140,6 +161,40 @@ public class WxCUserServiceImpl implements WxCUserService {
return saveOrUpdate(userQ);
}

@Override
public int updateScene(WxCUser record) {
Date curr = new Date();
WxCUser userL = new WxCUser();
userL.setId(record.getId());
userL.setScene(record.getScene());
userL.setUpdateDate(curr);
int ret = wxCUserMapper.updateByPrimaryKeySelective(userL);
return ret;
}

@Override
public int updateLBS(WxCUser record) {
Date curr = new Date();
WxCUser userL = new WxCUser();
userL.setId(record.getId());
userL.setLongitude(record.getLongitude());
userL.setLatitude(record.getLatitude());
userL.setUpdateDate(curr);
int ret = wxCUserMapper.updateByPrimaryKeySelective(userL);
return ret;
}

@Override
public int updateExtInfo(WxCUser record) {
Date curr = new Date();
WxCUser userL = new WxCUser();
userL.setId(record.getId());
userL.setExtraInfo(record.getExtraInfo());
userL.setUpdateDate(curr);
int ret = wxCUserMapper.updateByPrimaryKeySelective(userL);
return ret;
}

@Override
public void deleteById(Long id) {
wxCUserMapper.deleteByPrimaryKey(id);
@@ -159,4 +214,74 @@ public class WxCUserServiceImpl implements WxCUserService {
public long countByChannel(WxCUser user) {
return wxCUserMapper.countByChannel(user);
}

@Override
public void actionMsgAfterLogin(WxCUser user) {
FmInsideCLoginMsg loginMsg = new FmInsideCLoginMsg();
loginMsg.setMsgType(EnumMsgRecordType.INSIDE_C_LOGIN.getCode());
loginMsg.setTenantId(user.getTenantId());
loginMsg.setCUserId(user.getId());
mqBaseProducer.sendMessage(loginMsg, EnumMsgMqTopic.DEFAULT.getCode(), EnumMsgMqTag.DEFAULT.getCode(), EnumMsgMqKey.DEFAULT.getCode());
}


@Override
public int actionAfterLogin(WxCUser user) {
int score = 0;
int credit = 0;
// 成长值
try {
score = wxScoreRulesService.addScore(EnumScoreType.LOGIN, user);
} catch (MallinkException e) {
logger.error("c_user 成长值 " + e.getMessage());
} catch (Exception e) {
logger.error("c_user 成长值 " + e.getMessage());
}
// 积分
try {
WxCreditHistory wxCreditHistory = addCredit(user, EnumScoreType.LOGIN);
logger.info("wxCreditHistory_id" + wxCreditHistory.getId());
credit = wxCreditHistory.getCreditNum() == null ? 0 : wxCreditHistory.getCreditNum();
logger.info("user_id:" + user.getId() + " 登录新增积分:" + credit);
} catch (MallinkException e) {
logger.error("c_user 积分 " + e.getMessage());
} catch (Exception e) {
logger.error("c_user 积分 " + e.getMessage());
}
wxCUserTagsService.triggerAssignTags(EnumAssignTagsTrigger.ASSIGN_TAGS_TRIGGER_LOGIN, user);

// 用户登陆后 更新最后一次活跃时间
if (user.getId() != null) {
WxCUserBasicInfo wxCUserBasicInfo = wxCUserBasicInfoService.getById(user.getId());
if (wxCUserBasicInfo != null) {
WxCUserBasicInfo basicInfo = new WxCUserBasicInfo();
basicInfo.setId(user.getId());
basicInfo.setActiveTime(new Date());
wxCUserBasicInfoService.update(basicInfo);
}
WxCUser wxCUser = getById(user.getId());
if (wxCUser != null) {
WxCUser cUser = new WxCUser();
cUser.setId(user.getId());
cUser.setActiveTime(new Date());
saveOrUpdate(cUser);
}
}

return score;
}

@Override
public WxCreditHistory addCredit(WxCUser user, EnumScoreType enumScoreType) {
WxCreditHistory wxCreditHistory = new WxCreditHistory();
wxCreditHistory.setCUserId(user.getId());
wxCreditHistory.setTenantId(user.getTenantId());
wxCreditHistory.setCreateDate(new Date());
wxCreditHistory.setCreditType(enumScoreType.getCode());
wxCreditHistory.setOperatorType(EnumUserType.CUSER.getCode());
wxCreditHistory.setOperatorId(user.getId());
WxCreditHistory record = wxCreditHistoryService.saveOrUpdate(wxCreditHistory);
user.setCredit(record.getCreditAmount());
return record;
}
}

+ 46
- 0
mallinkService/src/main/java/com/iformall/service/msg/impl/FmInsideCLoginMsgServiceImpl.java Просмотреть файл

@@ -0,0 +1,46 @@
package com.iformall.service.msg.impl;

import com.iformall.common.ErrorCode;
import com.iformall.domain.po.*;
import com.iformall.domain.po.msg.BaseMsg;
import com.iformall.domain.po.msg.FmInsideCLoginMsg;
import com.iformall.domain.po.msg.FmInsideCouponVerifyMsg;
import com.iformall.enums.EnumAssignTagsTrigger;
import com.iformall.enums.EnumScoreType;
import com.iformall.exception.MallinkException;
import com.iformall.service.WxCUserService;
import com.iformall.service.WxCouponOrderService;
import com.iformall.service.WxMerchantBUserService;
import com.iformall.service.WxScoreRulesService;
import com.iformall.service.msg.MsgSendService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;

/**
*
* @author Stormeye Wu
* @date 2019/5/10
*/
@Service
public class FmInsideCLoginMsgServiceImpl implements MsgSendService {
private final Logger logger = LoggerFactory.getLogger(this.getClass());

@Autowired
private WxCUserService userService;

@Override
public void send(BaseMsg baseMsg) throws Exception {
FmInsideCLoginMsg msg = (FmInsideCLoginMsg)baseMsg;
WxCUser user = userService.getById(msg.getCUserId());
if(user == null) {
logger.error("用户ID未找到: " + msg.getCUserId());
throw new MallinkException(ErrorCode.USER_IS_EMPTY.getCode(), "用户ID未找到" + msg.getCUserId());
}

userService.actionAfterLogin(user);
}
}

Загрузка…
Отмена
Сохранить