Kaynağa Gözat

add - 权益卡编码、下载

liugc 1 yıl önce
ebeveyn
işleme
749ea73b40

+ 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);
+    }
 }

+ 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()

+ 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) {

+ 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']);
     }
 
 

+ 27 - 0
app/common.php

@@ -417,3 +417,30 @@ function asteriskString($str) {
         return $str;
     }
 }
+// 获取随机字符串
+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;
+}

+ 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);