UserMiniprogramController.php 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  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. public function allocationStore($miniprogram_id,Request $request)
  21. {
  22. $uids = $request->post('uids');
  23. $action = $request->post('action');
  24. if(empty($miniprogram_id) || empty($uids) || empty($action) || !in_array($action,['on','off'])){
  25. ChannelBusinessException::throwError(Errors::PARAM_EMPTY);
  26. }
  27. $miniprogram_info = $this->miniprogram->find($miniprogram_id);
  28. if(!$miniprogram_info || $miniprogram_info->status == 0){
  29. ChannelBusinessException::throwError(Errors::MINIPROGRAM_STATUS_ERROR);
  30. }
  31. collect(explode(',',$uids))->filter(function (int $value, int $key) use($miniprogram_id,$action){
  32. $user_simple = UserService::getUserInfo($value,['roles.identify']);
  33. if($user_simple && $user_simple->identify == self::COMPANY_ROLE){
  34. $result = $this->userHasMiniprograms->where('uid',$value)->where('miniprogram_id',$miniprogram_id)->first();
  35. if($action == 'off'){
  36. if($result){
  37. $result->is_enabled = 0;
  38. $result->save();
  39. }
  40. return true;
  41. }
  42. if($result){
  43. if($result->is_enabled == 0){
  44. $result->is_enabled = 1;
  45. $result->save();
  46. }
  47. return true;
  48. }
  49. $this->userHasMiniprograms->create([
  50. 'uid'=>$value,'miniprogram_id'=>$miniprogram_id,'is_enabled'=>1
  51. ]);
  52. return true;
  53. }
  54. return false;
  55. });
  56. return [];
  57. }
  58. public function getAllocationInfo($miniprogram_id){
  59. $all_company_account = UserService::listByRole(self::COMPANY_ROLE,['users.username','users.id']);
  60. $result = $all_company_account->map(function ($item,$key) use($miniprogram_id) {
  61. $info = $this->userHasMiniprograms->where('uid',$item->id)->where('miniprogram_id',$miniprogram_id)->where('is_enabled',1)->count();
  62. if($info){
  63. $item->user_has_miniprogram = 1;
  64. $item->user_has_miniprogram_flag = 'on';
  65. }else{
  66. $item->user_has_miniprogram = 0;
  67. $item->user_has_miniprogram_flag = 'off';
  68. }
  69. return $item;
  70. });
  71. $group = $result->groupBy('user_has_miniprogram_flag')->toArray();
  72. if(!isset($group['on'])){
  73. $group['on'] = [];
  74. }
  75. if(!isset($group['off'])){
  76. $group['off'] = [];
  77. }
  78. $group['all'] = $result->toArray();
  79. return $group;
  80. }
  81. }