liujc 1 سال پیش
والد
کامیت
32d2a2456a
50فایلهای تغییر یافته به همراه1158 افزوده شده و 106 حذف شده
  1. 7 0
      cooleshow-api/src/main/java/com/yonge/cooleshow/api/feign/AdminFeignService.java
  2. 8 0
      cooleshow-api/src/main/java/com/yonge/cooleshow/api/feign/fallback/AdminFeignServiceFallback.java
  3. 1 1
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/constant/SysConfigConstant.java
  4. 19 0
      cooleshow-task/src/main/java/com/yonge/cooleshow/task/jobs/SendPlatformAuditMessageTask.java
  5. 67 0
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/TenantActivationCodeController.java
  6. 2 1
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/TenantAlbumController.java
  7. 89 0
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/UnbindAuthUserController.java
  8. 16 0
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/task/TaskController.java
  9. 5 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/TenantAlbumPurchase.java
  10. 53 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UnbindAuthUser.java
  11. 3 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/MessageTypeEnum.java
  12. 7 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/mapper/TenantAlbumMusicMapper.java
  13. 27 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/mapper/UnbindAuthUserMapper.java
  14. 2 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CacheKey.java
  15. 15 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/RedisCacheService.java
  16. 5 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/SysUserService.java
  17. 2 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/TeacherService.java
  18. 15 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/TenantAlbumMusicService.java
  19. 1 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/TenantAlbumPurchaseService.java
  20. 5 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/TenantUnbindRecordService.java
  21. 43 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UnbindAuthUserService.java
  22. 6 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserOrderService.java
  23. 16 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ActivityPlanServiceImpl.java
  24. 15 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseGroupServiceImpl.java
  25. 16 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseScheduleServiceImpl.java
  26. 14 4
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MemberPriceSettingsServiceImpl.java
  27. 74 29
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicSheetServiceImpl.java
  28. 92 25
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/PaymentDivMemberRecordServiceImpl.java
  29. 14 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/PianoRoomBuyRecordServiceImpl.java
  30. 39 7
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/RedisCacheServiceImpl.java
  31. 3 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/SysGoodsPriceServiceImpl.java
  32. 16 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/SysUserServiceImpl.java
  33. 14 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherServiceImpl.java
  34. 9 12
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantActivationCodeServiceImpl.java
  35. 25 4
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantAlbumMusicServiceImpl.java
  36. 9 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantAlbumPurchaseServiceImpl.java
  37. 23 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantAlbumServiceImpl.java
  38. 9 4
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantApplyRecordServiceImpl.java
  39. 2 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantInfoServiceImpl.java
  40. 54 12
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantUnbindRecordServiceImpl.java
  41. 131 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UnbindAuthUserServiceImpl.java
  42. 7 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderServiceImpl.java
  43. 3 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserPaymentCoreServiceImpl.java
  44. 17 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/VideoLessonPurchaseRecordServiceImpl.java
  45. 7 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/TenantActivationCodeWrapper.java
  46. 97 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/UnbindAuthUserWrapper.java
  47. 22 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/UserPaymentOrderWrapper.java
  48. 8 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/TenantAlbumMusicMapper.xml
  49. 24 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/UnbindAuthUserMapper.xml
  50. 0 1
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/TeacherController.java

+ 7 - 0
cooleshow-api/src/main/java/com/yonge/cooleshow/api/feign/AdminFeignService.java

@@ -189,4 +189,11 @@ public interface AdminFeignService {
 
     @PostMapping(value = "/open/im/register")
     ImUserInfo register(@RequestParam("userId") String userId, @RequestParam("clientType") String clientType, @RequestParam("username") String username, @RequestParam("avatar") String avatar);
+
+
+    /**
+     * 定时发送平台审核短信 下午5点
+     */
+    @GetMapping("/task/sendPlatformAuditMessage")
+    HttpResponseResult<Object> sendPlatformAuditMessage();
 }

+ 8 - 0
cooleshow-api/src/main/java/com/yonge/cooleshow/api/feign/fallback/AdminFeignServiceFallback.java

@@ -183,4 +183,12 @@ public class AdminFeignServiceFallback implements AdminFeignService {
     public ImUserInfo register(String userId, String clientType, String username, String avatar) {
         return null;
     }
+
+    /**
+     * 定时发送平台审核短信 下午5点
+     */
+    @Override
+    public HttpResponseResult<Object> sendPlatformAuditMessage() {
+        return null;
+    }
 }

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

@@ -365,7 +365,7 @@ public interface SysConfigConstant {
     String CUSTOMER_SERVICE_PHONE = "customer_service_phone";
 
     /**
-     * 机构人员解绑申请超时时间,分钟
+     * 机构人员解绑申请超时时间,
      */
     String TENANT_USER_UNBIND_EXPIRE_TIME = "tenant_user_unbind_expire_time";
 

+ 19 - 0
cooleshow-task/src/main/java/com/yonge/cooleshow/task/jobs/SendPlatformAuditMessageTask.java

@@ -0,0 +1,19 @@
+package com.yonge.cooleshow.task.jobs;
+
+import com.yonge.cooleshow.api.feign.AdminFeignService;
+import com.yonge.cooleshow.task.core.BaseTask;
+import com.yonge.cooleshow.task.core.TaskException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class SendPlatformAuditMessageTask extends BaseTask {
+
+    @Autowired
+    private AdminFeignService adminFeignService;
+
+    @Override
+    public void execute() throws TaskException {
+        Object o = adminFeignService.sendPlatformAuditMessage();
+    }
+}

+ 67 - 0
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/TenantActivationCodeController.java

@@ -0,0 +1,67 @@
+package com.yonge.cooleshow.admin.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.microsvc.toolkit.common.response.paging.QueryInfo;
+import com.yonge.cooleshow.biz.dal.entity.TenantAlbumPurchase;
+import com.yonge.cooleshow.biz.dal.service.TenantActivationCodeService;
+import com.yonge.cooleshow.biz.dal.service.TenantAlbumPurchaseService;
+import com.yonge.cooleshow.biz.dal.wrapper.TenantActivationCodeWrapper;
+import com.yonge.cooleshow.common.controller.BaseController;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.toolset.base.exception.BizException;
+import com.yonge.toolset.base.page.PageInfo;
+import com.yonge.toolset.mybatis.support.PageUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+
+@Slf4j
+@Validated
+@RestController
+@RequestMapping("/tenantActivationCode")
+@Api(tags = "机构激活码")
+public class TenantActivationCodeController extends BaseController {
+
+    @Autowired
+    private TenantActivationCodeService tenantActivationCodeService;
+
+    @Autowired
+    private TenantAlbumPurchaseService tenantAlbumPurchaseService;
+
+
+    @ApiOperation(value = "查询分页", notes = "机构激活码- 传入 TenantActivationCodeVo.TenantActivationCodeQuery")
+    @PostMapping("/page")
+    public HttpResponseResult<PageInfo<TenantActivationCodeWrapper.TenantActivationCode>> page(
+            @RequestBody TenantActivationCodeWrapper.TenantActivationCodeQuery query) {
+
+        if (StringUtils.isBlank(query.getOrderNo())) {
+            throw new BizException("订单号不能为空");
+        }
+        // 查询订单购买的专辑
+        TenantAlbumPurchase albumPurchase = tenantAlbumPurchaseService.getByOrderNo(query.getOrderNo());
+        if (albumPurchase == null) {
+            return succeed(new PageInfo<>());
+        }
+        query.setActivationStatus(true);
+        query.setTenantAlbumPurchaseId(albumPurchase.getId());
+        // 查询数据
+        IPage<TenantActivationCodeWrapper.TenantActivationCode> pages =
+                tenantActivationCodeService.selectPage(QueryInfo.getPage(query), query);
+        PageInfo<TenantActivationCodeWrapper.TenantActivationCode> pageInfo = PageUtil.pageInfo(pages);
+
+        if (query.getTenantAlbumPurchaseId() != null) {
+            pageInfo.setStatInfo(albumPurchase);
+        }
+
+        return succeed(pageInfo);
+    }
+
+}

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

@@ -131,6 +131,7 @@ public class TenantAlbumController {
                 MusicSheetVo musicSheet = idMsMap.getOrDefault(musicSheetId, new MusicSheetVo());
                 tenantAlbumSheet.setMusicSheetName(musicSheet.getMusicSheetName());
                 tenantAlbumSheet.setMusicTag(musicSheet.getMusicTag());
+                tenantAlbumSheet.setComposer(musicSheet.getComposer());
                 return tenantAlbumSheet;
             }).collect(Collectors.toList());
 
