package com.ym.mec.student.controller; import com.microsvc.toolkit.middleware.oss.wrapper.OssWrapper; import com.ym.mec.auth.api.client.SysUserFeignService; import com.ym.mec.auth.api.entity.SysUser; import com.ym.mec.biz.dal.dao.CloudTeacherOrderDao; import com.ym.mec.biz.dal.dto.CashAccountDetail; import com.ym.mec.biz.dal.entity.*; import com.ym.mec.biz.dal.enums.ClientEnum; import com.ym.mec.biz.dal.page.SysSuggestionQueryInfo; import com.ym.mec.biz.dal.wrapper.ImGroupWrapper; import com.ym.mec.biz.service.*; import com.ym.mec.biz.service.im.ImGroupCoreService; import com.ym.mec.common.controller.BaseController; import com.ym.mec.common.entity.HttpResponseResult; import com.ym.mec.common.entity.UploadReturnBean; import com.ym.mec.common.page.QueryInfo; import com.ym.mec.thirdparty.entity.UploadSign; import com.ym.mec.util.date.DateUtil; import com.ym.mec.util.http.HttpUtil; import com.ym.mec.util.upload.UploadUtil; import io.swagger.annotations.*; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @Api(tags = "学生管理") @RestController @RequestMapping("${app-config.url.student:}/") public class StudentManageController extends BaseController { @Autowired private SysSuggestionService suggestionService; @Autowired private SysUserService sysUserService; @Autowired private SysUserCashAccountService sysUserCashAccountService; @Autowired private SysUserCashAccountDetailService sysUserCashAccountDetailService; @Autowired private ClassGroupService classGroupService; @Autowired private ImGroupNoticeService imGroupNoticeService; @Autowired private SysUserBankCardService sysUserBankCardService; @Autowired private StudentManageService studentManageService; @Autowired private SubjectService subjectService; @Autowired private OrganizationService organizationService; @Autowired private StudentService studentService; @Autowired private AppVersionInfoService appVersionInfoService; @Autowired private MemberRankSettingService memberRankSettingService; @Autowired private MemberRankPrivilegesService memberRankPrivilegesService; @Autowired private SysConfigService sysConfigService; @Autowired private CloudTeacherOrderDao cloudTeacherOrderDao; @Autowired private ImGroupCoreService imGroupCoreService; @Autowired private InstrumentService instrumentService; private final static Logger LOGGER = LoggerFactory.getLogger(StudentManageController.class); @Autowired private UploadFileService uploadFileService; @PostMapping(value = "uploadFile") public Object uploadFile(@ApiParam(value = "上传的文件", required = true) @RequestParam("file") MultipartFile file) { try { if (file != null && StringUtils.isNotBlank(file.getOriginalFilename())) { UploadReturnBean bean = uploadFileService.uploadFile(file.getInputStream(), UploadUtil.getExtension(file.getOriginalFilename())); if (bean.isStatus()) { return succeed(bean); } return failed(bean.getMessage()); } } catch (Exception e) { LOGGER.error("上传失败", e); } return failed("上传失败"); } @ApiImplicitParams({ @ApiImplicitParam(name = "bucketName", dataType = "String", value = "为空时默认使用daya"), @ApiImplicitParam(name = "fileName", dataType = "String", value = "要上传的文件名称,不包含路径信息"), @ApiImplicitParam(name = "postData", dataType = "Map", value = "1.如果使用js sdk上传的时候设置了ACL请设置,例\"acl\":\"public-read\"值要与SDK中一致,没有则删除该项
" + "2.提供js sdk中的key值,例\"key\":\"20150115/中文/${filename}\""), @ApiImplicitParam(name = "unknowValueField", dataType = "List", value = "对于用户无法确定表单值的放在unknownValueField中(比如有的上传控件会添加一些表单项,但表单项的值可能是随机的)"), @ApiImplicitParam(name = "pluginName", dataType = "String", value = "插件名称,默认ks3,可选值:ks3,aliyun,tencent"), }) @ApiOperation(value = "获取上传文件签名", notes = "{\n" + " \"bucketName\":\"\",\n" + " \"filename\":\"test.png\",\n" + " \"postData\":{\n" + " \"acl\":\"public-read\",\n" + " \"key\":\"20150115/中文/${filename}\"\n" + " },\n" + " \"unknowValueField\":[\"test\"]\n" + "}") @PostMapping("/getUploadSign") public HttpResponseResult getUploadSign(@RequestParam(defaultValue = "ks3") String pluginName, @RequestBody UploadSign uploadSign) { // 设置默认文件存储服务方 uploadSign.setPluginName(pluginName); return succeed(uploadFileService.getUploadSign(uploadSign)); } @ApiOperation(value = "新增建议") @PostMapping("suggestion/add") public Object add(SysSuggestion sysSuggestion) { SysUser sysUser = sysUserService.getUser(); sysSuggestion.setClientType("STUDENT"); sysSuggestion.setUserId(sysUser.getId().longValue()); if(StringUtils.isEmpty(sysSuggestion.getMobileNo())){ sysSuggestion.setMobileNo(sysUser.getPhone()); } suggestionService.insert(sysSuggestion); return succeed(); } @ApiOperation(value = "分页查询") @PostMapping("sysSuggestion/queryPage") public Object queryPage(@RequestBody SysSuggestionQueryInfo queryInfo) { queryInfo.setUserId(sysUserService.getUserId()); queryInfo.setClientType("STUDENT"); return succeed(suggestionService.queryPage(queryInfo)); } @ApiOperation(value = "获取详情") @GetMapping("sysSuggestion/detail") public HttpResponseResult detail(Long id) { return succeed(suggestionService.getDetail(id)); } @ApiOperation(value = "获取学员基本信息") @GetMapping("student/queryUserInfo") public Object queryUserInfo(String platform) { SysUser user = sysUserService.getUser(); Student student = studentService.get(user.getId()); student.setId(user.getId()); student.setUsername(user.getUsername()); student.setAvatar(user.getAvatar()); student.setPhone(user.getPhone()); student.setCurrentClass(user.getCurrentClass()); student.setCurrentGrade(user.getCurrentGrade()); student.setBirthdate(user.getBirthdate()); student.setGender(user.getGender()); student.setRealName(user.getRealName()); student.setIdCardNo(user.getIdCardNo()); student.setImToken(user.getImToken()); student.setOrganId(user.getOrganId()); // 注册IM用户Token try { ImGroupWrapper.ImUserInfo register = imGroupCoreService.getUserSig(String.valueOf(student.getId()), ClientEnum.STUDENT.getCode()); // 设置用户Token student.setImToken(register.getImToken()); // 设置用户IM用户ID student.setImUserId(register.getImUserId()); } catch (Exception e) { LOGGER.error("注册IM用户Token失败", e); } if(StringUtils.isNotBlank(student.getSubjectIdList())){ List subjectList = subjectService.findBySubjectByIdList(student.getSubjectIdList()); student.setSubjectNames(subjectList.stream().map(t -> t.getName()).collect(Collectors.joining(","))); } if(StringUtils.isNotBlank(student.getExtSubjectIds())){ List subjectList = subjectService.findBySubjectByIdList(student.getExtSubjectIds()); student.setExtSjectNamesMap(subjectList.stream().collect(Collectors.toMap(Subject :: getId, Subject :: getName))); } Map datas = new HashMap(); datas.put("student", student); List dataList = cloudTeacherOrderDao.queryByUserIdAndStatus(user.getId(),1); if(dataList != null && dataList.size() > 0){ datas.put("isExistPendingMember", true); }else{ datas.put("isExistPendingMember", false); } if (StringUtils.isNotBlank(platform)) { AppVersionInfo appVersionInfo = null; List list = appVersionInfoService.queryNewestByPlatform(platform); if (list.size() > 0) { appVersionInfo = list.get(0); } datas.put("appVersionInfo", appVersionInfo); } // 查询权限 if (student.getMemberRankSettingId() == null || student.getMemberRankSettingId() == 0) { List memberRankSettingList = memberRankSettingService.queryListByIsDefault(true); if (memberRankSettingList != null && memberRankSettingList.size() > 0) { datas.put("userPrivileges", memberRankPrivilegesService.queryByMemberRankId(memberRankSettingList.get(0).getId())); } } else { datas.put("userPrivileges", memberRankPrivilegesService.queryByMemberRankId(student.getMemberRankSettingId())); } SysConfig sysConfig = sysConfigService.findByParamName(SysConfigService.HOMEWORK_OPEN_FLAG); if (sysConfig == null) { datas.put("homeworkOpenFlag", 0); } else { datas.put("homeworkOpenFlag", Integer.parseInt(sysConfig.getParanValue())); } // 获取会员等级图标 MemberRankSetting memberRankSetting = memberRankSettingService.get(student.getMemberRankSettingId()); if (memberRankSetting != null) { student.setMemberRankImg(memberRankSetting.getIcon()); } //是否是试用会员 if(student.getExperienceMemberRankSettingId() == null){ datas.put("isExperience", 0); }else { int i = DateUtil.daysBetween(student.getExperienceMembershipEndTime(),student.getMembershipEndTime()); if(i > 0){ datas.put("isExperience", 0); }else { datas.put("isExperience", 1); if (memberRankSetting != null) { student.setMemberRankImg(memberRankSetting.getExperienceIcon()); } } } // 通过学生声部换乐器ID if (StringUtils.isNotBlank(student.getSubjectIdList())) { List instrumentIdsBySubjectId = instrumentService.getInstrumentIdsBySubjectId(Integer.parseInt(student.getSubjectIdList())); if (CollectionUtils.isNotEmpty(instrumentIdsBySubjectId)) { datas.put("instrumentId",instrumentIdsBySubjectId.get(0)); } } return succeed(datas); } @ApiOperation(value = "根据群编号,获取群组所有成员基本信息") @GetMapping("classGroup/findGroupUsers") public Object findGroupUsers(Integer groupId,String search) { if (groupId == null) { return failed("参数校验错误"); } return succeed(classGroupService.findGroupUsers(groupId,search)); } @ApiOperation(value = "分页查询群公告列表") @GetMapping(value = "/queryNoticePage") public Object queryNoticePage(QueryInfo queryInfo){ return succeed(imGroupNoticeService.queryPage(queryInfo)); } @ApiOperation(value = "根据群编号,获取用户群名片") @GetMapping("classGroup/getUserInfoWithUserId") public Object getUserInfoWithUserId(Integer groupId,Integer userId) { if (groupId == null || userId == null) { return failed("参数校验错误"); } return succeed(classGroupService.getUserInfoWithUserId(groupId,userId)); } @ApiOperation(value = "获取用户账户信息") @GetMapping("userCashAccount/get") public Object add() { SysUser sysUser = sysUserService.getUser(); return succeed(sysUserCashAccountService.get(sysUserService.getUserId())); } @ApiOperation(value = "分页查询用户交易明细") @GetMapping("userCashAccountDetail/queryPage") public Object queryPage(CashAccountDetail queryInfo) { queryInfo.setUserId(sysUserService.getUserId()); return succeed(sysUserCashAccountDetailService.queryPage(queryInfo)); } @ApiOperation(value = "新增银行卡信息") @PostMapping("userBankCard/add") public Object add(SysUserBankCard sysUserBankCard) { if(sysUserBankCard == null){ return failed("参数校验异常"); } sysUserBankCard.setUserId(sysUserService.getUserId()); return succeed(sysUserBankCardService.add(sysUserBankCard)); } @ApiOperation(value = "删除银行卡信息") @PostMapping("userBankCard/del") public Object del(Long id) { if(id == null){ return failed("参数校验失败"); } sysUserBankCardService.del(id,sysUserService.getUserId()); return succeed(); } @ApiOperation(value = "分页查询银行卡信息列表") @GetMapping("userBankCard/queryPage") public Object queryPage() { return succeed(sysUserBankCardService.findByUser(sysUserService.getUserId())); } @ApiOperation(value = "修改用户") @PostMapping(value = "user/update", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE) public Object update(SysUser sysUser) { Date date = new Date(); sysUser.setId(sysUserService.getUserId()); sysUser.setUpdateTime(date); studentManageService.updateUser(sysUser); return succeed(); } /** * 学员注册激活比例列表 * @return */ @GetMapping(value = "studentManage/queryStudentPer/{tenantId}") public Object queryStudentPer(@ApiParam(value = "机构Id", required = true) @PathVariable("tenantId") Integer tenantId) { return succeed(studentManageService.queryStudentPer(tenantId)); } @ApiOperation(value = "获取子集科目列表") @GetMapping("subject/findSubSubjects") public Object findSubSubjects(){ return succeed(subjectService.findSubSubjects(null,null)); } @ApiOperation(value = "获取用户所在分部的年级列表)") @GetMapping("studentManage/getGradeList") public HttpResponseResult> getGradeList() { return succeed(organizationService.getGradeList(sysUserService.getUser().getOrganId())); } @ApiOperation(value = "url短链接") @PostMapping("shortURL") public HttpResponseResult shortURL(String orginURL) { return succeed(HttpUtil.getSortUrl(orginURL)); } }