Przeglądaj źródła

Merge branch 'master' of e.coding.net:zdap/weixiu/weixiu_api into service_area-m

liugc 1 rok temu
rodzic
commit
b130e3f4b7

+ 117 - 0
app/adminapi/controller/equity/EquityOrderController.php

@@ -0,0 +1,117 @@
+<?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\controller\equity;
+
+
+use app\adminapi\controller\BaseAdminController;
+use app\adminapi\lists\equity\EquityOrderLists;
+use app\adminapi\logic\equity\EquityOrderLogic;
+use app\adminapi\validate\equity\EquityOrderValidate;
+
+
+/**
+ * EquityOrder控制器
+ * Class EquityOrderController
+ * @package app\adminapi\controller
+ */
+class EquityOrderController extends BaseAdminController
+{
+
+
+    /**
+     * @notes 获取列表
+     * @return \think\response\Json
+     * @author likeadmin
+     * @date 2024/12/25 13:32
+     */
+    public function lists()
+    {
+        return $this->dataLists(new EquityOrderLists());
+    }
+
+
+    /**
+     * @notes 添加
+     * @return \think\response\Json
+     * @author likeadmin
+     * @date 2024/12/25 13:32
+     */
+    public function add()
+    {
+        $params = (new EquityOrderValidate())->post()->goCheck('add');
+        $result = EquityOrderLogic::add($params);
+        if (true === $result) {
+            return $this->success('添加成功', [], 1, 1);
+        }
+        return $this->fail(EquityOrderLogic::getError());
+    }
+
+
+    /**
+     * @notes 编辑
+     * @return \think\response\Json
+     * @author likeadmin
+     * @date 2024/12/25 13:32
+     */
+    public function edit()
+    {
+        $params = (new EquityOrderValidate())->post()->goCheck('edit');
+        $result = EquityOrderLogic::edit($params);
+        if (true === $result) {
+            return $this->success('编辑成功', [], 1, 1);
+        }
+        return $this->fail(EquityOrderLogic::getError());
+    }
+
+
+    /**
+     * @notes 删除
+     * @return \think\response\Json
+     * @author likeadmin
+     * @date 2024/12/25 13:32
+     */
+    public function delete()
+    {
+        $params = (new EquityOrderValidate())->post()->goCheck('delete');
+        EquityOrderLogic::delete($params);
+        return $this->success('删除成功', [], 1, 1);
+    }
+
+
+    /**
+     * @notes 获取详情
+     * @return \think\response\Json
+     * @author likeadmin
+     * @date 2024/12/25 13:32
+     */
+    public function detail()
+    {
+        $params = (new EquityOrderValidate())->goCheck('detail');
+        $result = EquityOrderLogic::detail($params);
+        return $this->data($result);
+    }
+
+    public function addOrder()
+    {
+        $params = (new EquityOrderValidate())->post()->goCheck('detail');
+        $result = EquityOrderLogic::addOrder($params);
+        if (false === $result) {
+            return $this->fail(EquityOrderLogic::getError());
+        }
+        return $this->success('下单成功', [], 1, 1);
+    }
+
+}

+ 19 - 1
app/adminapi/controller/equity/UserEquityController.php

@@ -19,7 +19,9 @@ namespace app\adminapi\controller\equity;
 use app\adminapi\controller\BaseAdminController;
 use app\adminapi\lists\equity\UserEquityLists;
 use app\adminapi\logic\equity\UserEquityLogic;
+use app\adminapi\logic\export\ExportLogic;
 use app\adminapi\validate\equity\UserEquityValidate;
