Bläddra i källkod

自动合格,由ng迁移

theo 3 år sedan
förälder
incheckning
c07ce170dc

+ 3 - 0
backendApi/config/menu.php

@@ -47,9 +47,12 @@ return [
             ['name'=>'订单列表', 'class'=>'', 'icon'=>'', 'controller'=>'shop', 'action'=>'order-list', 'routePath'=>'shop/order-list', 'show'=>1,],
             ['name'=>'订单列表导出', 'class'=>'', 'icon'=>'', 'controller'=>'shop', 'action'=>'order-list-export', 'routePath'=>'shop/order-list-export', 'show'=>0,],
             ['name'=>'订单发货', 'class'=>'', 'icon'=>'', 'controller'=>'shop', 'action'=>'order-delivery', 'routePath'=>'shop/order-delivery', 'show'=>0,],
+            ['name'=>'剩余PV', 'class'=>'', 'icon'=>'', 'controller'=>'shop', 'action'=>'remain-pv', 'routePath'=>'shop/remain-pv', 'show'=>1,], // 剩余BV
+            ['name'=>'剩余PV流水', 'class'=>'', 'icon'=>'', 'controller'=>'shop', 'action'=>'flow-remain-pv', 'routePath'=>'shop/flow-remain-pv', 'show'=>1,], // 剩余BV流水
             ['name'=>'外部商城订单列表', 'class'=>'', 'icon'=>'', 'controller'=>'shop', 'action'=>'order-shop-list', 'routePath'=>'shop/order-shop-list', 'show'=>1,],
             ['name'=>'外部商城报单列表', 'class'=>'', 'icon'=>'', 'controller'=>'shop', 'action'=>'order-dec-list', 'routePath'=>'shop/order-dec-list', 'show'=>1,],
             ['name'=>'外部商城达标订单列表', 'class'=>'', 'icon'=>'', 'controller'=>'shop', 'action'=>'order-standard-list', 'routePath'=>'shop/order-standard-list', 'show'=>1,],
+
         ]
     ],
     'user'=>[

+ 2 - 0
backendApi/config/urlManagerRules.php

@@ -63,6 +63,8 @@ return [
             'GET order-standard-list' => 'order-standard-list',
             'POST import-order-standard-to-excel-table' => 'import-order-standard-to-excel-table',
             'POST import-order-standard' => 'import-order-standard',
+            'GET remain-pv' => 'remain-pv',
+            'GET flow-remain-pv' => 'flow-remain-pv',
         ],
     ],
     [

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

@@ -18,6 +18,8 @@ use backendApi\modules\v1\models\lists\shop\OrderShopList;
 use backendApi\modules\v1\models\lists\shop\OrderStandardList;
 use backendApi\modules\v1\models\lists\shop\PackageList;
 use common\helpers\bonus\CalcCache;
+use backendApi\modules\v1\models\lists\shop\RemainPvList;
+use backendApi\modules\v1\models\lists\shop\FlowRemainPvList;
 use common\helpers\Cache;
 use common\helpers\Date;
 use common\helpers\Form;
@@ -650,4 +652,36 @@ class ShopController extends BaseController {
         return static::notice('非法请求', 400);
     }
 
+
+    /*
+     * 剩余BV页
+     *
+     */
+    public function actionRemainPv()
+    {
+        $filter = $this->filterCondition([
+            'USER_NAME' => 'U.USER_NAME',
+        ]);
+        $condition = $filter['condition'];
+        $params = $filter['params'];
+        $listObj = new RemainPvList();
+        $data = $listObj->getList(['condition'=>$condition, 'params'=>$params]);
+        return static::notice($data);
+    }
+
+    /*
+     * 剩余BV流水
+     *
+     */
+    public function actionFlowRemainPv()
+    {
+        $filter = $this->filterCondition([
+            'USER_NAME' => 'U.USER_NAME',
+        ]);
+        $condition = $filter['condition'];
+        $params = $filter['params'];
+        $listObj = new FlowRemainPvList();
+        $data = $listObj->getList(['condition'=>$condition, 'params'=>$params]);
+        return static::notice($data);
+    }
 }

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

