فهرست منبع

add - 销售绩效

liugc 1 سال پیش
والد
کامیت
8ea83179ae

+ 71 - 6
app/adminapi/lists/sale/SalePerformanceLists.php

@@ -16,8 +16,11 @@ namespace app\adminapi\lists\sale;
 
 
 use app\adminapi\lists\BaseAdminDataLists;
+use app\adminapi\logic\sale\SaleRulesLogic;
+use app\common\model\property\PropertyHead;
 use app\common\model\sale\Sale;
 use app\common\lists\ListsSearchInterface;
+use app\common\model\sale\SaleRules;
 use think\facade\Db;
 
 
@@ -30,6 +33,8 @@ class SalePerformanceLists extends BaseAdminDataLists implements ListsSearchInte
 {
 
     public $count = 0;
+    public $startDateTime = 0;
+    public $endDateTime = 0;
 
     /**
      * @notes 设置搜索条件
@@ -46,7 +51,14 @@ class SalePerformanceLists extends BaseAdminDataLists implements ListsSearchInte
     {
         $where = [];
         if(isset($this->params['time_range']) && $this->params['time_range']){
-
+            $this->startDateTime = strtotime($this->params['time_range'][0]);
+            $this->endDateTime = strtotime($this->params['time_range'][1])+86400-1;
+        }else{
+            $this->startDateTime = strtotime('-1 month');
+            $this->endDateTime = time();
+        }
+        if(isset($this->params['sale_id']) && $this->params['sale_id']){
+            $where[] = ['s.id','=',$this->params['sale_id']];
         }
         return $where;
     }
@@ -62,32 +74,46 @@ class SalePerformanceLists extends BaseAdminDataLists implements ListsSearchInte
      */
     public function lists(): array
     {
+        $this->queryWhere();
         $directWorkerCountSub = Db::table('la_master_worker_register')
             ->field(['sale_id', Db::raw('COUNT(DISTINCT worker_id) AS direct_worker_count')])
             ->where('worker_id', '>', 0)
             ->where('sale_id', '>', 0)
+            ->whereBetweenTime('create_time',$this->startDateTime, $this->endDateTime)
             ->group('sale_id')
             ->buildSql();
         $tenantWorkerCountSub = Db::table('la_tenant_register')
             ->alias('lr')
-            ->leftJoin('la_master_worker mw', 'lr.tenant_id = mw.tenant_id')
+            ->join('la_master_worker mw', 'lr.tenant_id = mw.tenant_id')
             ->field(['lr.sale_id', Db::raw('COUNT(DISTINCT mw.id) AS tenant_worker_count')])
             ->where('lr.tenant_id', '>', 0)
+            ->whereBetweenTime('lr.create_time',$this->startDateTime, $this->endDateTime)
             ->group('lr.sale_id')
             ->buildSql();
-        return Db::table('la_sale')
+        $lists = Db::table('la_sale')
             ->alias('s')
             ->leftJoin([$directWorkerCountSub => 'dwc'], 's.id = dwc.sale_id')
             ->leftJoin([$tenantWorkerCountSub => 'twc'], 's.id = twc.sale_id')
             ->field([
                 's.id',
                 's.sale_name',
+                's.mobile',
                 Db::raw('COALESCE(dwc.direct_worker_count, 0) AS direct_worker_count'),
                 Db::raw('COALESCE(twc.tenant_worker_count, 0) AS tenant_worker_count'),
-                Db::raw('COALESCE(dwc.direct_worker_count, 0) + COALESCE(twc.tenant_worker_count, 0) AS total_worker_count')
+                Db::raw('COALESCE(dwc.direct_worker_count, 0) + COALESCE(twc.tenant_worker_count, 0)*10 AS total_worker_count')
             ])
             ->limit($this->limitOffset, $this->limitLength)
+            ->where($this->queryWhere())
             ->select()->toArray();
+        foreach ($lists as &$v) {
+            //$v['total_worker_count']
+            //$v['total_worker_amount']
+            $v['total_worker_amount'] = (SaleRulesLogic::getSaleAmountByRating((float)$v['total_worker_count'],1) * $v['total_worker_count']);
+            //$v['id']
+            $v['total_property_count'] = 0;
+            $v['total_property_amount'] = $this->getSaleAmountBySaleId($v['id']);
+        }
+        return $lists;
     }
 
 
@@ -99,10 +125,12 @@ class SalePerformanceLists extends BaseAdminDataLists implements ListsSearchInte
      */
     public function count(): int
     {
+        $this->queryWhere();
         $directWorkerCountSub = Db::table('la_master_worker_register')
             ->field(['sale_id', Db::raw('COUNT(DISTINCT worker_id) AS direct_worker_count')])
             ->where('worker_id', '>', 0)
             ->where('sale_id', '>', 0)
+            ->whereBetweenTime('create_time',$this->startDateTime, $this->endDateTime)
             ->group('sale_id')
             ->buildSql();
         $tenantWorkerCountSub = Db::table('la_tenant_register')
@@ -110,6 +138,7 @@ class SalePerformanceLists extends BaseAdminDataLists implements ListsSearchInte
             ->leftJoin('la_master_worker mw', 'lr.tenant_id = mw.tenant_id')
             ->field(['lr.sale_id', Db::raw('COUNT(DISTINCT mw.id) AS tenant_worker_count')])
             ->where('lr.tenant_id', '>', 0)
+            ->whereBetweenTime('lr.create_time',$this->startDateTime, $this->endDateTime)
             ->group('lr.sale_id')
             ->buildSql();
         return Db::table('la_sale')
@@ -123,16 +152,52 @@ class SalePerformanceLists extends BaseAdminDataLists implements ListsSearchInte
                 Db::raw('COALESCE(twc.tenant_worker_count, 0) AS tenant_worker_count'),
                 Db::raw('COALESCE(dwc.direct_worker_count, 0) + COALESCE(twc.tenant_worker_count, 0) AS total_worker_count')
             ])
