diff --git a/app/common/dao/common/PayRecordRefundDao.php b/app/common/dao/common/PayRecordRefundDao.php new file mode 100644 index 0000000..f0e7496 --- /dev/null +++ b/app/common/dao/common/PayRecordRefundDao.php @@ -0,0 +1,51 @@ +when(isset($params['id']) && $params['id'] !== '',function($query) use ($params){ + $query->where('id', (int)$params['id']); + }) + ->when(isset($params['pay_record_id']) && $params['pay_record_id'] !== '',function($query) use ($params){ + $query->where('pay_record_id', (int)$params['pay_record_id']); + }) + ->when(isset($params['status']) && $params['status'] !== '',function($query) use ($params){ + $query->where('status', (int)$params['status']); + }) + ->with([ + 'user' => function($query){ + $query->field('uid,nickname,real_name,avatar,phone'); + }, + 'payRecord' => function($query){ + $query->field('id,uid,object_id,money,pay_type,pay_time,pay_status') + ->with([ + 'agent' => function($query){ + $query->field('id,uid,contact_name,contact_phone,agent_type')->append(['agent_type_text']); + } + ]); + }, + ]) + ->order('create_time DESC,id DESC'); + } + + + + + +} diff --git a/app/common/dao/store/order/StoreGroupOrderDao.php b/app/common/dao/store/order/StoreGroupOrderDao.php index 792b33e..816549e 100644 --- a/app/common/dao/store/order/StoreGroupOrderDao.php +++ b/app/common/dao/store/order/StoreGroupOrderDao.php @@ -55,9 +55,9 @@ class StoreGroupOrderDao extends BaseDao $query->where('paid',$where['paid']); }) ->when($isWithGoods == 1,function($query) use ($where){ - $query->whereNotIn('activity_type',[30,31,32,33,34,37,38]); + $query->whereNotIn('activity_type',[30,31,32,33,34,37,38,51]); },function($query) use ($where){ - $query->whereNotIn('activity_type',[30,31,32,33,34,35,37,38]); + $query->whereNotIn('activity_type',[30,31,32,33,34,35,37,38,51]); }) ->when(isset($where['paid']) && $where['paid'] !== '',function($query) use ($where){ $query->where('paid',$where['paid']); diff --git a/app/common/model/common/PayRecordRefund.php b/app/common/model/common/PayRecordRefund.php new file mode 100644 index 0000000..50fe28f --- /dev/null +++ b/app/common/model/common/PayRecordRefund.php @@ -0,0 +1,27 @@ +hasOne(PayRecord::class, 'id', 'pay_record_id'); + } + public function user(){ + return $this->hasOne(User::class, 'uid', 'uid'); + } + + + +} diff --git a/app/common/repositories/common/PayRecordRefundRepository.php b/app/common/repositories/common/PayRecordRefundRepository.php new file mode 100644 index 0000000..c15c42f --- /dev/null +++ b/app/common/repositories/common/PayRecordRefundRepository.php @@ -0,0 +1,48 @@ +dao = $dao; + } + /** + * Common: 公共查询模型 + * Author: wu-hui + * Time: 2024/07/11 15:18 + * @param $search + * @return \app\common\model\common\PayRecordRefund + */ + public function getSearchModel($search){ + return $this->dao->searchList($search); + } + /** + * Common: 获取列表信息 + * Author: wu-hui + * Time: 2024/07/11 15:18 + * @param array $params + * @param int $page + * @param int $limit + * @return array + * @throws \think\db\exception\DataNotFoundException + * @throws \think\db\exception\DbException + * @throws \think\db\exception\ModelNotFoundException + */ + public function getList(array $params,int $page,int $limit):array{ + $query = $this->dao->searchList($params); + $count = $query->count(); + $list = $query->page($page,$limit)->select(); + + return compact('count','list'); + } + + + +} diff --git a/app/common/repositories/common/PayRecordRepository.php b/app/common/repositories/common/PayRecordRepository.php index ea0a4c1..6205911 100644 --- a/app/common/repositories/common/PayRecordRepository.php +++ b/app/common/repositories/common/PayRecordRepository.php @@ -5,7 +5,11 @@ namespace app\common\repositories\common; use app\common\dao\common\PayRecordDao; use app\common\repositories\BaseRepository; - +use app\common\repositories\store\order\StoreGroupOrderRepository; +use app\common\repositories\store\order\StoreOrderCreateRepository; +use crmeb\services\LockService; +use think\exception\ValidateException; +use think\facade\Db; class PayRecordRepository extends BaseRepository{ @@ -43,12 +47,62 @@ class PayRecordRepository extends BaseRepository{ return compact('count','list'); } + /** + * Common: 获取单条信息 + * Author: wu-hui + * Time: 2024/07/11 10:51 + * @param $uid + * @param $objectId + * @param $payType + * @return array + */ + public function getSingleInfo($uid, $objectId, $payType){ + $info = $this->getSearchModel([ + 'uid' => $uid, + 'object_id' => $objectId,// 对象角色id + 'pay_type' => $payType,// 缴费类型:1=运营中心-定金,2=运营中心-尾款,3=运营中心-保证金 + ]) + ->findOrEmpty() + ->toArray(); + return $info ?? []; + } + /** + * Common: 生成订单 + * Author: wu-hui + * Time: 2024/07/11 11:57 + * @param array $params + * @param int $payRecordId + * @param int $groupOrderId + * @return mixed + */ + public function createOrder(array $params,int $payRecordId, int $groupOrderId = 0){ + return Db::transaction(function() use ($params, $payRecordId, $groupOrderId){ + $payMoney = (float)($params['money'] ?? 0); + $userInfo = $params['user_info'] ?? []; + // 判断:是否需要支付 + if($payMoney > 0 && $groupOrderId <= 0){ + // 订单生成 + $groupOrder = app() + ->make(LockService::class) + ->exec('online_order.create',function() use ($payMoney,$userInfo){ + return app() + ->make(StoreOrderCreateRepository::class) + ->onlinePayment('',['money'=>$payMoney],$userInfo, 51); + }); + // 记录订单id + $this->dao->update($payRecordId,[ + 'group_order_id' => $groupOrder->group_order_id + ]); + }else if($groupOrderId > 0){ + $groupOrder = app()->make(StoreGroupOrderRepository::class)->getWhere(['group_order_id' => $groupOrderId]); + }else{ + throw new ValidateException('订单生成失败!'); + } - - - - + return $groupOrder; + }); + } } diff --git a/app/common/repositories/store/order/StoreOrderRepository.php b/app/common/repositories/store/order/StoreOrderRepository.php index dd7d7ca..2ee5a50 100644 --- a/app/common/repositories/store/order/StoreOrderRepository.php +++ b/app/common/repositories/store/order/StoreOrderRepository.php @@ -186,6 +186,9 @@ class StoreOrderRepository extends BaseRepository }else if($groupOrder['activity_type'] == 38){ $data['title'] = '配送商缴费'; $data['mark'] = $user->nickname.'使用余额支付' . floatval($groupOrder['pay_price']) . '元'; + }else if($groupOrder['activity_type'] == 51){ + $data['title'] = '账单缴费'; + $data['mark'] = $user->nickname.'使用余额支付' . floatval($groupOrder['pay_price']) . '元'; } $userBillRepository->decBill($user['uid'], 'now_money', 'pay_product', $data); @@ -290,7 +293,7 @@ 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 (!in_array($order->activity_type,[30,31,32,33,34,37,38]) && $order->orderProduct[0]->product->type == 2) { + if (!in_array($order->activity_type,[30,31,32,33,34,37,38,51]) && $order->orderProduct[0]->product->type == 2) { $order->status = 3;//2; todo 订单进入待评价改为已完成 $order->delivery_type = 6; $order->delivery_name = '自动发货'; @@ -298,7 +301,7 @@ class StoreOrderRepository extends BaseRepository $isPoints = true; } // 判断:是否为在线买单、酒道馆补差价 在线买单,订单支付则订单完成 - if(in_array($order->activity_type,[30,31,32,33,34,37,38])){ + if(in_array($order->activity_type,[30,31,32,33,34,37,38,51])){ $order->status = 3; } diff --git a/app/controller/admin/marketing/Agent.php b/app/controller/admin/marketing/Agent.php index ff7119a..e6060a4 100644 --- a/app/controller/admin/marketing/Agent.php +++ b/app/controller/admin/marketing/Agent.php @@ -2,6 +2,9 @@ namespace app\controller\admin\marketing; +use app\common\model\common\PayRecord; +use app\common\model\common\PayRecordRefund; +use app\common\repositories\common\PayRecordRefundRepository; use app\common\repositories\common\PayRecordRepository; use app\common\repositories\marketing\AgentApplyRepository; use app\common\repositories\marketing\AgentBrokerageRepository; @@ -422,6 +425,45 @@ class Agent extends BaseController{ return app('json')->success($data); } + /** + * Common: 获取缴费退款申请记录 + * Author: wu-hui + * Time: 2024/07/11 16:06 + * @return mixed + */ + public function payRecordRefund(){ + [$page, $limit] = $this->getPage(); + $params = $this->request->params(['pay_type']); + if($params['pay_type'] == '') $params['pay_type'] = [1,2,3]; + $data = app()->make(PayRecordRefundRepository::class)->getList((array)$params,(int)$page,(int)$limit); + + return app('json')->success($data); + } + /** + * Common: 缴费退款申请审核 + * Author: wu-hui + * Time: 2024/07/11 16:43 + * @return mixed + */ + public function payRecordRefundExamine(){ + // 参数获取 + $params = $this->request->params(['id', 'status']); + $status = (int)($params['status'] ?? 0); + // 审核 + if($status == 1){ + $info = app()->make(PayRecordRefundRepository::class)->getSearchModel(['id'=>$params['id']])->findOrEmpty()->toArray(); + // 修改退款申请状态 + PayRecordRefund::update([ + 'status' => $status, + 'refund_time' => date("Y-m-d H:i:s") + ],['id' => $params['id']]); + // 修改缴费记录 + PayRecord::update(['pay_status' => 3,'refund_time' => date("Y-m-d H:i:s")],['id' => $info['pay_record_id']]); + } + + return app('json')->success('success'); + } + } diff --git a/app/controller/api/marketing/agent/PayRecord.php b/app/controller/api/marketing/agent/PayRecord.php new file mode 100644 index 0000000..577e0be --- /dev/null +++ b/app/controller/api/marketing/agent/PayRecord.php @@ -0,0 +1,98 @@ +repository = $repository; + } + /** + * Common: 获取信息 + * Author: wu-hui + * Time: 2024/07/11 10:52 + * @return mixed + */ + public function getInfo(){ + // 参数获取 + $agentId = $this->request->param('agent_id', 0); + $uid = $this->request->uid(); + // 信息获取 + $data = [ + 'deposit' => $this->repository->getSingleInfo($uid, $agentId, 1), + 'arrears' => $this->repository->getSingleInfo($uid, $agentId, 2), + 'earnest_money' => $this->repository->getSingleInfo($uid, $agentId, 3) + ]; + + return app('json')->success($data); + } + /** + * Common: 账单缴费 + * Author: wu-hui + * Time: 2024/07/11 13:33 + * @return mixed + */ + public function pay(){ + // 参数获取 + $id = $this->request->param('id', 0); + // 信息获取 + $info = $this->repository->getSearchModel(['id' => $id])->findOrEmpty()->toArray(); + $groupOrderId = (int)($info['group_order_id'] ?? 0); + $params['uid'] = $this->request->uid(); + $params['user_info'] = $this->request->userInfo(); + $params['is_app'] = $this->request->isApp(); + $params['pay_type'] = ''; + $params['money'] = (float)$info['money']; + $groupOrder = $this->repository->createOrder($params, (int)$id,(int) $groupOrderId); + + return app('json')->success([ + 'group_order_id' => $groupOrder->group_order_id, + 'pay_price' => $groupOrder->pay_price, + ]); + } + /** + * Common: 申请退款 + * Author: wu-hui + * Time: 2024/07/11 14:36 + * @return mixed + */ + public function refund(){ + // 参数获取 + $params = $this->request->params([ + ['id', 0], + 'reason', + ]); + $info = $this->repository->getSearchModel(['id' => $params['id']])->findOrEmpty()->toArray(); + // 增加申请信息 + PayRecordRefund::create([ + 'uid' => $info['uid'], + 'pay_record_id' => $params['id'], + 'apply_time' => date("Y-m-d H:i:s"), + 'reason' => $params['reason'], + 'pay_type' => $info['pay_type'] + ]); + // 修改缴费信息 + $this->repository->update($params['id'],['pay_status' => 2]); + + return app('json')->success('success'); + } + + + +} diff --git a/app/listener/exchangeQuota/OrderPaySuccessEvent.php b/app/listener/exchangeQuota/OrderPaySuccessEvent.php index 274422f..75b4271 100644 --- a/app/listener/exchangeQuota/OrderPaySuccessEvent.php +++ b/app/listener/exchangeQuota/OrderPaySuccessEvent.php @@ -2,6 +2,7 @@ namespace app\listener\exchangeQuota; +use app\common\model\common\PayRecord; use app\common\model\marketing\activity\Record; use app\common\model\marketing\agent\AgentDelivery; use app\common\model\system\merchant\Merchant; @@ -75,6 +76,13 @@ class OrderPaySuccessEvent{ AgentDelivery::update(['status' => 1],['order_id' => (int)$orderInfo->order_id]); } break; + // 缴费订单 + case 51: + PayRecord::update([ + 'pay_status' => 1, + 'pay_time' => date('Y-m-d H:i:s',time()) + ],['group_order_id' => $groupOrder->group_order_id]); + break; // 其他订单 default: $this->orderPaySuccessHandle($groupOrder); @@ -86,7 +94,8 @@ class OrderPaySuccessEvent{ 'group_order_id' => $groupOrder->group_order_id ]); } - }catch(\Exception $e){ + } + catch(\Exception $e){ $data = [ 'uid' => $groupOrder->uid, 'group_order_id' => $groupOrder->group_order_id, @@ -112,7 +121,9 @@ class OrderPaySuccessEvent{ // 共创股东加入 case 37:$title = '支付成功 - 共创股东加入';break; // 配送商缴费支付成功 - case 38:$title = '支付成功 - 配送商缴费支付成功';break; + case 38:$title = '支付成功 - 配送商缴费';break; + // 缴费订单 + case 51:$title = '支付成功 - 缴费订单';break; } Log::info($title . ' - 错误: '.var_export($data,1)); } @@ -449,8 +460,6 @@ class OrderPaySuccessEvent{ return true; } - - /** * Common: 赠送惠民积分处理 * Author: wu-hui @@ -497,4 +506,5 @@ class OrderPaySuccessEvent{ return true; } + } \ No newline at end of file diff --git a/route/admin/marketing.php b/route/admin/marketing.php index 69a1f2c..d622edd 100644 --- a/route/admin/marketing.php +++ b/route/admin/marketing.php @@ -509,12 +509,16 @@ Route::group(function () { '_alias' => '佣金明细', ]); // 缴费记录 - Route::get('commission_list','commissionList')->name('systemMarketingAgentCommissionList')->option([ - '_alias' => '佣金明细', - ]); Route::get('pay_record','payRecord')->name('systemMarketingAgentPayRecord')->option([ '_alias' => '缴费记录', ]); + Route::get('pay_record_refund','payRecordRefund')->name('systemMarketingAgentPayRecordRefund')->option([ + '_alias' => '缴费退款记录', + ]); + Route::get('pay_record_refund_examine','payRecordRefundExamine')->name('systemMarketingAgentPayRecordRefundExamine')->option([ + '_alias' => '缴费退款审核', + ]); + })->prefix('admin.marketing.Agent/')->option([ '_path' => '/marketing/agent/list', diff --git a/route/api.php b/route/api.php index 5f2566f..e006e39 100644 --- a/route/api.php +++ b/route/api.php @@ -437,6 +437,13 @@ Route::group('api/', function () { Route::get('delivery/payment_record', 'Delivery/paymentRecord');// 缴费记录 Route::get('delivery/mer_list', 'Delivery/merList');// 绑定商户 Route::post('delivery/allocation_order', 'Delivery/allocationOrder');// 分配缴费记录 + // 缴费账单 + Route::get('pay_record/get_info', 'PayRecord/getInfo');// 账单信息 + Route::post('pay_record/pay', 'PayRecord/pay');// 账单缴费 + Route::post('pay_record/refund', 'PayRecord/refund');// 申请退款 + + + })->prefix('api.marketing.agent.'); // 供应商相关 Route::group('supplier', function () {