Просмотр исходного кода

Merge remote-tracking branch 'origin/feature/1559-exchangeRate' into feature/theo-translate

# Conflicts:
#	backendApi/modules/v1/models/lists/shop/GoodsList.php
#	backendEle/src/views/shop/goods-add.vue
#	backendEle/src/views/shop/index.vue
#	backendEle/src/views/shop/package-add.vue
#	backendEle/src/views/shop/package.vue
#	common/models/Order.php
#	common/models/ShopGoods.php
theo 3 лет назад
Родитель
Сommit
192bea9a39

+ 1 - 0
backendApi/config/menu.php

@@ -478,6 +478,7 @@ return [
             ['name'=>'短信管理', 'class'=>'', 'icon'=>'', 'controller'=>'config', 'action'=>'sms', 'routePath'=>'config/sms', 'show'=>1,],
             ['name'=>'积分配置', 'class'=>'', 'icon'=>'', 'controller'=>'config', 'action'=>'score', 'routePath'=>'config/score', 'show'=>1,],
             ['name'=>'转账配置', 'class'=>'', 'icon'=>'', 'controller'=>'config', 'action'=>'transfer', 'routePath'=>'config/transfer', 'show'=>1,],
+            ['name'=>'汇率配置', 'class'=>'', 'icon'=>'', 'controller'=>'config', 'action'=>'exchange-rate', 'routePath'=>'config/exchange-rate', 'show'=>1],
             ['name'=>'其他配置', 'class'=>'', 'icon'=>'', 'controller'=>'config', 'action'=>'other', 'routePath'=>'config/other', 'show'=>1,],
             ['name'=>'会员级别配置', 'class'=>'', 'icon'=>'', 'controller'=>'config', 'action'=>'dec-level', 'routePath'=>'config/dec-level', 'show'=>1,],
             ['name'=>'添加会员级别', 'class'=>'', 'icon'=>'', 'controller'=>'config', 'action'=>'dec-level-add', 'routePath'=>'config/dec-level-add', 'show'=>0,],

+ 1 - 0
backendApi/config/urlManagerRules.php

@@ -293,6 +293,7 @@ return [
             'POST,GET sms' => 'sms',
             'POST,GET transfer' => 'transfer',
             'POST,GET score' => 'score',
+            'POST,GET exchange-rate' => 'exchange-rate',
         ],
     ],
     [

+ 20 - 0
backendApi/modules/v1/controllers/ConfigController.php

@@ -779,4 +779,24 @@ class ConfigController extends BaseController {
         return static::notice('更新服务协议成功');
     }
 
+    /**
+     * 汇率配置.
+     * @return mixed
+     * @throws \yii\db\Exception
+     * @throws \yii\web\HttpException
+     */
+    public function actionExchangeRate() {
+        $form = new ConfigForm();
+        if (Yii::$app->request->post() && $form->load(Yii::$app->request->post(), '')) {
+            if ($form->updateExchangeRate()) {
+                Config::updateToCache();
+                return static::notice('更新汇率配置成功');
+            } else {
+                return static::notice(Form::formatErrorsForApi($form->getErrors()), 422);
+            }
+        }
+
+        $oneData = Config::find()->where('CONFIG_NAME=:CONFIG_NAME', [':CONFIG_NAME' => 'exchangeRate'])->asArray()->one();
+        return static::notice($oneData);
+    }
 }

+ 11 - 1
backendApi/modules/v1/controllers/ShopController.php

@@ -263,7 +263,17 @@ class ShopController extends BaseController {
             });
         }
         $package = DeclarationPackage::findOneAsArray('ID=:ID', [':ID' => $id]);
