881 lines
39 KiB
PHP
881 lines
39 KiB
PHP
<?php
|
||
|
||
namespace App\Http\Controllers\Server\H5;
|
||
|
||
use App\Facades\CronService;
|
||
use App\Models\Coupon;
|
||
use App\Models\Server\EvaluateAnswer;
|
||
use App\Models\Server\EvaluateDetail;
|
||
use App\Models\Server\EvaluateList;
|
||
use App\Models\Server\EvaluateQuestion;
|
||
use App\Models\Server\EvaluateQuestionGroup;
|
||
use App\Models\Server\MEarningShare;
|
||
use App\Models\Server\MerchantAccount;
|
||
use App\Models\Server\MerchantEvaluate;
|
||
use App\Models\Server\UserEvaluate;
|
||
use App\Models\Server\WechatSubMerchant;
|
||
use App\Models\UserCoupon;
|
||
use App\Services\EvaluateService;
|
||
use Illuminate\Http\JsonResponse;
|
||
use Illuminate\Http\Request;
|
||
use App\Http\Controllers\Controller;
|
||
use App\Models\MerchantUsers;
|
||
use App\Models\Server\MerchantUser;
|
||
use App\Models\Server\TouristOrder;
|
||
use App\Models\User;
|
||
use App\Services\UserService;
|
||
use Illuminate\Support\Facades\DB;
|
||
use Illuminate\Support\Facades\Redis;
|
||
use function foo\func;
|
||
|
||
class EvaluateController extends Controller
|
||
{
|
||
|
||
public function curl($url, $method, $headers, $data = null)
|
||
{
|
||
$curl = curl_init();
|
||
$host = 'https://testopenapi.ydl.com';
|
||
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method);
|
||
if ($method == 'POST')
|
||
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data));
|
||
curl_setopt($curl, CURLOPT_URL, $url);
|
||
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
|
||
curl_setopt($curl, CURLOPT_FAILONERROR, false);
|
||
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
|
||
curl_setopt($curl, CURLOPT_HEADER, false);
|
||
if (1 == strpos("$" . $host, "https://")) {
|
||
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
|
||
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
|
||
}
|
||
$callbcak = curl_exec($curl);
|
||
$CURLINFO_HTTP_CODE = curl_getinfo($curl, CURLINFO_HTTP_CODE);
|
||
//关闭,释放资源
|
||
curl_close($curl);
|
||
if ($CURLINFO_HTTP_CODE == 200)
|
||
return json_decode($callbcak, true);
|
||
|
||
}
|
||
|
||
/**
|
||
* 获取服务列表
|
||
* @param Request $request
|
||
*/
|
||
public function getTestList(Request $request)
|
||
{
|
||
try {
|
||
$test_type = $request->catId;
|
||
$page = $request->page ?? 1;
|
||
$perPage = $request->perPage ?? 15;
|
||
$merchant_id = $request->merchant_id;
|
||
// $test_list_id = MerchantEvaluate::where('merchant_id', $merchant_id)
|
||
// ->where('status', 1)
|
||
// ->when($test_type, function ($query) use ($test_type) {
|
||
// $query->where('test_item_type', $test_type);
|
||
// })
|
||
// ->leftJoin('evaluate_lists', 'merchant_evaluates.test_item_id', '=', 'evaluate_lists.test_item_id')
|
||
// ->orderBy('is_top', 'desc')->orderBy('top_time', 'desc')->orderBy('id', 'desc')
|
||
// ->select('evaluate_lists.*')
|
||
// ->paginate($perPage, ['*'], 'page', $page);
|
||
$orders = \DB::table('tourist_orders')->where('type', 'evaluate')->where('pay_status', '>', 0)
|
||
->groupBy('type_id')
|
||
->selectRaw('type_id, count(*) as pay_orders_count');
|
||
$evaluates = DB::table('merchant_evaluates as me')
|
||
->leftJoin('evaluate_lists as el', 'me.test_item_id', '=', 'el.test_item_id')
|
||
->leftJoinSub($orders, 'ufutx_o', function($join) {
|
||
$join->on('me.id', '=', 'o.type_id');
|
||
})->where('me.merchant_id', $merchant_id)
|
||
->where('me.status',1)
|
||
->selectRaw('ufutx_o.*, ufutx_el.*, ufutx_me.id as evaluate_id')
|
||
->orderBy('me.is_top', 'desc')
|
||
->orderBy('me.top_time', 'desc')
|
||
->orderBy('me.id', 'desc')
|
||
->paginate();
|
||
foreach ($evaluates as $evaluate) {
|
||
$evaluate->evaNum = $evaluate->pay_orders_count ? : 0;
|
||
}
|
||
return $this->success('ok', $evaluates);
|
||
}catch (\Exception $e){
|
||
$this->getError($e);
|
||
return $this->failure('服务器休息中,请稍后再试');
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 服务关键字搜索
|
||
* @param Request $request
|
||
*/
|
||
public function searchEvaluate(Request $request)
|
||
{
|
||
try {
|
||
$keyword = $request->keyword;
|
||
$test_item_type = $request->test_item_type;
|
||
$merchant_id = $request->merchant_id;
|
||
$test_item_ids = MerchantEvaluate::where('merchant_id', $merchant_id)
|
||
->when($test_item_type, function ($query) use ($test_item_type) {
|
||
$query->where('test_item_type', $test_item_type);
|
||
})
|
||
->pluck('test_item_id');
|
||
$return_data = EvaluateList::whereIn('test_item_id', $test_item_ids)
|
||
->when($keyword, function ($query) use ($keyword) {
|
||
$query->where('desc', 'like', $keyword)
|
||
->orWhere('name', 'like', $keyword);
|
||
})
|
||
->get();
|
||
return $this->success('ok', $return_data);
|
||
}catch (\Exception $e){
|
||
$this->getError($e);
|
||
return $this->failure('服务器休息中,请稍后再试');
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 获取评测详情
|
||
* @param Request $request
|
||
*/
|
||
public function getTestDetail(Request $request)
|
||
{
|
||
try {
|
||
$test_id = $request->itemId;
|
||
$merchant_id = $request->merchant_id;
|
||
$merchant_user_id = $request->merchant_user_id;
|
||
$merchant_evaluate = MerchantEvaluate::where('merchant_id', $merchant_id)
|
||
->withTrashed()
|
||
->where('id', $test_id)
|
||
->first();
|
||
if (!$merchant_evaluate) {
|
||
return $this->failure('商家没有这项评测服务');
|
||
}
|
||
$list = EvaluateList::where('test_item_id',$merchant_evaluate->test_item_id)
|
||
->first();
|
||
if($list->type == 1){
|
||
$test_details = EvaluateService::testDetails($merchant_evaluate->test_item_id);
|
||
$test_details['test_item_id'] = $test_details['itemId'];
|
||
unset($test_details['itemId']);
|
||
$test_details['report_pages'] = $test_details['reportPages'];
|
||
unset($test_details['reportPages']);
|
||
$test_details['question_count'] = $test_details['questionCount'];
|
||
unset($test_details['questionCount']);
|
||
$test_details['questions'] = json_encode($test_details['questions']);
|
||
if ($merchant_evaluate->deleted_at) {
|
||
$test_details['deleted_at'] = $merchant_evaluate->deleted_at;
|
||
}
|
||
//EvaluateDetail::where('test_item_id', $merchant_evaluate->test_item_id)->update($test_details);
|
||
$test_details['price'] = $test_details['price'] / 100;
|
||
}else{
|
||
$test_details = EvaluateDetail::where('test_item_id',$merchant_evaluate->test_item_id)
|
||
->first();
|
||
}
|
||
|
||
if ($test_details) {
|
||
$test_details['visitNum'] = \DB::table('tourist_orders')->where('type', 'evaluate')
|
||
->where('type_id', $merchant_evaluate->id)->where('pay_status', '>', 0)
|
||
->count();
|
||
} else {
|
||
return $this->failure('商品不存在或已下架');
|
||
}
|
||
|
||
Redis::zincrby('evaluate', 1, $merchant_evaluate->test_item_id);
|
||
$merchant_user = MerchantUser::where('id', $request->merchant_user_id)->first();
|
||
if($merchant_user){
|
||
$merchant_user->preview($merchant_evaluate);
|
||
}
|
||
|
||
//if(config('app.env') == 'production'){
|
||
// $merchant_user->addlog($test_item);
|
||
//}
|
||
$test_details['questions'] = json_decode($test_details['questions'], true);
|
||
//查询用户有没有参加过评测
|
||
$tourist = TouristOrder::where('type', 'evaluate')
|
||
->where('type_id', $test_id)
|
||
->where('merchant_id', $merchant_id)
|
||
->where('account_id', $merchant_user_id)
|
||
->whereIn('pay_status', [1, 4])
|
||
->orderBy('id', 'desc')
|
||
->first();
|
||
if (!$tourist) {
|
||
$test_details['trade_no'] = null;
|
||
$test_details['evaluate_status'] = 1;
|
||
} else {
|
||
$user_evaluate = UserEvaluate::where('order_id', $tourist->trade_no)
|
||
->first();
|
||
if (!$user_evaluate) {
|
||
$test_details['trade_no'] = $tourist->trade_no;
|
||
$test_details['evaluate_status'] = 2;
|
||
} else {
|
||
$test_details['trade_no'] = $tourist->trade_no;
|
||
$test_details['evaluate_status'] = 1;
|
||
}
|
||
}
|
||
//优惠券
|
||
$coupons = Coupon::where('type', 'evaluate')
|
||
->where('type_id', $test_id)
|
||
->where('status', '1')
|
||
->where('m_id', $merchant_id)
|
||
->pluck('id');
|
||
$user_coupon_id = UserCoupon::where('m_user_id', $merchant_user_id)
|
||
->whereIn('coupons_id', $coupons)
|
||
->where('m_id', $merchant_id)
|
||
->where('status', 0)
|
||
->value('coupons_id');
|
||
if ($user_coupon_id) {
|
||
$test_details['coupon_id'] = $user_coupon_id;
|
||
} else {
|
||
$test_details['coupon_id'] = null;
|
||
}
|
||
$merchant_user_id = $request->merchant_user_id;
|
||
$merchant_user = MerchantUser::where('id', $merchant_user_id)->first();
|
||
$linkmen['mobile'] = '';
|
||
$linkmen['name'] = '';
|
||
if ($merchant_user) {
|
||
$test_details['share_nickname'] = $merchant_user->nickname ?? '匿名用户';
|
||
$test_details['share_avatar'] = $merchant_user->pic ?? User::DefaultAvatar;
|
||
$linkmen['mobile'] = $merchant_user->mobile;
|
||
$linkmen['name'] = $merchant_user->nickname;
|
||
}
|
||
$wechatUser = session('wechat.oauth_user.new');
|
||
if ($wechatUser) {
|
||
$openid = $wechatUser->getId();
|
||
} else {
|
||
$openid = MerchantUser::where('id', $request->merchant_user_id)->value('openid');
|
||
}
|
||
$jump_url = urlencode(env('APP_URL') . '/pu/#/evaluateDetails/' . $merchant_evaluate['id']);
|
||
$url = env('APP_URL') . '/api/official/live/wechat/FamilyAuth?merchant_id=' . $merchant_id .
|
||
'&from_openid=' . $openid . '&url=' . $jump_url.'&evaluate_type='.$list->type;
|
||
$qr_code_url = $this->getPreviewQrcode($url);
|
||
$test_details['jump_url'] = $url;
|
||
$test_details['url'] = $qr_code_url;
|
||
$test_details['linkmen'] = $linkmen;
|
||
$test_details['evaluate_id'] = $merchant_evaluate->id;
|
||
if($request->from_openid && $request->from_openid != 'null'){
|
||
$user_service = new UserService();
|
||
$user_service->generateClientComment(0,$openid,$request->from_openid,'测评',$test_details['test_item_id'],$test_details['title']);
|
||
}
|
||
/**
|
||
$merchant = MerchantAccount::find($merchant_evaluate->merchant_id);
|
||
$test_details->has_group = $merchant->hasGroup($test_details) ? 1 : 0;
|
||
$test_details->group = $merchant->groupInformation($test_details);
|
||
* */
|
||
|
||
if ($request->from_openid && $request->from_openid != $merchant_user->openid) {
|
||
MEarningShare::create(["user_id"=>$merchant_user->id, "type"=>MerchantEvaluate::class, 'type_id'=>$merchant_evaluate->id, 'from_openid'=>$request->from_openid]);
|
||
}
|
||
return $this->success('ok', $test_details);
|
||
}catch (\Exception $e){
|
||
$this->getError($e);
|
||
return $this->failure('服务器休息中,请稍后再试');
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 一点零 ,评测下单
|
||
* *
|
||
* @param Request $request
|
||
* @return JsonResponse|string
|
||
*/
|
||
public function postTestCreate(Request $request)
|
||
{
|
||
try {
|
||
$merchant_user_id = $request->merchant_user_id;
|
||
$MerchantUser = MerchantUsers::select('openid', 'mobile', 'nickname')->where('id', $merchant_user_id)
|
||
->first();
|
||
$test_item_id = $request->itemId;
|
||
$merchant_id = $request->merchant_id;
|
||
$wechatUser = session('wechat.oauth_user.new');
|
||
if ($wechatUser) {
|
||
$open_id = $wechatUser->getId();
|
||
} else {
|
||
$open_id = $MerchantUser->openid;
|
||
}
|
||
$coupon_id = $request->coupon_id;
|
||
$mobile = $request->mobile;
|
||
$name = $request->name;
|
||
if (!$mobile && !$name) {
|
||
$mobile = $MerchantUser->mobile??'';
|
||
$name = $MerchantUser->nickname;
|
||
}
|
||
if (!$merchant_id || !$test_item_id) {
|
||
return $this->failure('参数不全');
|
||
}
|
||
$trade_no = $this->getTradeNO();
|
||
$merchant_evaluates = MerchantEvaluate::where('merchant_id', $merchant_id)
|
||
->where('test_item_id', $test_item_id)
|
||
->first();
|
||
if (!$merchant_evaluates) {
|
||
return $this->failure('商品不存在');
|
||
}
|
||
if($merchant_evaluates->type ==1){
|
||
//查询一点灵价格
|
||
$result = EvaluateService::testDetails($test_item_id);
|
||
if (!$result) {
|
||
return $this->failure('商品已下架');
|
||
}
|
||
}else{
|
||
$result = EvaluateDetail::where('test_item_id', $test_item_id)
|
||
->first();
|
||
$result->price = $result->price * 100;
|
||
}
|
||
/*
|
||
if($merchant_evaluates->price < $result['price']){
|
||
return $this->failure('销售价格异常,请联系客家');
|
||
}
|
||
*/
|
||
//获取利润分成比例
|
||
//检查优惠券
|
||
if ($coupon_id) {
|
||
$user_coupon = UserCoupon::where('coupons_id', $coupon_id)
|
||
->where('m_user_id', $merchant_user_id)
|
||
->where('m_id', $merchant_id)
|
||
->where('status', 0)
|
||
->first();
|
||
if (!$user_coupon) {
|
||
return $this->failure('优惠券不存在');
|
||
}
|
||
$coupon = Coupon::where('id', $user_coupon->coupons_id)
|
||
->where('type', 'evaluate')
|
||
->where('type_id', $merchant_evaluates->id)
|
||
->where('m_id', $merchant_id)
|
||
->where('status', 1)
|
||
->first();
|
||
if ($coupon) {
|
||
$user_coupon->status = 1;
|
||
$user_coupon->save();
|
||
} else {
|
||
return $this->failure('优惠券已用完或已下架');
|
||
}
|
||
}
|
||
//写入订单表
|
||
$touristOrder = new TouristOrder();
|
||
$touristOrder->open_id = $open_id;
|
||
$touristOrder->price = $result['price'] / 100;
|
||
$touristOrder->num = 1;
|
||
$touristOrder->pay_type = $coupon_id ? 'free' : 'wechat';
|
||
$touristOrder->type = 'evaluate';
|
||
$touristOrder->type_id = $merchant_evaluates->id;
|
||
$touristOrder->pay_status = 0;
|
||
$touristOrder->goods = '评测_' . $result['title'];
|
||
$touristOrder->trade_no = $trade_no;
|
||
$touristOrder->withdrawal_radio = 100; //分成比例
|
||
$touristOrder->from_openid = $request->from_openid;
|
||
$touristOrder->share_channel_id = $request->share_channel_id;
|
||
$touristOrder->alliance_id = $request->alliance_id;
|
||
$link_name = $request->linkmen['name']??($request->linkmen[0]['name']??null);
|
||
$link_mobile = $request->linkmen['mobile']??($request->linkmen[0]['mobile']??'');
|
||
$touristOrder->name = $request->name ?? ($MerchantUser->nickname ?? $link_name);
|
||
$touristOrder->mobile = $request->mobile ?? ($MerchantUser->mobile ?? $link_mobile);
|
||
$touristOrder->account_id = $merchant_user_id;
|
||
$touristOrder->merchant_id = $merchant_id;
|
||
$touristOrder->channel = $coupon_id ? 4 : 0;
|
||
$touristOrder->desc = $result['subtitle'];
|
||
$touristOrder->area_code = null;
|
||
$touristOrder->linkmen = json_encode($request->linkmen);
|
||
$touristOrder->save();
|
||
$list = EvaluateList::where('test_item_id',$test_item_id)
|
||
->first();
|
||
if($list->type ==1) {
|
||
//调用一点灵评测下单接口下单
|
||
$evaluate = EvaluateService::testCreate($test_item_id, $result['price'], $trade_no);
|
||
if (!$evaluate) {
|
||
return $this->failure('操作失败', ['message' => '第三方无返回']);
|
||
}
|
||
}
|
||
|
||
if ($result['price'] <= 0.00 || !empty($coupon_id)) {
|
||
$touristOrder->pay_status = 1;
|
||
$touristOrder->save();
|
||
DB::commit();
|
||
if($list->type ==1) {
|
||
EvaluateService::testUpdate($trade_no);
|
||
}
|
||
$touristOrder->pay_config = null;
|
||
$touristOrder->wx_pay = [];
|
||
if( $touristOrder->merchant_id == 491 ){
|
||
//给客服脱单姐 管理员
|
||
$openids = [
|
||
"oPC_2vn6Q3M5jQpw9xAS7NNCMfjs", "oPC_2vudkf3stdiNgjA-e2n6t9_M","oPC_2vtrwOLgWHLwVEFTFsJ7N7fw","oPC_2vt7nGwKk_OFzJL70SlVuTiU","oPC_2vg_Eur-Wa_Vwnx9JiyRVn9Q
|
||
"
|
||
];
|
||
foreach ($openids as $openid) {
|
||
\CommonUtilsService::sendBuySuccessNoticeToBusiness($touristOrder, $openid,'merchant',$touristOrder->price, $touristOrder->mobile, $touristOrder->name);
|
||
}
|
||
|
||
}
|
||
return $this->success('ok', $touristOrder);
|
||
} else {
|
||
$callback = config('app.url') . '/api/app/callback/Community/' . $trade_no;
|
||
$attributes = array(
|
||
'trade_type' => 'JSAPI', // JSAPI,NATIVE,APP...
|
||
'body' => $result['title'],
|
||
'detail' => $result['subtitle'],
|
||
'out_trade_no' => $trade_no,
|
||
'total_fee' => $result['price'],
|
||
'notify_url' => $callback, // 支付结果通知网址,如果不设置则会使用配置里的默认地址
|
||
'openid' => $open_id,
|
||
);
|
||
//$sub_mch_id = WechatSubMerchant::where('merchant_id',$merchant_id)
|
||
// ->value('sub_mch_id');
|
||
//if($sub_mch_id){
|
||
// $result = \WechatService::officialServicePay($attributes,$sub_mch_id);
|
||
//}else{
|
||
$result = \WechatService::officialPay($attributes);
|
||
//}
|
||
return $this->success('ok', $result);
|
||
}
|
||
}catch (\Exception $e){
|
||
$this->getError($e);
|
||
return $this->failure('服务器休息中,请稍后再试');
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 更新评测状态
|
||
* @param Request $request
|
||
* @return JsonResponse|string
|
||
*/
|
||
public function updateTestPayStatus(Request $request)
|
||
{
|
||
try {
|
||
$orderId = $request->order_id;
|
||
$result = EvaluateService::testUpdate($orderId);
|
||
return $this->success('ok', $result);
|
||
}catch (\Exception $e){
|
||
$this->getError($e);
|
||
return $this->failure('服务器休息中,请稍后再试');
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 一点零 ,提交评测题答案
|
||
* *
|
||
* @param Request $request
|
||
* @return JsonResponse|string
|
||
*/
|
||
public function postTestCommit(Request $request)
|
||
{
|
||
try {
|
||
$orderId = $request->order_id;
|
||
$merchant_id = $request->merchant_id;
|
||
$answer = json_decode($request->answer, true);
|
||
$test_item_id = $request->test_item_id;
|
||
$merchant_user_id = $request->merchant_user_id;
|
||
|
||
if (!$orderId || !$answer || !$merchant_id || !$test_item_id || !$merchant_user_id) {
|
||
return $this->failure('参数不全');
|
||
}
|
||
//写用户评测结果表
|
||
$tourist_order = TouristOrder::where('trade_no', $orderId)
|
||
->where('account_id', $merchant_user_id)
|
||
->where('merchant_id', $merchant_id)
|
||
->where('type', 'evaluate')
|
||
->whereIn('pay_status', [1, 4])
|
||
->first();
|
||
if ($tourist_order) {
|
||
if ($tourist_order->pay_status == 0) {
|
||
return $this->failure('订单未支付');
|
||
}
|
||
$userEvaluate = UserEvaluate::where('order_id', $orderId)
|
||
->first();
|
||
$question = EvaluateDetail::where('test_item_id', $tourist_order->type_id)
|
||
->value('questions');
|
||
if (!$userEvaluate) {
|
||
$user_evaluate = new UserEvaluate();
|
||
$user_evaluate->order_id = $orderId;
|
||
$user_evaluate->questions = $question;
|
||
$user_evaluate->price = $tourist_order->price;
|
||
$user_evaluate->answer = json_encode($answer);
|
||
$user_evaluate->save();
|
||
$result = EvaluateService::testCommit($orderId, $test_item_id, $answer);
|
||
if (empty($result['data'])) {
|
||
return $this->failure('数据异常', $result);
|
||
}
|
||
$temp = json_decode($result['data'], true);
|
||
$data['resultUrl'] = $temp['resultUrl'];
|
||
$user_evaluate->evaluate_report = json_encode($data);
|
||
$user_evaluate->save();
|
||
if ($result) {
|
||
return $this->success('ok', $result['data']);
|
||
}
|
||
} else {
|
||
return $this->success('ok', $userEvaluate['evaluate_report']);
|
||
}
|
||
} else {
|
||
return $this->failure('订单不存在');
|
||
}
|
||
}catch (\Exception $e){
|
||
$this->getError($e);
|
||
return $this->failure('服务器休息中,请稍后再试');
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 一点零 ,获取测评报告
|
||
* *
|
||
* @param Request $request
|
||
* @return JsonResponse|string
|
||
*/
|
||
public function getTestResult(Request $request)
|
||
{
|
||
try {
|
||
$orderId = $request->order_id;
|
||
$result = EvaluateService::testResult($orderId);
|
||
if ($result) {
|
||
$order = TouristOrder::where('trade_no', $orderId)
|
||
->first();
|
||
if (!$order) {
|
||
return $this->failure('订单不存在');
|
||
}
|
||
$user_evaluate = UserEvaluate::where('order_id', $orderId)
|
||
->first();
|
||
if ($user_evaluate) {
|
||
if ($user_evaluate->report) {
|
||
return $this->success('ok', ['resultUrl' => $user_evaluate->report]);
|
||
} else {
|
||
$user_evaluate->report = $result;
|
||
$user_evaluate->save();
|
||
if (!json_decode($user_evaluate->evaluate_report)) {
|
||
$user_evaluate->evaluate_report = json_encode(['resultUrl' => $result]);
|
||
$user_evaluate->save();
|
||
}
|
||
return $this->success('ok', ['resultUrl' => $user_evaluate->report]);
|
||
}
|
||
} else {
|
||
//$report = EvaluateService::getYdlHtmlReport($result);
|
||
//$headers['user-agent'] = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.83 Safari/537.36';
|
||
//$headers['accept'] = 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9';
|
||
//$report = $this->curl($result.'?cps_channel_p=B.324.484.1833.18092881','GET',$headers);
|
||
return $this->success('ok', ['resultUrl' => $result]);
|
||
}
|
||
|
||
} else {
|
||
return $this->failure('接口未返回数据');
|
||
}
|
||
}catch (\Exception $e){
|
||
$this->getError($e);
|
||
return $this->failure('服务器休息中,请稍后再试');
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 查询订单评测详情
|
||
* @param Request $request
|
||
*/
|
||
public function getTestOrderDetail(Request $request)
|
||
{
|
||
try {
|
||
$orderId = $request->order_id;
|
||
$merchant_user_id = $request->merchant_user_id;
|
||
$merchant_id = $request->merchant_id;
|
||
if (!$orderId || !$merchant_user_id || !$merchant_id) {
|
||
return $this->failure('参数不全');
|
||
}
|
||
$touristOrder = TouristOrder::where('account_id', $merchant_user_id)
|
||
->where('merchant_id', $merchant_id)
|
||
->where('type', 'evaluate')
|
||
->where('trade_no', $orderId)
|
||
->first();
|
||
if (!$touristOrder) {
|
||
return $this->failure('订单号不存在');
|
||
}
|
||
$user_evaluate = UserEvaluate::where('order_id', $orderId)
|
||
->first();
|
||
if ($user_evaluate) {
|
||
$report = json_decode($user_evaluate['evaluate_report'], true);
|
||
if (!$report) {
|
||
$result = EvaluateService::testResult($touristOrder->trade_no);
|
||
$user_evaluate->evaluate_report = json_encode(['resultUrl' => $result]);
|
||
$user_evaluate->save();
|
||
}
|
||
$report = json_decode($user_evaluate->evaluate_report,true);
|
||
if(!empty($report['analysis'])){
|
||
if(!is_array($report['analysis'])){
|
||
$report['analysis'] = [$report['analysis']];
|
||
}
|
||
}
|
||
$user_evaluate['evaluate_report'] = $report;
|
||
$user_evaluate['questions'] = json_decode($user_evaluate['questions']);
|
||
$user_evaluate['answer'] = json_decode($user_evaluate['answer']);
|
||
$title = MerchantEvaluate::where('id', $touristOrder->type_id)->value('title');
|
||
$user_evaluate['title'] = $title;
|
||
} else {
|
||
$user_evaluate['evaluate_report']['resultUrl'] = EvaluateService::testResult($touristOrder->trade_no);
|
||
$user_evaluate['order_id'] = $orderId;
|
||
}
|
||
return $this->success('ok', $user_evaluate);
|
||
}catch (\Exception $e){
|
||
$this->getError($e);
|
||
return $this->failure('服务器休息中,请稍后再试');
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 获取历史查询记录
|
||
* @param Request $request
|
||
* @return JsonResponse|string
|
||
*/
|
||
public function getTestHistory(Request $request)
|
||
{
|
||
try {
|
||
$merchant_user_id = $request->merchant_user_id;
|
||
$merchant_id = $request->merchant_id;
|
||
$order = TouristOrder::with('user_evaluate:id,order_id', 'merchant_evaluate')
|
||
->whereHas('merchant_evaluate')
|
||
->where('account_id', $merchant_user_id)
|
||
->where('merchant_id', $merchant_id)
|
||
->where('type', 'evaluate')
|
||
->whereIn('pay_status', [1, 4])
|
||
->select('pay_status', 'trade_no', 'created_at', 'type_id')
|
||
->orderBy('id', "desc")
|
||
->paginate();
|
||
foreach ($order as $key => $val) {
|
||
$type = EvaluateList::where('test_item_id', $val['merchant_evaluate']['test_item_id'])
|
||
->value('type');
|
||
$val->evaluate_type = $type;
|
||
if (!$val->user_evaluate) {
|
||
//$result = EvaluateService::testResult($val->trade_no);
|
||
//if(!$result){
|
||
$order[$key]['evaluate_status'] = 2; //未完成
|
||
//}
|
||
} else {
|
||
$order[$key]['evaluate_status'] = 1; //已完成评测
|
||
}
|
||
$evaluate_detail = EvaluateDetail::where('test_item_id', $val['merchant_evaluate']['test_item_id'])
|
||
->select('title', 'subtitle', 'image', 'tabImage', 'price')
|
||
->first();
|
||
if ($evaluate_detail && $order[$key]) {
|
||
$evaluate_detail = $evaluate_detail->toArray();
|
||
$order[$key] = $order[$key]->toArray();
|
||
$order[$key] = array_merge($order[$key], $evaluate_detail);
|
||
}
|
||
|
||
}
|
||
return $this->success('ok', $order);
|
||
}catch (\Exception $e){
|
||
$this->getError($e);
|
||
return $this->failure('服务器休息中,请稍后再试');
|
||
}
|
||
}
|
||
|
||
public function getDetails(Request $request)
|
||
{
|
||
try {
|
||
$test_id = $request->test_id;
|
||
$merchant_id = $request->merchant_id;
|
||
$merchant_user_id = $request->merchant_user_id;
|
||
$merchant_evaluate = MerchantEvaluate::where('merchant_id', $merchant_id)
|
||
->withTrashed()
|
||
->where('id', $test_id)
|
||
->first();
|
||
if (!$merchant_evaluate) {
|
||
return $this->failure('商家没有这项评测服务');
|
||
}
|
||
$test_details = EvaluateDetail::where('test_item_id', $merchant_evaluate->test_item_id)
|
||
->first();
|
||
if (!$test_details) {
|
||
return $this->failure('商品不存在或已下架');
|
||
}
|
||
|
||
$merchant_user = MerchantUser::where('id', $request->merchant_user_id)->first();
|
||
//$merchant_user->preview($merchant_evaluate);
|
||
//if(config('app.env') == 'production'){
|
||
// $merchant_user->addlog($test_item);
|
||
//}
|
||
$test_details['questions'] = json_decode($test_details['questions'], true);
|
||
//查询用户有没有参加过评测
|
||
$tourist = TouristOrder::where('type', 'evaluate')
|
||
->where('type_id', $test_id)
|
||
->where('merchant_id', $merchant_id)
|
||
->where('account_id', $merchant_user_id)
|
||
->whereIn('pay_status', [1, 4])
|
||
->orderBy('id', 'desc')
|
||
->first();
|
||
if (!$tourist) {
|
||
$test_details['trade_no'] = null;
|
||
$test_details['evaluate_status'] = 1;
|
||
} else {
|
||
$user_evaluate = UserEvaluate::where('order_id', $tourist->trade_no)
|
||
->first();
|
||
if (!$user_evaluate) {
|
||
$test_details['trade_no'] = $tourist->trade_no;
|
||
$test_details['evaluate_status'] = 2;
|
||
} else {
|
||
$test_details['trade_no'] = $tourist->trade_no;
|
||
$test_details['evaluate_status'] = 1;
|
||
}
|
||
}
|
||
//优惠券
|
||
$coupons = Coupon::where('type', 'evaluate')
|
||
->where('type_id', $test_id)
|
||
->where('status', '1')
|
||
->where('m_id', $merchant_id)
|
||
->pluck('id');
|
||
$user_coupon_id = UserCoupon::where('m_user_id', $merchant_user_id)
|
||
->whereIn('coupons_id', $coupons)
|
||
->where('m_id', $merchant_id)
|
||
->where('status', 0)
|
||
->value('coupons_id');
|
||
if ($user_coupon_id) {
|
||
$test_details['coupon_id'] = $user_coupon_id;
|
||
} else {
|
||
$test_details['coupon_id'] = null;
|
||
}
|
||
$merchant_user_id = $request->merchant_user_id;
|
||
$merchant_user = MerchantUser::where('id', $merchant_user_id)->first();
|
||
$linkmen['mobile'] = '';
|
||
$linkmen['name'] = '';
|
||
if ($merchant_user) {
|
||
$test_details['share_nickname'] = $merchant_user->nickname ?? '匿名用户';
|
||
$test_details['share_avatar'] = $merchant_user->pic ?? null;
|
||
$linkmen['mobile'] = $merchant_user->mobile;
|
||
$linkmen['name'] = $merchant_user->nickname;
|
||
}
|
||
$wechatUser = session('wechat.oauth_user.new');
|
||
if ($wechatUser) {
|
||
$openid = $wechatUser->getId();
|
||
} else {
|
||
$openid = MerchantUser::where('id', $request->merchant_user_id)->value('openid');
|
||
}
|
||
$evaluate_type = EvaluateList::where('test_item_id',$merchant_evaluate->test_item_id)->value('type');
|
||
$jump_url = urlencode(env('APP_URL') . '/pu/#/evaluateDetails/' . $merchant_evaluate['id']).'?evaluate_type='.$evaluate_type;
|
||
$url = env('APP_URL') . '/api/official/live/wechat/FamilyAuth?merchant_id=' . $merchant_id . '&evaluate_type=' . $evaluate_type. '&from_openid=' . $openid . '&url=' . $jump_url;
|
||
$qr_code_url = $this->getPreviewQrcode($url);
|
||
$test_details['jump_url'] = $url;
|
||
$test_details['url'] = $qr_code_url;
|
||
$test_details['linkmen'] = $linkmen;
|
||
$test_details['visitNum'] = TouristOrder::where('type', 'evaluate')
|
||
->where('type_id', $test_id)
|
||
->whereIn('pay_status', [1, 4])
|
||
->count();
|
||
return $this->success('ok', $test_details);
|
||
} catch (\Exception $e) {
|
||
$this->getError($e);
|
||
return $this->failure('服务器休息中,请稍后再试');
|
||
}
|
||
}
|
||
|
||
public function testQuestions(Request $request, $test_id)
|
||
{
|
||
try {
|
||
$merchant_id = $request->merchant_id;
|
||
$merchant_user_id = $request->merchant_user_id;
|
||
$merchant_evaluate = MerchantEvaluate::where('merchant_id', $merchant_id)
|
||
->withTrashed()
|
||
->where('id', $test_id)
|
||
->first();
|
||
if (!$merchant_evaluate) return $this->failure('商家没有这项评测服务');
|
||
$test_detail = EvaluateDetail::where('test_item_id', $merchant_evaluate->test_item_id)
|
||
->first();
|
||
if (!$test_detail) throw new \Exception("测试不存在");
|
||
$questions = json_decode($test_detail->questions, true);
|
||
$test_item_id = $test_detail->test_item_id;
|
||
if ($test_item_id == 10007) {
|
||
//题目重组
|
||
$questions = $this->regroupQuestions($questions);
|
||
}
|
||
$trade_no = TouristOrder::where('type', 'evaluate')
|
||
->where('type_id', $test_id)
|
||
->where('merchant_id', $merchant_id)
|
||
->where('account_id', $merchant_user_id)
|
||
->whereIn('pay_status', [1, 4])
|
||
->orderBy('id', 'desc')
|
||
->value('trade_no');
|
||
return $this->success('ok', compact('questions','test_item_id', 'trade_no'));
|
||
}catch (\Exception $e) {
|
||
$this->getError($e);
|
||
$this->failure();
|
||
}
|
||
}
|
||
|
||
public function regroupQuestions($questions)
|
||
{
|
||
$arr = [];
|
||
for ($index = 1; $index <= count($questions); $index++) {
|
||
unset($questions[$index-1]['answer']);
|
||
// dd((int)ceil(($index / 4)) - 1);
|
||
$questions[$index-1]['row_id'] = (int)ceil(($index / 4));
|
||
$arr [(int)ceil(($index / 4)) - 1][] = $questions[$index-1];
|
||
}
|
||
return $arr;
|
||
}
|
||
|
||
public function commitDISC(Request $request)
|
||
{
|
||
try {
|
||
$trade_no = $request->input('trade_no');
|
||
$merchant_user_id = $request->merchant_user_id;
|
||
$merchant_id = $request->merchant_id;
|
||
$test_item_id = $request->input('test_item_id');
|
||
$answers = $request->input("answers");
|
||
$test_id = $request->input('test_id');
|
||
if (empty($test_item_id) || $test_item_id != 10007) throw new \Exception("缺少test_item_id");
|
||
//写用户评测结果表
|
||
$tourist_order = TouristOrder::where('trade_no', $trade_no)
|
||
->where('account_id', $merchant_user_id)
|
||
->where('merchant_id', $merchant_id)
|
||
->where('type', 'evaluate')
|
||
->where('type_id', $test_id)
|
||
->whereIn('pay_status', [1, 4])
|
||
->first();
|
||
if ($tourist_order) {
|
||
$userEvaluate = UserEvaluate::where('order_id', $trade_no)
|
||
->first();
|
||
if (!$userEvaluate) {
|
||
$merchant_eval = MerchantEvaluate::where("id", $tourist_order->type_id)->first();
|
||
|
||
$question = EvaluateDetail::where('test_item_id', $merchant_eval->test_item_id)
|
||
->value('questions');
|
||
$userEvaluate = new UserEvaluate();
|
||
$userEvaluate->order_id = $trade_no;
|
||
$userEvaluate->questions = $question;
|
||
$userEvaluate->price = $tourist_order->price;
|
||
$userEvaluate->answer = $answers;
|
||
$userEvaluate->evaluate_report = EvaluateService::commitDISC($answers);
|
||
$userEvaluate->save();
|
||
|
||
}
|
||
return $this->success('ok', $userEvaluate['evaluate_report']);
|
||
|
||
} else {
|
||
return $this->failure('订单不存在');
|
||
}
|
||
}catch (\Exception $e) {
|
||
$this->getError($e);
|
||
return $this->failure();
|
||
}
|
||
|
||
}
|
||
|
||
|
||
/**
|
||
* 获取用户评测详情
|
||
* @param Request $request
|
||
* @return JsonResponse|string
|
||
*/
|
||
public function getUserEvaluate(Request $request){
|
||
$order_id = $request->order_id;
|
||
if(config('app.debug')){
|
||
if(!$order_id){
|
||
return $this->failure('订单号必传');
|
||
}
|
||
}
|
||
$order = TouristOrder::where('trade_no',$order_id)->first();
|
||
$details = UserEvaluate::where('order_id',$order_id)->select('id','order_id','answer','report')
|
||
->first();
|
||
if(!$details){
|
||
return $this->failure('评测不存在');
|
||
}
|
||
$details->answer = json_decode($details->answer);
|
||
$details->evaluate_report = json_decode($details->evaluate_report);
|
||
foreach ($details->answer as $key => $val){
|
||
$user_question = EvaluateQuestion::where('id',$val->questionId)->value('question_name');
|
||
$user_answer = EvaluateAnswer::where('id',$val->answerId)->value('content');
|
||
$val->user_question = $user_question;
|
||
$val->user_answer = $user_answer;
|
||
}
|
||
$url = env('APP_URL') . '/pu/#/reviewResults/'.$order_id.'?merchant_id='.$order->merchant_id;
|
||
$qr_code_url = $this->getPreviewQrcode($url);
|
||
$details->jump_ur = $url;
|
||
$details->url = $qr_code_url;
|
||
return $this->success('ok',$details);
|
||
}
|
||
|
||
}
|