Order.php 10.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  1. <?php
  2. /**
  3. * @copyright Copyright (c) 2017 https://www.sapixx.com All rights reserved.
  4. * @license Licensed (http://www.apache.org/licenses/LICENSE-2.0).
  5. * @author pillar<ltmn@qq.com>
  6. * 订单数据
  7. */
  8. namespace app\fastshop\model;
  9. use think\Model;
  10. use app\fastshop\model\Item;
  11. class Order extends Model{
  12. protected $pk = 'id';
  13. protected $table = 'ai_fastshop_order';
  14. protected $table_cache = 'fastshop_order_cache'; //订单商品缓存表
  15. protected $table_field = "A.id as order_id,A.is_point,A.is_entrust,A.user_id,A.is_del,A.is_fusion,A.status,A.order_no,A.real_freight,A.real_amount,A.order_endtime,A.order_starttime,A.order_amount,A.express_status,A.paid_at,A.paid_time,A.express_starttime,A.express_no,A.express_company,A.express_name,A.express_phone,A.express_address,B.*";
  16. //委托列表
  17. public function entrust(){
  18. return $this->hasOne('EntrustList','order_no','order_no');
  19. }
  20. //和活动主表管理的
  21. public function sale(){
  22. return $this->hasOne('Sale','id','sale_id');
  23. }
  24. //订单列表
  25. public function orderItem(){
  26. return $this->hasOne('OrderCache','order_no','order_no');
  27. }
  28. /**
  29. * 获取订单数据(单个订单预览)
  30. * 使用:前台查询用户自己的订单
  31. * @param string $order_no 订单ID
  32. * @param integer $user_id 要获取的订单用户
  33. * @param integer $type 要获取的订单状态
  34. * @return array
  35. */
  36. public function getOrder(string $order_no,int $user_id = 0,int $is_del = 1){
  37. if($user_id){
  38. $condition['user_id'] = $user_id;
  39. }
  40. if($is_del){
  41. $condition['is_del'] = 0;
  42. }
  43. $condition['B.order_no'] = $order_no;
  44. $order = self::alias('A')->join($this->table_cache.' B','A.order_no = B.order_no','LEFT')->field($this->table_field)->where($condition)->order('id desc')->select()->toArray();
  45. return self::order_data($order);
  46. }
  47. /**
  48. * 获取用户订单数据(用户订单管理)
  49. * @param integer $user_id 要获取的订单用户
  50. * @param integer $type 要获取的订单状态
  51. * @return array
  52. */
  53. public function getUserOrderList(int $user_id,int $type = 0){
  54. $condition['user_id'] = $user_id;
  55. $condition['is_del'] = 0;
  56. switch ($type) {
  57. case 1:
  58. $condition['paid_at'] = 1;
  59. $condition['is_entrust'] = 1;
  60. break;
  61. case 2:
  62. $condition['paid_at'] = 1;
  63. $condition['express_status'] = 1;
  64. $condition['status'] = 0;
  65. break;
  66. case 3:
  67. $condition['status'] = 1;
  68. break;
  69. default:
  70. $condition['paid_at'] = 1;
  71. break;
  72. }
  73. $order = self::alias('A')->join($this->table_cache.' B','A.order_no = B.order_no','LEFT')->field($this->table_field)->where($condition)->order('id desc')->paginate(10)->toArray();
  74. return self::order_data($order['data']);
  75. }
  76. /**
  77. * 根据条件查询订单(后台订单管理)
  78. * @param array $order_no
  79. * @return void
  80. */
  81. public function getOrderList(array $condition,$status = 0,int $page_number = 10){
  82. return self::view('fastshop_order','id as order_id,is_point,is_entrust,is_fusion,user_id,is_del,status,order_no,real_freight,real_amount,order_endtime,order_starttime,order_amount,express_status,paid_at,paid_time,express_starttime,express_no,express_company,express_name,express_phone,express_address')
  83. ->view('fastshop_order_cache','*','fastshop_order.order_no = fastshop_order_cache.order_no')
  84. ->where($condition)
  85. ->order('id desc')->paginate($page_number,false,['query'=>['status' => $status]]);
  86. }
  87. /**
  88. * 无翻页
  89. */
  90. public function getOrderListNopage(array $condition,$status = 0){
  91. return self::view('fastshop_order','id as order_id,is_point,is_entrust,is_fusion,user_id,is_del,status,order_no,real_freight,real_amount,order_endtime,order_starttime,order_amount,express_status,paid_at,paid_time,express_starttime,express_no,express_company,express_name,express_phone,express_address')
  92. ->view('fastshop_order_cache','*','fastshop_order.order_no = fastshop_order_cache.order_no')
  93. ->where($condition)
  94. ->order('id desc')->select();
  95. }
  96. /**
  97. * 订单数据处理(v1.0待清理)
  98. * @param array $data
  99. * @return array
  100. */
  101. public function order_data(array $data){
  102. $item = [];
  103. foreach ($data as $key => $value) {
  104. $sku['name'] = $value['name'];
  105. $sku['img'] = $value['img'];
  106. $sku['item_id'] = $value['item_id'];
  107. $sku['sale_price'] = money($value['sale_price']/100);
  108. $sku['amount'] = $sku['sale_price'];
  109. $item[$value['order_no']]['order_no'] = (string)$value['order_no'];
  110. $item[$value['order_no']]['id'] = $value['order_id'];
  111. $item[$value['order_no']]['user_id'] = $value['user_id'];
  112. $item[$value['order_no']]['is_entrust'] = $value['is_entrust'];
  113. $item[$value['order_no']]['is_point'] = $value['is_point'];
  114. $item[$value['order_no']]['is_fusion'] = $value['is_fusion'];
  115. $item[$value['order_no']]['status'] = $value['status'];
  116. $item[$value['order_no']]['status_text'] = self::status($value['status'],$value['paid_at'],$value['is_entrust'],$value['express_status']);
  117. $item[$value['order_no']]['is_del'] = $value['is_del'];
  118. $item[$value['order_no']]['real_freight'] = money($value['real_freight']);
  119. $item[$value['order_no']]['real_amount'] = money($value['real_amount']);
  120. $item[$value['order_no']]['order_amount'] = money($value['order_amount']);
  121. $item[$value['order_no']]['order_starttime'] = empty($value['order_starttime']) ? '' : date('Y-m-d H:i:s',$value['order_starttime']);
  122. $item[$value['order_no']]['order_endtime'] = empty($value['order_endtime']) ? '' : date('Y-m-d H:i',$value['order_endtime']);
  123. $item[$value['order_no']]['paid_at'] = $value['paid_at'];
  124. $item[$value['order_no']]['paid_time'] = date('Y-m-d H:i:s',$value['paid_time']);
  125. $item[$value['order_no']]['express_status'] = $value['express_status'];
  126. $item[$value['order_no']]['express_no'] = $value['express_no'];
  127. $item[$value['order_no']]['express_starttime'] = empty($value['express_starttime']) ? '' : date('Y-m-d H:i:s',$value['express_starttime']);
  128. $item[$value['order_no']]['express_company'] = $value['express_company'];
  129. $item[$value['order_no']]['express_name'] = $value['express_name'];
  130. $item[$value['order_no']]['express_phone'] = $value['express_phone'];
  131. $item[$value['order_no']]['express_address'] = $value['express_address'];
  132. $item[$value['order_no']]['item'] = $sku;
  133. $item[$value['order_no']]['gift'] = widget('fastshop/order/gift',['gift' => json_decode($value['gift'],true)]);
  134. $item[$value['order_no']]['entrust'] = json_decode($value['entrust'],true);
  135. $item[$value['order_no']]['fusion_state'] = $value['fusion_state'];
  136. }
  137. return $item;
  138. }
  139. /**
  140. * 状态数字变文字(前台待清理)
  141. * @return void
  142. */
  143. protected function status($status,$paid_at,$is_entrust,$express_status){
  144. if($status == 0){
  145. if($paid_at == 1){
  146. if($is_entrust == 0){
  147. $status_text = '待确认';
  148. }else{
  149. if($express_status == 0){
  150. $status_text = '待收货';
  151. }else{
  152. $status_text = '已发货';
  153. }
  154. }
  155. }else{
  156. $status_text = '待付款';
  157. }
  158. }else{
  159. $status_text = '订单结束';
  160. }
  161. return $status_text;
  162. }
  163. /**
  164. * 状态数字变文字(前台)
  165. * @return void
  166. */
  167. public static function statuText($status,$paid_at,$is_entrust,$express_status){
  168. if($status == 0){
  169. if($paid_at == 1){
  170. if($is_entrust == 0){
  171. $status_text = '待确认';
  172. }else{
  173. if($express_status == 0){
  174. $status_text = '待收货';
  175. }else{
  176. $status_text = '已发货';
  177. }
  178. }
  179. }else{
  180. $status_text = '待付款';
  181. }
  182. }else{
  183. $status_text = '订单结束';
  184. }
  185. return $status_text;
  186. }
  187. /**
  188. * 读取订单的赠品价格和所属产品图片数据
  189. */
  190. public static function gift(array $gift){
  191. $gift_id = array_column($gift,'item_id');
  192. $list = Item::field('id,name,img,imgs,content,weight')->whereIn('id',$gift_id)->select()->toArray();
  193. $gift_data = [];
  194. foreach ($gift as $k => $v) {
  195. $gift_value['item_id'] = $v['item_id'];
  196. $gift_value['sale_price'] = money($v['sale_price']/100);
  197. $gift_value['market_price'] = money($v['market_price']/100);
  198. foreach ($list as $value) {
  199. if ($v['item_id'] == $value['id']) {
  200. $gift_data[$k] = array_merge($value,$gift_value);
  201. $gift_data[$k]['img'] = $value['img']."?x-oss-process = style/auto";
  202. $gift_data[$k]['imgs'] = json_decode($value['imgs'],true);
  203. $gift_data[$k]['weight'] = $value['weight'];
  204. $gift_data[$k]['content'] = $value['content'];
  205. }
  206. }
  207. }
  208. return $gift_data;
  209. }
  210. }