@@ -164,7 +165,7 @@ public class TenantAlbumController {
     @PostMapping("/update")
     @ApiOperation(value = "修改专辑", notes = "修改专辑")
     @PreAuthorize("@pcs.hasPermissions('tenantAlbum/update')")
-    public HttpResponseResult<Boolean> update(@Validated @RequestBody TenantAlbumVo.TenantAlbum album) {
+    public HttpResponseResult<Boolean> update( @RequestBody TenantAlbumVo.TenantAlbum album) {
         TenantAlbum tenantAlbum = JSON.parseObject(album.jsonString(), TenantAlbum.class);
         List<TenantAlbumVo.MusicSheetData> musicSheetData = album.getMusicSheetData();
 

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

@@ -0,0 +1,89 @@
+package com.yonge.cooleshow.admin.controller;
+
+
+import com.alibaba.fastjson.JSONObject;
+import com.microsvc.toolkit.common.response.paging.QueryInfo;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.toolset.base.exception.BizException;
+import com.yonge.toolset.base.page.PageInfo;
+import com.yonge.toolset.mybatis.support.PageUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+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;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import com.microsvc.toolkit.config.jwt.utils.JwtUserInfo;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import springfox.documentation.annotations.ApiIgnore;
+
+import com.yonge.cooleshow.biz.dal.service.UnbindAuthUserService;
+import com.yonge.cooleshow.biz.dal.wrapper.UnbindAuthUserWrapper;
+import com.yonge.cooleshow.biz.dal.entity.UnbindAuthUser;
+
+@Slf4j
+@Validated
+@RestController
+@RequestMapping("/unbindAuthUser")
+@Api(tags = "解绑审核人员设置")
+public class UnbindAuthUserController {
+
+    @Autowired
+    private UnbindAuthUserService unbindAuthUserService;
+
+    
+    @ApiOperation(value = "查询分页", notes = "解绑审核人员设置- 传入 UnbindAuthUserWrapper.UnbindAuthUserQuery") 
+    @PostMapping("/page")
+    public HttpResponseResult<PageInfo<UnbindAuthUserWrapper.UnbindAuthUser>> page(@RequestBody UnbindAuthUserWrapper.UnbindAuthUserQuery query) {
+        
+        IPage<UnbindAuthUserWrapper.UnbindAuthUser> pages = unbindAuthUserService.selectPage(QueryInfo.getPage(query), query);
+        
+        return HttpResponseResult.succeed(PageUtil.pageInfo(pages));
+	}
+    
+    @ApiOperation(value = "新增", notes = "解绑审核人员设置- 传入 UnbindAuthUserWrapper.UnbindAuthUser")
+	@PostMapping("/save")
+	public HttpResponseResult<JSONObject> add(@Validated @RequestBody UnbindAuthUser unbindAuthUser) {
+
+        if (unbindAuthUser.getUserId() == null) {
+            throw new BizException("用户ID不能为空");
+        }
+        // 新增数据
+        unbindAuthUserService.save(unbindAuthUser);
+        
+        return HttpResponseResult.succeed();
+	}
+    
+    @ApiOperation(value = "修改", notes = "解绑审核人员设置- 传入 UnbindAuthUserWrapper.UnbindAuthUser")
+	@PostMapping("/update")
+	public HttpResponseResult<JSONObject> update(@Validated @RequestBody UnbindAuthUser unbindAuthUser) {
+
+        if (unbindAuthUser.getId() == null) {
+            throw new BizException("ID不能为空");
+        }
+
+        if (unbindAuthUser.getUserId() == null) {
+            throw new BizException("用户ID不能为空");
+        }
+        // 更新数据
+        unbindAuthUserService.updateById(unbindAuthUser);
+
+        return HttpResponseResult.succeed();
+	}
+
+	@ApiOperation(value = "删除", notes = "解绑审核人员设置- 传入id")
+	@PostMapping("/remove")
+	public HttpResponseResult<Boolean> remove(@RequestParam Long id) {
+    
+		return HttpResponseResult.succeed(unbindAuthUserService.removeById(id));
+	}
+}

+ 16 - 0
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/task/TaskController.java

@@ -69,6 +69,9 @@ public class TaskController extends BaseController {
     @Autowired
     private ImGroupService imGroupService;
 
+    @Autowired
+    private TenantUnbindRecordService tenantUnbindRecordService;
+
     /***
      * 轮询用户订单
      * @author liweifan
@@ -213,4 +216,17 @@ public class TaskController extends BaseController {
 
         }
     }
+    /**
+     * 定时发送平台审核短信 下午5点
+     */
+    @GetMapping("/sendPlatformAuditMessage")
+    public HttpResponseResult<Object> sendPlatformAuditMessage() {
+
+        // 群发消息定时
+        tenantUnbindRecordService.sendPlatformAuditMessage();
+
+        return HttpResponseResult.succeed();
+    }
+
+
 }

+ 5 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/TenantAlbumPurchase.java

@@ -35,6 +35,11 @@ public class TenantAlbumPurchase implements Serializable {
 	@TableField(value = "tenant_album_id_")
     private Long tenantAlbumId;
 
+
+    @ApiModelProperty("订单号")
+    @TableField(value = "order_no_")
+    private String orderNo;
+
     @ApiModelProperty("采购时间") 
 	@TableField(value = "purchase_time_")
     private Date purchaseTime;

+ 53 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UnbindAuthUser.java

@@ -0,0 +1,53 @@
+package com.yonge.cooleshow.biz.dal.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import lombok.Data;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.util.Date;
+
+
+/**
+ * 解绑审核人员设置
+ * 2023-08-23 16:33:16
+ */
+@Data
+@ApiModel(" UnbindAuthUser-解绑审核人员设置")
+@TableName("unbind_auth_user")
+public class UnbindAuthUser implements Serializable {
+
+    @ApiModelProperty("主键") 
+    @TableId(value = "id_")
+    private Long id;
+
+    @ApiModelProperty("员工ID") 
+	@TableField(value = "user_id_")
+    private Long userId;
+
+    @ApiModelProperty("省份编码") 
+	@TableField(value = "province_code_")
+    private Integer provinceCode;
+
+    @ApiModelProperty("城市编码") 
+	@TableField(value = "city_code_")
+    private Integer cityCode;
+
+    @ApiModelProperty("地区/街道") 
+	@TableField(value = "region_code_")
+    private Integer regionCode;
+
+    @ApiModelProperty("创建时间") 
+	@TableField(value = "create_time_")
+    private Date createTime;
+
+    @ApiModelProperty("更新时间") 
+	@TableField(value = "update_time_")
+    private Date updateTime;
+
+}

+ 3 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/MessageTypeEnum.java

@@ -118,6 +118,9 @@ public enum MessageTypeEnum implements BaseEnum<String, MessageTypeEnum> {
     SMS_TENANT_AUTH_PASS("机构入驻审核通过"),
     TEACHER_UNBIND_PASS("老师解绑通过"),
     TEACHER_UNBIND_UNPASS("老师解绑拒绝"),
+
+    // 平台审核提醒
+    PLATFORM_AUDIT_UNBIND("平台审核提醒"),
     ;
 
     MessageTypeEnum(String msg) {

+ 7 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/mapper/TenantAlbumMusicMapper.java

@@ -27,4 +27,11 @@ public interface TenantAlbumMusicMapper extends BaseMapper<TenantAlbumMusic> {
 	List<TenantAlbumMusicWrapper.StudentTenantAlbumMusic> selectPage(@Param("page") IPage<TenantAlbumMusicWrapper.StudentTenantAlbumMusic> page, @Param("param") TenantAlbumMusicWrapper.StudentMusicSheetQuery param);
 
 	List<Long> selectMusicSheetIds(@Param("albumIds") List<Long> albumIds, @Param("subjectType") String s, @Param("type") String type, @Param("level") String level);
+
+    /**
+     * 获取机构专辑曲目ID集合
+     *
+     * @param tenantId 机构ID
+     */
+    List<Long> selectMusicIdsByTenantIds(@Param("tenantId") Long tenantId);
 }

+ 27 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/mapper/UnbindAuthUserMapper.java

@@ -0,0 +1,27 @@
+package com.yonge.cooleshow.biz.dal.mapper;
+
+import java.util.List;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+import com.yonge.cooleshow.biz.dal.entity.UnbindAuthUser;
+import com.yonge.cooleshow.biz.dal.wrapper.UnbindAuthUserWrapper;
+
+/**
+ * 解绑审核人员设置
+ * 2023-08-23 16:33:16
+ */
+@Repository
+public interface UnbindAuthUserMapper extends BaseMapper<UnbindAuthUser> {
+
+	/**
+	 * 分页查询
+	 * @param page IPage<UnbindAuthUserWrapper.UnbindAuthUser>
+	 * @param param UnbindAuthUserWrapper.UnbindAuthUserQuery
+	 * @return List<UnbindAuthUserWrapper.UnbindAuthUser>
+	 */
+	List<UnbindAuthUserWrapper.UnbindAuthUser> selectPage(@Param("page") IPage<UnbindAuthUserWrapper.UnbindAuthUser> page, @Param("param") UnbindAuthUserWrapper.UnbindAuthUserQuery param);
+	
+}

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

@@ -29,4 +29,6 @@ public interface CacheKey {
     String USER_PAYMENT_CONFIG = "paymentconfig:{}:{}";
     // 用户下单配置
     String USER_ORDER_CONFIG = "orderconfig:{}:{}";
+    // 用户入账配置
+    String USER_ORDER_ACCOUNT = "USER_ORDER_ACCOUNT:{}:{}";
 }

+ 15 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/RedisCacheService.java

@@ -65,6 +65,14 @@ public interface RedisCacheService {
     void saveUserOrderConfig(String userId, String orderType, String config);
 
     /**
+     * 用户下单金额分账配置
+     *
+     * @param subOrderNo 用户Id
+     * @param config 下单配置信息
+     */
+    void saveUserAccountConfig(String subOrderNo, String config);
+
+    /**
      * 查询用户下单配置
      *
      * @param userId 用户Id
@@ -73,6 +81,13 @@ public interface RedisCacheService {
     String getUserOrderConfig(String userId, String orderType);
 
     /**
+     * 用户下单金额分账配置
+     *
+     * @param subOrderNo 订单详情号
+     */
+    String getUserAccountConfig(String subOrderNo);
+
+    /**
      * 删除用户下单配置
      *
      * @param userId 用户Id

+ 5 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/SysUserService.java

@@ -5,6 +5,9 @@ import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.toolset.utils.idcard.IdcardInfoExtractor;
 
+import java.util.List;
+import java.util.Map;
+
 public interface SysUserService{
 
     Long getUserId();
@@ -21,4 +24,6 @@ public interface SysUserService{
      * @param client
      */
     IdcardInfoExtractor updateUserCard(RealnameAuthReq realNameAuthDto, SysUser sysUser, ClientEnum client);
+
+    Map<Long,com.yonge.cooleshow.biz.dal.entity.SysUser> getMapByIds(List<Long> userIds);
 }

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

@@ -177,4 +177,6 @@ public interface TeacherService extends IService<Teacher> {
     TeacherWrapper.TeacherStatInfo findTeacherStatInfoById(Long userId);
 
     void updateTenant(TeacherWrapper.UpdateTenant updateTenant);
+
+    Long teacherSettlementFrom(Long teacherId);
 }

+ 15 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/TenantAlbumMusicService.java

@@ -6,6 +6,8 @@ import com.yonge.cooleshow.biz.dal.entity.MusicSheet;
 import com.yonge.cooleshow.biz.dal.wrapper.TenantAlbumMusicWrapper;
 import com.yonge.cooleshow.biz.dal.entity.TenantAlbumMusic;
 
+import java.util.List;
+
 /**
  * 机构专辑曲目
  * 2023-07-21 17:32:49
@@ -46,4 +48,17 @@ public interface TenantAlbumMusicService extends IService<TenantAlbumMusic>  {
      */
     TenantAlbumMusicWrapper.TenantAlbumMusicSelectData getTenantAlbumMusicQuery(TenantAlbumMusicWrapper.TenantAlbumMusicSelect query);
 
+    /**
+     * 获取机构专辑曲目ID集合
+     *
+     * @param tenantAlbumIds 机构专辑ID集合
+     */
+    List<Long> getMusicIdsByIds(List<Long> tenantAlbumIds);
+
+    /**
+     * 获取机构专辑曲目ID集合
+     *
+     * @param tenantId 机构ID
+     */
+    List<Long> getMusicIdsByTenantIds(Long tenantId);
 }

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

@@ -45,4 +45,5 @@ public interface TenantAlbumPurchaseService extends IService<TenantAlbumPurchase
      */
     Boolean update(TenantAlbumPurchaseWrapper.TenantAlbumPurchase tenantAlbumPurchase);
 
+    TenantAlbumPurchase getByOrderNo(String orderNo);
 }

+ 5 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/TenantUnbindRecordService.java

@@ -62,4 +62,9 @@ public interface TenantUnbindRecordService extends IService<TenantUnbindRecord>
      * @param unbind       解绑信息
      */
     void unbindTenant(Long tenantId, Long verityUserId, TenantUnbindRecordWrapper.Unbind unbind);
+
+    /**
+     * 定时发送平台审核短信 下午5点
+     */
+    void sendPlatformAuditMessage();
 }

+ 43 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UnbindAuthUserService.java

@@ -0,0 +1,43 @@
+package com.yonge.cooleshow.biz.dal.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.yonge.cooleshow.biz.dal.wrapper.UnbindAuthUserWrapper;
+import com.yonge.cooleshow.biz.dal.entity.UnbindAuthUser;
+
+/**
+ * 解绑审核人员设置
+ * 2023-08-23 16:33:16
+ */
+public interface UnbindAuthUserService extends IService<UnbindAuthUser>  {
+
+	/**
+     * 查询详情
+     * @param id 详情ID
+     * @return UnbindAuthUser
+     */
+	UnbindAuthUser detail(Long id);
+
+    /**
+     * 分页查询
+     * @param page IPage<UnbindAuthUser>
+     * @param query UnbindAuthUserWrapper.UnbindAuthUserQuery
+     * @return IPage<UnbindAuthUser>
+     */
+    IPage<UnbindAuthUserWrapper.UnbindAuthUser> selectPage(IPage<UnbindAuthUserWrapper.UnbindAuthUser> page, UnbindAuthUserWrapper.UnbindAuthUserQuery query);
+	
+    /**
+     * 添加
+     * @param unbindAuthUser UnbindAuthUserWrapper.UnbindAuthUser
+     * @return Boolean
+     */
+     Boolean add(UnbindAuthUserWrapper.UnbindAuthUser unbindAuthUser);   
+
+    /**
+     * 更新
+     * @param unbindAuthUser UnbindAuthUserWrapper.UnbindAuthUser
+     * @return Boolean
+     */
+     Boolean update(UnbindAuthUserWrapper.UnbindAuthUser unbindAuthUser);
+     
+}

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

@@ -192,6 +192,12 @@ public interface UserOrderService extends IService<UserOrder> {
      */
     void paySuccess(UserOrderVo detail);
 
+    /**
+     * 记录活动参与
+     *
+     */
+    void saveActivityRecord(UserOrderDetailVo orderDetailVo);
+
     Date getAccountPeriodTime(UserOrderDetailVo orderDetailVo);
 
     /**

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

@@ -114,6 +114,12 @@ public class ActivityPlanServiceImpl extends ServiceImpl<ActivityPlanDao, Activi
     @Autowired
     private UserOrderService userOrderService;
 
+    @Autowired
+    private RedisCacheService redisCacheService;
+
+    @Autowired
+    private TeacherService teacherService;
+
     //保存/更新拓展字段
     private static final Map<ActivityTypeEnum, Consumer<ActivityPlanDto>> saveOrUpdateExpand = new HashMap<>();
     //开始活动(活动刚开始触发)
@@ -982,6 +988,16 @@ public class ActivityPlanServiceImpl extends ServiceImpl<ActivityPlanDao, Activi
         userOrderDetail.setActualPrice(userOrderDetail.getExpectPrice());
 
         orderGoodsInfo.setUserOrderDetail(userOrderDetail);
+
+
+        // 设置金额入账去向
+        UserPaymentOrderWrapper.AccountTenantTo accountTenantTo = new UserPaymentOrderWrapper.AccountTenantTo();
+        if (orderGoodsInfo.getRecomUserId() !=null) {
+            accountTenantTo.setShareTenant(teacherService.teacherSettlementFrom(orderGoodsInfo.getRecomUserId()));
+        }
+        // 存入缓存
+        redisCacheService.saveUserAccountConfig(orderGoodsInfo.getSubOrderNo(), accountTenantTo.jsonString());
+
     }
 
     /**

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

@@ -115,6 +115,9 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
     @Autowired
     private UserPaymentCoreService userPaymentCoreService;
 
+    @Autowired
+    private RedisCacheService redisCacheService;
+
     @Override
     public CourseGroupDao getDao() {
         return this.baseMapper;
@@ -395,6 +398,18 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
         log.info("buyLiveCourse  return {}", userOrderDetail);
 
         orderGoodsInfo.setUserOrderDetail(userOrderDetail);
+
+
+        // 设置金额入账去向
+        UserPaymentOrderWrapper.AccountTenantTo accountTenantTo = new UserPaymentOrderWrapper.AccountTenantTo();
+        if (orderGoodsInfo.getRecomUserId() !=null) {
+            accountTenantTo.setShareTenant(teacherService.teacherSettlementFrom(orderGoodsInfo.getRecomUserId()));
+        }
+
+        accountTenantTo.setIncomeTenant(teacherService.teacherSettlementFrom(courseGroup.getTeacherId()));
+        // 存入缓存
+        redisCacheService.saveUserAccountConfig(orderGoodsInfo.getSubOrderNo(), accountTenantTo.jsonString());
+
     }
 
     /**

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

@@ -136,6 +136,12 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
     @Autowired
     private LiveRoomService liveRoomService;
 
+    @Autowired
+    private TeacherService teacherService;
+
+    @Autowired
+    private RedisCacheService redisCacheService;
+
     @Override
     public CourseScheduleDao getDao() {
         return this.baseMapper;
@@ -2483,6 +2489,16 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         try {
             if (lock.tryLock(10, 60, TimeUnit.SECONDS)) {
                 orderGoodsInfo.setUserOrderDetail( buyPracticeCourseTranV2(orderGoodsInfo));
+
+                // 设置金额入账去向
+                UserPaymentOrderWrapper.AccountTenantTo accountTenantTo = new UserPaymentOrderWrapper.AccountTenantTo();
+                if (orderGoodsInfo.getRecomUserId() !=null) {
+                    accountTenantTo.setShareTenant(teacherService.teacherSettlementFrom(orderGoodsInfo.getRecomUserId()));
+                }
+                accountTenantTo.setIncomeTenant(teacherService.teacherSettlementFrom(scheduleDto.getTeacherId()));
+                // 存入缓存
+                redisCacheService.saveUserAccountConfig(orderGoodsInfo.getSubOrderNo(), accountTenantTo.jsonString());
+
             }
         } catch (InterruptedException e) {
             throw new BizException("创建陪练课失败:{}", e.getMessage());

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

@@ -9,11 +9,8 @@ import com.yonge.cooleshow.biz.dal.dto.ActivityPlanRewardDto;
 import com.yonge.cooleshow.biz.dal.dto.VipSubmitReq;
 import com.yonge.cooleshow.biz.dal.dto.req.OrderReq;
 import com.yonge.cooleshow.biz.dal.entity.*;
-import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
-import com.yonge.cooleshow.biz.dal.enums.MessageTypeEnum;
+import com.yonge.cooleshow.biz.dal.enums.*;
 import com.yonge.cooleshow.biz.dal.entity.VipCardRecord;
-import com.yonge.cooleshow.biz.dal.enums.PeriodEnum;
-import com.yonge.cooleshow.biz.dal.enums.SourceTypeEnum;
 import com.yonge.cooleshow.biz.dal.service.*;
 
 import com.yonge.cooleshow.biz.dal.vo.ShareProfitVo;
@@ -68,6 +65,9 @@ public class MemberPriceSettingsServiceImpl extends ServiceImpl<MemberPriceSetti
     @Autowired
     private UserOrderService userOrderService;
 
+    @Autowired
+    private RedisCacheService redisCacheService;
+
     @Override
     public MemberPriceSettingsVo detail(Long id) {
         return baseMapper.detail(id);
@@ -281,6 +281,16 @@ public class MemberPriceSettingsServiceImpl extends ServiceImpl<MemberPriceSetti
         userOrderDetail.setExpectPrice(detail.getSalePrice());
         userOrderDetail.setActualPrice(userOrderDetail.getExpectPrice().subtract(couponAmount));
         orderGoodsInfo.setUserOrderDetail(userOrderDetail);
+
+
+        // 设置金额入账去向
+        UserPaymentOrderWrapper.AccountTenantTo accountTenantTo = new UserPaymentOrderWrapper.AccountTenantTo();
+        if (orderGoodsInfo.getRecomUserId() !=null) {
+            accountTenantTo.setShareTenant(teacherService.teacherSettlementFrom(orderGoodsInfo.getRecomUserId()));
+        }
+        // 存入缓存
+        redisCacheService.saveUserAccountConfig(orderGoodsInfo.getSubOrderNo(), accountTenantTo.jsonString());
+
     }
 
     private void sendAddVipMessage(Long userId, ClientEnum client, Integer times, PeriodEnum type, String reason) {

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

@@ -24,18 +24,9 @@ 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.entity.*;
-import com.yonge.cooleshow.biz.dal.enums.AccountBizTypeEnum;
-import com.yonge.cooleshow.biz.dal.enums.AudioTypeEnum;
-import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
-import com.yonge.cooleshow.biz.dal.enums.ChargeTypeEnum;
-import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
-import com.yonge.cooleshow.biz.dal.enums.InOrOutEnum;
-import com.yonge.cooleshow.biz.dal.enums.MessageTypeEnum;
-import com.yonge.cooleshow.biz.dal.enums.OrderStatusEnum;
-import com.yonge.cooleshow.biz.dal.enums.OrderTypeEnum;
-import com.yonge.cooleshow.biz.dal.enums.SourceTypeEnum;
-import com.yonge.cooleshow.biz.dal.enums.TeacherTagEnum;
+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.*;
 import com.yonge.cooleshow.biz.dal.support.WrapperUtil;
 import com.yonge.cooleshow.biz.dal.vo.*;
@@ -164,6 +155,15 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
 
     @Autowired
     private TenantInfoService tenantInfoService;
+    
+    @Autowired
+    private UserTenantAlbumRecordMapper userTenantAlbumRecordMapper;
+
+    @Autowired
+    private TenantAlbumMusicService tenantAlbumMusicService;
+
+    @Autowired
+    private RedisCacheService redisCacheService;
 
     public MusicSheetDao getDao() {
         return musicSheetDao;
@@ -371,6 +371,9 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
         } else {
             detail.setPlay(YesOrNoEnum.YES);
         }
+
+
+
         List<MusicSheetAccompaniment> background = detail.getBackground();
         if (CollectionUtils.isNotEmpty(background)) {
             background.sort(Comparator.comparing(MusicSheetAccompaniment::getSortNumber));
@@ -434,27 +437,53 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
         List<AlbumMusicRelate> albumMusicRelateList = albumMusicRelateService.lambdaQuery()
                                                              .eq(AlbumMusicRelate::getMusicSheetId, detail.getId())
                                                              .list();
-        if (CollectionUtils.isEmpty(albumMusicRelateList)) {
-            return;
+        if (!CollectionUtils.isEmpty(albumMusicRelateList)) {
+
+            List<Long> albumIdList = albumMusicRelateList.stream()
+                    .map(AlbumMusicRelate::getAlbumId)
+                    .collect(Collectors.toList());
+
+            // 2 检查是否购买过专辑
+            Integer count = musicSheetPurchaseRecordService.lambdaQuery()
+                    .eq(MusicSheetPurchaseRecord::getClientType, userType)
+                    .eq(MusicSheetPurchaseRecord::getOrderStatus,
+                            OrderStatusEnum.PAID)
+                    .in(MusicSheetPurchaseRecord::getMusicSheetId, albumIdList)
+                    .eq(MusicSheetPurchaseRecord::getPurchaseType,
+                            PurchaseRecordTypeEnum.ALBUM)
+                    .eq(MusicSheetPurchaseRecord::getStudentId, studentId)
+                    .count();
+            if (count > 0) {
+                detail.setPlay(YesOrNoEnum.YES);
+                return;
+            }
         }
-        List<Long> albumIdList = albumMusicRelateList.stream()
-                                                 .map(AlbumMusicRelate::getAlbumId)
-                                                 .collect(Collectors.toList());
-
-        // 2 检查是否购买过专辑
-        Integer count = musicSheetPurchaseRecordService.lambdaQuery()
-                                                       .eq(MusicSheetPurchaseRecord::getClientType, userType)
-                                                       .eq(MusicSheetPurchaseRecord::getOrderStatus,
-                                                           OrderStatusEnum.PAID)
-                                                       .in(MusicSheetPurchaseRecord::getMusicSheetId, albumIdList)
-                                                       .eq(MusicSheetPurchaseRecord::getPurchaseType,
-                                                           PurchaseRecordTypeEnum.ALBUM)
-                                                       .eq(MusicSheetPurchaseRecord::getStudentId, studentId)
-                                                       .count();
-        if (count >0) {
-            detail.setPlay(YesOrNoEnum.YES);
+
+        // 机构专辑购买
+
+        // 学生生效中的机构专辑
+        if (ClientEnum.STUDENT == userType) {
+            List<Long> tenantAlbumIds = userTenantAlbumRecordMapper.selectTenantIds(studentId);
+            if (CollectionUtils.isNotEmpty(tenantAlbumIds)) {
+                List<Long> musicSheetIds = tenantAlbumMusicService.getMusicIdsByIds(tenantAlbumIds);
+                if (musicSheetIds.contains(detail.getId())) {
+                    detail.setPlay(YesOrNoEnum.YES);
+                    return;
+                }
+            }
+        } else if (ClientEnum.TEACHER == userType) {
+            // 老师所在机构启用的专辑
+            Teacher teacher = teacherService.getById(studentId);
+            if (teacher.getTenantId() !=null) {
+                List<Long> musicSheetIds = tenantAlbumMusicService.getMusicIdsByTenantIds(teacher.getTenantId());
+                if (musicSheetIds.contains(detail.getId())) {
+                    detail.setPlay(YesOrNoEnum.YES);
+                    return;
+                }
+            }
         }
 
+
     }
 
     @Override
@@ -1605,6 +1634,22 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
                 PurchaseRecordTypeEnum.valueOf(orderGoodsInfo.getGoodType().getCode()));
 
         orderGoodsInfo.setUserOrderDetail(userOrderDetail);
+
+
+        // 设置金额入账去向
+        UserPaymentOrderWrapper.AccountTenantTo accountTenantTo = new UserPaymentOrderWrapper.AccountTenantTo();
+        if (orderGoodsInfo.getRecomUserId() !=null) {
+            accountTenantTo.setShareTenant(teacherService.teacherSettlementFrom(orderGoodsInfo.getRecomUserId()));
+        }
+        if (orderGoodsInfo.getGoodType().equals(GoodTypeEnum.MUSIC)) {
+            MusicSheet musicSheet = this.getById(orderGoodsInfo.getBizId());
+            if (musicSheet != null && musicSheet.getSourceType().equals(SourceTypeEnum.TEACHER)) {
+                accountTenantTo.setIncomeTenant(teacherService.teacherSettlementFrom(musicSheet.getUserId()));
+            }
+        }
+        // 存入缓存
+        redisCacheService.saveUserAccountConfig(orderGoodsInfo.getSubOrderNo(), accountTenantTo.jsonString());
+
     }
 
 

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

@@ -28,6 +28,7 @@ import com.yonge.cooleshow.biz.dal.vo.CourseScheduleStudentPaymentVo;
 import com.yonge.cooleshow.biz.dal.vo.UserOrderDetailVo;
 import com.yonge.cooleshow.biz.dal.wrapper.PaymentDivMemberRecordWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.TenantAlbumWrapper;
+import com.yonge.cooleshow.biz.dal.wrapper.UserPaymentOrderWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.course.CourseRelationWrapper;
 import com.yonge.cooleshow.common.constant.SysConfigConstant;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
@@ -37,6 +38,7 @@ import com.yonge.cooleshow.common.enums.PostStatusEnum;
 import com.yonge.toolset.base.exception.BizException;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang.StringUtils;
 import org.joda.time.DateTime;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -133,6 +135,11 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
     private MemberPriceSettingsService memberPriceSettingsService;
     @Autowired
     private ActivityPlanService activityPlanService;
+    @Autowired
+    private TenantAlbumService tenantAlbumService;
+
+    @Autowired
+    private RedisCacheService redisCacheService;
 
     /**
      * 查询详情
@@ -251,7 +258,13 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
         // 计算老师分润数据  平台的真实收益
         BigDecimal platformFee = tenantdivMap.getOrDefault(-1L, BigDecimal.ZERO);
 
-        saveData(userPaymentOrder, tenantdivMap, teacherMap, bizMap, platformFee);
+
+        // 计算分润
+        teacherAmount(userPaymentOrder, tenantdivMap, teacherMap, platformFee);
+
+        tenantAlbumService.orderSuccess(userPaymentOrder);
+
+        saveData(userPaymentOrder, tenantdivMap, teacherMap, bizMap );
 
 
     }
@@ -290,6 +303,14 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
         // 保存购买记录
         musicSheetService.addMusicSheetPurchaseRecord(userPaymentOrder, actualPrice, serviceFeeAmount);
 
+        String userAccountConfig = redisCacheService.getUserAccountConfig(userPaymentOrder.getSubOrderNo());
+        UserPaymentOrderWrapper.AccountTenantTo accountTenantTo;
+        if (StringUtils.isBlank(userAccountConfig)) {
+            accountTenantTo = new UserPaymentOrderWrapper.AccountTenantTo();
+        } else {
+            accountTenantTo = JSON.parseObject(userAccountConfig, UserPaymentOrderWrapper.AccountTenantTo.class);
+        }
+
         // 曲目判断老师收入
         if (userPaymentOrder.getOrderType().equals(OrderTypeEnum.MUSIC)) {
             MusicSheet musicSheet = musicSheetService.getById(userPaymentOrder.getBizId());
@@ -299,10 +320,9 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
                 BigDecimal teacherAmount = BigDecimal.ONE.subtract(serviceFee).multiply(expectPrice);
 
                 // 判断分润给机构 还是给老师
-                Teacher teacher = teacherService.getById(musicSheet.getUserId());
-                if (teacher.getTenantId() != null && teacher.getTenantId() > 0 && ESettlementFrom.TENANT.equals(teacher.getSettlementFrom())) {
+                if (accountTenantTo.getIncomeTenant() != null && accountTenantTo.getIncomeTenant() >0) {
                     // 分润给机构
-                    tenantdivMap.merge(teacher.getTenantId(), teacherAmount, BigDecimal::add);
+                    tenantdivMap.merge(accountTenantTo.getIncomeTenant(), teacherAmount, BigDecimal::add);
                     tenantdivMap.merge(-1L, teacherAmount, BigDecimal::subtract);
                     serviceFeeAmount = tenantdivMap.get(-1L);
                 } else {
@@ -324,7 +344,9 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
         );
 
 
-        saveData(userPaymentOrder, tenantdivMap, teacherMap, bizMap, serviceFeeAmount);
+        // 计算分润
+        teacherAmount(userPaymentOrder, tenantdivMap, teacherMap, serviceFeeAmount);
+        saveData(userPaymentOrder, tenantdivMap, teacherMap, bizMap);
     }
 
     @Override
@@ -397,21 +419,31 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
             courseScheduleTeacherSalaryService.getDao().insertBatch(teacherSalaryList);
             log.info("buyPracticeCourseSuccess ok");
 
+
+            String userAccountConfig = redisCacheService.getUserAccountConfig(userPaymentOrder.getSubOrderNo());
+            UserPaymentOrderWrapper.AccountTenantTo accountTenantTo;
+            if (StringUtils.isBlank(userAccountConfig)) {
+                accountTenantTo = new UserPaymentOrderWrapper.AccountTenantTo();
+            } else {
+                accountTenantTo = JSON.parseObject(userAccountConfig, UserPaymentOrderWrapper.AccountTenantTo.class);
+            }
+
             // 老师收入总金额
             BigDecimal teacherAmount = teacherSalaryList.stream().map(CourseScheduleTeacherSalary::getActualSalary).reduce(BigDecimal.ZERO, BigDecimal::add);
             // 判断分润给机构 还是给老师
-            Teacher teacher = teacherService.getById(teacherId);
-            if (teacher.getTenantId() != null && teacher.getTenantId() > 0 && ESettlementFrom.TENANT.equals(teacher.getSettlementFrom())) {
+            if (accountTenantTo.getIncomeTenant() != null && accountTenantTo.getIncomeTenant() > 0) {
                 // 分润给机构
-                tenantdivMap.merge(teacher.getTenantId(), teacherAmount, BigDecimal::add);
+                tenantdivMap.merge( accountTenantTo.getIncomeTenant() , teacherAmount, BigDecimal::add);
                 tenantdivMap.merge(-1L, teacherAmount, BigDecimal::subtract);
                 serviceFeeAmount = tenantdivMap.get(-1L);
             } else {
                 // 分润给老师
                 bizMap.merge(userPaymentOrder.getBizId(), teacherAmount, BigDecimal::add);
             }
+            // 计算分润
+            teacherAmount(userPaymentOrder, tenantdivMap, teacherMap, serviceFeeAmount);
 
-            saveData(userPaymentOrder, tenantdivMap, teacherMap, bizMap, serviceFeeAmount);
+            saveData(userPaymentOrder, tenantdivMap, teacherMap, bizMap);
         }
 
         Set<Long> studentIds = new HashSet();
@@ -519,13 +551,21 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
         if (CollectionUtils.isNotEmpty(teacherSalaryList)) {
             courseScheduleTeacherSalaryService.getDao().insertBatch(teacherSalaryList);
 
+
+            String userAccountConfig = redisCacheService.getUserAccountConfig(userPaymentOrder.getSubOrderNo());
+            UserPaymentOrderWrapper.AccountTenantTo accountTenantTo;
+            if (StringUtils.isBlank(userAccountConfig)) {
+                accountTenantTo = new UserPaymentOrderWrapper.AccountTenantTo();
+            } else {
+                accountTenantTo = JSON.parseObject(userAccountConfig, UserPaymentOrderWrapper.AccountTenantTo.class);
+            }
+
             // 老师收入总金额
             BigDecimal teacherAmount = teacherSalaryList.stream().map(CourseScheduleTeacherSalary::getActualSalary).reduce(BigDecimal.ZERO, BigDecimal::add);
             // 判断分润给机构 还是给老师
-            Teacher teacher = teacherService.getById(courseGroup.getTeacherId());
-            if (teacher.getTenantId() != null && teacher.getTenantId() > 0 && ESettlementFrom.TENANT.equals(teacher.getSettlementFrom())) {
+            if (accountTenantTo.getIncomeTenant() !=null && accountTenantTo.getIncomeTenant() >0) {
                 // 分润给机构
-                tenantdivMap.merge(teacher.getTenantId(), teacherAmount, BigDecimal::add);
+                tenantdivMap.merge(accountTenantTo.getIncomeTenant() , teacherAmount, BigDecimal::add);
                 tenantdivMap.merge(-1L, teacherAmount, BigDecimal::subtract);
                 serviceFeeAmount = tenantdivMap.get(-1L);
             } else {
@@ -533,7 +573,10 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
                 bizMap.merge(userPaymentOrder.getBizId(), teacherAmount, BigDecimal::add);
             }
 
-            saveData(userPaymentOrder, tenantdivMap, teacherMap, bizMap, serviceFeeAmount);
+            // 计算分润
+            teacherAmount(userPaymentOrder, tenantdivMap, teacherMap, serviceFeeAmount);
+
+            saveData(userPaymentOrder, tenantdivMap, teacherMap, bizMap);
         }
         log.info("buyLiveCourseSuccess ok");
         //课程购买成功后进行消息推送
@@ -588,10 +631,18 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
         //老师入账金额
         BigDecimal teacherAmount = expectPrice.subtract(serviceFeeAmount).setScale(2, RoundingMode.HALF_UP);
         // 判断分润给机构 还是给老师
-        Teacher teacher = teacherService.getById(lessonGroup.getTeacherId());
-        if (teacher.getTenantId() != null && teacher.getTenantId() > 0 && ESettlementFrom.TENANT.equals(teacher.getSettlementFrom())) {
+
+        String userAccountConfig = redisCacheService.getUserAccountConfig(userPaymentOrder.getSubOrderNo());
+        UserPaymentOrderWrapper.AccountTenantTo accountTenantTo;
+        if (StringUtils.isBlank(userAccountConfig)) {
+            accountTenantTo = new UserPaymentOrderWrapper.AccountTenantTo();
+        } else {
+            accountTenantTo = JSON.parseObject(userAccountConfig, UserPaymentOrderWrapper.AccountTenantTo.class);
+        }
+
+        if (accountTenantTo.getIncomeTenant() !=null && accountTenantTo.getIncomeTenant() >0) {
             // 分润给机构
-            tenantdivMap.merge(teacher.getTenantId(), teacherAmount, BigDecimal::add);
+            tenantdivMap.merge(accountTenantTo.getIncomeTenant(), teacherAmount, BigDecimal::add);
             tenantdivMap.merge(-1L, teacherAmount, BigDecimal::subtract);
             serviceFeeAmount = tenantdivMap.get(-1L);
         } else {
@@ -599,7 +650,10 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
             bizMap.merge(userPaymentOrder.getBizId(), teacherAmount, BigDecimal::add);
         }
 
-        saveData(userPaymentOrder, tenantdivMap, teacherMap, bizMap, serviceFeeAmount);
+        // 计算分润
+        teacherAmount(userPaymentOrder, tenantdivMap, teacherMap, serviceFeeAmount);
+
+        saveData(userPaymentOrder, tenantdivMap, teacherMap, bizMap);
 
 
         videoLessonPurchaseRecordService.videoSend(lessonGroup.getTeacherId(), purchaseRecord.getStudentId(), lessonGroup);
@@ -676,9 +730,12 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
         //服务费  原价的平台服务费 ,减去优惠券金额
         BigDecimal serviceFeeAmount = userPaymentOrder.getActualPrice();
 
+        // 计算分润
+        teacherAmount(userPaymentOrder, tenantdivMap, teacherMap, serviceFeeAmount);
+
         memberPriceSettingsService.orderSuccess(userPaymentOrder);
 
-        saveData(userPaymentOrder, tenantdivMap, teacherMap, bizMap, serviceFeeAmount);
+        saveData(userPaymentOrder, tenantdivMap, teacherMap, bizMap);
     }
 
     @Override
@@ -698,16 +755,18 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
         //服务费  原价的平台服务费 ,减去优惠券金额
         BigDecimal serviceFeeAmount = userPaymentOrder.getActualPrice();
 
+        // 计算分润
+        teacherAmount(userPaymentOrder, tenantdivMap, teacherMap, serviceFeeAmount);
+
+
         activityPlanService.orderSuccess(userPaymentOrder);
 
-        saveData(userPaymentOrder, tenantdivMap, teacherMap, bizMap, serviceFeeAmount);
+        saveData(userPaymentOrder, tenantdivMap, teacherMap, bizMap);
     }
 
 
     // 写入数据库
-    private void saveData(UserOrderDetailVo userPaymentOrder, Map<Long, BigDecimal> tenantdivMap, Map<Long, BigDecimal> teacherMap, Map<Long, BigDecimal> bizMap, BigDecimal platformFee) {
-        // 计算分润
-        teacherAmount(userPaymentOrder, tenantdivMap, teacherMap, platformFee);
+    private void saveData(UserOrderDetailVo userPaymentOrder, Map<Long, BigDecimal> tenantdivMap, Map<Long, BigDecimal> teacherMap, Map<Long, BigDecimal> bizMap) {
 
 
         // 判断金额是否和支付金额一致
@@ -889,6 +948,15 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
         if (platformFee.compareTo(BigDecimal.ZERO) <= 0) {
             return;
         }
+
+        String userAccountConfig = redisCacheService.getUserAccountConfig(userPaymentOrder.getSubOrderNo());
+        UserPaymentOrderWrapper.AccountTenantTo accountTenantTo;
+        if (StringUtils.isBlank(userAccountConfig)) {
+            accountTenantTo = new UserPaymentOrderWrapper.AccountTenantTo();
+        } else {
+            accountTenantTo = JSON.parseObject(userAccountConfig, UserPaymentOrderWrapper.AccountTenantTo.class);
+        }
+
         //卖家不能分润自己 买家和分润人相同,不分润
         if (null != userPaymentOrder.getRecomUserId() && userPaymentOrder.getRecomUserId() != 0
                 && !userPaymentOrder.getRecomUserId().equals(userPaymentOrder.getMerchId())
@@ -901,10 +969,9 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
             BigDecimal shareFee = platformFee.multiply(shareFeeRate).setScale(2, RoundingMode.HALF_UP);
             if (shareFee.compareTo(BigDecimal.ZERO) > 0) {
                 // 判断分润给机构 还是给老师
-                Teacher teacher = teacherService.getById(userPaymentOrder.getRecomUserId());
-                if (teacher.getTenantId() != null && teacher.getTenantId() > 0 && ESettlementFrom.TENANT.equals(teacher.getSettlementFrom())) {
+                if (accountTenantTo.getShareTenant() !=null && accountTenantTo.getShareTenant() > 0) {
                     // 分润给机构
-                    tenantdivMap.merge(teacher.getTenantId(), shareFee, BigDecimal::add);
+                    tenantdivMap.merge(accountTenantTo.getShareTenant(), shareFee, BigDecimal::add);
                     tenantdivMap.merge(-1L, shareFee, BigDecimal::subtract);
 
                 } else {

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

@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.yonge.cooleshow.biz.dal.dto.req.OrderReq;
 import com.yonge.cooleshow.biz.dal.entity.*;
 import com.yonge.cooleshow.biz.dal.enums.AccountBizTypeEnum;
+import com.yonge.cooleshow.biz.dal.enums.GoodTypeEnum;
 import com.yonge.cooleshow.biz.dal.enums.InOrOutEnum;
 import com.yonge.cooleshow.biz.dal.enums.SourceTypeEnum;
 import com.yonge.cooleshow.biz.dal.service.*;
@@ -52,6 +53,9 @@ public class PianoRoomBuyRecordServiceImpl extends ServiceImpl<PianoRoomBuyRecor
     @Autowired
     private PianoRoomChangeRecordService pianoRoomChangeRecordService;
 
+    @Autowired
+    private RedisCacheService redisCacheService;
+
     @Override
     public PianoRoomBuyRecordVo detail(Long id) {
         return baseMapper.detail(id);
@@ -149,6 +153,16 @@ public class PianoRoomBuyRecordServiceImpl extends ServiceImpl<PianoRoomBuyRecor
         userOrderDetail.setActualPrice(userOrderDetail.getExpectPrice());
 
         orderGoodsInfo.setUserOrderDetail(userOrderDetail);
+
+
+        // 设置金额入账去向
+        UserPaymentOrderWrapper.AccountTenantTo accountTenantTo = new UserPaymentOrderWrapper.AccountTenantTo();
+        if (orderGoodsInfo.getRecomUserId() !=null) {
+            accountTenantTo.setShareTenant(teacherService.teacherSettlementFrom(orderGoodsInfo.getRecomUserId()));
+        }
+        // 存入缓存
+        redisCacheService.saveUserAccountConfig(orderGoodsInfo.getSubOrderNo(), accountTenantTo.jsonString());
+
     }
 
 }

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

@@ -1,12 +1,9 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
-import com.google.common.collect.Lists;
 import com.yonge.cooleshow.biz.dal.service.CacheKey;
 import com.yonge.cooleshow.biz.dal.service.RedisCacheService;
 import com.yonge.cooleshow.common.enums.CacheNameEnum;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.collections.CollectionUtils;
-import org.apache.commons.lang3.BooleanUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.redisson.api.RBucket;
 import org.redisson.api.RedissonClient;
@@ -15,12 +12,8 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.text.MessageFormat;
-import java.util.Arrays;
-import java.util.List;
 import java.util.Objects;
-import java.util.Optional;
 import java.util.concurrent.TimeUnit;
-import java.util.stream.Collectors;
 
 /**
  * Created by Eric.Shang on 2022/10/9.
@@ -181,6 +174,45 @@ public class RedisCacheServiceImpl implements RedisCacheService {
         return (String) data;
     }
 
+
+    /**
+     * 用户下单金额分账配置
+     *
+     * @param subOrderNo 订单详情号
+     * @param config 下单配置信息
+     */
+    @Override
+    public void saveUserAccountConfig(String subOrderNo, String config) {
+
+        String cacheKey = getCacheKey(CacheKey.USER_ORDER_ACCOUNT, subOrderNo);
+
+        RBucket<Object> bucket = redissonClient.getBucket(cacheKey);
+
+        // 缓存数据
+        bucket.set(config, 150L, TimeUnit.MINUTES);
+    }
+
+
+    /**
+     * 用户下单金额分账配置
+     *
+     * @param subOrderNo 订单详情号
+     */
+    @Override
+    public String getUserAccountConfig(String subOrderNo) {
+
+        String cacheKey = getCacheKey(CacheKey.USER_ORDER_ACCOUNT,subOrderNo);
+
+        // 获取用户支付配置信息
+        RBucket<Object> bucket = redissonClient.getBucket(cacheKey);
+        Object data = bucket.get();
+        if (Objects.isNull(data)) {
+            return StringUtils.EMPTY;
+        }
+
+        return (String) data;
+    }
+
     /**
      * 删除用户下单配置
      *

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

@@ -10,6 +10,7 @@ import com.yonge.cooleshow.biz.dal.entity.SysGoodsPrice;
 import com.yonge.cooleshow.biz.dal.wrapper.SysGoodsPriceWrapper;
 import com.yonge.cooleshow.biz.dal.mapper.SysGoodsPriceMapper;
 import com.yonge.cooleshow.biz.dal.service.SysGoodsPriceService;
+import org.springframework.transaction.annotation.Transactional;
 
 /**
  * 商品价格设置
@@ -47,6 +48,7 @@ public class SysGoodsPriceServiceImpl extends ServiceImpl<SysGoodsPriceMapper, S
      * @param sysGoodsPrice SysGoodsPriceWrapper.SysGoodsPrice
      * @return Boolean
      */
+    @Transactional(rollbackFor = Exception.class)
     @Override
     public Boolean add(SysGoodsPriceWrapper.SysGoodsPrice sysGoodsPrice) {    	
         
@@ -58,6 +60,7 @@ public class SysGoodsPriceServiceImpl extends ServiceImpl<SysGoodsPriceMapper, S
      * @param sysGoodsPrice SysGoodsPriceWrapper.SysGoodsPrice
      * @return Boolean
      */
+    @Transactional(rollbackFor = Exception.class)
     @Override
     public Boolean update(SysGoodsPriceWrapper.SysGoodsPrice sysGoodsPrice){
 

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

@@ -16,8 +16,12 @@ import com.yonge.toolset.utils.idcard.IdcardInfoExtractor;
 import com.yonge.toolset.utils.idcard.IdcardValidator;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
 
 import javax.annotation.Resource;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 import java.util.Optional;
 
 @Service
@@ -103,4 +107,16 @@ public class SysUserServiceImpl implements SysUserService {
         }
         return idcardInfoExtractor;
     }
+
+    @Override
+    public Map<Long, com.yonge.cooleshow.biz.dal.entity.SysUser> getMapByIds(List<Long> userIds) {
+        if (CollectionUtils.isEmpty(userIds)) {
+            return new HashMap<>();
+        }
+        List<com.yonge.cooleshow.biz.dal.entity.SysUser> sysUsers = sysUserMapper.selectBatchIds(userIds);
+        if (CollectionUtils.isEmpty(sysUsers)) {
+            return new HashMap<>();
+        }
+        return sysUsers.stream().collect(HashMap::new, (m, v) -> m.put(v.getId(), v), HashMap::putAll);
+    }
 }

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

@@ -920,4 +920,18 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
 
     }
 
+    @Override
+    public Long teacherSettlementFrom(Long teacherId) {
+        // 判断分润给机构 还是给老师
+        if (teacherId == null) {
+            return -1L;
+        }
+        Teacher teacher = getById(teacherId);
+        if (teacher.getTenantId() != null && teacher.getTenantId() > 0 && ESettlementFrom.TENANT.equals(teacher.getSettlementFrom())) {
+            return teacher.getTenantId();
+        } else {
+            // 分润给老师
+            return  -1L;
+        }
+    }
 }

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

@@ -3,6 +3,7 @@ package com.yonge.cooleshow.biz.dal.service.impl;
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.google.common.collect.Lists;
 import com.yonge.cooleshow.biz.dal.dao.StudentDao;
@@ -183,7 +184,7 @@ public class TenantActivationCodeServiceImpl extends ServiceImpl<TenantActivatio
         if (code == null) {
             throw new BizException("激活码不存在");
         }
-        if (Boolean.TRUE.equals(code.getActivationStatus())) {
+        if (Boolean.TRUE.equals(code.getActivationStatus()) || EActivationCode.SEND.equals(code.getSendStatus())) {
             throw new BizException("激活码已经被使用");
         }
 
@@ -202,8 +203,6 @@ public class TenantActivationCodeServiceImpl extends ServiceImpl<TenantActivatio
         }
         Long tenantAlbumPurchaseId = code.getTenantAlbumPurchaseId();
         TenantAlbumPurchase purchase = tenantAlbumPurchaseMapper.selectById(tenantAlbumPurchaseId);
-        Integer purchaseCycle = purchase.getPurchaseCycle();
-
 
         addUserTenantAlbumRecord(student.getUserId(), purchase, null);
 
@@ -349,15 +348,13 @@ public class TenantActivationCodeServiceImpl extends ServiceImpl<TenantActivatio
             userTenantAlbumRecord.setTimes(purchase.getPurchaseCycle());
         }
 
-
-        QueryWrapper<UserTenantAlbumRecord> queryWrapper = new QueryWrapper<>();
-        queryWrapper.lambda()
-                .eq(UserTenantAlbumRecord::getTenantId, userTenantAlbumRecord.getTenantId())
-                .eq(UserTenantAlbumRecord::getUserId, studentId)
-                .eq(UserTenantAlbumRecord::getTenantAlbumId, userTenantAlbumRecord.getTenantAlbumId())
-                .eq(UserTenantAlbumRecord::getClientType, ClientEnum.STUDENT)
-                .orderByDesc(UserTenantAlbumRecord::getEndTime);
-        List<UserTenantAlbumRecord> userTenantAlbumRecords = userTenantAlbumRecordMapper.selectList(queryWrapper);
+        List<UserTenantAlbumRecord> userTenantAlbumRecords = userTenantAlbumRecordMapper
+                .selectList(Wrappers.<UserTenantAlbumRecord>lambdaQuery()
+                        .eq(UserTenantAlbumRecord::getTenantId, userTenantAlbumRecord.getTenantId())
+                        .eq(UserTenantAlbumRecord::getUserId, studentId)
+                        .eq(UserTenantAlbumRecord::getTenantAlbumId, userTenantAlbumRecord.getTenantAlbumId())
+                        .eq(UserTenantAlbumRecord::getClientType, ClientEnum.STUDENT)
+                        .orderByDesc(UserTenantAlbumRecord::getEndTime));
 
         userTenantAlbumRecord.setUserId(studentId);
         userTenantAlbumRecord.setCreateBy(studentId);

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

@@ -19,10 +19,7 @@ import com.yonge.cooleshow.biz.dal.entity.TenantAlbumMusic;
 import com.yonge.cooleshow.biz.dal.wrapper.TenantAlbumMusicWrapper;
 import com.yonge.cooleshow.biz.dal.mapper.TenantAlbumMusicMapper;
 
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
@@ -178,4 +175,28 @@ public class TenantAlbumMusicServiceImpl extends ServiceImpl<TenantAlbumMusicMap
         return data;
 
     }
