RewardLogic.php 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. <?php
  2. namespace addons\SalesCompany\common\logic;
  3. use common\traits\ErrorTrait;
  4. use yii\db\Exception;
  5. use common\enums\StatusEnum;
  6. use common\models\order\Order;
  7. use common\models\user\User;
  8. use common\models\mall\MallAddons;
  9. use services\common\UserWalletService;
  10. use addons\SalesCompany\common\models\SalesCompany;
  11. use addons\SalesCompany\common\models\SalesCompanyAgent;
  12. use addons\SalesCompany\common\models\CommissionLog;
  13. use addons\SalesCompany\common\enums\SalesCompanyEnum;
  14. use common\models\order\OrderDetail;
  15. class RewardLogic
  16. {
  17. public static function toBeSettled($data){
  18. $log = CommissionLog::findOne(['source_table_id' => $data['source_table_id']]);
  19. if($log){
  20. throw new \Exception('已生成分佣记录');
  21. }
  22. //获取对应代理商所属销售公司
  23. $salesCompanyAgent = SalesCompanyAgent::findOne(['user_id' => $data['user_id'],'status'=>StatusEnum::ENABLED,'mall_id'=>$data['mall_id']]);
  24. if(!$salesCompanyAgent){
  25. throw new \Exception('该代理商未绑定销售公司,user_id:'.$data['user_id']);
  26. }
  27. $salesCompany = SalesCompany::findOne(['id' =>$salesCompanyAgent->company_id,'status'=>StatusEnum::ENABLED,'mall_id'=>$data['mall_id']]);
  28. if(!$salesCompany){
  29. throw new \Exception('销售公司不存在');
  30. }
  31. //平台抽佣
  32. $management_fee = 0;
  33. //获取配置
  34. $config = \Yii::$app->services->setting->addons->get($data['mall_id'], SalesCompanyEnum::ADDONS_NAME, 'basic');
  35. if($config && $config['management_fee']){
  36. $management_fee = $config['management_fee'];
  37. }
  38. $total_money = $data['price'] * $data['num'];
  39. $money = bcsub($total_money,$total_money * $management_fee / 100,2);
  40. //生成冻结日志
  41. $params = [
  42. 'mall_id' => $data['mall_id'],
  43. 'user_id' => $salesCompany->user_id,
  44. 'source_table' => $data['source_table'],
  45. 'source_table_id' => $data['source_table_id'],
  46. 'money' => $money,
  47. 'total_money' => $total_money,
  48. 'is_frozen' => $data['is_frozen'],
  49. 'rate' => $management_fee,
  50. 'agent_user_id' => $data['user_id'],
  51. 'desc' => $data['desc'],
  52. 'unit_goods_price' => $data['price'],
  53. 'num' => $data['num'],
  54. ];
  55. $res = CommissionLog::setData($params);
  56. if ($res === false){
  57. throw new \Exception('销售公司生成佣金记录失败'.CommissionLog::getStaticError());
  58. }
  59. if(!$data['is_frozen']){
  60. $insert_wallet[] = [
  61. 'mall_id' => $data['mall_id'],
  62. 'user_id' => $salesCompany->user_id,
  63. 'is_frozen' => false,
  64. 'wallet_type' => 'commission',
  65. 'money' => $money,
  66. 'desc' => '补货货款结算',
  67. 'source_table' => $data['source_table'],
  68. 'source_table_id' => $data['source_table_id'],
  69. 'from_type' => SalesCompanyEnum::ADDONS_NAME,
  70. 'capital_type' => 'sales_company',
  71. ];
  72. $res = UserWalletService::batchHandleByQueue($insert_wallet);
  73. if ($res === false){
  74. throw new \Exception('销售公司生成佣金记录失败'.CommissionLog::getStaticError());
  75. }
  76. }
  77. return true;
  78. }
  79. }