dongxiaoqin 1 год назад
Родитель
Сommit
dfb3130bde

+ 14 - 1
app/adminapi/controller/group_activity/GroupActivityCategoryController.php

@@ -117,7 +117,7 @@ class GroupActivityCategoryController extends BaseAdminController
     public function total() 
     {
         $id = (int)$this->request->param('id');
-        $result = GroupActivityCategoryValidate::total($id);
+        $result = GroupActivityCategoryLogic::total($id);
         return $this->data($result);
     }
 
@@ -136,4 +136,17 @@ class GroupActivityCategoryController extends BaseAdminController
         } 
         return $this->fail(GroupActivityCategoryLogic::getError());
     }
+
+    /**
+     * 分类活动结算
+     */
+    public function settle() 
+    {
+        $params = (new GroupActivityCategoryValidate())->post()->goCheck('settle');
+        $result = GroupActivityCategoryLogic::settle($params);
+        if (true === $result) {
+            return $this->success('提交成功', [], 1, 1);
+        } 
+        return $this->fail(GroupActivityCategoryLogic::getError());
+    }
 }

+ 1 - 1
app/adminapi/lists/group_activity/GroupUserOrderLists.php

@@ -73,7 +73,7 @@ class GroupUserOrderLists extends BaseAdminDataLists implements ListsSearchInter
             ->leftJoin('user d', 'd.id = a.user_id')
             ->where($this->searchWhere)
             ->where($this->queryWhere())
-            ->field(['a.*', 'b.title','b.image','c.sn as group_order_sn','c.status as group_order_status','d.mobile'])
+            ->field(['a.*', 'b.title','b.image','c.price','c.sn as group_order_sn','c.status as group_order_status','d.mobile'])
             ->append(['group_order_status_text','status_text','pay_status_text','pay_way_text','refund_status_text'])
             ->limit($this->limitOffset, $this->limitLength)
             ->order(['a.id' => 'desc'])

+ 54 - 0
app/adminapi/logic/group_activity/GroupActivityCategoryLogic.php

@@ -21,6 +21,7 @@ use think\facade\Log;
 use app\common\logic\BaseLogic;
 use app\common\service\wechat\WeChatMnpService;
 use app\common\model\group_activity\GroupActivity;
+use app\common\model\group_activity\GroupSettlement;
 use app\common\model\group_activity\GroupActivityCategory;
 
 /**
@@ -314,4 +315,57 @@ class GroupActivityCategoryLogic extends BaseLogic
             return false;
         }
     }
+
+    /**
+     * 活动分类统计
+     */
+    public static function total($id)
+    {
+        $lists = GroupActivity::alias('a')
+        ->leftJoin('group_user_order b', 'a.id = b.group_activity_id')
+        ->leftJoin('group_service_work c', 'b.id = c.group_user_order_id and c.service_status = 3')
+        ->field('a.*, SUM(CASE WHEN c.id IS NOT NULL THEN 1 ELSE 0 END) as order_total')
+        ->where('a.group_category_id', $id)
+        ->group('a.id')
+        ->select()
+        ->toArray();
+
+        $settlemented_total = 0;
+        $settlemented_engineer_commission = 0;
+        $settlement_lists = GroupSettlement::alias("a")
+                                ->leftJoin("property_head b","a.property_head_id=b.id")
+                                ->where('a.group_category_id', $id)
+                                ->field("a.*,b.head_name as property_head_name")
+                                ->order("a.id","desc")
+                                ->select()->toArray();
+        foreach ($settlement_lists as &$item) {
+            if ($item['settlement_type'] == 1) {
+                $settlemented_total = bcadd($settlemented_total, $item['settlement_amount'], 2);
+            } else {
+                $settlemented_engineer_commission = bcadd($settlemented_engineer_commission, $item['settlement_amount'], 2);
+            }
+        }
+        return [
+            'lists' => $lists,
+            'settlement_lists' => $settlement_lists,
+            'settlemented_total' => $settlemented_total, //代理人已结算总额
+            'settlemented_engineer_commission' => $settlemented_engineer_commission, //工程师结算总额
+        ];
+    }
+
+    /**
+     * 活动分类结算
+     */
+    public static function settle($params)
+    {
+        $res = GroupSettlement::create([
+            "group_category_id" => $params['id'],
+            "property_head_id" => $params['settlement_type'] == 1 ? GroupActivityCategory::where('id', $params['id'])->value('property_head_id') : 0,
+            "remark" => $params['remark'],
+            "settlement_amount" => $params['settlement_amount'],
+            'settlement_type' => $params['settlement_type'],
+            'create_time' => time(),
+        ]);
+        return $res ? true : false;
+    }
 }

+ 9 - 12
app/adminapi/validate/group_activity/GroupActivityCategoryValidate.php

@@ -14,7 +14,6 @@
 
 namespace app\adminapi\validate\group_activity;
 
-use app\common\model\group_activity\GroupActivity;
 use app\common\validate\BaseValidate;
 
 
@@ -41,6 +40,9 @@ class GroupActivityCategoryValidate extends BaseValidate
         'is_simulate_form' => 'require',
         'images' => 'require',
         'block_data' => 'require',
+        'settlement_amount' =>'require',
+        'real_name' =>'require',
+        'settlement_type' =>'require',
 
     ];
 
@@ -60,6 +62,8 @@ class GroupActivityCategoryValidate extends BaseValidate
         'is_simulate_form' => '是否开启模拟成团',
         'images' => '活动图片',
         'block_data' => '活动分类板块',
+        'settlement_amount' => '结算金额',
+        'settlement_type' => '结算类型',
 
     ];
 
@@ -112,19 +116,12 @@ class GroupActivityCategoryValidate extends BaseValidate
     }
 
     /**
-     * 活动分类统计
+     * @notes 结算场景
+     * @return GroupActivityValidate
      */
-    public static function total($id)
+    public function sceneSettle()
     {
-        $result = GroupActivity::alias('a')
-        ->leftJoin('group_user_order b', 'a.id = b.group_activity_id')
-        ->leftJoin('group_service_work c', 'b.id = c.group_user_order_id and c.service_status = 3')
-        ->field('a.*, SUM(CASE WHEN c.id IS NOT NULL THEN 1 ELSE 0 END) as order_total')
-        ->where('a.group_category_id', $id)
-        ->group('a.id')
-        ->select()
-        ->toArray();
-        return $result;
+        return $this->only(['id','settlement_type','settlement_amount']);
     }
 
 }

+ 9 - 0
app/api/controller/GroupActivityController.php

@@ -9,6 +9,7 @@ use app\api\lists\group_activity\UserOrderLists;
 use app\api\lists\property\PropertyGroupOrderLists;
 use app\api\lists\property\PropertyServiceWorkLists;
 use app\api\lists\property\PropertyGroupActivityLists;
+use app\api\lists\property\PropertyGroupSettlementLists;
 use app\adminapi\logic\group_activity\GroupActivityCategoryLogic;
 
 
@@ -216,5 +217,13 @@ class GroupActivityController extends BaseApiController
     {
         return $this->dataLists(new PropertyGroupActivityLists());
     }
+
+    /**
+     * 代理人团购结算列表
+     */
+    public function propertyGroupSettlementLists()
+    {
+        return $this->dataLists(new PropertyGroupSettlementLists());
+    }
     
 }

+ 1 - 1
app/api/lists/group_activity/UserOrderLists.php

