Order.php 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: Gold
  5. * Date: 2024/1/16
  6. * Time: 9:25
  7. */
  8. namespace app\api\controller;
  9. use app\admin\model\order\Order as OrderModel; //订单
  10. use app\admin\model\order\OrderGoods; //订单商品
  11. use app\admin\model\books\Books; //教材
  12. use app\admin\model\video\Video; //教材
  13. use app\common\controller\Api;
  14. use think\Db;
  15. class Order extends Api
  16. {
  17. protected $noNeedRight = ['*'];
  18. /**
  19. * 创建订单
  20. *
  21. */
  22. public function createOrder(){
  23. $data = input();
  24. $uid = $this->auth->id;
  25. $OrderModel = new OrderModel();
  26. $OrderGoods = new OrderGoods();
  27. $Books = new Books();
  28. $Video = new Video();
  29. if(!isset($data['type']) || !$data['goods_id']) $this->error('参数错误');
  30. if($data['type'] == '0'){
  31. $total_price = $Books->where('id','in',$data['goods_id'])->sum('price');
  32. }else if($data['type'] == '1'){
  33. $total_price = $Video->where('id','in',$data['goods_id'])->sum('price');
  34. }
  35. // return $total_price;
  36. $order_arr = [
  37. 'user_id' => $uid,
  38. 'order_on' => $this->get_order_sn(),
  39. 'type' => $data['type'],
  40. 'total_price' => $total_price
  41. ];
  42. Db::startTrans();
  43. try {
  44. $save = $OrderModel->save($order_arr);
  45. $goods_id = explode(',',$data['goods_id']);
  46. if(count($goods_id) > 1){
  47. foreach ($goods_id as $k => $v){
  48. if($data['type'] == 0){
  49. $price = $Books->where('id',$v)->column('price');
  50. $arr = [
  51. 'order_id' => $OrderModel->id,
  52. 'goods_type' => $data['type'],
  53. 'goods_id' => $v,
  54. 'price' => (int)$price[0],
  55. ];
  56. $OrderGoods = new OrderGoods();
  57. $OrderGoods->save($arr);
  58. }else if($data['type'] == 1){
  59. $price = $Video->where('id',$v)->column('price');
  60. $arr = [
  61. 'order_id' => $OrderModel->id,
  62. 'goods_type' => $data['type'],
  63. 'goods_id' => $v,
  64. 'price' => (int)$price[0],
  65. ];
  66. $OrderGoods = new OrderGoods();
  67. $OrderGoods->save($arr);
  68. }
  69. }
  70. }
  71. Db::commit();
  72. } catch (Exception $e) {
  73. $this->setError($e->getMessage());
  74. Db::rollback();
  75. return false;
  76. }
  77. $this->success('操作成功',$OrderModel);
  78. }
  79. /**
  80. * 创建订单
  81. *
  82. */
  83. public function getOrderList(){
  84. $data = input();
  85. $where = [];
  86. $uid = $this->auth->id;
  87. $OrderModel = new OrderModel();
  88. if(!isset($data['page']) || $data['page'] == '' || $data['page'] == null){
  89. $page = 1;
  90. }else{
  91. $page = $data['page'];
  92. }
  93. if(!isset($data['limit']) || $data['limit'] == '' || $data['limit'] == null){
  94. $limit = 20;
  95. }else{
  96. $limit = $data['limit'];
  97. }
  98. if(isset($data['status']) && $data['status'] != '' && $data['status'] != null){
  99. $where['status'] = $data['status'];
  100. }
  101. $where['user_id'] = $uid;
  102. $list = $OrderModel->where($where)->with(['goods'])->paginate([
  103. 'list_rows'=> $limit,
  104. 'page' => $page,
  105. ]);
  106. $lists = $list->toArray();
  107. foreach ($lists['data'] as $key => $item){
  108. foreach ($item['goods'] as $k => $v){
  109. if($v['goods_type'] == 0){
  110. $Books = new Books();
  111. $lists['data'][$key]['goods'][$k]['good_item'] = $Books->where('id',$v['goods_id'])->field('id,title,image,book_type,is_new_recommend,author,is_awards,price,entity_price,createtime,updatetime,level_id,arrangement_id,speciality_id,series_id,is_series')->find();
  112. }else if($v['goods_type'] == 1){
  113. $Video = new Video();
  114. $lists['data'][$key]['good_item'] = $Video->where('id',$v['goods_id'])->find();
  115. }
  116. }
  117. }
  118. $this->success('操作成功',$lists);
  119. }
  120. /**
  121. * 生成订单号
  122. *
  123. */
  124. public function get_order_sn(){
  125. $order_id_main = date('YmdHis') . rand(10000000,99999999);
  126. $order_id_len = strlen($order_id_main);
  127. $order_id_sum = 0;
  128. for($i=0; $i<$order_id_len; $i++){
  129. $order_id_sum += (int)(substr($order_id_main,$i,1));
  130. }
  131. $osn = $order_id_main . str_pad((100 - $order_id_sum % 100) % 100,2,'0',STR_PAD_LEFT);
  132. return $osn;
  133. }
  134. }