Order.php 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | 萤火商城系统 [ 致力于通过产品和服务,帮助商家高效化开拓市场 ]
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2017~2021 https://www.yiovo.com All rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Licensed 这不是一个自由软件,不允许对程序代码以任何形式任何目的的再发行
  8. // +----------------------------------------------------------------------
  9. // | Author: 萤火科技 <admin@yiovo.com>
  10. // +----------------------------------------------------------------------
  11. declare (strict_types = 1);
  12. namespace app\common\service;
  13. use app\api\model\card\UserRiceCard as UserRiceCardModel;
  14. use app\common\model\user\CommissionsDetail;
  15. use app\common\enum\order\OrderStatus as OrderStatusEnum;
  16. use app\common\model\ConfigPercent as ConfigPercentModel;
  17. use app\common\model\OrderGoods as OrderGoodsModel;
  18. use app\store\model\User as UserModel;
  19. use app\store\model\UserCoupon as UserCouponModel;
  20. use app\common\model\Order as OrderModel;
  21. use app\common\service\goods\source\Factory as FactoryStock;
  22. use app\common\enum\order\OrderSource;
  23. /**
  24. * 订单服务类
  25. * Class Order
  26. * @package app\common\service
  27. */
  28. class Order extends BaseService
  29. {
  30. /**
  31. * 生成订单号
  32. * @return string
  33. */
  34. public static function createOrderNo($prefix='rw')
  35. {
  36. return $prefix.date('Ymd') . substr(implode(NULL, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, 8);
  37. }
  38. /**
  39. * 生成核销码
  40. * 生成规则:1Q6A3nr96D0b4B0599
  41. * @return string
  42. */
  43. public static function createHxCode($prefix='')
  44. {
  45. // return $prefix.date('Ymd') . substr(implode(NULL, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, 8);
  46. // $len = 8;
  47. // $chars='ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz';
  48. // $string=(string)time();
  49. // for(;$len>=1;$len--)
  50. // {
  51. // $position=rand()%strlen($chars);
  52. // $position2=rand()%strlen($string);
  53. // $string=substr_replace($string,substr($chars,$position,1),$position2,0);
  54. // }
  55. $string = uniqid($prefix);
  56. return $string;
  57. }
  58. /**
  59. * 生成订单号
  60. * @return string
  61. */
  62. public static function createOrderNoPrefix($prefix='rw')
  63. {
  64. // $env = env('APP_ENV','product')??'product';
  65. $env = '';
  66. return $env.$prefix.date('YmdHis') . substr(implode(NULL, array_map('ord', str_split(strrev(substr(uniqid(), 7, 13)), 1))), 0, 6);
  67. }
  68. /**
  69. * 事件:订单取消
  70. * @param OrderModel $order
  71. */
  72. public static function cancelEvent(OrderModel $order)
  73. {
  74. // 回退商品库存
  75. FactoryStock::getFactory($order['order_source'])->backGoodsStock($order, true);
  76. // 回退多个活动的活动库存
  77. if($order['order_source']==OrderSource::MASTER){
  78. FactoryStock::getFactory($order['order_source'])->backActivityStock($order, true);
  79. }
  80. // 回退用户优惠券
  81. $order['coupon_id'] > 0 && UserCouponModel::setIsUse($order['coupon_id'], false);
  82. //回退福利状态zq
  83. if ($order['coupon_id'] > 0)UserCouponModel::setWelfareStatus((int)$order['couponId'],0);
  84. // 回退用户积分
  85. if ($order['points_num'] > 0) {
  86. $describe = "订单取消:{$order['order_no']}";
  87. UserModel::setIncPoints($order['user_id'], $order['points_num'], $describe);
  88. }
  89. //回退冻结中的金米粒
  90. $order['gold_rice_amount'] > 0 && UserModel::setIncDecByField($order['user_id'],['gold_rice'=>(float)$order['gold_rice_amount']],['gold_rice_frozen'=>(float)$order['gold_rice_amount']]);
  91. // 回退冻结的现金卡
  92. $order['rice_card_id'] > 0 && UserRiceCardModel::setIncDecByField($order['rice_card_id'],['balance'=>(float)$order['rice_card_money']],['frozen_amount'=>(float)$order['rice_card_money']]);
  93. }
  94. /**
  95. * 计算平台让利的 分润金额
  96. * @param $orderGoods
  97. * @return float|int
  98. * @throws \think\db\exception\DataNotFoundException
  99. * @throws \think\db\exception\DbException
  100. * @throws \think\db\exception\ModelNotFoundException
  101. * @author: zjwhust
  102. * @Time: 2021/10/12 11:22
  103. */
  104. public static function getPoolMoney($orderGoods){
  105. //获取平台让利比例
  106. $percents = (new ConfigPercentModel)->find(1);
  107. $ticketRate = $percents->ticket_rate;
  108. $platformRate = $percents->platform_rate;
  109. //每笔订单 分给推广者(门店 、 消费者)的总佣金 = (售价 - 结算价 - 发票税费金额 ) * 平台让利比例;
  110. $poolMoney = $orderGoods['total_pay_price'] - $orderGoods['clearing_price']*$orderGoods['total_num'] - $orderGoods['total_pay_price']*$ticketRate/100;
  111. if($orderGoods['platform_rate'] > 0){
  112. $platformRate = $orderGoods['platform_rate'];
  113. }
  114. return $poolMoney*$platformRate/100;
  115. }
  116. //关闭订单状态
  117. public function closeOrder($order_id){
  118. //判断订单下面的商品是否都已全额退款
  119. $count = OrderGoodsModel::where('order_id',$order_id)->where('has_refund_full',0)->where('goods_type','<>',20)->count();
  120. if(!$count){
  121. //订单修改成已关闭
  122. OrderModel::updateBase(['order_status' => OrderStatusEnum::CLOSE, 'finished_refund' => 1], ['order_id'=>$order_id]);
  123. //全部退款的订单分佣记录变更不结算v1.3.92
  124. CommissionsDetail::updateAllDetails($order_id);
  125. return true;
  126. }
  127. }
  128. }