|
@@ -22,7 +22,8 @@ class MiniprogramController extends CatchController
|
|
|
{
|
|
|
|
|
|
use UserTrait;
|
|
|
- public function __construct(protected readonly Miniprogram $miniprogram,protected readonly UserHasMiniprograms $userHasMiniprograms)
|
|
|
+
|
|
|
+ public function __construct(protected readonly Miniprogram $miniprogram, protected readonly UserHasMiniprograms $userHasMiniprograms)
|
|
|
{
|
|
|
|
|
|
}
|
|
@@ -45,34 +46,34 @@ class MiniprogramController extends CatchController
|
|
|
$type = $request->get('type');
|
|
|
$page_size = $request->input('limit', 15);
|
|
|
$where = [];
|
|
|
- if($name){
|
|
|
- $where[] = ['name','like','%'.$name.'%'];
|
|
|
+ if ($name) {
|
|
|
+ $where[] = ['name', 'like', '%' . $name . '%'];
|
|
|
}
|
|
|
- if($play_name){
|
|
|
- $where[] = ['play_name','like','%'.$play_name.'%'];
|
|
|
+ if ($play_name) {
|
|
|
+ $where[] = ['play_name', 'like', '%' . $play_name . '%'];
|
|
|
}
|
|
|
- if($company){
|
|
|
- $where[] = ['company','like','%'.$company.'%'];
|
|
|
+ if ($company) {
|
|
|
+ $where[] = ['company', 'like', '%' . $company . '%'];
|
|
|
}
|
|
|
|
|
|
- if($type){
|
|
|
- $where[] = ['type','=',$type];
|
|
|
+ if ($type) {
|
|
|
+ $where[] = ['type', '=', $type];
|
|
|
}
|
|
|
- if(UserService::userHasRole($uid,'administrator')){
|
|
|
- $result = $this->miniprogram->where($where)->orderBy('id','desc')->paginate($page_size);
|
|
|
- }else{
|
|
|
- $result = $this->userHasMiniprograms->join('miniprogram','miniprogram.id','=','user_has_miniprograms.miniprogram_id')
|
|
|
- ->where('user_has_miniprograms.is_enabled',1)
|
|
|
- ->where('uid',$uid)
|
|
|
- ->where($where)
|
|
|
- ->select('miniprogram.*')
|
|
|
- ->paginate($page_size);
|
|
|
+ if (UserService::userHasRole($uid, 'administrator')) {
|
|
|
+ $result = $this->miniprogram->where($where)->orderBy('id', 'desc')->paginate($page_size);
|
|
|
+ } else {
|
|
|
+ $result = $this->userHasMiniprograms->join('miniprogram', 'miniprogram.id', '=', 'user_has_miniprograms.miniprogram_id')
|
|
|
+ ->where('user_has_miniprograms.is_enabled', 1)
|
|
|
+ ->where('uid', $uid)
|
|
|
+ ->where($where)
|
|
|
+ ->select('miniprogram.*')
|
|
|
+ ->paginate($page_size);
|
|
|
}
|
|
|
|
|
|
- foreach($result as $item){
|
|
|
+ foreach ($result as $item) {
|
|
|
$item->type_name = MiniprogramType::from($item->type)->name();
|
|
|
- $item->status_name = $item->status == 1 ?'启用':'禁用';
|
|
|
- $item->pay_merchant_name = getProp($item->pay_merchant_info,'name','-');
|
|
|
+ $item->status_name = $item->status == 1 ? '启用' : '禁用';
|
|
|
+ $item->pay_merchant_name = getProp($item->pay_merchant_info, 'name', '-');
|
|
|
unset($item->pay_merchant_info);
|
|
|
}
|
|
|
return $result;
|
|
@@ -87,14 +88,14 @@ class MiniprogramController extends CatchController
|
|
|
public function store(MiniprogramRequest $request)
|
|
|
{
|
|
|
$validate_result = $request->validated();
|
|
|
- $validate_result['remark'] = $request->post('remark','') ?? '';
|
|
|
- $validate_result['pay_merchant_id'] = $request->post('pay_merchant_id',0);
|
|
|
- if (getProp($validate_result,'pay_merchant_id',0)){
|
|
|
- $info = DB::table('pay_merchants')->where('id',$validate_result['pay_merchant_id'])->first();
|
|
|
- if (empty($info)){
|
|
|
+ $validate_result['remark'] = $request->post('remark', '') ?? '';
|
|
|
+ $validate_result['pay_merchant_id'] = $request->post('pay_merchant_id', 0);
|
|
|
+ if (getProp($validate_result, 'pay_merchant_id', 0)) {
|
|
|
+ $info = DB::table('pay_merchants')->where('id', $validate_result['pay_merchant_id'])->first();
|
|
|
+ if (empty($info)) {
|
|
|
throw new FailedException("支付方式不存在");
|
|
|
}
|
|
|
- if ($info->miniprogram_type != $validate_result['type']){
|
|
|
+ if ($info->miniprogram_type != $validate_result['type']) {
|
|
|
throw new FailedException("小程序类型和支付的小程序类型不匹配");
|
|
|
}
|
|
|
$validate_result['pay_merchant_info'] = [
|
|
@@ -106,7 +107,7 @@ class MiniprogramController extends CatchController
|
|
|
'pay_appid' => $info->pay_appid,
|
|
|
];
|
|
|
|
|
|
- }else{
|
|
|
+ } else {
|
|
|
$validate_result['pay_merchant_id'] = 0;
|
|
|
$validate_result['pay_merchant_info'] = [];
|
|
|
}
|
|
@@ -136,15 +137,15 @@ class MiniprogramController extends CatchController
|
|
|
public function update($id, MiniprogramUpdateRequest $request)
|
|
|
{
|
|
|
$validate_result = $request->validated();
|
|
|
- if($request->post('remark','')){
|
|
|
- $validate_result['remark'] = $request->post('remark','');
|
|
|
+ if ($request->post('remark', '')) {
|
|
|
+ $validate_result['remark'] = $request->post('remark', '');
|
|
|
}
|
|
|
- if (getProp($validate_result,'pay_merchant_id',0)){
|
|
|
- $info = DB::table('pay_merchants')->where('id',$validate_result['pay_merchant_id'])->first();
|
|
|
- if (empty($info)){
|
|
|
+ if (getProp($validate_result, 'pay_merchant_id', 0)) {
|
|
|
+ $info = DB::table('pay_merchants')->where('id', $validate_result['pay_merchant_id'])->first();
|
|
|
+ if (empty($info)) {
|
|
|
throw new FailedException("支付方式不存在");
|
|
|
}
|
|
|
- if ($info->miniprogram_type != $validate_result['type']){
|
|
|
+ if ($info->miniprogram_type != $validate_result['type']) {
|
|
|
throw new FailedException("小程序类型和支付的小程序类型不匹配");
|
|
|
}
|
|
|
$validate_result['pay_merchant_info'] = [
|
|
@@ -156,11 +157,11 @@ class MiniprogramController extends CatchController
|
|
|
'pay_appid' => $info->pay_appid,
|
|
|
];
|
|
|
|
|
|
- }else{
|
|
|
+ } else {
|
|
|
$validate_result['pay_merchant_id'] = 0;
|
|
|
$validate_result['pay_merchant_info'] = [];
|
|
|
}
|
|
|
- $this->miniprogram->where('id',$id)->update($validate_result);
|
|
|
+ $this->miniprogram->where('id', $id)->update($validate_result);
|
|
|
return [];
|
|
|
}
|
|
|
|
|
@@ -170,9 +171,10 @@ class MiniprogramController extends CatchController
|
|
|
*
|
|
|
* @return array [ ['name'=>'微信小程序','id'=>1],[],[] ]
|
|
|
*/
|
|
|
- public function typeList(){
|
|
|
- $type_list = MiniprogramType::cases();
|
|
|
- $data = array_map( fn($item)=>['name'=>$item->name(),'value'=>$item->value()],$type_list );
|
|
|
+ public function typeList()
|
|
|
+ {
|
|
|
+ $type_list = MiniprogramType::cases();
|
|
|
+ $data = array_map(fn($item) => ['name' => $item->name(), 'value' => $item->value()], $type_list);
|
|
|
return $data;
|
|
|
}
|
|
|
|
|
@@ -182,66 +184,110 @@ class MiniprogramController extends CatchController
|
|
|
*
|
|
|
* @return void
|
|
|
*/
|
|
|
- public function companyList(){
|
|
|
+ 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取消分配
|
|
|
+ * @param Request $request uid=2,3,4,5 actison=on|off on:分配,off取消分配
|
|
|
* @return array
|
|
|
*
|
|
|
*/
|
|
|
- public function allocationStore($miniprogram_id,Request $request)
|
|
|
+ public function allocationStore($miniprogram_id, Request $request)
|
|
|
{
|
|
|
$uid = $this->getLoginUser()->id;
|
|
|
- if(!UserService::userHasRoles($uid,[self::COMPANY_ROLE,self::ADMINISTRATOR_ROLE])){
|
|
|
+ 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'])){
|
|
|
+ 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){
|
|
|
+ $miniprogram_info = $this->miniprogram->find($miniprogram_id);
|
|
|
+ if (!$miniprogram_info || $miniprogram_info->status == 0) {
|
|
|
ChannelBusinessException::throwError(Errors::MINIPROGRAM_STATUS_ERROR);
|
|
|
}
|
|
|
+ $userContext = $this->getUserContext(null);
|
|
|
+ if ($userContext['loginUserRoles']->contains(self::COMPANY_ROLE)) {
|
|
|
+ // 公司给投手分配小程序
|
|
|
+ return $this->allocationStoreCompany($miniprogram_id, $uids, $action);
|
|
|
+ } else {
|
|
|
+ $companyId = explode(',', $uids)[0] ?: 0;
|
|
|
+ if (empty($companyId)) {
|
|
|
+ ChannelBusinessException::throwError(Errors::PARAM_EMPTY);
|
|
|
+ }
|
|
|
+ if (!UserService::userHasRoles($companyId, [self::COMPANY_ROLE])) {
|
|
|
+ ChannelBusinessException::throwError(Errors::MINIPROGRAM_OWNER_ACCOUNT_ROLE_ERROR);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 小程序原拥有公司账号id
|
|
|
+ $ownerCompanyId = DB::table('user_has_miniprograms as up')
|
|
|
+ ->leftJoin('user_has_roles as ur', 'ur.user_id', '=', 'up.uid')
|
|
|
+ ->leftJoin('roles as r', 'r.id', '=', 'ur.role_id')
|
|
|
+ ->where('up.is_enabled', 1)
|
|
|
+ ->where('up.miniprogram_id', $miniprogram_id)
|
|
|
+ ->where('r.identify', 'company')->orderBy('up.id', 'desc')
|
|
|
+ ->value('up.uid');
|
|
|
+ if ($companyId == $ownerCompanyId) {
|
|
|
+ // 相同则不修改
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ if ($ownerCompanyId > 0) {
|
|
|
+ // 若小程序已经分配给其他公司
|
|
|
+ $this->userHasMiniprograms::where('miniprogram_id', $miniprogram_id)->update(['is_enabled' => 0]);
|
|
|
+ }
|
|
|
+ $result = $this->userHasMiniprograms->where('uid', $companyId)->where('miniprogram_id', $miniprogram_id)->first();
|
|
|
+ if ($result) {
|
|
|
+ if ($result->is_enabled == 0) {
|
|
|
+ $result->is_enabled = 1;
|
|
|
+ $result->save();
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ $this->userHasMiniprograms->create([
|
|
|
+ 'uid' => $companyId, 'miniprogram_id' => $miniprogram_id, 'is_enabled' => 1
|
|
|
+ ]);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
|
|
|
- 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]);
|
|
|
+ protected function allocationStoreCompany($miniprogram_id, $uids, $action)
|
|
|
+ {
|
|
|
+ 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){
|
|
|
+ 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){
|
|
|
+ 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
|
|
|
+ 'uid' => $value, 'miniprogram_id' => $miniprogram_id, 'is_enabled' => 1
|
|
|
]);
|
|
|
return true;
|
|
|
}
|
|
|
return false;
|
|
|
});
|
|
|
-
|
|
|
}
|
|
|
|
|
|
-
|
|
|
/**
|
|
|
* 获取投手公司和小程序的绑定关系,用于前端数据回显
|
|
|
* @param [type] $miniprogram_id
|
|
@@ -256,30 +302,31 @@ class MiniprogramController extends CatchController
|
|
|
* ]
|
|
|
*
|
|
|
*/
|
|
|
- public function getAllocationInfo($miniprogram_id){
|
|
|
+ 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']);
|
|
|
+ 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){
|
|
|
+ $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{
|
|
|
+ } 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'])){
|
|
|
+ if (!isset($group['on'])) {
|
|
|
$group['on'] = [];
|
|
|
}
|
|
|
- if(!isset($group['off'])){
|
|
|
+ if (!isset($group['off'])) {
|
|
|
$group['off'] = [];
|
|
|
}
|
|
|
$group['all'] = $result->toArray();
|