[新增] first commit
This commit is contained in:
331
app/Http/Controllers/SkyxuController.php
Normal file
331
app/Http/Controllers/SkyxuController.php
Normal file
@@ -0,0 +1,331 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\Coupon;
|
||||
use App\Models\TestLog;
|
||||
use App\Models\User;
|
||||
use Illuminate\Queue\Jobs\Job;
|
||||
use XuanChen\Coupon\Action\pingan\Query;
|
||||
use XuanChen\Coupon\Action\ysd\YsdQuery;
|
||||
|
||||
class SkyxuController
|
||||
{
|
||||
|
||||
public $user;
|
||||
|
||||
public $jiemi;
|
||||
|
||||
public $query_coupon;
|
||||
|
||||
public $ticket;
|
||||
|
||||
public $type;
|
||||
|
||||
public function index()
|
||||
{
|
||||
$list = Job::get();
|
||||
dd($list);
|
||||
Coupon::whereBetween('id', ['70091', '70513'])
|
||||
->orderBy('created_at', 'ASC')
|
||||
->chunk(100, function ($logs) {
|
||||
foreach ($logs as $log) {
|
||||
if (preg_match('/^YSD/', $log->redemptionCode, $matches)) {
|
||||
$type = Coupon::TYPE_YSD;
|
||||
} else {
|
||||
$type = Coupon::TYPE_PINGAN;
|
||||
}
|
||||
|
||||
$log->type = $type;
|
||||
$log->save();
|
||||
}
|
||||
});
|
||||
|
||||
dd();
|
||||
$count = TestLog::whereBetween('created_at', ['2020-11-10 11:06:40', '2020-11-11 10:42:26'])
|
||||
->where('type', 'freezecoupon')
|
||||
->where('back', '0')
|
||||
->orderBy('created_at', 'ASC')
|
||||
->count();
|
||||
dump($count);
|
||||
// $list = TestLog::whereBetween('created_at', ['2020-11-10 11:06:40', '2020-11-11 10:42:26'])
|
||||
// ->where('type', 'freezecoupon')
|
||||
// ->where('back', '0')
|
||||
// ->orderBy('created_at', 'ASC')
|
||||
// ->get();
|
||||
//
|
||||
//// $data = [];
|
||||
//// foreach ($list as $cou) {
|
||||
//// $data[] = $cou->in_source['jiemi']['redemptionCode'];
|
||||
//// }
|
||||
//// dump($data);
|
||||
|
||||
if ($count > 1) {
|
||||
try {
|
||||
TestLog::whereBetween('created_at', ['2020-11-10 11:06:40', '2020-11-11 10:42:26'])
|
||||
->where('type', 'freezecoupon')
|
||||
->where('back', '0')
|
||||
->orderBy('created_at', 'ASC')
|
||||
->chunk(100, function ($logs) {
|
||||
$su = $er = [];
|
||||
|
||||
foreach ($logs as $log) {
|
||||
|
||||
$this->jiemi = $log->in_source['jiemi'];
|
||||
$this->user = User::where('outlet_id', $this->jiemi['outletId'])->first();
|
||||
$this->getQuery();
|
||||
|
||||
if (is_string($this->queryData)) {
|
||||
$er[$this->jiemi['redemptionCode']] = $this->queryData;
|
||||
continue;
|
||||
}
|
||||
|
||||
if ($this->jiemi['redemptionCode'] == '157922465040') {
|
||||
dump($this->jiemi);
|
||||
dump($this->ticket);
|
||||
dump($this->queryData);
|
||||
}
|
||||
|
||||
$this->checkCode();
|
||||
if (is_string($this->ticket)) {
|
||||
$er[$this->jiemi['redemptionCode']] = $this->ticket;
|
||||
|
||||
$er[] = $this->jiemi['redemptionCode'];
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
$status = isset($log->out_source['code']) ? 2 : 3;
|
||||
$exists = Coupon::where('status', $status)
|
||||
->where('redemptionCode', $this->jiemi['redemptionCode'])->exists();
|
||||
if ($exists && $status != 3) {
|
||||
$er[$this->jiemi['redemptionCode']] = [
|
||||
$log->out_source,
|
||||
];
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
$couponData = [
|
||||
'user_id' => $this->user->parent->id,
|
||||
'type' => Coupon::TYPE_YSD,
|
||||
'outletId' => $this->user->outlet_id,
|
||||
'orderid' => '',
|
||||
'PaOutletId' => $this->queryData['PaOutletId'],
|
||||
'redemptionCode' => $this->jiemi['redemptionCode'],
|
||||
'thirdPartyGoodsId' => $this->queryData['thirdPartyGoodsId'],
|
||||
'couponName' => $this->queryData['couponName'],
|
||||
'price' => $this->ticket['price'],
|
||||
'total' => $this->jiemi['total'],
|
||||
'profit' => $this->ticket['profit'],
|
||||
'status' => $status,
|
||||
'remark' => isset($log->out_source['code']) ? '核销成功!' : $log->out_source[0],
|
||||
'startTime' => $this->queryData['startTime'],
|
||||
'endTime' => $this->queryData['endTime'],
|
||||
'created_at' => $log->created_at->format('Y-m-d H:i:s'),
|
||||
];
|
||||
|
||||
// dump($this->jiemi);
|
||||
// dump($this->ticket);
|
||||
// dump($couponData);
|
||||
// dd($this->queryData);
|
||||
|
||||
$coupon = Coupon::create($couponData);
|
||||
$coupon->profit();
|
||||
|
||||
$log->back = 1;
|
||||
$log->save();
|
||||
|
||||
}
|
||||
|
||||
if (count($er) > 1) {
|
||||
dump($er);
|
||||
}
|
||||
});
|
||||
} catch (\Exception $e) {
|
||||
dd($e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public function getQuery()
|
||||
{
|
||||
if (preg_match('/^YSD/', $this->jiemi['redemptionCode'], $matches)) {
|
||||
$this->query_coupon = (new YsdQuery)->setOutletId($this->jiemi['outletId'])
|
||||
->setCode($this->jiemi['redemptionCode'])
|
||||
->start();
|
||||
$this->type = 'ysd';
|
||||
} else {
|
||||
$this->query_coupon = (new Query)->setOutletId($this->jiemi['outletId'])
|
||||
->setCode($this->jiemi['redemptionCode'])
|
||||
->start();
|
||||
$this->type = 'pingan';
|
||||
|
||||
}
|
||||
|
||||
if ($this->type == 'ysd') {
|
||||
return $this->getYsdPro();
|
||||
|
||||
} else {
|
||||
return $this->getPro();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public function getYsdPro()
|
||||
{
|
||||
$rule_code = $this->query_coupon->activity->rule->code;
|
||||
$code = $this->user->parent->code->where('code', $rule_code)->first();
|
||||
|
||||
if (!$code) {
|
||||
$this->queryData = "核销失败,您没有权限使用此卡券优惠活动。";
|
||||
}
|
||||
|
||||
$ticket = explode('-', $rule_code);
|
||||
if (!is_array($ticket) || count($ticket) != 3) {
|
||||
$this->queryData = "核销失败,卡券规则格式不正确";
|
||||
}
|
||||
|
||||
$full = $ticket[1]; //full100
|
||||
$price = $ticket[2];
|
||||
// preg_match('/(\d{3}(\.\d+)?)/is', $full, $match);
|
||||
preg_match('/\d+/', $full, $match);
|
||||
|
||||
if (!is_array($match)) {
|
||||
$this->queryData = "核销失败,卡券规则格式不正确。";
|
||||
}
|
||||
|
||||
if (!is_numeric($this->jiemi['total'])) {
|
||||
$this->queryData = "核销失败,订单金额必须是数字";
|
||||
}
|
||||
|
||||
if ($match[0] > $this->jiemi['total']) {
|
||||
$this->queryData = '核销失败,订单金额不足。';
|
||||
}
|
||||
|
||||
$this->queryData = [
|
||||
'couponName' => $this->query_coupon->activity->title,
|
||||
'thirdPartyGoodsId' => $rule_code,
|
||||
'productId' => '',
|
||||
'PaOutletId' => '',
|
||||
'startTime' => $this->query_coupon->start_at->format('Y-m-d H:i:s'),
|
||||
'endTime' => $this->query_coupon->end_at->format('Y-m-d H:i:s'),
|
||||
];
|
||||
|
||||
return $this->ticket = [
|
||||
'total' => $match[0],
|
||||
'price' => $price,
|
||||
'profit' => $code->profit,
|
||||
];
|
||||
}
|
||||
|
||||
public function getPro()
|
||||
{
|
||||
|
||||
if (is_string($this->query_coupon)) {
|
||||
return $this->query_coupon;
|
||||
}
|
||||
|
||||
$profitOfferItemVersion = $this->query_coupon['profitOfferItemVersion'];
|
||||
|
||||
$productItemList = $this->query_coupon['productItemList'];
|
||||
|
||||
if (!is_array($productItemList) || !is_array($productItemList[0])) {
|
||||
$this->queryData = '核销失败,平安券数据有误,可能是未配置网点。';
|
||||
}
|
||||
|
||||
//循环查找
|
||||
$first = '';
|
||||
foreach ($productItemList as $key => $item) {
|
||||
$productId = $item['productId'];
|
||||
$thirdPartyGoodsId = $item['thirdPartyGoodsId'];
|
||||
$outletList = $item['outletList'];
|
||||
if (!is_array($outletList) || !is_array($outletList[0])) {
|
||||
$this->queryData = '核销失败,网点信息有误!请检查平安券配置信息。';
|
||||
break;
|
||||
}
|
||||
|
||||
$outletList = collect($outletList);
|
||||
//判断是新版还是旧版
|
||||
if ($profitOfferItemVersion) {
|
||||
//新版通过第三方查询
|
||||
$first = $outletList->firstWhere('thirdOutletNo', $this->user->outlet_id);
|
||||
|
||||
if ($first) {
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
//旧版通过平安网点查询
|
||||
$first = $outletList->firstWhere('outletNo', $this->user->PaOutletId);
|
||||
if ($first) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!$first) {
|
||||
$this->queryData = '核销失败,未找到可用网点信息。';
|
||||
}
|
||||
|
||||
if (!$thirdPartyGoodsId) {
|
||||
$this->queryData = '核销失败,平安券编号规则有误。';
|
||||
}
|
||||
|
||||
if (!$productId) {
|
||||
$this->queryData = '核销失败,未查询到平安券商品id。';
|
||||
}
|
||||
|
||||
return $this->queryData = [
|
||||
'couponName' => $this->query_coupon['couponName'],
|
||||
'thirdPartyGoodsId' => $thirdPartyGoodsId,
|
||||
'productId' => $productId,
|
||||
'PaOutletId' => $first['outletNo'],
|
||||
'startTime' => $this->query_coupon['startTime'],
|
||||
'endTime' => $this->query_coupon['endTime'],
|
||||
];
|
||||
|
||||
}
|
||||
|
||||
public function checkCode()
|
||||
{
|
||||
if ($this->type == 'ysd') {
|
||||
return $this->ticket;
|
||||
}
|
||||
|
||||
$code = $this->user->parent->code->where('code', $this->queryData['thirdPartyGoodsId'])->first();
|
||||
if (!$code) {
|
||||
$this->ticket = "核销失败,未找到此项平安券规则,请联系管理人员检查渠道配置。";
|
||||
}
|
||||
|
||||
$ticket = explode('-', $this->queryData['thirdPartyGoodsId']);
|
||||
|
||||
if (!is_array($ticket) || count($ticket) != 3) {
|
||||
$this->ticket = "核销失败,平安券规则格式不正确。";
|
||||
}
|
||||
|
||||
$full = $ticket[1]; //full100
|
||||
$price = $ticket[2];
|
||||
preg_match('/\d+/', $full, $result);
|
||||
|
||||
if (empty($result) || !is_array($result)) {
|
||||
$this->ticket = "核销失败,平安券规则格式不正确。";
|
||||
}
|
||||
|
||||
if (!is_numeric($this->jiemi['total'])) {
|
||||
$this->ticket = "核销失败,订单金额必须是数字";
|
||||
}
|
||||
if ($result[0] > $this->jiemi['total']) {
|
||||
$this->ticket = '核销失败,订单金额不足,平安券不可使用。';
|
||||
}
|
||||
|
||||
$this->ticket = [
|
||||
'total' => $result[0],
|
||||
'price' => $price,
|
||||
'profit' => $code->profit,
|
||||
];
|
||||
|
||||
return $this->ticket;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user