| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 |
- <?php
- /**
- * Created by PhpStorm.
- * Author: 芸众商城 www.yunzshop.com
- * Date: 2017/4/12
- * Time: 下午2:39
- */
- namespace app\frontend\modules\finance\models;
- use Illuminate\Support\Collection;
- use Intervention\Image\Point;
- use app\common\helpers\Cache;
- class PointLog extends \app\common\models\finance\PointLog
- {
- /*public static function getPointTotal($member_id, $type = null)
- {
- $builder = PointLog::select()->byMemberId($member_id)->type($type)->limit(5)->orderBy('id', 'desc');
- return $builder;
- }
- public static function getLastTime($member_id, $type)
- {
- $time = PointLog::select('created_at')->byMemberId($member_id)->type($type)->first();
- return $time;
- }*/
- /**
- * 新的获取积分明细方法
- * @param $member_id
- * @param null $type
- * @param null $mode
- * @param null $month
- * @return array
- */
- public function getPointRecord($member_id, $type = null, $mode = null, $month = null){
- $original=PointLog::select(['relation_id','id','created_at','member_id','point_mode','point','before_point','after_point','point_income_type','point_mode'])
- ->byMemberId($member_id)->type($type)->mode($mode)->month($month)
- ->orderBy('created_at', 'desc')->orderBy('id','desc')->paginate(15)->toArray();
- if(empty($original['data'])&&!$month){
- return ['record_list'=>['data'=>[date('Y-m')=>[]]],'point_arr'=>[date('Y-m')=>['income'=>0,'expand'=>0]],'source_comment'=>$this->getSource($member_id),];
- }
- $month=date('Y-m',strtotime($month));
- $list=$this->getFilterData($original,$month);
- $monthData=$this->getMonthData($list['month_list']?:[$month],$member_id);
- $source=(new \app\common\models\finance\PointLog())->sourceComment();
- return ['record_list'=>$list['record_list'],'source_comment'=>$this->getSource($member_id),'point_arr'=>$monthData];
- }
- /**
- * 1.1.138前取积分明细方法
- * @param $member_id
- * @param null $type
- * @param null $mode
- * @param null $month
- * @return mixed
- */
- public static function getPointLogList($member_id, $type = null)
- {
- $builder = PointLog::select()->byMemberId($member_id)->type($type)->orderBy('id', 'desc')->paginate(15)->toArray();
- return $builder;
- }
- /**
- * 获取用户最新的三条记录
- * @param $member_id
- * @return mixed
- */
- public function getLatestRecord($member_id){
- return PointLog::select(['id','created_at','member_id','point_mode','point','before_point','after_point','point_income_type'])->byMemberId($member_id)->orderBy('created_at','desc')->limit(3)->get()->toArray();
- }
- public function scopeByMemberId($query, $member_id)
- {
- return $query->where('member_id', $member_id)->uniacid();
- }
- public function scopeType($query, $type)
- {
- if (!isset($type) || $type == 0) {
- return $query;
- }
- return $query->where('point_income_type', $type);
- }
- public function scopeMode($query, $mode)
- {
- if (!isset($mode) || $mode == 0) {
- return $query;
- }
- return $query->where('point_mode', $mode);
- }
- public function scopeMonth($query, $month)
- {
- if (!isset($month) || $month == '') {
- return $query;
- }
- return $query->where('created_at', '<', strtotime('last day of ' . $month)+86399);
- }
- /**
- * 获取按月份分类后的积分明细数据
- * @param $data
- * @return array
- */
- public function getFilterData($data,$month)
- {
- $list = [];
- foreach ($data['data'] as $val) {
- $list[date('Y-m', strtotime($val['created_at']))][] = $val;
- }
- if(empty($list)){
- $list[$month]=[];
- }
- $month=array_keys($list);
- $data['data']=$list;
- return ['record_list'=>$data,'month_list'=>$month];
- }
- /**
- * 获取月份区间中,每个月的收入和支出
- * @param $month
- * @param $member_id
- * @return array
- */
- private function getMonthData($month,$member_id){
- $startMonth=strtotime($month[count($month)-1]);
- $endMonth=strtotime('last day of '.$month[0])+86399;
- $original=PointLog::selectRaw("YEAR(FROM_UNIXTIME(created_at,'%Y-%m-%d')) as years ,Right(100 + MONTH(FROM_UNIXTIME(created_at,'%Y-%m-%d')),2) as months ,sum(if(point_income_type=1,point,0)) as income,sum(if(point_income_type=-1,point,0))as expand")
- ->byMemberId($member_id)
- ->whereBetween('created_at',[$startMonth,$endMonth])
- ->groupByRaw("years,months")
- ->get()->toArray();
- $result=[];
- if(count($original)){
- foreach($original as $val){
- $result[$val['years'].'-'.$val['months']]=['income'=>$val['income'],'expand'=>$val['expand']];
- }
- }else{
- $result[$month[0]]=['income'=>0,'expand'=>0];
- }
- return $result;
- }
- /**
- * 获取积分来源
- * @param $member_id
- * @return mixed
- */
- private function getSource($member_id){
- $redis_key = "ServiceTypeList:".$member_id;
- $result=[];
- if(Cache::has($redis_key)){
- $result = Cache::get($redis_key);
- }else{
- $service_type_arr = (new \app\common\models\finance\PointLog())->sourceComment();
- $service_type_key = PointLog::where('member_id',$member_id)
- ->select(['point_mode'])
- ->groupBy('point_mode')
- ->pluck('point_mode');
- $service_type_arr = $service_type_key->map(function ($serviceKey) use ($service_type_arr){
- return [
- 'id' => $serviceKey,
- 'name' => $service_type_arr[$serviceKey],
- ];
- })->values();
- foreach($service_type_arr as $key=>$value){
- $result[$value['id']]=$value['name'];
- }
- //根据当前会员的积分明细查出所拥有的服务类型,存进缓存
- Cache::put($redis_key, $result, 1440);
- }
- return $result;
- }
- }
|