OrderController.php 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: 思维定制
  5. * Date: 2018/9/5
  6. * Time: 18:03
  7. */
  8. namespace App\Http\Controllers\Web;
  9. use App\Models\MedicalComboModel;
  10. use App\Models\MedicalOrderModel;
  11. use App\Models\MedicalSingleCateModel;
  12. use App\Models\MedicalSingleProjectModel;
  13. use Illuminate\Support\Facades\Cache;
  14. use App\Models\MedicalSmsConfModel;
  15. use Illuminate\Http\Request;
  16. use Auth, Validator;
  17. use Carbon\Carbon;
  18. use GuzzleHttp\Client as GuzzleHttpClient;
  19. use GuzzleHttp\Exception\RequestException;
  20. class OrderController extends Controller
  21. {
  22. public $keySmsCodeExist = 'keySmsCodeExist';
  23. public $expireTimeExist = '';
  24. public $keySmsCode = 'keySmsCode';
  25. public $expireTime = '';
  26. public function index(Request $request)
  27. {
  28. if($request->method() == 'POST') {
  29. $data = $request->input();
  30. $key = $this->keySmsCode . $data['mobile'];
  31. $code = Cache::store('file')->get($key);
  32. if ($code !== $data['verify']) {
  33. $res['state'] = 0;
  34. $res['err'] = '验证码错误!';
  35. return $this->api($res);
  36. }
  37. $check = MedicalOrderModel::where('mobile',$data['mobile'])->first();
  38. if($check&&!empty($check->pdf)){
  39. $res['state'] = 2;
  40. $res['err'] = '您已提交';
  41. $res['redirect_url'] = url('web/Index/post').'?id='.$check->id;
  42. $res['download_url'] = url('web/Index/download').'?id='.$check->id;
  43. $res['pdf_url'] = $check->pdf;
  44. }elseif($check&&empty($check->pdf)){
  45. $res['state'] = 1;
  46. $res['err'] = '您已提交,请耐心等待结果';
  47. $res['redirect_url'] = url('web/Index/post').'?id='.$check->id;
  48. }elseif(!$check){
  49. $res['state'] = 1;
  50. $res['err'] = '请您先填写基本资料';
  51. $res['redirect_url'] = url('web/Index/sms').'?mob='.$data['mobile'];
  52. }
  53. return $this->api($res);
  54. }else{
  55. return view('web.order.sms');
  56. }
  57. }
  58. public function download(Request $request)
  59. {
  60. $id = $request->get('id');
  61. $check = MedicalOrderModel::find($id);
  62. if(!empty($check)&&!empty($check->pdf)){
  63. $url = str_replace(env('APP_URL'),public_path(),$check->pdf);
  64. return response()->download($url);
  65. }
  66. }
  67. public function sms(Request $request){
  68. $conf['nationality'] = '民族';
  69. $conf['name'] = '姓名';
  70. $conf['native_place'] = '籍贯';
  71. $conf['email'] = '邮件';
  72. $conf['work'] = '工作';
  73. $conf['address'] = '通讯地址';
  74. if($request->method() == 'POST') {
  75. $data = $request->input();
  76. foreach ($data as $key=>$val){
  77. if(empty($val)&&$key!='work'&&$key!='native_place'&&$key!='address'){
  78. $res['state'] = 0;
  79. $res['err'] = $conf[$key].'不能为空!';
  80. return $this->api($res);
  81. }
  82. }
  83. $style = explode(',',$data['sample_type']);
  84. $str = '';
  85. foreach ($style as $key=>$val){
  86. if($val==1){
  87. $str.= 'EDTA抗凝静脉血';
  88. }
  89. if($val==2){
  90. $str.= '口腔拭子';
  91. }
  92. if($val==3){
  93. $str.= '宫颈刷';
  94. }
  95. }
  96. //dd($style);
  97. $data['sample_type'] = $str;
  98. $query = MedicalOrderModel::create($data);
  99. if($query){
  100. $res['state'] = 1;
  101. $res['err'] = '提交成功';
  102. $res['redirect_url'] = url('web/Index/post').'?id='.$query->id;
  103. }else{
  104. $res['state'] = 0;
  105. $res['err'] ='网络错误';
  106. }
  107. // dd($res);
  108. return $this->api($res);
  109. }else{
  110. $mobile = $request->input();
  111. if(empty($mobile['mob'])){
  112. return redirect('web/Index/index');
  113. }
  114. return view('web.order.index',compact('mobile'));
  115. }
  116. }
  117. public function post(Request $request){
  118. if($request->method() == 'POST'){
  119. $data = $request->input();
  120. if(!empty($data['tcan'])){
  121. foreach ($data['tcan'] as $key_all=>$val_all){
  122. $tcan[] = MedicalComboModel::find($val_all);
  123. }
  124. $Update['combo'] = serialize($tcan);
  125. }
  126. if(!empty($data['xiangmu'])){
  127. foreach ($data['xiangmu'] as $key_single=>$val_single){
  128. $single[] = MedicalSingleProjectModel::find($val_single);
  129. }
  130. $Update['single'] = serialize($single);
  131. }
  132. $Update['total_price'] = $data['total_price'];
  133. $res = MedicalOrderModel::where('id',$data['id'])->update($Update);
  134. if($res){
  135. $q['msg'] = '提交成功';
  136. }else{
  137. $q['msg'] = '提交失败';
  138. }
  139. // dd($q);
  140. return view('web.order.complete',compact('q'));
  141. }
  142. $id = $request->get('id');
  143. if(empty($id)){
  144. return redirect('web/Index/index');
  145. }
  146. $cat = MedicalSingleCateModel::all();
  147. $data_single=array();
  148. foreach ($cat as $key=>$val){
  149. $projects = MedicalSingleProjectModel::where('cate_id',$val['id'])->get();
  150. $project = array();
  151. foreach($projects as $k=>$v){
  152. $project[]=(object)[
  153. 'id'=>$v['id'],
  154. 'name'=>$v['name'],
  155. 'price'=>$v['oldPrice'],
  156. 'youhui'=>$v['realPrice']
  157. ];
  158. }
  159. $data_single[]=(object)[
  160. 'name'=>$val['name'],
  161. 'data'=>$project
  162. ];
  163. }
  164. $data_combos = MedicalComboModel::all();
  165. $data_combo = array();
  166. foreach ($data_combos as $k_c=>$v_c){
  167. $data_combo[]=(object)[
  168. 'id'=>$v_c['id'],
  169. 'name'=>$v_c['name'],
  170. 'neirong'=>$v_c['content'],
  171. 'jiage'=>$v_c['oldPrice'],
  172. 'youhui'=>$v_c['realPrice']
  173. ];
  174. }
  175. $data_single = json_encode($data_single);
  176. $data_combo = json_encode($data_combo);
  177. $checkorder = MedicalOrderModel::find($id);
  178. $combos=array();
  179. $singles=array();
  180. if($checkorder&&(!empty($checkorder['single'])||!empty($checkorder['combo']))){
  181. if(!empty($checkorder['single'])){
  182. $single = unserialize($checkorder['single']);
  183. foreach ($single as $k_s=>$v_s){
  184. $singles[]=(object)[
  185. 'id'=>$v_s['id'],
  186. 'name'=>$v_s['name'],
  187. 'price'=>$v_s['oldPrice'],
  188. 'youhui'=>$v_s['realPrice']
  189. ];
  190. }
  191. }
  192. if(!empty($checkorder['combo'])){
  193. $combo = unserialize($checkorder['combo']);
  194. foreach ($combo as $k_c=> $v_c){
  195. $combos[]=(object)[
  196. 'id'=>$v_c['id'],
  197. 'name'=>$v_c['name'],
  198. 'neirong'=>$v_c['content'],
  199. 'jiage'=>$v_c['oldPrice'],
  200. 'youhui'=>$v_c['realPrice']
  201. ];
  202. }
  203. }
  204. $data_single_check = json_encode($singles);
  205. $data_combo_check = json_encode($combos);
  206. //dd($data_single);
  207. return view('web.order.result',compact('data_single_check','data_combo_check','data_single','data_combo','id'));
  208. }elseif(!$checkorder){
  209. return redirect('web/Index/index');
  210. }
  211. // dd($data_single);
  212. return view('web.order.post',compact('data_single','data_combo','id'));
  213. }
  214. /**
  215. ***聚合数据
  216. ***DATE:2015-05-25
  217. */
  218. public function smsJuHe(Request $request)
  219. {
  220. $data = $request->input();
  221. $conf = MedicalSmsConfModel::find(1);
  222. header('content-type:text/html;charset=utf-8');
  223. $sendUrl = 'http://v.juhe.cn/sms/send'; //短信接口的URL
  224. $num = rand(1000,9999);
  225. Cache::put($data['mobile'].'post',$num,10000);
  226. $smsConf = array(
  227. 'key' => $conf->apikey, //您申请的APPKEY
  228. 'mobile' => $data['mobile'], //接受短信的用户手机号码
  229. 'tpl_id' => $conf->temp_id, //您申请的短信模板ID,根据实际情况修改
  230. 'tpl_value' =>'#code#=1234&#company#='.$conf->sign //您设置的模板变量,根据实际情况修改
  231. );
  232. $content = $this->juhecurl($sendUrl,$smsConf,1); //请求发送短信
  233. //$content=false;
  234. if($content){
  235. $result = json_decode($content,true);
  236. $error_code = $result['error_code'];
  237. if($error_code == 0){
  238. //状态为0,说明短信发送成功
  239. $res['state'] = 1;
  240. }else{
  241. //状态非0,说明失败
  242. $msg = $result['reason'];
  243. $res['err'] = "短信发送失败(".$error_code."):".$msg;
  244. $res['state'] = 0;
  245. }
  246. }else{
  247. $res['state'] = 0;
  248. $res['err'] = '发送失败';
  249. }
  250. return $this->api($res);
  251. }
  252. /*
  253. * 获取验证码
  254. */
  255. public function getCode(Request $request)
  256. {
  257. //对手机号码进行验证
  258. $validator = Validator::make($request->all(),
  259. [
  260. 'mobile' => 'required|regex:/^1[34578]\d{9}$/',
  261. ],
  262. [
  263. 'mobile.required' => '手机号码必填',
  264. 'mobile.regex' => '手机号码格式不正确',
  265. ]
  266. );
  267. if ($validator->fails()) {
  268. $msgs = $validator->errors()->first();
  269. return json_encode(['code' => 0, 'msg' => $msgs]);
  270. }
  271. $phone = $request->get('mobile');
  272. $ipkeyexist = $this->keySmsCodeExist . $_SERVER["REMOTE_ADDR"] . Carbon::now()->toDateString();
  273. $times = Cache::store('file')->get($ipkeyexist);
  274. if($times>10) {
  275. return json_encode(['state' => 0, 'msg' => '一天内一个ip最多发送十次验证码']);
  276. }else{
  277. $times++;
  278. Cache::store('file')->put($ipkeyexist, $times, 60 * 24);
  279. }
  280. $keyexist = $this->keySmsCodeExist . $phone . Carbon::now()->toDateString();;
  281. $times = Cache::store('file')->get($keyexist);
  282. if($times>8) {
  283. return json_encode(['state' => 0, 'msg' => '一天内最多发送八次验证码']);
  284. }else{
  285. $times++;
  286. Cache::store('file')->put($keyexist, $times, 60 * 24);
  287. }
  288. $verify_code = (string)mt_rand(1000, 9999);
  289. $key = $this->keySmsCode . $phone;
  290. Cache::store('file')->put($key, $verify_code, 6000);
  291. $msg = '【精准医疗】您的验证码是:' . $verify_code;
  292. $result = $this->sendSms($msg, $phone);
  293. // \Log::info($msg . " res:" . $result);
  294. if (!$result) return json_encode(['state' => 0, 'msg' => '短信发送失败']);
  295. return json_encode(['state' => 1, 'msg' => '短信发送成功']);
  296. }
  297. /*
  298. * 发送短信
  299. */
  300. public function sendSms($msg, $mobile) {
  301. $url = "http://api.106txt.com/smsGBK.aspx?";
  302. $account = "swufecredit2017";
  303. $password = "mask751002";
  304. $password = strtoupper(md5($password));
  305. $gwid = 53;
  306. $message = iconv("UTF-8", "GB2312", $msg);
  307. try {
  308. $client = new GuzzleHttpClient();
  309. $data = [
  310. 'action' => 'Send',
  311. 'username' => $account,
  312. 'password' => $password,
  313. 'gwid' => $gwid,
  314. 'mobile' => $mobile,
  315. 'message' => $message,
  316. ];
  317. $apiRequest = $client->post($url, [
  318. 'form_params' => $data,
  319. ]);
  320. $resp = $apiRequest->getBody()->getContents();
  321. $res = iconv("GB2312", "UTF-8", $resp);
  322. $re = json_decode($res, true);
  323. \Log::info("发送短信 到手机:$mobile 内容:$msg RESULT:".$re['RESULT']);
  324. if (trim($re['CODE']) == '1') {
  325. return true;
  326. }
  327. } catch (RequestException $re) {
  328. \Log::info("发送短信错误:".$re->getMessage());
  329. return false;
  330. }
  331. return false;
  332. }
  333. /**
  334. * 请求接口返回内容
  335. * @param string $url [请求的URL地址]
  336. * @param string $params [请求的参数]
  337. * @param int $ipost [是否采用POST形式]
  338. * @return string
  339. */
  340. function juhecurl($url,$params=false,$ispost=0){
  341. $httpInfo = array();
  342. $ch = curl_init();
  343. curl_setopt( $ch, CURLOPT_HTTP_VERSION , CURL_HTTP_VERSION_1_1 );
  344. curl_setopt( $ch, CURLOPT_USERAGENT , 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22' );
  345. curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT , 30 );
  346. curl_setopt( $ch, CURLOPT_TIMEOUT , 30);
  347. curl_setopt( $ch, CURLOPT_RETURNTRANSFER , true );
  348. if( $ispost )
  349. {
  350. curl_setopt( $ch , CURLOPT_POST , true );
  351. curl_setopt( $ch , CURLOPT_POSTFIELDS , $params );
  352. curl_setopt( $ch , CURLOPT_URL , $url );
  353. }
  354. else
  355. {
  356. if($params){
  357. curl_setopt( $ch , CURLOPT_URL , $url.'?'.$params );
  358. }else{
  359. curl_setopt( $ch , CURLOPT_URL , $url);
  360. }
  361. }
  362. $response = curl_exec( $ch );
  363. if ($response === FALSE) {
  364. //echo "cURL Error: " . curl_error($ch);
  365. return false;
  366. }
  367. $httpCode = curl_getinfo( $ch , CURLINFO_HTTP_CODE );
  368. $httpInfo = array_merge( $httpInfo , curl_getinfo( $ch ) );
  369. curl_close( $ch );
  370. return $response;
  371. }
  372. }