Przeglądaj źródła

1.控制器提交合并

yuanliang 1 rok temu
rodzic
commit
a423055171
16 zmienionych plików z 735 dodań i 236 usunięć
  1. 43 11
      cooleshow-app/src/main/java/com/yonge/cooleshow/admin/controller/TenantUnbindHistoryController.java
  2. 10 5
      cooleshow-app/src/main/java/com/yonge/cooleshow/admin/controller/open/AdminClient.java
  3. 316 0
      cooleshow-app/src/main/java/com/yonge/cooleshow/admin/controller/open/ImController.java
  4. 47 0
      cooleshow-app/src/main/java/com/yonge/cooleshow/admin/controller/open/OpenSysConfigController.java
  5. 16 2
      cooleshow-app/src/main/java/com/yonge/cooleshow/student/controller/SysMusicCompareRecordController.java
  6. 4 1
      cooleshow-app/src/main/java/com/yonge/cooleshow/student/controller/UserOrderController.java
  7. 6 4
      cooleshow-app/src/main/java/com/yonge/cooleshow/student/controller/UserOrderRefundController.java
  8. 12 1
      cooleshow-app/src/main/java/com/yonge/cooleshow/student/controller/UserTenantAlbumRecordController.java
  9. 34 20
      cooleshow-app/src/main/java/com/yonge/cooleshow/teacher/controller/MusicAlbumController.java
  10. 75 0
      cooleshow-app/src/main/java/com/yonge/cooleshow/teacher/controller/StudentController.java
  11. 1 1
      cooleshow-app/src/main/java/com/yonge/cooleshow/teacher/controller/SysMusicCompareRecordController.java
  12. 28 4
      cooleshow-app/src/main/java/com/yonge/cooleshow/teacher/controller/TeacherController.java
  13. 31 182
      cooleshow-app/src/main/java/com/yonge/cooleshow/tenant/controller/TenantActivationCodeController.java
  14. 68 0
      cooleshow-app/src/main/java/com/yonge/cooleshow/tenant/controller/TenantAlbumSheetController.java
  15. 3 4
      cooleshow-app/src/main/java/com/yonge/cooleshow/tenant/controller/TenantInfoController.java
  16. 41 1
      cooleshow-app/src/main/java/com/yonge/cooleshow/tenant/controller/open/OpenTenantController.java

+ 43 - 11
cooleshow-app/src/main/java/com/yonge/cooleshow/admin/controller/TenantUnbindHistoryController.java

@@ -3,36 +3,68 @@ package com.yonge.cooleshow.admin.controller;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.microsvc.toolkit.common.response.paging.PageInfo;
 import com.microsvc.toolkit.common.response.paging.QueryInfo;
-import com.microsvc.toolkit.common.response.template.R;
-import com.yonge.cooleshow.biz.dal.entity.TenantUnbindHistory;
-import com.yonge.cooleshow.biz.dal.service.TenantUnbindHistoryService;
-import com.yonge.cooleshow.biz.dal.wrapper.TenantUnbindHistoryWrapper;
+import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.service.EmployeeService;
+import com.yonge.cooleshow.biz.dal.service.TenantUnbindRecordService;
+import com.yonge.cooleshow.biz.dal.vo.EmployeeVo;
+import com.yonge.cooleshow.biz.dal.wrapper.TenantUnbindRecordWrapper;
+import com.yonge.cooleshow.common.controller.BaseController;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.cooleshow.common.enums.UserLockFlag;
+import com.yonge.toolset.base.exception.BizException;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
 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("${app-config.url.admin:}/tenantUnbindHistory")
 @Api(tags = "机构解绑历史表")
-public class TenantUnbindHistoryController {
+public class TenantUnbindHistoryController extends BaseController{
 
     @Autowired
-    private TenantUnbindHistoryService tenantUnbindHistoryService;
+    private TenantUnbindRecordService tenantUnbindRecordService;
 
-    @ApiOperation(value = "查询分页", notes = "机构解绑历史表- 传入 TenantUnbindHistoryWrapper.TenantUnbindHistoryQuery")
-    @PostMapping("/page")
-    public R<PageInfo<TenantUnbindHistory>> page(@RequestBody TenantUnbindHistoryWrapper.TenantUnbindHistoryQuery query) {
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
 
-        IPage<TenantUnbindHistory> pages = tenantUnbindHistoryService.selectPage(QueryInfo.getPage(query), query);
+    @Autowired
+    private EmployeeService employeeService;
+
+    @ApiOperation(value = "查询分页", notes = "机构解绑申请记录- 传入 TenantUnbindRecordVo.TenantUnbindRecordQuery")
+    @PreAuthorize("@pcs.hasPermissions('tenantUnbindRecord/page')")
+    @PostMapping("/page")
+    public HttpResponseResult<PageInfo<TenantUnbindRecordWrapper.TenantUnbindRecord>>
+    page(@RequestBody TenantUnbindRecordWrapper.TenantUnbindRecordQuery query) {
+        // 查询数据
+        IPage<TenantUnbindRecordWrapper.TenantUnbindRecord> pages =
+                tenantUnbindRecordService.selectPage(QueryInfo.getPage(query), query);
+        return succeed(QueryInfo.pageInfo(pages, pages.getRecords()));
+    }
 
-        return R.from(QueryInfo.pageInfo(pages));
+    @ApiOperation(value = "审核")
+    @PostMapping("/audit")
+    @PreAuthorize("@pcs.hasPermissions('tenantUnbindRecord/audit')")
+    public HttpResponseResult<Boolean> audit(@RequestBody TenantUnbindRecordWrapper.Audio audio) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            throw new BizException("请登录");
+        }
+        EmployeeVo employeeVo = employeeService.detail(sysUserFeignService.queryUserInfo().getId());
+        if (employeeVo == null || UserLockFlag.LOCKED.equals(employeeVo.getLockFlag())) {
+            throw new BizException("权限不足");
+        }
+        tenantUnbindRecordService.tenantUserUnbindAudit(audio, sysUser.getId(),true);
+        return succeed();
     }
 }

+ 10 - 5
cooleshow-app/src/main/java/com/yonge/cooleshow/admin/controller/open/AdminClient.java

@@ -54,6 +54,7 @@ import java.security.interfaces.RSAPublicKey;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Objects;
+import java.util.Optional;
 import java.util.stream.Collectors;
 
 @Slf4j
