OrderService.js 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292
  1. var _ = require('lodash');
  2. var path = require("path");
  3. var orm = require("orm");
  4. var dao = require(path.join(process.cwd(),"dao/DAO"));
  5. var Promise = require("bluebird");
  6. var uniqid = require('uniqid');
  7. function doCheckOrderParams(params) {
  8. return new Promise(function(resolve,reject) {
  9. var info = {};
  10. if(params.order_id) info.order_id = params.order_id;
  11. if(!params.order_id) {
  12. if(!params.user_id) return reject("用户ID不能为空");
  13. if(isNaN(parseInt(params.user_id))) return reject("用户ID必须是数字");
  14. info.user_id = params.user_id;
  15. }
  16. if(!params.order_id) info.order_number = "itcast-" + uniqid();
  17. if(!params.order_price) return reject("订单价格不能为空");
  18. if(isNaN(parseFloat(params.order_price))) return reject("订单价格必须为数字");
  19. info.order_price = params.order_price;
  20. if(params.order_pay){
  21. info.order_pay = params.order_pay;
  22. } else {
  23. info.order_pay = '0';
  24. }
  25. if(params.is_send) {
  26. if(params.is_send == 1) {
  27. info.is_send = '是';
  28. } else {
  29. info.is_send = '否';
  30. }
  31. } else {
  32. info.is_send = '否';
  33. }
  34. if(params.trade_no) {
  35. info.trade_no = '否';
  36. } else {
  37. info.trade_no = '';
  38. }
  39. if(params.order_fapiao_title) {
  40. if(params.order_fapiao_title != '个人' && params.order_fapiao_title != '公司')
  41. return reject("发票抬头必须是 个人 或 公司");
  42. info.order_fapiao_title = params.order_fapiao_title;
  43. } else {
  44. info.order_fapiao_title = "个人";
  45. }
  46. if(params.order_fapiao_company) {
  47. info.order_fapiao_company = params.order_fapiao_company;
  48. } else {
  49. info.order_fapiao_company = "";
  50. }
  51. if(params.order_fapiao_content) {
  52. info.order_fapiao_content= params.order_fapiao_content;
  53. } else {
  54. info.order_fapiao_content= "";
  55. }
  56. if(params.consignee_addr) {
  57. info.consignee_addr = params.consignee_addr;
  58. } else {
  59. info.consignee_addr = "";
  60. }
  61. if(params.goods) {
  62. info.goods = params.goods;
  63. }
  64. info.pay_status = '0';
  65. if(params.order_id) info.create_time = (Date.parse(new Date())/1000);
  66. info.update_time = (Date.parse(new Date())/1000);
  67. resolve(info);
  68. });
  69. }
  70. function doCreateOrder(info) {
  71. return new Promise(function(resolve,reject) {
  72. dao.create("OrderModel",_.clone(info),function(err,newOrder){
  73. if(err) return reject("创建订单失败");
  74. info.order = newOrder;
  75. resolve(info);
  76. });
  77. });
  78. }
  79. function doCreateOrderGood(orderGood) {
  80. return new Promise(function(resolve,reject) {
  81. dao.create("OrderGoodModel",orderGood,function(err,newOrderGood){
  82. if(err) return reject("创建订单商品失败");
  83. resolve(newOrderGood);
  84. });
  85. });
  86. }
  87. function doAddOrderGoods(info) {
  88. return new Promise(function(resolve,reject) {
  89. if(!info.order) return reject("订单对象未创建");
  90. var orderGoods = info.goods;
  91. if(orderGoods && orderGoods.length > 0) {
  92. var fns = [];
  93. var goods_total_price = _.sum(_.map(orderGoods,"goods_price"));
  94. _(orderGoods).forEach(function(orderGood){
  95. orderGood.order_id = info.order.order_id;
  96. orderGood.goods_total_price = goods_total_price;
  97. fns.push(doCreateOrderGood(orderGood));
  98. });
  99. Promise.all(fns)
  100. .then(function(results){
  101. info.order.goods = results;
  102. resolve(info);
  103. })
  104. .catch(function(error){
  105. if(error) return reject(error);
  106. });
  107. } else {
  108. resolve(info);
  109. }
  110. });
  111. }
  112. function doGetAllOrderGoods(info) {
  113. return new Promise(function(resolve,reject) {
  114. if(!info.order) return reject("订单对象未创建");
  115. dao.list("OrderGoodModel",{"columns":{"order_id":info.order.order_id}},function(err,orderGoods){
  116. if(err) return reject("获取订单商品列表失败");
  117. info.order.goods = orderGoods;
  118. resolve(info);
  119. })
  120. });
  121. }
  122. function doGetOrder(info) {
  123. return new Promise(function(resolve,reject) {
  124. dao.show("OrderModel",info.order_id,function(err,newOrder){
  125. if(err) return reject("获取订单详情失败");
  126. if(!newOrder) return reject("订单ID不能存在");
  127. info.order = newOrder;
  128. resolve(info);
  129. })
  130. });
  131. }
  132. function doUpdateOrder(info) {
  133. return new Promise(function(resolve,reject) {
  134. dao.update("OrderModel",info.order_id,_.clone(info),function(err,newOrder){
  135. if(err) return reject("更新失败");
  136. info.order = newOrder;
  137. resolve(info);
  138. });
  139. });
  140. }
  141. module.exports.createOrder = function(params,cb) {
  142. doCheckOrderParams(params)
  143. .then(doCreateOrder)
  144. .then(doAddOrderGoods)
  145. .then(function(info) {
  146. cb(null,info.order);
  147. })
  148. .catch(function(err) {
  149. cb(err);
  150. });
  151. }
  152. module.exports.getAllOrders = function(params,cb){
  153. var conditions = {};
  154. if(!params.pagenum || params.pagenum <= 0) return cb("pagenum 参数错误");
  155. if(!params.pagesize || params.pagesize <= 0) return cb("pagesize 参数错误");
  156. conditions["columns"] = {};
  157. if(params.user_id) {
  158. conditions["columns"]["user_id"] = params.user_id;
  159. }
  160. if(params.pay_status) {
  161. conditions["columns"]["pay_status"] = params.pay_status;
  162. }
  163. if(params.is_send) {
  164. if(params.is_send == 1) {
  165. conditions["columns"]["is_send"] = '是';
  166. } else {
  167. conditions["columns"]["is_send"] = '否';
  168. }
  169. }
  170. if(params.order_fapiao_title) {
  171. if(params.order_fapiao_title == 1) {
  172. conditions["columns"]["order_fapiao_title"] = '个人';
  173. } else {
  174. conditions["columns"]["order_fapiao_title"] = '公司';
  175. }
  176. }
  177. if(params.order_fapiao_company) {
  178. conditions["columns"]["order_fapiao_company"] = orm.like("%" + params.order_fapiao_company + "%");
  179. }
  180. if(params.order_fapiao_content) {
  181. conditions["columns"]["order_fapiao_content"] = orm.like("%" + params.order_fapiao_content + "%");
  182. }
  183. if(params.consignee_addr) {
  184. conditions["columns"]["consignee_addr"] = orm.like("%" + params.consignee_addr + "%");
  185. }
  186. dao.countByConditions("OrderModel",conditions,function(err,count){
  187. if(err) return cb(err);
  188. pagesize = params.pagesize;
  189. pagenum = params.pagenum;
  190. pageCount = Math.ceil(count / pagesize);
  191. offset = (pagenum - 1) * pagesize;
  192. if(offset >= count) {
  193. offset = count;
  194. }
  195. limit = pagesize;
  196. // 构建条件
  197. conditions["offset"] = offset;
  198. conditions["limit"] = limit;
  199. // conditions["only"] =
  200. conditions["order"] = "-create_time";
  201. dao.list("OrderModel",conditions,function(err,orders){
  202. if(err) return cb(err);
  203. var resultDta = {};
  204. resultDta["total"] = count;
  205. resultDta["pagenum"] = pagenum;
  206. resultDta["goods"] = _.map(orders,function(order){
  207. return order;//_.omit(order,);
  208. });
  209. cb(err,resultDta);
  210. })
  211. });
  212. }
  213. module.exports.getOrder = function(orderId,cb) {
  214. if(!orderId) return cb("用户ID不能为空");
  215. if(isNaN(parseInt(orderId))) return cb("用户ID必须是数字");
  216. doGetOrder({"order_id":orderId})
  217. .then(doGetAllOrderGoods)
  218. .then(function(info){
  219. cb(null,info.order);
  220. })
  221. .catch(function(err) {
  222. cb(err);
  223. });
  224. }
  225. module.exports.updateOrder = function(orderId,params,cb) {
  226. if(!orderId) return cb("用户ID不能为空");
  227. if(isNaN(parseInt(orderId))) return cb("用户ID必须是数字");
  228. params["order_id"] = orderId;
  229. doCheckOrderParams(params)
  230. .then(doUpdateOrder)
  231. .then(doGetAllOrderGoods)
  232. .then(function(info){
  233. cb(null,info.order);
  234. })
  235. .catch(function(err) {
  236. cb(err);
  237. });
  238. }