『贴代码』
PasteSpider
PasteForm
精选作品
优选问答
成长笔记
【本期话题】更多
                                    我们在开发中经常遇到对方的接口请求有频率限制,比如当前接口每秒的请求不能大于100,不能大于1000,对于这样的,我们作为请求方,如何做限定?
                    
PasteForm框架之添加一个新的查询项就是这么简单
尘埃 2025-04-11 1755 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 1755 0
快捷注册
用户问答更多
PasteForm,神奇了啊!都说低代码,低代码,那个是对于非开发者来说的,感觉PasteForm就是开发者的低代码啊!只要配置好Model,就有对应的CRUD操作,还带一些逻辑,和生成代码是两码事了!!!问题来了,有什么局限性,或者适用哪些场景?
07月份版本的内存占用比以前大了,也没有泄漏,啥情况?以前200MB,这个版本能到300MB
文档中的组织归属有些问题,啥时候看看,更新更新!
  • 已经升级了,主要是left join的查询的时候没有过滤,其实这个问题,多租户也是一样的!

最新动态
  • 59.****.252 正在查看 主页pasteform !
  • 59.****.198 正在查看 主页pastespider !
  • 59.****.252 正在查看 主页pastespider !
  • 59.****.198 正在查看 主页talk !
  • 59.****.198 正在查看 主页pastespider !
  • 66.****.137 正在查看 PasteSpider中关于Nginx的配置,安装PasteSpider之后查阅 !
  • 92.****.216 正在查看 PasteForm中如何处理批量操作? !
  • 37.****.128 正在查看 PasteForm中如何处理批量操作? !
  • 59.****.210 正在查看 主页pastespider !
  • 59.****.210 正在查看 主页pastespider !
  • 59.****.210 正在查看 主页pastespider !
欢迎加入QQ讨论群 296245685 [PasteSpider]介绍 [PasteForm]介绍 @2022-2023 PasteCode.cn 版权所有 ICP证 闽ICP备2021013869号-2