package com.yunhai.userbase.controller.api; import com.bestsch.utils.DException; import com.yunhai.userbase.common.annotation.OperationLog; import com.yunhai.userbase.common.context.UserContext; import com.yunhai.userbase.common.validation.ValidationGroups; import com.yunhai.userbase.config.Config; import com.yunhai.userbase.entity.ApplicationInfo; import com.yunhai.userbase.enums.BookType; import com.yunhai.userbase.model.BaseDict; import com.yunhai.userbase.model.BasePageQuery; import com.yunhai.userbase.model.BasePageResult; import com.yunhai.userbase.model.Operator; import com.yunhai.userbase.model.appauthz.AppAuthzCategoryVo; import com.yunhai.userbase.model.appcategory.AppCategoryQuery; import com.yunhai.userbase.model.appcategory.AppCategoryRequest; import com.yunhai.userbase.model.appcategory.AppCategoryVo; import com.yunhai.userbase.model.application.ApplicationInfoQuery; import com.yunhai.userbase.model.application.ApplicationInfoRequest; import com.yunhai.userbase.model.application.ApplicationInfoSortVo; import com.yunhai.userbase.model.application.ApplicationInfoVo; import com.yunhai.userbase.model.appmodule.AppModuleQuery; import com.yunhai.userbase.model.appmodule.AppModuleRequest; import com.yunhai.userbase.model.appmodule.AppModuleVo; import com.yunhai.userbase.service.IAppCategoryService; import com.yunhai.userbase.service.IApplicationInfoService; import com.yunhai.userbase.service.IAppModuleService; import com.yunhai.userbase.service.SignKeyCacheService; import com.yunhai.userbase.utils.DicUtil; import com.yunhai.userbase.utils.PageUtils; import org.apache.commons.lang3.StringUtils; import org.apache.tomcat.util.http.fileupload.util.Streams; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Sort; import org.springframework.data.web.SortDefault; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; import java.io.BufferedOutputStream; import java.io.InputStream; import java.net.URLEncoder; import java.util.Enumeration; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @RestController @RequestMapping(value = Config.API_PATH + "/app/") public class AppSettingsController { @Autowired private IAppCategoryService appCategoryService; @Autowired private IApplicationInfoService applicationInfoService; @Autowired private IAppModuleService appModuleService; @Autowired private SignKeyCacheService signKeyCacheService; @OperationLog("新增应用类型") @PostMapping("AddType") public void addType(@RequestBody @Validated(ValidationGroups.Create.class) AppCategoryRequest request) { appCategoryService.add(request); } @OperationLog("编辑应用类型") @PostMapping("EditType/{id}") public void editType(@PathVariable Integer id, @RequestBody @Validated(ValidationGroups.Update.class) AppCategoryRequest request) { appCategoryService.edit(id, request); } @OperationLog("删除应用类型") @PostMapping("DeleteType/{id}") public void deleteType(@PathVariable Integer id) { appCategoryService.delete(id); } @GetMapping("/AppTypeList") public List appTypeList(AppCategoryQuery query) { return appCategoryService.list(query); } @OperationLog("应用类型排序") @PostMapping("/AppTypeSort") public void appTypeSort(@RequestBody List ids) { appCategoryService.sort(ids); } /** * 应用授权用:获取所有应用类型及其类型下的应用(每个应用含 id/name/icon)。
* 类型按 sortNo 升序,类型内应用按 sortNo、id 升序;无应用的类型 app 为空数组。 */ @GetMapping("/AppAuthzList") public List appAuthzList() { return appCategoryService.listWithApps(); } @OperationLog("新增应用") @PostMapping("AddApp") public void addApp(@RequestBody @Validated(ValidationGroups.Create.class) ApplicationInfoRequest request) { applicationInfoService.add(request); } @OperationLog("编辑应用") @PostMapping("EditApp/{id}") public void editApp(@PathVariable Integer id, @RequestBody @Validated(ValidationGroups.Update.class) ApplicationInfoRequest request) { applicationInfoService.edit(id, request); } @OperationLog("删除应用") @PostMapping("DeleteApp/{id}") public void deleteApp(@PathVariable Integer id) { applicationInfoService.delete(id); } @OperationLog("重置应用密钥") @PostMapping("ResetAppSecret/{id}") public String resetAppSecret(@PathVariable Integer id) { applicationInfoService.resetAppSecret(id); ApplicationInfo info= applicationInfoService.getById(id); return info.getAppSecret(); } @OperationLog("全量刷新应用签名密钥到Redis") @PostMapping("RefreshSignKeys") public Map refreshSignKeys() { int count = signKeyCacheService.refreshAll(); Map result = new LinkedHashMap<>(); result.put("refreshed", count); return result; } @GetMapping("/AppList") public BasePageResult appList(ApplicationInfoQuery query, BasePageQuery pageQuery, @SortDefault(sort = "sortNo", direction = Sort.Direction.ASC) Sort sort) { return PageUtils.toResult(applicationInfoService.list(query, PageUtils.toPageable(pageQuery, sort))); } @OperationLog("应用排序") @PostMapping("/AppSort") public void appSort(@RequestBody List ids) { applicationInfoService.sort(ids); } @GetMapping("/AppSortList") public List appSortList(@RequestParam Integer categoryId) { return applicationInfoService.findListByCategoryId(categoryId); } @OperationLog("新增模块") @PostMapping("AddModule") public void addModule(@RequestBody @Validated(ValidationGroups.Create.class) AppModuleRequest request) { appModuleService.add(request); } @OperationLog("编辑模块") @PostMapping("EditModule/{id}") public void editModule(@PathVariable Integer id, @RequestBody @Validated(ValidationGroups.Update.class) AppModuleRequest request) { appModuleService.edit(id, request); } @OperationLog("删除模块") @PostMapping("DeleteModule/{id}") public void deleteModule(@PathVariable Integer id) { appModuleService.delete(id); } @GetMapping("/ModuleList") public List moduleList(AppModuleQuery query) { return appModuleService.list(query); } }