...
|
...
|
@@ -14,9 +14,13 @@ use think\Db; |
|
|
use addons\third\model\Third;
|
|
|
use app\api\model\Realname;
|
|
|
use app\api\model\UserKeyword;
|
|
|
use app\api\model\WorkLog;
|
|
|
use app\api\model\UserWorkLog;
|
|
|
use app\api\model\UserWorkSubsidyLog;
|
|
|
use app\api\model\UserRecruitSubsidyLog;
|
|
|
use app\api\model\UserSalary;
|
|
|
use app\api\model\Factory;
|
|
|
use app\api\model\FactoryUser;
|
|
|
use app\api\model\UserBorrow;
|
|
|
use app\common\controller\Wechat;
|
|
|
|
|
|
/**
|
...
|
...
|
@@ -77,8 +81,8 @@ class User extends Api |
|
|
|
|
|
/**
|
|
|
* @ApiWeigh (97)
|
|
|
* @ApiTitle (劳务管理-个人信息-工资)
|
|
|
* @ApiSummary (劳务管理-个人信息-工资)
|
|
|
* @ApiTitle (劳务管理-工资)
|
|
|
* @ApiSummary (劳务管理-工资)
|
|
|
* @ApiMethod (POST)
|
|
|
*
|
|
|
* @ApiHeaders (name=token, type=string, required=true, description="请求的Token")
|
...
|
...
|
@@ -130,6 +134,45 @@ class User extends Api |
|
|
}
|
|
|
|
|
|
/**
|
|
|
* @ApiWeigh (97)
|
|
|
* @ApiTitle (劳务管理-工资-历史收入)
|
|
|
* @ApiSummary (劳务管理-工资-历史收入)
|
|
|
* @ApiMethod (POST)
|
|
|
*
|
|
|
* @ApiHeaders (name=token, type=string, required=true, description="请求的Token")
|
|
|
* @ApiParams (name="page", type="inter", required=false, description="当前页(默认1)")
|
|
|
* @ApiParams (name="page_num", type="inter", required=false, description="每页显示数据个数(默认10)")
|
|
|
*
|
|
|
* @ApiReturn({
|
|
|
"code": 1,
|
|
|
"msg": "成功",
|
|
|
"time": "1612234313",
|
|
|
"data": {
|
|
|
"work_hours_month": "0.0", //本月打卡总工时
|
|
|
"work_salary_month": "0.00", //本月打卡工资
|
|
|
"work_subsidy": "2.00", //工时补贴(元/小时)
|
|
|
"work_subsidy_month": 0, //本月工时补贴
|
|
|
"lower_work_hours_month": 0, //下级打卡总工时
|
|
|
"lower_recruit_subsidy_month": 0, //下级招聘补贴工资
|
|
|
"salary": 0 //本月共收入
|
|
|
}
|
|
|
})
|
|
|
*/
|
|
|
public function salaryList()
|
|
|
{
|
|
|
$page = $this->request->param('page', 1, 'intval');
|
|
|
$page_num = $this->request->param('page_num', 10, 'intval');
|
|
|
$data = UserSalary::where('user_id',$this->auth->id)
|
|
|
->order('createtime desc')
|
|
|
->paginate($page_num,false,['page'=>$page])
|
|
|
->each(function($v){
|
|
|
// 格式化年月
|
|
|
$v->year_month = date('Y年m月',strtotime($v['year_month']));
|
|
|
});
|
|
|
$this->success('成功', $data);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 会员登录
|
|
|
*
|
|
|
* @param string $account 账号
|
...
|
...
|
@@ -509,7 +552,7 @@ class User extends Api |
|
|
->where('factory_id',$factory_id)
|
|
|
->where('status','1')
|
|
|
->find();
|
|
|
if($factory_user){
|
|
|
if(!$factory_user){
|
|
|
$factory_user = new FactoryUser;
|
|
|
}
|
|
|
Db::startTrans();
|
...
|
...
|
@@ -522,7 +565,7 @@ class User extends Api |
|
|
'quit_time' => time(),
|
|
|
]);
|
|
|
// 修改用户为未入职
|
|
|
$user->save(['is_work'=>'0','factory_id'=>0]);
|
|
|
$user->save(['is_work'=>'0','factory_id'=>0,'join_time'=>0]);
|
|
|
Db::commit();
|
|
|
} catch (PDOException $e) {
|
|
|
Db::rollback();
|
...
|
...
|
@@ -531,7 +574,7 @@ class User extends Api |
|
|
Db::rollback();
|
|
|
$this->error($e->getMessage());
|
|
|
}
|
|
|
$this->success('入职成功,驻厂将为您服务');
|
|
|
$this->success('离职后之前数据将会暂停');
|
|
|
}
|
|
|
|
|
|
/**
|
...
|
...
|
@@ -567,14 +610,15 @@ class User extends Api |
|
|
}
|
|
|
$realname->allowField(true)->save(array_merge([
|
|
|
'user_id' => $this->auth->id,
|
|
|
'status' => '0'
|
|
|
],$post));
|
|
|
$this->success('提交申请成功');
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* @ApiWeigh (87)
|
|
|
* @ApiTitle (实名认证信息)
|
|
|
* @ApiSummary (实名认证信息)
|
|
|
* @ApiTitle (实名认证状态)
|
|
|
* @ApiSummary (实名认证状态)
|
|
|
* @ApiMethod (POST)
|
|
|
* @ApiHeaders (name="token", type="string", required=true, description="请求的Token")
|
|
|
* @ApiReturn ({
|
...
|
...
|
@@ -585,11 +629,12 @@ class User extends Api |
|
|
}
|
|
|
})
|
|
|
*/
|
|
|
public function realnameinfo()
|
|
|
public function realnameStatus()
|
|
|
{
|
|
|
// 实名认证状态
|
|
|
$info = Realname::get(['user_id'=>$this->auth->id]);
|
|
|
$info->status = empty($info) ? '-1' : $info['status'];
|
|
|
$info->visible(['status']);
|
|
|
$this->success('成功',$info);
|
|
|
}
|
|
|
|
...
|
...
|
@@ -871,9 +916,8 @@ class User extends Api |
|
|
})
|
|
|
*/
|
|
|
public function logWork(){
|
|
|
$user = $this->auth->getUser();
|
|
|
$user = $this->model->get($this->auth->id);
|
|
|
$post = $this->request->param();
|
|
|
$user['is_work'] != '1' && $this->error('未入职,无法记录工时');
|
|
|
empty($post['work_date']) && $this->error('请选择工作日期');
|
|
|
empty($post['work_type']) && $this->error('请选择班次');
|
|
|
$work_salary = 0;
|
...
|
...
|
@@ -882,11 +926,21 @@ class User extends Api |
|
|
empty($post['work_price']) && $this->error('请填写工价');
|
|
|
$work_salary = round($post['work_hours'] * $post['work_price'],2);
|
|
|
}
|
|
|
$post['work_date'] = strtotime($post['work_date']); //日期转时间戳
|
|
|
$log = WorkLog::where('user_id',$this->auth->id)->where('work_date',$post['work_date'])->find();
|
|
|
$post['work_date'] = strtotime($post['work_date']) + 1; //日期转时间戳,加1为了用whereTime
|
|
|
$log = UserWorkLog::where('user_id',$user['id'])->where('work_date',$post['work_date'])->find();
|
|
|
if(!$log){
|
|
|
$log = new WorkLog;
|
|
|
$log = new UserWorkLog;
|
|
|
}
|
|
|
// 记录连续打卡天数
|
|
|
$yesterday = UserWorkLog::where('user_id',$user['id'])
|
|
|
->where('work_type','in','1,2')
|
|
|
->whereTime('work_date','yesterday')
|
|
|
->find();
|
|
|
$today = UserWorkLog::where('user_id',$user['id'])
|
|
|
->where('work_type','in','1,2')
|
|
|
->whereTime('work_date','today')
|
|
|
->find();
|
|
|
$log_days = $user['log_days'] == 0 ? 1 : ($yesterday && !$today ? ($user['log_days'] + 1) : $user['log_days']);
|
|
|
Db::startTrans();
|
|
|
try {
|
|
|
/*记录打卡*/
|
...
|
...
|
@@ -898,29 +952,37 @@ class User extends Api |
|
|
$update_data = [];
|
|
|
// 更新本月工时、本月打卡工资和本月打卡次数
|
|
|
if(date('Y-m',$post['work_date']) == date('Y-m')){
|
|
|
$update_data['work_hours_month'] = WorkLog::where('user_id',$user['id'])
|
|
|
->where('work_type','in','1,2')
|
|
|
// 本月工时
|
|
|
$update_data['work_hours_month'] = UserWorkLog::where('user_id',$user['id'])
|
|
|
->where('work_type','in','1,2')
|
|
|
->whereTime('work_date','month')
|
|
|
->sum('work_hours'); //本月工时
|
|
|
$update_data['work_salary_month'] = WorkLog::where('user_id',$user['id'])
|
|
|
->where('work_type','in','1,2')
|
|
|
->sum('work_hours');
|
|
|
// 本月打卡工资
|
|
|
$update_data['work_salary_month'] = UserWorkLog::where('user_id',$user['id'])
|
|
|
->where('work_type','in','1,2')
|
|
|
->whereTime('work_date','month')
|
|
|
->sum('work_salary'); //本月打卡工资
|
|
|
$update_data['log_days_month'] = WorkLog::where('user_id',$user['id'])
|
|
|
->sum('work_salary');
|
|
|
// 这个月的工时补贴和招聘补贴
|
|
|
if($user['is_work'] == '1' && !empty($user['factory'])){
|
|
|
// 本月工时补贴增加
|
|
|
$update_data['work_subsidy_month'] = $user['work_subsidy_month'] + round($user['work_subsidy'] * $post['work_hours'],2);
|
|
|
// 给上级返招聘补贴
|
|
|
$parent = $this->model->get($user['pid']);
|
|
|
if($parent){
|
|
|
$parent->setInc('recruit_subsidy_month',round($user['recruit_subsidy']*$post['work_hours'],2));
|
|
|
}
|
|
|
}
|
|
|
// 本月打卡次数
|
|
|
$update_data['log_days_month'] = UserWorkLog::where('user_id',$user['id'])
|
|
|
->whereTime('work_date','month')
|
|
|
->count(); //本月打卡次数
|
|
|
}
|
|
|
// 记录连续打卡天数
|
|
|
$yesterday = WorkLog::where('user_id',$this->auth->id)
|
|
|
->where('type','in','1,2')
|
|
|
->whereTime('work_date','-1 days')
|
|
|
->find();
|
|
|
if($yesterday){
|
|
|
$update_data['log_days'] = !$yesterday ? 0 : Db::raw('log_days + 1');
|
|
|
->count();
|
|
|
}
|
|
|
$update_data['log_days'] = $log_days;
|
|
|
if($update_data){
|
|
|
$user->save($update_data);
|
|
|
}
|
|
|
// 计算该月工资
|
|
|
$this->salaryCalculate($log,$user);
|
|
|
Db::commit();
|
|
|
} catch (PDOException $e) {
|
|
|
Db::rollback();
|
...
|
...
|
@@ -933,6 +995,61 @@ class User extends Api |
|
|
}
|
|
|
|
|
|
/**
|
|
|
* @ApiInternal
|
|
|
* @ApiTitle (计算该月工资)
|
|
|
* @ApiSummary (计算该月工资)
|
|
|
*/
|
|
|
private function salaryCalculate($log,$user){
|
|
|
/*记录该月工时补贴和招聘补贴*/
|
|
|
if($user['is_work'] == '1' && !empty($user['factory'])){
|
|
|
// 工时补贴
|
|
|
UserWorkSubsidyLog::create([
|
|
|
'user_id' => $user['id'],
|
|
|
'work_subsidy' => round($user['work_subsidy'] * $log['work_hours'],2),
|
|
|
'work_date' => $log['work_date'],
|
|
|
'user_work_log_id' => $log['id'],
|
|
|
]);
|
|
|
// 招聘补贴
|
|
|
$parent = $this->model->get($user['pid']);
|
|
|
if($parent){
|
|
|
UserRecruitSubsidyLog::create([
|
|
|
'user_id' => $user['pid'],
|
|
|
'recruit_subsidy' => round($user['recruit_subsidy'] * $log['work_hours'],2),
|
|
|
'work_date' => $log['work_date'],
|
|
|
'chirldren_id' => $user['id'],
|
|
|
'user_work_log_id' => $log['id'],
|
|
|
]);
|
|
|
}
|
|
|
}
|
|
|
/*记录该月总工资*/
|
|
|
$year_month = date('Y-m',$log['work_date']);
|
|
|
$user_salary = UserSalary::where('user_id',$user['id'])
|
|
|
->where('year_month',$year_month)
|
|
|
->find();
|
|
|
if(!$user_salary){
|
|
|
$user_salary = new UserSalary;
|
|
|
}
|
|
|
$month_start = strtotime($year_month);
|
|
|
$month_end = strtotime('+1 month',$month_start);
|
|
|
$work_salary_total = UserWorkLog::where('user_id',$user['id'])
|
|
|
->where('work_type','in','1,2')
|
|
|
->where("work_date >= {$month_start} and work_date < {$month_end}")
|
|
|
->sum('work_salary'); //月打卡总工资
|
|
|
$work_subsidy_total = UserWorkSubsidyLog::where('user_id',$user['id'])
|
|
|
->where("work_date >= {$month_start} and work_date < {$month_end}")
|
|
|
->sum('work_subsidy'); //月工时总补贴
|
|
|
$recruit_subsidy_total = UserRecruitSubsidyLog::where('user_id',$user['id'])
|
|
|
->where("work_date >= {$month_start} and work_date < {$month_end}")
|
|
|
->sum('recruit_subsidy'); //月招聘总补贴
|
|
|
$user_salary->save([
|
|
|
'user_id' => $user['id'],
|
|
|
'salary' => round($work_salary_total + $work_subsidy_total + $recruit_subsidy_total,2),
|
|
|
'year_month' => $year_month,
|
|
|
]);
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* @ApiWeigh (73)
|
|
|
* @ApiTitle (工时详情)
|
|
|
* @ApiSummary (工时详情)
|
...
|
...
|
@@ -948,9 +1065,9 @@ class User extends Api |
|
|
*/
|
|
|
public function workLogInfo(){
|
|
|
$work_date = $this->request->param('work_date');
|
|
|
$work_date = strtotime($work_date);
|
|
|
$info = WorkLog::where('user_id',$this->auth->id)->where('work_date',$work_date)->find();
|
|
|
$this->success('打卡成功',$info);
|
|
|
$work_date = strtotime($work_date) + 1;
|
|
|
$info = UserWorkLog::where('user_id',$this->auth->id)->where('work_date',$work_date)->find();
|
|
|
$this->success('成功',$info);
|
|
|
}
|
|
|
|
|
|
/**
|
...
|
...
|
@@ -962,9 +1079,23 @@ class User extends Api |
|
|
* @ApiParams (name="month", type="string", required=true, description="年月")
|
|
|
* @ApiReturn ({
|
|
|
"code": 1,
|
|
|
"msg": "成功",
|
|
|
"time": "1606124276",
|
|
|
"data": "<p>招聘补贴富文本详情介绍</p>" //招聘补贴介绍
|
|
|
"msg": "打卡成功",
|
|
|
"time": "1612279947",
|
|
|
"data": {
|
|
|
"work_hours_month": 9, //工时时长
|
|
|
"work_salary_month": 180, //收入
|
|
|
"list": [{ //本月数据
|
|
|
"id": 14,
|
|
|
"user_id": 72,
|
|
|
"work_date": 1612108801, //打卡日期
|
|
|
"work_hours": "4.5", //工时
|
|
|
"work_price": "20.00", //工价
|
|
|
"work_salary": "90.00", //收入
|
|
|
"work_type": "1", //班次:1=白班,2=夜班,3=休班
|
|
|
"createtime": 1612278909,
|
|
|
"updatetime": 1612278909
|
|
|
}]
|
|
|
}
|
|
|
})
|
|
|
*/
|
|
|
public function workLogList(){
|
...
|
...
|
@@ -972,8 +1103,8 @@ class User extends Api |
|
|
empty($month) && $this->error('缺少必需参数');
|
|
|
$starttime = strtotime($month);
|
|
|
$endtime = strtotime('+1 month',$starttime) - 1;
|
|
|
$list = WorkLog::where('user_id',$this->auth->id)
|
|
|
->where('work_date','in',[$starttime,$endtime])
|
|
|
$list = UserWorkLog::where('user_id',$this->auth->id)
|
|
|
->where('work_date','between',[$starttime,$endtime])
|
|
|
->select();
|
|
|
$work_hours_month = array_sum(array_column($list,'work_hours'));
|
|
|
$work_salary_month = array_sum(array_column($list,'work_salary'));
|
...
|
...
|
@@ -986,7 +1117,6 @@ class User extends Api |
|
|
* @ApiSummary (借支-打卡天数)
|
|
|
* @ApiMethod (POST)
|
|
|
* @ApiHeaders (name="token", type="string", required=true, description="请求的Token")
|
|
|
* @ApiParams (name="month", type="string", required=true, description="年月")
|
|
|
* @ApiReturn ({
|
|
|
"code": 1,
|
|
|
"msg": "成功",
|
...
|
...
|
@@ -1014,7 +1144,6 @@ class User extends Api |
|
|
* @ApiSummary (借支)
|
|
|
* @ApiMethod (POST)
|
|
|
* @ApiHeaders (name="token", type="string", required=true, description="请求的token")
|
|
|
* @ApiParams (name="month", type="string", required=true, description="年月")
|
|
|
* @ApiReturn ({
|
|
|
"code": 1,
|
|
|
"msg": "成功",
|
...
|
...
|
@@ -1029,14 +1158,30 @@ class User extends Api |
|
|
}
|
|
|
$factory = Factory::get($user['factory_id']);
|
|
|
empty($factory) && $this->error('您入职的工厂已被删除,请选择其他工厂入职');
|
|
|
$user_borrow = UserBorrow::where('user_id',$this->auth->id)
|
|
|
->where('factory_id',$user['factory_id'])
|
|
|
->where('status','0')
|
|
|
->order('createtime desc')
|
|
|
->find();
|
|
|
!empty($user_borrow) && $this->error('借支正在审核中,无法再次申请');
|
|
|
$limit_days = 7;
|
|
|
$user['log_days'] < $limit_days && $this->error('您已打卡'.$user['log_days'].'天,不满'.$limit_days.'天,条件不足无法申请借支');
|
|
|
$user->save(['log_days'=>0]);
|
|
|
UserBorrow::create([
|
|
|
'user_id' => $user['id'],
|
|
|
'factory_id' => $user['factory_id'],
|
|
|
'borrow_money' => $factory['borrow_money']
|
|
|
]);
|
|
|
Db::startTrans();
|
|
|
try {
|
|
|
$user->save(['log_days'=>0]);
|
|
|
UserBorrow::create([
|
|
|
'user_id' => $user['id'],
|
|
|
'factory_id' => $user['factory_id'],
|
|
|
'borrow_money' => $factory['borrow_money']
|
|
|
]);
|
|
|
Db::commit();
|
|
|
} catch (PDOException $e) {
|
|
|
Db::rollback();
|
|
|
$this->error($e->getMessage());
|
|
|
} catch (Exception $e) {
|
|
|
Db::rollback();
|
|
|
$this->error($e->getMessage());
|
|
|
}
|
|
|
$this->success('本次借支已完成,请重新打卡满'.$limit_days.'天可申请借支');
|
|
|
}
|
|
|
|
...
|
...
|
@@ -1132,7 +1277,7 @@ class User extends Api |
|
|
"avatar": "http://www.recruit.top/uploads/20201123/8894d62100f2f920ffb2f38063b63f2d.jpg", //头像
|
|
|
"is_work": "0", //是否在职
|
|
|
"is_complete": "0", //补贴是否完成:0=否,1=是
|
|
|
"recruit_subsidy_month": 2, //工资
|
|
|
"give_recruit_subsidy": 2, //工资
|
|
|
"work_hours_month": "0.0", //本月总工时
|
|
|
"factory": { //工厂
|
|
|
"id": 1, //工厂ID
|
...
|
...
|
@@ -1186,9 +1331,9 @@ class User extends Api |
|
|
if(Validate::regex($v['mobile'], "^1\d{10}$")){
|
|
|
$v['mobile'] = substr_replace($v['mobile'],'*****',3,5);
|
|
|
}
|
|
|
$v->recruit_subsidy_month = round($v['recruit_subsidy'],$v['work_hours_month'],2);
|
|
|
$v->visible(['id','avatar','nickname','is_work','mobile','is_complete','work_hours_month','recruit_subsidy_month','factory']);
|
|
|
})->toArray();
|
|
|
$v->give_recruit_subsidy = round($v['recruit_subsidy']*$v['work_hours_month'],2);
|
|
|
$v->visible(['id','avatar','nickname','is_work','mobile','is_complete','work_hours_month','factory'])->append(['give_recruit_subsidy']);
|
|
|
});
|
|
|
$this->success('成功',$data);
|
|
|
}
|
|
|
|
...
|
...
|
@@ -1277,7 +1422,7 @@ class User extends Api |
|
|
"avatar": "", //头像
|
|
|
"is_work": "1", //是否在职:0=否,1=是
|
|
|
"is_complete": "0", //补贴是否完成:0=否,1=是
|
|
|
"recruit_subsidy_month": 2, //工资
|
|
|
"give_recruit_subsidy": 2, //工资
|
|
|
"work_hours_month": "0.0", //本月总工时
|
|
|
"factory": { //工厂
|
|
|
"id": 1, //工厂ID
|
...
|
...
|
@@ -1319,9 +1464,9 @@ class User extends Api |
|
|
if(Validate::regex($v['mobile'], "^1\d{10}$")){
|
|
|
$v['mobile'] = substr_replace($v['mobile'],'*****',3,5);
|
|
|
}
|
|
|
$v->recruit_subsidy_month = round($v['recruit_subsidy'],$v['work_hours_month'],2);
|
|
|
$v->visible(['id','avatar','nickname','is_work','mobile','is_complete','work_hours_month','recruit_subsidy_month','factory']);
|
|
|
})->toArray();
|
|
|
$v->give_recruit_subsidy = round($v['recruit_subsidy']*$v['work_hours_month'],2);
|
|
|
$v->visible(['id','avatar','nickname','is_work','mobile','is_complete','work_hours_month','factory'])->append(['give_recruit_subsidy']);
|
|
|
});
|
|
|
if(Validate::regex($user['mobile'], "^1\d{10}$")){
|
|
|
$user['mobile'] = substr_replace($user['mobile'],'*****',3,5);
|
|
|
}
|
...
|
...
|
|