UserMiniprogramController.php 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. <?php
  2. namespace Modules\Manage\Http\Controllers;
  3. use Log;
  4. use Illuminate\Http\Request;
  5. use Catch\Base\CatchController;
  6. use Modules\Common\Errors\Errors;
  7. use Modules\Manage\Models\Miniprogram;
  8. use Modules\User\Http\Controllers\UserTrait;
  9. use Modules\Channel\Services\User\UserService;
  10. use Modules\Channel\Models\UserHasMiniprograms;
  11. use Modules\Channel\Exceptions\ChannelBusinessException;
  12. class UserMiniprogramController extends CatchController
  13. {
  14. use UserTrait;
  15. const COMPANY_ROLE = 'company';
  16. const ADMINISTRATOR_ROLE = 'administrator';
  17. const OPTIMIZER_ROLE = 'optimizer';
  18. public function __construct(
  19. protected readonly UserHasMiniprograms $userHasMiniprograms,
  20. protected readonly Miniprogram $miniprogram
  21. )
  22. {
  23. }
  24. /**
  25. * 绑定小程序和投放公司的关系 或者投放公司把小程序分配给优化师
  26. * @param [type] $miniprogram_id
  27. * @param Request $request uid=2,3,4,5 actison=on|off on:分配,off取消分配
  28. * @return array
  29. *
  30. */
  31. public function allocationStore($miniprogram_id,Request $request)
  32. {
  33. $uid = $this->getLoginUser()->id;
  34. if(!UserService::userHasRoles($uid,[self::COMPANY_ROLE,self::ADMINISTRATOR_ROLE])){
  35. ChannelBusinessException::throwError(Errors::PARAM_EMPTY);
  36. }
  37. $uids = $request->post('uids');
  38. $action = $request->post('action');
  39. if(empty($miniprogram_id) || empty($uids) || empty($action) || !in_array($action,['on','off'])){
  40. ChannelBusinessException::throwError(Errors::PARAM_EMPTY);
  41. }
  42. $miniprogram_info = $this->miniprogram->find($miniprogram_id);
  43. if(!$miniprogram_info || $miniprogram_info->status == 0){
  44. ChannelBusinessException::throwError(Errors::MINIPROGRAM_STATUS_ERROR);
  45. }
  46. return collect(explode(',',$uids))->filter(function (int $value, int $key) use($miniprogram_id,$action){
  47. $user_access = UserService::userHasRoles($value,[self::COMPANY_ROLE,self::OPTIMIZER_ROLE]);
  48. //只能分配给投手公司或者优化师
  49. if($user_access){
  50. $result = $this->userHasMiniprograms->where('uid',$value)->where('miniprogram_id',$miniprogram_id)->first();
  51. if($action == 'off'){
  52. if($result){
  53. $result->is_enabled = 0;
  54. $result->save();
  55. }
  56. return true;
  57. }
  58. if($result){
  59. if($result->is_enabled == 0){
  60. $result->is_enabled = 1;
  61. $result->save();
  62. }
  63. return true;
  64. }
  65. $this->userHasMiniprograms->create([
  66. 'uid'=>$value,'miniprogram_id'=>$miniprogram_id,'is_enabled'=>1
  67. ]);
  68. return true;
  69. }
  70. return false;
  71. });
  72. }
  73. /**
  74. * 获取投手公司和小程序的绑定关系,用于前端数据回显
  75. * @param [type] $miniprogram_id
  76. * @return []
  77. * response = [
  78. * 'on'=>[ ['id'=>1,'username'=>'公司1','user_has_miniprogram'=>1],[] ],
  79. * 'off'=>[['id'=>1,'username'=>'公司1','user_has_miniprogram'=>0],[]],
  80. * 'all'=>[
  81. * ['id'=>1,'username'=>'公司1','user_has_miniprogram'=>1],
  82. * ['id'=>2,'username'=>'公司1','user_has_miniprogram'=>0]
  83. * ]
  84. * ]
  85. *
  86. */
  87. public function getAllocationInfo($miniprogram_id){
  88. $uid = $this->getLoginUser()->id;
  89. if(UserService::userHasRole($uid,self::ADMINISTRATOR_ROLE)){
  90. $all_company_account = UserService::listByRole(self::COMPANY_ROLE,['users.username','users.id']);
  91. }else{
  92. $all_company_account = UserService::getOptimizers($uid,['users.username','users.id']);
  93. }
  94. $result = $all_company_account->map(function ($item,$key) use($miniprogram_id) {
  95. $info = $this->userHasMiniprograms->where('uid',$item->id)->where('miniprogram_id',$miniprogram_id)->where('is_enabled',1)->count();
  96. if($info){
  97. $item->user_has_miniprogram = 1;
  98. $item->user_has_miniprogram_flag = 'on';
  99. }else{
  100. $item->user_has_miniprogram = 0;
  101. $item->user_has_miniprogram_flag = 'off';
  102. }
  103. return $item;
  104. });
  105. $group = $result->groupBy('user_has_miniprogram_flag')->toArray();
  106. if(!isset($group['on'])){
  107. $group['on'] = [];
  108. }
  109. if(!isset($group['off'])){
  110. $group['off'] = [];
  111. }
  112. $group['all'] = $result->toArray();
  113. return $group;
  114. }
  115. }