Commit dfe8981d authored by chenchuanwen's avatar chenchuanwen

orderClose

parent f5a6f511
......@@ -851,6 +851,84 @@ class OrderServiceModel extends \Business\AbstractModel
}
file_put_contents($this->baseDir . \Our\PathConst::orderCancelTime, $endTime);
}
public function changeOrderStatusSecond()
{
$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;
$storeDao=\DAO\StoreModel::getInstance();
// $beginTime=0;
$orders = $orderDao->getMustCecelRecieveOrders($beginTime, $endTime, $orderDao->getOrderDetailField());
$newOrders=array();
$orderIds=array();
if (!empty($orders)) {
foreach ($orders as $order) {
$orderDao->setDb(DbNameConst::masterDBConnectName);
$orderDao->db->doTransaction();
//更新订单信息
$updateData = array('order_state' => ApiConst::orderStateClose,'refund_amount'=>$order['orderAmount'],'gmt_update'=>TIMESTAMP,'is_effective'=>ApiConst::closeOrder);
$update = $orderDao->update(array('order_id' => $order['orderId']),$updateData);
if($update){
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);
$orderIds=array();
$orderDao->db->doCommit();
}
$orderDao->deleteOrderCache($order['buyerId'],(string)$order['orderId'],$order['storeId'],true);
$storeDao->deleteStoreCache($order['storeId'],$order['orderId']);
$push=\Our\Push::getInstance();
$pushData=array('storeId'=>$order['storeId'],
'type'=>ApiConst::messageWaitReceive,
'waitReceiveCount'=>ApiConst::reduceOne,
'waitDeliveryCount'=>0,
'waitGetCount'=>0,
'orderCount'=>ApiConst::reduceOne,
'waitRefundProccessCount'=>ApiConst::zero,
'waitRefundReceiveCount'=>ApiConst::zero,
'refundCount'=>ApiConst::zero,
'alertCount'=>ApiConst::zero,
'params'=>array('c'=>'shopkeeper',
'm'=>'orderDetail',
'orderId'=>$order['orderId']));
$push->addOneToClient($pushData);
}
// $orderDao->deleteOrderCache($order['buyerId'],(string)$order['orderId'],$order['storeId'],true);
// $storeDao->deleteStoreCache($order['storeId'],$order['orderId']);
// $push=\Our\Push::getInstance();
// $pushData=array('storeId'=>$order['storeId'],
// 'type'=>ApiConst::messageWaitReceive,
// 'waitReceiveCount'=>ApiConst::reduceOne,
// 'waitDeliveryCount'=>0,
// 'waitGetCount'=>0,
// 'orderCount'=>ApiConst::reduceOne,
// 'waitRefundProccessCount'=>ApiConst::zero,
// 'waitRefundReceiveCount'=>ApiConst::zero,
// 'refundCount'=>ApiConst::zero,
// 'alertCount'=>ApiConst::zero,
// 'params'=>array('c'=>'shopkeeper',
// 'm'=>'orderDetail',
// 'orderId'=>$order['orderId']));
// $push->addOneToClient($pushData);
}
// $orderIds = array_column($orders, 'orderId');
// $this->updateOrderGoodsStoregeByOrderIds($orderIds);
//发送消息
$push = Push::getInstance();
$push->pushOrderCloseMessage($newOrders);
}
file_put_contents($this->baseDir . \Our\PathConst::orderCloseWaitRecieveOrder, $endTime);
}
public function changeOrderStatus()
{
$orderDao = \DAO\Order\OrderModel::getInstance(DbNameConst::masterDBConnectName);
......
<?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 cliOrderClose 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 autoCloseOrder(){
$orderService=\Business\Order\OrderServiceModel::getInstance(\Our\DbNameConst::masterDBConnectName);
$orderService->baseDir= \Our\Common::getConfig('out.config');
$orderService->changeOrderStatusSecond();
$messageService=\Business\Message\MessageServiceModel::getInstance(\Our\DbNameConst::masterDBConnectName);
$messageService->addMessageCenterToDb();
}
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('order');
if(!$this->mkdirs($lockDir)){
echo '****create dir fail ****';
exit;
}
$this->lockFileName = $lockDir .DS.'close.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;
if(APP_ENV =='pre' || APP_ENV=='product'){
file_put_contents($this->lockFileName ,"running" ); // CLI 独占锁
}
$this->autoCloseOrder();
echo date('Y-m-d H:i:s',TIMESTAMP).'定单关闭消息成功'."\r\n";
}
}
$oCli = new cliOrderClose(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