liujc 2 лет назад
Родитель
Сommit
610232b12c
14 измененных файлов с 222 добавлено и 88 удалено
  1. 1 1
      cooleshow-auth/auth-api/src/main/java/com/yonge/cooleshow/auth/api/client/SysUserFeignService.java
  2. 31 0
      cooleshow-auth/auth-api/src/main/java/com/yonge/cooleshow/auth/api/entity/UserPassword.java
  3. 26 0
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/web/controller/UserController.java
  4. 1 1
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/StudentController.java
  5. 5 5
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/execl/analysis/TenantAccountRecordImportAnalysis.java
  6. 23 35
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/StudentServiceImpl.java
  7. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantAccountRecordServiceImpl.java
  8. 69 14
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantActivationCodeServiceImpl.java
  9. 50 7
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserPaymentCoreServiceImpl.java
  10. 7 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/UserPaymentOrderWrapper.java
  11. 2 13
      cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/StudentController.java
  12. 3 0
      cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/UserOrderController.java
  13. 0 11
      cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/open/OpenStudentController.java
  14. 3 0
      cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/vo/UserPaymentOrderVo.java

+ 1 - 1
cooleshow-auth/auth-api/src/main/java/com/yonge/cooleshow/auth/api/client/SysUserFeignService.java

@@ -66,7 +66,7 @@ public interface SysUserFeignService {
 	@ApiOperation(value = "退出登录")
 	HttpResponseResult<String> logout();
 
-	@GetMapping(value = "exit/{clientId}/{phone}")
+	@GetMapping(value = "exit/{clientId}/{phone}", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
 	@ApiOperation(value = "退出登录")
 	HttpResponseResult<String> logout(@PathVariable("clientId") String clientId, @PathVariable("phone") String phone);
 

+ 31 - 0
cooleshow-auth/auth-api/src/main/java/com/yonge/cooleshow/auth/api/entity/UserPassword.java

@@ -0,0 +1,31 @@
+package com.yonge.cooleshow.auth.api.entity;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+@ApiModel("用户账号密码")
+@Data
+public class UserPassword {
+
+
+    @ApiModel("校验密码")
+    @Data
+    public static class CheckPassword {
+
+        @ApiModelProperty("密码")
+        @NotNull(message = "密码不能为空")
+        private String password;
+    }
+
+    @ApiModel("校验验证码")
+    @Data
+    public static class CheckVerityCode {
+
+        @ApiModelProperty("验证码")
+        @NotNull(message = "验证码不能为空")
+        private String code;
+    }
+}

+ 26 - 0
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/web/controller/UserController.java

@@ -6,6 +6,7 @@ import com.yonge.cooleshow.auth.api.dto.UpdatePasswordDto;
 import com.yonge.cooleshow.auth.api.dto.UserSetReq;
 import com.yonge.cooleshow.auth.api.entity.SysRole;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.auth.api.entity.UserPassword;
 import com.yonge.cooleshow.auth.api.vo.UserSetVo;
 import com.yonge.cooleshow.auth.core.service.CustomTokenServices;
 import com.yonge.cooleshow.auth.service.SysConfigService;
@@ -40,6 +41,7 @@ import org.springframework.http.MediaType;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.security.authentication.BadCredentialsException;
 import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
@@ -672,4 +674,28 @@ public class UserController extends BaseController {
         result.put("customerServicePhone",sysConfigService.findConfigValue("customer_service_phone"));
         return succeed(result);
     }
+
+    @PostMapping("/checkPassword")
+    @ApiOperation(value = "校验密码")
+    public Object checkPassword(@Validated @RequestBody UserPassword.CheckPassword checkPassword){
+        AuthUser authUser = SecurityUtils.getUser();
+        SysUser sysUser = sysUserService.get(authUser.getUserId());
+        BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
+        if(!encoder.matches(checkPassword.getPassword(),sysUser.getPassword())){
+            throw new BizException("原密码错误");
+        }
+        return succeed();
+    }
+
+    @PostMapping("/checkVerityCode")
+    @ApiOperation(value = "校验验证码")
+    public Object checkVerityCode(@Validated @RequestBody UserPassword.CheckVerityCode checkVerityCode) {
+        AuthUser authUser = SecurityUtils.getUser();
+        SysUser sysUser = sysUserService.get(authUser.getUserId());
+        if (!smsCodeService.verifyValidCode(sysUser.getPhone(), checkVerityCode.getCode(),
+                "SMS_VERIFY_CODE_UPDATE_PSW")) {
+            return failed("验证码错误");
+        }
+        return succeed();
+    }
 }

+ 1 - 1
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/StudentController.java

@@ -229,7 +229,7 @@ public class StudentController extends BaseController {
         if (sysUser != null && sysUser.getUserType().contains(ClientEnum.STUDENT.getCode())) {
             throw new BizException("学生账号已经存在");
         }
-        studentService.addStudent(student);
+        studentService.save(student);
         return succeed();
     }
 }

