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 @@
活动已结束
-
-
-
- 我的
-
-
+ $this->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}}
-
-
-
-
-
-
-
-
- 返回
-
-
-
-
-=$this->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}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
支付成功
+
请输入您的地址,我们会第一时间为您发出!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+=$this->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}}
+
+
+
+
+
+
+ $this->load->view('h5/market/sylive/nav_my') ?>
+
+
+
+
+
+
+
请输入您的地址,我们会第一时间为您发出!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+=$this->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}}
+
+
+
+
+
+
+ $this->load->view('h5/market/sylive/nav_my') ?>
+
+
+
+
+
+
+
请输入您的地址,我们会第一时间为您发出!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+=$this->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 @@
+
+
+
+
+ $this->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
zcmeHvg
2@>3cySqzp*WecX8?txz-o3luU+~*`
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
literal 0
HcmV?d00001