『贴代码』
PasteSpider
PasteForm
精选作品
优选问答
成长笔记
【本期话题】更多
                                    我们在开发中经常遇到对方的接口请求有频率限制,比如当前接口每秒的请求不能大于100,不能大于1000,对于这样的,我们作为请求方,如何做限定?
                    
PasteForm框架之添加一个新的查询项就是这么简单
尘埃 2025-04-11 1764 68 0
在管理端开发中,添加一个查询是很常见的需求,比如有新的需求说要基于日期区间查询用户,也就是这一段时间注册的用户列表,一起来看看PasteForm实现这个功能是如何操作的!

更多特性PasteForm的介绍,请前往PasteForm操作文档查看 PasteForm操作文档与介绍


图片alt
如上图,在表格中,我们常用的就是需要添加搜索项,也就是检索项
比如我要加一个时间区间检索项,检索注册的时间区间
那使用PasteForm框架需要几个步骤呢?

添加QueryDto

首先得确定这个UserInfo的检索Model,也就是从这里查看
图片alt
使用PasteBuilder模式生成规则是InputQueryXXXX
如上图所示,也就是InputQueryUserInfo
我们转到这个Model添加时间字段

    ///<summary>
    /// 查询
    ///</summary>
    public class InputQueryUserInfo : InputSearchBase
    {
        /// <summary>
        /// 注册区间
        /// </summary>
        [ColumnDataType("daterange", "sdate", "edate")]
        public DateTime? sdate { get; set; }

        /// <summary>
        /// 日期区间
        /// </summary>
        public DateTime? edate { get; set; }

        /// <summary>
        /// 邮箱
        /// </summary>
        public string email { get; set; }
    }

如上所示,我添加了2个字段sdate和edate,为啥要设置为nullable格式呢?因为可以不输入时间,也就是忽略时间检索
我给他加了一个特性daterange,也就是使用时间区间,js会自动把尾巴时间隐藏,如上图,时间对是sdate edate
注意这里的信息涉及了是否可以为null,也就是是否可不填,然后是格式等 其实还包括了比如上面的注册区间

查询关联

上面添加好了后,我们需要把他和查询关联起来,回到刚刚的代码,添加如下

        /// <summary>
        /// 获取
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpGet]
        public async Task<PagedResultDto<UserInfoListDto>> Page([FromQuery] InputQueryUserInfo input)
        {
            var _query = _dbContext.UserInfo.Where(t => 1 == 1);
            var _pagedto = new PagedResultDto<UserInfoListDto>();
            if (input.page == 1)
            {
                _pagedto.TotalCount = await _query.CountAsync();
            }
            var dataList = await _query
                .WhereIf(!String.IsNullOrEmpty(input.word), x => x.UserName.Contains(input.word) || x.Desc.Contains(input.word))
                .WhereIf(input.sdate != null, x => input.sdate <= x.CreateDate && x.CreateDate < input.edate)
                .WhereIf(!string.IsNullOrEmpty(input.email),x=>x.Email == input.email)
                .OrderByDescending(x => x.Id)
                .Page(input.page, input.size)
                .AsNoTracking()
                .ToListAsync();
            if (dataList == null || dataList.Count == 0)
            {
                throw new PasteCodeException("没有查询到数据", 204);
            }
            var temList = ObjectMapper.Map<List<UserInfo>, List<UserInfoListDto>>(dataList);
            _pagedto.Items = temList;
            return _pagedto;
        }

注意看这一行

                .WhereIf(input.sdate != null, x => input.sdate <= x.CreateDate && x.CreateDate < input.edate)

其实上面还是有优化空间的哈,理论上时间应该写第一行,然后是没有对sdate和edate做严格校验!

重新发布

上面修改完成后,应该是没有问题的,这么简单的功能,那么就是发布了,右键发布
等待发布完成后,打开PasteSpiderFile
然后选择项目,点击一键发布
图片alt
主要看选择的项目是否正确,然后就是等待webhook通知了!
等到接收到发布成功的通知后(我是配置到钉钉通知,比如)
图片alt

查看新版

