Bank.php 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264
  1. <?php
  2. /**
  3. * @copyright Copyright (c) 2017 https://www.sapixx.com All rights reserved.
  4. * @license Licensed (http://www.apache.org/licenses/LICENSE-2.0).
  5. * @author pillar<ltmn@qq.com>
  6. * 用户银行表 Table<ai_popupshop_bank>
  7. */
  8. namespace app\popupshop\model;
  9. use think\Model;
  10. use app\popupshop\model\BankBill;
  11. use app\popupshop\model\BankCash;
  12. use app\popupshop\model\Config;
  13. use app\common\facade\WechatPay;
  14. use Exception;
  15. class Bank extends Model{
  16. protected $pk = 'id';
  17. protected $table = 'ai_popupshop_bank';
  18. protected $autoWriteTimestamp = true;
  19. protected $createTime = false;
  20. //用户
  21. public function user(){
  22. return $this->hasOne('app\common\model\SystemUser','id','user_id');
  23. }
  24. /**
  25. * 提现申请审核操作
  26. *
  27. * @param array $param
  28. * @return boolean
  29. */
  30. public static function isPass(array $param){
  31. $id = (int)$param['id'];
  32. $ispass = (int)$param['ispass'];
  33. $miniapp_id = (int)$param['miniapp_id'];
  34. $cash = BankCash::where(['member_miniapp_id' =>$miniapp_id,'id'=> $id,'state' => 0])->find();
  35. if($cash){
  36. $is_rel = false; //操作是否成功
  37. $is_diy = false;
  38. $trade_no = $cash->user->invite_code.order_no();
  39. $config = Config::where(['member_miniapp_id' => $miniapp_id])->field('tax,is_wechat_touser')->find();
  40. $realmoney = $cash->money - $cash->money * ($config->tax/100);
  41. if($ispass){
  42. if($config->is_wechat_touser && (!empty($cash->user->official_uid) || $realmoney < 5000)){
  43. $trade_no .= 'WX';
  44. try {
  45. $rel = WechatPay::doPay($miniapp_id)->transfer->toBalance(['partner_trade_no' => $trade_no,'openid' => $cash->user->miniapp_uid,'check_name' => 'NO_CHECK','amount' => $realmoney*100,'desc' => '酬劳与收入']);
  46. if ($rel['result_code'] === 'SUCCESS') {
  47. if ($rel['result_code'] === 'SUCCESS') {
  48. $is_diy = true;
  49. $message = "[通过]申请转出已结算到微信钱包";
  50. }else{
  51. $message = $rel['return_msg'];
  52. }
  53. }else{
  54. $message = $rel['return_msg'];
  55. }
  56. }catch (Exception $e) {
  57. $message = $e->getMessage();
  58. }
  59. }else{
  60. $trade_no .= 'CD';
  61. $is_diy = true;
  62. $message = "[通过]申请转出已结算到您填写银行账户";
  63. }
  64. if($is_diy){
  65. $bank = self::isPassCash($cash->user_id,$cash->money);
  66. $state = 1;
  67. $is_rel = true;
  68. }
  69. }else{
  70. $bank = self::isPassCash($cash->user_id,$cash->money,false);
  71. if($bank){
  72. $message = "[失败]申请转出(".money($cash->money)."),退回账户";
  73. $state = -1;
  74. $is_rel = true;
  75. }else{
  76. $message = '操作失败~申请提交帐号异常';
  77. }
  78. }
  79. if($is_rel){
  80. BankBill::add($miniapp_id,$cash->user_id,$cash->money,$message);
  81. $cash->state = $state;
  82. $cash->realmoney = $realmoney;
  83. $cash->audit_time = time();
  84. $cash->trade_no = $trade_no;
  85. $cash->msg = $message;
  86. $cash->save(); //更新提现状态
  87. return ['code'=>200,'msg' => $message,'url' => url('popupshop/bank/cashpass',['id' => $id])];
  88. }else{
  89. return ['code'=>0,'msg'=> $message ,'url' => url('popupshop/bank/cashpass',['id' => $id])];
  90. }
  91. }else{
  92. return ['code'=>0,'msg'=>'操作失败,为找到申请提现记录.'];
  93. }
  94. }
  95. //申请提现是否成功
  96. protected static function isPassCash(int $uid,float $money,$isSuccess = true){
  97. $info = self::where(['user_id' => $uid])->find();
  98. if(empty($info)){
  99. return;
  100. }
  101. if ($info->lack_money < $money) {
  102. return;
  103. }
  104. $info->lack_money = ['dec',money($money)];
  105. if($isSuccess == false){
  106. $info->due_money = ['inc',money($money)];
  107. }
  108. return $info->save();
  109. }
  110. /**
  111. * 提现申请(小程序API)
  112. * @param integer $miniapp_id
  113. * @param integer $uid
  114. * @param integer $money(元)
  115. * @return void
  116. */
  117. public static function cash(int $miniapp_id,int $uid,float $money){
  118. $info = self::where(['member_miniapp_id'=>$miniapp_id,'user_id' => $uid])->find();
  119. if(empty($info)){
  120. return;
  121. }
  122. if($info->due_money < $money){
  123. return;
  124. }
  125. $info->due_money = ['dec',money($money)];
  126. $info->lack_money = ['inc',money($money)];
  127. $info->update_time = time();
  128. return $info->save();
  129. }
  130. /**
  131. * 收入增加
  132. * @param integer $miniapp_id
  133. * @param integer $uid
  134. * @param integer $due_money
  135. * @param integer $shop_money
  136. * @return void
  137. */
  138. public static function setDueMoney(int $miniapp_id,int $uid,float $due_money,int $shop_money = 0){
  139. $info = self::where(['user_id' => $uid])->find();
  140. $due_money = abs($due_money);
  141. $shop_money = abs($shop_money);
  142. if(empty($info)){
  143. $data['member_miniapp_id'] = $miniapp_id;
  144. $data['user_id'] = $uid;
  145. $data['due_money'] = $due_money;
  146. $data['income_money'] = $due_money;
  147. $data['shop_money'] = $shop_money;
  148. $data['update_time'] = time();
  149. return self::insert($data);
  150. }
  151. $info->income_money = ['inc',money($due_money)];
  152. $info->due_money = ['inc',money($due_money)];
  153. $info->shop_money = ['inc',money($shop_money)];
  154. $info->update_time = time();
  155. return $info->save();
  156. }
  157. /**
  158. * 应付帐号充值
  159. * @param integer $miniapp_id
  160. * @param integer $uid
  161. * @param integer $money(元)
  162. * @return void
  163. */
  164. public static function moneyChange(int $miniapp_id,int $uid,float $money){
  165. $info = self::where(['member_miniapp_id'=>$miniapp_id,'user_id' => $uid])->find();
  166. if(empty($info)){
  167. $data['member_miniapp_id'] = $miniapp_id;
  168. $data['user_id'] = $uid;
  169. $data['due_money'] = $money <= 0 ? 0 : money($money);
  170. $data['update_time'] = time();
  171. return self::insert($data);
  172. }else{
  173. $info->due_money = $money > 0 ? ['inc',money($money)] : ['dec',money($money)];
  174. $info->update_time = time();
  175. return $info->save();
  176. }
  177. }
  178. /**
  179. * 购物积分帐号充值
  180. * @param integer $miniapp_id
  181. * @param integer $uid
  182. * @param integer $money(元)
  183. * @return void
  184. */
  185. public static function shopChange(int $miniapp_id,int $uid,float $money){
  186. $info = self::where(['member_miniapp_id'=>$miniapp_id,'user_id' => $uid])->find();
  187. if(empty($info)){
  188. $data['member_miniapp_id'] = $miniapp_id;
  189. $data['user_id'] = $uid;
  190. $data['shop_money'] = $money <= 0 ? 0 : money($money);
  191. $data['update_time'] = time();
  192. return self::insert($data);
  193. }else{
  194. $info->shop_money = $money > 0 ? ['inc',money($money)] : ['dec',money($money)];
  195. $info->update_time = time();
  196. return $info->save();
  197. }
  198. }
  199. /**
  200. * 转账小程序API
  201. * @param integer $miniapp_id
  202. * @param integer $uid
  203. * @param integer $money(元)
  204. * @param bool $recipient (是否接收方)
  205. * @return void
  206. */
  207. public static function transfer(int $miniapp_id,int $uid,float $money,bool $recipient = false){
  208. if($money <= 0){
  209. return;
  210. }
  211. $info = self::where(['member_miniapp_id' => $miniapp_id,'user_id' => $uid])->find();
  212. if($recipient){
  213. if(empty($info)){
  214. $data['member_miniapp_id'] = $miniapp_id;
  215. $data['user_id'] = $uid;
  216. $data['due_money'] = money($money);
  217. return self::insert($data);
  218. }else{
  219. $info->due_money = ['inc',money($money)];
  220. return $info->save();
  221. }
  222. }else{
  223. if(empty($info)){
  224. return;
  225. }
  226. if($info->due_money < $money){
  227. return;
  228. }
  229. $info->due_money = ['dec',money($money)];
  230. $info->update_time = time();
  231. return $info->save();
  232. }
  233. }
  234. /**
  235. * 增加净收入
  236. * @param integer $uid
  237. * @param integer $money
  238. * @return void
  239. */
  240. public function isProfit(int $uid,float $money){
  241. $info = self::where(['user_id' => $uid])->find();
  242. if(empty($info)){
  243. return;
  244. }
  245. if($money > 0){
  246. $info->profit = ['inc',$money];
  247. }else{
  248. $info->profit = 0;
  249. }
  250. return $info->save();
  251. }
  252. }