SuperSalesMoney.php 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246
  1. <?php
  2. namespace app\models;
  3. use yii\behaviors\TimestampBehavior;
  4. use yii\db\ActiveRecord;
  5. /**
  6. * @property integer $id
  7. * @property integer $store_id
  8. * @property integer $order_id
  9. * @property integer $sales_id
  10. * @property integer $sales_sub_id
  11. * @property integer $user_id
  12. * @property integer $type
  13. * @property integer $status
  14. * @property float $money
  15. * @property string $send_time
  16. * @property string $created_at
  17. * @property string $updated_at
  18. */
  19. class SuperSalesMoney extends \yii\db\ActiveRecord
  20. {
  21. /**
  22. * 佣金类型:直推奖
  23. */
  24. const TYPE_DIRECT_AWARD = 0;//direct_award
  25. /**
  26. * 佣金类型:分红奖
  27. */
  28. const TYPE_DIVIDEND_AWARD = 1;
  29. /**
  30. * 佣金类型:成团奖
  31. */
  32. const TYPE_GROUP_AWARD = 2;//group_award
  33. public static array $typeMap = [
  34. self::TYPE_DIRECT_AWARD => '推荐奖',
  35. // self::TYPE_DIVIDEND_AWARD => '分红奖',
  36. self::TYPE_GROUP_AWARD => '分红奖'
  37. ];
  38. /**
  39. * 佣金状态:未发放
  40. */
  41. const STATUS_NOT_SEND = 0;
  42. /**
  43. * 佣金状态:已发放
  44. */
  45. const STATUS_SEND = 1;
  46. /**
  47. * @inheritdoc
  48. */
  49. public static function tableName()
  50. {
  51. return '{{%super_sales_money}}';
  52. }
  53. public function behaviors()
  54. {
  55. return [
  56. [
  57. 'class' => TimestampBehavior::class
  58. ]
  59. ];
  60. }
  61. public function rules()
  62. {
  63. return [
  64. [['id', 'store_id', 'sales_id', 'sales_sub_id', 'user_id', 'type', 'status', 'order_id'], 'integer'],
  65. [['money'], 'number'],
  66. [['created_at', 'updated_at', 'send_time'], 'string']
  67. ];
  68. }
  69. public function attributeLabels()
  70. {
  71. return [
  72. 'id' => '',
  73. 'store_id' => '商城ID',
  74. 'order_id' => '订单ID',
  75. 'sales_id' => '开团ID',
  76. 'sales_sub_id' => '团员信息表ID(参与表ID)',
  77. 'user_id' => '奖金获取人用户ID',
  78. 'type' => '佣金类型:0=直推奖;1=分红奖;2=成团奖;',
  79. 'status' => '状态:0=未发放;1=已发放;',
  80. 'send_time' => '发放时间',
  81. 'money' => '金额',
  82. 'created_at' => '',
  83. 'updated_at' => '',
  84. ];
  85. }
  86. public static function addMoney($store_id, $order_id, $sales_id, $sales_sub_id, $user_id, $money, $type) {
  87. $super_sales_money = self::findOne(['sales_sub_id' => $sales_sub_id, 'type' => $type]);
  88. if ($super_sales_money) {
  89. return [
  90. 'code' => 1,
  91. 'msg' => '该奖金已经添加'
  92. ];
  93. }
  94. $super_sales_money = new self();
  95. $super_sales_money->user_id = $user_id;
  96. $super_sales_money->store_id = $store_id;
  97. $super_sales_money->order_id = $order_id;
  98. $super_sales_money->sales_id = $sales_id;
  99. $super_sales_money->sales_sub_id = $sales_sub_id;
  100. $super_sales_money->type = $type;
  101. $super_sales_money->status = self::STATUS_NOT_SEND;
  102. $super_sales_money->money = $money;
  103. if ($super_sales_money->save()) {
  104. return [
  105. 'code' => 0,
  106. 'msg' => '添加成功'
  107. ];
  108. }
  109. return [
  110. 'code' => 1,
  111. 'msg' => implode(';', array_values($super_sales_money->firstErrors))
  112. ];
  113. }
  114. public static function sendMoney($order) {
  115. $t = \Yii::$app->db->beginTransaction();
  116. try {
  117. //发放直推奖
  118. $data = self::find()->where(['order_id' => $order->id, 'status' => self::STATUS_NOT_SEND, 'type' => self::TYPE_DIRECT_AWARD])
  119. ->select('id, order_id, user_id, money, type')->asArray()->all();
  120. foreach ($data as $item) {
  121. $order = Order::findOne($item['order_id']);
  122. if (!intval($order->is_sale)) {
  123. continue;
  124. }
  125. $user = User::findOne($item['user_id']);
  126. if (!$user) {
  127. continue;
  128. }
  129. $superSalesUser = SuperSalesUser::findOne(['user_id' => $item['user_id']]);
  130. if (!$superSalesUser) {
  131. continue;
  132. }
  133. // if (intval($item['type']) === self::TYPE_GROUP_AWARD) {
  134. // $superSalesUser->group_award = bcadd($superSalesUser->group_award, $item['money'], 2);
  135. // } else {
  136. // $superSalesUser->direct_award = bcadd($superSalesUser->group_award, $item['money'], 2);
  137. // }
  138. $superSalesUser->updateCounters(['price' => $item['money'], 'direct_award' => $item['money']]);
  139. // $superSalesUser->price = bcadd($superSalesUser->price, $item['money'], 2);
  140. // if (!$superSalesUser->save()) {
  141. // throw new \Exception(implode(';', array_values($superSalesUser->firstErrors)));
  142. // }
  143. // $result = AccountLog::saveLog($item['user_id'], $item['money'], AccountLog::TYPE_BALANCE,
  144. // AccountLog::LOG_TYPE_INCOME, AccountLog::TYPE_PLATFORM_ORDER,
  145. // $order->id, "商城订单超级卖货系统返佣收入, 订单号:{$order->order_no}");
  146. //
  147. // if (!$result) {
  148. // throw new \Exception('用户账户打款失败');
  149. // }
  150. // $user->price = bcadd($user->price, $item['money'], 2);
  151. // $user->total_price = bcadd($user->total_price, $item['money'], 2);
  152. // if (!$user->save()) {
  153. // throw new \Exception(json_encode($user->errors, JSON_UNESCAPED_UNICODE));
  154. // }
  155. $user->updateCounters(['price' => $item['money'], 'total_price' => $item['money']]);
  156. $result = UserShareMoney::set($item['money'], $user->id, 0, 0, 13, $user->store_id, 0, "商城订单超级卖货系统返佣收入, 订单号:{$order->order_no}");
  157. if (!$result) {
  158. throw new \Exception('保存失败');
  159. }
  160. $superSalesMoney = self::findOne($item['id']);
  161. $superSalesMoney->status = self::STATUS_SEND;
  162. $superSalesMoney->send_time = (string)time();
  163. if (!$superSalesMoney->save()) {
  164. throw new \Exception(implode(';', array_values($superSalesMoney->firstErrors)));
  165. }
  166. }
  167. //判断成团奖是否满足发放条件 并发放成团奖励
  168. $groupMoney = self::findOne(['order_id' => $order->id, 'type' => self::TYPE_GROUP_AWARD, 'status' => self::STATUS_NOT_SEND]);
  169. if ($groupMoney) {
  170. $is_not_send_direct = self::findOne([
  171. 'sales_id' => $groupMoney->sales_id,
  172. 'type' => self::TYPE_DIRECT_AWARD,
  173. 'status' => self::STATUS_NOT_SEND
  174. ]);
  175. //查询是否存在直推奖未发放的情况 未发放表示没有过售后期
  176. if (!$is_not_send_direct) {
  177. $order = Order::findOne($groupMoney->order_id);
  178. if (intval($order->is_sale)) {
  179. $user = User::findOne($groupMoney->user_id);
  180. if ($user) {
  181. $superSalesUser = SuperSalesUser::findOne(['user_id' => $groupMoney->user_id]);
  182. if ($superSalesUser) {
  183. // $superSalesUser->group_award = bcadd($superSalesUser->group_award, $groupMoney->money, 2);
  184. // $superSalesUser->price = bcadd($superSalesUser->price, $groupMoney->money, 2);
  185. // if (!$superSalesUser->save()) {
  186. // throw new \Exception(implode(';', array_values($superSalesUser->firstErrors)));
  187. // }
  188. $superSalesUser->updateCounters(['group_award' => $groupMoney->money]);//'price' => $groupMoney->money 这个不要了 因为是打款到余额就不需要统计到总佣金了
  189. $result = AccountLog::saveLog($groupMoney->user_id, $groupMoney->money, AccountLog::TYPE_BALANCE,
  190. AccountLog::LOG_TYPE_INCOME, AccountLog::TYPE_PLATFORM_ORDER,
  191. $order->id, "商城订单超级卖货系统成团奖返佣收入, 订单号:{$order->order_no}");
  192. if (!$result) {
  193. throw new \Exception('用户账户打款失败');
  194. }
  195. $groupMoney->status = self::STATUS_SEND;
  196. $groupMoney->send_time = (string)time();
  197. if (!$groupMoney->save()) {
  198. throw new \Exception(implode(';', array_values($groupMoney->firstErrors)));
  199. }
  200. }
  201. }
  202. }
  203. }
  204. }
  205. $t->commit();
  206. return [
  207. 'code' => 0,
  208. 'msg' => '已发放完成'
  209. ];
  210. } catch (\Exception $e) {
  211. $t->rollBack();
  212. return [
  213. 'code' => 1,
  214. 'msg' => $e->getMessage()
  215. ];
  216. }
  217. }
  218. }