墨染丶

导航

通过 Bean Searcher 在数据库中对数据的排序

 想要H5页面中实现升序,降序的排序功能  : 

  

问题  :  

  点击排序按钮只可以降序,不能升序

问题代码 : 

原因 : 

  小于0时无法排序, 原因是返回值为 int 类型, 小于0的值变为0,所以无法排序

 

但是在解决这个问题同时发现了另外一个问题, 因为要做分页处理(每页数据为15条), 数据超过15条数据时, 那么排序只会排当前页查到的数据, 前面页码数据不参与排序

所以需要在数据库中排序  而不能在 代码中排序(在代码中排序需要将所有数据全部查询出来, 数据过大时会对数据产生影响,不建议使用)

代码 : 

 1 @Secured('permitAll')
 2     def piles(Integer page, Integer size, String searchTerm, String sort, String order, Boolean online) {
 3         ...
 7         def user = securityService.currUser
 8         def piles = ChargePile.createCriteria().list {
 9             ...46         }.collect { Object[] it ->
47             def pileId = it[0]
48             def pile = ChargePile.load(pileId as Long)
49             def pileReport = PileReport.createCriteria().get {
50                 eq 'type', ModelConst.REPORT__TYPE__DATE
51                 eq 'time', TimeUtils.getYesterdayyyyyMMdd()
52                 eq 'chargePile', pile
53             } as PileReport
54             [
55                    ....
64 usedRate: pileReport ? String.format('%.2f', pileReport?.useRate * 100) : '0',          // 排序字段 65 income : pileReport ? String.format('%.2f', pileReport?.pileIncomeAmount / 100) : '0.00',   // 排序字段 66 ] 67 } as List 68 def result = [ 69 piles: listSort(piles, sort, order),    // 上述图片中方法 70 online: countPiles(ModelConst.CHARGE_PILE__STATUS__ONLINE), 71 offline: countPiles(ModelConst.CHARGE_PILE__STATUS__OFFLINE) 72 ] 73 render result as JSON

 通过 Bean Searcher 在数据库中进行排序 代码如下 : 

 1 @SearchBean(tables = '''charge_pile p     // sql语句
 2 left join pile_report r on r.charge_pile_id = p.id and r.type = 1 and r.time = :time  // on后面是对局部条件做限制
 3 left join charge_site s on p.charge_site_id = s.id 
 4 left join agent a on s.agent_id = a.id ''',
 5         joinCond = '''p.deleted = 0 and a.user_id = :userId and s.platform_id = :platformId and  // joinCond 相当于在sql中的where, where后面是对全局做限制
 6  (s.name like :search or p.pile_no like :search)''')  // 实现条件搜索(设备名称或设备编号)
 7 class PileReportBean implements BeanAware {44   ...
45 }

控制层代码 :

 1 @Secured('permitAll')  //权限 所有人可以访问
 2     def piles(Integer page, Integer size, String searchTerm, String sort, String orderMode, Boolean online) {
 3         .... 8         log.info("user:${user},")
 9         def status = online ? 1 : 2
10         def params = [                    // sql的 wehre 条件
11                 platformId : PlatformHolder.loadPlatform().id,
12                 time       : TimeUtils.getYesterdayyyyyMMdd(),
13                 userId     : user.id,
14                 status     : status,
15                 search     : '%' +searchTerm + '%',  // 搜索条件(通过前端传入)
16                 sort       : sort,            // 排序字段(前端传入)
17                 order      : orderMode,          // 排序方式(desc or asc)
18                 max        : size,
19                 offset     : page * size
20         ]
21 
22         def piles = searcher.search(PileReportBean, params)
23        ...44     }

以上 方法解决 本次所遇到的 排序问题

 



posted on 2020-05-18 11:49  墨染丶  阅读(1790)  评论(0编辑  收藏  举报