CurrencyCoin.php 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. <?php
  2. /**
  3. * 厦门云联储网络科技有限公司
  4. * https://www.baokuaiyun.com
  5. * Copyright (c) 2023 爆块云 All rights reserved.
  6. */
  7. namespace app\models;
  8. use app\constants\OptionSetting;
  9. use app\plugins\scanCodePay\models\Order as ScanCodePayOrder;
  10. use app\plugins\scanCodePay\models\Order as ScanOrder;
  11. use yii\db\ActiveRecord;
  12. use yii\behaviors\TimestampBehavior;
  13. use Yii;
  14. use yii\db\Exception;
  15. use yii\helpers\Json;
  16. /**
  17. * This is the model class for table "{{%currency_coin}}".
  18. *
  19. * @property integer $id ID
  20. * @property integer $store_id 店铺ID
  21. * @property string $unit 币种单位
  22. * @property string $name 币种名称
  23. * @property integer $scale 精度
  24. * @property string $guid_price 指导价
  25. * @property string $exchange_price USDT价
  26. * @property string $code 币种代码
  27. * @property string $symbol 图标
  28. * @property string $plugin_code 插件代码
  29. * @property string $logo 图标
  30. * @property string $exchange_rate 兑换比例
  31. * @property integer $enable 是否启用 【1是 0否】
  32. * @property integer $enable_bussiness_mode 是否支持商业模式【1是 0否】
  33. * @property integer $enable_goods_deduct 是否支持商品抵扣【1是 0否】
  34. * @property string $remark 备注
  35. * @property integer $is_transfer 是否支持转账
  36. * @property integer $transfer_fee_rate 转账手续费
  37. * @property string $type 币种类型
  38. * @property integer $enable_balance 币种转余额开关
  39. * @property integer $enable_draw
  40. * @property string $balance_rate 币种转余额比例
  41. * @property string $draw_fee_ratio
  42. * @property integer $draw_comfirm
  43. * @property string $balance_fee_ratio 币种转余额手续费
  44. * @property integer $enable_transmit 币种转送开关
  45. * @property string $transmit_rate 币种转送手续费比例
  46. * @property integer $transmit_user_type 转送权限:0-不限,1-团队上下级
  47. * @property integer $enable_exchange
  48. * @property integer $ts_cardinal_number 转送基数
  49. * @property integer $ex_cardinal_number 兑换基数
  50. * @property string $remainder 无质押需要剩余
  51. * @property integer $created_at
  52. * @property integer $updated_at
  53. * @property string $cny_price
  54. * @property string $contract_address
  55. * @property integer $is_auto_pay 自动打款
  56. * @property string $private_key
  57. * @property string $auto_pay_address 打币地址
  58. * @property string $allinfo
  59. * @property string $issue_quantity
  60. * @property integer $is_open_one 是否开放兑换
  61. * @property integer $dividend_switch 币种进入分红池开关
  62. * @property string $rights_amplify_ratio 确权放大比例基数
  63. * @property string $scan_dividend_json 确权放大比例基数
  64. * @property string $shop_dividend_json 确权放大比例基数
  65. * @property integer $dividend_deduct_switch 分红是否扣除确权开关
  66. * @property integer $dividend_deduct_ratio 分红是否扣除确权开关
  67. */
  68. class CurrencyCoin extends \yii\db\ActiveRecord
  69. {
  70. public $errorMessage;
  71. /**
  72. * @inheritdoc
  73. */
  74. public static function tableName()
  75. {
  76. return '{{%currency_coin}}';
  77. }
  78. public function behaviors()
  79. {
  80. return [
  81. [
  82. 'class' => TimestampBehavior::class,
  83. 'attributes' => [
  84. ActiveRecord::EVENT_BEFORE_INSERT => ['created_at', 'updated_at'],
  85. ActiveRecord::EVENT_BEFORE_UPDATE => ['updated_at']
  86. ]
  87. ]
  88. ];
  89. }
  90. /**
  91. * @inheritdoc
  92. */
  93. public function rules()
  94. {
  95. return [
  96. [['store_id', 'scale', 'is_transfer', 'transfer_fee_rate', 'enable', 'enable_bussiness_mode', 'enable_goods_deduct', 'enable_balance', 'enable_draw', 'draw_comfirm', 'enable_transmit', 'transmit_user_type', 'enable_exchange', 'ts_cardinal_number', 'ex_cardinal_number', 'is_auto_pay', 'is_open_one', 'dividend_switch', 'dividend_deduct_switch','dividend_deduct_ratio'], 'integer'],
  97. [['guid_price', 'exchange_price', 'exchange_rate', 'balance_rate', 'draw_fee_ratio', 'balance_fee_ratio', 'transmit_rate', 'remainder', 'cny_price', 'rights_amplify_ratio','issue_quantity'], 'number'],
  98. [['unit', 'name', 'code', 'type'], 'string', 'max' => 32],
  99. [['symbol', 'plugin_code'], 'string', 'max' => 32],
  100. [['remark'], 'string', 'max' => 255],
  101. [['contract_address', 'auto_pay_address'], 'string', 'max' => 255],
  102. [['logo', 'private_key', 'allinfo','shop_dividend_json','scan_dividend_json'], 'string'],
  103. [['created_at', 'updated_at'], 'safe']
  104. ];
  105. }
  106. public static function addSaasMoney($currency_id,$saas_id,$type,$money,$remark,$store_id=0)
  107. {
  108. try {
  109. $coininfo = CurrencyCoin::findOne($currency_id);
  110. $wallet = UserWalletCoin::findOne(['currency_id' => $currency_id, 'saas_id' => $saas_id]);
  111. if (!$wallet) {
  112. $wallet = new UserWalletCoin();
  113. $wallet->currency_id = $currency_id;
  114. $wallet->saas_id = $saas_id;
  115. $wallet->store_id = 0;
  116. $wallet->user_id = 0;
  117. $wallet->money = 0;
  118. $wallet->store_id = 0;
  119. $wallet->user_id = 0;
  120. }
  121. $before_money = $wallet->money;
  122. if ($type == 1) {
  123. $wallet->money += floatval($money);
  124. } else {
  125. $wallet->money -= floatval($money);
  126. }
  127. if ($wallet->money < 0) throw new \Exception("钱包余额不足");
  128. $table = "cyy_wallet_log_" . $coininfo->code;
  129. \Yii::$app->db->createCommand()->insert("{$table}", [
  130. 'cloud_user_id' => 0,
  131. 'user_id' => 0,
  132. 'saas_id' => $saas_id,
  133. 'store_id' => 0,
  134. 'currency_id' => $currency_id,
  135. 'currency_yewu_id' => 1,
  136. 'currency_code' => $coininfo->code,
  137. 'created_at' => time(),
  138. 'money' => $money,
  139. 'before_money' => $before_money,
  140. 'after_money' => $wallet->money,
  141. 'desc' => $remark,
  142. 'type' => $type
  143. ])->execute();
  144. $wallet->save();
  145. if($store_id>0){
  146. //扣除店铺商确权
  147. $wallet_store = UserWalletCoin::findOne(['currency_id' => $currency_id, 'store_id' => $store_id]);
  148. $cloud_before_money = $wallet_store->money;
  149. $cloud_after_money = $wallet_store->money - $money;
  150. Yii::$app->db->createCommand("
  151. UPDATE cyy_user_wallet_coin
  152. SET money = money - :money
  153. WHERE store_id = :store_id
  154. AND currency_id = :currency_id
  155. AND currency_yewu_id = :currency_yewu_id
  156. ")->bindValues([
  157. ':money' => $money,
  158. ':store_id' => $store_id,
  159. ':currency_id' => $currency_id,
  160. ':currency_yewu_id' => 1
  161. ])->execute();
  162. $type = "ORDER_CUT";
  163. \Yii::$app->db->createCommand()->insert("{$table}", [
  164. 'cloud_user_id'=>0,
  165. 'user_id'=>0,
  166. 'saas_id'=>0,
  167. 'store_id'=>$store_id,
  168. 'currency_id'=>$currency_id,
  169. 'currency_yewu_id'=>1,
  170. 'currency_code'=>$coininfo->code,
  171. 'created_at'=>time(),
  172. 'money'=> (-1)*$money,
  173. 'before_money'=>$cloud_before_money,
  174. 'after_money'=>$cloud_after_money,
  175. 'desc'=>$remark,
  176. 'type'=>$type
  177. ])->execute();
  178. }
  179. return true;
  180. } catch (\Exception $e) {
  181. $self = new self();
  182. $self->errorMessage = $e->getMessage();
  183. ActionLog::addLog(1, 'CurrencyCoin::addSaasMoney/currencyAward', $e->getMessage());
  184. return false;
  185. }catch (\Throwable $e) {
  186. $self = new self();
  187. $self->errorMessage = $e->getMessage();
  188. ActionLog::addLog(1, 'CurrencyCoin::addSaasMoney/currencyAward', $e->getMessage());
  189. return false;
  190. }
  191. }
  192. }