70 lines
2.5 KiB
PHP
70 lines
2.5 KiB
PHP
<?php
|
||
|
||
namespace app\model;
|
||
|
||
use think\model\relation\HasOne;
|
||
|
||
/**
|
||
* 薪资日志
|
||
* 以天为周期记录每个工人、工地的基本工资及加班工资情况
|
||
* 记录的创建,每一次打卡或加班申请就添加当天的记录(每天、每个工地、每个工人最多一条记录)
|
||
*
|
||
* !!!不要删除此表的任何数据!!!
|
||
* !!!不要删除此表的任何数据!!!
|
||
* !!!不要删除此表的任何数据!!!
|
||
*
|
||
* Class PayLog
|
||
* @package app\model
|
||
*/
|
||
class PayLog extends Base
|
||
{
|
||
public function account(): HasOne
|
||
{
|
||
return $this->hasOne(Account::class, 'id', 'account_id');
|
||
}
|
||
|
||
/**
|
||
* 创建日工资初始记录
|
||
*
|
||
* 若当日记录已存在则不创建
|
||
* 此时创建的记录 金额等数据都默认为0 需要等审核通过后在指定时间(如每日凌晨)统计相应金额并追加到此记录
|
||
*
|
||
* 使用场景举例:每日凌晨2点定时任务 => 对审核通过的申请计算基本工资及加班工资追加到此记录
|
||
*
|
||
* !!!千万不要因为金额记录为0就把记录删除 后续的统计操作都默认使用update进行追加。若记录不存在则会出现统计不准确的严重后果。!!!
|
||
* @param int $accountId 工人ID
|
||
* @param int $worksiteId 工地ID
|
||
* @param int $time 工作日期(打卡、加班) 格式为Ymd 如:20220925
|
||
* @return bool
|
||
* @throws \think\db\exception\DbException
|
||
*/
|
||
public static function createWhenNotExists(int $accountId, int $worksiteId, int $time): bool
|
||
{
|
||
$indexs = $accountId.'-'.$worksiteId.'-'.$time;
|
||
if (self::where('indexs', $indexs)->count() > 0) {
|
||
return true;
|
||
}
|
||
|
||
$year = date('Y', strtotime($time));
|
||
$month = date('m', strtotime($time));
|
||
$day = date('d', strtotime($time));
|
||
|
||
try {
|
||
self::create([
|
||
'account_id' => $accountId,
|
||
'worksite_id' => $worksiteId,
|
||
'time' => $time,
|
||
'indexs' => $indexs,
|
||
'year' => $year,
|
||
'month' => $month,
|
||
'day' => $day,
|
||
]);
|
||
} catch (\Exception $exception) {
|
||
//弱网时,可能会出现并发提交,忽略indexs唯一索引报错
|
||
\think\facade\Log::error('创建pay_log失败:message:'.$exception->getMessage().' line:'.$exception->getLine());
|
||
}
|
||
|
||
return true;
|
||
}
|
||
}
|