316 lines
12 KiB
PHP
316 lines
12 KiB
PHP
|
|
<?php
|
||
|
|
|
||
|
|
namespace app\api\model;
|
||
|
|
|
||
|
|
use think\Db;
|
||
|
|
use think\Model;
|
||
|
|
use think\facade\Log;
|
||
|
|
class RoomWages extends Model
|
||
|
|
{
|
||
|
|
|
||
|
|
|
||
|
|
//上周房间流水 结算
|
||
|
|
public function statistics_room_last_week_earnings($type){
|
||
|
|
$type = 1;
|
||
|
|
set_time_limit(0);
|
||
|
|
ini_set('memory_limit', '1024M');
|
||
|
|
|
||
|
|
//房间补贴信息
|
||
|
|
$room_subsidy_info = db::name('room_subsidy')->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];
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
}
|