@@ -176,6 +177,10 @@ public class AdminClient extends BaseController {
         TenantStaff staff = tenantStaffService.getByUserId(userId);
         if (Objects.nonNull(staff)) {
             ret = TenantWrapper.Staff.from(JSON.toJSONString(staff));
+            ret.setStatus(staff.getStatus().name());
+            Long tenantId = staff.getTenantId();
+            TenantInfo tenantInfo = tenantInfoService.getById(Optional.ofNullable(tenantId).orElse(-1L));
+            ret.setTenantEnableFlag(Optional.ofNullable(tenantInfo).map(TenantInfo::getEnableFlag).orElse(false));
         }
         return succeed(ret);
     }
@@ -189,8 +194,8 @@ public class AdminClient extends BaseController {
     public HttpResponseResult<CouponInfoApi> queryCouponOrderPageInfo(@RequestParam Long userId, @RequestParam String issueIds, @RequestParam BigDecimal orderAmount, @RequestParam ClientEnum client) {
 
         List<Long> collect = Arrays.stream(issueIds.split(","))
-                                   .map(Long::valueOf)
-                                   .collect(Collectors.toList());
+                .map(Long::valueOf)
+                .collect(Collectors.toList());
 
         CouponOrderVO.PageRequest request = new CouponOrderVO.PageRequest();
         request.setClientType(client);
@@ -228,12 +233,12 @@ public class AdminClient extends BaseController {
         request.setReset(returnCoupon);
         request.setUseType(CouponCategoryEnum.MALL);
         List<Long> collect = Arrays.stream(couponIssueId.split(","))
-                                   .map(Long::valueOf)
-                                   .collect(Collectors.toList());
+                .map(Long::valueOf)
+                .collect(Collectors.toList());
         request.setIssueIds(collect);
         // 更新受影响优惠券数据
         int ret = couponInfoService.updateUserOrderCouponInfo(CouponOrderWrapper.from(request.jsonString()));
 
         return succeed(ret > 0);
     }
-}
+}

+ 316 - 0
cooleshow-app/src/main/java/com/yonge/cooleshow/admin/controller/open/ImController.java

