OrdertestController.php 108 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Events\ChangeBigGiftBagEvent;
  4. use App\Events\DestoryOrder;
  5. use App\Events\OrderPayEvent;
  6. use App\Events\OrderPayInfoEvent;
  7. use App\Events\SubmitOrdersInfoEvent;
  8. use App\Handlers\ExpressHandler;
  9. use App\Models\Activity;
  10. use App\Models\Address;
  11. use App\Models\Article;
  12. use App\Models\CrownCount;
  13. use App\Models\Express;
  14. use App\Models\ExpStoreAgent;
  15. use App\Models\Gift;
  16. use App\Models\Goodtest;
  17. use App\Models\HonorInfo;
  18. use App\Models\Order;
  19. use App\Models\OrderDetail;
  20. use App\Models\OrderGift;
  21. use App\Models\Orderlog;
  22. use App\Models\OrderRemark;
  23. use App\Models\Ordertest;
  24. use App\Models\User;
  25. use App\Models\UserPay;
  26. use Carbon\Carbon;
  27. use Illuminate\Database\Eloquent\Model;
  28. use Illuminate\Http\Request;
  29. use Illuminate\Support\Facades\Auth;
  30. use Illuminate\Support\Facades\Cache;
  31. use Illuminate\Support\Facades\DB;
  32. use Illuminate\Support\Facades\Log;
  33. use Illuminate\Support\Facades\Validator;
  34. class OrdertestController extends Controller
  35. {
  36. /*
  37. * 检测订单是否需要合并
  38. * **/
  39. public function search_order(Request $request){
  40. $user=Auth::user();
  41. $active=Activity::where('start_time','<=',Carbon::now()->tz(env('APP_TIMEZONE'))->toDateTimeString())
  42. ->where('end_time','>=',Carbon::now()->tz(env('APP_TIMEZONE'))->toDateTimeString())->first();
  43. //如果处于活动期间
  44. if ($active){
  45. //判断活动期间是否有相同地址的订单
  46. $or=Ordertest::where('user_id',$user->id)->where('address_id',$request->address_id)
  47. ->whereBetween('created_at',[$active->start_time,$active->end_time])
  48. ->where('is_deleted',0)->where('apply_status',0)->whereIn('status',[0,1])->first();
  49. if ($or){//如果存在
  50. return $this->error(4600,'','系统检测,该订单和订单编号为'.$or->order_num.'的收货信息一致,将会和它合并成一个订单');
  51. }
  52. }
  53. return $this->success([]);
  54. }
  55. /**查找代理**/
  56. public function get_user(Request $request){
  57. $input=$request->all();
  58. $id=Auth::user()->id;
  59. $ids=[$id];
  60. $user_id=User::where('agent_id',$id)->whereIn('cert_status',[3,6])->pluck('id')->toArray();
  61. $user_ids=User::whereIn('agent_id',$user_id)->whereIn('cert_status',[3,6])->pluck('id')->toArray();
  62. $all_ids=array_merge($ids,array_merge($user_id,$user_ids));
  63. $search_name=$input['search_name'];
  64. $where=[];
  65. if ($search_name){
  66. $where=function ($q)use($search_name){
  67. $q->where('mobile','like','%'.$search_name.'%')->orwhere('nickname','like','%'.$search_name.'%');
  68. };
  69. }
  70. $user=User::whereIn('id',$all_ids)->where($where)->select('id','mobile','level','nickname','realname','headimgurl');
  71. $count=$user->get()->count();
  72. $re=$user->take(30)->skip(($request->page-1)*30)->get();
  73. return $this->success_list($re,'',$count);
  74. }
  75. /*
  76. * 处理每次订单数据
  77. * **/
  78. public function DealOrder($size=[],$num=[]){
  79. $nums=[];
  80. $sizes=[];
  81. foreach ($size as $k=>$v){
  82. $re=Goodtest::find($v);
  83. $s=strpos($re->main_attr,'精');
  84. if (is_numeric($s)){
  85. $sizes[]='精-'.$re->size;
  86. $nums[]=$num[$k];
  87. }else{
  88. $s=strpos($re->main_attr,'简');
  89. if (is_numeric($s)){
  90. $sizes[]='简-'.$re->size;
  91. $nums[]=$num[$k];
  92. }else{
  93. $s=strpos($re->main_attr,'纯棉');
  94. if (is_numeric($s)){
  95. $sizes[]='纯棉-'.$re->size;
  96. $nums[]=$num[$k];
  97. }else{
  98. $s=strpos($re->main_attr,'高');
  99. if (is_numeric($s)){
  100. $sizes[]='高-'.$re->size;
  101. $nums[]=$num[$k];
  102. }else{
  103. $s=strpos($re->main_attr,'青');
  104. if (is_numeric($s)){
  105. $sizes[]='青-'.$re->size;
  106. $nums[]=$num[$k];
  107. }
  108. }
  109. }
  110. }
  111. }
  112. }
  113. return [$sizes,$nums];
  114. }
  115. /*
  116. * 提交订单
  117. * */
  118. public function submit_order(Request $request)
  119. {
  120. // return $this->error(50021,'暂停');
  121. $user=Auth::user();
  122. if ($user->level!=3){
  123. return $this->error('4001','','当前用户不是代理公司');
  124. }
  125. $rules = [
  126. 'size_id' => 'required',
  127. 'total' => 'required',
  128. 'type' => 'required',
  129. 'num' => 'required',
  130. 'money'=>'required',
  131. 'address_id'=>'required',
  132. 'belong_id'=>'required'
  133. ];
  134. $message = [
  135. 'required' => ':attribute不能为空',
  136. ];
  137. $attributes = [
  138. 'size_id' => 'size_id',
  139. 'total' => '商品总数量',
  140. 'type' => '商品中总类型',
  141. 'num' => '单类商品商量',
  142. 'money'=>'商品金额',
  143. 'address_id'=>'地址',
  144. ];
  145. $vali = Validator::make($request->all(), $rules, $message,$attributes);
  146. if ($vali->fails()) {
  147. Log::error('{-------提交订单的参数错误--------}'.$vali->errors()->first());
  148. return $this->error('40010', '',$vali->errors()->first());
  149. }
  150. $time=Carbon::now();
  151. $activity=Activity::where('is_ing',1)->first();
  152. if ($time>=$activity->start_time && $time<=$activity->end_time){
  153. if ($time<Carbon::today()->addHours(9) || $time>Carbon::today()->addHours(21)){
  154. return $this->error(500214,'','当前时间不能下单');
  155. }
  156. }
  157. $input=$request->all();
  158. foreach ($input['size_id'] as $k=>$v){
  159. $data=Goodtest::find($v);
  160. if (!$data){
  161. return $this->error(40013,'','购物车有未知商品,请清空购物车');
  162. }
  163. $now=Carbon::now()->timestamp;
  164. if ($data->off_time!=null){
  165. if (strtotime($data->off_time)<$now){
  166. return $this->error(300,'','商品'.$data->name.'的'.$data->size.'尺码已经下架');
  167. }
  168. }
  169. if($data->is_show==4){
  170. return $this->error(300,'','商品'.$data->name.'的'.$data->size.'尺码已经下架');
  171. }
  172. if($data->is_show==1){
  173. return $this->error(300,'','商品'.$data->name.'的'.$data->size.'尺码未下架');
  174. }
  175. }
  176. foreach ($input['size_id'] as $k=>$v){
  177. if (Cache::get('dwbs_good_num'.$v)<$input['num'][$k]){
  178. $data=Goodtest::find($v);
  179. return $this->error(300,'',$data->name.'的'.$data->size.'尺码数量不足,请重新选择数量');
  180. }
  181. }
  182. foreach ($input['size_id'] as $k=>$v){
  183. Cache::decrement('dwbs_good_num'.$v,$input['num'][$k]);
  184. }
  185. DB::beginTransaction();
  186. try{
  187. $users=User::where('id',$user->id)->first();
  188. $address=Address::where('id',$request->input('address_id'))->select('id','province','city','town')->first();
  189. $area=$address->province.$address->city.$address->town;
  190. if ($area=='山东省临沂市临沭县'){
  191. $store_id = 17;
  192. }else{
  193. $store_id = null;
  194. }
  195. // if ($users->deleted_at){
  196. // return $this->error(50024,'','您已退出!不能参与下单');
  197. // }
  198. /*
  199. * 判断当前订单是处于什么状态
  200. * **/
  201. // if ($users->money==0){
  202. // $no_pay_money=$input['money'];
  203. // $pay_money=0;
  204. // $pay_status=0;
  205. // $money=0;
  206. // }else{
  207. // if ($users->money>=$input['money']){
  208. // $no_pay_money=0;
  209. // $pay_money=$input['money'];
  210. // $pay_status=2;
  211. // $money=$users->money-$input['money'];
  212. // }else{
  213. // $no_pay_money=$input['money']-$users->money;
  214. // $pay_money=$users->money;
  215. // $pay_status=1;
  216. // $money=0;
  217. // }
  218. // }
  219. $no_pay_money=$input['money'];//订单金额,也是未支付金额
  220. $pay_money=0;
  221. /*
  222. * 判断当前时间是否处于活动期间
  223. * ***/
  224. $active=Activity::where('start_time','<=',Carbon::now()->tz(env('APP_TIMEZONE'))->toDateTimeString())
  225. ->where('end_time','>=',Carbon::now()->tz(env('APP_TIMEZONE'))->toDateTimeString())->first();
  226. $address=Address::find($request->address_id);
  227. $address->belong_id=$request->belong_id;
  228. if (!$address->save()){
  229. throw new \Exception('1');
  230. }
  231. //如果处于活动期间
  232. if ($active){
  233. //判断活动期间是否有相同地址的订单
  234. $or=Ordertest::where('user_id',$user->id)->where('address_id',$input['address_id'])
  235. ->whereBetween('created_at',[$active->start_time,$active->end_time])
  236. ->where('is_deleted',0)->whereIn('status',[0,1])->where('apply_status',0)->first();
  237. if ($or){//如果存在
  238. /*
  239. * 合并订单
  240. * **/
  241. $money_old=$or->money;
  242. $total_old=$or->total;
  243. $or->total+=$input['total'];//合并总量
  244. $or->money+=$input['money'];//合并订单金额
  245. // $or->pay_money+=$pay_money;//合并支付金额
  246. $or->is_merge=1;
  247. $money_now=$or->money;//记录当前订单的金额
  248. $total_now=$or->total;//记录当前订单的金额
  249. $orderlog = new Orderlog();
  250. $orderlog->order_id = $or->id;
  251. $orderlog->user_id = $or->user_id;
  252. $orderlog->log_name = $user->nickname;
  253. $orderlog->log_title = '合并订单';
  254. if ($or->pay_status==3){
  255. if ($or->wait_back_money>$no_pay_money){
  256. $or->no_pay_money=0;
  257. $or->wait_back_money-=$no_pay_money;
  258. }elseif ($or->wait_back_money==$no_pay_money){
  259. $or->no_pay_money=0;
  260. $or->wait_back_money-=$no_pay_money;
  261. $or->pay_status=2;
  262. }else{
  263. $or->no_pay_money=$no_pay_money-$or->wait_back_money;
  264. $or->wait_back_money=0;
  265. $or->pay_status=1;
  266. }
  267. }else{
  268. $or->no_pay_money+=$no_pay_money;
  269. }
  270. //订单金额等于支付金额
  271. if ($or->money==$or->pay_money){
  272. $or->no_pay_money=0;//未支付变为0
  273. $or->pay_status=2;//支付状态2,为全部支付
  274. $or->wait_back_money=0;//待退回金额为0
  275. }elseif ($or->money<$or->pay_money){//订单金额小于支付金额
  276. $or->no_pay_money=0;//未支付金额变为0
  277. $or->pay_status=3;//支付状态3,待退款状态
  278. $or->wait_back_money=$or->pay_money-$or->money;//待退款金额为支付金额减去订单金额
  279. }elseif ($or->money>$or->pay_money){//订单金额大于支付金额
  280. if ($or->pay_money==0){//如果支付金额为0
  281. $or->pay_status=0;//则支付状态0,未支付
  282. }else{
  283. $or->pay_status=1;//否则支付状态1,部分支付
  284. }
  285. $or->no_pay_money=$or->money-$or->pay_money;//未支付金额等于订单金额减去支付金额
  286. $or->wait_back_money=0;//待退款为0
  287. }
  288. $ar=json_decode($or->arr_json);
  289. $arr=array_merge($ar,$this->DealOrder($input['size_id'],$input['num']));
  290. $or->arr_json=json_encode($arr);
  291. // $users->money=$money;
  292. // if (!$users->save()){
  293. // throw new \Exception(1);
  294. // }
  295. //存在备注信息则添加新区
  296. if (!empty($input['remark'])){
  297. $orderremark = new OrderRemark();
  298. $orderremark->order_id = $or->id;
  299. $orderremark->name=Auth::user()->nickname;
  300. $orderremark->level = $user->level;
  301. $orderremark->type = 0;
  302. $orderremark->remark = $input['remark'];
  303. if (!$orderremark->save()) {
  304. throw new \Exception('2');
  305. }
  306. }
  307. $hard=0;
  308. $simple=0;
  309. $log='';
  310. foreach ($input['size_id'] as $k=>$v){
  311. $data=Goodtest::find($v);
  312. //判断是否订单详情是否存在相同商品的记录
  313. $or_de=OrderDetail::where('order_id',$or->id)->where('goods_id',$data->id)->first();
  314. if ($or_de){//存在
  315. $log.='商品'.$data->name.'('.$data->size.')'.',数量为'.$input['num'][$k].',';
  316. $or_de->num+=$input['num'][$k];//合并数量
  317. $or_de->money+=$input['num'][$k]*$data->money;//合并订单中此商品的总金额
  318. if (!$or_de->save()){
  319. throw new \Exception('1');
  320. }
  321. $data->sold_num=$data->sold_num+$input['num'][$k];//记录商品新卖数量
  322. $data->storage=Cache::get('dwbs_good_num'.$data->id);;//减少商品的库存
  323. if (!$data->save()){
  324. throw new \Exception('3');
  325. }
  326. }else{//订单详情中不存在此商品的记录
  327. $order_detail=new OrderDetail();
  328. $order_detail->order_id=$or->id;
  329. $order_detail->goods_id=$data->id;
  330. $log.='商品'.$data->name.'('.$data->size.')'.',数量为'.$input['num'][$k].',';
  331. $order_detail->num=$input['num'][$k];
  332. $order_detail->money=$input['num'][$k]*$data->money;
  333. $order_detail->goods_name=$data->name;
  334. $order_detail->goods_size=$data->size;
  335. $order_detail->goods_price=$data->money;
  336. $order_detail->goods_unit=$data->unit;
  337. if (!$order_detail->save()){
  338. Log::error('{-----订单详情保存出错-----}'.$user->id);
  339. throw new \Exception('订单详情出错');
  340. }
  341. $data->sold_num=$data->sold_num+$input['num'][$k];
  342. $data->storage=Cache::get('dwbs_good_num'.$data->id);
  343. if (!$data->save()){
  344. throw new \Exception('3');
  345. }
  346. }
  347. }
  348. $nums=OrderDetail::where('order_id',$or->id)->count();//判断商品的种类
  349. $hard=OrderDetail::where('order_id',$or->id)->where('goods_unit','=','套')->sum('num');//判断商品的种类
  350. $simple=OrderDetail::where('order_id',$or->id)->where('goods_unit','=','件')->sum('num');//判断商品的种类
  351. $or->type=$nums;
  352. if (!$or->save()){
  353. throw new \Exception('1');
  354. }
  355. $orderlog->log_text = '用户合并了订单,原订单总金额为' . $money_old . ',商品数量为' . $total_old . '。合并后订单金额为' . $money_now . ',合并后商品数量为' . $total_now.',添加订单包含:'.$log ;
  356. if (!$orderlog->save()) {
  357. throw new \Exception('1');
  358. }
  359. $order_ids=$or->id;//记录下订单的ID
  360. $order_nums=$or->order_num;//记录下订单的ID
  361. if($users->openid){
  362. $goodsInfo='';
  363. foreach($input['size_id'] as $key => $val){
  364. $goods=Goodtest::find($val);
  365. if($key<=5){
  366. if(empty($goodsInfo)){
  367. $goodsInfo=$goods->name.'-'.$goods->size.'*'.$input['num'][$key];
  368. }else{
  369. $goodsInfo.=','.PHP_EOL.$goods->name.'-'.$goods->size.'*'.$input['num'][$key];
  370. }
  371. }elseif($key==6){
  372. $goodsInfo.=',...';
  373. }
  374. }
  375. $mes['openid']=$users->openid;
  376. $mes['data']=[
  377. 'first' => '您的订单已提交成功,该订单将与订单号:'.$order_nums.' 进行合并',
  378. 'keyword1' => $goodsInfo,
  379. 'keyword2' => $order_nums,
  380. 'keyword3' => number_format($input['money'], 2),
  381. 'remark' => '点击链接进入系统,查看详情',
  382. ];
  383. event(new SubmitOrdersInfoEvent($mes));
  384. $this->nopaymessage();
  385. // if ($pay_money!=0){
  386. // $user_pay=new UserPay();
  387. // $user_pay->user_id=$users->id;
  388. // $user_pay->pay_money=$pay_money;
  389. // $user_pay->type=1;
  390. // $user_pay->op_name='系统自动支付';
  391. // $user_pay->order_num=$or->order_num;
  392. // $user_pay->pay_num=$this->pay_num();
  393. // $user_pay->user_money=$money;
  394. // $user_pay->remark='订单编号为'.$or->order_num.'合并订单时系统自动支付';
  395. // if (!$user_pay->save()){
  396. // throw new \Exception(1);
  397. // }
  398. // if ($user_pay->pay_money!=0){
  399. // if($users->openid){
  400. // $mes['openid']=$users->openid;
  401. // $mes['data']=[
  402. // 'first' => '您的订单:'.$or->order_num.'合并订单时,自动款成功',
  403. // 'keyword1' => '-'.number_format($pay_money, 2),
  404. // 'keyword2' => number_format($money, 2),
  405. // 'keyword3' => date("Y-m-d H:i"),
  406. // 'keyword4' => '合并订单自动支付',
  407. // 'remark' => '点击链接进入系统,查看详情',
  408. // ];
  409. // event(new OrderPayEvent($mes));
  410. // }
  411. // }
  412. //
  413. // }
  414. }
  415. }
  416. else{//不合并
  417. $order=new Ordertest();
  418. $order->user_id=$user->id;
  419. $order->store_id=$store_id;
  420. $order->order_num=$this->order_num();
  421. $order->total=$input['total'];
  422. $order->type=$input['type'];
  423. $order->money=$input['money'];
  424. $order->no_pay_money=$no_pay_money;
  425. $order->pay_money=$pay_money;
  426. $order->pay_status=0;
  427. $order->address_id=$input['address_id'];
  428. $order->good_user_id=$input['belong_id'];
  429. $order->relation=json_encode($this->GetRelation($input['belong_id']));
  430. $order->arr_json=json_encode($this->DealOrder($input['size_id'],$input['num']));
  431. if (!empty($input['remark'])){
  432. $order->remark=$input['remark'];
  433. }
  434. if (!$order->save()){
  435. Log::error('{-----订单保存出错-----}'.$user->id);
  436. throw new \Exception('订单保存出错');
  437. }
  438. // $users->money=$money;
  439. // if (!$users->save()){
  440. // throw new \Exception('1');
  441. // }
  442. // if ($pay_money!=0){
  443. // $user_pay=new UserPay();
  444. // $user_pay->user_id=$users->id;
  445. // $user_pay->pay_money=$pay_money;
  446. // $user_pay->type=1;
  447. // $user_pay->op_name='系统自动支付';
  448. // $user_pay->order_num=$order->order_num;
  449. // $user_pay->pay_num=$this->pay_num();
  450. // $user_pay->user_money=$users->money;
  451. // $user_pay->remark='订单编号为'.$order->order_num.'是提交订单时系统自动支付';
  452. // if (!$user_pay->save()){
  453. // Log::error('3333333');
  454. // throw new \Exception('3');
  455. // }
  456. // }
  457. if (!empty($input['remark'])){
  458. $orderremark = new OrderRemark();
  459. $orderremark->order_id = $order->id;
  460. $orderremark->name=Auth::user()->nickname;
  461. $orderremark->level = $user->level;
  462. $orderremark->type = 0;
  463. $orderremark->remark = $input['remark'];
  464. if (!$orderremark->save()) {
  465. throw new \Exception('2');
  466. }
  467. }
  468. $hard=0;
  469. $simple=0;
  470. $old=0;
  471. $new_old=0;
  472. foreach ($input['size_id'] as $k=>$v){
  473. $data=Goodtest::find($v);
  474. $order_detail=new OrderDetail();
  475. $order_detail->order_id=$order->id;
  476. $order_detail->goods_id=$data->id;
  477. $order_detail->num=$input['num'][$k];
  478. $order_detail->money=$input['num'][$k]*$data->money;
  479. $order_detail->goods_name=$data->name;
  480. $order_detail->goods_size=$data->size;
  481. $order_detail->goods_price=$data->money;
  482. $order_detail->goods_unit=$data->unit;
  483. if (!$order_detail->save()){
  484. Log::error('{-----订单详情保存出错-----}'.$user->id);
  485. throw new \Exception('订单详情出错');
  486. }
  487. $data->sold_num=$data->sold_num+$input['num'][$k];
  488. $data->storage=Cache::get('dwbs_good_num'.$data->id);
  489. if (!$data->save()){
  490. throw new \Exception('3');
  491. }
  492. if ($data->unit=='套'){
  493. $hard+=$input['num'][$k];
  494. }elseif ($data->unit=='件'){
  495. $simple+=$input['num'][$k];
  496. }
  497. }
  498. $order_ids=$order->id;
  499. $order_nums=$order->order_num;//记录下订单的ID
  500. $goodsInfo='';
  501. $goodsInfos='';
  502. foreach($input['size_id'] as $key => $val){
  503. $goods=Goodtest::find($val);
  504. if(empty($goodsInfo)){
  505. $goodsInfos=$goods->name.'-'.$goods->size.'*'.$input['num'][$key];
  506. }else{
  507. $goodsInfos.=','.PHP_EOL.$goods->name.'-'.$goods->size.'*'.$input['num'][$key];
  508. }
  509. if($key<=5){
  510. if(empty($goodsInfo)){
  511. $goodsInfo=$goods->name.'-'.$goods->size.'*'.$input['num'][$key];
  512. }else{
  513. $goodsInfo.=','.PHP_EOL.$goods->name.'-'.$goods->size.'*'.$input['num'][$key];
  514. }
  515. }elseif($key==6){
  516. $goodsInfo.=',...';
  517. }
  518. }
  519. $orderlog=new Orderlog();
  520. $orderlog->order_id = $order->id;
  521. $orderlog->user_id = $order->user_id;
  522. $orderlog->log_name = $user->nickname;
  523. $orderlog->log_title = '初始订单数据';
  524. $orderlog->log_text = $goodsInfos;
  525. if (!$orderlog->save()){
  526. throw new \Exception(1);
  527. }
  528. if($users->openid){
  529. $goodsInfo='';
  530. foreach($input['size_id'] as $key => $val){
  531. $goods=Goodtest::find($val);
  532. if($key<=5){
  533. if(empty($goodsInfo)){
  534. $goodsInfo=$goods->name.'-'.$goods->size.'*'.$input['num'][$key];
  535. }else{
  536. $goodsInfo.=','.PHP_EOL.$goods->name.'-'.$goods->size.'*'.$input['num'][$key];
  537. }
  538. }elseif($key==6){
  539. $goodsInfo.=',...';
  540. }
  541. }
  542. $mes['openid']=$users->openid;
  543. $mes['data']=[
  544. 'first' => '您的订单已提交成功',
  545. 'keyword1' => $goodsInfo,
  546. 'keyword2' => $order_nums,
  547. 'keyword3' => number_format($input['money'], 2),
  548. 'remark' => '点击链接进入系统,查看详情',
  549. ];
  550. event(new SubmitOrdersInfoEvent($mes));
  551. $this->nopaymessage();
  552. // if ($pay_money!=0){
  553. // if($users->openid){
  554. // $mes['openid']=$users->openid;
  555. // $mes['data']=[
  556. // 'first' => '您的订单:'.$order->order_num.'已扣款成功',
  557. // 'keyword1' => '-'.number_format($pay_money, 2),
  558. // 'keyword2' => number_format($users->money, 2),
  559. // 'keyword3' => date("Y-m-d H:i"),
  560. // 'keyword4' => '提交订单自动支付',
  561. // 'remark' => '点击链接进入系统,查看详情',
  562. // ];
  563. // event(new OrderPayEvent($mes));
  564. // }
  565. // }
  566. }
  567. }
  568. $gifts=Gift::where('activity_id',$active->id)->get();
  569. if ($gifts){
  570. $total=$hard+$simple*2;
  571. foreach ($gifts as $k=>$v){
  572. if ($total>=$v->limit_num){
  573. $num=floor($total/$v->num);
  574. }else{
  575. $num=0;
  576. }
  577. $ordergift=OrderGift::where('order_id',$order_ids)->where('gift_id',$v->id)->first();
  578. if ($ordergift){
  579. $ordergift->activity_id=$active->id;
  580. $ordergift->gift_id=$v->id;
  581. $ordergift->num=$num;
  582. $ordergift->order_id=$order_ids;
  583. if (!$ordergift->save()){
  584. throw new \Exception('1');
  585. }
  586. }else{
  587. $ordergifts=new OrderGift();
  588. $ordergifts->activity_id=$active->id;
  589. $ordergifts->gift_id=$v->id;
  590. $ordergifts->num=$num;
  591. $ordergifts->order_id=$order_ids;
  592. if (!$ordergifts->save()){
  593. throw new \Exception('1');
  594. }
  595. }
  596. }
  597. }
  598. }else{
  599. $order=new Ordertest();
  600. $order->user_id=$user->id;
  601. $order->store_id=$store_id;
  602. $order->order_num=$this->order_num();
  603. $order->total=$input['total'];
  604. $order->type=$input['type'];
  605. $order->money=$input['money'];
  606. $order->no_pay_money=$no_pay_money;
  607. $order->pay_money=$pay_money;
  608. $order->pay_status=0;
  609. $order->address_id=$input['address_id'];
  610. $order->good_user_id=$input['belong_id'];
  611. $order->relation=json_encode($this->GetRelation($input['belong_id']));
  612. $order->arr_json=json_encode($this->DealOrder($input['size_id'],$input['num']));
  613. if (!empty($input['remark'])){
  614. $order->remark=$input['remark'];
  615. }
  616. if (!$order->save()){
  617. Log::error('{-----订单保存出错-----}'.$user->id);
  618. throw new \Exception('订单保存出错');
  619. }
  620. // $users->money=$money;
  621. // if (!$users->save()){
  622. // throw new \Exception('1');
  623. // }
  624. // if ($pay_money!=0){
  625. // $user_pay=new UserPay();
  626. // $user_pay->user_id=$users->id;
  627. // $user_pay->pay_money=$pay_money;
  628. // $user_pay->type=1;
  629. // $user_pay->op_name='系统自动支付';
  630. // $user_pay->order_num=$order->order_num;
  631. // $user_pay->pay_num=$this->pay_num();
  632. // $user_pay->user_money=$users->money;
  633. // $user_pay->remark='订单编号为'.$order->order_num.'是提交订单时系统自动支付';
  634. // if (!$user_pay->save()){
  635. // Log::error('3333333');
  636. // throw new \Exception('3');
  637. // }
  638. // }
  639. if (!empty($input['remark'])){
  640. $orderremark = new OrderRemark();
  641. $orderremark->order_id = $order->id;
  642. $orderremark->name=Auth::user()->nickname;
  643. $orderremark->level = $user->level;
  644. $orderremark->type = 0;
  645. $orderremark->remark = $input['remark'];
  646. if (!$orderremark->save()) {
  647. throw new \Exception('2');
  648. }
  649. }
  650. foreach ($input['size_id'] as $k=>$v){
  651. $data=Goodtest::find($v);
  652. $order_detail=new OrderDetail();
  653. $order_detail->order_id=$order->id;
  654. $order_detail->goods_id=$data->id;
  655. $order_detail->num=$input['num'][$k];
  656. $order_detail->money=$input['num'][$k]*$data->money;
  657. $order_detail->goods_name=$data->name;
  658. $order_detail->goods_size=$data->size;
  659. $order_detail->goods_price=$data->money;
  660. $order_detail->goods_unit=$data->unit;
  661. if (!$order_detail->save()){
  662. Log::error('{-----订单详情保存出错-----}'.$user->id);
  663. throw new \Exception('订单详情出错');
  664. }
  665. $data->sold_num=$data->sold_num+$input['num'][$k];
  666. $data->storage=Cache::get('dwbs_good_num'.$data->id);
  667. if (!$data->save()){
  668. throw new \Exception('3');
  669. }
  670. }
  671. $order_ids=$order->id;
  672. $order_nums=$order->order_num;//记录下订单的ID
  673. $goodsInfo='';
  674. $goodsInfos='';
  675. foreach($input['size_id'] as $key => $val){
  676. $goods=Goodtest::find($val);
  677. if(empty($goodsInfos)){
  678. $goodsInfos=$goods->name.'-'.$goods->size.'*'.$input['num'][$key];
  679. }else{
  680. $goodsInfos.=','.PHP_EOL.$goods->name.'-'.$goods->size.'*'.$input['num'][$key];
  681. }
  682. if($key<=5){
  683. if(empty($goodsInfo)){
  684. $goodsInfo=$goods->name.'-'.$goods->size.'*'.$input['num'][$key];
  685. }else{
  686. $goodsInfo.=','.PHP_EOL.$goods->name.'-'.$goods->size.'*'.$input['num'][$key];
  687. }
  688. }elseif($key==6){
  689. $goodsInfo.=',...';
  690. }
  691. }
  692. $orderlog=new Orderlog();
  693. $orderlog->order_id = $order->id;
  694. $orderlog->user_id = $order->user_id;
  695. $orderlog->log_name = $user->nickname;
  696. $orderlog->log_title = '初始订单数据';
  697. $orderlog->log_text = $goodsInfos;
  698. if (!$orderlog->save()){
  699. throw new \Exception(1);
  700. }
  701. if($users->openid){
  702. $mes['openid']=$users->openid;
  703. $mes['data']=[
  704. 'first' => '您的订单已提交成功',
  705. 'keyword1' => $goodsInfo,
  706. 'keyword2' => $order_nums,
  707. 'keyword3' => number_format($input['money'], 2),
  708. 'remark' => '点击链接进入系统,查看详情',
  709. ];
  710. event(new SubmitOrdersInfoEvent($mes));
  711. // if ($pay_money!=0){
  712. // if($users->openid){
  713. // $mes['openid']=$users->openid;
  714. // $mes['data']=[
  715. // 'first' => '您的订单:'.$order->order_num.'已扣款成功',
  716. // 'keyword1' => '-'.number_format($pay_money, 2),
  717. // 'keyword2' => number_format($users->money, 2),
  718. // 'keyword3' => date("Y-m-d H:i"),
  719. // 'keyword4' => '提交订单自动支付',
  720. // 'remark' => '点击链接进入系统,查看详情',
  721. // ];
  722. // event(new OrderPayEvent($mes));
  723. // }
  724. // }
  725. }
  726. }
  727. DB::commit();
  728. if(isset($or) && !empty($or)){
  729. event(new ChangeBigGiftBagEvent(['order_id'=>$or->id,'type'=>'edit','n'=>1]));
  730. }
  731. return $this->success(['order_id'=>$order_ids,'order_num'=>$order_nums]);
  732. }catch (\Exception $exception){
  733. Log::error('------------提交订单出错,出错信息为------:'.$exception);
  734. DB::rollBack();
  735. return $this->error('40011','','订单出错');
  736. }
  737. }
  738. /**订单结算通知**/
  739. public function nopaymessage(){
  740. $id=Auth::user()->id;
  741. $user=User::find($id);
  742. $activity=Activity::where('is_ing',1)->first();
  743. $orders=Ordertest::where('user_id',$id)->whereBetween('created_at',[$activity->start_time,$activity->end_time])->where('is_deleted',0)->get();
  744. $money=0;
  745. $pay_money=0;
  746. $no_pay_money=0;
  747. $wait_back_money=0;
  748. foreach ($orders as $k=>$v){
  749. $money+=$v->money;
  750. $pay_money+=$v->pay_money;
  751. $no_pay_money+=$v->no_pay_money;
  752. $wait_back_money+=$v->wait_back_money;
  753. }
  754. if($user->openid){
  755. if ($wait_back_money==0){
  756. $remark='点击链接进入系统,查看详情';
  757. }else{
  758. $remark='其中包含需要退款的金额共'.$wait_back_money.'元。点击链接进入系统,查看详情';
  759. }
  760. $mes['openid']=$user->openid;
  761. $mes['data']=[
  762. 'first' => '您在'.$activity->title.'活动中下的订单支付情况如下:',
  763. 'keyword1' => number_format($money,2),
  764. 'keyword2' => number_format($pay_money,2),
  765. 'keyword3' => number_format($no_pay_money,2),
  766. 'keyword4' => date("Y-m-d H:i"),
  767. 'remark' => $remark,
  768. ];
  769. event(new OrderPayInfoEvent($mes));
  770. }
  771. }
  772. /*生成订单编号*/
  773. public function order_num(){
  774. $user=Auth::user();
  775. $number=mb_substr($user->auth_code,0,4).'-'.date('Ymd',time()).mb_substr(time(),7,10).'-'.rand(1111,9999);
  776. $num=Ordertest::where('order_num',$number)->count();
  777. if ($num>0){
  778. $number=$this->order_num();
  779. return $number;
  780. }
  781. return $number;
  782. }
  783. /*
  784. * 订单详情
  785. * */
  786. public function order_detail(Request $request){
  787. $rules=[
  788. 'order_num'=>'required',
  789. ];
  790. $message=[
  791. 'order_num.message'=>'订单id是必填项',
  792. ];
  793. $vali=Validator::make($request->all(),$rules,$message);
  794. if ($vali->fails()){
  795. return $this->error('40012','',$vali->errors()->first());
  796. }
  797. // DB::enableQueryLog();
  798. $order=Ordertest::where('order_num',$request->order_num)->with(['belong_user'])->first();
  799. $detail=OrderDetail::where('order_id',$order->id)->groupBy('goods_name')->get();
  800. $re=[];
  801. foreach ($detail as $k=>$v){
  802. $order_detail=OrderDetail::where('order_id',$v->order_id)->where('goods_name',$v->goods_name)->with(['get_good'])->get();
  803. $size=[];
  804. $size_id=[];
  805. $num=[];
  806. $goods_list=[];
  807. foreach ($order_detail as $ke=>$va){
  808. $size[$ke]=$va->get_good->size;
  809. $size_id[$ke]=$va->goods_id;
  810. $num[$ke]=$va->num;
  811. $goods_list[$ke]['size']=$va->get_good->size;
  812. $goods_list[$ke]['size_id']=$va->goods_id;
  813. $goods_list[$ke]['id']=$va->goods_id;
  814. $goods_list[$ke]['number']=$va->num;
  815. }
  816. $re[$k]['goods_list']=$goods_list;
  817. $re[$k]['name']=$v->goods_name;
  818. $re[$k]['id']=$v->id;
  819. $re[$k]['size']=$size;
  820. $re[$k]['size_id']=$size_id;
  821. $re[$k]['attr_id']=$v->get_good->attr_id;
  822. $re[$k]['num']=$num;
  823. $re[$k]['money']=$v->money/$v->num;
  824. $re[$k]['unit']=$v->get_good->unit;
  825. $re[$k]['main_img']=$v->get_good->main_img;
  826. // $re[$k]['remark']=$v->remark;
  827. $re[$k]['banner_img']=$v->get_good->banner_img;
  828. $re[$k]['sec_attr']=$v->get_good->sec_attr;
  829. }
  830. $activity=Activity::where('is_ing',1)->first();
  831. $time=Carbon::now();
  832. $bigstatus=false;
  833. if ($time<=$activity->end_time && $time>=$activity->start_time){
  834. $bigstatus=true;
  835. }
  836. // 测试保留数据
  837. // if($order->order_num=='DWBS-20220103764-5936' || $order->order_num=='DWBS-20210426794-5430'){
  838. // $bigstatus=true;
  839. // }
  840. $all_data=[
  841. // 'order_num'=>$order->ordersn,
  842. // 'time'=>strtotime($order->created_at)*1000,
  843. // 'status'=>$order->status,
  844. 'address'=>[
  845. 'city'=>$order->address->city,
  846. 'provice'=>$order->address->province,
  847. 'area'=>$order->address->town,
  848. "address"=>$order->address->address,
  849. "con_name"=>$order->address->username,
  850. "con_mobile"=>$order->address->mobile,
  851. ],
  852. 'remark'=>$order->remark,
  853. 'order_id'=>$order->id,
  854. 'is_merge'=>$order->is_merge,
  855. 'track_number'=>$order->track_number==null?'':$order->track_number,
  856. 'track_time'=>$order->track_time==null?'':$order->track_time,
  857. 'track_remark'=>$order->track_remark==null?'':$order->track_remark,
  858. 'track_company'=>$order->track_company==null?'':$order->track_company,
  859. 'track_status'=>$order->track_status,
  860. 'belong_user'=>$order->belong_user,
  861. 'bigstatus'=>$bigstatus,
  862. 'biggift'=>DB::table('big_gift_apply')->where('order_id',$order->id)->where('is_deleted',0)->first(),
  863. 'list'=>$re,
  864. 'destroy_cause'=>$order->destroy_cause,
  865. 'order_num'=>$order->order_num,
  866. 'total'=>$order->total,
  867. 'money'=>$order->money,
  868. 'created_at'=>$order->created_at->toDateTimeString(),
  869. 'status'=>$order->status,
  870. 'is_deleted'=>$order->is_deleted,
  871. 'apply_status'=>$order->apply_status,
  872. 'destroy_status'=>$order->destroy_status,
  873. ];
  874. return $this->success($all_data);
  875. }
  876. /*
  877. *订单日志
  878. */
  879. public function get_log(Request $request){
  880. $rules=[
  881. 'order_num'=>'required',
  882. ];
  883. $message=[
  884. 'order_num.required'=>'订单id是必填项',
  885. ];
  886. $vali=Validator::make($request->all(),$rules,$message);
  887. if ($vali->fails()){
  888. return $this->error('40012','',$vali->errors()->first());
  889. }
  890. $order_id=Ordertest::where('order_num',$request->order_num)->value('id');
  891. $data=Orderlog::where('order_id',$order_id)->get();
  892. return $this->success_list($data);
  893. }
  894. /*
  895. * 支付订单
  896. * */
  897. public function pay_order(Request $request){
  898. // Log::error(json_encode($request->all()));
  899. return $this->error(40014,'','活动期间不能支付,活动后统一支付');
  900. $rules=[
  901. 'order_id'=>'required',
  902. ];
  903. $message=[
  904. 'order_id.required'=>'订单id是必填项',
  905. ];
  906. $vali=Validator::make($request->all(),$rules,$message);
  907. if ($vali->fails()){
  908. return $this->error('40012','',$vali->errors()->first());
  909. }
  910. $users=Auth::user();
  911. $order=Ordertest::find($request->order_id);
  912. if ($order->pay_status!=0){
  913. return $this->error(40014,'','订单已经支付,请勿重复支付');
  914. }
  915. $user=User::find($users->id);
  916. if ($user->money<$order->money){
  917. return $this->error(40015,'','所剩余额不足');
  918. }
  919. DB::beginTransaction();
  920. try{
  921. $order->pay_status=2;
  922. $order->pay_money=$order->money;
  923. $order->no_pay_money=0;
  924. if (!$order->save()){
  925. Log::error('11111');
  926. throw new \Exception('1');
  927. }
  928. $user->money=$user->money-$order->money;
  929. if (!$user->save()){
  930. Log::error('222222');
  931. throw new \Exception('2');
  932. }
  933. $user_pay=new UserPay();
  934. $user_pay->user_id=$user->id;
  935. $user_pay->pay_money=$order->money;
  936. $user_pay->type=1;
  937. $user_pay->op_name=$user->nickname;
  938. $user_pay->order_num=$order->order_num;
  939. $user_pay->pay_num=$this->pay_num();
  940. $user_pay->user_money=$user->money;
  941. $user_pay->remark='订单编号为'.$order->order_num;
  942. if (!$user_pay->save()){
  943. Log::error('3333333');
  944. throw new \Exception('3');
  945. }
  946. if($users->openid){
  947. $mes['openid']=$users->openid;
  948. $mes['data']=[
  949. 'first' => '您的订单:'.$order->order_num.'已扣款成功',
  950. 'keyword1' => '-'.number_format($order->money, 2),
  951. 'keyword2' => number_format($user->money, 2),
  952. 'keyword3' => date("Y-m-d H:i"),
  953. 'keyword4' => '用户支付',
  954. 'remark' => '点击链接进入系统,查看详情',
  955. ];
  956. event(new OrderPayEvent($mes));
  957. }
  958. DB::commit();
  959. return $this->success([]);
  960. }catch (\Exception $exception){
  961. DB::rollBack();
  962. Log::error('支付订单出错'.$exception);
  963. return $this->error(40016,'','支付失败,请重试');
  964. }
  965. }
  966. /*
  967. * 订单列表
  968. * */
  969. public function order_list(Request $request){
  970. $rules=[
  971. 'status'=>'required',
  972. ];
  973. $message=[
  974. 'status.required'=>'订单id是必填项',
  975. ];
  976. $vali=Validator::make($request->all(),$rules,$message);
  977. if ($vali->fails()){
  978. return $this->error(40017,'',$vali->errors()->first());
  979. }
  980. $user=Auth::user();
  981. $user=User::find($user->id);
  982. $type=$request->status;
  983. if ($type==0){
  984. $order_all=Ordertest::where('user_id','=',$user->id)
  985. ->with(['order_details'])->orderByDesc('created_at')->paginate(15);
  986. }elseif($type==1){
  987. $order_all=Ordertest::where('user_id','=',$user->id)
  988. ->where('pay_status','=',0)->orderByDesc('created_at')->where('is_deleted',0)->paginate(15);
  989. }elseif ($type==2){
  990. $order_all=Ordertest::where('user_id','=',$user->id)
  991. ->where(function ($q){
  992. $q->where('pay_status','=',2)->whereIn('status',[0,1,2])->orwhere('apply_status',1);
  993. })->orderByDesc('created_at')->where('is_deleted',0)->paginate(15);
  994. }elseif ($type==3){
  995. $order_all=Ordertest::where('user_id','=',$user->id)
  996. ->where('pay_status','=',2)->where('is_deleted',0)->where('status',3)
  997. ->orderByDesc('created_at')->paginate(15);
  998. }elseif ($type==4){
  999. $order_all=Ordertest::where('user_id','=',$user->id)
  1000. ->where('pay_status','=',2)->where('is_deleted',0)->where('status',4)
  1001. ->orderByDesc('created_at')->paginate(15);
  1002. }
  1003. $res=[];
  1004. foreach ($order_all as $k=>$v){
  1005. // $detail=OrderDetail::where('order_id',$v->id)->with(['get_good'])->groupBy('goods_name')->get();
  1006. $re=[];
  1007. // $d=[];
  1008. foreach ($v->order_details as $key=>$value){
  1009. // $order_detail=OrderDetail::where('id',$value->id)->where('goods_name',$value->goods_name)->with(['get_good'])->get();
  1010. // $size=[];
  1011. // foreach ($order_detail as $ke=>$va){
  1012. // $size[$ke]=$va->get_good->size;
  1013. // $size_id[$ke]=$va->goods_id;
  1014. // }
  1015. // $re[$key]['name']=$value->goods_name;
  1016. // $re[$key]['size']=$size;
  1017. // $re[$key]['size_id']=$size_id;
  1018. // $re[$key]['num']=$value->num;
  1019. // $re[$key]['money']=$value->money/$value->num;
  1020. // $re[$key]['unit']=$value->get_good->unit;
  1021. $re[$key]['main_img']=$value->main_img;
  1022. // $re[$key]['banner_img']=$value->get_good->banner_img;
  1023. // $re[$key]['sec_attr']=$value->get_good->sec_attr;
  1024. }
  1025. $res[$k]['id']=$v->id;
  1026. $res[$k]['order_id']=$v->id;
  1027. $res[$k]['order']=$re;
  1028. $res[$k]['type']=$v->type;
  1029. $res[$k]['order_type']=$v->order_type;
  1030. $res[$k]['total']=$v->total;
  1031. $res[$k]['is_deleted']=$v->is_deleted==0?false:true;
  1032. $res[$k]['pay_status']=$v->pay_status==0?false:true;
  1033. $res[$k]['status']=$v->status;
  1034. $res[$k]['order_num']=$v->order_num;
  1035. $res[$k]['money']=$v->money;
  1036. $res[$k]['is_merge']=$v->is_merge;
  1037. $res[$k]['order_type']=$v->order_type;
  1038. $res[$k]['track_status']=$v->track_status;
  1039. $res[$k]['apply_status']=$v->apply_status;
  1040. $res[$k]['destroy_cause']=$v->destroy_cause;
  1041. $res[$k]['destroy_status']=$v->destroy_status;
  1042. $res[$k]['reject_cause']=$v->reject_cause;
  1043. if ($v->address){
  1044. if ($v->get_address->isEmpty()){
  1045. $res[$k]['address']=$v->address;
  1046. $res[$k]['address']['level']=null;
  1047. $res[$k]['address']['nickname']=$v->address->username;
  1048. }else{
  1049. $address=$v->get_address[0];
  1050. $res[$k]['address']=$v->address;
  1051. $res[$k]['address']['level']=$address->level;
  1052. $res[$k]['address']['nickname']=$address->nickname==null?$address->username:$address->nickname;
  1053. }
  1054. }
  1055. $res[$k]['created_at']=$v->created_at->toDateTimeString();
  1056. if ($v->is_deleted){
  1057. $res[$k]['deleted_time']=$v->updated_at->toDateTimeString();
  1058. }
  1059. if ($v->status==3||$v->status==4){
  1060. if (!empty($v->track_number)){
  1061. $res[$k]['express']='https://m.kuaidi100.com/app/query/?com='.$v->track_company.'&nu='.$v->track_number.'&coname';
  1062. }
  1063. }
  1064. }
  1065. // dd(DB::getQueryLog());
  1066. return $this->success_list($res,'',$order_all->total());
  1067. }
  1068. //订单列表选项卡角标数字
  1069. public function order_list_num(Request $request)
  1070. {
  1071. $user = Auth::user();
  1072. $user = User::find($user->id);
  1073. $type = $request->status;
  1074. $data=[];
  1075. $data['all'] = Ordertest::where('user_id', '=', $user->id)->count();
  1076. $data['wait_pay'] = Ordertest::where('user_id', '=', $user->id)->where('pay_status', '=', 0)->where('is_deleted', 0)->count();
  1077. $data['wait_audit'] = Ordertest::where('user_id', '=', $user->id)
  1078. ->where(function ($q) {
  1079. $q->where('pay_status', '=', 2)->whereIn('status', [0, 1, 2])->orwhere('apply_status', 1);
  1080. })->where('is_deleted', 0)->count();
  1081. $data['wait_receive'] = Ordertest::where('user_id', '=', $user->id)
  1082. ->where('pay_status', '=', 2)->where('is_deleted', 0)->where('status', 3)
  1083. ->count();
  1084. $data['finish'] = Ordertest::where('user_id', '=', $user->id)
  1085. ->where('pay_status', '=', 2)->where('is_deleted', 0)->where('status', 4)
  1086. ->count();
  1087. return $this->success($data);
  1088. }
  1089. /*
  1090. * 搜索订单列表
  1091. * */
  1092. public function app_search_order_list(Request $request){
  1093. $user=Auth::user();
  1094. $user=User::find($user->id);
  1095. $search=$request->input('search',null);
  1096. if ($search){
  1097. $order_all=Ordertest::where('user_id','=',$user->id)->with(['order_details'])
  1098. ->where('order_num','like','%'.$search.'%')->orderByDesc('created_at')->paginate(15);
  1099. }else{
  1100. $order_all=Ordertest::where('user_id','=',$user->id)->with(['order_details'])
  1101. ->orderByDesc('created_at')->paginate(15);
  1102. }
  1103. $res=[];
  1104. foreach ($order_all as $k=>$v){
  1105. $re=[];
  1106. foreach ($v->order_details as $key=>$value){
  1107. $re[$key]['main_img']=$value->main_img;
  1108. }
  1109. $res[$k]['id']=$v->id;
  1110. $res[$k]['order_id']=$v->id;
  1111. $res[$k]['order']=$re;
  1112. $res[$k]['type']=$v->type;
  1113. $res[$k]['order_type']=$v->order_type;
  1114. $res[$k]['total']=$v->total;
  1115. $res[$k]['is_deleted']=$v->is_deleted==0?false:true;
  1116. $res[$k]['pay_status']=$v->pay_status==0?false:true;
  1117. $res[$k]['status']=$v->status;
  1118. $res[$k]['order_num']=$v->order_num;
  1119. $res[$k]['money']=$v->money;
  1120. $res[$k]['is_merge']=$v->is_merge;
  1121. $res[$k]['order_type']=$v->order_type;
  1122. $res[$k]['track_status']=$v->track_status;
  1123. $res[$k]['apply_status']=$v->apply_status;
  1124. $res[$k]['destroy_cause']=$v->destroy_cause;
  1125. $res[$k]['destroy_status']=$v->destroy_status;
  1126. $res[$k]['reject_cause']=$v->reject_cause;
  1127. if ($v->address){
  1128. if ($v->get_address->isEmpty()){
  1129. $res[$k]['address']=$v->address;
  1130. $res[$k]['address']['level']=null;
  1131. $res[$k]['address']['nickname']=$v->address->username;
  1132. }else{
  1133. $address=$v->get_address[0];
  1134. $res[$k]['address']=$v->address;
  1135. $res[$k]['address']['level']=$address->level;
  1136. $res[$k]['address']['nickname']=$address->nickname==null?$address->username:$address->nickname;
  1137. }
  1138. }
  1139. $res[$k]['created_at']=$v->created_at->toDateTimeString();
  1140. if ($v->status==3||$v->status==4){
  1141. if (!empty($v->track_number)){
  1142. $res[$k]['express']='https://m.kuaidi100.com/app/query/?com='.$v->track_company.'&nu='.$v->track_number.'&coname';
  1143. }
  1144. }
  1145. }
  1146. return $this->success_list($res,'',$order_all->total());
  1147. }
  1148. /*
  1149. *订单作废-----订单修改
  1150. */
  1151. public function destory(Request $request){
  1152. $rules=[
  1153. 'order_num'=>'required',
  1154. 'destroy_cause'=>'required',
  1155. ];
  1156. $message=[
  1157. 'order_num.required'=>'订单id是必填项',
  1158. 'destroy_cause.required'=>'作废原因是必填项',
  1159. ];
  1160. $vali=Validator::make($request->all(),$rules,$message);
  1161. if ($vali->fails()){
  1162. return $this->error(40016,'',$vali->errors()->first());
  1163. }
  1164. $order=Ordertest::where('order_num',$request->order_num)->lockForUpdate()->first();
  1165. if (!$order){
  1166. return $this->error(300,'','查无此订单,请重试');
  1167. }
  1168. if ($order->is_deleted==1){
  1169. return $this->error(400214,'','该订单已作废,请刷新订单列表');
  1170. }
  1171. DB::beginTransaction();
  1172. try{
  1173. $order->is_deleted=1;
  1174. $order->destroy_cause=$request->input('destroy_cause','');
  1175. $order->wait_back_money=0;
  1176. $order->pay_status=0;
  1177. if (!$order->save()){
  1178. throw new \Exception('1');
  1179. }
  1180. // if ($order->pay_status!=0){
  1181. // return $this->error(40013,'','该订单已支付,请联系客服修改');
  1182. // }
  1183. if ($order->pay_money!=0){
  1184. $user=User::where('id',$order->user_id)->lockForUpdate()->first();
  1185. $user->money=$user->money+$order->pay_money;
  1186. if (!$user->save()){
  1187. throw new \Exception('2');
  1188. }
  1189. $user_logs=UserPay::where('user_id',$order->user_id)->lockForUpdate()->orderByDesc('id')->limit(1)->first();
  1190. $user_log=new UserPay();
  1191. $user_log->user_id=$order->user_id;
  1192. $user_log->pay_money=$order->pay_money;
  1193. $user_log->op_name=$user->nickname;
  1194. $user_log->order_num=$order->order_num;
  1195. $user_log->pay_num=$this->pay_num();
  1196. $user_log->type=2;
  1197. $user_log->remark='订单作废退回';
  1198. $user_log->user_money=$user_logs->user_money+$order->pay_money;
  1199. if (!$user_log->save()){
  1200. throw new \Exception('3');
  1201. }
  1202. }
  1203. $orderlog = new Orderlog();
  1204. $orderlog->order_id = $order->id;
  1205. $orderlog->user_id = $order->user_id;
  1206. $orderlog->log_name = '用户本人';
  1207. $orderlog->log_title = '作废订单';
  1208. $orderlog->log_text = '用户本人自动作废订单';
  1209. if (!$orderlog->save()){
  1210. throw new \Exception('3');
  1211. }
  1212. $orderdetail=OrderDetail::where('order_id',$order->id)->get();
  1213. foreach ($orderdetail as $k=>$v){
  1214. $good=Goodtest::find($v->goods_id);
  1215. $good->storage=$good->storage+$v->num;
  1216. $good->sold_num=$good->sold_num-$v->num;
  1217. Cache::increment('dwbs_good_num'.$v->goods_id,$v->num);
  1218. if (!$good->save()){
  1219. throw new \Exception('2');
  1220. }
  1221. }
  1222. // $orders=Ordertest::where('order_num',$request->order_num)->first();
  1223. // if ($orders->pay_money>0){
  1224. // return $this->error(40013,'','该订单已由后台进行支付,暂时不能作废');
  1225. // }
  1226. // if ($orders->pay_status!=0){
  1227. // return $this->error(40013,'','该订单已由后台进行支付,暂时不能作废');
  1228. // }
  1229. DB::commit();
  1230. event(new ChangeBigGiftBagEvent(['order_id'=>$order->id,'type'=>'cancel']));
  1231. try {
  1232. $user=User::find($order->user_id);
  1233. if($user->openid){
  1234. $mes['openid']=$user->openid;
  1235. $mes['data']=[
  1236. 'first' => '您的订单已主动作废',
  1237. 'keyword1' => $order->order_num,
  1238. 'keyword2' => $request->destroy_cause,
  1239. 'remark' => '点击链接进入系统,查看详情',
  1240. ];
  1241. event(new DestoryOrder($mes));
  1242. }
  1243. }catch (\Exception $exception){
  1244. }
  1245. return $this->success([]);
  1246. }catch (\Exception $exception){
  1247. DB::rollBack();
  1248. return $this->error('40018','','订单作废失败,请重试');
  1249. }
  1250. }
  1251. public function pay_num(){
  1252. $num=date('Ymd',time()).'100000'.str_pad(Auth::user()->id,6,0,STR_PAD_LEFT).rand(11111,99999);
  1253. $count=UserPay::where('pay_num',$num)->count();
  1254. if ($count>0){
  1255. $num=$this->pay_num();
  1256. return $num;
  1257. }
  1258. return $num;
  1259. }
  1260. /*确认收货
  1261. * **/
  1262. public function sure_order(Request $request){
  1263. $rules=[
  1264. 'order_num'=>'required',
  1265. ];
  1266. $message=[
  1267. 'order_num.required'=>'订单id是必填项',
  1268. ];
  1269. $vali=Validator::make($request->all(),$rules,$message);
  1270. if ($vali->fails()){
  1271. return $this->error(40017,'',$vali->errors()->first());
  1272. }
  1273. $order=Ordertest::where('order_num',$request->order_num)->first();
  1274. $order->status=4;
  1275. $order->save();
  1276. return $this->success([]);
  1277. }
  1278. /*
  1279. * 订单统计
  1280. * */
  1281. public function order_data(Request $request){
  1282. $user=Auth::user();
  1283. // $user=User::where('mobile',13509768818)->first();
  1284. DB::enableQueryLog();
  1285. $wherebetween=[];
  1286. $where=function ($query){
  1287. $query->where('is_deleted',0);
  1288. };
  1289. $order_all=Ordertest::where($where)->where('user_id',$user->id)->get();
  1290. $hard_all=0;
  1291. $simple_all=0;
  1292. $old_all=0;
  1293. $newold_all=0;
  1294. $youth_all=0;
  1295. $hard_good=Goodtest::where('main_attr','大卫博士精装版')->pluck('id')->toArray();
  1296. $simple_good=Goodtest::where('main_attr','大卫博士简约版')->pluck('id')->toArray();
  1297. $old_good=Goodtest::where('main_attr','大卫博士高腰版')->pluck('id')->toArray();
  1298. $newold_good=Goodtest::where('main_attr','大卫博士纯棉老人版')->pluck('id')->toArray();
  1299. $youth_good=Goodtest::where('main_attr','大卫博士青春版')->pluck('id')->toArray();
  1300. foreach ($order_all as $k=>$v) {
  1301. $order=Ordertest::where('id',$v->id)->with(['order_detail'])->first();
  1302. foreach ($order->order_detail as $ke=>$va){
  1303. if (in_array($va->goods_id,$hard_good)){
  1304. $hard_all+=$va->num;
  1305. }elseif (in_array($va->goods_id,$simple_good)){
  1306. $simple_all+=$va->num;
  1307. }elseif (in_array($va->goods_id,$old_good)){
  1308. $old_all+=$va->num;
  1309. }elseif (in_array($va->goods_id,$newold_good)){
  1310. $newold_all+=$va->num;
  1311. }elseif (in_array($va->goods_id,$youth_good)){
  1312. $youth_all+=$va->num;
  1313. }
  1314. }
  1315. }
  1316. if ($request->has('start')){
  1317. if ($request->start){
  1318. $start=date('Y-m-d H:i:s',strtotime($request->start));
  1319. $end=date('Y-m-d H:i:s',strtotime($request->end));
  1320. $wherebetween=function ($query)use($start,$end){
  1321. $query->whereBetween('created_at',[$start,$end]);
  1322. };
  1323. }
  1324. }
  1325. $orders=Ordertest::where($where)->where('user_id',$user->id)->where($wherebetween)->get();
  1326. $hard=0;
  1327. $simple=0;
  1328. $old=0;
  1329. $newold=0;
  1330. $youth=0;
  1331. $old_money=0;
  1332. $newold_money=0;
  1333. $simple_money=0;
  1334. $hard_money=0;
  1335. $youth_money=0;
  1336. $money=0;
  1337. $pay_money=0;
  1338. $no_pay_money=0;
  1339. foreach ($orders as $k=>$v) {
  1340. $order=Ordertest::where('id',$v->id)->with(['order_detail'])->first();
  1341. foreach ($order->order_detail as $ke=>$va){
  1342. if (in_array($va->goods_id,$hard_good)){
  1343. $hard+=$va->num;
  1344. $hard_money+=$va->money;
  1345. }elseif (in_array($va->goods_id,$simple_good)){
  1346. $simple+=$va->num;
  1347. $simple_money+=$va->money;
  1348. }elseif (in_array($va->goods_id,$old_good)){
  1349. $old+=$va->num;
  1350. $old_money+=$va->money;
  1351. }elseif (in_array($va->goods_id,$newold_good)){
  1352. $newold+=$va->num;
  1353. $newold_money+=$va->money;
  1354. }elseif (in_array($va->goods_id,$youth_good)){
  1355. $youth+=$va->num;
  1356. $youth_money+=$va->money;
  1357. }
  1358. }
  1359. $money+=$v->money;
  1360. $pay_money+=$v->pay_money;
  1361. $no_pay_money+=$v->no_pay_money;
  1362. }
  1363. $data=[
  1364. 'hard'=>$hard,
  1365. 'simple'=>$simple,
  1366. 'old'=>$old,
  1367. 'newold'=>$newold,
  1368. 'youth'=>$youth,
  1369. 'hard_money'=>$hard_money,
  1370. 'simple_money'=>$simple_money,
  1371. 'old_money'=>$old_money,
  1372. 'newold_money'=>$newold_money,
  1373. 'youth_money'=>$youth_money,
  1374. 'hard_all'=>$hard_all,
  1375. 'simple_all'=>$simple_all,
  1376. 'old_all'=>$old_all,
  1377. 'newold_all'=>$newold_all,
  1378. 'youth_all'=>$youth_all,
  1379. 'money'=>$money,
  1380. 'pay_money'=>$pay_money,
  1381. 'no_pay_money'=>$no_pay_money,
  1382. ];
  1383. return $this->success($data);
  1384. }
  1385. public function order_rank(Request $request){
  1386. $user_id=Auth::user()->id;
  1387. // $user=User::where('mobile',13509768818)->first();
  1388. // $user_id=$user->id;
  1389. $wherebetween=[];
  1390. if ($request->has('start')){
  1391. if ($request->start){
  1392. $start=date('Y-m-d H:i:s',strtotime($request->start));
  1393. $end=date('Y-m-d H:i:s',strtotime($request->end));
  1394. $wherebetween=function ($query)use($start,$end){
  1395. $query->whereBetween('order_test.created_at',[$start,$end]);
  1396. };
  1397. }
  1398. }
  1399. $re=Ordertest::where('is_deleted',0)->with(['address','get_address'])->where('user_id',$user_id)->where($wherebetween)->get()->groupBy('address.mobile')->toArray();
  1400. $hard_good=Goodtest::where('main_attr','like','%精装%')->pluck('id')->toArray();
  1401. $simple_good=Goodtest::where('main_attr','大卫博士简约版')->pluck('id')->toArray();
  1402. $old_good=Goodtest::where('main_attr','大卫博士高腰版')->pluck('id')->toArray();
  1403. $newold_good=Goodtest::where('main_attr','大卫博士纯棉老人版')->pluck('id')->toArray();
  1404. $youth_good=Goodtest::where('main_attr','大卫博士青春版')->pluck('id')->toArray();
  1405. $i=0;
  1406. $res=[];
  1407. foreach ($re as $k=>$v){
  1408. $ids=Address::where('mobile',$v[0]['address']['mobile'])->pluck('id');
  1409. $order_all=Ordertest::where('is_deleted',0)->where('user_id',$user_id)->where($wherebetween)->with(['order_detail'])->whereIn('address_id',$ids)->get();
  1410. $hard_all=0;
  1411. $simple_all=0;
  1412. $old_all=0;
  1413. $newold_all=0;
  1414. $youth_all=0;
  1415. foreach ($order_all as $key=>$value){
  1416. foreach ($value->order_detail as $ke=>$va){
  1417. if (in_array($va->goods_id,$hard_good)){
  1418. $hard_all+=$va->num;
  1419. }elseif (in_array($va->goods_id,$simple_good)){
  1420. $simple_all+=$va->num;
  1421. }elseif (in_array($va->goods_id,$old_good)){
  1422. $old_all+=$va->num;
  1423. }elseif (in_array($va->goods_id,$newold_good)){
  1424. $newold_all+=$va->num;
  1425. }elseif (in_array($va->goods_id,$youth_good)){
  1426. $youth_all+=$va->num;
  1427. }
  1428. }
  1429. }
  1430. $res[$i]['username']=$v[0]['address']['username'];
  1431. $res[$i]['mobile']=$v[0]['address']['mobile'];
  1432. $res[$i]['hard']=$hard_all;
  1433. $res[$i]['simple']=$simple_all;
  1434. $res[$i]['old']=$old_all;
  1435. $res[$i]['newold']=$newold_all;
  1436. $res[$i]['youth']=$youth_all;
  1437. if (empty($v[0]['get_address'])){
  1438. $res[$i]['address']['nickname']=null;
  1439. $res[$i]['address']['level']=null;
  1440. }else{
  1441. $res[$i]['address']['nickname']=$v[0]['get_address'][0]['nickname'];
  1442. $res[$i]['address']['level']=$v[0]['get_address'][0]['level'];
  1443. }
  1444. $res[$i]['all']=$old_all+$simple_all+$hard_all+$newold_all+$youth_all;
  1445. $i++;
  1446. }
  1447. return $this->success_list($res);
  1448. }
  1449. /**-----T恤统计------**/
  1450. public function type_count(){
  1451. $user=Auth::user();
  1452. $data=DB::table('crown_count')->where('crown_mobile','=',$user->mobile)->orderBy('id')->get();
  1453. $re=[];
  1454. foreach ($data as $k=>$v){
  1455. $re[$k]['nickname']=$v->nickname;
  1456. $re[$k]['id']=$v->id;
  1457. $re[$k]['mobile']=$v->mobile;
  1458. $re[$k]['province']=$v->province;
  1459. $re[$k]['city']=$v->city;
  1460. $re[$k]['area']=$v->area;
  1461. $re[$k]['address']=$v->address;
  1462. $re[$k]['total']=$v->total;
  1463. $re[$k]['type_l']=$v->type_l;
  1464. $re[$k]['type_xl']=$v->type_xl;
  1465. $re[$k]['type_3xl']=$v->type_3xl;
  1466. }
  1467. return $this->success($re);
  1468. }
  1469. /**统计提交**/
  1470. public function type_submit(Request $request){
  1471. $time='2020-05-16 18:00:00';
  1472. $now=Carbon::now()->timestamp;
  1473. if ($now>strtotime($time)){
  1474. return $this->error(40013,'','提交时间已过,请联系客服(政委)');
  1475. }
  1476. $rule=[
  1477. 'id'=>'required',
  1478. 'type_l'=>'required',
  1479. 'type_xl'=>'required',
  1480. 'type_3xl'=>'required',
  1481. ];
  1482. $message=[
  1483. 'id.required'=>'id必填项',
  1484. 'type_l.reuqired'=>'type_l必填项',
  1485. 'type_xl.reuqired'=>'type_xl必填项',
  1486. 'type_3xl.reuqired'=>'type_3xl必填项',
  1487. ];
  1488. $input=$request->all();
  1489. $vali=Validator::make($request->all(),$rule,$message);
  1490. if ($vali->fails()){
  1491. return $this->error(40013,'',$vali->errors()->first());
  1492. }
  1493. DB::beginTransaction();
  1494. try{
  1495. foreach ($input['id'] as $k=>$v){
  1496. $user=CrownCount::find($v);
  1497. $num=$input['type_l'][$k]+$input['type_xl'][$k]+$input['type_3xl'][$k];
  1498. if ($num>$user->total){
  1499. return $this->error(40013,'',$user->nickname.'的所填礼品总量超过规定数量,请重新选择');
  1500. }
  1501. $user->type_l=$input['type_l'][$k];
  1502. $user->type_xl=$input['type_xl'][$k];
  1503. $user->type_3xl=$input['type_3xl'][$k];
  1504. $user->exchange=$input['type_l'][$k]+$input['type_xl'][$k]+$input['type_3xl'][$k];
  1505. if (!$user->save()){
  1506. throw new \Exception('1');
  1507. }
  1508. }
  1509. DB::commit();
  1510. return $this->success([]);
  1511. }catch (\Exception $exception){
  1512. Log::error('{-------统计出错------}'.$exception);
  1513. DB::rollBack();
  1514. return $this->error(40013,'','提交失败,请重新提交');
  1515. }
  1516. }
  1517. /**查看已获得赠品**/
  1518. public function get_data(Request $request){
  1519. $data=Ordertest::where('order_num',$request->order_num)->with(['get_gift_infos'])->first();
  1520. $i=0;
  1521. $re=[];
  1522. if ($data->get_gift){
  1523. foreach ($data->get_gift_infos as $ke=>$va){
  1524. $re[$i]['name']=$va->name;
  1525. $re[$i]['img']=$va->img;
  1526. $re[$i]['num']=$va->pivot->num;
  1527. $i++;
  1528. }
  1529. }
  1530. return $this->success_list($re);
  1531. }
  1532. /**获取赠品信息**/
  1533. public function get_gift(Request $request){
  1534. $now=Carbon::now()->tz(env('APP_TIMEZONE'))->toDateTimeString();
  1535. $active=Activity::where('start_time','<=',$now)
  1536. ->where('end_time','>=',$now)->where('is_ing',1)->first();
  1537. if ($active){
  1538. $gifts=Gift::where('activity_id',$active->id)->get();
  1539. if ($gifts){
  1540. return $this->success_list($gifts);
  1541. }else{
  1542. return $this->error(600,'','此次活动没有赠品');
  1543. }
  1544. }else{
  1545. return $this->error(600,'','活动时间已过');
  1546. }
  1547. }
  1548. /***获取订单的物流信息**/
  1549. public function get_order_expresses(Request $request){
  1550. $rule=[
  1551. 'order_num'=>'required'
  1552. ];
  1553. $message=[
  1554. 'order_num.required'=>'订单编号没有填写'
  1555. ];
  1556. $va=Validator::make($request->all(),$rule,$message);
  1557. if ($va->fails()){
  1558. return $this->error(40012,'',$va->errors()->first());
  1559. }
  1560. $data=Ordertest::where('order_num',$request->order_num)->with(['get_express','address'])->first();
  1561. $re=[];
  1562. if ($data->get_express){
  1563. foreach ($data->get_express as $k=>$v){
  1564. $re[$k]['id']=$v->id;
  1565. $re[$k]['order_id']=$v->order_id;
  1566. $re[$k]['express_com']=$v->express_com;
  1567. $re[$k]['express_number']=$v->express_number;
  1568. $re[$k]['status']=$v->status;
  1569. $re[$k]['note']=$v->note;
  1570. if ($v->created_at){
  1571. $re[$k]['created_at']=$v->created_at->toDateTimeString();
  1572. }else{
  1573. $re[$k]['created_at']=$v->created_at;
  1574. }
  1575. $re[$k]['city']=$data->address->city;
  1576. $re[$k]['area']=$data->address->town;
  1577. }
  1578. }
  1579. return $this->success($re);
  1580. }
  1581. public function get_app_order_expresses(Request $request){
  1582. $rule=[
  1583. 'order_num'=>'required'
  1584. ];
  1585. $message=[
  1586. 'order_num.required'=>'订单编号没有填写'
  1587. ];
  1588. $va=Validator::make($request->all(),$rule,$message);
  1589. if ($va->fails()){
  1590. return $this->error(40012,'',$va->errors()->first());
  1591. }
  1592. $data=Ordertest::where('order_num',$request->order_num)->with(['get_express','address'])->first();
  1593. $re=[];
  1594. if ($data->get_express){
  1595. foreach ($data->get_express as $k=>$v){
  1596. $re[$k]['id']=$v->id;
  1597. $re[$k]['order_id']=$v->order_id;
  1598. $re[$k]['express_com']=$v->express_com;
  1599. $re[$k]['express_number']=$v->express_number;
  1600. $re[$k]['status']=$v->status;
  1601. $re[$k]['note']=$v->note;
  1602. if ($v->created_at){
  1603. $re[$k]['created_at']=$v->created_at->toDateTimeString();
  1604. }else{
  1605. $re[$k]['created_at']=$v->created_at;
  1606. }
  1607. $re[$k]['city']=$data->address->city;
  1608. $re[$k]['area']=$data->address->town;
  1609. }
  1610. }
  1611. return $this->success(['list'=>$re]);
  1612. }
  1613. /**获取物流轨迹**/
  1614. public function get_express(Request $request,ExpressHandler $expressHandler){
  1615. $express=Express::find($request->id);
  1616. if (!$express){
  1617. return $this->error(40011,'','该物流订单不存在');
  1618. }
  1619. if ($express->status==1){
  1620. $re=json_decode($express->data,true);
  1621. }else{
  1622. $re=$expressHandler->search($express->express_number,$express->express_code);
  1623. $re=(array)$re;
  1624. if ($re['State']==3){
  1625. DB::beginTransaction();
  1626. try{
  1627. $express->data=json_encode($re);
  1628. $express->status=1;
  1629. $express->save();
  1630. DB::commit();
  1631. }catch (\Exception $exception){
  1632. Log::error('-------物流信息保存出错--------'.$exception);
  1633. DB::rollBack();
  1634. }
  1635. }
  1636. }
  1637. $order_id=$express->order_id;
  1638. $order_info=Ordertest::where('id',$order_id)->first();
  1639. $order_detail=OrderDetail::where('order_id',$order_id)->with(['get_good'])->first();
  1640. $re['good_img']=$order_detail->get_good->main_img;
  1641. $re['ShipperName']=$express->express_com;
  1642. $re['city']=$order_info->address->city;
  1643. $re['order_num']=$order_info->order_num;
  1644. $re['address']=$order_info->address->province.$order_info->address->city.$order_info->address->town.$order_info->address->address;
  1645. return $this->success($re);
  1646. }
  1647. public function get_activity(){
  1648. $re=Activity::where('is_ing',1)->first();
  1649. $data=[
  1650. 'start_time'=>strtotime($re->start_time)*1000,
  1651. 'end_time'=>strtotime($re->end_time)*1000,
  1652. ];
  1653. return $this->success($data);
  1654. }
  1655. public function get_activity_list(Request $request){
  1656. if ($request->has('page_index')){
  1657. $count=Activity::where('disabled',0)->count();
  1658. $data=Activity::where('disabled',0)->limit(1)->OrderByDesc('id')->skip(($request->page_index-1)*$request->page_size)->take($request->page_size)->get();
  1659. return $this->success_list($data,'',$count);
  1660. }else{
  1661. $re=Activity::where('disabled',0)->limit(1)->orderByDesc('id')->get();
  1662. $data=[];
  1663. foreach ($re as $k=>$v){
  1664. $data[$k]['title']=$v->title;
  1665. $data[$k]['id']=$v->id;
  1666. $data[$k]['start_time']=$v->start_time;
  1667. $data[$k]['end_time']=$v->end_time;
  1668. }
  1669. return $this->success($data);
  1670. }
  1671. }
  1672. public function GetRelation($id){
  1673. $u=User::find($id);
  1674. $da['belong_user']=$id;
  1675. $da['belong_level']=$u->level;
  1676. $da['agent_user']='';
  1677. $da['agent_level']='';
  1678. $da['top_user']='';
  1679. $da['time']=Carbon::now()->toDateTimeString();
  1680. if ($u->level==1){
  1681. $uu=User::find($u->agent_id);
  1682. if ($uu->level==3){
  1683. $da['top_user']=$uu->id;
  1684. $da['top_level']=3;
  1685. }else{
  1686. $da['agent_user']=$uu->id;
  1687. $da['agent_level']=$uu->level;
  1688. $da['top_user']=$uu->agent_id;
  1689. }
  1690. }elseif ($u->level==2){
  1691. $da['top_user']=$u->agent_id;
  1692. $da['top_level']=3;
  1693. }
  1694. return $da;
  1695. }
  1696. public function GetUserHonor(Request $request){
  1697. $data=$request->all();
  1698. $activity_id=$data['id'];
  1699. $id=Auth::user()->id;
  1700. $re=HonorInfo::where('activity_id',$activity_id)->where('user_id',$id)->first();
  1701. if (!$re){
  1702. $bid_gift=0;
  1703. $honor_wal=0;
  1704. $tour=0;
  1705. $rank=0;
  1706. $activity=Activity::find($activity_id);
  1707. $money=Ordertest::whereBetween('created_at',[$activity->start_time,$activity->end_time])->where('user_id',$id)->where('is_deleted',0)->sum('money');
  1708. if ($money!=0){
  1709. $rank_arr=Ordertest::whereBetween('created_at',[$activity->start_time,$activity->end_time])
  1710. ->select(DB::raw('sum(money) as money_all'))
  1711. ->where('is_deleted',0)->groupBy('user_id')->orderBy('money_all','desc')->get()->toArray();
  1712. $rank_arr=array_column($rank_arr,'money_all');
  1713. array_unique($rank_arr);
  1714. $rank=array_search($money,$rank_arr);
  1715. $res=DB::table('activity_limit')->Where('activity_id',$activity_id)->where('type',1)->get();
  1716. if ($res){
  1717. foreach ($res as $k=>$v){
  1718. if ($v->title=='大礼包B'){
  1719. if ($v->account<=$money){
  1720. $bid_gift=1;
  1721. }
  1722. }elseif ($v->title=='荣誉墙'){
  1723. if ($v->account<=$money){
  1724. $honor_wal=1;
  1725. }
  1726. }elseif ($v->title=='旅游'){
  1727. if ($v->account<=$money){
  1728. $tour=1;
  1729. }
  1730. }
  1731. }
  1732. }
  1733. }else{
  1734. $ress=DB::table('gift_user_img')->where('activity_id',$activity->id)->where('user_id',$id)->first();
  1735. if ($ress){
  1736. $bid_gift=1;
  1737. }
  1738. $rank=Ordertest::whereBetween('created_at',[$activity->start_time,$activity->end_time])
  1739. ->where('is_deleted',0)->groupBy('user_id')->get();
  1740. $rank=count($rank);
  1741. }
  1742. $activity_id_now=Activity::where('is_ing',1)->value('id');
  1743. if ($activity_id==$activity_id_now){
  1744. $data['activity_id']=$activity_id;
  1745. $data['user_id']=$id;
  1746. $data['user_ids']=$id;
  1747. $data['rank']=$rank+1;
  1748. $data['big_gift']=$bid_gift;
  1749. $data['tour']=$tour;
  1750. $data['honor_wall']=$honor_wal;
  1751. $giftA=DB::table('gift_user_img')->where('user_id',$id)->where('activity_id',$activity_id)->where('type',0)->where('img_type',1)->whereNotNull('url')->first();
  1752. $giftB=DB::table('gift_user_img')->where('user_id',$id)->where('activity_id',$activity_id)->where('type',1)->where('img_type',1)->whereNotNull('url')->first();
  1753. $data['giftA']=$giftA;
  1754. $data['giftB']=$giftB;
  1755. return $this->success($data);
  1756. }else{
  1757. $hon_user=new HonorInfo();
  1758. $hon_user->activity_id=$activity_id;
  1759. $hon_user->user_id=$id;
  1760. $hon_user->rank=$rank+1;
  1761. $hon_user->big_gift=$bid_gift;
  1762. $hon_user->tour=$tour;
  1763. $hon_user->honor_wall=$honor_wal;
  1764. $hon_user->order_money=$money;
  1765. $hon_user->save();
  1766. return $this->success($hon_user);
  1767. }
  1768. }else{
  1769. $giftA=DB::table('gift_user_img')->where('user_id',$id)->where('activity_id',$activity_id)->where('type',0)->where('img_type',1)->first();
  1770. $giftB=DB::table('gift_user_img')->where('user_id',$id)->where('activity_id',$activity_id)->where('type',1)->where('img_type',1)->first();
  1771. $re->giftA=$giftA;
  1772. $re->giftB=$giftB;
  1773. return $this->success($re);
  1774. }
  1775. }
  1776. public function GetAppOrderDetail(Request $request){
  1777. $order=Ordertest::where('id',$request->id)->first();
  1778. if (!$order){
  1779. return $this->error(50021);
  1780. }
  1781. $arrs=Cache::get('DLS_GOOD_ARR');
  1782. if (!$arrs){
  1783. $arrs=$this->GetGoodArr();
  1784. }
  1785. if ($order->arr_json) {
  1786. $order_de = OrderDetail::where('order_id', $request->id)->get();
  1787. $arrss = [];
  1788. foreach ($order_de as $k=>$v){
  1789. $s=strpos($v->goods_name,'精');
  1790. if (is_numeric($s)){
  1791. $z='精-'.$v->goods_size;
  1792. }else{
  1793. $s=strpos($v->goods_name,'简');
  1794. if (is_numeric($s)){
  1795. $z='简-'.$v->goods_size;
  1796. }else{
  1797. $s=strpos($v->goods_name,'纯棉');
  1798. if (is_numeric($s)){
  1799. $z='纯棉-'.$v->goods_size;
  1800. }else{
  1801. $s=strpos($v->goods_name,'高');
  1802. if (is_numeric($s)){
  1803. $z='高-'.$v->goods_size;
  1804. }else{
  1805. $s=strpos($v->goods_name,'青');
  1806. if (is_numeric($s)){
  1807. $z='青-'.$v->goods_size;
  1808. }
  1809. }
  1810. }
  1811. }
  1812. }
  1813. $arrss[$z]=$v->num;
  1814. }
  1815. $re = json_decode($order->arr_json);
  1816. $data = [];
  1817. foreach ($re as $k => $v) {
  1818. if ($k % 2 == 0) {
  1819. $data = array_merge($v, $data);
  1820. }
  1821. }
  1822. $data = array_unique($data);
  1823. $arr = [];
  1824. $list = [];
  1825. foreach ($data as $ke => $va) {
  1826. $l = array_search($va, $arrs);
  1827. if(isset($l) && !empty($l)){
  1828. foreach ($re as $k => $v) {
  1829. if ($k % 2 == 0) {
  1830. $s = array_search($va, $v);
  1831. if (is_numeric($l)) {
  1832. if (empty($list[$l][0])) {
  1833. $list[$l][0] = $va;
  1834. }
  1835. if (is_numeric($s)) {
  1836. if (!isset(${'ln-' . $l})) {
  1837. ${'ln-' . $l} = 0;
  1838. }
  1839. ${'ln-' . $l} += $re[$k + 1][$s];
  1840. $list[$l][floor($k / 2) + 1] = (string)$re[$k + 1][$s];
  1841. } else {
  1842. $list[$l][floor($k / 2) + 1] = (string)0;
  1843. }
  1844. }
  1845. }
  1846. if(isset(${'ln-' . $l})){
  1847. $list[$l][floor($k / 2) + 2] = (string)${'ln-' . $l};
  1848. }else{
  1849. $list[$l][floor($k / 2) + 2] = (string)0;
  1850. }
  1851. }
  1852. }
  1853. }
  1854. $array['list']=array_values($list);
  1855. return $this->success($array);
  1856. }else{
  1857. return $this->error(50023,'','该订单不能查看合并信息');
  1858. }
  1859. }
  1860. public function GetOrderDetail(Request $request){
  1861. $order=Ordertest::where('id',$request->id)->first();
  1862. if (!$order){
  1863. return $this->error(50021);
  1864. }
  1865. $arrs=Cache::get('DLS_GOOD_ARRS');
  1866. if (!$arrs){
  1867. $arrs=$this->GetGoodArr();
  1868. }
  1869. if ($order->arr_json){
  1870. $order_de=OrderDetail::where('order_id',$request->id)->get();
  1871. $arrss=[];
  1872. foreach ($order_de as $k=>$v){
  1873. $s=strpos($v->goods_name,'精');
  1874. if (is_numeric($s)){
  1875. $z='精-'.$v->goods_size;
  1876. }else{
  1877. $s=strpos($v->goods_name,'简');
  1878. if (is_numeric($s)){
  1879. $z='简-'.$v->goods_size;
  1880. }else{
  1881. $s=strpos($v->goods_name,'纯棉');
  1882. if (is_numeric($s)){
  1883. $z='纯棉-'.$v->goods_size;
  1884. }else{
  1885. $s=strpos($v->goods_name,'高');
  1886. if (is_numeric($s)){
  1887. $z='高-'.$v->goods_size;
  1888. }else{
  1889. $s=strpos($v->goods_name,'青');
  1890. if (is_numeric($s)){
  1891. $z='青-'.$v->goods_size;
  1892. }
  1893. }
  1894. }
  1895. }
  1896. }
  1897. $arrss[$z]=$v->num;
  1898. }
  1899. $re=json_decode($order->arr_json);
  1900. $data=[];
  1901. foreach ($re as $k=>$v){
  1902. if ($k%2==0){
  1903. $data=array_merge($v,$data);
  1904. }
  1905. }
  1906. $data=array_unique($data);
  1907. $arr=[];
  1908. foreach ($re as $k=>$v){
  1909. if ($k%2==0){
  1910. $num=[];
  1911. foreach ($data as $ke=>$va){
  1912. $s=array_search($va,$v);
  1913. if (is_numeric($s)){
  1914. $num[$va]=$re[$k+1][$s];
  1915. }else{
  1916. $num[$va]=0;
  1917. }
  1918. }
  1919. $arr[]=$num;
  1920. }
  1921. }
  1922. $key=array_keys($arr[0]);
  1923. $arr=array_merge($arr,[$arrss]);
  1924. $a=array_intersect($arrs,$key);
  1925. $array=[$a];
  1926. foreach ($arr as $k=>$v){
  1927. $arrr=[];
  1928. foreach ($a as $ke=>$va){
  1929. if (isset($v[$va])){
  1930. $arrr[$ke]=$v[$va];
  1931. }else{
  1932. $arrr[$ke]=0;
  1933. }
  1934. }
  1935. $array[]=$arrr;
  1936. }
  1937. return $this->success($array);
  1938. }else{
  1939. return $this->error(50023,'','该订单不能查看合并信息');
  1940. }
  1941. }
  1942. public function GetGoodArr(){
  1943. $good=Goodtest::where('is_deleted',0)->orderBy('sort')->orderBy('id')->get();
  1944. $arrs=[];
  1945. foreach ($good as $k=>$v){
  1946. $s=strpos($v->main_attr,'精');
  1947. if (is_numeric($s)){
  1948. $z='精-'.$v->size;
  1949. }else{
  1950. $s=strpos($v->main_attr,'简');
  1951. if (is_numeric($s)){
  1952. $z='简-'.$v->size;
  1953. }else{
  1954. $s=strpos($v->main_attr,'纯棉');
  1955. if (is_numeric($s)){
  1956. $z='纯棉-'.$v->size;
  1957. }else{
  1958. $s=strpos($v->main_attr,'高');
  1959. if (is_numeric($s)){
  1960. $z='高-'.$v->size;
  1961. }else{
  1962. $s=strpos($v->main_attr,'青');
  1963. if (is_numeric($s)){
  1964. $z='青-'.$v->size;
  1965. }
  1966. }
  1967. }
  1968. }
  1969. }
  1970. $arrs[$k]=$z;
  1971. }
  1972. $arrs=Cache::remember('DLS_GOOD_ARRS',Carbon::now()->addYears(1),function ()use($arrs){
  1973. return $arrs;
  1974. });
  1975. return $arrs;
  1976. }
  1977. public function GetExpresses(Request $request)
  1978. {
  1979. $order_ids = Ordertest::find($request->id);
  1980. $data = Express::whereIn('order_id', $order_ids)->where('is_gift', 0)->get();
  1981. }
  1982. /**申请作废订单**/
  1983. public function ApplyDestoryOrder(Request $request)
  1984. {
  1985. $id=$request->input('id',0);
  1986. $cause=$request->input('destroy_cause','');
  1987. $activity=Activity::where('is_ing',1)->first();
  1988. $order=Ordertest::where('id','=',$id)->whereBetween('created_at',[$activity->start_time,$activity->end_time])->first();
  1989. if (empty($order)){
  1990. return $this->error(500216,'','该订单不是活动订单,如需作废请联系政委');
  1991. }
  1992. if ($order->status!=0 && $order->status!=1){
  1993. return $this->error(500216,'','该订单状态不能作废,如需作废请联系政委');
  1994. }
  1995. $count=Ordertest::where('id','<>',$id)->where('address_id',$order->address_id)->whereBetween('created_at',[$activity->start_time,$activity->end_time])->where('apply_status',1)->where('is_deleted',0)->count();
  1996. if ($count>=1){
  1997. return $this->error(500216,'','申请作废列表中包含一个和该订单相同地址的申请,请完成上一个申请');
  1998. }
  1999. $order->apply_status=1;
  2000. $order->destroy_cause=$cause;
  2001. $order->destroy_status=0;
  2002. $order->apply_time=Carbon::now()->toDateTimeString();
  2003. $order->save();
  2004. return $this->success([]);
  2005. }
  2006. /**取消作废订单**/
  2007. public function CancleDestoryOrder(Request $request)
  2008. {
  2009. $id=$request->input('id',0);
  2010. // $cause=$request->input('destroy_cause','');
  2011. $order=Ordertest::find($id);
  2012. $order->apply_status=0;
  2013. $order->save();
  2014. return $this->success([]);
  2015. }
  2016. public function GetExpressInnage(Request $request){
  2017. $id=$request->input('id');
  2018. $data=Express::where('order_id',$request->id)->where('is_gift',0)->get();
  2019. $type_1=[];
  2020. $type_2=[];
  2021. $type_3=[];
  2022. $type_4=[];
  2023. $type_5=[];
  2024. foreach ($data as $k=>$v){
  2025. $arr=explode('+',$v->note);
  2026. foreach ($arr as $ka=>$va){
  2027. $arrs=explode(':',$va);
  2028. if (mb_substr($arrs[0],0,1)=='女'){
  2029. $sex='女款-';
  2030. $sexs=0;
  2031. $str_count=substr_count(mb_substr($arrs[0],1),'X');
  2032. if ($str_count>=3){
  2033. $size=$str_count.'XL';
  2034. }else{
  2035. $size=mb_substr($arrs[0],1);
  2036. }
  2037. }else{
  2038. $sex='男款-';
  2039. $sexs=1;
  2040. $str_count=substr_count($arrs[0],'X');
  2041. if ($str_count>=3){
  2042. $size=$str_count.'XL';
  2043. }else{
  2044. $size=$arrs[0];
  2045. }
  2046. }
  2047. if (mb_strlen($arrs[1])<4){
  2048. if (mb_substr($arrs[1],-1)=='精'){
  2049. $num=mb_substr($arrs[1],0,-1);
  2050. if (isset($type_1[$sex.$size])){
  2051. $type_1[$sex.$size]['num']+=$num;
  2052. }else{
  2053. $type_1[$sex.$size]['num']=$num;
  2054. $type_1[$sex.$size]['sex']=$sexs;
  2055. $type_1[$sex.$size]['size']=$size;
  2056. }
  2057. }elseif (mb_substr($arrs[1],-1)=='简'){
  2058. $num=mb_substr($arrs[1],0,-1);
  2059. if (isset($type_2[$sex.$size])){
  2060. $type_2[$sex.$size]['num']+=$num;
  2061. }else{
  2062. $type_2[$sex.$size]['num']=$num;
  2063. $type_2[$sex.$size]['sex']=$sexs;
  2064. $type_2[$sex.$size]['size']=$size;
  2065. }
  2066. }elseif (mb_substr($arrs[1],-1)=='老' || mb_substr($arrs[1],-1)=='高'){
  2067. Log::info($arrs);
  2068. // $num=mb_substr($arrs[1],0,-1);
  2069. $num=mb_substr($arrs[1],0,1);
  2070. if (isset($type_3[$sex.$size])){
  2071. Log::info($num);
  2072. Log::info($type_3[$sex.$size]['num']);
  2073. $type_3[$sex.$size]['num']+=$num;
  2074. }else{
  2075. $type_3[$sex.$size]['num']=$num;
  2076. $type_3[$sex.$size]['sex']=$sexs;
  2077. $type_3[$sex.$size]['size']=$size;
  2078. }
  2079. }elseif (mb_substr($arrs[1],-1)=='棉老'){
  2080. // $num=mb_substr($arrs[1],0,-1);
  2081. $num=mb_substr($arrs[1],0,1);
  2082. if (isset($type_4[$sex.$size])){
  2083. $type_4[$sex.$size]['num']+=$num;
  2084. }else{
  2085. $type_4[$sex.$size]['num']=$num;
  2086. $type_4[$sex.$size]['sex']=$sexs;
  2087. $type_4[$sex.$size]['size']=$size;
  2088. }
  2089. }elseif (mb_substr($arrs[1],-1)=='青'){
  2090. // $num=mb_substr($arrs[1],0,-1);
  2091. $num=mb_substr($arrs[1],0,1);
  2092. if (isset($type_5[$sex.$size])){
  2093. $type_5[$sex.$size]['num']+=$num;
  2094. }else{
  2095. $type_5[$sex.$size]['num']=$num;
  2096. $type_5[$sex.$size]['sex']=$sexs;
  2097. $type_5[$sex.$size]['size']=$size;
  2098. }
  2099. }
  2100. }else{
  2101. $arrr=[
  2102. ['type'=>mb_substr($arrs[1],1,1),'num'=>mb_substr($arrs[1],0,1)],
  2103. ['type'=>mb_substr($arrs[1],3,1),'num'=>mb_substr($arrs[1],2,1)]
  2104. ];
  2105. foreach ($arrr as $kes=>$vas){
  2106. if ($vas['type']=='简'){
  2107. if (isset($type_2[$sex.$size])){
  2108. $type_2[$sex.$size]['num']+=$vas['num'];
  2109. }else{
  2110. $type_2[$sex.$size]['num']=$vas['num'];
  2111. $type_2[$sex.$size]['sex']=$sexs;
  2112. $type_2[$sex.$size]['size']=$size;
  2113. }
  2114. }elseif($vas['type']=='高' || $vas['type']=='老'){
  2115. if (isset($type_3[$sex.$size])){
  2116. $type_3[$sex.$size]['num']+=$vas['num'];
  2117. }else{
  2118. $type_3[$sex.$size]['num']=$vas['num'];
  2119. $type_3[$sex.$size]['sex']=$sexs;
  2120. $type_3[$sex.$size]['size']=$size;
  2121. }
  2122. }elseif($vas['type']=='青'){
  2123. if (isset($type_5[$sex.$size])){
  2124. $type_5[$sex.$size]['num']+=$vas['num'];
  2125. }else{
  2126. $type_5[$sex.$size]['num']=$vas['num'];
  2127. $type_5[$sex.$size]['sex']=$sexs;
  2128. $type_5[$sex.$size]['size']=$size;
  2129. }
  2130. }elseif($vas['type']=='棉老'){
  2131. if (isset($type_4[$sex.$size])){
  2132. $type_4[$sex.$size]['num']+=$vas['num'];
  2133. }else{
  2134. $type_4[$sex.$size]['num']=$vas['num'];
  2135. $type_4[$sex.$size]['sex']=$sexs;
  2136. $type_4[$sex.$size]['size']=$size;
  2137. }
  2138. }
  2139. }
  2140. }
  2141. }
  2142. }
  2143. $data=['hard'=>[],'simple'=>[],'old'=>[],'new_old'=>[],'youth'=>[]];
  2144. $hard_de=OrderDetail::where('goods_name','大卫博士精装版')->where('order_id',$id)->get();
  2145. $good=Goodtest::where('is_deleted',0)->where('name','大卫博士精装版')->first();
  2146. $data['hard']['name']=$good->name;
  2147. $data['hard']['imgurl']=$good->main_img;
  2148. $data['hard']['spec']=[];
  2149. foreach ($hard_de as $k=>$v){
  2150. if (isset($type_1[$v->goods_size])){
  2151. $n=$v->num-$type_1[$v->goods_size]['num'];
  2152. if ($n>0){
  2153. $data['hard']['spec'][]=[
  2154. 'num'=>$v->num-$type_1[$v->goods_size]['num'],
  2155. 'sex'=>$type_1[$v->goods_size]['sex'],
  2156. 'size'=>$type_1[$v->goods_size]['size'],
  2157. ];
  2158. }
  2159. }else{
  2160. if (mb_substr($v->goods_size,0,1)=='女'){
  2161. $sex=0;
  2162. }else{
  2163. $sex=1;
  2164. }
  2165. $size=mb_substr($v->goods_size,3);
  2166. $data['hard']['spec'][]=[
  2167. 'num'=>$v->num,
  2168. 'sex'=>$sex,
  2169. 'size'=>$size,
  2170. ];
  2171. }
  2172. }
  2173. $old_de=OrderDetail::where('goods_name','大卫博士高腰版')->where('order_id',$id)->get();
  2174. $good=Goodtest::where('is_deleted',0)->where('name','大卫博士高腰版')->first();
  2175. $data['old']['name']=$good->name;
  2176. $data['old']['imgurl']=$good->main_img;
  2177. $data['old']['spec']=[];
  2178. foreach ($old_de as $k=>$v){
  2179. if (isset($type_3[$v->goods_size])){
  2180. $n=$v->num-$type_3[$v->goods_size]['num'];
  2181. if ($n>0){
  2182. $data['old']['spec'][]=[
  2183. 'num'=>$v->num-$type_3[$v->goods_size]['num'],
  2184. 'sex'=>$type_3[$v->goods_size]['sex'],
  2185. 'size'=>$type_3[$v->goods_size]['size'],
  2186. ];
  2187. }
  2188. }else{
  2189. if (mb_substr($v->goods_size,0,1)=='女'){
  2190. $sex=0;
  2191. }else{
  2192. $sex=1;
  2193. }
  2194. $size=mb_substr($v->goods_size,3);
  2195. $data['old']['spec'][]=[
  2196. 'num'=>$v->num,
  2197. 'sex'=>$sex,
  2198. 'size'=>$size,
  2199. ];
  2200. }
  2201. }
  2202. $youth_de=OrderDetail::where('goods_name','大卫博士青春版')->where('order_id',$id)->get();
  2203. $good=Goodtest::where('is_deleted',0)->where('name','大卫博士青春版')->first();
  2204. $data['youth']['name']=$good->name;
  2205. $data['youth']['imgurl']=$good->main_img;
  2206. $data['youth']['spec']=[];
  2207. foreach ($youth_de as $k=>$v){
  2208. if (isset($type_5[$v->goods_size])){
  2209. $n=$v->num-$type_5[$v->goods_size]['num'];
  2210. if ($n>0){
  2211. $data['youth']['spec'][]=[
  2212. 'num'=>$v->num-$type_5[$v->goods_size]['num'],
  2213. 'sex'=>$type_5[$v->goods_size]['sex'],
  2214. 'size'=>$type_5[$v->goods_size]['size'],
  2215. ];
  2216. }
  2217. }else{
  2218. if (mb_substr($v->goods_size,0,1)=='女'){
  2219. $sex=0;
  2220. }else{
  2221. $sex=1;
  2222. }
  2223. $size=mb_substr($v->goods_size,3);
  2224. $data['youth']['spec'][]=[
  2225. 'num'=>$v->num,
  2226. 'sex'=>$sex,
  2227. 'size'=>$size,
  2228. ];
  2229. }
  2230. }
  2231. $good=Goodtest::where('is_deleted',0)->where('name','大卫博士简约版')->first();
  2232. $data['simple']['name']=$good->name;
  2233. $data['simple']['imgurl']=$good->main_img;
  2234. $data['simple']['spec']=[];
  2235. $good=Goodtest::where('is_deleted',0)->where('name','大卫博士纯棉老人版')->first();
  2236. $data['new_old']['name']=$good->name;
  2237. $data['new_old']['imgurl']=$good->main_img;
  2238. $data['new_old']['spec']=[];
  2239. return $this->success($data);
  2240. }
  2241. public function Innage(Request $request){
  2242. $id=$request->input('id');
  2243. $data=Express::where('order_id',$request->id)->where('is_gift',0)->get();
  2244. $type_1=[];
  2245. $type_2=[];
  2246. $type_3=[];
  2247. foreach ($data as $k=>$v){
  2248. $arr=explode('+',$v->note);
  2249. foreach ($arr as $ka=>$va){
  2250. $arrs=explode(':',$va);
  2251. if (mb_substr($arrs[0],0,1)=='女'){
  2252. $sex='女款-';
  2253. $sexs=0;
  2254. $str_count=substr_count(mb_substr($arrs[0],1),'X');
  2255. if ($str_count>=3){
  2256. $size=$str_count.'XL';
  2257. }else{
  2258. $size=mb_substr($arrs[0],1);
  2259. }
  2260. }else{
  2261. $sex='男款-';
  2262. $sexs=1;
  2263. $str_count=substr_count($arrs[0],'X');
  2264. if ($str_count>=3){
  2265. $size=$str_count.'XL';
  2266. }else{
  2267. $size=$arrs[0];
  2268. }
  2269. }
  2270. if (mb_strlen($arrs[1])<4){
  2271. if (mb_substr($arrs[1],-1)=='精'){
  2272. $num=mb_substr($arrs[1],0,-1);
  2273. if (isset($type_1[$sex.$size])){
  2274. $type_1[$sex.$size]['num']+=$num;
  2275. }else{
  2276. $type_1[$sex.$size]['num']=$num;
  2277. $type_1[$sex.$size]['sex']=$sexs;
  2278. $type_1[$sex.$size]['size']=$size;
  2279. }
  2280. }elseif (mb_substr($arrs[1],-1)=='简'){
  2281. $num=mb_substr($arrs[1],0,-1);
  2282. if (isset($type_2[$sex.$size])){
  2283. $type_2[$sex.$size]['num']+=$num;
  2284. }else{
  2285. $type_2[$sex.$size]['num']=$num;
  2286. $type_2[$sex.$size]['sex']=$sexs;
  2287. $type_2[$sex.$size]['size']=$size;
  2288. }
  2289. }elseif (mb_substr($arrs[1],-1)=='老'){
  2290. $num=mb_substr($arrs[1],0,-1);
  2291. if (isset($type_3[$sex.$size])){
  2292. $type_3[$sex.$size]['num']+=$num;
  2293. }else{
  2294. $type_3[$sex.$size]['num']=$num;
  2295. $type_3[$sex.$size]['sex']=$sexs;
  2296. $type_3[$sex.$size]['size']=$size;
  2297. }
  2298. }
  2299. }else{
  2300. $arrr=[
  2301. ['type'=>mb_substr($arrs[1],1,1),'num'=>mb_substr($arrs[1],0,1)],
  2302. ['type'=>mb_substr($arrs[1],3,1),'num'=>mb_substr($arrs[1],2,1)]
  2303. ];
  2304. foreach ($arrr as $kes=>$vas){
  2305. if ($vas['type']=='简'){
  2306. if (isset($type_2[$sex.$size])){
  2307. $type_2[$sex.$size]['num']+=$vas['num'];
  2308. }else{
  2309. $type_2[$sex.$size]['num']=$vas['num'];
  2310. $type_2[$sex.$size]['sex']=$sexs;
  2311. $type_2[$sex.$size]['size']=$size;
  2312. }
  2313. }else{
  2314. if (isset($type_3[$sex.$size])){
  2315. $type_3[$sex.$size]['num']+=$vas['num'];
  2316. }else{
  2317. $type_3[$sex.$size]['num']=$vas['num'];
  2318. $type_3[$sex.$size]['sex']=$sexs;
  2319. $type_3[$sex.$size]['size']=$size;
  2320. }
  2321. }
  2322. }
  2323. }
  2324. }
  2325. }
  2326. $data=['hard'=>[],'simple'=>[],'old'=>[],'new_old'=>[]];
  2327. $hard_de=OrderDetail::where('goods_name','大卫博士精装版')->where('order_id',$id)->get();
  2328. $good=Goodtest::find($hard_de[0]->goods_id);
  2329. $data['hard']['name']=$good->name;
  2330. $data['hard']['imgurl']=$good->main_img;
  2331. foreach ($hard_de as $k=>$v){
  2332. if (isset($type_1[$v->goods_size])){
  2333. $n=$v->num-$type_1[$v->goods_size]['num'];
  2334. if ($n>0){
  2335. $data['hard']['spec'][]=[
  2336. 'num'=>$v->num-$type_1[$v->goods_size]['num'],
  2337. 'sex'=>$type_1[$v->goods_size]['sex'],
  2338. 'size'=>$type_1[$v->goods_size]['size'],
  2339. ];
  2340. }
  2341. }else{
  2342. if (mb_substr($v->goods_size,0,1)=='女'){
  2343. $sex=0;
  2344. }else{
  2345. $sex=1;
  2346. }
  2347. $size=mb_substr($v->goods_size,3);
  2348. $data['hard']['spec'][]=[
  2349. 'num'=>$v->num,
  2350. 'sex'=>$sex,
  2351. 'size'=>$size,
  2352. ];
  2353. }
  2354. }
  2355. $old_de=OrderDetail::where('goods_name','大卫博士高腰版')->where('order_id',$id)->get();
  2356. $good=Goodtest::find($old_de[0]->goods_id);
  2357. $data['old']['name']=$good->name;
  2358. $data['old']['imgurl']=$good->main_img;
  2359. foreach ($old_de as $k=>$v){
  2360. if (isset($type_3[$v->goods_size])){
  2361. $n=$v->num-$type_3[$v->goods_size]['num'];
  2362. if ($n>0){
  2363. $data['old']['spec'][]=[
  2364. 'num'=>$v->num-$type_3[$v->goods_size]['num'],
  2365. 'sex'=>$type_3[$v->goods_size]['sex'],
  2366. 'size'=>$type_3[$v->goods_size]['size'],
  2367. ];
  2368. }
  2369. }else{
  2370. if (mb_substr($v->goods_size,0,1)=='女'){
  2371. $sex=0;
  2372. }else{
  2373. $sex=1;
  2374. }
  2375. $size=mb_substr($v->goods_size,3);
  2376. $data['old']['spec'][]=[
  2377. 'num'=>$v->num,
  2378. 'sex'=>$sex,
  2379. 'size'=>$size,
  2380. ];
  2381. }
  2382. }
  2383. return $this->success($data);
  2384. }
  2385. /**校验数量**/
  2386. public function CheckGoodNum(Request $request){
  2387. // Log::error(json_encode($request->all()));
  2388. // Log::error($request->all());
  2389. $user=Auth::user();
  2390. if ($user->level!=3){
  2391. return $this->error('4001','','当前用户不是代理公司');
  2392. }
  2393. $rules = [
  2394. 'size_id' => 'required',
  2395. 'total' => 'required',
  2396. 'type' => 'required',
  2397. 'num' => 'required',
  2398. ];
  2399. $message = [
  2400. 'required' => ':attribute不能为空',
  2401. ];
  2402. $attributes = [
  2403. 'size_id' => 'size_id',
  2404. 'total' => '商品总数量',
  2405. 'type' => '商品中总类型',
  2406. 'num' => '单类商品商量',
  2407. ];
  2408. $vali = Validator::make($request->all(), $rules, $message,$attributes);
  2409. if ($vali->fails()) {
  2410. Log::error('{-------提交订单的参数错误--------}'.$vali->errors()->first());
  2411. return $this->error('40010', '',$vali->errors()->first());
  2412. }
  2413. $input=$request->all();
  2414. foreach ($input['size_id'] as $k=>$v){
  2415. $data=Goodtest::find($v);
  2416. if (!$data){
  2417. return $this->error(40013,'','购物车有未知商品,请清空购物车');
  2418. }
  2419. $now=Carbon::now()->timestamp;
  2420. if ($data->off_time!=null){
  2421. if (strtotime($data->off_time)<$now){
  2422. return $this->error(300,'','商品'.$data->name.'的'.$data->size.'尺码已经下架');
  2423. }
  2424. }
  2425. if($data->is_show==4){
  2426. return $this->error(300,'','商品'.$data->name.'的'.$data->size.'尺码已经下架');
  2427. }
  2428. if($data->is_show==1){
  2429. return $this->error(300,'','商品'.$data->name.'的'.$data->size.'尺码未下架');
  2430. }
  2431. }
  2432. foreach ($input['size_id'] as $k=>$v){
  2433. if (Cache::get('dwbs_good_num'.$v)<$input['num'][$k]){
  2434. $data=Goodtest::find($v);
  2435. return $this->error(300,'',$data->name.'的'.$data->size.'尺码数量不足,请重新选择数量');
  2436. }
  2437. }
  2438. return $this->success([]);
  2439. }
  2440. }