diff --git a/admin/src/api/index.js b/admin/src/api/index.js index 89f5d6f..c875ac3 100644 --- a/admin/src/api/index.js +++ b/admin/src/api/index.js @@ -8,7 +8,9 @@ const $token = useToken() const $config = useConfig() const admin_api = 'Admin' export const yo = async (data) => await $post({url: `${$config.value.api.url}/api/yo`, data}, true) - +export const ProfitsharingTestAction = async (data) => await $post({ + url: `${$config.value.api.url}/api/${admin_api}/Profitsharing/test`, data +}, true) export const UserOrderListAction = async (data) => await $post({ url: `${$config.value.api.url}/api/${admin_api}/UserOrder/list?page=${data.page}`, data }, true) diff --git a/admin/src/components/additional/additional11.vue b/admin/src/components/additional/additional11.vue index b2d5d9c..aae83f6 100644 --- a/admin/src/components/additional/additional11.vue +++ b/admin/src/components/additional/additional11.vue @@ -10,6 +10,7 @@ import { ProfitsharingDeleteAction, ProfitsharingListAction, HospitalProfitsharingStatusAction, + ProfitsharingTestAction, $response } from '~/api' import {h} from "vue"; @@ -22,10 +23,14 @@ const $props = defineProps({ } }) const profitsharing_status = ref(false) +const profitsharing_type = ref(0) const HospitalProfitsharingStatus = async () => { - const response = await HospitalProfitsharingStatusAction() + const response = await HospitalProfitsharingStatusAction({ + hospital: $props.hospital + }) $response(response, () => { - profitsharing_status.value = response.data.info.open === 1 + profitsharing_status.value = response.data.info.open === 1 || response.data.info.open === 3 + profitsharing_type.value = response.data.info.open }) } const profitsharing_list = ref([]) @@ -65,9 +70,6 @@ const profitsharing_columns = [{ }, { title: '计算公式', key: 'formula' -}, { - title: '最大分账', - key: 'max' }, { title: '描述', key: 'desc' @@ -95,11 +97,28 @@ const create_data_default = { name: '', account: '', formula: '', - max: 0, desc: '', status: 1, } const create_data = ref(JSON.parse(JSON.stringify(create_data_default))) +const test_data = ref({ + in_value: 0, + out_value: 0 +}) +const ProfitsharingTest = async () => { + let data = { + in_value: test_data.value.in_value + } + if (create_show.value) { + data.php = create_data.value.formula + } else { + data.php = update_data.value.formula + } + const response = await ProfitsharingTestAction(data) + $response(response, () => { + test_data.value.out_value = response.data.out_value + }) +} const ProfitsharingCreate = async () => { let data = { ...create_data.value, @@ -124,7 +143,6 @@ const update_data_default = { name: '', account: '', formula: '', - max: 0, desc: '', status: 1, } @@ -214,13 +232,19 @@ onMounted(() => {
分账公式
- + -
最大分账
+
分账测试
- + + 计算 +
@@ -272,13 +296,19 @@ onMounted(() => {
分账公式
- +
-
最大分账
+
分账测试
- + + 计算 +
@@ -303,8 +333,9 @@ onMounted(() => {
- +
@@ -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']);