Bank.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305
  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_fastshop_bank>
  7. */
  8. namespace app\fastshop\model;
  9. use think\Model;
  10. use think\facade\Validate;
  11. class Bank extends Model{
  12. protected $pk = 'id';
  13. protected $table = 'ai_fastshop_bank';
  14. protected $autoWriteTimestamp = true;
  15. protected $createTime = false;
  16. //用户
  17. public function user(){
  18. return $this->hasOne('app\common\model\SystemUser','id','user_id');
  19. }
  20. /**
  21. * 提现申请审核操作
  22. *
  23. * @param array $param
  24. * @return boolean
  25. */
  26. public function ispass(array $param){
  27. $id = (int)$param['id'];
  28. $ispass = (int)$param['ispass'];
  29. $miniapp_id = (int)$param['miniapp_id'];
  30. $cash = model('BankCash')->where(['member_miniapp_id' =>$miniapp_id,'id'=> $id,'state' => 0])->find();
  31. if($cash){
  32. $config = model('Config')->field('tax')->get(['member_miniapp_id' => $miniapp_id]);
  33. $realmoney = intval($cash->money - $cash->money * ($config->tax/100)); //分
  34. $rel = false;
  35. if($ispass){
  36. $bank = self::isPassCash($cash->user_id,$cash->money);
  37. if($bank){
  38. $message = "[通过]申请提取(".money($cash->money/100)."),结算(".money($realmoney/100)."),解锁积分.";
  39. $rel = true;
  40. $data['state'] = 1;
  41. }
  42. }else{
  43. $bank = self::isPassCash($cash->user_id,$cash->money,false);
  44. if($bank){
  45. $message = "[失败]申请提取(".money($cash->money/100)."),解锁积分并退回账户.";
  46. $rel = true;
  47. $data['state'] = -1;
  48. }
  49. }
  50. if($rel){
  51. $data['realmoney'] = $realmoney;
  52. model('BankCash')->where(['member_miniapp_id' =>$miniapp_id,'id'=> $id])->update($data); //更新提现状态
  53. model('BankLogs')->add($miniapp_id,$cash->user_id,$cash->money,$message); //增加财务日志
  54. return ['code'=>200,'msg' => $message,'url' => url('fastshop/bank/cashpass',['id' => $id])];
  55. }else{
  56. return ['code'=>0,'msg'=>'操作失败,锁定金额和提现金额不区配','url' => url('fastshop/bank/cashpass',['id' => $id])];
  57. }
  58. }else{
  59. return ['code'=>0,'msg'=>'操作失败,为找到申请提现记录.'];
  60. }
  61. }
  62. //申请提现是否成功
  63. protected function isPassCash(int $uid,int $money,$isSuccess = true){
  64. $info = self::get(['user_id' => $uid]);
  65. if ($info->lack_money < $money) {
  66. return;
  67. }
  68. $data['lack_money'] = $info->lack_money - $money;
  69. if($isSuccess == false){
  70. $data['due_money'] = $info->due_money + $money;
  71. $data['money'] = $info->money + $money;
  72. }
  73. return self::where(['user_id' => $uid])->update($data);
  74. }
  75. //应付积分和购物积分增加
  76. public function due_up(int $miniapp_id,int $uid,int $due_money,int $shop_money){
  77. $data['update_time'] = time();
  78. $info = self::get(['user_id' => $uid]);
  79. $due_money = abs($due_money);
  80. $shop_money = abs($shop_money);
  81. if(empty($info)){
  82. $data['member_miniapp_id'] = $miniapp_id;
  83. $data['user_id'] = $uid;
  84. $data['due_money'] = $due_money;
  85. $data['shop_money'] = $shop_money;
  86. $data['income_money'] = $due_money+$shop_money;
  87. $data['money'] = $due_money+$shop_money;
  88. return self::insert($data);
  89. }
  90. $data['income_money'] = $info->income_money + ($due_money+$shop_money);
  91. $data['money'] = $info->money + ($due_money+$shop_money);
  92. $data['due_money'] = $info->due_money + $due_money;
  93. $data['shop_money'] = $info->shop_money + $shop_money;
  94. return self::where(['user_id' => $uid])->update($data);
  95. }
  96. /**
  97. * 应付帐号充值
  98. * @param integer $miniapp_id
  99. * @param integer $uid
  100. * @param integer $money(元)
  101. * @return void
  102. */
  103. public function recharge(int $miniapp_id,int $uid,float $money){
  104. $info = self::get(['member_miniapp_id'=>$miniapp_id,'user_id' => $uid]);
  105. $money = $money * 100;
  106. $data['update_time'] = time();
  107. if(empty($info)){
  108. $amout = $money <= 0 ? 0 : $money;
  109. $data['member_miniapp_id'] = $miniapp_id;
  110. $data['user_id'] = $uid;
  111. $data['shop_money'] = $amout;
  112. $data['due_money'] = $amout;
  113. $data['money'] = $amout;
  114. return self::insert($data);
  115. }else{
  116. $due_money = $info->due_money + $money;
  117. $amout = $info->money + $money;
  118. if($money < 0){
  119. $due_money = $due_money < 0 ? 0 : $due_money;
  120. $amout = $amout < 0 ? 0 : $amout;
  121. }
  122. $data['due_money'] = $due_money;
  123. $data['money'] = $amout;
  124. return self::where(['user_id' => $uid])->update($data);
  125. }
  126. }
  127. /**
  128. * 购物积分帐号充值
  129. * @param integer $miniapp_id
  130. * @param integer $uid
  131. * @param integer $money(元)
  132. * @return void
  133. */
  134. public function rechargeShop(int $miniapp_id,int $uid,float $money){
  135. $info = self::get(['member_miniapp_id' => $miniapp_id,'user_id' => $uid]);
  136. $money = $money * 100;
  137. $data['update_time'] = time();
  138. if(empty($info)){
  139. $amout = $money <= 0 ? 0 : $money;
  140. $data['member_miniapp_id'] = $miniapp_id;
  141. $data['user_id'] = $uid;
  142. $data['shop_money'] = $amout;
  143. $data['due_money'] = $amout;
  144. $data['money'] = $amout;
  145. return self::insert($data);
  146. }else{
  147. $shop_money = $info->shop_money + $money;
  148. $amout = $info->money + $money;
  149. if($money < 0){
  150. $shop_money = $shop_money < 0 ? 0 : $shop_money;
  151. $amout = $amout < 0 ? 0 : $amout;
  152. }
  153. $data['shop_money'] = $shop_money;
  154. $data['money'] = $amout;
  155. return self::where(['user_id' => $uid])->update($data);
  156. }
  157. }
  158. /**
  159. * 提现申请(小程序API)
  160. * @param integer $miniapp_id
  161. * @param integer $uid
  162. * @param integer $money(元)
  163. * @return void
  164. */
  165. public static function cash(int $miniapp_id,int $uid,float $money){
  166. $info = self::get(['member_miniapp_id'=>$miniapp_id,'user_id' => $uid]);
  167. if(empty($info)){
  168. return;
  169. }
  170. $money = $money * 100;
  171. if($info['due_money'] < $money || $info['money'] < $money ){
  172. return;
  173. }
  174. $data['due_money'] = (int)$info['due_money'] - $money;
  175. $data['money'] = (int)$info['money'] - $money;
  176. $data['lack_money'] = (int)$info['lack_money'] + $money;
  177. $data['update_time'] = time();
  178. return self::where(['user_id' => $uid])->update($data);
  179. }
  180. /**
  181. * 转账小程序API
  182. * @param integer $miniapp_id
  183. * @param integer $uid
  184. * @param integer $money(元)
  185. * @param bool $recipient (是否接收方)
  186. * @return void
  187. */
  188. public function transfer(int $miniapp_id,int $uid,float $money,bool $recipient = false){
  189. if($money <= 0){
  190. return;
  191. }
  192. $money = $money * 100;
  193. $info = self::get(['member_miniapp_id' => $miniapp_id,'user_id' => $uid]);
  194. if($recipient){
  195. if(empty($info)){
  196. $data['member_miniapp_id'] = $miniapp_id;
  197. $data['user_id'] = $uid;
  198. $data['due_money'] = 0;
  199. $data['money'] = 0;
  200. $data['shop_money'] = $money;
  201. return self::insert($data);
  202. }else{
  203. $info->shop_money = (int)$info->shop_money + $money;
  204. return $info->save();
  205. }
  206. }else{
  207. if(empty($info)){
  208. return;
  209. }
  210. if($info->shop_money < $money){
  211. return;
  212. }
  213. $info->shop_money = (int)$info->shop_money - $money;
  214. $info->update_time = time();
  215. return $info->save();
  216. }
  217. }
  218. /**
  219. * 积分支付(小程序API)
  220. * @param integer $miniapp_id
  221. * @param integer $uid
  222. * @param integer $money
  223. * @param integer $payment_type 0 应付积分 1 购物积分
  224. * @return void
  225. */
  226. public function payment(int $miniapp_id,int $uid,float $money,int $payment_type = 0){
  227. $info = self::get(['member_miniapp_id'=>$miniapp_id,'user_id' => $uid]);
  228. if(empty($info)){
  229. return;
  230. }
  231. $money = $money * 100;
  232. if($payment_type == 1){
  233. if($info['due_money'] <= $money || $info['money'] <= $money ){
  234. return;
  235. }
  236. $data['due_money'] = (int)$info['due_money'] - $money;
  237. }else{
  238. if($info['shop_money'] <= $money || $info['money'] <= $money ){
  239. return;
  240. }
  241. $data['shop_money'] = (int)$info['shop_money'] - $money;
  242. }
  243. $data['money'] = (int)$info['money'] - $money;
  244. $data['update_time'] = time();
  245. return self::where(['user_id' => $uid])->update($data);
  246. }
  247. /**
  248. * 判断积分金额够不够
  249. * @param integer $miniapp_id
  250. * @param integer $uid
  251. * @param integer $money
  252. * @param integer $payment_type 0 应付积分 1 购物积分
  253. * @return void
  254. */
  255. public static function isPay(int $uid,$money,int $payment_type = 0){
  256. $info = self::where(['user_id' => $uid])->find();
  257. if(empty($info)){
  258. return;
  259. }
  260. $money = $money * 100;
  261. if($payment_type == 1){
  262. if($info->due_money <= $money || $info->money <= $money ){
  263. return;
  264. }
  265. }else{
  266. if($info->shop_money <= $money || $info->money <= $money ){
  267. return;
  268. }
  269. }
  270. return true;
  271. }
  272. /**
  273. * 增加净收入
  274. * @param integer $uid
  275. * @param integer $money
  276. * @return void
  277. */
  278. public function isProfit(int $uid,float $money){
  279. $info = self::where(['user_id' => $uid])->find();
  280. if(empty($info)){
  281. return;
  282. }
  283. if($money > 0){
  284. $money = intval($money*100);
  285. $info->profit = ['inc',$money];
  286. }else{
  287. $info->profit = 0;
  288. }
  289. return $info->save();
  290. }
  291. }