Commit ced4dab9 authored by liuyuzhen's avatar liuyuzhen

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

parents 4de8dcad eb94440a
......@@ -27,9 +27,8 @@ class AddressController extends \Our\Controller_AbstractApi {
*/
public function saveAddressAction(){
$result = $this->addressService->saveAddress($this->req[\Our\NameConst::data],$this->memberId);
$this->success($result,\Our\DescribeConst::saveAddressSuccess,\Our\DescribeConst::saveAddressSuccess);
if($result){
$this->success(new stdClass(),\Our\DescribeConst::saveAddressSuccess,\Our\DescribeConst::saveAddressSuccess);
$this->success(array('addressId'=>$result),\Our\DescribeConst::saveAddressSuccess,\Our\DescribeConst::saveAddressSuccess);
}
\Error\ErrorModel::throwException(\Error\CodeConfigModel::saveAddressFailed);
}
......
......@@ -8,7 +8,19 @@ class IndexController extends \Our\Controller_Abstract {
public function init(){
}
public function is_https() {
if ( !empty($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) !== 'off') {
return true;
} elseif ( isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https' ) {
return true;
} elseif ( !empty($_SERVER['HTTP_FRONT_END_HTTPS']) && strtolower($_SERVER['HTTP_FRONT_END_HTTPS']) !== 'off') {
return true;
}elseif($_SERVER['SERVER_PORT'] == 89){
return true;
}
return false;
}
public function getHtmlAction(){
$this->req=$this->getRequest()->getQuery();
$postData=$this->req;
......@@ -40,6 +52,8 @@ class IndexController extends \Our\Controller_Abstract {
}
public function indexAction() {
var_dump($_SERVER);exit;
// echo $_SERVER['USER']);exit;
$elasticConfig=\Our\Common::getConfig('elastic.master');
$configArray=array(
$elasticConfig->host.':'.$elasticConfig->port,
......
......@@ -802,6 +802,7 @@ class OrderConfirmUtil {
$reciverInfo['mob_phone'] = $addressInfo['mob_phone'];
$reciverInfo['tel_phone'] = $addressInfo['tel_phone'];
$reciverInfo['address'] = $addressInfo['area_info'].' '.$addressInfo['address'];
$reciverInfo['name'] = $addressInfo['name'];
$reciverInfo['area'] = $addressInfo['area_info'];
$reciverInfo['street'] = $addressInfo['address'];
$reciverInfo['lng'] = $addressInfo['lng'];
......
......@@ -364,4 +364,6 @@ class ApiConst
//订单列表索引 因子
const orderIndexRank=1000;
const defaultGoodsScore= 5;
}
\ No newline at end of file
......@@ -35,6 +35,12 @@ class ArrayConst
ApiConst::qqPayType,
ApiConst::wxLitePayType
);
const orderPayTypeOnlines=array(
ApiConst::wxpay,
ApiConst::alipay,
ApiConst::tenpay,
ApiConst::wxProgram
);
//退货方式
const refundTypes=array(
ApiConst::refundTypeMoney=>array('id'=>ApiConst::refundTypeMoney,'name'=>"退款",'desc'=>'未收到货(包含未签收),或卖家协商同意前提下'),
......
......@@ -57,7 +57,28 @@ class Common
return isset($httpStatusCodes[$num]) ? $httpStatusCodes[$num] : '';
}
public static function isSerialized( $data ) {
$data = trim( $data );
if ( 'N;' == $data )
return true;
if ( !preg_match( '/^([adObis]):/', $data, $badions ) )
return false;
switch ( $badions[1] ) {
case 'a' :
case 'O' :
case 's' :
if ( preg_match( "/^{$badions[1]}:[0-9]+:.*[;}]\$/s", $data ) )
return true;
break;
case 'b' :
case 'i' :
case 'd' :
if ( preg_match( "/^{$badions[1]}:[0-9.E-]+;\$/", $data ) )
return true;
break;
}
return false;
}
/**
* 获取客户端IP
*
......@@ -101,6 +122,7 @@ class Common
return $url;
}
public static function is_https() {
if ( !empty($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) !== 'off') {
return true;
......@@ -108,10 +130,12 @@ class Common
return true;
} elseif ( !empty($_SERVER['HTTP_FRONT_END_HTTPS']) && strtolower($_SERVER['HTTP_FRONT_END_HTTPS']) !== 'off') {
return true;
}elseif($_SERVER['SERVER_PORT'] == 89){
return true;
}
return false;
}
/**
* 获取静态资源文件
*
......
......@@ -210,7 +210,8 @@ class Push
if ($push['open']) {
if(!empty($this->data)){
$message['data'] = $this->data;
$message['uid'] = $this->uid;
$message['uid'] = !empty($this->uid)?$this->uid:ApiConst::zero;
// $message['data']=array_slice($message['data'],2,14);
$message = json_encode($message);
$message = $message . "\r\n";
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
......
......@@ -67,6 +67,11 @@ class Pay {
\Error\ErrorModel::throwException(\Error\CodeConfigModel::emptyOrderAmountForPay);
}
$orderInfo['orderAmount'] = $this->orderAmount;
if($this->channel == \Our\NameConst::wxLiteChannel){
$orderConfirmUtil = \Order\OrderConfirmUtil::getInstance();
$newPaySn = $orderConfirmUtil->makeNewPaySnForOrderWithOldPaySn($this->paySn,$this->memberId);
$this->paySn = $newPaySn;
}
$orderInfo['paySn'] = $this->paySn;
$orderInfo['orderSns'] = array_column($orderList,'order_sn');
return $orderInfo;
......
......@@ -38,7 +38,7 @@ class WxLitePay extends \Payment\TencentPay{
$wxApiObj["nonceStr"] = \Our\CommonExtension::createNoncestr();
$wxApiObj['package'] = 'prepay_id='.$this->prepay_id;
$wxApiObj['signType'] = 'MD5';
$wxApiObj["paySign "] = $this->getSign($wxApiObj);
$wxApiObj["paySign"] = $this->getSign($wxApiObj);
return $wxApiObj;
}
......
......@@ -8,12 +8,14 @@ namespace Payment;
* Description:
*/
class WxPay extends \Payment\TencentPay{
class WxPay extends \Payment\TencentPay
{
private $refundUrl="https://api.mch.weixin.qq.com/secapi/pay/refund";
public function __construct()
{
$this->appid = \Our\PayConst::wxPayAppId;
$this->notify_url = \Our\NameConst::httpPrefix.$_SERVER['SERVER_NAME'].\Our\PayConst::wxAppNotifyUrl;
$this->notify_url = \Our\NameConst::httpPrefix . $_SERVER['SERVER_NAME'] . \Our\PayConst::wxAppNotifyUrl;
$this->mch_id = \Our\PayConst::wxPayMchId;
$this->key = \Our\PayConst::wxPayKey;
$this->sslcert_path = \Our\PayConst::wxSslcertPath;
......@@ -22,12 +24,13 @@ class WxPay extends \Payment\TencentPay{
$this->tradeType = \Our\PayConst::wxAppTradeType;
}
public function doPay($orderInfo){
public function doPay($orderInfo)
{
$this->setRequestParams($orderInfo);
$wxAppParameters = $this->getParameters();
$returnData = array(
'credential'=>array(\Our\NameConst::wxAppChannel=>$wxAppParameters),
'app_id'=>$this->appid
'credential' => array(\Our\NameConst::wxAppChannel => $wxAppParameters),
'app_id' => $this->appid
);
return $returnData;
}
......@@ -48,6 +51,45 @@ class WxPay extends \Payment\TencentPay{
return $wxApiObj;
}
/**
* 作用:产生随机字符串,不长于32位
*/
private function createNoncestr($length = 32)
{
$chars = "abcdefghijklmnopqrstuvwxyz0123456789";
$str = "";
for ($i = 0; $i < $length; $i++) {
$str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
}
return $str;
}
public function refund($param)
{
$total_fee = intval($param['totalFee']);
$refund_fee = intval($param['refundFee']);
if (APP_ENV == 'develop' || APP_ENV == 'test' || APP_ENV == 'pre') {
$this->parameters['total_fee'] = 1;
$this->parameters['refund_fee'] = 1;
} else {
$this->parameters['total_fee'] = $total_fee;
$this->parameters['refund_fee'] = $refund_fee;
}
$this->parameters['out_refund_no'] = $param['refund_order_no'];
$this->parameters['out_trade_no'] = $param['out_trade_no'];
$this->parameters['op_user_id'] = $this->mch_id;
$this->parameters['nonce_str'] = $this->createNoncestr(32);
$this->parameters['appid'] = \Our\PayConst::wxPayAppId;
$this->parameters['mch_id'] = \Our\PayConst::wxPayMchId;
$xml = $this->createXml();
$response = $this->postXmlSSLCurl($xml, $this->refundUrl, 6);
$values = $this->xmlToArray($response);
if ($values['return_code'] != 'SUCCESS') {
return $values;
}
$this->checkSign($values);
return $values;
}
/**
* 类实例
......
......@@ -38,9 +38,9 @@ class CartServiceModel extends \Business\AbstractModel{
$memberCartKey = \Our\NameConst::memberCartStorePrefix.$memberId;
$cartRedis = \Redis\Db7\CartRedisModel::getInstance();
$cartRedis->tableDel($memberCartKey);
$cartRedis = \Redis\Db7\CartRedisModel::getInstance();
foreach($cartArray['storeIds'] as $storeId){
$memberStoreCartsKey = \Our\NameConst::memberStoreCartsPrefix.$memberId.\Our\NameConst::underline.$storeId;
$cartRedis = \Redis\Db7\CartRedisModel::getInstance();
$cartRedis->tableDel($memberStoreCartsKey);
}
return $result;
......@@ -55,16 +55,21 @@ class CartServiceModel extends \Business\AbstractModel{
* @param $pBundlind
*/
public function editCart($data,$cart,$memberId,$pBundlind=null){
$this->validEditCart($data,$cart,$memberId,$pBundlind);
$validReturnData = $this->validEditCart($data,$cart,$memberId,$pBundlind);
$cartDao = \DAO\Cart\CartModel::getInstance(\Our\DbNameConst::masterDBConnectName);
$cartArray = $this->getFormattedCartDataForEdit($data,$cart,$memberId,$pBundlind);
$result = $cartDao->update($cartArray['cart'],array('cart_id'=>$cart['cart_id']));
$cartArray = $this->getFormattedCartDataForEdit($data,$cart,$memberId,$pBundlind,$validReturnData);
$result = $cartDao->update($cartArray['newCarts'][0],array('cart_id'=>$data['cartId']));
if(!$result){
\Error\ErrorModel::throwException(\Error\CodeConfigModel::editCartFailed);
}
$memberStoreCartsKey = \Our\NameConst::memberStoreCartsPrefix.$memberId.\Our\NameConst::underline.$cartArray['cart']['store_id'];
$cartRedis = \Redis\Db7\CartRedisModel::getInstance();
foreach($cartArray['storeIds'] as $storeId){
$memberStoreCartsKey = \Our\NameConst::memberStoreCartsPrefix.$memberId.\Our\NameConst::underline.$storeId;
$cartRedis->tableDel($memberStoreCartsKey);
}
/*$memberStoreCartsKey = \Our\NameConst::memberStoreCartsPrefix.$memberId.\Our\NameConst::underline.$cartArray['cart']['store_id'];
$cartRedis = \Redis\Db7\CartRedisModel::getInstance();
$cartRedis->tableDel($memberStoreCartsKey);*/
return $result;
}
......@@ -148,13 +153,13 @@ class CartServiceModel extends \Business\AbstractModel{
* @return array
* @throws \Our\Exception
*/
public function getFormattedCartDataForEdit($data,$cart,$memberId,$pBundling = null){
public function getFormattedCartDataForEdit($data,$cart,$memberId,$pBundling = null,$validReturnData){
if($cart['type'] == \Our\ApiConst::addGoodsToCart){
$newCart = $this->getCommonGoodsCartData($data['goodsId'],$data['goodsNum'],$memberId);
$newCart = $this->getCommonGoodsCartData($data['goodsId'],$data['goodsNum'],$memberId,$validReturnData);
}else if($cart['type'] == \Our\ApiConst::addBundingToCart){
$newCart = $this->getPBundlingGoodsCartData($data['goodsNum'],$memberId,$pBundling);
}
return array('cart'=>$newCart);
return $newCart;
}
......@@ -358,6 +363,7 @@ class CartServiceModel extends \Business\AbstractModel{
if(!$goodsValidStatus){
\Error\ErrorModel::throwException($goodsDao->errorCode);
}
return $goodsValidStatus;
}else if($cart['type'] == \Our\ApiConst::addBundingToCart){
if(!$pBundling){
\Error\ErrorModel::throwException(\Error\CodeConfigModel::emptyCartBundling);
......@@ -367,6 +373,7 @@ class CartServiceModel extends \Business\AbstractModel{
}
$this->checkBundlingGoods($pBundling,$data['goodsNum'],true);
}
return true;
}
/**
......
......@@ -309,9 +309,9 @@ class CouponServiceModel extends \Business\AbstractModel{
$couponTitles[] = $coupon['subTitle'];
}
}
return array('couponTitle'=>$couponTitles,'coupons'=>$couponList);
return array('couponsTitle'=>$couponTitles,'coupons'=>$couponList);
}else{
return array('couponTitle'=>array(),'coupons'=>array());
return array('couponsTitle'=>array(),'coupons'=>array());
}
}
......
......@@ -1002,6 +1002,19 @@ class GoodsCommonServiceModel extends \Business\AbstractModel
}
return $goodsCommon['goods_price'];
}
/**
* 更新店铺销量
*/
public function updateStoreTopSaleGoods(){
$storeTopSaleGoodsDao = \DAO\Goods\StoreTopSaleGoodsModel::getInstance();
$storeGoodsList = $storeTopSaleGoodsDao->getSourceGoodsList();
$result = $storeTopSaleGoodsDao->insertAllOrUpdate($storeGoodsList);
return $result;
}
private static $_instance = null;
/**
......
......@@ -37,11 +37,12 @@ class AddressServiceModel extends \Business\AbstractModel {
\Our\RedisHelper::delCachedFunction(\Redis\Db8\AddressRedisModel::getInstance(),array(&$addressDao, 'findByWhereWithColumns'),array(),array($addressId));
}else{
$result = $addressDao->insert($address);
$addressId = $result;
}
if($result){
\Our\RedisHelper::delCachedFunction(\Redis\Db8\AddressRedisModel::getInstance(),array(&$addressDao, 'selectByWhere'),array(),array($memberId));
}
return $result;
return $addressId;
}
/**
......
......@@ -111,7 +111,7 @@ class GoodsModel extends \DAO\AbstractModel {
$this->errorCode = \Error\CodeConfigModel::noStorageForCart;
return false;
}
return true;
return $goods;
}
/**
......
......@@ -63,6 +63,57 @@ class StoreTopSaleGoodsModel extends \DAO\AbstractModel{
}
return false;
}
/**
* @return mixed
*/
public function getSourceGoodsList(){
$sql = 'SELECT a.store_id,a.goods_commonid,IFNULL(a.evaluation_score/a.evaluation_number,'.\Our\ApiConst::defaultGoodsScore.') as goods_score,a.group_id as rank,a.goods_name,a.goods_image
FROM
(
SELECT t1.*,t2.evaluation_score,t2.evaluation_number,(SELECT COUNT(*)+1 FROM han_goods_common WHERE store_id=t1.store_id AND sale_num>t1.sale_num) AS group_id
FROM han_goods_common t1
LEFT JOIN han_goods_score_statistics t2
on t1.goods_commonid = t2.goods_commonid
) a
WHERE a.group_id<=3 AND a.sale_num>0 and a.goods_state=1 and a.goods_verify=1 ORDER BY a.store_id ,a.group_id';
$list = $this->db->query($sql)->fetchAll();
return $list;
}
public function insertAllOrUpdate($datas){
$this->setDb(\Our\DbNameConst::masterDBConnectName);
$error = 0;
$baseSql = "insert into {$this->_tableName}(store_id,goods_commonid,goods_score,rank,goods_name,goods_image) values";
$insertAllSql = $baseSql;
for ($i = 0; $i < count($datas); $i++) {
$addSql = \Our\Common::format("({0},{1},{2},{3},{4},{5}),", $datas[$i]['store_id'],$datas[$i]['goods_commonid'], $datas[$i]['goods_score'], $datas[$i]['rank'],$datas[$i]['goods_name'],$datas[$i]['goods_image']);
$insertAllSql .= $addSql;
if ($i % 1000 == 0 && $i != 0) {
$insertAllSql = rtrim($insertAllSql, ',');
$insertAllSql .= 'ON DUPLICATE KEY UPDATE goods_commonid = VALUES(goods_commonid),goods_score=VALUES(goods_score),goods_name=VALUES(goods_name),goods_image=VALUES(goods_image)';
$one = $this->db->insert()->query($insertAllSql);
if ($one === false) {
$error++;
}
$insertAllSql = $baseSql;
}
}
if ($insertAllSql != $baseSql) {
$insertAllSql = rtrim($insertAllSql, ',');
$insertAllSql .= 'ON DUPLICATE KEY UPDATE goods_commonid = VALUES(goods_commonid),goods_score=VALUES(goods_score),goods_name=VALUES(goods_name),goods_image=VALUES(goods_image)';
$one = $this->db->insert($this->_tableName)->query($insertAllSql);
if ($one === false) {
$error++;
}
}
if ($error > 0) {
return false;
}
return true;
}
/**
* 类实例
*
......
......@@ -45,7 +45,7 @@ class OrderModel extends \DAO\AbstractModel
public function getOrderDetailField()
{
return 'order_id as orderId,coupon_id as couponId,refund_amount as refundAmount,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,payment_time as paymentTime,finnshed_time as finnshedTime,need_shipping_fee as needShippingFee,payment_code as paymentCode,buyer_id as buyerId,buyer_name as buyerName,refund_condition as refundCondition';
return 'order_id as orderId,coupon_id as couponId,refund_amount as refundAmount,order_sn as orderSn,pay_sn as paySn,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,payment_time as paymentTime,finnshed_time as finnshedTime,need_shipping_fee as needShippingFee,payment_code as paymentCode,buyer_id as buyerId,buyer_name as buyerName,refund_condition as refundCondition';
}
public function getOrderShippingField()
......
<?php
function is_https() {
if ( !empty($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) !== 'off') {
return true;
} elseif ( isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https' ) {
return true;
} elseif ( !empty($_SERVER['HTTP_FRONT_END_HTTPS']) && strtolower($_SERVER['HTTP_FRONT_END_HTTPS']) !== 'off') {
return true;
}elseif($_SERVER['SERVER_PORT'] == 89){
return true;
}
return false;
}
$res=is_https();
if($res){
echo 1;
}else{
echo 2;
}
exit;
function getSortArr($sortArray){
ksort($sortArray);
$str='';
......
......@@ -162,7 +162,8 @@ abstract class BaseCli
protected function _getBaseFileName($path)
{
return dirname(__FILE__).DS.$path.DS.'locks';
$locksPath=\Our\Common::getConfig('out.locks');
return $locksPath.DS.$path.DS.'locks';
}
......
<?php
/**
* Created by PhpStorm.
* User: liuyu
* Date: 2018/9/1
* Time: 20:06
*/
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 cliStoreTopSaleGoods 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 updateStoreTopSaleGoods(){
\Business\Goods\GoodsCommonServiceModel::getInstance()->updateStoreTopSaleGoods();
}
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('StoreTopSaleGoods');
if(!$this->mkdirs($lockDir)){
echo '****create dir fail ****';
exit;
}
$this->lockFileName = $lockDir .'.locks';
if( file_exists( $this->lockFileName ) )
{
$stat = stat($this->lockFileName);
if( (TIMESTAMP - $stat['mtime']) > 24*60*60*2 )
{
echo "文件被锁超过2天,被强制删除";
@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->updateStoreTopSaleGoods();
echo '首页热销商品更新成功'."\r\n";
}
}
$oCli = new cliStoreTopSaleGoods(TRUE);
EXIT;
?>
\ No newline at end of file
......@@ -56,12 +56,12 @@ class cliOrderClose extends basecli
echo "*** Debug mode ***\n";
}
// Step: 02 检查是否已有相同CLI在运行中
$lockDir=$this->_getBaseFileName('orderClose');
$lockDir=$this->_getBaseFileName('order');
if(!$this->mkdirs($lockDir)){
echo '****create dir fail ****';
exit;
}
$this->lockFileName = $lockDir .'.locks';
$this->lockFileName = $lockDir .DS.'close.locks';
if( file_exists( $this->lockFileName ) )
{
$stat = stat($this->lockFileName);
......@@ -76,7 +76,9 @@ class cliOrderClose extends basecli
}
}
$this->bDoUnLock = true;
if(APP_ENV =='pre' || APP_ENV=='product'){
file_put_contents($this->lockFileName ,"running" ); // CLI 独占锁
}
$this->autoCloseOrder();
echo '定单关闭消息发送成功'."\r\n";
......
......@@ -187,8 +187,13 @@ $tcp_server->on('connect', function($serv, $fd) use($conf){
* 4. 按照用户类型(channel)推送
*/
$tcp_server->on('receive', function($serv, $fd, $from_id, $data) use($conf) {
// echo $data;
$data = json_decode($data, true);
if(empty($data['data']) && !isset($data['data'])) return;
if(empty($data['data']) && !isset($data['data'])){
$serv->send($fd, responseJson(1,"fail", ['method' => 'receive', 'error_code' => 1, 'status' => 0]));
$serv->close($fd);
return;
}
$s = json_encode($data['data']);
echo $s;
// 推送 存入redis、最后入库(MySQL)
......
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