@@ -0,0 +1,316 @@
+package com.yonge.cooleshow.admin.controller.open;
+
+import com.alibaba.fastjson.JSON;
+import com.google.common.collect.Lists;
+import com.microsvc.toolkit.middleware.im.properties.ImConfigProperties;
+import com.microsvc.toolkit.middleware.live.LivePluginContext;
+import com.microsvc.toolkit.middleware.live.LivePluginService;
+import com.microsvc.toolkit.middleware.live.impl.TencentCloudLivePlugin;
+import com.yonge.cooleshow.admin.io.request.course.CourseRelationVo;
+import com.yonge.cooleshow.admin.io.request.im.IMNotifyMessageVO;
+import com.yonge.cooleshow.admin.io.request.im.UserFriendInfoVO;
+import com.yonge.cooleshow.api.feign.dto.ImUserInfo;
+import com.yonge.cooleshow.biz.dal.dto.TencentData;
+import com.yonge.cooleshow.biz.dal.dto.TencentImCallbackResult;
+import com.yonge.cooleshow.biz.dal.entity.ImUserStateSync;
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.enums.im.ETencentImCallbackCommand;
+import com.yonge.cooleshow.biz.dal.service.CourseRelationMusicAlbumService;
+import com.yonge.cooleshow.biz.dal.service.ImGroupService;
+import com.yonge.cooleshow.biz.dal.service.ImUserFriendService;
+import com.yonge.cooleshow.biz.dal.service.LiveRoomService;
+import com.yonge.cooleshow.biz.dal.wrapper.im.CustomerService;
+import com.yonge.cooleshow.biz.dal.wrapper.im.ImGroupWrapper;
+import com.yonge.cooleshow.common.controller.BaseController;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.toolset.base.exception.BizException;
+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.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * 用户通讯录表(ImUserFriend)表控制层
+ *
+ * @author zx
+ * @since 2022-03-22 10:45:59
+ */
+@Api(tags = "用户通讯录表")
+@RestController
+@RequestMapping("${app-config.url.admin:}/open")
+@Slf4j
+public class ImController extends BaseController {
+
+    /**
+     * 服务对象
+     */
+    @Resource
+    private ImUserFriendService imUserFriendService;
+    @Autowired
+    private CourseRelationMusicAlbumService courseRelationMusicAlbumService;
+
+    @Autowired
+    private LivePluginContext livePluginContext;
+
+    @Autowired
+    private LiveRoomService liveRoomService;
+
+    @Autowired
+    private ImGroupService imGroupService;
+
+    @Autowired
+    private ImConfigProperties imConfig;
+
+
+    @ApiOperation("新用户添加客服")
+    @PostMapping(value = "/im/customerService")
+    public HttpResponseResult<Boolean> customerService(@RequestBody UserFriendInfoVO info) {
+
+        if (info.invalidRequestParam()) {
+            return failed("无效的请求参数");
+        }
+
+        // 新用户自动绑定系统客服
+        int ret = imUserFriendService.registerUserBindCustomerService(info.getUserId(),
+                info.getFriendIds(), ClientEnum.valueOf(info.getClientType()));
+
+        return succeed(ret > 0);
+    }
+
+    /**
+     * 发送系统客服消息
+     * @param info IMNotifyMessageVO
+     * @return HttpResponseResult<Boolean>
+     */
+    @PostMapping(value = "/im/message")
+    public HttpResponseResult<Boolean> sendSysCustomerServiceMessage(@RequestBody IMNotifyMessageVO info) {
+
+        if (info.invalidRequestParam()) {
+            return failed("无效的请求参数");
+        }
+
+        // 发送客服通知消息
+        imUserFriendService.sendCustomerServiceNotifyMessage(info.getSender(),
+                CustomerService.NotifyMessage.from(info.jsonString()));
+
+        return succeed();
+    }
+
+    /**
+     * 同步用户购买课程赠送数据
+     * @param query CourseRelationVo.CourseRelationQuery
+     * @return HttpResponseResult<Boolean>
+     */
+    @ApiOperation("已购买课程赠送同步")
+    @PostMapping(value = "/course/sync")
+    public HttpResponseResult<Boolean> syncUserPurchaseRelationMusicAlbum(@RequestBody CourseRelationVo.CourseRelationQuery query) {
+
+        if (Objects.isNull(query.getCourseGroupId()) || Objects.isNull(query.getCourseType())) {
+            return failed("无效的请求参数");
+        }
+
+        // 同步数据
+        courseRelationMusicAlbumService.asyncUpdateCourseRelationMusicAlbumInfo(query.getCourseGroupId(), query.getCourseType());
+
+        return succeed();
+    }
+
+
+    @ApiOperation("腾讯im 回调接口")
+    @PostMapping(value = "/tencentImCallback")
+    public TencentImCallbackResult tencentImCallback(@RequestBody String body, HttpServletRequest request) {
+        log.info("tencentImCallback body:{}", body);
+
+        LivePluginService pluginService = livePluginContext.getPluginService(TencentCloudLivePlugin.PLUGIN_NAME);
+        String appKey = pluginService.getLiveRoomConfig().getAppKey();
+
+        log.info("tencentImCallback request param:{}", JSON.toJSONString(request.getParameterMap()));
+
+        List<String> sdkList = Arrays.asList(request.getParameterValues("SdkAppid"));
+        if (sdkList == null || sdkList.size() == 0) {
+            log.error("tencentImCallback sdkAppid is null");
+            return new TencentImCallbackResult();
+        }
+        if (!sdkList.contains(appKey)) {
+            log.error("tencentImCallback sdkAppid is not match");
+            return new TencentImCallbackResult();
+        }
+
+        String clientIP = request.getParameter("ClientIP");
+        String optPlatform = request.getParameter("OptPlatform");
+
+
+        if(request.getParameter("CallbackCommand").equals(ETencentImCallbackCommand.GROUP_CALLBACKONMEMBERSTATECHANGE.getCommand())) {
+            // 直播群成员在线状态回调
+            TencentData.CallbackOnMemberStateChange callbackOnMemberStateChange = TencentData.CallbackOnMemberStateChange.toObject(
+                    body);
+
+            log.debug("callbackOnMemberStateChange: {}", callbackOnMemberStateChange);
+            callbackOnMemberStateChange.setClientIP(clientIP);
+            callbackOnMemberStateChange.setOptPlatform(optPlatform);
+            for (TencentData.MemberListDTO memberListDTO : callbackOnMemberStateChange.getMemberList()) {
+                if (!imGroupService.checkImUserId(memberListDTO.getMemberAccount())) {
+                    return new TencentImCallbackResult();
+                }
+                memberListDTO.setMemberAccount(imGroupService.analysisImUserId(memberListDTO.getMemberAccount()));
+            }
+            // 直播间成员状态变更
+            liveRoomService.callbackOnMemberStateChange(callbackOnMemberStateChange);
+        } else if(request.getParameter("CallbackCommand").equals(ETencentImCallbackCommand.GROUP_CALLBACKAFTERMEMBEREXIT.getCommand())) {
+            // 群成员离开之后回调
+            TencentData.CallbackAfterMemberExit callbackAfterMemberExit = TencentData.CallbackAfterMemberExit.toObject(
+                    body);
+
+            log.debug("callbackAfterMemberExit: {}", callbackAfterMemberExit);
+            callbackAfterMemberExit.setClientIP(clientIP);
+            callbackAfterMemberExit.setOptPlatform(optPlatform);
+            for (TencentData.MemberListDTO memberListDTO : callbackAfterMemberExit.getExitMemberList()) {
+                if (!imGroupService.checkImUserId(memberListDTO.getMemberAccount())) {
+                    return new TencentImCallbackResult();
+                }
+                memberListDTO.setMemberAccount(imGroupService.analysisImUserId(memberListDTO.getMemberAccount()));
+            }
+            // 直播间成员状态变更
+            liveRoomService.callbackAfterMemberExit(callbackAfterMemberExit);
+        } else if(request.getParameter("CallbackCommand").equals(ETencentImCallbackCommand.GROUP_CALLBACKAFTERNEWMEMBERJOIN.getCommand())) {
+            // 新成员入群之后回调
+            TencentData.CallbackAfterNewMemberJoin callbackAfterNewMemberJoin = TencentData.CallbackAfterNewMemberJoin.toObject(
+                    body);
+
+            log.debug("CallbackAfterNewMemberJoin: {}", callbackAfterNewMemberJoin);
+            callbackAfterNewMemberJoin.setClientIP(clientIP);
+            callbackAfterNewMemberJoin.setOptPlatform(optPlatform);
+            for (TencentData.MemberListDTO memberListDTO : callbackAfterNewMemberJoin.getNewMemberList()) {
+                if (!imGroupService.checkImUserId(memberListDTO.getMemberAccount())) {
+                    return new TencentImCallbackResult();
+                }
+                memberListDTO.setMemberAccount(imGroupService.analysisImUserId(memberListDTO.getMemberAccount()));
+            }
+            // 直播间成员状态变更
+            liveRoomService.callbackAfterNewMemberJoin(callbackAfterNewMemberJoin);
+        }
+
+
+        return new TencentImCallbackResult();
+    }
+
+
+    @ApiOperation("腾讯云直播-推流 回调接口")
+    @PostMapping(value = "/tencentStreamEventCallback")
+    public TencentData.StreamEventCallbackResult tencentStreamEventCallback(@RequestBody String body) {
+
+        log.info("tencentStreamEventCallback body:{}", body);
+
+        TencentData.CallbackStreamStateEvent event = TencentData.CallbackStreamStateEvent.from(body);
+
+        boolean b = checkStream(event.getStreamId());
+        if (!b) {
+            return TencentData.StreamEventCallbackResult.builder().code(0).build();
+        }
+
+        ImUserStateSync imUserState = new ImUserStateSync();
+        imUserState.setUserid(getSpeakerId(event.getStreamId()).toString());
+        // 断流事件通知
+        if (event.getEventType() == 0) {
+            imUserState.setStatus("3");
+
+            // 更新推流时长
+            if (StringUtils.isNotBlank(event.getPushDuration()) && event.getPushDuration().matches("\\d+")) {
+                // 更新直播推流时长
+                liveRoomService.updateLiveRoomPushStreamTime(event);
+            }
+
+            // 自动关闭录制
+            liveRoomService.closeLive(getRoomUid(event.getStreamId()), getSpeakerId(event.getStreamId()).longValue(),event.getSequence());
+            // 同步点赞数
+            liveRoomService.syncLikeCount(getRoomUid(event.getStreamId()));
+        }
+
+        // 推流事件通知
+        if (event.getEventType() == 1) {
+            // 自动开启录制
+            liveRoomService.startLive(getRoomUid(event.getStreamId()), getSpeakerId(event.getStreamId()),event.getSequence());
+
+            imUserState.setStatus("0");
+        }
+        liveRoomService.opsRoom(Lists.newArrayList(imUserState));
+
+        return TencentData.StreamEventCallbackResult.builder().code(0).build();
+    }
+
+
+    private boolean checkStream(String streamId) {
+        return imGroupService.checkImUserId(streamId.split("_",2)[1]);
+    }
+
+
+    private Integer getSpeakerId(String streamId) {
+        return Integer.parseInt(imGroupService.analysisImUserId(streamId.split("_",2)[1]));
+    }
+
+    private String getRoomUid(String streamId) {
+        return streamId.split("_")[0];
+    }
+
+    @ApiOperation("腾讯云直播-录制 回调接口")
+    @PostMapping(value = "/tencentStreamRecordCallback")
+    public TencentData.StreamEventCallbackResult tencentStreamRecordCallback(@RequestBody String body) {
+
+        log.info("tencentStreamRecordCallback body:{}", body);
+
+        TencentData.CallbackSteamRecordEvent event = TencentData.CallbackSteamRecordEvent.from(body);
+
+
+        boolean b = checkStream(event.getStreamId());
+        if (!b) {
+            return TencentData.StreamEventCallbackResult.builder().code(0).build();
+        }
+
+        // 直播录制事件通知
+        if (event.getStreamId().startsWith("LIVE")) {
+            log.info("taskId={}, url={}", event.getTaskId(), event.getVideoUrl());
+
+            // 生成直播录制信息
+            liveRoomService.createLiveRoomVideoRecord(event);
+        }
+
+        return TencentData.StreamEventCallbackResult.builder().code(0).build();
+    }
+
+    @ApiOperation("腾讯云直播-推流异常 回调接口")
+    @PostMapping(value = "/tencentStreamExceptionCallback")
+    public TencentData.StreamEventCallbackResult tencentStreamExceptionCallback(@RequestBody String body) {
+
+        log.info("tencentStreamExceptionCallback body:{}", body);
+
+        return TencentData.StreamEventCallbackResult.builder().code(0).build();
+    }
+
+    @ApiOperation("注册im用户")
+    @PostMapping(value = "/im/register")
+    public ImUserInfo register(String userId, ClientEnum clientType, String username, String avatar) {
+
+        log.info("注册im用户");
+
+        try {
+            ImGroupWrapper.ImUserInfo register = imGroupService.register(userId, clientType, username, avatar);
+            return JSON.parseObject(JSON.toJSONString(register), ImUserInfo.class);
+        } catch (Exception e) {
+            log.error("注册im用户失败", e);
+            throw new BizException(e.getMessage());
+        }
+    }
+
+}
+

