Commit 9b028fd8 authored by liuyuzhen's avatar liuyuzhen

店铺经纬度地址修改

parent c644aa8f
......@@ -115,4 +115,8 @@ class StoreController extends \Our\Controller_AbstractIndex {
$this->success($couponTitles);
}
public function editQmStoreClassAction(){
$this->storeService->editQmStoreClass();
}
}
\ No newline at end of file
......@@ -74,6 +74,26 @@ class CommonExtension {
return $c;
}
/**
* 判断地址是否在多边形内
* @param $lat 地址纬度
* @param $lng 地址经度
* @param $coordStr 多边形区域字符串
* @return bool
*/
public static function locationInArea($lat,$lng,$coordStr){
if(!($lat&&$lng)){
return false;
}
$str = str_replace('\"','"',$coordStr);
$coordArray = json_decode($str,true);
if(is_array($coordArray)&&count($coordArray)>0){
$location = array('lat'=>$lat,'lng'=>$lng);
$in_store_service_flag = self::isPointInPolygon($coordArray,$location);
return $in_store_service_flag;
}
return false;
}
/**
......
<?php
namespace Store;
/**
* User: liuyuzhen
* Date: 2018/10/18
* Time: 17:34
* Description:
*/
class StoreUtil {
public function checkAddressInServiceArea($address,$storeId){
$storeDao = \DAO\StoreModel::getInstance();
$store = $storeDao->get($storeId,false);
$inAreaFlag = false ;
$qmStoreClassDao = \DAO\QmStoreClassModel::getInstance();
$qmClassCon['store_id'] = $storeId;
$qmClassCon['is_charged'] = 1;
$qmClassCon['class_style'] = 2;
$qmSignScopeList = \Our\RedisHelper::cachedFunction(\Redis\Db6\QmStoreClassRedisModel::getInstance(),array(&$qmStoreClassDao, 'selectByWhere'),array($qmClassCon,'sign_scope'),\Our\ApiConst::oneHour,array($storeId));
if($qmSignScopeList){
foreach($qmSignScopeList as $qmSignScope){
if($qmSignScope['sign_scope']){
$inAreaFlag = \Our\CommonExtension::locationInArea($address['lat'],$address['lng'],$qmSignScope['sign_scope']);
if($inAreaFlag){
return true;
}
}
}
}
if(!$store['store_sales_scope']){
return false;
}
$inAreaFlag = \Our\CommonExtension::locationInArea($address['lat'],$address['lng'],$store['store_sales_scope']);
return $inAreaFlag;
}
/**
* 经纬度是否在店铺地址范围内
* @param $lat
* @param $lng
* @param $storeId
* @return bool
*/
public function checkLocationInServiceArea($lat,$lng,$storeId){
return self::checkAddressInServiceArea(array('lat'=>$lat,'lng'=>$lng),$storeId);
}
/**
* 类实例
*
*/
private static $_instance = null;
/**
* 单例模式获取类实例
*
*/
public static function getInstance()
{
if (!(self::$_instance instanceof self)) {
self::$_instance = new self();
}
return self::$_instance;
}
}
\ No newline at end of file
......@@ -623,7 +623,7 @@ class CartServiceModel extends \Business\AbstractModel{
}
$str = str_replace('\"','"',$store['store_sales_scope']);
$store_sales_scope = json_decode($str,true);
$result = \Our\CommonExtension::isPointInPolygon($store_sales_scope, array('lng'=>$address['lng'],'lat'=>$address['lat']));
$result = \Store\StoreUtil::getInstance()->checkAddressInServiceArea(array('lng'=>$address['lng'],'lat'=>$address['lat']),$storeId);
$storeDistance = \Our\CommonExtension::getDistance($address['lat'],$address['lng'],$store['store_latitude'],$store['store_longitude'],\Our\ApiConst::one);
if($result){
......
......@@ -32,7 +32,7 @@ class GoodsClassServiceModel extends \Business\AbstractModel{
$qmStoreClassCon['city_code'] = $cityCode;
$qmStoreClassCon['is_charged'] = \Our\ApiConst::one;
$qmStoreClassCon['class_style'] = \Our\ApiConst::signClassStyle;
$storeField = 'gc_id,longitude,latitude,sign_rang,gc_parent_id,store_id';
$storeField = 'gc_id,sign_scope,gc_parent_id,store_id';
$qmStoreClassDao = \DAO\QmStoreClassModel::getInstance();
$signStoreClasses = \Our\RedisHelper::cachedFunction(\Redis\Db6\QmStoreClassRedisModel::getInstance(),array(&$qmStoreClassDao, 'getStoreClasses'),array($qmStoreClassCon,$storeField),\Our\ApiConst::oneHour,array($cityCode));
......@@ -159,18 +159,13 @@ class GoodsClassServiceModel extends \Business\AbstractModel{
$serviceStoreIds = array();
if($storeList){
foreach ($storeList as $key=>$store){
if($store['store_sales_scope']){
$str = str_replace('\"','"',$store['store_sales_scope']);
$store_sales_scope = json_decode($str,true);
$result = \Our\CommonExtension::isPointInPolygon($store_sales_scope, array('lng'=>$where['lng'],'lat'=>$where['lat']));
if($result){
$serviceStoreIds[] = $store['store_id'];
}
$result =\Store\StoreUtil::getInstance()->checkAddressInServiceArea(array('lng'=>$where['lng'],'lat'=>$where['lat']),$store['store_id']);
if($result){
$serviceStoreIds[] = $store['store_id'];
}
}
}
if($serviceStoreIds){
$position['lat'] = $where['lat'];
$position['lng'] = $where['lng'];
$position['cityCode'] = $where['cityCode'];
......@@ -188,18 +183,20 @@ class GoodsClassServiceModel extends \Business\AbstractModel{
$lng = $where['lng'];
$cityCode = $where['cityCode'];
$storeDao = \DAO\StoreModel::getInstance();
$signStoreClasses = $this->getSignClassesByCityCode($cityCode);
if($signStoreClasses){
$returnClass = array();
$newStoreIds = array();
foreach($signStoreClasses as $signClass){
$class_distance = \Our\CommonExtension::getDistance($lat,$lng,$signClass['latitude'],$signClass['longitude'],1);
$inAreaFlag = \Our\CommonExtension::locationInArea($lat,$lng,$signClass['sign_scope']);
//判断签约分类是否可以为当前用户提供服务,并且记录这些店铺对应的store_id
if($class_distance<=$signClass['sign_rang']){
if($inAreaFlag){
$store =$storeDao->get($signClass['store_id'],false);
$class_distance = \Our\CommonExtension::getDistance($lat,$lng,$store['store_latitude'],$signClass['store_latitude'],1);
$class = $signClass;
$class['class_distance'] = $class_distance;
$returnClass[$class_distance] = $class;
if(!($newStoreIds&&in_array($signClass['store_id'],$newStoreIds))){
$newStoreIds[] = $signClass['store_id'];
......
......@@ -94,32 +94,24 @@ class StoreServiceModel extends \Business\AbstractModel{
$defaultDeliveryTime = 0;
if($distince>0){
if(!empty($storeInfo['store_sales_scope'])){
$str = str_replace('\"','"',$storeInfo['store_sales_scope']);
$store_sales_scope = json_decode($str,true);
if(is_array($store_sales_scope)&&count($store_sales_scope)>0){
//\Our\ValidationMap::setCoordArray($store_sales_scope);
$location = array('lat'=>$lat,'lng'=>$lng);
//$in_store_service_flag = \Our\ValidationMap::isCityCenter($location);
$in_store_service_flag = \Our\CommonExtension::isPointInPolygon($store_sales_scope,$location);
if($in_store_service_flag){
$in_store_service_flag=1;
$DeliveryFormulaInstance = \DAO\DeliveryFormulaModel::getInstance();
$deliveryFormula = \Our\RedisHelper::cachedFunction(\Redis\Db6\DeliveryFormulaRedisModel::getInstance(),array(&$DeliveryFormulaInstance, 'getOne'),array('*',array('store_id'=>$storeId)),\Our\ApiConst::sevenDaySecond,array($storeId));
$formula = $DeliveryFormulaInstance->getDeliveryFormulaByDistince($storeId,$distince,$deliveryFormula);
//如果采用精简版公式,获取常速送达的时间作为默认送达时间
if($formula){
$defaultDeliveryTime = (empty($formula['default_time'])?$formula[2]['time']:$formula['default_time']);
}
if(!$defaultDeliveryTime){
//$in_store_service_flag = 0;
$defaultDeliveryTime = 0;
}
}else{
$in_store_service_flag=0;
$defaultDeliveryTime = 0;
}
$location = array('lat'=>$lat,'lng'=>$lng);
$in_store_service_flag = \Store\StoreUtil::getInstance()->checkAddressInServiceArea($location,$storeId);
if($in_store_service_flag){
$in_store_service_flag=1;
$DeliveryFormulaInstance = \DAO\DeliveryFormulaModel::getInstance();
$deliveryFormula = \Our\RedisHelper::cachedFunction(\Redis\Db6\DeliveryFormulaRedisModel::getInstance(),array(&$DeliveryFormulaInstance, 'getOne'),array('*',array('store_id'=>$storeId)),\Our\ApiConst::sevenDaySecond,array($storeId));
$formula = $DeliveryFormulaInstance->getDeliveryFormulaByDistince($storeId,$distince,$deliveryFormula);
//如果采用精简版公式,获取常速送达的时间作为默认送达时间
if($formula){
$defaultDeliveryTime = (empty($formula['default_time'])?$formula[2]['time']:$formula['default_time']);
}
if(!$defaultDeliveryTime){
//$in_store_service_flag = 0;
$defaultDeliveryTime = 0;
}
}else{
$in_store_service_flag=0;
$defaultDeliveryTime = 0;
}
}
//关注
......@@ -546,6 +538,7 @@ class StoreServiceModel extends \Business\AbstractModel{
foreach($allStores as &$store){
$store['isPurchased'] = \Our\ApiConst::zero;
}
$memberStores = null;
if($memberId){
$favoritesStoreDao = \DAO\FavoritesStoreModel::getInstance();
......@@ -556,7 +549,6 @@ class StoreServiceModel extends \Business\AbstractModel{
}
}
$goodsClassDao = \DAO\GoodsClassModel::getInstance();
//获取当前分类对应所有店铺信息
......@@ -566,11 +558,11 @@ class StoreServiceModel extends \Business\AbstractModel{
//服务分类对应店铺
$serviceStores = $this->getServiceClassStores($gcId,$condition);
//获取签约分类对应店铺
$expressStores = $this->getExpressStores($gcId,$condition);
$goodsClassList = $goodsClassDao->getOnlineSecondClassList($gcId);
if($goodsClassList){
foreach($goodsClassList as $goodsClass){
$returnStores = array();
......@@ -680,6 +672,7 @@ class StoreServiceModel extends \Business\AbstractModel{
/*if($signStoreIds&&$serviceStoreIds){
$serviceStoreIds = array_diff($serviceStoreIds,$signStoreIds);
}*/
//签约店铺存在
if($serviceStoreIds){
$return = $this->getStoreClassesByStoreIds($serviceStoreIds,$gcId);
......@@ -689,6 +682,7 @@ class StoreServiceModel extends \Business\AbstractModel{
}
public function getExpressStores($gcId,$position){
ksort($position);
$storeDao = \DAO\StoreModel::getInstance();
/*$storeRedis = \Redis\Db6\StoreRedisModel::getInstance();
......@@ -723,13 +717,13 @@ class StoreServiceModel extends \Business\AbstractModel{
public function getSignStoreClassesByStoreIds($signStoreIds,$gcId,$position){
$signStoreClassSql = ' store_id in ('.implode(',',$signStoreIds).') and is_charged=1 and class_style = 2 and gc_parent_id ='.$gcId;
$qmStoreClassDao = \DAO\QmStoreClassModel::getInstance();
$signClassStores = $qmStoreClassDao->selectByWhere($signStoreClassSql,'store_id,gc_id,sign_rang,longitude,latitude');
$signClassStores = $qmStoreClassDao->selectByWhere($signStoreClassSql,'store_id,gc_id,sign_scope');
//$signClassStores = $storeGoodsClassDao->selectByWhere($signStoreClassSql,'store_id,gc_id');
if($signClassStores){
$return = array();
foreach($signClassStores as $signClass){
$storeDistance = \Our\CommonExtension::getDistance($position['lat'],$position['lng'],$signClass['latitude'],$signClass['longitude']);
if($storeDistance <= $signClass['sign_rang']){
$inAreaFlag = \Our\CommonExtension::locationInArea($position['lat'],$position['lng'],$signClass['sign_scope']);
if($inAreaFlag){
if($return[$signClass['gc_id']]){
continue;
}
......@@ -752,19 +746,18 @@ class StoreServiceModel extends \Business\AbstractModel{
shuffle($signClassStores);
$gcIds = array_unique(array_column($signClassStores,'gc_id'));
foreach($gcIds as $tempGcId){
if($return[$tempGcId]){
if(isset($return[$tempGcId])&&$return[$tempGcId]){
break;
}
foreach($signClassStores as $signClass){
if($tempGcId==$signClass['gc_id']){
if($return[$signClass['gc_id']]){
if(isset($return[$signClass['gc_id']])&&$return[$signClass['gc_id']]){
break;
}
$return[$signClass['gc_id']] = $signClass['store_id'];
}
}
}
return $return;
}
return false;
......@@ -898,6 +891,19 @@ class StoreServiceModel extends \Business\AbstractModel{
$storeDao->delStoresCacheByCityCode($cityCode);
}
public function editQmStoreClass(){
$qmStoreClassDao = \DAO\QmStoreClassModel::getInstance();
$qmStoreClassList = $qmStoreClassDao->selectByWhere(array('sign_rang'=>array('gt',0)));
if($qmStoreClassList){
foreach($qmStoreClassList as $qmObj){
$qmStoreClassStr = '[';
$qmStoreClassStr .= '{"lng":'.($qmObj['longitude']+0.001).',"lat":'.($qmObj['latitude']-0.001).'},{"lng":'.($qmObj['longitude']+0.001).',"lat":'.($qmObj['latitude']+0.001).'},{"lng":'.($qmObj['longitude']-0.001).',"lat":'.($qmObj['latitude']+0.001).'},{"lng":'.($qmObj['longitude']-0.001).',"lat":'.($qmObj['latitude']-0.001).'}';
$qmStoreClassStr .= ']';
$result = $qmStoreClassDao->update(array('sign_scope'=>$qmStoreClassStr),array('id'=>$qmObj['id']));
}
}
}
/**
*/
private static $_instance = null;
......
......@@ -28,6 +28,9 @@ class QmStoreClassModel extends \DAO\AbstractModel{
public function selectByWhere($where = null,$field = '*',$limit=false){
$this->setDb();
if(is_array($where)){
$where = $this->db->getSqlWhereByArray($where);
}
if($limit){
$result = $this->db->select($field)->from($this->_tableName)->where($where)->limit($limit[0],$limit[1])->fetchAll();
}else{
......@@ -36,6 +39,11 @@ class QmStoreClassModel extends \DAO\AbstractModel{
return $result;
}
public function delSignScopeCache($storeId){
$result = \Our\RedisHelper::delCachedFunction(\Redis\Db6\QmStoreClassRedisModel::getInstance(),array(&$this, 'selectByWhere'),array(),array($storeId));
return $result;
}
/**
* 一级分类对应有效的店铺
......@@ -100,4 +108,11 @@ class QmStoreClassModel extends \DAO\AbstractModel{
\Our\RedisHelper::delCachedFunction(\Redis\Db6\QmStoreClassRedisModel::getInstance(), array(&$this, 'getStoreClasses'),array(),array($cityCode));
}
public function update($data,$where){
$this->setDb(\Our\DbNameConst::masterDBConnectName);
$result=$this->db->update($this->_tableName)->rows($data)->where($where)->execute();
return $result;
}
}
\ No newline at end of file
......@@ -334,9 +334,7 @@ class StoreModel extends \DAO\AbstractModel
return $inAreaFlag;
}
if($store['seller_distribution']&&$address){
$str = str_replace('\"','"',$store['store_sales_scope']);
$store_sales_scope = json_decode($str,true);
$result = \Our\CommonExtension::isPointInPolygon($store_sales_scope, array('lng'=>$address['lng'],'lat'=>$address['lat']));
$result = \Store\StoreUtil::getInstance()->checkAddressInServiceArea(array('lng'=>$address['lng'],'lat'=>$address['lat']),$store['store_id']);
if($result){
$inAreaFlag = \Our\ApiConst::one;
}
......@@ -345,6 +343,7 @@ class StoreModel extends \DAO\AbstractModel
}
/**
* 类实例
*
......
......@@ -318,7 +318,7 @@ elastic.master.host="192.168.1.201"
elastic.master.port="9200"
elastic.master.scheme="http";
[lyztest : common]
[lyz : common]
; 数据库配置
resources.database.params.driver = "pdo_mysql"
resources.database.params.hostname = "127.0.0.1"
......@@ -363,7 +363,7 @@ elastic.master.host="192.168.1.201"
elastic.master.port="9200"
elastic.master.scheme="http";
[lyz : common]
[lyztest : common]
; 数据库配置
resources.database.params.driver = "pdo_mysql"
resources.database.params.hostname = "127.0.0.1"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment