StoreController.php 112 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699
  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. $uu=DB::table('qj_enroll')
  1042. ->where('is_pay',1)
  1043. ->where('user_id',Auth::user()->id)->first();
  1044. if ($uu){
  1045. $num=0;
  1046. foreach ($input['sku'] as $k=>$v){
  1047. $num+=$v[1];
  1048. }
  1049. if ($num>=5){
  1050. return $this->error(50001,[],'温馨提示:补货价格销售不能上传争霸赛。');
  1051. }
  1052. $total=OrderW::where('user_id',$user->id)->where('apply_cancel',0)->where('store_id',$store->id)
  1053. ->where('created_at','>=',Carbon::now()->startOfDay()->toDateTimeString())
  1054. ->sum('total');
  1055. if (($num+$total)>=5){
  1056. return $this->error(50001,[],'温馨提示:补货价格销售不能上传争霸赛。');
  1057. }
  1058. }
  1059. return $this->success([]);
  1060. }
  1061. //代下单或分享提交订单
  1062. public function submitOrderInfo(Request $request)
  1063. {
  1064. $input=$request->all();
  1065. $sku=$input['sku'];
  1066. $user=UserW::find($input['user_id']);
  1067. $agent=User::find(Auth::user()->id);
  1068. $store=Store::where('user_id',Auth::user()->id)->first();
  1069. if(empty($store)){
  1070. return $this->error('450001','店铺不存在或者已被删除');
  1071. }
  1072. if($store->status==1){
  1073. return $this->error('450001','店铺已被禁用');
  1074. }
  1075. if($user){
  1076. $recomer_id=null;
  1077. $recomer_status=0;
  1078. }else{
  1079. return $this->error('450001','客户信息有误');
  1080. }
  1081. $store_id=$store->id;
  1082. $remark=$input['remark'];
  1083. $order_no=$this->order_no('dx');
  1084. $account=$vip_account=$num=0;
  1085. $data=$snapshot=[];
  1086. foreach($sku as $key=>$val){
  1087. if($val[1] > 0){
  1088. $num += $val[1];
  1089. }
  1090. }
  1091. // OrderW::where('store_id',$store->id)
  1092. // ->where('user_id',$user->id)
  1093. $vip=$this->getOrderPrice($user->id,$store_id,$num);
  1094. $arr_test=Store::getTest();
  1095. foreach($sku as $key=>$val){
  1096. $sku_info=[];
  1097. $goodSku=StoreGoodsSku::with(['goods'])->where('id',$val[0])->first();
  1098. if(!array_key_exists($goodSku->goods_id,$snapshot)){
  1099. $snapshot[$goodSku->goods_id]['name']=$goodSku->goods->name;
  1100. $snapshot[$goodSku->goods_id]['main_attr']=$goodSku->goods->main_attr;
  1101. $snapshot[$goodSku->goods_id]['img']=$goodSku->goods->img;
  1102. $snapshot[$goodSku->goods_id]['price']=$goodSku->goods->price;
  1103. $snapshot[$goodSku->goods_id]['sku']=[];
  1104. }
  1105. if(in_array($store_id,$arr_test)){
  1106. $storeInventory=InventoryW::where(['store_id'=>$store_id,'goods_id'=>$goodSku->goods_id,'sku_id'=>$val[0]])->lockForUpdate()->first();
  1107. $storeInve_num=!empty($storeInventory)?$storeInventory->num:0;
  1108. if($val[1] > $storeInve_num){
  1109. return $this->error('450001','【'.$goodSku->goods->main_attr.'-'.$goodSku->type.'-'.$goodSku->size.'】库存不足');
  1110. }
  1111. }
  1112. if(empty($goodSku)){
  1113. return $this->error('450001','商品规格不存在,刷新页面重新下单');
  1114. }
  1115. if($vip=='vip_ed' || $vip=='vip_ing'){
  1116. $data[$key]['price']=$goodSku->goods->vip_price;
  1117. $sku_info['price']=$goodSku->goods->vip_price;
  1118. $data[$key]['account']=$goodSku->goods->vip_price * $val[1];
  1119. $account += $goodSku->goods->vip_price * $val[1];
  1120. }else{
  1121. $data[$key]['price']=$goodSku->goods->price;
  1122. $sku_info['price']=$goodSku->goods->price;
  1123. $data[$key]['account']=$goodSku->goods->price * $val[1];
  1124. $account += $goodSku->goods->price * $val[1];
  1125. }
  1126. $data[$key]['origin_price']=$goodSku->goods->price;
  1127. $data[$key]['order_no']=$order_no;
  1128. $data[$key]['goods_id']=$goodSku->goods_id;
  1129. $data[$key]['store_id']=$store_id;
  1130. $data[$key]['user_id']=$user->id;
  1131. $data[$key]['sku_id']=$goodSku->id;
  1132. $data[$key]['num']=$val[1];
  1133. $data[$key]['size']=$goodSku->size;
  1134. $data[$key]['type']=$goodSku->type;
  1135. $data[$key]['style']=1;
  1136. $data[$key]['created_at']=date("Y-m-d H:i:s");
  1137. $data[$key]['updated_at']=date("Y-m-d H:i:s");
  1138. $sku_info['origin_price']=$goodSku->goods->price;
  1139. $sku_info['sku_id']=$goodSku->id;
  1140. $sku_info['num']=$val[1];
  1141. $sku_info['size']=$goodSku->size;
  1142. $sku_info['type']=$goodSku->type;
  1143. array_push($snapshot[$goodSku->goods_id]['sku'],$sku_info);
  1144. }
  1145. $order_data=[
  1146. 'order_no'=>$order_no,
  1147. 'store_id'=>$store_id,
  1148. 'user_id'=>$user->id,
  1149. 'remark'=>$remark,
  1150. 'is_help'=>1,
  1151. 'op_id'=>Auth::user()->id,
  1152. 'op_name'=>Auth::user()->nickname,
  1153. // 'status'=>0,
  1154. // 'is_pay'=>0,
  1155. 'status'=>1,
  1156. 'is_pay'=>1,//服务商产品权限冻结后下单即支付
  1157. 'pay_money'=>$account,
  1158. 'pay_type'=>3,//免支付
  1159. 'pay_at'=>date("Y-m-d H:i:s"),
  1160. 'is_tip_send'=>0,
  1161. 'is_comment'=>0,
  1162. 'total'=>$num,
  1163. 'account'=>$account,
  1164. 'snapshot'=>json_encode($snapshot),
  1165. 'address_id'=>$request->input('address_id',null),
  1166. ];
  1167. $agent_id=Store::where('id',$store_id)->value('user_id');
  1168. $agent_data=$this->saveAgentNoLog($user->id,$agent_id,$order_no);
  1169. DB::connection('mysql_w')->beginTransaction();
  1170. try{
  1171. $result=OrderW::create($order_data); //生成订单
  1172. // Log::info($result);
  1173. foreach($data as $k=>$v){
  1174. $data[$k]['order_id']=$result->id;
  1175. }
  1176. OrderDetailW::insert($data); //生成订单商品详情
  1177. AgentNo::insert( $agent_data);
  1178. DB::connection('mysql_w')->commit();
  1179. //代下单通知客户
  1180. $order=$result;
  1181. //用户vip变更
  1182. $vipLog=VipLogW::where('user_id',$order->user_id)
  1183. ->where('store_id',$order->store_id)->first();
  1184. if(empty($vipLog) && $order->total>=2){
  1185. VipLogW::create([
  1186. 'user_id'=>$order->user_id,
  1187. 'store_id'=>$store->id,
  1188. 'order_no'=>$order->order_no,
  1189. 'type'=>2,//购买两套,添加vip
  1190. 'remark'=>'购买自动添加vip'
  1191. ]);
  1192. OrderW::where('order_no',$order->order_no)->update([
  1193. 'vip'=>1
  1194. ]);
  1195. }
  1196. return $this->success($order_no);
  1197. }catch(\Exception $e){
  1198. DB::connection('mysql_w')->rollback();
  1199. return $this->error('450001','提交失败',$e->getMessage());
  1200. }
  1201. }
  1202. //修改订单备注信息
  1203. public function editOrderRemark(Request $request){
  1204. $order_no=$request->input('order_no');
  1205. $remark=$request->input('remark');
  1206. $res=OrderW::where('order_no',$order_no)->update([
  1207. 'remark'=>$remark
  1208. ]);
  1209. if($res){
  1210. return $this->success([]);
  1211. }else{
  1212. return $this->error();
  1213. }
  1214. }
  1215. //分享订单
  1216. public function shareOrderInfo(Request $request)
  1217. {
  1218. $input=$request->all();
  1219. $store_id=Store::where('user_id',Auth::user()->id)->value('id');
  1220. $sku=$input['sku'];
  1221. // $user=UserW::find($input['user_id']);
  1222. $self_receive=$input['self_receive'];//不自提0 自提1
  1223. if($self_receive==1){
  1224. $address_id=Store::where('id',$store_id)->value('address_id');
  1225. }else{
  1226. $address_id=$input['address_id'];
  1227. }
  1228. $remark=$input['remark'];
  1229. $order_no=$this->order_no('fx');
  1230. $account=$vip_account=$num=0;
  1231. $data=[];
  1232. foreach($sku as $key=>$val){
  1233. $goodSku=StoreGoodsSku::with(['goods'])->where('id',$val[0])->first();
  1234. if(empty($goodSku)){
  1235. return $this->error('450001','商品规格不存在,请重新分享');
  1236. }
  1237. $account += $goodSku->goods->price * $val[1];
  1238. $num += $val[1];
  1239. $data[$key]['order_no']=$order_no;
  1240. $data[$key]['goods_id']=$goodSku->goods_id;
  1241. $data[$key]['sku_id']=$goodSku->id;
  1242. $data[$key]['num']=$val[1];
  1243. $data[$key]['price']=$goodSku->goods->price;
  1244. $data[$key]['account']=$goodSku->goods->price * $val[1];
  1245. $data[$key]['size']=$goodSku->size;
  1246. $data[$key]['type']=$goodSku->type;
  1247. $data[$key]['created_at']=date("Y-m-d H:i:s");
  1248. $data[$key]['updated_at']=date("Y-m-d H:i:s");
  1249. }
  1250. $order_data=[
  1251. 'order_no'=>$order_no,
  1252. 'store_id'=>$store_id,
  1253. 'user_id'=>$input['user_id'],
  1254. 'address_id'=>$address_id,
  1255. 'self_receive'=>$self_receive,
  1256. 'remark'=>$remark,
  1257. 'op_id'=>Auth::user()->id,
  1258. 'op_name'=>Auth::user()->nickname,
  1259. 'total'=>$num,
  1260. 'account'=>$account,
  1261. ];
  1262. DB::connection('mysql_w')->beginTransaction();
  1263. try{
  1264. OrderDetailW::insert($data);
  1265. OrderShareW::create($order_data);
  1266. DB::connection('mysql_w')->commit();
  1267. return $this->success($order_no);
  1268. }catch(\Exception $e){
  1269. DB::connection('mysql_w')->rollback();
  1270. return $this->error('450001','提交失败',$e->getMessage());
  1271. }
  1272. }
  1273. //生成订单号
  1274. public function order_no($type='dx')
  1275. {
  1276. if($type=='fx'){
  1277. $prefix = 'FX';
  1278. }else{
  1279. $prefix = 'DX';
  1280. }
  1281. $timestamp=date('ymdHis') . substr(microtime(), 2, 6);
  1282. $rand=mt_rand(10000, 99999);
  1283. $order_no=$prefix . $timestamp . $rand;
  1284. if(OrderW::where('order_no',$order_no)->first()){
  1285. $this->order_no($type);
  1286. }else{
  1287. return $order_no;
  1288. }
  1289. }
  1290. //审核订单取消
  1291. public function authOrderCancel(Request $request){
  1292. $id=$request->input('id');
  1293. $type=$request->input('type');//2通过//3驳回
  1294. $remark=$request->input('remark');
  1295. DB::connection('mysql')->beginTransaction();
  1296. DB::connection('mysql_w')->beginTransaction();
  1297. try{
  1298. $cancel=OrderCancelW::where('id',$id)->first();
  1299. $cancel->status=$type;
  1300. $cancel->remark=$remark;
  1301. $cancel->save();
  1302. $order=OrderW::where('id',$cancel->order_id)->first();
  1303. $order->apply_cancel= $type;
  1304. $order->cancel_at=date("Y-m-d H:i:s");
  1305. $order->save();
  1306. $first='取消订单被驳回';
  1307. if($type==2){//同意取消
  1308. //退款
  1309. // $refund=new RefundAmount();
  1310. // $res=$refund->refundAmount($cancel->order_id);
  1311. // if($res[0]=='450001'){
  1312. // return $this->error('450001',$res[1]);
  1313. // }
  1314. // if($res[0]=='450000'){
  1315. // return $this->error('450001','取消订单退款失败',$res[1]);
  1316. // }
  1317. if($order->pay_type!=3){
  1318. //退款
  1319. $refund=new RefundAmount();
  1320. $res=$refund->refundAmount($cancel->order_id);
  1321. if($res[0]=='450001'){
  1322. return $this->error('450001',$res[1]);
  1323. }
  1324. if($res[0]=='450000'){
  1325. return $this->error('450001','取消订单退款失败',$res[1]);
  1326. }
  1327. }
  1328. //判断是否剥夺vip
  1329. if($order->vip==1){
  1330. $orders=OrderW::where('user_id',$order->user_id)
  1331. ->where('store_id',$order->store_id)
  1332. ->where('is_pay',1)
  1333. ->whereIn('apply_cancel',[0,1,3])
  1334. ->whereIn('is_refund',[0,1])
  1335. ->where('total','>=',2)
  1336. ->where('created_at','>',$order->created_at)
  1337. ->orderBy('created_at')->get();
  1338. if(count($orders)>=1){
  1339. OrderW::where('id',$orders[0]->id)->update([
  1340. 'vip'=>1
  1341. ]);
  1342. }else{
  1343. VipLogW::where('user_id',$order->user_id)->where('store_id',$order->store_id)->delete();
  1344. }
  1345. }
  1346. //判断恢复库存
  1347. $store=Store::withTrashed()->where('is_failure',0)->where('id',$order->store_id)->first();
  1348. $level=User::where('id',$store->user_id)->value('level');
  1349. if($level==3){
  1350. event(new RestoreOutboundEvent($order->order_no));
  1351. }
  1352. $first='取消订单审核成功';
  1353. }
  1354. //取消订单通知
  1355. $user=UserW::where('id',$order->user_id)->first();
  1356. if($user->openId){
  1357. $data['openid']=$user->openId;
  1358. $data['data']=[
  1359. 'first' => '您的订单:'.$order->order_no.$first,
  1360. 'keyword1' => $user->nickname,
  1361. 'keyword2' => $order->order_no,
  1362. 'keyword3' => '已取消',
  1363. 'keyword4' => $order->cancel_at
  1364. ];
  1365. event(new CancelOrderEvent($data));
  1366. }
  1367. DB::connection('mysql')->commit();
  1368. DB::connection('mysql_w')->commit();
  1369. return $this->success([]);
  1370. }catch(\Exception $e){
  1371. DB::connection('mysql')->rollback();
  1372. DB::connection('mysql_w')->rollback();
  1373. return $this->error('450001','失败',$e->getMessage());
  1374. }
  1375. }
  1376. //商户取消订单
  1377. public function cancelOrder(Request $request){
  1378. $order_id=$request->input('order_id');
  1379. $order=OrderW::where('id',$order_id)->first();
  1380. // if($order->is_help==0){//用户自己下单
  1381. // return $this->error('450001','用户自己下单商户不能取消');
  1382. // }
  1383. if($order->apply_cancel==1){
  1384. return $this->error('450001','该订单正在审核中,不能再次取消');
  1385. }
  1386. if($order->apply_cancel==2){
  1387. return $this->error('450001','该订单已取消,不能再次取消');
  1388. }
  1389. DB::connection('mysql')->beginTransaction();
  1390. DB::connection('mysql_w')->beginTransaction();
  1391. try {
  1392. //退款
  1393. if($order->is_pay==1){
  1394. // $refund=new RefundAmount();
  1395. // $res=$refund->refundAmount($order->id);
  1396. // if($res[0]=='450001'){
  1397. // return $this->error('450001',$res[1]);
  1398. // }
  1399. // if($res[0]=='450000'){
  1400. // return $this->error('450001','退款失败',$res[1]);
  1401. // }
  1402. if($order->pay_type!=3){
  1403. //退款
  1404. $refund=new RefundAmount();
  1405. $res=$refund->refundAmount($order->id);
  1406. if($res[0]=='450001'){
  1407. return $this->error('450001',$res[1]);
  1408. }
  1409. if($res[0]=='450000'){
  1410. return $this->error('450001','退款失败',$res[1]);
  1411. }
  1412. }
  1413. }
  1414. //判断是否剥夺vip
  1415. if($order->vip==1){
  1416. $orders=OrderW::where('user_id',$order->user_id)
  1417. ->where('store_id',$order->store_id)
  1418. ->where('is_pay',1)
  1419. ->whereIn('apply_cancel',[0,1,3])
  1420. ->whereIn('is_refund',[0,1])
  1421. ->where('total','>=',2)
  1422. ->where('created_at','>',$order->created_at)
  1423. ->orderBy('created_at')->get();
  1424. if(count($orders)>=1){
  1425. OrderW::where('id',$orders[0]->id)->update([
  1426. 'vip'=>1
  1427. ]);
  1428. }else{
  1429. VipLogW::where('user_id',$order->user_id)->where('store_id',$order->store_id)->delete();
  1430. }
  1431. }
  1432. //判断恢复库存
  1433. $store=Store::withTrashed()->where('is_failure',0)->where('id',$order->store_id)->first();
  1434. $level=User::where('id',$store->user_id)->value('level');
  1435. if($level==3){
  1436. event(new RestoreOutboundEvent($order->order_no));
  1437. }
  1438. //取消订单
  1439. OrderW::where('id', $order_id)->update([
  1440. 'apply_cancel'=>2,
  1441. 'cancel_at'=>date("Y-m-d H:i:s")
  1442. ]);
  1443. OrderCancelW::where('user_id',$order->user_id)
  1444. ->where('store_id',$order->store_id)
  1445. ->where('order_id',$order->id)->update(['using'=>0]);
  1446. OrderCancelW::create([
  1447. 'user_id' =>$order->user_id,
  1448. 'store_id'=>$order->store_id,
  1449. 'order_id'=>$order->id,
  1450. 'status' =>2,
  1451. 'using' =>1,
  1452. 'type' =>2, //商户取消订单
  1453. 'reason' =>'商户取消订单'
  1454. ]);
  1455. //取消订单通知
  1456. $user=UserW::where('id',$order->user_id)->first();
  1457. if($user->openId){
  1458. $data['openid']=$user->openId;
  1459. $data['data']=[
  1460. 'first' => '您的订单:'.$order->order_no.'已被商户成功取消',
  1461. 'keyword1' => $user->nickname,
  1462. 'keyword2' => $order->order_no,
  1463. 'keyword3' => '已取消',
  1464. 'keyword4' => date("Y-m-d H:i:s")
  1465. ];
  1466. event(new CancelOrderEvent($data));
  1467. }
  1468. DB::connection('mysql')->commit();
  1469. DB::connection('mysql_w')->commit();
  1470. return $this->success([]);
  1471. }catch(\Exception $e){
  1472. DB::connection('mysql')->rollback();
  1473. DB::connection('mysql_w')->rollback();
  1474. return $this->error('450001','失败',$e->getMessage());
  1475. }
  1476. }
  1477. //获取订单状态数量
  1478. public function getOrderStatusNum(Request $request){
  1479. $store=Store::withTrashed()->where('is_failure',0)->where('user_id',Auth::user()->id)->first();
  1480. $user_id=$request->input('user_id');
  1481. if($user_id){
  1482. $where['user_id']=$user_id;
  1483. }
  1484. $where['store_id']=$store->id;
  1485. $data=OrderW::where($where)->whereIn('apply_cancel',[0,1,3])->whereIn('is_refund',[0,1,2]);
  1486. $data1=clone $data;
  1487. $data2=clone $data;
  1488. $data3=clone $data;
  1489. $num['noPay']=$data->where('status',0)->count();
  1490. $num['noSend']=$data1->where('status',1)->count();
  1491. $num['noReceive']=$data2->where('status',2)->count();
  1492. $num['Finish']=$data3->where('status',3)->count();
  1493. //判断扫码发货还是立即发货,功能暂时未用到
  1494. // if(in_array($store->phone,['15138929587','18838980968', '13030314383'])){//, '13030314383',
  1495. // $num['is_code']=1;
  1496. // }else{
  1497. // $num['is_code']=0;
  1498. // }
  1499. return $this->success($num);
  1500. }
  1501. //获取订单列表
  1502. public function getOrderList(Request $request)
  1503. {
  1504. $input=$request->all();
  1505. $status=$input['status'];
  1506. $page_index=$input['page_index'];
  1507. $page_size=$input['page_size'];
  1508. $order_no=$input['order_no'];
  1509. $num=$page_size*($page_index-1);
  1510. $where=$wheres=[];
  1511. if($status!='all'){
  1512. $where['status']=$status;
  1513. }
  1514. if($order_no){
  1515. $wheres=function($query)use($order_no){
  1516. $query->where('order_no','like','%'.$order_no.'%');
  1517. };
  1518. }
  1519. $store=Store::where('user_id',Auth::user()->id)->first();
  1520. $where['store_id']=$store->id;
  1521. $data=OrderW::with(['user:id,nickname,phone','order_cancel'=>function($query){
  1522. $query->where('using',1);}])->where($where)->where($wheres)->whereIn('apply_cancel',[0,1,3])
  1523. ->whereIn('is_refund',[0,1,2])
  1524. ->orderByDesc('updated_at')->orderByDesc('id');
  1525. $count=$data->count();
  1526. $orders=$data->skip($num)->take($page_size)->get();
  1527. foreach($orders as $key=>$val){
  1528. if($val->status==3 && $val->is_refund > 0){
  1529. $order_refund = OrderRefundW::where('order_no',$val->order_no)->get();
  1530. if($order_refund){
  1531. $orders[$key]->refund_goods=$order_refund;
  1532. }
  1533. }
  1534. $goods_ids=OrderDetailW::where('order_no',$val->order_no)->groupBy('goods_id')->pluck('goods_id');
  1535. $goods=[];
  1536. foreach($goods_ids as $k=>$v){
  1537. $goods[$k]=StoreGoods::where('id',$v)->select('id','name','img','main_attr')->first();
  1538. $goods[$k]->imgs=str_replace('http://','https://',$goods[$k]->img);
  1539. $goods[$k]->sku=OrderDetailW::where('order_no',$val->order_no)
  1540. ->where('goods_id',$v)->select('price','num')->get();
  1541. }
  1542. $goods_infos=OrderDetailW::with('goods:id,img,name,main_attr')->where('order_no',$val->order_no)
  1543. ->groupBy('goods_id')->select(DB::raw('price','sum(num) as num'))->first();
  1544. $orders[$key]->goods=$goods;
  1545. }
  1546. return $this->success_list($orders,'成功',$count);
  1547. }
  1548. //获取订单列表
  1549. public function getOrderList1(Request $request)
  1550. {
  1551. $input=$request->all();
  1552. $status=$request->input('status','all');
  1553. $page_index=$request->input('page_index', 1);
  1554. $page_size=$request->input('page_size', 6);
  1555. $order_no=$request->input('order_no', null);
  1556. $num=$page_size*($page_index-1);
  1557. $where=$wheres=[];
  1558. if($status!='all'){
  1559. $where['status']=$status;
  1560. }
  1561. if($order_no){
  1562. if(strlen($order_no)<=3 && is_numeric($order_no)){
  1563. return $this->error('450001','请最少输入4个字搜索');
  1564. }
  1565. $user_ids=UserW::where(function($query)use($order_no){
  1566. $query->where('phone','like','%'.$order_no.'%')->orwhere('nickname','like','%'.$order_no.'%');
  1567. })->pluck('id');
  1568. $wheres=function($query)use($order_no,$user_ids){
  1569. $query->where('order_no','like','%'.$order_no.'%')->orWhereIn('user_id',$user_ids);
  1570. };
  1571. }
  1572. $store=Store::where('user_id',Auth::user()->id)->first();
  1573. $where['store_id']=$store->id;
  1574. $data=OrderW::with(['user:id,nickname,phone','order_cancel'=>function($query){
  1575. $query->where('using',1);}])->where($where)->where($wheres)->whereIn('apply_cancel',[0,1,3])
  1576. ->whereIn('is_refund',[0,1,2])
  1577. ->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')
  1578. ->orderByDesc('updated_at')->orderByDesc('id');
  1579. $count=$data->count();
  1580. $orders=$data->skip($num)->take($page_size)->get();
  1581. foreach($orders as $key=>$val){
  1582. if($val->status==3 && $val->is_refund > 0){
  1583. $order_refund = OrderRefundW::where('order_no',$val->order_no)->get();
  1584. if($order_refund){
  1585. $orders[$key]->refund_goods=$order_refund;
  1586. }
  1587. }
  1588. $goods=json_decode($val->snapshot,true);
  1589. foreach($goods as $k => $v){
  1590. $goods[$k]['img']= str_replace('api.app.jiuweiyun.cn','api.app.cliu.cc',$v['img']);
  1591. $goods[$k]['name'] = str_replace('健康', '', $v['name']);
  1592. }
  1593. $orders[$key]->goods= $goods;
  1594. }
  1595. return $this->success_list($orders,'成功',$count);
  1596. }
  1597. //获取订单列表
  1598. public function getOrderLists(Request $request)
  1599. {
  1600. $input=$request->all();
  1601. $status=$input['status'];
  1602. $page_index=$input['page_index'];
  1603. $page_size=$input['page_size'];
  1604. $order_no=$input['order_no'];
  1605. $num=$page_size*($page_index-1);
  1606. $where=$wheres=[];
  1607. if($status!='all'){
  1608. $where['status']=$status;
  1609. }
  1610. if($order_no){
  1611. $wheres=function($query)use($order_no){
  1612. $query->where('order_no','like','%'.$order_no.'%');
  1613. };
  1614. }
  1615. $store=Store::where('user_id',Auth::user()->id)->first();
  1616. $where['store_id']=$store->id;
  1617. $data=OrderW::with(['user:id,nickname,phone','order_cancel'=>function($query){
  1618. $query->where('using',1);}])->where($where)->where($wheres)->whereIn('apply_cancel',[0,1,3])
  1619. ->whereIn('is_refund',[0,1,2])
  1620. ->orderByDesc('updated_at')->orderByDesc('id');
  1621. $count=$data->count();
  1622. $orders=$data->skip($num)->take($page_size)->get();
  1623. foreach($orders as $key=>$val){
  1624. if($val->status==3 && $val->is_refund > 0){
  1625. $order_refund = OrderRefundW::where('order_no',$val->order_no)->get();
  1626. if($order_refund){
  1627. $orders[$key]->refund_goods=$order_refund;
  1628. }
  1629. }
  1630. $goods=OrderDetailW::with('goods:id,img,name,main_attr')->where('order_id',$val->id)
  1631. ->groupBy('goods_id')->select('goods_id','price',DB::raw('sum(num) as num'))->get();
  1632. foreach($goods as $k=>$v){
  1633. $goods[$k]->goods->imgs=str_replace('http://','https://',$v->goods->img);
  1634. }
  1635. $orders[$key]->goods=$goods;
  1636. }
  1637. return $this->success_list($orders,'成功',$count);
  1638. }
  1639. //获取退货订单详情
  1640. public function getRefundOrderDetail(Request $request){
  1641. $order_no=$request->input('order_no');
  1642. $order_refund=OrderRefundW::where('order_no',$order_no)->get();
  1643. foreach($order_refund as $key => $val){
  1644. $goods_ids = OrderDetailW::where('order_no', $val->refund_no)->groupBy('goods_id')->pluck('goods_id');
  1645. $goods = [];
  1646. foreach ($goods_ids as $k => $v) {
  1647. $goods[$k] = StoreGoods::where('id', $v)->first();
  1648. $goods[$k]->sku = OrderDetailW::where('order_no', $val->refund_no)->where('goods_id', $v)->get();
  1649. }
  1650. $order_refund[$key]->goods=$goods;
  1651. }
  1652. return $this->success($order_refund);
  1653. }
  1654. //获取id订单信息
  1655. public function getOrderInfo(Request $request)
  1656. {
  1657. $input=$request->all();
  1658. $id=$input['id'];
  1659. $order=OrderW::withTrashed()->with(['user:id,nickname,phone','address'])->where('id',$id)->first();
  1660. $goods_ids=OrderDetailW::where('order_no',$order->order_no)->groupBy('goods_id')->pluck('goods_id');
  1661. $goods=[];
  1662. foreach($goods_ids as $key=>$val){
  1663. $goods[$key]=StoreGoods::where('id',$val)->first();
  1664. $goods[$key]->sku=OrderDetailW::where('order_no',$order->order_no)->where('goods_id',$val)->get();
  1665. }
  1666. $order->goods=$goods;
  1667. return $this->success($order);
  1668. }
  1669. //根据订单号查询订单
  1670. public function getOrderNoInfo(Request $request)
  1671. {
  1672. $input=$request->all();
  1673. $order_no=$input['order_no'];
  1674. $order=OrderW::withTrashed()->with(['order_cancel','user:id,nickname,phone,avatar','address','store:id,name'])->where('order_no',$order_no)->first();
  1675. $agent_id=Auth::user()->id;
  1676. $store_id=Store::where('user_id',$agent_id)->value('id');
  1677. if($store_id!=$order->store_id){
  1678. return $this->error('450401','没有权限查看该订单');
  1679. }
  1680. if(empty($order)){
  1681. return $this->error('450001','订单号有误');
  1682. }
  1683. $goods_ids=OrderDetailW::where('order_no',$order->order_no)->groupBy('goods_id')->pluck('goods_id');
  1684. $goods=[];
  1685. foreach($goods_ids as $key=>$val){
  1686. $goods[$key]=StoreGoods::where('id',$val)->first();
  1687. $goods[$key]->imgs=str_replace('http://','https://',$goods[$key]->img);
  1688. $goods[$key]->sku=OrderDetailW::where('order_no',$order->order_no)->where('goods_id',$val)->get();
  1689. }
  1690. $order->goods=$goods;
  1691. $order->code=OrderCodeW::where('order_id',$order->id)->get();
  1692. if(in_array($order->store_id,[ 99, 102, 105])){//,101,102,105
  1693. $order->is_code=1;
  1694. }else{
  1695. $order->is_code=0;
  1696. }
  1697. if(isset($order->address)){
  1698. Config::set('app.key', 'base64:7yQSmGhLZ2/n5kbyVXAOiJ3DSIP8TifHE3nfOI4d5mU=');
  1699. $address=$order->address;
  1700. if($address->address_code){
  1701. try{
  1702. $order->address->address= Crypt::decryptString($address->address_code);
  1703. }catch(DecryptException $e){
  1704. Log::info($e->getMessage());
  1705. }
  1706. }
  1707. if($address->phone_code){
  1708. try{
  1709. $order->address->phone= Crypt::decryptString($address->phone_code);
  1710. }catch(DecryptException $e){
  1711. Log::info($e->getMessage());
  1712. }
  1713. }
  1714. }
  1715. return $this->success($order);
  1716. }
  1717. //回复评价
  1718. public function addComment(Request $request){
  1719. $input=$request->all();
  1720. $rules=[
  1721. 'content'=>'required|max:255',
  1722. ];
  1723. $message=[
  1724. 'content.required'=>'评价内容不能为空.',
  1725. 'content.max'=>'评价内容不能大于255个字符.'
  1726. ];
  1727. $validator = Validator::make($input,$rules,$message);
  1728. if($validator->fails()){
  1729. return $this->error('400013',$validator->errors()->first());
  1730. }
  1731. $store_id=Store::where('user_id',Auth::user()->id)->value('id');
  1732. $res=Comment::create([
  1733. 'content'=>$input['content'],
  1734. 'comment_id'=>$input['comment_id'],
  1735. 'store_id'=>$store_id,
  1736. 'is_reply'=>2,
  1737. 'is_see'=>0
  1738. ]);
  1739. if($res){
  1740. return $this->success([]);
  1741. }else{
  1742. return $this->error();
  1743. }
  1744. }
  1745. //查看所有评价
  1746. public function getComment(Request $request){
  1747. $input=$request->all();
  1748. $page_index=$input['page_index'];
  1749. $page_size=$input['page_size'];
  1750. $num=$page_size*($page_index-1);
  1751. $store_id=Store::where('user_id',Auth::user()->id)->value('id');
  1752. $count= Comment::where('store_id',$store_id)->where('comment_id',0)->count();
  1753. $list= Comment::with(['comment','store:id,name,img','user:id,avatar,nickname,phone'])
  1754. ->where('store_id',$store_id)->where('comment_id',0)
  1755. ->orderByDesc('id')
  1756. ->skip($num)->take($page_size)->get();
  1757. return $this->success_list($list,'',$count);
  1758. }
  1759. //用户自提
  1760. public function oneSelfTake(Request $request){
  1761. $order_no=$request->input('order_no');
  1762. $order=OrderW::with('address')->where('order_no',$order_no)->first();
  1763. $order->status=2; //已备货,可自提
  1764. $order->express_time = date("Y-m-d H:i:s"); //备货完成时间
  1765. $res=$order->save();
  1766. if($res){
  1767. /* 已备货通知 */
  1768. $user=UserW::where('id',$order->user_id)->first();
  1769. if($user->openId){
  1770. $address=null;
  1771. if($order->address){
  1772. $address=$order->address->province.$order->address->city.$order->address->area.$order->address->address;
  1773. }
  1774. $mes['openid']=$user->openId;
  1775. $mes['data']=[
  1776. 'first' => '您的订单已完成备货,请前往提货',
  1777. 'keyword1' => $order_no,
  1778. 'keyword2' => $order->created_at,
  1779. 'keyword3' => '已备货,可自提',
  1780. 'keyword4' => $address,
  1781. 'remark' => '点击链接进入系统,查看详情',
  1782. ];
  1783. event(new TipPickUpEvent($mes));
  1784. }
  1785. return $this->success([]);
  1786. }else{
  1787. return $this->error();
  1788. }
  1789. }
  1790. //获取所有快递公司信息
  1791. public function getExpressCode(){
  1792. return $this->success(ExpressHandler::getExpressCode());
  1793. }
  1794. //识别扫码信息
  1795. public function scanCodeInfo(Request $request)
  1796. {
  1797. $code=$request->input('code');
  1798. if(!strpos($code,'://')){
  1799. $info=Select::with('select_good')->select('id','good_select_id','security_code','code','is_lowest')->where('code',$code)->first();
  1800. if(empty($info)){
  1801. return $this->error('450001','未识别到二维码信息');
  1802. }
  1803. if($info->is_lowest==0){
  1804. return $this->error('450001','请扫描单个包装盒二维码');
  1805. }
  1806. if(empty($info->good_select_id)){
  1807. return $this->error('450001','该二维码没有绑定商品信息');
  1808. }
  1809. }else{
  1810. $file=file_get_contents($code);
  1811. Log::info('0000------------------0000--'.$code);
  1812. preg_match('/<span>产品名称:<\/span> 大卫博士健康内裤((.*?))/',$file,$result);
  1813. if(!in_array($result[1],['精装版','简约版','老人版','纯棉老人版','高腰版','青春版'])){
  1814. return $this->error('450001','该二维码没有绑定商品信息');
  1815. }
  1816. switch($result[1]){
  1817. case "精装版":
  1818. $goods_id=1;
  1819. break;
  1820. case "简约版":
  1821. $goods_id=2;
  1822. break;
  1823. case "老人版":
  1824. case "高腰版":
  1825. $goods_id=3;
  1826. break;
  1827. case "纯棉老人版":
  1828. $goods_id=4;
  1829. break;
  1830. case "青春版":
  1831. $goods_id=25;
  1832. break;
  1833. default:
  1834. $goods_id=null;
  1835. }
  1836. $info['good_select_id']=$goods_id;
  1837. $info['security_code']=substr($code,-12);;
  1838. $info['code']=$code;
  1839. }
  1840. $code=substr($code,strrpos($code,'?bid='));
  1841. $order_code = OrderCodeW::where('code',$code)->first();
  1842. if($order_code){
  1843. return $this->error('450001','该二维码已发货');
  1844. }
  1845. return $this->success($info);
  1846. }
  1847. //提交发货扫码信息
  1848. public function submitScanCodeInfo(Request $request)
  1849. {
  1850. $order_no=$request->input('order_no');
  1851. $code=$request->input('code');
  1852. $order=OrderW::where('order_no',$order_no)->first();
  1853. Log::info($code);
  1854. Log::info($order_no);
  1855. DB::beginTransaction();
  1856. try{
  1857. foreach($code as $val){
  1858. if(strpos($val,'://')){
  1859. $order_code = OrderCodeW::where('code',substr($val,strrpos($val,'?bid=')))->first();
  1860. }else{
  1861. $order_code = OrderCodeW::where('code',$val)->first();
  1862. }
  1863. if($order_code){
  1864. if($order_code->order_id != $order->id){
  1865. throw new Exception("二维码:".$order_code->security_code." 已发货");
  1866. }
  1867. }else{
  1868. if(!strpos($val,'://')){
  1869. $info=Select::with('select_good')->select('id','good_select_id','security_code','code','is_lowest')->where('code',$val)->first();
  1870. OrderCodeW::create([
  1871. 'store_id' => $order->store_id,
  1872. 'user_id' => $order->user_id,
  1873. 'order_id' => $order->id,
  1874. 'code' => $val,
  1875. 'security_code' => $info->security_code,
  1876. 'good_select_id' => $info->good_select_id,
  1877. 'good_name' => $info->select_good->good_name,
  1878. ]);
  1879. }else{
  1880. $file=file_get_contents($val);
  1881. preg_match('/<span>产品名称:<\/span> 大卫博士健康内裤((.*?))/',$file,$result);
  1882. if(!in_array($result[1],['精装版','简约版','老人版','纯棉老人版','高腰版','青春版'])){
  1883. throw new Exception("二维码没有绑定商品信息");
  1884. }
  1885. $security_code=substr($val,-12);
  1886. switch($result[1]){
  1887. case "精装版":
  1888. $goods_id=1;
  1889. break;
  1890. case "简约版":
  1891. $goods_id=2;
  1892. break;
  1893. case "老人版":
  1894. case "高腰版":
  1895. $goods_id=3;
  1896. break;
  1897. case "纯棉老人版":
  1898. $goods_id=4;
  1899. break;
  1900. case "青春版":
  1901. $goods_id=25;
  1902. break;
  1903. default:
  1904. $goods_id=null;
  1905. }
  1906. OrderCodeW::create([
  1907. 'store_id' => $order->store_id,
  1908. 'user_id' => $order->user_id,
  1909. 'order_id' => $order->id,
  1910. 'code' => substr($val,strrpos($val,'?bid=')),
  1911. 'security_code' => $security_code,
  1912. 'good_select_id' => $goods_id,
  1913. 'good_name' => '大卫博士'.$result[1],
  1914. ]);
  1915. }
  1916. }
  1917. }
  1918. DB::commit();
  1919. return $this->success([]);
  1920. }catch(\Exception $e){
  1921. DB::rollBack();
  1922. Log::info($e->getMessage());
  1923. return $this->error($e->getMessage());
  1924. }
  1925. }
  1926. // 删除发货码
  1927. public function deleteScanCode(Request $request)
  1928. {
  1929. $ids=$request->input('ids');
  1930. $res=OrderCodeW::whereIn('id',$ids)->delete();
  1931. if($res){
  1932. return $this->success([]);
  1933. }else{
  1934. return $this->error();
  1935. }
  1936. }
  1937. //获取客户所有订单
  1938. public function getNoSendOrder(Request $request){
  1939. $order_no=$request->input('order_no');
  1940. $order=OrderW::where('order_no',$order_no)->first();
  1941. $no_send_orders=OrderW::with('user:id,nickname,phone,avatar')
  1942. ->where('store_id',$order->store_id)->where('user_id',$order->user_id)
  1943. ->where('status',1)->whereIn('apply_cancel',[0,3])->get();
  1944. foreach($no_send_orders as $key=>$val){
  1945. $goods_ids=OrderDetailW::where('order_no',$val->order_no)->groupBy('goods_id')->pluck('goods_id');
  1946. $goods=[];
  1947. foreach($goods_ids as $k=>$v){
  1948. $goods[$k]=StoreGoods::where('id',$v)->first();
  1949. $goods[$k]->sku=OrderDetailW::where('order_no',$val->order_no)->where('goods_id',$v)->get();
  1950. }
  1951. $no_send_orders[$key]->goods=$goods;
  1952. }
  1953. return $this->success($no_send_orders);
  1954. }
  1955. //上传订单快递号
  1956. public function addOrderExpressNo(Request $request){
  1957. $input=$request->all();
  1958. $rules=[
  1959. 'express_no' =>'required',
  1960. 'express_company'=>'required',
  1961. 'express_time' =>'required'
  1962. // 'address_id' =>'required'
  1963. ];
  1964. $message=[
  1965. 'express_no.required' =>'发货单号不能为空.',
  1966. 'express_company.required'=>'物流公司不能为空.',
  1967. 'express_time.required' =>'发货时间不能为空.',
  1968. // 'address_id.required' =>'收货地址不能为空.',
  1969. ];
  1970. $validator = Validator::make($input,$rules,$message);
  1971. if($validator->fails()){
  1972. return $this->error('400013',$validator->errors()->first());
  1973. }
  1974. $status=OrderW::where('order_no',$input['order_no'])->value('status');
  1975. if($status > 1){
  1976. return $this->error('450001','该订单已发货');
  1977. }
  1978. $prefix=mb_substr($input['express_no'],0,2);
  1979. if(strtoupper($prefix)=='DD' || strtoupper($prefix)=='DX'){
  1980. return $this->error('450001','物流单号不正确,你填的是订单号,请重新填写');
  1981. }
  1982. $order_nos=explode(',',$input['order_no']);
  1983. // $address_id=$input['address_id'];
  1984. $express_company=$input['express_company'];
  1985. $express_code=$input['express_code'];
  1986. $express_phone=$input['express_phone'];
  1987. $express_time=$input['express_time'];
  1988. $express_no=str_replace(' ','', $input['express_no']);
  1989. $data=[
  1990. // 'address_id'=>$address_id,
  1991. 'self_receive'=>0,
  1992. 'express_no'=>$express_no,
  1993. 'express_company'=>$express_company,
  1994. 'express_code'=>$express_code,
  1995. 'express_state'=>0,
  1996. 'express_phone'=>$express_phone,
  1997. 'express_time'=>$express_time,
  1998. 'status'=>2
  1999. ];
  2000. try{
  2001. DB::connection('mysql_w')->transaction(function()use($order_nos,$data){
  2002. OrderW::whereIn('order_no',$order_nos)->update($data);
  2003. },5);
  2004. $order=OrderW::with('address')->where('order_no',$order_nos[0])->first();
  2005. $user=UserW::where('id',$order->user_id)->first();
  2006. //已发货短信通知
  2007. Config::set('app.key', 'base64:7yQSmGhLZ2/n5kbyVXAOiJ3DSIP8TifHE3nfOI4d5mU=');
  2008. if(strstr($user->phone,'****' )){
  2009. if($user->phone_code){
  2010. $phone = Crypt::decryptString($user->phone_code);
  2011. }else{
  2012. $end = substr($user->openId1, -4);
  2013. $phone = str_replace('****', $end, $user->phone);
  2014. }
  2015. }else {
  2016. $phone = $user->phone;
  2017. }
  2018. $config=config('easysms');
  2019. $easySms = new EasySms($config);
  2020. $express=$express_company.$express_no;
  2021. $content="【大卫博士】您购买的大卫博士罐装内裤已发货,快递单号是{$express},请注意查收。";
  2022. try{
  2023. $easySms->send($phone, ['content' =>$content ]);
  2024. Log::info('物流发货短信正常');
  2025. } catch (\Overtrue\EasySms\Exceptions\NoGatewayAvailableException $exception) {
  2026. $message = $exception->getException('qcloud')->getMessage();
  2027. Log::info($phone.'物流发货短信异常:'.json_encode($message));
  2028. }
  2029. // event(new EnoughFive($order->id));
  2030. //已发货公众号通知
  2031. if($user->openId){
  2032. Log::info($user->openId);
  2033. if($order->address){
  2034. $address=$order->address->name.' '.$order->address->phone.' '.$order->address->province.$order->address->city.$order->address->area.$order->address->address;
  2035. }else{
  2036. $address='无收件信息';
  2037. }
  2038. $mes['openid']=$user->openId;
  2039. $mes['data']=[
  2040. 'first' => '您的订单已发货,请注意查收',
  2041. 'keyword1' => $input['order_no'],
  2042. 'keyword2' => $express_time,
  2043. 'keyword3' => $express_company,
  2044. 'keyword4' => $express_no,
  2045. 'keyword5' => $address,
  2046. ];
  2047. Log::info(json_encode($mes));
  2048. event(new TipSendingEvent($mes));
  2049. }
  2050. return $this->success([]);
  2051. }catch(\Exception $e){
  2052. return $this->error('450001',$e->getMessage());
  2053. }
  2054. // OrderExpressW::create([
  2055. // 'order_no'=>$input['order_no'],
  2056. // 'express_no'=>str_replace(' ','', $input['express_no']),
  2057. // 'express_company'=>$input['express_company'],
  2058. // 'express_code'=>$input['express_code'],
  2059. // 'express_state'=>0,
  2060. // 'express_phone'=>$input['express_phone'],
  2061. // 'express_receive_time'=>null,
  2062. // ]);
  2063. }
  2064. //查询订单物流信息
  2065. public function getOrderExpress(Request $request){
  2066. $order_no=$request->input('order_no');
  2067. $order=OrderW::with('address')->where('order_no',$order_no)->first();
  2068. if(empty($order)){
  2069. return $this->error('450001','订单信息有误');
  2070. }
  2071. if($order->express_state==3){ //已签收
  2072. $express=json_decode($order->express_info,true);
  2073. }else{ //未签收
  2074. $CustomerName = null;
  2075. if($order->express_code =='SF'){
  2076. $CustomerName = substr($order->express_phone,-4);
  2077. }
  2078. $express=new ExpressHandler();
  2079. $express=$express->search($order->express_no, $order->express_code, $order->order_no, $CustomerName);
  2080. $express=json_decode(json_encode($express),'true');
  2081. if(isset($express['Traces']) && !empty($express['Traces'])){
  2082. foreach ($express['Traces'] as $key=>$val){
  2083. $express['Traces'][$key]['AcceptTime']=date("Y-m-d H:i:s",substr($val['AcceptTime'],0,strlen($val['AcceptTime'])-3));
  2084. }
  2085. OrderW::where('order_no',$order_no)->update([
  2086. 'express_info'=>json_encode($express),
  2087. 'express_receive_time'=>array_pop($express['Traces'])['AcceptTime'],
  2088. 'express_state'=>$express['State']
  2089. ]);
  2090. }
  2091. }
  2092. $data['express']=$express;
  2093. $data['express_state']=$order->express_state;
  2094. $data['express_code']=$order->express_code;
  2095. $data['express_company']=$order->express_company;
  2096. $data['express_no']=$order->express_no;
  2097. $data['express_time']=$order->express_time;
  2098. $data['express_phone']=$order->express_phone;
  2099. return $this->success($data);
  2100. }
  2101. //修改店铺地址
  2102. public function editStoreAddress(Request $request){
  2103. $user_id=Auth::user()->id;
  2104. // $user=User::where('id',$user_id)->first();
  2105. // $store_id=Store::where('user_id',$user_id)->value('id');
  2106. $res=Store::where('user_id',$user_id)
  2107. ->update([
  2108. 'province'=>$request->input('province'),
  2109. 'city'=>$request->input('city'),
  2110. 'area'=>$request->input('area'),
  2111. 'address'=>$request->input('address'),
  2112. ]);
  2113. // $address=AddressW::where('store_id',$store_id)->first();
  2114. // if($address){
  2115. // $address->province=$request->input('province');
  2116. // $address->city=$request->input('city');
  2117. // $address->area=$request->input('area');
  2118. // $address->address=$request->input('address');
  2119. // $res=$address->save();
  2120. // }else{
  2121. // $res=AddressW::create([
  2122. // 'store_id'=>$store_id,
  2123. // 'name'=>$user->nickname,
  2124. // 'phone'=>$user->mobile,
  2125. // 'province'=>$request->input('province'),
  2126. // 'city'=>$request->input('city'),
  2127. // 'area'=>$request->input('area'),
  2128. // 'address'=>$request->input('address'),
  2129. // 'is_default'=>0
  2130. // ]);
  2131. // }
  2132. if($res){
  2133. return $this->success([]);
  2134. }else{
  2135. return $this->error();
  2136. }
  2137. }
  2138. //获取微信位置授权
  2139. public function getSignPackage(){
  2140. $app=app('wechat.official_account');
  2141. $url='http://api.app.cliu.cc/api/gzh';
  2142. $app->jssdk->setUrl($url);
  2143. $data=$app->jssdk->buildConfig(
  2144. array('onMenuShareAppMessage','onMenuShareTimeline',
  2145. 'openLocation','getLocation','chooseImage',
  2146. 'uploadImage', 'downloadImage','scanQRCode',
  2147. 'updateAppMessageShareData', 'updateTimelineShareData','hideMenuItems','openBusinessView','checkJsApi'),
  2148. $debug = false, $beta = false, $json = true,
  2149. $openTagList = ['wx-open-launch-app']);
  2150. return $this->success($data);
  2151. }
  2152. //根据经纬度获取地理位置信息
  2153. public function getAddressInfo(Request $request){
  2154. $location=$request->input('location');
  2155. $key='b019688375d389c1e55150985e90f816';
  2156. $client=new Client();
  2157. $url='https://restapi.amap.com/v3/geocode/regeo?key='.$key.'&location='.$location;
  2158. $result=$client->request('GET',$url);
  2159. $res = json_decode($result->getBody()->getContents());
  2160. return $this->success($res);
  2161. }
  2162. //提交退货订单
  2163. public function submitRefundOrder(Request $request)
  2164. {
  2165. $sku = $request->input('sku');
  2166. $reason = $request->input('reason');
  2167. $reason_all = $request->input('reason_all');
  2168. $img = $request->input('img');
  2169. $origin_order_no=$request->input('origin_order_no');
  2170. $origin_order=OrderW::where('order_no',$origin_order_no)->first();
  2171. if($origin_order->is_refund==1){
  2172. return $this->error('450001','该订单存在正在审核中的退货订单');
  2173. }
  2174. if($origin_order->is_refund==3){
  2175. return $this->error('450001','该订单已全部退货');
  2176. }
  2177. $refund_no=OrderW::order_no('th');
  2178. $account = $total = 0;
  2179. $list = $sku_ids = [];
  2180. foreach($sku as $key=>$val){
  2181. if($val[1] > 0){
  2182. $order_detail=OrderDetailW::with(['goods'])->where('id',$val[0])->first();
  2183. if($order_detail->num < $val[1]){
  2184. $num = $order_detail->num;
  2185. }else{
  2186. $num = $val[1];
  2187. }
  2188. $list[$key]['num']=$num;
  2189. $list[$key]['price']=$order_detail->price;
  2190. $list[$key]['account']=$order_detail->price * $num;
  2191. $list[$key]['order_no']=$refund_no;
  2192. $list[$key]['goods_id']=$order_detail->goods_id;
  2193. $list[$key]['sku_id']=$order_detail->sku_id;
  2194. $list[$key]['size']=$order_detail->size;
  2195. $list[$key]['type']=$order_detail->type;
  2196. $list[$key]['style']=2;
  2197. $list[$key]['created_at']=date("Y-m-d H:i:s");
  2198. $list[$key]['updated_at']=date("Y-m-d H:i:s");
  2199. $total += $num;
  2200. $account += $order_detail->price * $num;
  2201. }
  2202. }
  2203. $data=[
  2204. 'refund_no'=>$refund_no,
  2205. 'order_no'=>$origin_order_no,
  2206. 'store_id'=>$origin_order->store_id,
  2207. 'user_id'=>$origin_order->user_id,
  2208. 'reason'=>$reason,
  2209. 'reason_all'=>$reason_all,
  2210. 'total'=>$total,
  2211. 'account'=>$account,
  2212. 'img'=>json_encode($img),
  2213. 'status'=>0,
  2214. 'op_name'=> Auth::user()->nickname,
  2215. 'op_type'=>2,
  2216. 'remark'=>null,
  2217. ];
  2218. try{
  2219. DB::connection('mysql_w')->transaction(function ()use($list,$data,$origin_order_no,$account){
  2220. OrderDetailW::insert($list);
  2221. OrderRefundW::create($data);
  2222. OrderW::where('order_no',$origin_order_no)->update(['is_refund'=>1]);
  2223. },5);
  2224. //申请退货提醒
  2225. $user=UserW::where('id',$origin_order->user_id)->first();
  2226. if($user->openId){
  2227. $data['openid']=$user->openId;
  2228. $data['data']=[
  2229. 'first' => '商户提交了新的退单信息',
  2230. 'keyword1' => $origin_order->order_no,
  2231. 'keyword2' => '商户退货,退款金额:'.number_format($account,2)
  2232. ];
  2233. event(new AuthRefundTip($data));
  2234. }
  2235. return $this->success($refund_no);
  2236. }catch(\Exception $e){
  2237. return $this->error('450001',$e->getMessage());
  2238. }
  2239. }
  2240. //获取退款订单原始信息
  2241. public function getOriginOrderInfo(Request $request)
  2242. {
  2243. $order_no=$request->input('order_no');
  2244. $data=OrderW::with(['address','order_cancel'=>function($query){$query->where('using',1);},'store:id,name,img,phone']);
  2245. $order=$data->where('order_no',$order_no)->first()->toArray();
  2246. if(empty($order)){
  2247. return $this->error('450001','订单不存在');
  2248. }
  2249. $goods_ids=OrderDetailW::where('order_no',$order['order_no'])->groupBy('goods_id')->pluck('goods_id');
  2250. $goods=[];
  2251. foreach($goods_ids as $key=>$val){
  2252. $goods[$val]=StoreGoods::select('id','name','img','main_attr')->where('id',$val)->first()->toArray();
  2253. $order_details=OrderDetailW::where('order_no',$order['order_no'])->where('goods_id',$val)->get()->toArray();
  2254. if(count($order_details)>0){
  2255. $sku=[];
  2256. foreach($order_details as $k=>$v){
  2257. $sku[$v['sku_id']]=$v;
  2258. }
  2259. $goods[$val]['sku']=$sku;
  2260. $goods[$val]['price']=$order_details[0]['price'];
  2261. }
  2262. }
  2263. $order['goods']=$goods;
  2264. $refund_nos=OrderRefundW::where('order_no',$order_no)->whereIn('status',[0,1,3])->pluck('refund_no');
  2265. $refund_goods_ids=OrderDetailW::whereIn('order_no',$refund_nos)->groupBy('goods_id')->pluck('goods_id');
  2266. $refunds=[];
  2267. foreach($refund_goods_ids as $key=>$val){
  2268. $refunds[$val]=StoreGoods::select('id','name','img','main_attr')->where('id',$val)->first()->toArray();
  2269. $refunds_details=OrderDetailW::select('goods_id','sku_id','type','size', DB::raw('sum(num) as num'))
  2270. ->whereIn('order_no',$refund_nos)->where('goods_id',$val)->groupBy('sku_id')->get()->toArray();
  2271. if(count($refunds_details)>0){
  2272. $sku=[];
  2273. foreach($refunds_details as $k=>$v){
  2274. $sku[$v['sku_id']]=$v;
  2275. }
  2276. $refunds[$val]['sku']=$sku;
  2277. }
  2278. }
  2279. $order['refunds']=$refunds;
  2280. $products=[];
  2281. foreach($goods as $key=>$val){
  2282. $products[$key]= $goods[$key];
  2283. $sku=[];
  2284. foreach($val['sku'] as $k=>$v){
  2285. if(empty($refunds[$key]['sku'][$k])){
  2286. unset($products[$key]['sku']);
  2287. $sku[$k]= $goods[$key]['sku'][$k];
  2288. }else{
  2289. if($goods[$key]['sku'][$k]['num'] > $refunds[$key]['sku'][$k]['num']){
  2290. unset($products[$key]['sku']);
  2291. $sku[$k] = $goods[$key]['sku'][$k];
  2292. $sku[$k]['num']=$goods[$key]['sku'][$k]['num'] - $refunds[$key]['sku'][$k]['num'];
  2293. }else{
  2294. unset($products[$key]['sku']);
  2295. }
  2296. }
  2297. }
  2298. $products[$key]['sku']= $sku;
  2299. if(empty($products[$key]['sku'])){
  2300. unset($products[$key]);
  2301. }
  2302. }
  2303. $order['products']=$products;
  2304. return $this->success($order);
  2305. }
  2306. //上传退货图片
  2307. public function uploadRefundOrderImg(Request $request){
  2308. $path_url = 'public/refund';
  2309. $path = $request->file('img')->store($path_url);
  2310. if($path){
  2311. $url = env('APP_URL'). Storage::url($path);
  2312. return $this->success($url);
  2313. }
  2314. return $this->error();
  2315. }
  2316. //取消退货审核
  2317. public function cancelRefundOrder(Request $request){
  2318. $refund_id=$request->input('refund_id');
  2319. $refund=OrderRefundW::where('id',$refund_id)->first();
  2320. if(empty($refund)){
  2321. return $this->error('450001','退货单不存在');
  2322. }
  2323. try{
  2324. DB::connection('mysql_w')->transaction(function()use($refund){
  2325. OrderRefundW::where('id',$refund->id)->delete();
  2326. $auth_count=OrderRefundW::where('order_no',$refund->order_no)->where('status',0)->count();
  2327. if($auth_count>=1){
  2328. OrderW::where('order_no',$refund->order_no)->update([
  2329. 'is_refund'=>1
  2330. ]);
  2331. }else{
  2332. $count=OrderRefundW::where('order_no',$refund->order_no)->where('status',1)->count();
  2333. if($count>=1){
  2334. OrderW::where('order_no',$refund->order_no)->update([
  2335. 'is_refund'=>2
  2336. ]);
  2337. }else{
  2338. OrderW::where('order_no',$refund->order_no)->update([
  2339. 'is_refund'=>0
  2340. ]);
  2341. }
  2342. }
  2343. },5);
  2344. return $this->success([]);
  2345. }catch(\Exception $e){
  2346. return $this->error('450001',$e->getMessage());
  2347. }
  2348. }
  2349. //上传签名图片
  2350. public function uploadQianMingImg(Request $request){
  2351. $base64_img=$request->input('img');
  2352. Log::error('签名');
  2353. // preg_match('/^(data:\s*image\/(\w+);base64,)/',$base64_img,$res);
  2354. // $base64_img=base64_decode(str_replace($res[1],'', $base64_img));
  2355. // 获取七牛云配置信息
  2356. $config = [
  2357. 'driver' => 'qiniu',
  2358. 'domain' => 'http://image.chuliu.cc', //七牛域名
  2359. 'access_key' => 'cIbo9JAqHBgO6uw97gT5fJOlEHiTiGrpB84unVEn', //AccessKey
  2360. 'secret_key' => '4f0nTNNrvzOsFc6Rz0GC5DntiJRnk2GcfkyJFNQp', //SecretKey
  2361. 'bucket' => 'daweiboshi-app', //Bucket名字
  2362. 'dirname'=> 'daweiboshi-weidian'
  2363. ];
  2364. $auth = new Auths($config['access_key'], $config['secret_key']);
  2365. // 生成上传 Token
  2366. $token = $auth->uploadToken($config['bucket']);
  2367. $filename=$this->randomKeys(18).'.jpg';
  2368. $dirname=$config['dirname'];
  2369. // 初始化 UploadManager 对象并进行文件的上传。
  2370. $uploadMgr = new UploadManager();
  2371. // 调用 UploadManager 的 putFile 方法进行文件的上传。
  2372. $pathname= $dirname.'/qianming/'.date('Ymd').'/'.$filename;
  2373. try{
  2374. $uploadMgr->putFile($token, $pathname, $base64_img);
  2375. }catch(\Exception $e){
  2376. return $this->error('450001',$e->getMessage(),$e->getMessage());
  2377. }
  2378. // 获取文件完整路径
  2379. $url = $config['domain'].'/'.$pathname;
  2380. if ($url){
  2381. return $this->success($url);
  2382. }
  2383. return $this->error();
  2384. }
  2385. function randomKeys($length){
  2386. $pattern = '1234567890abcdefghijklmnopqrstuvwxyz';
  2387. $key='';
  2388. for($i=0;$i<$length;$i++)
  2389. {
  2390. $key .= $pattern{mt_rand(0,strlen($pattern)-1)};//生成php随机数
  2391. }
  2392. return $key;
  2393. }
  2394. //商户确认收货
  2395. public function agentSureReceiveOrder(Request $request){
  2396. $order_no=$request->input('order_no');
  2397. $order=OrderW::where('order_no',$order_no)->first();
  2398. if($order->status==3){
  2399. return $this->error('450001','订单已完成');
  2400. }
  2401. try{
  2402. DB::connection('mysql_w')->transaction(function()use($order_no,$order,$request){
  2403. $order->status=3;
  2404. $order->order_status=2;
  2405. $order->self_receive=0;//收货
  2406. $order->express_receive_time=date("Y-m-d H:i:s");//订单签收时间
  2407. $order->save();
  2408. },5);
  2409. // event(new FinishAccount($order_no));
  2410. if($order->pay_type != 3){
  2411. event(new FinishAccount($order_no));
  2412. }else{
  2413. OrderW::where('order_no',$order->order_no)->update(['is_finish'=>1,'finish_no'=>$order->order_no]);
  2414. }
  2415. $user=UserW::where('id',$order->user_id)->first();
  2416. //已签收短信通知
  2417. Config::set('app.key', 'base64:7yQSmGhLZ2/n5kbyVXAOiJ3DSIP8TifHE3nfOI4d5mU=');
  2418. if(strstr($user->phone,'****' )){
  2419. if($user->phone_code){
  2420. $phone = Crypt::decryptString($user->phone_code);
  2421. }else{
  2422. $end = substr($user->openId1, -4);
  2423. $phone = str_replace('****', $end, $user->phone);
  2424. }
  2425. }else {
  2426. $phone = $user->phone;
  2427. }
  2428. $config=config('easysms');
  2429. $easySms = new EasySms($config);
  2430. $content="【大卫博士】您购买的大卫博士罐装内裤被商户标记为确认签收。若已收到货物,请忽略此短信;若没有收到,请及时联系商户查询。 ";
  2431. // $content="【大卫博士】您购买的大卫博士健康内裤被代理标记为确认签收。若已收到货物,请忽略此短信;若没有收到,请及时联系代理商查询。 ";
  2432. try{
  2433. $easySms->send($phone, ['content' =>$content ]);
  2434. Log::info('确认收货短信正常');
  2435. } catch (\Overtrue\EasySms\Exceptions\NoGatewayAvailableException $exception) {
  2436. $message = $exception->getException('qcloud')->getMessage();
  2437. Log::info($phone.'确认收货短信异常:'.json_encode($message));
  2438. }
  2439. return $this->success([]);
  2440. }catch(\Exception $e){
  2441. Log::info('签收失败2---'.json_encode($e->getMessage()));
  2442. return $this->error('450001',$e->getMessage());
  2443. }
  2444. }
  2445. //商户端确认收货,客户当面签收
  2446. public function sureReceiveOrder(Request $request){
  2447. $signature=$request->input('signature');
  2448. $order_nos=explode(',',$request->input('order_no'));
  2449. $ors=OrderW::whereIn('order_no',$order_nos)->where('status',3)->get();
  2450. Log::info($ors);
  2451. if(count($ors)>0){
  2452. return $this->error('450001','存在已完成订单');
  2453. }
  2454. Log::info(json_encode($request->input()));
  2455. try{
  2456. $order=OrderW::where('order_no',$order_nos[0])->first();
  2457. $user=UserW::where('id',$order->user_id)->first();
  2458. DB::connection('mysql_w')
  2459. ->transaction(function()use($order_nos,$order,$user,$signature,$request){
  2460. $info['status']=3;
  2461. $info['order_status']=0;
  2462. $info['self_receive']=1;//送货上门
  2463. $info['express_receive_time']=date("Y-m-d H:i:s");//订单签收时间
  2464. $info['signature']=$signature;
  2465. //以下单所填地址为准
  2466. // if(empty($order->address_id)){
  2467. // $province=$request->input('province');
  2468. // if(is_array($province) && !empty($province)){
  2469. // $province=implode('',$province);
  2470. // }
  2471. // if(is_array($province) && empty($province)){
  2472. // $province='';
  2473. // }
  2474. // $city=$request->input('city');
  2475. // if(is_array($city) && !empty($city)){
  2476. // $city=implode('',$city);
  2477. // }
  2478. // if(is_array($city) && empty($city)){
  2479. // $city='';
  2480. // }
  2481. // $area=$request->input('area');
  2482. // if(is_array($area) && !empty($area)){
  2483. // $area=implode('',$area);
  2484. // }
  2485. // if(is_array($area) && empty($area)){
  2486. // $area='';
  2487. // }
  2488. // Log::info('dddd-------dddd'.$province.'---'.$city.'---'.$area);
  2489. //
  2490. // $address=AddressW::where('user_id',$order->user_id)
  2491. // ->where('province',$province)->where('city',$city)
  2492. // ->where('area',$area)->first();
  2493. // if($address){
  2494. // $info['address_id']=$address->id;
  2495. // }else{
  2496. // $res=AddressW::create([
  2497. // 'name'=>$user->nickname,
  2498. // 'phone'=>$user->phone,
  2499. // 'user_id'=>$order->user_id,
  2500. // 'store_id'=>$order->store_id,
  2501. // 'province'=>$province,
  2502. // 'city'=>$city,
  2503. // 'area'=>$area,
  2504. // 'type'=>3,
  2505. // 'is_default'=>0,
  2506. // 'remark'=>'自动定位',
  2507. // ]);
  2508. // $info['address_id']=$res->id;
  2509. // }
  2510. // }
  2511. OrderW::whereIn('order_no',$order_nos)->update($info);
  2512. },5);
  2513. foreach($order_nos as $val){
  2514. // event(new FinishAccount($val));
  2515. $oro=OrderW::where('order_no',$val)->first();
  2516. if($oro->pay_type != 3){
  2517. event(new FinishAccount($val));
  2518. }else{
  2519. OrderW::where('order_no',$val)->update(['is_finish'=>1,'finish_no'=>$val]);
  2520. }
  2521. }
  2522. //已签收短信通知
  2523. Config::set('app.key', 'base64:7yQSmGhLZ2/n5kbyVXAOiJ3DSIP8TifHE3nfOI4d5mU=');
  2524. if(strstr($user->phone,'****' )){
  2525. if($user->phone_code){
  2526. $phone = Crypt::decryptString($user->phone_code);
  2527. }else{
  2528. $end = substr($user->openId1, -4);
  2529. $phone = str_replace('****', $end, $user->phone);
  2530. }
  2531. }else {
  2532. $phone = $user->phone;
  2533. }
  2534. $config=config('easysms');
  2535. $easySms = new EasySms($config);
  2536. $content="【大卫博士】您购买的大卫博士罐装内裤已由你本人确认签收,谢谢。";
  2537. try{
  2538. $easySms->send($phone, ['content' =>$content ]);
  2539. Log::info('客户当面签收短信正常');
  2540. } catch (\Overtrue\EasySms\Exceptions\NoGatewayAvailableException $exception) {
  2541. $message = $exception->getException('qcloud')->getMessage();
  2542. Log::info($phone.'客户当面签收短信异常:'.json_encode($message));
  2543. }
  2544. // event(new EnoughFive($order->id));
  2545. //签收公众号提醒
  2546. if($user->openId){
  2547. $data['openid']=$user->openId;
  2548. $data['data']=[
  2549. 'first' => '您的订单已被当面签收,如果没有请联系商户',
  2550. 'keyword1' => $request->input('order_no'),
  2551. 'keyword2' => date('Y-m-d H:i:s')
  2552. ];
  2553. event(new ReceivingEvent($data));
  2554. }
  2555. return $this->success([]);
  2556. }catch(\Exception $e){
  2557. Log::info('签收失败1---'.$e->getMessage());
  2558. return $this->error('450001',$e->getMessage());
  2559. }
  2560. }
  2561. //获取客户信息
  2562. public function getUser(Request $request){
  2563. $user_id=$request->input('user_id');
  2564. $user=UserW::where('id',$user_id)->first();
  2565. $store_id=Store::where('user_id',Auth::user()->id)->value('id');
  2566. $vip_log=VipLogW::where('user_id',$user->id)->where('store_id',$store_id)->first();
  2567. if($vip_log){
  2568. $user->is_vip=1;
  2569. }else{
  2570. $user->is_vip=0;
  2571. }
  2572. $orders=OrderW::where('store_id',$store_id)->where('user_id',$user_id)->get();
  2573. if(count($orders)==0){//判断客户在店铺有没有单子
  2574. $user->has_order=0;
  2575. }else{
  2576. $user->has_order=1;
  2577. }
  2578. if($user){
  2579. return $this->success($user);
  2580. }else{
  2581. return $this->error();
  2582. }
  2583. }
  2584. //修改客户信息
  2585. public function editUser(Request $request){
  2586. $rules=[
  2587. 'name'=>'required|max:32',
  2588. 'nickname'=>'required|max:32',
  2589. 'remark'=>'max:255',
  2590. 'phone'=>'required|regex:/^1[3456789][0-9]{9}$/'
  2591. ];
  2592. $message=[
  2593. 'phone.required'=>'手机号不能为空.',
  2594. 'phone.regex'=>'手机号格式有误.',
  2595. 'name.required'=>'客户姓名不能为空.',
  2596. 'name.max'=>'客户姓名最多32个字符.',
  2597. 'nickname.required'=>'客户昵称不能为空.',
  2598. 'nickname.max'=>'客户昵称最多32个字符.',
  2599. 'remark.max'=>'备注最多255个字符.',
  2600. ];
  2601. $validator = Validator::make($request->input(),$rules,$message);
  2602. if($validator->fails()){
  2603. return $this->error('400013',$validator->errors()->first());
  2604. }
  2605. $user_id=$request->input('user_id');
  2606. $res=UserW::where('id',$user_id)->update([
  2607. 'name'=>$request->input('name'),
  2608. 'phone'=>$request->input('phone'),
  2609. 'nickname'=>$request->input('nickname'),
  2610. 'sex'=>$request->input('sex'),
  2611. 'remark'=>$request->input('remark'),
  2612. ]);
  2613. if($res){
  2614. return $this->success([]);
  2615. }else{
  2616. return $this->error();
  2617. }
  2618. }
  2619. //获取所有快递公司信息
  2620. public function getExpressCompany(Request $request){
  2621. $express=new ExpressHandler();
  2622. $expressCode=$request->input('expressCode');
  2623. $res=$express->getExpressCompany($expressCode);
  2624. return $this->success($res);
  2625. }
  2626. //咨询客服,获取客服信息
  2627. public function getServiceInfo()
  2628. {
  2629. $user_id=Auth::user()->id;
  2630. $user=User::where('id',$user_id)->first();
  2631. $admin_id=Warea::where('id',$user->warea_id)->value('admin_id');
  2632. $admin=Admin::where('id',$admin_id)->select('id','headimg','qrcode','name')->first();
  2633. return $this->success($admin);
  2634. }
  2635. }