Bläddra i källkod

Merge branch 'master' of http://git.dayaedu.com/yonge/cooleshow into ponline

zouxuan 1 år sedan
förälder
incheckning
0d21823c75
34 ändrade filer med 492 tillägg och 187 borttagningar
  1. 21 4
      cooleshow-app/src/main/java/com/yonge/cooleshow/student/controller/open/UserPaymentClient.java
  2. 5 0
      cooleshow-app/src/main/java/com/yonge/cooleshow/teacher/controller/StudentController.java
  3. 20 4
      cooleshow-app/src/main/java/com/yonge/cooleshow/teacher/controller/open/UserPaymentClient.java
  4. 1 0
      cooleshow-app/src/main/java/com/yonge/cooleshow/tenant/controller/StudentController.java
  5. 137 44
      cooleshow-app/src/main/java/com/yonge/cooleshow/tenant/controller/TenantInfoController.java
  6. 19 13
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/core/handler/BaseAuthenticationSuccessEventHandler.java
  7. 7 5
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/core/provider/PhoneAuthenticationProvider.java
  8. 2 0
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/core/provider/service/DefaultUserDetailsService.java
  9. 3 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/queryInfo/SysMusicCompareRecordQueryInfo.java
  10. 20 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseCoursewareServiceImpl.java
  11. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/EmployeeServiceImpl.java
  12. 12 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicAlbumServiceImpl.java
  13. 3 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/StudentServiceImpl.java
  14. 14 12
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherServiceImpl.java
  15. 79 65
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantActivationCodeServiceImpl.java
  16. 5 10
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantAlbumMusicServiceImpl.java
  17. 35 5
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantAlbumServiceImpl.java
  18. 2 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantInfoServiceImpl.java
  19. 2 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantUnbindRecordServiceImpl.java
  20. 2 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderServiceImpl.java
  21. 4 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserTenantAlbumRecordServiceImpl.java
  22. 3 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/StudentVo.java
  23. 4 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/TenantAccountRecordWrapper.java
  24. 3 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/TenantActivationCodeWrapper.java
  25. 10 4
      cooleshow-user/user-biz/src/main/resources/config/mybatis/SysMusicCompareRecordMapper.xml
  26. 2 1
      cooleshow-user/user-biz/src/main/resources/config/mybatis/TenantAccountRecordMapper.xml
  27. 11 2
      cooleshow-user/user-biz/src/main/resources/config/mybatis/TenantAlbumPurchaseMapper.xml
  28. 24 0
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/open/UserPaymentClient.java
  29. 5 0
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/StudentController.java
  30. 26 4
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/open/UserPaymentClient.java
  31. 1 0
      cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/StudentController.java
  32. 1 0
      cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/TeacherController.java
  33. 1 1
      cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/TenantActivationCodeController.java
  34. 7 0
      cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/TenantInfoController.java

+ 21 - 4
cooleshow-app/src/main/java/com/yonge/cooleshow/student/controller/open/UserPaymentClient.java

@@ -4,23 +4,26 @@ import cn.hutool.extra.servlet.ServletUtil;
 import com.microsvc.toolkit.common.response.template.R;
 import com.microsvc.toolkit.common.webportal.exception.BizException;
 import com.microsvc.toolkit.config.jwt.utils.JwtUserInfo;
+import com.yonge.cooleshow.biz.dal.entity.UserOrder;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.service.UserOrderService;
 import com.yonge.cooleshow.biz.dal.service.UserPaymentCoreService;
+import com.yonge.cooleshow.biz.dal.vo.UserOrderVo;
 import com.yonge.cooleshow.biz.dal.wrapper.UserPaymentOrderWrapper;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.student.vo.UserPaymentOrderVo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
 import java.util.Objects;
 
+import static com.yonge.cooleshow.common.entity.HttpResponseResult.succeed;
+
 @Slf4j
 @RestController
 @RequestMapping("${app-config.url.student:}/open/userOrder")
@@ -30,6 +33,8 @@ public class UserPaymentClient {
     @Autowired
     private UserPaymentCoreService userPaymentCoreService;
 
+    @Autowired
+    private UserOrderService userOrderService;
     @ApiOperation(value = "用户付款", notes = "用户付款")
     @PostMapping("/executePayment/v2")
     public R<UserPaymentOrderWrapper.PaymentReq> executePayment(@Validated @RequestBody UserPaymentOrderVo.PaymentReqConfig config, HttpServletRequest request) {
@@ -50,4 +55,16 @@ public class UserPaymentClient {
         return R.from(paymentConfig);
     }
 
+    /**
+     * 查询单条
+     */
+    @GetMapping("/detailByOrderNo/{orderNo}")
+    @ApiOperation(value = "通过订单号查询详情", notes = "传入orderNo")
+    public HttpResponseResult<UserOrderVo> detailByOrderNo(@PathVariable("orderNo") String orderNo) {
+
+        UserOrder param = new UserOrder();
+        param.setOrderNo(orderNo);
+        UserOrderVo detail = userOrderService.detailApp(param);
+        return succeed(detail);
+    }
 }

+ 5 - 0
cooleshow-app/src/main/java/com/yonge/cooleshow/teacher/controller/StudentController.java

@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dto.search.StudentSearch;
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.service.ImGroupService;
 import com.yonge.cooleshow.biz.dal.service.StudentService;
 import com.yonge.cooleshow.biz.dal.vo.StudentVo;
 import com.yonge.cooleshow.common.controller.BaseController;
@@ -40,6 +42,8 @@ public class StudentController extends BaseController {
     private SysUserFeignService sysUserFeignService;
 
 
+    @Autowired
+    private ImGroupService imGroupService;
     @ApiOperation(value = "查询指定学员信息-融云token")
     @GetMapping("/queryUserById")
     public HttpResponseResult<StudentVo> queryUserById(String rongCloudUserId) {
@@ -112,6 +116,7 @@ public class StudentController extends BaseController {
                     vo.setUserStatus(UserStatusEnum.NORMAL);
                 }
             }
+            vo.setImUserId(imGroupService.getImUserId(vo.getUserId(), ClientEnum.STUDENT));
         }
         return succeed(PageUtil.pageInfo(pages));
     }

+ 20 - 4
cooleshow-app/src/main/java/com/yonge/cooleshow/teacher/controller/open/UserPaymentClient.java

@@ -4,23 +4,26 @@ import cn.hutool.extra.servlet.ServletUtil;
 import com.microsvc.toolkit.common.response.template.R;
 import com.microsvc.toolkit.common.webportal.exception.BizException;
 import com.microsvc.toolkit.config.jwt.utils.JwtUserInfo;
+import com.yonge.cooleshow.biz.dal.entity.UserOrder;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.service.UserOrderService;
 import com.yonge.cooleshow.biz.dal.service.UserPaymentCoreService;
+import com.yonge.cooleshow.biz.dal.vo.UserOrderVo;
 import com.yonge.cooleshow.biz.dal.wrapper.UserPaymentOrderWrapper;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.teacher.vo.UserPaymentOrderVo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
 import java.util.Objects;
 
+import static com.yonge.cooleshow.common.entity.HttpResponseResult.succeed;
+
 @Slf4j
 @RestController
 @RequestMapping("${app-config.url.teacher:}/open/userOrder")
