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