@@ -174,6 +174,17 @@ class OrderList extends \common\libs\dataList\DataList implements DataListInterf
                         return $orderType;
                     },
                 ],
+                'IS_AUTO' => [
+                    'header' => 'Is Auto', // 是否自动
+                    'value' => function ($row) {
+                        switch ($row['IS_AUTO']) {
+                            case 1:
+                                return 'Yes';
+                            case 0:
+                                return 'No';
+                        }
+                    },
+                ],
                 'WAREHOUSE' => [
                     'header' => '发货仓',
                 ],
@@ -301,6 +312,14 @@ class OrderList extends \common\libs\dataList\DataList implements DataListInterf
                 'MOBILE'=> ['name'=> '联系方式1'],
                 'PERIOD_NUM'=> ['name'=> '期数'],
                 'CREATED_AT'=> ['name'=> '创建时间', 'other'=>'date'],
+                'IS_AUTO' => [
+                    'name'=>'自动',
+                    'other'=> 'select',
+                    'selectData'=> [
+                        ['id'=>1, 'name'=>'是'],
+                        ['id'=>0, 'name'=>'否'],
+                    ]
+                ]
             ];
         }
         return $this->filterTypes;

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

@@ -157,6 +157,30 @@ export const constantRouterMap = [
             },
 
         },
+      {
+        path: '/shop/remain-pv',
+        component: _import('shop/remain-pv'),
+        name: 'shop_remain-pv',
+        meta: {
+          title: '剩余PV', // 剩余BV
+          breadcrumb: [
+            {title: '首页', path: '/dashboard/index'}, // Dashboard
+            {title: '商城管理', path: '/shop/index'} // 商城管理
+          ],
+        },
+      },
+      {
+        path: '/shop/flow-remain-pv',
+        component: _import('shop/flow-remain-pv'),
+        name: 'shop_flow-remain-pv',
+        meta: {
+          title: '剩余PV流水', // 剩余BV流水
+          breadcrumb: [
+            {title: '首页', path: '/dashboard/index'}, // Dashboard
+            {title: '商城管理', path: '/shop/index'} // 商城管理
+          ],
+        },
+      },
     ],
   },
   {

+ 5 - 1
backendEle/src/views/shop/goods-add.vue

@@ -21,7 +21,9 @@
                 <!-- <el-form-item label="复消购买方式">
                     <el-checkbox  v-for="(value,key) in sellType" v-model="form.sellType[key-1]" :key="key" >{{value.name}}</el-checkbox>
                 </el-form-item> -->
-
+                <el-form-item label="PV分期">
+                    <el-checkbox v-model="form.pvSplit"></el-checkbox>
+                </el-form-item>
                 <el-form-item label="商品编号">
                     <el-input v-model="form.goodsNo"></el-input>
                 </el-form-item>
@@ -100,6 +102,7 @@
                     unit:'',
                     marketPrice:'',
                     sellPrice:'',
+                    pvSplit: '',
                     pricePv:'',
                     point:'',
                     storeNums:'',
@@ -197,6 +200,7 @@
                     type: this.form.type,
                     giftType: sen_gift,
                     sellType: sellType,
+                    pvSplit: this.form.pvSplit,
                     goodsNo: this.form.goodsNo,
                     unit: this.form.unit,
                     marketPrice: this.form.marketPrice,

+ 4 - 1
backendEle/src/views/shop/index.vue

@@ -86,7 +86,9 @@
                     <!-- <el-form-item label="复消购买方式">
                          <el-checkbox  v-for="(value,index) in sell_type" v-model="value.checked" :key="index" >{{value.name}}</el-checkbox>
                     </el-form-item> -->
-
+                    <el-form-item label="PV分期">
+                      <el-checkbox v-model="form.pvSplit" :checked="form.pvSplit">Yes</el-checkbox>
+                    </el-form-item>
                     <el-form-item label="商品编号">
                         <el-input v-model="form.goodsNo"></el-input>
                     </el-form-item>
@@ -245,6 +247,7 @@
                     cover:'',
                     textarea:'',
                     sellDiscount:'',
+                    pvSplit:'',
                     statusdate:'',
                     goodsstatusdate:'',
                     goodsdate:'',

+ 26 - 0
common/models/Order.php

@@ -126,4 +126,30 @@ class Order extends \common\components\ActiveRecord
             'WAREHOUSE' => '发货仓',
         ];
     }
