panghu 1 rok temu
rodzic
commit
19f6556969

+ 10 - 4
app/Http/Controllers/AdminApi/NotifyController.php

@@ -7,6 +7,7 @@ use App\Http\Controllers\ApiController;
 use App\Models\Firm;
 use App\Models\Member;
 use App\Servers\ESign\comm\EsignLogHelper;
+use App\Servers\System\JobServer;
 
 class NotifyController extends ApiController
 {
@@ -50,11 +51,16 @@ class NotifyController extends ApiController
             $psnId = $data['psnId'];
             $orgId = $data['orgId'] ?? '';
             $authorizedInfo = json_encode($data['authorizedInfo']);
-            //更新用户授权数据
-            Member::where('authFlowId',$authFlowId)->update(['authorizeUserInfo'=>1,'realnameStatus'=>1,'psnId'=>$psnId,'orgId'=>$orgId,'authorizedInfo'=>$authorizedInfo]);
+
             if($orgId){
-                //检查该企业是否认证授权
-                ESignFirmServer::creatServer()->setSignFirm($data);
+                Firm::where('authFlowId',$authFlowId)->update(['authorizeUserInfo'=>1,'realnameStatus'=>1,'orgId'=>$orgId,'authorizedInfo'=>$authorizedInfo]);
+
+                //检测系统内部的企业印章信息
+                JobServer::creatServer()->createFirmSealJob($orgId);
+            }else{
+                Member::where('authFlowId',$authFlowId)->update(['authorizeUserInfo'=>1,'realnameStatus'=>1,'psnId'=>$psnId,'authorizedInfo'=>$authorizedInfo]);
+                //检测系统内部的企业印章信息
+                JobServer::creatServer()->createMemberSealJob($psnId);
             }
 
 

+ 60 - 0
app/Jobs/CreateFirmSealJob.php

@@ -0,0 +1,60 @@
+<?php
+
+namespace App\Jobs;
+
+use App\Models\Firm;
+use App\Models\FirmSeal;
+use App\Models\Member;
+use App\Servers\ESign\ESignFirmServer;
+use App\Servers\System\RedisDataServer;
+use Illuminate\Bus\Queueable;
+use Illuminate\Contracts\Queue\ShouldBeUnique;
+use Illuminate\Contracts\Queue\ShouldQueue;
+use Illuminate\Foundation\Bus\Dispatchable;
+use Illuminate\Queue\InteractsWithQueue;
+use Illuminate\Queue\SerializesModels;
+
+class CreateFirmSealJob implements ShouldQueue
+{
+    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
+
+    private $orgId;
+    /**
+     * Create a new job instance.
+     *
+     * @return void
+     */
+    public function __construct($orgId)
+    {
+       $this->orgId=  $orgId;
+    }
+
+    /**
+     * Execute the job.
+     *
+     * @return void
+     */
+    public function handle()
+    {
+        //获取企业id
+        $firm_id = Firm::where('org_id',$this->orgId)->value('id');
+        if (empty($firm_id)){
+            dump('签章生成-找不到企业');
+            return;
+        }
+        $isSelect=RedisDataServer::creatServer()->getData('firmSeal_'.$firm_id);
+        if($isSelect){
+            dump($firm_id.'签章信息已在生成中');
+            return;
+        }
+        RedisDataServer::creatServer()->setData('firmSeal_'.$firm_id,1);
+        //获取企业内部使用签章列表
+        ESignFirmServer::creatServer()->internalAuthInfo($firm_id,$this->orgId);
+        //查询是否有合同章
+        $sealItem=FirmSeal::where('firm_id',$firm_id)->where('seal_type','CONTRACT')->first();
+        if(empty($sealItem)){
+            //无合同印章执行创建流程
+            ESignFirmServer::creatServer()->createOrgsealsbyTemplate($firm_id,$this->orgId);
+        }
+    }
+}

+ 60 - 0
app/Jobs/CreateMemberSealJob.php

@@ -0,0 +1,60 @@
+<?php
+
+namespace App\Jobs;
+
+use App\Models\Member;
+use App\Models\MemberSeal;
+use App\Servers\ESign\ESignServer;
+use App\Servers\System\RedisDataServer;
+use Illuminate\Bus\Queueable;
+use Illuminate\Contracts\Queue\ShouldBeUnique;
+use Illuminate\Contracts\Queue\ShouldQueue;
+use Illuminate\Foundation\Bus\Dispatchable;
+use Illuminate\Queue\InteractsWithQueue;
+use Illuminate\Queue\SerializesModels;
+
+class CreateMemberSealJob implements ShouldQueue
+{
+    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
+
+    private $psnId;
+    /**
+     * Create a new job instance.
+     *
+     * @return void
+     */
+    public function __construct($psnId)
+    {
+        $this->psnId=  $psnId;
+    }
+
+    /**
+     * Execute the job.
+     *
+     * @return void
+     */
+    public function handle()
+    {
+        //获取用户id
+        $m_id = Member::where('psnId',$this->psnId)->value('id');
+        if (empty($m_id)){
+            dump('签章生成-找不到用户');
+            return;
+        }
+        $isSelect=RedisDataServer::creatServer()->getData('memberSeal_'.$m_id);
+        if($isSelect){
+            dump($m_id.'用户签章信息已在生成中');
+            return;
+        }
+        RedisDataServer::creatServer()->setData('memberSeal_'.$m_id,1);
+
+        //获取企业内部使用签章列表
+        ESignServer::creatServer()->internalAuthInfo($m_id,$this->psnId);
+        //查询是否有合同章
+        $sealItem=MemberSeal::where('m_id',$m_id)->first();
+        if(empty($sealItem)){
+            //无合同印章执行创建流程
+            ESignServer::creatServer()->createOrgsealsbyTemplate($m_id,$this->psnId);
+        }
+    }
+}

+ 7 - 0
app/Models/AdminLog.php

@@ -36,6 +36,13 @@ class AdminLog extends Model
     protected $guarded = ['id', 'updated_at', 'created_at'];
 
 
+    /**
+     * The table associated with the model.
+     *
+     * @var string
+     */
+    protected $table = 'admin_logs';
+
     /**
      * 为数组 / JSON 序列化准备日期。
      *

+ 7 - 0
app/Models/Contract.php

@@ -17,6 +17,13 @@ class Contract extends Model
     protected $guarded = ['id', 'updated_at', 'created_at'];
 
 
+    /**
+     * The table associated with the model.
+     *
+     * @var string
+     */
+    protected $table = 'contracts';
+
     /**
      * 为数组 / JSON 序列化准备日期。
      *

+ 7 - 0
app/Models/Firm.php

@@ -17,6 +17,13 @@ class Firm extends Model
     protected $guarded = ['id', 'updated_at', 'created_at'];
 
 
+    /**
+     * The table associated with the model.
+     *
+     * @var string
+     */
+    protected $table = 'firms';
+
     /**
      * 为数组 / JSON 序列化准备日期。
      *

+ 37 - 0
app/Models/FirmSeal.php

@@ -0,0 +1,37 @@
+<?php
+
+namespace App\Models;
+
+use DateTimeInterface;
+use Illuminate\Database\Eloquent\Factories\HasFactory;
+use Illuminate\Database\Eloquent\Model;
+
+/**
+ * App\Models
+ *
+ * @mixin \Eloquent
+ */
+class FirmSeal extends Model
+{
+    use HasFactory;
+    protected $guarded = ['id', 'updated_at', 'created_at'];
+
+
+    /**
+     * The table associated with the model.
+     *
+     * @var string
+     */
+    protected $table = 'firm_seals';
+
+    /**
+     * 为数组 / JSON 序列化准备日期。
+     *
+     * @param \DateTimeInterface $date
+     * @return string
+     */
+    protected function serializeDate(DateTimeInterface $date)
+    {
+        return $date->format($this->dateFormat ?: 'Y-m-d H:i:s');
+    }
+}

+ 7 - 0
app/Models/Member.php

@@ -17,6 +17,13 @@ class Member extends Model
     protected $guarded = ['id', 'updated_at', 'created_at'];
 
 
+    /**
+     * The table associated with the model.
+     *
+     * @var string
+     */
+    protected $table = 'members';
+
     /**
      * 为数组 / JSON 序列化准备日期。
      *

+ 37 - 0
app/Models/MemberSeal.php

@@ -0,0 +1,37 @@
+<?php
+
+namespace App\Models;
+
+use DateTimeInterface;
+use Illuminate\Database\Eloquent\Factories\HasFactory;
+use Illuminate\Database\Eloquent\Model;
+
+/**
+ * App\Models
+ *
+ * @mixin \Eloquent
+ */
+class MemberSeal extends Model
+{
+    use HasFactory;
+    protected $guarded = ['id', 'updated_at', 'created_at'];
+
+
+    /**
+     * The table associated with the model.
+     *
+     * @var string
+     */
+    protected $table = 'member_seals';
+
+    /**
+     * 为数组 / JSON 序列化准备日期。
+     *
+     * @param \DateTimeInterface $date
+     * @return string
+     */
+    protected function serializeDate(DateTimeInterface $date)
+    {
+        return $date->format($this->dateFormat ?: 'Y-m-d H:i:s');
+    }
+}

+ 22 - 245
app/Servers/ESign/ESignFirmServer.php

@@ -8,15 +8,11 @@ namespace App\Servers\ESign;
 
 
 use App\Models\Firm;
+use App\Models\FirmSeal;
 use App\Models\Member;
-use App\Models\SignFirm;
-use App\Models\SignMember;
-use App\Models\SignSeal;
-use App\Models\SignSealAuth;
 use App\Servers\ESign\comm\EsignHttpHelper;
 use App\Servers\ESign\comm\EsignLogHelper;
 use App\Servers\ESign\emun\HttpEmun;
-use App\Servers\Firm\FirmServer;
 use App\Servers\System\CommonServer;
 use App\Servers\System\JobServer;
 use App\Servers\System\RedisDataServer;
@@ -244,93 +240,16 @@ class ESignFirmServer
     }
 
 
