From c3b57d3ded0c9639e7563427e7e3c8ae6eea3c9f Mon Sep 17 00:00:00 2001 From: sugar1569 Date: Fri, 7 Dec 2018 18:40:29 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B5=B7=E6=8A=A5=E5=8D=87=E7=BA=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../view/system/system_databackup/index.php | 22 +- .../admin/view/wechat/wechat_user/index.php | 4 +- application/routine/controller/AuthApi.php | 30 +- application/routine/controller/Login.php | 4 +- .../routine/model/routine/RoutineCode.php | 40 +- .../routine/model/routine/RoutineQrcode.php | 74 + .../routine/model/user/RoutineUser.php | 28 +- application/wap/controller/Store.php | 161 ++ application/wap/view/first/store/detail.html | 9 +- .../wap/view/first/store/seckill_detail.html | 31 +- extend/behavior/wechat/UserBehavior.php | 9 +- view/crmebN/images/poster-close.png | Bin 0 -> 2130 bytes view/crmebN/images/posterbackgd.png | Bin 0 -> 12381 bytes view/crmebN/pages/load/load.js | 12 +- view/crmebN/pages/product-con/index.js | 1497 ++++++++++------- view/crmebN/pages/product-con/index.wxml | 15 +- view/crmebN/pages/product-con/index.wxss | 21 +- 17 files changed, 1239 insertions(+), 718 deletions(-) create mode 100644 application/routine/model/routine/RoutineQrcode.php create mode 100644 view/crmebN/images/poster-close.png create mode 100644 view/crmebN/images/posterbackgd.png diff --git a/application/admin/view/system/system_databackup/index.php b/application/admin/view/system/system_databackup/index.php index 8c808804..b5cf5fe0 100644 --- a/application/admin/view/system/system_databackup/index.php +++ b/application/admin/view/system/system_databackup/index.php @@ -84,12 +84,12 @@ elem: '#fileList' ,url:"{:Url('fileList')}" ,cols: [[ - {field: 'filename', title: '备份名称', sort: true}, - {field: 'part', title: 'part'}, - {field: 'size', title: '大小'}, - {field: 'compress', title: 'compress'}, - {field: 'backtime', title: '时间'}, - {fixed: 'right', title: '操作', width: '20%', align: 'center', toolbar: '#fileListtool'} + {field: 'filename', title: '备份名称', sort: true,width:'25%'}, + {field: 'part', title: 'part',width:'10%'}, + {field: 'size', title: '大小',width:'10%'}, + {field: 'compress', title: 'compress',width:'10%'}, + {field: 'backtime', title: '时间',width:'20%'}, + {fixed: 'right', title: '操作', width: '25%', align: 'center', toolbar: '#fileListtool'} ]] ,page: false }); @@ -128,11 +128,11 @@ ,toolbar: '#toolbarDemo' ,cols: [[ {type:'checkbox'}, - {field: 'name', title: '表名称', sort: true}, - {field: 'comment', title: '备注' }, - {field: 'engine', title: '类型', sort: true}, - {field: 'data_length', title: '大小', sort: true,totalRow: true}, - {field: 'update_time', title: '更新时间', sort: true}, + {field: 'name', title: '表名称', sort: true,width:'20%'}, + {field: 'comment', title: '备注',width:'20%'}, + {field: 'engine', title: '类型', sort: true,width:'10%'}, + {field: 'data_length', title: '大小',width:'10%', sort: true,totalRow: true}, + {field: 'update_time', title: '更新时间',width:'20%', sort: true}, {field: 'rows', title: '行数'}, {fixed: 'right', title: '操作', width: '10%', align: 'center', toolbar: '#barDemo'} ]] diff --git a/application/admin/view/wechat/wechat_user/index.php b/application/admin/view/wechat/wechat_user/index.php index bfdceb99..9cb731eb 100644 --- a/application/admin/view/wechat/wechat_user/index.php +++ b/application/admin/view/wechat/wechat_user/index.php @@ -471,7 +471,7 @@ } } var str = chk_value.join(','); - var url = "http://"+window.location.host+"/admin/store.store_coupon/grant/id/"+str; + var url = "http://"+window.location.host+"/admin/ump.store_coupon/grant/id/"+str; $eb.createModalFrame(this.innerText,url,{'w':800}); }) $('.news').on('click',function (e) { @@ -494,7 +494,7 @@ } } var str = chk_value.join(','); - var url = "http://"+window.location.host+"/admin/wechat.wechat_news_category/send_news/id/"+str; + var url = "{:Url('wechat.wechat_news_category/send_news')}?id="+str; $eb.createModalFrame(this.innerText,url,{'w':800}); }) $('.synchro').on('click',function(){ diff --git a/application/routine/controller/AuthApi.php b/application/routine/controller/AuthApi.php index 802de255..0406781b 100644 --- a/application/routine/controller/AuthApi.php +++ b/application/routine/controller/AuthApi.php @@ -1441,7 +1441,9 @@ class AuthApi extends AuthController{ if($domainTop != 'https') $domain = 'https:'.substr($domain,5,strlen($domain)); if(file_exists($picname)) return JsonService::successful($domain.$picname); else{ - file_put_contents($picname,RoutineCode::getCode($this->userInfo['uid'])); + $res = RoutineCode::getCode($this->userInfo['uid'],$picname); + if($res) file_put_contents($picname,$res); + else return JsonService::fail('二维码生成失败'); } return JsonService::successful($domain.$picname); } @@ -1949,6 +1951,27 @@ class AuthApi extends AuthController{ return JsonService::successful($content); } + /** + * 产品海报二维码 + * @param int $id + */ + public function product_promotion_code($id = 0){ + if(!$id) return JsonService::fail('参数错误'); + $count = StoreProduct::validWhere()->count(); + if(!$count) return JsonService::fail('参数错误'); + $path = 'public'.DS.'uploads'.DS.'codepath'.DS.'product'; + $codePath = $path.DS.$id.'_'.$this->userInfo['uid'].'.jpg'; + $domain = SystemConfigService::get('site_url').'/'; + if(!file_exists($codePath)){ + if(!is_dir($path)) mkdir($path,0777,true); + $res = RoutineCode::getCode($this->userInfo['uid'],$codePath,[],'/pages/product-con/index?id='.$id,'product_spread'); + if($res) file_put_contents($codePath,$res); + else return JsonService::fail('二维码生成失败'); + } + return JsonService::successful($domain.$codePath); + } + + public function poster($id = 0){ if(!$id) return JsonService::fail('参数错误'); $productInfo = StoreProduct::getValidProduct($id,'store_name,id,price,image,code_path'); @@ -1957,9 +1980,8 @@ class AuthApi extends AuthController{ $path = 'public'.DS.'uploads'.DS.'codepath'.DS.'product'; $codePath = $path.DS.$productInfo['id'].'.jpg'; if(!file_exists($codePath)){ - if(!is_dir($path)) - mkdir($path,0777,true); - file_put_contents($codePath,RoutineCode::getPages('pages/product-con/index?id='.$productInfo['id'])); + if(!is_dir($path)) mkdir($path,0777,true); + $res = file_put_contents($codePath,RoutineCode::getPages('pages/product-con/index?id='.$productInfo['id'])); } $res = StoreProduct::edit(['code_path'=>$codePath],$id); if($res) $productInfo['code_path'] = $codePath; diff --git a/application/routine/controller/Login.php b/application/routine/controller/Login.php index 8a5a76ec..249cb3ba 100644 --- a/application/routine/controller/Login.php +++ b/application/routine/controller/Login.php @@ -30,7 +30,9 @@ class Login extends Controller{ else $data['unionid'] = ''; $data['routine_openid'] = $res['openid']; $data['session_key'] = $res['session_key']; - $data['uid'] = RoutineUser::routineOauth($data); + $dataOauthInfo = RoutineUser::routineOauth($data); + $data['uid'] = $dataOauthInfo['uid']; + $data['page'] = $dataOauthInfo['page']; $data['status'] = RoutineUser::isUserStatus($data['uid']); return JsonService::successful($data); } diff --git a/application/routine/model/routine/RoutineCode.php b/application/routine/model/routine/RoutineCode.php index 672c7753..a34ce35d 100644 --- a/application/routine/model/routine/RoutineCode.php +++ b/application/routine/model/routine/RoutineCode.php @@ -10,22 +10,32 @@ class RoutineCode{ * @param array $color 二维码线条颜色 * @return mixed */ - public static function getCode($uid = 0,$color = array()){ + public static function getCode($uid = 0,$imgUrl = '',$color = array(),$page = '',$thirdType = 'spread'){ $accessToken = RoutineServer::get_access_token(); - $url = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=".$accessToken; - if($uid) $data['scene'] = $uid; - else $data['scene'] = 0; - if(empty($color)){ - $color['r'] = 0; - $color['g'] = 0; - $color['b'] = 0; - } - $data['page'] = ''; - $data['width'] = 430; - $data['auto_color'] = false; - $data['line_color'] = $color; - $data['is_hyaline'] = false; - return RoutineServer::curlPost($url,json_encode($data)); + $res = RoutineQrcode::setRoutineQrcodeForever($uid,$thirdType,$page,$imgUrl); + if($res){ + $url = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=".$accessToken; + if($uid) $data['scene'] = $res->id; + else $data['scene'] = 0; + if(empty($color)){ + $color['r'] = 0; + $color['g'] = 0; + $color['b'] = 0; + } + $data['page'] = ''; + $data['width'] = 430; + $data['auto_color'] = false; + $data['line_color'] = $color; + $data['is_hyaline'] = false; + $resCode = RoutineServer::curlPost($url,json_encode($data)); + if($resCode){ + $dataQrcode['status'] = 1; + $dataQrcode['url_time'] = time(); + $res = RoutineQrcode::setRoutineQrcodeFind($res->id,$dataQrcode); + if($res) return $resCode; + else return false; + }else return false; + }else return false; } /** diff --git a/application/routine/model/routine/RoutineQrcode.php b/application/routine/model/routine/RoutineQrcode.php new file mode 100644 index 00000000..c7ce2330 --- /dev/null +++ b/application/routine/model/routine/RoutineQrcode.php @@ -0,0 +1,74 @@ +count(); + } + + /** + * 获取小程序二维码信息 + * @param int $id + * @param string $field + * @return array|bool|false|\PDOStatement|string|\think\Model + * @throws \think\db\exception\DataNotFoundException + * @throws \think\db\exception\ModelNotFoundException + * @throws \think\exception\DbException + */ + public static function getRoutineQrcodeFindType($id = 0,$field = 'third_type,third_id,page'){ + if(!$id) return false; + $count = self::getRoutineQrcodeFind($id); + if(!$count) return false; + return self::where('id',$id)->where('status',1)->field($field)->find(); + } + + +} \ No newline at end of file diff --git a/application/routine/model/user/RoutineUser.php b/application/routine/model/user/RoutineUser.php index 8e7bcd24..58e321e6 100644 --- a/application/routine/model/user/RoutineUser.php +++ b/application/routine/model/user/RoutineUser.php @@ -7,6 +7,7 @@ namespace app\routine\model\user; +use app\routine\model\routine\RoutineQrcode; use basic\ModelBasic; use traits\ModelTrait; use app\routine\model\user\User; @@ -33,6 +34,16 @@ class RoutineUser extends ModelBasic $routineInfo['session_key'] = $routine['session_key'];//会话密匙 $routineInfo['unionid'] = $routine['unionid'];//用户在开放平台的唯一标识符 $routineInfo['user_type'] = 'routine';//用户类型 + $page = '';//跳转小程序的页面 + $spid = 0;//绑定关系uid + //获取是否有扫码进小程序 + if($routine['spid']){ + $info = RoutineQrcode::getRoutineQrcodeFindType($routine['spid']); + if($info){ + $spid = $info['third_id']; + $page = $info['page']; + } + } // 判断unionid 存在根据unionid判断 if($routineInfo['unionid'] != '' && WechatUser::be(['unionid'=>$routineInfo['unionid']])){ WechatUser::edit($routineInfo,$routineInfo['unionid'],'unionid'); @@ -41,21 +52,18 @@ class RoutineUser extends ModelBasic }else if(WechatUser::be(['routine_openid'=>$routineInfo['routine_openid']])){ //根据小程序openid判断 WechatUser::edit($routineInfo,$routineInfo['routine_openid'],'routine_openid'); $uid = WechatUser::where('routine_openid',$routineInfo['routine_openid'])->value('uid'); - if(!User::be(['uid'=>$uid])){ - $routineInfo = WechatUser::where('uid',$uid)->find(); - User::setRoutineUser($routineInfo); - }else{ - User::updateWechatUser($routineInfo,$uid); - } + User::updateWechatUser($routineInfo,$uid); }else{ $routineInfo['add_time'] = time();//用户添加时间 $routineInfo = WechatUser::set($routineInfo); - if(User::isUserSpread($routine['spid'])) { - $res = User::setRoutineUser($routineInfo,$routine['spid']); //用户上级 - } else $res = User::setRoutineUser($routineInfo); + if(User::isUserSpread($spid)) { + $res = User::setRoutineUser($routineInfo,$spid); //用户上级 + }else $res = User::setRoutineUser($routineInfo); $uid = $res->uid; } - return $uid; + $data['page'] = $page; + $data['uid'] = $uid; + return $data; } /** diff --git a/application/wap/controller/Store.php b/application/wap/controller/Store.php index 9f056d05..f260c47a 100644 --- a/application/wap/controller/Store.php +++ b/application/wap/controller/Store.php @@ -107,7 +107,9 @@ class Store extends AuthController $storeInfo['userCollect'] = StoreProductRelation::isProductRelation($id,$this->userInfo['uid'],'collect'); list($productAttr,$productValue) = StoreProductAttr::getProductAttrDetail($id); setView($this->userInfo['uid'],$id,$storeInfo['cate_id'],'viwe'); + $urlShare = SystemConfigService::get('site_url').Url::build('wap/Store/detail',['id'=>$id,'spuid'=>$this->uid]); $this->assign([ + 'urlShare'=>$urlShare, 'storeInfo'=>$storeInfo, 'similarity'=>StoreProduct::cateIdBySimilarityProduct($storeInfo['cate_id'],'id,store_name,image,price,sales',4), 'productAttr'=>$productAttr, @@ -176,10 +178,98 @@ class Store extends AuthController return $this->fetch(); } + + public function combination(){ + $where = array(); + $store_combination = StoreCombination::getAll(0,20); + $this->assign('list',$store_combination); + return $this->fetch(); + } //获取列表 public function get_list(){ return JsonService::successful(StoreCombination::get_list(20)); } + + public function combination_detail($id = 0){ + if(!$id) return $this->failed('拼团不存在或已下架'); + $combinationOne = StoreCombination::getCombinationOne($id); + if(!$combinationOne) return $this->failed('拼团不存在或已下架'); + $combinationOne['images'] = json_decode($combinationOne['images'],true); + $combinationOne['userLike'] = StoreProductRelation::isProductRelation($combinationOne['product_id'],$this->userInfo['uid'],'like'); + $combinationOne['like_num'] = StoreProductRelation::productRelationNum($combinationOne['product_id'],'like'); + $combinationOne['userCollect'] = StoreProductRelation::isProductRelation($combinationOne['product_id'],$this->userInfo['uid'],'collect'); + $pink = StorePink::getPinkAll($id);//拼团列表 + setView($this->userInfo['uid'],$id,$combinationOne['cate_id'],'viwe','combination'); + StoreCombination::editIncBrowse($id); + $pindAll = array(); + foreach ($pink as $k=>$v){ + $pink[$k]['count'] = StorePink::getPinkPeople($v['id'],$v['people']); + $pink[$k]['h'] = date('H',$v['stop_time']); + $pink[$k]['i'] = date('i',$v['stop_time']); + $pink[$k]['s'] = date('s',$v['stop_time']); + $pindAll[] = $v['id'];//开团团长ID + } + $user = WechatUser::get($this->uid)->toArray();//用户信息 + $site_name = SystemConfig::getValue('site_name');//网站名称 + $site_logo = SystemConfig::getValue('site_logo');//网站LOGO + $wechat_qrcode = SystemConfig::getValue('wechat_qrcode');//公众号二维码 + $this->assign([ + 'pink'=>$pink, + 'user'=>$user, + 'site_name'=>$site_name, + 'site_logo'=>$site_logo, + 'wechat_qrcode'=>$wechat_qrcode, + 'pindAll'=>$pindAll, + 'storeInfo'=>$combinationOne, + 'reply'=>StoreProductReply::getRecProductReply($combinationOne['product_id']), + 'replyCount'=>StoreProductReply::productValidWhere()->where('product_id',$combinationOne['product_id'])->count(), + 'mer_id' => StoreProduct::where('id',$combinationOne['product_id'])->value('mer_id') + ]); + + return $this->fetch(); + } + + public function combination_order(Request $request){ + $data = UtilService::getMore([ + ['cartId',0], + ['pinkId',0], + ],$request); + + if($data['pinkId']) if(StorePink::getIsPinkUid($data['pinkId'])) return $this->redirect(Url::build('my/order',['uni'=>StoreOrder::getStoreIdPink($data['pinkId'])])); + if($data['pinkId']) if(StoreOrder::getIsOrderPink($data['pinkId'])) return $this->redirect(Url::build('my/order',['uni'=>StoreOrder::getStoreIdPink($data['pinkId'])]));; + $cartId = $data['cartId']; + $pinkId = $data['pinkId']; + if(!is_string($cartId) || !$cartId ) + return $this->failed('请提交购买的商品!'); + $cartGroup = StoreCart::getUserCombinationProductCartList($this->userInfo['uid'],$cartId); + if(count($cartGroup['invalid'])) + return $this->failed($cartGroup['invalid'][0]['productInfo']['store_name'].'已失效!'); + if(!$cartGroup['valid']) return $this->failed('请提交购买的商品!'); + $cartInfo = $cartGroup['valid']; + foreach ($cartInfo as $k=>$cart){ + if($cart['combination_id']){ + $cartInfo[$k]['productInfo']['price'] = StoreCombination::where('id',$cart['combination_id'])->value('price'); + $cartInfo[$k]['productInfo']['image'] = StoreCombination::where('id',$cart['combination_id'])->value('image'); + $cartInfo[$k]['productInfo']['slider_image'] = json_decode(StoreCombination::where('id',$cart['combination_id'])->value('images'),true); + } + } + $priceGroup = StoreOrder::getCombinationOrderPriceGroup($cartInfo); + $other = [ + 'offlinePostage'=>SystemConfigService::get('offline_postage'), + 'integralRatio'=>SystemConfigService::get('integral_ratio') + ]; + $this->assign([ + 'cartInfo'=>$cartInfo, + 'priceGroup'=>$priceGroup, + 'orderKey'=>StoreOrder::cacheOrderInfo($this->userInfo['uid'],$cartInfo,$priceGroup,$other), + 'offlinePostage'=>$other['offlinePostage'], + 'userInfo'=>User::getUserInfo($this->userInfo['uid']), + 'integralRatio'=>$other['integralRatio'], + 'pinkId'=>$pinkId + ]); + + return $this->fetch(); + } /** * 秒杀列表页 * @@ -224,4 +314,75 @@ class Store extends AuthController return $this->fetch(); } + public function cut_list(){ + $bargain = StoreBargain::getList(); + $bargain = StoreBargainUser::getUserList($bargain); + $bargainUser = StoreBargainUser::getBargainUserStatusSuccess(); + $this->assign([ + 'bargain'=>$bargain, + 'bargainUser'=>$bargainUser, + ]); + return $this->fetch(); + } + public function cut_con($id = 0,$bargainUid = 0){ + if(!$id) return $this->failed('参数错误'); + //砍价产品 + $bargain = StoreBargain::getBargainTerm($id); + $bargain['time'] = time(); + $description = htmlspecialchars_decode($bargain['description']); + $rule = isset($bargain['rule']) ? htmlspecialchars_decode($bargain['rule']) : ''; + if(!$bargainUid) + //判断当前登录人是不是砍价 + if(!StoreBargainUser::isBargainUser($id,$this->userInfo['uid'])) + // 参与砍价 + if(!StoreBargainUser::setBargain($id,$this->userInfo['uid'])) return $this->failed('参与失败,请重新参与砍价',Url::build('store/bargain')); + //顶部人数 + StoreBargain::addBargainLook($id); + $lookCount = StoreBargain::getBargainLook()['look'];//观看人数 + $shareCount = StoreBargain::getBargainShare()['share'];//观看人数 + //砍价 + $selfCut = 0; + if(!$bargainUid){ + $res = StoreBargainUserHelp::setBargainUserHelp($id,$bargainUid ? $bargainUid : $this->userInfo['uid'],$this->userInfo['uid']); + if($res) { + $selfCut = 1; + if(!StoreBargainUserHelp::getSurplusPrice($id,$bargainUid ? $bargainUid : $this->userInfo['uid'])){ + $bargainUserTableId = StoreBargainUser::getBargainUserTableId($id,$bargainUid ? $bargainUid : $this->userInfo['uid']); + $bargain = StoreBargain::where('id',$id)->find()->toArray(); + $bargainUser = StoreBargainUser::where('id',$bargainUserTableId)->find()->toArray(); + } + } + $userInfoBargain = $this->userInfo; + }else $userInfoBargain = User::getUserInfo($bargainUid); + //砍价帮 + $bargainUserTableId = StoreBargainUser::setUserBargain($id,$bargainUid ? $bargainUid : $this->userInfo['uid']); + $storeBargainUserHelp = StoreBargainUserHelp::getList($bargainUserTableId,15); + //获取砍价帮总人数 + $count = StoreBargainUserHelp::getBargainUserHelpPeopleCount($id,$bargainUid ? $bargainUid : $this->userInfo['uid']); + //获取用户还剩余的砍价金额 + $price = StoreBargainUserHelp::getSurplusPrice($id,$bargainUid ? $bargainUid : $this->userInfo['uid']); + //获取砍价进度条 + $pricePercent = StoreBargainUserHelp::getSurplusPricePercent($id,$bargainUid ? $bargainUid : $this->userInfo['uid']); + $selfCutPrice = bcsub(bcsub($bargain['price'],$price,2),$bargain['min_price'],2); + //判断当前登录人是否砍价 1 微砍价 2 已砍价 + $userInfoBargainBool = StoreBargainUserHelp::isBargainUserHelpCount($id,$bargainUid,$this->userInfo['uid']) ? 1 : 2; + $this->assign([ + 'userInfoBargainBool'=>$userInfoBargainBool, + 'selfCut'=>$selfCut, + 'userInfoBargain'=>$userInfoBargain, + 'selfCutPrice'=>$selfCutPrice, + 'bargain'=>$bargain, + 'description'=>$description, + 'rule'=>$rule, + 'shareCount'=>$shareCount, + 'lookCount'=>$lookCount, + 'userCount'=>StoreBargainUser::count(), + 'userHelpList'=>$storeBargainUserHelp, + 'count'=>$count, + 'price'=>$price, + 'pricePercent'=>$pricePercent, + 'bargainUid'=>$bargainUid, + ]); + return $this->fetch(); + } } \ No newline at end of file diff --git a/application/wap/view/first/store/detail.html b/application/wap/view/first/store/detail.html index 58554e97..70bf73e4 100644 --- a/application/wap/view/first/store/detail.html +++ b/application/wap/view/first/store/detail.html @@ -86,7 +86,9 @@
- +