Commit 31b45f87 authored by liuyuzhen's avatar liuyuzhen

新订单确认页面

parents 855dfb86 2dd6a3ea
......@@ -13,7 +13,8 @@ class GoodsController extends \Our\Controller_AbstractIndex {
* 商品详情页
*/
public function getAction(){
$goodsInfo = $this->goodsService->getCommonDetail($this->req[\Our\NameConst::data],$this->memberId);
$address = \Business\User\AddressServiceModel::getInstance()->getMyAddress($this->req[\Our\NameConst::data],$this->memberId,false);
$goodsInfo = $this->goodsService->getCommonDetail($this->req[\Our\NameConst::data],$this->memberId,$address);
$store = $this->goodsService->getStore($goodsInfo['storeId']);
$goodsInfo['freeShippingPrice'] = $store['freeShippingPrice'];
$goodsInfo['isQuality'] = $store['isQuality'];
......
......@@ -19,7 +19,8 @@ class GroupController extends \Our\Controller_AbstractIndex {
}
public function getAction(){
$goods = $this->GroupSaleService->getGroupGoods($this->req[\Our\NameConst::data]);
$address = \Business\User\AddressServiceModel::getInstance()->getMyAddress($this->req[\Our\NameConst::data],$this->memberId,false);
$goods = $this->GroupSaleService->getGroupGoods($this->req[\Our\NameConst::data],$address);
// $data = $this->GroupSaleService->getOnePBundingCache($this->req[\Our\NameConst::data]['groupId']);
// $this->GroupSaleService->handleData($data);
$storeInfo = \Business\Goods\GoodsCommonServiceModel::getInstance()->getStore($goods['store_id']);
......
......@@ -23,6 +23,8 @@ class ApiConst
const oneHour = 3600;
const halfHour = 1800;
//预警时间
const storageAlarmHour = 10800;
const twoMinSecond = 120;
......@@ -231,8 +233,9 @@ class ApiConst
const bySelf = 0;
const bySeller = 1;
const express = 2;
//待自提
const oneHandred=100;
//待配送
const oneHandredOne=101;
//文案类型
......@@ -409,6 +412,20 @@ class ApiConst
const reachRemindMessageType = 1;
const waitRecieveOrderType = 15;
const deliveryOrderType = 16;
//pcClient 消息推送消息模板类型常量
const messageWaitReceive=101;
//待配送
const messageWaitSend=102;
//待自提
const messageWaitGet=103;
//售后待处理
const messageRefundProccessing=104;
//售后待收货
const messageRefundWaitReceive=105;
//用户被其它用户登录请退出
const messageGoodsAlert=106;
//用户被其它用户登录请退出
const messageOtherLogin=107;
//消息按钮类型
const messageButtonTypeConfirmButton = 1;//确认收货
const messageButtonTypeReciverButton = 2;//确认接单
......@@ -431,4 +448,7 @@ class ApiConst
const arriveTimeRadius=1800;
}
\ No newline at end of file
......@@ -17,6 +17,9 @@ abstract class Controller_AbstractClient extends \Our\Controller_Abstract {
public $key;
public $req;
public $memberId;
public $storeId;
public $sellerName;
public $sellerId;
/**
* api控制器直接输出json格式数据,不需要渲染视图
*/
......@@ -32,6 +35,8 @@ abstract class Controller_AbstractClient extends \Our\Controller_Abstract {
$sess->start();
$this->memberId=$sess->get('member_id');
$this->storeId=$sess->get('store_id');
$this->sellerName=$sess->get('seller_name');
$this->sellerId=$sess->get('seller_id');
if(empty($this->memberId)){
ErrorModel::throwException(CodeConfigModel::noLogin);
}
......
File mode changed from 100755 to 100644
......@@ -149,6 +149,7 @@ class NameConst {
const waitShipments = 'waitShipments';//待发货
const waitReceiving = 'waitReceiving';//待收货
const waitEvaluate = 'waitEvaluate';//待评价
const waitSelfLifting = 'waitSelfLifting';//待自提
const refund = 'refund';//退款中
const storeCollection = 'storeCollection';//店铺收藏数量
const goodsCollection = 'goodsCollection';//商品收藏数量
......@@ -170,6 +171,13 @@ class NameConst {
const blGoods = '_goodsCommon';
const pcClient='pc-client';
const add='add';
const reduce='reduce';
const set='set';
const logOut='logOut';
}
?>
\ No newline at end of file
......@@ -62,6 +62,10 @@ class Push
$this->toUserType = $data['toType'];
$this->data[] = $data;
}
public function addOneToClient($data)
{
$this->data[] = $data;
}
public function addList($dataList)
{
......
<?php
namespace Business;
use Our\NameConst;
/**
* 业务层的抽象类
*/
abstract class AbstractModel {
public $clientType=NameConst::pcClient;
/**
* 不允许克隆对象
......
......@@ -3,6 +3,8 @@
namespace Business\Goods;
use Our\ApiConst;
use Our\Common;
use Zend\Json\Server\Exception\ErrorException;
class GoodsCommonServiceModel extends \Business\AbstractModel
......@@ -349,11 +351,26 @@ class GoodsCommonServiceModel extends \Business\AbstractModel
* @throws \Exception
* @throws \Our\Exception
*/
public function getCommonDetail($param,$memberId){
public function getCommonDetail($param,$memberId,$address){
$goodsCommonId = intval($param['goodsCommonId']);
$attrs = $this->getAttr($goodsCommonId,$memberId);
$commonInfo = $attrs['commonInfo'];
$commonInfo['goods_image'] = \Our\ImageUtil::getGoodsImgUrl($commonInfo['goods_image']);
//位置相关
if($address) {
$lng = $address['lng'];
$lat = $address['lat'];
}else{
$lng = $param['lng'];
$lat = $param['lat'];
}
$in_store_service_flag=0;
if($lng && $lat){
$location = array('lat'=>$lat,'lng'=>$lng);
$in_store_service = \Store\StoreUtil::getInstance()->checkAddressInServiceArea($location,$storeId);
$in_store_service && $in_store_service_flag = 1;
}
//所在地
$area = '';
if($commonInfo['areaid_1'] && $commonInfo['areaid_2']){
......@@ -396,7 +413,7 @@ class GoodsCommonServiceModel extends \Business\AbstractModel
$html = array('width'=>750,'height'=>$commonInfo['goods_height'],'url'=>\Our\Common::getBaseUrl().'/index/goodsDetail?goodsCommonId='.$goodsCommonId);
if($commonInfo['is_del'] == 1) $commonInfo['goods_state'] = 0;
unset($attrs['commonInfo']);
return array_merge(array('storeId'=>$commonInfo['store_id'],'goodsId'=>$commonInfo['goodsId'],'goodsName'=>$commonInfo['goods_name'],'goodsVerify'=>$commonInfo['goods_verify'],'goodsState'=>$commonInfo['goods_state'],'saleCount'=>$commonInfo['sale_num'],'collectionState'=>$collectionState,'isOwn'=>$isOwn,'isHot'=>$commonInfo['goods_hot'],'isRecoment'=>$commonInfo['goods_commend'],'isFree'=>$commonInfo['goods_free'],'isVirtual'=>$commonInfo['is_virtual'],'goodsMostLimit'=>$commonInfo['goods_most_limit'],'goodsLeastLimit'=>$commonInfo['goods_least_limit'],'goodsTotalLimit'=>$commonInfo['goods_total_limit'],'address'=>$area,'range'=>$rangePrice,'productData'=>$productData,'htmlContent'=>$html,'videoUrl'=>$commonInfo['goods_youku_url']),$attrs);
return array_merge(array('storeId'=>$commonInfo['store_id'],'goodsId'=>$commonInfo['goodsId'],'goodsName'=>$commonInfo['goods_name'],'goodsVerify'=>$commonInfo['goods_verify'],'goodsState'=>$commonInfo['goods_state'],'saleCount'=>$commonInfo['sale_num'],'collectionState'=>$collectionState,'isOwn'=>$isOwn,'isHot'=>$commonInfo['goods_hot'],'isRecoment'=>$commonInfo['goods_commend'],'isFree'=>$commonInfo['goods_free'],'isVirtual'=>$commonInfo['is_virtual'],'goodsMostLimit'=>$commonInfo['goods_most_limit'],'goodsLeastLimit'=>$commonInfo['goods_least_limit'],'goodsTotalLimit'=>$commonInfo['goods_total_limit'],'address'=>$area,'range'=>$rangePrice,'productData'=>$productData,'htmlContent'=>$html,'videoUrl'=>$commonInfo['goods_youku_url'],'inStoreService'=>$in_store_service_flag),$attrs);
}
public function getAttr($goodsCommonId,$memberId = null){
$goodsCommonId = (int)$goodsCommonId;
......@@ -1286,4 +1303,15 @@ class GoodsCommonServiceModel extends \Business\AbstractModel
return self::$_instance;
}
public function getAlertGoods(){
$goodsDao=\DAO\GoodsModel::getInstance();
$endTime=TIMESTAMP;
$beginTime=TIMESTAMP-ApiConst::storageAlarmHour;
$where=Common::format(" goods_edittime > {0} and goods_edittime<{1} and goods_storage<goods_storage_alarm",$beginTime,$endTime);
$stores=$goodsDao->getListGroup($where,"store_id as storeId,count(*) as count","store_id");
return $stores;
}
}
......@@ -22,13 +22,30 @@ class GroupSaleServiceModel extends \Business\AbstractModel {
* @param $param
* @return mixed
*/
public function getGroupGoods($param){
public function getGroupGoods($param,$address){
$groupId = intval($param['groupId']);
$groupList = $this->getPBundlingListByBlIds(array($groupId),\Our\DbNameConst::salveDBConnectName,array(),false,\Our\ApiConst::one);
if(!$groupList){
\Error\ErrorModel::throwException(\Error\CodeConfigModel::emptyPBundlingdForOrder);
}
$data = $groupList[0];
//位置相关
if($address) {
$lng = $address['lng'];
$lat = $address['lat'];
}else{
$lng = $param['lng'];
$lat = $param['lat'];
}
$in_store_service_flag=0;
if($lng && $lat){
$location = array('lat'=>$lat,'lng'=>$lng);
$in_store_service = \Store\StoreUtil::getInstance()->checkAddressInServiceArea($location,$storeId);
$in_store_service && $in_store_service_flag = 1;
}
$data['inStoreService'] = $in_store_service_flag;
$data['state'] = \Our\ApiConst::cartGoodsOnline;
if($data['bl_state'] == \Our\ApiConst::zero) {
$data['state'] = \Our\ApiConst::zero;
......
......@@ -123,6 +123,14 @@ class OrderServiceModel extends \Business\AbstractModel
if($orderState==ApiConst::orderStateComplete){
$where['evaluation_state']=ApiConst::waitEvaluation;
}
// if($orderState==ApiConst::orderStateWaitRecieve){
// $where['shipping_type']=array('eq',ApiConst::bySeller);
// $where['order_state'] =array('in',array(ApiConst::orderStateWaitSend,ApiConst::orderStateWaitRecieve));
// }
// if($orderState==ApiConst::orderStateWaitSend){
// $where['shipping_type']=array('eq',ApiConst::bySelf);
// $where['order_state']=array('eq',ApiConst::orderStateWaitRecieve);
// }
$where['order_state'] = array('in', explode(',', $orderState));
}
}
......@@ -319,6 +327,7 @@ class OrderServiceModel extends \Business\AbstractModel
$orderGoodsDao->update($where,$orderGoodsUpdateData);
}
}
\Our\RedisHelper::rpush('client_push',array('storeId'=>$order['storeId'],'type'=>ApiConst::messageWaitReceive,'op'=>NameConst::reduce,'num'=>ApiConst::one,'params'=>array('c'=>'shopkeeper','m'=>'orderDetail','orderId'=>$order['orderId'])));
if ($memberId) {
$orderDao->deleteOrderCache($memberId, $orderId, $order['storeId'],true);
// $memberDao->fromOrderStateToOrderState($memberId,$order['order_state'],ApiConst::orderStateCancel);
......@@ -334,7 +343,6 @@ class OrderServiceModel extends \Business\AbstractModel
//确认收货
public function confirmRecieve($orderId, $memberId)
{
error_reporting(E_ALL);
$orderDao = \DAO\Order\OrderModel::getInstance(DbNameConst::masterDBConnectName);
// $orderDao->deleteOrderCache($memberId, $orderId);
$order = $orderDao->findByOrderId($orderId);
......@@ -344,6 +352,12 @@ class OrderServiceModel extends \Business\AbstractModel
if ($isAllowConfirm) {
$res = $orderDao->updateStatusByOrderId($orderId, ApiConst::orderStateComplete, TRUE);
if ($res) {
if($order['shipping_type']==ApiConst::bySelf){
$type=ApiConst::messageWaitGet;
}else{
$type=ApiConst::messageWaitSend;
}
\Our\RedisHelper::rpush('client_push',array('storeId'=>$order['storeId'],'type'=>$type,'op'=>NameConst::reduce,'num'=>ApiConst::one,'params'=>array('c'=>'shopkeeper','m'=>'orderDetail','orderId'=>$order['orderId'])));
$orderDao->deleteOrderCache($memberId, $orderId, $order['store_id'],true,true);
return true;
} else {
......@@ -417,6 +431,7 @@ class OrderServiceModel extends \Business\AbstractModel
public function pushRecieveOrder($order){
$push = Push::getInstance();
$push->recieveWait($order['storeId'], $order['orderId'], $order['orderSn']);
\Our\RedisHelper::rpush('client_push',array('storeId'=>$order['storeId'],'type'=>ApiConst::messageWaitReceive,'op'=>NameConst::add,'num'=>ApiConst::one,'params'=>array('c'=>'shopkeeper','m'=>'orderDetail','orderId'=>$order['orderId'])));
$push->sendTcpMessage();
$messageService=\Business\Message\MessageServiceModel::getInstance(\Our\DbNameConst::masterDBConnectName);
$messageService->addMessageCenterToDb();
......@@ -435,6 +450,7 @@ class OrderServiceModel extends \Business\AbstractModel
$orders = $orderDao->getRecieveOrders(ApiConst::orderStateWaitConfirm, $addTime, $pageBegin, PageConst::taskPageSize);
foreach ($orders['list'] as $order) {
$push->recieveWait($order['storeId'], $order['orderId'], $order['orderSn']);
}
$pageBegin++;
} while (!empty($orders['list']));
......
......@@ -34,7 +34,6 @@ class ShopkeeperServiceModel extends \Business\AbstractModel
private $lastFavId;
private $taskIndex;
private $taskSize;
public $clientType = false;
public function init()
{
......@@ -249,6 +248,13 @@ class ShopkeeperServiceModel extends \Business\AbstractModel
$update_data['order_state'] = ApiConst::orderStateWaitSend;
$update_data['accept_time'] = TIMESTAMP;
$result = $orderDao->update($where, $update_data);
if($order['shipping_type']==ApiConst::bySelf){
$type=ApiConst::messageWaitGet;
}else{
$type=ApiConst::messageWaitSend;
}
\Our\RedisHelper::rpush('client_push',array('storeId'=>$order['storeId'],'type'=>ApiConst::messageWaitReceive,'op'=>NameConst::reduce,'num'=>ApiConst::one,'params'=>array('c'=>'shopkeeper','m'=>'orderDetail','orderId'=>$order['orderId'])));
\Our\RedisHelper::rpush('client_push',array('storeId'=>$order['storeId'],'type'=>$type,'op'=>NameConst::add,'num'=>ApiConst::one,'params'=>array('c'=>'shopkeeper','m'=>'orderDetail','orderId'=>$order['orderId'])));
$orderDao->deleteOrderCache($order['buyer_id'], $orderId, $order['store_id'], true);
// \Our\RedisHelper::memberTotalFromStateToState($order['buyer_id'], $order['order_state'], ApiConst::orderStateWaitSend);
return $result;
......@@ -274,7 +280,6 @@ class ShopkeeperServiceModel extends \Business\AbstractModel
$orderDao = \DAO\Order\OrderModel::getInstance();
$goodsDao = \DAO\GoodsModel::getInstance();
$orderCommonDao = \DAO\Order\OrderCommonModel::getInstance();
$returnData = \Our\RedisHelper::cachedFunction(\Redis\Db5\OrderRedisModel::getInstance(), array(&$orderDao, 'getList'), array($where, $orderDao->getOrderDetailField(), $pageIndex, $pageSize, $order, \Our\ApiConst::oneDaySecond, array($storeId)));
//$returnData = $orderDao->getOrders($where, $this->orderListField, $pageIndex, $pageSize);
$orders = $returnData['list'];
......@@ -372,10 +377,15 @@ class ShopkeeperServiceModel extends \Business\AbstractModel
$allQuery['bool'] = array();
if (!empty($keyword)) {
$orderState = !empty($orderState) ? $orderState : false;
if (strlen($keyword) == ApiConst::four) {
if ($orderState == ApiConst::oneHandred ){
$where = 'han_order.store_id=' . $storeId;
$where .= ' and han_order.shipping_type=' . ApiConst::bySelf;
$where .= Common::format(" and SUBSTRING(order_sn, {0}, {1})='{2}'", ApiConst::positionPickupCodeBeginMysql, ApiConst::four, $keyword);
} else {
}else if($orderState== ApiConst::orderStateWaitPay){
$where = 'han_order.store_id=' . $storeId;
$where .= ' and han_order.order_state=' . $orderState;
$where .= Common::format(" and (order_sn ={0} or buyer_email={0})", $keyword);
}else{
$where = $this->getOrderIndexWhere($storeId, $keyword, $pageIndex, $pageSize, $orderState);
}
} else {
......
......@@ -28,16 +28,7 @@ class StoreServiceModel extends \Business\AbstractModel{
if(!$storeId){
\Error\ErrorModel::throwException(\Error\CodeConfigModel::emptyStoreId);
}
if($address) {
$lng = $address['lng'];
$lat = $address['lat'];
}else{
$lng = $param['lng'];
$lat = $param['lat'];
}
if(!$lng || !$lat){
\Error\ErrorModel::throwException(\Error\CodeConfigModel::emptyLatLngParam);
}
list($storeInfo,$storeLabel) = \DAO\StoreModel::getInstance()->get($storeId);
if((int)$param['isScan'] > 0) {
//扫码进入
......@@ -100,14 +91,21 @@ class StoreServiceModel extends \Business\AbstractModel{
$monthlySalesCount = $monthlySalesCount ? $monthlySalesCount : 0;
//位置相关
$distince = \Our\CommonExtension::getDistance($lat,$lng,$storeInfo['store_latitude'],$storeInfo['store_longitude']);
if($address) {
$lng = $address['lng'];
$lat = $address['lat'];
}else{
$lng = $param['lng'];
$lat = $param['lat'];
}
$defaultDeliveryTime = 0;
if($distince>0){
$in_store_service_flag=0;
if($lng && $lat){
$location = array('lat'=>$lat,'lng'=>$lng);
$in_store_service_flag = \Store\StoreUtil::getInstance()->checkAddressInServiceArea($location,$storeId);
if($in_store_service_flag){
$in_store_service_flag=1;
$in_store_service = \Store\StoreUtil::getInstance()->checkAddressInServiceArea($location,$storeId);
$in_store_service && $in_store_service_flag = 1;
if($in_store_service_flag) {
$distince = \Our\CommonExtension::getDistance($lat,$lng,$storeInfo['store_latitude'],$storeInfo['store_longitude']);
$DeliveryFormulaInstance = \DAO\DeliveryFormulaModel::getInstance();
$deliveryFormula = \Our\RedisHelper::cachedFunction(\Redis\Db6\DeliveryFormulaRedisModel::getInstance(),array(&$DeliveryFormulaInstance, 'getOne'),array('*',array('store_id'=>$storeId)),\Our\ApiConst::sevenDaySecond,array($storeId));
$formula = $DeliveryFormulaInstance->getDeliveryFormulaByDistince($storeId,$distince,$deliveryFormula);
......@@ -116,12 +114,8 @@ class StoreServiceModel extends \Business\AbstractModel{
$defaultDeliveryTime = (empty($formula['default_time'])?$formula[2]['time']:$formula['default_time']);
}
if(!$defaultDeliveryTime){
//$in_store_service_flag = 0;
$defaultDeliveryTime = 0;
}
}else{
$in_store_service_flag=0;
$defaultDeliveryTime = 0;
}
}
//关注
......@@ -133,7 +127,11 @@ class StoreServiceModel extends \Business\AbstractModel{
$favType = 1;
}
}
return array('storeLabel'=>$storeLabel,'storeName'=>$storeInfo['store_name'],'grade'=>$grade,'fansCount'=>\DAO\FavoritesStoreModel::getInstance()->getFavoritesStoreCountByStoreId($storeId),'favType'=>$favType,'monthlySalesCount'=>$monthlySalesCount,'defaultDeliveryTime'=>$defaultDeliveryTime,'freeShippingPrice'=>$storeInfo['free_shipping_price'],'storeDistance'=>$distince,'storeNotice'=>$storeInfo['store_notice'],'startShippingPrice'=>$storeInfo['start_shipping_price'],'memberId'=>$storeInfo['member_id'],'inStoreService'=>$in_store_service_flag,'adv'=>$adv,'memberId'=>$storeInfo['member_id']);
//营业时间
$businessHours = $storeInfo['store_start_time'].' - '.$storeInfo['store_close_time'];
$sellerDistribution = $storeInfo['seller_distribution'];
$buyerDistribution = $storeInfo['buyer_distribution'];
return array('storeLabel'=>$storeLabel,'storeName'=>$storeInfo['store_name'],'grade'=>$grade,'fansCount'=>\DAO\FavoritesStoreModel::getInstance()->getFavoritesStoreCountByStoreId($storeId),'favType'=>$favType,'monthlySalesCount'=>$monthlySalesCount,'defaultDeliveryTime'=>$defaultDeliveryTime,'freeShippingPrice'=>$storeInfo['free_shipping_price'],'storeDistance'=>$distince,'storeNotice'=>$storeInfo['store_notice'],'startShippingPrice'=>$storeInfo['start_shipping_price'],'memberId'=>$storeInfo['member_id'],'inStoreService'=>$in_store_service_flag,'adv'=>$adv,'memberId'=>$storeInfo['member_id'],'businessHours'=>$businessHours,'sellerDistribution'=>$sellerDistribution,'buyerDistribution'=>$buyerDistribution);
}
/**
......
......@@ -19,13 +19,14 @@ class FeedBackServiceModel extends \Business\AbstractModel
* @return bool
* @throws \Exception
*/
public function saveFeedback($param, $storeId, $memberId) {
public function saveStoreFeedback($param, $storeId, $memberId) {
$storeDAO = \DAO\StoreModel::getInstance();
$feedbackDescribe = trim($param['feedbackDescribe']);
$feedbackTelephone = $storeDAO->getInfoById($storeId, 'store_phone', true);
if(!$feedbackDescribe){
\Error\ErrorModel::throwException(\Error\CodeConfigModel::emptyFeedbackDescribe);
}
$feedbackTelephone = $storeDAO->getInfoById($storeId, 'store_phone', 'store_phone');
$insert = array();
$insert['feedback_type'] = 1; //店铺意见反馈
$insert['feedback_describe'] = $feedbackDescribe;
......@@ -40,6 +41,51 @@ class FeedBackServiceModel extends \Business\AbstractModel
return true;
}
public function saveFeedback($param,$memberId){
$feedbackDescribe = trim($param['feedbackDescribe']);
$feedbackTelepone = trim($param['feedbackTelepone']);
$feedbackTelephone = trim($param['feedbackTelephone']);
$telephone = $feedbackTelepone ? $feedbackTelepone : $feedbackTelephone;
$type = (int)$param['type'];
if(!$feedbackDescribe || mb_strlen($feedbackDescribe) < 10){
\Error\ErrorModel::throwException(\Error\CodeConfigModel::emptyFeedbackDescribe);
}
// if(!$telephone){
// \Error\ErrorModel::throwException(\Error\CodeConfigModel::emptyFeedbackDescribe);
// }
// $return = \Our\Common::checkMobilePhone($telephone);
// if($return === false){
// \Error\ErrorModel::throwException(\Error\CodeConfigModel::feedbackTelError);
// }
$imgArr = array();
for ($i = 0 ; $i < 2 ; $i++){
$number = str_replace(array(0,1,2),array('A','B','C'),$i);
$image = $param['image'.$number];
if($image && $type == 0){
$time = date('YmdHis_');
$file_name = $time.\Our\Validate::getNumberString();
$result = \Our\ImageUtil::uploadBase64Image($image,\Our\ImageConst::feedback,$file_name);
if($result){
$result = \Our\Common::getStaticFile($file_name,\Our\ImageConst::feedback);
$imgArr[] = pathinfo($result)['basename'];
}
}else{
$imgArr[] = pathinfo($image)['basename'];
}
}
$insert = array();
$insert['feedback_image'] = serialize($imgArr);
$insert['feedback_describe'] = $feedbackDescribe;
$insert['feedback_time'] = time();
$insert['feedback_telephone'] = $telephone;
$insert['member_id'] = $memberId;
$return = \DAO\FeedBackModel::getInstance()->insert($insert);
if(!$return){
\Error\ErrorModel::throwException(\Error\CodeConfigModel::saveFeedbackError);
}
}
private static $_instance = null;
/**
......
......@@ -89,8 +89,10 @@ class MemberCenterServiceModel extends \Business\AbstractModel
$memberCenter[NameConst::waitShipments] = $orderDAO->getCount(array('order_state'=>ApiConst::orderStateWaitSend,'buyer_id'=>$memberId));
//待收货数量
$memberCenter[NameConst::waitReceiving] = $orderDAO->getCount(array('order_state'=>ApiConst::orderStateWaitRecieve,'buyer_id'=>$memberId));
//待自提数量
$memberCenter[NameConst::waitSelfLifting] = $orderDAO->getCount(array('order_state'=>ApiConst::orderStateComplete,'buyer_id'=>$memberId,'evaluation_state'=>ApiConst::waitEvaluation));
//待评价数量
$memberCenter[NameConst::waitEvaluate] = $orderDAO->getCount(array('order_state'=>ApiConst::orderStateComplete,'buyer_id'=>$memberId,'evaluation_state'=>ApiConst::waitEvaluation));
$memberCenter[NameConst::waitEvaluate] = $orderDAO->getCount(array('order_state'=>ApiConst::orderStateWaitRecieve,'buyer_id'=>$memberId,'shipping_type'=>ApiConst::bySelf));
//退款中数量
$memberCenter[NameConst::refund] = \DAO\Order\RefundReturnModel::getInstance()->getCount('refund_state != '.ApiConst::refundStateComplete.' AND buyer_id = '.$memberId);
//店铺收藏数量
......@@ -121,6 +123,10 @@ class MemberCenterServiceModel extends \Business\AbstractModel
$memberCenter[NameConst::waitReceiving] = \DAO\Order\OrderModel::getInstance()->getCount(array('order_state'=>ApiConst::orderStateWaitRecieve,'buyer_id'=>$memberId));
$memebrCenterDb1Redis->tableHSet($memberId,NameConst::waitReceiving,$memberCenter[NameConst::waitReceiving]);
}
if($memebrCenterDb1Redis->tableHExists($memberId,NameConst::waitSelfLifting) === false){
$memberCenter[NameConst::waitSelfLifting] = \DAO\Order\OrderModel::getInstance()->getCount(array('order_state'=>ApiConst::orderStateComplete,'buyer_id'=>$memberId,'evaluation_state'=>ApiConst::waitEvaluation));
$memebrCenterDb1Redis->tableHSet($memberId,NameConst::waitSelfLifting,$memberCenter[NameConst::waitSelfLifting]);
}
if($memebrCenterDb1Redis->tableHExists($memberId,NameConst::waitEvaluate) === false){
$memberCenter[NameConst::waitEvaluate] = \DAO\Order\OrderModel::getInstance()->getCount(array('order_state'=>ApiConst::orderStateComplete,'buyer_id'=>$memberId,'evaluation_state'=>ApiConst::waitEvaluation));
$memebrCenterDb1Redis->tableHSet($memberId,NameConst::waitEvaluate,$memberCenter[NameConst::waitEvaluate]);
......
......@@ -48,21 +48,32 @@ class MemberServiceModel extends \Business\AbstractModel
return $user;
}
public function saveMember($member,$client='member'){
foreach($member as $key =>$value){
if(!$value){
$member[$key]=ApiConst::zero;
}
}
if($client=='member'){
$this->addOrUpdateMbUserToken($member);
$member['sendTime']=TIMESTAMP;
$this->memberDb0Redis->tableHMSet(trim($member['member_id']),$member,ApiConst::tenDaySecond);
$this->memberDb0Redis->tableHDel(trim($member['member_id']),'unread_message_count');
}
if($client=='seller'){
$storeRedisDb0=\Redis\Db0\StoreRedisModel::getInstance();
$storeFd=$storeRedisDb0->tableHGet(trim($member['store_id']),'fd');
if(!empty($storeFd)){
$push=\Our\Push::getInstance();
$push->addOneToClient(array('storeId'=>$member['store_id'],'type'=>\Our\ApiConst::messageOtherLogin,'op'=>NameConst::logOut,'num'=>\Our\ApiConst::zero,'params'=>array('c'=>'member','m'=>'logOut')));
$push->sendTcpMessage();
}
$this->updataSellerToken($member);
$member['sendTime']=TIMESTAMP;
$storeRedisDb0->tableHMSet(trim($member['store_id']),$member,ApiConst::tenDaySecond);
}
foreach($member as $key =>$value){
if(!$value){
$member[$key]=ApiConst::zero;
}
}
$member['sendTime']=TIMESTAMP;
$this->memberDb0Redis->tableHMSet(trim($member['member_id']),$member,ApiConst::tenDaySecond);
$this->memberDb0Redis->tableHDel(trim($member['member_id']),'unread_message_count');
}
......
......@@ -73,6 +73,10 @@ class GoodsModel extends \DAO\AbstractModel {
$this->setDb();
return $this->db->select($field)->from($this->_tableName)->where($where)->fetchAll();
}
public function getListGroup($where,$field,$groupField){
$this->setDb($this->dbName);
return $this->db->select($field)->from($this->_tableName)->where($where)->group($groupField)->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();
......
......@@ -257,19 +257,23 @@ class GoodsCommonModel extends \DAO\AbstractModel {
if($updateSaleNumFlag&&$op!=\Our\ApiConst::set){
$updateSaleNumOp = $op==\Our\ApiConst::minus?'+':'-';
}
$goodsCommonSql = 'goods_storage = case goods_commonid ';
$goodsCommonSql = ' goods_storage = case goods_commonid ';
$goodsEdittimeSql = ' goods_edittime = case goods_commonid ';
if($updateSaleNumFlag){
$saleNumSql = 'sale_num = case goods_commonid ';
}
for ($i = 0; $i < count($datas); $i++) {
$goodsCommonSql .= \Our\Common::format(" WHEN {0} THEN goods_storage{1}{2} ", $datas[$i]['goodsCommonId'],\Our\ArrayConst::ops[$op], $datas[$i]['goodsNum']);
$goodsEdittimeSql .= \Our\Common::format(" WHEN {0} THEN goods_edittime={1}", $datas[$i]['goodsCommonId'],TIMESTAMP);
if($updateSaleNumFlag){
$saleNumSql .= \Our\Common::format(" when {0} THEN sale_num {1}{2} ", $datas[$i]['goodsCommonId'],$updateSaleNumOp, $datas[$i]['goodsNum']);
}
$dataIds[] = $datas[$i]['goodsCommonId'];
if ($i % 1000 == 0 && $i != 0) {
$goodsCommonSql = trim($goodsCommonSql,',').' END';
$goodsEdittimeSql = trim($goodsEdittimeSql,',').' END';
$updateAllSql .= $goodsCommonSql;
$updateAllSql .= $goodsEdittimeSql;
if($updateSaleNumFlag){
$saleNumSql = ','.trim($saleNumSql,',').' END ';
$updateAllSql .= $saleNumSql;
......@@ -281,6 +285,7 @@ class GoodsCommonModel extends \DAO\AbstractModel {
}
$updateAllSql = $baseSql;
$goodsCommonSql = 'goods_storage = case goods_commonid ';
$goodsEdittimeSql = ' goods_edittime = case goods_commonid ';
if($updateSaleNumFlag){
$saleNumSql = 'sale_num = case goods_commonid ';
}
......@@ -289,7 +294,9 @@ class GoodsCommonModel extends \DAO\AbstractModel {
}
if ($goodsCommonSql) {
$goodsCommonSql = trim($goodsCommonSql,',').' END ';
$goodsEdittimeSql = trim($goodsEdittimeSql,',').' END';
$updateAllSql .= $goodsCommonSql;
$updateAllSql .= $goodsEdittimeSql;
if($updateSaleNumFlag){
$saleNumSql = ','.trim($saleNumSql,',').' END ';
$updateAllSql .= $saleNumSql;
......
......@@ -255,7 +255,7 @@ class MemberModel extends \DAO\AbstractModel
$return[$key] = ApiConst::zero;
}
}
$memberDb0Redis->tableHMSet($memberId, $member);
$memberDb0Redis->tableHMSet($memberId, $member,ApiConst::tenDaySecond);
}
return $return;
}
......
......@@ -268,6 +268,9 @@ class OrderModel extends \DAO\AbstractModel
$where['order_id'] = $orderIds;
}
$where = $this->db->getSqlWhereByArray($where);
if($status==ApiConst::orderStateComplete){
$data['is_receive_payment']=ApiConst::receivePayment;
}
$data['order_state'] = $status;
$data['finnshed_time']=TIMESTAMP;
if ($isConfirm) {
......@@ -1092,7 +1095,17 @@ class OrderModel extends \DAO\AbstractModel
* pcClient 获得订单数量
*/
public function getClienOrderCommon($orderId){
$returnData=array();
$order = \Our\RedisHelper::cachedFunction(\Redis\Db5\OrderRedisModel::getInstance(), array(&$this, 'findByOrderId'), array($orderId), \Our\ApiConst::oneDaySecond, array($orderId));
$returnData['couponAmount'] = ($order['goodsAmount'] + $order['shippingFee']) - $order['orderAmount'];//优惠券金额
$returnData['receiveAmount'] = $order['goodsAmount'] - $returnData['couponAmount'];
$returnData['orderAmount'] = $order['orderAmount'] + $returnData['couponAmount'];
$returnData['shippingFee']=$order['shippingFee'];
return $returnData;
}
public function getCountByOrderState($storeId,$orderState){
$where['store_id']=$storeId;
$where['order_state']=$orderState;
......
......@@ -413,7 +413,7 @@ class RefundReturnModel extends \DAO\AbstractModel {
}
$this->setDb($this->dbName);
if (is_array($data)) {
$result = $this->db->update($this->_tableName)->rows($data)->where($where)->execute();
$result = $this->db->update($this->_tableName)->rows($data)->where($condition)->execute();
return $result;
} else {
return false;
......
<?php
namespace DAO;
/**
* 卖家操作日志
* Class SellerLogModel
* @package DAO
*/
class SellerLogModel extends \DAO\AbstractModel {
private $logField = 'log_content as logContent , log_time as logTime';
/**
* 表名
*
* @var string
*/
protected $_tableName = 'han_seller_log';
/**
* 主键
*
* @var string
*/
protected $_primaryKey = 'log_id';
public function init(){
}
public function insert($param){
$param['log_time'] =TIMESTAMP;
$this->setDb(\Our\DbNameConst::masterDBConnectName);
return $this->db->insert($this->_tableName)->rows($param)->execute();
}
/**
* 记录操作日志
* @param $content
* @param int $state
* @param array $seller
* @return mixed
*/
public function record($content, $seller = array(), $state = 1){
$seller_info = array();
$seller_info['log_content'] = $content;
$seller_info['log_time'] = TIMESTAMP;
$seller_info['log_seller_id'] = $seller['seller_id'];
$seller_info['log_seller_name'] = $seller['seller_name'];
$seller_info['log_store_id'] = $seller['store_id'];
$seller_info['log_seller_ip'] = $_SERVER['REMOTE_ADDR'];
$seller_info['log_url'] = $_SERVER['REQUEST_URI'];
$seller_info['log_state'] = $state;
return $this->insert($seller_info);
}
public function getList($where){
$this->setDb($this->dbName);
if(is_array($where)){
$where=$this->db->getSqlWhereByArray($where);
}
$result = $this->db->select($this->logField)->from($this->_tableName)->where($where)->fetchAll();
return $result;
}
/**
* 类实例
*
* @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;
}
}
......@@ -790,7 +790,7 @@ class CodeConfigModel
self::saleNotJoin => '你没有参加这个销售活动',
self::saleActOrGoodsNotExist => '活动或商品不存在',
//意见信箱
self::emptyFeedbackDescribe => '反馈内容不能为空',
self::emptyFeedbackDescribe => '请填写10个字以上的清楚问题描述以便我们提供更好的帮助',
self::emptyFeedbackTelepone => '联系方式不能为空',
self::saveFeedbackError => '保存意见反馈信息失败',
self::feedbackTelError => '手机号码格式错误',
......
<?php
namespace Redis\Db0;
/**
* 用户信息缓存
*/
class StoreRedisModel extends \Redis\Db0\AbstractModel {
/**
* 表名
*
* @var string
*/
protected $_tableName = 'han_store';
/**
* 计算key
*
* @param int $id
* @return string
*/
public function calcKey($id) {
return $this->_tableName . self::DELIMITER . $id;
}
/**
* 根据id查找用户信息
*
* @param int $id
* @return array
*/
public function find($id) {
$result = $this->get($this->calcKey($id));
if ($result) {
return json_decode($result, true);
}
return null;
}
public function tableExists($h){
return $this->exists($this->calcKey($h));
}
/**
* 更新数据
*
* @param int $id
* @param array $data
*/
public function update($id, $data,$expire=\Our\ApiConst::zero) {
return $this->set($this->calcKey($id), json_encode($data),$expire);
}
public function tableHSet($h,$key,$val,$experio=0){
return $this->hset($this->calcKey($h),$key,$val,$experio);
}
public function tableHGet($h,$key){
return $this->hget($this->calcKey($h),$key);
}
public function tableHMSet($h,$keysvalue,$experio=0){
return $this->hmset($this->calcKey($h),$keysvalue,$experio);
}
public function tableHMGet($h,$keyvalues){
return $this->hmget($this->calcKey($h),$keyvalues);
}
public function tableHGAll($h){
return $this->hGetAll($this->calcKey($h));
}
public function tableDel($h){
return $this->del($this->calcKey($h));
}
public function tableExpire($key,$experio=0){
return $this->expire($this->calcKey($key),$experio);
}
public function tableCacheGet($id){
$result = $this->get($this->calcKey($id));
return $result;
}
public function tableCacheSet($id,$data,$experio){
$res=$this->set($this->calcKey($id), $data,$experio);
return $res;
}
public function tableHIncrBy($h,$key,$keysvalue){
return $this->hIncrBy($this->calcKey($h),$key,$keysvalue);
}
public function tableHDel($mid,$key){
$res=$this->hDel($this->calcKey($mid), $key);
return $res;
}
/**
* 类实例
*
* @var \Redis\Db0\UserModel
*/
private static $_instance = null;
/**
* 获取类实例
*
* @return \Redis\Db0\UserModel
*/
public static function getInstance() {
if (!(self::$_instance instanceof self)) {
self::$_instance = new self();
}
return self::$_instance;
}
}
<?php
class FeedbackController extends \Our\Controller_AbstractApi {
class FeedbackController extends \Our\Controller_AbstractClient {
public function init(){
parent::init();
}
public function saveFeedbackAction(){
$msg = \Business\User\FeedBackServiceModel::getInstance()->saveFeedback($this->req[\Our\NameConst::data], $this->storeId,$this->memberId);
$msg = \Business\User\FeedBackServiceModel::getInstance()->saveStoreFeedback($this->req[\Our\NameConst::data], $this->storeId, $this->memberId);
$this->success('');
}
}
\ No newline at end of file
......@@ -241,11 +241,13 @@ class ShopkeeperController extends \Our\Controller_AbstractClient {
$type = intval($this->req['data']['type']);
$refundService=\Business\Order\RefundServiceModel::getInstance();
$pageIndex=$this->getPageIndex();
$pageSize=$this->getPageSize();
$pageSize=$this->getPageSize(8);
$res=$refundService->getStoreRefundList($this->storeId, $type, $pageIndex, $pageSize);
$this->success($res);
}
/**
* 同意退款
*/
......@@ -257,7 +259,7 @@ class ShopkeeperController extends \Our\Controller_AbstractClient {
$refundService=\Business\Order\RefundServiceModel::getInstance();
$refundAmount = floatval($this->req['data']['refundAmount']);
$text = trim($this->req['data']['text']);
$res = $refundService->refund($this->storeId, $refundId,$refundAmount, $text);
$res = $refundService->refund($this->storeId, $this->sellerId, $this->sellerName, $refundId, $refundAmount, $text);
$this->success($res);
}
......@@ -271,7 +273,7 @@ class ShopkeeperController extends \Our\Controller_AbstractClient {
}
$refundService=\Business\Order\RefundServiceModel::getInstance();
$text = trim($this->req['data']['text']);
$res = $refundService->refund($this->storeId, $refundId,0, $text, 3);
$res = $refundService->refund($this->storeId, $this->sellerId, $this->sellerName, $refundId,0, $text, 3);
$this->success($res);
}
......@@ -286,7 +288,7 @@ class ShopkeeperController extends \Our\Controller_AbstractClient {
}
$refundService=\Business\Order\RefundServiceModel::getInstance();
$goodsState= intval($this->req['data']['goodsState']);
$res = $refundService->receive($this->storeId, $refundId, $goodsState);
$res = $refundService->receive($this->storeId, $this->sellerId, $this->sellerName, $refundId, $goodsState);
$this->success($res);
}
......@@ -313,6 +315,19 @@ class ShopkeeperController extends \Our\Controller_AbstractClient {
$res = $refundService->setReceiveTime($this->storeId, $refundId, $receiveTime);
$this->success($res);
}
/**
* 获得退款详情接口
*
* @ccw
*/
public function getRefundDetailAction(){
$refundService =\Business\Order\RefundServiceModel::getInstance();
$res=$refundService->getInfo($this->req[\Our\NameConst::data]['refundId']);
$this->success($res);
}
}
......@@ -59,15 +59,20 @@ class UserController extends \Our\Controller_AbstractIndex {
// }
// $userToken=$this->memberService->findMbUserTokenByMemberId($shopKeeperServvice['token']);
if($member){
$this->memberService->clearKey($this->key);
//$this->memberService->clearKey($this->key);
$this->key=Common::bulidToken($mobile,$password);
session_id($this->key);
$this->sess['member_id']=(int)$member['member_id'];
$this->sess['store_id']=(int)$seller['storeId'];
$this->sess['seller_name']=$seller['sellerName'];
$this->sess['seller_id']=$seller['sellerId'];
$this->sess[NameConst::sessionKey]=$this->key;
$member[NameConst::sessionKey]=$this->key;
$member['store_id']=$seller['storeId'];
$member['seller_id']=$seller['sellerId'];
$member['seller_name']=$seller['sellerName'];
//通知退出
$this->memberService->saveMember($member,'seller');
$this->success(array('key'=>$this->key,'memberName'=>$member['member_name'],'memberMobile'=>$member['member_mobile'],'memberAvatar'=>$member['memberAvatarUrl'],'memberId'=>(int)$member['member_id'],'storeId'=>(int)$seller['storeId']));
}else{
......
......@@ -472,8 +472,8 @@ password.key='~!@#$`1234qwertasdfgzxcvb'
;redis.database.params.password = "test"
;推送配置
push.clientHost="ws://192.168.80.18:9502"
push.host="192.168.80.18"
push.clientHost="ws://127.0.0.1:9502"
push.host="127.0.0.1"
push.port="9503"
push.open=1
push.user.service.id=293
......
This diff is collapsed.
......@@ -72,6 +72,30 @@ class cliOrderClose extends basecli
}
$redis->close();
}
protected function autoPushClient(){
$conf = \Yaf\Registry::get('config')->get('redis.database.params');
$redis = new \Redis();
$redis->pconnect($conf['host'], $conf['port']);
if (!empty($conf['password'])) {
$redis->auth($conf['password']);
}
$push=\Our\Push::getInstance();
while($pushData=$redis->lPop('client_push')){
$addData = unserialize($pushData);
$push->addOneToClient($addData);
}
$goodsCommonService=\Business\Goods\GoodsCommonServiceModel::getInstance();
$stores=$goodsCommonService->getAlertGoods();
if(!empty($stores)){
foreach($stores as $store){
$addData=array('storeId'=>$store['storeId'],'type'=>\Our\ApiConst::messageGoodsAlert,'op'=>\Our\NameConst::set,'num'=>$store['count'],'params'=>array());
$push->addOneToClient($addData);
}
}
$push->sendTcpMessage();
$redis->close();
}
protected function _runCli()
{
......@@ -105,8 +129,12 @@ class cliOrderClose extends basecli
file_put_contents($this->lockFileName ,"running" ); // CLI 独占锁
}
$this->autoPushMessage();
echo date('Y-m-d H:i:s',TIMESTAMP).'消息推送成功'."\r\n";
$this->autoPushClient();
echo date('Y-m-d H:i:s',TIMESTAMP).'客户端消息推送成功'."\r\n";
}
}
......
......@@ -8,6 +8,7 @@
define("APPLICATION_PATH", realpath(dirname(__FILE__) . '/../../../')); //指向public的上一级
define("KEY_REDIS_PRE","PHPREDIS_SESSION:");
define("KEY_PRE","qm_:han_member:");
define("KEY_PRE_STORE","qm_:han_store:");
require APPLICATION_PATH . '/scripts/crontab/common.php';
header("Access-Control-Allow-Origin: *");
header('Access-Control-Allow-Method: *');
......@@ -136,9 +137,16 @@ $serv->on('Message', function($server, $frame) use($conf){
//echo $res;
$matchs=array();
preg_match("/member_id\|i:(\d+)/i",$sessData,$matchs);//现在
$storeMatchs=array();
preg_match("/store_id\|i:(\d+)/i",$sessData,$storeMatchs);//现在
// preg_match("/member_id\|i[^\d]{1,3}(\d+)/i",$res,$matchs);过去
$memberId=$matchs[1];
echo "success".$memberId.'login||||';
if(isset($storeMatchs[1]) && $storeMatchs[1]>0 ){
$storeId=$storeMatchs[1];
}else{
$storeId=0;
}
echo "success:memberid=".$memberId.'login'."\n";
$redis->expire($realKey,\Our\ApiConst::tenDaySecond);
if($memberId==(int)$memberId){
switch($method) {
......@@ -154,7 +162,11 @@ $serv->on('Message', function($server, $frame) use($conf){
];
echo 'set:'.KEY_PRE.$memberId,'fd:'.$frame->fd."\r\n";
$redis->hSet(KEY_PRE.$memberId,'fd', $frame->fd);
if($storeId){
$redis->hSet(KEY_PRE_STORE.$storeId,'fd', $frame->fd);
}
$server->push($frame->fd,responseJson($async_login_data['status'],$async_login_data['method'],$async_login_data['message'], $async_login_data['data']));
$redis->close();
break;
default:
break;
......@@ -228,18 +240,25 @@ $tcp_server->on('receive', function($serv, $fd, $from_id, $data) use($conf) {
$serv->close($fd);
if(!isset($data['uid']) || empty($data['uid'])){
foreach($data['data'] as $value){
$async_data = $redis->rPush("message_center", serialize($value));
if($async_data){
$value['message']=unserialize($value['message']);
$sendFd=$redis->hGet(KEY_PRE.$value['toId'],'fd');
$redis->hIncrBy(KEY_PRE.$value['toId'],'unread_message_count',\Our\ApiConst::one);
if(!empty($sendFd)){
$serv->push($sendFd, responseJson(1,"fromMsg","success", $value));
$redis->hSet(KEY_PRE.$value['fromId'],'sendTime', time());
if(isset($value['type'])&&$value['type']>100){
echo json_encode($value);
$sendStoreFd=$redis->hGet(KEY_PRE_STORE.$value['storeId'],'fd');
if(!empty($sendStoreFd)){
$serv->push($sendStoreFd, responseJson(1,"fromMsg","success", $value));
}
}else{
$async_data = $redis->rPush("message_center", serialize($value));
if($async_data){
$value['message']=unserialize($value['message']);
$sendFd=$redis->hGet(KEY_PRE.$value['toId'],'fd');
$redis->hIncrBy(KEY_PRE.$value['toId'],'unread_message_count',\Our\ApiConst::one);
if(!empty($sendFd)){
$serv->push($sendFd, responseJson(1,"fromMsg","success", $value));
$redis->hSet(KEY_PRE.$value['fromId'],'sendTime', time());
}
}
}
}
}else{
$async_data = $redis->rPush("message_center",serialize($data['data']));
......
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