StoreController.php 111 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Events\CancelOrderEvent;
  4. use App\Events\EnoughFive;
  5. use App\Events\FinishAccount;
  6. use App\Events\AuthRefundTip;
  7. use App\Events\HelpOrderEvent;
  8. use App\Events\NewOrder;
  9. use App\Events\ReceivingEvent;
  10. use App\Events\RetailOutboundEvent;
  11. use App\Events\RestoreOutboundEvent;
  12. use App\Events\TipSendingEvent;
  13. use App\Events\TipPickUpEvent;
  14. use App\Http\Controllers\MiniSubController as Mini;
  15. use App\Models\Admin;
  16. use App\Models\Amount;
  17. use App\Models\BindRecomLog;
  18. use App\Models\OrderExpressW;
  19. use App\Models\AgentNo;
  20. use App\Models\ShowNumW;
  21. use App\Models\Verify;
  22. use App\Models\Warea;
  23. use App\Models\Select;
  24. use App\Models\OrderCancelW;
  25. use App\Models\OrderCodeW;
  26. use App\Models\OrderDetail;
  27. use App\Models\OrderRefund;
  28. use App\Models\OrderRefundW;
  29. use App\Models\VipLog;
  30. use App\Models\VipLogW;
  31. use App\Models\SettingW;
  32. use Carbon\Carbon;
  33. use Overtrue\EasySms\EasySms;
  34. use App\Handlers\RefundAmount;
  35. use App\Handlers\ExpressHandler;
  36. use App\Handlers\TencentHandler;
  37. use App\Handlers\UploadImg;
  38. use App\Models\Comment;
  39. use App\Models\Order;
  40. use App\Models\StoreGoods;
  41. use App\Models\InventoryW;
  42. use App\Models\IntegralW;
  43. use App\Models\See;
  44. use App\Models\Scan;
  45. use App\Models\User;
  46. use App\Models\Store;
  47. use App\Models\UserW;
  48. use App\Models\UserZ;
  49. use App\Models\OrderW;
  50. use App\Models\OrderShareW;
  51. use App\Models\TestUserW;
  52. use App\Models\AddressW;
  53. use App\Models\ZbsBasic;
  54. use App\Models\ZbsEnroll;
  55. use App\Models\OrderDetailW;
  56. use App\Models\StoreGoodsSku;
  57. use Illuminate\Http\Request;
  58. use Intervention\Image\Facades\Image;
  59. use EasyWeChat\Factory;
  60. use GuzzleHttp\Client;
  61. use Illuminate\Support\Facades\Auth;
  62. use Illuminate\Support\Facades\Config;
  63. use Illuminate\Support\Facades\Crypt;
  64. use Illuminate\Support\Facades\Log;
  65. use DB;
  66. use Storage;
  67. use Cache;
  68. use Validator;
  69. use TencentCloud\Common\Credential;
  70. use TencentCloud\Common\Profile\ClientProfile;
  71. use TencentCloud\Common\Profile\HttpProfile;
  72. use TencentCloud\Common\Exception\TencentCloudSDKException;
  73. use TencentCloud\Ocr\V20181119\OcrClient;
  74. use TencentCloud\Ocr\V20181119\Models\IDCardOCRRequest;
  75. use SimpleSoftwareIO\QrCode\Facades\QrCode;
  76. use Qiniu\Auth as Auths;
  77. use Qiniu\Storage\UploadManager;
  78. use Qiniu\Storage\BucketManager;
  79. use App\Handlers\CompressImageHandler;
  80. use Illuminate\Contracts\Encryption\DecryptException;
  81. class StoreController extends Controller{
  82. //获取店铺信息
  83. public function getStoreInfo()
  84. {
  85. $user_id=Auth::user()->id;
  86. $user=User::where('id',$user_id)->first();
  87. $data['is_delete'] = 0;
  88. if(!empty($user->deleted_at)){
  89. //获取账号余额
  90. $sub_mchid=Store::withTrashed()->where('is_failure',0)->where('user_id', $user_id)->value('sub_mchid');
  91. $mini=new Mini();
  92. $result=$mini->getAccount($sub_mchid);
  93. Log::info('------------------------------------------------------------------------------');
  94. Log::info($result);
  95. if($result['pending_amount']+$result['available_amount']==0){
  96. Log::info($user->mobile.'///'.$user->deleted_at.'///'.$result['pending_amount'].'///'.$result['available_amount']);
  97. return $this->error('450005','该商户账号已被删除');
  98. }
  99. $data['is_delete'] = 1;
  100. $store=Store::withTrashed()->where('is_failure',0)->where('is_failure',0)->where('user_id',Auth::user()->id)->first();
  101. }else{
  102. //正式版
  103. if($user->status==1){
  104. return $this->error('450001','该用户已被禁用');
  105. }
  106. if($user->cert_status <> 3){
  107. if($user->cert_status <> 6){
  108. return $this->error('450001','该账号未完成账号审核');
  109. }
  110. }
  111. if($user->service_status <> 0){
  112. return $this->error('450001','该账号未完成审核');
  113. }
  114. if($user->in_group!=1){
  115. return $this->error('450001','该用户未完成客服审核');
  116. }
  117. if($user->freeze_status==1){
  118. return $this->error('450001','该用户已被冻结');
  119. }
  120. // if($user->status <> 0 || $user->cert_status <> 6 || $user->service_status <> 0){// || !empty($user->deleted_at)
  121. // return $this->error('450002','你无权访问该页面');
  122. // }
  123. $store=Store::where('user_id',Auth::user()->id)->first();
  124. $store_del=Store::withTrashed()->where('is_failure',0)->where('user_id',Auth::user()->id)->first();
  125. if(empty($store) && !empty($store_del)){
  126. return $this->error('450001','店铺已被删除');
  127. }
  128. if(empty($store) && empty($store_del)){
  129. Store::create([
  130. 'img'=>$user->headimgurl,
  131. 'name'=>$user->nickname,
  132. 'user_id'=>$user->id,
  133. 'phone'=>$user->mobile
  134. ]);
  135. $store=Store::where('user_id',Auth::user()->id)->first();
  136. }
  137. if($store->status==1){
  138. return $this->error('450004','店铺已禁用');
  139. }
  140. }
  141. $arr_test=Store::getTest();
  142. if($user->headimgurl != $store->img){
  143. Log::info($store->img);
  144. $store->img=$user->headimgurl;
  145. }
  146. if($user->mobile != $store->phone){
  147. $store->phone=$user->mobile;
  148. }
  149. if($user->nickname != $store->name){
  150. $store->name=$user->nickname;
  151. }
  152. if($user->warea_id != $store->warea_id){
  153. $store->warea_id=$user->warea_id;
  154. $store->warea_name=Warea::where('id',$user->warea_id)->value('name');
  155. }
  156. $store->save();
  157. if(in_array($store->id,$arr_test)){
  158. $store->is_test=1;
  159. }else{
  160. $store->is_test=0;
  161. }
  162. //测试跳转小程序
  163. if(in_array($user->mobile,['15138929587','15238617326','13030314383','18838980968'])){
  164. $user->mini_zbs=1;
  165. }else{
  166. $user->mini_zbs=0;
  167. }
  168. $no_pay=OrderW::where('store_id',$store->id)->where('is_pay',0)->where('apply_cancel',[0,1,3])->count();
  169. $no_refund=OrderRefundW::where('store_id',$store->id)->where('status',0)->count();
  170. $no_cancel=OrderCancelW::where('store_id',$store->id)->where('status',1)->count();
  171. $see_num=See::where('store_id',$store->id)->whereDate('created_at',date('Y-m-d'))->count();
  172. $order_num=OrderW::where('store_id',$store->id)->whereIn('apply_cancel',[0,1,3])->whereIn('is_refund',[0,1])
  173. ->where('is_pay',1)->whereDate('created_at',date('Y-m-d'))->count();
  174. $order_money=OrderW::where('store_id',$store->id)->whereIn('apply_cancel',[0,1,3])->whereIn('is_refund',[0,1])
  175. ->where('is_pay',1)->whereDate('created_at',date('Y-m-d'))->sum('account');
  176. $wait_send_num=OrderW::where('store_id',$store->id)->whereIn('apply_cancel',[0,1,3])->whereIn('is_refund',[0,1,2])
  177. ->where('is_pay',1)->where('status',1)->count();
  178. $show_num=ShowNumW::where('obj_id',$store->id)->where('obj_type',1)->where('type',1)->first();
  179. $data['show_num1']=0;
  180. if($show_num){
  181. if($show_num->num < 3){
  182. $data['show_num1']=1;
  183. $show_num->num += 1;
  184. $show_num->save();
  185. }
  186. }else{
  187. ShowNumW::create([
  188. 'obj_id'=>$store->id,
  189. 'obj_type'=>1,
  190. 'type'=>1,
  191. 'name'=>'首页操作视频',
  192. 'num'=>1,
  193. ]);
  194. }
  195. $order_money=round($order_money);
  196. // $data['user']=$user;
  197. $data['store']=$store;
  198. $data['wait_send_num']=$wait_send_num?$wait_send_num:0;
  199. $data['order_num']=$order_num?$order_num:0;
  200. $data['see_num']=$see_num?$see_num:0;
  201. $data['order_money']=$order_money?$order_money:'0';
  202. $data['no_pay']=$no_pay?$no_pay:'0';
  203. $data['no_auth']=$no_refund+$no_cancel;
  204. $home_operation_video=SettingW::where('key','home.operation.video')->value('value');
  205. $data['home_operation_video']=$home_operation_video;
  206. return $this->success($data);
  207. }
  208. public function getZbsRank()
  209. {
  210. $zbs['type']=2;
  211. $zbs['message']='没有';
  212. return $this->success($zbs);
  213. }
  214. public function getStoreData(){
  215. $user_id=Auth::user()->id;
  216. $user=User::where('id',$user_id)->first();
  217. $store=Store::where('user_id',Auth::user()->id)->first();
  218. if($user->headimgurl != $store->img){
  219. Log::info($store->img);
  220. $store->img=$user->headimgurl;
  221. $store->save();
  222. }
  223. if($user->mobile != $store->phone){
  224. $store->phone=$user->mobile;
  225. $store->save();
  226. }
  227. if($user->nickname != $store->name){
  228. $store->name=$user->nickname;
  229. $store->save();
  230. }
  231. $no_pay=OrderW::where('store_id',$store->id)->where('is_pay',0)->where('apply_cancel',[0,1,3])->count();
  232. $no_refund=OrderRefundW::where('store_id',$store->id)->where('status',0)->count();
  233. $no_cancel=OrderCancelW::where('store_id',$store->id)->where('status',1)->count();
  234. $see_num=See::where('store_id',$store->id)->whereDate('created_at',date('Y-m-d'))->count();
  235. $order_num=OrderW::where('store_id',$store->id)->whereIn('apply_cancel',[0,1,3])->whereIn('is_refund',[0,1])
  236. ->where('is_pay',1)->whereDate('created_at',date('Y-m-d'))->count();
  237. $order_money=OrderW::where('store_id',$store->id)->whereIn('apply_cancel',[0,1,3])->whereIn('is_refund',[0,1])
  238. ->where('is_pay',1)->whereDate('created_at',date('Y-m-d'))->sum('account');
  239. $wait_send_num=OrderW::where('store_id',$store->id)->whereIn('apply_cancel',[0,1,3])->whereIn('is_refund',[0,1,2])
  240. ->where('is_pay',1)->where('status',1)->count();
  241. $order_money=round($order_money);
  242. $data['user']=$user;
  243. $data['store']=$store;
  244. $data['wait_send_num']=$wait_send_num?$wait_send_num:0;
  245. $data['order_num']=$order_num?$order_num:0;
  246. $data['see_num']=$see_num?$see_num:0;
  247. $data['order_money']=$order_money?$order_money:'0';
  248. $data['no_pay']=$no_pay?$no_pay:'0';
  249. $data['no_auth']=$no_refund+$no_cancel;
  250. return $this->success($data);
  251. }
  252. //获取商户个人信息
  253. public function getAgentInfo(){
  254. $store = Store::where('user_id',Auth::user()->id)->first();
  255. if(empty($store->idCard)){
  256. return $this->error('450001','店铺未认证');
  257. }
  258. $cre_num=$store->idCard;
  259. $year=substr($cre_num,6,4);
  260. if($year>1920 && $year<2020) {
  261. $year .= '-01-01';
  262. $age = Carbon::parse($year)->diffInYears();
  263. }else{
  264. $age = 0;
  265. }
  266. $num=substr($cre_num,16,1);
  267. if($num%2==0){
  268. $sex = '女';
  269. }else{
  270. $sex = '男';
  271. }
  272. $name=$store->username;
  273. $phone=$store->phone;
  274. switch(Auth::user()->level){
  275. case 2:
  276. $level='经销商';
  277. break;
  278. case 3:
  279. $level='批发商';
  280. break;
  281. default:
  282. $level='经销商';
  283. }
  284. $data=['username'=>$name,'sex'=>$sex,'age'=>$age,'phone'=>$phone,'level'=>$level,'cre_num'=>$cre_num];
  285. return $this->success($data);
  286. }
  287. //同意门店协议
  288. // public function setAgree()
  289. // {
  290. // $store=Store::where('user_id',Auth::user()->id)->first();
  291. // $store->is_agree=1;
  292. // $res=$store->save();
  293. // if($res){
  294. // return $this->success([]);
  295. // }else{
  296. // return $this->error();
  297. // }
  298. // }
  299. //修改店铺信息
  300. public function editStoreInfo(Request $request)
  301. {
  302. $input=$request->all();
  303. $rules=[
  304. 'name'=>'required|max:32'
  305. ];
  306. $message=[
  307. 'name.required'=>'用户名称不能为空.',
  308. 'name.max'=>'用户名称不能大于32个字符.'
  309. ];
  310. $validator = Validator::make($input,$rules,$message);
  311. if($validator->fails()){
  312. return $this->error('400013',$validator->errors()->first());
  313. }
  314. $store_id=$input['store_id'];
  315. $name=$input['name'];
  316. $res=Store::where('id',$store_id)->update(['name'=>$name]);
  317. if($res){
  318. return $this->success([]);
  319. }else{
  320. return $this->error();
  321. }
  322. }
  323. //修改手机号
  324. public function editSms(Request $request)
  325. {
  326. $rules=[
  327. 'phone'=>'required|regex:/^1[3456789][0-9]{9}$/',
  328. 'phone_code'=>'required|size:6',
  329. ];
  330. $message=[
  331. 'phone.required'=>'手机号不能为空.',
  332. 'phone.regex'=>'手机号格式有误.',
  333. 'phone_code.required'=>'验证码不能为空.',
  334. 'phone_code.size'=>'验证码为6位字符串.',
  335. ];
  336. $validator = Validator::make($request->input(),$rules,$message);
  337. if($validator->fails()){
  338. return $this->error('400013',$validator->errors()->first());
  339. }
  340. $phone=$request->input('phone');
  341. if($phone == Store::where('user_id',Auth::user()->id)->value('phone')){
  342. return $this->error('450001','新手机号不能与旧手机号相同');
  343. }
  344. if(Store::where('phone',$phone)->first()){
  345. return $this->error('450001','新手机号已绑定店铺');
  346. }
  347. $store_id=$request->input('store_id');
  348. $phone_code=$request->input('phone_code');
  349. $code=Cache::get('sms'.$phone);
  350. if($code==$phone_code){
  351. Cache::put('sms'.$phone,$code,-1);
  352. $res=Store::where('id',$store_id)->update(['phone'=>$phone]);
  353. if($res){
  354. return $this->success([]);
  355. }
  356. }else{
  357. return $this->error('450001','验证码有误');
  358. }
  359. return $this->error();
  360. }
  361. //校验手机验证码
  362. public function checkSms(Request $request)
  363. {
  364. $rules=[
  365. 'phone'=>'required|regex:/^1[3456789][0-9]{9}$/',
  366. 'phone_code'=>'required|size:6',
  367. ];
  368. $message=[
  369. 'phone.required'=>'手机号不能为空.',
  370. 'phone.regex'=>'手机号格式有误.',
  371. 'phone_code.required'=>'验证码不能为空.',
  372. 'phone_code.size'=>'验证码为6位字符串.',
  373. ];
  374. $validator = Validator::make($request->input(),$rules,$message);
  375. if($validator->fails()){
  376. return $this->error('400013',$validator->errors()->first());
  377. }
  378. $phone=$request->input('phone');
  379. $phone_code=$request->input('phone_code');
  380. $code=Cache::get('sms'.$phone);
  381. if($code==$phone_code){
  382. Cache::put('sms'.$phone,$code,-1);
  383. return $this->success([]);
  384. }else{
  385. return $this->error('450001','验证码有误');
  386. }
  387. }
  388. //发送验证码
  389. public function sendSms(Request $request){
  390. $rules=[
  391. 'phone'=>'required|regex:/^1[3456789][0-9]{9}$/'
  392. ];
  393. $message=[
  394. 'phone.required'=>'手机号不能为空.',
  395. 'phone.regex'=>'手机号格式有误.'
  396. ];
  397. $validator = Validator::make($request->input(),$rules,$message);
  398. if($validator->fails()){
  399. return $this->error('400013',$validator->errors()->first());
  400. }
  401. $phone=$request->input('phone');
  402. $config=config('easysms');
  403. $easySms = new EasySms($config);
  404. $code = mt_rand(100000,999999);
  405. $minute=5;
  406. if($request->input('type')=='card'){
  407. $content="【大卫博士】您正在绑定身份信息,{$code}为您的验证码,请于{$minute}分钟内填写。如非本人操作,请忽略本短信。 ";
  408. }else{
  409. $content="【大卫博士】您正在换绑手机号,{$code}为您的更换验证码,请于{$minute}分钟内填写。如非本人操作,请忽略本短信。";
  410. }
  411. Cache::put('sms'.$phone,$code,$minute*60);
  412. try{
  413. $easySms->send($phone, ['content' =>$content ]);
  414. } catch (\Overtrue\EasySms\Exceptions\NoGatewayAvailableException $exception) {
  415. $message = $exception->getException('qcloud')->getMessage();
  416. return $this->error(40013, $message == null ? '短信发送异常' : $message);
  417. }
  418. return $this->success([]);
  419. }
  420. //分享店铺信息
  421. public function shareStore()
  422. {
  423. $store=Store::where('user_id',Auth::user()->id)->first();
  424. $store->user=Auth::user();
  425. return $this->success($store);
  426. }
  427. //修改店铺图片
  428. public function uploadStoreImg(Request $request)
  429. {
  430. $path_url = 'public/store';
  431. $path = $request->file('img')->store($path_url);
  432. if($path){
  433. $store_id=$request->input('store_id');
  434. $url = env('APP_URL').Storage::url($path);
  435. $res=Store::where('id',$store_id)->update(['img'=>$url]);
  436. if ($res) {
  437. return $this->success($url);
  438. }
  439. }
  440. return $this->error();
  441. }
  442. //上传证件照片--》压缩 七牛云
  443. public function uploadCertImgQny(Request $request)
  444. {
  445. $type= $request->input('type'); //1人像面 2国徽面
  446. $file= $request->file('img');
  447. if (!$request->hasFile('img')) {
  448. return $this->error('450001','请上传文件');
  449. }
  450. //设置文件后缀白名单
  451. $allowExt = ["jpg","png","jpeg"];
  452. //获取文件后缀名
  453. $ext = $file->getClientOriginalExtension();
  454. //判断文件格式是否正确
  455. if (empty($ext) || !in_array(strtolower($ext), $allowExt)) {
  456. return $this->error('450001','不允许上传的文件类型');
  457. }
  458. // 获取七牛云配置信息
  459. $config = [
  460. 'driver' => 'qiniu',
  461. 'domain' => 'http://image.chuliu.cc', //七牛域名
  462. 'access_key' => 'cIbo9JAqHBgO6uw97gT5fJOlEHiTiGrpB84unVEn', //AccessKey
  463. 'secret_key' => '4f0nTNNrvzOsFc6Rz0GC5DntiJRnk2GcfkyJFNQp', //SecretKey
  464. 'bucket' => 'daweiboshi-app', //Bucket名字
  465. 'dirname'=> 'daweiboshi-app'
  466. ];
  467. // 构建鉴权对象
  468. $auth = new Auths($config['access_key'], $config['secret_key']);
  469. // 生成上传 Token
  470. $token = $auth->uploadToken($config['bucket']);
  471. // 初始化 UploadManager 对象并进行文件的上传。
  472. $uploadMgr = new UploadManager();
  473. // 文件存储路径key
  474. $pathname= $config['dirname'].'/'.date('Ymd').'/'.date('His') . uniqid(mt_rand(10000,99999)) .'.'. $ext;
  475. Log::info('文件大小:'.$_FILES['img']['size']);
  476. if($_FILES['img']['size'] > 1024*1024){
  477. $handler= new CompressImageHandler();
  478. $contents= $handler->Upload();
  479. if(!$contents){
  480. return $this->error('450001','图片压缩失败');
  481. }
  482. // 调用 UploadManager 的 put 方法进行文件的上传。
  483. try{
  484. $uploadMgr->put($token, $pathname, $contents);
  485. }catch(\Exception $e){
  486. return $this->error('450001',$e->getMessage(),$e->getMessage());
  487. }
  488. }else{
  489. //获取文件的绝对路径,但是获取到的在本地不能打开
  490. $filePath = $file->getRealPath();
  491. // 调用 UploadManager 的 putFile 方法进行文件的上传。
  492. try{
  493. $uploadMgr->putFile($token, $pathname, $filePath);
  494. }catch(\Exception $e){
  495. return $this->error('450001',$e->getMessage(),$e->getMessage());
  496. }
  497. }
  498. // 获取文件完整路径
  499. $url = $config['domain'].'/'.$pathname;
  500. Log::info($url);
  501. try{
  502. $tenCent = new TencentHandler();
  503. $certInfo=json_decode($tenCent->getCertInfo($url),true);
  504. }catch(\Exception $e){
  505. Log::info('图片识别错误111');
  506. Log::info($e->getMessage());
  507. return $this->error('450001',$e->getMessage(),$e->getMessage());
  508. }
  509. if(empty($certInfo)){
  510. return $this->error('450001','上传图片有误','上传图片有误');
  511. }
  512. $AdvancedInfo=json_decode($certInfo['AdvancedInfo'],true);
  513. Log::info(Auth::user()->nickname.'身份证图片质量指数:'.$AdvancedInfo['Quality']);
  514. if($AdvancedInfo['Quality']<=55){
  515. return $this->error('450001','身份证图片模糊','身份证图片模糊');
  516. }
  517. foreach($tenCent->AdvancedInfo() as $key=>$val){
  518. if(in_array($key,$AdvancedInfo['WarnInfos'])){
  519. Log::info('111错误111--'.$val);
  520. return $this->error('450001',$val,$val);
  521. }
  522. }
  523. if($type==1){
  524. if(empty($certInfo['Name'])){
  525. return $this->error('450001','请上传人像面图片','请上传人像面图片');
  526. }else{
  527. Store::where('user_id',Auth::user()->id)->update(['cardImg1'=>$url]);
  528. }
  529. }elseif($type==2){
  530. if(empty($certInfo['Authority'])){
  531. return $this->error('450001','请上传国徽面图片','请上传国徽面图片');
  532. }else{
  533. Store::where('user_id',Auth::user()->id)->update(['cardImg2'=>$url]);
  534. }
  535. }else{
  536. return $this->error('450001','参数有误','参数有误');
  537. }
  538. $certInfo['url']='/'.$pathname;
  539. return $this->success($certInfo);
  540. }
  541. //上传活体人脸核身视频
  542. public function uploadFaceImg(Request $request){
  543. $path_url = 'public/cert/video/'.date('ymd');
  544. $path = $request->file('video')->store($path_url);
  545. if($path){
  546. $url = env('APP_URL').Storage::url($path);
  547. }else{
  548. return $this->error('450001','视频上传失败');
  549. }
  550. try{
  551. $tenCent = new TencentHandler();
  552. $certInfo=json_decode($tenCent->checkFaceId($idCard,$name,$url),true);
  553. }catch(\Exception $e){
  554. return $this->error('450001',$e->getMessage());
  555. }
  556. if(empty($certInfo) || $certInfo['Sim'] < 70){
  557. return $this->error('450001','认证失败');
  558. }
  559. if($certInfo['Result']=='Success' && $certInfo['Sim'] >= 70){
  560. return $this->success([]);
  561. }
  562. }
  563. //添加新用户
  564. public function addUser(Request $request){
  565. $area_code=$request->input('code','+86');
  566. $regex=Verify::where('code',$area_code)->value('preg');
  567. $rules=[
  568. 'phone'=>['required','regex:'.$regex]
  569. ];
  570. $message=[
  571. 'phone.required'=>'手机号不能为空.',
  572. 'phone.regex'=>'手机号格式有误.'
  573. ];
  574. $validator = Validator::make($request->input(),$rules,$message);
  575. if($validator->fails()){
  576. return $this->error('400013',$validator->errors()->first());
  577. }
  578. $agent_id = Auth::user()->id;
  579. $phone=$request->input('phone');
  580. $nickname=$request->input('nickname');
  581. $is_vip=$request->input('is_vip');
  582. $store = Store::where('user_id',$agent_id)->first();
  583. $phxxe=substr($phone,0,3).'****'.substr($phone,'-4');
  584. $agent=User::where('mobile',$phxxe)
  585. ->where(function($query){
  586. $query->where('cert_status',3)
  587. ->orWhere('cert_status',6);
  588. })
  589. ->where('service_status',0)->whereNull('deleted_at')->get();
  590. $mobiles = [];
  591. foreach($agent as $val){
  592. $mobiles[] = Crypt::decryptString($val->uuid);
  593. }
  594. if(in_array($phone, $mobiles)){
  595. return $this->error('450001','该手机号已注册,不能使用');
  596. }
  597. Log::info('---------------------0---------------------');
  598. Log::info($phone);
  599. $users=UserW::where('phone',$phxxe)->orWhere('phone',$phone)->orderBy('id')->get();
  600. $user = [];
  601. try{
  602. DB::transaction(function()use(&$user,$users,$phone,$nickname,$area_code,$store,$is_vip,$request){
  603. $client = new Client(['headers' => [
  604. "User-Agent" => 'Mozilla/5.0(Windows;U;Windows NT 5.1;en-US;rv:0.9.4)',
  605. "Content-type" => 'application/json'
  606. ]]);
  607. $url='https://weidian.cliu.cc/api/crypt/getCryptDataStore';
  608. $data = [
  609. 'form_params' => [
  610. 'users' => $users->toArray(),
  611. 'phone' => $phone
  612. ],
  613. 'timeout' => 300
  614. ];
  615. $data=$client->post($url,$data);
  616. $uuu=$data->getBody()->getContents();
  617. $uuu = json_decode($uuu, true);
  618. Log::info('$phone');
  619. if($uuu && array_key_exists('id', $uuu)){
  620. $user=UserW::find($uuu['id']);
  621. }else{
  622. $user=UserW::create([
  623. 'area_code'=>$area_code,
  624. 'phone'=>$phone,
  625. 'name'=>$nickname?:$phone,
  626. 'avatar' => 'http://api.app.cliu.cc/public/uploads/logo.jpg',
  627. 'nickname'=>$nickname?:$phone
  628. ]);
  629. }
  630. Log::info($user);
  631. $agent_id=Auth::user()->id;
  632. $store_id=Store::where('user_id',$agent_id)->value('id');
  633. if($request->input('province') && $request->input('city') && $request->input('area') && $request->input('address')){
  634. AddressW::create([
  635. 'name'=>$nickname?:$phone,
  636. 'area_code'=>$area_code,
  637. 'phone'=>$phone,
  638. 'user_id'=>$user->id,
  639. 'store_id'=>$store_id,
  640. 'province'=>$request->input('province'),
  641. 'city'=>$request->input('city'),
  642. 'area'=>$request->input('area'),
  643. 'address'=>$request->input('address'),
  644. 'is_default'=>$request->input('is_default',0),
  645. 'remark'=>$request->input('remark',null),
  646. 'type'=>2,
  647. ]);
  648. }
  649. if($is_vip==1){
  650. $user->is_vip=1;
  651. VipLogW::firstORCreate(['user_id'=>$user->id,'store_id'=>$store->id],['order_no'=>null,'type'=>1,'remark'=>'商户手动添加vip']);
  652. }else{
  653. $user->is_vip=0;
  654. }
  655. },5);
  656. return $this->success($user);
  657. }catch(\Exception $e){
  658. Log::info($e->getMessage());
  659. return $this->error($e->getMessage());
  660. }
  661. }
  662. //设置vip
  663. public function setVip(Request $request){
  664. $agent_id=Auth::user()->id;
  665. $user_id=$request->input('user_id');
  666. $store_id=Store::where('user_id',$agent_id)->value('id');
  667. VipLogW::firstORCreate(['user_id'=>$user_id,'store_id'=>$store_id],['order_no'=>null,'type'=>1,'remark'=>'商户手动设置vip']);
  668. return $this->success([]);
  669. }
  670. //取消vip
  671. public function cancelVip(Request $request){
  672. $agent_id=Auth::user()->id;
  673. $user_id=$request->input('user_id');
  674. $store_id=Store::where('user_id',$agent_id)->value('id');
  675. $vip=VipLogW::where('store_id',$store_id)->where('user_id',$user_id)->first();
  676. if(empty($vip)){
  677. return $this->error('450001','该客户不是vip');
  678. }
  679. $orders=OrderW::where('store_id',$store_id)->where('user_id',$user_id)->get();
  680. if(count($orders)>0){
  681. return $this->error('450001','该客户已下单,无法取消vip');
  682. }
  683. $vip=VipLogW::where('store_id',$store_id)->where('user_id',$user_id)->first();
  684. $vip->remark=!empty($vip->remark)?$vip->remark.'->商户删除':'商户删除';
  685. $vip->save();
  686. $vip->delete();
  687. return $this->success([]);
  688. }
  689. //获取用户数据信息
  690. public function getUserDataInfo()
  691. {
  692. $store_id = Store::where('user_id',Auth::user()->id)->value('id');
  693. //客户总数
  694. $user_num = OrderW::where('store_id', $store_id)
  695. ->where('is_pay',1)->groupBy('user_id')
  696. ->whereIn('apply_cancel',[0,1,3])
  697. ->whereIn('is_refund',[0,1,2])
  698. ->get()->count();
  699. //订单数量
  700. $order_num = OrderW::where('store_id', $store_id)
  701. ->whereIn('apply_cancel',[0,1,3])
  702. ->whereIn('is_refund',[0,1,2])
  703. ->where('is_pay',1)->count();
  704. //总交易额
  705. $sale_total = OrderW::where('store_id', $store_id)->where('is_pay',1)->sum('account');
  706. $sale_total = round($sale_total);
  707. //扫码用户
  708. $scan_user = Scan::with('user:id,nickname,avatar')->where('store_id', $store_id)
  709. ->orderByDesc('created_at')->limit(5)->get();
  710. $scan_num = Scan::has('user')->where('store_id', $store_id)->count();
  711. $scan_7_num = Scan::has('user')->where('store_id', $store_id)->whereBetween('created_at', [date("Y-m-d H:i", strtotime('-7 days')), date("Y-m-d H:i")])->count();
  712. //已购客户
  713. // $buy_num=UserW::whereHas('order', function ($query)use($store_id) {
  714. // $query->where('store_id', $store_id)->where('is_pay', 1);
  715. // })->get()->count();
  716. // $buy_user = OrderW::with('user:id,nickname,avatar,phone')
  717. // ->where('store_id',$store_id)->where('is_pay',1)
  718. // ->orderByDesc('created_at')->limit(5)->get();
  719. // $user_ids=UserW::where('store_id',$store_id)->pluck('id');
  720. $userInfo=OrderW::with('user:id,nickname,avatar,phone')->has('user')
  721. ->where('store_id',$store_id)->where('is_pay',1)
  722. ->select('user_id',DB::raw('sum(total) as total'),DB::raw('sum(account) as amount'))
  723. ->groupBy('user_id')->orderByDesc('amount')
  724. ->orderByDesc('total')->orderBy('user_id')
  725. ->limit(5)->get();
  726. $buy_7_num = OrderW::where('store_id', $store_id)
  727. ->whereBetween('created_at', [date("Y-m-d H:i", strtotime('-7 days')), date("Y-m-d H:i")])
  728. ->where('is_pay',1)
  729. ->count();
  730. $data['user_num'] = $user_num ? $user_num : 0;
  731. $data['sale_total'] = $sale_total ? $sale_total : 0;
  732. $data['scan_user'] = $scan_user ? $scan_user : [];
  733. $data['scan_num'] = $scan_num ? $scan_num : 0;
  734. $data['scan_7_num'] = $scan_7_num ? $scan_7_num : 0;
  735. // $data['buy_user'] = $buy_user ? $buy_user : [];
  736. // $data['buy_num'] = $buy_num ? $buy_num : 0;
  737. $data['order_num'] = $order_num ? $order_num : 0;
  738. $data['buy_7_num'] = $buy_7_num ? $buy_7_num : 0;
  739. $data['user_info'] = $userInfo;
  740. return $this->success($data);
  741. }
  742. //扫码用户查看更多
  743. public function getMoreScan(Request $request)
  744. {
  745. $input = $request->input();
  746. $page_index = $input['page_index'];
  747. $page_size = $input['page_size'];
  748. $num = $page_size * ($page_index - 1);
  749. $store_id = Store::where('user_id',Auth::user()->id)->value('id');
  750. $data=Scan::with('user:id,nickname,avatar')
  751. ->has('user')
  752. ->where('store_id', $store_id);
  753. $count=$data->count();
  754. $list=$data->orderByDesc('created_at')->skip($num)->limit($page_size)->get();
  755. return $this->success_list($list,'成功',$count);
  756. }
  757. //已购客户查看更多
  758. public function getMoreBuy(Request $request)
  759. {
  760. $input=$request->input();
  761. $page_index=$input['page_index'];
  762. $page_size=$input['page_size'];
  763. $num=$page_size*($page_index-1);
  764. $store_id = Store::where('user_id',Auth::user()->id)->value('id');
  765. // $data=UserW::withCount(['order'=>function($query){
  766. // $query->select(DB::raw("sum(account) as money"));
  767. // }])
  768. // ->where('store_id', $store_id)->having('order_count','>',0);
  769. $data=OrderW::with('user:id,nickname,avatar,phone')
  770. ->where('store_id',$store_id)->where('is_pay',1);
  771. $count=$data->get()->count();
  772. $list=$data->orderByDesc('created_at')->skip($num)->limit($page_size)
  773. ->get();
  774. return $this->success_list($list,'成功',$count);
  775. }
  776. //获取更多用户信息
  777. public function getMoreUserInfo(Request $request){
  778. $input=$request->input();
  779. $page_index=$input['page_index'];
  780. $page_size=$input['page_size'];
  781. $num=$page_size*($page_index-1);
  782. $store_id = Store::where('user_id',Auth::user()->id)->value('id');
  783. $data=OrderW::with('user:id,nickname,avatar,phone')->has('user')
  784. ->where('store_id',$store_id)->where('is_pay',1)
  785. ->select('user_id',DB::raw('sum(total) as total'),DB::raw('sum(account) as amount'))
  786. ->groupBy('user_id');
  787. $count=$data->get()->count();
  788. $list=$data->orderByDesc('amount')->orderByDesc('total')->orderBy('user_id')
  789. ->skip($num)->limit($page_size)->get();
  790. return $this->success_list($list,'成功',$count);
  791. }
  792. //获取用户所有订单
  793. public function getUserAllOrder(Request $request){
  794. $user_id=$request->input('user_id');
  795. $status=$request->input('status');
  796. $order_no=$request->input('order_no');
  797. $page_size=$request->input('page_size');
  798. $page_index=$request->input('page_index');
  799. $num=$page_size*($page_index-1);
  800. $where=[];
  801. if($status!='all'){
  802. $where['status']=$status;
  803. }
  804. $where['user_id']=$user_id;
  805. $store_id = Store::where('user_id',Auth::user()->id)->value('id');
  806. $data=OrderW::with(['user:id,nickname,phone','order_cancel'=>function($query){
  807. $query->where('using',1);}])
  808. ->where($where)
  809. ->where('store_id', $store_id)
  810. ->whereIn('apply_cancel',[0,1,3])
  811. ->orderByDesc('id');
  812. if($order_no){
  813. $data->where('order_no','like','%'.$order_no.'%');
  814. }
  815. $count=$data->count();
  816. $orders=$data->skip($num)->take($page_size)->get();
  817. foreach($orders as $key=>$val){
  818. $goods_ids=OrderDetailW::where('order_no',$val->order_no)->groupBy('goods_id')->pluck('goods_id');
  819. $goods=[];
  820. foreach($goods_ids as $k=>$v){
  821. $goods[$k]=StoreGoods::where('id',$v)->first();
  822. $goods[$k]->sku=OrderDetailW::where('order_no',$val->order_no)->where('goods_id',$v)->get();
  823. }
  824. $orders[$key]->goods=$goods;
  825. }
  826. return $this->success_list($orders,'成功',$count);
  827. }
  828. //获取代为下单用户信息
  829. public function getUserInfo(Request $request)
  830. {
  831. $input=$request->all();
  832. $phone=$input['phone'];
  833. $user=UserW::where('phone',$phone)->first();
  834. if(empty($user)){
  835. return $this->error('450001','用户手机号有误');
  836. }
  837. if($user->status==1){
  838. return $this->error('450001','用户已被禁用');
  839. }
  840. return $this->success($user);
  841. }
  842. //获取用户所有收货地址
  843. public function getAllAddress(Request $request)
  844. {
  845. $input=$request->All();
  846. $agent_id=Auth::user()->id;
  847. $store_id=Store::where('user_id',$agent_id)->value('id');
  848. $address=AddressW::where('user_id',$input['id'])->whereIn('type',[1,2])->orderByDesc('is_default')->orderByDesc('created_at')->get();
  849. // $address=AddressW::where('user_id',$input['id'])->where('store_id',$store_id)->where('type',2)->orderByDesc('is_default')->orderByDesc('created_at')->get();
  850. return $this->success($address);
  851. }
  852. //获取收货地址
  853. public function getAddress(Request $request)
  854. {
  855. $input=$request->All();
  856. $agent_id=Auth::user()->id;
  857. $store_id=Store::where('user_id',$agent_id)->value('id');
  858. $data['address']=AddressW::where('user_id',$input['id'])->whereIn('type',[1,2])->orderByDesc('is_default')->orderByDesc('created_at')->first();
  859. // $data['address']=AddressW::where('user_id',$input['id'])->where('store_id',$store_id)->where('type',2)->orderByDesc('is_default')->orderByDesc('created_at')->first();
  860. $data['store']=Store::with('address_store')->where('user_id',Auth::user()->id)->first();
  861. return $this->success($data);
  862. }
  863. //添加收货地址
  864. public function addAddress(Request $request)
  865. {
  866. $input=$request->all();
  867. $regex=Verify::where('code',$request->input('areaCode','+86'))->value('preg');
  868. $rules=[
  869. 'name'=>'required|max:32',
  870. 'phone'=>['required','regex:'.$regex],
  871. 'province'=>'required',
  872. 'city'=>'required',
  873. 'area'=>'required',
  874. 'address'=>'required|max:255',
  875. ];
  876. $message=[
  877. 'name.required'=>'收货人不能为空.',
  878. 'name.max'=>'收货人姓名不能大于32个字符.',
  879. 'phone.required'=>'手机号不能为空.',
  880. 'phone.regex'=>'手机号格式有误.',
  881. 'province.required'=>'省不能为空.',
  882. 'city.required'=>'市不能为空.',
  883. 'area.required'=>'区/县不能为空.',
  884. 'address.required'=>'详细地址不能为空.',
  885. 'address.max'=>'详细地址不能大于255个字符.'
  886. ];
  887. $validator = Validator::make($input,$rules,$message);
  888. if($validator->fails()){
  889. return $this->error('400013',$validator->errors()->first());
  890. }
  891. $count=AddressW::where('user_id',$input['user_id'])->count();
  892. // if($count>=10){
  893. // return $this->error('450001','用户地址数量已达上限');
  894. // }
  895. if($input['is_default']==1){
  896. AddressW::where('user_id',$input['user_id'])->update(['is_default'=>0]);
  897. }
  898. $agent_id=Auth::user()->id;
  899. $store_id=Store::where('user_id',$agent_id)->value('id');
  900. $res=AddressW::create([
  901. 'name'=>$input['name'],
  902. 'area_code'=>$request->input('areaCode','+86'),
  903. 'phone'=>$input['phone'],
  904. 'user_id'=>$input['user_id'],
  905. 'store_id'=>$store_id,
  906. 'province'=>$input['province'],
  907. 'city'=>$input['city'],
  908. 'area'=>$input['area'],
  909. 'address'=>$input['address'],
  910. 'is_default'=>$input['is_default'],
  911. 'remark'=>$input['remark'],
  912. 'type'=>2,
  913. ]);
  914. if($res){
  915. return $this->success([]);
  916. }else{
  917. return $this->error();
  918. }
  919. }
  920. //修改收货地址
  921. public function updateAddress(Request $request)
  922. {
  923. $input=$request->all();
  924. $regex=Verify::where('code',$request->input('areaCode','+86'))->value('preg');
  925. $rules=[
  926. 'name'=>'required|max:32',
  927. 'phone'=>['required','regex:'.$regex],
  928. 'province'=>'required',
  929. 'city'=>'required',
  930. 'area'=>'required',
  931. 'address'=>'required|max:255',
  932. ];
  933. $message=[
  934. 'name.required'=>'收货人不能为空.',
  935. 'name.max'=>'收货人姓名不能大于32个字符.',
  936. 'phone.required'=>'手机号不能为空.',
  937. 'phone.regex'=>'手机号格式有误.',
  938. 'province.required'=>'省不能为空.',
  939. 'city.required'=>'市不能为空.',
  940. 'area.required'=>'区/县不能为空.',
  941. 'address.required'=>'详细地址不能为空.',
  942. 'address.max'=>'详细地址不能大于255个字符.'
  943. ];
  944. $validator = Validator::make($input,$rules,$message);
  945. if($validator->fails()){
  946. return $this->error('400013',$validator->errors()->first());
  947. }
  948. $address_id=$input['address_id'];
  949. $address=AddressW::where('id',$address_id)->first();
  950. if($input['is_default']==1){
  951. AddressW::where('user_id',$address->user_id)->update(['is_default'=>0]);
  952. }
  953. $res=AddressW::where('id',$address_id)->update([
  954. 'name'=>$input['name'],
  955. 'area_code'=>$request->input('areaCode','+86'),
  956. 'phone'=>$input['phone'],
  957. 'province'=>$input['province'],
  958. 'city'=>$input['city'],
  959. 'area'=>$input['area'],
  960. 'address'=>$input['address'],
  961. 'is_default'=>$input['is_default'],
  962. 'remark'=>$input['remark'],
  963. ]);
  964. if($res){
  965. return $this->success([]);
  966. }else{
  967. return $this->error();
  968. }
  969. }
  970. //删除收货地址
  971. public function destroyAddress(Request $request)
  972. {
  973. $res=AddressW::where('id',$request->input('id'))->delete();
  974. if($res){
  975. return $this->success([]);
  976. }else{
  977. return $this->error();
  978. }
  979. }
  980. //设为默认地址
  981. public function setDefaultAddress(Request $request)
  982. {
  983. $address=AddressW::where('id',$request->input('id'))->first();
  984. try{
  985. DB::connection('mysql_w')->transaction(function()use($address){
  986. if($address->is_default == 1) {
  987. $address->is_default = 0;
  988. $address->save();
  989. }else{
  990. $address->is_default = 1;
  991. $address->save();
  992. AddressW::where('user_id',$address->user_id)->whereNotIn('id',[$address->id])->update(['is_default'=>0]);
  993. }
  994. },5);
  995. return $this->success([]);
  996. }catch(\Exception $e){
  997. return $this->error($e->getMessage());
  998. }
  999. }
  1000. //判断订单价格
  1001. protected function getOrderPrice($user_id,$store_id,$num){
  1002. $vipLog=VipLogW::where('user_id',$user_id)->where('store_id',$store_id)->first();
  1003. if($vipLog){
  1004. return 'vip_ed';//vip价格
  1005. }else{
  1006. if($num>=2){
  1007. return 'vip_ing';//vip价格
  1008. }else{
  1009. return 'normal';//正常价
  1010. }
  1011. }
  1012. }
  1013. protected function saveAgentNoLog($user_id,$agent_id,$order_no){
  1014. $one=$agent_id;
  1015. $one_agent=User::where('id',$one)->first();
  1016. $data=[];
  1017. $data[0]['order_no'] = $order_no;
  1018. $data[0]['user_id'] = $user_id;
  1019. $data[0]['nickname'] = $one_agent->nickname;
  1020. $data[0]['phone'] = $one_agent->mobile;
  1021. $data[0]['created_at'] = date("Y-m-d H:i:s");
  1022. $data[0]['updated_at'] = date("Y-m-d H:i:s");
  1023. return $data;
  1024. }
  1025. public function CheckOrder(Request $request){
  1026. $input=$request->all();
  1027. $sku=$input['sku'];
  1028. $user=UserW::find($input['user_id']);
  1029. $store=Store::where('user_id',Auth::user()->id)->first();
  1030. $time=Carbon::now()->addMonths(-2);
  1031. $re=OrderW::where('user_id',$user->id)->where('is_pay',1)->where('apply_cancel',0)->where('store_id',$store->id)->where('created_at','>=',$time)->pluck('id');
  1032. if (count($re)==0){
  1033. return $this->success([]);
  1034. }
  1035. foreach ($sku as $k=>$v){
  1036. $res=OrderDetailW::whereIn('order_id',$re)->where('sku_id',$v[0])->count();
  1037. if ($res>0){
  1038. return $this->error(50001,[],'您在2个月内已经购买过相同款式尺码的商品,确定要再次购买吗?');
  1039. }
  1040. }
  1041. return $this->success([]);
  1042. }
  1043. //代下单或分享提交订单
  1044. public function submitOrderInfo(Request $request)
  1045. {
  1046. $input=$request->all();
  1047. $sku=$input['sku'];
  1048. $user=UserW::find($input['user_id']);
  1049. $agent=User::find(Auth::user()->id);
  1050. $store=Store::where('user_id',Auth::user()->id)->first();
  1051. if(empty($store)){
  1052. return $this->error('450001','店铺不存在或者已被删除');
  1053. }
  1054. if($store->status==1){
  1055. return $this->error('450001','店铺已被禁用');
  1056. }
  1057. if($user){
  1058. $recomer_id=null;
  1059. $recomer_status=0;
  1060. }else{
  1061. return $this->error('450001','客户信息有误');
  1062. }
  1063. $store_id=$store->id;
  1064. $remark=$input['remark'];
  1065. $order_no=$this->order_no('dx');
  1066. $account=$vip_account=$num=0;
  1067. $data=$snapshot=[];
  1068. foreach($sku as $key=>$val){
  1069. if($val[1] > 0){
  1070. $num += $val[1];
  1071. }
  1072. }
  1073. $vip=$this->getOrderPrice($user->id,$store_id,$num);
  1074. $arr_test=Store::getTest();
  1075. foreach($sku as $key=>$val){
  1076. $sku_info=[];
  1077. $goodSku=StoreGoodsSku::with(['goods'])->where('id',$val[0])->first();
  1078. if(!array_key_exists($goodSku->goods_id,$snapshot)){
  1079. $snapshot[$goodSku->goods_id]['name']=$goodSku->goods->name;
  1080. $snapshot[$goodSku->goods_id]['main_attr']=$goodSku->goods->main_attr;
  1081. $snapshot[$goodSku->goods_id]['img']=$goodSku->goods->img;
  1082. $snapshot[$goodSku->goods_id]['price']=$goodSku->goods->price;
  1083. $snapshot[$goodSku->goods_id]['sku']=[];
  1084. }
  1085. if(in_array($store_id,$arr_test)){
  1086. $storeInventory=InventoryW::where(['store_id'=>$store_id,'goods_id'=>$goodSku->goods_id,'sku_id'=>$val[0]])->lockForUpdate()->first();
  1087. $storeInve_num=!empty($storeInventory)?$storeInventory->num:0;
  1088. if($val[1] > $storeInve_num){
  1089. return $this->error('450001','【'.$goodSku->goods->main_attr.'-'.$goodSku->type.'-'.$goodSku->size.'】库存不足');
  1090. }
  1091. }
  1092. if(empty($goodSku)){
  1093. return $this->error('450001','商品规格不存在,刷新页面重新下单');
  1094. }
  1095. if($vip=='vip_ed' || $vip=='vip_ing'){
  1096. $data[$key]['price']=$goodSku->goods->vip_price;
  1097. $sku_info['price']=$goodSku->goods->vip_price;
  1098. $data[$key]['account']=$goodSku->goods->vip_price * $val[1];
  1099. $account += $goodSku->goods->vip_price * $val[1];
  1100. }else{
  1101. $data[$key]['price']=$goodSku->goods->price;
  1102. $sku_info['price']=$goodSku->goods->price;
  1103. $data[$key]['account']=$goodSku->goods->price * $val[1];
  1104. $account += $goodSku->goods->price * $val[1];
  1105. }
  1106. $data[$key]['origin_price']=$goodSku->goods->price;
  1107. $data[$key]['order_no']=$order_no;
  1108. $data[$key]['goods_id']=$goodSku->goods_id;
  1109. $data[$key]['store_id']=$store_id;
  1110. $data[$key]['user_id']=$user->id;
  1111. $data[$key]['sku_id']=$goodSku->id;
  1112. $data[$key]['num']=$val[1];
  1113. $data[$key]['size']=$goodSku->size;
  1114. $data[$key]['type']=$goodSku->type;
  1115. $data[$key]['style']=1;
  1116. $data[$key]['created_at']=date("Y-m-d H:i:s");
  1117. $data[$key]['updated_at']=date("Y-m-d H:i:s");
  1118. $sku_info['origin_price']=$goodSku->goods->price;
  1119. $sku_info['sku_id']=$goodSku->id;
  1120. $sku_info['num']=$val[1];
  1121. $sku_info['size']=$goodSku->size;
  1122. $sku_info['type']=$goodSku->type;
  1123. array_push($snapshot[$goodSku->goods_id]['sku'],$sku_info);
  1124. }
  1125. $order_data=[
  1126. 'order_no'=>$order_no,
  1127. 'store_id'=>$store_id,
  1128. 'user_id'=>$user->id,
  1129. 'remark'=>$remark,
  1130. 'is_help'=>1,
  1131. 'op_id'=>Auth::user()->id,
  1132. 'op_name'=>Auth::user()->nickname,
  1133. // 'status'=>0,
  1134. // 'is_pay'=>0,
  1135. 'status'=>1,
  1136. 'is_pay'=>1,//服务商产品权限冻结后下单即支付
  1137. 'pay_money'=>$account,
  1138. 'pay_type'=>3,//免支付
  1139. 'pay_at'=>date("Y-m-d H:i:s"),
  1140. 'is_tip_send'=>0,
  1141. 'is_comment'=>0,
  1142. 'total'=>$num,
  1143. 'account'=>$account,
  1144. 'snapshot'=>json_encode($snapshot),
  1145. 'address_id'=>$request->input('address_id',null),
  1146. ];
  1147. $agent_id=Store::where('id',$store_id)->value('user_id');
  1148. $agent_data=$this->saveAgentNoLog($user->id,$agent_id,$order_no);
  1149. DB::connection('mysql_w')->beginTransaction();
  1150. try{
  1151. $result=OrderW::create($order_data); //生成订单
  1152. // Log::info($result);
  1153. foreach($data as $k=>$v){
  1154. $data[$k]['order_id']=$result->id;
  1155. }
  1156. OrderDetailW::insert($data); //生成订单商品详情
  1157. AgentNo::insert( $agent_data);
  1158. DB::connection('mysql_w')->commit();
  1159. //代下单通知客户
  1160. $order=$result;
  1161. //用户vip变更
  1162. $vipLog=VipLogW::where('user_id',$order->user_id)
  1163. ->where('store_id',$order->store_id)->first();
  1164. if(empty($vipLog) && $order->total>=2){
  1165. VipLogW::create([
  1166. 'user_id'=>$order->user_id,
  1167. 'store_id'=>$store->id,
  1168. 'order_no'=>$order->order_no,
  1169. 'type'=>2,//购买两套,添加vip
  1170. 'remark'=>'购买自动添加vip'
  1171. ]);
  1172. OrderW::where('order_no',$order->order_no)->update([
  1173. 'vip'=>1
  1174. ]);
  1175. }
  1176. return $this->success($order_no);
  1177. }catch(\Exception $e){
  1178. DB::connection('mysql_w')->rollback();
  1179. return $this->error('450001','提交失败',$e->getMessage());
  1180. }
  1181. }
  1182. //修改订单备注信息
  1183. public function editOrderRemark(Request $request){
  1184. $order_no=$request->input('order_no');
  1185. $remark=$request->input('remark');
  1186. $res=OrderW::where('order_no',$order_no)->update([
  1187. 'remark'=>$remark
  1188. ]);
  1189. if($res){
  1190. return $this->success([]);
  1191. }else{
  1192. return $this->error();
  1193. }
  1194. }
  1195. //分享订单
  1196. public function shareOrderInfo(Request $request)
  1197. {
  1198. $input=$request->all();
  1199. $store_id=Store::where('user_id',Auth::user()->id)->value('id');
  1200. $sku=$input['sku'];
  1201. // $user=UserW::find($input['user_id']);
  1202. $self_receive=$input['self_receive'];//不自提0 自提1
  1203. if($self_receive==1){
  1204. $address_id=Store::where('id',$store_id)->value('address_id');
  1205. }else{
  1206. $address_id=$input['address_id'];
  1207. }
  1208. $remark=$input['remark'];
  1209. $order_no=$this->order_no('fx');
  1210. $account=$vip_account=$num=0;
  1211. $data=[];
  1212. foreach($sku as $key=>$val){
  1213. $goodSku=StoreGoodsSku::with(['goods'])->where('id',$val[0])->first();
  1214. if(empty($goodSku)){
  1215. return $this->error('450001','商品规格不存在,请重新分享');
  1216. }
  1217. $account += $goodSku->goods->price * $val[1];
  1218. $num += $val[1];
  1219. $data[$key]['order_no']=$order_no;
  1220. $data[$key]['goods_id']=$goodSku->goods_id;
  1221. $data[$key]['sku_id']=$goodSku->id;
  1222. $data[$key]['num']=$val[1];
  1223. $data[$key]['price']=$goodSku->goods->price;
  1224. $data[$key]['account']=$goodSku->goods->price * $val[1];
  1225. $data[$key]['size']=$goodSku->size;
  1226. $data[$key]['type']=$goodSku->type;
  1227. $data[$key]['created_at']=date("Y-m-d H:i:s");
  1228. $data[$key]['updated_at']=date("Y-m-d H:i:s");
  1229. }
  1230. $order_data=[
  1231. 'order_no'=>$order_no,
  1232. 'store_id'=>$store_id,
  1233. 'user_id'=>$input['user_id'],
  1234. 'address_id'=>$address_id,
  1235. 'self_receive'=>$self_receive,
  1236. 'remark'=>$remark,
  1237. 'op_id'=>Auth::user()->id,
  1238. 'op_name'=>Auth::user()->nickname,
  1239. 'total'=>$num,
  1240. 'account'=>$account,
  1241. ];
  1242. DB::connection('mysql_w')->beginTransaction();
  1243. try{
  1244. OrderDetailW::insert($data);
  1245. OrderShareW::create($order_data);
  1246. DB::connection('mysql_w')->commit();
  1247. return $this->success($order_no);
  1248. }catch(\Exception $e){
  1249. DB::connection('mysql_w')->rollback();
  1250. return $this->error('450001','提交失败',$e->getMessage());
  1251. }
  1252. }
  1253. //生成订单号
  1254. public function order_no($type='dx')
  1255. {
  1256. if($type=='fx'){
  1257. $prefix = 'FX';
  1258. }else{
  1259. $prefix = 'DX';
  1260. }
  1261. $timestamp=date('ymdHis') . substr(microtime(), 2, 6);
  1262. $rand=mt_rand(10000, 99999);
  1263. $order_no=$prefix . $timestamp . $rand;
  1264. if(OrderW::where('order_no',$order_no)->first()){
  1265. $this->order_no($type);
  1266. }else{
  1267. return $order_no;
  1268. }
  1269. }
  1270. //审核订单取消
  1271. public function authOrderCancel(Request $request){
  1272. $id=$request->input('id');
  1273. $type=$request->input('type');//2通过//3驳回
  1274. $remark=$request->input('remark');
  1275. DB::connection('mysql')->beginTransaction();
  1276. DB::connection('mysql_w')->beginTransaction();
  1277. try{
  1278. $cancel=OrderCancelW::where('id',$id)->first();
  1279. $cancel->status=$type;
  1280. $cancel->remark=$remark;
  1281. $cancel->save();
  1282. $order=OrderW::where('id',$cancel->order_id)->first();
  1283. $order->apply_cancel= $type;
  1284. $order->cancel_at=date("Y-m-d H:i:s");
  1285. $order->save();
  1286. $first='取消订单被驳回';
  1287. if($type==2){//同意取消
  1288. //退款
  1289. // $refund=new RefundAmount();
  1290. // $res=$refund->refundAmount($cancel->order_id);
  1291. // if($res[0]=='450001'){
  1292. // return $this->error('450001',$res[1]);
  1293. // }
  1294. // if($res[0]=='450000'){
  1295. // return $this->error('450001','取消订单退款失败',$res[1]);
  1296. // }
  1297. if($order->pay_type!=3){
  1298. //退款
  1299. $refund=new RefundAmount();
  1300. $res=$refund->refundAmount($cancel->order_id);
  1301. if($res[0]=='450001'){
  1302. return $this->error('450001',$res[1]);
  1303. }
  1304. if($res[0]=='450000'){
  1305. return $this->error('450001','取消订单退款失败',$res[1]);
  1306. }
  1307. }
  1308. //判断是否剥夺vip
  1309. if($order->vip==1){
  1310. $orders=OrderW::where('user_id',$order->user_id)
  1311. ->where('store_id',$order->store_id)
  1312. ->where('is_pay',1)
  1313. ->whereIn('apply_cancel',[0,1,3])
  1314. ->whereIn('is_refund',[0,1])
  1315. ->where('total','>=',2)
  1316. ->where('created_at','>',$order->created_at)
  1317. ->orderBy('created_at')->get();
  1318. if(count($orders)>=1){
  1319. OrderW::where('id',$orders[0]->id)->update([
  1320. 'vip'=>1
  1321. ]);
  1322. }else{
  1323. VipLogW::where('user_id',$order->user_id)->where('store_id',$order->store_id)->delete();
  1324. }
  1325. }
  1326. //判断恢复库存
  1327. $store=Store::withTrashed()->where('is_failure',0)->where('id',$order->store_id)->first();
  1328. $level=User::where('id',$store->user_id)->value('level');
  1329. if($level==3){
  1330. event(new RestoreOutboundEvent($order->order_no));
  1331. }
  1332. $first='取消订单审核成功';
  1333. }
  1334. //取消订单通知
  1335. $user=UserW::where('id',$order->user_id)->first();
  1336. if($user->openId){
  1337. $data['openid']=$user->openId;
  1338. $data['data']=[
  1339. 'first' => '您的订单:'.$order->order_no.$first,
  1340. 'keyword1' => $user->nickname,
  1341. 'keyword2' => $order->order_no,
  1342. 'keyword3' => '已取消',
  1343. 'keyword4' => $order->cancel_at
  1344. ];
  1345. event(new CancelOrderEvent($data));
  1346. }
  1347. DB::connection('mysql')->commit();
  1348. DB::connection('mysql_w')->commit();
  1349. return $this->success([]);
  1350. }catch(\Exception $e){
  1351. DB::connection('mysql')->rollback();
  1352. DB::connection('mysql_w')->rollback();
  1353. return $this->error('450001','失败',$e->getMessage());
  1354. }
  1355. }
  1356. //商户取消订单
  1357. public function cancelOrder(Request $request){
  1358. $order_id=$request->input('order_id');
  1359. $order=OrderW::where('id',$order_id)->first();
  1360. // if($order->is_help==0){//用户自己下单
  1361. // return $this->error('450001','用户自己下单商户不能取消');
  1362. // }
  1363. if($order->apply_cancel==1){
  1364. return $this->error('450001','该订单正在审核中,不能再次取消');
  1365. }
  1366. if($order->apply_cancel==2){
  1367. return $this->error('450001','该订单已取消,不能再次取消');
  1368. }
  1369. DB::connection('mysql')->beginTransaction();
  1370. DB::connection('mysql_w')->beginTransaction();
  1371. try {
  1372. //退款
  1373. if($order->is_pay==1){
  1374. // $refund=new RefundAmount();
  1375. // $res=$refund->refundAmount($order->id);
  1376. // if($res[0]=='450001'){
  1377. // return $this->error('450001',$res[1]);
  1378. // }
  1379. // if($res[0]=='450000'){
  1380. // return $this->error('450001','退款失败',$res[1]);
  1381. // }
  1382. if($order->pay_type!=3){
  1383. //退款
  1384. $refund=new RefundAmount();
  1385. $res=$refund->refundAmount($order->id);
  1386. if($res[0]=='450001'){
  1387. return $this->error('450001',$res[1]);
  1388. }
  1389. if($res[0]=='450000'){
  1390. return $this->error('450001','退款失败',$res[1]);
  1391. }
  1392. }
  1393. }
  1394. //判断是否剥夺vip
  1395. if($order->vip==1){
  1396. $orders=OrderW::where('user_id',$order->user_id)
  1397. ->where('store_id',$order->store_id)
  1398. ->where('is_pay',1)
  1399. ->whereIn('apply_cancel',[0,1,3])
  1400. ->whereIn('is_refund',[0,1])
  1401. ->where('total','>=',2)
  1402. ->where('created_at','>',$order->created_at)
  1403. ->orderBy('created_at')->get();
  1404. if(count($orders)>=1){
  1405. OrderW::where('id',$orders[0]->id)->update([
  1406. 'vip'=>1
  1407. ]);
  1408. }else{
  1409. VipLogW::where('user_id',$order->user_id)->where('store_id',$order->store_id)->delete();
  1410. }
  1411. }
  1412. //判断恢复库存
  1413. $store=Store::withTrashed()->where('is_failure',0)->where('id',$order->store_id)->first();
  1414. $level=User::where('id',$store->user_id)->value('level');
  1415. if($level==3){
  1416. event(new RestoreOutboundEvent($order->order_no));
  1417. }
  1418. //取消订单
  1419. OrderW::where('id', $order_id)->update([
  1420. 'apply_cancel'=>2,
  1421. 'cancel_at'=>date("Y-m-d H:i:s")
  1422. ]);
  1423. OrderCancelW::where('user_id',$order->user_id)
  1424. ->where('store_id',$order->store_id)
  1425. ->where('order_id',$order->id)->update(['using'=>0]);
  1426. OrderCancelW::create([
  1427. 'user_id' =>$order->user_id,
  1428. 'store_id'=>$order->store_id,
  1429. 'order_id'=>$order->id,
  1430. 'status' =>2,
  1431. 'using' =>1,
  1432. 'type' =>2, //商户取消订单
  1433. 'reason' =>'商户取消订单'
  1434. ]);
  1435. //取消订单通知
  1436. $user=UserW::where('id',$order->user_id)->first();
  1437. if($user->openId){
  1438. $data['openid']=$user->openId;
  1439. $data['data']=[
  1440. 'first' => '您的订单:'.$order->order_no.'已被商户成功取消',
  1441. 'keyword1' => $user->nickname,
  1442. 'keyword2' => $order->order_no,
  1443. 'keyword3' => '已取消',
  1444. 'keyword4' => date("Y-m-d H:i:s")
  1445. ];
  1446. event(new CancelOrderEvent($data));
  1447. }
  1448. DB::connection('mysql')->commit();
  1449. DB::connection('mysql_w')->commit();
  1450. return $this->success([]);
  1451. }catch(\Exception $e){
  1452. DB::connection('mysql')->rollback();
  1453. DB::connection('mysql_w')->rollback();
  1454. return $this->error('450001','失败',$e->getMessage());
  1455. }
  1456. }
  1457. //获取订单状态数量
  1458. public function getOrderStatusNum(Request $request){
  1459. $store=Store::withTrashed()->where('is_failure',0)->where('user_id',Auth::user()->id)->first();
  1460. $user_id=$request->input('user_id');
  1461. if($user_id){
  1462. $where['user_id']=$user_id;
  1463. }
  1464. $where['store_id']=$store->id;
  1465. $data=OrderW::where($where)->whereIn('apply_cancel',[0,1,3])->whereIn('is_refund',[0,1,2]);
  1466. $data1=clone $data;
  1467. $data2=clone $data;
  1468. $data3=clone $data;
  1469. $num['noPay']=$data->where('status',0)->count();
  1470. $num['noSend']=$data1->where('status',1)->count();
  1471. $num['noReceive']=$data2->where('status',2)->count();
  1472. $num['Finish']=$data3->where('status',3)->count();
  1473. //判断扫码发货还是立即发货,功能暂时未用到
  1474. // if(in_array($store->phone,['15138929587','18838980968', '13030314383'])){//, '13030314383',
  1475. // $num['is_code']=1;
  1476. // }else{
  1477. // $num['is_code']=0;
  1478. // }
  1479. return $this->success($num);
  1480. }
  1481. //获取订单列表
  1482. public function getOrderList(Request $request)
  1483. {
  1484. $input=$request->all();
  1485. $status=$input['status'];
  1486. $page_index=$input['page_index'];
  1487. $page_size=$input['page_size'];
  1488. $order_no=$input['order_no'];
  1489. $num=$page_size*($page_index-1);
  1490. $where=$wheres=[];
  1491. if($status!='all'){
  1492. $where['status']=$status;
  1493. }
  1494. if($order_no){
  1495. $wheres=function($query)use($order_no){
  1496. $query->where('order_no','like','%'.$order_no.'%');
  1497. };
  1498. }
  1499. $store=Store::where('user_id',Auth::user()->id)->first();
  1500. $where['store_id']=$store->id;
  1501. $data=OrderW::with(['user:id,nickname,phone','order_cancel'=>function($query){
  1502. $query->where('using',1);}])->where($where)->where($wheres)->whereIn('apply_cancel',[0,1,3])
  1503. ->whereIn('is_refund',[0,1,2])
  1504. ->orderByDesc('updated_at')->orderByDesc('id');
  1505. $count=$data->count();
  1506. $orders=$data->skip($num)->take($page_size)->get();
  1507. foreach($orders as $key=>$val){
  1508. if($val->status==3 && $val->is_refund > 0){
  1509. $order_refund = OrderRefundW::where('order_no',$val->order_no)->get();
  1510. if($order_refund){
  1511. $orders[$key]->refund_goods=$order_refund;
  1512. }
  1513. }
  1514. $goods_ids=OrderDetailW::where('order_no',$val->order_no)->groupBy('goods_id')->pluck('goods_id');
  1515. $goods=[];
  1516. foreach($goods_ids as $k=>$v){
  1517. $goods[$k]=StoreGoods::where('id',$v)->select('id','name','img','main_attr')->first();
  1518. $goods[$k]->imgs=str_replace('http://','https://',$goods[$k]->img);
  1519. $goods[$k]->sku=OrderDetailW::where('order_no',$val->order_no)
  1520. ->where('goods_id',$v)->select('price','num')->get();
  1521. }
  1522. $goods_infos=OrderDetailW::with('goods:id,img,name,main_attr')->where('order_no',$val->order_no)
  1523. ->groupBy('goods_id')->select(DB::raw('price','sum(num) as num'))->first();
  1524. $orders[$key]->goods=$goods;
  1525. }
  1526. return $this->success_list($orders,'成功',$count);
  1527. }
  1528. //获取订单列表
  1529. public function getOrderList1(Request $request)
  1530. {
  1531. $input=$request->all();
  1532. $status=$request->input('status','all');
  1533. $page_index=$request->input('page_index', 1);
  1534. $page_size=$request->input('page_size', 6);
  1535. $order_no=$request->input('order_no', null);
  1536. $num=$page_size*($page_index-1);
  1537. $where=$wheres=[];
  1538. if($status!='all'){
  1539. $where['status']=$status;
  1540. }
  1541. if($order_no){
  1542. if(strlen($order_no)<=3 && is_numeric($order_no)){
  1543. return $this->error('450001','请最少输入4个字搜索');
  1544. }
  1545. $user_ids=UserW::where(function($query)use($order_no){
  1546. $query->where('phone','like','%'.$order_no.'%')->orwhere('nickname','like','%'.$order_no.'%');
  1547. })->pluck('id');
  1548. $wheres=function($query)use($order_no,$user_ids){
  1549. $query->where('order_no','like','%'.$order_no.'%')->orWhereIn('user_id',$user_ids);
  1550. };
  1551. }
  1552. $store=Store::where('user_id',Auth::user()->id)->first();
  1553. $where['store_id']=$store->id;
  1554. $data=OrderW::with(['user:id,nickname,phone','order_cancel'=>function($query){
  1555. $query->where('using',1);}])->where($where)->where($wheres)->whereIn('apply_cancel',[0,1,3])
  1556. ->whereIn('is_refund',[0,1,2])
  1557. ->select('id','order_no','user_id','store_id','status','apply_cancel','is_refund','is_help','self_receive','total','account','is_pay','updated_at','created_at','snapshot')
  1558. ->orderByDesc('updated_at')->orderByDesc('id');
  1559. $count=$data->count();
  1560. $orders=$data->skip($num)->take($page_size)->get();
  1561. foreach($orders as $key=>$val){
  1562. if($val->status==3 && $val->is_refund > 0){
  1563. $order_refund = OrderRefundW::where('order_no',$val->order_no)->get();
  1564. if($order_refund){
  1565. $orders[$key]->refund_goods=$order_refund;
  1566. }
  1567. }
  1568. $goods=json_decode($val->snapshot,true);
  1569. foreach($goods as $k => $v){
  1570. $goods[$k]['img']= str_replace('api.app.jiuweiyun.cn','api.app.cliu.cc',$v['img']);
  1571. $goods[$k]['name'] = str_replace('健康', '', $v['name']);
  1572. }
  1573. $orders[$key]->goods= $goods;
  1574. }
  1575. return $this->success_list($orders,'成功',$count);
  1576. }
  1577. //获取订单列表
  1578. public function getOrderLists(Request $request)
  1579. {
  1580. $input=$request->all();
  1581. $status=$input['status'];
  1582. $page_index=$input['page_index'];
  1583. $page_size=$input['page_size'];
  1584. $order_no=$input['order_no'];
  1585. $num=$page_size*($page_index-1);
  1586. $where=$wheres=[];
  1587. if($status!='all'){
  1588. $where['status']=$status;
  1589. }
  1590. if($order_no){
  1591. $wheres=function($query)use($order_no){
  1592. $query->where('order_no','like','%'.$order_no.'%');
  1593. };
  1594. }
  1595. $store=Store::where('user_id',Auth::user()->id)->first();
  1596. $where['store_id']=$store->id;
  1597. $data=OrderW::with(['user:id,nickname,phone','order_cancel'=>function($query){
  1598. $query->where('using',1);}])->where($where)->where($wheres)->whereIn('apply_cancel',[0,1,3])
  1599. ->whereIn('is_refund',[0,1,2])
  1600. ->orderByDesc('updated_at')->orderByDesc('id');
  1601. $count=$data->count();
  1602. $orders=$data->skip($num)->take($page_size)->get();
  1603. foreach($orders as $key=>$val){
  1604. if($val->status==3 && $val->is_refund > 0){
  1605. $order_refund = OrderRefundW::where('order_no',$val->order_no)->get();
  1606. if($order_refund){
  1607. $orders[$key]->refund_goods=$order_refund;
  1608. }
  1609. }
  1610. $goods=OrderDetailW::with('goods:id,img,name,main_attr')->where('order_id',$val->id)
  1611. ->groupBy('goods_id')->select('goods_id','price',DB::raw('sum(num) as num'))->get();
  1612. foreach($goods as $k=>$v){
  1613. $goods[$k]->goods->imgs=str_replace('http://','https://',$v->goods->img);
  1614. }
  1615. $orders[$key]->goods=$goods;
  1616. }
  1617. return $this->success_list($orders,'成功',$count);
  1618. }
  1619. //获取退货订单详情
  1620. public function getRefundOrderDetail(Request $request){
  1621. $order_no=$request->input('order_no');
  1622. $order_refund=OrderRefundW::where('order_no',$order_no)->get();
  1623. foreach($order_refund as $key => $val){
  1624. $goods_ids = OrderDetailW::where('order_no', $val->refund_no)->groupBy('goods_id')->pluck('goods_id');
  1625. $goods = [];
  1626. foreach ($goods_ids as $k => $v) {
  1627. $goods[$k] = StoreGoods::where('id', $v)->first();
  1628. $goods[$k]->sku = OrderDetailW::where('order_no', $val->refund_no)->where('goods_id', $v)->get();
  1629. }
  1630. $order_refund[$key]->goods=$goods;
  1631. }
  1632. return $this->success($order_refund);
  1633. }
  1634. //获取id订单信息
  1635. public function getOrderInfo(Request $request)
  1636. {
  1637. $input=$request->all();
  1638. $id=$input['id'];
  1639. $order=OrderW::withTrashed()->with(['user:id,nickname,phone','address'])->where('id',$id)->first();
  1640. $goods_ids=OrderDetailW::where('order_no',$order->order_no)->groupBy('goods_id')->pluck('goods_id');
  1641. $goods=[];
  1642. foreach($goods_ids as $key=>$val){
  1643. $goods[$key]=StoreGoods::where('id',$val)->first();
  1644. $goods[$key]->sku=OrderDetailW::where('order_no',$order->order_no)->where('goods_id',$val)->get();
  1645. }
  1646. $order->goods=$goods;
  1647. return $this->success($order);
  1648. }
  1649. //根据订单号查询订单
  1650. public function getOrderNoInfo(Request $request)
  1651. {
  1652. $input=$request->all();
  1653. $order_no=$input['order_no'];
  1654. $order=OrderW::withTrashed()->with(['order_cancel','user:id,nickname,phone,avatar','address','store:id,name'])->where('order_no',$order_no)->first();
  1655. $agent_id=Auth::user()->id;
  1656. $store_id=Store::where('user_id',$agent_id)->value('id');
  1657. if($store_id!=$order->store_id){
  1658. return $this->error('450401','没有权限查看该订单');
  1659. }
  1660. if(empty($order)){
  1661. return $this->error('450001','订单号有误');
  1662. }
  1663. $goods_ids=OrderDetailW::where('order_no',$order->order_no)->groupBy('goods_id')->pluck('goods_id');
  1664. $goods=[];
  1665. foreach($goods_ids as $key=>$val){
  1666. $goods[$key]=StoreGoods::where('id',$val)->first();
  1667. $goods[$key]->imgs=str_replace('http://','https://',$goods[$key]->img);
  1668. $goods[$key]->sku=OrderDetailW::where('order_no',$order->order_no)->where('goods_id',$val)->get();
  1669. }
  1670. $order->goods=$goods;
  1671. $order->code=OrderCodeW::where('order_id',$order->id)->get();
  1672. if(in_array($order->store_id,[ 99, 102, 105])){//,101,102,105
  1673. $order->is_code=1;
  1674. }else{
  1675. $order->is_code=0;
  1676. }
  1677. if(isset($order->address)){
  1678. Config::set('app.key', 'base64:7yQSmGhLZ2/n5kbyVXAOiJ3DSIP8TifHE3nfOI4d5mU=');
  1679. $address=$order->address;
  1680. if($address->address_code){
  1681. try{
  1682. $order->address->address= Crypt::decryptString($address->address_code);
  1683. }catch(DecryptException $e){
  1684. Log::info($e->getMessage());
  1685. }
  1686. }
  1687. if($address->phone_code){
  1688. try{
  1689. $order->address->phone= Crypt::decryptString($address->phone_code);
  1690. }catch(DecryptException $e){
  1691. Log::info($e->getMessage());
  1692. }
  1693. }
  1694. }
  1695. return $this->success($order);
  1696. }
  1697. //回复评价
  1698. public function addComment(Request $request){
  1699. $input=$request->all();
  1700. $rules=[
  1701. 'content'=>'required|max:255',
  1702. ];
  1703. $message=[
  1704. 'content.required'=>'评价内容不能为空.',
  1705. 'content.max'=>'评价内容不能大于255个字符.'
  1706. ];
  1707. $validator = Validator::make($input,$rules,$message);
  1708. if($validator->fails()){
  1709. return $this->error('400013',$validator->errors()->first());
  1710. }
  1711. $store_id=Store::where('user_id',Auth::user()->id)->value('id');
  1712. $res=Comment::create([
  1713. 'content'=>$input['content'],
  1714. 'comment_id'=>$input['comment_id'],
  1715. 'store_id'=>$store_id,
  1716. 'is_reply'=>2,
  1717. 'is_see'=>0
  1718. ]);
  1719. if($res){
  1720. return $this->success([]);
  1721. }else{
  1722. return $this->error();
  1723. }
  1724. }
  1725. //查看所有评价
  1726. public function getComment(Request $request){
  1727. $input=$request->all();
  1728. $page_index=$input['page_index'];
  1729. $page_size=$input['page_size'];
  1730. $num=$page_size*($page_index-1);
  1731. $store_id=Store::where('user_id',Auth::user()->id)->value('id');
  1732. $count= Comment::where('store_id',$store_id)->where('comment_id',0)->count();
  1733. $list= Comment::with(['comment','store:id,name,img','user:id,avatar,nickname,phone'])
  1734. ->where('store_id',$store_id)->where('comment_id',0)
  1735. ->orderByDesc('id')
  1736. ->skip($num)->take($page_size)->get();
  1737. return $this->success_list($list,'',$count);
  1738. }
  1739. //用户自提
  1740. public function oneSelfTake(Request $request){
  1741. $order_no=$request->input('order_no');
  1742. $order=OrderW::with('address')->where('order_no',$order_no)->first();
  1743. $order->status=2; //已备货,可自提
  1744. $order->express_time = date("Y-m-d H:i:s"); //备货完成时间
  1745. $res=$order->save();
  1746. if($res){
  1747. /* 已备货通知 */
  1748. $user=UserW::where('id',$order->user_id)->first();
  1749. if($user->openId){
  1750. $address=null;
  1751. if($order->address){
  1752. $address=$order->address->province.$order->address->city.$order->address->area.$order->address->address;
  1753. }
  1754. $mes['openid']=$user->openId;
  1755. $mes['data']=[
  1756. 'first' => '您的订单已完成备货,请前往提货',
  1757. 'keyword1' => $order_no,
  1758. 'keyword2' => $order->created_at,
  1759. 'keyword3' => '已备货,可自提',
  1760. 'keyword4' => $address,
  1761. 'remark' => '点击链接进入系统,查看详情',
  1762. ];
  1763. event(new TipPickUpEvent($mes));
  1764. }
  1765. return $this->success([]);
  1766. }else{
  1767. return $this->error();
  1768. }
  1769. }
  1770. //获取所有快递公司信息
  1771. public function getExpressCode(){
  1772. return $this->success(ExpressHandler::getExpressCode());
  1773. }
  1774. //识别扫码信息
  1775. public function scanCodeInfo(Request $request)
  1776. {
  1777. $code=$request->input('code');
  1778. if(!strpos($code,'://')){
  1779. $info=Select::with('select_good')->select('id','good_select_id','security_code','code','is_lowest')->where('code',$code)->first();
  1780. if(empty($info)){
  1781. return $this->error('450001','未识别到二维码信息');
  1782. }
  1783. if($info->is_lowest==0){
  1784. return $this->error('450001','请扫描单个包装盒二维码');
  1785. }
  1786. if(empty($info->good_select_id)){
  1787. return $this->error('450001','该二维码没有绑定商品信息');
  1788. }
  1789. }else{
  1790. $file=file_get_contents($code);
  1791. Log::info('0000------------------0000--'.$code);
  1792. preg_match('/<span>产品名称:<\/span> 大卫博士健康内裤((.*?))/',$file,$result);
  1793. if(!in_array($result[1],['精装版','简约版','老人版','纯棉老人版','高腰版','青春版'])){
  1794. return $this->error('450001','该二维码没有绑定商品信息');
  1795. }
  1796. switch($result[1]){
  1797. case "精装版":
  1798. $goods_id=1;
  1799. break;
  1800. case "简约版":
  1801. $goods_id=2;
  1802. break;
  1803. case "老人版":
  1804. case "高腰版":
  1805. $goods_id=3;
  1806. break;
  1807. case "纯棉老人版":
  1808. $goods_id=4;
  1809. break;
  1810. case "青春版":
  1811. $goods_id=25;
  1812. break;
  1813. default:
  1814. $goods_id=null;
  1815. }
  1816. $info['good_select_id']=$goods_id;
  1817. $info['security_code']=substr($code,-12);;
  1818. $info['code']=$code;
  1819. }
  1820. $code=substr($code,strrpos($code,'?bid='));
  1821. $order_code = OrderCodeW::where('code',$code)->first();
  1822. if($order_code){
  1823. return $this->error('450001','该二维码已发货');
  1824. }
  1825. return $this->success($info);
  1826. }
  1827. //提交发货扫码信息
  1828. public function submitScanCodeInfo(Request $request)
  1829. {
  1830. $order_no=$request->input('order_no');
  1831. $code=$request->input('code');
  1832. $order=OrderW::where('order_no',$order_no)->first();
  1833. Log::info($code);
  1834. Log::info($order_no);
  1835. DB::beginTransaction();
  1836. try{
  1837. foreach($code as $val){
  1838. if(strpos($val,'://')){
  1839. $order_code = OrderCodeW::where('code',substr($val,strrpos($val,'?bid=')))->first();
  1840. }else{
  1841. $order_code = OrderCodeW::where('code',$val)->first();
  1842. }
  1843. if($order_code){
  1844. if($order_code->order_id != $order->id){
  1845. throw new Exception("二维码:".$order_code->security_code." 已发货");
  1846. }
  1847. }else{
  1848. if(!strpos($val,'://')){
  1849. $info=Select::with('select_good')->select('id','good_select_id','security_code','code','is_lowest')->where('code',$val)->first();
  1850. OrderCodeW::create([
  1851. 'store_id' => $order->store_id,
  1852. 'user_id' => $order->user_id,
  1853. 'order_id' => $order->id,
  1854. 'code' => $val,
  1855. 'security_code' => $info->security_code,
  1856. 'good_select_id' => $info->good_select_id,
  1857. 'good_name' => $info->select_good->good_name,
  1858. ]);
  1859. }else{
  1860. $file=file_get_contents($val);
  1861. preg_match('/<span>产品名称:<\/span> 大卫博士健康内裤((.*?))/',$file,$result);
  1862. if(!in_array($result[1],['精装版','简约版','老人版','纯棉老人版','高腰版','青春版'])){
  1863. throw new Exception("二维码没有绑定商品信息");
  1864. }
  1865. $security_code=substr($val,-12);
  1866. switch($result[1]){
  1867. case "精装版":
  1868. $goods_id=1;
  1869. break;
  1870. case "简约版":
  1871. $goods_id=2;
  1872. break;
  1873. case "老人版":
  1874. case "高腰版":
  1875. $goods_id=3;
  1876. break;
  1877. case "纯棉老人版":
  1878. $goods_id=4;
  1879. break;
  1880. case "青春版":
  1881. $goods_id=25;
  1882. break;
  1883. default:
  1884. $goods_id=null;
  1885. }
  1886. OrderCodeW::create([
  1887. 'store_id' => $order->store_id,
  1888. 'user_id' => $order->user_id,
  1889. 'order_id' => $order->id,
  1890. 'code' => substr($val,strrpos($val,'?bid=')),
  1891. 'security_code' => $security_code,
  1892. 'good_select_id' => $goods_id,
  1893. 'good_name' => '大卫博士'.$result[1],
  1894. ]);
  1895. }
  1896. }
  1897. }
  1898. DB::commit();
  1899. return $this->success([]);
  1900. }catch(\Exception $e){
  1901. DB::rollBack();
  1902. Log::info($e->getMessage());
  1903. return $this->error($e->getMessage());
  1904. }
  1905. }
  1906. // 删除发货码
  1907. public function deleteScanCode(Request $request)
  1908. {
  1909. $ids=$request->input('ids');
  1910. $res=OrderCodeW::whereIn('id',$ids)->delete();
  1911. if($res){
  1912. return $this->success([]);
  1913. }else{
  1914. return $this->error();
  1915. }
  1916. }
  1917. //获取客户所有订单
  1918. public function getNoSendOrder(Request $request){
  1919. $order_no=$request->input('order_no');
  1920. $order=OrderW::where('order_no',$order_no)->first();
  1921. $no_send_orders=OrderW::with('user:id,nickname,phone,avatar')
  1922. ->where('store_id',$order->store_id)->where('user_id',$order->user_id)
  1923. ->where('status',1)->whereIn('apply_cancel',[0,3])->get();
  1924. foreach($no_send_orders as $key=>$val){
  1925. $goods_ids=OrderDetailW::where('order_no',$val->order_no)->groupBy('goods_id')->pluck('goods_id');
  1926. $goods=[];
  1927. foreach($goods_ids as $k=>$v){
  1928. $goods[$k]=StoreGoods::where('id',$v)->first();
  1929. $goods[$k]->sku=OrderDetailW::where('order_no',$val->order_no)->where('goods_id',$v)->get();
  1930. }
  1931. $no_send_orders[$key]->goods=$goods;
  1932. }
  1933. return $this->success($no_send_orders);
  1934. }
  1935. //上传订单快递号
  1936. public function addOrderExpressNo(Request $request){
  1937. $input=$request->all();
  1938. $rules=[
  1939. 'express_no' =>'required',
  1940. 'express_company'=>'required',
  1941. 'express_time' =>'required'
  1942. // 'address_id' =>'required'
  1943. ];
  1944. $message=[
  1945. 'express_no.required' =>'发货单号不能为空.',
  1946. 'express_company.required'=>'物流公司不能为空.',
  1947. 'express_time.required' =>'发货时间不能为空.',
  1948. // 'address_id.required' =>'收货地址不能为空.',
  1949. ];
  1950. $validator = Validator::make($input,$rules,$message);
  1951. if($validator->fails()){
  1952. return $this->error('400013',$validator->errors()->first());
  1953. }
  1954. $status=OrderW::where('order_no',$input['order_no'])->value('status');
  1955. if($status > 1){
  1956. return $this->error('450001','该订单已发货');
  1957. }
  1958. $prefix=mb_substr($input['express_no'],0,2);
  1959. if(strtoupper($prefix)=='DD' || strtoupper($prefix)=='DX'){
  1960. return $this->error('450001','物流单号不正确,你填的是订单号,请重新填写');
  1961. }
  1962. $order_nos=explode(',',$input['order_no']);
  1963. // $address_id=$input['address_id'];
  1964. $express_company=$input['express_company'];
  1965. $express_code=$input['express_code'];
  1966. $express_phone=$input['express_phone'];
  1967. $express_time=$input['express_time'];
  1968. $express_no=str_replace(' ','', $input['express_no']);
  1969. $data=[
  1970. // 'address_id'=>$address_id,
  1971. 'self_receive'=>0,
  1972. 'express_no'=>$express_no,
  1973. 'express_company'=>$express_company,
  1974. 'express_code'=>$express_code,
  1975. 'express_state'=>0,
  1976. 'express_phone'=>$express_phone,
  1977. 'express_time'=>$express_time,
  1978. 'status'=>2
  1979. ];
  1980. try{
  1981. DB::connection('mysql_w')->transaction(function()use($order_nos,$data){
  1982. OrderW::whereIn('order_no',$order_nos)->update($data);
  1983. },5);
  1984. $order=OrderW::with('address')->where('order_no',$order_nos[0])->first();
  1985. $user=UserW::where('id',$order->user_id)->first();
  1986. //已发货短信通知
  1987. Config::set('app.key', 'base64:7yQSmGhLZ2/n5kbyVXAOiJ3DSIP8TifHE3nfOI4d5mU=');
  1988. if(strstr($user->phone,'****' )){
  1989. if($user->phone_code){
  1990. $phone = Crypt::decryptString($user->phone_code);
  1991. }else{
  1992. $end = substr($user->openId1, -4);
  1993. $phone = str_replace('****', $end, $user->phone);
  1994. }
  1995. }else {
  1996. $phone = $user->phone;
  1997. }
  1998. $config=config('easysms');
  1999. $easySms = new EasySms($config);
  2000. $express=$express_company.$express_no;
  2001. $content="【大卫博士】您购买的大卫博士健康内裤已发货,快递单号是{$express},请注意查收。";
  2002. try{
  2003. $easySms->send($phone, ['content' =>$content ]);
  2004. Log::info('物流发货短信正常');
  2005. } catch (\Overtrue\EasySms\Exceptions\NoGatewayAvailableException $exception) {
  2006. $message = $exception->getException('qcloud')->getMessage();
  2007. Log::info($phone.'物流发货短信异常:'.json_encode($message));
  2008. }
  2009. // event(new EnoughFive($order->id));
  2010. //已发货公众号通知
  2011. if($user->openId){
  2012. Log::info($user->openId);
  2013. if($order->address){
  2014. $address=$order->address->name.' '.$order->address->phone.' '.$order->address->province.$order->address->city.$order->address->area.$order->address->address;
  2015. }else{
  2016. $address='无收件信息';
  2017. }
  2018. $mes['openid']=$user->openId;
  2019. $mes['data']=[
  2020. 'first' => '您的订单已发货,请注意查收',
  2021. 'keyword1' => $input['order_no'],
  2022. 'keyword2' => $express_time,
  2023. 'keyword3' => $express_company,
  2024. 'keyword4' => $express_no,
  2025. 'keyword5' => $address,
  2026. ];
  2027. Log::info(json_encode($mes));
  2028. event(new TipSendingEvent($mes));
  2029. }
  2030. return $this->success([]);
  2031. }catch(\Exception $e){
  2032. return $this->error('450001',$e->getMessage());
  2033. }
  2034. // OrderExpressW::create([
  2035. // 'order_no'=>$input['order_no'],
  2036. // 'express_no'=>str_replace(' ','', $input['express_no']),
  2037. // 'express_company'=>$input['express_company'],
  2038. // 'express_code'=>$input['express_code'],
  2039. // 'express_state'=>0,
  2040. // 'express_phone'=>$input['express_phone'],
  2041. // 'express_receive_time'=>null,
  2042. // ]);
  2043. }
  2044. //查询订单物流信息
  2045. public function getOrderExpress(Request $request){
  2046. $order_no=$request->input('order_no');
  2047. $order=OrderW::with('address')->where('order_no',$order_no)->first();
  2048. if(empty($order)){
  2049. return $this->error('450001','订单信息有误');
  2050. }
  2051. if($order->express_state==3){ //已签收
  2052. $express=json_decode($order->express_info,true);
  2053. }else{ //未签收
  2054. $CustomerName = null;
  2055. if($order->express_code =='SF'){
  2056. $CustomerName = substr($order->express_phone,-4);
  2057. }
  2058. $express=new ExpressHandler();
  2059. $express=$express->search($order->express_no, $order->express_code, $order->order_no, $CustomerName);
  2060. $express=json_decode(json_encode($express),'true');
  2061. if(isset($express['Traces']) && !empty($express['Traces'])){
  2062. foreach ($express['Traces'] as $key=>$val){
  2063. $express['Traces'][$key]['AcceptTime']=date("Y-m-d H:i:s",substr($val['AcceptTime'],0,strlen($val['AcceptTime'])-3));
  2064. }
  2065. OrderW::where('order_no',$order_no)->update([
  2066. 'express_info'=>json_encode($express),
  2067. 'express_receive_time'=>array_pop($express['Traces'])['AcceptTime'],
  2068. 'express_state'=>$express['State']
  2069. ]);
  2070. }
  2071. }
  2072. $data['express']=$express;
  2073. $data['express_state']=$order->express_state;
  2074. $data['express_code']=$order->express_code;
  2075. $data['express_company']=$order->express_company;
  2076. $data['express_no']=$order->express_no;
  2077. $data['express_time']=$order->express_time;
  2078. $data['express_phone']=$order->express_phone;
  2079. return $this->success($data);
  2080. }
  2081. //修改店铺地址
  2082. public function editStoreAddress(Request $request){
  2083. $user_id=Auth::user()->id;
  2084. // $user=User::where('id',$user_id)->first();
  2085. // $store_id=Store::where('user_id',$user_id)->value('id');
  2086. $res=Store::where('user_id',$user_id)
  2087. ->update([
  2088. 'province'=>$request->input('province'),
  2089. 'city'=>$request->input('city'),
  2090. 'area'=>$request->input('area'),
  2091. 'address'=>$request->input('address'),
  2092. ]);
  2093. // $address=AddressW::where('store_id',$store_id)->first();
  2094. // if($address){
  2095. // $address->province=$request->input('province');
  2096. // $address->city=$request->input('city');
  2097. // $address->area=$request->input('area');
  2098. // $address->address=$request->input('address');
  2099. // $res=$address->save();
  2100. // }else{
  2101. // $res=AddressW::create([
  2102. // 'store_id'=>$store_id,
  2103. // 'name'=>$user->nickname,
  2104. // 'phone'=>$user->mobile,
  2105. // 'province'=>$request->input('province'),
  2106. // 'city'=>$request->input('city'),
  2107. // 'area'=>$request->input('area'),
  2108. // 'address'=>$request->input('address'),
  2109. // 'is_default'=>0
  2110. // ]);
  2111. // }
  2112. if($res){
  2113. return $this->success([]);
  2114. }else{
  2115. return $this->error();
  2116. }
  2117. }
  2118. //获取微信位置授权
  2119. public function getSignPackage(){
  2120. $app=app('wechat.official_account');
  2121. $url='http://api.app.cliu.cc/api/gzh';
  2122. $app->jssdk->setUrl($url);
  2123. $data=$app->jssdk->buildConfig(
  2124. array('onMenuShareAppMessage','onMenuShareTimeline',
  2125. 'openLocation','getLocation','chooseImage',
  2126. 'uploadImage', 'downloadImage','scanQRCode',
  2127. 'updateAppMessageShareData', 'updateTimelineShareData','hideMenuItems','openBusinessView','checkJsApi'),
  2128. $debug = false, $beta = false, $json = true,
  2129. $openTagList = ['wx-open-launch-app']);
  2130. return $this->success($data);
  2131. }
  2132. //根据经纬度获取地理位置信息
  2133. public function getAddressInfo(Request $request){
  2134. $location=$request->input('location');
  2135. $key='b019688375d389c1e55150985e90f816';
  2136. $client=new Client();
  2137. $url='https://restapi.amap.com/v3/geocode/regeo?key='.$key.'&location='.$location;
  2138. $result=$client->request('GET',$url);
  2139. $res = json_decode($result->getBody()->getContents());
  2140. return $this->success($res);
  2141. }
  2142. //提交退货订单
  2143. public function submitRefundOrder(Request $request)
  2144. {
  2145. $sku = $request->input('sku');
  2146. $reason = $request->input('reason');
  2147. $reason_all = $request->input('reason_all');
  2148. $img = $request->input('img');
  2149. $origin_order_no=$request->input('origin_order_no');
  2150. $origin_order=OrderW::where('order_no',$origin_order_no)->first();
  2151. if($origin_order->is_refund==1){
  2152. return $this->error('450001','该订单存在正在审核中的退货订单');
  2153. }
  2154. if($origin_order->is_refund==3){
  2155. return $this->error('450001','该订单已全部退货');
  2156. }
  2157. $refund_no=OrderW::order_no('th');
  2158. $account = $total = 0;
  2159. $list = $sku_ids = [];
  2160. foreach($sku as $key=>$val){
  2161. if($val[1] > 0){
  2162. $order_detail=OrderDetailW::with(['goods'])->where('id',$val[0])->first();
  2163. if($order_detail->num < $val[1]){
  2164. $num = $order_detail->num;
  2165. }else{
  2166. $num = $val[1];
  2167. }
  2168. $list[$key]['num']=$num;
  2169. $list[$key]['price']=$order_detail->price;
  2170. $list[$key]['account']=$order_detail->price * $num;
  2171. $list[$key]['order_no']=$refund_no;
  2172. $list[$key]['goods_id']=$order_detail->goods_id;
  2173. $list[$key]['sku_id']=$order_detail->sku_id;
  2174. $list[$key]['size']=$order_detail->size;
  2175. $list[$key]['type']=$order_detail->type;
  2176. $list[$key]['style']=2;
  2177. $list[$key]['created_at']=date("Y-m-d H:i:s");
  2178. $list[$key]['updated_at']=date("Y-m-d H:i:s");
  2179. $total += $num;
  2180. $account += $order_detail->price * $num;
  2181. }
  2182. }
  2183. $data=[
  2184. 'refund_no'=>$refund_no,
  2185. 'order_no'=>$origin_order_no,
  2186. 'store_id'=>$origin_order->store_id,
  2187. 'user_id'=>$origin_order->user_id,
  2188. 'reason'=>$reason,
  2189. 'reason_all'=>$reason_all,
  2190. 'total'=>$total,
  2191. 'account'=>$account,
  2192. 'img'=>json_encode($img),
  2193. 'status'=>0,
  2194. 'op_name'=> Auth::user()->nickname,
  2195. 'op_type'=>2,
  2196. 'remark'=>null,
  2197. ];
  2198. try{
  2199. DB::connection('mysql_w')->transaction(function ()use($list,$data,$origin_order_no,$account){
  2200. OrderDetailW::insert($list);
  2201. OrderRefundW::create($data);
  2202. OrderW::where('order_no',$origin_order_no)->update(['is_refund'=>1]);
  2203. },5);
  2204. //申请退货提醒
  2205. $user=UserW::where('id',$origin_order->user_id)->first();
  2206. if($user->openId){
  2207. $data['openid']=$user->openId;
  2208. $data['data']=[
  2209. 'first' => '商户提交了新的退单信息',
  2210. 'keyword1' => $origin_order->order_no,
  2211. 'keyword2' => '商户退货,退款金额:'.number_format($account,2)
  2212. ];
  2213. event(new AuthRefundTip($data));
  2214. }
  2215. return $this->success($refund_no);
  2216. }catch(\Exception $e){
  2217. return $this->error('450001',$e->getMessage());
  2218. }
  2219. }
  2220. //获取退款订单原始信息
  2221. public function getOriginOrderInfo(Request $request)
  2222. {
  2223. $order_no=$request->input('order_no');
  2224. $data=OrderW::with(['address','order_cancel'=>function($query){$query->where('using',1);},'store:id,name,img,phone']);
  2225. $order=$data->where('order_no',$order_no)->first()->toArray();
  2226. if(empty($order)){
  2227. return $this->error('450001','订单不存在');
  2228. }
  2229. $goods_ids=OrderDetailW::where('order_no',$order['order_no'])->groupBy('goods_id')->pluck('goods_id');
  2230. $goods=[];
  2231. foreach($goods_ids as $key=>$val){
  2232. $goods[$val]=StoreGoods::select('id','name','img','main_attr')->where('id',$val)->first()->toArray();
  2233. $order_details=OrderDetailW::where('order_no',$order['order_no'])->where('goods_id',$val)->get()->toArray();
  2234. if(count($order_details)>0){
  2235. $sku=[];
  2236. foreach($order_details as $k=>$v){
  2237. $sku[$v['sku_id']]=$v;
  2238. }
  2239. $goods[$val]['sku']=$sku;
  2240. $goods[$val]['price']=$order_details[0]['price'];
  2241. }
  2242. }
  2243. $order['goods']=$goods;
  2244. $refund_nos=OrderRefundW::where('order_no',$order_no)->whereIn('status',[0,1,3])->pluck('refund_no');
  2245. $refund_goods_ids=OrderDetailW::whereIn('order_no',$refund_nos)->groupBy('goods_id')->pluck('goods_id');
  2246. $refunds=[];
  2247. foreach($refund_goods_ids as $key=>$val){
  2248. $refunds[$val]=StoreGoods::select('id','name','img','main_attr')->where('id',$val)->first()->toArray();
  2249. $refunds_details=OrderDetailW::select('goods_id','sku_id','type','size', DB::raw('sum(num) as num'))
  2250. ->whereIn('order_no',$refund_nos)->where('goods_id',$val)->groupBy('sku_id')->get()->toArray();
  2251. if(count($refunds_details)>0){
  2252. $sku=[];
  2253. foreach($refunds_details as $k=>$v){
  2254. $sku[$v['sku_id']]=$v;
  2255. }
  2256. $refunds[$val]['sku']=$sku;
  2257. }
  2258. }
  2259. $order['refunds']=$refunds;
  2260. $products=[];
  2261. foreach($goods as $key=>$val){
  2262. $products[$key]= $goods[$key];
  2263. $sku=[];
  2264. foreach($val['sku'] as $k=>$v){
  2265. if(empty($refunds[$key]['sku'][$k])){
  2266. unset($products[$key]['sku']);
  2267. $sku[$k]= $goods[$key]['sku'][$k];
  2268. }else{
  2269. if($goods[$key]['sku'][$k]['num'] > $refunds[$key]['sku'][$k]['num']){
  2270. unset($products[$key]['sku']);
  2271. $sku[$k] = $goods[$key]['sku'][$k];
  2272. $sku[$k]['num']=$goods[$key]['sku'][$k]['num'] - $refunds[$key]['sku'][$k]['num'];
  2273. }else{
  2274. unset($products[$key]['sku']);
  2275. }
  2276. }
  2277. }
  2278. $products[$key]['sku']= $sku;
  2279. if(empty($products[$key]['sku'])){
  2280. unset($products[$key]);
  2281. }
  2282. }
  2283. $order['products']=$products;
  2284. return $this->success($order);
  2285. }
  2286. //上传退货图片
  2287. public function uploadRefundOrderImg(Request $request){
  2288. $path_url = 'public/refund';
  2289. $path = $request->file('img')->store($path_url);
  2290. if($path){
  2291. $url = env('APP_URL'). Storage::url($path);
  2292. return $this->success($url);
  2293. }
  2294. return $this->error();
  2295. }
  2296. //取消退货审核
  2297. public function cancelRefundOrder(Request $request){
  2298. $refund_id=$request->input('refund_id');
  2299. $refund=OrderRefundW::where('id',$refund_id)->first();
  2300. if(empty($refund)){
  2301. return $this->error('450001','退货单不存在');
  2302. }
  2303. try{
  2304. DB::connection('mysql_w')->transaction(function()use($refund){
  2305. OrderRefundW::where('id',$refund->id)->delete();
  2306. $auth_count=OrderRefundW::where('order_no',$refund->order_no)->where('status',0)->count();
  2307. if($auth_count>=1){
  2308. OrderW::where('order_no',$refund->order_no)->update([
  2309. 'is_refund'=>1
  2310. ]);
  2311. }else{
  2312. $count=OrderRefundW::where('order_no',$refund->order_no)->where('status',1)->count();
  2313. if($count>=1){
  2314. OrderW::where('order_no',$refund->order_no)->update([
  2315. 'is_refund'=>2
  2316. ]);
  2317. }else{
  2318. OrderW::where('order_no',$refund->order_no)->update([
  2319. 'is_refund'=>0
  2320. ]);
  2321. }
  2322. }
  2323. },5);
  2324. return $this->success([]);
  2325. }catch(\Exception $e){
  2326. return $this->error('450001',$e->getMessage());
  2327. }
  2328. }
  2329. //上传签名图片
  2330. public function uploadQianMingImg(Request $request){
  2331. $base64_img=$request->input('img');
  2332. Log::error('签名');
  2333. // preg_match('/^(data:\s*image\/(\w+);base64,)/',$base64_img,$res);
  2334. // $base64_img=base64_decode(str_replace($res[1],'', $base64_img));
  2335. // 获取七牛云配置信息
  2336. $config = [
  2337. 'driver' => 'qiniu',
  2338. 'domain' => 'http://image.chuliu.cc', //七牛域名
  2339. 'access_key' => 'cIbo9JAqHBgO6uw97gT5fJOlEHiTiGrpB84unVEn', //AccessKey
  2340. 'secret_key' => '4f0nTNNrvzOsFc6Rz0GC5DntiJRnk2GcfkyJFNQp', //SecretKey
  2341. 'bucket' => 'daweiboshi-app', //Bucket名字
  2342. 'dirname'=> 'daweiboshi-weidian'
  2343. ];
  2344. $auth = new Auths($config['access_key'], $config['secret_key']);
  2345. // 生成上传 Token
  2346. $token = $auth->uploadToken($config['bucket']);
  2347. $filename=$this->randomKeys(18).'.jpg';
  2348. $dirname=$config['dirname'];
  2349. // 初始化 UploadManager 对象并进行文件的上传。
  2350. $uploadMgr = new UploadManager();
  2351. // 调用 UploadManager 的 putFile 方法进行文件的上传。
  2352. $pathname= $dirname.'/qianming/'.date('Ymd').'/'.$filename;
  2353. try{
  2354. $uploadMgr->putFile($token, $pathname, $base64_img);
  2355. }catch(\Exception $e){
  2356. return $this->error('450001',$e->getMessage(),$e->getMessage());
  2357. }
  2358. // 获取文件完整路径
  2359. $url = $config['domain'].'/'.$pathname;
  2360. if ($url){
  2361. return $this->success($url);
  2362. }
  2363. return $this->error();
  2364. }
  2365. function randomKeys($length){
  2366. $pattern = '1234567890abcdefghijklmnopqrstuvwxyz';
  2367. $key='';
  2368. for($i=0;$i<$length;$i++)
  2369. {
  2370. $key .= $pattern{mt_rand(0,strlen($pattern)-1)};//生成php随机数
  2371. }
  2372. return $key;
  2373. }
  2374. //商户确认收货
  2375. public function agentSureReceiveOrder(Request $request){
  2376. $order_no=$request->input('order_no');
  2377. $order=OrderW::where('order_no',$order_no)->first();
  2378. if($order->status==3){
  2379. return $this->error('450001','订单已完成');
  2380. }
  2381. try{
  2382. DB::connection('mysql_w')->transaction(function()use($order_no,$order,$request){
  2383. $order->status=3;
  2384. $order->order_status=2;
  2385. $order->self_receive=0;//收货
  2386. $order->express_receive_time=date("Y-m-d H:i:s");//订单签收时间
  2387. $order->save();
  2388. },5);
  2389. // event(new FinishAccount($order_no));
  2390. if($order->pay_type != 3){
  2391. event(new FinishAccount($order_no));
  2392. }else{
  2393. OrderW::where('order_no',$order->order_no)->update(['is_finish'=>1,'finish_no'=>$order->order_no]);
  2394. }
  2395. $user=UserW::where('id',$order->user_id)->first();
  2396. //已签收短信通知
  2397. Config::set('app.key', 'base64:7yQSmGhLZ2/n5kbyVXAOiJ3DSIP8TifHE3nfOI4d5mU=');
  2398. if(strstr($user->phone,'****' )){
  2399. if($user->phone_code){
  2400. $phone = Crypt::decryptString($user->phone_code);
  2401. }else{
  2402. $end = substr($user->openId1, -4);
  2403. $phone = str_replace('****', $end, $user->phone);
  2404. }
  2405. }else {
  2406. $phone = $user->phone;
  2407. }
  2408. $config=config('easysms');
  2409. $easySms = new EasySms($config);
  2410. $content="【大卫博士】您购买的大卫博士健康内裤被商户标记为确认签收。若已收到货物,请忽略此短信;若没有收到,请及时联系商户查询。 ";
  2411. // $content="【大卫博士】您购买的大卫博士健康内裤被代理标记为确认签收。若已收到货物,请忽略此短信;若没有收到,请及时联系代理商查询。 ";
  2412. try{
  2413. $easySms->send($phone, ['content' =>$content ]);
  2414. Log::info('确认收货短信正常');
  2415. } catch (\Overtrue\EasySms\Exceptions\NoGatewayAvailableException $exception) {
  2416. $message = $exception->getException('qcloud')->getMessage();
  2417. Log::info($phone.'确认收货短信异常:'.json_encode($message));
  2418. }
  2419. return $this->success([]);
  2420. }catch(\Exception $e){
  2421. Log::info('签收失败2---'.json_encode($e->getMessage()));
  2422. return $this->error('450001',$e->getMessage());
  2423. }
  2424. }
  2425. //商户端确认收货,客户当面签收
  2426. public function sureReceiveOrder(Request $request){
  2427. $signature=$request->input('signature');
  2428. $order_nos=explode(',',$request->input('order_no'));
  2429. $ors=OrderW::whereIn('order_no',$order_nos)->where('status',3)->get();
  2430. Log::info($ors);
  2431. if(count($ors)>0){
  2432. return $this->error('450001','存在已完成订单');
  2433. }
  2434. Log::info(json_encode($request->input()));
  2435. try{
  2436. $order=OrderW::where('order_no',$order_nos[0])->first();
  2437. $user=UserW::where('id',$order->user_id)->first();
  2438. DB::connection('mysql_w')
  2439. ->transaction(function()use($order_nos,$order,$user,$signature,$request){
  2440. $info['status']=3;
  2441. $info['order_status']=0;
  2442. $info['self_receive']=1;//送货上门
  2443. $info['express_receive_time']=date("Y-m-d H:i:s");//订单签收时间
  2444. $info['signature']=$signature;
  2445. //以下单所填地址为准
  2446. // if(empty($order->address_id)){
  2447. // $province=$request->input('province');
  2448. // if(is_array($province) && !empty($province)){
  2449. // $province=implode('',$province);
  2450. // }
  2451. // if(is_array($province) && empty($province)){
  2452. // $province='';
  2453. // }
  2454. // $city=$request->input('city');
  2455. // if(is_array($city) && !empty($city)){
  2456. // $city=implode('',$city);
  2457. // }
  2458. // if(is_array($city) && empty($city)){
  2459. // $city='';
  2460. // }
  2461. // $area=$request->input('area');
  2462. // if(is_array($area) && !empty($area)){
  2463. // $area=implode('',$area);
  2464. // }
  2465. // if(is_array($area) && empty($area)){
  2466. // $area='';
  2467. // }
  2468. // Log::info('dddd-------dddd'.$province.'---'.$city.'---'.$area);
  2469. //
  2470. // $address=AddressW::where('user_id',$order->user_id)
  2471. // ->where('province',$province)->where('city',$city)
  2472. // ->where('area',$area)->first();
  2473. // if($address){
  2474. // $info['address_id']=$address->id;
  2475. // }else{
  2476. // $res=AddressW::create([
  2477. // 'name'=>$user->nickname,
  2478. // 'phone'=>$user->phone,
  2479. // 'user_id'=>$order->user_id,
  2480. // 'store_id'=>$order->store_id,
  2481. // 'province'=>$province,
  2482. // 'city'=>$city,
  2483. // 'area'=>$area,
  2484. // 'type'=>3,
  2485. // 'is_default'=>0,
  2486. // 'remark'=>'自动定位',
  2487. // ]);
  2488. // $info['address_id']=$res->id;
  2489. // }
  2490. // }
  2491. OrderW::whereIn('order_no',$order_nos)->update($info);
  2492. },5);
  2493. foreach($order_nos as $val){
  2494. // event(new FinishAccount($val));
  2495. $oro=OrderW::where('order_no',$val)->first();
  2496. if($oro->pay_type != 3){
  2497. event(new FinishAccount($val));
  2498. }else{
  2499. OrderW::where('order_no',$val)->update(['is_finish'=>1,'finish_no'=>$val]);
  2500. }
  2501. }
  2502. //已签收短信通知
  2503. Config::set('app.key', 'base64:7yQSmGhLZ2/n5kbyVXAOiJ3DSIP8TifHE3nfOI4d5mU=');
  2504. if(strstr($user->phone,'****' )){
  2505. if($user->phone_code){
  2506. $phone = Crypt::decryptString($user->phone_code);
  2507. }else{
  2508. $end = substr($user->openId1, -4);
  2509. $phone = str_replace('****', $end, $user->phone);
  2510. }
  2511. }else {
  2512. $phone = $user->phone;
  2513. }
  2514. $config=config('easysms');
  2515. $easySms = new EasySms($config);
  2516. $content="【大卫博士】您购买的大卫博士健康内裤已由你本人确认签收,谢谢。";
  2517. try{
  2518. $easySms->send($phone, ['content' =>$content ]);
  2519. Log::info('客户当面签收短信正常');
  2520. } catch (\Overtrue\EasySms\Exceptions\NoGatewayAvailableException $exception) {
  2521. $message = $exception->getException('qcloud')->getMessage();
  2522. Log::info($phone.'客户当面签收短信异常:'.json_encode($message));
  2523. }
  2524. // event(new EnoughFive($order->id));
  2525. //签收公众号提醒
  2526. if($user->openId){
  2527. $data['openid']=$user->openId;
  2528. $data['data']=[
  2529. 'first' => '您的订单已被当面签收,如果没有请联系商户',
  2530. 'keyword1' => $request->input('order_no'),
  2531. 'keyword2' => date('Y-m-d H:i:s')
  2532. ];
  2533. event(new ReceivingEvent($data));
  2534. }
  2535. return $this->success([]);
  2536. }catch(\Exception $e){
  2537. Log::info('签收失败1---'.$e->getMessage());
  2538. return $this->error('450001',$e->getMessage());
  2539. }
  2540. }
  2541. //获取客户信息
  2542. public function getUser(Request $request){
  2543. $user_id=$request->input('user_id');
  2544. $user=UserW::where('id',$user_id)->first();
  2545. $store_id=Store::where('user_id',Auth::user()->id)->value('id');
  2546. $vip_log=VipLogW::where('user_id',$user->id)->where('store_id',$store_id)->first();
  2547. if($vip_log){
  2548. $user->is_vip=1;
  2549. }else{
  2550. $user->is_vip=0;
  2551. }
  2552. $orders=OrderW::where('store_id',$store_id)->where('user_id',$user_id)->get();
  2553. if(count($orders)==0){//判断客户在店铺有没有单子
  2554. $user->has_order=0;
  2555. }else{
  2556. $user->has_order=1;
  2557. }
  2558. if($user){
  2559. return $this->success($user);
  2560. }else{
  2561. return $this->error();
  2562. }
  2563. }
  2564. //修改客户信息
  2565. public function editUser(Request $request){
  2566. $rules=[
  2567. 'name'=>'required|max:32',
  2568. 'nickname'=>'required|max:32',
  2569. 'remark'=>'max:255',
  2570. 'phone'=>'required|regex:/^1[3456789][0-9]{9}$/'
  2571. ];
  2572. $message=[
  2573. 'phone.required'=>'手机号不能为空.',
  2574. 'phone.regex'=>'手机号格式有误.',
  2575. 'name.required'=>'客户姓名不能为空.',
  2576. 'name.max'=>'客户姓名最多32个字符.',
  2577. 'nickname.required'=>'客户昵称不能为空.',
  2578. 'nickname.max'=>'客户昵称最多32个字符.',
  2579. 'remark.max'=>'备注最多255个字符.',
  2580. ];
  2581. $validator = Validator::make($request->input(),$rules,$message);
  2582. if($validator->fails()){
  2583. return $this->error('400013',$validator->errors()->first());
  2584. }
  2585. $user_id=$request->input('user_id');
  2586. $res=UserW::where('id',$user_id)->update([
  2587. 'name'=>$request->input('name'),
  2588. 'phone'=>$request->input('phone'),
  2589. 'nickname'=>$request->input('nickname'),
  2590. 'sex'=>$request->input('sex'),
  2591. 'remark'=>$request->input('remark'),
  2592. ]);
  2593. if($res){
  2594. return $this->success([]);
  2595. }else{
  2596. return $this->error();
  2597. }
  2598. }
  2599. //获取所有快递公司信息
  2600. public function getExpressCompany(Request $request){
  2601. $express=new ExpressHandler();
  2602. $expressCode=$request->input('expressCode');
  2603. $res=$express->getExpressCompany($expressCode);
  2604. return $this->success($res);
  2605. }
  2606. //咨询客服,获取客服信息
  2607. public function getServiceInfo()
  2608. {
  2609. $user_id=Auth::user()->id;
  2610. $user=User::where('id',$user_id)->first();
  2611. $admin_id=Warea::where('id',$user->warea_id)->value('admin_id');
  2612. $admin=Admin::where('id',$admin_id)->select('id','headimg','qrcode','name')->first();
  2613. return $this->success($admin);
  2614. }
  2615. }