-
+
@@ -320,4 +351,7 @@ onMounted(() => {
diff --git a/admin/src/components/additional/additional6.vue b/admin/src/components/additional/additional6.vue
index 9b604e1..3c202e7 100644
--- a/admin/src/components/additional/additional6.vue
+++ b/admin/src/components/additional/additional6.vue
@@ -396,7 +396,8 @@ const HospitalExtraUpdate = async (mark) => {
diff --git a/app/Http/Controllers/HospitalExtraController.php b/app/Http/Controllers/HospitalExtraController.php
index 55a11d2..0c2a26e 100644
--- a/app/Http/Controllers/HospitalExtraController.php
+++ b/app/Http/Controllers/HospitalExtraController.php
@@ -97,6 +97,7 @@ class HospitalExtraController extends Controller
]);
}
+
public function profitsharing_status(Request $request)
{
$hospital = $request->post('hospital');
diff --git a/app/Http/Controllers/ProfitsharingController.php b/app/Http/Controllers/ProfitsharingController.php
index f78f728..cde62b6 100644
--- a/app/Http/Controllers/ProfitsharingController.php
+++ b/app/Http/Controllers/ProfitsharingController.php
@@ -64,7 +64,6 @@ class ProfitsharingController extends Controller
$type = $request->post('type');
$account = $request->post('account');
$formula = $request->post('formula');
- $max = $request->post('max');
$desc = $request->post('desc');
$status = $request->post('status');
$p = new Profitsharing();
@@ -73,13 +72,34 @@ class ProfitsharingController extends Controller
$p->type = $type;
$p->account = $account;
$p->formula = $formula;
- $p->max = $max;
$p->desc = $desc;
$p->status = $status;
$p->save();
return Yo::create_echo($p->id);
}
+ public function eval_action($php, $in_value)
+ {
+ $out_value = 0;
+ if ($php) {
+ try {
+ eval($php);
+ } catch (Exception $e) {
+ $out_value = 0;
+ }
+ }
+ return $out_value;
+ }
+
+ public function test(Request $request)
+ {
+ $php = $request->post('php');
+ $in_value = $request->post('in_value');
+ return Yo::echo([
+ 'out_value' => self::eval_action($php, $in_value),
+ ]);
+ }
+
public function update(EditProfitsharingsInput $request)
{
Login::admin([], [17, 25]);
@@ -96,14 +116,12 @@ class ProfitsharingController extends Controller
$type = $request->post('type');
$account = $request->post('account');
$formula = $request->post('formula');
- $max = $request->post('max');
$desc = $request->post('desc');
$status = $request->post('status');
$p->name = $name;
$p->type = $type;
$p->account = $account;
$p->formula = $formula;
- $p->max = $max;
$p->desc = $desc;
$p->status = $status;
$p->save();
diff --git a/app/Http/Controllers/UserOrderController.php b/app/Http/Controllers/UserOrderController.php
index 2b94d63..39b8ea9 100644
--- a/app/Http/Controllers/UserOrderController.php
+++ b/app/Http/Controllers/UserOrderController.php
@@ -40,7 +40,8 @@ class UserOrderController extends Controller
$user_order->save();
$hospital_sharing_content = self::sharing_config($user_order->hospital, false);
- if ($hospital_sharing_content['open'] == 1) {
+ if ($hospital_sharing_content['open'] == 1
+ || $hospital_sharing_content['open'] == 3) {
$slc = ProfitsharingLog::where('order', $user_order->id)->first();
if (!$slc) {
$p = new ProfitsharingController();
@@ -48,44 +49,50 @@ class UserOrderController extends Controller
$receivers = [];
$sharing_map = [];
$price = $user_order->true_price;
+ $surplus = $price;
foreach ($sharing as $item) {
$formula = $item->formula;
- $item->formula = Str::replaceArray('$p', [$price], $item->formula);
- foreach ($sharing_map as $k => $i) {
- $item->formula = Str::replaceArray('$r' . ($k + 1), [$i['surplus']], $item->formula);
- }
- $amount = number_format($p->calculateExpression($item->formula), 2);
+ $amount = number_format($p->eval_action($formula, $price), 2);
$receivers[] = [
'type' => $item->type == 1 ? 'MERCHANT_ID' : 'PERSONAL_OPENID',
'account' => $item->account,
'amount' => $amount * 100,
'description' => $item->desc
];
+ $surplus = $surplus - $amount;
$sharing_map[] = [
- 'surplus' => $price - $amount,
+ 'amount' => $amount,
+ 'surplus' => $surplus,
'formula' => $formula,
];
}
if (count($receivers) != 0) {
- $sharing_data = [
- 'transaction_id' => $user_order->transaction,
- 'receivers' => $receivers
- ];
- $hospital_extra_content = self::pay_config($user_order->hospital);
- $wcp = new WeChatPayController();
- $builder_config = [
- 'appid' => env('WX_APP_ID'),
- 'pem_path' => base_path() . $hospital_extra_content['wxp']['key'],
- 'cer_path' => base_path() . $hospital_extra_content['wxp']['crt'],
- 'cer_num' => $hospital_extra_content['wxp']['number'],
- 'mchid' => $hospital_extra_content['wxp']['id'],
- 'v3' => $hospital_extra_content['wxp']['v3'],
- ];
- $wcp->builder($builder_config);
- $res = $wcp->profitsharing($sharing_data);
+ if ($hospital_sharing_content['open'] == 1) {
+ $sharing_data = [
+ 'transaction_id' => $user_order->transaction,
+ 'receivers' => $receivers
+ ];
+ $hospital_extra_content = self::pay_config($user_order->hospital);
+ $wcp = new WeChatPayController();
+ $builder_config = [
+ 'appid' => env('WX_APP_ID'),
+ 'pem_path' => base_path() . $hospital_extra_content['wxp']['key'],
+ 'cer_path' => base_path() . $hospital_extra_content['wxp']['crt'],
+ 'cer_num' => $hospital_extra_content['wxp']['number'],
+ 'mchid' => $hospital_extra_content['wxp']['id'],
+ 'v3' => $hospital_extra_content['wxp']['v3'],
+ ];
+ $wcp->builder($builder_config);
+ $res = $wcp->profitsharing($sharing_data);
+ } else {
+ $builder_config = [];
+ $res = [];
+ }
+
$sl = new ProfitsharingLog();
$sl->hospital = $user_order->hospital;
+ $sl->type = $hospital_sharing_content['open'];
$sl->order = $user_order->id;
$sl->builder = json_encode($builder_config, JSON_UNESCAPED_UNICODE);
$sl->receivers = json_encode($receivers, JSON_UNESCAPED_UNICODE);
diff --git a/routes/web.php b/routes/web.php
index 32e7a6f..5797bec 100644
--- a/routes/web.php
+++ b/routes/web.php
@@ -30,6 +30,7 @@ Route::post("api/$admin_api/UserOrder/list", [\App\Http\Controllers\UserOrderCon
Route::post("api/$admin_api/Hospital/edit", [\App\Http\Controllers\HospitalController::class, 'hospital_update']);
Route::post("api/$admin_api/Hospital/info", [\App\Http\Controllers\HospitalController::class, 'hospital_info']);
Route::post("api/$admin_api/HospitalExtra/profitsharing_status", [\App\Http\Controllers\HospitalExtraController::class, 'profitsharing_status']);
+Route::post("api/$admin_api/Profitsharing/test", [\App\Http\Controllers\ProfitsharingController::class, 'test']);
Route::post("api/$admin_api/Profitsharing/recover", [\App\Http\Controllers\ProfitsharingController::class, 'recover']);
Route::post("api/$admin_api/Profitsharing/create", [\App\Http\Controllers\ProfitsharingController::class, 'create']);