OrderInterfaces.php 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748
  1. <?php
  2. namespace app\index\controller;
  3. use app\common\model\LogisticsModel;
  4. use app\common\model\OrderListModel;
  5. use app\common\model\OrderModel;
  6. use app\common\model\OrderSalesModel;
  7. use app\common\model\PayListModel;
  8. use app\common\model\ProductConfigModel;
  9. use app\common\model\ProductModel;
  10. use app\common\model\UserAddressModel;
  11. use app\common\model\UserModel;
  12. use app\common\service\helperService;
  13. use app\common\model\BuyCarModel;
  14. use app\common\service\ServiceBaseInfo;
  15. use think\Config;
  16. use think\Session;
  17. use think\Validate;
  18. class OrderInterfaces extends Base
  19. {
  20. /**
  21. * 获得用户订单
  22. */
  23. public function getOrder(){
  24. $params = $this->request->param();
  25. $action = isset($params['data'])?$params['data']:'1';
  26. Session::set('order_status',$action);
  27. // echo Session::get('order_status');exit;
  28. $orderModel = new OrderModel();
  29. $user_no = Session::get('user_no');
  30. $orderInfo = $orderModel->getOrderAndSales(['user_no'=>$user_no,'order_status'=>$action,'is_show'=>2]);
  31. // echo 33;exit;
  32. // $orderInfo['click_sales'] = 2;
  33. if($action == 1){
  34. $orderInfo = $orderModel->getOrderAndSales(['user_no'=>$user_no,'order_status'=>['neq','11'],'is_show'=>2]);
  35. // echo 22;exit;
  36. }
  37. if($action == 40){
  38. $orderInfo = $orderModel->getOrderAndSales(['user_no'=>$user_no,'is_sales'=>1,'is_show'=>2]);
  39. // $orderInfo['click_sales'] = 1;
  40. }
  41. if($action == 30){
  42. $orderInfo = $orderModel->getOrderAndSales(['user_no'=>$user_no,'order_status'=>['in',[30,31]],'is_show'=>2]);
  43. }
  44. if(!empty($orderInfo)){
  45. $orderListModel = new OrderListModel();
  46. foreach ($orderInfo as &$order){
  47. $orderListInfo = $orderListModel->getOrderListAndProduct(['order_no'=>$order['order_no'],'orderList.status'=>1]);
  48. if(!empty($orderListInfo)){
  49. foreach ($orderListInfo as &$orderPro){
  50. $orderPro['images'] = json_decode($orderPro['images'],true);
  51. if(empty($orderPro['product_type_name'])){
  52. $orderPro['product_type_name'] = '11';
  53. }
  54. }
  55. }
  56. // print_r($orderListInfo);exit;
  57. $order['orderList'] = $orderListInfo;
  58. if($action == 40){
  59. $order['click_sales'] = 1;
  60. }else{
  61. $order['click_sales'] = 2;
  62. }
  63. }
  64. }
  65. // print_r($orderInfo);exit;
  66. $data = ['code'=>'200','msg'=>'操作成功','data'=>$orderInfo];
  67. helperService::returnJson($data);
  68. }
  69. public function checkOrderS(){
  70. $orderNo = Session::get('orderNo');
  71. $orderModel = new OrderModel();
  72. $list = $orderModel->getOne(['order_status'=>20,'order_no'=>$orderNo]);
  73. if($list){
  74. helperService::returnJson(['code'=>400,'msg'=>'订单已完成','data'=>[]]);
  75. }
  76. helperService::returnJson(['code'=>200,'msg'=>'','data'=>[]]);
  77. }
  78. /**
  79. * 删除订单
  80. */
  81. public function deleteOrder(){
  82. $params = $this->request->param();
  83. $rule = [
  84. ['orderNo','require|number'],
  85. ];
  86. $validate = new Validate($rule);
  87. if(!$validate->check($params)){
  88. $data = ['code'=>'400','msg'=>$validate->getError(),'data'=>[]];
  89. helperService::returnJson($data);
  90. }
  91. $orderModel = new OrderModel();
  92. $return = $orderModel->saveData(['order_status'=>11],['order_no'=>$params['orderNo']]);//前台取消
  93. $orderListModel = new OrderListModel();
  94. $productModel = new ProductModel();
  95. $orderListInfo = $orderListModel->getMulti(['order_no'=>$params['orderNo'],'status'=>1]);
  96. if($orderListInfo){
  97. foreach($orderListInfo as $info){
  98. $productInfo = $productModel->getOne(['product_no'=>$info['product_no']]);
  99. $productModel->saveData(['sales_volume'=>$productInfo['sales_volume']-$info['number']],['product_no'=>$info['product_no']]);
  100. $productModel->saveData(['number'=>$productInfo['number']+$info['number']],['product_no'=>$info['product_no']]);
  101. }
  102. }
  103. if($return === false){
  104. $data = ['code'=>'400','msg'=>'取消失败','data'=>[]];
  105. helperService::returnJson($data);
  106. }
  107. $data = ['code'=>'200','msg'=>'取消成功','data'=>[]
  108. ];
  109. helperService::returnJson($data);
  110. }
  111. /*
  112. * 确认收货
  113. */
  114. public function ok(){
  115. $params = $this->request->param();
  116. $rule = [
  117. ['orderNo','require|number'],
  118. ];
  119. $validate = new Validate($rule);
  120. if(!$validate->check($params)){
  121. $data = ['code'=>'400','msg'=>$validate->getError(),'data'=>[]];
  122. helperService::returnJson($data);
  123. }
  124. $orderModel = new OrderModel();
  125. $return = $orderModel->saveData(['order_status'=>31,'sign_in_time'=>time()],['order_no'=>$params['orderNo']]);//已收货
  126. if($return === false){
  127. $data = ['code'=>'400','msg'=>'操作失败','data'=>[]];
  128. helperService::returnJson($data);
  129. }
  130. $data = ['code'=>'200','msg'=>'操作成功','data'=>[]
  131. ];
  132. helperService::returnJson($data);
  133. }
  134. /*
  135. * 隐藏订单
  136. */
  137. public function hide(){
  138. $params = $this->request->param();
  139. $rule = [
  140. ['orderNo','require|number'],
  141. ];
  142. $validate = new Validate($rule);
  143. if(!$validate->check($params)){
  144. $data = ['code'=>'400','msg'=>$validate->getError(),'data'=>[]];
  145. helperService::returnJson($data);
  146. }
  147. $orderModel = new OrderModel();
  148. $return = $orderModel->saveData(['is_show'=>1],['order_no'=>$params['orderNo']]);//已隐藏
  149. if($return === false){
  150. $data = ['code'=>'400','msg'=>'删除失败','data'=>[]];
  151. helperService::returnJson($data);
  152. }
  153. $data = ['code'=>'200','msg'=>'删除成功','data'=>[]
  154. ];
  155. helperService::returnJson($data);
  156. }
  157. /*
  158. * 隐藏订单
  159. */
  160. public function hidess(){
  161. $params = $this->request->param();
  162. $rule = [
  163. ['orderNo','require|number'],
  164. ];
  165. $validate = new Validate($rule);
  166. if(!$validate->check($params)){
  167. $data = ['code'=>'400','msg'=>$validate->getError(),'data'=>[]];
  168. helperService::returnJson($data);
  169. }
  170. $orderModel = new OrderSalesModel();
  171. $return = $orderModel->saveData(['is_shows'=>2],['order_no'=>$params['orderNo']]);//已取消
  172. if($return === false){
  173. $data = ['code'=>'400','msg'=>'操作失败','data'=>[]];
  174. helperService::returnJson($data);
  175. }
  176. $data = ['code'=>'200','msg'=>'操作成功','data'=>[]
  177. ];
  178. helperService::returnJson($data);
  179. }
  180. /**
  181. * 检查手机号
  182. */
  183. public function checkMobile(){
  184. $params = $this->request->param();
  185. $rule = [
  186. ['mobile|手机号','require|number'],
  187. ];
  188. $validate = new Validate($rule);
  189. if(!$validate->check($params)){
  190. $data = ['code'=>'400','msg'=>$validate->getError(),'data'=>[]];
  191. helperService::returnJson($data);
  192. }
  193. if(preg_match("/^1[345789]{1}\d{9}$/",$params['mobile'])){
  194. $data = ['code'=>'200','msg'=>'success','data'=>[]];
  195. helperService::returnJson($data);
  196. }else{
  197. $data = ['code'=>'400','msg'=>'请输入正确的手机号','data'=>[]];
  198. helperService::returnJson($data);
  199. }
  200. }
  201. /**
  202. * 提交售后订单
  203. */
  204. public function sales(){
  205. $params = $this->request->param();
  206. $rule = [
  207. ['mobile|手机号','require|number'],
  208. ['orderNo|订单号','require|number'],
  209. ['note|问题详情描述','require'],
  210. ];
  211. $validate = new Validate($rule);
  212. if(!$validate->check($params)){
  213. $data = ['code'=>'400','msg'=>$validate->getError(),'data'=>[]];
  214. helperService::returnJson($data);
  215. }
  216. $orderModel = new OrderModel();
  217. $return = $orderModel->getOne(['is_sales'=>1,'order_no'=>$params['orderNo']]);
  218. // print_r($return);exit;
  219. if($return){
  220. $data = ['code'=>'400','msg'=>'请不要重复提交','data'=>[]];
  221. helperService::returnJson($data);
  222. }
  223. $return = $orderModel->saveData(['is_sales'=>1],['order_no'=>$params['orderNo']]);
  224. if($return === false){
  225. $data = ['code'=>'400','msg'=>'申请失败请重试','data'=>[]];
  226. helperService::returnJson($data);
  227. }
  228. $orderSalesModel = new OrderSalesModel();
  229. $insertData = [
  230. 'mobile'=>$params['mobile'],
  231. 'order_no'=>$params['orderNo'],
  232. 'sales_type'=>1,
  233. 'sales_userNote'=>$params['note'],
  234. 'status'=>0,
  235. 'add_ts'=>time(),
  236. ];
  237. $return = $orderSalesModel->saveData($insertData);
  238. if($return === false){
  239. $data = ['code'=>'400','msg'=>'申请失败请重试','data'=>[]];
  240. helperService::returnJson($data);
  241. }
  242. $data = ['code'=>'200','msg'=>'申请成功','data'=>[]];
  243. helperService::returnJson($data);
  244. }
  245. /**
  246. * 下订单接口
  247. */
  248. public function orderDetail(){
  249. $params = $this->request->param();
  250. $rule = [
  251. ['orderNo|订单编号','require|number'],
  252. ];
  253. $validate = new Validate($rule);
  254. if(!$validate->check($params)){
  255. $data = ['code'=>'400','msg'=>$validate->getError(),'data'=>[]];
  256. helperService::returnJson($data);
  257. }
  258. $orderNo = $params['orderNo'];
  259. $orderModel = new OrderModel();
  260. $orderListModel = new OrderListModel();
  261. $orderInfo = $orderModel->getOne(['order_no'=>$orderNo]);
  262. $orderListInfo = $orderListModel->getProductS(['order_no'=>$orderNo,'orderList.status'=>1]);
  263. // print_r($orderListInfo);exit;
  264. // echo $orderListModel->getLastSql();exit;
  265. $num = 0;
  266. if(!empty($orderListInfo)){
  267. foreach ($orderListInfo as &$pro){
  268. $pro['images'] = json_decode($pro['images'],true);
  269. if(empty($pro['type_name'])){
  270. $pro['type_name'] = '11';
  271. }
  272. if($pro['is_mail']==1&&$pro['number']>=$pro['mail_number']){
  273. $num+=$pro['number'];
  274. }
  275. }
  276. }
  277. $orderInfo['num'] = $num;
  278. // print_r($orderListInfo);exit;
  279. // echo $orderListModel->getLastSql();exit;
  280. // print_r($orderListInfo);exit;
  281. $orderInfo['orderList'] = $orderListInfo;
  282. $data=['code'=>'200','msg'=>'success','data'=>$orderInfo];
  283. helperService::returnJson($data);
  284. }
  285. /**
  286. *获得用户购物车信息接口
  287. */
  288. public function car(){
  289. $user_no = Session::get('user_no');
  290. $carModel = new BuyCarModel();
  291. $carInfo = $carModel->getCarAndProduct(['user_no'=>$user_no]);
  292. // print_r($carInfo);exit;
  293. // echo $carModel->getLastSql();exit;
  294. if(!empty($carInfo)){
  295. foreach ($carInfo as &$pro){
  296. $pro['images'] = json_decode($pro['images'],true);
  297. if(empty($pro['type_name'])){
  298. $pro['type_name'] = '11';
  299. }
  300. }
  301. }
  302. $data = ['code'=>'200','msg'=>'success','data'=>$carInfo];
  303. helperService::returnJson($data);
  304. }
  305. /**
  306. * 删除购物车记录接口
  307. */
  308. public function deleteCar(){
  309. $params = $this->request->param();
  310. $rule = [
  311. ['id|购物车信息标识','require|number'],
  312. ];
  313. $validate = new Validate($rule);
  314. if(!$validate->check($params)){
  315. $data = ['code'=>'400','msg'=>$validate->getError(),'data'=>[]];
  316. helperService::returnJson($data);
  317. }
  318. $carModel = new BuyCarModel();
  319. $return = $carModel->removeData(['id'=>$params['id']]);
  320. if($return === false){
  321. $data = ['code'=>'400','msg'=>'删除失败请重试','data'=>[]];
  322. helperService::returnJson($data);
  323. }
  324. $data = ['code'=>'200', 'msg'=>'删除成功', 'data'=>[]];
  325. helperService::returnJson($data);
  326. }
  327. public function checkOrder(){
  328. $params = $this->request->param();
  329. $rule = [
  330. ['orderNo|订单编号','require'],
  331. ];
  332. $validate = new Validate($rule);
  333. if(!$validate->check($params)){
  334. $data = ['code'=>'400', 'msg'=>$validate->getError(), 'data'=>[]];
  335. helperService::returnJson($data);
  336. }
  337. $orderModel = new OrderModel();
  338. $orderListModel= new OrderListModel();
  339. $productModel = new ProductModel();
  340. $orderListInfo = $orderListModel->getMulti(['order_no'=>$params['orderNo']]);
  341. foreach ($orderListInfo as $key=>$value){//判断商品剩余及限购
  342. // $count_doctorNo = explode('/',$value);
  343. $productInfo = $productModel->getOne(['product_no'=>$value['product_no']]);//得到商品信息
  344. if($value['number'] > $productInfo['number']){
  345. $data = ['code'=>400, 'msg'=>$productInfo['product_name'].'商品库存不足', 'data'=>[],];
  346. helperService::returnJson($data);
  347. }
  348. $productConfigModel = new ProductConfigModel();//判断商品是否是限购商品
  349. $productConfigInfo = $productConfigModel->getOne(['product_no'=>$productInfo['product_no'],'status'=>1]);
  350. if(!empty($productConfigInfo)){
  351. if($productConfigInfo['type']==1){//单次购买限制
  352. if($productConfigInfo['number']<$value['number']){
  353. $data = ['code'=>400, 'msg'=>$productInfo['product_name']."单次购买数量不可超过".$productConfigInfo['number'], 'data'=>[],];
  354. helperService::returnJson($data);
  355. }
  356. }elseif($productConfigInfo['type']==2){//时间段限制
  357. $start = time()-86400*$productConfigInfo['day'];
  358. $res = $orderModel->getProduct(['user_no'=>Session::get('user_no'),'order_status'=>'20','add_time'=>['between',[$start,time()]],'ol.product_no'=>$productInfo['product_no']]);
  359. $count = 0;
  360. if(!empty($res)){
  361. foreach ($res as $values){
  362. $count+=$values['number'];
  363. }
  364. }
  365. if($value['number']+$count>$productConfigInfo['number']){
  366. $data = ['code'=>400, 'msg'=>$productInfo['product_name'].$productConfigInfo['day']."天内购买数量不可超过".$productConfigInfo['number'], 'data'=>[],];
  367. helperService::returnJson($data);
  368. }
  369. }
  370. }
  371. }
  372. $data=['code'=>200,'msg'=>'','data'=>[]];
  373. helperService::returnJson($data);
  374. }
  375. /**
  376. * 将订单信息插入到订单表和订单详情表
  377. */
  378. public function insertOrder(){
  379. $params = $this->request->param();
  380. $rule = [
  381. ['total_price|总价','require'],
  382. ['arr|商品选择','require'],
  383. ['count|购买总数','number']
  384. ];
  385. $validate = new Validate($rule);
  386. if(!$validate->check($params)){
  387. $data = ['code'=>'400', 'msg'=>$validate->getError(), 'data'=>[]];
  388. helperService::returnJson($data);
  389. }
  390. $price = $params['total_price'];
  391. $p = '';
  392. $ar = explode(',',$price);
  393. foreach ($ar as $key=>$value){
  394. $p.=$value;
  395. }
  396. $params['total_price'] = $p;
  397. $arr = array_filter($params['arr']);
  398. $orderListModel = new OrderListModel();
  399. $orderModel = new OrderModel();
  400. $productModel = new ProductModel();
  401. foreach ($arr as $key=>$value){//判断商品剩余及限购
  402. $count_doctorNo = explode('/',$value);
  403. $productInfo = $productModel->getOne(['product_id'=>$key]);//得到商品信息
  404. if($count_doctorNo[0] > $productInfo['number']){
  405. $data = ['code'=>400, 'msg'=>$productInfo['product_name'].'商品库存不足', 'data'=>[],];
  406. helperService::returnJson($data);
  407. }
  408. $productConfigModel = new ProductConfigModel();//判断商品是否是限购商品
  409. $productConfigInfo = $productConfigModel->getOne(['product_no'=>$productInfo['product_no'],'status'=>1]);
  410. $productInfo = helperService::modelDataToArr($productInfo);
  411. if(!empty($productConfigInfo)){
  412. if($productConfigInfo['type']==1){//单次购买限制
  413. if($productConfigInfo['number']<$count_doctorNo[0]){
  414. $data = ['code'=>400, 'msg'=>$productInfo['product_name']."单次购买数量不可超过".$productConfigInfo['number'], 'data'=>[],];
  415. helperService::returnJson($data);
  416. }
  417. }elseif($productConfigInfo['type']==2){//时间段限制
  418. $start = time()-86400*$productConfigInfo['day'];
  419. $res = $orderModel->getProduct(['user_no'=>Session::get('user_no'),'order_status'=>['in',[20,30,31]],'add_time'=>['between',[$start,time()]],'ol.product_no'=>$productInfo['product_no']]);
  420. $count = 0;
  421. if(!empty($res)){
  422. foreach ($res as $values){
  423. $count+=$values['number'];
  424. }
  425. }
  426. if($count_doctorNo[0]+$count>$productConfigInfo['number']){
  427. $data = ['code'=>400, 'msg'=>$productInfo['product_name'].$productConfigInfo['day']."天内购买数量不可超过".$productConfigInfo['number'], 'data'=>[],];
  428. helperService::returnJson($data);
  429. }
  430. }
  431. }
  432. }
  433. $order_no = helperService::createOrderNum();//生成订单编号
  434. Session::set('orderNo',$order_no);
  435. $UserModel = new UserModel();
  436. $user_id = $UserModel->where('user_no',Session::get('user_no'))->value('id');
  437. $insertOrderData = [
  438. 'order_no'=>$order_no,
  439. 'user_no'=>Session::get('user_no'),
  440. 'total_number'=>$params['count'],
  441. 'total_price'=>$params['total_price']*100,
  442. // 'order_status'=>10,
  443. 'add_time'=>time(),
  444. 'user_id'=>$user_id
  445. ];
  446. $order_id = $orderModel->saveData($insertOrderData);
  447. if($order_id === false){
  448. $data = [
  449. 'code'=>'400',
  450. 'msg'=>'订单保存失败',
  451. 'data'=>[]
  452. ];
  453. helperService::returnJson($data);
  454. }
  455. $DoctorModel = new DoctorModel();
  456. foreach ($arr as $key=>$value){//key 商品id value 商品数量
  457. $count_doctorNo = explode('/',$value);//将购买的商品数量和医生编号和商品实际价格分离
  458. $productInfo = $productModel->getOne(['product_id'=>$key]);//得到商品信息
  459. $doctor_id=0;
  460. if(isset($count_doctorNo[1]) && $count_doctorNo[1]!=0){
  461. $doctor_id = $DoctorModel->where('doctor_no',$count_doctorNo[1])->value('doctor_id');
  462. }
  463. $insertOrderListData = [
  464. 'order_no'=>$order_no,
  465. 'number'=>$count_doctorNo[0],
  466. 'doctor_no'=>$count_doctorNo[1],
  467. 'overdue_time'=>$productInfo['overdue_time'],
  468. 'add_ts'=>time(),
  469. 'product_no'=>$productInfo['product_no'],
  470. 'status'=>1,
  471. 'product_price'=>$productInfo['member_price'],
  472. 'actual_price'=>$count_doctorNo[2]*100,
  473. 'user_id'=>$user_id,
  474. 'order_id'=>$order_id,
  475. 'doctor_id'=>$doctor_id
  476. ];
  477. $return = $orderListModel->saveData($insertOrderListData);
  478. if($return === false){
  479. $data = ['code'=>'400','msg'=>'订单详情保存失败','data'=>[]];
  480. helperService::returnJson($data);
  481. }
  482. // $return = $productModel->saveData(['sales_volume'=>$productInfo['sales_volume']+$count_doctorNo[0]],['product_id'=>$key]);
  483. // if($return === false){
  484. // $data = ['code'=>'400', 'msg'=>'订单销量保存失败', 'data'=>[]];
  485. // helperService::returnJson($data);
  486. // }
  487. }
  488. // foreach ($arr as $key=>$value){//订单下好减少商品库存
  489. // $count_doctorNo = explode('/',$value);//将购买的商品数量和医生编号分离
  490. // $productInfo = $productModel->getOne(['product_id'=>$key]);//得到商品信息
  491. // $nowNumber = $productInfo['number']-$count_doctorNo[0];
  492. // $return = $productModel->saveData(['number'=>$nowNumber],['product_no'=>$productInfo['product_no']]);
  493. // if($return === false){
  494. // $data = ['code'=>'400', 'msg'=>'订单库存减少失败', 'data'=>[]];
  495. // helperService::returnJson($data);
  496. // }
  497. // }
  498. $data = [
  499. 'code'=>'200', 'msg'=>'success', 'data'=>[]
  500. ];
  501. helperService::returnJson($data);
  502. }
  503. /**
  504. * 将订单编号保存在session
  505. */
  506. public function insertSessionOrderNo(){
  507. $params = $this->request->param();
  508. $rule = [
  509. ['orderNo|订单编号','require|number'],
  510. ];
  511. $validate = new Validate($rule);
  512. if(!$validate->check($params)){
  513. $data = ['code'=>'400','msg'=>$validate->getError(),'data'=>[]];
  514. helperService::returnJson($data);
  515. }
  516. Session::set('orderNo',$params['orderNo']);
  517. $data = ['code'=>'200','msg'=>'success','data'=>[]];
  518. helperService::returnJson($data);
  519. }
  520. /**
  521. * 匹配物流模板
  522. */
  523. public function getLogisticsModel(){
  524. $params = $this->request->param();
  525. $rule = [
  526. ['province_code|省份标识','require|number'],
  527. ['total_number|订单总数','require|number'],
  528. ['num|包邮数量','require|number']
  529. ];
  530. $validate = new Validate($rule);
  531. if(!$validate->check($params)){
  532. $data = ['code'=>'400','msg'=>$validate->getError(),'data'=>[]];
  533. helperService::returnJson($data);
  534. }
  535. $logisticsModel = new LogisticsModel();
  536. $logisticsInfo = $logisticsModel->getOne(['province_code'=>$params['province_code'],'status'=>1]);
  537. if(empty($logisticsInfo)){
  538. $data=['code'=>'400','msg'=>'物流模板不存在','data'=>[],];
  539. helperService::returnJson($data);
  540. }
  541. if($params['total_number']>$params['num']){
  542. $params['total_number'] = $params['total_number'] - $params['num'];
  543. if($params['total_number']>$logisticsInfo['full_number']){
  544. $logisticsMoney = $logisticsInfo['full_price'] + ceil(($params['total_number']-$logisticsInfo['full_number'])/$logisticsInfo['continue_number'])*$logisticsInfo['continue_price'];
  545. }else{
  546. $logisticsMoney = $logisticsInfo['full_price'];
  547. }
  548. $logisticsMoney = number_format($logisticsMoney/100,2);//保留两位小数
  549. }else{
  550. $logisticsMoney=0.00;
  551. }
  552. $data = ['code'=>'200','msg'=>$logisticsMoney,'data'=>[],];
  553. helperService::returnJson($data);
  554. }
  555. /**
  556. * 支付前的接口
  557. */
  558. public function pay(){
  559. $params = $this->request->param();
  560. $rule = [
  561. ['addressId|用户收货地址标识','require|number'],
  562. ['logistics_price|物流价格','number'],
  563. ['total_price|总价格','require']
  564. ];
  565. $validate = new Validate($rule);
  566. if(!$validate->check($params)){
  567. $data = ['code'=>'400','msg'=>$validate->getError(),'data'=>[]];
  568. helperService::returnJson($data);
  569. }
  570. $price = $params['total_price'];
  571. $p = '';
  572. $ar = explode(',',$price);
  573. foreach ($ar as $key=>$value){
  574. $p.=$value;
  575. }
  576. $params['total_price'] = $p;
  577. $addressModel = new UserAddressModel();
  578. $addressInfo = $addressModel->getOne(['address_id'=>$params['addressId']]);
  579. if(empty($addressInfo)){
  580. $data = ['code'=>'400','msg'=>'地址信息有误','data'=>[]];
  581. helperService::returnJson($data);
  582. }
  583. $orderModel = new OrderModel();
  584. if(!Session::has('orderNo')){
  585. $data = ['code'=>'400','msg'=>'订单信息有误','data'=>[]];
  586. helperService::returnJson($data);
  587. }
  588. $orderNo = Session::get('orderNo');
  589. $logistics_price = isset($params['logistics_price'])?$params['logistics_price']:'0';
  590. $userDefaultAddress = array();
  591. $userDefaultAddress['province'] = ServiceBaseInfo::getAddress(['level'=>1,'code'=>$addressInfo['province_code']]);
  592. $userDefaultAddress['province'] = current($userDefaultAddress['province']);
  593. $userDefaultAddress['city'] = ServiceBaseInfo::getAddress(['level'=>2,'code'=>$addressInfo['city_code']]);
  594. $userDefaultAddress['city'] = current($userDefaultAddress['city']);
  595. $userDefaultAddress['area'] = ServiceBaseInfo::getAddress(['level'=>3,'code'=>$addressInfo['area_code']]);
  596. $userDefaultAddress['area'] = current($userDefaultAddress['area']);
  597. // print_r($userDefaultAddress);exit;
  598. $insertOrderData = [
  599. 'logistics_price'=>$logistics_price*100,
  600. 'order_type'=>1,
  601. // 'total_price'=>$params['total_price'],
  602. 'note'=>$params['note'],
  603. 'province'=>$userDefaultAddress['province']['name'],
  604. 'city'=>$userDefaultAddress['city']['name'],
  605. 'area'=>$userDefaultAddress['area']['name'],
  606. 'province_code'=>$addressInfo['province_code'],
  607. 'order_status'=>10,
  608. 'model_id'=>$params['addressId'],
  609. 'city_code'=>$addressInfo['city_code'],
  610. 'area_code'=>$addressInfo['area_code'],
  611. 'address'=>$addressInfo['address'],
  612. 'consignee'=>$addressInfo['consignee'],
  613. 'address_mobile'=>$addressInfo['address_mobile'],
  614. 'point'=>intval($params['total_price']),
  615. ];
  616. $return = $orderModel->saveData($insertOrderData,['order_no'=>$orderNo]);
  617. if($return === false){
  618. $data = ['code'=>'400','msg'=>'订单信息修改失败','data'=>[]];
  619. helperService::returnJson($data);
  620. }
  621. $return = $this->checkUser();
  622. if(!$return){
  623. $this->redirect('/index/index/person_info',['check_user_pay'=>2]);
  624. }
  625. $orderListModel = new OrderListModel();
  626. $productModel = new ProductModel();
  627. $orderListInfo = $orderListModel->getMulti(['order_no'=>$orderNo,'status'=>1]);
  628. if($orderListInfo){
  629. foreach($orderListInfo as $info){
  630. $productInfo = $productModel->getOne(['product_no'=>$info['product_no']]);
  631. $productModel->saveData(['sales_volume'=>$productInfo['sales_volume']+$info['number']],['product_no'=>$info['product_no']]);
  632. $productModel->saveData(['number'=>$productInfo['number']-$info['number']],['product_no'=>$info['product_no']]);
  633. }
  634. }
  635. $this->wxPay($orderNo,$params['total_price']);//总价格【商品+物流】
  636. }
  637. /**
  638. * 从我的订单发起支付
  639. */
  640. public function payment(){
  641. $params = $this->request->param();
  642. $orderNo = isset($params['orderNo'])?$params['orderNo']:Session::get('orderNo');
  643. Session::set('orderNo',$orderNo);
  644. $return = $this->checkUser();
  645. if(!$return){
  646. $this->redirect('/index/index/person_info',['check_user_pay'=>2]);
  647. }
  648. // $orderNo = $params('orderNo');
  649. $orderModel = new OrderModel();
  650. $orderInfo = $orderModel->getOne(['order_no'=>$orderNo]);
  651. $this->wxPay($orderNo,$orderInfo['total_price']/100+$orderInfo['logistics_price']/100);
  652. }
  653. /**
  654. * 连接支付接口
  655. */
  656. private function wxPay($orderNo,$total_price){
  657. $res = $this->checkTime();
  658. // print_r($res);exit;
  659. if(!$res){
  660. echo "<script language=javascript>alert('很抱歉,系统维护中,请明天早上8:00在付款!');history.back();</script>";
  661. exit;
  662. }
  663. $total_price = $total_price*100;
  664. // $total_price = 100;
  665. $payListModel = new PayListModel();
  666. $data = [
  667. 'user_no'=>Session::get('user_no'),
  668. 'price'=>$total_price,
  669. 'order_no'=>$orderNo,
  670. 'status'=>2,
  671. 'add_ts'=>time(),
  672. ];
  673. $list = $payListModel->getOne(['order_no'=>$orderNo,'user_no'=>Session::get('user_no')]);
  674. if(empty($list)){
  675. $payListModel->saveData($data);
  676. }
  677. $notify_url = 'http://'.$_SERVER['SERVER_NAME']."/index/order/paySuccess";
  678. $notify_url = base64_encode($notify_url);
  679. header("HTTP/1.1 301 Moved Permanently");
  680. header("Location: http://vapi2.vowkin.com/index/wechat/platformWxPay.html?pay_notify_url={$notify_url}&order_no={$orderNo}&total_price={$total_price}&companyCode=".Config::get('companyCode'))."&note=信谊";
  681. exit;
  682. }
  683. private function checkUser(){
  684. $userNo = Session::get('user_no');
  685. $userModel = new UserModel();
  686. $userInfo = $userModel->getOne(['user_no'=>$userNo]);
  687. // print_r($userInfo);exit;
  688. if(empty($userInfo['mobile'])){
  689. return false;
  690. }
  691. return true;
  692. }
  693. private function checkTime(){
  694. $date = date('Y-m-d');
  695. $return = $this->getthemonth($date);
  696. $start = strtotime("22:00:00");
  697. $end = strtotime("23:59:59");
  698. // echo $start;echo "<br/>";echo $end;exit;
  699. if($date == $return[1]){
  700. if(time()>$start && time()<$end){
  701. return false;
  702. }
  703. }
  704. return true;
  705. }
  706. private function getthemonth($date)
  707. {
  708. $firstday = date('Y-m-01', strtotime($date));
  709. $lastday = date('Y-m-d', strtotime("$firstday +1 month -1 day"));
  710. return array($firstday,$lastday);
  711. }
  712. }