-        return static::notice(['id' => $package['ID'], 'packageName' => $package['PACKAGE_NAME'],'packageNo' => $package['PACKAGE_NO'], 'amount' => $package['AMOUNT'], 'amountPv' => $package['PV'], 'levelId' => $package['LEVEL_ID'], 'packageContent' => $package['PACKAGE_CONTENT']]);
+        return static::notice(
+            [
+                'id' => $package['ID'],
+                'packageName' => $package['PACKAGE_NAME'],
+                'packageNo' => $package['PACKAGE_NO'],
+                'amount' => $package['AMOUNT'],
+                'amountPv' => $package['PV'],
+                'levelId' => $package['LEVEL_ID'],
+                'packageContent' => $package['PACKAGE_CONTENT'],
+                'amountStandard' => $package['AMOUNT_STANDARD'],
+            ]);
     }
 
     /**

+ 3 - 0
backendApi/modules/v1/controllers/SiteController.php

@@ -99,6 +99,8 @@ class SiteController extends BaseController
         // 期数
         $period = Period::instance();
         $periodNum = $period->getNowPeriodNum();
+        // 汇率
+        $exchangeRate = floatval(Cache::getSystemConfig()['exchangeRate']['VALUE'] ?? 0);
         return [
             'decLevels' => $decLevels,
             'empLevels' => $empLevels,
@@ -116,6 +118,7 @@ class SiteController extends BaseController
             'allOpenBank' => $allOpenBank,
             'allNation' => $allNation,
             'nowPeriodNum' => $periodNum,
+            'exchangeRate' => $exchangeRate,
         ];
     }
 

+ 14 - 0
backendApi/modules/v1/models/lists/shop/GoodsList.php

@@ -117,6 +117,20 @@ class GoodsList extends \common\libs\dataList\DataList implements DataListInterf
                         ];
                     },
                 ],
+                'SELL_PRICE_STANDARD' => [
+                    'header' => '标准价格($)',
+                    'headerOther' => [
+                        'width' => '150',
+                    ],
+                    'value' => function ($row) {
+                        return Tool::formatPrice($row['SELL_PRICE_STANDARD']);
+                    },
+                    'valueOther' => function ($row) {
+                        return [
+                            'tag' => ['type' => 'danger', 'size' => 'small', 'class' => 'no-border']
+                        ];
+                    },
+                ],
                 'PRICE_PV' => [
                     'header' => 'Products BV',//产品BV
                     'headerOther' => [

+ 14 - 0
backendApi/modules/v1/models/lists/shop/PackageList.php

@@ -54,6 +54,20 @@ class PackageList extends \common\libs\dataList\DataList implements DataListInte
                     'header' => 'Entry level',//所属报单级别
                     'headerOther' => ['width' => '200'],
                 ],
+                'AMOUNT_STANDARD' => [
+                    'header' => '标准价格',
+                    'headerOther' => [
+                        'width' => '150',
+                    ],
+                    'value' => function ($row) {
+                        return Tool::formatPrice($row['AMOUNT_STANDARD']);
+                    },
+                    'valueOther' => function ($row) {
+                        return [
+                            'tag' => ['type' => 'danger', 'size' => 'small', 'class' => 'no-border']
+                        ];
+                    },
+                ],
                 'AMOUNT' => [
                     'header' => 'Kit price',//套餐金额
                     'headerOther' => [

+ 12 - 0
backendEle/src/router/index.js

@@ -2001,6 +2001,18 @@ export const constantRouterMap = [
           ],
         },
       },
+      {
+        path: '/config/exchange-rate',
+        component: _import('config/exchange-rate'),
+        name: 'config_exchange_rate',
+        meta: {
+          title: '汇率配置',
+          breadcrumb: [
+            {title: '首页', path: '/dashboard/index'},
+            {title: '配置', path: '/config/index'},
+          ],
+        },
+      },
     ]
   }
   // {

+ 4 - 1
backendEle/src/utils/baseInfo.js

@@ -70,6 +70,9 @@ const baseInfo = {
   nowPeriodNum () {
     return this.get('nowPeriodNum')
   },
+  exchangeRate () {
+    return this.get('exchangeRate')
+  },
 }
 
-export default baseInfo
+export default baseInfo

+ 75 - 0
backendEle/src/views/config/exchange-rate.vue

@@ -0,0 +1,75 @@
+<template>
+    <div v-loading="loading">
+        <div class="white-box">
+            <el-form ref="form" :model="form" label-width="250px" class="form-page" style="margin-top: 25px;">
+                <el-form-item :label="form.TITLE" :key="form.CONFIG_NAME">
+                    <el-input v-model="form.VALUE" placeholder="请输入内容">
+                        <template slot="append">naira / $</template>
+                    </el-input>
+                </el-form-item>
+                <el-form-item>
+                    <span style="font-weight: bold; color: red; font-size: 12px;">提示:修改汇率会刷新商品的销售价格(naira),请谨慎操作!!</span>
+                </el-form-item>
+                <el-form-item>
+                    <el-button type="primary" size="small" @click="onSubmit" :loading="submitButtonStat">保存并刷新商品价格</el-button>
+                </el-form-item>
+            </el-form>
+        </div>
+    </div>
+</template>
+
+<script>
+import network from '@/utils/network'
+export default {
+    name: 'config_exchange_rate',
+    mounted() {
+        this.getData()
+    },
+    data() {
+        return {
+            form: {
+                CONFIG_NAME: '',
+                VALUE: 0,
+                TITLE: '',
+            },
+            loading: true,
+            submitButtonStat: false,
+        }
+    },
+    methods: {
+        onSubmit() {
+            let _this = this
+            _this.$confirm('修改汇率会刷新商品销售价格(naira), 是否继续?', '提示', {
+                confirmButtonText: '确定',
+                cancelButtonText: '取消',
+                type: 'warning'
+            }).then(() => {
+                _this.submitButtonStat = true
+                network.postData('config/exchange-rate', this.form).then(response => {
+                    _this.$message({
+                        message: response,
+                        type: 'success'
+                    })
+                    _this.submitButtonStat = false
+                    _this.getData()
+                }).catch(response => {
+                    _this.submitButtonStat = false
+                    _this.getData()
+                })
+            }).catch(() => {
+                _this.submitButtonStat = false
+            })
+        },
+        getData() {
+            network.getData('config/exchange-rate').then(response => {
+                this.form = response
+                this.loading = false
+            })
+        }
+    }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 16 - 3
backendEle/src/views/shop/goods-add.vue

@@ -32,10 +32,13 @@
                 <el-form-item label="Unit"><!-- 单位 -->
                     <el-input v-model="form.unit"></el-input>
                 </el-form-item>
-                <el-form-item label="Market price"><!-- 市场价格 -->
+                <el-form-item label="标准价格($)" p>
+                    <el-input v-model="form.sellPriceStandard"></el-input>
+                </el-form-item>
+                <el-form-item label="市场价格(n)">
                     <el-input v-model="form.marketPrice"></el-input>
                 </el-form-item>
-                <el-form-item label="Selling price"><!-- 销售价格 -->
+                <el-form-item label="销售价格(n)">
                     <el-input v-model="form.sellPrice"></el-input>
                 </el-form-item>
                 <el-form-item label="Price BV" v-show="pvDisabled"><!-- 价格BV -->
@@ -114,6 +117,7 @@
                     textarea:'',
                     sellDiscount:'',
                     categoryType: '',
+                    sellPriceStandard: '',
                 },
                 submitButtonStat: false,
                 goodsType:[],
@@ -123,6 +127,7 @@
                 width:'100px',
                 height:'100px',
                 pvDisabled: true,
+                exchangeRate: baseInfo.exchangeRate(),
             }
         },
         watch:{
@@ -135,7 +140,14 @@
                 handler(modern, origin) {
                     this.pvDisabled = (parseInt(modern) === 1)
                 }
-            }
+            },
+            // 监听商品标准价格,自动计算销售价格
+            'form.sellPriceStandard': {
+                deep: true,
+                handler(modern, origin) {
+                    this.form.sellPrice = modern * this.exchangeRate
+                }
+            },
         },
         methods: {
             handleRemove(file) {
@@ -215,6 +227,7 @@
                     unit: this.form.unit,
                     marketPrice: this.form.marketPrice,
                     sellPrice: this.form.sellPrice,
+                    sellPriceStandard: this.form.sellPriceStandard,
                     pricePv: this.form.pricePv,
                     // point: this.form.point,
                     storeNums: this.form.storeNums,

+ 16 - 3
backendEle/src/views/shop/index.vue

@@ -96,10 +96,13 @@
                     <el-form-item label="Unit"><!-- 单位 -->
                         <el-input v-model="form.unit"></el-input>
                     </el-form-item>
-                    <el-form-item label="Market price"><!-- 市场价格 -->
+                    <el-form-item label="标准价格($)" p>
+                        <el-input v-model="form.sellPriceStandard"></el-input>
+                    </el-form-item>
+                    <el-form-item label="市场价格(n)">
                         <el-input v-model="form.marketPrice"></el-input>
                     </el-form-item>
-                    <el-form-item label="Selling price" > <!-- 销售价格 -->
+                    <el-form-item label="销售价格(n)" p>
                         <el-input v-model="form.sellPrice"></el-input>
                     </el-form-item>
                     <el-form-item label="Price BV" v-show="pvDisabled"> <!-- 价格BV -->
@@ -196,6 +199,7 @@
                     unit:'',
                     marketPrice:'',
                     sellPrice:'',
+                    sellPriceStandard: '',
                     pricePv:'',
                     point:'',
                     storeNums:'',
@@ -215,6 +219,7 @@
                 categoryType: [],
                 img_show:true,
                 pvDisabled: true,
+                exchangeRate: baseInfo.exchangeRate(),
             }
         },
         methods: {
@@ -290,6 +295,7 @@
                     vueObj.form.unit=response.goodsInfo.UNIT
                     vueObj.form.marketPrice=response.goodsInfo.MARKET_PRICE
                     vueObj.form.sellPrice=response.goodsInfo.SELL_PRICE
+                    vueObj.form.sellPriceStandard=response.goodsInfo.SELL_PRICE_STANDARD
                     vueObj.form.pricePv=response.goodsInfo.PRICE_PV
                     vueObj.form.point=response.goodsInfo.POINT
                     vueObj.form.storeNums=response.goodsInfo.STORE_NUMS
@@ -424,7 +430,14 @@
                 handler(modern, origin) {
                     this.pvDisabled = (parseInt(modern) === 1)
                 }
-            }
+            },
+            // 监听商品标准价格,自动计算销售价格
+            'form.sellPriceStandard': {
+                deep: true,
+                handler(modern, origin) {
+                    this.form.sellPrice = modern * this.exchangeRate
+                }
+            },
         },
     }
 

+ 17 - 2
backendEle/src/views/shop/package-add.vue

@@ -9,6 +9,9 @@
                 <el-form-item label="Kitting products code"><!-- 套餐编号 -->
                     <el-input v-model="form.packageNo"></el-input>
                 </el-form-item>
+                <el-form-item label="标准价格">
+                    <el-input v-model="form.amountStandard"></el-input>
+                </el-form-item>
                 <el-form-item label="Kitting products amount"><!-- 套餐金额 -->
                     <el-input v-model="form.amount"></el-input>
                 </el-form-item>
@@ -52,10 +55,12 @@
                     amount:'',
                     amountPv:'',
                     levelId:'',
-                    packageContent:''
+                    packageContent:'',
+                    amountStandard: '',
                 },
                 submitButtonStat: false,
                 allDecLevel: baseInfo.decLevels(),
+                exchangeRate: baseInfo.exchangeRate(),
             }
         },
         methods: {
@@ -70,6 +75,7 @@
                     amountPv: this.form.amountPv,
                     levelId: this.form.levelId,
                     packageContent: this.form.packageContent,
+                    amountStandard: this.form.amountStandard,
 
                 }
 
@@ -101,7 +107,16 @@
                 }).catch(response => {
                 })
             },
-        }
+        },
+        watch:{
+            // 监听商品标准价格,自动计算销售价格
+            'form.amountStandard': {
+                deep: true,
+                handler(modern, origin) {
+                    this.form.amount = modern * this.exchangeRate
+                }
+            },
+        },
     }
 </script>
 

+ 17 - 2
backendEle/src/views/shop/package.vue

@@ -55,7 +55,10 @@
                 <el-form-item label="Kitting products code"><!-- 套餐编号 -->
                     <el-input v-model="form.packageNo"></el-input>
                 </el-form-item>
-                <el-form-item label="Kitting products amount"><!-- 套餐金额 -->
+                <el-form-item label="标准价格">
+                    <el-input v-model="form.amountStandard"></el-input>
+                </el-form-item>
+                <el-form-item label="Kitting products amount"><!-- 套餐价格 -->
                     <el-input v-model="form.amount"></el-input>
                 </el-form-item>
                 <el-form-item label="Kitting products BV"><!-- 套餐bV -->
@@ -123,7 +126,10 @@
                     statusValue: [],
                     sendType: null,
                     remark: null,
+                    amount: '',
+                    amountStandard: '',
                 },
+                exchangeRate: baseInfo.exchangeRate(),
             }
         },
         methods: {
@@ -230,7 +236,16 @@
                     })
             }
 
-        }
+        },
+        watch:{
+            // 监听商品标准价格,自动计算销售价格
+            'form.amountStandard': {
+                deep: true,
+                handler(modern, origin) {
+                    this.form.amount = modern * this.exchangeRate
+                }
+            },
+        },
     }
 
 </script>

+ 14 - 9
common/helpers/bonus/BonusSend.php

@@ -342,6 +342,7 @@ class BonusSend extends BaseObject {
 
                             'DEAL_TYPE_ID' => DealType::BONUS_SEND,
                             'SORT' => $key * 10,
+                            'BONUS_ISSUE' => true,
                         ]);
 //                        $this->_teamworkBonus($data['USER_ID'], $periodAmount, $key);
                     }
@@ -355,6 +356,7 @@ class BonusSend extends BaseObject {
                             'TRAVEL' => $data['BONUS_TRAVEL'],
                             'DEAL_TYPE_ID' => DealType::TRAVEL_SEND,
                             'SORT' => $key * 10,
+                            'BONUS_ISSUE' => true,
                         ]);
                     }
                     // 名车奖
@@ -366,6 +368,7 @@ class BonusSend extends BaseObject {
                             'HOUSE' => $data['BONUS_CAR'],
                             'DEAL_TYPE_ID' => DealType::CAR_SEND,
                             'SORT' => $key * 10,
+                            'BONUS_ISSUE' => true,
                         ]);
                     }
                     // 豪宅奖
@@ -377,19 +380,20 @@ class BonusSend extends BaseObject {
                             'HOUSE' => $data['BONUS_HOUSE'],
                             'DEAL_TYPE_ID' => DealType::HOUSE_SEND,
                             'SORT' => $key * 10,
+                            'BONUS_ISSUE' => true,
                         ]);
                     }
 
                     //发放重消积分
-                    if ($data['RECONSUME_POINTS'] > 0) {
-                        Balance::changeUserBonus($data['USER_ID'], 'reconsume_points', $data['RECONSUME_POINTS'], [
-                            'CALC_ID' => $data['ID'],
-                            'REMARK' => 'From ' . $periodNum . '期',
-                            'PERIOD_NUM' => $periodNum,
-                            'RECONSUME_POINTS' => $data['RECONSUME_POINTS'],
-                            'DEAL_TYPE_ID' => DealType::RECONSUME_POINTS_SEND,
-                        ]);
-                    }
+//                    if ($data['RECONSUME_POINTS'] > 0) {
+//                        Balance::changeUserBonus($data['USER_ID'], 'reconsume_points', $data['RECONSUME_POINTS'], [
+//                            'CALC_ID' => $data['ID'],
+//                            'REMARK' => 'From ' . $periodNum . '期',
+//                            'PERIOD_NUM' => $periodNum,
+//                            'RECONSUME_POINTS' => $data['RECONSUME_POINTS'],
+//                            'DEAL_TYPE_ID' => DealType::RECONSUME_POINTS_SEND,
+//                        ]);
+//                    }
 
                     //发放兑换积分
                     if ($data['EXCHANGE_POINTS'] > 0) {
@@ -399,6 +403,7 @@ class BonusSend extends BaseObject {
                             'PERIOD_NUM' => $periodNum,
                             'EXCHANGE_POINTS' => $data['EXCHANGE_POINTS'],
                             'DEAL_TYPE_ID' => DealType::EXCHANGE_POINTS_SEND,
+                            'BONUS_ISSUE' => true,
                         ]);
                     }
                     // 把记录标记为已发放状态

+ 82 - 79
common/helpers/user/Balance.php

@@ -247,6 +247,8 @@ class Balance {
             $periodNum = $params['PERIOD_NUM'];
         }
         $calcYearMonth = $period->getYearMonth($periodNum);
+        // 汇率
+        $exchangeRate = floatval(Cache::getSystemConfig()['exchangeRate']['VALUE'] ?? 0);
         // redis加锁(防止并发余额数值不准确出错)
         switch ($type) {
             case 'BONUS':
@@ -280,131 +282,130 @@ class Balance {
             // 改变发奖
             $paramData = [];
             $oneUserBonusModel = UserBonus::findOne(['USER_ID' => $userId]);
+            // 是否奖金发放操作
+            $issueBonus = $params['BONUS_ISSUE'] ?? false;
             if ($oneUserBonusModel) {
-                $paramData[$type] = new Expression($type.' + '.$amount);
+                $paramData[$type] = new Expression($type.' + ' . ($issueBonus ? $amount * $exchangeRate : $amount));
 
-                $oneUserBonusModel->$type += $amount;
+                $oneUserBonusModel->$type += ($issueBonus ? $amount * $exchangeRate : $amount);
                 if ($oneUserBonusModel->$type < 0) {
                     RedisLock::instance()->unlock($lockKey);
                     throw new Exception('金额不足');
                 }
 
                 if (isset($params['QY'])) {
-                    $paramData['QY_TOTAL'] = new Expression('QY_TOTAL + '.$params['QY']);
+                    $paramData['QY_TOTAL'] = new Expression('QY_TOTAL + ' . ($issueBonus ? $params['QY'] * $exchangeRate : $params['QY']));
                     //$oneUserBonusModel->QY_TOTAL += $params['QY'];
                 }
                 if (isset($params['FW'])) {
-                    $paramData['FW_TOTAL'] = new Expression('FW_TOTAL + '.$params['FW']);
+                    $paramData['FW_TOTAL'] = new Expression('FW_TOTAL + ' . ($issueBonus ? $params['FW'] * $exchangeRate : $params['FW']));
                 }
                 if (isset($params['YC'])) {
-                    $paramData['YC_TOTAL'] = new Expression('YC_TOTAL + '.$params['YC']);
+                    $paramData['YC_TOTAL'] = new Expression('YC_TOTAL + ' . ($issueBonus ? $params['YC'] * $exchangeRate : $params['YC']));
                     //$oneUserBonusModel->YC_TOTAL += $params['YC'];
                 }
                 if (isset($params['VIP'])) {
-                    $paramData['VIP_TOTAL'] = new Expression('VIP_TOTAL + '.$params['VIP']);
+                    $paramData['VIP_TOTAL'] = new Expression('VIP_TOTAL + ' . ($issueBonus ? $params['VIP'] * $exchangeRate : $params['VIP']));
                 }
                 if (isset($params['BD'])) {
-                    $paramData['BD_TOTAL'] = new Expression('BD_TOTAL + '.$params['BD']);
+                    $paramData['BD_TOTAL'] = new Expression('BD_TOTAL + ' . ($issueBonus ? $params['BD'] * $exchangeRate : $params['BD']));
                     //$oneUserBonusModel->BD_TOTAL += $params['BD'];
                 }
                 if (isset($params['TG'])) {
-                    $paramData['TG_TOTAL'] = new Expression('TG_TOTAL + '.$params['TG']);
+                    $paramData['TG_TOTAL'] = new Expression('TG_TOTAL + ' . ($issueBonus ? $params['TG'] * $exchangeRate : $params['TG']));
                     //$oneUserBonusModel->TG_TOTAL += $params['TG'];
                 }
                 if (isset($params['YJ'])) {
-                    $paramData['YJ_TOTAL'] = new Expression('YJ_TOTAL + '.$params['YJ']);
+                    $paramData['YJ_TOTAL'] = new Expression('YJ_TOTAL + ' . ($issueBonus ? $params['YJ'] * $exchangeRate : $params['YJ']));
                     //$oneUserBonusModel->YJ_TOTAL += $params['YJ'];
                 }
                 if (isset($params['GX'])) {
-                    $paramData['GX_TOTAL'] = new Expression('GX_TOTAL + '.$params['GX']);
+                    $paramData['GX_TOTAL'] = new Expression('GX_TOTAL + ' . ($issueBonus ? $params['GX'] * $exchangeRate : $params['GX']));
                     //$oneUserBonusModel->GX_TOTAL += $params['GX'];
                 }
                 if (isset($params['GL'])) {
-                    $paramData['GL_TOTAL'] = new Expression('GL_TOTAL + '.$params['GL']);
+                    $paramData['GL_TOTAL'] = new Expression('GL_TOTAL + ' . ($issueBonus ? $params['GL'] * $exchangeRate : $params['GL']));
                     //$oneUserBonusModel->GL_TOTAL += $params['GL'];
                 }
                 if (isset($params['BS'])) {
-                    $paramData['BS_TOTAL'] = new Expression('BS_TOTAL + '.$params['BS']);
+                    $paramData['BS_TOTAL'] = new Expression('BS_TOTAL + ' . ($issueBonus ? $params['BS'] * $exchangeRate : $params['BS']));
                 }
                 if (isset($params['BS_MNT'])) {
-                    $paramData['BS_MNT_TOTAL'] = new Expression('BS_MNT_TOTAL + '.$params['BS_MNT']);
+                    $paramData['BS_MNT_TOTAL'] = new Expression('BS_MNT_TOTAL + ' . ($issueBonus ? $params['BS_MNT'] * $exchangeRate : $params['BS_MNT']));
                 }
                 if (isset($params['BS_ABBR'])) {
-                    $paramData['BS_ABBR_TOTAL'] = new Expression('BS_ABBR_TOTAL + '.$params['BS_ABBR']);
+                    $paramData['BS_ABBR_TOTAL'] = new Expression('BS_ABBR_TOTAL + ' . ($issueBonus ? $params['BS_ABBR'] * $exchangeRate : $params['BS_ABBR']));
                 }
                 if (isset($params['TRAVEL_POINTS'])) {
-                    $paramData['TRAVEL_POINTS_TOTAL'] = new Expression('TRAVEL_POINTS_TOTAL + ' . $params['TRAVEL_POINTS']);
+                    $paramData['TRAVEL_POINTS_TOTAL'] = new Expression('TRAVEL_POINTS_TOTAL + ' . ($issueBonus ? $params['TRAVEL_POINTS'] * $exchangeRate : $params['TRAVEL_POINTS']));
                 }
                 if (isset($params['CAR_POINTS'])) {
-                    $paramData['CAR_POINTS_TOTAL'] = new Expression('CAR_POINTS_TOTAL + '.$params['CAR_POINTS']);
+                    $paramData['CAR_POINTS_TOTAL'] = new Expression('CAR_POINTS_TOTAL + ' . ($issueBonus ? $params['CAR_POINTS'] * $exchangeRate : $params['CAR_POINTS']));
                 }
                 if (isset($params['HOUSE_POINTS'])) {
-                    $paramData['HOUSE_POINTS_TOTAL'] = new Expression('HOUSE_POINTS_TOTAL + '.$params['HOUSE_POINTS']);
+                    $paramData['HOUSE_POINTS_TOTAL'] = new Expression('HOUSE_POINTS_TOTAL + ' . ($issueBonus ? $params['HOUSE_POINTS'] * $exchangeRate : $params['HOUSE_POINTS']));
                 }
                 if (isset($params['RECONSUME_POINTS_TOTAL'])) {
-                    $paramData['RECONSUME_POINTS_TOTAL'] = new Expression('RECONSUME_POINTS_TOTAL + '.$params['RECONSUME_POINTS_TOTAL']);
+                    $paramData['RECONSUME_POINTS_TOTAL'] = new Expression('RECONSUME_POINTS_TOTAL + ' . ($issueBonus ? $params['RECONSUME_POINTS_TOTAL'] * $exchangeRate : $params['RECONSUME_POINTS_TOTAL']));
                     //$oneUserBonusModel->RECONSUME_POINTS_TOTAL += $params['RECONSUME_POINTS_TOTAL'];
                 }
                 if (isset($params['EXCHANGE_POINTS_TOTAL'])) {
-                    $paramData['EXCHANGE_POINTS_TOTAL'] = new Expression('EXCHANGE_POINTS_TOTAL + '.$params['EXCHANGE_POINTS_TOTAL']);
+                    $paramData['EXCHANGE_POINTS_TOTAL'] = new Expression('EXCHANGE_POINTS_TOTAL + ' . ($issueBonus ? $params['EXCHANGE_POINTS_TOTAL'] * $exchangeRate : $params['EXCHANGE_POINTS_TOTAL']));
                     //$oneUserBonusModel->RECONSUME_POINTS_TOTAL += $params['RECONSUME_POINTS_TOTAL'];
                 }
                 if (isset($params['MANAGE_TAX'])) {
-                    $paramData['MANAGE_TAX'] = new Expression('MANAGE_TAX + '.$params['MANAGE_TAX']);
+                    $paramData['MANAGE_TAX'] = new Expression('MANAGE_TAX + ' . ($issueBonus ? $params['MANAGE_TAX'] * $exchangeRate : $params['MANAGE_TAX']));
                     //$oneUserBonusModel->MANAGE_TAX += $params['MANAGE_TAX'];
                 }
 
                 if (isset($params['ORI_QY'])) {
-                    $paramData['ORI_QY_TOTAL'] = new Expression('ORI_QY_TOTAL + '.$params['ORI_QY']);
+                    $paramData['ORI_QY_TOTAL'] = new Expression('ORI_QY_TOTAL + ' . ($issueBonus ? $params['ORI_QY'] * $exchangeRate : $params['ORI_QY']));
                     //$oneUserBonusModel->ORI_QY_TOTAL += $params['ORI_QY'];
                 }
 //                if (isset($params['ORI_FW'])) {
 //                    $paramData['ORI_FW_TOTAL'] = new Expression('ORI_FW_TOTAL + '.$params['ORI_FW']);
 //                }
                 if (isset($params['ORI_YC'])) {
-                    $paramData['ORI_YC_TOTAL'] = new Expression('ORI_YC_TOTAL + '.$params['ORI_YC']);
+                    $paramData['ORI_YC_TOTAL'] = new Expression('ORI_YC_TOTAL + ' . ($issueBonus ? $params['ORI_YC'] * $exchangeRate : $params['ORI_YC']));
                     //$oneUserBonusModel->ORI_YC_TOTAL += $params['ORI_YC'];
                 }
                 if (isset($params['ORI_VIP'])) {
-                    $paramData['ORI_VIP_TOTAL'] = new Expression('ORI_VIP_TOTAL + '.$params['ORI_VIP']);
-                }
-                if (isset($params['ORI_VIP'])) {
-                    $paramData['ORI_VIP_TOTAL'] = new Expression('ORI_VIP_TOTAL + '.$params['ORI_VIP']);
+                    $paramData['ORI_VIP_TOTAL'] = new Expression('ORI_VIP_TOTAL + ' . ($issueBonus ? $params['ORI_VIP'] * $exchangeRate : $params['ORI_VIP']));
                 }
                 if (isset($params['ORI_STANDARD'])) {
-                    $paramData['ORI_STANDARD_TOTAL'] = new Expression('ORI_STANDARD_TOTAL + '.$params['ORI_STANDARD']);
+                    $paramData['ORI_STANDARD_TOTAL'] = new Expression('ORI_STANDARD_TOTAL + ' . ($issueBonus ? $params['ORI_STANDARD'] * $exchangeRate : $params['ORI_STANDARD']));
                 }
                 if (isset($params['ORI_TG'])) {
-                    $paramData['ORI_TG_TOTAL'] = new Expression('ORI_TG_TOTAL + '.$params['ORI_TG']);
+                    $paramData['ORI_TG_TOTAL'] = new Expression('ORI_TG_TOTAL + ' . ($issueBonus ? $params['ORI_TG'] * $exchangeRate : $params['ORI_TG']));
                     //$oneUserBonusModel->ORI_TG_TOTAL += $params['ORI_TG'];
                 }
                 if (isset($params['ORI_YJ'])) {
-                    $paramData['ORI_YJ_TOTAL'] = new Expression('ORI_YJ_TOTAL + '.$params['ORI_YJ']);
+                    $paramData['ORI_YJ_TOTAL'] = new Expression('ORI_YJ_TOTAL + ' . ($issueBonus ? $params['ORI_YJ'] * $exchangeRate : $params['ORI_YJ']));
                     //$oneUserBonusModel->ORI_YJ_TOTAL += $params['ORI_YJ'];
                 }
                 if (isset($params['ORI_GX'])) {
-                    $paramData['ORI_GX_TOTAL'] = new Expression('ORI_GX_TOTAL + '.$params['ORI_GX']);
+                    $paramData['ORI_GX_TOTAL'] = new Expression('ORI_GX_TOTAL + ' . ($issueBonus ? $params['ORI_GX'] * $exchangeRate : $params['ORI_GX']));
                     //$oneUserBonusModel->ORI_GX_TOTAL += $params['ORI_GX'];
                 }
                 if (isset($params['ORI_GL'])) {
-                    $paramData['ORI_GL_TOTAL'] = new Expression('ORI_GL_TOTAL + '.$params['ORI_GL']);
+                    $paramData['ORI_GL_TOTAL'] = new Expression('ORI_GL_TOTAL + ' . ($issueBonus ? $params['ORI_GL'] * $exchangeRate : $params['ORI_GL']));
                     //$oneUserBonusModel->ORI_GL_TOTAL += $params['ORI_GL'];
                 }
                 if (isset($params['ORI_BS'])) {
-                    $paramData['ORI_BS_TOTAL'] = new Expression('ORI_BS_TOTAL + '.$params['ORI_BS']);
+                    $paramData['ORI_BS_TOTAL'] = new Expression('ORI_BS_TOTAL + ' . ($issueBonus ? $params['ORI_BS'] * $exchangeRate : $params['ORI_BS']));
                     //$oneUserBonusModel->ORI_GL_TOTAL += $params['ORI_GL'];
                 }
                 if (isset($params['ORI_BS_MNT'])) {
-                    $paramData['BS_MNT_ORI_TOTAL'] = new Expression('BS_MNT_ORI_TOTAL + '.$params['ORI_BS_MNT']);
+                    $paramData['BS_MNT_ORI_TOTAL'] = new Expression('BS_MNT_ORI_TOTAL + ' . ($issueBonus ? $params['ORI_BS_MNT'] * $exchangeRate : $params['ORI_BS_MNT']));
                     //$oneUserBonusModel->ORI_GL_TOTAL += $params['ORI_GL'];
                 }
                 if (isset($params['ORI_BS_ABBR'])) {
-                    $paramData['BS_ABBR_ORI_TOTAL'] = new Expression('BS_ABBR_ORI_TOTAL + '.$params['ORI_BS_ABBR']);
+                    $paramData['BS_ABBR_ORI_TOTAL'] = new Expression('BS_ABBR_ORI_TOTAL + ' . ($issueBonus ? $params['ORI_BS_ABBR'] * $exchangeRate : $params['ORI_BS_ABBR']));
                     //$oneUserBonusModel->ORI_GL_TOTAL += $params['ORI_GL'];
                 }
 
                 if (isset($params['BONUS_TOTAL'])) {
-                    $paramData['BONUS_TOTAL'] = new Expression('BONUS_TOTAL + '.$params['BONUS_TOTAL']);
+                    $paramData['BONUS_TOTAL'] = new Expression('BONUS_TOTAL + ' . ($issueBonus ? $params['BONUS_TOTAL'] * $exchangeRate : $params['BONUS_TOTAL']));
                     //$oneUserBonusModel->BONUS_TOTAL += $params['BONUS_TOTAL'];
                 }
                 UserBonus::updateAll($paramData, 'USER_ID=:USER_ID', [':USER_ID' => $userId]);
@@ -417,74 +418,74 @@ class Balance {
                 ];
                 if (isset($params['QY'])) {
 //                    $paramData['QY_TOTAL'] = new Expression('QY_TOTAL + '.$params['QY']);
-                    $paramData['QY_TOTAL'] = $params['QY'];
+                    $paramData['QY_TOTAL'] =  ($issueBonus ? $params['QY'] * $exchangeRate : $params['QY']);
                 }
                 if (isset($params['FW'])) {
 //                    $paramData['FW_TOTAL'] = new Expression('FW_TOTAL + '.$params['FW']);
-                    $paramData['FW_TOTAL'] = $params['FW'];
+                    $paramData['FW_TOTAL'] = ($issueBonus ? $params['FW'] * $exchangeRate : $params['FW']);
                 }
                 if (isset($params['YC'])) {
 //                    $paramData['YC_TOTAL'] = new Expression('YC_TOTAL + '.$params['YC']);
-                    $paramData['YC_TOTAL'] = $params['YC'];
+                    $paramData['YC_TOTAL'] = ($issueBonus ? $params['YC'] * $exchangeRate : $params['YC']);
                 }
                 if (isset($params['VIP'])) {
 //                    $paramData['VIP_TOTAL'] = new Expression('VIP_TOTAL + '.$params['VIP']);
-                    $paramData['VIP_TOTAL'] = $params['VIP'];
+                    $paramData['VIP_TOTAL'] = ($issueBonus ? $params['VIP'] * $exchangeRate : $params['VIP']);
                 }
 
                 if (isset($params['BD'])) {
 //                    $paramData['BD_TOTAL'] = new Expression('BD_TOTAL + '.$params['BD']);
-                    $paramData['BD_TOTAL'] = $params['BD'];
+                    $paramData['BD_TOTAL'] = ($issueBonus ? $params['BD'] * $exchangeRate : $params['BD']);
                     //$oneUserBonusModel->BD_TOTAL += $params['BD'];
                 }
                 if (isset($params['TG'])) {
 //                    $paramData['TG_TOTAL'] = new Expression('TG_TOTAL + '.$params['TG']);
-                    $paramData['TG_TOTAL'] = $params['TG'];
+                    $paramData['TG_TOTAL'] = ($issueBonus ? $params['TG'] * $exchangeRate : $params['TG']);
                 }
                 if (isset($params['YJ'])) {
 //                    $paramData['YJ_TOTAL'] = new Expression('YJ_TOTAL + '.$params['YJ']);
-                    $paramData['YJ_TOTAL'] = $params['YJ'];
+                    $paramData['YJ_TOTAL'] = ($issueBonus ? $params['YJ'] * $exchangeRate : $params['YJ']);
                 }
                 if (isset($params['GX'])) {
 //                    $paramData['GX_TOTAL'] = new Expression('GX_TOTAL + '.$params['GX']);
-                    $paramData['GX_TOTAL'] = $params['GX'];
+                    $paramData['GX_TOTAL'] = ($issueBonus ? $params['GX'] * $exchangeRate : $params['GX']);
                 }
                 if (isset($params['GL'])) {
 //                    $paramData['GL_TOTAL'] = new Expression('GL_TOTAL + '.$params['GL']);
-                    $paramData['GL_TOTAL'] = $params['GL'];
+                    $paramData['GL_TOTAL'] = ($issueBonus ? $params['GL'] * $exchangeRate : $params['GL']);
                 }
                 if (isset($params['BS'])) {
-                    $paramData['BS_TOTAL'] = $params['BS'];
+                    $paramData['BS_TOTAL'] = ($issueBonus ? $params['BS'] * $exchangeRate : $params['BS']);
                     //$oneUserBonusModel->GL_TOTAL += $params['GL'];
                 }
                 if (isset($params['BS_MNT'])) {
-                    $paramData['BS_MNT_TOTAL'] = $params['BS_MNT'];
+                    $paramData['BS_MNT_TOTAL'] = ($issueBonus ? $params['BS_MNT'] * $exchangeRate : $params['BS_MNT']);
                 }
                 if (isset($params['BS_ABBR'])) {
-                    $paramData['BS_ABBR_TOTAL'] = $params['BS_ABBR'];
+                    $paramData['BS_ABBR_TOTAL'] = ($issueBonus ? $params['BS_ABBR'] * $exchangeRate : $params['BS_ABBR']);
                 }
                 if (isset($params['TRAVEL_POINTS'])) {
-                    $paramData['TRAVEL_POINTS_TOTAL'] = $params['TRAVEL_POINTS'];
+                    $paramData['TRAVEL_POINTS_TOTAL'] = ($issueBonus ? $params['TRAVEL_POINTS'] * $exchangeRate : $params['TRAVEL_POINTS']);
                 }
                 if (isset($params['CAR_POINTS'])) {
-                    $paramData['CAR_POINTS_TOTAL'] = $params['CAR_POINTS'];
+                    $paramData['CAR_POINTS_TOTAL'] = ($issueBonus ? $params['CAR_POINTS'] * $exchangeRate : $params['CAR_POINTS']);
                 }
                 if (isset($params['HOUSE_POINTS'])) {
-                    $paramData['HOUSE_POINTS_TOTAL'] = $params['HOUSE_POINTS'];
+                    $paramData['HOUSE_POINTS_TOTAL'] = ($issueBonus ? $params['HOUSE_POINTS'] * $exchangeRate : $params['HOUSE_POINTS']);
                 }
 
                 if (isset($params['RECONSUME_POINTS_TOTAL'])) {
 //                    $paramData['RECONSUME_POINTS_TOTAL'] = new Expression('RECONSUME_POINTS_TOTAL + '.$params['RECONSUME_POINTS_TOTAL']);
-                    $paramData['RECONSUME_POINTS_TOTAL'] = $params['RECONSUME_POINTS_TOTAL'];
+                    $paramData['RECONSUME_POINTS_TOTAL'] = ($issueBonus ? $params['RECONSUME_POINTS_TOTAL'] * $exchangeRate : $params['RECONSUME_POINTS_TOTAL']);
                 }
                 if (isset($params['MANAGE_TAX'])) {
 //                    $paramData['MANAGE_TAX'] = new Expression('MANAGE_TAX + '.$params['MANAGE_TAX']);
-                    $paramData['MANAGE_TAX'] = $params['MANAGE_TAX'];
+                    $paramData['MANAGE_TAX'] = ($issueBonus ? $params['MANAGE_TAX'] * $exchangeRate : $params['MANAGE_TAX']);
                 }
 
                 if (isset($params['ORI_QY'])) {
 //                    $paramData['ORI_QY_TOTAL'] = new Expression('ORI_QY_TOTAL + '.$params['ORI_QY']);
-                    $paramData['ORI_QY_TOTAL'] = $params['ORI_QY'];
+                    $paramData['ORI_QY_TOTAL'] = ($issueBonus ? $params['ORI_QY'] * $exchangeRate : $params['ORI_QY']);
                 }
 //                if (isset($params['ORI_FW'])) {
 ////                    $paramData['ORI_FW_TOTAL'] = new Expression('ORI_FW_TOTAL + '.$params['ORI_FW']);
@@ -492,49 +493,49 @@ class Balance {
 //                }
                 if (isset($params['ORI_YC'])) {
 //                    $paramData['ORI_YC_TOTAL'] = new Expression('ORI_YC_TOTAL + '.$params['ORI_YC']);
-                    $paramData['ORI_YC_TOTAL'] = $params['ORI_YC'];
+                    $paramData['ORI_YC_TOTAL'] = ($issueBonus ? $params['ORI_YC'] * $exchangeRate : $params['ORI_YC']);
                 }
                 if (isset($params['ORI_VIP'])) {
 //                    $paramData['ORI_VIP_TOTAL'] = new Expression('ORI_VIP_TOTAL + '.$params['ORI_VIP']);
-                    $paramData['ORI_VIP_TOTAL'] = $params['ORI_VIP'];
+                    $paramData['ORI_VIP_TOTAL'] = ($issueBonus ? $params['ORI_VIP'] * $exchangeRate : $params['ORI_VIP']);
                 }
                 if (isset($params['ORI_STANDARD'])) {
-                    $paramData['ORI_STANDARD_TOTAL'] = $params['ORI_STANDARD'];
+                    $paramData['ORI_STANDARD_TOTAL'] = ($issueBonus ? $params['ORI_STANDARD'] * $exchangeRate : $params['ORI_STANDARD']);
                 }
                 if (isset($params['ORI_BD'])) {
 //                    $paramData['ORI_BD_TOTAL'] = new Expression('ORI_BD_TOTAL + '.$params['ORI_BD']);
-                    $paramData['ORI_BD_TOTAL'] = $params['ORI_BD'];
+                    $paramData['ORI_BD_TOTAL'] = ($issueBonus ? $params['ORI_BD'] * $exchangeRate : $params['ORI_BD']);
                 }
                 if (isset($params['ORI_TG'])) {
 //                    $paramData['ORI_TG_TOTAL'] = new Expression('ORI_TG_TOTAL + '.$params['ORI_TG']);
-                    $paramData['ORI_TG_TOTAL'] = $params['ORI_TG'];
+                    $paramData['ORI_TG_TOTAL'] = ($issueBonus ? $params['ORI_TG'] * $exchangeRate : $params['ORI_TG']);
                 }
                 if (isset($params['ORI_YJ'])) {
 //                    $paramData['ORI_YJ_TOTAL'] = new Expression('ORI_YJ_TOTAL + '.$params['ORI_YJ']);
-                    $paramData['ORI_YJ_TOTAL'] = $params['ORI_YJ'];
+                    $paramData['ORI_YJ_TOTAL'] = ($issueBonus ? $params['ORI_YJ'] * $exchangeRate : $params['ORI_YJ']);
                 }
                 if (isset($params['ORI_GX'])) {
 //                    $paramData['ORI_GX_TOTAL'] = new Expression('ORI_GX_TOTAL + '.$params['ORI_GX']);
-                    $paramData['ORI_GX_TOTAL'] = $params['ORI_GX'];
+                    $paramData['ORI_GX_TOTAL'] = ($issueBonus ? $params['ORI_GX'] * $exchangeRate : $params['ORI_GX']);
                 }
                 if (isset($params['ORI_GL'])) {
 //                    $paramData['ORI_GL_TOTAL'] = new Expression('ORI_GL_TOTAL + '.$params['ORI_GL']);
-                    $paramData['ORI_GL_TOTAL'] = $params['ORI_GL'];
+                    $paramData['ORI_GL_TOTAL'] = ($issueBonus ? $params['ORI_GL'] * $exchangeRate : $params['ORI_GL']);
                 }
                 if (isset($params['ORI_BS'])) {
-                    $paramData['ORI_BS_TOTAL'] = $params['ORI_BS'];
+                    $paramData['ORI_BS_TOTAL'] = ($issueBonus ? $params['ORI_BS'] * $exchangeRate : $params['ORI_BS']);
                     //$oneUserBonusModel->ORI_GL_TOTAL += $params['ORI_GL'];
                 }
                 if (isset($params['ORI_BS_MNT'])) {
-                    $paramData['BS_MNT_ORI_TOTAL'] = $params['ORI_BS_MNT'];
+                    $paramData['BS_MNT_ORI_TOTAL'] = ($issueBonus ? $params['ORI_BS_MNT'] * $exchangeRate : $params['ORI_BS_MNT']);
                 }
                 if (isset($params['ORI_BS_ABBR'])) {
-                    $paramData['BS_ABBR_ORI_TOTAL'] = $params['ORI_BS_ABBR'];
+                    $paramData['BS_ABBR_ORI_TOTAL'] = ($issueBonus ? $params['ORI_BS_ABBR'] * $exchangeRate : $params['ORI_BS_ABBR']);
                 }
 
                 if (isset($params['BONUS_TOTAL'])) {
 //                    $paramData['BONUS_TOTAL'] = new Expression('BONUS_TOTAL + '.$params['BONUS_TOTAL']);
-                    $paramData['BONUS_TOTAL'] = $params['BONUS_TOTAL'];
+                    $paramData['BONUS_TOTAL'] = ($issueBonus ? $params['BONUS_TOTAL'] * $exchangeRate : $params['BONUS_TOTAL']);
                 }
                 UserBonus::insertOne($paramData);
             }
@@ -550,7 +551,9 @@ class Balance {
                 'LAST_EMP_LV' => $userInfo['EMP_LV'],
                 'LAST_STATUS' => $userInfo['STATUS'],
                 'CALC_ID' => $params['CALC_ID'] ?? null,
-                'AMOUNT' => $amount,
+                'AMOUNT' => ($issueBonus ? $amount * $exchangeRate : $amount),
+                'AMOUNT_STANDARD' => (!$issueBonus ? $amount / $exchangeRate : $amount),
+                'EXCHANGE_RATE' => $exchangeRate,
                 'TOTAL' => $oneUserBonus[$type],
                 'IS_INCR' => $amount > 0 ? FlowBonus::INCR_ADD : FlowBonus::INCR_REDUCE,
                 'REMARK' => $params['REMARK'] ?? null,
@@ -575,26 +578,26 @@ class Balance {
             }
             if (strtolower($type) == 'bonus') {
                 FlowBonus::insertOne($flowInsertData);
-            } elseif (strtolower($type) == 'reconsume_points') {
-                //记录和扣除期数的积分
-                if( $amount > 0 ) {
-                    self::addPeriodReconsumePoints($userId, $periodNum, $amount);
-                }else {
-                    self::deductPeriodReconsumePoints($userId, abs($amount));
-                }
-                FlowReconsumePoints::insertOne($flowInsertData);
+//            } elseif (strtolower($type) == 'reconsume_points') {
+//                //记录和扣除期数的积分
+//                if( $amount > 0 ) {
+//                    self::addPeriodReconsumePoints($userId, $periodNum, $amount);
+//                }else {
+//                    self::deductPeriodReconsumePoints($userId, abs($amount));
+//                }
+//                FlowReconsumePoints::insertOne($flowInsertData);
             } elseif (strtolower($type) == 'exchange_points') {
                 //记录和扣除期数的积分
                 if( $amount > 0 ) {
-                    self::addPeriodExchangePoints($userId, $periodNum, $amount);
+                    self::addPeriodExchangePoints($userId, $periodNum, (!$issueBonus ? $amount / $exchangeRate : $amount));
                 }else {
                     self::deductPeriodExchangePoints($userId, abs($amount));
                 }
                 FlowExchangePoints::insertOne($flowInsertData);
-            } elseif (strtolower($type) == 'cf') {
-                FlowCF::insertOne($flowInsertData);
-            } elseif (strtolower($type) == 'lx') {
-                FlowLX::insertOne($flowInsertData);
+//            } elseif (strtolower($type) == 'cf') {
+//                FlowCF::insertOne($flowInsertData);
+//            } elseif (strtolower($type) == 'lx') {
+//                FlowLX::insertOne($flowInsertData);
             } elseif (in_array(strtolower($type), ['travel_points', 'car_points', 'house_points'])) {
                 // 这3个奖流水在一个表,需要加二级标识码
                 $flowInsertData['WALLET_TYPE'] = strtolower($type);

+ 3 - 1
common/models/DeclarationPackage.php

@@ -11,6 +11,7 @@ namespace common\models;
  * @property string $LEVEL_ID 所属报单级别ID
  * @property string $AMOUNT 套餐金额
  * @property string $PV 套餐PV
+ * @property string $AMOUNT_STANDARD 标准金额
  * @property string $PACKAGE_CONTENT 套餐内容
  * @property string $CREATED_AT 创建时间
  * @property string $CREATE_ADMIN 创建人
@@ -42,7 +43,7 @@ class DeclarationPackage extends \common\components\ActiveRecord
     public function rules()
     {
         return [
-            [['PACKAGE_NAME','PACKAGE_NO','LEVEL_ID', 'AMOUNT', 'PV', 'PACKAGE_CONTENT', 'CREATED_AT','CREATE_ADMIN',], 'required'],
+            [['PACKAGE_NAME','PACKAGE_NO','LEVEL_ID', 'AMOUNT', 'PV', 'PACKAGE_CONTENT', 'CREATED_AT','CREATE_ADMIN','AMOUNT_STANDARD'], 'required'],
             [['ID','LEVEL_ID','CREATE_ADMIN', 'UPDATE_ADMIN'], 'string', 'max' => 32],
             [['PACKAGE_NAME'], 'string', 'max' => 48],
             [['PACKAGE_NAME'], 'unique'],
@@ -62,6 +63,7 @@ class DeclarationPackage extends \common\components\ActiveRecord
             'PACKAGE_NO' => '套餐编号',
             'LEVEL_ID' => '所属报单级别ID',
             'AMOUNT' => '套餐金额',
+            'AMOUNT_STANDARD' => '标准价格',
             'PV' => '套餐BV',
             'PACKAGE_CONTENT' => '套餐内容',
             'CREATED_AT' => '创建时间',

+ 2 - 1
common/models/FlowExchangePoints.php

@@ -13,6 +13,7 @@ use Yii;
  * @property string $LAST_EMP_LV 记录时会员聘级
  * @property int $LAST_STATUS 记录时状态
  * @property string $AMOUNT 金额
+ * @property string $AMOUNT_STANDARD 标准金额
  * @property string $TOTAL 当前总金额
  * @property int $IS_INCR 是否增加
  * @property string $REMARK 备注
@@ -44,7 +45,7 @@ class FlowExchangePoints extends \common\components\ActiveRecord
     {
         return [
             [['USER_ID', 'REMARK', 'PERIOD_NUM', 'CALC_MONTH', 'P_MONTH', 'CREATED_AT'], 'required'],
-            [['AMOUNT', 'TOTAL'], 'number'],
+            [['AMOUNT', 'TOTAL', 'AMOUNT_STANDARD'], 'number'],
             [['LAST_STATUS', 'IS_INCR', 'PERIOD_NUM', 'CALC_MONTH', 'CREATED_AT', 'REMARK_IS_SHOW', 'DELETED', 'DELETED_AT', 'DEAL_TYPE_IS_PRESET'], 'integer'],
             [['ID', 'USER_ID', 'ADMIN_NAME', 'LAST_DEC_LV', 'LAST_EMP_LV', 'DEAL_TYPE_ID'], 'string', 'max' => 32],
             [['REMARK'], 'string', 'max' => 255],

+ 5 - 2
common/models/Order.php

@@ -13,9 +13,12 @@ use Yii;
  * @property string $USER_ID 用户ID
  * @property string $USER_NAME 会员编号
  * @property string $ORDER_TYPE 订货类型
- * @property string $ORDER_AMOUNT 订单总价格
+ * @property string $ORDER_AMOUNT 订单总价格(n)
+ * @property string $ORDER_AMOUNT_STANDARD 订单总价格($)
  * @property string $PV 订货PV
  * @property string $PAY_AMOUNT 支付价格
+ * @property string $PAY_AMOUNT_STANDARD 支付价格
+ * @property string $EXCHANGE_RATE 汇率
  * @property string $PAY_PV 实付PV
  * @property int $PAY_AT 支付时间
  * @property string $PAY_TYPE 支付方式
@@ -65,7 +68,7 @@ class Order extends \common\components\ActiveRecord
     {
         return [
             [['USER_ID', 'USER_NAME', 'ORDER_TYPE', 'CREATE_USER', 'EMAIL'], 'required'],
-            [['ORDER_AMOUNT', 'PV', 'PAY_AMOUNT', 'PAY_PV', 'FREIGHT', 'PAY_FREIGHT'], 'number'],
+            [['ORDER_AMOUNT', 'PV', 'PAY_AMOUNT', 'PAY_PV', 'FREIGHT', 'PAY_FREIGHT', 'ORDER_AMOUNT_STANDARD', 'PAY_AMOUNT_STANDARD', 'EXCHANGE_RATE'], 'number'],
             [['PAY_AT', 'DELIVERY_STATUS', 'DELIVERY_PERIOD', 'DELIVERY_AT', 'EXPRESS_TYPE', 'PERIOD_NUM', 'STATUS', 'PROVINCE', /*'CITY', 'COUNTY', */'CREATED_AT', 'UPDATED_AT', 'IS_DELETE', 'DELETED_AT'], 'integer'],
             [['ID','SN', 'DEC_SN', 'USER_ID', 'ORDER_TRACK_NO','PAY_TYPE'], 'string', 'max' => 32],
             [['USER_NAME', 'TEL', 'CREATE_USER', 'UPDATER', 'WAREHOUSE'], 'string', 'max' => 16],