+use app\common\service\ExcelExportService;
 
 
 /**
@@ -110,5 +112,21 @@ class UserEquityController extends BaseAdminController
         $result = UserEquityLogic::serviceWorkDetail($params);
         return $this->data($result);
     }
-
+    public function download()
+    {
+        $params = $this->request->post();
+        $filename = "权益卡列表";
+        $result = ExportLogic::add([
+            'download_type' => 3,
+            'params' => $params,
+            'name' => $filename,
+            'admin_id' => $this->adminId,
+        ]);
+        if (false === $result) {
+            return $this->fail(ExportLogic::getError());
+        }
+        // 暂时 - 立即生成导出文件
+        (new ExcelExportService)->download($result);
+        return $this->success('添加成功-'.$result, [], 1, 1);
+    }
 }

+ 7 - 2
app/adminapi/controller/property/PropertyActivityController.php

@@ -116,9 +116,14 @@ class PropertyActivityController extends BaseAdminController
     }
 
     // 上线前的旧数据处理为可用的新数据
-    public function newDataExecute()
+    public function copy()
     {
-        dd(PropertyActivityLogic::newDataExecute());
+        $params = (new PropertyActivityValidate())->post()->goCheck('detail');
+        $result = PropertyActivityLogic::copy($params);
+        if (true === $result) {
+            return $this->success('复制成功', [], 1, 1);
+        }
+        return $this->fail(PropertyActivityLogic::getError());
     }
 
 

+ 83 - 0
app/adminapi/lists/equity/EquityOrderLists.php

@@ -0,0 +1,83 @@
+<?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\lists\equity;
+
+
+use app\adminapi\lists\BaseAdminDataLists;
+use app\common\model\equity\EquityOrder;
+use app\common\lists\ListsSearchInterface;
+use app\common\model\user\User;
+
+
+/**
+ * EquityOrder列表
+ * Class EquityOrderLists
+ * @package app\adminapi\lists
+ */
+class EquityOrderLists extends BaseAdminDataLists implements ListsSearchInterface
+{
+
+
+    /**
+     * @notes 设置搜索条件
+     * @return \string[][]
+     * @author likeadmin
+     * @date 2024/12/25 13:32
+     */
+    public function setSearch(): array
+    {
+        if(isset($this->params['mobile']) && !empty($this->params['mobile'])){
+            $userId = User::where('mobile',$this->params['mobile'])->value('id')??-1;
+            $this->params['user_id'] = $userId;
+        }
+        return [
+            '=' => ['user_id', 'description', 'price', 'create_order_time', 'service_work_id', 'equity_id', 'status', 'property_head_id', 'remark'],
+
+        ];
+    }
+
+
+    /**
+     * @notes 获取列表
+     * @return array
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\DbException
+     * @throws \think\db\exception\ModelNotFoundException
+     * @author likeadmin
+     * @date 2024/12/25 13:32
+     */
+    public function lists(): array
+    {
+        return EquityOrder::with(['equityConfig','user','propertyHead','serviceWork'])->where($this->searchWhere)
+            ->field(['id', 'user_id', 'description', 'price', 'create_order_time', 'service_work_id', 'equity_id', 'status', 'property_head_id', 'remark'])
+            ->limit($this->limitOffset, $this->limitLength)
+            ->order(['id' => 'desc'])
+            ->select()
+            ->toArray();
+    }
+
+
+    /**
+     * @notes 获取数量
+     * @return int
+     * @author likeadmin
+     * @date 2024/12/25 13:32
+     */
+    public function count(): int
+    {
+        return EquityOrder::where($this->searchWhere)->count();
+    }
+
+}

+ 16 - 3
app/adminapi/lists/equity/UserEquityLists.php

@@ -39,7 +39,7 @@ class UserEquityLists extends BaseAdminDataLists implements ListsSearchInterface
     public function setSearch(): array
     {
         if(isset($this->params['mobile']) && !empty($this->params['mobile'])){
-            $userId = User::where('mobile',$this->params['mobile'])->value('id')??0;
+            $userId = User::where('mobile',$this->params['mobile'])->value('id')??-1;
             $this->params['user_id'] = $userId;
         }
         return [
@@ -48,6 +48,18 @@ class UserEquityLists extends BaseAdminDataLists implements ListsSearchInterface
         ];
     }
 
