Merge remote-tracking branch 'origin/master' into zhl
正在显示
21 个修改的文件
包含
392 行增加
和
504 行删除
| @@ -9,9 +9,13 @@ | @@ -9,9 +9,13 @@ | ||
| 9 | 9 | ||
| 10 | namespace App\Console\Commands\LyhTest; | 10 | namespace App\Console\Commands\LyhTest; |
| 11 | 11 | ||
| 12 | +use App\Enums\Common\Code; | ||
| 12 | use App\Helper\Common; | 13 | use App\Helper\Common; |
| 14 | +use App\Http\Requests\Aside\WorkOrder\AsideTicketListRequest; | ||
| 13 | use App\Models\Blog\Blog; | 15 | use App\Models\Blog\Blog; |
| 14 | use App\Models\Com\V6WeeklyReport; | 16 | use App\Models\Com\V6WeeklyReport; |
| 17 | +use App\Models\Manage\Manage; | ||
| 18 | +use App\Models\Manage\ManageHr; | ||
| 15 | use App\Models\News\News; | 19 | use App\Models\News\News; |
| 16 | use App\Models\Product\Category; | 20 | use App\Models\Product\Category; |
| 17 | use App\Models\Product\CategoryRelated; | 21 | use App\Models\Product\CategoryRelated; |
| @@ -22,6 +26,7 @@ use App\Models\Template\BTemplate; | @@ -22,6 +26,7 @@ use App\Models\Template\BTemplate; | ||
| 22 | use App\Models\Visit\Visit; | 26 | use App\Models\Visit\Visit; |
| 23 | use App\Models\Visit\VisitItem; | 27 | use App\Models\Visit\VisitItem; |
| 24 | use App\Models\Workchat\MessagePush; | 28 | use App\Models\Workchat\MessagePush; |
| 29 | +use App\Models\WorkOrder\Tickets; | ||
| 25 | use App\Services\ProjectServer; | 30 | use App\Services\ProjectServer; |
| 26 | use Illuminate\Console\Command; | 31 | use Illuminate\Console\Command; |
| 27 | use Illuminate\Support\Facades\DB; | 32 | use Illuminate\Support\Facades\DB; |
| @@ -45,11 +50,11 @@ class DownloadProject extends Command | @@ -45,11 +50,11 @@ class DownloadProject extends Command | ||
| 45 | protected $description = '导出项目数据'; | 50 | protected $description = '导出项目数据'; |
| 46 | 51 | ||
| 47 | public function handle(){ | 52 | public function handle(){ |
| 48 | - echo date('Y-m-d H:i:s') . 'start' . PHP_EOL; | ||
| 49 | - ProjectServer::useProject(671); | ||
| 50 | - $this->newsImportBlog(); | ||
| 51 | - DB::disconnect('custom_mysql'); | ||
| 52 | - echo date('Y-m-d H:i:s') . 'end' . PHP_EOL; | 53 | + echo date('Y-m-d H:i:s') . 'start1' . PHP_EOL; |
| 54 | +// ProjectServer::useProject(671); | ||
| 55 | + $this->downloadTicket(); | ||
| 56 | +// DB::disconnect('custom_mysql'); | ||
| 57 | + echo date('Y-m-d H:i:s') . 'end1' . PHP_EOL; | ||
| 53 | return true; | 58 | return true; |
| 54 | } | 59 | } |
| 55 | 60 | ||
| @@ -121,6 +126,58 @@ class DownloadProject extends Command | @@ -121,6 +126,58 @@ class DownloadProject extends Command | ||
| 121 | } | 126 | } |
| 122 | 127 | ||
| 123 | /** | 128 | /** |
| 129 | + * @remark :导出工单数据 | ||
| 130 | + * @name :downloadTicketList | ||
| 131 | + * @author :lyh | ||
| 132 | + * @method :post | ||
| 133 | + * @time :2025/9/13 15:24 | ||
| 134 | + */ | ||
| 135 | + /** | ||
| 136 | + * A端查看所有工单 | ||
| 137 | + * | ||
| 138 | + * @return \Illuminate\Http\Response | ||
| 139 | + */ | ||
| 140 | + public function downloadTicket() | ||
| 141 | + { | ||
| 142 | + $this->param['dept_id'] = 2; | ||
| 143 | + $this->param['entry_position'] = 2; | ||
| 144 | + $search = '资料上传'; | ||
| 145 | + $query = Tickets::with([ | ||
| 146 | + 'logs.engineer', | ||
| 147 | + 'project.pm', | ||
| 148 | + 'project.projectV6', | ||
| 149 | + ]); | ||
| 150 | + $query = $query->where('title', 'like', '%' . $search . '%'); | ||
| 151 | + $query = $query->where('status', '!=' ,Tickets::STATUS_COMPLETED)->where('plan_end_at','<',date("Y-m-d H:i:s", strtotime("-72 hours"))); | ||
| 152 | + $query = $query->where('status', 0)->where('plan_end_at','<',date("Y-m-d H:i:s", strtotime("-120 hours")));//超过120个小时未处理的工单 | ||
| 153 | + //TODO::用户部门搜索 | ||
| 154 | + if(isset($this->param['dept_id']) && !empty($this->param['dept_id'])){ | ||
| 155 | + $manageHrModel = new ManageHr(); | ||
| 156 | + //售后优化+技术搜索 | ||
| 157 | + if($this->param['dept_id'] == 2 && !empty($this->param['entry_position'])) {//售后部 | ||
| 158 | + if ($this->param['entry_position'] == 1) { | ||
| 159 | + $manageIdArr = $manageHrModel->selectField(['entry_position' => ['in', [44, 46, 49]], 'status' => 1], 'manage_id'); | ||
| 160 | + } else { | ||
| 161 | + //售后技术 | ||
| 162 | + $manageIdArr = $manageHrModel->selectField(['entry_position' => ['in', [42, 43, 45, 48, 51]], 'status' => 1], 'manage_id'); | ||
| 163 | + } | ||
| 164 | + $query = $query->whereHas('logs', function ($q) use ($manageIdArr) { | ||
| 165 | + $q->whereIn('engineer_id', $manageIdArr); | ||
| 166 | + }); | ||
| 167 | + }else{ | ||
| 168 | + $manageIdArr = $manageHrModel->selectField(['dept_id'=>$this->param['dept_id'],'status'=>1],'manage_id'); | ||
| 169 | + $query = $query->whereHas('logs', function ($q) use ($manageIdArr) { | ||
| 170 | + $q->whereIn('engineer_id', $manageIdArr); | ||
| 171 | + }); | ||
| 172 | + } | ||
| 173 | + } | ||
| 174 | + // 添加排序功能 | ||
| 175 | + $query->orderBy('status', 'asc'); | ||
| 176 | + $lists = $query->get()->toArray(); | ||
| 177 | + return $this->exportData($lists); | ||
| 178 | + } | ||
| 179 | + | ||
| 180 | + /** | ||
| 124 | * @remark :导出访问明细 | 181 | * @remark :导出访问明细 |
| 125 | * @name :exportData | 182 | * @name :exportData |
| 126 | * @author :lyh | 183 | * @author :lyh |
| @@ -132,22 +189,27 @@ class DownloadProject extends Command | @@ -132,22 +189,27 @@ class DownloadProject extends Command | ||
| 132 | $spreadsheet = new Spreadsheet(); | 189 | $spreadsheet = new Spreadsheet(); |
| 133 | $sheet = $spreadsheet->getActiveSheet(); | 190 | $sheet = $spreadsheet->getActiveSheet(); |
| 134 | // 添加表头 | 191 | // 添加表头 |
| 135 | - $sheet->setCellValue('A1', '浏览时间'); | ||
| 136 | - $sheet->setCellValue('B1', '访客来源'); | ||
| 137 | - $sheet->setCellValue('C1', '访客入路页面'); | ||
| 138 | - $sheet->setCellValue('D1', '终端'); | ||
| 139 | - $sheet->setCellValue('E1', '国家ip'); | ||
| 140 | - $sheet->setCellValue('F1', '深度访问页数'); | ||
| 141 | - $sheet->setCellValue('G1', '国家'); | 192 | + $sheet->setCellValue('A1', '公司名称'); |
| 193 | + $sheet->setCellValue('B1', '工单提交时间'); | ||
| 194 | + $sheet->setCellValue('C1', '工单内容'); | ||
| 195 | + $sheet->setCellValue('D1', '正式域名'); | ||
| 196 | + $sheet->setCellValue('E1', '测试域名'); | ||
| 197 | + $sheet->setCellValue('F1', '提交人'); | ||
| 198 | + $sheet->setCellValue('G1', '执行技术'); | ||
| 142 | $rowCount = 2; | 199 | $rowCount = 2; |
| 143 | foreach ($data as $v) { | 200 | foreach ($data as $v) { |
| 144 | - $sheet->setCellValue('A' . $rowCount, $v['created_at']); | ||
| 145 | - $sheet->setCellValue('B' . $rowCount, $v['referrer_url']); | ||
| 146 | - $sheet->setCellValue('C' . $rowCount, $v['url']); | ||
| 147 | - $sheet->setCellValue('D' . $rowCount, $v['device_text']); | ||
| 148 | - $sheet->setCellValue('E' . $rowCount, $v['ip']); | ||
| 149 | - $sheet->setCellValue('F' . $rowCount, $v['depth']); | ||
| 150 | - $sheet->setCellValue('G' . $rowCount, $v['country']); | 201 | + foreach ($v['logs'] as $key => $value) { |
| 202 | + if($value['is_engineer'] == 1){ | ||
| 203 | + $is_engineer = $value['engineer']['name']; | ||
| 204 | + } | ||
| 205 | + } | ||
| 206 | + $sheet->setCellValue('A' . $rowCount, $v['project']['company_name']); | ||
| 207 | + $sheet->setCellValue('B' . $rowCount, $v['created_at']); | ||
| 208 | + $sheet->setCellValue('C' . $rowCount, $v['content']); | ||
| 209 | + $sheet->setCellValue('D' . $rowCount, $v['project']['website']); | ||
| 210 | + $sheet->setCellValue('E' . $rowCount, $v['project']['test_website']); | ||
| 211 | + $sheet->setCellValue('F' . $rowCount, $v['submit_username']); | ||
| 212 | + $sheet->setCellValue('G' . $rowCount, $is_engineer ?? ''); | ||
| 151 | $rowCount++; | 213 | $rowCount++; |
| 152 | } | 214 | } |
| 153 | // 创建一个新的 Excel Writer 对象 | 215 | // 创建一个新的 Excel Writer 对象 |
| @@ -43,7 +43,6 @@ class LyhImportTest extends Command | @@ -43,7 +43,6 @@ class LyhImportTest extends Command | ||
| 43 | protected $description = '导入数据'; | 43 | protected $description = '导入数据'; |
| 44 | 44 | ||
| 45 | 45 | ||
| 46 | - | ||
| 47 | /** | 46 | /** |
| 48 | * @remark :统一更新路由 | 47 | * @remark :统一更新路由 |
| 49 | * @name :handle | 48 | * @name :handle |
| @@ -51,10 +50,12 @@ class LyhImportTest extends Command | @@ -51,10 +50,12 @@ class LyhImportTest extends Command | ||
| 51 | * @method :post | 50 | * @method :post |
| 52 | * @time :2023/11/20 15:13 | 51 | * @time :2023/11/20 15:13 |
| 53 | */ | 52 | */ |
| 54 | - public function handle(){ | ||
| 55 | - ProjectServer::useProject(3654); | ||
| 56 | - echo date('Y-m-d H:i:s') . 'start' . PHP_EOL; | ||
| 57 | - $this->importProductCategory('https://ecdn6-nc.globalso.com/upload/p/3654/file/2025-06/products-1.csv',3654); | 53 | + public function handle() |
| 54 | + { | ||
| 55 | + ProjectServer::useProject(3531); | ||
| 56 | + echo date('Y-m-d H:i:s') . 'start->3531' . PHP_EOL; | ||
| 57 | +// $this->importProductCategory('https://ecdn6-nc.globalso.com/upload/p/3654/file/2025-06/products-1.csv',3654); | ||
| 58 | + $this->import3531CustomModule(3531); | ||
| 58 | DB::disconnect('custom_mysql'); | 59 | DB::disconnect('custom_mysql'); |
| 59 | echo date('Y-m-d H:i:s') . 'end' . PHP_EOL; | 60 | echo date('Y-m-d H:i:s') . 'end' . PHP_EOL; |
| 60 | } | 61 | } |
| @@ -66,7 +67,8 @@ class LyhImportTest extends Command | @@ -66,7 +67,8 @@ class LyhImportTest extends Command | ||
| 66 | * @method :post | 67 | * @method :post |
| 67 | * @time :2025/5/24 11:32 | 68 | * @time :2025/5/24 11:32 |
| 68 | */ | 69 | */ |
| 69 | - public function import3951Product($url,$project_id){ | 70 | + public function import3951Product($url, $project_id) |
| 71 | + { | ||
| 70 | $line_of_text = []; | 72 | $line_of_text = []; |
| 71 | $opts = [ | 73 | $opts = [ |
| 72 | 'http' => [ | 74 | 'http' => [ |
| @@ -84,18 +86,18 @@ class LyhImportTest extends Command | @@ -84,18 +86,18 @@ class LyhImportTest extends Command | ||
| 84 | } | 86 | } |
| 85 | fclose($file_handle); | 87 | fclose($file_handle); |
| 86 | $saveData = []; | 88 | $saveData = []; |
| 87 | - foreach ($line_of_text as $k => $val){ | ||
| 88 | - if($k < 1){ | 89 | + foreach ($line_of_text as $k => $val) { |
| 90 | + if ($k < 1) { | ||
| 89 | continue; | 91 | continue; |
| 90 | } | 92 | } |
| 91 | - if(empty($val[0])){ | ||
| 92 | - echo '跳过的名称:'.$val[0]; | 93 | + if (empty($val[0])) { |
| 94 | + echo '跳过的名称:' . $val[0]; | ||
| 93 | continue; | 95 | continue; |
| 94 | } | 96 | } |
| 95 | $saveData[] = [ | 97 | $saveData[] = [ |
| 96 | - 'title'=>$val[0], | ||
| 97 | - 'thumb' => json_encode(['alt'=>'主图','url'=>'/upload/p/3951/image/',$val[2]],true), | ||
| 98 | - 'gallery' => json_encode([['alt'=>'主图','url'=>'/upload/p/3951/image/',$val[2]]],true) | 98 | + 'title' => $val[0], |
| 99 | + 'thumb' => json_encode(['alt' => '主图', 'url' => '/upload/p/3951/image/', $val[2]], true), | ||
| 100 | + 'gallery' => json_encode([['alt' => '主图', 'url' => '/upload/p/3951/image/', $val[2]]], true) | ||
| 99 | ]; | 101 | ]; |
| 100 | } | 102 | } |
| 101 | } | 103 | } |
| @@ -107,7 +109,8 @@ class LyhImportTest extends Command | @@ -107,7 +109,8 @@ class LyhImportTest extends Command | ||
| 107 | * @method :post | 109 | * @method :post |
| 108 | * @time :2025/3/13 9:58 | 110 | * @time :2025/3/13 9:58 |
| 109 | */ | 111 | */ |
| 110 | - public function importProductCategory($url,$project_id){ | 112 | + public function importProductCategory($url, $project_id) |
| 113 | + { | ||
| 111 | $line_of_text = []; | 114 | $line_of_text = []; |
| 112 | $opts = [ | 115 | $opts = [ |
| 113 | 'http' => [ | 116 | 'http' => [ |
| @@ -125,50 +128,50 @@ class LyhImportTest extends Command | @@ -125,50 +128,50 @@ class LyhImportTest extends Command | ||
| 125 | } | 128 | } |
| 126 | fclose($file_handle); | 129 | fclose($file_handle); |
| 127 | $categoryModel = new Category(); | 130 | $categoryModel = new Category(); |
| 128 | - foreach ($line_of_text as $k => $val){ | ||
| 129 | - if($k < 1){ | 131 | + foreach ($line_of_text as $k => $val) { |
| 132 | + if ($k < 1) { | ||
| 130 | continue; | 133 | continue; |
| 131 | } | 134 | } |
| 132 | - if(empty($val[0])){ | ||
| 133 | - echo '跳过的名称:'.$val[0]; | 135 | + if (empty($val[0])) { |
| 136 | + echo '跳过的名称:' . $val[0]; | ||
| 134 | continue; | 137 | continue; |
| 135 | } | 138 | } |
| 136 | try { | 139 | try { |
| 137 | - $cateArr = explode('/',$val[0]); | 140 | + $cateArr = explode('/', $val[0]); |
| 138 | $pid = 0; | 141 | $pid = 0; |
| 139 | $two_pid = 0; | 142 | $two_pid = 0; |
| 140 | - foreach ($cateArr as $key => $item){ | ||
| 141 | - if($key == 0){ | 143 | + foreach ($cateArr as $key => $item) { |
| 144 | + if ($key == 0) { | ||
| 142 | //查看一级分类是否存在 | 145 | //查看一级分类是否存在 |
| 143 | - $info = $categoryModel->read(['title'=>$item,'pid'=>0],['id']); | ||
| 144 | - if($info === false){ | ||
| 145 | - $pid = $categoryModel->addReturnId(['project_id'=>$project_id,'title'=>$item]); | 146 | + $info = $categoryModel->read(['title' => $item, 'pid' => 0], ['id']); |
| 147 | + if ($info === false) { | ||
| 148 | + $pid = $categoryModel->addReturnId(['project_id' => $project_id, 'title' => $item]); | ||
| 146 | //设置路由 | 149 | //设置路由 |
| 147 | - $route = RouteMap::setRoute($item,RouteMap::SOURCE_PRODUCT_CATE,$pid,$project_id); | ||
| 148 | - $categoryModel->edit(['route'=>$route],['id'=>$pid]); | ||
| 149 | - }else{ | 150 | + $route = RouteMap::setRoute($item, RouteMap::SOURCE_PRODUCT_CATE, $pid, $project_id); |
| 151 | + $categoryModel->edit(['route' => $route], ['id' => $pid]); | ||
| 152 | + } else { | ||
| 150 | $pid = $info['id']; | 153 | $pid = $info['id']; |
| 151 | } | 154 | } |
| 152 | - }elseif ($key == 1){ | 155 | + } elseif ($key == 1) { |
| 153 | //查看当前下面的子级别是否存在 | 156 | //查看当前下面的子级别是否存在 |
| 154 | - $two_info = $categoryModel->read(['title'=>$item,'pid'=>$pid],['id']); | ||
| 155 | - if($two_info === false){ | ||
| 156 | - $two_pid = $categoryModel->addReturnId(['project_id'=>$project_id,'title'=>$item,'pid'=>$pid]); | 157 | + $two_info = $categoryModel->read(['title' => $item, 'pid' => $pid], ['id']); |
| 158 | + if ($two_info === false) { | ||
| 159 | + $two_pid = $categoryModel->addReturnId(['project_id' => $project_id, 'title' => $item, 'pid' => $pid]); | ||
| 157 | //设置路由 | 160 | //设置路由 |
| 158 | - $route = RouteMap::setRoute($item,RouteMap::SOURCE_PRODUCT_CATE,$two_pid,$project_id); | ||
| 159 | - $categoryModel->edit(['route'=>$route],['id'=>$two_pid]); | ||
| 160 | - }else{ | 161 | + $route = RouteMap::setRoute($item, RouteMap::SOURCE_PRODUCT_CATE, $two_pid, $project_id); |
| 162 | + $categoryModel->edit(['route' => $route], ['id' => $two_pid]); | ||
| 163 | + } else { | ||
| 161 | $two_pid = $two_info['id']; | 164 | $two_pid = $two_info['id']; |
| 162 | } | 165 | } |
| 163 | - }else{ | ||
| 164 | - $id = $categoryModel->addReturnId(['project_id'=>$project_id,'title'=>$item,'pid'=>$two_pid]); | ||
| 165 | - $route = RouteMap::setRoute($item,RouteMap::SOURCE_PRODUCT_CATE,$id,$project_id); | ||
| 166 | - $categoryModel->edit(['route'=>$route],['id'=>$id]); | 166 | + } else { |
| 167 | + $id = $categoryModel->addReturnId(['project_id' => $project_id, 'title' => $item, 'pid' => $two_pid]); | ||
| 168 | + $route = RouteMap::setRoute($item, RouteMap::SOURCE_PRODUCT_CATE, $id, $project_id); | ||
| 169 | + $categoryModel->edit(['route' => $route], ['id' => $id]); | ||
| 167 | } | 170 | } |
| 168 | } | 171 | } |
| 169 | - echo date('Y-m-d H:i:s') . '产品分类id:'.PHP_EOL; | ||
| 170 | - }catch (\Exception $e){ | ||
| 171 | - echo date('Y-m-d H:i:s') . '跳过的名称:'. $val[1]; | 172 | + echo date('Y-m-d H:i:s') . '产品分类id:' . PHP_EOL; |
| 173 | + } catch (\Exception $e) { | ||
| 174 | + echo date('Y-m-d H:i:s') . '跳过的名称:' . $val[1]; | ||
| 172 | continue; | 175 | continue; |
| 173 | } | 176 | } |
| 174 | } | 177 | } |
| @@ -182,7 +185,8 @@ class LyhImportTest extends Command | @@ -182,7 +185,8 @@ class LyhImportTest extends Command | ||
| 182 | * @method :post | 185 | * @method :post |
| 183 | * @time :2025/3/3 15:59 | 186 | * @time :2025/3/3 15:59 |
| 184 | */ | 187 | */ |
| 185 | - public function importProduct($url,$project_id){ | 188 | + public function importProduct($url, $project_id) |
| 189 | + { | ||
| 186 | $line_of_text = []; | 190 | $line_of_text = []; |
| 187 | $opts = [ | 191 | $opts = [ |
| 188 | 'http' => [ | 192 | 'http' => [ |
| @@ -203,163 +207,163 @@ class LyhImportTest extends Command | @@ -203,163 +207,163 @@ class LyhImportTest extends Command | ||
| 203 | $productModel = new Product(); | 207 | $productModel = new Product(); |
| 204 | $detailModel = new Detail(); | 208 | $detailModel = new Detail(); |
| 205 | $extentInfoModel = new ExtendInfo(); | 209 | $extentInfoModel = new ExtendInfo(); |
| 206 | - foreach ($line_of_text as $k => $val){ | ||
| 207 | - if($k < 1){ | 210 | + foreach ($line_of_text as $k => $val) { |
| 211 | + if ($k < 1) { | ||
| 208 | continue; | 212 | continue; |
| 209 | } | 213 | } |
| 210 | $saveData = []; | 214 | $saveData = []; |
| 211 | - if(!empty($val[11])){ | 215 | + if (!empty($val[11])) { |
| 212 | $saveData['title'] = $val[11]; | 216 | $saveData['title'] = $val[11]; |
| 213 | - }else{ | 217 | + } else { |
| 214 | continue; | 218 | continue; |
| 215 | } | 219 | } |
| 216 | - if(!empty($val[1])){ | ||
| 217 | - $cateInfo = $cateModel->read(['seo_title'=>trim($val[1])]); | ||
| 218 | - if($cateInfo !== false){ | ||
| 219 | - $saveData['category_id'] = ','.$cateInfo['id'].','; | 220 | + if (!empty($val[1])) { |
| 221 | + $cateInfo = $cateModel->read(['seo_title' => trim($val[1])]); | ||
| 222 | + if ($cateInfo !== false) { | ||
| 223 | + $saveData['category_id'] = ',' . $cateInfo['id'] . ','; | ||
| 220 | } | 224 | } |
| 221 | } | 225 | } |
| 222 | $saveData['project_id'] = $project_id; | 226 | $saveData['project_id'] = $project_id; |
| 223 | $saveData['status'] = 1; | 227 | $saveData['status'] = 1; |
| 224 | $saveData['intro'] = $val[6] ?? ''; | 228 | $saveData['intro'] = $val[6] ?? ''; |
| 225 | - $seo = ['title'=>$val[11]]; | ||
| 226 | - $saveData['seo_mate'] = json_encode($seo,JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE); | ||
| 227 | - $thumb = ['alt'=>'主图','url'=>str_replace('/public','/upload/p/3283',$val[12])]; | ||
| 228 | - $gallery = [['alt'=>'主图','url'=>str_replace('/public','/upload/p/3283',$val[12])]]; | ||
| 229 | - $saveData['thumb'] = json_encode($thumb,JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE); | ||
| 230 | - $saveData['gallery'] = json_encode($gallery,JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE); | 229 | + $seo = ['title' => $val[11]]; |
| 230 | + $saveData['seo_mate'] = json_encode($seo, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE); | ||
| 231 | + $thumb = ['alt' => '主图', 'url' => str_replace('/public', '/upload/p/3283', $val[12])]; | ||
| 232 | + $gallery = [['alt' => '主图', 'url' => str_replace('/public', '/upload/p/3283', $val[12])]]; | ||
| 233 | + $saveData['thumb'] = json_encode($thumb, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE); | ||
| 234 | + $saveData['gallery'] = json_encode($gallery, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE); | ||
| 231 | try { | 235 | try { |
| 232 | $id = $productModel->addReturnId($saveData); | 236 | $id = $productModel->addReturnId($saveData); |
| 233 | - }catch (\Exception $e){ | ||
| 234 | - @file_put_contents(storage_path('logs/lyh_error.log'), var_export('未导入成功--标题:'.$val[0], true) . PHP_EOL, FILE_APPEND); | 237 | + } catch (\Exception $e) { |
| 238 | + @file_put_contents(storage_path('logs/lyh_error.log'), var_export('未导入成功--标题:' . $val[0], true) . PHP_EOL, FILE_APPEND); | ||
| 235 | continue; | 239 | continue; |
| 236 | } | 240 | } |
| 237 | //设置关联关系 | 241 | //设置关联关系 |
| 238 | - if($cateInfo !== false){ | ||
| 239 | - CategoryRelated::saveRelated($id,[$cateInfo['id']]); | 242 | + if ($cateInfo !== false) { |
| 243 | + CategoryRelated::saveRelated($id, [$cateInfo['id']]); | ||
| 240 | } | 244 | } |
| 241 | //设置路由 | 245 | //设置路由 |
| 242 | - $route = RouteMap::setRoute($val[11],RouteMap::SOURCE_PRODUCT,$id,$project_id); | ||
| 243 | - $productModel->edit(['route'=>$route],['id'=>$id]); | ||
| 244 | - echo date('Y-m-d H:i:s') . '新增产品id:'.$id . PHP_EOL; | ||
| 245 | - if(!empty($val[2])){ | 246 | + $route = RouteMap::setRoute($val[11], RouteMap::SOURCE_PRODUCT, $id, $project_id); |
| 247 | + $productModel->edit(['route' => $route], ['id' => $id]); | ||
| 248 | + echo date('Y-m-d H:i:s') . '新增产品id:' . $id . PHP_EOL; | ||
| 249 | + if (!empty($val[2])) { | ||
| 246 | $extent = [ | 250 | $extent = [ |
| 247 | - 'key'=>'pd_extended_field_4', | ||
| 248 | - 'product_id'=>$id, | ||
| 249 | - 'project_id'=>$project_id, | ||
| 250 | - 'values'=>$val[2], | 251 | + 'key' => 'pd_extended_field_4', |
| 252 | + 'product_id' => $id, | ||
| 253 | + 'project_id' => $project_id, | ||
| 254 | + 'values' => $val[2], | ||
| 251 | ]; | 255 | ]; |
| 252 | try { | 256 | try { |
| 253 | $extentInfoModel->addReturnId($extent); | 257 | $extentInfoModel->addReturnId($extent); |
| 254 | - }catch (\Exception $e){ | ||
| 255 | - echo '错误:'.$val[2]; | 258 | + } catch (\Exception $e) { |
| 259 | + echo '错误:' . $val[2]; | ||
| 256 | } | 260 | } |
| 257 | 261 | ||
| 258 | } | 262 | } |
| 259 | - if(!empty($val[3])){ | 263 | + if (!empty($val[3])) { |
| 260 | $extent = [ | 264 | $extent = [ |
| 261 | - 'key'=>'pd_extended_field_1', | ||
| 262 | - 'product_id'=>$id, | ||
| 263 | - 'project_id'=>$project_id, | ||
| 264 | - 'values'=>$val[3], | 265 | + 'key' => 'pd_extended_field_1', |
| 266 | + 'product_id' => $id, | ||
| 267 | + 'project_id' => $project_id, | ||
| 268 | + 'values' => $val[3], | ||
| 265 | ]; | 269 | ]; |
| 266 | try { | 270 | try { |
| 267 | $extentInfoModel->addReturnId($extent); | 271 | $extentInfoModel->addReturnId($extent); |
| 268 | - }catch (\Exception $e){ | ||
| 269 | - echo '错误:'.$val[3]; | 272 | + } catch (\Exception $e) { |
| 273 | + echo '错误:' . $val[3]; | ||
| 270 | } | 274 | } |
| 271 | } | 275 | } |
| 272 | - if(!empty($val[4])){ | 276 | + if (!empty($val[4])) { |
| 273 | $extent = [ | 277 | $extent = [ |
| 274 | - 'key'=>'pd_extended_field_2', | ||
| 275 | - 'product_id'=>$id, | ||
| 276 | - 'project_id'=>$project_id, | ||
| 277 | - 'values'=>$val[4], | 278 | + 'key' => 'pd_extended_field_2', |
| 279 | + 'product_id' => $id, | ||
| 280 | + 'project_id' => $project_id, | ||
| 281 | + 'values' => $val[4], | ||
| 278 | ]; | 282 | ]; |
| 279 | try { | 283 | try { |
| 280 | $extentInfoModel->addReturnId($extent); | 284 | $extentInfoModel->addReturnId($extent); |
| 281 | - }catch (\Exception $e){ | ||
| 282 | - echo '错误:'.$val[4]; | 285 | + } catch (\Exception $e) { |
| 286 | + echo '错误:' . $val[4]; | ||
| 283 | } | 287 | } |
| 284 | } | 288 | } |
| 285 | - if(!empty($val[5])){ | 289 | + if (!empty($val[5])) { |
| 286 | $extent = [ | 290 | $extent = [ |
| 287 | - 'key'=>'pd_extended_field_3', | ||
| 288 | - 'product_id'=>$id, | ||
| 289 | - 'project_id'=>$project_id, | ||
| 290 | - 'values'=>$val[5], | 291 | + 'key' => 'pd_extended_field_3', |
| 292 | + 'product_id' => $id, | ||
| 293 | + 'project_id' => $project_id, | ||
| 294 | + 'values' => $val[5], | ||
| 291 | ]; | 295 | ]; |
| 292 | try { | 296 | try { |
| 293 | $extentInfoModel->addReturnId($extent); | 297 | $extentInfoModel->addReturnId($extent); |
| 294 | - }catch (\Exception $e){ | ||
| 295 | - echo '错误:'.$val[5]; | 298 | + } catch (\Exception $e) { |
| 299 | + echo '错误:' . $val[5]; | ||
| 296 | } | 300 | } |
| 297 | } | 301 | } |
| 298 | //产品描述 | 302 | //产品描述 |
| 299 | - if(!empty($val[7])){ | 303 | + if (!empty($val[7])) { |
| 300 | //设置产品描述 | 304 | //设置产品描述 |
| 301 | $detail = [ | 305 | $detail = [ |
| 302 | - 'title'=>'SEODescription', | ||
| 303 | - 'product_id'=>$id, | ||
| 304 | - 'column_id'=>1, | ||
| 305 | - 'text_type'=>1, | ||
| 306 | - 'content'=>json_encode(['content'=>$val[7]],JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE) | 306 | + 'title' => 'SEODescription', |
| 307 | + 'product_id' => $id, | ||
| 308 | + 'column_id' => 1, | ||
| 309 | + 'text_type' => 1, | ||
| 310 | + 'content' => json_encode(['content' => $val[7]], JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE) | ||
| 307 | ]; | 311 | ]; |
| 308 | $detailModel->addReturnId($detail); | 312 | $detailModel->addReturnId($detail); |
| 309 | } | 313 | } |
| 310 | //产品描述 | 314 | //产品描述 |
| 311 | - if(!empty($val[8])){ | 315 | + if (!empty($val[8])) { |
| 312 | //设置产品描述 | 316 | //设置产品描述 |
| 313 | $detail = [ | 317 | $detail = [ |
| 314 | - 'title'=>'SEOSpecification', | ||
| 315 | - 'product_id'=>$id, | ||
| 316 | - 'column_id'=>1, | ||
| 317 | - 'text_type'=>1, | ||
| 318 | - 'content'=>json_encode(['content'=>$val[8]],JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE) | 318 | + 'title' => 'SEOSpecification', |
| 319 | + 'product_id' => $id, | ||
| 320 | + 'column_id' => 1, | ||
| 321 | + 'text_type' => 1, | ||
| 322 | + 'content' => json_encode(['content' => $val[8]], JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE) | ||
| 319 | ]; | 323 | ]; |
| 320 | $detailModel->addReturnId($detail); | 324 | $detailModel->addReturnId($detail); |
| 321 | } | 325 | } |
| 322 | - if(!empty($val[9])){ | 326 | + if (!empty($val[9])) { |
| 323 | try { | 327 | try { |
| 324 | - $faqsDetail = json_decode($val[9],JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE); | ||
| 325 | - if(!empty($faqsDetail) && is_array($faqsDetail)){ | 328 | + $faqsDetail = json_decode($val[9], JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE); |
| 329 | + if (!empty($faqsDetail) && is_array($faqsDetail)) { | ||
| 326 | $faqContent = '<div>'; | 330 | $faqContent = '<div>'; |
| 327 | - foreach ($faqsDetail as $faq_Val){ | ||
| 328 | - $faqContent .= "<span>question:".$faq_Val['question'] . "</span><br /><span>" . "answer:".$faq_Val['answer']. "</span><br />"; | 331 | + foreach ($faqsDetail as $faq_Val) { |
| 332 | + $faqContent .= "<span>question:" . $faq_Val['question'] . "</span><br /><span>" . "answer:" . $faq_Val['answer'] . "</span><br />"; | ||
| 329 | } | 333 | } |
| 330 | $faqContent .= '</div>'; | 334 | $faqContent .= '</div>'; |
| 331 | $detailFaqInfo = [ | 335 | $detailFaqInfo = [ |
| 332 | - 'title'=>'SEOQandA', | ||
| 333 | - 'product_id'=>$id, | ||
| 334 | - 'column_id'=>1, | ||
| 335 | - 'text_type'=>1, | ||
| 336 | - 'content'=>json_encode(['content'=>$faqContent],JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE) | 336 | + 'title' => 'SEOQandA', |
| 337 | + 'product_id' => $id, | ||
| 338 | + 'column_id' => 1, | ||
| 339 | + 'text_type' => 1, | ||
| 340 | + 'content' => json_encode(['content' => $faqContent], JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE) | ||
| 337 | ]; | 341 | ]; |
| 338 | $detailModel->addReturnId($detailFaqInfo); | 342 | $detailModel->addReturnId($detailFaqInfo); |
| 339 | } | 343 | } |
| 340 | - }catch(\Exception $e){ | 344 | + } catch (\Exception $e) { |
| 341 | echo 'fqs'; | 345 | echo 'fqs'; |
| 342 | } | 346 | } |
| 343 | } | 347 | } |
| 344 | - if(!empty($val[10])){ | 348 | + if (!empty($val[10])) { |
| 345 | try { | 349 | try { |
| 346 | - $faqsDetail = json_decode($val[10],true); | ||
| 347 | - if(!empty($faqsDetail) && is_array($faqsDetail)){ | 350 | + $faqsDetail = json_decode($val[10], true); |
| 351 | + if (!empty($faqsDetail) && is_array($faqsDetail)) { | ||
| 348 | $faqContent = '<div>'; | 352 | $faqContent = '<div>'; |
| 349 | - foreach ($faqsDetail as $faq_Val){ | ||
| 350 | - $faqContent .= "<span>question:".$faq_Val['question'] . "</span><br /><span>" . "answer:".$faq_Val['answer']. "</span><br />"; | 353 | + foreach ($faqsDetail as $faq_Val) { |
| 354 | + $faqContent .= "<span>question:" . $faq_Val['question'] . "</span><br /><span>" . "answer:" . $faq_Val['answer'] . "</span><br />"; | ||
| 351 | } | 355 | } |
| 352 | $faqContent .= '</div>'; | 356 | $faqContent .= '</div>'; |
| 353 | $detailFaqInfo = [ | 357 | $detailFaqInfo = [ |
| 354 | - 'title'=>'SEOQandA_Product', | ||
| 355 | - 'product_id'=>$id, | ||
| 356 | - 'column_id'=>1, | ||
| 357 | - 'text_type'=>1, | ||
| 358 | - 'content'=>json_encode(['content'=>$faqContent]) | 358 | + 'title' => 'SEOQandA_Product', |
| 359 | + 'product_id' => $id, | ||
| 360 | + 'column_id' => 1, | ||
| 361 | + 'text_type' => 1, | ||
| 362 | + 'content' => json_encode(['content' => $faqContent]) | ||
| 359 | ]; | 363 | ]; |
| 360 | $detailModel->addReturnId($detailFaqInfo); | 364 | $detailModel->addReturnId($detailFaqInfo); |
| 361 | } | 365 | } |
| 362 | - }catch(\Exception $e){ | 366 | + } catch (\Exception $e) { |
| 363 | continue; | 367 | continue; |
| 364 | } | 368 | } |
| 365 | } | 369 | } |
| @@ -367,217 +371,24 @@ class LyhImportTest extends Command | @@ -367,217 +371,24 @@ class LyhImportTest extends Command | ||
| 367 | return true; | 371 | return true; |
| 368 | } | 372 | } |
| 369 | 373 | ||
| 370 | - public function handleCatePid(){ | 374 | + public function handleCatePid() |
| 375 | + { | ||
| 371 | $cateModel = new Category(); | 376 | $cateModel = new Category(); |
| 372 | - $list = $cateModel->list([],'id',['*'],'asc'); | ||
| 373 | - foreach ($list as $k => $v){ | ||
| 374 | - if($v['seo_des'] == 0){ | 377 | + $list = $cateModel->list([], 'id', ['*'], 'asc'); |
| 378 | + foreach ($list as $k => $v) { | ||
| 379 | + if ($v['seo_des'] == 0) { | ||
| 375 | $pid = 0; | 380 | $pid = 0; |
| 376 | - }else{ | ||
| 377 | - $info = $cateModel->read(['seo_title'=>$v['seo_des']],['id']); | ||
| 378 | - if($info !== false){ | 381 | + } else { |
| 382 | + $info = $cateModel->read(['seo_title' => $v['seo_des']], ['id']); | ||
| 383 | + if ($info !== false) { | ||
| 379 | $pid = $info['id']; | 384 | $pid = $info['id']; |
| 380 | - }else{ | 385 | + } else { |
| 381 | $pid = 0; | 386 | $pid = 0; |
| 382 | } | 387 | } |
| 383 | } | 388 | } |
| 384 | //更新pid | 389 | //更新pid |
| 385 | - $cateModel->edit(['pid'=>$pid],['id'=>$v['id']]); | ||
| 386 | - } | ||
| 387 | - return true; | ||
| 388 | - } | ||
| 389 | - | ||
| 390 | - /** | ||
| 391 | - * @remark :导入扩展模块数据 | ||
| 392 | - * @name :importCustomModule | ||
| 393 | - * @author :lyh | ||
| 394 | - * @method :post | ||
| 395 | - * @time :2025/2/24 14:54 | ||
| 396 | - */ | ||
| 397 | - public function importCustomModule($url,$project_id){ | ||
| 398 | - $line_of_text = []; | ||
| 399 | - $opts = [ | ||
| 400 | - 'http' => [ | ||
| 401 | - 'method' => 'GET', | ||
| 402 | - 'header' => 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.246' | ||
| 403 | - ], | ||
| 404 | - 'ssl' => [ | ||
| 405 | - 'verify_peer' => false, | ||
| 406 | - 'verify_peer_name' => false | ||
| 407 | - ] | ||
| 408 | - ]; | ||
| 409 | - $file_handle = fopen($url, 'r', null, stream_context_create($opts)); | ||
| 410 | - while (!feof($file_handle)) { | ||
| 411 | - $line_of_text[] = fgetcsv($file_handle, 0, ','); | ||
| 412 | - } | ||
| 413 | - fclose($file_handle); | ||
| 414 | - $customContentModel = new CustomModuleContent(); | ||
| 415 | - $customCategoryModel = new CustomModuleCategory();; | ||
| 416 | - $customExtendContentTModel = new CustomModuleExtentContent(); | ||
| 417 | - foreach ($line_of_text as $k => $item){ | ||
| 418 | -// try { | ||
| 419 | - //添加内容 | ||
| 420 | - $contentId = $customContentModel->addReturnId(['name'=>$item[0],'module_id'=>3,'remark'=>$item[1],'project_id'=>$project_id]); | ||
| 421 | - echo date('Y-m-d H:i:s') . '当前扩展数据id:'. $contentId . PHP_EOL; | ||
| 422 | - //注册路由 | ||
| 423 | - $route = RouteMap::setRoute($item[0], RouteMap::SOURCE_MODULE, | ||
| 424 | - $contentId, $project_id); | ||
| 425 | - $customContentModel->edit(['route'=>$route],['id'=>$contentId]); | ||
| 426 | - if(!empty($item[3])){ | ||
| 427 | - $categoryId = ','; | ||
| 428 | - $cateArr = explode('/',$item[3]); | ||
| 429 | - foreach ($cateArr as $cateV){ | ||
| 430 | - $cateInfo = $customCategoryModel->read(['name'=>$cateV,'module_id'=>3,'project_id'=>$project_id]); | ||
| 431 | - if($cateInfo !== false){ | ||
| 432 | - $categoryId .= $cateInfo['id'].','; | ||
| 433 | - }else{ | ||
| 434 | - $cateVId = $customCategoryModel->addReturnId(['name'=>$cateV,'module_id'=>3,'project_id'=>$project_id]); | ||
| 435 | - $cateRoute = RouteMap::setRoute($cateV, RouteMap::SOURCE_MODULE_CATE, | ||
| 436 | - $cateVId, $project_id); | ||
| 437 | - $customCategoryModel->edit(['route'=>$cateRoute],['id'=>$cateVId]); | ||
| 438 | - $categoryId .= $cateVId.','; | ||
| 439 | - } | ||
| 440 | - } | ||
| 441 | - $customContentModel->edit(['category_id'=>$categoryId],['id'=>$contentId]); | ||
| 442 | - } | ||
| 443 | - $saveData = [ | ||
| 444 | - ['key'=>'pd_extended_field_1', 'type'=>1, 'values'=>$item[2], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>3, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')], | ||
| 445 | -// ['key'=>'pd_extended_field_2', 'type'=>1, 'values'=>$item[4], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>2, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')], | ||
| 446 | -// ['key'=>'pd_extended_field_3', 'type'=>1, 'values'=>$item[5], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>2, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')], | ||
| 447 | -// ['key'=>'pd_extended_field_4', 'type'=>1, 'values'=>$item[3], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>2, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')], | ||
| 448 | -// ['key'=>'pd_extended_field_5', 'type'=>1, 'values'=>$item[8], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>2, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')], | ||
| 449 | -// ['key'=>'pd_extended_field_6', 'type'=>1, 'values'=>$item[6], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>2, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')], | ||
| 450 | -// ['key'=>'pd_extended_field_7', 'type'=>1, 'values'=>$item[9], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>2, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')], | ||
| 451 | -// ['key'=>'pd_extended_field_8', 'type'=>1, 'values'=>$item[10], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>2, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')], | ||
| 452 | -// ['key'=>'pd_extended_field_9', 'type'=>1, 'values'=>$item[11], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>2, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')], | ||
| 453 | -// ['key'=>'pd_extended_field_10', 'type'=>1, 'values'=>$item[12], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>2, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')], | ||
| 454 | -// ['key'=>'pd_extended_field_11', 'type'=>1, 'values'=>$item[13], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>2, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')], | ||
| 455 | -// ['key'=>'pd_extended_field_12', 'type'=>1, 'values'=>$item[14] ?? '', 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>2, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')], | ||
| 456 | -// ['key'=>'pd_extended_field_13', 'type'=>1, 'values'=>$item[7], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>2, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')], | ||
| 457 | - ]; | ||
| 458 | - $customExtendContentTModel->insert($saveData); | ||
| 459 | -// }catch (\Exception $e){ | ||
| 460 | -// echo date('Y-m-d H:i:s') . '错误name:'. $item[0] . PHP_EOL; | ||
| 461 | -// continue; | ||
| 462 | -// } | ||
| 463 | - } | ||
| 464 | - } | ||
| 465 | - | ||
| 466 | - /** | ||
| 467 | - * @remark :新闻导入到扩展模块 | ||
| 468 | - * @name :newsImportCustom | ||
| 469 | - * @author :lyh | ||
| 470 | - * @method :post | ||
| 471 | - * @time :2025/2/28 11:04 | ||
| 472 | - */ | ||
| 473 | - public function newsImportCustom($project_id = 2385){ | ||
| 474 | - $newsModel = new News(); | ||
| 475 | - $lists = $newsModel->list(['category_id'=>',3,']); | ||
| 476 | - foreach ($lists as $k => $v){ | ||
| 477 | - $param = [ | ||
| 478 | - 'name'=>$v['name'], | ||
| 479 | - 'content'=>$v['text'], | ||
| 480 | - 'remark'=>$v['remark'], | ||
| 481 | - 'route'=>$v['url'], | ||
| 482 | - 'image'=>$v['image'], | ||
| 483 | - 'seo_title'=>$v['seo_title'], | ||
| 484 | - 'seo_keywords'=>$v['seo_keywords'], | ||
| 485 | - 'seo_description'=>$v['seo_keywords'], | ||
| 486 | - 'project_id'=>$project_id, | ||
| 487 | - 'operator_id'=>$v['operator_id'], | ||
| 488 | - 'release_at'=>$v['release_at'], | ||
| 489 | - 'module_id'=>3, | ||
| 490 | - 'category_id'=>',2,', | ||
| 491 | - ]; | ||
| 492 | - //删除当前新闻的路由 | ||
| 493 | - RouteMap::delRoute(RouteMap::SOURCE_NEWS,$v['id'],$project_id); | ||
| 494 | - //删除当前数据 | ||
| 495 | - $newsModel->del(['id'=>$v['id']]); | ||
| 496 | - $customContentModel = new CustomModuleContent(); | ||
| 497 | - $id = $customContentModel->addReturnId($param); | ||
| 498 | - $route = RouteMap::setRoute($param['route'],RouteMap::SOURCE_MODULE,$id,$project_id); | ||
| 499 | - $customContentModel->edit(['route'=>$route],['id'=>$id]); | 390 | + $cateModel->edit(['pid' => $pid], ['id' => $v['id']]); |
| 500 | } | 391 | } |
| 501 | return true; | 392 | return true; |
| 502 | } | 393 | } |
| 503 | - | ||
| 504 | - public function import2140CustomModule($url,$project_id){ | ||
| 505 | - $line_of_text = []; | ||
| 506 | - $opts = [ | ||
| 507 | - 'http' => [ | ||
| 508 | - 'method' => 'GET', | ||
| 509 | - 'header' => 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.246' | ||
| 510 | - ], | ||
| 511 | - 'ssl' => [ | ||
| 512 | - 'verify_peer' => false, | ||
| 513 | - 'verify_peer_name' => false | ||
| 514 | - ] | ||
| 515 | - ]; | ||
| 516 | - $file_handle = fopen($url, 'r', null, stream_context_create($opts)); | ||
| 517 | - while (!feof($file_handle)) { | ||
| 518 | - $line_of_text[] = fgetcsv($file_handle, 0, ','); | ||
| 519 | - } | ||
| 520 | - fclose($file_handle); | ||
| 521 | - $customContentModel = new CustomModuleContent(); | ||
| 522 | - $customCategoryModel = new CustomModuleCategory(); | ||
| 523 | - $customExtendContentTModel = new CustomModuleExtentContent(); | ||
| 524 | - foreach ($line_of_text as $k => $item){ | ||
| 525 | -// try { | ||
| 526 | - //添加内容 | ||
| 527 | - $contentId = $customContentModel->addReturnId(['name'=>$item[0],'image'=>'/upload/p/2140/image/'.$item[2],'module_id'=>7,'project_id'=>$project_id]); | ||
| 528 | - echo date('Y-m-d H:i:s') . '当前扩展数据id:'. $contentId . PHP_EOL; | ||
| 529 | - //注册路由 | ||
| 530 | - $route = RouteMap::setRoute($item[0], RouteMap::SOURCE_MODULE, | ||
| 531 | - $contentId, $project_id); | ||
| 532 | - $customContentModel->edit(['route'=>$route],['id'=>$contentId]); | ||
| 533 | - if(!empty($item[1])){ | ||
| 534 | - $categoryId = ','; | ||
| 535 | - $cateArr = explode('/',$item[1]); | ||
| 536 | - foreach ($cateArr as $cateV){ | ||
| 537 | - $cateInfo = $customCategoryModel->read(['name'=>$cateV,'module_id'=>7,'project_id'=>$project_id]); | ||
| 538 | - if($cateInfo !== false){ | ||
| 539 | - $categoryId .= $cateInfo['id'].','; | ||
| 540 | - }else{ | ||
| 541 | - $cateVId = $customCategoryModel->addReturnId(['name'=>$cateV,'module_id'=>7,'project_id'=>$project_id]); | ||
| 542 | - $cateRoute = RouteMap::setRoute($cateV, RouteMap::SOURCE_MODULE_CATE, | ||
| 543 | - $cateVId, $project_id); | ||
| 544 | - $customCategoryModel->edit(['route'=>$cateRoute],['id'=>$cateVId]); | ||
| 545 | - $categoryId .= $cateVId.','; | ||
| 546 | - } | ||
| 547 | - } | ||
| 548 | - $customContentModel->edit(['category_id'=>$categoryId],['id'=>$contentId]); | ||
| 549 | - } | ||
| 550 | - $saveData = [ | ||
| 551 | - ['key'=>'pd_extended_field_1', 'type'=>1, 'values'=>$item[3], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>7, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')], | ||
| 552 | - ['key'=>'pd_extended_field_2', 'type'=>1, 'values'=>$item[4], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>7, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')], | ||
| 553 | - ['key'=>'pd_extended_field_3', 'type'=>1, 'values'=>$item[5], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>7, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')], | ||
| 554 | - ['key'=>'pd_extended_field_4', 'type'=>1, 'values'=>$item[6], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>7, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')], | ||
| 555 | - ['key'=>'pd_extended_field_5', 'type'=>1, 'values'=>$item[7], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>7, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')], | ||
| 556 | - ['key'=>'pd_extended_field_6', 'type'=>1, 'values'=>$item[8]??'', 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>7, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')], | ||
| 557 | - ['key'=>'pd_extended_field_7', 'type'=>1, 'values'=>$item[9], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>7, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')], | ||
| 558 | - ['key'=>'pd_extended_field_8', 'type'=>1, 'values'=>$item[10], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>7, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')], | ||
| 559 | - ['key'=>'pd_extended_field_9', 'type'=>1, 'values'=>$item[11], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>7, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')], | ||
| 560 | - ['key'=>'pd_extended_field_10', 'type'=>1, 'values'=>$item[12], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>7, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')], | ||
| 561 | - ['key'=>'pd_extended_field_11', 'type'=>1, 'values'=>$item[13], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>7, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')], | ||
| 562 | - ['key'=>'pd_extended_field_12', 'type'=>1, 'values'=>$item[14] ?? '', 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>7, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')], | ||
| 563 | - ['key'=>'pd_extended_field_13', 'type'=>1, 'values'=>$item[15], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>7, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')], | ||
| 564 | - ['key'=>'pd_extended_field_14', 'type'=>1, 'values'=>$item[16], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>7, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')], | ||
| 565 | - ['key'=>'pd_extended_field_15', 'type'=>1, 'values'=>$item[17], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>7, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')], | ||
| 566 | - ['key'=>'pd_extended_field_16', 'type'=>1, 'values'=>$item[18], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>7, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')], | ||
| 567 | - ['key'=>'pd_extended_field_17', 'type'=>1, 'values'=>$item[19], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>7, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')], | ||
| 568 | - ['key'=>'pd_extended_field_18', 'type'=>1, 'values'=>$item[20], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>7, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')], | ||
| 569 | - ['key'=>'pd_extended_field_19', 'type'=>1, 'values'=>$item[21], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>7, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')], | ||
| 570 | - ['key'=>'pd_extended_field_20', 'type'=>1, 'values'=>$item[22], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>7, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')], | ||
| 571 | - ['key'=>'pd_extended_field_21', 'type'=>1, 'values'=>$item[23], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>7, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')], | ||
| 572 | - ['key'=>'pd_extended_field_22', 'type'=>1, 'values'=>$item[24], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>7, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')], | ||
| 573 | - ['key'=>'pd_extended_field_23', 'type'=>1, 'values'=>$item[25], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>7, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')], | ||
| 574 | - ['key'=>'pd_extended_field_24', 'type'=>1, 'values'=>$item[26], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>7, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')], | ||
| 575 | - ]; | ||
| 576 | - $customExtendContentTModel->insert($saveData); | ||
| 577 | -// }catch (\Exception $e){ | ||
| 578 | -// echo date('Y-m-d H:i:s') . '错误name:'. $item[0] . PHP_EOL; | ||
| 579 | -// continue; | ||
| 580 | -// } | ||
| 581 | - } | ||
| 582 | - } | ||
| 583 | } | 394 | } |
| @@ -4,10 +4,10 @@ namespace App\Console\Commands\Project; | @@ -4,10 +4,10 @@ namespace App\Console\Commands\Project; | ||
| 4 | 4 | ||
| 5 | use App\Helper\Arr; | 5 | use App\Helper\Arr; |
| 6 | use App\Models\Product\Product; | 6 | use App\Models\Product\Product; |
| 7 | -use App\Models\Project\Project; | ||
| 8 | use App\Services\ProjectServer; | 7 | use App\Services\ProjectServer; |
| 9 | use Illuminate\Console\Command; | 8 | use Illuminate\Console\Command; |
| 10 | use Illuminate\Support\Facades\DB; | 9 | use Illuminate\Support\Facades\DB; |
| 10 | +use Illuminate\Support\Facades\Redis; | ||
| 11 | 11 | ||
| 12 | class ThumbProjectImage extends Command | 12 | class ThumbProjectImage extends Command |
| 13 | { | 13 | { |
| @@ -16,7 +16,7 @@ class ThumbProjectImage extends Command | @@ -16,7 +16,7 @@ class ThumbProjectImage extends Command | ||
| 16 | * | 16 | * |
| 17 | * @var string | 17 | * @var string |
| 18 | */ | 18 | */ |
| 19 | - protected $signature = 'thumb_project_image {project_id}'; | 19 | + protected $signature = 'thumb_project_image'; |
| 20 | 20 | ||
| 21 | /** | 21 | /** |
| 22 | * The console command description. | 22 | * The console command description. |
| @@ -27,79 +27,49 @@ class ThumbProjectImage extends Command | @@ -27,79 +27,49 @@ class ThumbProjectImage extends Command | ||
| 27 | 27 | ||
| 28 | public function handle() | 28 | public function handle() |
| 29 | { | 29 | { |
| 30 | - $project_id = $this->argument('project_id'); | ||
| 31 | - | ||
| 32 | - if ($project_id > 0) { | ||
| 33 | - //指定项目 | ||
| 34 | - $this->output('project_id:' . $project_id . ' | start'); | ||
| 35 | - | ||
| 36 | - $project_info = ProjectServer::useProject($project_id); | ||
| 37 | - | ||
| 38 | - if ($project_info) { | ||
| 39 | - $thumb_w = $project_info->deploy_build->thumb_w ?? 0; | ||
| 40 | - Product::select(['id', 'project_id', 'thumb'])->chunk(100, function ($products) use ($thumb_w) { | ||
| 41 | - foreach ($products as $product) { | ||
| 42 | - $thumb = $product->thumb; | ||
| 43 | - if (isset($thumb['url']) && $thumb['url']) { | ||
| 44 | - $new_thumb = thumbImageByUrl($thumb['url'], $thumb_w); | ||
| 45 | - if ($new_thumb != $thumb['url']) { | ||
| 46 | - $thumb['url'] = $new_thumb; | ||
| 47 | - $json_thumb = Arr::a2s($thumb); | ||
| 48 | - if (strlen($json_thumb) <= 500) { | ||
| 49 | - $product->timestamps = false; | ||
| 50 | - $product->thumb = $json_thumb; | ||
| 51 | - $product->save(); | ||
| 52 | - | ||
| 53 | - $this->output('project_id:' . $product->project_id . ',product_id:' . $product->id . ' | success'); | ||
| 54 | - } | ||
| 55 | - } | ||
| 56 | - } | ||
| 57 | - } | ||
| 58 | - }); | ||
| 59 | - | ||
| 60 | - DB::disconnect('custom_mysql'); | ||
| 61 | - } | 30 | + while (true) { |
| 31 | + $this->start_thumb(); | ||
| 32 | + } | ||
| 33 | + } | ||
| 62 | 34 | ||
| 63 | - $this->output('project_id:' . $project_id . ' | end'); | ||
| 64 | - } else { | ||
| 65 | - //所有项目 | ||
| 66 | - $projectModel = new Project(); | ||
| 67 | - $list = $projectModel->list(['delete_status' => 0, 'is_upgrade' => 0, 'type' => ['in', [1, 2, 3, 4, 6]]], 'id', ['id'], 'asc'); | ||
| 68 | - foreach ($list as $k => $v) { | ||
| 69 | - $project_id = $v['id']; | 35 | + public function start_thumb() |
| 36 | + { | ||
| 37 | + $key = 'thumb_project_image'; | ||
| 38 | + $project_id = Redis::rpop($key); | ||
| 39 | + if (empty($project_id)) { | ||
| 40 | + sleep(60); | ||
| 41 | + return true; | ||
| 42 | + } | ||
| 70 | 43 | ||
| 71 | - $this->output('project_id:' . $project_id . ' | start'); | 44 | + $this->output('project_id:' . $project_id . ' | start'); |
| 72 | 45 | ||
| 73 | - $project_info = ProjectServer::useProject($project_id); | 46 | + $project_info = ProjectServer::useProject($project_id); |
| 74 | 47 | ||
| 75 | - if ($project_info) { | ||
| 76 | - $thumb_w = $project_info->deploy_build->thumb_w ?? 0; | ||
| 77 | - Product::select(['id', 'project_id', 'thumb'])->chunk(100, function ($products) use ($thumb_w) { | ||
| 78 | - foreach ($products as $product) { | ||
| 79 | - $thumb = $product->thumb; | ||
| 80 | - if (isset($thumb['url']) && $thumb['url']) { | ||
| 81 | - $new_thumb = thumbImageByUrl($thumb['url'], $thumb_w); | ||
| 82 | - if ($new_thumb != $thumb['url']) { | ||
| 83 | - $thumb['url'] = $new_thumb; | ||
| 84 | - $json_thumb = Arr::a2s($thumb); | ||
| 85 | - if (strlen($json_thumb) <= 500) { | ||
| 86 | - $product->timestamps = false; | ||
| 87 | - $product->thumb = $json_thumb; | ||
| 88 | - $product->save(); | 48 | + if ($project_info) { |
| 49 | + $thumb_w = $project_info->deploy_build->thumb_w ?? 0; | ||
| 50 | + Product::select(['id', 'project_id', 'gallery'])->chunk(100, function ($products) use ($thumb_w) { | ||
| 51 | + foreach ($products as $product) { | ||
| 52 | + $thumb = $product['gallery'][0] ?? []; | ||
| 53 | + if (isset($thumb['url']) && $thumb['url']) { | ||
| 54 | + $thumb['url'] = thumbImageByUrl($thumb['url'], $thumb_w); | ||
| 55 | + $json_thumb = Arr::a2s($thumb); | ||
| 56 | + if (strlen($json_thumb) <= 500) { | ||
| 57 | + $product->timestamps = false; | ||
| 58 | + $product->thumb = $json_thumb; | ||
| 59 | + $product->save(); | ||
| 89 | 60 | ||
| 90 | - $this->output('project_id:' . $product->project_id . ',product_id:' . $product->id . ' | success'); | ||
| 91 | - } | ||
| 92 | - } | ||
| 93 | - } | 61 | + $this->output('project_id:' . $product->project_id . ',product_id:' . $product->id . ',thumb:' . $thumb_w . ' | success'); |
| 94 | } | 62 | } |
| 95 | - }); | ||
| 96 | - | ||
| 97 | - DB::disconnect('custom_mysql'); | 63 | + } |
| 98 | } | 64 | } |
| 65 | + }); | ||
| 99 | 66 | ||
| 100 | - $this->output('project_id:' . $project_id . ' | end'); | ||
| 101 | - } | 67 | + DB::disconnect('custom_mysql'); |
| 102 | } | 68 | } |
| 69 | + | ||
| 70 | + $this->output('project_id:' . $project_id . ' | end'); | ||
| 71 | + | ||
| 72 | + return true; | ||
| 103 | } | 73 | } |
| 104 | 74 | ||
| 105 | 75 |
| @@ -10,6 +10,7 @@ | @@ -10,6 +10,7 @@ | ||
| 10 | namespace App\Console\Commands\SyncFilesImage; | 10 | namespace App\Console\Commands\SyncFilesImage; |
| 11 | 11 | ||
| 12 | use App\Models\File\File; | 12 | use App\Models\File\File; |
| 13 | +use App\Models\File\Image; | ||
| 13 | use Illuminate\Console\Command; | 14 | use Illuminate\Console\Command; |
| 14 | 15 | ||
| 15 | class SyncProjectFile extends Command | 16 | class SyncProjectFile extends Command |
| @@ -31,7 +32,7 @@ class SyncProjectFile extends Command | @@ -31,7 +32,7 @@ class SyncProjectFile extends Command | ||
| 31 | 32 | ||
| 32 | public function handle(){ | 33 | public function handle(){ |
| 33 | $project_id = $this->argument('project_id'); | 34 | $project_id = $this->argument('project_id'); |
| 34 | - $fileModel = new File(); | 35 | + $fileModel = new Image(); |
| 35 | $lists = $fileModel->list(['project_id'=>$project_id]);//未同步成功的图片及文件 | 36 | $lists = $fileModel->list(['project_id'=>$project_id]);//未同步成功的图片及文件 |
| 36 | foreach ($lists as $k => $v){ | 37 | foreach ($lists as $k => $v){ |
| 37 | if(strpos($v['path'], '/181/') !== false ){ | 38 | if(strpos($v['path'], '/181/') !== false ){ |
| @@ -10,6 +10,7 @@ | @@ -10,6 +10,7 @@ | ||
| 10 | namespace App\Console\Commands\SyncFilesImage; | 10 | namespace App\Console\Commands\SyncFilesImage; |
| 11 | 11 | ||
| 12 | use App\Models\File\File; | 12 | use App\Models\File\File; |
| 13 | +use App\Models\File\Image; | ||
| 13 | use Illuminate\Console\Command; | 14 | use Illuminate\Console\Command; |
| 14 | 15 | ||
| 15 | class SyncTimeFiles extends Command | 16 | class SyncTimeFiles extends Command |
| @@ -30,11 +31,11 @@ class SyncTimeFiles extends Command | @@ -30,11 +31,11 @@ class SyncTimeFiles extends Command | ||
| 30 | 31 | ||
| 31 | public function handle() | 32 | public function handle() |
| 32 | { | 33 | { |
| 33 | - $fileModel = new File(); | ||
| 34 | -// $imagesModel = new Image(); | ||
| 35 | - $start = '2025-08-20 00:00:00'; | ||
| 36 | - $end = '2025-08-28 00:00:00'; | ||
| 37 | - $lists = $fileModel->list(['created_at'=>['between',[$start,$end]]]); | 34 | +// $fileModel = new File(); |
| 35 | + $imagesModel = new Image(); | ||
| 36 | + $start = '2025-08-28 00:00:00'; | ||
| 37 | + $end = '2025-08-29 23:59:59'; | ||
| 38 | + $lists = $imagesModel->list(['created_at'=>['between',[$start,$end]]]); | ||
| 38 | foreach ($lists as $v){ | 39 | foreach ($lists as $v){ |
| 39 | $path = $v['path']; | 40 | $path = $v['path']; |
| 40 | echo date('Y-m-d H:i:s') . ' | 图片链接:' . $path . PHP_EOL; | 41 | echo date('Y-m-d H:i:s') . ' | 图片链接:' . $path . PHP_EOL; |
| @@ -83,6 +83,9 @@ class UpdateKeyword extends Command | @@ -83,6 +83,9 @@ class UpdateKeyword extends Command | ||
| 83 | if($info['update_method'] != 1){ | 83 | if($info['update_method'] != 1){ |
| 84 | $idArr = shuffle($idArr); | 84 | $idArr = shuffle($idArr); |
| 85 | } | 85 | } |
| 86 | + if(!$idArr){ | ||
| 87 | + return false; | ||
| 88 | + } | ||
| 86 | $result = $this->splitArrayIntoParts($idArr,$number); | 89 | $result = $this->splitArrayIntoParts($idArr,$number); |
| 87 | foreach ($result as $key => $val){ | 90 | foreach ($result as $key => $val){ |
| 88 | $keywordModel->edit(['keyword_content'=>$text[$key]],['id'=>['in',$val]]); | 91 | $keywordModel->edit(['keyword_content'=>$text[$key]],['id'=>['in',$val]]); |
| @@ -286,14 +286,14 @@ class FetchTicketProjects extends Command | @@ -286,14 +286,14 @@ class FetchTicketProjects extends Command | ||
| 286 | 286 | ||
| 287 | $fields = [ | 287 | $fields = [ |
| 288 | 'company_name' => $item->company, | 288 | 'company_name' => $item->company, |
| 289 | - 'title' => $item->title . " - V6", | 289 | + 'title' => $item->title . " - V" . (empty($item->version) ? 6 : $item->version), |
| 290 | 'assm_id' => $assm_id, | 290 | 'assm_id' => $assm_id, |
| 291 | 'seom_id' => $seom_id, | 291 | 'seom_id' => $seom_id, |
| 292 | 'engineer_id' => $engineer_id, | 292 | 'engineer_id' => $engineer_id, |
| 293 | 'is_del' => $is_del, | 293 | 'is_del' => $is_del, |
| 294 | 'website' => !empty($item->domainInfo->domain) ? 'https://'.$item->domainInfo->domain : '', | 294 | 'website' => !empty($item->domainInfo->domain) ? 'https://'.$item->domainInfo->domain : '', |
| 295 | 'test_website' => $item->deploy_build->test_domain ?? '', | 295 | 'test_website' => $item->deploy_build->test_domain ?? '', |
| 296 | - 'version' => empty($item->version) ? 7 : $item->version, // 版本号 | 296 | + 'version' => empty($item->version) ? 6 : $item->version, // 版本号 |
| 297 | 'plan' => $item->planMap()[$item->deploy_build->plan] ?? '', | 297 | 'plan' => $item->planMap()[$item->deploy_build->plan] ?? '', |
| 298 | 'project_cate' => 2, | 298 | 'project_cate' => 2, |
| 299 | 'wechat_group_id' => ProjectAssociation::where('project_id', $item->id) | 299 | 'wechat_group_id' => ProjectAssociation::where('project_id', $item->id) |
| @@ -1468,68 +1468,66 @@ function diffInHours($startTime, $endTime) | @@ -1468,68 +1468,66 @@ function diffInHours($startTime, $endTime) | ||
| 1468 | return round($hours, 1); | 1468 | return round($hours, 1); |
| 1469 | } | 1469 | } |
| 1470 | 1470 | ||
| 1471 | -/** | ||
| 1472 | - * 通过图片地址压缩图片 | ||
| 1473 | - * @param $url | ||
| 1474 | - * @param int $width | ||
| 1475 | - * @return string | ||
| 1476 | - * @author Akun | ||
| 1477 | - * @date 2025/09/01 15:18 | ||
| 1478 | - */ | ||
| 1479 | -function thumbImageByUrl($url, $width = 360) | ||
| 1480 | -{ | ||
| 1481 | - if (empty($url)) { | ||
| 1482 | - return $url; | ||
| 1483 | - } | 1471 | +if (!function_exists('thumbImageByUrl')) { |
| 1472 | + /** | ||
| 1473 | + * 通过图片地址压缩图片 | ||
| 1474 | + * @param $url | ||
| 1475 | + * @param int $width | ||
| 1476 | + * @return string | ||
| 1477 | + * @author Akun | ||
| 1478 | + * @date 2025/09/01 15:18 | ||
| 1479 | + */ | ||
| 1480 | + function thumbImageByUrl($url, $width = 360) | ||
| 1481 | + { | ||
| 1482 | + if (empty($url)) { | ||
| 1483 | + return $url; | ||
| 1484 | + } | ||
| 1484 | 1485 | ||
| 1485 | - if ($width == 0) { | ||
| 1486 | - return $url; | ||
| 1487 | - } | 1486 | + if ($width == 0) { |
| 1487 | + return $url; | ||
| 1488 | + } | ||
| 1488 | 1489 | ||
| 1489 | - if (strpos($url, '_thumb') !== false) { | ||
| 1490 | - return $url; | ||
| 1491 | - } | 1490 | + //获取图片完整访问地址 |
| 1491 | + $url_complete = getImageUrl($url, 0, 0, 0);//先用v6-file地址 | ||
| 1492 | + if (strpos($url_complete, 'v6-file') !== false) { | ||
| 1493 | + $is_exists = checkRemoteFileExists($url_complete); | ||
| 1494 | + if (!$is_exists) { | ||
| 1495 | + //不存在,再用cdn地址 | ||
| 1496 | + $url_complete = getImageUrl($url); | ||
| 1497 | + } | ||
| 1498 | + } | ||
| 1492 | 1499 | ||
| 1493 | - //获取图片完整访问地址 | ||
| 1494 | - $url_complete = getImageUrl($url, 0, 0, 0);//先用v6-file地址 | ||
| 1495 | - if (strpos($url_complete, 'v6-file') !== false) { | ||
| 1496 | - $is_exists = checkRemoteFileExists($url_complete); | ||
| 1497 | - if (!$is_exists) { | ||
| 1498 | - //不存在,再用cdn地址 | ||
| 1499 | - $url_complete = getImageUrl($url); | 1500 | + //获取与原图存储路径相同的压缩路径 |
| 1501 | + $path = parse_url($url_complete, PHP_URL_PATH); | ||
| 1502 | + $path_arr = explode('.', $path); | ||
| 1503 | + if (count($path_arr) != 2) { | ||
| 1504 | + return $url; | ||
| 1500 | } | 1505 | } |
| 1501 | - } | 1506 | + $path_arr[0] = $path_arr[0] . '_thumbW' . $width; |
| 1507 | + $key = implode('.', $path_arr); | ||
| 1502 | 1508 | ||
| 1503 | - //获取与原图存储路径相同的压缩路径 | ||
| 1504 | - $path = parse_url($url_complete, PHP_URL_PATH); | ||
| 1505 | - $path_arr = explode('.', $path); | ||
| 1506 | - if (count($path_arr) != 2) { | ||
| 1507 | - return $url; | ||
| 1508 | - } | ||
| 1509 | - $path_arr[0] = $path_arr[0] . '_thumbW' . $width; | ||
| 1510 | - $key = implode('.', $path_arr); | 1509 | + try { |
| 1510 | + $img = \Intervention\Image\Facades\Image::make($url_complete); | ||
| 1511 | 1511 | ||
| 1512 | - try { | ||
| 1513 | - $img = \Intervention\Image\Facades\Image::make($url_complete); | 1512 | + //宽度按设定,高度自动调整 |
| 1513 | + $img->resize($width, null, function ($constraint) { | ||
| 1514 | + $constraint->aspectRatio(); | ||
| 1515 | + $constraint->upsize(); | ||
| 1516 | + }); | ||
| 1514 | 1517 | ||
| 1515 | - //宽度按设定,高度自动调整 | ||
| 1516 | - $img->resize($width, null, function ($constraint) { | ||
| 1517 | - $constraint->aspectRatio(); | ||
| 1518 | - $constraint->upsize(); | ||
| 1519 | - }); | 1518 | + //获取处理后的图片二进制资源 |
| 1519 | + $resource = $img->stream()->__toString(); | ||
| 1520 | 1520 | ||
| 1521 | - //获取处理后的图片二进制资源 | ||
| 1522 | - $resource = $img->stream()->__toString(); | 1521 | + //上传存储桶 |
| 1522 | + $thumb_url = CosService::uploadRemote('', '', '', $key, $resource); | ||
| 1523 | 1523 | ||
| 1524 | - //上传存储桶 | ||
| 1525 | - $thumb_url = CosService::uploadRemote('', '', '', $key, $resource); | 1524 | + $url = $thumb_url ? $thumb_url : $url; |
| 1525 | + } catch (\Exception $e) { | ||
| 1526 | + Log::channel('thumb_img')->error($e->getMessage(), [$url_complete, $width]); | ||
| 1527 | + } | ||
| 1526 | 1528 | ||
| 1527 | - $url = $thumb_url ? $thumb_url : $url; | ||
| 1528 | - } catch (\Exception $e) { | ||
| 1529 | - Log::channel('thumb_img')->error($e->getMessage(), [$url, $width]); | 1529 | + return $url; |
| 1530 | } | 1530 | } |
| 1531 | - | ||
| 1532 | - return $url; | ||
| 1533 | } | 1531 | } |
| 1534 | 1532 | ||
| 1535 | if (!function_exists('checkRemoteFileExists')) { | 1533 | if (!function_exists('checkRemoteFileExists')) { |
| @@ -221,7 +221,7 @@ class TicketController extends BaseController | @@ -221,7 +221,7 @@ class TicketController extends BaseController | ||
| 221 | $data['record'] = array_filter($data['record'], function($item) { | 221 | $data['record'] = array_filter($data['record'], function($item) { |
| 222 | return $item['date'] > '2025-09-01'; | 222 | return $item['date'] > '2025-09-01'; |
| 223 | }); | 223 | }); |
| 224 | - if($project['type'] == 2){ | 224 | + if($project['type'] == 2 || ($project['deploy_build']['seo_plan'] > 0 && ($project['deploy_build']['plan'] == 0))){ |
| 225 | //优化项目 默认在seo优化中 | 225 | //优化项目 默认在seo优化中 |
| 226 | if($data['optimize_record'] == 0) { | 226 | if($data['optimize_record'] == 0) { |
| 227 | $data['optimize_record'] = 1; | 227 | $data['optimize_record'] = 1; |
| @@ -236,14 +236,17 @@ class TicketController extends BaseController | @@ -236,14 +236,17 @@ class TicketController extends BaseController | ||
| 236 | } | 236 | } |
| 237 | //无剩余时间 | 237 | //无剩余时间 |
| 238 | if($project['project_type'] == 1){ | 238 | if($project['project_type'] == 1){ |
| 239 | - if($project['remain_day'] == 0){$data['optimize_record'] = 4;} | ||
| 240 | - }else{ | 239 | + $remain_day = $project['seo_remain_day']; |
| 241 | if($project['seo_remain_day'] == 0){$data['optimize_record'] = 4;} | 240 | if($project['seo_remain_day'] == 0){$data['optimize_record'] = 4;} |
| 241 | + }else{ | ||
| 242 | + $remain_day = $project['remain_day']; | ||
| 243 | + if($project['remain_day'] == 0){$data['optimize_record'] = 4;} | ||
| 242 | } | 244 | } |
| 243 | if(in_array(2,$project['level'])){ | 245 | if(in_array(2,$project['level'])){ |
| 244 | $data['date_project_record'] = ['暂停优化']; | 246 | $data['date_project_record'] = ['暂停优化']; |
| 245 | }else{ | 247 | }else{ |
| 246 | $data['date_project_record'] = Project::projectProgress('optimize'); | 248 | $data['date_project_record'] = Project::projectProgress('optimize'); |
| 249 | + $data['date_project_record'][4] .= (': '.$remain_day.'天'); | ||
| 247 | } | 250 | } |
| 248 | }else{ | 251 | }else{ |
| 249 | //查看是否绑定微信群 | 252 | //查看是否绑定微信群 |
| @@ -49,11 +49,20 @@ class OptimizeController extends BaseController | @@ -49,11 +49,20 @@ class OptimizeController extends BaseController | ||
| 49 | ->orderBy('gl_project_deploy_optimize.start_date','desc'); | 49 | ->orderBy('gl_project_deploy_optimize.start_date','desc'); |
| 50 | $lists = $query->paginate($this->row, $this->selectParam(), 'page', $this->page)->toArray(); | 50 | $lists = $query->paginate($this->row, $this->selectParam(), 'page', $this->page)->toArray(); |
| 51 | if(!empty($lists) && !empty($lists['list'])){ | 51 | if(!empty($lists) && !empty($lists['list'])){ |
| 52 | + //多apino项目 | ||
| 53 | + $api_no_project = [2104,3041]; | ||
| 52 | $rankDataModel = new RankData(); | 54 | $rankDataModel = new RankData(); |
| 53 | foreach ($lists['list'] as $k => $v){ | 55 | foreach ($lists['list'] as $k => $v){ |
| 54 | - //特殊项目 两个api_no | ||
| 55 | - if($v['id'] == 2104){ | ||
| 56 | - $keyword_num_map = [10690=>100, 11201 => 50]; | 56 | + if(in_array($v['id'],$api_no_project)){ |
| 57 | + switch ($v['id']){ | ||
| 58 | + case 2104: | ||
| 59 | + $keyword_num_map = [10690=>100, 11201 => 50]; | ||
| 60 | + break; | ||
| 61 | + case 3041: | ||
| 62 | + $keyword_num_map = [11298=>100, 10659 => 50]; | ||
| 63 | + break; | ||
| 64 | + default:break; | ||
| 65 | + } | ||
| 57 | $v['first_page_num'] = $v['indexed_pages_num'] = $v['g'] = $v['keyword_num'] = []; | 66 | $v['first_page_num'] = $v['indexed_pages_num'] = $v['g'] = $v['keyword_num'] = []; |
| 58 | foreach ($keyword_num_map as $api_no => $keyword_num){ | 67 | foreach ($keyword_num_map as $api_no => $keyword_num){ |
| 59 | $data = $rankDataModel->read(['project_id'=>$v['id'],'api_no' => $api_no, 'lang'=>''],['first_page_num','indexed_pages_num']); | 68 | $data = $rankDataModel->read(['project_id'=>$v['id'],'api_no' => $api_no, 'lang'=>''],['first_page_num','indexed_pages_num']); |
| @@ -66,8 +75,8 @@ class OptimizeController extends BaseController | @@ -66,8 +75,8 @@ class OptimizeController extends BaseController | ||
| 66 | $v['indexed_pages_num'] = implode(',', $v['indexed_pages_num']); | 75 | $v['indexed_pages_num'] = implode(',', $v['indexed_pages_num']); |
| 67 | $v['g'] = implode(',', $v['g']); | 76 | $v['g'] = implode(',', $v['g']); |
| 68 | $v['keyword_num'] = implode(',', $v['keyword_num']); | 77 | $v['keyword_num'] = implode(',', $v['keyword_num']); |
| 69 | - }else{ | ||
| 70 | - $data = $rankDataModel->read(['project_id'=>$v['id'],'lang'=>'', 'api_no' => $v['api_no']],['first_page_num','indexed_pages_num']); | 78 | + }else { |
| 79 | + $data = $rankDataModel->read(['project_id' => $v['id'], 'lang' => '', 'api_no' => $v['api_no']], ['first_page_num', 'indexed_pages_num']); | ||
| 71 | $v['first_page_num'] = $data['first_page_num'] ?? 0; | 80 | $v['first_page_num'] = $data['first_page_num'] ?? 0; |
| 72 | $v['indexed_pages_num'] = $data['indexed_pages_num'] ?? 0; | 81 | $v['indexed_pages_num'] = $data['indexed_pages_num'] ?? 0; |
| 73 | $v['g'] = $this->getGNum($v['id']); | 82 | $v['g'] = $this->getGNum($v['id']); |
| @@ -8,6 +8,7 @@ use App\Http\Requests\Aside\WorkOrder\AsideTicketStoreRequest; | @@ -8,6 +8,7 @@ use App\Http\Requests\Aside\WorkOrder\AsideTicketStoreRequest; | ||
| 8 | use App\Http\Requests\Aside\WorkOrder\AsideTicketListRequest; | 8 | use App\Http\Requests\Aside\WorkOrder\AsideTicketListRequest; |
| 9 | use App\Http\Requests\Aside\WorkOrder\AsideTicketUpdateRequest; | 9 | use App\Http\Requests\Aside\WorkOrder\AsideTicketUpdateRequest; |
| 10 | use App\Http\Requests\Aside\WorkOrder\TicketProjectListRequest; | 10 | use App\Http\Requests\Aside\WorkOrder\TicketProjectListRequest; |
| 11 | +use App\Models\Manage\Manage; | ||
| 11 | use App\Models\Manage\ManageHr; | 12 | use App\Models\Manage\ManageHr; |
| 12 | use App\Models\WorkOrder\TicketLog; | 13 | use App\Models\WorkOrder\TicketLog; |
| 13 | use App\Models\WorkOrder\TicketProject; | 14 | use App\Models\WorkOrder\TicketProject; |
| @@ -52,7 +53,7 @@ class AsideTicketController extends BaseController | @@ -52,7 +53,7 @@ class AsideTicketController extends BaseController | ||
| 52 | $status = $request->input('status'); | 53 | $status = $request->input('status'); |
| 53 | if($status == 10){ | 54 | if($status == 10){ |
| 54 | $newTime = date("Y-m-d H:i:s", strtotime("-120 hours")); | 55 | $newTime = date("Y-m-d H:i:s", strtotime("-120 hours")); |
| 55 | - return $query->where('status', 0)->where('plan_end_at','<',$newTime);//超过120个小时未处理的工单 | 56 | + return $query->where('status', '!=' ,Tickets::STATUS_COMPLETED)->where('plan_end_at','<',$newTime);//超过120个小时未处理的工单 |
| 56 | }else{ | 57 | }else{ |
| 57 | return $query->where('status', $status); | 58 | return $query->where('status', $status); |
| 58 | } | 59 | } |
| @@ -142,7 +143,15 @@ class AsideTicketController extends BaseController | @@ -142,7 +143,15 @@ class AsideTicketController extends BaseController | ||
| 142 | if ($sortField != 'plan_end_at') $query->orderBy('plan_end_at', 'asc'); | 143 | if ($sortField != 'plan_end_at') $query->orderBy('plan_end_at', 'asc'); |
| 143 | $lists = $query->paginate($this->row, ['*'], 'page', $this->page)->toArray(); | 144 | $lists = $query->paginate($this->row, ['*'], 'page', $this->page)->toArray(); |
| 144 | if(!empty($lists) && !empty($lists['list'])){ | 145 | if(!empty($lists) && !empty($lists['list'])){ |
| 146 | + $manageModel = new Manage(); | ||
| 145 | foreach ($lists['list'] as $key => $item){ | 147 | foreach ($lists['list'] as $key => $item){ |
| 148 | + if($item['project']['version'] != 5){ | ||
| 149 | + $item['project']['engineer_id_name'] = $manageModel->getName($item['project']['engineer_id'] ?? 0); | ||
| 150 | + } | ||
| 151 | + //自动登录v6 | ||
| 152 | + if($item['project']['project_cate'] == 2){ | ||
| 153 | + $item['autologin_code'] = getAutoLoginCode($item['project']['table_id']); | ||
| 154 | + } | ||
| 146 | //计算超时多少个小时 | 155 | //计算超时多少个小时 |
| 147 | if($item['status'] == 0){ | 156 | if($item['status'] == 0){ |
| 148 | $end = date('Y-m-d H:i:s'); | 157 | $end = date('Y-m-d H:i:s'); |
| @@ -280,9 +289,7 @@ class AsideTicketController extends BaseController | @@ -280,9 +289,7 @@ class AsideTicketController extends BaseController | ||
| 280 | 'logs.engineer', | 289 | 'logs.engineer', |
| 281 | 'project.projectV6:id,company,title', | 290 | 'project.projectV6:id,company,title', |
| 282 | ])->find($id); | 291 | ])->find($id); |
| 283 | - | ||
| 284 | if (!$ticket) $this->response('工单不存在', Code::USER_MODEL_NOTFOUND_ERROE); | 292 | if (!$ticket) $this->response('工单不存在', Code::USER_MODEL_NOTFOUND_ERROE); |
| 285 | - | ||
| 286 | $this->response('success', Code::SUCCESS, $ticket->toArray()); | 293 | $this->response('success', Code::SUCCESS, $ticket->toArray()); |
| 287 | } | 294 | } |
| 288 | 295 | ||
| @@ -296,7 +303,6 @@ class AsideTicketController extends BaseController | @@ -296,7 +303,6 @@ class AsideTicketController extends BaseController | ||
| 296 | $request->validated(); | 303 | $request->validated(); |
| 297 | $ticket = Tickets::find($id); | 304 | $ticket = Tickets::find($id); |
| 298 | if (!$ticket) $this->response('工单不存在', Code::USER_MODEL_NOTFOUND_ERROE); | 305 | if (!$ticket) $this->response('工单不存在', Code::USER_MODEL_NOTFOUND_ERROE); |
| 299 | - | ||
| 300 | // 开始修改 | 306 | // 开始修改 |
| 301 | $result = DB::transaction(function () use ($request, $ticket) { | 307 | $result = DB::transaction(function () use ($request, $ticket) { |
| 302 | if ($request->input('engineer_ids')) | 308 | if ($request->input('engineer_ids')) |
| @@ -84,20 +84,19 @@ class AsideTicketLogController extends BaseController | @@ -84,20 +84,19 @@ class AsideTicketLogController extends BaseController | ||
| 84 | if ($pending) | 84 | if ($pending) |
| 85 | { | 85 | { |
| 86 | $ticket->status = Tickets::STATUS_PROCESSING; | 86 | $ticket->status = Tickets::STATUS_PROCESSING; |
| 87 | - }else | ||
| 88 | - { | 87 | + }else { |
| 89 | // 如果所有子任务都完成了,则将工单状态改为已完成 | 88 | // 如果所有子任务都完成了,则将工单状态改为已完成 |
| 90 | - // todo 注意:建站期间的工单,所有人都完成后,不自动完成工单,需要项目经理验收修改工单状态 | ||
| 91 | - if (($ticket->title == 'GEO项目') || !($ticket->project->status == 1 && in_array($ticket->project->project_cate, [1, 2]))) | ||
| 92 | - { | ||
| 93 | - $ticket->status = Tickets::STATUS_COMPLETED; | ||
| 94 | - $ticket->end_at = now(); | ||
| 95 | - $ticket->end_time = diffInHours($ticket->created_at,$ticket->end_at); | ||
| 96 | - $project = $ticket->project; | ||
| 97 | - if ($project->wechat_switch && !$ticket->close_wechat) | ||
| 98 | - $project->pushWechatGroupMsg("工单(ID:{$ticket->id})已全部完成,请访问查看详情!"); | ||
| 99 | - $ticket->pushDing('finish'); | ||
| 100 | - }else{ | 89 | + // todo 注意:建站期间的工单,所有人都完成后,不自动完成工单,需要项目经理验收修改工单状态 |
| 90 | + if (($ticket->title == 'GEO项目') || !($ticket->project->status == 1 && in_array($ticket->project->project_cate, [1, 2]))) | ||
| 91 | + { | ||
| 92 | + $ticket->status = Tickets::STATUS_COMPLETED; | ||
| 93 | + $ticket->end_at = now(); | ||
| 94 | + $ticket->end_time = diffInHours($ticket->created_at,$ticket->end_at); | ||
| 95 | + $project = $ticket->project; | ||
| 96 | + if ($project->wechat_switch && !$ticket->close_wechat) | ||
| 97 | + $project->pushWechatGroupMsg("工单(ID:{$ticket->id})已全部完成,请访问查看详情!"); | ||
| 98 | + $ticket->pushDing('finish'); | ||
| 99 | + }else{ | ||
| 101 | $ticket->status = Tickets::STATUS_YANSHOU; | 100 | $ticket->status = Tickets::STATUS_YANSHOU; |
| 102 | } | 101 | } |
| 103 | } | 102 | } |
| @@ -232,12 +232,12 @@ class CNoticeController extends BaseController | @@ -232,12 +232,12 @@ class CNoticeController extends BaseController | ||
| 232 | } | 232 | } |
| 233 | //获取项目所在服务器 | 233 | //获取项目所在服务器 |
| 234 | $project_model = new Project(); | 234 | $project_model = new Project(); |
| 235 | - $project_info = $project_model->read(['id'=>$project_id],['serve_id','is_upgrade', 'main_lang_id']); | 235 | + $project_info = $project_model->read(['id'=>$project_id],['serve_id','type','is_upgrade', 'main_lang_id']); |
| 236 | if(!$project_info){ | 236 | if(!$project_info){ |
| 237 | $this->fail('未查询到项目数据'); | 237 | $this->fail('未查询到项目数据'); |
| 238 | } | 238 | } |
| 239 | // --------------------------------------------------- 特殊处理通知生成页面 -------------------------------------------------------------- | 239 | // --------------------------------------------------- 特殊处理通知生成页面 -------------------------------------------------------------- |
| 240 | - if ($type == 2 && $project_info['main_lang_id'] == 8) { | 240 | + if ($type == 2 && ($project_id != 4041) && ($project_info['main_lang_id'] == 8)) { |
| 241 | $this->fail('申请项目主语种为俄语,禁止翻译小语种,如若需要翻译小语种, 请联系售后人员确认!'); | 241 | $this->fail('申请项目主语种为俄语,禁止翻译小语种,如若需要翻译小语种, 请联系售后人员确认!'); |
| 242 | } | 242 | } |
| 243 | 243 |
| @@ -73,7 +73,7 @@ class GeoLinkLogic extends BaseLogic | @@ -73,7 +73,7 @@ class GeoLinkLogic extends BaseLogic | ||
| 73 | foreach ($this->param['data'] as $item){ | 73 | foreach ($this->param['data'] as $item){ |
| 74 | $data[] = [ | 74 | $data[] = [ |
| 75 | 'project_id'=>$this->param['project_id'], | 75 | 'project_id'=>$this->param['project_id'], |
| 76 | - 'da'=>$item['da'] ?? '', | 76 | + 'da'=>$item['da'] ?? 0, |
| 77 | 'url'=>$item['url'], | 77 | 'url'=>$item['url'], |
| 78 | 'send_time'=>$item['send_time'] | 78 | 'send_time'=>$item['send_time'] |
| 79 | ]; | 79 | ]; |
| @@ -64,7 +64,7 @@ class ProcessRecordsLogic extends BaseLogic | @@ -64,7 +64,7 @@ class ProcessRecordsLogic extends BaseLogic | ||
| 64 | // $data['record'] = array_filter($data['record'], function($item) { | 64 | // $data['record'] = array_filter($data['record'], function($item) { |
| 65 | // return $item['date'] > '2025-09-01'; | 65 | // return $item['date'] > '2025-09-01'; |
| 66 | // }); | 66 | // }); |
| 67 | - if($project['type'] == 2){ | 67 | + if($project['type'] == 2 || ($project['deploy_build']['seo_plan'] > 0 && ($project['deploy_build']['plan'] == 0))){ |
| 68 | //优化项目 默认在seo优化中 | 68 | //优化项目 默认在seo优化中 |
| 69 | if($data['optimize_record'] == 0) { | 69 | if($data['optimize_record'] == 0) { |
| 70 | $data['optimize_record'] = 1; | 70 | $data['optimize_record'] = 1; |
| @@ -79,14 +79,17 @@ class ProcessRecordsLogic extends BaseLogic | @@ -79,14 +79,17 @@ class ProcessRecordsLogic extends BaseLogic | ||
| 79 | } | 79 | } |
| 80 | //无剩余时间 | 80 | //无剩余时间 |
| 81 | if($project['project_type'] == 1){ | 81 | if($project['project_type'] == 1){ |
| 82 | + $remain_day = $project['seo_remain_day']; | ||
| 82 | if($project['seo_remain_day'] == 0){$data['optimize_record'] = 4;} | 83 | if($project['seo_remain_day'] == 0){$data['optimize_record'] = 4;} |
| 83 | }else{ | 84 | }else{ |
| 85 | + $remain_day = $project['remain_day']; | ||
| 84 | if($project['remain_day'] == 0){$data['optimize_record'] = 4;} | 86 | if($project['remain_day'] == 0){$data['optimize_record'] = 4;} |
| 85 | } | 87 | } |
| 86 | if(in_array(2,$project['level'])){ | 88 | if(in_array(2,$project['level'])){ |
| 87 | $data['date_project_record'] = ['暂停优化']; | 89 | $data['date_project_record'] = ['暂停优化']; |
| 88 | }else{ | 90 | }else{ |
| 89 | $data['date_project_record'] = Project::projectProgress('optimize'); | 91 | $data['date_project_record'] = Project::projectProgress('optimize'); |
| 92 | + $data['date_project_record'][4] .= (': '.$remain_day.'天'); | ||
| 90 | } | 93 | } |
| 91 | }else{ | 94 | }else{ |
| 92 | //查看是否绑定微信群 | 95 | //查看是否绑定微信群 |
| @@ -59,6 +59,7 @@ use Illuminate\Support\Facades\Cache; | @@ -59,6 +59,7 @@ use Illuminate\Support\Facades\Cache; | ||
| 59 | use Illuminate\Support\Facades\DB; | 59 | use Illuminate\Support\Facades\DB; |
| 60 | use Illuminate\Support\Facades\Http; | 60 | use Illuminate\Support\Facades\Http; |
| 61 | use Illuminate\Support\Facades\Log as LogInfo; | 61 | use Illuminate\Support\Facades\Log as LogInfo; |
| 62 | +use Illuminate\Support\Facades\Redis; | ||
| 62 | 63 | ||
| 63 | /** | 64 | /** |
| 64 | * Class ProjectLogic | 65 | * Class ProjectLogic |
| @@ -528,6 +529,13 @@ class ProjectLogic extends BaseLogic | @@ -528,6 +529,13 @@ class ProjectLogic extends BaseLogic | ||
| 528 | protected function saveProjectDeployBuild($deploy_build){ | 529 | protected function saveProjectDeployBuild($deploy_build){ |
| 529 | $deployBuildModel = new DeployBuild(); | 530 | $deployBuildModel = new DeployBuild(); |
| 530 | $deploy_build['configuration'] = Arr::a2s(!empty($deploy_build['configuration']) ? $deploy_build['configuration'] : []); | 531 | $deploy_build['configuration'] = Arr::a2s(!empty($deploy_build['configuration']) ? $deploy_build['configuration'] : []); |
| 532 | + | ||
| 533 | + //如果更改了缩略图压缩大小,同步写入处理缩略图任务队列 | ||
| 534 | + $old_thumb_info = $deployBuildModel->read(['id'=>$deploy_build['id']],['thumb_w']); | ||
| 535 | + if(isset($old_thumb_info['thumb_w']) && $old_thumb_info['thumb_w'] != $deploy_build['thumb_w']){ | ||
| 536 | + Redis::lpush('thumb_project_image',$deploy_build['project_id']); | ||
| 537 | + } | ||
| 538 | + | ||
| 531 | $deployBuildModel->edit($deploy_build,['id'=>$deploy_build['id']]); | 539 | $deployBuildModel->edit($deploy_build,['id'=>$deploy_build['id']]); |
| 532 | return $this->success(); | 540 | return $this->success(); |
| 533 | } | 541 | } |
| @@ -263,6 +263,9 @@ class CustomModuleContentLogic extends BaseLogic | @@ -263,6 +263,9 @@ class CustomModuleContentLogic extends BaseLogic | ||
| 263 | * @time :2023/10/20 9:02 | 263 | * @time :2023/10/20 9:02 |
| 264 | */ | 264 | */ |
| 265 | public function getCategory($category){ | 265 | public function getCategory($category){ |
| 266 | + if(empty($category)){ | ||
| 267 | + return ''; | ||
| 268 | + } | ||
| 266 | $str = ''; | 269 | $str = ''; |
| 267 | foreach ($category as $v){ | 270 | foreach ($category as $v){ |
| 268 | $str .= $v.','; | 271 | $str .= $v.','; |
| @@ -979,6 +979,18 @@ class ProductLogic extends BaseLogic | @@ -979,6 +979,18 @@ class ProductLogic extends BaseLogic | ||
| 979 | } | 979 | } |
| 980 | } | 980 | } |
| 981 | } | 981 | } |
| 982 | + $exist_attr_keys = array_column($attrs,'key');//已存在的参数key | ||
| 983 | + for($i=12;$i<count($data);$i++){ | ||
| 984 | + if($data[$i] ?? ''){ | ||
| 985 | + $data_i_array = explode('^v6sp$',$data[$i]); | ||
| 986 | + if(count($data_i_array) == 2 && !in_array($data_i_array[0],$exist_attr_keys)){ | ||
| 987 | + $attrs[] = [ | ||
| 988 | + 'key' => $data_i_array[0], | ||
| 989 | + 'value' => $data_i_array[1] | ||
| 990 | + ]; | ||
| 991 | + } | ||
| 992 | + } | ||
| 993 | + } | ||
| 982 | //处理描述切换栏 | 994 | //处理描述切换栏 |
| 983 | $describe = []; | 995 | $describe = []; |
| 984 | if($data[11]??''){ | 996 | if($data[11]??''){ |
| @@ -319,7 +319,7 @@ class UserLoginLogic | @@ -319,7 +319,7 @@ class UserLoginLogic | ||
| 319 | $info['is_amp'] = $is_amp; | 319 | $info['is_amp'] = $is_amp; |
| 320 | $info['is_three_code'] = $project['is_three_code'] ?? 0; | 320 | $info['is_three_code'] = $project['is_three_code'] ?? 0; |
| 321 | //产品,新闻,博客导入模板 | 321 | //产品,新闻,博客导入模板 |
| 322 | - $info['import_products_url'] = 'https://ecdn6.globalso.com/upload/p/1/file/2024-12/products.csv'; | 322 | + $info['import_products_url'] = 'https://ecdn6.globalso.com/upload/p/1/file/2025-09/products-1.csv'; |
| 323 | $info['import_news_url'] = 'https://ecdn6.globalso.com/upload/p/1/file/2024-12/news.csv'; | 323 | $info['import_news_url'] = 'https://ecdn6.globalso.com/upload/p/1/file/2024-12/news.csv'; |
| 324 | $info['import_blogs_url'] = 'https://ecdn6.globalso.com/upload/p/1/file/2024-12/blogs.csv'; | 324 | $info['import_blogs_url'] = 'https://ecdn6.globalso.com/upload/p/1/file/2024-12/blogs.csv'; |
| 325 | //缩略图宽度 | 325 | //缩略图宽度 |
| @@ -254,7 +254,6 @@ Route::middleware(['aloginauth'])->group(function () { | @@ -254,7 +254,6 @@ Route::middleware(['aloginauth'])->group(function () { | ||
| 254 | // 售后工单改版 | 254 | // 售后工单改版 |
| 255 | Route::prefix('tickets')->group(function () { | 255 | Route::prefix('tickets')->group(function () { |
| 256 | Route::get('/', [Aside\WorkOrder\AsideTicketController::class, 'index'])->name('admin.tickets.index')->summary('A端工单列表'); | 256 | Route::get('/', [Aside\WorkOrder\AsideTicketController::class, 'index'])->name('admin.tickets.index')->summary('A端工单列表'); |
| 257 | - Route::post('/lists', [Aside\WorkOrder\AsideTicketController::class, 'lists'])->name('admin.tickets.lists')->summary('A端工单列表2'); | ||
| 258 | Route::post('/', [Aside\WorkOrder\AsideTicketController::class, 'store'])->name('admin.tickets.store')->summary('A端创建工单'); | 257 | Route::post('/', [Aside\WorkOrder\AsideTicketController::class, 'store'])->name('admin.tickets.store')->summary('A端创建工单'); |
| 259 | Route::get('/{id}', [Aside\WorkOrder\AsideTicketController::class, 'show'])->name('admin.tickets.show')->summary('A端工单详情'); | 258 | Route::get('/{id}', [Aside\WorkOrder\AsideTicketController::class, 'show'])->name('admin.tickets.show')->summary('A端工单详情'); |
| 260 | Route::post('/{id}', [Aside\WorkOrder\AsideTicketController::class, 'update'])->name('admin.tickets.update')->summary('A端更新工单,审核,邀请同事'); | 259 | Route::post('/{id}', [Aside\WorkOrder\AsideTicketController::class, 'update'])->name('admin.tickets.update')->summary('A端更新工单,审核,邀请同事'); |
-
请 注册 或 登录 后发表评论