|
@@ -9,14 +9,22 @@ import com.microsvc.toolkit.common.response.template.R;
|
|
|
import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
|
|
|
import com.yonge.cooleshow.auth.api.dto.RealnameAuthReq;
|
|
|
import com.yonge.cooleshow.auth.api.entity.SysUser;
|
|
|
+import com.yonge.cooleshow.biz.dal.entity.CourseGroup;
|
|
|
+import com.yonge.cooleshow.biz.dal.entity.ImGroup;
|
|
|
+import com.yonge.cooleshow.biz.dal.entity.ImGroupMember;
|
|
|
import com.yonge.cooleshow.biz.dal.entity.Student;
|
|
|
import com.yonge.cooleshow.biz.dal.entity.Teacher;
|
|
|
+import com.yonge.cooleshow.biz.dal.entity.UserOrder;
|
|
|
+import com.yonge.cooleshow.biz.dal.entity.UserOrderRefund;
|
|
|
+import com.yonge.cooleshow.biz.dal.entity.VideoLessonGroup;
|
|
|
+import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
|
|
|
import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
|
|
|
+import com.yonge.cooleshow.biz.dal.enums.ImGroupType;
|
|
|
+import com.yonge.cooleshow.biz.dal.enums.OrderStatusEnum;
|
|
|
+import com.yonge.cooleshow.biz.dal.enums.im.EImGroupMemberRoleType;
|
|
|
import com.yonge.cooleshow.biz.dal.mapper.SysUserMapper;
|
|
|
-import com.yonge.cooleshow.biz.dal.service.StudentService;
|
|
|
-import com.yonge.cooleshow.biz.dal.service.SysUserContractRecordService;
|
|
|
-import com.yonge.cooleshow.biz.dal.service.SysUserService;
|
|
|
-import com.yonge.cooleshow.biz.dal.service.TeacherService;
|
|
|
+import com.yonge.cooleshow.biz.dal.service.*;
|
|
|
+import com.yonge.cooleshow.biz.dal.vo.UserAccountVo;
|
|
|
import com.yonge.cooleshow.biz.dal.wrapper.UserInfoWrapper;
|
|
|
import com.yonge.cooleshow.common.entity.HttpResponseResult;
|
|
|
import com.yonge.cooleshow.common.enums.ContractTemplateTypeEnum;
|
|
@@ -26,16 +34,24 @@ import com.yonge.toolset.thirdparty.message.MessageSenderPluginContext;
|
|
|
import com.yonge.toolset.thirdparty.user.realname.RealnameAuthenticationPlugin;
|
|
|
import com.yonge.toolset.utils.idcard.IdcardInfoExtractor;
|
|
|
import com.yonge.toolset.utils.idcard.IdcardValidator;
|
|
|
+import jodd.util.StringUtil;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.util.CollectionUtils;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.Arrays;
|
|
|
+import java.util.Collection;
|
|
|
import java.util.HashMap;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
import java.util.Optional;
|
|
|
|
|
|
+@Slf4j
|
|
|
@Service
|
|
|
public class SysUserServiceImpl implements SysUserService {
|
|
|
|
|
@@ -55,6 +71,28 @@ public class SysUserServiceImpl implements SysUserService {
|
|
|
private MessageSenderPluginContext messageSenderPluginContext;
|
|
|
@Resource
|
|
|
private MessageFeignClientService messageFeignClientService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private UserOrderService userOrderService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private UserOrderRefundService userOrderRefundService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ImGroupMemberService imGroupMemberService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ImGroupService imGroupService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private CourseGroupService courseGroupService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private VideoLessonGroupService videoLessonGroupService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private UserAccountService userAccountService;
|
|
|
+
|
|
|
@Override
|
|
|
public SysUserMapper getDao() {
|
|
|
return sysUserMapper;
|
|
@@ -200,4 +238,104 @@ public class SysUserServiceImpl implements SysUserService {
|
|
|
return EClientType.BACKEND;
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<String> accountLogoffCheck(String phone) {
|
|
|
+ SysUser sysUser = this.getDao().findUserByPhone(phone);
|
|
|
+ if (sysUser == null || Boolean.TRUE.equals(sysUser.getDelFlag())) {
|
|
|
+ throw new BizException("账号不存在");
|
|
|
+ }
|
|
|
+ List<String> errMsg = new ArrayList<>();
|
|
|
+ Long userId = sysUser.getId();
|
|
|
+
|
|
|
+ // 存在待支付、未确认收货、售后处理的订单
|
|
|
+ Integer count = userOrderService.lambdaQuery()
|
|
|
+ .eq(UserOrder::getUserId, userId)
|
|
|
+ .in(UserOrder::getStatus, Arrays.asList(OrderStatusEnum.WAIT_PAY, OrderStatusEnum.PAYING, OrderStatusEnum.PAID))
|
|
|
+ .count();
|
|
|
+ if (count > 0) {
|
|
|
+ errMsg.add("账户存在未支付、未确认收货、售后处理中的订单");
|
|
|
+ } else {
|
|
|
+ Integer refundCount = userOrderRefundService.lambdaQuery()
|
|
|
+ .eq(UserOrderRefund::getUserId, userId)
|
|
|
+ .eq(UserOrderRefund::getStatus, AuthStatusEnum.DOING)
|
|
|
+ .count();
|
|
|
+ if (refundCount > 0) {
|
|
|
+ errMsg.add("账户存在未支付、未确认收货、售后处理中的订单");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ Teacher teacher = teacherService.getById(userId);
|
|
|
+
|
|
|
+ if (teacher != null) {
|
|
|
+ // 存在群主身份
|
|
|
+ List<ImGroupMember> groupMembers = imGroupMemberService.lambdaQuery()
|
|
|
+ .eq(ImGroupMember::getUserId, userId)
|
|
|
+ .eq(ImGroupMember::getGroupRoleType, EImGroupMemberRoleType.Owner)
|
|
|
+ .list();
|
|
|
+ List<String> groupIdList = groupMembers.stream().map(ImGroupMember::getGroupId).collect(Collectors.toList());
|
|
|
+ if (groupIdList.isEmpty()) {
|
|
|
+ Collection<ImGroup> imGroups = imGroupService.listByIds(groupIdList);
|
|
|
+ long orgGroups = imGroups.stream().filter(next -> ImGroupType.ORG.equals(next.getType())).count();
|
|
|
+ if (orgGroups > 0) {
|
|
|
+ errMsg.add("账户为机构群群主、需要庄毅群主或解散群聊");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 存在进行中的课程
|
|
|
+ // 陪练课
|
|
|
+ Integer course = courseGroupService.lambdaQuery()
|
|
|
+ .eq(CourseGroup::getTeacherId, userId)
|
|
|
+ .in(CourseGroup::getType, Arrays.asList("PRACTICE", "LIVE", "PIANO_ROOM_CLASS"))
|
|
|
+ .in(CourseGroup::getStatus, Arrays.asList("ING", "APPLY"))
|
|
|
+ .count();
|
|
|
+ // 视频课
|
|
|
+ Integer videoCourse = videoLessonGroupService.lambdaQuery()
|
|
|
+ .eq(VideoLessonGroup::getTeacherId, userId)
|
|
|
+ .eq(VideoLessonGroup::getShelvesFlag, 1)
|
|
|
+ .count();
|
|
|
+
|
|
|
+ if (course > 0 || videoCourse > 0) {
|
|
|
+ errMsg.add("存在进行中的课程");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 存在未提现的金额
|
|
|
+ UserAccountVo detail = userAccountService.detail(userId);
|
|
|
+ if (detail != null && (detail.getAmountTotal().compareTo(BigDecimal.ZERO) > 0 || detail.getAmountUnrecorded().compareTo(BigDecimal.ZERO) > 0)) {
|
|
|
+ errMsg.add("收入未结算/推广计划未入账");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return errMsg;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void dismissFanImGroup(String phone) {
|
|
|
+ SysUser sysUser = this.getDao().findUserByPhone(phone);
|
|
|
+ if (sysUser == null) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ Teacher teacher = teacherService.getById(sysUser.getId());
|
|
|
+ if (teacher == null) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ List<ImGroupMember> groupMembers = imGroupMemberService.lambdaQuery()
|
|
|
+ .eq(ImGroupMember::getUserId, sysUser.getId())
|
|
|
+ .eq(ImGroupMember::getGroupRoleType, EImGroupMemberRoleType.Owner)
|
|
|
+ .list();
|
|
|
+ List<String> groupIdList = groupMembers.stream().map(ImGroupMember::getGroupId).collect(Collectors.toList());
|
|
|
+ if (groupIdList.isEmpty()) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ Collection<ImGroup> imGroups = imGroupService.listByIds(groupIdList);
|
|
|
+ List<String> groupIds = imGroups.stream().filter(next -> ImGroupType.FAN.equals(next.getType()) || ImGroupType.COURSE.equals(next.getType()))
|
|
|
+ .map(ImGroup::getId).collect(Collectors.toList());
|
|
|
+
|
|
|
+ for (String groupId : groupIds) {
|
|
|
+ try {
|
|
|
+ imGroupService.dismiss(groupId);
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("群解散失败:" + groupId);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|