+    public function queryWhere()
+    {
+        $where = [];
+        if (isset($this->params['is_binding']) && !empty($this->params['is_binding'])) {
+            if((int)$this->params['is_binding'] === 1){
+                $where[] = ['user_id','>',0];
+            }else{
+                $where[] = ['user_id','=',0];
+            }
+        }
+        return $where;
+    }
 
     /**
      * @notes 获取列表
@@ -61,8 +73,9 @@ class UserEquityLists extends BaseAdminDataLists implements ListsSearchInterface
     public function lists(): array
     {
         return UserEquity::with(['equityConfig', 'goods','user'])
-        ->where($this->searchWhere)
-            ->field(['id', 'user_id', 'equity_id', 'goods_id', 'number', 'end_time'])
+            ->where($this->searchWhere)
+            ->where($this->queryWhere())
+            ->field(['id', 'user_id', 'equity_id', 'goods_id', 'number', 'end_time','code','IF(user_id=0,2,1) as is_binding'])
             ->limit($this->limitOffset, $this->limitLength)
             ->order(['id' => 'desc'])
             ->select()

+ 3 - 2
app/adminapi/lists/sale/PropertyHeadAnalysisLists.php

@@ -39,7 +39,7 @@ class PropertyHeadAnalysisLists extends BaseAdminDataLists implements ListsSearc
     public function setSearch(): array
     {
         return [
-            '=' => ['sale_group_id', 'property_head_id','sale_type', 'sale_id'],
+            '=' => ['a.sale_group_id', 'a.property_head_id','a.sale_type', 'a.sale_id'],
 
         ];
     }
@@ -74,7 +74,8 @@ class PropertyHeadAnalysisLists extends BaseAdminDataLists implements ListsSearc
                 Db::raw("COUNT(a.work_id) AS work_count,SUM(b.work_amount) AS total_sales_amount")
             ])
             ->where('a.sale_type', 'in', [1, 2])
-            //->where('a.order_status', 3)
+            ->where($this->searchWhere)
+            ->where($this->queryWhere())
             ->where('b.service_status', 3)
             ->group('a.property_head_id')
             ->limit($this->limitOffset, $this->limitLength)

+ 2 - 1
app/adminapi/lists/sale/SaleAnalysisLists.php

@@ -39,7 +39,7 @@ class SaleAnalysisLists extends BaseAdminDataLists implements ListsSearchInterfa
     public function setSearch(): array
     {
         return [
-            '=' => ['sale_group_id', 'property_head_id','sale_type', 'sale_id'],
+            '=' => ['a.sale_group_id', 'a.property_head_id','a.sale_type', 'a.sale_id'],
 
         ];
     }
@@ -73,6 +73,7 @@ class SaleAnalysisLists extends BaseAdminDataLists implements ListsSearchInterfa
                 'a.sale_id','c.sale_name','c.mobile',
                 Db::raw("COUNT(a.work_id) AS work_count,SUM(CASE WHEN a.sale_type = 1 THEN b.work_amount ELSE 0 END) AS amount_sales_agent,SUM(CASE WHEN a.sale_type = 2 THEN b.work_amount ELSE 0 END) AS amount_sales_individual,COUNT(CASE WHEN a.sale_type = 1 THEN a.work_id ELSE null END) AS count_sales_agent,COUNT(CASE WHEN a.sale_type = 2 THEN a.work_id ELSE null END) AS count_sales_individual")
             ])
+            ->where($this->searchWhere)
             ->where($this->queryWhere())
             ->where('a.sale_type', 'in', [1, 2])
             //->where('a.order_status', 3)

+ 3 - 2
app/adminapi/lists/sale/SaleGroupAnalysisLists.php

@@ -39,7 +39,7 @@ class SaleGroupAnalysisLists extends BaseAdminDataLists implements ListsSearchIn
     public function setSearch(): array
     {
         return [
-            '=' => ['sale_group_id', 'property_head_id','sale_type', 'sale_id'],
+            '=' => ['a.sale_group_id', 'a.property_head_id','a.sale_type', 'a.sale_id'],
 
         ];
     }
@@ -73,7 +73,8 @@ class SaleGroupAnalysisLists extends BaseAdminDataLists implements ListsSearchIn
                 Db::raw("COUNT(a.work_id) AS work_count,SUM(b.work_amount) AS total_sales_amount")
             ])
             ->where('a.sale_type', 'in', [1, 2])
-            //->where('a.order_status', 3)
+            ->where($this->searchWhere)
+            ->where($this->queryWhere())
             ->where('b.service_status', 3)
             ->group('a.sale_group_id')
             ->limit($this->limitOffset, $this->limitLength)

+ 201 - 0
app/adminapi/logic/equity/EquityOrderLogic.php

@@ -0,0 +1,201 @@
+<?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\equity;
+
+
+use app\adminapi\logic\property\PropertyOrderLogic as AdminPropertyOrderLogic;
+use app\adminapi\logic\user\UserLogic;
+use app\api\logic\PropertyOrderLogic as ApiPropertyOrderLogic;
+use app\common\model\equity\EquityConfig;
+use app\common\model\equity\EquityOrder;
+use app\common\logic\BaseLogic;
+use app\common\model\equity\UserEquity;
+use app\common\model\property\PropertyOrder;
+use app\common\model\user\User;
+use Exception;
+use think\facade\Db;
+
+
+/**
+ * EquityOrder逻辑
+ * Class EquityOrderLogic
+ * @package app\adminapi\logic
+ */
+class EquityOrderLogic extends BaseLogic
+{
+
+
+    /**
+     * @notes 添加
+     * @param array $params
+     * @return bool
+     * @author likeadmin
+     * @date 2024/12/25 13:32
+     */
+    public static function add(array $params): bool
+    {
+        Db::startTrans();
+        try {
+            // 通过手机号查询用户是否注册 - 已注册绑定id ,未注册注册再绑定id
+            $userId = UserLogic::getUserIdByMobile($params['mobile']);
+
+            EquityOrder::create([
+                'user_id' => $userId,
+                'description' => $params['description']??'',
+                'price' => $params['price']??0,
+                'create_order_time' => $params['create_order_time']?strtotime($params['create_order_time']):0,
+                'service_work_id' => $params['service_work_id']??0,
+                'equity_id' => $params['equity_id']??0,
+                'status' => $params['status']??1,
+                'property_head_id' => $params['property_head_id']??0,
+                'remark' => $params['remark']??'',
+            ]);
+
+            Db::commit();
+            return true;
+        } catch (\Exception $e) {
+            Db::rollback();
+            self::setError($e->getMessage());
+            return false;
+        }
+    }
+
+
+    /**
+     * @notes 编辑
+     * @param array $params
+     * @return bool
+     * @author likeadmin
+     * @date 2024/12/25 13:32
+     */
+    public static function edit(array $params): bool
+    {
+        Db::startTrans();
+        try {
+            // 通过手机号查询用户是否注册 - 已注册绑定id ,未注册注册再绑定id
+            $userId = UserLogic::getUserIdByMobile($params['mobile']);
+
+            EquityOrder::where('id', $params['id'])->update([
+                'user_id' => $userId,
+                'description' => $params['description']??'',
+                'price' => $params['price']??0,
+                'create_order_time' => $params['create_order_time']?strtotime($params['create_order_time']):0,
+                'service_work_id' => $params['service_work_id']??0,
+                'equity_id' => $params['equity_id']??0,
+                'status' => $params['status']??1,
+                'property_head_id' => $params['property_head_id']??0,
+                'remark' => $params['remark']??'',
+            ]);
+
+            Db::commit();
+            return true;
+        } catch (\Exception $e) {
+            Db::rollback();
+            self::setError($e->getMessage());
+            return false;
+        }
+    }
+
+
+    /**
+     * @notes 删除
+     * @param array $params
+     * @return bool
+     * @author likeadmin
+     * @date 2024/12/25 13:32
+     */
+    public static function delete(array $params): bool
+    {
+        return EquityOrder::destroy($params['id']);
+    }
+
+
+    /**
+     * @notes 获取详情
+     * @param $params
+     * @return array
+     * @author likeadmin
+     * @date 2024/12/25 13:32
+     */
+    public static function detail($params): array
+    {
+        return EquityOrder::findOrEmpty($params['id'])->toArray();
+    }
+
+
+    public static function addOrder($params)
+    {
+        Db::startTrans();
+        try {
+            $equityOrder = EquityOrder::findOrEmpty($params['id'])->toArray();
+            $userInfo = User::findOrEmpty($equityOrder['user_id'])->toArray();
+            $equityConfigInfo = EquityConfig::findOrEmpty($params['equity_id'])->toArray();
+
+            $userEquity = UserEquity::where([
+                ['equity_id','=',$params['equity_id']],['user_id','=',$equityOrder['user_id']],
+                ['number','>',0],['end_time','>=',time()]
+            ])->findOrEmpty();
+            if($userEquity->isEmpty()){
+                $userEquity = UserEquity::create([
+                    'user_id' => $equityOrder['user_id'],
+                    'equity_id' => $params['equity_id'],
+                    'remark' => $params['remark']??'',
+                    'goods_id' => $equityConfigInfo['goods_id'],
+                    'number' => $equityConfigInfo['number'],
+                    'end_time' => (time()+$equityConfigInfo['day_num']*86400),
+                ]);
+            }
+            $order_id = ApiPropertyOrderLogic::add([
+                'property_head_id' => $equityOrder['property_head_id'],
+                'householder_name' => $userInfo['nickname'],
+                'householder_mobile' => $userInfo['mobile'],
+                'address' => $params['address']??'',
+                'remark' => ''
+            ]);
+            if (false === $order_id) {
+                throw new Exception(ApiPropertyOrderLogic::getError());
+            }
+            $result = AdminPropertyOrderLogic::placeOrder([
+                'id' => $order_id,
+                'address' => $params['address'] ?? '',
+                'appointment_time' => $params['appointment_time'],
+                'goods_id' => $equityConfigInfo['goods_id'],
+                'pay_way' => $params['pay_way'],
+                'contact_number' => $params['contact_number'] ?? '',
+                'contact_people' => $params['contact_people'] ?? '',
+                'user_equity_id' => $userEquity->id
+            ]);
+            if (false === $result) {
+                throw new Exception(AdminPropertyOrderLogic::getError());
+            }
+
+            $orderInfo = PropertyOrder::where('id', $order_id)->findOrEmpty()->toArray();
+            EquityOrder::where('id', $params['id'])->update([
+                'service_work_id' => $orderInfo['work_id'],
+                'equity_id' => $params['equity_id'],
+                'status' => 2,
+            ]);
+
+            Db::commit();
+            return true;
+        } catch (\Exception $e) {
+            Db::rollback();
+            self::setError($e->getMessage());
+            return false;
+        }
+    }
+
+
+}

