Commit a491ec19 authored by liuyuzhen's avatar liuyuzhen

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

parents 7fb1b6de d88f642c
......@@ -42,7 +42,7 @@ class GoodsController extends \Our\Controller_AbstractIndex {
public function testAction(){
//$info = $this->goodsService->recommend();
//\Business\Goods\GoodsCommonServiceModel::getInstance()->saleGoods();
\Business\Goods\EvaluationServiceModel::getInstance()->autoEvaluate();
\Business\Store\StoreServiceModel::getInstance()->pendingItemsInform();
}
public function getAttrsAction(){
......
......@@ -512,6 +512,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);
......@@ -624,6 +625,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;
......@@ -702,11 +704,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=>'处理中',
......
......@@ -81,6 +81,14 @@ class SmsTemplateConst{
'storename',
'reason'
)
),
//目前共有${storeCount}家商户注册待审核,${weiCount}家微信支付待处理状态(需结合微信服务商状态)。
'storeWaitCheck'=> array(
'templateId'=>'SMS_153996044',
'parameters'=>array(
'storeCount',
'weiCount'
)
)
);
......
......@@ -61,9 +61,9 @@ class WxLitePay extends \Payment\TencentPay{
public function refund($param){
if($param['subMchId']){
$this->refundService($param);
return $this->refundService($param);
}else{
$this->refundCommon($param);
return $this->refundCommon($param);
}
}
......
......@@ -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_id
if($inAreaFlag){
$store = $storeList[$signClass['store_id']];
//判断签约分类是否可以为当前用户提供服务,并且记录这些店铺对应的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,144 @@ 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'=>array('elt', 1), 'payment_type'=>5, 'order_state'=>array('gt',10), 'prepay_id'=>
array('neq',
''), 'payment_time'=>array('gt', TIMESTAMP-7*24*60*60));
$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'))) {
echo 'order num: '.count($list)."\n";
foreach ($list as $order) {
if($access_token && ($member = $model_member->getOneByMemberId($order['buyer_id'], 'member_id,member_wxappopenid'))){
$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_wxappopenid'], 'template_id'=> $msg_tpl,
'form_id'=> $order['prepay_id'],
'data'=>array(
'keyword1'=>array('value'=>$order['order_sn']),
'keyword2'=>array('value'=>$order['store_name']),
'keyword3'=>array('value'=>$goods_str),
'keyword4'=>array('value'=>number_format($order['order_amount']/100, 2).'元'),
'keyword5'=>array('value'=>date('Y-m-d H:i',$order['payment_time'])),
'keyword6'=>array('value'=>'已付款'),
));
\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=';
if($result = $this->sendurl($url, $access_token, json_encode($req_data), 'post')) {
$json = json_decode($result, true);
if($json['errmsg']=='ok') {
$model->updateByOrderId(array('msg_status'=>1), $order['order_id']);
echo 'order[' . $order['order_id'] .'] send payment succ'."\n";
}
}
}
}
}
}
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;
......@@ -333,11 +466,11 @@ class OrderServiceModel extends \Business\AbstractModel
$storeDao=\DAO\StoreModel::getInstance();
//判断订单目前状态是否允许取消
$isAllowCancel = $orderDao->isAllowCancel($order);
//$isAllowCance = true;
$isAllowCancel = true;
if ($isAllowCancel) {
$orderDao->db->doTransaction();
$res = $orderDao->updateStatusByOrderId($orderId, ApiConst::orderStateCancel,false,ApiConst::cancelOrderBySelf);
$orderDao->setDb($orderDao->dbName);
$orderDao->db->doTransaction();
if ($res) {
$this->updateOrderGoodsStoregeByOrderIds(array($orderId));
$order['refundOrderNo']=$refundReturnDao->getRefundsn($order['storeId']);
......@@ -648,6 +781,7 @@ class OrderServiceModel extends \Business\AbstractModel
return true;
}else{
echo $refundReturnDao->errorMessage."orderId:".$orderId;
return false;
}
......@@ -655,7 +789,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 +803,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 +811,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 +862,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 +1009,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);
......
......@@ -1230,7 +1230,15 @@ class StoreServiceModel extends \Business\AbstractModel{
public function updateStoreTotalDeposit(){
\DAO\StoreModel::getInstance()->updateStoreDeposit();
}
public function pendingItemsInform() {
$storePaymentDao = \DAO\Store\StorePaymentModel::getInstance();
$weiCount = $storePaymentDao->getStorePaymentCount(array('payment_type'=>0,'status'=>0));
$storeRegisterDao = \DAO\Store\QmStoreRegisterModel::getInstance();
$storeCount = $storeRegisterDao->getWaitCheckCount(array('state'=>0));
$settingDAO = \DAO\SettingModel::getInstance();
$phone = $settingDAO->getListCache(array('pending_items_inform_tel'))['pending_items_inform_tel'];
\DAO\ShortMessageModel::getInstance()->sendMessageSmsForPlatform($phone,'storeWaitCheck',array('storeCount'=>$storeCount,'weiCount'=>$weiCount));
}
/**
*/
private static $_instance = null;
......
......@@ -328,7 +328,7 @@ class MemberServiceModel extends \Business\AbstractModel
return $result;
}
private function saveWxInfoMemberInfo($where,$openid=null){
private function saveWxInfoMemberInfo($where,$openid=null, $wxappopenid=null){
$memberDao = \DAO\MemberModel::getInstance(\Our\DbNameConst::masterDBConnectName);
//构造需要保存的会员信息
......@@ -336,6 +336,9 @@ class MemberServiceModel extends \Business\AbstractModel
if($openid){
$member['member_mobile'] = $openid;
}
if($wxappopenid) {
$member['member_wxappopenid'] = $wxappopenid;
}
$result = $memberDao->addInfo($member);
return $result;
}
......@@ -834,7 +837,7 @@ class MemberServiceModel extends \Business\AbstractModel
return false;
}
public function checkSaveWechatInfo($where){
public function checkSaveWechatInfo($where, $wxappopenid = ''){
$memberDao = \DAO\MemberModel::getInstance(\Our\DbNameConst::masterDBConnectName);
$memberMappingDao = \DAO\MemberMappingModel::getInstance(\Our\DbNameConst::masterDBConnectName);
if($where['userType'] == \Our\ApiConst::wechatUserType){
......@@ -851,7 +854,7 @@ class MemberServiceModel extends \Business\AbstractModel
//$memberMapping = \Our\RedisHelper::cachedFunction(\Redis\Db0\MemberMappingRedisModel::getInstance(),array(&$memberMappingDao, 'find'),array($condition,'member_id'),\Our\ApiConst::tenDaySecond);
if($memberMappings){
$memberIds = array_column($memberMappings,'member_id');
$member = $memberDao->getMemberForLogin($memberIds);
$member = $memberDao->getMemberForLogin($memberIds, $wxappopenid);
if($where['userType'] == \Our\ApiConst::wechatUserType){
$this->checkMemberMappingExistLogin($member['member_id'],$condition['openid'] ,$where['userType']);
}
......@@ -911,13 +914,14 @@ class MemberServiceModel extends \Business\AbstractModel
$where['session_key'] = $authInfo['session_key'];
$this->checkWechatInfo($where,$authInfo);
$returnMember = $this->checkSaveWechatInfo($where);
$returnMember = $this->checkSaveWechatInfo($where, $authInfo['openid']);
if($returnMember){
return $returnMember;
}
$db->doTransaction();
$openid = $this->getUnionId($where['encryptedData'],$where['iv'],$where['session_key']);
$memberId = $this->saveWxInfoMemberInfo($where,$openid);
$wxappOpenid = $authInfo['session_key'];
$memberId = $this->saveWxInfoMemberInfo($where, $openid, $wxappOpenid);
if(!$memberId){
$db->doRollback();
......
<?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;
}
}
......@@ -21,7 +21,7 @@ class MemberModel extends \DAO\AbstractModel
protected $_tableName = 'han_member';
//有效用户返回数据
private $availMemberColumn = array('member_id', 'member_name', 'member_truename', 'member_avatar', 'member_sex', 'member_birthday', 'member_mobile', 'member_mobile_bind', 'member_qq', 'member_qqopenid', 'member_qqinfo', 'member_wxinfo', 'member_wxopenid', 'member_sinaopenid', 'member_sinainfo', 'member_points', 'member_state', 'member_quicklink', 'member_exppoints', 'store_id', 'iswx', 'agree_flag', 'seller_id', 'diliveryman_id', 'member_tag_ids', 'member_group_ids', 'is_teacher', 'member_email', 'member_email_bind','is_wxsend');
private $availMemberColumn = array('member_id', 'member_name', 'member_truename', 'member_avatar', 'member_sex', 'member_birthday', 'member_mobile', 'member_mobile_bind', 'member_qq', 'member_qqopenid', 'member_qqinfo', 'member_wxinfo', 'member_wxopenid', 'member_sinaopenid', 'member_sinainfo', 'member_points', 'member_state', 'member_quicklink', 'member_exppoints', 'store_id', 'iswx', 'agree_flag', 'seller_id', 'diliveryman_id', 'member_tag_ids', 'member_group_ids', 'is_teacher', 'member_email', 'member_email_bind', 'is_wxsend', 'member_wxappopenid');
//有效用户返回数据
......@@ -229,6 +229,7 @@ class MemberModel extends \DAO\AbstractModel
'memberMobileBind' => (int)$member['member_mobile_bind'],
'memberWxinfo' => isset($member['member_wxinfo'])&&$member['member_wxinfo']? unserialize($member['member_wxinfo']) : new \stdClass(),
'memberWxopenid' => $member['member_wxopenid'],
'memberWxappopenid' => $member['member_wxappopenid'],
'sellerId' => (int)$member['seller_id'],
'diliverymanId' => (int)$member['diliveryman_id'],
'storeId' => (int)$member['store_id'],
......@@ -251,6 +252,7 @@ class MemberModel extends \DAO\AbstractModel
'memberMobileBind' => $member['member_mobile_bind'],
'memberWxinfo' => isset($member['member_wxinfo']) ? unserialize($member['member_wxinfo']) : new \stdClass(),
'memberWxopenid' => $member['member_wxopenid'],
'memberWxappopenid' => $member['member_wxappopenid'],
'sellerId' => $member['seller_id'],
'diliverymanId' => $member['diliveryman_id'],
'storeId' => $member['store_id'],
......@@ -556,7 +558,16 @@ class MemberModel extends \DAO\AbstractModel
return $member;
}
public function getMemberForLogin($memberIds){
/**
* 获取登录用户
* @param $memberIds
* @param string $wxappopenid
* @return array
* User: King <358887571@qq.com>
* Date: 2018/12/29 0029
* Time: 下午 3:20
*/
public function getMemberForLogin($memberIds, $wxappopenid = ''){
$member = array();
$memberCon['member_id'] = array('in',$memberIds);
$memberCon['member_state'] = \Our\ApiConst::one;
......@@ -574,6 +585,10 @@ class MemberModel extends \DAO\AbstractModel
if(empty($member)){
$member = $memberList[0];
}
if($wxappopenid && !$member['member_wxappopenid']) {
$this->updateInfo(array('member_wxappopenid'=>$wxappopenid), array('member_id'=>$member['member_id']));
}
$member['member_wxappopenid'] = $wxappopenid;
$memberAvatarUrl = $this->getMemberAvatarUrl($member['member_id'], $member['member_avatar']);
$member['memberAvatarUrl'] = $memberAvatarUrl;
}
......
......@@ -505,7 +505,6 @@ class RefundReturnModel extends \DAO\AbstractModel
} else if (intval($orderInfo['paymentType']) == ApiConst::wxProgram) {
$wxpay = \Payment\WxLitePay::getInstance();
$refund_return = $wxpay->refund($param);
if (!($refund_return['return_code'] == 'SUCCESS' && $refund_return['result_code'] == 'SUCCESS')) {
$this->errorMessage = date('Y-m-d') . '微信退款操作执行失败!' . $orderInfo['orderId'] . "\r\n";
return false;
......
......@@ -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
namespace DAO\Store;
class QmStoreRegisterModel extends \DAO\AbstractModel
{
/**
* 表名
*
* @var string
*/
protected $_tableName = 'han_qm_store_register';
/**
* 主键
*
* @var string
*/
protected $_primaryKey = 'register_id';
public function init()
{
}
public function getStoreRegisterCount($where) {
return $this->getCountByWhere($where);
}
public function getWaitCheckCount($where) {
$this->setDb($this->dbName);
$result=$this->db->select('count(DISTINCT han_qm_store_register.register_id) AS count')->from($this->_tableName)->join('han_qm_store_register_file','han_qm_store_register.register_id = han_qm_store_register_file.register_id','inner')->where($where)->fetchAll();
return $result ? $result[0]['count'] : 0;
}
/**
* 类实例
*
* @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;
}
}
<?php
namespace DAO\Store;
class StorePaymentModel extends \DAO\AbstractModel
{
/**
* 表名
*
* @var string
*/
protected $_tableName = 'han_store_payment';
/**
* 主键
*
* @var string
*/
protected $_primaryKey = 'payment_id';
public function init()
{
}
public function getStorePaymentCount($where) {
return $this->getCountByWhere($where);
}
/**
* 类实例
*
* @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;
}
}
......@@ -80,6 +80,9 @@ class SettingRedisModel extends \Redis\Db1\AbstractModel {
public function tableKeyExists($h){
return $this->exists($this->calcKey($h));
}
public function tableHGAll($h){
return $this->hGetAll($this->calcKey($h));
}
/**
* 类实例
*
......
<?php
//发布
$redis = new Redis();
$redis->connect('192.168.1.201', 6379);
$message='happy New Year';
$ret=$redis->publish('pushcenter',$message);
<?php
//订阅
ini_set('default_socket_timeout', -1); //不超时
$redis = new Redis();
$redis->connect('192.168.1.201', 6379);
$result=$redis->subscribe(array('pushcenter'), 'callback');
function printTest($meg){
$len=10;
for($i=0;$i<$len;$i++){
sleep(1);
echo $meg."\r\n";
}
}
function callback($instance,$channelName,$message){
printTest($message);
}
<?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);
}
}
protected function autoSendMessage(){
$service = \Business\Order\OrderServiceModel::getInstance(\Our\DbNameConst::masterDBConnectName);
$service->baseDir = \Our\Common::getConfig('out.config');
echo "autoSendMessage:\n";
$service->sendTemplateMessage();
}
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';
@unlink($this->lockFileName);
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 cliOrderSendTemplateMessage(TRUE);
EXIT;
?>
<?php
/**
*
* 推送10秒推送一次
*
* @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);
// redis 没有设置密码
$conf = \Yaf\Registry::get('config')->get('redis.database.params');
$redis=new Redis();
$redis->connect($conf['host'], $conf['port']);
if(!empty($conf['password'])){
$redis->auth($conf['password']);
}
//ini_set('default_socket_timeout', -1);(所有长连接不超时)
$redis->setOption(Redis::OPT_READ_TIMEOUT, -1);
$result=$redis->subscribe(array('redisPublish'), 'callback');
function printTest($meg){
echo $meg.'213';
}
function callback($instance,$channelName,$message){
printTest($message);
}
<?php
/**
* 待办事务提醒
* 执行时间:8:50~11:00~15:00~17:30
*/
define("APPLICATION_PATH", realpath(dirname(__FILE__) . '/../../../')); //指向public的上一级
require APPLICATION_PATH . '/scripts/crontab/common.php';
\Business\Store\StoreServiceModel::getInstance()->pendingItemsInform();
echo '发送成功';
\ No newline at end of file
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