@@ -30,6 +33,8 @@ public class UserPaymentClient {
     @Autowired
     private UserPaymentCoreService userPaymentCoreService;
 
+    @Autowired
+    private UserOrderService userOrderService;
     @ApiOperation(value = "用户付款", notes = "用户付款")
     @PostMapping("/executePayment/v2")
     public R<UserPaymentOrderWrapper.PaymentReq> executePayment(@Validated @RequestBody UserPaymentOrderVo.PaymentReqConfig config, HttpServletRequest request) {
@@ -50,4 +55,15 @@ public class UserPaymentClient {
         return R.from(paymentConfig);
     }
 
+    /**
+     * 查询单条
+     */
+    @GetMapping("/detailByOrderNo/{orderNo}")
+    @ApiOperation(value = "通过订单号查询详情", notes = "传入orderNo")
+    public HttpResponseResult<UserOrderVo> detailByOrderNo(@PathVariable("orderNo") String orderNo) {
+        UserOrder param = new UserOrder();
+        param.setOrderNo(orderNo);
+        UserOrderVo detail = userOrderService.detailApp(param);
+        return succeed(detail);
+    }
 }

+ 1 - 0
cooleshow-app/src/main/java/com/yonge/cooleshow/tenant/controller/StudentController.java

@@ -89,6 +89,7 @@ public class StudentController extends BaseController {
         TenantInfo tenantInfo = getTenantInfo();
         query.setTenantId(tenantInfo.getId());
         query.setDelFlag(YesOrNoEnum.NO);
+        query.setLockFlag(UserLockFlag.NORMAL);
         query.setOrderBy("u.username_ asc");
 
         IPage<StudentVo> pages = studentService.selectPage(PageUtil.getPage(query), query);

+ 137 - 44
cooleshow-app/src/main/java/com/yonge/cooleshow/tenant/controller/TenantInfoController.java

@@ -6,6 +6,8 @@ import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.entity.TenantInfo;
 import com.yonge.cooleshow.biz.dal.entity.TenantStaff;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.mapper.SysUserMapper;
+import com.yonge.cooleshow.biz.dal.service.EmployeeService;
 import com.yonge.cooleshow.biz.dal.service.SmsCodeService;
 import com.yonge.cooleshow.biz.dal.service.SysConfigService;
 import com.yonge.cooleshow.biz.dal.service.TenantInfoService;
@@ -18,7 +20,6 @@ import com.yonge.cooleshow.common.security.SecurityConstants;
 import com.yonge.cooleshow.tenant.io.request.SysUserWrapper;
 import com.yonge.cooleshow.tenant.io.request.TenantInfoVo;
 import com.yonge.toolset.base.exception.BizException;
-import com.yonge.toolset.utils.obj.ObjectUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
@@ -32,7 +33,12 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.validation.Valid;
+import java.time.LocalDateTime;
+import java.util.Arrays;
 import java.util.List;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.stream.Collectors;
 
 /**
  * @Author:haonan
@@ -58,6 +64,12 @@ public class TenantInfoController extends BaseController {
     @Autowired
     private SysConfigService sysConfigService;
 
+    @Autowired
+    private SysUserMapper sysUserMapper;
+
+    @Autowired
+    private EmployeeService employeeService;
+
     @ApiOperation(value = "发送登录短信验证码")
     @ApiImplicitParams({@ApiImplicitParam(name = "mobile", value = "手机号", required = true, dataType = "String"),
             @ApiImplicitParam(name = "type", value = "类型(PASSWD:修改密码,LOGIN:登录或注册,BANK:绑定银行卡,PHONE:修改手机号)", required =
@@ -147,66 +159,147 @@ public class TenantInfoController extends BaseController {
     @ApiOperation(value = "用户修改", notes = "用户修改")
 //    @PreAuthorize("@pcs.hasPermissions('tenantInfoUpdate/sysUserUpdate')")
     public HttpResponseResult<Boolean> sysUserUpdate(@RequestBody SysUserWrapper.SysUser sysUser) {
-        String code = sysUser.getCode();
-        String phone = sysUser.getPhone();
 
-        com.yonge.cooleshow.biz.dal.entity.SysUser sysUser1 = JSON.parseObject(sysUser.jsonString(), com.yonge.cooleshow.biz.dal.entity.SysUser.class);
+        // 当前用户请登录,提示请登录
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (Objects.isNull(user)) {
+            throw new BizException("请登录");
+        }
 
+        TenantStaff staff = tenantStaffService.getByUserId(user.getId());
+        if (Objects.nonNull(staff)) {
+            // 设置用户机构ID
+            user.setTenantId(staff.getTenantId());
+        }
         //如果传手机号
-        if (StringUtils.isNotBlank(phone)){
-            boolean re = smsCodeService.verifyValidCode(phone, code, "PHONE");
-            if (re){
-                SysUser user = sysUserFeignService.queryUserInfo();
-                tenantInfoService.updateSysUser(sysUser1, user.getId());
-
-                //设置默认头像
-                if (StringUtils.isEmpty(sysUser.getAvatar())) {
-                    sysUser.setAvatar(sysConfigService.findConfigValue(SysConfigConstant.DEFAULT_HEARD));
-                }
+        if (StringUtils.isNotBlank(sysUser.getPhone())) {
+
+            if (StringUtils.isBlank(sysUser.getCode())) {
+                throw new BizException("验证码不能为空");
+            }
+
+            boolean exists = smsCodeService.verifyValidCode(sysUser.getPhone(), sysUser.getCode(), "PHONE");
+            if (Boolean.FALSE.equals(exists)) {
+                throw new BizException("验证码错误");
+            }
+
+            long userId;
+            // 查询输入的手机号  是否存在于sysUser表中
+            SysUser sysUserInfo = sysUserMapper.findUserByPhone(sysUser.getPhone());
+
+            // 用户默认头象
+            if (Objects.nonNull(sysUserInfo)) {
 
-                //判断更改的手机所属的机构信息
-
-                String oldPhone = user.getPhone();
-                //查看原机构信息
-                List<TenantInfo> list = tenantInfoService.lambdaQuery().eq(TenantInfo::getPhone, oldPhone).list();
-                if (CollectionUtils.isNotEmpty(list)){
-                    TenantInfo info = list.get(0);
-                    if (ObjectUtil.isEmpty(info)) {
-                        //更新tennatInfo
-                        info.setPhone(phone);
-                        tenantInfoService.updateById(info);
-                    }
+                //如果存在 判断是否为机构员工
+                TenantStaff tenantStaff = tenantStaffService.getByUserId(sysUserInfo.getId());
+                if (Objects.nonNull(tenantStaff)) {
+                    throw new BizException("该手机号已绑定机构");
                 }
 
-                //更新员工表
-                Long id = user.getId();
-                TenantStaff staff = tenantStaffService.getByUserId(id);
-                if (staff != null){
-                    staff.setNickname(sysUser.getUsername());
-                    staff.setAvatar(sysUser.getAvatar());
-                    tenantStaffService.updateById(staff);
+                // 平台员工不允许重复
+                SysUser employee = employeeService.queryUserByMobile(sysUser.getPhone());
+                if (Objects.nonNull(employee)) {
+                    throw new BizException("当前手机号已绑定平台员工");
                 }
+
+                // 更新用户身份
+                com.yonge.cooleshow.biz.dal.entity.SysUser newSysUser = new com.yonge.cooleshow.biz.dal.entity.SysUser();
+                // 设置用户ID
+                newSysUser.setId(sysUserInfo.getId());
+                // 用户身份
+                newSysUser.setUserType(sysUserInfo.getUserType() + ",ORGANIZATION");
+                newSysUser.setUpdateTime(LocalDateTime.now());
+
+                // 新用户更新
+                sysUserMapper.updateById(newSysUser);
+
+                // 新用户ID
+                userId = sysUserInfo.getId();
             } else {
-                throw new BizException("手机号校验有误");
+
+                // 重新生成sysUser数据
+                com.yonge.cooleshow.biz.dal.entity.SysUser newSysUser = JSON.parseObject(JSON.toJSONString(user),
+                        com.yonge.cooleshow.biz.dal.entity.SysUser.class);
+                // 重置主键ID
+                newSysUser.setId(null);
+                // 设置新手机号
+                newSysUser.setPhone(sysUser.getPhone());
+                // 创建和修改时间
+                newSysUser.setCreateTime(LocalDateTime.now());
+                newSysUser.setUpdateTime(LocalDateTime.now());
+                newSysUser.setAvatar(sysConfigService.findConfigValue(SysConfigConstant.DEFAULT_HEARD));
+                // 锁定状态
+                newSysUser.setLockFlag(0);
+                // 用户类型
+                newSysUser.setUserType("ORGANIZATION");
+                // 删除状态
+                newSysUser.setDelFlag(0);
+                newSysUser.setImToken("");
+
+                sysUserMapper.insert(newSysUser);
+                // 新用户ID
+                userId = newSysUser.getId();
             }
-        }  else {
-            SysUser user = sysUserFeignService.queryUserInfo();
-            tenantInfoService.updateSysUser(sysUser1, user.getId());
 
+            // 旧用户移动机构身份
+            com.yonge.cooleshow.biz.dal.entity.SysUser oldSysUser = new com.yonge.cooleshow.biz.dal.entity.SysUser();
+            oldSysUser.setId(user.getId());
+            // 用户身份
+            String userType = Arrays.stream(user.getUserType().split(","))
+                    .filter(x -> !x.equals("ORGANIZATION")).collect(Collectors.joining(","));
+            oldSysUser.setUserType(userType);
+            sysUserMapper.updateById(oldSysUser);
+
+            // 更新用户ID
+            tenantStaffService.lambdaUpdate()
+                    .eq(TenantStaff::getUserId, user.getId())
+                    .set(TenantStaff::getUserId, userId)
+                    .update();
+
+            // 更新机构信息表中的用户
+            if (Optional.ofNullable(user.getTenantId()).orElse(-1L) > 0) {
+
+                tenantInfoService.lambdaUpdate()
+                        .eq(TenantInfo::getId, user.getTenantId())
+                        .set(TenantInfo::getUserId, userId)
+                        .set(TenantInfo::getPhone,sysUser.getPhone())
+                        .update();
+            }
+
+        } else {
+
+            // 修改用户基础信息流程
             //设置默认头像
             if (StringUtils.isBlank(sysUser.getAvatar())) {
                 sysUser.setAvatar(sysConfigService.findConfigValue(SysConfigConstant.DEFAULT_HEARD));
             }
 
-            //更新员工表
-            Long id = user.getId();
-            TenantStaff staff = tenantStaffService.getByUserId(id);
-            if (staff != null){
-                staff.setNickname(sysUser.getUsername());
-                staff.setAvatar(sysUser.getAvatar());
-                tenantStaffService.updateById(staff);
+            // 更新用户头象
+            com.yonge.cooleshow.biz.dal.entity.SysUser updateSysUser = new com.yonge.cooleshow.biz.dal.entity.SysUser();
+            updateSysUser.setId(user.getId());
+            updateSysUser.setAvatar(sysUser.getAvatar());
+            sysUserMapper.updateById(updateSysUser);
+
+            // 更新机构员工头像和昵称,机构信息表中的用户昵称
+            tenantStaffService.lambdaUpdate()
+                    .eq(TenantStaff::getUserId, user.getId())
+                    .set(StringUtils.isNotEmpty(sysUser.getUsername()), TenantStaff::getNickname, sysUser.getUsername())
+                    .set(StringUtils.isNotEmpty(sysUser.getAvatar()), TenantStaff::getAvatar, sysUser.getAvatar())
+                    .set(TenantStaff::getUpdateTime, LocalDateTime.now())
+                    .update();
+
+
+            // 更新机构信息表中的用户昵称
+            if (StringUtils.isNotBlank(sysUser.getUsername()) && Optional.ofNullable(user.getTenantId()).orElse(-1L) > 0) {
+
+                tenantInfoService.lambdaUpdate()
+                        .eq(TenantInfo::getId, user.getTenantId())
+                        .set(TenantInfo::getUsername, sysUser.getUsername())
+                        .update();
             }
+
         }
+
         return HttpResponseResult.succeed(true);
     }
 }

+ 19 - 13
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/core/handler/BaseAuthenticationSuccessEventHandler.java

@@ -1,17 +1,16 @@
 package com.yonge.cooleshow.auth.core.handler;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
+import com.yonge.cooleshow.api.feign.AdminFeignService;
+import com.yonge.cooleshow.api.feign.dto.ImUserInfo;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.auth.api.entity.SysUserLogin;
 import com.yonge.cooleshow.auth.api.entity.SysUserLoginLog;
-import com.yonge.cooleshow.auth.config.RongCloudConfig;
 import com.yonge.cooleshow.auth.service.SysUserLoginLogService;
 import com.yonge.cooleshow.auth.service.SysUserLoginService;
 import com.yonge.cooleshow.auth.service.SysUserService;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.common.security.SecurityConstants;
-import io.rong.models.response.TokenResult;
-import io.rong.models.user.UserModel;
 import org.apache.commons.collections.MapUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
@@ -54,6 +53,8 @@ public class BaseAuthenticationSuccessEventHandler extends SavedRequestAwareAuth
 	private ObjectMapper objectMapper;
 	@Autowired
 	private ClientDetailsService clientDetailsService;
+	@Autowired
+	private AdminFeignService adminFeignService;
 
 	@Autowired
 	private AuthorizationServerTokenServices defaultAuthorizationServerTokenServices;
@@ -80,22 +81,27 @@ public class BaseAuthenticationSuccessEventHandler extends SavedRequestAwareAuth
 		} else {
 			sysUser = sysUserService.queryLockByPhone(username.split(":")[1]);
 		}
-		if(StringUtils.isEmpty(sysUser.getImToken())){
+		/*if(StringUtils.isEmpty(sysUser.getImToken())){
 			String name = sysUser.getUsername();
 			if(StringUtils.isEmpty(name)){
 				name = sysUser.getRealName();
 			}
-			try {
-				TokenResult result = RongCloudConfig.rongCloud.user.register(new UserModel(sysUser.getId().toString(), name, sysUser.getAvatar()));
+
+		}*/
+		// 强制更新im_token
+		try {
+				/*TokenResult result = RongCloudConfig.rongCloud.user.register(new UserModel(sysUser.getId().toString(), name, sysUser.getAvatar()));
 				if(!result.code.equals(200)){
 					logger.error("获取用户token失败:{}",result.errorMessage);
-				}
-				sysUser.setImToken(result.getToken());
-				sysUser.setUpdateTime(new Date());
-				sysUserService.update(sysUser);
-			} catch (Exception e) {
-				e.printStackTrace();
-			}
+				}*/
+
+			ImUserInfo register = adminFeignService.register(sysUser.getId().toString(), clientId.toUpperCase(), sysUser.getUsername(), sysUser.getAvatar());
+
+			sysUser.setImToken(register.getImToken());
+			sysUser.setUpdateTime(new Date());
+			sysUserService.update(sysUser);
+		} catch (Exception e) {
+			logger.error("获取用户im_token失败:{}",e.getMessage());
 		}
 		Date date = new Date();
 		//修改添加登录信息

+ 7 - 5
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/core/provider/PhoneAuthenticationProvider.java

@@ -183,6 +183,13 @@ public class PhoneAuthenticationProvider extends AbstractAuthenticationProvider
                 if (StringUtils.isNotBlank(deviceNum)) {
                     sysUserDeviceService.bindDevice(clientId, user.getId(), deviceNum);
                 }
+
+                // 学生账号修改隐藏为显示
+                if (StringUtils.equalsIgnoreCase(loginUserType, "STUDENT")
+                        || StringUtils.equalsIgnoreCase(clientId, "STUDENT")) {
+                    sysUserService.updateStudentHideFlag(userInfo.getSysUser().getId(), 0);
+                }
+
                 //登录
                 if (userInfo.getSysUser().getUserType().contains(clientId)){
                     return login(username);
@@ -225,11 +232,6 @@ public class PhoneAuthenticationProvider extends AbstractAuthenticationProvider
                 sysUserService.update(user);
             }
 
-            // 学生账号修改隐藏为显示
-            if (StringUtils.equalsIgnoreCase(loginUserType, "STUDENT")) {
-                sysUserService.updateStudentHideFlag(userInfo.getSysUser().getId(), 0);
-            }
-
         }
 
         return login(username);

+ 2 - 0
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/core/provider/service/DefaultUserDetailsService.java

@@ -122,7 +122,9 @@ public class DefaultUserDetailsService implements UserDetailsService {
 
         if (userType.contains("SYSTEM")) {
             authorities = AuthorityUtils.createAuthorityList(userInfo.getPermissions());
+        }
 
+        if (userType.contains("STUDENT")) {
             // 学生账号修改隐藏为显示
             sysUserService.updateStudentHideFlag(userInfo.getSysUser().getId(), 0);
         }

+ 3 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/queryInfo/SysMusicCompareRecordQueryInfo.java

@@ -54,6 +54,9 @@ public class SysMusicCompareRecordQueryInfo {
 
         @ApiModelProperty(name = "排序方式")
         private String sortType = "DESC";
+
+        @ApiModelProperty(name = "客户端")
+        private String clientId = "student";
     }
 
     @Data

+ 20 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseCoursewareServiceImpl.java

@@ -14,11 +14,14 @@ import com.yonge.cooleshow.biz.dal.entity.MusicSheetAccompaniment;
 import com.yonge.cooleshow.biz.dal.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.entity.Teacher;
 import com.yonge.cooleshow.biz.dal.enums.AudioTypeEnum;
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.mapper.SysUserMapper;
 import com.yonge.cooleshow.biz.dal.service.CourseCoursewareService;
 import com.yonge.cooleshow.biz.dal.service.MusicSheetService;
+import com.yonge.cooleshow.biz.dal.service.TenantAlbumMusicService;
 import com.yonge.cooleshow.biz.dal.vo.CourseCoursewareVo;
 import com.yonge.cooleshow.biz.dal.vo.MusicSheetDetailVo;
+import com.yonge.cooleshow.biz.dal.vo.TeacherVo;
 import com.yonge.cooleshow.common.enums.YesOrNoEnum;
 import com.yonge.toolset.base.exception.BizException;
 import org.apache.commons.collections.CollectionUtils;
@@ -57,6 +60,9 @@ public class CourseCoursewareServiceImpl extends ServiceImpl<CourseCoursewareDao
     @Autowired
     private TeacherDao teacherDao;
 
+    @Autowired
+    private TenantAlbumMusicService tenantAlbumMusicService;
+
 	@Override
     public CourseCoursewareVo detail(Long id) {
         return baseMapper.detail(id);
@@ -170,6 +176,20 @@ public class CourseCoursewareServiceImpl extends ServiceImpl<CourseCoursewareDao
             }
         }
 
+        // 查询老师所在机构存在机构曲目
+        if (query.getClientType().equals(ClientEnum.TEACHER)) {
+            TeacherVo detail = teacherDao.detail(query.getUserId());
+            if (detail != null) {
+                List<Long> list = tenantAlbumMusicService.getMusicIdsByTenantIds(detail.getTenantId());
+
+                for (CourseCoursewareVo record : records) {
+                    if (list.contains(record.getMusicSheetId())) {
+                        record.setStatus(YesOrNoEnum.YES);
+                    }
+                }
+            }
+        }
+
         courseCoursewareVoIPage.setRecords(records);
         return courseCoursewareVoIPage;
     }

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