+    /*
+     * 通过 期数和用户ID
+     * 查询当月订单
+     */
+    public static function fetchOrderCurrentMonth($periodNum, $userId){
+        $currentPeriod = Period::findOneAsArray("PERIOD_NUM = :PERIOD_NUM", [':PERIOD_NUM' => $periodNum]);
+
+        switch ($currentPeriod['WEEK_NUMBER']){
+            case 1:
+                $periods = [$periodNum];
+                break;
+            case 2:
+                $periods = [$periodNum-1, $periodNum];
+                break;
+            case 3:
+                $periods = [$periodNum-2, $periodNum-1, $periodNum];
+                break;
+            case 4:
+                $periods = [$periodNum-3, $periodNum-2, $periodNum-1, $periodNum];
+                break;
+        }
+
+        $periodsStr = implode(",", $periods);
+        $orders = Order::find()->where("USER_ID = :USER_ID AND PERIOD_NUM IN ($periodsStr)", [':USER_ID' => $userId]);
+        return $orders;
+    }
 }

+ 17 - 0
common/models/Period.php

@@ -831,4 +831,21 @@ class Period extends \common\components\ActiveRecord
     public static function getMonthNum($startPeriodNum,$endPeriodNum){
         return self::find()->select('CALC_MONTH')->groupBy('CALC_MONTH')->where('PERIOD_NUM>=:START_PERIOD AND PERIOD_NUM<=:END_PERIOD',[':START_PERIOD'=>$startPeriodNum,':END_PERIOD'=>$endPeriodNum])->count();
     }
+
+    /**
+     * 从期数获取当前月的所有期
+     *
+     */
+    public static function getCurrentMonthPeriodByPeriodNum($periodNum){
+        $currentPeriod = self::getInfoByPeriodNum($periodNum);
+        $currentYear = $currentPeriod['CALC_YEAR'];
+        $currentMonth = $currentPeriod['CALC_MONTH'];
+        $periodsArray = self::findAllAsArray(['CALC_YEAR'=>$currentYear,'CALC_MONTH'=>$currentMonth]);
+        $periods = [];
+        foreach ($periodsArray as $p){
+            $periods[] = $p['PERIOD_NUM'];
+        }
+
+        return $periods;
+    }
 }

+ 63 - 2
common/models/forms/OrderForm.php

@@ -18,6 +18,8 @@ use common\models\Region;
 use common\models\ShopGoods;
 use common\models\User;
 use common\models\UserNetwork;
