ServiceController.php 86 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: wuzhenke
  5. * Date: 2018/11/16
  6. * Time: 11:17
  7. */
  8. namespace App\Http\Controllers\Mobile\Company;
  9. use Aix\Pay\Data\PayOrder;
  10. use App\Exceptions\ResponseException;
  11. use App\Http\Controllers\Mobile\MobileBaseController;
  12. use App\Models\Jobs;
  13. use App\Repositories\JobsRepository;
  14. use App\Repositories\MemberHandselRepository;
  15. use App\Repositories\MemberLogRepository;
  16. use App\Repositories\MembersChargeLogRepository;
  17. use App\Repositories\PromotionRepository;
  18. use App\Repositories\QueueAutoRefreshRepository;
  19. use App\Repositories\SetmealIncrementsRepository;
  20. use App\Repositories\TaskLogRepository;
  21. use App\Services\Common\MembersSetmealService;
  22. use App\Services\Common\OrderService;
  23. use App\Services\Common\PaymentService;
  24. use App\Services\Common\PayService;
  25. use App\Services\Common\SetmealIncrementsService;
  26. use App\Services\Common\SetmealService;
  27. use App\Services\Company\CompanyService;
  28. use App\Services\Company\ServiceService;
  29. use App\Services\Person\MemberPointService;
  30. use Illuminate\Http\Request;
  31. use Illuminate\Support\Facades\DB;
  32. use Illuminate\Support\Facades\Log;
  33. use SimpleSoftwareIO\QrCode\Facades\QrCode;
  34. class ServiceController extends MobileBaseController
  35. {
  36. protected $serviceService;
  37. protected $membersSetmealService;
  38. protected $payService;
  39. protected $setmealService;
  40. protected $memberPointService;
  41. protected $orderService;
  42. protected $memberLogRepository;
  43. protected $memberHandselRepository;
  44. protected $membersChargeLogRepository;
  45. protected $paymentService;
  46. protected $setmealIncrementsService;
  47. protected $companyService;
  48. protected $queueAutoRefreshRepository;
  49. protected $jobsRepository;
  50. protected $promotionRepository;
  51. protected $setmealIncrementsRepository;
  52. protected $taskLogRepository;
  53. /**
  54. * ServiceController constructor.
  55. * @param $serviceService
  56. * @param $membersSetmealService
  57. * @param $payService
  58. * @param $setmealService
  59. * @param $memberPointService
  60. * @param $orderService
  61. * @param $memberLogRepository
  62. * @param $memberHandselRepository
  63. * @param $membersChargeLogRepository
  64. * @param $paymentService
  65. * @param $setmealIncrementsService
  66. * @param $companyService
  67. * @param $queueAutoRefreshRepository
  68. * @param $jobsRepository
  69. * @param $promotionRepository
  70. * @param $setmealIncrementsRepository
  71. * @param $taskLogRepository
  72. */
  73. public function __construct(ServiceService $serviceService,TaskLogRepository $taskLogRepository, SetmealIncrementsRepository $setmealIncrementsRepository, PromotionRepository $promotionRepository, JobsRepository $jobsRepository, QueueAutoRefreshRepository $queueAutoRefreshRepository, CompanyService $companyService, SetmealIncrementsService $setmealIncrementsService, PaymentService $paymentService, MembersChargeLogRepository $membersChargeLogRepository, MemberHandselRepository $memberHandselRepository, MemberLogRepository $memberLogRepository, OrderService $orderService, MemberPointService $memberPointService, MembersSetmealService $membersSetmealService, PayService $payService, SetmealService $setmealService)
  74. {
  75. $this->serviceService = $serviceService;
  76. $this->membersSetmealService = $membersSetmealService;
  77. $this->payService = $payService;
  78. $this->setmealService = $setmealService;
  79. $this->memberPointService = $memberPointService;
  80. $this->orderService = $orderService;
  81. $this->memberLogRepository = $memberLogRepository;
  82. $this->memberHandselRepository = $memberHandselRepository;
  83. $this->membersChargeLogRepository = $membersChargeLogRepository;
  84. $this->paymentService = $paymentService;
  85. $this->setmealIncrementsService = $setmealIncrementsService;
  86. $this->companyService = $companyService;
  87. $this->queueAutoRefreshRepository = $queueAutoRefreshRepository;
  88. $this->jobsRepository = $jobsRepository;
  89. $this->promotionRepository = $promotionRepository;
  90. $this->setmealIncrementsRepository = $setmealIncrementsRepository;
  91. $this->taskLogRepository = $taskLogRepository;
  92. }
  93. /**我的套餐
  94. * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
  95. */
  96. public function index()
  97. {
  98. $user = auth('web-company')->user();//企业信息
  99. $res = $this->serviceService->index($user);
  100. return view('mobile.app.company.service.setmeal.index', $res);
  101. }
  102. public function setmealDetail(Request $request)
  103. {
  104. $user = auth('web-company')->user();//企业信息
  105. $res = $this->serviceService->setmealDetail($request->all(), $user);
  106. if ($request->ajax()) {
  107. if ($res['setmealDetail']->lastPage() < $res['setmealDetail']->currentPage()) {
  108. return response()->json(['status'=>0]);
  109. }
  110. return response()->json(['status'=>1,'data'=>view('mobile.app.company.service.setmeal.ajax.ajax_setmeal_detail', ['setmealDetail'=>$res['setmealDetail']])->render()]);
  111. }
  112. $res['wap_title']='我的套餐';
  113. return view('mobile.app.company.service.setmeal.setmeal_detail', $res);
  114. }
  115. /**积分任务
  116. * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
  117. */
  118. public function points()
  119. {
  120. $user = auth('web-company')->user();
  121. $myPoints = $this->memberPointService->getPoints($user->id, 1);
  122. $signCount = $this->taskLogRepository->getTaskLogCount($user->id, 18, $user->utype);
  123. $res = [
  124. 'myPoints' =>$myPoints,
  125. 'signCount' =>$signCount,
  126. 'wap_title'=>'我的积分'
  127. ];
  128. return view('mobile.app.company.service.points.index', $res);
  129. }
  130. public function pointsTask()
  131. {
  132. $user = auth('web-company')->user();
  133. $res = $this->serviceService->points($user, 1);
  134. $res['wap_title'] ='积分任务';
  135. return view('mobile.app.company.service.points.points_task', $res);
  136. }
  137. /**积分明细
  138. * @param Request $request
  139. * @return \Illuminate\Contracts\View\Factory|\Illuminate\Http\JsonResponse|\Illuminate\View\View
  140. * @throws \Throwable
  141. */
  142. public function pointsDetail(Request $request)
  143. {
  144. $user = auth('web-company')->user();
  145. $type = $request->type?$request->type:1;
  146. $res = $this->serviceService->pointsDetail($type, $user);
  147. if ($request->ajax()) {
  148. if ($res['content']->lastPage() < $res['content']->currentPage()) {
  149. return response()->json(['status'=>0]);
  150. }
  151. return response()->json(['status'=>1,'data'=>view('mobile.app.company.service.points.ajax.ajax_points_list', ['content'=>$res['content'],'type'=>$res['type']])->render()]);
  152. }
  153. $res['wap_title']='积分明细';
  154. return view('mobile.app.company.service.points.points_list', $res);
  155. }
  156. /**套餐升级
  157. * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
  158. */
  159. public function setmealAdd()
  160. {
  161. $user = auth('web-company')->user();
  162. $setmeal = $this->serviceService->setmealAddMobile($user);
  163. $setmeal['wap_title'] = '套餐升级';
  164. if (request()->ajax()) {
  165. return response()->json(['status'=>1,'data'=>$setmeal]);
  166. }
  167. return view('mobile.app.company.service.setmeal.setmeal_add', $setmeal);
  168. }
  169. /**套餐弹窗
  170. * @return \Illuminate\Http\JsonResponse
  171. * @throws \Throwable
  172. */
  173. public function paySetmeal()
  174. {
  175. $user = auth('web-company')->user();
  176. $mysetmeal = $this->membersSetmealService->getSetmealByUid($user->id, $user->utype);
  177. if (config('aix.companyset.setmeal_com.setmeal_com_set.is_superposition') == 0 && config('aix.companyset.setmeal_com.setmeal_com_set.is_superposition_time') == 0) { //项目和时间都不叠加
  178. $tip = '您当前是【' . $mysetmeal->setmeal_name . '】重新开通套餐<br /><span class="font_yellow">1. 原有套餐资源以新开套餐资源为准;</span><br /><span class="font_yellow">2. 原有会员服务时长以新开套餐时长为准;</span><br />确定要重新开通套餐吗?';
  179. } elseif (config('aix.companyset.setmeal_com.setmeal_com_set.is_superposition') == 0 && config('aix.companyset.setmeal_com.setmeal_com_set.is_superposition_time') == 1) { //项目不叠加时间叠加
  180. $tip = '您当前是【' . $mysetmeal->setmeal_name . '】重新开通套餐<br /><span class="font_yellow">您的原套餐资源会被新开通的套餐资源覆盖</span><br />确定要重新开通套餐吗?';
  181. } elseif (config('aix.companyset.setmeal_com.setmeal_com_set.is_superposition') == 1 && config('aix.companyset.setmeal_com.setmeal_com_set.is_superposition_time') == 0) { //项目叠加时间不叠加
  182. $tip = '您当前是【' . $mysetmeal->setmeal_name . '】重新开通套餐<br /><span class="font_yellow">您的会员服务时长将以新开套餐服务时长为准</span><br />确定要重新开通套餐吗?';
  183. } else {
  184. $tip = '您当前是【' . $mysetmeal->setmeal_name . '】重新开通套餐<br /><span class="font_yellow">您的套餐资源和会员时长将叠加</span><br />确定要重新开通套餐吗?';
  185. }
  186. return response()->json(['status' => 1, 'data' => ['html' => view('app.company.ajax.ajax_warning', ['tip' => $tip])->render()]]);
  187. }
  188. /**会员套餐
  189. * @param Request $request
  190. * @return \Illuminate\Http\JsonResponse
  191. * @throws ResponseException
  192. * @throws \Prettus\Validator\Exceptions\ValidatorException
  193. */
  194. public function setmealAddSave(Request $request)
  195. {
  196. $user = auth('web-company')->user();
  197. //检查未处理订单数
  198. $order_pay_type = 1;
  199. $payment_name = $request->input('payment_name', '');
  200. $pay_type = $request->input('pay_type', 'points');
  201. $setmeal_id = $request->input('project_id', 0);
  202. $is_deductible = $request->input('is_deductible', 0);
  203. if ($is_deductible == 0) {
  204. $deductible = 0;
  205. } else {
  206. $deductible = $request->input('deductible', '');
  207. }
  208. $amount = $request->input('amount', '');
  209. if ($amount == 0) {
  210. $pay_type = 'points';
  211. }
  212. if ($setmeal_id == 0) {
  213. return response()->json(['status' => 0, 'msg' => "请选择套餐"]);
  214. }
  215. $setmealInfo = $this->setmealService->getSetmealOne($setmeal_id);//套餐详情
  216. $mypoints = $this->memberPointService->getPoints($user->id, $user->utype);
  217. $amount = $setmealInfo->expense;
  218. $service_need_points = round($amount * config('aix.companyset.points.points_set.payment_rate'));
  219. if (!config('aix.companyset.setmeal_com.setmeal_com_set.setmeal_by_points')) {
  220. $is_deductible = 0;
  221. $deductible = 0;
  222. $pay_type = 'cash';
  223. }
  224. if ($pay_type == 'points') {
  225. DB::beginTransaction();
  226. try {
  227. if ($mypoints->points < $service_need_points) {
  228. throw new \Exception('积分不足,请使用其他方式支付!');
  229. }
  230. $set_setmeal = $this->serviceService->setMembersSetmeal($user, $setmeal_id);
  231. if (!$set_setmeal['status']) {
  232. throw new \Exception($set_setmeal['msg']);
  233. }
  234. $description = '购买服务:' . $setmealInfo->setmeal_name . ';积分支付:' . $service_need_points . "积分";
  235. $order = $this->orderService->addOrder($user, 1, $setmealInfo->expense, 0, $service_need_points, $setmealInfo->setmeal_name, 'points', '积分支付', $description, 2, 0, $setmeal_id, time(), '');
  236. if (!$order) {
  237. throw new \Exception('生成订单失败!');
  238. }
  239. $oid = $this->payService->getTradeNo($order->id);//订单号
  240. if (!$this->serviceService->updateOid($order->id, $oid)) {
  241. throw new \Exception('生成订单号失败!');
  242. }
  243. //生成会员日志
  244. $this->memberLogRepository->createLog($user, 9001, [$oid, '积分支付','']);
  245. if (false === $p_rst = $this->memberPointService->reportDeal($user->id, $user->utype, 2, $service_need_points)) {
  246. throw new \Exception('修改会员积分失败!');
  247. } else {
  248. $handsel['uid'] = $user->id;
  249. $handsel['utype'] = $user->utype;
  250. $handsel['htype'] = 'points_buy_setmeal';
  251. $handsel['htype_cn'] = '购买增值包:' . $setmealInfo->setmeal_name;
  252. $handsel['operate'] = 2;
  253. $handsel['points'] = $service_need_points;
  254. if (!$this->memberHandselRepository->addNew($handsel)) { //添加积分操作记录
  255. throw new \Exception('添加积分操作记录失败!');
  256. }
  257. $notes = date('Y-m-d H:i:s', time()) . "通过积分兑换成功开通{ $setmealInfo->setmeal_name}";
  258. }
  259. DB::commit();
  260. } catch (\Exception $e) {
  261. DB::rollback();
  262. return response()->json(['status' => 0, 'msg' => $e->getMessage()]);
  263. }
  264. return response()->json(['status' => 1, 'data' => $oid]);
  265. } else {
  266. if ($is_deductible == 1 && $mypoints->points < $deductible) {
  267. throw new ResponseException('积分不足,请使用其他方式支付!');
  268. }
  269. if ($is_deductible == 1 && $deductible > 0) {
  270. $description = $setmealInfo->setmeal_name . ';积分抵扣:' . $deductible . '积分';
  271. }
  272. //移动端啥折扣都不打 🤪
  273. $service_need_cash=$setmealInfo->expense;
  274. $points_price=round($deductible/config('aix.companyset.points.points_set.payment_rate'),2); //积分抵扣的钱
  275. $service_need_cash-=$points_price;//都需要减去积分抵扣的钱
  276. $service_need_cash=round($service_need_cash,2);
  277. $paysetarr['ordtotal_fee'] = $service_need_cash;
  278. $payment = $this->paymentService->returnPayment($payment_name);
  279. $description = '购买服务:' . $setmealInfo->setmeal_name . ';' . $payment->name . $paysetarr['ordtotal_fee'];
  280. if ($deductible > 0 && $is_deductible == 1) {
  281. $description .= ';积分支付:' . $deductible . '积分';
  282. }
  283. $params = [
  284. 'setmeal_id'=>$setmealInfo->id,
  285. 'setmeal_name'=>$setmealInfo->setmeal_name,
  286. 'company_id'=>$user->id,
  287. 'utype'=>$user->utype,
  288. 'companyname'=>$user->companyname,
  289. 'amount'=>$paysetarr['ordtotal_fee'],
  290. 'points'=>$deductible,
  291. 'payment'=>$payment_name,
  292. 'username'=>$user->username,
  293. 'subsite_id'=>$user->subsite_id,
  294. ];
  295. $insert_id = $this->orderService->addOrder($user, 1, $setmealInfo->expense, $paysetarr['ordtotal_fee'], $deductible, $setmealInfo->setmeal_name, $payment_name, $payment->name, $description, 1, $deductible, $setmeal_id, 0, serialize($params));
  296. $tradeNo = $this->payService->getTradeNo($insert_id->id);
  297. if (!$this->serviceService->updateOid($insert_id->id, $tradeNo)) {
  298. throw new ResponseException('生成订单号失败');
  299. }
  300. $payOrder = new PayOrder();
  301. $payOrder->trade_no = $tradeNo;
  302. $payOrder->subject = '购买' . $setmealInfo->setmeal_name;
  303. $payOrder->detail = $description;
  304. $payOrder->price = $paysetarr['ordtotal_fee'] ;
  305. $payOrder->callback = "App\Services\Common\OrderService.updateCompany";
  306. if ($payment_name == 'wechat') {
  307. if (!is_weixin()) {
  308. $type = 'wap';
  309. } else {
  310. //预留
  311. $type="official";
  312. $payOrder->openid = $this->payService->getPayOpenid();
  313. $payOrder->return_url = route('mobile.firm.service.order.index');
  314. $result = $this->payService->pay($payment_name, $type, $payOrder);
  315. return response()->json(['status'=>1, 'msg' => $result]);
  316. }
  317. $payOrder->return_url=route('mobile.common.orderWechat', ['oid'=>$payOrder->trade_no]);
  318. } else {
  319. $type = 'wap';
  320. $payOrder->return_url=route('mobile.firm.service.order.index');
  321. }
  322. return $this->payService->pay($payment_name, $type, $payOrder);
  323. }
  324. }
  325. /**订单状态
  326. * @param Request $request
  327. * @return \Illuminate\Http\JsonResponse
  328. */
  329. public function checkOrderStatus(Request $request)
  330. {
  331. $tradeNo = $request->tradeNo;
  332. if (!$tradeNo) {
  333. return response()->json(['status' => 0, 'msg' => "订单号错误!"]);
  334. }
  335. return $this->orderService->getOrderbyTradeNo($tradeNo);
  336. }
  337. /**
  338. * @return \Illuminate\Http\JsonResponse
  339. * @throws \Throwable
  340. */
  341. public function paySetmealStatus()
  342. {
  343. $tip = '请在新打开的支付页面完成付款';
  344. $description = '付款完成前请不要关闭此窗口,付款后请根据您的情况点击下面的按钮,如果在支付中遇到问题请到<a target="_blank" href="">帮助中心</a>。';
  345. return response()->json(['status' => 1, 'html' => view('app.company.ajax.ajax_warning', ['tip' => $tip, 'description' => $description])->render()]);
  346. }
  347. /**增值服务
  348. * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
  349. */
  350. public function increment()
  351. {
  352. $res = $this->serviceService->increment(auth('web-company')->user());
  353. $res['wap_title'] = '增值服务';
  354. return view('mobile.app.company.service.increment.index', $res);
  355. }
  356. /**各增值包
  357. * @param Request $request
  358. * @param $cat
  359. * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
  360. * @throws ResponseException
  361. */
  362. public function incrementAdd(Request $request, $cat)
  363. {
  364. switch ($cat) {
  365. case 'download_resume':
  366. case 'sms':
  367. case 'jobs':
  368. case 'jobfair_num':
  369. $display_tpl = "resume_sms";
  370. break;
  371. case 'stick':
  372. case 'emergency':
  373. $display_tpl = 'stick_emergency';
  374. break;
  375. case 'tpl':
  376. $display_tpl = 'tpl';
  377. break;
  378. case 'auto_refresh_jobs':
  379. $display_tpl = 'auto_refresh_jobs';
  380. break;
  381. default:
  382. throw new ResponseException('参数错误');
  383. break;
  384. }
  385. $res = $this->serviceService->incrementAdd($cat, $request->all());
  386. return view("app.company.increment.increment_add_{$display_tpl}", $res);
  387. }
  388. /**增值服务 === 提示框内容
  389. * @return \Illuminate\Http\JsonResponse
  390. * @throws \Throwable
  391. */
  392. public function confirmPayIncrement()
  393. {
  394. $user = auth('web-company')->user();
  395. $res = $this->serviceService->confirmPayIncrement($user);
  396. return response()->json(['status'=>1, 'msg'=>'success','data'=>['html'=>view('app.company.ajax.ajax_warning', $res)->render()]]);
  397. }
  398. /**增值服务保存
  399. * @param Request $request
  400. * @return \Illuminate\Http\JsonResponse
  401. */
  402. public function incrementPaySave(Request $request)
  403. {
  404. $service_type = $request->input('service_type', '');
  405. if (!$service_type) {
  406. return response()->json(['status'=>0,'msg'=>"参数错误"]);
  407. }
  408. switch ($service_type) {
  409. case 'download_resume':
  410. $fun = 'DownloadResume';
  411. break;
  412. case 'sms':
  413. $fun = 'Sms';
  414. break;
  415. case 'jobs':
  416. $fun = 'Jobs';
  417. break;
  418. case 'jobfair_num':
  419. $fun = 'JobfairNum';
  420. break;
  421. case 'stick':
  422. $fun = 'Stick';
  423. break;
  424. case 'emergency':
  425. $fun = 'Emergency';
  426. break;
  427. case 'tpl':
  428. $fun = 'Tpl';
  429. break;
  430. case 'auto_refresh_jobs':
  431. $fun = 'AutoRefreshJobs';
  432. break;
  433. }
  434. $func_name = "increment".$fun;
  435. $incrment_arr = ['download_resume','jobs','jobfair_num','sms','stick','emergency','tpl','auto_refresh_jobs'];
  436. if (!in_array($service_type, $incrment_arr)) {
  437. return response()->json(['status'=>0,'msg'=>"参数错误"]);
  438. } else {
  439. return $this->$func_name($request);
  440. }
  441. }
  442. /**简历包
  443. * @param $request
  444. * @return array|\Illuminate\Http\JsonResponse
  445. * @throws ResponseException
  446. * @throws \Prettus\Validator\Exceptions\ValidatorException
  447. */
  448. protected function incrementDownloadResume($request)
  449. {
  450. $cat = $request->input('service_type', 'download_resume');
  451. $order_pay_type = 6;
  452. $payment_name = $request->input('payment_name', '');
  453. $pay_type = $request->input('pay_type', 'points');
  454. $project_id = $request->input('project_id', 0);
  455. $is_deductible = $request->input('is_deductible', 0);
  456. if ($is_deductible==0) {
  457. $deductible = 0;
  458. } else {
  459. $deductible = $request->input('deductible', 0);
  460. }
  461. $amount = floatval($request->input('amount', 0));
  462. if ($amount==0) {
  463. $pay_type = 'points';
  464. }
  465. if ($project_id==0) {
  466. return response()->json(['status'=>0, 'msg' => '请选择增值包套餐!']);
  467. }
  468. $user = auth('web-company')->user();
  469. $my_setmeal = $this->membersSetmealService->getUserSetmeal($user, '1'); //会员套餐信息
  470. $my_point = $this->memberPointService->getPoints($user->id, 1); //获取会员积分信息
  471. $increment_info = $this->setmealIncrementsService->getIncrement($project_id); //获取所选简历增值包信息
  472. $my_discount = $this->setmealIncrementsService->getIncrementDiscountByArray($cat, $my_setmeal); //套餐折扣
  473. $points_price=round($deductible/config('aix.companyset.points.points_set.payment_rate'),2); //积分抵扣的钱
  474. /**
  475. * 修改吴正科的DB 写法
  476. * 没有折扣价格怎么就变成了原价了,积分不要吗
  477. * 还有个在配置文件中的购买增值服务优惠
  478. */
  479. if ($pay_type=='points') { //积分支付,就是算出原价*固定折扣*套餐折扣
  480. $mobile_discount=config("aix.mobile.mobile_set.mobile_set.mobile_setmeal_increment_discount_value")/100;//移动段固定折扣
  481. if ($mobile_discount==0){$mobile_discount=1;} //没有配置,就为1 除了是不变的
  482. if ($my_discount > 0){ //如果有折扣
  483. //先打自己套餐的折扣,再打固定的折扣
  484. $service_need_cash=($increment_info->price*$my_discount/10)*$mobile_discount;
  485. }else{
  486. $service_need_cash=($increment_info->price)*$mobile_discount; //增值包套餐金额
  487. }
  488. $service_need_points = round($service_need_cash*config('aix.companyset.points.points_set.payment_rate')); //增值包套餐所需积分
  489. if ($my_point->points < $service_need_points) {
  490. return response()->json(['status'=>0, 'msg' =>'积分不足,请使用其他方式支付!']);
  491. }
  492. //操作事务开始
  493. DB::beginTransaction();
  494. try {
  495. //会员套餐添加增值包数量
  496. $setmeal_rst = $this->membersSetmealService->actionUserSetmeal(array('uid'=>$user->id, 'utype'=>1), $cat, 1, $increment_info->value);
  497. if (!$setmeal_rst) {
  498. throw new \Exception('修改会员套餐失败!');
  499. }
  500. $description1 = '购买服务:'.$increment_info->name.';积分支付:'.$service_need_points.'积分';
  501. $stime = time();
  502. //添加订单信息
  503. $order = $this->orderService->addOrder($user, $order_pay_type, $service_need_cash, 0, $service_need_points, $increment_info->name, $payment_name, '积分支付', $description1, 2, 0, $project_id, $stime, '', '专享'.$my_discount.'折优惠');
  504. if (!$order) {
  505. throw new \Exception('生成订单失败!');
  506. }
  507. $oid = $this->payService->getTradeNo($order->id);//订单号
  508. if (!$this->serviceService->updateOid($order->id, $oid)) {
  509. throw new \Exception('生成订单号失败!');
  510. }
  511. //会员日志:添加创建增值服务订单日志
  512. $log_rst1 = $this->serviceService->writeMembersLog($user, '9001', [$oid,'积分兑换','']);
  513. //修改会员积分
  514. if (false === $p_rst = $this->memberPointService->reportDeal($user->id, $user->utype, 2, $service_need_points)) {
  515. throw new \Exception('修改会员积分失败!');
  516. } else {
  517. $handsel['uid'] = $user->id;
  518. $handsel['utype'] = $user->utype;
  519. $handsel['htype'] = 'increment_download_resume';
  520. $handsel['htype_cn'] = '购买增值包:' . $increment_info->name;
  521. $handsel['operate'] = 2;
  522. $handsel['points'] = $service_need_points;
  523. if (!$this->memberHandselRepository->addNew($handsel)) { //添加积分操作记录
  524. throw new \Exception('添加积分操作记录失败!');
  525. }
  526. $notes = date('Y-m-d H:i:s', time()) . "通过积分兑换成功开通{ $increment_info->name}";
  527. }
  528. DB::commit();
  529. } catch (\Exception $e) {
  530. DB::rollback();
  531. return response()->json(['status'=>0, 'msg' => $e->getMessage()]);
  532. }
  533. return response()->json(['status'=>1, 'msg' => '积分兑换成功!','data'=>$oid]);
  534. } else {
  535. if ($is_deductible==1 && $my_point->points<$deductible) {
  536. return response()->json(['status'=>1, 'msg' => '积分不足,请使用其他方式支付!']);
  537. }
  538. return $this->callCashPay($my_setmeal, $my_point, $increment_info, $order_pay_type, $payment_name, "", $is_deductible, $deductible, '', '', 0, $project_id,$my_discount);
  539. }
  540. }
  541. /**短信包
  542. * @param $request
  543. * @return array|\Illuminate\Http\JsonResponse
  544. * @throws ResponseException
  545. * @throws \Prettus\Validator\Exceptions\ValidatorException
  546. */
  547. protected function incrementSms($request)
  548. {
  549. $cat = $request->input('service_type', 'sms');
  550. $order_pay_type = 7;
  551. $payment_name = $request->input('payment_name', '');
  552. $pay_type = $request->input('pay_type', 'points');
  553. $project_id = $request->input('project_id', 0);
  554. $is_deductible = $request->input('is_deductible', 0);
  555. if ($is_deductible==0) {
  556. $deductible = 0;
  557. } else {
  558. $deductible = $request->input('deductible', 0);
  559. }
  560. $amount = floatval($request->input('amount', 0.0));
  561. if ($amount==0) {
  562. $pay_type = 'points';
  563. }
  564. if ($project_id==0) {
  565. return response()->json(['status'=>0, 'msg' => '请选择增值包套餐!']);
  566. }
  567. $user = auth('web-company')->user();
  568. $my_setmeal = $this->membersSetmealService->getUserSetmeal($user, '1'); //会员套餐信息
  569. $my_point = $this->memberPointService->getPoints($user->id, 1); //获取会员积分信息
  570. $increment_info = $this->setmealIncrementsService->getIncrement($project_id); //获取所选简历增值包信息
  571. $my_discount = $this->setmealIncrementsService->getIncrementDiscountByArray($cat, $my_setmeal); //套餐折扣
  572. $service_need_cash = $my_discount > 0 ?round($increment_info->price*$my_discount/10, 2):$increment_info->price; //增值包套餐金额
  573. $points_price=round($deductible/config('aix.companyset.points.points_set.payment_rate'),2); //积分抵扣的钱
  574. if ($pay_type=='points') { //积分支付
  575. $mobile_discount=config("aix.mobile.mobile_set.mobile_set.mobile_setmeal_increment_discount_value")/100;//移动段固定折扣
  576. if ($mobile_discount==0){$mobile_discount=1;} //没有配置,就为1 除了是不变的
  577. if ($my_discount > 0){ //如果有折扣
  578. //先打自己套餐的折扣,再打固定的折扣
  579. $service_need_cash=($increment_info->price*$my_discount/10)*$mobile_discount;
  580. }else{
  581. $service_need_cash=($increment_info->price)*$mobile_discount; //增值包套餐金额
  582. }
  583. $service_need_points = round($service_need_cash*config('aix.companyset.points.points_set.payment_rate')); //增值包套餐所需积分
  584. if ($my_point->points < $service_need_points) {
  585. return response()->json(['status'=>0, 'msg' => '积分不足,请使用其他方式支付!']);
  586. }
  587. //操作事务开始
  588. DB::beginTransaction();
  589. try {
  590. $companySms = $this->companyService->incSms($user->id, 1, $increment_info->value);
  591. if (!$companySms) {
  592. throw new \Exception('会员短信数量增加失败!');
  593. }
  594. $description1 = '购买服务:'.$increment_info->name.';积分支付:'.$service_need_points.'积分';
  595. $stime = time();
  596. //添加订单信息
  597. $order = $this->orderService->addOrder($user, $order_pay_type, $service_need_cash, 0, $service_need_points, $increment_info->name, $payment_name, '积分支付', $description1, 2, 0, $project_id, $stime, '', '专享'.$my_discount.'折优惠');
  598. if (!$order) {
  599. throw new \Exception('生成订单失败!');
  600. }
  601. $oid = $this->payService->getTradeNo($order->id);//订单号
  602. if (!$this->serviceService->updateOid($order->id, $oid)) {
  603. throw new \Exception('生成订单号失败!');
  604. }
  605. //会员日志:添加创建增值服务订单日志
  606. $log_rst1 = $this->serviceService->writeMembersLog($user, '9001', [$oid,'积分兑换','']);
  607. //修改会员积分
  608. if (false === $p_rst = $this->memberPointService->reportDeal($user->id, $user->utype, 2, $service_need_points)) {
  609. throw new \Exception('修改会员积分失败!');
  610. } else {
  611. $handsel['uid'] = $user->id;
  612. $handsel['utype'] = $user->utype;
  613. $handsel['htype'] = 'increment_download_resume';
  614. $handsel['htype_cn'] = '购买增值包:' . $increment_info->name;
  615. $handsel['operate'] = 2;
  616. $handsel['points'] = $service_need_points;
  617. if (!$this->memberHandselRepository->addNew($handsel)) { //添加积分操作记录
  618. throw new \Exception('添加积分操作记录失败!');
  619. }
  620. $notes = date('Y-m-d H:i:s', time()) . "通过积分兑换成功开通{ $increment_info->name}";
  621. }
  622. DB::commit();
  623. } catch (\Exception $e) {
  624. DB::rollback();
  625. return array( 'status'=>0, 'msg' => $e->getMessage());
  626. }
  627. return array( 'status'=>1, 'msg' => '积分兑换成功!','data'=>$oid);
  628. } else {
  629. if ($is_deductible==1 && $my_point->points<$deductible) {
  630. return array( 'status'=>0, 'msg' => '积分不足,请使用其他方式支付!');
  631. }
  632. return $this->callCashPay($my_setmeal, $my_point, $increment_info, $order_pay_type, $payment_name, $service_need_cash, $is_deductible, $deductible, '', '', 0, $project_id, $my_discount);
  633. }
  634. }
  635. protected function incrementJobfairNum($request)
  636. {
  637. $cat = $request->input('service_type', 'jobfair_num');
  638. $order_pay_type = 7;
  639. $payment_name = $request->input('payment_name', '');
  640. $pay_type = $request->input('pay_type', 'points');
  641. $project_id = $request->input('project_id', 0);
  642. $is_deductible = $request->input('is_deductible', 0);
  643. if ($is_deductible==0) {
  644. $deductible = 0;
  645. } else {
  646. $deductible = $request->input('deductible', '');
  647. }
  648. $amount = floatval($request->input('amount', ''));
  649. if ($amount==0) {
  650. $pay_type = 'points';
  651. }
  652. if ($project_id==0) {
  653. return response()->json(['status'=>0, 'msg' => '请选择增值包套餐!']);
  654. }
  655. $user = auth('web-company')->user();
  656. $my_setmeal = $this->membersSetmealService->getUserSetmeal($user, '1'); //会员套餐信息
  657. $my_point = $this->memberPointService->getPoints($user->id, 1); //获取会员积分信息
  658. $increment_info = $this->setmealIncrementsService->getIncrement($project_id); //获取所选简历增值包信息
  659. $my_discount = $this->setmealIncrementsService->getIncrementDiscountByArray($cat, $my_setmeal); //套餐折扣
  660. $service_need_cash = $my_discount > 0 ?round($increment_info->price*$my_discount/10, 2):$increment_info->price; //增值包套餐金额
  661. if ($pay_type=='points') { //积分支付
  662. $service_need_points = round($service_need_cash*config('aix.companyset.points.points_set.payment_rate')); //增值包套餐所需积分
  663. if ($my_point->points < $service_need_points) {
  664. return response()->json(['status'=>0, 'msg' => '积分不足,请使用其他方式支付!']);
  665. }
  666. //操作事务开始
  667. DB::beginTransaction();
  668. try {
  669. $companySms = $this->membersSetmealService->actionUserSetmeal($user->id, 'jobfair_num', 1, $increment_info->value);
  670. if (!$companySms) {
  671. throw new \Exception('会员招聘会场次数量增加失败!');
  672. }
  673. $description1 = '购买服务:'.$increment_info->name.';积分支付:'.$service_need_points.'积分';
  674. $stime = time();
  675. //添加订单信息
  676. $order = $this->orderService->addOrder($user, $order_pay_type, $service_need_cash, 0, $service_need_points, $increment_info->name, $payment_name, '积分支付', $description1, 2, 0, $project_id, $stime, '', '专享'.$my_discount.'折优惠');
  677. if (!$order) {
  678. throw new \Exception('生成订单失败!');
  679. }
  680. $oid = $this->payService->getTradeNo($order->id);//订单号
  681. if (!$this->serviceService->updateOid($order->id, $oid)) {
  682. throw new \Exception('生成订单号失败!');
  683. }
  684. //会员日志:添加创建增值服务订单日志
  685. $log_rst1 = $this->serviceService->writeMembersLog($user, '9001', [$oid,'积分兑换','']);
  686. //修改会员积分
  687. if (false === $p_rst = $this->memberPointService->reportDeal($user->id, $user->utype, 2, $service_need_points)) {
  688. throw new \Exception('修改会员积分失败!');
  689. } else {
  690. $handsel['uid'] = $user->id;
  691. $handsel['utype'] = $user->utype;
  692. $handsel['htype'] = 'increment_jobfair_num';
  693. $handsel['htype_cn'] = '购买增值包:' . $increment_info->name;
  694. $handsel['operate'] = 2;
  695. $handsel['points'] = $service_need_points;
  696. if (!$this->memberHandselRepository->addNew($handsel)) { //添加积分操作记录
  697. throw new \Exception('添加积分操作记录失败!');
  698. }
  699. $notes = date('Y-m-d H:i:s', time()) . "通过积分兑换成功开通{ $increment_info->name}";
  700. }
  701. DB::commit();
  702. } catch (\Exception $e) {
  703. DB::rollback();
  704. return array( 'status'=>0, 'msg' => $e->getMessage());
  705. }
  706. return array( 'status'=>1, 'msg' => '积分兑换成功!','data'=>$oid);
  707. } else {
  708. if ($is_deductible==1 && $my_point->points<$deductible) {
  709. return array( 'status'=>0, 'msg' => '积分不足,请使用其他方式支付!');
  710. }
  711. return $this->callCashPay($my_setmeal, $my_point, $increment_info, $order_pay_type, $payment_name, $service_need_cash, $is_deductible, $deductible, '', '', 0, $project_id, '专享'.$my_discount.'折优惠');
  712. }
  713. }
  714. /**购买职位增值包
  715. * @param $request
  716. * @return array|\Illuminate\Http\JsonResponse
  717. * @throws ResponseException
  718. * @throws \Prettus\Validator\Exceptions\ValidatorException
  719. */
  720. protected function incrementJobs($request)
  721. {
  722. $cat = $request->input('service_type', 'jobs');
  723. $order_pay_type = 7;
  724. $payment_name = $request->input('payment_name', '');
  725. $pay_type = $request->input('pay_type', 'points'); //支付类型
  726. $project_id = $request->input('project_id', 0);
  727. $is_deductible = $request->input('is_deductible', 0);
  728. if ($is_deductible==0) {
  729. $deductible = 0;
  730. } else {
  731. $deductible = $request->input('deductible', '');
  732. }
  733. $amount = floatval($request->input('amount', '')); //这个就是前台传来的应该支付的价格
  734. if ($amount==0) { //等于0就是积分支付
  735. $pay_type = 'points';
  736. }
  737. if ($project_id==0) {
  738. return response()->json(['status'=>0, 'msg' => '请选择增值包套餐!']);
  739. }
  740. $user = auth('web-company')->user();
  741. $my_setmeal = $this->membersSetmealService->getUserSetmeal($user, '1'); //会员套餐信息
  742. $my_point = $this->memberPointService->getPoints($user->id, 1); //获取会员积分信息
  743. $increment_info = $this->setmealIncrementsService->getIncrement($project_id); //获取所选简历增值包信息
  744. $my_discount = $this->setmealIncrementsService->getIncrementDiscountByArray($cat, $my_setmeal); //套餐折扣
  745. if ($my_discount > 0){
  746. $service_need_cash=round($increment_info->price*$my_discount/10, 2);
  747. }else{
  748. $service_need_cash=$increment_info->price; //增值包套餐金额
  749. }
  750. if ($pay_type=='points') { //积分支付
  751. $mobile_discount=config("aix.mobile.mobile_set.mobile_set.mobile_setmeal_increment_discount_value")/100;//移动段固定折扣
  752. if ($mobile_discount==0){$mobile_discount=1;} //没有配置,就为1 除了是不变的
  753. if ($my_discount > 0){ //如果有折扣
  754. //先打自己套餐的折扣,再打固定的折扣
  755. $service_need_cash=($increment_info->price*$my_discount/10)*$mobile_discount;
  756. }else{
  757. $service_need_cash=($increment_info->price)*$mobile_discount; //增值包套餐金额
  758. }
  759. $service_need_points = round($service_need_cash*config('aix.companyset.points.points_set.payment_rate')); //增值包套餐所需积分
  760. if ($my_point->points < $service_need_points) {
  761. return response()->json(['status'=>0, 'msg' => '积分不足,请使用其他方式支付!']);
  762. }
  763. //操作事务开始
  764. DB::beginTransaction();
  765. try {
  766. $companySms = $this->membersSetmealService->actionUserSetmeal($user->id, 'jobs_meanwhile', 1, $increment_info->value);
  767. if (!$companySms) {
  768. throw new \Exception('会员可发布职位数量增加失败!');
  769. }
  770. $description1 = '购买服务:'.$increment_info->name.';积分支付:'.$service_need_points.'积分';
  771. $stime = time();
  772. //添加订单信息
  773. $order = $this->orderService->addOrder($user, $order_pay_type, $service_need_cash, 0, $service_need_points, $increment_info->name, $payment_name, '积分支付', $description1, 2, 0, $project_id, $stime, '', '专享'.$my_discount.'折优惠');
  774. if (!$order) {
  775. throw new \Exception('生成订单失败!');
  776. }
  777. $oid = $this->payService->getTradeNo($order->id);//订单号
  778. if (!$this->serviceService->updateOid($order->id, $oid)) {
  779. throw new \Exception('生成订单号失败!');
  780. }
  781. //会员日志:添加创建增值服务订单日志
  782. $log_rst1 = $this->serviceService->writeMembersLog($user, '9001', [$oid,'积分兑换','']);
  783. //修改会员积分
  784. if (false === $p_rst = $this->memberPointService->reportDeal($user->id, $user->utype, 2, $service_need_points)) {
  785. throw new \Exception('修改会员积分失败!');
  786. } else {
  787. $handsel['uid'] = $user->id;
  788. $handsel['utype'] = $user->utype;
  789. $handsel['htype'] = 'increment_jobs';
  790. $handsel['htype_cn'] = '购买增值包:' . $increment_info->name;
  791. $handsel['operate'] = 2;
  792. $handsel['points'] = $service_need_points;
  793. if (!$this->memberHandselRepository->addNew($handsel)) { //添加积分操作记录
  794. throw new \Exception('添加积分操作记录失败!');
  795. }
  796. $notes = date('Y-m-d H:i:s', time()) . "通过积分兑换成功开通{ $increment_info->name}";
  797. }
  798. DB::commit();
  799. } catch (\Exception $e) {
  800. DB::rollback();
  801. return array( 'status'=>0, 'msg' => $e->getMessage());
  802. }
  803. return array( 'status'=>1, 'msg' => '积分兑换成功!','data'=>$oid);
  804. } else {
  805. if ($is_deductible==1 && $my_point->points<$deductible) {
  806. return array( 'status'=>0, 'msg' => '积分不足,请使用其他方式支付!');
  807. }
  808. return $this->callCashPay($my_setmeal, $my_point, $increment_info, $order_pay_type, $payment_name, $service_need_cash, $is_deductible, $deductible, '', '', 0, $project_id, $my_discount);
  809. }
  810. }
  811. /**
  812. * @return \Illuminate\Http\JsonResponse
  813. * @throws ResponseException
  814. * 微信JSAP支付
  815. */
  816. public function JSApPay(){
  817. $payment_name="wechat";
  818. $type="official";
  819. $payOrder = new PayOrder();
  820. $payOrder->trade_no = $this->payService->getTradeNo(100);
  821. $payOrder->subject = "订单测试";
  822. $payOrder->openid = $this->payService->getPayOpenid();
  823. $payOrder->detail = "订单详情";
  824. $payOrder->price = 0.01;
  825. $payOrder->callback = "App\Services\Common\OrderService.updateCompany";
  826. $payOrder->return_url = route('service.order.index');
  827. $result = $this->payService->pay($payment_name, $type, $payOrder);
  828. return response()->json($result);
  829. }
  830. /**职位置顶
  831. * @param $request
  832. * @return \Illuminate\Http\JsonResponse
  833. * @throws ResponseException
  834. * @throws \Prettus\Validator\Exceptions\ValidatorException
  835. */
  836. protected function incrementStick($request)
  837. {
  838. $cat = $request->input('service_type', 'stick');
  839. $order_pay_type = 8;
  840. $payment_name = $request->input('payment_name', '');
  841. $pay_type = $request->input('pay_type', 'points');
  842. $project_id = $request->input('project_id', 0);
  843. $is_deductible = $request->input('is_deductible', 0);
  844. $jobs_id = $request->input('jobs_id', 0);
  845. if ($is_deductible==0) {
  846. $deductible = 0;
  847. } else {
  848. $deductible = $request->input('deductible', '');
  849. }
  850. $amount = floatval($request->input('amount', ''));
  851. if ($amount==0) {
  852. $pay_type = 'points';
  853. }
  854. if ($project_id==0) {
  855. return response()->json(['status'=>0, 'msg' => '请选择增值包套餐!']);
  856. }
  857. if (!$jobs_id) {
  858. return response()->json(['status'=>0, 'msg'=>"请选择职位!"]);
  859. }
  860. if (!$this->jobsRepository->find($jobs_id)) {
  861. return response()->json(['status'=>0,'msg'=>'该职位不存在!']);
  862. }
  863. if ($this->jobsRepository->getInfo(['stick'=>1,'id'=>$jobs_id,])) {
  864. return response()->json(['status'=>0,'msg'=>'该职位已置顶!']);
  865. }
  866. $user = auth('web-company')->user();
  867. $my_setmeal = $this->membersSetmealService->getUserSetmeal($user, '1'); //会员套餐信息
  868. $my_point = $this->memberPointService->getPoints($user->id, 1); //获取会员积分信息
  869. $increment_info = $this->setmealIncrementsService->getIncrement($project_id); //获取所选简历增值包信息
  870. $my_discount = $this->setmealIncrementsService->getIncrementDiscountByArray($cat, $my_setmeal); //套餐折扣
  871. $service_need_cash = $my_discount > 0 ?round($increment_info->price*$my_discount/10, 2):$increment_info->price; //置顶所需积分
  872. if ($pay_type=='points') { //积分支付
  873. $mobile_discount=config("aix.mobile.mobile_set.mobile_set.mobile_setmeal_increment_discount_value")/100;//移动段固定折扣
  874. if ($mobile_discount==0){$mobile_discount=1;} //没有配置,就为1 除了是不变的
  875. if ($my_discount > 0){ //如果有折扣
  876. //先打自己套餐的折扣,再打固定的折扣
  877. $service_need_cash=($increment_info->price*$my_discount/10)*$mobile_discount;
  878. }else{
  879. $service_need_cash=($increment_info->price)*$mobile_discount; //增值包套餐金额
  880. }
  881. $service_need_points = round($service_need_cash*config('aix.companyset.points.points_set.payment_rate')); //置顶所需积分
  882. if ($my_point->points < $service_need_points) {
  883. return response()->json(['status'=>0, 'msg' => '积分不足,请使用其他方式支付!']);
  884. }
  885. //操作事务开始
  886. DB::beginTransaction();
  887. try {
  888. $promotionsqlarr['companyid']=$user->id;
  889. $promotionsqlarr['jobid']=$jobs_id;
  890. $promotionsqlarr['ptype'] = 1;
  891. $promotionsqlarr['days']=$increment_info->value;
  892. $promotionsqlarr['starttime']=time();
  893. $promotionsqlarr['endtime']=strtotime("{$increment_info->value} day");
  894. $promotion_insert_id = $this->promotionRepository->create($promotionsqlarr);
  895. if (!$promotion_insert_id) {
  896. throw new \Exception('职位置顶添加失败!');
  897. }
  898. $stick_time = time();
  899. $this->jobsRepository->update(['stime'=>$stick_time, 'stick'=>1], $jobs_id);
  900. $params_array = array('days'=>$increment_info['value']);
  901. $description1 = '购买服务:'.$increment_info->name.';积分支付:'.$service_need_points.'积分';
  902. $stime = time();
  903. $params_array['jobs_id'] = $jobs_id;
  904. //添加订单信息
  905. $order = $this->orderService->addOrder($user, $order_pay_type, $service_need_cash, 0, $service_need_points, $increment_info->name, $payment_name, '积分支付', $description1, 2, 0, $project_id, $stime, serialize($params_array), '专享'.$my_discount.'折优惠');
  906. if (!$order) {
  907. throw new \Exception('生成订单失败!');
  908. }
  909. $oid = $this->payService->getTradeNo($order->id);//订单号
  910. if (!$this->serviceService->updateOid($order->id, $oid)) {
  911. throw new \Exception('生成订单号失败!');
  912. }
  913. //会员日志:添加创建增值服务订单日志
  914. $this->serviceService->writeMembersLog($user, '9001', [$oid,'积分兑换','']);
  915. //修改会员积分
  916. if (false === $p_rst = $this->memberPointService->reportDeal($user->id, $user->utype, 2, $service_need_points)) {
  917. throw new \Exception('修改会员积分失败!');
  918. } else {
  919. $handsel['uid'] = $user->id;
  920. $handsel['utype'] = $user->utype;
  921. $handsel['htype'] = 'increment_download_resume';
  922. $handsel['htype_cn'] = '购买增值包:' . $increment_info->name;
  923. $handsel['operate'] = 2;
  924. $handsel['points'] = $service_need_points;
  925. if (!$this->memberHandselRepository->addNew($handsel)) { //添加积分操作记录
  926. throw new \Exception('添加积分操作记录失败!');
  927. }
  928. $notes = date('Y-m-d H:i:s', time()) . "通过积分兑换成功开通{ $increment_info->name}";
  929. //会员日志(order 、setmeal)
  930. }
  931. DB::commit();
  932. } catch (\Exception $e) {
  933. DB::rollback();
  934. return response()->json(['status'=>0, 'msg' => $e->getMessage()]);
  935. }
  936. event_search_update(Jobs::class, (string)$jobs_id, 'update');
  937. return response()->json(['status'=>1, 'msg' => '积分兑换成功!','data'=>$oid]);
  938. } else {
  939. if ($is_deductible==1 && $my_point->points<$deductible) {
  940. return response()->json(['status'=>0, 'msg' => '积分不足,请使用其他方式支付!!']);
  941. }
  942. $params['jobs_id'] = $jobs_id;
  943. $params['days'] = $increment_info['value'];
  944. $nowtime = time();
  945. $params['starttime'] = $nowtime;
  946. for ($i=0; $i < $params['days']*4; $i++) {
  947. $timespace = 3600*6*$i;
  948. if ($i+1==$params['days']*4) {
  949. $params['endtime'] = $nowtime+$timespace;
  950. }
  951. }
  952. return $this->callCashPay($my_setmeal, $my_point, $increment_info, $order_pay_type, $payment_name, $service_need_cash, $is_deductible, $deductible, '', $params, 0, $project_id, $my_discount);
  953. }
  954. }
  955. /**简历包
  956. * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
  957. */
  958. public function resume()
  959. {
  960. $user = auth('web-company')->user();
  961. $my_setmeal = $this->membersSetmealService->getUserSetmeal($user, 1); //会员套餐信息
  962. $my_point = $this->memberPointService->getPoints($user->id, 1); //获取会员积分信息
  963. $cat_arr = $this->getServiceList('download_resume', $my_setmeal);
  964. $res = [
  965. 'wap_title'=>'简历包',
  966. 'mysetmeal'=>$my_setmeal,
  967. 'mypoint'=>$my_point,
  968. 'cat_arr'=>$cat_arr,
  969. 'cat'=>'download_resume',
  970. 'payment_rate'=>config('aix.companyset.points.points_set.payment_rate'),
  971. ];
  972. return view('mobile.app.company.service.increment.resume', $res);
  973. }
  974. /**短信包
  975. * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
  976. */
  977. public function sms()
  978. {
  979. $user = auth('web-company')->user();
  980. $my_setmeal = $this->membersSetmealService->getUserSetmeal($user, 1); //会员套餐信息
  981. $my_point = $this->memberPointService->getPoints($user->id, 1); //获取会员积分信息
  982. $cat_arr = $this->getServiceList('sms', $my_setmeal);
  983. $res = [
  984. 'wap_title'=>'短信包',
  985. 'mysetmeal'=>$my_setmeal,
  986. 'mypoint'=>$my_point,
  987. 'cat_arr'=>$cat_arr,
  988. 'cat'=>'sms',
  989. 'payment_rate'=>config('aix.companyset.points.points_set.payment_rate'),
  990. ];
  991. return view('mobile.app.company.service.increment.sms', $res);
  992. }
  993. /**职位包
  994. * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
  995. */
  996. public function jobsNum()
  997. {
  998. $user = auth('web-company')->user();
  999. $my_setmeal = $this->membersSetmealService->getUserSetmeal($user, 1); //会员套餐信息
  1000. $my_point = $this->memberPointService->getPoints($user->id, 1); //获取会员积分信息
  1001. $cat_arr = $this->getServiceList('jobs', $my_setmeal);
  1002. $res = [
  1003. 'wap_title'=>'职位包',
  1004. 'mysetmeal'=>$my_setmeal,
  1005. 'mypoint'=>$my_point,
  1006. 'cat_arr'=>$cat_arr,
  1007. 'cat'=>'jobs',
  1008. 'payment_rate'=>config('aix.companyset.points.points_set.payment_rate')
  1009. ];
  1010. return view('mobile.app.company.service.increment.jobs_num', $res);
  1011. }
  1012. /**招聘会包
  1013. * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
  1014. */
  1015. public function jobfairNum()
  1016. {
  1017. $user = auth('web-company')->user();
  1018. $my_setmeal = $this->membersSetmealService->getUserSetmeal($user, 1); //会员套餐信息
  1019. $my_point = $this->memberPointService->getPoints($user->id, 1); //获取会员积分信息
  1020. $cat_arr = $this->getServiceList('jobfair_num', $my_setmeal);
  1021. $res = [
  1022. 'wap_title'=>'招聘会包',
  1023. 'mysetmeal'=>$my_setmeal,
  1024. 'mypoint'=>$my_point,
  1025. 'cat_arr'=>$cat_arr,
  1026. 'cat'=>'jobfair_num',
  1027. 'payment_rate'=>config('aix.companyset.points.points_set.payment_rate')
  1028. ];
  1029. return view('mobile.app.company.service.increment.jobfair_num', $res);
  1030. }
  1031. /**职位置顶
  1032. * @param Request $request
  1033. * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
  1034. */
  1035. public function stick(Request $request)
  1036. {
  1037. $user = auth('web-company')->user();
  1038. $job_id = $request->id?$request->id:0;
  1039. $where['company_id'] = $user->id;
  1040. if (config('aix.companyset.comset.show_set.jobs_display') == 1) {
  1041. $where['audit'] = 1;
  1042. }
  1043. $joblist = $this->jobsRepository->findWhere($where)->toArray();
  1044. $joblist1 = array_column($joblist, 'stick', 'id');
  1045. if ($job_id) {
  1046. $jobs_buy = $joblist1[$job_id]['stick']?1:0;
  1047. } else {
  1048. $jobs_buy=0;
  1049. }
  1050. $my_setmeal = $this->membersSetmealService->getUserSetmeal($user, 1); //会员套餐信息
  1051. $my_point = $this->memberPointService->getPoints($user->id, 1); //获取会员积分信息
  1052. $cat_arr = $this->getServiceList('stick', $my_setmeal);
  1053. $res = [
  1054. 'wap_title'=>'职位置顶',
  1055. 'jobs_buy'=>$jobs_buy,
  1056. 'job_id'=>$job_id,
  1057. 'joblist'=>$joblist,
  1058. 'mysetmeal'=>$my_setmeal,
  1059. 'mypoint'=>$my_point,
  1060. 'cat_arr'=>$cat_arr,
  1061. 'cat'=>'stick',
  1062. 'payment_rate'=>config('aix.companyset.points.points_set.payment_rate'),
  1063. ];
  1064. return view('mobile.app.company.service.increment.stick', $res);
  1065. }
  1066. /**职位紧急
  1067. * @param Request $request
  1068. * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
  1069. */
  1070. public function emergency(Request $request)
  1071. {
  1072. $user = auth('web-company')->user();
  1073. $job_id = $request->id?$request->id:0;
  1074. $where['company_id'] = $user->id;
  1075. if (config('aix.companyset.comset.show_set.jobs_display') == 1) {
  1076. $where['audit'] = 1;
  1077. }
  1078. $joblist = $this->jobsRepository->findWhere($where)->toArray();
  1079. $joblist1 = array_column($joblist, 'emergency', 'id');
  1080. if ($job_id) {
  1081. $jobs_buy = $joblist1[$job_id]['emergency']?1:0;
  1082. } else {
  1083. $jobs_buy=0;
  1084. }
  1085. $my_setmeal = $this->membersSetmealService->getUserSetmeal($user, 1); //会员套餐信息
  1086. $my_point = $this->memberPointService->getPoints($user->id, 1); //获取会员积分信息
  1087. $cat_arr = $this->getServiceList('emergency', $my_setmeal);
  1088. $res = [
  1089. 'wap_title'=>'职位紧急',
  1090. 'jobs_buy'=>$jobs_buy,
  1091. 'job_id'=>$job_id,
  1092. 'joblist'=>$joblist,
  1093. 'mysetmeal'=>$my_setmeal,
  1094. 'mypoint'=>$my_point,
  1095. 'cat_arr'=>$cat_arr,
  1096. 'cat'=>'emergency',
  1097. 'payment_rate'=>config('aix.companyset.points.points_set.payment_rate'),
  1098. ];
  1099. return view('mobile.app.company.service.increment.emergency', $res);
  1100. }
  1101. /**自动刷新
  1102. * @param Request $request
  1103. * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
  1104. */
  1105. public function autoRefresh(Request $request)
  1106. {
  1107. $user = auth('web-company')->user();
  1108. $job_id = $request->id?$request->id:0;
  1109. $where['company_id'] = $user->id;
  1110. if (config('aix.companyset.comset.show_set.jobs_display') == 1) {
  1111. $where['audit'] = 1;
  1112. }
  1113. $joblist = $this->jobsRepository->findWhere($where)->toArray();
  1114. $joblist1 = array_column($joblist, 'stick', 'id');
  1115. if ($job_id) {
  1116. $jobs_buy = $joblist1[$job_id]['stick']?1:0;
  1117. } else {
  1118. $jobs_buy=0;
  1119. }
  1120. $my_setmeal = $this->membersSetmealService->getUserSetmeal($user, 1); //会员套餐信息
  1121. $my_point = $this->memberPointService->getPoints($user->id, 1); //获取会员积分信息
  1122. $cat_arr = $this->getServiceList('auto_refresh_jobs', $my_setmeal);
  1123. $res = [
  1124. 'wap_title'=>'自动刷新',
  1125. 'jobs_buy'=>$jobs_buy,
  1126. 'job_id'=>$job_id,
  1127. 'joblist'=>$joblist,
  1128. 'mysetmeal'=>$my_setmeal,
  1129. 'mypoint'=>$my_point,
  1130. 'cat_arr'=>$cat_arr,
  1131. 'cat'=>'auto_refresh_jobs',
  1132. 'payment_rate'=>config('aix.companyset.points.points_set.payment_rate'),
  1133. ];
  1134. return view('mobile.app.company.service.increment.auto_refresh', $res);
  1135. }
  1136. /**
  1137. * 获取某项增值服务列表
  1138. */
  1139. protected function getServiceList($cat, $mysetmeal)
  1140. {
  1141. $increment_arr = $this->setmealIncrementsRepository->getIncrementCache($cat);
  1142. foreach ($increment_arr as $key => $value) {
  1143. $free_discount = $this->setmealIncrementsService->getIncrementDiscountByArray($cat, $mysetmeal);
  1144. if (config('aix.mobile.mobile_set.mobile_set.mobile_setmeal_increment_discount_value') > 0) {
  1145. $value->price = config('aix.mobile.mobile_set.mobile_set.mobile_setmeal_increment_discount_type')==1?$value->price/100*config('aix.mobile.mobile_set.mobile_set.mobile_setmeal_increment_discount_value'):$value->price-config('aix.mobile.mobile_set.mobile_set.mobile_setmeal_increment_discount_value');
  1146. $value->price = $value->price<0?0:$value->price;
  1147. }
  1148. //当前会员需要付的价格
  1149. $increment_arr[$key]->service_price = $free_discount>0?round($value->price*$free_discount/10, 2):$value->price;
  1150. //VIP会员价格,取出折扣最大的套餐折扣
  1151. $vip_discount = $this->setmealIncrementsService->getMaxDiscount($cat);
  1152. $increment_arr[$key]->vip_price = intval($vip_discount)>0?round($value->price*$vip_discount/10, 2):$value->price;
  1153. //换算积分
  1154. $increment_arr[$key]->service_points = round($increment_arr[$key]->service_price*config('aix.companyset.points.points_set.payment_rate'));
  1155. }
  1156. return $increment_arr;
  1157. }
  1158. /**职位紧急
  1159. * @param $request
  1160. * @return \Illuminate\Http\JsonResponse
  1161. * @throws ResponseException
  1162. * @throws \Prettus\Validator\Exceptions\ValidatorException
  1163. */
  1164. protected function incrementEmergency($request)
  1165. {
  1166. $cat = $request->input('service_type', 'emergency');
  1167. $order_pay_type = 9;
  1168. $payment_name = $request->input('payment_name', '');
  1169. $pay_type = $request->input('pay_type', 'points');
  1170. $project_id = $request->input('project_id', 0);
  1171. $is_deductible = $request->input('is_deductible', 0);
  1172. $jobs_id = $request->input('jobs_id', 0);
  1173. if ($is_deductible==0) {
  1174. $deductible = 0;
  1175. } else {
  1176. $deductible = $request->input('deductible', '');
  1177. }
  1178. $amount = floatval($request->input('amount', ''));
  1179. if ($amount==0) {
  1180. $pay_type = 'points';
  1181. }
  1182. if ($project_id==0) {
  1183. return response()->json(['status'=>0, 'msg' => '请选择增值包套餐!']);
  1184. }
  1185. if (!$jobs_id) {
  1186. return response()->json(['status'=>0, 'msg'=>"请选择职位!"]);
  1187. }
  1188. if (!$this->jobsRepository->find($jobs_id)) {
  1189. return response()->json(['status'=>0,'msg'=>'该职位不存在!']);
  1190. }
  1191. if ($this->jobsRepository->getInfo(['emergency'=>1,'id'=>$jobs_id,])) {
  1192. return response()->json(['status'=>0,'msg'=>'该职位已紧急!']);
  1193. }
  1194. $user = auth('web-company')->user();
  1195. $my_setmeal = $this->membersSetmealService->getUserSetmeal($user, '1'); //会员套餐信息
  1196. $my_point = $this->memberPointService->getPoints($user->id, 1); //获取会员积分信息
  1197. $increment_info = $this->setmealIncrementsService->getIncrement($project_id); //获取所选简历增值包信息
  1198. $my_discount = $this->setmealIncrementsService->getIncrementDiscountByArray($cat, $my_setmeal); //套餐折扣
  1199. $service_need_cash = $my_discount > 0 ?round($increment_info->price*$my_discount/10, 2):$increment_info->price; //智能刷新所需积分
  1200. if ($pay_type=='points') { //积分支付
  1201. $mobile_discount=config("aix.mobile.mobile_set.mobile_set.mobile_setmeal_increment_discount_value")/100;//移动段固定折扣
  1202. if ($mobile_discount==0){$mobile_discount=1;} //没有配置,就为1 除了是不变的
  1203. if ($my_discount > 0){ //如果有折扣
  1204. //先打自己套餐的折扣,再打固定的折扣
  1205. $service_need_cash=($increment_info->price*$my_discount/10)*$mobile_discount;
  1206. }else{
  1207. $service_need_cash=($increment_info->price)*$mobile_discount; //增值包套餐金额
  1208. }
  1209. $service_need_points = round($service_need_cash*config('aix.companyset.points.points_set.payment_rate')); //智能刷新所需积分
  1210. if ($my_point->points < $service_need_points) {
  1211. return response()->json(['status'=>0, 'msg' => '积分不足,请使用其他方式支付!']);
  1212. }
  1213. //操作事务开始
  1214. DB::beginTransaction();
  1215. try {
  1216. $promotionsqlarr['companyid']=$user->id;
  1217. $promotionsqlarr['jobid']=$jobs_id;
  1218. $promotionsqlarr['ptype'] = 2;
  1219. $promotionsqlarr['days']=$increment_info->value;
  1220. $promotionsqlarr['starttime']=time();
  1221. $promotionsqlarr['endtime']=strtotime("{$increment_info->value} day");
  1222. $promotion_insert_id = $this->promotionRepository->create($promotionsqlarr);
  1223. if (!$promotion_insert_id) {
  1224. throw new \Exception('职位紧急添加失败!');
  1225. }
  1226. $this->jobsRepository->update(['emergency'=>1], $jobs_id);
  1227. $params_array = array('days'=>$increment_info['value']);
  1228. $description1 = '购买服务:'.$increment_info->name.';积分支付:'.$service_need_points.'积分';
  1229. $stime = time();
  1230. $params_array['jobs_id'] = $jobs_id;
  1231. //添加订单信息
  1232. $order = $this->orderService->addOrder($user, $order_pay_type, $service_need_cash, 0, $service_need_points, $increment_info->name, $payment_name, '积分支付', $description1, 2, 0, $project_id, $stime, serialize($params_array), '专享'.$my_discount.'折优惠');
  1233. if (!$order) {
  1234. throw new \Exception('生成订单失败!');
  1235. }
  1236. $oid = $this->payService->getTradeNo($order->id);//订单号
  1237. if (!$this->serviceService->updateOid($order->id, $oid)) {
  1238. throw new \Exception('生成订单号失败!');
  1239. }
  1240. //会员日志:添加创建增值服务订单日志
  1241. $log_rst1 = $this->serviceService->writeMembersLog($user, '9001', [$oid,'积分兑换','']);
  1242. //修改会员积分
  1243. if (false === $p_rst = $this->memberPointService->reportDeal($user->id, $user->utype, 2, $service_need_points)) {
  1244. throw new \Exception('修改会员积分失败!');
  1245. } else {
  1246. $handsel['uid'] = $user->id;
  1247. $handsel['utype'] = $user->utype;
  1248. $handsel['htype'] = 'increment_download_resume';
  1249. $handsel['htype_cn'] = '购买增值包:' . $increment_info->name;
  1250. $handsel['operate'] = 2;
  1251. $handsel['points'] = $service_need_points;
  1252. if (!$this->memberHandselRepository->addNew($handsel)) { //添加积分操作记录
  1253. throw new \Exception('添加积分操作记录失败!');
  1254. }
  1255. $notes = date('Y-m-d H:i:s', time()) . "通过积分兑换成功开通{ $increment_info->name}";
  1256. }
  1257. DB::commit();
  1258. } catch (\Exception $e) {
  1259. DB::rollback();
  1260. return response()->json(['status'=>0, 'msg' => $e->getMessage()]);
  1261. }
  1262. event_search_update(Jobs::class, (string)$jobs_id, 'update');
  1263. return response()->json(['status'=>1, 'msg' => '积分兑换成功!','data'=>$oid]);
  1264. } else {
  1265. if ($is_deductible==1 && $my_point->points<$deductible) {
  1266. return response()->json(['status'=>0, 'msg' => '积分不足,请使用其他方式支付!!']);
  1267. }
  1268. $params['jobs_id'] = $jobs_id;
  1269. $params['days'] = $increment_info['value'];
  1270. $nowtime = time();
  1271. $params['starttime'] = $nowtime;
  1272. for ($i=0; $i < $params['days']*4; $i++) {
  1273. $timespace = 3600*6*$i;
  1274. if ($i+1==$params['days']*4) {
  1275. $params['endtime'] = $nowtime+$timespace;
  1276. }
  1277. }
  1278. return $this->callCashPay($my_setmeal, $my_point, $increment_info, $order_pay_type, $payment_name, $service_need_cash, $is_deductible, $deductible, '', $params, 0, $project_id, $my_discount);
  1279. }
  1280. }
  1281. /**企业模版
  1282. * @param $request
  1283. * @return ServiceController
  1284. */
  1285. protected function incrementTpl($request)
  1286. {
  1287. return $this->sendErrorResponse('开发中。。。', 404);
  1288. }
  1289. /**智能刷新
  1290. * @param $request
  1291. * @return \Illuminate\Http\JsonResponse
  1292. * @throws ResponseException
  1293. * @throws \Prettus\Validator\Exceptions\ValidatorException
  1294. */
  1295. protected function incrementAutoRefreshJobs($request)
  1296. {
  1297. $cat = $request->input('service_type', 'auto_refresh_jobs');
  1298. $order_pay_type = 12;
  1299. $payment_name = $request->input('payment_name', '');
  1300. $pay_type = $request->input('pay_type', 'points');
  1301. $project_id = $request->input('project_id', 0);
  1302. $is_deductible = $request->input('is_deductible', 0);
  1303. $jobs_id = $request->input('jobs_id', 0);
  1304. if ($is_deductible==0) {
  1305. $deductible = 0;
  1306. } else {
  1307. $deductible = $request->input('deductible', '');
  1308. }
  1309. $amount = floatval($request->input('amount', ''));
  1310. if ($amount==0) {
  1311. $pay_type = 'points';
  1312. }
  1313. if ($project_id==0) {
  1314. return response()->json(['status'=>0, 'msg' => '请选择增值包套餐!']);
  1315. }
  1316. if (!$jobs_id) {
  1317. return response()->json(['status'=>0, 'msg'=>"请选择职位!"]);
  1318. }
  1319. if ($this->queueAutoRefreshRepository->findData(['type'=>1, 'pid'=>$jobs_id])) {
  1320. return response()->json(['status'=>0,'msg'=>'该职位已预约刷新!']);
  1321. }
  1322. $user = auth('web-company')->user();
  1323. $my_setmeal = $this->membersSetmealService->getUserSetmeal($user, '1'); //会员套餐信息
  1324. $my_point = $this->memberPointService->getPoints($user->id, 1); //获取会员积分信息
  1325. $increment_info = $this->setmealIncrementsService->getIncrement($project_id); //获取所选简历增值包信息
  1326. $my_discount = $this->setmealIncrementsService->getIncrementDiscountByArray($cat, $my_setmeal); //套餐折扣
  1327. $service_need_cash = $my_discount > 0 ?round($increment_info->price*$my_discount/10, 2):$increment_info->price; //智能刷新所需积分
  1328. if ($pay_type=='points') { //积分支付
  1329. $mobile_discount=config("aix.mobile.mobile_set.mobile_set.mobile_setmeal_increment_discount_value")/100;//移动段固定折扣
  1330. if ($mobile_discount==0){$mobile_discount=1;} //没有配置,就为1 除了是不变的
  1331. if ($my_discount > 0){ //如果有折扣
  1332. //先打自己套餐的折扣,再打固定的折扣
  1333. $service_need_cash=($increment_info->price*$my_discount/10)*$mobile_discount;
  1334. }else{
  1335. $service_need_cash=($increment_info->price)*$mobile_discount; //增值包套餐金额
  1336. }
  1337. $service_need_points = round($service_need_cash*config('aix.companyset.points.points_set.payment_rate')); //智能刷新所需积分
  1338. if ($my_point->points < $service_need_points) {
  1339. return response()->json(['status'=>0, 'msg' => '积分不足,请使用其他方式支付!']);
  1340. }
  1341. //操作事务开始
  1342. DB::beginTransaction();
  1343. try {
  1344. //添加自动刷新记录
  1345. $days = $increment_info->value;
  1346. $params_array['days'] = $days;
  1347. $nowtime = time();
  1348. $params_array['days'] = $nowtime;
  1349. $params_array['starttime'] = $nowtime;
  1350. for ($i=0; $i < $days*4; $i++) {
  1351. $timespace = 3600*6*$i;
  1352. $this->queueAutoRefreshRepository->create(['uid'=>$user->id,'pid'=>$jobs_id,'type'=>1,'refreshtime'=>$nowtime+$timespace]);
  1353. if ($i+1==$days*4) {
  1354. $params_array['endtime'] = $nowtime+$timespace;
  1355. }
  1356. }
  1357. $params_array['jobs_id'] = $jobs_id;
  1358. $description1 = '购买服务:'.$increment_info->name.';积分支付:'.$service_need_points.'积分';
  1359. $stime = time();
  1360. //添加订单信息
  1361. $order = $this->orderService->addOrder($user, $order_pay_type, $service_need_cash, 0, $service_need_points, $increment_info->name, $payment_name, '积分支付', $description1, 2, 0, $project_id, $stime, serialize($params_array), '专享'.$my_discount.'折优惠');
  1362. if (!$order) {
  1363. throw new \Exception('生成订单失败!');
  1364. }
  1365. $oid = $this->payService->getTradeNo($order->id);//订单号
  1366. if (!$this->serviceService->updateOid($order->id, $oid)) {
  1367. throw new \Exception('生成订单号失败!');
  1368. }
  1369. //会员日志:添加创建增值服务订单日志
  1370. $log_rst1 = $this->serviceService->writeMembersLog($user, '9001', [$oid,'积分兑换','']);
  1371. //修改会员积分
  1372. if (false === $p_rst = $this->memberPointService->reportDeal($user->id, $user->utype, 2, $service_need_points)) {
  1373. throw new \Exception('修改会员积分失败!');
  1374. } else {
  1375. $handsel['uid'] = $user->id;
  1376. $handsel['utype'] = $user->utype;
  1377. $handsel['htype'] = 'increment_download_resume';
  1378. $handsel['htype_cn'] = '购买增值包:' . $increment_info->name;
  1379. $handsel['operate'] = 2;
  1380. $handsel['points'] = $service_need_points;
  1381. if (!$this->memberHandselRepository->addNew($handsel)) { //添加积分操作记录
  1382. throw new \Exception('添加积分操作记录失败!');
  1383. }
  1384. $notes = date('Y-m-d H:i:s', time()) . "通过积分兑换成功开通{ $increment_info->name}";
  1385. }
  1386. DB::commit();
  1387. } catch (\Exception $e) {
  1388. DB::rollback();
  1389. return response()->json(['status'=>0, 'msg' => $e->getMessage()]);
  1390. }
  1391. return response()->json(['status'=>1, 'msg' => '积分兑换成功!','data'=>$oid]);
  1392. } else {
  1393. if ($is_deductible==1 && $my_point->points<$deductible) {
  1394. return response()->json(['status'=>0, 'msg' => '积分不足,请使用其他方式支付!!']);
  1395. }
  1396. $params['jobs_id'] = $jobs_id;
  1397. $params['days'] = $increment_info['value'];
  1398. $nowtime = time();
  1399. $params['starttime'] = $nowtime;
  1400. for ($i=0; $i < $params['days']*4; $i++) {
  1401. $timespace = 3600*6*$i;
  1402. if ($i+1==$params['days']*4) {
  1403. $params['endtime'] = $nowtime+$timespace;
  1404. }
  1405. }
  1406. return $this->callCashPay($my_setmeal, $my_point, $increment_info, $order_pay_type, $payment_name, $service_need_cash, $is_deductible, $deductible, '', $params, 0, $project_id, $my_discount);
  1407. }
  1408. }
  1409. /**购买积分
  1410. * @return ServiceController|\Illuminate\Contracts\View\Factory|\Illuminate\View\View
  1411. */
  1412. public function pointsAdd()
  1413. {
  1414. if (!config('aix.companyset.points.points_set.enable_com_buy_points')) {
  1415. return $this->showMessage('企业充值入口关闭!', route('mobile.firm.service.points'));
  1416. }
  1417. $user = auth('web-company')->user();
  1418. $myPoints = $this->memberPointService->getPoints($user->id, 1);
  1419. $res = $this->serviceService->pointsAdd();
  1420. $res['mypoints'] = $myPoints;
  1421. $res['wap_title']='充值积分';
  1422. return view('mobile.app.company.service.points.points_add', $res);
  1423. }
  1424. public function pointsSave(Request $request)
  1425. {
  1426. if (!config('aix.companyset.points.points_set.enable_com_buy_points')) {
  1427. return $this->showMessage('企业充值未开启,请联系网站管理员!', route('mobile.firm.service.points'));
  1428. }
  1429. $payment_name = $request->input('payment_name', '');
  1430. $points = $request->input('points', 0);
  1431. if (!$points) {
  1432. return response()->json(['status'=>0, 'msg'=>"请输入要购买的积分数量!"]);
  1433. } elseif ($points < config('aix.companyset.points.points_set.com_buy_points_min')) {
  1434. $points = config('aix.companyset.points.points_set.com_buy_points_min');
  1435. }
  1436. $service_need_cash = round($points/config('aix.companyset.points.points_set.payment_rate'), 2);
  1437. $paymenttpye = $this->paymentService->returnPayment($payment_name);
  1438. if (!$paymenttpye) {
  1439. return array( 'status'=>0, 'msg' => '支付方式错误!');
  1440. }
  1441. $user = auth('web-company')->user();
  1442. $description = '购买积分';
  1443. $params['points'] = $points;
  1444. $params['cash'] = $service_need_cash;
  1445. $params['rate'] = config('aix.companyset.points.points_set.payment_rate');
  1446. $order = $this->orderService->addOrder($user, 2, $service_need_cash, $service_need_cash, 0, '购买积分', $payment_name, $paymenttpye->name, $description, 1, 0, 0, 0, serialize($params));
  1447. $tradeNo = $this->payService->getTradeNo($order->id);
  1448. if (!$this->serviceService->updateOid($order->id, $tradeNo)) {
  1449. throw new ResponseException('生成订单号失败!');
  1450. }
  1451. $payOrder = new PayOrder();
  1452. $payOrder->trade_no = $tradeNo;
  1453. $payOrder->subject = '购买积分';
  1454. $payOrder->detail = $description;
  1455. $payOrder->price = $service_need_cash;
  1456. $payOrder->callback = "App\Services\Common\OrderService.pointsSave";
  1457. if ($payment_name == 'wechat') {
  1458. if (!is_weixin()) {
  1459. $type = 'wap';
  1460. } else {
  1461. //预留
  1462. }
  1463. $payOrder->return_url=route('mobile.common.orderWechat', ['oid'=>$payOrder->trade_no]);
  1464. } else {
  1465. $type = 'wap';
  1466. $payOrder->return_url=route('mobile.firm.service.order.index');
  1467. }
  1468. return $this->payService->pay($payment_name, $type, $payOrder);
  1469. }
  1470. /**现金支付
  1471. * @param $resume_id
  1472. * @param $my_setmeal
  1473. * @param $my_point
  1474. * @param $increment_info
  1475. * @param $order_pay_type
  1476. * @param string $payment_name
  1477. * @param string $amount
  1478. * @param $is_deductible
  1479. * @param int $deductible
  1480. * @param string $description
  1481. * @param string $params
  1482. * @param int $points
  1483. * @param int $stemeal
  1484. * @param string $discount
  1485. * @return \Illuminate\Http\JsonResponse
  1486. * @throws ResponseException
  1487. * @throws \Prettus\Validator\Exceptions\ValidatorException
  1488. */
  1489. protected function callCashPay($my_setmeal, $my_point, $increment_info, $order_pay_type, $payment_name = '', $amount = '0.0', $is_deductible, $deductible = 0, $description = '', $params = '', $points = 0, $stemeal = 0, $discount = '')
  1490. {
  1491. //获取支付方式
  1492. $paymenttpye = $this->paymentService->returnPayment($payment_name);
  1493. if (!$paymenttpye) {
  1494. return array( 'status'=>0, 'msg' => '支付方式错误!');
  1495. }
  1496. if (!config("aix.system.pay.{$payment_name}.is_on")) {
  1497. if ($payment_name == 'alipay') {
  1498. return "支付方式未开启!请联系客服电话:【".config('aix.system.pay.offline.service_tel')."】";
  1499. } else {
  1500. return array( 'status'=>0, 'msg' => "支付方式未开启!请联系客服电话:【".config('aix.system.pay.offline.service_tel')."】");
  1501. }
  1502. }
  1503. if ($my_point->points < $deductible) {
  1504. return array( 'status'=>0, 'msg' => '积分不足,请使用其他方式支付!');
  1505. }
  1506. if ($is_deductible==0) {
  1507. $deductible = 0;
  1508. }
  1509. $points_price=round($deductible/config('aix.companyset.points.points_set.payment_rate'),2); //积分抵扣的钱
  1510. /**
  1511. * 修改吴正科的DB 写法
  1512. * 没有折扣价格怎么就变成了原价了,积分不要吗
  1513. * 还有个在配置文件中的购买增值服务优惠
  1514. */
  1515. $mobile_discount=config("aix.mobile.mobile_set.mobile_set.mobile_setmeal_increment_discount_value")/100;//移动段固定折扣
  1516. if ($mobile_discount==0){$mobile_discount=1;} //没有配置,就为1 除了是不变的
  1517. $my_discount=$discount;
  1518. if ($my_discount > 0){ //如果有折扣
  1519. //先打自己套餐的折扣,再打固定的折扣
  1520. $service_need_cash=($increment_info->price*$my_discount/10)*$mobile_discount;
  1521. }else{
  1522. $service_need_cash=($increment_info->price)*$mobile_discount; //增值包套餐金额
  1523. }
  1524. $service_need_cash=round($service_need_cash,2);//去掉多余小数点
  1525. $service_need_cash-=$points_price;//都需要减去积分抵扣的钱
  1526. $service_need_cash=round($service_need_cash,2);
  1527. $paysetarr['ordtotal_fee']=$service_need_cash;
  1528. if ($description=='') {
  1529. $description = '购买服务:'.$increment_info->name;
  1530. }
  1531. $description .= ';'.$paymenttpye->name.$paysetarr['ordtotal_fee'].'元';
  1532. if ($deductible>0) {
  1533. $description .= ';积分支付:'.$deductible.'积分';
  1534. }
  1535. $stime = time();
  1536. $user = auth('web-company')->user();
  1537. //生成订单
  1538. $order = $this->orderService->addOrder($user, $order_pay_type, $amount, $paysetarr['ordtotal_fee'], $description, $increment_info->name, $payment_name, $paymenttpye->name, $description, 1, $deductible, $stemeal, 0, serialize($params), '专享'.$my_discount.'折优惠');
  1539. $tradeNo = $this->payService->getTradeNo($order->id);
  1540. if (!$this->serviceService->updateOid($order->id, $tradeNo)) {
  1541. throw new ResponseException('生成订单号失败!');
  1542. }
  1543. $payOrder = new PayOrder();
  1544. $payOrder->trade_no = $tradeNo;
  1545. $payOrder->subject = '购买' . $increment_info->name;
  1546. $payOrder->detail = $description;
  1547. $payOrder->price = $paysetarr['ordtotal_fee'];
  1548. $payOrder->callback = "App\Services\Common\OrderService.incrementSave";
  1549. if ($payment_name == 'wechat') {
  1550. if (!is_weixin()) {
  1551. $type = 'wap';
  1552. } else { //如果在微信浏览器中
  1553. $type="official";
  1554. $payOrder->openid = $this->payService->getPayOpenid();
  1555. $payOrder->return_url = route('service.order.index');
  1556. $result = $this->payService->pay($payment_name, $type, $payOrder);
  1557. return response()->json(['status'=>1, 'msg' => $result]);
  1558. //预留
  1559. }
  1560. $payOrder->return_url=route('mobile.common.orderWechat', ['oid'=>$payOrder->trade_no]);
  1561. } else {
  1562. $type = 'wap';
  1563. $payOrder->return_url=route('mobile.firm.service.order.index');
  1564. }
  1565. return $this->payService->pay($payment_name, $type, $payOrder);
  1566. }
  1567. /**订单列表
  1568. * @param Request $request
  1569. * @return \Illuminate\Contracts\View\Factory|\Illuminate\Http\JsonResponse|\Illuminate\View\View
  1570. * @throws \Throwable
  1571. */
  1572. public function orderList(Request $request)
  1573. {
  1574. $user = auth('web-company')->user();
  1575. $res = $this->orderService->orderList($request->all(), $user);
  1576. if ($request->ajax()) {
  1577. if ($res['orderList']->lastPage() < $res['orderList']->currentPage()) {
  1578. return response()->json(['status'=>0]);
  1579. }
  1580. return response()->json(['status'=>1,'data'=>view('mobile.app.company.order.ajax.ajax_order_list', ['orderList'=>$res['orderList'],'pay_status_choose'=>$res['pay_status_choose'],'order_type'=>$res['order_type']])->render()]);
  1581. }
  1582. $res['wap_title']='订单列表';
  1583. return view('mobile.app.company.order.index', $res);
  1584. }
  1585. /**删除订单
  1586. * @param Request $request
  1587. * @return \Illuminate\Http\JsonResponse
  1588. * @throws \Throwable
  1589. */
  1590. public function orderDel(Request $request)
  1591. {
  1592. $id = $request->id?$request->id:0;
  1593. if (!$id) {
  1594. return response()->json(['status'=>0,'msg'=>'参数错误']);
  1595. }
  1596. if ($request->method()=='POST') {
  1597. $user = auth('web-company')->user();
  1598. return $this->orderService->orderDel($id,$user);
  1599. }
  1600. $tip='订单被删除后无法恢复,您确定要删除该订单吗?';
  1601. return response()->json(['status'=>1, 'msg'=>'', 'data'=>['html'=>view('app.company.ajax.ajax_warning', ['tip'=>$tip])->render()]]);
  1602. }
  1603. /**订单取消
  1604. * @param Request $request
  1605. * @return \Illuminate\Http\JsonResponse
  1606. * @throws \Throwable
  1607. */
  1608. public function orderCancel(Request $request)
  1609. {
  1610. $id = $request->id?$request->id:0;
  1611. $user = auth('web-company')->user();
  1612. if (!$id) {
  1613. return response()->json(['status'=>0,'msg'=>'参数错误']);
  1614. }
  1615. if ($request->method() == 'POST') {
  1616. return $this->orderService->orderCancel($id, $user);
  1617. }
  1618. $tip='您确定要取消该订单吗?';
  1619. $description='如果您在支付过程中遇到问题,可以联系网站客服,联系电话:'.config('aix.system.site.site.bootom_tel').'。';
  1620. return response()->json(['status'=>1, 'msg'=>'', 'data'=>['html'=>view('app.company.ajax.ajax_warning', ['tip'=>$tip, 'description'=>$description])->render()]]);
  1621. }
  1622. /**订单详情
  1623. * @param $id
  1624. * @return ServiceController|\Illuminate\Contracts\View\Factory|\Illuminate\View\View
  1625. * @throws ResponseException
  1626. */
  1627. public function orderDetail($id)
  1628. {
  1629. if (!$id) {
  1630. return $this->showMessage('参数错误!', 404);
  1631. }
  1632. $user = auth('web-company')->user();
  1633. $res = $this->orderService->orderDetail($id, $user);
  1634. if ($res['order']->is_pay==2 || $res['order']->is_pay==3) {
  1635. $tpl = 'order_detail';
  1636. } else {
  1637. $tpl = 'order_detail_nopay';
  1638. }
  1639. return view("mobile.app.company.order.{$tpl}", $res);
  1640. }
  1641. /**索要发票
  1642. * @param Request $request
  1643. * @return array|\Illuminate\Http\JsonResponse
  1644. */
  1645. public function invoiceSave(Request $request)
  1646. {
  1647. $data = $request->except('_token');
  1648. $user = auth('web-company')->user();
  1649. return $this->orderService->invoiceSave($data, $user);
  1650. }
  1651. /**重新支付
  1652. * @param int $id
  1653. * @return ServiceController|\Illuminate\Http\JsonResponse
  1654. * @throws ResponseException
  1655. */
  1656. public function orderPayRepeat($id = 0)
  1657. {
  1658. if (!$id) {
  1659. return $this->showMessage('参数错误!', 404);
  1660. }
  1661. return $this->orderService->mobileOrderPayRepeat($id);
  1662. }
  1663. /**
  1664. * 电子票据
  1665. */
  1666. // public function enote($id = 0)
  1667. // {
  1668. // if (!$id) {
  1669. // return response()->json(['status'=>0, 'msg'=>"参数错误!"]);
  1670. // }
  1671. // $res = $this->orderService->enote($id);
  1672. // return response()->json(['status'=>1,'msg'=>'获取数据成功!','data'=>['html'=>view('app.company.ajax.ajax_enote', $res)->render()]]);
  1673. // }
  1674. /**订单支付成功
  1675. * @param $oid
  1676. * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
  1677. * @throws ResponseException
  1678. */
  1679. public function setmealFinish($oid)
  1680. {
  1681. $res = $this->serviceService->setmealFinish($oid);
  1682. return view('app.company.service.order_finish', $res);
  1683. }
  1684. }