From 79df3ac95adeade4b63e16dc23fe27561fc5262d Mon Sep 17 00:00:00 2001 From: lccsw <805383944@qq.com> Date: Fri, 21 Oct 2022 20:46:40 +0800 Subject: [PATCH] add-sylive-item --- api/controllers/plan/Plan.php | 1 + api/controllers/plan/Syt.php | 49 +- .../Market_sylive_activity_bizinfo_model.php | 11 + home/controllers/h5/market/sylive/Act.php | 85 +-- home/controllers/h5/market/sylive/Item.php | 259 +++++++++ home/controllers/h5/market/sylive/Notify.php | 44 ++ home/controllers/h5/market/sylive/Ucenter.php | 252 +++++++++ home/views/h5/market/sylive/act/index.php | 7 +- home/views/h5/market/sylive/act/ucenter.php | 99 ---- .../views/h5/market/sylive/item/agreement.php | 44 ++ home/views/h5/market/sylive/item/detail.php | 505 ++++++++++++++++++ home/views/h5/market/sylive/nav_my.php | 4 + .../views/h5/market/sylive/ucenter/detail.php | 230 ++++++++ home/views/h5/market/sylive/ucenter/index.php | 73 +++ .../views/h5/market/sylive/ucenter/mygift.php | 230 ++++++++ .../views/h5/market/sylive/ucenter/orders.php | 101 ++++ www/api/pdf/bizinfo.xlsx | Bin 0 -> 19637 bytes 17 files changed, 1804 insertions(+), 190 deletions(-) create mode 100644 common/models/market/Market_sylive_activity_bizinfo_model.php create mode 100644 home/controllers/h5/market/sylive/Item.php create mode 100644 home/controllers/h5/market/sylive/Ucenter.php delete mode 100644 home/views/h5/market/sylive/act/ucenter.php create mode 100644 home/views/h5/market/sylive/item/agreement.php create mode 100644 home/views/h5/market/sylive/item/detail.php create mode 100644 home/views/h5/market/sylive/nav_my.php create mode 100644 home/views/h5/market/sylive/ucenter/detail.php create mode 100644 home/views/h5/market/sylive/ucenter/index.php create mode 100644 home/views/h5/market/sylive/ucenter/mygift.php create mode 100644 home/views/h5/market/sylive/ucenter/orders.php create mode 100644 www/api/pdf/bizinfo.xlsx diff --git a/api/controllers/plan/Plan.php b/api/controllers/plan/Plan.php index a4ea0275..2e046b66 100644 --- a/api/controllers/plan/Plan.php +++ b/api/controllers/plan/Plan.php @@ -56,6 +56,7 @@ class Plan extends CI_Controller $plan[] = array('url' => base_url(array('plan', 'syt', 'api_viewlog')), 'interval' => 5); //私域通直播间播放日志数据同步 $plan[] = array('url' => base_url(array('plan', 'syt', 'out_time')), 'interval' => 1); //订单过期 $plan[] = array('url' => base_url(array('plan', 'syt', 'union_user')), 'interval' => 1); //直播数据关联用户 + $this->plan = $plan; } diff --git a/api/controllers/plan/Syt.php b/api/controllers/plan/Syt.php index ad641120..0392aef3 100644 --- a/api/controllers/plan/Syt.php +++ b/api/controllers/plan/Syt.php @@ -45,13 +45,20 @@ class Syt extends CI_Controller $res = $this->mdSytSubscribemsg->select($where, 'id asc', 1, 100); $log = array(); if ($res) { - $this->load->model('market/market_sylive_activity_model', 'mdSytActivity'); $wechatS = new WechatServer($this->options); $wechatS->checkAuth(); + $act_ids = implode(',',array_unique(array_column($res,'activityId'))); + $act_rows = []; + if($act_ids){ + $where = [ + "activityId in ($act_ids)" => null + ]; + $act_rows = $this->market_sylive_activity_model->map('activityId','',$where,'',0,0,'activityId,title'); + } foreach ($res as $key => $value) { - $re_a = $this->mdSytActivity->get(array("activityId" => $value['a_id'], "status" => 0)); - if ($re_a) { - $content = '您预约“' . $re_a['title'] . '”直播已经开始啦!赶紧进入直播间观看直播领取福利吧~'; + $act = $act_rows['activityId'] ? $act_rows['activityId'][0] : []; + if ($act) { + $content = '您预约“' . $act['title'] . '”直播已经开始啦!赶紧进入直播间观看直播领取福利吧~'; $temp_arr = array( 'touser' => $value['openId'], 'template_id' => $value['templateId'], @@ -69,6 +76,8 @@ class Syt extends CI_Controller $log[] = $value['a_id'] . '=' . $value['openid']; } } + }else{ + $this->mdSytSubscribemsg->update(['status' => -1], ['id' => $value['id']]); } } } @@ -260,7 +269,7 @@ class Syt extends CI_Controller $where = [ 'expireTime>' => 0, 'expireTime<' => time(), - 'status' => 0 + 'status' => 0, ]; $rows = $this->market_sylive_order_model->select($where,'id asc',1,20); if($rows){ @@ -432,4 +441,34 @@ class Syt extends CI_Controller } echo '更新完成'; } + + //更新经销商地址 + public function tem_bizinfo(){ + require_once COMMPATH . '/third_party/PHPExcel/IOFactory.php'; + $this->load->model('market/market_sylive_activity_bizinfo_model'); + $file = FCPATH.'pdf/bizinfo.xlsx'; + $reader = \PHPExcel_IOFactory::createReader('Excel2007'); // 读取 excel 文档 + $PHPExcel = $reader->load($file); // 文档名称 + $objWorksheet = $PHPExcel->getActiveSheet(); + $rowCnt = $objWorksheet->getHighestRow(); //获取总行数 + for ($i = 2; $i <= $rowCnt; $i++) { //读取内容 + $areaName = $objWorksheet->getCell('A' . $i)->getValue(); + $bizName = $objWorksheet->getCell('B' . $i)->getValue(); + $provinceName = $objWorksheet->getCell('C' . $i)->getValue(); + $cityName = $objWorksheet->getCell('D' . $i)->getValue(); + $addData = [ + 'activityId' => 4, + 'areaName' => $areaName, + 'bizName' => $bizName, + 'provinceName' => $provinceName, + 'cityName' => $cityName, + ]; + if(!$this->market_sylive_activity_bizinfo_model->count($addData)){ + $addData['createTime'] = date('Y-m-d H:i:s'); + $this->market_sylive_activity_bizinfo_model->add($addData); + } + + } + echo '执行结束'; + } } diff --git a/common/models/market/Market_sylive_activity_bizinfo_model.php b/common/models/market/Market_sylive_activity_bizinfo_model.php new file mode 100644 index 00000000..5e94986f --- /dev/null +++ b/common/models/market/Market_sylive_activity_bizinfo_model.php @@ -0,0 +1,11 @@ +table_name, 'default'); + } +} \ No newline at end of file diff --git a/home/controllers/h5/market/sylive/Act.php b/home/controllers/h5/market/sylive/Act.php index f72d7c40..1e2387d7 100644 --- a/home/controllers/h5/market/sylive/Act.php +++ b/home/controllers/h5/market/sylive/Act.php @@ -115,17 +115,15 @@ class Act extends Wx { }else{ $info['live_url'] = "https://live.haodian.cn/watch/{$row['channelId']}?userid={$userid}&ts={$ts}&sign={$sign}"; } - //判断是否支付商品 - $is_pay = $this->market_sylive_order_model->count(['itemId'=>$a_id,'status'=>1,'userId'=>$this->uid]); //微信分享 $wx_info = $this->share_info($row); - $info['is_pay'] = $is_pay ? 1 : 0; $info['show_code'] = $is_show_code ? 1 : 0; $info['alert_code'] = $alert_code ? 1 : 0; $this->data['info'] = $info; $this->data['sign_package'] = $wx_info['sign_package']; $this->data['share'] = $wx_info['share']; $this->data['_title'] = $row['title']; + $this->data['skey'] = $info['skey']; $this->show_view('h5/market/sylive/act/index'); } @@ -293,9 +291,9 @@ class Act extends Wx { } $jsondata = json_decode($row['jsondata'],true); $item = $jsondata['item'] ? $jsondata['item'] : []; - $is_pay = $this->market_sylive_order_model->count(['itemId'=>$a_id,'status'=>1,'userId'=>$this->uid]); + $is_pay = $this->market_sylive_order_model->count(['itemId'=>$a_id,'status'=>1,'userId'=>$this->uid,'type'=>0]); if($is_pay){ - $url = http_host_com('home').'/h5/market/sylive/act/ucenter?skey='.$skey; + $url = http_host_com('home').'/h5/market/sylive/ucenter/mygift?skey='.$skey; redirect($url);exit; } $e_time = time() < strtotime($row['timeEnd']) ? strtotime($row['timeEnd']) - time() : 0; @@ -346,7 +344,7 @@ class Act extends Wx { $jsondata = json_decode($row['jsondata'],true); $item = $jsondata['item'] ? $jsondata['item'] : []; //判断是否已支付 - $o_row = $this->market_sylive_order_model->get(['itemId'=>$a_id,'status'=>1,'userId'=>$this->uid]); + $o_row = $this->market_sylive_order_model->get(['itemId'=>$a_id,'status'=>1,'userId'=>$this->uid,'type'=>0]); if($o_row){ $this->show_json('',400,'已支付,请勿重复支付'); } @@ -357,7 +355,7 @@ class Act extends Wx { if($row['stock']<=0){ $this->show_json('',400,'已售罄'); } - $unpay = $this->market_sylive_order_model->get(['itemId'=>$a_id,'status'=>0,'userId'=>$this->uid,'expireTime>'=>time()]); + $unpay = $this->market_sylive_order_model->get(['itemId'=>$a_id,'status'=>0,'userId'=>$this->uid,'expireTime>'=>time(),'type'=>0]); if(!$unpay){ $mb_count = $redis_obj->sCard($mb_key); //获取集合中用户数量 if($mb_count && $mb_count>$row['stock']+10){ @@ -413,79 +411,6 @@ class Act extends Wx { } $this->show_json($result['data'],200,'操作成功'); } - public function ucenter(){ - $skey = $this->input->get('skey'); - $param = $this->myencryption->base64url_decode($skey); - $a_id = intval($param['a_id']);//活动id - $row = $this->market_sylive_activity_model->get(['activityId'=>$a_id]); - if(!$row){ - throw new Hd_exception('参数错误',400); - } - $order = $this->market_sylive_order_model->get(['userId'=>$this->uid,'status'=>1,'itemId'=>$a_id]); - if(!$order){ - $url = http_host_com('home').'/h5/market/sylive/act/item?skey='.$skey; - redirect($url);exit; - } - $jsondata = json_decode($row['jsondata'],true); - $item = $jsondata['item'] ? $jsondata['item'] : []; - $validity = ''; - if($item['useTimeStart'] || $item['useTimeEnd']){ - $useTimeStart = date('Y-m-d',strtotime($item['useTimeStart'])); - $useTimeEnd = date('Y-m-d',strtotime($item['useTimeEnd'])); - $validity = "有效期 {$useTimeStart} - {$useTimeEnd}"; - } - $order = [ - 'uname' => $order['uname'] ? $order['uname'] : '', - 'utel' => $order['mobile'] ? $order['mobile'] : '', - 'slogan' => '尊享您的直播好礼', - 'valid_time' => $validity, - 'oid' => $order['sid'], - 'c_time' => date('Y-m-d H:i:s'), - ]; - $if_pid = 0; - $ac_user = $this->act_user_model->get(['userId'=>$this->uid,'activityId'=>$a_id],'channelId'); - $ac_user['channelId'] && $pid_user = $this->user_model->get(['userId'=>$ac_user['channelId']],'uname,organizationId,mobile,headimg'); - $logo = $gw_tel = $gw_slogan = $gw_title = ''; - if($ac_user['channelId'] && $pid_user['organizationId']>0){ - $group_id = $this->sylive_entity->get_level($pid_user['organizationId']); - if($group_id==3){ //顾问 - $if_pid = 1; - $where = [ - "organizationId in (select parentId from lc_market_sylive_organization where organizationId={$pid_user['organizationId']})" => null - ]; - $org = $this->market_sylive_organization_model->get($where); - }elseif($group_id==2){ //店长 - $if_pid = 1; - $where = [ - "organizationId" => $pid_user['organizationId'] - ]; - $org = $this->market_sylive_organization_model->get($where); - } - $gw_title = $pid_user['uname']; - $gw_slogan = $org['organizationName']; - $gw_tel = $pid_user['mobile']; - $logo = $pid_user['headimg']; - } - $info = [ - 'bg' => "https://qs.haodian.cn/web/images/project/H5-ShiYu/mine-bg.jpg", - 'logo' => $logo, - 'if_pid' => $if_pid, - 'title' => $gw_title, - 'slogan' => $gw_slogan, - 'cust_tel' => $gw_tel, - 'introTitle' => '权益说明', - 'content' => $item['introduction'] ? $item['introduction'] : '', - 'order' => $order, - 'skey' => $skey - ]; - $this->data['info'] = $info; - $this->data['_title'] = $row['title']; - //微信分享 - $wx_info = $this->share_info($row); - $this->data['sign_package'] = $wx_info['sign_package']; - $this->data['share'] = $wx_info['share']; - $this->show_view('h5/market/sylive/act/ucenter'); - } //获取微信用户信息 public function userinfo(){ diff --git a/home/controllers/h5/market/sylive/Item.php b/home/controllers/h5/market/sylive/Item.php new file mode 100644 index 00000000..bd827759 --- /dev/null +++ b/home/controllers/h5/market/sylive/Item.php @@ -0,0 +1,259 @@ +load->model('market/market_sylive_items_model'); + $this->load->model('market/market_sylive_activity_model'); + $this->load->model('market/market_sylive_order_model'); + $this->load->model('market/market_sylive_activity_bizinfo_model','msa_bizinfo_model'); + $this->load->library('market/sylive_entity'); + } + + public function detail(){ + $itemId = $this->input->get('iid'); + $skey = $this->input->get('skey'); + $param = $this->myencryption->base64url_decode($skey); + $a_id = intval($param['a_id']);//活动id + $row = $this->market_sylive_items_model->get(['itemId'=>$itemId,'activityId'=>$a_id]); + if(!$row){ + throw new Hd_exception('参数错误',400); + } + $imgs = json_decode($row['imgs'],true); + if($imgs['banner']){ + $banner = []; + foreach ($imgs['banner'] as $item) { + $banner[] = build_qiniu_image_url($item); + } + }else{ + $banner = $this->item_banner; + } + $e_time = time() < strtotime($row['timeEnd']) ? strtotime($row['timeEnd']) - time() : 0; + $s_time = time() < strtotime($row['timeStart']) ? strtotime($row['timeStart']) - time() : 0; + $is_pay = $this->market_sylive_order_model->count(['itemId'=>$itemId,'status'=>1,'userId'=>$this->uid,'type'=>0]); + if($is_pay){ + $url = http_host_com('home').'/h5/market/sylive/ucenter?skey='.$skey; + redirect($url);exit; + } + + $validity = ''; + if($row['useStart']!='0000-00-00 00:00:00' || $row['useEnd']!='0000-00-00 00:00:00'){ + $useTimeStart = date('Y-m-d',strtotime($row['useStart'])); + $useTimeEnd = date('Y-m-d',strtotime($row['useEnd'])); + $validity = "有效期 {$useTimeStart} - {$useTimeEnd}"; + } + $title = $row['title'] ? $row['title'] : ''; + $stock = $row['stock']; + $introduction = $row['descrip'] ? $row['descrip'] : ''; + $price = $row['price'] ? $row['price'] : ''; + //是否需要选择门店 + $need_shop = 1; + $ac_user = $this->act_user_model->get(['id'=>$this->act_uid]); + if($ac_user['channelId']){ + $channel_user = $this->act_user_model->get(['userId'=>$ac_user['channelId'],'activityId'=>$a_id]); + $channel_user['bizId'] && $need_shop = 0; + } + $need_shop = 1; + $biz_arr = $city_arr = $province_arr = []; + if($need_shop){ + $province_arr = $this->msa_bizinfo_model->select(['status'=>0,'activityId'=>4],'',0,0,'distinct provinceName as name'); + } + $info = [ + 'itemId' => $row['itemId'], + 'title' => $title, + 's_time' => $s_time, + 'e_time' => $e_time, + 'price' => $price, + 'content' => $introduction, + 'banner' => $banner, + 'stock' => $stock, + 'skey' => $skey, + 'validity' => $validity, + 'introTitle' => '权益说明', + 'need_shop' => $need_shop, + ]; + $this->data['province_arr'] = $province_arr; + $this->data['city_arr'] = $city_arr; + $this->data['biz_arr'] = $biz_arr; + $this->data['info'] = $info; + $this->data['_title'] = $row['title']; + //微信分享 + $wx_info = $this->share_info($row); + $this->data['sign_package'] = $wx_info['sign_package']; + $this->data['share'] = $wx_info['share']; + $this->show_view('h5/market/sylive/item/detail'); + } + + //支付 + public function post_pay(){ + $redis = load_cache('redis'); + $redis_obj = $redis->redis(); + $skey = $this->input->post('skey'); + $name = $this->input->post('name'); + $mobile = $this->input->post('telPhone'); + $code = $this->input->post('code'); + $province = $this->input->post('province'); + $city = $this->input->post('city'); + $biz = $this->input->post('biz'); + $itemId = $this->input->post('itemId'); + $param = $this->myencryption->base64url_decode($skey); + $a_id = intval($param['a_id']);//活动id + $row = $this->market_sylive_items_model->get(['itemId'=>$itemId]); + if(!$row){ + $this->show_json('',400,'参数错误'); + } + if(time()< strtotime($row['timeStart'])){ + $this->show_json('',400,'尚未开始'); + } + if(time() > strtotime($row['timeEnd'])){ + $this->show_json('',400,'活动已结束'); + } + $mb_key = "SYLIVE_MEMBERS_ITEM_ID_{$itemId}"; //集合缓存key + $code_key = "sylive_item_code_{$this->uid}_{$mobile}";//验证码 + if(!mobile_valid($mobile)){ + $this->show_json('',400,'请输入正确手机号'); + } + if(!$code || ($redis->get($code_key)!=$code)){ + $this->show_json('',400,'请输入正确验证码'); + } + //判断是否已支付 + $o_row = $this->market_sylive_order_model->get(['itemId'=>$itemId,'status'=>1,'userId'=>$this->uid,'type'=>0]); + if($o_row){ + $this->show_json('',400,'已支付,请勿重复支付'); + } + $pay_price = $row['price']; + if($pay_price<=0){ + $this->show_json('',400,'无需支付'); + } + if($row['stock']<=0){ + $this->show_json('',400,'已售罄'); + } + $act_user = $this->act_user_model->get(['userId'=>$this->uid,'activityId'=>$a_id]); + $p_user = []; + $act_user['channelId'] && $p_user = $this->act_user_model->get(['userId'=>$act_user['channelId']]); + $unpay = $this->market_sylive_order_model->get(['itemId'=>$itemId,'activityId'=>$a_id,'status'=>0,'userId'=>$this->uid,'expireTime>'=>time(),'type'=>0]); + if(!$unpay){ + $mb_count = $redis_obj->sCard($mb_key); //获取集合中用户数量 + if($mb_count && $mb_count>$row['stock']+10){ + $mb = $redis_obj->sMembers($mb_key); + $this->show_json('',400,'已售罄:'.json_encode($mb,JSON_UNESCAPED_UNICODE)); + } + try { + $province && $jsondata = ['biz'=>"{$province}-{$city}-{$biz}"]; + $this->market_sylive_order_model->db->trans_begin(); + //限购一件 + $u_row = $this->market_sylive_order_model->get(['itemId'=>$itemId,'activityId'=>$a_id,'status>='=>0,'userId'=>$this->uid,'expireTime>'=>time(),]); + if($u_row){ + throw new Exception('限购一件'); + } + $this->load->helper('order'); + $unpay = [ + 'sid' => create_order_no('350200','market'), + 'activityId' => $a_id, + 'userId' => $this->uid, + 'itemId' => $itemId, + 'itemTitle' => $row['title'], + 'totalPrice' => $pay_price, + 'expireTime' => time()+5*60,//订单过期时间 + 'createTime' => date('Y-m-d H:i:s') + ]; + $name && $unpay['uname'] = $name; + $mobile && $unpay['mobile'] = $mobile; + $p_user['teamId'] && $unpay['cfrom'] = 1; + $p_user['areaId'] && $unpay['areaId'] = $p_user['areaId']; + $p_user['bizId'] && $unpay['bizId'] = $p_user['bizId']; + $p_user['userId'] && $unpay['cfUserId'] = $p_user['userId']; + $jsondata && $unpay['jsondata'] = json_encode($jsondata,JSON_UNESCAPED_UNICODE); + $oid = $this->market_sylive_order_model->add($unpay); + if(!is_numeric($oid)){ + $this->market_sylive_order_model->db->trans_rollback(); + throw new Exception('创建订单失败'); + } + $this->market_sylive_items_model->update(['stock = stock-1' =>null],['itemId'=>$itemId,'stock>'=>0]); + $res = $this->market_sylive_items_model->db->affected_rows(); + if(!$res){ + throw new Exception('已售罄'); + } + $this->market_sylive_order_model->db->trans_commit(); + $redis_obj->sRem($mb_key,$this->uid); //删除集合 + }catch (Exception $e){ + $redis_obj->sRem($mb_key,$this->uid); //删除集合 + $this->market_sylive_order_model->db->trans_rollback(); + $this->show_json('',400,$e->getMessage()); + } + }else{ + $jsondata = json_decode($unpay['jsondata'],true); + $update = ['uname'=>$name,'mobile'=>$mobile]; + if($province){ + $jsondata['biz'] = "{$province}-{$city}-{$biz}"; + $update['jsondata'] = json_encode($jsondata,JSON_UNESCAPED_UNICODE); + } + $this->market_sylive_order_model->update($update,['id'=>$unpay['id']]); + } + $user = $this->user_model->get(['userId'=>$this->uid]); + $notify_url = http_host_com('home').'/h5/market/sylive/notify/item'; + $result = $this->unorder($unpay['sid'],$unpay['totalPrice'],$user['openid'],$unpay['itemTitle'],$notify_url,$unpay['expireTime'],['wx_type'=>'dc']); + if(!$result['code']){ + $this->show_json('',400,$result['msg']); + } + //删除缓存 + $redis->delete($code_key); + $data = [ + 'wxjson' => $result['data'], + 'oid' => $unpay['id'], + ]; + $this->show_json($data,200,'操作成功'); + } + + //获取验证码 + public function get_code(){ + $mobile = $this->input->post('mobile'); + if(!mobile_valid($mobile)){ + $this->show_json('',400,'请输入正确的手机号码'); + } + $redis = &load_cache('redis'); + $key = "sylive_item_code_{$this->uid}_{$mobile}"; + if(!$redis->get($key)){ + $this->load->helper('string'); + $code = random_string('numeric', 4); + $redis->save($key, $code, 60*5); + $content = "【好店云】您的验证码为: {$code},请勿泄露于他人!"; + echo $content;exit; + b2m_send_sms($mobile,$content); + } + $this->show_json('',200, '验证码已发送'); + } + + public function biz_info(){ + $type = $this->input->get('type'); + $p_name = $this->input->get('p_name'); + $c_name = $this->input->get('c_name'); + $where = [ + 'status'=>0, + 'activityId'=>4, + ]; + if($type=='city'){ + $where['provinceName'] = $p_name; + $lists = $this->msa_bizinfo_model->select($where,'',0,0,'distinct cityName as name'); + }elseif ($type=='biz'){ + $where['provinceName'] = $p_name; + $where['cityName'] = $c_name; + $lists = $this->msa_bizinfo_model->select($where,'',0,0,'bizName as name'); + }else{ + $lists = $this->msa_bizinfo_model->select($where,'',0,0,'distinct provinceName as name'); + } + $data = [ + 'lists' => $lists + ]; + $this->show_json($data,200); + } + + public function agreement(){ + $this->show_view('h5/market/sylive/item/agreement'); + } +} diff --git a/home/controllers/h5/market/sylive/Notify.php b/home/controllers/h5/market/sylive/Notify.php index 3f1c31b3..31b2b891 100644 --- a/home/controllers/h5/market/sylive/Notify.php +++ b/home/controllers/h5/market/sylive/Notify.php @@ -114,4 +114,48 @@ class Notify extends CI_Controller { echo ''; } + //商品-微信支付异步通知 + public function item(){ + try{ + $sid = $this->notify['out_trade_no']; + if($sid){ + debug_log("[start] ". __FUNCTION__ . ": out_trade_no:".$this->notify['out_trade_no'], $this->log_file,$this->log_dir); + $order = $this->order_model->get(array('sid'=>$sid)); + if(!$order){ + throw new Exception("{$sid}_订单不存在"); + } + if($order['status']){ + throw new Exception("{$sid}_订单已支付"); + } + if($this->notify['result_code'] != 'SUCCESS'){ //支付失败 + throw new Exception("支付失败,sid={$sid}"); + }else{ //支付成功 + $res = $this->order_model->update(['status'=>1,'payTime'=>date('Y-m-d H:i:s')],['id'=>$order['id']]); + if($res){ + $act_user = $this->act_user_model->get(['userId'=>$order['uid'],'activityId'=>$order['activityId']]); + $params = [ + 'a_id' => $order['itemId'], + 'uid' => $order['userId'], + 'cf_uid' => $act_user['channelId'], + 'kpi' => 'order', + 'jsondata'=> ['order_id'=>$order['id'],'sid'=>$sid] + ]; + $sy_res = $this->sylive_entity->kpi_log($params); + debug_log("[info] ". __FUNCTION__ . ":私域通增加记录-".json_encode($sy_res,JSON_UNESCAPED_UNICODE), $this->log_file,$this->log_dir); + debug_log("[success] ". __FUNCTION__ . ":操作成功", $this->log_file,$this->log_dir); + } + } + } + }catch (Exception $e){ + $msg = $e->getMessage(); + debug_log("[error] ". __FUNCTION__ . ":{$msg}", $this->log_file,$this->log_dir); + } + if($sid){ + debug_log("[finish] ". __FUNCTION__ . ": out_trade_no-".$this->notify['out_trade_no'], $this->log_file,$this->log_dir); + }else{ + debug_log("[finish] ". __FUNCTION__ . ": 参数错误-".json_encode($this->notify,JSON_UNESCAPED_UNICODE), $this->log_file,$this->log_dir); + } + echo ''; + } + } diff --git a/home/controllers/h5/market/sylive/Ucenter.php b/home/controllers/h5/market/sylive/Ucenter.php new file mode 100644 index 00000000..5990ea97 --- /dev/null +++ b/home/controllers/h5/market/sylive/Ucenter.php @@ -0,0 +1,252 @@ +load->model('market/market_sylive_items_model'); + $this->load->model('market/market_sylive_order_model'); + $this->load->model('market/market_sylive_activity_model'); + $this->load->library('market/sylive_entity'); + $this->skey = $this->input->get('skey'); + $param = $this->myencryption->base64url_decode($this->skey); + $this->a_id = intval($param['a_id']);//活动id + $this->data['skey'] = $this->skey; + } + + public function index(){ + $params = $this->input->get(); + $row = $this->market_sylive_activity_model->get(['activityId'=>$this->a_id]); + if(!$row){ + throw new Hd_exception('参数错误',400); + } + $lists = []; + if($this->a_id<4){ + //判断是否支付商品 + $is_pay = $this->market_sylive_order_model->count(['itemId'=>$this->a_id,'status'=>1,'userId'=>$this->uid,'type'=>0,'activityId<'=>4]); + $is_pay && $lists[] = ['title'=>'我的权益','url'=>"/h5/market/sylive/ucenter/mygift?skey={$params['skey']}"]; + } + + $lists[] = ['title'=>'我的订单','url'=>"/h5/market/sylive/ucenter/orders?skey={$params['skey']}"]; + $lists[] = ['title'=>'联系客服','url'=>"https://work.weixin.qq.com/kfid/kfc77374393839a9d9b?enc_scene=ENCAEt1rsV7GcticSp5Xyc245thCkz9T6YRm7gShvqffNqW3A89DzkZvzjusx44EinUTe"]; + $user = $this->user_model->get(['userId'=>$this->uid],'unionid,nickname,headimg'); + $info = [ + 'title' => $user['nickname'], + 'logo' => Sylive_entity::DF_IMG, + 'list' => $lists + ]; + $this->data['info'] = $info; + $this->data['params'] = $params; + $this->show_view('h5/market/sylive/ucenter/index'); + } + //我的权益 + public function mygift(){ + $row = $this->market_sylive_activity_model->get(['activityId'=>$this->a_id]); + if(!$row){ + throw new Hd_exception('参数错误',400); + } + $order = $this->market_sylive_order_model->get(['userId'=>$this->uid,'status'=>1,'itemId'=>$this->a_id,'type'=>0]); + if(!$order){ + $url = http_host_com('home').'/h5/market/sylive/act/item?skey='.$this->data['skey']; + redirect($url);exit; + } + $jsondata = json_decode($row['jsondata'],true); + $item = $jsondata['item'] ? $jsondata['item'] : []; + $validity = ''; + if($item['useTimeStart'] || $item['useTimeEnd']){ + $useTimeStart = date('Y-m-d',strtotime($item['useTimeStart'])); + $useTimeEnd = date('Y-m-d',strtotime($item['useTimeEnd'])); + $validity = "有效期 {$useTimeStart} - {$useTimeEnd}"; + } + $order_jsondata = json_decode($order['jsondata'],true); + $order = [ + 'id' => $order['id'], + 'uname' => $order['uname'] ? $order['uname'] : '', + 'utel' => $order['mobile'] ? $order['mobile'] : '', + 'slogan' => '尊享您的直播好礼', + 'valid_time' => $validity, + 'sid' => $order['sid'], + 'c_time' => date('Y-m-d H:i:s'), + 'region' => $order_jsondata['address']['region'] ? $order_jsondata['address']['region'] : '', + 'detail' => $order_jsondata['address']['detail'] ? $order_jsondata['address']['detail'] : '' + ]; + $if_pid = 0; + $ac_user = $this->act_user_model->get(['userId'=>$this->uid,'activityId'=>$this->a_id],'channelId'); + $ac_user['channelId'] && $pid_user = $this->user_model->get(['userId'=>$ac_user['channelId']],'uname,organizationId,mobile,headimg'); + $logo = $gw_tel = $gw_slogan = $gw_title = ''; + if($ac_user['channelId'] && $pid_user['organizationId']>0){ + $group_id = $this->sylive_entity->get_level($pid_user['organizationId']); + if($group_id==3){ //顾问 + $if_pid = 1; + $where = [ + "organizationId in (select parentId from lc_market_sylive_organization where organizationId={$pid_user['organizationId']})" => null + ]; + $org = $this->market_sylive_organization_model->get($where); + }elseif($group_id==2){ //店长 + $if_pid = 1; + $where = [ + "organizationId" => $pid_user['organizationId'] + ]; + $org = $this->market_sylive_organization_model->get($where); + } + $gw_title = $pid_user['uname']; + $gw_slogan = $org['organizationName']; + $gw_tel = $pid_user['mobile']; + $logo = $pid_user['headimg']; + } + $info = [ + 'bg' => "https://qs.haodian.cn/web/images/project/H5-ShiYu/mine-bg.jpg", + 'logo' => $logo, + 'if_pid' => $if_pid, + 'title' => $gw_title, + 'slogan' => $gw_slogan, + 'cust_tel' => $gw_tel, + 'introTitle' => '权益说明', + 'content' => $item['introduction'] ? $item['introduction'] : '', + 'order' => $order, + 'skey' => $this->data['skey'] + ]; + $this->data['info'] = $info; + $this->data['_title'] = $row['title']; + //微信分享 + $wx_info = $this->share_info($row); + $this->data['sign_package'] = $wx_info['sign_package']; + $this->data['share'] = $wx_info['share']; + $this->show_view('h5/market/sylive/ucenter/mygift'); + } + + //我的订单 + public function orders(){ + $this->show_view('h5/market/sylive/ucenter/orders'); + } + + //订单详情 + public function detail(){ + $oid = $this->input->get('id'); + $order = $this->market_sylive_order_model->get(['id'=>$oid,'userId' => $this->uid]); + if(!$order){ + throw new Hd_exception('参数错误',400); + } + $item = $this->market_sylive_items_model->get(['itemId'=>$order['itemId']]); + $validity = ''; + if($item['useStart'] || $item['timeEnd']){ + $useTimeStart = date('Y-m-d',strtotime($item['useStart'])); + $useTimeEnd = date('Y-m-d',strtotime($item['timeEnd'])); + $validity = "有效期 {$useTimeStart} - {$useTimeEnd}"; + } + $order_jsondata = json_decode($order['jsondata'],true); + $order = [ + 'id' => $order['id'], + 'uname' => $order['uname'] ? $order['uname'] : '', + 'utel' => $order['mobile'] ? $order['mobile'] : '', + 'slogan' => '尊享您的直播好礼', + 'valid_time' => $validity, + 'sid' => $order['sid'], + 'c_time' => date('Y-m-d H:i:s'), + 'region' => $order_jsondata['address']['region'] ? $order_jsondata['address']['region'] : '', + 'detail' => $order_jsondata['address']['detail'] ? $order_jsondata['address']['detail'] : '' + ]; + $if_pid = 0; + $ac_user = $this->act_user_model->get(['userId'=>$this->uid,'activityId'=>$this->a_id],'channelId'); + $ac_user['channelId'] && $pid_user = $this->user_model->get(['userId'=>$ac_user['channelId']],'uname,organizationId,mobile,headimg'); + $logo = $gw_tel = $gw_slogan = $gw_title = ''; + if($ac_user['channelId'] && $pid_user['organizationId']>0){ + $group_id = $this->sylive_entity->get_level($pid_user['organizationId']); + if($group_id==3){ //顾问 + $if_pid = 1; + $where = [ + "organizationId in (select parentId from lc_market_sylive_organization where organizationId={$pid_user['organizationId']})" => null + ]; + $org = $this->market_sylive_organization_model->get($where); + }elseif($group_id==2){ //店长 + $if_pid = 1; + $where = [ + "organizationId" => $pid_user['organizationId'] + ]; + $org = $this->market_sylive_organization_model->get($where); + } + $gw_title = $pid_user['uname']; + $gw_slogan = $org['organizationName']; + $gw_tel = $pid_user['mobile']; + $logo = $pid_user['headimg']; + } + $info = [ + 'bg' => "https://qs.haodian.cn/web/images/project/H5-ShiYu/mine-bg.jpg", + 'logo' => $logo, + 'if_pid' => $if_pid, + 'title' => $gw_title, + 'slogan' => $gw_slogan, + 'cust_tel' => $gw_tel, + 'introTitle' => '权益说明', + 'content' => $item['descrip'] ? $item['descrip'] : '', + 'order' => $order, + 'skey' => $this->data['skey'] + ]; + $this->data['info'] = $info; + $this->show_view('h5/market/sylive/ucenter/detail'); + } + + public function ajax_order(){ + $params = $this->input->get(); + $page = $params['page'] ? $params['page'] : 1; + $size = $params['size'] ? $params['size'] : 20; + $where = [ + 'activityId' => $this->a_id, + 'userId' => $this->uid, + 'type' => 0, + 'status' => 1 + ]; + $total = $this->market_sylive_order_model->count($where); + $lists = []; + if($total){ + $rows = $this->market_sylive_order_model->select($where,'id desc',$page,$size); + $item_ids = implode(',',array_unique(array_column($rows,'itemId'))); + $item_rows = []; + if($item_ids){ + $item_rows = $this->market_sylive_items_model->map('itemId','',["itemId in ({$item_ids})"],'',0,0,'itemId,imgs'); + } + foreach ($rows as $val) { + $item = $item_rows[$val['itemId']] ? $item_rows[$val['itemId']][0] : []; + $imgs = json_decode($item['imgs'],true); + $img = $imgs['banner'][0] ? build_qiniu_image_url($imgs['banner'][0]) : ''; + $lists[] = [ + 'sid' => $val['sid'], + 'img' => $img, + 'title' => $val['itemTitle'], + 'time' => date('Y.m.d H:i:s',strtotime($val['createTime'])), + 'price' => $val['totalPrice'], + 'url' => "/h5/market/sylive/ucenter/detail?skey={$this->skey}&id={$val['id']}" + ]; + } + } + $data = [ + 'total' => $total, + 'lists' => $lists + ]; + $this->show_json($data,200); + } + + //修改地址 + public function edit_address(){ + $params = $this->input->post(); + if(!$params['region']||!$params['address']){ + $this->show_json([],400,'参数错误'); + } + $order = $this->market_sylive_order_model->get(['userId'=>$this->uid,'status'=>1,'id'=>$params['id']]); + if(!$order){ + $this->show_json([],400,'订单不存在'); + } + $jsondata = json_decode($order['jsondata'],true); + $jsondata['address']['region'] = $params['region']; + $jsondata['address']['detail'] = $params['address']; + $update = [ + 'jsondata' => json_encode($jsondata,JSON_UNESCAPED_UNICODE) + ]; + $this->market_sylive_order_model->update($update,['id'=>$order['id']]); + $this->show_json([],200,'保存成功'); + } +} diff --git a/home/views/h5/market/sylive/act/index.php b/home/views/h5/market/sylive/act/index.php index 57cefbad..3d541e16 100644 --- a/home/views/h5/market/sylive/act/index.php +++ b/home/views/h5/market/sylive/act/index.php @@ -19,12 +19,7 @@ 活动已结束 - - - -
我的
-
- + load->view('h5/market/sylive/nav_my') ?>
diff --git a/home/views/h5/market/sylive/act/ucenter.php b/home/views/h5/market/sylive/act/ucenter.php deleted file mode 100644 index 46540abd..00000000 --- a/home/views/h5/market/sylive/act/ucenter.php +++ /dev/null @@ -1,99 +0,0 @@ - -
-
-
-
-
订单号 {{info.order.oid}}
-
{{info.order.c_time}}
-
-
{{info.order.uname}} · {{info.order.utel}}
-
-
{{info.order.slogan}}
-
{{info.order.valid_time}}
-
-
-
- -
- {{info.title}} - 专属顾问 -
-
{{info.slogan}}
- - 拨打电话 - -
-
-
{{info.introTitle}}
-
-
-
- - -
返回
-
-
- - -load->view('h5/market/sylive/share_script')?> - \ No newline at end of file diff --git a/home/views/h5/market/sylive/item/agreement.php b/home/views/h5/market/sylive/item/agreement.php new file mode 100644 index 00000000..219ad5b1 --- /dev/null +++ b/home/views/h5/market/sylive/item/agreement.php @@ -0,0 +1,44 @@ + +
+
+
+
+
关于用户门票须知
+
+
尊敬的用户:感谢您使用本平台提供的互联网信息服务,在您使用本平台提供的在线服务前,请您仔细阅读本服务条款,未成年人应在法定监护人陪同下阅读,在您熟读本条款后请勾选已阅读并同意支付,即视为接受本服务各项条款。相关条款具体规定如下:
+
+ 1、 + 您在本平台上支付的0.99元为纳米BOX 11.11对称嗨购日参与门票,支付的199元为纳米BOX 11.11对称嗨购日VIP门票费用(以下统一简称为”门票”)。门票获取开始时间为2022年11月11日9:00,截止时间为2022年11月11日22:00,一个用户账号(同一手机号码)最多可购买两种门票各一张,且门票权益不可叠加,用户可享受本平台的最高权益为199元纳米BOX 11.11对称嗨购日VIP门票权益。请您注意在规定活动时间内完成支付,本平台为官方指定独家支付平台,其他平台均不支持本项服务。
+
+ 2、 + 0.99元纳米BOX 11.11对称嗨购日参与门票和199元纳米BOX 11.11对称嗨购日VIP门票权益说明如下:
+
+
+ 0.99元纳米BOX 11.11对称嗨购日参与门票:当您完成支付即有机会获得平台提供的价值99元精美礼品一份。
+
+
+ 199元纳米BOX 11.11对称嗨购日VIP门票:当您完成支付即可获得价值100元京东卡一张以及99元精美礼品一份。
+
当您确认完成支付0.99元纳米BOX 11.11对称嗨购日参与门票,即视为您已接受平台为您提供的99元精品礼品权益锁定;当您确认完成支付199元纳米BOX 11.11对称嗨购日VIP门票,即视为您已接受平台为您提供的等值礼品权益(价值100元京东卡一张以及99元精美礼品一份)
+
感谢您的理解与支持,完成门票支付将视为您已同意接受以上各项权益说明条款,故除去不可抗力因素影响,本平台不提供退款服务。
+
+ 3、 + 当您同意接受0.99元纳米BOX 11.11对称嗨购日参与门票和199元纳米BOX 11.11对称嗨购日VIP门票权益说明,并进入支付页面时,平台支付页面将会弹出信息框,需要您在弹窗信息框内填写个人详细邮寄地址,以便我们为您邮寄权益礼品,请您注意个人信息的正确填写,若信息填写不全或信息不正确,将视为您主动放弃本次权益,礼品将不再邮寄。
+
+ 4、 + 奖品发放:0.99元纳米BOX 11.11对称嗨购日参与门票礼品权益,即价值99元精美礼品一份,将在您成功完成购车后30个自然日内邮寄发出;199元纳米BOX 11.11对称嗨购日VIP门票礼品权益,即价值100元京东卡一张和99元精美礼品一份,将在本次活动结束后30个自然日内邮寄发出。
+
+ 5、 + 本协议受中华人民共和国(指中国大陆,不包含香港特别行政区、澳门特别行政区及台湾地区)法律约束并据其进行解释。
+
+ 6、 + 以上条款的最终解释权归本平台所有,因本协议引起的以及与本协议有关的一切争议,双方应通过友好协商或联系在线客服咨询解决;如仍有争议, 双方均有权将争议提交至武汉经济技术开发区人民法院诉讼解决。
+
+
+
+ + + +
返回
+
+
+ \ No newline at end of file diff --git a/home/views/h5/market/sylive/item/detail.php b/home/views/h5/market/sylive/item/detail.php new file mode 100644 index 00000000..f186a2de --- /dev/null +++ b/home/views/h5/market/sylive/item/detail.php @@ -0,0 +1,505 @@ + + + + + +
+
+ +
+
+
+
+ # +
+
+
+
+
+
#
+ +
+
+
{{info.title}}
+
{{info.validity}}
+
+ ¥ + {{info.price}} +
+
+
+
+
+ {{info.introTitle}} +
+
+
+
+
+ +
+ + +
活动已结束
+
+ +
+ +
+
+
+
+
+
+ +
+
+ +
+
+
+ {{codeTx}} +
+
+ + + +
+
+ + 《关于用户门票须知》 +
+
+ +
+
+
+
+
+
+
+
+
支付成功
+
请输入您的地址,我们会第一时间为您发出!
+
+ + +
+
+ +
+
+
+ 确认 +
+ +
+
+
+
+ + +load->view('h5/market/sylive/share_script')?> + \ No newline at end of file diff --git a/home/views/h5/market/sylive/nav_my.php b/home/views/h5/market/sylive/nav_my.php new file mode 100644 index 00000000..6d0037e8 --- /dev/null +++ b/home/views/h5/market/sylive/nav_my.php @@ -0,0 +1,4 @@ + + +
我的
+
\ No newline at end of file diff --git a/home/views/h5/market/sylive/ucenter/detail.php b/home/views/h5/market/sylive/ucenter/detail.php new file mode 100644 index 00000000..59959470 --- /dev/null +++ b/home/views/h5/market/sylive/ucenter/detail.php @@ -0,0 +1,230 @@ + + + + + +
+
+
+
+
订单号 {{info.order.sid}}
+
{{info.order.c_time}}
+
+
+
{{info.order.uname}}·{{info.order.utel}}
+
{{show_address}}
+
收货地址
+
+ +
+
{{info.order.slogan}}
+
{{info.order.valid_time}}
+
+
+
+ +
+ {{info.title}} + 专属顾问 +
+
{{info.slogan}}
+ + 拨打电话 + +
+
+
{{info.introTitle}}
+
+
+
+ load->view('h5/market/sylive/nav_my') ?> + +
+
+
+
+
+
请输入您的地址,我们会第一时间为您发出!
+
+ + +
+
+ +
+
+
+ 确认 +
+ +
+
+
+ +
+ +load->view('h5/market/sylive/share_script')?> + \ No newline at end of file diff --git a/home/views/h5/market/sylive/ucenter/index.php b/home/views/h5/market/sylive/ucenter/index.php new file mode 100644 index 00000000..6180202e --- /dev/null +++ b/home/views/h5/market/sylive/ucenter/index.php @@ -0,0 +1,73 @@ + +
+
+
+
+ # +
{{info.title}}
+
尊享您的直播好礼
+
+ +
+ + +
首页
+
+
+ + + \ No newline at end of file diff --git a/home/views/h5/market/sylive/ucenter/mygift.php b/home/views/h5/market/sylive/ucenter/mygift.php new file mode 100644 index 00000000..59959470 --- /dev/null +++ b/home/views/h5/market/sylive/ucenter/mygift.php @@ -0,0 +1,230 @@ + + + + + +
+
+
+
+
订单号 {{info.order.sid}}
+
{{info.order.c_time}}
+
+
+
{{info.order.uname}}·{{info.order.utel}}
+
{{show_address}}
+
收货地址
+
+ +
+
{{info.order.slogan}}
+
{{info.order.valid_time}}
+
+
+
+ +
+ {{info.title}} + 专属顾问 +
+
{{info.slogan}}
+ + 拨打电话 + +
+
+
{{info.introTitle}}
+
+
+
+ load->view('h5/market/sylive/nav_my') ?> + +
+
+
+
+
+
请输入您的地址,我们会第一时间为您发出!
+
+ + +
+
+ +
+
+
+ 确认 +
+ +
+
+
+ +
+ +load->view('h5/market/sylive/share_script')?> + \ No newline at end of file diff --git a/home/views/h5/market/sylive/ucenter/orders.php b/home/views/h5/market/sylive/ucenter/orders.php new file mode 100644 index 00000000..362320e6 --- /dev/null +++ b/home/views/h5/market/sylive/ucenter/orders.php @@ -0,0 +1,101 @@ + +
+
+ + load->view('h5/market/sylive/nav_my') ?> +
+ + + \ No newline at end of file diff --git a/www/api/pdf/bizinfo.xlsx b/www/api/pdf/bizinfo.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..8b7b737ac28ccd2fcb3b048875f1185ab42815b1 GIT binary patch literal 19637 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 literal 0 HcmV?d00001