Order.php 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  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\allwin\model;
  9. use think\Model;
  10. use app\allwin\model\CouponUser; //用户优惠券
  11. use think\helper\Time;
  12. class Order extends Model{
  13. protected $pk = 'id';
  14. protected $table = 'ai_allwin_order';
  15. public function store(){
  16. return $this->hasOne('AllwinStore','id','store_id');
  17. }
  18. /**
  19. * 创建订单
  20. * @param array $param
  21. * @return void
  22. */
  23. public static function addOrder(array $param){
  24. $data = [];
  25. $data['member_miniapp_id'] = $param['member_miniapp_id'];
  26. $data['store_id'] = $param['store_id'];
  27. $data['uid'] = $param['uid'];
  28. $data['coupon_user_id'] = $param['user_couponr_id'];
  29. $data['coupon_ids'] = json_encode($param['coupon_ids']);
  30. $data['platform_amount'] = $param['platform_amount'];
  31. $data['user_amount'] = $param['user_amount'];
  32. $data['coupon_price'] = $param['coupon_price'];
  33. $data['store_amount'] = $param['store_amount'];
  34. $data['order_amount'] = $param['order_amount'];
  35. $data['order_no'] = $param['order_no'];
  36. $data['state'] = 0;
  37. $data['update_time'] = time();
  38. return model('order')->insertGetId($data);
  39. }
  40. /**
  41. * 计算器付款价格
  42. * @param array $param [计算参数]
  43. * @return type
  44. */
  45. public static function countPrice(array $param){
  46. $user_couponr_id = intval($param['user_couponr_id']);
  47. $user_id = intval($param['uid']);
  48. $money = floatval($param['money']); //用户默认付款价
  49. $amount = floatval($param['amount']); //前端计算付款价
  50. //我的优惠券
  51. $coupon_user = [];
  52. $coupon_user['member_miniapp_id'] = intval($param['member_miniapp_id']);
  53. $coupon_user['store_id'] = intval($param['store_id']);
  54. $coupon_user['id'] = $user_couponr_id;
  55. $coupon_user['uid'] = $user_id;
  56. $coupon_user['is_end'] = 0;
  57. $coupon_user_rel = CouponUser::field('longtime,user_size,price,types,weekday,howmuch,discount,starttime,endtime')->where($coupon_user)->find();
  58. //需要优惠的价格(分)
  59. $coupon_user_price = 0;
  60. if(!empty($coupon_user_rel)){
  61. if(time() < $coupon_user_rel->starttime || time() > $coupon_user_rel->endtime){
  62. return ['code'=>403,'msg'=>'优惠券未在有效期'];
  63. }
  64. list($start,$end) = Time::today();
  65. $count = model('CouponLog')->where(['coupon_id' => $user_couponr_id,'uid' => $user_id])->where('times','>=',$start)->count();
  66. if($count >= $coupon_user_rel->longtime){
  67. return ['code'=>403,'msg'=>'每天仅允许使用'.$count.'次'];
  68. }
  69. if($coupon_user_rel->types){//折扣
  70. $coupon_user_price = $money - $money * ($coupon_user_rel->discount/10);
  71. if ($coupon_user_price >= $coupon_user_rel->user_size) {
  72. $coupon_user_price = $coupon_user_rel->user_size;
  73. }
  74. }else{//抵扣
  75. if($money >= $coupon_user_rel->howmuch){
  76. if($coupon_user_rel->user_size >= $coupon_user_rel->price){
  77. $coupon_user_price = $coupon_user_rel->price;
  78. }else{
  79. $coupon_user_price = $coupon_user_rel->user_size;
  80. }
  81. }
  82. }
  83. }
  84. //领取的优惠券价格
  85. $coupon_price = 0;
  86. if(!empty($param['coupon_ids'])){
  87. $coupon['id'] = ids($param['coupon_ids'],true);
  88. $coupon_price = model('Coupon')->where($coupon)->where('num','>','0')->sum('pay_price');
  89. $coupon_price = $coupon_price;
  90. }
  91. $amount = $money - $coupon_user_price;
  92. $store_amount = $amount < 0 ? 0 : $amount;
  93. $order_amount = abs($store_amount + $coupon_price);
  94. $data = [
  95. 'coupon_user_price' => abs($coupon_user_price),
  96. 'store_amount' => abs($store_amount),
  97. 'platform_amount' => abs($coupon_price),
  98. 'user_amount' => abs($money),
  99. 'order_amount' => $order_amount <= 0 ? 0.01: $order_amount,
  100. ];
  101. return ['code'=>200,'msg'=>'成功','data' => $data];
  102. }
  103. }