+ 35 - 13
app/adminapi/logic/equity/UserEquityLogic.php

@@ -22,6 +22,7 @@ use app\common\logic\BaseLogic;
 use app\common\model\user\User;
 use app\common\model\works\ServiceWork;
 use think\facade\Db;
+use think\facade\Validate;
 
 
 /**
@@ -44,20 +45,41 @@ class UserEquityLogic extends BaseLogic
     {
         Db::startTrans();
         try {
-            // 通过手机号查询用户是否注册 - 已注册绑定id ,未注册注册再绑定id
-            $userId = UserLogic::getUserIdByMobile($params['mobile']);
             $equityConfigInfo = EquityConfig::find($params['equity_id']);
-            UserEquity::create([
-                'user_id' => $userId,
-                'equity_id' => $params['equity_id'],
-                'remark' => $params['remark'],
-
-                'goods_id' => $equityConfigInfo['goods_id'],
-                'number' => $equityConfigInfo['number'],
-                'end_time' => (time()+$equityConfigInfo['day_num']*86400),
-
-            ]);
-
+            $max_id = UserEquity::max('id');
+            if((int)$params['is_binding'] === 1){
+                if(!Validate::checkRule($params['mobile'], 'require|mobile')){
+                    throw new \Exception('请填写正确手机号');
+                }
+                // 通过手机号查询用户是否注册 - 已注册绑定id ,未注册注册再绑定id
+                $userId = UserLogic::getUserIdByMobile($params['mobile']);
+                $max_id++;
+                UserEquity::create([
+                    'user_id' => $userId,
+                    'equity_id' => $params['equity_id'],
+                    'remark' => $params['remark'],
+                    'code' => generateRandomString((8-strlen($max_id)),2).$max_id,
+                    'goods_id' => $equityConfigInfo['goods_id'],
+                    'number' => $equityConfigInfo['number'],
+                    'end_time' => (time()+$equityConfigInfo['day_num']*86400),
+                ]);
+            }else{
+                for ($i=0;$i<$params['quantity'];$i++){
+                    $max_id++;
+                    $list[] = [
+                        'user_id' => 0,
+                        'equity_id' => $params['equity_id'],
+                        'remark' => $params['remark'],
+                        'code' => generateRandomString((8-strlen($max_id)),2).$max_id,
+                        'goods_id' => $equityConfigInfo['goods_id'],
+                        'number' => $equityConfigInfo['number'],
+                        'end_time' => 0,
+                        'create_time' => time(),
+                        'update_time' => time(),
+                    ];
+                }
+                UserEquity::insertAll($list);
+            }
             Db::commit();
             return true;
         } catch (\Exception $e) {

+ 13 - 10
app/adminapi/logic/property/PropertyActivityLogic.php

@@ -186,18 +186,21 @@ class PropertyActivityLogic extends BaseLogic
     }
 
 
-    public static function newDataExecute()
+    public static function copy($params)
     {
         try {
-            $activity_list = PropertyActivity::select()->toArray();
-            foreach ($activity_list as &$item) {
-                if(!empty($item['block_data'])){
-                    for ($i = 0; $i < count($item['block_data']); $i++) {
-                        $item['block_data'][$i]['block_key'] = $i+1;
-                    }
-                    PropertyActivity::where('id',$item['id'])->update(['block_data'=>json_encode($item['block_data'])]);
-                }
-            }
+            $activity = PropertyActivity::findOrEmpty($params['id'])->toArray();
+            PropertyActivity::create([
+                'property_head_id' => $activity['property_head_id'],
+                'activity_name' => $activity['activity_name'],
+                'activity_start_time' => $activity['activity_start_time']??0,
+                'activity_end_time' => $activity['activity_end_time']??0,
+                'block_data' => self::configureReservedField($activity['block_data']??[], 'block_data'),
+                'coupon_data' => self::configureReservedField($activity['coupon_data']??[], 'coupon_data'),
+                'url_page' => $activity['url_page']??'',
+                'page_type' => $activity['page_type']??0,
+                'images' => $activity['images']??[],
+            ]);
             return true;
         } catch (\Throwable $e) {
             return $e->getMessage();

+ 110 - 0
app/adminapi/validate/equity/EquityOrderValidate.php

@@ -0,0 +1,110 @@
+<?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\validate\equity;
+
+
+use app\common\validate\BaseValidate;
+
+
+/**
+ * EquityOrder验证器
+ * Class EquityOrderValidate
+ * @package app\adminapi\validate
+ */
+class EquityOrderValidate extends BaseValidate
+{
+
+     /**
+      * 设置校验规则
+      * @var string[]
+      */
+    protected $rule = [
+        'id' => 'require',
+        'mobile' => 'require|mobile',
+        'description' => 'require',
+        'create_order_time' => 'require',
+        'service_work_id' => 'require',
+        'equity_id' => 'require',
+        'status' => 'require',
+        'property_head_id' => 'require',
+
+    ];
+
+
+    /**
+     * 参数描述
+     * @var string[]
+     */
+    protected $field = [
+        'id' => 'id',
+        'mobile' => '用户手机号',
+        'description' => '商品描述',
+        'create_order_time' => '预计创单时间',
+        'service_work_id' => '工单ID',
+        'equity_id' => '权益卡ID',
+        'status' => '状态:1未下单、2已下单',
+        'property_head_id' => '物业负责人ID',
+
+    ];
+
+
+    /**
+     * @notes 添加场景
+     * @return EquityOrderValidate
+     * @author likeadmin
+     * @date 2024/12/25 13:32
+     */
+    public function sceneAdd()
+    {
+        return $this->only(['mobile','description','property_head_id']);
+    }
+
+
+    /**
+     * @notes 编辑场景
+     * @return EquityOrderValidate
+     * @author likeadmin
+     * @date 2024/12/25 13:32
+     */
+    public function sceneEdit()
+    {
+        return $this->only(['id','mobile','description','property_head_id']);
+    }
+
+
+    /**
+     * @notes 删除场景
+     * @return EquityOrderValidate
+     * @author likeadmin
+     * @date 2024/12/25 13:32
+     */
+    public function sceneDelete()
+    {
+        return $this->only(['id']);
+    }
+
+
+    /**
+     * @notes 详情场景
+     * @return EquityOrderValidate
+     * @author likeadmin
+     * @date 2024/12/25 13:32
+     */
+    public function sceneDetail()
+    {
+        return $this->only(['id']);
+    }
+
+}