@@ -33,7 +33,7 @@ class UserOrderLists extends BaseApiDataLists implements ListsSearchInterface
     {
         $lists = GroupUserOrder::alias('a')->leftJoin('group_order b','a.group_order_id=b.id')
             ->leftJoin('group_activity c','a.group_activity_id=c.id')
-            ->field('a.id,a.sn,a.group_activity_id,a.status,a.order_amount,a.paid_amount,a.pay_status,a.refund_status,a.create_time,b.goods_id,b.num,b.origin_price,b.end_time,c.title,c.image')
+            ->field('a.id,a.sn,a.group_activity_id,a.status,a.order_amount,a.paid_amount,a.pay_status,a.refund_status,a.create_time,b.goods_id,a.num,b.origin_price,b.end_time,c.title,c.image')
             ->where([
                 'a.user_id' => $this->userId,
             ])

+ 80 - 0
app/api/lists/property/PropertyGroupSettlementLists.php

@@ -0,0 +1,80 @@
+<?php
+namespace app\api\lists\property;
+
+use app\api\lists\BaseApiDataLists;
+use app\common\lists\ListsExtendInterface;
+use app\common\lists\ListsSearchInterface;
+use app\common\model\group_activity\GroupSettlement;
+use app\common\model\property\PropertyHead;
+use app\common\model\works\GroupServiceWork;
+
+/**
+ * 代理人结算列表
+ * Class PropertyGroupSettlementLists
+ * @package app\api\lists\property
+ */
+class PropertyGroupSettlementLists extends BaseApiDataLists implements ListsSearchInterface, ListsExtendInterface
+{
+    /**
+     * @notes 设置搜索条件
+     * @return \string[][]
+     * @author likeadmin
+     * @date 2024/07/07 18:37
+     */
+    public function setSearch(): array
+    {
+        return [
+            '=' => [],
+        ];
+    }
+    public function queryWhere()
+    {
+        // 指定用户
+        $propertyHeadId = 40;//(int)PropertyHead::where('user_id',$this->userId)->value('id');
+        $where[] = ['property_head_id', '=', $propertyHeadId];
+        if (isset($this->params['start_time']) && !empty($this->params['start_time'])) {
+            $monthStart = strtotime(date("Y-m-01",strtotime($this->params['start_time'])));
+            $monthEnd = strtotime(date("Y-m-t 23:59:59",strtotime($this->params['start_time'])));
+            $where[] = ['create_time', 'between', [$monthStart, $monthEnd]];
+        }
+        $where[] = ['settlement_type', '=', 1];
+        return $where;
+    }
+    
+    /**
+     * @notes 获取列表
+     * @return array
+     */
+    public function lists(): array
+    {
+        $lists = GroupSettlement::where($this->queryWhere())
+                    ->order("id","desc")
+                    ->limit($this->limitOffset, $this->limitLength)
+                    ->select()
+                    ->toArray();
+        foreach($lists as &$item) {
+            $item['create_time'] = date('n月j日', strtotime($item['create_time']));
+        }
+        return $lists;
+    }
+
+    /**
+     * @notes  获取数量
+     * @return int
+     */
+    public function count(): int
+    {
+        return GroupSettlement::where($this->queryWhere())->count();
+    }
+
+    /**
+     * @notes 统计结算总额
+     * @return float
+     */
+    public function extend(): array
+    {
+        $settlementedTotal = GroupSettlement::where($this->queryWhere())->sum('settlement_amount');
+        return ["total_amount" => $settlementedTotal];
+    }
+
+}

+ 2 - 2
app/api/logic/GroupActivityLogic.php

@@ -45,7 +45,7 @@ class GroupActivityLogic extends BaseLogic
             $detail['timestamp'] = time();
             $detail['goods'] = self::getEquityGoods($detail['equity_id']);
             //查询用户是否已有付款订单
-            $detail['order'] = GroupUserOrder::with('group_order')->where(['user_id'=>$userId,'group_activity_id'=>$id,'pay_status'=>1])->where('refund_status','<>',1)->field('id,status,num,pay_way,pay_time,pay_status,remark,create_time,group_order_id')->findOrEmpty()->toArray();
+            $detail['order'] = GroupUserOrder::with('group_order')->where(['user_id'=>$userId,'group_activity_id'=>$id,'pay_status'=>1])->where('refund_status','<>',1)->field('id,status,num,order_amount,paid_amount,pay_way,pay_time,pay_status,remark,create_time,group_order_id')->findOrEmpty()->toArray();
         }
 
         return $detail;