+ 4 - 2
common/models/ShopGoods.php

@@ -18,6 +18,7 @@ namespace common\models;
  * @property int $IMAGES 商品图片
  * @property string $CONTENT 商品内容
  * @property string $SELL_PRICE 销售价格
+ * @property string $SELL_PRICE_STANDARD 标准价格
  * @property string $MARKET_PRICE 市场价格
  * @property int $PRICE_PV 价格PV
  * @property int $POINT 兑换积分
@@ -141,9 +142,9 @@ class ShopGoods extends \common\components\ActiveRecord
     public function rules()
     {
         return [
-            [['SELL_DISCOUNT','GOODS_NAME', 'CATE_ID','GIFT_TYPE', 'GOODS_NO', 'SELL_PRICE','MARKET_PRICE','PRICE_PV','STORE_NUMS', 'SELL_TYPE', 'CATEGORY_TYPE'], 'required'],
+            [['SELL_DISCOUNT','GOODS_NAME', 'CATE_ID','GIFT_TYPE', 'GOODS_NO', 'SELL_PRICE','MARKET_PRICE','PRICE_PV','STORE_NUMS', 'SELL_TYPE', 'CATEGORY_TYPE', 'SELL_PRICE_STANDARD'], 'required'],
             [['STORE_NUMS'], 'integer'],
-            [['SELL_PRICE','MARKET_PRICE','PRICE_PV','POINT',/* 'SELL_TYPE',*/ 'CATEGORY_TYPE'], 'number'],
+            [['SELL_PRICE','MARKET_PRICE','PRICE_PV','POINT',/* 'SELL_TYPE',*/ 'CATEGORY_TYPE' ,'SELL_PRICE_STANDARD'], 'number'],
             [['ID','CATE_ID', 'GOODS_NO','GIFT_TYPE'], 'string', 'max' => 32],
             [['UNIT'], 'string', 'max' => 16],
             [['COVER', 'GOODS_NAME'], 'string', 'max' => 255],
@@ -173,6 +174,7 @@ class ShopGoods extends \common\components\ActiveRecord
             'IMAGES' => '商品图片',
             'CONTENT' => '商品内容',
             'SELL_PRICE' => '销售价格',
+            'SELL_PRICE_STANDARD' => '标准价格($)',
             'MARKET_PRICE' => '市场价格',
             'PRICE_PV' => '价格PV',
             'POINT' => '兑换积分',

+ 41 - 0
common/models/forms/ConfigForm.php

@@ -309,4 +309,45 @@ class ConfigForm extends Model
         ]);
         return true;
     }