+ 1 - 1
app/adminapi/validate/equity/UserEquityValidate.php

@@ -62,7 +62,7 @@ class UserEquityValidate extends BaseValidate
      */
     public function sceneAdd()
     {
-        return $this->only(['mobile','equity_id']);
+        return $this->only(['equity_id']);
     }
 
 

+ 3 - 3
app/api/controller/PropertyController.php

@@ -46,10 +46,10 @@ class PropertyController extends BaseApiController
     {
         $params = (new PropertyOrderValidate())->post()->goCheck('add');
         $result = PropertyOrderLogic::add($params);
-        if (true === $result) {
-            return $this->success('下单成功', [], 1, 1);
+        if (false === $result) {
+            return $this->fail(PropertyOrderLogic::getError());
         }
-        return $this->fail(PropertyOrderLogic::getError());
+        return $this->success('下单成功', [], 1, 1);
     }
 
     /**

+ 3 - 3
app/api/logic/PropertyOrderLogic.php

@@ -70,7 +70,7 @@ class PropertyOrderLogic extends BaseLogic
      * @param array $params
      * @return bool
      */
-    public static function add(array $params): bool
+    public static function add(array $params)
     {
         // 判断户主是否存在 返回户主id
         $propertyUserId = PropertyUserLogic::getPropertyUserIdByMobile($params);
@@ -78,7 +78,7 @@ class PropertyOrderLogic extends BaseLogic
         try {
             $propertyAddress = PropertyHead::where('id',$params['property_head_id'])->value('address');
             $address = $params['address']?(($propertyAddress?$propertyAddress.$params['address']:'')):'';
-            PropertyOrder::create([
+            $res = PropertyOrder::create([
                 'property_head_id' => $params['property_head_id'],
                 'property_user_id' => $propertyUserId,
                 'remark' => $params['remark']??'',
@@ -98,7 +98,7 @@ class PropertyOrderLogic extends BaseLogic
                     'phone_number11' => asteriskString($propertyUserInfo['householder_mobile']),
                 ]
             ]);
-            return true;
+            return $res->id;
         } catch (\Exception $e) {
             Db::rollback();
             self::setError($e->getMessage());

+ 27 - 0
app/common.php

@@ -428,3 +428,30 @@ function getPostageRegion() {
     return $lists;
 }
 
+// 获取随机字符串
+function generateRandomString($length = 8,$basic_method = 4) {
+    $characters = '';
+    $num = '0123456789';
+    $lowercase_letters = 'abcdefghijklmnopqrstuvwxyz';
+    $capital_letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
+    switch ($basic_method){
+        case 1:
+            $characters = $num;
+            break;
+        case 2:
+            $characters = $lowercase_letters;
+            break;
+        case 3:
+            $characters = $num.$lowercase_letters;
+            break;
+        case 4:
+            $characters = $num.$lowercase_letters.$capital_letters;
+            break;
+    }
+    $charactersLength = strlen($characters);
+    $randomString = '';
+    for ($i = 0; $i < $length; $i++) {
+        $randomString .= $characters[rand(0, $charactersLength - 1)];
+    }
+    return $randomString;
+}

+ 53 - 0
app/common/model/equity/EquityOrder.php

@@ -0,0 +1,53 @@
+<?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\equity;
+
+
+use app\common\model\BaseModel;
+use app\common\model\property\PropertyHead;
+use app\common\model\user\User;
+use app\common\model\works\ServiceWork;
+
+
+/**
+ * EquityOrder模型
+ * Class EquityOrder
+ * @package app\common\model
+ */
+class EquityOrder extends BaseModel
+{
+    
+    protected $name = 'equity_order';
+
+    public function equityConfig()
+    {
+        return $this->hasOne(EquityConfig::class, 'id', 'equity_id');
+    }
+
+    public function user()
+    {
+        return $this->hasOne(User::class, 'id', 'user_id');
+    }
+    public function propertyHead()
+    {
+        return $this->hasOne(PropertyHead::class, 'id', 'property_head_id')
+            ->field('id,property_name,village_name,head_name');
+    }
+    public function serviceWork()
+    {
+        return $this->hasOne(ServiceWork::class, 'id', 'service_work_id')
+            ->field('*');
+    }
+}

+ 47 - 39
app/common/service/ExcelExportService.php

@@ -15,12 +15,15 @@
 namespace app\common\service;
 
 
+use app\adminapi\logic\equity\UserEquityLogic;
 use app\adminapi\logic\financial\MasterSettlementDetailsLogic;
 use app\common\enum\FileEnum;
+use app\common\model\equity\UserEquity;
 use app\common\model\export\Export;
 use app\common\model\file\File;
 use app\common\model\financial\FinancialPaymentRecords;
 use app\common\model\goods_category\GoodsCategory;
+use app\common\model\user\User;
 use app\common\service\storage\Driver as StorageDriver;
 use excel\ExcelWriter;
 use Exception;
@@ -35,6 +38,7 @@ class ExcelExportService
     public $download_type = [
         '1' =>  'EngineerBillDownload',
         '2' =>  'MasterWorkerServiceOrderDownload',
+        '3' =>  'UserEquityDownload',
     ];
     public function __construct()
     {
@@ -57,44 +61,6 @@ class ExcelExportService
         }
     }
 
-    /**
-     * @notes 工程师 -上月最后结算余额 导出
-     */
-    public function EngineerBillDownload_Bak($infoExport)
-    {
-        try{
-            $filename = $infoExport['name'];
-            $params = $infoExport['params']?:[];
-            if($params){ }
-            $firstDay = date('Y-m-01 00:00:00', strtotime('first day of last month'));
-            $lastDay = date('Y-m-t 23:59:59', strtotime('last day of last month'));
-            $lists =  Db::name('master_worker')->alias('a')->field([
-                    'a.id','a.real_name','a.nickname','a.worker_number','e.account_holder','e.bank_name','e.opening_branch','e.account as bank_account',
-                    Db::raw("IFNULL(c.maxid,0) as maxid"),Db::raw("IFNULL(d.left_amount,0) as left_amount")
-                ])
-                ->leftJoin([Db::name('master_worker_account_log')
-                    ->where('create_time','between',[strtotime($firstDay),strtotime($lastDay)])
-                    ->field('worker_id as master_worker_id, max(id) as maxid')
-                    ->group('worker_id')
-                    ->buildSql() => 'c'], 'a.id = c.master_worker_id')
-                ->leftJoin('master_worker_account_log d', 'c.maxid = d.id')
-                ->leftJoin('bank_account e', 'a.id = e.worker_id')
-                //->where('d.left_amount', '>', 0)
-                ->select()->toArray();
-            $filename = ($filename?:'').('-'.date('YmdHis').'-'.$infoExport->id);
-            $this->sheet->generateExcelFile([
-                '工程师ID', '工程师编号', '工程师姓名', '工程师银行卡号', '工程师开户行及支行信息','上月最后结算余额'
-            ], $lists,$filename, ['id','worker_number','real_name','bank_account','bank_name','left_amount']);
-            $infoExport->file_url = $this->sheet->fileUrl();
-            $infoExport->generate_status = 1;
-            $infoExport->updatetime = time();
-            $infoExport->save();
-            return $infoExport->file_url;
-        }catch (\Exception $e){
-            throw new Exception($e->getMessage());
-        }
-    }
-
     /**
      * @notes 工程师 -截止某日最后结算余额 导出
      */
@@ -217,6 +183,48 @@ class ExcelExportService
         }
     }
 
-
+    // 权益卡编码导出
+    public function UserEquityDownload($infoExport){
+        try{
+            $filename = $infoExport['name'];
+            $params = $infoExport['params']?:[];
+            $where = [];
+            if($params){
+                if (isset($params['select_ids']) && !empty($params['select_ids'])) {
+                    $where[] = ['id','in' ,$params['select_ids']];
+                }
+                if (isset($params['equity_id']) && !empty($params['equity_id'])) {
+                    $where[] = ['equity_id','=' ,$params['equity_id']];
+                }
+                if (isset($params['mobile']) && !empty($params['mobile'])) {
+                    $userId = User::where('mobile',$params['mobile'])->value('id')??-1;
+                    $where[] = ['user_id','=' ,$userId];
+                }
+                if (isset($params['is_binding']) && !empty($params['is_binding'])) {
+                    if((int)$params['is_binding'] === 1){
+                        $where[] = ['user_id','>',0];
+                    }else{
+                        $where[] = ['user_id','=',0];
+                    }
+                }
+            }
+            $lists =  UserEquity::with(['equityConfig', 'goods','user'])
+                ->where($where)
+                ->field(['id', 'user_id', 'equity_id', 'goods_id', 'number', "IF(end_time=0,'',FROM_UNIXTIME(end_time, '%Y-%m-%d %H:%i:%s')) AS end_time",'code','IF(user_id=0,2,1) as is_binding'])
+                ->select()
+                ->toArray();
+            $filename = ($filename?:'').('-'.date('YmdHis').'-'.$infoExport->id);
+            $this->sheet->generateExcelFile([
+                '用户','编码', '权益卡名称','商品','预售价','权益总次数','剩余次数','权益截止时间'
+            ], $lists,$filename, ['user.nickname','code','equityConfig.equity_name','goods.goods_name','equityConfig.price','equityConfig.number','number','end_time']);
+            $infoExport->file_url = $this->sheet->fileUrl();
+            $infoExport->generate_status = 1;
+            $infoExport->updatetime = time();
+            $infoExport->save();
+            return $infoExport->file_url;
+        }catch (\Exception $e){
+            throw new Exception($e->getMessage());
+        }
+    }
 
 }

+ 16 - 1
extend/excel/ExcelWriter.php

@@ -47,6 +47,21 @@ class ExcelWriter
     {
         return $this->fileUrl;
     }
+    public function getCellValue($row,$value)
+    {
+        $values = explode('.',$value);
+        $count = count($values);
+        switch ($count){
+            case 1:
+                return $row[$values[0]]??'';
+            case 2:
+                return $row[$values[0]][$values[1]]??'';
+            case 3:
+                return $row[$values[0]][$values[1]][$values[2]]??'';
+            default:
+                return '';
+        }
+    }
 
     /**
      * 生成并保存 Excel 文件
@@ -62,7 +77,7 @@ class ExcelWriter
             }
             $tmp_arr = [];
             foreach ($map as $value){
-                $tmp_arr[] = $row[$value]??'';
+                $tmp_arr[] = $this->getCellValue($row,$value);
             }
             return $tmp_arr;
         }, $lists);