Commit ab2a7568 authored by liuyuzhen's avatar liuyuzhen

修改库存更新方式

parent dfe6af5c
......@@ -913,7 +913,8 @@ class OrderConfirmUtil {
\Our\RedisHelper::delCachedFunction(\Redis\Db4\PBundlingRedisModel::getInstance(),array(&$pbundlingInstance, 'getList'),array(),array($storeId));
}
}
$this->updateGoodsStorageToDBAndCache($goodsCommonIds,$goodsIds,$blIds,$goodsNewList,$op,$updateSaleNumFlag);
//$this->updateGoodsStorageToDBAndCache($goodsCommonIds,$goodsIds,$blIds,$goodsNewList,$op,$updateSaleNumFlag);
$this->updateGoodsStorageToCache($goodsCommonIds,$goodsIds,$blIds,$goodsNewList,$op,$updateSaleNumFlag);
return true;
}
......@@ -953,6 +954,9 @@ class OrderConfirmUtil {
return true;
}
/**
* 更新库存信息到缓存
* @param $goodsCommons
......@@ -974,7 +978,7 @@ class OrderConfirmUtil {
if($pBundlingCacheResult===false){
\Error\ErrorModel::throwException(\Error\CodeConfigModel::blGoodsStorageToCacheFailedForOrder);
}
$pBundlingDao->addChangedPBundlingStorage(array('bl_id'=>$key,'bl_storage'=>$blGoods['blStorage'],'op'=>$op));
$pBundlingDao->addChangedPBundlingStorage(serialize(array('bl_id'=>$key,'bl_storage'=>$blGoods['blStorage'],'op'=>$op)));
}
}
if($goodsCommons&&$goodsList){
......@@ -983,6 +987,7 @@ class OrderConfirmUtil {
\Error\ErrorModel::throwException(\Error\CodeConfigModel::goodsStorageToCacheFailedForOrder);
}
}
\Our\Common::redisPublish('\Business\Goods\GoodsCommonServiceModel','updateAllStorageForPublish',array());
return true;
}
/**
......
......@@ -1463,6 +1463,47 @@ class GoodsCommonServiceModel extends \Business\AbstractModel
/**
* 更新从缓存链表中更新商品库存
* @return bool
*/
public function updateGoodsStorageByRedisList(){
$goodsModel = \DAO\GoodsModel::getInstance();
for($i=0;$i<2000;$i++){
$goodsStr = $goodsModel->getChangedGoodsStorage();
\Our\Log::getInstance()->write($goodsStr,'/data/log/apptest');
if($goodsStr){
$goods = unserialize($goodsStr);
$goodsModel->setDb(\Our\DbNameConst::masterDBConnectName);
$goodsModel->db->doTransaction();
$goodsUpdateResult = $goodsModel->updateStorageByRedis($goods);
if(!$goodsUpdateResult){
$goodsModel->db->doRollback();
}
$goodsCommonUpdateResult = \DAO\GoodsCommonModel::getInstance()->updateStorageByRedis($goods);
if(!$goodsCommonUpdateResult){
$goodsModel->db->doRollback();
}
$goodsModel->db->doCommit();
}else{
break;
}
}
return true;
}
/**
* 更新所有商品库存
* @return bool
*/
public function updateAllStorageForPublish(){
\Our\Log::getInstance()->write('1执行失败','/data/log/apptest');
$this->updateGoodsStorageByRedisList();
\Our\Log::getInstance()->write('2执行失败','/data/log/apptest');
\DAO\PBundlingModel::getInstance()->updateStorageByRedisList();
return true;
}
private static $_instance = null;
......
......@@ -39,7 +39,7 @@ class GoodsModel extends \DAO\AbstractModel {
* @return mixed
*/
public function updateStorage($goodsId, $num, $op) {
$this->setDb();
$this->setDb(\Our\DbNameConst::masterDBConnectName);
$whereSql = 'goods_id='.$goodsId;
if($op==1){ //调整库存
$updateSql = 'goods_storage = goods_storage'.($num<0 ? '-'.(-$num) : '+'.$num);
......@@ -51,6 +51,26 @@ class GoodsModel extends \DAO\AbstractModel {
return $this->db->update($this->_tableName)->query($updateAllSql);
}
public function updateStorageByRedis($goods){
$this->setDb(\Our\DbNameConst::masterDBConnectName);
$sql = 'UPDATE '.$this->_tableName.' set goods_edittime = '.TIMESTAMP.',goods_storage = ';
if($goods['op']==\Our\ApiConst::set){
$sql .= $goods['goods_storage'] ;
}else{
$sql .= 'goods_storage '.\Our\ArrayConst::ops[$goods['op']].$goods['goods_storage'] ;
/*if($goods['sale_num']){
$sql .= ' sale'
}*/
}
$sql .= ' where goods_id = '.$goods['goods_id'];
\Our\Log::getInstance()->write($sql.' 执行失败','/data/log/apptest');
$result = $this->db->update($this->_tableName)->query($sql);
if($result===false){
\Our\Log::getInstance()->write($sql.' 执行失败');
}
return $result;
}
/**
*
* 分页获取商品列表
......@@ -201,6 +221,25 @@ class GoodsModel extends \DAO\AbstractModel {
}
}*/
/**
* 更新需要更新缓存的链表
* @param $pBundling
*/
public function addChangedGoodsStorage($pBundling){
$goodsRedisDao = \Redis\Db4\GoodsRedisModel::getInstance();
$goodsRedisDao->tableLPush(\Our\NameConst::changedGoodsStoragePrefix,$pBundling);
}
/**
* 获取需要更新缓存的链表数据
*/
public function getChangedGoodsStorage(){
$goodsRedisDao = \Redis\Db4\GoodsRedisModel::getInstance();
return $goodsRedisDao->tableLPop(\Our\NameConst::changedGoodsStoragePrefix);
}
/**
* 更新商品库存缓存以及更新销量
* @param $goodsList 商品列表
......@@ -235,8 +274,19 @@ class GoodsModel extends \DAO\AbstractModel {
return false;
}
$totalGoodsNum += $goodsList[$goodsCommonId][$goodsId]['goodsNum'];
$updateGoods = array(
'goods_id'=>$goodsId,
'goods_commonid'=>$goodsCommonId,
'goods_storage'=>$goodsList[$goodsCommonId][$goodsId]['goodsNum'],
'op'=>$op
);
if($updateSaleNumFalg&&$op!=\Our\ApiConst::set){
$updateGoods['sale_num'] = $goodsList[$goodsCommonId][$goodsId]['goodsNum'];
}
$this->addChangedGoodsStorage(serialize($updateGoods));
}
$newGoodsList[$goodsId]= serialize($temp);
}
if($newGoodsList){
$onlineStorageGoodsKey = \Our\NameConst::onlineStorageGoodsPrefix.$goodsCommonId;
......
......@@ -257,6 +257,28 @@ class GoodsCommonModel extends \DAO\AbstractModel {
}
public function updateStorageByRedis($goods){
$this->setDb(\Our\DbNameConst::masterDBConnectName);
$sql = 'UPDATE '.$this->_tableName.' set goods_edittime = '.TIMESTAMP.',goods_storage = ';
if($goods['op']==\Our\ApiConst::set){
$sql .= $goods['goods_storage'] ;
}else{
$sql .= 'goods_storage '.\Our\ArrayConst::ops[$goods['op']].$goods['goods_storage'] ;
if($goods['sale_num']){
$sql .= ' , sale_num = sale_num '.($goods['op']==\Our\ApiConst::plus?'-':'+').' '.$goods['sale_num'];
}
}
$sql .= ' where goods_commonid = '.$goods['goods_commonid'];
\Our\Log::getInstance()->write($sql.' 执行失败','/data/log/apptest');
$result = $this->db->update($this->_tableName)->query($sql);
if($result===false){
\Our\Log::getInstance()->write($sql.' 执行失败');
}
return $result;
}
public function updateGoodsStorage($dataList , $op = \Our\ApiConst::minus,$updateSaleNumFlag = false){
$datas = array_values($dataList);
$this->setDb(\Our\DbNameConst::masterDBConnectName);
......
......@@ -215,7 +215,7 @@ class PBundlingModel extends \DAO\AbstractModel {
*/
public function addChangedPBundlingStorage($pBundling){
$pBundlingRedisDao = \Redis\Db4\PBundlingRedisModel::getInstance();
$pBundlingRedisDao->tableLPush(\Our\NameConst::changedGoodsStoragePrefix,$pBundling);
$pBundlingRedisDao->tableLPush(\Our\NameConst::changedPBundlingStoragePrefix,$pBundling);
}
/**
......@@ -223,9 +223,32 @@ class PBundlingModel extends \DAO\AbstractModel {
*/
public function getChangedPbundlingStorage(){
$pBundlingRedisDao = \Redis\Db4\PBundlingRedisModel::getInstance();
$pBundlingRedisDao->tableLPop(\Our\NameConst::changedGoodsStoragePrefix);
return $pBundlingRedisDao->tableLPop(\Our\NameConst::changedPBundlingStoragePrefix);
}
public function updateStorageByRedisList(){
$this->setDb(\Our\DbNameConst::masterDBConnectName);
for($i=0;$i<2000;$i++){
$pbundlingStr = $this->getChangedPbundlingStorage();
if(!$pbundlingStr){
break;
}
$pbundling = unserialize($pbundlingStr);
if($pbundling['op'] != \Our\ApiConst::set){
$sql = \Our\Common::format("UPDATE {$this->_tableName} set bl_storage = bl_storage {2} {0} where bl_id = {1} ",$pbundling['bl_storage'],$pbundling['bl_id'],\Our\ArrayConst::ops[$pbundling['op']]);
}else{
$sql = \Our\Common::format("UPDATE {$this->_tableName} set bl_storage = {0} where bl_id = {1} ",$pbundling['bl_storage'],$pbundling['bl_id']);
}
$one = $this->db->update($this->_tableName)->query($sql);
if($one===false){
\Our\Log::getInstance()->write($sql.' 执行失败');
}
}
return true;
}
public function deletePBundlingByBlId($blId){
$pBundlingDao = \Redis\Db4\PBundlingRedisModel::getInstance();
$pBundlingDao->tableDelAll($pBundlingDao->tableKeys('gid_'.$blId));
......
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