member.model.php 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833
  1. <?php
  2. /**
  3. * 会员模型
  4. *
  5. *
  6. *
  7. *
  8. */
  9. defined('InShopNC') or exit('Access Invalid!');
  10. require_once(BASE_CORE_PATH . '/framework/libraries/validate.php');
  11. class memberModel extends Model
  12. {
  13. const mobile_login = 0;
  14. const anonymous_login = 1;
  15. const wxopen_login = 2;
  16. public function __construct()
  17. {
  18. parent::__construct('member');
  19. }
  20. public static function gen_openid_uid($openid, $type)
  21. {
  22. $key = 'openid_uid:' . $openid . ':' . $type;
  23. return $key;
  24. }
  25. public static function gen_token_uid($token)
  26. {
  27. $key = 'token_uid:' . $token;
  28. return $key;
  29. }
  30. public static function gen_uid_token($uid)
  31. {
  32. $key = 'uid_token:' . $uid;
  33. return $key;
  34. }
  35. /**
  36. * 会员详细信息(查库)
  37. * @param array $condition
  38. * @param string $field
  39. * @return array
  40. */
  41. public function getMemberInfo($condition, $field = '*', $master = false)
  42. {
  43. return $this->table('member')->field($field)->where($condition)->master($master)->find();
  44. }
  45. /**
  46. * 读取商品缓存
  47. * @param string $userid
  48. * @param string $type
  49. * @return array
  50. */
  51. public function getMemberID($openid, $type, $passwd = '')
  52. {
  53. if (empty($openid) || !in_array($type, array(0, 1, 2))) {
  54. return -1;
  55. }
  56. $key = $this->gen_openid_uid($openid, $type);
  57. $user = rcache($key, 'member');
  58. if (!empty($user)) {
  59. if (($type == 0) && (md5($passwd) != $user['member_passwd'])) {
  60. return -1;
  61. }
  62. } else {
  63. $conditions = array();
  64. $conditions['member_type'] = $type;
  65. if ($type == self::mobile_login) {
  66. $conditions['member_mobile'] = $openid;
  67. $conditions['member_passwd'] = md5($passwd);
  68. } elseif ($type == self::anonymous_login) {
  69. $conditions['anonymous_id'] = $openid;
  70. } elseif ($type == self::wxopen_login) {
  71. $conditions['member_wxopenid'] = $openid;
  72. } else {
  73. return -1;
  74. }
  75. Log::record("member.model.php,getMemberID,conditions['member_mobile']={$conditions['member_mobile']},conditions['member_passwd']={$conditions['member_passwd']},", Log::DEBUG);
  76. $user = $this->getMemberInfo($conditions, 'member_id,member_passwd');
  77. Log::record("member.model.php,getMemberID user={$user['member_id']}", Log::DEBUG);
  78. if (empty($user)) {
  79. return -1;
  80. } else {
  81. wcache($key, $user, 'member');
  82. }
  83. }
  84. return $user['member_id'];
  85. }
  86. /**
  87. * 校验登陆(登陆是个不频繁操作,可以不使用缓存)
  88. */
  89. public function checkPasswd($mobile, $passwd)
  90. {
  91. // 登陆信息
  92. $conditions['member_mobile'] = $mobile;
  93. $conditions['member_passwd'] = md5($passwd);
  94. $user = $this->getMemberInfo($conditions);
  95. if (empty($user)) {
  96. return -1;
  97. }
  98. $member_info = array();
  99. $member_info['member_id'] = $user['member_id'];
  100. $member_info['member_mobile'] = $user['member_mobile'];
  101. $member_info['member_name'] = $user['member_name'];
  102. $member_info['member_sex'] = $user['member_sex'];
  103. $member_info['member_points'] = $user['member_points'];
  104. return $member_info;
  105. }
  106. /**
  107. * 微信登陆校验
  108. * @param $openid
  109. * @return array|int
  110. */
  111. public function checkWxopenid($openid)
  112. {
  113. // 登陆信息
  114. $conditions['member_wxopenid'] = $openid;
  115. $user = $this->getMemberInfo($conditions);
  116. if (empty($user)) {
  117. return -1;
  118. }
  119. $member_info = array();
  120. $member_info['member_id'] = $user['member_id'];
  121. $member_info['member_mobile'] = $user['member_mobile'];
  122. $member_info['member_name'] = $user['member_name'];
  123. $member_info['member_sex'] = $user['member_sex'];
  124. $member_info['member_points'] = $user['member_points'];
  125. return $member_info;
  126. }
  127. /**
  128. * 修改密码
  129. */
  130. public function chPasswd($mobile, $oldpasswd, $newpasswd)
  131. {
  132. $info = $this->checkPasswd($mobile, $oldpasswd);
  133. if ($info == -1) {
  134. return -1;
  135. }
  136. // 修改密码
  137. $condition = array();
  138. $condition['member_id'] = $info['member_id'];
  139. $data = array();
  140. $passwd = trim($newpasswd);
  141. $data['member_passwd'] = empty($passwd) ? $passwd : md5($passwd);
  142. $ret = $this->table('member')->where($condition)->update($data);
  143. if (!$ret) {
  144. return -1;
  145. }
  146. return $info;
  147. }
  148. /**
  149. * 更新用户密码
  150. */
  151. public function uptPasswd($member_id, $passwd)
  152. {
  153. // 修改密码
  154. $condition = array();
  155. $condition['member_id'] = $member_id;
  156. $data = array();
  157. $passwd = trim($passwd);
  158. $data['member_passwd'] = empty($passwd) ? $passwd : md5($passwd);
  159. $ret = $this->table('member')->where($condition)->update($data);
  160. if (!$ret) {
  161. return -1;
  162. }
  163. return 0;
  164. }
  165. /**
  166. * 绑定微信账号
  167. */
  168. public function bindwx($member_id, $openid)
  169. {
  170. $condition = array();
  171. $condition['member_id'] = $member_id;
  172. $data = array();
  173. $conditions['member_wxopenid'] = $openid;
  174. $ret = $this->table('member')->where($condition)->update($data);
  175. if (!$ret) {
  176. return -1;
  177. }
  178. return 0;
  179. }
  180. /**
  181. * 取得会员详细信息(优先查询缓存)
  182. * 如果未找到,则缓存所有字段
  183. * @param int $member_id
  184. * @param string $field 需要取得的缓存键值, 例如:'*','member_name,member_sex'
  185. * @return array
  186. */
  187. public function getMemberInfoByID($member_id, $fields = '*')
  188. {
  189. $member_info = rcache($member_id, 'member', $fields);
  190. if (empty($member_info)) {
  191. $member_info = $this->getMemberInfo(array('member_id' => $member_id), '*', true);
  192. wcache($member_id, $member_info, 'member');
  193. }
  194. return $member_info;
  195. }
  196. /**
  197. * 会员列表
  198. * @param array $condition
  199. * @param string $field
  200. * @param number $page
  201. * @param string $order
  202. */
  203. public function getMemberList($condition = array(), $field = '*', $page = 0, $order = 'member_id desc', $limit = '')
  204. {
  205. return $this->table('member')->where($condition)->page($page)->order($order)->limit($limit)->select();
  206. }
  207. /**
  208. * 会员数量
  209. * @param array $condition
  210. * @return int
  211. */
  212. public function getMemberCount($condition)
  213. {
  214. return $this->table('member')->where($condition)->count();
  215. }
  216. /**
  217. * 编辑会员
  218. * @param array $condition
  219. * @param array $data
  220. */
  221. public function editMember($condition, $data)
  222. {
  223. $update = $this->table('member')->where($condition)->update($data);
  224. if ($update && $condition['member_id']) {
  225. dcache($condition['member_id'], 'member');
  226. }
  227. return $update;
  228. }
  229. /**
  230. * 登录时创建会话SESSION
  231. *
  232. * @param array $member_info 会员信息
  233. */
  234. public function createSession($member_info = array(), $reg = false)
  235. {
  236. if (empty($member_info) || !is_array($member_info)) return;
  237. $_SESSION['is_login'] = '1';
  238. $_SESSION['member_id'] = $member_info['member_id'];
  239. $_SESSION['member_name'] = $member_info['member_name'];
  240. $_SESSION['member_email'] = $member_info['member_email'];
  241. $_SESSION['is_buy'] = isset($member_info['is_buy']) ? $member_info['is_buy'] : 1;
  242. $_SESSION['avatar'] = $member_info['member_avatar'];
  243. $seller_info = Model('seller')->getSellerInfo(array('member_id' => $_SESSION['member_id']));
  244. $_SESSION['store_id'] = $seller_info['store_id'];
  245. if (trim($member_info['member_qqopenid'])) {
  246. $_SESSION['openid'] = $member_info['member_qqopenid'];
  247. }
  248. if (trim($member_info['member_sinaopenid'])) {
  249. $_SESSION['slast_key']['uid'] = $member_info['member_sinaopenid'];
  250. }
  251. if (!$reg) {
  252. //添加会员积分
  253. $this->addPoint($member_info);
  254. //添加会员经验值
  255. $this->addExppoint($member_info);
  256. }
  257. if (!empty($member_info['member_login_time'])) {
  258. $update_info = array(
  259. 'member_login_num' => ($member_info['member_login_num'] + 1),
  260. 'member_login_time' => TIMESTAMP,
  261. 'member_old_login_time' => $member_info['member_login_time'],
  262. 'member_login_ip' => getIp(),
  263. 'member_old_login_ip' => $member_info['member_login_ip']
  264. );
  265. $this->editMember(array('member_id' => $member_info['member_id']), $update_info);
  266. }
  267. setNcCookie('cart_goods_num', '', -3600);
  268. }
  269. /**
  270. * 获取会员信息
  271. * @param array $param 会员条件
  272. * @param string $field 显示字段
  273. * @return array 数组格式的返回结果
  274. */
  275. public function infoMember($param, $field = '*')
  276. {
  277. if (empty($param)) return false;
  278. //得到条件语句
  279. $condition_str = $this->getCondition($param);
  280. $param = array();
  281. $param['table'] = 'member';
  282. $param['where'] = $condition_str;
  283. $param['field'] = $field;
  284. $param['limit'] = 1;
  285. $member_list = Db::select($param);
  286. $member_info = $member_list[0];
  287. if (intval($member_info['store_id']) > 0) {
  288. $param = array();
  289. $param['table'] = 'store';
  290. $param['field'] = 'store_id';
  291. $param['value'] = $member_info['store_id'];
  292. $field = 'store_id,store_name,grade_id';
  293. $store_info = Db::getRow($param, $field);
  294. if (!empty($store_info) && is_array($store_info)) {
  295. $member_info['store_name'] = $store_info['store_name'];
  296. $member_info['grade_id'] = $store_info['grade_id'];
  297. }
  298. }
  299. return $member_info;
  300. }
  301. /**
  302. * 注册
  303. */
  304. public function register($register_info)
  305. {
  306. // 注册验证
  307. $obj_validate = new Validate();
  308. $obj_validate->validateparam = array(
  309. array("input" => $register_info["username"], "require" => "true", "message" => '用户名不能为空'),
  310. array("input" => $register_info["password"], "require" => "true", "message" => '密码不能为空'),
  311. array("input" => $register_info["password_confirm"], "require" => "true", "validator" => "Compare", "operator" => "==", "to" => $register_info["password"], "message" => '密码与确认密码不相同'),
  312. //array("input"=>$register_info["email"], "require"=>"true", "validator"=>"email", "message"=>'电子邮件格式不正确'),
  313. );
  314. $error = $obj_validate->validate();
  315. if ($error != '') {
  316. return array('error' => $error);
  317. }
  318. // 验证用户名是否重复
  319. $check_member_name = $this->getMemberInfo(array('member_name' => $register_info['username']));
  320. if (is_array($check_member_name) and count($check_member_name) > 0) {
  321. return array('error' => '用户名已存在');
  322. }
  323. // 验证邮箱是否重复
  324. $check_member_email = $this->getMemberInfo(array('member_email' => $register_info['email']));
  325. if (is_array($check_member_email) and count($check_member_email) > 0) {
  326. return array('error' => '邮箱已存在');
  327. }
  328. // 会员添加
  329. $member_info = array();
  330. $member_info['member_name'] = $register_info['username'];
  331. $member_info['member_passwd'] = $register_info['password'];
  332. $member_info['member_email'] = $register_info['email'];
  333. //添加邀请人(推荐人)会员积分 by abc.com
  334. $member_info['inviter_id'] = $register_info['inviter_id'];
  335. $insert_id = $this->addMember($member_info);
  336. if ($insert_id) {
  337. //添加会员积分
  338. if (C('points_isuse')) {
  339. Model('points')->savePointsLog('regist', array('pl_memberid' => $insert_id, 'pl_membername' => $register_info['username']), false);
  340. //添加邀请人(推荐人)会员积分 by abc.com
  341. $inviter_name = Model('member')->table('member')->getfby_member_id($member_info['inviter_id'], 'member_name');
  342. Model('points')->savePointsLog('inviter', array('pl_memberid' => $register_info['inviter_id'], 'pl_membername' => $inviter_name, 'invited' => $member_info['member_name']));
  343. }
  344. // 添加默认相册
  345. $insert['ac_name'] = '买家秀';
  346. $insert['member_id'] = $insert_id;
  347. $insert['ac_des'] = '买家秀默认相册';
  348. $insert['ac_sort'] = 1;
  349. $insert['is_default'] = 1;
  350. $insert['upload_time'] = TIMESTAMP;
  351. $this->table('sns_albumclass')->insert($insert);
  352. $member_info['member_id'] = $insert_id;
  353. $member_info['is_buy'] = 1;
  354. return $member_info;
  355. } else {
  356. return array('error' => '注册失败');
  357. }
  358. }
  359. private function empty_model($param)
  360. {
  361. $member = array();
  362. $passwd = trim($param['member_passwd']);
  363. $member['member_passwd'] = empty($passwd) ? $passwd : md5($passwd);
  364. $member['member_time'] = TIMESTAMP;
  365. $member['member_login_time'] = TIMESTAMP;
  366. $member['member_old_login_time'] = TIMESTAMP;
  367. $member['member_login_ip'] = getIp();
  368. $member['member_old_login_ip'] = $member['member_login_ip'];
  369. return $member;
  370. }
  371. /**
  372. * 注册商城会员
  373. *
  374. * @param array $param 会员信息
  375. * @return array 数组格式的返回结果
  376. */
  377. public function addMember($param)
  378. {
  379. if (empty($param)) {
  380. return false;
  381. }
  382. try {
  383. $this->beginTransaction();
  384. $member_info = $this->empty_model($param);
  385. foreach ($param as $key => $value) {
  386. if ($key == 'member_passwd') {
  387. $passwd = trim($param['member_passwd']);
  388. $member_info['member_passwd'] = empty($passwd) ? $passwd : md5($passwd);
  389. } elseif ($key == 'member_time') {
  390. $member_info['member_time'] = TIMESTAMP;
  391. } elseif ($key == 'member_login_time') {
  392. $member_info['member_login_time'] = TIMESTAMP;
  393. } elseif ($key == 'member_login_ip') {
  394. $member_info['member_login_ip'] = getIp();
  395. } else {
  396. $member_info[$key] = $value;
  397. }
  398. }
  399. $insert_id = $this->table('member')->insert($member_info);
  400. if (!$insert_id) {
  401. throw new Exception();
  402. }
  403. $insert = $this->addMemberCommon(array('member_id' => $insert_id));
  404. if (!$insert) {
  405. throw new Exception();
  406. }
  407. $this->commit();
  408. return $insert_id;
  409. } catch (Exception $e) {
  410. $this->rollback();
  411. return false;
  412. }
  413. }
  414. /**
  415. * 会员登录检查
  416. *
  417. */
  418. public function checkloginMember()
  419. {
  420. if ($_SESSION['is_login'] == '1') {
  421. @header("Location: index.php");
  422. exit();
  423. }
  424. }
  425. /**
  426. * 检查会员是否允许举报商品
  427. *
  428. */
  429. public function isMemberAllowInform($member_id)
  430. {
  431. $condition = array();
  432. $condition['member_id'] = $member_id;
  433. $member_info = $this->getMemberInfo($condition, 'inform_allow');
  434. if (intval($member_info['inform_allow']) === 1) {
  435. return true;
  436. } else {
  437. return false;
  438. }
  439. }
  440. /**
  441. * 取单条信息
  442. * @param unknown $condition
  443. * @param string $fields
  444. */
  445. public function getMemberCommonInfo($condition = array(), $fields = '*')
  446. {
  447. return $this->table('member_common')->where($condition)->field($fields)->find();
  448. }
  449. /**
  450. * 插入扩展表信息
  451. * @param unknown $data
  452. * @return Ambigous <mixed, boolean, number, unknown, resource>
  453. */
  454. public function addMemberCommon($data)
  455. {
  456. return $this->table('member_common')->insert($data);
  457. }
  458. /**
  459. * 编辑会员扩展表
  460. * @param unknown $data
  461. * @param unknown $condition
  462. * @return Ambigous <mixed, boolean, number, unknown, resource>
  463. */
  464. public function editMemberCommon($data, $condition)
  465. {
  466. return $this->table('member_common')->where($condition)->update($data);
  467. }
  468. /**
  469. * 添加会员积分
  470. * @param unknown $member_info
  471. */
  472. public function addPoint($member_info)
  473. {
  474. if (!C('points_isuse') || empty($member_info)) return;
  475. //一天内只有第一次登录赠送积分
  476. if (trim(@date('Y-m-d', $member_info['member_login_time'])) == trim(date('Y-m-d'))) return;
  477. //加入队列
  478. $queue_content = array();
  479. $queue_content['member_id'] = $member_info['member_id'];
  480. $queue_content['member_name'] = $member_info['member_name'];
  481. QueueClient::push('addPoint', $queue_content);
  482. }
  483. /**
  484. * 添加会员经验值
  485. * @param unknown $member_info
  486. */
  487. public function addExppoint($member_info)
  488. {
  489. if (empty($member_info)) return;
  490. //一天内只有第一次登录赠送经验值
  491. if (trim(@date('Y-m-d', $member_info['member_login_time'])) == trim(date('Y-m-d'))) return;
  492. //加入队列
  493. $queue_content = array();
  494. $queue_content['member_id'] = $member_info['member_id'];
  495. $queue_content['member_name'] = $member_info['member_name'];
  496. QueueClient::push('addExppoint', $queue_content);
  497. }
  498. /**
  499. * 取得会员安全级别
  500. * @param unknown $member_info
  501. */
  502. public function getMemberSecurityLevel($member_info = array())
  503. {
  504. $tmp_level = 0;
  505. if ($member_info['member_email_bind'] == '1') {
  506. $tmp_level += 1;
  507. }
  508. if ($member_info['member_mobile_bind'] == '1') {
  509. $tmp_level += 1;
  510. }
  511. if ($member_info['member_paypwd'] != '') {
  512. $tmp_level += 1;
  513. }
  514. return $tmp_level;
  515. }
  516. /**
  517. * 获得会员等级
  518. * @param bool $show_progress 是否计算其当前等级进度
  519. * @param int $exppoints 会员经验值
  520. * @param array $cur_level 会员当前等级
  521. */
  522. public function getMemberGradeArr($show_progress = false, $exppoints = 0, $cur_level = '')
  523. {
  524. $member_grade = C('member_grade') ? unserialize(C('member_grade')) : array();
  525. //处理会员等级进度
  526. if ($member_grade && $show_progress) {
  527. $is_max = false;
  528. if ($cur_level === '') {
  529. $cur_gradearr = $this->getOneMemberGrade($exppoints, false, $member_grade);
  530. $cur_level = $cur_gradearr['level'];
  531. }
  532. foreach ($member_grade as $k => $v) {
  533. if ($cur_level == $v['level']) {
  534. $v['is_cur'] = true;
  535. }
  536. $member_grade[$k] = $v;
  537. }
  538. }
  539. return $member_grade;
  540. }
  541. /**
  542. * 将条件数组组合为SQL语句的条件部分
  543. *
  544. * @param array $conditon_array
  545. * @return string
  546. */
  547. private function getCondition($conditon_array)
  548. {
  549. $condition_sql = '';
  550. if ($conditon_array['member_id'] != '') {
  551. $condition_sql .= " and member_id= '" . intval($conditon_array['member_id']) . "'";
  552. }
  553. if ($conditon_array['member_name'] != '') {
  554. $condition_sql .= " and member_name='" . $conditon_array['member_name'] . "'";
  555. }
  556. if ($conditon_array['member_passwd'] != '') {
  557. $condition_sql .= " and member_passwd='" . $conditon_array['member_passwd'] . "'";
  558. }
  559. //是否允许举报
  560. if ($conditon_array['inform_allow'] != '') {
  561. $condition_sql .= " and inform_allow='{$conditon_array['inform_allow']}'";
  562. }
  563. //是否允许购买
  564. if ($conditon_array['is_buy'] != '') {
  565. $condition_sql .= " and is_buy='{$conditon_array['is_buy']}'";
  566. }
  567. //是否允许发言
  568. if ($conditon_array['is_allowtalk'] != '') {
  569. $condition_sql .= " and is_allowtalk='{$conditon_array['is_allowtalk']}'";
  570. }
  571. //是否允许登录
  572. if ($conditon_array['member_state'] != '') {
  573. $condition_sql .= " and member_state='{$conditon_array['member_state']}'";
  574. }
  575. if ($conditon_array['friend_list'] != '') {
  576. $condition_sql .= " and member_name IN (" . $conditon_array['friend_list'] . ")";
  577. }
  578. if ($conditon_array['member_email'] != '') {
  579. $condition_sql .= " and member_email='" . $conditon_array['member_email'] . "'";
  580. }
  581. if ($conditon_array['no_member_id'] != '') {
  582. $condition_sql .= " and member_id != '" . $conditon_array['no_member_id'] . "'";
  583. }
  584. if ($conditon_array['like_member_name'] != '') {
  585. $condition_sql .= " and member_name like '%" . $conditon_array['like_member_name'] . "%'";
  586. }
  587. if ($conditon_array['like_member_email'] != '') {
  588. $condition_sql .= " and member_email like '%" . $conditon_array['like_member_email'] . "%'";
  589. }
  590. if ($conditon_array['like_member_truename'] != '') {
  591. $condition_sql .= " and member_truename like '%" . $conditon_array['like_member_truename'] . "%'";
  592. }
  593. if ($conditon_array['in_member_id'] != '') {
  594. $condition_sql .= " and member_id IN (" . $conditon_array['in_member_id'] . ")";
  595. }
  596. if ($conditon_array['in_member_name'] != '') {
  597. $condition_sql .= " and member_name IN (" . $conditon_array['in_member_name'] . ")";
  598. }
  599. if ($conditon_array['member_qqopenid'] != '') {
  600. $condition_sql .= " and member_qqopenid = '{$conditon_array['member_qqopenid']}'";
  601. }
  602. if ($conditon_array['member_sinaopenid'] != '') {
  603. $condition_sql .= " and member_sinaopenid = '{$conditon_array['member_sinaopenid']}'";
  604. }
  605. return $condition_sql;
  606. }
  607. /**
  608. * 删除会员
  609. *
  610. * @param int $id 记录ID
  611. * @return array $rs_row 返回数组形式的查询结果
  612. */
  613. public function del($id)
  614. {
  615. if (intval($id) > 0) {
  616. $where = " member_id = '" . intval($id) . "'";
  617. $result = Db::delete('member', $where);
  618. return $result;
  619. } else {
  620. return false;
  621. }
  622. }
  623. /**
  624. * 获得某一会员等级
  625. * @param int $exppoints
  626. * @param bool $show_progress 是否计算其当前等级进度
  627. * @param array $member_grade 会员等级
  628. */
  629. public function getOneMemberGrade($exppoints, $show_progress = false, $member_grade = array())
  630. {
  631. if (!$member_grade) {
  632. $member_grade = C('member_grade') ? unserialize(C('member_grade')) : array();
  633. }
  634. if (empty($member_grade)) {//如果会员等级设置为空
  635. $grade_arr['level'] = -1;
  636. $grade_arr['level_name'] = '暂无等级';
  637. return $grade_arr;
  638. }
  639. $exppoints = intval($exppoints);
  640. $grade_arr = array();
  641. if ($member_grade) {
  642. foreach ($member_grade as $k => $v) {
  643. if ($exppoints >= $v['exppoints']) {
  644. $grade_arr = $v;
  645. }
  646. }
  647. }
  648. //计算提升进度
  649. if ($show_progress == true) {
  650. if (intval($grade_arr['level']) >= (count($member_grade) - 1)) {//如果已达到顶级会员
  651. $grade_arr['downgrade'] = $grade_arr['level'] - 1;//下一级会员等级
  652. $grade_arr['downgrade_name'] = $member_grade[$grade_arr['downgrade']]['level_name'];
  653. $grade_arr['downgrade_exppoints'] = $member_grade[$grade_arr['downgrade']]['exppoints'];
  654. $grade_arr['upgrade'] = $grade_arr['level'];//上一级会员等级
  655. $grade_arr['upgrade_name'] = $member_grade[$grade_arr['upgrade']]['level_name'];
  656. $grade_arr['upgrade_exppoints'] = $member_grade[$grade_arr['upgrade']]['exppoints'];
  657. $grade_arr['less_exppoints'] = 0;
  658. $grade_arr['exppoints_rate'] = 100;
  659. } else {
  660. $grade_arr['downgrade'] = $grade_arr['level'];//下一级会员等级
  661. $grade_arr['downgrade_name'] = $member_grade[$grade_arr['downgrade']]['level_name'];
  662. $grade_arr['downgrade_exppoints'] = $member_grade[$grade_arr['downgrade']]['exppoints'];
  663. $grade_arr['upgrade'] = $member_grade[$grade_arr['level'] + 1]['level'];//上一级会员等级
  664. $grade_arr['upgrade_name'] = $member_grade[$grade_arr['upgrade']]['level_name'];
  665. $grade_arr['upgrade_exppoints'] = $member_grade[$grade_arr['upgrade']]['exppoints'];
  666. $grade_arr['less_exppoints'] = $grade_arr['upgrade_exppoints'] - $exppoints;
  667. $grade_arr['exppoints_rate'] = round(($exppoints - $member_grade[$grade_arr['level']]['exppoints']) / ($grade_arr['upgrade_exppoints'] - $member_grade[$grade_arr['level']]['exppoints']) * 100, 2);
  668. }
  669. }
  670. return $grade_arr;
  671. }
  672. /**
  673. * @param $user_id 用户ID
  674. * @return value 获取用户预存款金额
  675. */
  676. public function getPdAmount($member_id){
  677. //查询会员信息
  678. $member_id = intval($member_id);
  679. $member_info = $this->getMemberInfo(array('member_id'=>$member_id));
  680. if (!is_array($member_info) || count($member_info)<=0){
  681. return 0; // 用户信息不对
  682. }
  683. $available_predeposit=floatval($member_info['available_predeposit']);
  684. return $available_predeposit;
  685. }
  686. /**
  687. * @param $user_id 用户ID
  688. * @return value 获取用户预存款订单列表(图片, 名字, 数量, 订单时间, 订单号)
  689. */
  690. public function getPdOrderList($member_id){
  691. //查询预存款订单列表
  692. $member_id = intval($member_id);
  693. $member_info = $this->getMemberInfo(array('member_id'=>$member_id));
  694. if (!is_array($member_info) || count($member_info)<=0){
  695. return array(); // 用户信息不对
  696. }
  697. // 预存款订单查询条件
  698. $condition = 'lg_freeze_amount=0.0 and lg_av_amount<0.0 and lg_member_name=\'' . $member_info['member_name'] . '\'';
  699. $model_pd = Model('predeposit');
  700. $tmp_log_list = array();
  701. //$pd_log_list =$this->getPdLogList($condition,20,'*','lg_id desc');
  702. $pd_log_list = $model_pd->getPdLogList($condition,'','*','lg_id desc');
  703. // 订单数据查询条件(只查询已完成订单), 生成订单查询语句, 在详细查询阶段进行批量查询
  704. $condition_order = "refund_state=0 and delete_state=0 and order_id in(";
  705. foreach ($pd_log_list as $key => $value) {
  706. $use_list = array();
  707. $match = '';
  708. preg_match('/\d+/',$value['lg_desc'], $match);
  709. $order_id = $match[0];
  710. $use_list['order_id'] = $order_id;
  711. $use_list['order_add_time'] = $value['lg_add_time'];
  712. $use_list['order_value'] = $value['lg_av_amount'];
  713. if (empty($tmp_log_list)) {
  714. $condition_order .= '\''.$order_id .'\'';
  715. } else {
  716. $condition_order .= "," . '\''. $order_id .'\'';
  717. }
  718. // 获取订单数据
  719. $tmp_log_list[$order_id] = $use_list;
  720. }
  721. // 查询订单详细数据
  722. $condition_order .= ")";
  723. $model_order = Model('order');
  724. //$order_list = $model_order->getOrderList($condition_order, 20, '*', 'order_id desc','', array('order_common','order_goods','store'));
  725. $order_list = $model_order->getOrderList($condition_order, '', '*', 'order_id desc','', array('order_common','order_goods','store'));
  726. // 订单列表处理
  727. foreach ($order_list as $key => $value) {
  728. $item = array();
  729. // 查询订单
  730. // 图片, 名字, 数量
  731. $order_id = $value['order_id'];
  732. $use_list = $tmp_log_list[$order_id];
  733. if (empty($use_list)) continue; // 该订单为其他消耗, 非购买商品
  734. $item['goods_name'] = $value['goods_name'];
  735. $item['goods_num'] = $value['goods_num'];
  736. $item['goods_image'] = $value['goods_image'];
  737. array_push($use_list['item'], $item);
  738. array_push($tmp_log_list[$order_id], $item);
  739. }
  740. // 最终结果组装
  741. $pd_result_list = array();
  742. foreach ($tmp_log_list as $key => $value) {
  743. $use_list = array();
  744. $use_list['order_id']= $value['order_id'];
  745. $use_list['order_add_time']= $value['order_add_time'];
  746. $use_list['order_value']= $value['order_value'];
  747. $use_list['item']= $value['item'];
  748. array_push($pd_result_list, $use_list);
  749. }
  750. return $pd_result_list;
  751. }
  752. }