|
|
@@ -31,16 +31,13 @@ import com.fs.course.vo.newfs.FsCourseAnalysisCountVO;
|
|
|
import com.fs.course.vo.newfs.FsCourseAnalysisVO;
|
|
|
import com.fs.course.vo.newfs.FsUserCourseVideoPageListVO;
|
|
|
import com.fs.his.vo.OptionsVO;
|
|
|
+import com.fs.hisStore.mapper.*;
|
|
|
import com.fs.qw.param.QwFsUserParam;
|
|
|
import com.fs.qw.vo.QwFsUserVO;
|
|
|
import com.fs.hisStore.domain.*;
|
|
|
import com.fs.hisStore.dto.FsStoreCartDTO;
|
|
|
import com.fs.hisStore.dto.FsUserTransferParamDTO;
|
|
|
import com.fs.hisStore.enums.BillDetailEnum;
|
|
|
-import com.fs.hisStore.mapper.FsStoreOrderScrmMapper;
|
|
|
-import com.fs.hisStore.mapper.FsStoreProductAttrValueScrmMapper;
|
|
|
-import com.fs.hisStore.mapper.FsUserCourseCountScrmMapper;
|
|
|
-import com.fs.hisStore.mapper.FsUserScrmMapper;
|
|
|
import com.fs.hisStore.param.SelectCusListPageParam;
|
|
|
import com.fs.hisStore.param.h5.CourseAnalysisParam;
|
|
|
import com.fs.hisStore.param.h5.FsUserPageListParam;
|
|
|
@@ -138,6 +135,9 @@ public class FsUserScrmServiceImpl implements IFsUserScrmService
|
|
|
@Autowired
|
|
|
private IFsUserProjectTagScrmService userProjectTagService;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private UserUpgradeLogMapper userUpgradeLogMapper;
|
|
|
+
|
|
|
/**
|
|
|
* 查询用户
|
|
|
*
|
|
|
@@ -1073,6 +1073,139 @@ public class FsUserScrmServiceImpl implements IFsUserScrmService
|
|
|
return fsUserMapper.selectFsUserByOpenId(openid);
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public Integer queryUserLevel(Long userId) {
|
|
|
+ FsUserScrm fsUserScrm = fsUserMapper.selectFsUserById(userId);
|
|
|
+ if(ObjectUtils.isNull(fsUserScrm.getSpreadUserId()) || ObjectUtil.equal(fsUserScrm.getSpreadUserId(),0L)){
|
|
|
+ return 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ Long spreadUserId = fsUserScrm.getSpreadUserId();
|
|
|
+ FsUserScrm fsUserScrm1 = fsUserMapper.selectFsUserById(spreadUserId);
|
|
|
+ if(ObjectUtils.isNull(fsUserScrm1.getSpreadUserId()) || ObjectUtil.equal(fsUserScrm1.getSpreadUserId(),0L)){
|
|
|
+ return 2;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ spreadUserId = fsUserScrm1.getSpreadUserId();
|
|
|
+ fsUserScrm1 = fsUserMapper.selectFsUserById(spreadUserId);
|
|
|
+ if(ObjectUtils.isNull(fsUserScrm1.getSpreadUserId()) || ObjectUtil.equal(fsUserScrm1.getSpreadUserId(),0L)){
|
|
|
+ return 3;
|
|
|
+ }
|
|
|
+
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 升级用户等级并记录
|
|
|
+ * @param userId 用户ID
|
|
|
+ * @return 升级结果:0-升级成功,1-用户已是1级无需升级,2-用户升级为1级,3-用户升级为2级
|
|
|
+ */
|
|
|
+ @Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRED)
|
|
|
+ @Override
|
|
|
+ public int upgradeUser(Long userId) {
|
|
|
+ FsUserScrm currentUser = fsUserMapper.selectFsUserById(userId);
|
|
|
+ if (currentUser == null) {
|
|
|
+ throw new RuntimeException("用户不存在");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 保存旧的上级ID,用于记录
|
|
|
+ Long oldSpreadUserId = currentUser.getSpreadUserId();
|
|
|
+ int oldLevel = getUserLevel(currentUser);
|
|
|
+ int newLevel = oldLevel;
|
|
|
+ Long newSpreadUserId = oldSpreadUserId;
|
|
|
+
|
|
|
+ // 检查用户是否有上级,无上级则为1级用户,不需要升级
|
|
|
+ if (ObjectUtils.isNull(oldSpreadUserId) || ObjectUtil.equal(oldSpreadUserId, 0L)) {
|
|
|
+ return 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ Long directParentId = oldSpreadUserId;
|
|
|
+ FsUserScrm directParent = fsUserMapper.selectFsUserById(directParentId);
|
|
|
+ if (directParent == null) {
|
|
|
+ throw new RuntimeException("用户的上级未找到");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 检查直接上级是否有上级,无上级则直接上级为1级用户,当前用户为2级用户
|
|
|
+ if (ObjectUtils.isNull(directParent.getSpreadUserId()) || ObjectUtil.equal(directParent.getSpreadUserId(), 0L)) {
|
|
|
+ newSpreadUserId = 0L;
|
|
|
+ newLevel = 1;
|
|
|
+ currentUser.setSpreadUserId(newSpreadUserId);
|
|
|
+ fsUserMapper.updateFsUser(currentUser);
|
|
|
+
|
|
|
+ saveUpgradeLog(userId, oldLevel, newLevel, oldSpreadUserId, newSpreadUserId, "系统自动升级");
|
|
|
+ return 2;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 获取间接上级(上上级)信息
|
|
|
+ Long grandParentId = directParent.getSpreadUserId();
|
|
|
+ FsUserScrm grandParent = fsUserMapper.selectFsUserById(grandParentId);
|
|
|
+ if (grandParent == null) {
|
|
|
+ throw new RuntimeException("用户的上上级未找到");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 如果间接上级没有上级,则间接上级为1级,直接上级为2级,当前用户为3级
|
|
|
+ if (ObjectUtils.isNull(grandParent.getSpreadUserId()) || ObjectUtil.equal(grandParent.getSpreadUserId(), 0L)) {
|
|
|
+ newSpreadUserId = grandParentId;
|
|
|
+ newLevel = 2;
|
|
|
+ currentUser.setSpreadUserId(newSpreadUserId);
|
|
|
+ fsUserMapper.updateFsUser(currentUser);
|
|
|
+
|
|
|
+ saveUpgradeLog(userId, oldLevel, newLevel, oldSpreadUserId, newSpreadUserId, "系统自动升级");
|
|
|
+ return 3;
|
|
|
+ }
|
|
|
+
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 根据用户关系确定用户等级
|
|
|
+ * @param user 用户对象
|
|
|
+ * @return 用户等级:1-一级用户,2-二级用户,3-三级用户,0-其他
|
|
|
+ */
|
|
|
+ private int getUserLevel(FsUserScrm user) {
|
|
|
+ if (ObjectUtils.isNull(user.getSpreadUserId()) || ObjectUtil.equal(user.getSpreadUserId(), 0L)) {
|
|
|
+ return 1; // 一级用户
|
|
|
+ }
|
|
|
+
|
|
|
+ FsUserScrm parent = fsUserMapper.selectFsUserById(user.getSpreadUserId());
|
|
|
+ if (parent == null) {
|
|
|
+ return 0; // 异常情况
|
|
|
+ }
|
|
|
+
|
|
|
+ if (ObjectUtils.isNull(parent.getSpreadUserId()) || ObjectUtil.equal(parent.getSpreadUserId(), 0L)) {
|
|
|
+ return 2; // 二级用户
|
|
|
+ }
|
|
|
+
|
|
|
+ FsUserScrm grandParent = fsUserMapper.selectFsUserById(parent.getSpreadUserId());
|
|
|
+ if (grandParent == null) {
|
|
|
+ return 0; // 异常情况
|
|
|
+ }
|
|
|
+
|
|
|
+ if (ObjectUtils.isNull(grandParent.getSpreadUserId()) || ObjectUtil.equal(grandParent.getSpreadUserId(), 0L)) {
|
|
|
+ return 3; // 三级用户
|
|
|
+ }
|
|
|
+
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * 保存用户升级记录
|
|
|
+ */
|
|
|
+ private void saveUpgradeLog(Long userId, int oldLevel, int newLevel, Long oldSpreadUserId, Long newSpreadUserId, String reason) {
|
|
|
+ UserUpgradeLog log = new UserUpgradeLog();
|
|
|
+ log.setUserId(userId);
|
|
|
+ log.setOldLevel(oldLevel);
|
|
|
+ log.setNewLevel(newLevel);
|
|
|
+ log.setOldSpreadUserId(oldSpreadUserId);
|
|
|
+ log.setNewSpreadUserId(newSpreadUserId);
|
|
|
+ log.setUpgradeTime(new Date());
|
|
|
+ log.setUpgradeReason(reason);
|
|
|
+ log.setOperator("SYSTEM");
|
|
|
+
|
|
|
+ userUpgradeLogMapper.insert(log);
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 查询会员选项列表
|
|
|
* @param params 参数
|