Browse Source

Merge branch 'feature/0721-tenant' into develop

# Conflicts:
#	cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherServiceImpl.java
#	cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/TeacherHomeVo.java
yuanliang 1 năm trước cách đây
mục cha
commit
987abbe7a7
65 tập tin đã thay đổi với 1031 bổ sung150 xóa
  1. 2 2
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/core/handler/BaseAuthenticationFailureEvenHandler.java
  2. 19 22
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/core/handler/BaseAuthenticationSuccessEventHandler.java
  3. 1 1
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/core/provider/PhoneAuthenticationProvider.java
  4. 1 1
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/core/provider/service/DefaultUserDetailsService.java
  5. 1 1
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/web/controller/UserController.java
  6. 5 0
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/constant/SysConfigConstant.java
  7. 1 1
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/security/SecurityConstants.java
  8. 38 2
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/TenantUnbindHistoryController.java
  9. 16 0
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/open/OpenSysConfigController.java
  10. 2 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/PaymentDivMember.java
  11. 2 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/PaymentDivMemberRecord.java
  12. 2 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/PaymentMerchantConfig.java
  13. 2 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/SysGoodsPrice.java
  14. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/TenantAccountRecord.java
  15. 2 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/TenantActivationCode.java
  16. 2 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/TenantAlbum.java
  17. 2 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/TenantAlbumMusic.java
  18. 2 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/TenantAlbumPurchase.java
  19. 2 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/TenantAlbumRef.java
  20. 2 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/TenantApplyRecord.java
  21. 2 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/TenantEntryRecord.java
  22. 2 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/TenantInfo.java
  23. 2 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/TenantMember.java
  24. 2 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/TenantPersonStat.java
  25. 3 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/TenantStaff.java
  26. 3 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/TenantUnbindHistory.java
  27. 3 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/TenantUnbindRecord.java
  28. 2 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UnbindAuthUser.java
  29. 2 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserTenantAlbumRecord.java
  30. 2 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/mapper/UserTenantAlbumRecordMapper.java
  31. 6 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/MusicAlbumService.java
  32. 2 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/TenantActivationCodeService.java
  33. 2 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserTenantAlbumRecordService.java
  34. 140 13
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicAlbumServiceImpl.java
  35. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicSheetServiceImpl.java
  36. 7 4
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/PaymentDivMemberRecordServiceImpl.java
  37. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/RedisCacheServiceImpl.java
  38. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/StudentServiceImpl.java
  39. 3 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/SysMusicCompareRecordServiceImpl.java
  40. 65 21
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherServiceImpl.java
  41. 66 4
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantActivationCodeServiceImpl.java
  42. 5 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantAlbumServiceImpl.java
  43. 19 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantInfoServiceImpl.java
  44. 24 15
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantUnbindRecordServiceImpl.java
  45. 41 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderServiceImpl.java
  46. 96 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserTenantAlbumRecordServiceImpl.java
  47. 21 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/TeacherHomeVo.java
  48. 12 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/UserOrderVo.java
  49. 3 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/TenantAlbumMusicWrapper.java
  50. 3 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/TenantAlbumWrapper.java
  51. 50 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/TenantUnbindHistoryWrapper.java
  52. 1 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/UserOrderMapper.xml
  53. 14 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/UserTenantAlbumRecordMapper.xml
  54. BIN
      cooleshow-user/user-student/.DS_Store
  55. 20 0
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/SysMusicCompareRecordController.java
  56. 11 0
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/TenantActivationCodeController.java
  57. 15 0
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/UserTenantAlbumRecordController.java
  58. 14 0
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/MusicAlbumController.java
  59. 77 0
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/StudentController.java
  60. 5 0
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/SysMusicCompareRecordController.java
  61. 28 4
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/TeacherController.java
  62. 12 0
      cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/TenantAlbumController.java
  63. 68 0
      cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/TenantAlbumSheetController.java
  64. 47 22
      cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/TenantInfoController.java
  65. 23 5
      toolset/toolset-base/src/main/java/com/yonge/toolset/base/util/StringUtil.java

+ 2 - 2
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/core/handler/BaseAuthenticationFailureEvenHandler.java

@@ -52,11 +52,11 @@ public class BaseAuthenticationFailureEvenHandler extends ExceptionMappingAuthen
             resultCode = 5004;
             // 用户未绑定openId错误信息
             message = "该机构已被冻结,请联系管理员";
-        } else if (message.startsWith("MA:5006:")) {
+        } else if (message.startsWith("MA:5005:")) {
             // 返回用户绑定openId
             data = message.split(":")[2];
             // 用户未绑定openId错误码
-            resultCode = 5006;
+            resultCode = 5005;
             // 用户未绑定openId错误信息
             message = "账号已冻结";
         }

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

@@ -1,18 +1,15 @@
 package com.yonge.cooleshow.auth.core.handler;
 
-import java.io.IOException;
-import java.util.Base64;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
+import com.fasterxml.jackson.databind.ObjectMapper;
+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.common.entity.ImResult;
-import com.yonge.cooleshow.common.entity.ImUserModel;
-import com.yonge.toolset.base.exception.BizException;
+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;
@@ -36,15 +33,13 @@ import org.springframework.security.oauth2.provider.token.AuthorizationServerTok
 import org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler;
 import org.springframework.stereotype.Component;
 
