Explorar el Código

【程序目录】更新开源

吴昊天 hace 2 años
padre
commit
f7e87bf0d3
Se han modificado 100 ficheros con 1271 adiciones y 609 borrados
  1. 0 1
      crmeb/.env
  2. 0 1
      crmeb/.example.env
  3. 22 0
      crmeb/.phpstorm.meta.php
  4. 2 3
      crmeb/.version
  5. 1 1
      crmeb/LICENSE.txt
  6. 2 2
      crmeb/app/adminapi/AdminApiExceptionHandle.php
  7. 3 3
      crmeb/app/adminapi/controller/Login.php
  8. 1 1
      crmeb/app/adminapi/controller/v1/application/routine/RoutineTemplate.php
  9. 1 1
      crmeb/app/adminapi/controller/v1/application/wechat/WechatTemplate.php
  10. 2 0
      crmeb/app/adminapi/controller/v1/diy/Diy.php
  11. 127 1
      crmeb/app/adminapi/controller/v1/export/ExportExcel.php
  12. 1 1
      crmeb/app/adminapi/controller/v1/kefu/StoreService.php
  13. 3 3
      crmeb/app/adminapi/controller/v1/notification/sms/SmsConfig.php
  14. 5 3
      crmeb/app/adminapi/controller/v1/order/StoreOrder.php
  15. 1 1
      crmeb/app/adminapi/controller/v1/serve/Login.php
  16. 3 3
      crmeb/app/adminapi/controller/v1/serve/Serve.php
  17. 2 2
      crmeb/app/adminapi/controller/v1/setting/LangType.php
  18. 4 3
      crmeb/app/adminapi/controller/v1/setting/SystemAdmin.php
  19. 18 12
      crmeb/app/adminapi/controller/v1/user/User.php
  20. 15 0
      crmeb/app/adminapi/route/export.php
  21. 1 0
      crmeb/app/adminapi/route/route.php
  22. 2 2
      crmeb/app/api/ApiExceptionHandle.php
  23. 3 2
      crmeb/app/api/controller/pc/ProductController.php
  24. 2 2
      crmeb/app/api/controller/v1/LoginController.php
  25. 6 0
      crmeb/app/api/controller/v1/PayController.php
  26. 7 5
      crmeb/app/api/controller/v1/PublicController.php
  27. 119 0
      crmeb/app/api/controller/v1/TimerController.php
  28. 14 5
      crmeb/app/api/controller/v1/activity/StoreSeckillController.php
  29. 1 0
      crmeb/app/api/controller/v1/admin/StoreOrderController.php
  30. 16 5
      crmeb/app/api/controller/v1/order/OtherOrderController.php
  31. 26 6
      crmeb/app/api/controller/v1/order/StoreOrderController.php
  32. 1 1
      crmeb/app/api/controller/v1/publics/ArticleCategoryController.php
  33. 11 0
      crmeb/app/api/controller/v1/store/CategoryController.php
  34. 17 0
      crmeb/app/api/controller/v1/user/UserBillController.php
  35. 2 2
      crmeb/app/api/controller/v1/user/UserController.php
  36. 15 0
      crmeb/app/api/controller/v2/PublicController.php
  37. 2 2
      crmeb/app/api/controller/v2/activity/LuckLotteryController.php
  38. 53 43
      crmeb/app/api/controller/v2/wechat/AuthController.php
  39. 70 0
      crmeb/app/api/middleware/BlockerMiddleware.php
  40. 1 1
      crmeb/app/api/route/pc.php
  41. 31 5
      crmeb/app/api/route/v1.php
  42. 4 2
      crmeb/app/api/route/v2.php
  43. 77 2
      crmeb/app/common.php
  44. 11 0
      crmeb/app/dao/BaseDao.php
  45. 1 2
      crmeb/app/event.php
  46. 1 2
      crmeb/app/jobs/CheckQueueJob.php
  47. 10 10
      crmeb/app/jobs/OutPushJob.php
  48. 10 10
      crmeb/app/jobs/ProductCopyJob.php
  49. 1 1
      crmeb/app/jobs/ProductStockJob.php
  50. 3 12
      crmeb/app/jobs/TaskJob.php
  51. 1 1
      crmeb/app/jobs/TemplateJob.php
  52. 8 33
      crmeb/app/jobs/notice/EnterpriseWechatJob.php
  53. 6 18
      crmeb/app/jobs/notice/PrintJob.php
  54. 1 1
      crmeb/app/jobs/notice/SmsJob.php
  55. 1 0
      crmeb/app/jobs/notice/SyncMessageJob.php
  56. 2 2
      crmeb/app/kefuapi/KefuApiExceptionHandle.php
  57. 1 1
      crmeb/app/kefuapi/controller/User.php
  58. 0 32
      crmeb/app/listener/admin/AdminInfo.php
  59. 9 10
      crmeb/app/listener/notice/Notice.php
  60. 3 3
      crmeb/app/listener/order/OrderCreateAfter.php
  61. 1 1
      crmeb/app/listener/order/OrderDelivery.php
  62. 7 7
      crmeb/app/listener/out/OutPush.php
  63. 12 12
      crmeb/app/listener/timer/SystemTimer.php
  64. 2 2
      crmeb/app/outapi/OutApiExceptionHandle.php
  65. 1 1
      crmeb/app/outapi/controller/StoreOrder.php
  66. 6 0
      crmeb/app/services/BaseServices.php
  67. 8 0
      crmeb/app/services/activity/bargain/StoreBargainServices.php
  68. 0 3
      crmeb/app/services/activity/bargain/StoreBargainUserHelpServices.php
  69. 8 3
      crmeb/app/services/activity/combination/StoreCombinationServices.php
  70. 8 1
      crmeb/app/services/activity/combination/StorePinkServices.php
  71. 0 3
      crmeb/app/services/activity/integral/StoreIntegralOrderServices.php
  72. 0 2
      crmeb/app/services/activity/integral/StoreIntegralOrderStatusServices.php
  73. 3 3
      crmeb/app/services/activity/live/LiveAnchorServices.php
  74. 4 6
      crmeb/app/services/activity/lottery/LuckLotteryServices.php
  75. 10 6
      crmeb/app/services/activity/seckill/StoreSeckillServices.php
  76. 25 18
      crmeb/app/services/agent/DivisionAgentApplyServices.php
  77. 67 11
      crmeb/app/services/diy/DiyServices.php
  78. 1 1
      crmeb/app/services/diy/PageCategoryServices.php
  79. 3 12
      crmeb/app/services/kefu/LoginServices.php
  80. 0 2
      crmeb/app/services/kefu/UserServices.php
  81. 0 3
      crmeb/app/services/kefu/service/StoreServiceFeedbackServices.php
  82. 0 3
      crmeb/app/services/kefu/service/StoreServiceRecordServices.php
  83. 0 2
      crmeb/app/services/kefu/service/StoreServiceServices.php
  84. 8 73
      crmeb/app/services/message/NoticeService.php
  85. 28 20
      crmeb/app/services/message/notice/EnterpriseWechatService.php
  86. 5 5
      crmeb/app/services/message/notice/RoutineTemplateListService.php
  87. 14 7
      crmeb/app/services/message/notice/SmsService.php
  88. 11 11
      crmeb/app/services/message/notice/SystemMsgService.php
  89. 5 5
      crmeb/app/services/message/notice/WechatTemplateListService.php
  90. 159 64
      crmeb/app/services/message/wechat/MessageServices.php
  91. 45 1
      crmeb/app/services/order/OtherOrderServices.php
  92. 0 6
      crmeb/app/services/order/OutStoreOrderServices.php
  93. 2 3
      crmeb/app/services/order/StoreCartServices.php
  94. 1 1
      crmeb/app/services/order/StoreOrderCreateServices.php
  95. 22 0
      crmeb/app/services/order/StoreOrderRefundServices.php
  96. 36 33
      crmeb/app/services/order/StoreOrderServices.php
  97. 0 2
      crmeb/app/services/order/StoreOrderStatusServices.php
  98. 0 3
      crmeb/app/services/other/CategoryServices.php
  99. 6 8
      crmeb/app/services/other/QrcodeServices.php
  100. 0 0
      crmeb/app/services/other/export/ExportServices.php

+ 0 - 1
crmeb/.env

@@ -1 +0,0 @@
-APP_DEBUG = false

[APP]
DEFAULT_TIMEZONE = Asia/Shanghai

[DATABASE]
TYPE = mysql
HOSTNAME =
HOSTPORT = 3306
USERNAME =
PASSWORD = ''
DATABASE =
PREFIX = eb_
CHARSET = utf8
DEBUG = true

[LANG]
default_lang = zh-cn

[REDIS]
REDIS_HOSTNAME =
PORT = 6379
REDIS_PASSWORD =
SELECT = 0


[QUEUE]
QUEUE_NAME =

+ 0 - 1
crmeb/.example.env

@@ -1 +0,0 @@
-APP_DEBUG = false

[APP]
DEFAULT_TIMEZONE = Asia/Shanghai

[DATABASE]
TYPE = mysql
HOSTNAME =
HOSTPORT = 3306
USERNAME =
PASSWORD =
DATABASE =
PREFIX = eb_
CHARSET = utf8
DEBUG = true

[LANG]
default_lang = zh-cn

[REDIS]
REDIS_HOSTNAME =
PORT = 6379
REDIS_PASSWORD =
SELECT = 0


[QUEUE]
QUEUE_NAME =

+ 22 - 0
crmeb/.phpstorm.meta.php

@@ -0,0 +1,22 @@
+<?php
+
+namespace PHPSTORM_META {
+
+    use think\Container;
+    use function \app;
+
+    override(
+        \app(),
+        map([
+            'json' => \crmeb\utils\Json::class
+        ])
+    );
+
+    override(
+        \think\Container::make(),
+        map([
+            '' => '@'
+        ])
+    );
+
+}

+ 2 - 3
crmeb/.version

@@ -1,5 +1,4 @@
-version=CRMEB-KY v4.6.0
-version_code=460
+version=CRMEB-KY v4.7.0
+version_code=470
 platform=gitee
 app_id=ze7x9rxsv09l6pvsyo
-app_key=fuF7U9zaybLa5gageVQzxtxQMFnvU2OI

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 1 - 1
crmeb/LICENSE.txt


+ 2 - 2
crmeb/app/adminapi/AdminApiExceptionHandle.php

@@ -84,9 +84,9 @@ class AdminApiExceptionHandle extends Handle
             'trace' => $e->getTrace(),
             'previous' => $e->getPrevious(),
         ] : [];
-        $message = Env::get('app_debug', false) ? '接口报错:' . $e->getMessage() : '很抱歉,系统开小差了';
+        $message = Env::get('app_debug', false) ? $e->getMessage() : '很抱歉,系统开小差了';
         // 添加自定义异常处理机制
-        if ($e instanceof AuthException || $e instanceof AdminException || $e instanceof ApiException) {
+        if ($e instanceof AuthException || $e instanceof AdminException || $e instanceof ApiException || $e instanceof ValidateException) {
             return app('json')->make($e->getCode() ?: 400, $message, $massageData);
         } else {
             return app('json')->fail($message, $massageData);

+ 3 - 3
crmeb/app/adminapi/controller/Login.php

@@ -104,14 +104,14 @@ class Login extends AuthController
         $this->validate(['account' => $account, 'pwd' => $password], \app\adminapi\validate\setting\SystemAdminValidata::class, 'get');
         $result = $this->services->login($account, $password, 'admin', $key);
         if (!$result) {
-            $num = CacheService::redisHandler()->get('login_captcha',1);
+            $num = CacheService::get('login_captcha',1);
             if ($num > 1) {
                 return app('json')->fail(400140, ['login_captcha' => 1]);
             }
-            CacheService::redisHandler()->set('login_captcha', $num + 1, 60);
+            CacheService::set('login_captcha', $num + 1, 60);
             return app('json')->fail(400140, ['login_captcha' => 0]);
         }
-        CacheService::redisHandler()->delete('login_captcha');
+        CacheService::delete('login_captcha');
         return app('json')->success($result);
     }
 

+ 1 - 1
crmeb/app/adminapi/controller/v1/application/routine/RoutineTemplate.php

@@ -61,7 +61,7 @@ class RoutineTemplate extends AuthController
         }
         if ($all['list']) {
             foreach ($all['list'] as $template) {
-                SyncMessageJob::dispatchDo('SyncSubscribe', [$template]);
+                SyncMessageJob::dispatch('SyncSubscribe', [$template]);
             }
         }
         return app('json')->success(100038);

+ 1 - 1
crmeb/app/adminapi/controller/v1/application/wechat/WechatTemplate.php

@@ -54,7 +54,7 @@ class WechatTemplate extends AuthController
             WechatService::deleleTemplate($v['template_id']);
         }
         foreach ($all['list'] as $template) {
-            SyncMessageJob::dispatchDo('SyncWechat', [$template]);
+            SyncMessageJob::dispatch('SyncWechat', [$template]);
         }
         return app('json')->success(100038);
     }

+ 2 - 0
crmeb/app/adminapi/controller/v1/diy/Diy.php

@@ -89,6 +89,7 @@ class Diy extends AuthController
             }
         }
         $data['value'] = json_encode($value);
+        $data['version'] = uniqid();
         $this->services->saveData($id, $data);
         return app('json')->success(100000);
     }
@@ -169,6 +170,7 @@ class Diy extends AuthController
         $data['version'] = '1.0';
         $data['type'] = 2;
         $data['is_diy'] = 1;
+        $data['version'] = uniqid();
         return app('json')->success($id ? 100001 : 100000, ['id' => $this->services->saveData($id, $data)]);
     }
 

+ 127 - 1
crmeb/app/adminapi/controller/v1/export/ExportExcel.php

@@ -49,6 +49,132 @@ class ExportExcel extends AuthController
         $this->service = $services;
     }
 
+    public function userList()
+    {
+        $where = $this->request->getMore([
+            ['page', 1],
+            ['limit', 20],
+            ['nickname', ''],
+            ['status', ''],
+            ['pay_count', ''],
+            ['is_promoter', ''],
+            ['order', ''],
+            ['data', ''],
+            ['user_type', ''],
+            ['country', ''],
+            ['province', ''],
+            ['city', ''],
+            ['user_time_type', ''],
+            ['user_time', ''],
+            ['sex', ''],
+            [['level', 0], 0],
+            [['group_id', 'd'], 0],
+            ['label_id', ''],
+            ['now_money', 'normal'],
+            ['field_key', ''],
+            ['isMember', '']
+        ]);
+        return app('json')->success($this->service->exportUserList($where));
+    }
+
+    /**
+     * 订单导出
+     * @return mixed
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\DbException
+     * @throws \think\db\exception\ModelNotFoundException
+     */
+    public function orderList()
+    {
+        $where = $this->request->getMore([
+            ['status', ''],
+            ['real_name', ''],
+            ['is_del', ''],
+            ['data', '', '', 'time'],
+            ['type', ''],
+            ['pay_type', ''],
+            ['order', ''],
+            ['field_key', ''],
+        ]);
+        $where['is_system_del'] = 0;
+        $where['pid'] = 0;
+        return app('json')->success($this->service->exportOrderList($where));
+    }
+
+    /**
+     * 商品列表导出
+     * @return mixed
+     */
+    public function productList()
+    {
+        $where = $this->request->getMore([
+            ['store_name', ''],
+            ['cate_id', ''],
+            ['type', 1]
+        ]);
+        return app('json')->success($this->service->exportProductList($where));
+    }
+
+    /**
+     * 砍价商品列表导出
+     * @return mixed
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\DbException
+     * @throws \think\db\exception\ModelNotFoundException
+     */
+    public function bargainList()
+    {
+        $where = $this->request->getMore([
+            ['status', ''],
+            ['store_name', ''],
+        ]);
+        $where['is_del'] = 0;
+        return app('json')->success($this->service->exportBargainList($where));
+    }
+
+    /**
+     * 拼团商品导出
+     * @return mixed
+     */
+    public function combinationList()
+    {
+        $where = $this->request->getMore([
+            ['is_show', ''],
+            ['store_name', '']
+        ]);
+        $where['is_del'] = 0;
+        return app('json')->success($this->service->exportCombinationList($where));
+    }
+
+    /**
+     * 秒杀商品导出
+     * @return mixed
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\DbException
+     * @throws \think\db\exception\ModelNotFoundException
+     */
+    public function seckillList()
+    {
+        $where = $this->request->getMore([
+            [['status', 's'], ''],
+            [['store_name', 's'], '']
+        ]);
+        return app('json')->success($this->service->exportSeckillList($where));
+    }
+
+    /**
+     * 会员卡导出
+     * @param $id
+     * @return mixed
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\DbException
+     * @throws \think\db\exception\ModelNotFoundException
+     */
+    public function memberCardList($id)
+    {
+        return app('json')->success($this->service->exportMemberCard($id));
+    }
+
     /**
      * 保存用户资金监控的excel表格
      * @param UserBillServices $services
@@ -239,7 +365,7 @@ class ExportExcel extends AuthController
     }
 
     /**
-     * 品导出
+     * 品导出
      * @param StoreProductServices $services
      * @return mixed
      */

+ 1 - 1
crmeb/app/adminapi/controller/v1/kefu/StoreService.php

@@ -62,7 +62,7 @@ class StoreService extends AuthController
             ['data', '', '', 'time'],
             ['type', '', '', 'user_type'],
         ]);
-        [$list, $count] = $services->getWhereUserList($where, 'u.nickname,u.uid,u.avatar as headimgurl,w.subscribe,w.province,w.country,w.city,w.sex,w.user_type,u.is_del');
+        [$list, $count] = $services->getWhereUserList($where, 'u.nickname,u.uid,u.avatar as headimgurl,w.subscribe,w.province,w.country,w.city,w.sex,u.user_type,u.is_del');
         return app('json')->success(compact('list', 'count'));
     }
 

+ 3 - 3
crmeb/app/adminapi/controller/v1/notification/sms/SmsConfig.php

