cqp před 1 týdnem
rodič
revize
cdce46002a

+ 133 - 0
app/Console/Commands/U8Settle.php

@@ -0,0 +1,133 @@
+<?php
+
+namespace App\Console\Commands;
+
+use App\Model\Record;
+use App\Service\U8DatabaseServerService;
+use Illuminate\Console\Command;
+use Illuminate\Support\Facades\Log;
+
+class U8Settle extends Command
+{
+    /**
+     * The name and signature of the console command.
+     *
+     * @var string
+     */
+    protected $signature = 'command:u8_settle';
+
+    /**
+     * The console command description.
+     *
+     * @var string
+     */
+    protected $description = 'Command description';
+
+    /**
+     * Create a new command instance.
+     *
+     * @return void
+     */
+    public function __construct()
+    {
+        parent::__construct();
+    }
+
+    /**
+     * Execute the console command.
+     *
+     * @return mixed
+     */
+    public function handle()
+    {
+        echo '任务--------start---------------';
+        $this->syncApprovedRecords();
+        echo '任务结束--------end---------------';
+    }
+
+    public function syncApprovedRecords()
+    {
+        try {
+            $databases = [
+                "UFDATA_200_2021",
+                "UFDATA_002_2021",
+            ];
+
+            //初始化连接池
+            $connections = [];
+            $error = true;
+            foreach ($databases as $db) {
+                if(! $error) continue;
+                $service = new U8DatabaseServerService(['zt_database' => $db]);
+                if ($service->error) {
+                    Log::channel('apiLog')->info('SQLServer连接失败', [
+                        "database" => $db,
+                        "error"    => $service->error,
+                    ]);
+                    $error = false;
+                    $connections[$db] = null; // 标记连接失败
+                } else {
+                    $connections[$db] = $service;
+                }
+            }
+            if(! $error ) return;
+
+            $time = date("Y-m-d H:i:s");
+            $time1 = date("Y-m-d 00:00:00");
+            // 分批同步数据
+            Record::where("del_time", 2)
+                ->select("id","type","database","order_number")
+                ->orderBy("id","desc")
+                ->chunkById(10, function ($data) use($connections,$time,$time1){
+                    $data = Collect($data)->map(function ($object) {
+                        return (array)$object;
+                    })->toArray();
+
+                    $id = [];
+                    foreach ($data as $record) {
+                        $database = $record['database'];
+                        $service  = $connections[$database] ?? null;
+                        if (! $service) continue;
+                        $type = $record['type'];
+                        $order_number = $record['order_number'];
+
+                        if($type == 1){
+                            $service->db->table("PO_Pomain")
+                                ->where("cPOID", $order_number)
+                                ->update([
+                                    "cVerifier" => "system",
+                                    "iverifystateex"   => 1,
+                                    "cState" => 1,
+                                    "cAuditTime" => $time . ".000",
+                                    "cAuditDate" => $time1 . ".000",
+                                ]);
+                        }elseif($type == 2){
+                            $service->db->table("PU_AppVouch")
+                                ->where("cCode", $order_number)
+                                ->update([
+                                    "cVerifier" => "system",
+                                    "cAuditTime" => $time . ".000",
+                                    "cAuditDate" => $time1 . ".000",
+                                ]);
+                        }else{
+                            $service->db->table("AP_ApplyPayVouch")
+                                ->where("cVouchID", $order_number)
+                                ->update([
+                                    "cCheckMan" => "system",
+                                    "dverifysystime" => $time . ".000",
+                                    "dverifydate" => $time1 . ".000",
+                                ]);
+                        }
+
+                        $id[] = $record['id'];
+                    }
+
+                    // 更新本地数据
+                    if(! empty($id)) Record::whereIn("id", $id)->update(['del_time' => 3]);
+                });
+
+        } catch (\Throwable $e) {
+            Log::channel('apiLog')->info('U8数据更新异常', ['msg' => $e->getMessage()]);
+        }
+    }
+}

+ 60 - 12
app/Http/Controllers/Api/DingTalkController.php

@@ -2,9 +2,11 @@
 
 namespace App\Http\Controllers\Api;
 
+use App\Model\Record;
 use App\Service\DingCallbackCrypto;
 use App\Service\DingTalkCrypto;
 use App\Service\DrbService;
+use App\Service\U8ServerService;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Http;
 use Illuminate\Support\Facades\Log;
@@ -88,16 +90,14 @@ class DingTalkController extends BaseController
                     case 'bpms_instance_change':
                         $processInstanceId = $event['processInstanceId'] ?? null;
                         $result = $event['result'] ?? null;
-//                        Log::info('审批实例变更', compact('processInstanceId','result'));
+                        $type   = $event['type'] ?? null;   // start/finish/terminate/delete
 