+
+    @Override
+    public List<Long> getMusicIdsByIds(List<Long> tenantAlbumIds) {
+
+        if (CollectionUtils.isEmpty(tenantAlbumIds)) {
+            return Collections.emptyList();
+        }
+        List<TenantAlbumMusic> list = this.lambdaQuery().in(TenantAlbumMusic::getTenantAlbumId, tenantAlbumIds).list();
+        if (CollectionUtils.isEmpty(list)) {
+            return Collections.emptyList();
+        }
+        return list.stream().map(TenantAlbumMusic::getMusicSheetId).collect(Collectors.toList());
+    }
+
+
+    /**
+     * 获取机构专辑曲目ID集合
+     *
+     * @param tenantId 机构ID
+     */
+    @Override
+    public List<Long> getMusicIdsByTenantIds(Long tenantId) {
+        return baseMapper.selectMusicIdsByTenantIds(tenantId);
+    }
 }

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

@@ -71,4 +71,13 @@ public class TenantAlbumPurchaseServiceImpl extends ServiceImpl<TenantAlbumPurch
 
         return this.updateById(JSON.parseObject(tenantAlbumPurchase.jsonString(), TenantAlbumPurchase.class));
     }
+
+    @Override
+    public TenantAlbumPurchase getByOrderNo(String orderNo) {
+        return this.lambdaQuery()
+                .eq(TenantAlbumPurchase::getOrderNo, orderNo)
+                .last("limit 1")
+                .one();
+
+    }
 }

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

