OrderService.php 38 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950
  1. <?php
  2. namespace App\Services\Common;
  3. use Aix\Pay\Data\PayOrder;
  4. use Aix\Sms\Contracts\Smser;
  5. use App\Exceptions\ResponseException;
  6. use App\Models\Category;
  7. use App\Models\Company;
  8. use App\Models\CompanyTpl;
  9. use App\Models\Jobs;
  10. use App\Models\Member;
  11. use App\Models\MembersHandsel;
  12. use App\Models\MembersPoint;
  13. use App\Models\Order;
  14. use App\Models\PersonalServiceStick;
  15. use App\Models\PersonalServiceStickLog;
  16. use App\Models\PersonalServiceTag;
  17. use App\Models\PersonalServiceTagLog;
  18. use App\Models\PersonTpl;
  19. use App\Models\Resume;
  20. use App\Models\Tpl;
  21. use App\Repositories\CompanyRepository;
  22. use App\Repositories\InvoiceCategoryRepository;
  23. use App\Repositories\JobsRepository;
  24. use App\Repositories\MemberLogRepository;
  25. use App\Repositories\MemberPointRepository;
  26. use App\Repositories\MembersChargeLogRepository;
  27. use App\Repositories\InvoiceRepository;
  28. use App\Repositories\MembersSetmealLogRepository;
  29. use App\Repositories\OrderRepository;
  30. use App\Repositories\PaymentRepository;
  31. use App\Repositories\PromotionRepository;
  32. use App\Repositories\QueueAutoRefreshRepository;
  33. use App\Repositories\SetmealRepository;
  34. use App\Services\Company\JobsService;
  35. use App\Services\Company\ServiceService;
  36. use App\Repositories\MemberHandselRepository;
  37. use App\Repositories\SetmealIncrementsRepository;
  38. use App\Repositories\MemberSetmealRepository;
  39. use App\Repositories\MemberRepository;
  40. use App\Repositories\ResumeRepository;
  41. use App\Repositories\CompanyDownResumeRepository;
  42. use Illuminate\Support\Facades\Log;
  43. use SimpleSoftwareIO\QrCode\Facades\QrCode;
  44. use App\Http\Controllers\Web\WebBaseController;
  45. /**
  46. * 订单服务。
  47. * Class OrderService
  48. * @package App\Services\Common
  49. */
  50. class OrderService extends WebBaseController
  51. {
  52. protected $orderRepository;
  53. protected $setmealRepository;
  54. protected $companyRepository;
  55. protected $memberPointRepository;
  56. protected $serviceService;
  57. protected $memberLogRepository;
  58. protected $membersChargeLogRepository;
  59. protected $memberHandselRepository;
  60. protected $setmealIncrementsRepository;
  61. protected $memberSetmealRepository;
  62. protected $memberRepository;
  63. protected $resumeRepository;
  64. protected $companyDownResumeRepository;
  65. protected $invoiceRepository;
  66. protected $paymentRepository;
  67. protected $invoiceCategoryRepository;
  68. protected $payService;
  69. protected $queueAutoRefreshRepository;
  70. protected $promotionRepository;
  71. protected $jobsRepository;
  72. protected $smsService;
  73. protected $membersSetmealLogRepository;
  74. protected $order_type =[
  75. "1"=>"套餐升级",
  76. "2"=>"充值积分",
  77. "3"=>"简历置顶",
  78. "4"=>"醒目标签",
  79. "5"=>"简历模板",
  80. "6"=>"简历包",
  81. "7"=>"短信包",
  82. "8"=>"职位置顶",
  83. "9"=>"职位紧急",
  84. "10"=>"企业模板",
  85. "12"=>"预约刷新职位",
  86. "13"=>"职位刷新",
  87. "14"=>"简历下载",
  88. "15"=>"简历包",
  89. "16"=>"招聘会包",
  90. ];
  91. /**
  92. * OrderService constructor.
  93. * @param $orderRepository
  94. * @param $setmealRepository
  95. * @param $companyRepository
  96. * @param $memberPointRepository
  97. * @param $serviceService
  98. * @param $memberLogRepository
  99. * @param $membersChargeLogRepository
  100. * @param $memberHandselRepository
  101. * @param $setmealIncrementsRepository
  102. * @param $memberSetmealRepository
  103. * @param $memberRepository
  104. * @param $resumeRepository
  105. * @param $companyDownResumeRepository
  106. * @param $invoiceRepository
  107. * @param $paymentRepository
  108. * @param $invoiceCategoryRepository
  109. * @param $payService
  110. * @param $queueAutoRefreshRepository
  111. * @param $promotionRepository
  112. * @param $jobsRepository
  113. * @param $smsService
  114. * @param $membersSetmealLogRepository
  115. */
  116. public function __construct(MembersSetmealLogRepository $membersSetmealLogRepository,OrderRepository $orderRepository, SmsService $smsService, JobsRepository $jobsRepository, PromotionRepository $promotionRepository, QueueAutoRefreshRepository $queueAutoRefreshRepository, PayService $payService, InvoiceCategoryRepository $invoiceCategoryRepository, PaymentRepository $paymentRepository, InvoiceRepository $invoiceRepository, MembersChargeLogRepository $membersChargeLogRepository, MemberLogRepository $memberLogRepository, ServiceService $serviceService, MemberPointRepository $memberPointRepository, SetmealRepository $setmealRepository, CompanyRepository $companyRepository, MemberHandselRepository $memberHandselRepository, SetmealIncrementsRepository $setmealIncrementsRepository, MemberSetmealRepository $memberSetmealRepository, MemberRepository $memberRepository, ResumeRepository $resumeRepository, CompanyDownResumeRepository $companyDownResumeRepository)
  117. {
  118. $this->orderRepository = $orderRepository;
  119. $this->setmealRepository = $setmealRepository;
  120. $this->companyRepository = $companyRepository;
  121. $this->memberPointRepository = $memberPointRepository;
  122. $this->serviceService = $serviceService;
  123. $this->memberLogRepository = $memberLogRepository;
  124. $this->membersChargeLogRepository = $membersChargeLogRepository;
  125. $this->memberHandselRepository = $memberHandselRepository;
  126. $this->setmealIncrementsRepository = $setmealIncrementsRepository;
  127. $this->memberSetmealRepository = $memberSetmealRepository;
  128. $this->memberRepository = $memberRepository;
  129. $this->resumeRepository = $resumeRepository;
  130. $this->companyDownResumeRepository = $companyDownResumeRepository;
  131. $this->invoiceRepository = $invoiceRepository;
  132. $this->paymentRepository = $paymentRepository;
  133. $this->invoiceCategoryRepository = $invoiceCategoryRepository;
  134. $this->payService = $payService;
  135. $this->queueAutoRefreshRepository = $queueAutoRefreshRepository;
  136. $this->promotionRepository = $promotionRepository;
  137. $this->jobsRepository = $jobsRepository;
  138. $this->smsService = $smsService;
  139. $this->membersSetmealLogRepository=$membersSetmealLogRepository;
  140. }
  141. /**订单列表
  142. * @param $request
  143. * @return array
  144. */
  145. public function orderList($request, $user)
  146. {
  147. $order_type_choose = ['setmeal'=>'套餐订单','increment'=>'增值服务订单','points'=>'积分订单'];
  148. $pay_status_choose = [1=>'未支付',2=>'已完成',3=>'已取消'];
  149. $type = isset($request['type'])?$request['type']:"";
  150. $is_pay = isset($request['is_pay'])?$request['is_pay']:0;
  151. $where = [];
  152. $map = [];
  153. switch ($type) {
  154. case 'setmeal':
  155. $where = ['1'];
  156. break;
  157. case 'increment':
  158. $where= ['3','4','6','7','8','9','10','12','15','16'];
  159. break;
  160. case "points":
  161. $where = ['2'];
  162. break;
  163. default:
  164. $where = ['1','2','3','4','6','7','8','9','10','12','13','14','15','16'];
  165. }
  166. if ($is_pay) {
  167. $map['is_pay'] = $is_pay;
  168. }
  169. $map['uid'] = $user->id;
  170. $map['utype'] = 1;
  171. $orderList = $this->orderRepository->orderList($map, $where);
  172. foreach ($orderList as $key => $value) {
  173. $orderList[$key]->invoice = $this->invoiceRepository->getOne($value->id, $user);
  174. }
  175. $param_array = ['type','is_pay'];
  176. $params= array();
  177. if ($request) {
  178. foreach ($request as $k => $v) {
  179. if (in_array($k, $param_array)) {
  180. $params[$k] = $v;
  181. }
  182. }
  183. }
  184. $result = [
  185. 'orderList'=>$orderList,
  186. 'params'=>$params,
  187. 'type'=>$type,
  188. 'is_pay'=>$is_pay,
  189. 'order_type_choose'=>$order_type_choose,
  190. 'pay_status_choose'=>$pay_status_choose,
  191. 'order_type'=>$this->order_type,
  192. ];
  193. return $result;
  194. }
  195. public function orderDetail($id, $user)
  196. {
  197. $order_type = [1=>'套餐升级',2=>'充值积分',3=>'简历置顶',4=>'醒目标签',5=>'简历模板',6=>'简历包',7=>'短信包',8=>'职位置顶',9=>'职位紧急',10=>'企业模板',11=>'诚聘通',12=>'预约刷新职位',13=>'职位刷新',14=>'简历下载',15=>'简历包',14=>'招聘会包'];
  198. if (!$order = $this->orderRepository->getOrder(['id'=>$id,'uid'=>$user->id])) {
  199. throw new ResponseException('无此订单!');
  200. }
  201. if(is_array(unserialize($order->params))){
  202. $order->params_arr =unserialize($order->params);
  203. }else{
  204. $order->params_arr =json_decode(unserialize($order->params),true);
  205. }
  206. $order->discount_money =floatval(intval($order->pay_points)/config('aix.companyset.points.points_set.payment_rate'));
  207. $old_price = $this->getOldPrice($order);
  208. $order->old_price = $old_price?$old_price:$order->amount;
  209. $res['user'] = $user;
  210. $res['order'] = $order;
  211. $res['open_invoice'] = config('aix.companyset.comset.com_set.open_invoice');
  212. $res['invoice'] = $this->invoiceRepository->getOneInvoice($id, $user);
  213. $res['order_type_cn'] = $order_type[$res['order']->order_type];
  214. $res['mysetmeal'] = $this->memberSetmealRepository->getSetmealByUid($user->id, $user->utype);
  215. $res['payment_info'] = $this->paymentRepository->findByField(['alias'=>$res['order']->payment]);
  216. $res['myPoints'] = $this->memberPointRepository->getComPointsById($user->id, 1);
  217. $res['payment_rate'] = config('aix.companyset.points.points_set.payment_rate');
  218. $res['points_enough'] = 1;
  219. if ($res['myPoints']->points < $order->pay_points) {
  220. $res['points_enough'] = 0;
  221. }
  222. if ($res['order']->is_pay == 2 || $res['order']->is_pay == 3) {
  223. $category = $this->invoiceCategoryRepository->get()->toArray();
  224. $category_arr = [];
  225. foreach ($category as $key => $val) {
  226. $category_arr[$val['id']] = $val;
  227. }
  228. $res['category'] = $category_arr;
  229. }
  230. $res["orderExplain"]=config("aix.system.pay.offline.service_tel");
  231. $mysetmeal = $this->memberSetmealRepository->getSetmealByUid($user->id, $user->utype);
  232. //获取买的套餐信息
  233. switch ($order->order_type){
  234. case 1: //套餐升级
  235. $setmealIncr=$this->setmealRepository->find($order->setmeal);
  236. $setmealIncrDay=$setmealIncr->days;
  237. //理因到期时间
  238. $expireTimeBase=date("Y-m-d H:i:s",strtotime("+{$setmealIncrDay} day",$order->payment_time));
  239. $res['expireTime']=$expireTimeBase;
  240. break;
  241. case 2:case 10:case 5://充值积分
  242. $res['expireTime']="无期限";
  243. break;
  244. case 7:case 14:case 15:case 16:
  245. $res['expireTime']="无期限";
  246. break;
  247. case 8:
  248. case 9:
  249. case 12:
  250. case 13:
  251. try{ //因为有那个单个的职位刷新 没有增值服务
  252. $setmealIncr=$this->setmealIncrementsRepository->find($order->setmeal);
  253. $setmealIncrDay=$setmealIncr->value;
  254. //理因到期时间
  255. $expireTimeBase=date("Y-m-d H:i:s",strtotime("+{$setmealIncrDay} day",$order->payment_time));
  256. $expireTime=strtotime($expireTimeBase);
  257. //我会员的结束时间小于套餐的到期时间
  258. if (strtotime($expireTimeBase)>strtotime($mysetmeal->endtime)) {
  259. $expireTime=$mysetmeal->endtime;
  260. }
  261. if($mysetmeal->endtime==0){//免费的
  262. $expireTime=strtotime($expireTimeBase);
  263. }
  264. $res['expireTime']=date("Y-m-d H:i:s",$expireTime);
  265. }catch (\Exception $exception){
  266. $res['expireTime']="--";
  267. }
  268. break;
  269. default:
  270. $res['expireTime']="--";
  271. break;
  272. }
  273. if($order->is_pay==3){
  274. $res['expireTime']="--";
  275. $res['payment_time']="--";
  276. }
  277. return $res;
  278. }
  279. /**
  280. * 订单详情页获取原价
  281. */
  282. protected function getOldPrice($order)
  283. {
  284. $arr = [6,7,8,9,12];
  285. if (in_array($order->order_type, $arr)) {
  286. $increment = $this->setmealIncrementsRepository->find($order->setmeal);
  287. return $increment->price;
  288. } else {
  289. return false;
  290. }
  291. }
  292. public function orderPayRepeat($id)
  293. {
  294. $user = auth('web-company')->user();
  295. $orderInfo = $this->orderRepository->find($id);
  296. $myPoints = $this->memberPointRepository->getComPointsById($user->id, 1);
  297. if ($orderInfo->pay_points > 0 && $myPoints->points < $orderInfo->pay_points) {
  298. $back_url = \Illuminate\Support\Facades\URL::previous();
  299. return $this->showMessage('积分不足,无法完成支付,请重新下单!', $back_url, true, '上一页', '3');
  300. // throw new ResponseException('积分不足,无法完成支付,请重新下单!');
  301. }
  302. if ($orderInfo->payment == 'wechat') {
  303. $type = 'scan';
  304. } else {
  305. $type = 'web';
  306. }
  307. $payOrder = new PayOrder();
  308. $payOrder->trade_no = $orderInfo->oid;
  309. $payOrder->subject = '购买' . $orderInfo->service_name;
  310. $payOrder->detail = $orderInfo->description;
  311. $payOrder->price = $orderInfo->pay_amount;
  312. $payOrder->callback = "App\Services\Common\OrderService.orderPaySave";
  313. $result = $this->payService->pay($orderInfo->payment, $type, $payOrder);
  314. if ($orderInfo->payment == 'wechat') {
  315. return response()->json([
  316. 'status' => 1,
  317. 'tradeCode' => get_qrcode_html($result->code_url),
  318. 'tradeNo' => $orderInfo->oid,
  319. ]);
  320. } else {
  321. return $result;
  322. }
  323. }
  324. public function mobileOrderPayRepeat($id)
  325. {
  326. $user = auth('web-company')->user();
  327. $orderInfo = $this->orderRepository->find($id);
  328. $myPoints = $this->memberPointRepository->getComPointsById($user->id, 1);
  329. if ($orderInfo->pay_points > 0 && $myPoints->points < $orderInfo->pay_points) {
  330. $back_url = \Illuminate\Support\Facades\URL::previous();
  331. return $this->showMessage('积分不足,无法完成支付,请重新下单!', $back_url, true, '上一页', '3');
  332. }
  333. if ($orderInfo->payment == 'wechat') {
  334. $type = 'wap';
  335. } else {
  336. $type = 'wap';
  337. }
  338. $payOrder = new PayOrder();
  339. $payOrder->trade_no = $orderInfo->oid;
  340. $payOrder->subject = '购买' . $orderInfo->service_name;
  341. $payOrder->detail = $orderInfo->description;
  342. $payOrder->price = $orderInfo->amount;
  343. $payOrder->callback = "App\Services\Common\OrderService.orderPaySave";
  344. if ($orderInfo->payment == 'wechat') {
  345. if (!is_weixin()) {
  346. $type = 'wap';
  347. } else {
  348. //预留
  349. }
  350. $payOrder->return_url=route('mobile.common.orderWechat', ['oid'=>$payOrder->trade_no]);
  351. } else {
  352. $type = 'wap';
  353. $payOrder->return_url=route('mobile.firm.service.order.index');
  354. }
  355. $result = $this->payService->pay($orderInfo->payment, $type, $payOrder);
  356. return $result;
  357. }
  358. public function orderPaySave(PayOrder $payOrder)
  359. {
  360. $trade_no = $payOrder->trade_no;
  361. $this->orderRepository->updateStatus($trade_no, ['is_pay'=>2, 'payment_time'=>time()]);
  362. }
  363. /**订单删除
  364. * @param $id
  365. * @return \Illuminate\Http\JsonResponse
  366. * @throws \ErrorException
  367. * @throws \Prettus\Validator\Exceptions\ValidatorException
  368. */
  369. public function orderDel($id,$user)
  370. {
  371. $info = $this->orderRepository->findWhere(['id'=>$id,'uid'=>$user->id])->first();
  372. if (empty($info)){
  373. return response()->json(['status'=>0,'msg'=>'没有这个订单']);
  374. }
  375. if ($info->is_pay == 2) {
  376. return response()->json(['status'=>0,'msg'=>'已完成的订单不允许删除!']);
  377. }
  378. if (!$this->orderRepository->delete($id)) {
  379. return response()->json(['status'=>0,'msg'=>'删除订单失败!']);
  380. }
  381. $this->memberLogRepository->createLog($user, 9005, [$info->oid]);
  382. return response()->json(['status'=>1,'msg'=>'删除订单成功!']);
  383. }
  384. public function invoiceSave($data, $user)
  385. {
  386. $has = $this->invoiceRepository->getOne($data['order_id'], $user);
  387. if ($has) {
  388. return response()->json(['status'=>0,'msg'=>"您已经索取过发票了!"]);
  389. }
  390. if ($data['title'] == 2) {
  391. unset($data['organization']);
  392. }
  393. $order = $this->orderRepository->find($data['order_id']);
  394. $data['order_num'] = $data['order_id'];
  395. $data['oid'] = $order->oid;
  396. $data['uid'] = $user->id;
  397. $order_id = $data['order_id'];
  398. unset($data['order_id']);
  399. if (!$this->invoiceRepository->create($data)) {
  400. return response()->json(['status'=>0,'msg'=>"操作失败!"]);
  401. }
  402. $this->memberLogRepository->createLog($user, 9003, [$order_id]);
  403. return array('status'=>1,'msg'=>'索取发票成功!','data'=>$this->invoiceRepository->getOne($data['order_num'], $user));
  404. }
  405. /**订单取消
  406. * @param $id
  407. * @return \Illuminate\Http\JsonResponse
  408. * @throws \ErrorException
  409. * @throws \Prettus\Validator\Exceptions\ValidatorException
  410. */
  411. public function orderCancel($id, $user)
  412. {
  413. $info = $this->orderRepository->findWhere(['uid'=>$user->id],$id)->first();
  414. if (!$info) {
  415. return response()->json(['status'=>0,'msg'=>'没有找到对应的订单!']);
  416. } elseif ($info->is_pay !=1) {
  417. return response()->json(['status'=>0,'msg'=>'该订单不允许取消!']);
  418. }
  419. if (!$this->orderRepository->update(['is_pay'=>3], $id)) {
  420. return response()->json(['status'=>0,'msg'=>'取消订单失败!']);
  421. }
  422. $this->memberLogRepository->createLog($user, 9004, [$info->oid]);
  423. return response()->json(['status'=>1,'msg'=>'取消订单成功!']);
  424. }
  425. /**
  426. * 电子票据
  427. */
  428. // public function enote($id)
  429. // {
  430. //
  431. //
  432. // $result = [];
  433. // return $result;
  434. // }
  435. /**
  436. * @param PayOrder $payOrder
  437. */
  438. public function updateOrder(PayOrder $payOrder)
  439. {
  440. $trade_no = $payOrder->trade_no;
  441. Order::where(['oid'=>$trade_no])->update(['is_pay'=>2,'payment_time'=>time()]);
  442. $order = Order::where(['oid'=>$trade_no])->first();
  443. $input = json_decode($order->charge);
  444. $resume = Resume::where('id', $input->resume_id)->first();
  445. $uid = $resume->uid;
  446. $TYPE = $input->type;
  447. $member = Member::where('id', $uid)->first();
  448. $uytpe = $member->utype;
  449. $POINTS = MembersPoint::where(['uid'=>$uid, 'utype'=>$uytpe])->first();
  450. if ($order->pay_points > 0) {
  451. $STATUS = $TYPE=='tag' ? '简历标签' : '简历置顶';
  452. if ($POINTS) {
  453. if ($POINTS->points>=$order->pay_points) {
  454. MembersPoint::where(
  455. ['uid'=>$uid,'utype'=>$uytpe]
  456. )->decrement('points', $order->pay_points);
  457. } else {
  458. MembersPoint::where(
  459. ['uid'=>$uid,'utype'=>$uytpe]
  460. )->update(['points'=>0]);
  461. }
  462. }
  463. MembersHandsel::create(
  464. [
  465. 'uid'=>$uid,
  466. 'utype'=>$uytpe,
  467. 'htype'=>'','htype_cn'=>$STATUS.$input->days.'天',
  468. 'operate'=>2,'points'=>$order->pay_points
  469. ]
  470. );
  471. }
  472. if ($TYPE=='tag') {
  473. $categorys = Category::where('id', $input->tagid)->first();
  474. $personal_service_tags = PersonalServiceTag::where('days', $input->days)->first();
  475. $tag_logs = PersonalServiceTagLog::where(['resume_id'=>$input->resume_id,'resume_uid'=>$uid])->first();
  476. if ($tag_logs) {
  477. $dat['days']= $input->days;
  478. $dat['points']= $personal_service_tags->points;
  479. $dat['tag_id']= $input->tagid;
  480. $dat['tag_cn']= $categorys->demand;
  481. $dat['addtime']= time();
  482. $dat['endtime']= strtotime("+".$input->days." day");
  483. PersonalServiceTagLog::where(
  484. ['resume_id'=>$input->resume_id,'resume_uid'=>$uid]
  485. )->update($dat);
  486. } else {
  487. $dat['resume_id']= $input->resume_id;
  488. $dat['resume_uid']= $uid;
  489. $dat['days']= $input->days;
  490. $dat['points']= $personal_service_tags->points;
  491. $dat['tag_id']= $input->tagid;
  492. $dat['tag_cn']= $categorys->demand;
  493. $dat['addtime']= time();
  494. $dat['endtime']= strtotime("+".$input->days." day");
  495. PersonalServiceTagLog::create($dat);
  496. }
  497. } else {
  498. Resume::where('id', $input->resume_id)->update(['stick'=>1,'stime'=>strtotime("+".$input->days." day")]);
  499. $stick_logs = PersonalServiceStickLog::where(
  500. ['resume_id'=>$input->resume_id,'resume_uid'=>$uid]
  501. )->first();
  502. $personal_service_sticks = PersonalServiceStick::where('days', $input->days)->first();
  503. if ($stick_logs) {
  504. $dat['days']= $input->days;
  505. $dat['points']= $personal_service_sticks->points;
  506. $dat['addtime']= time();
  507. $dat['endtime']= strtotime("+".$input->days." day");
  508. PersonalServiceStickLog::where(
  509. ['resume_id'=>$input->resume_id,'resume_uid'=>$uid]
  510. )->update($dat);
  511. } else {
  512. $dat['resume_id']= $input->resume_id;
  513. $dat['resume_uid']= $uid;
  514. $dat['days']= $input->days;
  515. $dat['points']= $personal_service_sticks->points;
  516. $dat['addtime']= time();
  517. $dat['endtime']= strtotime("+".$input->days." day");
  518. PersonalServiceStickLog::create($dat);
  519. }
  520. }
  521. return;
  522. }
  523. /**
  524. * @param $user
  525. * @param $order_type
  526. * @param $amount
  527. * @param $pay_amount
  528. * @param $pay_points
  529. * @param $service_name
  530. * @param $payment
  531. * @param $payment_cn
  532. * @param $description
  533. * @param $is_paid
  534. * @param $points
  535. * @param $setmeal
  536. * @param $payment_time
  537. * @param $params
  538. * @param $discount
  539. * @param $notes
  540. * @return Order
  541. */
  542. public function addOrder($user, $order_type, $amount, $pay_amount, $pay_points, $service_name, $payment, $payment_cn, $description, $is_paid, $points, $setmeal, $payment_time, $params,$my_discount="")
  543. {
  544. return $this->orderRepository->addOrder($user, $order_type, $amount, $pay_amount, $pay_points, $service_name, $payment, $payment_cn, $description, $is_paid, $points, $setmeal, $payment_time, $params,$my_discount);
  545. }
  546. /**支付成功后回调此函数,修改各表值,生成记录
  547. * @param PayOrder $payOrder
  548. * @throws \ErrorException
  549. * @throws \Prettus\Validator\Exceptions\ValidatorException
  550. */
  551. public function updateCompany(PayOrder $payOrder)
  552. {
  553. //支付成功后操作== 修改订单表中状态和支付时间
  554. $trade_no = $payOrder->trade_no;
  555. $data = [
  556. 'is_pay'=>2,
  557. 'payment_time'=>time(),
  558. ];
  559. if ($payOrder->attch) {
  560. $data['notes'] = $payOrder->attch;
  561. }
  562. $this->orderRepository->updateStatus($trade_no, $data);
  563. $order = $this->orderRepository->getOneOder($trade_no);
  564. $params = unserialize($order->params);
  565. $setmeal_id = $params['setmeal_id'];
  566. $id = $params['company_id'];
  567. $utype = $params['utype'];
  568. $username = $params['username'];
  569. $subsite_id = $params['subsite_id'];
  570. $setmealInfo = $this->setmealRepository->find($setmeal_id);
  571. $user =(object)['id'=>$id,'utype'=>$utype,'username'=>$username,'subsite_id'=>$subsite_id];
  572. $this->serviceService->setMembersSetmeal($user, $setmeal_id);
  573. switch ($order->pay_type) {
  574. case 1:
  575. $paytype = '积分兑换';
  576. break;
  577. case 2:
  578. $paytype = '现金';
  579. break;
  580. case 3:
  581. $paytype = '现金+积分';
  582. break;
  583. }
  584. if ($order->pay_type !=1) {
  585. $comInfo = $this->companyRepository->find($id, ['mobile']);
  586. if ($comInfo->mobile) {
  587. $this->smsService->sendSms($comInfo->mobile, Smser::TEMPLATE_SMS_ORDER, ['sitename'=>config('aix.system.site.site.site_name'),'oid'=>$trade_no,'paymenttpye'=>$order->payment_cn,'amount'=>$order->pay_amount,'sitedomain'=>config('aix.system.site.site.site_domain')]);
  588. }
  589. }
  590. }
  591. /**查询订单ID
  592. * @param $tradeNo
  593. * @return \Illuminate\Http\JsonResponse
  594. */
  595. public function getOrderbyTradeNo($tradeNo)
  596. {
  597. $orderInfo = $this->orderRepository->getOneOder($tradeNo);
  598. if ($orderInfo->is_pay != 2) {
  599. return response()->json(['status'=>0]);
  600. }
  601. return response()->json(['status'=>1]);
  602. }
  603. public function pointsSave(PayOrder $payOrder)
  604. {
  605. $trade_no = $payOrder->trade_no;
  606. $this->orderRepository->updateStatus($trade_no, ['is_pay'=>2, 'payment_time'=>time()]);
  607. $order = $this->orderRepository->getOneOder($trade_no);
  608. $user = $this->companyRepository->getCompanyInfo(['id'=>$order->uid]);
  609. if ($user->mobile) {
  610. $this->smsService->sendSms($user->mobile, Smser::TEMPLATE_SMS_ORDER, ['sitename'=>config('aix.system.site.site.site_name'),'oid'=>$trade_no,'paymenttpye'=>$order->payment_cn,'amount'=>$order->pay_amount,'sitedomain'=>config('aix.system.site.site.site_domain')]);
  611. }
  612. $points = $order->amount*config('aix.companyset.points.points_set.payment_rate');
  613. //增加积分记录
  614. $handsel['uid'] = $user->id;
  615. $handsel['utype'] = $user->utype;
  616. $handsel['htype'] = 'cash_buy_points';
  617. $handsel['htype_cn'] = $order->service_name;
  618. $handsel['operate'] = 1;
  619. $handsel['points'] = $points;
  620. $this->memberHandselRepository->create($handsel);
  621. $this->setPointByOrder($order);//更新邓积分
  622. }
  623. //根据传入订单,给积分总量++
  624. public function setPointByOrder(Order $order){
  625. if (empty($order) || empty($order->params)){
  626. throw new \Exception("订单错误!");
  627. }
  628. $pointsArr=unserialize($order->params);
  629. $points=$pointsArr["points"];
  630. $this->memberPointRepository->reportDeal($order->uid,$order->utype,1,$points);
  631. }
  632. /**
  633. * @param PayOrder $payOrder
  634. */
  635. public function incrementSave(PayOrder $payOrder)
  636. {
  637. $trade_no = $payOrder->trade_no;
  638. $data = [
  639. 'is_pay'=>2,
  640. 'payment_time'=>time(),
  641. ];
  642. if ($payOrder->attch) {
  643. $data['notes'] = $payOrder->attch;
  644. }
  645. $this->orderRepository->updateStatus($trade_no, $data);
  646. $order = $this->orderRepository->getOneOder($trade_no);
  647. $user = $this->companyRepository->getCompanyInfo(['id'=>$order->uid]);
  648. if ($user->mobile) {
  649. $this->smsService->sendSms($user->mobile, Smser::TEMPLATE_SMS_ORDER, ['sitename'=>config('aix.system.site.site.site_name'),'oid'=>$trade_no,'paymenttpye'=>$order->payment_cn,'amount'=>$order->pay_amount,'sitedomain'=>config('aix.system.site.site.site_domain')]);
  650. }
  651. $this->orderPaidResumeIncrement($order, $user);
  652. }
  653. public function orderPaidResumeIncrement($order, $user)
  654. {
  655. //处理支付方式
  656. switch ($order->pay_type) {
  657. case 1:
  658. $paytype = '积分抵扣';
  659. break;
  660. case 2:
  661. $paytype = $order->payment_cn;
  662. break;
  663. case 3:
  664. $paytype = $order->payment_cn.'+积分抵扣';
  665. break;
  666. }
  667. //会员日志 - 添加创建增值服务订单
  668. $this->memberLogRepository->createLog($user, 9001, array($order->oid,$paytype,''));
  669. //如果有积分抵扣 - 修改会员积分信息
  670. if ($order->pay_points > 0) {
  671. $p_rst = $this->memberPointRepository->reportDeal($user->id, $user->utype, 2, $order->pay_points);
  672. if ($p_rst) {
  673. //添加会员积分操作日志
  674. $stime = date('Y-m-d H:i:s', time());
  675. $handsel['uid'] = $user->id;
  676. $handsel['utype'] = $user->utype;
  677. $handsel['htype'] = '';
  678. $handsel['htype_cn'] = $order->service_name;
  679. $handsel['operate'] = 2;
  680. $handsel['points'] = $order->pay_points;
  681. $this->memberHandselRepository->create($handsel);
  682. }
  683. }
  684. //修改会员套餐相关字段
  685. try{
  686. $setmeal_increment = $this->setmealIncrementsRepository->getIncrementCache('', $order->setmeal);
  687. if ($setmeal_increment->cat == 'auto_refresh_jobs') { //智能刷新
  688. $params = unserialize($order->params);
  689. $days = $params['days'];
  690. $nowtime = time();
  691. for ($i=0; $i < $days*4; $i++) {
  692. $timespace = 3600*6*$i;
  693. $this->queueAutoRefreshRepository->create(['uid'=>$user->id,'pid'=>$params['jobs_id'],'type'=>1,'refreshtime'=>$nowtime+$timespace]);
  694. }
  695. } elseif ($setmeal_increment->cat =='sms') { //增加短信
  696. $this->companyRepository->updataSmsNum($user->id, 1, $setmeal_increment->value);
  697. event_search_update(Company::class, (string)$user->id, 'update');
  698. } elseif ($setmeal_increment->cat =='stick' || $setmeal_increment->cat =='emergency') { //职位置顶和紧急
  699. $params = unserialize($order->params);
  700. $data['jobid'] = $params['jobs_id'];
  701. $data['starttime'] = $params['starttime'];
  702. $data['endtime'] = $params['endtime'];
  703. $data['days'] = $params['days'];
  704. if ($setmeal_increment->cat =='stick') {
  705. $data['ptype'] = 1;
  706. } else {
  707. $data['ptype'] = 2;
  708. }
  709. $data['companyid'] = $user->id;
  710. $this->promotionRepository->create($data);
  711. $stickEmergency[$setmeal_increment->cat] = 1;
  712. if ($data['ptype'] == 1) {
  713. $stickEmergency['deadline'] = $data['starttime'];
  714. }
  715. $this->jobsRepository->update($stickEmergency, $params['jobs_id']);
  716. event_search_update(Jobs::class, (string)$params['jobs_id'], 'update');
  717. } else { //职位、招聘会、简历
  718. if ($setmeal_increment->cat == 'jobs') {
  719. $setmeal_increment->cat = 'jobs_meanwhile';
  720. }
  721. $this->memberSetmealRepository->incrementData(array('uid'=>$user->id), $setmeal_increment->cat, $setmeal_increment->value);
  722. }
  723. }catch (\Exception $e){
  724. }
  725. $order_type=$order->order_type; //订单类型
  726. $order_params=unserialize($order->params);Log::info($order_params);
  727. Log::info($order_type);
  728. switch ($order_type){
  729. case "12":
  730. case "13":
  731. { //智能刷新
  732. $this->jobsRepository->jobsRefresh($order_params['jobs_id']);
  733. break;
  734. }
  735. }
  736. //会员日志 - 开通服务
  737. // $this->memberLogRepository->createLog($user, 9002, array($order->service_name,$paytype,''));
  738. }
  739. public function orderPaid(PayOrder $payOrder)
  740. {
  741. //修改订单表中状态和支付时间
  742. $trade_no = $payOrder->trade_no;
  743. $this->orderRepository->updateStatus($trade_no, ['is_pay'=>2, 'payment_time'=>time()]);
  744. $order = $this->orderRepository->getOneOder($trade_no); //获取订单信息
  745. //会员信息
  746. if ($order->utype == 1) {
  747. $user = $this->companyRepository->getCompanyInfo(array('id'=>$order->uid,'utype'=>1));
  748. $email_url = route('com.index');
  749. } else {
  750. $user = $this->memberRepository->getMemberById($order->uid);
  751. $email_url = route('person.index');
  752. }
  753. $email = $user->email;
  754. if ($order->amount && $email && $user->email_audit == 1) {
  755. $emailService = new EmailService;
  756. $emailService->sendMail($email, 'mail_payment', [], ['sitedomain'=>$email_url]);
  757. }
  758. if ($order->order_type == 6) {
  759. $this->orderPaidResumeIncrement($order, $user);
  760. } elseif ($order->order_type == 14) {
  761. $this->orderPaidSingleResumeDownload($order, $user);
  762. }
  763. }
  764. public function orderPaidSingleResumeDownload($order, $user)
  765. {
  766. $params = unserialize($order->params);
  767. $uid = $order->uid;
  768. $deductible = $order->pay_points;
  769. $resume_id = $params['resume_id'];
  770. //有抵扣积分 - 修改会员积分、添加会员积分操作日志
  771. if ($deductible>0) {
  772. $p_rst = $this->memberPointRepository->reportDeal($user->id, $user->utype, 2, $deductible);
  773. if ($p_rst) {
  774. $stime = date('Y-m-d H:i:s', time());
  775. $handsel['uid'] = $user->id;
  776. $handsel['utype'] = $user->utype;
  777. $handsel['htype'] = '';
  778. $handsel['htype_cn'] = $order->service_name;
  779. $handsel['operate'] = 2;
  780. $handsel['points'] = $deductible;
  781. $this->memberHandselRepository->create($handsel);
  782. }
  783. }
  784. //获取企业信息
  785. $company = $this->companyRepository->getCompanyInfo(array('id'=>$user->id));
  786. //循环操作简历 - 添加简历下载记录
  787. $resume_arr = $this->resumeRepository->getResumesWithInfo($resume_id);
  788. if ($resume_arr->toArray()) {
  789. foreach ($resume_arr as $key => $value) {
  790. $addarr = array();
  791. $memberInfo = $value->memberInfos;
  792. $addarr['resume_id'] = $value->id;
  793. if ($memberInfo->display_name == "2") {
  794. $addarr['resume_name'] = "N" . str_pad($value->id, 7, "0", STR_PAD_LEFT);
  795. } elseif ($memberInfo->display_name == "3") {
  796. if ($memberInfo->sex == 1) {
  797. $addarr['resume_name'] = cut_str($memberInfo->realname, 1, 0, "先生");
  798. } elseif ($memberInfo->sex == 2) {
  799. $addarr['resume_name'] = cut_str($memberInfo->realname, 1, 0, "女士");
  800. }
  801. } else {
  802. $addarr['resume_name'] = $memberInfo->realname;
  803. }
  804. $addarr["resume_uid"]=$value->uid;
  805. $addarr["company_uid"]=$company->id;
  806. $addarr["company_name"]=$company->companyname;
  807. $addarr['down_addtime'] = time();
  808. $addarr['is_reply'] = 0;
  809. $info = $this->companyDownResumeRepository->create($addarr);
  810. $this->membersSetmealLogRepository->createLog($user,"下载了简历【".$addarr['resume_name']."】");
  811. }
  812. }
  813. //添加会员操作日志 - 开通服务
  814. if ($deductible>0) {
  815. $log_payment = $order->payment_cn.'+积分抵扣';
  816. } else {
  817. $log_payment = $order->payment_cn;
  818. }
  819. // $this->memberLogRepository->createLog($user, '9002', array($order->service_name,$log_payment,''));
  820. }
  821. public function incrementTplUpdate(PayOrder $payOrder)
  822. {
  823. $trade_no = $payOrder->trade_no;
  824. $order = Order::where(['oid'=>$trade_no])->first();
  825. $order->is_pay = 2;
  826. $order->payment_time = time();
  827. $order->save();
  828. $input = json_decode($order->charge);
  829. $tpl = Tpl::find($input->project_id);
  830. $points = $input->is_deductible ? $input->deductible : 0;
  831. CompanyTpl::create(['uid'=>$input->uid,'tplid'=>$input->project_id]);
  832. MembersHandsel::create(
  833. [
  834. 'uid'=>$input->uid,
  835. 'utype'=>$input->utype,
  836. 'htype'=>'increment_tpl',
  837. 'htype_cn'=>'购买企业模板:'.$tpl->name,
  838. 'operate'=>2,
  839. 'points'=>$points
  840. ]
  841. );
  842. if ($points) {
  843. MembersPoint::where(['uid'=>$input->uid,'utype'=>$input->utype])->decrement('points', $points);
  844. }
  845. return;
  846. }
  847. public function incrementPersonTplUpdate(PayOrder $payOrder)
  848. {
  849. $trade_no = $payOrder->trade_no;
  850. $order = Order::where(['oid'=>$trade_no])->first();
  851. $order->is_pay = 2;
  852. $order->payment_time = time();
  853. $order->save();
  854. $input = json_decode($order->charge);
  855. $tpl = Tpl::find($input->tplid);
  856. PersonTpl::create(['uid'=>$input->uid,'tplid'=>$input->tplid]);
  857. MembersHandsel::create(
  858. [
  859. 'uid'=>$input->uid,
  860. 'utype'=>$input->utype,
  861. 'htype'=>'increment_tpl',
  862. 'htype_cn'=>'购买简历模板:'.$tpl->name,
  863. 'operate'=>2,
  864. 'points'=>$input->points,
  865. ]
  866. );
  867. return;
  868. }
  869. public function canselOrder()
  870. {
  871. $order_id = [];
  872. $res = $this->orderRepository->canselOrder();
  873. if($res){
  874. $order_id = array_column($res,'id');
  875. }
  876. return $order_id;
  877. }
  878. }