-import com.fasterxml.jackson.databind.ObjectMapper;
-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.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 javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.Base64;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
 
 @Component
 public class BaseAuthenticationSuccessEventHandler extends SavedRequestAwareAuthenticationSuccessHandler {
@@ -80,7 +75,9 @@ public class BaseAuthenticationSuccessEventHandler extends SavedRequestAwareAuth
 		SysUser sysUser;
 		if(username.startsWith(SecurityConstants.USERNAME_PRINCIPAL_PREFIX)){
 			sysUser = sysUserService.queryByUsername(username.split(":")[1]);
-		}else {
+		} else if (username.startsWith(SecurityConstants.MA_PRINCIPAL_PREFIX)) {
+			sysUser = sysUserService.queryLockByPhone(username.split(":")[2]);
+		} else {
 			sysUser = sysUserService.queryLockByPhone(username.split(":")[1]);
 		}
 		if(StringUtils.isEmpty(sysUser.getImToken())){

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

@@ -109,7 +109,7 @@ public class PhoneAuthenticationProvider extends AbstractAuthenticationProvider
             }
 
             // 重置登陆账号信息
-            username = MessageFormat.format(SecurityConstants.MA_PRINCIPAL_PREFIX, openid, sysUser.getPhone());
+            username = MessageFormat.format("{0}:{1}:{2}", SecurityConstants.MA_PRINCIPAL_PREFIX, openid, sysUser.getPhone());
 
             // 绑定设备
             if (StringUtils.isNotBlank(deviceNum)) {

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

@@ -101,7 +101,7 @@ public class DefaultUserDetailsService implements UserDetailsService {
             }
             if (UserLockFlag.LOCKED.name().equals(tenantStaff.getStatus())) {
                 // 账号被锁定
-                throw new UsernameNotFoundException("MA:5006:" + openid);
+                throw new UsernameNotFoundException("MA:5005:" + openid);
             }
             if (Boolean.FALSE.equals(tenantStaff.getTenantEnableFlag())) {
                 // 机构锁定

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

@@ -392,7 +392,7 @@ public class UserController extends BaseController {
         }
 
         // 新密码规则:clx+手机号后四位
-        String newPassword = MessageFormat.format("klxjg{0}", sysUser.getPhone().substring(7));
+        String newPassword = MessageFormat.format("klx{0}", sysUser.getPhone().substring(7));
 
         // 生成重置默认密码
         String password = new BCryptPasswordEncoder().encode(newPassword);

+ 5 - 0
cooleshow-common/src/main/java/com/yonge/cooleshow/common/constant/SysConfigConstant.java

@@ -365,6 +365,11 @@ public interface SysConfigConstant {
     String CUSTOMER_SERVICE_PHONE = "customer_service_phone";
 
     /**
+     * 客服邮箱
+     */
+    String CUSTOMER_SERVICE_EMAIL = "customer_service_email";
+
+    /**
      * 机构人员解绑申请超时时间,天
      */
     String TENANT_USER_UNBIND_EXPIRE_TIME = "tenant_user_unbind_expire_time";

+ 1 - 1
cooleshow-common/src/main/java/com/yonge/cooleshow/common/security/SecurityConstants.java

@@ -6,7 +6,7 @@ public interface SecurityConstants {
 
 	String PHONE_PRINCIPAL_PREFIX = "phone:";
 
-	String MA_PRINCIPAL_PREFIX = "ma:{0}:{1}";
+	String MA_PRINCIPAL_PREFIX = "ma";
 
 	String PARAM_VERIFY_EXCEPTION = "参数校验异常";
 

+ 38 - 2
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/TenantUnbindHistoryController.java

@@ -1,15 +1,22 @@
 package com.yonge.cooleshow.admin.controller;
 
+import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.microsvc.toolkit.common.response.paging.PageInfo;
 import com.microsvc.toolkit.common.response.paging.QueryInfo;
 import com.microsvc.toolkit.common.response.template.R;
+import com.yonge.cooleshow.biz.dal.entity.Employee;
+import com.yonge.cooleshow.biz.dal.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.entity.TenantUnbindHistory;
+import com.yonge.cooleshow.biz.dal.service.EmployeeService;
+import com.yonge.cooleshow.biz.dal.service.SysUserService;
+import com.yonge.cooleshow.biz.dal.service.TenantStaffService;
 import com.yonge.cooleshow.biz.dal.service.TenantUnbindHistoryService;
 import com.yonge.cooleshow.biz.dal.wrapper.TenantUnbindHistoryWrapper;
 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.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -17,6 +24,13 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import javax.jws.Oneway;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
 @Slf4j
 @Validated
 @RestController
@@ -27,12 +41,34 @@ public class TenantUnbindHistoryController {
     @Autowired
     private TenantUnbindHistoryService tenantUnbindHistoryService;
 
+    @Autowired
+    private SysUserService sysUserService;
+
     @ApiOperation(value = "查询分页", notes = "机构解绑历史表- 传入 TenantUnbindHistoryWrapper.TenantUnbindHistoryQuery")
     @PostMapping("/page")
-    public R<PageInfo<TenantUnbindHistory>> page(@RequestBody TenantUnbindHistoryWrapper.TenantUnbindHistoryQuery query) {
+    public R<PageInfo<TenantUnbindHistoryWrapper.TenantUnbindHistory>> page(@RequestBody TenantUnbindHistoryWrapper.TenantUnbindHistoryQuery query) {
 
         IPage<TenantUnbindHistory> pages = tenantUnbindHistoryService.selectPage(QueryInfo.getPage(query), query);
 
-        return R.from(QueryInfo.pageInfo(pages));
+        List<TenantUnbindHistory> records = pages.getRecords();
+        if (records.isEmpty()) {
+            return R.from(QueryInfo.pageInfo(pages, new ArrayList<>()));
+        }
+        List<Long> userIds =
+                pages.getRecords().stream().map(TenantUnbindHistory::getVerifyUserId).distinct()
+                        .collect(Collectors.toList());
+        Map<Long, SysUser> mapByIds = sysUserService.getMapByIds(userIds);
+
+        List<TenantUnbindHistoryWrapper.TenantUnbindHistory> histories = records.stream().map(next -> {
+            TenantUnbindHistoryWrapper.TenantUnbindHistory tenantUnbindHistory =
+                    JSON.parseObject(JSON.toJSONString(next), TenantUnbindHistoryWrapper.TenantUnbindHistory.class);
+            SysUser orDefault = mapByIds.getOrDefault(next.getVerifyUserId(), new SysUser());
+            tenantUnbindHistory.setVerifyUserName(StringUtils.isEmpty(orDefault.getRealName()) ?
+                    orDefault.getUsername() :
+                    orDefault.getRealName());
+            return tenantUnbindHistory;
+
+        }).collect(Collectors.toList());
+        return R.from(QueryInfo.pageInfo(pages, histories));
     }
 }

+ 16 - 0
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/open/OpenSysConfigController.java

@@ -7,11 +7,16 @@ import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import org.json.JSONObject;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Optional;
+
 /**
  * 系统配置控制层
  */
@@ -30,4 +35,15 @@ public class OpenSysConfigController extends BaseController {
         return succeed(sysConfig.getParamValue());
     }
 
+    @ApiOperation(value = "查询客服联系方式,电话和邮箱")
+    @GetMapping(value = "/queryCustomerService")
+    public HttpResponseResult<Map<String, String>> queryCustomerService() {
+        SysConfig email = sysConfigService.findByParamName(SysConfigConstant.CUSTOMER_SERVICE_EMAIL);
+        SysConfig phone = sysConfigService.findByParamName(SysConfigConstant.CUSTOMER_SERVICE_PHONE);
+        Map<String, String> result = new HashMap<>();
+        result.put("email", email == null ? "" : email.getParamValue());
+        result.put("phone", phone == null ? "" : phone.getParamValue());
+        return succeed(result);
+    }
+
 }

+ 2 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/PaymentDivMember.java

@@ -23,7 +23,8 @@ import java.util.Date;
 public class PaymentDivMember implements Serializable {
 
     @ApiModelProperty("主键") 
-	    @TableId(value = "id_")
+
+    @TableId(value = "id_", type = IdType.AUTO)
 	    private Long id;
 
     @ApiModelProperty("机构ID") 

+ 2 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/PaymentDivMemberRecord.java

@@ -26,7 +26,8 @@ import java.math.BigDecimal;
 public class PaymentDivMemberRecord implements Serializable {
 
     @ApiModelProperty("主键") 
-	    @TableId(value = "id_")
+
+    @TableId(value = "id_", type = IdType.AUTO)
 	    private Long id;
 
     @ApiModelProperty("机构ID") 

+ 2 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/PaymentMerchantConfig.java

@@ -24,7 +24,8 @@ import java.util.Date;
 public class PaymentMerchantConfig implements Serializable {
 
     @ApiModelProperty("主键") 
-	    @TableId(value = "id_")
+
+    @TableId(value = "id_", type = IdType.AUTO)
 	    private Long id;
 
     @ApiModelProperty("机构ID") 

+ 2 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/SysGoodsPrice.java

@@ -24,7 +24,8 @@ import java.math.BigDecimal;
 public class SysGoodsPrice implements Serializable {
 
     @ApiModelProperty("主键ID") 
-	    @TableId(value = "id_")
+
+    @TableId(value = "id_", type = IdType.AUTO)
 	    private Long id;
 
     @ApiModelProperty("商品类型") 

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/TenantAccountRecord.java

@@ -26,7 +26,7 @@ import java.math.BigDecimal;
 public class TenantAccountRecord implements Serializable {
 
     @ApiModelProperty("id") 
-	    @TableId(value = "id_")
+	    @TableId(value = "id_",type = IdType.AUTO)
 	    private Long id;
 
     @ApiModelProperty("机构id") 

+ 2 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/TenantActivationCode.java

@@ -24,7 +24,8 @@ import java.util.Date;
 public class TenantActivationCode implements Serializable {
 
     @ApiModelProperty("主键ID") 
-	    @TableId(value = "id_")
+
+    @TableId(value = "id_", type = IdType.AUTO)
 	    private Long id;
 
     @ApiModelProperty("机构ID") 

+ 2 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/TenantAlbum.java

@@ -24,7 +24,8 @@ import java.math.BigDecimal;
 public class TenantAlbum implements Serializable {
 
     @ApiModelProperty("主键ID") 
-	    @TableId(value = "id_")
+
+    @TableId(value = "id_", type = IdType.AUTO)
 	    private Long id;
 
     @ApiModelProperty("专辑名称") 

+ 2 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/TenantAlbumMusic.java

@@ -24,7 +24,8 @@ import java.util.Date;
 public class TenantAlbumMusic implements Serializable {
 
     @ApiModelProperty("主键ID") 
-	    @TableId(value = "id_")
+
+    @TableId(value = "id_", type = IdType.AUTO)
 	    private Long id;
 
     @ApiModelProperty("机构ID") 

+ 2 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/TenantAlbumPurchase.java

@@ -24,7 +24,8 @@ import java.math.BigDecimal;
 public class TenantAlbumPurchase implements Serializable {
 
     @ApiModelProperty("主键ID") 
-	    @TableId(value = "id_")
+
+    @TableId(value = "id_", type = IdType.AUTO)
 	    private Long id;
 
     @ApiModelProperty("机构ID") 

+ 2 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/TenantAlbumRef.java

@@ -23,7 +23,8 @@ import java.util.Date;
 public class TenantAlbumRef implements Serializable {
 
     @ApiModelProperty("主键ID") 
-	    @TableId(value = "id_")
+
+    @TableId(value = "id_", type = IdType.AUTO)
 	    private Long id;
 
     @ApiModelProperty("机构ID") 

+ 2 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/TenantApplyRecord.java

@@ -24,7 +24,8 @@ import java.util.Date;
 public class TenantApplyRecord implements Serializable {
 
     @ApiModelProperty("主键ID") 
-    @TableId(value = "id_")
+
+    @TableId(value = "id_", type = IdType.AUTO)
     private Long id;
 
     @ApiModelProperty("机构ID") 

+ 2 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/TenantEntryRecord.java

@@ -23,7 +23,8 @@ import java.util.Date;
 public class TenantEntryRecord implements Serializable {
 
     @ApiModelProperty("主键ID") 
-	    @TableId(value = "id_")
+
+    @TableId(value = "id_", type = IdType.AUTO)
 	    private Long id;
 
     @ApiModelProperty("机构入驻申请记录") 

+ 2 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/TenantInfo.java

@@ -24,7 +24,8 @@ import java.util.Date;
 public class TenantInfo  implements Serializable  {
 
     @ApiModelProperty("主键ID")
-    @TableId(value = "id_")
+
+    @TableId(value = "id_", type = IdType.AUTO)
     private Long id;
 
     @ApiModelProperty("名称")

+ 2 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/TenantMember.java

@@ -34,7 +34,8 @@ import java.math.BigDecimal;
 @TableName("tenant_member")
 public class TenantMember implements Serializable {
 
-    @TableId(value = "id_")
+
+    @TableId(value = "id_", type = IdType.AUTO)
     private Long id;
 
     @ApiModelProperty("支付类型 ADAPAY,YEEPAY")

+ 2 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/TenantPersonStat.java

@@ -22,7 +22,8 @@ import java.util.Date;
 @TableName("tenant_person_stat")
 public class TenantPersonStat implements Serializable {
 
-	    @TableId(value = "id_")
+
+    @TableId(value = "id_", type = IdType.AUTO)
 	    private Long id;
 
     @ApiModelProperty("机构编号") 

+ 3 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/TenantStaff.java

@@ -1,5 +1,6 @@
 package com.yonge.cooleshow.biz.dal.entity;
 
+import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
@@ -22,7 +23,8 @@ import java.util.Date;
 public class TenantStaff implements Serializable {
 
     @ApiModelProperty("主键ID") 
-	    @TableId(value = "id_")
+
+    @TableId(value = "id_", type = IdType.AUTO)
 	    private Long id;
 
     @ApiModelProperty("机构ID") 

+ 3 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/TenantUnbindHistory.java

@@ -1,5 +1,6 @@
 package com.yonge.cooleshow.biz.dal.entity;
 
+import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
@@ -22,7 +23,8 @@ import java.util.Date;
 public class TenantUnbindHistory implements Serializable {
 
     @ApiModelProperty("主键ID")
-    @TableId(value = "id_")
+
+    @TableId(value = "id_", type = IdType.AUTO)
     private Long id;
 
     @ApiModelProperty("机构ID")

+ 3 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/TenantUnbindRecord.java

@@ -1,5 +1,6 @@
 package com.yonge.cooleshow.biz.dal.entity;
 
+import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
@@ -22,7 +23,8 @@ import java.util.Date;
 public class TenantUnbindRecord implements Serializable {
 
     @ApiModelProperty("主键ID")
-    @TableId(value = "id_")
+
+    @TableId(value = "id_", type = IdType.AUTO)
     private Long id;
 
     @ApiModelProperty("机构ID")

+ 2 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UnbindAuthUser.java

@@ -23,7 +23,8 @@ import java.util.Date;
 public class UnbindAuthUser implements Serializable {
 
     @ApiModelProperty("主键") 
-    @TableId(value = "id_")
+
+    @TableId(value = "id_", type = IdType.AUTO)
     private Long id;
 
     @ApiModelProperty("员工ID") 

+ 2 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserTenantAlbumRecord.java

@@ -25,7 +25,8 @@ import java.util.Date;
 public class UserTenantAlbumRecord implements Serializable {
 
     @ApiModelProperty("记录id") 
-    @TableId(value = "id_")
+
+    @TableId(value = "id_", type = IdType.AUTO)
     private Long id;
 
     @ApiModelProperty("用户id") 

+ 2 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/mapper/UserTenantAlbumRecordMapper.java

@@ -29,4 +29,6 @@ public interface UserTenantAlbumRecordMapper extends BaseMapper<UserTenantAlbumR
 	List<Long> selectTenantIds(@Param("id") Long id);
 
 	List<TenantAlbum> selectTenantAlbumInfo(@Param("tenantIds") List<Long> tenantIds);
+
+    Long ifBuy(@Param("tenantAlbumId") Long tenantAlbumId, @Param("studentId") Long studentId);
 }

+ 6 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/MusicAlbumService.java

@@ -17,7 +17,9 @@ import com.yonge.cooleshow.biz.dal.vo.MusicSheetVo;
 import com.yonge.cooleshow.biz.dal.vo.ShareProfitVo;
 import com.yonge.cooleshow.biz.dal.vo.StudentMusicAlbumOrderVo;
 import com.yonge.cooleshow.biz.dal.vo.StudentMusicSheetOrderVo;
+import com.yonge.cooleshow.biz.dal.wrapper.TenantAlbumWrapper;
 import com.yonge.cooleshow.common.enums.YesOrNoEnum;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -157,4 +159,8 @@ public interface MusicAlbumService extends IService<MusicAlbum> {
      * 设置专辑收藏的虚拟人数
      */
     void setVirtualNumber();
+
+    TenantAlbumWrapper.TenantAlbum detailAlbum(String albumId);
+
+    TenantAlbumWrapper.TenantAlbum tenantDetailAlbum(String albumId);
 }

+ 2 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/TenantActivationCodeService.java

@@ -74,4 +74,6 @@ public interface TenantActivationCodeService extends IService<TenantActivationCo
      */
     void importActiveCode(List<ExcelDataReaderProperty<TenantActivationCodeWrapper.ImportTemplate>> dataList,
                           Long tenantId, Long userId, Long tenantAlbumPurchaseId);
+
+    void activeById(String id, Long userId);
 }

+ 2 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserTenantAlbumRecordService.java

@@ -60,4 +60,6 @@ public interface UserTenantAlbumRecordService extends IService<UserTenantAlbumRe
      * @return
      */
     List<Long> getUseAlbumIdsByUserId(Long userId,ClientEnum clientType);
+
+    TenantAlbumWrapper.TenantAlbum detailAlbum(String albumId);
 }

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

@@ -10,28 +10,28 @@ import java.util.Objects;
 import java.util.stream.Collectors;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dto.search.StudentMusicSheetOrderSearch;
-import com.yonge.cooleshow.biz.dal.entity.MusicSheet;
+import com.yonge.cooleshow.biz.dal.entity.*;
 import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
-import com.yonge.cooleshow.biz.dal.service.ActivityPlanService;
-import com.yonge.cooleshow.biz.dal.service.SysConfigService;
+import com.yonge.cooleshow.biz.dal.service.*;
 import com.yonge.cooleshow.biz.dal.vo.ActivityPlanVo;
 import com.yonge.cooleshow.biz.dal.vo.ShareProfitVo;
 import com.yonge.cooleshow.biz.dal.dao.AlbumMusicRelateDao;
 import com.yonge.cooleshow.biz.dal.dao.MusicSheetDao;
 import com.yonge.cooleshow.biz.dal.dao.MusicSheetPurchaseRecordDao;
-import com.yonge.cooleshow.biz.dal.entity.MusicSheetPurchaseRecord;
 import com.yonge.cooleshow.biz.dal.enums.ChargeTypeEnum;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.enums.album.PurchaseRecordTypeEnum;
-import com.yonge.cooleshow.biz.dal.service.MusicSheetPurchaseRecordService;
 import com.yonge.cooleshow.biz.dal.vo.StudentMusicAlbumOrderVo;
 import com.yonge.cooleshow.biz.dal.wrapper.StatGroupWrapper;
+import com.yonge.cooleshow.biz.dal.wrapper.TenantAlbumWrapper;
 import com.yonge.cooleshow.common.constant.SysConfigConstant;
 import com.yonge.cooleshow.common.enums.ActivityShareEnum;
 import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -47,14 +47,6 @@ import com.yonge.cooleshow.biz.dal.dto.MusicAlbumSheetSortDto;
 import com.yonge.cooleshow.biz.dal.dto.search.MusicAlbumDetailSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.MusicAlbumSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.StudentMusicAlbumSearch;
-import com.yonge.cooleshow.biz.dal.entity.AlbumFavorite;
-import com.yonge.cooleshow.biz.dal.entity.AlbumMusicRelate;
-import com.yonge.cooleshow.biz.dal.entity.MusicAlbum;
-import com.yonge.cooleshow.biz.dal.service.AlbumFavoriteService;
-import com.yonge.cooleshow.biz.dal.service.AlbumMusicRelateService;
-import com.yonge.cooleshow.biz.dal.service.MusicAlbumService;
-import com.yonge.cooleshow.biz.dal.service.MusicSheetService;
-import com.yonge.cooleshow.biz.dal.service.MusicTagService;
 import com.yonge.cooleshow.biz.dal.vo.AlbumDetailVo;
 import com.yonge.cooleshow.biz.dal.vo.MusicAlbumVo;
 import com.yonge.cooleshow.biz.dal.vo.MusicSheetVo;
@@ -96,6 +88,22 @@ public class MusicAlbumServiceImpl extends ServiceImpl<MusicAlbumDao,MusicAlbum>
     @Autowired
     private MusicSheetPurchaseRecordService musicSheetPurchaseRecordService;
 
+    @Autowired
+    private TeacherService teacherService;
+
+    @Autowired
+    private TenantAlbumMusicService tenantAlbumMusicService;
+
+    @Autowired
+    private TenantAlbumService tenantAlbumService;
+
+    @Autowired
+    private TenantStaffService tenantStaffService;
+
+
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+
     public MusicAlbumDao getDao() {
         return musicAlbumDao;
     }
@@ -457,6 +465,125 @@ public class MusicAlbumServiceImpl extends ServiceImpl<MusicAlbumDao,MusicAlbum>
 
     }
 
+    @Override
+    public TenantAlbumWrapper.TenantAlbum detailAlbum(String albumId) {
+        Long tenantAlbumId;
+        if (StringUtils.isEmpty(albumId)){
+            //如果没传专辑id  则查询对应机构的专辑详情
+            SysUser sysUser = sysUserFeignService.queryUserInfo();
+            Long id = sysUser.getId();
+            List<Teacher> list = teacherService.lambdaQuery().eq(Teacher::getUserId, id).list();
+            if (CollectionUtils.isEmpty(list)) {
+                throw new BizException("老师账号未找到");
+            }
+            Teacher teacher = list.get(0);
+            //获取机构Id
+            Long tenantId = teacher.getTenantId();
+            //查询对应专辑id
+            List<TenantAlbumMusic> tenantAlbumMusicList = tenantAlbumMusicService.lambdaQuery().eq(TenantAlbumMusic::getTenantId, tenantId)
+                    .eq(TenantAlbumMusic::getDelFlag,false).list();
+            if (CollectionUtils.isEmpty(tenantAlbumMusicList)) {
+                return null;
+            }
+            TenantAlbumMusic tenantAlbumMusic = tenantAlbumMusicList.get(0);
+            tenantAlbumId = tenantAlbumMusic.getTenantAlbumId();
+        } else {
+            //如果传专辑id   则查询这个专辑的详情
+            tenantAlbumId = Long.parseLong(albumId);
+        }
+
+        TenantAlbumWrapper.TenantAlbum album = new TenantAlbumWrapper.TenantAlbum();
+
+        //查询对应专辑的详情
+        List<TenantAlbum> list = tenantAlbumService.lambdaQuery().eq(TenantAlbum::getStatus, true).eq(TenantAlbum::getId, tenantAlbumId).list();
+        if (CollectionUtils.isEmpty(list)){
+            throw new BizException("机构专辑不存在");
+        }
+        TenantAlbum tenantAlbum = list.get(0);
+        //机构专辑名称
+        String name = tenantAlbum.getName();
+        //机构专辑封面
+        String coverImg = tenantAlbum.getCoverImg();
+        //机构专辑曲目数
+        List<TenantAlbumMusic> tenantAlbumMusiclist = tenantAlbumMusicService.lambdaQuery().eq(TenantAlbumMusic::getTenantAlbumId, tenantAlbumId).list();
+        List<Long> MusicSheetIds = tenantAlbumMusiclist.stream().map(TenantAlbumMusic::getMusicSheetId).collect(Collectors.toList());
+        int size = MusicSheetIds.size();
+
+        //Integer musicNum = tenantAlbum.getMusicNum();
+        //机构专辑简介
+        String describe = tenantAlbum.getDescribe();
+        //声部
+        String subjectTypes = tenantAlbum.getSubjectTypes();
+
+        album.setName(name);
+        album.setCoverImg(coverImg);
+        album.setMusicNum(size);
+        album.setDescribe(describe);
+        album.setSubjectTypes(subjectTypes);
+        return album;
+    }
+
+    @Override
+    public TenantAlbumWrapper.TenantAlbum tenantDetailAlbum(String albumId) {
+        Long tenantAlbumId;
+        if (StringUtils.isEmpty(albumId)){
+            //如果没传专辑id  则查询对应机构的专辑详情
+            SysUser sysUser = sysUserFeignService.queryUserInfo();
+            Long id = sysUser.getId();
+            //List<Teacher> list = teacherService.lambdaQuery().eq(Teacher::getUserId, id).list();
+            //查询对应机构Id
+            List<TenantStaff> list = tenantStaffService.lambdaQuery().eq(TenantStaff::getUserId,id).list();
+            if (CollectionUtils.isEmpty(list)) {
+                throw new BizException("未绑定机构");
+            }
+            TenantStaff tenantStaff = list.get(0);
+            //获取机构Id
+            Long tenantId = tenantStaff.getTenantId();
+            //查询对应专辑id
+            List<TenantAlbumMusic> tenantAlbumMusicList = tenantAlbumMusicService.lambdaQuery().eq(TenantAlbumMusic::getTenantId, tenantId)
+                    .eq(TenantAlbumMusic::getDelFlag,false).list();
+            if (CollectionUtils.isEmpty(tenantAlbumMusicList)) {
+                return null;
+            }
+            TenantAlbumMusic tenantAlbumMusic = tenantAlbumMusicList.get(0);
+            tenantAlbumId = tenantAlbumMusic.getTenantAlbumId();
+        } else {
+            //如果传专辑id   则查询这个专辑的详情
+            tenantAlbumId = Long.parseLong(albumId);
+        }
+
+
+        TenantAlbumWrapper.TenantAlbum album = new TenantAlbumWrapper.TenantAlbum();
+
+        //查询对应专辑的详情
+        List<TenantAlbum> list = tenantAlbumService.lambdaQuery().eq(TenantAlbum::getStatus, true).eq(TenantAlbum::getId, tenantAlbumId).list();
+        if (CollectionUtils.isEmpty(list)){
+            throw new BizException("机构专辑不存在");
+        }
+        TenantAlbum tenantAlbum = list.get(0);
+        //机构专辑名称
+        String name = tenantAlbum.getName();
+        //机构专辑封面
+        String coverImg = tenantAlbum.getCoverImg();
+        //机构专辑曲目数
+        List<TenantAlbumMusic> tenantAlbumMusiclist = tenantAlbumMusicService.lambdaQuery().eq(TenantAlbumMusic::getTenantAlbumId, tenantAlbumId).list();
+        List<Long> MusicSheetIds = tenantAlbumMusiclist.stream().map(TenantAlbumMusic::getMusicSheetId).collect(Collectors.toList());
+        int size = MusicSheetIds.size();
+
+        //Integer musicNum = tenantAlbum.getMusicNum();
+        //机构专辑简介
+        String describe = tenantAlbum.getDescribe();
+        //声部
+        String subjectTypes = tenantAlbum.getSubjectTypes();
+
+        album.setName(name);
+        album.setCoverImg(coverImg);
+        album.setMusicNum(size);
+        album.setDescribe(describe);
+        album.setSubjectTypes(subjectTypes);
+        return album;
+    }
+
     private boolean checkNameRepeat(String albumName, Long id) {
         LambdaQueryChainWrapper<MusicAlbum> eq = this.lambdaQuery()
                                                      .eq(MusicAlbum::getDelFlag,0)

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

@@ -616,7 +616,7 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
                 List<Long> musicIdList = records.stream().map(MusicSheetVo::getId).collect(Collectors.toList());
                 List<MusicFavorite> musicFavoriteList = musicFavoriteService.lambdaQuery()
                                                                 .eq(MusicFavorite::getUserId, query.getStudentId())
-                                                                .eq(MusicFavorite::getClientType, query.getClientType())
+                                                                .eq(MusicFavorite::getClientType, clientType)
                                                                 .in(MusicFavorite::getMusicSheetId, musicIdList)
                                                                 .list();
                 if (CollectionUtils.isNotEmpty(musicFavoriteList)) {

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

@@ -230,6 +230,7 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
 
         // 先计算分账金额,写入流水,最后执行分账,在写入分账数据
 
+
         // 分账
         Map<Long, BigDecimal> tenantdivMap = new HashMap<>();
         // 分润
@@ -245,12 +246,11 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
             TenantAlbumWrapper.TenantAlbumContent tenantAlbumContent = JSON
                     .parseObject(userPaymentOrder.getBizContent(), TenantAlbumWrapper.TenantAlbumContent.class);
 
-            tenantdivMap.merge(-1L, tenantAlbumContent.getOriginalPrice(), BigDecimal::add);
-
+            tenantdivMap.put(-1L, tenantAlbumContent.getOriginalPrice());
 
             BigDecimal tenantAmount = tenantAlbumContent.getSalePrice().subtract(tenantAlbumContent.getOriginalPrice());
 
-            tenantdivMap.merge(userPaymentOrder.getTenantId(), tenantAmount, BigDecimal::add);
+            tenantdivMap.merge(tenantAlbumContent.getTenantId(), tenantAmount, BigDecimal::add);
             tenantdivMap.merge(-1L, tenantAmount, BigDecimal::subtract);
 
         }
@@ -910,7 +910,7 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
     private void platformDivRecord(UserOrderDetailVo userPaymentOrder, Map<Long, BigDecimal> tenantdivMap) {
         // 写入平台收支表
         PlatformCashAccountRecord platformCashAccountRecord = new PlatformCashAccountRecord(userPaymentOrder.getUserId(), tenantdivMap.get(-1L),
-                InOrOutEnum.IN, PostStatusEnum.RECORDED, AccountBizTypeEnum.TENANT_ALBUM, userPaymentOrder.getBizId(),
+                InOrOutEnum.IN, PostStatusEnum.RECORDED, AccountBizTypeEnum.valueOf(userPaymentOrder.getOrderType().name()), userPaymentOrder.getBizId(),
                 userPaymentOrder.getOrderNo(), new Date());
         platformCashAccountRecordService.save(platformCashAccountRecord);
     }
@@ -922,6 +922,9 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
             if (tenantId.equals(-1L)) {
                 return;
             }
+            if (amount.compareTo(BigDecimal.ZERO) <=0) {
+                return;
+            }
 
             AccountBizTypeEnum bizTypeEnum = AccountBizTypeEnum.valueOf(userPaymentOrder.getGoodType().getCode());
 

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

@@ -151,7 +151,7 @@ public class RedisCacheServiceImpl implements RedisCacheService {
         RBucket<Object> bucket = redissonClient.getBucket(cacheKey);
 
         // 缓存数据
-        bucket.set(config, 120L, TimeUnit.MINUTES);
+        bucket.set(config, 240L, TimeUnit.MINUTES);
     }
 
     /**

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

@@ -592,7 +592,7 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, Student> impleme
             sysUser.setBirthdate(studentInfo.getBirthdate());
             sysUser.setUsername(studentInfo.getName());
 
-            String newPassword = MessageFormat.format("klxjg{0}", studentInfo.getPhone().substring(7));
+            String newPassword = MessageFormat.format("klx{0}", studentInfo.getPhone().substring(7));
             String password = new BCryptPasswordEncoder().encode(newPassword);
             sysUser.setPassword(password);
             sysUserMapper.insert(sysUser);

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

@@ -340,7 +340,9 @@ public class SysMusicCompareRecordServiceImpl extends BaseServiceImpl<Long, SysM
 		pageInfo.setRows(dataList);
 		Map<String, Object> result = new HashMap<>();
 		userTrainOverView.setTrainTime(userTrainOverView.getTrainTime()/60);
-		userTrainOverView.setAvgTrainTime(userTrainOverView.getTrainTime() / userTrainOverView.getTrainDays());
+		if(userTrainOverView.getTrainTime() > 0 && userTrainOverView.getTrainDays() > 0){
+			userTrainOverView.setAvgTrainTime(userTrainOverView.getTrainTime() / userTrainOverView.getTrainDays());
+		}
 		result.put("userTrainOverView",userTrainOverView);
 
 		List<IndexBaseDto> userTrainChartResult = new ArrayList<>();

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

@@ -1,6 +1,31 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
 import com.alibaba.fastjson.JSON;
+import com.google.common.collect.Lists;
+import com.yonge.cooleshow.biz.dal.entity.*;
+import com.yonge.cooleshow.biz.dal.enums.ImGroupType;
+import com.yonge.cooleshow.biz.dal.mapper.TenantAlbumMapper;
+import com.yonge.cooleshow.biz.dal.mapper.TenantAlbumRefMapper;
+import com.yonge.cooleshow.biz.dal.mapper.TenantUnbindHistoryMapper;
+import com.yonge.cooleshow.biz.dal.mapper.TenantUnbindRecordMapper;
+import com.yonge.cooleshow.biz.dal.queryInfo.TeacherQueryInfo;
+import com.yonge.cooleshow.biz.dal.service.*;
+import com.yonge.cooleshow.biz.dal.vo.MusicSheetUploadCountVo;
+import com.yonge.cooleshow.biz.dal.wrapper.StatGroupWrapper;
+import com.yonge.cooleshow.biz.dal.wrapper.teacher.TeacherWrapper;
+import com.yonge.cooleshow.common.enums.ESettlementFrom;
+import com.yonge.cooleshow.common.enums.ETenantUnBindAuditStatus;
+import org.apache.commons.lang3.StringUtils;
+import org.redisson.api.RMap;
+import org.redisson.api.RedissonClient;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -164,6 +189,12 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
     @Autowired
     private TenantUnbindHistoryMapper tenantUnbindHistoryMapper;
 
+    @Autowired
+    private TenantAlbumMapper tenantAlbumMapper;
+
+    @Autowired
+    private TenantAlbumRefMapper tenantAlbumRefMapper;
+
 
     @Autowired
     private ImGroupCoreService imGroupCoreService;
@@ -316,6 +347,25 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
         teacherHomeVo.setMusicAlbumNum(null == total.getMusicAlbumNum() ? 0 : total.getMusicAlbumNum());
         teacherHomeVo.setMusicSheetNum(null == total.getMusicSheetNum() ? 0 : total.getMusicSheetNum());
 
+        // 老师所属机构信息
+        teacherHomeVo.setTenantAlbumStatus(0);
+        TenantInfo tenantInfo = tenantInfoService.detail(teacher.getTenantId());
+        if (tenantInfo != null) {
+            teacherHomeVo.setTenantName(tenantInfo.getName());
+            List<Long> tenantAlbumIds = tenantAlbumRefMapper.selectList(Wrappers.<TenantAlbumRef>lambdaQuery()
+                            .eq(TenantAlbumRef::getTenantId, tenantInfo.getId())).stream()
+                    .map(TenantAlbumRef::getTenantAlbumId).collect(Collectors.toList());
+            if (!tenantAlbumIds.isEmpty()) {
+                List<TenantAlbum> tenantAlbums = tenantAlbumMapper.selectList(Wrappers.<TenantAlbum>lambdaQuery()
+                        .in(TenantAlbum::getId, tenantAlbumIds)
+                        .eq(TenantAlbum::getDelFlag, false).eq(TenantAlbum::getStatus, true));
+                if (!tenantAlbums.isEmpty()) {
+                    teacherHomeVo.setTenantAlbumStatus(2);
+                    teacherHomeVo.setTenantAlbumFlag(YesOrNoEnum.YES);
+                }
+            }
+        }
+
         // 老师学生人数统计
         List<Long> teacherIds = Lists.newArrayList(userId);
         Map<Long, Integer> studentNumsMap = getBaseMapper().selectTeacherStudentNumberStatInfo(teacherIds).stream()
@@ -383,6 +433,11 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
             sysUser = insertSysUser(teacherSubmitReq);
             teacherSubmitReq.setUserId(sysUser.getId());
         } else {
+            String userType = sysUser.getUserType();
+            List<String> userTypes = Arrays.stream(userType.split(",")).collect(Collectors.toList());
+            if (userTypes.contains(ClientEnum.TEACHER.getCode())) {
+                throw new BizException("该手机号已经注册老师账号");
+            }
             teacherSubmitReq.setUserId(sysUser.getId());
             updateSysUser(teacherSubmitReq);
         }
@@ -450,6 +505,13 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
                 userAccountService.save(userAccount);
             }
         } else {
+            if (!teacher.getTenantId().equals(teacherSubmitReq.getTenantId())) {
+                TeacherWrapper.UpdateTenant updateTenant = new TeacherWrapper.UpdateTenant();
+                updateTenant.setTeacherId(teacher.getUserId());
+                updateTenant.setTenantId(teacherSubmitReq.getTenantId());
+                updateTenant(updateTenant);
+            }
+
             teacher.setUpdateTime(new Date());
             teacher = getTeacherDetil(teacher, teacherSubmitReq);
             if (null == teacher.getEntryAuthDate() || null == teacher.getMusicianDate()) {
@@ -460,27 +522,6 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
                 );
             }
 
-            // 机构解绑
-            if (teacher.getTenantId() != -1L && Boolean.FALSE.equals(teacherSubmitReq.getBindTenant())) {
-                // 老师建立的班级群解散,并解除好友关系
-                List<ImGroupMember> groupMembers = imGroupMemberService.lambdaQuery()
-                        .eq(ImGroupMember::getIsAdmin, true)
-                        .eq(ImGroupMember::getUserId, teacher.getUserId()).list();
-                if (!groupMembers.isEmpty()) {
-                    List<String> groupIdList = groupMembers.stream().map(ImGroupMember::getGroupId).distinct()
-                            .collect(Collectors.toList());
-                    groupIdList.forEach(next -> {
-                        try {
-                            imGroupService.dismiss(next);
-                        } catch (Exception e) {
-                            log.error("解散群聊失败,", e);
-                        }
-                    });
-                    imUserFriendService.delFriendByTenantId(teacher.getTenantId(), teacher.getUserId());
-                }
-                // 机构解绑后,归属为平台老师
-                teacher.setTenantId(-1L);
-            }
             baseMapper.updateById(teacher);
         }
 
@@ -925,6 +966,7 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
         return wrapper;
     }
 
+    @Transactional(rollbackFor = Exception.class)
     @Override
     public void updateTenant(TeacherWrapper.UpdateTenant updateTenant) {
         Teacher teacher = this.getById(updateTenant.getTeacherId());
@@ -944,6 +986,7 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
                     log.error("老师修改机构,解散机构群失败:{}", e.getMessage());
                 }
             });
+            imUserFriendService.delFriendByTenantId(teacher.getTenantId(), teacher.getUserId());
         }
 
         teacher.setTenantId(updateTenant.getTenantId());
@@ -956,6 +999,7 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
         if (first.isPresent()) {
             TenantUnbindRecord tenantUnbindRecord = first.get();
             tenantUnbindRecord.setStatus(ETenantUnBindAuditStatus.CLOSE);
+            tenantUnbindRecord.setReason("机构发生变更,关闭申请");
             tenantUnbindRecordMapper.updateById(tenantUnbindRecord);
 
             TenantUnbindHistory history = JSON.parseObject(JSON.toJSONString(tenantUnbindRecord),

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

@@ -29,6 +29,7 @@ import com.yonge.toolset.utils.easyexcel.ExcelDataReaderProperty;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
+import org.joda.time.DateTime;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -184,11 +185,66 @@ public class TenantActivationCodeServiceImpl extends ServiceImpl<TenantActivatio
         if (code == null) {
             throw new BizException("激活码不存在");
         }
-        if (Boolean.TRUE.equals(code.getActivationStatus()) || EActivationCode.SEND.equals(code.getSendStatus())) {
+        SysUser sysUser = sysUserMapper.selectById(studentId);
+        if (Boolean.TRUE.equals(code.getActivationStatus()) || (EActivationCode.SEND.equals(code.getSendStatus()) &&
+                !sysUser.getPhone().equals(code.getActivationPhone()))) {
+            throw new BizException("激活码已经被使用");
+        }
+
+        // 通过状态和ID同时判断更新是否存在竞争
+        boolean update = this.lambdaUpdate()
+                .set(TenantActivationCode::getActivationStatus, true)
+                .set(TenantActivationCode::getActivationUserId, student.getUserId())
+                .set(TenantActivationCode::getActivationTime, new Date())
+                .set(TenantActivationCode::getActivationPhone, sysUser.getPhone())
+                .eq(TenantActivationCode::getId, code.getId())
+                .eq(TenantActivationCode::getActivationStatus, false)
+                .update();
+        if (!update) {
+            throw new BizException("激活码已经被使用");
+        }
+        Long tenantAlbumPurchaseId = code.getTenantAlbumPurchaseId();
+        TenantAlbumPurchase purchase = tenantAlbumPurchaseMapper.selectById(tenantAlbumPurchaseId);
+
+        addUserTenantAlbumRecord(student.getUserId(), purchase, null);
+
+        // 更新购买记录中激活码使用统计数量值
+        Integer activeCodeNumber = this.lambdaQuery()
+                .eq(TenantActivationCode::getTenantId, tenantId)
+                .eq(TenantActivationCode::getTenantAlbumPurchaseId, code.getTenantAlbumPurchaseId())
+                .eq(TenantActivationCode::getActivationStatus, true).count();
+
+        TenantAlbumPurchase tenantAlbumPurchase = new TenantAlbumPurchase();
+        tenantAlbumPurchase.setId(code.getTenantAlbumPurchaseId());
+        tenantAlbumPurchase.setActiveQuantity(activeCodeNumber);
+        tenantAlbumPurchaseMapper.updateById(tenantAlbumPurchase);
+    }
+
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void activeById(String id, Long userId) {
+        Student student = studentDao.selectById(userId);
+        if (student == null) {
+            throw new BizException("学生不存在");
+        }
+        Long tenantId = -1L;
+        if (student.getTenantId() != null) {
+            tenantId = student.getTenantId();
+        }
+        TenantActivationCode code = baseMapper.selectById(id);
+        if(code == null || !code.getTenantId().equals(tenantId)) {
+            throw new BizException("激活码不存在");
+        }
+        SysUser sysUser = sysUserMapper.selectById(student.getUserId());
+        if(!sysUser.getPhone().equals(code.getActivationPhone())) {
+            // 该激活码未指定为当前学生使用
+            throw new BizException("激活码不存在");
+        }
+        if (Boolean.TRUE.equals(code.getActivationStatus())) {
             throw new BizException("激活码已经被使用");
         }
 
-        SysUser sysUser = sysUserMapper.selectById(studentId);
         // 通过状态和ID同时判断更新是否存在竞争
         boolean update = this.lambdaUpdate()
                 .set(TenantActivationCode::getActivationStatus, true)
@@ -216,6 +272,7 @@ public class TenantActivationCodeServiceImpl extends ServiceImpl<TenantActivatio
         tenantAlbumPurchase.setId(code.getTenantAlbumPurchaseId());
         tenantAlbumPurchase.setActiveQuantity(activeCodeNumber);
         tenantAlbumPurchaseMapper.updateById(tenantAlbumPurchase);
+
     }
 
 
@@ -364,20 +421,25 @@ public class TenantActivationCodeServiceImpl extends ServiceImpl<TenantActivatio
 
         Calendar instance = Calendar.getInstance();
         if (userTenantAlbumRecords.isEmpty()) {
-            instance.setTime(new Date());
+            instance.setTime(DateTime.now().withHourOfDay(0).withMinuteOfHour(0).withSecondOfMinute(0).toDate());
         } else {
             // 如果最后一次的时间的小于当前时间,则以当前时间为会员的开始时间
             // 如果最后一次的时间的大于当前时间,则以最后一次的结束时间为记录的开始时间,相当会员续期
             UserTenantAlbumRecord lastRecord = userTenantAlbumRecords.get(0);
             Date lastEndTime = lastRecord.getEndTime();
             if (lastEndTime.before(new Date())) {
-                instance.setTime(new Date());
+                instance.setTime(DateTime.now().withHourOfDay(0).withMinuteOfHour(0).withSecondOfMinute(0).toDate());
             } else {
                 instance.setTime(lastEndTime);
             }
         }
         userTenantAlbumRecord.setStartTime(instance.getTime());
         instance.add(Calendar.MONTH, userTenantAlbumRecord.getTimes());
+
+        instance.set(Calendar.HOUR_OF_DAY, 23);
+        instance.set(Calendar.MINUTE, 59);
+        instance.set(Calendar.SECOND, 59);
+        instance.set(Calendar.MILLISECOND, 0);
         userTenantAlbumRecord.setEndTime(instance.getTime());
         userTenantAlbumRecordMapper.insert(userTenantAlbumRecord);
     }

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

@@ -16,6 +16,7 @@ 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.toolset.base.exception.BizException;
+import com.yonge.toolset.base.util.StringUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -25,6 +26,7 @@ import org.springframework.transaction.annotation.Transactional;
 import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Date;
 import java.util.List;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.stream.Collectors;
@@ -275,8 +277,9 @@ public class TenantAlbumServiceImpl extends ServiceImpl<TenantAlbumMapper, Tenan
                     tenantActivationCode.setTenantId(tenantAlbumContent.getTenantId());
                     tenantActivationCode.setTenantAlbumId(tenantAlbumContent.getTenantAlbumId());
                     tenantActivationCode.setTenantAlbumPurchaseId(tenantAlbumPurchase.getId());
-//                    tenantActivationCode.setActivationCode(StringUtil.DeciamlToThirtySix(IdWorker.get32UUID()));
-                    tenantActivationCode.setActivationCode(IdWorker.get32UUID());
+                    long l = Long.parseLong(new Date().getTime() + i + String.valueOf(tenantAlbumPurchase.getId()));
+                    tenantActivationCode.setActivationCode(StringUtil.DeciamlToThirtySix(l,7));
+//                    tenantActivationCode.setActivationCode(IdWorker.get32UUID());
                     tenantActivationCode.setSendStatus(EActivationCode.WAIT);
                     tenantActivationCodes.add(tenantActivationCode);
                 }

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

@@ -28,6 +28,7 @@ import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.common.enums.SysUserType;
 import com.yonge.cooleshow.common.enums.UserLockFlag;
 import com.yonge.toolset.base.exception.BizException;
+import com.yonge.toolset.utils.obj.ObjectUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -356,8 +357,14 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoMapper, TenantI
             tenantStaffMapper.update(null, Wrappers.<TenantStaff>lambdaUpdate()
                     .set(TenantStaff::getStatus, UserLockFlag.LOCKED)
                     .eq(TenantStaff::getTenantId, updateStatus.getId()));
+        } else {
+            tenantStaffMapper.update(null, Wrappers.<TenantStaff>lambdaUpdate()
+                    .set(TenantStaff::getStatus, UserLockFlag.NORMAL)
+                    .eq(TenantStaff::getTenantId, updateStatus.getId()));
         }
 
+
+
         if (updateStatus.getSettlement() != null) {
             teacherDao.update(null, Wrappers.<Teacher>lambdaUpdate()
                     .set(Teacher::getSettlementFrom, updateStatus.getSettlement())
@@ -380,16 +387,25 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoMapper, TenantI
         TenantInfo oldTenantInfo = this.getById(info.getId());
         SysUser sysUser = getAccount(info, oldTenantInfo);
 
-        tenantStaffMapper.update(null, Wrappers.<TenantStaff>lambdaUpdate()
+        if (sysUser.getId() != null){
+            tenantStaffMapper.update(null, Wrappers.<TenantStaff>lambdaUpdate()
                 .set(TenantStaff::getUserId, sysUser.getId())
                 .set(TenantStaff::getNickname, info.getUsername())
                 .eq(TenantStaff::getUserId, oldTenantInfo.getUserId())
-        );
+        );}
+
 
         if (StringUtils.isEmpty(info.getLogo())) {
             // todo 设置默认logo
             info.setLogo(sysConfigService.findConfigValue(SysConfigConstant.TENANT_DEFAULT_HEAD));
         }
+
+        Long id;
+        if(sysUser.getId() == null){
+            id = info.getUserId();
+        } else {
+            id = sysUser.getId();
+        }
         tenantInfoMapper.update(null, Wrappers.<TenantInfo>lambdaUpdate()
                 .set(TenantInfo::getName, info.getName())
                 .set(TenantInfo::getLogo, info.getLogo())
@@ -399,7 +415,7 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoMapper, TenantI
                 .set(TenantInfo::getRegionCode, info.getRegionCode())
                 .set(TenantInfo::getPhone, info.getPhone())
                 .set(TenantInfo::getUsername, info.getUsername())
-                .set(TenantInfo::getUserId, sysUser.getId())
+                .set(TenantInfo::getUserId, id)
                 .eq(TenantInfo::getId, info.getId())
         );
         return true;

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

@@ -82,6 +82,9 @@ public class TenantUnbindRecordServiceImpl extends ServiceImpl<TenantUnbindRecor
     @Autowired
     private UnbindAuthUserService unbindAuthUserService;
 
+    @Autowired
+    private ImUserFriendService imUserFriendService;
+
     /**
      * @param id 详情ID
      * @return TenantUnbindRecord
@@ -218,31 +221,37 @@ public class TenantUnbindRecordServiceImpl extends ServiceImpl<TenantUnbindRecor
                 .eq(TenantUnbindRecord::getStatus, ETenantUnBindAuditStatus.DOING)
                 .update();
         if (Boolean.TRUE.equals(audio.getStatus())) {
+            Teacher teacher = teacherDao.selectById(unbindRecord.getUserId());
+            Long tenantId = teacher.getTenantId();
+            if (tenantId != -1L) {
+                // 解散机构群
+                List<ImGroup> imGroups = imGroupService.lambdaQuery()
+                        .eq(ImGroup::getCreateBy, unbindRecord.getUserId())
+                        .eq(ImGroup::getType, ImGroupType.ORG)
+                        .list();
+                for (ImGroup imGroup : imGroups) {
+                    try {
+                        imGroupService.dismiss(imGroup.getId());
+                    } catch (Exception e) {
+                        log.error("老师解绑审核成功,解散机构群失败:{}", e.getMessage());
+                    }
+                }
+                imUserFriendService.delFriendByTenantId(unbindRecord.getUserId(), unbindRecord.getUserId());
+            }
             teacherDao.update(null, Wrappers.<Teacher>lambdaUpdate()
-                    .eq(Teacher::getUserId, audio.getId())
+                    .eq(Teacher::getUserId, unbindRecord.getUserId())
                     .set(Teacher::getSettlementFrom, ESettlementFrom.TEACHER)
                     .set(Teacher::getTenantId, -1L));
-            // 解散机构群
-            List<ImGroup> imGroups = imGroupService.lambdaQuery()
-                    .eq(ImGroup::getCreateBy, unbindRecord.getUserId())
-                    .eq(ImGroup::getType, ImGroupType.ORG)
-                    .list();
-            for (ImGroup imGroup : imGroups) {
-                try {
-                    imGroupService.dismiss(imGroup.getId());
-                } catch (Exception e) {
-                    log.error("老师解绑审核成功,解散机构群失败:{}", e.getMessage());
-                }
-            }
         }
 
         // 添加历史记录
-        TenantUnbindHistory history = JSON.parseObject(JSON.toJSONString(unbindRecord), TenantUnbindHistory.class);
+        TenantUnbindRecord newRecord = tenantUnbindRecordService.getById(audio.getId());
+        TenantUnbindHistory history = JSON.parseObject(JSON.toJSONString(newRecord), TenantUnbindHistory.class);
         history.setId(null);
         tenantUnbindHistoryService.save(history);
 
         // 老师端发送消息
-        CompletableFuture.runAsync(() -> sendTeacherUnBindMessage(audio, unbindRecord));
+        CompletableFuture.runAsync(() -> sendTeacherUnBindMessage(audio, newRecord));
     }
 
     @Transactional(rollbackFor = Exception.class)

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

@@ -20,6 +20,7 @@ import com.yonge.cooleshow.biz.dal.vo.UserOrderVo;
 import com.yonge.cooleshow.biz.dal.vo.res.OrderCreateRes;
 import com.yonge.cooleshow.biz.dal.vo.res.OrderPayRes;
 import com.yonge.cooleshow.biz.dal.wrapper.PaymentDivMemberRecordWrapper;
+import com.yonge.cooleshow.biz.dal.wrapper.UserPaymentOrderWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.coupon.CouponOrderWrapper;
 import com.yonge.cooleshow.common.constant.SysConfigConstant;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
@@ -113,6 +114,8 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
     private ActivityPlanService activityPlanService;
 
     @Autowired
+    private RedisCacheService redisCacheService;
+    @Autowired
     private ActivityUserRewardService activityUserRewardService;
     @Autowired
     private CouponInfoService couponInfoService;
@@ -322,7 +325,31 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
 
     @Override
     public IPage<UserOrderVo> selectPage(IPage<UserOrderVo> page, OrderSearch query) {
-        return page.setRecords(baseMapper.selectPage(page, query));
+        IPage<UserOrderVo> userOrderVoIPage = page.setRecords(baseMapper.selectPage(page, query));
+        List<UserOrderVo> records = userOrderVoIPage.getRecords();
+        if (CollectionUtils.isEmpty(records)) {
+            return userOrderVoIPage;
+        }
+        // 查询支付配置缓存
+        for (UserOrderVo record : records) {
+            if (record.getPaymentVersion().equals(EPaymentVersion.V2)) {
+                // 查询用户下单配置
+                String ret = redisCacheService.getUserOrderConfig(record.getUserId().toString(), record.getOrderType().name());
+                if (!StringUtils.isEmpty(ret) ) {
+                    UserPaymentOrderWrapper.PaymentOrderReqConfig config = UserPaymentOrderWrapper.PaymentOrderReqConfig
+                            .from(ret);
+                    UserPaymentOrderWrapper.PaymentConfig build = UserPaymentOrderWrapper.PaymentConfig.builder()
+                            .orderNo(record.getOrderNo())
+                            .paymentConfig(config)
+                            .paymentType(record.getPaymentVendor())
+                            .build();
+                    record.setPaymentConfig(build);
+                }
+            }
+        }
+
+
+        return userOrderVoIPage;
     }
 
     @Override
@@ -476,6 +503,19 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
         if (null != userOrderVo) {
             userOrderVo.setOrderDetailList(orderDetailService.getOrderDetilListByOrderNo(userOrderVo.getOrderNo()));
         }
+
+        // 查询用户下单配置
+        String ret = redisCacheService.getUserOrderConfig(query.getUserId().toString(), query.getGoodType());
+        if (!StringUtils.isEmpty(ret) && userOrderVo != null) {
+            UserPaymentOrderWrapper.PaymentOrderReqConfig config = UserPaymentOrderWrapper.PaymentOrderReqConfig
+                    .from(ret);
+            UserPaymentOrderWrapper.PaymentConfig build = UserPaymentOrderWrapper.PaymentConfig.builder()
+                    .orderNo(userOrderVo.getOrderNo())
+                    .paymentConfig(config)
+                    .paymentType(userOrderVo.getPaymentVendor())
+                    .build();
+            userOrderVo.setPaymentConfig(build);
+        }
         return HttpResponseResult.succeed(userOrderVo);
     }
 

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

@@ -13,8 +13,11 @@ import com.yonge.cooleshow.biz.dal.service.*;
 import com.yonge.cooleshow.biz.dal.vo.MusicSheetVo;
 import com.yonge.cooleshow.biz.dal.wrapper.TenantAlbumWrapper;
 import com.yonge.toolset.base.exception.BizException;
+import com.yonge.toolset.base.util.StringUtil;
 import com.yonge.toolset.mybatis.support.PageUtil;
 import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.checkerframework.checker.units.qual.A;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.beans.BeanUtils;
@@ -22,6 +25,7 @@ import lombok.extern.slf4j.Slf4j;
 import com.yonge.cooleshow.biz.dal.wrapper.UserTenantAlbumRecordWrapper;
 import com.yonge.cooleshow.biz.dal.mapper.UserTenantAlbumRecordMapper;
 
+import java.math.BigDecimal;
 import java.util.*;
 import java.util.function.Function;
 import java.util.stream.Collectors;
@@ -49,6 +53,15 @@ public class UserTenantAlbumRecordServiceImpl extends ServiceImpl<UserTenantAlbu
     @Autowired
     private MusicSheetService musicSheetService;
 
+    @Autowired
+    private  StudentService studentService;
+
+    @Autowired
+    private TenantAlbumService tenantAlbumService;
+
+    @Autowired
+    private UserTenantAlbumRecordMapper userTenantAlbumRecordMapper;
+
 	/**
      * 查询详情
      * @param id 详情ID
@@ -78,7 +91,7 @@ public class UserTenantAlbumRecordServiceImpl extends ServiceImpl<UserTenantAlbu
         if (id != null){
             List<Long> tenantAlbumIds = baseMapper.selectTenantIds(id);
             if (CollectionUtils.isEmpty(tenantAlbumIds)){
-                throw new BizException("当前登录用户未找到对应机构专辑Id");
+                return null;
             }
             List<TenantAlbum> tenantAlbums = baseMapper.selectTenantAlbumInfo(tenantAlbumIds);
 
@@ -203,4 +216,86 @@ public class UserTenantAlbumRecordServiceImpl extends ServiceImpl<UserTenantAlbu
         return list.stream().map(UserTenantAlbumRecord::getTenantAlbumId).distinct().collect(Collectors.toList());
 
     }
+
+    @Override
+    public TenantAlbumWrapper.TenantAlbum detailAlbum(String albumId) {
+
+        //如果没传专辑id  则查询对应机构的专辑详情
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            throw new BizException("用户不存在");
+        }
+        Long tenantAlbumId;
+        if (StringUtils.isEmpty(albumId)){
+            Long id = sysUser.getId();
+            List<Student> list = studentService.lambdaQuery().eq(Student::getUserId, id).list();
+            if (CollectionUtils.isEmpty(list)) {
+                throw new BizException("学生账号未找到");
+            }
+            Student student = list.get(0);
+            //获取机构Id
+            Long tenantId = student.getTenantId();
+            //查询对应专辑id
+            List<TenantAlbumMusic> tenantAlbumMusicList = tenantAlbumMusicService.lambdaQuery().eq(TenantAlbumMusic::getTenantId, tenantId)
+                    .eq(TenantAlbumMusic::getDelFlag,false).list();
+            if (CollectionUtils.isEmpty(tenantAlbumMusicList)) {
+                return null;
+            }
+            TenantAlbumMusic tenantAlbumMusic = tenantAlbumMusicList.get(0);
+             tenantAlbumId = tenantAlbumMusic.getTenantAlbumId();
+        } else {
+            //如果传专辑id   则查询这个专辑的详情
+            tenantAlbumId = Long.parseLong(albumId);
+        }
+
+        TenantAlbumWrapper.TenantAlbum album = new TenantAlbumWrapper.TenantAlbum();
+
+        //查询是否已经购买专辑
+        Long buyTenantAlbumId = userTenantAlbumRecordMapper.ifBuy(tenantAlbumId,sysUser.getId());
+
+        if (buyTenantAlbumId != null){
+            album.setIfBuy(true);
+        } else {
+            album.setIfBuy(false);
+        }
+
+
+        //查询对应专辑的详情
+        List<TenantAlbum> list = tenantAlbumService.lambdaQuery().eq(TenantAlbum::getStatus, true).eq(TenantAlbum::getId, tenantAlbumId).list();
+        if (CollectionUtils.isEmpty(list)){
+            throw new BizException("机构专辑不存在");
+        }
+        TenantAlbum tenantAlbum = list.get(0);
+        //机构专辑名称
+        String name = tenantAlbum.getName();
+        //机构专辑封面
+        String coverImg = tenantAlbum.getCoverImg();
+        //机构专辑曲目数
+        List<TenantAlbumMusic> tenantAlbumMusiclist = tenantAlbumMusicService.lambdaQuery().eq(TenantAlbumMusic::getTenantAlbumId, tenantAlbumId).list();
+        List<Long> MusicSheetIds = tenantAlbumMusiclist.stream().map(TenantAlbumMusic::getMusicSheetId).collect(Collectors.toList());
+        int size = MusicSheetIds.size();
+
+        //Integer musicNum = tenantAlbum.getMusicNum();
+        //机构专辑简介
+        String describe = tenantAlbum.getDescribe();
+        //声部
+        String subjectTypes = tenantAlbum.getSubjectTypes();
+        //原价
+        BigDecimal costPrice = tenantAlbum.getCostPrice();
+        //售价
+        BigDecimal salePrice = tenantAlbum.getSalePrice();
+        //周期
+        Integer purchaseCycle = tenantAlbum.getPurchaseCycle();
+
+        album.setId(String.valueOf(tenantAlbum.getId()));
+        album.setName(name);
+        album.setCoverImg(coverImg);
+        album.setMusicNum(size);
+        album.setDescribe(describe);
+        album.setSubjectTypes(subjectTypes);
+        album.setCostPrice(costPrice);
+        album.setPurchaseCycle(purchaseCycle);
+        album.setSalePrice(salePrice);
+        return album;
+    }
 }

+ 21 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/TeacherHomeVo.java

@@ -84,6 +84,11 @@ public class TeacherHomeVo extends Teacher implements Serializable {
     @ApiModelProperty(value = "默认查询声部名称 ")
     private String defaultSubjectName;
 
+    @ApiModelProperty(value = "学练工具是否有效 0否 1是")
+    private YesOrNoEnum tenantAlbumFlag;
+
+    @ApiModelProperty(value = "0:没有专辑 1:有,但是未解锁,2:有,且已解锁")
+    private Integer tenantAlbumStatus;
     @ApiModelProperty(value = "IM用户ID")
     private String imUserId;
 
@@ -98,7 +103,6 @@ public class TeacherHomeVo extends Teacher implements Serializable {
         this.tenantName = tenantName;
     }
 
-
     public String getDefaultSubjectName() {
         return defaultSubjectName;
     }
@@ -344,6 +348,22 @@ public class TeacherHomeVo extends Teacher implements Serializable {
         this.imUserId = imUserId;
     }
 
+    public YesOrNoEnum getTenantAlbumFlag() {
+        return tenantAlbumFlag;
+    }
+
+    public void setTenantAlbumFlag(YesOrNoEnum tenantAlbumFlag) {
+        this.tenantAlbumFlag = tenantAlbumFlag;
+    }
+
+    public Integer getTenantAlbumStatus() {
+        return tenantAlbumStatus;
+    }
+
+    public void setTenantAlbumStatus(Integer tenantAlbumStatus) {
+        this.tenantAlbumStatus = tenantAlbumStatus;
+    }
+
     public String getImToken() {
         return imToken;
     }

+ 12 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/UserOrderVo.java

@@ -3,6 +3,7 @@ package com.yonge.cooleshow.biz.dal.vo;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.yonge.cooleshow.biz.dal.entity.UserOrder;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.wrapper.UserPaymentOrderWrapper;
 import com.yonge.toolset.payment.base.enums.OpenEnum;
 import com.yonge.toolset.payment.base.enums.PayChannelEnum;
 import io.swagger.annotations.ApiModel;
@@ -44,6 +45,17 @@ public class UserOrderVo extends UserOrder {
     @ApiModelProperty("机构名称")
     private String tenantName;
 
+    @ApiModelProperty("支付配置")
+    private  UserPaymentOrderWrapper.PaymentConfig paymentConfig;
+
+    public UserPaymentOrderWrapper.PaymentConfig getPaymentConfig() {
+        return paymentConfig;
+    }
+
+    public void setPaymentConfig(UserPaymentOrderWrapper.PaymentConfig paymentConfig) {
+        this.paymentConfig = paymentConfig;
+    }
+
     public String getTenantName() {
         return tenantName;
     }

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

@@ -126,6 +126,9 @@ public class TenantAlbumMusicWrapper {
     @ApiModel(" TenantAlbumMusicQuery-学生端专辑曲目分页查询")
     public static class StudentTenantAlbumMusicQuery implements QueryInfo {
 
+        @ApiModelProperty(value = "详情专辑id")
+        private String albumId;
+
         @ApiModelProperty("当前页")
         private Integer page;
 

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

@@ -121,6 +121,9 @@ public class TenantAlbumWrapper {
         @ApiModelProperty("创建时间")
         private Date createTime;
 
+        @ApiModelProperty("是否已经购买")
+        private Boolean ifBuy;
+
         @ApiModelProperty("曲目相关信息")
         private List<MusicSheetData> musicSheetData = new ArrayList<>();
 

+ 50 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/TenantUnbindHistoryWrapper.java

@@ -1,9 +1,15 @@
 package com.yonge.cooleshow.biz.dal.wrapper;
 
 import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
 import com.microsvc.toolkit.common.response.paging.QueryInfo;
+import com.yonge.cooleshow.common.enums.ETenantUnBindAuditStatus;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+
+import java.util.Date;
 import java.util.Optional;
 
 import lombok.AllArgsConstructor;
@@ -54,9 +60,53 @@ public class TenantUnbindHistoryWrapper {
         }
     }
 
+    @Data
     @ApiModel(" TenantUnbindHistory-机构解绑历史表")
     public static class TenantUnbindHistory {
 
+        @ApiModelProperty("主键ID")
+        private Long id;
+
+        @ApiModelProperty("机构ID")
+        private Long tenantId;
+
+        @ApiModelProperty("机构名称")
+        private String tenantName;
+
+        @ApiModelProperty("用户ID")
+        private Long userId;
+
+        @ApiModelProperty("用户名称")
+        private String userName;
+
+        @ApiModelProperty("手机号")
+        @TableField(value = "phone_")
+        private String phone;
+
+        @ApiModelProperty("用户类型")
+        private String userType;
+
+        @ApiModelProperty("解绑理由")
+        private String unbindReason;
+
+        @ApiModelProperty("审核状态 CANCEL、撤销 PASS、通过 UNPASS、不通过")
+        private ETenantUnBindAuditStatus status;
+
+        @ApiModelProperty("审核人")
+        private Long verifyUserId;
+
+        @ApiModelProperty("审核人姓名")
+        private String verifyUserName;
+
+        @ApiModelProperty("审核理由")
+        private String reason;
+
+        @ApiModelProperty("后台介入时间")
+        private Date interveneTime;
+
+        @ApiModelProperty("创建时间")
+        private Date createTime;
+
         public String jsonString() {
             return JSON.toJSONString(this);
         }

+ 1 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/UserOrderMapper.xml

@@ -30,6 +30,7 @@
          t.id_ as id
         , t.order_no_ as orderNo
          ,t.payment_version_ as paymentVersion
+         ,t.payment_vendor_ as paymentVendor
         , t.user_id_ as userId
         , t.recom_user_id_ as recomUserId
         , t.activity_id_ as activityId

+ 14 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/UserTenantAlbumRecordMapper.xml

@@ -60,5 +60,19 @@
         </where>
 
     </select>
+    <select id="ifBuy" resultType="java.lang.Long">
+        select distinct tenant_album_id_
+        from user_tenant_album_record
+        <where>
+            end_time_ > now()
+            <if test="tenantAlbumId != null">
+                and tenant_album_id_ = #{tenantAlbumId}
+            </if>
+            <if test="studentId != null">
+                and user_id_ = #{studentId}
+            </if>
+        </where>
+
+    </select>
 
 </mapper>

BIN
cooleshow-user/user-student/.DS_Store


+ 20 - 0
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/SysMusicCompareRecordController.java

@@ -76,6 +76,26 @@ public class SysMusicCompareRecordController extends BaseController {
             return failed("时间不能为空");
         }
         queryInfo.setClientId("student");
+        LocalDate localDate = LocalDate.parse(queryInfo.getStartTime() + "-01",
+                DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+        queryInfo.setStartTime(localDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
+        LocalDate endDate = localDate.plusDays(localDate.getMonth().length(localDate.isLeapYear()) -1);
+        queryInfo.setEndTime(endDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
+        return succeed(sysMusicCompareRecordService.studentTrainData(queryInfo));
+    }
+
+    @ApiOperation("学员训练数据统计每周")
+    @GetMapping("studentTrainDataByWeek")
+    public HttpResponseResult studentTrainDataByWeek(SysMusicCompareRecordQueryInfo.TeacherCompareRecordQueryInfo queryInfo){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("获取用户信息失败");
+        }
+        queryInfo.setUserId(sysUser.getId());
+        if (StringUtils.isEmpty(queryInfo.getStartTime())) {
+            return failed("时间不能为空");
+        }
+        queryInfo.setClientId("student");
         return succeed(sysMusicCompareRecordService.studentTrainData(queryInfo));
     }
 

+ 11 - 0
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/TenantActivationCodeController.java

@@ -75,4 +75,15 @@ public class TenantActivationCodeController extends BaseController {
         tenantActivationCodeService.active(activationCode, sysUser.getId());
         return succeed();
     }
+
+    @ApiOperation(value = "激活激活码")
+    @PostMapping("/activeById")
+    public HttpResponseResult<Boolean> activeById(@RequestParam("id") String id) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null || null == sysUser.getId()) {
+            throw new BizException("请登录");
+        }
+        tenantActivationCodeService.activeById(id, sysUser.getId());
+        return succeed();
+    }
 }

+ 15 - 0
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/UserTenantAlbumRecordController.java

@@ -4,6 +4,8 @@ import com.microsvc.toolkit.common.response.paging.QueryInfo;
 import com.microsvc.toolkit.common.response.template.R;
 
 import com.alibaba.fastjson.JSONObject;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.wrapper.TenantAlbumMusicWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.TenantAlbumWrapper;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.base.page.PageInfo;
@@ -12,6 +14,7 @@ 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.http.HttpStatus;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.PathVariable;
@@ -56,6 +59,18 @@ public class UserTenantAlbumRecordController {
         return HttpResponseResult.succeed(PageUtil.pageInfo(pages));
     }
 
+
+    @ApiOperation(value = "查询详情")
+    @PostMapping("/detail")
+    public HttpResponseResult <TenantAlbumWrapper.TenantAlbum> Albumdetail(@RequestParam(defaultValue = "") String albumId) {
+        TenantAlbumWrapper.TenantAlbum tenantAlbum= userTenantAlbumRecordService.detailAlbum(albumId);
+        return HttpResponseResult.succeed(tenantAlbum);
+    }
+
+
+
+
+
     @ApiOperation(value = "新增", notes = "购买训练工具记录- 传入 UserTenantAlbumRecordWrapper.UserTenantAlbumRecord")
     @PreAuthorize("@auditsvc.hasPermissions('userTenantAlbumRecord/save', {'BACKEND'})")
     //@PostMapping("/save")

+ 14 - 0
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/MusicAlbumController.java

@@ -3,6 +3,7 @@ package com.yonge.cooleshow.teacher.controller;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.enums.OrderStatusEnum;
 import com.yonge.cooleshow.biz.dal.enums.album.PurchaseRecordTypeEnum;
+import com.yonge.cooleshow.biz.dal.wrapper.TenantAlbumWrapper;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
@@ -207,4 +208,17 @@ public class MusicAlbumController extends BaseController {
         IPage<MusicAlbumVo> albumVoIPage = musicAlbumService.favoriteAlbum(PageUtil.getPage(query), search, ClientEnum.TEACHER);
         return succeed(PageUtil.pageInfo(albumVoIPage));
     }
+
+    @ApiOperation(value = "查询机构专辑详情")
+    @PostMapping("/albumDetail")
+    public HttpResponseResult <TenantAlbumWrapper.TenantAlbum> albumDetail(@RequestParam(defaultValue = "") String albumId) {
+        TenantAlbumWrapper.TenantAlbum tenantAlbum= musicAlbumService.detailAlbum(albumId);
+        return HttpResponseResult.succeed(tenantAlbum);
+    }
+
+
+
+
+
+
 }

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

@@ -1,17 +1,36 @@
 package com.yonge.cooleshow.teacher.controller;
 
+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.service.StudentService;
 import com.yonge.cooleshow.biz.dal.vo.StudentVo;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.cooleshow.common.enums.UserLockFlag;
+import com.yonge.cooleshow.common.enums.UserStatusEnum;
+import com.yonge.cooleshow.common.enums.YesOrNoEnum;
+import com.yonge.toolset.base.exception.BizException;
+import com.yonge.toolset.base.page.PageInfo;
 import com.yonge.toolset.base.util.StringUtil;
+import com.yonge.toolset.mybatis.support.PageUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.GetMapping;
+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 javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+
 @RestController
 @RequestMapping("/student")
 @Api(value = "学生表", tags = "学生表")
@@ -19,6 +38,9 @@ public class StudentController extends BaseController {
     @Autowired
     private StudentService studentService;
 
+    @Resource
+    private SysUserFeignService sysUserFeignService;
+
 
     @ApiOperation(value = "查询指定学员信息-融云token")
     @GetMapping("/queryUserById")
@@ -41,4 +63,59 @@ public class StudentController extends BaseController {
         return succeed(studentService.detail(userId));
     }
 
+    /**
+     * 查询老师所属机构下所有的学生
+     *
+     * @param query 参数
+     * @return 学生列表
+     */
+    @PostMapping("/page")
+    @ApiOperation(value = "查询分页", notes = "传入StudentSearch")
+    public HttpResponseResult<PageInfo<StudentVo>> page(@RequestBody StudentSearch query) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null || null == sysUser.getId()) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        Long tenantId = sysUser.getTenantId();
+        if (tenantId == null || tenantId.equals(-1L)) {
+            IPage<StudentVo> page = PageUtil.getPage(query);
+            page.setRecords(new ArrayList<>());
+            return succeed(PageUtil.pageInfo(page));
+        }
+
+        query.setTenantId(tenantId);
+        if (StringUtils.isNotBlank(query.getUserStatus())) {
+            switch (query.getUserStatus()) {
+                case "LOCKED":
+                    query.setDelFlag(YesOrNoEnum.NO);
+                    query.setLockFlag(UserLockFlag.LOCKED);
+                    break;
+                case "CLOSED":
+                    query.setDelFlag(YesOrNoEnum.YES);
+                    break;
+
+                default:
+                    query.setDelFlag(YesOrNoEnum.NO);
+                    query.setLockFlag(UserLockFlag.NORMAL);
+                    break;
+            }
+        }
+
+        IPage<StudentVo> pages = studentService.selectPage(PageUtil.getPage(query), query);
+        List<StudentVo> rows = pages.getRecords();
+
+        for (StudentVo vo : rows) {
+            if (vo.getDelFlag() == YesOrNoEnum.YES) {
+                vo.setUserStatus(UserStatusEnum.CLOSED);
+            } else {
+                if (vo.getLockFlag() == UserLockFlag.LOCKED) {
+                    vo.setUserStatus(UserStatusEnum.LOCKED);
+                } else {
+                    vo.setUserStatus(UserStatusEnum.NORMAL);
+                }
+            }
+        }
+        return succeed(PageUtil.pageInfo(pages));
+    }
+
 }

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

@@ -73,6 +73,11 @@ public class SysMusicCompareRecordController extends BaseController {
         if (StringUtils.isEmpty(queryInfo.getStartTime())) {
             return failed("时间不能为空");
         }
+        LocalDate localDate = LocalDate.parse(queryInfo.getStartTime() + "-01",
+                DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+        queryInfo.setStartTime(localDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
+        LocalDate endDate = localDate.plusDays(localDate.getMonth().length(localDate.isLeapYear()) -1);
+        queryInfo.setEndTime(endDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
         return succeed(sysMusicCompareRecordService.studentTrainData(queryInfo));
     }
 

+ 28 - 4
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/TeacherController.java

@@ -221,15 +221,21 @@ public class TeacherController extends BaseController {
             return failed("未查询到老师的信息");
         }
 
+
+        TenantInfo tenantInfo = tenantInfoService.getById(user.getTenantId());
+        TenantUnbindRecord tenantUnbindRecord = new TenantUnbindRecord();
+
         TenantUnbindRecord one = tenantUnbindRecordService.lambdaQuery()
                 .eq(TenantUnbindRecord::getUserType, "TEACHER")
                 .eq(TenantUnbindRecord::getUserId, user.getId())
                 .last("limit 1").one();
-        if (one != null && ETenantUnBindAuditStatus.DOING.equals(one.getStatus())) {
-            return failed("请勿重复提交申请");
+        if(one != null) {
+            if(ETenantUnBindAuditStatus.DOING.equals(one.getStatus())){
+                return failed("请勿重复提交申请");
+            }
+            tenantUnbindRecord.setId(one.getId());
         }
-        TenantInfo tenantInfo = tenantInfoService.getById(user.getTenantId());
-        TenantUnbindRecord tenantUnbindRecord = new TenantUnbindRecord();
+
         tenantUnbindRecord.setTenantId(user.getTenantId());
         tenantUnbindRecord.setTenantName(tenantInfo == null ? "" : tenantInfo.getName());
         tenantUnbindRecord.setUserId(user.getId());
@@ -280,4 +286,22 @@ public class TeacherController extends BaseController {
         return succeed();
 
     }
+
+    @GetMapping("/unbindTenantDetail")
+    @ApiOperation(value = "解绑机构申请记录")
+    public HttpResponseResult<TenantUnbindRecord> unbindTenantDetail() {
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null || null == user.getId()) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+
+        TenantUnbindRecord one = tenantUnbindRecordService.lambdaQuery()
+                .eq(TenantUnbindRecord::getUserId, user.getId())
+                .eq(TenantUnbindRecord::getTenantId, user.getTenantId())
+                .eq(TenantUnbindRecord::getStatus, ETenantUnBindAuditStatus.DOING)
+                .orderByDesc(TenantUnbindRecord::getId)
+                .last("limit 1").one();
+        return succeed(one);
+
+    }
 }

+ 12 - 0
cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/TenantAlbumController.java

@@ -10,6 +10,7 @@ import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.entity.TenantAlbum;
 import com.yonge.cooleshow.biz.dal.entity.TenantInfo;
+import com.yonge.cooleshow.biz.dal.service.MusicAlbumService;
 import com.yonge.cooleshow.biz.dal.service.TenantAlbumService;
 import com.yonge.cooleshow.biz.dal.service.TenantInfoService;
 import com.yonge.cooleshow.biz.dal.wrapper.TenantAlbumWrapper;
@@ -48,6 +49,9 @@ public class TenantAlbumController extends BaseController {
     @Autowired
     private TenantInfoService tenantInfoService;
 
+    @Autowired
+    private MusicAlbumService musicAlbumService;
+
     @ApiOperation(value = "详情", notes = "机构专辑-根据详情ID查询单条, 传入id")
 //    @GetMapping("/detail/{id}")
     public HttpResponseResult<TenantAlbumVo.TenantAlbum> detail(@PathVariable("id") Long id) {
@@ -113,4 +117,12 @@ public class TenantAlbumController extends BaseController {
         return tenantInfo;
     }
 
+
+    @ApiOperation(value = "小程序端查询机构专辑详情")
+    @PostMapping("/albumDetail")
+    public HttpResponseResult <TenantAlbumWrapper.TenantAlbum> albumDetail(@RequestParam(defaultValue = "") String albumId) {
+        TenantAlbumWrapper.TenantAlbum tenantAlbum= musicAlbumService.tenantDetailAlbum(albumId);
+        return HttpResponseResult.succeed(tenantAlbum);
+    }
+
 }

+ 68 - 0
cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/TenantAlbumSheetController.java

@@ -0,0 +1,68 @@
+package com.yonge.cooleshow.tenant.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.microsvc.toolkit.common.response.paging.QueryInfo;
+import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.service.TenantAlbumMusicService;
+import com.yonge.cooleshow.biz.dal.wrapper.TenantAlbumMusicWrapper;
+import com.yonge.cooleshow.common.controller.BaseController;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.toolset.base.page.PageInfo;
+import com.yonge.toolset.mybatis.support.PageUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+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;
+
+/**
+ * 专辑表 web 控制层
+ * @author yzp
+ * @date 2022-03-26 00:21:46
+ * @version v1.0
+ **/
+@RestController
+@RequestMapping("/tenantAlbumMusic")
+@Api(tags = "机构专辑曲目 API接口")
+public class TenantAlbumSheetController extends BaseController {
+
+    @Autowired
+    private TenantAlbumMusicService tenantAlbumMusicService;
+
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+
+    @ApiOperation(value = "查询条件")
+    @PostMapping("/selectCondition")
+    public HttpResponseResult<TenantAlbumMusicWrapper.TenantAlbumMusicSelectData> selectCondition(@RequestBody TenantAlbumMusicWrapper.TenantAlbumMusicSelect query) {
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null || null == user.getId()) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        query.setUserId(user.getId());
+        /*if(StringUtils.isBlank(query.getSubjectId())){
+        	Student student = studentService.getById(user.getId());
+        	query.setSubjectId(student.getSubjectId());
+        }*/
+        return succeed(tenantAlbumMusicService.getTenantAlbumMusicQuery(query));
+    }
+
+
+
+    @ApiOperation(value = "分页查询")
+    @PostMapping("/page")
+    public HttpResponseResult<PageInfo<TenantAlbumMusicWrapper.StudentTenantAlbumMusic>> page(@RequestBody TenantAlbumMusicWrapper.StudentTenantAlbumMusicQuery query) {
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null || null == user.getId()) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        IPage<TenantAlbumMusicWrapper.StudentTenantAlbumMusic> page = tenantAlbumMusicService.selectPage(QueryInfo.getPage(query), query);
+        return succeed((PageUtil.pageInfo(page)));
+    }
+
+
+}

+ 47 - 22
cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/TenantInfoController.java

@@ -18,6 +18,7 @@ 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;
@@ -144,32 +145,38 @@ public class TenantInfoController extends BaseController {
     @PostMapping("/sysUserUpdate")
     @ApiOperation(value = "用户修改", notes = "用户修改")
 //    @PreAuthorize("@pcs.hasPermissions('tenantInfoUpdate/sysUserUpdate')")
-    public HttpResponseResult<Boolean> sysUserUpdate(SysUserWrapper.SysUser sysUser) {
+    public HttpResponseResult<Boolean> sysUserUpdate(@RequestBody SysUserWrapper.SysUser sysUser) {
         String code = sysUser.getCode();
         String phone = sysUser.getPhone();
 
-        boolean re = smsCodeService.verifyValidCode(phone, code, "PHONE");
-
         com.yonge.cooleshow.biz.dal.entity.SysUser sysUser1 = JSON.parseObject(sysUser.jsonString(), com.yonge.cooleshow.biz.dal.entity.SysUser.class);
 
-        if (re) {
-            SysUser user = sysUserFeignService.queryUserInfo();
-            tenantInfoService.updateSysUser(sysUser1, user.getId());
+        //如果传手机号
+        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));
+                }
+
+                //判断更改的手机所属的机构信息
+
+                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);
+                    }
+                }
 
-        //设置默认头像
-        if (sysUser.getAvatar().isEmpty()) {
-            sysUser.setAvatar(sysConfigService.findConfigValue(SysConfigConstant.DEFAULT_HEARD));
-        }
-        //判断更改的手机所属的机构信息
-            List<TenantInfo> list = tenantInfoService.lambdaQuery().eq(TenantInfo::getPhone, phone).list();
-        if (CollectionUtils.isNotEmpty(list)){
-            TenantInfo info = list.get(0);
-            if (info != null) {
-                //更新tennatInfo
-                info.setPhone(phone);
-                tenantInfoService.updateById(info);
-            }
-        }
                 //更新员工表
                 Long id = user.getId();
                 TenantStaff staff = tenantStaffService.getByUserId(id);
@@ -178,8 +185,26 @@ public class TenantInfoController extends BaseController {
                     staff.setAvatar(sysUser.getAvatar());
                     tenantStaffService.updateById(staff);
                 }
-    } else {
-            throw new BizException("手机号校验有误");
+            } else {
+                throw new BizException("手机号校验有误");
+            }
+        }  else {
+            SysUser user = sysUserFeignService.queryUserInfo();
+            tenantInfoService.updateSysUser(sysUser1, user.getId());
+
+            //设置默认头像
+            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);
+            }
         }
             return HttpResponseResult.succeed(true);
         }

+ 23 - 5
toolset/toolset-base/src/main/java/com/yonge/toolset/base/util/StringUtil.java

@@ -5,6 +5,7 @@ import com.yonge.toolset.base.string.StringPool;
 import org.springframework.lang.Nullable;
 import org.springframework.util.CollectionUtils;
 
+import java.time.LocalDateTime;
 import java.util.*;
 
 /**
@@ -360,7 +361,17 @@ public class StringUtil {
      * @param iSrc
      * @return
      */
-    public static String DeciamlToThirtySix(Long iSrc) {
+    public static String DeciamlToThirtySix(Long iSrc,Integer length) {
+
+        String s ="00000000" + DeciamlToThirtySix(iSrc);
+        // 获取string 后7位
+//        return s.substring(s.length()-7);
+
+        return s;
+
+    }
+
+    private static String DeciamlToThirtySix(Long iSrc) {
         String result = "";
         Long key;
         Long value;
@@ -376,11 +387,18 @@ public class StringUtil {
         return result;
     }
 
-
-
     public static void main(String[] args) {
 
-        String s = DeciamlToThirtySix(1684471133338419201L);
-        System.out.println(s);
+        int i = 0;
+        int num = 10;
+        int second = LocalDateTime.now().getSecond();
+        Random random = new Random();
+        int id = 100006;
+
+        for (int i1 = 0; i1 < num; i1++) {
+            second = second + i1;
+            String s = DeciamlToThirtySix(Long.parseLong(second + String.valueOf(id)),7);
+            System.out.println(s);
+        }
     }
 }