OrdertestController.php 89 KB

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