+ 47 - 0
cooleshow-app/src/main/java/com/yonge/cooleshow/admin/controller/open/OpenSysConfigController.java

@@ -0,0 +1,47 @@
+package com.yonge.cooleshow.admin.controller.open;
+
+import com.yonge.cooleshow.biz.dal.entity.SysConfig;
+import com.yonge.cooleshow.biz.dal.service.SysConfigService;
+import com.yonge.cooleshow.common.constant.SysConfigConstant;
+import com.yonge.cooleshow.common.controller.BaseController;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 系统配置控制层
+ */
+@RestController
+@Api(tags = "系统参数设置")
+@RequestMapping(value = "${app-config.url.admin:}/open/sysConfig")
+public class OpenSysConfigController extends BaseController {
+
+    @Autowired
+    private SysConfigService sysConfigService;
+
+    @ApiOperation(value = "查询客服手机号")
+    @GetMapping(value = "/queryCustomerServicePhone")
+    public HttpResponseResult<String> queryCustomerServicePhone() {
+        SysConfig sysConfig = sysConfigService.findByParamName(SysConfigConstant.CUSTOMER_SERVICE_PHONE);
+        return succeed(sysConfig.getParamValue());
+    }
+
+    @ApiOperation(value = "查询客服联系方式,电话和邮箱")
+    @GetMapping(value = "/queryCustomerService")
+    public HttpResponseResult<Map<String, String>> queryCustomerService() {
+        SysConfig email = sysConfigService.findByParamName(SysConfigConstant.CUSTOMER_SERVICE_EMAIL);
+        SysConfig phone = sysConfigService.findByParamName(SysConfigConstant.CUSTOMER_SERVICE_PHONE);
+        Map<String, String> result = new HashMap<>();
+        result.put("email", email == null ? "" : email.getParamValue());
+        result.put("phone", phone == null ? "" : phone.getParamValue());
+        return succeed(result);
+    }
+
+}

+ 16 - 2
cooleshow-app/src/main/java/com/yonge/cooleshow/student/controller/SysMusicCompareRecordController.java

@@ -29,7 +29,6 @@ import java.util.Objects;
 @RequestMapping("${app-config.url.student:}/sysMusicRecord")
 @RestController
 public class SysMusicCompareRecordController extends BaseController {
-
     @Autowired
     private SysUserFeignService sysUserFeignService;
     @Autowired
@@ -73,11 +72,26 @@ public class SysMusicCompareRecordController extends BaseController {
         }
         queryInfo.setClientId("student");
         LocalDate localDate = LocalDate.parse(queryInfo.getStartTime() + "-01",
-                                              DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+                DateTimeFormatter.ofPattern("yyyy-MM-dd"));
         queryInfo.setStartTime(localDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
         LocalDate endDate = localDate.plusDays(localDate.getMonth().length(localDate.isLeapYear()) -1);
         queryInfo.setEndTime(endDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
         return succeed(sysMusicCompareRecordService.studentTrainData(queryInfo));
     }
 
+    @ApiOperation("学员训练数据统计每周")
+    @GetMapping("studentTrainDataByWeek")
+    public HttpResponseResult studentTrainDataByWeek(SysMusicCompareRecordQueryInfo.TeacherCompareRecordQueryInfo queryInfo){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("获取用户信息失败");
+        }
+        queryInfo.setUserId(sysUser.getId());
+        if (StringUtils.isEmpty(queryInfo.getStartTime())) {
+            return failed("时间不能为空");
+        }
+        queryInfo.setClientId("student");
+        return succeed(sysMusicCompareRecordService.studentTrainData(queryInfo));
+    }
+
 }

+ 4 - 1
cooleshow-app/src/main/java/com/yonge/cooleshow/student/controller/UserOrderController.java

@@ -363,8 +363,11 @@ public class UserOrderController extends BaseController {
 
         // 用户取消支付
 
+        UserPaymentOrderWrapper.OrderPayTypeResp orderPayTypeResp = userPaymentCoreService.orderPayType(payTypeReq);
 
-        return HttpResponseResult.succeed(userPaymentCoreService.orderPayType(payTypeReq));
+        // todo 测试固定v2
+//        orderPayTypeResp.setPaymentVersion(EPaymentVersion.V2);
+        return HttpResponseResult.succeed(orderPayTypeResp);
     }
 
 

