liugc 1 год назад
Родитель
Сommit
6bf7c271f8

+ 12 - 0
app/adminapi/controller/master_worker/EngineerBillController.php

@@ -19,6 +19,8 @@ namespace app\adminapi\controller\master_worker;
 use app\adminapi\controller\BaseAdminController;
 use app\adminapi\lists\master_worker\EngineerBillLists;
 use app\adminapi\logic\export\ExportLogic;
+use app\adminapi\logic\financial\MasterSettlementDetailsLogic;
+use app\adminapi\logic\master_worker\EngineerBillLogic;
 use app\adminapi\logic\master_worker\EngineerSettlementLogic;
 use app\common\service\ExcelExportService;
 use excel\ExcelWriter;
@@ -91,5 +93,15 @@ class EngineerBillController extends BaseAdminController
         (new ExcelExportService)->download($result);
         return $this->success('添加成功-'.$result, [], 1, 1);
     }
+    public function submitForm()
+    {
+        $params = $this->request->post();
+        $params['adminId'] = $this->adminId;
+        $result = EngineerBillLogic::submitForm($params);
+        if ($result === false){
+            return $this->fail(EngineerBillLogic::getError());
+        }
+        return $this->success('打款成功', [], 1, 1);
+    }
 
 }

+ 2 - 2
app/adminapi/lists/financial/FinancialPaymentRecordsLists.php

@@ -63,8 +63,8 @@ class FinancialPaymentRecordsLists extends BaseAdminDataLists implements ListsSe
             ->select()
             ->toArray();
         foreach ($lists as &$item) {
-            $item['file_url'] = ExportLogic::detail(['id'=>$item['export_conditions']['infoExport_id']])['file_url'];
-            $item['settlement_type'] = $item['export_conditions']['settlement_type'];
+            $item['file_url'] = isset($item['export_conditions']['infoExport_id'])?ExportLogic::detail(['id'=>$item['export_conditions']['infoExport_id']])['file_url']:'';
+            $item['settlement_type'] = $item['export_conditions']['settlement_type']??0;
             $item['deadline_time'] = date('Y-m-d', $item['export_conditions']['deadline_time']-1);
         }
         return $lists;

+ 121 - 0
app/adminapi/logic/master_worker/EngineerBillLogic.php

@@ -0,0 +1,121 @@
+<?php
+// +----------------------------------------------------------------------
+// | likeadmin快速开发前后端分离管理后台(PHP版)
+// +----------------------------------------------------------------------
+// | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
+// | 开源版本可自由商用,可去除界面版权logo
+// | gitee下载:https://gitee.com/likeshop_gitee/likeadmin
+// | github下载:https://github.com/likeshop-github/likeadmin
+// | 访问官网:https://www.likeadmin.cn
+// | likeadmin团队 版权所有 拥有最终解释权
+// +----------------------------------------------------------------------
+// | author: likeadminTeam
+// +----------------------------------------------------------------------
+
+namespace app\adminapi\logic\master_worker;
+
+
+use app\common\enum\worker\WorkerAccountLogEnum;
+use app\common\logic\WorkerAccountLogLogic;
+use app\common\model\finance\MasterWorkerCaseOutLog;
+use app\common\model\financial\FinancialPaymentRecords;
+use app\common\model\financial\MasterSettlementDetails;
+use app\common\model\master_worker\EngineerSettlement;
+use app\common\logic\BaseLogic;
+use app\common\model\master_worker\MasterWorker;
+use think\facade\Db;
+
+
+/**
+ * EngineerSettlement逻辑
+ * Class EngineerSettlementLogic
+ * @package app\adminapi\logic
+ */
+class EngineerBillLogic extends BaseLogic
+{
+
+    public static function submitForm($params)
+    {
+        Db::startTrans();
+        try {
+            if(!empty($params['left_amount']) && !empty($params['user_money']) && !((float)$params['left_amount'] > (float)$params['user_money'])){
+                $batch_number = 'bn' . date('YmdHis') . rand(1000, 9999);
+                $params['deadline_time'] = $deadline_time = strtotime($params['deadline_time'])+86400;
+
+                FinancialPaymentRecords::create([
+                    'export_conditions' => $params,
+                    'batch_number' => $batch_number,
+                    'upload_status' => 1,
+                    'payment_status' => 1,
+                ]);
+                MasterSettlementDetails::where('master_worker_id',$params['id'])
+                                        ->where('change_time', '<', $deadline_time)
+                                        ->where('status', '=', 1)
+                                        ->update([
+                                            'status' => 2,
+                                            'batch_number' => $batch_number,
+                                        ]);
+
+                $insertXlsData = [];
+                $insertXlsData[0] = [
+                    'master_worker_id' => $params['id'],
+                    'worker_number' => $params['worker_number'],
+                    'engineer_name' => $params['account_holder'],
+
+                    'bank_account' => $params['bank_account'],
+                    'bank_name' => $params['bank_name'],
+                    'opening_branch' => $params['opening_branch'],
+
+                    'original_balance' => $params['user_money'],
+                    'total_settlement_amount' => $params['left_amount'],
+                    'payment_status' => 0,
+                    'is_export' => 1,
+
+                    'batch_number'=> $batch_number,
+                    'create_time'=> time(),
+                    'update_time'=> time(),
+                    'admin_id'=> 0,
+                    'is_deduction'=> 0,
+                ];
+                // 生成 可发 数据表格
+                Db::name('engineer_settlement')->insertAll($insertXlsData);
+
+                $analogData = [];
+                $analogData[0] = [
+                    'master_worker_id' => $params['id'],
+                    'worker_number' => $params['worker_number'],
+                    'engineer_name' => $params['account_holder'],
+                    'bank_account' => $params['bank_account'],
+                    'bank_name' => $params['bank_name'],
+                    'opening_branch' => $params['opening_branch'],
+                    'original_balance' => $params['user_money'],
+                    'total_settlement_amount' => $params['left_amount'],
+                    'batch_number'=> $batch_number,
+                    'deduction_amount' => $params['deduction_amount'],
+                    'deduction_describe' => $params['deduction_describe'],
+                    'final_settlement_amount' => $params['final_settlement_amount'],
+                    'settlement_time' => $params['settlement_time'],
+                    'settlement_details_remarks' => $params['settlement_details_remarks'],
+                ];
+                $resData = EngineerSettlementLogic::engineerSettlementValidate($analogData);
+                if(is_array($resData)){
+                    $result = EngineerSettlementLogic::add($resData,$params['adminId']);
+                    if ($result === false){
+                        throw new \Exception(EngineerSettlementLogic::getError());
+                    }
+                }
+            }else{
+                throw new \Exception('打款失败');
+            }
+
+            Db::commit();
+            return true;
+        } catch (\Exception $e) {
+            Db::rollback();
+            self::setError($e->getMessage());
+            return false;
+        }
+    }
+
+
+}

