123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285 |
- <?php
- namespace App\Services\Company;
- use Aix\Pay\Data\PayOrder;
- use App\Exceptions\ResponseException;
- use App\Models\CompanyTpl;
- use App\Models\MembersHandsel;
- use App\Models\MembersPoint;
- use App\Models\Order;
- use App\Models\Tpl;
- use App\Repositories\CompanyRepository;
- use App\Repositories\CompanyTplRepository;
- use App\Repositories\MemberHandselRepository;
- use App\Repositories\MemberLogRepository;
- use App\Repositories\MemberSetmealRepository;
- use App\Repositories\TplRepository;
- use App\Services\Common\PaymentService;
- use App\Services\Common\PayService;
- use App\Services\Person\MemberPointService;
- use Illuminate\Support\Facades\DB;
- use SimpleSoftwareIO\QrCode\Facades\QrCode;
- class CompanyTplService
- {
- protected $companyTplRepository;
- protected $companyRepository;
- protected $memberPointService;
- protected $tplRepository;
- protected $memberHandselRepository;
- protected $paymentService;
- protected $payService;
- protected $memberSetmealRepository;
- protected $memberLogRepository;
- /**
- * CompanyTplService constructor.
- * @param CompanyTplRepository $companyTplRepository
- */
- public function __construct(
- CompanyTplRepository $companyTplRepository,
- CompanyRepository $companyRepository,
- MemberPointService $memberPointService,
- TplRepository $tplRepository,
- MemberHandselRepository $memberHandselRepository,
- PaymentService $paymentService,
- PayService $payService,
- MemberSetmealRepository $memberSetmealRepository,
- MemberLogRepository $memberLogRepository
- )
- {
- $this->companyTplRepository = $companyTplRepository;
- $this->companyRepository = $companyRepository;
- $this->memberPointService = $memberPointService;
- $this->tplRepository = $tplRepository;
- $this->memberHandselRepository = $memberHandselRepository;
- $this->paymentService = $paymentService;
- $this->payService = $payService;
- $this->memberSetmealRepository = $memberSetmealRepository;
- $this->memberLogRepository=$memberLogRepository;
- }
- public function templateList($user)
- {
- $tplFalse = collect([]);
- $tplTrue = $this->companyTplRepository->getTplByUid(['uid'=>$user->id]);
- if($tplTrue->isEmpty()){
- $tplFalse = $GLOBALS['template'];
- }else{
- foreach ($tplTrue as $key1=>$val1) {
- $tplTrue[$key1]->default_tpl = false;
- if($user->tpl == $val1->tpls->blade_name){
- $tplTrue[$key1]->default_tpl = true;
- }
- }
- $tplid = array_unique(array_column($tplTrue->toArray(),'tplid'));
- if(!$GLOBALS['template']->isEmpty()){
- foreach ($GLOBALS['template'] as $key=>$val){
- if(in_array($val->id,$tplid)){
- unset($GLOBALS['template'][$key]);
- }
- }
- $tplFalse = $GLOBALS['template'];
- }
- }
- return ['tplTrue'=>$tplTrue,'tplFalse'=>$tplFalse];
- }
- public function companyUpdate($user, $tpl)
- {
- if (empty($tpl)) {
- throw new ResponseException('模板文件丢失!');
- }
- $this->memberLogRepository->createLog($user,1031,request('name'));
- return $this->companyRepository->companySave(['tpl'=>$tpl], $user->id);
- }
- public function incrementTpl($user, $input, $route)
- {
- $project_id = intval($input['project_id']);
- if (empty($project_id)) {
- throw new ResponseException('模板文件丢失!');
- }
- $tpl = $this->tplRepository->find($project_id);
- if (!$tpl) {
- throw new ResponseException('模板文件丢失!');
- }
- $companyTpl = $this->companyTplRepository->getTpl(['uid'=>$user->id,'tplid'=>$project_id]);
- if ($companyTpl) {
- throw new ResponseException('该模板已购买过!');
- }
- if ($input['pay_type']=='points') {
- $memberPoint = $this->memberPointService->getPoints($user->id, 1);
- if (!$memberPoint) {
- throw new ResponseException('积分不足,请使用其他方式支付!');
- }
- $mysetmeal = $this->memberSetmealRepository->getSetmealByUid($user->id, $user->utype);
- if($mysetmeal){
- if($mysetmeal->discount_tpl){
- $tpl->price = intval(round($tpl->price*$mysetmeal->discount_tpl/10));
- }
- }
- if ($memberPoint->points < $tpl->price) {
- throw new ResponseException('积分不足,请使用其他方式支付!');
- }
- //操作事务开始
- DB::beginTransaction();
- try {
- $this->companyTplRepository->createTpl(['uid'=>$user->id,'tplid'=>$project_id]);
- $order = new Order();
- $order->uid = $user->id;
- $order->utype = $user->utype;
- $order->order_type = 10;
- $order->pay_type = 1;
- $order->is_pay = 2;
- $order->amount = $tpl->price/config('aix.companyset.points.points_set.payment_rate');
- $order->pay_points = $tpl->price;
- $order->payment = 'points';
- $order->payment_cn = '积分';
- $order->payment_time = time();
- $order->service_name = '企业模板';
- $order->discount = '企业模板';
- $order->description = '购买服务:企业模板('.$tpl->name.')';
- $order->setmeal = $project_id; //购买模板的套餐ID 就显示模板ID
- $order->charge = json_encode($input);
- $order->save();
- $PayService = new PayService();
- $order->oid = $PayService->getTradeNo($order->id);
- $order->save();
- $this->memberHandselRepository->addNew(
- ['uid'=>$user->id,
- 'utype'=>$user->utype,
- 'htype'=>'increment_tpl',
- 'htype_cn'=>'购买企业模板:'.$tpl->name,
- 'operate'=>2,
- 'points'=>$tpl->price
- ]
- );
- MembersPoint::where(
- ['uid'=>$user->id,'utype'=>$user->utype]
- )->decrement('points', $tpl->price);
- DB::commit();
- return ['code'=>'points','status'=>1,'info'=>$order->oid];
- } catch (\Exception $e) {
- DB::rollback();
- return ['code'=>'points','status'=>0,'info'=>$e->getMessage()];
- }
- } else {
- $paymenttpye = $this->paymentService->returnPayment($input['payment_name']);
- if (!$paymenttpye) {
- throw new ResponseException('支付方式错误!');
- }
- if (is_weixin()) {
- if ($input['payment_name'] == 'offline') {
- $type='pay';
- } else {
- $type = 'wap';
- }
- } else {
- if (strpos($route->uri, 'mobile')!== false) {
- if ($input['payment_name'] == 'offline') {
- $type='pay';
- } else {
- $type = 'wap';
- }
- } else {
- if ($input['payment_name']=='wechat') {
- $type = 'scan';
- } elseif ($input['payment_name'] == 'offline') {
- $type='pay';
- } else {
- $type = 'web';
- }
- }
- }
- $order = new Order();
- if ($input['is_deductible']) {
- $order->pay_type = 3;
- $order->amount = $input['amount'] + ($input['deductible']/config('aix.companyset.points.points_set.payment_rate'));
- $order->pay_points = $input['deductible'];
- $is_deductible = '使用积分抵现(抵扣积分:)'.$input['deductible'].'积分!支付金额:'.$input['amount'].'元';
- $order->description = '购买服务:企业模板('.$tpl->name.')'.$is_deductible;
- } else {
- $order->pay_type = 2;
- $order->amount = $input['amount'];
- $order->pay_points = 0;
- $is_deductible = '未使用积分抵现!支付金额:'.$input['amount'].'元';
- $order->description = '购买服务:企业模板('.$tpl->name.')'.$is_deductible;
- }
- $order->discount = '企业模板';
- $order->service_name = '企业模板';
- $order->order_type = 10;
- $order->pay_amount = $input['amount'];
- $order->payment = $input['payment_name'];
- if ($input['payment_name']=='alipay') {
- $order->payment_cn = '支付宝';
- } elseif ($input['payment_name']=='wechat') {
- $order->payment_cn = '微信';
- } else {
- $order->payment_cn = '线下转账';
- }
- $input['uid'] = $user->id;
- $input['utype'] = $user->utype;
- $order->charge = json_encode($input);
- $order->uid = $user->id;
- $order->utype = $user->utype;
- $order->save();
- $tradeNo = $this->payService->getTradeNo($order->id);
- $payOrder = new PayOrder();
- $payOrder->trade_no = $tradeNo;
- $payOrder->subject = '企业模板';
- $payOrder->detail = $order->description;
- $payOrder->price = $input['amount'];
- $payOrder->callback = "App\Services\Common\OrderService.incrementTplUpdate";
- if ($type == 'web') {
- $payOrder->return_url=route('service.template.index');
- }
- if ($type=='wap') {
- if ($input['payment_name']=='wechat') {
- $payOrder->return_url=route('mobile.common.orderWechat', ['oid'=>$payOrder->trade_no]);
- } else {
- $payOrder->return_url=route('mobile.firm.service.order.index');
- }
- }
- $result = $this->payService->pay($input['payment_name'], $type, $payOrder);
- $order->oid = $payOrder->trade_no;
- $order->save();
- if ($input['payment_name']=='wechat') {
- if ($type=='wap') {
- return [
- 'code'=>'wechat',
- 'tradeCode'=>$result,
- 'type'=>$type
- ];
- } else {
- return [
- 'code'=>'wechat',
- 'tradeCode'=>get_qrcode_html($result->code_url),
- 'tradeNo'=>[
- 'number'=>$payOrder->trade_no,
- ],
- 'type'=>$type
- ];
- }
- } elseif ($input['payment_name']=='alipay') {
- return [
- 'code'=>'alipay',
- 'tradeCode'=>$result,
- ];
- } else {
- return [
- 'code'=>'offline',
- 'tradeNo'=>$tradeNo
- ];
- }
- }
- }
- }
|