MdProfit.php 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. <?php
  2. /**
  3. * 厦门云联储网络科技有限公司
  4. * https://www.baokuaiyun.com
  5. * Copyright (c) 2023 爆块云 All rights reserved.
  6. */
  7. namespace app\models;
  8. use yii\db\ActiveRecord;
  9. use yii\behaviors\TimestampBehavior;
  10. use Yii;
  11. /**
  12. * This is the model class for table "{{%md_profit}}".
  13. *
  14. * @property integer $id
  15. * @property integer $store_id
  16. * @property integer $saas_user_id
  17. * @property integer $md_id
  18. * @property integer $order_id
  19. * @property integer $sale_profit
  20. * @property integer $clerk_profit
  21. * @property integer $pay_profit
  22. * @property integer $total_profit
  23. * @property integer $original_price
  24. * @property integer $md_price
  25. * @property integer $rate
  26. * @property integer $level_rate
  27. * @property integer $is_send
  28. * @property integer $created_at
  29. * @property integer $clerk_rate
  30. * @property integer $updated_at
  31. * @property integer $is_clerk
  32. * @property integer $clerk_id
  33. */
  34. class MdProfit extends \yii\db\ActiveRecord
  35. {
  36. /**
  37. * @inheritdoc
  38. */
  39. public static function tableName()
  40. {
  41. return '{{%md_profit}}';
  42. }
  43. public function behaviors()
  44. {
  45. return [
  46. [
  47. 'class' => TimestampBehavior::class,
  48. 'attributes' => [
  49. ActiveRecord::EVENT_BEFORE_INSERT => ['created_at'],
  50. ActiveRecord::EVENT_BEFORE_UPDATE => ['updated_at']
  51. ]
  52. ]
  53. ];
  54. }
  55. /**
  56. * @inheritdoc
  57. */
  58. public function rules()
  59. {
  60. return [
  61. [['store_id', 'order_id', 'md_id', 'created_at', 'is_send', 'is_clerk', 'saas_user_id', 'clerk_id'], 'integer'],
  62. [['clerk_rate', 'rate', 'total_profit', 'pay_profit', 'sale_profit', 'original_price', 'md_price', 'level_rate', 'clerk_profit'], 'number'],
  63. [['created_at', 'updated_at'], 'safe']
  64. ];
  65. }
  66. /**
  67. * 利润计算入表
  68. * @param $order_id
  69. * @param $original_price
  70. * @param $md_price
  71. */
  72. public static function handleProfit($order_id, $original_price, $md_price, $md_id = null) {
  73. Yii::warning(['订单id:' . $order_id . '门店收入计算', [$order_id, $original_price, $md_price, $md_id]]);
  74. $md_id = $md_id ? $md_id : get_md_id();
  75. $md = Md::findOne($md_id);
  76. $order = Order::findOne($order_id);
  77. $store_id = $order->store_id ?: get_store_id();
  78. $user = User::findOne($order->user_id);
  79. $profit = new self();
  80. $profit->order_id = $order_id;
  81. $profit->store_id = $store_id;
  82. $profit->saas_user_id = SaasUser::findOne(['mobile' => $user->binding])->id ?: 0;
  83. $profit->md_id = $md_id;
  84. $clerk_profit = $pay_profit = $sale_profit = 0;
  85. $goods = OrderDetail::find()->alias('od')
  86. ->leftJoin(Goods::tableName() . ' g', "g.id=od.goods_id and g.is_delete=0")
  87. ->where(['od.order_id' => $order_id])
  88. ->select('g.md_rate,g.md_rate_type,g.md_hx_rate,g.md_hx_rate_type,od.total_price')
  89. ->asArray()->all();
  90. if ($order->is_offline) {
  91. foreach ($goods as $v) {
  92. if ($v['md_hx_rate'] > 0) {
  93. if (!empty($v['md_hx_rate_type'])) {
  94. $clerk_profit += floatval($v['md_hx_rate']);
  95. } else {
  96. $clerk_profit += floatval($v['total_price'] * $v['md_hx_rate'] / 100);
  97. }
  98. } else {
  99. $clerk_profit += floatval($v['total_price'] * $md->clerk_rate / 100);
  100. }
  101. }
  102. // $clerk_profit += floatval($order->pay_price * $md->clerk_rate / 100);
  103. $profit->clerk_profit = $clerk_profit ?? 0;
  104. $profit->rate = $md->rate ?? 0;
  105. $profit->clerk_rate = $md->clerk_rate ?? 0;
  106. $profit->is_clerk = 1;
  107. } else {
  108. foreach ($goods as $v) {
  109. if ($v['md_rate'] > 0) {
  110. if (!empty($v['md_rate_type'])) {
  111. $pay_profit += floatval($v['md_rate']);
  112. } else {
  113. $pay_profit += floatval($v['total_price'] * $v['md_rate'] / 100);
  114. }
  115. } else {
  116. $pay_profit += floatval($v['total_price'] * $md->rate / 100);
  117. }
  118. }
  119. $sale_profit = $md_price - $original_price > 0 ? floatval(($md_price - $original_price) * $order->discount / 10) : 0;
  120. $profit->sale_profit = $sale_profit;
  121. // $pay_profit = floatval($order->pay_price * $md->rate / 100);
  122. $profit->pay_profit = $pay_profit ?? 0;
  123. $profit->rate = $md->rate ?? 0;
  124. }
  125. $profit->total_profit = ($sale_profit + $pay_profit + $clerk_profit) ?? 0;
  126. $profit->original_price = $original_price ?? 0;
  127. $profit->md_price = $md_price ?? 0;
  128. $profit->level_rate = $order->discount ?? 0;
  129. $profit->save();
  130. }
  131. }