+            ->where($this->queryWhere())
             ->count();
     }
 
     public function setExcelComplexFields(): array
     {
-        $zh_cn_fields = [];
-        $data_fields = [];
+        $zh_cn_fields = [
+            '姓名','手机号','入驻加盟总绩效金额','物业合作总绩效金额'
+        ];
+        $data_fields = ['sale_name','mobile','total_worker_amount','total_property_amount'];
         return [
             'zh_cn_fields' => $zh_cn_fields,
             'data_fields' => $data_fields
         ];
     }
+
+
+
+
+    /**
+     * 根据档位获取销售绩效金额
+     *
+     * @param int $rating 档位
+     * @return float|null 对应的金额,若未找到匹配的档位则返回0
+     */
+    public function getSaleAmountBySaleId(int $sale_id): ?float
+    {
+        $this->queryWhere();
+        $rating_values = PropertyHead::where('sale_id', $sale_id)
+            ->where('is_cooperate', 1)
+            ->whereBetweenTime('create_time',$this->startDateTime, $this->endDateTime)
+            ->column('rating_value');
+        $countAmount = 0;
+        foreach ($rating_values as $rating_value) {
+            $countAmount += SaleRulesLogic::getSaleAmountByRating((float)$rating_value, 2);
+        }
+        return $countAmount;
+    }
+
+
+
+
+
+
+
+
+
+
 }

+ 4 - 0
app/adminapi/logic/property/PropertyHeadLogic.php

@@ -71,6 +71,8 @@ class PropertyHeadLogic extends BaseLogic
                 'door_images' => $params['door_images']??'',
                 'openid' => $params['openid']??'',
                 'corporate_bank_name' => $params['corporate_bank_name']??'',
+                'scale_images' => $params['scale_images']??'',
+                'rating_value' => $params['rating_value']??0,
             ]);
 
             Db::commit();
@@ -126,6 +128,8 @@ class PropertyHeadLogic extends BaseLogic
                 'door_images' => $params['door_images']??'',
                 'openid' => $params['openid']??'',
                 'corporate_bank_name' => $params['corporate_bank_name']??'',
+                'scale_images' => $params['scale_images']??'',
+                'rating_value' => $params['rating_value']??0,
             ]);
 
 

+ 139 - 0
app/adminapi/logic/sale/SaleRulesLogic.php

