578 lines
21 KiB
PHP
578 lines
21 KiB
PHP
<?php
|
|
|
|
namespace app\api\controller;
|
|
|
|
use think\Controller;
|
|
use think\Db;
|
|
|
|
class Staff extends Controller {
|
|
|
|
// const JURL = 'http://www.journal.com/master/Article/getJournalCites';
|
|
const JURL = 'http://journalapi.tmrjournals.com/public/index.php/master/Article/getJournalCites';
|
|
|
|
protected $article_obj = '';
|
|
protected $user_obj = '';
|
|
protected $user_act_obj = '';
|
|
protected $journal_obj = '';
|
|
protected $user_log_obj = '';
|
|
protected $reviewer_major_obj = '';
|
|
protected $reviewer_to_journal_obj = '';
|
|
protected $article_msg_obj = '';
|
|
protected $article_file_obj = '';
|
|
protected $article_reviewer_obj = '';
|
|
protected $article_author_obj = '';
|
|
protected $article_transfer_obj = '';
|
|
protected $staff_obj = '';
|
|
protected $staff_level_obj = '';
|
|
protected $staff_log_obj = '';
|
|
protected $staff_to_journal_obj = '';
|
|
|
|
public function __construct(\think\Request $request = null) {
|
|
parent::__construct($request);
|
|
$this->user_obj = Db::name('user');
|
|
$this->user_act_obj = Db::name('user_act');
|
|
$this->article_obj = Db::name('article');
|
|
$this->journal_obj = Db::name('journal');
|
|
$this->user_log_obj = Db::name('user_log');
|
|
$this->reviewer_major_obj = Db::name('reviewer_major');
|
|
$this->reviewer_to_journal_obj = Db::name('reviewer_to_journal');
|
|
$this->article_msg_obj = Db::name('article_msg');
|
|
$this->article_file_obj = Db::name('article_file');
|
|
$this->article_reviewer_obj = Db::name('article_reviewer');
|
|
$this->article_author_obj = Db::name('article_author');
|
|
$this->article_transfer_obj = Db::name('article_transfer');
|
|
$this->staff_obj = Db::name('staff');
|
|
$this->staff_level_obj = Db::name('staff_level');
|
|
$this->staff_log_obj = Db::name('staff_log');
|
|
$this->staff_to_journal_obj = Db::name('staff_to_journal');
|
|
}
|
|
|
|
/**
|
|
* 添加工资level
|
|
*/
|
|
public function addStaffLevel() {
|
|
$data = $this->request->post();
|
|
$insert['title'] = $data['title'];
|
|
$insert['wages'] = $data['wages'];
|
|
$this->staff_level_obj->insert($insert);
|
|
return jsonSuccess([]);
|
|
}
|
|
|
|
/**
|
|
* 删除工资level
|
|
*/
|
|
public function delStaffLevel() {
|
|
$data = $this->request->post();
|
|
$this->staff_level_obj->where('staff_level_id', $data['staff_level_id'])->update(['state' => 1]);
|
|
return jsonSuccess([]);
|
|
}
|
|
|
|
/**
|
|
* 编辑工资level
|
|
*/
|
|
public function editStaffLevel() {
|
|
$data = $this->request->post();
|
|
$update['title'] = $data['title'];
|
|
$update['wages'] = $data['wages'];
|
|
$this->staff_level_obj->where('staff_level_id', $data['staff_level_id'])->update($update);
|
|
return jsonSuccess([]);
|
|
}
|
|
|
|
/**
|
|
* 获取工资levels
|
|
*/
|
|
public function getStaffLevels() {
|
|
$list = $this->staff_level_obj->where('state', 0)->select();
|
|
|
|
$re['levels'] = $list;
|
|
|
|
return jsonSuccess($re);
|
|
}
|
|
|
|
/**
|
|
* 添加员工
|
|
*/
|
|
public function addStaff() {
|
|
$data = $this->request->post();
|
|
$insert['staff_level_id'] = $data['staff_level_id'];
|
|
$insert['name'] = $data['name'];
|
|
$insert['phone'] = $data['phone'];
|
|
$insert['email'] = $data['email'];
|
|
$insert['ident'] = $data['ident'];
|
|
$insert['bank'] = $data['bank'];
|
|
$insert['type'] = $data['type'];
|
|
$insert['password'] = md5($data['password']);
|
|
$insert['add_price'] = $data['add_price'];
|
|
$insert['add_reason'] = $data['add_reason'];
|
|
$insert['sub_price'] = $data['sub_price'];
|
|
$insert['sub_reason'] = $data['sub_reason'];
|
|
$this->staff_obj->insert($insert);
|
|
return jsonSuccess([]);
|
|
}
|
|
|
|
/**
|
|
* 删除员工
|
|
*/
|
|
public function delStaff() {
|
|
$data = $this->request->post();
|
|
$this->staff_obj->where('staff_id', $data['staff_id'])->delete();
|
|
return jsonSuccess([]);
|
|
}
|
|
|
|
/**
|
|
* 更新员工信息
|
|
*/
|
|
public function editStaff() {
|
|
$data = $this->request->post();
|
|
$update['staff_level_id'] = $data['staff_level_id'];
|
|
$update['name'] = $data['name'];
|
|
$update['phone'] = $data['phone'];
|
|
$update['email'] = $data['email'];
|
|
$update['ident'] = $data['ident'];
|
|
$update['bank'] = $data['bank'];
|
|
$update['type'] = $data['type'];
|
|
$update['add_price'] = $data['add_price'];
|
|
$update['add_reason'] = $data['add_reason'];
|
|
$update['sub_price'] = $data['sub_price'];
|
|
$update['sub_reason'] = $data['sub_reason'];
|
|
$this->staff_obj->where('staff_id', $data['staff_id'])->update($update);
|
|
return jsonSuccess([]);
|
|
}
|
|
|
|
/**
|
|
* 获取员工列表
|
|
*/
|
|
public function getStaffs() {
|
|
$data = $this->request->post();
|
|
$limit_start = ($data['pageIndex'] - 1) * $data['pageSize'];
|
|
$list = $this->staff_obj->field('t_staff.*,t_staff_level.*')
|
|
->join('t_staff_level', 't_staff_level.staff_level_id = t_staff.staff_level_id', 'left')
|
|
->where('t_staff.state', 0)
|
|
->order('staff_id')
|
|
->limit($limit_start, $data['pageSize'])
|
|
->select();
|
|
$count = $this->staff_obj->where('state', 0)->count();
|
|
$re['staffs'] = $list;
|
|
$re['count'] = $count;
|
|
return jsonSuccess($re);
|
|
}
|
|
|
|
public function test(){
|
|
echo strtotime('2021-03-13 22:15:20');
|
|
}
|
|
|
|
/**
|
|
* 获取指定期刊一段时间的文章详情
|
|
* @return type
|
|
*/
|
|
public function getStaffArticles(){
|
|
$data = $this->request->post();
|
|
$journals = $this->journal_obj->where('staff_id',$data['staff_id'])->select();
|
|
if ($data['date'] != date('Ym')) {
|
|
$c_time = strtotime("-1 month", strtotime($data['date'] . '26 00:00:00'));
|
|
$c_time1 = strtotime($data['date'].'25 23:59:59');
|
|
$where['ctime'] = array(['>', $c_time], ['<=', $c_time1]);
|
|
}else{
|
|
$c_time = strtotime("-1 month", strtotime(date('Y-m') . '-26 00:00:00'));
|
|
$c_time1 = strtotime(date('Ym').'25 23:59:59');
|
|
$where['ctime'] = array(['>', $c_time], ['<=', $c_time1]);
|
|
}
|
|
$articles = [];
|
|
foreach ($journals as $v){
|
|
$where['accept_sn'] = ['like',$v['abbr'].'%'];
|
|
$list = $this->article_obj->where($where)->select();
|
|
$articles = array_merge($articles,$list);
|
|
}
|
|
|
|
$re['articles'] = $articles;
|
|
return jsonSuccess($re);
|
|
}
|
|
|
|
/**
|
|
* 获取全部员工
|
|
*/
|
|
public function getAllStaffs() {
|
|
$list = $this->staff_obj->where('state', 0)->select();
|
|
$re['staffs'] = $list;
|
|
return jsonSuccess($re);
|
|
}
|
|
|
|
/**
|
|
* 获取全部期刊
|
|
*/
|
|
public function getJournals() {
|
|
$list = $this->journal_obj
|
|
->field('t_journal.*,t_staff.name staff_name')
|
|
->join('t_staff', 't_journal.staff_id = t_staff.staff_id', 'left')
|
|
->where('t_journal.state', 0)
|
|
->select();
|
|
$re['journals'] = $list;
|
|
return jsonSuccess($re);
|
|
}
|
|
|
|
/**
|
|
* 更改期刊提成对接人与稿件数量与期刊基础工资
|
|
*/
|
|
public function editJournalStaff() {
|
|
$data = $this->request->post();
|
|
$this->journal_obj
|
|
->where('journal_id', $data['journal_id'])
|
|
->update(['staff_id' => $data['staff_id'], 'jour_num' => $data['jour_num'],'jour_price'=>$data['jour_price']]);
|
|
return jsonSuccess([]);
|
|
}
|
|
|
|
/**
|
|
* 获取员工实时工资(员工用)
|
|
*/
|
|
public function getStaffRealtime() {
|
|
$data = $this->request->post();
|
|
$res = $this->getTomonthPrice($data['name'], date('Ym'));
|
|
if ($res == 'error') {
|
|
return jsonError($res);
|
|
} else {
|
|
return jsonSuccess($res);
|
|
}
|
|
}
|
|
|
|
public function ggg(){
|
|
$staff_list = $this->staff_obj->where('staff_id',27)->select();
|
|
$c_time = strtotime("-1 month", strtotime(date('Y-m') . '-26 00:00:00'));
|
|
$c_time1 = strtotime(date('Y-m' . '-25 23:59:59'));
|
|
$where['ctime'] = array(['>', $c_time], ['<=', $c_time1]);
|
|
foreach ($staff_list as $value) {
|
|
$base_price = $this->getBasePrice($value['name']);
|
|
$journals = $this->journal_obj->where('staff_id', $value['staff_id'])->select();
|
|
$journal_price = 0;
|
|
$cite_price = 0;
|
|
if($value['type']==0){
|
|
foreach ($journals as $v) {
|
|
$c_price = 0;
|
|
$where['accept_sn'] = ['like',$v['abbr'].'%'];
|
|
$cache_articles = $this->article_obj->where($where)->select();
|
|
|
|
echo '<pre>';
|
|
var_dump($cache_articles);
|
|
echo '</pre>';
|
|
die;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
* 核算月薪,记录进log(系统自动调用)
|
|
*/
|
|
public function pushStaffLog() {
|
|
$staff_list = $this->staff_obj->where('state', 0)->select();
|
|
// $where['state'] = 0;
|
|
$c_time = strtotime("-1 month", strtotime(date('Y-m') . '-26 00:00:00'));
|
|
$c_time1 = strtotime(date('Y-m' . '-25 23:59:59'));
|
|
$where['ctime'] = array(['>', $c_time], ['<=', $c_time1]);
|
|
foreach ($staff_list as $value) {
|
|
$base_price = $this->getBasePrice($value['name']);
|
|
$journals = $this->journal_obj->where('staff_id', $value['staff_id'])->select();
|
|
$journal_price = 0;
|
|
$cite_price = 0;
|
|
if($value['type']==0){
|
|
foreach ($journals as $v) {
|
|
$c_price = 0;
|
|
$where['accept_sn'] = ['like',$v['abbr'].'%'];
|
|
$cache_articles = $this->article_obj->where($where)->select();
|
|
$c_gn = 0;
|
|
$c_gw = 0;
|
|
foreach ($cache_articles as $vv) {
|
|
$c_country = $this->article_author_obj->where('article_id', $vv['article_id'])->where('state', 0)->column('country');
|
|
$c_c = 'gn';
|
|
foreach ($c_country as $vvv) {
|
|
if ($vvv != 'China' && $vvv != '') {
|
|
$c_c = 'gw';
|
|
}
|
|
}
|
|
if ($c_c == 'gn') {
|
|
$c_gn++;
|
|
} else {
|
|
$c_gw++;
|
|
}
|
|
}
|
|
if ($c_gn - $v['jour_num'] >= 0) {
|
|
$c_price = ($c_gn - $v['jour_num']) * 100 + $c_gw * 200;
|
|
} else {
|
|
if (($c_gw - ($v['jour_num'] - $c_gn)) >= 0) {
|
|
$c_price = ($c_gn + $c_gw - $v['jour_num']) * 200;
|
|
} else {
|
|
$c_price = 0 - ($v['jour_num'] - $c_gn - $c_gw) * 50;
|
|
}
|
|
}
|
|
$journal_price += $c_price;
|
|
//获取cite提成
|
|
$jcites = json_decode(myPost(self::JURL,['issn'=>$v['issn']]));
|
|
$jcs = $jcites->data->cites;
|
|
$cite_price += count($jcs)*500;
|
|
}
|
|
}
|
|
//添加数据
|
|
$ccc = $this->staff_log_obj->where('staff_id',$value['staff_id'])->where('date', date('Ym'))->find();
|
|
if($ccc==null){
|
|
$insert['staff_id'] = $value['staff_id'];
|
|
$insert['date'] = date('Ym');
|
|
$insert['base_price'] = $base_price;
|
|
$insert['journal_price'] = $journal_price;
|
|
$insert['cite_price'] = $cite_price;
|
|
$this->staff_log_obj->insert($insert);
|
|
}
|
|
}
|
|
echo 'finshed';
|
|
}
|
|
|
|
|
|
/**
|
|
* 获取员工工资信息列表(管理员用)
|
|
*/
|
|
public function getAllStaff() {
|
|
$data = $this->request->post();
|
|
// $data['pageIndex'] = 1;
|
|
// $data['pageSize'] = 100;
|
|
// $data['date'] = '202103';
|
|
|
|
$limit_start = ($data['pageIndex'] - 1) * $data['pageSize'];
|
|
$staff_list = $this->staff_obj->where('state', 0)->limit($limit_start, $data['pageSize'])->select();
|
|
$count = $this->staff_obj->where('state', 0)->count();
|
|
foreach ($staff_list as $k => $v) {
|
|
$ca = $this->getTomonthPrice($v['name'], $data['date']);
|
|
$staff_list[$k]['pp'] = $ca;
|
|
}
|
|
$re['staffs'] = $staff_list;
|
|
$re['count'] = $count;
|
|
return jsonSuccess($re);
|
|
}
|
|
|
|
/**
|
|
* 修改工资详情
|
|
*/
|
|
public function editStaffLog(){
|
|
$data = $this->request->post();
|
|
$update['add_price'] = $data['add_price'];
|
|
$update['add_reason'] = $data['add_reason'];
|
|
$update['sub_price'] = $data['sub_price'];
|
|
$update['sub_reason'] = $data['sub_reason'];
|
|
$this->staff_log_obj->where('staff_log_id',$data['staff_log_id'])->update($update);
|
|
return jsonSuccess([]);
|
|
}
|
|
|
|
/**
|
|
* 获取用户某月份工资详情
|
|
*/
|
|
public function getStaffLog() {
|
|
$data = $this->request->post();
|
|
$staff_info = $this->staff_obj->where('name', $data['name'])->find();
|
|
$staff_log_obj = $this->staff_log_obj
|
|
->where('staff_id', $staff_info['staff_id'])
|
|
->where('date', $data['date'])
|
|
->where('state', 0)
|
|
->find();
|
|
$re['staffLog'] = $staff_log_obj;
|
|
return jsonSuccess($re);
|
|
}
|
|
|
|
/**
|
|
* 检测员工查询
|
|
*/
|
|
public function checkStaffLogin() {
|
|
$data = $this->request->post();
|
|
$where['name'] = $data['name'];
|
|
$where['password'] = md5($data['password']);
|
|
$where['state'] = 0;
|
|
$res = $this->staff_obj->where($where)->find();
|
|
if ($res) {
|
|
return jsonSuccess(['info' => $res]);
|
|
} else {
|
|
return jsonError('check error');
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 获取某月某员工工资
|
|
* @return type
|
|
*/
|
|
private function getTomonthPrice($name, $date) {
|
|
$staff_info = $this->staff_obj->where('name', $name)->where('state',0)->find();
|
|
$baseprice = $this->getBasePrice($name);
|
|
if ($date != date('Ym')) {
|
|
$log_res = $this->staff_log_obj->where('staff_id', $staff_info['staff_id'])->where('date', $date)->where('state', 0)->find();
|
|
if ($log_res) {
|
|
$re['baseprice'] = $log_res['base_price'];
|
|
$re['journalprice'] = $log_res['journal_price'];
|
|
$re['citeprice'] = $log_res['cite_price'];
|
|
$re['add_price'] = $log_res['add_price'];
|
|
$re['sub_price'] = $log_res['sub_price'];
|
|
return $re;
|
|
} else {
|
|
return 'error';
|
|
}
|
|
}
|
|
|
|
//获取实时期刊提成情况
|
|
if (date('d') > 25) {
|
|
//返回log数据
|
|
$log_res = $this->staff_log_obj->where('staff_id', $staff_info['staff_id'])->where('date', date('Ym'))->where('state', 0)->find();
|
|
if ($log_res) {
|
|
$re['staff_log_id'] = $log_res['staff_log_id'];
|
|
$re['baseprice'] = $log_res['base_price'];
|
|
$re['journalprice'] = $log_res['journal_price'];
|
|
$re['citeprice'] = $log_res['cite_price'];
|
|
$re['add_price'] = $log_res['add_price'];
|
|
$re['sub_price'] = $log_res['sub_price'];
|
|
return $re;
|
|
} else {
|
|
return 'error';
|
|
}
|
|
} else {
|
|
$c_time = strtotime("-1 month", strtotime(date('Y-m') . '-26 00:00:00'));
|
|
$c_time1 = strtotime(date('Y-m' . '-25 23:59:59'));
|
|
$where['ctime'] = array(['>', $c_time], ['<=', $c_time1]);
|
|
}
|
|
$journals = $this->journal_obj->where('staff_id', $staff_info['staff_id'])->select();
|
|
$journal_price = 0;
|
|
$cite_price = 0;
|
|
if($staff_info['type']==0){
|
|
foreach ($journals as $v) {
|
|
$c_price = 0;
|
|
$where['accept_sn'] = ['like',$v['abbr'].'%'];
|
|
$cache_articles = $this->article_obj->where($where)->select();
|
|
$c_gn = 0;
|
|
$c_gw = 0;
|
|
foreach ($cache_articles as $vv) {
|
|
$c_country = $this->article_author_obj->where('article_id', $vv['article_id'])->where('state', 0)->column('country');
|
|
$c_c = 'gn';
|
|
foreach ($c_country as $vvv) {
|
|
if ($vvv != 'China' && $vvv != '') {
|
|
$c_c = 'gw';
|
|
}
|
|
}
|
|
if ($c_c == 'gn') {
|
|
$c_gn++;
|
|
} else {
|
|
$c_gw++;
|
|
}
|
|
}
|
|
if ($c_gn - $v['jour_num'] >= 0) {
|
|
$c_price = ($c_gn - $v['jour_num']) * 100 + $c_gw * 200;
|
|
} else {
|
|
if (($c_gw - ($v['jour_num'] - $c_gn)) >= 0) {
|
|
$c_price = ($c_gn + $c_gw - $v['jour_num']) * 200;
|
|
} else {
|
|
$c_price = 0 - ($v['jour_num'] - $c_gn - $c_gw) * 50;
|
|
}
|
|
}
|
|
$journal_price += $c_price;
|
|
|
|
//获取cite提成
|
|
$jcites = json_decode(myPost(self::JURL,['issn'=>$v['issn']]));
|
|
$jcs = $jcites->data->cites;
|
|
$cite_price += count($jcs)*500;
|
|
}
|
|
}
|
|
$re['staff_log_id'] = 0;
|
|
$re['baseprice'] = $baseprice;
|
|
$re['journalprice'] = $journal_price;
|
|
$re['citeprice'] = $cite_price;
|
|
$re['add_price'] = 0;
|
|
$re['sub_price'] = 0;
|
|
return $re;
|
|
}
|
|
|
|
// public function getgrtc(){
|
|
|
|
// $staff_info = $this->staff_obj->where('name', $name)->where('state',0)->find();
|
|
// $baseprice = $this->getBasePrice($name);
|
|
// //获取实时期刊提成情况
|
|
// $c_time = strtotime("-1 month", strtotime(date('Y-m') . '-26 00:00:00'));
|
|
// $c_time1 = strtotime(date('Y-m' . '-25 23:59:59'));
|
|
// $where['ctime'] = array(['>', $c_time], ['<=', $c_time1]);
|
|
// $journals = $this->journal_obj->where('staff_id', $staff_info['staff_id'])->select();
|
|
// $journal_price = 0;
|
|
// $cite_price = 0;
|
|
// if($staff_info['type']==0){
|
|
// foreach ($journals as $v) {
|
|
// $c_price = 0;
|
|
// $where['accept_sn'] = ['like',$v['abbr'].'%'];
|
|
// $cache_articles = $this->article_obj->where($where)->select();
|
|
|
|
// echo '<pre>';
|
|
// var_dump($cache_articles);
|
|
// echo '</pre>';
|
|
|
|
// $c_gn = 0;
|
|
// $c_gw = 0;
|
|
// foreach ($cache_articles as $vv) {
|
|
// $c_country = $this->article_author_obj->where('article_id', $vv['article_id'])->where('state', 0)->column('country');
|
|
// $c_c = 'gn';
|
|
// foreach ($c_country as $vvv) {
|
|
// if ($vvv != 'China' && $vvv != '') {
|
|
// $c_c = 'gw';
|
|
// }
|
|
// }
|
|
// if ($c_c == 'gn') {
|
|
// $c_gn++;
|
|
// } else {
|
|
// $c_gw++;
|
|
// }
|
|
// }
|
|
// if ($c_gn - $v['jour_num'] >= 0) {
|
|
// $c_price = ($c_gn - $v['jour_num']) * 100 + $c_gw * 200;
|
|
// } else {
|
|
// if (($c_gw - ($v['jour_num'] - $c_gn)) >= 0) {
|
|
// $c_price = ($c_gn + $c_gw - $v['jour_num']) * 200;
|
|
// } else {
|
|
// $c_price = 0 - ($v['jour_num'] - $c_gn - $c_gw) * 50;
|
|
// }
|
|
// }
|
|
// $journal_price += $c_price;
|
|
|
|
// //获取cite提成
|
|
// $jcites = json_decode(myPost(self::JURL,['issn'=>$v['issn']]));
|
|
// $jcs = $jcites->data->cites;
|
|
// $cite_price += count($jcs)*500;
|
|
// }
|
|
|
|
// echo '------------------------------------------------';
|
|
// }
|
|
// $re['staff_log_id'] = 0;
|
|
// $re['baseprice'] = $baseprice;
|
|
// $re['journalprice'] = $journal_price;
|
|
// $re['citeprice'] = $cite_price;
|
|
// $re['add_price'] = 0;
|
|
// $re['sub_price'] = 0;
|
|
// echo '<pre>';
|
|
// var_dump($re);
|
|
// echo '</pre>';
|
|
// die;
|
|
// }
|
|
|
|
|
|
|
|
private function getBasePrice($name) {
|
|
$staff_info = $this->staff_obj->where('name', $name)->where('state', 0)->find();
|
|
// $level_info = $this->staff_level_obj->where('staff_level_id', $staff_info['staff_level_id'])->where('state', 0)->find();
|
|
|
|
$wag = $this->journal_obj->where('staff_id',$staff_info['staff_id'])->where('state',0)->sum('jour_price');
|
|
|
|
//获取基本薪资
|
|
$price1 = $wag + $staff_info['add_price'] - $staff_info['sub_price'];
|
|
|
|
//获取稿件提成信息
|
|
$price2 = 0;
|
|
|
|
//返回基础工资
|
|
return $price1 + $price2;
|
|
}
|
|
|
|
}
|