-    /**
-     * 记录E签宝审核基本信息
-     * @param $data
-     * @return array|void
-     */
-    function setSignFirm($data)
-    {
-        if(empty($data['orgName'])){
-            return ['code'=>0,'msg'=>'暂无企业信息'];
-        }
-        $firm=Firm::where('firm_name',$data['orgName'])->select(['id','firm_name','status'])->first();
-        if(empty($firm)){
-            return ['code'=>0,'msg'=>'企业暂未注册'];
-        }
-        if($data['realnameStatus']==1){
-            if($firm->{'status'}!=3){
-                $firm->update(['status' => 3]);
-            }
-        }
-        $signFirm=SignFirm::where('firm_id',$firm['id'])->first();
-        if(empty($signFirm)){
-            SignFirm::create([
-                'firm_id' => $firm['id'],
-                'org_id' => $data['orgId'],
-                'realname_status' => $data['realnameStatus']
-            ]);
-        }else{
-            $signFirm->update(['org_id' => $data['orgId'],'realname_status' => $data['realnameStatus']]);
-        }
-        //检测系统内部的企业印章信息
-        JobServer::creatServer()->createFirmSealJob($firm['id']);
-    }
-
-    /**
-     * 获取orgId
-     * @param $firmId
-     * @return false|mixed
-     */
-    function getFirmOrgId($firmId)
-    {
-        $orgId=SignFirm::where('firm_id',$firmId)->value('org_id');
-        if(empty($orgId)){
-            return false;
-        }
-        return $orgId;
-    }
-
-
-    /**
-     * 获取企业外部签章列表
-     * @param $firmId
-     * @param $pageNum
-     * @return array|string[]
-     */
-    function orgAuthorizedSealList($firmId,$pageNum=1){
-        $orgId=$this->getFirmOrgId($firmId);
-        if(empty($orgId)){
-            return ['code'=>'0','msg'=>'暂无企业授权信息'];
-        }
-        $config=$this->config;
-        $apiaddr="/v3/seals/org-authorized-seal-list?orgId=".$orgId."&pageNum={$pageNum}&pageSize=20";
-        $requestType = HttpEmun::GET;
-        //生成签名验签+json体的header
-        $signAndBuildSignAndJsonHeader = EsignHttpHelper::signAndBuildSignAndJsonHeader($config['eSignAppId'], $config['eSignAppSecret'], "", $requestType, $apiaddr);
-        //发起接口请求头
-        //EsignLogHelper::printMsg($signAndBuildSignAndJsonHeader);
-        $response = EsignHttpHelper::doCommHttp($config['eSignHost'], $apiaddr, $requestType, $signAndBuildSignAndJsonHeader, "");
-        $ret=json_decode($response->getBody(),true);
-        if(isset($ret['code']) && $ret['code']==0){
-            $this->setSealList($firmId,$ret['data']['seals'],2);
-            return ['code'=>'1','msg'=>'ok','data'=>['total'=>$ret['data']['total'],'items'=>$ret['data']['seals']]];
-        }else{
-            return ['code'=>'0','msg'=>$ret['message']];
-        }
-    }
 
     /**
      * 获取企业内部使用签章列表
      * @param $firmId
+     * @param $orgId
      * @param $pageNum
      * @return array|string[]
      */
