root il y a 3 ans
Parent
commit
ac78951295

+ 1 - 0
backendApi/config/urlManagerRules.php

@@ -50,6 +50,7 @@ return [
             'GET,POST upload' => 'upload',
             'GET dec-order-list' => 'dec-order-list',
             'GET dec-order-list-export' => 'dec-order-list-export',
+            'POST delete-order' => 'delete-order',
             'GET order-list' => 'order-list',
             'GET order-list-export' => 'order-list-export',
             'POST order-delivery' => 'order-delivery',

+ 14 - 0
backendApi/modules/v1/controllers/ShopController.php

@@ -30,6 +30,7 @@ use common\models\forms\DecPackageForm;
 use common\models\forms\ExcelOrderDecForm;
 use common\models\forms\ExcelOrderShopForm;
 use common\models\forms\ExcelOrderStandardForm;
+use common\models\forms\OrderDeleteForm;
 use common\models\forms\OrderForm;
 use common\models\forms\ShopGoodsForm;
 use common\models\forms\UploadForm;
@@ -358,6 +359,19 @@ class ShopController extends BaseController {
         return static::notice('导出开始,请到文件管理-导出文件查看');
     }
 
+    // 删除订单
+    public function actionDeleteOrder() {
+        if (\Yii::$app->request->isPost) {
+            $formModel = new OrderDeleteForm();
+            if ($formModel->load(\Yii::$app->request->post(), '') && $result = $formModel->returnOrder()) {
+
+                return static::notice('删除订单成功,请重新生成业绩单,计算奖金');
+            } else {
+                return static::notice(Form::formatErrorsForApi($formModel->getErrors()), 400);
+            }
+        }
+    }
+
     /**
      * 订单表
      * @return mixed

+ 2 - 0
backendApi/modules/v1/models/lists/shop/DecOrderList.php

@@ -51,6 +51,8 @@ class DecOrderList extends \common\libs\dataList\DataList implements DataListInt
         if(!$this->columns){
             $this->columns = [
                 'ID' => null,
+                'DETAIL_TYPE' => null,
+                'UPGRADE_TYPE' => null,
                 'DEC_SN' => [
                     'header' => 'Entry code',//报单编号
                     'headerOther' => ['width' => '200'],

+ 3 - 0
backendApi/modules/v1/models/lists/shop/OrderList.php

@@ -52,6 +52,9 @@ class OrderList extends \common\libs\dataList\DataList implements DataListInterf
         $regionConfig = Cache::getRegionConfig();
         if(!$this->columns){
             $this->columns = [
+                'ID' => null,
+                'SN' => null,
+                'DEC_SN' => null,
                 'USER_NAME' => [
                     'header' => 'Member code',//会员编号
                     'headerOther' => ['width' => '120'],

+ 48 - 0
backendEle/src/views/shop/dec-order-list.vue

@@ -18,6 +18,18 @@
             </template>
           </template>
         </el-table-column>
+        <el-table-column fixed="right" label="操作" width="180">
+          <template slot-scope="scope">
+            <el-dropdown size="small" trigger="click">
+              <el-button type="primary" size="small" @click.stop="">
+                操作该数据<i class="el-icon-arrow-down el-icon--right"></i>
+              </el-button>
+              <el-dropdown-menu slot="dropdown">
+                <el-dropdown-item command="edit" @click.native="handleDel(scope.row)">删除订单</el-dropdown-item>
+              </el-dropdown-menu>
+            </el-dropdown>
+          </template>
+        </el-table-column>
       </el-table>
       <div class="white-box-footer">
         <el-button type="success" size="small" @click="handleExport" v-show="permission.hasPermission(`shop/dec-order-list-export`)">Export Excel</el-button>
@@ -109,6 +121,42 @@
 
         })
       },
+      handleShowDeliveryDialog(row) {
+        this.dialogDeliveryVisible = true
+        this.deliveryForm.sn = row['SN'].value
+      },
+      handleDel(row) {
+        let orderSn = row.ORDER_SN.value // order订单表的编号
+        let detailType = row.DETAIL_TYPE // 默认为1注册  2为升级
+        let upgradeType = row.UPGRADE_TYPE //默认0 1 补差额升级  2全额升级
+        this.$confirm(`确定要删除订单:${orderSn}吗?`, '提示', {
+          confirmButtonText: 'Confirm',
+          cancelButtonText: 'Cancel',
+          type: 'warning'
+        }).then(() => {
+          // 删除订单
+        let postData = {
+            orderSn,
+            detailType,
+            upgradeType
+          }
+          return network.postData('shop/delete-order', postData).then(response => {
+              console.log(response);
+              this.$message({
+                  message: response,
+                  type: 'success'
+              })
+              this.submitButtonStat = false
+              // this.$router.go(-1)
+          }).catch(() => {
+              this.submitButtonStat = false
+          })
+        }).then(response => {
+          
+        }).catch(response => {
+
+        })
+      },
         handleExportPDF() {
             if (this.multipleSelection.length === 0) {
                 this.$message({

+ 29 - 0
backendEle/src/views/shop/order-list.vue

@@ -35,6 +35,7 @@
       </el-table>
       <div class="white-box-footer">
         <el-button type="success" size="small" @click="handleExport" v-show="permission.hasPermission(`shop/order-list-export`)">Export Excel</el-button>
+        <el-dropdown-item command="edit" @click.native="handleDel(scope.row)" v-if="permission.hasPermission(`shop/edit`)">Delete Order</el-dropdown-item>
         <el-button type="primary" size="small" @click="handleExportPDF" v-show="permission.hasPermission(`shop/order-list-export`)">Export PDF</el-button>
         <pagination :total="totalCount" :page_size="pageSize" @size-change="handleSizeChange"
                     @current-change="handleCurrentChange"></pagination>
@@ -176,6 +177,34 @@
       handleEdit() {
         // 进入修改订单页面
       },
+      handleDel(row) {
+        let orderSn = row.SN.value // order订单表的编号
+        this.$confirm(`确定要删除订单:${orderSn}吗?`, '提示', {
+          confirmButtonText: '确定',
+          cancelButtonText: '取消',
+          type: 'warning'
+        }).then(() => {
+          // 删除订单
+          let postData = {
+            orderSn
+          }
+          return network.postData('shop/delete-order', postData).then(response => {
+              console.log(response);
+              this.$message({
+                  message: response,
+                  type: 'success'
+              })
+              this.submitButtonStat = false
+              this.$router.go(-1)
+          }).catch(() => {
+              this.submitButtonStat = false
+          })
+        }).then(response => {
+          
+        }).catch(response => {
+
+        })
+      },
       // 显示发货对话框
       handleShowDeliveryDialog(row) {
         this.dialogDeliveryVisible = true

+ 90 - 0
common/models/ReturnOrder.php

@@ -0,0 +1,90 @@
+<?php
+
+namespace common\models;
+
+use Yii;
+
+/**
+ * This is the model class for table "{{%RETURN_ORDER}}".
+ *
+ * @property string $ID
+ * @property string $SN 订单号
+ * @property string $DEC_SN 报单编号
+ * @property string $USER_ID 用户ID
+ * @property string $USER_NAME 会员编号
+ * @property string $ORDER_TYPE 订货类型
+ * @property string $ORDER_AMOUNT 订单总价格
+ * @property string $PV 订货PV
+ * @property string $PAY_AMOUNT 支付价格
+ * @property string $PAY_PV 实付PV
+ * @property string $PAY_TYPE 支付方式
+ * @property int $PERIOD_NUM 期数
+ * @property int $PROVINCE 省份名称
+ * @property int $CITY 城市名称
+ * @property int $COUNTY 县区
+ * @property string $ADDRESS 详细地址
+ * @property int $CREATE_AT 订单创建时间
+ */
+class ReturnOrder extends \common\components\ActiveRecord
+{
+    /**
+     * {@inheritdoc}
+     */
+    public static function tableName()
+    {
+        return '{{%RETURN_ORDER}}';
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function rules()
+    {
+        return [
+            [['USER_ID', 'SN', 'ORDER_TYPE'], 'required'],
+            [['ORDER_AMOUNT', 'PV', 'PAY_AMOUNT', 'PAY_PV', 'CREATE_AT'], 'number'],
+            [['ORDER_PERIOD_NUM','PERIOD_NUM', 'PROVINCE', 'CITY', 'COUNTY'], 'integer'],
+            [['ID','SN', 'DEC_SN', 'USER_ID','PAY_TYPE'], 'string', 'max' => 32],
+            [['USER_NAME'], 'string', 'max' => 16],
+            [['ORDER_TYPE'], 'string', 'max' => 12],
+            [['ADDRESS'], 'string', 'max' => 255],
+            [['SN'], 'unique'],
+        ];
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function attributeLabels()
+    {
+        return [
+            'ID' => 'ID',
+            'SN' => '订单号',
+            'DEC_SN' => '报单编号',
+            'USER_ID' => '用户ID',
+            'USER_NAME' => '会员编号',
+            'ORDER_TYPE' => '订货类型',
+            'ORDER_AMOUNT' => '订单总价格',
+            'PV' => '订货PV',
+            'PAY_AMOUNT' => '支付价格',
+            'PAY_PV' => '实付PV',
+            'PAY_TYPE' => '支付方式',
+            'ORDER_PERIOD_NUM' => '原订单期数',
+            'PERIOD_NUM' => '期数',
+            'UPGRADE_TYPE' => '升级报单类型',
+            'PROVINCE' => '省份名称',
+            'CITY' => '城市名称',
+            'COUNTY' => '县区',
+            'ADDRESS' => '详细地址',
+            'CREATE_AT' => '订单创建时间',
+            'ORI_CASH' => '删除订单退还前用户的余额',
+            'ADMIN_ID' => '删除订单人ID',
+            'ORI_BONUS' => '删除订单前用户奖金',
+            'ORI_EXCHANGE_POINTS' => '删前用户无业绩兑换点数',
+            'ORI_RECONSUME_POINTS' => '删除前用户复销点数',
+            'ORI_DEC_LV' => '删前级别',
+            'RETURN_DEC_LV' => '删后级别',
+            'IS_LOCKING' => '此单是否会锁定会员'
+        ];
+    }
+}

+ 324 - 0
common/models/forms/OrderDeleteForm.php

@@ -0,0 +1,324 @@
+<?php
+namespace common\models\forms;
+
+use common\helpers\Cache;
+use common\helpers\Date;
+use common\components\Model;
+use common\helpers\Form;
+use common\helpers\snowflake\SnowFake;
+use common\helpers\user\Balance;
+use common\helpers\user\Cash;
+use common\helpers\user\Info;
+use common\libs\logging\operate\AdminOperate;
+use common\models\DealType;
+use common\models\DecOrder;
+use common\models\Order;
+use common\models\OrderGoods;
+use common\models\Period;
+use common\models\ReceiveAddress;
+use common\models\Region;
+use common\models\ReturnOrder;
+use common\models\ShopGoods;
+use common\models\User;
+use common\models\UserBonus;
+use common\models\UserNetwork;
+use common\models\UserWallet;
+use yii\base\Exception;
+
+/**
+ * 删除订单
+ */
+class OrderDeleteForm extends Model
+{
+    public $orderSn;
+
+    /**
+     * @var Order
+     */
+    private $_model;
+
+    /**
+     * @inheritdoc
+     */
+    public function rules()
+    {
+        return [
+            [['orderSn'], 'trim'],
+            [['orderSn'], 'required'],
+            [['orderSn'], 'checkOrderType'],
+        ];
+    }
+
+    public function attributeLabels()
+    {
+        return [
+            'orderSn' => '订单号',
+        ];
+    }
+
+    /**
+     * 指定校验场景
+     * @return array
+     */
+    public function scenarios()
+    {
+        $parentScenarios =  parent::scenarios();
+        $customScenarios = [
+            // // 管理员发货
+            // 'adminDelivery' => ['sn', 'expressCompany', 'orderTrackNo'],
+            // // 会员确认收货
+            // 'userConfirm' => ['sn', 'expressCompany', 'orderTrackNo'],
+            // // 管理员修改订单状态
+            // 'adminStatus' => ['sn', 'status'],
+            // // 管理员修改备注
+            // 'adminRemark' => ['sn', 'remark'],
+            // // 会员下单
+            // 'userOrder' => ['type','addressId', 'payType','goodsId','goodsNum', 'remark', 'payPassword'],
+            // // 帮会员复消下单
+            // 'reconsumeOrder' => ['type','userName', 'payType','goodsId','goodsNum', 'remark', 'payPassword','consignee','acceptMobile','province','city','county','detailaddress'],
+        ];
+        return array_merge($parentScenarios, $customScenarios);
+    }
+
+    public function returnOrder() {
+        if(!$this->validate()){
+            return null;
+        }
+        $sn = $this->orderSn;
+        // 获取订单详情
+        $orderInfo = Order::findUseDbCalc()
+        ->select('ID,DEC_SN,SN,USER_ID,ORDER_TYPE,IS_DELETE,PAY_AMOUNT,PAY_TYPE,ORDER_AMOUNT,USER_NAME,PV,PAY_PV,PERIOD_NUM,PROVINCE,CITY,COUNTY,ADDRESS')
+        ->where("SN=:SN", [':SN' => $sn])
+        ->asArray()
+        ->one();
+        // 如果会员已经是锁定状态了,删除订单的时候,是否还要退还金额
+        $db = \Yii::$app->db;
+        $transaction = $db->beginTransaction();
+        try {
+            $userId = $orderInfo['USER_ID'];
+            $decInfo = [];
+            $isLock = 0 ; // 是否锁定会员单
+            // 如果是注册订单,则删除订单并退还金额,然后再冻结用户
+            if ($orderInfo['ORDER_TYPE'] == 'ZC') {
+                // 查询报单数据,因为如果是报单,则要退还给报单中心
+                $decInfo = DecOrder::findUseDbCalc()
+                ->select('USER_ID,TO_USER_ID,DETAIL_TYPE,UPGRADE_TYPE,ORI_LV,UPGRADE_LV')
+                ->where("ORDER_SN=:ORDER_SN", [':ORDER_SN' => $sn])
+                ->asArray()
+                ->one();
+                $userId = $decInfo['USER_ID']; 
+                // 删除报单
+                $delDecOrder = DecOrder::updateAll(
+                    ['IS_DEL'=>1, 'DELETED_AT'=>Date::nowTime()], 
+                    'ORDER_SN=:ORDER_SN', 
+                    ['ORDER_SN'=>$sn]
+                );
+                if (!$delDecOrder) {
+                    $transaction->rollBack();
+                    throw new Exception('删除报单失败,删除订单失败');
+                }
+                // 如果删除的是升级单,则需要回退用户的级别
+                if ($decInfo['DETAIL_TYPE'] == 2) {
+                    $oriLv = $decInfo['ORI_LV'];
+                    $userModel = User::findOne(['ID' => $orderInfo['USER_ID']]);
+                    $userModel->DEC_LV = $oriLv;
+                    $userModel->UPDATED_AT = Date::nowTime();
+                    if(!$userModel->save(false)) {
+                        $transaction->rollBack();
+                        throw new Exception('回退会员级别失败,删除订单失败');
+                    }
+                } else {
+                    // 锁定用户
+                    $userModel = User::findOne(['ID' => $orderInfo['USER_ID']]);
+                    $userModel->STATUS = 0;
+                    $userModel->STATUS_AT = Date::nowTime();
+                    if(!$userModel->save(false)) {
+                        $transaction->rollBack();
+                        throw new Exception('锁定会员失败,删除订单失败');
+                    }
+                    $isLock = 1;
+                }
+            } 
+            // 公共的退钱,删除订单操作
+            $delOrder = Order::updateAll(
+                ['IS_DELETE'=>1, 'DELETED_AT'=>Date::nowTime()], 
+                'SN=:SN', 
+                ['SN'=>$sn]
+            );
+            if (!$delOrder) {
+                $transaction->rollBack();
+                throw new Exception('删除订单失败');
+            }
+            
+            // 记录退还前的账户原资金
+            $cash = $point = $bonus = $exchange = 0;
+            $userBonus = UserBonus::findUseSlaves()
+            ->select('BONUS,RECONSUME_POINTS,EXCHANGE_POINTS')
+            ->where('USER_ID=:USER_ID', [':USER_ID' => $userId])
+            ->asArray()
+            ->one();
+            if ($userBonus) {
+                $point = $userBonus['RECONSUME_POINTS'];
+                $bonus = $userBonus['BONUS'];
+                $exchange = $userBonus['EXCHANGE_POINTS'];
+            }
+            $cashWallet = UserWallet::findOneAsArray('USER_ID=:USER_ID', [':USER_ID'=>$userId], 'CASH');
+            if ($cashWallet) {
+                $cash = $cashWallet['CASH'];
+            }
+            // 开始退钱,退积分等
+            $payType = $orderInfo['PAY_TYPE']; // 支付方式
+            $payAmount = $orderInfo['PAY_AMOUNT']; // 支付的金额
+            //退还
+            $amountResult = false;
+            if($payType == 'cash') {
+                $amountResult = Cash::changeUserCash($userId, 'CASH', +abs($payAmount), ['REMARK' => '退货退还余额']);
+            } else if ($payType == 'exchange') {
+                $amountResult = Balance::changeUserBonus($userId,'exchange_points', +abs($payAmount),['DEAL_TYPE_ID' => DealType::EXCHANGE_POINTS_EXCHANGE,'REMARK' => '退货退还无业绩兑换点数']);
+            } else{
+                $amountResult = Balance::changeUserBonus($userId,'reconsume_points', +abs($payAmount),['DEAL_TYPE_ID' => DealType::RECONSUME_POINTS_EXCHANGE,'REMARK' => '退货退还复销点数']);
+            }
+            if ($amountResult !== true) {
+                $transaction->rollBack();
+                throw new Exception('退还订单金额失败,删除订单失败');
+            }
+            $upgradeType = 0; // 升级单类型
+            $returnLv = '';
+            $oriLvs = '';
+            if (!empty($decInfo)) {
+                $upgradeType = $decInfo['UPGRADE_TYPE'];
+                $returnLv = $decInfo['ORI_LV'];
+                $oriLvs = $decInfo['UPGRADE_LV'];
+            }
+            // 退款成功,记录数据信息
+            $periodObj = Period::instance();
+            $nowPeriodNum = $periodObj->getNowPeriodNum();
+            $returnOrderModel = new ReturnOrder();
+            $returnOrderModel->ID = SnowFake::instance()->generateId();
+            $returnOrderModel->SN = $sn;
+            $returnOrderModel->DEC_SN = $orderInfo['DEC_SN'];
+            $returnOrderModel->CREATE_AT = Date::nowTime();
+            $returnOrderModel->ORDER_TYPE = $orderInfo['ORDER_TYPE'];
+            $returnOrderModel->ORDER_AMOUNT = $orderInfo['ORDER_AMOUNT'];
+            $returnOrderModel->PV = $orderInfo['PV'];
+            $returnOrderModel->PAY_PV = $orderInfo['PAY_PV'];
+            $returnOrderModel->PAY_AMOUNT = $orderInfo['PAY_AMOUNT'];
+            $returnOrderModel->PAY_TYPE = $orderInfo['PAY_TYPE'];
+            $returnOrderModel->USER_ID = $orderInfo['USER_ID'];
+            $returnOrderModel->PERIOD_NUM = $nowPeriodNum;
+            $returnOrderModel->ORDER_PERIOD_NUM = $orderInfo['PERIOD_NUM'];
+            $returnOrderModel->UPGRADE_TYPE = $upgradeType;
+            $returnOrderModel->USER_NAME = $orderInfo['USER_NAME'];
+            $returnOrderModel->PROVINCE = $orderInfo['PROVINCE'];
+            $returnOrderModel->CITY = $orderInfo['CITY'];
+            $returnOrderModel->COUNTY = $orderInfo['COUNTY'];
+            $returnOrderModel->ADDRESS = $orderInfo['ADDRESS'];
+            $returnOrderModel->ADMIN_ID = \Yii::$app->user->id;
+            $returnOrderModel->ORI_CASH = $cash;
+            $returnOrderModel->ORI_BONUS = $bonus;
+            $returnOrderModel->ORI_EXCHANGE_POINTS = $exchange;
+            $returnOrderModel->ORI_RECONSUME_POINTS = $point;
+            $returnOrderModel->ORI_DEC_LV = $oriLvs;
+            $returnOrderModel->RETURN_DEC_LV = $returnLv;
+            $returnOrderModel->IS_LOCKING = $isLock;
+            if (!$returnOrderModel->save()) {
+                $transaction->rollBack();
+                $this->addErrors($returnOrderModel->getErrors());
+                return false;
+            }
+            
+            $transaction->commit();
+        } catch(Exception $e) {
+            $transaction->rollBack();
+            $this->addError('add', $e->getMessage());
+            return null;
+        }
+
+        return true;
+    }
+
+    // 判断订单类型
+    public function checkOrderType($attribute) {
+        $sn = $this->orderSn;
+        $orderDetail = Order::findUseDbCalc()
+        ->select('ID,DEC_SN,USER_ID,ORDER_TYPE,IS_DELETE,PERIOD_NUM')
+        ->where("SN=:SN", [':SN' => $sn])
+        ->asArray()
+        ->one();
+        if (empty($orderDetail)) {
+            $this->addError($attribute, '未找到订单信息,订单编号为:'.$this->orderSn);
+            return ;
+        }
+        if ($orderDetail['IS_DELETE'] == 1) {
+            $this->addError($attribute, '订单已被删除,订单编号为'.$this->orderSn);
+            return ;
+        }
+        // 已挂网或者挂网中的业绩期订单,不能进行删除操作
+        $periodNum = $orderDetail['PERIOD_NUM'];
+        $periodObj = Period::findOneAsArray(['PERIOD_NUM'=>$periodNum]);
+        if (empty($periodObj)) {
+            $this->addError($attribute, '订单对应业绩期不存在,订单编号为'.$this->orderSn.' 业绩期为:'.$periodNum);
+            return ;
+        }
+        if ($periodObj['IS_SENT'] == 1) {
+            $this->addError($attribute, '订单对应业绩期已挂网,订单编号为'.$this->orderSn.' 业绩期为:'.$periodNum);
+            return ;
+        }
+        if ($periodObj['IS_SENDING'] == 1) {
+            $this->addError($attribute, '订单对应业绩期正在挂网,订单编号为'.$this->orderSn.' 业绩期为:'.$periodNum);
+            return ;
+        }
+
+        if ($orderDetail['ORDER_TYPE'] == 'ZC') {
+            $decDetail = DecOrder::findUseDbCalc()
+            ->select('TO_USER_ID,DETAIL_TYPE,UPGRADE_TYPE,IS_DEL')
+            ->where("ORDER_SN=:ORDER_SN", [':ORDER_SN' => $sn])
+            ->asArray()
+            ->one();
+            if (empty($decDetail)) {
+                $this->addError($attribute, '未获取到对应报单信息,订单编号为:'.$this->orderSn);
+                return ;
+            }
+            if ($decDetail['IS_DEL'] == 1) {
+                $this->addError($attribute, '对应报单信息已被删除,订单编号为:'.$this->orderSn);
+                return ;
+            }
+            if ($decDetail['DETAIL_TYPE'] == 2) {
+                // 如果删除升级单,则此升级单必须是用户的最后一个升级单
+                $lastUpgradeOrder = DecOrder::findUseDbCalc()
+                ->select('ORDER_SN')
+                ->where("TO_USER_ID=:TO_USER_ID AND IS_DEL=0 AND DETAIL_TYPE=2", [':TO_USER_ID' => $decDetail['TO_USER_ID']])
+                ->orderBy('CREATED_AT DESC')
+                ->asArray()
+                ->one();
+                $lastUpgradeSn = $lastUpgradeOrder['ORDER_SN'];
+                if ($sn != $lastUpgradeSn) {
+                    $this->addError($attribute, '有更晚的订单,此订单不能删除,订单编号为:'.$this->orderSn);
+                    return ;
+                }
+            } else {
+                // 如果是注册单,但是这个用户存在升级单,则也不能进行删除
+                $hasUpgradeOrder = DecOrder::findUseDbCalc()
+                ->select('TO_USER_ID,DETAIL_TYPE,UPGRADE_TYPE,IS_DEL')
+                ->where("TO_USER_ID=:TO_USER_ID AND IS_DEL=0 AND DETAIL_TYPE=2", [':TO_USER_ID' => $decDetail['TO_USER_ID']])
+                ->asArray()
+                ->one();
+                if (!empty($hasUpgradeOrder)) {
+                    $this->addError($attribute, '此注册报单,存在升级单,无法删除,订单编号为:'.$this->orderSn);
+                    return ;
+                }
+                // 删除注册单,判断是否有复消单,如果存在复消单,需要先删除复消单
+                $hasFxOrder = Order::findUseDbCalc()
+                ->select('SN')
+                ->where("USER_ID=:USER_ID AND IS_DELETE=0 AND ORDER_TYPE='FX'", [':USER_ID' => $decDetail['TO_USER_ID']])
+                ->asArray()
+                ->one();
+                if (!empty($hasFxOrder)) {
+                    $this->addError($attribute, '此注册报单,存在复消单,无法删除,订单编号为:'.$this->orderSn);
+                    return ;
+                }
+            }   
+        }
+        return true; 
+    }
+}