|
@@ -3,6 +3,7 @@
|
|
|
namespace app\admin\controller\member;
|
|
|
|
|
|
use app\admin\service\member\MemberService;
|
|
|
+use app\admin\service\order\OrderService;
|
|
|
use app\admin\validate\member\MemberValidate;
|
|
|
use app\model\Coupon;
|
|
|
use app\model\CouponDetail;
|
|
@@ -12,9 +13,14 @@ use app\model\Member;
|
|
|
use app\model\MemberAccount;
|
|
|
use app\model\MemberBenefit;
|
|
|
use app\model\MemberQuota;
|
|
|
+use app\model\Order;
|
|
|
+use app\model\OrderReturn;
|
|
|
+use app\model\OrderSheet;
|
|
|
use app\model\PayDetail;
|
|
|
use support\Db;
|
|
|
+use support\exception\BusinessException;
|
|
|
use support\Request;
|
|
|
+use Tinywan\Jwt\JwtToken;
|
|
|
|
|
|
class MemberController
|
|
|
{
|
|
@@ -509,7 +515,7 @@ class MemberController
|
|
|
$memberId = $request->get('member_id', '');
|
|
|
$coupons = CouponDetail::leftJoin('coupon', 'coupon.coupon_id', '=', 'coupon_detail.join_detail_coupon_id')
|
|
|
->where('join_coupon_detail_member_id', $memberId)
|
|
|
- ->select('coupon.coupon_name', 'coupon.coupon_classify','coupon.coupon_value')
|
|
|
+ ->select('coupon.coupon_name', 'coupon.coupon_classify', 'coupon.coupon_value')
|
|
|
->get()
|
|
|
->toArray();
|
|
|
$data = ['manjian' => 0, 'diyong' => 0, 'zhekou' => 0, 'lijian' => 0, 'zengpin' => 0, 'fuli' => 0, 'nianka' => 0, 'jika' => 0, 'yueka' => 0];
|
|
@@ -741,4 +747,288 @@ class MemberController
|
|
|
|
|
|
return json_success('', compact('rows', 'page', 'pageSize', 'total'));
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @Desc 新会员充值备份记录
|
|
|
+ * @Author Gorden
|
|
|
+ * @Date 2024/10/15 10:27
|
|
|
+ *
|
|
|
+ * @param Request $request
|
|
|
+ * @return \support\Response
|
|
|
+ */
|
|
|
+ public function rechargeBackupsList(Request $request)
|
|
|
+ {
|
|
|
+ $page = $request->get('page', 1);
|
|
|
+ $pageSize = $request->get('pageSize', 20);
|
|
|
+ $memberId = $request->get('member_id');
|
|
|
+ if (!$memberId) {
|
|
|
+ return json_fail("参数异常");
|
|
|
+ }
|
|
|
+
|
|
|
+ $member = Member::where('member_id', $memberId)
|
|
|
+ ->select('member_id', 'member_extend_json')
|
|
|
+ ->first();
|
|
|
+ $data = [];
|
|
|
+ if (!empty($member->member_extend_json)) {
|
|
|
+ $extendJson = json_decode($member->member_extend_json, true);
|
|
|
+ if (isset($extendJson['snap'])) {
|
|
|
+ foreach ($extendJson['snap'] as $key => $item) {
|
|
|
+ $data[] = [
|
|
|
+ 'recharge_times' => $key,
|
|
|
+ 'member_account_surplus' => $item['member_account_surplus'],
|
|
|
+ 'member_account_added' => $item['member_account_added'],
|
|
|
+ 'pay_amount' => $item['pay_amount'],
|
|
|
+ 'added_rate' => floatval($item['added_rate']) * 100,
|
|
|
+ 'added_amount' => $item['added_amount']
|
|
|
+ ];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ $total = count($data);
|
|
|
+ $start = ($page - 1) * $pageSize;
|
|
|
+ $rows = array_slice($data, $start, $pageSize);
|
|
|
+
|
|
|
+ return json_success('', compact('rows', 'page', 'pageSize', 'total'));
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @Desc 会员权益使用记录
|
|
|
+ * @Author Gorden
|
|
|
+ * @Date 2024/10/15 11:13
|
|
|
+ *
|
|
|
+ * @param Request $request
|
|
|
+ * @return \support\Response
|
|
|
+ */
|
|
|
+ public function roleBenefitUsedList(Request $request)
|
|
|
+ {
|
|
|
+ $page = $request->get('page', 1);
|
|
|
+ $pageSize = $request->get('pageSize', 20);
|
|
|
+ $memberId = $request->get('member_id');
|
|
|
+ if (!$memberId) {
|
|
|
+ return json_fail('参数异常');
|
|
|
+ }
|
|
|
+
|
|
|
+ $data = $this->getRoleBenefitUsedList($memberId);
|
|
|
+ $total = count($data);
|
|
|
+ $start = ($page - 1) * $pageSize;
|
|
|
+ $rows = array_slice($data, $start, $pageSize);
|
|
|
+
|
|
|
+ return json_success('', compact('rows', 'page', 'pageSize', 'total'));
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @Desc 获取权益使用记录
|
|
|
+ * @Author Gorden
|
|
|
+ * @Date 2024/10/15 11:35
|
|
|
+ *
|
|
|
+ * @param $memberId
|
|
|
+ * @param $orderIds
|
|
|
+ * @return array
|
|
|
+ */
|
|
|
+ public function getRoleBenefitUsedList($memberId, $orderIds = [])
|
|
|
+ {
|
|
|
+ $couponDetails = CouponDetail::where('join_coupon_detail_member_id', $memberId)
|
|
|
+ ->where('coupon_detail_status', 'USED')
|
|
|
+ ->whereJsonContains('coupon_detail_extend_json->gettype', 'ROLE')
|
|
|
+ ->get()
|
|
|
+ ->toArray();
|
|
|
+ $data = [];
|
|
|
+ foreach ($couponDetails as $couponDetail) {
|
|
|
+ $orders = Order::where('order_discount_json', 'like', '%' . $couponDetail['coupon_detail_id'] . '%')
|
|
|
+ ->whereIn('order_is_complete', ['Y', 'N'])
|
|
|
+ ->where('order_status_payment', 'SUCCESS')
|
|
|
+ ->when(!empty($orderIds), function ($query) use ($orderIds) {
|
|
|
+ $query->whereIn('order_id', $orderIds);
|
|
|
+ })->get()
|
|
|
+ ->toArray();
|
|
|
+ foreach ($orders as $order) {
|
|
|
+ $sheets = OrderSheet::with([
|
|
|
+ 'goods' => function ($query) {
|
|
|
+ $query->select('goods_id', 'goods_name');
|
|
|
+ }
|
|
|
+ ])->where('join_sheet_order_id', $order['order_id'])
|
|
|
+ ->get()
|
|
|
+ ->toArray();
|
|
|
+ $deng = "";
|
|
|
+ if (count($sheets) > 1) {
|
|
|
+ $deng = '等';
|
|
|
+ }
|
|
|
+
|
|
|
+ $discountJson = json_decode($order['order_discount_json'], true);
|
|
|
+ $couponName = '';
|
|
|
+ $discountAmount = 0;
|
|
|
+ foreach ($discountJson as $item) {
|
|
|
+ $discountAmount = $item['coupon_value'];
|
|
|
+ $couponName = Coupon::where('coupon_id', $item['coupon_id'])->value('coupon_name');
|
|
|
+ }
|
|
|
+
|
|
|
+ $payDetailTimes = PayDetail::whereJsonContains('join_pay_object_json->order_id', $order['order_id'])->value('pay_paytimes');
|
|
|
+ $data[] = [
|
|
|
+ 'order_id' => $order['order_id'],
|
|
|
+ 'goods_name' => !empty($sheets[0]) && !empty($sheets[0]['goods']) ? ($sheets[0]['goods']['goods_name'] . $deng) : '',
|
|
|
+ 'order_classify' => $order['order_classify'],
|
|
|
+ 'order_amount_total' => $order['order_amount_total'],
|
|
|
+ 'order_amount_pay' => $order['order_amount_pay'],
|
|
|
+ 'coupon_name' => $couponName,
|
|
|
+ 'discountAmount' => $discountAmount,
|
|
|
+ 'order_status_system' => $order['order_status_system'],
|
|
|
+ 'order_addtimes' => $order['order_addtimes'],
|
|
|
+ 'pay_paytimes' => $payDetailTimes
|
|
|
+ ];
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return $data;
|
|
|
+ }
|
|
|
+
|
|
|
+ public function roleBenefitExport(Request $request)
|
|
|
+ {
|
|
|
+ $orderIds = $request->post('order_id', []);
|
|
|
+ $memberId = $request->post('member_id');
|
|
|
+ $applyUsername = $request->post('apply_username', '');
|
|
|
+ $applyMobile = $request->post('apply_mobile', '');
|
|
|
+ $applyAmount = $request->post('apply_amount', '');
|
|
|
+ if (!$memberId) {
|
|
|
+ return json_fail("参数异常");
|
|
|
+ }
|
|
|
+
|
|
|
+ $data = $this->getRoleBenefitUsedList($memberId, $orderIds);
|
|
|
+ $dicountAmount = 0;
|
|
|
+ foreach ($data as $key => $item) {
|
|
|
+ $data[$key]['order_classify'] = OrderService::$orderClassify[$item['order_classify']];
|
|
|
+ $dicountAmount += $item['discountAmount'];
|
|
|
+ }
|
|
|
+
|
|
|
+ $returnApplayData['data'] = $data;
|
|
|
+ $returnApplayData['amount'] = $applyAmount;
|
|
|
+ $returnApplayData['apply_username'] = $applyUsername;
|
|
|
+ $returnApplayData['apply_mobile'] = $applyMobile;
|
|
|
+ $returnApplayData['reason'] = "会员权益退款";
|
|
|
+
|
|
|
+
|
|
|
+ $data[] = [
|
|
|
+ 'discountAmount' => '优惠合计:¥' . sprintf('%.2f', $dicountAmount)
|
|
|
+ ];
|
|
|
+ $data[] = [
|
|
|
+ 'order_classify' => '申请人:' . $applyUsername,
|
|
|
+ ];
|
|
|
+ $data[] = [
|
|
|
+ 'order_classify' => '电话:' . $applyMobile,
|
|
|
+ ];
|
|
|
+ $data[] = [
|
|
|
+ 'order_classify' => '退款金额:' . $applyAmount,
|
|
|
+ ];
|
|
|
+
|
|
|
+ // 产生退款记录
|
|
|
+ $this->refundOrder($memberId, $returnApplayData);
|
|
|
+
|
|
|
+ return json_success('success', $data);
|
|
|
+ }
|
|
|
+
|
|
|
+ public function refundOrder($memberId, $data)
|
|
|
+ {
|
|
|
+ try {
|
|
|
+ OrderReturn::where('join_return_member_id', $memberId)
|
|
|
+ ->where('order_return_status', '<>', 'DONE')
|
|
|
+ ->where('order_return_category', '会员权益退款')
|
|
|
+ ->delete();
|
|
|
+ OrderReturn::insert([
|
|
|
+ 'join_order_return_user_id' => JwtToken::getCurrentId(),
|
|
|
+ 'join_return_member_id' => $memberId,
|
|
|
+ 'join_return_order_id' => 'ROLE_REFUND',
|
|
|
+ 'order_return_status' => 'DOING',
|
|
|
+ 'order_return_category' => '会员权益退款',
|
|
|
+ 'order_return_apply_datetime' => date('Y-m-d H:i:s'),
|
|
|
+ 'order_return_apply_json' => json_encode($data),
|
|
|
+ 'order_return_addtimes' => time()
|
|
|
+ ]);
|
|
|
+ } catch (\Exception $e) {
|
|
|
+ return json_fail("创建退款记录失败");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public function roleBenefitRefund(Request $request)
|
|
|
+ {
|
|
|
+ $memberId = $request->post('member_id');
|
|
|
+ if (!$memberId) {
|
|
|
+ return json_fail('参数异常');
|
|
|
+ }
|
|
|
+
|
|
|
+ $returnOrder = OrderReturn::where('join_return_member_id', $memberId)
|
|
|
+ ->where('order_return_status', 'DOING')
|
|
|
+ ->where('order_return_category', '会员权益退款')
|
|
|
+ ->first();
|
|
|
+ if (!$returnOrder) {
|
|
|
+ return json_fail("退款数据异常");
|
|
|
+ }
|
|
|
+ $memberAccount = MemberAccount::where('join_account_member_id', $memberId)
|
|
|
+ ->where('member_account_classify', 'CASH')
|
|
|
+ ->where('member_account_status', 'ACTIVED')
|
|
|
+ ->first();
|
|
|
+ if (!$memberAccount) {
|
|
|
+ return json_fail('会员账户异常');
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ Db::beginTransaction();
|
|
|
+ $refundApplyJson = json_decode($returnOrder->order_return_apply_json, true);
|
|
|
+ $amount = $refundApplyJson['amount'];
|
|
|
+ $refundApplyJson['user_id'] = JwtToken::getCurrentId();
|
|
|
+ $refundApplyJson['datetime'] = date('Y-m-d H:i:s');
|
|
|
+ $returnOrder->order_return_refund_json = json_encode($refundApplyJson);
|
|
|
+ $returnOrder->order_return_status = 'DONE';
|
|
|
+ $returnOrder->save();
|
|
|
+ // 账户剩余
|
|
|
+ if ($memberAccount->member_account_surplus + $memberAccount->member_account_added < $amount) {
|
|
|
+ throw new BusinessException("账户余额不足");
|
|
|
+ }
|
|
|
+ // 本金
|
|
|
+ if ($memberAccount->member_account_surplus >= $amount) {
|
|
|
+ $memberAccount->member_account_surplus = $memberAccount->member_account_surplus - $amount;
|
|
|
+ }else{
|
|
|
+ $memberAccount->member_account_added = $memberAccount->member_account_added - ($amount - $memberAccount->member_account_surplus);
|
|
|
+ $memberAccount->member_account_surplus = 0;
|
|
|
+ }
|
|
|
+ $memberAccount->save();
|
|
|
+ // 删除会员身份
|
|
|
+ Member::where('member_id',$memberId)
|
|
|
+ ->update([
|
|
|
+ 'join_member_role_id' => '',
|
|
|
+ 'member_role_begintime' => '',
|
|
|
+ 'member_role_config_json' => '[]'
|
|
|
+ ]);
|
|
|
+ // 没用的优惠券失效
|
|
|
+ CouponDetail::where('join_coupon_detail_member_id',$memberId)
|
|
|
+ ->where('coupon_detail_status','<>','USED')
|
|
|
+ ->whereJsonContains('coupon_detail_extend_json->gettype','ROLE')
|
|
|
+ ->update([
|
|
|
+ 'coupon_detail_status' => 'DISABLED'
|
|
|
+ ]);
|
|
|
+
|
|
|
+ // 产生一条退款记录 (pay_detail)
|
|
|
+ PayDetail::insert([
|
|
|
+ 'join_pay_member_id'=>$memberId,
|
|
|
+ 'join_pay_order_id'=>'ROLE_REFUND',
|
|
|
+ 'join_pay_object_json'=>'[]',
|
|
|
+ 'pay_status'=>'SUCCESS',
|
|
|
+ 'pay_category' => 'ROLE_REFUND',
|
|
|
+ 'pay_amount' => $amount,
|
|
|
+ 'pay_paytimes' => date('Y-m-d H:i:s'),
|
|
|
+ 'pay_prepayid'=> $memberId.'-CASH',
|
|
|
+ 'pay_addtimes'=>time()
|
|
|
+ ]);
|
|
|
+
|
|
|
+ Db::commit();
|
|
|
+
|
|
|
+ return json_success('success');
|
|
|
+ } catch (BusinessException $e) {
|
|
|
+ Db::rollBack();
|
|
|
+
|
|
|
+ return json_fail($e->getMessage());
|
|
|
+ } catch (\Exception $e) {
|
|
|
+ Db::rollBack();
|
|
|
+
|
|
|
+ return json_fail('退款失败');
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|