-                        // 捕捉最后一个节点审核通过
-                        if ($result === 'agree') {
-                            // TODO: 执行你的业务逻辑,比如更新数据库、触发后续操作
-                            Log::info("最后一个节点审核通过,审批完成", compact('processInstanceId'));
-                        }elseif ($result === 'oppose' || $result === 'terminate' || $result == "refuse") {
-                            Log::info("审批流程被驳回或终止", compact('processInstanceId','result'));
-                        }
+                        // 动作导致流程成功 或 流程终止
+                        $this->settleData($type, $result, $processInstanceId);
+//                        Log::info('审批实例变更', compact('processInstanceId','result'));
 
+//                        Log::info("最后一个节点审核通过,审批完成", compact('processInstanceId'));
+//                        Log::info("审批流程被驳回或终止", compact('processInstanceId','result'));
                         break;
                     case 'bpms_task_change':
                         $processInstanceId = $event['processInstanceId'] ?? null;
@@ -105,12 +105,9 @@ class DingTalkController extends BaseController
                         $result = $event['result'] ?? null;
                         $approverUserId = $event['staffId'] ?? null;
 
-//                        Log::info('审批任务变更', compact('processInstanceId','taskId','result'));
-
                         // 捕获节点被驳回
                         if ($result === 'refuse') {
 //                            Log::info("节点被驳回", compact('processInstanceId','taskId','approverUserId'));
-                            // TODO: 执行你的业务逻辑,比如通知申请人、更新状态
                         }
                         break;
                 }
@@ -121,8 +118,59 @@ class DingTalkController extends BaseController
             return response($res, 200)->header('Content-Type', 'application/json');
 
         } catch (\Exception $e) {
-            Log::error('钉钉回调解密异常', ['msg' => $e->getMessage()]);
+            Log::channel('apiLog')->info('钉钉回调解密异常', ['msg' => $e->getMessage()]);
             return response()->json(['errcode'=>1, 'errmsg'=>'解密失败']);
         }
     }
+
+    private function settleData($type, $result, $processInstanceId){
+        try {
+            $record = Record::where("del_time",0)
+                ->where('process_instance_id', $processInstanceId)
+                ->first();
+            if(empty($record)) return;
+
+            switch ($type) {
+//                case 'start': // 审批实例开始
+//                    $record->del_time = 9; // 自定义标记,待审批
+//                    break;
+
+                case 'finish': // 审批正常结束(同意 / 拒绝)
+                    if ($result === 'agree') {
+                        $record->del_time = 2; // 成功
+                    } elseif ($result === 'refuse') {
+                        $record->del_time = 1; // 驳回
+                    }
+                    break;
+
+                case 'terminate': // 审批终止(发起人撤销)
+                    $record->del_time = 1; // 终止
+                    break;
+
+                case 'delete': // 审批实例删除
+                    $record->del_time = 1; // 删除
+                    break;
+            }
+
+            $record->save();
+        } catch (\Throwable $exception) {
+            Log::channel('apiLog')->info('钉钉回调处理数据保存异常', ['msg' => $exception->getMessage()]);
+        }
+
+        try {
+            $record = Record::where("del_time",0)
+                ->where('process_instance_id', $processInstanceId)
+                ->first();
+            if(empty($record)) return;
+
+            if ($result === 'agree') {
+                $record->del_time = 2; //成功
+            }elseif ($result == "refuse") {
+                $record->del_time = 1; //驳回
+            }
+            $record->save();
+        }catch (\Throwable $exception){
+            Log::channel('apiLog')->info('钉钉回调处理数据保存异常', ['msg' => $exception->getMessage()]);
+        }
+    }
 }

+ 0 - 1
app/Service/U8DatabaseServerService.php

@@ -4,7 +4,6 @@ namespace App\Service;
 
 use Illuminate\Support\Facades\Config;
 use Illuminate\Support\Facades\DB;
-use Illuminate\Support\Facades\Log;
 
 class U8DatabaseServerService extends Service
 {

+ 2 - 1
app/Service/U8ServerService.php

@@ -8,11 +8,13 @@ use App\Model\Employee;
 use App\Model\EmployeeDepartPermission;
 use App\Model\EmployeeIndex;
 use App\Model\Product;
+use App\Model\Record;
 use App\Model\RevenueCost;
 use App\Model\RevenueCostTotal;
 use App\Model\SalaryEmployee;
 use Illuminate\Database\Schema\Blueprint;
 use Illuminate\Support\Facades\DB;
+use Illuminate\Support\Facades\Log;
 use Illuminate\Support\Facades\Schema;
 
 class U8ServerService extends Service
@@ -44,7 +46,6 @@ class U8ServerService extends Service
         return $this->error;
     }
 
-
     public function purchaseRequisition($data, $user){
         $model = $this->databaseService->table('PU_AppVouch as a')
             ->leftJoin('Person as c', 'c.cPersonCode', 'a.cPersonCode')