|
@@ -11,17 +11,25 @@ use Modules\Manage\Http\Requests\MiniprogramUpdateRequest;
|
|
|
use Modules\Manage\Models\Miniprogram;
|
|
|
use Modules\Channel\Models\UserHasMiniprograms;
|
|
|
use Illuminate\Support\Facades\DB;
|
|
|
-use Log;
|
|
|
+use Modules\User\Http\Controllers\UserTrait;
|
|
|
+use Modules\Common\Errors\Errors;
|
|
|
+use Modules\Channel\Exceptions\ChannelBusinessException;
|
|
|
use Modules\Channel\Services\User\UserService;
|
|
|
|
|
|
+
|
|
|
class MiniprogramController extends CatchController
|
|
|
{
|
|
|
|
|
|
+ use UserTrait;
|
|
|
public function __construct(protected readonly Miniprogram $miniprogram,protected readonly UserHasMiniprograms $userHasMiniprograms)
|
|
|
{
|
|
|
|
|
|
}
|
|
|
|
|
|
+ const COMPANY_ROLE = 'company';
|
|
|
+ const ADMINISTRATOR_ROLE = 'administrator';
|
|
|
+ const OPTIMIZER_ROLE = 'optimizer';
|
|
|
+
|
|
|
/**
|
|
|
* 小程序列表
|
|
|
* @param Request $request
|
|
@@ -130,4 +138,104 @@ class MiniprogramController extends CatchController
|
|
|
public function companyList(){
|
|
|
return $this->miniprogram->select(DB::raw('distinct company'))->get()->pluck('company');
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 绑定小程序和投放公司的关系 或者投放公司把小程序分配给优化师
|
|
|
+ * @param [type] $miniprogram_id
|
|
|
+ * @param Request $request uid=2,3,4,5 actison=on|off on:分配,off取消分配
|
|
|
+ * @return array
|
|
|
+ *
|
|
|
+ */
|
|
|
+ public function allocationStore($miniprogram_id,Request $request)
|
|
|
+ {
|
|
|
+ $uid = $this->getLoginUser()->id;
|
|
|
+ if(!UserService::userHasRoles($uid,[self::COMPANY_ROLE,self::ADMINISTRATOR_ROLE])){
|
|
|
+ ChannelBusinessException::throwError(Errors::PARAM_EMPTY);
|
|
|
+ }
|
|
|
+ $uids = $request->post('uids');
|
|
|
+ $action = $request->post('action');
|
|
|
+ if(empty($miniprogram_id) || empty($uids) || empty($action) || !in_array($action,['on','off'])){
|
|
|
+ ChannelBusinessException::throwError(Errors::PARAM_EMPTY);
|
|
|
+ }
|
|
|
+
|
|
|
+ $miniprogram_info = $this->miniprogram->find($miniprogram_id);
|
|
|
+ if(!$miniprogram_info || $miniprogram_info->status == 0){
|
|
|
+ ChannelBusinessException::throwError(Errors::MINIPROGRAM_STATUS_ERROR);
|
|
|
+ }
|
|
|
+
|
|
|
+ return collect(explode(',',$uids))->filter(function (int $value, int $key) use($miniprogram_id,$action){
|
|
|
+ $user_access = UserService::userHasRoles($value,[self::COMPANY_ROLE,self::OPTIMIZER_ROLE]);
|
|
|
+ //只能分配给投手公司或者优化师
|
|
|
+ if($user_access){
|
|
|
+ $result = $this->userHasMiniprograms->where('uid',$value)->where('miniprogram_id',$miniprogram_id)->first();
|
|
|
+ if($action == 'off'){
|
|
|
+ if($result){
|
|
|
+ $result->is_enabled = 0;
|
|
|
+ $result->save();
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ if($result){
|
|
|
+ if($result->is_enabled == 0){
|
|
|
+ $result->is_enabled = 1;
|
|
|
+ $result->save();
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ $this->userHasMiniprograms->create([
|
|
|
+ 'uid'=>$value,'miniprogram_id'=>$miniprogram_id,'is_enabled'=>1
|
|
|
+ ]);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ });
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取投手公司和小程序的绑定关系,用于前端数据回显
|
|
|
+ * @param [type] $miniprogram_id
|
|
|
+ * @return []
|
|
|
+ * response = [
|
|
|
+ * 'on'=>[ ['id'=>1,'username'=>'公司1','user_has_miniprogram'=>1],[] ],
|
|
|
+ * 'off'=>[['id'=>1,'username'=>'公司1','user_has_miniprogram'=>0],[]],
|
|
|
+ * 'all'=>[
|
|
|
+ * ['id'=>1,'username'=>'公司1','user_has_miniprogram'=>1],
|
|
|
+ * ['id'=>2,'username'=>'公司1','user_has_miniprogram'=>0]
|
|
|
+ * ]
|
|
|
+ * ]
|
|
|
+ *
|
|
|
+ */
|
|
|
+ public function getAllocationInfo($miniprogram_id){
|
|
|
+ $uid = $this->getLoginUser()->id;
|
|
|
+ if(UserService::userHasRole($uid,self::ADMINISTRATOR_ROLE)){
|
|
|
+ $all_company_account = UserService::listByRole(self::COMPANY_ROLE,['users.username','users.id']);
|
|
|
+ }else{
|
|
|
+ $all_company_account = UserService::getOptimizers($uid,['users.username','users.id']);
|
|
|
+ }
|
|
|
+
|
|
|
+ $result = $all_company_account->map(function ($item,$key) use($miniprogram_id) {
|
|
|
+ $info = $this->userHasMiniprograms->where('uid',$item->id)->where('miniprogram_id',$miniprogram_id)->where('is_enabled',1)->count();
|
|
|
+ if($info){
|
|
|
+ $item->user_has_miniprogram = 1;
|
|
|
+ $item->user_has_miniprogram_flag = 'on';
|
|
|
+ }else{
|
|
|
+ $item->user_has_miniprogram = 0;
|
|
|
+ $item->user_has_miniprogram_flag = 'off';
|
|
|
+ }
|
|
|
+ return $item;
|
|
|
+ });
|
|
|
+ $group = $result->groupBy('user_has_miniprogram_flag')->toArray();
|
|
|
+ if(!isset($group['on'])){
|
|
|
+ $group['on'] = [];
|
|
|
+ }
|
|
|
+ if(!isset($group['off'])){
|
|
|
+ $group['off'] = [];
|
|
|
+ }
|
|
|
+ $group['all'] = $result->toArray();
|
|
|
+ return $group;
|
|
|
+ }
|
|
|
}
|