Example #1
0
File: app.js Project: xzhuah/Forest
app.get('/storybyuser/:userid',function(req,res){//OK 2016/4/16
  var querystoryidbyuser=req.params.userid;
  var findStoryIdByUserID=new AV.Query(AV.User);
  var innerQuery = new AV.Query('Story');
  innerQuery.include('theme');
  innerQuery.include('creator');
  var stories = [];
  var themeNames = [];
  var creators = [];
  findStoryIdByUserID.get(querystoryidbyuser).then(function(obj){
    innerQuery.find().then(function(results) {
      results.map(function(result) {
        if (result.get('followUser') != undefined && result.get('followUser').indexOf(querystoryidbyuser) > -1) {
          themeNames.push(result.get('theme').get('name'));
          creators.push({
            id: result.get('creator').id,
            username: result.get('creator').get('username')
          });
          stories.push(result);
        }
      });
      res.json({success: true, story: stories, themeNames: themeNames, creators: creators});
    });
  },function(error){
     res.json({success: false, error: error});
  });
});
Example #2
0
 promise = promise.then(function() {
   var query = new AV.Query(Order);
   query.equalTo('orderNumber', charge.order_no);
   query.include('route');
   query.include('user');
   return query.find();
 });
AV.Cloud.define("queryNetgativeMember", function(request, respond)
{
  var People = AV.Object.extend("People");
  var query = new AV.Query(People);
  query.include("roomRef");
  query.include("accountRef");

  query.find({
    success: function (results) {

      var netgativeUserList = [];

      for(var i = 0; i < results.length ; i++)
      {
        var people = results[i];
        var hasAssist = people.get("hasAssist");
        var outDate = people.get("outDate");
        var runningBalance = people.get('accountRef').get("runningBalance");

        if(runningBalance >= 0)
        {
          continue;
        }

        var roomPrice = 0;
        if(hasAssist )
        {
          roomPrice = people.get("roomRef").get("assistPrice");
        }else {
          roomPrice =  people.get("roomRef").get("nonAssistPrice");
        }

        if(outDate)
        {
          //if outed, even -1 need to showup
          netgativeUserList.push(people);
        }
        else {
          console.log("query netgative member balanace: " + runningBalance + " room price: " + roomPrice );
          //not yet out, show only netgative 2 month
          if(Math.abs(runningBalance) >= roomPrice *2)
          {
            netgativeUserList.push(people);
          }
        }

      }

      respond.success(netgativeUserList);
    },
    error: function(error)
    {
      respond.error(error.message);
    }
  });

});
Example #4
0
function getAgentCommissionRuleMapList(skip, limit) {
	var agentCommissionRuleMapQuery = new AV.Query(AgentCommissionRuleMap);
	if (skip != null) {
		agentCommissionRuleMapQuery.skip(skip);
	}
	if (limit != null) {
		agentCommissionRuleMapQuery.limit(skip);
	}
	agentCommissionRuleMapQuery.equalTo('isDeleted', false);
	agentCommissionRuleMapQuery.include('source');
	agentCommissionRuleMapQuery.include('agentCommissionRule');
	return agentCommissionRuleMapQuery.find();
}
Example #5
0
function getTransactionQueryList() {
	var transactionQueryQuery = new AV.Query(TransactionQuery);

	transactionQueryQuery.equalTo('isDeleted', false);
	transactionQueryQuery.notEqualTo('state', 'finished');

	transactionQueryQuery.include('user');
	transactionQueryQuery.include('order');
	transactionQueryQuery.include('order.route');
	transactionQueryQuery.include('order.route.src');
	transactionQueryQuery.include('order.route.dest');

	return transactionQueryQuery.find();
}
Example #6
0
router.post('/signIn', function(req, res) {
	var scheduleQuery = new AV.Query(Schedule);
	var code = req.body.code;
	var password = req.body.password;

	scheduleQuery.include('route');
	scheduleQuery.get(req.body.scheduleId)
	.then(function(result) {
		if (result.get('isFinished') == true) {
			res.send({status: 'error', data: '不存在该班次'});
			return;
		}

		if (code == result.get('code') && password == result.get('password')) {
			req.session.check = true;

			setTimeout(function() {		//clean the session, for sureity
				req.session.check = false;
			}, limitSignInTime);

			res.send({status: 'success'});
		}
		else {
			res.send({status: 'error', data: '密码错误'});
		}
	}, function(err) {
		res.send({status: 'error', data: 'can\'t found'});
	});
});
Example #7
0
File: app.js Project: xzhuah/Forest
app.get('/beststory/:topnum',function(req,res){//OK 2016/4/16
  var topnum = req.params.topnum;
  var findStorybylikerank = new AV.Query('Story');
  var creators = [];
  findStorybylikerank.include('creator');
  findStorybylikerank.find().then(function(results) {
    results.sort(function(x, y) {
      if (x.get('followUser') != undefined && y.get('followUser') != undefined && x.get('followUser').length > y.get('followUser').length) {
        return -1;
      }
      if (x.get('followUser') != undefined && y.get('followUser') != undefined && x.get('followUser').length < y.get('followUser').length) {
        return 1;
      }
      return 0;
    });
    if (topnum > results.length) {
      res.json({success: false, error: "topnum too large"});
    }
    var bestStory = results.slice(0, topnum);
    bestStory.map(function(story) {
      creators.push(
        {
          id: story.get('creator').id,
          username: story.get('creator').get('username')
        }
    );
    });
    res.json({success: true, bestStory: bestStory, creators: creators});
  }).catch(function(error) {
    res.json({success: false, error: error});
  });
});
Example #8
0
router.get('/', function(req, res, next) {
  var status = 0;
  var errMsg = null;
  if (req.query) {
    status = req.query.status || 0;
    errMsg = req.query.errMsg;
  }
  var query = new AV.Query(Record);
  query.equalTo('status', parseInt(status));
  query.include('author');
  query.descending('updatedAt');
  query.limit(50);
  query.find({
    success: function(results) {
      res.render('records', {
        title: 'Record 列表',
        user: AV.User.current(),
        records: results, 
        status: status,
        errMsg: errMsg
      });
    },
    error: function(err) {
      next(err);
    }
  })
});
Example #9
0
function getAgentList(skip, limit) {
	var userQuery = new AV.Query(User);

	if (skip != null) {
		userQuery.skip(skip);
	}
	if (limit != null) {
		userQuery.limit(limit);
	}
	userQuery.equalTo('isDeleted', false);
	userQuery.equalTo('isAgent', true);

	userQuery.include('agentInfo');
	userQuery.include('agentInfo.agentSource');
	userQuery.include('agentInfo.agentCommissionRule')

	return userQuery.find();
}
Example #10
0
router.get("/recommend/:rid", restrict, function(req, res) {
    var query = new AV.Query(Recommend);
    query.include(['user','image']);
    query.get(req.params.rid).then(function(r) {
        //console.log(r)
        res.render('manage-recommend-detail', {
            obj: r
        })
    }, function(error) {
        console.dir(arguments)
        res.send(error)
    })
})
Example #11
0
function getOrderP(orderId) {
	var order = null;
	var coupons = null;
	var passengers = null;
	var tickets = null;
	var transactions = null;
	var query = new AV.Query(Order);
	query.include(["route.source", "route.dest"]);
	return query.get(orderId).then(function (result) {
		order = result;
		if(order.get('isDeleted')){
			return AV.Promise.error('该订单已删除');
		}
		return order.relation('coupons').query().find();
	}).then(function (results) {
		coupons = results;
		return order.relation('passengers').query().find();
	}).then(function (results) {
		passengers = results;
		var promise = AV.Promise.as();
		if (order.get('state') != 'unpay' && order.get('state') != 'paying') {
			promise = promise.then(function () {
				var query = new AV.Query(Transaction);
				query.equalTo('order', order);
				return query.find();
			}).then(function (results) {
				transactions = results;
			});
			if (order.get('state') != 'cancelling' && order.get('state') != 'cancelled') {
				promise = promise.then(function () {
					var query = order.relation('tickets').query();
					query.include('schedule');
					return query.find();
				}).then(function (results) {
					tickets = results;
				});
			}
		}
		return promise.then(function () {
			return new AV.Promise(function (resolve, reject) {
				resolve({
					order: order,
					passengers: passengers,
					coupons: coupons,
					tickets: tickets,
					transactions: transactions
				});
			});
		});
	});
}
Example #12
0
router.get("/recommend/list", restrict, function(req, res) {
    var query = new AV.Query(Recommend);
    query.include(['user','image']);
    query.find({
        success: function(data) {
            res.render('manage-recommend', {
                postList: data
            })
        },
        error: function (data, err) {
            console.dir(arguments)
        }
    })
})
Example #13
0
//删除过期未支付订单
function deleteTimeOutOrderP() {
	var query = new AV.Query(Order);
	var routesToUpdate = [];
	query.equalTo('isDeleted', false);
	query.equalTo('state', 'unpay');
	query.include('route');
	return query.find().then(function (orders) {
		if (orders.length != 0) {
			console.log('查找到订单数 :' + orders.length);
		}
		var now = moment();
		var promises = [];
		orders.forEach(function (order) {
			if ((moment(order.createdAt).add(10, 'm')).isBefore(now)) {
				var promise = order.relation('coupons').query().find();
				promise = promise.then(function (coupons) {
					coupons.forEach(function (coupon) {
						coupon.set('order', null);
					});
					if (coupons.length != 0) {
						order.relation('coupons').remove(coupons);
					}
					order.set('isDeleted', true);
					return order.save();
				});
				promises.push(promise);
				console.log('删除订单:' + order.id);
				console.log(order.createdAt);
				//将路线加入待更新路线数组中,剔除重复的
				var contain = false;
				for(var i =0;i<routesToUpdate.length;i++){
					if(routesToUpdate[i].id == order.get('route').id){
						contain = true;
						break;
					}
				}
				if(!contain){
					routesToUpdate.push(order.get('route'));
				}
			}
		});
        timerPromisefy(10000).then(function(){
            //更新各路线人数
            routesToUpdate.forEach(function(route){
                routeMethod.recountPassengerNumber(route);
            });
        })
		return AV.Promise.all(promises);
	});
}
Example #14
0
function listOrdersP(user, skip, limit, state) {
	var query = new AV.Query(Order);
	query.equalTo('user', user);
	query.equalTo('isDeleted', false);
	query.descending('createdAt');
	query.include(["route.source", "route.dest"]);
	if (skip != null) {
		query.skip(skip);
	}
	if (limit != null) {
		query.limit(limit);
	}
	if (state != null) {
		query.equalTo(state);
	}
	return query.find();
}
AV.Cloud.afterSave("Payment", function(request, response) {
  var owner = request.object.get("owner");

  var PeopleClass = AV.Object.extend("People");
  var query = new AV.Query(PeopleClass);
  query.include('accountRef');
  query.get(owner.id, {
    success: function (targetPeople) {
      refreshRunningBalance(targetPeople,
        function() {
        },
        function(error)
        {
          console.log(error.message + 'Testing message');
        });

    }
  });
});
Example #16
0
				friendQuery.find().then(function(results){
					var friendArray = [];
					var y=0;
					for(var i=0; i<results.length;i++){
						var user = new User();
						user.id = results[i].get('friendUserId');
						friendArray[y] = user;
						y=y+1;
					}

					//response.success({'results':friendArray});

					var location = userDynamicData.get('location');
					var userListQuery = new AV.Query(UserDynamicData);
					userListQuery.near('location', location);
					userListQuery.notContainedIn('datingStatus',[2,3,4]);
					userListQuery.notContainedIn('objectId',[userDynamicData.id]);
					userListQuery.notContainedIn('userId', friendArray);
					userListQuery.equalTo('onlineStatus',true);
					userListQuery.limit(10);
					userListQuery.include("userId");
					userListQuery.descending('reportedScore');
					userListQuery.find().then(function(results){
					
						var userArray = [];
					    var x=0;
					    for(var i=0;i<results.length;i++){
					        var distance = location.kilometersTo(results[i].get("location"));
					        if(results[i].get("userId")){
	    				        results[i]=results[i].get("userId");
	    				        results[i].add("distance",distance);
	    				        userArray[x]=results[i];
	    				        x=x+1;
					        }
					    }
					    var finalResult = {'code':200,'results':userArray};
						response.success(finalResult);
					},
					function(error){
						response.error({"code":500, "result":"查询用户列表(step=2), errormsg:" + error.message});
					});
				},
            success: function (list) {

              request.object.set('paymentDetail', paymentDetail);
              request.object.save().then(function(obj) {
              });

              var PeopleClass = AV.Object.extend("People");
              var query = new AV.Query(PeopleClass);
              query.include('accountRef');
              query.get(owner.id, {
                success: function (targetPeople) {
                  refreshRunningBalance(targetPeople,
                    function () {
                    },
                    function (error) {
                      console.log(error.message);
                    });

                }
              });

            },
Example #18
0
//快速查询订单详细信息
function getOrderFastP(orderId) {
	var order = null;
	var coupons = null;
	var passengers = null;
	var tickets = null;
	var transactions = null;
	var query = new AV.Query(Order);
	query.include(["route.source", "route.dest"]);
	return query.get(orderId).then(function (result) {
		order = result;
		var promises = [];
		promises.push(order.relation('coupons').query().find());
		promises.push(order.relation('passengers').query().find());
		var ticketQ = order.relation('tickets').query();
		ticketQ.include('schedule');
		promises.push(ticketQ.find());
		var transactionQ = new AV.Query(Transaction);
		transactionQ.equalTo('order', order);
		promises.push(transactionQ.find());
		return AV.Promise.when(promises).then(function (couponsR, passengersR, ticketsR, transactionsR) {
			coupons = couponsR;
			passengers = passengersR;
			tickets = ticketsR;
			transactions = transactionsR;
			return new AV.Promise(function (resolve, reject) {
				resolve({
					order: order,
					passengers: passengers,
					coupons: coupons,
					tickets: tickets,
					transactions: transactions
				});
			});
		});
	});
}
    success: function(object) {
      //no same name or is update mode
      if(!object || !request.object.isNew())
      {
        //passed name validation
        if(objectId)
        {
          //update mode
          var queryPeople = new AV.Query(People);
          queryPeople.include("roomRef");
          queryPeople.get(objectId, {
            success: function (targetPeople) {

              console.log('before save people query success');
              var oldOutDate = targetPeople.get('outDate');

              console.log('before save out date: ' + newOutDate + ' object: '+ objectId );

              if (newOutDate && !oldOutDate) {
                console.log('need Calc Rent outdate: ' + newOutDate);
                //update mode && outDate is updated
                var newOutDateYear = moment(newOutDate).year();
                var newOutDateMonth = moment(newOutDate).month();
                var currentYear= moment().year();
                var currentMonth= moment().month();

                if(newOutDateYear != currentYear || currentMonth != newOutDateMonth)
                {
                  response.error('離開日期月份一定要在本月份內');
                }
                else {
                  AV.Cloud.run("memberExitCalculation", { objectId:objectId}).then(function(result) {
                    console.log('memberExitCalculation success');
                  }, function(error) {
                    console.log('memberExitCalculation failure');
                  });

                  response.success();
                }

              }
              else if(!newOutDate && oldOutDate)
              {
                response.error('不允許移除離開日期');
              }
              else {
                response.success();

              }

            },
            error: function(error) {
              response.error(error.message);
            }
          });
        }
        else {
          //create mode
          response.success();
        }

      }
      else {
        var errormsg = peopleName + ' 已經存在, 請使用其它名稱';
        response.error(errormsg);
      }
    },
Example #20
0
exports.kongcv_put_trade_billdata = function(request) {
    console.log("invoke put trade_billdata");

    console.log("trade_billdata:", request);

    var bill_id = request.bill_id;
    if (typeof(bill_id) == "undefined" || bill_id.length === 0) {
        _kongcv_insert_trade_log(bill_id, request, ERROR_MSG.ERR_BILL_ID_MUST_EXIST);
        return {"result":"error_msg","msg":ERROR_MSG.ERR_BILL_ID_MUST_EXIST}
    }

    var money = request.money;
    if (typeof(money) == "undefined" || money.length === 0) {
        _kongcv_insert_trade_log(bill_id, request, ERROR_MSG.ERR_MONEY_MUST_EXIST);
        return {"result":"error_msg","msg":ERROR_MSG.ERR_MONEY_MUST_EXIST}
    }

    var pay_tool = request.pay_tool;
    if (typeof(pay_tool) == "undefined" || pay_tool.length === 0) {
        _kongcv_insert_trade_log(bill_id, request, ERROR_MSG.ERR_PAY_TOOL_MUST_EXIST);
        return {"result":"error_msg","msg":ERROR_MSG.ERR_PAY_TOOL_MUST_EXIST}
    }

    var pay_id = request.pay_id;
    if (typeof(pay_id) == "undefined" || pay_id.length === 0) {
        _kongcv_insert_trade_log(bill_id, request, ERROR_MSG.ERR_PAY_ID_MUST_EXIST);
        return {"result":"error_msg","msg":ERROR_MSG.ERR_PAY_ID_MUST_EXIST}
    }

    var notify_id = request.notify_id;
    if (typeof(notify_id) == "undefined" || notify_id.length === 0) {
        _kongcv_insert_trade_log(bill_id, request, ERROR_MSG.ERR_NOTIFY_ID_MUST_EXIST);
        return {"result":"error_msg","msg":ERROR_MSG.ERR_NOTIFY_ID_MUST_EXIST}
    }

    var pay_type = request.pay_type;
    if (typeof(pay_type) == "undefined" || pay_type.length === 0) {
        _kongcv_insert_trade_log(bill_id, request, ERROR_MSG.ERR_PAY_TYPE_MUST_EXIST);
        return {"result":"error_msg","msg":ERROR_MSG.ERR_PAY_TYPE_MUST_EXIST}
    }
    
    var mode = request.mode;
    if (typeof(mode) == "undefined" || mode.length === 0) {
        _kongcv_insert_trade_log(bill_id, request, ERROR_MSG.ERR_MODE_MUST_EXIST);
        return {"result":"error_msg","msg":ERROR_MSG.ERR_MODE_MUST_EXIST}
    }
    if ("cb" === mode) {
        console.log("mode change:", mode);
        mode = "curb";
    }
    if ("cm" === mode) {
        console.log("mode change:", mode);
        mode = "community";
    }

    var coupon = request.coupon;
    var coupon_id = request.coupon_id;

    var kongcv_trade_bill_obj = new kongcv_trade_bill_cls();
    kongcv_trade_bill_obj.id = bill_id;
    
    var bill_query = new AV.Query(kongcv_trade_bill_cls);
    bill_query.include("trade.property");
    bill_query.get(bill_id, {
        success : function(bill_obj) {
            var trade_obj = bill_obj.get("trade");
            var trade_coupon = trade_obj.get("coupon");
            var trade_pay_tool = trade_obj.get("pay_tool");
            var trade_handsel_state = trade_obj.get("handsel_state");
            var trade_state = trade_obj.get("trade_state");

            if (typeof(trade_state) != "undefined") {
                if (1 === trade_state) {
                    _kongcv_insert_trade_log(bill_id, request, ERROR_MSG.ERR_PAY_TRADE_FINISH);
                    return;
                }
            }
            else {
                console.log("kongcv_put_trade_billdata",ERROR_MSG.ERR_SYSTEM_TRADE);
            }

            if (typeof(trade_handsel_state) != "undefined") {
                if (1 === trade_handsel_state) {
                    if ("handsel" === pay_type) {
                        _kongcv_insert_trade_log(bill_id, request, ERROR_MSG.ERR_PAY_TYPE_FORMAT);
                    }
                }
            }
            else {
                console.log("kongcv_put_trade_billdata",ERROR_MSG.ERR_SYSTEM_TRADE);
            }

            if (typeof(coupon) != "undefined") {
                if (coupon > 0) {
                    if (trade_coupon > 0) {
                        _kongcv_insert_trade_log(bill_id, request, ERROR_MSG.ERR_COUPON_ONLY_ONE);
                    }
                        
                    trade_obj.set("coupon", coupon);
                    money += coupon;
                }
                
                if (typeof(coupon_id) != "undefined" && coupon_id.length > 0) {
                    _kongcv_remove_coupon(coupon_id, bill_id, request);
                }
            }
            else {
                console.log("kongcv_put_trade_billdata",ERROR_MSG.ERR_SYSTEM_TRADE);
            }

            if (typeof(trade_pay_tool) != "undefined" && trade_pay_tool.length > 0) {
                var pay_tool_perfix = pay_tool.split("_");
                var trade_pay_tool_perfix = trade_pay_tool.split("_");
                if (pay_tool_perfix[0] != trade_pay_tool_perfix[0]) {
                    _kongcv_insert_trade_log(bill_id, request, ERROR_MSG.ERR_PAY_TOOL_MUST_SAME);
                }
            }

            bill_obj.set("money", money);
            bill_obj.set("pay_tool", pay_tool);
            bill_obj.set("pay_id", pay_id);
            bill_obj.set("notify_id", notify_id);
            bill_obj.set("pay_type", pay_type);
            bill_obj.set("pay_state", 1);
            if (typeof(coupon) != "undefined" && coupon > 0) {
                console.log("bill save coupon:", coupon);
                bill_obj.set("coupon", coupon);
            }
            console.log("bill_obj:",bill_obj);

            bill_obj.save().then(
                function(result) { 
                    if ("money" === pay_type) { 
                        trade_obj.set("pay_tool", pay_tool);
                        trade_obj.set("money", money);
                        trade_obj.set("pay_state", 2);
                        trade_obj.set("trade_state", 1);
                    }
                    else if ("handsel" === pay_type) {
                        trade_obj.set("pay_tool", pay_tool);
                        trade_obj.set("money", money);
                        trade_obj.set("handsel", money);
                        trade_obj.set("pay_state", 1);
                        trade_obj.set("handsel_state", 1);
                    }
                    else if ("balance" === pay_type) {
                        var tmp_trade_money = trade_obj.get("money");
                        var tmp_new_trade_money = tmp_trade_money + money;
                        trade_obj.set("money", Number(tmp_new_trade_money.toFixed(2)));
                        //trade_obj.increment("money", money);
                        trade_obj.set("balance", money);
                        trade_obj.set("pay_state", 2);
                        trade_obj.set("trade_state", 1);
                    }

                    trade_obj.save().then(
                        function(trade_obj) {
                            console.log("trade save");
                            var purse_query = new AV.Query(kongcv_purse_cls);
                            var trade_money = trade_obj.get("money");
                            var verify_trade_money = trade_obj.get("money");
                            var verify_trade_price = trade_obj.get("price");
                            
                            if ("money" === pay_type || "balance" === pay_type) { 
                                if (verify_trade_money != verify_trade_price) {
                                    _kongcv_insert_trade_log(bill_id, request, "verify_price");
                                }
                            }
                        
                            if ("money" === pay_type && "community" === mode) {
                                var park_obj = trade_obj.get("park_community");
                                if (typeof(park_obj) != "undefined") {
                                    park_obj.set("park_space", 0);
                                }

                                park_obj.save().then(
                                    function(park_obj) { 
                                    },
                                    function(error) {
                                        _kongcv_insert_trade_log(bill_id, request, "park_save" + error);
                                    }
                                );
                            }
                            else if ("balance" === pay_type && "curb" === mode) {
                                var curb_rate = trade_obj.get("curb_rate");
                                var hirer_obj = trade_obj.get("hirer");
                                var user_obj = trade_obj.get("user");

                                purse_query.equalTo("user", hirer_obj);
                                purse_query.limit(1);
                                purse_query.find({
                                    success : function(results) {
                                        var hirer_purse_obj;
                                
                                        if (1 === results.length) {
                                            hirer_purse_obj = results[0];
                                        }
                                        else if (0 === results.length) {
                                            hirer_purse_obj = new kongcv_purse_cls();
                                            hirer_purse_obj.set("user", hirer_obj);
                                        }

                                        var own_trade_money;
                                        var own_rate;

                                        if (curb_rate > 0) {
                                            own_rate = curb_rate;
                                        }
                                        else {
                                            own_rate = kongcv_rate;
                                        }

                                        own_trade_money = trade_money * own_rate; 
                                        if (own_trade_money > limit_price) {
                                            own_trade_money = parseInt(own_trade_money);
                                        }
                                        else {
                                            own_trade_money = Number(own_trade_money.toFixed(2));
                                        }
                                        var tmp_purse_amount = hirer_purse_obj.get("amount");
                                        var tmp_purse_money = hirer_purse_obj.get("money");
                                        var tmp_new_purse_amount = tmp_purse_amount + own_trade_money;
                                        var tmp_new_purse_money = tmp_purse_money + own_trade_money;
                                        hirer_purse_obj.set("amount", Number(tmp_new_purse_amount.toFixed(2)));
                                        hirer_purse_obj.set("money", Number(tmp_new_purse_money.toFixed(2)));
                                        //hirer_purse_obj.increment("amount", own_trade_money);
                                        //hirer_purse_obj.increment("money", own_trade_money);

                                        hirer_purse_obj.save().then(
                                            function(hirer_purse_obj) {
                                            },
                                            function(error) {
                                                _kongcv_insert_trade_log(bill_id, request, "hirer_purse_save" + error);
                                            }
                                        );
                                    },
                                    error : function(error) {
                                        _kongcv_insert_trade_log(bill_id, request, "hirer_purse_query" + error);
                                    }
                                }); 
                            }
                           
                            console.log("expense start");
                            if ("handsel" != pay_type) {
                                purse_query.equalTo("user", user_obj);
                                purse_query.limit(1);
                                purse_query.find({
                                    success : function(results) {
                                        var user_purse_obj;

                                        if (1 === results.length) {
                                            user_purse_obj = results[0];
                                        }
                                        else if (0 === results.length) {
                                            user_purse_obj = new kongcv_purse_cls();
                                            user_purse_obj.set("user", user_obj);
                                        }

                                        var tmp_purse_expense = user_purse_obj.get("expense");
                                        var tmp_new_purse_expense = tmp_purse_expense + trade_money;
                                        user_purse_obj.set("expense", Number(tmp_new_purse_expense.toFixed(2)));
                                        //user_purse_obj.increment("expense", trade_money);

                                        user_purse_obj.save().then(
                                            function(user_purse_obj) {
                                                console.log("expense save");
                                            },
                                            function(error) {
                                                _kongcv_insert_trade_log(bill_id, request, "user_purse_save" + error);
                                            }
                                        );
                                    },
                                    error : function(error) {
                                        _kongcv_insert_trade_log(bill_id, request, "user_purse_query" + error);
                                    }
                                });
                            }
                        },
                        function(error) {
                            _kongcv_insert_trade_log(bill_id, request, "trade_save" + error);
                        }
                    );
                },
                function(error) {
                    _kongcv_insert_trade_log(bill_id, request, "bill_save" + error);
                }
            );
        },
        error : function(error) {
            _kongcv_insert_trade_log(bill_id, request, "bill_query" + error);
        }
    });
};
Example #21
0
//取消订单,如果没有支付就直接删除,如果支付了就发起支付请求
function cancelOrderP(orderId) {
	var query = new AV.Query(Order);
	var route, order, tickets;
	query.include('route');
	return query.get(orderId).then(function (result) {
		order = result;
		if (order.get('isDeleted') == true || order.get('state') == 'cancelled') {
			return AV.Promise.error('该订单已取消');
		}
		if (order.get('state') == 'cancelling') {
			return AV.Promise.error('正在退款中,请耐心等待');
		}
		route = order.get('route');
		if (order.get('state') == 'unpay' || order.get('state') == 'paying') {
			var cpQuery = order.relation('coupons').query();
			var psQuery = order.relation('passengers').query();
			var promises = [];
			var cpPromise = cpQuery.find().then(function (coupons) {
				coupons.forEach(function(coupon){
					coupon.set('order',null);
					coupon.set('isUsed',false);
					coupon.save();
				});
			});
			var psPromise = psQuery.count().then(function (count) {
				route.increment('passengerNumber', -count);
				return route.save();
			})
			promises.push(cpPromise);
			promises.push(psPromise);
			order.set('isDeleted', true);
			promises.push(order.save());
			return AV.Promise.all(promises);
		} else if (order.get('state') == 'paid') {
			if (moment().add(timeLine.refundDeadline, 'ms').isAfter(route.get('startTime'))) {
				return AV.Promise.error('发车前' + timeLine.refundDeadline / 3600000 + '小时不允许退款');
			}
			order.set('state', 'cancelling');
			return order.save().then(function () {
				var query = new AV.Query(Transaction);
				query.equalTo('order', order);
				return query.find();
			}).then(function (result) {
				if (result.length == 0) {
					return AV.Promise.error('找不到支付记录');
				}
				var trQuery = new TransactionQuery();
				trQuery.set('user', order.get('user'));
				trQuery.set('type', 'refund');
				trQuery.set('state', 'untreated');
				trQuery.set('order', order);
				trQuery.set('amount', order.get('priceToPay'));
				trQuery.set('chargeId', result[0].get('chargeId'));
				trQuery.set('channel', result[0].get('channel'));
				trQuery.set('currency', result[0].get('currency'));
				trQuery.set('isDeleted', false);
				trQuery.save();
				var query = order.relation('tickets').query();
				query.include('schedule');
				return query.find();
			}).then(function (results) {
				//将路线乘客数量减去订单里的乘客数量
				tickets = results;
				order.relation('passengers').query().count().then(function(count){
					route.increment('passengerNumber', -count);
					route.save();
				})
				var promises = [];
				tickets.forEach(function (ticket) {
					var schedule = ticket.get('schedule');
					if (schedule != null) {
						schedule.increment('takenSeat', -1);
						promises.push(schedule.save());
					}
					ticket.set('isDeleted', true);
					ticket.set('state', 'discard');
					promises.push(ticket.save());
				});
				return AV.Promise.all(promises);
			});
		}
	});
}
AV.Cloud.afterSave("Fee", function(request, response) {

  var owner = request.object.get("owner");
  var ownerID = owner.id;
  var feeID = request.object.id;

  var createDate = moment(request.object.get('createdAt'));
  var updateDate = moment(request.object.get('updatedAt'));
  var creator = request.object.get("creator");

  //for only client side create, upload balance
  if(createDate.isSame(updateDate))
  {

    if (ownerID.length > 0) {
      var PeopleClass = AV.Object.extend("People");
      var query = new AV.Query(PeopleClass);
      query.include('accountRef');
      console.log("Fee after create query: " + ownerID);

      query.get(ownerID, {
        success: function (targetPeople) {

          var runningBalance = targetPeople.get('accountRef').get('runningBalance');
          if(runningBalance > 0)
          {
            var FeeClass = AV.Object.extend("Fee");
            var queryFee = new AV.Query(FeeClass);

            queryFee.get(feeID, {
              success: function (targetFee) {
                var amount = targetFee.get('amount');
                var settledAmount = 0;

                if(runningBalance >= amount)
                {
                  //change to settle status
                  settledAmount = amount;
                  targetFee.set("settledAmount", settledAmount);
                  targetFee.set("isSettled", true);
                  targetFee.set('settledBy', creator);
                  targetFee.set('settledDate', new Date());
                }
                else {
                  settledAmount = runningBalance;
                  targetFee.set("settledAmount", settledAmount);
                }

                targetFee.save(null,{
                  success: function(result) {
                    refreshRunningBalance(targetPeople,
                      function() {
                      },
                      function(error)
                      {
                        console.log(error.message);
                      });

                  },
                  error: function(results, error) {
                    response.error("fee after safve error");
                  }
                });
              }
            });
          }
          else {
            //no need edit fee
            refreshRunningBalance(targetPeople,
              function() {
              },
              function(error)
              {
                console.log(error.message);
              });
          }
        },
        error: function (object, error) {
          response.error("fee after safve error");
        }
      });
    }
  }
  else{
    //server side update, refresh balance
    console.log('server side update fee ready to recalc balsnce.');
    refreshRunningBalance(targetPeople,
      function() {
      },
      function(error)
      {
        console.log(error.message);
      });
  }
});
AV.Cloud.define("memberExitCalculation", function(request, response)
{
  var objectId = request.params.objectId;

  //update mode
  var People = AV.Object.extend("People");
  var queryPeople = new AV.Query(People);
  queryPeople.include("roomRef");
  queryPeople.get(objectId, {
    success: function (targetPeople) {


      var freeHousingDay = FREE_HOUSING_DAY;

      var FeeTypeClass = AV.Object.extend("FeeType");
      var queryFeeType = new AV.Query(FeeTypeClass);
      queryFeeType.equalTo("isRentFee", true);

      //not exit pls

      queryFeeType.first({
        success: function (rentFee) {
          //override the out date
          var newOutDate = targetPeople.get("outDate");

          console.log('rentFeeCalculator: ' + targetPeople.get('outDate'));

          if(newOutDate )
          {
            var monthStart = moment(newOutDate).utcOffset(8).startOf('month');
            var monthEnd = moment(newOutDate).utcOffset(8).endOf('month');

            rentFeeCalculator(targetPeople, rentFee, monthStart, monthEnd, freeHousingDay, false, function() {
              //success
              refreshRunningBalance(targetPeople,
                function() {
                },
                function(error)
                {
                  console.log(error.message);
                });

            }, function() {
              //fail
            });

          }
          response.success();

        },
        error: function (error) {
          response.error(error.message);
        }
      });

    },
    error: function(error) {
      response.error(error.message);
    }
  });
});
AV.Cloud.afterUpdate("Payment", function(request, response) {

  var paymentAmount= request.object.get("amount");
  var owner = request.object.get("owner");
  var creator = request.object.get("creator");
  var isApproved = request.object.get("isApproved");
  var paymentId = request.object.id;


  //only approved record need to repay
  if(isApproved ) {
    var FeeClass = AV.Object.extend("Fee");
    var queryFee = new AV.Query(FeeClass);
    queryFee.equalTo("owner", owner);
    queryFee.equalTo("isSettled", false);
    queryFee.include("feeTypeRef");
    queryFee.ascending("createdAt");

    queryFee.find({
      success: function (feeResults) {
        // results has the list of users with a hometown team with a winning record

        //Step1: sort the fee by the priority and date
        feeResults.sort(function (fee1, fee2) {

          var priority1 = fee1.get('feeTypeRef').get('priority');
          var priority2 = fee2.get('feeTypeRef').get('priority');

          if (priority1 < priority2) {
            return -1;
          }
          else if (priority1 === priority2) {
            return 0;
          }
          else {
            return 1;
          }

        });

        //Step2: loop all the list and repay it
        var changedFeeList = [];
        var paymentDetail = '';
        for (var i = 0; i < feeResults.length; i++) {
          var fee = feeResults[i];
          var lendingAmount = fee.get('amount');
          var settledAmount = fee.get('settledAmount');
          var isRentFee = fee.get('feeTypeRef').get('isRentFee');
          var outstandingAmount = lendingAmount - settledAmount;


          if(paymentDetail.length > 0)
          {
            paymentDetail = paymentDetail + ',' ;
          }

          if(isRentFee)
          {
            paymentDetail = paymentDetail + fee.get("reference");
          }
          else {
            paymentDetail = paymentDetail + fee.get('feeTypeRef').get('name');
          }

          if (paymentAmount >= outstandingAmount) {
            //full payment
            fee.set('settledAmount', fee.get('amount'));
            fee.set('isSettled', true);
            fee.set('settledDate', new Date());
            fee.set('settledBy', creator);
            changedFeeList.push(fee);

            paymentAmount = paymentAmount - outstandingAmount;
          }
          else {
            //partial payment
            var newSettledAmount = settledAmount + paymentAmount;
            fee.set('settledAmount', newSettledAmount);
            changedFeeList.push(fee);

            paymentAmount = 0;
            break;
          }
        }

        console.log('paymentDetail : ' + paymentDetail);
        request.object.set('paymentDetail', paymentDetail);

        //refresh after list is saved
        if (changedFeeList.length > 0) {
          AV.Object.saveAll(changedFeeList, {
            success: function (list) {

              request.object.set('paymentDetail', paymentDetail);
              request.object.save().then(function(obj) {
              });

              var PeopleClass = AV.Object.extend("People");
              var query = new AV.Query(PeopleClass);
              query.include('accountRef');
              query.get(owner.id, {
                success: function (targetPeople) {
                  refreshRunningBalance(targetPeople,
                    function () {
                    },
                    function (error) {
                      console.log(error.message);
                    });

                }
              });

            },
            error: function (error) {
            }
          });
        }
        else {
        }

      },
      error: function (error) {
      }
    });
  }
  else {
  }

});
AV.Cloud.define("monthEndCalculation", function(request, status)
{
  //On 1st day of month, calculate last month's rent
  var dateFormat = 'YYYY-MM-DD';
  var currentDate = moment();
  var monthStart = moment().startOf('month');
  var monthEnd = moment().endOf('month');

  //var currentDay   = currentDate.date();
  //var currentMonth = currentDate.month();

  var numberOfDaysInMonth = monthEnd.date();

  console.log('monthEndCalculation: start: ' + monthStart.format(dateFormat) + ' end: ' + monthEnd.format(dateFormat) + ' # of days in month: ' + numberOfDaysInMonth);
  //****** important these task must be run in first day

  //if(day != 1)
  //{
  //
  //}

  var freeHousingDay = FREE_HOUSING_DAY;

  var FeeTypeClass= AV.Object.extend("FeeType");
  var queryFeeType = new AV.Query(FeeTypeClass);
  queryFeeType.equalTo("isRentFee", true);

  var PeopleClass = AV.Object.extend("People");
  var queryPeople = new AV.Query(PeopleClass);
  queryPeople.include("roomRef");
  queryPeople.equalTo("outDate", null);
  //not exit pls

  queryFeeType.first({
    success: function(rentFee)
    {
      queryPeople.find({
        success: function(results) {
          for (var i = 0; i < results.length; i++) {
            //call function
            //function rentFeeCalculator(people, rentFee, monthStart, monthEnd)
            var people = results[i];

            rentFeeCalculator(people, rentFee, monthStart, monthEnd, freeHousingDay, true, function()
            {

            }, function(error)
            {

            });
          }
        },
        error: function(error) {
          console.error('monthEndCalculation running query error!');
        }
      });
    },
    error: function(error)
    {
      console.error('monthEndCalculation running query error!');
    }
  });


});
Example #26
0
router.get('/pay', function(req, res, next) {

    //问我
    // var totalFee = req.query.totalFee;
    // var user = AV.User.current();
    // if (user == null || user == '') {
    //     var result = {
    //         code : 300,
    //         message : '用户未登录'
    //     }
    //     res.send(result);
    //     return
    // }
    // else {
    //     var authData = user.get('authData');
    //     console.log(authData);
    //     var openid = authData.weixin.openid;
    //     var accessToken = authData.weixin.access_token;
    //     var expiresIn = authData.weixin.expires_in;
    //
    //     var ip = req.ip;
    //     ip = ip.substr(ip.lastIndexOf(':')+1, ip.length);
    //     console.log(ip);
    //     var notifyUrl = 'http://www.wenwobei.com/notify';
    //     //notifyUrl = encodeURIComponent(notifyUrl);
    //
    //     wxpay.getBrandWCPayRequestParams({
    //         openid: openid,
    //         body: '公众号支付测试',
    //         detail: '公众号支付测试',
    //         out_trade_no: '20150331'+Math.random().toString().substr(2, 10),
    //         total_fee: totalFee,
    //         attach:,
    //         spbill_create_ip: ip,
    //         notify_url:notifyUrl
    //     }, function(err, result){
    //         // in express
    //         //console.log(result);
    //         res.send({code:200,payargs:result});
    //     });
    //
    // }


    //问我 - 美食

    //var totalFee = req.query.totalFee;
    // console.log("ceshi:"+req.query.username);
    var askId = req.query.ask_id;
    var userName = req.query.username;

    var port = req.query.port;

    var query = new AV.Query('Haved');

    query.equalTo("by", userName);
    query.equalTo('type', '2');
    query.include('ask');
    query.find().then(function (havedList) {

        var havedListFlag = 0;

        for (var i = 0; i < havedList.length; i++) {

            if(havedList[i].get('ask')){
                if (havedList[i].get('ask').id == askId) {
                    havedListFlag++;
                }
            }
        }

        if (havedListFlag == 0) {

            var query = new AV.Query('AskMe');
            query.get(askId).then( function (ask) {

                var score = ask.get('score');
                // console.log(score);

                // console.log(ask.get('askPrice'));
                if (score < 20 || parseFloat(ask.get('askPrice')) == 0) {

                    var query = new AV.Query('UserInfo');
                    query.get(userName).then(function (user) {

                        var have = new Haved();
                        have.set('ask', ask);
                        have.set('type', '2');
                        have.set('by', userName);
                        have.set('askDate', ask.updatedAt);
                        have.set('price', ask.get('askPrice'));
                        have.set('byName', user.get('uName'));
                        have.set('byUrl', user.get('userHead'));
                        have.set('askOwn', ask.get('createBy'));
                        // have.set('income', incomeTotal);
                        ask.set('score', ask.get('score')+1);
                        ask.set('buyNum', (parseInt(ask.get('buyNum'))+1).toString());

                        have.save().then(function () {
                            ask.save().then(function (ask) {
                                res.send({code:100,data:ask ,message:'操作成功'});
                            });
                        });

                    });


                } else  {

                    var totalFee = parseFloat(ask.get('askPrice'))*100;
                    // console.log(totalFee);
                    if (parseInt(totalFee)) {

                        if (port == null || port == '') {

                            var user = AV.User.current();

                            if (user == null || user == '') {
                                res.send({code:300,message:'用户未登录'});
                            } else {

                                var attach = {
                                    username:userName,
                                    ask_id:askId
                                };
                                attach = JSON.stringify(attach);

                                //JSON.stringify();
                                var authData = user.get('authData');
                                // console.log(authData);
                                var openid = authData.weixin.openid;
                                var accessToken = authData.weixin.access_token;
                                var expiresIn = authData.weixin.expires_in;

                                var ip = req.ip;
                                ip = ip.substr(ip.lastIndexOf(':')+1, ip.length);
                                // console.log(ip);
                                var notifyUrl = 'http://www.wenwobei.com/notify';
                                //notifyUrl = encodeURIComponent(notifyUrl);

                                wxpay.getBrandWCPayRequestParams({
                                    openid: openid,
                                    body: '问我-美食',
                                    detail: '美食推荐',
                                    out_trade_no: '20160331'+Math.random().toString().substr(2, 10),
                                    total_fee: totalFee,
                                    attach:attach,
                                    spbill_create_ip: ip,
                                    notify_url:notifyUrl
                                }, function(err, result){
                                    // in express
                                    // console.log(result);
                                    res.send({code:200,payargs:result});
                                });

                            }

                        } else if (port == 'app') {

                            var openid = req.query.openid;
                            var accessToken = req.query.access_token;
                            var expiresIn = req.query.expires_in;

                            AV.User._logInWith('weixin', {
                                'authData': {
                                    "openid": openid,
                                    "access_token": accessToken,
                                    "expires_in": expiresIn
                                }
                            }).then(function(user) {

                                if (user == null || user == '') {
                                    res.send({code:300,message:'用户未登录'});
                                } else {

                                    var attach = {
                                        username:userName,
                                        ask_id:askId
                                    };
                                    attach = JSON.stringify(attach);

                                    //JSON.stringify();
                                    var authData = user.get('authData');
                                    // console.log(authData);
                                    var openid = authData.weixin.openid;
                                    var accessToken = authData.weixin.access_token;
                                    var expiresIn = authData.weixin.expires_in;

                                    var ip = req.ip;
                                    ip = ip.substr(ip.lastIndexOf(':')+1, ip.length);
                                    // console.log(ip);
                                    var notifyUrl = 'http://www.wenwobei.com/notify';
                                    //notifyUrl = encodeURIComponent(notifyUrl);

                                    // android_wxpay.getBrandWCPayRequestParams({
                                    //     openid: openid,
                                    //     body: '问我-美食',
                                    //     detail: '美食推荐',
                                    //     out_trade_no: '20160331'+Math.random().toString().substr(2, 10),
                                    //     total_fee: totalFee,
                                    //     attach:attach,
                                    //     spbill_create_ip: ip,
                                    //     notify_url:notifyUrl
                                    // }, function(err, result){
                                    //     // in express
                                    //     console.log(err);
                                    //     res.send({code:200,payargs:result});
                                    // });

                                    // var datareq = {
                                    //     openid: openid,
                                    //     body: '问我-美食',
                                    //     detail: '美食推荐',
                                    //     out_trade_no: '20160331'+Math.random().toString().substr(2, 10),
                                    //     total_fee: totalFee,
                                    //     attach:attach,
                                    //     spbill_create_ip: ip,
                                    //     notify_url:notifyUrl,
                                    //     trade_type : "APP"
                                    // };
                                    // datareq.sign = getSign(datareq);


                                    android_wxpay.createUnifiedOrder({
                                        openid: openid,
                                        body: '问我-美食',
                                        detail: '美食推荐',
                                        out_trade_no: '20160331'+Math.random().toString().substr(2, 10),
                                        total_fee: totalFee,
                                        attach:attach,
                                        spbill_create_ip: ip,
                                        notify_url:notifyUrl,
                                        trade_type : "APP"
                                        // sign : datareq.sign

                                    } ,function(err, data){
                                        var reqparam = {
                                            appId: config.androidAppid,
                                            timeStamp: Math.floor(Date.now()/1000)+"",
                                            nonceStr: data.nonce_str,
                                            package: "prepay_id="+data.prepay_id,
                                            signType: "MD5"
                                        };
                                        reqparam.paySign = android_wxpay.sign(reqparam);
                                        // reqparam.paySign = datareq.sign;


                                        console.log(err);
                                        res.send({code:200,payargs:reqparam});

                                    });

                                }



                            }, function (error) {
                                console.log("error");
                                console.log(error);

                            });


                        }




                    } else {

                        res.send({code:400,message:'数据有误'});

                    }

                }

            });

        } else {

            res.send({code:400,message:'重复购买'});

        }

    });



});
Example #27
0
	promise = promise.then(function () {
		var query = new AV.Query(AV.User);
		query.include(['myAgent.agentInfo.agentCommissionRule']);
		return query.get(order.get('user').id);
	});