@@ -64,7 +64,7 @@ class SmsConfig extends AuthController
      */
     public function is_login(ServeServices $services)
     {
-        $sms_info = CacheService::redisHandler()->get('sms_account');
+        $sms_info = CacheService::get('sms_account');
         $data = ['status' => false, 'info' => ''];
         if ($sms_info) {
             try {
@@ -87,7 +87,7 @@ class SmsConfig extends AuthController
             if ($account && $password) {
                 $res = $services->user()->login($account, $password);
                 if ($res) {
-                    CacheService::redisHandler()->set('sms_account', $account);
+                    CacheService::set('sms_account', $account);
                     $data['status'] = true;
                     $data['info'] = $account;
                 }
@@ -103,7 +103,7 @@ class SmsConfig extends AuthController
      */
     public function logout()
     {
-        $res = CacheService::redisHandler()->delete('sms_account');
+        $res = CacheService::delete('sms_account');
         if ($res) {
             $this->services->updateSmsConfig('', '');
             CacheService::clear();

+ 5 - 3
crmeb/app/adminapi/controller/v1/order/StoreOrder.php

@@ -693,15 +693,17 @@ class StoreOrder extends AuthController
     }
 
     /**
-     * 易联云打印机打印
+     * 小票打印机打印
      * @param $id
      * @return mixed
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\DbException
+     * @throws \think\db\exception\ModelNotFoundException
      */
     public function order_print($id)
     {
         if (!$id) return app('json')->fail(100100);
-
-        $res = $this->services->orderPrint($id);
+        $res = $this->services->orderPrintTicket($id, true);
         if ($res) {
             return app('json')->success(100010);
         } else {

+ 1 - 1
crmeb/app/adminapi/controller/v1/serve/Login.php

@@ -107,7 +107,7 @@ class Login extends AuthController
         $res = $this->services->user()->login($account, $password);
         if ($res) {
             CacheService::clear();
-            CacheService::redisHandler()->set('sms_account', $account);
+            CacheService::set('sms_account', $account);
             $services->updateSmsConfig($account, $password);
             return app('json')->success(400139, $res);
         } else {

+ 3 - 3
crmeb/app/adminapi/controller/v1/serve/Serve.php

@@ -44,7 +44,7 @@ class Serve extends AuthController
      */
     public function is_login()
     {
-        $sms_info = CacheService::redisHandler()->get('sms_account');
+        $sms_info = CacheService::get('sms_account');
         if ($sms_info) {
             return app('json')->success(['status' => true, 'info' => $sms_info]);
         } else {
@@ -188,7 +188,7 @@ class Serve extends AuthController
 
         $data['password'] = md5($data['password']);
         $this->services->user()->modify($data);
-        CacheService::redisHandler()->delete('sms_account');
+        CacheService::delete('sms_account');
         return app('json')->success(100001);
     }
 
@@ -207,7 +207,7 @@ class Serve extends AuthController
         $this->validate($data, ServeValidata::class, 'phone');
 
         $this->services->user()->modifyPhone($data);
-        CacheService::redisHandler()->delete('sms_account');
+        CacheService::delete('sms_account');
         return app('json')->success(100001);
     }
 }

+ 2 - 2
crmeb/app/adminapi/controller/v1/setting/LangType.php

@@ -65,7 +65,7 @@ class LangType extends AuthController
             ['status', 0]
         ]);
         $this->services->langTypeSave($data);
-        CacheService::redisHandler()->delete('lang_type_data');
+        CacheService::delete('lang_type_data');
         return app('json')->success(100000);
     }
 
@@ -89,7 +89,7 @@ class LangType extends AuthController
     public function langTypeDel(int $id = 0)
     {
         $this->services->langTypeDel($id);
-        CacheService::redisHandler()->delete('lang_type_data');
+        CacheService::delete('lang_type_data');
         return app('json')->success(100002);
     }
 }

+ 4 - 3
crmeb/app/adminapi/controller/v1/setting/SystemAdmin.php

@@ -169,7 +169,7 @@ class SystemAdmin extends AuthController
             ['new_pwd', ''],
             ['conf_pwd', ''],
         ]);
-        if(!preg_match('/^(?![^a-zA-Z]+$)(?!\D+$).{6,}$/',$data['new_pwd'])){
+        if (!preg_match('/^(?![^a-zA-Z]+$)(?!\D+$).{6,}$/', $data['new_pwd'])) {
             return app('json')->fail(400183);
         }
         if ($this->services->updateAdmin($this->adminId, $data))
@@ -177,6 +177,7 @@ class SystemAdmin extends AuthController
         else
             return app('json')->fail(100007);
     }
+
     /**
      * 修改当前登陆admin的文件管理密码
      * @return mixed
@@ -187,7 +188,7 @@ class SystemAdmin extends AuthController
             ['file_pwd', ''],
             ['conf_file_pwd', ''],
         ]);
-        if(!preg_match('/^(?![^a-zA-Z]+$)(?!\D+$).{6,}$/',$data['file_pwd'])){
+        if (!preg_match('/^(?![^a-zA-Z]+$)(?!\D+$).{6,}$/', $data['file_pwd'])) {
             return app('json')->fail(400183);
         }
         if ($this->services->setFilePassword($this->adminId, $data))
@@ -203,7 +204,7 @@ class SystemAdmin extends AuthController
     public function logout()
     {
         $key = trim(ltrim($this->request->header(Config::get('cookie.token_name')), 'Bearer'));
-        CacheService::redisHandler()->delete($key);
+        CacheService::delete(md5($key));
         return app('json')->success();
     }
 }

+ 18 - 12
crmeb/app/adminapi/controller/v1/user/User.php

@@ -107,19 +107,19 @@ class User extends AuthController
             ['is_promoter', 0],
             ['status', 0]
         ]);
-        if ($data['phone']) {
-            if (!check_phone($data['phone'])) {
-                return app('json')->fail(400252);
-            }
-            if ($this->services->count(['phone' => $data['phone'], 'is_del' => 0])) {
-                return app('json')->fail(400314);
-            }
-            if (trim($data['real_name']) != '') {
-                $data['nickname'] = $data['real_name'];
-            } else {
-                $data['nickname'] = substr_replace($data['phone'], '****', 3, 4);
-            }
+        if (!$data['real_name']) {
+            return app('json')->fail(410245);
+        }
+        if (!$data['phone']) {
+            return app('json')->fail(410245);
         }
+        if (!check_phone($data['phone'])) {
+            return app('json')->fail(400252);
+        }
+        if ($this->services->count(['phone' => $data['phone'], 'is_del' => 0])) {
+            return app('json')->fail(400314);
+        }
+        $data['nickname'] = $data['real_name'];
         if ($data['card_id']) {
             if (!check_card($data['card_id'])) return app('json')->fail(400315);
         }
@@ -130,6 +130,9 @@ class User extends AuthController
             if ($data['pwd'] != $data['true_pwd']) {
                 return app('json')->fail(400264);
             }
+            if (strlen($data['pwd']) < 6 || strlen($data['pwd']) > 32) {
+                return app('json')->fail(400762);
+            }
             $data['pwd'] = md5($data['pwd']);
         } else {
             unset($data['pwd']);
@@ -389,6 +392,9 @@ class User extends AuthController
             if ($data['pwd'] != $data['true_pwd']) {
                 return app('json')->fail(400264);
             }
+            if (strlen($data['pwd']) < 6 || strlen($data['pwd']) > 32) {
+                return app('json')->fail(400762);
+            }
             $data['pwd'] = md5($data['pwd']);
         } else {
             unset($data['pwd']);

+ 15 - 0
crmeb/app/adminapi/route/export.php

@@ -14,6 +14,21 @@ use think\facade\Route;
  * 导出excel相关路由
  */
 Route::group('export', function () {
+    //用户列表
+    Route::get('user_list', 'v1.export.ExportExcel/userList')->option(['real_name' => '用户列表导出']);
+    //订单列表
+    Route::get('order_list', 'v1.export.ExportExcel/orderList')->option(['real_name' => '订单列表导出']);
+    //商品列表
+    Route::get('product_list', 'v1.export.ExportExcel/productList')->option(['real_name' => '商品列表导出']);
+    //砍价列表
+    Route::get('bargain_list', 'v1.export.ExportExcel/bargainList')->option(['real_name' => '砍价商品列表导出']);
+    //拼团列表
+    Route::get('combination_list', 'v1.export.ExportExcel/combinationList')->option(['real_name' => '拼团商品列表导出']);
+    //秒杀列表
+    Route::get('seckill_list', 'v1.export.ExportExcel/seckillList')->option(['real_name' => '秒杀商品列表导出']);
+    //导出会员卡
+    Route::get('member_card/:id', 'v1.export.ExportExcel/memberCardList')->option(['real_name' => '会员卡导出']);
+
     //用户资金监控
     Route::get('userFinance', 'v1.export.ExportExcel/userFinance')->option(['real_name' => '用户资金导出']);
     //用户佣金

+ 1 - 0
crmeb/app/adminapi/route/route.php

@@ -36,6 +36,7 @@ Route::group(function () {
     Route::get('get_workerman_url', 'PublicController/getWorkerManUrl')->option(['real_name' => '获取客服数据']);
     //测试
     Route::get('index', 'Test/index')->option(['real_name' => '测试地址']);
+    Route::get('h5', 'Test/h5pay')->option(['real_name' => '测试地址2']);
 })->middleware(AllowOriginMiddleware::class);
 
 /**

+ 2 - 2
crmeb/app/api/ApiExceptionHandle.php

@@ -84,9 +84,9 @@ class ApiExceptionHandle extends Handle
             'trace' => $e->getTrace(),
             'previous' => $e->getPrevious(),
         ] : [];
-        $message = Env::get('app_debug', false) ? '接口报错:' . $e->getMessage() : '很抱歉,系统开小差了';
+        $message = Env::get('app_debug', false) ? $e->getMessage() : '很抱歉,系统开小差了';
         // 添加自定义异常处理机制
-        if ($e instanceof AuthException || $e instanceof AdminException || $e instanceof ApiException) {
+        if ($e instanceof AuthException || $e instanceof AdminException || $e instanceof ApiException || $e instanceof ValidateException) {
             return app('json')->make($e->getCode() ?: 400, $message, $massageData);
         } else {
             return app('json')->fail($message, $massageData);

+ 3 - 2
crmeb/app/api/controller/pc/ProductController.php

@@ -68,10 +68,11 @@ class ProductController
      */
     public function getProductRoutineCode(Request $request)
     {
-        list($product_id) = $request->getMore([
+        list($product_id, $type) = $request->getMore([
             ['product_id', 0],
+            ['type', 'product'],
         ], true);
-        $routineCode = $this->services->getProductRoutineCode((int)$product_id);
+        $routineCode = $this->services->getProductRoutineCode((int)$product_id, $type);
         return app('json')->success(['routineCode' => $routineCode]);
     }
 

+ 2 - 2
crmeb/app/api/controller/v1/LoginController.php

@@ -53,7 +53,7 @@ class LoginController
         [$account, $password, $spread] = $request->postMore([
             'account', 'password', 'spread'
         ], true);
-        TaskJob::dispatchDo('emptyYesterdayAttachment');
+        TaskJob::dispatch('emptyYesterdayAttachment');
         if (!$account || !$password) {
             return app('json')->fail(410000);
         }
@@ -68,7 +68,7 @@ class LoginController
     public function logout(Request $request)
     {
         $key = trim(ltrim($request->header(Config::get('cookie.token_name')), 'Bearer'));
-        CacheService::redisHandler()->delete($key);
+        CacheService::delete(md5($key));
         return app('json')->success(410002);
     }
 

+ 6 - 0
crmeb/app/api/controller/v1/PayController.php

@@ -46,6 +46,12 @@ class PayController
                     $pay = app()->make(Pay::class);
                 }
                 return $pay->handleNotify()->getContent();
+            default:
+                if (strstr($type, 'allin') !== false) {
+                    /** @var Pay $pay */
+                    $pay = app()->make(Pay::class, ['allin_pay']);
+                    return $pay->handleNotify($type);
+                }
         }
     }
 

+ 7 - 5
crmeb/app/api/controller/v1/PublicController.php

@@ -284,12 +284,14 @@ class PublicController
     /**
      * 记录用户分享
      * @param Request $request
+     * @param UserBillServices $services
      * @return mixed
      */
     public function user_share(Request $request, UserBillServices $services)
     {
         $uid = (int)$request->uid();
-        return app('json')->success($services->setUserShare($uid));
+        $services->setUserShare($uid);
+        return app('json')->success(100012);
     }
 
     /**
@@ -306,11 +308,11 @@ class PublicController
         if ($imageUrl !== '' && !preg_match('/.*(\.png|\.jpg|\.jpeg|\.gif)$/', $imageUrl)) {
             return app('json')->success(['code' => false, 'image' => false]);
         }
-        if ($codeUrl !== '' && !preg_match('/.*(\.png|\.jpg|\.jpeg|\.gif)$/', $codeUrl)) {
+        if ($codeUrl !== '' && !(preg_match('/.*(\.png|\.jpg|\.jpeg|\.gif)$/', $codeUrl) || strpos($codeUrl, 'https://mp.weixin.qq.com/cgi-bin/showqrcode') !== false)) {
             return app('json')->success(['code' => false, 'image' => false]);
         }
         try {
-            $code = CacheService::get($codeUrl, function () use ($codeUrl) {
+            $code = CacheService::remember($codeUrl, function () use ($codeUrl) {
                 $codeTmp = $code = $codeUrl ? image_to_base64($codeUrl) : false;
                 if (!$codeTmp) {
                     $putCodeUrl = put_image($codeUrl);
@@ -319,7 +321,7 @@ class PublicController
                 }
                 return $code;
             });
-            $image = CacheService::get($imageUrl, function () use ($imageUrl) {
+            $image = CacheService::remember($imageUrl, function () use ($imageUrl) {
                 $imageTmp = $image = $imageUrl ? image_to_base64($imageUrl) : false;
                 if (!$imageTmp) {
                     $putImageUrl = put_image($imageUrl);
@@ -615,7 +617,7 @@ class PublicController
         $langStr = 'api_lang_' . str_replace('-', '_', $langData[$typeId]);
 
         //读取当前语言的语言包
-        $lang = CacheService::redisHandler()->remember($langStr, function () use ($typeId, $range) {
+        $lang = CacheService::remember($langStr, function () use ($typeId, $range) {
             /** @var LangCodeServices $langCodeServices */
             $langCodeServices = app()->make(LangCodeServices::class);
             return $langCodeServices->getColumn(['type_id' => $typeId, 'is_admin' => 0], 'lang_explain', 'code');

+ 119 - 0
crmeb/app/api/controller/v1/TimerController.php

@@ -0,0 +1,119 @@
+<?php
+
+namespace app\api\controller\v1;
+
+use app\services\activity\combination\StorePinkServices;
+use app\services\activity\live\LiveGoodsServices;
+use app\services\activity\live\LiveRoomServices;
+use app\services\agent\AgentManageServices;
+use app\services\order\StoreOrderServices;
+use app\services\order\StoreOrderTakeServices;
+use app\services\product\product\StoreProductServices;
+use app\services\system\attachment\SystemAttachmentServices;
+
+class TimerController
+{
+    /**
+     * 检测定时任务是否正常,必须6秒执行一次
+     */
+    public function timerCheck()
+    {
+        file_put_contents(runtime_path() . '.timer', time());
+    }
+
+    /**
+     * 未支付自动取消订单
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\DbException
+     * @throws \think\db\exception\ModelNotFoundException
+     */
+    public function orderUnpaidCancel()
+    {
+        /** @var StoreOrderServices $orderServices */
+        $orderServices = app()->make(StoreOrderServices::class);
+        $orderServices->orderUnpaidCancel();
+    }
+
+    /**
+     * 拼团到期订单处理
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\ModelNotFoundException
+     */
+    public function pinkExpiration()
+    {
+        /** @var StorePinkServices $storePinkServices */
+        $storePinkServices = app()->make(StorePinkServices::class);
+        $storePinkServices->statusPink();
+    }
+
+    /**
+     * 自动解绑上级绑定
+     */
+    public function agentUnbind()
+    {
+        /** @var AgentManageServices $agentManage */
+        $agentManage = app()->make(AgentManageServices::class);
+        $agentManage->removeSpread();
+    }
+
+    /**
+     * 更新直播商品状态
+     */
+    public function syncGoodStatus()
+    {
+        /** @var LiveGoodsServices $liveGoods */
+        $liveGoods = app()->make(LiveGoodsServices::class);
+        $liveGoods->syncGoodStatus();
+    }
+
+    /**
+     * 更新直播间状态
+     */
+    public function syncRoomStatus()
+    {
+        /** @var LiveRoomServices $liveRoom */
+        $liveRoom = app()->make(LiveRoomServices::class);
+        $liveRoom->syncRoomStatus();
+    }
+
+    /**
+     * 自动收货
+     */
+    public function autoTakeOrder()
+    {
+        /** @var StoreOrderTakeServices $services */
+        $services = app()->make(StoreOrderTakeServices::class);
+        $services->autoTakeOrder();
+    }
+
+    /**
+     * 查询预售到期商品自动下架
+     */
+    public function downAdvance()
+    {
+        /** @var StoreProductServices $product */
+        $product = app()->make(StoreProductServices::class);
+        $product->downAdvance();
+    }
+
+    /**
+     * 自动好评
+     */
+    public function autoComment()
+    {
+        /** @var StoreOrderServices $orderServices */
+        $orderServices = app()->make(StoreOrderServices::class);
+        $orderServices->autoComment();
+    }
+
+    /**
+     * 清除昨日海报
+     * @throws \Exception
+     */
+    public function emptyYesterdayAttachment()
+    {
+        /** @var SystemAttachmentServices $attach */
+        $attach = app()->make(SystemAttachmentServices::class);
+        $attach->emptyYesterdayAttachment();
+    }
+}

+ 14 - 5
crmeb/app/api/controller/v1/activity/StoreSeckillController.php

@@ -39,7 +39,8 @@ class StoreSeckillController
         //秒杀时间段
         $seckillTime = GroupDataService::getData('routine_seckill_time') ?? [];
         $seckillTimeIndex = -1;
-        $timeCount = count($seckillTime);
+        $timeCount = count($seckillTime);//总数
+        $unTimeCunt = 0;//即将开始
         if ($timeCount) {
             $today = strtotime(date('Y-m-d'));
             $currentHour = date('H');
@@ -62,6 +63,7 @@ class StoreSeckillController
                         $value['state'] = '即将开始';
                         $value['status'] = 2;
                         $value['stop'] = (int)bcadd($today, bcmul($activityEndHour, 3600, 0));
+                        $unTimeCunt += 1;
                     } else if ($currentHour >= $activityEndHour) {
                         $value['time'] = strlen((int)$value['time']) == 2 ? (int)$value['time'] . ':00' : '0' . (int)$value['time'] . ':00';
                         $value['state'] = '已结束';
@@ -71,9 +73,16 @@ class StoreSeckillController
                 }
             }
             //有时间段但是都不在抢购中
-            if ($seckillTimeIndex == -1) {
-                if ($currentHour < (int)$seckillTime[0]['time'] ?? 0) {
+            if ($seckillTimeIndex == -1 && $currentHour <= (int)$seckillTime[$timeCount - 1]['time'] ?? 0) {
+                if ($currentHour < (int)$seckillTime[0]['time'] ?? 0) {//当前时间
                     $seckillTimeIndex = 0;
+                } elseif ($unTimeCunt) {//存在未开始的
+                    foreach ($seckillTime as $key => $item) {
+                        if ($item['status'] == 2) {
+                            $seckillTimeIndex = $key;
+                            break;
+                        }
+                    }
                 } else {
                     $seckillTimeIndex = $timeCount - 1;
                 }
@@ -123,11 +132,11 @@ class StoreSeckillController
      * @param $id
      * @return mixed
      */
-    public function code(Request $request, $id, $stop_time = '')
+    public function code(Request $request, $id)
     {
         /** @var QrcodeServices $qrcodeService */
         $qrcodeService = app()->make(QrcodeServices::class);
-        $url = $qrcodeService->getRoutineQrcodePath($id, $request->uid(), 2, compact('stop_time'));
+        $url = $qrcodeService->getRoutineQrcodePath($id, $request->uid(), 2);
         if ($url) {
             return app('json')->success(['code' => $url]);
         } else {

+ 1 - 0
crmeb/app/api/controller/v1/admin/StoreOrderController.php

@@ -130,6 +130,7 @@ class StoreOrderController
         if (!$order) return app('json')->fail(410173);
         if ($order['paid']) {
             $order['nickname'] = $userServices->value(['uid' => $order['uid']], 'nickname');
+            $order['config_export_open'] = (bool)((int)sys_config('config_export_open'));
             $order = $order->hidden(['uid', 'status', 'paid'])->toArray();
             return app('json')->success($order);
         }

+ 16 - 5
crmeb/app/api/controller/v1/order/OtherOrderController.php

@@ -19,7 +19,7 @@ use app\services\pay\YuePayServices;
 use app\services\user\member\MemberCardServices;
 use app\services\user\UserServices;
 use crmeb\services\CacheService;
-use crmeb\services\SystemConfigService;
+use crmeb\services\pay\extend\allinpay\AllinPay;
 use app\Request;
 
 /**
@@ -115,6 +115,8 @@ class OtherOrderController
 
         $info = compact('order_id');
 
+        $payType = get_pay_type($payType);
+
         if ($order_id) {
             switch ($payType) {
                 case PayServices::WEIXIN_PAY:
@@ -168,10 +170,20 @@ class OtherOrderController
                         $payKey = md5($orderInfo['order_id']);
                         CacheService::set($payKey, ['order_id' => $orderInfo['order_id'], 'other_pay_type' => true], 300);
                         $info['pay_key'] = $payKey;
-                        return app('json')->status(PayServices::ALIAPY_PAY . '_pay',  410196, $info);
+                        return app('json')->status(PayServices::ALIAPY_PAY . '_pay', 410196, $info);
                     }
                 case PayServices::OFFLINE_PAY:
                     return app('json')->status('success', 410196, $info);
+                case PayServices::ALLIN_PAY:
+                    /** @var OrderPayServices $payServices */
+                    $payServices = app()->make(OrderPayServices::class);
+                    $info['jsConfig'] = $payServices->orderPay($orderInfo, $payType, [
+                        'returl' => sys_config('site_url') . '/pages/index/index',
+                    ]);
+                    if ($request->isWechat()) {
+                        $info['pay_url'] = AllinPay::UNITODER_H5UNIONPAY;
+                    }
+                    return app('json')->status(PayServices::ALLIN_PAY . '_pay', 410196, $info);
             }
         } else return app('json')->fail(410200);
     }
@@ -182,9 +194,8 @@ class OtherOrderController
      */
     public function pay_type(Request $request)
     {
-        /** @var SystemConfigService $systemConfigService */
-        $systemConfigService = app()->make(SystemConfigService::class);
-        $payType = $systemConfigService->more(['ali_pay_status', 'pay_weixin_open']);
+        $payType['ali_pay_status'] = is_ali_pay();
+        $payType['pay_weixin_open'] = is_wecaht_pay();
         $payType['site_name'] = sys_config('site_name');
         $payType['now_money'] = $request->user('now_money');
         $payType['offline_pay_status'] = true;

+ 26 - 6
crmeb/app/api/controller/v1/order/StoreOrderController.php

@@ -15,6 +15,7 @@ use app\services\pay\PayServices;
 use app\services\shipping\ExpressServices;
 use app\services\system\admin\SystemAdminServices;
 use app\services\user\UserInvoiceServices;
+use crmeb\services\pay\extend\allinpay\AllinPay;
 use app\services\activity\{lottery\LuckLotteryServices,
     bargain\StoreBargainServices,
     combination\StoreCombinationServices,
@@ -213,7 +214,7 @@ class StoreOrderController
             }
         }
         if ($from != 'pc') {
-            if (!$this->services->checkPaytype($payType)) {
+            if (!$this->services->checkPaytype(get_pay_type($payType))) {
                 return app('json')->fail(410213);
             }
         } else {
@@ -342,6 +343,16 @@ class StoreOrderController
                 case 'pc':
                 case 'friend':
                     return app('json')->status('success', 410203, $info);
+                case PayServices::ALLIN_PAY:
+                    /** @var OrderPayServices $payServices */
+                    $payServices = app()->make(OrderPayServices::class);
+                    $info['jsConfig'] = $payServices->orderPay($orderInfo, $payType, [
+                        'returl' => sys_config('site_url') . '/pages/index/index',
+                    ]);
+                    if ($request->isWechat()) {
+                        $info['pay_url'] = AllinPay::UNITODER_H5UNIONPAY;
+                    }
+                    return app('json')->status(PayServices::ALLIN_PAY . '_pay', 410203, $info);
             }
         } else return app('json')->fail(410200);
     }
@@ -408,8 +419,7 @@ class StoreOrderController
                     break;
                 case 'routine':
                     if ($type == 1 || in_array($order['is_channel'], [0, 2, 3, 4])) {
-                        $order['order_id'] = app()->make(StoreOrderCreateServices::class)->getNewOrderId('cp');
-                        $this->services->update($order['id'], ['order_id' => $order['order_id']], 'id');
+                        $order['order_id'] = mt_rand(100, 999) . '_' . $order['order_id'];
                     }
                     break;
                 case 'app':
@@ -423,7 +433,7 @@ class StoreOrderController
                     break;
             }
         }
