Commit b4df4102 authored by testshenbd's avatar testshenbd

Merge branch 'lyz_index' of git.shenbd.com:qm-develop/shenbd into master_dev

parents e9f96187 0b75ce90
<?php <?php
phpinfo();exit; //phpinfo();exit;
echo 'is nothing';
exit;
header("Content-type: text/html; charset=utf-8"); header("Content-type: text/html; charset=utf-8");
//利用PHP目录和文件函数遍历用户给出目录的所有的文件和文件夹,修改文件名称 //利用PHP目录和文件函数遍历用户给出目录的所有的文件和文件夹,修改文件名称
function fRename($dirname) function fRename($dirname)
......
...@@ -111,8 +111,18 @@ class IndexController extends \Our\Controller_Abstract { ...@@ -111,8 +111,18 @@ class IndexController extends \Our\Controller_Abstract {
$clientPush->pushTest(array()); $clientPush->pushTest(array());
exit; exit;
} }
public function testRelease(){
$obj=\Business\Order\OrderServiceModel::getInstance();
$obj->order='abc';
//\Business\Order\OrderServiceModel::realeaseInstance();
}
public function indexAction() { public function indexAction() {
$this->testRelease();
$obj=\Business\Order\OrderServiceModel::getInstance();
echo $obj->order;
exit;
$getKey=$_GET['key']; $getKey=$_GET['key'];
if($getKey!='~!@#$`1234qwert'){ if($getKey!='~!@#$`1234qwert'){
throw new Exception('非法',-1111); throw new Exception('非法',-1111);
......
...@@ -73,7 +73,9 @@ class StoreController extends \Our\Controller_AbstractIndex { ...@@ -73,7 +73,9 @@ class StoreController extends \Our\Controller_AbstractIndex {
$currentAddress['gcId'] = $data['gcId']; $currentAddress['gcId'] = $data['gcId'];
} }
$memberId = $this->sess->get('member_id'); $memberId = $this->sess->get('member_id');
$storeService = \Business\Store\StoreServiceModel::getInstance(); /*$storeService = \Business\Store\StoreServiceModel::getInstance();
$return = $storeService->getRecommendStores($currentAddress, $memberId);*/
$storeService = \Business\Store\ClassStoreServiceModel::getInstance();
$return = $storeService->getRecommendStores($currentAddress, $memberId); $return = $storeService->getRecommendStores($currentAddress, $memberId);
if ($return) { if ($return) {
$this->success($return); $this->success($return);
...@@ -125,7 +127,7 @@ class StoreController extends \Our\Controller_AbstractIndex { ...@@ -125,7 +127,7 @@ class StoreController extends \Our\Controller_AbstractIndex {
$data = $this->req[\Our\NameConst::data]; $data = $this->req[\Our\NameConst::data];
$couponService = \Business\Coupon\CouponServiceModel::getInstance(); $couponService = \Business\Coupon\CouponServiceModel::getInstance();
$couponTitles = $couponService->getStorePromotionCouponTitles($data); $couponTitles = $couponService->getStorePromotionCouponTitles($data);
$this->success($couponTitles); $this->success($couponTitles);
} }
......
...@@ -752,8 +752,8 @@ class OrderConfirmUtil { ...@@ -752,8 +752,8 @@ class OrderConfirmUtil {
public function pushMessage(){ public function pushMessage(){
if($this->pushMessageOrders){ if($this->pushMessageOrders){
foreach($this->pushMessageOrders as $tempOrder){ foreach($this->pushMessageOrders as $tempOrder){
//\Business\Order\OrderServiceModel::getInstance(DbNameConst::masterDBConnectName)->pushRecieveOrder($tempOrder); \Business\Order\OrderServiceModel::getInstance(DbNameConst::masterDBConnectName)->pushRecieveOrder($tempOrder);
\Our\Common::redisPublish('\Business\Order\OrderServiceModel','pushRecieveOrder',array($tempOrder)); //\Our\Common::redisPublish('\Business\Order\OrderServiceModel','pushRecieveOrder',array($tempOrder));
} }
} }
} }
...@@ -921,8 +921,8 @@ class OrderConfirmUtil { ...@@ -921,8 +921,8 @@ class OrderConfirmUtil {
\Our\RedisHelper::delCachedFunction(\Redis\Db4\PBundlingRedisModel::getInstance(),array(&$pbundlingInstance, 'getList'),array(),array($storeId)); \Our\RedisHelper::delCachedFunction(\Redis\Db4\PBundlingRedisModel::getInstance(),array(&$pbundlingInstance, 'getList'),array(),array($storeId));
} }
} }
//$this->updateGoodsStorageToDBAndCache($goodsCommonIds,$goodsIds,$blIds,$goodsNewList,$op,$updateSaleNumFlag); $this->updateGoodsStorageToDBAndCache($goodsCommonIds,$goodsIds,$blIds,$goodsNewList,$op,$updateSaleNumFlag);
$this->updateGoodsStorageToCache($goodsCommonIds,$goodsIds,$blIds,$goodsNewList,$op,$updateSaleNumFlag); //$this->updateGoodsStorageToCache($goodsCommonIds,$goodsIds,$blIds,$goodsNewList,$op,$updateSaleNumFlag);
return true; return true;
} }
...@@ -1099,7 +1099,7 @@ class OrderConfirmUtil { ...@@ -1099,7 +1099,7 @@ class OrderConfirmUtil {
$couponStoreIds[] = \Our\ApiConst::zero; $couponStoreIds[] = \Our\ApiConst::zero;
$couponIds = array_column($memberCouponArray,'coupon_id'); $couponIds = array_column($memberCouponArray,'coupon_id');
$couponSql = \Our\Common::format(' id in ({0}) and store_id in({1})',implode(',',$couponIds),implode(',',$couponStoreIds)); $couponSql = \Our\Common::format(' id in ({0}) and store_id in({1})',implode(',',$couponIds),implode(',',$couponStoreIds));
$couponDao = \DAO\Coupon\CouponModel::getInstance(\Our\DbNameConst::masterDBConnectName); $couponDao = \DAO\Coupon\CouponModel::getInstance(\Our\DbNameConst::salveDBConnectName);
$couponList = $couponDao->getCartCouponTitles($couponSql); $couponList = $couponDao->getCartCouponTitles($couponSql);
if(!$couponList){ if(!$couponList){
$storeCartData['couponList'] = array(); $storeCartData['couponList'] = array();
......
...@@ -56,6 +56,8 @@ class ImageConst{ ...@@ -56,6 +56,8 @@ class ImageConst{
const defaultStoreBannerName = 'default_store_banner.jpg'; const defaultStoreBannerName = 'default_store_banner.jpg';
const defaultCategoryImgName = 'category-headpic-default.jpg';
//图片指向的域名 //图片指向的域名
const imageDomain="ossHost"; const imageDomain="ossHost";
......
...@@ -159,6 +159,17 @@ class ImageUtil { ...@@ -159,6 +159,17 @@ class ImageUtil {
return $gcImageUrl; return $gcImageUrl;
} }
public static function getCategoryHeadPic($gcId){
$basePath=\Bootstrap::getUrlIniConfig('source');
$commonPath=ImageConst::defaultPath;
$fileName= ImageConst::categoryHeadPicPrefix.$gcId.\Our\NameConst::jpgSuffix;
$file=$basePath.$commonPath.$fileName;
if(file_exists($file)){
return \Our\Common::getStaticFile($fileName,$commonPath);
}else{
return \Our\Common::getStaticFile(ImageConst::defaultCategoryImgName,$commonPath);
}
}
/** /**
* 设置文件名称 不包括 文件路径 * 设置文件名称 不包括 文件路径
......
...@@ -66,7 +66,7 @@ class GoodsClassServiceModel extends \Business\AbstractModel{ ...@@ -66,7 +66,7 @@ class GoodsClassServiceModel extends \Business\AbstractModel{
//验证参数 //验证参数
$addressDao = \DAO\AddressModel::getInstance(); /*$addressDao = \DAO\AddressModel::getInstance();
$validFlag = $addressDao->getValidAddress($where); $validFlag = $addressDao->getValidAddress($where);
if(!$validFlag){ if(!$validFlag){
\Error\ErrorModel::throwException($addressDao->errorCode); \Error\ErrorModel::throwException($addressDao->errorCode);
...@@ -87,7 +87,7 @@ class GoodsClassServiceModel extends \Business\AbstractModel{ ...@@ -87,7 +87,7 @@ class GoodsClassServiceModel extends \Business\AbstractModel{
$serviceParentClassIds = $this->getServiceStoreClasses($serviceStoreIds); $serviceParentClassIds = $this->getServiceStoreClasses($serviceStoreIds);
if($serviceParentClassIds){ if($serviceParentClassIds){
$classIds = array_merge($serviceParentClassIds,$classIds); $classIds = array_merge($serviceParentClassIds,$classIds);
} }*/
/* /*
//获取可快递店铺对应分类 //获取可快递店铺对应分类
...@@ -96,12 +96,12 @@ class GoodsClassServiceModel extends \Business\AbstractModel{ ...@@ -96,12 +96,12 @@ class GoodsClassServiceModel extends \Business\AbstractModel{
$classIds = array_merge($expressClassIds,$classIds); $classIds = array_merge($expressClassIds,$classIds);
} }
*/ */
/*$classIds = array(); $classIds = array();
$platformFirstClassDao = \DAO\GoodsClass\PlatformFirstClassModel::getInstance(); $platformFirstClassDao = \DAO\GoodsClass\PlatformFirstClassModel::getInstance();
$firstClassList = \Our\RedisHelper::cachedFunction(\Redis\Db3\PlatformFirstClassRedisModel::getInstance(),array(&$platformFirstClassDao, 'getList'),array(),\Our\ApiConst::oneHour,array()); $firstClassList = \Our\RedisHelper::cachedFunction(\Redis\Db3\PlatformFirstClassRedisModel::getInstance(),array(&$platformFirstClassDao, 'getList'),array(),\Our\ApiConst::oneHour,array());
if($firstClassList){ if($firstClassList){
$classIds = array_column($firstClassList,'gc_id'); $classIds = array_column($firstClassList,'gc_parent_id');
}*/ }
$classIdKeys = array_flip($classIds); $classIdKeys = array_flip($classIds);
$goodsClassDao = \DAO\GoodsClassModel::getInstance(); $goodsClassDao = \DAO\GoodsClassModel::getInstance();
$parentClasses = $goodsClassDao->getParentClasses(); $parentClasses = $goodsClassDao->getParentClasses();
...@@ -196,7 +196,6 @@ class GoodsClassServiceModel extends \Business\AbstractModel{ ...@@ -196,7 +196,6 @@ class GoodsClassServiceModel extends \Business\AbstractModel{
$cityCode = $where['cityCode']; $cityCode = $where['cityCode'];
$storeDao = \DAO\StoreModel::getInstance(); $storeDao = \DAO\StoreModel::getInstance();
$signStoreClasses = $this->getSignClassesByCityCode($cityCode); $signStoreClasses = $this->getSignClassesByCityCode($cityCode);
//var_dump($signStoreClasses);
if($signStoreClasses){ if($signStoreClasses){
$storeIds = array_unique(array_column($signStoreClasses,'store_id')); $storeIds = array_unique(array_column($signStoreClasses,'store_id'));
$tempStoreList = $storeDao->getNearbyStores($cityCode,$storeIds); $tempStoreList = $storeDao->getNearbyStores($cityCode,$storeIds);
......
...@@ -1368,6 +1368,7 @@ class GoodsCommonServiceModel extends \Business\AbstractModel ...@@ -1368,6 +1368,7 @@ class GoodsCommonServiceModel extends \Business\AbstractModel
break; break;
} }
} }
return true;
} }
/** /**
......
...@@ -38,7 +38,7 @@ class OrderServiceModel extends \Business\AbstractModel ...@@ -38,7 +38,7 @@ class OrderServiceModel extends \Business\AbstractModel
private $orderMessageField = "order_id as orderId,order_sn as orderSn,store_name as storeName,add_time as addTime,store_id as storeId,goods_amount as goodsAmount,shipping_fee as shippingFee,order_amount as orderAmount,shipping_type as shippingType,payment_type as paymentType,order_state as orderState,shipping_fee as shippingFee,refund_state as refundState,order_type as orderType,is_receive_payment as isReceivePayment,buyer_id as buyerId,buyer_name as buyerName,accept_time as acceptTime"; private $orderMessageField = "order_id as orderId,order_sn as orderSn,store_name as storeName,add_time as addTime,store_id as storeId,goods_amount as goodsAmount,shipping_fee as shippingFee,order_amount as orderAmount,shipping_type as shippingType,payment_type as paymentType,order_state as orderState,shipping_fee as shippingFee,refund_state as refundState,order_type as orderType,is_receive_payment as isReceivePayment,buyer_id as buyerId,buyer_name as buyerName,accept_time as acceptTime";
private $order; public $order;
//地址 //地址
private $address; private $address;
//收货人地址 //收货人地址
...@@ -55,6 +55,7 @@ class OrderServiceModel extends \Business\AbstractModel ...@@ -55,6 +55,7 @@ class OrderServiceModel extends \Business\AbstractModel
} }
private function getGoodsDetailField() private function getGoodsDetailField()
{ {
return $this->orderGoodsField . ',goods_commonid as goodsCommonId,goods_commonid as goodsCommonid,goods_group as goodsGroup'; return $this->orderGoodsField . ',goods_commonid as goodsCommonId,goods_commonid as goodsCommonid,goods_group as goodsGroup';
...@@ -577,13 +578,17 @@ class OrderServiceModel extends \Business\AbstractModel ...@@ -577,13 +578,17 @@ class OrderServiceModel extends \Business\AbstractModel
$storeDao=\DAO\StoreModel::getInstance(); $storeDao=\DAO\StoreModel::getInstance();
//判断订单目前状态是否允许取消 //判断订单目前状态是否允许取消
$isAllowCancel = $orderDao->isAllowCancel($order); $isAllowCancel = $orderDao->isAllowCancel($order);
$isAllowCancel = true; //$isAllowCancel = true;
if ($isAllowCancel) { if ($isAllowCancel) {
$orderDao->db->doTransaction(); $orderDao->db->doTransaction();
$res = $orderDao->updateStatusByOrderId($orderId, ApiConst::orderStateCancel,false,ApiConst::cancelOrderBySelf); $res = $orderDao->updateStatusByOrderId($orderId, ApiConst::orderStateCancel,false,ApiConst::cancelOrderBySelf);
$orderDao->setDb($orderDao->dbName); $orderDao->setDb($orderDao->dbName);
if ($res) { if ($res) {
$this->updateOrderGoodsStoregeByOrderIds(array($orderId)); $updateOrder=$this->updateOrderGoodsStoregeByOrderIds(array($orderId));
if(!$updateOrder){
$orderDao->db->doRollback();
ErrorModel::throwException(CodeConfigModel::updateGoodsStorageFail);
};
$order['refundOrderNo']=$refundReturnDao->getRefundsn($order['storeId']); $order['refundOrderNo']=$refundReturnDao->getRefundsn($order['storeId']);
if($order['paymentTime']>ApiConst::zero && in_array($order['paymentType'],ArrayConst::orderPayTypeOnlines)){ if($order['paymentTime']>ApiConst::zero && in_array($order['paymentType'],ArrayConst::orderPayTypeOnlines)){
$resultRefund=$refundReturnDao->refundMoney($order); $resultRefund=$refundReturnDao->refundMoney($order);
...@@ -1150,6 +1155,7 @@ class OrderServiceModel extends \Business\AbstractModel ...@@ -1150,6 +1155,7 @@ class OrderServiceModel extends \Business\AbstractModel
} }
file_put_contents($this->baseDir . \Our\PathConst::orderCloseWaitRecieveOrder, $endTime); file_put_contents($this->baseDir . \Our\PathConst::orderCloseWaitRecieveOrder, $endTime);
} }
public $errorMessage;
public function updateDateGoodsStoregeByOrderGoods($orderGoods,$type=ApiConst::plus,$updateSaleNumFlag=true){ public function updateDateGoodsStoregeByOrderGoods($orderGoods,$type=ApiConst::plus,$updateSaleNumFlag=true){
$orderConfirmUtilDao=OrderConfirmUtil::getInstance(DbNameConst::masterDBConnectName); $orderConfirmUtilDao=OrderConfirmUtil::getInstance(DbNameConst::masterDBConnectName);
$storeCartsList=array(); $storeCartsList=array();
...@@ -1175,7 +1181,9 @@ class OrderServiceModel extends \Business\AbstractModel ...@@ -1175,7 +1181,9 @@ class OrderServiceModel extends \Business\AbstractModel
}catch(\Exception $ex){ }catch(\Exception $ex){
$orderGoodsIds=array_column($orderGoods,'goodsId'); $orderGoodsIds=array_column($orderGoods,'goodsId');
$orderidsStr=implode(',',$orderGoodsIds); $orderidsStr=implode(',',$orderGoodsIds);
echo '商品库存更新失败:'.$ex->getMessage().$ex->getCode().":".$orderidsStr; $this->errorMessage='商品库存更新失败:'.$ex->getMessage().$ex->getCode().":".$orderidsStr;
// echo '商品库存更新失败:'.$ex->getMessage().$ex->getCode().":".$orderidsStr;
return false;
} }
} }
public function updateOrderGoodsStoregeByOrderIds($orderIds,$orderGoodsId=false){ public function updateOrderGoodsStoregeByOrderIds($orderIds,$orderGoodsId=false){
...@@ -1193,7 +1201,7 @@ class OrderServiceModel extends \Business\AbstractModel ...@@ -1193,7 +1201,7 @@ class OrderServiceModel extends \Business\AbstractModel
if(empty($orderGoods)){ if(empty($orderGoods)){
$orderGoods=$orderGoodses; $orderGoods=$orderGoodses;
} }
$this->updateDateGoodsStoregeByOrderGoods($orderGoods); return $this->updateDateGoodsStoregeByOrderGoods($orderGoods);
} }
...@@ -1789,7 +1797,11 @@ class OrderServiceModel extends \Business\AbstractModel ...@@ -1789,7 +1797,11 @@ class OrderServiceModel extends \Business\AbstractModel
* @var \DAO\UserModel * @var \DAO\UserModel
*/ */
private static $_instance = null; private static $_instance = null;
public static function realeaseInstance(){
if(!empty(self::$_instance)){
self::$_instance=null;
}
}
/** /**
* 单例模式获取类实例 * 单例模式获取类实例
* *
......
<?php <?php
namespace Business\Store;
/** /**
* User: liuyuzhen * User: liuyuzhen
* Date: 2019/1/9 * Date: 2019/1/9
* Time: 17:09 * Time: 17:09
* Description: * Description:
*/ */
namespace Business\Store;
use Our\ApiConst;
use Our\DbNameConst;
/**
* 店铺service
*
* @date 2018-5-15
* @author zhz
*/
class ClassStoreServiceModel extends \Business\AbstractModel{ class ClassStoreServiceModel extends \Business\AbstractModel{
private $classStoreField = 'store_id as storeId,store_name as storeName,store_label as storeLabel,store_intro as storeIntro,store_longitude,store_latitude,gc_id as gcId,gc_name as gcName';
$classStoreField = 'store_id as storeId,store_name as storeName,store_label as storeLabel,store_intro as storeIntro,store_longitude,store_latitude,gc_id as gcId,gc_name as gcName';
public function init() { public function init() {
} }
public function getRecommondStores($where,$memberId){ public function getRecommendStores($where,$memberId){
$addressDao = \DAO\AddressModel::getInstance(); $addressDao = \DAO\AddressModel::getInstance();
$validFlag = $addressDao->getValidAddress($where); $validFlag = $addressDao->getValidAddress($where);
...@@ -39,25 +30,108 @@ class ClassStoreServiceModel extends \Business\AbstractModel{ ...@@ -39,25 +30,108 @@ class ClassStoreServiceModel extends \Business\AbstractModel{
if(!$gcId){ if(!$gcId){
\Error\ErrorModel::throwException(\Error\CodeConfigModel::emptyGcId); \Error\ErrorModel::throwException(\Error\CodeConfigModel::emptyGcId);
} }
/* \Our\RedisHelper::cachedFunction(\Redis\Db6\ClassStoreRedisModel::getInstance(), array(&$classStoreModel, 'getList'), array(array('gc_id'=>$gcId),'store_id,fav_time'), \Our\ApiConst::oneHour,array($memberId));*/ /*\Our\RedisHelper::cachedFunction(\Redis\Db6\ClassStoreRedisModel::getInstance(), array(&$classStoreModel, 'getList'), array(array('gc_id'=>$gcId),'store_id,fav_time'), \Our\ApiConst::oneHour,array($memberId));*/
$storeList = $this->getStoreListByGcId($gcId,$condition,$memberId);
return $storeList;
} }
public function getStoreListByGcId($gcId,$position){ public function getStoreListByGcId($parentGcId,$position,$memberId){
$lat = $position['lat']; $lat = $position['lat'];
$lng = $position['lng']; $lng = $position['lng'];
$classStoreModel = \DAO\Store\ClassStoreModel::getInstance(); $classStoreModel = \DAO\Store\ClassStoreModel::getInstance();
$storeList = \Our\RedisHelper::cachedFunction(\Redis\Db6\ClassStoreRedisModel::getInstance(), array(&$classStoreModel, 'getList'), array(array('gc_id'=>$gcId),$this->classStoreField), \Our\ApiConst::oneHour,array()); $storeList = \Our\RedisHelper::cachedFunction(\Redis\Db6\ClassStoreRedisModel::getInstance(), array(&$classStoreModel, 'getList'), array(array('gc_parent_id'=>$parentGcId),$this->classStoreField), \Our\ApiConst::oneHour,array($parentGcId));
$newStoreList = array(); $newGcStoreList = array();
if($storeList){ if($storeList){
$newStoreList = array();
$newGcList = array();
foreach($storeList as $store){
$gcId = $store['gcId'];
$store_lat = $store['store_latitude'];
$store_lnt = $store['store_longitude'];
$gcName = htmlspecialchars_decode($store['gcName']);
unset($store['store_latitude']);
unset($store['store_longitude']);
unset($store['gcId']);
unset($store['gcName']);
$store['storeLabel'] =\Our\ImageUtil::getStoreLabel($store['storeLabel'], \Our\ImageConst::storeLabel,213);
$store['storeDistance'] = \Our\CommonExtension::getDistance($lat,$lng,$store_lat,$store_lnt);
if(!isset($newStoreList[$store['storeId']])){
$newStoreList[$store['storeId']] = $store;
}
if(!isset($newGcList[$gcId])){
$newGcList[$gcId] = $gcName;
}
if(isset($newGcStoreList[$gcId]['inAreaFlag'])){
continue;
}
$inAreaFlag = false;
if(isset($store['sign_scope'])&&$store['sign_scope']){
$inAreaFlag = \Our\CommonExtension::locationInArea($lat,$lng,$store['sign_scope']);
}
if(!isset($newGcStoreList[$gcId])){
$newGcStoreList[$gcId]['gcName'] = $gcName;
$newGcStoreList[$gcId]['gcImg'] = \Our\ImageUtil::getCategoryHeadPic($gcId);
}
if($inAreaFlag){
$newGcStoreList[$gcId]['inAreaFlag'] = $inAreaFlag;
$newGcStoreList[$gcId]['stores']= $store;
}else{
if(isset($newGcStoreList[$gcId]['storeDistance'])){
if($store['storeDistance']<$newGcStoreList[$gcId]['storeDistance']){
$newGcStoreList[$gcId]['storeDistance'] = $store['storeDistance'];
$newGcStoreList[$gcId]['stores']= $store;
}
}else{
$newGcStoreList[$gcId]['storeDistance'] = $store['storeDistance'];
$newGcStoreList[$gcId]['stores']= $store;
}
}
}
$memberStores = \Business\Store\StoreServiceModel::getInstance()->getPurchasedStoreClass($memberId,$parentGcId);
if($memberStores){
foreach($memberStores as $key => $storeId){
$returnData[$key] = array();
$purchasedStore = $newStoreList[$storeId];
$returnData[$key]['gcName'] = $newGcList[$key];
$returnData[$key]['gcImg'] = \Our\ImageUtil::getCategoryHeadPic($key);
unset($purchasedStore['gcName']);
unset($purchasedStore['gcId']);
$purchasedStore['isPurchased'] = \Our\ApiConst::one;
$returnData[$key]['stores'][$storeId] = $purchasedStore;
}
}
foreach($newGcStoreList as $gcIdKey=>$storeInfo){
$tempStore = $storeInfo['stores'];
if(isset($returnData[$gcIdKey])){
if(isset($returnData[$gcIdKey]['stores'][$tempStore['storeId']])){
continue;
}
$tempStore['isPurchased'] = \Our\ApiConst::zero;
$returnData[$gcIdKey]['stores'][$tempStore['storeId']] = $tempStore;
}else{
unset($storeInfo['storeDistance']);
$storeInfo['stores'] = array();
$tempStore['isPurchased'] = \Our\ApiConst::zero;
$storeInfo['stores'][$tempStore['storeId']] = $tempStore;
$returnData[$gcIdKey] = $storeInfo;
}
}
$return = array();
foreach($newGcList as $key=>$gcNameTemp){
array_push($return,$returnData[$key]);
}
foreach($return as &$temp){
$temp['stores'] = array_values($temp['stores']);
}
return $return;
} }
} return $newGcStoreList;
}
/** /**
* git
*/ */
private static $_instance = null; private static $_instance = null;
......
...@@ -217,6 +217,9 @@ class StoreServiceModel extends \Business\AbstractModel{ ...@@ -217,6 +217,9 @@ class StoreServiceModel extends \Business\AbstractModel{
$favoritesStoreDao = \DAO\FavoritesStoreModel::getInstance(); $favoritesStoreDao = \DAO\FavoritesStoreModel::getInstance();
$one = $favoritesStoreDao->getOne('store_id',array('store_id'=>$storeId,'member_id'=>$memberId,'fav_type'=>\Our\ApiConst::one),''); $one = $favoritesStoreDao->getOne('store_id',array('store_id'=>$storeId,'member_id'=>$memberId,'fav_type'=>\Our\ApiConst::one),'');
$result = $favoritesStoreDao->insertAll($storeMembers); $result = $favoritesStoreDao->insertAll($storeMembers);
//删除关联店铺缓存
$favoritesRedis = \Redis\Db6\FavoritesStoreRedisModel::getInstance();
$favoritesRedis->tableDelAll($favoritesRedis->tableKeys('myFavoritesStore'.$favoritesRedis::DELIMITER.$memberId.'_'));
if($result && !$one) { if($result && !$one) {
$favoritesStoreDao->updateStoreCollecitonsCache(array($storeId),$memberId,2); $favoritesStoreDao->updateStoreCollecitonsCache(array($storeId),$memberId,2);
} }
...@@ -714,7 +717,10 @@ class StoreServiceModel extends \Business\AbstractModel{ ...@@ -714,7 +717,10 @@ class StoreServiceModel extends \Business\AbstractModel{
$storeRedis = \Redis\Db6\StoreRedisModel::getInstance(); $storeRedis = \Redis\Db6\StoreRedisModel::getInstance();
$signStoreKey = \Our\NameConst::signStoreIdsPrefix . $readisSuffix; $signStoreKey = \Our\NameConst::signStoreIdsPrefix . $readisSuffix;
$signStoreIds =$storeRedis->find($signStoreKey, \Our\ApiConst::oneHour); $signStoreIds =$storeRedis->find($signStoreKey, \Our\ApiConst::oneHour);
if(!$signStoreIds){
$signStoreInfo = \Business\Goods\GoodsClassServiceModel::getInstance()->getSignStoreInfo($position);
$signStoreIds = $signStoreInfo['signStoreIds'];//当前位置签约店铺ID
}
//$serviceStoreKey = \Our\NameConst::serviceStoreIdsPrefix . $readisSuffix; //$serviceStoreKey = \Our\NameConst::serviceStoreIdsPrefix . $readisSuffix;
//$serviceStoreIds = $storeRedis->find($serviceStoreKey, \Our\ApiConst::oneHour); //$serviceStoreIds = $storeRedis->find($serviceStoreKey, \Our\ApiConst::oneHour);
/*if(is_array($signStoreIds)&&is_array($serviceStoreIds)){ /*if(is_array($signStoreIds)&&is_array($serviceStoreIds)){
...@@ -804,15 +810,8 @@ class StoreServiceModel extends \Business\AbstractModel{ ...@@ -804,15 +810,8 @@ class StoreServiceModel extends \Business\AbstractModel{
foreach($allStores as &$store){ foreach($allStores as &$store){
$store['isPurchased'] = \Our\ApiConst::zero; $store['isPurchased'] = \Our\ApiConst::zero;
} }
$memberStores = null; $memberStores = $this->getPurchasedStoreClass($memberId,$gcId);
if($memberId){
$favoritesStoreDao = \DAO\FavoritesStoreModel::getInstance();
$memberStoreList = \Our\RedisHelper::cachedFunction(\Redis\Db6\FavoritesStoreRedisModel::getInstance(), array(&$favoritesStoreDao, 'selectList'), array(array('member_id'=>$memberId,'fav_from'=>\Our\ApiConst::scanFavor),'store_id,fav_time'), \Our\ApiConst::oneHour,array($memberId));
//$storeMemberDao->getList(array('member_id'=>$memberId,'type'=>\Our\ApiConst::storeQrcodeMember),'distinct(store_id) as store_id')
if($memberStoreList){
$memberStores = $this->getPurchasedStoreClass($memberStoreList,$gcId);
}
}
$goodsClassDao = \DAO\GoodsClassModel::getInstance(); $goodsClassDao = \DAO\GoodsClassModel::getInstance();
//获取当前分类对应所有店铺信息 //获取当前分类对应所有店铺信息
...@@ -888,12 +887,21 @@ class StoreServiceModel extends \Business\AbstractModel{ ...@@ -888,12 +887,21 @@ class StoreServiceModel extends \Business\AbstractModel{
} }
public function getPurchasedStoreClass($memberStoreList,$gcId){ public function getPurchasedStoreClass($memberId,$gcId){
if(!$memberId){
return array();
}
$favoritesStoreDao = \DAO\FavoritesStoreModel::getInstance();
$memberStoreList = \Our\RedisHelper::cachedFunction(\Redis\Db6\FavoritesStoreRedisModel::getInstance(), array(&$favoritesStoreDao, 'selectList'), array(array('member_id'=>$memberId,'fav_from'=>\Our\ApiConst::scanFavor),'store_id,fav_time'), \Our\ApiConst::oneHour,array($memberId));
if(!$memberStoreList){
return array();
}
$memberStoreIds = array_column($memberStoreList,'store_id'); $memberStoreIds = array_column($memberStoreList,'store_id');
$signStoreClassSql = ' store_id in ('.implode(',',$memberStoreIds).') and is_charged=1 and gc_parent_id ='.$gcId; $signStoreClassSql = ' store_id in ('.implode(',',$memberStoreIds).') and is_charged=1 and gc_parent_id ='.$gcId;
$qmStoreClassDao = \DAO\QmStoreClassModel::getInstance(); $qmStoreClassDao = \DAO\QmStoreClassModel::getInstance();
$signClassStores = $qmStoreClassDao->selectByWhere($signStoreClassSql,'store_id,gc_id');
$signClassStores = \Our\RedisHelper::cachedFunction(\Redis\Db6\QmStoreClassRedisModel::getInstance(), array(&$qmStoreClassDao, 'selectByWhere'), array($signStoreClassSql,'store_id,gc_id'), \Our\ApiConst::oneHour,array('gcId_'.$gcId.'member_'.$memberId));
//$signClassStores = $qmStoreClassDao->selectByWhere($signStoreClassSql,'store_id,gc_id');
if($signClassStores){ if($signClassStores){
$return = array(); $return = array();
foreach($memberStoreList as $tempStore){ foreach($memberStoreList as $tempStore){
...@@ -1197,7 +1205,7 @@ class StoreServiceModel extends \Business\AbstractModel{ ...@@ -1197,7 +1205,7 @@ class StoreServiceModel extends \Business\AbstractModel{
public function growStores(){ public function growStores(){
$cityCodes=array('010','021','022','023','852','853','0310','0311','0312','0313','0314','0315','0316','0317','0318','0319','0335','0570','0571','0572','0573','0574','0575','0576','0577','0578','0579','0580','024','0410','0411','0412','0413','0414','0415','0416','0417','0418','0419','0421','0427','0429','027','0710','0711','0712','0713','0714','0715','0716','0717','0718','0719','0722','0724','0728','025','0510','0511','0512','0513','0514','0515','0516','0517','0517','0518','0519','0523','0470','0471','0472','0473','0474','0475','0476','0477','0478','0479','0482','0483','0790','0791','0792','0793','0794','0795','0796','0797','0798','0799','0701','0350','0351','0352','0353','0354','0355','0356','0357','0358','0359','0930','0931','0932','0933','0934','0935','0936','0937','0938','0941','0943','0530','0531','0532','0533','0534','0535','0536','0537','0538','0539','0450','0451','0452','0453','0454','0455','0456','0457','0458','0459','0591','0592','0593','0594','0595','0595','0596','0597','0598','0599','020','0751','0752','0753','0754','0755','0756','0757','0758','0759','0760','0762','0763','0765','0766','0768','0769','0660','0661','0662','0663','028','0810','0811','0812','0813','0814','0816','0817','0818','0819','0825','0826','0827','0830','0831','0832','0833','0834','0835','0836','0837','0838','0839','0840','0730','0731','0732','0733','0734','0735','0736','0737','0738','0739','0743','0744','0745','0746','0370','0371','0372','0373','0374','0375','0376','0377','0378','0379','0391','0392','0393','0394','0395','0396','0398','0870','0871','0872','0873','0874','0875','0876','0877','0878','0879','0691','0692','0881','0883','0886','0887','0888','0550','0551','0552','0553','0554','0555','0556','0557','0558','0559','0561','0562','0563','0564','0565','0566','0951','0952','0953','0954','0431','0432','0433','0434','0435','0436','0437','0438','0439','0440','0770','0771','0772','0773','0774','0775','0776','0777','0778','0779','0851','0852','0853','0854','0855','0856','0857','0858','0859','029','0910','0911','0912','0913','0914','0915','0916','0917','0919','0971','0972','0973','0974','0975','0976','0977','0890','0898','0899','0891','0892','0893'); $cityCodes=array('010','021','022','023','852','853','0310','0311','0312','0313','0314','0315','0316','0317','0318','0319','0335','0570','0571','0572','0573','0574','0575','0576','0577','0578','0579','0580','024','0410','0411','0412','0413','0414','0415','0416','0417','0418','0419','0421','0427','0429','027','0710','0711','0712','0713','0714','0715','0716','0717','0718','0719','0722','0724','0728','025','0510','0511','0512','0513','0514','0515','0516','0517','0517','0518','0519','0523','0470','0471','0472','0473','0474','0475','0476','0477','0478','0479','0482','0483','0790','0791','0792','0793','0794','0795','0796','0797','0798','0799','0701','0350','0351','0352','0353','0354','0355','0356','0357','0358','0359','0930','0931','0932','0933','0934','0935','0936','0937','0938','0941','0943','0530','0531','0532','0533','0534','0535','0536','0537','0538','0539','0450','0451','0452','0453','0454','0455','0456','0457','0458','0459','0591','0592','0593','0594','0595','0595','0596','0597','0598','0599','020','0751','0752','0753','0754','0755','0756','0757','0758','0759','0760','0762','0763','0765','0766','0768','0769','0660','0661','0662','0663','028','0810','0811','0812','0813','0814','0816','0817','0818','0819','0825','0826','0827','0830','0831','0832','0833','0834','0835','0836','0837','0838','0839','0840','0730','0731','0732','0733','0734','0735','0736','0737','0738','0739','0743','0744','0745','0746','0370','0371','0372','0373','0374','0375','0376','0377','0378','0379','0391','0392','0393','0394','0395','0396','0398','0870','0871','0872','0873','0874','0875','0876','0877','0878','0879','0691','0692','0881','0883','0886','0887','0888','0550','0551','0552','0553','0554','0555','0556','0557','0558','0559','0561','0562','0563','0564','0565','0566','0951','0952','0953','0954','0431','0432','0433','0434','0435','0436','0437','0438','0439','0440','0770','0771','0772','0773','0774','0775','0776','0777','0778','0779','0851','0852','0853','0854','0855','0856','0857','0858','0859','029','0910','0911','0912','0913','0914','0915','0916','0917','0919','0971','0972','0973','0974','0975','0976','0977','0890','0898','0899','0891','0892','0893');
$storeDao=\DAO\StoreModel::getInstance(); $storeDao=\DAO\StoreModel::getInstance();
// $memberDao = \DAO\MemberModel::getInstance(); // $memberDao = \DAO\MemberModel::getInstance();
$res =$storeDao->getAll(); $res =$storeDao->getAll();
$drawTableDao=\DAO\Draw\DrawTableModel::getInstance(); $drawTableDao=\DAO\Draw\DrawTableModel::getInstance();
$drawTableDatas=$drawTableDao->getAll(); $drawTableDatas=$drawTableDao->getAll();
...@@ -1255,16 +1263,16 @@ class StoreServiceModel extends \Business\AbstractModel{ ...@@ -1255,16 +1263,16 @@ class StoreServiceModel extends \Business\AbstractModel{
public function tryExpireInform() { public function tryExpireInform() {
$storeList = \DAO\StoreModel::getInstance()->getTryExpireStore(); $storeList = \DAO\StoreModel::getInstance()->getTryExpireStore();
if($storeList) { if($storeList) {
foreach ($storeList as $store) { foreach ($storeList as $store) {
if( TIMESTAMP+9*24*3600<$store['store_end_time'] and $store['store_end_time'] <= TIMESTAMP+10*24*3600) { if( TIMESTAMP+9*24*3600<$store['store_end_time'] and $store['store_end_time'] <= TIMESTAMP+10*24*3600) {
$limitday = 10; $limitday = 10;
}elseif (TIMESTAMP+4*24*3600<$store['store_end_time'] and $store['store_end_time'] <= TIMESTAMP+5*24*3600) { }elseif (TIMESTAMP+4*24*3600<$store['store_end_time'] and $store['store_end_time'] <= TIMESTAMP+5*24*3600) {
$limitday = 5; $limitday = 5;
}else{ }else{
$limitday = 3; $limitday = 3;
} }
\DAO\ShortMessageModel::getInstance()->sendMessageSmsForPlatform($store['store_phone'],'tryExpire',array('storename'=>$store['store_name'],'limitday'=>$limitday)); \DAO\ShortMessageModel::getInstance()->sendMessageSmsForPlatform($store['store_phone'],'tryExpire',array('storename'=>$store['store_name'],'limitday'=>$limitday));
} }
} }
} }
/** /**
......
...@@ -377,6 +377,9 @@ class MemberServiceModel extends \Business\AbstractModel ...@@ -377,6 +377,9 @@ class MemberServiceModel extends \Business\AbstractModel
\Our\Log::getInstance()->write(json_encode($storeMembers).'扫码数据写入失败'); \Our\Log::getInstance()->write(json_encode($storeMembers).'扫码数据写入失败');
return false; return false;
} }
//删除关联店铺缓存
$favoritesRedis = \Redis\Db6\FavoritesStoreRedisModel::getInstance();
$favoritesRedis->tableDelAll($favoritesRedis->tableKeys('myFavoritesStore'.$favoritesRedis::DELIMITER.$memberId.'_'));
if($storeIds && $result) { if($storeIds && $result) {
$favoritesStoreDao->updateStoreCollecitonsCache($storeIds,$memberId,2); $favoritesStoreDao->updateStoreCollecitonsCache($storeIds,$memberId,2);
} }
...@@ -1118,10 +1121,33 @@ class MemberServiceModel extends \Business\AbstractModel ...@@ -1118,10 +1121,33 @@ class MemberServiceModel extends \Business\AbstractModel
public function getMyFavoritesStore($memberId){ public function getMyFavoritesStore($memberId){
if($memberId){ if($memberId){
$favoritesDao = \DAO\FavoritesStoreModel::getInstance(); $favoritesDao = \DAO\FavoritesStoreModel::getInstance();
$favStore = \Our\RedisHelper::cachedFunction(\Redis\Db6\FavoritesStoreRedisModel::getInstance(),array(&$favoritesDao, 'getOne'),array('store_id',array('fav_from'=>\Our\ApiConst::scanFavor,'member_id'=>$memberId)),\Our\ApiConst::oneDaySecond,array($memberId)); $favoritesRedis = \Redis\Db6\FavoritesStoreRedisModel::getInstance();
if($favStore&&$favStore['store_id']){ if($keys = $favoritesRedis->tableKeys('myFavoritesStore'.$favoritesRedis::DELIMITER.$memberId.'_')) {
return $favStore['store_id']; $storeId = $favoritesRedis->tableCacheGet($keys[0]);
}else{
$storeIds = $favoritesDao->getStoreAndFavoriteStore('han_store.store_id',array('fav_from'=>\Our\ApiConst::scanFavor,'han_favorites_store.member_id'=>$memberId,'open_flag|store_state'=>0),array());
if($storeIds) {
$storeIds = array_column($storeIds,'store_id');
$return = $favoritesDao->update(array('fav_type'=>0,'fav_from'=>0),'store_id in ('.implode(',',$storeIds).')',true,$memberId);
if($return) {
$favoritesDao->updateStoreCollecitonsCache($storeIds, $memberId);
}
}
$favStore = $favoritesDao->getOne('store_id',array('fav_from'=>\Our\ApiConst::scanFavor,'member_id'=>$memberId));
// $favStore = $favoritesDao->getStoreAndFavoriteStore('han_store.store_id',array('fav_from'=>\Our\ApiConst::scanFavor,'han_favorites_store.member_id'=>$memberId,'open_flag'=>1,'store_state'=>1),array('fav_time'=>'desc','favid'=>'desc'),array(0,1));
if($favStore&&$favStore['store_id']){
$storeId = $favStore['store_id'];
}else{
$storeId = 0;
}
$favoritesRedis->tableCacheSet('myFavoritesStore'.$favoritesRedis::DELIMITER.$memberId.'_'.$storeId,$storeId,\Our\ApiConst::oneDaySecond);
} }
$storeId = (int)$storeId;
return $storeId;
// $favStore = \Our\RedisHelper::cachedFunction(\Redis\Db6\FavoritesStoreRedisModel::getInstance(),array(&$favoritesDao, 'getOne'),array('store_id',array('fav_from'=>\Our\ApiConst::scanFavor,'member_id'=>$memberId)),\Our\ApiConst::oneDaySecond,array($memberId));
// if($favStore&&$favStore['store_id']){
// return $favStore['store_id'];
// }
} }
return \Our\ApiConst::zero; return \Our\ApiConst::zero;
} }
......
...@@ -204,24 +204,15 @@ class SalespersonServiceModel extends \Business\AbstractModel ...@@ -204,24 +204,15 @@ class SalespersonServiceModel extends \Business\AbstractModel
$saleOrderDAO = \DAO\SaleOrderModel::getInstance(); $saleOrderDAO = \DAO\SaleOrderModel::getInstance();
$where = "sale_act_id = {$actId} AND sale_id = {$memberId} AND goods_id = {$goodsId}"; $where = "sale_act_id = {$actId} AND sale_id = {$memberId} AND goods_id = {$goodsId}";
if($type === 0) { if($type === 0) {
// $where .= " AND (order_state=%s AND (refund_id = %s OR (refund_id > %s AND ((seller_state = %s AND is_platform_in = %s) OR (is_platform_in = %s AND platform_state = %s)))))";
$where .= " AND order_state=40 AND is_refund=0"; $where .= " AND order_state=40 AND is_refund=0";
// $where = sprintf($where,ApiConst::orderStateComplete,ApiConst::zero,ApiConst::zero,ApiConst::refundSellerRefuse,ApiConst::platNotIn,ApiConst::platIn,ApiConst::refundPlatformRefuse);
}else{ }else{
// $where .=" AND (order_state < %s OR (order_state = %s AND refund_id > %s AND (seller_state != %s OR (is_platform_in = %s AND platform_state != %s ))))";
$where .= " AND (order_state < 40 OR (order_state = 40 AND is_refund = 1))"; $where .= " AND (order_state < 40 OR (order_state = 40 AND is_refund = 1))";
// $where = sprintf($where,ApiConst::orderStateComplete,ApiConst::orderStateComplete,ApiConst::zero,ApiConst::refundSellerRefuse,ApiConst::platIn,ApiConst::refundPlatformRefuse);
} }
$goodsList = $saleOrderDAO->getOrderGoodsList($where,'member_id,member_name AS memberName,member_avatar AS memberAvatar,sum(goods_num) AS goodsNum','member_id',$limit); $goodsList = $saleOrderDAO->getOrderGoodsList($where,'member_id,member_name AS memberName,member_avatar AS memberAvatar,sum(goods_num) AS goodsNum','member_id',$limit);
$orders = []; $orders = [];
$totalCount = 0; $totalCount = 0;
if($goodsList && is_array($goodsList)){ if($goodsList && is_array($goodsList)){
foreach ($goodsList as $v){ foreach ($goodsList as $v){
// if(!empty($v['refund_state_name'])){
// $orderState = $v['refund_state_name'];
// }else{
// $orderState = \DAO\Order\OrderModel::getInstance()->getStatusSaleText($v['order_state']);
// }
$orders[] = [ $orders[] = [
'memberName'=>$v['memberName'], 'memberName'=>$v['memberName'],
'memberAvatar'=>$v['memberAvatar'], 'memberAvatar'=>$v['memberAvatar'],
......
...@@ -58,7 +58,22 @@ class FavoritesStoreModel extends \DAO\AbstractModel { ...@@ -58,7 +58,22 @@ class FavoritesStoreModel extends \DAO\AbstractModel {
$result = $this->db->select($field)->from($this->_tableName)->where($where)->fetchOne(); $result = $this->db->select($field)->from($this->_tableName)->where($where)->fetchOne();
return $result; return $result;
} }
public function getStoreAndFavoriteStore($field,$where,$order = array('fav_time'=>'desc','favid'=>'desc'),$limit = null) {
$this->setDb($this->dbName);
if($order){
foreach($order as $key=>$value){
$this->db->order($key,$value);
}
}
if($limit) {
$this->db->limit($limit[0],$limit[1]);
}
if(is_array($where)){
$where=$this->db->getSqlWhereByArray($where);
}
$result = $this->db->select($field)->from($this->_tableName)->join('han_store','han_store.store_id = han_favorites_store.store_id','inner')->where($where)->fetchAll();
return $result;
}
public function insert($param){ public function insert($param){
$this->setDb(\Our\DbNameConst::masterDBConnectName); $this->setDb(\Our\DbNameConst::masterDBConnectName);
$result = $this->db->insert($this->_tableName)->rows($param)->execute(); $result = $this->db->insert($this->_tableName)->rows($param)->execute();
...@@ -195,22 +210,30 @@ class FavoritesStoreModel extends \DAO\AbstractModel { ...@@ -195,22 +210,30 @@ class FavoritesStoreModel extends \DAO\AbstractModel {
//更新店铺收藏数 //更新店铺收藏数
$this->getFavoritesStoreCountByStoreId($storeId, $type == 1 ? -1 : 1); $this->getFavoritesStoreCountByStoreId($storeId, $type == 1 ? -1 : 1);
} }
$favoritesRedis = \Redis\Db6\FavoritesStoreRedisModel::getInstance();
if(is_array($storeIds) && count($storeIds) <= 20){ if(is_array($storeIds) && count($storeIds) <= 20){
foreach ($storeIds as $v){ foreach ($storeIds as $v){
\Our\RedisHelper::delCachedFunction(\Redis\Db6\FavoritesStoreRedisModel::getInstance(),array(&$this, 'getOne'),array('*',array('store_id'=>$v,'member_id'=>$memberId)),array($memberId)); \Our\RedisHelper::delCachedFunction($favoritesRedis,array(&$this, 'getOne'),array('*',array('store_id'=>$v,'member_id'=>$memberId)),array($memberId));
} }
// }elseif (!is_array($storeIds)){
// \Our\RedisHelper::delCachedFunction(\Redis\Db6\FavoritesStoreRedisModel::getInstance(),array(&$this, 'getOne'),array('*',array('store_id'=>$storeIds,'member_id'=>$memberId)),array($memberId));
}else{ }else{
\Our\RedisHelper::delCachedFunction(\Redis\Db6\FavoritesStoreRedisModel::getInstance(),array(&$this, 'getOne'),array(),array($memberId)); \Our\RedisHelper::delCachedFunction($favoritesRedis,array(&$this, 'getOne'),array(),array($memberId));
} }
\Our\RedisHelper::delCachedFunction(\Redis\Db6\FavoritesStoreRedisModel::getInstance(),array(&$this, 'getFavoritesStores'),array(),array($memberId));
\Our\RedisHelper::delCachedFunction(\Redis\Db6\FavoritesStoreRedisModel::getInstance(), array(&$this, 'selectList'), array(),array($memberId));
\Our\RedisHelper::delCachedFunction($favoritesRedis,array(&$this, 'getFavoritesStores'),array(),array($memberId));
\Our\RedisHelper::delCachedFunction($favoritesRedis, array(&$this, 'selectList'), array(),array($memberId));
if($type == 1) {
$favoritesRedis->tableDelAll($favoritesRedis->tableKeys('myFavoritesStore'.$favoritesRedis::DELIMITER.$memberId.'_'));
}
\Our\RedisHelper::delCachedFunction(\Redis\Db6\QmStoreClassRedisModel::getInstance(), array(\DAO\QmStoreClassModel::getInstance(), 'selectByWhere'), array(), array('*member_'.$memberId.'*'));
//更新个人中心首页数量 //更新个人中心首页数量
\DAO\MemberModel::getInstance()->_changeNum(\Our\NameConst::storeCollection,$memberId,$type == 1 ? -(count($storeIds)) : count($storeIds)); \DAO\MemberModel::getInstance()->_changeNum(\Our\NameConst::storeCollection,$memberId,$type == 1 ? -(count($storeIds)) : count($storeIds));
return true; return true;
} }
public function delMyFavoritesStoreByStoreId($storeId) {
$favoritesRedis = \Redis\Db6\FavoritesStoreRedisModel::getInstance();
$favoritesRedis->tableDelAll($favoritesRedis->tableKeys('myFavoritesStore'.$favoritesRedis::DELIMITER.'*_'.$storeId));
}
public function getFavoritesStoreCountByStoreId($storeId, $num = 0) { public function getFavoritesStoreCountByStoreId($storeId, $num = 0) {
$statisticsDb6Redis = \Redis\Db6\StatisticsRedisModel::getInstance(); $statisticsDb6Redis = \Redis\Db6\StatisticsRedisModel::getInstance();
$collectCount = $statisticsDb6Redis->tableCacheGet('storeCollectCount:'.$storeId); $collectCount = $statisticsDb6Redis->tableCacheGet('storeCollectCount:'.$storeId);
......
...@@ -192,7 +192,6 @@ class PBundlingModel extends \DAO\AbstractModel { ...@@ -192,7 +192,6 @@ class PBundlingModel extends \DAO\AbstractModel {
return false; return false;
} }
$pBundling = $result['result']; $pBundling = $result['result'];
\Our\Log::getInstance()->write(json_encode($pBundling),'/data/log/apptest');
$key = $result['key']; $key = $result['key'];
if($op == \Our\ApiConst::minus){ if($op == \Our\ApiConst::minus){
$pBundling['bl_storage'] = $pBundling['bl_storage']-$blStorage; $pBundling['bl_storage'] = $pBundling['bl_storage']-$blStorage;
...@@ -205,9 +204,7 @@ class PBundlingModel extends \DAO\AbstractModel { ...@@ -205,9 +204,7 @@ class PBundlingModel extends \DAO\AbstractModel {
$pBundling['bl_storage'] = $pBundling['bl_storage']+$blStorage; $pBundling['bl_storage'] = $pBundling['bl_storage']+$blStorage;
$pBundling['bl_origin_storage'] = $pBundling['bl_origin_storage']+$blStorage; $pBundling['bl_origin_storage'] = $pBundling['bl_origin_storage']+$blStorage;
} }
\Our\Log::getInstance()->write(json_encode($pBundling),'/data/log/apptest');
\Lock\RedisLock::getInstance()->releaseLock(\Our\NameConst::pBundlingStorageRedisPrefix.$blId); \Lock\RedisLock::getInstance()->releaseLock(\Our\NameConst::pBundlingStorageRedisPrefix.$blId);
\Our\Log::getInstance()->write($key,'/data/log/apptest');
return $pBundlingRedisDao->setNoPrefix($key,serialize($pBundling),\Our\ApiConst::oneDaySecond); return $pBundlingRedisDao->setNoPrefix($key,serialize($pBundling),\Our\ApiConst::oneDaySecond);
} }
...@@ -253,13 +250,27 @@ class PBundlingModel extends \DAO\AbstractModel { ...@@ -253,13 +250,27 @@ class PBundlingModel extends \DAO\AbstractModel {
public function deletePBundlingByBlId($blId){ public function deletePBundlingByBlId($blId){
$pBundlingDao = \Redis\Db4\PBundlingRedisModel::getInstance(); $isLock = \Lock\RedisLock::getInstance()->getLock(\Our\NameConst::pBundlingStorageRedisPrefix.$blId);
$pBundlingDao->tableDelAll($pBundlingDao->tableKeys('gid_'.$blId)); if(!$isLock){
\Error\ErrorModel::throwException(\Error\CodeConfigModel::serverBusy);
}
$pBundlingRedisDao = \Redis\Db4\PBundlingRedisModel::getInstance();
$pBundlingRedisDao->tableDelAll($pBundlingRedisDao->tableKeys('gid_'.$blId));
$groups=\Business\Goods\GroupSaleServiceModel::getInstance()->getPBundlingListByBlIds(array($blId));
var_dump($groups);
\Lock\RedisLock::getInstance()->releaseLock(\Our\NameConst::pBundlingStorageRedisPrefix.$blId);
return true;
} }
public function deletePBundlingByGoodsCommonId($goodsCommonId){ public function deletePBundlingByGoodsCommonId($goodsCommonId){
$pBundlingDao = \Redis\Db4\PBundlingRedisModel::getInstance(); $pBundlingDao = \Redis\Db4\PBundlingRedisModel::getInstance();
return $pBundlingDao->tableDelAll($pBundlingDao->tableKeys('*'.\Our\NameConst::blGoods.$goodsCommonId)); $blIdsStrs = $pBundlingDao->tableKeys('*'.\Our\NameConst::blGoods.$goodsCommonId);
foreach($blIdsStrs as $blIdStr){
$newstr = substr($blIdStr,strpos($blIdStr,'gid_')+4);
$blId = substr($newstr,0,(strlen($newstr)-strlen(substr($newstr,strpos($newstr,'_goodsCommon')))));
$this->deletePBundlingByBlId($blId);
}
return true;
} }
/** /**
......
...@@ -125,6 +125,7 @@ class QmStoreClassModel extends \DAO\AbstractModel{ ...@@ -125,6 +125,7 @@ class QmStoreClassModel extends \DAO\AbstractModel{
} }
$platformFirstClassDao = \DAO\GoodsClass\PlatformFirstClassModel::getInstance(); $platformFirstClassDao = \DAO\GoodsClass\PlatformFirstClassModel::getInstance();
\Our\RedisHelper::delCachedFunction(\Redis\Db3\PlatformFirstClassRedisModel::getInstance(),array(&$platformFirstClassDao, 'getList'),array(),array()); \Our\RedisHelper::delCachedFunction(\Redis\Db3\PlatformFirstClassRedisModel::getInstance(),array(&$platformFirstClassDao, 'getList'),array(),array());
return true;
} }
/** /**
......
...@@ -330,6 +330,7 @@ class CodeConfigModel ...@@ -330,6 +330,7 @@ class CodeConfigModel
const addOrderFrequently = 300147; const addOrderFrequently = 300147;
const cancelRefundMoneyError = 300148; const cancelRefundMoneyError = 300148;
const serverBusy = 300149; const serverBusy = 300149;
const updateGoodsStorageFail=300150;
//店铺相关错误码 //店铺相关错误码
//商品分类 //商品分类
...@@ -789,6 +790,7 @@ class CodeConfigModel ...@@ -789,6 +790,7 @@ class CodeConfigModel
self::updateMemberCouponFailed => '优惠券更新失败', self::updateMemberCouponFailed => '优惠券更新失败',
self::updateAddressFailedForOrder => '下单时更新地址失败', self::updateAddressFailedForOrder => '下单时更新地址失败',
self::updateGoodsStorageForOrder => '非线上支付订单更新库存失败', self::updateGoodsStorageForOrder => '非线上支付订单更新库存失败',
self::updateGoodsStorageFail => '商品库存更新失败',
self::saveOrderCommonFailed => '保存订单相关收货信息失败', self::saveOrderCommonFailed => '保存订单相关收货信息失败',
self::saveOrderGoodsFailed => '保存订单商品失败', self::saveOrderGoodsFailed => '保存订单商品失败',
self::delCartFaileForAddOrder => '下单时删除购物车失败', self::delCartFaileForAddOrder => '下单时删除购物车失败',
......
File mode changed from 100755 to 100644
File mode changed from 100755 to 100644
...@@ -316,10 +316,10 @@ resources.database.mongo.params.driver_options.1002 = "SET NAMES utf8" ...@@ -316,10 +316,10 @@ resources.database.mongo.params.driver_options.1002 = "SET NAMES utf8"
password.key='~!@#$`1234qwertasdfgzxcvb'; password.key='~!@#$`1234qwertasdfgzxcvb';
redis.database.params.host = "192.168.1.201" redis.database.params.host = "192.168.1.180"
redis.database.params.port = "6379" redis.database.params.port = "6379"
redis.database.params.prefix = "qm_" redis.database.params.prefix = "qm_"
redis.database.params.password = "" redis.database.params.password = "23456ertyu"
out.config="/data/config"; out.config="/data/config";
;锁文件 ;锁文件
...@@ -328,13 +328,13 @@ out.locks="/data/locks"; ...@@ -328,13 +328,13 @@ out.locks="/data/locks";
;redis.database.params.password = "test" ;redis.database.params.password = "test"
;推送配置 ;推送配置
push.clientHost="ws://192.168.1.201:9502" push.clientHost="ws://192.168.1.180:9502"
push.host="192.168.1.201" push.host="192.168.1.180"
push.port="9503" push.port="9503"
push.open=1 push.open=1
push.user.service.id=293 push.user.service.id=293
push.user.service.type=7 push.user.service.type=7
elastic.master.host="192.168.1.201" elastic.master.host="192.168.1.180"
elastic.master.port="9200" elastic.master.port="9200"
elastic.master.scheme="http"; elastic.master.scheme="http";
;resources.database.params.hostname = "127.0.0.1" ;resources.database.params.hostname = "127.0.0.1"
...@@ -390,21 +390,21 @@ elastic.master.scheme="http"; ...@@ -390,21 +390,21 @@ elastic.master.scheme="http";
[lyztest : common] [lyztest : common]
; 数据库配置 ; 数据库配置
resources.database.params.driver = "pdo_mysql" resources.database.params.driver = "pdo_mysql"
resources.database.params.hostname = "127.0.0.1" resources.database.params.hostname = "106.14.14.233"
resources.database.params.port = 3306 resources.database.params.port = 3306
resources.database.params.database = "qmcs" resources.database.params.database = "qmcs"
resources.database.params.username = "root" resources.database.params.username = "root"
resources.database.params.password = "123456" resources.database.params.password = "!@#$%12345werty"
resources.database.params.charset = "UTF8" resources.database.params.charset = "UTF8"
resources.database.params.driver_options.1002 = "SET NAMES utf8" resources.database.params.driver_options.1002 = "SET NAMES utf8"
; 从库配置 ; 从库配置
resources.database.slave.params.driver = "pdo_mysql" resources.database.slave.params.driver = "pdo_mysql"
resources.database.slave.params.hostname = "127.0.0.1" resources.database.slave.params.hostname = "106.14.14.233"
resources.database.slave.params.port = 3306 resources.database.slave.params.port = 3306
resources.database.slave.params.database = "qmcs" resources.database.slave.params.database = "qmcs"
resources.database.slave.params.username = "root" resources.database.slave.params.username = "root"
resources.database.slave.params.password = "123456" resources.database.slave.params.password = "!@#$%12345werty"
resources.database.slave.params.charset = "UTF8" resources.database.slave.params.charset = "UTF8"
resources.database.slave.params.driver_options.1002 = "SET NAMES utf8" resources.database.slave.params.driver_options.1002 = "SET NAMES utf8"
...@@ -439,21 +439,21 @@ elastic.master.scheme="http"; ...@@ -439,21 +439,21 @@ elastic.master.scheme="http";
[lyz : common] [lyz : common]
; 数据库配置 ; 数据库配置
resources.database.params.driver = "pdo_mysql" resources.database.params.driver = "pdo_mysql"
resources.database.params.hostname = "106.14.14.233" resources.database.params.hostname = "127.0.0.1"
resources.database.params.port = 3306 resources.database.params.port = 3306
resources.database.params.database = "qmcs" resources.database.params.database = "qmcs"
resources.database.params.username = "root" resources.database.params.username = "root"
resources.database.params.password = "!@#$%12345werty" resources.database.params.password = "123456"
resources.database.params.charset = "UTF8" resources.database.params.charset = "UTF8"
resources.database.params.driver_options.1002 = "SET NAMES utf8" resources.database.params.driver_options.1002 = "SET NAMES utf8"
; 从库配置 ; 从库配置
resources.database.slave.params.driver = "pdo_mysql" resources.database.slave.params.driver = "pdo_mysql"
resources.database.slave.params.hostname = "106.14.14.233" resources.database.slave.params.hostname = "127.0.0.1"
resources.database.slave.params.port = 3306 resources.database.slave.params.port = 3306
resources.database.slave.params.database = "qmcs" resources.database.slave.params.database = "qmcs"
resources.database.slave.params.username = "root" resources.database.slave.params.username = "root"
resources.database.slave.params.password = "!@#$%12345werty" resources.database.slave.params.password = "123456"
resources.database.slave.params.charset = "UTF8" resources.database.slave.params.charset = "UTF8"
resources.database.slave.params.driver_options.1002 = "SET NAMES utf8" resources.database.slave.params.driver_options.1002 = "SET NAMES utf8"
......
...@@ -186,6 +186,7 @@ config.url.pushHost="127.0.0.1:9503"; ...@@ -186,6 +186,7 @@ config.url.pushHost="127.0.0.1:9503";
config.url.convert="/usr/local/bin/wkhtmltoimage"; config.url.convert="/usr/local/bin/wkhtmltoimage";
config.url.indexUrl="/www/local.qm.com/application/library/React" config.url.indexUrl="/www/local.qm.com/application/library/React"
config.url.libary="/www/local.qm.com/application/library" config.url.libary="/www/local.qm.com/application/library"
config.url.source="/data/upload/"
[linqing : common] [linqing : common]
......
This diff is collapsed.
...@@ -41,7 +41,7 @@ $http->on('request', function ($request, $response) { ...@@ -41,7 +41,7 @@ $http->on('request', function ($request, $response) {
throw new Exception($ex->getMessage(),$ex->getCode()); throw new Exception($ex->getMessage(),$ex->getCode());
} }
}); });
$http->start(); $http->start();
<?php
if(!empty($request->post)){
try{
$respData=$request->post;
// echo json_encode($respData);
if(isset($respData['type'])&&$respData['type']==1){
$info=$respData['content'];
$memberDao=$info['className']::getInstance(\Our\DbNameConst::masterDBConnectName);
echo json_encode($info);
if(empty($info['params'])){
$res=call_user_func_array(array($memberDao,$info['method']),array());
}else{
$res=call_user_func_array(array($memberDao,$info['method']),$info['params']);
}
$res=(isset($res)&&!empty($res))?$res:false;
unset($memberDao);
\Mysql\LinkMySQLModel::unsetDbConecet();
if($res!==false){
echo 'success'.PHP_EOL;
$response->end(json_encode(array('status'=>1,'message'=>'执行成功','data'=>$res)));
}else{
echo 'fail1'.PHP_EOL;
$response->end(json_encode(array('status'=>0,'message'=>'执行失败')));
}
}else{
echo 'fail2'.PHP_EOL;
$response->end(json_encode(array('status'=>0,'message'=>'执行失败')));
}
}catch(Exception $ex){
throw new Exception($ex->getMessage(),$ex->getCode());
$response->end(json_encode(array('status'=>0,'message'=>'执行失败')));
}
}else{
// 通过链接参数热重载 worker 进程观察触发事件
if(!empty($request->get)){
$act = $request->get['act']?$request->get['act']:'';
if ($act == 'reload') {
echo ' ... Swoole Reloading ! ... ' . PHP_EOL . PHP_EOL;
// 触发 reload 之后, 貌似后面的代码也还是会执行的
$http->reload();
echo ' ... Under Reload ! ... ' . PHP_EOL . PHP_EOL; // 看看 reload 时是否会执行后续的代码
$response->end(json_encode(array('status'=>1,'message'=>'重启成功')));
} elseif ($act == 'stop') {
// 直接立即终止当前 worker 进程, 和 reload 的效果比较相似, 新的 worker 进程的 ID 和原来的一样
// 所以程序内部应该尽量避免使用 exit 而应该抛出异常在外部 catch
echo ' ... Swoole Exit ! ... ' . PHP_EOL . PHP_EOL;
exit;
} elseif ($act == 'shutdown') {
// 直接立即终止当前 worker 进程, 和 reload 的效果比较相似, 新的 worker 进程的 ID 和原来的
// 所以程序内部应该尽量避免使用 exit 而应该抛出异常在外部 catch
echo ' ... Swoole Shutdown ! ... ' . PHP_EOL . PHP_EOL;
$http->shutdown();
echo ' ... After Swoole Shutdown ! ... ' . PHP_EOL . PHP_EOL;
}
}else{
$response->end(json_encode(array('status'=>1,'message'=>'请求成功')));
}
}
<?php <?php
/**
*
* 脚本
*
* @author ccw <31435391@qq.com>
*/
define("APPLICATION_PATH", realpath(dirname(__FILE__) . '/../../../')); //指向public的上一级 define("APPLICATION_PATH", realpath(dirname(__FILE__) . '/../../../')); //指向public的上一级
require APPLICATION_PATH . '/scripts/crontab/baseCli.php';
require APPLICATION_PATH . '/scripts/crontab/common.php';
error_reporting(E_ALL ^ E_NOTICE);
class bridgeStart
{
/* config */
const LISTEN = "tcp://192.168.2.15:5555";
const MAXCONN = 100;
const pidfile = __CLASS__;
const uid = 81;
const gid = 81;
/**/
protected $pool = NULL;
protected $zmq = NULL;
public function __construct() $http = new swoole_http_server("0.0.0.0", 9501);
{
$this->pidfile = '/var/run/' . self::pidfile . '.pid';
}
private function daemon() /**
{ * 测试在 $server 外部注册全局自定义属性, 看看会不会被覆盖
if (file_exists($this->pidfile)) { */
echo "The file $this->pidfile exists.\n";
exit();
}
$pid = pcntl_fork(); /**
if ($pid == -1) { * 测试在 $server 外部注册全局自定义属性, 看看会不会被覆盖
die('could not fork'); */
} else if ($pid) {
// we are the parent
//pcntl_wait($status); //Protect against Zombie children
exit($pid);
} else {
// we are the child
file_put_contents($this->pidfile, getmypid());
posix_setuid(self::uid);
posix_setgid(self::gid);
return (getmypid());
}
}
public function callback($instance,$channelName,$message){
$orderService=\Business\Order\OrderServiceModel::getInstance();
$orderService->testPush($message);
}
protected function status(){
if (file_exists($this->pidfile)) {
$pid = file_get_contents($this->pidfile);
printf("%s already running, pid = %s\n", $this->argv[0], $pid);
}else{
printf("%s haven't running\n", $this->argv[0]);
}
}
private function start()
{
$pid = $this->daemon();
$conf = \Yaf\Registry::get('config')->get('redis.database.params');
$http = new swoole_http_server("0.0.0.0", 9501);
$http->on('request', function ($request, $response) {
try{
$respData=$request->post;
// echo json_encode($respData);
if(isset($respData['type'])&&$respData['type']==1){ $http->myWorkerVar = 'global';
$info=$respData['content'];
$memberDao=$info['className']::getInstance(\Our\DbNameConst::masterDBConnectName);
echo json_encode($info);
if(empty($info['params'])){
$res=call_user_func_array(array($memberDao,$info['method']),array());
}else{
$res=call_user_func_array(array($memberDao,$info['method']),$info['params']);
}
$res=(isset($res)&&!empty($res))?$res:false;
unset($memberDao);
\Mysql\LinkMySQLModel::unsetDbConecet();
if($res!==false){
echo 'success';
$response->end(json_encode(array('status'=>1,'message'=>'执行成功','data'=>$res)));
}else{
echo 'fail1';
$response->end(json_encode(array('status'=>0,'message'=>'执行失败')));
}
}else{
echo 'fail2';
$response->end(json_encode(array('status'=>0,'message'=>'执行失败')));
}
}catch(Exception $ex){
throw new Exception($ex->getMessage(),$ex->getCode());
}
});
$http->start();
} $http->set(array(
private function reload(){ 'worker_num' => 5,
if (file_exists($this->pidfile)) { 'daemonize' => false,
$pid = file_get_contents($this->pidfile); ));
//posix_kill(posix_getpid(), SIGHUP);
posix_kill($pid, SIGHUP);
}
}
protected function restart(){
$this->stop();
sleep(1);
$this->start();
}
private function stop() // 服务器启动时执行一次
{ $http->on('Start', function (swoole_http_server $server) {
echo '';
});
if (file_exists($this->pidfile)) { // 服务器启动时执行一次
$pid = file_get_contents($this->pidfile); $http->on('ManagerStart', function (swoole_http_server $server) {
posix_kill($pid, 9); echo 'ManagerStart: ' . PHP_EOL . PHP_EOL;
unlink($this->pidfile); });
}
}
private function help($proc) // 每个 Worker 进程启动或重启时都会执行
{ $http->on('WorkerStart', function (swoole_http_server $server, $workerId) {
printf("%s start | stop | help | restart | reload \n", $proc); // 通过重新加载外部文件来重载代码和释放之前占用的内存
} //include_once __DIR__ . DIRECTORY_SEPARATOR .'workerstart.php';
private $argv; // 下面这些直接写在当前文件中的代码即便重载也不会变化
public function main($argv)
{ echo 'WorkerStart: ' . PHP_EOL . PHP_EOL;
$this->argv=$argv; echo ' Worker ID: ' . $workerId . PHP_EOL . PHP_EOL;
if (count($argv) < 2) { // 启动服务器后, 去掉下面这行注释, 然后 reload , 该语句也不会执行的
printf("please input help parameter\n"); //echo ' reloaded ! ' . PHP_EOL . PHP_EOL;
exit(); // 应该把这里的回调事件代码写在另一个文件中来 include 而不是直接写在这里
} // 注意即便是 include_once , reload 也会重新加载的, 但在你的逻辑控制中是有效的
if ($argv[1] === 'stop') { });
// 每次连接时(相当于每个浏览器第一次打开页面时)执行一次, reload 时连接不会断开, 也就不会再次触发该事件
$http->on('Connect', function (swoole_http_server $server, $fd, $reactorThreadId) {
echo 'Worker ID: '. $server->worker_id . ';'.'fd: ' . $fd . ' , fromId: ' . $reactorThreadId . PHP_EOL;
});
// 浏览器连接服务器后, 页面上的每个请求均会执行一次,
// 每次打开链接页面默认都是接收两个请求, 一个是正常的数据请求, 一个 favicon.ico 的请求
$http->on('request', function ($request, $response) use($http) {
require_once APPLICATION_PATH . '/scripts/crontab/common.php';
require APPLICATION_PATH . '/scripts/crontab/push/bridgeBase.php';
});
$http->start();
$this->stop();
} else if ($argv[1] === 'start') {
$this->start();
} else if($argv[1] === 'restart'){
$this->restart();
}else if($argv[1] === 'status'){
$this->status();
}else if($argv[1]==='reload'){
$this->reload();
}
else{
$this->help($argv[0]);
}
}
}
$cgse = new bridgeStart();
$cgse->main($argv);
\ No newline at end of file
<?php
define("APPLICATION_PATH", realpath(dirname(__FILE__) . '/../../../')); //指向public的上一级
require APPLICATION_PATH . '/scripts/crontab/baseCli.php';
require APPLICATION_PATH . '/scripts/crontab/common.php';
error_reporting(E_ALL ^ E_NOTICE);
class bridgeStart
{
/* config */
const LISTEN = "tcp://192.168.2.15:5555";
const MAXCONN = 100;
const pidfile = __CLASS__;
const uid = 81;
const gid = 81;
/**/
protected $pool = NULL;
protected $zmq = NULL;
public function __construct()
{
$this->pidfile = '/var/run/' . self::pidfile . '.pid';
}
private function daemon()
{
if (file_exists($this->pidfile)) {
echo "The file $this->pidfile exists.\n";
exit();
}
$pid = pcntl_fork();
if ($pid == -1) {
die('could not fork');
} else if ($pid) {
// we are the parent
//pcntl_wait($status); //Protect against Zombie children
exit($pid);
} else {
// we are the child
file_put_contents($this->pidfile, getmypid());
posix_setuid(self::uid);
posix_setgid(self::gid);
return (getmypid());
}
}
public function callback($instance,$channelName,$message){
$orderService=\Business\Order\OrderServiceModel::getInstance();
$orderService->testPush($message);
}
protected function status(){
if (file_exists($this->pidfile)) {
$pid = file_get_contents($this->pidfile);
printf("%s already running, pid = %s\n", $this->argv[0], $pid);
}else{
printf("%s haven't running\n", $this->argv[0]);
}
}
private function start()
{
$pid = $this->daemon();
$conf = \Yaf\Registry::get('config')->get('redis.database.params');
$http = new swoole_http_server("0.0.0.0", 9501);
$http->on('request', function ($request, $response) {
try{
$respData=$request->post;
// echo json_encode($respData);
if(isset($respData['type'])&&$respData['type']==1){
$info=$respData['content'];
$memberDao=$info['className']::getInstance(\Our\DbNameConst::masterDBConnectName);
echo json_encode($info);
if(empty($info['params'])){
$res=call_user_func_array(array($memberDao,$info['method']),array());
}else{
$res=call_user_func_array(array($memberDao,$info['method']),$info['params']);
}
$res=(isset($res)&&!empty($res))?$res:false;
unset($memberDao);
\Mysql\LinkMySQLModel::unsetDbConecet();
if($res!==false){
echo 'success';
$response->end(json_encode(array('status'=>1,'message'=>'执行成功','data'=>$res)));
}else{
echo 'fail1';
$response->end(json_encode(array('status'=>0,'message'=>'执行失败')));
}
}else{
echo 'fail2';
$response->end(json_encode(array('status'=>0,'message'=>'执行失败')));
}
}catch(Exception $ex){
throw new Exception($ex->getMessage(),$ex->getCode());
}
});
$http->start();
}
private function reload(){
if (file_exists($this->pidfile)) {
$pid = file_get_contents($this->pidfile);
//posix_kill(posix_getpid(), SIGHUP);
posix_kill($pid, SIGHUP);
}
}
protected function restart(){
$this->stop();
sleep(1);
$this->start();
}
private function stop()
{
if (file_exists($this->pidfile)) {
$pid = file_get_contents($this->pidfile);
posix_kill($pid, 9);
unlink($this->pidfile);
}
}
private function help($proc)
{
printf("%s start | stop | help | restart | reload \n", $proc);
}
private $argv;
public function main($argv)
{
$this->argv=$argv;
if (count($argv) < 2) {
printf("please input help parameter\n");
exit();
}
if ($argv[1] === 'stop') {
$this->stop();
} else if ($argv[1] === 'start') {
$this->start();
} else if($argv[1] === 'restart'){
$this->restart();
}else if($argv[1] === 'status'){
$this->status();
}else if($argv[1]==='reload'){
$this->reload();
}
else{
$this->help($argv[0]);
}
}
}
$cgse = new bridgeStart();
$cgse->main($argv);
\ No newline at end of file
<?php
/**
* Created by PhpStorm.
* User: Administrator
* Date: 2019/1/17 0017
* Time: 下午 2:29
*/
require APPLICATION_PATH . '/scripts/crontab/common.php';
error_reporting(E_ALL ^ E_NOTICE);
$conf = \Yaf\Registry::get('config')->get('redis.database.params');
$redisPublishName=\Yaf\Registry::get('config')->get('redis.redisPublishName');
function callback($instance,$channelName,$message){
try{
$message=json_decode($message,true);
$callInstance=$message['className']::getInstance(\Our\DbNameConst::masterDBConnectName);
echo json_encode($message)."\r\n";
if(empty($message['params'])){
$res=call_user_func_array(array($callInstance,$message['method']),array());
}else{
$res=call_user_func_array(array($callInstance,$message['method']),$message['params']);
}
$res=(isset($res)&&!empty($res))?$res:false;
if($res!==false){
echo 'success'."\r\n";
}else{
echo 'fail1'."\r\n";
}
unset($callInstance);
\Mysql\LinkMySQLModel::unsetDbConecet();
}catch(Exception $ex){
echo $ex->getMessage();
}
$instance->unsubscribe(array($channelName));
$instance->close();
}
$redis=new Redis();
$redis->connect($conf['host'], $conf['port']);
if(!empty($conf['password'])){
$redis->auth($conf['password']);
}
//ini_set('default_socket_timeout', -1);(所有长连接不超时)
$redis->setOption(Redis::OPT_READ_TIMEOUT, -1);
$result=$redis->subscribe(array($redisPublishName), 'callback');
$redis->close();
echo 'abcdef'."\r\n";
\ No newline at end of file
<?php
define("APPLICATION_PATH", realpath(dirname(__FILE__) . '/../../../')); //指向public的上一级
class Logger
{
public function __construct(/*Logging $logger*/)
{
}
public function logger($type, $message)
{
$log = sprintf("%s\t%s\t%s\n", date('Y-m-d H:i:s'), $type, $message);
file_put_contents(sprintf(__DIR__ . "/../log/sender.%s.log", date('Y-m-d')), $log, FILE_APPEND);
}
}
final class Signal{
public static $signo = 0;
protected static $ini = null;
public static function set($signo){
self::$signo = $signo;
}
public static function get(){
return(self::$signo);
}
public static function reset(){
self::$signo = 0;
}
}
class Test extends Logger
{
//public static $signal = null;
public function __construct()
{
//self::$signal == null;
}
public function run()
{
require APPLICATION_PATH . '/scripts/crontab/push/runRedisBase.php';
pcntl_signal_dispatch();
printf(".123");
sleep(1);
if (Signal::get() == SIGHUP) {
Signal::reset();
// break;
}
// while (true) {
// pcntl_signal_dispatch();
// printf(".123");
// sleep(1);
// if (Signal::get() == SIGHUP) {
// Signal::reset();
// break;
// }
//
// }
printf("\n");
}
}
class Daemon extends Logger {
/* config */
const LISTEN = "tcp://192.168.2.15:5555";
const pidfile = __CLASS__;
const uid = 80;
const gid = 80;
const sleep = 5;
protected $pool = NULL;
protected $config = array();
public function __construct($uid, $gid, $class) {
$this->pidfile = '/var/run/'.basename(get_class($class), '.php').'.pid';
//$this->config = parse_ini_file('sender.ini', true); //include_once(__DIR__."/config.php");
$this->uid = $uid;
$this->gid = $gid;
$this->class = $class;
$this->classname = get_class($class);
$this->signal();
}
public function signal(){
pcntl_signal(SIGHUP, function($signo) /*use ()*/{
//echo "\n This signal is called. [$signo] \n";
printf("The process has been reload.\n");
Signal::set($signo);
$this->run();
});
}
private function daemon(){
if (file_exists($this->pidfile)) {
echo "The file $this->pidfile exists.\n";
exit();
}
$pid = pcntl_fork();
if ($pid == -1) {
die('could not fork');
} else if ($pid) {
// we are the parent
//pcntl_wait($status); //Protect against Zombie children
exit($pid);
} else {
file_put_contents($this->pidfile, getmypid());
posix_setuid(self::uid);
posix_setgid(self::gid);
return(getmypid());
}
}
private function run(){
while(true){
printf("The process begin.\n");
$this->class->run();
printf("The process end.\n");
}
}
private function foreground(){
$this->run();
}
private function start(){
$pid = $this->daemon();
for(;;){
$this->run();
sleep(self::sleep);
}
}
private function stop(){
if (file_exists($this->pidfile)) {
$pid = file_get_contents($this->pidfile);
posix_kill($pid, 9);
unlink($this->pidfile);
}
}
private function reload(){
if (file_exists($this->pidfile)) {
$pid = file_get_contents($this->pidfile);
//posix_kill(posix_getpid(), SIGHUP);
posix_kill($pid, SIGHUP);
}
}
private function status(){
if (file_exists($this->pidfile)) {
$pid = file_get_contents($this->pidfile);
system(sprintf("ps ax | grep %s | grep -v grep", $pid));
}
}
private function help($proc){
printf("%s start | stop | restart | status | foreground | help \n", $proc);
}
public function main($argv){
if(count($argv) < 2){
$this->help($argv[0]);
printf("please input help parameter\n");
exit();
}
if($argv[1] === 'stop'){
$this->stop();
}else if($argv[1] === 'start'){
$this->start();
}else if($argv[1] === 'restart'){
$this->stop();
$this->start();
}else if($argv[1] === 'status'){
$this->status();
}else if($argv[1] === 'foreground'){
$this->foreground();
}else if($argv[1] === 'reload'){
$this->reload();
}else{
$this->help($argv[0]);
}
}
}
$daemon = new Daemon(80,80, new Test());
$daemon->main($argv);
...@@ -92,8 +92,9 @@ class runRedisPush ...@@ -92,8 +92,9 @@ class runRedisPush
private function reload(){ private function reload(){
if (file_exists($this->pidfile)) { if (file_exists($this->pidfile)) {
$pid = file_get_contents($this->pidfile); $pid = file_get_contents($this->pidfile);
posix_kill($pid, SIGUSR1);
//posix_kill(posix_getpid(), SIGHUP); //posix_kill(posix_getpid(), SIGHUP);
posix_kill($pid, SIGHUP); // posix_kill($pid, SIGHUP);
} }
} }
protected function restart(){ protected function restart(){
......
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