数云会员注册积分操作对接

master
382696293@qq.com 2 years ago
parent c280405432
commit 898dc1600c

@ -0,0 +1,12 @@
package com.flossom.common.core.constant;
/**
*
*/
public class ShuYunConstants {
/**
*
*/
public static final String POINT_SERIAL_NUMBER_PREFIX = "hz_serial_number-";
}

@ -89,12 +89,13 @@ public class ShuYunMember {
* @param name
* @param mobile
*/
public ShuYunMember(String id, String platCode, String shopId, String name, String mobile) {
public ShuYunMember(String id, String platCode, String shopId, String name, String mobile, String created) {
this.id = id;
this.platCode = platCode;
this.shopId = shopId;
this.name = name;
this.mobile = mobile;
this.created = created;
}
/**

@ -26,6 +26,8 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
public static String YYYYMMDDHHMMSS = "yyyyMMddHHmmss";
public static String YYYYMMDDHHMMSSS = "yyyyMMddHHmmssSSS";
public static String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";
private static String[] parsePatterns = {

@ -101,6 +101,20 @@
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- 数云SDK -->
<dependency>
<groupId>com.shuyun.open</groupId>
<artifactId>open-platform-sdk</artifactId>
<version>1.0.1</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/lib/open-platform-sdk-1.0.1.jar</systemPath>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-core</artifactId>
</dependency>
</dependencies>
<build>
@ -109,6 +123,17 @@
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!-- 将 resources 目录下的 第三方jar 打包到 自己的 jar 包中 -->
<includeSystemScope>true</includeSystemScope>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>

@ -1,13 +1,12 @@
package com.flossom.miniProgram.controller;
import com.flossom.common.core.domain.entity.WxUserIntegralLog;
import com.flossom.common.core.web.controller.BaseController;
import com.flossom.common.core.web.page.TableDataInfo;
import com.flossom.miniProgram.service.IWxUserIntegralService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import javax.validation.constraints.NotNull;
/**
* Controller
@ -29,10 +28,9 @@ public class WxUserIntegralController extends BaseController {
* @return
*/
@GetMapping("/obtainUserIntegral")
public TableDataInfo obtainUserIntegral() {
startPage();
List<WxUserIntegralLog> list = wxUserIntegralLogService.obtainUserIntegral();
return getDataTable(list);
public TableDataInfo obtainUserIntegral(@NotNull(message = "pageSize 不能为空") @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
@NotNull(message = "pageNum 不能为空") @RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum) {
return wxUserIntegralLogService.obtainUserIntegral(pageNum, pageSize);
}
}

@ -1,11 +1,9 @@
package com.flossom.miniProgram.service;
import com.flossom.common.core.domain.entity.WxUserIntegralLog;
import java.util.List;
import com.flossom.common.core.web.page.TableDataInfo;
public interface IWxUserIntegralService {
List<WxUserIntegralLog> obtainUserIntegral();
TableDataInfo obtainUserIntegral(Integer pageNum, Integer pageSize);
}

@ -1,25 +1,78 @@
package com.flossom.miniProgram.service.impl;
import com.flossom.common.core.constant.HttpStatus;
import com.flossom.common.core.domain.entity.WxUserIntegralLog;
import com.flossom.common.core.domain.entity.WxUserMember;
import com.flossom.common.core.domain.shuyun.ShuYunPageReq;
import com.flossom.common.core.domain.shuyun.ShuYunPageUtil;
import com.flossom.common.core.domain.shuyun.ShuYunPointChangeLog;
import com.flossom.common.core.enums.IntegralChangeTypeEnum;
import com.flossom.common.core.exception.ServiceException;
import com.flossom.common.core.mapper.WxUserIntegralLogMapper;
import com.flossom.common.core.utils.DateUtils;
import com.flossom.common.core.web.page.TableDataInfo;
import com.flossom.common.security.utils.SecurityUtils;
import com.flossom.miniProgram.service.IWxUserIntegralService;
import com.flossom.miniProgram.utils.shuyun.ShuYunApiUtils;
import com.flossom.miniProgram.utils.shuyun.ShuYunConfig;
import com.github.pagehelper.PageInfo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
@Service
public class WxUserIntegralServiceImpl implements IWxUserIntegralService {
protected final Logger logger = LoggerFactory.getLogger(this.getClass());
@Autowired
private WxUserIntegralLogMapper wxUserIntegralLogMapper;
@Autowired
private ShuYunConfig shuYunConfig;
@Override
public List<WxUserIntegralLog> obtainUserIntegral() {
public TableDataInfo obtainUserIntegral(Integer pageNum, Integer pageSize) {
/**
* TODO:
*/
WxUserMember wxUserMember = SecurityUtils.getLoginUser().getWxUserMember();
return wxUserIntegralLogMapper.obtainUserIntegral(wxUserMember.getId());
ShuYunPageReq req = new ShuYunPageReq(SecurityUtils.getLoginUser().getWxUserMember().getUnionid(), shuYunConfig.getPlatCode(), shuYunConfig.getShopId(),
String.valueOf(pageSize), String.valueOf(pageNum));
ShuYunPageUtil<ShuYunPointChangeLog> pointChangeLogShuYunPageUtil = ShuYunApiUtils.pointChangeLogSearch(req);
if (pointChangeLogShuYunPageUtil == null) {
logger.error("积分查询失败用户id{},用户名:{}用户unionid{}分页参数pageNum={}pageSize={}",
wxUserMember.getId(), wxUserMember.getNickname(), wxUserMember.getUnionid(), pageNum, pageSize);
throw new ServiceException("积分查询失败");
}
List<WxUserIntegralLog> userIntegralLogList = new ArrayList<>();
WxUserIntegralLog userIntegralLog = null;
if (pointChangeLogShuYunPageUtil.getList() != null && pointChangeLogShuYunPageUtil.getList().size() > 0) {
for (ShuYunPointChangeLog shuYunPointChangeLog : pointChangeLogShuYunPageUtil.getList()) {
userIntegralLog = new WxUserIntegralLog();
userIntegralLog.setRemarkContent(shuYunPointChangeLog.getDesc());
// 变更积分
if (Integer.valueOf(shuYunPointChangeLog.getChangePoint()) > 0) {
userIntegralLog.setSource(IntegralChangeTypeEnum.INCREASE.getCode());
} else {
userIntegralLog.setSource(IntegralChangeTypeEnum.REDUCE.getCode());
}
userIntegralLog.setFloatScore(Math.abs(Long.valueOf(shuYunPointChangeLog.getChangePoint())));
// 变更时间
userIntegralLog.setCreateTime(DateUtils.parseDate(shuYunPointChangeLog.getCreated()));
}
userIntegralLogList.add(userIntegralLog);
}
TableDataInfo rspData = new TableDataInfo();
rspData.setCode(HttpStatus.SUCCESS);
rspData.setRows(userIntegralLogList);
rspData.setMsg("查询成功");
rspData.setTotal(pointChangeLogShuYunPageUtil.getTotals());
return rspData;
}
}

@ -1,13 +1,18 @@
package com.flossom.miniProgram.service.impl;
import cn.hutool.core.util.RandomUtil;
import com.alibaba.fastjson.JSON;
import com.flossom.common.core.constant.CacheConstants;
import com.flossom.common.core.constant.HttpStatus;
import com.flossom.common.core.constant.ShuYunConstants;
import com.flossom.common.core.constant.UserConstants;
import com.flossom.common.core.domain.R;
import com.flossom.common.core.domain.entity.*;
import com.flossom.common.core.domain.shuyun.ShuYunMember;
import com.flossom.common.core.domain.shuyun.ShuYunPointChange;
import com.flossom.common.core.enums.IntegralChangeTypeEnum;
import com.flossom.common.core.enums.MessageTypeEnum;
import com.flossom.common.core.enums.ShuYunPointSourceEnum;
import com.flossom.common.core.enums.WxUserIntegralMessageTypeEnum;
import com.flossom.common.core.exception.ServiceException;
import com.flossom.common.core.mapper.*;
@ -18,6 +23,8 @@ import com.flossom.common.security.utils.SecurityUtils;
import com.flossom.miniProgram.domain.vo.*;
import com.flossom.miniProgram.service.IWxUserMemberService;
import com.flossom.miniProgram.utils.MiniProgramUtils;
import com.flossom.miniProgram.utils.shuyun.ShuYunApiUtils;
import com.flossom.miniProgram.utils.shuyun.ShuYunConfig;
import com.flossom.system.api.RemoteAuthService;
import com.flossom.system.api.model.LoginUser;
import org.slf4j.Logger;
@ -28,6 +35,10 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAdjusters;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
@ -61,6 +72,9 @@ public class WxUserMemberServiceImpl implements IWxUserMemberService {
@Autowired
private WxUserIntegralLogMapper wxUserIntegralLogMapper;
@Autowired
private ShuYunConfig shuYunConfig;
@Override
@Transactional
@ -176,8 +190,11 @@ public class WxUserMemberServiceImpl implements IWxUserMemberService {
}
/**
* TODO:
* TODO: 1
*/
WxUserMember wxUserMember = wxUserMemberMapper.selectWxUserMemberById(SecurityUtils.getLoginUser().getWxUserMember().getId());
ShuYunApiUtils.registerMember(new ShuYunMember(wxUserMember.getUnionid(), shuYunConfig.getPlatCode(), shuYunConfig.getShopId(),
"用户" + wxUserMember.getId(), wxUserMember.getMobile(), DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, wxUserMember.getCreateTime())));
return wxCode2PhoneRet.getPhoneInfo().getPhoneNumber();
}
@ -189,15 +206,13 @@ public class WxUserMemberServiceImpl implements IWxUserMemberService {
if (wxUserMember == null) {
throw new ServiceException("用户不存在");
}
int floatScore = 0;
List<IntegralGlobal> integralGlobalList = integralGlobalMapper.selectIntegralGlobalList(new IntegralGlobal());
IntegralGlobal integralGlobal = integralGlobalList.get(0);
Boolean isCompleteInformation = false;
if (wxUserMember.getIsCompleteInformation() == null || wxUserMember.getIsCompleteInformation() == 0) {
isCompleteInformation = true;
// 修改完善状态
wxUserMember.setIsCompleteInformation(1);
List<IntegralGlobal> integralGlobalList = integralGlobalMapper.selectIntegralGlobalList(new IntegralGlobal());
IntegralGlobal integralGlobal = integralGlobalList.get(0);
floatScore = integralGlobal.getIntegral().intValue();
wxUserMember.setCredit(wxUserMember.getCredit() + integralGlobal.getIntegral().intValue());
// 保存积分详情
@ -212,7 +227,7 @@ public class WxUserMemberServiceImpl implements IWxUserMemberService {
wxUserIntegralLog.setCreateTime(DateUtils.getNowDate());
wxUserIntegralLogMapper.insertWxUserIntegralLog(wxUserIntegralLog);
// 2.4、用户注册成功发送消息
// 2.4、用户升级会员成功发送消息
WxScriptMessage wxScriptMessage = wxScriptMessageMapper.selectOneByMessageType(MessageTypeEnum.COMPLETE_USER_INFORMATION.getCode());
if (wxScriptMessage != null) {
WxUserScriptLog wxUserScriptLog = new WxUserScriptLog();
@ -229,17 +244,32 @@ public class WxUserMemberServiceImpl implements IWxUserMemberService {
wxUserScriptLog.setUpdateBy(null);
wxUserScriptLogMapper.insertWxUserScriptLog(wxUserScriptLog);
}
// TODO 首次完善,增加加分 (对接数云未完成)
}
BeanUtils.copyProperties(userMemberUpdateVo, wxUserMember);
wxUserMember.setUpdateTime(DateUtils.getNowDate());
wxUserMemberMapper.updateWxUserMember(wxUserMember);
// 刷新用户信息
// 首次完善用户信息,增加积分,刷新了缓存
LoginUserVo loginUserVo = refreshWxUserInfo();
// TODO 2、更新用户信息同步到数云 (已完成,未保存记录)
// 1、完善用户信息
ShuYunMember member = new ShuYunMember();
member.setId(wxUserMember.getUnionid());
member.setPlatCode(shuYunConfig.getPlatCode());
member.setShopId(shuYunConfig.getShopId());
member.setName(userMemberUpdateVo.getNickname());
member.setBirthday(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, userMemberUpdateVo.getBirthday()));
ShuYunApiUtils.modifyMember(member);
if (isCompleteInformation) {
loginUserVo.setIntegralText("您已完善个人信息,获得" + floatScore + "积分");
loginUserVo.setIntegralText("您已完善个人信息,获得" + integralGlobal.getIntegral().intValue() + "积分");
// TODO 3、首次完善通知数云增加积分 (已完成,未保存记录)
// 2、完善会员信息增加积分
String sequence = ShuYunConstants.POINT_SERIAL_NUMBER_PREFIX + LocalDateTime.now().format(DateTimeFormatter.ofPattern(DateUtils.YYYYMMDDHHMMSSS)) + RandomUtil.randomInt(1000, 9999);
ShuYunPointChange shuYunPointChange = new ShuYunPointChange(wxUserMember.getUnionid(), shuYunConfig.getPlatCode(), shuYunConfig.getShopId(),
sequence, ShuYunPointSourceEnum.OTHER.getSource(), integralGlobal.getIntegral().intValue(),
LocalDateTime.now().format(DateTimeFormatter.ofPattern(DateUtils.YYYY_MM_DD_HH_MM_SS)), "首次完善用户信息");
ShuYunApiUtils.pointChange(shuYunPointChange);
}
return loginUserVo;
}
@ -250,7 +280,7 @@ public class WxUserMemberServiceImpl implements IWxUserMemberService {
* @return
*/
@Override
@Transactional(propagation = Propagation.SUPPORTS)
@Transactional(propagation = Propagation.NOT_SUPPORTED)
public LoginUserVo refreshWxUserInfo() {
LoginUser loginUser = SecurityUtils.getLoginUser();
@ -266,6 +296,16 @@ public class WxUserMemberServiceImpl implements IWxUserMemberService {
BeanUtils.copyProperties(wxUserMember, loginUserVo);
loginUserVo.setToken(null);
loginUserVo.setIntegralText(null);
// TODO:调用数云接口获取最新的积分值(已完成,未保存操作记录)
ShuYunMember shuYunMember = ShuYunApiUtils.queryMember(wxUserMember.getUnionid(), shuYunConfig.getPlatCode(), shuYunConfig.getShopId());
loginUserVo.setCredit(Integer.valueOf(shuYunMember.getPoint()));
// TODO: 调用数云接口获取即将过期的积分值(未完成。。。。)
LocalDateTime now = LocalDateTime.now();
String startTime = now.plusHours(1).format(DateTimeFormatter.ofPattern(DateUtils.YYYY_MM_DD_HH_MM_SS));
String endTime = now.with(TemporalAdjusters.lastDayOfYear()).with(LocalTime.MAX).format(DateTimeFormatter.ofPattern(DateUtils.YYYY_MM_DD_HH_MM_SS));
// tenant 租户名称 数云说写死
Integer expireCredit = ShuYunApiUtils.pointWillDueSearch("zzsstest", wxUserMember.getUnionid(), "100000184001", "RELATIVE", startTime, endTime);
loginUserVo.setExpireCredit(expireCredit);
// 刷新缓存信息
String userKey = CacheConstants.LOGIN_TOKEN_KEY + loginUser.getToken();

Loading…
Cancel
Save