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.
vue-shop-admin-work/services/OrderService.js

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);
});
}