ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/ApiController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,71 @@ package com.ruoyi.web.controller.common; import com.alibaba.fastjson2.JSON; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.project.domain.BaseAnnextype; import com.ruoyi.project.domain.GiApi; import com.ruoyi.project.domain.dto.ApiDTO; import com.ruoyi.project.service.IApiService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.ObjectUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.ArrayList; import java.util.List; import java.util.Map; @Slf4j @Api(description = "apiæå¡") @RestController @RequestMapping("/api") public class ApiController { @Autowired private IApiService service; @ApiOperation("API->apiæ¥è¯¢å表") @PostMapping("/{path}") public AjaxResult getApiList(@PathVariable("path") String path, @RequestBody ApiDTO DTO) { List<Map<String, Object>> lists = new ArrayList<>(); if (ObjectUtils.isNotEmpty(path)) { GiApi tempSql = service.getCode(path); if (tempSql != null && ObjectUtils.isNotEmpty(tempSql.getApiSql())) { String SQL_REG_EXP = ".*(\\b(insert|into|update|delete|trancate" + "|drop|execute|grant|use)\\b).*"; if (tempSql.getApiSql().toLowerCase().matches(SQL_REG_EXP)) { return AjaxResult.error("sql䏿鿳å符,åªåºè®¸select"); } lists = service.getListSql(tempSql.getApiSql(), DTO); return AjaxResult.success(JSON.toJSON(lists)); } else return AjaxResult.error("sqlä»£ç æ²¡æå¯¹åºçsqlè¯·æ ¸å¯¹"); } else { return AjaxResult.error("表åä¸è½ä¸ºç©º"); } } @ApiOperation("API->apiæ¥è¯¢object") @PostMapping("/s/{path}") public AjaxResult getStringSql(@PathVariable("path") String path, @RequestBody ApiDTO DTO){ List<Map<String,Object>> lists=new ArrayList<>(); if(ObjectUtils.isNotEmpty(path)) { GiApi tempSql= service.getCode(path); if(tempSql!=null&&ObjectUtils.isNotEmpty(tempSql.getApiSql())) { String SQL_REG_EXP = ".*(\\b(insert|into|update|delete|trancate" + "|drop|execute|grant|use)\\b).*"; if (tempSql.getApiSql().toLowerCase().matches(SQL_REG_EXP)) { return AjaxResult.error("sql䏿鿳å符,åªåºè®¸select"); } return AjaxResult.success(service.getStringSql(tempSql.getApiSql(), DTO)); }else return AjaxResult.error("sqlä»£ç æ²¡æå¯¹åºçsqlè¯·æ ¸å¯¹"); }else { return AjaxResult.error("表åä¸è½ä¸ºç©º"); } } } ruoyi-project/src/main/java/com/ruoyi/project/domain/GiApi.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,65 @@ package com.ruoyi.project.domain; import java.util.Date; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.common.core.domain.BaseEntity; import io.swagger.annotations.ApiModel; import lombok.Data; import io.swagger.annotations.ApiModelProperty; /** * apiæ¥å£ å®ä½ç±» * 2026-02-27 15:57:47 sinake */ @Data @ApiModel("apiæ¥å£") public class GiApi { @ApiModelProperty("id") @TableId(type = IdType.AUTO) private String id; @ApiModelProperty("ç¶ç±»id") private String parentId; @ApiModelProperty("æºæä»£ç ") private String orginId; @ApiModelProperty("æ¥å£ä»£ç ") private String apiCode; @ApiModelProperty("æ¥å£åç§°") private String apiName; @ApiModelProperty("æ¥å£æ°æ®æº") private String apiTable; @ApiModelProperty("æ¥å£è¯å¥") private String apiSql; @ApiModelProperty("æ¥å£æ¹å¼0list1string") private String apiWay; @ApiModelProperty("æ¯å¦å é¤0å¦1æ¯") private Integer isDel; @ApiModelProperty("å建人") private String creator; @ApiModelProperty("å建æ¶é´") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") private Date createTime; @ApiModelProperty("ä¿®æ¹ç¨æ·") private String updater; @ApiModelProperty("ä¿®æ¹æ¶é´") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") private Date updateTime; } ruoyi-project/src/main/java/com/ruoyi/project/domain/ServiceDeathinfo.java
@@ -99,5 +99,14 @@ @Excel(name = "è´è´£äººå§å") private String responsibleusername; /** è´è´£äººå§å */ @ApiModelProperty("æ»äº¡å¤å®è¯´æ") @Excel(name = "æ»äº¡å¤å®è¯´æ") private String judgmentDescription; /** è´è´£äººå§å */ @ApiModelProperty("æ©å±") @Excel(name = "æ©å±") private String extContent; } ruoyi-project/src/main/java/com/ruoyi/project/domain/ServiceDonateorganBase.java
@@ -66,5 +66,20 @@ @Excel(name = "é¢è®¡æ¶é´", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") private Date estimatedtime; /** è®°å½ç¶æ */ @ApiModelProperty("è®°å½ç¶æ") @Excel(name = "è®°å½ç¶æ") private String recordstate; /** éä»¶è·¯å¾,å¤å¼ ç¨;å·éå¼ */ @ApiModelProperty("éä»¶è·¯å¾,å¤å¼ ç¨;å·éå¼") @Excel(name = "éä»¶è·¯å¾,å¤å¼ ç¨;å·éå¼") private String fileName; /** æ©å± */ @ApiModelProperty("æ©å±") @Excel(name = "æ©å±") private String extContent; } ruoyi-project/src/main/java/com/ruoyi/project/domain/ServiceDonationwitnessorgan.java
@@ -135,5 +135,15 @@ @Excel(name = "å¨å®è·åå¼å§æ¶é´", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") private Date organStartTime; /** éä»¶è·¯å¾,å¤å¼ ç¨;å·éå¼ */ @ApiModelProperty("éä»¶è·¯å¾,å¤å¼ ç¨;å·éå¼") @Excel(name = "éä»¶è·¯å¾,å¤å¼ ç¨;å·éå¼") private String fileName; /** æ©å± */ @ApiModelProperty("æ©å±") @Excel(name = "æ©å±") private String extContent; } ruoyi-project/src/main/java/com/ruoyi/project/domain/dto/ApiDTO.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,20 @@ package com.ruoyi.project.domain.dto; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.Tag; import lombok.Data; import lombok.NoArgsConstructor; import lombok.ToString; import java.util.Map; @Data @ToString @NoArgsConstructor @ApiModel("ApiDTOç¸å ³jsonåæ°") public class ApiDTO { @ApiModelProperty("ç¸å ³åæ°") Map<String, Object> params; } ruoyi-project/src/main/java/com/ruoyi/project/domain/vo/DonationwitnessBaseInfoVO.java
@@ -256,5 +256,16 @@ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date coordinatorSignTime; /** éä»¶è·¯å¾,å¤å¼ ç¨;å·éå¼ */ @ApiModelProperty("éä»¶è·¯å¾,å¤å¼ ç¨;å·éå¼") @Excel(name = "éä»¶è·¯å¾,å¤å¼ ç¨;å·éå¼") private String fileName; /** æ©å± */ @ApiModelProperty("æ©å±") @Excel(name = "æ©å±") private String extContent; } ruoyi-project/src/main/java/com/ruoyi/project/mapper/ApiMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,24 @@ package com.ruoyi.project.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.project.domain.GiApi; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; import java.util.List; import java.util.Map; public interface ApiMapper extends BaseMapper<GiApi> { /** * æ¥è¯¢sql * @param sql * @return */ @Select({"${sql}"}) List<Map<String, Object>> executeSql(@Param("sql") String sql); @Select({"${sql}"}) String getClob(@Param("sql") String sql); } ruoyi-project/src/main/java/com/ruoyi/project/service/IApiService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,17 @@ package com.ruoyi.project.service; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.project.domain.GiApi; import com.ruoyi.project.domain.dto.ApiDTO; import java.util.List; import java.util.Map; public interface IApiService extends IService<GiApi>{ public GiApi getCode(String code); public List<Map<String,Object>> getListSql(String sql, ApiDTO DTO); public Object getStringSql(String sql,ApiDTO DTO); } ruoyi-project/src/main/java/com/ruoyi/project/service/impl/ApiServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,62 @@ package com.ruoyi.project.service.impl; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.project.domain.GiApi; import com.ruoyi.project.domain.dto.ApiDTO; import com.ruoyi.project.mapper.ApiMapper; import com.ruoyi.project.service.IApiService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.servlet.http.HttpServletRequest; import java.util.ArrayList; import java.util.List; import java.util.Map; @Service public class ApiServiceImpl extends ServiceImpl<ApiMapper, GiApi> implements IApiService { @Autowired ApiMapper mapper; /** * 䏻鮿¥è¯¢è¯¦ç» * @param code * @return */ public GiApi getCode(String code){ QueryWrapper <GiApi> wrapper=new QueryWrapper<>(); wrapper.eq("api_Code",code); return mapper.selectOne(wrapper); } /** * æ¥è¯¢æ°æ®å表 * @param DTO * @return */ public List<Map<String,Object>> getListSql(String sql, ApiDTO DTO) { if(DTO.getParams()!=null) { for (String key : DTO.getParams().keySet()) { sql = sql.replace("@" + key, DTO.getParams().get(key) + ""); } } return mapper.executeSql(sql); } /** * æ¥è¯¢æ°æ®å表 * @param DTO * @return */ public String getStringSql(String sql, ApiDTO DTO) { if(DTO.getParams()!=null) { for (String key : DTO.getParams().keySet()) { sql = sql.replace("@" + key, DTO.getParams().get(key) + ""); } } return mapper.getClob(sql); } } ruoyi-project/src/main/resources/mapper/project/ApiMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,7 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.ruoyi.project.mapper.ApiMapper"> </mapper> ruoyi-project/src/main/resources/mapper/project/ServiceDeathinfoMapper.xml
@@ -47,7 +47,9 @@ create_by, create_time, update_by, update_time update_time, judgment_description, ext_content from service_deathinfo </sql> ruoyi-project/src/main/resources/mapper/project/ServiceDonateorganBaseMapper.xml
@@ -33,7 +33,10 @@ create_time, update_by, update_time, EstimatedTime EstimatedTime, recordstate, file_name, ext_content from service_donateorgan_base </sql> ruoyi-project/src/main/resources/mapper/project/ServiceDonationwitnessMapper.xml
@@ -91,7 +91,7 @@ update_time, OrganDonation, OrganDonation_Other, DonationCategory donationcategory from service_donationwitness </sql> ruoyi-project/src/main/resources/mapper/project/ServiceDonationwitnessorganMapper.xml
@@ -60,7 +60,9 @@ update_by, caseno, name, update_time update_time, file_name, ext_content from service_donationwitnessorgan </sql>