Files
mier-php/application/api/model/RoomWages.php
2025-08-11 10:22:05 +08:00

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];
}
}
}