@@ -6,7 +6,9 @@ import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 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.GoodTypeEnum;
 import com.yonge.cooleshow.biz.dal.enums.OrderStatusEnum;
+import com.yonge.cooleshow.biz.dal.enums.SourceTypeEnum;
 import com.yonge.cooleshow.biz.dal.mapper.TenantAlbumMapper;
 import com.yonge.cooleshow.biz.dal.service.*;
 import com.yonge.cooleshow.biz.dal.vo.UserOrderDetailVo;
@@ -62,6 +64,12 @@ public class TenantAlbumServiceImpl extends ServiceImpl<TenantAlbumMapper, Tenan
     @Autowired
     private TenantActivationCodeService tenantActivationCodeService;
 
+    @Autowired
+    private RedisCacheService redisCacheService;
+
+    @Autowired
+    private TeacherService teacherService;
+
     /**
      * 查询详情
      *
@@ -175,9 +183,8 @@ public class TenantAlbumServiceImpl extends ServiceImpl<TenantAlbumMapper, Tenan
                 }
                 price = tenantAlbum.getSalePrice();
                 userOrderDetail.setMerchId(tenantInfo.getId());
-                tenantAlbumContent.setBuyMultiple(1);
                 tenantAlbumContent.setBuyNumber(1);
-                tenantAlbumContent.setBuyCycle(tenantAlbumContent.getBuyCycle());
+                tenantAlbumContent.setBuyCycle(tenantAlbumContent.getBuyCycle()*tenantAlbumContent.getBuyMultiple());
                 tenantAlbumContent.setTenantId(tenantInfo.getId());
                 break;
             }
@@ -215,6 +222,16 @@ public class TenantAlbumServiceImpl extends ServiceImpl<TenantAlbumMapper, Tenan
 
         orderGoodsInfo.setUserOrderDetail(userOrderDetail);
 
+
+        // 设置金额入账去向
+        UserPaymentOrderWrapper.AccountTenantTo accountTenantTo = new UserPaymentOrderWrapper.AccountTenantTo();
+        if (orderGoodsInfo.getRecomUserId() !=null) {
+            accountTenantTo.setShareTenant(teacherService.teacherSettlementFrom(orderGoodsInfo.getRecomUserId()));
+        }
+
+        // 存入缓存
+        redisCacheService.saveUserAccountConfig(orderGoodsInfo.getSubOrderNo(), accountTenantTo.jsonString());
+
     }
 
     /**
@@ -247,6 +264,7 @@ public class TenantAlbumServiceImpl extends ServiceImpl<TenantAlbumMapper, Tenan
                 tenantAlbumPurchase.setPurchaseQuantity(userOrderDetailVo.getGoodNum());
                 tenantAlbumPurchase.setPurchaseCycle(tenantAlbumContent.getBuyCycle());
                 tenantAlbumPurchase.setActiveQuantity(0);
+                tenantAlbumPurchase.setOrderNo(userOrderDetailVo.getOrderNo());
                 tenantAlbumPurchase.setPurchasePrice(userOrderDetailVo.getActualPrice());
                 tenantAlbumPurchase.setPurchaseStatus(OrderStatusEnum.PAID.getCode());
                 tenantAlbumPurchaseService.save(tenantAlbumPurchase);
@@ -292,6 +310,7 @@ public class TenantAlbumServiceImpl extends ServiceImpl<TenantAlbumMapper, Tenan
         insertAlbumMusic(tenantId, tenantAlbum, musicSheetDataList);
     }
 
+    @Transactional(rollbackFor = Exception.class)
     @Override
     public void updateAlbum(Long tenantId, TenantAlbum tenantAlbum,
                             List<TenantAlbumWrapper.MusicSheetData> musicSheetDataList) {
@@ -303,7 +322,7 @@ public class TenantAlbumServiceImpl extends ServiceImpl<TenantAlbumMapper, Tenan
 
         tenantAlbumMusicService.lambdaUpdate()
                 .set(TenantAlbumMusic::getDelFlag, true)
-                .eq(TenantAlbumMusic::getTenantAlbumId, tenantAlbum)
+                .eq(TenantAlbumMusic::getTenantAlbumId, tenantAlbum.getId())
                 .eq(TenantAlbumMusic::getTenantId, tenantId)
                 .update();
 
@@ -311,6 +330,7 @@ public class TenantAlbumServiceImpl extends ServiceImpl<TenantAlbumMapper, Tenan
 
     }
 
+    @Transactional(rollbackFor = Exception.class)
     private void insertAlbumMusic(Long tenantId, TenantAlbum tenantAlbum,
                                   List<TenantAlbumWrapper.MusicSheetData> musicSheetDataList) {
         //曲目表赋值

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

@@ -202,8 +202,11 @@ public class TenantApplyRecordServiceImpl extends ServiceImpl<TenantApplyRecordM
             queryName2(info);
             //审核表取一条最新数据
             TenantApplyRecordWrapper.LastRecord lastRecordEntry = baseMapper.selectEntry(id);
-            //设置地名
-            queryName(lastRecordEntry);
+
+            if (!(lastRecordEntry == null)){
+                //设置地名
+                queryName(lastRecordEntry);
+            }
             info.setLastApplyRecord(lastRecordEntry);
             return info;
         } else {
@@ -211,7 +214,9 @@ public class TenantApplyRecordServiceImpl extends ServiceImpl<TenantApplyRecordM
             TenantApplyRecordWrapper.TenantApplyRecord tenantApplyRecord = baseMapper.selectLastEntry(id);
             queryName2(tenantApplyRecord);
             TenantApplyRecordWrapper.LastRecord lastRecord = baseMapper.selectSecondEntry(id);
-            queryName(lastRecord);
+            if (!(lastRecord == null)){
+                queryName(lastRecord);
+            }
             tenantApplyRecord.setLastApplyRecord(lastRecord);
             return tenantApplyRecord;
         }
@@ -263,7 +268,7 @@ public class TenantApplyRecordServiceImpl extends ServiceImpl<TenantApplyRecordM
         lastRecordEntry.setRegionName(codeNameMap2.get(lastRecordEntry.getRegionCode()));
     }
 
-
+    @Transactional(rollbackFor = Exception.class)
     @Override
     public Boolean entry(TenantApplyRecordWrapper.TenantEntry entry,Long verifyUserId) {
         Boolean ifPass = entry.getIfPass();

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

@@ -256,7 +256,7 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoMapper, TenantI
             sysUser.setUsername(tenantInfo.getUsername());
             String newPassword = MessageFormat.format("klxjg{0}", tenantInfo.getPhone().substring(7));
             String password = new BCryptPasswordEncoder().encode(newPassword);
-            sysUser.setPassword(password);
+            //sysUser.setPassword(password);
             sysUserMapper.insert(sysUser);
         }
         return sysUser;
@@ -553,6 +553,7 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoMapper, TenantI
         return null;
     }
 
+    @Transactional(rollbackFor = Exception.class)
     @Override
     public Boolean updateTenantInfo(TenantInfo info, Long tenantId) {
         boolean update = this.lambdaUpdate().set(TenantInfo::getName, info.getName())

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

@@ -1,31 +1,23 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
+import cn.hutool.core.date.DateUtil;
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 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.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dao.SubjectDao;
 import com.yonge.cooleshow.biz.dal.dao.TeacherDao;
-import com.yonge.cooleshow.biz.dal.entity.ImGroup;
-import com.yonge.cooleshow.biz.dal.entity.SysArea;
-import com.yonge.cooleshow.biz.dal.entity.Teacher;
-import com.yonge.cooleshow.biz.dal.entity.TenantInfo;
-import com.yonge.cooleshow.biz.dal.entity.TenantUnbindHistory;
-import com.yonge.cooleshow.biz.dal.entity.TenantUnbindRecord;
+import com.yonge.cooleshow.biz.dal.entity.*;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.enums.ImGroupType;
 import com.yonge.cooleshow.biz.dal.enums.MessageTypeEnum;
 import com.yonge.cooleshow.biz.dal.mapper.SysAreaMapper;
 import com.yonge.cooleshow.biz.dal.mapper.TenantUnbindRecordMapper;
-import com.yonge.cooleshow.biz.dal.service.ImGroupService;
-import com.yonge.cooleshow.biz.dal.service.SysConfigService;
-import com.yonge.cooleshow.biz.dal.service.SysMessageService;
-import com.yonge.cooleshow.biz.dal.service.TenantInfoService;
-import com.yonge.cooleshow.biz.dal.service.TenantUnbindHistoryService;
-import com.yonge.cooleshow.biz.dal.service.TenantUnbindRecordService;
+import com.yonge.cooleshow.biz.dal.service.*;
 import com.yonge.cooleshow.biz.dal.wrapper.TenantUnbindRecordWrapper;
 import com.yonge.cooleshow.common.constant.SysConfigConstant;
 import com.yonge.cooleshow.common.enums.ESettlementFrom;
@@ -33,6 +25,7 @@ import com.yonge.cooleshow.common.enums.ETenantUnBindAuditStatus;
 import com.yonge.toolset.base.exception.BizException;
 import com.yonge.toolset.thirdparty.message.MessageSenderPluginContext;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -86,6 +79,9 @@ public class TenantUnbindRecordServiceImpl extends ServiceImpl<TenantUnbindRecor
     @Autowired
     private ImGroupService imGroupService;
 
+    @Autowired
+    private UnbindAuthUserService unbindAuthUserService;
+
     /**
      * @param id 详情ID
      * @return TenantUnbindRecord
@@ -242,6 +238,7 @@ public class TenantUnbindRecordServiceImpl extends ServiceImpl<TenantUnbindRecor
 
         // 添加历史记录
         TenantUnbindHistory history = JSON.parseObject(JSON.toJSONString(unbindRecord), TenantUnbindHistory.class);
+        history.setId(null);
         tenantUnbindHistoryService.save(history);
 
         // 老师端发送消息
@@ -268,6 +265,51 @@ public class TenantUnbindRecordServiceImpl extends ServiceImpl<TenantUnbindRecor
                 .update();
     }
 
+    /**
+     * 定时发送平台审核短信 下午5点
+     */
+    @Override
+    public void sendPlatformAuditMessage() {
+        String configValue = sysConfigService.findConfigValue(SysConfigConstant.TENANT_USER_UNBIND_EXPIRE_TIME);
+        // 默认5天
+        long expireTime = 5L;
+        try {
+            expireTime = Long.parseLong(configValue);
+        } catch (Exception e) {
+        }
+        // 查询机构超出5天未处理的解绑申请
+        Integer count = tenantUnbindRecordService.lambdaQuery()
+                .eq(TenantUnbindRecord::getStatus, ETenantUnBindAuditStatus.DOING)
+                .le(TenantUnbindRecord::getCreateTime, DateUtil.offsetDay(new Date(), -(int) expireTime))
+                .count();
+        if (count == null || count == 0) {
+            return;
+        }
+        // 查询平台审核人员 TODO 要根据地区区分,现在不用
+        List<UnbindAuthUser> list = unbindAuthUserService.list();
+        if(CollectionUtils.isEmpty(list)) {
+            return;
+        }
+        long finalExpireTime = expireTime;
+        CompletableFuture.runAsync(() -> {
+            // 发送短信
+            for (UnbindAuthUser unbindAuthUser : list) {
+                SysUser sysUser = sysUserFeignService.queryUserById(unbindAuthUser.getUserId());
+                if (sysUser == null) {
+                    continue;
+                }
+                Map<Long, String> receivers = new HashMap<>();
+                receivers.put(unbindAuthUser.getUserId(), sysUser.getPhone());
+                sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS,
+                        MessageTypeEnum.PLATFORM_AUDIT_UNBIND,
+                        receivers, null, 0, null, ClientEnum.SYSTEM.getCode(), count, finalExpireTime);
+            }
+
+        });
+
+
+    }
+
     private void sendTeacherUnBindMessage(TenantUnbindRecordWrapper.Audio audio, TenantUnbindRecord record) {
         TenantInfo tenantInfo = tenantInfoService.getById(record.getTenantId());
         if (tenantInfo == null) {

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

@@ -0,0 +1,131 @@
+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.CollectionUtils;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.google.common.collect.Lists;
+import com.yonge.cooleshow.biz.dal.entity.SysArea;
+import com.yonge.cooleshow.biz.dal.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.mapper.SysUserMapper;
+import com.yonge.cooleshow.biz.dal.service.SysAreaService;
+import com.yonge.cooleshow.biz.dal.service.SysUserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.beans.BeanUtils;
+import lombok.extern.slf4j.Slf4j;
+import com.yonge.cooleshow.biz.dal.entity.UnbindAuthUser;
+import com.yonge.cooleshow.biz.dal.wrapper.UnbindAuthUserWrapper;
+import com.yonge.cooleshow.biz.dal.mapper.UnbindAuthUserMapper;
+import com.yonge.cooleshow.biz.dal.service.UnbindAuthUserService;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ * 解绑审核人员设置
+ * 2023-08-23 16:33:16
+ */
+@Slf4j
+@Service
+public class UnbindAuthUserServiceImpl extends ServiceImpl<UnbindAuthUserMapper, UnbindAuthUser> implements UnbindAuthUserService {
+
+    @Autowired
+    private SysUserService sysUserService;
+
+    @Autowired
+    private SysAreaService sysAreaService;
+
+    /**
+     * 查询详情
+     * @param id 详情ID
+     * @return UnbindAuthUser
+     */
+    @Override
+    public UnbindAuthUser detail(Long id) {
+        
+        return baseMapper.selectById(id);
+    }
+    
+    /**
+     * 分页查询
+     * @param page IPage<UnbindAuthUser>
+     * @param query UnbindAuthUserWrapper.UnbindAuthUserQuery
+     * @return IPage<UnbindAuthUser>
+     */
+    @Override
+    public IPage<UnbindAuthUserWrapper.UnbindAuthUser> selectPage(IPage<UnbindAuthUserWrapper.UnbindAuthUser> page, UnbindAuthUserWrapper.UnbindAuthUserQuery query) {
+
+        IPage<UnbindAuthUserWrapper.UnbindAuthUser> authUserIPage = page.setRecords(baseMapper.selectPage(page, query));
+        List<UnbindAuthUserWrapper.UnbindAuthUser> records = authUserIPage.getRecords();
+
+        if (CollectionUtils.isEmpty(records)) {
+            return authUserIPage;
+        }
+
+        // 设置员工信息
+        List<Long> userIds = records.stream().map(UnbindAuthUserWrapper.UnbindAuthUser::getUserId).collect(Collectors.toList());
+        Map<Long, SysUser> userMap = sysUserService.getMapByIds(userIds);
+
+        List<Integer> codes = records.stream()
+                .flatMap(o -> Lists.newArrayList(o.getProvinceCode(), o.getCityCode(), o.getRegionCode()).stream())
+                .filter(Objects::nonNull)
+                .collect(Collectors.toList());
+        Map<Integer, SysArea> areaMap = new HashMap<>();
+        if (CollectionUtils.isNotEmpty(codes)) {
+          List<SysArea> sysAreas = sysAreaService.queryByCodes(codes);
+          if (CollectionUtils.isNotEmpty(sysAreas)) {
+              areaMap = sysAreas.stream().collect(Collectors.toMap(SysArea::getCode, o -> o));
+          }
+        }
+
+        for (UnbindAuthUserWrapper.UnbindAuthUser record : records) {
+            SysUser sysUser = userMap.get(record.getUserId());
+            if (sysUser != null) {
+                record.setUserName(sysUser.getUsername());
+                record.setUserPhone(sysUser.getPhone());
+            }
+
+            SysArea province = areaMap.get(record.getProvinceCode());
+            if (province != null) {
+                record.setProvinceName(province.getName());
+            }
+
+            SysArea city = areaMap.get(record.getCityCode());
+            if (city != null) {
+                record.setCityName(city.getName());
+            }
+
+            SysArea region = areaMap.get(record.getRegionCode());
+            if (region != null) {
+                record.setRegionName(region.getName());
+            }
+        }
+        return authUserIPage;
+    }
+
+    /**
+     * 添加
+     * @param unbindAuthUser UnbindAuthUserWrapper.UnbindAuthUser
+     * @return Boolean
+     */
+    @Override
+    public Boolean add(UnbindAuthUserWrapper.UnbindAuthUser unbindAuthUser) {
+
+        return this.save(JSON.parseObject(unbindAuthUser.jsonString(), UnbindAuthUser.class));
+    }
+
+    /**
+     * 更新
+     * @param unbindAuthUser UnbindAuthUserWrapper.UnbindAuthUser
+     * @return Boolean
+     */
+    @Override
+    public Boolean update(UnbindAuthUserWrapper.UnbindAuthUser unbindAuthUser){
+
+        return this.updateById(JSON.parseObject(unbindAuthUser.jsonString(), UnbindAuthUser.class));       
+    }
+}

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

@@ -64,7 +64,6 @@ import java.util.Objects;
 import java.util.concurrent.TimeUnit;
 import java.util.function.Consumer;
 import java.util.function.Function;
-import java.util.stream.Collectors;
 
 @Slf4j
 @Service
@@ -943,7 +942,13 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
         }
     }
 
