Commit f66f4ea2 authored by wwccw0591's avatar wwccw0591

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

parents 2d3cafc1 f4709d26
......@@ -42,7 +42,7 @@ class GoodsController extends \Our\Controller_AbstractIndex {
public function testAction(){
//$info = $this->goodsService->recommend();
//\Business\Goods\GoodsCommonServiceModel::getInstance()->saleGoods();
\Business\Store\StoreServiceModel::getInstance()->pendingItemsInform();
\Business\Store\StoreServiceModel::getInstance()->tryExpireInform();
}
public function getAttrsAction(){
......
......@@ -936,7 +936,7 @@ class OrderConfirmUtil {
if($blGoodsList){
$dbName = \Our\DbNameConst::masterDBConnectName;
$pBundlingDao = \DAO\PBundlingModel::getInstance($dbName);
$pBundlingResult = $pBundlingDao->updateBlStorage($blGoodsList);
$pBundlingResult = $pBundlingDao->updateBlStorage($blGoodsList,$op);
if(!$pBundlingResult){
\Error\ErrorModel::throwException(\Error\CodeConfigModel::blGoodsStorageToDBFailedForOrder);
}
......@@ -956,7 +956,7 @@ class OrderConfirmUtil {
if($blGoodsList){
foreach($blGoodsList as $key=>$blGoods){
$pBundlingCacheResult = $pBundlingDao->opBlGoodsStorage($key,$blGoods['blStorage']);//组合销售库存删减
$pBundlingCacheResult = $pBundlingDao->opBlGoodsStorage($key,$blGoods['blStorage'],$op);//组合销售库存删减
if($pBundlingCacheResult===false){
\Error\ErrorModel::throwException(\Error\CodeConfigModel::blGoodsStorageToCacheFailedForOrder);
}
......
......@@ -70,6 +70,20 @@ class Common
}
return false;
}
/**
* @param $arr
* @param $key_name
* @return array
* 将数据库中查出的列表以指定的 id 作为数组的键名
*/
public static function convertArrKey($arr, $key_name)
{
$arr2 = array();
foreach ($arr as $key => $val) {
$arr2[$val[$key_name]] = $val;
}
return $arr2;
}
public static function isSerialized($data)
{
......@@ -94,7 +108,22 @@ class Common
}
return false;
}
public static function redisPublish($control,$method,$params){
//发布application.redis.redisPublishName
$conf = \Yaf\Registry::get('config')->get('redis.database.params');
$redisPublishName=\Yaf\Registry::get('config')->get('redis.redisPublishName');
$redis=new \Redis();
$redis->connect($conf['host'], $conf['port']);
if(!empty($conf['password'])){
$redis->auth($conf['password']);
}
$message['className']=$control;
$message['method']=$method;
$message['params']=$params;
$message=json_encode($message);
$ret=$redis->publish($redisPublishName,$message);
return $ret;
}
/**
* 获取客户端IP
*
......
......@@ -88,7 +88,21 @@ class SmsTemplateConst{
'storeCount',
'weiCount'
)
),
//尊敬的${storename},您的店铺试用期将于{limitday}天后到期,请及时登录商户后台进行注册信息核对。为了您继续享有独家推荐权,请及时缴纳保证金及相应的签约分类技术服务费。
'tryExpire'=> array(
'templateId'=>'SMS_154585403',
'parameters'=>array(
'storename',
'limitday'
)
),
//尊敬的${storename},您的店铺存在即将到期的签约分类,请及时登录商户后台续费,以免过期,过期后需重新申请。
'signClassExpire'=> array(
'templateId'=>'SMS_154590436',
'parameters'=>array(
'storename'
)
)
);
}
......@@ -26,8 +26,8 @@ class TencentPay {
protected $prepay_id ='';
protected $tradeType = '';
public $data;//接收到的数据,类型为关联数组
var $returnParameters;//返回参数,类型为关联数组
var $parameters;//请求参数,类型为关联数组
public $returnParameters;//返回参数,类型为关联数组
public $parameters;//请求参数,类型为关联数组
public function setRequestParams($orderInfo){
$pay_sn = $orderInfo['paySn'];
......@@ -158,7 +158,11 @@ class TencentPay {
{
if($signType=='MD5'){
//echo '加签参数:'.json_encode($this->parameters)."\n";
$this->parameters["sign"] = $this->getSign($this->parameters);//签名
if(empty($this->parameters)){
echo 234234;exit;
}
$tempParam = $this->parameters;
$this->parameters["sign"] = $this->getSign($tempParam);//签名
}else{
$this->parameters["sign"] = $this->getHMACSHA1Sign($this->parameters,'sha256');
}
......@@ -280,6 +284,9 @@ class TencentPay {
*/
public function getSign($Obj)
{
/*if(empty($Obj)){
$Obj = $this->parameters;
}*/
foreach ($Obj as $k => $v)
{
$Parameters[$k] = $v;
......@@ -287,11 +294,11 @@ class TencentPay {
//签名步骤一:按字典序排序参数
ksort($Parameters);
$String = $this->formatBizQueryParaMap($Parameters, false);
$String = $String."&key=".$this->key;
$String = str_replace(array("\r\n", "\r", "\n"," "), "", $String);
$String = md5($String);
$result_ = strtoupper($String);
//echo "\r\n sign:"."$result_";
return $result_;
}
......
......@@ -91,7 +91,6 @@ class WxLitePay extends \Payment\TencentPay{
$this->parameters['out_trade_no'] = $param['outTradeNo'];
$this->parameters['out_refund_no'] = $param['refundOrderNo'];
$xml = $this->createXml();
$response = $this->postXmlSSLCurl($xml, $this->refundUrl, 6);
$values = $this->xmlToArray($response);
......
......@@ -895,7 +895,8 @@ class OrderServiceModel extends \Business\AbstractModel
// }
// }
$orderInfo['refundOrderNo']=$refundSn;
if($refundReturnDao->refundMoney($orderInfo)){
$refundRes=$refundReturnDao->refundMoney($orderInfo);
if($refundRes){
$where['order_id']=$orderInfo['orderId'];
//$orderGoodsUpdateData['refund_state_name']='退款成功';
$orderGoodsUpdateData['is_refund']=1;
......@@ -906,6 +907,7 @@ class OrderServiceModel extends \Business\AbstractModel
echo $refundReturnDao->errorMessage."orderId:".$orderId;
return false;
}
$orderDao->update(array('order_id' =>$orderInfo['orderId']),array('order_note'=>$refundReturnDao->errorMessage));
}
......@@ -985,13 +987,16 @@ class OrderServiceModel extends \Business\AbstractModel
}
file_put_contents($this->baseDir . \Our\PathConst::orderCancelTime, $endTime);
}
public function changeOrderStatusSecond()
public function changeOrderStatusSecond($bTime=false)
{
$orderDao = \DAO\Order\OrderModel::getInstance(DbNameConst::masterDBConnectName);
$endTime = file_get_contents($this->baseDir . \Our\PathConst::orderCloseWaitRecieveOrder);
$endTime = $endTime ? $endTime : ApiConst::zero;
$beginTime = $endTime - ApiConst::halfDaySecond;
$beginTime = $endTime - ApiConst::tenDaySecond;
$storeDao=\DAO\StoreModel::getInstance();
if($bTime){
$beginTime=0;
}
// $beginTime=0;
$orders = $orderDao->getMustCecelRecieveOrders($beginTime, $endTime, $orderDao->getOrderDetailField());
$newOrders=array();
......@@ -1085,10 +1090,12 @@ class OrderServiceModel extends \Business\AbstractModel
if ($order['paymentTime'] > ApiConst::zero && in_array($order['paymentType'], ArrayConst::orderPayTypeOnlines)) {
$isRefunMoney= $this->changeOrderStateCancelUnconditional($order);
if(!$isRefunMoney){
$orderDao->db->doRollback();
continue;
}
}
array_push($orderIds,$order['orderId']);
$this->updateOrderGoodsStoregeByOrderIds($orderIds);
array_push($newOrders,$order);
......@@ -1097,6 +1104,7 @@ class OrderServiceModel extends \Business\AbstractModel
$orderDao->deleteOrderCache($order['buyerId'],(string)$order['orderId'],$order['storeId'],true);
$storeDao->deleteStoreCache($order['storeId'],$order['orderId']);
$push=\Our\Push::getInstance();
echo json_encode($order);
$pushData=array('storeId'=>$order['storeId'],
'type'=>ApiConst::messageWaitReceive,
'waitReceiveCount'=>ApiConst::reduceOne,
......@@ -1189,13 +1197,25 @@ class OrderServiceModel extends \Business\AbstractModel
}
public function updateGoodsStoregeByGoodsIds($storeId,$goodsid,$num=ApiConst::zero,$type=ApiConst::plus){
$where['goods_id']=$goodsid;
if(is_array($goodsid)){
$goodsids=array($goodsid);
$convertGoodsId=Common::convertArrKey($goodsid,'goodsId');
$where['goods_id']=array('in',$goodsids);
}else{
$where['goods_id']=$goodsid;
}
$where['store_id']=$storeId;
$goodsDao = \DAO\GoodsModel::getInstance(DbNameConst::masterDBConnectName);
$goodses=$goodsDao->getList($where,$goodsDao->goodsDetailField);
if(!empty($goodses)){
foreach($goodses as &$goods){
if(is_array($goodsid)){
foreach($goodses as &$goods){
$goods['goodsNum']=$convertGoodsId[$goods['goodsId']]['num'];
}
}else{
foreach($goodses as &$goods){
$goods['goodsNum']=$num;
}
}
if($this->updateDateGoodsStoregeByOrderGoods($goodses,$type,false)){
return true;
......@@ -1758,7 +1778,10 @@ class OrderServiceModel extends \Business\AbstractModel
}
return $order;
}
public function testPush($msg){
echo $msg.'abcde';
return true;
}
/**
* 类实例
*
......
......@@ -202,6 +202,8 @@ class StoreServiceModel extends \Business\AbstractModel{
if($sale_act && $sale_act['sale_start_date'] <= time() && $sale_act['sale_end_date'] >= time()){
$result = \DAO\SaleMemberModel::getInstance()->insertOrUpdate(array('sale_id'=>$sale['member_id'],'sale_act_id'=>$sale['sale_act_id'],'member_id'=>$memberId,'store_id'=>$sale_act['store_id']));
\Redis\Db4\SaleActivityRedisModel::getInstance()->tableDel('storeId:'.$storeId);
$saleMemberDao = \DAO\SaleMemberModel::getInstance();
\Our\RedisHelper::delCachedFunction(\Redis\Db4\SaleMemberRedisModel::getInstance(),array(&$saleMemberDao, 'getActAndSale'),array(array('han_sale_member.store_id'=>$storeId,'han_sale_member.member_id'=>$memberId),'han_sale_activity.sale_act_id,han_sale_activity.sale_start_date,han_sale_activity.sale_end_date,han_sale_member.sale_id'),array($storeId));
}
}
}
......@@ -213,11 +215,11 @@ class StoreServiceModel extends \Business\AbstractModel{
$storeMember['fav_type'] = \Our\ApiConst::one;
$storeMembers[] = $storeMember;
$favoritesStoreDao = \DAO\FavoritesStoreModel::getInstance();
$one = $favoritesStoreDao->getOne('store_id',array('store_id'=>$storeId,'member_id'=>$memberId,'fav_type'=>\Our\ApiConst::one),'');
$result = $favoritesStoreDao->insertAll($storeMembers);
if($result) {
if($result && !$one) {
$favoritesStoreDao->updateStoreCollecitonsCache(array($storeId),$memberId,2);
}
}else{
$sess=\Yaf\Session::getInstance();
$scan_store_ids = $sess->get('scan_store_ids');
......@@ -570,34 +572,34 @@ class StoreServiceModel extends \Business\AbstractModel{
* @param $memberId
*/
public function updateFavoritesStore($param,$memberId){
if(!(isset($param['storeId'])&&$param['storeId'])){
\Error\ErrorModel::throwException(\Error\CodeConfigModel::emptyScanStoreId);
}
$storeId = trim($param['storeId']);
$storeInfo = \DAO\StoreModel::getInstance()->get($storeId,false);
if(!$storeInfo){
\Error\ErrorModel::throwException(\Error\CodeConfigModel::emptyScanStoreInfo);
}
$storeMembers = array();
$storeMember = array();
$storeMember['store_id'] = $storeId;
$storeMember['member_id'] = $memberId;
$storeMember['fav_from'] = \Our\ApiConst::scanFavor;
$storeMember['fav_type'] = \Our\ApiConst::one;
$storeMembers[] = $storeMember;
$favoritesStoreDao = \DAO\FavoritesStoreModel::getInstance();
$one = $favoritesStoreDao->getOne('store_id',array('store_id'=>$storeId,'member_id'=>$memberId,'fav_type'=>\Our\ApiConst::one,'fav_from'=>\Our\ApiConst::scanFavor),'');
if(!$one) {
$result = $favoritesStoreDao->insertAll($storeMembers);
if(!$result){
\Error\ErrorModel::throwException(\Error\CodeConfigModel::saveScanStoreInfoFailed);
}
$favoritesStoreDao->updateStoreCollecitonsCache(array($storeId),$memberId,2);
$favoritesDao = \DAO\FavoritesStoreModel::getInstance();
\Our\RedisHelper::delCachedFunction(\Redis\Db6\FavoritesStoreRedisModel::getInstance(),array(&$favoritesDao, 'getOne'),array(),array($memberId));
}
// if(!(isset($param['storeId'])&&$param['storeId'])){
// \Error\ErrorModel::throwException(\Error\CodeConfigModel::emptyScanStoreId);
// }
// $storeId = trim($param['storeId']);
// $storeInfo = \DAO\StoreModel::getInstance()->get($storeId,false);
// if(!$storeInfo){
// \Error\ErrorModel::throwException(\Error\CodeConfigModel::emptyScanStoreInfo);
// }
// $storeMembers = array();
// $storeMember = array();
// $storeMember['store_id'] = $storeId;
// $storeMember['member_id'] = $memberId;
// $storeMember['fav_from'] = \Our\ApiConst::scanFavor;
// $storeMember['fav_type'] = \Our\ApiConst::one;
// $storeMembers[] = $storeMember;
// $favoritesStoreDao = \DAO\FavoritesStoreModel::getInstance();
//
// $one = $favoritesStoreDao->getOne('store_id',array('store_id'=>$storeId,'member_id'=>$memberId,'fav_type'=>\Our\ApiConst::one),'');
// if(!$one) {
// $result = $favoritesStoreDao->insertAll($storeMembers);
// if(!$result){
// \Error\ErrorModel::throwException(\Error\CodeConfigModel::saveScanStoreInfoFailed);
// }
// $favoritesStoreDao->updateStoreCollecitonsCache(array($storeId),$memberId,2);
// $favoritesDao = \DAO\FavoritesStoreModel::getInstance();
// \Our\RedisHelper::delCachedFunction(\Redis\Db6\FavoritesStoreRedisModel::getInstance(),array(&$favoritesDao, 'getOne'),array(),array($memberId));
//
// }
return true;
......@@ -1230,6 +1232,10 @@ class StoreServiceModel extends \Business\AbstractModel{
public function updateStoreTotalDeposit(){
\DAO\StoreModel::getInstance()->updateStoreDeposit();
}
/**
* 待办事务通知
*/
public function pendingItemsInform() {
$storePaymentDao = \DAO\Store\StorePaymentModel::getInstance();
$weiCount = $storePaymentDao->getStorePaymentCount(array('payment_type'=>0,'status'=>0));
......@@ -1239,6 +1245,47 @@ class StoreServiceModel extends \Business\AbstractModel{
$phone = $settingDAO->getListCache(array('pending_items_inform_tel'))['pending_items_inform_tel'];
\DAO\ShortMessageModel::getInstance()->sendMessageSmsForPlatform($phone,'storeWaitCheck',array('storeCount'=>$storeCount,'weiCount'=>$weiCount));
}
/**
* 试用快到期通知
*/
public function tryExpireInform() {
$storeList = \DAO\StoreModel::getInstance()->getTryExpireStore();
if($storeList) {
foreach ($storeList as $store) {
if( TIMESTAMP+9*24*3600<$store['store_end_time'] and $store['store_end_time'] <= TIMESTAMP+10*24*3600) {
$limitday = 10;
}elseif (TIMESTAMP+4*24*3600<$store['store_end_time'] and $store['store_end_time'] <= TIMESTAMP+5*24*3600) {
$limitday = 5;
}else{
$limitday = 3;
}
\DAO\ShortMessageModel::getInstance()->sendMessageSmsForPlatform($store['store_phone'],'tryExpire',array('storename'=>$store['store_name'],'limitday'=>$limitday));
}
}
}
/**
* 签约分类快到期通知
*/
public function signedClassExpireInform() {
$classList = \DAO\QmStoreClassModel::getInstance()->selectByWhere(array('is_charged'=>1,'deadline'=>array('between',TIMESTAMP+2*24*3600+1,TIMESTAMP+3*24*3600),'class_style'=>2),'deadline,store_id');
if($classList) {
$storeIds = array_column($classList,'store_id');
$storeFullList = \DAO\StoreModel::getInstance()->getStoreFullList(array('store_id'=>array('in',$storeIds)),'contract_time,store_id,store_phone,store_name');
$list = \Our\Common::intergrateOneToOne($classList,$storeFullList,'store_id','store_id');
foreach ($list as $v) {
$deadline = $v['deadline'];
$contarct_time = $v['contract_time'];
if($deadline<$contarct_time){
$maxSignEndTime = mktime(0,0,0,date('m',$contarct_time),1,date('Y',$contarct_time))-1;
if($maxSignEndTime==$deadline){
continue;
}
\DAO\ShortMessageModel::getInstance()->sendMessageSmsForPlatform($v['store_phone'],'signClassExpire',array('storename'=>$v['store_name']));
}
}
}
}
/**
*/
private static $_instance = null;
......
......@@ -369,15 +369,15 @@ class MemberServiceModel extends \Business\AbstractModel
$favoritesStoreDao = \DAO\FavoritesStoreModel::getInstance();
$storeIds = array_column($scan_store_ids,'store_id');
//$list = $favoritesStoreDao->selectList(array('store_id'=>array('in',$storeIds),'member_id'=>$memberId,'fav_type'=>0),'store_id');
$list = $favoritesStoreDao->selectList(array('store_id'=>array('in',$storeIds),'member_id'=>$memberId,'fav_type'=>\Our\ApiConst::one,'fav_from'=>\Our\ApiConst::scanFavor),'store_id');
$list = $favoritesStoreDao->selectList(array('store_id'=>array('in',$storeIds),'member_id'=>$memberId,'fav_type'=>\Our\ApiConst::one),'store_id');
$storeIds2 = $list ? array_column($list, 'store_id') : [];
$storeIds = array_diff($storeIds,$storeIds2);
if($storeIds) {
$result = $favoritesStoreDao->insertAll($storeMembers);
if(!$result){
\Our\Log::getInstance()->write(json_encode($storeMembers).'扫码数据写入失败');
return false;
}
$result = $favoritesStoreDao->insertAll($storeMembers);
if(!$result){
\Our\Log::getInstance()->write(json_encode($storeMembers).'扫码数据写入失败');
return false;
}
if($storeIds && $result) {
$favoritesStoreDao->updateStoreCollecitonsCache($storeIds,$memberId,2);
}
......
......@@ -209,7 +209,7 @@ class SalespersonServiceModel extends \Business\AbstractModel
// $where = sprintf($where,ApiConst::orderStateComplete,ApiConst::zero,ApiConst::zero,ApiConst::refundSellerRefuse,ApiConst::platNotIn,ApiConst::platIn,ApiConst::refundPlatformRefuse);
}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);
......
......@@ -74,8 +74,11 @@ class GoodsModel extends \DAO\AbstractModel {
public function getList($where,$field){
$this->setDb();
$res= $this->db->select($field)->from($this->_tableName)->where($where)->order('goods_storage','desc')->fetchAll();
return $res;
if(is_array($where)){
$where=$this->db->getSqlWhereByArray($where);
}
$res= $this->db->select($field)->from($this->_tableName)->where($where)->order('goods_storage','desc')->fetchAll();
return $res;
}
public function getListGroup($where,$field,$groupField){
......
......@@ -1007,7 +1007,7 @@ class OrderModel extends \DAO\AbstractModel
public function getMustCecelRecieveOrders($beginTime=ApiConst::zero, $endTime, $field = '*')
{
$this->setDb($this->dbName);
$where=Common::format(" add_time between {0} and {1} and order_state={2}",$beginTime,$endTime,ApiConst::orderStateWaitConfirm);
$where=Common::format(" order_state={2} and add_time between {0} and {1} ",$beginTime,$endTime,ApiConst::orderStateWaitConfirm);
$list = $this->db->select($field)->from($this->_tableName)->where($where)->order('add_time','desc')->fetchAll();
return $list;
}
......
......@@ -474,6 +474,7 @@ class RefundReturnModel extends \DAO\AbstractModel
$param['refundFee'] = $orderInfo['orderAmount'];//全额退款
$param['storeId'] = $orderInfo['storeId'];
$param['buyerId'] = $orderInfo['buyerId'];
if (CURRENTVERSION != \Our\NameConst::versionDefault && in_array(intval($orderInfo['paymentType']), array(\Our\ApiConst::wxAppPayType, \Our\ApiConst::wxProgram))) {
$mchIdArray = \DAO\StoreModel::getInstance()->getStoreWxMchId($param['storeId']);
if ($mchIdArray['errorCode'] > 0) {
......@@ -483,17 +484,23 @@ class RefundReturnModel extends \DAO\AbstractModel
$param['subMchId'] = $mchIdArray['mchId'];
}
if (intval($orderInfo['paymentType']) == ApiConst::wxAppPayType) {
$wxpay = \Payment\WxPay::getInstance();
$wxpay = new \Payment\WxPay();
//unset($param['subMchId']);
$refund_return = $wxpay->refund($param);
unset($wxpay);
$this->errorMessage = "微信返回:" . json_encode($refund_return);
if (!($refund_return['return_code'] == 'SUCCESS' && $refund_return['result_code'] == 'SUCCESS')) {
if($refund_return['err_code_des']=='订单已全额退款' || $refund_return['err_code_des']=='订单已Q68额退款'){
$this->errorMessage = date('Y-m-d') . $refund_return['err_code_des'] . $orderInfo['orderId'] . "\r\n";
return true;
}
$this->errorMessage = date('Y-m-d') . '微信退款操作执行失败!' . $orderInfo['orderId'] . "\r\n";
return false;
}
} else if (intval($orderInfo['paymentType']) == ApiConst::alipay) {
$aliPay = \Payment\Alipay::getInstance();
$aliPay = new \Payment\Alipay();
$return = $aliPay->refund($param);
unset($aliPay);
$this->errorMessage = "支付宝返回:" . json_encode($return);
$resultCode = $return->code;
if (!empty($resultCode) && $resultCode == ApiConst::alipayRefundSuccess) {
......@@ -503,13 +510,20 @@ class RefundReturnModel extends \DAO\AbstractModel
return false;
}
} else if (intval($orderInfo['paymentType']) == ApiConst::wxProgram) {
$wxpay = \Payment\WxLitePay::getInstance();
$wxpay = new \Payment\WxLitePay();
$refund_return = $wxpay->refund($param);
unset($wxpay);
$this->errorMessage = "微信返回:" . json_encode($refund_return)."\r\n";
if (!($refund_return['return_code'] == 'SUCCESS' && $refund_return['result_code'] == 'SUCCESS')) {
if($refund_return['err_code_des']=='订单已全额退款' || $refund_return['err_code_des']=='订单已Q68额退款'){
$this->errorMessage = date('Y-m-d') . $refund_return['err_code_des'] . $orderInfo['orderId'] . "\r\n";
return true;
}
$this->errorMessage = date('Y-m-d') . '微信退款操作执行失败!' . $orderInfo['orderId'] . "\r\n";
return false;
}
}
return true;
}
......
......@@ -121,7 +121,7 @@ class PBundlingModel extends \DAO\AbstractModel {
return $result;
}
public function updateBlStorage($dataList){
public function updateBlStorage($dataList,$op = \Our\ApiConst::minus){
$datas = array_values($dataList);
$this->setDb(\Our\DbNameConst::masterDBConnectName);
$error = 0;
......@@ -129,7 +129,7 @@ class PBundlingModel extends \DAO\AbstractModel {
$updateAllSql = $baseSql;
$dataIds = array();
for ($i = 0; $i < count($datas); $i++) {
$updateSql = \Our\Common::format(" WHEN {0} THEN bl_storage-{1} ", $datas[$i]['blId'], $datas[$i]['blStorage']);
$updateSql = \Our\Common::format(" WHEN {0} THEN bl_storage{2}{1} ", $datas[$i]['blId'], $datas[$i]['blStorage'],\Our\ArrayConst::ops[$op]);
$dataIds[] = $datas[$i]['blId'];
$updateAllSql .= $updateSql;
if ($i % 1000 == 0 && $i != 0) {
......
File mode changed from 100755 to 100644
......@@ -113,7 +113,14 @@ class StoreModel extends \DAO\AbstractModel
return $store;
}
}
public function getStoreFullList($where, $field) {
$this->setDb($this->dbName);
if(is_array($where)) {
$where = $this->db->getSqlWhereByArray($where);
}
$result = $this->db->from($this->_tableNameFull)->select($field)->where($where)->fetchAll();
return $result;
}
public function getInfoByMemberId($memberId, $field = '*', $isField = false, $db = DbNameConst::salveDBConnectName)
{
$this->setDb($db);
......@@ -627,4 +634,14 @@ class StoreModel extends \DAO\AbstractModel
}
return array('mchId'=>$mchId,'errorCode'=>$errorCode);
}
/**
* 获取试用期快到期的店铺
*/
public function getTryExpireStore() {
$this->setDb($this->dbName);
$sql = "SELECT store.store_id,store.store_end_time,store.store_phone,store.store_name FROM han_store store LEFT JOIN han_store_class_pay_log store_class_pay_log on store.store_id = store_class_pay_log.store_id where ((unix_timestamp(now())+9*24*3600) < store.store_end_time and store.store_end_time <= (unix_timestamp(now())+10*24*3600) ) or ((unix_timestamp(now())+2*24*3600) < store.store_end_time and store.store_end_time <= (unix_timestamp(now())+3*24*3600) ) or ((unix_timestamp(now())+4*24*3600) < store.store_end_time and store.store_end_time <= (unix_timestamp(now())+5*24*3600) ) and store_class_pay_log.id IS NULL";
$query = $this->db->query($sql);
return $query->rows;
}
}
This diff is collapsed.
......@@ -12,8 +12,7 @@ config.url.resourcesHost = "http://api.shenbd.com"
config.url.userHost = ""
;
; ; oss 域名
config.url.ossHost = "https://img.shenbd.com"
;config.url.ossHost = "https://qmoss-01.oss-cn-hangzhou.aliyuncs.com"
config.url.ossHost = "https://qmoss-01.oss-cn-hangzhou.aliyuncs.com"
;
; ;推送域名
config.url.pushHost="172.16.142.15:9503";
......@@ -37,8 +36,8 @@ config.url.resourcesHost = "http://api.shenbd.com"
; 用户中心host
config.url.userHost = ""
config.url.ossHost = "https://img.shenbd.com"
;config.url.ossHost = "https://qmoss-01.oss-cn-hangzhou.aliyuncs.com"
; oss 域名
config.url.ossHost = "https://qmoss-01.oss-cn-hangzhou.aliyuncs.com"
;推送域名
config.url.pushHost="127.0.0.1:9503";
......@@ -55,9 +54,9 @@ config.url.convert=/usr/local/bin/wkhtmltoimage
config.url.resourcesHost = "http://apitest.shenbd.com"
; 用户中心host
config.url.userHost = ""
config.url.ossHost = "https://imgpre.shenbd.com"
; oss 域名
;config.url.ossHost = "https://qmoss-01.oss-cn-hangzhou.aliyuncs.com"
config.url.ossHost = "https://qmoss-01.oss-cn-hangzhou.aliyuncs.com"
;推送域名
config.url.pushHost="127.0.0.1:9503";
......@@ -75,9 +74,9 @@ config.url.source="/www/web/testadmin_shenbd_com/public_html/data/upload/"
config.url.resourcesHost = "http://apitest.qm.com"
; 用户中心host
config.url.userHost = ""
config.url.ossHost = "https://img.shenbd.com"
; oss 域名
;config.url.ossHost = "http://qmoss-01.oss-cn-hangzhou.aliyuncs.com"
config.url.ossHost = "http://qmoss-01.oss-cn-hangzhou.aliyuncs.com"
;推送域名
config.url.pushHost="127.0.0.1:9503";
......@@ -91,16 +90,11 @@ config.url.resourcesHost = "http://test.qm.com"
config.url.userHost = ""
; oss 域名
config.url.ossHost = "https://img.shenbd.com"
config.url.ossHost = "http://qmoss-01.oss-cn-hangzhou.aliyuncs.com"
;推送域名
config.url.pushHost="127.0.0.1:9503";
config.url.indexUrl="/www/web/test_qm_com/application/library/React"
config.url.libary="/www/web/test_qm_com/application/library"
config.url.source="/www/web/test_qm_com/public_html/data/upload/"
;config.url.source="E:/WAMP/www/www.qm.com/data/upload/"
; 文件目录
;店铺图片报错目录
......@@ -122,10 +116,10 @@ config.url.resourcesHost = "http://local.qm.com"
config.url.userHost = ""
; oss 域名
config.url.ossHost = "https://imgpre.shenbd.com"
config.url.ossHost = "http://qmoss-01.oss-cn-hangzhou.aliyuncs.com"
;推送域名
config.url.pushHost="192.168.1.201:9503";
config.url.pushHost="127.0.0.1:9503";
config.url.convert="/usr/local/bin/wkhtmltoimage";
......
......@@ -43,7 +43,12 @@ class cliOrderClose extends basecli
protected function autoCloseOrder(){
$orderService=\Business\Order\OrderServiceModel::getInstance(\Our\DbNameConst::masterDBConnectName);
$orderService->baseDir= \Our\Common::getConfig('out.config');
$orderService->changeOrderStatusSecond();
if($this->aArgv[1]){
$orderService->changeOrderStatusSecond(true);
}else{
$orderService->changeOrderStatusSecond();
}
$messageService=\Business\Message\MessageServiceModel::getInstance(\Our\DbNameConst::masterDBConnectName);
$messageService->addMessageCenterToDb();
}
......@@ -61,7 +66,7 @@ class cliOrderClose extends basecli
echo '****create dir fail ****';
exit;
}
$this->lockFileName = $lockDir .DS.'close.locks';
$this->lockFileName = $lockDir .DS.'closeSecond.locks';
if( file_exists( $this->lockFileName ) )
{
$stat = stat($this->lockFileName);
......
......@@ -50,7 +50,7 @@ class cliOrderEvaluate extends basecli
echo "*** Debug mode ***\n";
}
// Step: 02 检查是否已有相同CLI在运行中
$lockDir=$this->_getBaseFileName('orderEvaluate');
$lockDir=$this->_getBaseFileName('order');
if(!$this->mkdirs($lockDir)){
echo '****create dir fail ****';
exit;
......
......@@ -50,7 +50,7 @@ class cliSaleOrder extends basecli
echo "*** Debug mode ***\n";
}
// Step: 02 检查是否已有相同CLI在运行中
$lockDir=$this->_getBaseFileName('orderSaleGoods');
$lockDir=$this->_getBaseFileName('order');
if(!$this->mkdirs($lockDir)){
echo '****create dir fail ****';
exit;
......
......@@ -8,8 +8,6 @@
define("APPLICATION_PATH", realpath(dirname(__FILE__) . '/../../../')); //指向public的上一级
require_once APPLICATION_PATH . '/scripts/crontab/common.php';
$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{
......
<?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
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);
//发布
//$conf = \Yaf\Registry::get('config')->get('redis.database.params');
//$redis=new Redis();
//$redis->connect($conf['host'], $conf['port']);
//if(!empty($conf['password'])){
// $redis->auth($conf['password']);
//}
//$message=array('abd','happy New Year');
//$message=json_encode($message);
//$ret=$redis->publish('redisPublish',$message);
\Our\Common::redisPublish('\Business\Order\OrderServiceModel','testPush',array('happy New Year'));
......@@ -42,11 +42,43 @@ class runRedisPush
return (getmypid());
}
}
public 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();
}
// $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');
$redisPublishName=\Yaf\Registry::get('config')->get('redis.redisPublishName');
$redis=new Redis();
$redis->connect($conf['host'], $conf['port']);
if(!empty($conf['password'])){
......@@ -54,14 +86,20 @@ class runRedisPush
}
//ini_set('default_socket_timeout', -1);(所有长连接不超时)
$redis->setOption(Redis::OPT_READ_TIMEOUT, -1);
$result=$redis->subscribe(array('redisPublish'), 'callback');
function printTest($meg){
echo $meg.'213';
}
function callback($instance,$channelName,$message){
printTest($message);
$result=$redis->subscribe(array($redisPublishName), array($this,'callback'));
}
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();
$this->start();
}
private function stop()
{
......@@ -75,11 +113,12 @@ class runRedisPush
private function help($proc)
{
printf("%s start | stop | help \n", $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();
......@@ -89,7 +128,14 @@ class runRedisPush
$this->stop();
} else if ($argv[1] === 'start') {
$this->start();
} else {
} 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]);
}
}
......
......@@ -7,4 +7,5 @@
define("APPLICATION_PATH", realpath(dirname(__FILE__) . '/../../../')); //指向public的上一级
require APPLICATION_PATH . '/scripts/crontab/common.php';
\Business\Store\StoreServiceModel::getInstance()->pendingItemsInform();
echo '发送成功';
\ No newline at end of file
echo '发送成功';
<?php
/**
* 签约分类快到期通知
* 执行时间:每天9:00
*/
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 cliSaleOrder extends basecli
{
const CLI_ADMIN_ID = 255;
private $bDoUnLock = FALSE; // 是否允许释放 LOCK 文件
private $_debug = 0;
private $lockFileName;
private $fromState;
private function mkdirs($dir, $mode = 0777)
{
if (is_dir($dir) || @mkdir($dir, $mode)){
return TRUE;
}
if (!$this->mkdirs(dirname($dir), $mode)){
return FALSE;
}
return @mkdir($dir, $mode);
}
/**
* 析构
*/
public function __destruct()
{
parent::__destruct();
if ($this->bDoUnLock)
{
@unlink($this->lockFileName);
}
}
protected function signedClassExpireInform(){
\Business\Store\StoreServiceModel::getInstance()->signedClassExpireInform();
}
protected function _runCli()
{
$this->_debug = isset($this->aArgv[1]) ? intval($this->aArgv[1]) : 0;
if ($this->_debug)
{
echo "*** Debug mode ***\n";
}
// Step: 02 检查是否已有相同CLI在运行中
$lockDir=$this->_getBaseFileName('store');
if(!$this->mkdirs($lockDir)){
echo '****create dir fail ****';
exit;
}
$this->lockFileName = $lockDir .'/signedClassExpireInform.locks';
if( file_exists( $this->lockFileName ) )
{
$stat = stat($this->lockFileName);
if( (TIMESTAMP - $stat['mtime']) > 3600 )
{
echo "文件被锁超过3600秒,被强制删除";
@unlink($this->lockFileName);
}
else
{
$this->halt( '[' . date('Y-m-d H:i:s') .'] The CLI is running'."\n");
}
}
$this->bDoUnLock = true;
file_put_contents($this->lockFileName ,"running" ); // CLI 独占锁
$this->signedClassExpireInform();
echo '签约分类到期短信发送成功'."\r\n";
}
}
$oCli = new cliSaleOrder(TRUE);
EXIT;
<?php
/**
* 试用快到期通知
* 执行时间:每天9:00
*/
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 cliSaleOrder extends basecli
{
const CLI_ADMIN_ID = 255;
private $bDoUnLock = FALSE; // 是否允许释放 LOCK 文件
private $_debug = 0;
private $lockFileName;
private $fromState;
private function mkdirs($dir, $mode = 0777)
{
if (is_dir($dir) || @mkdir($dir, $mode)){
return TRUE;
}
if (!$this->mkdirs(dirname($dir), $mode)){
return FALSE;
}
return @mkdir($dir, $mode);
}
/**
* 析构
*/
public function __destruct()
{
parent::__destruct();
if ($this->bDoUnLock)
{
@unlink($this->lockFileName);
}
}
protected function tryExpireInform(){
\Business\Store\StoreServiceModel::getInstance()->tryExpireInform();
}
protected function _runCli()
{
$this->_debug = isset($this->aArgv[1]) ? intval($this->aArgv[1]) : 0;
if ($this->_debug)
{
echo "*** Debug mode ***\n";
}
// Step: 02 检查是否已有相同CLI在运行中
$lockDir=$this->_getBaseFileName('store');
if(!$this->mkdirs($lockDir)){
echo '****create dir fail ****';
exit;
}
$this->lockFileName = $lockDir .'/tryExpireInform.locks';
if( file_exists( $this->lockFileName ) )
{
$stat = stat($this->lockFileName);
if( (TIMESTAMP - $stat['mtime']) > 3600 )
{
echo "文件被锁超过3600秒,被强制删除";
@unlink($this->lockFileName);
}
else
{
$this->halt( '[' . date('Y-m-d H:i:s') .'] The CLI is running'."\n");
}
}
$this->bDoUnLock = true;
file_put_contents($this->lockFileName ,"running" ); // CLI 独占锁
$this->tryExpireInform();
echo '试用到期短信发送成功'."\r\n";
}
}
$oCli = new cliSaleOrder(TRUE);
EXIT;
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