06_30

1.实现消费记录报告部分

期望获得
//消费数据,数据库获取
Totalcost: “10000”,//总支出,数据库获取
cafeprice:“100”,//食堂花费,数据库获取
cafeovflow: “超过”,//取值为 超过或者低于,从数据库获取。
cafepercente:“90”,//取值为百分比,数据库获取

遇到的第一个问题就是,之前传入的参数是按照字符串形式传入的,调用sum接口他直接忽略所有不为数字类型的值,返回参数为0

这里也找了很久的官方文档,试图找到可以把整个数据库数据类型调整的借口,或者能根据查询到的值利用praserFloat进行转化,
想查看monogdb的相关文档进行处理,但是微信的接口不大一样,参考有的文章又说使用matchproject,然后结合foreach,但还是不行,只能使用笨办法,直接重新导入整个数据库,又浪费几个小时,头大。

正式开始,之前的试探monogdb的过程中,理清了project和 match
这里也利用这两个模块进行筛选数据,同时,对于group,_id设置的是你想要聚类的分组,没有则设置为null,这里统计全部时设置为_id : null,对每个同学进行计算,设置为_id : '$uid',后面利用sum进行累加统计。

同时会遇到小程序云函数中用group分组查询,只能查询20条的问题。
这里参考链接调整limit开放group分组查询只有20条的问题
使用group 获得全部用户数量,相除得到百分比

1.1 云函数端
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init()

const db = cloud.database()
const _ = db.command

// 云函数入口函数
exports.main = async (event, context) => {
  
  const $ = db.command.aggregate
  //指定学期,指定学号消费总额
  const total_consumption = await db.collection('consumption').aggregate().match({
    uid:event.uid,
    学期 : event.学期
  }).group({
    _id : null,
    totalprice : $.sum('$account')
  }).end()
  //指定学期,指定学号食堂消费总额
  const restaurant_consumption = await db.collection('consumption').aggregate().match({
    uid:event.uid,
    学期 : event.学期,
    title : "食堂"
  }).group({
    _id : null,
    totalprice : $.sum('$account')
  }).end()

  const total1 = total_consumption.list[0].totalprice
  console.log(total1)
  const total2 = restaurant_consumption.list[0].totalprice
  
  //查询小于或等于该同学食堂消费总额的人数
  const smallerNum = await db.collection('consumption').aggregate().match({
    学期 : event.学期,
    title : "食堂"
  }).limit(1000000).group({
    _id : '$uid',
    totalprice: $.sum('$account')
  }).match({
    totalprice:_.lte(total2)
  }).count('超过的同学数目').end()

  const total3 = smallerNum.list[0].超过的同学数目
  
  var tasks = {'total1':total1,'total2':total2,'smaller':total3}
  return tasks
}

在云函数端加入函数,将浮点数转化为百分数字符串,由于前端界面已设置%,这里加上注释

/*小数转百分数*/
/*Number()数据类型转换,指定截取转换后的小数点后几位(四舍五入)*/
function toPercent(point){
  var str=Number(point*100).toFixed(2);
  // str+="%";
  return str;
}
1.2结果:
1.3

对接所有云函数时,之前查询集合都写在云函数内部,现在需要全体更改test->uid

1.4 封装一个函数用于合并json对象

放在app.js文件中

extend:function(data,dataExtend){
    var res={};
    for (var key in data) {
      res[key] = data[key];
    } 
    for (var key in dataExtend) {
      res[key] = dataExtend[key]; 
    } 
    return res;
  },

小程序端调用获得图书记录

callFunction3:function(){
    console.log("Button is clicked")
    var that = this
    //这里默认学期2,学号97
    wx.cloud.callFunction({
      name:"score",
      data:{
        uid : '1',
        学期:'2'
      },

      complete: res => {
        console.log('callFunction test result: ', res)
        // var data = this.extend(res.result,{token: this.data.cardInfo});
        var data = this.extend(res.result,this.data.cardInfo);
        console.log('data',data)
        that.setData({
          cardInfo:data
        })
        console.log('cardInfor',this.data.cardInfo)
      }
    })
  }
1.5 一时兴起,对接了消费记录部分
#onshow()函数内添加,基本和前面的代码区别不大,修改uid即可
var uid = wx.getStorageSync('uid');
      wx.cloud.callFunction({
        name:"consumption",
        data:{
          uid : uid
        },
        complete: res => {
          console.log('callFunction test result: ', res)
          that.setData({
            // title:res.result.data[0]['title']
            items:res.result.data
          })
          console.log('title',this.data.items)
        }
      })
#onLoad()下
//对接数据
    var uid = wx.getStorageSync('uid');
    var that = this
    //这里默认学期2
    wx.cloud.callFunction({
      name:"score",
      data:{
        uid : uid,
        学期:'2'
      },

      complete: res => {
        console.log('callFunction test result: ', res)
        // var data = this.extend(res.result,{token: this.data.cardInfo});
        var data = this.extend(res.result,this.data.cardInfo);
        console.log('data',data)
        that.setData({
          cardInfo:data
        })
        console.log('cardInfor',this.data.cardInfo)
      }
    })

效果如下:

写到凌晨4点可还行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值