You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
292 lines
7.0 KiB
292 lines
7.0 KiB
var _ = require('lodash');
|
|
var path = require("path");
|
|
var orm = require("orm");
|
|
var dao = require(path.join(process.cwd(),"dao/DAO"));
|
|
|
|
var Promise = require("bluebird");
|
|
var uniqid = require('uniqid');
|
|
|
|
function doCheckOrderParams(params) {
|
|
return new Promise(function(resolve,reject) {
|
|
var info = {};
|
|
if(params.order_id) info.order_id = params.order_id;
|
|
|
|
if(!params.order_id) {
|
|
if(!params.user_id) return reject("用户ID不能为空");
|
|
if(isNaN(parseInt(params.user_id))) return reject("用户ID必须是数字");
|
|
info.user_id = params.user_id;
|
|
}
|
|
|
|
|
|
if(!params.order_id) info.order_number = "itcast-" + uniqid();
|
|
|
|
if(!params.order_price) return reject("订单价格不能为空");
|
|
if(isNaN(parseFloat(params.order_price))) return reject("订单价格必须为数字");
|
|
info.order_price = params.order_price;
|
|
|
|
if(params.order_pay){
|
|
info.order_pay = params.order_pay;
|
|
} else {
|
|
info.order_pay = '0';
|
|
}
|
|
if(params.is_send) {
|
|
if(params.is_send == 1) {
|
|
info.is_send = '是';
|
|
} else {
|
|
info.is_send = '否';
|
|
}
|
|
} else {
|
|
info.is_send = '否';
|
|
}
|
|
|
|
if(params.trade_no) {
|
|
info.trade_no = '否';
|
|
} else {
|
|
info.trade_no = '';
|
|
}
|
|
|
|
|
|
if(params.order_fapiao_title) {
|
|
if(params.order_fapiao_title != '个人' && params.order_fapiao_title != '公司')
|
|
return reject("发票抬头必须是 个人 或 公司");
|
|
info.order_fapiao_title = params.order_fapiao_title;
|
|
|
|
} else {
|
|
info.order_fapiao_title = "个人";
|
|
}
|
|
|
|
if(params.order_fapiao_company) {
|
|
info.order_fapiao_company = params.order_fapiao_company;
|
|
} else {
|
|
info.order_fapiao_company = "";
|
|
}
|
|
|
|
if(params.order_fapiao_content) {
|
|
info.order_fapiao_content= params.order_fapiao_content;
|
|
} else {
|
|
info.order_fapiao_content= "";
|
|
}
|
|
|
|
if(params.consignee_addr) {
|
|
info.consignee_addr = params.consignee_addr;
|
|
} else {
|
|
info.consignee_addr = "";
|
|
}
|
|
|
|
if(params.goods) {
|
|
info.goods = params.goods;
|
|
}
|
|
|
|
info.pay_status = '0';
|
|
if(params.order_id) info.create_time = (Date.parse(new Date())/1000);
|
|
info.update_time = (Date.parse(new Date())/1000);
|
|
|
|
resolve(info);
|
|
});
|
|
}
|
|
|
|
function doCreateOrder(info) {
|
|
return new Promise(function(resolve,reject) {
|
|
dao.create("OrderModel",_.clone(info),function(err,newOrder){
|
|
if(err) return reject("创建订单失败");
|
|
info.order = newOrder;
|
|
resolve(info);
|
|
});
|
|
});
|
|
}
|
|
|
|
function doCreateOrderGood(orderGood) {
|
|
return new Promise(function(resolve,reject) {
|
|
dao.create("OrderGoodModel",orderGood,function(err,newOrderGood){
|
|
if(err) return reject("创建订单商品失败");
|
|
resolve(newOrderGood);
|
|
});
|
|
});
|
|
}
|
|
|
|
function doAddOrderGoods(info) {
|
|
|
|
return new Promise(function(resolve,reject) {
|
|
|
|
if(!info.order) return reject("订单对象未创建");
|
|
|
|
var orderGoods = info.goods;
|
|
|
|
if(orderGoods && orderGoods.length > 0) {
|
|
var fns = [];
|
|
var goods_total_price = _.sum(_.map(orderGoods,"goods_price"));
|
|
|
|
_(orderGoods).forEach(function(orderGood){
|
|
orderGood.order_id = info.order.order_id;
|
|
orderGood.goods_total_price = goods_total_price;
|
|
fns.push(doCreateOrderGood(orderGood));
|
|
});
|
|
Promise.all(fns)
|
|
.then(function(results){
|
|
info.order.goods = results;
|
|
resolve(info);
|
|
})
|
|
.catch(function(error){
|
|
if(error) return reject(error);
|
|
});
|
|
|
|
} else {
|
|
resolve(info);
|
|
}
|
|
});
|
|
}
|
|
|
|
function doGetAllOrderGoods(info) {
|
|
return new Promise(function(resolve,reject) {
|
|
if(!info.order) return reject("订单对象未创建");
|
|
|
|
dao.list("OrderGoodModel",{"columns":{"order_id":info.order.order_id}},function(err,orderGoods){
|
|
|
|
|
|
if(err) return reject("获取订单商品列表失败");
|
|
|
|
info.order.goods = orderGoods;
|
|
resolve(info);
|
|
})
|
|
});
|
|
}
|
|
|
|
function doGetOrder(info) {
|
|
return new Promise(function(resolve,reject) {
|
|
dao.show("OrderModel",info.order_id,function(err,newOrder){
|
|
|
|
if(err) return reject("获取订单详情失败");
|
|
if(!newOrder) return reject("订单ID不能存在");
|
|
info.order = newOrder;
|
|
resolve(info);
|
|
})
|
|
});
|
|
}
|
|
|
|
function doUpdateOrder(info) {
|
|
return new Promise(function(resolve,reject) {
|
|
dao.update("OrderModel",info.order_id,_.clone(info),function(err,newOrder){
|
|
if(err) return reject("更新失败");
|
|
info.order = newOrder;
|
|
resolve(info);
|
|
});
|
|
|
|
});
|
|
}
|
|
|
|
|
|
module.exports.createOrder = function(params,cb) {
|
|
doCheckOrderParams(params)
|
|
.then(doCreateOrder)
|
|
.then(doAddOrderGoods)
|
|
.then(function(info) {
|
|
cb(null,info.order);
|
|
})
|
|
.catch(function(err) {
|
|
cb(err);
|
|
});
|
|
}
|
|
|
|
|
|
module.exports.getAllOrders = function(params,cb){
|
|
var conditions = {};
|
|
if(!params.pagenum || params.pagenum <= 0) return cb("pagenum 参数错误");
|
|
if(!params.pagesize || params.pagesize <= 0) return cb("pagesize 参数错误");
|
|
conditions["columns"] = {};
|
|
if(params.user_id) {
|
|
conditions["columns"]["user_id"] = params.user_id;
|
|
}
|
|
|
|
if(params.pay_status) {
|
|
conditions["columns"]["pay_status"] = params.pay_status;
|
|
}
|
|
|
|
if(params.is_send) {
|
|
if(params.is_send == 1) {
|
|
conditions["columns"]["is_send"] = '是';
|
|
} else {
|
|
conditions["columns"]["is_send"] = '否';
|
|
}
|
|
}
|
|
|
|
if(params.order_fapiao_title) {
|
|
if(params.order_fapiao_title == 1) {
|
|
conditions["columns"]["order_fapiao_title"] = '个人';
|
|
} else {
|
|
conditions["columns"]["order_fapiao_title"] = '公司';
|
|
}
|
|
}
|
|
|
|
if(params.order_fapiao_company) {
|
|
conditions["columns"]["order_fapiao_company"] = orm.like("%" + params.order_fapiao_company + "%");
|
|
}
|
|
|
|
if(params.order_fapiao_content) {
|
|
conditions["columns"]["order_fapiao_content"] = orm.like("%" + params.order_fapiao_content + "%");
|
|
}
|
|
|
|
if(params.consignee_addr) {
|
|
conditions["columns"]["consignee_addr"] = orm.like("%" + params.consignee_addr + "%");
|
|
}
|
|
|
|
dao.countByConditions("OrderModel",conditions,function(err,count){
|
|
if(err) return cb(err);
|
|
pagesize = params.pagesize;
|
|
pagenum = params.pagenum;
|
|
pageCount = Math.ceil(count / pagesize);
|
|
offset = (pagenum - 1) * pagesize;
|
|
if(offset >= count) {
|
|
offset = count;
|
|
}
|
|
limit = pagesize;
|
|
|
|
// 构建条件
|
|
conditions["offset"] = offset;
|
|
conditions["limit"] = limit;
|
|
// conditions["only"] =
|
|
conditions["order"] = "-create_time";
|
|
|
|
|
|
dao.list("OrderModel",conditions,function(err,orders){
|
|
if(err) return cb(err);
|
|
var resultDta = {};
|
|
resultDta["total"] = count;
|
|
resultDta["pagenum"] = pagenum;
|
|
resultDta["goods"] = _.map(orders,function(order){
|
|
return order;//_.omit(order,);
|
|
});
|
|
cb(err,resultDta);
|
|
})
|
|
});
|
|
}
|
|
|
|
module.exports.getOrder = function(orderId,cb) {
|
|
if(!orderId) return cb("用户ID不能为空");
|
|
if(isNaN(parseInt(orderId))) return cb("用户ID必须是数字");
|
|
|
|
doGetOrder({"order_id":orderId})
|
|
.then(doGetAllOrderGoods)
|
|
.then(function(info){
|
|
cb(null,info.order);
|
|
})
|
|
.catch(function(err) {
|
|
cb(err);
|
|
});
|
|
|
|
}
|
|
|
|
module.exports.updateOrder = function(orderId,params,cb) {
|
|
if(!orderId) return cb("用户ID不能为空");
|
|
if(isNaN(parseInt(orderId))) return cb("用户ID必须是数字");
|
|
params["order_id"] = orderId;
|
|
doCheckOrderParams(params)
|
|
.then(doUpdateOrder)
|
|
.then(doGetAllOrderGoods)
|
|
.then(function(info){
|
|
cb(null,info.order);
|
|
})
|
|
.catch(function(err) {
|
|
cb(err);
|
|
});
|
|
|
|
} |