+ 9 - 4
app/adminapi/logic/master_worker/EngineerSettlementLogic.php

@@ -288,16 +288,21 @@ class EngineerSettlementLogic extends BaseLogic
                 }
                 if(!in_array($param['master_worker_id'], $engineer_worker_ids)) throw new \Exception('下载记录不存在:'.$param['master_worker_id']);
                 //判断日期时间格式是否正确 2024/1/1 00:00:00 或 2024-1-1 00:00:00
-                if(isset($param['settlement_time']) && !preg_match('/^[0-9]{4}\/[0-9]{1,2}\/[0-9]{1,2} [0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}$/', $param['settlement_time'])
-                    && !preg_match('/^[0-9]{4}-[0-9]{1,2}-[0-9]{1,2} [0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}$/', $param['settlement_time'])){
+                if(
+                    isset($param['settlement_time'])
+                    && !preg_match('/^[0-9]{4}\/[0-9]{1,2}\/[0-9]{1,2} [0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}$/', $param['settlement_time'])
+                    && !preg_match('/^[0-9]{4}-[0-9]{1,2}-[0-9]{1,2} [0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}$/', $param['settlement_time'])
+                    && !preg_match('/^[0-9]{4}\/[0-9]{1,2}\/[0-9]{1,2}$/', $param['settlement_time'])
+                    && !preg_match('/^[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}$/', $param['settlement_time'])
+                ){
                     throw new \Exception('日期时间格式错误:'.$param['master_worker_id']);
                 }
                 $param['settlement_time'] = isset($param['settlement_time'])?date('Y-m-d H:i:s', strtotime($param['settlement_time'])):date('Y-m-d H:i:s');
                 if(!is_numeric($param['original_balance']) || !is_numeric($param['total_settlement_amount']) || !is_numeric($param['deduction_amount']) || !is_numeric($param['final_settlement_amount'])){
                     throw new \Exception('金额格式错误:'.$param['master_worker_id']);
                 }
-                if(abs($param['total_settlement_amount']) != (abs($param['final_settlement_amount'])+abs($param['deduction_amount']))){
-                    throw new \Exception('金额计算错误:'.$param['master_worker_id']);
+                if (bccomp((float)$param['total_settlement_amount'], bcadd((float)$param['final_settlement_amount'], (float)$param['deduction_amount'], 2), 2) !== 0) {
+                    throw new \Exception('金额计算错误:' . $param['master_worker_id']);
                 }
                 if(!preg_match('/^[0-9]*$/', $param['worker_number'])){
                     throw new \Exception('工程师编号格式错误:'.$param['master_worker_id']);