TaskSystem/app/common/logic/finance/TownShareProfit.php
2023-09-21 14:12:55 +08:00

109 lines
5.1 KiB
PHP

<?php
namespace app\common\logic\finance;
use app\common\enum\user\AccountLogEnum;
use app\common\logic\AccountLogLogic;
use app\common\model\Company;
use app\common\model\company\CompanyAccountLog;
use app\common\model\task\Task;
use app\common\model\user\UserAccountLog;
use app\common\model\user\User;
use think\facade\Db;
use think\facade\Log;
class TownShareProfit
{
public function townTaskType1($taskInfo, $company, $taskSchedulePlan)
{
// if ($company['day_count'] <= $data['proportion_one']) {
// $proportion = $data['proportion_one'];
// } else {
// $proportion = $data['proportion_two'];
// }
Db::startTrans();
try {
$proportion = 0;
//总金额除以2等于不可提现账号金额和收益
$masterMoney = bcdiv($taskInfo['money'], 2, 2);
//收益的25%为负责人的收益 其余为成员的平分收益
$masterUserMoney = bcdiv($masterMoney, 2, 2);
//成员数量
$userAll = User::where('company_id', $company['company_id'])->where('admin_id', 0)->field('id,user_money')->select();
$userAllCount = count($userAll);
// 每个成员的收益
$perUserMoney = bcdiv($masterUserMoney, $userAllCount, 2);
$remark = '来自任务【' . $taskSchedulePlan['template_info']['title'] . '】,完成方:服务部长。';
// 服务部长
$serviceManagerUser = User::where(['company_id' => $company['id'], 'group_id' => 14])->find();
$arr = [$serviceManagerUser['id'], AccountLogEnum::UM_INC_TASK, AccountLogEnum::INC, $masterUserMoney, $taskSchedulePlan['sn'], $remark.'任务结算获得收益' . $masterUserMoney . '元', ['company_id' => $company['id'], 'proportion' => $proportion], 1];
$this->master($arr);
$arr_two = [$serviceManagerUser['id'], AccountLogEnum::UM_INC_TASKUSER, AccountLogEnum::INC, $masterUserMoney, $taskSchedulePlan['sn'], $remark . '获得账户余额' . $masterUserMoney . '元', ['company_id' => $company['id'], 'proportion' => $proportion], 1];
$this->Account($arr_two);
// 成员
foreach ($userAll as $value) {
$arr = [$value['id'], AccountLogEnum::UM_INC_TASK, AccountLogEnum::INC, $perUserMoney, $taskSchedulePlan['sn'], $remark. '获得收益' . $perUserMoney . '元', ['company_id' => $company['id'], 'proportion' => $proportion], 1];
$this->member($arr);
$arr_two = [$value['id'], AccountLogEnum::UM_INC_TASKUSER, AccountLogEnum::INC, $perUserMoney, $taskSchedulePlan['sn'], $remark. '获得账户余额' . $perUserMoney . '元', ['company_id' => $company['id'], 'proportion' => $proportion], 1];
$this->Account($arr_two);
}
// 公司
if ($taskSchedulePlan['company_account_type'] == 1) {
$deposit_count = bcadd($company['deposit'], $masterMoney, 2);
$this->AccountLog($company['id'], $deposit_count, $masterMoney);
$company_money_count = bcadd($company['company_money'], $masterMoney, 2);
$this->AccountLog($company['id'], $company_money_count, $masterMoney);
Company::where('id', $company['id'])->update(['deposit' => Db::raw('deposit+' . $masterMoney), 'company_money' => Db::raw('company_money+' . $masterMoney)]);
}
Db::commit();
return true;
} catch (\Exception $e) {
Db::rollback();
Log::error('54-任务结算失败:' . $e->getMessage());
return false;
}
}
public function AccountLog($companyId, $left_amount, $changeAmount, $change_object = 1, $change_type = 1, $action = 1)
{
$company_log = [
'sn' => generate_sn(UserAccountLog::class, 'sn', 20),
'company_id' => $companyId,
'change_object' => $change_object, //变动对象
'change_type' => $change_type, //变动类型
'action' => $action, //1-增加 2-减少
'left_amount' => $left_amount, //变动后数量
'change_amount' => $changeAmount, //变动数量
'status' => 1,
];
CompanyAccountLog::create($company_log);
}
/**负责人的分润
* @param $data
*/
private function master($data)
{
User::where('id', $data[0])->update(['deposit'=>Db::raw('deposit+' . $data[3]),'user_money'=>Db::raw('user_money+' . $data[3])]);
return AccountLogLogic::add($data[0], $data[1], $data[2], $data[3], $data[4], $data[5], $data[6], $data[7]);
}
/**成员分润
* @param $data
*/
private function member($data)
{
User::where('id', $data[0])->update(['deposit'=>Db::raw('deposit+' . $data[3]),'user_money'=>Db::raw('user_money+' . $data[3])]);
return AccountLogLogic::add($data[0], $data[1], $data[2], $data[3], $data[4], $data[5], $data[6], $data[7]);
}
private function Account($data)
{
return AccountLogLogic::add($data[0], $data[1], $data[2], $data[3], $data[4], $data[5], $data[6], $data[7]);
}
}