123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426 |
- <?php
- /*
- * @Author: xiaohai zmhwork@qq.com
- * @Date: 2025-03-14 17:38:50
- * @LastEditors: xiaohai zmhwork@qq.com
- * @LastEditTime: 2025-03-24 21:14:25
- * @FilePath: \opkpm\app\shop\logic\order\OrderRenewLogic.php
- * @Description: 续费订单逻辑处理
- */
-
- namespace app\shop\logic\order;
-
- use app\common\model\shop\OrderRenew;
- use app\common\model\shop\ShopGoodsRenew;
-
- use app\common\basics\Logic;
- use app\common\enum\OrderEnum;
- use app\common\model\shop\Shop;
- use app\common\model\shop\ShopHkLog;
- use app\common\server\AliPayServer;
- use app\common\server\YansongdaAliPayServer;
- use app\shop\validate\order\OrderRenewValidate;
- use think\facade\Db;
- use think\facade\Log;
- use Yansongda\Pay\Pay;
-
- class OrderRenewLogic extends Logic
- {
- public static function lists($get)
- {
- $page = $get['page'] ?? 1;
- $limit = $get['limit'] ?? 10;
-
- $where[] = ['del', '=', 0];
- $where[] = ['shop_id', '=', $get['shop_id']];
-
- $count = OrderRenew::where($where)->count();
- $lists = OrderRenew::where($where)
- ->page($page, $limit)
- ->order('id', 'desc')
- ->select()->toArray();
- foreach ($lists as $key => $value) {
- $lists[$key]['type_str'] = $value['renew_type_id'] == 0 ? '包月' : '按量付费';
- $lists[$key]['order_status_str'] = OrderEnum::getOrderStatus($value['order_status']);
- $lists[$key]['pay_status_str'] = OrderEnum::getPayStatus($value['pay_status']);
- $lists[$key]['pay_way_str'] = $value['pay_way'] == 1 ? '微信' : '支付宝';
- $lists[$key]['pay_time_str'] = $value['pay_time'] ? date('Y-m-d H:i:s', $value['pay_time']) : '';
- }
-
- return ['count' => $count, 'lists' => $lists];
- }
-
- public static function renewLists($get)
- {
- $page = $get['page'] ?? 1;
- $limit = $get['limit'] ?? 10;
-
- $where = [
- ['del', '=', 0],
- ['type_id', '=', $get['type_id']]
- ];
-
- if (!empty($get['name']) && $get['name']) {
- $where[] = ['name', 'like', '%' . $get['name'] . '%'];
- }
- // var_dump($get, $where);
-
- $count = ShopGoodsRenew::where($where)->count();
- $lists = ShopGoodsRenew::where($where)
- ->page($page, $limit)
- ->order('id', 'desc')
- ->select()->toArray();
- foreach ($lists as $key => $value) {
- $lists[$key]['type_str'] = $value['type_id'] == 0 ? '包月' : '按量付费';
- $lists[$key]['status_str'] = $value['status'] == 0 ? '禁用' : '启用';
- }
-
- return ['count' => $count, 'lists' => $lists];
- }
-
- public static function buy($id)
- {
- $where = [
- ['del', '=', 0],
- ['status', '=', 1],
- ['id', '=', $id]
- ];
- $info = ShopGoodsRenew::where($where)->find();
- if (!$info) {
- static::$error = '数据不存在';
- return false;
- }
-
- return $info->toArray();
- }
-
- public static function cancelOrder($shop_id)
- {
- //dump("dffd");
- //查找未付款 待支付
- //获取1个小时前的时间戳
- $oneHourAgo = strtotime("-1 hour", time());
- $where = [
- ['shop_id','=',$shop_id],
- ['del', '=', 0],
- ['pay_status', '=', 0],
- ['order_status', '=', 0],
- ['create_time', '<', $oneHourAgo]
- ];
- OrderRenew::where($where)->update([
- 'order_status' => 4,
- 'cancel_time' => time(),
- 'update_time' => time(),
- ]);
- }
- public static function cancel($post)
- {
- try {
- validate(OrderRenewValidate::class)->scene('cancel')->check($post);
- } catch (\Exception $e) {
- static::$error = $e->getMessage();
- return false;
- }
-
- $where = [
- ['del', '=', 0],
- ['id', '=', $post['id']],
- ['shop_id', '=', $post['shop_id']],
- ];
-
- $info = OrderRenew::where($where)->find();
- if (!$info) {
- self::$error = '数据不存在';
- return false;
- }
-
- if ($info->order_status > 0) {
- self::$error = '订单状态不可取消';
- return false;
- }
-
- $info->order_status = 4;
- $info->save();
-
- return true;
- }
-
- public static function add($post)
- {
- try {
- validate(OrderRenewValidate::class)->scene('add')->check($post);
- } catch (\Exception $e) {
- static::$error = $e->getMessage();
- return false;
- }
-
- $model = new OrderRenew();
- $name = $model->getName();
- $post['order_sn'] = createSn($name, 'order_sn');
- $post['renew_name'] = $post['name'];
- $post['renew_image'] = $post['image'] ?? "";
- $post['renew_desc'] = $post['desc'];
- $post['renew_type_id'] = $post['type_id'];
- $post['renew_price'] = $post['price'];
- $post['renew_op_count'] = $post['op_count'];
-
- $post['total_amount'] = $post['renew_price'] * $post['renew_num'];
- $post['total_num'] = $post['renew_num'];
- $post['order_amount'] = $post['total_amount'];
-
- $info = $model->create($post);
-
- return $info->toArray();
- }
-
- public static function payPage($get)
- {
- $where = [
- ['del', '=', 0],
- ['id', '=', $get['id']],
- ['shop_id', '=', $get['shop_id']],
- ];
-
- $info = OrderRenew::where($where)->find();
-
- //dump($info->toArray());
- $good = ShopGoodsRenew::where([
- ['id', '=', $info['renew_id']],
- ])->find();
-
- if(empty($good)){
- $msg = '商品已删除';
- return [1,$msg];
- }
-
- if((int)$good['status'] === 0){
- $msg = '商品已下架';
- return [1,$msg];
- }
-
- if (!$info) {
- $msg = '数据不存在';
- return [1,$msg];
- }
-
- return [0,$info->toArray()];
- }
-
- private static function aliPay($info, $time_expire)
- {
- // 支付宝PC端支付
- $domain = request()->domain();
-
- $return_url = (string) url('shop/order.OrderRenew/lists', [], false, true);
- $notify_url = (string) url('shop/order.Pay/aliNotify', [], false, true);
-
- $ali_data = [
- 'out_trade_no' => $info['order_sn'],
- 'total_amount' => $info['order_amount'],
- 'subject' => '订单:' . $info['order_sn'],
- // 'return_url' => $domain . '/shop/order.OrderRenew/lists',
- 'return_url' => $return_url,
- 'time_expire' => date('Y-m-d H:i:s', $time_expire),
- ];
-
- $aliPayConf = YansongdaAliPayServer::config();
- $aliPayConf['notify_url'] = $notify_url;
-
- $aliPay = Pay::alipay($aliPayConf);
-
- // $ali_data['notify_url'] = $domain . '/shop/order.Pay/aliNotify';
- $ali_data['notify_url'] = $notify_url;
- return $aliPay->web($ali_data)->getContent();
- }
-
- public static function payWay($post)
- {
- try {
- validate(OrderRenewValidate::class)->scene('pay_way')->check($post);
- } catch (\Exception $e) {
- static::$error = $e->getMessage();
- return false;
- }
-
- $where = [
- ['del', '=', 0],
- ['id', '=', $post['id']],
- ['shop_id', '=', $post['shop_id']],
- ];
-
- $info = OrderRenew::where($where)->find();
- if (!$info) {
- static::$error = '数据不存在';
- return false;
- }
-
- if ($info['order_status'] > 0) {
- static::$error = '订单不处于可支付状态下';
- return false;
- }
-
- //计算是否已过期
- $oneHourAgo = strtotime("-1 hour", time());
- if(strtotime($info->create_time) < $oneHourAgo){
- //已过期
- $info->order_status = 4;
- $info->cancel_time = time();
- $info->update_time = time();
- $info->save();
- self::$error = '订单已过期';
- return false;
- }
-
- $time_expire = time() + 3600 * 2;
-
- $info->pay_way = $post['pay_way'];
- $info->time_expire = $time_expire - 600;
- $info->save();
-
- if ($post['pay_way'] == 2) {
- return self::aliPay($info, $time_expire);
- }
-
- self::$error = '暂不支持该支付方式';
- return false;
- }
-
- private static function changeHkCount($info, $time)
- {
- // 添加用户套餐时间或者数量
- // 操作数量
- $op_count = $info['renew_op_count'] * $info['total_num'];
- $shop = Shop::find($info['shop_id']);
-
- // 添加用户套餐时间或者数量
- $hk = new ShopHkLog();
- $hk->shop_id = $shop['id'];
- $hk->source_id = $info->id;
- $hk->change_count = $op_count;
-
- // 包月
- if ($info['renew_type_id'] == 0) {
- $old_expire_time = $shop->getData('expire_time');
- if ($old_expire_time < $time) {
- $old_expire_time = $time;
- }
-
- $di = \DateInterval::createFromDateString(strval($op_count) . ' months');
- $dt = date_create_from_format('Y-m-d H:i:s', date('Y-m-d H:i:s', $old_expire_time))->add($di);
- $dt_str = $dt->format('Y-m-d 00:00:00');
- $shop->expire_time = $dt->getTimestamp();
-
- $hk->source_type = 200;
- $hk->before_date = date('Y-m-d H:i:s', $old_expire_time);
- $hk->after_date = date('Y-m-d H:i:s', $dt->getTimestamp());
-
- $hk->remark = '[' . $info->renew_name . '],订单号:' . $info->order_sn . ',增加月份数:' . $op_count;
- $hk->save();
- } else {
- // 按量付费
- // 添加数量记录
- $old_hksy_count = $shop->hksy_count;
- //$hk = new ShopHkLog();
- //$hk->shop_id = $shop['id'];
- //$hk->source_id = $info->id;
- //$hk->change_count = $op_count;
- $hk->left_count = $op_count + $old_hksy_count;
- $hk->remark = '[' . $info->renew_name . '],订单号:' . $info->order_sn . ',增加总数:' . $op_count;
- $hk->save();
-
- $shop->hksy_count += $op_count;
- }
-
- $shop->save();
-
- return true;
- }
-
- public static function renewLog($get)
- {
- $page = $get['page'] ?? 1;
- $limit = $get['limit'] ?? 10;
-
- $where = [];
- $where[] = ['shop_id', '=', $get['shop_id']];
- $type_id = $get['type_id'] ?? 1;
- if ($type_id == 1) {
- //搜索
- $source_type = $get['source_type'] ?? 0;
- if($source_type != 0){
- $where[] = ['source_type', '=', $source_type];
- }else{
- $where[] = ['source_type', '>=', 100];
- $where[] = ['source_type', '<', 200];
- }
- } else {
- $where[] = ['source_type', '>=', 200];
- $where[] = ['source_type', '<', 300];
- }
-
- $count = ShopHkLog::where($where)->count();
- $lists = ShopHkLog::where($where)
- ->page($page, $limit)
- ->order('id', 'desc')
- ->select()->toArray();
-
- return ['count' => $count, 'lists' => $lists];
- }
-
- private static function aliPaySucc($order_sn, $result)
- {
- $time = time();
- Db::startTrans();
-
- try {
- $where = [
- ['del', '=', 0],
- ['order_sn', '=', $order_sn],
- ];
-
- $info = OrderRenew::where($where)->find();
- if (empty($info)) {
- static::$error = '数据不存在';
- return false;
- }
-
- $info->order_status = 3;
- $info->pay_status = 1;
- $info->pay_time = $time;
- $info->notify_content = $result->toJson();
- $info->buyer_id = $result->buyer_open_id;
- $info->trade_no = $result->trade_no;
- $info->save();
-
- self::changeHkCount($info, $time);
-
- Db::commit();
- } catch (\Exception $e) {
- Db::rollback();
- Log::error('aliPaySucc 支付宝回调错误:' . $e->getMessage());
- static::$error = $e->getMessage();
- return false;
- }
-
- return true;
- }
-
- public static function aliNotify($post)
- {
- try {
- $aliPayConf = YansongdaAliPayServer::config();
- $aliPay = Pay::alipay($aliPayConf);
- $result = $aliPay->verify($post);
- } catch (\Exception $e) {
- static::$error = $e->getMessage();
- return false;
- }
-
- // 支付成功
- if ($result->trade_status === 'TRADE_SUCCESS') {
- self::aliPaySucc($result->out_trade_no, $result);
- }
-
- return true;
- }
- }
|