-        $order['pay_type'] = $paytype; //重新支付选择支付方式
+        $order['pay_type'] = get_pay_type($paytype); //重新支付选择支付方式
         switch ($order['pay_type']) {
             case PayServices::WEIXIN_PAY:
                 $jsConfig = $payServices->orderPay($order->toArray(), $from);
@@ -460,6 +470,16 @@ class StoreOrderController
                     return app('json')->status('success', 410203);
                 else
                     return app('json')->status('success', 410216);
+            case PayServices::ALLIN_PAY:
+                /** @var OrderPayServices $payServices */
+                $payServices = app()->make(OrderPayServices::class);
+                $info['jsConfig'] = $payServices->orderPay($order->toArray(), $order['pay_type'], [
+                    'returl' => sys_config('site_url') . '/pages/index/index',
+                ]);
+                if ($request->isWechat()) {
+                    $info['pay_url'] = AllinPay::UNITODER_H5UNIONPAY;
+                }
+                return app('json')->status(PayServices::ALLIN_PAY . '_pay', 410203, $info);
         }
         return app('json')->fail(410218);
     }
@@ -501,7 +521,7 @@ class StoreOrderController
         $where['is_system_del'] = 0;
         if (in_array($where['status'], [-1, -2, -3])) {
             $where['not_pid'] = 1;
-        } elseif (in_array($where['status'], [0, 1, 2, 3, 4])) {
+        } elseif (in_array($where['status'], [0, 1, 2, 3, 4, 9])) {
             $where['pid'] = 0;
         }
         $list = $this->services->getOrderApiList($where);
@@ -778,7 +798,7 @@ class StoreOrderController
      */
     public function data(Request $request)
     {
-        return app('json')->success($this->services->getOrderData((int)$request->uid(), true));
+        return app('json')->success($this->services->getOrderData((int)$request->uid()));
     }
 
     /**

+ 1 - 1
crmeb/app/api/controller/v1/publics/ArticleCategoryController.php

@@ -33,7 +33,7 @@ class ArticleCategoryController
      */
     public function lst()
     {
-        $cateInfo = CacheService::get('ARTICLE_CATEGORY', function () {
+        $cateInfo = CacheService::remember('ARTICLE_CATEGORY', function () {
             $cateInfo = $this->services->getArticleCategory();
             array_unshift($cateInfo, ['id' => 0, 'title' => '热门']);
             return $cateInfo;

+ 11 - 0
crmeb/app/api/controller/v1/store/CategoryController.php

@@ -38,4 +38,15 @@ class CategoryController
         $category = $this->services->getCategory($where);
         return app('json')->success($category);
     }
+
+    /**
+     * @author 等风来
+     * @email 136327134@qq.com
+     * @date 2022/11/11
+     * @return mixed
+     */
+    public function getCategoryVersion()
+    {
+        return app('json')->success(['version' => $this->services->getCategoryVersion()]);
+    }
 }

+ 17 - 0
crmeb/app/api/controller/v1/user/UserBillController.php

@@ -388,7 +388,11 @@ class UserBillController
 
     /**
      * 获取海报详细信息
+     * @param Request $request
      * @return mixed
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\DbException
+     * @throws \think\db\exception\ModelNotFoundException
      */
     public function getSpreadInfo(Request $request)
     {
@@ -402,8 +406,18 @@ class UserBillController
                 $routineSpreadBanner[] = ['pic' => $item];
             }
         }
+
+        if (sys_config('share_qrcode', 0) && request()->isWechat()) {
+            /** @var QrcodeServices $qrcodeService */
+            $qrcodeService = app()->make(QrcodeServices::class);
+            $qrcode = $qrcodeService->getTemporaryQrcode('spread', $request->uid())->url;
+        } else {
+            $qrcode = '';
+        }
+
         return app('json')->success([
             'spread' => $routineSpreadBanner,
+            'qrcode' => $qrcode,
             'nickname' => $request->user('nickname'),
             'site_name' => sys_config('site_name')
         ]);
@@ -413,6 +427,9 @@ class UserBillController
      * 积分记录
      * @param Request $request
      * @return mixed
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\DbException
+     * @throws \think\db\exception\ModelNotFoundException
      */
     public function integral_list(Request $request)
     {

+ 2 - 2
crmeb/app/api/controller/v1/user/UserController.php

@@ -93,9 +93,9 @@ class UserController
         }
         $uid = (int)$request->uid();
         if ($this->services->eidtNickname($uid, ['avatar' => $avatar, 'nickname' => $nickname])) {
-            return app('json')->success(100001);
+            return app('json')->success(100014);
         }
-        return app('json')->fail(100007);
+        return app('json')->fail(100015);
     }
 
     /**

+ 15 - 0
crmeb/app/api/controller/v2/PublicController.php

@@ -74,6 +74,21 @@ class PublicController
         return app('json')->success($data);
     }
 
+    /**
+     * @param int $id
+     * @return mixed
+     * @author 等风来
+     * @email 136327134@qq.com
+     * @date 2023/2/8
+     */
+    public function getVersion($id = 0)
+    {
+        /** @var DiyServices $diyService */
+        $diyService = app()->make(DiyServices::class);
+        $version = $diyService->getDiyVersion((int)$id);
+        return app('json')->success(['version' => $version ?: '']);
+    }
+
     /**
      * 是否强制绑定手机号
      * @return mixed

+ 2 - 2
crmeb/app/api/controller/v2/activity/LuckLotteryController.php

@@ -75,10 +75,10 @@ class LuckLotteryController
 
         $uid = (int)$request->uid();
         $key = 'lucklotter_limit_' . $uid;
-        if (CacheService::redisHandler()->get($key)) {
+        if (CacheService::get($key)) {
             return app('json')->fail('您求的频率太过频繁,请稍后请求!');
         }
-        CacheService::redisHandler()->set('lucklotter_limit_' . $uid, $uid, 1);
+        CacheService::set('lucklotter_limit_' . $uid, $uid, 1);
 
         if ($type == 5 && request()->isWechat()) {
             /** @var WechatServices $wechat */

+ 53 - 43
crmeb/app/api/controller/v2/wechat/AuthController.php

@@ -34,14 +34,58 @@ class AuthController
         $this->services = $services;
     }
 
+    /**
+     * 静默授权
+     * @param $code
+     * @param string $spread_code
+     * @param string $spread_spid
+     * @return mixed
+     * @throws \Psr\SimpleCache\InvalidArgumentException
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\ModelNotFoundException
+     */
+    public function silenceAuth($code, $spread_code = '', $spread_spid = '')
+    {
+        $token = $this->services->silenceAuth($code, $spread_code, $spread_spid);
+        if ($token && isset($token['key'])) {
+            return app('json')->success(410022, $token);
+        } else if ($token) {
+            return app('json')->success(410001, ['token' => $token['token'], 'expires_time' => $token['params']['exp'], 'new_user' => $token['new_user']]);
+        } else
+            return app('json')->fail(410019);
+    }
+
+    /**
+     * 授权获取小程序用户手机号 直接绑定
+     * @param string $code
+     * @param string $iv
+     * @param string $encryptedData
+     * @param string $spread_code
+     * @param string $spread_spid
+     * @param string $key
+     * @return mixed
+     * @throws \Psr\SimpleCache\InvalidArgumentException
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\ModelNotFoundException
+     */
+    public function authBindingPhone($code = '', $iv = '', $encryptedData = '', $spread_code = '', $spread_spid = '', $key = '')
+    {
+        if (!$code || !$iv || !$encryptedData)
+            return app('json')->fail(100100);
+        $token = $this->services->authBindingPhone($code, $iv, $encryptedData, $spread_code, $spread_spid, $key);
+        if ($token) {
+            return app('json')->success(410001, $token);
+        } else
+            return app('json')->fail(410019);
+    }
+
+    /** 以下方法该版本暂未使用 */
     /**
      * 小程序授权登录
      * @param Request $request
      * @return mixed
-     * @throws \Psr\SimpleCache\InvalidArgumentException
      * @throws \think\db\exception\DataNotFoundException
      * @throws \think\db\exception\ModelNotFoundException
-     * @throws \think\exception\DbException
      */
     public function auth(Request $request)
     {
@@ -63,30 +107,13 @@ class AuthController
             return app('json')->fail(410019);
     }
 