+
+    /**
+     * 更新汇率配置
+     * @return bool|null
+     */
+    public function updateExchangeRate()
+    {
+        if(!$this->validate()){
+            return null;
+        }
+
+        $beforeData = Config::getConfigByType('exchangeRate');
+        $this->adminOperateLogger->saveBeforeContent = $beforeData;
+
+        $postData = \Yii::$app->request->post();
+        $transaction = \Yii::$app->db->beginTransaction();
+        try{
+            Config::updateAll(['VALUE' => $postData['VALUE'], 'UPDATED_AT' => Date::nowTime()], "CONFIG_NAME=:CONFIG_NAME", [':CONFIG_NAME' => 'exchangeRate']);
+
+            // 异步处理添加任务
+            $taskKey = \Yii::$app->swooleAsyncTimer->asyncHandle('config/update-exchange-rate', \Yii::$app->request->post());
+            if($taskKey === false){
+                throw new Exception('请求异步服务器失败');
+            }
+
+            $transaction->commit();
+        } catch (Exception $e){
+            $transaction->rollBack();
+            $this->addError('updateExchangeRate', $e->getMessage());
+            return null;
+        }
+
+        $afterData = Config::getConfigByType('exchangeRate');
+        $this->adminOperateLogger->saveAfterContent = $afterData;
+        unset($beforeData,$afterData);
+        $this->adminOperateLogger->clean()->save([
+            'optType' => '更新汇率配置',
+        ]);
+
+        return true;
+    }
 }

