فهرست منبع

Merge remote-tracking branch 'origin/master'

yuanliang 2 سال پیش
والد
کامیت
de0661212e
61فایلهای تغییر یافته به همراه681 افزوده شده و 215 حذف شده
  1. 1 1
      audio-analysis/src/main/java/com/yonge/netty/server/service/AudioCompareHandler.java
  2. 1 1
      audio-analysis/src/main/resources/bootstrap-prod.yml
  3. 1 1
      cooleshow-app/src/main/resources/bootstrap-prod.yml
  4. 4 0
      cooleshow-auth/auth-api/src/main/java/com/yonge/cooleshow/auth/api/client/SysUserFeignService.java
  5. 4 0
      cooleshow-auth/auth-api/src/main/java/com/yonge/cooleshow/auth/api/client/fallback/SysUserFeignServiceFallback.java
  6. 31 0
      cooleshow-auth/auth-api/src/main/java/com/yonge/cooleshow/auth/api/entity/UserPassword.java
  7. 35 2
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/web/controller/UserController.java
  8. 1 1
      cooleshow-auth/auth-server/src/main/resources/bootstrap-prod.yml
  9. 3 3
      cooleshow-auth/auth-server/src/main/resources/logback-spring.xml
  10. 1 1
      cooleshow-bbs/src/main/resources/bootstrap-prod.yml
  11. 1 1
      cooleshow-bbs/src/main/resources/logback-spring.xml
  12. 1 1
      cooleshow-cms/src/main/resources/bootstrap-prod.properties
  13. 1 1
      cooleshow-cms/src/main/resources/logback-spring.xml
  14. 1 0
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/enums/EPayerType.java
  15. 1 1
      cooleshow-gateway/gateway-web/src/main/resources/bootstrap-prod.yml
  16. 1 1
      cooleshow-gateway/gateway-web/src/main/resources/logback-spring.xml
  17. 1 1
      cooleshow-mall/mall-portal/src/main/resources/bootstrap-prod.yml
  18. 1 1
      cooleshow-task/src/main/resources/bootstrap-prod.yml
  19. 1 1
      cooleshow-task/src/main/resources/logback-spring.xml
  20. 1 1
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/StudentController.java
  21. 20 0
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/TenantAlbumController.java
  22. 1 1
      cooleshow-user/user-admin/src/main/resources/bootstrap-prod.yml
  23. 1 1
      cooleshow-user/user-admin/src/main/resources/logback-spring.xml
  24. 57 17
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/PaymentMerchantConfig.java
  25. 12 5
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/execl/analysis/TenantAccountRecordImportAnalysis.java
  26. 6 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/MusicSheetService.java
  27. 7 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/TenantAlbumService.java
  28. 9 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserTenantAlbumRecordService.java
  29. 1 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseScheduleServiceImpl.java
  30. 82 26
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicSheetServiceImpl.java
  31. 76 8
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/PaymentMerchantConfigServiceImpl.java
  32. 26 35
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/StudentServiceImpl.java
  33. 39 25
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantAccountRecordServiceImpl.java
  34. 69 14
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantActivationCodeServiceImpl.java
  35. 17 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantAlbumServiceImpl.java
  36. 7 7
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantApplyRecordServiceImpl.java
  37. 14 4
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantInfoServiceImpl.java
  38. 50 7
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserPaymentCoreServiceImpl.java
  39. 20 5
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserTenantAlbumRecordServiceImpl.java
  40. 7 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/UserPaymentOrderWrapper.java
  41. 4 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/music/MusicCompareWrapper.java
  42. 11 2
      cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicSheetMapper.xml
  43. 4 2
      cooleshow-user/user-biz/src/main/resources/config/mybatis/StudentMapper.xml
  44. 2 2
      cooleshow-user/user-biz/src/main/resources/config/mybatis/TeacherMapper.xml
  45. 1 1
      cooleshow-user/user-classroom/src/main/resources/bootstrap-prod.yml
  46. 1 1
      cooleshow-user/user-classroom/src/main/resources/logback-spring.xml
  47. 13 0
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/MusicSheetController.java
  48. 1 1
      cooleshow-user/user-student/src/main/resources/bootstrap-prod.yml
  49. 1 1
      cooleshow-user/user-student/src/main/resources/logback-spring.xml
  50. 1 1
      cooleshow-user/user-teacher/src/main/resources/bootstrap-prod.yml
  51. 1 1
      cooleshow-user/user-teacher/src/main/resources/logback-spring.xml
  52. 2 13
      cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/StudentController.java
  53. 3 0
      cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/UserOrderController.java
  54. 0 11
      cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/open/OpenStudentController.java
  55. 15 0
      cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/open/OpenTenantController.java
  56. 3 0
      cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/vo/UserPaymentOrderVo.java
  57. 1 1
      cooleshow-user/user-tenant/src/main/resources/bootstrap-prod.yml
  58. 1 1
      cooleshow-user/user-tenant/src/main/resources/logback-spring.xml
  59. 1 1
      cooleshow-user/user-website/src/main/resources/bootstrap-prod.yml
  60. 1 1
      cooleshow-websocket/src/main/resources/bootstrap-prod.yml
  61. 1 1
      cooleshow-websocket/src/main/resources/logback-spring.xml

+ 1 - 1
audio-analysis/src/main/java/com/yonge/netty/server/service/AudioCompareHandler.java

