674 lines
		
	
	
		
			22 KiB
		
	
	
	
		
			PHP
		
	
	
			
		
		
	
	
			674 lines
		
	
	
		
			22 KiB
		
	
	
	
		
			PHP
		
	
	
<?php
 | 
						||
 | 
						||
namespace app\controller\api\v1;
 | 
						||
 | 
						||
use app\controller\api\Base;
 | 
						||
use app\controller\manager\Clock;
 | 
						||
use app\exception\RepositoryException;
 | 
						||
use app\model\Account;
 | 
						||
use app\model\AccountRecord;
 | 
						||
use app\model\AccountWorksite;
 | 
						||
use app\model\CheckLog;
 | 
						||
use app\model\ClockLog;
 | 
						||
use app\model\OvertimeLog;
 | 
						||
use app\model\PayLog;
 | 
						||
use app\model\Worksite;
 | 
						||
use app\repository\AccountRepository;
 | 
						||
use app\service\File;
 | 
						||
use app\service\Jwt;
 | 
						||
use app\service\wx\WechatApplets;
 | 
						||
use app\validate\User as UserValidate;
 | 
						||
use EasyWeChat\Kernel\Exceptions\InvalidConfigException;
 | 
						||
use Exception;
 | 
						||
use think\Collection;
 | 
						||
use think\db\exception\DataNotFoundException;
 | 
						||
use think\db\exception\DbException;
 | 
						||
use think\db\exception\ModelNotFoundException;
 | 
						||
use think\facade\Log;
 | 
						||
use think\response\Json;
 | 
						||
 | 
						||
/**
 | 
						||
 * 工人相关
 | 
						||
 *
 | 
						||
 * Class Worker
 | 
						||
 * @package app\controller\api\v1
 | 
						||
 */
 | 
						||
class Worker extends Base
 | 
						||
{
 | 
						||
    protected $noNeedLogin = [];
 | 
						||
 | 
						||
    /**
 | 
						||
     * 注册工人资料
 | 
						||
     */
 | 
						||
    public function register(): Json
 | 
						||
    {
 | 
						||
        if (!$this->request->isPost()) {
 | 
						||
            return $this->json(4000, '无效请求');
 | 
						||
        }
 | 
						||
 | 
						||
        $accountId = $this->request->user['user_id'] ?? 0;
 | 
						||
 | 
						||
        if (!$account = Account::findById($accountId)) {
 | 
						||
            return $this->json(6001, '请先登录');
 | 
						||
        }
 | 
						||
 | 
						||
        if ($account['role'] != Account::COMMON_OFF) {
 | 
						||
            return $this->json(4003, '您无需提交资料');
 | 
						||
        }
 | 
						||
 | 
						||
        if ($account['checking'] == Account::COMMON_ON) {
 | 
						||
            return $this->json(4002, '您已提交资料,等待审核中');
 | 
						||
        }
 | 
						||
 | 
						||
        $post = input('post.');
 | 
						||
 | 
						||
        $rules = [
 | 
						||
            'real_name|姓名'            => 'require|max:50|min:2',
 | 
						||
            'mobile|手机号'              => 'require',
 | 
						||
            'pay|工资'                  => 'require|number|min:0',
 | 
						||
            'emergency_contact|紧急联系人' => 'require',
 | 
						||
            'emergency_phone|紧急联系人电话' => 'require',
 | 
						||
            'bank_card_name|银行卡户名'    => 'require',
 | 
						||
            'bank_card_number|银行卡号'   => 'require',
 | 
						||
            'bank_name|开户行'           => 'require|max:100',
 | 
						||
            'card_number|身份证'         => 'require|max:20|min:15',
 | 
						||
            'position|岗位'             => 'require|number',
 | 
						||
            'worksite_id|工地'          => 'require|number',
 | 
						||
        ];
 | 
						||
 | 
						||
        $message = [
 | 
						||
            'worksite_id.number'   => '工地必选',
 | 
						||
            'worksite_id.position' => '岗位必选',
 | 
						||
        ];
 | 
						||
 | 
						||
        $validate = $this->validateByApi($post, $rules, $message);
 | 
						||
 | 
						||
        if ($validate !== true) {
 | 
						||
            return $validate;
 | 
						||
        }
 | 
						||
 | 
						||
        $fields = [
 | 
						||
            'real_name', 'mobile', 'pay', 'emergency_contact', 'emergency_phone', 'bank_card_name', 'bank_card_number',
 | 
						||
            'bank_name', 'card_number', 'position', 'worksite_id'
 | 
						||
        ];
 | 
						||
        $post   = array_filter($post, function ($item, $key) use ($fields) {
 | 
						||
            return in_array($key, $fields);
 | 
						||
        }, ARRAY_FILTER_USE_BOTH);
 | 
						||
 | 
						||
        $post['account_id']  = $accountId;
 | 
						||
        $post['is_register'] = CheckLog::COMMON_ON;
 | 
						||
        $post['created_at']  = date('Y-m-d H:i:s');
 | 
						||
 | 
						||
        try {
 | 
						||
            CheckLog::create($post);
 | 
						||
            $account->save(['checking' => Account::COMMON_ON]);
 | 
						||
        } catch (Exception $e) {
 | 
						||
            return $this->json(5000, '资料录入失败');
 | 
						||
        }
 | 
						||
        return $this->json();
 | 
						||
    }
 | 
						||
 | 
						||
    /**
 | 
						||
     * 修改用户信息 字段区分:1.负责人审核 2.不需要审核 如nickname
 | 
						||
     */
 | 
						||
    public function updateInfo(): Json
 | 
						||
    {
 | 
						||
        try {
 | 
						||
            $params = input('post.');
 | 
						||
 | 
						||
            $rules = [
 | 
						||
                'field|修改项'  => 'require',
 | 
						||
                'value|修改内容' => 'require',
 | 
						||
            ];
 | 
						||
 | 
						||
            $accountId = $this->request->user['user_id'] ?? 0;
 | 
						||
 | 
						||
            $validate = $this->validateByApi($params, $rules);
 | 
						||
 | 
						||
            if ($validate !== true) {
 | 
						||
                return $validate;
 | 
						||
            }
 | 
						||
 | 
						||
            if (!$customer = Account::findById($accountId)) {
 | 
						||
                return $this->json(4004, '用户不存在');
 | 
						||
            }
 | 
						||
 | 
						||
            $needCheckFields = Account::needCheckFields();
 | 
						||
            // 需要审核的字段
 | 
						||
            if (in_array($params['field'], $needCheckFields)) {
 | 
						||
                // 字段值未改变
 | 
						||
                if ($params['value'] == ($customer[$params['field']] ?? '')) {
 | 
						||
                    return $this->json();
 | 
						||
                }
 | 
						||
 | 
						||
                $insert = [];
 | 
						||
                $update = [];
 | 
						||
                foreach ($needCheckFields as $field) {
 | 
						||
                    $insert[$field] = $field == $params['field'] ? $params['value'] : $customer[$field];
 | 
						||
                    if ($field == $params['field']) {
 | 
						||
                        $update[$field] = $params['value'];
 | 
						||
                    }
 | 
						||
                }
 | 
						||
 | 
						||
                if (!$checkLog = CheckLog::where('account_id', $accountId)->where('status', CheckLog::COMMON_OFF)
 | 
						||
                    ->find()) {
 | 
						||
                    // 没有待审核的记录则新增
 | 
						||
                    $insert['created_at']  = date('Y-m-d H:i:s');
 | 
						||
                    $insert['account_id']  = $accountId;
 | 
						||
                    $insert['worksite_id'] = $customer['worksite_id'];
 | 
						||
                    CheckLog::create($insert);
 | 
						||
                } else {
 | 
						||
                    $checkLog->save($update);
 | 
						||
                }
 | 
						||
 | 
						||
                $customer->save(['checking' => Account::COMMON_ON]);
 | 
						||
            } else {
 | 
						||
                $customer->save([
 | 
						||
                    $params['field'] => $params['value']
 | 
						||
                ]);
 | 
						||
            }
 | 
						||
        } catch (Exception $e) {
 | 
						||
            Log::error('工人资料修改失败'.$e->getMessage());
 | 
						||
            return $this->json(5000, '修改资料失败!'.$e->getMessage());
 | 
						||
        }
 | 
						||
 | 
						||
        return $this->json();
 | 
						||
    }
 | 
						||
 | 
						||
    /**
 | 
						||
     * 工人打卡
 | 
						||
     */
 | 
						||
    public function sign(): Json
 | 
						||
    {
 | 
						||
        try {
 | 
						||
            $input = input('post.');
 | 
						||
 | 
						||
            $rules = [
 | 
						||
                'type|打卡类型'      => 'require|in:in,out',
 | 
						||
                'lat|维度'         => 'require',
 | 
						||
                'lng|经度'         => 'require',
 | 
						||
                'worksite_id|工地' => 'require|number',
 | 
						||
            ];
 | 
						||
 | 
						||
            $validate = $this->validateByApi($input, $rules, ['type.in' => '打卡类型错误']);
 | 
						||
 | 
						||
            if ($validate !== true) {
 | 
						||
                return $validate;
 | 
						||
            }
 | 
						||
 | 
						||
            $accountId = $this->request->user['user_id'] ?? 0;
 | 
						||
 | 
						||
            if (!$customer = Account::findById($accountId)) {
 | 
						||
                return $this->json(6001, '请先登录');
 | 
						||
            }
 | 
						||
 | 
						||
            if ($customer['role'] != Account::ROLE_WORKER) {
 | 
						||
                return $this->json(4003, '完成审核后方可打卡');
 | 
						||
            }
 | 
						||
 | 
						||
            $worksite = Worksite::getNearest($input['lng'], $input['lat']);
 | 
						||
            if (empty($worksite) || $worksite['id'] != $input['worksite_id']) {
 | 
						||
                return $this->json(4004, '定位错误,请在工地200米范围内打卡!');
 | 
						||
            }
 | 
						||
 | 
						||
            $time = time();
 | 
						||
            //            $time = $time - 86401 * 3;
 | 
						||
            $now = date('Y-m-d H:i:s', $time);
 | 
						||
            $day = date('Ymd', $time);
 | 
						||
 | 
						||
            if (ClockLog::where('account_id', $accountId)->where('type', $input['type'])->where('create_time', '>', time() - 60)->count()) {
 | 
						||
                return $this->json(4001, '打卡频率过快!');
 | 
						||
            }
 | 
						||
 | 
						||
            ClockLog::create([
 | 
						||
                'account_id'  => $accountId,
 | 
						||
                'type'        => $input['type'],
 | 
						||
                'worksite_id' => $input['worksite_id'],
 | 
						||
                'created_at'  => $now,
 | 
						||
                'create_time' => $time,
 | 
						||
                'day'         => $day,
 | 
						||
                'indexs'      => $accountId.'-'.$input['worksite_id'].'-'.$day,
 | 
						||
            ]);
 | 
						||
 | 
						||
            // 创建当日工资初始记录
 | 
						||
            PayLog::createWhenNotExists($accountId, $input['worksite_id'], $day);
 | 
						||
        } catch (Exception $e) {
 | 
						||
            Log::error('工人打卡失败'.$e->getMessage());
 | 
						||
            return $this->json(5000, '打卡失败!');
 | 
						||
        }
 | 
						||
 | 
						||
        return $this->json();
 | 
						||
    }
 | 
						||
 | 
						||
    // 我的打卡
 | 
						||
    public function clockList(): Json
 | 
						||
    {
 | 
						||
        $page       = input('page/d', 1);
 | 
						||
        $size       = input('size/d', 20);
 | 
						||
        $keyword    = input('keyword/s');
 | 
						||
        $worksiteId = input('worksite_id/d', 0);
 | 
						||
        $begin      = input('begin_at/s', '');
 | 
						||
        $end        = input('end_at/s', '');
 | 
						||
 | 
						||
        $accountId = $this->request->user['user_id'] ?? 0;
 | 
						||
 | 
						||
        $where = [];
 | 
						||
 | 
						||
        if (!empty($keyword)) {
 | 
						||
            $where[] = ['w.name', 'like', '%'.$keyword.'%'];
 | 
						||
        }
 | 
						||
 | 
						||
        if ($worksiteId > 0) {
 | 
						||
            $where[] = ['cl.worksite_id', '=', $worksiteId];
 | 
						||
        }
 | 
						||
 | 
						||
        if (!empty($begin)) {
 | 
						||
            $where[] = ['cl.created_at', '>', $begin.' 00:00:00'];
 | 
						||
        }
 | 
						||
 | 
						||
        if (!empty($end)) {
 | 
						||
            $where[] = ['cl.created_at', '<', $end.' 23:59:59'];
 | 
						||
        }
 | 
						||
 | 
						||
        $where[] = ['cl.account_id', '=', $accountId];
 | 
						||
        $query   = \app\model\ClockLog::alias('cl')
 | 
						||
            ->leftJoin('worksite w', 'w.id = cl.worksite_id')
 | 
						||
            ->field('cl.*,w.name as worksite_name')
 | 
						||
            ->where($where);
 | 
						||
 | 
						||
        $total = $query->count();
 | 
						||
 | 
						||
        $res = [
 | 
						||
            'total'   => $total,
 | 
						||
            'current' => $page ?: 1,
 | 
						||
            'size'    => $size ?: 20,
 | 
						||
            'list'    => new Collection(),
 | 
						||
        ];
 | 
						||
 | 
						||
        if ($total > 0) {
 | 
						||
            $res['list'] = $query->page($page, $size)->order('cl.id', 'desc')->select();
 | 
						||
            $res['list']->each(function ($item) {
 | 
						||
                $item->type_text = $item->type == 'in' ? '上班' : '下班';
 | 
						||
                switch ($item->status) {
 | 
						||
                    case 0:
 | 
						||
                        $item->status_text = '待确认';
 | 
						||
                        break;
 | 
						||
                    case 1:
 | 
						||
                        $item->status_text = '已确认';
 | 
						||
                        break;
 | 
						||
                    case -1:
 | 
						||
                        $item->status_text = '不通过';
 | 
						||
                        break;
 | 
						||
                }
 | 
						||
                $item->time = date('H:i:s', $item->create_time);
 | 
						||
            });
 | 
						||
        }
 | 
						||
 | 
						||
        return $this->json(0, 'success', $res);
 | 
						||
    }
 | 
						||
 | 
						||
    /**
 | 
						||
     * 提交加班
 | 
						||
     */
 | 
						||
    public function overtime(): Json
 | 
						||
    {
 | 
						||
        try {
 | 
						||
            $input = input('post.');
 | 
						||
 | 
						||
            $rules = [
 | 
						||
                'day|加班日期'       => 'require|date',
 | 
						||
                'time|加班时长'      => 'require|float',
 | 
						||
                'worksite_id|工地' => 'require|number',
 | 
						||
            ];
 | 
						||
 | 
						||
            $validate = $this->validateByApi($input, $rules, ['worksite_id.number' => '工地必传']);
 | 
						||
 | 
						||
            if ($validate !== true) {
 | 
						||
                return $validate;
 | 
						||
            }
 | 
						||
 | 
						||
            $accountId = $this->request->user['user_id'] ?? 0;
 | 
						||
 | 
						||
            if (!$customer = Account::findById($accountId)) {
 | 
						||
                return $this->json(6001, '请先登录');
 | 
						||
            }
 | 
						||
 | 
						||
            if ($customer['role'] != Account::ROLE_WORKER) {
 | 
						||
                return $this->json(4003, '还不是工人');
 | 
						||
            }
 | 
						||
 | 
						||
            $time = time();
 | 
						||
            $now  = date('Y-m-d H:i:s', $time);
 | 
						||
            $day  = date('Ymd', strtotime($input['day']));
 | 
						||
            OvertimeLog::create([
 | 
						||
                'account_id'  => $accountId,
 | 
						||
                'worksite_id' => $input['worksite_id'],
 | 
						||
                'day_text'    => $input['day'],
 | 
						||
                'day'         => $day,
 | 
						||
                'time'        => $input['time'],
 | 
						||
                'remarks'     => $input['remarks'] ?? '',
 | 
						||
                'indexs'      => $accountId.'-'.$input['worksite_id'].'-'.$day,
 | 
						||
                'created_at'  => $now,
 | 
						||
                'create_time' => $time,
 | 
						||
            ]);
 | 
						||
 | 
						||
            // 创建当日工资初始记录
 | 
						||
            PayLog::createWhenNotExists($accountId, $input['worksite_id'], $day);
 | 
						||
        } catch (Exception $e) {
 | 
						||
            Log::error('工人加班提交失败'.$e->getMessage());
 | 
						||
            return $this->json(5000, '加班申请失败!');
 | 
						||
        }
 | 
						||
 | 
						||
        return $this->json();
 | 
						||
    }
 | 
						||
 | 
						||
    // 我的加班记录
 | 
						||
    public function overtimeList(): Json
 | 
						||
    {
 | 
						||
        $page       = input('page/d', 1);
 | 
						||
        $size       = input('size/d', 20);
 | 
						||
        $keyword    = input('keyword/s');
 | 
						||
        $worksiteId = input('worksite_id/d', 0);
 | 
						||
        $begin      = input('begin_at/s', '');
 | 
						||
        $end        = input('end_at/s', '');
 | 
						||
 | 
						||
        $accountId = $this->request->user['user_id'] ?? 0;
 | 
						||
 | 
						||
        $where = [];
 | 
						||
 | 
						||
        if (!empty($keyword)) {
 | 
						||
            $where[] = ['w.name', 'like', '%'.$keyword.'%'];
 | 
						||
        }
 | 
						||
 | 
						||
        if ($worksiteId > 0) {
 | 
						||
            $where[] = ['ol.worksite_id', '=', $worksiteId];
 | 
						||
        }
 | 
						||
 | 
						||
        if (!empty($begin)) {
 | 
						||
            $where[] = ['ol.created_at', '>', $begin.' 00:00:00'];
 | 
						||
        }
 | 
						||
 | 
						||
        if (!empty($end)) {
 | 
						||
            $where[] = ['ol.created_at', '<', $end.' 23:59:59'];
 | 
						||
        }
 | 
						||
 | 
						||
        $where[] = ['ol.account_id', '=', $accountId];
 | 
						||
        $query   = \app\model\OvertimeLog::alias('ol')
 | 
						||
            ->leftJoin('worksite w', 'w.id = ol.worksite_id')
 | 
						||
            ->field('ol.*,w.name as worksite_name')
 | 
						||
            ->where($where);
 | 
						||
 | 
						||
        $total = $query->count();
 | 
						||
 | 
						||
        $res = [
 | 
						||
            'total'   => $total,
 | 
						||
            'current' => $page ?: 1,
 | 
						||
            'size'    => $size ?: 20,
 | 
						||
            'list'    => new Collection(),
 | 
						||
        ];
 | 
						||
 | 
						||
        if ($total > 0) {
 | 
						||
            $res['list'] = $query->page($page, $size)->order('ol.id', 'desc')->select();
 | 
						||
            $res['list']->each(function ($item) {
 | 
						||
                switch ($item->status) {
 | 
						||
                    case 0:
 | 
						||
                        $item->status_text = '待确认';
 | 
						||
                        break;
 | 
						||
                    case 1:
 | 
						||
                        $item->status_text = '已确认';
 | 
						||
                        break;
 | 
						||
                    case -1:
 | 
						||
                        $item->status_text = '不通过';
 | 
						||
                        break;
 | 
						||
                }
 | 
						||
                $item->create_time = date('Y年m月d日 H:i:s', $item->create_time);
 | 
						||
                $item->worktime    = date('Y年m月d日', strtotime($item->day));
 | 
						||
                unset($item->check_at);
 | 
						||
                unset($item->check_by);
 | 
						||
                unset($item->created_at);
 | 
						||
                unset($item->worksite_id);
 | 
						||
                unset($item->is_statistic);
 | 
						||
                unset($item->day);
 | 
						||
                unset($item->day_text);
 | 
						||
            });
 | 
						||
        }
 | 
						||
 | 
						||
        return $this->json(0, 'success', $res);
 | 
						||
    }
 | 
						||
 | 
						||
    // 加班申请被打回后再次编辑
 | 
						||
    public function overtimeEdit(): Json
 | 
						||
    {
 | 
						||
        $id    = input('id');
 | 
						||
        $input = input('post.');
 | 
						||
 | 
						||
        $rules = [
 | 
						||
            'worksite_id|工地' => 'require|number',
 | 
						||
            'day|加班日期'       => 'require|date',
 | 
						||
            'time|加班时长'      => 'require|float',
 | 
						||
        ];
 | 
						||
 | 
						||
        $validate = $this->validateByApi($input, $rules);
 | 
						||
 | 
						||
        if ($validate !== true) {
 | 
						||
            return $validate;
 | 
						||
        }
 | 
						||
 | 
						||
        $accountId = $this->request->user['user_id'] ?? 0;
 | 
						||
 | 
						||
        if (!$item = OvertimeLog::where('id', $id)->find()) {
 | 
						||
            return $this->json(4004, '记录不存在');
 | 
						||
        }
 | 
						||
 | 
						||
        if ($item['account_id'] != $accountId) {
 | 
						||
            return $this->json(4003, '不是你提交的加班申请');
 | 
						||
        }
 | 
						||
 | 
						||
        if ($item['status'] != OvertimeLog::STATUS_NO) {
 | 
						||
            return $this->json(4003, '当前状态不能编辑');
 | 
						||
        }
 | 
						||
 | 
						||
        $item->save([
 | 
						||
            'day'         => date('Ymd', strtotime($input['day'])),
 | 
						||
            'worksite_id' => $input['worksite_id'],
 | 
						||
            'time'        => $input['time'],
 | 
						||
            'remarks'     => $input['remarks'] ?? '',
 | 
						||
            'status'      => OvertimeLog::COMMON_OFF,
 | 
						||
        ]);
 | 
						||
 | 
						||
        return $this->json(0, 'success');
 | 
						||
    }
 | 
						||
 | 
						||
    // 加班申请被打回后删除
 | 
						||
    public function overtimeDel(): Json
 | 
						||
    {
 | 
						||
        $id = input('id');
 | 
						||
 | 
						||
        $accountId = $this->request->user['user_id'] ?? 0;
 | 
						||
 | 
						||
        if (!$item = OvertimeLog::where('id', $id)->find()) {
 | 
						||
            return $this->json(4004, '记录不存在');
 | 
						||
        }
 | 
						||
 | 
						||
        if ($item['account_id'] != $accountId) {
 | 
						||
            return $this->json(4003, '不是你提交的加班申请');
 | 
						||
        }
 | 
						||
 | 
						||
        if ($item['status'] != OvertimeLog::STATUS_NO) {
 | 
						||
            return $this->json(4003, '当前状态不能删除');
 | 
						||
        }
 | 
						||
 | 
						||
        $item->delete();
 | 
						||
 | 
						||
        return $this->json(0, 'success');
 | 
						||
    }
 | 
						||
 | 
						||
    // 我的工资记录
 | 
						||
    public function payListMock(): Json
 | 
						||
    {
 | 
						||
        $page = input('page/d', 1);
 | 
						||
        $size = input('size/d', 20);
 | 
						||
 | 
						||
        $accountId = $this->request->user['user_id'] ?? 0;
 | 
						||
 | 
						||
        $where = [];
 | 
						||
 | 
						||
        if (!empty($keyword)) {
 | 
						||
            $where[] = ['w.name', 'like', '%'.$keyword.'%'];
 | 
						||
        }
 | 
						||
 | 
						||
        $where[] = ['cl.account_id', '=', $accountId];
 | 
						||
        //        $query   = \app\model\ClockLog::alias('cl')
 | 
						||
        //            ->leftJoin('worksite w', 'w.id = cl.worksite_id')
 | 
						||
        //            ->field('cl.*,w.name as worksite_name')
 | 
						||
        //            ->where($where);
 | 
						||
 | 
						||
        //        $total = $query->count();
 | 
						||
        $total = 10;
 | 
						||
 | 
						||
        $res = [
 | 
						||
            'total'   => $total,
 | 
						||
            'current' => $page ?: 1,
 | 
						||
            'size'    => $size ?: 20,
 | 
						||
            'list'    => new Collection(),
 | 
						||
        ];
 | 
						||
 | 
						||
        if ($total > 0) {
 | 
						||
            $res['list'] = [
 | 
						||
                [
 | 
						||
                    'status'          => 0,
 | 
						||
                    'status_text'     => '待发放',
 | 
						||
                    'date'            => '2022年11月',
 | 
						||
                    'base_amount'     => 7500,
 | 
						||
                    'overtime_amount' => 500,
 | 
						||
                    'amount'          => 8000,
 | 
						||
                ],
 | 
						||
                [
 | 
						||
                    'status'          => 1,
 | 
						||
                    'status_text'     => '已发放',
 | 
						||
                    'date'            => '2022年10月',
 | 
						||
                    'base_amount'     => 7500,
 | 
						||
                    'overtime_amount' => 500,
 | 
						||
                    'amount'          => 8000,
 | 
						||
                ],
 | 
						||
                [
 | 
						||
                    'status'          => 0,
 | 
						||
                    'status_text'     => '已发放',
 | 
						||
                    'date'            => '2022年09月',
 | 
						||
                    'base_amount'     => 7500,
 | 
						||
                    'overtime_amount' => 500,
 | 
						||
                    'amount'          => 8000,
 | 
						||
                ],
 | 
						||
                [
 | 
						||
                    'status'          => 0,
 | 
						||
                    'status_text'     => '已发放',
 | 
						||
                    'date'            => '2022年08月',
 | 
						||
                    'base_amount'     => 7500,
 | 
						||
                    'overtime_amount' => 0,
 | 
						||
                    'amount'          => 7500,
 | 
						||
                ],
 | 
						||
                [
 | 
						||
                    'status'          => 0,
 | 
						||
                    'status_text'     => '已发放',
 | 
						||
                    'date'            => '2022年08月',
 | 
						||
                    'base_amount'     => 7500,
 | 
						||
                    'overtime_amount' => 0,
 | 
						||
                    'amount'          => 7500,
 | 
						||
                ],
 | 
						||
                [
 | 
						||
                    'status'          => 0,
 | 
						||
                    'status_text'     => '已发放',
 | 
						||
                    'date'            => '2022年07月',
 | 
						||
                    'base_amount'     => 7500,
 | 
						||
                    'overtime_amount' => 0,
 | 
						||
                    'amount'          => 7500,
 | 
						||
                ],
 | 
						||
                [
 | 
						||
                    'status'          => 0,
 | 
						||
                    'status_text'     => '已发放',
 | 
						||
                    'date'            => '2022年06月',
 | 
						||
                    'base_amount'     => 7500,
 | 
						||
                    'overtime_amount' => 0,
 | 
						||
                    'amount'          => 7500,
 | 
						||
                ],
 | 
						||
            ];
 | 
						||
        }
 | 
						||
 | 
						||
        return $this->json(0, 'success', $res);
 | 
						||
    }
 | 
						||
 | 
						||
    // 我的工资记录
 | 
						||
    public function payList(): Json
 | 
						||
    {
 | 
						||
        $page = input('page/d', 1);
 | 
						||
        $size = input('size/d', 20);
 | 
						||
 | 
						||
        $accountId = $this->request->user['user_id'] ?? 0;
 | 
						||
 | 
						||
        $where = [];
 | 
						||
 | 
						||
        $where[] = ['pml.account_id', '=', $accountId];
 | 
						||
        $query   = \app\model\PayMonthLog::alias('pml')
 | 
						||
            ->leftJoin('account a', 'a.id = pml.account_id')
 | 
						||
            ->where($where)
 | 
						||
            ->group('pml.time')
 | 
						||
            ->fieldRaw('pml.time,pml.year,pml.month,sum(pml.amount) as amount,sum(pml.base_amount) as base_amount,sum(pml.overtime_amount) as overtime_amount');
 | 
						||
 | 
						||
        $total = $query->count();
 | 
						||
 | 
						||
        $res = [
 | 
						||
            'total'   => $total,
 | 
						||
            'current' => $page ?: 1,
 | 
						||
            'size'    => $size ?: 20,
 | 
						||
            'list'    => new Collection(),
 | 
						||
        ];
 | 
						||
 | 
						||
        if ($total > 0) {
 | 
						||
            // 获取按月已发工资
 | 
						||
            $paidMonth = \app\model\PayMonthLog::alias('pml')
 | 
						||
                ->leftJoin('account a', 'a.id = pml.account_id')
 | 
						||
                ->where($where)
 | 
						||
                ->where('pml.status', 1)
 | 
						||
                ->group('pml.time')
 | 
						||
                ->page($page, $size)
 | 
						||
                ->order('time', 'desc')
 | 
						||
                ->fieldRaw('sum(pml.amount) as amount,pml.time')
 | 
						||
                ->select()->toArray();
 | 
						||
            $monthPay  = [];
 | 
						||
            foreach ($paidMonth as $p) {
 | 
						||
                $monthPay[$p['time']] = $p['amount'];
 | 
						||
            }
 | 
						||
 | 
						||
            $res['list'] = $query->page($page, $size)->order('time', 'desc')->select();
 | 
						||
            $res['list']->each(function ($item) use ($monthPay) {
 | 
						||
                $item->date        = $item['year'].'年'.$item['month'].'月';
 | 
						||
                $item->done        = $monthPay[$item->time] ?? 0;
 | 
						||
                $item->status      = 0;
 | 
						||
                $item->status_text = '待发放';
 | 
						||
                if ($item->amount <= $item->done) {
 | 
						||
                    $item->status      = 1;
 | 
						||
                    $item->status_text = '已发放';
 | 
						||
                }
 | 
						||
                unset($item->year);
 | 
						||
                unset($item->month);
 | 
						||
                unset($item->think_count);
 | 
						||
            });
 | 
						||
        }
 | 
						||
 | 
						||
        return $this->json(0, 'success', $res);
 | 
						||
    }
 | 
						||
 | 
						||
    // 获取审核记录
 | 
						||
    public function checkDetail(): Json
 | 
						||
    {
 | 
						||
        $id = input('id');
 | 
						||
 | 
						||
        if (!$item = CheckLog::where('id', $id)->find()) {
 | 
						||
            return $this->json(4004, '记录不存在');
 | 
						||
        }
 | 
						||
        $item = arrayNullToString($item->toArray());
 | 
						||
 | 
						||
        return $this->json(0, 'success', $item);
 | 
						||
    }
 | 
						||
}
 |