作者 Your Name

Merge branch 'develop' of http://47.244.231.31:8099/zhl/globalso-v6 into dev

... ... @@ -66,7 +66,6 @@ class ShareUser extends Command
//删除用户第三方配置
if(!empty($v['profile_key'])){
$this->del_profiles($v);
continue;
}
//更新数据库
$this->save_ayr_share($ayr_share_model,$v);
... ...
... ... @@ -131,7 +131,7 @@ class BaseController extends Controller
];
$this->header['Content-Type'] = $type;
$this->header['token'] = $this->token;
$response = response($result,$result_code,$this->header);;
$response = response($result,$result_code,$this->header);
throw new HttpResponseException($response);
}
... ... @@ -145,7 +145,6 @@ class BaseController extends Controller
* @time :2023/6/17 16:34
*/
protected function _extents($data) {
if (empty($data) || !is_array($data)) {
return empty($data) ? is_array($data) ? [] : '' : $data;
}
... ...
... ... @@ -4,7 +4,9 @@ namespace App\Http\Controllers\Aside\Project;
use App\Helper\Arr;
use App\Http\Controllers\Aside\BaseController;
use App\Http\Logic\Aside\Project\ProcessRecordsLogic;
use App\Http\Logic\Aside\Project\ProjectLogic;
use App\Http\Requests\Aside\Project\ProcessRecordsRequest;
use App\Http\Requests\Aside\Project\ProjectRequest;
use App\Models\InquirySet;
use App\Rules\Ids;
... ... @@ -96,4 +98,30 @@ class ProjectController extends BaseController
$data = $logic->dataSource();
return $this->success($data);
}
/**
* 进程记录
* @author zbj
* @date 2023/6/25
*/
public function get_process_records(Request $request, ProcessRecordsLogic $logic){
$request->validate([
'project_id'=>'required'
],[
'project_id.required' => '项目ID不能为空'
]);
$data = $logic->getInfo($this->param['project_id']);
return $this->success($data);
}
/**
* 保存进程记录
* @author zbj
* @date 2023/6/25
*/
public function save_process_records(ProcessRecordsRequest $request, ProcessRecordsLogic $logic){
$this->param['operator_id'] = $this->manage['id'];
$data = $logic->save($this->param);
return $this->success($data);
}
}
... ...
<?php
namespace App\Http\Controllers\Aside;
use App\Enums\Common\Code;
use App\Http\Logic\Aside\Service\ServiceLogic;
/**
* @remark :企业服务设置信息
* @name :ServiceController
* @author :lyh
* @time :2023/6/25 16:13
*/
class ServiceController extends BaseController
{
/**
* @remark :列表
* @name :lists
* @author :lyh
* @method :post
* @time :2023/6/25 14:31
*/
public function lists(ServiceLogic $serviceLogic){
$lists = $serviceLogic->serviceLists($this->map,$this->page,$this->row,$this->order);
$this->response('success',Code::SUCCESS,$lists);
}
/**
* @remark :企业服务通知详情
* @name :read
* @author :lyh
* @method :post
* @time :2023/6/25 11:50
*/
public function read(ServiceLogic $serviceLogic){
$this->request->validate([
'id' => 'required',
],[
'id.required' => '主键不能为空',
]);
$info = $serviceLogic->serviceRead();
$this->response('success',Code::SUCCESS,$info);
}
/**
* @remark :新增或编辑
* @name :save
* @author :lyh
* @method :post
* @time :2023/6/25 11:51
*/
public function save(ServiceLogic $serviceLogic){
if(isset($this->param['id'])){
$this->request->validate([
'id' => 'required',
],[
'id.required' => '主键不能为空',
]);
}
//参数验证
$this->verifyParam();
$serviceLogic->serviceSave();
$this->response('success');
}
/**
* @remark :编辑指定状态
* @name :status
* @author :lyh
* @method :post
* @time :2023/6/25 14:15
*/
public function status(ServiceLogic $serviceLogic){
$this->request->validate([
'id' => 'required',
],[
'id.required' => '主键不能为空',
]);
$serviceLogic->serviceStatus();
$this->response('success');
}
/**
* @param ServiceLogic $serviceLogic
* @remark :删除信息
* @name :del
* @author :lyh
* @method :post
* @time :2023/6/25 14:26
*/
public function del(ServiceLogic $serviceLogic){
$this->request->validate([
'id' => 'required|array',
],[
'id.required' => '主键不能为空',
]);
$serviceLogic->serviceDel();
$this->response('success');
}
/**
* @remark :参数验证
* @name :validParam
* @author :lyh
* @method :post
* @time :2023/6/25 14:03
*/
public function verifyParam(){
$this->request->validate([
'address' => 'required',
'duty_phone' => 'required',
'landline_telephone' => 'required',
'free_hotline' => 'required',
'enterprise_qq' => 'required',
'android' => 'required',
'official_account' => 'required',
'ios' => 'required',
'image' => 'required',
'app_remark' => 'required',
],[
'address.required' => '地址不能为空',
'duty_phone.required' => '值班电话不能为空',
'landline_telephone.required' => '座机电话不能为空',
'free_hotline.required' => '免费热线不能为空',
'enterprise_qq.required' => '企业qq不能为空',
'android.required' => '安卓不能为空',
'official_account.required' => '公众号不能为空',
'ios.required' => 'ios下载地址不能为空',
'image.required' => '轮播图不能为空',
'app_remark.required' => 'app下载备注信息不能为空',
]);
}
}
... ...
... ... @@ -5,10 +5,12 @@ namespace App\Http\Controllers\Aside\Task;
use App\Http\Controllers\Aside\BaseController;
use App\Http\Logic\Aside\Task\TaskFollowLogic;
use App\Http\Logic\Aside\Task\TaskLogic;
use App\Http\Logic\Aside\Task\TaskOwnerLogic;
use App\Http\Requests\Aside\Task\TaskFollowRequest;
use App\Http\Requests\Aside\Task\TaskRequest;
use App\Models\Task\Task;
use Illuminate\Support\Facades\Request;
use App\Models\Task\TaskOwner;
use Illuminate\Http\Request;
use Illuminate\Validation\Rule;
... ... @@ -26,10 +28,17 @@ class TaskController extends BaseController
{
$map = [];
if(!empty($this->param['search'])){
$map[] = ['title', 'like', "%{$this->param['search']}%"];
$map[] = ['content', 'like', "%{$this->param['search']}%"];
}
if(!empty($this->param['created_manage_id'])){
$map[] = ['created_manage_id', $this->param['created_manage_id']];
}
if(!empty($this->param['owner_manage_id'])){
$map[] = ['id', 'in', TaskOwner::where('manage_id', $this->param['owner_manage_id'])->pluck('task_id')];
}
$sort = ['id' => 'desc'];
$data = $logic->getList($map, $sort);
$data = $logic->getList($map, $sort, ['id', 'project_id', 'workload', 'priority', 'content', 'attachment', 'status', 'end_at', 'created_manage_id']);
return $this->success($data);
}
... ... @@ -46,6 +55,7 @@ class TaskController extends BaseController
public function save(TaskRequest $request, TaskLogic $logic)
{
$this->param['created_manage_id'] = $this->manage->id;
$data = $logic->save($this->param);
return $this->success($data);
}
... ...
<?php
namespace App\Http\Logic\Aside\Project;
use App\Http\Logic\Aside\BaseLogic;
use App\Models\Project\ProcessRecords;
class ProcessRecordsLogic extends BaseLogic
{
public function __construct()
{
parent::__construct();
$this->model = new ProcessRecords();
}
public function getInfo($project_id)
{
$data = $this->model->select(['project_id', 'record', 'remark'])->where('project_id', $project_id)->first();
if(!$data){
$data = [
'project_id' => $project_id,
'record' => [],
'remark' => '',
];
}else{
$data = $data->toArray();
}
$data['data_source'] = [
[
'type' => '基础资料',
'item' => ['Logo', 'banner素材', '基本信息', '公司介绍', '新闻']
],
[
'type' => '产品资料',
'item' => ['都未准备', '不足10款', '描述较少', '重复度过高']
],
[
'type' => '关键词/域名',
'item' => ['未提供', '筛选中', '未盖章', '域名未确认']
],
[
'type' => '建站进度',
'item' => ['资料上传', '网站修改中', '网站搭建完成,客户确认中', '等待网站品控审核后上线']
]
];
return $this->success($data);
}
public function save($param){
$info = $this->model->select(['project_id', 'record', 'remark'])->where('project_id', $param['project_id'])->first();
if($info){
$this->model = $info;
}
$this->model->record = $param['record'];
$this->model->remark = $param['remark'];
$this->model->operator_id = $param['operator_id'];
$res = $this->model->save();
if($res){
return $this->success(['project_id' => $this->model->project_id]);
}else{
$this->fail('保存失败');
}
}
}
... ...
<?php
namespace App\Http\Logic\Aside\Service;
use App\Http\Logic\Aside\BaseLogic;
use App\Models\Service;
use Illuminate\Support\Facades\DB;
class ServiceLogic extends BaseLogic
{
public function __construct()
{
parent::__construct();
$this->model = new Service();
$this->param = $this->requestAll;
}
/**
* @remark :企业服务列表
* @name :serviceLists
* @author :lyh
* @method :post
* @time :2023/6/25 14:32
*/
public function serviceLists($map,$page,$row,$order = 'id',$filed = ['*']){
$lists = $this->model->lists($map,$page,$row,$order,$filed);
return $this->success($lists);
}
/**
* @remark :获取详情
* @name :serviceRead
* @author :lyh
* @method :post
* @time :2023/6/25 13:44
*/
public function serviceRead(){
$info = $this->model->read(['id'=>$this->param['id'],'status'=>0]);
return $this->success($info);
}
/**
* @remark :新增或编辑
* @name :serviceSave
* @author :lyh
* @method :post
* @time :2023/6/25 13:45
*/
public function serviceSave(){
$info = $this->model->read(['id'=>$this->param['id']]);
if($info === false){
$rs = $this->model->add($this->param);
}else{
$rs = $this->model->edit($this->param,['id'=>$this->param['id']]);
}
if($rs === false){
$this->fail('error');
}
return $this->success();
}
/**
* @remark :指定状态始终为一条数据
* @name :serviceStatus
* @author :lyh
* @method :post
* @time :2023/6/25 14:09
*/
public function serviceStatus(){
DB::beginTransaction();
try {
$this->model->edit(['status'=>1],['id'=>['!=',$this->param['id']]]);
$this->model->edit(['status'=>0],['id'=>$this->param['id']]);
DB::commit();
}catch (\Exception $e){
DB::rollBack();
$this->fail('error');
}
return $this->success();
}
/**
* @remark :删除企业服务信息
* @name :serviceDel
* @author :lyh
* @method :post
* @time :2023/6/25 14:22
*/
public function serviceDel(){
$rs = $this->model->del(['id'=>['in',$this->param['id']]]);
if($rs === false){
$this->fail('error');
}
return $this->success();
}
}
... ...
... ... @@ -24,7 +24,8 @@ class TaskFollowLogic extends BaseLogic
}
public function save($param){
$task = $this::getInfo($param['task_id']);
$task_logic = new TaskLogic();
$task = $task_logic->getCacheInfo($param['task_id']);
if(!$task){
$this->fail('任务不存在');
}
... ... @@ -33,6 +34,11 @@ class TaskFollowLogic extends BaseLogic
$this->fail('非本人任务,不能添加跟进记录');
}
parent::save($param);
//清任务缓存
$task_logic->clearCache($param['task_id']);
return $this->success();
}
... ...
... ... @@ -22,7 +22,7 @@ class TaskOwnerLogic extends BaseLogic
public function save($param){
//获取已分配了的
$manage_ids = $this->model->where('task_id', $param['task_id'])->pluck('manage_id', 'id');
$manage_ids = $this->model->where('task_id', $param['task_id'])->pluck('manage_id', 'id')->toArray();
//待删除的
$del_manage_ids = array_diff($manage_ids, $param['manage_ids']);
... ...
<?php
namespace App\Http\Requests\Aside\Project;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Str;
/**
* Class ProcessRecordsRequest
* @package App\Http\Requests\Aside\product
* @author zbj
* @date 2023/6/25
*/
class ProcessRecordsRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'project_id' => 'required',
'record' => ['required', 'array', function ($attribute, $value, $fail) {
foreach ($value as $v) {
if (empty($v['date'])) {
$fail('请选择记录日期');
}
if (empty($v['content'])) {
$fail('请输入记录内容');
}
}
}],
];
}
public function messages()
{
return [
'project_id.required'=>'项目ID不能为空',
];
}
}
... ...
<?php
namespace App\Models\Project;
use App\Helper\Arr;
use App\Models\Base;
use App\Services\Facades\Upload;
class ProcessRecords extends Base
{
//设置关联表名
protected $table = 'gl_project_process_records';
public function setRecordAttribute($value){
foreach ($value as &$v){
$v['image'] = Upload::url2path($v['image']);
$v['file'] = Upload::url2path($v['file']);
}
$this->attributes['record'] = Arr::a2s($value);
}
public function getRecordAttribute($value){
$value = Arr::s2a($value);
foreach ($value as &$v){
$v['image'] = Upload::path2url($v['image']);
$v['file'] = Upload::path2url($v['file']);
}
return $value;
}
}
... ...
<?php
namespace App\Models;
/**
* @remark :企业服务中心
* @name :Service
* @author :lyh
* @time :2023/6/25 11:53
*/
class Service extends Base
{
protected $table = 'gl_enterprise_service';
}
... ...
... ... @@ -2,6 +2,7 @@
namespace App\Models\Task;
use App\Http\Logic\Aside\Project\ProjectLogic;
use App\Models\Base;
use App\Services\Facades\Upload;
... ... @@ -10,6 +11,8 @@ class Task extends Base
//设置关联表名
protected $table = 'gl_task';
protected $appends = ['project_id_text', 'status_text', 'timeout'];
const STATUS_WAIT = 0;
const STATUS_DONGING = 1;
const STATUS_DOWN = 2;
... ... @@ -18,11 +21,20 @@ class Task extends Base
public static function statusMap(){
return [
self::STATUS_WAIT => '未开始',
self::STATUS_DONGING => '进中',
self::STATUS_DONGING => '进中',
self::STATUS_DOWN => '已完成',
];
}
public function getProjectIdTextAttribute(){
$project = ProjectLogic::instance()->getCacheInfo($this->project_id);
return $project['title'] ?? '';
}
public function getStatusTextAttribute(){
return self::statusMap()[$this->status] ?? '';
}
public function setAttachmentAttribute($value){
$this->attributes['attachment'] = Upload::url2path($value);
}
... ... @@ -31,6 +43,13 @@ class Task extends Base
return Upload::path2url($value);
}
public function getTimeoutAttribute(){
if($this->status != self::STATUS_DOWN && strtotime($this->end_at) < time()){
return floor((time() - strtotime($this->end_at)) / 60);
}
return 0;
}
public function owner(){
return $this->hasMany(TaskOwner::class,'task_id','id');
... ...
... ... @@ -112,6 +112,15 @@ Route::middleware(['aloginauth'])->group(function () {
Route::any('/empowerDomain', [Aside\Project\OptimizeController::class, 'empowerDomain'])->name('admin.empowerDomain');
});
//企业服务配置
Route::prefix('service')->group(function () {
Route::any('/', [Aside\ServiceController::class, 'lists'])->name('admin.service_lists');
Route::any('/read', [Aside\ServiceController::class, 'read'])->name('admin.service_read');
Route::any('/save', [Aside\ServiceController::class, 'save'])->name('admin.service_save');
Route::any('/status', [Aside\ServiceController::class, 'status'])->name('admin.service_status');
Route::any('/del', [Aside\ServiceController::class, 'del'])->name('admin.service_del');
});
//项目管理
Route::prefix('project')->group(function () {
Route::get('/', [Aside\Project\ProjectController::class, 'list'])->name('admin.project');
... ... @@ -119,6 +128,8 @@ Route::middleware(['aloginauth'])->group(function () {
Route::post('/save', [Aside\Project\ProjectController::class, 'save'])->name('admin.project_save');
Route::any('/inquiry_set', [Aside\Project\ProjectController::class, 'inquiry_set'])->name('admin.project_inquiry_set');
Route::any('/data_source', [Aside\Project\ProjectController::class, 'data_source'])->name('admin.project_data_source');
Route::any('/get_process_records', [Aside\Project\ProjectController::class, 'get_process_records'])->name('admin.project_get_process_records');
Route::any('/save_process_records', [Aside\Project\ProjectController::class, 'save_process_records'])->name('admin.project_save_process_records');
});
//工单管理
... ...