Quellcode durchsuchen

Merge branch 'feature/0721-tenant'

# Conflicts:
#	cooleshow-common/src/main/java/com/yonge/cooleshow/common/constant/SysConfigConstant.java
#	cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/StudentServiceImpl.java
yuanliang vor 1 Jahr
Ursprung
Commit
2a5ad73dca
49 geänderte Dateien mit 636 neuen und 70 gelöschten Zeilen
  1. 5 0
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/core/provider/PhoneAuthenticationProvider.java
  2. 3 0
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/core/provider/service/DefaultUserDetailsService.java
  3. 3 0
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/dal/dao/SysUserDao.java
  4. 3 0
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/service/SysUserService.java
  5. 5 0
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/service/impl/SysUserServiceImpl.java
  6. 3 0
      cooleshow-auth/auth-server/src/main/resources/config/mybatis/SysUserMapper.xml
  7. 4 0
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/constant/SysConfigConstant.java
  8. 1 0
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/enums/ESettlementFrom.java
  9. 1 0
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/enums/payment/EPaymentChannel.java
  10. 14 1
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/StudentController.java
  11. 10 0
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/UnbindAuthUserController.java
  12. 5 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/MusicSheetDao.java
  13. 11 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/MusicAlbumSearch.java
  14. 10 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/PaymentMerchantConfig.java
  15. 3 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/MusicSheetService.java
  16. 2 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/StudentService.java
  17. 4 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/TenantAlbumService.java
  18. 2 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserOrderService.java
  19. 41 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicAlbumServiceImpl.java
  20. 52 6
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicSheetServiceImpl.java
  21. 16 5
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/PaymentDivMemberRecordServiceImpl.java
  22. 2 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/PaymentMerchantConfigServiceImpl.java
  23. 91 22
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/StudentServiceImpl.java
  24. 8 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherServiceImpl.java
  25. 62 4
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantAlbumServiceImpl.java
  26. 19 4
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantInfoServiceImpl.java
  27. 3 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantUnbindRecordServiceImpl.java
  28. 7 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderServiceImpl.java
  29. 4 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserPaymentCoreServiceImpl.java
  30. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserPaymentOrderServiceImpl.java
  31. 11 7
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserTenantAlbumRecordServiceImpl.java
  32. 4 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/TenantActivationCodeWrapper.java
  33. 6 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/TenantAlbumPurchaseWrapper.java
  34. 3 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/TenantAlbumWrapper.java
  35. 6 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/TenantUnbindHistoryWrapper.java
  36. 2 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/UserPaymentOrderWrapper.java
  37. 70 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/music/MusicCompareWrapper.java
  38. 6 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicAlbumMapper.xml
  39. 29 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicSheetMapper.xml
  40. 9 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/TenantActivationCodeMapper.xml
  41. 1 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/TenantAlbumMapper.xml
  42. 9 1
      cooleshow-user/user-biz/src/main/resources/config/mybatis/TenantAlbumPurchaseMapper.xml
  43. 1 1
      cooleshow-user/user-biz/src/main/resources/config/mybatis/TenantInfoMapper.xml
  44. 10 0
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/MusicSheetController.java
  45. 42 1
      cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/TenantActivationCodeController.java
  46. 9 1
      cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/TenantAlbumPurchaseController.java
  47. 18 0
      cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/UserOrderController.java
  48. 0 1
      cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/open/OpenStudentController.java
  49. 5 5
      toolset/toolset-base/src/main/java/com/yonge/toolset/base/util/StringUtil.java

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

@@ -225,6 +225,11 @@ public class PhoneAuthenticationProvider extends AbstractAuthenticationProvider
                 sysUserService.update(user);
             }
 
+            // 学生账号修改隐藏为显示
+            if (StringUtils.equalsIgnoreCase(loginUserType, "STUDENT")) {
+                sysUserService.updateStudentHideFlag(userInfo.getSysUser().getId(), 0);
+            }
+
         }
 
         return login(username);

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

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

+ 3 - 0
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/dal/dao/SysUserDao.java

@@ -181,4 +181,7 @@ public interface SysUserDao extends BaseDAO<Long, SysUser> {
     void updateLockStatusByPhone(@Param("phone") String phone);
 
     int countByPhone(@Param("phone") String phone);
+
+    void updateStudentHideFlag(@Param("userId") Long userId, @Param("hideFlag") int hideFlag);
+
 }

+ 3 - 0
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/service/SysUserService.java

@@ -225,4 +225,7 @@ public interface SysUserService extends BaseService<Long, SysUser> {
     SysUser getSysUserByOpenId(String openId, String clientId);
 
     void logoffByPhone(String phone);
+
+
+    void updateStudentHideFlag(Long userId, int hideFlag);
 }

+ 5 - 0
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/service/impl/SysUserServiceImpl.java

@@ -436,4 +436,9 @@ public class SysUserServiceImpl extends BaseServiceImpl<Long, SysUser> implement
         //退出登录
         tokenService.revokeTokenByPhone(phone);
     }
+
+    @Override
+    public void updateStudentHideFlag(Long userId, int hideFlag) {
+        sysUserDao.updateStudentHideFlag(userId, hideFlag);
+    }
 }

+ 3 - 0
cooleshow-auth/auth-server/src/main/resources/config/mybatis/SysUserMapper.xml

@@ -366,4 +366,7 @@
         WHERE t1.del_flag_ = 0 and t2.wx_openid_ = #{openId} LIMIT 1
     </select>
 
+    <update id="updateStudentHideFlag">
+        update student set hide_flag_ = #{hideFlag} where user_id_ = #{userId}
+    </update>
 </mapper>

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

