kevin_zhangl 2 лет назад
Родитель
Сommit
5357ecc5ff

+ 3 - 0
backendApi/config/menu.php

@@ -60,6 +60,9 @@ return [
             ['name'=>'外部商城达标订单列表', 'class'=>'', 'icon'=>'', 'controller'=>'shop', 'action'=>'order-standard-list', 'routePath'=>'shop/order-standard-list', 'show'=>1,],
             ['name'=>'上传', 'class'=>'', 'icon'=>'', 'controller'=>'shop', 'action'=>'upload', 'routePath'=>'shop/upload', 'show'=>0,],
 
+            ['name'=>'订单期数调整', 'class'=>'', 'icon'=>'', 'controller'=>'shop', 'action'=>'order-period-adjust', 'routePath'=>'shop/order-period-adjust', 'show'=>1,],
+            ['name'=>'订单详情', 'class'=>'', 'icon'=>'', 'controller'=>'shop', 'action'=>'order-detail', 'routePath'=>'shop/order-detail', 'show'=>0,],
+            ['name'=>'期数检查', 'class'=>'', 'icon'=>'', 'controller'=>'shop', 'action'=>'period-inspect', 'routePath'=>'shop/period-inspect', 'show'=>0,],
         ]
     ],
     'user'=>[

+ 3 - 0
backendApi/config/urlManagerRules.php

@@ -66,6 +66,9 @@ return [
             'POST import-order-standard' => 'import-order-standard',
             'GET remain-pv' => 'remain-pv',
             'GET flow-remain-pv' => 'flow-remain-pv',
+            'GET,POST order-period-adjust' => 'order-period-adjust',
+            'GET order-detail' => 'order-detail',
+            'GET period-inspect' => 'period-inspect',
         ],
     ],
     [

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

@@ -14,6 +14,7 @@ use backendApi\modules\v1\models\lists\shop\DecOrderList;
 use backendApi\modules\v1\models\lists\shop\GoodsList;
 use backendApi\modules\v1\models\lists\shop\OrderDecList;
 use backendApi\modules\v1\models\lists\shop\OrderList;
+use backendApi\modules\v1\models\lists\shop\OrderPeriodAdjustList;
 use backendApi\modules\v1\models\lists\shop\OrderShopList;
 use backendApi\modules\v1\models\lists\shop\OrderStandardList;
 use backendApi\modules\v1\models\lists\shop\PackageList;
@@ -35,8 +36,11 @@ use common\models\forms\ExcelOrderShopForm;
 use common\models\forms\ExcelOrderStandardForm;
 use common\models\forms\OrderDeleteForm;
 use common\models\forms\OrderForm;
+use common\models\forms\OrderPeriodAdjustForm;
 use common\models\forms\ShopGoodsForm;
 use common\models\forms\UploadForm;
+use common\models\Order;
+use common\models\Period;
 use common\models\ShopGoods;
 use yii\web\UploadedFile;
 use yii\base\Exception;
@@ -684,4 +688,83 @@ class ShopController extends BaseController {
         $data = $listObj->getList(['condition'=>$condition, 'params'=>$params]);
         return static::notice($data);
     }
+
+    /**
+     * 订单详情
+     * @return mixed
+     * @throws \yii\web\HttpException
+     */
+    public function actionOrderDetail()
+    {
+        $orderSn = \Yii::$app->request->get('orderSn');
+        $order = Order::findOneAsArray('SN=:SN', [':SN' => $orderSn]);
+        if (!$order) {
+            return static::notice('订单不存在', 400);
+        }
+        // 如果当前订单所在期数已挂网,则不可调整
+        $period = Period::getInfoByPeriodNum($order['PERIOD_NUM']);
+        if (!$period) {
+            return static::notice('期数无效', 400);
+        }
+        if ($period['IS_SENT'] > 0) {
+            return static::notice('订单已挂网', 400);
+        }
+        // 根据订单期数查询可调整期数
+        $availablePeriod = [];
+        if ($order['PERIOD_NUM']) {
+            $availablePeriod = Period::getPeriodList(+$order['PERIOD_NUM'] - 1);
+            foreach ($availablePeriod as $k => $item) {
+                $availablePeriod[$k]['disabled'] = (+$item['IS_SENT'] > 0) || ($order['PERIOD_NUM'] == $item['PERIOD_NUM']);
+            }
+        }
+
+        return static::notice(['order' => $order, 'availablePeriod' => $availablePeriod]);
+    }
+
+    /**
+     * 期数检查
+     * @return mixed
+     * @throws \yii\web\HttpException
+     */
+    public function actionPeriodInspect()
+    {
+        $modernPeriod = \Yii::$app->request->get('modernPeriod');
+        $period = Period::getInfoByPeriodNum($modernPeriod);
+        if (!$period) {
+            return static::notice('期数不存在', 400);
+        }
+        if ($period['IS_SENT'] > 0) {
+            return static::notice('调整后的期数已未挂网', 400);
+        }
+    }
+
+    /**
+     * 调整订单期数
+     * @return mixed
+     * @throws Exception
+     * @throws \yii\db\Exception
+     * @throws \yii\web\HttpException
+     */
+    public function actionOrderPeriodAdjust()
+    {
+        if (\Yii::$app->request->isPost) {
+            $formModel = new OrderPeriodAdjustForm();
+            $formModel->scenario = 'orderPeriodAdjust';
+            if ($formModel->load(\Yii::$app->request->post(), '') && $formModel->periodAdjust()) {
+                return static::notice('成功');
+            } else {
+                return static::notice(Form::formatErrorsForApi($formModel->getErrors()), 400);
+            }
+        } else {
+            $filter = $this->filterCondition([
+                'ORDER_SN' => 'ORDER_SN',
+                'ORIGIN_PERIOD'=> 'ORIGIN_PERIOD',
+                'MODERN_PERIOD'=> 'MODERN_PERIOD',
+                'CREATED_AT'=> 'CREATED_AT',
+            ]);
+            $listObj = new OrderPeriodAdjustList();
+            $data = $listObj->getList(['condition' => $filter['condition'], 'params' => $filter['params']]);
+            return static::notice($data);
+        }
+    }
 }

