field('id,type,level_name,total_gift_price,money')->where('is_delete', 1)->order('id asc')->select(); $last_week_time = strtotime('-1 week last sunday', time()); $week_start = date('Y-m-d', strtotime("last week Monday")); $week_end = date('Y-m-d', strtotime("last week Sunday")); $belong_week = $week_start.'-'.$week_end; // $last_week_time = strtotime('-1 week last sunday', time()); // $week_start = date('Y-m-d', strtotime("this week Monday")); // $week_end = date('Y-m-d', strtotime("this week Sunday")); // $belong_week = $week_start.'-'.$week_end; //获取所有房间上周流水 $map = []; $map[] = ['type', '=', $type]; $last_week_income = db::name('user_charm_count_day')->where($map)->field('rid,sum(amount) as amount')->whereTime('add_time', 'last week')->group('rid')->select(); // $last_week_income = db::name('user_charm_count_day')->where($map)->field('rid,sum(amount) as amount')->whereTime('add_time', 'week')->group('rid')->select(); $insert_all = []; if(!empty($last_week_income)){ foreach ($last_week_income as $k => $v){ //当前房间是否有收益 $room_info = db::name('room')->where('rid', $v['rid'])->field('room_owner_uid,rid,is_earnings')->find(); $room_is_earnings = $room_info['is_earnings']; if($room_is_earnings == 1){ //上周补贴奖励金额 $subsidy_money = 0; foreach ($room_subsidy_info as $a => &$b){ $money = $b['money']; if($b['total_gift_price'] > $v['amount']){ break; }else{ $subsidy_money = $v['amount'] * $money * 0.001; } } //上周是否已添加 $where = []; $where[] = ['rid', '=', $v['rid']]; $where[] = ['type', '=', $type]; $where[] = ['belong_week', '=', $belong_week]; $info = db::name('room_week_earnings_log')->where($where)->find(); if(empty($info)){ $insert = []; $insert['rid'] = $v['rid']; $insert['type'] = $type; $insert['change_value'] = $v['amount']; $insert['earnings'] = $subsidy_money; $insert['add_time'] = time(); $insert['last_week_time'] = $last_week_time; $insert['belong_week'] = $belong_week; $insert['owner_uid'] = $room_info['room_owner_uid']; $insert_all[] = $insert; } } } if(!empty($insert_all)){ $reslut = db::name('room_week_earnings_log')->insertAll($insert_all); if(!$reslut){ echo date('Y-m-d H:i:s').'执行失败'; } } } echo date('Y-m-d H:i:s').'执行成功'; } //批量结算 public function batch_give_room_subsidy($belong_week=""){ $redis = connectionRedis(); $belong_week = $redis->lPop('balance_room_wages_date'); if (empty($belong_week)) { return ['code' => 201, 'msg' => "没有要结算的工资日期", 'data' => null]; } //已经审核通过未发放的 $is_had_deal = db::name('room_week_earnings_log')->where(['is_delete'=>2,'belong_week'=>$belong_week,'is_fa'=>2,'apply_status' => 2])->find(); if(empty($is_had_deal)){ Log::write('没有要结算的工资'.$belong_week,'room_wages'); return ['code' => 201, 'msg' => "没有要发放的工资", 'data' => null]; } try { Db::startTrans(); //已经审核通过未发放的 $list = db::name('room_week_earnings_log')->where(['is_delete'=>2,'belong_week'=>$belong_week,'is_fa'=>2,'apply_status'=>2])->order(['id'=>'asc'])->select(); if(!empty($list)){ foreach ($list as $k => $v){ if($v['earnings'] > 0){ $reslut = model('admin/User')->change_user_money_by_uid($v['owner_uid'], $v['earnings'], 1, 34, '房间补贴收益', $v['owner_uid'], 0, $v['rid']); if ($reslut['code'] == 201) { Db::rollback(); Log::write(['msg'=>'工资结算失败','result'=>$reslut],'room_wages'); return ['code' => 201, 'msg' => $reslut['msg'], 'data' => null]; } } db::name('room_week_earnings_log')->where('id', $v['id'])->update(['is_fa' => 1, 'update_time' => time()]); } } // 提交事务 Db::commit(); Log::write(['msg'=>'工资结算成功','result'=>null],'room_wages'); return ['code' => 200, 'msg' => "发放成功", 'data' => null]; } catch (\Exception $e) { // 回滚事务 Db::rollback(); Log::write(['e'=>$e],'room_wages'); return ['code' => 201, 'msg' => "发放失败", 'data' => null]; } } //-------------------公会相关业务---------------------- //上周房间流水 结算 public function statistics_guild_last_week_earnings($type){ $type = 1; set_time_limit(0); ini_set('memory_limit', '1024M'); $week_start = date('Y-m-d', strtotime("last week Monday")); $week_end = date('Y-m-d', strtotime("last week Sunday")); $belong_week = $week_start.'-'.$week_end; $last_week_time = strtotime('-1 week last sunday', time()); //调试 // $week_start = date('Y-m-d', strtotime("this week Monday")); // $week_end = date('Y-m-d', strtotime("this week Sunday")); // $belong_week = $week_start.'-'.$week_end; // $last_week_time = strtotime('-1 week last sunday', time()); //获取所有有效工会 $guild_ids = db::name('guild')->where(['is_delete'=>1,'is_show'=>1])->column('id'); if(empty($guild_ids)){ return ['code' => 201, 'msg' => "公会不存在!", 'data' => null]; } //公会补贴信息 $guild_subsidy_info = db::name('room_subsidy_lucky')->field('id,type,level_name,total_gift_price,money')->where('is_delete', 1)->order('id asc')->select(); //获取所有房间上周流水 $map = []; $map[] = ['type', '=', $type]; $map[] = ['guild_id', 'in', $guild_ids]; $last_week_income = db::name('room_guild_charm_count_day')->field('guild_id,sum(amount) as amount')->where($map)->whereTime('add_time', 'last week')->group('guild_id')->select(); //调试 // $last_week_income = db::name('room_guild_charm_count_day')->field('guild_id,sum(amount) as amount')->where($map)->whereTime('add_time', 'week')->group('guild_id')->select(); $insert_all = []; if(!empty($last_week_income)){ foreach ($last_week_income as $k => $v){ //上周补贴奖励金额 $subsidy_money = 0; foreach ($guild_subsidy_info as $a => &$b){ $money = $b['money']; if($b['total_gift_price'] > $v['amount']){ break; }else{ $subsidy_money = $v['amount'] * $money * 0.001; } } //上周是否已添加 $where = []; $where[] = ['guild_id', '=', $v['guild_id']]; $where[] = ['type', '=', $type]; $where[] = ['belong_week', '=', $belong_week]; $info = db::name('guild_week_earnings_log')->where($where)->find(); //获取公会信息 $guild_info = db::name('guild')->where(['id'=>$v['guild_id']])->find(); if(empty($info)){ $insert = []; $insert['guild_id'] = $v['guild_id']; $insert['guild_uid_id'] = $guild_info['uid']; $insert['type'] = 1; $insert['change_value'] = $v['amount']; $insert['earnings'] = $subsidy_money; $insert['add_time'] = time(); $insert['update_time'] = time(); $insert['last_week_time'] = $last_week_time; $insert['belong_week'] = $belong_week; $insert['is_fa'] = 2; $insert['is_delete'] = 1; $insert_all[] = $insert; } } if(!empty($insert_all)){ $reslut = db::name('guild_week_earnings_log')->insertAll($insert_all); if(!$reslut){ echo date('Y-m-d H:i:s').'执行失败'; } } } echo date('Y-m-d H:i:s').'执行成功'; } //批量结算 public function batch_give_guild_subsidy(){ $redis = connectionRedis(); $belong_week = $redis->lPop('balance_guild_wages_date'); if (empty($belong_week)) { // Log::write('公会工资日期未监控到','guild_wages'); return ['code' => 201, 'msg' => "没有要结算的工资日期", 'data' => null]; } $is_had_deal = db::name('guild_week_earnings_log')->where(['is_delete'=>2,'belong_week'=>$belong_week,'is_fa'=>2])->find(); if(empty($is_had_deal)){ Log::write('没有要结算的工资'.$belong_week,'guild_wages'); return ['code' => 201, 'msg' => "没有要结算的工资", 'data' => null]; } try { Db::startTrans(); //标记已处理 $list = db::name('guild_week_earnings_log')->where(['is_delete'=>2,'belong_week'=>$belong_week,'is_fa'=>2])->order(['id'=>'asc'])->select(); if(!empty($list)){ foreach ($list as $k => $v){ if($v['earnings'] > 0){ $reslut = model('admin/User')->change_user_money_by_uid($v['guild_uid_id'], $v['earnings'], 1, 39, '公会补贴收益', $v['guild_uid_id'], 0, 0); if ($reslut['code'] == 201) { Db::rollback(); Log::write(['msg'=>'结算失败1','result'=>$reslut],'guild_wages'); return ['code' => 201, 'msg' => $reslut['msg'], 'data' => null]; } } db::name('guild_week_earnings_log')->where('id', $v['id'])->update(['is_fa' => 1, 'update_time' => time(), 'fa_time' => time()]); } } // 提交事务 Db::commit(); Log::write('发放成功'.$belong_week,'guild_wages'); return ['code' => 200, 'msg' => "发放成功", 'data' => null]; } catch (\Exception $e) { // 回滚事务 Db::rollback(); Log::write(['msg'=>'程序异常','e'=>$e],'guild_wages'); return ['code' => 201, 'msg' => "发放失败", 'data' => null]; } } }