package com.ai.da.controller; import com.ai.da.common.config.exception.BusinessException; import com.ai.da.common.context.UserContext; import com.ai.da.common.response.PageBaseResponse; import com.ai.da.common.response.Response; import com.ai.da.mapper.primary.entity.Account; import com.ai.da.mapper.primary.entity.AccountExtend; import com.ai.da.mapper.primary.entity.TrialOrder; import com.ai.da.model.dto.*; import com.ai.da.model.vo.AccountLoginVO; import com.ai.da.model.vo.AccountPreLoginVO; import com.ai.da.model.vo.BindEmailVO; import com.ai.da.model.vo.PersonalHomepageVO; import com.ai.da.service.AccountService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.Valid; import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpStatus; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; @Tag(name = "Account模块") @Slf4j @RestController @RequestMapping("/api/account") public class AccountController { @Resource private AccountService accountService; @Operation(summary = "预先登入") @PostMapping("/preLogin") public Response preLogin(@Valid @RequestBody AccountPreLoginDTO accountDTO) { return Response.success(accountService.preLogin(accountDTO)); } @Operation(summary = "登入") @PostMapping("/login") public Response login(@Valid @RequestBody AccountLoginDTO accountDTO, HttpServletRequest request) { return Response.success(accountService.login(accountDTO, request)); } @Operation(summary = "绑定邮箱") @PostMapping("/bindEmail") public Response bindEmail(@Valid @RequestBody AccountBindEmailDTO accountBindEmailDTO, HttpServletRequest request) { return Response.success(accountService.bindEmail(accountBindEmailDTO, request)); } @Operation(summary = "忘记密码") @PostMapping("/resetPwd") public Response resetPwd(@Valid @RequestBody AccountRegisterDTO accountRegisterDTO) { return Response.success(accountService.forgetPwd(accountRegisterDTO)); } @Operation(summary = "发送邮件") @PostMapping("/sendEmail") public Response sendEmail(@Valid @RequestBody EmailSendDTO emailSendDTO) { return Response.success(accountService.sendEmail(emailSendDTO)); } @Operation(summary = "登出") @PostMapping("/logout") public Response logout(@Valid @RequestBody AccountLogoutDTO accountLogoutDTO) { return Response.success(accountService.logout(accountLogoutDTO)); } @Operation(summary = "是否登入") @PostMapping("/isLogin") public Response isLogin(@Valid @RequestBody AccountLogoutDTO accountLogoutDTO) { return Response.success(accountService.isLogin(accountLogoutDTO)); } @Operation(summary = "获取当前用户语言") @PostMapping("/getUserLanguage") public Response getUserLanguage() { return Response.success(accountService.getUserLanguage()); } @Operation(summary = "切换当前用户语言") @GetMapping("/changeUserLanguage") public Response changeUserLanguage(String language) { return Response.success(accountService.changeUserLanguage(language)); } @Operation(summary = "试用用户退出登录") @GetMapping("/trialUserLogout") public Response trialUserLogout() { return Response.success(accountService.trialUserLogout()); } @Operation(summary = "完成新手教程") @PostMapping("/completeGuidance") public Response completeGuidance() { return Response.success(accountService.completeGuidance()); } @Operation(summary = "试用订单列表") @PostMapping("/trialOrderList") public Response> trialOrderList(@Valid @RequestBody TrialOrderDTO trialOrderDTO) { return Response.success(PageBaseResponse.success(accountService.trialOrderList(trialOrderDTO))); } @Operation(summary = "通过试用订单审批") @PostMapping("/trialOrderApproval") public Response trialOrderApproval(@RequestParam("ids") List ids) { return Response.success(accountService.trialOrderApproval(ids)); } @Operation(summary = "拒绝试用订单审批") @PostMapping("/trialOrderRefuse") public Response trialOrderRefuse(@RequestParam("ids") List ids) { return Response.success(accountService.trialOrderRefuse(ids)); } @Operation(summary = "获取是否自动审评") @PostMapping("/getIsAutoApproval") public Response getIsAutoApproval() { return Response.success(accountService.getIsAutoApproval()); } @Operation(summary = "切换是否自动审评") @PostMapping("/switchIsAutoApproval") public Response switchIsAutoApproval() { return Response.success(accountService.switchIsAutoApproval()); } @Operation(summary = "aws状态检测") @GetMapping("/healthy") @ResponseStatus(HttpStatus.OK) public Response> checkStatus() { Map returnMap = new HashMap<>(); returnMap.put("code", 200); return Response.success(returnMap); } @Operation(summary = "查询账号到期时间") @PostMapping("/getExpiredTime") public Response getExpiredTime() { return Response.success(accountService.getExpiredTime()); } @Operation(summary = "免密登录") @PostMapping("/noLoginRequired") public Response noLoginRequired(@RequestBody NoLoginRequiredDTO noLoginRequiredDTO, HttpServletRequest request) { return Response.success(accountService.noLoginRequired(noLoginRequiredDTO, request)); } @PostMapping("upgradeNotification") @Operation(summary = "升级邮件通知") public Response upgradeNotification() { accountService.upgradeNotification(); return Response.success(true); } @CrossOrigin @Operation(summary = "广场用户注册") @PostMapping("/designWorksRegister") public Response designWorksRegister(@Valid @RequestBody AccountDesignWorksRegisterDTO accountDesignWorksRegisterDTO) { return Response.success(accountService.designWorksRegister(accountDesignWorksRegisterDTO)); } @CrossOrigin @Operation(summary = "广场用户注册") @PostMapping("/designWorksRegisterCode") public Response designWorksRegisterCode(@Valid @RequestBody AccountDesignWorksRegisterDTO accountDesignWorksRegisterDTO, HttpServletRequest request) { return Response.success(accountService.designWorksRegisterCode(accountDesignWorksRegisterDTO, request)); } /** * 填写调查问卷 * @return */ /* @Operation(summary = "填写调查问卷") @PostMapping("/questionnaire") public Response questionnaire(@Valid @RequestBody String questionnaireInfo){ return Response.success(accountService.collectQuestionnaires(questionnaireInfo)); }*/ /** * 参与活动 获取福利 * * @return */ /* @Operation(summary = "参与活动 获取福利") @GetMapping("/activity") public Response getActivityBenefits(){ return Response.success(accountService.getActivityBenefits()); }*/ @Operation(summary = "将用户账号过期时间设置为过期当天的23:59:59") @GetMapping("/setUserValidToDayEnd") public Response> setUserValidToDayEnd() { return Response.success(accountService.setUserValidToDayEnd()); } // 用户上传头像 @Operation(summary = "上传头像") @PostMapping(path = "/uploadAvatar") public Response uploadAvatar(@RequestParam("file") MultipartFile file) { if (null == file || StringUtils.isEmpty(file.getOriginalFilename())) { throw new BusinessException("file.cannot.be.empty"); } return Response.success(accountService.uploadAvatar(file)); } @Operation(summary = "个人主页浏览量增加") @GetMapping("/viewsIncrease") public Response viewsGet(@RequestParam("id") Long id) { return Response.success(accountService.viewsIncrease(id)); } @Operation(summary = "获取个人主页信息") @GetMapping("/personalHomepage") public Response getPersonalHomepage(@RequestParam("id") Long id) { return Response.success(accountService.getPersonalHomepage(id)); } @Operation(summary = "getUsernameModifyTimes") @GetMapping("/getNicknameModifyTimes") public Response getNicknameModifyTimes() { return Response.success(accountService.getNicknameModifyTimes()); } @Operation(summary = "editUserName") @GetMapping("/editUserName") public Response editUserName(@RequestParam("newUserName") String newUserName) { accountService.editUserName(newUserName); return Response.success("success"); } /*@ApiOperation(value = "verifyUserEmail") @GetMapping("/verifyUserEmail") public Response verifyUserEmail(@RequestParam("verifyCode") String verifyCode){ accountService.verifyUserEmail(verifyCode); return Response.success("success"); } @Operation(summary = "changeUserEmail") @GetMapping("/changeUserEmail") public Response changeUserEmail(@RequestParam("newMailbox") String newMailbox){ accountService.changeUserEmail(newMailbox); return Response.success("success"); } @Operation(summary = "activateNewEmail") @GetMapping("/activateNewEmail") public Response activateNewEmail(@RequestParam("token") String token){ accountService.activateNewEmail(token); return Response.success("success"); }*/ @PostMapping("halfPricePromotion") @Operation(summary = "十月半价活动") public Response halfPricePromotion() { accountService.halfPricePromotion(); return Response.success(true); } @PostMapping("temporaryUpgrade") @Operation(summary = "临时升级") public Response temporaryUpgrade() { accountService.temporaryUpgrade(); return Response.success(true); } @PostMapping("enterpriseLogin") @Operation(summary = "企业登录") public Response enterpriseLogin(@Valid @RequestBody AccountLoginDTO accountDTO) { return Response.success(accountService.enterpriseLogin(accountDTO)); } @PostMapping("schoolLogin") @Operation(summary = "学校登录") public Response schoolLogin(@Valid @RequestBody AccountLoginDTO accountDTO) { return Response.success(accountService.schoolLogin(accountDTO)); } @PostMapping("organizationNameSearch") @Operation(summary = "组织名模糊查询") public Response> organizationNameSearch(@RequestParam("type") String type, @RequestParam(value = "name", required = false) String name) { return Response.success(accountService.organizationNameSearch(type, name)); } @PostMapping("addOrUpdateSubAccount") @Operation(summary = "子账号新增") public Response addSubAccount(@Valid @RequestBody AddSubAccountDTO addSubAccountDTO) { return Response.success(accountService.addSubAccount(addSubAccountDTO)); } @PostMapping("deleteSubAccount") @Operation(summary = "子账号删除") public Response deleteSubAccount(@Valid @RequestBody AddSubAccountDTO addSubAccountDTO) { // return Response.success(accountService.deleteSubAccount(addSubAccountDTO)); accountService.removeSubAccount(addSubAccountDTO, UserContext.getUserHolder().getId()); return Response.success(); } @PostMapping("subAccountList") @Operation(summary = "子账号查询") public Response> subAccountList(@Valid @RequestBody SubAccountPageDTO subAccountPageDTO) { return Response.success(accountService.subAccountList(subAccountPageDTO)); } @GetMapping("accountDetail") @Operation(summary = "账号详情") public Response accountDetail(@RequestParam("id") Long id) { return Response.success(accountService.accountDetail(id)); } @PostMapping("getAccountDetail") @Operation(summary = "获取账户信息") public Response getAccountDetail() { return Response.success(accountService.getAccountDetail()); } @GetMapping("/bindGoogle") @Operation(summary = "绑定谷歌") public Response bindGoogle(@RequestParam("credential") String credential) { return Response.success(accountService.bindGoogle(credential)); } @GetMapping("/bindWeChat") @Operation(summary = "绑定微信") public Response bindWeChat(@RequestParam("code") String code) { return Response.success(accountService.bindWeChat(code)); } @GetMapping("/bindEmail") @Operation(summary = "绑定邮箱") public Response bindEmail(@RequestParam("email") String email) { return Response.success(accountService.bindEmail(email)); } @GetMapping("/unbindWeChat") @Operation(summary = "解除绑定微信") public Response unbindWeChat() { return Response.success(accountService.unbindWeChat()); } @GetMapping("/unbindGoogle") @Operation(summary = "解除绑定谷歌") public Response unbindGoogle() { return Response.success(accountService.unbindGoogle()); } @PostMapping("/updateUserInfo") @Operation(summary = "更新用户国家、职业信息") public Response updateUserInfo(@Valid @RequestBody UpdateUserInfoDTO updateUserInfoDTO) { return Response.success(accountService.updateUserInfo(updateUserInfoDTO)); } @GetMapping("/subAccountImportExcelDownload") @Operation(summary = "模板下载") public void subAccountImportExcelDownload(HttpServletResponse response) { accountService.subAccountImportExcelDownload(response); } @GetMapping("/exportAccountsToExcel") @Operation(summary = "下载子账号信息") public void exportAccountsToExcel(HttpServletResponse response) { accountService.exportAccountsToExcel(response); } @PostMapping("/subAccountImport") @Operation(summary = "模板导入") public Response subAccountImport(@RequestParam("file") MultipartFile file) { return Response.success(accountService.subAccountImport(file)); } /*@GetMapping("/send618Email") @Operation(summary = "618邮件发送") public Response send618PromotionEmailTemp() { accountService.send618PromotionEmailTemp(); return Response.success("success"); }*/ /*@GetMapping("/refreshCreditsMonthly") @Operation(summary = "刷新子账号积分") public void refreshCreditsMonthly() { accountService.refreshCreditsMonthly(); }*/ /*@GetMapping("/checkEduAdminExpireStatus") @Operation(summary = "检查教育管理员账号到期情况") public void checkEduAdminExpireStatus() { accountService.checkEduAdminExpireStatus(); }*/ }