+ 84 - 0
backendApi/modules/v1/models/lists/shop/OrderPeriodAdjustList.php

@@ -0,0 +1,84 @@
+<?php
+namespace backendApi\modules\v1\models\lists\shop;
+
+use common\libs\dataList\DataListInterface;
+use common\models\OrderPeriodAdjust;
+use common\libs\dataList\column\DateTime;
+
+class OrderPeriodAdjustList extends \common\libs\dataList\DataList implements DataListInterface
+{
+    /**
+     * 列表名称
+     * @return string
+     */
+    public function getListName(){
+        return '订单期数调整列表';
+    }
+
+    /**
+     * 列表筛选到的数据
+     */
+    public function dataHandle()
+    {
+        $this->listData = OrderPeriodAdjust::lists($this->condition, $this->params, [
+            'select' => '*',
+            'orderBy' => 'CREATED_AT DESC, ID DESC',
+            'from' => OrderPeriodAdjust::tableName(),
+            'page' => $this->page,
+            'pageSize' => $this->pageSize,
+        ]);
+    }
+
+    /**
+     * 要展示和导出的所有字段
+     * @return array
+     */
+    public function getColumn(){
+        if (!$this->columns) {
+            $this->columns = [
+                'ID' => null,
+                'ORDER_SN' => [
+                    'header' => '订单号',
+                ],
+                'DEC_SN' => [
+                    'header' => '报单编号',
+                ],
+                'ORIGIN_PERIOD' => [
+                    'header' => '调整前期数',
+                ],
+                'MODERN_PERIOD' => [
+                    'header' => '调整后期数',
+                ],
+                'CREATED_AT' => [
+                    'header' => '调整时间',
+                    'value' => function ($row) {
+                        return (new DateTime([
+                            'value' => $row['CREATED_AT'],
+                        ]))->result();
+                    },
+                ],
+                'ADMIN_ID' => [
+                    'header' => '操作人',
+                ],
+            ];
+        }
+        return $this->columns;
+    }
+
+    /**
+     * 前台用于筛选的类型集合
+     * @return mixed
+     */
+    public function getFilterTypes()
+    {
+        if (!$this->filterTypes) {
+            $this->filterTypes = [
+                'ORDER_SN' => ['name'=> '订单号'],
+                'ORIGIN_PERIOD'=> ['name'=> '调整前期数'],
+                'MODERN_PERIOD'=> ['name'=> '调整后期数'],
+                'CREATED_AT'=> ['name'=> '调整时间', 'other'=>'date'],
+            ];
+        }
+        return $this->filterTypes;
+    }
+}

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