+ 6 - 4
cooleshow-app/src/main/java/com/yonge/cooleshow/student/controller/UserOrderRefundController.java

@@ -5,6 +5,7 @@ import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dto.req.OrderRefundReq;
 import com.yonge.cooleshow.biz.dal.dto.search.UserOrderRefundSearch;
+import com.yonge.cooleshow.biz.dal.service.RedisCacheService;
 import com.yonge.cooleshow.biz.dal.service.UserOrderRefundService;
 import com.yonge.cooleshow.biz.dal.service.UserPaymentCoreService;
 import com.yonge.cooleshow.biz.dal.vo.UserOrderRefundVo;
@@ -43,6 +44,8 @@ public class UserOrderRefundController extends BaseController {
     @Autowired
     private UserPaymentCoreService userPaymentCoreService;
 
+    @Autowired
+    private RedisCacheService redisCacheService;
     /**
      * 查询单条
      */
@@ -109,10 +112,9 @@ public class UserOrderRefundController extends BaseController {
 
         try {
             DistributedLock.of(redissonClient)
-                    .runIfLockCanGet(CacheNameEnum.LOCK_EXECUTE_ORDER.getRedisKey(refundReq.getUserId())
-                            , () -> {
-                        userPaymentCoreService.refundPayment(refundReq.getOrderNo(),refundReq.getReason());
-                            }, 10L,TimeUnit.SECONDS);
+                    .runIfLockCanGet(redisCacheService.getPaymentCacheKey(refundReq.getOrderNo())
+                            , () -> userPaymentCoreService.refundPayment(refundReq.getOrderNo(),refundReq.getReason()),
+                            10L,TimeUnit.SECONDS);
             return HttpResponseResult.succeed();
         } catch (BizException e) {
             return HttpResponseResult.failed(e.getMessage());

+ 12 - 1
cooleshow-app/src/main/java/com/yonge/cooleshow/student/controller/UserTenantAlbumRecordController.java

@@ -30,7 +30,6 @@ import org.springframework.web.bind.annotation.RestController;
 @RequestMapping("${app-config.url.student:}/userTenantAlbumRecord")
 @Api(tags = "购买训练工具记录")
 public class UserTenantAlbumRecordController {
-
     @Autowired
     private UserTenantAlbumRecordService userTenantAlbumRecordService;
 
@@ -54,6 +53,18 @@ public class UserTenantAlbumRecordController {
         return HttpResponseResult.succeed(PageUtil.pageInfo(pages));
     }
 
+
+    @ApiOperation(value = "查询详情")
+    @PostMapping("/detail")
+    public HttpResponseResult <TenantAlbumWrapper.TenantAlbum> Albumdetail(@RequestParam(defaultValue = "") String albumId) {
+        TenantAlbumWrapper.TenantAlbum tenantAlbum= userTenantAlbumRecordService.detailAlbum(albumId);
+        return HttpResponseResult.succeed(tenantAlbum);
+    }
+
+
+
+
+
     @ApiOperation(value = "新增", notes = "购买训练工具记录- 传入 UserTenantAlbumRecordWrapper.UserTenantAlbumRecord")
     @PreAuthorize("@auditsvc.hasPermissions('userTenantAlbumRecord/save', {'BACKEND'})")
     //@PostMapping("/save")

+ 34 - 20
cooleshow-app/src/main/java/com/yonge/cooleshow/teacher/controller/MusicAlbumController.java

@@ -15,6 +15,7 @@ import com.yonge.cooleshow.biz.dal.service.MusicAlbumService;
 import com.yonge.cooleshow.biz.dal.service.TeacherService;
 import com.yonge.cooleshow.biz.dal.vo.AlbumDetailVo;
 import com.yonge.cooleshow.biz.dal.vo.MusicAlbumVo;
+import com.yonge.cooleshow.biz.dal.wrapper.TenantAlbumWrapper;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.common.enums.YesOrNoEnum;
@@ -54,8 +55,8 @@ public class MusicAlbumController extends BaseController {
     @Autowired
     private SysUserFeignService sysUserFeignService;
 
-	@Autowired
-	private MusicAlbumService musicAlbumService;
+    @Autowired
+    private MusicAlbumService musicAlbumService;
 
     @Autowired
     private TeacherService teacherService;
@@ -75,16 +76,16 @@ public class MusicAlbumController extends BaseController {
         if (teacher == null) {
             return failed("用户信息获取失败");
         }
-        
+
         if(query.getSubjectIdList() == null || query.getSubjectIdList().size() == 0){
-        	List<Long> subjectIdList = new ArrayList<Long>();
-        	if(StringUtils.isNotBlank(teacher.getSubjectId())){
-        		String[] subjectIds = teacher.getSubjectId().split(",");
-        		for(String s : subjectIds){
-                	subjectIdList.add(Long.parseLong(s));
-        		}
-        		query.setSubjectIdList(subjectIdList);
-        	}
+            List<Long> subjectIdList = new ArrayList<Long>();
+            if(StringUtils.isNotBlank(teacher.getSubjectId())){
+                String[] subjectIds = teacher.getSubjectId().split(",");
+                for(String s : subjectIds){
+                    subjectIdList.add(Long.parseLong(s));
+                }
+                query.setSubjectIdList(subjectIdList);
+            }
         }
 
         // 检查app版本
@@ -125,10 +126,10 @@ public class MusicAlbumController extends BaseController {
         musicAlbumSearch.setAlbumTagIds(albumDetailVo.getAlbumTag());
         IPage<MusicAlbumVo> relatedMusicAlbum = musicAlbumService.selectStudentPage(PageUtil.getPage(musicAlbumSearch),musicAlbumSearch, ClientEnum.TEACHER);
         List<MusicAlbumVo> musicAlbumVos1 = relatedMusicAlbum.getRecords()
-                                                      .stream()
-                                                      .filter(musicAlbumVo -> !musicAlbumVo.getId()
-                                                                                           .equals(albumDetailVo.getId()))
-                                                      .collect(Collectors.toList());
+                .stream()
+                .filter(musicAlbumVo -> !musicAlbumVo.getId()
+                        .equals(albumDetailVo.getId()))
+                .collect(Collectors.toList());
         if (musicAlbumVos1.size() > query.getRelatedNum()) {
             musicAlbumVos1 = musicAlbumVos1.subList(0,query.getRelatedNum());
         }
@@ -139,7 +140,7 @@ public class MusicAlbumController extends BaseController {
     /**
      * 专辑收藏
      */
-     @PostMapping("/favorite/{id}")
+    @PostMapping("/favorite/{id}")
     @ApiOperation(value = "专辑收藏/取消收藏")
     public HttpResponseResult<Boolean> favorite(@ApiParam(value = "专辑编号", required = true) @PathVariable("id") Long id,
                                                 @ApiParam(value = "客户端类型") @RequestParam(value = "clientType", required = false, defaultValue = "TEACHER") String clientType) {
@@ -148,9 +149,9 @@ public class MusicAlbumController extends BaseController {
             return failed("用户信息获取失败");
         }
 
-         if (ClientEnum.invalid(clientType)) {
-             return failed("无效的客户端类型");
-         }
+        if (ClientEnum.invalid(clientType)) {
+            return failed("无效的客户端类型");
+        }
 
         return succeed(musicAlbumService.setFavorite(sysUser.getId(), id, ClientEnum.valueOf(clientType)));
     }
@@ -169,7 +170,7 @@ public class MusicAlbumController extends BaseController {
         StudentMusicAlbumSearch search = new StudentMusicAlbumSearch();
         search.studentId(sysUser.getId())
                 .albumFavorite(true)
-                 .setAlbumStatus(YesOrNoEnum.YES);
+                .setAlbumStatus(YesOrNoEnum.YES);
 
         IPage<MusicAlbumVo> albumVoIPage = musicAlbumService.favoriteAlbum(PageUtil.getPage(query), search, ClientEnum.TEACHER);
         return succeed(PageUtil.pageInfo(albumVoIPage));
@@ -204,4 +205,17 @@ public class MusicAlbumController extends BaseController {
         IPage<MusicAlbumVo> albumVoIPage = musicAlbumService.favoriteAlbum(PageUtil.getPage(query), search, ClientEnum.TEACHER);
         return succeed(PageUtil.pageInfo(albumVoIPage));
     }
+
+    @ApiOperation(value = "查询机构专辑详情")
+    @PostMapping("/albumDetail")
+    public HttpResponseResult <TenantAlbumWrapper.TenantAlbum> albumDetail(@RequestParam(defaultValue = "") String albumId) {
+        TenantAlbumWrapper.TenantAlbum tenantAlbum= musicAlbumService.detailAlbum(albumId);
+        return HttpResponseResult.succeed(tenantAlbum);
+    }
+
+
+
+
+
+
 }

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

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

+ 1 - 1
cooleshow-app/src/main/java/com/yonge/cooleshow/teacher/controller/SysMusicCompareRecordController.java

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

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

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

+ 31 - 182
cooleshow-app/src/main/java/com/yonge/cooleshow/tenant/controller/TenantActivationCodeController.java

@@ -1,54 +1,27 @@
 package com.yonge.cooleshow.tenant.controller;
 
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.microsvc.toolkit.common.response.paging.PageInfo;
 import com.microsvc.toolkit.common.response.paging.QueryInfo;
-import com.microsvc.toolkit.common.response.template.R;
 import com.microsvc.toolkit.common.webportal.exception.BizException;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
-import com.yonge.cooleshow.biz.dal.entity.TenantActivationCode;
-import com.yonge.cooleshow.biz.dal.entity.TenantAlbumPurchase;
-import com.yonge.cooleshow.biz.dal.entity.TenantInfo;
-import com.yonge.cooleshow.biz.dal.entity.TenantStaff;
+import com.yonge.cooleshow.biz.dal.entity.Student;
+import com.yonge.cooleshow.biz.dal.service.StudentService;
 import com.yonge.cooleshow.biz.dal.service.TenantActivationCodeService;
-import com.yonge.cooleshow.biz.dal.service.TenantAlbumPurchaseService;
-import com.yonge.cooleshow.biz.dal.service.TenantInfoService;
-import com.yonge.cooleshow.biz.dal.service.TenantStaffService;
 import com.yonge.cooleshow.biz.dal.wrapper.TenantActivationCodeWrapper;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
-import com.yonge.cooleshow.common.enums.BizHttpStatus;
-import com.yonge.cooleshow.common.enums.EActivationCode;
-import com.yonge.cooleshow.tenant.vo.TenantActivationCodeVo;
-import com.yonge.toolset.utils.date.DateUtil;
-import com.yonge.toolset.utils.easyexcel.ErrMsg;
-import com.yonge.toolset.utils.easyexcel.ExcelDataReader;
-import com.yonge.toolset.utils.easyexcel.ExcelException;
-import com.yonge.toolset.utils.easyexcel.ExcelUtils;
-import com.yonge.toolset.utils.excel.POIUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpStatus;
 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 org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
-import org.springframework.web.multipart.MultipartFile;
-
-import javax.servlet.http.HttpServletResponse;
-import java.io.OutputStream;
-import java.util.Date;
-import java.util.List;
 
 
 @Slf4j
@@ -62,179 +35,55 @@ public class TenantActivationCodeController extends BaseController {
     private TenantActivationCodeService tenantActivationCodeService;
 
     @Autowired
-    private TenantAlbumPurchaseService tenantAlbumPurchaseService;
-
-    @Autowired
     private SysUserFeignService sysUserFeignService;
 
     @Autowired
-    private TenantInfoService tenantInfoService;
-
-    @Autowired
-    private TenantStaffService tenantStaffService;
-
-    @ApiOperation(value = "详情", notes = "机构激活码-根据详情ID查询单条, 传入id")
-//    @GetMapping("/detail/{id}")
-    public R<TenantActivationCodeVo.TenantActivationCode> detail(@PathVariable("id") Long id) {
-
-        TenantActivationCode wrapper = tenantActivationCodeService.detail(id);
-
-        return R.from(TenantActivationCodeVo.TenantActivationCode.from(JSON.toJSONString(wrapper)));
-    }
+    private StudentService studentService;
 
     @ApiOperation(value = "查询分页", notes = "机构激活码- 传入 TenantActivationCodeVo.TenantActivationCodeQuery")
     @PostMapping("/page")
     public HttpResponseResult<PageInfo<TenantActivationCodeWrapper.TenantActivationCode>> page(
             @RequestBody TenantActivationCodeWrapper.TenantActivationCodeQuery query) {
-        TenantInfo tenantInfo = getTenantInfo();
-        query.setTenantId(tenantInfo.getId());
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null || null == sysUser.getId()) {
+            throw new BizException("请登录");
+        }
+        Student student = studentService.getById(sysUser.getId());
+        if (student == null) {
+            throw new BizException("学生不存在");
+        }
+        query.setActivationPhone(sysUser.getPhone());
+        query.setTenantId(student.getTenantId());
         // 查询数据
         IPage<TenantActivationCodeWrapper.TenantActivationCode> pages =
                 tenantActivationCodeService.selectPage(QueryInfo.getPage(query), query);
-        PageInfo<TenantActivationCodeWrapper.TenantActivationCode> pageInfo = QueryInfo.pageInfo(pages,
-                pages.getRecords());
-
-        if (query.getTenantAlbumPurchaseId() != null) {
-            TenantActivationCodeWrapper.TenantActivationCode extra =
-                    new TenantActivationCodeWrapper.TenantActivationCode();
-            TenantAlbumPurchase purchase = tenantAlbumPurchaseService.getById(query.getTenantAlbumPurchaseId());
-            extra.setActiveQuantity(purchase.getActiveQuantity());
-            pageInfo.setExtra(extra);
-        }
-
-        return succeed(pageInfo);
-    }
-
-    @ApiOperation(value = "激活码发放", notes = "机构激活码- 传入 TenantActivationCodeVo.TenantActivationCodeSend")
-    @PostMapping("/send")
-    public HttpResponseResult<Boolean> send(@Validated @RequestBody TenantActivationCodeVo.TenantActivationCodeSend send) {
-        TenantInfo tenantInfo = getTenantInfo();
-        tenantActivationCodeService.sendActivationCode(tenantInfo.getId(), send.getTenantAlbumPurchaseId(),
-                send.getActivationCodeList(),
-                send.getStudentIdList());
-        return succeed();
-    }
-
-    @ApiOperation(value = "激活码发放取消", notes = "传入 激活码的ID")
-    @PostMapping("/sendCancel")
-    public HttpResponseResult<Boolean> sendCancel(@RequestParam("id") Long id) {
-        TenantInfo tenantInfo = getTenantInfo();
-        TenantActivationCode activationCode = tenantActivationCodeService.getById(id);
-        if (activationCode == null || !tenantInfo.getId().equals(activationCode.getTenantId())) {
-            throw new BizException("激活码不存在");
-        }
-        boolean update = tenantActivationCodeService.lambdaUpdate()
-                .set(TenantActivationCode::getSendStatus, EActivationCode.WAIT)
-                .eq(TenantActivationCode::getTenantId, id)
-                .eq(TenantActivationCode::getActivationStatus, false)
-                .eq(TenantActivationCode::getSendStatus, EActivationCode.SEND)
-                .update();
-        if (!update) {
-            throw new BizException("激活码已经激活");
+        for (TenantActivationCodeWrapper.TenantActivationCode record : pages.getRecords()) {
+            String activationCode = record.getActivationCode();
+            String substring = activationCode.substring(3);
+            record.setActivationCode("***" + substring);
         }
-        return succeed();
+        return succeed(QueryInfo.pageInfo(pages, pages.getRecords()));
     }
 
-    @GetMapping("/exportActiveCode")
-    @ApiOperation(value = "导出模板")
-    public void exportActiveCode(HttpServletResponse response) {
+    @ApiOperation(value = "激活激活码")
+    @PostMapping("/active")
+    public HttpResponseResult<Boolean> active(@RequestParam("activationCode") String activationCode) {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (sysUser == null) {
+        if (sysUser == null || null == sysUser.getId()) {
             throw new BizException("请登录");
         }
-        Long tenantId = sysUser.getTenantId();
-
-        TenantActivationCodeWrapper.TenantActivationCodeQuery query =
-                new TenantActivationCodeWrapper.TenantActivationCodeQuery();
-        query.setTenantId(tenantId);
-        query.setActivationStatus(false);
-        query.setPage(1);
-        query.setRows(9999);
-        IPage<TenantActivationCodeWrapper.TenantActivationCode> queryInfo =
-                tenantActivationCodeService.selectPage(QueryInfo.getPage(query), query);
-        List<TenantActivationCodeWrapper.TenantActivationCode> rows = queryInfo.getRecords();
-        if (rows.isEmpty()) {
-            throw new BizException("没有可导出数据");
-        }
-
-        try (OutputStream outputStream = response.getOutputStream()) {
-            HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"激活码", "手机号"}, new String[]{
-                    "activationCode", "activationPhone"}, rows);
-            response.setContentType("application/octet-stream");
-            response.setHeader("Content-Disposition", "attac:wq" +
-                    "hment;filename=active_code-" + DateUtil.getDate(new Date()) + ".xls");
-            workbook.write(outputStream);
-            outputStream.flush();
-        } catch (Exception e) {
-            log.error("导出激活码异常", e);
-        }
-    }
-
-    @PostMapping("/importActiveCode")
-    @ApiOperation(value = "导入", notes = "传入file")
-    public HttpResponseResult<List<ErrMsg>> importActiveCode(
-            @RequestParam("file") MultipartFile file,
-            @RequestParam("tenantAlbumPurchaseId") Long tenantAlbumPurchaseId) {
-        if (null == file) {
-            return HttpResponseResult.failed("请上传文件");
-        }
-        SysUser user = sysUserFeignService.queryUserInfo();
-        if (user == null || null == user.getId()) {
-            return failed(HttpStatus.FORBIDDEN, "请登录");
-        }
-        TenantStaff tenantStaff = tenantStaffService.getByUserId(user.getId());
-        if (tenantStaff == null) {
-            return HttpResponseResult.failed("权限不足");
-        }
-
-        try {
-            ExcelDataReader<TenantActivationCodeWrapper.ImportTemplate> reader =
-                    ExcelUtils.getReader(TenantActivationCodeWrapper.ImportTemplate.class, file);
-            tenantActivationCodeService.importActiveCode(reader.getDataList(), user.getTenantId(), user.getId(),
-                    tenantAlbumPurchaseId);
-            return HttpResponseResult.succeed();
-        } catch (ExcelException e) {
-            return HttpResponseResult.failed(BizHttpStatus.IMPORT.getCode(), e.getErrMsgList(),
-                    BizHttpStatus.IMPORT.getMsg());
-        }
-    }
-
-    @ApiOperation(value = "新增", notes = "机构激活码- 传入 TenantActivationCodeVo.TenantActivationCode")
-//    @PostMapping("/save")
-    public R<JSONObject> add(@Validated @RequestBody TenantActivationCodeVo.TenantActivationCode tenantActivationCodeVo) {
-
-        // 新增数据
-        tenantActivationCodeService.save(JSON.parseObject(tenantActivationCodeVo.jsonString(),
-                TenantActivationCode.class));
-
-        return R.defaultR();
-    }
-
-    @ApiOperation(value = "修改", notes = "机构激活码- 传入 TenantActivationCodeVo.TenantActivationCode")
-//    @PostMapping("/update")
-    public R<JSONObject> update(@Validated @RequestBody TenantActivationCodeVo.TenantActivationCode tenantActivationCodeVo) {
-
-        // 更新数据
-        tenantActivationCodeService.updateById(JSON.parseObject(tenantActivationCodeVo.jsonString(),
-                TenantActivationCode.class));
-
-        return R.defaultR();
-    }
-
-    @ApiOperation(value = "删除", notes = "机构激活码- 传入id")
-//    @PostMapping("/remove")
-    public R<Boolean> remove(@RequestParam Long id) {
-
-        return R.from(tenantActivationCodeService.removeById(id));
+        tenantActivationCodeService.active(activationCode, sysUser.getId());
+        return succeed();
     }
 
-    private TenantInfo getTenantInfo() {
+    @ApiOperation(value = "激活激活码")
+    @PostMapping("/activeById")
+    public HttpResponseResult<Boolean> activeById(@RequestParam("id") String id) {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
-        TenantInfo tenantInfo = tenantInfoService.lambdaQuery().eq(TenantInfo::getUserId, sysUser.getId())
-                .last("limit 1").one();
-        if (tenantInfo == null) {
-            throw new BizException("非法请求");
+        if (sysUser == null || null == sysUser.getId()) {
+            throw new BizException("请登录");
         }
-        return tenantInfo;
+        tenantActivationCodeService.activeById(id, sysUser.getId());
+        return succeed();
     }
 }

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

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

+ 3 - 4
cooleshow-app/src/main/java/com/yonge/cooleshow/tenant/controller/TenantInfoController.java

@@ -41,7 +41,6 @@ import java.util.List;
 @RequestMapping("${app-config.url.tenant:}/tenantInfoUpdate")
 @Api(value = "机构信息修改", tags = "机构信息修改")
 public class TenantInfoController extends BaseController {
-
     @Autowired
     TenantInfoService tenantInfoService;
 
@@ -93,7 +92,7 @@ public class TenantInfoController extends BaseController {
     public HttpResponseResult<Boolean> updateTenantInfo(@Valid @RequestBody TenantInfoVo.TenantInfo info) {
 
         TenantInfo tenantInfo = JSON.parseObject(info.jsonString(), TenantInfo.class);
-            tenantInfoService.updateById(tenantInfo);
+        tenantInfoService.updateById(tenantInfo);
 
         return  HttpResponseResult.succeed(true);
 
@@ -206,6 +205,6 @@ public class TenantInfoController extends BaseController {
                 tenantStaffService.updateById(staff);
             }
         }
-            return HttpResponseResult.succeed(true);
-        }
+        return HttpResponseResult.succeed(true);
+    }
 }

+ 41 - 1
cooleshow-app/src/main/java/com/yonge/cooleshow/tenant/controller/open/OpenTenantController.java

@@ -1,13 +1,19 @@
 package com.yonge.cooleshow.tenant.controller.open;
 
+import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.entity.TenantApplyRecord;
+import com.yonge.cooleshow.biz.dal.entity.TenantInfo;
 import com.yonge.cooleshow.biz.dal.entity.TenantStaff;
 import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
 import com.yonge.cooleshow.biz.dal.service.SmsCodeService;
+import com.yonge.cooleshow.biz.dal.service.SysConfigService;
+import com.yonge.cooleshow.biz.dal.service.SysUserService;
 import com.yonge.cooleshow.biz.dal.service.TenantApplyRecordService;
+import com.yonge.cooleshow.biz.dal.service.TenantInfoService;
 import com.yonge.cooleshow.biz.dal.service.TenantStaffService;
 import com.yonge.cooleshow.biz.dal.wrapper.TenantApplyRecordWrapper;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.cooleshow.common.enums.UserLockFlag;
 import com.yonge.toolset.base.exception.BizException;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -27,7 +33,6 @@ import org.springframework.web.bind.annotation.RestController;
 @Api(tags = "机构")
 public class OpenTenantController {
 
-
     @Autowired
     private TenantApplyRecordService tenantApplyRecordService;
 
@@ -37,6 +42,16 @@ public class OpenTenantController {
     @Autowired
     private SmsCodeService smsCodeService;
 
+    @Autowired
+    private SysUserService sysUserService;
+
+
+    @Autowired
+    private TenantInfoService tenantInfoService;
+
+    @Autowired
+    private SysConfigService sysConfigService;
+
 
     @PostMapping("/apply")
     @ApiOperation(value = "申请")
@@ -65,6 +80,21 @@ public class OpenTenantController {
         if (!validCode) {
             throw new BizException("验证码错误");
         }
+        // 判断当前小程序是否绑定账号
+        TenantStaff staff = tenantStaffService.lambdaQuery()
+                .eq(TenantStaff::getWxOpenid, openId)
+                .last("limit 1").one();
+        if (staff != null) {
+            SysUser sysUser = sysUserService.findUserById(staff.getUserId());
+            if (sysUser != null && !phone.equals(sysUser.getPhone())) {
+                throw new BizException("当前账号已绑定");
+            }
+            // 判断当前账号是否锁定
+            if (UserLockFlag.LOCKED.equals(staff.getStatus())) {
+                throw new BizException("当前账号已锁定");
+            }
+        }
+
         TenantStaff tenantStaff = tenantStaffService.getByPhone(phone);
         if (tenantStaff == null) {
             TenantApplyRecord one = tenantApplyRecordService.lambdaQuery()
@@ -78,6 +108,16 @@ public class OpenTenantController {
                 throw new BizException(5003, "请等待审核完成");
             }
         }
+
+        Long tenantId = tenantStaff.getTenantId();
+        TenantInfo tenantInfo = tenantInfoService.getById(tenantId);
+        if(tenantInfo == null){
+            throw new BizException("机构不存在");
+        }
+        if (Boolean.FALSE.equals(tenantInfo.getEnableFlag())) {
+            // 机构冻结
+            throw new BizException(5004, openId);
+        }
         tenantStaff.setWxOpenid(openId);
         tenantStaffService.updateById(tenantStaff);
         return HttpResponseResult.succeed();