我们直接在刚刚的页面刷新下,就可以看到如下
图片alt
是不是很神奇,只是刷新下就可以看到新添加的了,而且你发现没有,只有一个输入框!!!
点击看看
图片alt
直接就是一个时间区间选择器!
图片alt
查询后直接提示没有数据,因为我这个区间确实没有注册账号,忽略表格的历史数据哈,这个我没做204清空处理
添加一个日期区间查询就这么完成了!!!

过程回顾

回顾下整个过程,也就是在

  • InputQueryUserInfo中添加了2个字段sdate和edate,然后在sdate上添加了一个特性daterange
  • 在UserInfoAppService中的Page中添加了对sdate的查询添加
  • 然后重新发布api这个服务
  • 刷新管理页面,然后日期区间的这个搜索项就出来了,而且使用了下还可以工作!
    注意啦 注意啦
    以上的步骤是不是少了什么?
    你们的操作过程应该不是这样的吧,我猜下应该还加了以下步骤
  • 和前端开发人员说,这个表添加2个字段,然后要写成时间区间的模式,最后提交到api中,按照….的格式提交,估计还得搞一个文档给对方
  • 前端开发改好后,还得部署管理端的页面

是不是少了前端这一大块
!!!事实上不止!!!

  • 写文档,你不能直接和前端说吧,你得写文档,哪怕是自动生成的,你也得给前端说下要如何实现,
  • 提交到哪个api或者说在哪个api上,
  • 提交的时候用什么格式,或者是加了哪个参数,返回的数据格式
  • 管理员重新刷新后,可能读取不到最新的版本
  • 如果新加的字段没有做版本兼容处理,管理员在使用旧版本提交的时候还可能引发意外错误
  • 还得提交管理端页面文件到服务器,也就是发布管理端
  • 后续如果改动,比如说给时间默认值等,你还得再来一个流程

    总结

    使用PasteForm在新增查询项的时候就是这么优雅,只需要后端自己默默干活就行了,而且非常简单即可实现新的查询支持!

衍生问题

  • 如果我需要给时间一个默认值,比如默认查询当月(也就是当月01号到今天的数据)
  • 新的需求,说要改成必填,也就是查询的时候日期必须填写
  • 加入产品突然提交了新加10个查询项
    以上新的需求,你要如何处理???
评论列表
尘埃
68 1764 0
快捷注册
用户问答更多
PasteForm,神奇了啊!都说低代码,低代码,那个是对于非开发者来说的,感觉PasteForm就是开发者的低代码啊!只要配置好Model,就有对应的CRUD操作,还带一些逻辑,和生成代码是两码事了!!!问题来了,有什么局限性,或者适用哪些场景?
07月份版本的内存占用比以前大了,也没有泄漏,啥情况?以前200MB,这个版本能到300MB
  • 应该和之前的PasteForm引入有关,之前的版本引入了大量的API,看看10月份或者11月份的版本,新版本的PasteForm极大的优化了API接口量,可以说直接从4N优化到了N个(N代表数据表数量)

文档中的组织归属有些问题,啥时候看看,更新更新!
  • 已经升级了,主要是left join的查询的时候没有过滤,其实这个问题,多租户也是一样的!

最新动态
  • 81.****.41 正在查看 PasteSpider升级服务器上的一个服务或集群服务 !
  • 101.****.198 正在查看 贴代码框架PasteForm特性介绍之mark(标签,书签,字段说明)的支持 !
  • 116.****.142 正在查看 PasteForm中如何处理批量操作? !
  • 66.****.14 正在查看 文章列表页 !
  • 113.****.18 正在查看 正在查看笔记:35 的详细信息 Page:1 ! !
  • 113.****.87 正在查看 PasteSpiderV5版本更新内容一览 !
  • 82.****.250 正在查看 正在查看笔记:38 的详细信息 Page:1 ! !
  • 1.****.28 正在查看 框架PasteForm实际开发案例,支持多级对象的表单看看有多简单只要几个特性即可!(1) !
  • 40.****.15 正在查看 文章列表页 !
  • 121.****.118 正在查看 正在查看笔记:36 的详细信息 Page:1 ! !
  • 113.****.227 正在查看 贴代码框架PasteForm特性介绍之select,selects,lselect和reload !
欢迎加入QQ讨论群 296245685 [PasteSpider]介绍 [PasteForm]介绍 @2022-2023 PasteCode.cn 版权所有 ICP证 闽ICP备2021013869号-2