+ 5 - 5
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/execl/analysis/TenantAccountRecordImportAnalysis.java

@@ -101,7 +101,7 @@ public class TenantAccountRecordImportAnalysis extends DataAnalysis<TenantAccoun
             // 课件信息校验
             tenantAccountRecord = recordMap.get(item.getId());
             if (Objects.isNull(tenantAccountRecord)) {
-                ret += "流水记录编号无效:" + item.getId();
+                ret += "流水记录编号无效:" + (StringUtils.isBlank(item.getId())?"不能为空":item.getId());
                 if (StringUtils.isNotEmpty(ret)) {
                     verifyDataMap.put(item.getRowIndex(), ret);
                     ret = ""; // 重置数据状态
@@ -111,17 +111,17 @@ public class TenantAccountRecordImportAnalysis extends DataAnalysis<TenantAccoun
 
             // 检测机构编号,金额,订单号,结算状态
             if (StringUtils.isBlank(item.getTenantId()) || !tenantAccountRecord.getTenantId().toString().equals(item.getTenantId())) {
-                ret += "机构编号无效:" + item.getTenantId();
+                ret += "机构编号无效:" + (StringUtils.isBlank(item.getTenantId())?"不能为空":item.getTenantId());
             }
 
             if (StringUtils.isBlank(item.getTransAmount()) || tenantAccountRecord.getTransAmount().compareTo(new BigDecimal(item.getTransAmount())) != 0) {
-                ret += "交易金额错误:" + item.getTransAmount();
+                ret += "交易金额错误:" + (StringUtils.isBlank(item.getTransAmount())?"不能为空":item.getTransAmount());
             }
             if (StringUtils.isBlank(item.getOrderNo()) || !tenantAccountRecord.getOrderNo().equals(item.getOrderNo())) {
-                ret += "订单号无效:" + item.getOrderNo();
+                ret += "订单号无效:" + (StringUtils.isBlank(item.getOrderNo())?"不能为空":item.getOrderNo());
             }
             if (StringUtils.isBlank(item.getSettlement()) || !Lists.newArrayList("是","否").contains(item.getSettlement())) {
-                ret += "是否完成结算无效:" + item.getSettlement();
+                ret += "是否完成结算无效:" + (StringUtils.isBlank(item.getSettlement())?"不能为空":item.getSettlement());
             }
             if (StringUtils.isNotEmpty(ret)) {
                 verifyDataMap.put(item.getRowIndex(), ret);

+ 23 - 35
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/StudentServiceImpl.java

@@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;
 import com.microsvc.toolkit.common.webportal.exception.BizException;
+import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dao.EmployeeDao;
 import com.yonge.cooleshow.biz.dal.dao.StudentDao;
@@ -119,6 +120,9 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, Student> impleme
     @Autowired
     private ImGroupMemberService imGroupMemberService;
 
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+
     @Override
     public StudentDao getDao() {
         return baseMapper;
@@ -596,26 +600,7 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, Student> impleme
         }
 
         student.setId(sysUser.getId());
-        Long tenantId = student.getTenantId();
         this.save(student);
-
-        try {
-            imGroupCoreService.register(String.valueOf(student.getId()), ClientEnum.STUDENT.getCode(),
-                    sysUser.getUsername(),student.getAvatar());
-        } catch (Exception e) {
-            log.error("学生注册IM失败:" + e.getMessage(), e);
-        }
-        // 加好友
-        if (tenantId != -1) {
-            // 自动与机构老师成为好友
-            List<Teacher> teacherList = teacherDao.selectList(Wrappers.<Teacher>lambdaQuery()
-                    .eq(Teacher::getTenantId, tenantId));
-            if (!teacherList.isEmpty()) {
-                teacherList.forEach(next -> imUserFriendService.saveUserFriend(next.getUserId(),
-                        new HashSet<>(ImmutableList.of(student.getId()))));
-            }
-        }
-
     }
 
     private Boolean updateStudent(StudentWrapper.Student studentInfo) {
@@ -623,17 +608,6 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, Student> impleme
         if (student == null) {
             throw new BizException("学生信息不存在");
         }
-        String avatar = studentInfo.getAvatar();
-        if (StringUtils.isEmpty(avatar)) {
-            avatar = sysConfigService.findConfigValue(SysConfigConstant.STUDENT_AVATAR);
-            studentInfo.setAvatar(avatar);
-        }
-        // 解绑
-//        if (Boolean.FALSE.equals(studentInfo.getBindTenant())) {
-//            studentInfo.setTenantId(-1L);
-//            // 退群,删除好友
-//            imUserFriendService.delFriendByTenantId(student.getTenantId(), student.getUserId());
-//        }
         // 手机号码修改
         if (!student.getPhone().equals(studentInfo.getPhone())) {
             com.yonge.cooleshow.biz.dal.entity.SysUser sysUser = getOrCreateAccount(studentInfo);
@@ -641,7 +615,7 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, Student> impleme
                     .set(Student::getTenantId, studentInfo.getTenantId())
                     .set(Student::getUserId, sysUser.getId())
                     .set(Student::getUpdateTime, new Date())
-                    .set(Student::getAvatar,studentInfo.getAvatar())
+                    .set(StringUtils.isNotEmpty(studentInfo.getAvatar()), Student::getAvatar, studentInfo.getAvatar())
                     .eq(Student::getUserId, studentInfo.getId())
                     .update();
         } else {
@@ -655,13 +629,15 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, Student> impleme
         }
         com.yonge.cooleshow.biz.dal.entity.SysUser sysUser = sysUserMapper.selectById(studentInfo.getId());
         sysUser.setGender(studentInfo.getGender());
-        sysUser.setAvatar(student.getAvatar());
+        sysUser.setAvatar(studentInfo.getAvatar());
         sysUser.setUsername(studentInfo.getName());
         sysUser.setBirthdate(studentInfo.getBirthdate());
         sysUserMapper.updateById(sysUser);
         try {
             // 注册IM
-            imGroupCoreService.register(String.valueOf(student.getUserId()),ClientEnum.STUDENT.getCode(), sysUser.getUsername(), avatar);
+            if (StringUtils.isNotBlank(sysUser.getAvatar())) {
+                imGroupCoreService.register(String.valueOf(student.getUserId()), ClientEnum.STUDENT.getCode(), sysUser.getUsername(), sysUser.getAvatar());
+            }
         } catch (Exception e) {
             log.warn("学生注册IM失败:"+e.getMessage());
         }
@@ -690,6 +666,18 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, Student> impleme
         } catch (Exception e) {
             log.warn("学生注册IM失败:"+e.getMessage());
         }
+
+
+        // 加好友
+        if (student.getTenantId() != null && student.getTenantId() != -1L) {
+            // 自动与机构老师成为好友
+            QueryWrapper<Teacher> queryWrapper = new QueryWrapper<>();
+            queryWrapper.lambda().eq(Teacher::getTenantId, student.getTenantId());
+            List<Teacher> teacherList = teacherDao.selectList(queryWrapper);
+            teacherList.forEach(next -> imUserFriendService.saveUserFriend(next.getUserId(),
+                    new HashSet<>(ImmutableList.of(sysUser.getId()))));
+        }
+
         return true;
     }
 
@@ -700,10 +688,10 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, Student> impleme
         com.yonge.cooleshow.biz.dal.entity.SysUser sysUser;
         if (!sysUsers.isEmpty()) {
             sysUser = sysUsers.get(0);
-            if (!sysUser.getId().equals(studentInfo.getId()) &&
-                    this.getBaseMapper().selectById(sysUser.getId()) != null) {
+            if (sysUser.getUserType().contains(ClientEnum.STUDENT.getCode())) {
                 throw new BizException("手机号已经注册学生账号");
             }
+            sysUser.setAvatar(studentInfo.getAvatar());
             sysUser.setGender(studentInfo.getGender());
             sysUser.setUsername(studentInfo.getName());
             sysUser.setBirthdate(studentInfo.getBirthdate());

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantAccountRecordServiceImpl.java

@@ -117,7 +117,7 @@ public class TenantAccountRecordServiceImpl extends ServiceImpl<TenantAccountRec
             return;
         }
         // 过滤为空的
-        List<TenantAccountRecordImport> collect = importList.stream().filter(o -> o.getPostStatus() == null).collect(Collectors.toList());
+        List<TenantAccountRecordImport> collect = importList.stream().filter(o -> o.getPostStatus() != null).collect(Collectors.toList());
         if (CollectionUtils.isEmpty(collect)) {
             return;
         }

+ 69 - 14
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantActivationCodeServiceImpl.java

@@ -416,10 +416,19 @@ public class TenantActivationCodeServiceImpl extends ServiceImpl<TenantActivatio
         List<StudentVo> studentVos = studentDao.selectPage(PageUtil.getPage(studentSearch), studentSearch);
         Map<String, StudentVo> mapStudentByPhone = studentVos.stream().collect(Collectors.toMap(StudentVo::getPhone, Function.identity()));
 
-        Map<Integer,List<String>> errMsgMap = new LinkedHashMap<>();
+//        Map<Integer,List<String>> errMsgMap = new LinkedHashMap<>();
         Map<String, Integer> codeRowMap = new HashMap<>();
 
-        String errTemplate = "第%s行%s";
+
+        String phone_err = "手机号错误或已注册成为其他机构";
+        List<Integer> phone_err_lines = new ArrayList<>();
+        String code_send = "激活码已被发放";
+        List<Integer> code_send_lines = new ArrayList<>();
+        String code_not_exist = "激活码不存在";
+        List<Integer> code_not_exist_lines = new ArrayList<>();
+        String code_repeat = "激活码重复";
+        Map<String,List<Integer>> code_repeat_lines = new LinkedHashMap<>();
+
         int rowIndex = 1;
         // 校验数据格式是否错误 第二行开始取数据
         for (TenantActivationCodeWrapper.ImportTemplate template : importTemplates) {
@@ -430,40 +439,86 @@ public class TenantActivationCodeServiceImpl extends ServiceImpl<TenantActivatio
                 continue;
             }
             int msgRowNo = rowIndex;
-            List<String> errList = errMsgMap.getOrDefault(msgRowNo, new ArrayList<>());
+//            List<String> errList = errMsgMap.getOrDefault(msgRowNo, new ArrayList<>());
             String code = template.getCode();
             if (codeRowMap.containsKey(code)) {
-                errList.add(String.format(errTemplate, msgRowNo, "激活码重复"));
+                List<Integer> lines = code_repeat_lines.getOrDefault(code, new ArrayList<>());
+                Integer repeatLine = codeRowMap.get(code);
+                if (!lines.contains(repeatLine)) {
+                    lines.add(repeatLine);
+                }
+                lines.add(msgRowNo);
             } else {
                 codeRowMap.put(acCode, msgRowNo);
             }
 
             if (!mapByCode.containsKey(code)) {
-                errList.add(String.format(errTemplate, msgRowNo, "激活码不存在"));
+                code_not_exist_lines.add(msgRowNo);
             } else {
                 TenantActivationCode tenantActivationCode = mapByCode.get(code);
                 if (tenantActivationCode.getActivationStatus() || EActivationCode.SEND.equals(tenantActivationCode.getSendStatus())) {
-                    errList.add(String.format(errTemplate, msgRowNo, "激活码已被发放/激活"));
+                    code_send_lines.add(msgRowNo);
                 }
             }
             String phone = template.getPhone();
             if (StringUtils.isNotEmpty(phone)) {
                 if (!Pattern.matches(PHONE_REG, phone.trim()) ||
                         (mapStudentByPhone.containsKey(phone) && !mapStudentByPhone.get(phone).getTenantId().equals(tenantId))) {
-                    errList.add(String.format(errTemplate, msgRowNo, "手机号错误或已注册成为其他机构学员"));
+                    phone_err_lines.add(msgRowNo);
                 }
             }
 
-            errMsgMap.put(msgRowNo, errList);
+//            errMsgMap.put(msgRowNo, errList);
         }
 
-        List<String> errMsg = errMsgMap.values().stream().flatMap(Collection::stream).collect(Collectors.toList());
-        if (!errMsg.isEmpty()) {
-            String errLines = errMsgMap.entrySet().stream().filter(next -> CollectionUtils.isNotEmpty(next.getValue()))
-                    .map(next -> String.valueOf(next.getKey())).collect(Collectors.joining("、"));
-            errMsg.add(0, "第" + errLines + "行存在错误");
-            throw new BizException(String.join(",", errMsg));
+
+        int totalErrSize = phone_err_lines.size() + code_send_lines.size() + code_not_exist_lines.size() + code_repeat_lines.values().size();
+        if (totalErrSize > 0) {
+            StringBuilder errMsg = new StringBuilder("");
+            errMsg.append("导入失败,共").append(totalErrSize).append("条错误信息~");
+            List<String> errData = new ArrayList<>();
+            if (!phone_err_lines.isEmpty()) {
+                StringBuilder err = new StringBuilder("");
+                String errLines = phone_err_lines.stream().map(String::valueOf).collect(Collectors.joining("、"));
+                err.append("第").append(errLines).append("行错误,").append(phone_err);
+                errData.add(err.toString());
+            }
+
+            if (!code_send_lines.isEmpty()) {
+                StringBuilder err = new StringBuilder("");
+                String errLines = code_send_lines.stream().map(String::valueOf).collect(Collectors.joining("、"));
+                err.append("第").append(errLines).append("行错误,").append(errLines).append(code_send);
+                errData.add(err.toString());
+            }
+
+            if (!code_not_exist_lines.isEmpty()) {
+                StringBuilder err = new StringBuilder("");
+                String errLines = code_not_exist_lines.stream().map(String::valueOf).collect(Collectors.joining("、"));
+                err.append("第").append(errLines).append("行错误,").append(code_not_exist);
+                errData.add(err.toString());
+            }
+
+            if (!code_repeat_lines.isEmpty()) {
+                StringBuilder err = new StringBuilder("");
+                List<String> lineErr = new ArrayList<>();
+                for (List<Integer> value : code_repeat_lines.values()) {
+                    String errLines = value.stream().map(String::valueOf).collect(Collectors.joining("、"));
+                    lineErr.add("第" + errLines + "行");
+                }
+                err.append(String.join(",", lineErr)).append("行错误,").append(code_repeat);
+                errData.add(err.toString());
+            }
+            throw new BizException(errMsg.toString(), errData);
         }
+
+
+//        List<String> errMsg = errMsgMap.values().stream().flatMap(Collection::stream).collect(Collectors.toList());
+//        if (!errMsg.isEmpty()) {
+//            String errLines = errMsgMap.entrySet().stream().filter(next -> CollectionUtils.isNotEmpty(next.getValue()))
+//                    .map(next -> String.valueOf(next.getKey())).collect(Collectors.joining("、"));
+//            errMsg.add(0, "第" + errLines + "行存在错误");
+//            throw new BizException(String.join(",", errMsg));
+//        }
         List<TenantActivationCode> tenantActivationCodes = importTemplates.stream()
                 .filter(next -> StringUtils.isNotEmpty(next.getCode()) && StringUtils.isNotBlank(next.getPhone()))
                 .map(next -> {

+ 50 - 7
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserPaymentCoreServiceImpl.java

@@ -501,9 +501,16 @@ public class UserPaymentCoreServiceImpl implements UserPaymentCoreService {
     public UserPaymentOrderWrapper.PaymentConfig executeOrder(UserPaymentOrderWrapper.UserPaymentOrder orderReq) {
 
         // 填充订单基本信息
+        String defaultService = paymentServiceContext.defaultService();
+        if (EPayerType.ORIGINAL.getCode().toLowerCase().equals(defaultService)) {
+            // 原生支付需要传入支付三方渠道
+            if (StringUtils.isEmpty(orderReq.getPaymentType())) {
+                throw new BizException("支付三方渠道不能为空");
+            }
+        }
         orderReq
             .orderNo(IdWorker.getIdStr())
-            .paymentVender(Optional.ofNullable(orderReq.getPaymentType()).orElse(paymentServiceContext.getPaymentService().venderName()))
+            .paymentVender(Optional.ofNullable(orderReq.getPaymentType()).orElse(defaultService))
             .paymentChannel("")
             .status(EPaymentStatus.WAIT_PAY)
             .originalPrice(BigDecimal.ZERO);
@@ -736,12 +743,26 @@ public class UserPaymentCoreServiceImpl implements UserPaymentCoreService {
         // 查询订单状态
         UserPaymentOrderWrapper.UserPaymentOrder userPaymentOrder = userPaymentOrderService.getUserPaymentOrderByUserId(Long.parseLong(reqConfig.getUserId()),
             reqConfig.getMerOrderNo());
+
+        // 默认支付三方
+        if (StringUtils.isNotEmpty(reqConfig.getPaymentVendor())
+                && !reqConfig.getPaymentVendor().equals(userPaymentOrder.getPaymentVendor())) {
+            // 原生支付拉起支付时,可以切换支付渠道
+            UserPaymentOrderWrapper.UserPaymentOrder update = UserPaymentOrderWrapper.UserPaymentOrder
+                .builder()
+                .id(userPaymentOrder.getId())
+                .paymentVendor(reqConfig.getPaymentVendor())
+                .build();
+            userPaymentOrderService.updateById(update);
+
+            // 重置支付三方渠道
+            userPaymentOrder.setPaymentVendor(reqConfig.getPaymentVendor());
+        }
+
         if (Objects.isNull(userPaymentOrder)) {
             throw new BizException("订单不存在");
         }
 
-
-
 //         订单支付已完成
         switch (userPaymentOrder.getStatus()) {
             case PAID:
@@ -1045,11 +1066,33 @@ public class UserPaymentCoreServiceImpl implements UserPaymentCoreService {
         }
         
         // 结算给机构的,检测机构的主账户,没有主账户的,查询-1的主账户
-        PaymentMerchantConfig merchantConfig = paymentMerchantConfigService.getByPaymentVendor(paymentServiceContext.getProperties().getDefaultService());
-        if (Objects.isNull(merchantConfig)) {
-            throw new BizException("平台主账户信息不存在");
+        String defaultService = paymentServiceContext.getProperties().getDefaultService();
+        if (EPayerType.ORIGINAL.getCode().toLowerCase().equals(defaultService)) {
+            // 微信、支付宝原生支付
+            if (Objects.isNull(payTypeReq.getClientType())) {
+                throw new BizException("支付客户端类型不能为空");
+            }
+            List<PaymentMerchantConfig> configs = paymentMerchantConfigService.lambdaQuery()
+                    .eq(PaymentMerchantConfig::getPayerType, EPayerType.ORIGINAL.getCode())
+                    .eq(PaymentMerchantConfig::getPaymentClient, payTypeReq.getClientType().getCode())
+                    .eq(PaymentMerchantConfig::getStatus, true)
+                    .list();
+            if (CollectionUtils.isEmpty(configs)) {
+                throw new BizException("平台主账户信息不存在");
+            }
+            // 默认支付服务
+            resp.setPaymentVendor(configs.get(0).getPaymentVendor());
+
+            // 设置支付服务渠道
+            resp.setPaymentChannels(configs.stream().map(PaymentMerchantConfig::getPaymentVendor).distinct().collect(Collectors.toList()));
+        } else {
+            // 易宝,汇付三方支付
+            PaymentMerchantConfig merchantConfig = paymentMerchantConfigService.getByPaymentVendor(defaultService);
+            if (Objects.isNull(merchantConfig)) {
+                throw new BizException("平台主账户信息不存在");
+            }
+            resp.setPaymentVendor(merchantConfig.getPaymentVendor());
         }
-        resp.setPaymentVendor(merchantConfig.getPaymentVendor());
         return resp;
     }
 

+ 7 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/UserPaymentOrderWrapper.java

@@ -10,6 +10,7 @@ import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.enums.GoodTypeEnum;
 import com.yonge.cooleshow.biz.dal.enums.OrderStatusEnum;
 import com.yonge.cooleshow.biz.dal.enums.OrderTypeEnum;
+import com.yonge.cooleshow.common.enums.EPayerType;
 import com.yonge.cooleshow.common.enums.EPaymentVersion;
 import com.yonge.cooleshow.common.enums.payment.EGoodsType;
 import com.yonge.cooleshow.common.enums.payment.EPaymentStatus;
@@ -542,6 +543,9 @@ public class UserPaymentOrderWrapper {
     @ApiModel("订单支付参数配置")
     public static class PaymentOrderReqConfig implements Serializable {
 
+        @ApiModelProperty("支付三方")
+        private String paymentVendor;
+
         @ApiModelProperty("支付渠道")
         private String paymentChannel;
 
@@ -896,6 +900,9 @@ public class UserPaymentOrderWrapper {
 
         @ApiModelProperty("支付厂商")
         private String paymentVendor;
+
+        @ApiModelProperty("支付渠道")
+        private List<String> paymentChannels;
     }
 
 

+ 2 - 13
cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/StudentController.java

@@ -10,6 +10,7 @@ import com.yonge.cooleshow.biz.dal.entity.Student;
 import com.yonge.cooleshow.biz.dal.entity.Teacher;
 import com.yonge.cooleshow.biz.dal.entity.TenantActivationCode;
 import com.yonge.cooleshow.biz.dal.entity.TenantInfo;
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.service.ImUserFriendService;
 import com.yonge.cooleshow.biz.dal.service.StudentService;
 import com.yonge.cooleshow.biz.dal.service.TeacherService;
@@ -143,7 +144,7 @@ public class StudentController extends BaseController {
 
         if (studentId == null) {
             SysUser sysUser = sysUserFeignService.queryUserByMobile(student.getPhone());
-            if (sysUser != null) {
+            if (sysUser != null && sysUser.getUserType().contains(ClientEnum.STUDENT.getCode())) {
                 studentId = sysUser.getId();
             }
         }
@@ -163,18 +164,6 @@ public class StudentController extends BaseController {
         }
 
         studentService.save(studentInfo);
-
-        // 加好友
-        SysUser sysUser = sysUserFeignService.queryUserByMobile(student.getPhone());
-        Student newStudent = studentService.getById(sysUser.getId());
-        if (newStudent.getTenantId()!= null && newStudent.getTenantId()!=-1L) {
-            // 自动与机构老师成为好友
-            List<Teacher> teacherList = teacherService.lambdaQuery()
-                    .eq(Teacher::getTenantId, newStudent.getTenantId()).list();
-            teacherList.forEach(next -> imUserFriendService.saveUserFriend(next.getUserId(),
-                    new HashSet<>(ImmutableList.of(sysUser.getId()))));
-        }
-
         return succeed();
     }
 

+ 3 - 0
cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/UserOrderController.java

@@ -105,6 +105,9 @@ public class UserOrderController {
         // 用户下单请求
         UserPaymentOrderWrapper.PaymentOrderReqConfig reqConfig = UserPaymentOrderWrapper.PaymentOrderReqConfig.from(config.jsonString());
 
+        // 支付三方
+        reqConfig.setPaymentVendor(config.getPaymentVendor());
+        // 请示IP地址
         reqConfig.setIp(ServletUtil.getClientIP(request));
         // 创建用户支付数据
         UserPaymentOrderWrapper.PaymentReq paymentConfig = userPaymentCoreService.executePayment(JwtUserInfo.builder()

+ 0 - 11
cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/open/OpenStudentController.java

@@ -147,17 +147,6 @@ public class OpenStudentController extends BaseController {
         studentInfo.setTenantId(tenantInfo.getId());
 
         studentService.save(studentInfo);
-
-        // 加好友
-        SysUser sysUser = sysUserFeignService.queryUserByMobile(student.getPhone());
-        Student newStudent = studentService.getById(sysUser.getId());
-        if (newStudent.getTenantId()!= null && newStudent.getTenantId()!=-1L) {
-            // 自动与机构老师成为好友
-            List<Teacher> teacherList = teacherService.lambdaQuery()
-                    .eq(Teacher::getTenantId, tenantId).list();
-            teacherList.forEach(next -> imUserFriendService.saveUserFriend(next.getUserId(),
-                    new HashSet<>(ImmutableList.of(sysUser.getId()))));
-        }
         return succeed();
     }
 }

+ 3 - 0
cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/vo/UserPaymentOrderVo.java

@@ -197,6 +197,9 @@ public class UserPaymentOrderVo {
     @ApiModel("订单支付参数配置")
     public static class PaymentReqConfig implements Serializable {
 
+        @ApiModelProperty("支付三方")
+        private String paymentVendor;
+
         @ApiModelProperty("支付渠道")
         private String paymentChannel;