Commit dabb4e97 authored by zhz's avatar zhz

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

parents f4379331 7d621015
......@@ -68,4 +68,19 @@ class CommonController extends \Our\Controller_AbstractIndex{
$articleList = $commonProbleService->getProblemList(true);
$this->success($articleList);
}
public function logAction(){
$logContent = $this->req[\Our\NameConst::data]['content'];
$commonServiceModel = \Business\Common\CommonServiceModel::getInstance();
$commonServiceModel->log($logContent);
$this->success(new stdClass(),\Our\DescribeConst::logWriteSuccess,\Our\DescribeConst::logWriteSuccess);
}
public function readLogAction(){
$where = $this->req[\Our\NameConst::data];
$commonServiceModel = \Business\Common\CommonServiceModel::getInstance();
$logList = $commonServiceModel->readLog($where);
$this->success($logList);
}
}
\ No newline at end of file
......@@ -18,7 +18,8 @@ class OrderController extends \Our\Controller_AbstractApi {
}else{
$orderState=false;
}
$orders=$orderService->getList($this->memberId,$pageIndex,$pageSize,$orderState);
$keyword=$this->req[\Our\NameConst::data]['keyword']?$this->req[\Our\NameConst::data]['keyword']:FAlSE;
$orders=$orderService->getList($this->memberId,$keyword,$pageIndex,$pageSize,$orderState);
$this->success($orders);
}
......
......@@ -360,6 +360,7 @@ class ApiConst
const messageButtonIdOne = 1;
const messageButtonIdTwo = 2;
const commonProblemArticleClassId = 18;//常见问题对应文章分类ID
//订单列表索引 因子
const orderIndexRank=1000;
}
\ No newline at end of file
......@@ -58,7 +58,8 @@ class ArrayConst
const defaultAddress = array(
NameConst::cityCode => '0591',
NameConst::lat => '26.053183',
NameConst::lng => '119.24174'
NameConst::lng => '119.24174',
NameConst::address => '横一号路特力林科技大厦'
);
//小程序账号
......
......@@ -86,6 +86,8 @@ class DescribeConst
const paySuccessTips = '支付成功';
const paySuccessSubTips = '感谢您的购买';
const logWriteSuccess = '日志写入成功';
//支付方式描述
const offPay = '线下支付';
const wxPay = '微信支付';
......
......@@ -79,6 +79,8 @@ class ImageConst{
//店铺广告位路径
const advSrcImagePath = 'mall/adv_src/';
const frontLogPath = 'mall/log/';
//可上传图片类型
const uploadTypes = array(
0=>self::defaultPath,
......
......@@ -103,7 +103,6 @@ class ImageUtil {
$ossUploadFilePath = $path.$uploadImageName;
//return $ossUploadFilePath;
$return = $ossClient->uploadFile($bucketName, $ossUploadFilePath, $filePath);
\Our\Log::getInstance()->write(json_encode($return,true));
return $return['oss-request-url'];
}
......
......@@ -14,8 +14,8 @@ class Log {
*
* @param string $message
*/
public function write($message) {
fwrite($this->getHandle(), date("Y-m-d H:i:s")
public function write($message,$filePath ='/data/log/application') {
fwrite($this->getHandle($filePath), date("Y-m-d H:i:s")
. "\t" . $message
. "\turi:" . $_SERVER['REQUEST_URI']
. "\tref:" . (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '')
......@@ -27,9 +27,9 @@ class Log {
*
* @return
*/
public function getHandle() {
public function getHandle($filePath ='/data/log/application') {
if (!$this->_handle) {
$this->_handle = fopen(APPLICATION_PATH . '/data/log/application'.date('Ymd').'.log', 'a');
$this->_handle = fopen(APPLICATION_PATH . $filePath .date('Ymd').'.log', 'a');
}
return $this->_handle;
......
......@@ -12,6 +12,7 @@ class NameConst {
* 登录session_key
* @var string
*/
const ordersIndex='orders';
const sessionKey = 'key';
const data='data';
const mobile='mobile';
......@@ -70,6 +71,7 @@ class NameConst {
const cityCode = 'cityCode';
const lat = 'lat';
const lng = 'lng';
const address = 'address';
const wechatAuthUrl = 'https://api.weixin.qq.com/sns/jscode2session?';
......@@ -152,10 +154,14 @@ class NameConst {
const rightBracket = ']';
const elasticName='elastic.master';
const shopkeeper='shopkeeper';
const shopkeeper='orders';
const cancelUnPayedOrderTimePrefix = 'cancelUnPayedOrderTime';
const cancelUnReceivedOrderTimePrefix = 'cancelUnReceivedOrderTime';
const frontLogPath = '/data/log/';
const frontPrefix = 'front';
}
?>
\ No newline at end of file
<?php
namespace React\Promise;
require_once ("/www/local.qm.com/application/library/React/Promise/functions.php");
$indexUrl=\Bootstrap::getUrlIniConfig('indexUrl');
require_once ($indexUrl.'/Promise/functions.php');
class FulfilledPromise implements ExtendedPromiseInterface, CancellablePromiseInterface
{
private $value;
......
......@@ -110,6 +110,45 @@ class CommonServiceModel extends \Business\AbstractModel
return $share;
}
public function log($content){
$logContent = $content;
if(!$logContent){
\Error\ErrorModel::throwException(\Error\CodeConfigModel::emptyLog);
}
$log['content']= $logContent;
$frontLogDao = \DAO\FrontLogModel::getInstance(\Our\DbNameConst::masterDBConnectName);
$result = $frontLogDao->insert($log);
if(!$result){
\Error\ErrorModel::throwException(\Error\CodeConfigModel::writeLogFailed);
}
return true;
}
public function readLog($where){
$logList = array();
$condition = array();
if(empty($where['startTime'])&&empty($where['endTime'])){
$condition['gmt_create'] = array('egt',TIMESTAMP-\Our\ApiConst::oneDaySecond);
$condition['gmt_create'] = array('lt',TIMESTAMP);
}else{
if((isset($where['startTime'])&&$where['startTime'])&&(isset($where['endTime'])&&$where['endTime'])){
if($where['startTime']>$where['endTime']){
\Error\ErrorModel::throwException(\Error\CodeConfigModel::wrongTimeForReadLog);
}
$condition['gmt_create'] = array('between',$where['startTime'],$where['endTime']);
}else if(isset($where['startTime'])&&$where['startTime']){
$condition['gmt_create'] = array('egt',$where['startTime']);
}else if(isset($where['endTime'])&&$where['endTime']){
$condition['gmt_create'] = array('lt',$where['endTime']);
}
}
$frontLogDao = \DAO\FrontLogModel::getInstance();
$logList = $frontLogDao->getList($condition);
return $logList;
}
private static $_instance = null;
/**
......
......@@ -54,26 +54,61 @@ class OrderServiceModel extends \Business\AbstractModel
{
return $this->orderGoodsField . ',goods_commonid as goodsCommonid,goods_group as goodsGroup';
}
public function getOrderIndexWhere($memberId,$keyword,$pageIndex,$pageSize){
// $query1= array('match' => array('buyerId' => $memberId));
// $res1['must']=$query1;
// // $query2[]= array('match' => array('orderSn' => $keyword"));
// $query2[]= array('match' => array('storeName' => $keyword));
// $query2[]= array('match' => array('goodsName' => $keyword));
// $res1['should']=$query2;
// $allQuery['bool']=$res1;
$query1= array('match' => array('buyerId' => $memberId));
$res1['must'][0]=$query1;
// $query2[]= array('match' => array('orderSn' => $keyword"));
$query2[]= array('match' => array('storeName' => $keyword));
$query2[]= array('match' => array('goodsName' => $keyword));
$res1['must'][1]['bool']['should']=$query2;
$allQuery['bool']=$res1;
// echo json_encode($allQuery);exit;
// echo json_encode($allQuery);exit;
//array_push($allQuery['bool'],$res2);
// echo json_encode($allQuery);exit;
// echo json_encode($allQuery);exit;
$elasticTool=\Elastics\ElasticsToolModel::getInstance(NameConst::ordersIndex);
$res=$elasticTool->searchMatch($allQuery,$pageIndex,$pageSize);
$orderIdsField=array_column($res['list'],'orderId');
$orderIds=implode(',',$orderIdsField);
if($orderIds){
$where=Common::format(" han_order.buyer_id={0} and delete_state={1} and (order_id in({2}) or han_order.order_sn like '%{3}%')",$memberId,ApiConst::undeleteOrder,$orderIds,$keyword);
}else{
$where=Common::format(" han_order.buyer_id={0} and delete_state={1} and han_order.order_sn like '%{2}%'",$memberId,ApiConst::undeleteOrder,$keyword);
}
return $where;
}
/**
* 订单,获得订单列表
*
* @date 2018-5-15
* @author ccw
*/
public function getList($memberId, $pageIndex = ApiConst::pageIndex, $pageSize = ApiConst::pageSize, $orderState = false)
public function getList($memberId,$keyWord=false, $pageIndex = ApiConst::pageIndex, $pageSize = ApiConst::pageSize, $orderState = false)
{
$orderDao = \DAO\Order\OrderModel::getInstance(DbNameConst::salveDBConnectName);
$orderGoodsDao = \DAO\Order\OrderGoodsModel::getInstance(DbNameConst::salveDBConnectName);
$goodsDao = \DAO\GoodsModel::getInstance(DbNameConst::salveDBConnectName);
$refundReturnDao = \DAO\Order\RefundReturnModel::getInstance(DbNameConst::salveDBConnectName);
if($keyWord!==false){
$where=$this->getOrderIndexWhere($memberId,$keyWord,$pageIndex,$pageSize);
}else{
$where['delete_state'] = ApiConst::undeleteOrder;
$where['buyer_id'] = $memberId;
//$where['lock_state'] = ApiConst::zero;
if ($orderState != false) {
$where['order_state'] = array('in', explode(',', $orderState));
}
}
//获得订单列表
$orders = \Our\RedisHelper::cachedFunction(\Redis\Db5\OrderRedisModel::getInstance(), array(&$orderDao, 'getList'), array($where, $this->orderField, $pageIndex, $pageSize, $order = array('add_time' => 'desc')), \Our\ApiConst::oneDaySecond, array($memberId));
if (!empty($orders['list'])) {
......
<?php
namespace DAO;
/**
* User: liuyuzhen
* Date: 2018/8/29
* Time: 15:01
* Description:
*/
class FrontLogModel extends \DAO\AbstractModel {
private $logField = 'content as logContent , gmt_create as logTime';
/**
* 表名
*
* @var string
*/
protected $_tableName = 'han_front_log';
/**
* 主键
*
* @var string
*/
protected $_primaryKey = 'id';
public function init(){
}
public function insert($param){
$param['gmt_create'] =TIMESTAMP;
$this->setDb(\Our\DbNameConst::masterDBConnectName);
return $this->db->insert($this->_tableName)->rows($param)->execute();
}
public function getList($where){
$this->setDb($this->dbName);
if(is_array($where)){
$where=$this->db->getSqlWhereByArray($where);
}
$result = $this->db->select($this->logField)->from($this->_tableName)->where($where)->fetchAll();
return $result;
}
/**
* 类实例
*
* @var \DAO\UserModel
*/
private static $_instance = null;
/**
* 获取类实例
*
* @return \DAO\UserModel
*/
public static function getInstance($dbName=\Our\DbNameConst::salveDBConnectName) {
if (!(self::$_instance instanceof self)) {
self::$_instance = new self($dbName);
}
return self::$_instance;
}
}
......@@ -157,7 +157,7 @@ class ElasticsToolModel
}
//一般传where就可以了,
public function searchMatch($where, $pageIndex = ApiConst::pageIndex, $pageSize = ApiConst::pageSize, $sort = array('_score' => array('order' => 'desc')))
public function searchMatch($where, $pageIndex = ApiConst::pageIndex, $pageSize = ApiConst::pageSize, $sort = array('addTime' => array('order' => 'desc')))
{
$searchParams['index'] = $this->dbName;
$searchParams['type'] = $this->tbName;
......@@ -165,8 +165,9 @@ class ElasticsToolModel
$searchParams['from'] = $from;
$searchParams['size'] = $pageSize;
$searchParams['sort'] = $sort;
//must 是与 ,should是或
$searchParams['body'] = array(
'query' => array('match' => $where),
'query' => $where,
);
$retDoc = $this->client->search($searchParams);
if (!isset($retDoc['hits'])) {
......@@ -259,14 +260,15 @@ class ElasticsToolModel
}
//插入多条 Document:
public function postBulkDoc($rows)
public function postBulkDoc($rows,$key='id')
{
foreach ($rows as $row) {
$params['body'][] = [
'index' => [
'_index' => $this->dbName,
'_type' => $this->tbName,
'_type' => $row['type']?$row['type']:$this->tbName,
'_id'=>$row[$key]
]
];
$params['body'][] = $row;
......@@ -274,8 +276,7 @@ class ElasticsToolModel
$res = $this->client->bulk($params);
return $res;
}
public function createIkField()
public function createIkField($indexFields)
{
$params = [
'index' => $this->dbName, //索引名称
......@@ -294,12 +295,7 @@ class ElasticsToolModel
'dynamic' => [ // 存储原始文档
'enabled' => 'true'
],
'properties' => [ //配置数据结构与类型
'goodsName' => [ //字段1
"type" => "string",
"analyzer" => "ik_max_word"
],
]
'properties' => $indexFields
],
],
]
......@@ -308,6 +304,39 @@ class ElasticsToolModel
return $res;
}
// public function createIkField($indexFild)
// {
// $params = [
// 'index' => $this->dbName, //索引名称
// 'body' => [
// 'settings' => [ //配置
// 'analysis' => array(
// 'analyzer' => array(
// 'ik' => [
// 'tokenizer' => 'ik_max_word',
// ]
// )
// ),
// ],
// 'mappings' => [ //映射
// $this->tbName => [ //默认配置,每个类型缺省的配置使用默认配置
// 'dynamic' => [ // 存储原始文档
// 'enabled' => 'true'
// ],
// 'properties' => [ //配置数据结构与类型
// 'goodsName' => [ //字段1
// "type" => "string",
// "analyzer" => "ik_max_word"
// ],
// ]
// ],
// ],
// ]
// ];
// $res = $this->client->indices()->create($params);
// return $res;
// }
//添加属性
public function putMappings($column)
{
......
......@@ -90,6 +90,10 @@ class CodeConfigModel {
const updateMobileMembmerMappingFailed = 10077;
const currentMobileHasBeenBind = 10078;
const otherDriverLogin=10105;
const emptyLog = 10106;
const writeLogFailed = 10107;
const wrongTimeForReadLog = 10108;
//访问错误
const illegalAccess=200001;
......@@ -745,7 +749,10 @@ class CodeConfigModel {
self::updateMobileMembmerMappingFailed => '更新手机号码对应会员mapping信息失败',
self::currentMobileHasBeenBind => '当前手机号码已经绑定其他微信,如需绑定,请先手机号码登录app进行微信解绑',
self::otherDriverLogin=>'当前用户已被其他设备登录,请重新登录',
self::elasticsError=>'全文索引连接出错'
self::elasticsError=>'全文索引连接出错',
self::emptyLog => '日志内容不能为空',
self::writeLogFailed => '日志写入失败',
self::wrongTimeForReadLog => '读日志时写入时间段查询开始时间不能大于结束时间'
);
}
......
......@@ -858,8 +858,12 @@ class LinkMySQLModel{
$where .= $this->getJointWhereByTwoArray($key, $value);
}
if (count($value) == 3) {
if($value[0]=='between'){
$where .= $this->getJointWhereByTwoArray($key, $value);
}else{
$where .= $this->getJointWhereBySecondArray($key, $value);
}
}
} else {
......@@ -926,10 +930,15 @@ class LinkMySQLModel{
public function getJointWhereByTwoArray($key, $array)
{
if (empty($array) || !$key || count($array) != 2 || $array[1] === '' || $array[1] === null) {
if(count($array)==3){
if(!($array[0]=='between'&&!(empty($array[1])&&empty($array[2]))&&$key)){
return false;
}
}else{
if (empty($array) || !$key ||( count($array) != 2)|| $array[1] === '' || $array[1] === null) {
return false;
}
}
$return = '';
$strArray = explode('|', $key);
$count = count($strArray);
......@@ -967,6 +976,9 @@ class LinkMySQLModel{
$return .= " {$value} not in('" . implode("','", $array[1]) . "')";
break;
case 'between':
$return .= " {$value} between '$array[1]' and '$array[2]' ";
break;
}
if ($k < $count - 1) $return .= " or ";
......
......@@ -9,10 +9,9 @@
</head>
<body>
<form action="/order/getOrders" method="post">
用户登录状态key:<input name="data[key]" value="ceb72deab920ac0edb7272b2ed9dfa1e"/><br />
订单状态id:<input name="data[orderState]" value=""/><br />
keyWord:<input name="data[keyword]" value=""/><br />
<p id="img_area"></p>
<input type="submit" value="提交">
</form>
......
......@@ -51,12 +51,12 @@ class cliShopkeeperOrders extends basecli
echo "*** Debug mode ***\n";
}
// Step: 02 检查是否已有相同CLI在运行中
$lockDir = $this->_getBaseFileName('shopkeeper');
$lockDir = $this->_getBaseFileName('create');
if (!$this->mkdirs($lockDir)) {
echo '****create dir fail ****';
exit;
}
$this->lockFileName = $lockDir . DS . 'orders.locks';
$this->lockFileName = $lockDir . DS . 'createIndex.locks';
if (file_exists($this->lockFileName)) {
$stat = stat($this->lockFileName);
if ((TIMESTAMP - $stat['mtime']) > 1800) {
......
......@@ -71,7 +71,7 @@ class cliShopkeeperOrders extends basecli
$shopkeeperService = \Business\Store\ShopkeeperServiceModel::getInstance();
$shopkeeperService->baseDir= \Our\Common::getConfig('out.config');
try {
$shopkeeperService->createOrdersIndex();
$shopkeeperService->growOrdersIndex();
} catch (\Exception $ex) {
throw new \Exception($ex->getMessage(),$ex->getCode());
......
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