订单关闭,返还平台购物卡和店铺抵扣券

This commit is contained in:
luofei 2024-02-24 15:12:30 +08:00
parent 004e200f42
commit 4b4d52c1f2
5 changed files with 40 additions and 9 deletions

View File

@ -160,11 +160,13 @@ class StoreCouponUserDao extends BaseDao
* 增加优惠券余额
* @param $id
* @param $amount
* @param $order
* @param $mark
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function increase($id, $amount)
public function increase($id, $amount, $order, $mark = '')
{
$storeCouponUser = StoreCouponUser::where('coupon_user_id', $id)->find();
if (empty($storeCouponUser)) {
@ -174,6 +176,7 @@ class StoreCouponUserDao extends BaseDao
if (!$storeCouponUser->save()) {
throw new ValidateException('优惠券余额更新出错');
}
StoreCouponDetail::income($order, $storeCouponUser['coupon_user_id'], $storeCouponUser->coupon_price, $mark);
}
/**
@ -193,11 +196,12 @@ class StoreCouponUserDao extends BaseDao
throw new ValidateException('优惠券不存在');
}
$isBalance = $storeCouponUser->isbalance();
$couponPrice = bcsub($storeCouponUser->coupon_price, $amount, 2);
if ($isBalance && $couponPrice > 0) {
$storeCouponUser->coupon_price = $couponPrice;
$couponBalance = bcsub($storeCouponUser->coupon_price, $amount, 2);
$couponBalance = max($couponBalance, 0);
if ($isBalance) {
$storeCouponUser->coupon_price = $couponBalance;
}
if ($couponPrice <= 0 || !$isBalance) {
if ($couponBalance <= 0 || !$isBalance) {
$storeCouponUser->status = 1;
}
if (!$storeCouponUser->save()) {

View File

@ -13,6 +13,8 @@ class StoreCouponDetail extends BaseModel
const TYPE_EXPEND = 1; //支出
const TYPE_INCOME = 2; //收入
const STATUS_VALID = 1; //有效的
const STATUS_INVALID = 0; //无效的
/**
* @return string
@ -35,6 +37,11 @@ class StoreCouponDetail extends BaseModel
return $this->hasOne(StoreCoupon::class, 'coupon_id', 'coupon_id');
}
public function couponUser()
{
return $this->hasOne(StoreCouponUser::class, 'coupon_user_id', 'coupon_user_id');
}
/**
* 使用优惠券
* @param $order
@ -61,10 +68,11 @@ class StoreCouponDetail extends BaseModel
* @param $order
* @param $id
* @param $amount
* @param $mark
* @param $status
* @return void
*/
public static function income($order, $id, $amount, $status = 1)
public static function income($order, $id, $amount, $mark = '', $status = 1)
{
$detailModel = new self();
$detailModel->uid = $order['uid'];
@ -75,6 +83,7 @@ class StoreCouponDetail extends BaseModel
$detailModel->amount = $amount;
$detailModel->pay_price = $order['pay_price'];
$detailModel->status = $status;
$detailModel->mark = $mark;
$detailModel->create_time = time();
$detailModel->save();
}

View File

@ -14,6 +14,9 @@
namespace crmeb\jobs;
use app\common\dao\store\coupon\StoreCouponUserDao;
use app\common\model\store\coupon\StoreCouponDetail;
use app\common\repositories\store\coupon\StoreCouponRepository;
use app\common\repositories\store\coupon\StoreCouponUserRepository;
use app\common\repositories\store\order\StoreGroupOrderRepository;
use app\common\repositories\store\product\ProductAttrValueRepository;
@ -45,7 +48,21 @@ class CancelGroupOrderJob implements JobInterface
}
}
if (count($couponId)) {
app()->make(StoreCouponUserRepository::class)->updates($couponId, ['status' => 0]);
$storeCouponDetails = StoreCouponDetail::with('couponUser')
->where('group_order_id', $groupOrder->group_order_id)
->where('type', StoreCouponDetail::TYPE_EXPEND)
->where('status', StoreCouponDetail::STATUS_VALID)
->select();
$otherCoupon = [];
foreach ($storeCouponDetails as $item) {
if (in_array($item['couponUser']['coupon_type'], [StoreCouponRepository::TYPE_STORE_COUPON, StoreCouponRepository::TYPE_PLATFORM_CARD])) {
$mark = '订单关闭,返还' . $item['couponUser']['coupon_title'] . '金额';
(new StoreCouponUserDao())->increase($item['coupon_user_id'], $item['amount'], $groupOrder, $mark);
} else {
$otherCoupon[] = $item['coupon_user_id'];
}
}
app()->make(StoreCouponUserRepository::class)->updates($otherCoupon, ['status' => 0]);
}
});
return $job->delete();

View File

@ -26,6 +26,7 @@ class AutoCancelGroupOrderListen extends TimerService implements ListenerInterfa
public function handle($event): void
{
$this->tick(60000, function () {
/** @var StoreGroupOrderRepository $storeGroupOrderRepository */
$storeGroupOrderRepository = app()->make(StoreGroupOrderRepository::class);
request()->clearCache();
$timer = ((int)systemConfig('auto_close_order_timer')) ?: 15;

View File

@ -28,7 +28,7 @@ class OrderDeliveryListen implements ListenerInterface
}
$coupon->coupon_price = $order->total_price;
$couponUser = $repo->sendCoupon($coupon, $order['uid'], StoreCouponUserRepository::SEND_TYPE_BUY);
StoreCouponDetail::income($order, $couponUser['coupon_user_id'], $coupon->coupon_price);
StoreCouponDetail::income($order, $couponUser['coupon_user_id'], $coupon->coupon_price, $coupon['title']);
if (!empty($orderProduct->product->give_coupon_ids)) {
$giveCoupons = $repo->getGiveCoupon($orderProduct->product->give_coupon_ids);
@ -43,7 +43,7 @@ class OrderDeliveryListen implements ListenerInterface
$repo->endTime = '2025-07-01';
$repo->status = -1;
$couponUser = $repo->sendCoupon($giveCoupon, $order['uid'], StoreCouponUserRepository::SEND_TYPE_BUY);
StoreCouponDetail::income($order, $couponUser['coupon_user_id'], $giveCoupon->coupon_price, 0);
StoreCouponDetail::income($order, $couponUser['coupon_user_id'], $giveCoupon->coupon_price, $giveCoupon['title'], 0);
} catch (\Exception $e) {
Log::info('自动发放买赠优惠券:' . $e->getMessage());
}