predeposit.model.php 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577
  1. <?php
  2. /**
  3. * 预存款
  4. *
  5. */
  6. defined('InShopNC') or exit('Access Invalid!');
  7. require_once (BASE_ROOT_PATH . '/helper/account_helper.php');
  8. class predepositModel extends Model {
  9. /**
  10. * 生成充值编号
  11. * @return string
  12. */
  13. public function makeSn() {
  14. return mt_rand(10,99)
  15. . sprintf('%010d',time() - 946656000)
  16. . sprintf('%03d', (float) microtime() * 1000)
  17. . sprintf('%03d', (int) $_SESSION['member_id'] % 1000);
  18. }
  19. public function addRechargeCard($sn, array $session)
  20. {
  21. $memberId = (int) $session['member_id'];
  22. $memberName = $session['member_name'];
  23. if ($memberId < 1 || !$memberName) {
  24. throw new Exception("当前登录状态为未登录,不能使用充值卡");
  25. }
  26. $rechargecard_model = Model('rechargecard');
  27. $card = $rechargecard_model->getRechargeCardBySN($sn);
  28. if (empty($card) || $card['state'] != 0 || $card['member_id'] != 0) {
  29. throw new Exception("充值卡不存在或已被使用");
  30. }
  31. $card['member_id'] = $memberId;
  32. $card['member_name'] = $memberName;
  33. try {
  34. $trans = new trans_wapper($this,__METHOD__);
  35. $rechargecard_model->setRechargeCardUsedById($card['id'], $memberId, $memberName);
  36. $card['amount'] = $card['denomination'];
  37. $this->changeRcb('recharge', $card);
  38. $trans->commit();
  39. } catch (Exception $e) {
  40. $trans->rollback();
  41. throw $e;
  42. }
  43. }
  44. /**
  45. * 取得充值列表
  46. * @param unknown $condition
  47. * @param string $pagesize
  48. * @param string $fields
  49. * @param string $order
  50. */
  51. public function getPdRechargeList($condition = array(), $pagesize = '', $fields = '*', $order = '', $limit = '') {
  52. return $this->table('pd_recharge')->where($condition)->field($fields)->order($order)->limit($limit)->page($pagesize)->select();
  53. }
  54. /**
  55. * 添加充值记录
  56. * @param array $data
  57. */
  58. public function addPdRecharge($data) {
  59. return $this->table('pd_recharge')->insert($data);
  60. }
  61. /**
  62. * 编辑
  63. * @param unknown $data
  64. * @param unknown $condition
  65. */
  66. public function editPdRecharge($data,$condition = array()) {
  67. return $this->table('pd_recharge')->where($condition)->update($data);
  68. }
  69. /**
  70. * 取得单条充值信息
  71. * @param unknown $condition
  72. * @param string $fields
  73. */
  74. public function getPdRechargeInfo($condition = array(), $fields = '*') {
  75. return $this->table('pd_recharge')->where($condition)->field($fields)->find();
  76. }
  77. /**
  78. * 取充值信息总数
  79. * @param unknown $condition
  80. */
  81. public function getPdRechargeCount($condition = array()) {
  82. return $this->table('pd_recharge')->where($condition)->count();
  83. }
  84. /**
  85. * 取提现单信息总数
  86. * @param unknown $condition
  87. */
  88. public function getPdCashCount($condition = array()) {
  89. return $this->table('pd_cash')->where($condition)->count();
  90. }
  91. /**
  92. * 取日志总数
  93. * @param unknown $condition
  94. */
  95. public function getPdLogCount($condition = array()) {
  96. return $this->table('pd_log')->where($condition)->count();
  97. }
  98. /**
  99. * 取得预存款变更日志列表
  100. * @param unknown $condition
  101. * @param string $pagesize
  102. * @param string $fields
  103. * @param string $order
  104. */
  105. public function getPdLogList($condition = array(), $pagesize = '', $fields = '*', $order = '', $limit = '') {
  106. return $this->table('pd_log')->where($condition)->field($fields)->order($order)->limit($limit)->page($pagesize)->select();
  107. }
  108. /**
  109. * 变更充值卡余额
  110. *
  111. * @param string $type
  112. * @param array $data
  113. *
  114. * @return mixed
  115. * @throws Exception
  116. */
  117. public function changeRcb($type, $data = array())
  118. {
  119. $amount = (float) $data['amount'];
  120. if ($amount < .01) {
  121. throw new Exception('参数错误');
  122. }
  123. $available = $freeze = 0;
  124. $desc = null;
  125. switch ($type) {
  126. case 'order_pay':
  127. $available = -$amount;
  128. $desc = '下单,使用充值卡余额,订单号: ' . $data['order_sn'];
  129. break;
  130. case 'order_freeze':
  131. $available = -$amount;
  132. $freeze = $amount;
  133. $desc = '下单,冻结充值卡余额,订单号: ' . $data['order_sn'];
  134. break;
  135. case 'order_cancel':
  136. $available = $amount;
  137. $freeze = -$amount;
  138. $desc = '取消订单,解冻充值卡余额,订单号: ' . $data['order_sn'];
  139. break;
  140. case 'order_comb_pay':
  141. $freeze = -$amount;
  142. $desc = '下单,扣除被冻结的充值卡余额,订单号: ' . $data['order_sn'];
  143. break;
  144. case 'recharge':
  145. $available = $amount;
  146. $desc = '平台充值卡充值,充值卡号: ' . $data['sn'];
  147. break;
  148. case 'refund':
  149. $available = $amount;
  150. $desc = '确认退款,订单号: ' . $data['order_sn'];
  151. break;
  152. case 'vr_refund':
  153. $available = $amount;
  154. $desc = '虚拟兑码退款成功,订单号: ' . $data['order_sn'];
  155. break;
  156. default:
  157. throw new Exception('参数错误');
  158. }
  159. $update = array();
  160. if ($available) {
  161. $update['available_rc_balance'] = array('exp', "available_rc_balance + ({$available})");
  162. }
  163. if ($freeze) {
  164. $update['freeze_rc_balance'] = array('exp', "freeze_rc_balance + ({$freeze})");
  165. }
  166. if (!$update) {
  167. throw new Exception('参数错误');
  168. }
  169. // 更新会员
  170. $updateSuccess = Model('member')->editMember(array(
  171. 'member_id' => $data['member_id'],
  172. ), $update);
  173. if (!$updateSuccess) {
  174. throw new Exception('操作失败');
  175. }
  176. // 添加日志
  177. $log = array(
  178. 'member_id' => $data['member_id'],
  179. 'member_name' => $data['member_name'],
  180. 'type' => $type,
  181. 'add_time' => time(),
  182. 'available_amount' => $available,
  183. 'freeze_amount' => $freeze,
  184. 'description' => $desc,
  185. );
  186. $insertSuccess = $this->table('rcb_log')->insert($log);
  187. if (!$insertSuccess) {
  188. throw new Exception('操作失败');
  189. }
  190. $msg = array(
  191. 'code' => 'recharge_card_balance_change',
  192. 'member_id' => $data['member_id'],
  193. 'param' => array(
  194. 'time' => date('Y-m-d H:i:s', time()),
  195. 'url' => urlShop('predeposit', 'rcb_log_list'),
  196. 'available_amount' => ncPriceFormat($available),
  197. 'freeze_amount' => ncPriceFormat($freeze),
  198. 'description' => $desc,
  199. ),
  200. );
  201. // 发送买家消息
  202. QueueClient::push('sendMemberMsg', $msg);
  203. return $insertSuccess;
  204. }
  205. /**
  206. * 变更预存款
  207. * @param unknown $change_type
  208. * @param unknown $data
  209. * @throws Exception
  210. * @return unknown
  211. */
  212. public function changePd($change_type,$data = array())
  213. {
  214. $data_log = array();
  215. $data_pd = array();
  216. $data_msg = array();
  217. $data_log['lg_member_id'] = $data['member_id'];
  218. $data_log['lg_member_name'] = $data['member_name'];
  219. $data_log['lg_add_time'] = time();
  220. $data_log['lg_type'] = $change_type;
  221. $data_msg['time'] = date('Y-m-d H:i:s');
  222. $data_msg['pd_url'] = urlShop('predeposit', 'pd_log_list');
  223. $add_log = true;
  224. switch ($change_type)
  225. {
  226. case 'order_pay':
  227. if(isBonusExpiryDate()) {
  228. $data_log['lg_av_amount'] = -$data['amount'];
  229. $data_log['lg_desc'] = '下单,支付红包,订单号: '.$data['order_sn'];
  230. $data_pd['available_predeposit'] = array('exp','available_predeposit-'.$data['amount']);
  231. $data_msg['av_amount'] = -$data['amount'];
  232. $data_msg['freeze_amount'] = 0;
  233. $data_msg['desc'] = $data_log['lg_desc'];
  234. }
  235. else {
  236. $data_log['lg_av_amount'] = -$data['amount'];
  237. $data_log['lg_desc'] = '下单,支付预存款,订单号: '.$data['order_sn'];
  238. $data_pd['available_predeposit'] = array('exp','available_predeposit-'.$data['amount']);
  239. $data_msg['av_amount'] = -$data['amount'];
  240. $data_msg['freeze_amount'] = 0;
  241. $data_msg['desc'] = $data_log['lg_desc'];
  242. }
  243. break;
  244. case 'order_freeze':
  245. if(isBonusExpiryDate()) {
  246. $data_log['lg_av_amount'] = -$data['amount'];
  247. $data_log['lg_desc'] = '下单,支付红包,订单号: '.$data['order_sn'];
  248. $data_pd['available_predeposit'] = array('exp','available_predeposit-'.$data['amount']);
  249. $data_msg['av_amount'] = -$data['amount'];
  250. $data_msg['desc'] = $data_log['lg_desc'];
  251. }
  252. else {
  253. $data_log['lg_av_amount'] = -$data['amount'];
  254. $data_log['lg_freeze_amount'] = $data['amount'];
  255. $data_log['lg_desc'] = '下单,冻结预存款,订单号: '.$data['order_sn'];
  256. $data_pd['freeze_predeposit'] = array('exp','freeze_predeposit+'.$data['amount']);
  257. $data_pd['available_predeposit'] = array('exp','available_predeposit-'.$data['amount']);
  258. $data_msg['av_amount'] = -$data['amount'];
  259. $data_msg['freeze_amount'] = $data['amount'];
  260. $data_msg['desc'] = $data_log['lg_desc'];
  261. }
  262. break;
  263. case 'order_cancel':
  264. if(isBonusExpiryDate()) {
  265. return true;
  266. } else {
  267. $data_log['lg_av_amount'] = $data['amount'];
  268. $data_log['lg_freeze_amount'] = -$data['amount'];
  269. $data_log['lg_desc'] = '取消订单,解冻预存款,订单号: '.$data['order_sn'];
  270. $data_pd['freeze_predeposit'] = array('exp','freeze_predeposit-'.$data['amount']);
  271. $data_pd['available_predeposit'] = array('exp','available_predeposit+'.$data['amount']);
  272. $data_msg['av_amount'] = $data['amount'];
  273. $data_msg['freeze_amount'] = -$data['amount'];
  274. $data_msg['desc'] = $data_log['lg_desc'];
  275. }
  276. break;
  277. case 'order_comb_pay':
  278. if(isBonusExpiryDate()) {
  279. return true;
  280. }
  281. else
  282. {
  283. $data_log['lg_freeze_amount'] = -$data['amount'];
  284. $data_log['lg_desc'] = '下单,支付被冻结的预存款,订单号: '.$data['order_sn'];
  285. $data_pd['freeze_predeposit'] = array('exp','freeze_predeposit-'.$data['amount']);
  286. $data_msg['av_amount'] = 0;
  287. $data_msg['freeze_amount'] = $data['amount'];
  288. $data_msg['desc'] = $data_log['lg_desc'];
  289. break;
  290. }
  291. case 'recharge':
  292. $data_log['lg_av_amount'] = $data['amount'];
  293. $data_log['lg_desc'] = '充值,充值单号: '.$data['pdr_sn'];
  294. $data_log['lg_admin_name'] = $data['admin_name'];
  295. $data_pd['available_predeposit'] = array('exp','available_predeposit+'.$data['amount']);
  296. $data_msg['av_amount'] = $data['amount'];
  297. $data_msg['freeze_amount'] = 0;
  298. $data_msg['desc'] = $data_log['lg_desc'];
  299. break;
  300. case 'refund':
  301. if(isBonusExpiryDate()) {
  302. //account_helper::onPredRefund('refund',$data['member_id'],$data['order_sn'],$data['refund_id']);
  303. return true;
  304. } else {
  305. $data_log['lg_av_amount'] = $data['amount'];
  306. $data_log['lg_desc'] = '确认退款,订单号: '.$data['order_sn'];
  307. $data_pd['available_predeposit'] = array('exp','available_predeposit+'.$data['amount']);
  308. $data_msg['av_amount'] = $data['amount'];
  309. $data_msg['freeze_amount'] = 0;
  310. $data_msg['desc'] = $data_log['lg_desc'];
  311. }
  312. break;
  313. case 'vr_refund':
  314. $data_log['lg_av_amount'] = $data['amount'];
  315. $data_log['lg_desc'] = '虚拟兑码退款成功,订单号: '.$data['order_sn'];
  316. $data_pd['available_predeposit'] = array('exp','available_predeposit+'.$data['amount']);
  317. $data_msg['av_amount'] = $data['amount'];
  318. $data_msg['freeze_amount'] = 0;
  319. $data_msg['desc'] = $data_log['lg_desc'];
  320. break;
  321. case 'cash_apply':
  322. $data_log['lg_av_amount'] = -$data['amount'];
  323. $data_log['lg_freeze_amount'] = $data['amount'];
  324. $data_log['lg_desc'] = '申请提现,冻结预存款,提现单号: '.$data['order_sn'];
  325. $data_pd['available_predeposit'] = array('exp','available_predeposit-'.$data['amount']);
  326. $data_pd['freeze_predeposit'] = array('exp','freeze_predeposit+'.$data['amount']);
  327. $data_msg['av_amount'] = -$data['amount'];
  328. $data_msg['freeze_amount'] = $data['amount'];
  329. $data_msg['desc'] = $data_log['lg_desc'];
  330. break;
  331. case 'cash_pay':
  332. $data_log['lg_freeze_amount'] = -$data['amount'];
  333. $data_log['lg_desc'] = '提现成功,提现单号: '.$data['order_sn'];
  334. $data_log['lg_admin_name'] = $data['admin_name'];
  335. $data_pd['freeze_predeposit'] = array('exp','freeze_predeposit-'.$data['amount']);
  336. $data_msg['av_amount'] = 0;
  337. $data_msg['freeze_amount'] = -$data['amount'];
  338. $data_msg['desc'] = $data_log['lg_desc'];
  339. break;
  340. case 'cash_del':
  341. $data_log['lg_av_amount'] = $data['amount'];
  342. $data_log['lg_freeze_amount'] = -$data['amount'];
  343. $data_log['lg_desc'] = '取消提现申请,解冻预存款,提现单号: '.$data['order_sn'];
  344. $data_log['lg_admin_name'] = $data['admin_name'];
  345. $data_pd['available_predeposit'] = array('exp','available_predeposit+'.$data['amount']);
  346. $data_pd['freeze_predeposit'] = array('exp','freeze_predeposit-'.$data['amount']);
  347. $data_msg['av_amount'] = $data['amount'];
  348. $data_msg['freeze_amount'] = -$data['amount'];
  349. $data_msg['desc'] = $data_log['lg_desc'];
  350. break;
  351. case 'bonus_refund':
  352. if(isBonusExpiryDate()) {
  353. return true;
  354. } else {
  355. $data_log['lg_av_amount'] = $data['amount'];
  356. $data_log['lg_desc'] = '退还没抢的红包金额,红包单号: '.$data['type_sn'];
  357. $data_pd['available_predeposit'] = array('exp','available_predeposit+'.$data['amount']);
  358. $data_msg['av_amount'] = $data['amount'];
  359. $data_msg['freeze_amount'] = 0;
  360. $data_msg['desc'] = $data_log['lg_desc'];
  361. }
  362. break;
  363. case 'bonus_add_money':
  364. $make_type = empty($data['make_type']) ? 0 : $data['make_type'];
  365. $data_log['lg_av_amount'] = $data['amount'];
  366. $data_log['lg_desc'] = '领取红包,红包单号: '.$data['pdr_sn'] . " make_type={$make_type}";
  367. $data_log['lg_admin_name'] = $data['admin_name'];
  368. $data_pd['available_predeposit'] = array('exp','available_predeposit+'.$data['amount']);
  369. $data_msg['av_amount'] = $data['amount'];
  370. $data_msg['freeze_amount'] = 0;
  371. $data_msg['desc'] = $data_log['lg_desc'];
  372. break;
  373. case 'hand_out_bonus' :
  374. $make_type = empty($data['make_type']) ? 0 : $data['make_type'];
  375. $data_log['lg_av_amount'] = -$data['amount'];
  376. $data_log['lg_desc'] = '发送红包,红包单号: '.$data['pdr_sn'] . " make_type={$make_type}" ;
  377. $data_log['lg_admin_name'] = $data['admin_name'];
  378. $data_pd['available_predeposit'] = array('exp','available_predeposit-'.$data['amount']);
  379. $data_msg['av_amount'] = -$data['amount'];
  380. $data_msg['freeze_amount'] = 0;
  381. $data_msg['desc'] = $data_log['lg_desc'];
  382. break;
  383. case 'bonus_expire' :
  384. $data_log['lg_av_amount'] = -$data['amount'];
  385. $data_log['lg_desc'] = '红包过期,红包单号: '.$data['pdr_sn'] ;
  386. $data_log['lg_admin_name'] = $data['admin_name'];
  387. $data_pd['available_predeposit'] = array('exp','available_predeposit-'.$data['amount']);
  388. $data_msg['av_amount'] = -$data['amount'];
  389. $data_msg['freeze_amount'] = 0;
  390. $data_msg['desc'] = $data_log['lg_desc'];
  391. break;
  392. ////////////////////zmr>v20////////////////////////////////////
  393. case 'sys_add_money':
  394. $data_log['lg_av_amount'] = $data['amount'];
  395. $data_log['lg_desc'] = '管理员调节预存款【增加】,充值单号: '.$data['pdr_sn'];
  396. $data_log['lg_admin_name'] = $data['admin_name'];
  397. $data_pd['available_predeposit'] = array('exp','available_predeposit+'.$data['amount']);
  398. $data_msg['av_amount'] = $data['amount'];
  399. $data_msg['freeze_amount'] = 0;
  400. $data_msg['desc'] = $data_log['lg_desc'];
  401. break;
  402. case 'sys_del_money':
  403. $data_log['lg_av_amount'] = -$data['amount'];
  404. $data_log['lg_desc'] = '管理员调节预存款【减少】,充值单号: '.$data['pdr_sn'];
  405. $data_pd['available_predeposit'] = array('exp','available_predeposit-'.$data['amount']);
  406. $data_msg['av_amount'] = -$data['amount'];
  407. $data_msg['freeze_amount'] = 0;
  408. $data_msg['desc'] = $data_log['lg_desc'];
  409. break;
  410. case 'sys_freeze_money':
  411. $data_log['lg_av_amount'] = -$data['amount'];
  412. $data_log['lg_freeze_amount'] = $data['amount'];
  413. $data_log['lg_desc'] = '管理员调节预存款【冻结】,充值单号: '.$data['pdr_sn'];
  414. $data_pd['available_predeposit'] = array('exp','available_predeposit-'.$data['amount']);
  415. $data_pd['freeze_predeposit'] = array('exp','freeze_predeposit+'.$data['amount']);
  416. $data_msg['av_amount'] = -$data['amount'];
  417. $data_msg['freeze_amount'] = $data['amount'];
  418. $data_msg['desc'] = $data_log['lg_desc'];
  419. break;
  420. case 'sys_unfreeze_money':
  421. $data_log['lg_av_amount'] = $data['amount'];
  422. $data_log['lg_freeze_amount'] = -$data['amount'];
  423. $data_log['lg_desc'] = '管理员调节预存款【解冻】,充值单号: '.$data['pdr_sn'];
  424. $data_log['lg_admin_name'] = $data['admin_name'];
  425. $data_pd['available_predeposit'] = array('exp','available_predeposit+'.$data['amount']);
  426. $data_pd['freeze_predeposit'] = array('exp','freeze_predeposit-'.$data['amount']);
  427. $data_msg['av_amount'] = $data['amount'];
  428. $data_msg['freeze_amount'] = -$data['amount'];
  429. $data_msg['desc'] = $data_log['lg_desc'];
  430. break;
  431. //////////////////////////////////////////////////////
  432. default:
  433. throw new Exception('参数错误');
  434. break;
  435. }
  436. $update = Model('member')->editMember(array('member_id'=>$data['member_id']),$data_pd);
  437. if (!$update) {
  438. throw new Exception('操作失败');
  439. }
  440. if($add_log == false) {
  441. return 0;
  442. }
  443. $insert = $this->table('pd_log')->insert($data_log);
  444. if (!$insert) {
  445. throw new Exception('操作失败');
  446. }
  447. // 支付成功发送买家消息
  448. $param = array();
  449. $param['code'] = 'predeposit_change';
  450. $param['member_id'] = $data['member_id'];
  451. $data_msg['av_amount'] = ncPriceFormat($data_msg['av_amount']);
  452. $data_msg['freeze_amount'] = ncPriceFormat($data_msg['freeze_amount']);
  453. $param['param'] = $data_msg;
  454. QueueClient::push('sendMemberMsg', $param);
  455. return $insert;
  456. }
  457. /**
  458. * 删除充值记录
  459. * @param unknown $condition
  460. */
  461. public function delPdRecharge($condition) {
  462. return $this->table('pd_recharge')->where($condition)->delete();
  463. }
  464. /**
  465. * 取得提现列表
  466. * @param unknown $condition
  467. * @param string $pagesize
  468. * @param string $fields
  469. * @param string $order
  470. */
  471. public function getPdCashList($condition = array(), $pagesize = '', $fields = '*', $order = '', $limit = '') {
  472. return $this->table('pd_cash')->where($condition)->field($fields)->order($order)->limit($limit)->page($pagesize)->select();
  473. }
  474. /**
  475. * 添加提现记录
  476. * @param array $data
  477. */
  478. public function addPdCash($data) {
  479. return $this->table('pd_cash')->insert($data);
  480. }
  481. /**
  482. * 编辑提现记录
  483. * @param unknown $data
  484. * @param unknown $condition
  485. */
  486. public function editPdCash($data,$condition = array()) {
  487. return $this->table('pd_cash')->where($condition)->update($data);
  488. }
  489. /**
  490. * 取得单条提现信息
  491. * @param unknown $condition
  492. * @param string $fields
  493. */
  494. public function getPdCashInfo($condition = array(), $fields = '*') {
  495. return $this->table('pd_cash')->where($condition)->field($fields)->find();
  496. }
  497. /**
  498. * 删除提现记录
  499. * @param unknown $condition
  500. */
  501. public function delPdCash($condition) {
  502. return $this->table('pd_cash')->where($condition)->delete();
  503. }
  504. }