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

--------------------------------------------------------------------------------------------------------------

PasteForm的升级版PasteApeart,享受极致简洁的框架的魅力,点击查看文档

--------------------------------------------------------------------------------------------------------------

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

添加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上,
  • 提交的时候用什么格式,或者是加了哪个参数,返回的数据格式
  • 管理员重新刷新后,可能读取不到最新的版本
  • 如果新加的字段没有做版本兼容处理,管理员在使用旧版本提交的时候还可能引发意外错误
  • 还得提交管理端页面文件到服务器,也就是发布管理端
  • 后续如果改动,比如说给时间默认值等,你还得再来一个流程

    总结

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

衍生问题

  • 如果我需要给时间一个默认值,比如默认查询当月(也就是当月01号到今天的数据)
  • 新的需求,说要改成必填,也就是查询的时候日期必须填写
  • 加入产品突然提交了新加10个查询项
    以上新的需求,你要如何处理???
评论列表
尘埃
69 1886 3
快捷注册
用户问答更多
PasteApeart和PasteForm如何选择?
  • 不用选,后面都是PasteApeart,他们其实是一个东西

PasteApeart中有多层级继承的,表单中的字段排列顺序有什么规则?
  • 看版本,PasteApeart.Helper 26.9.2之后,就按照基类前面的顺序了,也符合阅读顺序,当然你可以使用PasteSort再次改变他!

PasteForm,神奇了啊!都说低代码,低代码,那个是对于非开发者来说的,感觉PasteForm就是开发者的低代码啊!只要配置好Model,就有对应的CRUD操作,还带一些逻辑,和生成代码是两码事了!!!问题来了,有什么局限性,或者适用哪些场景?
  • 1.语言吧,这本身只是一个开发思想,其实其他语言也可以用,不过最优雅实现的还是.NET

    2.特别适用于需要表单,表格的系统,所以哪些EMS,CRM,ERP等都合适

    3.扩展,比如这个思想,你也可以应用于C/S,理论上也是可以的

    4.这个主要针对的是管理端,附带UI的CRUD,也就是说对于业务代码,是没影响的!

    5.可能入门会麻烦点,毕竟有接近100个PasteXXXX特性要了解,幸运的是都是Paste开头,官方的也支持,比如MaxLength,Required等!

最新动态
  • 142.****.82 正在查看 文章列表页 !
  • 185.****.13 正在查看 关于PasteSpiderV2版本升级V5版本后,部署的服务会走一遍扩容的说明 !
  • 40.****.3 正在查看 12306班次筛选座位逻辑 !
  • 114.****.237 正在查看 Document:spider !
  • 52.****.208 正在查看 使用Obfuscar混淆(加密)你的程序源码并一键发布! !
  • 218.****.141 正在查看 PasteApeart框架介绍,PasteApeart为啥说是敏佳开发天花板,看这篇就够了 !
  • 216.****.137 正在查看 使用PasteSpider实现CI/CD持续部署,类似Jenkins的功能,让你的2G服务器也可以飞起 !
  • 36.****.7 正在查看 主页pastespider !
  • 122.****.51 正在查看 有哪些高大上的词语,你有没有被虎得一愣一愣得,一起来看看AI的吐槽! !
  • 36.****.208 正在查看 PasteApeart框架介绍,PasteApeart为啥说是敏佳开发天花板,看这篇就够了 !
  • 40.****.40 正在查看 使用Obfuscar混淆(加密)你的程序源码并一键发布! !
欢迎加入QQ讨论群 296245685 [PasteSpider]介绍 [PasteForm]介绍 @2022-2023 PasteCode.cn 版权所有 ICP证 闽ICP备2021013869号-2