终极提交~

This commit is contained in:
2019-10-27 20:15:29 +08:00
parent df11660e6a
commit 4131f1ac50
17 changed files with 588 additions and 118 deletions

View File

@ -282,12 +282,21 @@ class Orders extends Base{
}
if(empty($carts['carts']))return WSTReturn("请选择要购买的商品");
$carts['ect_pay'] = isset($carts['ect_pay']) ? (int)$carts['ect_pay'] : 0;
$carts['goodsType'] = isset($carts['goodsType']) ? $carts['goodsType'] : 0;
$carts['goodsType'] = isset($carts['goodsType']) ? $carts['goodsType'] : 1;
if(1 == $carts['ect_pay'] || (isset($carts['is_seckilling']) && $carts['is_seckilling'] == 1) || (isset($carts['promotion_goods']) && $carts['promotion_goods'] == 1)){//不可抵用惠宝
$isUseScore=0;
$useScore=0;
}
$from = (int)input('post.from');
if(3 == $from){
$carts['goodsType'] = $from;
$helpUserId = (int)input('post.helpUserId');//助购用户ID
$helpLevel = (int)input('post.helpLevel');//助购用户ID
if($helpUserId<=0){
return WSTReturn("请选择助购用户");
}
if($helpUserId == $userId && $userId!=1){$helpLevel=0;}
}
$pay_code = input('payCode');
//$carts['ect_pay']=0;
// if($carts['ect_pay'] == 1 && $pay_code !='ect'){
@ -382,6 +391,8 @@ class Orders extends Base{
//计算运费和总金额
$order['deliverType'] = $deliverType;
$order['deliverMoney']=0;
$order['helpUserId']=isset($helpUserId)?$helpUserId:0;//助购用户,只有助购的时候有
$order['helpUserLevel']=isset($helpLevel)?$helpLevel:0;//助购用户,只有助购的时候有
if($shopOrder['isFreeShipping']){
$order['deliverMoney'] = 0;
}else{
@ -1016,7 +1027,84 @@ class Orders extends Base{
}
return WSTReturn('操作失败',-1);
}
/**
/**
* 助购吧获取用户订单列表
*/
public function userZgOrdersByPage($orderStatus, $isAppraise = -1, $uId=0){
$userId = ($uId==0)?(int)session('WST_USER.userId'):$uId;
$orderNo = input('post.orderNo');
$shopName = input('post.shopName');
$isRefund = (int)input('post.isRefund',-1);
$where = ['o.userId'=>$userId,'o.dataFlag'=>1];
if(is_array($orderStatus)){
$where['orderStatus'] = ['in',$orderStatus];
}else{
$where['orderStatus'] = $orderStatus;
}
if($isAppraise!=-1)$where['isAppraise'] = $isAppraise;
if($orderNo!=''){
$where['o.orderNo'] = ['like',"%$orderNo%"];
}
if($shopName != ''){
$where['s.shopName'] = ['like',"%$shopName%"];
}
if(in_array($isRefund,[0,1])){
$where['isRefund'] = $isRefund;
}
$where["o.goodsType"]=3;
$page = $this->alias('o')->join('__SHOPS__ s','o.shopId=s.shopId','left')
->join('__ORDER_COMPLAINS__ oc','oc.orderId=o.orderId','left')
->join('__ORDERS_ECT__ ore','ore.orderId=o.orderId','left')
->join('__ORDER_REFUNDS__ orf','orf.orderId=o.orderId and orf.refundStatus!=-1','left')
->where($where)
->field('ore.orderEctNum,o.pay_name,ore.ectPrice,o.orderRemarks,o.noticeDeliver,o.orderId,o.orderNo,o.shopConfirm,s.shopName,s.shopId,s.shopQQ,s.phone,s.shopWangWang,o.goodsMoney,o.totalMoney,o.realTotalMoney,
o.orderStatus,o.deliverType,o.helpUserId,o.helpUserLevel,o.goodsType,deliverMoney,isPay,payType,payFrom,o.orderStatus,needPay,isAppraise,isRefund,orderSrc,o.createTime,o.useScore,oc.complainId,orf.id refundId,o.orderCode')
->order('o.createTime', 'desc')
->paginate(input('pagesize/d'))->toArray();
if(count($page['Rows'])>0){
$orderIds = [];
foreach ($page['Rows'] as $v){
$orderIds[] = $v['orderId'];
}
$goods = Db::name('order_goods')->where('orderId','in',$orderIds)->select();
$goodsMap = [];
foreach ($goods as $v){
$v['goodsSpecNames'] = str_replace('@@_@@','、',$v['goodsSpecNames']);
$v['marketPrice'] = Db::name('goods')->where(['goodsId'=>$v['goodsId']])->value('marketPrice');//添加返回市场价 mark hsf 20180112
$goodsMap[$v['orderId']][] = $v;
}
foreach ($page['Rows'] as $key => $v){
$page['Rows'][$key]['allowRefund'] = 0;
//只要是已支付的,并且没有申请退款的,都可以申请退款操作
if($v['isPay']==1 && $v['refundId']==''){
$page['Rows'][$key]['allowRefund'] = 1;
}
if($v["helpUserId"]!=0){
$page['Rows'][$key]['helpUser']=Db::name('users')->where('userId','=',$v["helpUserId"])
->field("userName")->find();
}else{
$page['Rows'][$key]['helpUser']=["userName"=>''];
}
//货到付款中使用了惠宝支付的也可以申请退款
if($v['payType']==0 && $v['refundId']=='' && $v['useScore']>0){
$page['Rows'][$key]['allowRefund'] = 1;
}
$page['Rows'][$key]['list'] = $goodsMap[$v['orderId']];
$page['Rows'][$key]['isComplain'] = 1;
if(($v['complainId']=='') && ($v['payType']==0 || ($v['payType']==1 && $v['orderStatus']!=-2))){
$page['Rows'][$key]['isComplain'] = '';
}
$page['Rows'][$key]['payTypeName'] = WSTLangPayType($v['payType']);
$page['Rows'][$key]['deliverType'] = WSTLangDeliverType($v['deliverType']==1);
$page['Rows'][$key]['status'] = WSTLangOrderStatus($v['orderStatus']);
$page['Rows'][$key]['orderCodeTitle'] = WSTOrderCodeTitle($v['orderCode']);
}
hook('afterQueryUserOrders',['page'=>&$page]);
}
return $page;
}
/**
* 获取用户订单列表
*/
public function userOrdersByPage($orderStatus, $isAppraise = -1, $uId=0){
@ -1047,7 +1135,7 @@ class Orders extends Base{
->join('__ORDER_REFUNDS__ orf','orf.orderId=o.orderId and orf.refundStatus!=-1','left')
->where($where)
->field('ore.orderEctNum,o.pay_name,ore.ectPrice,o.orderRemarks,o.noticeDeliver,o.orderId,o.orderNo,o.shopConfirm,s.shopName,s.shopId,s.shopQQ,s.phone,s.shopWangWang,o.goodsMoney,o.totalMoney,o.realTotalMoney,
o.orderStatus,o.deliverType,deliverMoney,isPay,payType,payFrom,o.orderStatus,needPay,isAppraise,isRefund,orderSrc,o.createTime,o.useScore,oc.complainId,orf.id refundId,o.orderCode')
o.orderStatus,o.deliverType,o.helpUserId,o.helpUserLevel,o.goodsType,deliverMoney,isPay,payType,payFrom,o.orderStatus,needPay,isAppraise,isRefund,orderSrc,o.createTime,o.useScore,oc.complainId,orf.id refundId,o.orderCode')
->order('o.createTime', 'desc')
->paginate(input('pagesize/d'))->toArray();
if(count($page['Rows'])>0){
@ -1068,6 +1156,7 @@ class Orders extends Base{
if($v['isPay']==1 && $v['refundId']==''){
$page['Rows'][$key]['allowRefund'] = 1;
}
$page['Rows'][$key]['helpUser']=["userName"=>''];
//货到付款中使用了惠宝支付的也可以申请退款
if($v['payType']==0 && $v['refundId']=='' && $v['useScore']>0){
$page['Rows'][$key]['allowRefund'] = 1;
@ -1081,7 +1170,6 @@ class Orders extends Base{
$page['Rows'][$key]['deliverType'] = WSTLangDeliverType($v['deliverType']==1);
$page['Rows'][$key]['status'] = WSTLangOrderStatus($v['orderStatus']);
$page['Rows'][$key]['orderCodeTitle'] = WSTOrderCodeTitle($v['orderCode']);
}
hook('afterQueryUserOrders',['page'=>&$page]);
}
@ -1346,7 +1434,7 @@ class Orders extends Base{
}
$order = $this->alias('o')->join('__SHOPS__ s','o.shopId=s.shopId','left')
->where(['o.userId'=>$userId,'o.orderId'=>$orderId,'o.orderStatus'=>1])
->field('o.orderId,o.orderNo,o.payType,s.userId,s.shopId,o.orderScore,o.payFrom,o.realTotalMoney,o.goodsType,commissionFee')->find();
->field('o.orderId,o.orderNo,o.helpUserId,o.helpUserLevel,o.payType,s.userId,s.shopId,o.orderScore,o.payFrom,o.goodsMoney,o.realTotalMoney,o.goodsType,commissionFee')->find();
if(!empty($order)){
Db::startTrans();
try{
@ -1372,9 +1460,9 @@ class Orders extends Base{
model('common/Settlements')->speedySettlement($orderId);
}
}
$m = Model('common/Table');
$userInfo = getUserInfo(['userId'=>$userId],'userName,userType,buyHelpMoney,helpMaxSaleMoney');
if (2 == $order['goodsType']){//助微吧购物
$m = Model('common/Table');
$userInfo = getUserInfo(['userId'=>$userId],'userType,buyHelpMoney,helpMaxSaleMoney');
if (1 == $userInfo['userType']){//是商户购物
//加助微吧购物金额
$m->setTable('users');
@ -1406,7 +1494,91 @@ class Orders extends Base{
}else{
$m->insertInfo(['userId'=>$userId,'ectNum'=>$order['realTotalMoney'],'ectType'=>1,'dataRemarks'=>'购户购物']);
}
}
}
elseif (3 == $order['goodsType']){//助购吧购物
// 计算 SUM(商品*优惠率) 的值
$calBaseNum = Db::table("__ORDERS__ o")->join("__ORDER_GOODS__ g", "g.orderId=o.orderId", 'inner')
->where(['o.userId'=>$userId,'o.orderId'=>$orderId])
->sum('g.goodsPrice*g.discountRate*0.01');
// foreach ($orderGoods as $orderGood) {
// // 在不考虑数据库变更的情况下,这两个值都是存储的数字类型,所以不做特殊处理
// $calBaseNum += (float)$orderGood['goodsPrice'] * (float)$orderGood['discountRate'] / 100;
// }
$sm = Model('common/SysSummary');
// step 2 商户支付优惠款给平台10000×0.4=4000
// 10.15添加 优惠款 全额进入 代快付值
$sm->addSysSummary($calBaseNum,0,1);
$vm = new UserVouchers();
// step 4 平台送商户的推荐人当消费超过限制值时10000×0.4×0.5×0.5=1000“预获产品券”。
// 当消费低于限制值时10000×0.4×0.5×0.2=400“预获产品券”。
$uUserId = UserTrees::getUpperId($order["userId"]);
if($uUserId == null){$uUserId = 1;}
$data = Db::query('SELECT count(`goodsMoney`) as `total` FROM `hyh_orders` WHERE DATE_FORMAT(`createTime`,"%Y%m%d")=DATE_FORMAT(DATE_SUB(now(),INTERVAL 1 day),"%Y%m%d") and `userId`="'.$uUserId.'"');
// 因为count一定会有数据所以不判断了
if($data[0]["total"]<=dataConf("refPreProductYdGTMoney")){
$vm->insertVouchersNotice($uUserId, $orderId,$calBaseNum*((float)dataConf('helpSaleCouponsCalBase')/100)*((float)dataConf("refPreProductNoInSaleScale")/100),
0,'交易订单【'.$order['orderNo'].'】推荐商户所得',1);
}else{
$vm->insertVouchersNotice($uUserId, $orderId,$calBaseNum*((float)dataConf('helpSaleCouponsCalBase')/100)*((float)dataConf("refPreProductYesInSaleScale ")/100),
0,'交易订单【'.$order['orderNo'].'】推荐商户所得',1);
}
// step 5 平台送自己10000×N“助购预获”
// 10000“预获产品券”
// 10000×0.4×0.5×0.5=1000“预获优惠券”。
$vm->insertHelpSaleNotice($userId, $orderId, $order['goodsMoney']*((int)$order["helpUserLevel"])*(float)dataConf("helpSaleCalBase"),
'交易订单【'.$order['orderNo'].'】购户购物所得', 1);
$vm->insertVouchersNotice($userId, $orderId, $order['goodsMoney'], $calBaseNum*((float)dataConf('helpSaleCouponsCalBase')/100)*(1-((float)dataConf("helpSaleChildrenGet")/100)),
'您的订单编号'.$order['orderNo'].'完成添加',1);
// step 6 平台送自己的推荐人当消费超过限制值时10000×0.4×0.5×0.5=1000“预获产品券”
// 当消费低于限制值时10000×0.4×0.5×0.2=400“预获产品券”。
$uUserId = UserTrees::getUpperId($userId);
if($uUserId === null){$uUserId = 1;}
$data = Db::query('SELECT count(`goodsMoney`) as `total` FROM `hyh_orders` WHERE DATE_FORMAT(`createTime`,"%Y%m%d")=DATE_FORMAT(DATE_SUB(now(),INTERVAL 1 day),"%Y%m%d") and `userId`="'.$uUserId.'"');
// 因为count一定会有数据所以不判断了
if($data[0]["total"]<=dataConf("refPreProductYdGTMoney")){
$vm->insertVouchersNotice($uUserId, $orderId,$calBaseNum*((float)dataConf('helpSaleCouponsCalBase')/100)*((float)dataConf("refPreProductNoInSaleScale")/100),
0,'交易订单【'.$order['orderNo'].'】推荐购户所得',1);
}else{
$vm->insertVouchersNotice($uUserId, $orderId,$calBaseNum*((float)dataConf('helpSaleCouponsCalBase')/100)*((float)dataConf("refPreProductYesInSaleScale ")/100),
0,'交易订单【'.$order['orderNo'].'】推荐购户所得',1);
}
// step 7 平台送自己的被推荐人10000×0.4×0.5×0.5÷5=200“预获产品券”。
$childes = DB::table("hyh_user_trees")->where(["pid"=>$userId])->field("uid")->select();
foreach ($childes as $child){
$vm->insertVouchersNotice($child['uid'], $orderId,
$calBaseNum*((float)dataConf('helpSaleCouponsCalBase')/100)*((float)dataConf("helpSaleChildrenGet")/100)/sizeof($childes), 0,
'交易订单【'.$order['orderNo'].'】被推荐所得',1);
}
// step 8 平台送自己的上第N层扣减“助购预获”、“预获产品券”各10000×0.4×0.5=2000
// 同时添加10000×0.4×0.5=2000“已获产品券”。
if((int)$order["helpUserLevel"]!==0){
$vm->insertHelpSaleNotice($order["helpUserId"], $orderId, $calBaseNum*((float)dataConf('helpSaleCouponsCalBase')/100),
'预获助购转换所扣', 0);
$sm->addSysSummary($calBaseNum*((float)dataConf('helpSaleCouponsCalBase')/100),0,2);
$vm->insertVouchersNotice($order['helpUserId'], $orderId, $calBaseNum*((float)dataConf('helpSaleCouponsCalBase')/100), 0,
'预获产品券转换所扣',0);
$vm->insertAlreadyVouchersNotice($order['helpUserId'], $orderId, $calBaseNum*((float)dataConf('helpSaleCouponsCalBase')/100), 0,
'预获产品券转换所得',1);
}else{
$vm->insertHelpSaleNotice($order["helpUserId"], $orderId, 0,
'预获产品券转换所扣', 0);
}
// 10.15添加:助购户的 助购预获 减少的同时 代快付值等额减少
Db::name("orders")->where(compact('orderId'))->update([
"helpGetCount"=>$order['goodsMoney']*((int)$order["helpUserLevel"])*(float)dataConf("helpSaleCalBase"),
"helpGetCount2"=>$calBaseNum*((float)dataConf('helpSaleCouponsCalBase')/100),
]);
}
//新增订单日志
$logOrder = [];
$logOrder['orderId'] = $orderId;
@ -1458,10 +1630,15 @@ class Orders extends Base{
}
Db::commit();
return WSTReturn('操作成功',1);
}
}else{
// 避免多次事物重叠
Db::rollback();
return WSTReturn('操作失败',-1);
}
}catch (\Exception $e) {
Db::rollback();errLog($e);
// dump($e);
Db::rollback();
dump($e);die();
errLog($e);
return WSTReturn('操作失败',-1);
}
}
@ -3022,8 +3199,8 @@ class Orders extends Base{
//产品券
$buyerMaxProductScale = $this->round(dataConf('buyerMaxProductScale')*0.01,2);
$pay['maxProduct'] = $this->round($needPay * $buyerMaxProductScale,2);//最大可用产品券
$pay['productHandlingFee'] = $this->round(dataConf('useHasProductHandlingFee')*0.01,2);//产品券手续费
$pay['productTaxFee'] = $this->round(dataConf('useHasProductTaxFee')*0.01,2);//产品券税费
$pay['productHandlingFee'] = $this->round(dataConf('useHasHandlingFee')*0.01,2);//产品券手续费
$pay['productTaxFee'] = $this->round(dataConf('useHasTaxFee')*0.01,2);//产品券税费
//获取最大可用券值
//$allProductNum = $this->getMaxNum($pay['maxProduct'],(1-$pay['productHandlingFee']-$pay['productTaxFee'] ));
$allProductNum = $this->round($pay['maxProduct'] + ($pay['maxProduct'] / (1 - $pay['productHandlingFee'] - $pay['productTaxFee'])) * ($pay['productHandlingFee']+ $pay['productTaxFee']),2);
@ -3039,8 +3216,8 @@ class Orders extends Base{
$pay['product']['useProductTaxFee'] = $this->round($pay['product']['useProduct'] * $pay['productTaxFee'],2);
$pay['product']['useProductOk'] = $this->round($pay['product']['useProduct'] - $pay['product']['useProductHandlingFee'] - $pay['product']['useProductTaxFee'],3);
//优惠券
$pay['coupousHandlingFee'] = $this->round(dataConf('useHasCoupousHandlingFee')*0.01,2);//优惠券手续费
$pay['coupousTaxFee'] = $this->round(dataConf('useHasCoupousTaxFee')*0.01,2);//优惠券税费
$pay['coupousHandlingFee'] = $this->round(dataConf('useHasHandlingFee')*0.01,2);//优惠券手续费
$pay['coupousTaxFee'] = $this->round(dataConf('useHasTaxFee')*0.01,2);//优惠券税费
$pay['maxCoupons'] = $this->round($needPay - $pay['product']['useProductOk'],2) ;//最大可用其他券,优惠券+旺旺券+现金券
//获取最大可用券值
//$allCouponsNum = $this->getMaxNum($pay['maxCoupons'],(1-$pay['coupousHandlingFee']-$pay['coupousTaxFee'] ));