Commit 31ec8777 authored by christ's avatar christ

merge

parents 90fef9a5 98908cb0
......@@ -116,12 +116,43 @@ class CartController extends \Our\Controller_AbstractApi{
//var_dump($storeCartData);
$storeCartData = $cartService->checkCouponForCart($storeCartData,$this->memberId);
//$this->success($storeCartData);
$storeCartData = $cartService->getDeliveryTypeForCart($address,$storeCartData);
$data = $cartService->getFormatCartListForOrder($storeCartData,$address);
if(CURRENTVERSION==\Our\NameConst::versionOne){
$storeCartData = $cartService->getDeliveryTypeForCartNew($address,$storeCartData);
//$this->success($storeCartData);
$data = $cartService->getFormatCartListForOrderNew($storeCartData,$address);
}else{
$storeCartData = $cartService->getDeliveryTypeForCart($address,$storeCartData);
$data = $cartService->getFormatCartListForOrder($storeCartData,$address);
}
$this->success($data);
}
/**
* 购物车购买
*/
public function checkoutNewAction(){
$cartService = \Business\Cart\CartServiceModel::getInstance();
$data = $this->req[\Our\NameConst::data];
$sess=\Yaf\Session::getInstance();
$currentAddress = $sess->get('currentAddress');
$address = $cartService->checkCurrentAddress($currentAddress,$this->memberId);
$storeCartList = $cartService->checkCart($data,$this->memberId);
$pBundlingService = \Business\Goods\GroupSaleServiceModel::getInstance();
$cartList = $pBundlingService->getFormatCartListForOrder($storeCartList,$this->memberId,true);
$gcIds = isset($cartList['gcIds'])?$cartList['gcIds']:array();
$storeCartData = array('cartList'=>$cartList['list'],'storeIds'=>$storeCartList['storeIds'],'goodsIds'=>$storeCartList['goodsIds'],'goodsCommonIds'=>$storeCartList['goodsCommonIds'],'blIds'=>$storeCartList['blIds'],'gcIds'=>$gcIds);
//var_dump($storeCartData);
$storeCartData = $cartService->checkCouponForCart($storeCartData,$this->memberId);
//$this->success($storeCartData);
$storeCartData = $cartService->getDeliveryTypeForCartNew($address,$storeCartData);
$data = $cartService->getFormatCartListForOrderNew($storeCartData,$address);
$this->success($data);
}
/**
* 立即购买
*/
......@@ -138,8 +169,14 @@ class CartController extends \Our\Controller_AbstractApi{
$storeCartData = array('cartList'=>$cartList['list'],'storeIds'=>array_keys($cartList['list']),'goodsIds'=>$cartList['goodsIds'],'goodsCommonIds'=>$cartList['goodsCommonIds'],'blIds'=>$cartList['blIds'],'gcIds'=>$gcIds);
$storeCartData = $cartService->checkCouponForCart($storeCartData,$this->memberId);
//$this->success($storeCartData);
$storeCartData = $cartService->getDeliveryTypeForCart($address,$storeCartData);
$data = $cartService->getFormatCartListForOrder($storeCartData,$address);
if(CURRENTVERSION==\Our\NameConst::versionOne){
$storeCartData = $cartService->getDeliveryTypeForCartNew($address,$storeCartData);
//$this->success($storeCartData);
$data = $cartService->getFormatCartListForOrderNew($storeCartData,$address);
}else{
$storeCartData = $cartService->getDeliveryTypeForCart($address,$storeCartData);
$data = $cartService->getFormatCartListForOrder($storeCartData,$address);
}
$this->success($data);
}
......@@ -149,6 +186,7 @@ class CartController extends \Our\Controller_AbstractApi{
$data = $this->req[\Our\NameConst::data];
$sess=\Yaf\Session::getInstance();
$currentAddress = $sess->get('currentAddress');
$result = $cartService->addOrder($data,$this->memberId,$currentAddress);
$this->success($result);
}
......
......@@ -31,6 +31,16 @@ class CollectionController extends \Our\Controller_AbstractApi {
}
/**
* 扫码关注店铺
*/
public function updateScanStoreAction(){
\Business\Store\StoreServiceModel::getInstance()->updateFavoritesStore($this->req[\Our\NameConst::data],$this->memberId);
$this->success(new \stdClass(),\Our\DescribeConst::scanSuccess);
}
/**
* 关注 商品
*
......
......@@ -13,8 +13,9 @@ class GoodsController extends \Our\Controller_AbstractIndex {
* 商品详情页
*/
public function getAction(){
$goodsInfo = $this->goodsService->getCommonDetail($this->req[\Our\NameConst::data],$this->memberId);
$store = $this->goodsService->getStore($goodsInfo['storeId']);
$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'],false,false);
$goodsInfo['freeShippingPrice'] = $store['freeShippingPrice'];
$goodsInfo['isQuality'] = $store['isQuality'];
$evaluation =$this->goodsService->getEvaluation($this->req[\Our\NameConst::data]);
......
......@@ -19,10 +19,11 @@ 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']);
$storeInfo = \Business\Goods\GoodsCommonServiceModel::getInstance()->getStore($goods['store_id'],false,false);
unset($storeInfo['freeShippingPrice']);unset($storeInfo['isQuality']);unset($storeInfo['shareDesc']);
$otherGroups = \Business\Goods\GroupSaleServiceModel::getInstance()->getOtherGroup($goods['store_id'],$this->req[\Our\NameConst::data]['groupId']);
\Business\Goods\GroupSaleServiceModel::getInstance()->addBrowseRecord($this->req[\Our\NameConst::data],$this->memberId);
......
......@@ -43,10 +43,22 @@ class HomeController extends \Our\Controller_AbstractIndex{
$shareInfo = \Business\Common\CommonServiceModel::getInstance()->getShareInfo(\Our\ApiConst::sharePlat);
$returnData['shareInfo'] = $shareInfo;
$storeId = $this->getMyFavoritesStoreAction(true);
$returnData['relateStoreId'] = (int)$storeId;
$this->success($returnData);
}
public function getMyFavoritesStoreAction($flag = false){
$mebmerService = \Business\User\MemberServiceModel::getInstance();
$memberId=$this->sess->get('member_id');
$storeId =$mebmerService->getMyFavoritesStore($memberId);
if($flag){
return $storeId;
}
$this->success($storeId);
}
/**
* 设置当前地址
......
......@@ -52,8 +52,11 @@ class IndexController extends \Our\Controller_Abstract {
}
public function indexAction() {
$getKey=$_GET['key'];
if($getKey!='~!@#$`1234qwert'){
throw new Exception('非法',-1111);
}
$orderDao = \DAO\Order\OrderModel::getInstance();
$res=$orderDao->getList(array('buyer_id'=>1),'*',0,10);
echo json_encode($res);exit;
//$list = \Our\RedisHelper::cachedFunction(\Redis\Db4\GoodsBrowserRedisModel::getInstance(),array(&$browseDAO, 'getDistinctDate'),array($memberId,$startTime,$endTime,$order),\Our\ApiConst::twoMinSecond,array($memberId));
......
......@@ -13,9 +13,21 @@ class StoreController extends \Our\Controller_AbstractIndex {
* 获取店铺首页头部
*/
public function getStoreInfoAction(){
$address = \Business\User\AddressServiceModel::getInstance()->getMyAddress($this->req[\Our\NameConst::data],$this->memberId,false);
$storeInfo = $this->storeService->getStoreInfo($this->req[\Our\NameConst::data],$this->memberId, $address);
$storeInfo['share'] = \Business\Common\CommonServiceModel::getInstance()->getShareInfo(\Our\ApiConst::shareStore,$this->req[\Our\NameConst::data]['storeId']);
//获取地址相关信息
$data = $this->req[\Our\NameConst::data];
$addressService = \Business\User\AddressServiceModel::getInstance();
$memberId=$this->sess->get('member_id');
$currentAddress =$addressService->setAddress($data,$memberId);
if(!isset($currentAddress['addresses'])){
$currentAddress['addresses'] = array();
}
//$returnData['currentAddress'] = $currentAddress;
$address = $addressService->getMyAddress($data,$this->memberId,false);
$storeInfo = $this->storeService->getStoreInfo($data,$this->memberId, $address);
$storeInfo['share'] = \Business\Common\CommonServiceModel::getInstance()->getShareInfo(\Our\ApiConst::shareStore,$data['storeId']);
$storeInfo['currentAddress'] = $currentAddress;
$this->success($storeInfo);
}
/**
......
......@@ -66,7 +66,8 @@ class UserController extends \Our\Controller_AbstractIndex {
$this->sess[NameConst::sessionKey]=$this->key;
$member[NameConst::sessionKey]=$this->key;
$this->memberService->saveMember($member);
$this->success(array('key'=>$this->key,'memberName'=>$member['member_name'],'memberAvatar'=>$member['memberAvatarUrl'],'memberId'=>(int)$member['member_id']));
$storeId =$this->memberService->getMyFavoritesStore($member['member_id']);
$this->success(array('key'=>$this->key,'memberName'=>$member['member_name'],'memberAvatar'=>$member['memberAvatarUrl'],'memberId'=>(int)$member['member_id'],'relateStoreId'=>(int)$storeId));
}else{
ErrorModel::throwException(CodeConfigModel::errorUsernameOrPassword);
}
......@@ -102,7 +103,9 @@ class UserController extends \Our\Controller_AbstractIndex {
$this->sess[NameConst::sessionKey]=$this->key;
$member[NameConst::sessionKey]=$this->key;
//$this->memberService->saveMember($member);
$this->success(array('key'=>$this->key,'memberName'=>$member['member_name'],'memberAvatar'=>$member['memberAvatarUrl']));
$storeId =$this->memberService->getMyFavoritesStore($member['member_id']);
$this->success(array('key'=>$this->key,'memberName'=>$member['member_name'],'memberAvatar'=>$member['memberAvatarUrl'],'relateStoreId'=>(int)$storeId));
}
ErrorModel::throwException(CodeConfigModel::wxAuthInfoLoginFailed);
......@@ -154,7 +157,8 @@ class UserController extends \Our\Controller_AbstractIndex {
$member[NameConst::sessionKey]=$this->key;
$member['login_time']=TIMESTAMP;
$this->memberService->saveMember($member);
$this->success(array('userFlag'=>\Our\ApiConst::one,'key'=>$this->key,'memberName'=>$member['member_name'],'memberAvatar'=>$member['memberAvatarUrl'],'memberId'=>(int)$member['member_id']));
$storeId =$this->memberService->getMyFavoritesStore($member['member_id']);
$this->success(array('userFlag'=>\Our\ApiConst::one,'key'=>$this->key,'memberName'=>$member['member_name'],'memberAvatar'=>$member['memberAvatarUrl'],'memberId'=>(int)$member['member_id'],'relateStoreId'=>(int)$storeId));
}else{
$this->success(array('userFlag'=>\Our\ApiConst::zero));
}
......
......@@ -22,6 +22,10 @@ class ApiConst
//一个小时
const oneHour = 3600;
const halfHour = 1800;
//预警时间
const storageAlarmHour = 100000000000000;
const twoMinSecond = 120;
const fiveMinutes=180;
......@@ -35,6 +39,7 @@ class ApiConst
//八小时秒数
const EightHoursSecond = 28800;
const hundred = 100;
const thousand = 1000;
//1分钟秒数
const oneMinSecond = 60;
//成功状态码
......@@ -142,7 +147,9 @@ class ApiConst
const orderStateWaitPay = 10;//待付款
const orderStateWaitConfirm = 20;//待接单
const orderStateWaitSend = 25;//待发货
const orderStateWaitSendOne = 26;//待发货
const orderStateWaitRecieve = 30;//待收货
const orderStateWaitRecieveOne = 31;//待收货
const orderStateComplete = 40;//已完成
const orderStateClose = -1;//关闭定单
const receivePayment = 1;//商家收到货款了
......@@ -175,6 +182,7 @@ class ApiConst
const refundApplyOnlyMoney = 1;
const refundApply = 2;
const refundApplyPlatform = 3;
const sellerUpdateOrderAmount=4;
const goodsStateWaitSend = 1;
const goodsStateWaitRecieve = 2;
......@@ -228,8 +236,9 @@ class ApiConst
const bySelf = 0;
const bySeller = 1;
const express = 2;
//待自提
const oneHandred=100;
//待配送
const oneHandredOne=101;
//文案类型
......@@ -406,6 +415,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;//确认接单
......@@ -428,4 +451,9 @@ class ApiConst
const arriveTimeRadius=1800;
const arrBegin=0;
}
\ No newline at end of file
......@@ -112,6 +112,8 @@ class ArrayConst
ApiConst::refundApplyOnlyMoney=>'买家申请退款',
ApiConst::refundApply=>'买家申请退货退款',
ApiConst::refundApplyPlatform=>'买家申请平台介入',
ApiConst::sellerUpdateOrderAmount=>'卖家修改订单金额',
);
const couponState = array(
......
......@@ -6,6 +6,17 @@ namespace Our;
* 控制器抽象类
*/
abstract class Controller_Abstract extends \Yaf\Controller_Abstract {
public function init(){
$this->req=$this->getRequest()->getPost();
$version = $this->req['data']['currentVersion'];
if($version){
define('CURRENTVERSION',$version);
}else{
define('CURRENTVERSION',\Our\NameConst::versionDefault);
}
}
public function success($data=array(),$shortMessage = DescribeConst::successMessage,$longMessage=DescribeConst::successMessage,$resultCode=ApiConst::returnSuccess)
{
$returnMessage[NameConst::shortMessage] = $shortMessage;
......
......@@ -21,7 +21,7 @@ abstract class Controller_AbstractApi extends \Our\Controller_Abstract {
* api控制器直接输出json格式数据,不需要渲染视图
*/
public function init() {
$this->req=$this->getRequest()->getPost();
parent::init();
$this->checkEncrypt();
if(empty($this->req['data']['key'])){
ErrorModel::throwException(CodeConfigModel::illegalAccess);
......
......@@ -17,10 +17,15 @@ abstract class Controller_AbstractClient extends \Our\Controller_Abstract {
public $key;
public $req;
public $memberId;
public $storeId;
public $sellerName;
public $sellerId;
public $memberName;
/**
* api控制器直接输出json格式数据,不需要渲染视图
*/
public function init() {
parent::init();
$this->req=$this->getRequest()->getPost();
$this->checkEncrypt();
if(empty($this->req['data']['key'])){
......@@ -31,7 +36,10 @@ abstract class Controller_AbstractClient extends \Our\Controller_Abstract {
$sess=\Yaf\Session::getInstance();
$sess->start();
$this->memberId=$sess->get('member_id');
$this->memberName=$sess->get('member_name');
$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);
}
......
......@@ -22,6 +22,7 @@ abstract class Controller_AbstractIndex extends \Our\Controller_Abstract {
}
}
public function init(){
parent::init();
$this->req=$this->getRequest()->getPost();
$postData=$this->req['data'];
$this->checkEncrypt();
......
......@@ -11,5 +11,6 @@ class DbNameConst {
const salveDBConnectName = 'resources.database.slave.params';
const masterDBConnectName = 'resources.database.params';
const drawSource = 'resources.database.drawSource.params';
const mongoDBConnectName='resources.database.mongo.params';
}
\ No newline at end of file
......@@ -76,6 +76,8 @@ class DescribeConst
const collectSuccess = '关注成功';
const scanSuccess = '扫码关注成功';
const cancelCollectSuccess = '取消关注成功';
const moveToFavoritesSuccess = '移入收藏夹成功';
......@@ -171,5 +173,12 @@ class DescribeConst
const anonymity = '匿名用户';
const imageMessage='【图片】';
const updateSuccess='修改成功';
const updateFail='修改失败';
//订单日志角色
const buyerLog='买家';
const sellerLog='商家';
}
?>
\ No newline at end of file
......@@ -111,6 +111,7 @@ class ImageConst{
const groupGoodsImg = 160; //组合详情页的搭配商品
const storeGroupImg = 186; //店铺促销
const storeGroupGoodsImg = 130;
const salestoreImg = 129;//销售详情店铺头像
const cartBlImage = 184;
const cartBlDetailImage = 148;
......
......@@ -117,8 +117,8 @@ class ImageUtil {
* @return mixed|string 返回图片路径
*/
public static function getGoodsImgUrl($goodsImg,$width=\Our\ImageConst::goodsListImgSize, $height = 0){
$width = $width * \Our\ImageConst::sizeScale;
$height ? $height = $height * \Our\ImageConst::sizeScale : $height = $width;
$width = ceil($width * \Our\ImageConst::sizeScale);
$height ? $height = ceil($height * \Our\ImageConst::sizeScale) : $height = $width;
if (empty($goodsImg)) {
$directory =\Our\ImageConst::defaultPath;
//$goodsImg = str_ireplace('.', '_' . $type . '.', 'default_goods_image.gif');
......
......@@ -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,16 @@ class NameConst {
const blGoods = '_goodsCommon';
const pcClient='pc-client';
const add='add';
const reduce='reduce';
const set='set';
const logOut='logOut';
const versionOne = '1.0.0';
const versionDefault = '1.0';
}
?>
\ No newline at end of file
......@@ -13,7 +13,7 @@ class OrderConst {
const waitRecieve="待收货";
const waitPay="待付款";
const waitYouPay="等待您付款";
const waitSend="待发货";
const waitSend="配送中";
const waitSellerSend="等待卖家发货";
const sellerSended="商家已发货";
const waitGetFromShop="待到店自取";
......
......@@ -62,6 +62,10 @@ class Push
$this->toUserType = $data['toType'];
$this->data[] = $data;
}
public function addOneToClient($data)
{
$this->data[] = $data;
}
public function addList($dataList)
{
......
......@@ -89,7 +89,9 @@ class TencentPay {
function postXml()
{
$xml = $this->createXml();
\Our\Log::getInstance()->write($xml,'/data/log/applog');
$this->response = $this->postXmlCurl($xml,$this->pay_url,$this->curl_timeout);
\Our\Log::getInstance()->write(serialize($this->response),'/data/log/applog');
return $this->response;
}
......
<?php
namespace Business;
use Our\NameConst;
/**
* 业务层的抽象类
*/
abstract class AbstractModel {
public $clientType=NameConst::pcClient;
/**
* 不允许克隆对象
......
......@@ -15,6 +15,16 @@ class SettingServiceModel extends \Business\AbstractModel{
return array('version'=>$version['ios_version']);
}
/**
* 获取应用版本
* @return array 版本信息
*/
public function getAppVersion(){
$settingDAO = \DAO\SettingModel::getInstance();
$version = $settingDAO->getListCache(array('app_version'));
return array('version'=>$version['app_version']);
}
public function getServicePhone(){
$settingDAO = \DAO\SettingModel::getInstance();
$phone = $settingDAO->getListCache(array('qm_service_phone'))['qm_service_phone'];
......
......@@ -89,12 +89,13 @@ class GoodsClassServiceModel extends \Business\AbstractModel{
if($serviceParentClassIds){
$classIds = array_merge($serviceParentClassIds,$classIds);
}
/*
//获取可快递店铺对应分类
$expressClassIds = $this->getExpressStoreClasses($where);
if($expressClassIds){
$classIds = array_merge($expressClassIds,$classIds);
}
*/
$classIdKeys = array_flip($classIds);
$goodsClassDao = \DAO\GoodsClassModel::getInstance();
$parentClasses = $goodsClassDao->getParentClasses();
......@@ -193,7 +194,7 @@ class GoodsClassServiceModel extends \Business\AbstractModel{
//判断签约分类是否可以为当前用户提供服务,并且记录这些店铺对应的store_id
if($inAreaFlag){
$store =$storeDao->getStoreInfoCache($signClass['store_id']);
$class_distance = \Our\CommonExtension::getDistance($lat,$lng,$store['store_latitude'],$signClass['store_latitude'],1);
$class_distance = \Our\CommonExtension::getDistance($lat,$lng,$store['store_latitude'],$store['store_latitude'],1);
$class = $signClass;
$class['class_distance'] = $class_distance;
$returnClass[$class_distance] = $class;
......
......@@ -3,6 +3,8 @@
namespace Business\Goods;
use Our\ApiConst;
use Our\Common;
use Zend\Json\Server\Exception\ErrorException;
class GoodsCommonServiceModel extends \Business\AbstractModel
......@@ -14,7 +16,16 @@ class GoodsCommonServiceModel extends \Business\AbstractModel
}
public function setGoodsStorage($storeId, $goodsId, $num = 0, $type='set') {
/**
* 设置库存
* @param $storeId
* @param $goodsId
* @param int $num
* @param string $type
* @return array
* @throws \Exception
*/
public function setGoodsStorage($storeId, $goodsId, $num = 0, $type='add') {
if($goodsId === 0){
\Error\ErrorModel::throwException(\Error\CodeConfigModel::commonError);
}
......@@ -27,13 +38,10 @@ class GoodsCommonServiceModel extends \Business\AbstractModel
if(!$data) {
\Error\ErrorModel::throwException(\Error\CodeConfigModel::goodsNotExist);
}
$op = isset($this->setStorageType[$type]) ? $this->setStorageType[$type] : 2; //默认设置库存
$op = isset($this->setStorageType[$type]) ? $this->setStorageType[$type] : 1; //默认增加库存
$goodsDao->db->doTransaction();
$ret1 = $goodsDao->updateStorage($goodsId, $num, $op);
$ret2 = true;
if($op==1) { //如果就库存调整
$ret2 = $commonDao->updateStorage($data['goods_commonid']);
}
$ret2 = $commonDao->updateStorage($data['goods_commonid'], $op);
if(!$ret1 || !$ret2) {
$goodsDao->db->doRollback();
......@@ -56,6 +64,7 @@ class GoodsCommonServiceModel extends \Business\AbstractModel
//获得列表
if($datas = $goodsDao->getList(implode($where, ' and '), $this->goodsStorageField)) {
foreach ($datas as $key=>$val) {
$datas[$key]['goodsImage']=\Our\ImageUtil::getGoodsImgUrl($val['goodsImage'],\Our\ApiConst::goodsSmallSize);
$datas[$key]['goodsAttr'] = $goodsDao->getFormatGoodsAttr($val['goodsAttr']);
}
}
......@@ -343,11 +352,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,$commonInfo['store_id']);
$in_store_service && $in_store_service_flag = 1;
}
//所在地
$area = '';
if($commonInfo['areaid_1'] && $commonInfo['areaid_2']){
......@@ -390,7 +414,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'],'subheading'=>$commonInfo['goods_jingle'],'inStoreService'=>$in_store_service_flag),$attrs);
}
public function getAttr($goodsCommonId,$memberId = null){
$goodsCommonId = (int)$goodsCommonId;
......@@ -595,7 +619,7 @@ class GoodsCommonServiceModel extends \Business\AbstractModel
$commonInstance = \DAO\GoodsCommonModel::getInstance();
$count = \Our\RedisHelper::cachedFunction(\Redis\Db4\GoodsCommonRedisModel::getInstance(),array(&$commonInstance, 'getCount'),array(array('store_id'=>$storeId)),\Our\ApiConst::oneDaySecond);
return array('storeId'=>$storeId,'storeName'=>$storeInfo['store_name'],'storeLabel'=>\DAO\StoreModel::getInstance()->getStoreLabelSrc($storeInfo['store_label'],\Our\ImageConst::goodsStoreImg),'goodsTotal'=>$count,'isQuality'=>$storeInfo['store_zhping'],'freeShippingPrice'=>$storeInfo['free_shipping_price'],'shareDesc'=>$storeInfo['store_share_desc'],'memberId'=>$storeInfo['member_id']);
return array('storeId'=>$storeId,'storeName'=>$storeInfo['store_name'],'storeLabel'=>\DAO\StoreModel::getInstance()->getStoreLabelSrc($storeInfo['store_label'],\Our\ImageConst::goodsStoreImg),'goodsTotal'=>$count,'isQuality'=>$storeInfo['store_zhping'],'freeShippingPrice'=>$storeInfo['free_shipping_price'],'shareDesc'=>$storeInfo['store_share_desc'],'memberId'=>$storeInfo['member_id'],'isClose'=>$storeInfo['isClose']);
}
/**
......@@ -1280,4 +1304,24 @@ 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;
}
public function getGoodsCount($storeIds){
$goodsDao=\DAO\GoodsModel::getInstance();
$storeIds=implode(',',$storeIds);
$where=Common::format(" store_id in({0}) and goods_storage<goods_storage_alarm",$storeIds);
$stores=$goodsDao->getListGroup($where,"store_id as storeId,count(*) as count","store_id");
return $stores;
}
}
......@@ -6,9 +6,9 @@ use Our\ImageUtil;
class GroupSaleServiceModel extends \Business\AbstractModel {
private $pBundingField = 'han_p_bundling.bl_id AS blId,bl_name AS name,bl_title,store_id,store_name,bl_state,bl_quota_starttime,bl_image,bl_storage,bl_discount_price AS discountPrice,bl_sum_price AS sumPrice,bl_quota_endtime AS endTime,image,is_transport,transport_id,snapshot_id,goods_freight,goods_free';
private $pBundingField = 'han_p_bundling.bl_id AS blId,bl_name AS name,bl_title,store_id,store_name,bl_state,bl_quota_starttime,bl_image,bl_storage,bl_discount_price AS discountPrice,bl_sum_price AS sumPrice,bl_quota_endtime AS endTime,image,is_transport,transport_id,snapshot_id,goods_freight,goods_free,delivery_template_id';
private $pBundingFieldWithDel = 'han_p_bundling.bl_id AS blId,bl_name AS name,bl_title,store_id,store_name,bl_state,bl_quota_starttime,bl_image,bl_storage,bl_discount_price AS discountPrice,bl_sum_price AS sumPrice,bl_quota_endtime AS endTime,image,is_transport,transport_id,snapshot_id,goods_freight,goods_free,is_del';
private $pBundingFieldWithDel = 'han_p_bundling.bl_id AS blId,bl_name AS name,bl_title,store_id,store_name,bl_state,bl_quota_starttime,bl_image,bl_storage,bl_discount_price AS discountPrice,bl_sum_price AS sumPrice,bl_quota_endtime AS endTime,image,is_transport,transport_id,snapshot_id,goods_freight,goods_free,is_del,delivery_template_id';
private $pBundingGoodsField = 'bl_count_price AS discountPrice,num,goods_id,bl_id';
......@@ -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,$data['store_id']);
$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;
......@@ -693,6 +710,7 @@ class GroupSaleServiceModel extends \Business\AbstractModel {
$tempObj['goodsList'] = \Our\Common::convertUnderline($pBundling['goodsList']);
$tempObj['goodsOriginalPrice'] = $pBundling['sumPrice'];
$tempObj['snapshot_id'] = (isset($pBundling['snapshot_id'])&&$pBundling['snapshot_id']>\Our\ApiConst::zero)?$pBundling['snapshot_id']:\Our\ApiConst::zero;
$tempObj['delivery_template_id'] = (isset($pBundling['delivery_template_id'])&&$pBundling['delivery_template_id'])?$pBundling['delivery_template_id']:\Our\ApiConst::zero;
} else if ($tempCart['type'] == \Our\ApiConst::addGoodsToCart) {
$priceArray = \Goods\GoodsUtil::getInstance()->getRealPrice($tempCart['goods_id'],$memberId,null, \Our\ApiConst::addGoodsToCart,$dbName,true);
if(is_array($priceArray)){
......@@ -737,6 +755,7 @@ class GroupSaleServiceModel extends \Business\AbstractModel {
$tempObj['gc_id']=$goodsCommonStorages[$tempCart['goods_commonid']]['gc_id'];
$tempObj['gc_id_2']=$goodsCommonStorages[$tempCart['goods_commonid']]['gc_id_2'];
$tempObj['gc_id_3']=$goodsCommonStorages[$tempCart['goods_commonid']]['gc_id_3'];
$tempObj['delivery_template_id']=$goodsCommonStorages[$tempCart['goods_commonid']]['delivery_template_id']?$goodsCommonStorages[$tempCart['goods_commonid']]['delivery_template_id']:\Our\ApiConst::zero;
$allGcIds[] = $tempObj['gcId'];
$storeGcIds[] = $tempObj['gcId'];
if ($goodsStorage['onlineFlag'] == \Our\ApiConst::one) {
......@@ -887,6 +906,7 @@ class GroupSaleServiceModel extends \Business\AbstractModel {
}
$storeTotalPrice += $pBundling['discountPrice']*$tempObj['goodsNum'];
$tempObj['goodsList'] = \Our\Common::convertUnderline($pBundling['goodsList']);
$tempObj['delivery_template_id'] = $pBundling['delivery_template_id']?$pBundling['delivery_template_id']:\Our\ApiConst::zero;
$tempObj['goodsOriginalPrice'] = $pBundling['sumPrice'];
}else if(isset($data['goodsId'])){
......@@ -945,6 +965,7 @@ class GroupSaleServiceModel extends \Business\AbstractModel {
$tempObj['gc_id']=$goodsCommonStorages[$goods['goods_commonid']]['gc_id'];
$tempObj['gc_id_2']=$goodsCommonStorages[$goods['goods_commonid']]['gc_id_2'];
$tempObj['gc_id_3']=$goodsCommonStorages[$goods['goods_commonid']]['gc_id_3'];
$tempObj['delivery_template_id']=$goodsCommonStorages[$goods['goods_commonid']]['delivery_template_id']?$goodsCommonStorages[$goods['goods_commonid']]['delivery_template_id']:\Our\ApiConst::zero;
$allGcIds[] = $tempObj['gcId'];
$storeGcIds[] = $tempObj['gcId'];
if ($goodsStorage['onlineFlag'] == \Our\ApiConst::one) {
......
......@@ -122,8 +122,17 @@ class OrderServiceModel extends \Business\AbstractModel
if ($orderState != false) {
if($orderState==ApiConst::orderStateComplete){
$where['evaluation_state']=ApiConst::waitEvaluation;
$where['order_state']=array('eq',ApiConst::orderStateComplete);
}
$where['order_state'] = array('in', explode(',', $orderState));
if($orderState==ApiConst::orderStateWaitRecieveOne){
$where['shipping_type']=array('eq',ApiConst::bySeller);
$where['order_state'] =array('in',array(ApiConst::orderStateWaitSend,ApiConst::orderStateWaitRecieve));
}
if($orderState==ApiConst::orderStateWaitSendOne){
$where['shipping_type']=array('eq',ApiConst::bySelf);
$where['order_state']=array('eq',ApiConst::orderStateWaitRecieve);
}
// $where['order_state'] = array('in', explode(',', $orderState));
}
}
......@@ -232,6 +241,9 @@ class OrderServiceModel extends \Business\AbstractModel
$goodsDao = \DAO\GoodsModel::getInstance(DbNameConst::salveDBConnectName);
//订单
$order = \Our\RedisHelper::cachedFunction(\Redis\Db5\OrderRedisModel::getInstance(), array(&$orderDao, 'findByOrderId'), array($orderId), \Our\ApiConst::oneDaySecond,array($orderId));
if(!$order){
ErrorModel::throwException(CodeConfigModel::orderNotExist);
}
$fields = $orderDao->getFields();
$this->order = $orderDao->getConvertOrder($order, $fields);
//收货人地址
......@@ -264,6 +276,7 @@ class OrderServiceModel extends \Business\AbstractModel
$returnData['shippingName'] = $orderDao->getShippingName($returnData['shippingType']);
$returnData['orderMessage'] = $this->orderCommon['orderMessage'];
$returnData['shippingFeeName'] = $orderDao->getFreightFeeName($returnData['shippingType']);
$returnData['dlyoPickupCode'] = intval(substr($returnData['orderSn'], ApiConst::positionPickupCodeBegin));
$returnData['paymentName'] = $orderDao->getPayTypeName($returnData['paymentType']);
$returnData['discountAmount'] = $returnData['goodsAmount'] - $returnData['orderAmount'] + $returnData['shippingFee'];
$returnData['orderText'] = $orderDao->getStatusDetailText($this->order);
......@@ -319,6 +332,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 +348,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 +357,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 +436,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 +455,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']));
......@@ -729,9 +750,6 @@ class OrderServiceModel extends \Business\AbstractModel
echo '物流信息更新成功订单号:' . $result['orderId'] . "\r\n";
}
};
}
/**
......@@ -769,7 +787,7 @@ class OrderServiceModel extends \Business\AbstractModel
//获得订单列表
// $orders=$orderDao->getList($where, $this->orderField, $pageIndex, $pageSize, $order = array('add_time' => 'desc'));
$orders = \Our\RedisHelper::cachedFunction(\Redis\Db5\OrderRedisModel::getInstance(), array(&$orderDao, 'getList'), array($where, $this->orderField, $pageIndex, $pageSize, $order = array('add_time' => 'desc')), \Our\ApiConst::oneDaySecond, array($diliverymanId));
$orders = \Our\RedisHelper::cachedFunction(\Redis\Db5\OrderRedisModel::getInstance(), array(&$orderDao, 'getList'), array($where, $this->orderField, ApiConst::zero, $pageSize, $order = array('add_time' => 'desc')), \Our\ApiConst::oneDaySecond, array($diliverymanId));
$goodsDao = \DAO\GoodsModel::getInstance();
$orderIds = array_column($orders['list'], 'orderId');
$orderCommons = $orderCommonDao->getAllByOrderIdsCache($orderIds, $diliverymanId, $orderCommonDao->orderCommonField);
......@@ -793,6 +811,7 @@ class OrderServiceModel extends \Business\AbstractModel
$delivery['lng'] = $delivery['reciverInfo']['lng'] ? $delivery['reciverInfo']['lng'] : 0.0;
$delivery['lat'] = $delivery['reciverInfo']['lat'] ? $delivery['reciverInfo']['lat'] : 0.0;
$delivery['subAddress'] = isset($delivery['reciverInfo']['sub_address']) ? $delivery['reciverInfo']['sub_address'] : '';
$delivery['distributionFee']=$value['distributionFee'];
unset($delivery['goodsAmount']);
// unset($delivery['orderState']);
unset($delivery['refundState']);
......@@ -809,6 +828,24 @@ class OrderServiceModel extends \Business\AbstractModel
}
public function updateOrderAmount($storeId,$orderId,$newOrderAmount,$memberName)
{
$orderDao = \DAO\Order\OrderModel::getInstance(DbNameConst::masterDBConnectName);
$orderLogDao=\DAO\Order\OrderLogModel::getInstance(DbNameConst::masterDBConnectName);
$orderDetail=$orderDao->getByOrderId($orderId,$orderDao->getOrderDetailField());
$orderDetail=$orderDetail[ApiConst::arrBegin];
if($orderDetail['storeId']!=$storeId){
ErrorModel::throwException(CodeConfigModel::orderNotExist);
}
if($orderDetail['isReceivePayment'] != ApiConst::noreceivePayment){
ErrorModel::throwException(CodeConfigModel::notAllowUpdataOrderAmount);
}
$data['order_amount']=$newOrderAmount;
$res=$orderDao->updateByOrderId($data,$orderId);
$orderLogDao->add($orderDetail['orderId'],ArrayConst::logMsgType[ApiConst::sellerUpdateOrderAmount],DescribeConst::sellerLog,$memberName,$orderDetail['orderState']);
return $res;
}
/**
* 获得配送详情
*
......@@ -877,6 +914,8 @@ class OrderServiceModel extends \Business\AbstractModel
'subAddress' => isset($reciverInfo['sub_address'])?$reciverInfo['sub_address']:'',
'orderGoods' => $orderGoods,
'shippingFee' => $this->order['shippingFee'],
'distributionFee'=>$delivery['distributionFee'],
'isReceivePayment'=>$this->order['isReceivePayment']
);
return $returnData;
......
......@@ -64,16 +64,16 @@ class DeliveryServiceModel extends \Business\AbstractModel
return $res;
}
public function addDeleiveryMan($storeId,$memberId,$trueName=''){
public function addDeleiveryMan($storeId,$memberMobile,$trueName=''){
$memberDao=\DAO\MemberModel::getInstance(DbNameConst::masterDBConnectName);
$deliveryManDao=\DAO\Order\DiliverymanModel::getInstance(DbNameConst::masterDBConnectName);
$member=$memberDao->getInfo($memberId);
$member=$memberDao->getByMemberMobile($memberMobile);
$memberMobile=$member['memberMobile'];
if(strlen($memberMobile)>ApiConst::telephoneLen || !$memberMobile){
ErrorModel::throwException(CodeConfigModel::notExsitDeliveryMan);
}
$where['store_id']=$storeId;
$where['member_id']=$memberId;
$where['member_id']=$member['memberId'];
$res=$deliveryManDao->getByWhere($where);
if($res){
ErrorModel::throwException(CodeConfigModel::alreadyExsitDeliveryMan);
......@@ -85,7 +85,7 @@ class DeliveryServiceModel extends \Business\AbstractModel
$deliveryManData['store_id']=$storeId;
$deliveryManData['add_time']=TIMESTAMP;
$deliveryManData['update_time']=TIMESTAMP;
$deliveryManData['member_id']=$memberId;
$deliveryManData['member_id']=$member['memberId'];
$deliveryManData['bind_status']=ApiConst::one;
$deliveryManData['is_del']=ApiConst::zero;
$resData=$deliveryManDao->insert($deliveryManData);
......
......@@ -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'];
......@@ -302,9 +307,11 @@ class ShopkeeperServiceModel extends \Business\AbstractModel
}
if ($this->clientType && $this->clientType == NameConst::pcClient) {
$value['couponAmount'] = ($value['goodsAmount'] + $value['shippingFee']) - $value['orderAmount'];//优惠券金额
$value['receiveAmount'] = $value['goodsAmount'] - $value['couponAmount'];
$value['orderAmount'] = $value['orderAmount'] + $value['couponAmount'];
$value['receiveAmount'] = $value['goodsAmount']+$value['shippingFee'] - $value['couponAmount'];
// $value['orderAmount'] = $value['orderAmount'];
$value['reciverInfo'] = unserialize($value['reciverInfo']);
$value['reciverInfo'] =$orderCommonDao->getReciverInfo( $value['reciverInfo'] );
$value['dlyoPickupCode'] = intval(substr($value['orderSn'], ApiConst::positionPickupCodeBegin));
$value['deliveryTimeEnd'] = $value['deliveryTime'] + ApiConst::arriveTimeRadius;
if ($value['diliverymanId']) {
......@@ -372,10 +379,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 {
......@@ -458,6 +470,7 @@ class ShopkeeperServiceModel extends \Business\AbstractModel
}
$fields = $orderDao->getFields();
$this->order = $orderDao->getConvertOrder($order, $fields);
//收货人地址
//收货人信息
$this->orderCommon = \Our\RedisHelper::cachedFunction(\Redis\Db5\OrderRedisModel::getInstance(), array(&$orderCommonDao, 'findByOrderId'), array($orderId, $orderCommonDao->orderCommonField), \Our\ApiConst::oneDaySecond);
......
......@@ -309,7 +309,6 @@ class AddressServiceModel extends \Business\AbstractModel {
}
}
return array('returnAddressId'=>$choosedAddressId,'choosedAddressFlag'=>$choosedAddressFlag,'addresses'=>$returnAddresses);
}
public function getMyCurrentAddressByMemberId($memberId){
......
......@@ -11,22 +11,53 @@ class FeedBackServiceModel extends \Business\AbstractModel
}
/**
* 店铺意见反馈
* @param $param
* @param $storeId
* @param $memberId
* @return bool
* @throws \Exception
*/
public function saveStoreFeedback($param, $storeId, $memberId) {
$storeDAO = \DAO\StoreModel::getInstance();
$feedbackDescribe = trim($param['feedbackDescribe']);
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;
$insert['feedback_time'] = TIMESTAMP;
$insert['feedback_telephone'] = $feedbackTelephone;
$insert['member_id'] = $memberId;
$return = \DAO\FeedBackModel::getInstance()->insert($insert);
if(!$return){
\Error\ErrorModel::throwException(\Error\CodeConfigModel::saveFeedbackError);
}
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){
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);
}
// 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);
......
......@@ -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');
}
......@@ -294,7 +305,7 @@ class MemberServiceModel extends \Business\AbstractModel
$addKey=Common::getConfig('password.key');
$memberTime = TIMESTAMP;
if(!empty($addKey)){
$md5Str=$memberTime.$addKey.$where['password'];
$md5Str=$memberTime.$where['password'].$addKey;
}else{
$md5Str=$where['password'];
}
......@@ -345,11 +356,17 @@ class MemberServiceModel extends \Business\AbstractModel
/*$storeMemberDao = \DAO\StoreMemberModel::getInstance(\Our\DbNameConst::masterDBConnectName);
$result = $storeMemberDao->addBatch($storeMember);*/
$favoritesStoreDao = \DAO\FavoritesStoreModel::getInstance();
$storeIds = array_column($scan_store_ids,'store_id');
$list = $favoritesStoreDao->selectList(array('store_id'=>array('in',$storeIds),'member_id'=>$memberId,'fav_type'=>0),'store_id');
$list && $storeIds = array_column($list, 'store_id');
$result = $favoritesStoreDao->insertAll($storeMembers);
if(!$result){
\Our\Log::getInstance()->write(json_encode($storeMembers).'扫码数据写入失败');
return false;
}
$favoritesStoreDao->updateStoreCollecitonsCache($storeIds,$memberId,2);
$favoritesDao = \DAO\FavoritesStoreModel::getInstance();
\Our\RedisHelper::delCachedFunction(\Redis\Db6\FavoritesStoreRedisModel::getInstance(),array(&$favoritesDao, 'getOne'),array(),array($memberId));
}
$scan_sale_ids = $sess->get('scan_sale_ids');
if($scan_sale_ids){
......@@ -1066,5 +1083,24 @@ class MemberServiceModel extends \Business\AbstractModel
}
/**
* 获取当前用户最新的扫码关注店铺
* @param $memberId
* @return int
* @throws \Our\Exception
*/
public function getMyFavoritesStore($memberId){
if($memberId){
$favoritesDao = \DAO\FavoritesStoreModel::getInstance();
$favStore = \Our\RedisHelper::cachedFunction(\Redis\Db6\FavoritesStoreRedisModel::getInstance(),array(&$favoritesDao, 'getOne'),array('store_id',array('fav_from'=>\Our\ApiConst::scanFavor,'member_id'=>$memberId)),\Our\ApiConst::oneDaySecond,array($memberId));
if($favStore&&$favStore['store_id']){
return $favStore['store_id'];
}
}
return \Our\ApiConst::zero;
}
}
......@@ -80,6 +80,8 @@ class SalespersonServiceModel extends \Business\AbstractModel
$orderGoodsList = \Our\RedisHelper::cachedFunction(\Redis\Db1\SaleOrderRedisModel::getInstance(),array(&$saleOrderDAO, 'getOrderGoodsList'),array("sale_act_id in(".implode(',',$saleActArr).") AND sale_id = {$memberId} AND goods_id in(".implode(',',$goodsIds).")",'sum(goods_num) AS goodsCount,goods_name AS goodsName,goods_image AS goodsImage,goods_id AS goodsId,sale_act_id','goods_id',[],'sale_act_id'),\Our\ApiConst::halfDaySecond,array($memberId));
$existIds = [];
$storeModelDAO = \DAO\StoreModel::getInstance();
//数据处理
if($orderGoodsList && is_array($orderGoodsList)) {
foreach ($orderGoodsList as $v){
$existIds[] = $v['goodsId'];
......@@ -96,16 +98,18 @@ class SalespersonServiceModel extends \Business\AbstractModel
if(key_exists($v['sale_act_id'],$acts)){
array_push($acts[$v['sale_act_id']]['goods'],$goods);
}else{
$storeInfo = $storeModelDAO->getStoreInfoCache($actList[$v['sale_act_id']]['store_id']);
$storeLabel = $storeModelDAO->getStoreLabelSrc($storeInfo['store_label'],\Our\ImageConst::salestoreImg);
$qrCode = \Our\Common::getStaticFile($tempActs[$v['sale_act_id']],\Our\ImageConst::salesmanQr);
$hashData[$v['sale_act_id']][$v['sale_act_id'].'_'.$memberId] = $qrCode;
$acts[$v['sale_act_id']] = [
'storeId'=>$actList[$v['sale_act_id']]['store_id'],
'storeName'=>$actList[$v['sale_act_id']]['store_name'],
'storeName'=>$storeInfo['store_name'],
'actId'=>$v['sale_act_id'],
'actName'=>$actList[$v['sale_act_id']]['sale_title'],
'qrCode'=>$qrCode,
'memberName'=>$memberName,
'memberAvatarUrl'=>$memberAvatarUrl,
'memberName'=>$storeInfo['store_name'],
'memberAvatarUrl'=>$storeLabel,
'goods'=>$goods ? array($goods) : $goods
];
}
......@@ -113,6 +117,7 @@ class SalespersonServiceModel extends \Business\AbstractModel
}
if(is_array($goodsIds) && $goodsIds) {
foreach ($goodsIds as $id){
//没有销售量的商品,即在sale_order表中不存在数据的商品
if(!in_array($id,$existIds)){
if($goodsList[$id]) {
$data = [
......@@ -129,15 +134,17 @@ class SalespersonServiceModel extends \Business\AbstractModel
if(key_exists($saleGoods[$id],$acts)){
array_push($acts[$saleGoods[$id]]['goods'],$data);
}else{
$storeInfo = $storeModelDAO->getStoreInfoCache($actList[$saleGoods[$id]]['store_id']);
$storeLabel = $storeModelDAO->getStoreLabelSrc($storeInfo['store_label'],\Our\ImageConst::salestoreImg);
$qrCode = \Our\Common::getStaticFile($tempActs[$saleGoods[$id]],\Our\ImageConst::salesmanQr);
$acts[$saleGoods[$id]] = [
'storeId'=>$actList[$saleGoods[$id]]['store_id'],
'storeName'=>$actList[$saleGoods[$id]]['store_name'],
'storeName'=>$storeInfo['store_name'],
'actId'=>$saleGoods[$id],
'actName'=>$actList[$saleGoods[$id]]['sale_title'],
'qrCode'=>$qrCode,
'memberName'=>$memberName,
'memberAvatarUrl'=>$memberAvatarUrl,
'memberName'=>$storeInfo['store_name'],
'memberAvatarUrl'=>$storeLabel,
'goods'=>$data ? array($data) : $data
];
$hashData[$saleGoods[$id]][$saleGoods[$id].'_'.$memberId] = $qrCode;
......@@ -231,15 +238,18 @@ class SalespersonServiceModel extends \Business\AbstractModel
$qrcode = \Redis\Db1\SaleOrderRedisModel::getInstance()->tableHGet('orderGoods_'.$actId,$actId.'_'.$memberId);
$goods = \Redis\Db1\SaleOrderRedisModel::getInstance()->tableHGet('orderGoods_'.$actId,$actId.'_'.$memberId.'_'.$goodsId);
}
$storeModelDAO = \DAO\StoreModel::getInstance();
if($act && $qrcode && $goods) {
$act = unserialize($act);
$goods = unserialize($goods);
$storeInfo = $storeModelDAO->getStoreInfoCache($act['store_id']);
$storeLabel = $storeModelDAO->getStoreLabelSrc($storeInfo['store_label'],\Our\ImageConst::salestoreImg);
$info['storeId'] = $act['store_id'];
$info['storeName'] = $act['store_name'];
$info['storeName'] = $storeInfo['store_name'];
$info['actName'] = $act['sale_title'];
$info['qrCode'] = $qrcode;
$info['memberName'] = $memberName;
$info['memberAvatarUrl'] = $memberAvatarUrl;
$info['memberName'] = $storeInfo['store_name'];
$info['memberAvatarUrl'] = $storeLabel;
$info = array_merge($info,$goods);
}else{
\Error\ErrorModel::throwException(\Error\CodeConfigModel::saleActOrGoodsNotExist);
......
This diff is collapsed.
......@@ -27,7 +27,10 @@ class FavoritesStoreModel extends \DAO\AbstractModel {
public function init(){
}
public function getFavoritesStores($where,$field) {
$this->setDb($this->dbName);
return $this->db->select($field)->where($where)->from($this->_tableName)->order('fav_time','DESC')->fetchAll();
}
public function getList($where,$field,$pageIndex,$pageSize,$memberId){
$this->setDb($this->dbName);
return $this->db->select($field)->from($this->_tableName)->join('han_store',"han_favorites_store.store_id = han_store.store_id",'inner')->join('han_store_score_statistics',"han_favorites_store.store_id = han_store_score_statistics.store_id",'left')->where(['han_favorites_store.member_id'=>$memberId,'fav_type'=>1])->where($where)->page($pageIndex,$pageSize)->order('fav_time','DESC')->fetchAll();
......@@ -45,9 +48,15 @@ class FavoritesStoreModel extends \DAO\AbstractModel {
return $this->db->fetchAll();
}
public function getOne($field,$where){
public function getOne($field,$where,$order = array('fav_time'=>'desc','favid'=>'desc')){
$this->setDb($this->dbName);
return $this->db->select($field)->from($this->_tableName)->where($where)->fetchOne();
if($order){
foreach($order as $key=>$value){
$this->db->order($key,$value);
}
}
$result = $this->db->select($field)->from($this->_tableName)->where($where)->fetchOne();
return $result;
}
public function insert($param){
......@@ -102,8 +111,8 @@ class FavoritesStoreModel extends \DAO\AbstractModel {
public function insertOrUpdate($data){
$this->setDb(\Our\DbNameConst::masterDBConnectName);
$baseSql = "insert into {$this->_tableName}(member_id,store_id,fav_type,fav_time) values({0},{1},1,{2}) ON DUPLICATE KEY UPDATE fav_type=1,fav_time=VALUES (fav_time)";
$sql = \Our\Common::format($baseSql, $data['member_id'], $data['store_id'],$data['fav_time']);
$baseSql = "insert into {$this->_tableName}(member_id,store_id,fav_type,fav_time,fav_from) values({0},{1},{2},{3},{4}) ON DUPLICATE KEY UPDATE fav_type=VALUES (fav_type),fav_time=VALUES (fav_time),fav_from = VALUES (fav_from)";
$sql = \Our\Common::format($baseSql, $data['member_id'], $data['store_id'],$data['fav_type'],$data['fav_time'],$data['fav_from']);
$result = $this->db->insert($this->_tableName)->query($sql);
if($result){
if($data&&(isset($data['member_id'])&&$data['member_id'])){
......@@ -170,7 +179,36 @@ class FavoritesStoreModel extends \DAO\AbstractModel {
$res = $this->db->insert($this->_tableName)->query($sql);
return $res;
}
/**
* @param $storeIds
* @param $memberId
* @param int $type 取消关注:1 关注:2
* @return bool
* @throws \Our\Exception
*/
public function updateStoreCollecitonsCache($storeIds, $memberId, $type = 1) {
if(!$storeIds || !is_array($storeIds)) {
return true;
}
//删除缓存
foreach ($storeIds as $storeId) {
//更新店铺收藏数
$this->getFavoritesStoreCountByStoreId($storeId, $type == 1 ? -1 : 1);
}
if(is_array($storeIds) && count($storeIds) <= 20){
foreach ($storeIds as $v){
\Our\RedisHelper::delCachedFunction(\Redis\Db6\FavoritesStoreRedisModel::getInstance(),array(&$this, 'getOne'),array('*',array('store_id'=>$v,'member_id'=>$memberId)),array($memberId));
}
// }elseif (!is_array($storeIds)){
// \Our\RedisHelper::delCachedFunction(\Redis\Db6\FavoritesStoreRedisModel::getInstance(),array(&$this, 'getOne'),array('*',array('store_id'=>$storeIds,'member_id'=>$memberId)),array($memberId));
}else{
\Our\RedisHelper::delCachedFunction(\Redis\Db6\FavoritesStoreRedisModel::getInstance(),array(&$this, 'getOne'),array(),array($memberId));
}
\Our\RedisHelper::delCachedFunction(\Redis\Db6\FavoritesStoreRedisModel::getInstance(),array(&$this, 'getFavoritesStores'),array(),array($memberId));
//更新个人中心首页数量
\DAO\MemberModel::getInstance()->_changeNum(\Our\NameConst::storeCollection,$memberId,$type == 1 ? -(count($storeIds)) : count($storeIds));
return true;
}
public function getFavoritesStoreCountByStoreId($storeId, $num = 0) {
$statisticsDb6Redis = \Redis\Db6\StatisticsRedisModel::getInstance();
$collectCount = $statisticsDb6Redis->tableCacheGet('storeCollectCount:'.$storeId);
......
......@@ -73,6 +73,13 @@ 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);
if(is_array($where)){
$where=$this->db->getSqlWhereByArray($where);
}
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();
......@@ -261,7 +268,7 @@ class GoodsModel extends \DAO\AbstractModel {
}
if($fromCart){
$sql = \Our\Common::format(' goods_commonid in ({0})',implode(',',$goodsCommonIds));
$field = 'goods_commonid,goods_id,goods_storage,goods_state,goods_verify,is_transport,transport_id,gc_id,gc_id_1,gc_id_2,gc_id_3,snapshot_id,goods_image,goods_freight,goods_free';
$field = 'goods_commonid,goods_id,goods_storage,goods_state,goods_verify,is_transport,transport_id,gc_id,gc_id_1,gc_id_2,gc_id_3,snapshot_id,goods_image,goods_freight,goods_free,delivery_template_id';
}else if($noRedisGoodsCommonIds){
$sql = \Our\Common::format(' goods_commonid in ({0})',implode(',',$noRedisGoodsCommonIds));
$field = 'goods_commonid,goods_id,goods_storage,goods_state,goods_verify';
......@@ -303,6 +310,7 @@ class GoodsModel extends \DAO\AbstractModel {
if(isset($returnData[$temp['goods_commonid']]['is_transport'])){
continue;
}
$returnData[$temp['goods_commonid']]['delivery_template_id'] = $temp['delivery_template_id'];
$returnData[$temp['goods_commonid']]['is_transport'] = $temp['is_transport'];
$returnData[$temp['goods_commonid']]['transport_id'] = $temp['transport_id'];
$returnData[$temp['goods_commonid']]['goods_freight'] = $temp['goods_freight'];
......@@ -359,27 +367,40 @@ class GoodsModel extends \DAO\AbstractModel {
$datas = array_values($dataList);
$this->setDb(\Our\DbNameConst::masterDBConnectName);
$error = 0;
$baseSql = "UPDATE {$this->_tableName} set goods_storage = case goods_id ";
$baseSql = "UPDATE {$this->_tableName} set ";
$updateAllSql = $baseSql;
$goodsSql = ' goods_storage = case goods_id ';
$goodsEdittimeSql = ' goods_edittime = case goods_id ';
$dataIds = array();
for ($i = 0; $i < count($datas); $i++) {
$updateSql = \Our\Common::format(" WHEN {0} THEN goods_storage{2}{1} ", $datas[$i]['goodsId'], $datas[$i]['goodsNum'],\Our\ArrayConst::ops[$op]);
$goodsSql .= \Our\Common::format(" WHEN {0} THEN goods_storage{2}{1} ", $datas[$i]['goodsId'], $datas[$i]['goodsNum'],\Our\ArrayConst::ops[$op]);
$goodsEdittimeSql .= \Our\Common::format(" WHEN {0} THEN goods_edittime={1}", $datas[$i]['goodsId'],TIMESTAMP);
$dataIds[] = $datas[$i]['goodsId'];
$updateAllSql .= $updateSql;
//$updateAllSql .= $updateSql;
if ($i % 1000 == 0 && $i != 0) {
$updateAllSql = trim($updateAllSql,',');
$updateAllSql .= \Our\Common::format(' END where goods_id in ({0})',implode(',',$dataIds));
$goodsSql = trim($goodsSql,',').' END';
$goodsEdittimeSql = ','.trim($goodsEdittimeSql,',').' END';
$updateAllSql .= $goodsSql;
$updateAllSql .= $goodsEdittimeSql;
$updateAllSql .= \Our\Common::format(' where goods_id in ({0})',implode(',',$dataIds));
$one = $this->db->update($this->_tableName)->query($updateAllSql);
if (!$one) {
$error++;
}
$updateAllSql = $baseSql;
$goodsSql = 'goods_storage = case goods_id ';
$goodsEdittimeSql = ' goods_edittime = case goods_id ';
$dataIds = array();
}
}
if ($updateAllSql != $baseSql) {
$updateAllSql = trim($updateAllSql,',');
$updateAllSql .= \Our\Common::format(' END where goods_id in ({0})',implode(',',$dataIds));
if ($goodsSql) {
$goodsSql = trim($goodsSql,',').' END';
$goodsEdittimeSql = trim($goodsEdittimeSql,',').' END';
$updateAllSql .= $goodsSql;
$updateAllSql .= ','.$goodsEdittimeSql;
$updateAllSql .= \Our\Common::format(' where goods_id in ({0})',implode(',',$dataIds));
$one = $this->db->update($this->_tableName)->query($updateAllSql);
if (!$one) {
$error++;
......
......@@ -35,10 +35,14 @@ class GoodsCommonModel extends \DAO\AbstractModel {
* @param $op 1增加 2设置
* @return mixed
*/
public function updateStorage($goodsCommonid) {
public function updateStorage($goodsCommonid, $op = 1) {
$this->setDb();
$whereSql = 'goods_commonid='.$goodsCommonid;
$updateSql = 'goods_storage = (select sum(t.goods_storage) from '.$this->_child_tableName.' t where t.goods_commonid='.$goodsCommonid.')';
if($op==1){
$updateSql = 'goods_storage = (select sum(t.goods_storage) from '.$this->_child_tableName.' t where t.goods_commonid='.$goodsCommonid.')';
} else {
$updateSql = 'goods_storage_alarm = 0';
}
$updateAllSql = "UPDATE {$this->_tableName} set {$updateSql} where {$whereSql}";
return $this->db->update($this->_tableName)->query($updateAllSql);
}
......@@ -253,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;
......@@ -277,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 ';
}
......@@ -285,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;
}
......
<?php
namespace DAO\Member;
use Our\ApiConst;
use Our\ArrayConst;
use Our\Common;
use Our\DbNameConst;
use Our\DescribeConst;
use Our\NameConst;
use Our\OrderConst;
/**
* 积分相关
* @date 2018-5-14
* @author csw
*/
class PointsLogModel extends \DAO\AbstractModel
{
/**
* 表名
*
* @var string
*/
protected $_tableName = 'han_points_log';
/**
* 主键
*
* @var string
*/
protected $_primaryKey = 'pl_id';
public function init()
{
//$this->setDb();
}
/**
* 新增记录
* @param $data
* @return mixed
*/
public function addLog($data){
$this->setDb($this->dbName);
$logId = $this->db->insert($this->_tableName)->rows($data)->execute();
return $logId;
}
/**
* 类实例
*
* @var \DAO\UserModel
*/
private static $_instance = null;
/**
* 单例模式获取类实例
*
*/
public static function getInstance($dbName=DbNameConst::salveDBConnectName)
{
if (!(self::$_instance instanceof self)) {
self::$_instance = new self($dbName);
}
return self::$_instance;
}
}
<?php
namespace DAO\Member;
use Our\ApiConst;
use Our\ArrayConst;
use Our\Common;
use Our\DbNameConst;
use Our\DescribeConst;
use Our\NameConst;
use Our\OrderConst;
/**
* 会员积分相关
* @date 2018-5-14
* @author csw
*/
class QmMemberPointsModel extends \DAO\AbstractModel
{
/**
* 表名
*
* @var string
*/
protected $_tableName = 'han_qm_member_points';
/**
* 主键
*
* @var string
*/
protected $_primaryKey = 'id';
public function init()
{
//$this->setDb();
}
/**
* 新增记录
* @param $data
* @return mixed
*/
public function addLog($data){
$this->setDb($this->dbName);
$logId = $this->db->insert($this->_tableName)->rows($data)->execute();
return $logId;
}
/**
* 更新会员积分
* @param $param
* @param $where
* @return mixed
*/
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;
/**
* 单例模式获取类实例
*
*/
public static function getInstance($dbName=DbNameConst::salveDBConnectName)
{
if (!(self::$_instance instanceof self)) {
self::$_instance = new self($dbName);
}
return self::$_instance;
}
}
......@@ -72,7 +72,7 @@ class ApiReciverInfoModel extends \DAO\AbstractModel
$reciverInfo['areaInfo']=$this->areaInfo;
$reciverInfo['lng']=$this->lng;
$reciverInfo['lat']=$this->lat;
$reciverInfo['trueName']=$this->trueName;
$reciverInfo['trueName']=$this->trueName?$this->trueName:'未知';
$reciverInfo['subAddress']=$this->subAddress;
return $reciverInfo;
}
......
......@@ -45,7 +45,7 @@ class OrderModel extends \DAO\AbstractModel
public function getOrderDetailField()
{
return 'order_id as orderId,coupon_id as couponId,refund_amount as refundAmount,order_sn as orderSn,pay_sn as paySn,store_name as storeName,add_time as addTime,store_id as storeId,goods_amount as goodsAmount,shipping_fee as shippingFee,order_amount as orderAmount,shipping_type as shippingType,payment_type as paymentType,order_state as orderState,shipping_fee as shippingFee,refund_state as refundState,order_type as orderType,is_receive_payment as isReceivePayment,payment_time as paymentTime,finnshed_time as finnshedTime,need_shipping_fee as needShippingFee,payment_code as paymentCode,buyer_id as buyerId,buyer_name as buyerName,refund_condition as refundCondition,delay_time as delayTime,gmt_update as gmtUpdate,diliveryman_id as diliverymanId,shipping_arrival_time as shippingArrivalTime,delivery_time as deliveryTime';
return 'order_id as orderId,coupon_id as couponId,refund_amount as refundAmount,order_sn as orderSn,pay_sn as paySn,store_name as storeName,add_time as addTime,store_id as storeId,goods_amount as goodsAmount,shipping_fee as shippingFee,order_amount as orderAmount,shipping_type as shippingType,payment_type as paymentType,order_state as orderState,shipping_fee as shippingFee,refund_state as refundState,order_type as orderType,is_receive_payment as isReceivePayment,payment_time as paymentTime,finnshed_time as finnshedTime,need_shipping_fee as needShippingFee,payment_code as paymentCode,buyer_id as buyerId,buyer_name as buyerName,refund_condition as refundCondition,delay_time as delayTime,gmt_update as gmtUpdate,diliveryman_id as diliverymanId,shipping_arrival_time as shippingArrivalTime,delivery_time as deliveryTime,order_note as orderNote';
}
public function getOrderShippingField()
......@@ -229,8 +229,12 @@ class OrderModel extends \DAO\AbstractModel
public function update($where, $data)
{
$this->setDb(\Our\DbNameConst::masterDBConnectName);
if(is_array($where)){
$where = $this->db->getSqlWhereByArray($where);
}
$data['gmt_update']=TIMESTAMP;
return $this->db->update($this->_tableName)->where($where)->rows($data)->execute();
$result = $this->db->update($this->_tableName)->where($where)->rows($data)->execute();
return $result;
}
public function updateByOrderId($data,$orderId){
......@@ -268,6 +272,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) {
......@@ -429,9 +436,9 @@ class OrderModel extends \DAO\AbstractModel
$orderText = '';
if ($order['orderState'] == ApiConst::orderStateWaitRecieve) {
$orderText = OrderConst::getOnShop;//默认到店自取
if ($order['shippingType'] == ApiConst::express) {
$orderText = OrderConst::waitRecieve;
}
// if ($order['shippingType'] == ApiConst::express) {
// $orderText = OrderConst::waitRecieve;
// }
if ($order['shippingType'] == ApiConst::bySeller) {
$orderText = OrderConst::sendding;
}
......@@ -992,6 +999,16 @@ class OrderModel extends \DAO\AbstractModel
return $convertResult;
}
public function convertOrder($orders, $field)
{
$convertResult = array();
foreach ($orders as $key => $value) {
$convertResult[$value[$field]] = $value;
}
return $convertResult;
}
public function getFields()
{
return array(
......@@ -1018,6 +1035,7 @@ class OrderModel extends \DAO\AbstractModel
'buyerId' => 'buyer_id',
'deliveryTime' => 'delivery_time',
'evaluationState'=>'evaluation_state',
'orderNote'=>'order_note'
);
}
......@@ -1092,7 +1110,17 @@ class OrderModel extends \DAO\AbstractModel
* pcClient 获得订单数量
*/
public function getClienOrderCommon($order){
$returnData=array();
$returnData['couponAmount'] = ($order['goodsAmount'] + $order['shippingFee']) - $order['orderAmount'];//优惠券金额
$returnData['orderAmount'] = $order['orderAmount'] ;
$returnData['goodsAmount']=$order['goodsAmount'];
$returnData['shippingFee']=$order['shippingFee'];
$returnData['paymentType']=$order['paymentType'];
return $returnData;
}
public function getCountByOrderState($storeId,$orderState){
$where['store_id']=$storeId;
$where['order_state']=$orderState;
......
......@@ -38,7 +38,22 @@ class OrderLogModel extends \DAO\AbstractModel
{
//$this->setDb();
}
public function addLogToMongo($log){
$mongoDb= new \Mongo\MongoDbModel();
$res= $mongoDb->insert('han_order_log',$log);
return $res;
}
//添加日志
public function add($orderId,$logMsg,$logRole,$logUser,$logOrderState){
$data['order_id']=$orderId;
$data['log_msg']=$logMsg;
$data['log_role']=$logRole;
$data['log_user']=$logUser;
$data['log_orderstate']=$logOrderState;
$data['log_time']=TIMESTAMP;
return $this->addLogToMongo($data);
}
public function addLog($log){
$this->setDb($this->dbName);
$logId = $this->db->insert($this->_tableName)->rows($log)->execute();
......
......@@ -16,8 +16,8 @@ use Our\ImageConst;
class QmDeliverymanLogModel extends \DAO\AbstractModel
{
public $fieldList = 'id,finish_time finishTime,get_time as getTime,order_id as orderId';
public $fieldDetail = 'id,finish_time finishTime,get_time as getTime,order_id as orderId,delivery_state as deliveryState,order_type as orderType';
public $fieldList = 'id,finish_time finishTime,get_time as getTime,order_id as orderId,distribution_fee as distributionFee';
public $fieldDetail = 'id,finish_time finishTime,get_time as getTime,order_id as orderId,delivery_state as deliveryState,order_type as orderType,distribution_fee as distributionFee';
/**
* 表名
......
......@@ -311,6 +311,55 @@ class RefundReturnModel extends \DAO\AbstractModel {
return $picsRes;
}
/**
* 店铺退款
* @param $orderInfo 订单信息
*/
public function storeRefund($orderInfo){
$param['refundOrderNo'] = !empty($orderInfo['refund_order_no']) ? $orderInfo['refund_order_no'] : $this->getRefundsn($orderInfo['store_id']);
//这个有可能多次退款的时候要变
$param['outTradeNo'] = $orderInfo['pay_sn'];
$param['totalFee'] = $orderInfo['order_amount'];
$param['refundFee'] = $orderInfo['refund_amount'];//退款金额
$param['storeId'] = $orderInfo['store_id'];
$param['buyerId'] = $orderInfo['buyer_id'];
if (intval($orderInfo['payment_type']) == ApiConst::wxAppPayType) {
$wxpay = \Payment\WxPay::getInstance();
$refund_return = $wxpay->refund($param);
$this->errorMessage= "微信返回:".json_encode($refund_return);
if (!($refund_return['return_code'] == 'SUCCESS' && $refund_return['result_code'] == 'SUCCESS')) {
$this->errorMessage=date('Y-m-d').'微信退款操作执行失败!'.$orderInfo['order_id']."\r\n";
return false;
}
} else if (intval($orderInfo['payment_type']) == ApiConst::alipay) {
$aliPay = \Payment\Alipay::getInstance();
$return = $aliPay->refund($param);
$this->errorMessage = "支付宝返回:" . json_encode($return);
$resultCode = $return->code;
if (!empty($resultCode) && $resultCode == ApiConst::alipayRefundSuccess) {
return true;
} else {
$this->errorMessage = date('Y-m-d') . '支付宝退款操作执行失败:' . $orderInfo['order_id'] . "\r\n";
return false;
}
}else if(intval($orderInfo['payment_type']) == ApiConst::wxProgram){
$wxpay = \Payment\WxPay::getInstance();
$refund_return = $wxpay->refund($param);
$this->errorMessage= "微信小程序返回:".json_encode($refund_return);
if (!($refund_return['return_code'] == 'SUCCESS' && $refund_return['result_code'] == 'SUCCESS')) {
$this->errorMessage=date('Y-m-d').'微信退款操作执行失败!'.$orderInfo['order_id']."\r\n";
return false;
}
}
return true;
}
/**
* 退款
* @param $orderInfo
* @return bool
*/
public function refundMoney($orderInfo){
$param['refundOrderNo'] = !empty($orderInfo['refundOrderNo'])?$orderInfo['refundOrderNo']:$this->getRefundsn($orderInfo['storeId']);
......@@ -341,7 +390,7 @@ class RefundReturnModel extends \DAO\AbstractModel {
}
}else if(intval($orderInfo['paymentType']) == ApiConst::wxProgram){
$wxpay = \Payment\WxPay::getInstance();
$refund_return = $wxpay->refund($param);
$refund_return = $wxpay->refundWxProgram($param);
$this->errorMessage= "微信小程序返回:".json_encode($refund_return);
if (!($refund_return['return_code'] == 'SUCCESS' && $refund_return['result_code'] == 'SUCCESS')) {
$this->errorMessage=date('Y-m-d').'微信退款操作执行失败!'.$orderInfo['orderId']."\r\n";
......@@ -350,6 +399,26 @@ class RefundReturnModel extends \DAO\AbstractModel {
}
return true;
}
/**
* 修改记录
*
* @param $condition
* @param $data
* @return bool
*/
public function editRefundReturn($condition, $data) {
if (empty($condition)) {
return false;
}
$this->setDb($this->dbName);
if (is_array($data)) {
$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;
}
}
......@@ -85,8 +85,8 @@ class StoreModel extends \DAO\AbstractModel
*/
public function getStoreLabelSrc($storeLabel, $width = \Our\ImageConst::circleStoreLabel, $height = 0)
{
$width = $width * \Our\ImageConst::sizeScale;
$height ? $height = $height * \Our\ImageConst::sizeScale : $height = $width;
$width = ceil($width * \Our\ImageConst::sizeScale);
$height ? $height = ceil($height * \Our\ImageConst::sizeScale) : $height = $width;
if ($storeLabel) {
$storeLabel = \Our\Common::getStaticFile($storeLabel, \Our\ImageConst::storeLabel, 'ossHost');
} else {
......@@ -266,12 +266,21 @@ class StoreModel extends \DAO\AbstractModel
return $address;
}
public function get($storeId,$label = true)
public function get($storeId,$label = true,$reportError = true)
{
$storeInfo = $this->getStoreInfoCache($storeId);
if(!$storeInfo || $storeInfo['open_flag'] != 1 || $storeInfo['store_state'] != 1){
if(!$storeInfo) {
\Error\ErrorModel::throwException(\Error\CodeConfigModel::storeNotExistOrClose);
}
if($storeInfo['open_flag'] != 1 || $storeInfo['store_state'] != 1){
if($reportError) {
\Error\ErrorModel::throwException(\Error\CodeConfigModel::storeNotExistOrClose);
}else{
$storeInfo['isClose'] = 1;
}
}else{
$storeInfo['isClose'] = 0;
}
if($label){
//店铺头像
......
......@@ -28,6 +28,10 @@ class StoreScoreStatisticsModel extends \DAO\AbstractModel {
$this->setDb();
return $this->db->select($field)->from($this->_tableName)->where($where)->fetchOne();
}
public function getStoreScoreStatistics($where, $field) {
$this->setDb();
return $this->db->select($field)->from($this->_tableName)->where($where)->fetchAll();
}
public function insertOrUpdate($data){
$this->setDb(\Our\DbNameConst::masterDBConnectName);
$baseSql = "insert into {$this->_tableName}(store_id,evaluation_score,evaluation_number) values({0},{1},{2}) ON DUPLICATE KEY UPDATE evaluation_number = VALUES(evaluation_number),evaluation_score=VALUES(evaluation_score)";
......
......@@ -127,6 +127,9 @@ class CodeConfigModel
const emptyStoreId = 40007;
const saveReportError = 40008;
const stroeReceiveError = 40009;
const emptyScanStoreId = 40010;
const emptyScanStoreInfo = 40011;
const saveScanStoreInfoFailed = 40012;
//购物车
const wrongCartType = 50001;
......@@ -281,6 +284,8 @@ class CodeConfigModel
const notExsitOrder = 300112;
const alreadyExsitRefundGoods = 300113;
const notAllowDelete = 300114;
const emptyDeliveryTime = 300115;
const noExpressDeliveryForOrder1 = 30115;
const goodsNoStoreForCartOrOrder1 = 30116;
......@@ -292,11 +297,18 @@ class CodeConfigModel
const addDeliveryManError = 300124;
const updateOrderFail = 300120;
const selectDeliveryFail = 300121;
const notAllowUpdataOrderAmount = 300125;
const noEnoughStorageForBundlingGoods = 30118;
const noOrderWaitToPay = 30119;
const wrongEvaluation = 30120;
const selfGoodsForStoreOrder = 30121;
const refundAddPointsLogError = 30122;
const wrongDeliveryTime = 300123;
const wrongBuyerTimeRangeForOrder =300124;
const emptyBuyerMobile = 300125;
const wrongBuyerMobile = 300126;
const leftAmountError = 300127;
//店铺相关错误码
//商品分类
......@@ -519,6 +531,7 @@ class CodeConfigModel
self::refundRefuseByStore => '商家不同意退款,如有疑问请联系客服',
self::returnErrorAfterPay => '货到付款订单在没确认收货前不能退款退货',
self::returnBeyondTimeError => '收货超时订单不能退款',
self::refundAddPointsLogError => '退货退款积分更新写入失败',
//店铺相关错误
self::illegalFavStore => '不能关注自己的店铺',
......@@ -527,6 +540,9 @@ class CodeConfigModel
self::emptyReportStoreType => '举报类型不能为空',
self::emptyStores => '没找到相关店铺',
self::stroeReceiveError => '店铺接单错误',
self::emptyScanStoreId => '扫码关注店铺ID为空',
self::emptyScanStoreInfo => '扫码关注店铺不存在',
self::saveScanStoreInfoFailed => '扫码店铺保存失败',
//购物车相关
self::wrongCartType => '加入购物车类型不能为空',
......@@ -698,6 +714,12 @@ class CodeConfigModel
self::notExsitOrder => '订单不存在',
self::alreadyExsitRefundGoods => '退款订单已经存在',
self::notAllowDelete => '当前订单状态不允许删除',
self::emptyDeliveryTime => '配送时间或者自提时间不能为空',
self::wrongDeliveryTime => '配送时间格式错误',
self::wrongBuyerTimeRangeForOrder => '自提时间点错误',
self::emptyBuyerMobile => '自提人手机号码不能为空',
self::wrongBuyerMobile => '自提人手机号码格式错误',
self::leftAmountError => '没有达到店铺起送金额,不能下单',
self::platFormAreadyIn => '您已经申请过平台介入',
self::deleteError => '放入回收站失败,订单状态有误',
self::restoreError => '永久删除、从回收站还原失败,订单状态有误',
......@@ -755,7 +777,7 @@ class CodeConfigModel
self::emptyOrderForPay => '支付的订单不存在',
self::emptyOrderIdForPay => '订单ID不能为空',
self::noRightForOrder => '您没有该订单权限',
self::wrongPayForOrder => '该订单无需线上支付',
self::wrongPayForOrder => '订单状态发生改变,请刷新后重试',
self::newPaySnInsertFailed => '新订单支付参数生成失败',
self::updateOrderForPayFailed => '唤起支付时更新订单失败',
self::noOrderListForPaySn => '当前paySn没有找到对应订单列表',
......@@ -776,6 +798,7 @@ class CodeConfigModel
self::selectDeliveryFail=>'配送员选择失败',
self::noEnoughStorageForBundlingGoods => '组合销售库存紧张,您购买的数量太多啦',
self::noOrderWaitToPay => '您的订单已支付,请勿重复支付',
self::notAllowUpdataOrderAmount=>'当前状态不允许修改订单金额',
self::wrongEvaluation => '商品评论应在6-500字之间',
self::selfGoodsForStoreOrder => '店主不能购买自己的商品',
//销售员
......@@ -788,7 +811,7 @@ class CodeConfigModel
self::saleNotJoin => '你没有参加这个销售活动',
self::saleActOrGoodsNotExist => '活动或商品不存在',
//意见信箱
self::emptyFeedbackDescribe => '反馈内容不能为空',
self::emptyFeedbackDescribe => '请填写10个字以上的清楚问题描述以便我们提供更好的帮助',
self::emptyFeedbackTelepone => '联系方式不能为空',
self::saveFeedbackError => '保存意见反馈信息失败',
self::feedbackTelError => '手机号码格式错误',
......
<?php
namespace Mongo;
use Our\Common;
use Our\DbNameConst;
/**
* Mongodb 基本操作API,支持基本类似关系统型数据库的操作接口
*
......@@ -100,20 +103,26 @@ class MongoDbModel {
* 'cmd'=>'$', // 修改器命令前缀
* )
*/
public function __construct($config = array('host' => '192.168.1.201', 'port' => 27017, 'db' => 'local', 'cmd' => '$')){
$server = sprintf("mongodb://%s:%s/%s", $config['host'], $config['port'], $config['db']);
// echo "connect\n";
public function __construct($conf = array('host' => '192.168.1.201', 'port' => 27017, 'db' => 'qmcs', 'cmd' => '$')){
// $server = sprintf("mongodb://%s:%s/%s", $config['host'], $config['port'], $config['db']);
$config = \Yaf\Registry::get('config')->get('redis.database.params');
$config=\Our\Common::getConfig(DbNameConst::mongoDBConnectName);
$config['cmd']='$';
$server = Common::format("mongodb://{0}:{1}@{2}:{3}/{4}", $config['username'], $config['password'], $config['hostname'], $config['port'], $config['database']);
try {
$this->_mongo = new \MongoClient($server, array('connect'=>true));// 立即连接
$options['connect']=TRUE;
if (isset($config['password']) && $config['password'])
{
$options['password'] = $config['password'];
}
$this->_mongo = new \MongoClient($server, $options);// 立即连接
}catch (MongoConnectionException $e){
if(self::DEBUG) {
echo $e->getMessage();
}
return false;
}
$this->selectDB($config['db']);
$this->selectDB($config['database']);
// 命令前缀
if(!isset($config['cmd'])){
$this->_cmd = ini_get('mongo.cmd');
......
<?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;
}
}
File mode changed from 100755 to 100644
......@@ -21,6 +21,7 @@ class DeliveryController extends \Our\Controller_AbstractClient {
public function init(){
parent::init();
$this->shopkeeperService = ShopkeeperServiceModel::getInstance();
}
/**
......@@ -63,7 +64,8 @@ class DeliveryController extends \Our\Controller_AbstractClient {
public function addDeliveryAction(){
$deliveryService=\Business\Store\DeliveryServiceModel::getInstance();
$trueName=$this->req['data']['trueName'];
$result =$deliveryService->addDeleiveryMan($this->storeId,$this->memberId,$trueName);
$memberMobile=$this->req['data']['memberMobile'];
$result =$deliveryService->addDeleiveryMan($this->storeId,$memberMobile,$trueName);
if($result!==false){
$this->success($result,\Our\DescribeConst::successMessage,\Our\DescribeConst::successMessage);
}
......
<?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->memberId);
unset($this->req[\Our\NameConst::data]['imageA']);
unset($this->req[\Our\NameConst::data]['imageB']);
unset($this->req[\Our\NameConst::data]['imageC']);
$msg = \Business\User\FeedBackServiceModel::getInstance()->saveStoreFeedback($this->req[\Our\NameConst::data], $this->storeId, $this->memberId);
$this->success('');
}
}
\ No newline at end of file
<?php
use Error\ErrorModel;
......@@ -178,18 +176,6 @@ class ShopkeeperController extends \Our\Controller_AbstractClient {
}
}
/**
* 获得售后列表
*/
public function getRefunds(){
$type = intval($this->req['data']['type']);
$refundService=\Business\Order\RefundServiceModel::getInstance();
$pageIndex=$this->getPageIndex();
$pageSize=$this->getPageSize();
$res=$refundService->getStoreRefundList($this->storeId, $type, $pageIndex, $pageSize);
$this->success($res);
}
/**
* 获得订单数量
*/
......@@ -248,6 +234,123 @@ class ShopkeeperController extends \Our\Controller_AbstractClient {
$this->success($res);
}
/**
* 获得售后列表
*/
public function getRefundsAction(){
$type = intval($this->req['data']['type']);
$refundService=\Business\Order\RefundServiceModel::getInstance();
$pageIndex=$this->getPageIndex();
$pageSize=$this->getPageSize();
$res=$refundService->getStoreRefundList($this->storeId, $type, $pageIndex, $pageSize);
$this->success($res);
}
/**
* 同意退款
*/
public function agreeAction(){
$refundId= intval($this->req['data']['refundId']);
if(!$refundId) {
ErrorModel::throwException(CodeConfigModel::notExistRefund);
}
$refundService=\Business\Order\RefundServiceModel::getInstance();
$refundAmount = floatval($this->req['data']['refundAmount']);
$text = trim($this->req['data']['text']);
$res = $refundService->refund($this->storeId, $this->sellerId, $this->sellerName, $refundId, $refundAmount, $text);
$this->success($res);
}
/**
* 拒绝退款
*/
public function refuseAction(){
$refundId= intval($this->req['data']['refundId']);
if(!$refundId) {
ErrorModel::throwException(CodeConfigModel::notExistRefund);
}
$refundService=\Business\Order\RefundServiceModel::getInstance();
$text = trim($this->req['data']['text']);
$res = $refundService->refund($this->storeId, $this->sellerId, $this->sellerName, $refundId,0, $text, 3);
$this->success($res);
}
/**
* 确认收货
* @throws Exception
*/
public function confirmReceiveAction(){
$refundId= intval($this->req['data']['refundId']);
if(!$refundId) {
ErrorModel::throwException(CodeConfigModel::notExistRefund);
}
$refundService=\Business\Order\RefundServiceModel::getInstance();
$goodsState= intval($this->req['data']['goodsState']);
$res = $refundService->receive($this->storeId, $this->sellerId, $this->sellerName, $refundId, $goodsState);
$this->success($res);
}
/**
* 获取应用版本
*/
public function getVersionAction(){
$version = \Business\Common\SettingServiceModel::getInstance()->getAppVersion();
$this->success($version);
}
/**
* 设置收货时间
* @throws Exception
*/
public function setReceiveTimeAction(){
$refundId= intval($this->req['data']['refundId']);
if(!$refundId) {
ErrorModel::throwException(CodeConfigModel::notExistRefund);
}
$refundService=\Business\Order\RefundServiceModel::getInstance();
$receiveTime = trim($this->req['data']['receiveTime']);
$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);
}
/**
* 修改订单金额
* @throws Exception
*/
public function modifyOrderAmountAction(){
$orderId= intval($this->req['data']['orderId']);
$orderAmount= intval($this->req['data']['orderAmount']);
if(empty($orderId) && empty($orderAmount)) {
ErrorModel::throwException(CodeConfigModel::paramsError);
}
$orderService=\Business\Order\OrderServiceModel::getInstance();
$res = $orderService->updateOrderAmount($this->storeId, $orderId,$orderAmount,$this->memberName);
if($res !==false){
$this->success($res,\Our\DescribeConst::updateSuccess);
}
ErrorModel::throwException(CodeConfigModel::commonError);
}
}
......@@ -59,15 +59,21 @@ 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['member_name']=$member['member_name'];
$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{
......
<p>更新备注</p><p>请求参数</p><p>orderState:订单状态(多个用英文逗号分割),全部时不用传此参数为:待付款:10:待自提,26,待收货:31,待评价:40 旧版弃用 的状态待发货,25:待收货 30</p><p>
返回的文案参考列表</p>
<table class="">
<tbody>
<tr>
<td> 订单状态
orderState
</td>
<td> 配送类型
shippingType
</td>
<td> 支付状态
isReceivePayment
</td>
<td> 订单下单时间<p
style="margin-top: 0px; margin-bottom: 0px; text-rendering: optimizeLegibility; font-feature-settings: "
kern";="" font-kerning:="" normal;="" color:="" rgb(51,="" 51,="" 51);="" font-family:="" "arial=""
negreta",="" arial;="" font-size:="" 13px;="" font-weight:="" 700;="" text-align:="" center;=""
white-space:="" normal;"="">(跟当前时间对比)</p></td>
<td> 删除订单</td>
<td> 订单状态(列表文案)</td>
<td> 商品额外文案</td>
<td> 商品额外操作</td>
<td> 用户文案</td>
<td> 用户操作(按钮)</td>
<td> 店家文案</td>
<td> 店家操作</td>
</tr>
<tr>
<td>-1/ 0/40</td>
<td></td>
<td></td>
<td> &lt;10分钟</td>
<td></td>
<td><br></td>
<td></td>
<td></td>
<td></td>
<td><span style="color: rgb(51, 51, 51); font-family: " arial="" normal",="" arial;="" font-size:="" 13px;=""
text-align:="" center;="" white-space:="" normal;"="">取消订单</span></td>
<td></td>
<td></td>
</tr>
<tr>
<td> 10</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td> 待付款</td>
<td> 10分钟内未付款订单将自动关闭</td>
<td></td>
<td> 等待您付款<p
style="margin-top: 0px; margin-bottom: 0px; text-rendering: optimizeLegibility; font-feature-settings: "
kern";="" font-kerning:="" normal;="" color:="" rgb(51,="" 51,="" 51);="" font-family:="" "arial=""
normal",="" arial;="" font-size:="" 13px;="" text-align:="" center;="" white-space:="" normal;"="">剩余关闭时间:5分
23秒</p></td>
<td> 立即付款<p
style="margin-top: 0px; margin-bottom: 0px; text-rendering: optimizeLegibility; font-feature-settings: "
kern";="" font-kerning:="" normal;="" color:="" rgb(51,="" 51,="" 51);="" font-family:="" "arial=""
normal",="" arial;="" font-size:="" 13px;="" text-align:="" center;="" white-space:="" normal;"="">取消订单</p>
</td>
<td></td>
<td></td>
</tr>
<tr>
<td> 20</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td>待接单<br></td>
<td></td>
<td></td>
<td> 等待卖家接单<p
style="margin-top: 0px; margin-bottom: 0px; text-rendering: optimizeLegibility; font-feature-settings: "
kern";="" font-kerning:="" normal;="" color:="" rgb(51,="" 51,="" 51);="" font-family:="" "arial=""
normal",="" arial;="" font-size:="" 13px;="" text-align:="" center;="" white-space:="" normal;"="">剩余关闭时间:5分
23秒</p></td>
<td> 取消订单</td>
<td></td>
<td></td>
</tr>
<tr>
<td> 25</td>
<td></td>
<td> 大于0的时间戳</td>
<td></td>
<td></td>
<td>配送中<br></td>
<td></td>
<td> 退款<span style="font-family: " arial="" normal",="" arial;="" font-size:="" 13px;="" text-align:=""
center;="" white-space:="" normal;="" color:="" rgb(255,="" 0,="" 0);"="">(退款规则)</span></td>
<td> 等待卖家发货</td>
<td> 提醒发货(调用店家IM界面)</td>
<td></td>
<td></td>
</tr>
<tr>
<td> 25</td>
<td></td>
<td> 0</td>
<td></td>
<td></td>
<td> 配送中</td>
<td></td>
<td></td>
<td> 等待卖家发货</td>
<td> 提醒发货(调用店家IM界面)</td>
<td></td>
<td></td>
</tr>
<tr>
<td> 30</td>
<td> 1</td>
<td> 大于0的时间戳<br></td>
<td></td>
<td></td>
<td> 配送中</td>
<td></td>
<td> 退款<br></td>
<td> 配送中</td>
<td> 确认收货</td>
<td></td>
<td></td>
</tr>
<tr>
<td> 30</td>
<td> 1</td>
<td> 0</td>
<td></td>
<td></td>
<td> 配送中</td>
<td></td>
<td><br></td>
<td> 配送中</td>
<td> 确认收货<p
style="margin-top: 0px; margin-bottom: 0px; text-rendering: optimizeLegibility; font-feature-settings: "
kern";="" font-kerning:="" normal;="" color:="" rgb(51,="" 51,="" 51);="" font-family:="" "arial=""
normal",="" arial;="" font-size:="" 13px;="" text-align:="" center;="" white-space:="" normal;"="">取消订单</p>
</td>
<td></td>
<td></td>
</tr>
<tr>
<td> 30</td>
<td> 0</td>
<td> 大于0的时间戳</td>
<td></td>
<td></td>
<td> 到店自提</td>
<td></td>
<td> 退款</td>
<td> 待到店自取</td>
<td> 确认收货</td>
<td></td>
<td></td>
</tr>
<tr>
<td> 30</td>
<td> 0</td>
<td> 0</td>
<td></td>
<td></td>
<td> 到店自提</td>
<td></td>
<td></td>
<td> 待到店自取</td>
<td><p style="margin-top: 0px; margin-bottom: 0px; text-rendering: optimizeLegibility; font-feature-settings: "
kern";="" font-kerning:="" normal;="" color:="" rgb(51,="" 51,="" 51);="" font-family:="" "arial=""
normal",="" arial;="" font-size:="" 13px;="" text-align:="" center;="" white-space:="" normal;"="">确认收货</p>
<span style="color: rgb(51, 51, 51); font-family: " arial="" normal",="" arial;="" font-size:="" 13px;=""
text-align:="" center;="" white-space:="" normal;"="">取消订单</span> </td>
<td></td>
<td></td>
</tr>
<tr>
<td> 40</td>
<td></td>
<td></td>
<td></td>
<td> 可以</td>
<td> 已完成</td>
<td></td>
<td> 退货(可能存在)</td>
<td> 订单已完成</td>
<td> 未收到货(调用店家IM界面)<p
style="margin-top: 0px; margin-bottom: 0px; text-rendering: optimizeLegibility; font-feature-settings: "
kern";="" font-kerning:="" normal;="" color:="" rgb(51,="" 51,="" 51);="" font-family:="" "arial=""
normal",="" arial;="" font-size:="" 13px;="" text-align:="" center;="" white-space:="" normal;"="">去评价</p>
</td>
<td></td>
<td></td>
</tr>
<tr>
<td> 0</td>
<td></td>
<td></td>
<td></td>
<td> 可以</td>
<td> 已取消</td>
<td></td>
<td></td>
<td> 已取消<p
style="margin-top: 0px; margin-bottom: 0px; text-rendering: optimizeLegibility; font-feature-settings: "
kern";="" font-kerning:="" normal;="" color:="" rgb(51,="" 51,="" 51);="" font-family:="" "arial=""
normal",="" arial;="" font-size:="" 13px;="" text-align:="" center;="" white-space:=""
normal;"="">{取消原因}</p></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td> -1</td>
<td></td>
<td></td>
<td></td>
<td> 可以</td>
<td> 已关闭</td>
<td></td>
<td></td>
<td> 已关闭<p
style="margin-top: 0px; margin-bottom: 0px; text-rendering: optimizeLegibility; font-feature-settings: "
kern";="" font-kerning:="" normal;="" color:="" rgb(51,="" 51,="" 51);="" font-family:="" "arial=""
normal",="" arial;="" font-size:="" 13px;="" text-align:="" center;="" white-space:=""
normal;"="">{关闭原因}</p></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table><p><br></p>
\ No newline at end of file
......@@ -32,6 +32,17 @@ resources.database.slave.params.username = "chenchuanwen"
resources.database.slave.params.password = "!@#$%12345werty"
resources.database.slave.params.charset = "UTF8"
resources.database.slave.params.driver_options.1002 = "SET NAMES utf8"
; mongodb
resources.database.mongo.params.driver = "scram"
resources.database.mongo.params.hostname = "172.16.142.15"
resources.database.mongo.params.port = 27017
resources.database.mongo.params.database = "qmcs"
resources.database.mongo.params.username = "qmcs"
resources.database.mongo.params.password = "123456asdfgh"
resources.database.mongo.params.charset = "UTF8"
resources.database.mongo.params.driver_options.1002 = "SET NAMES utf8"
;
password.key='~!@#$`1234qwertasdfgzxcvb';
redis.database.params.host = "172.16.142.15"
......@@ -80,6 +91,16 @@ resources.database.slave.params.password = "!@#$%12345werty"
resources.database.slave.params.charset = "UTF8"
resources.database.slave.params.driver_options.1002 = "SET NAMES utf8"
; mongodb
resources.database.mongo.params.driver = "scram"
resources.database.mongo.params.hostname = "127.0.0.1"
resources.database.mongo.params.port = 27017
resources.database.mongo.params.database = "qmcs"
resources.database.mongo.params.username = "qmcs"
resources.database.mongo.params.password = "123456asdfgh"
resources.database.mongo.params.charset = "UTF8"
resources.database.mongo.params.driver_options.1002 = "SET NAMES utf8"
password.key='~!@#$`1234qwertasdfgzxcvb';
redis.database.params.host = "127.0.0.1"
redis.database.params.port = "6379"
......@@ -138,6 +159,16 @@ resources.database.drawSource.params.password = "!@#$%12345werty"
resources.database.drawSource.params.charset = "UTF8"
resources.database.drawSource.params.driver_options.1002 = "SET NAMES utf8"
; mongodb
resources.database.mongo.params.driver = "scram"
resources.database.mongo.params.hostname = "127.0.0.1"
resources.database.mongo.params.port = 27017
resources.database.mongo.params.database = "qmcs"
resources.database.mongo.params.username = "qmcs"
resources.database.mongo.params.password = "123456asdfgh"
resources.database.mongo.params.charset = "UTF8"
resources.database.mongo.params.driver_options.1002 = "SET NAMES utf8"
redis.database.params.host = "127.0.0.1"
redis.database.params.port = "6379"
redis.database.params.prefix = "qm_"
......@@ -184,6 +215,16 @@ resources.database.slave.params.password = "!@#$%12345werty"
resources.database.slave.params.charset = "UTF8"
resources.database.slave.params.driver_options.1002 = "SET NAMES utf8"
; mongodb
resources.database.mongo.params.driver = "scram"
resources.database.mongo.params.hostname = "127.0.0.1"
resources.database.mongo.params.port = 27017
resources.database.mongo.params.database = "qmcs"
resources.database.mongo.params.username = "qmcs"
resources.database.mongo.params.password = "123456asdfgh"
resources.database.mongo.params.charset = "UTF8"
resources.database.mongo.params.driver_options.1002 = "SET NAMES utf8"
redis.database.params.host = "127.0.0.1"
redis.database.params.port = "6379"
redis.database.params.prefix = "qm_"
......@@ -243,40 +284,50 @@ push.open=1
[ccwdevelop : common]
; 数据库配置
resources.database.params.driver = "pdo_mysql"
resources.database.params.hostname = "192.168.80.18"
resources.database.params.hostname = "127.0.0.1"
resources.database.params.port = 3306
resources.database.params.database = "qmcs"
resources.database.params.username = "root"
resources.database.params.password = "123456"
resources.database.params.password = "root"
resources.database.params.charset = "UTF8"
resources.database.params.driver_options.1002 = "SET NAMES utf8"
; 从库配置
resources.database.slave.params.driver = "pdo_mysql"
resources.database.slave.params.hostname = "192.168.80.18"
resources.database.slave.params.hostname = "127.0.0.1"
resources.database.slave.params.port = 3306
resources.database.slave.params.database = "qmcs"
resources.database.slave.params.username = "root"
resources.database.slave.params.password = "123456"
resources.database.slave.params.password = "root"
resources.database.slave.params.charset = "UTF8"
resources.database.slave.params.driver_options.1002 = "SET NAMES utf8"
; 从库配置
resources.database.drawSource.params.driver = "pdo_mysql"
resources.database.drawSource.params.hostname = "192.168.80.18"
resources.database.drawSource.params.hostname = "127.0.0.1"
resources.database.drawSource.params.port = 3306
resources.database.drawSource.params.database = "drawSource"
resources.database.drawSource.params.username = "root"
resources.database.drawSource.params.password = "123456"
resources.database.drawSource.params.password = "root"
resources.database.drawSource.params.charset = "UTF8"
resources.database.drawSource.params.driver_options.1002 = "SET NAMES utf8"
; mongodb
resources.database.mongo.params.driver = "scram"
resources.database.mongo.params.hostname = "192.168.1.201"
resources.database.mongo.params.port = 27017
resources.database.mongo.params.database = "qmcs"
resources.database.mongo.params.username = "qmcs"
resources.database.mongo.params.password = "123456asdfgh"
resources.database.mongo.params.charset = "UTF8"
resources.database.mongo.params.driver_options.1002 = "SET NAMES utf8"
password.key='~!@#$`1234qwertasdfgzxcvb';
redis.database.params.host = "127.0.0.1"
redis.database.params.host = "192.168.1.201"
redis.database.params.port = "6379"
redis.database.params.prefix = "qm_"
redis.database.params.password = "23456ertyu"
redis.database.params.password = ""
out.config="/data/config";
;锁文件
......@@ -285,8 +336,8 @@ out.locks="/data/locks";
;redis.database.params.password = "test"
;推送配置
push.clientHost="ws://192.168.80.18:9502"
push.host="192.168.80.18"
push.clientHost="ws://192.168.1.201:9502"
push.host="192.168.1.201"
push.port="9503"
push.open=1
push.user.service.id=293
......@@ -472,8 +523,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
......
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>简单的html5 File测试 for pic2base64</title>
<style>
</style>
</head>
<body>
<form action="/client/shopkeeper/getRefundDetail" method="post">
用户登录状态key:<input name="data[key]" value="ceb72deab920ac0edb7272b2ed9dfa1e"/><br />
订单id:<input name="data[refundId]" value="935"/><br />
<p id="img_area"></p>
<input type="submit" value="提交">
</form>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>简单的html5 File测试 for pic2base64</title>
<style>
</style>
</head>
<body>
<form action="/client/shopkeeper/getRefunds" method="post">
用户登录状态key:<input name="data[key]" value="ceb72deab920ac0edb7272b2ed9dfa1e"/><br />
type:<input name="data[type]" value="0"/><br />
index:<input name="data[pageIndex]" value="0"/><br />
size:<input name="data[pageSize]" value="20"/><br />
<p id="img_area"></p>
<input type="submit" value="提交">
</form>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>简单的html5 File测试 for pic2base64</title>
<style>
</style>
</head>
<body>
<form action="/client/shopkeeper/modifyOrderAmount" method="post">
用户登录状态key:<input name="data[key]" value="bd9b675342850f741b1818aa74aa63a8"/><br />
订单id:<input name="data[orderId]" value="403"/><br />
订单价格:<input name="data[orderAmount]" value="10"/><br />
<p id="img_area"></p>
<input type="submit" value="提交">
</form>
</body>
</html>
\ No newline at end of file
......@@ -13,6 +13,9 @@
用户登录状态key:<input name="data[key]" value="ceb72deab920ac0edb7272b2ed9dfa1e"/><br />
订单状态id:<input name="data[orderState]" value=""/><br />
keyword:<input name="data[keyword]" value="400"/><br />
index:<input name="data[pageIndex]" value="0"/><br />
size:<input name="data[pageSize]" value="20"/><br />
size:<input name="data[sign]" value="20"/><br />
<p id="img_area"></p>
<input type="submit" value="提交">
</form>
......
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>简单的html5 File测试 for pic2base64</title>
<style>
</style>
</head>
<body>
<form action="/client/shopkeeper/warning" method="post">
用户登录状态key:<input name="data[key]" value="91d068d63d3658922ed683e8969c8036"/><br />
<p id="img_area"></p>
<input type="submit" value="提交">
</form>
</body>
</html>
\ No newline at end of file
This diff is collapsed.
......@@ -72,6 +72,35 @@ 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();
$storesBase=$goodsCommonService->getAlertGoods();
if($storesBase){
$storesIds=array_column($storesBase,'storeId');
$stores=$goodsCommonService->getGoodsCount($storesIds);
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 +134,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']));
......
单元测试目录,关于单元测试可以参考:http://www.01happy.com/yaf-phpunit/
\ No newline at end of file
<?php
require_once APPLICATION_PATH . '/tests/application/library/Test/PHPUnit/ControllerTestCase.php';
/**
* 首页控制器测试类
*/
class IndexTest extends \Test\PHPUnit\ControllerTestCase {
/**
* 测试index方法
*/
public function testIndex() {
$request = new \Yaf\Request\Simple("CLI", "Index", "Index", 'index');
$response = $this->_application->getDispatcher()
->returnResponse(true)
->dispatch($request);
$content = $response->getBody();
$this->assertEquals('index phtml', $content);
}
}
<?php
namespace Test\PHPUnit;
require_once APPLICATION_PATH . '/tests/application/library/Test/PHPUnit/TestCase.php';
class ControllerTestCase extends \Test\PHPUnit\TestCase {
protected function _dispatch($request) {
try {
$response = $this->getApplication()->getDispatcher()
->catchException(false)
->returnResponse(true)
->dispatch($request);
$content = $response->getBody();
} catch (Exception $exc) {
$content = json_encode(array('errno' => $exc->getCode()));
}
return json_decode($content, true);
}
protected function _test($listTestData) {
foreach ($listTestData as $testData) {
if (isset($testData['cookie'])) {
$_COOKIE = $testData['cookie'];
}
if (isset($testData['post'])) {
$_POST = $testData['post'];
}
if (isset($testData['get'])) {
$_GET = $testData['get'];
}
$request = new \Yaf\Request\Simple("CLI", $testData['request'][0], $testData['request'][1], $testData['request'][2], $_GET);
$data = $this->_dispatch($request);
$this->assertSame($testData['code'], $data['errno']);
if (isset($testData['data'])) {
$this->assertEquals($testData['data'], $data['data']);
}
}
}
}
<?php
namespace Test\PHPUnit;
require_once APPLICATION_PATH . '/tests/application/library/Test/PHPUnit/TestCase.php';
/**
* 数据模型测试基类
*/
class ModelTestCase extends \Test\PHPUnit\TestCase {
}
<?php
namespace Test\PHPUnit;
class TestCase extends \PHPUnit_Framework_TestCase {
/**
* yaf运行实例
*
* @var \Yaf\Application
*/
protected $_application = null;
/**
* 构造方法,调用application实例化方法
*/
public function __construct() {
$this->_application = $this->getApplication();
parent::__construct();
}
/**
* 设置application
*/
public function setApplication() {
$application = new \Yaf\Application(APPLICATION_PATH . "/conf/application.ini");
$application->bootstrap();
\Yaf\Registry::set('application', $application);
return $application;
}
/**
* 获取application
*
* @return \Yaf\Application
*/
public function getApplication() {
$application = \Yaf\Registry::get('application');
if (!$application) {
$application = $this->setApplication();
}
return $application;
}
}
<?php
date_default_timezone_set("Asia/Shanghai");
mb_internal_encoding("UTF-8");
define("APPLICATION_PATH", realpath(dirname(__FILE__) . '/../'));
\ No newline at end of file
<phpunit bootstrap="./bootstrap.php"></phpunit>
\ 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