OrdertestController.php 93 KB

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