Commit 42768e47 authored by wwccw0591's avatar wwccw0591

pc

parent 6d4fa08a
...@@ -30,6 +30,7 @@ class PathConst { ...@@ -30,6 +30,7 @@ class PathConst {
const cutVertical='|'; const cutVertical='|';
//统计store_member_statistic表最后更新时间 //统计store_member_statistic表最后更新时间
const orderGoodsCreateTime="/orderGoodsCreateTime.conf"; const orderGoodsCreateTime="/orderGoodsCreateTime.conf";
const orderLastCreateTime="/orderLastCreateTime.conf";
const favoritesStoreFavTimeConf="/favoritesStoreFavTime.conf"; const favoritesStoreFavTimeConf="/favoritesStoreFavTime.conf";
const orderPaymentTimeConf="/orderPaymentTime.conf"; const orderPaymentTimeConf="/orderPaymentTime.conf";
......
...@@ -240,7 +240,7 @@ class OrderServiceModel extends \Business\AbstractModel ...@@ -240,7 +240,7 @@ class OrderServiceModel extends \Business\AbstractModel
if($res){ if($res){
if ($memberId) { if ($memberId) {
$orderDao->deleteOrderCache($memberId, $orderId); $orderDao->deleteOrderCache($memberId, $orderId);
$memberDao->fromOrderStateToOrderState($memberId,$order['order_state'],ApiConst::orderStateCancel); // $memberDao->fromOrderStateToOrderState($memberId,$order['order_state'],ApiConst::orderStateCancel);
} }
} }
return $res; return $res;
......
...@@ -468,6 +468,52 @@ class ShopkeeperServiceModel extends \Business\AbstractModel ...@@ -468,6 +468,52 @@ class ShopkeeperServiceModel extends \Business\AbstractModel
}while($storeMemberStatisticData); }while($storeMemberStatisticData);
file_put_contents($this->baseDir . PathConst::orderGoodsCreateTime, TIMESTAMP); file_put_contents($this->baseDir . PathConst::orderGoodsCreateTime, TIMESTAMP);
}
//创建索引
public function createOrdersIndex()
{
$orderGoodDao=\DAO\Order\OrderGoodsModel::getInstance(DbNameConst::salveDBConnectName);
$orderDao=\DAO\Order\OrderModel::getInstance(DbNameConst::salveDBConnectName);
$gmtCreate = file_get_contents($this->baseDir . PathConst::orderLastCreateTime);
$gmtCreate = !empty($gmtCreate)?$gmtCreate:ApiConst::zero;
$beginTime=$gmtCreate;
$this->taskIndex=PageConst::taskPageBegin;
$this->taskSize=PageConst::taskPageSize;
do{
$addDatas=array();
$where['add_time']=Common::format(" add_time>={0} and add_time<",$beginTime,TIMESTAMP);
$orders=$orderDao->getList($where, $orderDao->_primaryKey, $this->taskIndex, $this->taskSize, $orderField = 'add_time', $sort = 'desc');
if(!empty($orders['list'])){
$orderIds=array_column($orders['list'],$orderDao->_primaryKey);
$resultOrders=array();
foreach($orders as $order){
}
}
$storeMemberStatisticData= $orderGoodDao->getMemberStoreStaticsByCreateTime($beginTime,$this->taskIndex,$this->taskSize);
$storeMemberStatisticData=isset($storeMemberStatisticData['list'])?$storeMemberStatisticData['list']:false;
if($storeMemberStatisticData){
$this->taskIndex++;
foreach($storeMemberStatisticData as $value){
$addDatas[$value['buyerId'].'-'.$value['storeId']]['storeId']=$value['storeId'];
$addDatas[$value['buyerId'].'-'.$value['storeId']]['memberId']=$value['buyerId'];
if(isset($addDatas[$value['buyerId'].'-'.$value['storeId']]['orderGoodsCount'])){
$addDatas[$value['buyerId'].'-'.$value['storeId']]['orderGoodsCount']+=$value['goodsNum'];
}else{
$addDatas[$value['buyerId'].'-'.$value['storeId']]['orderGoodsCount']=$value['goodsNum'];
}
if(isset($addDatas[$value['buyerId'].'-'.$value['storeId']]['orderTotal'])){
$addDatas[$value['buyerId'].'-'.$value['storeId']]['orderTotal']+=$value['goodsPrice'];
}else{
$addDatas[$value['buyerId'].'-'.$value['storeId']]['orderTotal']=$value['goodsPrice'];
}
}
}
$addDatas=array_values($addDatas);
$storeMemberStatisticDao->addAll($addDatas);
}while($orders);
file_put_contents($this->baseDir . PathConst::orderLastCreateTime, TIMESTAMP);
} }
public function reduceRefundModel($storeMemberDatas){ public function reduceRefundModel($storeMemberDatas){
$convertStoreMember=array(); $convertStoreMember=array();
......
...@@ -32,7 +32,7 @@ class OrderModel extends \DAO\AbstractModel ...@@ -32,7 +32,7 @@ class OrderModel extends \DAO\AbstractModel
* *
* @var string * @var string
*/ */
protected $_primaryKey = 'order_id'; public $_primaryKey = 'order_id';
public $errorMessage; public $errorMessage;
public function init() public function init()
...@@ -300,7 +300,7 @@ class OrderModel extends \DAO\AbstractModel ...@@ -300,7 +300,7 @@ class OrderModel extends \DAO\AbstractModel
$where = $this->db->getSqlWhereByArray($where); $where = $this->db->getSqlWhereByArray($where);
} }
$orders = $this->lists($where, $order, $field, $pageIndex, $pageSize); $orders = $this->lists($where, $order, $field, $pageIndex, $pageSize);
return $orders ? $orders : array(); return $orders['list'] ? $orders : array();
} }
//待收货获取订单状态信息 //待收货获取订单状态信息
......
<?php
namespace DAO\Storage;
use \Our\Common;
use Our\DbNameConst;
class GoodsCommonStorageModel extends \DAO\AbstractModel {
/**
* 表名
*
* @var string
*/
protected $_tableName = 'han_goods_common_storage;';
/**
* 主键
*
* @var string
*/
protected $_primaryKey = 'goods_commonid';
public function init(){
}
public function getOneById($goodsCommonId){
$this->setDb();
return $this->db->select('*')->from($this->_tableName)->where(array('goods_commonid'=>$goodsCommonId))->fetchOne();
}
/**
* 商品列表
* @param $where
* @param $field
* @param bool $limit
* @param array $order
* @return mixed
*/
public function getGoodsList($where,$field,$limit=array(),$order=array(),$attrStr=''){
$this->setDb();
$str = '$data = $this->db->select($field)->from($this->_tableName)';
if($attrStr){
$str .="->join('han_goods_attribute_value','han_goods_attribute_value.goods_commonid = han_goods_common.goods_commonid')";
$str .='->where($attrStr)';
}
foreach ($where as $v){
$str .= '->where("'.$v.'")';
}
$str .="->where('goods_verify = 1')->where('goods_state = 1')";
if($limit){
$str .= "->limit({$limit[0]},{$limit[1]})";
}
if($order){
foreach ($order as $v){
$str .= "->order('{$v[0]}','{$v[1]}')";
}
}
$str .= "->fetchAll();";
eval($str);
return $data;
}
public function getAll(){
$this->setDb($this->dbName);
$res=$this->db->fetchAll();
return $res;
}
public function createTestData(){
$res =$this->getAll();
echo json_encode($res);exit;
}
/**
* 商品列表(需要获取销售价格)
* @param $where
* @param $field
* @param $actIds
* @param bool $limit
* @param array $order
* @return mixed
*/
public function getListWithSale($where,$field,$actIds,$limit=array(),$order=array(),$attrStr='',$online = true){
$this->setDb();
$str = "select ".$field." FROM ".$this->_tableName." LEFT JOIN (SELECT MIN(discount_price) discount_price,goods_commonid,goods_id FROM han_sale_goods where sale_act_id in(".implode(',',$actIds).") GROUP BY goods_commonid) a on (han_goods_common.goods_commonid = a.goods_commonid)";
if($attrStr){
$str .= "INNER JOIN han_goods_attribute_value ON han_goods_attribute_value.goods_commonid = han_goods_common.goods_commonid ";
// $str .="->join('han_goods_attribute_value','han_goods_attribute_value.goods_commonid = han_goods_common.goods_commonid')";
// $str .='->where($attrStr)';
}
$str .= 'where ';
if($online){
$str .=" (goods_verify = 1) AND (goods_state = 1) AND ";
}
$str .= '('.implode(') AND (',$where).')';
if($attrStr){
$str .= "AND {$attrStr}";
}
if($order){
$str .= " ORDER BY ";
foreach ($order as $v){
$str .= "{$v[0]} {$v[1]},";
}
$str = rtrim($str,",");
}
if($limit){
$str .=" limit {$limit[0]},{$limit[1]}";
}
$data = $this->db->query($str);
return $data->rows;
}
/**
* 获取优惠券对应商品列表(指定品类)
* @param $where
* @param $field
* @param $limit
* @return mixed
*/
// public function getCouponClassGoods($where,$field,$limit){
// $this->setDb();
// return $this->db->select($field)->from($this->_tableName)->join('han_store_coupon_goods_class','han_store_coupon_goods_class.gc_id = '.$this->_tableName.'.gc_id_1','inner')->where($where)->where('goods_verify = 1')->where('goods_state = 1')->limit($limit[0],$limit[1])->fetchAll();
// }
/**
* 获取优惠券对应商品列表(指定品类)(需要获取销售价格)
* @param $where
* @param $field
* @param $limit
* @param $actIds
*/
// public function getCouponClassGoodsWithSale($where,$field,$limit,$actIds){
// $this->setDb();
// $str = "select ".$field." FROM ".$this->_tableName." INNER JOIN han_store_coupon_goods_class on han_store_coupon_goods_class.gc_id = han_goods_common.gc_id_1 LEFT JOIN (SELECT MIN(discount_price) discount_price,goods_commonid,goods_id FROM han_sale_goods where sale_act_id in(".implode(',',$actIds).") GROUP BY goods_commonid) a on (han_goods_common.goods_commonid = a.goods_commonid) ";
// $str .= 'where(goods_verify = 1) AND (goods_state = 1) AND ';
// $str .= $where;
// $str .=" limit {$limit[0]},{$limit[1]}";
// $data = $this->db->query($str);
// return $data->rows;
// }
/**
* 获取优惠券对应商品列表(指定商品)
* @param $where
* @param $field
* @param $limit
* @return mixed
*/
// public function getCouponGoods($where,$field,$limit){
// $this->setDb();
// return $this->db->select($field)->from($this->_tableName)->join('han_store_coupon_goods','han_store_coupon_goods.goods_commonid = '.$this->_tableName.'.goods_commonid','inner')->where($where)->where('goods_verify = 1')->where('goods_state = 1')->limit($limit[0],$limit[1])->fetchAll();
// }
/**
* 获取优惠券对应商品列表(指定商品)(需要获取销售价格)
* @param $where
* @param $field
* @param $limit
* @param $actIds
*/
// public function getCouponGoodsWithSale($where,$field,$limit,$actIds){
// $this->setDb();
// $str = "select ".$field." FROM ".$this->_tableName." INNER JOIN han_store_coupon_goods on han_store_coupon_goods.goods_commonid = han_goods_common.goods_commonid LEFT JOIN (SELECT MIN(discount_price) discount_price,goods_commonid,goods_id FROM han_sale_goods where sale_act_id in(".implode(',',$actIds).") GROUP BY goods_commonid) a on (han_goods_common.goods_commonid = a.goods_commonid) ";
// $str .= 'where(goods_verify = 1) AND (goods_state = 1) AND ';
// $str .= $where;
// $str .=" limit {$limit[0]},{$limit[1]}";
// $data = $this->db->query($str);
// return $data->rows;
// }
/**
* 获取商品评分
* @param $StoreId
* @return mixed
*/
public function getGrade($goodsCommonId,$commonInfo = null){
$statisticsDb6Redis = \Redis\Db6\StatisticsRedisModel::getInstance();
$grade = $statisticsDb6Redis->tableHGet('goodsCommon',$goodsCommonId);
if($grade === false){
if(!$commonInfo){
$goodsScoreDAO = \DAO\GoodsScoreStatisticsModel::getInstance();
$commonInfo = \Our\RedisHelper::cachedFunction(\Redis\Db4\GoodsScoreStatisticsRedisModel::getInstance(),array(&$goodsScoreDAO, 'getOne'),array('*',array('goods_commonid'=>$goodsCommonId)),\Our\ApiConst::oneDaySecond,array($goodsCommonId));
if($commonInfo === false){
$commonInfo['evaluation_number'] = 0;
$commonInfo['evaluation_img_number'] = 0;
$commonInfo['evaluation_score'] = 0;
}
}
$grade = array();
$grade['evaluation_score'] = $commonInfo['evaluation_score'];
$grade['evaluation_number'] = $commonInfo['evaluation_number'];
$grade['evaluation_img_number'] = $commonInfo['evaluation_img_number'];
$statisticsDb6Redis->tableHSet('goodsCommon',$goodsCommonId,serialize($grade));
return $grade;
}
return unserialize($grade);
}
/**
* 获取图片oss路径
* @param $goodsImg 图片名
* @param $type 图片尺寸
* @return mixed|string
*/
public function getGoodsImgSrc($goodsImg,$type=240){
if(!in_array($type,\Our\ArrayConst::goodsImageExt)){
$type = 240;
}
if (empty($goodsImg)) {
$directory =\Our\ImageConst::defaultPath;
$goodsImg = str_ireplace('.', '_' . $type . '.', 'default_goods_image.jpg');
}else{
$storeId = substr ( $goodsImg, 0, strpos ( $goodsImg, '_' ) );
$directory = \Our\ImageConst::goods.$storeId.'/';
$goodsImg = str_ireplace('.', '_' . $type . '.', $goodsImg);
}
$goodsImg = Common::getStaticFile($goodsImg,$directory,'ossHost');
return $goodsImg;
}
/**
* 商品详情处理
* @param $mobileBody
* @return string
*/
public function getMobileBody($mobileBody){
$mobile_body_array = unserialize($mobileBody);
if (is_array($mobile_body_array)) {
$mobile_body = '';
foreach ($mobile_body_array as $val) {
switch ($val['type']) {
case 'text':
$mobile_body .= '<div>' . $val['value'] . '</div>';
break;
case 'image':
$mobile_body .= '<img src="' . $val['value'] . '">';
break;
}
}
return $mobile_body;
}
}
public function getCount($where,$attrStr=''){
$this->setDb();
if($attrStr){
return $this->db->from($this->_tableName)->join('han_goods_attribute_value','han_goods_attribute_value.goods_commonid = han_goods_common.goods_commonid')->where($where)->where($attrStr)->fetchNum();
}
return $this->db->from($this->_tableName)->where($where)->fetchNum();
}
/**
* 获取分享信息
* @param $commonInfo
* @param $store_share_desc 店铺分享简介
* @return mixed
* @throws \Exception
* @throws \OSS\Core\OssException
* @throws \Our\Exception
*/
public function getShareInfo($commonInfo,$store_share_desc){
if(!is_array($commonInfo)){
$commonInfo = \Our\RedisHelper::cachedFunction(\Redis\Db4\GoodsCommonRedisModel::getInstance(),array(&$this, 'getOneById'),array($commonInfo),0,array($commonInfo));
if(!$commonInfo){
\Error\ErrorModel::throwException(\Error\CodeConfigModel::goodsNotExist);
}
}
$share['title'] = $commonInfo['goods_name']?$commonInfo['goods_name']:$commonInfo['goods_jingle'];
$share['desc'] = $commonInfo['goods_jingle']?$commonInfo['goods_jingle']:$store_share_desc;
$share['link']='http://www.shenbd.com';
$share['imgUrl'] = \Our\ImageUtil::getGoodsImgUrl($commonInfo['goods_image']);
return $share;
}
public function updateAll($datas){
}
public function updateGoodsStorage($dataList){
$datas = array_values($dataList);
$this->setDb(\Our\DbNameConst::masterDBConnectName);
$error = 0;
$baseSql = "UPDATE {$this->_tableName} set goods_storage = case goods_commonid ";
$updateAllSql = $baseSql;
$dataIds = array();
for ($i = 0; $i < count($datas); $i++) {
$updateSql = \Our\Common::format(" WHEN {0} THEN goods_storage-{1} ", $datas[$i]['goodsCommonId'], $datas[$i]['goodsNum']);
$dataIds[] = $datas[$i]['goodsCommonId'];
$updateAllSql .= $updateSql;
if ($i % 1000 == 0 && $i != 0) {
$updateAllSql .= \Our\Common::format('END where goods_commonid in ({0})',implode(',',$dataIds));
$one = $this->db->update($this->_tableName)->query($updateAllSql);
if (!$one) {
$error++;
}
$updateAllSql = $baseSql;
$dataIds = array();
}
}
if ($updateAllSql != $baseSql) {
$updateAllSql .= \Our\Common::format('END where goods_commonid in ({0})',implode(',',$dataIds));
$one = $this->db->update($this->_tableName)->query($updateAllSql);
if (!$one) {
$error++;
}
}
if ($error > 0) {
return false;
}
return true;
}
/**
* 类实例
*
* @var \DAO\UserModel
*/
private static $_instance = null;
/**
* 获取类实例
*
* @return \DAO\UserModel
*/
public static function getInstance() {
if (!(self::$_instance instanceof self)) {
self::$_instance = new self();
}
return self::$_instance;
}
}
<?php
namespace DAO\Storage;
class GoodsImagesStorageModel extends \DAO\AbstractModel {
/**
* 表名
*
* @var string
*/
protected $_tableName = 'han_goods_images_storage';
/**
* 主键
*
* @var string
*/
protected $_primaryKey = 'goods_image_id';
public function init(){
}
public function getListByCommonId($goodsCommonId,$field){
$this->setDb();
return $this->db->select($field)->from($this->_tableName)->where(array('goods_commonid'=>$goodsCommonId))->fetchAll();
}
/**
* 类实例
*
* @var \DAO\UserModel
*/
private static $_instance = null;
/**
* 获取类实例
*
* @return \DAO\UserModel
*/
public static function getInstance() {
if (!(self::$_instance instanceof self)) {
self::$_instance = new self();
}
return self::$_instance;
}
}
<?php
namespace DAO\Storage;
use Our\ApiConst;
use Our\Common;
use Our\CommonExtension;
class GoodsStorageModel extends \DAO\AbstractModel {
public $errorCode;
/**
* 表名
*
* @var string
*/
protected $_tableName = 'han_goods_storage';
private $cartGoodsField = 'goods_id,goods_storage,store_id,goods_commonid,goods_name,goods_image,goods_spec,snapshot_id';
/**
* 主键
*
* @var string
*/
protected $_primaryKey = 'goods_id';
public function init(){
}
public function getList($where,$field){
$this->setDb();
return $this->db->select($field)->from($this->_tableName)->where($where)->fetchAll();
}
// public function getOneById($id){
// $this->setDb();
// return $this->db->select('goods_id,goods_commonid,goods_price,goods_marketprice,goods_image,goods_storage,goods_spec')->from($this->_tableName)->where(array('goods_id'=>$id))->fetchOne();
// }
public function find($where,$field = \Our\NameConst::allField){
$this->setDb($this->dbName);
$result = $this->db->select($field)->from($this->_tableName)->where($where)->fetchOne();
return $result;
}
/**
* 获取在线商品列表
* @param $where
* @param string $field
* @return mixed
*/
public function getOnlineList($where,$field = \Our\NameConst::allField){
$whereSql = ' goods_state ='.\Our\ApiConst::onlineGoodsState.' and goods_verify='.\Our\ApiConst::onlineGoodsVerify;
if($where){
$whereSql .= ' and '.$where;
}
return $this->getList($whereSql,$field);
}
public function getOnlineOne($goodsId,$field= \Our\NameConst::allField){
$where['goods_state'] = \Our\ApiConst::onlineGoodsState;
$where['goods_verify'] = \Our\ApiConst::onlineGoodsVerify;
$where['goods_id'] = $goodsId;
$goods = \Our\RedisHelper::cachedFunction(\Redis\Db4\GoodsRedisModel::getInstance(),array(&$this, 'find'),array($where,$field),\Our\ApiConst::oneHour,array($goodsId));
return $goods;
}
public function validAddCartGoods($where,$storageFlag = false){
$goods = $this->getOnlineOne($where['goodsId'],$this->cartGoodsField);
if(!$goods){
$this->errorCode = \Error\CodeConfigModel::offlineGoodsOrNotExist;
return false;
}
if($goods['goods_storage']<$where['goodsNum']&&$storageFlag){
$this->errorCode = \Error\CodeConfigModel::noStorageForCart;
return false;
}
return $goods;
}
public function validAddCartGoodsList($goodsIds,$storageFlag = false){
$whereSql = \Our\Common::format(' goods_id in ({0})',implode(',',$goodsIds));
$goodsList = $this->getOnlineList($whereSql,$this->cartGoodsField);
if(!($goodsList&&count($goodsIds)==count($goodsList))){
$this->errorCode = \Error\CodeConfigModel::offlineGoodsListOrNotExist;
return false;
}
foreach($goodsList as $goods){
if($goods['goods_storage']<\Our\ApiConst::one&&$storageFlag){
$this->errorCode = \Error\CodeConfigModel::goodsListNoStorage;
return false;
}
}
return $goodsList;
}
public function validEditCartGoods($where,$cart,$storageFlag = true){
$goods = $this->getOnlineOne($where['goodsId']);
if($goods['goods_commonid'] != $cart['goods_commonid']){
$this->errorCode = \Error\CodeConfigModel::wrongGoodsForEditGoods;
return false;
}
if(!$goods){
$this->errorCode = \Error\CodeConfigModel::offlineGoodsOrNotExist;
return false;
}
if($goods['goods_storage']<$where['goodsNum']&&$storageFlag){
$this->errorCode = \Error\CodeConfigModel::noStorageForCart;
return false;
}
return true;
}
/**
* 获取商品是否在售,如果在售还返回对应库存信息
* @param $goodsId
*/
public function getOnlineStorageGoods($goodsId){
$goodsRedis = \Redis\Db4\GoodsRedisModel::getInstance();
$onlineStorageGoodsKey = \Our\NameConst::onlineStorageGoodsPrefix.$goodsId;
$onlineStorageGoods = $goodsRedis->tableHGAll($onlineStorageGoodsKey);
if($onlineStorageGoods){
return $onlineStorageGoods;
}else{
$where['goods_state'] = \Our\ApiConst::onlineGoodsState;
$where['goods_verify'] = \Our\ApiConst::onlineGoodsVerify;
$where['goods_id'] = $goodsId;
$goods = $this->find($where,'goods_storage');
if($goods){
$data = array('onlineFlag'=>\Our\ApiConst::one,'goodsStorage'=>$goods['goods_storage']);
}else{
$data = array('onlineFlag'=>\Our\ApiConst::zero,'goodsStorage'=>$goods['goods_storage']);
}
$goodsRedis->tableHMGet($onlineStorageGoodsKey,$data,\Our\ApiConst::tenDaySecond);
return $data;
}
}
/**
* 更新商品缓存
* @param $goodsList 商品列表
* @param int $op 删减标识符(1:增加,0:减少,2:直接设置)
* @return bool
*/
public function opOnlineStorageGoodsByGoodsCommonIds($goodsList,$op = \Our\ApiConst::minus){
$goodsRedis = \Redis\Db4\GoodsRedisModel::getInstance();
$goodsCommonList = $this->getOnlineStorageGoodsByGoodsCommonIds(array_keys($goodsList));
foreach($goodsCommonList as $goodsCommonId=>$goodsCommonsTemp){
$newGoodsList = array();
foreach($goodsCommonsTemp as $goodsId=>$temp){
if($goodsList[$goodsCommonId][$goodsId]&&$goodsList[$goodsCommonId][$goodsId]['goodsNum']>\Our\ApiConst::zero){
if($op == \Our\ApiConst::minus&&$temp['goodsStorage']>=$goodsList[$goodsCommonId][$goodsId]['goodsNum']){
$temp['goodsStorage'] -= $goodsList[$goodsCommonId][$goodsId]['goodsNum'];
}else if($op == \Our\ApiConst::plus){
$temp['goodsStorage'] += $goodsList[$goodsCommonId][$goodsId]['goodsNum'];
}else if($op == \Our\ApiConst::set){
$temp['goodsStorage'] = $goodsList[$goodsCommonId][$goodsId]['goodsNum'];
}else{
return false;
}
}
$newGoodsList[$goodsId]= serialize($temp);
}
if($newGoodsList){
$onlineStorageGoodsKey = \Our\NameConst::onlineStorageGoodsPrefix.$goodsCommonId;
$result = $goodsRedis->tableHMSet($onlineStorageGoodsKey,$newGoodsList,\Our\ApiConst::tenDaySecond);
if(!$result){
return false;
}
}
}
return true;
}
/**
* 根据商品CommonId获取库存信息
* @param $goodsCommonIds
* @return mixed
*/
public function getOnlineStorageGoodsByGoodsCommonIds($goodsCommonIds,$fromCart= false){
$goodsRedis = \Redis\Db4\GoodsRedisModel::getInstance();
$noRedisGoodsCommonIds= array();
foreach($goodsCommonIds as $goodsCommonId){
$onlineStorageGoodsKey = \Our\NameConst::onlineStorageGoodsPrefix.$goodsCommonId;
$onlineStorageGoods = $goodsRedis->tableHGAll($onlineStorageGoodsKey);
if($onlineStorageGoods){
foreach($onlineStorageGoods as $key=>&$value){
$value = unserialize($value);
}
$returnData[$goodsCommonId] = $onlineStorageGoods;
}else{
$noRedisGoodsCommonIds[]= $goodsCommonId;
}
}
if($fromCart){
$sql = \Our\Common::format(' goods_commonid in ({0})',implode(',',$goodsCommonIds));
$field = 'goods_commonid,goods_id,goods_storage,goods_state,goods_verify,is_transport,transport_id,gc_id,gc_id_1,gc_id_2,gc_id_3,snapshot_id,goods_image,goods_freight,goods_free';
}else if($noRedisGoodsCommonIds){
$sql = \Our\Common::format(' goods_commonid in ({0})',implode(',',$noRedisGoodsCommonIds));
$field = 'goods_commonid,goods_id,goods_storage,goods_state,goods_verify';
}
if($sql&&$field){
$goodsArray = $this->getList($sql,$field);
$goodsCommonList = array();
$goodsList = array();
if($goodsArray){
foreach($goodsArray as $goods){
$goodsCommonList[$goods['goods_commonid']][] = $goods['goods_id'];
$goodsList[$goods['goods_id']] = $goods;
}
}
if($noRedisGoodsCommonIds){
foreach($noRedisGoodsCommonIds as $goodsCommonId){
if(isset($goodsCommonList[$goodsCommonId])){
$goodsCommon = array();
$goodsArr = array();
foreach($goodsCommonList[$goodsCommonId] as $goodsId){
$goods = $goodsList[$goodsId];
$data = array('goodsStorage'=>$goods['goods_storage']);
if($goods['goods_state']==\Our\ApiConst::onlineGoodsState&&$goods['goods_verify']==\Our\ApiConst::onlineGoodsVerify){
$data['onlineFlag'] = \Our\ApiConst::one;
}else{
$data['onlineFlag'] = \Our\ApiConst::zero;
}
$goodsArr[$goodsId] = serialize($data);
$goodsCommon[$goodsId] = $data;
}
$onlineStorageGoodsKey = \Our\NameConst::onlineStorageGoodsPrefix.$goodsCommonId;
$result = $goodsRedis->tableHMSet($onlineStorageGoodsKey,$goodsArr,\Our\ApiConst::tenDaySecond);
$returnData[$goodsCommonId] = $goodsCommon;
}
}
}
if($fromCart){
foreach($goodsList as $temp){
if(isset($returnData[$temp['goods_commonid']]['is_transport'])){
continue;
}
$returnData[$temp['goods_commonid']]['is_transport'] = $temp['is_transport'];
$returnData[$temp['goods_commonid']]['transport_id'] = $temp['transport_id'];
$returnData[$temp['goods_commonid']]['goods_freight'] = $temp['goods_freight'];
$returnData[$temp['goods_commonid']]['goods_free'] = $temp['goods_free'];
$returnData[$temp['goods_commonid']]['gcId'] = $temp['gc_id_1'];
$returnData[$temp['goods_commonid']]['gc_id'] = $temp['gc_id'];
$returnData[$temp['goods_commonid']]['gc_id_2'] = $temp['gc_id_2'];
$returnData[$temp['goods_commonid']]['gc_id_3'] = $temp['gc_id_3'];
$returnData[$temp['goods_commonid']]['snapshot_id'] = (isset($temp['snapshot_id'])&&$temp['snapshot_id']>\Our\ApiConst::zero)?$temp['snapshot_id']:\Our\ApiConst::zero;
}
}
}
return $returnData;
}
public function getListAndSetStorage($goodsCommonId,$field){
$goodsList = $this->getList(array('goods_commonid'=>$goodsCommonId),$field);
if($goodsList && is_array($goodsList)){
$data = [];
$goodsRedis = \Redis\Db4\GoodsRedisModel::getInstance();
$onlineStorageGoodsKey = \Our\NameConst::onlineStorageGoodsPrefix.$goodsCommonId;
$onlineStorageGoods = $goodsRedis->tableHGAll($onlineStorageGoodsKey);
if(empty($onlineStorageGoods)){
foreach ($goodsList as $key => $goods){
$onlineFlag = \Our\ApiConst::zero;
if($goods['goods_state'] == \Our\ApiConst::onlineGoodsState && $goods['goods_verify'] == \Our\ApiConst::onlineGoodsVerify){
$onlineFlag = \Our\ApiConst::one;
}
unset($goodsList[$key]['goods_state']);
unset($goodsList[$key]['goods_verify']);
$data[$goods['goods_id']] = serialize(array('onlineFlag'=>$onlineFlag,'goodsStorage'=>$goods['goods_storage']));
}
$goodsRedis->tableHMSet($onlineStorageGoodsKey,$data,\Our\ApiConst::tenDaySecond);
}else{
foreach ($goodsList as $key => $goods){
unset($goodsList[$key]['goods_state']);
unset($goodsList[$key]['goods_verify']);
}
}
}
return $goodsList;
}
public function updateGoodsStorage($dataList){
$datas = array_values($dataList);
$this->setDb(\Our\DbNameConst::masterDBConnectName);
$error = 0;
$baseSql = "UPDATE {$this->_tableName} set goods_storage = case goods_id ";
$updateAllSql = $baseSql;
$dataIds = array();
for ($i = 0; $i < count($datas); $i++) {
$updateSql = \Our\Common::format(" WHEN {0} THEN goods_storage-{1} ", $datas[$i]['goodsId'], $datas[$i]['goodsNum']);
$dataIds[] = $datas[$i]['goodsId'];
$updateAllSql .= $updateSql;
if ($i % 1000 == 0 && $i != 0) {
$updateAllSql .= \Our\Common::format('END where goods_id in ({0})',implode(',',$dataIds));
$one = $this->db->update($this->_tableName)->query($updateAllSql);
if (!$one) {
$error++;
}
$updateAllSql = $baseSql;
$dataIds = array();
}
}
if ($updateAllSql != $baseSql) {
$updateAllSql .= \Our\Common::format('END where goods_id in ({0})',implode(',',$dataIds));
$one = $this->db->update($this->_tableName)->query($updateAllSql);
if (!$one) {
$error++;
}
}
if ($error > 0) {
return false;
}
return true;
}
/**
* 获取格式化的规格值
* @param $goodsSpecStr
* @return array
*/
public function getFormatGoodsAttr($goodsSpecStr){
$goodsAttr = array();
if(!empty($goodsSpecStr)){
$goodsSpec = unserialize($goodsSpecStr);
if($goodsSpec){
if (is_array($goodsSpec) && count($goodsSpec) > 0) {
$goodsAttr = array();
foreach ($goodsSpec as $key => $value) {
$attr['attrName'] = (string)$key;
$attr['attrValue'] = $value;
$goodsAttr[] = $attr;
}
}
}
}
return $goodsAttr;
}
/**
* 类实例
*/
private static $_instance = null;
/**
* 获取类实例
*/
public static function getInstance($dbName=\Our\DbNameConst::salveDBConnectName) {
if (!(self::$_instance instanceof self)) {
self::$_instance = new self($dbName);
}
return self::$_instance;
}
public function getGoodsGroup($goodsGroup){
$orderGoodses=array();
if(!empty($goodsGroup)){
$goodsGroup=unserialize($goodsGroup);
$goodsGroup=json_decode(json_encode($goodsGroup),true);
foreach($goodsGroup as $orderGoods){
if(isset($orderGoods['goodsSpec'])){
unset($orderGoods['goodsSpec']);
}
$orderGoods['goodsImage']=\Our\ImageUtil::getGoodsImgUrl($orderGoods['goodsImagePath'],\Our\ImageConst::goods);
unset($orderGoods['goodsImagePath']);
array_push($orderGoodses,$orderGoods);
}
}
return $orderGoodses;
}
//ccw
public function convert($goodses,$extentField=false){
foreach($goodses as &$goods){
if($goods['refundId']==ApiConst::zero){
if((!empty($extentField) || empty($goods['refundStateName'])) ){
$goods['refundStateName']=$extentField;
}
}
$goods['goodsImage']=\Our\ImageUtil::getGoodsImgUrl($goods['goodsImage'],\Our\ApiConst::goodsSmallSize);
if($goods['goodsSpec']){
$goods['goodsAttr'] = $this->getFormatGoodsAttr($goods['goodsSpec']);
}else{
$goods['goodsAttr']=array();
}
if(isset($goods['refundStateName'])){
$goods['refundStateName']= $goods['refundStateName']? $goods['refundStateName']:'';
}
unset($goods['goodsSpec']);
if(isset($goods['goodsGroup'])&&!empty($goods['goodsGroup'])){
$goods['goodsGroup']=$this->getGoodsGroup($goods['goodsGroup']);
}else{
$goods['goodsGroup']=array();
}
}
return $goodses;
}
}
<?php
/**
* 生成店铺订单索引
* 执行时间:每分钟执行一次
*
* @author chenjiebin <sjlinyu@qq.com>
*/
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 cliGrow extends basecli
{
const CLI_ADMIN_ID = 255;
private $bDoUnLock = FALSE; // 是否允许释放 LOCK 文件
private $_debug = 0;
private $lockFileName;
public $key='';
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 _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('shopkeeper');
if (!$this->mkdirs($lockDir)) {
echo '****create dir fail ****';
exit;
}
$this->lockFileName = $lockDir . DS . 'grow.locks';
if (file_exists($this->lockFileName)) {
$stat = stat($this->lockFileName);
if ((TIMESTAMP - $stat['mtime']) > 1800) {
echo "文件被锁超过1800秒,被强制删除";
@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 独占锁
$goodsCommonStrorageDao = \DAO\Storage\GoodsCommonStorageModel::getInstance();
$goodsStorageDao = \DAO\Storage\GoodsStorageModel::getInstance();
$goodsImagesStorageDao = \DAO\Storage\GoodsImagesStorageModel::getInstance();
try {
$goodsCommonStrorageDao->createTestData();
} catch (Exception $ex) {
throw new Exception($ex->getCode() . '|' . $ex->getMessage());
}
echo '店铺订单索引生成成功' .date('Y-m-d H:i:s',TIMESTAMP). "\r\n";
}
}
$oCli = new cliGrow(TRUE);
EXIT;
?>
<?php
/**
* 生成店铺订单索引
* 执行时间:每分钟执行一次
*
* @author chenjiebin <sjlinyu@qq.com>
*/
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 cliShopkeeperOrders extends basecli
{
const CLI_ADMIN_ID = 255;
private $bDoUnLock = FALSE; // 是否允许释放 LOCK 文件
private $_debug = 0;
private $lockFileName;
public $key='';
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 _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('shopkeeper');
if (!$this->mkdirs($lockDir)) {
echo '****create dir fail ****';
exit;
}
$this->lockFileName = $lockDir . DS . 'orders.locks';
if (file_exists($this->lockFileName)) {
$stat = stat($this->lockFileName);
if ((TIMESTAMP - $stat['mtime']) > 1800) {
echo "文件被锁超过1800秒,被强制删除";
@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 独占锁
$shopkeeperService = \Business\Store\ShopkeeperServiceModel::getInstance();
$shopkeeperService->baseDir= \Our\Common::getConfig('out.config');
try {
$shopkeeperService->createOrdersIndex();
} catch (Exception $ex) {
throw new Exception($ex->getCode() . '|' . $ex->getMessage());
}
echo '店铺订单索引生成成功' .date('Y-m-d H:i:s',TIMESTAMP). "\r\n";
}
}
$oCli = new cliShopkeeperOrders(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