BehaviorRepository.php 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. <?php
  2. namespace App\Repositories\Behavior;
  3. use App\Models\Behavior;
  4. use GuzzleHttp\Client;
  5. use GuzzleHttp\Exception\RequestException;
  6. use Illuminate\Support\Facades\DB;
  7. use Tymon\JWTAuth\Facades\JWTAuth;
  8. use Dingo\Api\Http\Response;
  9. use Symfony\Component\HttpKernel\Exception\HttpException;
  10. /**
  11. * Created by PhpStorm.
  12. * User: durong
  13. * Date: 2019/6/10
  14. * Time: 上午11:11
  15. */
  16. class BehaviorRepository
  17. {
  18. public function __construct(Behavior $behavior)
  19. {
  20. $this->behavior = $behavior;
  21. //初始化virus域名
  22. $this->client = new Client([
  23. 'base_uri' => config('constants.VIRUS_URL'),
  24. 'timeout' => 3
  25. ]);
  26. }
  27. public function index($request)
  28. {
  29. try {
  30. $signKey = [
  31. 'app' => config('constants.VIRUS_APP_ID')
  32. ];
  33. ksort($signKey);
  34. $signKey = urldecode(http_build_query($signKey));
  35. $sign = md5(config('constants.VIRUS_APP_SECRET') . $signKey);
  36. $response = $this->client->request('GET', 'behaviorList', [
  37. 'headers' => [
  38. 'Content-Type' => 'application/json',
  39. 'app' => config('constants.VIRUS_APP_ID'),
  40. 'sign' => $sign
  41. ]
  42. ]);
  43. $res = json_decode($response->getBody()->getContents(), true);
  44. $res = $res ? $res['behaviors'] : [];
  45. }catch (RequestException $exception){
  46. $res = [
  47. 'returnCode' => '-1',
  48. 'errMsg' => '网络超时'.$exception->getMessage()
  49. ];
  50. }
  51. //已登记行为
  52. $registered_bahavior = $this->behavior->get();
  53. $registered_bahaviors = $registered_bahavior->toArray();
  54. foreach ($registered_bahaviors as $key=>$val){
  55. $registered_bahaviors[$key]['behavior_status'] = 1;//已登记
  56. }
  57. $virus_behavior_id = array_column($registered_bahaviors,'virus_behavior_id');
  58. $new_res = [];
  59. //行为列表去重
  60. foreach ($res as $k=>$v) {
  61. if (isset($v['_id']) && !empty($virus_behavior_id)){
  62. $res[$k]['behavior_status'] = 0;//未登记
  63. if (in_array($v['_id'], $virus_behavior_id)) {
  64. unset($res[$k]);
  65. }
  66. $new_res = array_merge($res, $registered_bahaviors);
  67. }elseif (!isset($v['_id']) && $virus_behavior_id) {
  68. $new_res = $registered_bahaviors;
  69. }elseif (isset($v['_id']) && empty($virus_behavior_id)){
  70. $res[$k]['behavior_status'] = 0;//未登记
  71. $new_res = $res;
  72. }
  73. }
  74. $new_re = [];
  75. //根据行为ID筛选
  76. if (isset($request['virus_behavior_id'])){
  77. foreach ($new_res as $k=>$v){
  78. if (isset($v['virus_behavior_id']) && $v['virus_behavior_id'] != $request['virus_behavior_id']){
  79. unset($new_res[$k]);
  80. $new_re = array_merge($new_res);
  81. }elseif (isset($v['_id']) && $v['_id'] != $request['virus_behavior_id']){
  82. unset($new_res[$k]);
  83. $new_re = array_merge($new_res);
  84. }
  85. }
  86. return $new_re;
  87. }
  88. //根据行为状态(类型)筛选
  89. if (isset($request['behavior_status'])){
  90. foreach ($new_res as $kk=>$vv){
  91. if (isset($vv['behavior_status']) && $vv['behavior_status'] != $request['behavior_status']){
  92. unset($new_res[$kk]);
  93. $new_re = array_merge($new_res);
  94. }
  95. }
  96. return $new_re;
  97. }
  98. //根据绑定的动作ID筛选
  99. if (isset($request['behavior_action_id'])){
  100. foreach ($new_res as $key=>$val) {
  101. if (isset($val['behavior_action_id']) && ($val['behavior_action_id'] != $request['behavior_action_id'])) {
  102. unset($new_res[$key]);
  103. $new_re = array_merge($new_res);
  104. } elseif (!isset($val['behavior_action_id'])) {
  105. unset($new_res[$key]);
  106. $new_re = array_merge($new_res);
  107. }
  108. }
  109. return $new_re;
  110. }
  111. //根据行为名称筛选
  112. if (isset($request['name'])){
  113. foreach ($new_res as $key => $val) {
  114. if (isset($val['name']) && strpos($val['name'],$request['name']) !== false) {
  115. $new_re[] = $new_res[$key];
  116. }
  117. if (isset($val['behavior_name']) && strpos($val['behavior_name'],$request['name']) !== false ) {
  118. $new_re[] = $new_res[$key];
  119. }
  120. }
  121. return $new_re;
  122. }
  123. return $new_res;
  124. }
  125. public function create($request)
  126. {
  127. $behavior_name = $this->behavior->where(['name'=>$request['name']])->first();
  128. if($behavior_name){
  129. return Response::create([
  130. 'message' => '该行为已存在',
  131. 'status_code' => 500
  132. ]);
  133. }
  134. $data = [
  135. 'virus_behavior_id' => $request['virus_behavior_id'],
  136. 'name' => $request['name'],
  137. 'behavior_level' => $request['behavior_level'],
  138. 'behavior_cycle_type' => $request['behavior_cycle_type'],
  139. 'is_open' => 0,
  140. 'behavior_action_id' => isset($request['behavior_action_id']) ? $request['behavior_action_id'] : 0,
  141. 'behavior_cycle' => isset($request['behavior_cycle']) ? $request['behavior_cycle'] : '',
  142. 'behavior_binding_users' => isset($request['behavior_binding_users']) ? $request['behavior_binding_users'] : 0,
  143. 'physical_strength' => isset($request['physical_strength']) ? $request['physical_strength'] : '',
  144. 'rainbow_beans' => isset($request['rainbow_beans']) ? $request['rainbow_beans'] : '',
  145. 'remarks' => isset($request['remarks']) ? $request['remarks'] : '',
  146. 'behavioral_cycle_start_time' => isset($request['behavioral_cycle_start_time']) ? $request['behavioral_cycle_start_time'] : null,
  147. 'behavioral_cycle_end_time' => isset($request['behavioral_cycle_end_time']) ? $request['behavioral_cycle_end_time'] : null,
  148. 'allotted_quantity_rule' => isset($request['allotted_quantity_rule']) ? json_encode($request['allotted_quantity_rule']) : '',
  149. 'behavior_identification' => isset($request['behavior_identification']) ? $request['behavior_identification'] : '',
  150. 'trigger_times' => isset($request['trigger_times']) ? $request['trigger_times'] : 0,
  151. 'effective_trigger' => isset($request['effective_trigger']) ? $request['effective_trigger'] : 0,
  152. 'relative_series' => isset($request['relative_series']) ? $request['relative_series'] : 0,
  153. 'absolute_progression' => isset($request['absolute_progression']) ? $request['absolute_progression'] : 0,
  154. ];
  155. if (!$this->behavior->create($data)) {
  156. throw new HttpException(500, '添加失败,请重试');
  157. }
  158. }
  159. }