@@ -0,0 +1,139 @@
+<?php
+// +----------------------------------------------------------------------
+// | likeadmin快速开发前后端分离管理后台(PHP版)
+// +----------------------------------------------------------------------
+// | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
+// | 开源版本可自由商用,可去除界面版权logo
+// | gitee下载:https://gitee.com/likeshop_gitee/likeadmin
+// | github下载:https://github.com/likeshop-github/likeadmin
+// | 访问官网:https://www.likeadmin.cn
+// | likeadmin团队 版权所有 拥有最终解释权
+// +----------------------------------------------------------------------
+// | author: likeadminTeam
+// +----------------------------------------------------------------------
+
+namespace app\adminapi\logic\sale;
+
+
+use app\common\model\sale\SaleRules;
+use app\common\logic\BaseLogic;
+use think\facade\Db;
+
+
+/**
+ * SaleRules逻辑
+ * Class SaleRulesLogic
+ * @package app\adminapi\logic
+ */
+class SaleRulesLogic extends BaseLogic
+{
+
+
+    /**
+     * @notes 添加
+     * @param array $params
+     * @return bool
+     * @author likeadmin
+     * @date 2025/03/04 17:21
+     */
+    public static function add(array $params): bool
+    {
+        Db::startTrans();
+        try {
+            SaleRules::create([
+                'name' => $params['name'],
+                'type' => $params['type'],
+                'rating_start' => $params['rating_start'],
+                'rating_end' => $params['rating_end'],
+                'rate' => $params['rate']
+            ]);
+
+            Db::commit();
+            return true;
+        } catch (\Exception $e) {
+            Db::rollback();
+            self::setError($e->getMessage());
+            return false;
+        }
+    }
+
+
+    /**
+     * @notes 编辑
+     * @param array $params
+     * @return bool
+     * @author likeadmin
+     * @date 2025/03/04 17:21
+     */
+    public static function edit(array $params): bool
+    {
+        Db::startTrans();
+        try {
+            SaleRules::where('id', $params['id'])->update([
+                'name' => $params['name'],
+                'type' => $params['type'],
+                'rating_start' => $params['rating_start'],
+                'rating_end' => $params['rating_end'],
+                'rate' => $params['rate']
+            ]);
+
+            Db::commit();
+            return true;
+        } catch (\Exception $e) {
+            Db::rollback();
+            self::setError($e->getMessage());
+            return false;
+        }
+    }
+
+
+    /**
+     * @notes 删除
+     * @param array $params
+     * @return bool
+     * @author likeadmin
+     * @date 2025/03/04 17:21
+     */
+    public static function delete(array $params): bool
+    {
+        return SaleRules::destroy($params['id']);
+    }
+
+
+    /**
+     * @notes 获取详情
+     * @param $params
+     * @return array
+     * @author likeadmin
+     * @date 2025/03/04 17:21
+     */
+    public static function detail($params): array
+    {
+        return SaleRules::findOrEmpty($params['id'])->toArray();
+    }
+
+    /**
+     * 根据档位获取销售绩效金额
+     *
+     * @param float $rating 档位
+     * @return float|null 对应的金额,若未找到匹配的档位则返回0
+     */
+    public static function getSaleAmountByRating(float $rating,int $type): ?float
+    {
+        $rule = SaleRules::where('type', $type)
+            ->where('rating_start', '<=',$rating)
+            ->where('rating_end', '>',$rating)
+            ->findOrEmpty();
+        if (!$rule->isEmpty()){
+            return $rule['rate']??0;
+        }
+        return 0;
+    }
+
+
+
+
+
+
+
+}

+ 34 - 0
app/common/model/sale/SaleRules.php

@@ -0,0 +1,34 @@
+<?php
+// +----------------------------------------------------------------------
+// | likeadmin快速开发前后端分离管理后台(PHP版)
+// +----------------------------------------------------------------------
+// | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
+// | 开源版本可自由商用,可去除界面版权logo
+// | gitee下载:https://gitee.com/likeshop_gitee/likeadmin
+// | github下载:https://github.com/likeshop-github/likeadmin
+// | 访问官网:https://www.likeadmin.cn
+// | likeadmin团队 版权所有 拥有最终解释权
+// +----------------------------------------------------------------------
+// | author: likeadminTeam
+// +----------------------------------------------------------------------
+
+namespace app\common\model\sale;
+
+
+use app\common\model\BaseModel;
+
+
+
+/**
+ * SaleRules模型
+ * Class SaleRules
+ * @package app\common\model
+ */
+class SaleRules extends BaseModel
+{
+    
+    protected $name = 'sale_rules';
+    
+
+    
+}

+ 1 - 0
config/export.php

@@ -16,5 +16,6 @@ return [
         '7' =>  'sale.PropertyHeadAnalysisLists',
         '2' =>  'master_worker.MasterWorkerServiceOrderLists',
         '8' =>  'property.PropertyHeadLists',
+        '9' =>  'sale.SalePerformanceLists',
     ],
 ];