-    function internalAuthInfo($firmId,$pageNum=1){
-        $orgId=$this->getFirmOrgId($firmId);
-        if(empty($orgId)){
-            return ['code'=>'0','msg'=>'暂无企业授权信息'];
-        }
+    function internalAuthInfo($firmId,$orgId,$pageNum=1){
+
         $config=$this->config;
         $apiaddr="/v3/seals/org-own-seal-list?orgId=".$orgId."&pageNum={$pageNum}&pageSize=20";
         $requestType = HttpEmun::GET;
@@ -340,7 +259,8 @@ class ESignFirmServer
         $response = EsignHttpHelper::doCommHttp($config['eSignHost'], $apiaddr, $requestType, $signAndBuildSignAndJsonHeader, "");
         $ret=json_decode($response->getBody(),true);
         if(isset($ret['code']) && $ret['code']==0){
-            $this->setSealList($firmId,$ret['data']['seals'],1);
+            //存入签章信息
+            $this->setSealList($firmId,$ret['data']['seals']);
             return ['code'=>'1','msg'=>'ok','data'=>['total'=>$ret['data']['total'],'items'=>$ret['data']['seals']]];
         }else{
             return ['code'=>'0','msg'=>$ret['message']];
@@ -351,24 +271,23 @@ class ESignFirmServer
      * 设置企业签章信息
      * @param $firmId
      * @param $list
-     * @param $useType
      * @return void
      */
-    public function setSealList($firmId,$list,$useType)
+    public function setSealList($firmId,$list)
     {
         if($list){
             foreach ($list as $item){
                 $sealRow=[
-                  'firm_id'=>$firmId,
+                    'firm_id'=>$firmId,
                     'seal_id'=>$item['sealId'],
                     'seal_name'=>$item['sealName'],
                     'seal_type'=>$item['sealBizType'],
+                    'seal_status'=>$item['sealStatus'],
                     'seal_url'=>$item['sealImageDownloadUrl'],
-                    'use_type'=>$useType,
                 ];
-                $sealModel=SignSeal::where('firm_id',$firmId)->where('seal_id',$item['sealId'])->first();
+                $sealModel=FirmSeal::where('firm_id',$firmId)->where('seal_id',$item['sealId'])->first();
                 if(empty($sealModel)){
-                    $sealModel=SignSeal::create($sealRow);
+                    $sealModel=FirmSeal::create($sealRow);
                 }else{
                     $sealModel->update($sealRow);
                 }
@@ -380,36 +299,34 @@ class ESignFirmServer
 
     /**
      * 保持印章图片
-     * @param SignSeal $signSeal
+     * @param FirmSeal $firmSeal
      * @return void
      */
-    function setSealImg(SignSeal  $signSeal)
+    function setSealImg(FirmSeal  $firmSeal)
     {
         $path=public_path('storage/seal/'.date('Ymd').'/');
         if(!is_dir($path)){
             mkdir($path,0777,true);
         }
-        $name=$signSeal['seal_id'].'.png';
-        file_put_contents($path.$name,file_get_contents($signSeal['seal_url']));
+        $name=$firmSeal['seal_id'].'.png';
+        file_put_contents($path.$name,file_get_contents($firmSeal['seal_url']));
         $url=env('APP_URL').'/storage/seal/'.date('Ymd').'/'.$name;
-        $signSeal->update(['seal_url'=>$url]);
+        $firmSeal->update(['seal_url'=>$url]);
     }
 
 
     /**
      * 创建企业合同印章
      * @param $firmId
+     * @param $orgId
      * @return string[]|void
      */
-    function createOrgsealsbyTemplate($firmId){
-        $sealNum=SignSeal::where('firm_id',$firmId)->where('seal_type','CONTRACT')->count();
+    function createOrgsealsbyTemplate($firmId,$orgId){
+        $sealNum=FirmSeal::where('firm_id',$firmId)->where('seal_type','CONTRACT')->count();
         if($sealNum>0){
             return ['code'=>'0','msg'=>'合同印章已创建'];
         }
-        $orgId=$this->getFirmOrgId($firmId);
-        if(empty($orgId)){
-            return ['code'=>'0','msg'=>'暂无企业授权信息'];
-        }
+
         $license_number=Firm::where('id',$firmId)->value('license_number');
         $config=$this->config;
         $apiaddr="/v3/seals/org-seals/create-by-template";
@@ -435,14 +352,14 @@ class ESignFirmServer
         $ret=json_decode($response->getBody(),true);
         if(isset($ret['code']) && $ret['code']==0){
             //realnameStatus 0 - 未实名,1 - 已实名
-            SignSeal::create([
+            FirmSeal::create([
                 'firm_id' => $firmId,
                 'seal_id' => $ret['data']['sealId'],
                 'seal_name' => "合同印章",
                 'seal_type' => 'CONTRACT'
             ]);
             //获取完成印章以后重新拉取一下印章信息
-            $this->internalAuthInfo($firmId);
+            $this->internalAuthInfo($firmId,$orgId);
             return ['code'=>'1','msg'=>'ok'];
         }else{
             return ['code'=>'0','msg'=>$ret['message']];
@@ -450,146 +367,6 @@ class ESignFirmServer
     }
 
 
-    /**
-     * 查询企业对平台的授权
-     * @param $firmId
-     * @param $sealKey
-     * @return array|string[]
-     */
-    function selectOrgsealsExternalAuth($firmId,$sealKey)
-    {
-        $orgId=SignFirm::where('firm_id',$firmId)->value('org_id');
-        $sealId=SignSeal::where('id',$sealKey)->value('seal_id');
-        $config=$this->config;
-        $apiaddr="/v3/seals/org-seals/external-auth?orgId={$orgId}&pageNum=1&pageSize=20&sealId={$sealId}";
-        $requestType = HttpEmun::GET;
-        //生成签名验签+json体的header
-        $signAndBuildSignAndJsonHeader = EsignHttpHelper::signAndBuildSignAndJsonHeader($config['eSignAppId'], $config['eSignAppSecret'], "", $requestType, $apiaddr);
-        //发起接口请求
-        $response = EsignHttpHelper::doCommHttp($config['eSignHost'], $apiaddr, $requestType, $signAndBuildSignAndJsonHeader, "");
-        $ret=json_decode($response->getBody(),true);
-        if(isset($ret['code']) && $ret['code']==0){
-           $status= $this->setSealAuth($firmId,$sealKey,$ret['data']['sealAuthorizedInfos']);
-           if(empty($status)){
-               return ['code'=>'0','msg'=>'暂无授权信息'];
-           }
-            return ['code'=>'1','msg'=>'ok','data'=>['total'=>$ret['data']['total'],'items'=>$ret['data']['sealAuthorizedInfos']]];
-        }else{
-            return ['code'=>'0','msg'=>$ret['message']];
-        }
-    }
-
-    function setSealAuth($firmId,$sealKey,$list)
-    {
-        $status=false;
-        if(empty($list)){
-            return false;
-        }
-        $sysOrgId=CommonServer::creatServer()->getConfigValue('sys_org_id');
-        if(empty($sysOrgId)){
-            return false;
-        }
-        foreach ($list as $value){
-            if($value['authorizedOrgId']==$sysOrgId &&$value['authorizeStatus']==1){
-                $seal= SignSeal::where('id',$sealKey)->first();
-                if($seal){
-                    $seal->update(['is_auth' => 1]);
-                    $member_id=SignMember::where('psnId',$value['authorizerPsnId'])->value('m_id');
-                    if(empty($member_id)){
-                        $member_id=0;
-                    }
-                    SignSealAuth::create([
-                        'firm_id' => $firmId,
-                        'seal_id' => $seal->{'seal_id'},
-                        'member_id' => $member_id,
-                        'end_at' => date('Y-m-d H:i:s',$value['expireTime']/1000),
-                        'status' => 1,
-                        'url' => '',
-                        'auth_biz_id'=>$value['sealAuthBizId']
-                    ]);
-                    $status=true;
-                    break;
-                }
-
-            }
-        }
-        return $status;
-    }
-
-
-    /**
-     * 跨企业授权
-     * @param $firmId
-     * @param $sealKey
-     * @param $memberId
-     * @return void
-     */
-    function orgsealsExternalAuth($firmId,$sealKey,$memberId){
-        $authShortUrl=RedisDataServer::creatServer()->getData($firmId.'_sealUrl'.$sealKey);
-        if($authShortUrl){
-            return ;
-        }
-        $orgId=SignFirm::where('firm_id',$firmId)->value('org_id');
-        $sealId=SignSeal::where('id',$sealKey)->value('seal_id');
-        $transactorPsnId=SignMember::where('m_id',$memberId)->where('authType','PSN')->where('psnId','<>','')->orderBy('id','desc')->value('psnId');
-        $config=$this->config;
-        $apiaddr="/v3/seals/org-seals/external-auth";
-        $requestType = HttpEmun::POST;
-        $firm_name=CommonServer::creatServer()->getConfigValue('firm_name');
-        $license_number=CommonServer::creatServer()->getConfigValue('license_number');
-        //生成签名验签+json体的header
-        $data=[
-            "orgId"=>$orgId,
-            "sealId"=>$sealId,//机构印章名称(用户自定义,且名称不可重复)
-            "transactorPsnId"=>$transactorPsnId,
-            "authorizedOrgInfo"=>[
-                "orgName"=>$firm_name,
-                "orgIDCardNum"=>$license_number
-            ],
-            "effectiveTime"=>time() * 1000,//授权生效时间(Unix 时间戳格式,单位:毫秒),示例中获取的当前时间为授权日期
-            "expireTime"=>strtotime("+365 day",time()) * 1000,//授权失效时间(Unix时间戳格式,单位:毫秒)示例中获取授权有效期为1年
-
-        ];
-        dump($data);
-        $paramStr = json_encode($data);
-        //请求参数
-        EsignLogHelper::printMsg($paramStr);
-        $signAndBuildSignAndJsonHeader = EsignHttpHelper::signAndBuildSignAndJsonHeader($config['eSignAppId'], $config['eSignAppSecret'], $paramStr, $requestType, $apiaddr);
-//发起接口请求
-        //发起接口请求头
-        //EsignLogHelper::printMsg($signAndBuildSignAndJsonHeader);
-        $response = EsignHttpHelper::doCommHttp($config['eSignHost'], $apiaddr, $requestType, $signAndBuildSignAndJsonHeader, $paramStr);
-        EsignLogHelper::printMsg($response->getStatus());
-        $data=json_decode($response->getBody(),true);
-        if($data['code']===0){
-            $authShortUrl=RedisDataServer::creatServer()->getData($firmId.'_sealUrl'.$sealKey);
-            if($authShortUrl){
-                return ;
-            }
-            $authNum=SignSealAuth::where('firm_id',$firmId)->where('seal_id',$sealId)->where('member_id',$memberId)->where('created_at','>=',date('Y-m-d H:i:s',time()-600))->count();
-            if($authNum<=0){
-                RedisDataServer::creatServer()->setData($firmId.'_sealUrl'.$sealKey,$data['data']['authorizationSignShortUrl'],'str',600);
-                $member=Member::where('id',$memberId)->select(['phone','promissory_name'])->first();
-                $content='尊敬的'.$member['promissory_name'].',您有待签署印章授权,点击签署 '.$data['data']['authorizationSignShortUrl'];
-                SmsServer::creatServer()->sendContent($member['phone'],$content);
-                SignSealAuth::create([
-                    'firm_id'=>$firmId,
-                    'seal_id'=>$sealId,
-                    'member_id'=>$memberId,
-                    'end_at'=>date('Y-m-d H:i;s',strtotime("+365 day",time())),
-                    'status'=>0,
-                    'url'=>$data['data']['authorizationSignShortUrl'],
-                    'auth_biz_id'=>$data['data']['sealAuthBizId'],
-                ]);
-            }
-            EsignLogHelper::printMsg("跨企业授权接口调用成功");
-            EsignLogHelper::printMsg($response->getBody());
-        }else{
-            EsignLogHelper::printMsg($response->getBody());
-        }
-    }
-
-
     /**
      * 添加企业机构成员
      * @param $orgId

+ 119 - 0
app/Servers/ESign/ESignServer.php

@@ -6,6 +6,7 @@ namespace App\Servers\ESign;
 
 
 use App\Models\Member;
+use App\Models\MemberSeal;
 use App\Servers\ESign\comm\EsignHttpHelper;
 use App\Servers\ESign\comm\EsignLogHelper;
 use App\Servers\ESign\emun\HttpEmun;
@@ -180,7 +181,125 @@ class ESignServer
     }
 
 
+    /**
+     * 获取用户签章列表
+     * @param $mId
+     * @param $psnId
+     * @param $pageNum
+     * @return array|string[]
+     */
+    function internalAuthInfo($mId,$psnId,$pageNum=1){
 
+        $config=$this->config;
+        $apiaddr="/v3/seals/psn-seal-list?psnId=".$psnId."&pageNum={$pageNum}&pageSize=20";
+        $requestType = HttpEmun::GET;
+        //生成签名验签+json体的header
+        $signAndBuildSignAndJsonHeader = EsignHttpHelper::signAndBuildSignAndJsonHeader($config['eSignAppId'], $config['eSignAppSecret'], "", $requestType, $apiaddr);
+        //发起接口请求
+        $response = EsignHttpHelper::doCommHttp($config['eSignHost'], $apiaddr, $requestType, $signAndBuildSignAndJsonHeader, "");
+        $ret=json_decode($response->getBody(),true);
+        if(isset($ret['code']) && $ret['code']==0){
+            //存入签章信息
+            $this->setMemberSealList($mId,$ret['data']['seals'],1);
+            return ['code'=>'1','msg'=>'ok','data'=>['total'=>$ret['data']['total'],'items'=>$ret['data']['seals']]];
+        }else{
+            return ['code'=>'0','msg'=>$ret['message']];
+        }
+    }
 
 
+    /**
+     * 设置企业签章信息
+     * @param $mId
+     * @param $list
+     * @param $useType
+     * @return void
+     */
+    public function setMemberSealList($mId,$list)
+    {
+        if($list){
+            foreach ($list as $item){
+                $sealRow=[
+                    'm_id'=>$mId,
+                    'seal_id'=>$item['sealId'],
+                    'seal_name'=>$item['sealName'],
+                    'seal_status'=>$item['sealStatus'],
+                    'seal_url'=>$item['sealImageDownloadUrl'],
+                ];
+                $sealModel=MemberSeal::where('m_id',$mId)->where('seal_id',$item['sealId'])->first();
+                if(empty($sealModel)){
+                    $sealModel=MemberSeal::create($sealRow);
+                }else{
+                    $sealModel->update($sealRow);
+                }
+                $this->setSealImg($sealModel);
+            }
+        }
+    }
+
+
+    /**
+     * 保持印章图片
+     * @param MemberSeal $memberSeal
+     * @return void
+     */
+    function setSealImg(MemberSeal  $memberSeal)
+    {
+        $path=public_path('storage/memberSeal/'.date('Ymd').'/');
+        if(!is_dir($path)){
+            mkdir($path,0777,true);
+        }
+        $name=$memberSeal['seal_id'].'.png';
+        file_put_contents($path.$name,file_get_contents($memberSeal['seal_url']));
+        $url=env('APP_URL').'/storage/memberSeal/'.date('Ymd').'/'.$name;
+        $memberSeal->update(['seal_url'=>$url]);
+    }
+
+
+
+    /**
+     * 创建企业合同印章
+     * @param $mId
+     * @param $psnId
+     * @return string[]|void
+     */
+    function createOrgsealsbyTemplate($mId,$psnId){
+        $sealNum=MemberSeal::where('m_id',$mId)->count();
+        if($sealNum>0){
+            return ['code'=>'0','msg'=>'印章已创建'];
+        }
+
+        $config=$this->config;
+        $apiaddr="/v3/seals/psn-seals/create-by-template";
+        $requestType = HttpEmun::POST;
+//生成签名验签+json体的header
+        $data=[
+            "psnId"=>$psnId,
+            "sealName"=>"合同印章",//机构印章名称(用户自定义,且名称不可重复)
+            "sealTemplateStyle"=>"RECTANGLE_NO_BORDER",//机构模板印章样式
+            "sealSize"=>"20_10",
+            "sealColor"=>"RED",//机构印章颜色,默认是红色
+            "sealOpacity" =>80
+        ];
+        $paramStr = json_encode($data);
+        //请求参数
+        // EsignLogHelper::printMsg($paramStr);
+        $signAndBuildSignAndJsonHeader = EsignHttpHelper::signAndBuildSignAndJsonHeader($config['eSignAppId'], $config['eSignAppSecret'], $paramStr, $requestType, $apiaddr);
+        //发起接口请求头
+//        EsignLogHelper::printMsg($signAndBuildSignAndJsonHeader);
+        $response = EsignHttpHelper::doCommHttp($config['eSignHost'], $apiaddr, $requestType, $signAndBuildSignAndJsonHeader, $paramStr);
+        $ret=json_decode($response->getBody(),true);
+        if(isset($ret['code']) && $ret['code']==0){
+            //realnameStatus 0 - 未实名,1 - 已实名
+            MemberSeal::create([
+                'm_id' => $mId,
+                'seal_id' => $ret['data']['sealId'],
+            ]);
+            //获取完成印章以后重新拉取一下印章信息
+            $this->internalAuthInfo($mId,$psnId);
+            return ['code'=>'1','msg'=>'ok'];
+        }else{
+            return ['code'=>'0','msg'=>$ret['message']];
+        }
+    }
 }

+ 63 - 0
app/Servers/System/JobServer.php

@@ -0,0 +1,63 @@
+<?php
+
+
+namespace App\Servers\System;
+
+
+
+
+use App\Jobs\CreateFirmSealJob;
+use App\Jobs\CreateMemberSealJob;
+use App\Models\Firm;
+
+/**
+ * Redis数据缓存类
+ */
+class JobServer
+{
+
+
+    static private $server = '';
+
+
+    private function __construct()
+    {
+
+    }
+
+    /**
+     * 创建对象
+     * @return JobServer
+     */
+    static function creatServer()
+    {
+        if (empty(self::$server)) {
+            self::$server = new  JobServer();
+        }
+        return self::$server;
+    }
+
+    /**
+     * 创建个人印章
+     * @param $psnId
+     * @return void
+     */
+    function createMemberSealJob($psnId)
+    {
+        CreateMemberSealJob::dispatch($psnId)->onConnection('redis')->onQueue('memberSeal')->delay(30);
+    }
+
+
+    /**
+     * 创建企业印章
+     * @param $orgId
+     * @return void
+     */
+    function createFirmSealJob($orgId)
+    {
+        CreateFirmSealJob::dispatch($orgId)->onConnection('redis')->onQueue('firmSeal')->delay(30);
+    }
+
+
+
+}