PendOrder.php 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. <?php
  2. /**
  3. * Niushop商城系统 - 团队十年电商经验汇集巨献!
  4. * =========================================================
  5. * Copy right 2019-2029 上海牛之云网络科技有限公司, 保留所有权利。
  6. * ----------------------------------------------
  7. * 官方网址: https://www.niushop.com
  8. * =========================================================
  9. */
  10. namespace addon\cashier\model\order;
  11. use app\model\BaseModel;
  12. use think\facade\Log;
  13. /**
  14. * 挂单
  15. *
  16. * @author Administrator
  17. *
  18. */
  19. class PendOrder extends BaseModel
  20. {
  21. /**
  22. * 添加
  23. * @param $param
  24. * @return array
  25. */
  26. public function add($param)
  27. {
  28. $res = $this->handleData($param);
  29. if ($res[ 'code' ] != 0) return $res;
  30. $param = $res[ 'data' ];
  31. model('cashier_pendorder')->startTrans();
  32. try {
  33. $order_id = model('cashier_pendorder')->add([
  34. 'site_id' => $param[ 'site_id' ],
  35. 'store_id' => $param[ 'store_id' ],
  36. 'member_id' => $param[ 'member_id' ] ?? 0,
  37. 'create_time' => time(),
  38. 'remark' => $param[ 'remark' ] ?? '',
  39. 'order_money' => $param[ 'order_money' ],
  40. 'discount_money' => $param[ 'discount_money' ] ?? 0.00,
  41. 'discount_data' => $param[ 'discount' ] ?? ''
  42. ]);
  43. $order_goods = [];
  44. foreach ($param[ 'goods' ] as $item) {
  45. array_push($order_goods, [
  46. 'order_id' => $order_id,
  47. 'site_id' => $param[ 'site_id' ],
  48. 'store_id' => $param[ 'store_id' ],
  49. 'goods_id' => $item[ 'goods_id' ],
  50. 'sku_id' => $item[ 'sku_id' ],
  51. 'num' => $item[ 'num' ],
  52. 'price' => $item[ 'price' ],
  53. 'goods_class' => $item[ 'goods_class' ]
  54. ]);
  55. }
  56. model('cashier_pendorder_goods')->addList($order_goods);
  57. model('cashier_pendorder')->commit();
  58. return $this->success($order_id);
  59. } catch (\Exception $e) {
  60. model('cashier_pendorder')->rollback();
  61. Log::write('挂单出现错误,错误原因:' . $e->getMessage() . $e->getFile() . $e->getLine());
  62. return $this->error();
  63. }
  64. }
  65. private function handleData($param)
  66. {
  67. $store_info = model('store')->getInfo([ [ 'site_id', '=', $param[ 'site_id' ] ], [ 'store_id', '=', $param[ 'store_id' ] ] ], 'store_id');
  68. if (empty($store_info)) return $this->error('', '门店不存在!');
  69. $param[ 'order_money' ] = 0;
  70. $join = [
  71. [ 'goods g', 'sku.goods_id=g.goods_id', 'inner' ],
  72. [ 'store_goods_sku sgs', 'sku.sku_id=sgs.sku_id and sgs.store_id=' . $param[ 'store_id' ], 'inner' ],
  73. ];
  74. foreach ($param[ 'goods' ] as $k => $item) {
  75. if (isset($item[ 'money' ]) && $item[ 'money' ] > 0) {
  76. $param[ 'goods' ][ $k ][ 'price' ] = round($item[ 'money' ], 2);
  77. $param[ 'goods' ][ $k ][ 'goods_class' ] = 'money';
  78. } else {
  79. $sku_info = model('goods_sku')->getInfo([ [ 'sku.sku_id', '=', $item[ 'sku_id' ] ] ], 'sku.goods_class,IF(g.is_unify_price = 1,sku.price,sgs.price) as price', 'sku', $join);
  80. if (empty($sku_info)) return $this->error('', '不存在的商品!');
  81. $param[ 'goods' ][ $k ][ 'price' ] = $sku_info[ 'price' ];
  82. $param[ 'goods' ][ $k ][ 'goods_class' ] = $sku_info[ 'goods_class' ];
  83. }
  84. $param[ 'order_money' ] += ( $param[ 'goods' ][ $k ][ 'price' ] * $item[ 'num' ] );
  85. }
  86. return $this->success($param);
  87. }
  88. /**
  89. * 编辑
  90. * @param $param
  91. */
  92. public function edit($param)
  93. {
  94. $res = $this->handleData($param);
  95. if ($res[ 'code' ] != 0) return $res;
  96. $param = $res[ 'data' ];
  97. model('cashier_pendorder')->startTrans();
  98. try {
  99. $condition = [
  100. [ 'site_id', '=', $param[ 'site_id' ] ],
  101. [ 'store_id', '=', $param[ 'store_id' ] ],
  102. [ 'order_id', '=', $param[ 'order_id' ] ]
  103. ];
  104. model('cashier_pendorder')->update([
  105. 'member_id' => $param[ 'member_id' ] ?? 0,
  106. 'remark' => $param[ 'remark' ] ?? '',
  107. 'order_money' => $param[ 'order_money' ],
  108. 'discount_money' => $param[ 'discount_money' ] ?? 0.00,
  109. 'discount_data' => $param[ 'discount' ] ?? ''
  110. ], $condition);
  111. model('cashier_pendorder_goods')->delete($condition);
  112. $order_goods = [];
  113. foreach ($param[ 'goods' ] as $item) {
  114. array_push($order_goods, [
  115. 'order_id' => $param[ 'order_id' ],
  116. 'store_id' => $param[ 'store_id' ],
  117. 'site_id' => $param[ 'site_id' ],
  118. 'goods_id' => $item[ 'goods_id' ],
  119. 'sku_id' => $item[ 'sku_id' ],
  120. 'num' => $item[ 'num' ],
  121. 'price' => $item[ 'price' ]
  122. ]);
  123. }
  124. model('cashier_pendorder_goods')->addList($order_goods);
  125. model('cashier_pendorder')->commit();
  126. return $this->success($param[ 'order_id' ]);
  127. } catch (\Exception $e) {
  128. model('cashier_pendorder')->rollback();
  129. Log::write('挂单出现错误,错误原因:' . $e->getMessage() . $e->getFile() . $e->getLine());
  130. return $this->error();
  131. }
  132. }
  133. /**
  134. * 挂单表编辑
  135. * @param $data
  136. * @param $where
  137. * @return array
  138. */
  139. public function update($data, $where)
  140. {
  141. $res = model('cashier_pendorder')->update($data, $where);
  142. if ($res) {
  143. return $this->success($res);
  144. } else {
  145. return $this->error();
  146. }
  147. }
  148. /**
  149. * 删除订单
  150. * @param $param
  151. */
  152. public function delete($param)
  153. {
  154. model('cashier_pendorder')->startTrans();
  155. try {
  156. $res = model('cashier_pendorder')->delete([
  157. [ 'site_id', '=', $param[ 'site_id' ] ],
  158. [ 'store_id', '=', $param[ 'store_id' ] ],
  159. [ 'order_id', '=', $param[ 'order_id' ] ]
  160. ]);
  161. if (!$res) {
  162. model('cashier_pendorder')->rollback();
  163. return $this->error();
  164. }
  165. model('cashier_pendorder_goods')->delete([ [ 'order_id', '=', $param[ 'order_id' ] ] ]);
  166. model('cashier_pendorder')->commit();
  167. return $this->success();
  168. } catch (\Exception $e) {
  169. model('cashier_pendorder')->rollback();
  170. Log::write('挂单删除出现错误,错误原因:' . $e->getMessage() . $e->getFile() . $e->getLine());
  171. return $this->error();
  172. }
  173. }
  174. /**
  175. * 查询挂单分页列表
  176. * @param array $condition
  177. * @param bool $field
  178. * @param string $order
  179. * @param int $page
  180. * @param int $list_rows
  181. * @param string $alias
  182. * @param array $join
  183. * @return array
  184. */
  185. public function getOrderPageList($condition = [], $field = true, $order = '', $page = 1, $list_rows = PAGE_LIST_ROWS, $alias = 'a', $join = [])
  186. {
  187. $data = model('cashier_pendorder')->pageList($condition, $field, $order, $page, $list_rows, $alias, $join);
  188. return $this->success($data);
  189. }
  190. /**
  191. * 查询挂单商品项列表
  192. * @param array $condition
  193. * @param bool $field
  194. * @param string $order
  195. * @param string $alias
  196. * @param array $join
  197. * @return array
  198. */
  199. public function getOrderGoodsList($condition = [], $field = true, $order = '', $alias = 'a', $join = [])
  200. {
  201. $list = model('cashier_pendorder_goods')->getList($condition, $field, $order, $alias, $join);
  202. foreach ($list as $k => $v) {
  203. if (isset($v[ 'num' ])) {
  204. $list[ $k ][ 'num' ] = numberFormat($list[ $k ][ 'num' ]);
  205. }
  206. }
  207. return $this->success($list);
  208. }
  209. }