UserGoodSendController.php 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Events\ReturnGoodLog;
  4. use App\Events\SendGoodLogEvent;
  5. use App\Models\Select;
  6. use App\Models\Sell;
  7. use App\Models\SendGoodLog;
  8. use App\Models\User;
  9. use Carbon\Carbon;
  10. use Illuminate\Support\Facades\Auth;
  11. use Illuminate\Support\Facades\DB;
  12. use Illuminate\Support\Facades\Log;
  13. use Illuminate\Http\Request;
  14. use Illuminate\Support\Facades\Validator;
  15. class UserGoodSendController extends Controller{
  16. /**代理发货给下级代理**/
  17. public function user_send_good(Request $request)
  18. {
  19. $code = urldecode($request->code);
  20. $rule = [
  21. 'id' => 'required'
  22. ];
  23. $message = [
  24. 'id.required' => '缺少必填项(id)'
  25. ];
  26. $va = Validator::make($request->all(), $rule, $message);
  27. if ($va->fails()) {
  28. return $this->error(50023, '', $va->errors()->first());
  29. }
  30. DB::beginTransaction();
  31. try {
  32. $user = Auth::user();
  33. $users = User::find($user->id);
  34. if ($users->level == 1) {
  35. return $this->error(50021, '', '您是销售主管,不能进行发货操作');
  36. }
  37. $re = Select::where('code', $code)->first();
  38. if ($re->user_id != $user->id) {
  39. return $this->error(50021, '', '当前货物不是您的货物,不能使用此码进行发货');
  40. }
  41. if ($re->is_true == 1) {
  42. return $this->error(40028, '', '当前货物为假货,不能进行退货处理');
  43. }
  44. if ($re->com_binding == 1) {
  45. return $this->error(40028, '', '当前货物为没有与公司绑定,不能进行发货处理');
  46. }
  47. //先判断当前二维码能否进行发货
  48. if ($re->is_full == 1) {
  49. return $this->error(50021, '', '当前二维码中的部分货物已经发货,不能使用此码进行发货');
  50. }
  51. if ($request->id == $user->id) {
  52. return $this->error(50021, '', '不能对自己进行发货操作');
  53. }
  54. //判断当前二维码的是不是最低级
  55. if ($re->is_lowest == 1) {
  56. $re->track_status = 2;
  57. $re->user_id = $request->id;
  58. if (!$re->save()) {
  59. throw new \Exception('1');
  60. }
  61. $user_s = User::find($request->id);
  62. $data = [
  63. 'op_name' => $users->nickname,
  64. 'op_phone' => $users->mobile,
  65. 'op_id' => $users->id,
  66. 'accept_name' => $user_s->nickname,
  67. 'accept_phone' => $user_s->mobile,
  68. 'accept_id' => $user_s->id,
  69. 'type' => 0,
  70. 'select_id' => $re->id
  71. ];
  72. event(new SendGoodLogEvent($data));
  73. //修改大码和中码状态
  74. $num = $this->update_full($re->pid);
  75. if ($num == 300) {
  76. return $this->error(50021, '', '子码更改信息失败,请重新尝试发货');
  77. }
  78. } else {
  79. //中码或者大码进行发货
  80. if ($users->level != 3) {//只有代理公司能够进行扫码中码或者大码进行发货
  81. return $this->error(50021, '', '当前等级只能使用小码进行发货');
  82. }
  83. $user_s = User::find($request->id);
  84. //中码发货
  85. if ($re->level != 1) {
  86. $re->user_id = $request->id;
  87. if (!$re->save()) {
  88. throw new \Exception('1');
  89. }
  90. $num = $this->update_full($re->pid);
  91. if ($num == 300) {
  92. throw new \Exception(1);
  93. }
  94. $data = [
  95. 'op_name' => $users->nickname,
  96. 'op_phone' => $users->mobile,
  97. 'op_id' => $users->id,
  98. 'accept_name' => $user_s->nickname,
  99. 'accept_phone' => $user_s->mobile,
  100. 'accept_id' => $user_s->id,
  101. 'type' => 0,
  102. 'select_id' => $re->id
  103. ];
  104. event(new SendGoodLogEvent($data));
  105. $level_data = Select::where('pid', $re->sort)->get();
  106. foreach ($level_data as $k => $v) {
  107. $res = Select::where('code', $v->code)->first();
  108. $res->user_id = $request->id;
  109. if (!$res->save()) {
  110. throw new \Exception(1);
  111. }
  112. $data = [
  113. 'op_name' => $users->nickname,
  114. 'op_phone' => $users->mobile,
  115. 'op_id' => $users->id,
  116. 'accept_name' => $user_s->nickname,
  117. 'accept_phone' => $user_s->mobile,
  118. 'accept_id' => $user_s->id,
  119. 'type' => 0,
  120. 'select_id' => $v->id
  121. ];
  122. event(new SendGoodLogEvent($data));
  123. }
  124. } else {
  125. /***大码发货,并记录日志情况*/
  126. $re->user_id = $request->id;
  127. if (!$re->save()) {
  128. throw new \Exception('1');
  129. }
  130. $data = [
  131. 'op_name' => $users->nickname,
  132. 'op_phone' => $users->mobile,
  133. 'op_id' => $users->id,
  134. 'accept_name' => $user_s->nickname,
  135. 'accept_phone' => $user_s->mobile,
  136. 'accept_id' => $user_s->id,
  137. 'type' => 0,
  138. 'select_id' => $re->id
  139. ];
  140. event(new SendGoodLogEvent($data));
  141. /**查询下级**/
  142. $level_data = Select::where('pid', $re->sort)->get();
  143. foreach ($level_data as $k => $v) {
  144. /***修改所有下级的所属者*/
  145. $res = Select::where('code', $v->code)->first();
  146. $res->user_id = $request->id;
  147. if (!$res->save()) {
  148. throw new \Exception(1);
  149. }
  150. $data = [
  151. 'op_name' => $users->nickname,
  152. 'op_phone' => $users->mobile,
  153. 'op_id' => $users->id,
  154. 'accept_name' => $user_s->nickname,
  155. 'accept_phone' => $user_s->mobile,
  156. 'accept_id' => $user_s->id,
  157. 'type' => 0,
  158. 'select_id' => $v->id
  159. ];
  160. event(new SendGoodLogEvent($data));
  161. /**如果现在的等级不是最低级,则执行下面的内容**/
  162. if ($v->is_lowest != 1) {
  163. $ress = Select::where('pid', $v->sort)->get();
  164. foreach ($ress as $ke => $va) {
  165. $resss = Select::where('code', $va->code)->first();
  166. $resss->user_id = $request->id;
  167. if (!$resss->save()) {
  168. throw new \Exception(1);
  169. }
  170. $data = [
  171. 'op_name' => $users->nickname,
  172. 'op_phone' => $users->mobile,
  173. 'op_id' => $users->id,
  174. 'accept_name' => $user_s->nickname,
  175. 'accept_phone' => $user_s->mobile,
  176. 'accept_id' => $user_s->id,
  177. 'type' => 0,
  178. 'select_id' => $va->id
  179. ];
  180. event(new SendGoodLogEvent($data));
  181. }
  182. }
  183. }
  184. }
  185. }
  186. DB::commit();
  187. return $this->success([]);
  188. } catch (\Exception $exception) {
  189. DB::rollBack();
  190. return $this->error(50024, '', '发货失败,请重新尝试' . $exception);
  191. }
  192. }
  193. /**查询下级代理**/
  194. public function get_lower_user(Request $request)
  195. {
  196. $id = Auth::user()->id;
  197. $ids = [$id];
  198. $data = User::where('agent_id', Auth::user()->id)->pluck('id')->toArray();
  199. $user_id = array_merge($ids, $data);
  200. if ($request->has('search_name')) {
  201. $search_name = $request->search_name;
  202. $where = function ($q) use ($search_name) {
  203. $q->where('nickname', 'like', '%' . $search_name . '%')->orwhere('mobile', 'like', '%' . $search_name . '%');
  204. };
  205. $user = User::whereIn('agent_id', $user_id)->where($where)->select('mobile as phone', 'nickname', 'realname', 'id', 'headimgurl as avatar');
  206. $count = $user->get()->count();
  207. $re = $user->take(20)->skip(($request->page - 1) * 20)->get();
  208. return $this->success_list($re, '', $count);
  209. } else {
  210. $re = User::whereIn('agent_id', $user_id)->select('mobile as phone', 'nickname', 'realname', 'id', 'headimgurl as avatar');
  211. $count = $re->get()->count();
  212. $re = $re->take(20)->skip(($request->page - 1) * 20)->get();
  213. return $this->success_list($re, '', $count);
  214. }
  215. }
  216. /**代理退货**/
  217. public function user_return_good(Request $request)
  218. {
  219. $user = Auth::user();
  220. $code = urldecode($request->code);
  221. $re = Select::where('code', $code)->first();
  222. $op_user = User::find($re->user_id);
  223. if ($re) {
  224. if ($re->is_true == 1) {
  225. return $this->error(40028, '', '当前货物为假货,不能进行退货处理');
  226. }
  227. $res = $this->check_user_level($user->id, $re->user_id);
  228. if ($res['code'] == 200) {
  229. if ($re->is_lowest == 1) {
  230. $re->user_id = $user->id;
  231. $re->save();
  232. $this->update_full($re->pid);
  233. $data = [
  234. 'op_name' => $op_user->nickname,
  235. 'op_phone' => $op_user->mobile,
  236. 'op_id' => $op_user->id,
  237. 'accept_name' => $user->nickname,
  238. 'accept_phone' => $user->mobile,
  239. 'accept_id' => $user->id,
  240. 'select_id' => $re->id
  241. ];
  242. event(new ReturnGoodLog($data));
  243. } else {
  244. if ($re->level == 1) {
  245. $num = $this->is_full($re->code);
  246. if ($num == 300) {
  247. return $this->error(50024, '', '当前防伪码不能进行退货处理,请使用小码进行操作');
  248. }
  249. $re->user_id = $user->id;
  250. $re->save();
  251. $data = [
  252. 'op_name' => $op_user->nickname,
  253. 'op_phone' => $op_user->mobile,
  254. 'op_id' => $op_user->id,
  255. 'accept_name' => $user->nickname,
  256. 'accept_phone' => $user->mobile,
  257. 'accept_id' => $user->id,
  258. 'select_id' => $re->id
  259. ];
  260. event(new ReturnGoodLog($data));
  261. $lower_code = Select::where('pid', $re->sort)->get();
  262. foreach ($lower_code as $k => $v) {
  263. $ress = Select::where('code', $v->code)->first();
  264. $ress->user_id = $user->id;
  265. $ress->save();
  266. $data = [
  267. 'op_name' => $op_user->nickname,
  268. 'op_phone' => $op_user->mobile,
  269. 'op_id' => $op_user->id,
  270. 'accept_name' => $user->nickname,
  271. 'accept_phone' => $user->mobile,
  272. 'accept_id' => $user->id,
  273. 'select_id' => $v->id
  274. ];
  275. event(new ReturnGoodLog($data));
  276. if ($ress->is_lowest != 1) {
  277. $lower_codes = Select::where('pid', $v->sort)->get();
  278. foreach ($lower_codes as $ke => $va) {
  279. $resss = Select::where('code', $va->code)->first();
  280. $resss->user_id = $user->id;
  281. $resss->save();
  282. $data = [
  283. 'op_name' => $op_user->nickname,
  284. 'op_phone' => $op_user->mobile,
  285. 'op_id' => $op_user->id,
  286. 'accept_name' => $user->nickname,
  287. 'accept_phone' => $user->mobile,
  288. 'accept_id' => $user->id,
  289. 'select_id' => $va->id
  290. ];
  291. event(new ReturnGoodLog($data));
  292. }
  293. }
  294. }
  295. } else {
  296. $num = $this->is_full($re->code);
  297. if ($num == 300) {
  298. return $this->error(50024, '', '当前防伪码不能进行退货处理,请使用小码进行操作');
  299. }
  300. $re->user_id = $user->id;
  301. $re->save();
  302. $data = [
  303. 'op_name' => $op_user->nickname,
  304. 'op_phone' => $op_user->mobile,
  305. 'op_id' => $op_user->id,
  306. 'accept_name' => $user->nickname,
  307. 'accept_phone' => $user->mobile,
  308. 'accept_id' => $user->id,
  309. 'select_id' => $re->id
  310. ];
  311. event(new ReturnGoodLog($data));
  312. $this->update_full($re->pid);
  313. $lower_code = Select::where('pid', $re->sort)->get();
  314. foreach ($lower_code as $k => $v) {
  315. $ress = Select::where('code', $v->code)->first();
  316. $ress->user_id = $user->id;
  317. $ress->save();
  318. $data = [
  319. 'op_name' => $op_user->nickname,
  320. 'op_phone' => $op_user->mobile,
  321. 'op_id' => $op_user->id,
  322. 'accept_name' => $user->nickname,
  323. 'accept_phone' => $user->mobile,
  324. 'accept_id' => $user->id,
  325. 'select_id' => $v->id
  326. ];
  327. event(new ReturnGoodLog($data));
  328. }
  329. }
  330. }
  331. return $this->success([]);
  332. } else {
  333. return $this->error(40028, '', $res['message']);
  334. }
  335. } else {
  336. return $this->error(40029, '', '暂未查询到相应的信息');
  337. }
  338. }
  339. /**小码发货时更改中码和大码**/
  340. public function update_full($pid)
  341. {
  342. DB::beginTransaction();
  343. try {
  344. $re = Select::where('sort', '=', $pid)->first();
  345. $re->is_full = 1;
  346. if (!$re->save()) {
  347. throw new \Exception('1');
  348. }
  349. if ($re->level != 1) {
  350. $this->update_full($re->pid);
  351. }
  352. DB::commit();
  353. return 200;
  354. } catch (\Exception $exception) {
  355. DB::rollBack();
  356. Log::error($exception);
  357. return 300;
  358. }
  359. }
  360. /**检查用户是不是自己的下级**/
  361. public function check_user_level($id, $user_id)
  362. {
  363. if ($id == $user_id) {
  364. return ['code' => 50026, 'message' => '你不能对自己的货物进行退货操作'];
  365. }
  366. $user = User::find($user_id);
  367. if ($user->level == 3) {
  368. return ['code' => 50026, 'message' => '你不能对代理公司进行退货处理'];
  369. }
  370. if ($user->agent_id != $id) {
  371. $agent_s = User::find($user->agent_id);
  372. if ($agent_s->agnet_id != $id) {
  373. return ['code' => 50026, 'message' => '当前代理不是你的下级,不能进行退货操作'];
  374. }
  375. }
  376. return ['code' => 200];
  377. }
  378. /**检查是够已经发货**/
  379. public function is_full($code)
  380. {
  381. $re = Select::where('code', $code)->first();
  382. if ($re->is_full == 1) {
  383. return 300;
  384. }
  385. return 200;
  386. }
  387. /**展示发货商品所属信息**/
  388. public function select_send_user(Request $request){
  389. $user=Auth::user();
  390. $input=$request->all();
  391. $re=Select::where('code',$input['code'])->with(['select_user','select_good'])->first();
  392. if (empty($re)){
  393. Log::error(1);
  394. return $this->error(52119,'','暂无信息查询');
  395. }
  396. if (!$re->select_user){
  397. Log::error(2);
  398. return $this->error(52120,'','暂无代理信息');
  399. }
  400. if (!$re->select_good){
  401. Log::error(3);
  402. return $this->error(52121,'','暂无商品信息');
  403. }
  404. if ($re->user_id!=$user->id){
  405. Log::error(4);
  406. return $this->error(50021,'','当前货物不是您的货物,不能使用此码进行发货');
  407. }
  408. $time=SendGoodLog::where('select_id',$re->id)->where('accept_id',$re->user_id)->orderByDesc('created_at')->first();
  409. if ($time){
  410. $times=$time->created_at->toDateString();
  411. }else{
  412. $times=Carbon::now()->toDateString();
  413. }
  414. $data=[
  415. 'style'=>$re->select_good->good_name,
  416. 'nickname'=>$re->select_user->nickname,
  417. 'avatar'=>$re->select_user->headimgurl,
  418. 'level'=>$this->judge_level($re->select_user->level),
  419. 'phone'=>$re->select_user->mobile,
  420. 'time'=>$times
  421. ];
  422. return $this->success($data);
  423. }
  424. /**展示退货商品所属信息**/
  425. public function select_return_user(Request $request){
  426. $re=Select::where('code',$request->code)->with(['select_user','select_good'])->first();
  427. if (empty($re)){
  428. return $this->error(52121,'','暂无信息查询');
  429. }
  430. if (!$re->select_user){
  431. return $this->error(52121,'','暂无代理信息');
  432. }
  433. if (!$re->select_good){
  434. return $this->error(52121,'','暂无商品信息');
  435. }
  436. $res=$this->check_user_level(Auth::user()->id,$re->user_id);
  437. if ($res['code']!=200){
  438. return $this->error($res['code'],'',$res['message']);
  439. }
  440. $time=SendGoodLog::where('select_id',$re->id)->where('accept_id',$re->user_id)->orderByDesc('created_at')->first();
  441. $data=[
  442. 'style'=>$re->select_good->good_name,
  443. 'nickname'=>$re->select_user->nickname,
  444. 'level'=>$this->judge_level($re->select_user->level),
  445. 'phone'=>$re->select_user->mobile,
  446. 'time'=>$time->created_at->toDateString()
  447. ];
  448. return $this->success($data);
  449. }
  450. /**判断等级**/
  451. public function judge_level($status){
  452. switch ($status){
  453. case 1:
  454. $level='销售主管';
  455. break;
  456. case 2:
  457. $level='销售经理';
  458. break;
  459. case 3:
  460. $level='代理公司';
  461. break;
  462. default:
  463. $level='销售主管';
  464. break;
  465. }
  466. return $level;
  467. }
  468. public function sell(Request $request){
  469. try{
  470. $id=Auth::user()->id;
  471. $code=urldecode($request->code);
  472. DB::beginTransaction();
  473. $re=Select::where('code',$code)->first();
  474. if ($re){
  475. if ($re->is_true==1){
  476. return $this->error(50024,'','当前货物是假货不能进行零售!');
  477. }
  478. if ($re->user_id!=$id){
  479. return $this->error(50024,'','当前货物绑定的代理信息不是你!');
  480. }
  481. if ($re->is_lowest!=1){
  482. return $this->error(50024,'','零售只能使用小码进行零售!');
  483. }
  484. if ($re->is_sell!=0){
  485. return $this->error(50024,'','该商品已经零售!');
  486. }
  487. $re->is_sell=1;
  488. if (!$re->save()){
  489. throw new \Exception('1');
  490. }
  491. $res=Select::where('sort',$re->pid)->first();
  492. $res->is_full=1;
  493. if (!$res->save()){
  494. throw new \Exception('1');
  495. }
  496. if ($res->level!=1){
  497. $ress=Select::where('sort',$re->pid)->first();
  498. $ress->is_full=1;
  499. if (!$ress->save()){
  500. throw new \Exception('1');
  501. }
  502. }
  503. $sell=new Sell();
  504. $sell->select_id=$re->id;
  505. $sell->select_good_id=$re->good_select_id;
  506. $sell->user_id=$re->user_id;
  507. if (!$sell->save()){
  508. throw new \Exception('1');
  509. }
  510. }
  511. DB::commit();
  512. return $this->success([]);
  513. }catch (\Exception $exception){
  514. DB::rollBack();
  515. Log::error('零售失败,原因是'.$exception);
  516. return $this->error(50021,'','操作失败,请重试!');
  517. }
  518. }
  519. public function get_arr(Request $request){
  520. $app=app('wechat.official_account');
  521. $url='http://api.app.jiuweiyun.cn/api/gzh';
  522. $app->jssdk->setUrl($url);
  523. $arr=$app->jssdk->buildConfig(array('scanQRCode'), false);
  524. return $this->success(json_decode($arr));
  525. }
  526. }