|
@@ -30,6 +30,7 @@ use app\model\SysDept;
|
|
|
use app\model\SysUser;
|
|
|
use support\Db;
|
|
|
use support\exception\BusinessException;
|
|
|
+use support\Log;
|
|
|
use support\Redis;
|
|
|
use support\Request;
|
|
|
use support\Response;
|
|
@@ -374,17 +375,12 @@ class PackagesController extends Curd
|
|
|
public function insert(Request $request): Response
|
|
|
{
|
|
|
$params = $request->post();
|
|
|
- // 判断餐品是否连带着服务或实体
|
|
|
- $goodsClassifys = array_unique(array_column($params['goodsContentList'], 'goods_classify'));
|
|
|
+ // 产品分类
|
|
|
+ $params['goods_classify'] = $params['submit_goods_classify'] = 'PACKAGE';
|
|
|
$premises = [];
|
|
|
if (!empty($params['dept_premises_id'])) {
|
|
|
$premises = SysDept::where('dept_name', $params['dept_premises_id'])->first();
|
|
|
}
|
|
|
-
|
|
|
- if (in_array('PACKAGE', $goodsClassifys)) {
|
|
|
- $params['submit_goods_classify'] = 'PACKAGE';
|
|
|
- }
|
|
|
- $params['goods_classify'] = $goodsClassifys[0];
|
|
|
Db::beginTransaction();
|
|
|
try {
|
|
|
// 使用优惠券
|
|
@@ -403,19 +399,7 @@ class PackagesController extends Curd
|
|
|
$params['order_discount_json'] = json_encode($this->discountRecord($couponUseJson, $params));
|
|
|
// 验证库存
|
|
|
foreach ($params['goodsContentList'] as $goods) {
|
|
|
- // 减库存,规格和总库存
|
|
|
- if (!isset($params['submit_goods_classify']) || !in_array($params['submit_goods_classify'], ['MEALS', 'PACKAGE'])) {
|
|
|
- $goodsSku = GoodsSku::where('goods_sku_id', $goods['sku_id'])->first();
|
|
|
- $skuStorageJson = json_decode($goodsSku->goods_sku_storage_json, true);
|
|
|
- if (isset($skuStorageJson['storage']) && !empty($skuStorageJson['storage'])) {
|
|
|
- $skuStorageJson['storage'] = $skuStorageJson['storage'] - $goods['nbr'];
|
|
|
- }
|
|
|
- if (!isset($skuStorageJson['storage']) || (!empty($skuStorageJson['storage']) && $skuStorageJson['storage'] < 0)) {
|
|
|
- throw new BusinessException('库存不足');
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
+ // 减库存,总库存
|
|
|
$goodsRunning = GoodsRunning::where('join_running_goods_id', $goods['goods_id'])->first();
|
|
|
$goodsRunning->goods_running_storage = $goodsRunning->goods_running_storage - $goods['nbr'];
|
|
|
if ($goodsRunning->goods_running_storage < 0) {
|
|
@@ -459,21 +443,14 @@ class PackagesController extends Curd
|
|
|
throw new BusinessException('检查下单账户');
|
|
|
}
|
|
|
|
|
|
- $qrcodePayAmount = 0;
|
|
|
$params['orderId'] = 'OD' . date('ymdHi') . random_string(4, 'up');
|
|
|
$params['orderGroupId'] = 'OD' . date('ymdHi') . random_string(4, 'up');
|
|
|
|
|
|
- $systemStatus = 'SENDING'; // 待发货
|
|
|
+ $systemStatus = 'WAITING'; // 待使用
|
|
|
// 立即结算
|
|
|
- if ($params['settlement_now'] == 'Y') {
|
|
|
- if (in_array($params['goods_classify'], ['MEALS', 'VIP'])) {
|
|
|
- $params['order_is_complete'] = 'Y';
|
|
|
- $systemStatus = 'DONE';
|
|
|
- }
|
|
|
- if (in_array($params['goods_classify'], ['SERVICE', 'CHNMED', 'CHNNCD', 'PACKAGE']) && $params['delivery'] == 'ARRIVAL') {
|
|
|
- $params['order_is_complete'] = 'N';
|
|
|
- $systemStatus = "WAITING";
|
|
|
- }
|
|
|
+ if ($params['settlement_now'] == 'Y' && $params['is_complete'] == 'Y') {
|
|
|
+ $params['order_is_complete'] = 'Y';
|
|
|
+ $systemStatus = "DONE";
|
|
|
}
|
|
|
|
|
|
if ($params['settlement_now'] == 'Y' && ($params['pay_category'] == 'OFFLINE' || $params['pay_category'] == 'MONEY')) {
|
|
@@ -491,7 +468,7 @@ class PackagesController extends Curd
|
|
|
throw new BusinessException('账户异常');
|
|
|
}
|
|
|
$amount = $account->member_account_surplus + $account->member_account_added;
|
|
|
- if ($params['pay_constitute'] == 'N' && (!$account || $params['order_amount_pay'] > $amount)) {
|
|
|
+ if ($params['order_amount_pay'] > $amount) {
|
|
|
throw new BusinessException('账户余额不足');
|
|
|
}
|
|
|
if ($params['order_amount_pay'] > $account->member_account_surplus) {
|
|
@@ -507,7 +484,7 @@ class PackagesController extends Curd
|
|
|
$params['order_status_system'] = $systemStatus;
|
|
|
$params['order_status_payment'] = 'SUCCESS';
|
|
|
}
|
|
|
- } else if ($params['settlement_now'] == 'Y' && $params['pay_category'] == 'VIP') { // 余额支付
|
|
|
+ } else if ($params['settlement_now'] == 'Y' && $params['pay_category'] == 'VIP') { // VIP余额支付
|
|
|
$account = MemberAccount::where('join_account_member_id', $params['join_order_member_id'])
|
|
|
->where('member_account_classify', 'VIP')
|
|
|
->where('member_account_status', 'ACTIVED')
|
|
@@ -516,7 +493,7 @@ class PackagesController extends Curd
|
|
|
throw new BusinessException('账户异常');
|
|
|
}
|
|
|
$amount = $account->member_account_surplus + $account->member_account_added;
|
|
|
- if ($params['pay_constitute'] == 'N' && (!$account || $params['order_amount_pay'] > $amount)) {
|
|
|
+ if ($params['order_amount_pay'] > $amount) {
|
|
|
throw new BusinessException('账户余额不足');
|
|
|
}
|
|
|
if ($params['order_amount_pay'] > $account->member_account_surplus) {
|
|
@@ -549,69 +526,6 @@ class PackagesController extends Curd
|
|
|
$params['order_status_system'] = $systemStatus;
|
|
|
$params['order_status_payment'] = 'SUCCESS';
|
|
|
}
|
|
|
- // 福利账户 300 、 700
|
|
|
- if (in_array($params['goods_classify'], ['SERVICE', 'CHNMED', 'CHNNCD', 'MEALS'])) {
|
|
|
- $payDetails = PayDetail::where('join_pay_member_id', $params['join_order_member_id'])
|
|
|
- ->where('pay_status', 'SUCCESS')
|
|
|
- ->where('pay_prepayid', $params['join_order_member_id'] . '-WELFARE')
|
|
|
- ->whereIn('pay_category', ['SERVICE', 'CHNMED', 'CHNNCD', 'MEALS', 'DESHES'])
|
|
|
- ->get()
|
|
|
- ->toArray();
|
|
|
-
|
|
|
- $payDetailArray = array_column($payDetails, 'pay_amount', 'join_pay_order_id');
|
|
|
-
|
|
|
- $refundPayDetails = PayDetail::where('join_pay_member_id', $params['join_order_member_id'])
|
|
|
- ->where('pay_status', 'SUCCESS')
|
|
|
- ->where('pay_prepayid', $params['join_order_member_id'] . '-WELFARE')
|
|
|
- ->where('pay_category', 'REFUND')
|
|
|
- ->get()
|
|
|
- ->toArray();
|
|
|
- $refundPayDetailArray = array_column($refundPayDetails, 'pay_amount', 'join_pay_order_id');
|
|
|
- $paySum = 0;
|
|
|
- foreach ($payDetailArray as $key => $item) {
|
|
|
- if (isset($refundPayDetailArray[$key])) {
|
|
|
- $paySum = $paySum + ($item - $refundPayDetailArray[$key]);
|
|
|
- continue;
|
|
|
- }
|
|
|
-
|
|
|
- $paySum = $paySum + $item;
|
|
|
- }
|
|
|
-
|
|
|
- if ($params['pay_constitute'] == 'N' && 700 - $paySum < $params['order_amount_pay']) {
|
|
|
- Db::rollBack();
|
|
|
- return json_fail('超出福利限额');
|
|
|
- }
|
|
|
- } else {
|
|
|
- $payDetails = PayDetail::where('join_pay_member_id', $params['join_order_member_id'])
|
|
|
- ->where('pay_status', 'SUCCESS')
|
|
|
- ->where('pay_prepayid', $params['join_order_member_id'] . '-WELFARE')
|
|
|
- ->whereNotIn('pay_category', ['SERVICE', 'CHNMED', 'CHNNCD', 'MEALS', 'DESHES', 'REFUND', 'RECHARGE'])
|
|
|
- ->get()
|
|
|
- ->toArray();
|
|
|
-
|
|
|
- $payDetailArray = array_column($payDetails, 'pay_amount', 'join_pay_order_id');
|
|
|
-
|
|
|
- $refundPayDetails = PayDetail::where('join_pay_member_id', $params['join_order_member_id'])
|
|
|
- ->where('pay_status', 'SUCCESS')
|
|
|
- ->where('pay_prepayid', $params['join_order_member_id'] . '-WELFARE')
|
|
|
- ->where('pay_category', 'REFUND')
|
|
|
- ->get()
|
|
|
- ->toArray();
|
|
|
- $refundPayDetailArray = array_column($refundPayDetails, 'pay_amount', 'join_pay_order_id');
|
|
|
- $paySum = 0;
|
|
|
- foreach ($payDetailArray as $key => $item) {
|
|
|
- if (isset($refundPayDetailArray[$key])) {
|
|
|
- $paySum = $paySum + ($item - $refundPayDetailArray[$key]);
|
|
|
- continue;
|
|
|
- }
|
|
|
-
|
|
|
- $paySum = $paySum + $item;
|
|
|
- }
|
|
|
-
|
|
|
- if ($params['pay_constitute'] == 'N' && 300 - $paySum < $params['order_amount_pay']) {
|
|
|
- throw new BusinessException('超出福利限额');
|
|
|
- }
|
|
|
- }
|
|
|
|
|
|
$account->member_account_surplus = $account->member_account_surplus - $params['order_amount_pay'];
|
|
|
$account->member_account_expend = $account->member_account_expend + $params['order_amount_pay'];
|
|
@@ -649,45 +563,35 @@ class PackagesController extends Curd
|
|
|
}
|
|
|
}
|
|
|
if (($params['pay_constitute'] == 'Y' || $params['pay_category'] == 'QRCODE') && $params['settlement_now'] == 'Y' && !empty($params['qrcode_nbr'])) { // 付款码
|
|
|
- if ($params['pay_constitute'] == 'Y' && $qrcodePayAmount <= 0) {
|
|
|
- $params['order_status_system'] = $systemStatus;
|
|
|
- $params['order_status_payment'] = 'SUCCESS';
|
|
|
- }
|
|
|
// 不组合或者组合后需要付款码的金额>0
|
|
|
- if ($params['pay_constitute'] == 'N' || ($params['pay_constitute'] == 'Y' && $qrcodePayAmount > 0)) {
|
|
|
- $result = OrderService::qrcodePay($params);
|
|
|
- $result = json_encode($result);
|
|
|
- $params['pay_json_response'] = $result;
|
|
|
- $result = json_decode($result, true);
|
|
|
+ $result = OrderService::qrcodePay($params);
|
|
|
+ $result = json_encode($result);
|
|
|
+ $params['pay_json_response'] = $result;
|
|
|
+ $result = json_decode($result, true);
|
|
|
|
|
|
- $prefix = substr($params['qrcode_nbr'], 0, 2);
|
|
|
- if (in_array($prefix, [10, 11, 12, 13, 14, 15])) {
|
|
|
- $params['pay_category'] = 'WXPAY';
|
|
|
- if ((!isset($result['return_code']) || $result['return_code'] != 'SUCCESS') || (!isset($result['result_code']) || $result['result_code'] != 'SUCCESS') || (empty($result['trade_state']) || $result['trade_state'] != 'SUCCESS')) {
|
|
|
- $params['order_status_system'] = 'PAYING';
|
|
|
- $params['order_status_payment'] = 'PENDING';
|
|
|
- $params['order_is_complete'] = 'N';
|
|
|
-// Db::rollBack();
|
|
|
-// return json_fail('支付失败');
|
|
|
- } else {
|
|
|
- $params['order_status_system'] = $systemStatus;
|
|
|
- $params['order_status_payment'] = 'SUCCESS';
|
|
|
- }
|
|
|
- } else if (in_array($prefix, [25, 26, 27, 28, 29, 30])) {
|
|
|
- $params['pay_category'] = 'ALIPAY';
|
|
|
- if ((!isset($result['code']) || $result['code'] != '10000') || (empty($result['trade_status']) || $result['trade_status'] != 'TRADE_SUCCESS')) {
|
|
|
- $params['order_status_system'] = 'PAYING';
|
|
|
- $params['order_status_payment'] = 'PENDING';
|
|
|
- $params['order_is_complete'] = 'N';
|
|
|
-// Db::rollBack();
|
|
|
-// return json_fail('支付失败');
|
|
|
- } else {
|
|
|
- $params['order_status_system'] = $systemStatus;
|
|
|
- $params['order_status_payment'] = 'SUCCESS';
|
|
|
- }
|
|
|
+ $prefix = substr($params['qrcode_nbr'], 0, 2);
|
|
|
+ if (in_array($prefix, [10, 11, 12, 13, 14, 15])) {
|
|
|
+ $params['pay_category'] = 'WXPAY';
|
|
|
+ if ((!isset($result['return_code']) || $result['return_code'] != 'SUCCESS') || (!isset($result['result_code']) || $result['result_code'] != 'SUCCESS') || (empty($result['trade_state']) || $result['trade_state'] != 'SUCCESS')) {
|
|
|
+ $params['order_status_system'] = 'PAYING';
|
|
|
+ $params['order_status_payment'] = 'PENDING';
|
|
|
+ $params['order_is_complete'] = 'N';
|
|
|
} else {
|
|
|
- throw new BusinessException('付款码无效');
|
|
|
+ $params['order_status_system'] = $systemStatus;
|
|
|
+ $params['order_status_payment'] = 'SUCCESS';
|
|
|
+ }
|
|
|
+ } else if (in_array($prefix, [25, 26, 27, 28, 29, 30])) {
|
|
|
+ $params['pay_category'] = 'ALIPAY';
|
|
|
+ if ((!isset($result['code']) || $result['code'] != '10000') || (empty($result['trade_status']) || $result['trade_status'] != 'TRADE_SUCCESS')) {
|
|
|
+ $params['order_status_system'] = 'PAYING';
|
|
|
+ $params['order_status_payment'] = 'PENDING';
|
|
|
+ $params['order_is_complete'] = 'N';
|
|
|
+ } else {
|
|
|
+ $params['order_status_system'] = $systemStatus;
|
|
|
+ $params['order_status_payment'] = 'SUCCESS';
|
|
|
}
|
|
|
+ } else {
|
|
|
+ throw new BusinessException('付款码无效');
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -738,14 +642,12 @@ class PackagesController extends Curd
|
|
|
return json_success('创建订单成功');
|
|
|
} catch (BusinessException $e) {
|
|
|
Db::rollBack();
|
|
|
- dump($e->getMessage());
|
|
|
- dump($e->getTrace());
|
|
|
+ Log::error("购买套包失败", ['msg' => $e->getMessage()]);
|
|
|
_syslog("订单", $e->getMessage());
|
|
|
return json_fail($e->getMessage());
|
|
|
} catch (\Exception $e) {
|
|
|
Db::rollBack();
|
|
|
- dump($e->getMessage());
|
|
|
- dump($e->getTrace());
|
|
|
+ Log::error("购买套包失败", ['msg' => $e->getMessage()]);
|
|
|
_syslog("订单", "创建订单失败");
|
|
|
return json_fail('创建订单失败');
|
|
|
}
|
|
@@ -2065,7 +1967,7 @@ class PackagesController extends Curd
|
|
|
}
|
|
|
$orderId = 'OD' . date('ymdHi') . random_string(4, 'up');
|
|
|
$amountPay = round((floatval($goods['goods_sales_price']) * $goods['nbr'] / $params['order_amount_total']) * $params['order_amount_pay'], 2);
|
|
|
-// $amountPay = round(floatval($goods['goods_sales_price']) * $goods['nbr'] * $params['order_ratio'], 2);
|
|
|
+
|
|
|
$data = [
|
|
|
'order_id' => $orderId,
|
|
|
'order_groupby' => $params['orderGroupId'],
|
|
@@ -2097,10 +1999,13 @@ class PackagesController extends Curd
|
|
|
$params['order_express_goods'] = json_encode(['sheet' => $sheetIds]);
|
|
|
|
|
|
$this->insertExpressOne($params, $orderId);
|
|
|
- // 写到权益里
|
|
|
if ($params['order_status_payment'] == 'SUCCESS') {
|
|
|
+ // 写到权益里
|
|
|
$this->insertBenefitOne($params, $goods, $orderId);
|
|
|
+ // 发放卡券
|
|
|
+ $this->sendCoupon($params, $goods, $orderId);
|
|
|
}
|
|
|
+
|
|
|
}
|
|
|
} catch (\Exception $e) {
|
|
|
dump($e->getMessage() . '|' . $e->getLine());
|
|
@@ -2171,6 +2076,34 @@ class PackagesController extends Curd
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * @Desc 发放卡券
|
|
|
+ * @Author Gorden
|
|
|
+ * @Date 2024/11/4 11:47
|
|
|
+ *
|
|
|
+ * @param $params
|
|
|
+ * @param $goods
|
|
|
+ * @param $orderId
|
|
|
+ * @return void
|
|
|
+ * @throws BusinessException
|
|
|
+ */
|
|
|
+ public function sendCoupon($params, $goods, $orderId)
|
|
|
+ {
|
|
|
+ try {
|
|
|
+ $couponSendParams = [
|
|
|
+ 'gettype' => 'PACKAGE',
|
|
|
+ 'member_id' => $params['join_order_member_id'],
|
|
|
+ 'orderId' => $orderId,
|
|
|
+ 'join_sheet_goods_id' => $goods['goods_id']
|
|
|
+ ];
|
|
|
+
|
|
|
+ CouponService::autoSendCouponByGoods($couponSendParams);
|
|
|
+ } catch (\Exception $e) {
|
|
|
+ throw new BusinessException("卡券发放失败");
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* @Desc 单套包权益
|
|
|
* @Author Gorden
|
|
@@ -2185,7 +2118,6 @@ class PackagesController extends Curd
|
|
|
{
|
|
|
$params['orderId'] = $orderId;
|
|
|
$writeOffDate = [];
|
|
|
- $applyData = [];
|
|
|
if (isset($goods['goods_classify']) && $goods['goods_classify'] == 'PACKAGE' && $params['delivery'] == 'ARRIVAL') { // 一个套餐买多个
|
|
|
$params['packageId'] = $goods['goods_id'];
|
|
|
$components = GoodsComponent::with([
|
|
@@ -2519,7 +2451,8 @@ class PackagesController extends Curd
|
|
|
];
|
|
|
Appointment::insert($data);
|
|
|
} catch (\Exception $e) {
|
|
|
- dump($e->getMessage());
|
|
|
+ Log::error('创建权益记录失败', ['msg' => $e->getMessage()]);
|
|
|
+
|
|
|
throw new BusinessException("创建权益记录失败");
|
|
|
}
|
|
|
}
|