修改:兑换商品补齐差价支持在线支付
This commit is contained in:
parent
78a995c467
commit
309fdd9757
|
|
@ -50,7 +50,7 @@ class StoreGroupOrderDao extends BaseDao
|
|||
$query = StoreGroupOrder::getDB()->when(isset($where['paid']) && $where['paid'] !== '', function ($query) use ($where) {
|
||||
$query->where('paid', $where['paid']);
|
||||
})
|
||||
->where('activity_type', '<>',30)
|
||||
->whereNotIn('activity_type', [30,31])
|
||||
->when(isset($where['paid']) && $where['paid'] !== '', function ($query) use ($where) {
|
||||
$query->where('paid', $where['paid']);
|
||||
})
|
||||
|
|
|
|||
|
|
@ -2808,7 +2808,7 @@ class StoreOrderCreateRepository extends StoreOrderRepository{
|
|||
}*/
|
||||
|
||||
|
||||
/****** 在线买单 ************************************/
|
||||
// 在线买单 - 订单
|
||||
public function onlinePayment($payType, $payInfo, $user){
|
||||
$payMoney = abs((float)$payInfo['money']);
|
||||
$merId = (int)$payInfo['mer_id'];
|
||||
|
|
@ -2912,7 +2912,110 @@ class StoreOrderCreateRepository extends StoreOrderRepository{
|
|||
|
||||
return $group;
|
||||
}
|
||||
// 商品兑换 - 订单
|
||||
public function exchangeGoods($payType, $payInfo, $user){
|
||||
$payMoney = abs((float)$payInfo['money']);
|
||||
$uid = $user->uid;
|
||||
// 是否自购
|
||||
$isSelfBuy = $user->is_promoter && systemConfig('extension_self') ? 1 : 0;
|
||||
if($isSelfBuy){
|
||||
$spreadUser = $user;
|
||||
$topUser = $user->valid_spread;
|
||||
}else{
|
||||
$spreadUser = $user->valid_spread;
|
||||
$topUser = $user->valid_top;
|
||||
}
|
||||
// 整理订单数据
|
||||
$orderList[] = [
|
||||
'cartInfo' => [],
|
||||
'activity_type' => 31,// 31=兑换商品差价订单
|
||||
'commission_rate' => 0,
|
||||
'order_type' => 0,
|
||||
'is_virtual' => 1,
|
||||
'extension_one' => 0,
|
||||
'extension_two' => 0,
|
||||
'order_sn' => $this->getNewOrderId(StoreOrderRepository::TYPE_SN_ORDER).(0 + 1),
|
||||
'uid' => $uid,
|
||||
'spread_uid' => $spreadUser->uid ?? 0,
|
||||
'top_uid' => $topUser->uid ?? 0,
|
||||
'is_selfbuy' => $isSelfBuy,
|
||||
'real_name' => $user->real_name ?? '',
|
||||
'user_phone' => $user->phone ?? '',
|
||||
'user_address' => $user->addres ?? '',
|
||||
'cart_id' => '',
|
||||
'total_num' => 1,
|
||||
'total_price' => $payMoney,
|
||||
'total_postage' => 0,
|
||||
'pay_postage' => 0,
|
||||
'svip_discount' => 0,
|
||||
'pay_price' => $payMoney,
|
||||
'integral' => 0,
|
||||
'integral_price' => 0,
|
||||
'give_integral' => 0,
|
||||
'mer_id' => 0,
|
||||
'cost' => 0,
|
||||
'order_extend' => '',
|
||||
'coupon_id' => '',
|
||||
'mark' => '',
|
||||
'coupon_price' => '',
|
||||
'platform_coupon_price' => '',
|
||||
'pay_type' => $payType,
|
||||
'refund_switch' => 0,
|
||||
'pickup_record_id' => $payInfo['pickup_record_id']
|
||||
];
|
||||
$groupOrder = [
|
||||
'uid' => $uid,
|
||||
'group_order_sn' => count($orderList) === 1 ? $orderList[0]['order_sn'] : ($this->getNewOrderId(StoreOrderRepository::TYPE_SN_ORDER).'0'),
|
||||
'total_postage' => 0,
|
||||
'total_price' => $payMoney,
|
||||
'total_num' => 1,
|
||||
'real_name' => $user->real_name ?? '',
|
||||
'user_phone' => $user->phone ?? '',
|
||||
'user_address' => $user->addres ?? '',
|
||||
'pay_price' => $payMoney,
|
||||
'coupon_price' => 0,
|
||||
'pay_postage' => 0,
|
||||
'cost' => 0,
|
||||
'coupon_id' => '',
|
||||
'pay_type' => $payType,
|
||||
'give_coupon_ids' => '',
|
||||
'integral' => 0,
|
||||
'integral_price' => 0,
|
||||
'give_integral' => 0,
|
||||
'activity_type' => 31,// 31=兑换商品差价订单
|
||||
];
|
||||
$group = Db::transaction(function() use ($user,$groupOrder,$orderList){
|
||||
$storeGroupOrderRepository = app()->make(StoreGroupOrderRepository::class);
|
||||
$storeOrderStatusRepository = app()->make(StoreOrderStatusRepository::class);
|
||||
//创建订单
|
||||
$groupOrder = $storeGroupOrderRepository->create($groupOrder);
|
||||
foreach($orderList as $k => $order){
|
||||
$orderList[$k]['group_order_id'] = $groupOrder->group_order_id;
|
||||
}
|
||||
$orderStatus = [];
|
||||
foreach($orderList as $order){
|
||||
$cartInfo = $order['cartInfo'];
|
||||
unset($order['cartInfo']);
|
||||
//创建子订单
|
||||
$_order = $this->dao->create($order);
|
||||
$orderStatus[] = [
|
||||
'order_id' => $_order->order_id,
|
||||
'order_sn' => $_order->order_sn,
|
||||
'type' => $storeOrderStatusRepository::TYPE_ORDER,
|
||||
'change_message' => '订单生成',
|
||||
'change_type' => $storeOrderStatusRepository::ORDER_STATUS_CREATE,
|
||||
'uid' => $user->uid,
|
||||
'nickname' => $user->nickname,
|
||||
'user_type' => $storeOrderStatusRepository::U_TYPE_USER,
|
||||
];
|
||||
}
|
||||
$storeOrderStatusRepository->batchCreateLog($orderStatus);
|
||||
|
||||
return $groupOrder;
|
||||
});
|
||||
|
||||
return $group;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -147,7 +147,11 @@ class StoreOrderRepository extends BaseRepository
|
|||
if($groupOrder['activity_type'] == 30){
|
||||
$data['title'] = '在线买单';
|
||||
$data['mark'] = '余额支付' . floatval($groupOrder['pay_price']) . '元';
|
||||
}else if($groupOrder['activity_type'] == 31){
|
||||
$data['title'] = '酒道馆差价补齐';
|
||||
$data['mark'] = '余额支付' . floatval($groupOrder['pay_price']) . '元';
|
||||
}
|
||||
|
||||
$userBillRepository->decBill($user['uid'], 'now_money', 'pay_product', $data);
|
||||
$this->paySuccess($groupOrder);
|
||||
});
|
||||
|
|
@ -248,15 +252,15 @@ class StoreOrderRepository extends BaseRepository
|
|||
app()->make(ProductAssistSetRepository::class)->changStatus($order->orderProduct[0]['activity_id']);
|
||||
}
|
||||
if ($order->order_type == 1 && $order->status != 10) $order->verify_code = $this->verifyCode();
|
||||
if ($order->activity_type != 30 && $order->orderProduct[0]->product->type == 2) {
|
||||
if (!in_array($order->activity_type,[30,31]) && $order->orderProduct[0]->product->type == 2) {
|
||||
$order->status = 2;
|
||||
$order->delivery_type = 6;
|
||||
$order->delivery_name = '自动发货';
|
||||
$order->delivery_id = $this->sendCdkey($order);
|
||||
$isPoints = true;
|
||||
}
|
||||
// 判断:是否为在线买单 在线买单,订单支付则订单完成
|
||||
if($order->activity_type == 30){
|
||||
// 判断:是否为在线买单、酒道馆补差价 在线买单,订单支付则订单完成
|
||||
if(in_array($order->activity_type,[30,31])){
|
||||
$order->status = 3;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -3,7 +3,13 @@
|
|||
namespace app\common\repositories\user;
|
||||
|
||||
use app\common\dao\user\ExchangePickupPointDao;
|
||||
use app\common\model\user\ExchangeIntegralRecord;
|
||||
use app\common\model\user\ExchangePickupRecord;
|
||||
use app\common\model\user\ExchangeQuota;
|
||||
use app\common\model\user\ExchangeQuotaRecord;
|
||||
use app\common\model\user\User;
|
||||
use app\common\repositories\BaseRepository;
|
||||
use think\facade\Db;
|
||||
|
||||
class ExchangePickupPointRepository extends BaseRepository{
|
||||
|
||||
|
|
@ -106,7 +112,59 @@ class ExchangePickupPointRepository extends BaseRepository{
|
|||
|
||||
return $count > 0 ? 1 : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Common: 兑换成功处理
|
||||
* Author: wu-hui
|
||||
* Time: 2024/01/18 10:03
|
||||
* @param $pickupRecordId
|
||||
*/
|
||||
public function exchangeSuccessHandle($pickupRecordId){
|
||||
$pickupRecordInfo = app()->make(ExchangePickupRecordRepository::class)
|
||||
->getSearch([])
|
||||
->where('id',$pickupRecordId)
|
||||
->findOrEmpty();
|
||||
Db::transaction(function () use ($pickupRecordInfo) {
|
||||
// 修改状态
|
||||
ExchangePickupRecord::update(['status'=>1],['id'=>$pickupRecordInfo['id']]);
|
||||
// 积分&额度变更数量
|
||||
$changeNum = (float)sprintf("%.2f",$pickupRecordInfo['total_money'] - $pickupRecordInfo['diff_money_pay']);
|
||||
// 变更额度
|
||||
$userHoldInfo = ExchangeQuota::where('uid',$pickupRecordInfo['uid'])->findOrEmpty();
|
||||
$changeFront = (float)$userHoldInfo->surplus_quota;
|
||||
$userHoldInfo->use_quota += (float)$changeNum;
|
||||
$userHoldInfo->surplus_quota -= (float)$changeNum;
|
||||
$userHoldInfo->save();
|
||||
ExchangeQuotaRecord::insert([
|
||||
'uid' => $pickupRecordInfo['uid'],
|
||||
'product_id' => 0,
|
||||
'order_id' => 0,
|
||||
'order_product_id' => 0,
|
||||
'change_type' => 0,
|
||||
'change_quantity' => (float)$changeNum,
|
||||
'change_front' => $changeFront,
|
||||
'change_after' => (float)$userHoldInfo->surplus_quota,
|
||||
'remark' => "兑换消费",
|
||||
'source' => 2,
|
||||
]);
|
||||
// 变更积分
|
||||
$userInfo = User::where('uid',$pickupRecordInfo['uid'])->findOrEmpty();
|
||||
$integralChangeFront = (float)$userInfo->exchange_integral;
|
||||
$userInfo->exchange_integral -= (float)$changeNum;
|
||||
$userInfo->exchange_integral = $userInfo->exchange_integral > 0 ? $userInfo->exchange_integral : 0;
|
||||
$userInfo->save();
|
||||
ExchangeIntegralRecord::insert([
|
||||
'uid' => $pickupRecordInfo['uid'],
|
||||
'product_id' => 0,
|
||||
'order_id' => 0,
|
||||
'order_product_id' => 0,
|
||||
'change_type' => 0,
|
||||
'change_quantity' => (float)$changeNum,
|
||||
'change_front' => $integralChangeFront,
|
||||
'change_after' => (float)$userInfo->exchange_integral,
|
||||
'remark' => "兑换消费",
|
||||
]);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -8,6 +8,8 @@ use app\common\model\user\ExchangePickupRecord;
|
|||
use app\common\model\user\ExchangeQuota;
|
||||
use app\common\model\user\ExchangeQuotaRecord;
|
||||
use app\common\model\user\User;
|
||||
use app\common\repositories\store\order\StoreOrderCreateRepository;
|
||||
use app\common\repositories\store\order\StoreOrderRepository;
|
||||
use app\common\repositories\user\ExchangeIntegralRecordRepository;
|
||||
use app\common\repositories\user\ExchangePickupPointRepository;
|
||||
use app\common\repositories\user\ExchangePickupRecordRepository;
|
||||
|
|
@ -15,6 +17,7 @@ use app\common\repositories\user\ExchangeQuotaRecordRepository;
|
|||
use app\common\repositories\user\ExchangeQuotaRepository;
|
||||
use app\common\repositories\user\UserRepository;
|
||||
use crmeb\basic\BaseController;
|
||||
use crmeb\services\LockService;
|
||||
use crmeb\services\QrcodeService;
|
||||
use think\App;
|
||||
use think\facade\Db;
|
||||
|
|
@ -75,7 +78,7 @@ class Exchange extends BaseController{
|
|||
* Time: 2024/01/14 18:02
|
||||
* @return mixed
|
||||
*/
|
||||
public function exchangeHandle(){
|
||||
public function exchangeHandle(StoreOrderCreateRepository $orderCreateRepository){
|
||||
// 参数获取
|
||||
$uid = $this->request->uid();
|
||||
$data = $this->request->params(['total_money','use_integral','diff_money','diff_money_pay','point_id','staff_uid','consume_uid']);
|
||||
|
|
@ -85,11 +88,17 @@ class Exchange extends BaseController{
|
|||
// 判断:是否存在指定消费者,不存在则使用当前登录用户
|
||||
$uid = (int)$data['consume_uid'] > 0 ? (int)$data['consume_uid'] : $uid;
|
||||
if ($data['staff_uid'] == $uid) return app('json')->fail('操作员和消费用户不能是同一人!');
|
||||
// 支付信息
|
||||
$payInfo = $this->request->params(['pay_type', 'return_url']);
|
||||
$payInfo['money'] = (float)$data['diff_money_pay'];
|
||||
if((float)$payInfo['money'] > 0){
|
||||
if (!in_array($payInfo['pay_type'], StoreOrderRepository::PAY_TYPE, true)) return app('json')->fail('请选择正确的支付方式');
|
||||
}
|
||||
// 添加兑换记录
|
||||
try{
|
||||
Db::transaction(function () use ($data, $uid) {
|
||||
return Db::transaction(function () use ($data, $uid, $payInfo, $orderCreateRepository) {
|
||||
// 添加兑换记录
|
||||
ExchangePickupRecord::insert([
|
||||
$pickupRecordId = ExchangePickupRecord::insertGetId([
|
||||
'uid' => $uid,
|
||||
'point_id' => $data['point_id'],
|
||||
'staff_uid' => $data['staff_uid'],
|
||||
|
|
@ -98,46 +107,37 @@ class Exchange extends BaseController{
|
|||
'diff_money' => $data['diff_money'],
|
||||
'diff_money_pay' => $data['diff_money_pay'],
|
||||
]);
|
||||
// 积分&额度变更数量
|
||||
$changeNum = (float)sprintf("%.2f",$data['total_money'] - $data['diff_money_pay']);
|
||||
// 变更额度
|
||||
$userHoldInfo = ExchangeQuota::where('uid',$uid)->findOrEmpty();
|
||||
$changeFront = (float)$userHoldInfo->surplus_quota;
|
||||
$userHoldInfo->use_quota += (float)$changeNum;
|
||||
$userHoldInfo->surplus_quota -= (float)$changeNum;
|
||||
$userHoldInfo->save();
|
||||
ExchangeQuotaRecord::insert([
|
||||
'uid' => $uid,
|
||||
'product_id' => 0,
|
||||
'order_id' => 0,
|
||||
'order_product_id' => 0,
|
||||
'change_type' => 0,
|
||||
'change_quantity' => (float)$changeNum,
|
||||
'change_front' => $changeFront,
|
||||
'change_after' => (float)$userHoldInfo->surplus_quota,
|
||||
'remark' => "兑换消费",
|
||||
'source' => 2,
|
||||
]);
|
||||
// 变更积分
|
||||
$userInfo = User::where('uid',$uid)->findOrEmpty();
|
||||
$integralChangeFront = (float)$userInfo->exchange_integral;
|
||||
$userInfo->exchange_integral -= (float)$changeNum;
|
||||
$userInfo->exchange_integral = $userInfo->exchange_integral > 0 ? $userInfo->exchange_integral : 0;
|
||||
$userInfo->save();
|
||||
ExchangeIntegralRecord::insert([
|
||||
'uid' => $uid,
|
||||
'product_id' => 0,
|
||||
'order_id' => 0,
|
||||
'order_product_id' => 0,
|
||||
'change_type' => 0,
|
||||
'change_quantity' => (float)$changeNum,
|
||||
'change_front' => $integralChangeFront,
|
||||
'change_after' => (float)$userInfo->exchange_integral,
|
||||
'remark' => "兑换消费",
|
||||
]);
|
||||
});
|
||||
// 判断:如果【差价应支付金额】大于0 生成支付订单
|
||||
if((float)$payInfo['money'] > 0){
|
||||
$userInfo = User::where('uid',$uid)->findOrEmpty();
|
||||
$payInfo['pickup_record_id'] = $pickupRecordId;
|
||||
// 发起支付
|
||||
$groupOrder = app()->make(LockService::class)
|
||||
->exec('online_order.create',function() use ($payInfo,$orderCreateRepository, $userInfo){
|
||||
$payType = array_search($payInfo['pay_type'],StoreOrderRepository::PAY_TYPE);
|
||||
|
||||
return app('json')->success('success');
|
||||
return $orderCreateRepository->exchangeGoods($payType,$payInfo,$userInfo);
|
||||
});
|
||||
|
||||
if ($groupOrder['pay_price'] == 0) {
|
||||
app()->make(StoreOrderRepository::class)->paySuccess($groupOrder);
|
||||
return app('json')->status('success', '支付成功', ['order_id' => $groupOrder['group_order_id']]);
|
||||
}
|
||||
try {
|
||||
|
||||
return app()->make(StoreOrderRepository::class)
|
||||
->pay($payInfo['pay_type'], $userInfo, $groupOrder, $payInfo['return_url'], $this->request->isApp());
|
||||
} catch (\Exception $e) {
|
||||
|
||||
return app('json')->status('error', $e->getMessage(), ['order_id' => $groupOrder->group_order_id]);
|
||||
}
|
||||
}
|
||||
else{
|
||||
app()->make(ExchangePickupPointRepository::class)->exchangeSuccessHandle($pickupRecordId);
|
||||
|
||||
return app('json')->success('success');
|
||||
}
|
||||
});
|
||||
}catch(\Exception $e){
|
||||
|
||||
return app('json')->fail($e->getMessage());
|
||||
|
|
@ -225,10 +225,11 @@ class Exchange extends BaseController{
|
|||
public function siteQrCode(){
|
||||
// 参数获取
|
||||
$uid = $this->request->uid();
|
||||
$params = $this->request->params(['point_id']);
|
||||
$params = $this->request->params(['point_id',['total_money',0]]);
|
||||
if((int)$params['point_id'] > 0){
|
||||
try{
|
||||
$valueData = 'staff_uid=' . $uid . '&point_id=' . $params['point_id'];
|
||||
// 由于微信长度限制问题 suid=staff_id;pid=point_id;tmy=total_money
|
||||
$valueData = 'suid=' . $uid . '&pid=' . $params['point_id'] . '&tmy=' . $params['total_money'];
|
||||
$name = md5($valueData) . '.jpg';
|
||||
// pages/users/online_payment/exchange/index
|
||||
$qrcode = app()->make(QrcodeService::class)->getRoutineQrcodePath($name, 'pages/users/online_payment/exchange/index', $valueData);
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ use app\common\model\user\ExchangeQuota;
|
|||
use app\common\model\user\ExchangeQuotaRecord;
|
||||
use app\common\model\user\User;
|
||||
use app\common\repositories\system\merchant\MerchantRepository;
|
||||
use app\common\repositories\user\ExchangePickupPointRepository;
|
||||
use think\facade\Log;
|
||||
|
||||
class OrderPaySuccessEvent{
|
||||
|
|
@ -15,10 +16,17 @@ class OrderPaySuccessEvent{
|
|||
public function handle($groupOrder){
|
||||
$groupOrder = $groupOrder['groupOrder'];
|
||||
try{
|
||||
// Log::info('支付成功 - 赠送酒卡额度 - 开始: '.var_export(['uid'=>$groupOrder->uid,'group_order_id'=>$groupOrder->group_order_id],1));
|
||||
// Log::info('支付成功 - 赠送酒卡额度 - 开始: '.var_export([
|
||||
// 'uid' => $groupOrder->uid,
|
||||
// 'group_order_id' => $groupOrder->group_order_id,
|
||||
// 'activity_type' => $groupOrder->activity_type
|
||||
// ],1));
|
||||
if($groupOrder->activity_type == 30){
|
||||
// 在线支付订单
|
||||
$this->giveExchangeIntegral($groupOrder);
|
||||
}else if($groupOrder->activity_type == 31){
|
||||
// 在线支付订单
|
||||
$this->exchangeGoodsHandle($groupOrder);
|
||||
}else{
|
||||
// 其他订单
|
||||
$this->orderPaySuccessHandle($groupOrder);
|
||||
|
|
@ -112,7 +120,14 @@ class OrderPaySuccessEvent{
|
|||
|
||||
return true;
|
||||
}
|
||||
// 支付成功 - 兑换商品补差价处理
|
||||
public function exchangeGoodsHandle($groupOrder){
|
||||
foreach($groupOrder->orderList as $orderInfo){
|
||||
app()->make(ExchangePickupPointRepository::class)->exchangeSuccessHandle($orderInfo->pickup_record_id);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Loading…
Reference in New Issue