273 lines
8.9 KiB
PHP
273 lines
8.9 KiB
PHP
|
<?php
|
||
|
/**
|
||
|
* @copyright Copyright (c) 2022 勾股工作室
|
||
|
* @license https://opensource.org/licenses/GPL-3.0
|
||
|
* @link https://www.gougucms.com
|
||
|
*/
|
||
|
declare (strict_types = 1);
|
||
|
namespace app\contract\controller;
|
||
|
|
||
|
use app\api\BaseController;
|
||
|
use app\contract\model\ContractLog;
|
||
|
use think\facade\Db;
|
||
|
use think\facade\View;
|
||
|
|
||
|
class Api extends BaseController
|
||
|
{
|
||
|
//获取合同协议
|
||
|
public function get_contract()
|
||
|
{
|
||
|
$param = get_params();
|
||
|
$where = array();
|
||
|
$whereOr = array();
|
||
|
if (!empty($param['keywords'])) {
|
||
|
$where[] = ['id|name', 'like', '%' . $param['keywords'] . '%'];
|
||
|
}
|
||
|
$where[] = ['delete_time', '=', 0];
|
||
|
$where[] = ['check_status', '=', 2];
|
||
|
$uid = $this->uid;
|
||
|
$auth = isAuth($uid,'contract_admin');
|
||
|
if($auth==0){
|
||
|
$whereOr[] =['admin_id|prepared_uid|sign_uid|keeper_uid', '=', $uid];
|
||
|
$whereOr[] = ['', 'exp', Db::raw("FIND_IN_SET('{$uid}',share_ids)")];
|
||
|
$dids = get_department_role($this->uid);
|
||
|
if(!empty($dids)){
|
||
|
$whereOr[] =['sign_did', 'in', $dids];
|
||
|
}
|
||
|
}
|
||
|
$rows = empty($param['limit']) ? get_config('app.page_size') : $param['limit'];
|
||
|
$list = Db::name('Contract')
|
||
|
->field('id,name,code,customer_id,sign_uid,sign_time')
|
||
|
->order('id desc')
|
||
|
->where($where)
|
||
|
->where(function ($query) use($whereOr) {
|
||
|
$query->whereOr($whereOr);
|
||
|
})
|
||
|
->paginate($rows, false)->each(function($item, $key){
|
||
|
$item['sign_name'] = Db::name('Admin')->where('id',$item['sign_uid'])->value('name');
|
||
|
$item['sign_time'] = date('Y-m-d', $item['sign_time']);
|
||
|
$item['customer'] = Db::name('Customer')->where('id',$item['customer_id'])->value('name');
|
||
|
return $item;
|
||
|
});
|
||
|
table_assign(0, '', $list);
|
||
|
}
|
||
|
|
||
|
//添加附件
|
||
|
public function add_file()
|
||
|
{
|
||
|
$param = get_params();
|
||
|
$param['create_time'] = time();
|
||
|
$param['admin_id'] = $this->uid;
|
||
|
$fid = Db::name('ContractFile')->strict(false)->field(true)->insertGetId($param);
|
||
|
if ($fid) {
|
||
|
$log_data = array(
|
||
|
'field' => 'file',
|
||
|
'action' => 'upload',
|
||
|
'contract_id' => $param['contract_id'],
|
||
|
'admin_id' => $param['admin_id'],
|
||
|
'old_content' => '',
|
||
|
'new_content' => $param['file_name'],
|
||
|
'create_time' => time(),
|
||
|
);
|
||
|
Db::name('ContractLog')->strict(false)->field(true)->insert($log_data);
|
||
|
return to_assign(0, '上传成功', $fid);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//删除
|
||
|
public function delete_file()
|
||
|
{
|
||
|
if (request()->isDelete()) {
|
||
|
$id = get_params("id");
|
||
|
$data['id'] = $id;
|
||
|
$data['delete_time'] = time();
|
||
|
if (Db::name('ContractFile')->update($data) !== false) {
|
||
|
$detail = Db::name('ContractFile')->where('id', $id)->find();
|
||
|
$file_name = Db::name('File')->where('id', $detail['file_id'])->value('name');
|
||
|
$log_data = array(
|
||
|
'field' => 'file',
|
||
|
'action' => 'delete',
|
||
|
'contract_id' => $detail['contract_id'],
|
||
|
'admin_id' => $this->uid,
|
||
|
'new_content' => $file_name,
|
||
|
'create_time' => time(),
|
||
|
);
|
||
|
Db::name('ContractLog')->strict(false)->field(true)->insert($log_data);
|
||
|
return to_assign(0, "删除成功");
|
||
|
} else {
|
||
|
return to_assign(1, "删除失败");
|
||
|
}
|
||
|
} else {
|
||
|
return to_assign(1, "错误的请求");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//状态改变等操作
|
||
|
public function check()
|
||
|
{
|
||
|
if (request()->isPost()) {
|
||
|
$param = get_params();
|
||
|
if($param['check_status'] == 0){
|
||
|
$param['check_step_sort'] = 0;
|
||
|
}
|
||
|
if($param['check_status'] == 1){
|
||
|
$check_admin_ids = isset($param['check_admin_ids'])?$param['check_admin_ids']:'';
|
||
|
$flow_data = set_flow($param['flow_id'],$check_admin_ids,$this->uid);
|
||
|
$param['check_admin_ids'] = $flow_data['check_admin_ids'];
|
||
|
$flow = $flow_data['flow'];
|
||
|
$check_type = $flow_data['check_type'];
|
||
|
//删除原来的审核流程和审核记录
|
||
|
Db::name('FlowStep')->where(['action_id'=>$param['id'],'type'=>4,'delete_time'=>0])->update(['delete_time'=>time()]);
|
||
|
Db::name('FlowRecord')->where(['action_id'=>$param['id'],'type'=>4,'delete_time'=>0])->update(['delete_time'=>time()]);
|
||
|
if($check_type == 2){
|
||
|
$flow_step = array(
|
||
|
'action_id' => $param['id'],
|
||
|
'type' => 4,
|
||
|
'flow_uids' => $param['check_admin_ids'],
|
||
|
'create_time' => time()
|
||
|
);
|
||
|
//增加审核流程
|
||
|
Db::name('FlowStep')->strict(false)->field(true)->insertGetId($flow_step);
|
||
|
}
|
||
|
else{
|
||
|
foreach ($flow as $key => &$value){
|
||
|
$value['action_id'] = $param['id'];
|
||
|
$value['sort'] = $key;
|
||
|
$value['type'] = 4;
|
||
|
$value['create_time'] = time();
|
||
|
}
|
||
|
//增加审核流程
|
||
|
Db::name('FlowStep')->strict(false)->field(true)->insertAll($flow);
|
||
|
}
|
||
|
$checkData=array(
|
||
|
'action_id' => $param['id'],
|
||
|
'step_id' => 0,
|
||
|
'check_user_id' => $this->uid,
|
||
|
'type' => 4,
|
||
|
'check_time' => time(),
|
||
|
'status' => 0,
|
||
|
'content' => '提交申请',
|
||
|
'create_time' => time()
|
||
|
);
|
||
|
$aid = Db::name('FlowRecord')->strict(false)->field(true)->insertGetId($checkData);
|
||
|
//发送消息通知
|
||
|
$msg=[
|
||
|
'from_uid'=>$this->uid,
|
||
|
'title'=>'合同',
|
||
|
'action_id'=>$param['id']
|
||
|
];
|
||
|
$users = $param['check_admin_ids'];
|
||
|
sendMessage($users,51,$msg);
|
||
|
}
|
||
|
if($param['check_status'] == 3){
|
||
|
$param['check_uid'] = $this->uid;
|
||
|
$param['check_time'] = time();
|
||
|
$param['check_remark'] = $param['mark'];
|
||
|
}
|
||
|
if($param['check_status'] == 5){
|
||
|
$param['stop_uid'] = $this->uid;
|
||
|
$param['stop_time'] = time();
|
||
|
$param['stop_remark'] = $param['mark'];
|
||
|
}
|
||
|
if($param['check_status'] == 6){
|
||
|
$param['void_uid'] = $this->uid;
|
||
|
$param['void_time'] = time();
|
||
|
$param['void_remark'] = $param['mark'];
|
||
|
}
|
||
|
$old = Db::name('Contract')->where('id', $param['id'])->find();
|
||
|
if (Db::name('Contract')->strict(false)->update($param) !== false) {
|
||
|
$log_data = array(
|
||
|
'field' => 'check_status',
|
||
|
'contract_id' => $param['id'],
|
||
|
'admin_id' => $this->uid,
|
||
|
'new_content' => $param['check_status'],
|
||
|
'old_content' => $old['check_status'],
|
||
|
'create_time' => time(),
|
||
|
);
|
||
|
Db::name('ContractLog')->strict(false)->field(true)->insert($log_data);
|
||
|
return to_assign(0, "操作成功");
|
||
|
} else {
|
||
|
return to_assign(1, "操作失败");
|
||
|
}
|
||
|
} else {
|
||
|
return to_assign(1, "错误的请求");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//归档等操作
|
||
|
public function archive()
|
||
|
{
|
||
|
if (request()->isPost()) {
|
||
|
$param = get_params();
|
||
|
$old = 1;
|
||
|
if($param['archive_status'] == 1){
|
||
|
$param['archive_uid'] = $this->uid;
|
||
|
$param['archive_time'] = time();
|
||
|
$old = 0;
|
||
|
}
|
||
|
$old = Db::name('Contract')->where('id', $param['id'])->find();
|
||
|
if (Db::name('Contract')->strict(false)->update($param) !== false) {
|
||
|
$log_data = array(
|
||
|
'field' => 'archive_status',
|
||
|
'contract_id' => $param['id'],
|
||
|
'admin_id' => $this->uid,
|
||
|
'new_content' => $param['archive_status'],
|
||
|
'old_content' => $old['archive_status'],
|
||
|
'create_time' => time(),
|
||
|
);
|
||
|
Db::name('ContractLog')->strict(false)->field(true)->insert($log_data);
|
||
|
return to_assign(0, "操作成功");
|
||
|
} else {
|
||
|
return to_assign(1, "操作失败");
|
||
|
}
|
||
|
} else {
|
||
|
return to_assign(1, "错误的请求");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//合同操作日志列表
|
||
|
public function contract_log()
|
||
|
{
|
||
|
$param = get_params();
|
||
|
$list = new ContractLog();
|
||
|
$content = $list->contract_log($param);
|
||
|
return to_assign(0, '', $content);
|
||
|
}
|
||
|
|
||
|
//获取客户列表
|
||
|
public function get_customer()
|
||
|
{
|
||
|
$param = get_params();
|
||
|
$where = array();
|
||
|
if (!empty($param['keywords'])) {
|
||
|
$where[] = ['id|name', 'like', '%' . $param['keywords'] . '%'];
|
||
|
}
|
||
|
$where[] = ['delete_time', '=', 0];
|
||
|
$uid = $this->uid;
|
||
|
$auth = isAuth($uid,'customer_admin');
|
||
|
$dids = get_department_role($this->uid);
|
||
|
if($auth==0){
|
||
|
$whereOr[] =['belong_uid', '=', $uid];
|
||
|
if(!empty($dids)){
|
||
|
$whereOr[] =['belong_did', 'in', $dids];
|
||
|
}
|
||
|
$whereOr[] = ['', 'exp', Db::raw("FIND_IN_SET('{$uid}',share_ids)")];
|
||
|
}
|
||
|
$rows = empty($param['limit']) ? get_config('app.page_size') : $param['limit'];
|
||
|
$list = Db::name('Customer')->field('id,name,address')->order('id asc')->where($where)->paginate($rows, false)->each(function($item, $key){
|
||
|
$contact = Db::name('CustomerContact')->where(['cid'=>$item['id'],'is_default'=>1])->find();
|
||
|
if(!empty($contact)){
|
||
|
$item['contact_name'] = $contact['name'];
|
||
|
$item['contact_mobile'] = $contact['mobile'];
|
||
|
}
|
||
|
else{
|
||
|
$item['contact_name'] = '';
|
||
|
$item['contact_mobile'] = '';
|
||
|
}
|
||
|
return $item;
|
||
|
});
|
||
|
table_assign(0, '', $list);
|
||
|
}
|
||
|
|
||
|
}
|