CustomerReturnController.php 61 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624
  1. <?php
  2. namespace Modules\Service\Http\Controllers;
  3. use Modules\Service\Events\CustomerSendSmsEvent;
  4. use App\Handlers\ExpressHandler;
  5. use App\Handlers\UploadFilesHandler;
  6. use App\Imports\ExpressImport;
  7. use App\Models\CustomerReturn\CustomerReturn;
  8. use App\Models\CustomerReturn\CustomerReturnDetail;
  9. use App\Models\ProblemCollection;
  10. use App\Models\StoreHouseLog;
  11. use App\Models\StoreHouseStorage;
  12. use App\Models\User;
  13. use App\Models\Warea;
  14. use App\Models\WdOrder;
  15. use App\Models\WdStore;
  16. use App\Models\WdUser;
  17. use Carbon\Carbon;
  18. use Illuminate\Http\Request;
  19. use App\Http\Controllers\Controller;
  20. use Illuminate\Support\Facades\Auth;
  21. use Illuminate\Support\Facades\DB;
  22. use Illuminate\Support\Facades\Log;
  23. use Maatwebsite\Excel\Facades\Excel;
  24. use Qiniu\Auth as Auths;
  25. use Qiniu\Storage\UploadManager;
  26. use Qiniu\Storage\BucketManager;
  27. class CustomerReturnController extends Controller
  28. {
  29. /***
  30. * _ooOoo_
  31. * o8888888o
  32. * 88" . "88
  33. * (| -_- |)
  34. * O\ = /O
  35. * ___/`---'\____
  36. * . ' \\| |// `.
  37. * / \\||| : |||// \
  38. * / _||||| -:- |||||- \
  39. * | | \\\ - /// | |
  40. * | \_| ''\---/'' | |
  41. * \ .-\__ `-` ___/-. /
  42. * ___`. .' /--.--\ `. . __
  43. * ."" '< `.___\_<|>_/___.' >'"".
  44. * | | : `- \`.;`\ _ /`;.`/ - ` : | |
  45. * \ \ `-. \_ __\ /__ _/ .-` / /
  46. * ======`-.____`-.___\_____/___.-`____.-'======
  47. * `=---='
  48. * .............................................
  49. * 佛曰:bug泛滥,我已瘫痪!
  50. */
  51. public function GetCrown(Request $request)
  52. {
  53. $user = User::where('id', $request->input('id'))->with(['agent:id,nickname,agent_id,level,warea_id'])->with(['warea'])->select('id', 'agent_id', 'level', 'nickname', 'warea_id')->first();
  54. $data = [];
  55. if ($user->level == 3) {
  56. $data['nickname'] = $user->nickname;
  57. $data['id'] = $user->id;
  58. $data['warea_name'] = $user->warea->name;
  59. } else {
  60. if ($user->agent->level == 3) {
  61. $data['nickname'] = $user->agent->nickname;
  62. $data['id'] = $user->agent->id;
  63. $data['warea_name'] = Warea::where('id', $user->agent->warea_id)->value('name');
  64. } else {
  65. $user = User::where('id', $user->agent->agent_id)->with(['warea'])->select('id', 'agent_id', 'level', 'nickname', 'warea_id')->first();
  66. $data['nickname'] = $user->nickname;
  67. $data['id'] = $user->id;
  68. $data['warea_name'] = Warea::where('id', $user->warea_id)->value('name');
  69. }
  70. }
  71. return $this->success($data);
  72. }
  73. /**客户申请表**/
  74. public function GetApplyList(Request $request)
  75. {
  76. $page_index = $request->input('page_index', 1);
  77. $page_size = $request->input('size', 15);
  78. $num = ($page_index - 1) * $page_size;
  79. $search_name = $request->input('search_name');
  80. $customer_name = $request->input('customer_name');
  81. $warea_name = $request->input('warea_name');
  82. $apply_status = $request->input('apply_status');
  83. $is_finish = $request->input('is_finish');
  84. $start_time = $request->input('start_time');
  85. $end_time = $request->input('end_time');
  86. $apply_number = $request->input('apply_number') ?? null;
  87. $re = CustomerReturn::query();
  88. if (Auth::user()->role_id == 23) {
  89. $warea_names = Warea::where('admin_id', Auth::user()->id)->value('name');
  90. $re->where('warea_name', $warea_names);
  91. }
  92. if (is_numeric($apply_status)) {
  93. $re->where('apply_status', $apply_status);
  94. }
  95. if ($start_time) {
  96. $re->whereBetween('created_at', [$start_time, $end_time]);
  97. }
  98. if (is_numeric($is_finish)) {
  99. $re->where('is_finish', $is_finish);
  100. }
  101. if ($apply_number) {
  102. $re->where('apply_number', $apply_number);
  103. }
  104. if ($warea_name) {
  105. $re->where('warea_name', $warea_name);
  106. }
  107. if ($search_name) {
  108. $re->where('user_nickname', 'like', '%' . $search_name . '%');
  109. }
  110. if ($customer_name) {
  111. $re->where('customer_name', 'like', '%' . $customer_name . '%')->orWhere('customer_phone', 'like', '%' . $customer_name . '%');
  112. }
  113. $count = $re->count();
  114. $data = $re->with(['applydetail'])->orderByDesc('id')->take($page_size)->skip($num)->get();
  115. return $this->success_list($data, '', $count);
  116. }
  117. /*客户申请**/
  118. public function Apply(Request $request, CustomerReturn $customerReturn, CustomerReturnDetail $CustomerReturnDetail)
  119. {
  120. $applyUserID = $request->input('user_id');
  121. $applyUserName = $request->input('user_nickname');
  122. $applyCrownID = $request->input('crown_id');
  123. $applyCrownName = $request->input('crown_nickname');
  124. $warea_name = $request->input('warea_name');
  125. $customer_name = $request->input('customer_name');
  126. $customer_phone = $request->input('customer_phone');
  127. $province = $request->input('province');
  128. $city = $request->input('city');
  129. $area = $request->input('area');
  130. $address = $request->input('address');
  131. $total = $request->input('total');
  132. $remark = $request->input('remark');
  133. $apply_number = $this->CreateApplyNumber();
  134. $problemList=$request->input('detail');
  135. $op_name = Auth::user()->name;
  136. $customerReturn->user_id = $applyUserID;
  137. $customerReturn->user_nickname = $applyUserName;
  138. $customerReturn->crown_id = $applyCrownID;
  139. $customerReturn->crown_nickname = $applyCrownName;
  140. $customerReturn->warea_name = $warea_name;
  141. $customerReturn->customer_name = $customer_name;
  142. $customerReturn->customer_phone = $customer_phone;
  143. $customerReturn->province = $province;
  144. $customerReturn->city = $city;
  145. $customerReturn->area = $area;
  146. $customerReturn->address = $address;
  147. $customerReturn->total = $total;
  148. $customerReturn->apply_status = 1;
  149. $customerReturn->remark = $remark;
  150. $customerReturn->apply_number = $apply_number;
  151. $customerReturn->op_name = $op_name;
  152. DB::beginTransaction();
  153. try {
  154. if (!$customerReturn->save()) {
  155. throw new \Exception('1');
  156. }
  157. $all_money=0;
  158. $all_return_money=0;
  159. foreach ($problemList as $k => $v) {
  160. $CustomerReturnDetail = new CustomerReturnDetail();
  161. $CustomerReturnDetail->customer_id = $customerReturn->id;
  162. $CustomerReturnDetail->problem_info = $v['problem_info'];
  163. $CustomerReturnDetail->good_name = $v['good_name'];
  164. $CustomerReturnDetail->good_size = $v['good_size'];
  165. // $CustomerReturnDetail->good_sex = $v['good_sex'];
  166. $CustomerReturnDetail->total = $v['total'];
  167. $CustomerReturnDetail->problem_attr = $v['problem_attr'];
  168. $CustomerReturnDetail->is_vip = $v['is_vip'];
  169. $CustomerReturnDetail->wear_time = $v['wear_time'];
  170. $CustomerReturnDetail->type = $v['type'];
  171. $CustomerReturnDetail->order_num = $v['order_num'];
  172. if ($v['good_name']=='精装版'){
  173. if ($v['is_vip']==1){
  174. $money=359;
  175. }else{
  176. $money=399;
  177. }
  178. $return_money=149;
  179. }elseif ($v['good_name']=='简约版'){
  180. if ($v['is_vip']==1){
  181. $money=154;
  182. }else{
  183. $money=169;
  184. }
  185. $return_money=79;
  186. }elseif ($v['good_name']=='高腰版'){
  187. if ($v['is_vip']==1){
  188. $money=179;
  189. }else{
  190. $money=199;
  191. }
  192. $return_money=89;
  193. }elseif ($v['good_name']=='纯棉版'){
  194. if ($v['is_vip']==1){
  195. $money=89;
  196. }else{
  197. $money=99;
  198. }
  199. $return_money=47;
  200. }elseif ($v['good_name']=='青春版'){
  201. if ($v['is_vip']==1){
  202. $money=179;
  203. }else{
  204. $money=199;
  205. }
  206. $return_money=89;
  207. }
  208. $CustomerReturnDetail->price = round(($v['total']*$money)/3,2);
  209. $CustomerReturnDetail->cost = ($money-$return_money)."/3";
  210. $CustomerReturnDetail->return_price = round(($v['total']*($money-$return_money))/3,2);
  211. $all_money+=round(($v['total']*$money)/3,2);
  212. $all_return_money+=round(($v['total']*($money-$return_money))/3,2);
  213. ///价格未计算
  214. if ($v['ImgList']) {
  215. $CustomerReturnDetail->ImgList = json_encode($v['ImgList']);
  216. }
  217. if ($v['money_info']) {
  218. $CustomerReturnDetail->money_info = json_encode($v['money_info']);
  219. }
  220. if (!$CustomerReturnDetail->save()) {
  221. throw new \Exception('1');
  222. }
  223. }
  224. $customerReturn=CustomerReturn::find($customerReturn->id);
  225. $customerReturn->price=$all_money;
  226. $customerReturn->return_price=$all_return_money;
  227. if (!$customerReturn->save()) {
  228. throw new \Exception('1');
  229. }
  230. DB::commit();
  231. return $this->success([]);
  232. } catch (\Exception $exception) {
  233. DB::rollBack();
  234. return $this->error(520014, $exception->getMessage());
  235. }
  236. }
  237. public function GetApplyLists(){
  238. $user = User::where('id','<', 100)->where('level',1)->with(['agent'])->first();
  239. dd($user);
  240. }
  241. /**修改申请单**/
  242. public function UpdateApply(Request $request)
  243. {
  244. $id = $request->input('id');
  245. $applyUserID = $request->input('user_id');
  246. $applyUserName = $request->input('user_nickname');
  247. $applyCrownID = $request->input('crown_id');
  248. $applyCrownName = $request->input('crown_nickname');
  249. $warea_name = $request->input('warea_name');
  250. $customer_name = $request->input('customer_name');
  251. $customer_phone = $request->input('customer_phone');
  252. $province = $request->input('province');
  253. $city = $request->input('city');
  254. $area = $request->input('area');
  255. $address = $request->input('address');
  256. $total = $request->input('total');
  257. $remark = $request->input('remark');
  258. $NewproblemList = $request->input('NewproblemList');
  259. $UpdateproblemList = $request->input('UpdateproblemList');
  260. $DelproblemList = $request->input('DelproblemList') ?? [];
  261. $apply_number = $this->CreateApplyNumber();
  262. $op_name = Auth::user()->name;
  263. $applyCustomer = CustomerReturn::where('id', $id)->first();
  264. $applyCustomer->user_id = $applyUserID;
  265. $applyCustomer->user_nickname = $applyUserName;
  266. $applyCustomer->crown_id = $applyCrownID;
  267. $applyCustomer->crown_nickname = $applyCrownName;
  268. $applyCustomer->warea_name = $warea_name;
  269. $applyCustomer->customer_name = $customer_name;
  270. $applyCustomer->customer_phone = $customer_phone;
  271. $applyCustomer->province = $province;
  272. $applyCustomer->city = $city;
  273. $applyCustomer->area = $area;
  274. $applyCustomer->address = $address;
  275. $applyCustomer->total = $total;
  276. $applyCustomer->remark = $remark;
  277. $applyCustomer->apply_number = $apply_number;
  278. $applyCustomer->op_name = $op_name;
  279. DB::beginTransaction();
  280. try {
  281. if (!$applyCustomer->save()) {
  282. throw new \Exception('1');
  283. }
  284. $all_money=0;
  285. $all_return_money=0;
  286. /**新增的**/
  287. foreach ($NewproblemList as $k => $v) {
  288. $CustomerReturnDetail = new CustomerReturnDetail();
  289. $CustomerReturnDetail->customer_id = $applyCustomer->id;
  290. $CustomerReturnDetail->problem_info = $v['problem_info'];
  291. $CustomerReturnDetail->good_name = $v['good_name'];
  292. $CustomerReturnDetail->good_size = $v['good_size'];
  293. // $CustomerReturnDetail->good_sex = $v['good_sex'];
  294. $CustomerReturnDetail->total = $v['total'];
  295. $CustomerReturnDetail->problem_attr = $v['problem_attr'];
  296. $CustomerReturnDetail->is_vip = $v['is_vip'];
  297. $CustomerReturnDetail->wear_time = $v['wear_time'];
  298. $CustomerReturnDetail->type = $v['type'];
  299. $CustomerReturnDetail->order_num = $v['order_num'];
  300. if ($v['good_name']=='精装版'){
  301. if ($v['is_vip']==1){
  302. $money=359;
  303. }else{
  304. $money=399;
  305. }
  306. $return_money=149;
  307. }elseif ($v['good_name']=='简约版'){
  308. if ($v['is_vip']==1){
  309. $money=154;
  310. }else{
  311. $money=169;
  312. }
  313. $return_money=79;
  314. }elseif ($v['good_name']=='高腰版'){
  315. if ($v['is_vip']==1){
  316. $money=179;
  317. }else{
  318. $money=199;
  319. }
  320. $return_money=89;
  321. }elseif ($v['good_name']=='纯棉版'){
  322. if ($v['is_vip']==1){
  323. $money=89;
  324. }else{
  325. $money=99;
  326. }
  327. $return_money=47;
  328. }elseif ($v['good_name']=='青春版'){
  329. if ($v['is_vip']==1){
  330. $money=179;
  331. }else{
  332. $money=199;
  333. }
  334. $return_money=89;
  335. }
  336. $CustomerReturnDetail->price = round(($v['total']*$money)/3,2);
  337. $CustomerReturnDetail->cost = ($money-$return_money)."/3";
  338. $CustomerReturnDetail->return_price = round(($v['total']*($money-$return_money))/3,2);
  339. $all_money+=round(($v['total']*$money)/3,2);
  340. $all_return_money+=round(($v['total']*($money-$return_money))/3,2);
  341. ///价格未计算
  342. if ($v['ImgList']) {
  343. $CustomerReturnDetail->ImgList = json_encode($v['ImgList']);
  344. }
  345. if ($v['money_info']) {
  346. $CustomerReturnDetail->money_info = json_encode($v['money_info']);
  347. }
  348. if (!$CustomerReturnDetail->save()) {
  349. throw new \Exception('1');
  350. }
  351. }
  352. /**修改的*/
  353. foreach ($UpdateproblemList as $k => $v) {
  354. $CustomerReturnDetail = CustomerReturnDetail::where('id', $v['id'])->first();
  355. $CustomerReturnDetail->problem_info = $v['problem_info'];
  356. $CustomerReturnDetail->good_name = $v['good_name'];
  357. $CustomerReturnDetail->good_size = $v['good_size'];
  358. // $CustomerReturnDetail->good_sex = $v['good_sex'];
  359. $CustomerReturnDetail->total = $v['total'];
  360. $CustomerReturnDetail->problem_attr = $v['problem_attr'];
  361. $CustomerReturnDetail->is_vip = $v['is_vip'];
  362. $CustomerReturnDetail->wear_time = $v['wear_time'];
  363. $CustomerReturnDetail->type = $v['type'];
  364. $CustomerReturnDetail->order_num = $v['order_num'];
  365. if ($v['good_name']=='精装版'){
  366. if ($v['is_vip']==1){
  367. $money=359;
  368. }else{
  369. $money=399;
  370. }
  371. $return_money=149;
  372. }elseif ($v['good_name']=='简约版'){
  373. if ($v['is_vip']==1){
  374. $money=154;
  375. }else{
  376. $money=169;
  377. }
  378. $return_money=79;
  379. }elseif ($v['good_name']=='高腰版'){
  380. if ($v['is_vip']==1){
  381. $money=179;
  382. }else{
  383. $money=199;
  384. }
  385. $return_money=89;
  386. }elseif ($v['good_name']=='纯棉版'){
  387. if ($v['is_vip']==1){
  388. $money=89;
  389. }else{
  390. $money=99;
  391. }
  392. $return_money=47;
  393. }elseif ($v['good_name']=='青春版'){
  394. if ($v['is_vip']==1){
  395. $money=179;
  396. }else{
  397. $money=199;
  398. }
  399. $return_money=89;
  400. }
  401. $CustomerReturnDetail->price = round(($v['total']*$money)/3,2);
  402. $CustomerReturnDetail->cost = ($money-$return_money)."/3";
  403. $CustomerReturnDetail->return_price = round(($v['total']*($money-$return_money))/3,2);
  404. $all_money+=round(($v['total']*$money)/3,2);
  405. $all_return_money+=round(($v['total']*($money-$return_money))/3,2);
  406. ///价格未计算
  407. if ($v['ImgList']) {
  408. $CustomerReturnDetail->ImgList = json_encode($v['ImgList']);
  409. }
  410. if ($v['money_info']) {
  411. $CustomerReturnDetail->money_info = json_encode($v['money_info']);
  412. }
  413. if (!$CustomerReturnDetail->save()) {
  414. throw new \Exception('1');
  415. }
  416. }
  417. /**删除的*/
  418. foreach ($DelproblemList as $k => $v) {
  419. $applyCustomerDetail = CustomerReturnDetail::find($v);
  420. $applyCustomerDetail->delete();
  421. }
  422. $customerReturn=CustomerReturn::find($id);
  423. $customerReturn->price=$all_money;
  424. $customerReturn->return_price=$all_return_money;
  425. if (!$customerReturn->save()) {
  426. throw new \Exception('1');
  427. }
  428. DB::commit();
  429. return $this->success([]);
  430. } catch (\Exception $exception) {
  431. DB::rollBack();
  432. return $this->error(520014, $exception->getMessage());
  433. }
  434. }
  435. /*客户退换申请单号**/
  436. public function CreateApplyNumber()
  437. {
  438. $id = Auth::user()->id;
  439. $str = 'DWBS-TH-';
  440. $string = $str . $id . substr(time(), 6, 9) . rand(1111, 9999);
  441. return $string;
  442. }
  443. /**上传订单号**/
  444. public function UploadCustomerInfo(Request $request)
  445. {
  446. $file = $request->file('file');
  447. if (!$file->isValid()) { //判断文件是否有效
  448. return redirect()
  449. ->back()
  450. ->withErrors('文件上传失败,请重新上传');
  451. }
  452. $array = Excel::toArray(new ExpressImport, request()->file('file'));
  453. if (count($array) > 5001) {
  454. return $this->error('450001', "单次最多导入5000条数据");
  455. }
  456. $one = array_shift($array[0]);
  457. $express_num_keys = array_search('快递单号', $one);
  458. if (!$express_num_keys && !is_numeric($express_num_keys)) {
  459. return $this->error('450001', "表头无'快递单号'字段");
  460. }
  461. $order_num_keys = array_search('申请单编号', $one);
  462. if (!$order_num_keys && !is_numeric($order_num_keys)) {
  463. return $this->error('450001', "表头无'申请单编号'字段");
  464. }
  465. $express_com_keys = array_search('快递公司', $one);
  466. if (!$express_com_keys) {
  467. return $this->error('450001', "表头无'快递公司'字段");
  468. }
  469. $express_code_keys = array_search('快递公司代码', $one);
  470. if (!$express_code_keys) {
  471. return $this->error('450001', "表头无'快递公司代码'字段");
  472. }
  473. $arr = $array[0];
  474. $express_nums = array_column($arr, $express_num_keys);
  475. $unique_express_nums = array_unique($express_nums);
  476. $que_express_nums = array_diff_assoc($express_nums, $unique_express_nums);
  477. if (count($que_express_nums) > 0) {
  478. $que_express_str = implode(',', $que_express_nums);
  479. return $this->error('450001', '快递单号' . $que_express_str . '重复出现');
  480. }
  481. $new_arr = [];
  482. $new_arrs = [];
  483. $z = 0;
  484. foreach ($array[0] as $k => $v) {
  485. $st = '';
  486. if ($v[$express_com_keys] == '中通快递') {
  487. $patterns = "/\d+/";
  488. preg_match_all($patterns, $v[$express_num_keys], $aa);
  489. foreach ($aa[0] as $kee => $vaa) {
  490. $st .= $vaa;
  491. }
  492. $new_arr[$z] = $st;
  493. } else {
  494. $new_arr[$z] = $v[$express_num_keys];
  495. }
  496. $new_arrs[$z] = $v[$order_num_keys];
  497. $z++;
  498. }
  499. $res = ApplyCustomer::whereIn('express_num', $new_arr)->pluck('express_num')->toArray();
  500. if (count($res) > 0) {
  501. $ar_r = array_intersect($new_arr, $res);
  502. $que_express_str = implode(',', $ar_r);
  503. return $this->error('450001', '快递单号:' . $que_express_str . '已经上传', $ar_r);
  504. }
  505. $apply_arr = ApplyCustomer::whereIn('apply_number', $new_arrs)->whereNotNull('express_num')->pluck('apply_number')->toArray();
  506. if ($apply_arr) {
  507. return $this->error(500214, implode(',', $apply_arr) . '已经上传过快递单号,请核实数据');
  508. }
  509. DB::beginTransaction();
  510. try {
  511. foreach ($arr as $k => $v) {
  512. $apply_number = $v[$order_num_keys];
  513. $apply_info = ApplyCustomer::where('apply_number', $apply_number)->first();
  514. if (!$apply_info) {
  515. return $this->error(20014, '申请单号:' . $apply_number . '不存在');
  516. }
  517. $st = '';
  518. if ($v[$express_com_keys] == '中通快递') {
  519. $patterns = "/\d+/";
  520. preg_match_all($patterns, $v[$express_num_keys], $aa);
  521. foreach ($aa[0] as $kee => $vaa) {
  522. $st .= $vaa;
  523. }
  524. $apply_info->express_num = $st;
  525. } else {
  526. $apply_info->express_num = $v[$express_num_keys];
  527. }
  528. $apply_info->express_com = $v[$express_com_keys];
  529. $apply_info->express_code = $v[$express_code_keys];
  530. $apply_info->express_time = Carbon::now();
  531. $apply_info->apply_status = 2;
  532. $apply_info->is_owe = 0;
  533. if (!$apply_info->save()) {
  534. throw new \Exception(1);
  535. }
  536. }
  537. DB::commit();
  538. /**发送 快递信息*/
  539. foreach ($arr as $k => $v) {
  540. $apply_info = ApplyCustomer::where('apply_number', $v[$order_num_keys])->first();
  541. $data = [
  542. 'mobile' => $apply_info->customer_phone,
  543. 'express_com' => $apply_info->express_com,
  544. 'express_num' => $apply_info->express_num,
  545. 'status' => 0
  546. ];
  547. event(new CustomerSendSmsEvent($data));
  548. }
  549. return $this->success([]);
  550. } catch (\Exception $exception) {
  551. DB::rollBack();
  552. return $this->error(500214, $exception->getMessage());
  553. }
  554. }
  555. /**上传单个物流信息**/
  556. public function Express(Request $request)
  557. {
  558. $re = ApplyCustomer::find($request->input('id'));
  559. $re->express_num = $request->input('express_number');
  560. $re->express_time = Carbon::now();
  561. $re->apply_status = 2;
  562. $re->is_owe = 0;
  563. $re->express_com = $request->input('express_name');
  564. $re->express_code = $request->input('express_code');
  565. $data = [
  566. 'mobile' => $re->customer_phone,
  567. 'express_com' => $re->express_com,
  568. 'express_num' => $re->express_num,
  569. 'status' => 0
  570. ];
  571. event(new CustomerSendSmsEvent($data));
  572. $re->save();
  573. return $this->success([]);
  574. }
  575. /**上传订单号**/
  576. public function UpdateCustomerInfo(Request $request)
  577. {
  578. $file = $request->file('file');
  579. if (!$file->isValid()) { //判断文件是否有效
  580. return redirect()
  581. ->back()
  582. ->withErrors('文件上传失败,请重新上传');
  583. }
  584. $array = Excel::toArray(new ExpressImport, request()->file('file'));
  585. if (count($array) > 5001) {
  586. return $this->error('450001', "单次最多导入5000条数据");
  587. }
  588. $one = array_shift($array[0]);
  589. $express_num_keys = array_search('旧快递单号', $one);
  590. if (!$express_num_keys && !is_numeric($express_num_keys)) {
  591. return $this->error('450001', "表头无'旧快递单号'字段");
  592. }
  593. $new_express_num_keys = array_search('新快递单号', $one);
  594. if (!$express_num_keys && !is_numeric($express_num_keys)) {
  595. return $this->error('450001', "表头无'新快递单号'字段");
  596. }
  597. $express_com_keys = array_search('快递公司', $one);
  598. if (!$express_com_keys) {
  599. return $this->error('450001', "表头无'快递公司'字段");
  600. }
  601. $express_code_keys = array_search('快递公司代码', $one);
  602. if (!$express_code_keys) {
  603. return $this->error('450001', "表头无'快递公司代码'字段");
  604. }
  605. $arr = $array[0];
  606. $express_nums = array_column($arr, $express_num_keys);
  607. $unique_express_nums = array_unique($express_nums);
  608. $que_express_nums = array_diff_assoc($express_nums, $unique_express_nums);
  609. if (count($que_express_nums) > 0) {
  610. $que_express_str = implode(',', $que_express_nums);
  611. return $this->error('450001', '快递单号' . $que_express_str . '重复出现');
  612. }
  613. DB::beginTransaction();
  614. try {
  615. foreach ($arr as $k => $v) {
  616. $apply_info = ApplyCustomer::where('express_num', $v[$express_num_keys])->first();
  617. if (!$apply_info) {
  618. return $this->error(20014, '申请单号:' . $v[$express_num_keys] . '不存在');
  619. }
  620. $st = '';
  621. if ($v[$express_com_keys] == '中通快递') {
  622. $patterns = "/\d+/";
  623. preg_match_all($patterns, $v[$new_express_num_keys], $aa);
  624. foreach ($aa[0] as $kee => $vaa) {
  625. $st .= $vaa;
  626. }
  627. $apply_info->express_num = $st;
  628. } else {
  629. $apply_info->express_num = $v[$new_express_num_keys];
  630. }
  631. $apply_info->express_com = $v[$express_com_keys];
  632. $apply_info->express_code = $v[$express_code_keys];
  633. $apply_info->express_time = Carbon::now();
  634. $apply_info->apply_status = 2;
  635. $apply_info->is_owe = 0;
  636. if (!$apply_info->save()) {
  637. throw new \Exception(1);
  638. }
  639. }
  640. DB::commit();
  641. /**发送 快递信息*/
  642. foreach ($arr as $k => $v) {
  643. $apply_info = ApplyCustomer::where('express_num', $v[$new_express_num_keys])->first();
  644. $data = [
  645. 'mobile' => $apply_info->customer_phone,
  646. 'express_com' => $apply_info->express_com,
  647. 'express_num' => $apply_info->express_num,
  648. 'status' => 1,
  649. 'old_express_num' => $v[$express_num_keys]
  650. ];
  651. try {
  652. event(new CustomerSendSmsEvent($data));
  653. } catch (\Exception $exception) {
  654. }
  655. }
  656. return $this->success([]);
  657. } catch (\Exception $exception) {
  658. DB::rollBack();
  659. return $this->error(500214, $exception->getMessage());
  660. }
  661. }
  662. /**添加退货原因**/
  663. public function AddProblemCollection(Request $request, ProblemCollection $problemCollection)
  664. {
  665. $problem = $request->input('problem');
  666. $problem_id = $request->input('problem_id', 0);
  667. $problemCollection->problem = $problem;
  668. $problemCollection->type = 2;
  669. $problemCollection->problem_id = $problem_id;
  670. $problemCollection->save();
  671. return $this->success([]);
  672. }
  673. public function GetProblemCollection(Request $request)
  674. {
  675. $type = $request->input('type') ?? 2;
  676. $re = ProblemCollection::where('type', $type)->with(['children' => function ($q) {
  677. $q->select('problem as label', 'id as value', 'problem_id');
  678. }])->where('problem_id', 0)->select('problem as label', 'id as value', 'problem_id')->orderByDesc('created_at')->get();
  679. return $this->success($re);
  680. }
  681. public function GetGoodNum()
  682. {
  683. $re = StoreHouseStorage::groupBy('good_name')->with(['GetGood'])->select('*')->get();
  684. return $this->success($re);
  685. }
  686. /**添加退货原因**/
  687. public function AddLabelCollection(Request $request, ProblemCollection $problemCollection)
  688. {
  689. $problem = $request->input('label');
  690. $problemCollection->problem = $problem;
  691. $problemCollection->type = 2;
  692. $problemCollection->save();
  693. return $this->success([]);
  694. }
  695. public function GetLabelCollection(Request $request)
  696. {
  697. $type = $request->input('type') ?? 2;
  698. $re = ProblemCollection::where('type', $type)->where('type', $type)->select('problem as label', 'id')->orderByDesc('created_at')->get();
  699. return $this->success($re);
  700. }
  701. /**问题统计分析**/
  702. public function ProblemAnalyse(Request $request)
  703. {
  704. $start_time = $request->input('start_time');
  705. $end_time = $request->input('end_time');
  706. $re = ApplyCustomerDetail::query();
  707. if ($start_time && $end_time) {
  708. $re->whereBetween('created_at', [$start_time, $end_time]);
  709. }
  710. $re = $re->groupBy('problem_info')->select('problem_info', DB::raw('sum(total) as total'))->get();
  711. return $this->success($re);
  712. }
  713. /**战区调换数量统计**/
  714. public function WareaProblemAnalyse(Request $request)
  715. {
  716. $start_time = $request->input('start_time');
  717. $end_time = $request->input('end_time');
  718. $re = ApplyCustomer::query();
  719. if ($start_time && $end_time) {
  720. $re->whereBetween('created_at', [$start_time, $end_time]);
  721. }
  722. $re = $re->groupBy('warea_name')->select('warea_name', DB::raw('sum(total) as total'))->get();
  723. return $this->success($re);
  724. }
  725. /**代理公司调换数量统计**/
  726. public function CrownProblemAnalyse(Request $request)
  727. {
  728. $start_time = $request->input('start_time');
  729. $end_time = $request->input('end_time');
  730. $re = ApplyCustomer::query();
  731. if ($start_time && $end_time) {
  732. $re->whereBetween('created_at', [$start_time, $end_time]);
  733. }
  734. $re = $re->groupBy('apply_crown_id')->select('apply_crown_nickname', 'apply_crown_id', DB::raw('sum(total) as total'))->get();
  735. return $this->success($re);
  736. }
  737. /**战区调换数量统计**/
  738. public function WareaProblemAnalyseOnlyOne(Request $request)
  739. {
  740. $start_time = $request->input('start_time');
  741. $end_time = $request->input('end_time');
  742. $warea_name = $request->input('warea_name');
  743. $re = ApplyCustomerDetail::query();
  744. $ids = ApplyCustomer::where('warea_name', $warea_name);
  745. if ($start_time && $end_time) {
  746. $ids->whereBetween('created_at', [$start_time, $end_time]);
  747. }
  748. $ids = $ids->pluck('id');
  749. $re = $re->whereIn('customer_id', $ids)->groupBy('problem_info')->select('problem_info', DB::raw('sum(total) as total'))->get();
  750. return $this->success($re);
  751. }
  752. /**代理公司调换数量统计**/
  753. public function CrownProblemAnalyseOnlyOne(Request $request)
  754. {
  755. $start_time = $request->input('start_time');
  756. $end_time = $request->input('end_time');
  757. $search_id = $request->input('search_id');
  758. $re = ApplyCustomerDetail::query();
  759. $ids = ApplyCustomer::where('apply_crown_id', $search_id);
  760. if ($start_time && $end_time) {
  761. $ids->whereBetween('created_at', [$start_time, $end_time]);
  762. }
  763. $ids = $ids->pluck('id');
  764. $re = $re->whereIn('customer_id', $ids)->groupBy('problem_info')->select('problem_info', DB::raw('sum(total) as total'))->get();
  765. return $this->success($re);
  766. }
  767. /**获取物流轨迹**/
  768. public function ExpressSearch(Request $request, ExpressHandler $expressHandler)
  769. {
  770. $express = CustomerReturn::find($request->id);
  771. if (!$express) {
  772. return $this->error(40011, '', '该物流订单不存在');
  773. }
  774. if ($express->express_status == 1) {
  775. return $this->success(json_decode($express->express_data));
  776. } else {
  777. $re = $expressHandler->search($express->express_num, $express->express_code);
  778. $re = (array)$re;
  779. if ($re['State'] == 3) {
  780. DB::beginTransaction();
  781. try {
  782. $express->express_data = json_encode($re);
  783. $express->express_status = 1;
  784. $express->save();
  785. DB::commit();
  786. } catch (\Exception $exception) {
  787. Log::error('-------物流信息保存出错--------' . $exception);
  788. DB::rollBack();
  789. }
  790. }
  791. return $this->success($re);
  792. }
  793. }
  794. /*导出申请单**/
  795. // public function ExportApplyList(Request $request){
  796. // $search_name=$request->input('search_name');
  797. // $customer_name=$request->input('customer_name');
  798. // $warea_name=$request->input('warea_name');
  799. // $apply_status=$request->input('apply_status');
  800. // $is_finish=$request->input('is_finish');
  801. // $re=ApplyCustomer::query();
  802. //
  803. // if (is_numeric($apply_status)){
  804. // $re->where('apply_status',$apply_status);
  805. // }
  806. // if (is_numeric($is_finish)){
  807. // $re->where('is_finish',$is_finish);
  808. // }
  809. //
  810. // if ($warea_name){
  811. // $re->where('warea_name',$warea_name);
  812. // }
  813. // if ($search_name){
  814. // $re->where('apply_user_nickname','like',"$search_name");
  815. // }
  816. // if ($customer_name){
  817. // $re->where('customer_name','like',"$customer_name")->orWhere('customer_phone','like',"$customer_name");
  818. // }
  819. // $data=$re->where('audit_status',1)->with(['applydetail'])->orderByDesc('id')->get();
  820. // return $this->success($data);
  821. // }
  822. /**毛毛审核**/
  823. public function AuditApplyList(Request $request)
  824. {
  825. $ids = $request->input('id');
  826. ApplyCustomer::whereIn('id', $ids)->update(['audit_status' => 1]);
  827. return $this->success([]);
  828. }
  829. /*退回审核**/
  830. public function AuditBackApply(Request $request)
  831. {
  832. $id = $request->input('id');
  833. ApplyCustomer::where('id', $id)->update(['audit_status' => 0]);
  834. return $this->success([]);
  835. }
  836. /*导出申请单**/
  837. public function ExportApplyLists(Request $request)
  838. {
  839. $search_name = $request->input('search_name');
  840. $customer_name = $request->input('customer_name');
  841. $warea_name = $request->input('warea_name');
  842. $apply_status = $request->input('apply_status');
  843. $is_finish = $request->input('is_finish');
  844. $start_time = $request->input('start_time') ?? null;
  845. $end_time = $request->input('end_time');
  846. $re = CustomerReturn::query();
  847. if (is_numeric($apply_status)) {
  848. $re->where('apply_status', $apply_status);
  849. }
  850. if (is_numeric($is_finish)) {
  851. $re->where('is_finish', $is_finish);
  852. }
  853. if ($warea_name) {
  854. $re->where('warea_name', $warea_name);
  855. }
  856. if ($search_name) {
  857. $re->where('user_nickname', 'like', "$search_name");
  858. }
  859. if ($customer_name) {
  860. $re->where('customer_name', 'like', "$customer_name")->orWhere('customer_phone', 'like', "$customer_name");
  861. }
  862. if (Auth::user()->role_id == 23) {
  863. $warea_names = Warea::where('admin_id', Auth::user()->id)->value('name');
  864. $re->where('warea_name', $warea_names);
  865. }
  866. if ($start_time) {
  867. $re->whereBetween('created_at', [$start_time, $end_time]);
  868. }
  869. /**只能导出已经审核的申请表**/
  870. $data = $re->with(['applydetail'])->orderByDesc('id')->get();
  871. $arr = [
  872. '男款-L' => '男L',
  873. '男款-XL' => '男XL',
  874. '男款-XXL' => '男XXL',
  875. '男款-3XL' => '男3XL',
  876. '男款-4XL' => '男4XL',
  877. '女款-M' => '女M',
  878. '女款-L' => '女L',
  879. '女款-XL' => '女XL',
  880. '女款-XXL' => '女XXL',
  881. '女款-3XL' => '女3XL',
  882. '女款-4XL' => '女4XL',
  883. '男款-5XL' => '男5XL'
  884. ];
  885. // $a=["L" => null,"XL" => null,"XXL" => null, "XXXL" => null, "女M" => null, "女L" => null, "女XL" => null, "女XXL" => null, "女XXXL" => null, "女4XL" => null, "5XL" => null];
  886. // $arrs=array_keys($arr);
  887. $res = [];
  888. foreach ($data as $k => $v) {
  889. $res[$k]['退货单号'] = $v->apply_number;
  890. $res[$k]['政委'] = $v->op_name;
  891. $res[$k]['代理公司'] = $v->crown_nickname;
  892. $res[$k]['所属代理'] = $v->user_nickname;
  893. $res[$k]['顾客'] = $v->customer_name;
  894. $res[$k]['顾客手机号'] = $v->customer_phone;
  895. $res[$k]['省份'] = $v->province;
  896. $res[$k]['城市'] = $v->city;
  897. $res[$k]['地区'] = $v->area;
  898. $res[$k]['详细地址'] = $v->address;
  899. $res[$k]['总数量'] = $v->total;
  900. $res[$k]['登记时间'] = $v->created_at->toDateTimeString();
  901. $res[$k]['退货原因'] = '';
  902. $res[$k]['男款'] = 0;
  903. $res[$k]['女款'] = 0;
  904. $res[$k]['男L'] = '';
  905. $res[$k]['男XL'] = '';
  906. $res[$k]['男XXL'] = '';
  907. $res[$k]['男3XL'] = '';
  908. $res[$k]['男4XL'] = '';
  909. $res[$k]['女M'] = '';
  910. $res[$k]['女L'] = '';
  911. $res[$k]['女XL'] = '';
  912. $res[$k]['女XXL'] = '';
  913. $res[$k]['女3XL'] = '';
  914. $res[$k]['女4XL'] = '';
  915. $res[$k]['男5XL'] = '';
  916. $res[$k]['备注'] = $v->remark ?? '退';
  917. $res[$k]['款式'] = '';
  918. $arrs = [];
  919. foreach ($v->applydetail as $ke => $va) {
  920. if ($ke == 0) {
  921. $res[$k]['款式'] = $va->good_name;
  922. } else {
  923. $good = $va->good_name;
  924. if ($good != $res[$k]['款式']) {
  925. $res[$k]['款式'] = '杂';
  926. }
  927. }
  928. if (isset($arrs[$va->good_name])) {
  929. $size_arr = array_column($arrs[$va->good_name], 'good_size');
  930. if (in_array($va->good_size, $size_arr)) {
  931. foreach ($arrs[$va->real_change_good] as $kes => $vals) {
  932. if ($vals['size'] == $va->good_size) {
  933. $arrs[$va->good_name][$kes]['total'] += $va->totals;
  934. }
  935. }
  936. } else {
  937. $arrs[$va->good_name][] = ['total' => $va->total, 'size' => $va->good_size, 'customer_id' => $va->customer_id];
  938. }
  939. } else {
  940. $arrs[$va->good_name][] = ['total' => $va->total, 'size' => $va->good_size, 'customer_id' => $va->customer_id];
  941. }
  942. $sex = strpos($va->real_change_size, '男');
  943. if (is_numeric($sex)) {
  944. $res[$k]['男款'] += $va->total;
  945. } else {
  946. $res[$k]['女款'] += $va->total;
  947. }
  948. $res[$k]['退货原因'] .= $va->problem_info . ',';
  949. }
  950. $res[$k]['arrs'] = $arrs;
  951. foreach ($arrs as $ke => $vas) {
  952. $nu = strpos($ke, '棉');
  953. foreach ($vas as $kes => $val) {
  954. if (is_numeric($nu)) {
  955. $res[$k][$arr[$val['size']]] .= $val['total'] . '条棉';
  956. } else {
  957. $res[$k][$arr[$val['size']]] .= $val['total'] . '条' . mb_substr($ke, 0, 1);
  958. }
  959. }
  960. }
  961. }
  962. return $this->success($res);
  963. }
  964. /**异常统计*/
  965. public function GetExceptionList(Request $request)
  966. {
  967. $start_time = $request->input('start_time');
  968. $end_time = $request->input('end_time');
  969. $page_index = $request->input('page_index');
  970. $page_size = $request->input('page_size');
  971. $type = $request->input('type') ?? 1;
  972. $num = ($page_index - 1) * $page_size;
  973. $re = ApplyCustomer::query();
  974. if ($start_time) {
  975. $re->whereBetween('created_at', [$start_time, $end_time]);
  976. }
  977. if (Auth::user()->role_id == 23) {
  978. $warea_names = Warea::where('admin_id', Auth::user()->id)->value('name');
  979. $re->where('warea_name', $warea_names);
  980. }
  981. if ($type == 0) {
  982. $re = $re->groupBy('customer_phone')
  983. ->select('*', DB::raw('sum(total) as totals'))
  984. ->having('totals', '>=', 2);
  985. $res = clone $re;
  986. $res = $res->get();
  987. $count = count($res);
  988. } else {
  989. $re->whereNotNull('express_time')->where('express_status', 0)
  990. ->where('express_time', '<', Carbon::now()->addDays(-4))
  991. ->select('*');
  992. $count = $re->count();
  993. }
  994. $list = $re->take($page_size)->skip($num)->get();
  995. return $this->success_list($list, '', $count);
  996. }
  997. public function GetExceptionExpressList(Request $request)
  998. {
  999. $start_time = $request->input('start_time');
  1000. $end_time = $request->input('end_time');
  1001. $page_index = $request->input('page_index');
  1002. $page_size = $request->input('page_size');
  1003. $num = ($page_index - 1) * $page_size;
  1004. $re = ApplyCustomer::query();
  1005. if ($start_time) {
  1006. $re->whereBetween('created_at', [$start_time, $end_time]);
  1007. }
  1008. if (Auth::user()->role_id == 23) {
  1009. $warea_names = Warea::where('admin_id', Auth::user()->id)->value('name');
  1010. $re->where('warea_name', $warea_names);
  1011. }
  1012. $re = $re->whereNotNull('express_time')->where('express_status', 0)
  1013. ->where('express_time', '<', Carbon::now()->addDays(-4))->groupBy('customer_phone')
  1014. ->select('*');
  1015. $count = $re->count();
  1016. $list = $re->take($page_size)->skip($num)->get();
  1017. return $this->success_list($list, '', $count);
  1018. }
  1019. /**更新状态**/
  1020. public function UpdateApplyInfos(Request $request)
  1021. {
  1022. $file = $request->file('file');
  1023. if (!$file->isValid()) { //判断文件是否有效
  1024. return redirect()
  1025. ->back()
  1026. ->withErrors('文件上传失败,请重新上传');
  1027. }
  1028. $array = Excel::toArray(new ExpressImport, request()->file('file'));
  1029. if (count($array) > 10001) {
  1030. return $this->error('450001', "单次最多导入10000条数据");
  1031. }
  1032. $one = array_shift($array[0]);
  1033. $express_num_keys = array_search('快递单号', $one);
  1034. if (!$express_num_keys && !is_numeric($express_num_keys)) {
  1035. return $this->error('450001', "表头无'快递单号'字段");
  1036. }
  1037. $arr = array_column($array[0], $express_num_keys);
  1038. }
  1039. /**标记为欠货**/
  1040. public function TagOwe(Request $request)
  1041. {
  1042. $ids = $request->input('id');
  1043. ApplyCustomer::whereIn('id', $ids)->update(['is_owe' => 1]);
  1044. return $this->success([]);
  1045. }
  1046. /**取消标记为欠货**/
  1047. public function CancelTagOwe(Request $request)
  1048. {
  1049. $ids = $request->input('id');
  1050. ApplyCustomer::whereIn('id', $ids)->update(['is_owe' => 0]);
  1051. return $this->success([]);
  1052. }
  1053. /**校验是否有重复的*/
  1054. public function CheckRepeatInfo(Request $request)
  1055. {
  1056. $customer_phone = $request->input('customer_phone');
  1057. $customer_name = $request->input('customer_name');
  1058. $time = Carbon::now()->addDays(-6);
  1059. $count = ApplyCustomer::where('customer_phone', $customer_phone)
  1060. ->where('customer_name', $customer_name)
  1061. ->where('created_at', '>', $time)
  1062. ->count();
  1063. if ($count > 0) {
  1064. return $this->success(['status' => 1]);
  1065. }
  1066. return $this->success(['status' => 0]);
  1067. }
  1068. /*
  1069. * 删除申请
  1070. * **/
  1071. public function DelApplyCustomer(Request $request)
  1072. {
  1073. $id = $request->input('id');
  1074. // $CustomerApply=ApplyCustomer::find($id);
  1075. $ApplyDetail = ApplyCustomerDetail::where('customer_id', $id)->get();
  1076. foreach ($ApplyDetail as $k => $v) {
  1077. $re = StoreHouseStorage::where('good_name', $v->real_change_good)
  1078. ->where('size', $v->real_change_size)
  1079. ->lockForUpdate()
  1080. ->first();
  1081. $re->storage += $v->total;
  1082. $re->save();
  1083. ApplyCustomerDetail::where('id', $v->id)->delete();
  1084. }
  1085. ApplyCustomer::where('id', $id)->delete();
  1086. return $this->success([]);
  1087. }
  1088. /*
  1089. * 获取该代理下所有的退货人信息
  1090. * **/
  1091. public function GetCustomerInfo(Request $request)
  1092. {
  1093. $user_id = $request->input('user_id');
  1094. $re = ApplyCustomer::where('apply_user_id', $user_id)->with(['applydetail'])->get();
  1095. return $this->success($re);
  1096. }
  1097. /*
  1098. * 手动签收
  1099. * ***/
  1100. public function Receipt(Request $request)
  1101. {
  1102. $re = ApplyCustomer::where('id', $request->input('id'))->first();
  1103. $re->express_status = 1;
  1104. $re->remark = $re->remark . '**' . Auth::user()->name . '主动签收了改退货单';
  1105. $re->save();
  1106. return $this->success([]);
  1107. }
  1108. public function ExportApplyListss(Request $request)
  1109. {
  1110. $search_name = $request->input('search_name');
  1111. $customer_name = $request->input('customer_name');
  1112. $warea_name = $request->input('warea_name');
  1113. $apply_status = $request->input('apply_status');
  1114. $is_finish = $request->input('is_finish');
  1115. $start_time = $request->input('start_time') ?? null;
  1116. $end_time = $request->input('end_time');
  1117. $re = ApplyCustomer::query();
  1118. if (is_numeric($apply_status)) {
  1119. $re->where('apply_status', $apply_status);
  1120. }
  1121. if (is_numeric($is_finish)) {
  1122. $re->where('is_finish', $is_finish);
  1123. }
  1124. if ($warea_name) {
  1125. $re->where('warea_name', $warea_name);
  1126. }
  1127. if ($search_name) {
  1128. $re->where('apply_user_nickname', 'like', "$search_name");
  1129. }
  1130. if ($customer_name) {
  1131. $re->where('customer_name', 'like', "$customer_name")->orWhere('customer_phone', 'like', "$customer_name");
  1132. }
  1133. if ($start_time) {
  1134. $re->whereBetween('created_at', [$start_time, $end_time]);
  1135. }
  1136. /**只能导出已经审核的申请表**/
  1137. $data = $re->with(['applydetail' => function ($q) {
  1138. $q->select('id', 'real_change_good', 'real_change_size', 'total as totals', 'customer_id', 'problem_info');
  1139. }, 'applydetails' => function ($q) {
  1140. $q->select('id', 'real_change_good', 'real_change_size', 'total as totals', 'customer_id', 'problem_info')->groupBy('real_change_good');
  1141. }])->orderByDesc('id')->get();
  1142. $arr = [
  1143. '男款-L' => '男L',
  1144. '男款-XL' => '男XL',
  1145. '男款-XXL' => '男XXL',
  1146. '男款-3XL' => '男3XL',
  1147. '男款-4XL' => '男4XL',
  1148. '女款-M' => '女M',
  1149. '女款-L' => '女L',
  1150. '女款-XL' => '女XL',
  1151. '女款-XXL' => '女XXL',
  1152. '女款-3XL' => '女3XL',
  1153. '女款-4XL' => '女4XL',
  1154. '男款-5XL' => '男5XL'
  1155. ];
  1156. // $a=["L" => null,"XL" => null,"XXL" => null, "XXXL" => null, "女M" => null, "女L" => null, "女XL" => null, "女XXL" => null, "女XXXL" => null, "女4XL" => null, "5XL" => null];
  1157. // $arrs=array_keys($arr);
  1158. $res = [];
  1159. foreach ($data as $k => $v) {
  1160. $res[$k]['调换单号'] = $v->apply_number;
  1161. $res[$k]['政委'] = $v->op_name;
  1162. $res[$k]['代理公司'] = $v->apply_crown_nickname;
  1163. $res[$k]['申请代理'] = $v->apply_user_nickname;
  1164. $res[$k]['收货人'] = $v->customer_name;
  1165. $res[$k]['收货手机号'] = $v->customer_phone;
  1166. $res[$k]['省份'] = $v->province;
  1167. $res[$k]['城市'] = $v->city;
  1168. $res[$k]['地区'] = $v->area;
  1169. $res[$k]['详细地址'] = $v->address;
  1170. $res[$k]['总数量'] = $v->total;
  1171. $res[$k]['穿着时间'] = $v->wear_time;
  1172. $res[$k]['登记时间'] = $v->created_at->toDateTimeString();
  1173. $res[$k]['调换原因'] = '';
  1174. $res[$k]['男款'] = 0;
  1175. $res[$k]['女款'] = 0;
  1176. $res[$k]['男L'] = '';
  1177. $res[$k]['男XL'] = '';
  1178. $res[$k]['男XXL'] = '';
  1179. $res[$k]['男3XL'] = '';
  1180. $res[$k]['男4XL'] = '';
  1181. $res[$k]['女M'] = '';
  1182. $res[$k]['女L'] = '';
  1183. $res[$k]['女XL'] = '';
  1184. $res[$k]['女XXL'] = '';
  1185. $res[$k]['女3XL'] = '';
  1186. $res[$k]['女4XL'] = '';
  1187. $res[$k]['男5XL'] = '';
  1188. $res[$k]['备注'] = $v->remark ?? '调';
  1189. $res[$k]['款式'] = '';
  1190. $arrs = [];
  1191. foreach ($v->applydetail as $ke => $va) {
  1192. if ($ke == 0) {
  1193. $res[$k]['款式'] = $va->real_change_good;
  1194. } else {
  1195. $good = $va->real_change_good;
  1196. if ($good != $res[$k]['款式']) {
  1197. $res[$k]['款式'] = '杂';
  1198. }
  1199. }
  1200. if (isset($arrs[$va->real_change_good])) {
  1201. $size_arr = array_column($arrs[$va->real_change_good], 'size');
  1202. if (in_array($va->real_change_size, $size_arr)) {
  1203. foreach ($arrs[$va->real_change_good] as $kes => $vals) {
  1204. if ($vals['size'] == $va->real_change_size) {
  1205. $arrs[$va->real_change_good][$kes]['total'] += $va->totals;
  1206. }
  1207. }
  1208. } else {
  1209. $arrs[$va->real_change_good][] = ['total' => $va->totals, 'size' => $va->real_change_size, 'customer_id' => $va->customer_id];
  1210. }
  1211. } else {
  1212. $arrs[$va->real_change_good][] = ['total' => $va->totals, 'size' => $va->real_change_size, 'customer_id' => $va->customer_id];
  1213. }
  1214. dump($arrs);
  1215. // $arrs[$va->real_change_good]=['total'=>$va->total,''];
  1216. $sex = strpos($va->real_change_size, '男');
  1217. if (is_numeric($sex)) {
  1218. $res[$k]['男款'] += $va->totals;
  1219. } else {
  1220. $res[$k]['女款'] += $va->totals;
  1221. }
  1222. $res[$k]['调换原因'] .= $va->problem_info . ',';
  1223. }
  1224. foreach ($arrs as $ke => $vas) {
  1225. $nu = strpos($ke, '棉');
  1226. foreach ($vas as $kes => $val) {
  1227. if (is_numeric($nu)) {
  1228. $res[$k][$arr[$val['size']]] .= $val['total'] . '条棉';
  1229. } else {
  1230. $res[$k][$arr[$val['size']]] .= $val['total'] . '条' . mb_substr($ke, 0, 1);
  1231. }
  1232. }
  1233. }
  1234. $res[$k]['arr'] = $arrs;
  1235. }
  1236. return $this->success($res);
  1237. }
  1238. /*
  1239. * 政委登记物流
  1240. * **/
  1241. public function UploadReturnExpressInfo(Request $request){
  1242. $data=$request->all();
  1243. $customser=CustomerReturn::where('id',$data['id'])->first();
  1244. $customser->express_num=$data['express_num'];
  1245. $customser->express_com=$data['express_com'];
  1246. $customser->apply_status=2;
  1247. $customser->save();
  1248. return $this->success([]);
  1249. }
  1250. /*
  1251. * 政委登记
  1252. * **/
  1253. public function UploadReturnInfo(Request $request){
  1254. $data=$request->all();
  1255. $customser=CustomerReturn::where('id',$data['id'])->first();
  1256. $customser->sendback_imgList=$data['imgurl'];
  1257. $customser->sendback_time=$data['sendback_time'];
  1258. $customser->apply_status=3;
  1259. $customser->save();
  1260. return $this->success([]);
  1261. }
  1262. /*
  1263. * 政委登记
  1264. * **/
  1265. public function UploadCrownReturnInfo(Request $request){
  1266. $data=$request->all();
  1267. $customser=CustomerReturn::where('id',$data['id'])->first();
  1268. $customser->crown_img=$data['crown_img'];
  1269. $customser->crown_time=$data['crown_time'];
  1270. $customser->fact_money=$data['fact_money'];
  1271. $customser->factList=$data['factList'];
  1272. $customser->fact_log=$data['fact_log'];
  1273. $customser->apply_status=4;
  1274. $customser->is_finish=1;
  1275. $customser->save();
  1276. return $this->success([]);
  1277. }
  1278. /**获取历史信息**/
  1279. public function GetHistory(Request $request){
  1280. $data=$request->all();
  1281. if ($data['status']==0){
  1282. // $name='test_456';
  1283. $name=Auth::user()->name;
  1284. $num=CustomerReturn::where('customer_phone',$data['phone'])->where('op_name','<>',$name)->first();
  1285. if ($num){
  1286. return $this->error(500214,'该顾客在政委'.$num->op_name.'退过货');
  1287. }
  1288. }
  1289. $total=CustomerReturn::where('customer_phone',$data['phone'])->sum('total');
  1290. $info=CustomerReturn::where('customer_phone',$data['phone'])->orderBy('created_at')->first();
  1291. $day='';
  1292. if ($info){
  1293. $day=Carbon::parse($info->created_at)->diffInDays();
  1294. if ($day>32){
  1295. $day=Carbon::parse($info->created_at)->diffInMonths();
  1296. if ($day>12){
  1297. $day=Carbon::parse($info->created_at)->diffInYears();
  1298. $day=$day.'年';
  1299. }else{
  1300. $day=$day.'月';
  1301. }
  1302. }else{
  1303. $day=$day.'天';
  1304. }
  1305. }
  1306. return $this->success(['total'=>$total,'time'=>$day]);
  1307. }
  1308. /**获取微店关联信息**/
  1309. public function GetStore(Request $request){
  1310. $data=$request->all();
  1311. $user=WdUser::where('phone',$data['phone'])->value('id');
  1312. $users=WdOrder::where('user_id',$user)->value('store_id');
  1313. $user_id=WdStore::where('id',$users)->value('user_id');
  1314. $re=User::where('id',$user_id)->with(['crown','warea'])
  1315. ->select('nickname','mobile','headimgurl','crown_id','id as user_id','warea_id')->first();
  1316. return $this->success($re);
  1317. }
  1318. /*
  1319. *
  1320. * 根据级别分类
  1321. * **/
  1322. public function GetLevelAnalysis(Request $request){
  1323. $start_time=$request->input('start_time')??null;
  1324. $end_time=$request->input('end_time')??null;
  1325. $re=CustomerReturn::query();
  1326. if ($start_time){
  1327. $re->whereBetween('customer_return.created_at',[$start_time,$end_time]);
  1328. }else{
  1329. $re->where('customer_return.created_at','>=',Carbon::now()->addDays(-30));
  1330. }
  1331. // $re->where('is_finish',1);
  1332. $res=$re->leftJoin('users','users.id','=','customer_return.user_id')
  1333. ->select('users.level',DB::raw('sum(customer_return.total) as total'))->groupBy('users.level')->orderBy('users.level')->get();
  1334. $data=[
  1335. ['level'=>null,'total'=>0],
  1336. ['level'=>1,'total'=>0],
  1337. ['level'=>2,'total'=>0],
  1338. ['level'=>3,'total'=>0],
  1339. ];
  1340. foreach ($data as $k=>$v){
  1341. foreach ($res as $ke=>$va){
  1342. if ($va->level==$v['level']){
  1343. $data[$k]=$va;
  1344. }
  1345. }
  1346. }
  1347. return $this->success($data);
  1348. }
  1349. /*
  1350. *
  1351. * 根据级别分类
  1352. * **/
  1353. public function GetNumPriceAnalysis(Request $request){
  1354. $start_time=$request->input('start_time')??null;
  1355. $end_time=$request->input('end_time')??null;
  1356. $re=CustomerReturn::query();
  1357. if ($start_time){
  1358. $re->whereBetween('created_at',[$start_time,$end_time]);
  1359. }else{
  1360. $re->where('created_at','>=',Carbon::now()->addDays(-30));
  1361. }
  1362. // $re->where('is_finish',1);
  1363. $ids=$re->pluck('id')->toArray();
  1364. $res=CustomerReturnDetail::whereIn('customer_id',$ids)
  1365. ->select(DB::raw('sum(total) as total'),DB::raw('sum(price) as price'),'good_name')->groupBy('good_name')->get();
  1366. return $this->success($res);
  1367. }
  1368. public function GetCustomerAnalysis(Request $request){
  1369. $start_time=$request->input('start_time')??null;
  1370. $end_time=$request->input('end_time')??null;
  1371. $start_status=true;
  1372. $re=CustomerReturn::query();
  1373. if ($start_time){
  1374. $re->whereBetween('created_at',[$start_time,$end_time]);
  1375. }else{
  1376. $start_time=Carbon::now()->addDays(-7);
  1377. $end_time=Carbon::now();
  1378. $re->where('created_at','>=',Carbon::now()->addDays(-7));
  1379. }
  1380. // $re->where('is_finish',1);
  1381. $res=$re->select(DB::raw('sum(total) as totals'),DB::raw('sum(price) as price'),'customer_name','customer_phone','id')
  1382. ->orderByDesc('totals')
  1383. ->groupBy('customer_phone')->get()->toArray();
  1384. foreach ($res as $k=>$v){
  1385. $ids=CustomerReturn::where('customer_phone',$v['customer_phone'])->whereBetween('created_at',[$start_time,$end_time])->pluck('id');
  1386. $good_info=CustomerReturnDetail::whereIn('customer_id',$ids)
  1387. ->select(DB::raw('sum(total) as total'),DB::raw('sum(price) as price'),'good_name')->groupBy('good_name')->get();
  1388. $ress=CustomerReturn::where('customer_phone',$v['customer_phone'])->groupBy('op_name')->get();
  1389. if (count($ress)>1){
  1390. $res[$k]['Exception']=1;
  1391. }else{
  1392. $res[$k]['Exception']=0;
  1393. }
  1394. $res[$k]['good_info']=$good_info;
  1395. }
  1396. return $this->success($res);
  1397. }
  1398. public function Getinfo(){
  1399. // $s='http://qny.d0w.cc/daweiboshi-app/20221125/14583080627638067967e993.jpg';
  1400. // $b='tp://api.app.jiuweiyun.cn';
  1401. // $sa=stripos($s,$b);
  1402. // if ($sa==2){
  1403. // dd(10);
  1404. // }
  1405. // $re=WdStore::where('id',105)->get();
  1406. // dd($re->toArray());
  1407. // 获取七牛云配置信息
  1408. $config = config('filesystems.disks.qiniunew');
  1409. Log::info($config);
  1410. // 构建鉴权对象
  1411. $auth = new Auths($config['access_key'], $config['secret_key']);
  1412. // 生成上传 Token
  1413. $token = $auth->uploadToken($config['bucket']);
  1414. //获取文件的绝对路径,但是获取到的在本地不能打开
  1415. $filePath = 'http://api.app.jiuweiyun.cn/cert/20210323/09453560567.jpg';
  1416. $filename = 111 . '_' . time() . '_' . str_random(10) . '.png' ;
  1417. // 初始化 UploadManager 对象并进行文件的上传。
  1418. $data=['QrCode/a.jpg','QrCode/b.jpg'];
  1419. foreach ($data as $k=>$v){
  1420. $uploadMgr = new UploadManager();
  1421. // 调用 UploadManager 的 putFile 方法进行文件的上传。
  1422. $pathname= $config['dirname'].'/cert/20090327/1153001115'.$k.'.jpg';
  1423. $uploadMgr->putFile($token, $pathname, $v);
  1424. }
  1425. dd(1);
  1426. }
  1427. public function uploadImg(Request $request){
  1428. $file= $request->file('file');
  1429. $path_url='goods/refundGoods';
  1430. $upload= new UploadFilesHandler();
  1431. $result= $upload->save($file, $path_url, null, 'image');
  1432. if($result){
  1433. return $this->success($result['path']);
  1434. }
  1435. return $this->error();
  1436. }
  1437. public function uploadStoreImg(Request $request){
  1438. $file= $request->file('file');
  1439. $path_url='store/store';
  1440. $upload= new UploadFilesHandler();
  1441. $result= $upload->save($file, $path_url, null, 'image');
  1442. if($result){
  1443. return $this->success($result['path']);
  1444. }
  1445. return $this->error();
  1446. }
  1447. }