-    /**
-     * 静默授权
-     * @param $code
-     * @param string $spread_code
-     * @param string $spread_spid
-     * @return mixed
-     */
-    public function silenceAuth($code, $spread_code = '', $spread_spid = '')
-    {
-        $token = $this->services->silenceAuth($code, $spread_code, $spread_spid);
-        if ($token && isset($token['key'])) {
-            return app('json')->success(410022, $token);
-        } else if ($token) {
-            return app('json')->success(410001, ['token' => $token['token'], 'expires_time' => $token['params']['exp'], 'new_user' => $token['new_user']]);
-        } else
-            return app('json')->fail(410019);
-    }
-
     /**
      * 静默授权 不登录
      * @param $code
      * @param string $spread_code
      * @param string $spread_spid
      * @return mixed
+     * @throws \Psr\SimpleCache\InvalidArgumentException
      */
     public function silenceAuthNoLogin($code, $spread_code = '', $spread_spid = '')
     {
@@ -107,7 +134,8 @@ class AuthController
      * @param string $phone
      * @param string $captcha
      * @return mixed
-     * @throws \Psr\SimpleCache\InvalidArgumentException
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\ModelNotFoundException
      */
     public function silenceAuthBindingPhone($code = '', $spread_code = '', $spread_spid = '', $phone = '', $captcha = '')
     {
@@ -129,31 +157,13 @@ class AuthController
     }
 
     /**
-     * 授权获取小程序用户手机号 直接绑定
-     * @param string $code
-     * @param string $iv
-     * @param string $encryptedData
-     * @param string $spread_code
-     * @param string $spread_spid
-     * @param string $key
-     * @return mixed
-     */
-    public function authBindingPhone($code = '', $iv = '', $encryptedData = '', $spread_code = '', $spread_spid = '', $key = '')
-    {
-        if (!$code || !$iv || !$encryptedData)
-            return app('json')->fail(100100);
-        $token = $this->services->authBindingPhone($code, $iv, $encryptedData, $spread_code, $spread_spid, $key);
-        if ($token) {
-            return app('json')->success(410001, $token);
-        } else
-            return app('json')->fail(410019);
-    }
-
-    /**
-     *  更新用户信息
+     * 更新用户信息
      * @param Request $request
      * @param $userInfo
      * @return mixed
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\DbException
+     * @throws \think\db\exception\ModelNotFoundException
      */
     public function updateInfo(Request $request, $userInfo)
     {

+ 70 - 0
crmeb/app/api/middleware/BlockerMiddleware.php

@@ -0,0 +1,70 @@
+<?php
+/**
+ *  +----------------------------------------------------------------------
+ *  | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+ *  +----------------------------------------------------------------------
+ *  | Copyright (c) 2016~2022 https://www.crmeb.com All rights reserved.
+ *  +----------------------------------------------------------------------
+ *  | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+ *  +----------------------------------------------------------------------
+ *  | Author: CRMEB Team <admin@crmeb.com>
+ *  +----------------------------------------------------------------------
+ */
+
+namespace app\api\middleware;
+
+
+use app\Request;
+use crmeb\exceptions\ApiException;
+use crmeb\interfaces\MiddlewareInterface;
+use crmeb\services\CacheService;
+use think\facade\Config;
+
+/**
+ * Redis锁
+ * Class BlockerMiddleware
+ * @author 等风来
+ * @email 136327134@qq.com
+ * @date 2023/2/8
+ * @package app\api\middleware
+ */
+class BlockerMiddleware implements MiddlewareInterface
+{
+    /**
+     * @param Request $request
+     * @param \Closure $next
+     * @author 等风来
+     * @email 136327134@qq.com
+     * @date 2022/11/21
+     */
+    public function handle(Request $request, \Closure $next)
+    {
+        if (Config::get('cache.default') == 'file') {
+            return $next($request);
+        }
+
+        $uid = $request->uid();
+        $key = md5($request->rule()->getRule() . $uid);
+        if (!CacheService::setMutex($key)) {
+            throw new ApiException('请求太过频繁,请稍后再试');
+        }
+
+        $response = $next($request);
+
+        $this->after($response, $key);
+
+        return $response;
+    }
+
+    /**
+     * @param $response
+     * @param $key
+     * @author 等风来
+     * @email 136327134@qq.com
+     * @date 2022/11/22
+     */
+    public function after($response, $key)
+    {
+        CacheService::delMutex($key);
+    }
+}

+ 1 - 1
crmeb/app/api/route/pc.php

@@ -28,7 +28,7 @@ Route::group('pc', function () {
         Route::get('get_banner', 'pc.HomeController/getBanner')->name('getBanner');//PC首页轮播图
         Route::get('get_category_product', 'pc.HomeController/getCategoryProduct')->name('getCategoryProduct');//首页分类尚品
         Route::get('get_products', 'pc.ProductController/getProductList')->name('getProductList');//商品列表
-        Route::get('get_product_code/:product_id', 'pc.ProductController/getProductRoutineCode')->name('getProductRoutineCode');//商品详情小程序二维码
+        Route::get('get_product_code/:product_id/[:type]', 'pc.ProductController/getProductRoutineCode')->name('getProductRoutineCode');//商品详情小程序二维码
         Route::get('get_city/:pid', 'pc.PublicController/getCity')->name('getCity');//获取城市数据
         Route::get('check_order_status/:order_id/:end_time', 'pc.OrderController/checkOrderStatus')->name('checkOrderStatus');//轮询订单状态接口
         Route::get('get_company_info', 'pc.PublicController/getCompanyInfo')->name('getCompanyInfo');//获取公司信息

+ 31 - 5
crmeb/app/api/route/v1.php

@@ -9,6 +9,7 @@
 // | Author: CRMEB Team <admin@crmeb.com>
 // +----------------------------------------------------------------------
 
+use app\api\middleware\BlockerMiddleware;
 use think\facade\Route;
 use think\facade\Config;
 use think\Response;
@@ -134,7 +135,7 @@ Route::group(function () {
     Route::get('sign/list', 'v1.user.UserSignController/sign_list')->name('signList');//签到列表
     Route::get('sign/month', 'v1.user.UserSignController/sign_month')->name('signIntegral');//签到列表(年月)
     Route::post('sign/user', 'v1.user.UserSignController/sign_user')->name('signUser');//签到用户信息
-    Route::post('sign/integral', 'v1.user.UserSignController/sign_integral')->name('signIntegral');//签到
+    Route::post('sign/integral', 'v1.user.UserSignController/sign_integral')->name('signIntegral')->middleware(BlockerMiddleware::class);//签到
     //优惠券类
     Route::post('coupon/receive', 'v1.store.StoreCouponsController/receive')->name('couponReceive'); //领取优惠券
     Route::post('coupon/receive/batch', 'v1.store.StoreCouponsController/receive_batch')->name('couponReceiveBatch'); //批量领取优惠券
@@ -151,14 +152,14 @@ Route::group(function () {
     Route::post('order/check_shipping', 'v1.order.StoreOrderController/checkShipping')->name('checkShipping'); //检测是否显示快递和自提标签
     Route::post('order/confirm', 'v1.order.StoreOrderController/confirm')->name('orderConfirm'); //订单确认
     Route::post('order/computed/:key', 'v1.order.StoreOrderController/computedOrder')->name('computedOrder'); //计算订单金额
-    Route::post('order/create/:key', 'v1.order.StoreOrderController/create')->name('orderCreate'); //订单创建
+    Route::post('order/create/:key', 'v1.order.StoreOrderController/create')->name('orderCreate')->middleware(BlockerMiddleware::class); //订单创建
     Route::get('order/data', 'v1.order.StoreOrderController/data')->name('orderData'); //订单统计数据
     Route::get('order/list', 'v1.order.StoreOrderController/lst')->name('orderList'); //订单列表
     Route::get('order/detail/:uni/[:cartId]', 'v1.order.StoreOrderController/detail')->name('orderDetail'); //订单详情
     Route::get('order/refund_detail/:uni/[:cartId]', 'v1.order.StoreOrderController/refund_detail')->name('refundDetail'); //退款订单详情
-    Route::get('order/refund/reason', 'v1.order.StoreOrderController/refund_reason')->name('orderRefundReason'); //订单退款理由
-    Route::post('order/refund/verify', 'v1.order.StoreOrderController/refund_verify')->name('orderRefundVerify'); //订单退款审核
-    Route::post('order/take', 'v1.order.StoreOrderController/take')->name('orderTake'); //订单收货
+    Route::get('order/refund/reason', 'v1.order.StoreOrderController/refund_reason')->name('orderRefundReason')->middleware(BlockerMiddleware::class); //订单退款理由
+    Route::post('order/refund/verify', 'v1.order.StoreOrderController/refund_verify')->name('orderRefundVerify')->middleware(BlockerMiddleware::class); //订单退款审核
+    Route::post('order/take', 'v1.order.StoreOrderController/take')->name('orderTake')->middleware(BlockerMiddleware::class); //订单收货
     Route::get('order/express/:uni/[:type]', 'v1.order.StoreOrderController/express')->name('orderExpress'); //订单查看物流
     Route::post('order/del', 'v1.order.StoreOrderController/del')->name('orderDel'); //订单删除
     Route::post('order/again', 'v1.order.StoreOrderController/again')->name('orderAgain'); //订单 再次下单
@@ -287,6 +288,7 @@ Route::group(function () {
     Route::get('search/keyword', 'v1.PublicController/search')->name('searchKeyword');//热门搜索关键字获取
     //商品分类类
     Route::get('category', 'v1.store.CategoryController/category')->name('category');
+    Route::get('category_version', 'v1.store.CategoryController/getCategoryVersion')->name('getCategoryVersion');//商品分类类版本
     //商品类
     Route::post('image_base64', 'v1.PublicController/get_image_base64')->name('getImageBase64');// 获取图片base64
     Route::get('product/detail/:id/[:type]', 'v1.store.StoreProductController/detail')->name('detail');//商品详情
@@ -388,6 +390,30 @@ Route::group(function () {
     Route::get('get_lang_json', 'v1.PublicController/getLangJson')->name('getLangJson');
     //获取当前后台设置的默认语言类型
     Route::get('get_default_lang_type', 'v1.PublicController/getDefaultLangType')->name('getLangJson');
+
+    /** 定时任务接口 */
+    //检测定时任务接口
+    Route::get('timer/check', 'v1.TimerController/timerCheck')->name('timerCheck');
+    //未支付自动取消订单
+    Route::get('timer/order_cancel', 'v1.TimerController/orderUnpaidCancel')->name('orderUnpaidCancel');
+    //拼团到期订单处理
+    Route::get('timer/pink_expiration', 'v1.TimerController/pinkExpiration')->name('pinkExpiration');
+    //自动解绑上级绑定
+    Route::get('timer/agent_unbind', 'v1.TimerController/agentUnbind')->name('agentUnbind');
+    //更新直播商品状态
+    Route::get('timer/live_product_status', 'v1.TimerController/syncGoodStatus')->name('syncGoodStatus');
+    //更新直播间状态
+    Route::get('timer/live_room_status', 'v1.TimerController/syncRoomStatus')->name('syncRoomStatus');
+    //自动收货
+    Route::get('timer/take_delivery', 'v1.TimerController/autoTakeOrder')->name('autoTakeOrder');
+    //查询预售到期商品自动下架
+    Route::get('timer/advance_off', 'v1.TimerController/downAdvance')->name('downAdvance');
+    //自动好评
+    Route::get('timer/product_replay', 'v1.TimerController/autoComment')->name('autoComment');
+    //清除昨日海报
+    Route::get('timer/clear_poster', 'v1.TimerController/emptyYesterdayAttachment')->name('emptyYesterdayAttachment');
+
+
 })->middleware(\app\http\middleware\AllowOriginMiddleware::class)->middleware(\app\api\middleware\StationOpenMiddleware::class)->middleware(\app\api\middleware\AuthTokenMiddleware::class, false);
 
 Route::miss(function () {

+ 4 - 2
crmeb/app/api/route/v2.php

@@ -8,6 +8,7 @@
 // +----------------------------------------------------------------------
 // | Author: CRMEB Team <admin@crmeb.com>
 // +----------------------------------------------------------------------
+use app\api\middleware\BlockerMiddleware;
 use think\facade\Route;
 
 /**
@@ -30,6 +31,7 @@ Route::group('v2', function () {
         Route::get('wechat/wx_silence_auth_login', 'v2.wechat.WechatController/silenceAuth');
         //DIY接口
         Route::get('diy/get_diy/[:name]', 'v2.PublicController/getDiy');
+        Route::get('diy/get_version/[:name]', 'v2.PublicController/getVersion');
         //是否强制绑定手机号
         Route::get('bind_status', 'v2.PublicController/bindPhoneStatus');
         //小程序授权绑定手机号
@@ -79,9 +81,9 @@ Route::group('v2', function () {
         //抽奖活动详情
         Route::get('lottery/info/:factor', 'v2.activity.LuckLotteryController/lotteryInfo')->mame('lotteryInfo');
         //参与抽奖
-        Route::post('lottery', 'v2.activity.LuckLotteryController/luckLottery')->mame('luckLottery');
+        Route::post('lottery', 'v2.activity.LuckLotteryController/luckLottery')->mame('luckLottery')->middleware(BlockerMiddleware::class);
         //领取奖品
-        Route::post('lottery/receive', 'v2.activity.LuckLotteryController/lotteryReceive')->mame('lotteryReceive');
+        Route::post('lottery/receive', 'v2.activity.LuckLotteryController/lotteryReceive')->mame('lotteryReceive')->middleware(BlockerMiddleware::class);
         //抽奖记录
         Route::get('lottery/record', 'v2.activity.LuckLotteryController/lotteryRecord')->mame('lotteryRecord');
 

+ 77 - 2
crmeb/app/common.php

@@ -10,6 +10,7 @@
 // +----------------------------------------------------------------------
 
 // 应用公共文件
+use app\services\pay\PayServices;
 use crmeb\services\CacheService;
 use crmeb\services\HttpService;
 use Fastknife\Service\ClickWordCaptchaService;
@@ -22,6 +23,80 @@ use app\services\system\lang\LangCodeServices;
 use app\services\system\lang\LangCountryServices;
 use think\facade\Config;
 
+if (!function_exists('get_pay_type')) {
+
+    /**
+     * @author 等风来
+     * @email 136327134@qq.com
+     * @date 2023/2/9
+     * @param string $paytype
+     * @return string
+     */
+    function get_pay_type(string $paytype)
+    {
+        $wechatPay = (int)sys_config('pay_weixin_open') == 1;
+        $allinPay = (int)sys_config('allin_pay_status') == 1;
+        //微信支付没有开启,通联支付开启,用户访问端在小程序或者公众号的时候,使用通联微信H5支付
+        if ($paytype == PayServices::WEIXIN_PAY && !$wechatPay && $allinPay && (request()->isRoutine() || request()->isWechat())) {
+            $paytype = PayServices::ALLIN_PAY;
+        }
+
+        $aliPay = (bool)sys_config('ali_pay_status');
+        //支付宝没有开启,通联支付开了,用户使用支付宝支付,并且在app端访问的时候,使用通联app支付宝支付
+        if (!$aliPay && $paytype == PayServices::ALIAPY_PAY && request()->isApp()) {
+            $paytype = PayServices::ALLIN_PAY;
+        }
+        return $paytype;
+    }
+}
+
+if (!function_exists('is_wechat_pay')) {
+    /**
+     * @return bool
+     * @author 等风来
+     * @email 136327134@qq.com
+     * @date 2023/2/8
+     */
+    function is_wecaht_pay()
+    {
+        $wechatPay = (int)sys_config('pay_weixin_open') == 1;
+        $allinPay = (int)sys_config('allin_pay_status') == 1;
+
+        if ($wechatPay) {
+            return true;
+        } else {
+            if ((request()->isRoutine() || request()->isWechat()) && $allinPay) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+}
+
+if (!function_exists('is_ali_pay')) {
+    /**
+     * @return bool
+     * @author 等风来
+     * @email 136327134@qq.com
+     * @date 2023/2/8
+     */
+    function is_ali_pay()
+    {
+        $aliPay = (bool)sys_config('ali_pay_status');
+        $allinPay = (int)sys_config('allin_pay_status') == 1;
+
+        if ($aliPay) {
+            return true;
+        } else {
+            if (request()->isApp() && $allinPay) {
+                return true;
+            }
+        }
+        return false;
+    }
+}
+
 if (!function_exists('getWorkerManUrl')) {
 
     /**
@@ -946,7 +1021,7 @@ if (!function_exists('getLang')) {
         $typeId = $langCountryServices->value(['code' => $range], 'type_id') ?: 1;
 
         // 获取类型
-        $langData = CacheService::redisHandler()->remember('lang_type_data', function () use ($langTypeServices) {
+        $langData = CacheService::remember('lang_type_data', function () use ($langTypeServices) {
             return $langTypeServices->getColumn(['status' => 1, 'is_del' => 0], 'file_name', 'id');
         }, 3600);
 
@@ -954,7 +1029,7 @@ if (!function_exists('getLang')) {
         $langStr = 'lang_' . str_replace('-', '_', $langData[$typeId]);
 
         //读取当前语言的语言包
-        $lang = CacheService::redisHandler()->remember($langStr, function () use ($typeId, $range, $langCodeServices) {
+        $lang = CacheService::remember($langStr, function () use ($typeId, $range, $langCodeServices) {
             return $langCodeServices->getColumn(['type_id' => $typeId, 'is_admin' => 1], 'lang_explain', 'code');
         }, 3600);
         //获取返回文字

+ 11 - 0
crmeb/app/dao/BaseDao.php

@@ -126,6 +126,17 @@ abstract class BaseDao
         return $this->getModel()->getPk();
     }
 
+    /**
+     * @return string
+     * @author 等风来
+     * @email 136327134@qq.com
+     * @date 2023/2/8
+     */
+    public function getTableName()
+    {
+        return $this->getModel()->getName();
+    }
+
     /**
      * 获取一条数据
      * @param $id

+ 1 - 2
crmeb/app/event.php

@@ -23,8 +23,7 @@ return [
         'LogLevel' => [],
         'LogWrite' => [],
         'queue.start' => [\app\listener\queue\QueueStart::class],
-        'user.login' => [\app\listener\user\Login::class], //
-        'admin.info' => [\app\listener\admin\AdminInfo::class],//管理员登录前获取登录信息事件
+        'user.login' => [\app\listener\user\Login::class],
         'admin.login' => [\app\listener\admin\AdminLogin::class],//管理员登录
         'user.register' => [\app\listener\user\Register::class], //用户注册后置事件
         'wechat.auth' => [\app\listener\wechat\Auth::class], //用户授权后置事件

+ 1 - 2
crmeb/app/jobs/CheckQueueJob.php

@@ -26,8 +26,7 @@ class CheckQueueJob extends BaseJobs
 {
     use QueueTrait;
 
-
-    public function handle($key)
+    public function doJob($key)
     {
         $path = root_path('runtime') . '.queue';
         file_put_contents($path, $key);

+ 10 - 10
crmeb/app/jobs/OutPushJob.php

@@ -31,11 +31,11 @@ class OutPushJob extends BaseJobs
             /** @var OutStoreOrderServices $services */
             $services = app()->make(OutStoreOrderServices::class);
             if (!$services->orderCreatePush($oid, $pushUrl)) {
-                OutPushJob::dispatchSece(($step + 1) * 5, 'orderCreate', [$oid, $pushUrl, $step + 1]);
+                OutPushJob::dispatchSecs(($step + 1) * 5, 'orderCreate', [$oid, $pushUrl, $step + 1]);
             }
         } catch (\Exception $e) {
             Log::error('订单' . $oid . '推送失败,失败原因:' . $e->getMessage());
-            OutPushJob::dispatchSece(($step + 1) * 5, 'orderCreate', [$oid, $pushUrl, $step + 1]);
+            OutPushJob::dispatchSecs(($step + 1) * 5, 'orderCreate', [$oid, $pushUrl, $step + 1]);
         }
 
         return true;
@@ -59,11 +59,11 @@ class OutPushJob extends BaseJobs
             /** @var OutStoreOrderServices $services */
             $services = app()->make(OutStoreOrderServices::class);
             if (!$services->paySuccessPush($oid, $pushUrl)) {
-                OutPushJob::dispatchSece(($step + 1) * 5, 'paySuccess', [$oid, $pushUrl, $step + 1]);
+                OutPushJob::dispatchSecs(($step + 1) * 5, 'paySuccess', [$oid, $pushUrl, $step + 1]);
             }
         } catch (\Exception $e) {
             Log::error('订单支付' . $oid . '推送失败,失败原因:' . $e->getMessage());
-            OutPushJob::dispatchSece(($step + 1) * 5, 'paySuccess', [$oid, $pushUrl, $step + 1]);
+            OutPushJob::dispatchSecs(($step + 1) * 5, 'paySuccess', [$oid, $pushUrl, $step + 1]);
         }
 
         return true;
@@ -87,11 +87,11 @@ class OutPushJob extends BaseJobs
             /** @var OutStoreOrderRefundServices $services */
             $services = app()->make(OutStoreOrderRefundServices::class);
             if (!$services->refundCreatePush($oid, $pushUrl)) {
-                OutPushJob::dispatchSece(($step + 1) * 5, 'refundCreate', [$oid, $pushUrl, $step + 1]);
+                OutPushJob::dispatchSecs(($step + 1) * 5, 'refundCreate', [$oid, $pushUrl, $step + 1]);
             }
         } catch (\Exception $e) {
             Log::error('售后单' . $oid . '推送失败,失败原因:' . $e->getMessage());
-            OutPushJob::dispatchSece(($step + 1) * 5, 'refundCreate', [$oid, $pushUrl, $step + 1]);
+            OutPushJob::dispatchSecs(($step + 1) * 5, 'refundCreate', [$oid, $pushUrl, $step + 1]);
         }
         return true;
     }
@@ -114,11 +114,11 @@ class OutPushJob extends BaseJobs
             /** @var OutStoreOrderRefundServices $services */
             $services = app()->make(OutStoreOrderRefundServices::class);
             if (!$services->cancelApplyPush($oid, $pushUrl)) {
-                OutPushJob::dispatchSece(($step + 1) * 5, 'refundCancel', [$oid, $pushUrl, $step + 1]);
+                OutPushJob::dispatchSecs(($step + 1) * 5, 'refundCancel', [$oid, $pushUrl, $step + 1]);
             }
         } catch (\Exception $e) {
             Log::error('取消售后单' . $oid . '推送失败,失败原因:' . $e->getMessage());
-            OutPushJob::dispatchSece(($step + 1) * 5, 'refundCancel', [$oid, $pushUrl, $step + 1]);
+            OutPushJob::dispatchSecs(($step + 1) * 5, 'refundCancel', [$oid, $pushUrl, $step + 1]);
         }
         return true;
     }
@@ -141,10 +141,10 @@ class OutPushJob extends BaseJobs
             /** @var UserServices $services */
             $services = app()->make(UserServices::class);
             if (!$services->userUpdate($data, $pushUrl)) {
-                OutPushJob::dispatchSece(($step + 1) * 5, 'userUpdate', [$data, $pushUrl, $step + 1]);
+                OutPushJob::dispatchSecs(($step + 1) * 5, 'userUpdate', [$data, $pushUrl, $step + 1]);
             }
         } catch (\Exception $e) {
-            OutPushJob::dispatchSece(($step + 1) * 5, 'userUpdate', [$data, $pushUrl, $step + 1]);
+            OutPushJob::dispatchSecs(($step + 1) * 5, 'userUpdate', [$data, $pushUrl, $step + 1]);
         }
         return true;
     }

+ 10 - 10
crmeb/app/jobs/ProductCopyJob.php

@@ -47,21 +47,21 @@ class ProductCopyJob extends BaseJobs
             } else {
                 $d_image = 'http://' . ltrim($image, '\//');
             }
-            $description_cache = CacheService::getTokenBucket('desc_images_' . $id);
+            $description_cache = CacheService::get('desc_images_' . $id);
             if ($description_cache === null) {
                 $description_cache = $description;
-                CacheService::setTokenBucket('desc_images_count' . $id, 0);
+                CacheService::set('desc_images_count' . $id, 0);
             }
             $res = $copyTaobao->downloadCopyImage($d_image);
             $description_cache = str_replace($image, $res, $description_cache);
-            $desc_count = CacheService::getTokenBucket('desc_images_count' . $id) + 1;
+            $desc_count = CacheService::get('desc_images_count' . $id) + 1;
             if ($desc_count == $count) {
-                CacheService::clearToken('desc_images_' . $id);
-                CacheService::clearToken('desc_images_count' . $id);
+                CacheService::delete('desc_images_' . $id);
+                CacheService::delete('desc_images_count' . $id);
                 $storeDescriptionServices->saveDescription((int)$id, $description_cache);
             } else {
-                CacheService::setTokenBucket('desc_images_' . $id, $description_cache);
-                CacheService::setTokenBucket('desc_images_count' . $id, $desc_count);
+                CacheService::set('desc_images_' . $id, $description_cache);
+                CacheService::set('desc_images_count' . $id, $desc_count);
             }
         } catch (\Throwable $e) {
             Log::error('下载商品详情图片失败,失败原因:' . $e->getMessage());
@@ -86,20 +86,20 @@ class ProductCopyJob extends BaseJobs
             //下载图片
             $res = $copyTaobao->downloadCopyImage($image);
             //获取缓存中的轮播图
-            $slider_images = CacheService::getTokenBucket('slider_images_' . $id);
+            $slider_images = CacheService::get('slider_images_' . $id);
             //缓存为null则赋值[]
             if ($slider_images === null) $slider_images = [];
             //将下载的图片插入数组
             array_push($slider_images, $res);
             //如果$slider_images中图片数量和传入的$count相等,说明已经下载完成,写入商品表,如果不等则继续插入缓存
             if (count($slider_images) == $count) {
-                CacheService::clearToken('slider_images_' . $id);
+                CacheService::delete('slider_images_' . $id);
                 $image = $slider_images[0];
                 $slider_images = $slider_images ? json_encode($slider_images) : '';
                 $StoreProductServices->update($id, ['slider_image' => $slider_images, 'image' => $image]);
                 $StoreProductAttrValueServices->update(['product_id' => $id], ['image' => $image]);
             } else {
-                CacheService::setTokenBucket('slider_images_' . $id, $slider_images);
+                CacheService::set('slider_images_' . $id, $slider_images);
             }
         } catch (\Throwable $e) {
             Log::error('下载商品轮播图片失败,失败原因:' . $e->getMessage());

+ 1 - 1
crmeb/app/jobs/ProductStockJob.php

@@ -29,7 +29,7 @@ class ProductStockJob extends BaseJobs
     {
         try {
             foreach ($data as $key => $item) {
-                ProductStockJob::dispatchDo('calcValueStock', [$key]);
+                ProductStockJob::dispatch('calcValueStock', [$key]);
             }
         } catch (\Exception $e) {
             Log::error(['msg' => '拆分计算失败,错误原因:' . $e->getMessage(), 'data' => $data]);

+ 3 - 12
crmeb/app/jobs/TaskJob.php

@@ -25,25 +25,16 @@ class TaskJob extends BaseJobs
 {
     use QueueTrait;
 
-    /**
-     * 修改短信发送记录短信状态
-     */
-    public function modifyResultCode()
-    {
-        /** @var SmsRecordServices $smsRecord */
-        $smsRecord = app()->make(SmsRecordServices::class);
-        return $smsRecord->modifyResultCode();
-    }
-
     /**
      * 清除昨日海报
      * @return bool
      * @throws \Exception
      */
-    public function emptyYesterdayAttachment()
+    public function emptyYesterdayAttachment(): bool
     {
         /** @var SystemAttachmentServices $attach */
         $attach = app()->make(SystemAttachmentServices::class);
-        return $attach->emptyYesterdayAttachment();
+        $attach->emptyYesterdayAttachment();
+        return true;
     }
 }

+ 1 - 1
crmeb/app/jobs/TemplateJob.php

@@ -59,7 +59,7 @@ class TemplateJob extends BaseJobs
             //判断小程序还是公众号,获取数据id
             $is_type = $type == 'wechat' ? 'is_wechat' : 'is_routine';
             $key = $is_type == 'is_wechat' ? 'wechat_' . $tempCode : 'routine_' . $tempCode;
-            $tempid = CacheService::get($key, function () use ($type, $tempCode, $is_type) {
+            $tempid = CacheService::remember($key, function () use ($type, $tempCode, $is_type) {
                 /** @var SystemNotificationServices $notifyServices */
                 $notifyServices = app()->make(SystemNotificationServices::class);
                 return $notifyServices->getNotInfo(['type' => $is_type, 'mark' => $tempCode])['tempid'];

+ 8 - 33
crmeb/app/jobs/notice/EnterpriseWechatJob.php

@@ -11,8 +11,8 @@
 
 namespace app\jobs\notice;
 
+use app\services\message\notice\EnterpriseWechatService;
 use crmeb\basic\BaseJobs;
-use crmeb\services\HttpService;
 use crmeb\traits\QueueTrait;
 use think\facade\Log;
 
@@ -20,45 +20,20 @@ class EnterpriseWechatJob extends BaseJobs
 {
     use QueueTrait;
 
-
     /**
      * 给企业微信群发送消息
+     * @param $data
+     * @return bool
      */
-    public function doJob($data, $url, $ent_wechat_text)
+    public function doJob($data): bool
     {
         try {
-            $str = $ent_wechat_text;
-            foreach ($data as $key => $item) {
-                $str = str_replace('{' . $key . '}', $item, $str);
-            }
-            $s = explode('\n', $str);
-            $d = '';
-            foreach ($s as $item) {
-                $d .= $item . "\n>";
-            }
-            $d = substr($d, 0, strlen($d) - 2);
-            $datas = [
-                'msgtype' => 'markdown',
-                'markdown' => ['content' => $d]
-            ];
-            HttpService::postRequest($url, json_encode($datas));
+            /** @var EnterpriseWechatService $enterpriseWechatService */
+            $enterpriseWechatService = app()->make(EnterpriseWechatService::class);
+            $enterpriseWechatService->weComSend($data);
             return true;
-        } catch (\Throwable $e) {
+        } catch (\Exception $e) {
             Log::error('发送企业群消息失败,失败原因:' . $e->getMessage());
         }
-
-    }
-    /**
-     * 给企业微信群发送消息
-     */
-    public function ceshi($data,$url, $ent_wechat_text = '')
-    {
-        $wdata = [
-            'msgtype' => 'markdown',
-            'markdown' => ['content' => '你好啊,测试队列消息'.$url.$ent_wechat_text]
-        ];
-        HttpService::postRequest('https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=4d92900f-dc4a-4b2b-8d37-5ce2784dd618', json_encode($wdata));
-
-        return true;
     }
 }

+ 6 - 18
crmeb/app/jobs/notice/PrintJob.php

@@ -11,13 +11,11 @@
 
 namespace app\jobs\notice;
 
-
+use app\services\order\StoreOrderServices;
 use crmeb\basic\BaseJobs;
-use crmeb\services\printer\Printer;
 use crmeb\traits\QueueTrait;
 use think\facade\Log;
 
-
 /**
  * 小票打印
  * Class PrintJob
@@ -29,28 +27,18 @@ class PrintJob extends BaseJobs
 
     /**
      * 小票打印
-     * @param $type
-     * @param $configData
-     * @param $order
-     * @param $product
+     * @param $id
      * @return bool|void
      */
-    public function doJob($type, $configData, $order, $product)
+    public function doJob($id)
     {
-
         try {
-            $printer = new Printer($type, $configData);
-            $printer->setPrinterContent([
-                'name' => sys_config('site_name'),
-                'url' => sys_config('site_url'),
-                'orderInfo' => is_object($order) ? $order->toArray() : $order,
-                'product' => $product
-            ])->startPrinter();
+            /** @var StoreOrderServices $orderServices */
+            $orderServices = app()->make(StoreOrderServices::class);
+            $orderServices->orderPrintTicket((int)$id);
             return true;
         } catch (\Throwable $e) {
             Log::error('小票打印失败失败,失败原因:' . $e->getMessage());
         }
-
     }
-
 }

+ 1 - 1
crmeb/app/jobs/notice/SmsJob.php

@@ -37,7 +37,7 @@ class SmsJob extends BaseJobs
             $smsServices->send(true, $phone, $data, $template);
             return true;
         }catch (\Throwable $e) {
-            Log::error('发送企业群消息失败,失败原因:' . $e->getMessage());
+            Log::error('发送短信失败,失败原因:' . $e->getMessage());
         }
 
     }

+ 1 - 0
crmeb/app/jobs/notice/SyncMessageJob.php

@@ -94,6 +94,7 @@ class SyncMessageJob extends BaseJobs
     /**
      * 同步公众号模版消息
      * @param $template
+     * @return bool
      */
     public function syncWechat($template)
     {

+ 2 - 2
crmeb/app/kefuapi/KefuApiExceptionHandle.php

@@ -84,9 +84,9 @@ class KefuApiExceptionHandle extends Handle
             'trace' => $e->getTrace(),
             'previous' => $e->getPrevious(),
         ] : [];
-        $message = Env::get('app_debug', false) ? '接口报错:' . $e->getMessage() : '很抱歉,系统开小差了';
+        $message = Env::get('app_debug', false) ? $e->getMessage() : '很抱歉,系统开小差了';
         // 添加自定义异常处理机制
-        if ($e instanceof AuthException || $e instanceof AdminException || $e instanceof ApiException) {
+        if ($e instanceof AuthException || $e instanceof AdminException || $e instanceof ApiException || $e instanceof ValidateException) {
             return app('json')->make($e->getCode() ?: 400, $message, $massageData);
         } else {
             return app('json')->fail($message, $massageData);

+ 1 - 1
crmeb/app/kefuapi/controller/User.php

@@ -147,7 +147,7 @@ class User extends AuthController
     public function logout()
     {
         $key = trim(ltrim($this->request->header(Config::get('cookie.token_name')), 'Bearer'));
-        CacheService::redisHandler()->delete(md5($key));
+        CacheService::delete(md5($key));
         return app('json')->success();
     }
 

+ 0 - 32
crmeb/app/listener/admin/AdminInfo.php

@@ -1,32 +0,0 @@
-<?php
-/**
- *  +----------------------------------------------------------------------
- *  | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
- *  +----------------------------------------------------------------------
- *  | Copyright (c) 2016~2022 https://www.crmeb.com All rights reserved.
- *  +----------------------------------------------------------------------
- *  | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
- *  +----------------------------------------------------------------------
- *  | Author: CRMEB Team <admin@crmeb.com>
- *  +----------------------------------------------------------------------
- */
-
-namespace app\listener\admin;
-
-
-use app\jobs\CheckQueueJob;
-use crmeb\interfaces\ListenerInterface;
-
-/**
- * 登录前获取信息
- * Class AdminInfo
- * @package app\listener\admin
- */
-class AdminInfo implements ListenerInterface
-{
-
-    public function handle($event): void
-    {
-        CheckQueueJob::dispatch($event);
-    }
-}

+ 9 - 10
crmeb/app/listener/notice/Notice.php

@@ -11,6 +11,9 @@
 
 namespace app\listener\notice;
 
+use app\jobs\notice\EnterpriseWechatJob;
+use app\jobs\notice\PrintJob;
+use app\services\order\StoreOrderServices;
 use app\services\message\notice\{
     EnterpriseWechatService,
     RoutineTemplateListService,
@@ -18,7 +21,6 @@ use app\services\message\notice\{
     SystemMsgService,
     WechatTemplateListService
 };
-use app\services\message\NoticeService;
 use app\services\order\StoreOrderCartInfoServices;
 use app\services\user\UserServices;
 use crmeb\interfaces\ListenerInterface;
@@ -36,9 +38,6 @@ class Notice implements ListenerInterface
         try {
             [$data, $mark] = $event;
 
-            /** @var NoticeService $NoticeService */
-            $NoticeService = app()->make(NoticeService::class);
-
             /** @var WechatTemplateListService $WechatTemplateList */
             $WechatTemplateList = app()->make(WechatTemplateListService::class);
 
@@ -51,7 +50,7 @@ class Notice implements ListenerInterface
             /** @var EnterpriseWechatService $EnterpriseWechat */
             $EnterpriseWechat = app()->make(EnterpriseWechatService::class);
 
-            /** @var  SmsService $NoticeSms */
+            /** @var SmsService $NoticeSms */
             $NoticeSms = app()->make(SmsService::class);
 
             /** @var StoreOrderCartInfoServices $orderInfoServices */
@@ -93,7 +92,7 @@ class Notice implements ListenerInterface
                         $RoutineTemplateList->sendOrderSuccess($data['uid'], $data['pay_price'], $data['order_id']);
                         //小票打印
                         if (isset($data['cart_id']) && $data['cart_id']) {
-                            $NoticeService->orderPrint($data);
+                            PrintJob::dispatch([$data['id']]);
                         }
                         break;
                     //发货给用户
@@ -355,7 +354,7 @@ class Notice implements ListenerInterface
                         $link = '/pages/admin/orderDetail/index?id=' . $order['order_id'];
                         $WechatTemplateList->sendAdminOrder($order['order_id'], $storeName, $title, $status, $link);
                         //企业微信通知
-                        $EnterpriseWechat->sendMsg(['order_id' => $order['order_id']]);
+                        EnterpriseWechatJob::dispatch(['order_id' => $order['order_id']]);
                         break;
                     //确认收货给客服
                     case 'send_admin_confirm_take_over':
@@ -372,7 +371,7 @@ class Notice implements ListenerInterface
                         $link = '/pages/admin/orderDetail/index?id=' . $order['order_id'];
                         $WechatTemplateList->sendAdminOrder($order['order_id'], $storeName, $title, $status, $link);
                         //企业微信通知
-                        $EnterpriseWechat->sendMsg(['storeTitle' => $storeTitle, 'order_id' => $order['order_id']]);
+                        EnterpriseWechatJob::dispatch(['storeTitle' => $storeTitle, 'order_id' => $order['order_id']]);
                         break;
                     //申请退款给客服发消息
                     case 'send_order_apply_refund':
@@ -382,7 +381,7 @@ class Notice implements ListenerInterface
                         //短信
                         $NoticeSms->sendAdminRefund($order);
                         //企业微信通知
-                        $EnterpriseWechat->sendMsg(['order_id' => $order['order_id']]);
+                        EnterpriseWechatJob::dispatch(['order_id' => $order['order_id']]);
                         //公众号
                         $storeName = $orderInfoServices->getCarIdByProductTitle((int)$order['id']);
                         $title = '亲,您有个退款订单待处理!';
@@ -395,7 +394,7 @@ class Notice implements ListenerInterface
                         //站内信
                         $SystemMsg->kefuSystemSend($data);
                         //企业微信通知
-                        $EnterpriseWechat->sendMsg($data);
+                        EnterpriseWechatJob::dispatch($data);
                         break;
                 }
 

+ 3 - 3
crmeb/app/listener/order/OrderCreateAfter.php

@@ -33,7 +33,7 @@ class OrderCreateAfter implements ListenerInterface
         $orderCreate->orderCreateAfter($order, $group, $combinationId || $seckillId || $bargainId);
 
         //清除订单缓存
-        CacheService::redisHandler()->delete('user_order_' . $uid . $key);
+        CacheService::delete('user_order_' . $uid . $key);
 
         //写入订单记录表
         /** @var StoreOrderStatusServices $statusService */
@@ -81,8 +81,8 @@ class OrderCreateAfter implements ListenerInterface
             $secs = $systemValue['order_cancel_time'];
         }
         //未支付10分钟后发送短信
-        UnpaidOrderSend::dispatchSece(600, [$orderId]);
+        UnpaidOrderSend::dispatchSecs(600, [$orderId]);
         //未支付根据系统设置事件取消订单
-        UnpaidOrderCancelJob::dispatchSece((int)($secs * 3600), [$orderId]);
+        UnpaidOrderCancelJob::dispatchSecs((int)($secs * 3600), [$orderId]);
     }
 }

+ 1 - 1
crmeb/app/listener/order/OrderDelivery.php

@@ -22,7 +22,7 @@ class OrderDelivery implements ListenerInterface
         $time = sys_config('system_delivery_time') ?? 0;
         if ($time != 0) {
             $sevenDay = 24 * 3600 * $time;
-            TakeOrderJob::dispatchSece((int)$sevenDay, [$orderInfo->id]);
+            TakeOrderJob::dispatchSecs((int)$sevenDay, [$orderInfo->id]);
         }
     }
 }

+ 7 - 7
crmeb/app/listener/out/OutPush.php

@@ -21,15 +21,15 @@ class OutPush implements ListenerInterface
             if ($item['push_open'] == 1) {
                 $token = $this->getPushToken($item);
                 if ($type == 'order_create_push') {
-                    OutPushJob::dispatchDo('orderCreate', [$data['order_id'], $item['order_create_push'] . '?pushToken=' . $token]);
+                    OutPushJob::dispatch('orderCreate', [$data['order_id'], $item['order_create_push'] . '?pushToken=' . $token]);
                 } elseif ($type == 'order_pay_push') {
-                    OutPushJob::dispatchDo('paySuccess', [$data['order_id'], $item['order_pay_push'] . '?pushToken=' . $token]);
+                    OutPushJob::dispatch('paySuccess', [$data['order_id'], $item['order_pay_push'] . '?pushToken=' . $token]);
                 } elseif ($type == 'refund_create_push') {
-                    OutPushJob::dispatchDo('refundCreate', [$data['order_id'], $item['refund_create_push'] . '?pushToken=' . $token]);
+                    OutPushJob::dispatch('refundCreate', [$data['order_id'], $item['refund_create_push'] . '?pushToken=' . $token]);
                 } elseif ($type == 'refund_cancel_push') {
-                    OutPushJob::dispatchDo('refundCancel', [$data['order_id'], $item['refund_cancel_push'] . '?pushToken=' . $token]);
+                    OutPushJob::dispatch('refundCancel', [$data['order_id'], $item['refund_cancel_push'] . '?pushToken=' . $token]);
                 } elseif ($type == 'user_update_push') {
-                    OutPushJob::dispatchDo('userUpdate', [$data, $item['user_update_push'] . '?pushToken=' . $token]);
+                    OutPushJob::dispatch('userUpdate', [$data, $item['user_update_push'] . '?pushToken=' . $token]);
                 }
             }
         }
@@ -42,7 +42,7 @@ class OutPush implements ListenerInterface
      */
     public function getPushToken(array $info)
     {
-        $token = CacheService::redisHandler()->get('pushToken' . $info['id']);
+        $token = CacheService::get('pushToken' . $info['id']);
         if (!$token) {
             $param = json_encode(['push_account' => $info['push_account'], 'push_password' => $info['push_password']], JSON_UNESCAPED_UNICODE);
             $res = HttpService::postRequest($info['push_token_url'], $param, ['Content-Type:application/json', 'Content-Length:' . strlen($param)]);
@@ -51,7 +51,7 @@ class OutPush implements ListenerInterface
                 Log::error(['msg' => $info['title'] . ',获取token失败']);
                 return false;
             }
-            CacheService::redisHandler()->set('pushToken' . $info['id'], $res['token'], $res['time']);
+            CacheService::set('pushToken' . $info['id'], $res['token'], $res['time']);
             return $res['token'];
         } else {
             return $token;

+ 12 - 12
crmeb/app/listener/timer/SystemTimer.php

@@ -30,12 +30,12 @@ class SystemTimer implements ListenerInterface
         foreach ($list as &$item) {
             //获取定时任务时间字符串
             $timeStr = $this->getTimerStr($item);
-            Log::error('mark:'.$item['mark']);
-            Log::error($timeStr);
+//            Log::error('mark:'.$item['mark']);
+//            Log::error($timeStr);
 
             if ($item['mark'] == 'order_cancel') {
                 new Crontab($timeStr, function () {
-                    Log::error('每隔30秒执行一次自动取消订单 '.date('Y-m-d H:i:s'));
+//                    Log::error('每隔30秒执行一次自动取消订单 '.date('Y-m-d H:i:s'));
                     //未支付自动取消订单
                     try {
                         /** @var StoreOrderServices $orderServices */
@@ -49,7 +49,7 @@ class SystemTimer implements ListenerInterface
 
             if ($item['mark'] == 'pink_expiration') {
                 new Crontab($timeStr, function () {
-                    Log::error('每隔1分钟执行一次拼团到期订单处理 '.date('Y-m-d H:i:s'));
+//                    Log::error('每隔1分钟执行一次拼团到期订单处理 '.date('Y-m-d H:i:s'));
                     //拼团到期订单处理
                     try {
                         /** @var StorePinkServices $storePinkServices */
@@ -63,7 +63,7 @@ class SystemTimer implements ListenerInterface
 
             if ($item['mark'] == 'agent_unbind') {
                 new Crontab($timeStr, function () {
-                    Log::error('每隔1分钟执行一次自动解除上级绑定 '.date('Y-m-d H:i:s'));
+//                    Log::error('每隔1分钟执行一次自动解除上级绑定 '.date('Y-m-d H:i:s'));
                     //自动解绑上级绑定
                     try {
                         /** @var AgentManageServices $agentManage */
@@ -77,7 +77,7 @@ class SystemTimer implements ListenerInterface
 
             if ($item['mark'] == 'live_product_status') {
                 new Crontab($timeStr, function () {
-                    Log::error('每隔3分钟执行一次更新直播商品状态 '.date('Y-m-d H:i:s'));
+//                    Log::error('每隔3分钟执行一次更新直播商品状态 '.date('Y-m-d H:i:s'));
                     //更新直播商品状态
                     try {
                         /** @var LiveGoodsServices $liveGoods */
@@ -91,7 +91,7 @@ class SystemTimer implements ListenerInterface
 
             if ($item['mark'] == 'live_room_status') {
                 new Crontab($timeStr, function () {
-                    Log::error('每隔3分钟执行一次更新直播间状态 '.date('Y-m-d H:i:s'));
+//                    Log::error('每隔3分钟执行一次更新直播间状态 '.date('Y-m-d H:i:s'));
                     //更新直播间状态
                     try {
                         /** @var LiveRoomServices $liveRoom */
@@ -105,7 +105,7 @@ class SystemTimer implements ListenerInterface
 
             if ($item['mark'] == 'take_delivery') {
                 new Crontab($timeStr, function () {
-                    Log::error('每隔5分钟执行一次自动收货 '.date('Y-m-d H:i:s'));
+//                    Log::error('每隔5分钟执行一次自动收货 '.date('Y-m-d H:i:s'));
                     //自动收货
                     try {
                         /** @var StoreOrderTakeServices $services */
@@ -119,7 +119,7 @@ class SystemTimer implements ListenerInterface
 
             if ($item['mark'] == 'advance_off') {
                 new Crontab($timeStr, function () {
-                    Log::error('每隔5分钟执行一次查询预售到期商品自动下架 '.date('Y-m-d H:i:s'));
+//                    Log::error('每隔5分钟执行一次查询预售到期商品自动下架 '.date('Y-m-d H:i:s'));
                     //查询预售到期商品自动下架
                     try {
                         /** @var StoreProductServices $product */
@@ -133,7 +133,7 @@ class SystemTimer implements ListenerInterface
 
             if ($item['mark'] == 'product_replay') {
                 new Crontab($timeStr, function () {
-                    Log::error('每隔5分钟执行一次自动好评 '.date('Y-m-d H:i:s'));
+//                    Log::error('每隔5分钟执行一次自动好评 '.date('Y-m-d H:i:s'));
                     //自动好评
                     try {
                         /** @var StoreOrderServices $orderServices */
@@ -145,9 +145,9 @@ class SystemTimer implements ListenerInterface
                 });
             }
 
-            if ($item['mark'] == 'product_replay') {
+            if ($item['mark'] == 'clear_poster') {
                 new Crontab($timeStr, function () {
-                    Log::error('每天0时30分0秒执行一次清除昨日海报 '.date('Y-m-d H:i:s'));
+//                    Log::error('每天0时30分0秒执行一次清除昨日海报 '.date('Y-m-d H:i:s'));
                     //清除昨日海报
                     try {
                         /** @var SystemAttachmentServices $attach */

+ 2 - 2
crmeb/app/outapi/OutApiExceptionHandle.php

@@ -84,9 +84,9 @@ class OutApiExceptionHandle extends Handle
             'trace' => $e->getTrace(),
             'previous' => $e->getPrevious(),
         ] : [];
-        $message = Env::get('app_debug', false) ? '接口报错:' . $e->getMessage() : '很抱歉,系统开小差了';
+        $message = Env::get('app_debug', false) ? $e->getMessage() : '很抱歉,系统开小差了';
         // 添加自定义异常处理机制
-        if ($e instanceof AuthException || $e instanceof AdminException || $e instanceof ApiException) {
+        if ($e instanceof AuthException || $e instanceof AdminException || $e instanceof ApiException || $e instanceof ValidateException) {
             return app('json')->make($e->getCode() ?: 400, $message, $massageData);
         } else {
             return app('json')->fail($message, $massageData);

+ 1 - 1
crmeb/app/outapi/controller/StoreOrder.php

@@ -67,7 +67,7 @@ class StoreOrder extends AuthController
         ], true);
         if ($status != '') $data['status'] = $status;
         $data['is_show'] = 1;
-        $list = CacheService::get('EXPRESS_LIST', function () use ($services, $data) {
+        $list = CacheService::remember('EXPRESS_LIST', function () use ($services, $data) {
             return $services->express($data);
         }, 86400);
         return app('json')->success($list);

+ 6 - 0
crmeb/app/services/BaseServices.php

@@ -11,6 +11,7 @@
 
 namespace app\services;
 
+use crmeb\traits\ServicesTrait;
 use crmeb\utils\JwtAuth;
 use think\facade\Db;
 use think\facade\Config;
@@ -22,6 +23,9 @@ use think\facade\Route as Url;
  */
 abstract class BaseServices
 {
+
+    use ServicesTrait;
+
     /**
      * 模型注入
      * @var object
@@ -64,7 +68,9 @@ abstract class BaseServices
      * 创建token
      * @param int $id
      * @param $type
+     * @param string $pwd
      * @return array
+     * @throws \Psr\SimpleCache\InvalidArgumentException
      */
     public function createToken(int $id, $type, $pwd = '')
     {

+ 8 - 0
crmeb/app/services/activity/bargain/StoreBargainServices.php

@@ -18,6 +18,7 @@ use app\Request;
 use app\services\BaseServices;
 use app\services\order\StoreOrderServices;
 use app\services\other\PosterServices;
+use app\services\other\QrcodeServices;
 use app\services\product\product\StoreCategoryServices;
 use app\services\product\product\StoreDescriptionServices;
 use app\services\product\product\StoreProductServices;
@@ -864,6 +865,7 @@ class StoreBargainServices extends BaseServices
      * 获取砍价海报信息
      * @param int $bargainId
      * @param $user
+     * @return array
      * @throws \think\db\exception\DataNotFoundException
      * @throws \think\db\exception\DbException
      * @throws \think\db\exception\ModelNotFoundException
@@ -938,6 +940,12 @@ class StoreBargainServices extends BaseServices
                 }
             } catch (\Throwable $e) {
             }
+        } else {
+            if (sys_config('share_qrcode', 0) && request()->isWechat()) {
+                /** @var QrcodeServices $qrcodeService */
+                $qrcodeService = app()->make(QrcodeServices::class);
+                $data['url'] = $qrcodeService->getTemporaryQrcode('bargain-' . $bargainId . '-' . $user['uid'], $user['uid'])->url;
+            }
         }
         return $data;
     }

+ 0 - 3
crmeb/app/services/activity/bargain/StoreBargainUserHelpServices.php

@@ -17,7 +17,6 @@ use app\dao\activity\bargain\StoreBargainUserHelpDao;
 use app\services\user\UserServices;
 use crmeb\exceptions\AdminException;
 use crmeb\exceptions\ApiException;
-use crmeb\traits\ServicesTrait;
 
 /**
  *
@@ -29,8 +28,6 @@ use crmeb\traits\ServicesTrait;
 class StoreBargainUserHelpServices extends BaseServices
 {
 
-    use ServicesTrait;
-
     /**
      * StoreBargainUserHelpServices constructor.
      * @param StoreBargainUserHelpDao $dao

+ 8 - 3
crmeb/app/services/activity/combination/StoreCombinationServices.php

@@ -386,9 +386,14 @@ class StoreCombinationServices extends BaseServices
         $storeInfo['userLike'] = false;
         $storeInfo['store_name'] = $storeInfo['title'];
 
-        /** @var QrcodeServices $qrcodeService */
-        $qrcodeService = app()->make(QrcodeServices::class);
-        $storeInfo['code_base'] = $qrcodeService->getWechatQrcodePath($id . '_product_combination_detail_wap.jpg', '/pages/activity/goods_combination_details/index?id=' . $id);
+        if (sys_config('share_qrcode', 0) && request()->isWechat()) {
+            /** @var QrcodeServices $qrcodeService */
+            $qrcodeService = app()->make(QrcodeServices::class);
+            $storeInfo['wechat_code'] = $qrcodeService->getTemporaryQrcode('combination-' . $id, $uid)->url;
+        } else {
+            $storeInfo['wechat_code'] = '';
+        }
+
         $data['storeInfo'] = get_thumb_water($storeInfo, 'big', ['image', 'images']);
         $storeInfoNew = get_thumb_water($storeInfo, 'small');
         $data['storeInfo']['small_image'] = $storeInfoNew['image'];

+ 8 - 1
crmeb/app/services/activity/combination/StorePinkServices.php

@@ -18,6 +18,7 @@ use app\services\BaseServices;
 use app\services\order\StoreOrderRefundServices;
 use app\services\order\StoreOrderServices;
 use app\services\other\PosterServices;
+use app\services\other\QrcodeServices;
 use app\services\system\attachment\SystemAttachmentServices;
 use app\services\user\UserServices;
 use crmeb\exceptions\ApiException;
@@ -465,7 +466,7 @@ class StorePinkServices extends BaseServices
             $number = (int)bcsub((string)$pink['people'], '1', 0);
             if ($number) CacheService::setStock(md5($pink['id']), $number, 3);
 
-            PinkJob::dispatchSece((int)(($product->effective_time * 3600) + 60), [$pink['id']]);
+            PinkJob::dispatchSecs((int)(($product->effective_time * 3600) + 60), [$pink['id']]);
             // 开团成功发送模板消息
             event('notice.notice', [['orderInfo' => $orderInfo, 'title' => $product['title'], 'pink' => $pink], 'open_pink_success']);
 
@@ -883,6 +884,12 @@ class StorePinkServices extends BaseServices
                 $data['url'] = $url;
                 if ($imageInfo['image_type'] == 1)
                     $data['url'] = $siteUrl . $url;
+            } else {
+                if (sys_config('share_qrcode', 0) && request()->isWechat()) {
+                    /** @var QrcodeServices $qrcodeService */
+                    $qrcodeService = app()->make(QrcodeServices::class);
+                    $data['url'] = $qrcodeService->getTemporaryQrcode('pink-' . $id, $user['uid'])->url;
+                }
             }
         } catch (\Throwable $e) {
         }

+ 0 - 3
crmeb/app/services/activity/integral/StoreIntegralOrderServices.php

@@ -23,7 +23,6 @@ use crmeb\exceptions\AdminException;
 use crmeb\exceptions\ApiException;
 use crmeb\services\FormBuilder as Form;
 use crmeb\services\printer\Printer;
-use crmeb\traits\ServicesTrait;
 
 /**
  * Class StoreIntegralOrderServices
@@ -35,8 +34,6 @@ use crmeb\traits\ServicesTrait;
 class StoreIntegralOrderServices extends BaseServices
 {
 
-    use ServicesTrait;
-
     /**
      * 发货类型
      * @var string[]

+ 0 - 2
crmeb/app/services/activity/integral/StoreIntegralOrderStatusServices.php

@@ -14,7 +14,6 @@ namespace app\services\activity\integral;
 
 use app\dao\activity\integral\StoreIntegralOrderStatusDao;
 use app\services\BaseServices;
-use crmeb\traits\ServicesTrait;
 
 /**
  * 订单状态
@@ -23,7 +22,6 @@ use crmeb\traits\ServicesTrait;
  */
 class StoreIntegralOrderStatusServices extends BaseServices
 {
-    use ServicesTrait;
 
     /**
      * 构造方法

+ 3 - 3
crmeb/app/services/activity/live/LiveAnchorServices.php

@@ -162,7 +162,7 @@ class LiveAnchorServices extends BaseServices
     public function syncAnchor($is_job = false)
     {
         $key = md5('Live_sync_status');
-        $res = CacheService::redisHandler()->get($key);
+        $res = CacheService::get($key);
         if (!$res || $is_job) {
             $start = 0;
             $limit = 30;
@@ -187,8 +187,8 @@ class LiveAnchorServices extends BaseServices
                 $this->dao->saveAll($dataAll);
             }
             //支付成功后发送消息
-            if (!$is_job) LiveJob::dispatchSece(120);
-            CacheService::redisHandler()->set($key, 1, 0);
+            if (!$is_job) LiveJob::dispatchSecs(120);
+            CacheService::set($key, 1, 0);
         }
         return true;
     }

+ 4 - 6
crmeb/app/services/activity/lottery/LuckLotteryServices.php

@@ -589,8 +589,7 @@ class LuckLotteryServices extends BaseServices
             return true;
         }
         $key = 'user_' . $type . '_luck_lottery_' . $uid;
-        $cache = CacheService::redisHandler();
-        return $cache->set($key, $lottery['factor_num'], 120);
+        return CacheService::set($key, $lottery['factor_num'], 120);
     }
 
     /**
@@ -603,7 +602,7 @@ class LuckLotteryServices extends BaseServices
     public function getCacheLotteryNum(int $uid, string $type = 'order')
     {
         $key = 'user_' . $type . '_luck_lottery_' . $uid;
-        $num = CacheService::redisHandler()->get($key);
+        $num = CacheService::get($key);
         return empty($num) ? 0 : $num;
     }
 
@@ -618,11 +617,10 @@ class LuckLotteryServices extends BaseServices
     {
         $key = 'user_' . $type . '_luck_lottery_' . $uid;
         $num = $this->getCacheLotteryNum($uid, $type);
-        $cache = CacheService::redisHandler();
         if ($num > 1) {
-            $cache->set($key, $num - 1, 120);
+            CacheService::set($key, $num - 1, 120);
         } else {
-            $cache->delete($key);
+            CacheService::delete($key);
         }
         return true;
     }

+ 10 - 6
crmeb/app/services/activity/seckill/StoreSeckillServices.php

@@ -478,9 +478,13 @@ class StoreSeckillServices extends BaseServices
         $productInfo = $storeProductService->get($storeInfo['product_id']);
         $storeInfo['total'] = $productInfo['sales'] + $productInfo['ficti'];
 
-        /** @var QrcodeServices $qrcodeService */
-        $qrcodeService = app()->make(QrcodeServices::class);
-        $storeInfo['code_base'] = $qrcodeService->getWechatQrcodePath($id . '_' . $uid . '_product_seckill_detail_wap.jpg', '/pages/activity/goods_seckill_details/index?id=' . $id . '&spread=' . $uid);
+        if (sys_config('share_qrcode', 0) && request()->isWechat()) {
+            /** @var QrcodeServices $qrcodeService */
+            $qrcodeService = app()->make(QrcodeServices::class);
+            $storeInfo['wechat_code'] = $qrcodeService->getTemporaryQrcode('seckill-' . $id, $uid)->url;
+        } else {
+            $storeInfo['wechat_code'] = '';
+        }
 
         /** @var StoreOrderServices $storeOrderServices */
         $storeOrderServices = app()->make(StoreOrderServices::class);
@@ -513,7 +517,7 @@ class StoreSeckillServices extends BaseServices
         if ($storeInfo['status'] == 1) {
             if ($storeInfo['start_time'] > time()) {
                 $storeInfo['status'] = 2;
-            } elseif ($storeInfo['stop_time'] < time()) {
+            } elseif (($storeInfo['stop_time'] + 86400) < time()) {
                 $storeInfo['status'] = 0;
             } else {
                 /** @var SystemGroupDataServices $systemGroupDataService */
@@ -612,7 +616,7 @@ class StoreSeckillServices extends BaseServices
         $cache = app()->make(CacheService::class);
         $res = true;
         if (!$isPush) {
-            $cache->del($name);
+            $cache->delete($name);
         }
         for ($i = 1; $i <= $number; $i++) {
             $res = $res && $cache->lPush($name, $i);
@@ -689,7 +693,7 @@ class StoreSeckillServices extends BaseServices
     {
         /** @var CacheService $cache */
         $cache = app()->make(CacheService::class);
-        return $cache->redisHandler()->lLen('seckill_' . $unique . '_' . $type) >= $number;
+        return $cache->lLen('seckill_' . $unique . '_' . $type) >= $number;
     }
 
     /**

+ 25 - 18
crmeb/app/services/agent/DivisionAgentApplyServices.php

@@ -14,6 +14,7 @@ use crmeb\exceptions\AdminException;
 use crmeb\exceptions\ApiException;
 use crmeb\services\FormBuilder as Form;
 use app\services\other\UploadService;
+use think\facade\Log;
 use think\facade\Route;
 
 class DivisionAgentApplyServices extends BaseServices
@@ -202,26 +203,32 @@ class DivisionAgentApplyServices extends BaseServices
             $item['orderCount'] = $item['pay_count'];
             $item['numberCount'] = $orderService->sum(['uid' => $item['uid']], 'pay_price');
         }
-        /** @var SystemAttachmentServices $systemAttachment */
-        $systemAttachment = app()->make(SystemAttachmentServices::class);
-        $name = 'agent_' . $where['agent_id'] . '.jpg';
-        $siteUrl = sys_config('site_url', '');
-        $imageInfo = $systemAttachment->getInfo(['name' => $name]);
-        if (!$imageInfo) {
-            /** @var QrcodeServices $qrCode */
-            $qrCode = app()->make(QrcodeServices::class);
-            //公众号
-            $resCode = $qrCode->getForeverQrcode('agent', $where['agent_id']);
-            if ($resCode) {
-                $res = ['res' => $resCode, 'id' => $resCode['id']];
-            } else {
-                $res = false;
+        $codeUrl = '';
+        try {
+            /** @var SystemAttachmentServices $systemAttachment */
+            $systemAttachment = app()->make(SystemAttachmentServices::class);
+            $name = 'agent_' . $where['agent_id'] . '.jpg';
+            $siteUrl = sys_config('site_url', '');
+            $imageInfo = $systemAttachment->getInfo(['name' => $name]);
+            if (!$imageInfo) {
+                /** @var QrcodeServices $qrCode */
+                $qrCode = app()->make(QrcodeServices::class);
+                //公众号
+                $resCode = $qrCode->getForeverQrcode('agent', $where['agent_id']);
+                if ($resCode) {
+                    $res = ['res' => $resCode, 'id' => $resCode['id']];
+                } else {
+                    $res = false;
+                }
+                if (!$res) throw new ApiException(410167);
+                $imageInfo = $this->downloadImage($resCode['url'], $name);
+                $systemAttachment->attachmentAdd($name, $imageInfo['size'], $imageInfo['type'], $imageInfo['att_dir'], $imageInfo['att_dir'], 1, $imageInfo['image_type'], time(), 2);
             }
-            if (!$res) throw new ApiException(410167);
-            $imageInfo = $this->downloadImage($resCode['url'], $name);
-            $systemAttachment->attachmentAdd($name, $imageInfo['size'], $imageInfo['type'], $imageInfo['att_dir'], $imageInfo['att_dir'], 1, $imageInfo['image_type'], time(), 2);
+            $codeUrl = strpos($imageInfo['att_dir'], 'http') === false ? $siteUrl . $imageInfo['att_dir'] : $imageInfo['att_dir'];
+        } catch (\Exception $e) {
+            Log::error('邀请员工二维码生成失败,失败原因' . $e->getMessage());
         }
-        $codeUrl = strpos($imageInfo['att_dir'], 'http') === false ? $siteUrl . $imageInfo['att_dir'] : $imageInfo['att_dir'];
+
         return compact('list', 'count', 'codeUrl');
     }
 

+ 67 - 11
crmeb/app/services/diy/DiyServices.php

@@ -68,7 +68,7 @@ class DiyServices extends BaseServices
      * @param int $id
      * @param array $data
      */
-    public function saveData(int $id = 0, array $data)
+    public function saveData(int $id = 0, array $data = [])
     {
         if ($id) {
             $data['update_time'] = time();
@@ -81,6 +81,11 @@ class DiyServices extends BaseServices
             if (!$res) throw new AdminException(100006);
             $id = $res->id;
         }
+
+        $this->cacheDriver()->clear();
+        $this->cacheDriver()->set('index_diy_' . $id, $data['version']);
+        $this->updateCacheDiyVersion();
+
         return $id;
     }
 
@@ -95,6 +100,8 @@ class DiyServices extends BaseServices
         if ($count) throw new AdminException(400458);
         $res = $this->dao->update($id, ['is_del' => 1]);
         if (!$res) throw new AdminException(100008);
+
+        $this->cacheDriver()->clear();
     }
 
     /**
@@ -106,6 +113,47 @@ class DiyServices extends BaseServices
         $this->dao->update(['is_diy' => 1], ['is_show' => 1, 'type' => 2]);
         $this->dao->update([['id', '<>', $id]], ['status' => 0]);
         $this->dao->update($id, ['status' => 1, 'update_time' => time()]);
+
+        $this->cacheDriver()->clear();
+        $this->updateCacheDiyVersion();
+    }
+
+    /**
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\DbException
+     * @throws \think\db\exception\ModelNotFoundException
+     * @author 等风来
+     * @email 136327134@qq.com
+     * @date 2023/2/8
+     */
+    public function updateCacheDiyVersion()
+    {
+        $diyInfo = $this->dao->get(['status' => 1, 'is_del' => 0], ['id', 'version']);
+        if (!$diyInfo) {
+            $this->cacheDriver()->delete('index_diy_default');
+        } else {
+            $this->cacheDriver()->set('index_diy_default', $diyInfo['version']);
+        }
+    }
+
+    /**
+     * @param int $id
+     * @return mixed|string|null
+     * @author 等风来
+     * @email 136327134@qq.com
+     * @date 2023/2/8
+     */
+    public function getDiyVersion(int $id)
+    {
+        if ($id) {
+            return $this->cacheDriver()->remember('index_diy_' . $id, function () use ($id) {
+                return $this->dao->value(['id' => $id], 'version');
+            });
+        } else {
+            return $this->cacheDriver()->remember('index_diy_default', function () {
+                return $this->dao->value(['status' => 1, 'is_del' => 0], 'version');
+            });
+        }
     }
 
     /**
@@ -119,13 +167,17 @@ class DiyServices extends BaseServices
     public function getDiy($id = 0)
     {
         $field = 'name,value,is_show,is_bg_color,color_picker,bg_pic,bg_tab_val,is_bg_pic,order_status,is_diy,title';
-        if ($id) {
-            $info = $this->dao->getOne(['id' => $id], $field);
-        } else {
-            $info = $this->dao->getOne(['status' => 1, 'is_del' => 0], $field);
-        }
+
+        $info = $this->cacheDriver()->remember('diy_info_' . $id, function () use ($field, $id) {
+            if ($id) {
+                $info = $this->dao->getOne(['id' => $id], $field);
+            } else {
+                $info = $this->dao->getOne(['status' => 1, 'is_del' => 0], $field);
+            }
+            return $info ? $info->toArray() : [];
+        });
+
         if ($info) {
-            $info = $info->toArray();
             if ($info['value']) {
                 $info['value'] = json_decode($info['value'], true);
                 if ($info['is_diy']) {
@@ -345,10 +397,14 @@ class DiyServices extends BaseServices
      */
     public function getNavigation(string $template_name)
     {
-        $value = $this->dao->value(['status' => 1], 'value');
-        if (!$value) {
-            $value = $this->dao->value(['template_name' => 'default'], 'value');
-        }
+        $value = $this->cacheDriver()->remember('navigation', function () {
+            $value = $this->dao->value(['status' => 1], 'value');
+            if (!$value) {
+                $value = $this->dao->value(['template_name' => 'default'], 'value');
+            }
+            return $value;
+        });
+
         $navigation = [];
         if ($value) {
             $value = json_decode($value, true);

+ 1 - 1
crmeb/app/services/diy/PageCategoryServices.php

@@ -41,7 +41,7 @@ class PageCategoryServices extends BaseServices
      */
     public function getCategroyList()
     {
-        return CacheService::get($this->tree_page_category_key, function () {
+        return CacheService::remember($this->tree_page_category_key, function () {
             return $this->getSonCategoryList();
         }, 86400);
     }

+ 3 - 12
crmeb/app/services/kefu/LoginServices.php

@@ -88,17 +88,12 @@ class LoginServices extends BaseServices
         $cacheService = app()->make(CacheService::class);
         //检测token是否过期
         $md5Token = md5($token);
-        if (!$token || !$cacheService->hasToken($md5Token) || !($cacheToken = $cacheService->getTokenBucket($md5Token))) {
+        if (!$token || !$cacheService->has($md5Token) || !($cacheService->get($md5Token, '', NULL, 'kefu'))) {
             throw new AuthException(110005);
         }
         if ($token === 'undefined') {
             throw new AuthException(110005);
         }
-        //是否超出有效次数
-        if (isset($cacheToken['invalidNum']) && $cacheToken['invalidNum'] >= 3) {
-            $cacheService->clearToken($md5Token);
-            throw new AuthException(110006);
-        }
 
         /** @var JwtAuth $jwtAuth */
         $jwtAuth = app()->make(JwtAuth::class);
@@ -108,19 +103,15 @@ class LoginServices extends BaseServices
         //验证token
         try {
             $jwtAuth->verifyToken();
-            $cacheService->setTokenBucket($md5Token, $cacheToken, $cacheToken['exp']);
-        } catch (ExpiredException $e) {
-            $cacheToken['invalidNum'] = isset($cacheToken['invalidNum']) ? $cacheToken['invalidNum']++ : 1;
-            $cacheService->setTokenBucket($md5Token, $cacheToken, $cacheToken['exp']);
         } catch (\Throwable $e) {
-            $noCli && $cacheService->clearToken($md5Token);
+            $noCli && $cacheService->delete($md5Token);
             throw new AuthException(110006);
         }
 
         //获取管理员信息
         $adminInfo = $this->dao->get($id);
         if (!$adminInfo || !$adminInfo->id) {
-            $noCli && $cacheService->clearToken($md5Token);
+            $noCli && $cacheService->delete($md5Token);
             throw new AuthException(110007);
         }
 

+ 0 - 2
crmeb/app/services/kefu/UserServices.php

@@ -15,7 +15,6 @@ namespace app\services\kefu;
 use app\dao\user\UserDao;
 use app\services\BaseServices;
 use crmeb\exceptions\ApiException;
-use crmeb\traits\ServicesTrait;
 use app\services\user\UserLabelServices;
 use app\services\system\SystemUserLevelServices;
 use app\services\user\UserLabelRelationServices;
@@ -27,7 +26,6 @@ use app\services\kefu\service\StoreServiceRecordServices;
  */
 class UserServices extends BaseServices
 {
-    use ServicesTrait;
 
     /**
      * UserServices constructor.

+ 0 - 3
crmeb/app/services/kefu/service/StoreServiceFeedbackServices.php

@@ -16,7 +16,6 @@ use app\dao\service\StoreServiceFeedbackDao;
 use app\services\BaseServices;
 use crmeb\exceptions\AdminException;
 use crmeb\services\FormBuilder;
-use crmeb\traits\ServicesTrait;
 
 /**
  * 客服反馈
@@ -26,8 +25,6 @@ use crmeb\traits\ServicesTrait;
 class StoreServiceFeedbackServices extends BaseServices
 {
 
-    use ServicesTrait;
-
     /**
      * StoreServiceFeedbackServices constructor.
      * @param StoreServiceFeedbackDao $dao

+ 0 - 3
crmeb/app/services/kefu/service/StoreServiceRecordServices.php

@@ -14,7 +14,6 @@ namespace app\services\kefu\service;
 
 use app\dao\service\StoreServiceRecordDao;
 use app\services\BaseServices;
-use crmeb\traits\ServicesTrait;
 use crmeb\utils\Str;
 use think\Model;
 
@@ -26,8 +25,6 @@ use think\Model;
 class StoreServiceRecordServices extends BaseServices
 {
 
-    use ServicesTrait;
-
     /**
      * StoreServiceRecordServices constructor.
      * @param StoreServiceRecordDao $dao

+ 0 - 2
crmeb/app/services/kefu/service/StoreServiceServices.php

@@ -17,7 +17,6 @@ use app\services\user\UserServices;
 use crmeb\exceptions\AdminException;
 use crmeb\exceptions\ApiException;
 use crmeb\services\FormBuilder;
-use crmeb\traits\ServicesTrait;
 
 /**
  * 客服
@@ -27,7 +26,6 @@ use crmeb\traits\ServicesTrait;
  */
 class StoreServiceServices extends BaseServices
 {
-    use ServicesTrait;
 
     /**
      * 创建form表单

+ 8 - 73
crmeb/app/services/message/NoticeService.php

@@ -11,12 +11,7 @@
 
 namespace app\services\message;
 
-
-use app\jobs\notice\EnterpriseWechatJob;
-use app\jobs\notice\PrintJob;
 use app\services\BaseServices;
-use app\services\order\StoreOrderCartInfoServices;
-use crmeb\exceptions\AdminException;
 use crmeb\services\CacheService;
 
 /**
@@ -25,31 +20,13 @@ use crmeb\services\CacheService;
  */
 class NoticeService extends BaseServices
 {
-
-    /**
-     * 发送消息类型
-     * @var array
-     */
-//    protected $type = [
-//        'is_sms' => SmsService::class,
-//        'is_system' => SystemSendServices::class,
-//        'is_wechat' => WechatTemplateService::class,
-//        'is_routine' => RoutineTemplateServices::class,
-//        'is_ent_wechat' => EntWechatServices::class,
-//    ];
-
-    /**
-     * @var array
-     */
-    protected $notceinfo;
-
-    /**
-     * @var string
-     */
+    protected $noticeInfo;
     protected $event;
 
     /**
+     * 设置
      * @param string $event
+     * @return $this
      * @throws \think\db\exception\DataNotFoundException
      * @throws \think\db\exception\DbException
      * @throws \think\db\exception\ModelNotFoundException
@@ -57,58 +34,16 @@ class NoticeService extends BaseServices
     public function setEvent(string $event)
     {
         if ($this->event != $event) {
-            $this->notceinfo = CacheService::get('NOTCE_' . $event);
-            if (!$this->notceinfo) {
+            $this->noticeInfo = CacheService::get('NOTICE_' . $event);
+            if (!$this->noticeInfo) {
                 /** @var SystemNotificationServices $services */
                 $services = app()->make(SystemNotificationServices::class);
-                $notceinfo = $services->getOneNotce(['mark' => $event]);
-                $this->notceinfo = $notceinfo ? $notceinfo->toArray() : [];
-                CacheService::set('NOTCE_' . $event, $this->notceinfo);
+                $noticeInfo = $services->getOneNotce(['mark' => $event]);
+                $this->noticeInfo = $noticeInfo ? $noticeInfo->toArray() : [];
+                CacheService::set('NOTICE_' . $event, $this->noticeInfo);
             }
             $this->event = $event;
         }
         return $this;
     }
-
-    /**
-     * 打印订单
-     * @param $order
-     * @param array $cartId
-     */
-    public function orderPrint($order)
-    {
-        /** @var StoreOrderCartInfoServices $cartServices */
-        $cartServices = app()->make(StoreOrderCartInfoServices::class);
-        $product = $cartServices->getCartInfoPrintProduct($order['id']);
-        if (!$product) {
-            throw new AdminException(400463);
-        }
-        $switch = (bool)sys_config('pay_success_printing_switch');
-        if (!$switch) {
-            throw new AdminException(400464);
-        }
-        if (sys_config('print_type', 1) == 1) {
-            $name = 'yi_lian_yun';
-            $configData = [
-                'clientId' => sys_config('printing_client_id', ''),
-                'apiKey' => sys_config('printing_api_key', ''),
-                'partner' => sys_config('develop_id', ''),
-                'terminal' => sys_config('terminal_number', '')
-            ];
-            if (!$configData['clientId'] || !$configData['apiKey'] || !$configData['partner'] || !$configData['terminal']) {
-                throw new AdminException(400465);
-            }
-        } else {
-            $name = 'fei_e_yun';
-            $configData = [
-                'feyUser' => sys_config('fey_user', ''),
-                'feyUkey' => sys_config('fey_ukey', ''),
-                'feySn' => sys_config('fey_sn', '')
-            ];
-            if (!$configData['feyUser'] || !$configData['feyUkey'] || !$configData['feySn']) {
-                throw new AdminException(400465);
-            }
-        }
-        PrintJob::dispatch('doJob', [$name, $configData, $order, $product]);
-    }
 }

+ 28 - 20
crmeb/app/services/message/notice/EnterpriseWechatService.php

@@ -11,11 +11,11 @@
 
 namespace app\services\message\notice;
 
-use app\services\message\NoticeService;
 use app\jobs\notice\EnterpriseWechatJob;
+use app\services\message\NoticeService;
+use crmeb\services\HttpService;
 use think\facade\Log;
 
-
 /**
  * 企业微信发送消息
  * Created by PhpStorm.
@@ -24,12 +24,11 @@ use think\facade\Log;
  */
 class EnterpriseWechatService extends NoticeService
 {
-
     /**
      * 判断是否开启权限
      * @var bool
      */
-    private $isopend = true;
+    private $isOpen = true;
 
     /**
      * 是否开启权限
@@ -38,30 +37,39 @@ class EnterpriseWechatService extends NoticeService
      */
     public function isOpen(string $mark)
     {
-        $this->isopend = $this->notceinfo['is_ent_wechat'] == 1 && $this->notceinfo['url'] !== '';
+        $this->isOpen = $this->noticeInfo['is_ent_wechat'] == 1 && $this->noticeInfo['url'] !== '';
         return $this;
 
     }
 
-
     /**
-     * 发送消息
-     * @param $uid uid
-     * @param array $data 模板内容
+     * 发送企业微信客服消息
+     * @param $data
      */
-    public function sendMsg($data)
+    public function weComSend($data)
     {
-        try {
-            if ($this->isopend) {
-                $url = $this->notceinfo['url'];
-                $ent_wechat_text = $this->notceinfo['ent_wechat_text'];
-                EnterpriseWechatJob::dispatchDo('doJob', [$data, $url, $ent_wechat_text]);
+        if ($this->isOpen) {
+            $url = $this->noticeInfo['url'];
+            $ent_wechat_text = $this->noticeInfo['ent_wechat_text'];
+            try {
+                $str = $ent_wechat_text;
+                foreach ($data as $key => $item) {
+                    $str = str_replace('{' . $key . '}', $item, $str);
+                }
+                $s = explode('\n', $str);
+                $d = '';
+                foreach ($s as $item) {
+                    $d .= $item . "\n>";
+                }
+                $d = substr($d, 0, strlen($d) - 2);
+                HttpService::postRequest($url, json_encode([
+                    'msgtype' => 'markdown',
+                    'markdown' => ['content' => $d]
+                ]));
+            } catch (\Throwable $e) {
+                Log::error('发送企业群消息失败,失败原因:' . $e->getMessage());
+
             }
-        } catch (\Exception $e) {
-            Log::error($e->getMessage());
-            return true;
         }
     }
-
-
 }

+ 5 - 5
crmeb/app/services/message/notice/RoutineTemplateListService.php

@@ -29,7 +29,7 @@ class RoutineTemplateListService extends NoticeService
      * 判断是否开启权限
      * @var bool
      */
-    private $isopend = true;
+    private $isOpen = true;
 
     /**
      * 是否开启权限
@@ -38,7 +38,7 @@ class RoutineTemplateListService extends NoticeService
      */
     public function isOpen(string $mark)
     {
-        $this->isopend = $this->notceinfo['is_routine'] === 1;
+        $this->isOpen = $this->noticeInfo['is_routine'] === 1;
         return $this;
 
     }
@@ -66,11 +66,11 @@ class RoutineTemplateListService extends NoticeService
     public function sendTemplate(int $uid, array $data, string $link = null, string $color = null)
     {
         try {
-            $this->isopend = $this->notceinfo['is_routine'] === 1;
-            if ($this->isopend) {
+            $this->isOpen = $this->noticeInfo['is_routine'] === 1;
+            if ($this->isOpen) {
                 $openid = $this->getOpenidByUid($uid);
                 //放入队列执行
-                TemplateJob::dispatchDo('doJob', ['subscribe', $openid, $this->notceinfo['mark'], $data, $link, $color]);
+                TemplateJob::dispatch('doJob', ['subscribe', $openid, $this->noticeInfo['mark'], $data, $link, $color]);
             }
         } catch (\Exception $e) {
             Log::error($e->getMessage());

+ 14 - 7
crmeb/app/services/message/notice/SmsService.php

@@ -34,7 +34,7 @@ class SmsService extends NoticeService
      * 判断是否开启权限
      * @var bool
      */
-    private $isopend = true;
+    private $isOpen = true;
 
     /**
      * 短信类型
@@ -49,7 +49,7 @@ class SmsService extends NoticeService
      */
     public function isOpen(string $mark)
     {
-        $this->isopend = $this->notceinfo['is_sms'] === 1;
+        $this->isOpen = $this->noticeInfo['is_sms'] === 1;
         return $this;
 
     }
@@ -63,10 +63,18 @@ class SmsService extends NoticeService
     public function sendSms($phone, array $data)
     {
         try {
-            $this->isopend = $this->notceinfo['is_sms'] === 1;
-            $mark = $this->notceinfo['mark'];
-            if ($this->isopend) {
-                SmsJob::dispatch('doJob', [$phone, $data, $mark]);
+            $this->isOpen = $this->noticeInfo['is_sms'] === 1;
+            $mark = $this->noticeInfo['mark'];
+            if ($this->isOpen) {
+                try{
+                    /** @var SmsService $smsServices */
+                    $smsServices = app()->make(SmsService::class);
+                    $smsServices->send(true, $phone, $data, $mark);
+                    return true;
+                }catch (\Throwable $e) {
+                    Log::error('发送短信失败,失败原因:' . $e->getMessage());
+                }
+                //SmsJob::dispatch('doJob', [$phone, $data, $mark]);
             }
         } catch (\Exception $e) {
             Log::error($e->getMessage());
@@ -107,7 +115,6 @@ class SmsService extends NoticeService
             if ($res === false) {
                 throw new ApiException($smsMake->getError());
             }
-            TaskJob::dispatchDo('modifyResultCode');
             return true;
         } else {
             return false;

+ 11 - 11
crmeb/app/services/message/notice/SystemMsgService.php

@@ -29,7 +29,7 @@ class SystemMsgService extends NoticeService
      * 判断是否开启权限
      * @var bool
      */
-    private $isopend = true;
+    private $isOpen = true;
 
     /**
      * 是否开启权限
@@ -38,7 +38,7 @@ class SystemMsgService extends NoticeService
      */
     public function isOpen(string $mark)
     {
-        $this->isopend = $this->notceinfo['is_system'] === 1;
+        $this->isOpen = $this->noticeInfo['is_system'] === 1;
         return $this;
 
     }
@@ -51,17 +51,17 @@ class SystemMsgService extends NoticeService
      */
     public function sendMsg(int $uid, $data)
     {
-        $this->isopend = $this->notceinfo['is_system'] === 1;
+        $this->isOpen = $this->noticeInfo['is_system'] === 1;
         try {
-            if ($this->isopend) {
-                $title = $this->notceinfo['system_title'];
-                $str = $this->notceinfo['system_text'];
+            if ($this->isOpen) {
+                $title = $this->noticeInfo['system_title'];
+                $str = $this->noticeInfo['system_text'];
                 foreach ($data as $key => $item) {
                     $str = str_replace('{' . $key . '}', $item, $str);
                     $title = str_replace('{' . $key . '}', $item, $title);
                 }
                 $sdata = [];
-                $sdata['mark'] = $this->notceinfo['mark'];
+                $sdata['mark'] = $this->noticeInfo['mark'];
                 $sdata['uid'] = $uid;
                 $sdata['content'] = $str;
                 $sdata['title'] = $title;
@@ -91,16 +91,16 @@ class SystemMsgService extends NoticeService
         $StoreServiceServices = app()->make(StoreServiceServices::class);
         $adminList = $StoreServiceServices->getStoreServiceOrderNotice();
         try {
-            if ($this->isopend) {
+            if ($this->isOpen) {
                 $save = [];
-                $title = $this->notceinfo['system_title'];
-                $str = $this->notceinfo['system_text'];
+                $title = $this->noticeInfo['system_title'];
+                $str = $this->noticeInfo['system_text'];
                 foreach ($data as $k => $val) {
                     $str = str_replace('{' . $k . '}', $val, $str);
                     $title = str_replace('{' . $k . '}', $val, $title);
                 }
                 foreach ($adminList as $key => $item) {
-                    $save[$key]['mark'] = $this->notceinfo['mark'];
+                    $save[$key]['mark'] = $this->noticeInfo['mark'];
                     $save[$key]['uid'] = $item['uid'];
                     $save[$key]['content'] = $str;
                     $save[$key]['title'] = $title;

+ 5 - 5
crmeb/app/services/message/notice/WechatTemplateListService.php

@@ -31,7 +31,7 @@ class WechatTemplateListService extends NoticeService
      * 判断是否开启权限
      * @var bool
      */
-    private $isopend = true;
+    private $isOpen = true;
 
     /**
      * 是否开启权限
@@ -40,7 +40,7 @@ class WechatTemplateListService extends NoticeService
      */
     public function isOpen(string $mark)
     {
-        $this->isopend = $this->notceinfo['is_wechat'] === 1;
+        $this->isOpen = $this->noticeInfo['is_wechat'] === 1;
         return $this;
 
     }
@@ -68,11 +68,11 @@ class WechatTemplateListService extends NoticeService
     public function sendTemplate(int $uid, array $data, string $link = null, string $color = null)
     {
         try {
-            $this->isopend = $this->notceinfo['is_wechat'] === 1;
-            if ($this->isopend) {
+            $this->isOpen = $this->noticeInfo['is_wechat'] === 1;
+            if ($this->isOpen) {
                 $openid = $this->getOpenidByUid($uid);
                 //放入队列执行
-                TemplateJob::dispatchDo('doJob', ['wechat', $openid, $this->notceinfo['mark'], $data, $link, $color]);
+                TemplateJob::dispatch('doJob', ['wechat', $openid, $this->noticeInfo['mark'], $data, $link, $color]);
             }
         } catch (\Exception $e) {
             Log::error($e->getMessage());

+ 159 - 64
crmeb/app/services/message/wechat/MessageServices.php

@@ -12,13 +12,19 @@
 namespace app\services\message\wechat;
 
 
+use app\services\activity\bargain\StoreBargainServices;
+use app\services\activity\combination\StoreCombinationServices;
+use app\services\activity\combination\StorePinkServices;
+use app\services\activity\seckill\StoreSeckillServices;
 use app\services\BaseServices;
 use app\services\other\QrcodeServices;
+use app\services\product\product\StoreProductServices;
 use app\services\user\LoginServices;
 use app\services\user\UserServices;
 use app\services\wechat\WechatQrcodeServices;
 use app\services\wechat\WechatReplyServices;
 use app\services\wechat\WechatUserServices;
+use crmeb\services\app\WechatService;
 use think\facade\Log;
 
 class MessageServices extends BaseServices
@@ -44,73 +50,162 @@ class MessageServices extends BaseServices
         $response = $wechatReplyService->reply('subscribe');
         if ($message->EventKey && ($qrInfo = $qrcodeService->getQrcode($message->Ticket, 'ticket'))) {
             $qrcodeService->scanQrcode($message->Ticket, 'ticket');
-            if (strtolower($qrInfo['third_type']) == 'spread') {
-                try {
-                    $spreadUid = $qrInfo['third_id'];
-                    $is_new = $wechatUser->saveUser($message->FromUserName);
-                    $uid = $wechatUser->getFieldValue($message->FromUserName, 'openid', 'uid', ['user_type', '<>', 'h5']);
-                    $userInfo = $userService->get($uid);
-                    if ($spreadUid == $uid) {
-                        $response = '自己不能推荐自己';
-                    } else if (!$userInfo) {
-                        $response = '用户不存在';
-                    } else if ($userInfo['spread_uid']) {
-                        $response = '已有推荐人!';
-                    } else if (!$loginService->updateUserInfo(['code' => $spreadUid], $userInfo, $is_new)) {
-                        $response = '绑定推荐人失败!';
+            $thirdType = explode('-', $qrInfo['third_type']);
+            $baseUrl = sys_config('site_url');
+            if (in_array(strtolower($thirdType[0]), ['spread', 'agent', 'wechatqrcode', 'product', 'combination', 'seckill', 'bargain', 'pink'])) {
+                //扫码需要生成用户流程
+                $spreadUid = $qrInfo['third_id'];
+                $spreadInfo = $userService->get($spreadUid);
+                $is_new = $wechatUser->saveUser($message->FromUserName);
+                $uid = $wechatUser->getFieldValue($message->FromUserName, 'openid', 'uid', ['user_type', '<>', 'h5']);
+                $userInfo = $userService->get($uid);
+                if (strtolower($thirdType[0]) == 'spread') {
+                    try {
+                        if ($spreadUid == $uid) {
+                            $response = '自己不能推荐自己';
+                        } else if (!$userInfo) {
+                            $response = '用户不存在';
+                        } else if (!$spreadInfo) {
+                            $response = '上级用户不存在';
+                        } else if ($userInfo['spread_uid']) {
+                            $response = '已有推荐人!';
+                        } else if (!$loginService->updateUserInfo(['code' => $spreadUid], $userInfo, $is_new)) {
+                            $response = '绑定推荐人失败!';
+                        }
+                        $wechatNews['title'] = sys_config('site_name');
+                        $wechatNews['image'] = sys_config('wap_login_logo');
+                        $wechatNews['url'] = $baseUrl . '/pages/index/index';
+                        $loginService->updateUserInfo(['code' => $spreadUid], $userInfo, $is_new);
+                        $messages = WechatService::newsMessage($wechatNews);
+                        WechatService::staffService()->message($messages)->to($message->FromUserName)->send();
+                    } catch (\Exception $e) {
+                        $response = $e->getMessage();
                     }
-                } catch (\Exception $e) {
-                    $response = $e->getMessage();
-                }
-            } elseif (strtolower($qrInfo['third_type']) == 'agent') {
-                try {
-                    $spreadUid = $qrInfo['third_id'];
-                    $spreadInfo = $userService->get($spreadUid);
-                    $is_new = $wechatUser->saveUser($message->FromUserName);
-                    $uid = $wechatUser->getFieldValue($message->FromUserName, 'openid', 'uid', ['user_type', '<>', 'h5']);
-                    $userInfo = $userService->get($uid);
-                    if ($spreadUid == $uid) {
-                        $response = '自己不能推荐自己';
-                    } else if (!$userInfo) {
-                        $response = '用户不存在';
-                    } else if (!$spreadInfo) {
-                        $response = '上级用户不存在';
-                    } else if ($userInfo->is_division) {
-                        $response = '您是事业部,不能绑定成为别人的员工';
-                    } else if ($userInfo->is_agent) {
-                        $response = '您是代理商,不能绑定成为别人的员工';
-                    } else if ($loginService->updateUserInfo(['code' => $spreadUid, 'is_staff' => 1], $userInfo, $is_new)) {
-                        $response = '绑定店员成功!';
+                } elseif (strtolower($thirdType[0]) == 'agent') {
+                    try {
+                        if ($spreadUid == $uid) {
+                            $response = '自己不能推荐自己';
+                        } else if (!$userInfo) {
+                            $response = '用户不存在';
+                        } else if (!$spreadInfo) {
+                            $response = '上级用户不存在';
+                        } else if ($userInfo->is_division) {
+                            $response = '您是事业部,不能绑定成为别人的员工';
+                        } else if ($userInfo->is_agent) {
+                            $response = '您是代理商,不能绑定成为别人的员工';
+                        } else if ($loginService->updateUserInfo(['code' => $spreadUid, 'is_staff' => 1], $userInfo, $is_new)) {
+                            $response = '绑定店员成功!';
+                        }
+                    } catch (\Exception $e) {
+                        $response = $e->getMessage();
                     }
-                } catch (\Exception $e) {
-                    $response = $e->getMessage();
-                }
-            } elseif (strtolower($qrInfo['third_type']) == 'wechatqrcode') {
-                /** @var WechatQrcodeServices $wechatQrcodeService */
-                $wechatQrcodeService = app()->make(WechatQrcodeServices::class);
-                try {
-                    //wechatqrcode类型的二维码数据中,third_id为渠道码的id
-                    $qrcodeInfo = $wechatQrcodeService->qrcodeInfo($qrInfo['third_id']);
-                    $spreadUid = $qrcodeInfo['uid'];
-                    $spreadInfo = $userService->get($spreadUid);
-                    $is_new = $wechatUser->saveUser($message->FromUserName);
-                    $uid = $wechatUser->getFieldValue($message->FromUserName, 'openid', 'uid', ['user_type', '<>', 'h5']);
-                    $userInfo = $userService->get($uid);
-                    if ($qrcodeInfo['status'] == 0 || $qrcodeInfo['is_del'] == 1 || ($qrcodeInfo['end_time'] < time() && $qrcodeInfo['end_time'] > 0)) {
-                        $response = '二维码已失效';
-                    } else if ($spreadUid == $uid) {
-                        $response = '自己不能推荐自己';
-                    } else if (!$userInfo) {
-                        $response = '用户不存在';
-                    } else if (!$spreadInfo) {
-                        $response = '上级用户不存在';
-                    } else if ($loginService->updateUserInfo(['code' => $spreadUid], $userInfo, $is_new)) {
-                        //写入扫码记录,返回内容
-                        $response = $wechatQrcodeService->wechatQrcodeRecord($qrcodeInfo, $userInfo, $spreadInfo);
+                } elseif (strtolower($thirdType[0]) == 'wechatqrcode') {
+                    /** @var WechatQrcodeServices $wechatQrcodeService */
+                    $wechatQrcodeService = app()->make(WechatQrcodeServices::class);
+                    try {
+                        //wechatqrcode类型的二维码数据中,third_id为渠道码的id
+                        $qrcodeInfo = $wechatQrcodeService->qrcodeInfo($qrInfo['third_id']);
+                        $spreadUid = $qrcodeInfo['uid'];
+                        $spreadInfo = $userService->get($spreadUid);
+                        $is_new = $wechatUser->saveUser($message->FromUserName);
+                        $uid = $wechatUser->getFieldValue($message->FromUserName, 'openid', 'uid', ['user_type', '<>', 'h5']);
+                        $userInfo = $userService->get($uid);
+                        if ($qrcodeInfo['status'] == 0 || $qrcodeInfo['is_del'] == 1 || ($qrcodeInfo['end_time'] < time() && $qrcodeInfo['end_time'] > 0)) {
+                            $response = '二维码已失效';
+                        } else if ($spreadUid == $uid) {
+                            $response = '自己不能推荐自己';
+                        } else if (!$userInfo) {
+                            $response = '用户不存在';
+                        } else if (!$spreadInfo) {
+                            $response = '上级用户不存在';
+                        } else if ($loginService->updateUserInfo(['code' => $spreadUid], $userInfo, $is_new)) {
+                            //写入扫码记录,返回内容
+                            $response = $wechatQrcodeService->wechatQrcodeRecord($qrcodeInfo, $userInfo, $spreadInfo);
+                        }
+                    } catch (\Exception $e) {
+                        $response = $e->getMessage();
+                    }
+                } elseif (strtolower($thirdType[0]) == 'product') {
+                    try {
+                        /** @var StoreProductServices $productService */
+                        $productService = app()->make(StoreProductServices::class);
+                        $productInfo = $productService->get($thirdType[1] ?? 0);
+                        $wechatNews['title'] = $productInfo->store_name;
+                        $wechatNews['image'] = $productInfo->image;
+                        $wechatNews['description'] = $productInfo->store_info;
+                        $wechatNews['url'] = $baseUrl . '/pages/goods_details/index?id=' . $thirdType[1];
+                        $loginService->updateUserInfo(['code' => $spreadUid], $userInfo, $is_new);
+                        $messages = WechatService::newsMessage($wechatNews);
+                        WechatService::staffService()->message($messages)->to($message->FromUserName)->send();
+                    } catch (\Exception $e) {
+                        $response = $e->getMessage();
+                    }
+                } elseif (strtolower($thirdType[0]) == 'combination') {
+                    try {
+                        /** @var StoreCombinationServices $combinationService */
+                        $combinationService = app()->make(StoreCombinationServices::class);
+                        $productInfo = $combinationService->get($thirdType[1] ?? 0);
+                        $wechatNews['title'] = $productInfo->title;
+                        $wechatNews['image'] = $productInfo->image;
+                        $wechatNews['description'] = $productInfo->info;
+                        $wechatNews['url'] = $baseUrl . '/pages/activity/goods_combination_details/index?id=' . $thirdType[1];
+                        $loginService->updateUserInfo(['code' => $spreadUid], $userInfo, $is_new);
+                        $messages = WechatService::newsMessage($wechatNews);
+                        WechatService::staffService()->message($messages)->to($message->FromUserName)->send();
+                    } catch (\Exception $e) {
+                        $response = $e->getMessage();
+                    }
+                } elseif (strtolower($thirdType[0]) == 'seckill') {
+                    try {
+                        /** @var StoreSeckillServices $seckillService */
+                        $seckillService = app()->make(StoreSeckillServices::class);
+                        $productInfo = $seckillService->get($thirdType[1] ?? 0);
+                        $wechatNews['title'] = $productInfo->title;
+                        $wechatNews['image'] = $productInfo->image;
+                        $wechatNews['description'] = $productInfo->info;
+                        $wechatNews['url'] = $baseUrl . '/pages/activity/goods_seckill_details/index?id=' . $thirdType[1];
+                        $loginService->updateUserInfo(['code' => $spreadUid], $userInfo, $is_new);
+                        $messages = WechatService::newsMessage($wechatNews);
+                        WechatService::staffService()->message($messages)->to($message->FromUserName)->send();
+                    } catch (\Exception $e) {
+                        $response = $e->getMessage();
+                    }
+                } elseif (strtolower($thirdType[0]) == 'bargain') {
+                    try {
+                        /** @var StoreBargainServices $bargainService */
+                        $bargainService = app()->make(StoreBargainServices::class);
+                        $productInfo = $bargainService->get($thirdType[1] ?? 0);
+                        $wechatNews['title'] = $productInfo->title;
+                        $wechatNews['image'] = $productInfo->image;
+                        $wechatNews['description'] = $productInfo->info;
+                        $wechatNews['url'] = $baseUrl . '/pages/activity/goods_bargain_details/index?id=' . $thirdType[1] . '&bargain=' . $thirdType[2];
+                        $loginService->updateUserInfo(['code' => $spreadUid], $userInfo, $is_new);
+                        $messages = WechatService::newsMessage($wechatNews);
+                        WechatService::staffService()->message($messages)->to($message->FromUserName)->send();
+                    } catch (\Exception $e) {
+                        $response = $e->getMessage();
+                    }
+                } elseif (strtolower($thirdType[0]) == 'pink') {
+                    try {
+                        /** @var StorePinkServices $pinkService */
+                        $pinkService = app()->make(StorePinkServices::class);
+                        /** @var StoreCombinationServices $combinationService */
+                        $combinationService = app()->make(StoreCombinationServices::class);
+                        $pinktInfo = $pinkService->get($thirdType[1]);
+                        $productInfo = $combinationService->get($pinktInfo->cid);
+                        $wechatNews['title'] = $productInfo->title;
+                        $wechatNews['image'] = $productInfo->image;
+                        $wechatNews['description'] = $productInfo->info;
+                        $wechatNews['url'] = $baseUrl . '/pages/activity/goods_combination_status/index?id=' . $thirdType[1];
+                        $loginService->updateUserInfo(['code' => $spreadUid], $userInfo, $is_new);
+                        $messages = WechatService::newsMessage($wechatNews);
+                        WechatService::staffService()->message($messages)->to($message->FromUserName)->send();
+                    } catch (\Exception $e) {
+                        $response = $e->getMessage();
                     }
-                } catch (\Exception $e) {
-                    $response = $e->getMessage();
                 }
+            } else {
+                //扫码不生成用户流程
             }
         }
         return $response;
@@ -185,7 +280,7 @@ class MessageServices extends BaseServices
                         $response = '您是事业部,不能绑定成为别人的员工';
                     } else if ($userInfo->is_agent) {
                         $response = '您是代理商,不能绑定成为别人的员工';
-                    } else if ($loginService->updateUserInfo(['code' => $spreadUid, 'is_staff' => 1, ], $userInfo, $is_new)) {
+                    } else if ($loginService->updateUserInfo(['code' => $spreadUid, 'is_staff' => 1], $userInfo, $is_new)) {
                         $response = '绑定店员成功!';
                     }
                 } catch (\Exception $e) {

+ 45 - 1
crmeb/app/services/order/OtherOrderServices.php

@@ -18,6 +18,7 @@ use app\services\pay\PayServices;
 use app\services\statistic\CapitalFlowServices;
 use app\services\user\member\MemberShipServices;
 use app\services\user\UserBillServices;
+use app\services\user\UserBrokerageServices;
 use app\services\user\UserServices;
 use app\services\user\member\MemberCardServices;
 use crmeb\exceptions\ApiException;
@@ -335,9 +336,52 @@ class OtherOrderServices extends BaseServices
             $capitalFlowServices->setFlow($orderInfo, $type);
         }
         $res = $res1 && $res2 && $res3 && $res4;
+
+        //购买付费会员返佣设置
+        if (sys_config('member_brokerage', 0) == 1 && sys_config('brokerage_func_status', 0) == 1) {
+            $spread_one = sys_config('is_self_brokerage') ? $orderInfo['uid'] : $userServices->getSpreadUid($orderInfo['uid']);
+            $spread_two = sys_config('brokerage_level', 2) == 2 ? $userServices->getSpreadUid($spread_one) : 0;
+            $spread_one_price = bcmul((string)$orderInfo['pay_price'], (string)bcdiv((string)sys_config('store_brokerage_ratio', 0), '100', 4), 2);
+            $spread_two_price = bcmul((string)$orderInfo['pay_price'], (string)bcdiv((string)sys_config('store_brokerage_two', 0), '100', 4), 2);
+            if ($spread_one && $spread_one_price > 0) $this->memberBrokerage($spread_one, $spread_one_price, sys_config('is_self_brokerage') ? 'get_self_brokerage' : 'get_brokerage', $orderInfo);
+            if ($spread_two && $spread_two_price > 0) $this->memberBrokerage($spread_two, $spread_two_price, 'get_two_brokerage', $orderInfo);
+        }
+
         return false !== $res;
     }
 
+    /**
+     * 购买付费会员返佣
+     * @param $uid
+     * @param $price
+     * @param $type
+     * @param $orderInfo
+     */
+    public function memberBrokerage($uid, $price, $type, $orderInfo)
+    {
+        /** @var UserServices $userServices */
+        $userServices = app()->make(UserServices::class);
+        $userInfo = $userServices->get($uid);
+        // 上级推广员返佣之后的金额
+        $balance = bcadd($userInfo['brokerage_price'], $price, 2);
+        // 添加用户佣金
+        $res1 = $userServices->bcInc($uid, 'brokerage_price', $price, 'uid');
+        if ($res1) {
+            //冻结时间
+            $broken_time = intval(sys_config('extract_time'));
+            $frozen_time = time() + $broken_time * 86400;
+            // 添加佣金记录
+            /** @var UserBrokerageServices $userBrokerageServices */
+            $userBrokerageServices = app()->make(UserBrokerageServices::class);
+            $userBrokerageServices->income($type, $uid, [
+                'nickname' => $userInfo['nickname'],
+                'pay_price' => floatval($price),
+                'number' => floatval($userInfo['brokerage_price']),
+                'frozen_time' => $frozen_time
+            ], $balance, $orderInfo['id']);
+        }
+    }
+
     /**
      * 修改
      * @param $where
@@ -372,7 +416,7 @@ class OtherOrderServices extends BaseServices
         $newMemberRight = $memberCardService->getMemberTypeValue();
         if (!array_key_exists($mcId, $newMemberRight)) throw new ApiException(410230);
         $price = $newMemberRight[$mcId]['pre_price'];
-        if ($payPrice != $price || ($memberType != 'free' && $payPrice <= 0))throw new ApiException(100100);
+        if ($payPrice != $price || ($memberType != 'free' && $payPrice <= 0)) throw new ApiException(100100);
         if ($memberType == 'free' && $newMemberRight[$mcId]['vip_day'] <= 0) throw new ApiException(100100);
         switch ($memberType) {
             case "free"://免费会员

+ 0 - 6
crmeb/app/services/order/OutStoreOrderServices.php

@@ -17,10 +17,6 @@ use app\services\BaseServices;
 use app\services\pay\PayServices;
 use crmeb\exceptions\AdminException;
 use crmeb\exceptions\ApiException;
-use crmeb\services\HttpService;
-use crmeb\services\UtilService;
-use crmeb\traits\ServicesTrait;
-use think\facade\Log;
 
 /**
  * Class OutStoreOrderServices
@@ -39,8 +35,6 @@ use think\facade\Log;
 class OutStoreOrderServices extends BaseServices
 {
 
-    use ServicesTrait;
-
     /**
      * 发货类型
      * @var string[]

+ 2 - 3
crmeb/app/services/order/StoreCartServices.php

@@ -87,9 +87,8 @@ class StoreCartServices extends BaseServices
         if ($new) {
             $cartIds = explode(',', $cartIds);
             $cartInfo = [];
-            $redis = CacheService::redisHandler();
             foreach ($cartIds as $key) {
-                $info = $redis->get($key);
+                $info = CacheService::get($key);
                 if ($info) {
                     $cartInfo[] = $info;
                 }
@@ -272,7 +271,7 @@ class StoreCartServices extends BaseServices
             $info['trueStock'] = $info['productInfo']['attrInfo']['stock'];
             $info['costPrice'] = $info['productInfo']['attrInfo']['cost'];
             try {
-                CacheService::redisHandler()->set($key, $info, 3600);
+                CacheService::set($key, $info, 3600);
             } catch (\Throwable $e) {
                 throw new ApiException($e->getMessage());
             }

+ 1 - 1
crmeb/app/services/order/StoreOrderCreateServices.php

@@ -355,7 +355,7 @@ class StoreOrderCreateServices extends BaseServices
         //删除购物车
         if ($group['news']) {
             array_map(function ($key) {
-                CacheService::redisHandler()->delete($key);
+                CacheService::delete($key);
             }, $group['cartIds']);
         } else {
             /** @var StoreCartServices $cartServices */

+ 22 - 0
crmeb/app/services/order/StoreOrderRefundServices.php

@@ -220,6 +220,17 @@ class StoreOrderRefundServices extends BaseServices
                         //支付宝退款
                         AliPayService::instance()->refund(strpos($refundOrder['trade_no'], '_') !== false ? $refundOrder['trade_no'] : $refundOrder['order_id'], floatval($refundData['refund_price']), $refund_id);
                         break;
+                    case PayServices::ALLIN_PAY:
+                        /** @var Pay $pay */
+                        $pay = app()->make(Pay::class, ['allin_pay']);
+                        /** @var StoreOrderServices $orderServices */
+                        $orderServices = app()->make(StoreOrderServices::class);
+                        $trade_no = $orderServices->value(['id' => $orderRefundInfo['store_order_id']], 'trade_no');
+                        $pay->refund($trade_no, [
+                            'order_id' => $refundOrder['order_id'],
+                            'refund_price' => $refundData['refund_price']
+                        ]);
+                        break;
                 }
             }
             //订单记录
@@ -1249,6 +1260,17 @@ class StoreOrderRefundServices extends BaseServices
             $storeOrderCartInfoServices->update(['oid' => $oid, 'cart_id' => $cart['id']], ['refund_num' => $refund_num]);
         }
         $storeOrderCartInfoServices->clearOrderCartInfo($oid);
+
+        //写入订单记录表
+        /** @var StoreOrderStatusServices $statusService */
+        $statusService = app()->make(StoreOrderStatusServices::class);
+        $statusService->save([
+            'oid' => $oid,
+            'change_type' => 'cancel_refund_order',
+            'change_message' => '取消退款',
+            'change_time' => time()
+        ]);
+
         //售后订单取消后置事件
         event('order.orderRefundCancelAfter', [$orderRefundInfo]);
         // 推送订单

+ 36 - 33
crmeb/app/services/order/StoreOrderServices.php

@@ -35,7 +35,6 @@ use crmeb\services\CacheService;
 use crmeb\services\FormBuilder as Form;
 use crmeb\services\printer\Printer;
 use crmeb\services\SystemConfigService;
-use crmeb\traits\ServicesTrait;
 use crmeb\utils\Arr;
 use think\facade\Log;
 
@@ -56,8 +55,6 @@ use think\facade\Log;
 class StoreOrderServices extends BaseServices
 {
 
-    use ServicesTrait;
-
     /**
      * 发货类型
      * @var string[]
@@ -140,13 +137,12 @@ class StoreOrderServices extends BaseServices
     /**
      * 获取订单数量
      * @param int $uid
-     * @return mixed
+     * @return array
+     * @throws \ReflectionException
      */
-    public function getOrderData(int $uid = 0, $del = true, $isPid = false)
+    public function getOrderData(int $uid = 0)
     {
-        $where = ['uid' => $uid, 'paid' => 1, 'refund_status' => [0, 3], 'pid' => 0];
-        if (!$del) $where = $where + ['is_del' => 0, 'is_system_del' => 0];
-        $data['order_count'] = (string)$this->dao->count($where);
+        $data['order_count'] = (string)$this->dao->count(['uid' => $uid, 'refund_status' => [0, 3], 'pid' => 0, 'is_del' => 0, 'is_system_del' => 0]);
         $data['sum_price'] = (string)$this->dao->sum([
             ['uid', '=', $uid],
             ['paid', '=', 1],
@@ -162,7 +158,6 @@ class StoreOrderServices extends BaseServices
         $data['received_count'] = (string)$this->dao->count(['status' => 2] + $countWhere + ['pid' => 0]);
         $data['evaluated_count'] = (string)$this->dao->count(['status' => 3] + $countWhere + ['pid' => 0]);
         $data['complete_count'] = (string)$this->dao->count(['status' => 4] + $countWhere + ['pid' => 0]);
-        if (!$isPid) $countWhere = $countWhere + ['pid' => 0];
 
         /** @var StoreOrderRefundServices $storeOrderRefundServices */
         $storeOrderRefundServices = app()->make(StoreOrderRefundServices::class);
@@ -173,8 +168,8 @@ class StoreOrderServices extends BaseServices
         $data['refunded_count'] = (string)$storeOrderRefundServices->count($refund_where + ['refund_type' => 6]);
         $data['refund_count'] = bcadd(bcadd($data['refunding_count'], $data['refunded_count'], 0), $data['no_refund_count'], 0);
         $data['yue_pay_status'] = (int)sys_config('balance_func_status') && (int)sys_config('yue_pay_status') == 1 ? (int)1 : (int)2;//余额支付 1 开启 2 关闭
-        $data['pay_weixin_open'] = (int)sys_config('pay_weixin_open') ?? 0;//微信支付 1 开启 0 关闭
-        $data['ali_pay_status'] = (bool)sys_config('ali_pay_status');//支付包支付 1 开启 0 关闭
+        $data['pay_weixin_open'] = is_wecaht_pay();//微信支付 1 开启 0 关闭
+        $data['ali_pay_status'] = is_ali_pay();//支付包支付 1 开启 0 关闭
         $data['friend_pay_status'] = (int)sys_config('friend_pay_status') ?? 0;//好友代付 1 开启 0 关闭
         return $data;
     }
@@ -508,18 +503,12 @@ class StoreOrderServices extends BaseServices
                 }
             } else {
                 switch ($item['pay_type']) {
-                    case PayServices::WEIXIN_PAY:
-                        $item['pay_type_name'] = '微信未支付';
-                        break;
-                    case PayServices::ALIAPY_PAY:
-                        $item['pay_type_name'] = '支付宝未支付';
-                        break;
                     case 'offline':
                         $item['pay_type_name'] = '线下支付';
                         $item['pay_type_info'] = 1;
                         break;
                     default:
-                        $item['pay_type_name'] = '未支付';
+                        $item['pay_type_name'] = '';
                         break;
                 }
             }
@@ -1432,27 +1421,32 @@ HTML;
         $info[3]['total_name'] = '本月新增用户';
         return $info;
     }
-    //TODO
 
     /**
-     * 打印订单
+     * 订单小票打印
      * @param int $id
+     * @param bool $start
+     * @return bool|void
      * @throws \think\db\exception\DataNotFoundException
      * @throws \think\db\exception\DbException
      * @throws \think\db\exception\ModelNotFoundException
+     * @throws \Exception
      */
-    public function orderPrint(int $id)
+    public function orderPrintTicket(int $id)
     {
         $order = $this->get($id);
         if (!$order) {
             throw new AdminException(400118);
         }
-
         /** @var StoreOrderCartInfoServices $cartServices */
         $cartServices = app()->make(StoreOrderCartInfoServices::class);
-        $product = $cartServices->getCartInfoPrintProduct($order->id);
+        $product = $cartServices->getCartInfoPrintProduct($order['id']);
         if (!$product) {
-            throw new AdminException(400533);
+            throw new AdminException(400463);
+        }
+        $switch = (bool)sys_config('pay_success_printing_switch');
+        if (!$switch) {
+            throw new AdminException(400464);
         }
         if (sys_config('print_type', 1) == 1) {
             $name = 'yi_lian_yun';
@@ -1479,20 +1473,28 @@ HTML;
         $printer = new Printer($name, $configData);
         $res = $printer->setPrinterContent([
             'name' => sys_config('site_name'),
+            'url' => sys_config('site_url'),
             'orderInfo' => is_object($order) ? $order->toArray() : $order,
             'product' => $product
         ])->startPrinter();
         if (!$res) {
             throw new AdminException($printer->getError());
         }
-        return $res;
+        return true;
     }
 
     /**
      * 获取订单确认数据
      * @param array $user
      * @param $cartId
-     * @return mixed
+     * @param bool $new
+     * @param int $addressId
+     * @param int $shipping_type
+     * @return array
+     * @throws \Psr\SimpleCache\InvalidArgumentException
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\DbException
+     * @throws \think\db\exception\ModelNotFoundException
      */
     public function getOrderConfirmData(array $user, $cartId, bool $new, int $addressId, int $shipping_type = 1)
     {
@@ -1575,7 +1577,7 @@ HTML;
         $data['integralRatio'] = $other['integralRatio'];
         $data['offline_pay_status'] = (int)sys_config('offline_pay_status') ?? (int)2;
         $data['yue_pay_status'] = (int)sys_config('balance_func_status') && (int)sys_config('yue_pay_status') == 1 ? (int)1 : (int)2;//余额支付 1 开启 2 关闭
-        $data['pay_weixin_open'] = (int)sys_config('pay_weixin_open') ?? 0;//微信支付 1 开启 0 关闭
+        $data['pay_weixin_open'] = is_wecaht_pay();//微信支付 1 开启 0 关闭
         $data['friend_pay_status'] = (int)sys_config('friend_pay_status') ?? 0;//好友代付 1 开启 0 关闭
         $data['store_self_mention'] = (int)sys_config('store_self_mention') ?? 0;//门店自提是否开启
         /** @var SystemStoreServices $systemStoreServices */
@@ -1583,7 +1585,7 @@ HTML;
         $store_count = $systemStoreServices->count(['type' => 0]);
         $data['store_self_mention'] = $data['store_self_mention'] && $store_count;
 
-        $data['ali_pay_status'] = (bool)sys_config('ali_pay_status');//支付包支付 1 开启 0 关闭
+        $data['ali_pay_status'] = is_ali_pay();//支付包支付 1 开启 0 关闭
         $data['system_store'] = [];//门店信息
         /** @var UserInvoiceServices $userInvoice */
         $userInvoice = app()->make(UserInvoiceServices::class);
@@ -1611,7 +1613,7 @@ HTML;
     public function cacheOrderInfo($uid, $cartInfo, $priceGroup, $other = [], $cacheTime = 600)
     {
         $key = $this->getCacheKey();
-        CacheService::redisHandler()->set('user_order_' . $uid . $key, compact('cartInfo', 'priceGroup', 'other'), $cacheTime);
+        CacheService::set('user_order_' . $uid . $key, compact('cartInfo', 'priceGroup', 'other'), $cacheTime);
         return $key;
     }
 
@@ -1651,8 +1653,8 @@ HTML;
     public function getCacheOrderInfo(int $uid, string $key)
     {
         $cacheName = 'user_order_' . $uid . $key;
-        if (!CacheService::redisHandler()->has($cacheName)) return null;
-        return CacheService::redisHandler()->get($cacheName);
+        if (!CacheService::has($cacheName)) return null;
+        return CacheService::get($cacheName);
     }
 
     /**
@@ -1701,6 +1703,8 @@ HTML;
             case PayServices::FRIEND:
                 $res = sys_config('friend_pay_status', 1) == 1;
                 break;
+            case PayServices::ALLIN_PAY:
+                $res = sys_config('allin_pay_status') == 1;
         }
         return $res;
     }
@@ -2412,9 +2416,8 @@ HTML;
         if ($new) {
             $cartIds = explode(',', $cartIds);
             $cartInfo = [];
-            $redis = CacheService::redisHandler();
             foreach ($cartIds as $key) {
-                $info = $redis->get($key);
+                $info = CacheService::get($key);
                 if ($info) {
                     $cartInfo[] = $info;
                 }

+ 0 - 2
crmeb/app/services/order/StoreOrderStatusServices.php

@@ -14,7 +14,6 @@ namespace app\services\order;
 
 use app\dao\order\StoreOrderStatusDao;
 use app\services\BaseServices;
-use crmeb\traits\ServicesTrait;
 
 /**
  * 订单状态
@@ -23,7 +22,6 @@ use crmeb\traits\ServicesTrait;
  */
 class StoreOrderStatusServices extends BaseServices
 {
-    use ServicesTrait;
 
     /**
      * 构造方法

+ 0 - 3
crmeb/app/services/other/CategoryServices.php

@@ -14,7 +14,6 @@ namespace app\services\other;
 
 use app\dao\other\CategoryDao;
 use app\services\BaseServices;
-use crmeb\traits\ServicesTrait;
 
 /**
  * Class CategoryServices
@@ -23,8 +22,6 @@ use crmeb\traits\ServicesTrait;
 class CategoryServices extends BaseServices
 {
 
-    use ServicesTrait;
-
     protected $cacheName = 'crmeb_cate';
 
     /**

+ 6 - 8
crmeb/app/services/other/QrcodeServices.php

@@ -223,10 +223,12 @@ class QrcodeServices extends BaseServices
      * 获取小程序分享二维码
      * @param int $id
      * @param int $uid
-     * @param int $type 1 = 拼团,2 = 秒杀
-     * @return bool|string
+     * @param int $type
+     * @param array $param
+     * @param bool $isSaveAttach
+     * @return false|mixed|string
      */
-    public function getRoutineQrcodePath(int $id, int $uid, int $type, array $parame = [], bool $isSaveAttach = true)
+    public function getRoutineQrcodePath(int $id, int $uid, int $type, array $param = [], bool $isSaveAttach = true)
     {
         /** @var SystemAttachmentServices $systemAttachmentService */
         $systemAttachmentService = app()->make(SystemAttachmentServices::class);
@@ -236,7 +238,7 @@ class QrcodeServices extends BaseServices
         switch ($type) {
             case 0:
                 $page = 'pages/goods_details/index';
-                $namePath = $id . '_' . $uid . '_' . $parame['is_promoter'] . '_product.jpg';
+                $namePath = $id . '_' . $uid . '_' . $param['is_promoter'] . '_product.jpg';
                 break;
             case 1:
                 $page = 'pages/activity/goods_combination_details/index';
@@ -245,10 +247,6 @@ class QrcodeServices extends BaseServices
             case 2:
                 $page = 'pages/activity/goods_seckill_details/index';
                 $namePath = 'seckill_' . $id . '_' . $uid . '.jpg';
-                if (isset($parame['stop_time']) && $parame['stop_time']) {
-                    $data .= '&time=' . $parame['stop_time'];
-                    $namePath = $parame['stop_time'] . $namePath;
-                }
                 break;
             case 3:
                 $page = 'pages/annex/offline_pay/index';

+ 0 - 0
crmeb/app/services/other/export/ExportServices.php


Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio