feat(负责人接口): 新增 工人列表 工人评级

master
yin5th 2023-01-09 19:24:43 +08:00
parent 27ce40f395
commit 7c7f822f59
2 changed files with 119 additions and 0 deletions

View File

@ -4,6 +4,7 @@ namespace app\controller\api\v1;
use app\controller\api\Base; use app\controller\api\Base;
use app\model\Account; use app\model\Account;
use app\model\AccountStar;
use app\model\AccountWorksite; use app\model\AccountWorksite;
use app\model\CheckLog; use app\model\CheckLog;
use app\model\ClockLog; use app\model\ClockLog;
@ -14,6 +15,7 @@ use app\service\Math;
use Exception; use Exception;
use Lcobucci\Clock\Clock; use Lcobucci\Clock\Clock;
use think\Collection; use think\Collection;
use think\facade\Db;
use think\response\Json; use think\response\Json;
/** /**
@ -634,4 +636,111 @@ class Manager extends Base
return $this->json(0, 'success', $res); return $this->json(0, 'success', $res);
} }
// 工人列表
public function workerList(): Json
{
$page = input('page/d', 1);
$size = input('size/d', 20);
$keyword = input('keyword/s');
$accountId = $this->request->user['user_id'] ?? 0;
if (!$account = Account::findById($accountId, ['id, role'])) {
return $this->json(6001, '请先登录');
}
if ($account['role'] <= Account::COMMON_ON) {
return $this->json(4003, '无查看权限');
}
$where = [];
if (!empty($keyword)) {
$where[] = ['a.real_name|a.mobile', 'like', '%'.$keyword.'%'];
}
// 负责工地
$worksiteIds = AccountWorksite::where('account_id', $accountId)->column('worksite_id');
$where[] = ['a.worksite_id', 'in', $worksiteIds];
$where[] = ['a.role', '=', Account::ROLE_WORKER];
$query = Account::alias('a')
->leftJoin('worksite w', 'a.worksite_id = w.id')
->field('a.id,a.real_name,a.work_at,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) {
$list = $query->page($page, $size)->order('a.id', 'desc')->select();
$accountList = $list->column('id');
$starList = Db::query("SELECT `star`,`account_id` FROM `bee_account_star` WHERE `id` IN (SELECT max(id) FROM `bee_account_star` WHERE FIND_IN_SET(account_id, ?) GROUP BY `account_id`)", [implode(',', $accountList)]);
$starArr = [];
foreach ($starList as $l) {
$starArr[$l['account_id']] = $l['star'];
}
$res['list'] = $list;
$res['list']->each(function ($item) use ($starArr) {
$item->star = $starArr[$item->id] ?? 0;
});
$res['list'] = arrayNullToString($res['list']->toArray());
}
return $this->json(0, 'success', $res);
}
/**
* 工人评定
*
* @return Json
*/
public function star(): Json
{
try {
$accountId = $this->request->user['user_id'] ?? 0;
$star = input('star/d', 5);//星级 默认5
$id = input('id/s');
if (!in_array($star, [1, 2, 3, 4, 5])) {
return $this->json(4001, '参数错误');
}
if (!$account = Account::findById($accountId, ['id, role'])) {
return $this->json(6001, '请先登录');
}
if ($account['role'] <= Account::COMMON_ON) {
// 工地负责人才能操作
return $this->json(4003, '无此权限');
}
$ym = date('Ym');
if (AccountStar::where('ym', $ym)->where('type', AccountStar::TYPE_WORKER)->where('account_id', $id)->count() > 0) {
return $this->json(4001, '本月已评');
}
AccountStar::create([
'type' => AccountStar::TYPE_WORKER,
'star' => $star,
'account_id' => $id,
'year' => date('Y'),
'month' => date('m'),
'ym' => $ym,
'operated_by' => $accountId,
]);
return $this->json();
} catch (Exception $e) {
return $this->json(5000, '评定失败'.$e->getMessage());
}
}
} }

10
app/model/AccountStar.php Normal file
View File

@ -0,0 +1,10 @@
<?php
namespace app\model;
class AccountStar extends Base
{
public const TYPE_MANAGER = 'manager';//负责人
public const TYPE_WORKER = 'worker';//工人
}