UserMiniprogramController.php 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  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. * @param [type] $miniprogram_id
  23. * @param Request $request uid=2,3,4,5 actison=on|off on:分配,off取消分配
  24. * @return array
  25. *
  26. */
  27. public function allocationStore($miniprogram_id,Request $request)
  28. {
  29. $uids = $request->post('uids');
  30. $action = $request->post('action');
  31. if(empty($miniprogram_id) || empty($uids) || empty($action) || !in_array($action,['on','off'])){
  32. ChannelBusinessException::throwError(Errors::PARAM_EMPTY);
  33. }
  34. $miniprogram_info = $this->miniprogram->find($miniprogram_id);
  35. if(!$miniprogram_info || $miniprogram_info->status == 0){
  36. ChannelBusinessException::throwError(Errors::MINIPROGRAM_STATUS_ERROR);
  37. }
  38. return collect(explode(',',$uids))->filter(function (int $value, int $key) use($miniprogram_id,$action){
  39. $user_access = UserService::userHasRole($value,self::COMPANY_ROLE);
  40. //只能分配给投手公司
  41. if($user_access){
  42. $result = $this->userHasMiniprograms->where('uid',$value)->where('miniprogram_id',$miniprogram_id)->first();
  43. if($action == 'off'){
  44. if($result){
  45. $result->is_enabled = 0;
  46. $result->save();
  47. }
  48. return true;
  49. }
  50. if($result){
  51. if($result->is_enabled == 0){
  52. $result->is_enabled = 1;
  53. $result->save();
  54. }
  55. return true;
  56. }
  57. $this->userHasMiniprograms->create([
  58. 'uid'=>$value,'miniprogram_id'=>$miniprogram_id,'is_enabled'=>1
  59. ]);
  60. return true;
  61. }
  62. return false;
  63. });
  64. //return [];
  65. }
  66. /**
  67. * 获取投手公司和小程序的绑定关系,用于前端数据回显
  68. * @param [type] $miniprogram_id
  69. * @return []
  70. * response = [
  71. * 'on'=>[ ['id'=>1,'username'=>'公司1','user_has_miniprogram'=>1],[] ],
  72. * 'off'=>[['id'=>1,'username'=>'公司1','user_has_miniprogram'=>0],[]],
  73. * 'all'=>[
  74. * ['id'=>1,'username'=>'公司1','user_has_miniprogram'=>1],
  75. * ['id'=>2,'username'=>'公司1','user_has_miniprogram'=>0]
  76. * ]
  77. * ]
  78. *
  79. */
  80. public function getAllocationInfo($miniprogram_id){
  81. $all_company_account = UserService::listByRole(self::COMPANY_ROLE,['users.username','users.id']);
  82. $result = $all_company_account->map(function ($item,$key) use($miniprogram_id) {
  83. $info = $this->userHasMiniprograms->where('uid',$item->id)->where('miniprogram_id',$miniprogram_id)->where('is_enabled',1)->count();
  84. if($info){
  85. $item->user_has_miniprogram = 1;
  86. $item->user_has_miniprogram_flag = 'on';
  87. }else{
  88. $item->user_has_miniprogram = 0;
  89. $item->user_has_miniprogram_flag = 'off';
  90. }
  91. return $item;
  92. });
  93. $group = $result->groupBy('user_has_miniprogram_flag')->toArray();
  94. if(!isset($group['on'])){
  95. $group['on'] = [];
  96. }
  97. if(!isset($group['off'])){
  98. $group['off'] = [];
  99. }
  100. $group['all'] = $result->toArray();
  101. return $group;
  102. }
  103. }