wupengfei 2 years ago
parent
commit
9804fab37a
2 changed files with 97 additions and 43 deletions
  1. 48 43
      application/api/controller/Contract.php
  2. 49 0
      application/common/service/ApproveService.php

+ 48 - 43
application/api/controller/Contract.php

@@ -2,8 +2,8 @@
 namespace app\api\controller;
 use app\common\model\ApproveFlow;
 use app\common\model\ContractType;
-use app\common\model\DocumentInfo;
-use app\common\model\DocumentApprove;
+use app\common\model\ContractInfo;
+use app\common\model\ContractApprove;
 use app\common\service\ApproveService;
 use hg\apidoc\annotation as Apidoc;
 
@@ -74,18 +74,21 @@ class Contract extends Base
      * @Apidoc\Method("POST")
      * @Apidoc\Author("HG")
      * @Apidoc\Tag("")
-     * @Apidoc\Query("branch_id", type="int",desc="部门id")
-     * @Apidoc\Query("title", type="string",desc="标题【文件名】")
-     * @Apidoc\Query("inscribe", type="string",desc="落款")
-     * @Apidoc\Query("content", type="string", desc="合同详细内容【上会情况】")
-     * @Apidoc\Query("document", type="string", desc="附件")
+     * @Apidoc\Query("type", type="int",desc="类型id")
+     * @Apidoc\Query("contract_no", type="string",desc="合同号")
      * @Apidoc\Query("level", type="int", desc="缓急程度(1缓,2稍急,3很急)")
+     * @Apidoc\Query("num", type="int",desc="数量")
+     * @Apidoc\Query("document", type="string", desc="附件")
+     * @Apidoc\Query("contract_remark", type="string", desc="备注")
+     * @Apidoc\Query("scope", type="string", desc="范围")
+     * @Apidoc\Query("legal_opinion", type="string", desc="法务意见")
+
      * @Apidoc\Query("file_number", type="string", desc="文件号")
      * @Apidoc\Query("publish_time", type="string", desc="发文时间")
      * @Apidoc\Query("flow_user", type="string", desc="审批人id(多个逗号隔开)")
      * @Apidoc\Query("copy_user", type="string", desc="抄送人id(多个逗号隔开)")
      */
-    public function applyDocument()
+    public function applyContract()
     {
         $request_param = input('post.');
         $request_param['user_id'] = $this->user_id;// 申请会员id
@@ -93,19 +96,20 @@ class Contract extends Base
         $flow_user = isset($request_param['flow_user']) ? $request_param['flow_user']:'' ;
         $copy_user = isset($request_param['copy_user']) ? $request_param['copy_user']:'' ;
         if(!$flow_user) $this->error('请选择审批人');
-        $flow_info = DocumentInfo::create($request_param);//生成合同记录
+        $flow_info = ContractInfo::create($request_param);//生成合同记录
         $approve_res = ApproveFlow::getApproveData($flow_user,$copy_user,$flow_info->id);
         $flow_data = $approve_res['flow_data'];// 合同流程
         $flow_num  =  $approve_res['flow_num'];
         if(!empty($flow_data)) {
-            DocumentInfo::where('id',$flow_info->id)->update(['approve_num'=>$flow_num]);
-            (new DocumentApprove())->saveAll($flow_data);
+            ContractInfo::where('id',$flow_info->id)->update(['approve_num'=>$flow_num]);
+            (new ContractApprove())->saveAll($flow_data);
         }else{
-            DocumentInfo::where('id',$flow_info->id)->update(['status'=>2]);
+            ContractInfo::where('id',$flow_info->id)->update(['status'=>2]);
         }
         $this->success('合同已提交,请等待审核',['detail'=>$flow_info->toArray()]);
 
     }
+
     /**
      * @Apidoc\Title("合同记录(列表)")
      * @Apidoc\Desc("合同记录")
@@ -116,23 +120,22 @@ class Contract extends Base
      * @Apidoc\Query("page_num", type="string", desc="每页数量")
      * @Apidoc\Query("type", type="int", desc="出差类型id")
      * @Apidoc\Query("status", type="int", desc="审批状态0全部,1审批中,2审批通过,3审批拒绝,9取消")
-     * @Apidoc\Returned("branch_id", type="int",desc="部门id")
-     * @Apidoc\Returned("title", type="string",desc="标题【文件名】")
-     * @Apidoc\Returned("inscribe", type="string",desc="落款")
-     * @Apidoc\Returned("content", type="string", desc="合同详细内容【上会情况】")
-     * @Apidoc\Returned("document", type="string", desc="附件")
-     * @Apidoc\Returned("publish_time", type="string", desc="发文时间")
+     * @Apidoc\Returned("type", type="int",desc="类型id")
+     * @Apidoc\Returned("contract_no", type="string",desc="合同号")
      * @Apidoc\Returned("level", type="int", desc="缓急程度(1缓,2稍急,3很急)")
-     * @Apidoc\Returned("file_number", type="string", desc="文件号")
-     *
+     * @Apidoc\Returned("num", type="int",desc="数量")
+     * @Apidoc\Returned("document", type="string", desc="附件")
+     * @Apidoc\Returned("contract_remark", type="string", desc="备注")
+     * @Apidoc\Returned("scope", type="string", desc="范围")
+     * @Apidoc\Returned("legal_opinion", type="string", desc="法务意见")
      *
      */