@@ -125,7 +125,7 @@ class GroupActivityLogic extends BaseLogic
      * @notes 用户订单详情
      */
     public static function userOrderDetail($order_id,$userId){
-        $detail = GroupUserOrder::with('groupOrder')->where(['id'=>$order_id, 'user_id' => $userId])->field('id,mobile,sn,status,num,pay_way,pay_time,pay_status,refund_status,remark,create_time,group_order_id,group_activity_id,user_equity_id,area,address')->findOrEmpty()->toArray();
+        $detail = GroupUserOrder::with('groupOrder')->where(['id'=>$order_id, 'user_id' => $userId])->field('id,mobile,sn,status,num,pay_way,order_amount,paid_amount,pay_time,pay_status,refund_status,remark,create_time,group_order_id,group_activity_id,user_equity_id,area,address')->findOrEmpty()->toArray();
         if ($detail) {
             $detail['is_refund'] = 0;
             if ($detail['pay_status'] == 1 && $detail['refund_status'] == 0) {

+ 32 - 0
app/common/model/group_activity/GroupSettlement.php

@@ -0,0 +1,32 @@
+<?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\group_activity;
+
+use app\common\model\BaseModel;
+
+/**
+ * 拼团结算模型
+ * Class GroupSettlement
+ * @package app\common\model\group_activity
+ */
+class GroupSettlement extends BaseModel
+{
+    protected $name = 'group_settlement';
+    
+    public function getCreateTimeAttr($value,$data)
+    {
+        return !empty($data['create_time'])?date('Y-m-d H:i:s',$data['create_time']):'';
+    }
+}

+ 19 - 10
app/workerapi/controller/SaleController.php

@@ -14,23 +14,14 @@
 
 namespace app\workerapi\controller;
 
-use app\common\enum\notice\NoticeEnum;
-use app\common\model\master_worker\MasterWorker;
-use app\common\model\master_worker_register\MasterWorkerRegister;
-use app\common\model\notice\NoticeSetting;
-use app\common\model\sale\Sale;
-use app\common\service\wechat\WeChatOaService;
 use app\workerapi\lists\MasterWorkerRegisterLists;
 use app\workerapi\lists\PropertyHeadLists;
 use app\workerapi\lists\TenantRegisterLists;
-use app\workerapi\logic\DictLogic;
-use app\workerapi\logic\LoginLogic;
 use app\workerapi\logic\MasterWorkerRegisterLogic;
 use app\workerapi\logic\PropertyHeadLogic;
 use app\workerapi\logic\SaleLogic;
 use app\workerapi\logic\TenantRegisterLogic;
-use app\workerapi\validate\LoginAccountValidate;
-use app\workerapi\validate\RegisterValidate;
+use app\workerapi\lists\GroupActivityLists;
 
 
 /**
@@ -123,4 +114,22 @@ class SaleController extends BaseApiController
         return $this->data($result);
     }
 
+    /**
+     * 销售查看团购分类列表
+     */
+    public function getGroupActivityList()
+    {
+        return $this->dataLists(new GroupActivityLists());
+    }
+
+    /**
+     * 销售查看团购分类详情
+     */
+    public function getGroupActivityDetail()
+    {
+        $params = request()->get();
+        $result = PropertyHeadLogic::groupActivityDetail($params);
+        return $this->data($result);
+    }
+
 }

+ 76 - 0
app/workerapi/lists/GroupActivityLists.php

@@ -0,0 +1,76 @@
+<?php
+namespace app\workerapi\lists;
+
+use app\workerapi\logic\SaleLogic;
+use app\api\lists\BaseApiDataLists;
+use app\common\lists\ListsSearchInterface;
+use app\common\model\group_activity\GroupActivityCategory;
+
+/**
+ * 销售-拼团活动列表
+ * Class GroupActivityLists
+ * @package app\api\lists\property
+ */
+class GroupActivityLists extends BaseApiDataLists implements ListsSearchInterface
+{
+    /**
+     * @notes 设置搜索条件
+     * @return \string[][]
+     * @author likeadmin
+     * @date 2024/07/07 18:37
+     */
+    public function setSearch(): array
+    {
+        return [
+            '=' => [],
+        ];
+    }
+    public function queryWhere()
+    {
+        // 指定销售
+        $sale_id = SaleLogic::getSaleIdByToken($this->params['sale_token']??'00000');
+        $where[] = ['b.sale_id', '=', $sale_id];
+        if (isset($this->params['start_time']) && !empty($this->params['start_time'])) {
+            $monthStart = strtotime(date("Y-m-01",strtotime($this->params['start_time'])));
+            $monthEnd = strtotime(date("Y-m-t 23:59:59",strtotime($this->params['start_time'])));
+            $where[] = ['start_time', 'between', [$monthStart, $monthEnd]];
+        }
+        return $where;
+    }
+    
+    /**
+     * @notes 获取列表
+     * @return array
+     */
+    public function lists(): array
+    {
+        $lists = GroupActivityCategory::alias("a")
+            ->leftJoin("property_head b","a.property_head_id=b.id")
+            ->where($this->queryWhere())
+            ->field('a.id,a.title,a.start_time,a.end_time,a.service_time')
+            ->limit($this->limitOffset, $this->limitLength)
+            ->order('a.id', 'desc')
+            ->select()
+            ->toArray();
+        foreach($lists as &$item) {
+            $item['start_time'] = date('Y-m-d', strtotime($item['start_time']));
+            $item['end_time'] = date('m-d', $item['end_time']);
+            $item['service_time'] = date('Y-m-d', strtotime($item['service_time']));
+        }
+        
+        return $lists;
+    }
+
+    /**
+     * @notes  获取数量
+     * @return int
+     */
+    public function count(): int
+    {
+        return GroupActivityCategory::alias("a")
+                ->leftJoin("property_head b","a.property_head_id=b.id")
+                ->where($this->queryWhere())
+                ->count();
+    }
+
+}

+ 23 - 5
app/workerapi/logic/PropertyHeadLogic.php

@@ -2,14 +2,15 @@
 namespace app\workerapi\logic;
 
 
-use app\adminapi\logic\user\UserLogic;
-use app\common\model\property\PropertyHead;
-use app\common\logic\BaseLogic;
-use app\common\model\user\User;
-use app\common\service\wechat\WeChatMnpService;
 use Exception;
 use think\facade\Db;
 use think\facade\Log;
+use app\common\logic\BaseLogic;
+use app\common\model\user\User;
+use app\adminapi\logic\user\UserLogic;
+use app\common\model\property\PropertyHead;
+use app\common\service\wechat\WeChatMnpService;
+use app\common\model\group_activity\GroupActivity;
 
 
 /**
@@ -32,4 +33,21 @@ class PropertyHeadLogic extends BaseLogic
     {
         return PropertyHead::findOrEmpty($params['id'])->append(['city_text'])->toArray();
     }
+
+    public static function groupActivityDetail($params): array
+    {   
+        $lists = GroupActivity::alias("a")
+            ->leftJoin("group_user_order b","a.id=b.group_activity_id")
+            ->where('a.group_category_id',$params['id'])
+            ->field([
+                'a.id','a.title',
+                'SUM(CASE WHEN refund_status = 0 THEN 1 ELSE 0 END) AS pay_count',
+                'SUM(CASE WHEN refund_status > 0 THEN 1 ELSE 0 END) AS refund_count'
+                ]
+            )
+            ->group('a.id') 
+            ->select()
+            ->toArray();
+        return $lists;
+    }
 }