@@ -181,6 +181,18 @@ export const constantRouterMap = [
           ],
         },
       },
+      {
+        path: '/shop/order-period-adjust',
+        component: _import('shop/order-period-adjust'),
+        name: 'shop_order-period-adjust',
+        meta: {
+          title: '订单期数调整',
+          breadcrumb: [
+            {title: '首页', path: '/dashboard/index'},
+            {title: '商城管理', path: '/shop/index'},
+          ],
+        },
+      },
     ],
   },
   {

+ 203 - 0
backendEle/src/views/shop/order-period-adjust.vue

@@ -0,0 +1,203 @@
+<template>
+  <div v-loading="loading">
+    <div class="white-box">
+      <div class="filter-box">
+        <filter-user :filter-types="filterTypes" @select-value="handleFilterUser"></filter-user>
+      </div>
+      <el-table class="table-box" ref="multipleTable" :data="tableData" stripe style="width: 100%;" :height="tool.getTableHeight()">
+        <el-table-column v-for="(tableHeader, key) in tableHeaders" :key="key" :label="tableHeader.header" :width="tableHeader.other.width ? tableHeader.other.width : ''" :prop="tableHeader.other.prop ? tableHeader.other.prop : null">
+          <template slot-scope="scope">
+            <template v-if="scope.row[tableHeader.index].other.tag" >
+              <el-tag :type="scope.row[tableHeader.index].other.tag.type ? scope.row[tableHeader.index].other.tag.type : null" :size="scope.row[tableHeader.index].other.tag.size ? scope.row[tableHeader.index].other.tag.size : null">{{scope.row[tableHeader.index].value}}</el-tag>
+            </template>
+            <template v-else>
+              <div v-html="scope.row[tableHeader.index].value"></div>
+            </template>
+          </template>
+        </el-table-column>
+      </el-table>
+      <div class="white-box-footer">
+        <el-button type="primary" size="small" @click="visible = true" v-show="permission.hasPermission(`shop/order-adjust-period`)">调整订单期数</el-button>
+        <pagination :total="totalCount" :page_size="pageSize" @size-change="handleSizeChange" @current-change="handleCurrentChange"></pagination>
+      </div>
+    </div>
+
+    <el-dialog title="调整订单期数" :visible.sync="visible" width="50%">
+      <el-form ref="form" :model="form" label-width="250px" class="form-page">
+        <el-form-item label="订单编号" required clearable>
+          <el-input v-model="form.orderSn" @change="handleOrderSnChange"></el-input>
+        </el-form-item>
+        <el-form-item label="报单编号" v-show="order.DEC_SN">
+          <el-input v-model="order.DEC_SN" disabled></el-input>
+        </el-form-item>
+        <el-form-item label="用户编号" v-show="order.USER_NAME">
+          <el-input v-model="order.USER_NAME" disabled></el-input>
+        </el-form-item>
+        <el-form-item label="订单类型" v-show="order.ORDER_TYPE">
+          <el-input v-model="order.ORDER_TYPE" disabled></el-input>
+        </el-form-item>
+        <el-form-item label="报单编号" v-show="order.DEC_SN">
+          <el-input v-model="order.DEC_SN" disabled></el-input>
+        </el-form-item>
+        <el-form-item label="PV" v-show="order.PV">
+          <el-input v-model="order.PV" disabled></el-input>
+        </el-form-item>
+        <el-form-item label="订单金额" v-show="order.PAY_AMOUNT">
+          <el-input v-model="order.PAY_AMOUNT" disabled></el-input>
+        </el-form-item>
+        <el-form-item label="创建人编号" v-show="order.CREATE_USER">
+          <el-input v-model="order.CREATE_USER" disabled></el-input>
+        </el-form-item>
+        <el-form-item label="期数" v-show="order.PERIOD_NUM">
+          <el-input v-model="order.PERIOD_NUM" disabled></el-input>
+        </el-form-item>
+        <el-form-item label="调整期数" required>
+          <el-select v-model="form.modernPeriod" placeholder="请选择要调整到的期数">
+            <el-option v-for="item in availablePeriod" :key="item.PERIOD_NUM" :label="item.PERIOD_NUM" :value="item.PERIOD_NUM" :disabled="item.disabled"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item>
+          <el-button type="primary" @click="onSubmit" :loading="submitButtonStat">提交</el-button>
+        </el-form-item>
+      </el-form>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+  import network from '@/utils/network'
+  import tool from '@/utils/tool'
+  import FilterUser from '@/components/FilterUser'
+  import permission from '@/utils/permission'
+  import Pagination from '@/components/Pagination'
+  import filterHelper from '@/utils/filterHelper'
+
+  export default {
+    name: 'shop_order-period-adjust',
+    components: {FilterUser, Pagination},
+    mounted() {
+      this.getData()
+    },
+    data() {
+      return {
+        tableHeaders: null,
+        tableData: null,
+        tableHeight: window.innerHeight - 310,
+        loading: true,
+        currentPage: 1,
+        totalPages: 1,
+        totalCount: 1,
+        pageSize: 20,
+        tool: tool,
+        permission: permission,
+        filterTypes: null,
+        filterModel: {},
+
+        submitButtonStat: false,
+        visible: false,
+        form: {
+          orderSn: '',
+          modernPeriod: '',
+        },
+
+        order: {},
+        availablePeriod: null,
+      }
+    },
+    methods: {
+      handleCurrentChange(page) {
+        this.getData(page, this.pageSize)
+      },
+      handleSizeChange(pageSize) {
+        this.getData(this.currentPage, pageSize)
+      },
+      handleFilterUser(filterData) {
+        filterHelper.handleFilterUser(this, filterData)
+      },
+      getData(page, pageSize) {
+        let filterData = this.filterModel
+          network.getPageData(this, 'shop/order-period-adjust', page, pageSize, filterData, response => {
+            this.filterTypes = response.filterTypes
+            this.allData = response
+          })
+      },
+      handleOrderSnChange() {
+        if (this.form.orderSn) {
+          this.submitButtonStat = true
+          network.getData('shop/order-detail', { orderSn: this.form.orderSn }).then(response => {
+            this.order = response.order
+            this.availablePeriod = response.availablePeriod
+            if (response.availablePeriod && response.availablePeriod[0]) {
+              for (let period of response.availablePeriod) {
+                if (!period['disabled']) {
+                  this.form.modernPeriod = period['PERIOD_NUM']
+                  break
+                }
+              }
+            }
+
+            this.submitButtonStat = false
+          }).catch(error => {
+            this.$message({
+              message: error,
+              type: 'error'
+            })
+            this.submitButtonStat = false
+          })
+        }
+      },
+      handlePeriodChange() {
+        network.getData('shop/period-inspect', { modernPeriod: this.form.modernPeriod }).then(response => {
+
+        }).catch(error => {
+          this.$message({
+            message: error,
+            type: 'error'
+          })
+        })
+      },
+      onSubmit() {
+        this.$confirm('是否要修改当前订单期数?', '提示', {
+          confirmButtonText: '确定',
+          cancelButtonText: '取消',
+          type: 'warning'
+        }).then(() => {
+          this._handleSubmit()
+        }).catch(error => {
+          this.$message({
+            message: error,
+            type: 'error'
+          })
+          this.submitButtonStat = false
+        })
+      },
+      _handleSubmit() {
+        this.submitButtonStat = true
+        network.postData('shop/order-period-adjust', this.form).then(response => {
+          this.$message({
+            message: response,
+            type: 'success'
+          })
+          this.submitButtonStat = false
+          this._clearData()
+        }).catch(error => {
+          this.$message({
+            message: error,
+            type: 'error'
+          })
+          this.submitButtonStat = false
+        })
+      },
+      _clearData(){
+        this.form = {}
+        this.order = {}
+        this.visible = false
+        this.getData()
+      }
+    }
+  }
+</script>
+
+<style scoped>
+
+</style>

+ 51 - 0
common/models/OrderPeriodAdjust.php

@@ -0,0 +1,51 @@
+<?php
+
+namespace common\models;
+
+/**
+ * This is the model class for table "{{%ORDER_PERIOD_ADJUST}}".
+ *
+ * @property string $ID
+ * @property string $ORDER_SN 订单号
+ * @property string $DEC_SN 报单号
+ * @property int $ORIGIN_PERIOD 调整前期数
+ * @property int $MODERN_PERIOD 调整后期数
+ * @property string $ADMIN_ID 创建人
+ * @property int $CREATED_AT 创建时间
+ */
+class OrderPeriodAdjust extends \common\components\ActiveRecord
+{
+    /**
+     * {@inheritdoc}
+     */
+    public static function tableName()
+    {
+        return '{{%ORDER_PERIOD_ADJUST}}';
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function rules()
+    {
+        return [
+            [['ORDER_SN', 'ORIGIN_PERIOD', 'MODERN_PERIOD'], 'required'],
+        ];
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function attributeLabels()
+    {
+        return [
+            'ID' => 'ID',
+            'ORDER_SN' => '订单号',
+            'DEC_SN' => '报单编号',
+            'ORIGIN_PERIOD' => '调整前期数',
+            'MODERN_PERIOD' => '调整后期数',
+            'ADMIN_ID' => '创建人',
+            'CREATED_AT' => '创建时间',
+        ];
+    }
+}

+ 15 - 0
common/models/Period.php

@@ -856,4 +856,19 @@ class Period extends \common\components\ActiveRecord
 
         return $periods;
     }
+
+    /**
+     * 获取期数列表
+     * @param null $periodNum
+     * @param int $limit
+     * @return array|\yii\db\ActiveRecord[]
+     */
+    public static function getPeriodList($periodNum = null, $limit = 10) {
+        if ($periodNum) {
+            $periodList = static::find()->where('PERIOD_NUM >= :PERIOD_NUM', [':PERIOD_NUM' => $periodNum])->select('PERIOD_NUM,IS_SENT,IS_CLOSED')->limit($limit)->asArray()->all();
+        } else {
+            $periodList = static::find()->select('PERIOD_NUM,IS_SENT,IS_CLOSED')->limit($limit)->column();
+        }
+        return $periodList;
+    }
 }

+ 128 - 0
common/models/forms/OrderPeriodAdjustForm.php

@@ -0,0 +1,128 @@
+<?php
+namespace common\models\forms;
+
+use backendApi\modules\v1\models\Admin;
+use common\helpers\Date;
+use common\components\Model;
+use common\helpers\LoggerTool;
+use common\libs\logging\operate\AdminOperate;
+use common\models\DecOrder;
+use common\models\Order;
+use common\models\OrderPeriodAdjust;
+use common\models\Period;
+
+/**
+ * OrderPeriodAdjustForm form
+ */
+class OrderPeriodAdjustForm extends Model
+{
+    public $orderSn;
+    public $modernPeriod;
+
+    public $order;
+
+    public function init() {
+        parent::init();
+        $this->adminOperateLogger = new AdminOperate([
+            'fetchClass' => OrderPeriodAdjust::class,
+        ]);
+    }
+
+    /**
+     * @inheritdoc
+     */
+    public function rules()
+    {
+        return [
+            [['orderSn', 'modernPeriod'], 'trim'],
+            [['orderSn', 'modernPeriod'], 'required'],
+        ];
+    }
+
+    public function attributeLabels()
+    {
+        return [
+            'orderSn' => '订单号',
+            'modernPeriod' => '调整后期数',
+        ];
+    }
+
+    /**
+     * 指定校验场景
+     * @return array
+     */
+    public function scenarios()
+    {
+        $parentScenarios =  parent::scenarios();
+        $customScenarios = [
+            'orderPeriodAdjust' => ['orderSn', 'modernPeriod'],
+        ];
+        return array_merge($parentScenarios, $customScenarios);
+    }
+
+    /**
+     * 校验之前
+     * @return bool
+     */
+    public function beforeValidate()
+    {
+        $parentValidate = parent::beforeValidate();
+        // 校验订单
+        $this->order = Order::findOne(['SN' => $this->orderSn, 'IS_DELETE' => 0]);
+        if (!$this->order) {
+            $this->addError('orderSn', '订单不存在');
+            return false;
+        }
+        // 目前期数:已封期、未挂网可调整
+        $period = Period::getInfoByPeriodNum($this->modernPeriod);
+        if (!$period) {
+            $this->addError('modernPeriod', '期数不存在');
+            return false;
+        }
+        if (!((+$period['IS_CLOSED'] == 1) && (+$period['IS_SENT'] == 0))) {
+            $this->addError('orderSn', '调整后的期数必须是已封期且未挂网');
+            return false;
+        }
+
+        return $parentValidate;
+    }
+
+    /**
+     * @return bool|null
+     */
+    public function periodAdjust()
+    {
+        if (!$this->validate()) {
+            return null;
+        }
+
+        $db = \Yii::$app->db;
+        $transaction = $db->beginTransaction();
+        try {
+            // 调整订单期数
+            Order::updateAll(['PERIOD_NUM' => $this->modernPeriod], 'SN = :SN', [':SN' => $this->orderSn]);
+            // 调整报单期数
+            if ($this->order->DEC_SN) {
+                DecOrder::updateAll(['PERIOD_NUM' => $this->modernPeriod], 'ORDER_SN = :ORDER_SN', ['ORDER_SN' => $this->orderSn]);
+            }
+            // 写入调整记录
+            $orderModel = new OrderPeriodAdjust();
+            $orderModel->ORDER_SN = $this->orderSn;
+            $orderModel->DEC_SN = $this->order->DEC_SN ?? '';
+            $orderModel->ORIGIN_PERIOD = $this->order->PERIOD_NUM;
+            $orderModel->MODERN_PERIOD = $this->modernPeriod;
+            $orderModel->ADMIN_ID = Admin::getAdminNameById(\Yii::$app->user->id);
+            $orderModel->CREATED_AT = Date::nowTime();
+            if (!$orderModel->save()) {
+                $this->addErrors($orderModel->getErrors());
+                return false;
+            }
+            $transaction->commit();
+        } catch(\Exception $e) {
+            $transaction->rollBack();
+            $this->addError('periodAdjust', $e->getMessage());
+            return null;
+        }
+        return true;
+    }
+}