diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxUserGrantController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxUserGrantController.java index 27995b782..d2b507da8 100755 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxUserGrantController.java +++ b/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 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 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 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; - } - } diff --git a/mallinkMQConsumer/src/main/java/com/iformall/mq/MqBaseConsumer.java b/mallinkMQConsumer/src/main/java/com/iformall/mq/MqBaseConsumer.java index 8f8577d51..a9a7940d6 100644 --- a/mallinkMQConsumer/src/main/java/com/iformall/mq/MqBaseConsumer.java +++ b/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); diff --git a/mallinkService/src/main/java/com/iformall/domain/po/msg/FmInsideCLoginMsg.java b/mallinkService/src/main/java/com/iformall/domain/po/msg/FmInsideCLoginMsg.java new file mode 100644 index 000000000..e03c813c6 --- /dev/null +++ b/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; +} diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/WxCUserVo.java b/mallinkService/src/main/java/com/iformall/domain/vo/WxCUserVo.java index 94c9735d1..0e168514f 100644 --- a/mallinkService/src/main/java/com/iformall/domain/vo/WxCUserVo.java +++ b/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; } diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumMsgRecordType.java b/mallinkService/src/main/java/com/iformall/enums/EnumMsgRecordType.java index c41c94487..c0b155cac 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumMsgRecordType.java +++ b/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) { diff --git a/mallinkService/src/main/java/com/iformall/service/WxCUserService.java b/mallinkService/src/main/java/com/iformall/service/WxCUserService.java index 572ed9991..196385321 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxCUserService.java +++ b/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 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); } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCUserServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCUserServiceImpl.java index 2a63e9f27..57ec31d7a 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCUserServiceImpl.java +++ b/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 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; + } } diff --git a/mallinkService/src/main/java/com/iformall/service/msg/impl/FmInsideCLoginMsgServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/msg/impl/FmInsideCLoginMsgServiceImpl.java new file mode 100644 index 000000000..ad0d24044 --- /dev/null +++ b/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); + } +}