TransactionController.php 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510
  1. <?php
  2. namespace addons\Redpack\api\modules\v1\controllers;
  3. use addons\Redpack\common\enums\RedpackEnum;
  4. use addons\Redpack\common\helper\RedpackHelper;
  5. use addons\Redpack\common\models\Redpack;
  6. use addons\Redpack\common\models\RedpackTask;
  7. use addons\Redpack\common\models\RedpackWallet;
  8. use addons\Sudoku\common\enums\SudokuEnum;
  9. use common\enums\AddonsEnum;
  10. use common\enums\StatusEnum;
  11. use common\enums\UserWalletEnum;
  12. use common\models\common\PlatformSetting;
  13. use common\models\user\UserPartitionRelationship;
  14. use services\common\UserWalletService;
  15. use Yii;
  16. use api\controllers\OnAuthController;
  17. use yii\db\Exception;
  18. use yii\helpers\Json;
  19. /**
  20. * 红包控制器
  21. *
  22. * Class DefaultController
  23. * @package addons\Redpack\api\controllers
  24. */
  25. class TransactionController extends OnAuthController
  26. {
  27. public $modelClass = '';
  28. /**
  29. * 不用进行登录验证的方法
  30. *
  31. * 例如: ['index', 'update', 'create', 'view', 'delete']
  32. * 默认全部需要验证
  33. *
  34. * @var array
  35. */
  36. protected $authOptional = ['index'];
  37. /**
  38. * 转送给好友
  39. * @Author: ltm
  40. * @DateTime: 2022/3/23 0023 9:20
  41. * @Copyright: copyright (c) 2021 广东七件事集团
  42. * @param $data
  43. * @return string
  44. */
  45. public function actionTransfer()
  46. {
  47. if (Yii::$app->request->isPost) {
  48. $params = Yii::$app->request->post();
  49. // 验证
  50. $res = Yii::$app->services->validate->validate($params, [
  51. [['user_id','money'], 'required'],
  52. [['money'], 'double'],
  53. [['type'], 'in', 'range' => [RedpackEnum::WALLET_REDPACK,RedpackEnum::WALLET_REDPACK_FROZEN]],
  54. ]);
  55. if ($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  56. if ($params['user_id'] == $this->user_id) return $this->error("自己不可以转给自己");
  57. $config = Yii::$app->services->setting->addons->get($this->mall_id, AddonsEnum::ADDONS_NAME_REDPACK, 'basic');
  58. $redpack_name = $config['redpack_name'] ?? '红包';
  59. if ($config['transfer_status'] == 2) return $this->error($redpack_name . "转送未开启");
  60. $user_redpack = RedpackWallet::getOne([['mall_id' => $this->mall_id,'user_id' => $this->user_id,'status' => StatusEnum::ENABLED]],true);
  61. //将冻结红包的金额先减扣掉
  62. if($params['type'] == RedpackEnum::WALLET_REDPACK_FROZEN){ //是冻结红包
  63. if (!in_array(RedpackEnum::WALLET_REDPACK_FROZEN,json_decode($config['transfer_red_type']))) {
  64. return $this->error(RedpackEnum::getRedpackText(RedpackEnum::WALLET_REDPACK_FROZEN, $this->mall_id)."转送未开启");
  65. }
  66. $is_frozen = true;
  67. //红包手续费
  68. $service_money = $params['money'] * $config['transfer_percentage']/100;
  69. $transfer_money = $params['money'] + $service_money;
  70. if ($user_redpack['frozen_redpack'] < $transfer_money) {
  71. return $this->error(RedpackEnum::getRedpackText(RedpackEnum::WALLET_REDPACK_FROZEN, $this->mall_id)."余额不足");
  72. }
  73. }else{
  74. if (!in_array(RedpackEnum::WALLET_REDPACK,json_decode($config['transfer_red_type']))) {
  75. return $this->error(RedpackEnum::getRedpackText(RedpackEnum::WALLET_REDPACK, $this->mall_id)."转送未开启");
  76. }
  77. //红包手续费
  78. $service_money = $params['money'] * $config['transfer_percentage']/100;
  79. $transfer_money = $params['money'];
  80. $params['money'] = bcsub($params['money'], $service_money,2);
  81. $is_frozen = false;
  82. if ($user_redpack['redpack'] < $transfer_money) {
  83. return $this->error(RedpackEnum::getRedpackText(RedpackEnum::WALLET_REDPACK, $this->mall_id)."余额不足");
  84. }
  85. }
  86. //转让权限判断
  87. if ($config['auth_status'] == 2){
  88. $parent = UserPartitionRelationship::getParentIdArr($params['user_id']);//获取上级
  89. $children = UserPartitionRelationship::getChildIdArr($params['user_id']);//获取下级
  90. $relation = array_merge($parent,$children);
  91. if (!in_array($this->user_id, $relation)) return $this->error('只能转给自己团队会员');; //判断绑定者和分享者是否在同一关系链中
  92. }
  93. $trans = Yii::$app->db->beginTransaction();
  94. try {
  95. $rest = true;
  96. //接收红包者
  97. $wallet = RedpackWallet::setData([
  98. 'mall_id' => $this->mall_id,
  99. 'user_id' => $params['user_id'],
  100. 'is_frozen' => $is_frozen,
  101. 'is_deduct' => true,
  102. 'money' => $params['money'],
  103. 'from_type' => RedpackEnum::FROM_TRASFTER,
  104. 'desc' => "接收方:{$redpack_name}转给好友",
  105. ]);
  106. if ($wallet == false) $rest = false;
  107. //转红包者
  108. $wallet = RedpackWallet::setData([
  109. 'mall_id' => $this->mall_id,
  110. 'user_id' => $this->user_id,
  111. 'is_frozen' => $is_frozen,
  112. 'is_deduct' => true,
  113. 'money' => - $params['money'],
  114. 'from_type' => RedpackEnum::FROM_TRASFTER,
  115. 'desc' => "转{$redpack_name}方:{$redpack_name}转给好友",
  116. ]);
  117. if ($wallet == false) $rest = false;
  118. //手续费
  119. if($service_money > 0){
  120. $wallet = RedpackWallet::setData([
  121. 'mall_id' => $this->mall_id,
  122. 'user_id' => $this->user_id,
  123. 'is_frozen' => $is_frozen,
  124. 'is_deduct' => true,
  125. 'money' => - $service_money,
  126. 'from_type' => RedpackEnum::FROM_SERVICE_CHARGE,
  127. 'desc' => "转{$redpack_name}方:{$redpack_name}扣除手续费",
  128. ]);
  129. if ($wallet == false) $rest = false;
  130. }
  131. if ($rest == false) throw new Exception(RedpackWallet::getStaticError());
  132. $trans->commit();
  133. return $this->success('操作成功');
  134. } catch (\Exception $e) {
  135. throw new Exception($e->getMessage());
  136. $trans->rollBack();
  137. return false;
  138. }
  139. }
  140. }
  141. /**
  142. * 转送配置
  143. * @Author: ltm
  144. * @DateTime: 2022/3/23 0023 16:57
  145. * @Copyright: copyright (c) 2021 广东七件事集团
  146. * @param $data
  147. * @return string
  148. */
  149. public function actionTransferConfig(){
  150. if (Yii::$app->request->isGet) {
  151. $config_data = Yii::$app->services->setting->addons->get($this->mall_id, AddonsEnum::ADDONS_NAME_REDPACK, 'basic');
  152. if ($config_data['transfer_status'] == 2) return $this->error(($config_data['redpack_name'] ?? '红包') . "转送未开启");
  153. $redpack_type = \Qiniu\json_decode($config_data['transfer_red_type'],true);
  154. $redpack_type_text = [];
  155. foreach ($redpack_type as $k=>$v){
  156. if($v == 'redpack' || $v == 'frozen_redpack'){
  157. $redpack_type_text[$v] = RedpackEnum::getRedpackText($v, $this->mall_id);
  158. }
  159. }
  160. $config['redpack_type'] = $redpack_type_text;
  161. $config['redpack_name'] = $config_data['redpack_name'] ?? '红包';
  162. // $config['redpack_type'] = RedpackEnum::getRedpackText();
  163. $config['money_service'] = $config_data['transfer_percentage']; //手续费
  164. return $this->success('操作成功',$config);
  165. }
  166. }
  167. /**
  168. * 转出配置
  169. * @Author: ltm
  170. * @DateTime: 2022/3/23 0023 16:57
  171. * @Copyright: copyright (c) 2021 广东七件事集团
  172. * @param $data
  173. * @return string
  174. */
  175. public function actionTransferOutConfig(){
  176. if (Yii::$app->request->isGet) {
  177. $config_data = Yii::$app->services->setting->addons->get($this->mall_id, AddonsEnum::ADDONS_NAME_REDPACK, 'basic');
  178. $config_data = RedpackHelper::initConfig($config_data);
  179. if ($config_data['transfer_out_status'] == 2) return $this->error(($config_data['redpack_name'] ?? '红包') . "转送未开启");
  180. $redpack_type = \Qiniu\json_decode($config_data['transfer_out_type'],true);
  181. $redpack_type_text = [];
  182. $config = [];
  183. if (!empty($redpack_type)) {
  184. foreach ($redpack_type as $k => $v) {
  185. if ($v == 'redpack' || $v == 'frozen_redpack') {
  186. $redpack_type_text[$v] = RedpackEnum::getRedpackText($v, $this->mall_id);
  187. $config['redpack_types'][$v] = [
  188. 'redpack_type' => $redpack_type_text[$v],
  189. 'redpack_name' => $config_data['redpack_name'] ?? '红包',
  190. 'money_service' => $config_data["{$v}_transfer_out_service"],
  191. 'service_type' => $config_data["{$v}_transfer_out_service_rate"],
  192. ];
  193. $transfer_out_modes = !empty($config_data["{$v}_transfer_out_mode"]) ? Json::decode($config_data["{$v}_transfer_out_mode"]) : [];
  194. foreach ($transfer_out_modes as $mode) {
  195. if ($mode == 1) {
  196. $config['redpack_types'][$v]['to_money_service'] = $config_data["{$v}_transfer_out_balance"];
  197. }
  198. if ($mode == 2) {
  199. $config['redpack_types'][$v]['to_score_service'] = $config_data["{$v}_transfer_out_score"];
  200. }
  201. }
  202. }
  203. }
  204. }
  205. $config['redpack_type'] = $redpack_type_text;
  206. $config['redpack_name'] = $config_data['redpack_name'] ?? '红包';
  207. // $config['redpack_type'] = RedpackEnum::getRedpackText();
  208. $config['money_service'] = $config_data['transfer_out_service']; //手续费
  209. $config['to_money_service'] = $config_data['transfer_out_balance']; //一元红包等于多少元
  210. $config['to_score_service'] = $config_data['transfer_out_score']; //一元红包等于多少积分
  211. return $this->success('操作成功',$config);
  212. }
  213. }
  214. /**
  215. * 红包转余额或积分
  216. * @Author: ltm
  217. * @DateTime: 2022/3/23 0023 10:44
  218. * @Copyright: copyright (c) 2021 广东七件事集团
  219. * @param $data
  220. * @return string
  221. */
  222. public function actionTransferBalanceOrScore(){
  223. if (Yii::$app->request->isPost) {
  224. $params = Yii::$app->request->post();
  225. // 验证
  226. $res = Yii::$app->services->validate->validate($params, [
  227. [['money'], 'required'],
  228. [['money'], 'double'],
  229. [['type'], 'in', 'range' => [RedpackEnum::WALLET_REDPACK,RedpackEnum::WALLET_REDPACK_FROZEN]],
  230. [['transfer_out_mode'], 'in', 'range' => [1,2]],//1是金额 2是积分
  231. ]);
  232. if ($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  233. if ($params['user_id'] == $this->user_id) return $this->error("自己不可以转给自己");
  234. $config = Yii::$app->services->setting->addons->get($this->mall_id, AddonsEnum::ADDONS_NAME_REDPACK, 'basic');
  235. $redpack_name = $config['redpack_name'] ?? '红包';
  236. if ($config['transfer_out_status'] == 2) return $this->error($redpack_name . "转送未开启");
  237. if ($params['money'] < 0.01) return $this->error($redpack_name . "金额必须大于或等于一分钱");
  238. $user_redpack = RedpackWallet::getOne([['mall_id' => $this->mall_id,'user_id' => $this->user_id,'status' => StatusEnum::ENABLED]],true);
  239. //将冻结红包的金额先减扣掉
  240. if($params['type'] == RedpackEnum::WALLET_REDPACK_FROZEN){ //是冻结红包
  241. $is_frozen = true;
  242. if (!in_array(RedpackEnum::WALLET_REDPACK_FROZEN,json_decode($config['transfer_out_type']))) {
  243. return $this->error(RedpackEnum::getRedpackText(RedpackEnum::WALLET_REDPACK_FROZEN, $this->mall_id)."转送未开启");
  244. }
  245. //红包手续费
  246. if($config['transfer_out_service']){
  247. $service_money = $params['money'] * $config['transfer_out_service']/100;
  248. //手续费限制:最少0.01
  249. $service_money = $service_money > 0.01 ? $service_money : 0.01;
  250. }else{
  251. $service_money = 0;
  252. }
  253. //$service_money = $params['money'] * $config['transfer_out_service']/100;
  254. $transfer_money = $params['money'];
  255. $params['money'] = bcsub($params['money'], $service_money,2);
  256. if ($user_redpack['frozen_redpack'] < ($transfer_money + $service_money)){
  257. return $this->error(RedpackEnum::getRedpackText(RedpackEnum::WALLET_REDPACK_FROZEN, $this->mall_id)."余额不足");
  258. }
  259. }else{
  260. if (!in_array(RedpackEnum::WALLET_REDPACK,json_decode($config['transfer_out_type']))) {
  261. return $this->error(RedpackEnum::getRedpackText(RedpackEnum::WALLET_REDPACK, $this->mall_id)."转送未开启");
  262. }
  263. //红包手续费
  264. if($config['transfer_out_service']){
  265. $service_money = $params['money'] * $config['transfer_out_service']/100;
  266. //手续费限制:最少0.01
  267. $service_money = $service_money > 0.01 ? $service_money : 0.01;
  268. }else{
  269. $service_money = 0;
  270. }
  271. //$service_money = $params['money'] * $config['transfer_out_service']/100;
  272. $transfer_money = $params['money'];
  273. $params['money'] = bcsub($params['money'], $service_money,2);
  274. $is_frozen = false;
  275. if ($user_redpack['redpack'] < ($transfer_money + $service_money)) return $this->error(RedpackEnum::getRedpackText(RedpackEnum::WALLET_REDPACK, $this->mall_id)."余额不足");
  276. }
  277. //判断转出方式
  278. if($params['transfer_out_mode'] == 1){
  279. if (!in_array(1,json_decode($config['transfer_out_mode']))) return $this->error($redpack_name . "转余额未开启");
  280. $pay_money = $params['money'] * $config['transfer_out_balance'];
  281. $transfer_type = UserWalletService::WALLET_TYPE_BALANCE;
  282. $type_redpack = RedpackEnum::FROM_TO_BALANCE;
  283. $desc = "{$redpack_name}转余额";
  284. }else{
  285. if (!in_array(2,json_decode($config['transfer_out_mode']))) return $this->error("{$redpack_name}转积分未开启");
  286. $pay_money = $params['money'] * $config['transfer_out_score'];
  287. $transfer_type = UserWalletService::WALLET_TYPE_SCORE;
  288. $type_redpack = RedpackEnum::FROM_TO_SCORE;
  289. $desc = "{$redpack_name}转积分";
  290. }
  291. $trans = Yii::$app->db->beginTransaction();
  292. try {
  293. //转出红包者
  294. $wallet = RedpackWallet::setData([
  295. 'mall_id' => $this->mall_id,
  296. 'user_id' => $this->user_id,
  297. 'is_frozen' => $is_frozen,
  298. 'is_deduct' => true,
  299. 'money' => - $params['money'],
  300. 'from_type' => $type_redpack,
  301. 'desc' => $desc,
  302. ]);
  303. if ($wallet === false) throw new Exception(RedpackWallet::getStaticError());
  304. //手续费
  305. if ($service_money >= 0.01) {
  306. $wallet = RedpackWallet::setData([
  307. 'mall_id' => $this->mall_id,
  308. 'user_id' => $this->user_id,
  309. 'is_frozen' => $is_frozen,
  310. 'is_deduct' => true,
  311. 'money' => - $service_money,
  312. 'from_type' => $type_redpack,
  313. 'desc' => $desc . "手续费",
  314. ]);
  315. if ($wallet === false) throw new Exception(RedpackWallet::getStaticError());
  316. }
  317. //转到用户账号
  318. $insert_wallet [] = ['mall_id' => $this->mall_id, 'user_id' => $this->user_id,
  319. 'is_frozen' => false,
  320. 'wallet_type' => $transfer_type,
  321. 'money' => $pay_money,
  322. 'desc' => $desc,
  323. 'source_table' => Redpack::briefTableName(),
  324. 'source_table_id' => $this->user_id,
  325. 'from_type' => UserWalletEnum::FROM_REDPACK,
  326. 'capital_type' => UserWalletEnum::REDPACK_TRANSFER,
  327. ];
  328. $res = UserWalletService::batchHandleByQueue($insert_wallet);
  329. if ($res == false) throw new Exception(UserWalletService::getStaticError());
  330. $trans->commit();
  331. return $this->success('操作成功');
  332. } catch (\Exception $e) {
  333. $trans->rollBack();
  334. return $this->error($e->getMessage());
  335. }
  336. }
  337. }
  338. public function actionOutTransferBalanceOrScore(){
  339. if (Yii::$app->request->isPost) {
  340. $params = Yii::$app->request->post();
  341. // 验证
  342. $res = Yii::$app->services->validate->validate($params, [
  343. [['money'], 'required'],
  344. [['money'], 'double'],
  345. [['type'], 'in', 'range' => [RedpackEnum::WALLET_REDPACK,RedpackEnum::WALLET_REDPACK_FROZEN]],
  346. [['transfer_out_mode'], 'in', 'range' => [1,2]],//1是金额 2是积分
  347. ]);
  348. if ($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  349. if ($params['user_id'] == $this->user_id) return $this->error("自己不可以转给自己");
  350. $config = Yii::$app->services->setting->addons->get($this->mall_id, AddonsEnum::ADDONS_NAME_REDPACK, 'basic');
  351. $config = RedpackHelper::initConfig($config);
  352. $redpack_name = $config['redpack_name'] ?? '红包';
  353. if ($config['transfer_out_status'] == 2) return $this->error($redpack_name . "转送未开启");
  354. // 有无勾选任意一个冻结红包类型,无就报错
  355. if (empty($config["transfer_out_type"])) {
  356. return $this->error("冻结红包转送未开启");
  357. }
  358. if ($params['money'] < 0.01) return $this->error($redpack_name . "金额必须大于或等于一分钱");
  359. $user_redpack = RedpackWallet::getOne([['mall_id' => $this->mall_id,'user_id' => $this->user_id,'status' => StatusEnum::ENABLED]],true);
  360. $prefix_key = "{$params['type']}_";
  361. //将冻结红包的金额先减扣掉
  362. if($params['type'] == RedpackEnum::WALLET_REDPACK_FROZEN){ //是冻结红包
  363. $is_frozen = true;
  364. if (!in_array(RedpackEnum::WALLET_REDPACK_FROZEN,json_decode($config["transfer_out_type"]))) {
  365. return $this->error(RedpackEnum::getRedpackText(RedpackEnum::WALLET_REDPACK_FROZEN, $this->mall_id)."转送未开启");
  366. }
  367. //红包手续费
  368. if($config["{$prefix_key}transfer_out_service"]){
  369. $service_money = $config["{$prefix_key}transfer_out_service"]; // 默认固定金额
  370. if (empty($config["{$prefix_key}transfer_out_service_rate"])) { // 如果是百分比
  371. $service_money = $params['money'] * $config["{$prefix_key}transfer_out_service"]/100;
  372. }
  373. //手续费限制:最少0.01
  374. $service_money = $service_money > 0.01 ? $service_money : 0.01;
  375. }else{
  376. $service_money = 0;
  377. }
  378. $transfer_money = $params['money'];
  379. $params['money'] = bcsub($params['money'], $service_money,2);
  380. if ($user_redpack['frozen_redpack'] < ($transfer_money + $service_money)){
  381. return $this->error(RedpackEnum::getRedpackText(RedpackEnum::WALLET_REDPACK_FROZEN, $this->mall_id)."余额不足");
  382. }
  383. }else{
  384. if (!in_array(RedpackEnum::WALLET_REDPACK,json_decode($config["transfer_out_type"]))) {
  385. return $this->error(RedpackEnum::getRedpackText(RedpackEnum::WALLET_REDPACK, $this->mall_id)."转送未开启");
  386. }
  387. //红包手续费
  388. if($config["{$prefix_key}transfer_out_service"]){
  389. $service_money = $config["{$prefix_key}transfer_out_service"]; // 默认固定金额
  390. if (empty($config["{$prefix_key}transfer_out_service_rate"])) { // 如果是百分比
  391. $service_money = $params['money'] * $config["{$prefix_key}transfer_out_service"]/100;
  392. }
  393. //手续费限制:最少0.01
  394. $service_money = $service_money > 0.01 ? $service_money : 0.01;
  395. }else{
  396. $service_money = 0;
  397. }
  398. $transfer_money = $params['money'];
  399. $params['money'] = bcsub($params['money'], $service_money,2);
  400. $is_frozen = false;
  401. if ($user_redpack['redpack'] < ($transfer_money + $service_money)) return $this->error(RedpackEnum::getRedpackText(RedpackEnum::WALLET_REDPACK, $this->mall_id)."余额不足");
  402. }
  403. //判断转出方式
  404. if($params["transfer_out_mode"] == 1){
  405. if (!in_array(1,json_decode($config["{$prefix_key}transfer_out_mode"]))) return $this->error($redpack_name . "转余额未开启");
  406. $pay_money = $params['money'] * $config["{$prefix_key}transfer_out_balance"];
  407. $transfer_type = UserWalletService::WALLET_TYPE_BALANCE;
  408. $type_redpack = RedpackEnum::FROM_TO_BALANCE;
  409. $desc = "{$redpack_name}转余额";
  410. }else{
  411. if (!in_array(2,json_decode($config["{$prefix_key}transfer_out_mode"]))) return $this->error("{$redpack_name}转积分未开启");
  412. $pay_money = $params['money'] * $config["{$prefix_key}transfer_out_score"];
  413. $transfer_type = UserWalletService::WALLET_TYPE_SCORE;
  414. $type_redpack = RedpackEnum::FROM_TO_SCORE;
  415. $desc = "{$redpack_name}转积分";
  416. }
  417. $trans = Yii::$app->db->beginTransaction();
  418. try {
  419. //转出红包者
  420. $wallet = RedpackWallet::setData([
  421. 'mall_id' => $this->mall_id,
  422. 'user_id' => $this->user_id,
  423. 'is_frozen' => $is_frozen,
  424. 'is_deduct' => true,
  425. 'money' => - $params['money'],
  426. 'from_type' => $type_redpack,
  427. 'desc' => $desc,
  428. ]);
  429. if ($wallet === false) throw new Exception(RedpackWallet::getStaticError());
  430. //手续费
  431. if ($service_money >= 0.01) {
  432. $wallet = RedpackWallet::setData([
  433. 'mall_id' => $this->mall_id,
  434. 'user_id' => $this->user_id,
  435. 'is_frozen' => $is_frozen,
  436. 'is_deduct' => true,
  437. 'money' => - $service_money,
  438. 'from_type' => $type_redpack,
  439. 'desc' => $desc . "手续费",
  440. ]);
  441. if ($wallet === false) throw new Exception(RedpackWallet::getStaticError());
  442. }
  443. //转到用户账号
  444. $insert_wallet [] = ['mall_id' => $this->mall_id, 'user_id' => $this->user_id,
  445. 'is_frozen' => false,
  446. 'wallet_type' => $transfer_type,
  447. 'money' => $pay_money,
  448. 'desc' => $desc,
  449. 'source_table' => Redpack::briefTableName(),
  450. 'source_table_id' => $this->user_id,
  451. 'from_type' => UserWalletEnum::FROM_REDPACK,
  452. 'capital_type' => UserWalletEnum::REDPACK_TRANSFER,
  453. ];
  454. // $res = UserWalletService::batchHandleByQueue($insert_wallet);
  455. $res = UserWalletService::batchHandle($insert_wallet);
  456. if ($res == false) throw new Exception(UserWalletService::getStaticError());
  457. $trans->commit();
  458. return $this->success('操作成功');
  459. } catch (\Exception $e) {
  460. $trans->rollBack();
  461. return $this->error($e->getMessage());
  462. }
  463. }
  464. }
  465. }