@@ -63,7 +63,7 @@ public class EmployeeServiceImpl extends BaseServiceImpl<Long, Employee> impleme
             BeanUtils.copyProperties(param, sysUser);
             sysUser.setUserType(SysUserType.SYSTEM.getCode());
             //初始密码,手机号后6位
-            String password = param.getPhone().substring(param.getPhone().length() - 6);
+            String password = "klx" + sysUser.getPhone().substring(sysUser.getPhone().length() - 4);
             sysUser.setPassword(new BCryptPasswordEncoder().encode(password));
             sysUser.setGender(param.getGender().getCode());
 

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

@@ -460,6 +460,7 @@ public class MusicAlbumServiceImpl extends ServiceImpl<MusicAlbumDao,MusicAlbum>
     @Override
     public TenantAlbumWrapper.TenantAlbum detailAlbum(String albumId) {
         Long tenantAlbumId;
+        Integer size = 0;
         TenantAlbumWrapper.TenantAlbum album = new TenantAlbumWrapper.TenantAlbum();
         if (StringUtils.isEmpty(albumId)){
             //如果没传专辑id  则查询对应机构的专辑详情
@@ -510,7 +511,10 @@ public class MusicAlbumServiceImpl extends ServiceImpl<MusicAlbumDao,MusicAlbum>
         List<TenantAlbumMusic> tenantAlbumMusiclist = tenantAlbumMusicService.lambdaQuery().eq(TenantAlbumMusic::getTenantAlbumId, tenantAlbumId)
                 .eq(TenantAlbumMusic::getDelFlag,false).list();
         List<Long> MusicSheetIds = tenantAlbumMusiclist.stream().map(TenantAlbumMusic::getMusicSheetId).collect(Collectors.toList());
-        int size = MusicSheetIds.size();
+        if (CollectionUtils.isNotEmpty(MusicSheetIds)){
+            size = musicSheetService.lambdaQuery().in(MusicSheet::getId, MusicSheetIds).eq(MusicSheet::getState, true)
+                    .eq(MusicSheet::getDelFlag, false).count();
+        }
 
         //获取合奏曲目数量
         List<TenantAlbumMusic> ensembleLits = tenantAlbumMusicService.lambdaQuery().eq(TenantAlbumMusic::getSubjectType, "ENSEMBLE")
@@ -586,6 +590,13 @@ public class MusicAlbumServiceImpl extends ServiceImpl<MusicAlbumDao,MusicAlbum>
 
         TenantAlbumWrapper.TenantAlbum album = new TenantAlbumWrapper.TenantAlbum();
 
+        //获取对应机构专辑状态
+        TenantAlbum one = tenantAlbumService.lambdaQuery().eq(TenantAlbum::getId, tenantAlbumId).last("limit 1").one();
+        if (!ObjectUtil.isEmpty(one)){
+            album.setStatus(one.getStatus());
+        }
+
+
         //查询对应专辑的详情
         List<TenantAlbum> list = tenantAlbumService.lambdaQuery().eq(TenantAlbum::getStatus, true).eq(TenantAlbum::getId, tenantAlbumId).list();
         if (CollectionUtils.isEmpty(list)){

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

@@ -448,8 +448,9 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, Student> impleme
         // 校验数据的完整性
         List<String> errMsg = new ArrayList<>();
         Map<String, Integer> phoneMap = new HashMap<>();
+        int rowIndex = 0;
         for (ExcelDataReaderProperty<StudentWrapper.StudentImport> next : dataList) {
-            Integer rowIndex = next.getRowIndex();
+            rowIndex++;
             StudentWrapper.StudentImport student = next.getClazz();
 
             int msgRowNo = rowIndex + 1;
@@ -565,7 +566,7 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, Student> impleme
             sysUser.setUsername(student.getName());
             sysUser.setPhone(student.getPhone());
             //初始密码,手机号后6位
-            String password = sysUser.getPhone().substring(sysUser.getPhone().length() - 6);
+            String password = "klx" + sysUser.getPhone().substring(sysUser.getPhone().length() - 4);
             sysUser.setPassword(new BCryptPasswordEncoder().encode(password));
             //插入
             employeeDao.insertSysUser(sysUser);

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

@@ -450,8 +450,8 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
     private SysUser insertSysUser(TeacherSubmitReq teacherSubmitReq) {
         SysUser sysUser = new SysUser();
         sysUser = getUserDetil(sysUser, teacherSubmitReq);
-        //初始密码,手机号后6
-        String password = sysUser.getPhone().substring(sysUser.getPhone().length() - 6);
+        //初始密码,klx+手机号四
+        String password = "klx" + sysUser.getPhone().substring(sysUser.getPhone().length() - 4);
         sysUser.setPassword(new BCryptPasswordEncoder().encode(password));
         //插入
         int num = employeeDao.insertSysUser(sysUser);
@@ -1007,17 +1007,9 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
             // 删除好友关系
             imUserFriendService.delFriendByTenantId(teacher.getTenantId(), teacher.getUserId());
 
-            // 机构老师与学生互加好友关系
-            if (Optional.ofNullable(teacher.getTenantId()).orElse(-1L) > 0) {
-                // 自动与机构老师成为好友
-                Set<Long> collect = studentService.lambdaQuery()
-                        .eq(Student::getTenantId, updateTenant.getTenantId()).list().stream()
-                        .map(Student::getUserId).collect(Collectors.toSet());
-
-                imUserFriendService.saveUserFriend(teacher.getUserId(), collect);
-            }
-        }else {
+        }
 
+        if (updateTenant.getTenantId().equals(-1L)) {
             // 平台老师处理流程
             if (ESettlementFrom.TENANT.equals(teacher.getSettlementFrom())) {
                 // 解绑后,结算方式如果是机构,默认调整为老师
@@ -1026,6 +1018,16 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
             }
         }
 
+        // 机构老师与学生互加好友关系
+        if (Optional.ofNullable(updateTenant.getTenantId()).orElse(-1L) > 0) {
+            // 自动与机构老师成为好友
+            Set<Long> collect = studentService.lambdaQuery()
+                    .eq(Student::getTenantId, updateTenant.getTenantId()).list().stream()
+                    .map(Student::getUserId).collect(Collectors.toSet());
+
+            imUserFriendService.saveUserFriend(teacher.getUserId(), collect);
+        }
+
         teacher.setTenantId(updateTenant.getTenantId());
         this.updateById(teacher);
 

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

@@ -1,12 +1,14 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
 import com.alibaba.fastjson.JSON;
+import com.alipay.api.domain.NextUrl;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.google.common.collect.Lists;
 import com.yonge.cooleshow.biz.dal.dao.StudentDao;
+import com.yonge.cooleshow.biz.dal.dto.search.StudentSearch;
 import com.yonge.cooleshow.biz.dal.entity.Student;
 import com.yonge.cooleshow.biz.dal.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.entity.TenantActivationCode;
@@ -14,17 +16,20 @@ import com.yonge.cooleshow.biz.dal.entity.TenantAlbumPurchase;
 import com.yonge.cooleshow.biz.dal.entity.UserTenantAlbumRecord;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.enums.SourceTypeEnum;
+import com.yonge.cooleshow.biz.dal.enums.im.EImSendStatus;
 import com.yonge.cooleshow.biz.dal.mapper.SysUserMapper;
 import com.yonge.cooleshow.biz.dal.mapper.TenantActivationCodeMapper;
 import com.yonge.cooleshow.biz.dal.mapper.TenantAlbumPurchaseMapper;
 import com.yonge.cooleshow.biz.dal.mapper.UserTenantAlbumRecordMapper;
 import com.yonge.cooleshow.biz.dal.service.TenantActivationCodeService;
 import com.yonge.cooleshow.biz.dal.service.TenantAlbumService;
+import com.yonge.cooleshow.biz.dal.vo.StudentVo;
 import com.yonge.cooleshow.biz.dal.vo.UserOrderDetailVo;
 import com.yonge.cooleshow.biz.dal.wrapper.TenantActivationCodeWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.TenantAlbumWrapper;
 import com.yonge.cooleshow.common.enums.EActivationCode;
 import com.yonge.toolset.base.exception.BizException;
+import com.yonge.toolset.mybatis.support.PageUtil;
 import com.yonge.toolset.utils.easyexcel.ExcelDataReaderProperty;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections.CollectionUtils;
@@ -34,14 +39,11 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Comparator;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
+import java.util.function.Function;
+import java.util.regex.Pattern;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 /**
  * 机构激活码
@@ -66,6 +68,8 @@ public class TenantActivationCodeServiceImpl extends ServiceImpl<TenantActivatio
     @Autowired
     private TenantAlbumService tenantAlbumService;
 
+    private static final String PHONE_REG = "^1\\d{10}$";
+
     /**
      * 查询详情
      *
@@ -323,84 +327,94 @@ public class TenantActivationCodeServiceImpl extends ServiceImpl<TenantActivatio
         }
         dataList.sort(Comparator.comparingInt(ExcelDataReaderProperty::getRowIndex));
 
-        List<String> errMsg = new ArrayList<>();
+        List<TenantActivationCodeWrapper.ImportTemplate> importTemplates = dataList.stream().map(ExcelDataReaderProperty::getClazz).collect(Collectors.toList());
+        List<String> codeList = importTemplates.stream().map(TenantActivationCodeWrapper.ImportTemplate::getCode).
+                filter(StringUtils::isNotEmpty).collect(Collectors.toList());
+        if(codeList.isEmpty()){
+            throw new BizException("未指定激活码");
+        }
+
+        List<String> phoneList = importTemplates.stream().map(TenantActivationCodeWrapper.ImportTemplate::getPhone)
+                        .filter(StringUtils::isNotEmpty).collect(Collectors.toList());
+        if(phoneList.isEmpty()){
+            throw new BizException("未指定手机号");
+        }
+
+        List<TenantActivationCode> activationCodes = this.lambdaQuery()
+                .eq(TenantActivationCode::getTenantId, tenantId)
+                .eq(TenantActivationCode::getTenantAlbumPurchaseId, tenantAlbumPurchaseId)
+                .in(TenantActivationCode::getActivationCode, codeList).list();
+        Map<String, TenantActivationCode> mapByCode = activationCodes.stream().collect(Collectors.toMap(TenantActivationCode::getActivationCode, Function.identity()));
+
+        StudentSearch studentSearch = new StudentSearch();
+        studentSearch.setRows(9999);
+        studentSearch.setPage(1);
+        studentSearch.setPhoneList(phoneList);
+        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<String, Integer> codeRowMap = new HashMap<>();
-        Map<String, String> codePhoneMap = new HashMap<>();
 
         String errTemplate = "第%s行%s";
-        // 校验数据格式是否错误
-        int rowIndex = 0;
-        for (ExcelDataReaderProperty<TenantActivationCodeWrapper.ImportTemplate> next : dataList) {
+        int rowIndex = 1;
+        // 校验数据格式是否错误 第二行开始取数据
+        for (TenantActivationCodeWrapper.ImportTemplate template : importTemplates) {
             rowIndex++;
-            TenantActivationCodeWrapper.ImportTemplate code = next.getClazz();
 
-            String acCode = code.getCode();
+            String acCode = template.getCode();
             if (StringUtils.isEmpty(acCode)) {
                 continue;
             }
             int msgRowNo = rowIndex;
-            code.checkIsIllegal().forEach(err -> errMsg.add(String.format(errTemplate, msgRowNo, err)));
-            if (codeRowMap.containsKey(code.getCode())) {
-                errMsg.add(String.format(errTemplate, msgRowNo, "激活码重复"));
-            }
-            codeRowMap.put(acCode, msgRowNo);
-            if (StringUtils.isNotEmpty(code.getPhone())) {
-                codePhoneMap.put(acCode.trim(), code.getPhone().trim());
+            List<String> errList = errMsgMap.getOrDefault(msgRowNo, new ArrayList<>());
+            String code = template.getCode();
+            if (codeRowMap.containsKey(code)) {
+                errList.add(String.format(errTemplate, msgRowNo, "激活码重复"));
+            } else {
+                codeRowMap.put(acCode, msgRowNo);
             }
 
-            if (errMsg.size() > 100) {
-                break;
+            if (!mapByCode.containsKey(code)) {
+                errList.add(String.format(errTemplate, msgRowNo, "激活码不存在"));
+            } else {
+                TenantActivationCode tenantActivationCode = mapByCode.get(code);
+                if (tenantActivationCode.getActivationStatus() || EActivationCode.SEND.equals(tenantActivationCode.getSendStatus())) {
+                    errList.add(String.format(errTemplate, msgRowNo, "激活码已被发放/激活"));
+                }
             }
-        }
-
-        if (codePhoneMap.isEmpty()) {
-            throw new BizException("请指定手机号码激活");
-        }
-
-        if (!errMsg.isEmpty()) {
-            throw new BizException(String.join(",", errMsg));
-        }
-        // 校验激活码是否被使用
-        List<List<String>> codePartition = Lists.partition(new ArrayList<>(codeRowMap.keySet()), 50);
-
-        List<TenantActivationCode> tenantActivationCodes = new ArrayList<>();
-        for (List<String> codes : codePartition) {
-            List<TenantActivationCode> activationCodes = this.lambdaQuery()
-                    .eq(TenantActivationCode::getTenantId, tenantId)
-                    .eq(TenantActivationCode::getTenantAlbumPurchaseId, tenantAlbumPurchaseId)
-                    .in(TenantActivationCode::getActivationCode, codes).list();
-
-            // 存在无效码或者已经使用过的码
-            if (codes.size() != activationCodes.size() ||
-                    activationCodes.stream().anyMatch(TenantActivationCode::getActivationStatus)) {
-                Map<String, Boolean> codeStatusMap = activationCodes.stream()
-                        .collect(Collectors.toMap(TenantActivationCode::getActivationCode,
-                                TenantActivationCode::getActivationStatus));
-                for (String code : codes) {
-                    if (!codeStatusMap.containsKey(code)) {
-                        errMsg.add(String.format(errTemplate, codeRowMap.get(code), "激活码无效"));
-                    } else if (Boolean.TRUE.equals(codeStatusMap.get(code))) {
-                        errMsg.add(String.format(errTemplate, codeRowMap.get(code), "激活码已经激活"));
-                    }
+            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, "手机号错误或已注册成为其他机构学员"));
                 }
             }
 
-            List<TenantActivationCode> updateDataList = activationCodes.stream().map(next -> {
-                TenantActivationCode tenantActivationCode = new TenantActivationCode();
-                tenantActivationCode.setId(next.getId());
-                tenantActivationCode.setActivationPhone(codePhoneMap.get(next.getActivationCode()));
-                tenantActivationCode.setSendStatus(EActivationCode.SEND);
-                return tenantActivationCode;
-            }).collect(Collectors.toList());
-
-            tenantActivationCodes.addAll(updateDataList);
+            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));
         }
-        if (!tenantActivationCodes.isEmpty()) {
-            this.updateBatchById(tenantActivationCodes, 50);
+        List<TenantActivationCode> tenantActivationCodes = importTemplates.stream()
+                .filter(next -> StringUtils.isNotEmpty(next.getCode()) && StringUtils.isNotBlank(next.getPhone()))
+                .map(next -> {
+                    TenantActivationCode record = mapByCode.get(next.getCode());
+                    TenantActivationCode tenantActivationCode = new TenantActivationCode();
+                    tenantActivationCode.setId(record.getId());
+                    tenantActivationCode.setActivationPhone(next.getPhone());
+                    tenantActivationCode.setSendStatus(EActivationCode.SEND);
+                    return tenantActivationCode;
+                }).collect(Collectors.toList());
+        if (tenantActivationCodes.isEmpty()) {
+            throw new BizException("没有合法的导入数据");
         }
+        this.updateBatchById(tenantActivationCodes, 50);
     }
 
     private void addUserTenantAlbumRecord(Long studentId, TenantAlbumPurchase purchase,

+ 5 - 10
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantAlbumMusicServiceImpl.java

@@ -143,17 +143,12 @@ public class TenantAlbumMusicServiceImpl extends ServiceImpl<TenantAlbumMusicMap
 
             //是否收藏
             Long id = m.getId();
-            List<MusicFavorite> list = musicFavoriteService.lambdaQuery().eq(MusicFavorite::getMusicSheetId, id).list();
+            List<MusicFavorite> list = musicFavoriteService.lambdaQuery()
+                    .eq(MusicFavorite::getMusicSheetId, id)
+                    .eq(MusicFavorite::getUserId,sysUserId)
+                    .eq(MusicFavorite::getClientType,query.getClientType()).list();
             if (CollectionUtils.isNotEmpty(list)){
-                List<Long> collect = list.stream().map(MusicFavorite::getUserId).collect(Collectors.toList());
-                if (CollectionUtils.isNotEmpty(collect)){
-                    collect.stream().forEach(c->{
-                        if (c.equals(sysUserId) ){
-                            m.setFavorite(true);
-                        }
-                    });
-
-                }
+                m.setFavorite(true);
             }
 
         });

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

@@ -7,16 +7,15 @@ import com.baomidou.mybatisplus.extension.service.additional.query.impl.LambdaQu
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.biz.dal.entity.*;
-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.SourceTypeEnum;
+import com.yonge.cooleshow.biz.dal.enums.*;
 import com.yonge.cooleshow.biz.dal.mapper.TenantAlbumMapper;
 import com.yonge.cooleshow.biz.dal.service.*;
 import com.yonge.cooleshow.biz.dal.vo.UserOrderDetailVo;
 import com.yonge.cooleshow.biz.dal.wrapper.TenantAlbumWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.UserPaymentOrderWrapper;
 import com.yonge.cooleshow.common.enums.EActivationCode;
+import com.yonge.cooleshow.common.enums.PostStatusEnum;
+import com.yonge.cooleshow.common.enums.YesOrNoEnum;
 import com.yonge.toolset.base.exception.BizException;
 import com.yonge.toolset.base.util.StringUtil;
 import lombok.extern.slf4j.Slf4j;
@@ -74,6 +73,9 @@ public class TenantAlbumServiceImpl extends ServiceImpl<TenantAlbumMapper, Tenan
     @Autowired
     private MusicSheetService musicSheetService;
 
+    @Autowired
+    private TenantAccountRecordService tenantAccountRecordService;
+
 
     /**
      * 查询详情
@@ -324,6 +326,19 @@ public class TenantAlbumServiceImpl extends ServiceImpl<TenantAlbumMapper, Tenan
                     tenantActivationCodes.add(tenantActivationCode);
                 }
                 tenantActivationCodeService.saveBatch(tenantActivationCodes);
+
+                // 写入机构流水表
+                TenantAccountRecord tenantAccountRecord = TenantAccountRecord.builder()
+                        .tenantId(tenantAlbumPurchase.getTenantId())
+                        .transAmount(userOrderDetailVo.getActualPrice())
+                        .inOrOut(InOrOutEnum.OUT.getCode())
+                        .postStatus(PostStatusEnum.RECORDED.getCode())
+                        .bizType(OrderTypeEnum.TENANT_ALBUM.getCode())
+                        .bizId(userOrderDetailVo.getBizId())
+                        .bizName(userOrderDetailVo.getGoodName())
+                        .orderNo(userOrderDetailVo.getOrderNo())
+                        .build();
+                tenantAccountRecordService.save(tenantAccountRecord);
                 break;
             }
         }
@@ -403,11 +418,26 @@ public class TenantAlbumServiceImpl extends ServiceImpl<TenantAlbumMapper, Tenan
         }
         List<TenantAlbumMusic> list = tenantAlbumMusicService.lambdaQuery()
                 .in(TenantAlbumMusic::getTenantAlbumId, bizIds)
+                .eq(TenantAlbumMusic::getDelFlag,0)
                 .list();
         if (CollectionUtils.isEmpty(list)) {
             return new HashMap<>();
         }
-        return list.stream().collect(Collectors.groupingBy(TenantAlbumMusic::getTenantAlbumId,Collectors.counting()));
+        List<Long> musicIds = list.stream().map(o -> o.getMusicSheetId()).collect(Collectors.toList());
+        List<MusicSheet> musicList = musicSheetService.lambdaQuery()
+                .eq(MusicSheet::getDelFlag, false)
+                .eq(MusicSheet::getState, YesOrNoEnum.YES)
+                .eq(MusicSheet::getAuditVersion, YesOrNoEnum.NO)
+                .in(MusicSheet::getId, musicIds)
+                .list();
+        if (CollectionUtils.isEmpty(musicList)) {
+            return new HashMap<>();
+        }
+        // 曲目ID集合
+        List<Long> musicSheetIds = musicList.stream().map(o -> o.getId()).collect(Collectors.toList());
+
+        return list.stream().filter(o -> musicSheetIds.contains(o.getMusicSheetId()))
+                .collect(Collectors.groupingBy(TenantAlbumMusic::getTenantAlbumId, Collectors.counting()));
     }
 
     @Override

+ 2 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantInfoServiceImpl.java

@@ -276,8 +276,8 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoMapper, TenantI
             sysUser.setAvatar(sysConfigService.findConfigValue(SysConfigConstant.TEACHER_AVATAR));
             sysUser.setUserType(SysUserType.ORGANIZATION.getCode());
             sysUser.setUsername(tenantInfo.getUsername());
-            String newPassword = MessageFormat.format("klxjg{0}", tenantInfo.getPhone().substring(7));
-            String password = new BCryptPasswordEncoder().encode(newPassword);
+//            String newPassword = MessageFormat.format("klxjg{0}", tenantInfo.getPhone().substring(7));
+//            String password = new BCryptPasswordEncoder().encode(newPassword);
             //sysUser.setPassword(password);
             sysUserMapper.insert(sysUser);
         }

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

@@ -240,7 +240,8 @@ public class TenantUnbindRecordServiceImpl extends ServiceImpl<TenantUnbindRecor
             }
             teacherDao.update(null, Wrappers.<Teacher>lambdaUpdate()
                     .eq(Teacher::getUserId, unbindRecord.getUserId())
-                    .set(Teacher::getSettlementFrom, ESettlementFrom.TEACHER)
+                    .set(ESettlementFrom.TENANT.equals(teacher.getSettlementFrom()), Teacher::getSettlementFrom,
+                            ESettlementFrom.TEACHER)
                     .set(Teacher::getTenantId, -1L));
         }
 

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

@@ -275,7 +275,7 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
             userOrderVo.setOrderDetailList(orderDetilList);
 
             // 计算优惠券金额
-            CouponOrderWrapper couponOrderWrapper  = couponInfoService.queryUserOrderCouponInfo(param.getUserId(),
+            CouponOrderWrapper couponOrderWrapper  = couponInfoService.queryUserOrderCouponInfo(userOrderVo.getUserId(),
                     CouponInfoQuery.CouponOrderQuery.builder()
                             .clientType(userOrderVo.getOrderClient())
                             .orderNo(param.getOrderNo())
@@ -512,6 +512,7 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
                         bizInfo.setBizName(userOrderDetailVo.getGoodName());
                         bizInfo.setBizDesc(tenantAlbum.getDescribe());
                         bizInfo.setBizMusicCount(musicCountByIds.getOrDefault(tenantAlbum.getId(),0L).intValue());
+                        userOrderDetailVo.setGoodUrl(tenantAlbum.getCoverImg());
                         bizInfo.setBizValidTime(tenantAlbumContent.getBuyCycle());
                         userOrderDetailVo.setBizInfo(bizInfo);
                     }

+ 4 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserTenantAlbumRecordServiceImpl.java

@@ -134,8 +134,10 @@ public class UserTenantAlbumRecordServiceImpl extends ServiceImpl<UserTenantAlbu
 
 
                 TenantInfo tenantInfo = tenantInfoService.getById(one.getTenantId());
-                vo.setTenantName(tenantInfo.getName());
-                vo.setTenantImg(tenantInfo.getLogo());
+                if (tenantInfo != null) {
+                    vo.setTenantName(tenantInfo.getName());
+                    vo.setTenantImg(tenantInfo.getLogo());
+                }
                 //查询机构专辑曲目表
                 List<TenantAlbumMusic> tenantAlbumMusics = tenantAlbumMusicService.lambdaQuery()
                         .eq(TenantAlbumMusic::getTenantAlbumId, i.getId())

+ 3 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/StudentVo.java

@@ -72,6 +72,9 @@ public class StudentVo extends Student {
     @ApiModelProperty(value = "imToken")
     private String imToken;
 
+
+    private String imUserId;
+
     public YesOrNoEnum getDelFlag() {
         return delFlag;
     }

+ 4 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/TenantAccountRecordWrapper.java

@@ -125,6 +125,10 @@ public class TenantAccountRecordWrapper {
         @ApiModelProperty("支出")
         private BigDecimal transAmountOut = BigDecimal.ZERO;
 
+
+
+        @ApiModelProperty("支出")
+        private BigDecimal amountOut = BigDecimal.ZERO;
     }
 
 

+ 3 - 3
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/TenantActivationCodeWrapper.java

@@ -165,9 +165,9 @@ public class TenantActivationCodeWrapper {
             if (StringUtils.isEmpty(code)) {
                 errMsg.add("激活码不能为空");
             }
-            if (StringUtils.isNotEmpty(phone) && !Pattern.matches(PHONE_REG, phone.trim())) {
-                errMsg.add("手机号格式错误");
-            }
+//            if (StringUtils.isNotEmpty(phone) && !Pattern.matches(PHONE_REG, phone.trim())) {
+//                errMsg.add("手机号格式错误");
+//            }
             return errMsg;
         }
 

+ 10 - 4
cooleshow-user/user-biz/src/main/resources/config/mybatis/SysMusicCompareRecordMapper.xml

@@ -183,7 +183,7 @@
 
 	<select id="getUserTrainChartData" resultType="com.yonge.cooleshow.biz.dal.dto.StudentTrainChartDto">
 		SELECT
-			DATE_FORMAT(smcr.create_time_, '%Y-%m-%d') trainDate,
+			smcr.create_time_ trainDate,
 			COUNT(DISTINCT smcr.behavior_id_) trainNum,
 			SUM(smcr.play_time_) trainTime
 		FROM sys_music_compare_record smcr
@@ -349,9 +349,9 @@
 		su.avatar_                                             avatar,
 		su.username_                                           username,
 		GROUP_CONCAT(DISTINCT sb.name_)                        subjectName,
-		SUM(mprs.playTime)                                     trainTimes,
+		SUM(mprs.playTime) / 60                                trainTimes,
 		COUNT(DISTINCT mprs.create_time_)                      trainDays,
-		SUM(mprs.playTime) / COUNT(DISTINCT mprs.create_time_) avgTrainTimes
+		SUM(mprs.playTime) / 60 / COUNT(DISTINCT mprs.create_time_) avgTrainTimes
 		from student st
 		left join
 		(select smcr.user_id_,
@@ -365,6 +365,9 @@
 			<if test="tenantId != null">
 				AND smcr.tenant_id_ = #{tenantId}
 			</if>
+			<if test="clientId != null and clientId!= ''">
+				AND smcr.client_id_ = #{clientId}
+			</if>
 		</where>
 		group by smcr.user_id_, DATE_FORMAT(create_time_, '%Y-%m-%d')) mprs ON mprs.user_id_ = st.user_id_
 		left join sys_user su ON st.user_id_ = su.id_
@@ -385,6 +388,9 @@
 		left join sys_user su ON st.user_id_ = su.id_
 		LEFT JOIN sys_music_compare_record smcr ON smcr.user_id_ = st.user_id_
 		<where>
+			<if test="clientId != null and clientId!= ''">
+				AND smcr.client_id_ = #{clientId}
+			</if>
 			<if test="tenantId != null">
 				AND smcr.tenant_id_ = #{tenantId}
 			</if>
@@ -398,7 +404,7 @@
 	</select>
 	<select id="wechatCompareRecordSum"
 			resultType="com.yonge.cooleshow.biz.dal.queryInfo.SysMusicCompareRecordQueryInfo$WechatCompareRecordSumDto">
-		select COUNT(st.user_id_) studentNum,COUNT(DISTINCT DATE_FORMAT(smcr.create_time_,'%Y-%m-%d')) trainDays,SUM(smcr.play_time_) trainTimes
+		select COUNT(DISTINCT st.user_id_) studentNum,COUNT(DISTINCT DATE_FORMAT(smcr.create_time_,'%Y-%m-%d')) trainDays,SUM(smcr.play_time_) / 60 trainTimes
 		from student st
 		LEFT JOIN sys_music_compare_record smcr ON smcr.user_id_ = st.user_id_
 		<where>

+ 2 - 1
cooleshow-user/user-biz/src/main/resources/config/mybatis/TenantAccountRecordMapper.xml

@@ -63,7 +63,8 @@
             resultType="com.yonge.cooleshow.biz.dal.wrapper.TenantAccountRecordWrapper$TenantAccountRecordStat">
         SELECT
         sum(if(t.in_or_out_ = 'IN' and t.post_status_ = 'RECORDED',t.trans_amount_,0)) transAmountIn,
-        sum(if(t.in_or_out_ = 'IN' and t.post_status_ = 'WAIT',t.trans_amount_,0)) transAmountOut
+        sum(if(t.in_or_out_ = 'IN' and t.post_status_ = 'WAIT',t.trans_amount_,0)) transAmountOut,
+        sum(if(t.in_or_out_ = 'OUT' and t.post_status_ = 'RECORDED',t.trans_amount_,0)) amountOut
         FROM tenant_account_record t
         <include refid="selectSql"/>
     </select>

+ 11 - 2
cooleshow-user/user-biz/src/main/resources/config/mybatis/TenantAlbumPurchaseMapper.xml

@@ -26,12 +26,21 @@
         <include refid="baseColumns"/>,ta.name_ as tenantAlbumName,ta.cover_img_ as tenantAlbumImg
         FROM tenant_album_purchase t
         LEFT JOIN tenant_album ta on t.tenant_album_id_ = ta.id_
+        left join user_order t2 on t2.order_no_ = t.order_no_
         <where>
-        <if test="param.tenantId != null">
+            <if test="param.tenantId != null">
                 AND t.tenant_id_ = #{param.tenantId}
             </if>
             <if test="param.purchaseStatus != null and param.purchaseStatus.trim() != ''">
-                AND t.purchase_status_ = #{param.purchaseStatus}
+                <if test="param.purchaseStatus == 'WAIT_PAY'">
+                    AND t2.status_ in ( 'WAIT_PAY','PAYING')
+                </if>
+                <if test="param.purchaseStatus == 'PAID'">
+                    AND t2.status_ in ( 'PAID')
+                </if>
+                <if test="param.purchaseStatus == 'CLOSE'">
+                    AND t2.status_ in ( 'CLOSE','FAIL')
+                </if>
             </if>
         </where>
         <choose>

+ 24 - 0
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/open/UserPaymentClient.java

@@ -14,13 +14,18 @@ import com.microsvc.toolkit.middleware.payment.common.api.entity.RefundResp;
 import com.yeepay.g3.sdk.yop.encrypt.DigitalEnvelopeDTO;
 import com.yeepay.g3.sdk.yop.utils.DigitalEnvelopeUtils;
 import com.yeepay.g3.sdk.yop.utils.RSAKeyUtils;
+import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.entity.PaymentMerchantConfig;
 import com.yonge.cooleshow.biz.dal.entity.TenantMember;
+import com.yonge.cooleshow.biz.dal.entity.UserOrder;
 import com.yonge.cooleshow.biz.dal.entity.UserOrderRefundBill;
 import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.service.*;
+import com.yonge.cooleshow.biz.dal.vo.UserOrderVo;
 import com.yonge.cooleshow.biz.dal.wrapper.UserPaymentOrderWrapper;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.common.enums.EPayerType;
 import com.yonge.cooleshow.student.vo.UserPaymentOrderVo;
 import io.swagger.annotations.Api;
@@ -30,6 +35,7 @@ import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
@@ -39,6 +45,9 @@ import java.security.PublicKey;
 import java.util.Date;
 import java.util.Objects;
 
+import static com.yonge.cooleshow.common.entity.HttpResponseResult.failed;
+import static com.yonge.cooleshow.common.entity.HttpResponseResult.succeed;
+
 @Slf4j
 @RestController
 @RequestMapping("/open/userOrder")
@@ -48,6 +57,8 @@ public class UserPaymentClient {
     @Autowired
     private UserPaymentCoreService userPaymentCoreService;
 
+    @Autowired
+    private UserOrderService userOrderService;
     @ApiOperation(value = "用户付款", notes = "用户付款")
     @PostMapping("/executePayment/v2")
     public R<UserPaymentOrderWrapper.PaymentReq> executePayment(@Validated @RequestBody UserPaymentOrderVo.PaymentReqConfig config, HttpServletRequest request) {
@@ -68,4 +79,17 @@ public class UserPaymentClient {
         return R.from(paymentConfig);
     }
 
+    /**
+     * 查询单条
+     */
+    @GetMapping("/detailByOrderNo/{orderNo}")
+    @ApiOperation(value = "通过订单号查询详情", notes = "传入orderNo")
+    public HttpResponseResult<UserOrderVo> detailByOrderNo(@PathVariable("orderNo") String orderNo) {
+
+        UserOrder param = new UserOrder();
+        param.setOrderNo(orderNo);
+        UserOrderVo detail = userOrderService.detailApp(param);
+        return succeed(detail);
+    }
+
 }

+ 5 - 0
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/StudentController.java

@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dto.search.StudentSearch;
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.service.ImGroupService;
 import com.yonge.cooleshow.biz.dal.service.StudentService;
 import com.yonge.cooleshow.biz.dal.vo.StudentVo;
 import com.yonge.cooleshow.common.controller.BaseController;
@@ -41,6 +43,8 @@ public class StudentController extends BaseController {
     @Resource
     private SysUserFeignService sysUserFeignService;
 
+    @Autowired
+    private ImGroupService imGroupService;
 
     @ApiOperation(value = "查询指定学员信息-融云token")
     @GetMapping("/queryUserById")
@@ -114,6 +118,7 @@ public class StudentController extends BaseController {
                     vo.setUserStatus(UserStatusEnum.NORMAL);
                 }
             }
+            vo.setImUserId(imGroupService.getImUserId(vo.getUserId(), ClientEnum.STUDENT));
         }
         return succeed(PageUtil.pageInfo(pages));
     }

+ 26 - 4
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/open/UserPaymentClient.java

@@ -4,24 +4,31 @@ import cn.hutool.extra.servlet.ServletUtil;
 import com.microsvc.toolkit.common.response.template.R;
 import com.microsvc.toolkit.common.webportal.exception.BizException;
 import com.microsvc.toolkit.config.jwt.utils.JwtUserInfo;
+import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.entity.UserOrder;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.service.UserOrderService;
 import com.yonge.cooleshow.biz.dal.service.UserPaymentCoreService;
+import com.yonge.cooleshow.biz.dal.vo.UserOrderVo;
 import com.yonge.cooleshow.biz.dal.wrapper.UserPaymentOrderWrapper;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.teacher.vo.UserPaymentOrderVo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
 import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
 import java.util.Objects;
 
+import static com.yonge.cooleshow.common.entity.HttpResponseResult.failed;
+import static com.yonge.cooleshow.common.entity.HttpResponseResult.succeed;
+
 @Slf4j
 @RestController
 @RequestMapping("/open/userOrder")
@@ -31,6 +38,9 @@ public class UserPaymentClient {
     @Autowired
     private UserPaymentCoreService userPaymentCoreService;
 
+    @Autowired
+    private UserOrderService userOrderService;
+
     @ApiOperation(value = "用户付款", notes = "用户付款")
     @PostMapping("/executePayment/v2")
     public R<UserPaymentOrderWrapper.PaymentReq> executePayment(@Validated @RequestBody UserPaymentOrderVo.PaymentReqConfig config, HttpServletRequest request) {
@@ -51,4 +61,16 @@ public class UserPaymentClient {
         return R.from(paymentConfig);
     }
 
+    /**
+     * 查询单条
+     */
+    @GetMapping("/detailByOrderNo/{orderNo}")
+    @ApiOperation(value = "通过订单号查询详情", notes = "传入orderNo")
+    public HttpResponseResult<UserOrderVo> detailByOrderNo(@PathVariable("orderNo") String orderNo) {
+        UserOrder param = new UserOrder();
+        param.setOrderNo(orderNo);
+        UserOrderVo detail = userOrderService.detailApp(param);
+        return succeed(detail);
+    }
+
 }

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

@@ -88,6 +88,7 @@ public class StudentController extends BaseController {
         TenantInfo tenantInfo = getTenantInfo();
         query.setTenantId(tenantInfo.getId());
         query.setDelFlag(YesOrNoEnum.NO);
+        query.setLockFlag(UserLockFlag.NORMAL);
         query.setOrderBy("u.username_ asc");
 
         IPage<StudentVo> pages = studentService.selectPage(PageUtil.getPage(query), query);

+ 1 - 0
cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/TeacherController.java

@@ -79,6 +79,7 @@ public class TeacherController extends BaseController {
         TenantInfo tenantInfo = getTenantInfo();
         query.setTenantId(tenantInfo.getId());
         query.setDelFlag(YesOrNoEnum.NO);
+        query.setLockFlag(UserLockFlag.NORMAL);
         query.setOrderBy("u.username_ asc");
 
         IPage<TeacherVo> pages = teacherService.selectPage(PageUtil.getPage(query), query);

+ 1 - 1
cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/TenantActivationCodeController.java

@@ -195,7 +195,7 @@ public class TenantActivationCodeController extends BaseController {
         }
 
         List<TenantActivationCodeWrapper.ExportTemplate> templates = JSONArray.parseArray(JSON.toJSONString(rows), TenantActivationCodeWrapper.ExportTemplate.class);
-
+        templates.forEach(next->next.setActivationPhone(""));
 
         TenantActivationCodeWrapper.ExportFile exportFile = generateExportExcelFile(templates, TenantActivationCodeWrapper.ExportTemplate.class, "激活码导出", "激活码");
         return succeed(exportFile);

+ 7 - 0
cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/TenantInfoController.java

@@ -263,6 +263,7 @@ public class TenantInfoController extends BaseController {
                 tenantInfoService.lambdaUpdate()
                         .eq(TenantInfo::getId, user.getTenantId())
                         .set(TenantInfo::getUserId, userId)
+                        .set(TenantInfo::getPhone,sysUser.getPhone())
                         .update();
             }
 
@@ -274,6 +275,12 @@ public class TenantInfoController extends BaseController {
                 sysUser.setAvatar(sysConfigService.findConfigValue(SysConfigConstant.DEFAULT_HEARD));
             }
 
+            // 更新用户头象
+            com.yonge.cooleshow.biz.dal.entity.SysUser updateSysUser = new com.yonge.cooleshow.biz.dal.entity.SysUser();
+            updateSysUser.setId(user.getId());
+            updateSysUser.setAvatar(sysUser.getAvatar());
+            sysUserMapper.updateById(updateSysUser);
+
             // 更新机构员工头像和昵称,机构信息表中的用户昵称
             tenantStaffService.lambdaUpdate()
                     .eq(TenantStaff::getUserId, user.getId())