+use common\models\RemainPv;
+use common\models\FlowRemainPv;
 use yii\base\Exception;
 
 /**
@@ -52,6 +54,8 @@ class OrderForm extends Model
     private $_freight;
     private $_payAmount;
     private $_orderGoods;
+    private $_remainPv;
+    private $_realPv;
 
     /**
      * @var Order
@@ -270,6 +274,20 @@ class OrderForm extends Model
         return $this->_model;
     }
 
+    /**
+     * BV分期
+     *
+     *
+     */
+    private function _pvSplit($oPv){
+        $currentPv = $oPv % 300 + 300;
+        $remainPv = $oPv - $currentPv;
+        return [
+            'current' => $currentPv,
+            'remain' => $remainPv
+        ];
+    }
+
     /**
      * 复销
      * @return bool|null
@@ -283,6 +301,7 @@ class OrderForm extends Model
         $ids = $this->goodsId;
         $totalAmount = 0;
         $totalPv = 0;
+        $this->_remainPv = 0;
         foreach ($this->goodsNum as $k => $v) {
             if ($v) {
                 $goods = ShopGoods::findOneAsArray('ID=:ID AND STATUS=1',[':ID'=> $ids[$k]]);
@@ -290,8 +309,22 @@ class OrderForm extends Model
                     $discount = $goods['SELL_DISCOUNT'];
                     $realPrice = $goods['SELL_PRICE'] * $discount;
                     $realPv = $goods['PRICE_PV'] * $discount;
+                    if($goods['PV_SPLIT']==1){ // 当商品为PV分期时
+                        $pvSplit = $this->_pvSplit($realPv);
+                        $currentPv = $pvSplit['current'];
+                        $remainPv = $pvSplit['remain'];
+                        $totalPv += $currentPv * intval($v);
+                        $totalRealPv += $realPv * intval($v);
+                        $this->_remainPv += $remainPv * intval($v);
+                    }else{
+                        $currentPv = $goods['PRICE_PV'];
+                        $totalPv += $realPv * intval($v);
+                        $totalRealPv += $realPv * intval($v);
+                        $remainPv = 0;
+                        $this->_remainPv += 0;
+                    }
                     $totalAmount += $realPrice * intval($v);
-                    $totalPv += $realPv * intval($v);
+//                    $totalPv += $realPv * intval($v);
 //                    if($this->payType=='cash') {
 //                        $discount = $goodsType[$goods['TYPE']]['discount'];
 //                        $realPrice = $goods['SELL_PRICE'] * $discount/100;
@@ -307,9 +340,10 @@ class OrderForm extends Model
                     $this->_orderGoods[] = [
                         'GOODS_ID' => $goods['ID'],
                         'PRICE' => $goods['SELL_PRICE'],
-                        'PV' => $goods['PRICE_PV'],
+                        'PV' => $currentPv, // $goods['PRICE_PV'],
                         'REAL_PRICE' => $realPrice,
                         'REAL_PV' => $realPv,
+                        'REMAIN_PV' => $remainPv,
                         'POINT' => $goods['POINT'],
                         'BUY_NUMS' => intval($v),
                         'SKU_CODE' => $goods['GOODS_NO'],
@@ -320,6 +354,7 @@ class OrderForm extends Model
         }
         $this->_decAmount = $totalAmount;
         $this->_decPv = $totalPv;
+        $this->_realPv = $totalRealPv;
         $this->_freight = ($totalAmount>=300) ? 0 : 15;
         $this->_payAmount = $this->_decAmount + $this->_freight;
 
@@ -412,6 +447,7 @@ class OrderForm extends Model
         $orderModel->PV = $this->payType =='exchange' ? 0 : $this->_decPv;
         $orderModel->PAY_AMOUNT = $this->_payAmount;
         $orderModel->PAY_PV = $this->payType =='exchange' ? 0 : $this->_decPv; // 兑换积分不能算业绩
+        $orderModel->REMAIN_PV = $this->_remainPv;
         $orderModel->PAY_AT = Date::nowTime();
         $orderModel->PAY_TYPE = $this->payType;
         $orderModel->PERIOD_NUM = $nowPeriodNum;
@@ -655,4 +691,29 @@ class OrderForm extends Model
         }
         return $hash;
     }
+
+    public function addFakeOrder($userId, $periodNum){
+        $userName = Info::getUserNameByUserId($userId);
+        $ordNo = $this->_generateSn();
+        $orderModel = new Order();
+        $orderModel->SN = 'OS'.$ordNo;
+        $orderModel->DEC_SN = 'DS'.$ordNo;
+        $orderModel->USER_ID = $userId;
+        $orderModel->USER_NAME = $userName;
+        $orderModel->PERIOD_NUM = $periodNum;
+        $orderModel->CREATE_USER = 'FAKE';
+        $orderModel->ORDER_TYPE = 'FX';
+        $orderModel->STATUS = 1;
+        $orderModel->PV = 30;
+        $orderModel->PAY_PV = 30;
+        $orderModel->P_CALC_MONTH = '1970-01-01';
+        $orderModel->CREATED_AT = Date::nowTime();
+        $orderModel->EXPRESS_TYPE = 1;
+        $orderModel->IS_AUTO = 1;
+        if(!$orderModel->save()){
+            $this->addErrors($orderModel->getErrors());
+            return false;
+        }
+        return $orderModel;
+    }
 }

+ 24 - 0
frontendApi/modules/v1/controllers/DashboardController.php

@@ -19,6 +19,8 @@ use common\models\CalcBonus;
 use common\models\FlowBonus;
 use common\models\Period;
 use common\models\ReconsumePool;
+use common\models\RemainPv;
+use common\models\Order;
 
 class DashboardController extends BaseController
 {
@@ -72,6 +74,26 @@ class DashboardController extends BaseController
                 $wkrd =$k+1;break;
             }
         }
+        //剩余分期PV显示
+        $myRemainPv = RemainPv::findOne(['USER_ID'=>$baseInfo['ID']])->REMAIN_PV ?? 0;
+        // 找到当月的所有订单,计算总PV及总REMAIN_PV
+        $myOrders = Order::fetchOrderCurrentMonth($periodNum, $baseInfo['ID']);
+//        print_r($myOrders);
+        $currentPv = $myOrders->SUM('PV');
+        $currentRemainPv = $myOrders->SUM('REMAIN_PV');
+
+        $totalRemainPv = $myRemainPv + $currentRemainPv;
+//        print_r($totalRemainPv);
+        $remainMonth = round($totalRemainPv / 300);
+//        print_r($remainMonth);
+        if($currentPv >= 300){ // 如果当月合格,则活跃资格延后一个月
+            $activeEndStr = date("Y-m", strtotime('next month'));
+        }else{
+            $activeEndStr = date("Y-m");
+        }
+
+        $activeEndStr = $activeEndStr. " + $remainMonth months";
+        $activeEnd = date("Y-m-d H:i:s", strtotime($activeEndStr));
 
         return static::notice([
             'nowTime' => $nowTime,
@@ -82,6 +104,8 @@ class DashboardController extends BaseController
             'slides'=>Ad::findUseSlaves()->select('ID,IMAGE,LID,TITLE,CONTENT,TYPE')->where('LID=:LID AND STATUS=1', [':LID'=>'7EFF6260A16C3CC7E053693418AC03E4'])->orderBy('SORT ASC')->asArray()->all(),
             'news'=>$news,
             'periodNum'=>$periodNum.'期,'.$curYM['CALC_MONTH'].'月第'.$wkrd.'周,共'.$weeks.'周',
+            'myRemainPv'=>$totalRemainPv,
+            'activeEnd'=>$activeEnd
         ]);
     }
 

+ 6 - 0
frontendEle/src/views/dashboard/index.vue

@@ -17,6 +17,8 @@
               </el-col>
               <el-col :xs="24" :sm="24" :md="24" :lg="4" :xl="12">会员级别:{{decLvName}}</el-col>
               <el-col :xs="24" :sm="24" :md="24" :lg="8" :xl="12">当前业绩期:{{periodNum}}</el-col>
+              <el-col :xs="24" :sm="24" :md="24" :lg="8" :xl="12">剩余PV:{{myRemainPv}}</el-col><!--剩余的PV-->
+              <el-col :xs="24" :sm="24" :md="24" :lg="8" :xl="12">活跃日期截止:{{activeEnd}}</el-col><!--活跃日期截止-->
             </el-row>
           </el-col>
         </el-row>
@@ -86,6 +88,8 @@
         this.news = response.news
         this.periodNum = response.periodNum
         this.decLvName = response.decLvName
+        this.myRemainPv = response.myRemainPv
+        this.activeEnd = response.activeEnd
         this.loading = false
         this.imgLoad()
         return network.getData(`dashboard/bonus-num`)
@@ -117,6 +121,8 @@
         news: [],
         periodNum: '',
         decLvName: '',
+        myRemainPv: '',
+        activeEnd: '',
         bannerHeight: '',
       }
     },