test
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

5316 lines
258 KiB

<?php
defined('IN_IA') or exit('Access Denied');
class PayModuleUniapp extends Uniapp
{
/**
* Comment: 获取订单信息
* Author: wlf
* Date: 2019/8/9 15:30
*/
public function getOrderInfo()
{
global $_W , $_GPC;
$trade = Setting::wlsetting_read('trade');
$orderid = $_GPC['orderid'];
$type = $_GPC['plugin'];
$deliverystring = $_GPC['deliverystring'];
$data = [];
if ($type == 'rush') { //抢购
$order = pdo_get('wlmerchant_rush_order' , ['id' => $orderid]);
$data['goodname'] = pdo_getcolumn(PDO_NAME . 'rush_activity' , ['id' => $order['activityid']] , 'name');
$data['price'] = $order['actualprice'];
$plugin = 'Rush';
$payfor = 'RushOrder';
}
else if ($type == 'opencard') { //一卡通
$order = pdo_get('wlmerchant_halfcard_record' , ['id' => $orderid]);
$data['price'] = $order['price'];
$data['goodname'] = pdo_getcolumn(PDO_NAME . 'halfcard_type' , ['id' => $order['typeid']] , 'name');
$plugin = 'Merchant';
$payfor = 'Halfcard';
$checkpayP = 'Halfcard';
}
else if ($type == 'attestation') {
$order = pdo_get('wlmerchant_attestation_money' , ['id' => $orderid]);
$data['price'] = $order['money'];
$data['goodname'] = '认证保证金';
$plugin = 'Attestation';
$payfor = 'Bond';
}
else if ($type == 'mobilerecharge') {
$order = pdo_get('wlmerchant_mrecharge_order' , ['id' => $orderid]);
$data['price'] = $order['price'];
$data['goodname'] = '充值'.$order['money'].'元';
$plugin = 'Mobilerecharge';
$payfor = 'RechargeOrder';
}
else if ($type == 'citydelivery') {
if(!empty($orderid)){
$order = pdo_get('wlmerchant_order' , ['id' => $orderid]);
$data['price'] = $order['price'];
$smallorders = pdo_getall('wlmerchant_delivery_order',array('tid' => $order['orderno']),array('gid'));
$data['goodname'] = pdo_getcolumn(PDO_NAME.'delivery_activity',array('id'=>$smallorders[0]['gid']),'name');
if(count($smallorders)>1){
$data['goodname'] .= ' 等';
}
}else{
$orderids = json_decode(base64_decode($deliverystring),true);
foreach ($orderids as $orid){
$order = pdo_get('wlmerchant_order' , ['id' => $orid]);
$data['price'] += $order['price'];
$smallorders = pdo_getall('wlmerchant_delivery_order',array('tid' => $order['orderno']),array('gid'));
$data['goodname'] = pdo_getcolumn(PDO_NAME.'delivery_activity',array('id'=>$smallorders[0]['gid']),'name');
if(count($smallorders) > 1 || count($orderids) > 1){
$data['goodname'] .= ' 等';
}
}
$data['price'] = sprintf("%.2f",$data['price']);
}
$plugin = 'Citydelivery';
$payfor = 'DeliveryOrder';
}
else {
//其他
$order = pdo_get('wlmerchant_order' , ['id' => $orderid]);
$data['price'] = $order['price'];
if ($order['plugin'] == 'groupon') {
$data['goodname'] = pdo_getcolumn(PDO_NAME . 'groupon_activity' , ['id' => $order['fkid']] , 'name');
$plugin = 'Groupon';
$payfor = 'GrouponOrder';
}
else if ($order['plugin'] == 'wlfightgroup') {
$data['goodname'] = pdo_getcolumn(PDO_NAME . 'fightgroup_goods' , ['id' => $order['fkid']] , 'name');
$plugin = 'Wlfightgroup';
$payfor = 'Fightsharge';
}
else if ($order['plugin'] == 'distribution') {
$data['goodname'] = '开通'.$_W['wlsetting']['trade']['fxstext'];
$plugin = 'Distribution';
$payfor = 'Applydis';
}
else if ($order['plugin'] == 'store') {
$data['goodname'] = '商户付费入驻';
$plugin = 'Merchant';
$payfor = 'Charge';
$checkpayP = 'Charge';
}
else if ($order['plugin'] == 'halfcard') {
if ($order['fkid']) {
$data['goodname'] = pdo_getcolumn(PDO_NAME . 'halfcardlist' , ['id' => $order['fkid']] , 'title');
}
else {
$data['goodname'] = pdo_getcolumn(PDO_NAME . 'merchantdata' , ['id' => $order['sid']] , 'storename');
}
$data['goodname'] = $data['goodname'] . '在线买单';
$plugin = 'Merchant';
$payfor = 'payonline';
$checkpayP = 'Payonline';
}
else if ($order['plugin'] == 'coupon') {
$data['goodname'] = pdo_getcolumn(PDO_NAME . 'couponlist' , ['id' => $order['fkid']] , 'title');
$plugin = 'wlCoupon';
$payfor = 'Couponsharge';
}
else if ($order['plugin'] == 'bargain') {
$data['goodname'] = pdo_getcolumn(PDO_NAME . 'bargain_activity' , ['id' => $order['fkid']] , 'name');
$plugin = 'Bargain';
$payfor = 'BargainOrder';
}
else if ($order['plugin'] == 'pocket') {
$data['goodname'] = '帖子付费项目';
$plugin = 'Pocket';
$payfor = 'pocketfabusharge';
}
else if ($order['plugin'] == 'consumption') {
$data['goodname'] = pdo_getcolumn(PDO_NAME . 'consumption_goods' , ['id' => $order['fkid']] , 'title');
$plugin = 'Consumption';
$payfor = 'consumOrder';
}
else if ($order['plugin'] == 'member') {
$data['goodname'] = $trade['moneytext'] . '充值';
$plugin = 'Member';
$payfor = 'Charge';
}
else if ($order['plugin'] == 'taxipay') {
$data['goodname'] = '出租车在线买单';
$plugin = 'Taxipay';
$payfor = 'TaxipayOrder';
}
else if ($order['plugin'] == 'citycard') {
$data['goodname'] = '同城名片支付项目';
$plugin = 'Citycard';
$payfor = 'CitycardOrder';
}
else if ($order['plugin'] == 'yellowpage') {
if($order['fightstatus'] == 1){
$data['goodname'] = '114页面认领';
}else if($order['fightstatus'] == 2){
$data['goodname'] = '114页面查看';
}else if($order['fightstatus'] == 3){
$data['goodname'] = '114页面入驻';
}
$plugin = 'Yellowpage';
$payfor = 'pageOrder';
}
else if($order['plugin'] == 'activity'){
$data['goodname'] = pdo_getcolumn(PDO_NAME . 'activitylist' , ['id' => $order['fkid']] , 'title');
$plugin = 'Activity';
$payfor = 'Activitysharge';
}
else if($order['plugin'] == 'recruit'){
$data['goodname'] = '招聘发布';
$plugin = 'Recruit';
$payfor = 'RecruitOrder';
}
else if($order['plugin'] == 'rights'){
$data['goodname'] = Rights::getRightsGoodname($order['fkid'],$order['payfor']);
$plugin = 'Rights';
$payfor = 'RightsOrder';
}
else if($order['plugin'] == 'dating'){
$data['goodname'] = '相亲交友';
$plugin = 'Dating';
$payfor = $order['payfor'];
}
else if($order['plugin'] == 'vehicle'){
$data['goodname'] = '顺风车';
$plugin = 'Vehicle';
$payfor = $order['payfor'];
}
else if ($order['plugin'] == 'housekeep') {
if($order['fightstatus'] == 1){
$data['goodname'] = '家政服务订单';
}else if($order['fightstatus'] == 2){
$data['goodname'] = '家政入驻订单';
}else if($order['fightstatus'] == 3){
$data['goodname'] = '家政需求付费发布';
}else if($order['fightstatus'] == 3){
$data['goodname'] = '家政需求付费置顶';
}else if($order['fightstatus'] == 3){
$data['goodname'] = '家政需求付费刷新';
}
$plugin = 'Housekeep';
$payfor = 'HousekeepOrder';
}
}
$data['sytime'] = $order['canceltime'] - time();
if ($data['sytime'] < 0) {
$data['sytime'] = 0;
}
if (empty($order)) {
$this->renderError('订单信息错误,请返回订单列表重新发起支付');
}
//判断mid和uniacid是否一致
if ($order['uniacid'] != $_W['uniacid']) {
$this->renderError('订单公众号错误,请返回订单列表重新进入支付页面');
}
if ($order['mid'] != $_W['mid']) {
$this->renderError('订单用户错误,请返回订单列表重新进入支付页面');
}
$data['balance'] = sprintf("%.2f" , $_W['wlmember']['credit2']);
//智慧城市
if($type == 'citydelivery' && !empty($orderids)){
$merchantlog = [
'uniacid' => $order['uniacid'] ,
'acid' => $_W['acid'] ,
'mid' => $order['mid'] ,
'module' => 'weliam_smartcity',
'plugin' => $plugin ,
'payfor' => $payfor ,
'tid' => createUniontid(),
'fee' => $data['price'] ,
'card_fee' => $data['price'] ,
'status' => '0' ,
'is_usecard' => '0' ,
];
pdo_insert(PDO_NAME . 'paylogvfour' , $merchantlog);
$merchantlogid = pdo_insertid();
foreach ($orderids as $orid2){
pdo_update('wlmerchant_order',array('paylogid' => $merchantlogid),array('id' => $orid2));
}
$order['orderno'] = $merchantlog['tid'];
}else{
$merchantlog = pdo_get(PDO_NAME . 'paylogvfour' , [
'uniacid' => $_W['uniacid'] ,
'plugin' => $plugin ,
'tid' => $order['orderno']
]);
if (empty($merchantlog)) {
$merchantlog = [
'uniacid' => $order['uniacid'] ,
'acid' => $_W['acid'] ,
'mid' => $order['mid'] ,
'module' => 'weliam_smartcity' ,
'plugin' => $plugin ,
'payfor' => $payfor ,
'tid' => $order['orderno'] ,
'fee' => $data['price'] ,
'card_fee' => $data['price'] ,
'status' => '0' ,
'is_usecard' => '0' ,
];
pdo_insert(PDO_NAME . 'paylogvfour' , $merchantlog);
}
}
if ($merchantlog['status'] == '1') {
$this->renderError('这个订单已经支付成功, 不需要重复支付' , $data);
}
//判断商品独立支付设置信息
if (in_array($plugin , ['Rush' , 'Groupon' , 'Wlfightgroup' , 'Bargain' , 'wlCoupon'])) {
//获取当前商品的独立支付设置
switch ($plugin) {
case 'Rush':
$goodsPayType = pdo_getcolumn(PDO_NAME . 'rush_activity' , ['id' => $order['activityid']] , 'pay_type');
break;
case 'Groupon':
$goodsPayType = pdo_getcolumn(PDO_NAME . 'groupon_activity' , ['id' => $order['fkid']] , 'pay_type');
break;
case 'Wlfightgroup':
$goodsPayType = pdo_getcolumn(PDO_NAME . 'fightgroup_goods' , ['id' => $order['fkid']] , 'pay_type');
break;
case 'Bargain':
$goodsPayType = pdo_getcolumn(PDO_NAME . 'bargain_activity' , ['id' => $order['fkid']] , 'pay_type');
break;
case 'wlCoupon':
$goodsPayType = pdo_getcolumn(PDO_NAME . 'couponlist' , ['id' => $order['fkid']] , 'pay_type');
break;
}
$goodsPayType = unserialize($goodsPayType);
}
$goodsPayType = is_array($goodsPayType) && count($goodsPayType) > 0 ? $goodsPayType : ['wechat' , 'alipay' , 'balance','yunpay'];
//获取开启的支付方式 支付渠道 1=公众号(默认);2=h5;3=小程序
$paymentSet = Setting::wlsetting_read('payment_set');
switch ($_W['source']) {
case 1:
$wechat_payset = $paymentSet['wechat'];
break;//公众号
case 2:
$wechat_payset = $paymentSet['h5'];
break;//h5
case 3:
$wechat_payset = $paymentSet['wxapp'];
break;//小程序
}
if (!empty($wechat_payset['balance']) && $order['payfor'] != 'recharge' && in_array('balance' , $goodsPayType)) {
//开启余额支付的情况下 判断当前模块是否支持余额支付
$balanceModel = is_array($wechat_payset['balance_model']) ? $wechat_payset['balance_model'] : [];//限制模块信息
$allowList = array_keys(Payment::getBalanceModel());//允许限制的模块列表
if(empty($checkpayP)){
$checkpayP = $plugin;
}
//判断:存在限制模块&&当前模块在允许限制列表中&&不允许当前模块使用余额支付
if(count($balanceModel) > 0 && in_array($checkpayP,$allowList) && !in_array($checkpayP,$balanceModel)){
$data['credit'] = 0;
}else{
$data['credit'] = 1;
}
}else {
$data['credit'] = 0;
}
if ($wechat_payset['wechat'] > 0 && in_array('wechat' , $goodsPayType)) {
$data['wechat'] = 1;
}else {
$data['wechat'] = 0;
}
if ($wechat_payset['alipay'] > 0 && in_array('alipay' , $goodsPayType)) {
$data['alipay'] = 1;
}else {
$data['alipay'] = 0;
}
if ($wechat_payset['yunpay'] > 0 && in_array('yunpay' , $goodsPayType)) {
$data['yunpay'] = 1;
$data['yunset']['logo'] = $_W['wlsetting']['base']['yun_logo'] ? tomedia($_W['wlsetting']['base']['yun_logo']) : '';
$data['yunset']['title'] = $_W['wlsetting']['base']['yun_title'] ? : '银联云收单';
$data['yunset']['desc'] = $_W['wlsetting']['base']['yun_desc'] ? : '支付有优惠';
}else {
$data['yunpay'] = 0;
}
$data['tid'] = $order['orderno'];
//881定制内容
$isAuth = Customized::init('diy_userInfo');
if($isAuth){
$data['diy_userInfo']['dkprice'] = $data['balance'] > $data['price'] ? $data['price'] : $data['balance'];
$data['diy_userInfo']['dhurl'] = $_W['wlsetting']['recharge']['dhurl'];
$data['diy_userInfo']['dhtip2'] = $_W['wlsetting']['recharge']['dhtip2']?$_W['wlsetting']['recharge']['dhtip2']:'中国移动/中国银行积分可兑换乐豆';
}
$this->renderSuccess('订单支付信息' , $data);
}
/**
* Comment: 用户对订单进行评论
* Author: zzw
* Date: 2019/8/15 13:43
*/
public function orderComment(){
global $_W , $_GPC;
$mastmobile = unserialize($_W['wlsetting']['userset']['plugin']);
if (empty($_W['wlmember']['mobile']) && in_array('private',$mastmobile)){
$this->renderError('未绑定手机号');
}
#1、参数接收
$mid = $_W['mid'];//用户id
$id = intval($_GPC['id']) OR $this->renderError('缺少id信息');//订单id
if(!empty($_GPC['pic'])){
$pic = explode(',' , $_GPC['pic']);//评论图片地址
$pic = serialize($pic);
}else {
$pic = '';
}
$data['ispic'] = $_GPC['pic'] ? 1 : 0;
$text = $_GPC['text'] OR $this->renderError('请输入评论内容!');//文本评论内容
$star = $_GPC['star'];//评论星级 1-5
$tableType = $_GPC['table'];//表的类型 a = order b = rush_order 为空是核销内容的评论
//判断文本内容是否非法
$textRes = Filter::init($text , $_W['source'] , 1);
if ($textRes['errno'] == 0) {
$this->renderError($textRes['message']);
}
#2、数据拼装
$data = [
'uniacid' => $_W['uniacid'] ,
'mid' => $mid ,
'status' => 1 , //默认显示
'pic' => $pic ,
'idoforder' => $id ,
'text' => $text ,
'star' => intval($star) ,
'createtime' => time() ,
'headimg' => $_W['wlmember']['avatar'] ,
'nickname' => $_W['wlmember']['nickname']
];
#3、获取店铺id 商品类型 并且修改订单状态为已完成
WeliamWeChat::startTrans();//开启事务
switch ($tableType) {
case 'a':
$table = PDO_NAME . 'order';
$orderInfo = pdo_get($table , ['id' => $id] , ['sid' ,'fkid','aid' , 'plugin']);
$res = pdo_update($table , ['status' => 3] , ['id' => $id]);
$gid = $orderInfo['fkid'];
break;//其他订单
case 'b':
$table = PDO_NAME . 'rush_order';
$orderInfo = pdo_get($table , ['id' => $id] , ['sid' ,'activityid', 'aid']);
$orderInfo['plugin'] = 'rush';
$res = pdo_update($table , ['status' => 3] , ['id' => $id]);
$gid = $orderInfo['activityid'];
break;//抢购订单
default:
$table = PDO_NAME . 'timecardrecord';
$orderInfo = pdo_get($table , ['id' => $id] ,['aid','merchantid','activeid']);
$orderInfo['plugin'] = 'usehalf';
$res = pdo_update($table , ['commentflag' => 1] , ['id' => $id]);
$gid = $orderInfo['activeid'];
break;//核销内容的评论
}
$data['aid'] = $orderInfo['aid'];
$data['gid'] = $gid ? : 0;
$data['sid'] = $orderInfo['sid'];
$data['plugin'] = $orderInfo['plugin'];
if($data['plugin'] == 'housekeep'){
$serviceType = pdo_getcolumn(PDO_NAME.'housekeep_service',array('id'=>$gid),'type');
if($serviceType == 2){
$data['housekeepflag'] = 1;
}
}
if (!$res) {
WeliamWeChat::rollback();//回滚
$this->renderError('订单信息修改失败');
}
else if (empty($data['plugin'])) {
WeliamWeChat::rollback();//回滚
$this->renderError('订单不存在');
}
#4、判断评分等级
if ($data['star'] > 3) $data['level'] = 1;
else if ($data['star'] == 3) $data['level'] = 2;
else $data['level'] = 3;
#4、储存评论信息
$result = pdo_insert(PDO_NAME . 'comment' , $data);
if ($result) {
WeliamWeChat::commit();//提交事务
//评论成功 给管理员发送模板消息
$first = "用户【{$data['nickname']}】发布了一条评论";//消息头部
$type = "评论审核通知";//业务类型
$content = $data['text'];//业务内容
$status = "待审核";//处理结果
$remark = "请尽快审核!";//备注信息
$time = $data['createtime'];//操作时间
News::noticeAgent('storecomment' , $_W['aid'] , $first , $type , $content , $status , $remark , $time);
$this->renderSuccess('评论成功' , ['id' => pdo_insertid()]);
}
else {
WeliamWeChat::rollback();//回滚
$this->renderError('评论失败');
}
}
/**
* Comment: 转换plugin参数
* Author: wlf
* Date: 2019/8/21 10:00
*/
public function conversion($type)
{
$types = [
1 => 'rush' , //抢购
2 => 'groupon' , //团购
3 => 'wlfightgroup' , //拼团
5 => 'coupon' , //超级券
6 => 'payonline' , //在线买单
7 => 'bargain' , //砍价
8 => 'consumption' , //兑换
9 => 'halfcard' , //一卡通
10 => 'store', //商户
11 => 'activity' //同城活动
];
return $types[$type];
}
/**
* Comment: 订单提交页面
* Author: wlf
* Date: 2019/8/16 09:38
*/
public function orderSubmit()
{
global $_W , $_GPC;
$type = $this->conversion($_GPC['plugin']); //插件类型
$specid = $_GPC['specid']; //规格id
$id = $_GPC['id']; //商品id
$num = $_GPC['num'] ? intval($_GPC['num']) : 1; //购买数量
$buystatus = $_GPC['buystatus']; //拼团单购 团购
$addressid = $_GPC['addressid'];
$getDraw = intval($_GPC['drawid']); //领取抽奖奖品
if(!empty($_GPC['luckydrawid'])){
$getDraw = intval($_GPC['luckydrawid']); //领取锦鲤抽奖奖品
}
if($getDraw > 0){
$type = $_GPC['plugin'];
}
//验证会员
if ($_W['mid']) {
$userhalfcard = WeliamWeChat::VipVerification($_W['mid']);
if($userhalfcard['id'] > 0){
$halfcardflag = $userhalfcard['id'];
$halfcardlevel = $userhalfcard['levelid'];
}
}
$allcredit = sprintf("%.2f" , $_W['wlmember']['credit1']);
$data = [];
$data['plugin'] = $type;
$data['halfcardflag'] = $halfcardflag;
$data['allcredit'] = $allcredit;
$data['realname'] = $_W['wlmember']['realname'] ? $_W['wlmember']['realname'] : $_W['wlmember']['nickname'];
$data['mobile'] = $_W['wlmember']['mobile'];
if ($type == 'bargain') {
$goods = pdo_get('wlmerchant_bargain_activity' , ['id' => $id]);
$user = pdo_get('wlmerchant_bargain_userlist' , ['id' => $specid] , ['price']);
$price = $goodsprice = $goods['price'] = $user['price'];
$storename = pdo_getcolumn('wlmerchant_merchantdata' , ['id' => $goods['sid']] , 'storename');
$data['goodsname'] = $goods['name']; //商品名
$data['goodsimg'] = tomedia($goods['thumb']); //商品图案
$data['goodsprice'] = $goodsprice; //商品单价
$data['usestatus'] = $goods['usestatus']; //使用方式
$data['optionname'] = ''; //规格名
$data['vipdiscount'] = 0; //会员减免
$data['carddiscount'] = 0; //开卡减免
$sid = $goods['sid'];
}
if ($type == 'consumption') {
$goods = Consumption::creditshop_goods_get($id);
//会员价格
if ($goods['vipstatus'] == 1) {
$data['carddiscount'] = sprintf("%.2f" , ($goods['use_credit2'] - $goods['vipcredit2']) * $num); //会员减免
if ($halfcardflag) {
$goods['use_credit1'] = $goods['vipcredit1'];
$data['vipdiscount'] = $data['carddiscount'];
}
else {
$data['vipdiscount'] = 0;
}
}
else {
$data['vipdiscount'] = 0;
$data['carddiscount'] = 0; //开卡减免
}
if ($goods['type'] == 'credit2' || $goods['type'] == 'halfcard') {
$conflag = 1;
$goods['usestatus'] = 0;
} //虚拟兑换
if ($goods['type'] == 'goods') {
$goods['usestatus'] = 1;
}
$goodsprice = sprintf("%.2f",$goods['use_credit2']);
$data['goodsname'] = $goods['title']; //商品名
$data['goodsimg'] = tomedia($goods['thumb']); //商品图案
$data['goodsprice'] = $goodsprice; //商品单价
$data['usestatus'] = $goods['usestatus']; //使用方式
$data['optionname'] = ''; //规格名
if ($halfcardflag && $goods['vipstatus'] == 1) {
$data['credit'] = $goods['vipcredit1'] * $num;
}
else {
$data['credit'] = $goods['use_credit1'] * $num;
}
$data['creditdiscount'] = 0; //积分抵扣
$sid = 0;
}
if ($type == 'coupon') {
$goods = pdo_get('wlmerchant_couponlist' , ['id' => $id]);
$goodsprice = $goods['price'];
$data['goodsname'] = $goods['title']; //商品名
$data['goodsimg'] = tomedia($goods['logo']); //商品图案
$data['goodsprice'] = $goodsprice; //商品单价
$data['usestatus'] = 0; //使用方式
$data['optionname'] = $goods['sub_title']; //规格名
if ($goods['vipstatus'] == 1) {
$goods['vipdiscount'] = WeliamWeChat::getVipDiscount($goods['viparray'],$halfcardlevel);
$vipReduce = sprintf("%.2f" , $goods['vipdiscount'] * $num);
$data['carddiscount'] = unserialize($goods['viparray']);
if ($halfcardflag) {
$data['vipdiscount'] = $vipReduce;
}
else {
$data['vipdiscount'] = 0;
}
}
else {
$data['vipdiscount'] = 0;
$data['carddiscount'] = [];
}
$data['credit'] = 0;
$data['creditdiscount'] = 0; //积分抵扣
$sid = $goods['merchantid'];
}
if ($type == 'wlfightgroup') {
$goods = pdo_get('wlmerchant_fightgroup_goods' , ['id' => $id]);
if ($specid) {
$option = pdo_get('wlmerchant_goods_option' , ['id' => $specid] , ['title' , 'price','vipprice','uuid' , 'viparray']);
if ($buystatus == 1) {
$goods['price'] = $option['price'];
}else {
$goods['price'] = $option['vipprice'];
}
$goods['viparray'] = WeliamWeChat::mergeVipArray($option['viparray'],$goods['viparray']);
}
else if ($buystatus == 2) {
$goods['price'] = $goods['aloneprice'];
$option['title'] = '';
}
else {
$option['title'] = '';
}
$goodsprice = sprintf("%.2f" , $goods['price'] * $num);
//会员抵扣
if ($goods['vipstatus'] == 1) {
$goods['vipdiscount'] = WeliamWeChat::getVipDiscount($goods['viparray'],$halfcardlevel);
$vipReduce = sprintf("%.2f" , $goods['vipdiscount'] * $num);
$data['carddiscount'] = unserialize($goods['viparray']);
if ($halfcardflag) {
$vipdiscount = $vipReduce;
}
else {
$vipdiscount = 0;
}
}
else {
$vipdiscount = 0;
$data['carddiscount'] = [];
}
$data['goodsname'] = $goods['name']; //商品名
$data['goodsimg'] = tomedia($goods['logo']); //商品图案
$data['goodsprice'] = $goods['price']; //商品单价
$data['usestatus'] = $goods['usestatus']; //使用方式
$data['optionname'] = $option['title']; //规格名
$data['vipdiscount'] = $vipdiscount; //会员减免
$price = sprintf("%.2f" , $goods['price'] - $goods['vipdiscount']);
//拼团 - 团长优惠
$data['is_com_dis'] = intval(0);
if ($buystatus == 1 && $goods['is_com_dis'] == 1) {
$data['is_com_dis'] = intval($goods['is_com_dis'] ? : 0);
$data['com_dis_price'] = sprintf("%.2f" , ($goods['com_dis_price'] ? : 0));
}
$sid = $goods['merchantid'];
}
if ($type == 'rush') {
$goods = pdo_get('wlmerchant_rush_activity' , ['id' => $id]);
if ($specid) {
$option = pdo_get('wlmerchant_goods_option' , ['id' => $specid] , ['title' , 'price' , 'viparray', 'uuid','pftotherinfo']);
$goods['price'] = $option['price'];
$goods['vipprice'] = $option['vipprice'];
$goods['viparray'] = WeliamWeChat::mergeVipArray($option['viparray'],$goods['viparray']);
$goods['ticketid'] = $option['uuid'];
$goods['pftotherinfo'] = $option['pftotherinfo'];
}
else {
$option['title'] = '';
}
#判断是否开启阶梯价(目前仅抢购存在) 是否开启阶梯价(0=关闭 1=开启)
if ($goods['lp_status'] == 1) {
$goods['lp_set'] = is_array(unserialize($goods['lp_set'])) ? unserialize($goods['lp_set']) : [];
if (count($goods['lp_set']) > 0) {
$info = WeliamWeChat::getHomeGoods(1 , $id);
$allsalenum = intval($info['allsalenum']);
foreach ($goods['lp_set'] as $lpKey => $lpVal) {
$lpVal['max'] = intval($lpVal['max']) + $allsalenum;
if ($info['buy_num'] < $lpVal['max']) {
$goods['price'] = $lpVal['price'];
$goods['vipprice'] = $lpVal['vip_price'];
break;
}
}
}
}
//其他信息计算
if ($goods['vipstatus'] == 1) {
$goods['vipdiscount'] = WeliamWeChat::getVipDiscount($goods['viparray'],$halfcardlevel);
$vipReduce = sprintf("%.2f" , $goods['vipdiscount'] * $num);
$data['carddiscount'] = unserialize($goods['viparray']);
if ($halfcardflag) {
$price = $goods['price'];
$data['vipdiscount'] = $vipReduce; //会员减免
}
else {
$data['vipdiscount'] = 0;
}
}
else {
$price = $goods['price'];
$data['vipdiscount'] = 0;
$data['carddiscount'] = [];
}
$goodsprice = sprintf("%.2f" , $price * $num);
$data['goodsname'] = $goods['name']; //商品名
$data['goodsimg'] = tomedia($goods['thumb']); //商品图案
$data['goodsprice'] = $goods['price']; //商品单价
$data['usestatus'] = $goods['usestatus']; //使用方式
$data['optionname'] = $option['title']; //规格名
$sid = $goods['sid'];
}
if ($type == 'groupon') {
$goods = pdo_get('wlmerchant_groupon_activity' , ['id' => $id]);
if ($specid) {
$option = pdo_get('wlmerchant_goods_option' , ['id' => $specid] , ['title' , 'price' , 'viparray', 'uuid','pftotherinfo']);
$goods['price'] = $option['price'];
$goods['viparray'] = WeliamWeChat::mergeVipArray($option['viparray'],$goods['viparray']);
$goods['ticketid'] = $option['uuid'];
$goods['pftotherinfo'] = $option['pftotherinfo'];
}
else {
$option['title'] = '';
}
//计算会员特价
if ($goods['vipstatus'] == 1) {
$goods['vipdiscount'] = WeliamWeChat::getVipDiscount($goods['viparray'],$halfcardlevel);
$vipReduce = sprintf("%.2f" , $goods['vipdiscount'] * $num);
$data['carddiscount'] = unserialize($goods['viparray']);
if ($halfcardflag) {
$data['vipdiscount'] = $vipReduce;
}
else {
$data['vipdiscount'] = 0;
}
}
else {
$data['vipdiscount'] = 0;
$data['carddiscount'] = [];
}
$data['goodsname'] = $goods['name']; //商品名
$data['goodsimg'] = tomedia($goods['thumb']); //商品图案
$data['goodsprice'] = $goods['price']; //商品单价
$data['usestatus'] = $goods['usestatus']; //使用方式
$data['optionname'] = $option['title']; //规格名
$sid = $goods['sid'];
}
if ($type == 'activity'){
$goods = pdo_get('wlmerchant_activitylist' , ['id' => $id]);
if($specid > 0){
$spec = pdo_get('wlmerchant_activity_spec' , ['id' => $specid]);
$goods['price'] = $spec['price'];
$data['optionname'] = $spec['name'];
$goods['viparray'] = WeliamWeChat::mergeVipArray($spec['viparray'],$goods['viparray']);
}
$price = $goodsprice = $goods['price'];
$storename = pdo_getcolumn('wlmerchant_merchantdata',['id' => $goods['sid']] , 'storename');
$data['goodsname'] = $goods['title']; //商品名
$data['goodsimg'] = tomedia($goods['thumb']); //商品图案
$data['goodsprice'] = $goodsprice; //商品单价
$data['usestatus'] = 0; //使用方式
if($goods['vipstatus'] == 1){
$goods['vipdiscount'] = WeliamWeChat::getVipDiscount($goods['viparray'],$halfcardlevel);
$data['vipdiscount'] = sprintf("%.2f" , $goods['vipdiscount']*$num); //会员减免
$data['carddiscount'] = unserialize($goods['viparray']);
}else{
$data['vipdiscount'] = 0;
$data['carddiscount'] = [];
}
$sid = $goods['sid'];
}
//红包系统
if(p('redpack') && empty($getDraw)){
$data['redpacklist'] = Redpack::getNotUseList($data['goodsprice'] * $num,$sid,$goods['aid'],$id,$type);
}else{
$data['redpacklist'] = ['list'=>[],'total'=>0];
}
//满减优惠
if($goods['fullreduceid']>0 && empty($getDraw)){
$fullreduce = pdo_get('wlmerchant_fullreduce_list',array('id' => $goods['fullreduceid'],'status' => 1),array('rules','title'));
if(!empty($fullreduce)){
$data['fullreducelist']['title'] = $fullreduce['title'];
$data['fullreducelist']['list'] = unserialize($fullreduce['rules']);
}
}
//积分抵扣
if ($goods['creditmoney']>0 && $_W['wlsetting']['creditset']['dkstatus'] && empty($getDraw)) {
//每一份可以使用的积分
$onedkcredit = sprintf("%.2f" , $goods['creditmoney'] * $_W['wlsetting']['creditset']['proportion']);
//总共需要积分
$dkcredit = sprintf("%.2f" , $onedkcredit * $num);
//用户所有积分
if ($allcredit < $dkcredit) {
$dkcredit = $allcredit;
}
//抵扣金额
$dkmoney = sprintf("%.2f" , $dkcredit / $_W['wlsetting']['creditset']['proportion']);
$data['credit'] = $dkcredit; //可使用积分
$data['creditdiscount'] = $dkmoney; //积分抵扣金额
}
else {
if (empty($data['credit'])) {
$data['credit'] = 0; //可使用积分
}
$data['creditdiscount'] = 0; //积分抵扣金额
}
//计算运费
if ($data['usestatus'] > 0) {
if ($addressid) {
$address = pdo_get('wlmerchant_address' , ['id' => $addressid] , ['id','name' ,'status','tel','province','city','county','detailed_address']);
}else{
$address = pdo_get('wlmerchant_address' , ['mid' => $_W['mid'] , 'uniacid' => $_W['uniacid'] , 'status' => 1] , ['id' , 'status' , 'name' , 'tel' , 'province' , 'city' , 'county' , 'detailed_address']);
}
if (empty($address)){
$address = pdo_get('wlmerchant_address' , ['mid' => $_W['mid'] , 'uniacid' => $_W['uniacid']] , ['id' , 'name' , 'status' , 'tel' , 'province' , 'city' , 'county' , 'detailed_address']);
if ($address) {
pdo_update('wlmerchant_address' , ['status' => 1] , ['id' => $address['id']]);
}
}
if (empty($address)) {
$data['expressprice'] = 0;
$data['address'] = '';
}else{
$expressarray = $this->freight($address['id'],$num,$goods);
$data['expressprice'] = $expressarray['price'];
$data['address'] = $address;
}
}
//支付开卡功能
if(empty($getDraw)){
$data['is_openvip'] = $_W['wlsetting']['halfcard']['is_openvip'];
}else{
$data['is_openvip'] = 0;
}
//额外表单内容
if($goods['diyformid'] > 0){
$diyFromInfo = pdo_getcolumn(PDO_NAME . 'diyform' , ['id' => $goods['diyformid']] , 'info');
$data['diyform'] = json_decode(base64_decode($diyFromInfo) , true);//页面的配置信息
$data['diyformid'] = $goods['diyformid'];
}
//票付通
$data['pftid'] = $goods['pftid'] ? : 0;
$data['pftuid'] = $goods['ticketid'] ? : 0;
$data['threestatus'] = $goods['threestatus'] ? : 0;
if($data['pftid'] > 0){
$pftotherinfo = unserialize($goods['pftotherinfo']);
if(empty($data['threestatus'])){
$data['UUtourist_info'] = $pftotherinfo['UUtourist_info'];
$data['UUdelaytype'] = $pftotherinfo['UUdelaytype'] ? 0 : 1;
if($data['UUdelaytype'] > 0){
$data['UUorder_start'] = date('Y-m-d', time());
$end = strtotime($pftotherinfo['UUorder_end']);
if($end > 0){
$data['UUorder_end'] = date('Y-m-d',$end);
}else{
$data['UUorder_end'] = date('Y-m-d',$goods['endtime']);
}
}
}else if($data['threestatus'] == 1){
$data['template'] = json_decode($pftotherinfo['template']);
}
}
$this->renderSuccess('订单确认页面' , $data);
}
/**
* Comment: 积分抵扣函数
* Author: wlf
* Date: 2019/09/11 14:29
*/
public function creditDeduction($creditmoney , $num , $remark)
{
global $_W , $_GPC;
$onecreditmoney = 1 / $_W['wlsetting']['creditset']['proportion'];
$allcredit = sprintf("%.2f" , $_W['wlmember']['credit1']);
$dkmoney = sprintf("%.2f" , $creditmoney * $num);
$dkcredit = sprintf("%.2f" , $dkmoney / $onecreditmoney);
if ($dkcredit > $allcredit) {
$dkcredit = $allcredit;
$dkmoney = sprintf("%.2f" , $onecreditmoney * $dkcredit);
}
Member::credit_update_credit1($_W['mid'] , -$dkcredit , $remark);
return ['dkcredit' => $dkcredit , 'dkmoney' => $dkmoney];
}
/**
* Comment: 生成订单接口
* Author: wlf
* Date: 2019/8/16 14:55
*/
public function createOrder()
{
global $_W , $_GPC;
$id = $_GPC['id']; //商品id
$num = $_GPC['num'] ? : 1; //商品数量
$usestatus = $_GPC['usestatus']; //使用方式
$plugin = $_GPC['plugin']; //商品插件
$optionid = $_GPC['specid']; //规格id
$creditstatus = $_GPC['creditstatus']; //积分抵扣
$username = trim($_GPC['thname']); //提货人姓名
$mobile = trim($_GPC['thmobile']); //提货人电话
$addressid = $_GPC['addressid']; //获取地址信息
$remark = trim($_GPC['remark']); //买家备注
$buystatus = $_GPC['buystatus']; //拼团特殊值,2单购 1团购
$groupid = intval($_GPC['groupid']); //拼团特殊值,团id
$cardId = intval($_GPC['vip_card_id']); //同时开启一卡通
$redpackid = intval($_GPC['redpackid']); //使用的红包
$drawid = intval($_GPC['drawid']) ? : 0; //领取抽奖奖品
$luckydrawid = intval($_GPC['luckydrawid']) ? : 0; //领取锦鲤抽奖奖品
$diyformid = intval($_GPC['diyformid']) ? : 0; //自定义表单id
$settings = Setting::wlsetting_read('orderset'); //获取设置参数
if (empty($settings['cancel'])) {
$settings['cancel'] = 10;
}
$mastmobile = unserialize($_W['wlsetting']['userset']['plugin']);
if (empty($_W['wlmember']['mobile']) && in_array($plugin , $mastmobile)) {
$this->renderError('未绑定手机号');
}
if ((empty($addressid) || $addressid == 'undefined') && !empty($usestatus)) {
$this->renderError('请设置收货地址');
}
//一卡通信息
if (!empty($cardId)) {
$buycard = pdo_get(PDO_NAME . 'halfcard_type' , ['id' => $cardId] , ['price','levelid']);
}
$userhalfcard = WeliamWeChat::VipVerification($_W['mid']);
$halfcardflag = $userhalfcard['id'];
if($halfcardflag > 0){
$uhlevel = $userhalfcard['levelid'];
}else if(!empty($cardId)){
$uhlevel = $buycard['levelid'];
}
$nodis = 0;
//红包优惠
if(p('redpack') && $redpackid > 0){
$redpack = pdo_fetch("SELECT b.cut_money FROM".tablename(PDO_NAME . "redpack_records")
." as a LEFT JOIN " . tablename(PDO_NAME . "redpacks")
." as b ON a.packid = b.id WHERE a.id = {$redpackid}");
$redpackmoney = $redpack['cut_money'];
}else{
$redpackmoney = 0;
}
//额外表单
$diyFormInfo = [];
if($diyformid > 0){
//额外表单
$diyFormInfo = array_values(json_decode(html_entity_decode($_GPC['datas']),true));
// $diyFormSet = pdo_getcolumn(PDO_NAME."diyform",['id'=>$diyformid],'info');
// $diyFormSet = array_values(json_decode(base64_decode($diyFormSet), true)['list']);//页面的配置信息
// foreach($diyFormInfo as $formKey => &$formVal){
// $formVal['title'] = $diyFormSet[$formKey]['data']['title'];
// }
}
$pftid = $_GPC['pftid'];
if($pftid > 0){
$pftInfo = json_decode(base64_decode($_GPC['pftdatas']) , true);
if(empty($pftInfo['ordername'])){
$pftInfo['ordername'] = $username;
}
}else{
$pftInfo = '';
}
//亿奇达
$template = $_GPC['template'];
if(!empty($template)){
$template = explode(',',$template);
foreach ($template as &$tem){
$tem = urlencode($tem);
}
$pftInfo = $template;
}
if ($plugin == 'rush') {
MysqlFunction::setTrans(4);
MysqlFunction::startTrans();
$activity = Rush::getSingleActive($id , '*');
//判断活动状态
if ($activity['status'] != 2) {
if ($activity['status'] == 1) {
MysqlFunction::rollback();
$this->renderError('活动未开始');
}
else if ($activity['status'] == 3) {
MysqlFunction::rollback();
$this->renderError('活动已结束');
}
else if ($activity['status'] == 4) {
MysqlFunction::rollback();
$this->renderError('商品已下架');
}
else if ($activity['status'] == 7) {
MysqlFunction::rollback();
$this->renderError('商品已抢完');
}else if ($activity['status'] == 8) {
MysqlFunction::rollback();
$this->renderError('商品已删除');
}else{
MysqlFunction::rollback();
$this->renderError('商品未在售卖中');
}
}
if($activity['usedatestatus'] > 0){
$check = WeliamWeChat::checkUseDateStatus($activity['usedatestatus'],$activity['week'],$activity['day']);
if(empty($check)){
$this->renderError('今日商品未在售卖中');
}
}
if($activity['daylimit'] > 0){
$today = strtotime(date('Y-m-d'));
$daysalenum = WeliamWeChat::getSalesNum(1,$id,0,1,$_W['mid'],$today);
$sup = $activity['daylimit'] - intval($daysalenum);
if($num > $sup){
$this->renderError('您今日还可以购买'.$sup.'份');
}
}
if($activity['monthlimit'] > 0){
$tomonth = strtotime(date('Y-m'));
$monthsalenum = WeliamWeChat::getSalesNum(1,$id,0,1,$_W['mid'],$tomonth);
$sup = $activity['monthlimit'] - intval($monthsalenum);
if($num > $sup){
$this->renderError('您这个月还可以购买'.$sup.'份');
}
}
if($activity['alldaylimit'] > 0){
$today = strtotime(date('Y-m-d'));
$alldaysalenum = WeliamWeChat::getSalesNum(1,$id,0,1,0,$today);
$sup = $activity['alldaylimit'] - intval($alldaysalenum);
if($num > $sup){
$this->renderError('商品今日份额还剩'.$sup.'份');
}
}
//判断规格
if ($activity['optionstatus']) {
if ($optionid) {
$option = pdo_get('wlmerchant_goods_option' , ['id' => $optionid] , [
'stock' ,
'price' ,
'title' ,
'viparray',
'disarray'
]);
$activity['price'] = $option['price'];
$total = $option['stock'];
$activity['viparray'] = WeliamWeChat::mergeVipArray($option['viparray'],$activity['viparray']);
}
else {
MysqlFunction::rollback();
$this->renderError('规格参数错误,请重新选择');
}
}
else {
$optionid = 0;
$total = $activity['num'];
}
#判断是否开启阶梯价(目前仅抢购存在) 是否开启阶梯价(0=关闭 1=开启)
if ($activity['lp_status'] == 1) {
$activity['lp_set'] = is_array(unserialize($activity['lp_set'])) ? unserialize($activity['lp_set']) : [];
if (count($activity['lp_set']) > 0) {
$info = WeliamWeChat::getHomeGoods(1 , $id);
$allsalenum = intval($info['allsalenum']);
foreach ($activity['lp_set'] as $lpKey => $lpVal) {
$lpVal['max'] = intval($lpVal['max']) + $allsalenum;
if ($info['buy_num'] < $lpVal['max']) {
$activity['price'] = $lpVal['price'];
$nowStk = $lpVal['max'] - $info['buy_num'];//当前区间上限 - 已售数量 = 当前区间库存
break;
}
}
//判断是否超出当前区间上限
if ($nowStk < 0) {
MysqlFunction::rollback();
$this->renderError("当前区间还可购买{$nowStk}件,您已超出" . ($info['buy_num'] - $lpVal['max']) . "");
}
}
}
//判断剩余数量
$salesVolume = WeliamWeChat::getSalesNum(1,$id,$optionid,1);
$levelnum = $total - intval($salesVolume);
if($levelnum < $num){
MysqlFunction::rollback();
$this->renderError('商品库存不足');
}
if ($levelnum < 1) {
MysqlFunction::rollback();
$this->renderError('该商品已被抢完。');
}
/*判断会员*/
$price = $activity['price'];
$level = unserialize($activity['level']);
if ($activity['vipstatus'] == 1) {
if ($halfcardflag || !empty($cardId)) {
$vipdiscount = WeliamWeChat::getVipDiscount($activity['viparray'],$uhlevel);
if($vipdiscount>0){
$vipbuyflag = 1;
}
}
}
else if ($activity['vipstatus'] == 2) {
if (empty($halfcardflag) && empty($cardId)) {
MysqlFunction::rollback();
$this->renderError('该商品会员特供,请先成为会员');
}
else if ($level) {
//判断等级
$flag = Halfcard::checklevel($_W['mid'] , $level);
if (empty($flag)) {
MysqlFunction::rollback();
$this->renderError('您所在的会员等级无权购买该商品');
}
}
}
if (empty($vipbuyflag)) {
$vipbuyflag = 0;
}
/*判断已购买数量*/
if ($activity['op_one_limit']) {
$alreadyBuyNum = WeliamWeChat::getSalesNum(1,$id,0,1,$_W['mid']);
$levelnum = $activity['op_one_limit'] - intval($alreadyBuyNum);
if ($levelnum < 0) {
$levelnum = 0;
}
if (!$levelnum) {
MysqlFunction::rollback();
$this->renderError('限购商品!您已全部购买');
}
else if ($num > $levelnum) {
MysqlFunction::rollback();
$this->renderError('限购商品!您还能购买' . $levelnum . $activity['unit']);
}
}
//积分抵扣
if ($creditstatus) {
if ($activity['creditmoney'] > $price) {
$activity['creditmoney'] = $price;
}
$creditremark = '抢购[' . $activity['name'] . ']抵扣积分';
$creditindo = self::creditDeduction($activity['creditmoney'] , $num , $creditremark);
$dkcredit = $creditindo['dkcredit'];
$dkmoney = $creditindo['dkmoney'];
}
else {
$dkcredit = 0;
$dkmoney = 0;
}
//结算金额
if($activity['lp_status']>0){
if($vipbuyflag>0){
$useprice = $activity['price'] - $vipdiscount;
}else{
$useprice = $activity['price'];
}
}else{
$useprice = 0;
}
$settlementmoney = Store::getsettlementmoney(1 , $id , $num , $activity['sid'] , $vipbuyflag , $optionid,0,$useprice,$uhlevel);
if($settlementmoney < 0.01){
$settlementmoney = Store::getsettlementmoney(1 , $id , $num , $activity['sid'] , $vipbuyflag , $optionid,0,$useprice,$uhlevel);
if($settlementmoney < 0.01){
$settlementmoney = Store::getsettlementmoney(1 , $id , $num , $activity['sid'] , $vipbuyflag , $optionid,0,$useprice,$uhlevel);
}
}
if($vipdiscount > 0){
$vipdiscount = $vipdiscount * $num;
}else{
$vipdiscount = 0;
}
//快递订单
if ($usestatus) {
$express = $this->freight($addressid , $num , $activity);
$expressprice = $express['price'];
$expressid = $express['expressid'];
$settlementmoney = sprintf("%.2f" , $settlementmoney + $expressprice);
$neworderflag = 0;
}else {
$expressprice = 0;
$neworderflag = 1;
}
//创建订单
$prices = sprintf("%.2f" , $price * $num);
//满减活动
if($activity['fullreduceid']>0){
$fulldkmoney = Fullreduce::getFullreduceMoney(sprintf("%.2f" , $prices - $vipdiscount),$activity['fullreduceid']);
}else{
$fulldkmoney = 0;
}
if (!empty($cardId)) {
$cardprice = pdo_getcolumn(PDO_NAME . 'halfcard_type' , ['id' => $cardId] , 'price');
}
else {
$cardprice = 0;
}
if($drawid > 0){
$flag = pdo_getcolumn(PDO_NAME.'rush_order',array('drawid'=>$drawid),'id');
if($flag > 0){
$this->renderError('此奖品已被领取,无法重复领取');
}
$prices = 0;
}
if($luckydrawid > 0){
$flag = pdo_getcolumn(PDO_NAME.'rush_order',array('luckydrawid'=>$luckydrawid),'id');
if($flag > 0){
$this->renderError('此奖品已被领取,无法重复领取');
}
$prices = 0;
}
$actualprice = sprintf("%.2f" , $prices - $vipdiscount - $redpackmoney - $dkmoney - $fulldkmoney + $expressprice + $cardprice);
$data = [
'uniacid' => $activity['uniacid'] ,
'unionid' => $_W['unionid'] ,
'mid' => $_W['mid'] ,
'openid' => $_W['openid'] ,
'sid' => $activity['sid'] ,
'aid' => $activity['aid'] ,
'activityid' => $activity['id'] ,
'orderno' => createUniontid() ,
'status' => 0 ,//订单状态:0未支,1支付,2待发货,3已发货,4已签收,5已取消,6待退款,7已退款
'createtime' => TIMESTAMP ,
'price' => $activity['price'] * $num,//$prices
'actualprice' => $actualprice > 0 ? $actualprice : 0,
'num' => $num ,
'username' => $username ,
'mobile' => $mobile ,
'vipbuyflag' => $vipbuyflag ,
'optionid' => $optionid ,
'dkcredit' => $dkcredit ,
'dkmoney' => $dkmoney ,
'expressid' => $expressid ,
'remark' => $remark ,
'settlementmoney' => $settlementmoney ,
'neworderflag' => $neworderflag ,
'vip_card_id' => $cardId ,//会员卡的id
'canceltime' => time() + $settings['cancel'] * 60,
'redpackid' => $redpackid,
'redpackmoney' => $redpackmoney,
'fullreduceid' => $activity['fullreduceid'],
'fullreducemoney' => $fulldkmoney,
'drawid' => $drawid,
'luckydrawid' => $luckydrawid,
'discount' => $vipdiscount,
'moinfo' => serialize($diyFormInfo),
'pftinfo' => serialize($pftInfo)
];
pdo_insert(PDO_NAME . 'rush_order' , $data);
$orderid = pdo_insertid();
if (empty($orderid)) {
MysqlFunction::rollback();
$this->renderError('创建订单失败,请刷新重试');
}
if($redpackid){
pdo_update('wlmerchant_redpack_records',array('status' => 1,'usetime' =>time(),'orderid' => $orderid,'plugin' => $plugin),array('id' => $redpackid));
}
//修改商品数量
$buynum = WeliamWeChat::getSalesNum(1,$id,0,1);
$total = $activity['num'];
$total = $total - intval($buynum);
if($total == 0){
Rush::updateActive(['status'=>7] , ['id' => $data['activityid']]);//修改商品状态为已售罄
}
MysqlFunction::commit();
if ($data['actualprice'] > 0) {
$unidata['status'] = 1;
$unidata['orderid'] = $orderid;
$this->renderSuccess('下单成功' , $unidata);
}else if ($data['actualprice'] == 0) {
//0元购 购买商品的同时开通会员卡是不允许进行0元购的 必须进入支付流程
$newdata = [
'status' => 1 ,
'paytime' => time() ,
'usetimes' => $num ,
'paytype' => 6 ,
];
if ($expressid) {
$newdata['status'] = 8;
} else {
Order::createSmallorder($orderid , 1);
//计算过期时间
if ($activity['cutoffstatus']) {
$newdata['estimatetime'] = time() + $activity['cutoffday'] * 86400;
}
else {
$newdata['estimatetime'] = $activity['cutofftime'];
}
$newdata['remindtime'] = Order::remindTime($newdata['estimatetime']);
}
//处理分销
if($data['dkmoney']>0 && $_W['wlsetting']['creditset']['nodistribution'] > 0){
$nodis = 1;
}
if (p('distribution') && empty($activity['isdistri']) && empty($data['drawid']) && empty($data['luckydrawid']) && empty($nodis)) {
if ($optionid > 0) {
$activity['disarray'] = WeliamWeChat::mergeDisArray($option['disarray'],$activity['disarray']);
}
$disarray = unserialize($activity['disarray']);
$disprice = sprintf("%.2f",$data['price'] - $data['discount']);
$disorderid = Distribution::disCore($data['mid'], $disprice, $disarray, $data['num'], 0,$orderid, 'rush', $activity['dissettime'],$activity['isdistristatus']);
$newdata['disorderid'] = $disorderid;
}
pdo_update(PDO_NAME . 'rush_order' , $newdata , ['orderno' => $data['orderno']]); //更新订单状态
//抽奖状态
if($data['drawid'] > 0){
pdo_update('wlmerchant_draw_record',array('is_get' => 2),array('id' => $data['drawid']));
}
if($data['luckydrawid'] > 0){
pdo_update('wlmerchant_luckydraw_drawcode',array('is_get' => 1,'gettime' => time()),array('id' => $data['luckydrawid']));
}
//处理营销
if ($activity['integral']) {
$remark = '抢购:[' . $activity['name'] . ']赠送积分';
Member::credit_update_credit1($_W['mid'] , $activity['integral'] * $num , $remark);
}
/***模板通知***/
Store::addFans($activity['sid'] , $_W['mid']);
News::addSysNotice($data['uniacid'],1,$data['sid'],0,$orderid);
News::paySuccess($orderid, 'rush');
//小票打印
Order::sendPrinting($orderid,'rush');
$unidata['status'] = 0;
$unidata['orderid'] = $orderid;
$unidata['tid'] = $data['orderno'];
$unidata['plugin'] = 'rush';
$this->renderSuccess('购买成功' , $unidata);
}
}
//团购
if ($plugin == 'groupon') {
$activity = Groupon::getSingleActive($id , '*');
if ($activity['status'] != 2) {
if ($activity['status'] == 1) {
$this->renderError('活动未开始');
}
else if ($activity['status'] == 3) {
$this->renderError('活动已结束');
}
else if ($activity['status'] == 4) {
$this->renderError('商品已下架');
}
else if ($activity['status'] == 7) {
$this->renderError('商品已抢完');
}
else {
$this->renderError('商品已停售');
}
}
if($activity['usedatestatus'] > 0){
$check = WeliamWeChat::checkUseDateStatus($activity['usedatestatus'],$activity['week'],$activity['day']);
if(empty($check)){
$this->renderError('今日商品未在售卖中');
}
}
if($activity['alldaylimit'] > 0){
$today = strtotime(date('Y-m-d'));
$daysalenum = WeliamWeChat::getSalesNum(2,$id,0,1,0,$today);
$sup = $activity['alldaylimit'] - intval($daysalenum);
if($num > $sup){
$this->renderError('商品今日份额剩余'.$sup.'份');
}
}
if($activity['daylimit'] > 0){
$today = strtotime(date('Y-m-d'));
$daysalenum = WeliamWeChat::getSalesNum(2,$id,0,1,$_W['mid'],$today);
$sup = $activity['daylimit'] - intval($daysalenum);
if($num > $sup){
$this->renderError('您的今日还能购买'.$sup.'份');
}
}
//判断规格
if ($activity['optionstatus']) {
if ($optionid) {
$option = pdo_get('wlmerchant_goods_option' , ['id' => $optionid] , [
'stock' ,
'price' ,
'title' ,
'viparray'
]);
$activity['price'] = $option['price'];
$total = $option['stock'];
$activity['viparray'] = WeliamWeChat::mergeVipArray($option['viparray'],$activity['viparray']);
}
else {
$this->renderError('规格参数错误,请重新选择');
}
}
else {
$optionid = 0;
}
/*判断会员*/
$price = $activity['price'];
$level = unserialize($activity['level']);
if ($activity['vipstatus'] == 1) {
if ($halfcardflag || $cardId) {
$vipdiscount = WeliamWeChat::getVipDiscount($activity['viparray'],$uhlevel);
if($vipdiscount>0){
$vipbuyflag = 1;
}
}
}
else if ($activity['vipstatus'] == 2) {
if (empty($halfcardflag) && empty($cardId)) {
$this->renderError('该商品会员特供,请先成为会员');
}
else if ($level && empty($cardId)) {
//判断等级
$flag = Halfcard::checklevel($_W['mid'] , $level);
if (empty($flag)) {
$this->renderError('您所在的会员等级无权购买该商品');
}
}
else if (!empty($cardId)) {
//购买商品的同时开通会员卡
$levelId = pdo_getcolumn(PDO_NAME . "halfcard_type" , ['id' => $cardId] , 'levelid');
if (!in_array($levelId , $level)) {
$this->renderError('您所开通的会员卡无权购买该商品');
}
}
}
if (empty($vipbuyflag)) {
$vipbuyflag = 0;
}
/*判断已购买数量*/
if ($activity['op_one_limit']) {
$alreadyBuyNum = WeliamWeChat::getSalesNum(2,$id,0,1,$_W['mid']);
if (empty($alreadyBuyNum)) {
$alreadyBuyNum = 0;
}
$levelnum = $activity['op_one_limit'] - $alreadyBuyNum;
if (!$levelnum) {
$this->renderError('限购商品!您已全部购买');
}
else if ($num > $levelnum) {
if ($levelnum < 0) {
$levelnum = 0;
}
$this->renderError("限购商品!您还能购买" . $levelnum . $activity['unit']);
}
}
//判断库存
if($optionid > 0){
$salenum = WeliamWeChat::getSalesNum(2,$id,$optionid,1,0);
$activity['levelnum'] = sprintf("%.0f" ,$total - intval($salenum));
if ($activity['levelnum'] < 1) {
$this->renderError('此规格已售罄');
}
}else{
$salenum = WeliamWeChat::getSalesNum(2,$id,0,1,0);
$activity['levelnum'] = sprintf("%.0f" , $activity['num'] - intval($salenum));
if ($activity['levelnum'] < 1) {
$this->renderError('此商品已售罄');
}
}
if ($num > $activity['levelnum']) {
$this->renderError('库存不足,请减少购买数量');
}
//积分抵扣
if ($creditstatus) {
if ($activity['creditmoney'] > $price) {
$activity['creditmoney'] = $price;
}
$creditremark = '团购[' . $activity['name'] . ']抵扣积分';
$creditindo = self::creditDeduction($activity['creditmoney'] , $num , $creditremark);
$dkcredit = $creditindo['dkcredit'];
$dkmoney = $creditindo['dkmoney'];
}
else {
$dkcredit = 0;
$dkmoney = 0;
}
//结算金额
$settlementmoney = Store::getsettlementmoney(3 , $id , $num , $activity['sid'] , $vipbuyflag , $optionid,0,0,$uhlevel);
if($settlementmoney < 0.01){
$settlementmoney = Store::getsettlementmoney(3 , $id , $num , $activity['sid'] , $vipbuyflag , $optionid,0,0,$uhlevel);
}
//快递订单
if ($usestatus) {
$express = $this->freight($addressid , $num , $activity);
$expressprice = $express['price'];
$expressid = $express['expressid'];
$settlementmoney = sprintf("%.2f" , $settlementmoney + $expressprice);
$neworderflag = 0;
}
else {
$username = trim($_GPC['thname']);
$mobile = trim($_GPC['thmobile']);
$expressprice = 0;
$neworderflag = 1;
}
//创建订单
if($vipdiscount > 0){
$vipdiscount = $vipdiscount * $num;
}else{
$vipdiscount = 0;
}
if (!empty($cardId)) {
$cardprice = pdo_getcolumn(PDO_NAME . 'halfcard_type' , ['id' => $cardId] , 'price');
}
else {
$cardprice = 0;
}
//满减活动
if($activity['fullreduceid']>0){
$fulldkmoney = Fullreduce::getFullreduceMoney(sprintf("%.2f" , $price * $num - $vipdiscount),$activity['fullreduceid']);
}else{
$fulldkmoney = 0;
}
if($drawid > 0){
$flag = pdo_getcolumn(PDO_NAME.'order',array('drawid'=>$drawid),'id');
if($flag > 0){
$this->renderError('此奖品已被领取,无法重复领取');
}
$price = 0;
}
if($luckydrawid > 0){
$flag = pdo_getcolumn(PDO_NAME.'order',array('luckydrawid'=>$luckydrawid),'id');
if($flag > 0){
$this->renderError('此奖品已被领取,无法重复领取');
}
$price = 0;
}
$prices = sprintf("%.2f" , $price * $num - $vipdiscount - $redpackmoney + $expressprice - $dkmoney + $cardprice - $fulldkmoney);
$goodsprice = sprintf("%.2f" , $activity['price'] * $num);
$data = [
'uniacid' => $activity['uniacid'] ,
'mid' => $_W['mid'] ,
'sid' => $activity['sid'] ,
'aid' => $activity['aid'] ,
'fkid' => $activity['id'] ,
'plugin' => 'groupon' ,
'payfor' => 'grouponOrder' ,
'orderno' => createUniontid() ,
'status' => 0 ,//订单状态:0未支,1支付,2待发货,3已发货,4已签收,5已取消,6待退款,7已退款
'createtime' => TIMESTAMP ,
'price' => $prices > 0 ? $prices : 0,
'num' => $num ,
'vipbuyflag' => $vipbuyflag ,
'specid' => $optionid ,
'name' => $username ,
'mobile' => $mobile ,
'goodsprice' => $goodsprice ,
'expressid' => $expressid ,
'buyremark' => $remark ,
'settlementmoney' => $settlementmoney ,
'vip_card_id' => $cardId ,//会员卡的id
'neworderflag' => $neworderflag ,
'usecredit' => $dkcredit ,
'cerditmoney' => $dkmoney ,
'canceltime' => time() + $settings['cancel'] * 60,
'redpackid' => $redpackid,
'redpackmoney' => $redpackmoney,
'fullreduceid' => $activity['fullreduceid'],
'fullreducemoney' => $fulldkmoney,
'drawid' => $drawid,
'luckydrawid' => $luckydrawid,
'vipdiscount' => $vipdiscount,
'moinfo' => serialize($diyFormInfo),
'pftinfo' => serialize($pftInfo)
];
pdo_insert(PDO_NAME . 'order' , $data);
$orderid = pdo_insertid();
if($redpackid){
pdo_update('wlmerchant_redpack_records',array('status' => 1,'usetime' =>time(),'orderid' => $orderid,'plugin' => $plugin),array('id' => $redpackid));
}
//修改商品数量
$salenum = WeliamWeChat::getSalesNum(2,$id,0,1,0);
$total = $activity['num'];
$total = $total - intval($salenum);
if($total <= 0) Groupon::updateActive(['status'=>7],['id' => $data['fkid']]);//修改商品状态为已售罄
if ($data['price'] > 0) {
$unidata['status'] = 1;
$unidata['orderid'] = $orderid;
$this->renderSuccess('购买成功' , $unidata);
}
else {
//0元购 购买商品的同时开通会员卡是不允许进行0元购的 必须进入支付流程
$newdata = [
'status' => 1 ,
'paytime' => time() ,
'paytype' => 6 ,
];
if ($expressid) {
$newdata['status'] = 8;
}
else {
Order::createSmallorder($orderid , 2);
//计算过期时间
if ($activity['cutoffstatus']) {
$newdata['estimatetime'] = time() + $activity['cutoffday'] * 86400;
}
else {
$newdata['estimatetime'] = $activity['cutofftime'];
}
$newdata['remindtime'] = Order::remindTime($newdata['estimatetime']);
}
//处理分销
if($dkmoney>0 && $_W['wlsetting']['creditset']['nodistribution'] > 0){
$nodis = 1;
}
if (p('distribution') && empty($activity['isdistri']) && empty($data['drawid']) && empty($nodis)) {
if ($data['specid']) {
$option = pdo_get('wlmerchant_goods_option', array('id' => $data['specid']), array('onedismoney', 'twodismoney', 'threedismoney'));
$activity['disarray'] = WeliamWeChat::mergeDisArray($option['disarray'],$activity['disarray']);
}
$disarray = unserialize($activity['disarray']);
$disprice = sprintf("%.2f",$data['goodsprice'] - $data['vipdiscount']);
$disorderid = Distribution::disCore($data['mid'], $disprice, $disarray, $data['num'], 0, $orderid, 'groupon', $activity['dissettime'],$activity['isdistristatus']);
$newdata['disorderid'] = $disorderid;
}
pdo_update(PDO_NAME . 'order' , $newdata , ['orderno' => $data['orderno']]); //更新订单状态
//抽奖状态
if($data['drawid'] > 0){
pdo_update('wlmerchant_draw_record',array('is_get' => 2),array('id' => $data['drawid']));
}
if($data['luckydrawid'] > 0){
pdo_update('wlmerchant_luckydraw_drawcode',array('is_get' => 1,'gettime' => time()),array('id' => $data['luckydrawid']));
}
//处理营销
if ($activity['integral']) {
$remark = '团购:[' . $activity['name'] . ']赠送积分';
Member::credit_update_credit1($_W['mid'] , $activity['integral'] * $num , $remark);
}
/***模板通知***/
Store::addFans($activity['sid'] , $_W['mid']);
News::addSysNotice($data['uniacid'],2,$data['sid'],0,$orderid);
News::paySuccess($orderid, 'groupon');
//小票打印
Order::sendPrinting($orderid,'groupon');
$unidata['status'] = 0;
$unidata['orderid'] = $orderid;
$unidata['tid'] = $data['orderno'];
$unidata['plugin'] = 'groupon';
$this->renderSuccess('购买成功' , $unidata);
}
}
//卡券
if ($plugin == 'coupon') {
$coupons = wlCoupon::getSingleCoupons($id , '*');
$coupons['surplus'] = WeliamWeChat::getSalesNum(4,$id,0,1,0);
//判断当前卡卷是否为会员特供
if ($coupons['status'] != 2) {
$this->renderError('卡券出售已结束或未开始,无法购买');
}
if($coupons['usedatestatus'] > 0){
$check = WeliamWeChat::checkUseDateStatus($coupons['usedatestatus'],$coupons['week'],$coupons['day']);
if(empty($check)){
$this->renderError('今日卡券未在售卖中');
}
}
if($coupons['alldaylimit'] > 0){
$today = strtotime(date('Y-m-d'));
$alldaysalenum = WeliamWeChat::getSalesNum(4,$id,0,1,0,$today);
$sup = $coupons['alldaylimit'] - intval($alldaysalenum);
if($num > $sup){
$this->renderError('商品今日份额仅剩'.$sup.'份');
}
}
if($coupons['daylimit'] > 0){
$today = strtotime(date('Y-m-d'));
$daysalenum = WeliamWeChat::getSalesNum(4,$id,0,1,$_W['mid'],$today);
$sup = $coupons['daylimit'] - intval($daysalenum);
if($num > $sup){
$this->renderError('您今日还能买'.$sup.'份');
}
}
$alnum = WeliamWeChat::getSalesNum(4,$id,0,1,$_W['mid']);
$allnum = $alnum + $num;
if ($coupons['time_type'] == 1 && $coupons['endtime'] < time()) {
$this->renderError('抱歉,超级券已停止发放');
}
if (($coupons['quantity'] - intval($coupons['surplus'])) < $num) {
$this->renderError('抱歉,超级券库存不足');
}
if ($allnum > $coupons['get_limit'] && $coupons['get_limit'] > 0) {
$this->renderError('抱歉,一个用户只能获取' . $coupons['get_limit'] . '张,您已下单' . $alnum . '张。');
}
if ($coupons['vipstatus'] == 1 && ($halfcardflag || $cardId)) {
$vipdiscount = WeliamWeChat::getVipDiscount($coupons['viparray'],$uhlevel);
if($vipdiscount > 0){
$vipbuyflag = 1;
}
}
else if ($coupons['vipstatus'] == 2) {
$goodsLv = unserialize($coupons['level']);
if ($halfcardflag <= 0) {
$this->renderError('当前商品为会员限定,请先成为会员!');
}
else if (count($goodsLv) > 0) {
$lv = pdo_getcolumn(PDO_NAME . "halfcardmember" , ['id' => $halfcardflag] , 'levelid');
if (!in_array($lv , $goodsLv)) {
$this->renderError('您所在的会员等级无权购买该商品!');
}
}
}
if (empty($vipbuyflag)) {
$vipbuyflag = 0;
}
//免费卡券
if (empty($coupons['is_charge'])) {
$coupons['price'] = 0;
$settlementmoney = 0;
}else {
//结算金额
$settlementmoney = Store::getsettlementmoney(4 , $id , $num , $coupons['merchantid'] , $vipbuyflag,0,0,0,$uhlevel);
if($settlementmoney < 0.01){
$settlementmoney = Store::getsettlementmoney(4 , $id , $num , $coupons['merchantid'] , $vipbuyflag,0,0,0,$uhlevel);
}
}
if($vipdiscount > 0){
$vipdiscount = $vipdiscount * $num;
}else{
$vipdiscount = 0;
}
if (!empty($cardId)) {
$cardprice = pdo_getcolumn(PDO_NAME . 'halfcard_type' , ['id' => $cardId] , 'price');
}
else {
$cardprice = 0;
}
$price = $coupons['price'] * $num;
#6、积分抵扣
if ($creditstatus) {
if ($coupons['creditmoney'] > $price) {
$coupons['creditmoney'] = $price;
}
$creditremark = '超级券[' . $coupons['title'] . ']抵扣积分';
$creditindo = self::creditDeduction($coupons['creditmoney'] , $num , $creditremark);
$dkcredit = $creditindo['dkcredit'];
$dkmoney = $creditindo['dkmoney'];
}
else {
$dkcredit = 0;
$dkmoney = 0;
}
//满减活动
if($coupons['fullreduceid']>0){
$fulldkmoney = Fullreduce::getFullreduceMoney(sprintf("%.2f" ,$price - $vipdiscount),$coupons['fullreduceid']);
}else{
$fulldkmoney = 0;
}
if($drawid > 0){
$flag = pdo_getcolumn(PDO_NAME.'order',array('drawid'=>$drawid),'id');
if($flag > 0){
$this->renderError('此奖品已被领取,无法重复领取');
}
$price = 0;
}
if($luckydrawid > 0){
$flag = pdo_getcolumn(PDO_NAME.'order',array('luckydrawid'=>$luckydrawid),'id');
if($flag > 0){
$this->renderError('此奖品已被领取,无法重复领取');
}
$price = 0;
}
$prices = sprintf("%.2f" , $price + $cardprice - $vipdiscount - $redpackmoney - $fulldkmoney - $dkmoney);
$data = [
'uniacid' => $coupons['uniacid'] ,
'mid' => $_W['mid'] ,
'aid' => $coupons['aid'] ,
'fkid' => $id ,
'sid' => $coupons['merchantid'] ,
'status' => 0 ,
'paytype' => 2 ,
'createtime' => time() ,
'orderno' => createUniontid() ,
'price' => $prices > 0 ? $prices : 0,
'num' => $num ,
'plugin' => 'coupon' ,
'payfor' => 'couponsharge' ,
'vipbuyflag' => $vipbuyflag ,
'goodsprice' => $coupons['price'] * $num ,
'settlementmoney' => $settlementmoney ,
'neworderflag' => 1 ,
'buyremark' => $remark ,
'canceltime' => time() + $settings['cancel'] * 60 ,
'vip_card_id' => $cardId,
'redpackid' => $redpackid,
'redpackmoney' => $redpackmoney,
'fullreduceid' => $coupons['fullreduceid'],
'fullreducemoney' => $fulldkmoney,
'drawid' => $drawid,
'luckydrawid' => $luckydrawid,
'vipdiscount' => $vipdiscount,
'usecredit' => $dkcredit ,
'cerditmoney' => $dkmoney,
'mobile' => $mobile
];
$orderid = wlCoupon::saveCouponOrder($data);
if($redpackid){
pdo_update('wlmerchant_redpack_records',array('status' => 1,'usetime' =>time(),'orderid' => $orderid,'plugin' => $plugin),array('id' => $redpackid));
}
if ($data['price'] > 0) {
$unidata['status'] = 1;
$unidata['orderid'] = $orderid;
$this->renderSuccess('下单成功' , $unidata);
}
else {
//领取免费卡券
$newdata = [
'status' => 1 ,
'paytime' => time() ,
'paytype' => 6 ,
];
//创建小订单
Order::createSmallorder($orderid , 4);
//处理分销
if($dkmoney>0 && $_W['wlsetting']['creditset']['nodistribution'] > 0){
$nodis = 1;
}
if (p('distribution') && empty($coupons['isdistri']) && empty($data['drawid']) && empty($data['luckydrawid']) && empty($nodis) ) {
$disarray = unserialize($coupons['disarray']);
$dismoney = sprintf("%.2f", $data['goodsprice'] - $data['vipdiscount']);
$disorderid = Distribution::disCore($data['mid'], $dismoney, $disarray, $data['num'], 0, $orderid, 'coupon', $coupons['dissettime'],$coupons['isdistristatus']);
$newdata['disorderid'] = $disorderid;
}
//抽奖领取
if($data['drawid'] > 0){
pdo_update('wlmerchant_draw_record',array('is_get' => 2),array('id' => $data['drawid']));
}
if($data['luckydrawid'] > 0){
pdo_update('wlmerchant_luckydraw_drawcode',array('is_get' => 1,'gettime' => time()),array('id' => $data['luckydrawid']));
}
if ($coupons['time_type'] == 1) {
$starttime = $coupons['starttime'];
$endtime = $coupons['endtime'];
}
else {
$starttime = time();
$endtime = time() + ($coupons['deadline'] * 24 * 3600);
}
$data2 = [
'mid' => $data['mid'] ,
'aid' => $data['aid'] ,
'parentid' => $coupons['id'] ,
'status' => 1 ,
'type' => $coupons['type'] ,
'title' => $coupons['title'] ,
'sub_title' => $coupons['sub_title'] ,
'content' => $coupons['goodsdetail'] ,
'description' => $coupons['description'] ,
'color' => $coupons['color'] ,
'starttime' => $starttime ,
'endtime' => $endtime ,
'createtime' => time() ,
'orderno' => $data['orderno'] ,
'price' => 0 ,
'usetimes' => $num * $coupons['usetimes'] ,
];
$newdata['recordid'] = wlCoupon::saveMemberCoupons($data2);
$newdata['estimatetime'] = $data2['endtime'];
//计算过期提醒时间
$newdata['remindtime'] = Order::remindTime($newdata['estimatetime']);
pdo_update(PDO_NAME . 'order' , $newdata , ['id' => $orderid]); //更新订单状态
/***模板通知***/
News::addSysNotice($data['uniacid'],2,$data['sid'],0,$orderid);
Store::addFans($data['sid'], $data['mid']);
News::paySuccess($orderid,'coupon');
$unidata['status'] = 0;
$unidata['orderid'] = $orderid;
$unidata['recordid'] = $newdata['recordid'];
$unidata['tid'] = $data['orderno'];
$unidata['plugin'] = 'coupon';
$this->renderSuccess('购买成功' , $unidata);
}
}
//拼团
if ($plugin == 'wlfightgroup') {
$good = Wlfightgroup::getSingleGood($id , '*');
#1、判断组团情况
if ($groupid) {
$group = pdo_get('wlmerchant_fightgroup_group' , ['id' => $groupid]);
if ($group['status'] == 2 || $group['lacknum'] == 0) {
$this->renderError('该团已经组团成功,请您新开一团。');
}
else if ($group['status'] == 3 || $group['failtime'] < time()) {
$this->renderError('该团已经组团失败,请您新开一团。');
}
}
#2、判断商品发售时间
if ($good['islimittime']) {
if ($good['limitstarttime'] > time()) {
$this->renderError('该商品未到发售时间');
}
if ($good['limitendtime'] < time()) {
$this->renderError('该商品已停止发售');
}
}
#3、判断商品是否下架
if ($good['status'] != 2) {
$this->renderError('抱歉,商品未在售卖中');
}
//判断时间
if($good['usedatestatus'] > 0){
$check = WeliamWeChat::checkUseDateStatus($good['usedatestatus'],$good['week'],$good['day']);
if(empty($check)){
$this->renderError('今日商品未在售卖中');
}
}
if($good['daylimit'] > 0){
$today = strtotime(date('Y-m-d'));
$daysalenum = WeliamWeChat::getSalesNum(3,$id,0,1,$_W['mid'],$today);
$sup = $good['daylimit'] - intval($daysalenum);
if($num > $sup){
$this->renderError('您今日还可以购买'.$sup.'份');
}
}
if($good['alldaylimit'] > 0){
$today = strtotime(date('Y-m-d'));
$alldaysalenum = WeliamWeChat::getSalesNum(3,$id,0,1,0,$today);
$sup = $good['alldaylimit'] - intval($alldaysalenum);
if($num > $sup){
$this->renderError('商品今日份额还剩'.$sup.'份');
}
}
#4、判断购买数量限制
if ($good['op_one_limit']) {//0未支付 1已支付 2已消费 3已完成 4待收货 待消费 5已取消 6待退款 7已退款 8待发货
$arbuy = WeliamWeChat::getSalesNum(3,$id,0,1,$_W['mid']);
if ($arbuy + $num > $good['op_one_limit'] && $arbuy < $good['op_one_limit']) {
$morenum = $good['op_one_limit'] - intval($arbuy);
$this->renderError('限购商品,您还能购买' . $morenum . '件');
}
else if ($arbuy >= $good['op_one_limit']) {
$this->renderError('抱歉,您已达到商品购买数量上限');
}
else {
$good['op_one_limit'] = $good['op_one_limit'] - intval($arbuy);
}
}
#5、判断商品规格 获取对应的价格
if ($good['specstatus']) {
if ($optionid) {
$option = pdo_get('wlmerchant_goods_option' , ['id' => $optionid]);
if ($buystatus == 1) {
$price = $option['price'];
}
else {
$price = $option['vipprice'];
}
$allarbuy = WeliamWeChat::getSalesNum(3,$id,$optionid,1,0);
if($allarbuy + $num > $option['stock']){
$this->renderError('该规格库存不足,请选择其他规格');
}
$good['viparray'] = WeliamWeChat::mergeVipArray($option['viparray'],$good['viparray']);
}
else {
$this->renderError('商品规格错误,请返回重新选择');
}
}else {
if ($buystatus == 1) {
$price = $good['price'];
}
else {
$price = $good['aloneprice'];
}
//判断库存
$allarbuy = WeliamWeChat::getSalesNum(3,$id,0,1,0);
if($allarbuy + $num > $good['stock']){
$this->renderError('商品库存不足,无法下单');
}
}
$goodsprice = $price * $num;
#6、积分抵扣
if ($creditstatus) {
if ($good['creditmoney'] > $price) {
$good['creditmoney'] = $price;
}
$creditremark = '拼团商品[' . $good['name'] . ']抵扣积分';
$creditindo = self::creditDeduction($good['creditmoney'] , $num , $creditremark);
$dkcredit = $creditindo['dkcredit'];
$dkmoney = $creditindo['dkmoney'];
}
else {
$dkcredit = 0;
$dkmoney = 0;
}
#7、判断会员优惠
if (($halfcardflag || $cardId) && $good['vipstatus'] == 1) {
$vipdiscount = WeliamWeChat::getVipDiscount($good['viparray'],$uhlevel);
if($vipdiscount > 0){
$vipbuyflag = 1;
}
}
else if ($good['vipstatus'] == 2) {
$goodsLv = unserialize($good['level']);
if ($halfcardflag <= 0) {
$this->renderError('当前商品为会员限定,请先成为会员!');
}
else if (count($goodsLv) > 0) {
$lv = pdo_getcolumn(PDO_NAME . "halfcardmember" , ['id' => $halfcardflag] , 'levelid');
if (!in_array($lv , $goodsLv)) {
$this->renderError('您所在的会员等级无权购买该商品!');
}
}
}
if (empty($vipbuyflag)) {
$vipbuyflag = 0;
}
#8、判断是否开启单团功能
$fightSet = Setting::agentsetting_read('fightgroup'); //获取设置参数
if ($fightSet['onlyone'] == 1) {
$groupNumber = pdo_fetchcolumn("SELECT COUNT(b.id) FROM " . tablename(PDO_NAME . "order") . " as a RIGHT JOIN " . tablename(PDO_NAME . "fightgroup_group") . " as b ON a.fightgroupid = b.id WHERE a.mid = {$_W['mid']} AND a.fkid = {$id} AND plugin = 'wlfightgroup' AND b.status = 1 ");
if ($groupNumber > 0) $this->renderError('您已经加入一个当前商品的团,请勿重复加入!');
}
//购买方式
if ($usestatus) {
$express = $this->freight($addressid , $num , $good);
$expressprice = $express['price'];
$expressid = $express['expressid'];
$neworderflag = 0;
}
else {
$username = trim($_GPC['thname']);
$mobile = trim($_GPC['thmobile']);
$expressprice = 0;
$neworderflag = 1;
}
//结算金额
$com_dis_price = intval(0);
if ($buystatus == 1) {
$buyflah = 0;//团购
//拼团 - 团长优惠
if ($good['is_com_dis'] == 1 && empty($groupid)) {
$com_dis_price = sprintf("%.2f" , ($good['com_dis_price'] ? : 0));
}
}
else {
$buyflah = 1;
}
$settlementmoney = Store::getsettlementmoney(2 , $id , $num , $good['merchantid'] , $vipbuyflag , $optionid , $buyflah,0,$uhlevel);
if($settlementmoney < 0.01){
$settlementmoney = Store::getsettlementmoney(2 , $id , $num , $good['merchantid'] , $vipbuyflag , $optionid , $buyflah,0,$uhlevel);
}
$settlementmoney = sprintf("%.2f" , $settlementmoney + $expressprice);
if($vipdiscount > 0){
$vipdiscount = $vipdiscount * $num;
}else{
$vipdiscount = 0;
}
if (!empty($cardId)) {
$cardprice = pdo_getcolumn(PDO_NAME . 'halfcard_type' , ['id' => $cardId] , 'price');
}
else {
$cardprice = 0;
}
//满减活动
if($good['fullreduceid']>0){
$fulldkmoney = Fullreduce::getFullreduceMoney(sprintf("%.2f" , $price * $num - $vipdiscount - $com_dis_price),$good['fullreduceid']);
}else{
$fulldkmoney = 0;
}
if($drawid){
$flag = pdo_getcolumn(PDO_NAME.'order',array('drawid'=>$drawid),'id');
if($flag > 0){
$this->renderError('此奖品已被领取,无法重复领取');
}
$price = 0;
$buystatus = 2;
}
if($luckydrawid){
$flag = pdo_getcolumn(PDO_NAME.'order',array('luckydrawid'=>$luckydrawid),'id');
if($flag > 0){
$this->renderError('此奖品已被领取,无法重复领取');
}
$price = 0;
$buystatus = 2;
}
$orderprice = sprintf("%.2f" , $price * $num + $expressprice - $vipdiscount - $fulldkmoney - $dkmoney + $cardprice - $com_dis_price - $redpackmoney);
$data = [
'uniacid' => $good['uniacid'] ,
'mid' => $_W['mid'] ,
'aid' => $good['aid'] ,
'fkid' => $id ,
'sid' => $good['merchantid'] ,
'status' => 0 ,
'paytype' => 0 ,
'createtime' => time() ,
'orderno' => createUniontid() ,
'price' => $orderprice > 0 ? $orderprice : 0,
'num' => $num ,
'plugin' => 'wlfightgroup' ,
'payfor' => 'fightsharge' ,
'spec' => $option['title'] ,
'specid' => $optionid ,
'name' => $username ,
'mobile' => $mobile ,
'fightstatus' => $buystatus ,
'fightgroupid' => $groupid ,
'expressid' => $expressid ,
'buyremark' => $remark ,
'vipbuyflag' => $vipbuyflag ,
'goodsprice' => $goodsprice ,
'settlementmoney' => $settlementmoney ,
'vip_card_id' => $cardId ,//会员卡的id
'neworderflag' => $neworderflag ,
'usecredit' => $dkcredit ,
'cerditmoney' => $dkmoney ,
'canceltime' => time() + $settings['cancel'] * 60 ,
'com_dis_price' => $com_dis_price,
'redpackid' => $redpackid,
'redpackmoney' => $redpackmoney,
'fullreduceid' => $good['fullreduceid'],
'fullreducemoney' => $fulldkmoney,
'drawid' => $drawid,
'luckydrawid' => $luckydrawid,
'vipdiscount' => $vipdiscount,
'moinfo' => serialize($diyFormInfo),
'pftinfo' => serialize($pftInfo)
];
$orderid = Wlfightgroup::saveFightOrder($data);
if($redpackid){
pdo_update('wlmerchant_redpack_records',array('status' => 1,'usetime' =>time(),'orderid' => $orderid,'plugin' => $plugin),array('id' => $redpackid));
}
if ($data['price'] > 0) {
$unidata['status'] = 1;
$unidata['orderid'] = $orderid;
$this->renderSuccess('下单成功' , $unidata);
}
else {
//0元购 购买商品的同时开通会员卡是不允许进行0元购的 必须进入支付流程
$newdata = [
'status' => 1 ,
'paytime' => time() ,
'paytype' => 6 ,
];
pdo_update(PDO_NAME . 'order' , $newdata , ['orderno' => $data['orderno']]); //更新订单状态
//处理营销
if ($good['integral']) {
$remark = '团购:[' . $good['name'] . ']赠送积分';
Member::credit_update_credit1($_W['mid'] , $good['integral'] * $num , $remark);
}
//处理组团或者单购
$order = $data;
$order['id'] = $orderid;
if ($order['fightstatus'] == 1) {
if ($order['fightgroupid']) {
$group = pdo_get('wlmerchant_fightgroup_group' , ['id' => $order['fightgroupid']]);
$newdata = [];
if ($group['status'] == 1) {
$newlack = $group['lacknum'] - 1;
if ($newlack > 0) {
$newdata['lacknum'] = $newlack;
}else {
$newdata['lacknum'] = $newlack;
$newdata['status'] = 2;
$newdata['successtime'] = time();
$orders = pdo_getall('wlmerchant_order' , [
'fightgroupid' => $group['id'] ,
'uniacid' => $group['uniacid'] ,
'aid' => $group['aid'] ,
'status' => 1
]);
//幸运团
if($group['is_lucky'] > 0){
$allorderids = array_column($orders,'id');
$luckykey = array_rand($allorderids,$good['luckynum']);
if($good['luckynum']>1){
foreach ($luckykey as $lid){
$luckyids[] = $allorderids[$lid];
}
}else{
$luckyids[] = $allorderids[$luckykey];
}
$newdata['luckyorderids'] = serialize($luckyids);
}
foreach ($orders as $key => $or) {
if(empty($luckyids) || in_array($or['id'],$luckyids)){
if ($or['expressid']) {
$res = pdo_update(PDO_NAME . 'order' , ['status' => 8] , ['id' => $or['id']]);
$member = pdo_get('wlmerchant_member' , ['id' => $or['mid']] , ['openid']);
}
else {
if ($or['neworderflag']) {
Order::createSmallorder($or['id'] , 3);
//计算过期时间
if ($good['cutoffstatus']) {
$estimatetime = time() + $good['cutoffday'] * 86400;
}
else {
$estimatetime = $good['cutofftime'];
}
$remindtime = Order::remindTime($estimatetime);
pdo_update(PDO_NAME . 'order' , [
'status' => 1 ,
'estimatetime' => $estimatetime,
'remindtime' => $remindtime
] , ['id' => $or['id']]);
}
else {
$recordid = Wlfightgroup::createRecord($or['id'] , $or['num']);
$res = pdo_update(PDO_NAME . 'order' , [
'status' => 1 ,
'recordid' => $recordid
] , ['id' => $or['id']]);
}
$member = pdo_get('wlmerchant_member' , ['id' => $or['mid']] , ['openid']);
}
//处理分销
if($or['cerditmoney'] > 0 && $_W['wlsetting']['creditset']['nodistribution'] > 0){
$nodis = 1;
}
if (p('distribution') && empty($good['isdistri']) && empty($or['drawid']) && empty($or['luckydrawid']) && empty($nodis)) {
if ($or['specid']) {
$option = pdo_get('wlmerchant_goods_option', ['id' => $or['specid']]);
$good['disarray'] = WeliamWeChat::mergeDisArray($option['disarray'],$good['disarray']);
}
$disarray = unserialize($good['disarray']);
$dismoney = sprintf("%.2f", $or['goodsprice'] - $or['vipdiscount']);
$disorderid = Distribution::disCore($or['mid'], $dismoney, $disarray, $or['num'], 0, $or['id'], 'fightgroup', $good['dissettime'],$good['isdistristatus']);
$res = pdo_update(PDO_NAME . 'order' , [
'disorderid' => $disorderid,
] , ['id' => $or['id']]);
}
//小票打印
Order::sendPrinting($or['id'],'wlfightgroup');
}else{
Wlfightgroup::refund($or['id']);
//在线返红包
if($good['luckymoney'] > 0){
$orsource = pdo_getcolumn(PDO_NAME.'paylogvfour',array('tid'=>$or['orderno'],'mid'=>$or['mid']),'source');
$nlUser = pdo_get('wlmerchant_member',array('id' => $or['mid']),array('openid','wechat_openid'));
if($_W['source'] == 1){
$sopenid = $nlUser['openid'];
}else if($_W['source'] == 3){
$sopenid = $nlUser['wechat_openid'];
}
if(empty($sopenid)){
if(!empty($nlUser['openid'])){
$sopenid = $nlUser['openid'];
$orsource = 1;
}
if(!empty($nlUser['wechat_openid'])){
$sopenid = $nlUser['wechat_openid'];
$orsource = 3;
}
}
if(!empty($sopenid)){
$params = [
'openid' => $sopenid ,
'money' => $good['luckymoney'] ,
'rem' => '幸运团返现' ,
'name' => 'weliam' ,
'order_no' => $or['orderno'],
'source' => $orsource ,
'mid' => $or['mid']
];
$res = Payment::presentationInit($params,2);
file_put_contents(PATH_DATA . "luckygroup.log", var_export($res, true) . PHP_EOL, FILE_APPEND);
}
}
}
}
}
pdo_update(PDO_NAME . 'fightgroup_group' , $newdata , ['id' => $order['fightgroupid']]);
News::groupresult($order['fightgroupid']);
}
else {
$newgroupflag = 1;
}
}
else {
$newgroupflag = 1;
}
if ($newgroupflag) {
$group = [
'status' => 1 ,
'goodsid' => $order['fkid'] ,
'aid' => $good['aid'] ,
'sid' => $good['merchantid'] ,
'neednum' => $good['peoplenum'] ,
'lacknum' => $good['peoplenum'] - 1 ,
'starttime' => time() ,
'failtime' => time() + $good['grouptime'] * 3600 ,
'is_lucky' => $good['is_lucky']
];
$fightgroupid = Wlfightgroup::saveFightGroup($group);
pdo_update(PDO_NAME . 'order' , ['fightgroupid' => $fightgroupid] , ['id' => $order['id']]);
}
}
else {
if ($order['expressid']) {
pdo_update(PDO_NAME . 'order' , ['status' => 8] , ['id' => $order['id']]);
}
else {
if ($order['neworderflag']) {
Order::createSmallorder($order['id'] , 3);
//计算过期时间
if ($good['cutoffstatus']) {
$estimatetime = time() + $good['cutoffday'] * 86400;
}
else {
$estimatetime = $good['cutofftime'];
}
$remindtime = Order::remindTime($estimatetime);
pdo_update(PDO_NAME . 'order' , [
'status' => 1 ,
'estimatetime' => $estimatetime,
'remindtime' => $remindtime
] , ['id' => $order['id']]);
}
else {
$recordid = Wlfightgroup::createRecord($order['id'] , $order['num']);
pdo_update(PDO_NAME . 'order' , [
'status' => 1 ,
'recordid' => $recordid
] , ['id' => $order['id']]);
}
}
//抽奖领取
if($data['drawid'] > 0){
pdo_update('wlmerchant_draw_record',array('is_get' => 2),array('id' => $data['drawid']));
}
if($data['luckydrawid'] > 0){
pdo_update('wlmerchant_luckydraw_drawcode',array('is_get' => 1,'gettime' => time()),array('id' => $data['luckydrawid']));
}
//处理分销
if($dkmoney > 0 && $_W['wlsetting']['creditset']['nodistribution'] > 0){
$nodis = 1;
}
if (p('distribution') && empty($good['isdistri']) && empty($data['drawid']) && empty($data['luckydrawid']) && empty($nodis)) {
if ($order['specid']) {
$good['disarray'] = WeliamWeChat::mergeDisArray($option['disarray'],$good['disarray']);
}
$disarray = unserialize($good['disarray']);
$dismoney = sprintf("%.2f", $order['goodsprice'] - $order['vipdiscount']);
$disorderid = Distribution::disCore($order['mid'], $dismoney, $disarray, $order['num'], 0, $order['id'], 'fightgroup', $good['dissettime'],$good['isdistristatus']);
$res = pdo_update(PDO_NAME . 'order' , [
'disorderid' => $disorderid,
] , ['id' => $order['id']]);
}
//小票打印
Order::sendPrinting($order['id'],'wlfightgroup');
}
$data2['realsalenum'] = $good['realsalenum'] + $order['num'];
$res2 = Wlfightgroup::updateGoods($data2 , $order['fkid']);
//发送通知
/***模板通知***/
News::addSysNotice($order['uniacid'],2,$order['sid'],0,$order['id']);
Store::addFans($order['sid'], $order['mid']);
News::paySuccess($order['id'], 'wlfightgroup');
$unidata['status'] = 0;
$unidata['orderid'] = $orderid;
$unidata['tid'] = $data['orderno'];
$unidata['plugin'] = 'wlfightgroup';
$this->renderSuccess('购买成功' , $unidata);
}
}
//砍价
if ($plugin == 'bargain') {
MysqlFunction::setTrans(4);
MysqlFunction::startTrans();
$activity = Bargain::getSingleActive($id , '*');
$userorder = pdo_get('wlmerchant_bargain_userlist' , ['id' => $optionid]);
if ($userorder['orderid']) {
MysqlFunction::rollback();
$this->renderError('此砍价活动已经生成订单,无法重复生成');
}
if ($activity['status'] != 2) {
MysqlFunction::rollback();
$this->renderError('活动未开始或已结束,无法下单');
}
//判断已有订单
$nopayorder = pdo_getcolumn('wlmerchant_order' , [
'mid' => $_W['mid'] ,
'status' => 0 ,
'fkid' => $activity['id'] ,
'specid' => $optionid ,
'plugin' => 'bargain'
] , 'id');
if (!empty($nopayorder)) {
MysqlFunction::rollback();
$this->renderError('请先支付或取消未支付的订单');
}
//剩余数量
$alreadynum = WeliamWeChat::getSalesNum(5,$id,0,1,0);
$levelnum = $activity['stock'] - intval($alreadynum);
if ($levelnum == 0 || $levelnum < 1) {
MysqlFunction::rollback();
$this->renderError('该商品已被抢完,请下次手快些哦');
}
//判断会员
if ($activity['vipstatus'] == 1) {
if ($halfcardflag) {
$vipbuyflag = 1;
}
else {
$vipbuyflag = 0;
}
}
if ($usestatus) {
$express = $this->freight($addressid , $num , $activity);
$expressprice = $express['price'];
$expressid = $express['expressid'];
$neworderflag = 0;
}
else {
$username = trim($_GPC['thname']);
$mobile = trim($_GPC['thmobile']);
$neworderflag = 1;
$expressprice = 0;
}
//积分抵扣
if ($creditstatus) {
if ($activity['creditmoney'] > sprintf("%.2f" , $userorder['price'])) {
$activity['creditmoney'] = sprintf("%.2f" , $userorder['price']);
}
$creditremark = '砍价[' . $activity['name'] . ']抵扣积分';
$creditindo = self::creditDeduction($activity['creditmoney'] , $num , $creditremark);
$dkcredit = $creditindo['dkcredit'];
$dkmoney = $creditindo['dkmoney'];
}
else {
$dkcredit = 0;
$dkmoney = 0;
}
//满减活动
if($activity['fullreduceid']>0){
$fulldkmoney = Fullreduce::getFullreduceMoney($userorder['price'],$activity['fullreduceid']);
}else{
$fulldkmoney = 0;
}
$price = $userorder['price'];
if($drawid > 0){
$flag = pdo_getcolumn(PDO_NAME.'order',array('drawid'=>$drawid),'id');
if($flag > 0){
$this->renderError('此奖品已被领取,无法重复领取');
}
$price = 0;
}
if($luckydrawid > 0){
$flag = pdo_getcolumn(PDO_NAME.'order',array('luckydrawid'=>$luckydrawid),'id');
if($flag > 0){
$this->renderError('此奖品已被领取,无法重复领取');
}
$price = 0;
}
$prices = sprintf("%.2f" , $price + $expressprice - $dkmoney - $redpackmoney - $fulldkmoney);
//结算金额
$settlementmoney = Store::getsettlementmoney(5 , $optionid , $num , $activity['sid'] , $vipbuyflag,0,0,0,$uhlevel);
if ($expressprice) {
$settlementmoney = sprintf("%.2f" , $expressprice + $settlementmoney);
}
//创建订单
$data = [
'uniacid' => $activity['uniacid'] ,
'mid' => $_W['mid'] ,
'sid' => $activity['sid'] ,
'aid' => $activity['aid'] ,
'fkid' => $activity['id'] ,
'plugin' => 'bargain' ,
'payfor' => 'bargainOrder' ,
'orderno' => createUniontid() ,
'status' => 0 ,//订单状态:0未支,1支付,2待发货,3已发货,4已签收,5已取消,6待退款,7已退款
'createtime' => TIMESTAMP ,
'price' => $prices > 0 ? $prices : 0,
'num' => 1 ,
'vipbuyflag' => $vipbuyflag ,
'specid' => $optionid ,
'name' => $username ,
'mobile' => $mobile ,
'fightstatus' => $usestatus ,
'expressid' => $expressid ,
'buyremark' => $remark ,
'goodsprice' => $userorder['price'] ,
'settlementmoney' => $settlementmoney ,
'neworderflag' => $neworderflag ,
'usecredit' => $dkcredit ,
'cerditmoney' => $dkmoney ,
'canceltime' => time() + $settings['cancel'] * 60,
'redpackid' => $redpackid,
'redpackmoney' => $redpackmoney,
'fullreduceid' => $activity['fullreduceid'],
'fullreducemoney' => $fulldkmoney,
'drawid' => $drawid,
'luckydrawid' => $luckydrawid,
'moinfo' => serialize($diyFormInfo)
];
$res = pdo_insert(PDO_NAME . 'order' , $data);
$errid = pdo_insertid();
if($res){
$orderid = pdo_getcolumn(PDO_NAME.'order',array('orderno'=>$data['orderno']),'id');
}
if($orderid != $errid){
file_put_contents(PATH_DATA . "barOrderError.log", var_export($orderid.'||'.$errid, true) . PHP_EOL, FILE_APPEND);
}
if($redpackid){
pdo_update('wlmerchant_redpack_records',array('status' => 1,'usetime' =>time(),'orderid' => $orderid,'plugin' => $plugin),array('id' => $redpackid));
}
if ($orderid) {
pdo_update('wlmerchant_bargain_userlist' , ['orderid' => $orderid] , ['id' => $optionid]);
MysqlFunction::commit();
if ($data['price'] > 0) {
$unidata['status'] = 1;
$unidata['orderid'] = $orderid;
$this->renderSuccess('购买成功' , $unidata);
}
else {
//0元购 购买商品的同时开通会员卡是不允许进行0元购的 必须进入支付流程
$newdata = [
'status' => 1 ,
'paytime' => time() ,
'paytype' => 6 ,
];
if ($expressid) {
$newdata['status'] = 8;
Bargain::createRecord($orderid , 1 , $optionid , 1);
}
else {
Order::createSmallorder($orderid , 5);
if ($activity['cutoffstatus']) {
$newdata['estimatetime'] = time() + $activity['cutoffday'] * 86400;
}
else {
$newdata['estimatetime'] = $activity['cutofftime'];
}
$newdata['remindtime'] = Order::remindTime($newdata['estimatetime']);
pdo_update(PDO_NAME . 'bargain_userlist' , ['status' => 2] , ['id' => $optionid]);
}
if($dkmoney > 0 && $_W['wlsetting']['creditset']['nodistribution'] > 0){
$nodis = 1;
}
if (p('distribution') && empty($activity['isdistri']) && empty($nodis)) {
$disarray = unserialize($activity['disarray']);
$disorderid = Distribution::disCore($data['mid'], $data['goodsprice'], $disarray, 1, 0, $orderid, 'bargain', $activity['dissettime'],$activity['isdistristatus']);
$newdata['disorderid'] = $disorderid;
}
pdo_update(PDO_NAME . 'order' , $newdata , ['orderno' => $data['orderno']]); //更新订单状态
//抽奖领取
if($data['drawid'] > 0){
pdo_update('wlmerchant_draw_record',array('is_get' => 2),array('id' => $data['drawid']));
}
if($data['drawid'] > 0){
pdo_update('wlmerchant_luckydraw_drawcode',array('is_get' => 1,'gettime' => time()),array('id' => $data['drawid']));
}
//处理营销
if ($activity['integral']) {
$remark = '砍价:[' . $activity['name'] . ']赠送积分';
Member::credit_update_credit1($_W['mid'] , $activity['integral'] , $remark);
}
/***模板通知***/
News::addSysNotice($data['uniacid'],2,$data['sid'],0,$orderid);
Store::addFans($data['sid'], $data['mid']);
News::paySuccess($orderid,'bargain');
//小票打印
Order::sendPrinting($orderid,'bargain');
$unidata['status'] = 0;
$unidata['orderid'] = $orderid;
$unidata['tid'] = $data['orderno'];
$unidata['plugin'] = 'bargain';
$this->renderSuccess('购买成功' , $unidata);
}
}
MysqlFunction::rollback();
}
//积分兑换
if ($plugin == 'consumption') {
$goods = Consumption::creditshop_goods_get($id);
$level = unserialize($goods['level']);
if($goods['usedatestatus'] > 0){
$check = WeliamWeChat::checkUseDateStatus($goods['usedatestatus'],$goods['week'],$goods['day']);
if(empty($check)){
$this->renderError('今日商品无法兑换');
}
}
if ($goods['type'] == 'halfcard' && $halfcardflag) {
$this->renderError('您现在已是会员,无法再次兑换会员资格');
}
if ((!empty($cardId) || $halfcardflag) && $goods['vipstatus'] == 1) {
//判断会员特价
$goods['use_credit1'] = $goods['vipcredit1'];
$goods['use_credit2'] = $goods['vipcredit2'];
}
else if ($goods['vipstatus'] == 2) {
//判断会员特供
if (empty($halfcardflag) && empty($cardId)) {
MysqlFunction::rollback();
$this->renderError('该商品会员特供,请先成为会员');
}else if ($level) {
//判断等级
$flag = Halfcard::checklevel($_W['mid'] , $level);
if (empty($flag)) {
MysqlFunction::rollback();
$this->renderError('您所在的会员等级无权购买该商品');
}
}
}
//判断数量
if ($goods['chance'] > 0) {
$times = pdo_fetchcolumn('SELECT SUM(num) FROM ' . tablename('wlmerchant_consumption_record') . " WHERE uniacid = {$_W['uniacid']} AND goodsid = {$id} AND mid = {$_W['mid']} ");
if ($times == $goods['chance'] || $times > $goods['chance']) {
$this->renderError('该商品最多兑换' . $goods['chance'] . '次');
}
}
//判断库存
#6、获取销量
$total = pdo_fetchcolumn("SELECT SUM(num) FROM " . tablename(PDO_NAME . "order") . " WHERE plugin = 'consumption' AND fkid = {$id} AND status != 5 AND status != 7");
if($total >= $goods['stock']) $this->renderError('该商品已售罄!');
//判断积分
if ($_W['wlmember']['credit1'] < $goods['use_credit1'] * $num) {
$jftext = $_W['wlsetting']['trade']['credittext']?$_W['wlsetting']['trade']['credittext']:'积分';
$this->renderError($jftext.'不足,无法兑换');
}
if ($goods['type'] == 'goods') {
$express = $this->freight($addressid , $num , $goods);
$expressprice = $express['price'];
$expressid = $express['expressid'];
}
if (!empty($cardId)) {
$cardprice = pdo_getcolumn(PDO_NAME . 'halfcard_type' , ['id' => $cardId] , 'price');
}
else {
$cardprice = 0;
}
$prices = sprintf("%.2f" , $goods['use_credit2'] * $num + $expressprice + $cardprice - $redpackmoney);
//支付商品
//创建订单
$data = [
'uniacid' => $_W['uniacid'] ,
'mid' => $_W['mid'] ,
'sid' => 0 ,
'aid' => $_W['aid'] ,
'fkid' => $goods['id'] ,
'plugin' => 'consumption' ,
'payfor' => 'consumOrder' ,
'orderno' => createUniontid() ,
'status' => 0 ,//订单状态:0未支,1支付,2待发货,3已发货,4已签收,5已取消,6待退款,7已退款
'createtime' => TIMESTAMP ,
'price' => $prices > 0 ? $prices : 0,
'num' => 1 ,
'expressid' => $expressid ,
'buyremark' => $remark ,
'goodsprice' => $goods['old_price'] ,
'settlementmoney' => 0 ,
'settlementmoney' => 0 ,
'vip_card_id' => $cardId ,//会员卡的id
'name' => $_GPC['thname'] ,
'usecredit' => sprintf("%.2f",$goods['use_credit1'] * $num ),
'canceltime' => time() + $settings['cancel'] * 60,
'redpackid' => $redpackid,
'redpackmoney' => $redpackmoney
];
pdo_insert(PDO_NAME . 'order' , $data);
$orderid = pdo_insertid();
if($redpackid){
pdo_update('wlmerchant_redpack_records',array('status' => 1,'usetime' =>time(),'orderid' => $orderid,'plugin' => $plugin),array('id' => $redpackid));
}
if ($expressid) {
pdo_update('wlmerchant_express' , ['orderid' => $orderid] , ['id' => $expressid]);
}
$res = Member::credit_update_credit1($_W['mid'] , -$data['usecredit'] , '兑换[' . $goods['title'] . ']消耗');
//不支付的商品 存在开卡存在时不能进行0元购
if ($goods['use_credit2'] < 0.01 && empty($cardId) && $expressprice < 0.01) {
$trade = Setting::wlsetting_read('trade');
if ($res) {
if ($goods['type'] == 'credit2') {
$res2 = Member::credit_update_credit2($_W['mid'] , $goods['credit2'] , '兑换[' . $goods['title'] . ']获得' . $trade['moneytext']);
}
else if ($goods['type'] == 'halfcard') {
$res2 = Consumption::conhalfcard($_W['mid'] , $goods['halfcardid'] , $_GPC['thname']);
}
else {
$res2 = 1;
}
if ($res2) {
$recordstatus = $goods['type'] == 'goods' ? 1 : 3;
$data2 = [
'uniacid' => $_W['uniacid'] ,
'mid' => $_W['mid'] ,
'goodsid' => $id ,
'status' => $recordstatus ,
'createtime' => time() ,
'integral' => $data['usecredit'],
'expressid' => $expressid ,
'orderid' => $orderid,
'num' => $num
];
if ($expressid) {
$data2['status'] = 1;
}
$res3 = pdo_insert(PDO_NAME . 'consumption_record' , $data2);
if ($res3) {
$changestatus = $goods['type'] == 'goods' ? 8 : 3;
pdo_update('wlmerchant_order' , [
'status' => $changestatus ,
'paytype' => 6 ,
'paytime' => time(),
'issettlement' => 1
] , ['id' => $orderid]);
/***模板通知***/
$url = h5_url('pages/subPages/coupon/coupon');
$modelData = [
'first' => '恭喜您,一个商品兑换成功' ,
'type' => '积分商品兑换' ,//业务类型
'content' => $goods['title'] ,//业务内容
'status' => '兑换成功' ,//处理结果
'time' => date("Y-m-d H:i:s" , $data['createtime']) ,//操作时间
'remark' => '点击查看兑换记录,如有问题请联系管理员'
];
TempModel::sendInit('service' , $_W['mid'] , $modelData , $_W['source'] , $url);
/***模板通知***/
$unidata['status'] = 0;
$unidata['orderid'] = $orderid;
$unidata['tid'] = $data['orderno'];
$unidata['plugin'] = 'consumption';
$this->renderSuccess('购买成功' , $unidata);
}
}
}
}
else {
if ($orderid) {
$unidata['status'] = 1;
$unidata['orderid'] = $orderid;
$this->renderSuccess('购买成功' , $unidata);
}
}
}
//活动报名
if ($plugin == 'activity'){
MysqlFunction::setTrans(4);
MysqlFunction::startTrans();
$activity = pdo_get('wlmerchant_activitylist',array('id' => $id));
//判断活动状态
if ($activity['status'] != 2) {
if ($activity['status'] == 1) {
MysqlFunction::rollback();
$this->renderError('活动报名尚未开始');
}
else if ($activity['status'] == 3) {
MysqlFunction::rollback();
$this->renderError('活动报名已结束');
} else{
MysqlFunction::rollback();
$this->renderError('活动已关闭');
}
}
//判断规格
if ($activity['optionstatus']>0) {
if ($optionid) {
$option = pdo_get('wlmerchant_activity_spec' , ['id' => $optionid] , ['viparray','disarray','name','price','maxnum']);
$activity['price'] = $option['price'];
$total = $option['maxnum'];
$activity['viparray'] = WeliamWeChat::mergeVipArray($option['viparray'],$activity['viparray']);
}else {
MysqlFunction::rollback();
$this->renderError('规格参数错误,请重新选择');
}
}
else {
$optionid = 0;
$total = $activity['maxpeoplenum'];
}
//判断剩余数量
if($total > 0){
$salesVolume = WeliamWeChat::getSalesNum(6,$id,$optionid,1);
$levelnum = $total - intval($salesVolume);
if($levelnum < $num){
MysqlFunction::rollback();
$this->renderError('报名名额已满');
}
}
if($activity['onelimit']>0){
$salesVolume = WeliamWeChat::getSalesNum(6,$id,0,1,$_W['mid']);
$levelnum = $activity['onelimit'] - intval($salesVolume);
if($levelnum < $num){
MysqlFunction::rollback();
if($levelnum>0){
$this->renderError('您还能报名'.$levelnum.'人次');
}else{
$this->renderError('您已经报名过了');
}
}
}
/*判断会员*/
$price = $activity['price'];
if ($activity['vipstatus'] == 1) {
if ($halfcardflag || !empty($cardId)) {
$vipdiscount = WeliamWeChat::getVipDiscount($activity['viparray'],$uhlevel);
if($vipdiscount > 0){
$vipbuyflag = 1;
}
}
}else if ($activity['vipstatus'] == 2) {
if (empty($halfcardflag) && empty($cardId)) {
MysqlFunction::rollback();
$this->renderError('该商品会员特供,请先成为会员');
}
}
if (empty($vipbuyflag)) {
$vipbuyflag = 0;
}
//创建订单
$prices = sprintf("%.2f" , $price * $num);
$goodsprice = sprintf("%.2f" , $activity['price'] * $num);
if (!empty($cardId)) {
$cardprice = pdo_getcolumn(PDO_NAME . 'halfcard_type' , ['id' => $cardId] , 'price');
}
else {
$cardprice = 0;
}
if($vipdiscount > 0){
$vipdiscount = $vipdiscount * $num;
}else{
$vipdiscount = 0;
}
$prices = sprintf("%.2f" , $prices + $cardprice - $vipdiscount - $redpackmoney);
//结算金额
$useprices = sprintf("%.2f" , $prices / $num);
$settlementmoney = Store::getsettlementmoney(6,$id,$num,$activity['sid'],$vipbuyflag ,$optionid,0,$useprices,$uhlevel);
if($settlementmoney < 0.01){
$settlementmoney = Store::getsettlementmoney(6,$id,$num,$activity['sid'],$vipbuyflag ,$optionid,0,$useprices,$uhlevel);
}
$data = [
'uniacid' => $activity['uniacid'] ,
'mid' => $_W['mid'] ,
'sid' => $activity['sid'] ,
'aid' => $activity['aid'] ,
'fkid' => $activity['id'] ,
'plugin' => 'activity' ,
'payfor' => 'Activitysharge' ,
'orderno' => createUniontid() ,
'status' => 0 ,//订单状态:0未支,1支付,2待发货,3已发货,4已签收,5已取消,6待退款,7已退款
'createtime' => TIMESTAMP ,
'price' => $prices > 0 ? $prices : 0,
'num' => $num ,
'vipbuyflag' => $vipbuyflag ,
'specid' => $optionid ,
'name' => $username ,
'mobile' => $mobile ,
'goodsprice' => $goodsprice ,
'buyremark' => $remark ,
'settlementmoney' => $settlementmoney ,
'vip_card_id' => $cardId ,//会员卡的id
'canceltime' => time() + $settings['cancel'] * 60,
'redpackid' => $redpackid,
'redpackmoney' => $redpackmoney,
'neworderflag' => 1,
'vipdiscount' => $vipdiscount,
'moinfo' => serialize($diyFormInfo)
];
pdo_insert(PDO_NAME . 'order' , $data);
$orderid = pdo_insertid();
if (empty($orderid)) {
MysqlFunction::rollback();
$this->renderError('创建订单失败,请刷新重试');
}
MysqlFunction::commit();
if ($data['price'] > 0) {
$unidata['status'] = 1;
$unidata['orderid'] = $orderid;
$this->renderSuccess('购买成功' , $unidata);
}else{
//0元购 购买商品的同时开通会员卡是不允许进行0元购的 必须进入支付流程
$newdata = [
'status' => 1 ,
'paytime' => time() ,
'paytype' => 6 ,
];
Order::createSmallorder($orderid , 6);
//计算过期时间
$newdata['estimatetime'] = $activity['activeendtime'];
$newdata['remindtime'] = Order::remindTime($newdata['activestarttime']);
//处理分销
if($dkmoney>0 && $_W['wlsetting']['creditset']['nodistribution'] > 0){
$nodis = 1;
}
if (p('distribution') && empty($activity['isdistri']) && empty($data['drawid']) && empty($data['luckydrawid']) && empty($nodis)) {
if ($data['specid']) {
$activity['disarray'] = WeliamWeChat::mergeDisArray($option['disarray'],$activity['disarray']);
}
$disarray = unserialize($activity['disarray']);
$dismoney = sprintf("%.2f",$data['goodsprice'] - $data['vipdiscount']);
$disorderid = Distribution::disCore($data['mid'],$dismoney,$disarray, $data['num'], 0, $orderid, 'activity', $activity['dissettime'],$activity['isdistristatus']);
$newdata['disorderid'] = $disorderid;
}
pdo_update(PDO_NAME . 'order' , $newdata , ['orderno' => $data['orderno']]); //更新订单状态
/***模板通知***/
Store::addFans($activity['sid'] , $_W['mid']);
News::addSysNotice($data['uniacid'],2,$data['sid'],0,$orderid);
News::paySuccess($orderid, 'activity');
//小票打印
//Order::sendPrinting($orderid,'activity');
$unidata['status'] = 0;
$unidata['orderid'] = $orderid;
$unidata['tid'] = $data['orderno'];
$unidata['plugin'] = 'activity';
$this->renderSuccess('购买成功' , $unidata);
}
}
}
/**
* Comment: 计算运费
* Author: wlf
* Date: 2019/8/19 09:15
*/
public function freight($addressid , $num , $good,$expressprice = 0)
{
global $_W;
//设置默认
pdo_update('wlmerchant_address' , ['status' => 0] , ['mid' => $_W['mid'] , 'uniacid' => $_W['uniacid']]);
pdo_update('wlmerchant_address' , ['status' => 1] , ['id' => $addressid]);
$address = pdo_get('wlmerchant_address' , ['id' => $addressid]);
$data['uniacid'] = $_W['uniacid'];
$data['mid'] = $_W['mid'];
$data['goodsid'] = $good['id'];
$data['merchantid'] = $good['merchantid'];
$data['address'] = $addre = $address['province'] . $address['city'] . $address['county'] . $address['detailed_address'];
$data['name'] = $username = $address['name'];
$data['tel'] = $mobile = $address['tel'];
if ($good['expressid']>0) {
$express = pdo_get('wlmerchant_express_template' , ['id' => $good['expressid']]);
//添加设置错误项校验
if(empty($express['defaultnum'])){
$express['defaultnum'] = 99999;
}
if(empty($express['defaultnumex'])){
$express['defaultnumex'] = 1;
}
if(!empty($express)){
$areaflag = 0;
if (mb_substr($address['province'] , -1 , 1 , 'utf-8') == '省') {
$address['province'] = mb_substr($address['province'] , 0 , mb_strlen($address['province']) - 1 , 'utf-8');
}
if ($express['expressarray']) {
$expressarray = unserialize($express['expressarray']);
foreach ($expressarray as $key => &$v) {
$v['area'] = rtrim($v['area'] , ",");
$v['area'] = explode(',' , $v['area']);
if (in_array($address['province'] , $v['area'])) {
if($num >= $v['freenumber'] && $v['freenumber'] > 0){
$expressprice = 0; //包邮
}else if ($num > $v['num']) {
$expressprice = $v['money'] + ceil(($num - $v['num']) / $v['numex']) * $v['moneyex'];
}
else {
$expressprice = $v['money'];
}
$areaflag = 1;
}
}
}
if (empty($areaflag)) {
if($num >= $express['freenumber'] && $express['freenumber'] > 0){
$expressprice = 0; //包邮
}else if ($num > $express['defaultnum']) {
$expressprice = $express['defaultmoney'] + ceil(($num - $express['defaultnum']) / $express['defaultnumex']) * $express['defaultmoneyex'];
}
else {
$expressprice = $express['defaultmoney'];
}
}
}
$expressprice = $expressprice < 0 ? 0 : $expressprice;
}
$data['expressprice'] = $expressprice;
pdo_insert(PDO_NAME . 'express' , $data);
$expressid = pdo_insertid();
$express = [
'price' => $expressprice ,
'expressid' => $expressid
];
return $express;
}
/**
* Comment: 订单详情页面
* Author: wlf
* Date: 2019/8/19 10:35
*/
public function orderDetail()
{
global $_W , $_GPC;
$id = $_GPC['orderid'];
$plugin = $_GPC['plugin'];
$lat = $_GPC['lat'];
$lng = $_GPC['lng'];
$data = [];
$data['id'] = $id;
if ($plugin == 'rush') {
$order = pdo_get('wlmerchant_rush_order' , ['id' => $id]);
if($order['blendcredit'] > 0){
$order['paytype'] = 7;
$data['blendcredit'] = $order['blendcredit'];
$data['blendwx'] = sprintf("%.2f",$order['actualprice'] - $order['blendcredit']);
}
$goods = pdo_get('wlmerchant_rush_activity' , ['id' => $order['activityid']]);
$data['goodName'] = $goods['name'];
$data['goodLogo'] = tomedia($goods['thumb']);
$data['unitPrice'] = sprintf("%.2f" , $order['price'] / $order['num']);
if ($order['optionid']) {
$option = pdo_get('wlmerchant_goods_option' , ['id' => $order['optionid']] , [
'title' ,
'price' ,
'vipprice'
]);
$data['optionName'] = $option['title'];
}
if ($order['vipbuyflag']) {
if ($order['discount'] > 0) {
//会员优惠存在 并且不是多规格商品
$data['vipdiscount'] = $order['discount'];
}else {
//没有储存会员优惠 按照以前的规则进行查询
if ($order['optionid']) {
$data['vipdiscount'] = sprintf("%.2f" , $option['price'] - $option['vipprice']);
}
else {
$data['vipdiscount'] = sprintf("%.2f" , $goods['price'] - $goods['vipprice']);
}
}
}
else {
$data['vipdiscount'] = 0;
}
$data['thname'] = $order['username'] ? $order['username'] : $_W['wlmember']['nickname'];
$data['thmobile'] = $order['mobile'] ? $order['mobile'] : $_W['wlmember']['mobile'];
$data['goodsprice'] = $order['price'];
$data['actualprice'] = $order['actualprice'];
$data['usecredit'] = $order['dkcredit'];
$data['creditmoney'] = $order['dkmoney'];
$data['a'] = 'b';
$data['goodsid'] = $order['activityid'];
$data['pluginno'] = 1;
}
else {
$order = pdo_get('wlmerchant_order' , ['id' => $id]);
if($order['blendcredit'] > 0){
$order['paytype'] = 7;
$data['blendcredit'] = $order['blendcredit'];
$data['blendwx'] = sprintf("%.2f",$order['price'] - $order['blendcredit']);
}
if ($plugin == 'groupon') {
$goods = pdo_get('wlmerchant_groupon_activity' , ['id' => $order['fkid']]);
$data['goodName'] = $goods['name'];
$data['goodLogo'] = tomedia($goods['thumb']);
if ($order['specid']) {
$option = pdo_get('wlmerchant_goods_option' , ['id' => $order['specid']] , [
'title' ,
'price' ,
'vipprice'
]);
$data['optionName'] = $option['title'];
}
if ($order['vipbuyflag']) {
if($order['vipdiscount']>0){
$data['vipdiscount'] = $order['vipdiscount'];
}else{
if ($order['specid']) {
$data['vipdiscount'] = sprintf("%.2f" , $option['price'] - $option['vipprice']);
}else {
$data['vipdiscount'] = sprintf("%.2f" , $goods['price'] - $goods['vipprice']);
}
}
}
else {
$data['vipdiscount'] = 0;
}
$data['goodsid'] = $order['fkid'];
$data['pluginno'] = 2;
}
else if ($plugin == 'wlfightgroup') {
$goods = pdo_get('wlmerchant_fightgroup_goods' , ['id' => $order['fkid']]);
$data['goodName'] = $goods['name'];
$data['goodLogo'] = tomedia($goods['logo']);
if ($order['specid']) {
$data['optionName'] = pdo_getcolumn(PDO_NAME . 'goods_option' , ['id' => $order['specid']] , 'title');
}
if ($order['vipbuyflag']) {
$data['vipdiscount'] = $goods['vipdiscount'];
}
$order['goodsprice'] = $order['goodsprice'] - $data['vipdiscount'];
$data['goodsid'] = $order['fkid'];
$data['pluginno'] = 3;
if ($order['fightstatus'] == 1) {
$group = pdo_get('wlmerchant_fightgroup_group' , ['id' => $order['fightgroupid']] , ['status']);
}
$data['fightstatus'] = $order['fightstatus'];
$data['groupstatus'] = $group['status'];
$data['fightgroupid'] = $order['fightgroupid'];
}
else if ($plugin == 'bargain') {
$goods = pdo_get('wlmerchant_bargain_activity' , ['id' => $order['fkid']]);
$data['goodName'] = $goods['name'];
$data['goodLogo'] = tomedia($goods['thumb']);
$data['goodsid'] = $order['fkid'];
$data['pluginno'] = 7;
}
else if ($plugin == 'consumption') {
$goods = pdo_get('wlmerchant_consumption_goods' , ['id' => $order['fkid']]);
$data['goodName'] = $goods['title'];
$data['goodLogo'] = tomedia($goods['thumb']);
$data['goodsid'] = $order['fkid'];
$data['pluginno'] = 'integral';//8
}
else if ($plugin == 'coupon') {
$goods = pdo_get('wlmerchant_couponlist' , ['id' => $order['fkid']]);
if ($order['vipbuyflag']) {
$data['vipdiscount'] = sprintf("%.2f" , $goods['price'] - $goods['vipprice']);
$order['goodsprice'] = sprintf("%.2f" , ($order['goodsprice'] + ($data['vipdiscount'] * $order['num'])));
}
else {
$data['vipdiscount'] = 0;
}
$data['goodName'] = $goods['title'];
$data['goodLogo'] = tomedia($goods['logo']);
$data['optionName'] = $goods['sub_title'];
$data['goodsid'] = $order['fkid'];
$data['pluginno'] = 5;
}else if($plugin == 'yellowpage'){
$yellow = pdo_get('wlmerchant_yellowpage_lists' , ['id' => $order['fkid']]);
switch ($order['fightstatus']) {
case '1':
$data['goodName'] = '页面['.$yellow['name'].']认领';
break;
case '2':
$data['goodName'] = '页面['.$yellow['name'].']查阅';
break;
case '3':
$data['goodName'] = '页面['.$yellow['name'].']入驻';
break;
case '4':
$data['goodName'] = '页面['.$yellow['name'].']续费';
break;
}
$data['goodLogo'] = tomedia($yellow['logo']);
$data['goodsurl'] = h5_url('pages/subPages2/phoneBook/logistics/logistics',array('id'=>$order['fkid']));
}else if($plugin == 'activity'){
$goods = pdo_get('wlmerchant_activitylist' , ['id' => $order['fkid']]);
$data['goodName'] = $goods['title'];
$data['goodLogo'] = tomedia($goods['thumb']);
if ($order['specid']) {
$option = pdo_get('wlmerchant_activity_spec' , ['id' => $order['specid']] , ['name','price']);
$data['optionName'] = $option['name'];
}
if ($order['vipbuyflag']) {
$data['vipdiscount'] = sprintf("%.2f",$goods['vipprice']);
}
else {
$data['vipdiscount'] = 0;
}
$data['goodsid'] = $order['fkid'];
$data['pluginno'] = 'activity';
$data['addresstype'] = $goods['addresstype'];
if($data['addresstype'] > 0){
$data['activityAddress'] = $goods['address'];
$data['activityLng'] = $goods['lng'];
$data['activityLat'] = $goods['lat'];
}
}
$data['unitPrice'] = sprintf("%.2f" , $order['goodsprice'] / $order['num']);
$data['thname'] = $order['name'] ? $order['name'] : $_W['wlmember']['nickname'];
$data['thmobile'] = $order['mobile'] ? $order['mobile'] : $_W['wlmember']['mobile'];
$data['goodsprice'] = $order['goodsprice'];
$data['usecredit'] = $order['usecredit'];
$data['creditmoney'] = $order['cerditmoney'];
if ($data['vipdiscount'] > 0) {
$data['vipdiscount'] = sprintf("%.2f" , $data['vipdiscount'] * $order['num']);
}
$data['actualprice'] = $order['price'];
$data['a'] = 'a';
}
if($order['redpackid']){
$data['redpackcount'] = $order['redpackmoney'];
}
//判断用户
if ($_W['mid'] != $order['mid']) {
$this->renderError('当前mid['.$_W['mid'].']订单mid['.$order['mid'].'],用户错误,无法访问');
}
//同时开通会员卡
if ($order['vip_card_id'] > 0) {
$data['cardprice'] = pdo_getcolumn(PDO_NAME . 'halfcard_type' , ['id' => $order['vip_card_id']] , 'price');
}
//基础信息
$data['sid'] = $order['sid'];
$data['num'] = $order['num'];
$data['orderno'] = $order['orderno'];
$data['status'] = $order['status'];
$data['createtime'] = date('Y-m-d H:i:s' , $order['createtime']);
if ($data['status'] != 0 && $data['status'] != 5) {
$paytype = [1 => '余额支付' , 2 => '微信支付' , 3 => '支付宝支付' , 4 => '货到付款' , 5 => '小程序支付' , 6 => '0元购',7 => '混合支付'];
$data['paytype'] = $paytype[$order['paytype']];
$data['paytime'] = date('Y-m-d H:i:s' , $order['paytime']);
}
//是否可退款
if (empty($goods['allowapplyre']) && ($order['status'] == 1 || $order['status'] == 8 || $order['status'] == 9) && $plugin != 'consumption') {
if ($order['status'] == 8) {
$canre = pdo_getcolumn(PDO_NAME . 'aftersale' , [
'orderid' => $id ,
'plugin' => $plugin ,
'status' => [1 , 2]
] , 'id');
if ($canre) {
$data['surerefund'] = 0;
$data['status'] = 10;
}
else {
$data['surerefund'] = 1;
}
}
else {
$data['surerefund'] = 1;
}
}
else {
$data['surerefund'] = 0;
}
if ($order['status'] == 1) { //待使用
$smallorder = pdo_getall('wlmerchant_smallorder' , ['orderid' => $id , 'plugin' => $plugin] , [
'checkcode' ,
'status',
'appointstatus'
]);
if(empty($smallorder) && $plugin == 'rush' && empty($goods['pftid'])){
Order::createSmallorder($id,1);
}
$data['checkcodes'] = $smallorder; //核销码
if($goods['appointstatus'] > 0){
$data['codeNum'] = pdo_fetchcolumn('SELECT count(id) FROM ' . tablename('wlmerchant_smallorder') . " WHERE plugin = '{$plugin}' AND orderid = {$id} AND status = 1 AND appointstatus = 3"); //剩余数量
}else{
$data['codeNum'] = pdo_fetchcolumn('SELECT count(id) FROM ' . tablename('wlmerchant_smallorder') . " WHERE plugin = '{$plugin}' AND orderid = {$id} AND status = 1"); //剩余数量
}
$data['estimatetime'] = date('Y-m-d H:i' , $order['estimatetime']);
$canuse = pdo_getcolumn(PDO_NAME . 'smallorder' , [
'orderid' => $id ,
'plugin' => $plugin ,
'status' => 1
] , 'id');
if (empty($canuse) && empty($goods['pftid'])) {
$data['status'] = 10;
}
}
else if ($order['status'] == 0) { //待付款
$data['sytime'] = $order['canceltime'];
if (empty($data['sytime'])) {
$data['sytime'] = time() - 1;
}
//云收单校验
if(Customized::init('yunmis160') > 0){
$paylog = pdo_get('wlmerchant_paylogvfour' , ['tid' => $order['orderno']] , ['batchNo','traceNo']);
if(!empty($paylog['batchNo']) && !empty($paylog['traceNo'])){
$set = Setting::wlsetting_read("payment_set");
$payid = $set['wechat']['wechat'];
$paySetInfo = json_decode(pdo_getcolumn(PDO_NAME."payment",['id'=>$id],'param'),true);
$geturl = 'https://epos.ahrcu.com:3443/cposp/pay/nativeOrderQuery';
$wechatData = [
'merchantNo' => $paySetInfo['yun_merchantNo'],
'terminalNo' => $paySetInfo['yun_terminalNo'],
'batchNo' => $paylog['batchNo'],
'traceNo' => $paylog['traceNo'],
'nonceStr' => random(16)
];
#3、处理支付方式
$wechatData['sign'] = Payment::getYunSign($wechatData,$paySetInfo['yun_KEY']);
$wechatData = json_encode($wechatData);
$queryInfo = curlPostRequest($geturl,$wechatData,["Content-type: application/json;charset='utf-8'"]);
if($queryInfo['resultCode'] != '00'){
Util::wl_log('160PayApi.log',PATH_DATA,$queryInfo); //写入异步日志记录
}else{
if($queryInfo['orderStatus'] == 3){
$successInfo = [
'type' => 2 ,//支付方式
'tid' => $order['orderno'],//订单号
'transaction_id' => $queryInfo['chnOrderId'] ,
'time' => $queryInfo['transTime'],
];
PayResult::main($successInfo);//调用方法处理订单
}
}
}
}
}
else if ($order['status'] == 7) {
$data['refundtime'] = date('Y-m-d H:i' , $order['refundtime']);
}
//使用方式
//卡密商品
if( $goods['usestatus'] == 3){
$data['usestatus'] = 3;
if(empty($smallorder)){
$smallorder = pdo_getall('wlmerchant_smallorder' , ['orderid' => $id , 'plugin' => $plugin] , [
'checkcode' ,
'status',
'appointstatus'
]);
$data['checkcodes'] = $smallorder; //核销码
}
$merchant = pdo_get('wlmerchant_merchantdata' , ['id' => $order['sid']] , [
'mobile' ,
'storename' ,
'address' ,
'location' ,
'verkey'
]);
$data['storename'] = $merchant['storename'];
$data['mobile'] = $merchant['mobile'];
$data['address'] = $merchant['address'];
$location = unserialize($merchant['location']);
$data['location'] = $location;
//计算距离
if (!empty($lat) && !empty($lng)) {
$data['distance'] = Store::getdistance($location['lng'] , $location['lat'] , $lng , $lat);
if ($data['distance'] > 1000) {
$data['distance'] = (floor(($data['distance'] / 1000) * 10) / 10) . "km";
}
else {
$data['distance'] = round($data['distance']) . "m";
}
}
}else if (empty($order['expressid'])) {
$data['usestatus'] = 1; //使用方式 核销
$merchant = pdo_get('wlmerchant_merchantdata' , ['id' => $order['sid']] , [
'mobile' ,
'storename' ,
'address' ,
'location' ,
'verkey'
]);
$data['storename'] = $merchant['storename'];
$data['mobile'] = $merchant['mobile'];
$data['address'] = $merchant['address'];
$location = unserialize($merchant['location']);
$data['location'] = $location;
//计算距离
if (!empty($lat) && !empty($lng)) {
$data['distance'] = Store::getdistance($location['lng'] , $location['lat'] , $lng , $lat);
if ($data['distance'] > 1000) {
$data['distance'] = (floor(($data['distance'] / 1000) * 10) / 10) . "km";
}
else {
$data['distance'] = round($data['distance']) . "m";
}
}
//密码核销
if (!empty($merchant['verkey'])) {
$data['verkeystatus'] = 1;
}
else {
$data['verkeystatus'] = 0;
}
//扫码核销
if ($_W['source'] == 3) {
$showurl = 'pages/mainPages/orderWrite/orderWrite?id=' . $id . '&plugin=' . $plugin;
$logo = tomedia(pdo_getcolumn(PDO_NAME . 'merchantdata' , ['id' => $order['sid']] , 'logo'));
$data['qrcode'] = tomedia(Store::getShopWxAppQrCode(0 , $logo , $showurl , true));
}
else {
$data['qrcode'] = WeliamWeChat::getQrCode(h5_url('pages/mainPages/orderWrite/orderWrite' , [
'id' => $id ,
'plugin' => $plugin
]));
}
//预约
if($goods['appointstatus'] > 0){
$data['appointstatus'] = 1;
$data['appointNum'] = pdo_fetchcolumn('SELECT count(id) FROM ' . tablename('wlmerchant_smallorder') . " WHERE plugin = '{$plugin}' AND orderid = {$id} AND status = 1 AND appointstatus = 1");
$data['alAppointFlag'] = pdo_getcolumn(PDO_NAME.'appointlist',array('orderid'=>$id,'type'=>$data['pluginno']),'id');
}
}
else {
$data['usestatus'] = 2; //使用方式 快递
$express = pdo_get('wlmerchant_express' , ['id' => $order['expressid']] , [
'name' ,
'tel' ,
'address' ,
'expressprice' ,
'expressname' ,
'expresssn'
]);
$data['expName'] = $express['name'];
$data['expTel'] = $express['tel'];
$data['expAddress'] = $express['address'];
//快递
$data['expressname'] = Logistics::codeComparisonTable($express['expressname'] , 'alias')['name'];
$data['expresssn'] = $express['expresssn'];
$data['expressprice'] = $express['expressprice']; //运费
}
//处理返回值
if (empty($data['expressprice'])) {
$data['expressprice'] = 0;
}
if (empty($data['vipdiscount'])) {
$data['vipdiscount'] = 0;
}
if (empty($data['creditmoney'])) {
$data['creditmoney'] = 0;
}
$data['com_dis_price'] = $order['com_dis_price'] > 0 ? $order['com_dis_price'] : 0;
$data['fullreducemoney'] = $order['fullreducemoney'] > 0 ? $order['fullreducemoney'] : 0;
//自定义表单信息处理
$moinfo = unserialize($order['moinfo']);
if($moinfo){
foreach($moinfo as &$moinfoItem){
if($moinfoItem['id'] == 'img'){
foreach($moinfoItem['data'] as $imgKey => $imgLink){
$moinfoItem['data'][$imgKey] = tomedia($imgLink);
}
}
}
$data['moinfo'] = $moinfo;
}
//票付通处理
if($goods['pftid'] > 0 && $order['status'] == 1 && empty($goods['threestatus'])){
$data['pftinfo'] = unserialize($order['pftorderinfo']);
$data['pftflag'] = 1;
if(empty($data['pftinfo']['UUcode'])){
$moreinfo = Pftapimod::pftOrderQuery($data['pftinfo']['UUordernum']);
$data['pftinfo']['UUcode'] = $moreinfo['UUcode'];
$newinfo = serialize($data['pftinfo']);
if ($plugin == 'rush') {
pdo_update('wlmerchant_rush_order',array('pftorderinfo' => $newinfo),array('id' => $id));
}else{
pdo_update('wlmerchant_order',array('pftorderinfo' => $newinfo),array('id' => $id));
}
}
}
//退款提示
if($data['status'] == 10){
$ordersettings = Setting::wlsetting_read('orderset');
$data['tiptext'] = $ordersettings['refundtip'] ? : '请等待系统退款';
}
$this->renderSuccess('订单详情' , $data);
}
/**
* Comment: 订单支付成功
* Author: wlf
* Date: 2019/8/19 16:23
*/
public function payOver()
{
global $_W , $_GPC;
$tid = $_GPC['tid'];
$paylog = pdo_get('wlmerchant_paylogvfour' , ['tid' => $tid] , ['plugin' ,'plid','fee','payfor']);
if ($paylog) {
$type = strtolower($paylog['plugin']);
$payfor = strtolower($paylog['payfor']);
$data = [];
$data['plugin'] = $type;
if ($type == 'rush') {
$order = pdo_get('wlmerchant_rush_order' , ['orderno' => $tid] , ['id' , 'paytype' , 'paidprid' , 'actualprice' , 'vip_card_id' , 'expressid']);
$data['price'] = $order['actualprice'];
}
else if ($type == 'merchant' && $payfor == 'halfcard') {
$order = pdo_get('wlmerchant_halfcard_record' , ['orderno' => $tid] , ['id' , 'paytype' , 'paidprid' , 'price']);
$data['price'] = $order['price'];
}
else if ($type == 'attestation') {
$order = pdo_get('wlmerchant_attestation_money' , ['orderno' => $tid] , ['id' , 'paytype' , 'money' , 'type']);
$data['price'] = $order['money'];
$data['type'] = $order['type'];
}
else {
$order = pdo_get('wlmerchant_order' , ['orderno' => $tid] , ['id' , 'recordid' , 'fkid' , 'plugin' , 'fightstatus' , 'paytype' , 'paidprid' , 'price' , 'vip_card_id' , 'expressid']);
$data['price'] = $order['price'];
if ($order['plugin'] == 'wlfightgroup') {
$data['fightgoodsid'] = $order['fkid'];
}
if ($order['plugin'] == 'coupon') {
$data['couponid'] = $order['recordid'];
}
if ($order['plugin'] == 'taxipay') {
$data['masid'] = $order['fkid'];
$info = DiyPage::defaultinfo('options');
$data['tabinfo'] = $info;
$areaid = pdo_getcolumn(PDO_NAME.'oparea',array('uniacid'=>$_W['uniacid'],'aid'=>$_W['aid']),'areaid');
$data['tabtitle'] = pdo_getcolumn(PDO_NAME.'area',array('id'=>$areaid),'name');
$data['tabtitle'] .= '精选';
$data['noticeurl'] = $_W['siteroot'].'addons/weliam_smartcity/plugin/taxipay/sys/resource/taxinotice.mp3';
}
if(empty($order) && $data['plugin'] == 'citydelivery'){
$data['price'] = $paylog['fee'];
$order = pdo_get('wlmerchant_order' , ['paylogid' => $paylog['plid']] , ['id' , 'recordid' , 'fkid' , 'plugin' , 'fightstatus' , 'paytype' , 'paidprid' , 'price' , 'vip_card_id' , 'expressid']);
}
}
}else {
$order = pdo_get('wlmerchant_rush_order' , ['orderno' => $tid] , ['id' , 'paytype' , 'paidprid' , 'actualprice' , 'vip_card_id', 'expressid']);
if (empty($order)) {
$order = pdo_get('wlmerchant_order' , ['orderno' => $tid] , ['id' , 'recordid' , 'fkid' , 'plugin' , 'fightstatus' , 'paytype' , 'paidprid' , 'price' , 'vip_card_id', 'expressid']);
$data['price'] = $order['price'];
$data['plugin'] = $order['plugin'];
if ($order['plugin'] == 'wlfightgroup') {
$data['fightgoodsid'] = $order['fkid'];
}
if ($order['plugin'] == 'coupon') {
$data['couponid'] = $order['recordid'];
}
if ($order['plugin'] == 'halfcard') {
$data['plugin'] = 'payonline';
}
}else {
$data['price'] = $order['actualprice'];
$data['plugin'] = 'rush';
}
}
if ($type == 'merchant') {
$data['plugin'] = $payfor;
}
$paytype = [1 => '余额支付' , 2 => '微信支付' , 3 => '支付宝支付' , 4 => '货到付款' , 5 => '小程序支付' , 6 => '0元购'];
$data['paytype'] = $paytype[$order['paytype']];
//支付有礼
if ($order['paidprid']) {
$paid = pdo_get('wlmerchant_paidrecord' , ['id' => $order['paidprid']]);
$pactivity = pdo_get('wlmerchant_payactive' , ['id' => $paid['activeid']]);
if ($pactivity['giftstatus'] == 1) {
$couponIdList = explode(',' , $pactivity['giftcouponid']);
if (is_array($couponIdList)) {
foreach ($couponIdList as $key => $val) {
$couponNameList[$key] = pdo_getcolumn(PDO_NAME . 'couponlist' , ['id' => $val] , 'title');
}
}
$data['couponlist'] = $couponNameList;
}
if ($paid['codeid'] && $pactivity['giftstatus'] == 2) {
$code = pdo_get(PDO_NAME . 'token' , ['id' => $paid['codeid']] , ['number' , 'status']);
$data['code'] = $code['number'];
}
if ($pactivity['giftstatus'] == 3) {
$redPackList = [];
$redPackIds = explode(',' , $pactivity['giftredpack']);
if (is_array($redPackIds)) {
$field = ['id','title','full_money','cut_money','use_start_time','use_end_time','usetime_day1','usetime_day2','usegoods_type','usetime_type','limit_count','use_aids','use_sids'];
foreach ($redPackIds as $key => $val) {
$redpack = pdo_get(PDO_NAME."redpacks",['id'=>$val],$field);
if(!$redpack) continue;
//当前用户剩余可以领取的数量 删除用户不能领取的红包信息 开启后 则只显示用户可以领取的红包
if (!empty($redpack['limit_count'])) {
$mycounts = Redpack::getReceiveTotal($redpack['id'],$_W['mid'],1,0);
if ($mycounts >= $redpack['limit_count']){
$redpack['is_over'] = 1;
}
}
//价格处理
$redpack['full_money'] = sprintf("%0.2f",$redpack['full_money']);
$redpack['cut_money'] = sprintf("%0.2f",$redpack['cut_money']);
//有效期处理
$usetimes = [
date('Y-m-d' , $redpack['use_start_time']) . ' ~ ' . date('Y-m-d' , $redpack['use_end_time']) ,
'领取当日起' . $redpack['usetime_day1'] . '天内有效' ,
'领取次日起' . $redpack['usetime_day2'] . '天内有效'
];
$redpack['usetime_text'] = $usetimes[$redpack['usetime_type']];
//使用条件处理 0全平台1指定代理2指定商家
if ($redpack['usegoods_type'] == 1) {
//代理商可用 查询可用代理商信息
$aids = unserialize($redpack['use_aids']);
$agents = pdo_getall(PDO_NAME."oparea",['aid'=>$aids],'areaid');
if($agents) $areaInfo = pdo_getall(PDO_NAME."area",['id'=>array_values(array_column($agents,'areaid'))],'name');
if($areaInfo){
$areaName = implode(',',array_column($areaInfo,'name'));
$redpack['use_where'] = "仅限{$areaName}代理可用";
}else{
$redpack['use_where'] = "仅限指定地区可用";
}
}else if ($redpack['usegoods_type'] == 2) {
//商家可用 查询可用商家信息
$sids = unserialize($redpack['use_sids']);
$storeName = pdo_getall(PDO_NAME."merchantdata",['id'=>$sids],'storename');
if($storeName){
$storeName = implode(',',array_column($storeName,'storename'));
$redpack['use_where'] = "仅限{$storeName}商家可用";
}else{
$redpack['use_where'] = "仅限指定商家可用";
}
}else if ($redpack['usegoods_type'] == 3) {
//指定商品可用 商品过多,直接显示固定内容
$redpack['use_where'] = "仅限指定商品可用";
}else {
$redpack['use_where'] = '全平台可用';
}
//删除多余的信息
unset($redpack['usegoods_type']);
unset($redpack['use_start_time']);
unset($redpack['use_end_time']);
unset($redpack['usetime_day1']);
unset($redpack['usetime_day2']);
unset($redpack['usetime_type']);
$redPackList[$key] = $redpack;
}
}
$data['redpacklist'] = $redPackList;
}
$data['getcouflag'] = $paid['getcouflag'];
$data['integral'] = $paid['integral'];
$data['balance'] = $paid['balance'];
$data['thumb'] = tomedia($paid['img']);
$data['thumburl'] = $pactivity['advurl'];
$data['paidprid'] = $order['paidprid'];
}
if($data['plugin'] == 'citydelivery' && !empty($paylog['plid'])){
$data['orderid'] = $paylog['plid'];
}else{
$data['orderid'] = $order['id'];
}
if ($data['plugin'] == 'pocket') {
$data['tieziid'] = $order['fkid'];
}
if ($data['plugin'] == 'wlfightgroup') {
$data['fightstatus'] = $order['fightstatus'];
}
//求职招聘
if ($data['plugin'] == 'recruit') {
$data['recruit_id'] = $order['fkid'];
$recruit = pdo_get(PDO_NAME."recruit_recruit",['id'=>$order['fkid']]);
$data['release_sid'] = $recruit['release_sid'] ? : 0;
}
//权益
if ($data['plugin'] == 'rights') {
$data['rights_id'] = $order['fkid'];
}
//支付成功页面 小程序订阅消息type获取
if ($_W['source'] == 3) {
//2=回到首页、查看订单按钮 - 拼团商品 - 发货订单【拼团进度通知/订单发货通知】
//3=回到首页、查看订单按钮 - 拼团商品 - 核销、自提订单【拼团进度通知/核销成功通知】
//4=回到首页、查看订单按钮 - 非拼团商品 - 发货订单【订单发货通知】
//5=回到首页、查看订单按钮 - 非拼团商品 - 核销、自提订单【核销成功通知】
if ($data['plugin'] == 'wlfightgroup') {
if ($order['expressid'] > 0) $data['temp_type'] = intval(2);
else $data['temp_type'] = intval(3);
}else if (in_array($data['plugin'] , ['rush' , 'groupon' , 'bargain' , 'coupon' , 'consumption'])) {
if ($order['expressid'] > 0) $data['temp_type'] = intval(4);
else $data['temp_type'] = intval(5);
}
}
$this->renderSuccess('支付完成' , $data);
}
/**
* Comment: 领取支付有礼卡券
* Author: wlf
* Date: 2019/8/19 17:00
*/
public function getCoupon()
{
global $_W , $_GPC;
$id = $_GPC['id'];
$paid = pdo_get(PDO_NAME . 'paidrecord' , ['id' => $id]);
if ($paid['getcouflag']) {
$this->renderError('您已成功领取,无法重复领取');
}
$pactivity = pdo_get(PDO_NAME . 'payactive' , ['id' => $paid['activeid']]);
$couponIdList = explode(',' , $pactivity['giftcouponid']);
#3、通过循环判断信息
if (is_array($couponIdList)) {
$acresult = '';//优惠券领取状态
foreach ($couponIdList as $k => $v) {
$coupons = wlCoupon::getSingleCoupons($v , '*');
$num = wlCoupon::getCouponNum($v , 1);
//判断卡券是否能够被领取
if ($coupons['time_type'] == 1 && $coupons['endtime'] < time()) {
$acresult = '[失败]已停止发放';
}
if ($coupons['status'] == 0) {
$acresult = '[失败]已被禁用';
}
if ($coupons['status'] == 3) {
$acresult = '[失败]已失效';
}
if ($coupons['surplus'] > ($coupons['quantity'] - 1)) {
$acresult = '[失败]已被领光';
}
if ($num) {
if (($num > $coupons['get_limit'] || $num == $coupons['get_limit']) && $coupons['get_limit'] > 0) {
$acresult = '[失败]只能领取' . $coupons['get_limit'] . '张';
}
}
//领取状态为空 无异常 开始正常的领取操作
if (empty($acresult)) {
//用户领取卡券的操作
if ($coupons['time_type'] == 1) {
$starttime = $coupons['starttime'];
$endtime = $coupons['endtime'];
}
else {
$starttime = time();
$endtime = time() + ($coupons['deadline'] * 24 * 3600);
}
if (empty($coupons['is_charge'])) {
$coupons['price'] = 0;
$settlementmoney = 0;
}
else {
//结算金额
$settlementmoney = Store::getsettlementmoney(4 , $coupons['id'] , 1 ,$coupons['merchantid'] , 0);
}
//生成领取订单
$orderdata = [
'uniacid' => $coupons['uniacid'] ,
'mid' => $_W['mid'] ,
'aid' => $coupons['aid'] ,
'fkid' => $coupons['id'] ,
'sid' => $coupons['merchantid'] ,
'status' => 1 ,
'paytype' => 6 ,
'createtime' => time() ,
'orderno' => createUniontid() ,
'price' => 0 ,
'num' => 1 ,
'plugin' => 'coupon' ,
'payfor' => 'couponsharge' ,
'vipbuyflag' => 0 ,
'goodsprice' => $coupons['price'],
'settlementmoney' => $settlementmoney ,
'neworderflag' => 1 ,
'buyremark' => '支付有礼赠送卡券,记录号:' . $id ,
'paytime' => time()
];
$orderid = wlCoupon::saveCouponOrder($orderdata);
Order::createSmallorder($orderid , 4);
//生成卡券
$data = [
'mid' => $_W['mid'] ,
'aid' => $_W['aid'] ,
'parentid' => $coupons['id'] ,
'status' => 1 ,
'type' => $coupons['type'] ,
'title' => $coupons['title'] ,
'sub_title' => $coupons['sub_title'] ,
'content' => $coupons['goodsdetail'] ,
'description' => $coupons['description'] ,
'color' => $coupons['color'] ,
'starttime' => $starttime ,
'endtime' => $endtime ,
'createtime' => time() ,
'usetimes' => $coupons['usetimes'] ,
'concode' => 0 ,
'uniacid' => $_W['uniacid'] ,
'orderno' => $orderdata['orderno']
];
$res = pdo_insert(PDO_NAME . 'member_coupons' , $data);
$couponUserId = pdo_insertid();
$newdata['recordid'] = $couponUserId;
$newdata['estimatetime'] = $data['endtime'];
pdo_update(PDO_NAME . 'order' , $newdata , ['id' => $orderid]); //更新订单状态
if ($res) {
//修改卡券的已售数量
$newsurplus = $coupons['surplus'] + 1;
wlCoupon::updateCoupons(['surplus' => $newsurplus] , ['id' => $v]);
$url = h5_url('pages/subPages/coupon/coupon' , [
'id' => $couponUserId ,
'order_id' => $orderid
]);
$acresult = '[成功]领取成功';
}
else {
$acresult = '[失败]领取失败';
}
}
$messagedata = [
'first' => '“' . $coupons['title'] . '”领取结果通知' ,
'type' => '支付有礼-卡券领取' ,//业务类型
'content' => '领取人:' . $_W['wlmember']['nickname'] ,//业务内容
'status' => $acresult ,//处理结果
'time' => date('Y-m-d H:i:s' , time()) ,//操作时间
'remark' => '点击查看我的卡券'
];
TempModel::sendInit('service' , $_W['mid'] , $messagedata , $_W['source'] , $url);
$acresult = '';//清除领取状态
}
}
pdo_update(PDO_NAME . 'paidrecord' , ['getcouflag' => 1 , 'getcoutime' => time()] , ['id' => $id]);
$this->renderSuccess('领取成功');
}
/**
* Comment: 取消订单
* Author: wlf
* Date: 2019/8/19 17:27
*/
public function cancelOrder()
{
global $_W , $_GPC;
$id = $_GPC['id'];
$plugin = $_GPC['plugin'];
if ($plugin != 'rush') {
$order = pdo_get(PDO_NAME . 'order' , ['id' => $id] ,['mid','plugin','redpackid','usecredit']);
$plugin = $order['plugin'];
if ($plugin == 'groupon') {
$res = Groupon::cancelorder($id);
}
else if ($plugin == 'bargain') {
$res = Bargain::cancelorder($id);
}else if($plugin == 'wlfightgroup'){
$res = Wlfightgroup::cancelorder($id);
}else if($plugin == 'coupon'){
$res = wlCoupon::cancelorder($id);
}
else {
$res = pdo_update('wlmerchant_order',['status' => 5],['id' => $id]);
if($order['redpackid']){
pdo_update('wlmerchant_redpack_records',['status' => 0],['id' => $order['redpackid']]);
}
if($order['usecredit'] > 0){
if($plugin == 'halfcard'){
$pluginname = '在线买单';
}
Member::credit_update_credit1($order['mid'], $order['usecredit'], '取消'.$pluginname.'订单返还积分');
}
}
}
else {
$res = Rush::cancelorder($id);
}
if ($res) {
$this->renderSuccess('取消成功');
}
else {
$this->renderError('取消失败');
}
}
/**
* Comment: 核销订单页面
* Author: wlf
* Date: 2019/8/20 14:27
*/
public function selfUse()
{
global $_W , $_GPC;
$id = $_GPC['id'];
$plugin = $_GPC['plugin'];
//获取商品
if ($plugin == 'rush') {
$order = pdo_get('wlmerchant_rush_order' , ['id' => $id] , ['activityid' , 'optionid' , 'mid' , 'sid']);
$goods = pdo_get('wlmerchant_rush_activity' , ['id' => $order['activityid']] , ['name','appointstatus', 'thumb']);
if ($order['optionid']) {
$optionname = pdo_getcolumn(PDO_NAME . 'goods_option' , ['id' => $order['optionid']] , 'title');
}
$data['goodsName'] = $goods['name'];
$data['goodsLogo'] = tomedia($goods['thumb']);
$data['optionName'] = $optionname ? : '';
}
else {
$order = pdo_get('wlmerchant_order' , ['id' => $id] , ['fkid' , 'specid' , 'mid' , 'sid']);
if ($plugin == 'groupon') {
$goods = pdo_get('wlmerchant_groupon_activity' , ['id' => $order['fkid']] , ['name','appointstatus' , 'thumb']);
$data['goodsName'] = $goods['name'];
$data['goodsLogo'] = tomedia($goods['thumb']);
}
else if ($plugin == 'coupon') {
$goods = pdo_get('wlmerchant_couponlist' , ['id' => $order['fkid']] , [
'title' ,
'logo' ,
'sub_title'
]);
$data['goodsName'] = $goods['title'];
$data['goodsLogo'] = tomedia($goods['logo']);
$optionname = $goods['sub_title'];
}
else if ($plugin == 'wlfightgroup') {
$goods = pdo_get('wlmerchant_fightgroup_goods' , ['id' => $order['fkid']] , ['name','appointstatus' , 'logo']);
$data['goodsName'] = $goods['name'];
$data['goodsLogo'] = tomedia($goods['logo']);
}
else if ($plugin == 'bargain') {
$goods = pdo_get('wlmerchant_bargain_activity' , ['id' => $order['fkid']] , ['name','appointstatus','thumb']);
$data['goodsName'] = $goods['name'];
$data['goodsLogo'] = tomedia($goods['thumb']);
}
else if ($plugin == 'activity') {
$goods = pdo_get('wlmerchant_activitylist' , ['id' => $order['fkid']] , [
'title' ,
'thumb'
]);
$data['goodsName'] = $goods['title'];
$data['goodsLogo'] = tomedia($goods['thumb']);
}
if ($order['specid'] && $plugin != 'bargain') {
if($plugin == 'activity'){
$optionname = pdo_getcolumn(PDO_NAME . 'activity_spec' , ['id' => $order['specid']] , 'name');
}else{
$optionname = pdo_getcolumn(PDO_NAME . 'goods_option' , ['id' => $order['specid']] , 'title');
}
}
$data['optionName'] = $optionname ? : '';
}
$verkey = pdo_getcolumn(PDO_NAME . 'merchantdata' , ['id' => $order['sid']] , 'verkey');
//密码还是扫码核销
if ($_W['mid'] == $order['mid'] && !empty($verkey)) { //密码核销
$data['useStatua'] = 1;
}
if (empty($data['useStatua'])) {
$verifier = SingleMerchant::verifier($order['sid'] , $_W['mid']);
if (!$verifier) {
$this->renderError('非核销员' , ['url' => h5_url('pages/mainPages/index/index')]);
}
else {
$data['useStatua'] = 2;
}
}
//获取核销码
if($goods['appointstatus'] > 0){
$smalls = pdo_getall('wlmerchant_smallorder' , ['orderid' => $id , 'plugin' => $plugin,'status' => 1,'appointstatus' => 3,'appstarttime <' => time(),'appendtime >' => time()] , ['checkcode','status','id']);
if(empty($smalls)){
$this->renderError('订单未预约或未到预约时间' , ['url' => h5_url('pages/mainPages/index/index')]);
}
}else{
$smalls = pdo_getall('wlmerchant_smallorder' , ['orderid' => $id , 'plugin' => $plugin,'status' => 1] , ['checkcode','status','id']);
}
$data['checkcodes'] = $smalls;
$this->renderSuccess('核销详情' , $data);
}
/**
* Comment: 使用核销码
* Author: wlf
* Date: 2019/8/20 16:27
*/
public function useCheckcode()
{
global $_W , $_GPC;
$ids = $_GPC['ids'];
$ids = explode(',' , $ids);
$usestatus = $_GPC['usestatus'];
$verkey = trim($_GPC['verkey']);
if ($ids[0] > 0) {
$ordertem = pdo_get(PDO_NAME . 'smallorder' , ['id' => $ids[0]]);
if ($usestatus == 1) { //密码核销
$storeverkey = pdo_getcolumn(PDO_NAME . 'merchantdata' , ['id' => $ordertem['sid']] , 'verkey');
if ($verkey != $storeverkey || empty($storeverkey)) {
$this->renderError('核销密码错误请重试');
}
$type = 4;
}
else if ($usestatus == 2) { //扫码核销
$verifier = SingleMerchant::verifier($ordertem['sid'] , $_W['mid']);
if (!$verifier) {
$this->renderError('非核销员,无法核销');
}
$type = 2;
}
else {
$this->renderError('无效的核销方式');
}
foreach ($ids as $id) {
$order = pdo_get(PDO_NAME . 'smallorder' , ['id' => $id]);
if ($order) {
if ($order['status'] == 1) {
if ($order['plugin'] == 'rush') {
$orderres = Rush::hexiaoorder($order['orderid'] , $_W['mid'] , 1 , $type , $order['checkcode']);
}
else if ($order['plugin'] == 'groupon') {
$orderres = Groupon::hexiaoorder($order['orderid'] , $_W['mid'] , 1 , $type , $order['checkcode']);
}
else if ($order['plugin'] == 'wlfightgroup') {
$orderres = Wlfightgroup::hexiaoorder($order['orderid'] , $_W['mid'] , 1 , $type , $order['checkcode']);
}
else if ($order['plugin'] == 'bargain') {
$orderres = Bargain::hexiaoorder($order['orderid'] , $_W['mid'] , 1 , $type , $order['checkcode']);
}
else if ($order['plugin'] == 'coupon') {
$couponid = pdo_getcolumn(PDO_NAME . 'order' , ['id' => $order['orderid']] , 'recordid');
$orderres = wlCoupon::hexiaoorder($couponid , $_W['mid'] , 1 , $type , $order['checkcode']);
}else if ($order['plugin'] == 'activity') {
$orderres = Activity::hexiaoorder($order['orderid'] , $_W['mid'] , 1 , $type , $order['checkcode']);
}
}
}
}
if($orderres > 0){
$this->renderSuccess('核销成功');
}else{
$this->renderError('核销失败或部分订单异常,请刷新重试');
}
}
else {
$this->renderError('请勾选核销码' , $ids);
}
}
/**
* Comment: 确认收货
* Author: wlf
* Date: 2019/8/20 18:05
*/
public function sureReceive()
{
global $_W , $_GPC;
$id = $_GPC['id'];
$type = $_GPC['plugin'];
if (empty($id) || empty($type)) {
$this->renderError('缺少重要参数');
}
$res = Order::sureReceive($id,$type);
if($res){
$this->renderSuccess('收货成功');
}else{
$this->renderError('收货失败,请重试');
}
}
/**
* Comment: 售后服务
* Author: wlf
* Date: 2019/8/21 17:49
*/
public function afterSale()
{
global $_W , $_GPC;
$id = $_GPC['id'];
$plugin = $_GPC['plugin'];
$afterid = $_GPC['afterid'];
$data = [];
if ($plugin == 'rush') {
$order = pdo_get('wlmerchant_rush_order' , ['id' => $id] , [
'activityid' ,
'expressid' ,
'num' ,
'optionid' ,
'actualprice',
'pftorderinfo'
]);
$goods = pdo_get('wlmerchant_rush_activity' , ['id' => $order['activityid']] , [
'name' ,
'thumb',
'pftid'
]);
$data['goodName'] = $goods['name'];
$data['goodLogo'] = tomedia($goods['thumb']);
$data['type'][] = 1;
if ($order['optionid']) {
$data['optionName'] = pdo_getcolumn(PDO_NAME . 'goods_option' , ['id' => $order['optionid']] , 'title');
}
$data['allprice'] = $order['actualprice'];
}
else {
$order = pdo_get('wlmerchant_order' , ['id' => $id] , ['fkid' ,'orderno','num' , 'expressid' , 'specid' , 'price','pftorderinfo']);
if ($plugin == 'groupon') {
$goods = pdo_get('wlmerchant_groupon_activity' , ['id' => $order['fkid']] , [
'name' ,
'thumb',
'pftid'
]);
$data['goodName'] = $goods['name'];
$data['goodLogo'] = tomedia($goods['thumb']);
$data['type'][] = 1;
}
else if ($plugin == 'wlfightgroup') {
$goods = pdo_get('wlmerchant_fightgroup_goods' , ['id' => $order['fkid']] , [
'name' ,
'logo'
]);
$data['goodName'] = $goods['name'];
$data['goodLogo'] = tomedia($goods['logo']);
$data['type'][] = 1;
}
else if ($plugin == 'coupon') {
$goods = pdo_get('wlmerchant_couponlist' , ['id' => $order['fkid']] , [
'title' ,
'logo' ,
'sub_title'
]);
$data['goodName'] = $goods['title'];
$data['goodLogo'] = tomedia($goods['logo']);
$data['type'][] = 1;
$data['optionName'] = $goods['sub_title'];
}
else if ($plugin == 'bargain') {
$goods = pdo_get('wlmerchant_bargain_activity' , ['id' => $order['fkid']] , [
'name' ,
'thumb'
]);
$data['goodName'] = $goods['name'];
$data['goodLogo'] = tomedia($goods['thumb']);
$data['type'][] = 1;
}else if ($plugin == 'activity') {
$goods = pdo_get('wlmerchant_activitylist' , ['id' => $order['fkid']] , [
'title' ,
'thumb'
]);
$data['goodName'] = $goods['title'];
$data['goodLogo'] = tomedia($goods['thumb']);
$data['type'][] = 1;
}else if($plugin == 'citydelivery'){
$smallorders = pdo_fetchall("SELECT gid,num,specid FROM ".tablename('wlmerchant_delivery_order')."WHERE orderid = {$id} ORDER BY price DESC");
foreach ($smallorders as $ke => $orr){
$goods = pdo_get('wlmerchant_delivery_activity',array('id' => $orr['gid']),array('name','thumb'));
if(empty($ke)){
$data['goodLogo'] = tomedia($goods['thumb']);
}
if($ke>0){
if($orr['specid']>0){
$specname = pdo_getcolumn(PDO_NAME.'delivery_spec',array('id'=>$orr['specid']),'name');
$data['goodName'] .= ' + ['.$goods['name'].'/'.$specname.'] X'.$orr['num'];
}else{
$data['goodName'] .= ' + ['.$goods['name'].'] X'.$orr['num'];
}
}else{
if($orr['specid']>0){
$specname = pdo_getcolumn(PDO_NAME.'delivery_spec',array('id'=>$orr['specid']),'name');
$data['goodName'] .= '['.$goods['name'].'/'.$specname.'] X'.$orr['num'];
}else{
$data['goodName'] .= '['.$goods['name'].'] X'.$orr['num'];
}
}
}
}
else if ($plugin == 'housekeep') {
$goods = pdo_get('wlmerchant_housekeep_service' , ['id' => $order['fkid']] , [
'title' ,
'thumb'
]);
$data['goodName'] = $goods['title'];
$data['goodLogo'] = tomedia($goods['thumb']);
$data['type'][] = 1;
$data['usestatus'] = 2;
}
if ($order['specid'] && $plugin != 'bargain' && $plugin != 'housekeep') {
if($plugin == 'activity'){
$data['optionName'] = pdo_getcolumn(PDO_NAME . 'activity_spec' , ['id' => $order['specid']] , 'name');
}else{
$data['optionName'] = pdo_getcolumn(PDO_NAME . 'goods_option' , ['id' => $order['specid']] , 'title');
}
}
$data['allprice'] = $order['price'];
}
$data['num'] = $order['num'];
$data['checkcodes'] = pdo_fetchall("SELECT checkcode,orderprice,status,id FROM ".tablename('wlmerchant_smallorder')."WHERE orderid = {$id} AND plugin = '{$plugin}' AND status = 1 AND appointstatus IN (0,1) ORDER BY id DESC");
if (!empty($data['checkcodes'])) {
$data['usestatus'] = 1;
}
else if(!empty($order['expressid'])) {
$data['usestatus'] = 2;
}
if($plugin == 'citydelivery'){
$data['usestatus'] = 2;
$data['num'] = 0;
}
if(!empty($goods['pftid'])){
$data['usestatus'] = 3;
$pftinfo = unserialize($order['pftorderinfo']);
$pftOrderInfo = Pftapimod::pftOrderQuery($pftinfo['UUordernum']);
if(empty($pftOrderInfo['UUerrorcode'])){
$data['surplusnum'] = $pftOrderInfo['UUorigin_num'] - $pftOrderInfo['UUverified_num'] - $pftOrderInfo['UUrefund_num'];
}else{
$this->renderError('票务平台通信错误:'.$pftOrderInfo['UUerrorinfo']);
}
}
//退款提示
$ordersettings = Setting::wlsetting_read('orderset');
if(!empty($ordersettings['refundtip'])){
$data['refundtip'] = 1;
$data['tiptext'] = $ordersettings['refundtip'];
}else{
$data['refundtip'] = 0;
}
if(empty($data['usestatus'])){
$this->renderError('订单使用类型错误,请返回重试');
}
//重新申请
if (!empty($afterid)) {
$after = pdo_get('wlmerchant_aftersale' , ['id' => $afterid] , ['reason' , 'detail' , 'thumbs']);
$data['reason'] = $after['reason'];
$data['detail'] = $after['detail'];
$data['thumbs'] = unserialize($after['thumbs']);
}
$this->renderSuccess('订单信息' , $data);
}
/**
* Comment: 提交售后申请
* Author: wlf
* Date: 2019/8/22 09:41
*/
public function afterSaleApply()
{
global $_W , $_GPC;
$id = $_GPC['id'];
$plugin = $_GPC['plugin'];
$type = $_GPC['type'];
$afterid = $_GPC['afterid'] ? $_GPC['afterid'] : 0;
$usestatus = $_GPC['usestatus'];
$num = $_GPC['num'] ? : 0;
if($usestatus == 3 && empty($num)){
$this->renderSuccess('数量错误,请刷新重试');
}
if($plugin == 'citydelivery'){
$canre = pdo_getcolumn(PDO_NAME . 'aftersale' , [
'orderid' => $id ,
'plugin' => $plugin ,
'status' => 1
] , 'id');
$smallorder = pdo_get('wlmerchant_order' , ['id' => $id] , ['mid','fightstatus','makeorderno', 'sid' , 'orderno' , 'aid']);
if($smallorder['fightstatus'] == 2){
Citydelivery::cancelOrder($smallorder['makeorderno']);
}else if($smallorder['fightstatus'] == 3){
$body = ['order_id' => $smallorder['orderno'],'cancel_reason_id' => 4];
Citydelivery::postDadaApi($body,5);
}else if($smallorder['fightstatus'] == 4){
$body = ['origin_id' => $smallorder['orderno'],'reason' => $_GPC['reason']];
Citydelivery::postUUApi($body,5);
}
} else if ($usestatus == 1) {
$canre = pdo_getcolumn(PDO_NAME . 'aftersale' , [
'orderid' => $id ,
'plugin' => $plugin ,
'status' => 1
] , 'id');
$checkcodes = explode(',' , $_GPC['checkcodes']);
$smallorder = pdo_get('wlmerchant_smallorder' , ['checkcode' => $checkcodes[0]] , [
'mid' ,
'sid' ,
'orderno' ,
'aid'
]);
$checkcode = serialize($checkcodes);
}else {
$canre = pdo_getcolumn(PDO_NAME . 'aftersale' , [
'orderid' => $id ,
'plugin' => $plugin ,
'status' => [1 , 2]
] , 'id');
if ($plugin == 'rush') {
$smallorder = pdo_get('wlmerchant_rush_order' , ['id' => $id] , ['mid' , 'sid' , 'orderno' , 'aid']);
}
else {
$smallorder = pdo_get('wlmerchant_order' , ['id' => $id] , ['mid' , 'sid' , 'orderno' , 'aid','specid']);
}
}
if ($canre) $this->renderError('此订单已经申请了售后,请完成上一次售后申请后再提交');
MysqlFunction::setTrans(4);
MysqlFunction::startTrans();
$reason = $_GPC['reason'];
$detail = $_GPC['detail'];
$thumbs = serialize($_GPC['thumbs']);
$data = [
'uniacid' => $_W['uniacid'] ,
'status' => 1 ,
'mid' => $smallorder['mid'] ,
'sid' => $smallorder['sid'] ,
'aid' => $smallorder['aid'] ,
'orderno' => $smallorder['orderno'] ,
'orderid' => $id ,
'plugin' => $plugin ,
'type' => $type ,
'checkcodes' => $checkcode ,
'reason' => $reason ,
'detail' => $detail ,
'thumbs' => $thumbs ,
'createtime' => time(),
'num' => $num
];
//写入日志
$journal = [
'time' => $data['createtime'] ,
'title' => '买家发起退款申请' ,
'detail' => '申请原因:' . $data['reason'] ,
'thumbs' => $data['thumbs']
];
$data['journal'] = Order::addjournal($journal , $afterid);
if (!empty($afterid)) {
$res = pdo_update('wlmerchant_aftersale' , $data , ['id' => $afterid]);
}
else {
$res = pdo_insert('wlmerchant_aftersale' , $data);
$afterid = pdo_insertid();
}
if ($res) {
if ($usestatus == 1 && !empty($checkcodes)){
foreach ($checkcodes as $code) {
//校验核销码状态
$checkorderstatus = pdo_getcolumn(PDO_NAME.'smallorder',array('checkcode'=>$code),'status');
if($checkorderstatus != 1){
MysqlFunction::rollback();
$this->renderError('核销码['.$code.']状态错误,请刷新重试');
}
pdo_update('wlmerchant_smallorder' , ['status' => 4] , ['checkcode' => $code]);
}
}
MysqlFunction::commit();
$orderSet = Setting::wlsetting_read('orderset');
if ($orderSet['autoapplyre'] != 1) {
//未开启 自动退款申请订单 给代理商管理员发送模板消息
$first = "用户【{$_W['wlmember']['nickname']}】提交了单号为[{$smallorder['orderno']}]订单的退款申请";//消息头部
$type = "退款申请";//业务类型
$content = !empty($detail) ? $detail : $reason;//业务内容
$status = "待审核";//处理结果
$remark = "请尽快处理!";//备注信息
$time = $data['createtime'];//操作时间
//给代理商管理员发送模板消息
News::noticeAgent('refundorder' , $_W['aid'] , $first , $type , $content , $status , $remark , $time);
//给商户管理员发送模板消息
if($plugin != 'housekeep'){
News::noticeShopAdmin( $smallorder['sid'], $first , $type , $content , $status , $remark , $time);
}else{
if($smallorder['specid'] == 1){
News::noticeShopAdmin( $smallorder['sid'], $first , $type , $content , $status , $remark , $time);
}else{
$mid = pdo_getcolumn(PDO_NAME.'housekeep_artificer',array('id'=>$smallorder['sid']),'mid');
News::jobNotice($mid,$first,$type,$content,$status,$remark,$time);
}
}
}
else {
//添加计划任务自动退款
Queue::addTask(5 , $afterid , time() , $afterid);
}
$this->renderSuccess('提交成功');
}
else {
MysqlFunction::rollback();
$this->renderError('提交失败,请刷新重试');
}
}
/**
* Comment: 支付申请
* Author: zzw
* Date: 2019/9/25 14:18
*/
public function requestPay()
{
global $_W , $_GPC;
#1、参数获取
$order_no = $_GPC['order_no'] OR $this->renderError('缺少订单号');
$payType = $_GPC['pay_type'] OR $this->renderError('缺少支付方式');
$name = $_GPC['name'];//商品名称
$blendflag = $_GPC['blendflag'];//混合支付标识
//修改支付配置信息与分账信息
if($_W['wlsetting']['cashset']['allocationtype'] == 1 && $payType == 2){
$paylog = pdo_fetch("SELECT plugin,payfor FROM".tablename(PDO_NAME.'paylogvfour') ." WHERE tid = {$order_no} ");
if($paylog['plugin'] == 'Rush'){
$sid = pdo_getcolumn(PDO_NAME."rush_order",['orderno'=>$order_no],'sid');
$storeinfo = pdo_get('wlmerchant_merchantdata',array('id' => $sid),array('wxallid','appallid'));
if($_W['source'] == 1){
$paysetid = $storeinfo['wxallid'];
}else if($_W['source'] == 3){
$paysetid = $storeinfo['appallid'];
}
if($paysetid > 0){
pdo_update(PDO_NAME.'rush_order',array('paysetid' => $paysetid,'allocationtype' => 1),array('orderno' => $order_no));
}
}else if($paylog['plugin'] == 'Halfcard' && $paylog['payfor'] == 'Halfcard'){
$aid = pdo_getcolumn(PDO_NAME."halfcard_record",['orderno'=>$order_no],'aid');
$agentinfo = pdo_get('wlmerchant_agentusers',array('id' => $aid),array('wxpaysetid','apppaysetid'));
if($_W['source'] == 1){
$paysetid = $agentinfo['wxpaysetid'];
}else if($_W['source'] == 3){
$paysetid = $agentinfo['apppaysetid'];
}
if($paysetid > 0){
pdo_update(PDO_NAME.'rush_order',array('paysetid' => $paysetid,'allocationtype' => 1),array('orderno' => $order_no));
}
}else{
$paysetinfo = pdo_get(PDO_NAME."order",['orderno' => $order_no],array('sid','aid'));
$sid = $paysetinfo['sid'];
$aid = $paysetinfo['aid'];
if(empty($sid) || $paylog['payfor'] == 'Charge'){
$agentinfo = pdo_get('wlmerchant_agentusers',array('id' => $aid),array('wxpaysetid','apppaysetid'));
if($_W['source'] == 1){
$paysetid = $agentinfo['wxpaysetid'];
}else if($_W['source'] == 3){
$paysetid = $agentinfo['apppaysetid'];
}
if($paysetid > 0){
pdo_update(PDO_NAME.'rush_order',array('paysetid' => $paysetid,'allocationtype' => 1),array('orderno' => $order_no));
}
}else{
$storeinfo = pdo_get('wlmerchant_merchantdata',array('id' => $sid),array('wxallid','appallid'));
if($_W['source'] == 1 || $_W['source'] == 2){
$paysetid = $storeinfo['wxallid'];
}else if($_W['source'] == 3){
$paysetid = $storeinfo['appallid'];
}
}
if($paysetid > 0){
pdo_update(PDO_NAME.'order',array('paysetid' => $paysetid,'allocationtype' => 1),array('orderno' => $order_no));
}
}
}
#2、请求获取支付的信息
$res = Payment::init($order_no , $payType , $name , $_W['source'],$blendflag);
#3、返回支付需要的信息
$paylog = pdo_get('wlmerchant_paylogvfour' , ['tid' => $order_no,'module' => 'weliam_smartcity'] , ['plugin' , 'uniacid' , 'mid']);
if($payType != 1){
if ($paylog['uniacid'] != $_W['uniacid'] || empty($paylog['uniacid']) ) {
$this->renderError('订单公众号错误,请返回订单列表重新进入支付页面');
}
if ($paylog['mid'] != $_W['mid'] || empty($paylog['mid']) ) {
$this->renderError('订单用户错误,请返回订单列表重新进入支付页面');
}
}
$type = strtolower($paylog['plugin']);
if ($type == 'pocket' && $payType != 3) {
$res['tieziid'] = pdo_getcolumn(PDO_NAME . 'order' , ['orderno' => $order_no] , 'fkid');
}
$this->renderSuccess('支付信息' , $res);
}
/**
* Comment: 获取订单物流信息
* Author: zzw
* Date: 2019/10/8 14:34
*/
public function getLogisticsInfo()
{
global $_W , $_GPC;
#1、参数获取
$id = intval($_GPC['id']) OR $this->renderError("缺少参数:订单id");
$tableType = $_GPC['table'] OR $this->renderError('缺少参数:表类型');//a=order b=rush_order
#2、获取订单信息
if ($tableType == 'a') {
$info = pdo_fetch("SELECT '0' as is_have,expressid,plugin,fkid as gid,specid,num FROM " . tablename(PDO_NAME . 'order') . " WHERE id = {$id} ");
}
else {
$info = pdo_fetch("SELECT '0' as is_have,expressid,activityid as gid,'rush' as plugin,optionid as specid,num FROM " . tablename(PDO_NAME . "rush_order") . " WHERE id = {$id} ");
}
if ($info['expressid'] <= 0) $this->renderError('当前订单暂无物流信息');
#3、获取商品信息
switch ($info['plugin']) {
case 'rush':
$goods = pdo_get(PDO_NAME . "rush_activity" , ['id' => $info['gid']] , ['name' , 'thumb']);
$info['goods_name'] = $goods['name'];
$info['goods_logo'] = tomedia($goods['thumb']);
break;//抢购
case 'consumption':
$goods = pdo_get(PDO_NAME . "consumption_goods" , ['id' => $info['gid']] , [
'title' ,
'thumb'
]);
$info['goods_name'] = $goods['title'];
$info['goods_logo'] = tomedia($goods['thumb']);
break;//积分
case 'bargain':
$goods = pdo_get(PDO_NAME . "bargain_activity" , ['id' => $info['gid']] , [
'name' ,
'thumb'
]);
$info['goods_name'] = $goods['name'];
$info['goods_logo'] = tomedia($goods['thumb']);
break;//砍价
case 'groupon':
$goods = pdo_get(PDO_NAME . "groupon_activity" , ['id' => $info['gid']] , [
'name' ,
'thumb'
]);
$info['goods_name'] = $goods['name'];
$info['goods_logo'] = tomedia($goods['thumb']);
break;//团购
case 'wlfightgroup':
$goods = pdo_get(PDO_NAME . "fightgroup_goods" , ['id' => $info['gid']] , [
'name' ,
'logo'
]);
$info['goods_name'] = $goods['name'];
$info['goods_logo'] = tomedia($goods['logo']);
break;//拼团
}
#4、获取商品规格信息
if ($info['specid'] > 0) $specname = pdo_getcolumn(PDO_NAME . "goods_option" , ['id' => $info['specid']] , 'title');
$info['spec'] = $specname ? : '';
#5、物流信息获取
if ($info['expressid'] > 0) {
//物流跟踪信息
$logisticsInfo = Logistics::orderLogisticsInfo($info['expressid']);
if ($logisticsInfo['Traces']) {
$info['is_have'] = 1;
//将物流信息倒叙
$info['list'] = array_reverse($logisticsInfo['Traces']);
}
//物流公司、物流单号信息
$express = pdo_get(PDO_NAME . "express" , ['id' => $info['expressid']] , [
'expressname' ,
'expresssn'
]);
$info['express_name'] = Logistics::codeComparisonTable($express['expressname'] , 'alias')['name'];
$info['express_no'] = $express['expresssn'];
}
unset($info['specid']);
unset($info['plugin']);
unset($info['gid']);
unset($info['expressid']);
$this->renderSuccess('物流信息' , $info);
}
/**
* Comment: 获取快递公司列表
* Author: wlf
* Date: 2019/10/10 17:07
*/
public function getComparisonTable()
{
global $_W;
$express_list = Logistics::codeComparisonTable('' , 0 , true);
$this->renderSuccess('快递公司列表' , $express_list);
}
/**
* Comment: 手机端发货接口
* Author: wlf
* Date: 2019/10/10 17:11
*/
public function sendGoods()
{
global $_W , $_GPC;
$id = $_GPC['orderid'];
$alias = $_GPC['alias'];
$expresssn = $_GPC['expresssn'];
$ordertype = $_GPC['ordertype'];
$edit_flag = $_GPC['edit_flag'];
$expressname = $_GPC['expressname'];
if (empty($alias) && !empty($expresssn)) {
$this->renderError('请填写物流单号');
}
$settings = Setting::wlsetting_read('orderset');
if ($ordertype == 'a') {
$order = pdo_fetch("SELECT a.expressid,a.plugin,a.orderno,a.mid,
CASE a.`plugin`
WHEN 'consumption' THEN (SELECT `title` FROM " . tablename(PDO_NAME . 'consumption_goods') . " WHERE `id` = a.`fkid`)
WHEN 'bargain' THEN (SELECT `name` FROM " . tablename(PDO_NAME . 'bargain_activity') . " WHERE `id` = a.`fkid` )
WHEN 'groupon' THEN (SELECT `name` FROM " . tablename(PDO_NAME . 'groupon_activity') . " WHERE `id` = a.`fkid` )
WHEN 'wlfightgroup' THEN (SELECT name FROM " . tablename(PDO_NAME . 'fightgroup_goods') . " WHERE `id` = a.`fkid`)
END as name FROM " . tablename(PDO_NAME . 'order') . " as a WHERE a.id = {$id} ");
}
else {
$order = pdo_fetch("SELECT a.expressid,b.name,'rush' as plugin,a.orderno,a.mid FROM " . tablename(PDO_NAME . "rush_order") . " as a LEFT JOIN " . tablename(PDO_NAME . "rush_activity") . " as b ON a.activityid = b.id WHERE a.id = {$id} ");
}
$expressid = $order['expressid'];
if (empty($expressid)) {
$this->renderError('无收货地址,无法发货!');
}
$express = pdo_get(PDO_NAME . 'express' , ['id' => $expressid]);
$res = pdo_update('wlmerchant_express' , [
'expressname' => $alias ,
'expresssn' => $expresssn ,
'orderid' => $id ,
'sendtime' => time()
] , ['id' => $expressid]);
if ($res) {
if ($ordertype == 'a') {
$res = pdo_update('wlmerchant_order' , ['status' => 4] , ['id' => $id]);
if ($settings['receipt'] > 0) {
if ($edit_flag) {
pdo_delete('wlmerchant_waittask' , ['important' => $id , 'key' => 6 , 'status' => 0]);
}
$receipttime = time() + $settings['receipt'] * 24 * 3600;
$task = [
'type' => 'order' ,
'orderid' => $id
];
$task = serialize($task);
Queue::addTask(6 , $task , $receipttime , $id);
}
}
else {
$res = pdo_update('wlmerchant_rush_order' , ['status' => 4] , ['id' => $id]);
if ($settings['receipt'] > 0) {
if ($edit_flag) {
pdo_delete('wlmerchant_waittask' , ['important' => $id , 'key' => 6 , 'status' => 0]);
}
$receipttime = time() + $settings['receipt'] * 24 * 3600;
$task = [
'type' => 'rush' ,
'orderid' => $id
];
$task = serialize($task);
Queue::addTask(6 , $task , $receipttime , $id);
}
}
/***模板通知***/
$url = h5_url('pages/subPages/orderList/orderDetails/orderDetails' , [
'orderid' => $id ,
'plugin' => $order['plugin']
]);
$modelData = [
'first' => '您购买的商品已发货,请注意查收!' ,
'order_no' => $order['orderno'] ,//订单编号
'express_name' => $expressname ,//物流公司
'express_no' => $expresssn ,//物流单号
'goods_name' => $order['name'] ,//商品信息
'consignee' => $express['name'] ,//收货人
'receiving_address' => $express['address'] ,//收货地址
'remark' => '点击查看物流详细信息!'
];
TempModel::sendInit('send' , $order['mid'] , $modelData , $_W['source'] , $url);
$this->renderSuccess('发货成功');
}
else {
$this->renderError('发货失败请重试');
}
}
/**
* Comment: 售后列表接口
* Author: wlf
* Date: 2019/11/21 09:47
*/
public function saleAfterList()
{
global $_W , $_GPC;
$pindex = $_GPC['pindex'] ? $_GPC['pindex'] : 1;
$pageStart = $pindex * 10 - 10;
$status = $_GPC['status'];
$where = " WHERE uniacid = {$_W['uniacid']} AND mid = {$_W['mid']} ";
if ($status == 1) {
$where .= " AND status = 1 ";
}
else if ($status == 2) {
$where .= " AND status IN (2,3) ";
}
$list = pdo_fetchall("SELECT id,orderno,orderid,plugin,status FROM " . tablename(PDO_NAME . "aftersale") . $where . " ORDER BY createtime DESC LIMIT {$pageStart},10 ");
$total = pdo_fetchcolumn("SELECT count(id) FROM " . tablename(PDO_NAME . "aftersale") . $where);
if ($list) {
foreach ($list as &$li) {
if ($li['plugin'] == 'rush') {
$order = pdo_get('wlmerchant_rush_order' , ['id' => $li['orderid']] , [
'activityid' ,
'num' ,
'optionid' ,
'price'
]);
$goods = pdo_get('wlmerchant_rush_activity' , ['id' => $order['activityid']] , [
'name' ,
'thumb'
]);
$li['price'] = sprintf("%.2f" , $order['price'] / $order['num']);
}
else if ($li['plugin'] == 'groupon') {
$order = pdo_get('wlmerchant_order' , ['id' => $li['orderid']] , [
'fkid' ,
'num' ,
'specid' ,
'goodsprice'
]);
$goods = pdo_get('wlmerchant_groupon_activity' , ['id' => $order['fkid']] , [
'name' ,
'thumb'
]);
$li['price'] = sprintf("%.2f" , $order['goodsprice'] / $order['num']);
$order['optionid'] = $order['specid'];
}
else if ($li['plugin'] == 'wlfightgroup') {
$order = pdo_get('wlmerchant_order' , ['id' => $li['orderid']] , [
'fkid' ,
'num' ,
'specid' ,
'goodsprice'
]);
$goods = pdo_get('wlmerchant_fightgroup_goods' , ['id' => $order['fkid']] , [
'name' ,
'logo'
]);
$li['price'] = sprintf("%.2f" , $order['goodsprice'] / $order['num']);
$order['optionid'] = $order['specid'];
$goods['thumb'] = $goods['logo'];
}
else if ($li['plugin'] == 'activity') {
$order = pdo_get('wlmerchant_order' , ['id' => $li['orderid']] , [
'fkid' ,
'num' ,
'specid' ,
'goodsprice'
]);
$goods = pdo_get('wlmerchant_activitylist' , ['id' => $order['fkid']] , [
'title' ,
'thumb'
]);
$li['price'] = sprintf("%.2f" , $order['goodsprice'] / $order['num']);
$goods['name'] = $goods['title'];
$order['optionid'] = $order['specid'];
$goods['thumb'] = $goods['thumb'];
}
else if ($li['plugin'] == 'bargain') {
$order = pdo_get('wlmerchant_order' , ['id' => $li['orderid']] , [
'fkid' ,
'num' ,
'specid' ,
'goodsprice'
]);
$goods = pdo_get('wlmerchant_bargain_activity' , ['id' => $order['fkid']] , [
'name' ,
'thumb'
]);
$li['price'] = sprintf("%.2f" , $order['goodsprice'] / $order['num']);
}
else if ($li['plugin'] == 'coupon' || $li['plugin'] == 'wlcoupon') {
$order = pdo_get('wlmerchant_order' , ['id' => $li['orderid']] , [
'fkid' ,
'num' ,
'specid' ,
'goodsprice'
]);
$goods = pdo_get('wlmerchant_couponlist' , ['id' => $order['fkid']] , ['title' , 'logo']);
$goods['name'] = $goods['title'];
$goods['thumb'] = $goods['logo'];
$li['price'] = sprintf("%.2f" , $order['goodsprice'] / $order['num']);
}else if($li['plugin'] == 'citydelivery'){
$order = pdo_get('wlmerchant_order' , ['id' => $li['orderid']] , ['price']);
$order['num'] = 0;
$smallorders = pdo_fetchall("SELECT gid,num,specid FROM ".tablename('wlmerchant_delivery_order')." WHERE orderid = {$li['orderid']} ORDER BY price DESC");
foreach ($smallorders as $ke => $orr){
$good = pdo_get('wlmerchant_delivery_activity',array('id' => $orr['gid']),array('name','thumb'));
if(empty($ke)){
$goods['thumb'] = tomedia($good['thumb']);
}
if($ke>0){
if($orr['specid']>0){
$specname = pdo_getcolumn(PDO_NAME.'delivery_spec',array('id'=>$orr['specid']),'name');
$goods['name'] .= ' + ['.$good['name'].'/'.$specname.'] X'.$orr['num'];
}else{
$goods['name'] .= ' + ['.$good['name'].'] X'.$orr['num'];
}
}else{
if($orr['specid']>0){
$specname = pdo_getcolumn(PDO_NAME.'delivery_spec',array('id'=>$orr['specid']),'name');
$goods['name'] .= '['.$good['name'].'/'.$specname.'] X'.$orr['num'];
}else{
$goods['name'] .= '['.$good['name'].'] X'.$orr['num'];
}
}
}
$li['price'] = $order['price'];
}
$li['goodsname'] = $goods['name'];
$li['goodsthumb'] = tomedia($goods['thumb']);
$li['num'] = $order['num'];
if ($order['optionid']) {
if($li['plugin'] == 'activity'){
$li['optionname'] = pdo_getcolumn(PDO_NAME . 'activity_spec' , ['id' => $order['optionid']] , 'name');
}else{
$li['optionname'] = pdo_getcolumn(PDO_NAME . 'goods_option' , ['id' => $order['optionid']] , 'title');
}
}
else {
$li['optionname'] = '';
}
}
$data['total'] = ceil($total / 10);
$data['list'] = $list;
$this->renderSuccess('售后列表' , $data);
}
else {
$data['total'] = 0;
$data['list'] = [];
$this->renderSuccess('无数据' , $data);
}
}
/**
* Comment: 撤销申请接口
* Author: wlf
* Date: 2019/11/21 11:11
*/
public function revokeSaleAfter()
{
global $_W , $_GPC;
$id = $_GPC['id'];
$after = pdo_get('wlmerchant_aftersale' , ['id' => $id] , ['type' , 'checkcodes']);
$checkcodes = unserialize($after['checkcodes']);
if ($after['type'] == 1) { //退款
if (!empty($checkcodes[0])) {
$res = pdo_update('wlmerchant_smallorder' , ['status' => 1] , ['checkcode' => $checkcodes]);
}
else {
$res = 1;
}
}
if ($res) {
pdo_delete('wlmerchant_aftersale' , ['id' => $id]);
$this->renderSuccess('撤销成功');
}
else {
$this->renderError('撤销失败,请刷新重试');
}
}
/**
* Comment: 售后详情页面
* Author: wlf
* Date: 2019/11/21 11:45
*/
public function saleAfterDetail()
{
global $_W , $_GPC;
$id = $_GPC['id'];
if (empty($id)) {
$this->renderError('无关键参数:id,请返回重新进入');
}
$after = pdo_get('wlmerchant_aftersale' , ['id' => $id]);
if (empty($after)) {
$this->renderError('此申请已撤销,无法查看');
}
$data = [];
$data['status'] = $after['status'];
$data['type'] = $after['type'];
if ($after['plugin'] == 'rush') {
$order = pdo_get('wlmerchant_rush_order' , ['id' => $after['orderid']] , [
'activityid' ,
'actualprice' ,
'num' ,
'optionid' ,
'price'
]);
$goods = pdo_get('wlmerchant_rush_activity' , ['id' => $order['activityid']] , ['name' , 'thumb']);
$data['price'] = sprintf("%.2f" , $order['price'] / $order['num']);
$order['price'] = $order['actualprice'];
}
else if ($after['plugin'] == 'groupon') {
$order = pdo_get('wlmerchant_order' , ['id' => $after['orderid']] , [
'fkid' ,
'num' ,
'specid' ,
'price' ,
'goodsprice'
]);
$goods = pdo_get('wlmerchant_groupon_activity' , ['id' => $order['fkid']] , ['name' , 'thumb']);
$data['price'] = sprintf("%.2f" , $order['goodsprice'] / $order['num']);
$order['optionid'] = $order['specid'];
}
else if ($after['plugin'] == 'wlfightgroup') {
$order = pdo_get('wlmerchant_order' , ['id' => $after['orderid']] , [
'fkid' ,
'num' ,
'price' ,
'specid' ,
'goodsprice'
]);
$goods = pdo_get('wlmerchant_fightgroup_goods' , ['id' => $order['fkid']] , ['name' , 'logo']);
$data['price'] = sprintf("%.2f" , $order['goodsprice'] / $order['num']);
$order['optionid'] = $order['specid'];
$goods['thumb'] = $goods['logo'];
}
else if ($after['plugin'] == 'activity') {
$order = pdo_get('wlmerchant_order' , ['id' => $after['orderid']] , [
'fkid' ,
'num' ,
'price' ,
'specid' ,
'goodsprice'
]);
$goods = pdo_get('wlmerchant_activitylist' , ['id' => $order['fkid']] , ['title' , 'thumb']);
$goods['name'] = $goods['title'];
$data['price'] = sprintf("%.2f" , $order['goodsprice'] / $order['num']);
$order['optionid'] = $order['specid'];
}
else if ($after['plugin'] == 'bargain') {
$order = pdo_get('wlmerchant_order' , ['id' => $after['orderid']] , [
'fkid' ,
'num' ,
'price' ,
'specid' ,
'goodsprice'
]);
$goods = pdo_get('wlmerchant_bargain_activity' , ['id' => $order['fkid']] , ['name' , 'thumb']);
$data['price'] = sprintf("%.2f" , $order['goodsprice'] / $order['num']);
}else if ($after['plugin'] == 'citydelivery'){
$order = pdo_get('wlmerchant_order' , ['id' => $after['orderid']] , [
'num' ,
'price' ,
'specid' ,
'goodsprice',
'fightstatus'
]);
if($order['fightstatus'] == 2 || $order['fightstatus'] == 3){
$data['hiderevoke'] = 1;
}else{
$data['hiderevoke'] = 0;
}
$smallorders = pdo_fetchall("SELECT id,gid,num,specid FROM ".tablename('wlmerchant_delivery_order')." WHERE orderid = {$after['orderid']} ORDER BY price DESC");
foreach ($smallorders as $ke => $orr){
$good = pdo_get('wlmerchant_delivery_activity',array('id' => $orr['gid']),array('name','thumb'));
if(empty($ke)){
$goods['thumb'] = tomedia($good['thumb']);
}
if($ke>0){
if($orr['specid']>0){
$specname = pdo_getcolumn(PDO_NAME.'delivery_spec',array('id'=>$orr['specid']),'name');
$goods['name'] .= ' + ['.$good['name'].'/'.$specname.'] X'.$orr['num'];
}else{
$goods['name'] .= ' + ['.$good['name'].'] X'.$orr['num'];
}
}else{
if($orr['specid']>0){
$specname = pdo_getcolumn(PDO_NAME.'delivery_spec',array('id'=>$orr['specid']),'name');
$goods['name'] .= '['.$good['name'].'/'.$specname.'] X'.$orr['num'];
}else{
$goods['name'] .= '['.$good['name'].'] X'.$orr['num'];
}
}
}
$order['num'] = 0;
$data['price'] = $order['price'];
}
$data['goodsname'] = $goods['name'];
$data['goodsthumb'] = tomedia($goods['thumb']);
$data['num'] = $order['num'];
if ($order['optionid']) {
if($after['plugin'] == 'activity'){
$data['optionname'] = pdo_getcolumn(PDO_NAME . 'activity_spec' , ['id' => $order['optionid']] , 'name');
}else {
$data['optionname'] = pdo_getcolumn(PDO_NAME . 'goods_option', ['id' => $order['optionid']], 'title');
}
} else {
$data['optionname'] = '';
}
if ($after['type'] == 1) {
$checks = unserialize($after['checkcodes']);
if (!empty($checks[0])) {
$data['refundmoney'] = pdo_getcolumn('wlmerchant_smallorder' , ['checkcode' => $checks] , ["SUM(orderprice)"]);
}
else {
$data['refundmoney'] = $order['price'];
}
}
//处理日志
$journal = unserialize($after['journal']);
if (!empty($journal)) {
foreach ($journal as &$jour) {
$jour = unserialize($jour);
$jour['thumbs'] = unserialize($jour['thumbs']);
if (!empty($jour['thumbs'])) {
$jour['thumbs'] = explode(',' , $jour['thumbs']);
}
else {
$jour['thumbs'] = [];
}
$jour['ascflag'] = $jour['time'];
$jour['time'] = date('Y-m-d H:i:s' , $jour['time']);
if(!empty($jour['thumbs'])){
foreach ($jour['thumbs'] as &$th){
$th = tomedia($th);
}
}
}
$flag = [];
foreach ($journal as $v) {
$flag[] = $v['ascflag'];
}
array_multisort($flag , SORT_DESC , $journal);
}
$data['journal'] = $journal;
$this->renderSuccess('售后详情' , $data);
}
/**
* Comment: 计算提现手续费与实获金额
* Author: wlf
* Date: 2020/04/09 17:02
*/
public function calculationCash(){
global $_W , $_GPC;
$applymoney = $_GPC['money'];
$spercent = $_GPC['percent'];
$spercentmoney = sprintf("%.2f", $applymoney * $spercent / 100);
$money = sprintf("%.2f", $applymoney - $spercentmoney);
$data['realmoney'] = $money;
$this->renderSuccess('实获金额' ,$data);
}
/**
* Comment: 同城配送的订单获取
* Author: wlf
* Date: 2020/04/13 10:24
*/
public function deliveryOrderSubmit(){
global $_W , $_GPC;
//参数获取
$data = [];
$goodsinfo = json_decode(base64_decode($_GPC['goodsinfo']) , true);
$addressid = $_GPC['addressid'];
$usestatus = $_GPC['type']; //配送方式 0到店自提 1商家配送 2平台配送
$sid = $_GPC['sid'];
//快递信息
if ($addressid>0) {
$address = pdo_get('wlmerchant_address' , ['id' => $addressid] , ['id','name' ,'status','tel','province','city','county','detailed_address','lng','lat']);
}else{
$address = pdo_get('wlmerchant_address' , ['mid' => $_W['mid'] , 'uniacid' => $_W['uniacid'] , 'status' => 1] , ['id' , 'status' , 'name' , 'tel' , 'province' , 'city' , 'county' , 'detailed_address','lng','lat']);
$addressid = $address['id'];
}
//商品信息获取
if((empty($goodsinfo) || !is_array($goodsinfo)) && empty($sid) ){
$this->renderError('商品信息错误,请返回重试');
}else{
if(empty($goodsinfo) || !is_array($goodsinfo)){
$storeinfo['sid'] = $sid;
$storeinfo['cartid'] = pdo_getall('wlmerchant_delivery_shopcart',array('mid' => $_W['mid'],'sid' => $sid),array('id'));
foreach ($storeinfo['cartid'] as $cart){
$infoarray[] = $cart['id'];
}
$storeinfo['cartid'] = $infoarray;
$goodsinfo[] = $storeinfo;
}
$halfflag = WeliamWeChat::VipVerification($_W['mid'],true);
$goodallmoney = $deliveryallmoney = $alldiscount = $fulldiscount = $packingmoney = 0;
foreach ($goodsinfo as $ke => $store){
$storearray = pdo_get(PDO_NAME.'merchantdata',array('id'=>$store['sid']),array('lng','lat','deliveryfullid','makebiguser','deliverytype','storename','expresspricestatus','deliverymoney','deliverydistance','lowdeliverymoney'));
//判断支付方式
if($ke == 0){
$deliverytype = unserialize($storearray['deliverytype']);
$data['statistics']['use_store'] = in_array('store',$deliverytype) ? 1 : 0;
$data['statistics']['use_make'] = in_array('make',$deliverytype) ? 1 : 0;
$data['statistics']['use_own'] = in_array('own',$deliverytype) ? 1 : 0;
}
unset($storearray['deliverytype']);
$storearray['allmoney'] = 0;
$storearray['vipdiscount'] = 0;
$storearray['packingmoney'] = 0;
$storearray['sid'] = $store['sid'];
if($usestatus == 0 || ($usestatus == 2 && empty($storearray['expresspricestatus']) )){
$storearray['deliverymoney'] = 0;
}else{
$storearray['distance'] = Store::getdistance($address['lng'],$address['lat'],$storearray['lng'],$storearray['lat'],true);
if($storearray['distance'] > 9999998){
$storearray['distance'] = 0;
}
}
foreach ($store['cartid'] as $good){
$good = pdo_get('wlmerchant_delivery_shopcart',array('id' => $good),array('goodid','num','specid'));
$goodinfo = pdo_get('wlmerchant_delivery_activity',array('id' => $good['goodid']),array('name','price','deliveryprice','thumb','vipstatus','vipdiscount','optionstatus'));
$goodarray['name'] = $goodinfo['name'];
$goodarray['thumb'] = tomedia($goodinfo['thumb']);
$goodarray['price'] = $goodinfo['price'];
$goodarray['deliveryprice'] = $goodinfo['deliveryprice'];
$goodarray['num'] = $good['num'];
//规格
if($goodinfo['optionstatus']){
$specarray = pdo_get('wlmerchant_delivery_spec',array('id' => $good['specid']),array('name','price','oldprice'));
$goodarray['price'] = $specarray['price'];
$goodarray['specname'] = $specarray['name'];
}
//会员
if($goodinfo['vipstatus'] == 1 && $halfflag){
$goodarray['vipdiscount'] = $goodinfo['vipdiscount'];
}else{
$goodarray['vipdiscount'] = 0;
}
//计算包装费
if($usestatus>0){
$storearray['packingmoney'] = sprintf("%.2f",$storearray['packingmoney'] + $goodinfo['deliveryprice']*$goodarray['num']);
}else{
$storearray['packingmoney'] = 0;
}
//计算小计信息
$storearray['vipdiscount'] = sprintf("%.2f",$storearray['vipdiscount'] + $goodarray['vipdiscount'] * $goodarray['num']);
$storearray['allmoney'] = sprintf("%.2f",$storearray['allmoney'] + $goodarray['price'] * $goodarray['num']);
$goodallmoney += sprintf("%.2f",$goodarray['price'] * $goodarray['num']);
$storearray['goodlist'][] = $goodarray;
}
//平台配送
if($usestatus == 2 && empty($storearray['expresspricestatus'])){
$big = $storearray['makebiguser'] > 0 ? $store['sid'] : 0;
$makePrice = Citydelivery::getMakePrice($store['sid'],$addressid,$big);
$storearray['deliverymoney'] = $makePrice['total_price'];
$storearray['distance'] = $makePrice['distance'].'km';
$storearray['init'] = $makePrice['init'];
$storearray['premium'] = $makePrice['premium'];
$storearray['night_price'] = $makePrice['night_price'];
$storearray['mileage_price'] = $makePrice['mileage_price'];
unset($storearray['makebiguser']);
}
if($storearray['deliveryfullid']>0){
$storearray['fulldkmoney'] = Fullreduce::getFullreduceMoney(sprintf("%.2f" , $storearray['allmoney'] - $storearray['vipdiscount']),$storearray['deliveryfullid']);
}else{
$storearray['fulldkmoney'] = 0;
}
$storearray['allmoney'] = sprintf("%.2f",$storearray['allmoney'] + $storearray['packingmoney'] + $storearray['deliverymoney'] - $storearray['vipdiscount'] - $storearray['fulldkmoney']);
//计算总计信息
$deliveryallmoney += $storearray['deliverymoney'];
$alldiscount += $storearray['vipdiscount'];
$fulldiscount += $storearray['fulldkmoney'];
$packingmoney += $storearray['packingmoney'];
$list[] = $storearray;
}
}
$data['list'] = $list;
$data['statistics']['goodallmoney'] = sprintf("%.2f",$goodallmoney);
$data['statistics']['deliveryprice'] = sprintf("%.2f",$deliveryallmoney);
$data['statistics']['vipdiscount'] = sprintf("%.2f",$alldiscount);
$data['statistics']['fulldiscount'] = sprintf("%.2f",$fulldiscount);
$data['statistics']['packingmoney'] = sprintf("%.2f",$packingmoney);
$data['statistics']['toatlprice'] = sprintf("%.2f",$data['statistics']['goodallmoney'] + $data['statistics']['packingmoney'] + $data['statistics']['deliveryprice'] - $data['statistics']['vipdiscount'] - $data['statistics']['fulldiscount']);
if (empty($address)){
$address = pdo_get('wlmerchant_address' , ['mid' => $_W['mid'] , 'uniacid' => $_W['uniacid']] , ['id' , 'name' , 'status' , 'tel' , 'province' , 'city' , 'county' , 'detailed_address']);
if ($address) {
pdo_update('wlmerchant_address' , ['status' => 1] , ['id' => $address['id']]);
}else{
$address = [];
}
}
$data['address'] = $address;
//提货信息
$member = pdo_get('wlmerchant_member',array('id' => $_W['mid']),array('realname','nickname','mobile'));
$data['thinfo']['thname'] = $member['realname']?$member['realname']:$member['nickname'];
$data['thinfo']['thmobile'] = $member['mobile'];
$this->renderSuccess('提交订单',$data);
}
/**
* Comment: 同城配送创建订单
* Author: wlf
* Date: 2020/04/13 14:53
*/
public function createDeliveryOrder(){
global $_W , $_GPC;
//参数获取
$goodsinfo = json_decode(base64_decode($_GPC['goodsinfo']),true);
$addressid = $_GPC['addressid']; //地址信息
$username = trim($_GPC['thname']); //提货人姓名
$mobile = trim($_GPC['thmobile']); //提货人电话
$type = $_GPC['buytype']; //配送方式 0到店自提 1商家配送 2平台配送
$sid = $_GPC['sid'];
$remark = trim($_GPC['remark']);
//获取位置信息
if($type > 0){
$address = pdo_get('wlmerchant_address' , ['id' => $addressid] , ['lng','lat']);
if(empty($address['lng']) || empty($address['lat'])){
$this->renderError('配送地址无定位信息,请添加');
}
}
//商品信息获取
if((empty($goodsinfo) || !is_array($goodsinfo)) && empty($sid)){
$this->renderError('订单信息错误,请返回重试');
}else{
MysqlFunction::setTrans(4);
MysqlFunction::startTrans();
if(empty($goodsinfo) || !is_array($goodsinfo)){
$storeinfo['sid'] = $sid;
$storeinfo['cartid'] = pdo_getall('wlmerchant_delivery_shopcart',array('mid' => $_W['mid'],'sid' => $sid),array('id'));
foreach ($storeinfo['cartid'] as $cart){
$infoarray[] = $cart['id'];
}
$storeinfo['cartid'] = $infoarray;
$storeinfo['remark'] = $remark;
$goodsinfo[] = $storeinfo;
}
$halfflag = WeliamWeChat::VipVerification($_W['mid'],true);
$settings = Setting::wlsetting_read('orderset'); //获取设置参数
$ordersid = [];
foreach ($goodsinfo as $store){
$num = 0;
$goodallmoney = $alldiscount = $packingmoney = $prices = 0;
$storearray = pdo_get(PDO_NAME.'merchantdata',array('id'=>$store['sid']),array('deliverymoney','deliveryfullid','expresspricestatus','deliverytype','makebiguser','lat','lng','storename','deliverydistance','lowdeliverymoney'));
$deliveryallmoney = $storearray['deliverymoney'];
$storearray['packingmoney'] = 0;
$smallorderid = [];
//判断是否能使用选择的配送方式
$deliverytype = unserialize($storearray['deliverytype']);
if($type == 0 && !in_array('own',$deliverytype)){
MysqlFunction::rollback();
$this->renderError('商户['.$storearray['storename'].']不支持到店自提,请单独结算支付');
}
if($type == 1 && !in_array('store',$deliverytype)){
MysqlFunction::rollback();
$this->renderError('商户['.$storearray['storename'].']不支持商户配送,请单独结算支付');
}
if($type == 2 && !in_array('make',$deliverytype)){
MysqlFunction::rollback();
$this->renderError('商户['.$storearray['storename'].']不支持平台配送,请单独结算支付');
}
unset($storearray['deliverytype']);
foreach ($store['cartid'] as $goodid){
$good = pdo_get('wlmerchant_delivery_shopcart',array('id' => $goodid),array('goodid','num','specid'));
$goodinfo = pdo_get('wlmerchant_delivery_activity',array('id' => $good['goodid']),array('name','sid','allstock','daystock','uniacid','aid','price','deliveryprice','vipstatus','vipdiscount','optionstatus'));
$goodarray['price'] = $goodinfo['price'];
//规格
if($goodinfo['optionstatus']){
$specarray = pdo_get('wlmerchant_delivery_spec',array('id' => $good['specid']),array('name','allstock','daystock','price','oldprice'));
$goodarray['price'] = $specarray['price'];
$goodarray['specname'] = $specarray['name'];
$goodinfo['allstock'] = $specarray['allstock'];
$goodinfo['daystock'] = $specarray['daystock'];
$goodinfo['name'] .= '/'.$specarray['name'];
}
//判断库存
if($goodinfo['allstock'] > 0){
$allsalenum = pdo_getcolumn('wlmerchant_delivery_order',array('sid' => $goodinfo['sid'],'gid' => $good['goodid'],'specid' => $good['specid'],'status >' => 0),array("SUM(num)"));
if($allsalenum + $good['num'] > $goodinfo['allstock']){
$tipinfo = '商品['.$goodinfo['name'].']已售罄,无法下单';
$this->renderError($tipinfo);
}
}
if($goodinfo['daystock'] > 0){
$nowtime = strtotime(date('Y-m-d',time()));
$daysalenum = pdo_getcolumn('wlmerchant_delivery_order',array('sid' => $goodinfo['sid'],'gid' => $good['goodid'],'specid' => $good['specid'],'status >' => 0,'createtime' => $nowtime),array("SUM(num)"));
if($daysalenum + $good['num'] > $goodinfo['daystock']){
$tipinfo = '商品['.$goodinfo['name'].']已售罄,无法下单';
$this->renderError($tipinfo);
}
}
//会员
if($goodinfo['vipstatus'] == 1 && $halfflag){
$goodarray['vipdiscount'] = $goodinfo['vipdiscount'];
}else{
$goodarray['vipdiscount'] = 0;
}
//计算配送费
if($type == 0){
$goodinfo['deliveryprice'] = 0;
}
if($goodinfo['deliveryprice']>0){
$storearray['packingmoney'] = sprintf("%.2f",$storearray['packingmoney'] + $goodinfo['deliveryprice']);
}
//创建小订单
$smallorder = array(
'uniacid' => $goodinfo['uniacid'],
'aid' => $goodinfo['aid'],
'sid' => $goodinfo['sid'],
'gid' => $good['goodid'],
'mid' => $_W['mid'],
'specid' => $good['specid'],
'money' => sprintf("%.2f",($goodarray['price'] - $goodarray['vipdiscount'] + $goodinfo['deliveryprice']) * $good['num']),
'status' => 0,
'num' => $good['num'],
'price' => sprintf("%.2f",$goodarray['price'] * $good['num']),
'vipdiscount' => sprintf("%.2f",$goodarray['vipdiscount'] * $good['num']),
'deliverymoney' => sprintf("%.2f",$goodinfo['deliveryprice'] * $good['num']),
'createtime' => time()
);
$res = pdo_insert(PDO_NAME . 'delivery_order',$smallorder);
$smallorderid[] = pdo_insertid();
//累计金额
$goodallmoney = sprintf("%.2f",$goodallmoney + $smallorder['price']);
$alldiscount = sprintf("%.2f",$alldiscount + $smallorder['vipdiscount']);
$packingmoney = sprintf("%.2f",$packingmoney + $smallorder['deliverymoney']);
if($res){
pdo_delete('wlmerchant_delivery_shopcart',array('id'=>$goodid));
}else{
MysqlFunction::rollback();
$this->renderError('生成订单失败,请返回重试');
}
$num += $good['num'];
}
if($type == 0){
$deliveryallmoney = $packingmoney = $setdeliveryallmoney = $fightgroupid = $addressid = 0;
}else if($type == 1 || ($type == 2 && !empty($storearray['expresspricestatus']))){
$express = $this->freight($addressid ,0,array('id'=>0,'merchantid'=>$goodinfo['sid']),$deliveryallmoney);
$expressid = $addressid;
$fightgroupid = $express['expressid'];
$setdeliveryallmoney = sprintf("%.2f",$deliveryallmoney + $packingmoney);
}else{
$big = $storearray['makebiguser']>0 ? $store['sid'] : 0;
$express = Citydelivery::getMakePrice($store['sid'],$addressid,$big);
$deliveryallmoney = $express['total_price'];
$setdeliveryallmoney = $storearray['makebiguser']>0 ? sprintf("%.2f",$express['total_price'] + $packingmoney) : $packingmoney;
$expressid = $addressid;
}
$prices = sprintf("%.2f",$goodallmoney - $alldiscount);
$settlementmoney = Citydelivery::getsettlementmoney($prices,$store['sid'],$setdeliveryallmoney);
if($settlementmoney < 0.01){
$settlementmoney = Citydelivery::getsettlementmoney($prices,$store['sid'],$setdeliveryallmoney);
}
//满减活动
if($storearray['deliveryfullid']>0){
$storearray['fulldkmoney'] = Fullreduce::getFullreduceMoney(sprintf("%.2f" ,$prices),$storearray['deliveryfullid']);
}else{
$storearray['fulldkmoney'] = 0;
}
$prices = sprintf("%.2f",$prices + $deliveryallmoney + $packingmoney - $storearray['fulldkmoney']);
//校验距离和起送金额
if($type == 1){
if($storearray['deliverydistance']>0){
$distance = Store::getdistance($address['lng'],$address['lat'],$storearray['lng'],$storearray['lat']);
if($distance > $storearray['deliverydistance']*1000){
MysqlFunction::rollback();
$this->renderError('['.$storearray['storename'].']的配送距离为'.$storearray['deliverydistance'].'km,请更换配送位置或选择其他配送方式');
}
}
if($storearray['lowdeliverymoney']>0){
if($prices < $storearray['lowdeliverymoney']){
MysqlFunction::rollback();
$this->renderError('['.$storearray['storename'].']的起送金额为'.$storearray['lowdeliverymoney'].'元,请增购商品或选择其他配送方式');
}
}
}
//创建商户订单
$orderData = [
'uniacid' => $goodinfo['uniacid'] ,
'mid' => $_W['mid'] ,
'sid' => $goodinfo['sid'] ,
'aid' => $goodinfo['aid'] ,
'plugin' => 'citydelivery' ,
'payfor' => 'deliveryOrder' ,
'orderno' => createUniontid() ,
'status' => 0 ,//订单状态:0未支,1支付,2待发货,3已发货,4已签收,5已取消,6待退款,7已退款
'createtime' => TIMESTAMP ,
'price' => $prices > 0 ? $prices : 0,
'vipbuyflag' => $halfflag ,
'name' => $username ,
'mobile' => $mobile ,
'goodsprice' => $goodallmoney ,
'expressid' => $expressid ,
'buyremark' => $store['remark'],
'settlementmoney' => $settlementmoney ,
'vipdiscount' => $alldiscount,
'expressprcie' => $deliveryallmoney,
'canceltime' => time() + $settings['cancel'] * 60,
'num' => $num,
'fightstatus' => $type,
'fullreduceid' => $storearray['deliveryfullid'],
'fullreducemoney' => $storearray['fulldkmoney'],
'fightgroupid' => $fightgroupid,
'packingmoney' => $packingmoney
];
pdo_insert(PDO_NAME . 'order' , $orderData);
$orderid = pdo_insertid();
if($orderid){
$ordersid[] = $orderid;
foreach ($smallorderid as $smallid){
pdo_update('wlmerchant_delivery_order',array('tid' => $orderData['orderno'],'orderid' => $orderid),array('id' => $smallid));
}
}else{
MysqlFunction::rollback();
$this->renderError('生成订单失败,请返回重试');
}
}
MysqlFunction::commit();
$data = base64_encode(json_encode($ordersid));
$this->renderSuccess('订单信息',$data);
}
}
}