ShareMoney.php 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249
  1. <?php
  2. /**
  3. * 重庆赤晓店信息科技有限公司
  4. * https://www.chixiaodian.com
  5. * Copyright (c) 2023 赤店商城 All rights reserved.
  6. */
  7. namespace app\models\common;
  8. use app\models\GoodsShare;
  9. use app\models\MchSetting;
  10. use app\models\Option;
  11. use app\models\Order;
  12. use app\models\OrderDetail;
  13. use app\models\OrderShare;
  14. use app\models\User;
  15. use app\models\UserShareMoney;
  16. use yii\base\Model;
  17. use yii\helpers\Json;
  18. class ShareMoney extends Model
  19. {
  20. public $order;
  21. public $order_type;
  22. public function setData()
  23. {
  24. // 区分分销设置,若商户存在,用商户的
  25. $setting = Option::get('share_money_setting', get_store_id());
  26. $setting = $setting ? Json::decode($setting['value']) : [];
  27. if (!$setting) {
  28. \Yii::warning('未开启分销设置1');
  29. return false;
  30. }
  31. // if (!is_array($setting['commission_type']) || empty($setting['commission_type'])) {
  32. // \Yii::warning('未开启分销设置2');
  33. // return false;
  34. // }
  35. // $commission_type = $setting['commission_type'];
  36. // // 订单分销 2
  37. // if (in_array(2, $commission_type)) {
  38. $this->setOrderProfit();
  39. // } else {
  40. // \Yii::warning('未开启订单佣金分销');
  41. // }
  42. // if (!in_array(1, $commission_type)) {
  43. // \Yii::warning('未开启会员佣金分销');
  44. // return false;
  45. // }
  46. $orderDetail = $this->getDetail();
  47. if (!$orderDetail) {
  48. \Yii::warning('订单详情不存在');
  49. return false;
  50. }
  51. $user = User::findOne($this->order->user_id);
  52. if (!$user) {
  53. \Yii::warning('订单用户不存在');
  54. return false;
  55. }
  56. $order = $this->order;
  57. /* @var $orderShare Order */
  58. $orderShare = $this->order;
  59. $cParent1 = $user->parent_id;
  60. $orderShare->parent_id = $cParent1;
  61. if ($user->parent_id) {
  62. $parent = User::findOne($user->parent_id);//上级
  63. $cParent2 = $parent->parent_id;
  64. $orderShare->parent_id_1 = $cParent2;
  65. if ($parent->parent_id) {
  66. $parent_1 = User::findOne($parent->parent_id);//上上级
  67. $cParent3 = $parent_1->parent_id;
  68. $orderShare->parent_id_2 = $cParent3;
  69. } else {
  70. $orderShare->parent_id_2 = -1;
  71. }
  72. } else {
  73. $orderShare->parent_id_1 = -1;
  74. $orderShare->parent_id_2 = -1;
  75. }
  76. // 旧关系记录
  77. if ($user->old_parent_id > 0) {
  78. $old_parent = User::findOne($user->old_parent_id);//上级
  79. $orderShare->old_parent_id = $old_parent->id;
  80. if ($old_parent->old_parent_id > 0) {
  81. $old_parent_1 = User::findOne($old_parent->old_parent_id);//上上级
  82. $orderShare->old_parent_id_1 = $old_parent_1->id;
  83. if ($old_parent_1->old_parent_id > 0) {
  84. $old_parent_2 = User::findOne($old_parent_1->old_parent_id);//上上级
  85. $orderShare->old_parent_id_2 = $old_parent_2->id;
  86. }
  87. }
  88. }
  89. $share_commission_money_first = 0;//一级分销总佣金
  90. $share_commission_money_second = 0;//二级分销总佣金
  91. $share_commission_money_third = 0;//三级分销总佣金
  92. foreach ($orderDetail as $item) {
  93. $item_price = doubleval($item['price']);
  94. if ($item['individual_share'] == 1) {
  95. $rate_first = doubleval($item['share_commission_first']);
  96. $rate_second = doubleval($item['share_commission_second']);
  97. $rate_third = doubleval($item['share_commission_third']);
  98. $shareType = $item['share_type'];
  99. } else {
  100. $setting_shara = Option::get('share_money_setting', $order->store_id, 'share');
  101. $setting_shara = $setting_shara ? Json::decode($setting_shara['value']) : [];
  102. $rate_first = doubleval($setting_shara['level_one']['value']);
  103. $rate_second = doubleval($setting_shara['level_two']['value']);
  104. $rate_third = doubleval($setting_shara['level_three']['value']);
  105. $shareType = $setting_shara['price_type'];
  106. }
  107. if ($shareType == 1) {
  108. $share_commission_money_first += $rate_first * $item['num'];
  109. $share_commission_money_second += $rate_second * $item['num'];
  110. $share_commission_money_third += $rate_third * $item['num'];
  111. } else {
  112. if($item_price == 0 && isset($this->order->type) && $this->order->type == 6){
  113. $share_commission_money_first = ($this->order->pay_price - $this->order->express_price) * $rate_first / 100;
  114. $share_commission_money_second = ($this->order->pay_price - $this->order->express_price) * $rate_second / 100;
  115. $share_commission_money_third = ($this->order->pay_price - $this->order->express_price) * $rate_third / 100;
  116. }else{
  117. $share_commission_money_first += $item_price * $rate_first / 100;
  118. $share_commission_money_second += $item_price * $rate_second / 100;
  119. $share_commission_money_third += $item_price * $rate_third / 100;
  120. }
  121. }
  122. }
  123. // 如果开启自购返利 一级是自己
  124. if ($setting['is_rebate']['value'] == 1 && $user->is_distributor == 1) {
  125. $orderShare->rebate = $share_commission_money_first < 0.01 ? 0 : $share_commission_money_first;
  126. $orderShare->first_price = $share_commission_money_second < 0.01 ? 0 : $share_commission_money_second;
  127. $orderShare->second_price = $share_commission_money_third < 0.01 ? 0 : $share_commission_money_third;
  128. $orderShare->third_price = 0;
  129. } else {
  130. $orderShare->rebate = 0;
  131. $orderShare->first_price = $share_commission_money_first < 0.01 ? 0 : $share_commission_money_first;
  132. $orderShare->second_price = $share_commission_money_second < 0.01 ? 0 : $share_commission_money_second;
  133. $orderShare->third_price = $share_commission_money_third < 0.01 ? 0 : $share_commission_money_third;
  134. }
  135. $res = $orderShare->save();
  136. if (!$res) {
  137. \Yii::warning('分销订单生成失败');
  138. }
  139. \Yii::warning('分销订单生成成功');
  140. return $res;
  141. }
  142. /**
  143. * 分红订单
  144. */
  145. protected function orderShare()
  146. {
  147. // 检测订单分红设置按钮是否打开
  148. $money_setting = Option::get('share_money_setting', get_store_id());
  149. $share_money_setting = $money_setting ? Json::decode($money_setting['value']) : [];
  150. if (!empty($share_money_setting['value']['commission_type'])) {
  151. $arr = $share_money_setting['value']['commission_type'];
  152. if (in_array(2, $arr)) {
  153. $order = $this->order;
  154. $expire_day = intval($share_money_setting['value']['expire_day']) * 24 * 3600;
  155. $expire_date = (int)$order->created_at + $expire_day;
  156. if (time() < $expire_date) {
  157. $model = new UserShareMoney();
  158. $rate = doubleval($share_money_setting['value']['scale']); //分成比例
  159. $money = ($order->pay_price - $order->express_price) * $rate / 100;
  160. $user_id = $order->user_id;
  161. $order_id = $order->id;
  162. $type = 0;
  163. $source = 5;
  164. $store_id = $order->store_id;
  165. $model->set($money, $user_id, $order_id, $type, $source, $store_id);
  166. }
  167. }
  168. }
  169. }
  170. /**
  171. * 获取各种类型订单详情
  172. * @return array|bool
  173. */
  174. private function getDetail()
  175. {
  176. return $this->getOrderDetail();
  177. }
  178. /**
  179. * 普通订单
  180. * @return array
  181. */
  182. private function getOrderDetail()
  183. {
  184. /* @var $order Order */
  185. $order = $this->order;
  186. /* @var $list OrderDetail */
  187. $list = OrderDetail::find()->where(['is_delete' => 0, 'order_id' => $order->id])->all();
  188. $newList = [];
  189. foreach ($list as $value) {
  190. $goods = $value->goods;
  191. $buyAttrList = Json::decode($value['attr']);
  192. if ($goods['attr_setting_type'] === 1) {
  193. $attrIdArr2 = [];
  194. foreach ($buyAttrList as $attrListItem2) {
  195. $attrIdArr2[] = $attrListItem2['attr_id'];
  196. }
  197. $goodsData = [
  198. 'attr' => $goods['attr'],
  199. 'price' => $goods['price'],
  200. 'is_level' => $goods['is_level'],
  201. ];
  202. $res = CommonGoods::currentGoodsAttr($goodsData, $attrIdArr2);
  203. $newItem = [
  204. 'individual_share' => $goods['individual_share'],
  205. 'share_commission_first' => $res['share_commission_first'],
  206. 'share_commission_second' => $res['share_commission_second'],
  207. 'share_commission_third' => $res['share_commission_third'],
  208. 'share_type' => $goods['share_type'],
  209. 'num' => $value['num'],
  210. 'price' => $value['total_price'],
  211. 'mch_id' => $goods['mch_id']
  212. ];
  213. } else {
  214. $newItem = [
  215. 'individual_share' => $goods['individual_share'],
  216. 'share_commission_first' => $goods['share_commission_first'],
  217. 'share_commission_second' => $goods['share_commission_second'],
  218. 'share_commission_third' => $goods['share_commission_third'],
  219. 'share_type' => $goods['share_type'],
  220. 'num' => $value['num'],
  221. 'price' => $value['total_price'],
  222. 'mch_id' => $goods['mch_id']
  223. ];
  224. }
  225. array_push($newList, $newItem);
  226. }
  227. return $newList;
  228. }
  229. }