@@ -93,7 +93,7 @@ public class AudioCompareHandler implements MessageHandler {
 
 	private AudioFloatConverter converter = AudioFloatConverter.getConverter(audioFormat);
 
-	private String tmpFileDir = "/mdata/soundCompare/";
+	private String tmpFileDir = "/mnt/datadisk/soundCompare/";
 
 	private SimpleDateFormat sdf = new SimpleDateFormat("yyMMddHHmmSS");
 	

+ 1 - 1
audio-analysis/src/main/resources/bootstrap-prod.yml

@@ -3,7 +3,7 @@ spring:
     nacos:
       config:
         server-addr: 10.206.0.16:8848
-        namespace: dba505ee-020c-4c2b-bab2-e91d89cf248e
+        namespace: e456599c-bef6-453d-927f-0e4a321259ed
         group: DEFAULT_GROUP
         prefix: audio-analysis
         file-extension: yaml

+ 1 - 1
cooleshow-app/src/main/resources/bootstrap-prod.yml

@@ -3,7 +3,7 @@ spring:
     nacos:
       config:
         server-addr: 10.206.0.16:8848
-        namespace: dba505ee-020c-4c2b-bab2-e91d89cf248e
+        namespace: e456599c-bef6-453d-927f-0e4a321259ed
         group: DEFAULT_GROUP
         prefix: app
         file-extension: yaml

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

@@ -66,6 +66,10 @@ public interface SysUserFeignService {
 	@ApiOperation(value = "退出登录")
 	HttpResponseResult<String> logout();
 
+	@GetMapping(value = "exit/{clientId}/{phone}", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
+	@ApiOperation(value = "退出登录")
+	HttpResponseResult<String> logout(@PathVariable("clientId") String clientId, @PathVariable("phone") String phone);
+
 	@PostMapping(value = "user/list")
 	HttpResponseResult<List<SysUser>> page(@RequestBody SysUserQueryInfo queryInfo);
 

+ 4 - 0
cooleshow-auth/auth-api/src/main/java/com/yonge/cooleshow/auth/api/client/fallback/SysUserFeignServiceFallback.java

@@ -77,6 +77,10 @@ public class SysUserFeignServiceFallback implements SysUserFeignService {
 		return HttpResponseResult.failed("请求失败");
 	}
 
+	@Override
+	public HttpResponseResult<String> logout(String phone, String client) {
+		return null;
+	}
 
 	@Override
 	public HttpResponseResult<List<SysUser>> page(SysUserQueryInfo queryInfo) {

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

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

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

@@ -6,6 +6,7 @@ import com.yonge.cooleshow.auth.api.dto.UpdatePasswordDto;
 import com.yonge.cooleshow.auth.api.dto.UserSetReq;
 import com.yonge.cooleshow.auth.api.entity.SysRole;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.auth.api.entity.UserPassword;
 import com.yonge.cooleshow.auth.api.vo.UserSetVo;
 import com.yonge.cooleshow.auth.core.service.CustomTokenServices;
 import com.yonge.cooleshow.auth.service.SysConfigService;
@@ -40,6 +41,7 @@ import org.springframework.http.MediaType;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.security.authentication.BadCredentialsException;
 import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
@@ -150,8 +152,9 @@ public class UserController extends BaseController {
     @ApiOperation(value = "设置用户密码")
     @PostMapping(value = "/setPassword", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
     @ApiImplicitParams({@ApiImplicitParam(name = "password", value = "密码", required = true, dataType = "String"),
-            @ApiImplicitParam(name = "id", value = "用户id", required = true, dataType = "Long")})
-    public Object setPassword(String password, Long id) {
+            @ApiImplicitParam(name = "id", value = "用户id", required = true, dataType = "Long"),
+            @ApiImplicitParam(name = "code", value = "验证码", required = false, dataType = "String")})
+    public Object setPassword(String password, Long id,String code) {
         if (StringUtils.isEmpty(password) || null == id) {
             return failed("参数校验失败");
         }
@@ -159,6 +162,12 @@ public class UserController extends BaseController {
         if (sysUser == null) {
             return failed("用户不存在");
         }
+        if(StringUtils.isNotEmpty(code)){
+            if (!smsCodeService.verifyValidCode(sysUser.getPhone(), code,
+                    "SMS_VERIFY_CODE_UPDATE_PSW")) {
+                return failed("验证码错误");
+            }
+        }
 
         password = new BCryptPasswordEncoder().encode(password);
         sysUser.setPassword(password);
@@ -672,4 +681,28 @@ public class UserController extends BaseController {
         result.put("customerServicePhone",sysConfigService.findConfigValue("customer_service_phone"));
         return succeed(result);
     }
+
+    @PostMapping("/checkPassword")
+    @ApiOperation(value = "校验密码")
+    public Object checkPassword(@Validated @RequestBody UserPassword.CheckPassword checkPassword){
+        AuthUser authUser = SecurityUtils.getUser();
+        SysUser sysUser = sysUserService.get(authUser.getUserId());
+        BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
+        if(!encoder.matches(checkPassword.getPassword(),sysUser.getPassword())){
+            throw new BizException("原密码错误");
+        }
+        return succeed();
+    }
+
+    @PostMapping("/checkVerityCode")
+    @ApiOperation(value = "校验验证码")
+    public Object checkVerityCode(@Validated @RequestBody UserPassword.CheckVerityCode checkVerityCode) {
+        AuthUser authUser = SecurityUtils.getUser();
+        SysUser sysUser = sysUserService.get(authUser.getUserId());
+        if (!smsCodeService.verifyValidCode(sysUser.getPhone(), checkVerityCode.getCode(),
+                "SMS_VERIFY_CODE_UPDATE_PSW")) {
+            return failed("验证码错误");
+        }
+        return succeed();
+    }
 }

+ 1 - 1
cooleshow-auth/auth-server/src/main/resources/bootstrap-prod.yml

@@ -3,7 +3,7 @@ spring:
     nacos:
       config:
         server-addr: 10.206.0.16:8848
-        namespace: dba505ee-020c-4c2b-bab2-e91d89cf248e
+        namespace: e456599c-bef6-453d-927f-0e4a321259ed
         group: DEFAULT_GROUP
         prefix: auth
         file-extension: yaml

+ 3 - 3
cooleshow-auth/auth-server/src/main/resources/logback-spring.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <configuration scan="true" scanPeriod="10 seconds">
 
-	<property name="LOG_HOME" value="/mdata/cooleshow-test/jenkins/logs/auth-%d{yyyy-MM-dd_HH}-%i.log" />
+	<property name="LOG_HOME" value="/mnt/datadisk/logs/auth-%d{yyyy-MM-dd_HH}-%i.log" />
 	<property name="CONSOLE_LOG_PATTERN"
 		value="[%X{username} %X{ip} %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36}] : %msg%n" />
 
@@ -27,8 +27,8 @@
 		</encoder>
 	</appender>
 
-	<logger name="com.yonge" level="DEBUG" />
-	<root level="DEBUG">
+	<logger name="com.yonge" level="WARN" />
+	<root level="WARN">
 		<appender-ref ref="stdout" />
 		<appender-ref ref="file" />
 	</root>

+ 1 - 1
cooleshow-bbs/src/main/resources/bootstrap-prod.yml

@@ -3,7 +3,7 @@ spring:
     nacos:
       config:
         server-addr: 10.206.0.16:8848
-        namespace: dba505ee-020c-4c2b-bab2-e91d89cf248e
+        namespace: e456599c-bef6-453d-927f-0e4a321259ed
         group: DEFAULT_GROUP
         prefix: bbs
         file-extension: yaml

+ 1 - 1
cooleshow-bbs/src/main/resources/logback-spring.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <configuration scan="true" scanPeriod="10 seconds">
 
-	<property name="LOG_HOME" value="/mdata/cooleshow-dev/jenkins/logs/bbs-%d{yyyy-MM-dd_HH}-%i.log" />
+	<property name="LOG_HOME" value="/mnt/datadisk/logs/bbs-%d{yyyy-MM-dd_HH}-%i.log" />
 	<property name="CONSOLE_LOG_PATTERN"
 		value="[%X{username} %X{ip} %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36}] : %msg%n" />
 

+ 1 - 1
cooleshow-cms/src/main/resources/bootstrap-prod.properties

@@ -2,7 +2,7 @@
 #\u670d\u52a1\u5668\u5730\u5740
 spring.cloud.nacos.config.server-addr=10.206.0.16:8848
 #\u9ed8\u8ba4\u4e3aPublic\u547d\u540d\u7a7a\u95f4,\u53ef\u4ee5\u7701\u7565\u4e0d\u5199
-spring.cloud.nacos.config.namespace=dba505ee-020c-4c2b-bab2-e91d89cf248e
+spring.cloud.nacos.config.namespace=e456599c-bef6-453d-927f-0e4a321259ed
 #\u6307\u5b9a\u914d\u7f6e\u7fa4\u7ec4 --\u5982\u679c\u662fPublic\u547d\u540d\u7a7a\u95f4 \u5219\u53ef\u4ee5\u7701\u7565\u7fa4\u7ec4\u914d\u7f6e
 spring.cloud.nacos.config.group=DEFAULT_GROUP
 #\u6587\u4ef6\u540d -- \u5982\u679c\u6ca1\u6709\u914d\u7f6e\u5219\u9ed8\u8ba4\u4e3a ${spring.appliction.name}

+ 1 - 1
cooleshow-cms/src/main/resources/logback-spring.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <configuration scan="true" scanPeriod="10 seconds">
 
-	<property name="LOG_HOME" value="/mdata/cooleshow-test/jenkins/logs/cms-%d{yyyy-MM-dd_HH}-%i.log" />
+	<property name="LOG_HOME" value="/mnt/datadisk/logs/cms-%d{yyyy-MM-dd_HH}-%i.log" />
 	<property name="CONSOLE_LOG_PATTERN"
 		value="[%X{username} %X{ip} %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36}] : %msg%n" />
 

+ 1 - 0
cooleshow-common/src/main/java/com/yonge/cooleshow/common/enums/EPayerType.java

@@ -7,6 +7,7 @@ public enum EPayerType implements BaseEnum<String, EPayerType> {
 
     ADAPAY("adapay"),
     YEEPAY("yeepay"),
+    ORIGINAL("original"),
     ;
 
     @EnumValue

+ 1 - 1
cooleshow-gateway/gateway-web/src/main/resources/bootstrap-prod.yml

@@ -3,7 +3,7 @@ spring:
     nacos:
       config:
         server-addr: 10.206.0.16:8848
-        namespace: dba505ee-020c-4c2b-bab2-e91d89cf248e
+        namespace: e456599c-bef6-453d-927f-0e4a321259ed
         group: DEFAULT_GROUP
         prefix: gateway-web
         file-extension: yaml

+ 1 - 1
cooleshow-gateway/gateway-web/src/main/resources/logback-spring.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <configuration scan="true" scanPeriod="10 seconds">
 
-	<property name="LOG_HOME" value="/mdata/cooleshow-test/jenkins/logs/gateway-%d{yyyy-MM-dd_HH}-%i.log" />
+	<property name="LOG_HOME" value="/mnt/datadisk/logs/gateway-%d{yyyy-MM-dd_HH}-%i.log" />
 	<property name="CONSOLE_LOG_PATTERN"
 		value="[%X{username} %X{ip} %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36}] : %msg%n" />
 

+ 1 - 1
cooleshow-mall/mall-portal/src/main/resources/bootstrap-prod.yml

@@ -3,7 +3,7 @@ spring:
     nacos:
       config:
         server-addr: 10.206.0.16:8848
-        namespace: dba505ee-020c-4c2b-bab2-e91d89cf248e
+        namespace: e456599c-bef6-453d-927f-0e4a321259ed
         group: DEFAULT_GROUP
         prefix: mall-portal
         file-extension: yaml

+ 1 - 1
cooleshow-task/src/main/resources/bootstrap-prod.yml

@@ -3,7 +3,7 @@ spring:
     nacos:
       config:
         server-addr: 10.206.0.16:8848
-        namespace: dba505ee-020c-4c2b-bab2-e91d89cf248e
+        namespace: e456599c-bef6-453d-927f-0e4a321259ed
         group: DEFAULT_GROUP
         prefix: task
         file-extension: yaml

+ 1 - 1
cooleshow-task/src/main/resources/logback-spring.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <configuration scan="true" scanPeriod="10 seconds">
 
-	<property name="LOG_HOME" value="/mdata/cooleshow-test/jenkins/logs/task-%d{yyyy-MM-dd_HH}-%i.log" />
+	<property name="LOG_HOME" value="/mnt/datadisk/logs/task-%d{yyyy-MM-dd_HH}-%i.log" />
 	<property name="CONSOLE_LOG_PATTERN"
 			  value="[%X{username} %X{ip} %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36}] : %msg%n" />
 

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

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

+ 20 - 0
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/TenantAlbumController.java

@@ -3,6 +3,7 @@ package com.yonge.cooleshow.admin.controller;
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.google.common.collect.Sets;
 import com.microsvc.toolkit.common.response.paging.QueryInfo;
 import com.yonge.cooleshow.admin.io.request.TenantAlbumVo;
 import com.yonge.cooleshow.api.feign.dto.TenantWrapper;
@@ -191,6 +192,15 @@ public class TenantAlbumController {
             throw new BizException("当前机构已有专辑");
         }
 
+        // 检查曲目重复
+        if (CollectionUtils.isNotEmpty(album.getMusicSheetData())) {
+            List<Long> musicIds = album.getMusicSheetData().stream().flatMap(o -> o.getMusicSheetList().stream().map(m -> m.getId())).collect(Collectors.toList());
+            Set<Long> musicSet = new HashSet<>(musicIds);
+            if (musicSet.size() < musicIds.size()) {
+                throw new BizException("不能添加相同的曲目");
+            }
+        }
+
         TenantAlbum tenantAlbum = JSON.parseObject(album.jsonString(), TenantAlbum.class);
         List<TenantAlbumVo.MusicSheetData> musicSheetData = album.getMusicSheetData();
 
@@ -230,6 +240,16 @@ public class TenantAlbumController {
             });
         }
 
+        // 检查曲目重复
+        if (CollectionUtils.isNotEmpty(album.getMusicSheetData())) {
+            List<Long> musicIds = album.getMusicSheetData().stream().flatMap(o -> o.getMusicSheetList()
+                    .stream().map(TenantAlbumVo.MusicObject::getId)).collect(Collectors.toList());
+            Set<Long> musicSet = new HashSet<>(musicIds);
+            if (musicSet.size() < musicIds.size()) {
+                throw new BizException("不能添加相同的曲目");
+            }
+        }
+
         TenantAlbum tenantAlbum = JSON.parseObject(album.jsonString(), TenantAlbum.class);
         List<TenantAlbumVo.MusicSheetData> musicSheetData = album.getMusicSheetData();
 

+ 1 - 1
cooleshow-user/user-admin/src/main/resources/bootstrap-prod.yml

@@ -3,7 +3,7 @@ spring:
     nacos:
       config:
         server-addr: 10.206.0.16:8848
-        namespace: dba505ee-020c-4c2b-bab2-e91d89cf248e
+        namespace: e456599c-bef6-453d-927f-0e4a321259ed
         group: DEFAULT_GROUP
         prefix: admin
         file-extension: yaml

+ 1 - 1
cooleshow-user/user-admin/src/main/resources/logback-spring.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <configuration scan="true" scanPeriod="10 seconds">
 
-	<property name="LOG_HOME" value="/mdata/cooleshow-test/jenkins/logs/admin-%d{yyyy-MM-dd_HH}-%i.log" />
+	<property name="LOG_HOME" value="/mnt/datadisk/logs/admin-%d{yyyy-MM-dd_HH}-%i.log" />
 	<property name="CONSOLE_LOG_PATTERN"
 		value="[%X{username} %X{ip} %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36}] : %msg%n" />
 

+ 57 - 17
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/PaymentMerchantConfig.java

@@ -24,9 +24,8 @@ import java.util.Date;
 public class PaymentMerchantConfig implements Serializable {
 
     @ApiModelProperty("主键") 
-
     @TableId(value = "id_", type = IdType.AUTO)
-	    private Long id;
+    private Long id;
 
     @ApiModelProperty("机构ID") 
 	@TableField(value = "tenant_id_")
@@ -48,8 +47,7 @@ public class PaymentMerchantConfig implements Serializable {
     @TableField(value = "platform_payee_member_id_")
     private String platformPayeeMemberId;
 
-
-    @ApiModelProperty("商户ID") 
+    @ApiModelProperty("商户ID")
 	@TableField(value = "app_id_")
     private String appId;
 
@@ -85,29 +83,71 @@ public class PaymentMerchantConfig implements Serializable {
 	@TableField(value = "wx_app_secret_")
     private String wxAppSecret;
 
-    @ApiModelProperty("支付宝Key") 
-	@TableField(value = "alipay_app_id_")
+    @ApiModelProperty("小程序appId")
+    @TableField(value = "mini_app_id_")
+    private String miniAppId;
+
+    @ApiModelProperty("小程序secret")
+    @TableField(value = "mini_app_secret_")
+    private String miniAppSerret;
+
+    @ApiModelProperty("支付客户端")
+    @TableField(value = "payment_client_")
+    private String paymentClient;
+
+    @ApiModelProperty("支付商户号")
+    @TableField(value = "wx_merchant_id_")
+    private String wxMerchantId;
+
+    @ApiModelProperty("支付私钥")
+    @TableField(value = "wx_merchant_private_key_")
+    private String wxMerchantPrivateKey;
+
+    @ApiModelProperty("微信商户序列号")
+    @TableField(value = "wx_merchant_serial_number_")
+    private String wxMerchantSerialNumber;
+
+    @ApiModelProperty("接口签名密钥")
+    @TableField(value = "wx_api_v3_key_")
+    private String wxApiV3Key;
+
+    @ApiModelProperty("私钥证书地址")
+    @TableField(value = "wx_private_cert_path_")
+    private String wxPrivateCertPath;
+
+    @ApiModelProperty("私钥Key地址")
+    @TableField(value = "wx_private_key_path_")
+    private String wxPrivateKeyPath;
+
+    @ApiModelProperty("支付宝Key")
+    @TableField(value = "alipay_app_id_")
     private String alipayAppId;
 
-    @ApiModelProperty("支付宝私钥") 
-	@TableField(value = "alipay_private_key_")
+    @ApiModelProperty("支付宝私钥")
+    @TableField(value = "alipay_private_key_")
     private String alipayPrivateKey;
 
-    @ApiModelProperty("支付宝公钥") 
-	@TableField(value = "alipay_public_key_")
+    @ApiModelProperty("支付宝公钥")
+    @TableField(value = "alipay_public_key_")
     private String alipayPublicKey;
 
+    @ApiModelProperty("签名方式")
+    @TableField(value = "alipay_sign_type_")
+    private String aliPaySignType;
 
-    @ApiModelProperty("小程序appId")
-    @TableField(value = "mini_app_id_")
-    private String miniAppId;
+    @ApiModelProperty("内容签名方式")
+    @TableField(value = "alipay_content_sign_type_")
+    private String alipayContentSignType;
 
-    @ApiModelProperty("小程序secret")
-    @TableField(value = "mini_app_secret_")
-    private String miniAppSerret;
+    @ApiModelProperty("内容签名密钥")
+    @TableField(value = "alipay_content_sign_key_")
+    private String aliPayContentSignKey;
 
+    @ApiModelProperty("启用标识")
+    @TableField(value = "status_")
+    private Boolean status;
 
-    @ApiModelProperty("创建时间") 
+    @ApiModelProperty("创建时间")
 	@TableField(value = "create_time_")
     private Date createTime;
 

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

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

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

@@ -392,4 +392,10 @@ public interface MusicSheetService extends IService<MusicSheet> {
     Map<Long,MusicSheet> getMapByIds(List<Long> bizIds);
 
     MusicCompareWrapper.SearchData search(MusicCompareWrapper.MusicSearch queryInfo);
+
+    /**
+     * 机构曲目搜索
+     *
+     */
+    MusicCompareWrapper.SearchData searchTenant(MusicCompareWrapper.MusicSearch queryInfo);
 }

+ 7 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/TenantAlbumService.java

@@ -72,6 +72,13 @@ public interface TenantAlbumService extends IService<TenantAlbum>  {
 
     void buyCancel(UserOrderDetailVo userOrderDetailVo);
 
+    /**
+     * 根据机构Id获取专辑
+     *
+     * @param tenantId 机构Id
+     */
+    List<TenantAlbum> getByTenantId(Long tenantId,Boolean status);
+
 
     /**
      * 添加机构专辑数据

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

@@ -54,6 +54,15 @@ public interface UserTenantAlbumRecordService extends IService<UserTenantAlbumRe
     UserTenantAlbumRecord getNewestByTenantIdAndUserId(Long tenantId, Long userId, ClientEnum clientType);
 
     /**
+     * 获取最新的购买记录
+     *
+     * @param tenantId   机构ID
+     * @param userId     用户ID
+     * @param clientType 客户端类型
+     */
+    List<UserTenantAlbumRecord> getNewestByTenantIdAndUserId(Long tenantId, Long userId, ClientEnum clientType, List<Long> tenantAlbumIds);
+
+    /**
      * 获取生效中的专辑ID
      *
      * @param userId

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

@@ -2578,6 +2578,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
                 // 存入缓存
                 redisCacheService.saveUserAccountConfig(orderGoodsInfo.getSubOrderNo(), accountTenantTo.jsonString());
 
+                return;
             }
         } catch (InterruptedException e) {
             throw new BizException("创建陪练课失败:{}", e.getMessage());

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

@@ -79,31 +79,7 @@ import com.yonge.cooleshow.biz.dal.entity.*;
 import com.yonge.cooleshow.biz.dal.enums.*;
 import com.yonge.cooleshow.biz.dal.enums.album.PurchaseRecordTypeEnum;
 import com.yonge.cooleshow.biz.dal.mapper.UserTenantAlbumRecordMapper;
-import com.yonge.cooleshow.biz.dal.service.ActivityPlanService;
-import com.yonge.cooleshow.biz.dal.service.AlbumFavoriteService;
-import com.yonge.cooleshow.biz.dal.service.AlbumMusicRelateService;
-import com.yonge.cooleshow.biz.dal.service.CourseCoursewareService;
-import com.yonge.cooleshow.biz.dal.service.MusicAlbumService;
-import com.yonge.cooleshow.biz.dal.service.MusicFavoriteService;
-import com.yonge.cooleshow.biz.dal.service.MusicSheetAccompanimentService;
-import com.yonge.cooleshow.biz.dal.service.MusicSheetAuthRecordService;
-import com.yonge.cooleshow.biz.dal.service.MusicSheetPracticeRecordService;
-import com.yonge.cooleshow.biz.dal.service.MusicSheetPurchaseRecordService;
-import com.yonge.cooleshow.biz.dal.service.MusicSheetService;
-import com.yonge.cooleshow.biz.dal.service.MusicTagService;
-import com.yonge.cooleshow.biz.dal.service.PlatformCashAccountRecordService;
-import com.yonge.cooleshow.biz.dal.service.RedisCacheService;
-import com.yonge.cooleshow.biz.dal.service.StudentService;
-import com.yonge.cooleshow.biz.dal.service.StudentStarService;
-import com.yonge.cooleshow.biz.dal.service.SubjectService;
-import com.yonge.cooleshow.biz.dal.service.SysConfigService;
-import com.yonge.cooleshow.biz.dal.service.SysMessageService;
-import com.yonge.cooleshow.biz.dal.service.TeacherService;
-import com.yonge.cooleshow.biz.dal.service.TeacherTotalService;
-import com.yonge.cooleshow.biz.dal.service.TenantAlbumMusicService;
-import com.yonge.cooleshow.biz.dal.service.TenantInfoService;
-import com.yonge.cooleshow.biz.dal.service.UserAccountService;
-import com.yonge.cooleshow.biz.dal.service.UserOrderService;
+import com.yonge.cooleshow.biz.dal.service.*;
 import com.yonge.cooleshow.biz.dal.support.WrapperUtil;
 import com.yonge.cooleshow.biz.dal.vo.ActivityPlanVo;
 import com.yonge.cooleshow.biz.dal.vo.HomeMusicSheetVo;
@@ -263,6 +239,12 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
     @Autowired
     private RedisCacheService redisCacheService;
 
+    @Autowired
+    private TenantAlbumService tenantAlbumService;
+
+    @Autowired
+    private UserTenantAlbumRecordService userTenantAlbumRecordService;
+
     public MusicSheetDao getDao() {
         return musicSheetDao;
     }
@@ -1851,7 +1833,6 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
         List<MusicCompareWrapper.MusicName> musicNames = new ArrayList<>();
         if (StringUtil.isEmpty(queryInfo.getType()) || queryInfo.getType().equals("MUSIC")) {
 
-            PageUtil.getPage(queryInfo);
             // 查询曲目列表
             List<Long> musicIds = musicSheetDao.searchMusic(PageUtil.getPage(queryInfo),queryInfo);
 
@@ -1935,6 +1916,81 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
     }
 
     @Override
+    public MusicCompareWrapper.SearchData searchTenant(MusicCompareWrapper.MusicSearch queryInfo) {
+        MusicCompareWrapper.SearchData searchData = new MusicCompareWrapper.SearchData();
+        List<MusicCompareWrapper.MusicName> musicNames = new ArrayList<>();
+        searchData.setMusicNames(musicNames);
+
+        // 查询学生机构
+        Student student = studentService.getById(queryInfo.getUserId());
+        if (student == null) {
+            throw new BizException("学生不存在");
+        }
+        if (student.getTenantId() == null || student.getTenantId() == -1) {
+            throw new BizException("学生未绑定机构");
+        }
+        // 查询机构下的专辑
+        List<TenantAlbum> albumList = tenantAlbumService.getByTenantId(student.getTenantId(), true);
+        List<Long> albumIds = new ArrayList<>();
+        if (CollectionUtils.isNotEmpty(albumList)) {
+            albumIds = albumList.stream().map(TenantAlbum::getId).distinct().collect(Collectors.toList());
+        }
+
+        List<UserTenantAlbumRecord> recordList = userTenantAlbumRecordService
+                .getNewestByTenantIdAndUserId(student.getTenantId(), queryInfo.getUserId(), ClientEnum.STUDENT, albumIds);
+
+        if (CollectionUtils.isNotEmpty(recordList)) {
+            albumIds = recordList.stream().map(UserTenantAlbumRecord::getTenantAlbumId).distinct().collect(Collectors.toList());
+            queryInfo.setTenantAlbumIds(albumIds);
+        } else {
+            return searchData;
+        }
+
+        // 查询曲目列表
+        List<Long> musicIds = musicSheetDao.searchMusic(PageUtil.getPage(queryInfo),queryInfo);
+        if (CollectionUtils.isNotEmpty(musicIds)) {
+
+
+            MusicSheetSearch musicSheetSearch = new MusicSheetSearch();
+            musicSheetSearch.setMusicSheetIdlist(musicIds);
+            IPage<MusicSheetVo> musicSheetVoIPage = selectPage(PageUtil.getPage(queryInfo), musicSheetSearch);
+            List<MusicSheetVo> records = musicSheetVoIPage.getRecords();
+            if (CollectionUtils.isNotEmpty(records)) {
+                for (MusicSheetVo record : records) {
+                    MusicCompareWrapper.MusicName musicName = new MusicCompareWrapper.MusicName();
+                    musicName.setId(record.getId());
+                    musicName.setName(record.getMusicSheetName());
+                    musicName.setType("MUSIC");
+                    musicName.setHotFlag(record.getHotFlag() != null?record.getHotFlag():YesOrNoEnum.NO);
+                    musicName.setSort(Optional.ofNullable(record.getFavoriteCount()).orElse(0));
+                    musicNames.add(musicName);
+                }
+                searchData.setMusic(PageUtil.pageInfo(musicSheetVoIPage));
+            }
+
+            // 是否关注
+            if (queryInfo.getUserId() != null) {
+                List<MusicFavorite> musicFavoriteList = musicFavoriteService.lambdaQuery()
+                        .eq(MusicFavorite::getUserId, queryInfo.getUserId())
+                        .eq(MusicFavorite::getClientType, ClientEnum.STUDENT)
+                        .in(MusicFavorite::getMusicSheetId, musicIds)
+                        .list();
+                if (CollectionUtils.isNotEmpty(musicFavoriteList)) {
+                    Set<Long> set = musicFavoriteList.stream()
+                            .map(MusicFavorite::getMusicSheetId)
+                            .collect(Collectors.toSet());
+                    for (MusicCompareWrapper.MusicName record : musicNames) {
+                        record.setFavorite(set.contains(record.getId()) ? YesOrNoEnum.YES : YesOrNoEnum.NO);
+                    }
+                }
+            }
+        }
+
+        musicNames.sort(Comparator.comparing(MusicCompareWrapper.MusicName::getSort).reversed());
+        return searchData;
+    }
+
+    @Override
     public Boolean updateMusicImg(MusicImgDto musicImgDto, Long musicSheetId) {
         MusicSheet musicSheet = new MusicSheet();
         musicSheet.setMusicImg(musicImgDto.getMusicImg());

+ 76 - 8
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/PaymentMerchantConfigServiceImpl.java

@@ -3,8 +3,11 @@ package com.yonge.cooleshow.biz.dal.service.impl;
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.google.common.collect.Lists;
 import com.microsvc.toolkit.middleware.payment.common.api.PaymentServiceContext;
 import com.microsvc.toolkit.middleware.payment.impl.AdapayPaymentServicePlugin;
+import com.microsvc.toolkit.middleware.payment.impl.AliPaymentServicePlugin;
+import com.microsvc.toolkit.middleware.payment.impl.WxPaymentServicePlugin;
 import com.microsvc.toolkit.middleware.payment.impl.YeepayPaymentServicePlugin;
 import com.microsvc.toolkit.middleware.payment.properties.PayConfigProperties;
 import com.yonge.cooleshow.common.enums.EPayerType;
@@ -19,6 +22,7 @@ import com.yonge.cooleshow.biz.dal.service.PaymentMerchantConfigService;
 
 import javax.annotation.PostConstruct;
 import java.util.List;
+import java.util.Objects;
 
 /**
  * 支付三方账户配置
@@ -39,9 +43,11 @@ public class PaymentMerchantConfigServiceImpl extends ServiceImpl<PaymentMerchan
         if(CollectionUtils.isEmpty(list)) {
             return;
         }
+
+        List<String> pluginNames = Lists.newArrayList();
         for (PaymentMerchantConfig config : list) {
             if (config.getPayerType() == null) {
-
+                log.error("数据错误 {}", config);
             } else if (config.getPayerType().equals(EPayerType.ADAPAY)) {
 
                 PayConfigProperties.AdapayPayConfig adapayPayConfig = new PayConfigProperties.AdapayPayConfig();
@@ -57,12 +63,13 @@ public class PaymentMerchantConfigServiceImpl extends ServiceImpl<PaymentMerchan
                 adapayPayConfig.setWxAppId(config.getWxAppId());
                 adapayPayConfig.setWxAppSecret(config.getWxAppSecret());
                 adapayPayConfig.setSupportCreditCards(properties.getSupportCreditCards());
-                AdapayPaymentServicePlugin plugin = null;
                 try {
-                    plugin = new AdapayPaymentServicePlugin(config.getPaymentVendor(), adapayPayConfig, false);
+                    AdapayPaymentServicePlugin plugin = new AdapayPaymentServicePlugin(config.getPaymentVendor(), adapayPayConfig, false);
                     PaymentServiceContext.addPlugin(plugin);
+
+                    pluginNames.add(plugin.venderName());
                 } catch (Exception e) {
-                    log.error("初始化支付插件失败", e);
+                    log.error("初始[汇付]化支付插件失败", e);
                 }
             } else if (config.getPayerType().equals(EPayerType.YEEPAY)){
                 PayConfigProperties.YeepayPayConfig yeepayPayConfig = new PayConfigProperties.YeepayPayConfig();
@@ -82,19 +89,80 @@ public class PaymentMerchantConfigServiceImpl extends ServiceImpl<PaymentMerchan
                 yeepayPayConfig.setAlipayPublicKey(config.getAlipayPublicKey());
                 yeepayPayConfig.setMiniAppId(config.getMiniAppId());
                 yeepayPayConfig.setMiniAppSecret(config.getMiniAppSerret());
-                YeepayPaymentServicePlugin plugin;
                 try {
-                    plugin = new YeepayPaymentServicePlugin(config.getPaymentVendor(), yeepayPayConfig, false);
+                    YeepayPaymentServicePlugin plugin = new YeepayPaymentServicePlugin(config.getPaymentVendor(), yeepayPayConfig, false);
                     PaymentServiceContext.addPlugin(plugin);
+
+                    pluginNames.add(plugin.venderName());
                 } catch (Exception e) {
-                    log.error("初始化支付插件失败", e);
+                    log.error("初始化[易宝]支付插件失败", e);
+                }
+            } else if (config.getPayerType().equals(EPayerType.ORIGINAL)) {
+
+                // 原生微信支付
+                if (config.getPaymentVendor().startsWith("wxpay")) {
+                    PayConfigProperties.WxPayConfig wxPayConfig = new PayConfigProperties.WxPayConfig();
+                    wxPayConfig.setEnable(true);
+                    wxPayConfig.setWxAppId(config.getWxAppId());
+                    wxPayConfig.setWxAppSecret(config.getWxAppSecret());
+                    wxPayConfig.setMerchantId(config.getWxMerchantId());
+                    wxPayConfig.setMerchantPrivateKey(config.getWxMerchantPrivateKey());
+                    wxPayConfig.setMerchantSerialNumber(config.getWxMerchantSerialNumber());
+                    wxPayConfig.setApiV3Key(config.getWxApiV3Key());
+                    wxPayConfig.setPrivateCertPath(config.getWxPrivateCertPath());
+                    wxPayConfig.setPrivateKeyPath(config.getWxPrivateKeyPath());
+                    wxPayConfig.setPayType(config.getPaymentVendor());
+                    wxPayConfig.setPayNotifyUrl(properties.getPayNotifyUrl());
+                    wxPayConfig.setRefundNotifyUrl(properties.getRefundNotifyUrl());
+                    if (Objects.nonNull(properties.getWxpay())) {
+                        wxPayConfig.setFeeRate(properties.getWxpay().getFeeRate());
+                    }
+
+                    try {
+                        // 初始化微信支付插件
+                        WxPaymentServicePlugin plugin = new WxPaymentServicePlugin(config.getPaymentVendor(), wxPayConfig, false);
+                        PaymentServiceContext.addPlugin(plugin);
+
+                        pluginNames.add(plugin.venderName());
+                    } catch (Exception e) {
+                        log.error("初始化[微信]支付插件失败", e);
+                    }
+                }
+
+                // 原生支付宝支付
+                if (config.getPaymentVendor().startsWith("alipay")) {
+                    PayConfigProperties.AliPayConfig aliPayConfig = new PayConfigProperties.AliPayConfig();
+                    aliPayConfig.setEnable(true);
+                    aliPayConfig.setAppId(config.getAlipayAppId());
+                    aliPayConfig.setPrivateKey(config.getAlipayPrivateKey());
+                    aliPayConfig.setPublicKey(config.getAlipayPublicKey());
+                    aliPayConfig.setSignType(config.getAliPaySignType());
+                    aliPayConfig.setEncryptType(config.getAlipayContentSignType());
+                    aliPayConfig.setEncryptKey(config.getAliPayContentSignKey());
+                    aliPayConfig.setUseCert(false);
+                    aliPayConfig.setPayType(config.getPaymentVendor());
+                    aliPayConfig.setPayNotifyUrl(properties.getPayNotifyUrl());
+                    aliPayConfig.setRefundNotifyUrl(properties.getRefundNotifyUrl());
+                    if (Objects.nonNull(properties.getAlipay())) {
+                        aliPayConfig.setFeeRate(properties.getAlipay().getFeeRate());
+                    }
+
+                    try {
+                        // 初始化支付宝支付插件
+                        AliPaymentServicePlugin plugin = new AliPaymentServicePlugin(config.getPaymentVendor(), aliPayConfig, false);
+                        PaymentServiceContext.addPlugin(plugin);
+
+                        pluginNames.add(plugin.venderName());
+                    } catch (Exception e) {
+                        log.error("初始化[支付宝]支付插件失败", e);
+                    }
                 }
             } else {
                 log.error("数据错误 {}", config);
             }
 
         }
-
+        log.info("初始化支付插件完成, plugins={}", pluginNames);
     }
 
     /**

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

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

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

@@ -116,34 +116,48 @@ public class TenantAccountRecordServiceImpl extends ServiceImpl<TenantAccountRec
         if (CollectionUtils.isEmpty(importList)) {
             return;
         }
-        // 过滤出结算成功
-        List<TenantAccountRecordImport> collect = importList.stream().filter(o -> o.getPostStatus().equals(PostStatusEnum.RECORDED)).collect(Collectors.toList());
+        // 过滤为空
+        List<TenantAccountRecordImport> collect = importList.stream().filter(o -> o.getPostStatus() != null).collect(Collectors.toList());
         if (CollectionUtils.isEmpty(collect)) {
             return;
         }
-
-        // id 集合
-        List<String> ids = collect.stream().map(o -> o.getId()).collect(Collectors.toList());
-        List<TenantAccountRecord> list = this.lambdaQuery()
-                .in(TenantAccountRecord::getId, ids)
-                .list();
-        if (CollectionUtils.isEmpty(list)) {
-            return;
+        // 过滤出结算成功的
+        List<String> successIds = collect.stream().filter(o -> PostStatusEnum.RECORDED.equals(o.getPostStatus())).map(TenantAccountRecordImport::getId).collect(Collectors.toList());
+        List<String> waitIds = collect.stream().filter(o -> PostStatusEnum.WAIT.equals(o.getPostStatus())).map(TenantAccountRecordImport::getId).collect(Collectors.toList());
+
+        if (CollectionUtils.isNotEmpty(successIds)) {
+            List<TenantAccountRecord> list = this.lambdaQuery()
+                    .in(TenantAccountRecord::getId, successIds)
+                    .list();
+            this.lambdaUpdate()
+                    .in(TenantAccountRecord::getId, successIds)
+                    .set(TenantAccountRecord::getPostStatus,PostStatusEnum.RECORDED)
+                    .update();
+
+            // 平台支出ID集合
+            List<Long> platformCashAccountRecordIds = list.stream().map(o -> o.getPlatformCashAccountRecordId()).collect(Collectors.toList());
+
+            platformCashAccountRecordService.lambdaUpdate()
+                    .in(PlatformCashAccountRecord::getId,platformCashAccountRecordIds)
+                    .set(PlatformCashAccountRecord::getPostStatus,PostStatusEnum.RECORDED)
+                    .update();
+        }
+        if (CollectionUtils.isNotEmpty(waitIds)) {
+            List<TenantAccountRecord> list = this.lambdaQuery()
+                    .in(TenantAccountRecord::getId, waitIds)
+                    .list();
+            this.lambdaUpdate()
+                    .in(TenantAccountRecord::getId, waitIds)
+                    .set(TenantAccountRecord::getPostStatus,PostStatusEnum.WAIT)
+                    .update();
+
+            // 平台支出ID集合
+            List<Long> platformCashAccountRecordIds = list.stream().map(o -> o.getPlatformCashAccountRecordId()).collect(Collectors.toList());
+
+            platformCashAccountRecordService.lambdaUpdate()
+                    .in(PlatformCashAccountRecord::getId,platformCashAccountRecordIds)
+                    .set(PlatformCashAccountRecord::getPostStatus,PostStatusEnum.WAIT)
+                    .update();
         }
-
-        this.lambdaUpdate()
-                .in(TenantAccountRecord::getId, ids)
-                .set(TenantAccountRecord::getPostStatus,PostStatusEnum.RECORDED)
-                .update();
-
-        // 平台支出ID集合
-        List<Long> platformCashAccountRecordIds = list.stream().map(o -> o.getPlatformCashAccountRecordId()).collect(Collectors.toList());
-
-        platformCashAccountRecordService.lambdaUpdate()
-                .in(PlatformCashAccountRecord::getId,platformCashAccountRecordIds)
-                .set(PlatformCashAccountRecord::getPostStatus,PostStatusEnum.RECORDED)
-                .update();
-
-
     }
 }

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

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

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

@@ -476,6 +476,23 @@ public class TenantAlbumServiceImpl extends ServiceImpl<TenantAlbumMapper, Tenan
         tenantAlbumPurchaseService.updateById(tenantAlbumPurchase);
     }
 
+    @Override
+    public List<TenantAlbum> getByTenantId(Long tenantId,Boolean status) {
+        if (tenantId == null) {
+            return new ArrayList<>();
+        }
+        List<TenantAlbumRef> list = tenantAlbumRefService.lambdaQuery().eq(TenantAlbumRef::getTenantId, tenantId).list();
+        if (CollectionUtils.isEmpty(list)) {
+            return new ArrayList<>();
+        }
+        Set<Long> tenantAlbumId = list.stream().map(TenantAlbumRef::getTenantAlbumId).collect(Collectors.toSet());
+        return this.lambdaQuery().in(TenantAlbum::getId, tenantAlbumId)
+                .eq(status != null, TenantAlbum::getStatus, status)
+                .eq(TenantAlbum::getDelFlag,false).list();
+
+
+    }
+
     private void insertAlbumMusic(Long tenantId, TenantAlbum tenantAlbum,
                                   List<TenantAlbumWrapper.MusicSheetData> musicSheetDataList) {
         //曲目表赋值

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

@@ -128,13 +128,13 @@ public class TenantApplyRecordServiceImpl extends ServiceImpl<TenantApplyRecordM
         if (tenantStaff != null) {
             throw new BizException("该手机号已经有机构账号");
         }
-
-        QueryWrapper<SysUser> sysUserQueryWrapper = new QueryWrapper<>();
-        sysUserQueryWrapper.lambda().eq(SysUser::getPhone, tenantApply.getPhone());
-        List<SysUser> sysUsers = sysUserMapper.selectList(sysUserQueryWrapper);
-        if (!sysUsers.isEmpty() && sysUsers.stream().anyMatch(next -> next.getUserType().contains(ClientEnum.SYSTEM.getCode()))) {
-            throw new BizException("该手机号已经有系统员工账户");
-        }
+//
+//        QueryWrapper<SysUser> sysUserQueryWrapper = new QueryWrapper<>();
+//        sysUserQueryWrapper.lambda().eq(SysUser::getPhone, tenantApply.getPhone());
+//        List<SysUser> sysUsers = sysUserMapper.selectList(sysUserQueryWrapper);
+//        if (!sysUsers.isEmpty() && sysUsers.stream().anyMatch(next -> next.getUserType().contains(ClientEnum.SYSTEM.getCode()))) {
+//            throw new BizException("该手机号已经有系统员工账户");
+//        }
 
         // 查询申请记录 是否存在正在申请中的
         TenantApplyRecord record = this.lambdaQuery()

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

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.microsvc.toolkit.common.response.paging.QueryInfo;
+import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.biz.dal.dao.StudentDao;
 import com.yonge.cooleshow.biz.dal.dao.TeacherDao;
 import com.yonge.cooleshow.biz.dal.entity.SysArea;
@@ -13,6 +14,7 @@ import com.yonge.cooleshow.biz.dal.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.entity.Teacher;
 import com.yonge.cooleshow.biz.dal.entity.TenantInfo;
 import com.yonge.cooleshow.biz.dal.entity.TenantStaff;
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.mapper.SysUserMapper;
 import com.yonge.cooleshow.biz.dal.mapper.TenantApplyRecordMapper;
 import com.yonge.cooleshow.biz.dal.mapper.TenantEntryRecordMapper;
@@ -30,10 +32,12 @@ 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 feign.Client;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.core.token.TokenService;
 import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -87,6 +91,9 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoMapper, TenantI
     @Autowired
     private StudentDao studentDao;
 
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+
 
     /**
      * 查询详情
@@ -255,9 +262,9 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoMapper, TenantI
             //获取当前账户的用户类型
             String userType = sysUser.getUserType();
 
-            if (userType.contains(SysUserType.SYSTEM.getCode())){
-                throw new BizException("该手机号已注册平台员工");
-            }
+//            if (userType.contains(SysUserType.SYSTEM.getCode())){
+//                throw new BizException("该手机号已注册平台员工");
+//            }
             //设置默认机构类型
             String tenantUserType = SysUserType.ORGANIZATION.getCode();
             if (StringUtils.isEmpty(userType)) {
@@ -423,7 +430,10 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoMapper, TenantI
         }
 
         //判断修改手机号后所属
-
+        if (!info.getPhone().equals(oldTenantInfo.getPhone())) {
+            // 清除登录token信息
+            sysUserFeignService.logout(ClientEnum.ORGANIZATION.getCode(), oldTenantInfo.getPhone());
+        }
         tenantInfoMapper.update(null, Wrappers.<TenantInfo>lambdaUpdate()
                 .set(TenantInfo::getName, info.getName())
                 .set(TenantInfo::getLogo, info.getLogo())

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

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

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

@@ -20,12 +20,10 @@ import com.yonge.cooleshow.biz.dal.vo.StudentVo;
 import com.yonge.cooleshow.biz.dal.wrapper.TenantAlbumWrapper;
 import com.yonge.cooleshow.common.enums.YesOrNoEnum;
 import com.yonge.toolset.base.exception.BizException;
-import com.yonge.toolset.base.util.StringUtil;
 import com.yonge.toolset.mybatis.support.PageUtil;
 import com.yonge.toolset.utils.obj.ObjectUtil;
 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;
@@ -210,6 +208,7 @@ public class UserTenantAlbumRecordServiceImpl extends ServiceImpl<UserTenantAlbu
         return this.updateById(JSON.parseObject(userTenantAlbumRecord.jsonString(), UserTenantAlbumRecord.class));       
     }
 
+
     /**
      * 获取最新的购买记录
      *
@@ -219,16 +218,32 @@ public class UserTenantAlbumRecordServiceImpl extends ServiceImpl<UserTenantAlbu
      */
     @Override
     public UserTenantAlbumRecord getNewestByTenantIdAndUserId(Long tenantId, Long userId, ClientEnum clientType) {
-        if (tenantId == null || userId == null || clientType == null) {
+        List<UserTenantAlbumRecord> recordList = getNewestByTenantIdAndUserId(tenantId, userId, clientType, null);
+        if (CollectionUtils.isEmpty(recordList)) {
             return null;
         }
+        return recordList.get(0);
+    }
+    /**
+     * 获取最新的购买记录
+     *
+     * @param tenantId   机构ID
+     * @param userId     用户ID
+     * @param clientType 客户端类型
+     */
+    @Override
+    public List<UserTenantAlbumRecord> getNewestByTenantIdAndUserId(Long tenantId, Long userId, ClientEnum clientType, List<Long> tenantAlbumIds) {
+        if (tenantId == null || userId == null || clientType == null) {
+            return new ArrayList<>();
+        }
         return this.lambdaQuery()
                 .eq(UserTenantAlbumRecord::getTenantId, tenantId)
                 .eq(UserTenantAlbumRecord::getUserId, userId)
                 .eq(UserTenantAlbumRecord::getClientType, clientType)
+                .in(CollectionUtils.isNotEmpty(tenantAlbumIds),UserTenantAlbumRecord::getTenantAlbumId,tenantAlbumIds)
+                .ge(UserTenantAlbumRecord::getEndTime, new Date())
                 .orderByDesc(UserTenantAlbumRecord::getEndTime)
-                .last("limit 1")
-                .one();
+                .list();
     }
 
     @Override

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

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

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

@@ -384,6 +384,10 @@ public class MusicCompareWrapper {
         @ApiModelProperty("类型 MUSIC 曲目 ALBUM专辑")
         private String type;
 
+        @ApiModelProperty(value = "机构专辑ID",hidden = true)
+        private List<Long> tenantAlbumIds;
+
+        @ApiModelProperty(hidden = true)
         private Long userId;
     }
 

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

@@ -806,15 +806,24 @@
     </select>
 
     <select id="searchMusic" resultType="java.lang.Long">
-        select id_ from music_sheet  t
+        select t.id_ from music_sheet  t
+        <if test="param.tenantAlbumIds != null and param.tenantAlbumIds.size() != 0">
+            left join tenant_album_music tam on t.id_ = tam.music_sheet_id_
+        </if>
             <where>
-                t.state_=1 and t.audit_version_ = 0 and del_flag_ = 0 and audit_status_ = 'PASS'
+                t.state_=1 and t.audit_version_ = 0 and t.del_flag_ = 0 and t.audit_status_ = 'PASS'
                 <if test="param.subjectId != null">
                     and ( t.music_subject_ = #{param.subjectId} or t.music_subject_ is null or t.music_subject_ = '')
                 </if>
                 <if test="param.name != null and param.name != ''">
                     and t.music_sheet_name_ like concat('%',#{param.name},'%')
                 </if>
+                <if test="param.tenantAlbumIds != null and param.tenantAlbumIds.size() != 0">
+                    and tam.tenant_album_id_ in
+                    <foreach collection="param.tenantAlbumIds" item="item" open="(" close=")" separator=",">
+                        #{item}
+                    </foreach>
+                </if>
             </where>
         order by t.top_flag_ desc, t.sort_number_ desc, t.favorite_count_ desc
 

+ 4 - 2
cooleshow-user/user-biz/src/main/resources/config/mybatis/StudentMapper.xml

@@ -31,7 +31,6 @@
         , t.tenant_id_ as tenantId
         , t.create_time_ as `createTime`
         , t.update_time_ as `updateTime`
-        , t.avatar_ as `avatar`
         </sql>
     <update id="setSubject">
         update student set subject_id_ = #{subjectIds},update_time_ = now() where user_id_ = #{id}
@@ -42,6 +41,7 @@
             <include refid="baseColumns"/>,
             if(u.lock_flag_ = 0 and t.lock_flag_ = 0,0,1) as lockFlag,
             u.avatar_ as userAvatar,
+            u.avatar_ as avatar,
             u.real_name_ as realName,
             u.id_card_no_ as idCardNo,
             u.username_ as username,
@@ -66,6 +66,7 @@
         SELECT
             <include refid="baseColumns"/>,
             if(u.lock_flag_ = 0 and t.lock_flag_ = 0,0,1) as lockFlag,
+            u.avatar_ as avatar,
             u.real_name_ as realName,
             u.id_card_no_ as idCardNo,
             u.username_ as username,
@@ -89,6 +90,7 @@
             <include refid="baseColumns"/>,
             if(u.lock_flag_ = 0 and t.lock_flag_ = 0,0,1) as lockFlag,
             u.avatar_ as userAvatar,
+            u.avatar_ as avatar,
             u.username_ as username,
             u.gender_ as gender,
             u.birthdate_ as birthdate,
@@ -276,7 +278,7 @@
     <select id="queryMyFollow" resultMap="queryMyFollowResult">
         SELECT
             s.teacher_id_ as userId,
-            tr.avatar_ as avatar,
+            u.avatar_ as avatar,
             u.username_ as userName,
             u.real_name_ as realName,
             u.gender_ as gender,

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

@@ -99,7 +99,7 @@
         u.username_ as username,
         u.phone_ as phone,
         u.real_name_ as realName,
-        if (t.avatar_ = '' OR t.avatar_ IS NULL, u.avatar_, t.avatar_) as avatar,
+        u.avatar_ as avatar,
         u.birthdate_ as birthdate,
         u.gender_ as gender,
         (case when t.membership_end_time_ &gt;= now() then 1 else 0 end) isVip,
@@ -227,7 +227,7 @@
         SELECT
         <include refid="baseColumns"/>,
         if(u.lock_flag_ = 0 and t.lock_flag_ = 0,0,1) as lockFlag,
-        if(t.avatar_ = '' OR t.avatar_ = NULL, u.avatar_, t.avatar_) as avatar,
+        u.avatar_ as avatar,
         u.username_ as username,
         u.gender_ as `gender`,
         u.birthdate_ as birthdate,

+ 1 - 1
cooleshow-user/user-classroom/src/main/resources/bootstrap-prod.yml

@@ -3,7 +3,7 @@ spring:
     nacos:
       config:
         server-addr: 10.206.0.16:8848
-        namespace: dba505ee-020c-4c2b-bab2-e91d89cf248e
+        namespace: e456599c-bef6-453d-927f-0e4a321259ed
         group: DEFAULT_GROUP
         prefix: classroom
         file-extension: yaml

+ 1 - 1
cooleshow-user/user-classroom/src/main/resources/logback-spring.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <configuration scan="true" scanPeriod="10 seconds">
 
-	<property name="LOG_HOME" value="/mdata/cooleshow-test/jenkins/logs/classroom-%d{yyyy-MM-dd_HH}-%i.log" />
+	<property name="LOG_HOME" value="/mnt/datadisk/logs/classroom-%d{yyyy-MM-dd_HH}-%i.log" />
 	<property name="CONSOLE_LOG_PATTERN"
 		value="[%X{username} %X{ip} %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36}] : %msg%n" />
 

+ 13 - 0
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/MusicSheetController.java

@@ -422,4 +422,17 @@ public class MusicSheetController extends BaseController {
     }
 
 
+    @ApiOperation(value = "搜索机构")
+    @PostMapping(value="/searchTenant")
+    public HttpResponseResult<MusicCompareWrapper.SearchData> searchTenant(@RequestBody MusicCompareWrapper.MusicSearch queryInfo) {
+
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            throw new BizException("用户信息获取失败");
+        }
+        queryInfo.setUserId(sysUser.getId());
+        return succeed(musicSheetService.searchTenant(queryInfo));
+    }
+
+
 }

+ 1 - 1
cooleshow-user/user-student/src/main/resources/bootstrap-prod.yml

@@ -3,7 +3,7 @@ spring:
     nacos:
       config:
         server-addr: 10.206.0.16:8848
-        namespace: dba505ee-020c-4c2b-bab2-e91d89cf248e
+        namespace: e456599c-bef6-453d-927f-0e4a321259ed
         group: DEFAULT_GROUP
         prefix: student
         file-extension: yaml

+ 1 - 1
cooleshow-user/user-student/src/main/resources/logback-spring.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <configuration scan="true" scanPeriod="10 seconds">
 
-	<property name="LOG_HOME" value="/mdata/cooleshow-test/jenkins/logs/student-%d{yyyy-MM-dd_HH}-%i.log" />
+	<property name="LOG_HOME" value="/mnt/datadisk/logs/student-%d{yyyy-MM-dd_HH}-%i.log" />
 	<property name="CONSOLE_LOG_PATTERN"
 		value="[%X{username} %X{ip} %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36}] : %msg%n" />
 

+ 1 - 1
cooleshow-user/user-teacher/src/main/resources/bootstrap-prod.yml

@@ -3,7 +3,7 @@ spring:
     nacos:
       config:
         server-addr: 10.206.0.16:8848
-        namespace: dba505ee-020c-4c2b-bab2-e91d89cf248e
+        namespace: e456599c-bef6-453d-927f-0e4a321259ed
         group: DEFAULT_GROUP
         prefix: teacher
         file-extension: yaml

+ 1 - 1
cooleshow-user/user-teacher/src/main/resources/logback-spring.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <configuration scan="true" scanPeriod="10 seconds">
 
-	<property name="LOG_HOME" value="/mdata/cooleshow-test/jenkins/logs/teacher-%d{yyyy-MM-dd_HH}-%i.log" />
+	<property name="LOG_HOME" value="/mnt/datadisk/logs/teacher-%d{yyyy-MM-dd_HH}-%i.log" />
 	<property name="CONSOLE_LOG_PATTERN"
 		value="[%X{username} %X{ip} %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36}] : %msg%n" />
 

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

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

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

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

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

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

+ 15 - 0
cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/open/OpenTenantController.java

@@ -65,6 +65,21 @@ public class OpenTenantController {
     }
 
 
+
+    @GetMapping("/checkPhone")
+    @ApiOperation(value = "检查手机是否已经注册机构账户")
+    public HttpResponseResult<Boolean> checkPhone(String phone) {
+
+
+        // 根据手机号 判断是否已经有机构账户
+        TenantStaff tenantStaff = tenantStaffService.getByPhone(phone);
+        if (tenantStaff != null) {
+            return HttpResponseResult.status(true);
+        }
+        return HttpResponseResult.status(false);
+    }
+
+
     @GetMapping("/bindWechat")
     @ApiOperation(value = "绑定微信")
     public HttpResponseResult<Boolean> bindWechat(@RequestParam("phone") String phone,

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

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

+ 1 - 1
cooleshow-user/user-tenant/src/main/resources/bootstrap-prod.yml

@@ -3,7 +3,7 @@ spring:
     nacos:
       config:
         server-addr: 10.206.0.16:8848
-        namespace: dba505ee-020c-4c2b-bab2-e91d89cf248e
+        namespace: e456599c-bef6-453d-927f-0e4a321259ed
         group: DEFAULT_GROUP
         prefix: tenant
         file-extension: yaml

+ 1 - 1
cooleshow-user/user-tenant/src/main/resources/logback-spring.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <configuration scan="true" scanPeriod="10 seconds">
 
-	<property name="LOG_HOME" value="/mdata/cooleshow-test/jenkins/logs/tenant-%d{yyyy-MM-dd_HH}-%i.log" />
+	<property name="LOG_HOME" value="/mnt/datadisk/logs/tenant-%d{yyyy-MM-dd_HH}-%i.log" />
 	<property name="CONSOLE_LOG_PATTERN"
 		value="[%X{username} %X{ip} %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36}] : %msg%n" />
 

+ 1 - 1
cooleshow-user/user-website/src/main/resources/bootstrap-prod.yml

@@ -3,7 +3,7 @@ spring:
     nacos:
       config:
         server-addr: 10.206.0.16:8848
-        namespace: dba505ee-020c-4c2b-bab2-e91d89cf248e
+        namespace: e456599c-bef6-453d-927f-0e4a321259ed
         group: DEFAULT_GROUP
         prefix: website
         file-extension: yaml

+ 1 - 1
cooleshow-websocket/src/main/resources/bootstrap-prod.yml

@@ -3,7 +3,7 @@ spring:
     nacos:
       config:
         server-addr: 10.206.0.16:8848
-        namespace: dba505ee-020c-4c2b-bab2-e91d89cf248e
+        namespace: e456599c-bef6-453d-927f-0e4a321259ed
         group: DEFAULT_GROUP
         prefix: websocket
         file-extension: yaml

+ 1 - 1
cooleshow-websocket/src/main/resources/logback-spring.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <configuration scan="true" scanPeriod="10 seconds">
 
-	<property name="LOG_HOME" value="/mdata/cooleshow-dev/jenkins/logs/websocket-%d{yyyy-MM-dd_HH}-%i.log" />
+	<property name="LOG_HOME" value="/mnt/datadisk/logs/websocket-%d{yyyy-MM-dd_HH}-%i.log" />
 	<property name="CONSOLE_LOG_PATTERN"
 		value="[%X{username} %X{ip} %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36}] : %msg%n" />