-    private void saveActivityRecord(UserOrderDetailVo orderDetailVo) {
+    /**
+     * 记录活动参与
+     *
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void saveActivityRecord(UserOrderDetailVo orderDetailVo) {
         if (orderDetailVo.getActivityId() == null || orderDetailVo.getActivityId() == 0 || orderDetailVo.getRecomUserId() == null) {
             return;
         }

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

@@ -355,6 +355,8 @@ public class UserPaymentCoreServiceImpl implements UserPaymentCoreService {
             if (merchId != null && merchId != 0) {
                 redissonClient.getBucket(CacheNameEnum.TEACHER_TOTAL.getRedisKey(merchId)).delete();
             }
+            // 记录活动参与
+            userOrderService.saveActivityRecord(orderDetailVo);
         }
         //清除买家统计缓存
         if (ClientEnum.STUDENT.getCode().equals(detail.getPaymentClient())) {
@@ -592,6 +594,7 @@ public class UserPaymentCoreServiceImpl implements UserPaymentCoreService {
 
         // 入库后处理流程
         for (UserPaymentOrderWrapper.OrderGoodsInfo item : orderReq.getGoodsInfos()) {
+            item.setRecomUserId(orderReq.getRecomUserId());
             if (orderSuccessAfter.containsKey(item.getGoodType())) {
                 orderSuccessAfter.get(item.getGoodType()).accept(item);
             }

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

@@ -76,6 +76,12 @@ public class VideoLessonPurchaseRecordServiceImpl extends ServiceImpl<VideoLesso
     private MusicSheetPurchaseRecordService musicSheetPurchaseRecordService;
 
     @Autowired
+    private TeacherService teacherService;
+
+    @Autowired
+    private RedisCacheService redisCacheService;
+
+    @Autowired
     private PlatformCashAccountRecordService platformCashAccountRecordService;
     public VideoLessonPurchaseRecordDao getDao() {
         return videoLessonPurchaseRecordDao;
@@ -330,6 +336,17 @@ public class VideoLessonPurchaseRecordServiceImpl extends ServiceImpl<VideoLesso
         log.info("buyVideoCourse  return {}", userOrderDetail);
 
         orderGoodsInfo.setUserOrderDetail(userOrderDetail);
+
+
+        // 设置金额入账去向
+        UserPaymentOrderWrapper.AccountTenantTo accountTenantTo = new UserPaymentOrderWrapper.AccountTenantTo();
+        if (orderGoodsInfo.getRecomUserId() !=null) {
+            accountTenantTo.setShareTenant(teacherService.teacherSettlementFrom(orderGoodsInfo.getRecomUserId()));
+        }
+        accountTenantTo.setIncomeTenant(teacherService.teacherSettlementFrom(lessonGroup.getTeacherId()));
+        // 存入缓存
+        redisCacheService.saveUserAccountConfig(orderGoodsInfo.getSubOrderNo(), accountTenantTo.jsonString());
+
     }
 
     /**

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

@@ -59,6 +59,9 @@ public class TenantActivationCodeWrapper {
         @ApiModelProperty("激活结束")
         private Date activationEndTime;
 
+        @ApiModelProperty("订单号 订单详情专用")
+        private String orderNo;
+
         public String getKeyword() {
             return Optional.ofNullable(keyword).filter(StringUtils::isNotBlank).orElse(null);
         }
@@ -121,6 +124,10 @@ public class TenantActivationCodeWrapper {
         @ApiModelProperty("激活数量")
         private Integer activeQuantity;
 
+
+        @ApiModelProperty("购买数量")
+        private Integer  purchaseQuantity;
+
         public String jsonString() {
             return JSON.toJSONString(this);
         }

+ 97 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/UnbindAuthUserWrapper.java

@@ -0,0 +1,97 @@
+package com.yonge.cooleshow.biz.dal.wrapper;
+
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.microsvc.toolkit.common.response.paging.QueryInfo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import java.util.Optional;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * 解绑审核人员设置
+ * 2023-08-23 16:33:16
+ */
+@ApiModel(value = "UnbindAuthUserWrapper对象", description = "解绑审核人员设置查询对象")
+public class UnbindAuthUserWrapper {
+
+    @Data
+	@Builder
+    @NoArgsConstructor
+    @AllArgsConstructor
+    @ApiModel(" UnbindAuthUserQuery-解绑审核人员设置")
+    public static class UnbindAuthUserQuery implements QueryInfo {
+    
+    	@ApiModelProperty("当前页")
+        private Integer page;
+        
+        @ApiModelProperty("分页行数")
+        private Integer rows;
+        
+        @ApiModelProperty("关键字匹配")
+		private String keyword;
+        
+        public String getKeyword() {
+            return Optional.ofNullable(keyword).filter(StringUtils::isNotBlank).orElse(null);
+        }
+        
+        public String jsonString() {
+            return JSON.toJSONString(this);
+        }
+
+        public static UnbindAuthUserQuery from(String json) {
+            return JSON.parseObject(json, UnbindAuthUserQuery.class);
+        }
+    }  
+
+    @Data
+	@ApiModel(" UnbindAuthUser-解绑审核人员设置")
+    public static class UnbindAuthUser {
+
+
+        @ApiModelProperty("主键")
+        private Long id;
+
+        @ApiModelProperty("员工ID")
+        private Long userId;
+
+        @ApiModelProperty("员工姓名")
+        private String userName;
+
+        @ApiModelProperty("员工手机号")
+        private String userPhone;
+
+        @ApiModelProperty("省份编码")
+        private Integer provinceCode;
+
+        @ApiModelProperty("城市编码")
+        private Integer cityCode;
+
+        @ApiModelProperty("地区/街道")
+        private Integer regionCode;
+
+        @ApiModelProperty("省份名称")
+        private String provinceName;
+
+        @ApiModelProperty("城市名称")
+        private String cityName;
+
+        @ApiModelProperty("地区街道名称")
+        private String regionName;
+
+        public String jsonString() {
+            return JSON.toJSONString(this);
+        }
+
+        public static UnbindAuthUser from(String json) {
+            return JSON.parseObject(json, UnbindAuthUser.class);
+        }
+	}
+
+}

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

@@ -849,6 +849,9 @@ public class UserPaymentOrderWrapper {
         @ApiModelProperty(value = "生成的订单详情信息", hidden = true)
         private UserOrderDetail userOrderDetail;
 
+
+        @ApiModelProperty(value = "推荐用户id(有推荐人的情况)", hidden = true)
+        private Long recomUserId;
         public Integer getGoodNum() {
             return Optional.ofNullable(goodNum).orElse(1);
         }
@@ -888,4 +891,23 @@ public class UserPaymentOrderWrapper {
         @ApiModelProperty("支付厂商")
         private String paymentVendor;
     }
+
+
+
+    @Data
+    @ApiModel("AccountTo-订单金额接收方")
+    public static class AccountTenantTo implements Serializable {
+
+        @ApiModelProperty("收入机构  -1 默认老师自己")
+        private Long incomeTenant = -1L;
+
+
+        @ApiModelProperty("分享机构  -1 默认老师自己")
+        private Long shareTenant = -1L;
+
+
+        public String jsonString() {
+            return JSON.toJSONString(this);
+        }
+    }
 }

+ 8 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/TenantAlbumMusicMapper.xml

@@ -69,4 +69,12 @@
 
     </select>
 
+    <select id="selectMusicIdsByTenantIds" resultType="java.lang.Long">
+        select
+        distinct t.music_sheet_id_
+        FROM tenant_album_music t
+        left join tenant_album_ref t1 on t1.tenant_album_id_ = t.tenant_album_id_
+        left join music_sheet t2 on t2.id_ = t.music_sheet_id_
+        where t2.state_ = 1 and t2.del_flag_ = 0 and t2.audit_version_ = 0 and t1.tenant_id_ = #{tenantId}
+    </select>
 </mapper>

+ 24 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/UnbindAuthUserMapper.xml

@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE  mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.yonge.cooleshow.biz.dal.mapper.UnbindAuthUserMapper">
+
+	 
+    
+    <!-- 表字段 -->
+    <sql id="baseColumns">
+         t.id_ AS id
+        , t.user_id_ AS userId
+        , t.province_code_ AS provinceCode
+        , t.city_code_ AS cityCode
+        , t.region_code_ AS regionCode
+        , t.create_time_ AS createTime
+        , t.update_time_ AS updateTime
+        </sql> 
+    
+    <select id="selectPage" resultType="com.yonge.cooleshow.biz.dal.wrapper.UnbindAuthUserWrapper$UnbindAuthUser">
+		SELECT         
+        	<include refid="baseColumns" />
+		FROM unbind_auth_user t
+	</select>
+    
+</mapper>

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

@@ -223,7 +223,6 @@ public class TeacherController extends BaseController {
         }
 
         TenantUnbindRecord one = tenantUnbindRecordService.lambdaQuery()
-                .eq(TenantUnbindRecord::getTenantId, user.getTenantId())
                 .eq(TenantUnbindRecord::getUserType, "TEACHER")
                 .eq(TenantUnbindRecord::getUserId, user.getId())
                 .last("limit 1").one();