From 346d67c084c1dc6063d7680869c2f78b291213d4 Mon Sep 17 00:00:00 2001
From: "WIN-C27C5MSVTPO\\16961" <1696136552@qq.com>
Date: Wed, 29 Oct 2025 18:05:23 +0800
Subject: [PATCH 1/2] =?UTF-8?q?=E8=B6=85=E8=BF=8724=E5=B0=8F=E6=97=B6?=
=?UTF-8?q?=E9=82=AE=E4=BB=B6=E9=80=9A=E7=9F=A5=E6=8F=90=E4=BA=A4=E5=85=A5?=
=?UTF-8?q?=E8=B4=A6=E8=B5=84=E6=96=99?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/common/model/FinPaymentApply.php | 2 +-
app/common/service/FinReceiptService.php | 2 +-
.../scaffold/templates/paymentFiles.stub | 103 ++++++++++++++++++
app/functions.php | 3 +-
app/process/Task.php | 44 +++++++-
5 files changed, 149 insertions(+), 5 deletions(-)
create mode 100644 app/common/utils/scaffold/templates/paymentFiles.stub
diff --git a/app/common/model/FinPaymentApply.php b/app/common/model/FinPaymentApply.php
index 82f81cb..0f4d157 100644
--- a/app/common/model/FinPaymentApply.php
+++ b/app/common/model/FinPaymentApply.php
@@ -40,7 +40,7 @@ class FinPaymentApply extends Model
/**
* 允许自动填充模型字段
*/
- protected $fillable = ['id', 'apply_no', 'doc_user_id', 'sales_user_id', 'corp_id', 'account_id', 'payment_account', 'payment_entity', 'entity_type', 'currency_id', 'amount', 'swift', 'remit_bank', 'country_id', 'remitter', 'exchange_rate', 'total_amount_cny', 'voucher_file', 'voucher_name', 'submit_files','receipt_id','claimed_at', 'created_at', 'updated_at'];
+ protected $fillable = ['id', 'apply_no', 'doc_user_id', 'sales_user_id', 'corp_id', 'account_id', 'payment_account', 'payment_entity', 'entity_type', 'currency_id', 'amount', 'swift', 'remit_bank', 'country_id', 'remitter', 'exchange_rate', 'total_amount_cny', 'voucher_file', 'voucher_name', 'submit_files','receipt_id','claimed_at','warn', 'created_at', 'updated_at', 'claimed_by',];
/**
* 不允许自动填充模型字段
diff --git a/app/common/service/FinReceiptService.php b/app/common/service/FinReceiptService.php
index 48f9832..91db094 100644
--- a/app/common/service/FinReceiptService.php
+++ b/app/common/service/FinReceiptService.php
@@ -291,7 +291,7 @@ class FinReceiptService
$id = $request->input('id');
$data = $this->preProcess(ucfirst($scene), $data, $request);
$config = $this->buildQueryConfig($request, $scene);
- FinPaymentApply::where('id', $payment_apply_id)->update(['receipt_id' => $id, 'claimed_at' => time()]);
+ FinPaymentApply::where('id', $payment_apply_id)->update(['receipt_id' => $id, 'claimed_at' => time(), 'claimed_by' => $request->user->uid]);
//折让金额
$payment = FinPaymentApply::where('id', $payment_apply_id)->first();
diff --git a/app/common/utils/scaffold/templates/paymentFiles.stub b/app/common/utils/scaffold/templates/paymentFiles.stub
new file mode 100644
index 0000000..6c9cded
--- /dev/null
+++ b/app/common/utils/scaffold/templates/paymentFiles.stub
@@ -0,0 +1,103 @@
+
+
+
+
+
+ 邮箱提醒
+
+
+
+
+
+
+
+
+
+
+ |
+ 您好,
+ 您有新的付款单待处理。请及时查看:
+
+
+ - 付款单编号:{{code}}
+ - 付款主体:{{payment_entity}}
+ - 问题描述:{{content}}
+ {{reply}}
+
+
+ 请点击下方按钮立即查看详情:
+
+
+
+
+ |
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/functions.php b/app/functions.php
index 7ae0d0a..075dfbf 100644
--- a/app/functions.php
+++ b/app/functions.php
@@ -179,7 +179,8 @@ if (!function_exists('tplUrl')) {
{
$urlArray = [
'email' => 'common/utils/scaffold/templates/Email.stub',
- 'work_order' => 'common/utils/scaffold/templates/workOrder.stub'
+ 'work_order' => 'common/utils/scaffold/templates/workOrder.stub',
+ 'payment_files' => 'common/utils/scaffold/templates/paymentFiles.stub',
];
return $urlArray[$tplKey];
}
diff --git a/app/process/Task.php b/app/process/Task.php
index 910b5ad..47dbb93 100644
--- a/app/process/Task.php
+++ b/app/process/Task.php
@@ -2,6 +2,8 @@
namespace app\process;
+use app\common\model\FinPaymentApply;
+use app\common\model\User;
use app\crm\model\Customer;
use support\Log;
use Workerman\Crontab\Crontab;
@@ -11,7 +13,7 @@ class Task
public function onWorkerStart()
{
- // 每半小时执行一次
+ // 每半小时执行一次,通知待跟进客户
new Crontab('0 */30 * * * *', function(){
echo date('Y-m-d H:i:s') . "\n";
Log::info('send follow start',[time()]);
@@ -34,7 +36,45 @@ class Task
$item->save();
}
- Log::info('send follow start',[time()]);
+ Log::info('send follow end',[time()]);
+ });
+
+ // 检查入账资料是否提交
+ new Crontab('* */70 * * * *', function () {
+ $G = date('G');
+ if ($G > 22 || $G < 8) {
+ return;
+ }
+ Log::info('fin_payment_apply submit_files start', [time()]);
+ $orWhere = [
+ ['submit_files', '=', '[]'],
+ ['submit_files', '=', ''],
+ ];
+ $where = [
+ ['warn', '<', 2],
+ ['created_at', '>', time() - 60 * 60 * 48],
+ ['created_at', '<', time() - 60 * 60 * 24],
+ ];
+ $payment = FinPaymentApply::where($where)->orWhere($orWhere)->orderBy('id', 'desc')->get();
+ foreach ($payment as $item) {
+ Log::info('fin_payment_apply submit_files ', [$item->toArray()]);
+ $notice = [
+ 'code' => $item->apply_no,
+ 'payment_entity' => $item->payment_entity ?? $item->remitter,
+ 'content' => '认领收款单后请在24小时内提交入账资料',
+ 'reply' => '',
+ ];
+ $email = [];
+ $email[] = User::where('id', $item->claimed_by)->value('email');
+ $email[] = User::where('id', $item->doc_user_id)->value('email');
+ $email = array_unique($email);
+ \app\common\utils\email\MailSend::send($email, '【XYH】付款记录', replaceTpl($notice, 'payment_files'));
+
+ $item->warn = ++$item->warn;
+ $item->save();
+ }
+
+ Log::info('fin_payment_apply submit_files end', [time()]);
});
}
From f3b1c9bae43074430c2a97972261f63ace668280 Mon Sep 17 00:00:00 2001
From: "WIN-C27C5MSVTPO\\16961" <1696136552@qq.com>
Date: Wed, 29 Oct 2025 18:38:37 +0800
Subject: [PATCH 2/2] =?UTF-8?q?=E4=BB=98=E6=AC=BE=E8=AE=B0=E5=BD=95?=
=?UTF-8?q?=E6=8E=92=E5=BA=8F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/common/service/FinPaymentApplyService.php | 27 +++++++++++--------
1 file changed, 16 insertions(+), 11 deletions(-)
diff --git a/app/common/service/FinPaymentApplyService.php b/app/common/service/FinPaymentApplyService.php
index f451ce4..19a2f3f 100644
--- a/app/common/service/FinPaymentApplyService.php
+++ b/app/common/service/FinPaymentApplyService.php
@@ -174,11 +174,11 @@ class FinPaymentApplyService
// 构建查询
$query = $this->modelClass::where($where);
- // 应用是否有关联收款记录的筛选
+ // 是否已关联收款记录的筛选
$correlation = $param['correlation']??'';
- if ($correlation === 'receipt') {
+ if ($correlation === 'receipt') { //已关联
$query->whereHas('receipt');
- } elseif ($correlation === 'unbind') {
+ } elseif ($correlation === 'unbind') { //未关联
$query->whereDoesntHave('receipt');
}
@@ -186,7 +186,7 @@ class FinPaymentApplyService
return $query->paginate($limit, ['*'], 'page', $page);
}
- // 计算七天前的时间戳
+ // 计算十天前的时间戳
$sevenDaysAgo = time() - (10 * 24 * 60 * 60);
// 构建相似度排序逻辑
@@ -197,8 +197,18 @@ class FinPaymentApplyService
$similarityOrder[] = "CASE WHEN account_id = {$param['account_id']} THEN 0 ELSE 1 END";
}
- if (isset($param['country_id']) && !empty($param['country_id'])) {
- $similarityOrder[] = "CASE WHEN country_id = {$param['country_id']} THEN 0 ELSE 1 END";
+ if (isset($param['currency_id']) && !empty($param['currency_id'])) {
+ $similarityOrder[] = "CASE WHEN currency_id = {$param['currency_id']} THEN 0 ELSE 1 END";
+ }
+
+ if (isset($param['remitter']) && !empty($param['remitter'])) {
+ $similarityOrder[] = "CASE WHEN remitter = {$param['remitter']} THEN 0 ELSE 1 END";
+ }
+
+ if (isset($param['amount']) && !empty($param['amount'])) {
+ $amount = (float)$param['amount'];
+ $similarityOrder[] = "ABS(amount - {$amount}) ASC";
+ $similarityOrder[] = "CASE WHEN (ABS(amount - {$amount}) / {$amount} * 100) <= 5 THEN 0 ELSE 1 END";
}
if (isset($param['keyword']) && $param['keyword']) {
@@ -206,11 +216,6 @@ class FinPaymentApplyService
$similarityOrder[] = "CASE WHEN remitter LIKE '%{$keyword}%' THEN 0 ELSE 1 END";
}
- if (isset($param['amount']) && !empty($param['amount'])) {
- $amount = (float)$param['amount'];
- $similarityOrder[] = "ABS(amount - {$amount})";
- }
-
// 构建排序SQL
$orderByClause = "";
if (!empty($similarityOrder)) {