diff --git a/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/constant/ShuYunConstants.java b/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/constant/ShuYunConstants.java
new file mode 100644
index 0000000..2807d61
--- /dev/null
+++ b/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/constant/ShuYunConstants.java
@@ -0,0 +1,12 @@
+package com.flossom.common.core.constant;
+
+/**
+ * 数云 常量
+ */
+public class ShuYunConstants {
+ /**
+ * 平台内系统用户的唯一标志
+ */
+ public static final String POINT_SERIAL_NUMBER_PREFIX = "hz_serial_number-";
+
+}
diff --git a/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/domain/shuyun/ShuYunMember.java b/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/domain/shuyun/ShuYunMember.java
index 48621af..f3dacfe 100644
--- a/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/domain/shuyun/ShuYunMember.java
+++ b/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/domain/shuyun/ShuYunMember.java
@@ -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;
}
/**
diff --git a/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/utils/DateUtils.java b/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/utils/DateUtils.java
index f0c8ed3..1794248 100644
--- a/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/utils/DateUtils.java
+++ b/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/utils/DateUtils.java
@@ -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 = {
diff --git a/flossom-modules/flossom-mini-program/pom.xml b/flossom-modules/flossom-mini-program/pom.xml
index 4811904..3b54448 100644
--- a/flossom-modules/flossom-mini-program/pom.xml
+++ b/flossom-modules/flossom-mini-program/pom.xml
@@ -101,6 +101,20 @@
spring-boot-starter-test
test
+
+
+
+ com.shuyun.open
+ open-platform-sdk
+ 1.0.1
+ system
+ ${project.basedir}/src/main/resources/lib/open-platform-sdk-1.0.1.jar
+
+
+
+ cn.hutool
+ hutool-core
+
@@ -109,6 +123,17 @@
org.springframework.boot
spring-boot-maven-plugin
+
+
+ true
+
+
+
+
+ repackage
+
+
+
diff --git a/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/controller/WxUserIntegralController.java b/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/controller/WxUserIntegralController.java
index 364bcb0..956983c 100644
--- a/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/controller/WxUserIntegralController.java
+++ b/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/controller/WxUserIntegralController.java
@@ -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 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);
}
}
diff --git a/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/service/IWxUserIntegralService.java b/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/service/IWxUserIntegralService.java
index 0cebe02..a4cc2a0 100644
--- a/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/service/IWxUserIntegralService.java
+++ b/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/service/IWxUserIntegralService.java
@@ -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 obtainUserIntegral();
+ TableDataInfo obtainUserIntegral(Integer pageNum, Integer pageSize);
}
diff --git a/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/service/impl/WxUserIntegralServiceImpl.java b/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/service/impl/WxUserIntegralServiceImpl.java
index fd38a59..c545cd5 100644
--- a/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/service/impl/WxUserIntegralServiceImpl.java
+++ b/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/service/impl/WxUserIntegralServiceImpl.java
@@ -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 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 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 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;
}
}
diff --git a/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/service/impl/WxUserMemberServiceImpl.java b/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/service/impl/WxUserMemberServiceImpl.java
index 109d00f..0dd744c 100644
--- a/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/service/impl/WxUserMemberServiceImpl.java
+++ b/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/service/impl/WxUserMemberServiceImpl.java
@@ -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 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 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();
diff --git a/flossom-modules/flossom-mini-program/src/main/resources/lib/open-platform-sdk-1.0.1.jar b/flossom-modules/flossom-mini-program/src/main/resources/lib/open-platform-sdk-1.0.1.jar
new file mode 100644
index 0000000..45e534e
Binary files /dev/null and b/flossom-modules/flossom-mini-program/src/main/resources/lib/open-platform-sdk-1.0.1.jar differ