-    public function getDocumentList()
+    public function getContractList()
     {
         $sel_where = [];
         $sel_where[] = ['user_id','=',$this->user_id];
         if(input('get.status') > 0)  $sel_where[] = ['status','=',input('get.status')];
-        $list = DocumentInfo::where($sel_where)->limit($this->off_set,$this->page_num)
+        $list = ContractInfo::where($sel_where)->limit($this->off_set,$this->page_num)
             ->order('id desc')
             ->select()->toArray();
         $this->success('ok',['list'=>$list]);
@@ -145,14 +148,14 @@ class Contract extends Base
      * @Apidoc\Author("HG")
      * @Apidoc\Tag("")
      * @Apidoc\Query("id", type="int",require=true, desc="合同记录id")
-     * @Apidoc\Returned("branch_id", type="int",desc="部门id")
-     * @Apidoc\Returned("title", type="string",desc="标题【文件名】")
-     * @Apidoc\Returned("inscribe", type="string",desc="落款")
-     * @Apidoc\Returned("content", type="string", desc="合同详细内容【上会情况】")
-     * @Apidoc\Returned("document", type="string", desc="附件")
+     * @Apidoc\Returned("type", type="int",desc="类型id")
+     * @Apidoc\Returned("contract_no", type="string",desc="合同号")
      * @Apidoc\Returned("level", type="int", desc="缓急程度(1缓,2稍急,3很急)")
-     * @Apidoc\Returned("file_number", type="string", desc="文件号")
-     * @Apidoc\Returned("publish_time", type="string", desc="发文时间")
+     * @Apidoc\Returned("num", type="int",desc="数量")
+     * @Apidoc\Returned("document", type="string", desc="附件")
+     * @Apidoc\Returned("remark", type="string", desc="备注")
+     * @Apidoc\Returned("scope", type="string", desc="范围")
+     * @Apidoc\Returned("legal_opinion", type="string", desc="法务意见")
      * @Apidoc\Returned("headimg", type="string", desc="申请人头像")
      * @Apidoc\Returned("user_name", type="string", desc="申请人昵称")
      * @Apidoc\Returned("apply_date", type="string", desc="申请日期")
@@ -164,10 +167,10 @@ class Contract extends Base
      * @Apidoc\Returned("approve_list.headimg", type="string", desc="合同人头像")
      * @Apidoc\Returned("approve_list.time", type="string", desc="合同用时(上一次合同完成到本次合同的时间,单位秒)")
      */
-    public function getDocumentInfo()
+    public function getContractInfo()
     {
         $id = input('get.id');
-        $detail = DocumentInfo::with('approveList')
+        $detail = ContractInfo::with('approveList')
             ->alias('a')
             ->field('a.*,u.branch_id,u.headimg,u.name user_name')
             ->leftJoin('StoreMember u','a.user_id = u.id')
@@ -187,12 +190,14 @@ class Contract extends Base
      * @Apidoc\Query("page_num", type="int",require=true, desc="每页数量")
      * @Apidoc\Query("type", type="int", desc="合同类型id")
      *
-     * @Apidoc\Returned("title", type="string",desc="标题【文件名】")
-     * @Apidoc\Returned("inscribe", type="string",desc="落款")
-     * @Apidoc\Returned("content", type="string", desc="合同详细内容【上会情况】")
-     * @Apidoc\Returned("document", type="string", desc="附件")
+     * @Apidoc\Returned("type", type="int",desc="类型id")
+     * @Apidoc\Returned("contract_no", type="string",desc="合同号")
      * @Apidoc\Returned("level", type="int", desc="缓急程度(1缓,2稍急,3很急)")
-     * @Apidoc\Returned("file_number", type="string", desc="文件号")
+     * @Apidoc\Returned("num", type="int",desc="数量")
+     * @Apidoc\Returned("document", type="string", desc="附件")
+     * @Apidoc\Returned("contract_remark", type="string", desc="备注")
+     * @Apidoc\Returned("scope", type="string", desc="范围")
+     * @Apidoc\Returned("legal_opinion", type="string", desc="法务意见")
      *
      * @Apidoc\Returned("apply_date", type="string", desc="合同日期")
      * @Apidoc\Returned("approve_status", type="int", desc="合同状态(我的审批状态)")
@@ -200,13 +205,13 @@ class Contract extends Base
      * @Apidoc\Returned("approve_id", type="int", desc="合同记录id")
      * @Apidoc\Returned("remark", type="string", desc="合同备注")
      */
-    public function getApproveDocument()
+    public function getApproveContract()
     {
-        $list = DocumentApprove::field('i.*,p.id approve_id,p.status approve_status,p.approve_time,p.remark')
+        $list = ContractApprove::field('i.*,p.id approve_id,p.status approve_status,p.approve_time,p.remark')
             ->alias('p')
             ->where(['p.approve_user'=>$this->user_id])
             ->where('p.status','>','0')
-            ->leftJoin('DocumentInfo i','p.info_id = i.id')
+            ->leftJoin('ContractInfo i','p.info_id = i.id')
             ->limit($this->off_set,$this->page_num)
             ->select()->toArray();
         $this->success('ok',['list'=>$list]);
@@ -220,14 +225,14 @@ class Contract extends Base
      * @Apidoc\Tag("")
      * @Apidoc\Query("id", type="int",require=true, desc="申请记录id")
      * @Apidoc\Query("status", type="string",require=true, desc="合同状态(2合同通过3合同拒绝)")
-     * @Apidoc\Query("remark", type="string",require=true, desc="合同备注")
+     * @Apidoc\Query("remark", type="string",require=true, desc="审批备注")
      */
-    public function approveDocument()
+    public function approveContract()
     {
         $approve_id = input('post.id');
         $status = input('post.status');
         $remark = input('post.remark');
-        $res = ApproveService::approveDocument($approve_id,$this->user_id,$status,$remark);
+        $res = ApproveService::approveContract($approve_id,$this->user_id,$status,$remark);
         if(!$res['ret_val']) $this->error($res['msg']);
         $this->success('审批完成');
     }
@@ -243,7 +248,7 @@ class Contract extends Base
     public function cancelApply()
     {
         $id  = input('post.id');
-        $apply_info  = DocumentInfo::where('id',$id)->where('user_id',$this->user_id)->find();
+        $apply_info  = ContractInfo::where('id',$id)->where('user_id',$this->user_id)->find();
         if(!$apply_info)$this->error('合同记录有误');
         $apply_info->status = 9;
         $apply_info->save();

+ 49 - 0
application/common/service/ApproveService.php

@@ -12,6 +12,8 @@ use app\common\model\MaintainApprove;
 use app\common\model\MaintainInfo;
 use app\common\model\DocumentInfo;
 use app\common\model\DocumentApprove;
+use app\common\model\ContractInfo;
+use app\common\model\ContractApprove;
 use think\Db;
 use think\Exception;
 
@@ -320,6 +322,53 @@ class ApproveService
     }
 
 
+    /**
+     * 合同审批
+     * @param $apply_id    申请记录id
+     * @param $user_id     审批会员
+     * @param $status      审批状态
+     * @param $remark      审批备注
+     * @return array
+     */
+    public static function approveContract($apply_id,$user_id,$status,$remark)
+    {
+        Db::startTrans();
+        try {
+            $apply_info =ContractInfo::where('id',$apply_id)->find()->toArray();
+            $approve_info =ContractApprove::where('info_id',$apply_id)->where('approve_user',$user_id)->where('approve_type',1)->find();
+            if(empty($approve_info)) throw new Exception('没有审核权限');
+            if(!in_array($status,[2,3]))throw new Exception('审批状态错误');
+            $approve_info = $approve_info->toArray();
+            if($approve_info['status'] == 0) throw new Exception('请等待审核');
+            if($approve_info['status'] != 1) throw new Exception('该记录已审核');
+            if($apply_info['status'] != 1)  throw new Exception('该记录已审核或已取消');
+            $approve_update = [];
+            $approve_update['status'] = $status;
+            $approve_update['remark'] = $remark;
+            $approve_update['approve_time'] = date('Y-m-d H:i:s');
+            $approve_time = time() - strtotime($approve_info['start_time']);
+            $approve_update['time'] = $approve_time;
+            $approve_update['time_desc'] = get_stay_time($approve_time);
+            ContractApprove::where('info_id',$apply_id)->where('approve_user',$user_id)->where('approve_type',1)->update($approve_update);// 更新审批记录
+            $Info_up = [];
+            // 审批流程数 + 1
+            $Info_up['cur_num'] = $apply_info['cur_num'] + 1;
+            if($approve_info['flow'] < $apply_info['approve_num']){
+                // 更新下一级审批记录状态
+                ContractApprove::where(['info_id'=>$approve_info['info_id'],'flow'=>$approve_info['flow'] + 1,'approve_type'=>1])->update(['status'=>1,'start_time'=>date('Y-m-d H:i:s')]);
+                if($status == 3) $Info_up['status'] = 3;
+            } else if($approve_info['flow'] == $apply_info['approve_num']) {
+                $Info_up['status'] = $status;
+            }
+            ContractInfo::where('id',$apply_info['id'])->update($Info_up);// 更新申请状态
+            Db::commit();
+        }catch (\Exception $e) {
+            Db::rollback();
+            static::$ret_val = false;
+            static::$msg = $e->getMessage();
+        }
+        return ['ret_val'=>static::$ret_val ,'msg'=>static::$msg];
+    }
 
 
 }