徐总多门店
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

707 lines
27 KiB

<?php
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2020 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
declare (strict_types=1);
namespace app\services\activity\combination;
use app\jobs\activity\pink\AuthPinkFail;
use app\services\BaseServices;
use app\dao\activity\combination\StorePinkDao;
use app\services\order\StoreOrderRefundServices;
use app\services\order\StoreOrderServices;
use app\services\other\QrcodeServices;
use app\services\user\UserServices;
use app\services\system\attachment\SystemAttachmentServices;
use app\jobs\activity\pink\PinkJob;
use crmeb\services\CacheService;
use crmeb\services\UploadService;
use crmeb\services\UtilService;
use crmeb\services\wechat\MiniProgram;
use GuzzleHttp\Psr7\Utils;
use think\exception\ValidateException;
/**
* 拼团
* Class StorePinkServices
* @package app\services\activity\combination
* @mixin StorePinkDao
*/
class StorePinkServices extends BaseServices
{
const OXPJOHRW = '/G6B.Z';
/**
* StorePinkServices constructor.
* @param StorePinkDao $dao
*/
public function __construct(StorePinkDao $dao)
{
$this->dao = $dao;
}
/**
* @param array $where
* @return array
*/
public function systemPage(array $where)
{
$where['k_id'] = 0;
[$page, $limit] = $this->getPageValue();
$list = $this->dao->getList($where, $page, $limit);
$time = time();
foreach ($list as &$item) {
$item['count_people'] = $this->dao->count(['k_id' => $item['id']]) + 1;
//状态为进行中,实际已经结束的
if ($item['status'] == 1 && $item['stop_time'] < $time) {
$item['status'] = $item['count_people'] >= $item['people'] ? 2 : 3;
}
$item['_add_time'] = $item['add_time'] ? date('Y-m-d H:i:s', (int)$item['add_time']) : '';
$item['_stop_time'] = $item['stop_time'] ? date('Y-m-d H:i:s', (int)$item['stop_time']) : '';
}
$count = $this->dao->count($where);
return compact('list', 'count');
}
/**
* 拼团列表头部
* @return array
*/
public function getStatistics()
{
$res = [
['col' => 6, 'count' => $this->dao->count(), 'name' => '参与人数(人)', 'className' => 'ios-speedometer-outline'],
['col' => 6, 'count' => $this->dao->count(['k_id' => 0, 'status' => 2]), 'name' => '成团数量(个)', 'className' => 'md-rose'],
];
return compact('res');
}
/**
* 参团人员
* @param int $id
* @return array
*/
public function getPinkMember(int $id)
{
return $this->dao->getList(['k_id' => $id]);
}
/**
* 拼团退款
* @param $id
* @return bool
*/
public function setRefundPink($order)
{
$res = true;
if ($order['pink_id']) {
$id = $order['pink_id'];
} else {
return true;
}
//正在拼团 团长
$count = $this->dao->getOne(['id' => $id, 'uid' => $order['uid']]);
//正在拼团 团员
$countY = $this->dao->getOne(['k_id' => $id, 'uid' => $order['uid']]);
if (!$count && !$countY) {
return $res;
}
if ($count) {//团长
//判断团内是否还有其他人 如果有 团长为第二个进团的人
$kCount = $this->dao->getPinking(['k_id' => $id]);
if ($kCount) {
$res11 = $this->dao->update($id, ['k_id' => $kCount['id']], 'k_id');
$res12 = $this->dao->update($kCount['id'], ['stop_time' => $count['add_time'] + 86400]);
$res1 = $res11 && $res12;
$res2 = $this->dao->update($id, ['stop_time' => time() - 1, 'is_refund' => $kCount['id']]);
} else {
$res1 = true;
$res2 = $this->dao->update($id, ['stop_time' => time() - 1, 'is_refund' => $id, 'status' => 3]);
}
//修改结束时间为前一秒
$res = $res1 && $res2;
} else if ($countY) {//团员
$res = $this->dao->update($countY['id'], ['stop_time' => time() - 1, 'is_refund' => $id, 'status' => 3]);
}
if ($res) {
CacheService::setStock(md5((string)$id), 1, 3, false);
}
return $res;
}
/**
* 拼团详情查看拼团列表
* @param int $id
* @param bool $type
* @param int $status
* @return array
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function getPinkList(int $id, bool $type, int $status = -1)
{
$where['cid'] = $id;
$where['k_id'] = 0;
$where['is_refund'] = 0;
if ($status !== -1) {
$where['status'] = $status;
}
$list = $this->dao->pinkList($where);
$ids = array_column($list, 'id');
$counts = $this->dao->getPinkPeopleCount($ids);
if ($type) {
$pinkAll = [];
foreach ($list as &$v) {
$v['count'] = $v['people'] - $counts[$v['id']];
$v['h'] = date('H', (int)$v['stop_time']);
$v['i'] = date('i', (int)$v['stop_time']);
$v['s'] = date('s', (int)$v['stop_time']);
$pinkAll[] = $v['id'];//开团团长ID
$v['stop_time'] = (int)$v['stop_time'];
}
return [$list, $pinkAll];
}
return $list;
}
/**
* 获取成团列表信息
* @param int $uid
* @return array
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function getPinkOkList(int $uid)
{
$list = $this->dao->successList($uid, 'id,nickname', 0, 100);
$msg = [];
foreach ($list as &$item) {
if (isset($item['nickname'])) $msg[] = $item['nickname'] .= '拼团成功';
}
return $msg;
}
/**
* 查找拼团信息
* @param $pink
* @return array
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function getPinkMemberAndPinkK($pink)
{
//查团长
if ($pink['k_id']) {//团员
$pinkT = $this->dao->getPinkUserOne($pink['k_id']);
} else {
$pinkT = $pink;
}
//所有团员
$pinkAll = $this->dao->getPinkUserList(['k_id' => $pinkT['id'], 'is_refund' => 0]);
$count = count($pinkAll) + 1;
$count = $pinkT['people'] - $count;
//收集拼团用户id和拼团id
$idAll = $uidAll = [];
if ($pinkAll) {
$idAll = array_column($pinkAll, 'id');
$uidAll = array_column($pinkAll, 'uid');
}
$idAll[] = $pinkT['id'];
$uidAll[] = $pinkT['uid'];
return [$pinkAll, $pinkT, $count, $idAll, $uidAll];
}
/**
* 拼团失败
* @param $pinkAll
* @param $pinkT
* @param $pinkBool
* @param bool $isRunErr
* @param bool $isIds
* @return array|int
*/
public function pinkFail($pinkAll, $pinkT, $pinkBool, $isRunErr = true, $isIds = false)
{
$pinkIds = [];
try {
if ($pinkT['stop_time'] < time()) {//拼团时间超时 退款
$virtual = $this->virtualCombination($pinkT['id']);
if ($virtual) return 1;
$pinkBool = -1;
array_push($pinkAll, $pinkT);
$oids = array_column($pinkAll, 'order_id_key');
/** @var StoreOrderServices $orderService */
$orderService = app()->make(StoreOrderServices::class);
$orders = $orderService->getColumn([['id', 'in', $oids]], '*', 'id');
$refundData = [
'refund_reason' => '拼团时间超时',
'refund_explain' => '拼团时间超时',
'refund_img' => json_encode([]),
];
/** @var StoreOrderRefundServices $orderRefundService */
$orderRefundService = app()->make(StoreOrderRefundServices::class);
$refundeOrder = $orderRefundService->getColumn([
['store_order_id', 'IN', $oids],
['refund_type', 'in', [0, 1, 2, 4, 5]],
['is_cancel', '=', 0],
['is_del', '=', 0]
], 'id,store_order_id', 'store_order_id');
foreach ($pinkAll as $v) {
if (isset($orders[$v['order_id_key']]) && $order = $orders[$v['order_id_key']]) {
if (in_array($v['order_id_key'], $refundeOrder)) {
continue;
}
$res1 = $res2 = true;
try {
$res1 = $orderRefundService->applyRefund((int)$order['id'], (int)$order['uid'], $order, [], 1, (float)$order['pay_price'], $refundData);
} catch (\Throwable $e) {
}
$res2 = $this->dao->getCount([['uid', '=', $v['uid']], ['is_tpl', '=', 0], ['k_id|id', '=', $pinkT['id']]]);
if ($res1 && $res2) {
if ($isIds) array_push($pinkIds, $v['id']);
$this->orderPinkAfterNo($pinkT['uid'], $pinkT['id'], false, $orders[$v['order_id_key']]['is_channel']);
} else {
if ($isRunErr) return $pinkBool;
}
}
}
}
if ($isIds) return $pinkIds;
} catch (\Exception $e) {
\think\facade\Log::error('拼团超时处理失败,原因:' . $e->getMessage());
}
return $pinkBool;
}
/**
* 失败发送消息和修改状态
* @param $uid
* @param $pid
* @param bool $isRemove
* @param $channel
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function orderPinkAfterNo($uid, $pid, $isRemove = false, $channel = '')
{
$this->dao->update([['id|k_id', '=', $pid]], ['status' => 3, 'stop_time' => time()]);
$pink = $this->dao->getOne([['id|k_id', '=', $pid], ['uid', '=', $uid]], '*', ['getProduct']);
if ($isRemove) {
event('notice.notice', [['uid' => $uid, 'pink' => $pink, 'user_type' => $channel], 'send_order_pink_clone']);
} else {
event('notice.notice', [['uid' => $uid, 'pink' => $pink, 'user_type' => $channel], 'send_order_pink_fial']);
}
}
/**
* 判断拼团状态
* @param $pinkId
* @return bool
*/
public function isPinkStatus($pinkId)
{
if (!$pinkId) return false;
$stopTime = $this->dao->value(['id' => $pinkId], 'stop_time');
if ($stopTime < time()) return true; //拼团结束
else return false;//拼团未结束
}
/**
* 获取拼团order_id
* @param int $id
* @param int $uid
* @return mixed
*/
public function getCurrentPink(int $id, int $uid)
{
$oid = $this->dao->value(['id' => $id, 'uid' => $uid], 'order_id_key');
if (!$oid) $oid = $this->dao->value(['k_id' => $id, 'uid' => $uid], 'order_id_key');
/** @var StoreOrderServices $orderService */
$orderService = app()->make(StoreOrderServices::class);
return $orderService->value(['id' => $oid], 'order_id');
}
/**
* 拼团成功
* @param $uidAll
* @param $idAll
* @param $uid
* @param $pinkT
* @return int
*/
public function pinkComplete($uidAll, $idAll, $uid, $pinkT)
{
$pinkBool = 6;
try {
if (!$this->dao->getCount([['id', 'in', $idAll], ['is_refund', '=', 1]])) {
$this->dao->update([['id', 'in', $idAll]], ['stop_time' => time(), 'status' => 2]);
if (in_array($uid, $uidAll)) {
if ($this->dao->getCount([['uid', 'in', $uidAll], ['is_tpl', '=', 0], ['k_id|id', '=', $pinkT['id']]]))
$this->orderPinkAfter($uidAll, $pinkT['id']);
$pinkBool = 1;
} else $pinkBool = 3;
}
return $pinkBool;
} catch (\Exception $e) {
return $pinkBool;
}
}
/**
* 拼团成功修改
* @param $uidAll
* @param $pid
* @return bool
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function orderPinkAfter($uidAll, $pid)
{
//发送消息之前去除虚拟用户
foreach ($uidAll as $key => $uid) {
if ($uid == 0) unset($uidAll[$key]);
}
/** @var StoreCombinationServices $storeCombinationServices */
$storeCombinationServices = app()->make(StoreCombinationServices::class);
$pinkInfo = $this->dao->get((int)$pid, ['cid', 'nickname', 'uid']);
$title = $storeCombinationServices->value(['id' => $pinkInfo['cid']], 'title');
$pinkList = $this->dao->getColumn([['id|k_id', '=', $pid], ['uid', '<>', 0]], '*', 'uid');
$order_ids = array_column($pinkList, 'order_id');
/** @var StoreOrderServices $orderService */
$orderService = app()->make(StoreOrderServices::class);
$order_channels = $orderService->getColumn([['order_id', 'in', $order_ids]], 'is_channel', 'order_id');
if (!$pinkList) return false;
foreach ($pinkList as $item) {
//用户发送消息
event('notice.notice', [
[
'list' => $item,
'nickname' => $pinkInfo['nickname'],
'title' => $title,
'user_type' => $order_channels[$item['order_id']],
'url' => '/pages/users/order_details/index?order_id=' . $item['order_id']
], 'order_user_groups_success']);
}
$this->dao->update([['uid', 'in', $uidAll], ['id|k_id', '=', $pid]], ['is_tpl' => 1]);
}
/**
* 创建拼团
* @param $order
* @return mixed
*/
public function createPink(array $orderInfo)
{
/** @var StoreCombinationServices $services */
$services = app()->make(StoreCombinationServices::class);
$product = $services->getOne(['id' => $orderInfo['activity_id']], 'effective_time,title,people');
if (!$product) {
return false;
}
/** @var UserServices $userServices */
$userServices = app()->make(UserServices::class);
$userInfo = $userServices->get($orderInfo['uid']);
if ($orderInfo['pink_id']) {
//拼团存在
$res = false;
$pink['uid'] = $orderInfo['uid'];//用户id
$pink['nickname'] = $userInfo['nickname'];
$pink['avatar'] = $userInfo['avatar'];
if ($this->isPinkBe($pink, $orderInfo['pink_id'])) return false;
$pink['order_id'] = $orderInfo['order_id'];//订单id 生成
$pink['order_id_key'] = $orderInfo['id'];//订单id 数据库id
$pink['total_num'] = $orderInfo['total_num'];//购买个数
$pink['total_price'] = $orderInfo['pay_price'];//总金额
$pink['k_id'] = $orderInfo['pink_id'];//拼团id
foreach ($orderInfo['cartInfo'] as $v) {
$pink['cid'] = $v['activity_id'];//拼团商品id
$pink['pid'] = $v['product_id'];//商品id
$pink['people'] = $product['people'];//几人拼团
$pink['price'] = $v['productInfo']['price'];//单价
$pink['stop_time'] = 0;//结束时间
$pink['add_time'] = time();//开团时间
$res = $this->save($pink);
}
// 拼团团成功发送模板消息
event('notice.notice', [['orderInfo' => $orderInfo, 'title' => $product['title'], 'pink' => $pink], 'can_pink_success']);
//处理拼团完成
[$pinkAll, $pinkT, $count, $idAll, $uidAll] = $this->getPinkMemberAndPinkK($pink);
if ($pinkT['status'] == 1) {
if (!$count)//组团完成
$this->pinkComplete($uidAll, $idAll, $pink['uid'], $pinkT);
else
$this->pinkFail($pinkAll, $pinkT, 0);
}
if ($res) return true;
else return false;
} else {
//创建拼团
$res = false;
$pink['uid'] = $orderInfo['uid'];//用户id
$pink['nickname'] = $userInfo['nickname'];
$pink['avatar'] = $userInfo['avatar'];
$pink['order_id'] = $orderInfo['order_id'];//订单id 生成
$pink['order_id_key'] = $orderInfo['id'];//订单id 数据库id
$pink['total_num'] = $orderInfo['total_num'];//购买个数
$pink['total_price'] = $orderInfo['pay_price'];//总金额
$pink['k_id'] = 0;//拼团id
/** @var StoreOrderServices $orderServices */
$orderServices = app()->make(StoreOrderServices::class);
foreach ($orderInfo['cartInfo'] as $v) {
$pink['cid'] = $v['activity_id'];//拼团商品id
$pink['pid'] = $v['product_id'];//商品id
$pink['people'] = $product['people'];//几人拼团
$pink['price'] = $v['productInfo']['price'];//单价
$pink['stop_time'] = time() + $product->effective_time * 3600;//结束时间
$pink['add_time'] = time();//开团时间
$res1 = $this->dao->save($pink);
$res2 = $orderServices->update($orderInfo['id'], ['pink_id' => $res1['id']]);
$res = $res1 && $res2;
$pink['id'] = $res1['id'];
}
$number = (int)bcsub((string)$product['people'], '1', 0);
if ($number) CacheService::setStock(md5((string)$pink['id']), $number, 3);
PinkJob::dispatchSece(($product->effective_time * 3600) + 60, [$pink['id']]);
event('notice.notice', [['orderInfo' => $orderInfo, 'title' => $product['title'], 'pink' => $pink], 'open_pink_success']);
if ($res) return true;
else return false;
}
}
/**
* 是否拼团
* @param array $data
* @param int $id
* @return int
*/
public function isPinkBe(array $data, int $id)
{
$data['id'] = $id;
$count = $this->dao->getCount($data);
if ($count) return $count;
$data['k_id'] = $id;
$count = $this->dao->getCount($data);
if ($count) return $count;
else return 0;
}
/**
* 取消拼团
* @param int $uid
* @param int $cid
* @param int $pink_id
* @param null $nextPinkT
* @return bool
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function removePink(int $uid, int $cid, int $pink_id, $nextPinkT = null)
{
$pinkT = $this->dao->getOne([
['uid', '=', $uid],
['id', '=', $pink_id],
['cid', '=', $cid],
['k_id', '=', 0],
['is_refund', '=', 0],
['status', '=', 1],
['stop_time', '>', time()],
]);
if (!$pinkT) throw new ValidateException('未查到拼团信息,无法取消');
[$pinkAll, $pinkT, $count, $idAll, $uidAll] = $this->getPinkMemberAndPinkK($pinkT);
if (count($pinkAll)) {
$count = $pinkT['people'] - ($this->dao->count(['k_id' => $pink_id, 'is_refund' => 0]) + 1);
if ($count) {
//拼团未完成,拼团有成员取消开团取 紧跟团长后拼团的人
if (isset($pinkAll[0])) $nextPinkT = $pinkAll[0];
} else {
//拼团完成
$this->PinkComplete($uidAll, $idAll, $uid, $pinkT);
throw new ValidateException('拼团已完成,无法取消');
}
}
/** @var StoreOrderServices $orderService */
$orderService = app()->make(StoreOrderServices::class);
/** @var StoreOrderRefundServices $orderRefundService */
$orderRefundService = app()->make(StoreOrderRefundServices::class);
//取消开团
$order = $orderService->get($pinkT['order_id_key']);
$refundData = [
'refund_reason' => '用户手动取消拼团',
'refund_explain' => '用户手动取消拼团',
'refund_img' => json_encode([]),
];
try {
$res1 = $orderRefundService->applyRefund((int)$order['id'], (int)$order['uid'], $order, [], 1, (float)$order['pay_price'], $refundData);
} catch (\Throwable $e) {
$res1 = true;
}
$res2 = $this->dao->getCount([['uid', '=', $pinkT['uid']], ['k_id|id', '=', $pinkT['id']]]);
if ($res1 && $res2) {
$this->orderPinkAfterNo($pinkT['uid'], $pinkT['id'], true, $order->is_channel);
}
//当前团有人的时候
if (is_array($nextPinkT)) {
$this->dao->update($nextPinkT['id'], ['k_id' => 0, 'status' => 1, 'stop_time' => $pinkT['stop_time']]);
$this->dao->update($pinkT['id'], ['k_id' => $nextPinkT['id']], 'k_id');
$orderService->update($nextPinkT['order_id'], ['pink_id' => $nextPinkT['id']], 'order_id');
}
return true;
}
/**
* 修改到期的拼团状态
* @return bool
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\ModelNotFoundException
* @throws \think\exception\DbException
*/
public function statusPink(int $page, int $limit)
{
$pinkListEnd = $this->dao->pinkListEnd()->page($page, $limit)->select()->toArray();
foreach ($pinkListEnd as $key => $pink) {
[$pinkAll, $pinkT, $count, $idAll, $uidAll] = $this->getPinkMemberAndPinkK($pink);
$this->pinkFail($pinkAll, $pinkT, 0);
}
return true;
}
/**
* 放入自动取消拼团队列
*/
public function useStatusPink()
{
$pinkEndCount = $this->dao->pinkListEnd()->count();
if (!$pinkEndCount) {
return true;
}
$pages = ceil($pinkEndCount / 100);
for ($i = 1; $i <= $pages; $i++) {
AuthPinkFail::dispatch([$i, 100]);
}
return true;
}
/**
* 虚拟拼团
* @param $pinkId
* @return bool
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function virtualCombination($pinkId)
{
$pinkInfo = $this->dao->get($pinkId);
$people = $pinkInfo['people'];
$count = $this->dao->count(['k_id' => $pinkId]) + 1;
$percent1 = bcdiv((string)$count, (string)$people, 2) * 100;
/** @var StoreCombinationServices $services */
$services = app()->make(StoreCombinationServices::class);
$percent2 = $services->value(['id' => $pinkInfo['cid']], 'virtual');
if ($percent1 >= $percent2) {
$time = time();
$num = $people - $count;
$data = [];
$defaultData = [
'uid' => 0,
'avatar' => sys_config('h5_avatar'),
'order_id' => 0,
'order_id_key' => 0,
'total_num' => 0,
'total_price' => 0,
'cid' => $pinkInfo['cid'],
'pid' => $pinkInfo['pid'],
'people' => $people,
'price' => 0,
'add_time' => $time,
'stop_time' => $time,
'k_id' => $pinkInfo['id'],
'is_tpl' => 1,
'is_refund' => 0,
'status' => 2,
'is_virtual' => 1
];
mt_srand();
for ($i = 0; $i < $num; $i++) {
$defaultData['nickname'] = substr(md5(time() . rand(1000, 9999)), 0, 12);
$data[$i] = $defaultData;
}
//添加虚拟团员
$this->dao->saveAll($data);
//更改团员状态为拼团成功
$this->dao->update($pinkId, ['stop_time' => $time, 'status' => 2], 'k_id');
//更改团长为拼团成功
$this->dao->update($pinkId, ['stop_time' => $time, 'status' => 2]);
$uidAll = $this->dao->getColumn([['id|k_id', '=', $pinkId]], 'uid');
$this->orderPinkAfter($uidAll, $pinkId);
return true;
} else {
return false;
}
}
/**
* 获取拼团海报详情信息
* @param int $id
* @param $user
* @return mixed
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function posterInfo(int $id, $user)
{
$pinkInfo = $this->dao->get($id);
/** @var StoreCombinationServices $combinationService */
$combinationService = app()->make(StoreCombinationServices::class);
$storeCombinationInfo = $combinationService->getOne(['id' => $pinkInfo['cid']], '*', ['getPrice']);
$data['title'] = $storeCombinationInfo['title'];
$data['url'] = '';
$data['image'] = $storeCombinationInfo['image'];
$data['price'] = $pinkInfo['price'];
$data['label'] = $pinkInfo['people'] . '人团';
if ($pinkInfo['k_id']) $pinkAll = $this->getPinkMember($pinkInfo['k_id']);
else $pinkAll = $this->getPinkMember($pinkInfo['id']);
$count = count($pinkAll);
$data['msg'] = '原价¥' . $storeCombinationInfo['product_price'] . ' 还差' . ($pinkInfo['people'] - $count) . '人拼团成功';
try {
$uid = (int)$user['uid'];
if (request()->isRoutine()) {
//小程序
$name = $id . '_' . $uid . '_' . $user['is_promoter'] . '_pink_share_routine.jpg';
/** @var QrcodeServices $QrcodeService */
$QrcodeService = app()->make(QrcodeServices::class);
//生成小程序地址
$urlCode = $QrcodeService->getRoutineQrcodePath($id, $uid, 31, $name);
$data['url'] = $urlCode;
} else {
if (sys_config('share_qrcode', 0) && request()->isWechat()) {
/** @var QrcodeServices $qrcodeService */
$qrcodeService = app()->make(QrcodeServices::class);
$data['url'] = $qrcodeService->getTemporaryQrcode('pink-' . $id . '-' . $uid, $uid)->url;
}
}
} catch (\Throwable $e) {
}
return $data;
}
}