$uid]; $userinfo = $m_u->getInfo($userwhere); if (empty($userinfo)) { return backarr(0, "无用户信息"); } $where = ['userid' => $uid]; $info = $m_ua->getInfo($where); if (empty($info)) { $defaultData = [ 'userid' => $uid, 'goldscore' => 0, 'siliverscore' => 0, ]; $id = $m_ua->insertData($defaultData); $info = $defaultData; $info['id'] = $id; } return backarr(1, "查询成功", $info); } /*** * 扣除用户积分 * type 0 先扣银币再扣 1金分 2银分 * 20211105 * wj */ public function reduceuserscore($arr, $type = 0) { $fillFields = ['userid', 'usescore', 'usetype']; foreach ($fillFields as $key => $value) { if (!isset($arr[$value]) || empty($arr[$value])) { return backarr(0, "请求错误"); } } $m_u = new userinfomodel(); $userid = $arr['userid']; $usescore = $arr['usescore']; $usetype = $arr['usetype']; $userwhere = ['id' => $userid]; $userinfo = $m_u->getInfo($userwhere); if (empty($userinfo)) { return backarr(0, "无用户信息"); } Db::startTrans(); try { //操作总表 $result = $this->reduceuseraccount($userid, $usescore, $type); if (1 != $result['status']) { throw new \Exception($result['msg']); } $m_uaur = new useraccountuserrecordmodel(); $m_uaar = new useraccountaddrecordmodel(); //$m_uaurd = new useraccountuserrecordbydaymodel(); $list = $this->getaddrecordlistforreduce($userid); if (!$list) { if (empty($userinfo)) { return backarr(0, "无可扣除积分"); } } /*$uaurdDay = date("Y-m-d"); $uaurdInfo = $m_uaurd->getInfoByKey($userid, $uaurdDay); if (empty($uaurdInfo)) { $insertUaurdInfo = [ 'userid' => $userid, 'usetime' => $uaurdDay, 'usescore' => $usescore, ]; $uaurdid = $m_uaurd->insertGetId($insertUaurdInfo); if (empty($uaurdid)) { throw new \Exception("积分统计表创建失败"); } } else { $uaurdUsescore = bcadd($usescore, $uaurdInfo['usescore']); $row = $m_uaurd->updateinfo(['id' => $uaurdInfo['id'], ['usescore' => $uaurdUsescore]]); if (empty($row)) { throw new \Exception("积分统计表修改失败"); } }*/ $residueScore = $usescore; //剩余抵扣积分 foreach ($list as $key => $value) { if ($residueScore <= 0) { break; } $diffScore = $value['activescore'] - $residueScore; if ($diffScore > 0) { $recordScore = $residueScore; $activescore = $diffScore; $residueScore = 0; } else { $recordScore = $value['activescore']; $activescore = 0; $residueScore = abs($diffScore); } $uaurinsertdata = [ 'sourcerecordid' => $value['id'], 'userid' => $userid, 'usescore' => $recordScore, 'usetype' => $usetype, 'usetime' => date("Y-m-d H:i:s"), ]; if (isset($arr['usedemo']) && !empty($arr['usedemo'])) { $uaurinsertdata['usedemo'] = $arr['usedemo']; } $uaurid = $m_uaur->insertData($uaurinsertdata); if (empty($uaurid)) { throw new \Exception("用户积分记录添加失败"); } $uaarwhere = ['id' => $value['id']]; $uaarupdatedata = [ 'activescore' => $activescore, ]; $row = $m_uaar->updateinfo($uaarwhere, $uaarupdatedata); if (empty($row)) { throw new \Exception("用户积分增加记录修改失败"); } } Db::commit(); return backarr(1, '操作成功'); } catch (\Exception $e) { Db::rollback(); return backarr(0, $e->getMessage()); } } /*** * 验证用户积分 * 积分不够返回错误 * type 0 总积分 1金分 2银分 * 20211105 * wj */ private function checkreducedata($uid, $userscore, $type = 0) { $result = $this->getinfobyuid(['userid' => $uid]); if (1 != $result['status']) { return $result; } $info = $result['data']; switch ($type) { case 0: $count = bcadd($info['goldscore'], $info['siliverscore']); break; case 2: $count = $info['siliverscore']; break; case 1: $count = $info['goldscore']; break; } if ($count < $userscore) { return backarr(0, "用户积分不足"); } return backarr(1, '', $info); } /** * 扣除用户积分 总表修改 * type 0 先扣银币再扣 1金分 2银分 * 20211105 * wj */ private function reduceuseraccount($uid, $userscore, $type = 0) { $result = $this->checkreducedata($uid, $userscore, $type); if (1 != $result['status']) { return $result; } $info = $result['data']; $updateData = []; switch ($type) { case 0: $subsiliverscore = $info['siliverscore'] - $userscore; if ($subsiliverscore >= 0) { $updateData['siliverscore'] = $subsiliverscore; } else { $updateData['siliverscore'] = 0; $updateData['goldscore'] = bcsub($info['goldscore'], abs($subsiliverscore)); } break; case 2: $updateData['siliverscore'] = $info['siliverscore'] - $userscore; break; case 1: $updateData['goldscore'] = $info['goldscore'] - $userscore; break; } $m_ua = new useraccountmodel(); $where = ['id' => $info['id']]; $row = $m_ua->updateinfo($where, $updateData); if (empty($row)) { return backarr(0, "用户积分修改失败"); } return backarr(1, "用户积分修改成功", ['id' => $info['id']]); } /*** * 加用户积分 * $scoretype 1金,2银 * 20211105 * wj */ public function adduserscore($arr) { $fillFields = ['userid', 'scoretype', 'addscore', 'sourcetype']; foreach ($fillFields as $key => $value) { if (!isset($arr[$value]) || empty($arr[$value])) { return backarr(0, "请求错误"); } } $m_u = new userinfomodel(); $userid = $arr['userid']; $scoretype = $arr['scoretype']; $addscore = $arr['addscore']; $sourcetype = $arr['sourcetype']; $userwhere = ['id' => $userid]; $userinfo = $m_u->getInfo($userwhere); if (empty($userinfo)) { return backarr(0, "无用户信息"); } Db::startTrans(); try { $result = $this->adduseraccount($userid, $addscore, $scoretype); if (1 != $result['status']) { throw new \Exception($result['msg']); } $insertData = [ 'activescore' => $addscore, 'createdate' => date('Y-m-d H:i:s'), ]; $insertData = array_merge($insertData, $arr); $m_uaar = new useraccountaddrecordmodel(); $uaarid = $m_uaar->insertData($insertData); if (empty($uaarid)) { throw new \Exception("积分记录添加失败"); } Db::commit(); return backarr(1, "积分增加成功", ['uaarid' => $uaarid, 'uid' => $userid, 'addscore' => $addscore]); } catch (\Exception $e) { Db::rollback(); return backarr(0, $e->getMessage()); } } /*** * 加用户积分 总表修改 * $scoretype 1金,2银 * 20211105 * wj */ private function adduseraccount($uid, $addscore, $scoretype) { $result = $this->getinfobyuid(['userid' => $uid]); if (1 != $result['status']) { return $result; } $info = $result['data']; $updateData = []; switch ($scoretype) { case 1: $updateData['goldscore'] = bcadd($info['goldscore'], $addscore); break; case 2: $updateData['siliverscore'] = bcadd($info['siliverscore'], $addscore); break; } $m_ua = new useraccountmodel(); $where = ['id' => $info['id']]; $row = $m_ua->updateinfo($where, $updateData); if (empty($row)) { return backarr(0, "用户积分修改失败"); } return backarr(1, "用户积分修改成功", ['id' => $info['id']]); } /** * 获取用户可扣除积分 * type 0 先银再扣金 1金分 2银分 * 20211105 * wj */ public function getaddrecordlistforreduce($userid, $scoretype = 0) { $m_u = new userinfomodel(); $m_uaar = new useraccountaddrecordmodel(); $userwhere = ['id' => $userid]; $userinfo = $m_u->getInfo($userwhere); //$startDate = empty($userinfo['createtime']) ? '2021-10-01 00:00:00' : $userinfo['createtime']; $endData = date('Y-m-d H:i:s'); $list = $m_uaar->getaddrecordlistforreduce($userid, $endData, $scoretype); if (empty($list)) { return false; } return $list; } /** * 获取用户增加积分的记录 * 2021105 * wj */ public function addregisterscore($arr) { $m_uaar = new useraccountaddrecordmodel(); $userid = $arr['userid']; $sourcedemo = '注册-水猫'; if (isset($arr['platform']) && !empty($arr['platform'])) { $sourcedemo = '注册-' . $arr['platform']; } $userid = $arr['userid']; $where = [ 'userid' => $userid, 'actiontype' => 1, ]; $data = $m_uaar->getInfo($where); if ($data) { return backarr(0, "用户已有注册积分"); } $insertData = [ 'userid' => $userid, 'scoretype' => 2, 'addscore' => 5, 'sourcetype' => 2, 'sourcedemo' => $sourcedemo, 'actiontype' => 1, ]; return $result = $this->adduserscore($insertData); } /** * 获取积分增加列表 * 20211108 * wj * */ public function getaddlist($arr) { if (!isset($arr['userid']) || empty($arr['userid'])) { return backarr(0, "请求错误"); } $m_uaar = new useraccountaddrecordmodel(); $page = !isset($arr['page']) || empty($arr['page']) ? 1 : $arr['page']; $size = !isset($arr['size']) || empty($arr['size']) ? 10 : $arr['size']; $userid = $arr['userid']; $where = ['userid' => $userid]; $count = $m_uaar->getList($where, 'count'); if ($count <= 0) { return backarr(0, "无数据"); } $list = $m_uaar->getList($where, '*', $page, $size); return backarr(1, "查询成功", $list); } /** * 获取积分使用列表 * 20211108 * wj * */ public function getusedlist($arr) { if (!isset($arr['userid']) || empty($arr['userid'])) { return backarr(0, "请求错误"); } $m_uaur = new useraccountuserrecordmodel(); $page = !isset($arr['page']) || empty($arr['page']) ? 1 : $arr['page']; $size = !isset($arr['size']) || empty($arr['size']) ? 10 : $arr['size']; $userid = $arr['userid']; $where = ['userid' => $userid]; $count = $m_uaur->getList($where, 'count'); if ($count <= 0) { return backarr(0, "无数据"); } $list = $m_uaur->getList($where, '*', $page, $size); return backarr(1, "查询成功", $list); } /** * 根据时间和最少积分获取列表 * 20211130 * wj */ public function getgivelistbytype($arr) { $fillFields = ['type', 'minsocre']; foreach ($fillFields as $key => $value) { if (!isset($arr[$value])) { return backarr(0, "请求失败"); } } $type = $arr['type']; $minsocre = $arr['minsocre']; if (!is_numeric($type) || !in_array($type, [1, 2])) { return backarr(0, "类型错误"); } if (!is_numeric($minsocre)) { return backarr(0, "最小值错误"); } $page = !isset($arr['page']) || empty($arr['page']) ? 1 : $arr['page']; $size = !isset($arr['size']) || empty($arr['size']) ? 10 : $arr['size']; $m_uaur = new useraccountuserrecordmodel(); $count = $m_uaur->getsumscorebytype($type, $minsocre, true); if ($count <= 0) { return backarr(0, "无数据"); } $list = $m_uaur->getsumscorebytype($type, $minsocre, false, $page, $size, "sum desc"); if (count($list) <= 0) { return backarr(0, "无数据"); } $data = [ 'count' => $count, 'list' => $list, ]; return backarr(1, "查询成功", $data); } /** * 为用户加积分 * 20211130 * wj */ public function givescorebyuid($arr) { $fillFields = ['uid', 'score']; foreach ($fillFields as $key => $value) { if (!isset($arr[$value])) { return backarr(0, "请求失败"); } } $uid = $arr['uid']; $socre = $arr['score']; $sourcedemo = "后台管理根基积分消耗赠送"; if (isset($arr['sourcedemo']) && is_string($arr['sourcedemo']) && !empty($arr['sourcedemo'])) { $sourcedemo = $arr['sourcedemo']; } $insertData = [ 'userid' => $uid, 'scoretype' => 2, 'addscore' => $socre, 'sourcetype' => 2, 'sourcedemo' => $sourcedemo, 'actiontype' => 5, ]; return $result = $this->adduserscore($insertData); } /** * 根据查询条件和最少积分获取列表 * 20211208 * wj */ public function getsumscorebywhere($arr) { $fillFields = ['minsocre']; foreach ($fillFields as $key => $value) { if (!isset($arr[$value])) { return backarr(0, "请求失败"); } } $minsocre = $arr['minsocre']; if (!is_numeric($minsocre)) { return backarr(0, "最小值错误"); } $page = !isset($arr['page']) || empty($arr['page']) ? 1 : $arr['page']; $size = !isset($arr['size']) || empty($arr['size']) ? 10 : $arr['size']; $where = []; if (isset($arr['time']) && is_array($arr['time'])) { if (2 == count(array_filter($arr['time']))) { $where['time'] = $arr['time']; } } if (isset($arr['wname']) && !empty($arr['wname']) && is_string($arr['wname'])) { $where['wname'] = $arr['wname']; } if (isset($arr['telno']) && !empty($arr['telno']) && is_string($arr['telno'])) { $where['telno'] = $arr['telno']; } $order = "sumscore asc,sum desc"; if (isset($arr['ordertype']) && is_numeric($arr['ordertype'])) { switch ($arr['ordertype']) { case 1: $order = "sum desc"; break; case 2: $order = "sumscore asc"; break; } } $m_uaur = new useraccountuserrecordmodel(); $count = $m_uaur->getsumscorebywhere($where, $minsocre, true); if ($count <= 0) { return backarr(0, "无数据"); } $list = $m_uaur->getsumscorebywhere($where, $minsocre, false, $page, $size, $order); if (count($list) <= 0) { return backarr(0, "无数据"); } $data = [ 'count' => $count, 'list' => $list, ]; return backarr(1, "查询成功", $data); } /* * 20220103 * steelxu5 * 临时逻辑,2022年初开始弹窗展示送的积分, * 暂时只考虑展示指定日期后送的积分,然后引导用户去我的页面中查看 * 这一逻辑会遗漏掉一些赠送积分的用户,优点是不用处理为这一展示单独建立数据表和展示逻辑,方便后期调整业务逻辑 * */ public function getsendscorebyuiddate($arr){ $uid=$arr['userid']; $date=$arr['date']; $t_ua=new useraccountaddrecordmodel(); $tlist=$t_ua->seladdlistbyuid2date($uid,$date); if(count($tlist)>0){ return backarr(1, "查询成功", $tlist); }else{ return backarr(0, "无数据"); } } }