Commit 57ee6f45 authored by testshenbd's avatar testshenbd

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

parents d41c9158 a31db60a
......@@ -517,6 +517,7 @@ class OrderConfirmUtil {
$giftCoupons = array();
$this->pushMessageOrders = array();
$storeDao = \DAO\StoreModel::getInstance(\Our\DbNameConst::masterDBConnectName);
$goods_datas = array(); //商品列表
foreach($storeCartData['cartList'] as $storeId=>$storeCarts){
$order= array();
$order['order_sn'] = $this->makeOrderSn($orderPayResult);
......@@ -629,6 +630,7 @@ class OrderConfirmUtil {
$orderGoods['order_id'] = $orderId;
$orderGoods['goods_id'] = $storeCart['goodsId'];
$orderGoods['goods_name'] = $storeCart['goodsName'];
$goods_datas[] = $orderGoods['goods_name'];
$orderGoods['goods_num'] = $storeCart['goodsNum'];
$orderGoods['goods_image'] = $storeCart['goodsImagePath'];
$orderGoods['snapshot_id'] = (isset($storeCarts['snapshot_id'])&&$storeCarts['snapshot_id'])?$storeCarts['snapshot_id']:\our\ApiConst::zero;
......@@ -707,11 +709,113 @@ class OrderConfirmUtil {
\Error\ErrorModel::throwException(\Error\CodeConfigModel::failedUpdateFavoritesStoreForOrder);
}
$orderModel->db->doCommit();
//订单通过小程序表单提交过来
if($formId && ($access_token = $this->getLitAccesstoken())) {
$settingDAO = \DAO\SettingModel::getInstance();
$msg_tpl = $settingDAO->getListCache(array('wxapp_order_create_tpl'))['wxapp_order_create_tpl'];
$goods_str = '';
if(count($goods_datas)>1) {
$goods_str .= $goods_datas[0].'等' .count($goods_datas).'个商品';
} else {
$goods_str .= $goods_datas[0];
}
$sess = \Yaf\Session::getInstance();
$authInfo = $sess->get('wxAuthInfo');
$openid = $authInfo['openid'];
$req_data = array('touser'=>$openid, 'template_id'=> $msg_tpl, 'form_id'=>$formId,
'page'=> 'pages/orders/list/index',
'data'=>array(
'keyword1'=>array('value'=>'下单成功'),
'keyword2'=>array('value'=>$order['order_sn']),
'keyword3'=>array('value'=>number_format($order['order_amount']/100, 2).'元'),
'keyword4'=>array('value'=>$order['store_name']),
'keyword5'=>array('value'=>$goods_str),
));
// \Our\Log::getInstance()->write(json_encode($req_data), '/data/log/apptest');
$url = 'https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=';
$result = $this->sendurl($url, $access_token, json_encode($req_data), 'post');
\Our\Log::getInstance()->write(var_export($result, true), '/data/log/apptest');
}
$this->opCacheInfo();
$this->pushMessage();
return array('needPayFlag'=>$needPayFlag,'paySn'=>$paySn);
}
/**
* 获取小程序表单
* User: King <358887571@qq.com>
* Date: 2018/12/27 0027
* Time: 下午 3:15
*/
private function getLitAccesstoken(){
$model_wx = \DAO\MbWxModel::getInstance();
$weixin = $model_wx->getOne('id,lit_appid,lit_appsecret,lit_accesstoken,lit_expirestime', 'id=1');
$access_token = '';
if (!$weixin['lit_expirestime'] || $weixin['lit_expirestime'] < time()) {
$access_info = json_decode(file_get_contents('https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=' . $weixin['lit_appid'] . '&secret=' . $weixin['lit_appsecret']), true);
if (isset($access_info['access_token'])) {
$access_token = $access_info['access_token'];
$update_data = array();
$update_data['lit_accesstoken'] = $access_info['access_token'];
$update_data['lit_expirestime'] = TIMESTAMP + $access_info['expires_in'] - 1800;
$where = array('id' => $weixin['id']);
$result = $model_wx->update($update_data, $where);
}
} else {
$access_token = $weixin['lit_accesstoken'];
}
return $access_token;
}
/**
* curl请求
* @param $url
* @param $access_token
* @param $data
* @param $method
*/
private function sendurl($url, $access_token = '', $data = '', $method = 'get', $header = '') {
//
if(strtolower($method)=='post') {
$curl = curl_init();
curl_setopt($curl,CURLOPT_URL,$url.$access_token);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
} else {
$curl = curl_init($url.$access_token);
}
if($header){
//设置头部信息
curl_setopt($curl,CURLOPT_HTTPHEADER,$header);
}
//$curl = curl_init($url.$access_token);
curl_setopt($curl,CURLOPT_FAILONERROR,1);
//设置允许页面重定向
curl_setopt($curl,CURLOPT_FOLLOWLOCATION,1);
//设置返回值赋给变量
curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
//设置操作时间
curl_setopt($curl,CURLOPT_TIMEOUT,5);
if($method=='post'){
if(!$data) $data='';
// 使用post 请求
curl_setopt($curl,CURLOPT_POST,1);
// 设置请求参数
curl_setopt($curl,CURLOPT_POSTFIELDS,$data);
}
//开始事务
$r = curl_exec($curl);
curl_close($curl);
return $r;
}
public function pushMessage(){
if($this->pushMessageOrders){
$orderService=\Business\Order\OrderServiceModel::getInstance();
......
......@@ -82,10 +82,11 @@ class ArrayConst
//小程序账号
const wechatInfo = array(
'appid' => 'wxab22edc34913554b',
'secret' => '938b33cfa0bb756a7cbb1e2b454c99f0',
'secret' => '63df6bf0bb37862893bde46e7db218d0',
'grant_type' => 'authorization_code',
);
//卖家处理状态
const sellerState=array(
1=>'处理中',
......@@ -169,4 +170,4 @@ class ArrayConst
\Our\ApiConst::plus => '+',
\Our\ApiConst::set => '='
);
}
\ No newline at end of file
}
......@@ -82,7 +82,6 @@ class GoodsClassServiceModel extends \Business\AbstractModel{
if($serviceStoreIds&&$signStoreIds){
$serviceStoreIds = array_diff($serviceStoreIds,$signStoreIds);
}
$serviceParentClassIds = $this->getServiceStoreClasses($serviceStoreIds);
if($serviceParentClassIds){
$classIds = array_merge($serviceParentClassIds,$classIds);
......@@ -202,9 +201,9 @@ class GoodsClassServiceModel extends \Business\AbstractModel{
$newStoreIds = array();
foreach($signStoreClasses as $signClass){
$inAreaFlag = \Our\CommonExtension::locationInArea($lat,$lng,$signClass['sign_scope']);
$store = $storeList[$signClass['store_id']];
//判断签约分类是否可以为当前用户提供服务,并且记录这些店铺对应的store_id
if($inAreaFlag){
$store = $storeList[$signClass['store_id']];
if($inAreaFlag&&$store){
$class_distance = \Our\CommonExtension::getDistance($lat,$lng,$store['store_latitude'],$store['store_latitude'],1);
$class = $signClass;
$class['class_distance'] = $class_distance;
......@@ -215,14 +214,12 @@ class GoodsClassServiceModel extends \Business\AbstractModel{
}
}
foreach($returnClass as $key => $class){
$classDistance[$key] = $class['class_distance'];
}
array_multisort($classDistance, SORT_DESC, $returnClass);
$signParentClassIds = array_unique(array_column($returnClass,'gc_parent_id'));
//$signStoreIds = array_unique(array_column($returnClass,'store_id'));
$signStoreIds = $newStoreIds;
//将当前位置对应签约店铺存入缓存
......
......@@ -58,11 +58,133 @@ class OrderServiceModel extends \Business\AbstractModel
return $this->orderGoodsField . ',goods_commonid as goodsCommonId,goods_commonid as goodsCommonid,goods_group as goodsGroup';
}
/**
* 获取小程序表单
* User: King <358887571@qq.com>
* Date: 2018/12/27 0027
* Time: 下午 3:15
*/
private function getLitAccesstoken(){
$model_wx = \DAO\MbWxModel::getInstance();
$weixin = $model_wx->getOne('id,lit_appid,lit_appsecret,lit_accesstoken,lit_expirestime', 'id=1');
$access_token = '';
if (!$weixin['lit_expirestime'] || $weixin['lit_expirestime'] < time()) {
$access_info = json_decode(file_get_contents('https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=' . $weixin['lit_appid'] . '&secret=' . $weixin['lit_appsecret']), true);
if (isset($access_info['access_token'])) {
$access_token = $access_info['access_token'];
$update_data = array();
$update_data['lit_accesstoken'] = $access_info['access_token'];
$update_data['lit_expirestime'] = time() + $access_info['expires_in'] - 1800;
$where = array('id' => $weixin['id']);
$result = $model_wx->update($update_data, $where);
}
} else {
$access_token = $weixin['lit_accesstoken'];
}
return $access_token;
}
/**
* curl请求
* @param $url
* @param $access_token
* @param $data
* @param $method
*/
private function sendurl($url, $access_token = '', $data = '', $method = 'get', $header = '') {
//
if(strtolower($method)=='post') {
$curl = curl_init();
curl_setopt($curl,CURLOPT_URL,$url.$access_token);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
} else {
$curl = curl_init($url.$access_token);
}
if($header){
//设置头部信息
curl_setopt($curl,CURLOPT_HTTPHEADER,$header);
}
//$curl = curl_init($url.$access_token);
curl_setopt($curl,CURLOPT_FAILONERROR,1);
//设置允许页面重定向
curl_setopt($curl,CURLOPT_FOLLOWLOCATION,1);
//设置返回值赋给变量
curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
//设置操作时间
curl_setopt($curl,CURLOPT_TIMEOUT,5);
if($method=='post'){
if(!$data) $data='';
// 使用post 请求
curl_setopt($curl,CURLOPT_POST,1);
// 设置请求参数
curl_setopt($curl,CURLOPT_POSTFIELDS,$data);
}
//开始事务
$r = curl_exec($curl);
curl_close($curl);
return $r;
}
/**
* 发送模板消息
*
* User: King <358887571@qq.com>
* Date: 2018/12/28 0028
* Time: 上午 11:31
*/
public function sendTemplateMessage()
{
$model = \DAO\Order\OrderModel::getInstance(DbNameConst::salveDBConnectName);
$model_member = \DAO\MemberModel::getInstance(DbNameConst::salveDBConnectName);
$model_order_goods = \DAO\Order\OrderGoodsModel::getInstance(DbNameConst::salveDBConnectName);
$settingDAO = \DAO\SettingModel::getInstance();
$access_token = $this->getLitAccesstoken();
$where = array('msg_status'=>1, 'payment_type'=>1, 'order_state'=>array('gt',10), 'prepay_id'=> array('neq',
''));
$wxapp_templates = $settingDAO->getListCache(array('wxapp_order_paysucc_tpl', 'wxapp_order_shipping_tpl', 'wxapp_order_receive_tpl'));
if($list = $model->getList($where, 'order_id,order_sn,store_name,buyer_id,order_amount,payment_time, order_state, prepay_id', 0, 10, array('payment_time','asc'))) {
foreach ($list as $order) {
if($access_token && ($member = $model_member->getInfo(array('member_id'=>$order['buyer_id']), 'member_id,member_wxopenid'))){
$where = array('order_id'=>$order['order_id']);
$goods_datas = $model_order_goods->getOrderGoods($where, 'order_id, goods_name');
$msg_tpl = $wxapp_templates['wxapp_order_paysucc_tpl'];
$goods_str = '';
if(count($goods_datas)>1) {
$goods_str .= $goods_datas[0]['goods_name'].'等' .count($goods_datas).'个商品';
} else {
$goods_str .= $goods_datas[0]['goods_name'];
}
$req_data = array('touser'=>$member['member_wxopenid'], 'template_id'=> $msg_tpl,
'form_id'=> $order['prepay_id'],
'data'=>array(
array('keyword1'=>array('value'=>$order['order_sn'])),
array('keyword2'=>array('value'=>$order['store_name'])),
array('keyword3'=>array('value'=>$goods_str)),
array('keyword4'=>array('value'=>number_format($order['order_amount']/100, 2)).'元'),
array('keyword5'=>array('value'=>date('Y-m-d H:i',$order['payment_time']))),
array('keyword6'=>array('value'=>'已付款')),
));
$url = 'https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=';
$result = $this->sendurl($url, $access_token, $req_data, 'post');
}
}
}
}
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('orderSn' => $keyword"));
// $query2[]= array('match' => array('storeName' => $keyword));
// $query2[]= array('match' => array('goodsName' => $keyword));
// $res1['should']=$query2;
......@@ -648,6 +770,7 @@ class OrderServiceModel extends \Business\AbstractModel
return true;
}else{
echo $refundReturnDao->errorMessage."orderId:".$orderId;
return false;
}
......@@ -655,7 +778,8 @@ class OrderServiceModel extends \Business\AbstractModel
} catch (Exception $e) {
throw new \Exception($e->getMessage(),$e->getCode());
echo $e->getMessage().$e->getCode();
return false;
}
}
......@@ -668,7 +792,7 @@ class OrderServiceModel extends \Business\AbstractModel
$orderCommonDao = \DAO\Order\OrderCommonModel::getInstance(DbNameConst::masterDBConnectName);
$orderGoodsDao = \DAO\Order\OrderGoodsModel::getInstance(DbNameConst::masterDBConnectName);
$orderConfirmUtilDao=OrderConfirmUtil::getInstance(DbNameConst::masterDBConnectName);
$beginTime = file_get_contents($this->baseDir . \Our\PathConst::orderCancelTime, TIMESTAMP);
$beginTime = file_get_contents($this->baseDir . \Our\PathConst::orderCancelTime);
$beginTime = $beginTime ? $beginTime : ApiConst::zero;
$endTime = TIMESTAMP - ApiConst::orderCancelBeyondTime;
$storeDao=\DAO\StoreModel::getInstance();
......@@ -676,6 +800,7 @@ class OrderServiceModel extends \Business\AbstractModel
if (!empty($orders)) {
foreach ($orders as $order) {
//更新订单信息
$updateData = array('order_state' => ApiConst::orderStateCancel,'is_effective'=>ApiConst::cancelOrderAuto);
$update = $orderDao->update(array('order_id' => $order['orderId']),$updateData);
......@@ -726,23 +851,114 @@ 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);
$beginTime = file_get_contents($this->baseDir . \Our\PathConst::orderCloseWaitRecieveOrder, TIMESTAMP);
$beginTime = file_get_contents($this->baseDir . \Our\PathConst::orderCloseWaitRecieveOrder);
$beginTime = $beginTime ? $beginTime : ApiConst::zero;
$endTime = TIMESTAMP - ApiConst::orderStateWaitConfirmBeyond;
$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)) {
$this->changeOrderStateCancelUnconditional($order);
$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']);
......@@ -782,11 +998,11 @@ class OrderServiceModel extends \Business\AbstractModel
}
$orderIds = array_column($orders, 'orderId');
$this->updateOrderGoodsStoregeByOrderIds($orderIds);
// $orderIds = array_column($orders, 'orderId');
// $this->updateOrderGoodsStoregeByOrderIds($orderIds);
//发送消息
$push = Push::getInstance();
$push->pushOrderCloseMessage($orders);
$push->pushOrderCloseMessage($newOrders);
}
file_put_contents($this->baseDir . \Our\PathConst::orderCloseWaitRecieveOrder, $endTime);
......
<?php
namespace DAO;
/**
* 微信公众号配置实体
* Class MbWxModel
* @package DAO
* User: King <358887571@qq.com>
* Date: 2018/12/27 0027
* Time: 下午 3:35
*
*/
class MbWxModel extends \DAO\AbstractModel {
/**
* 表名
*
* @var string
*/
protected $_tableName = 'han_mb_wx';
/**
* 主键
*
* @var string
*/
protected $_primaryKey = 'id';
public function init(){
}
/**
* 获取记录
* @param $field 查询字段
* @param $where 查询条件
* @return mixed 记录数组
* User: King <358887571@qq.com>
* Date: 2018/12/27 0027
* Time: 下午 3:41
*/
public function getOne($field, $where){
$this->setDb($this->dbName);
return $this->db->select($field)->from($this->_tableName)->where($where)->fetchOne();
}
/**
* 更新记录
* @param $param 更新数据
* @param $where 更新条件
* @return mixed 操作结果
* User: King <358887571@qq.com>
* Date: 2018/12/27 0027
* Time: 下午 3:43
*/
public function update($param,$where){
$this->setDb(\Our\DbNameConst::masterDBConnectName);
return $this->db->update($this->_tableName)->rows($param)->where($where)->execute();
}
/**
* 类实例
*
* @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;
}
}
......@@ -717,7 +717,7 @@ class OrderModel extends \DAO\AbstractModel
}
}
return $refundStateName;
}
......
......@@ -99,9 +99,11 @@ class ShortMessageModel {
$templateId = $template['templateId'];
// $param = $template['parameters'];
$result = \AliyunSms\Sms::sendSms($mobile, $templateId, $params);
if($result['status']){
return true;
}
\Our\Log::getInstance()->write($result['msg']);
}
return false;
}
......
<?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;
?>
<?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 cliOrderSendTemplateMessage 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);
}
}
private function autoSendMessage(){
$service = \Business\Order\OrderServiceModel::getInstance(\Our\DbNameConst::masterDBConnectName);
$service->baseDir = \Our\Common::getConfig('out.config');
}
protected function _runCli()
{
$this->fromState = $this->aArgv[1];
$this->_debug = isset($this->aArgv[1]) ? intval($this->aArgv[1]) : 0;
if ($this->_debug)
{
echo "*** Debug mode ***\n";
}
// Step: 02 检查是否已有相同CLI在运行中
$lockDir=$this->_getBaseFileName('orderSendTemplateMessage');
if(!$this->mkdirs($lockDir)){
echo '****create dir fail ****';
exit;
}
$this->lockFileName = $lockDir . '/orderSendTemplateMessage.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 独占锁
if(APP_ENV =='pre' || APP_ENV=='product'){
file_put_contents($this->lockFileName ,"running" ); // CLI 独占锁
}
$this->autoSendMessage();
echo date('Y-m-d H:i:s',TIMESTAMP)."订单消息通知成功\r\n";
}
}
$oCli = new cliOrderConfirm(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