+ 11 - 3
common/models/forms/DecPackageForm.php

@@ -3,6 +3,7 @@ namespace common\models\forms;
 
 use backendApi\modules\v1\models\Admin;
 use common\components\Model;
+use common\helpers\Cache;
 use common\helpers\Date;
 use common\models\DeclarationPackage;
 use yii\base\Exception;
@@ -17,6 +18,7 @@ class DecPackageForm extends Model
     public $packageName;
     public $packageNo;
     public $amount;
+    public $amountStandard;
     public $amountPv;
     public $levelId;
     public $packageContent;
@@ -29,7 +31,7 @@ class DecPackageForm extends Model
     {
         return [
             [['id', 'packageName','packageNo', 'amount', 'amountPv', 'levelId','packageContent','status'], 'trim'],
-            [['packageName','packageNo', 'amount', 'amountPv', 'levelId','packageContent','status'], 'required'],
+            [['packageName','packageNo', 'amount', 'amountPv', 'levelId','packageContent','status', 'amountStandard'], 'required'],
             [['id'], 'required', 'on'=>'edit'],
             [['id'], 'exist', 'targetClass'=>DeclarationPackage::class, 'targetAttribute'=>'ID'],
             [['amount','amountPv'], 'price'],
@@ -45,6 +47,7 @@ class DecPackageForm extends Model
             'packageName' => '套餐名称',
             'packageNo' => '套餐编号',
             'amount' => '套餐金额',
+            'amountStandard' => '标准价格',
             'amountPv' => '套餐BV',
             'levelId' => '所属报单级别',
             'packageContent' => '套餐详情',
@@ -59,8 +62,8 @@ class DecPackageForm extends Model
     {
         $parentScenarios =  parent::scenarios();
         $customScenarios = [
-            'add' => ['packageName','packageNo','amount','amountPv','levelId', 'packageContent'],
-            'edit' => ['id','packageName','packageNo','amount','amountPv', 'levelId', 'packageContent'],
+            'add' => ['packageName','packageNo','amount','amountPv','levelId', 'packageContent', 'amountStandard'],
+            'edit' => ['id','packageName','packageNo','amount','amountPv', 'levelId', 'packageContent', 'amountStandard'],
             'changeStatus' => ['selectedIds', 'status'],
         ];
         return array_merge($parentScenarios, $customScenarios);
@@ -87,6 +90,10 @@ class DecPackageForm extends Model
         if(!$this->validate()){
             return null;
         }
+
+        // 汇率:TODO:可优化为指定是否需要根据汇率生成
+        $exchangeRate = floatval(Cache::getSystemConfig()['exchangeRate']['VALUE'] ?? 0);
+
         if($this->scenario == 'add'){
             $model = new DeclarationPackage();
             $model->CREATE_ADMIN = Admin::getAdminNameById(\Yii::$app->user->id);
@@ -105,6 +112,7 @@ class DecPackageForm extends Model
         $model->PV = $this->amountPv;
         $model->LEVEL_ID = $this->levelId;
         $model->PACKAGE_CONTENT = $this->packageContent;
+        $model->AMOUNT_STANDARD = $this->amountStandard;
         if($model->save()){
             return $model;
         } else {

+ 23 - 1
common/models/forms/OrderForm.php

@@ -54,6 +54,9 @@ class OrderForm extends Model
     private $_freight;
     private $_payAmount;
     private $_orderGoods;
+    private $_standardAmount;
+    private $_decAmountStandard;
+    private $_exchangeRate;
 
     /**
      * @var Order
@@ -372,7 +375,11 @@ class OrderForm extends Model
         return $this->_model;
     }
 
-
+    /**
+     * 订单退款
+     * @return Order|null
+     * @throws Exception
+     */
     public function adminRefund()
     {
         if(!$this->validate()){
@@ -427,7 +434,9 @@ class OrderForm extends Model
         $ids = $this->goodsId;
         $totalAmount = 0;
         $totalPv = 0;
+        $totalAmountStandard = 0;
         $goodsType = ShopGoods::GOODS_TYPE;
+        $exchangeRate = floatval(Cache::getSystemConfig()['exchangeRate']['VALUE'] ?? 0); // 汇率
         foreach ($this->goodsNum as $k => $v) {
             if ($v) {
                 $goods = ShopGoods::findOneAsArray('ID=:ID AND STATUS=1',[':ID'=> $ids[$k]]);
@@ -436,13 +445,16 @@ class OrderForm extends Model
                         $discount = $goodsType[$goods['TYPE']]['discount'];
                         $realPrice = $goods['SELL_PRICE'] * $discount/100;
                         $realPv = $goods['PRICE_PV'] * $discount/100;
+                        $realPriceStandard = $goods['SELL_PRICE_STANDARD'] * $discount/100;
                     } else {
                         $discount = $goods['SELL_DISCOUNT'];
                         $realPrice = $goods['SELL_PRICE'] * $discount;
                         $realPv = $goods['PRICE_PV'] * $discount;
+                        $realPriceStandard = $goods['SELL_PRICE_STANDARD'] * $discount;
                     }
                     $totalAmount += $realPrice * intval($v);
                     $totalPv += $realPv * intval($v);
+                    $totalAmountStandard += $realPriceStandard * intval($v);
 //                    if($this->payType=='cash') {
 //                        $discount = $goodsType[$goods['TYPE']]['discount'];
 //                        $realPrice = $goods['SELL_PRICE'] * $discount/100;
@@ -468,6 +480,9 @@ class OrderForm extends Model
                         'CATEGORY_TYPE' => $goods['CATEGORY_TYPE'],
                         'PAY_TYPE' => $this->payType,
                         'EMAIL' => $this->email,
+                        'STANDARD_PRICE' => $goods['SELL_PRICE_STANDARD'],
+                        'REAL_STANDARD_PRICE' => $realPriceStandard,
+                        'EXCHANGE_RATE' => $exchangeRate,
                     ];
                 }
             }
@@ -480,6 +495,9 @@ class OrderForm extends Model
         }
         $this->_payAmount = $this->_decAmount + $this->_freight;
 
+        $this->_decAmountStandard = $totalAmountStandard;
+        $this->_standardAmount = $this->_decAmountStandard + $this->_freight;
+
         $db = \Yii::$app->db;
         $transaction = $db->beginTransaction();
         try {
@@ -550,6 +568,7 @@ class OrderForm extends Model
         $userRealName = Info::getUserRealNameByUserId($userId);
         $userMobile = Info::getUserMobileByUserId($userId);
         $userEmail = Info::getUserEmailByUserId($userId);
+        $exchangeRate = floatval(Cache::getSystemConfig()['exchangeRate']['VALUE'] ?? 0);
         // 加入订单信息
         if ($this->_address['PROVINCE'] != 1) {
             $warehouse = Region::getWarehouseByCode($this->_address['PROVINCE']);//仓库
@@ -592,6 +611,9 @@ class OrderForm extends Model
         $orderModel->CREATED_AT = Date::nowTime();
         $orderModel->CREATE_USER = $userName;
         $orderModel->EMAIL = $userEmail;
+        $orderModel->ORDER_AMOUNT_STANDARD = $this->_decAmountStandard;
+        $orderModel->PAY_AMOUNT_STANDARD = $this->_standardAmount;
+        $orderModel->EXCHANGE_RATE = $exchangeRate;
         if($this->_address['PROVINCE']==1){
             $orderModel->EXPRESS_TYPE = 1;
             $orderModel->CONSIGNEE = $userRealName;

+ 47 - 4
common/models/forms/ShopGoodsForm.php

@@ -2,8 +2,10 @@
 namespace common\models\forms;
 
 use common\components\Model;
+use common\helpers\Cache;
 use common\helpers\Date;
 use common\helpers\Form;
+use common\helpers\LoggerTool;
 use common\libs\logging\operate\AdminOperate;
 use common\models\ShopGoods;
 use yii\base\Exception;
@@ -24,6 +26,7 @@ class ShopGoodsForm extends Model
     public $unit;
     public $cover;
     public $sellPrice;
+    public $sellPriceStandard;
     public $marketPrice;
     public $pricePv;
     //public $point;
@@ -49,10 +52,10 @@ class ShopGoodsForm extends Model
     {
         return [
             [['id','sellDiscount','giftType','sellType','goodsNo', 'goodsName', 'unit', 'sellPrice', 'marketPrice', 'pricePv', 'storeNums', 'content', 'sort','status','cover'], 'trim'],
-            [['goodsName','sellDiscount','giftType','goodsNo', 'storeNums','sellPrice','marketPrice','pricePv', 'sort','status','cover', 'categoryType'], 'required'],
+            [['goodsName','sellDiscount','giftType','goodsNo', 'storeNums','sellPrice','marketPrice','pricePv', 'sort','status', 'categoryType', 'sellPriceStandard'], 'required'],
             [['id'], 'required', 'on'=>'edit'],
             [['id'], 'exist', 'targetClass'=>ShopGoods::class, 'targetAttribute'=>'ID'],
-            [['sellPrice','marketPrice','pricePv'], 'price'],
+            [['sellPrice','marketPrice','pricePv', 'sellPriceStandard'], 'price'],
             [['id'], 'initModel'],
             [['selectedIds'], 'isSelected'],
             [['sort'], 'isSort'],
@@ -74,6 +77,7 @@ class ShopGoodsForm extends Model
             'unit' => '单位',
             'cover' => '封面',
             'sellPrice' => '销售价格',
+            'sellPriceStandard' => '标准价格',
             'marketPrice' => '市场价格',
             'pricePv' => '销售PV',
             //'point' => '兑换积分',
@@ -91,8 +95,8 @@ class ShopGoodsForm extends Model
     {
         $parentScenarios =  parent::scenarios();
         $customScenarios = [
-            'add' => ['goodsName','sellDiscount','giftType', 'sellType','goodsNo','unit','sellPrice','marketPrice','pricePv','storeNums', 'content','sort','cover', 'categoryType'],
-            'edit' => ['id','goodsName','sellDiscount','giftType', 'sellType','goodsNo','unit','sellPrice','marketPrice','pricePv', 'storeNums', 'content','sort','cover', 'categoryType'],
+            'add' => ['goodsName','sellDiscount','giftType', 'sellType','goodsNo','unit','sellPrice','marketPrice','pricePv','storeNums', 'content','sort','cover', 'categoryType', 'sellPriceStandard'],
+            'edit' => ['id','goodsName','sellDiscount','giftType', 'sellType','goodsNo','unit','sellPrice','marketPrice','pricePv', 'storeNums', 'content','sort','cover', 'categoryType', 'sellPriceStandard'],
             'changeStatus' => ['selectedIds', 'status'],
         ];
         return array_merge($parentScenarios, $customScenarios);
@@ -182,6 +186,10 @@ class ShopGoodsForm extends Model
         if (!$this->validate()) {
             return null;
         }
+
+        // 汇率
+        $exchangeRate = floatval(Cache::getSystemConfig()['exchangeRate']['VALUE'] ?? 0);
+
         $transaction = \Yii::$app->db->beginTransaction();
         try {
             // 添加商品
@@ -195,6 +203,7 @@ class ShopGoodsForm extends Model
             $shopGoods->GOODS_NO = $this->goodsNo;
             $shopGoods->UNIT = $this->unit ? $this->unit : '个';
             $shopGoods->COVER = $this->cover ? $this->cover : '';
+            $shopGoods->SELL_PRICE_STANDARD = $this->sellPriceStandard;
             $shopGoods->SELL_PRICE = $this->sellPrice;
             $shopGoods->MARKET_PRICE = $this->marketPrice;
             $shopGoods->PRICE_PV = $this->pricePv;
@@ -228,6 +237,9 @@ class ShopGoodsForm extends Model
             return null;
         }
 
+        // 汇率
+        $exchangeRate = floatval(Cache::getSystemConfig()['exchangeRate']['VALUE'] ?? 0);
+
         $transaction = \Yii::$app->db->beginTransaction();
         try {
             $model = $this->_model;
@@ -240,6 +252,7 @@ class ShopGoodsForm extends Model
             $model->GOODS_NO = $this->goodsNo;
             $model->UNIT = $this->unit ? $this->unit : '个';
             $model->COVER = $this->cover ? $this->cover : '';
+            $model->SELL_PRICE_STANDARD = $this->sellPriceStandard;
             $model->SELL_PRICE = $this->sellPrice;
             $model->MARKET_PRICE = $this->marketPrice;
             $model->PRICE_PV = $this->pricePv;
@@ -294,4 +307,34 @@ class ShopGoodsForm extends Model
         return ['status' => $this->status];
     }
 
+    /**
+     * 异步更新商品属性表
+     * @return bool
+     */
+    public function updateAsync(){
+        // 汇率
+        $exchangeRate = floatval(Cache::getSystemConfig()['exchangeRate']['VALUE'] ?? 0);
+        // 商品列表
+        $goods = ShopGoods::findAll(['STATUS' => 1]);
+
+        $transaction = \Yii::$app->db->beginTransaction();
+        try{
+            foreach ($goods as $good) {
+                $model = clone $good;
+                $model->SELL_PRICE = $good->SELL_PRICE_STANDARD * $exchangeRate;
+                $model->MARKET_PRICE = $good->SELL_PRICE_STANDARD * $exchangeRate;
+                $model->UPDATED_AT = Date::nowTime();
+                if (!$model->save()) {
+                    throw new Exception(Form::formatErrorsForApi($model->getErrors()));
+                }
+            }
+
+            $transaction->commit();
+        } catch (Exception $e){
+            $transaction->rollBack();
+            $this->addError('update', $e->getMessage());
+            return false;
+        }
+        return true;
+    }
 }

+ 16 - 2
console/controllers/ConfigController.php

@@ -9,10 +9,9 @@ namespace console\controllers;
 
 use common\helpers\Cache;
 use common\helpers\Form;
-use common\helpers\Log;
 use common\models\forms\ConfigPeriodForm;
+use common\models\forms\ShopGoodsForm;
 use common\models\LogAsync;
-use SebastianBergmann\CodeCoverage\Report\PHP;
 use yii\db\Exception;
 
 class ConfigController extends BaseController
@@ -32,4 +31,19 @@ class ConfigController extends BaseController
         }
     }
 
+    /**
+     * 更新汇率
+     * @param $taskKey
+     * @throws Exception
+     */
+    public function actionUpdateExchangeRate($taskKey)
+    {
+        $params = Cache::getAsyncParams($taskKey);
+        $formModel = new ShopGoodsForm();
+        if ($formModel->load($params, '') && $formModel->updateAsync()) {
+            \Yii::$app->swooleAsyncTimer->pushAsyncResultToAdmin($params['handleUserId'], "更新汇率配置成功");
+        } else {
+            \Yii::$app->swooleAsyncTimer->pushAsyncResultToAdmin($params['handleUserId'], "更新汇率配置失败,原因:".Form::formatErrorsForApi($formModel->getErrors()), false);
+        }
+    }
 }