<?php
namespace app\controller ;
use app\controller\Acl;
use app\model\{People as Peoples,Sys};
use think\facade\{Db,Filesystem};
use think\exception\ValidateException;
class People extends Acl {
public function record(){
$input=input('post.');
$sql=fastSql($input,[
[['name'=>'name|py'],'fullLike'],
['number','fullLike'],
['sex','fullDec1'],
['tel','fullLike'],
['add','fullLike'],
['card','fullLike'],
['data','fullLike']
]) $sql=frameScope($sql) $sql=sqlAuth('people',$sql) $count = Peoples::where($sql)->count() $info = Peoples::with(['frameData'])->append(['extension'])->where($sql)->page($input['page'],$input['limit'])->order(['id'=>'desc'])->select() $result=[
'state'=>'success',
'count'=>$count,
'info'=>$info
] return json($result);
}
public function save(){
$input=input('post.');
if(isset($input['id'])){
try {
$input['py']=zhToPy($input['name']) empty($input['id'])?$this->validate($input,'app\validate\People'):$this->validate($input,'app\validate\People.update');
} catch (ValidateException $e) {
return json(['state'=>'error','info'=>$e->getError()]);
exit;
}
Db::startTrans();
try {
if(empty($input['id'])){
Peoples::create($input);
pushLog('新增人员[ '.$input['name'].' ]') }else{
Peoples::update($input);
pushLog('更新人员[ '.$input['name'].' ]') }
Db::commit();
$result=['state'=>'success'];
} catch (\Exception $e) {
Db::rollback();
$result=['state'=>'error','info'=>'内部错误,操作已撤销!'];
}
}else{
$result=['state'=>'error','info'=>'传入参数不完整!'];
}
return json($result);
}
public function get(){
$input=input('post.');
if(existFull($input,['id'])){
$result=[
'state'=>'success',
'info'=>Peoples::where([['id','=',$input['id']]])->find()
];
}else{
$result=['state'=>'error','info'=>'传入参数不完整!'];
}
return json($result);
}
public function del(){
$input=input('post.');
if(existFull($input,['parm']) && is_array($input['parm'])){
$exist=moreTableFind([
['table'=>'allot','where'=>[['people','in',$input['parm']]]],
['table'=>'barter','where'=>[['people','in',$input['parm']]]],
['table'=>'bill','where'=>[['people','in',$input['parm']]]],
['table'=>'bor','where'=>[['people','in',$input['parm']]]],
['table'=>'bre','where'=>[['people','in',$input['parm']]]],
['table'=>'buy','where'=>[['people','in',$input['parm']]]],
['table'=>'entry','where'=>[['people','in',$input['parm']]]],
['table'=>'extry','where'=>[['people','in',$input['parm']]]],
['table'=>'ice','where'=>[['people','in',$input['parm']]]],
['table'=>'oce','where'=>[['people','in',$input['parm']]]],
['table'=>'imy','where'=>[['people','in',$input['parm']]]],
['table'=>'omy','where'=>[['people','in',$input['parm']]]],
['table'=>'sell','where'=>[['people','in',$input['parm']]]],
['table'=>'sor','where'=>[['people','in',$input['parm']]]],
['table'=>'sre','where'=>[['people','in',$input['parm']]]],
['table'=>'swap','where'=>[['people','in',$input['parm']]]]
]);
if(empty($exist)){
$data=Db::name('people')->where([['id','in',$input['parm']]])->order(['id'=>'desc'])->select()->toArray();
Db::startTrans();
try {
Db::name('people')->where([['id','in',$input['parm']]])->delete();
Db::name('log')->insert(['time'=>time(),'user'=>getUserID(),'info'=>'删除人员[ '.implode(' | ',array_column($data,'name')).' ]']);
Db::commit();
$result=['state'=>'success'];
} catch (\Exception $e) {
Db::rollback();
$result=['state'=>'error','info'=>'内部错误,操作已撤销!'];
}
}else{
$result=['state'=>'error','info'=>'存在数据关联,删除失败!'];
}
}else{
$result=['state'=>'error','info'=>'传入参数不完整!'];
}
return json($result);
}
public function import(){
delOverdueFile('static.upload.xlsx') $file=request()->file('file') if(empty($file)){
$result=['state'=>'error','info'=>'传入数据不完整!'];
}else{
try{
validate(['file'=>['fileSize'=>2*1024*1024,'fileExt'=>'xlsx']])->check(['file'=>$file]);
$fileInfo = Filesystem::disk('upload')->putFile('xlsx', $file, 'uniqid');
$filePath = pathChange('static.upload').$fileInfo;
$data=getXlsx($filePath);
unset($data[1]) $sql=[] $frame=Db::name('frame')->where([['name','in',array_column($data,'C')]])->select()->toArray();
foreach ($data as $dataKey=>$dataVo) {
$record=[
'name'=>$dataVo['A'],
'py'=>zhToPy($dataVo['A']),
'number'=>$dataVo['B'],
'frame'=>$dataVo['C'],
'sex'=>$dataVo['D'],
'tel'=>$dataVo['E'],
'add'=>$dataVo['F'],
'card'=>$dataVo['G'],
'data'=>$dataVo['H'],
'more'=>[]
];
$frameFind=search($frame)->where([['name','=',$record['frame']]])->find();
if(empty($frameFind)){
throw new ValidateException('模板文件第'.$dataKey.'行所属组织[ '.$record['frame'].' ]未匹配!');
}else{
$record['frame']=$frameFind['id'];
}
if(in_array($record['sex'],['男','女'])){
$record['sex']=$record['sex']=='男'?1:0;
}else{
throw new ValidateException('模板文件第'.$dataKey.'行人员性别[ '.$record['sex'].' ]未匹配!');
}
try {
$this->validate($record,'app\validate\People');
$sql[]=$record } catch (ValidateException $e) {
return json(['state'=>'error','info'=>'模板文件第[ '.$dataKey.' ]行'.$e->getError()]);
exit;
}
}
$column=array_column($sql,'number');
$unique=array_unique($column);
$diff=array_diff_assoc($column,$unique);
if(!empty($diff)){
return json(['state'=>'error','info'=>'模板文件人员编号[ '.implode(' | ',$diff).' ]重复!']);
}
$customer = new Peoples;
$customer->saveAll($sql);
pushLog('批量导入[ '.count($sql).' ]条人员数据') $result=['state'=>'success','info'=>'成功导入'.count($sql).'行人员数据'];
}catch(ValidateException $e) {
$result=['state'=>'error','info'=>$e->getMessage()] }
}
return json($result);
}
public function exports(){
$input=input('get.');
if(existFull($input,['parm']) && is_array($input['parm'])){
$info=Peoples::with(['frameData'])->append(['extension'])->where([['id','in',$input['parm']]])->order(['id'=>'desc'])->select()->toArray() $field=[
'name'=>'人员名称',
'number'=>'人员编号',
'frameData|name'=>'所属组织',
'extension|sex'=>'人员性别',
'tel'=>'联系电话',
'add'=>'联系地址',
'card'=>'身份证号',
'data'=>'备注信息'
];
$excel=[] $excel[]=['type'=>'title','info'=>'人员信息'];
$thead=array_values($field) $tbody=[] foreach ($info as $infoVo) {
$rowData=[];
foreach (array_keys($field) as $fieldVo) {
$rowData[]=arraySeek($infoVo,$fieldVo) }
$tbody[]=$rowData }
$excel[]=['type'=>'table','info'=>['thead'=>$thead,'tbody'=>$tbody]] $excel[]=['type'=>'node','info'=>['总数:'.count($info)]];
pushLog('导出人员信息') buildExcel('人员信息',$excel);
}else{
return json(['state'=>'error','info'=>'传入数据不完整!']);
}
}
}