UserMiniprogramController.php 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. <?php
  2. namespace Modules\Manage\Http\Controllers;
  3. use Catch\Base\CatchController;
  4. use Illuminate\Http\Request;
  5. use Modules\Channel\Models\UserHasMiniprograms;
  6. use Modules\Channel\Services\User\UserService;
  7. use Modules\Channel\Exceptions\ChannelBusinessException;
  8. use Modules\Common\Errors\Errors;
  9. use Modules\Manage\Models\Miniprogram;
  10. use Log;
  11. class UserMiniprogramController extends CatchController
  12. {
  13. const COMPANY_ROLE = 'company';
  14. public function __construct(
  15. protected readonly UserHasMiniprograms $userHasMiniprograms,
  16. protected readonly Miniprogram $miniprogram
  17. )
  18. {
  19. }
  20. /**
  21. * 绑定小程序和投放公司的关系
  22. */
  23. public function allocationStore($miniprogram_id,Request $request)
  24. {
  25. $uids = $request->post('uids');
  26. $action = $request->post('action');
  27. if(empty($miniprogram_id) || empty($uids) || empty($action) || !in_array($action,['on','off'])){
  28. ChannelBusinessException::throwError(Errors::PARAM_EMPTY);
  29. }
  30. $miniprogram_info = $this->miniprogram->find($miniprogram_id);
  31. if(!$miniprogram_info || $miniprogram_info->status == 0){
  32. ChannelBusinessException::throwError(Errors::MINIPROGRAM_STATUS_ERROR);
  33. }
  34. return collect(explode(',',$uids))->filter(function (int $value, int $key) use($miniprogram_id,$action){
  35. $user_access = UserService::userHasRole($value,self::COMPANY_ROLE);
  36. if($user_access){
  37. $result = $this->userHasMiniprograms->where('uid',$value)->where('miniprogram_id',$miniprogram_id)->first();
  38. if($action == 'off'){
  39. if($result){
  40. $result->is_enabled = 0;
  41. $result->save();
  42. }
  43. return true;
  44. }
  45. if($result){
  46. if($result->is_enabled == 0){
  47. $result->is_enabled = 1;
  48. $result->save();
  49. }
  50. return true;
  51. }
  52. $this->userHasMiniprograms->create([
  53. 'uid'=>$value,'miniprogram_id'=>$miniprogram_id,'is_enabled'=>1
  54. ]);
  55. return true;
  56. }
  57. return false;
  58. });
  59. //return [];
  60. }
  61. /**
  62. * 获取投手公司和小程序的绑定关系
  63. *
  64. */
  65. public function getAllocationInfo($miniprogram_id){
  66. $all_company_account = UserService::listByRole(self::COMPANY_ROLE,['users.username','users.id']);
  67. $result = $all_company_account->map(function ($item,$key) use($miniprogram_id) {
  68. $info = $this->userHasMiniprograms->where('uid',$item->id)->where('miniprogram_id',$miniprogram_id)->where('is_enabled',1)->count();
  69. if($info){
  70. $item->user_has_miniprogram = 1;
  71. $item->user_has_miniprogram_flag = 'on';
  72. }else{
  73. $item->user_has_miniprogram = 0;
  74. $item->user_has_miniprogram_flag = 'off';
  75. }
  76. return $item;
  77. });
  78. $group = $result->groupBy('user_has_miniprogram_flag')->toArray();
  79. if(!isset($group['on'])){
  80. $group['on'] = [];
  81. }
  82. if(!isset($group['off'])){
  83. $group['off'] = [];
  84. }
  85. $group['all'] = $result->toArray();
  86. return $group;
  87. }
  88. }