package jnpf.base.controller; import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.annotation.SaMode; import cn.hutool.core.util.ObjectUtil; import com.google.common.base.CaseFormat; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameters; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; import jnpf.base.ActionResult; import jnpf.base.Pagination; import jnpf.onlinedev.VisualdevOnlineApi; import jnpf.base.entity.ModuleDataAuthorizeLinkEntity; import jnpf.base.entity.ModuleEntity; import jnpf.base.entity.VisualdevEntity; import jnpf.base.model.dbtable.vo.DbFieldVO; import jnpf.base.model.module.PropertyJsonModel; import jnpf.base.model.moduledataauthorize.DataAuthorizeLinkForm; import jnpf.base.model.moduledataauthorize.DataAuthorizeTableNameVO; import jnpf.base.service.DbTableService; import jnpf.base.service.ModuleDataAuthorizeLinkDataService; import jnpf.base.service.ModuleService; import jnpf.base.vo.PaginationVO; import jnpf.constant.MsgCode; import jnpf.database.model.dbfield.DbFieldModel; import jnpf.flowable.TemplateApi; import jnpf.model.visualJson.TableModel; import jnpf.util.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.*; import java.util.stream.Collectors; /** * 数据权限字段管理 数据连接 * * @author JNPF开发平台组 * @version V3.4.2 * @copyright 引迈信息技术有限公司(https://www.jnpfsoft.com) * @date 2022/6/7 */ @Tag(name = "数据权限字段管理数据连接" , description = "ModuleDataAuthorizeLink") @RestController @RequestMapping("/ModuleDataAuthorizeLink") public class ModuleDataAuthorizeLinkController { @Autowired private ModuleDataAuthorizeLinkDataService linkDataService; @Autowired private ModuleService moduleService; @Autowired private DbTableService dbTableService; @Autowired private VisualdevOnlineApi visualdevApi; @Autowired private TemplateApi templateApi; /** * 页面参数 * * @param linkForm 页面参数 * @return */ @Operation(summary = "保存编辑数据连接") @Parameters({ @Parameter(name = "linkForm", description = "页面参数", required = true) }) @SaCheckPermission(value = {"permission.resource", "appConfig.appResource"}, mode = SaMode.OR) @PostMapping("/saveLinkData") public ActionResult saveLinkData(@RequestBody @Valid DataAuthorizeLinkForm linkForm) { ModuleDataAuthorizeLinkEntity linkDataEntity = JsonUtil.getJsonToBean(linkForm, ModuleDataAuthorizeLinkEntity.class); if (StringUtil.isEmpty(linkDataEntity.getId())) { linkDataEntity.setId(RandomUtil.uuId()); linkDataService.save(linkDataEntity); return ActionResult.success(MsgCode.SU002.get()); } else { linkDataService.updateById(linkDataEntity); return ActionResult.success(MsgCode.SU004.get()); } } /** * 获取表名 * * @param menuId 菜单id * @param type 分类 * @return */ @Operation(summary = "获取表名") @Parameters({ @Parameter(name = "menuId", description = "菜单id", required = true), @Parameter(name = "type", description = "分类", required = true) }) @SaCheckPermission(value = {"permission.resource", "appConfig.appResource"}, mode = SaMode.OR) @GetMapping("/getVisualTables/{menuId}/{type}") public ActionResult getVisualTables(@PathVariable("menuId") String menuId, @PathVariable("type") Integer type) { ModuleEntity info = moduleService.getInfo(menuId); DataAuthorizeTableNameVO vo = null; if (ObjectUtil.isNotNull(info)) { PropertyJsonModel model = JsonUtil.getJsonToBean(info.getPropertyJson(), PropertyJsonModel.class); if (model == null) { model = new PropertyJsonModel(); } //功能 if (info.getType() == 3 || info.getType() ==9 || info.getType() == 11) { String formId = model.getModuleId(); if(info.getType()==9){ formId = templateApi.getFormByFlowId(model.getModuleId()); } // 得到bean VisualdevEntity visualdevEntity = visualdevApi.getFormConfig(formId); if (visualdevEntity != null) { List tables = JsonUtil.getJsonToList(visualdevEntity.getVisualTables(), TableModel.class); List collect = tables.stream().map(t -> t.getTable()).collect(Collectors.toList()); vo = DataAuthorizeTableNameVO.builder().linkTables(collect).linkId(visualdevEntity.getDbLinkId()).build(); } } else { ModuleDataAuthorizeLinkEntity linkDataEntity = linkDataService.getLinkDataEntityByMenuId(menuId,type); String linkTables = linkDataEntity.getLinkTables(); List tables = StringUtil.isNotEmpty(linkTables) ? Arrays.asList(linkTables.split(",")) : new ArrayList<>(); vo = DataAuthorizeTableNameVO.builder().linkTables(tables).linkId(linkDataEntity.getLinkId()).build(); } } return ActionResult.success(vo); } /** * 数据连接信息 * * @param menudId 菜单id * @param type 分类 * @return */ @Operation(summary = "数据连接信息") @Parameters({ @Parameter(name = "menudId", description = "菜单id", required = true), @Parameter(name = "type", description = "分类", required = true) }) @SaCheckPermission(value = {"permission.resource", "appConfig.appResource"}, mode = SaMode.OR) @GetMapping("/getInfo/{menudId}/{type}") public ActionResult getInfo(@PathVariable("menudId") String menudId,@PathVariable("type") Integer type) { ModuleDataAuthorizeLinkEntity linkDataEntity = linkDataService.getLinkDataEntityByMenuId(menudId,type); DataAuthorizeLinkForm linkForm = JsonUtil.getJsonToBean(linkDataEntity, DataAuthorizeLinkForm.class); return ActionResult.success(linkForm); } /** * 表名获取数据表字段 * * @param linkId 连接id * @param tableName 表名 * @param menuType 菜单类型 * @param dataType 数据类型 * @param pagination 分页模型 * @return * @throws Exception */ @Operation(summary = "表名获取数据表字段") @Parameters({ @Parameter(name = "linkId", description = "连接id", required = true), @Parameter(name = "tableName", description = "表名", required = true), @Parameter(name = "menuType", description = "菜单类型", required = true), @Parameter(name = "dataType", description = "数据类型", required = true) }) @SaCheckPermission(value = {"permission.resource", "appConfig.appResource"}, mode = SaMode.OR) @GetMapping("/{linkId}/Tables/{tableName}/Fields/{menuType}/{dataType}") public ActionResult getTableInfoByTableName(@PathVariable("linkId") String linkId, @PathVariable("tableName") String tableName, @PathVariable("menuType") Integer menuType,@PathVariable("dataType") Integer dataType, Pagination pagination) throws Exception { List data = dbTableService.getFieldList(linkId, tableName); List vos = JsonUtil.getJsonToList(data, DbFieldVO.class); if (StringUtil.isNotEmpty(pagination.getKeyword())) { vos = vos.stream().filter(vo -> { boolean ensure; String fieldName = vo.getFieldName(); fieldName = Optional.ofNullable(fieldName).orElse(""); ensure = fieldName.toLowerCase().contains(pagination.getKeyword().toLowerCase()) || vo.getField().toLowerCase().contains(pagination.getKeyword().toLowerCase()); return ensure; }).collect(Collectors.toList()); } List listPage = PageUtil.getListPage((int) pagination.getCurrentPage(), (int) pagination.getPageSize(), vos); PaginationVO paginationVO = JsonUtil.getJsonToBean(pagination, PaginationVO.class); paginationVO.setTotal(vos.size()); return ActionResult.page(listPage,paginationVO); } }