@@ -375,6 +375,10 @@ public interface SysConfigConstant {
     String TENANT_USER_UNBIND_EXPIRE_TIME = "tenant_user_unbind_expire_time";
 
     /**
+     * 机构人员解绑手机号
+     */
+    String TENANT_USER_UNBIND_PHONE = "tenant_user_unbind_phone";
+    /**
      * 课程群头像 icon_course_group_default
      */
     String ICON_COURSE_GROUP_DEFAULT = "icon_course_group_default";

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

@@ -7,6 +7,7 @@ public enum ESettlementFrom implements BaseEnum<String, ESettlementFrom> {
 
     TEACHER("结算给老师"),
     TENANT("结算给机构"),
+    NO("不结算"),
     ;
 
     @EnumValue

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

@@ -12,6 +12,7 @@ public enum EPaymentChannel {
     ALIPAY_QR("alipay_qr", "支付宝正扫", 1),
     ALIPAY_WAP("alipay_wap", "支付宝H5支付", 1),
     WX_PUB("wx_pub", "微信公众号支付", 2),
+    WX_LITE("wx_lite", "微信小程序支付", 2),
     ;
 
     private final String msg;

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

@@ -33,6 +33,7 @@ import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 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.GetMapping;
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -203,7 +204,7 @@ public class StudentController extends BaseController {
     @PostMapping("/updateTenant")
     @ApiOperation(value = "修改机构")
     public HttpResponseResult<Boolean> updateTenant(@RequestBody StudentWrapper.StudentUpdateTenant updateTenant) {
-        SysUser user = sysUserFeignService.queryUserInfo();
+        SysUser user = sysUserFeignService.queryUserById(updateTenant.getStudentId());
         if (user == null || null == user.getId()) {
             return failed(HttpStatus.FORBIDDEN, "请登录");
         }
@@ -219,4 +220,16 @@ public class StudentController extends BaseController {
         studentService.updateTenant(student, updateTenant.getTenantId());
         return succeed();
     }
+
+
+    @PostMapping("/add")
+    @ApiOperation(value = "新增", notes = "传入Student")
+    public HttpResponseResult<Boolean> add(@Validated @RequestBody StudentWrapper.Student student) {
+        SysUser sysUser = sysUserFeignService.queryUserByMobile(student.getPhone());
+        if (sysUser != null && sysUser.getUserType().contains(ClientEnum.STUDENT.getCode())) {
+            throw new BizException("学生账号已经存在");
+        }
+        studentService.addStudent(student);
+        return succeed();
+    }
 }

+ 10 - 0
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/UnbindAuthUserController.java

@@ -12,6 +12,7 @@ import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.validation.annotation.Validated;
@@ -30,6 +31,10 @@ import com.yonge.cooleshow.biz.dal.service.UnbindAuthUserService;
 import com.yonge.cooleshow.biz.dal.wrapper.UnbindAuthUserWrapper;
 import com.yonge.cooleshow.biz.dal.entity.UnbindAuthUser;
 
+import java.util.Collections;
+import java.util.List;
+import java.util.stream.Collectors;
+
 @Slf4j
 @Validated
 @RestController
@@ -57,6 +62,11 @@ public class UnbindAuthUserController {
         if (unbindAuthUser.getUserId() == null) {
             throw new BizException("用户ID不能为空");
         }
+
+        List<UnbindAuthUser> list = unbindAuthUserService.list();
+        if (!CollectionUtils.isEmpty(list)) {
+            unbindAuthUser.setId(list.get(0).getId());
+        }
         // 新增数据
         unbindAuthUserService.save(unbindAuthUser);
         

+ 5 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/MusicSheetDao.java

@@ -7,6 +7,7 @@ import com.yonge.cooleshow.biz.dal.entity.MusicSheet;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.vo.*;
 import com.yonge.cooleshow.biz.dal.wrapper.StatGroupWrapper;
+import com.yonge.cooleshow.biz.dal.wrapper.music.MusicCompareWrapper;
 import com.yonge.cooleshow.common.enums.YesOrNoEnum;
 import org.apache.ibatis.annotations.Param;
 
@@ -184,4 +185,8 @@ public interface MusicSheetDao extends BaseMapper<MusicSheet> {
     void updateFavoriteCount(@Param("musicSheetId") Long musicSheetId, @Param("state") YesOrNoEnum state);
 
     List<MusicSheetUploadCountVo> countByUser(@Param("userIds") List<Long> userIds);
+
+    List<Long> searchMusic(@Param("page") IPage<TeacherMusicSheetVo> page,@Param("param") MusicCompareWrapper.MusicSearch queryInfo);
+    List<Long> searchAlbum(@Param("page") IPage<TeacherMusicSheetVo> page,@Param("param") MusicCompareWrapper.MusicSearch queryInfo);
+
 }

+ 11 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/MusicAlbumSearch.java

@@ -65,6 +65,17 @@ public class MusicAlbumSearch extends QueryInfo{
     @ApiModelProperty(hidden = true)
     private List<Long> subjectIdList;
 
+    @ApiModelProperty(value = "专辑i集合")
+    private List<Long> albumIds;
+
+    public List<Long> getAlbumIds() {
+        return albumIds;
+    }
+
+    public void setAlbumIds(List<Long> albumIds) {
+        this.albumIds = albumIds;
+    }
+
     public ChargeTypeEnum getPaymentType() {
         return paymentType;
     }

+ 10 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/PaymentMerchantConfig.java

@@ -97,6 +97,16 @@ public class PaymentMerchantConfig implements Serializable {
 	@TableField(value = "alipay_public_key_")
     private String alipayPublicKey;
 
+
+    @ApiModelProperty("小程序appId")
+    @TableField(value = "mini_app_id_")
+    private String miniAppId;
+
+    @ApiModelProperty("小程序secret")
+    @TableField(value = "mini_app_secret_")
+    private String miniAppSerret;
+
+
     @ApiModelProperty("创建时间") 
 	@TableField(value = "create_time_")
     private Date createTime;

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

@@ -23,6 +23,7 @@ import com.yonge.cooleshow.biz.dal.enums.OrderTypeEnum;
 import com.yonge.cooleshow.biz.dal.vo.*;
 import com.yonge.cooleshow.biz.dal.vo.res.OrderCreateRes;
 import com.yonge.cooleshow.biz.dal.wrapper.UserPaymentOrderWrapper;
+import com.yonge.cooleshow.biz.dal.wrapper.music.MusicCompareWrapper;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.utils.easyexcel.ExcelDataReaderProperty;
 
@@ -389,4 +390,6 @@ public interface MusicSheetService extends IService<MusicSheet> {
      * @param bizIds 曲目id
      */
     Map<Long,MusicSheet> getMapByIds(List<Long> bizIds);
+
+    MusicCompareWrapper.SearchData search(MusicCompareWrapper.MusicSearch queryInfo);
 }

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

@@ -129,4 +129,6 @@ public interface StudentService extends IService<Student> {
      * @param toTenantId 机构ID
      */
     void updateTenant(Student student, Long toTenantId);
+
+    void addStudent(StudentWrapper.Student student);
 }

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

@@ -68,6 +68,10 @@ public interface TenantAlbumService extends IService<TenantAlbum>  {
 
     Map<Long, Long> getMusicCountByIds(List<Long> bizIds);
 
+    void orderAfterSheet(UserPaymentOrderWrapper.OrderGoodsInfo orderGoodsInfo);
+
+    void buyCancel(UserOrderDetailVo userOrderDetailVo);
+
 
     /**
      * 添加机构专辑数据

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

@@ -229,4 +229,6 @@ public interface UserOrderService extends IService<UserOrder> {
 
     //首页支出订单详情
     PaymentDivMemberRecordWrapper.OrderDetailDto getExpendOrderDetail(String orderNo);
+
+    void testOrderSuccess(String orderNo);
 }

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

@@ -1,5 +1,6 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
+import java.math.BigDecimal;
 import java.text.MessageFormat;
 import java.util.Arrays;
 import java.util.Date;
@@ -505,10 +506,37 @@ public class MusicAlbumServiceImpl extends ServiceImpl<MusicAlbumDao,MusicAlbum>
         //机构专辑封面
         String coverImg = tenantAlbum.getCoverImg();
         //机构专辑曲目数
-        List<TenantAlbumMusic> tenantAlbumMusiclist = tenantAlbumMusicService.lambdaQuery().eq(TenantAlbumMusic::getTenantAlbumId, tenantAlbumId).list();
+        List<TenantAlbumMusic> tenantAlbumMusiclist = tenantAlbumMusicService.lambdaQuery().eq(TenantAlbumMusic::getTenantAlbumId, tenantAlbumId)
+                .eq(TenantAlbumMusic::getDelFlag,false).list();
         List<Long> MusicSheetIds = tenantAlbumMusiclist.stream().map(TenantAlbumMusic::getMusicSheetId).collect(Collectors.toList());
         int size = MusicSheetIds.size();
 
+        //获取合奏曲目数量
+        List<TenantAlbumMusic> ensembleLits = tenantAlbumMusicService.lambdaQuery().eq(TenantAlbumMusic::getSubjectType, "ENSEMBLE")
+                .eq(TenantAlbumMusic::getTenantAlbumId, tenantAlbumId)
+                .eq(TenantAlbumMusic::getDelFlag,false).list();
+        List<Long> ensembleMusicSheetIds = ensembleLits.stream().map(TenantAlbumMusic::getMusicSheetId).collect(Collectors.toList());
+
+        album.setEnsembleCounts(ensembleMusicSheetIds.size());
+
+        //获取小曲目的曲目数量
+        List<TenantAlbumMusic> musicLists = tenantAlbumMusicService.lambdaQuery().eq(TenantAlbumMusic::getSubjectType, "MUSIC")
+                .eq(TenantAlbumMusic::getTenantAlbumId, tenantAlbumId)
+                .eq(TenantAlbumMusic::getDelFlag,false).list();
+        List<Long> musicSheetIds = musicLists.stream().map(TenantAlbumMusic::getMusicSheetId).collect(Collectors.toList());
+
+        album.setMusicCounts(musicSheetIds.size());
+
+        //获取声部的曲目数量
+        List<TenantAlbumMusic> subjectLists = tenantAlbumMusicService.lambdaQuery().eq(TenantAlbumMusic::getSubjectType, "SUBJECT")
+                .eq(TenantAlbumMusic::getTenantAlbumId, tenantAlbumId)
+                .eq(TenantAlbumMusic::getDelFlag,false).list();
+        List<Long> subjectSheetIds = subjectLists.stream().map(TenantAlbumMusic::getMusicSheetId).collect(Collectors.toList());
+
+        album.setSubjectCounts(subjectSheetIds.size());
+
+
+
         //Integer musicNum = tenantAlbum.getMusicNum();
         //机构专辑简介
         String describe = tenantAlbum.getDescribe();
@@ -566,7 +594,8 @@ public class MusicAlbumServiceImpl extends ServiceImpl<MusicAlbumDao,MusicAlbum>
         //机构专辑封面
         String coverImg = tenantAlbum.getCoverImg();
         //机构专辑曲目数
-        List<TenantAlbumMusic> tenantAlbumMusiclist = tenantAlbumMusicService.lambdaQuery().eq(TenantAlbumMusic::getTenantAlbumId, tenantAlbumId).list();
+        List<TenantAlbumMusic> tenantAlbumMusiclist = tenantAlbumMusicService.lambdaQuery().eq(TenantAlbumMusic::getTenantAlbumId, tenantAlbumId)
+                .eq(TenantAlbumMusic::getDelFlag,false).list();
         List<Long> MusicSheetIds = tenantAlbumMusiclist.stream().map(TenantAlbumMusic::getMusicSheetId).collect(Collectors.toList());
         int size = MusicSheetIds.size();
 
@@ -575,6 +604,12 @@ public class MusicAlbumServiceImpl extends ServiceImpl<MusicAlbumDao,MusicAlbum>
         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);
@@ -582,6 +617,10 @@ public class MusicAlbumServiceImpl extends ServiceImpl<MusicAlbumDao,MusicAlbum>
         album.setMusicNum(size);
         album.setDescribe(describe);
         album.setSubjectTypes(subjectTypes);
+        album.setCostPrice(costPrice);
+        album.setPurchaseCycle(purchaseCycle);
+        album.setSalePrice(salePrice);
+        album.setOriginalPrice(tenantAlbum.getOriginalPrice());
         return album;
     }
 

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

@@ -17,12 +17,7 @@ import com.yonge.cooleshow.biz.dal.dto.ReasonDto;
 import com.yonge.cooleshow.biz.dal.dto.UserAccountRecordDto;
 import com.yonge.cooleshow.biz.dal.dto.req.OrderReq;
 import com.yonge.cooleshow.biz.dal.dto.req.TeacherMusicSheetAuditReq;
-import com.yonge.cooleshow.biz.dal.dto.search.MusicAlbumDetailSearch;
-import com.yonge.cooleshow.biz.dal.dto.search.MusicSheetSearch;
-import com.yonge.cooleshow.biz.dal.dto.search.StudentMusicSheetOrderSearch;
-import com.yonge.cooleshow.biz.dal.dto.search.StudentMusicSheetSearch;
-import com.yonge.cooleshow.biz.dal.dto.search.TeacherMusicSheetAuditSearch;
-import com.yonge.cooleshow.biz.dal.dto.search.TeacherMusicSheetSearch;
+import com.yonge.cooleshow.biz.dal.dto.search.*;
 import com.yonge.cooleshow.biz.dal.entity.*;
 import com.yonge.cooleshow.biz.dal.enums.*;
 import com.yonge.cooleshow.biz.dal.enums.album.PurchaseRecordTypeEnum;
@@ -33,6 +28,7 @@ import com.yonge.cooleshow.biz.dal.vo.*;
 import com.yonge.cooleshow.biz.dal.vo.res.OrderCreateRes;
 import com.yonge.cooleshow.biz.dal.wrapper.StatGroupWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.UserPaymentOrderWrapper;
+import com.yonge.cooleshow.biz.dal.wrapper.music.MusicCompareWrapper;
 import com.yonge.cooleshow.common.constant.SysConfigConstant;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.common.enums.ActivityShareEnum;
@@ -1704,6 +1700,56 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
     }
 
     @Override
+    public MusicCompareWrapper.SearchData search(MusicCompareWrapper.MusicSearch queryInfo) {
+        MusicCompareWrapper.SearchData searchData= new MusicCompareWrapper.SearchData();
+        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);
+            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.setSort(Optional.ofNullable(record.getFavoriteCount()).orElse(0));
+                    musicNames.add(musicName);
+                }
+                searchData.setMusic(PageUtil.pageInfo(musicSheetVoIPage));
+            }
+        }
+        if (StringUtil.isEmpty(queryInfo.getType()) || queryInfo.getType().equals("ALBUM")) {
+
+            // 查询专辑列表
+            List<Long> albumIds = musicSheetDao.searchAlbum(PageUtil.getPage(queryInfo),queryInfo);
+            MusicAlbumSearch musicSheetSearch = new MusicAlbumSearch();
+            musicSheetSearch.setAlbumIds(albumIds);
+            IPage<MusicAlbumVo> musicAlbumVoIPage = musicAlbumService.selectPage(PageUtil.getPage(queryInfo), musicSheetSearch);
+            List<MusicAlbumVo> records = musicAlbumVoIPage.getRecords();
+            if (CollectionUtils.isNotEmpty(records)) {
+                for (MusicAlbumVo record : records) {
+                    MusicCompareWrapper.MusicName musicName = new MusicCompareWrapper.MusicName();
+                    musicName.setId(record.getId());
+                    musicName.setName(record.getAlbumName());
+                    musicName.setType("ALBUM");
+                    musicName.setSort(Optional.ofNullable(record.getAlbumFavoriteCount()).orElse(0));
+                    musicNames.add(musicName);
+                }
+                searchData.setAlbum(PageUtil.pageInfo(musicAlbumVoIPage));
+            }
+        }
+        musicNames.sort(Comparator.comparing(MusicCompareWrapper.MusicName::getSort).reversed());
+        searchData.setMusicNames(musicNames);
+        return searchData;
+    }
+
+    @Override
     public Boolean updateMusicImg(MusicImgDto musicImgDto, Long musicSheetId) {
         MusicSheet musicSheet = new MusicSheet();
         musicSheet.setMusicImg(musicImgDto.getMusicImg());

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

@@ -320,7 +320,10 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
                 BigDecimal teacherAmount = BigDecimal.ONE.subtract(serviceFee).multiply(expectPrice);
 
                 // 判断分润给机构 还是给老师
-                if (accountTenantTo.getIncomeTenant() != null && accountTenantTo.getIncomeTenant() >0) {
+                // 机构ID = 0 老师设置了不分润
+                if (accountTenantTo.getIncomeTenant() != null && accountTenantTo.getIncomeTenant() == 0) {
+
+                } else if (accountTenantTo.getIncomeTenant() != null && accountTenantTo.getIncomeTenant() >0) {
                     // 分润给机构
                     tenantdivMap.merge(accountTenantTo.getIncomeTenant(), teacherAmount, BigDecimal::add);
                     tenantdivMap.merge(-1L, teacherAmount, BigDecimal::subtract);
@@ -431,7 +434,9 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
             // 老师收入总金额
             BigDecimal teacherAmount = teacherSalaryList.stream().map(CourseScheduleTeacherSalary::getActualSalary).reduce(BigDecimal.ZERO, BigDecimal::add);
             // 判断分润给机构 还是给老师
-            if (accountTenantTo.getIncomeTenant() != null && accountTenantTo.getIncomeTenant() > 0) {
+            if (accountTenantTo.getIncomeTenant() != null && accountTenantTo.getIncomeTenant() == 0) {
+
+            } else if (accountTenantTo.getIncomeTenant() != null && accountTenantTo.getIncomeTenant() > 0) {
                 // 分润给机构
                 tenantdivMap.merge( accountTenantTo.getIncomeTenant() , teacherAmount, BigDecimal::add);
                 tenantdivMap.merge(-1L, teacherAmount, BigDecimal::subtract);
@@ -563,7 +568,9 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
             // 老师收入总金额
             BigDecimal teacherAmount = teacherSalaryList.stream().map(CourseScheduleTeacherSalary::getActualSalary).reduce(BigDecimal.ZERO, BigDecimal::add);
             // 判断分润给机构 还是给老师
-            if (accountTenantTo.getIncomeTenant() !=null && accountTenantTo.getIncomeTenant() >0) {
+            if (accountTenantTo.getIncomeTenant() != null && accountTenantTo.getIncomeTenant() == 0) {
+
+            } else if (accountTenantTo.getIncomeTenant() !=null && accountTenantTo.getIncomeTenant() >0) {
                 // 分润给机构
                 tenantdivMap.merge(accountTenantTo.getIncomeTenant() , teacherAmount, BigDecimal::add);
                 tenantdivMap.merge(-1L, teacherAmount, BigDecimal::subtract);
@@ -640,7 +647,9 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
             accountTenantTo = JSON.parseObject(userAccountConfig, UserPaymentOrderWrapper.AccountTenantTo.class);
         }
 
-        if (accountTenantTo.getIncomeTenant() !=null && accountTenantTo.getIncomeTenant() >0) {
+        if (accountTenantTo.getIncomeTenant() != null && accountTenantTo.getIncomeTenant() == 0) {
+
+        } else if (accountTenantTo.getIncomeTenant() !=null && accountTenantTo.getIncomeTenant() >0) {
             // 分润给机构
             tenantdivMap.merge(accountTenantTo.getIncomeTenant(), teacherAmount, BigDecimal::add);
             tenantdivMap.merge(-1L, teacherAmount, BigDecimal::subtract);
@@ -972,7 +981,9 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
             BigDecimal shareFee = platformFee.multiply(shareFeeRate).setScale(2, RoundingMode.HALF_UP);
             if (shareFee.compareTo(BigDecimal.ZERO) > 0) {
                 // 判断分润给机构 还是给老师
-                if (accountTenantTo.getShareTenant() !=null && accountTenantTo.getShareTenant() > 0) {
+                if (accountTenantTo.getShareTenant() != null && accountTenantTo.getShareTenant() == 0) {
+
+                } else if (accountTenantTo.getShareTenant() !=null && accountTenantTo.getShareTenant() > 0) {
                     // 分润给机构
                     tenantdivMap.merge(accountTenantTo.getShareTenant(), shareFee, BigDecimal::add);
                     tenantdivMap.merge(-1L, shareFee, BigDecimal::subtract);

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

@@ -80,6 +80,8 @@ public class PaymentMerchantConfigServiceImpl extends ServiceImpl<PaymentMerchan
                 yeepayPayConfig.setAlipayAppId(config.getAlipayAppId());
                 yeepayPayConfig.setAlipayPrivateKey(config.getAlipayPrivateKey());
                 yeepayPayConfig.setAlipayPublicKey(config.getAlipayPublicKey());
+                yeepayPayConfig.setMiniAppId(config.getMiniAppId());
+                yeepayPayConfig.setMiniAppSecret(config.getMiniAppSerret());
                 YeepayPaymentServicePlugin plugin;
                 try {
                     plugin = new YeepayPaymentServicePlugin(config.getPaymentVendor(), yeepayPayConfig, false);

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

@@ -6,9 +6,11 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 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.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.dao.EmployeeDao;
 import com.yonge.cooleshow.biz.dal.dao.StudentDao;
 import com.yonge.cooleshow.biz.dal.dao.SubjectDao;
 import com.yonge.cooleshow.biz.dal.dao.TeacherDao;
@@ -19,11 +21,13 @@ import com.yonge.cooleshow.biz.dal.entity.ImGroupMember;
 import com.yonge.cooleshow.biz.dal.entity.Student;
 import com.yonge.cooleshow.biz.dal.entity.StudentTotal;
 import com.yonge.cooleshow.biz.dal.entity.Subject;
+import com.yonge.cooleshow.biz.dal.entity.Teacher;
 import com.yonge.cooleshow.biz.dal.entity.TenantInfo;
 import com.yonge.cooleshow.biz.dal.entity.UserBindingTeacher;
 import com.yonge.cooleshow.biz.dal.entity.UserTenantAlbumRecord;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.mapper.SysUserMapper;
+import com.yonge.cooleshow.biz.dal.mapper.TenantAlbumPurchaseMapper;
 import com.yonge.cooleshow.biz.dal.service.ImGroupMemberService;
 import com.yonge.cooleshow.biz.dal.service.ImGroupService;
 import com.yonge.cooleshow.biz.dal.service.ImUserFriendService;
@@ -32,7 +36,6 @@ import com.yonge.cooleshow.biz.dal.service.StudentTotalService;
 import com.yonge.cooleshow.biz.dal.service.SysConfigService;
 import com.yonge.cooleshow.biz.dal.service.TenantInfoService;
 import com.yonge.cooleshow.biz.dal.service.UserTenantAlbumRecordService;
-import com.yonge.cooleshow.biz.dal.service.im.ImGroupCoreService;
 import com.yonge.cooleshow.biz.dal.vo.MyFollow;
 import com.yonge.cooleshow.biz.dal.vo.StudentHomeVo;
 import com.yonge.cooleshow.biz.dal.vo.StudentVo;
@@ -86,31 +89,30 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, Student> impleme
     private SysUserMapper sysUserMapper;
     @Autowired
     private SubjectDao subjectDao;
-
     @Autowired
-    private ImGroupService imGroupService;
-
+    private TenantInfoService tenantInfoService;
     @Autowired
-    private ImGroupCoreService imGroupCoreService;
+    private UserTenantAlbumRecordService userTenantAlbumRecordService;
+    @Autowired
+    private SysConfigService sysConfigService;
 
     @Autowired
-    private ImGroupMemberService imGroupMemberService;
+    private ImGroupService imGroupService;
 
     @Autowired
-    private TenantInfoService tenantInfoService;
+    private ImGroupMemberService imGroupMemberService;
 
     @Autowired
-    private UserTenantAlbumRecordService userTenantAlbumRecordService;
+    private TenantAlbumPurchaseMapper tenantAlbumPurchaseMapper;
 
     @Autowired
-    private SysConfigService sysConfigService;
+    private EmployeeDao employeeDao;
 
     @Override
     public StudentDao getDao() {
         return baseMapper;
     }
 
-
     @Override
     public StudentVo detail(Long userId) {
         return baseMapper.detail(userId);
@@ -172,11 +174,16 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, Student> impleme
         TenantInfo tenantInfo = tenantInfoService.detail(detail.getTenantId());
         if (tenantInfo != null) {
             studentHomeVo.setTenantName(tenantInfo.getName());
+            QueryWrapper<TenantAlbumPurchase> queryWrapper = new QueryWrapper<>();
+            queryWrapper.lambda().eq(TenantAlbumPurchase::getTenantId, detail.getTenantId());
+            Integer count = tenantAlbumPurchaseMapper.selectCount(queryWrapper);
+            if (count > 0) {
+                studentHomeVo.setTenantAlbumStatus(1);
+            }
             UserTenantAlbumRecord record =
                     userTenantAlbumRecordService.getNewestByTenantIdAndUserId(tenantInfo.getId(), detail.getUserId(),
                             ClientEnum.STUDENT);
             if (record == null || record.getEndTime().getTime() < System.currentTimeMillis()) {
-                studentHomeVo.setTenantAlbumStatus(1);
                 studentHomeVo.setTenantAlbumFlag(YesOrNoEnum.NO);
             } else {
                 studentHomeVo.setTenantAlbumStatus(2);
@@ -491,17 +498,19 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, Student> impleme
         if (student.getTenantId().equals(toTenantId)) {
             return;
         }
-        List<ImGroupMember> groupMembers = imGroupMemberService.lambdaQuery()
-                .eq(ImGroupMember::getUserId, student.getUserId())
-                .eq(ImGroupMember::getRoleType, ClientEnum.STUDENT.getCode())
-                .eq(ImGroupMember::getIsAdmin, false).list();
-        List<String> groupIdList = groupMembers.stream().map(ImGroupMember::getGroupId).distinct()
-                .collect(Collectors.toList());
-        for (String groupId : groupIdList) {
-            try {
-                imGroupService.quit(groupId, student.getUserId(), ClientEnum.STUDENT);
-            } catch (Exception e) {
-                log.error("退出群聊失败", e);
+        if (!student.getTenantId().equals(-1L)) {
+            List<ImGroupMember> groupMembers = imGroupMemberService.lambdaQuery()
+                    .eq(ImGroupMember::getUserId, student.getUserId())
+                    .eq(ImGroupMember::getRoleType, ClientEnum.STUDENT.getCode())
+                    .eq(ImGroupMember::getIsAdmin, false).list();
+            List<String> groupIdList = groupMembers.stream().map(ImGroupMember::getGroupId).distinct()
+                    .collect(Collectors.toList());
+            for (String groupId : groupIdList) {
+                try {
+                    imGroupService.quit(groupId, student.getUserId(), ClientEnum.STUDENT);
+                } catch (Exception e) {
+                    log.error("退出群聊失败", e);
+                }
             }
         }
         this.lambdaUpdate().set(Student::getTenantId, toTenantId)
@@ -509,6 +518,66 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, Student> impleme
                 .update();
     }
 
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void addStudent(StudentWrapper.Student student) {
+        SysUser sysUser = employeeDao.querySysUserByPhone(student.getPhone());
+        if (sysUser == null) {
+            sysUser = new SysUser();
+            sysUser.setUserType(ClientEnum.STUDENT.getCode());
+            //设置默认头像
+            if (StringUtil.isEmpty(sysUser.getAvatar())) {
+                String defaultHeard = sysConfigService.findConfigValue(SysConfigConstant.DEFAULT_HEARD);
+                sysUser.setAvatar(defaultHeard);
+            }
+
+            sysUser.setUsername(student.getName());
+            sysUser.setPhone(student.getPhone());
+            //初始密码,手机号后6位
+            String password = sysUser.getPhone().substring(sysUser.getPhone().length() - 6);
+            sysUser.setPassword(new BCryptPasswordEncoder().encode(password));
+            //插入
+            employeeDao.insertSysUser(sysUser);
+        } else {
+            if (StringUtil.isEmpty(sysUser.getUserType())) {
+                sysUser.setUserType(ClientEnum.STUDENT.getCode());
+            } else if (!sysUser.getUserType().contains(ClientEnum.STUDENT.getCode())) {
+                sysUser.setUserType(sysUser.getUserType() + "," + ClientEnum.STUDENT.getCode());
+            }
+            employeeDao.updateSysUser(sysUser);
+        }
+
+        student.setId(sysUser.getId());
+        Long tenantId = student.getTenantId();
+        // 更新头像
+        if (StringUtils.isEmpty(student.getAvatar())) {
+            String avatar;
+            if (tenantId != -1L) {
+                if (student.getGender().equals(1)) {
+                    avatar = sysConfigService.findConfigValue(SysConfigConstant.TENANT_STUDENT_BOY_AVATAR);
+                } else {
+                    avatar = sysConfigService.findConfigValue(SysConfigConstant.TENANT_STUDENT_GIRL_AVATAR);
+                }
+            } else {
+                avatar = sysConfigService.findConfigValue(SysConfigConstant.DEFAULT_HEARD);
+            }
+            student.setAvatar(avatar);
+        }
+        this.save(student);
+
+        // 加好友
+        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) {
         StudentVo student = detail(studentInfo.getId());
         if (student == null) {

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

@@ -468,6 +468,11 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
     }
 
     private Teacher insertOrUpdateTeacher(TeacherSubmitReq teacherSubmitReq) {
+        if(ESettlementFrom.NO.equals(teacherSubmitReq.getSettlementFrom())){
+            teacherSubmitReq.setIsSettlement(false);
+        }else {
+            teacherSubmitReq.setIsSettlement(true);
+        }
         Teacher teacher = baseMapper.selectById(teacherSubmitReq.getUserId());
         if (null == teacher) {
             teacher = new Teacher();
@@ -996,7 +1001,9 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
             return -1L;
         }
         Teacher teacher = getById(teacherId);
-        if (teacher.getTenantId() != null && teacher.getTenantId() > 0 && ESettlementFrom.TENANT.equals(teacher.getSettlementFrom())) {
+        if (teacher.getIsSettlement() !=null && !teacher.getIsSettlement()) {
+            return 0L;
+        } else if (teacher.getTenantId() != null && teacher.getTenantId() > 0 && ESettlementFrom.TENANT.equals(teacher.getSettlementFrom())) {
             return teacher.getTenantId();
         } else {
             // 分润给老师

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

@@ -3,9 +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.core.toolkit.IdWorker;
+import com.baomidou.mybatisplus.extension.service.additional.query.impl.LambdaQueryChainWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.biz.dal.entity.*;
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.enums.GoodTypeEnum;
 import com.yonge.cooleshow.biz.dal.enums.OrderStatusEnum;
 import com.yonge.cooleshow.biz.dal.enums.SourceTypeEnum;
@@ -92,7 +94,27 @@ public class TenantAlbumServiceImpl extends ServiceImpl<TenantAlbumMapper, Tenan
     @Override
     public IPage<TenantAlbumWrapper.TenantAlbum> selectPage(IPage<TenantAlbumWrapper.TenantAlbum> page,
                                                             TenantAlbumWrapper.TenantAlbumQuery query) {
-        return page.setRecords(baseMapper.selectPage(page, query));
+        //查询机构专辑表数据
+        List<TenantAlbumWrapper.TenantAlbum> tenantAlbums = baseMapper.selectPage(page, query);
+
+        if (CollectionUtils.isNotEmpty(tenantAlbums)){
+            tenantAlbums.stream().forEach(t->{
+                if (t.getMusicNum() == null){
+                    //获取每一个机构专辑Id
+                    String id = t.getId();
+                    //查询机构专辑曲目表里  所对应的曲目数
+                    List<TenantAlbumMusic> list = tenantAlbumMusicService.lambdaQuery().eq(TenantAlbumMusic::getTenantAlbumId, id).eq(TenantAlbumMusic::getDelFlag,false).list();
+                    //获取曲目数量
+                    List<Long> MusicList = list.stream().map(TenantAlbumMusic::getMusicSheetId).collect(Collectors.toList());
+                    int num = MusicList.size();
+                    t.setMusicNum(num);
+                }
+            });
+
+        }
+
+
+        return page.setRecords(tenantAlbums);
     }
 
     /**
@@ -257,7 +279,7 @@ public class TenantAlbumServiceImpl extends ServiceImpl<TenantAlbumMapper, Tenan
 
                 TenantAlbumWrapper.TenantAlbumContent tenantAlbumContent = JSON
                         .parseObject(userOrderDetailVo.getBizContent(), TenantAlbumWrapper.TenantAlbumContent.class);
-                TenantAlbumPurchase tenantAlbumPurchase = new TenantAlbumPurchase();
+                TenantAlbumPurchase tenantAlbumPurchase =  tenantAlbumPurchaseService.getByOrderNo(userOrderDetailVo.getOrderNo());
                 tenantAlbumPurchase.setTenantId(tenantAlbumContent.getTenantId());
                 tenantAlbumPurchase.setTenantAlbumId(userOrderDetailVo.getBizId());
                 tenantAlbumPurchase.setPurchaseTime(userOrderDetailVo.getCreateTime());
@@ -267,7 +289,7 @@ public class TenantAlbumServiceImpl extends ServiceImpl<TenantAlbumMapper, Tenan
                 tenantAlbumPurchase.setOrderNo(userOrderDetailVo.getOrderNo());
                 tenantAlbumPurchase.setPurchasePrice(userOrderDetailVo.getActualPrice());
                 tenantAlbumPurchase.setPurchaseStatus(OrderStatusEnum.PAID.getCode());
-                tenantAlbumPurchaseService.save(tenantAlbumPurchase);
+                tenantAlbumPurchaseService.updateById(tenantAlbumPurchase);
 
                 List<TenantActivationCode> tenantActivationCodes = new ArrayList<>();
                 for (int i = 0; i < userOrderDetailVo.getGoodNum(); i++) {
@@ -275,7 +297,8 @@ public class TenantAlbumServiceImpl extends ServiceImpl<TenantAlbumMapper, Tenan
                     tenantActivationCode.setTenantId(tenantAlbumContent.getTenantId());
                     tenantActivationCode.setTenantAlbumId(tenantAlbumContent.getTenantAlbumId());
                     tenantActivationCode.setTenantAlbumPurchaseId(tenantAlbumPurchase.getId());
-                    long l = Long.parseLong(new Date().getTime() + i + String.valueOf(tenantAlbumPurchase.getId()));
+                    String s = String.valueOf(tenantAlbumPurchase.getId());
+                    long l = Long.parseLong(new Date().getTime() + i + s.substring(s.length()-6));
                     tenantActivationCode.setActivationCode(StringUtil.DeciamlToThirtySix(l,7));
 //                    tenantActivationCode.setActivationCode(IdWorker.get32UUID());
                     tenantActivationCode.setSendStatus(EActivationCode.WAIT);
@@ -360,6 +383,41 @@ public class TenantAlbumServiceImpl extends ServiceImpl<TenantAlbumMapper, Tenan
         return list.stream().collect(Collectors.groupingBy(TenantAlbumMusic::getTenantAlbumId,Collectors.counting()));
     }
 
+    @Override
+    public void orderAfterSheet(UserPaymentOrderWrapper.OrderGoodsInfo orderGoodsInfo) {
+        // 机构   插入机构专辑购买记录,生成机构专辑激活码
+
+        if (!orderGoodsInfo.getPaymentClient().equals(ClientEnum.TENANT)) {
+            return;
+        }
+
+
+        TenantAlbumWrapper.TenantAlbumContent tenantAlbumContent = JSON
+                .parseObject(JSON.toJSONString(orderGoodsInfo.getBizContent()), TenantAlbumWrapper.TenantAlbumContent.class);
+        TenantAlbumPurchase tenantAlbumPurchase = new TenantAlbumPurchase();
+        tenantAlbumPurchase.setTenantId(tenantAlbumContent.getTenantId());
+        tenantAlbumPurchase.setTenantAlbumId(orderGoodsInfo.getBizId());
+        tenantAlbumPurchase.setPurchaseTime(new Date());
+        tenantAlbumPurchase.setPurchaseQuantity(orderGoodsInfo.getUserOrderDetail().getGoodNum());
+        tenantAlbumPurchase.setPurchaseCycle(tenantAlbumContent.getBuyCycle());
+        tenantAlbumPurchase.setActiveQuantity(0);
+        tenantAlbumPurchase.setOrderNo(orderGoodsInfo.getOrderNo());
+        tenantAlbumPurchase.setPurchasePrice(orderGoodsInfo.getUserOrderDetail().getActualPrice());
+        tenantAlbumPurchase.setPurchaseStatus(OrderStatusEnum.WAIT_PAY.getCode());
+        tenantAlbumPurchaseService.save(tenantAlbumPurchase);
+    }
+
+    @Override
+    public void buyCancel(UserOrderDetailVo userOrderDetailVo) {
+
+        TenantAlbumPurchase tenantAlbumPurchase =  tenantAlbumPurchaseService.getByOrderNo(userOrderDetailVo.getOrderNo());
+        if (tenantAlbumPurchase == null) {
+            return;
+        }
+        tenantAlbumPurchase.setPurchaseStatus(OrderStatusEnum.CLOSE.getCode());
+        tenantAlbumPurchaseService.updateById(tenantAlbumPurchase);
+    }
+
     @Transactional(rollbackFor = Exception.class)
     private void insertAlbumMusic(Long tenantId, TenantAlbum tenantAlbum,
                                   List<TenantAlbumWrapper.MusicSheetData> musicSheetDataList) {

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

@@ -20,6 +20,7 @@ import com.yonge.cooleshow.biz.dal.mapper.TenantInfoMapper;
 import com.yonge.cooleshow.biz.dal.mapper.TenantStaffMapper;
 import com.yonge.cooleshow.biz.dal.service.SysAreaService;
 import com.yonge.cooleshow.biz.dal.service.SysConfigService;
+import com.yonge.cooleshow.biz.dal.service.SysUserService;
 import com.yonge.cooleshow.biz.dal.service.TenantInfoService;
 import com.yonge.cooleshow.biz.dal.wrapper.TenantAlbumWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.TenantInfoWrapper;
@@ -77,6 +78,10 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoMapper, TenantI
     TenantApplyRecordMapper tenantApplyRecordMapper;
 
     @Autowired
+    TenantInfoService tenantInfoService;
+
+
+    @Autowired
     private TeacherDao teacherDao;
 
     @Autowired
@@ -183,7 +188,7 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoMapper, TenantI
 
         for (TenantInfoWrapper.TenantInfo info : tenantInfos) {
             info.setTeacherCounts(teacherIdCountMap.getOrDefault(info.getId(), 0));
-            info.setTeacherCounts(studentIdCountMap.getOrDefault(info.getId(), 0));
+            info.setStudentCounts(studentIdCountMap.getOrDefault(info.getId(), 0));
         }
 
         //获取省市区信息
@@ -201,7 +206,16 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoMapper, TenantI
     @Transactional(rollbackFor = Exception.class)
     @Override
     public Boolean add(TenantInfo tenantInfo) {
-        SysUser sysUser = getOrCreateAccount(tenantInfo, null);
+        TenantInfo oldInfo =new TenantInfo();
+        //查询要新增的信息 是否存在机构
+        String phone = tenantInfo.getPhone();
+        if (StringUtils.isNotEmpty(phone)){
+            List<TenantInfo> list = tenantInfoService.lambdaQuery().eq(TenantInfo::getPhone, phone).list();
+            if (CollectionUtils.isNotEmpty(list)){
+                 oldInfo = list.get(0);
+            }
+        }
+        SysUser sysUser = getOrCreateAccount(tenantInfo, oldInfo);
         tenantInfo.setEnableFlag(true);
         if (StringUtils.isEmpty(tenantInfo.getLogo())) {
             // todo 设置默认logo
@@ -209,6 +223,7 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoMapper, TenantI
         }
         tenantInfo.setEnableFlag(true);
         tenantInfo.setUserId(sysUser.getId());
+        tenantInfo.setUsername(sysUser.getUsername());
         tenantInfoMapper.insert(tenantInfo);
 
         TenantStaff tenantStaff = new TenantStaff();
@@ -231,8 +246,8 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoMapper, TenantI
         if (!sysUsers.isEmpty()) {
             sysUser = sysUsers.get(0);
             TenantStaff tenantStaff = tenantStaffMapper.selectByUserId(sysUser.getId());
-            if (tenantStaff != null && oldTenantInfo != null &&
-                    !tenantStaff.getUserId().equals(oldTenantInfo.getUserId())) {
+            if ( !ObjectUtil.isEmpty(tenantStaff) && !ObjectUtil.isEmpty(oldTenantInfo) &&
+                    tenantStaff.getUserId().equals(oldTenantInfo.getUserId())) {
                 throw new BizException("手机号已经注册机构账号");
             }
             //获取当前账户的用户类型

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

@@ -280,11 +280,13 @@ public class TenantUnbindRecordServiceImpl extends ServiceImpl<TenantUnbindRecor
     @Override
     public void sendPlatformAuditMessage() {
         String configValue = sysConfigService.findConfigValue(SysConfigConstant.TENANT_USER_UNBIND_EXPIRE_TIME);
+        String unBindPhone = sysConfigService.findConfigValue(SysConfigConstant.TENANT_USER_UNBIND_PHONE);
         // 默认5天
         long expireTime = 5L;
         try {
             expireTime = Long.parseLong(configValue);
         } catch (Exception e) {
+            expireTime = 5L;
         }
         // 查询机构超出5天未处理的解绑申请
         Integer count = tenantUnbindRecordService.lambdaQuery()
@@ -308,7 +310,7 @@ public class TenantUnbindRecordServiceImpl extends ServiceImpl<TenantUnbindRecor
                     continue;
                 }
                 Map<Long, String> receivers = new HashMap<>();
-                receivers.put(unbindAuthUser.getUserId(), sysUser.getPhone());
+                receivers.put(unbindAuthUser.getUserId(), unBindPhone);
                 sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS,
                         MessageTypeEnum.PLATFORM_AUDIT_UNBIND,
                         receivers, null, 0, null, ClientEnum.SYSTEM.getCode(), count, finalExpireTime);

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

@@ -141,6 +141,9 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
     @Autowired
     private MusicAlbumService musicAlbumService;
 
+    @Autowired
+    private UserOrderService userOrderService;
+
     //验证订单是否可以下单,获取订单金额信息
     private static final Map<GoodTypeEnum, Function<OrderReq.OrderReqInfo, HttpResponseResult<OrderCreateRes>>> orderCreate = new HashMap<>();
     //插入订单后执行
@@ -208,6 +211,7 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
         orderCancel.put(GoodTypeEnum.MUSIC, musicSheetService::buyMusicSheetCancel);
         // 专辑购买
         orderCancel.put(GoodTypeEnum.ALBUM, musicSheetService::buyMusicSheetCancel);
+        orderCancel.put(GoodTypeEnum.TENANT_ALBUM, tenantAlbumService::buyCancel);
     }
 
     @Override
@@ -282,7 +286,7 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
 
 
     @Override
-    @Transactional(rollbackFor = Exception.class)
+//    @Transactional(rollbackFor = Exception.class)
     public void setSuccessStatus() {
         OrderSearch query = new OrderSearch();
         query.setPaymentVersion(EPaymentVersion.V1);
@@ -291,7 +295,7 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
          for (UserOrderVo userOrderVo : userOrderVos) {
              DistributedLock.of(redissonClient)
                      .runIfLockCanGet(CacheNameEnum.LOCK_EXECUTE_ORDER.getRedisKey(userOrderVo.getOrderNo())
-                             , () -> testOrderSuccess(userOrderVo.getOrderNo()), 60L, TimeUnit.SECONDS);
+                             , () -> userOrderService.testOrderSuccess(userOrderVo.getOrderNo()), 60L, TimeUnit.SECONDS);
         }
 
         query.setPaymentVersion(EPaymentVersion.V2);
@@ -1312,6 +1316,7 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
         return BigDecimal.ZERO;
     }
 
+    @Override
     @Transactional(rollbackFor = Exception.class)
     public void testOrderSuccess(String orderNo) {
         if (StringUtil.isEmpty(orderNo)) {

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

@@ -178,6 +178,8 @@ public class UserPaymentCoreServiceImpl implements UserPaymentCoreService {
         orderSuccessAfter.put(GoodTypeEnum.MUSIC, musicSheetService::orderAfterSheet);
         // 专辑购买
         orderSuccessAfter.put(GoodTypeEnum.ALBUM, musicSheetService::orderAfterSheet);
+        // 机构专辑
+        orderSuccessAfter.put(GoodTypeEnum.TENANT_ALBUM, tenantAlbumService::orderAfterSheet);
 
         /**********订单完成后 数据处理******************/
         // 沿用以前的流程
@@ -747,7 +749,8 @@ public class UserPaymentCoreServiceImpl implements UserPaymentCoreService {
         }
 
         // 微信支付,需要校验code值是否为空
-        if (EPaymentChannel.WX_PUB.getCode().equals(reqConfig.getPaymentChannel())
+        if ((EPaymentChannel.WX_PUB.getCode().equals(reqConfig.getPaymentChannel())
+                ||EPaymentChannel.WX_LITE.getCode().equals(reqConfig.getPaymentChannel()))
             && StringUtils.isBlank(reqConfig.getCode())) {
             throw new BizException("微信支付code值为空");
         }

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

@@ -173,7 +173,7 @@ public class UserPaymentOrderServiceImpl  implements UserPaymentOrderService {
             throw new BizException("支付方式不支持");
         }
 
-        UserOrderPayment newestPayment = userOrderPaymentService.getNewestPayment(order.getTransNo(), userOrder.getOrderNo());
+        UserOrderPayment newestPayment = userOrderPaymentService.getNewestPayment(order.getTransNo(), order1.getOrderNo());
         if (newestPayment == null) {
             newestPayment = new UserOrderPayment();
         }

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

@@ -104,10 +104,11 @@ public class UserTenantAlbumRecordServiceImpl extends ServiceImpl<UserTenantAlbu
                         .last("limit 1").one();
                 vo.setTenantId(one.getTenantId().toString());
 
-                //查询曲目表
+
                 TenantInfo tenantInfo = tenantInfoService.getById(one.getTenantId());
                 vo.setTenantName(tenantInfo.getName());
-
+                vo.setTenantImg(tenantInfo.getLogo());
+                //查询机构专辑曲目表
                 List<TenantAlbumMusic> tenantAlbumMusics = tenantAlbumMusicService.lambdaQuery()
                         .eq(TenantAlbumMusic::getTenantAlbumId, i.getId())
                         .eq(TenantAlbumMusic::getDelFlag, false)
@@ -137,7 +138,7 @@ public class UserTenantAlbumRecordServiceImpl extends ServiceImpl<UserTenantAlbu
                     List<TenantAlbumWrapper.TenantAlbumSheet> tenantAlbumSheets = value.stream().map(next -> {
 
                         TenantAlbumWrapper.TenantAlbumSheet tenantAlbumSheet = new TenantAlbumWrapper.TenantAlbumSheet();
-                        BeanUtils.copyProperties(value.get(0), tenantAlbumSheet);
+                        BeanUtils.copyProperties(next, tenantAlbumSheet);
                         Long musicSheetId = tenantAlbumSheet.getMusicSheetId();
                         MusicSheetVo musicSheet = idMsMap.getOrDefault(musicSheetId, new MusicSheetVo());
                         tenantAlbumSheet.setMusicSheetName(musicSheet.getMusicSheetName());
@@ -271,28 +272,31 @@ public class UserTenantAlbumRecordServiceImpl extends ServiceImpl<UserTenantAlbu
         //机构专辑封面
         String coverImg = tenantAlbum.getCoverImg();
         //机构专辑曲目数
-        List<TenantAlbumMusic> tenantAlbumMusiclist = tenantAlbumMusicService.lambdaQuery().eq(TenantAlbumMusic::getTenantAlbumId, tenantAlbumId).list();
+        List<TenantAlbumMusic> tenantAlbumMusiclist = tenantAlbumMusicService.lambdaQuery().eq(TenantAlbumMusic::getTenantAlbumId, tenantAlbumId).eq(TenantAlbumMusic::getDelFlag,false).list();
         List<Long> MusicSheetIds = tenantAlbumMusiclist.stream().map(TenantAlbumMusic::getMusicSheetId).collect(Collectors.toList());
         int size = MusicSheetIds.size();
         //Integer musicNum = tenantAlbum.getMusicNum();
 
         //获取合奏曲目数量
         List<TenantAlbumMusic> ensembleLits = tenantAlbumMusicService.lambdaQuery().eq(TenantAlbumMusic::getSubjectType, "ENSEMBLE")
-                .eq(TenantAlbumMusic::getTenantAlbumId, tenantAlbumId).list();
+                .eq(TenantAlbumMusic::getTenantAlbumId, tenantAlbumId)
+                .eq(TenantAlbumMusic::getDelFlag,false).list();
         List<Long> ensembleMusicSheetIds = ensembleLits.stream().map(TenantAlbumMusic::getMusicSheetId).collect(Collectors.toList());
 
         album.setEnsembleCounts(ensembleMusicSheetIds.size());
 
         //获取小曲目的曲目数量
         List<TenantAlbumMusic> musicLists = tenantAlbumMusicService.lambdaQuery().eq(TenantAlbumMusic::getSubjectType, "MUSIC")
-                .eq(TenantAlbumMusic::getTenantAlbumId, tenantAlbumId).list();
+                .eq(TenantAlbumMusic::getTenantAlbumId, tenantAlbumId)
+                .eq(TenantAlbumMusic::getDelFlag,false).list();
         List<Long> musicSheetIds = musicLists.stream().map(TenantAlbumMusic::getMusicSheetId).collect(Collectors.toList());
 
         album.setMusicCounts(musicSheetIds.size());
 
         //获取声部的曲目数量
         List<TenantAlbumMusic> subjectLists = tenantAlbumMusicService.lambdaQuery().eq(TenantAlbumMusic::getSubjectType, "SUBJECT")
-                .eq(TenantAlbumMusic::getTenantAlbumId, tenantAlbumId).list();
+                .eq(TenantAlbumMusic::getTenantAlbumId, tenantAlbumId)
+                .eq(TenantAlbumMusic::getDelFlag,false).list();
         List<Long> subjectSheetIds = subjectLists.stream().map(TenantAlbumMusic::getMusicSheetId).collect(Collectors.toList());
 
         album.setSubjectCounts(subjectSheetIds.size());

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

@@ -4,6 +4,7 @@ import com.alibaba.excel.annotation.ExcelProperty;
 import com.alibaba.fastjson.JSON;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.microsvc.toolkit.common.response.paging.QueryInfo;
+import com.yonge.cooleshow.common.enums.EActivationCode;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -48,6 +49,9 @@ public class TenantActivationCodeWrapper {
         @ApiModelProperty("专辑购买ID")
         private Long tenantAlbumPurchaseId;
 
+        @ApiModelProperty("发送状态")
+        private EActivationCode sendStatus;
+
         @ApiModelProperty("激活状态")
         private Boolean activationStatus;
 

+ 6 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/TenantAlbumPurchaseWrapper.java

@@ -43,6 +43,9 @@ public class TenantAlbumPurchaseWrapper {
         @ApiModelProperty(value = "排序规则", hidden = true)
         private String orderBy;
 
+
+        @ApiModelProperty("采购状态 WAIT_PAY 待支付   PAID 已付款 CLOSE 已关闭")
+        private String purchaseStatus;
         public String getKeyword() {
             return Optional.ofNullable(keyword).filter(StringUtils::isNotBlank).orElse(null);
         }
@@ -70,8 +73,10 @@ public class TenantAlbumPurchaseWrapper {
         private Long tenantAlbumId;
 
         @ApiModelProperty("机构专辑名称")
-        private Long tenantAlbumName;
+        private String tenantAlbumName;
 
+        @ApiModelProperty("机构专辑图片")
+        private String tenantAlbumImg;
         @ApiModelProperty("采购时间")
         private Date purchaseTime;
 

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

@@ -82,6 +82,9 @@ public class TenantAlbumWrapper {
         @ApiModelProperty("机构名称")
         private String tenantName;
 
+        @ApiModelProperty("机构封面")
+        private String tenantImg;
+
         @ApiModelProperty("专辑介绍")
         private String describe;
 

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

@@ -4,6 +4,7 @@ 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.fasterxml.jackson.annotation.JsonFormat;
 import com.microsvc.toolkit.common.response.paging.QueryInfo;
 import com.yonge.cooleshow.common.enums.ETenantUnBindAuditStatus;
 import io.swagger.annotations.ApiModel;
@@ -17,6 +18,7 @@ import lombok.Builder;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 import org.apache.commons.lang3.StringUtils;
+import org.springframework.format.annotation.DateTimeFormat;
 
 /**
  * 机构解绑历史表
@@ -102,9 +104,13 @@ public class TenantUnbindHistoryWrapper {
         private String reason;
 
         @ApiModelProperty("后台介入时间")
+        @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
         private Date interveneTime;
 
         @ApiModelProperty("创建时间")
+        @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
         private Date createTime;
 
         public String jsonString() {

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

@@ -901,11 +901,11 @@ public class UserPaymentOrderWrapper {
     @ApiModel("AccountTo-订单金额接收方")
     public static class AccountTenantTo implements Serializable {
 
-        @ApiModelProperty("收入机构  -1 默认老师自己")
+        @ApiModelProperty("收入机构  -1 默认老师自己 0不分润")
         private Long incomeTenant = -1L;
 
 
-        @ApiModelProperty("分享机构  -1 默认老师自己")
+        @ApiModelProperty("分享机构  -1 默认老师自己 0不分润")
         private Long shareTenant = -1L;
 
 

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

@@ -7,6 +7,9 @@ import com.yonge.cooleshow.biz.dal.enums.FeatureType;
 import com.yonge.cooleshow.biz.dal.enums.HeardLevelEnum;
 import com.yonge.cooleshow.biz.dal.enums.MK;
 import com.yonge.cooleshow.biz.dal.enums.music.MusicCompareType;
+import com.yonge.cooleshow.biz.dal.vo.MusicAlbumVo;
+import com.yonge.cooleshow.biz.dal.vo.MusicSheetVo;
+import com.yonge.toolset.base.page.PageInfo;
 import com.yonge.toolset.base.page.QueryInfo;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
@@ -14,6 +17,7 @@ import lombok.Builder;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.NoArgsConstructor;
+import org.checkerframework.checker.units.qual.A;
 
 import java.io.Serializable;
 import java.math.BigDecimal;
@@ -358,4 +362,70 @@ public class MusicCompareWrapper {
         }
 
     }
+
+
+    /**
+     * 用户曲目练习时间统计
+     */
+    @Data
+    @Builder
+    @NoArgsConstructor
+    @AllArgsConstructor
+    public static class MusicSearch extends QueryInfo {
+
+        @ApiModelProperty("声部ID ")
+        private Integer subjectId;
+
+        @ApiModelProperty("名称 ")
+        private String name;
+
+
+        @ApiModelProperty("类型 MUSIC 曲目 ALBUM专辑")
+        private String type;
+    }
+
+
+
+    /**
+     * 用户曲目练习时间统计
+     */
+    @Data
+    @Builder
+    @NoArgsConstructor
+    @AllArgsConstructor
+    public static class SearchData {
+
+        @ApiModelProperty("下拉名称 ")
+        private List<MusicName> musicNames;
+
+        @ApiModelProperty("曲目分页")
+        private PageInfo<MusicSheetVo> music;
+
+        @ApiModelProperty("专辑分页")
+        private PageInfo<MusicAlbumVo> album;
+    }
+
+
+    /**
+     * 用户曲目练习时间统计
+     */
+    @Data
+    @Builder
+    @NoArgsConstructor
+    @AllArgsConstructor
+    public static class MusicName{
+
+        @ApiModelProperty("曲目/专辑ID ")
+        private Long id;
+
+        @ApiModelProperty("名称 ")
+        private String name;
+
+
+        @ApiModelProperty("类型 MUSIC 曲目 ALBUM专辑")
+        private String type;
+
+        @ApiModelProperty("排序")
+        private Integer sort = 0;
+    }
 }

+ 6 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicAlbumMapper.xml

@@ -92,6 +92,12 @@
             <if test="query.paymentType != null">
                 and t.payment_type_ = #{query.paymentType}
             </if>
+            <if test="query.albumIds != null and query.albumIds.size() != 0">
+                and t.id_ in
+                <foreach collection="query.albumIds" item="item" open="(" close=")" separator=",">
+                    #{item}
+                </foreach>
+            </if>
         </where>
         order by t.sort_number_ desc
         <if test="query.sortBy != null">

+ 29 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicSheetMapper.xml

@@ -804,5 +804,34 @@
         </foreach>
         group by user_id_
     </select>
+
+    <select id="searchMusic" resultType="java.lang.Long">
+        select id_ from music_sheet  t
+            <where>
+                t.state_=1 and t.audit_version_ = 0 and del_flag_ = 0 and 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>
+            </where>
+        order by t.top_flag_ desc, t.sort_number_ desc, t.favorite_count_ desc
+
+    </select>
+
+    <select id="searchAlbum" resultType="java.lang.Long">
+        select id_ from music_album t
+        <where>
+            t.album_status_=1 and del_flag_=0 and audit_version_ = 0
+            <if test="param.subjectId != null">
+                and ( t.subject_id_ = #{param.subjectId} or t.subject_id_ is null or t.subject_id_ = '')
+            </if>
+            <if test="param.name != null and param.name != ''">
+                and t.album_name_ like concat('%',#{param.name},'%')
+            </if>
+        </where>
+        order by  t.sort_number_ desc
+    </select>
     <!--单曲专辑数量统计-->
 </mapper>

+ 9 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/TenantActivationCodeMapper.xml

@@ -24,6 +24,9 @@
         FROM tenant_activation_code t
         LEFT JOIN tenant_album_purchase ta on t.tenant_album_purchase_id_ = ta.id_
         LEFT JOIN sys_user su on t.activation_user_id_ = su.id_
+        <if test="param.orderNo != null and param.orderNo != ''">
+            left join tenant_album_purchase t4 on t4.id_ = t.tenant_album_purchase_id_
+        </if>
         <where>
             <if test="param.keyword != null and param.keyword.trim() != ''">
                 AND (
@@ -37,6 +40,9 @@
             <if test="param.tenantAlbumPurchaseId != null">
                 AND t.tenant_album_purchase_id_ = #{param.tenantAlbumPurchaseId}
             </if>
+            <if test="param.sendStatus != null">
+                AND t.send_status_ = #{param.sendStatus}
+            </if>
             <if test="param.activationStatus != null">
                 AND t.activation_status_ = #{param.activationStatus}
             </if>
@@ -49,6 +55,9 @@
             <if test="param.activationEndTime != null">
                 AND #{param.activationEndTime} >= t.activation_time_
             </if>
+            <if test="param.orderNo != null and param.orderNo != ''">
+                and ${param.orderNo} = t4.order_no_
+            </if>
         </where>
         order by t.activation_status_ asc, t.id_ desc
     </select>

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

@@ -35,5 +35,6 @@
                 and i.id_= #{param.tenantId}
             </if>
         </where>
+        order by t.create_time_ DESC
     </select>
 </mapper>

+ 9 - 1
cooleshow-user/user-biz/src/main/resources/config/mybatis/TenantAlbumPurchaseMapper.xml

@@ -22,9 +22,17 @@
     <select id="selectPage"
             resultType="com.yonge.cooleshow.biz.dal.wrapper.TenantAlbumPurchaseWrapper$TenantAlbumPurchase">
         SELECT
-        <include refid="baseColumns"/>,ta.name_ as tenantAlbumName
+        <include refid="baseColumns"/>,ta.name_ as tenantAlbumName,ta.cover_img_ as tenantAlbumImg
         FROM tenant_album_purchase t
         LEFT JOIN tenant_album ta on t.tenant_album_id_ = ta.id_
+        <where>
+        <if test="param.tenantId != null">
+                AND t.tenant_id_ = #{param.tenantId}
+            </if>
+            <if test="param.purchaseStatus != null and param.purchaseStatus.trim() != ''">
+                AND t.purchase_status_ = #{param.purchaseStatus}
+            </if>
+        </where>
         <choose>
             <when test="param.orderBy != null and param.orderBy.trim() != ''">
                 order by #{param.orderBy}

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

@@ -103,7 +103,7 @@
                 and t.region_code_ = #{param.regionCode}
             </if>
         </where>
-
+        order by t.create_time_ desc
 	</select>
 
     <select id="queryTeacherCounts" resultType="com.yonge.cooleshow.biz.dal.entity.TeacherCounts">

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

@@ -1,5 +1,6 @@
 package com.yonge.cooleshow.student.controller;
 
+import com.yonge.cooleshow.biz.dal.wrapper.music.MusicCompareWrapper;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
@@ -405,4 +406,13 @@ public class MusicSheetController extends BaseController {
         }
         return succeed(appMusicSheetVo);
     }
+
+
+    @ApiOperation(value = "搜索")
+    @PostMapping(value="/search")
+    public HttpResponseResult<MusicCompareWrapper.SearchData> search(@RequestBody MusicCompareWrapper.MusicSearch queryInfo) {
+        return succeed(musicSheetService.search(queryInfo));
+    }
+
+
 }

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

@@ -13,6 +13,8 @@ import com.yonge.cooleshow.biz.dal.entity.TenantActivationCode;
 import com.yonge.cooleshow.biz.dal.entity.TenantAlbumPurchase;
 import com.yonge.cooleshow.biz.dal.entity.TenantInfo;
 import com.yonge.cooleshow.biz.dal.entity.TenantStaff;
+import com.yonge.cooleshow.biz.dal.enums.SendStatusEnum;
+import com.yonge.cooleshow.biz.dal.enums.im.EImSendStatus;
 import com.yonge.cooleshow.biz.dal.service.TenantActivationCodeService;
 import com.yonge.cooleshow.biz.dal.service.TenantAlbumPurchaseService;
 import com.yonge.cooleshow.biz.dal.service.TenantInfoService;
@@ -138,7 +140,7 @@ public class TenantActivationCodeController extends BaseController {
 
     @GetMapping("/exportActiveCode")
     @ApiOperation(value = "导出模板")
-    public void exportActiveCode(HttpServletResponse response) {
+    public void exportActiveCode(HttpServletResponse response,String orderNo) {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if (sysUser == null) {
             throw new BizException("请登录");
@@ -149,6 +151,8 @@ public class TenantActivationCodeController extends BaseController {
                 new TenantActivationCodeWrapper.TenantActivationCodeQuery();
         query.setTenantId(tenantId);
         query.setActivationStatus(false);
+        query.setTenantAlbumPurchaseId(Long.valueOf(orderNo));
+        query.setSendStatus(EActivationCode.WAIT);
         query.setPage(1);
         query.setRows(9999);
         IPage<TenantActivationCodeWrapper.TenantActivationCode> queryInfo =
@@ -171,6 +175,43 @@ public class TenantActivationCodeController extends BaseController {
         }
     }
 
+
+    @GetMapping("/exportOrderCode")
+    @ApiOperation(value = "导出订单激活码模板")
+    public void exportOrderCode(HttpServletResponse response,String orderNo) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            throw new BizException("请登录");
+        }
+        Long tenantId = sysUser.getTenantId();
+
+        TenantActivationCodeWrapper.TenantActivationCodeQuery query =
+                new TenantActivationCodeWrapper.TenantActivationCodeQuery();
+        query.setTenantId(tenantId);
+        query.setActivationStatus(false);
+        query.setOrderNo(orderNo);
+        query.setPage(1);
+        query.setRows(9999);
+        IPage<TenantActivationCodeWrapper.TenantActivationCode> queryInfo =
+                tenantActivationCodeService.selectPage(QueryInfo.getPage(query), query);
+        List<TenantActivationCodeWrapper.TenantActivationCode> rows = queryInfo.getRecords();
+        if (rows.isEmpty()) {
+            throw new BizException("没有可导出数据");
+        }
+
+        try (OutputStream outputStream = response.getOutputStream()) {
+            HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"激活码"}, new String[]{
+                    "activationCode"}, rows);
+            response.setContentType("application/octet-stream");
+            response.setHeader("Content-Disposition", "attac:wq" +
+                    "hment;filename=active_code-" + DateUtil.getDate(new Date()) + ".xls");
+            workbook.write(outputStream);
+            outputStream.flush();
+        } catch (Exception e) {
+            log.error("导出激活码异常", e);
+        }
+    }
+
     @PostMapping("/importActiveCode")
     @ApiOperation(value = "导入", notes = "传入file")
     public HttpResponseResult<List<ErrMsg>> importActiveCode(

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

@@ -10,8 +10,10 @@ import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.entity.TenantAlbumPurchase;
 import com.yonge.cooleshow.biz.dal.entity.TenantInfo;
+import com.yonge.cooleshow.biz.dal.entity.TenantStaff;
 import com.yonge.cooleshow.biz.dal.service.TenantAlbumPurchaseService;
 import com.yonge.cooleshow.biz.dal.service.TenantInfoService;
+import com.yonge.cooleshow.biz.dal.service.TenantStaffService;
 import com.yonge.cooleshow.biz.dal.wrapper.TenantAlbumPurchaseWrapper;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
@@ -48,6 +50,8 @@ public class TenantAlbumPurchaseController extends BaseController {
 
     @Autowired
     private TenantInfoService tenantInfoService;
+    @Autowired
+    private TenantStaffService tenantStaffService;
 
     @ApiOperation(value = "详情", notes = "机构专辑采购-根据详情ID查询单条, 传入id")
     @ApiImplicitParams({
@@ -108,7 +112,11 @@ public class TenantAlbumPurchaseController extends BaseController {
 
     private TenantInfo getTenantInfo() {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
-        TenantInfo tenantInfo = tenantInfoService.lambdaQuery().eq(TenantInfo::getUserId, sysUser.getId())
+        TenantStaff tenantStaff = tenantStaffService.getByUserId(sysUser.getId());
+        if (tenantStaff == null) {
+            throw new BizException("非法请求");
+        }
+        TenantInfo tenantInfo = tenantInfoService.lambdaQuery().eq(TenantInfo::getId, tenantStaff.getTenantId())
                 .last("limit 1").one();
         if (tenantInfo == null) {
             throw new BizException("非法请求");

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

@@ -15,6 +15,7 @@ import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.service.TenantStaffService;
 import com.yonge.cooleshow.biz.dal.service.UserOrderService;
 import com.yonge.cooleshow.biz.dal.service.UserPaymentCoreService;
+import com.yonge.cooleshow.biz.dal.vo.UserOrderVo;
 import com.yonge.cooleshow.biz.dal.wrapper.UserPaymentOrderWrapper;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.common.enums.CacheNameEnum;
@@ -202,6 +203,23 @@ public class UserOrderController {
         return succeed(userPaymentCoreService.orderPayType(payTypeReq));
     }
 
+    /**
+     * 查询单条
+     */
+    @GetMapping("/detailByOrderNo/{orderNo}")
+    @ApiOperation(value = "通过订单号查询详情", notes = "传入orderNo")
+    public HttpResponseResult<UserOrderVo> detailByOrderNo(@PathVariable("orderNo") String orderNo) {
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null || null == user.getId()) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        UserOrder param = new UserOrder();
+        param.setUserId(user.getId());
+        param.setOrderNo(orderNo);
+        UserOrderVo detail = userOrderService.detailApp(param);
+        return succeed(detail);
+    }
+
 
 
 }

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

@@ -104,7 +104,6 @@ public class OpenStudentController extends BaseController {
         if (studentId != null) {
             Student one = studentService.lambdaQuery()
                     .eq(Student::getUserId, studentId)
-                    .eq(Student::getHideFlag, 0)
                     .last("limit 1").one();
             if (one != null) {
                 if (one.getTenantId().equals(-1L)) {

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

@@ -365,9 +365,9 @@ public class StringUtil {
 
         String s ="00000000" + DeciamlToThirtySix(iSrc);
         // 获取string 后7位
-//        return s.substring(s.length()-7);
+        return s.substring(s.length()-7);
 
-        return s;
+//        return s;
 
     }
 
@@ -391,13 +391,13 @@ public class StringUtil {
 
         int i = 0;
         int num = 10;
-        int second = LocalDateTime.now().getSecond();
+        long second = new Date().getTime();
         Random random = new Random();
-        int id = 100006;
+        String id = "100000006";
 
         for (int i1 = 0; i1 < num; i1++) {
             second = second + i1;
-            String s = DeciamlToThirtySix(Long.parseLong(second + String.valueOf(id)),7);
+            String s = DeciamlToThirtySix(Long.parseLong(second + id.substring(id.length()-6)),7);
             System.out.println(s);
         }
     }