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.
1006 lines
41 KiB
1006 lines
41 KiB
<?php
|
|
defined('IN_IA') or exit('Access Denied');
|
|
class wlCoupon
|
|
{
|
|
/**
|
|
* 保存超级券母类
|
|
* @access static
|
|
* @name saveCoupon
|
|
* @param mixed 参数一的说明
|
|
* @return array
|
|
*/
|
|
static function saveCoupons($coupon , $param = [])
|
|
{
|
|
global $_W;
|
|
if (!is_array($coupon)) return false;
|
|
$coupon['uniacid'] = $_W['uniacid'];
|
|
$coupon['aid'] = $_W['aid'];
|
|
// $coupon['sid'] = $_W['sid']?$_W['sid']:$coupon['sid'];
|
|
if (empty($param)) {
|
|
pdo_insert(PDO_NAME . 'couponlist' , $coupon);
|
|
return pdo_insertid();
|
|
}
|
|
return false;
|
|
}
|
|
/**
|
|
* 更新超级券母类
|
|
* @access static
|
|
* @name updateCoupons
|
|
* @param $params 修改参数
|
|
* @param $where 修改条件
|
|
* @return array
|
|
*/
|
|
static function updateCoupons($params , $where)
|
|
{
|
|
$res = pdo_update(PDO_NAME . 'couponlist' , $params , $where);
|
|
if ($res) {
|
|
return 1;
|
|
}
|
|
else {
|
|
return 0;
|
|
}
|
|
}
|
|
/**
|
|
* 删除超级券母类
|
|
* @access static
|
|
* @name deleteOrder
|
|
* @param $params 修改参数
|
|
* @param $where 修改条件
|
|
* @return array
|
|
*/
|
|
static function deleteCoupons($where)
|
|
{
|
|
$res = pdo_delete(PDO_NAME . 'couponlist' , $where);
|
|
if ($res) {
|
|
return 1;
|
|
}
|
|
else {
|
|
return 0;
|
|
}
|
|
}
|
|
/**
|
|
* 删除超级券用户记录
|
|
* @access static
|
|
* @name deleteOrder
|
|
* @param $params 修改参数
|
|
* @param $where 修改条件
|
|
* @return array
|
|
*/
|
|
static function deleteCoupon($where)
|
|
{
|
|
$res = pdo_delete(PDO_NAME . 'member_coupons' , $where);
|
|
if ($res) {
|
|
return 1;
|
|
}
|
|
else {
|
|
return 0;
|
|
}
|
|
}
|
|
/**
|
|
* 获取多条超级券母类记录
|
|
* @access static
|
|
* @name getNumGoods
|
|
* @param $where 查询条件
|
|
* @param $select 查询参数
|
|
* @return array
|
|
*/
|
|
static function getNumCoupons($select , $where , $order , $pindex , $psize , $ifpage)
|
|
{
|
|
$goodsInfo = Util::getNumData($select , PDO_NAME . 'couponlist' , $where , $order , $pindex , $psize , $ifpage);
|
|
return $goodsInfo;
|
|
}
|
|
/**
|
|
* 获取单条超级券母类
|
|
* @access static
|
|
* @name getSingleOrder
|
|
* @param $where 查询条件
|
|
* @param $select 查询参数
|
|
* @return array
|
|
*/
|
|
static function getSingleCoupons($id , $select , $where = [])
|
|
{
|
|
$where['id'] = $id;
|
|
return Util::getSingelData($select , PDO_NAME . 'couponlist' , $where);
|
|
}
|
|
/**
|
|
* 储存单条超级券
|
|
* @access static
|
|
* @name getSingleOrder
|
|
* @param $where 查询条件
|
|
* @param $select 查询参数
|
|
* @return array
|
|
*/
|
|
static function saveMemberCoupons($coupon , $param = [])
|
|
{
|
|
global $_W;
|
|
if (!is_array($coupon)) return false;
|
|
$coupon['uniacid'] = $_W['uniacid'];
|
|
if (empty($param)) {
|
|
pdo_insert(PDO_NAME . 'member_coupons' , $coupon);
|
|
return pdo_insertid();
|
|
}
|
|
return false;
|
|
}
|
|
/**
|
|
* 获取单条超级券数量
|
|
* @access static
|
|
* @name getCouponNum
|
|
* @param $where 查询条件
|
|
* @param $select 查询参数
|
|
* @return array
|
|
*/
|
|
static function getCouponNum($parentid , $type = 1,$mid = 0)
|
|
{
|
|
global $_W;
|
|
if(empty($mid)){
|
|
$mid = $_W['mid'];
|
|
}
|
|
if ($type == 1) {
|
|
$num = pdo_fetchcolumn('SELECT count(id) FROM ' . tablename('wlmerchant_member_coupons') . " WHERE mid = '{$mid}' AND parentid = {$parentid} AND status in (1,2)");
|
|
} else {
|
|
$num = pdo_fetchcolumn(" SELECT SUM(num) FROM " . tablename(PDO_NAME . "order") . " WHERE mid = {$mid} AND fkid = {$parentid} AND plugin = 'coupon' AND status != 5 AND status != 7 ");
|
|
}
|
|
return $num;
|
|
}
|
|
/**
|
|
* 获取多条超级券
|
|
* @access static
|
|
* @name getNumCoupon
|
|
* @param $where 查询条件
|
|
* @param $select 查询参数
|
|
* @return array
|
|
*/
|
|
static function getNumCoupon($select , $where , $order , $pindex , $psize , $ifpage)
|
|
{
|
|
$orderInfo = Util::getNumData($select , PDO_NAME . 'member_coupons' , $where , $order , $pindex , $psize , $ifpage);
|
|
return $orderInfo;
|
|
}
|
|
/**
|
|
* 获取单条超级券
|
|
* @access static
|
|
* @name getSingleOrder
|
|
* @param $where 查询条件
|
|
* @param $select 查询参数
|
|
* @return array
|
|
*/
|
|
static function getSingleCoupon($id , $select , $where = [])
|
|
{
|
|
$where['id'] = $id;
|
|
return Util::getSingelData($select , PDO_NAME . 'member_coupons' , $where);
|
|
}
|
|
/**
|
|
* 更新超级券
|
|
* @access static
|
|
* @name updateCoupons
|
|
* @param $params 修改参数
|
|
* @param $where 修改条件
|
|
* @return array
|
|
*/
|
|
static function updateCoupon($params , $where)
|
|
{
|
|
$res = pdo_update(PDO_NAME . 'member_coupons' , $params , $where);
|
|
if ($res) {
|
|
return 1;
|
|
}
|
|
else {
|
|
return 0;
|
|
}
|
|
}
|
|
/**
|
|
* 保存超级券母类
|
|
* @access static
|
|
* @name saveCoupon
|
|
* @param mixed 参数一的说明
|
|
* @return array
|
|
*/
|
|
static function saveCouponOrder($data , $param = [])
|
|
{
|
|
global $_W;
|
|
if (!is_array($data)) return false;
|
|
if (empty($param)) {
|
|
pdo_insert(PDO_NAME . 'order' , $data);
|
|
return pdo_insertid();
|
|
}
|
|
return false;
|
|
}
|
|
/**
|
|
* 获取多条订单记录
|
|
* @access static
|
|
* @name getNumCouponOrder
|
|
* @param $where 查询条件
|
|
* @param $select 查询参数
|
|
* @return array
|
|
*/
|
|
static function getNumCouponOrder($select , $where , $order , $pindex , $psize , $ifpage)
|
|
{
|
|
$goodsInfo = Util::getNumData($select , PDO_NAME . 'order' , $where , $order , $pindex , $psize , $ifpage);
|
|
return $goodsInfo;
|
|
}
|
|
/**
|
|
* 获取多条店铺记录
|
|
* @access static
|
|
* @name getNumCouponOrder
|
|
* @param $where 查询条件
|
|
* @param $select 查询参数
|
|
* @return array
|
|
*/
|
|
static function getNumstore($select , $where , $order , $pindex , $psize , $ifpage)
|
|
{
|
|
$goodsInfo = Util::getNumData($select , PDO_NAME . 'merchantdata' , $where , $order , $pindex , $psize , $ifpage);
|
|
return $goodsInfo;
|
|
}
|
|
static function getstores($locations , $lng , $lat)
|
|
{
|
|
global $_W;
|
|
foreach ($locations as $key => $val) {
|
|
$loca = unserialize($val['location']);
|
|
$locations[$key]['distance'] = Store::getdistance($loca['lng'] , $loca['lat'] , $lng , $lat);
|
|
}
|
|
//排序
|
|
for ($i = 0 ; $i < count($locations) - 1 ; $i++) {
|
|
for ($j = 0 ; $j < count($locations) - 1 - $i ; $j++) {
|
|
if ($locations[$j]['distance'] > $locations[$j + 1]['distance']) {
|
|
$temp = $locations[$j + 1];
|
|
$locations[$j + 1] = $locations[$j];
|
|
$locations[$j] = $temp;
|
|
}
|
|
}
|
|
}
|
|
foreach ($locations as $key => $value) {
|
|
if (!empty($value['distance'])) {
|
|
if ($value['distance'] > 1000) {
|
|
$locations[$key]['distance'] = (floor(($value['distance'] / 1000) * 10) / 10) . "km";
|
|
}
|
|
else {
|
|
$locations[$key]['distance'] = round($value['distance']) . "m";
|
|
}
|
|
}
|
|
}
|
|
return $locations;
|
|
}
|
|
/**
|
|
* 异步支付结果回调 ,处理业务逻辑
|
|
* @access public
|
|
* @name
|
|
* @param mixed 参数一的说明
|
|
* @return array
|
|
*/
|
|
static function payCouponshargeNotify($params)
|
|
{
|
|
global $_W;
|
|
$order = pdo_get('wlmerchant_order' , ['orderno' => $params['tid']]);
|
|
$coupons = pdo_get('wlmerchant_couponlist' , ['id' => $order['fkid']]);
|
|
$_W['aid'] = $order['aid'];
|
|
$_W['uniacid'] = $order['uniacid'];
|
|
if ($order['status'] == 0 || $order['status'] == 5) {
|
|
$data1 = self::getCouponshargePayData($params , $order);
|
|
pdo_update(PDO_NAME . 'order' , $data1 , ['id' => $order['id']]);
|
|
Order::createSmallorder($order['id'] , 4);
|
|
//处理分销
|
|
if (p('distribution') && empty($coupons['isdistri'])) {
|
|
$dismoney = sprintf("%.2f" , $order['goodsprice'] - $order['vipdiscount']);
|
|
$disarray = unserialize($coupons['disarray']);
|
|
$disorderid = Distribution::disCore($order['mid'] , $dismoney , $disarray , $order['num'] , $threemoney , $order['id'] , 'coupon' , $coupons['dissettime'],$coupons['isdistristatus']);
|
|
$data1['disorderid'] = $disorderid;
|
|
}
|
|
//处理业务员佣金
|
|
if (p('salesman')) {
|
|
$data1['salesarray'] = Salesman::saleCore($order['sid'] , 'coupon');
|
|
}
|
|
//支付有礼
|
|
if ($coupons['paidid'] > 0) {
|
|
$data1['paidprid'] = Paidpromotion::getpaidpr(3 , $coupons['paidid'] , $order['mid'],$order['id'],$data1['paytype'] , $order['price'] , $order['num']);
|
|
}
|
|
//添加标签
|
|
if (p('userlabel')) {
|
|
Userlabel::addlabel($order['mid'] , $order['fkid'] , 'coupon');
|
|
}
|
|
if ($coupons['time_type'] == 1) {
|
|
$starttime = $coupons['starttime'];
|
|
$endtime = $coupons['endtime'];
|
|
}
|
|
else {
|
|
$starttime = time();
|
|
$endtime = time() + ($coupons['deadline'] * 24 * 3600);
|
|
}
|
|
$data = [
|
|
'mid' => $order['mid'] ,
|
|
'aid' => $order['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' => $params['tid'] ,
|
|
'price' => $order['price'] / $order['num'] ,
|
|
'usetimes' => $coupons['usetimes'] * $order['num'] ,
|
|
'concode' => 0
|
|
];
|
|
$data1['recordid'] = self::saveMemberCoupons($data);
|
|
$data1['estimatetime'] = $data['endtime'];
|
|
//计算通知时间
|
|
$data1['remindtime'] = Order::remindTime($data1['estimatetime']);
|
|
pdo_update(PDO_NAME . 'order' , $data1 , ['id' => $order['id']]);
|
|
$newsurplus = $coupons['surplus'] + $order['num'];
|
|
self::updateCoupons(['surplus' => $newsurplus] , ['id' => $coupons['id']]);
|
|
$member = pdo_get('wlmerchant_member' , ['id' => $order['mid']] , ['openid']);
|
|
$openid = $member['openid'];
|
|
//通知商户
|
|
News::addSysNotice($order['uniacid'] , 2 , $order['sid'] , 0 , $order['id']);
|
|
Store::addFans($order['sid'] , $order['mid']);
|
|
News::paySuccess($order['id'] , 'coupon');
|
|
}
|
|
}
|
|
/**
|
|
* 函数的含义说明
|
|
* @access public
|
|
* @name 方法名称
|
|
* @param mixed 参数一的说明
|
|
* @return array
|
|
*/
|
|
static function getCouponshargePayData($params , $order_out)
|
|
{
|
|
$data = ['status' => $params['result'] == 'success' ? 1 : 0];
|
|
if ($params['is_usecard'] == 1) {
|
|
$fee = $params['card_fee'];
|
|
$data['is_usecard'] = 1;
|
|
}
|
|
else {
|
|
$fee = $params['fee'];
|
|
}
|
|
//$paytype = array('credit' => 1, 'wechat' => 2, 'alipay' => 3, 'delivery' => 4, 'wxapp' => 5);
|
|
$data['paytype'] = $params['type'];
|
|
if ($params['tag']['transaction_id']) $data['transid'] = $params['tag']['transaction_id'];
|
|
$data['paytime'] = TIMESTAMP;
|
|
$data['price'] = $fee;
|
|
$data['blendcredit'] = $params['blendcredit'];
|
|
SingleMerchant::updateAmount($fee , $order_out['sid'] , $order_out['id'] , 1 , '卡券订单支付成功');
|
|
return $data;
|
|
}
|
|
/**
|
|
* 函数的含义说明
|
|
* @access public
|
|
* @name 方法名称
|
|
* @param mixed 参数一的说明
|
|
* @return array
|
|
*/
|
|
static function payCouponshargeReturn($params)
|
|
{
|
|
$res = $params['result'] == 'success' ? 1 : 0;
|
|
$order_out = pdo_get(PDO_NAME . 'order' , ['orderno' => $params['tid']] , ['id']);
|
|
wl_message('支付成功' , h5_url('pages/mainPages/paySuccess/paySuccess' , [
|
|
'id' => $order_out['id'] ,
|
|
'type' => 3
|
|
]) , 'success');
|
|
}
|
|
//核销记录
|
|
static function hexiaoorder($id , $mid , $num = 1 , $type = 1 , $checkcode = '')
|
|
{ //1输码 2扫码 3后台 4密码
|
|
global $_W;
|
|
$coupon = pdo_get(PDO_NAME . 'member_coupons' , ['id' => $id]);
|
|
if ($coupon['orderno']) {
|
|
$order = pdo_get('wlmerchant_order' , ['orderno' => $coupon['orderno']] , ['id' , 'neworderflag' , 'sid']);
|
|
}
|
|
$coupon['usetimes'] = pdo_fetchcolumn('SELECT count(id) FROM ' . tablename('wlmerchant_smallorder') . " WHERE plugin = 'coupon' AND orderid = {$order['id']} AND status = 1");
|
|
if ($coupon['usetimes'] < 1) {
|
|
if (is_mobile()) {
|
|
die(json_encode(['errno' => 1 , 'message' => '该超级券已失效' , 'data' => '']));
|
|
}
|
|
else {
|
|
show_json(0 , '该超级券已失效');
|
|
}
|
|
}
|
|
if ($coupon['usetimes'] < $num) {
|
|
if (is_mobile()) {
|
|
die(json_encode(['errno' => 1 , 'message' => '可核销次数不足' , 'data' => '']));
|
|
}
|
|
else {
|
|
show_json(0 , '可核销次数不足');
|
|
}
|
|
}
|
|
if ($coupon['starttime'] > time()) {
|
|
$starttime = date("Y-m-d H:i:s" , $coupon['starttime']);
|
|
if (is_mobile()) {
|
|
die(json_encode(['errno' => 1 , 'message' => '该超级券在' . $starttime . '后方可使用' , 'data' => '']));
|
|
}
|
|
else {
|
|
show_json(0 , '该超级券在' . $starttime . '后方可使用');
|
|
}
|
|
}
|
|
if ($coupon['endtime'] < time()) {
|
|
if (is_mobile()) {
|
|
die(json_encode(['errno' => 1 , 'message' => '该超级券已过期' , 'data' => '']));
|
|
}
|
|
else {
|
|
show_json(0 , '该超级券已过期');
|
|
}
|
|
}
|
|
if ($order['neworderflag']) {
|
|
if ($checkcode) {
|
|
$smallorders = pdo_fetchall("SELECT * FROM " . tablename('wlmerchant_smallorder') . "WHERE plugin = 'coupon' AND orderid = {$order['id']} AND status = 1 AND checkcode = '{$checkcode}'");
|
|
}
|
|
else {
|
|
$smallorders = pdo_fetchall("SELECT * FROM " . tablename('wlmerchant_smallorder') . "WHERE plugin = 'coupon' AND orderid = {$order['id']} AND status = 1 ORDER BY id ASC LIMIT {$num}");
|
|
}
|
|
if ($smallorders) {
|
|
if ($mid) {
|
|
$uid = pdo_getcolumn(PDO_NAME . 'merchantuser' , [
|
|
'storeid' => $order['sid'] ,
|
|
'mid' => $mid
|
|
] , 'id');
|
|
}
|
|
else {
|
|
$uid = 0;
|
|
}
|
|
foreach ($smallorders as $k => $small) {
|
|
$res = Order::finishSmallorder($small['id'] , $uid , $type);
|
|
}
|
|
}
|
|
else {
|
|
if (is_mobile()) {
|
|
die(json_encode(['errno' => 1 , 'message' => '无可用核销码' , 'data' => '']));
|
|
}
|
|
else {
|
|
show_json(0 , '无可用核销码');
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
//添加更新
|
|
$arr = [];
|
|
if ($coupon['usedtime']) {
|
|
$a = unserialize($coupon['usedtime']);
|
|
for ($i = 0 ; $i < $num ; $i++) {
|
|
$arr['time'] = time();
|
|
$arr['type'] = $type;
|
|
$arr['ver'] = $mid;
|
|
$a[] = $arr;
|
|
}
|
|
$coupon['usedtime'] = serialize($a);
|
|
}
|
|
else {
|
|
$a = [];
|
|
for ($i = 0 ; $i < $num ; $i++) {
|
|
$arr['time'] = time();
|
|
$arr['type'] = $type;
|
|
$arr['ver'] = $mid;
|
|
$a[] = $arr;
|
|
}
|
|
$coupon['usedtime'] = serialize($a);
|
|
}
|
|
$params['usetimes'] = $coupon['usetimes'] - $num;
|
|
$params['usedtime'] = $coupon['usedtime'];
|
|
$res = self::updateCoupon($params , ['id' => $id]);
|
|
}
|
|
if ($res) {
|
|
//发送核销成功通知
|
|
$info = [
|
|
'first' => '您好,您的卡券已经成功核销' ,
|
|
'goods_name' => $coupon['title'] ,//商品名称
|
|
'goods_num' => $num ,//商品数量
|
|
'time' => date('Y-m-d H:i:s' , time()) ,//核销时间
|
|
'order_no' => $coupon['orderno'] ,//订单编号
|
|
'remark' => '如有疑问请联系客服'
|
|
];
|
|
TempModel::sendInit('write_off' , $coupon['mid'] , $info , $_W['source']);
|
|
if ($type == 2) {
|
|
$info2 = [
|
|
'first' => '核销操作成功' ,
|
|
'goods_name' => $coupon['title'] ,//商品名称
|
|
'goods_num' => $num ,//商品数量
|
|
'time' => date('Y-m-d H:i:s' , time()) ,//核销时间
|
|
'order_no' => $coupon['orderno'] ,//订单编号
|
|
'remark' => '订单编号:[' . $coupon['orderno'] . ']' ,
|
|
];
|
|
TempModel::sendInit('write_off' , $_W['mid'] , $info2 , $_W['source']);
|
|
}
|
|
if (empty($order['neworderflag'])) {
|
|
$order = pdo_get('wlmerchant_order' , ['orderno' => $coupon['orderno']] , ['id']);
|
|
$goods = pdo_get('wlmerchant_couponlist' , ['id' => $coupon['parentid']] , ['merchantid' , 'title']);
|
|
SingleMerchant::verifRecordAdd($coupon['aid'] , $goods['merchantid'] , $coupon['mid'] , 'coupon' , $order['id'] , $coupon['concode'] , $goods['title'] , $type , $num);
|
|
if ($params['usetimes'] < 1) {
|
|
$res2 = pdo_update('wlmerchant_order' , ['status' => 2] , ['orderno' => $coupon['orderno']]);
|
|
$orderid = pdo_getcolumn(PDO_NAME . 'order' , ['orderno' => $coupon['orderno']] , 'id');
|
|
//添加结算抢购订单到计划任务
|
|
$ordertask = [
|
|
'type' => 'wlcoupon' ,
|
|
'orderid' => $orderid
|
|
];
|
|
$ordertask = serialize($ordertask);
|
|
Queue::addTask(2 , $ordertask , time() , $orderid);
|
|
$disorderid = pdo_getcolumn('wlmerchant_order' , ['orderno' => $coupon['orderno']] , 'disorderid');
|
|
if ($disorderid) {
|
|
$res = pdo_update('wlmerchant_disorder' , ['status' => 1] , [
|
|
'id' => $disorderid ,
|
|
'status' => 0
|
|
]);
|
|
if ($res) {
|
|
$distask = [
|
|
'type' => 'wlcoupon' ,
|
|
'orderid' => $disorderid
|
|
];
|
|
$distask = serialize($distask);
|
|
Queue::addTask(3 , $distask , time() , $disorderid);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return 1;
|
|
}
|
|
else {
|
|
return 0;
|
|
}
|
|
}
|
|
//消费截止时间到来提醒
|
|
static function cutoffFollow($id , $mid , $title , $sid , $cutofftime)
|
|
{
|
|
global $_W;
|
|
$settings = Setting::wlsetting_read('noticeMessage');
|
|
$notice = unserialize($settings['notice']);
|
|
$where2['id'] = $mid;
|
|
$member = Util::getSingelData('nickname,openid' , 'wlmerchant_member' , $where2);
|
|
$storename = pdo_getcolumn(PDO_NAME . 'merchantdata' , ['id' => $sid] , 'storename');
|
|
$aid = pdo_getcolumn(PDO_NAME . 'merchantdata' , ['id' => $sid] , 'aid');
|
|
$orderno = pdo_getcolumn(PDO_NAME . 'member_coupons' , ['id' => $sid] , 'orderno');
|
|
$num = pdo_getcolumn(PDO_NAME . 'order' , ['orderno' => $orderno] , 'num');
|
|
$order_id = pdo_getcolumn(PDO_NAME . 'order' , ['orderno' => $orderno] , 'id');
|
|
if (empty($orderno)) {
|
|
$orderno = '免费卡券';
|
|
}
|
|
if (empty($num)) {
|
|
$num = 1;
|
|
}
|
|
$url = h5_url('pages/subPages/coupon/couponDetails/couponDetails' , [
|
|
'id' => $id ,
|
|
'order_id' => $order_id
|
|
]);
|
|
$modelData = [
|
|
'first' => '您好,您有即将过期的卡券。' ,
|
|
'type' => '消费提醒' ,//业务类型
|
|
'content' => '您的卡券' . $title . '即将过期,请尽快使用!' ,//业务内容
|
|
'status' => '截止时间:' . date('Y年m月d日 H:i:s' , $cutofftime) ,//处理结果
|
|
'time' => date("Y-m-d H:i:s" , time()) ,//操作时间
|
|
'remark' => '点击立即去消费,赶快行动吧。'
|
|
];
|
|
TempModel::sendInit('service' , $mid , $modelData , $_W['source'] , $url);
|
|
}
|
|
//退款函数
|
|
static function refund($id , $money = 0 , $unline = '' , $checkcode = '' , $afterid = 0)
|
|
{
|
|
global $_W;
|
|
$item = pdo_get(PDO_NAME . 'order' , ['id' => $id]);
|
|
if ($checkcode) {
|
|
if ($money < 0.01) {
|
|
$smallorder = pdo_fetch("SELECT orderprice,blendcredit FROM " . tablename(PDO_NAME . "smallorder") . " WHERE plugin = 'coupon' AND orderid = {$id} AND status IN (1,4) AND checkcode = '{$checkcode}'");
|
|
$money = sprintf("%.2f" , $smallorder['orderprice'] - $smallorder['blendcredit']);
|
|
$blendcredit = $smallorder['blendcredit'];
|
|
}
|
|
$refundnum = 1;
|
|
}
|
|
else if (empty($money)) {
|
|
$money = pdo_fetchcolumn('SELECT SUM(orderprice) FROM ' . tablename(PDO_NAME . "smallorder") . " WHERE plugin = 'coupon' AND orderid = {$id} AND status IN (1,4)");
|
|
$blendcredit = pdo_fetchcolumn('SELECT SUM(blendcredit) FROM ' . tablename(PDO_NAME . "smallorder") . " WHERE plugin = 'coupon' AND orderid = {$id} AND status IN (1,4)");
|
|
$money = sprintf("%.2f" , $money - $blendcredit);
|
|
$refundnum = pdo_fetchcolumn('SELECT count(id) FROM ' . tablename(PDO_NAME . "smallorder") . " WHERE plugin = 'coupon' AND orderid = {$id} AND status IN (1,4)");
|
|
}
|
|
else {
|
|
if ($money < $item['blendcredit']) {
|
|
$blendcredit = $money;
|
|
$money = 0;
|
|
}
|
|
else if ($item['blendcredit'] > 0) {
|
|
$blendcredit = $item['blendcredit'];
|
|
$money = sprintf("%.2f" , $money - $blendcredit);
|
|
}
|
|
$refundnum = $item['usetimes'];
|
|
}
|
|
if ($money > $item['price']) {
|
|
$money = $item['price'];
|
|
}
|
|
if ($unline) {
|
|
$res['status'] = 1;
|
|
}
|
|
else {
|
|
$res = wlPay::refundMoney($id , $money , '卡券订单退款' , 'coupon' , 2 , $blendcredit);
|
|
}
|
|
if ($res['status']) {
|
|
if ($item['neworderflag']) {
|
|
if ($checkcode) {
|
|
pdo_update('wlmerchant_smallorder' , [
|
|
'status' => 3 ,
|
|
'refundtime' => time()
|
|
] , ['plugin' => 'coupon' , 'orderid' => $id , 'status' => [1 , 4] , 'checkcode' => $checkcode]);
|
|
}
|
|
else if (empty($afterid)) {
|
|
pdo_update('wlmerchant_smallorder' , [
|
|
'status' => 3 ,
|
|
'refundtime' => time()
|
|
] , ['plugin' => 'coupon' , 'orderid' => $id , 'status' => [1 , 4]]);
|
|
}else if($afterid > 0){
|
|
$afterCheckcode = pdo_getcolumn(PDO_NAME.'aftersale',array('id'=>$afterid),'checkcodes');
|
|
$afterCheckcode = unserialize($afterCheckcode);
|
|
pdo_update('wlmerchant_smallorder', array('status' => 3, 'refundtime' => time()),array('plugin' => 'coupon','orderid'=>$id,'checkcode' => $afterCheckcode));
|
|
}
|
|
if ($item['applyrefund']) {
|
|
$reason = '买家申请退款。';
|
|
$orderdata['applyrefund'] = 2;
|
|
}
|
|
else {
|
|
$reason = '卡券系统退款。';
|
|
}
|
|
$overflag = pdo_get('wlmerchant_smallorder' , [
|
|
'orderid' => $id ,
|
|
'plugin' => 'coupon' ,
|
|
'status' => 1
|
|
] , ['id']);
|
|
if (empty($overflag)) {
|
|
$hexiao = pdo_get('wlmerchant_smallorder' , [
|
|
'orderid' => $id ,
|
|
'plugin' => 'coupon' ,
|
|
'status' => 2
|
|
] , ['id']);
|
|
if ($hexiao) {
|
|
$orderdata['status'] = 2;
|
|
$orderdata['issettlement'] = 1;
|
|
$orderdata['settletime'] = time();
|
|
}
|
|
else {
|
|
$orderdata['status'] = 7;
|
|
$orderdata['refundtime'] = time();
|
|
}
|
|
pdo_update('wlmerchant_order' , $orderdata , ['id' => $item['id']]);
|
|
}
|
|
}
|
|
else {
|
|
if ($item['applyrefund']) {
|
|
pdo_update('wlmerchant_order' , [
|
|
'status' => 7 ,
|
|
'refundtime' => time() ,
|
|
'applyrefund' => 2
|
|
] , ['id' => $item['id']]);
|
|
$reason = '买家申请退款。';
|
|
}
|
|
else {
|
|
pdo_update('wlmerchant_order' , ['status' => 7 , 'refundtime' => time()] , ['id' => $item['id']]);
|
|
$reason = '卡券系统退款。';
|
|
}
|
|
}
|
|
pdo_update('wlmerchant_member_coupons' , ['status' => 2 , 'usetimes' => 0] , ['id' => $item['recordid']]);
|
|
$url = h5_url('pages/mainPages/index/diypage?type=5');
|
|
//分销订单退款
|
|
if ($item['disorderid']) {
|
|
Distribution::refunddis($item['disorderid'] , $checkcode);
|
|
}
|
|
if ($item['usecredit']) {
|
|
$refundcredit = sprintf("%.2f",$item['usecredit']/$item['num']*$refundnum);
|
|
$goodname = pdo_getcolumn(PDO_NAME . 'couponlist' , ['id' => $item['fkid']] , 'title');
|
|
Member::credit_update_credit1($item['mid'], $refundcredit, '退款超级券:[' .$goodname. ']订单返还积分');
|
|
}
|
|
News::refundNotice($id , 'coupon' , $money , $reason);
|
|
//恢复商品库存
|
|
pdo_fetch("update" . tablename('wlmerchant_order') . "SET surplus = surplus-{$refundnum} WHERE id = {$id}");
|
|
if ($item['redpackid']) {
|
|
pdo_update('wlmerchant_redpack_records' , [
|
|
'status' => 0 ,
|
|
'usetime' => 0 ,
|
|
'orderid' => 0 ,
|
|
'plugin' => ''
|
|
] , ['id' => $item['redpackid']]);
|
|
}
|
|
}
|
|
else {
|
|
pdo_fetch("update" . tablename('wlmerchant_order') . "SET failtimes = failtimes+1 WHERE id = {$id}");
|
|
}
|
|
return $res;
|
|
}
|
|
//取消订单
|
|
static function cancelorder($id)
|
|
{
|
|
$order = pdo_get(PDO_NAME . "order" , ['id' => $id] , [
|
|
'id' ,
|
|
'mid' ,
|
|
'uniacid' ,
|
|
'fkid' ,
|
|
'usecredit' ,
|
|
'redpackid'
|
|
]);
|
|
$_W['uniacid'] = $order['uniacid'];
|
|
$res = pdo_update(PDO_NAME . "order" , ['status' => 5] , ['id' => $order['id']]);//更新为已取消
|
|
if ($res) {
|
|
if ($order['redpackid']) {
|
|
pdo_update('wlmerchant_redpack_records' , ['status' => 0] , ['id' => $order['redpackid']]);
|
|
}
|
|
if ($order['usecredit'] > 0) {
|
|
$goodname = pdo_getcolumn(PDO_NAME . 'couponlist' , ['id' => $order['fkid']] , 'title');
|
|
Member::credit_update_credit1($order['mid'] , $order['usecredit'] , '取消超级券:[' . $goodname . ']订单返还积分');
|
|
}
|
|
return true;
|
|
}
|
|
}
|
|
static function doTask()
|
|
{
|
|
global $_W;
|
|
$where = Queue::getTaskWhere(0);
|
|
$where2 = Queue::getTaskWhere(1);
|
|
//修改超级券的状态
|
|
if (!empty($where2)) {
|
|
pdo_update(PDO_NAME . "couponlist" , ['status' => 2] , [
|
|
'status' => 1 ,
|
|
'starttime <' => time() ,
|
|
'time_type' => 1 ,
|
|
'uniacid' => $where2
|
|
]);
|
|
pdo_update(PDO_NAME . "couponlist" , ['status' => 2] , [
|
|
'status' => 1 ,
|
|
'time_type' => 2 ,
|
|
'uniacid' => $where2
|
|
]);
|
|
pdo_update(PDO_NAME . "couponlist" , ['status' => 3] , [
|
|
'status' => 2 ,
|
|
'endtime <' => time() ,
|
|
'time_type' => 1 ,
|
|
'uniacid' => $where2
|
|
]);
|
|
}
|
|
else {
|
|
pdo_update(PDO_NAME . "couponlist" , ['status' => 2] , [
|
|
'status' => 1 ,
|
|
'starttime <' => time() ,
|
|
'time_type' => 1
|
|
]);
|
|
pdo_update(PDO_NAME . "couponlist" , ['status' => 2] , ['status' => 1 , 'time_type' => 2]);
|
|
pdo_update(PDO_NAME . "couponlist" , ['status' => 3] , [
|
|
'status' => 2 ,
|
|
'endtime <' => time() ,
|
|
'time_type' => 1
|
|
]);
|
|
}
|
|
/*发送即将过期通知*/ // $cutoffcoupon = pdo_fetchall("SELECT * FROM ".tablename('wlmerchant_member_coupons')."WHERE usetimes > 1 {$where} AND cutoffnotice = 0 ORDER BY id ASC limit 0,20 ");
|
|
// if (!empty($cutoffcoupon)) {
|
|
// foreach ($cutoffcoupon as $k => $v) {
|
|
// $_W['uniacid'] = $v['uniacid'];
|
|
// $_W['aid'] = $v['aid'];
|
|
// $sid = pdo_getcolumn(PDO_NAME . 'couponlist', array('id' => $v['parentid']), 'merchantid');
|
|
// $cutofftime = $v['endtime'];
|
|
// $config = Setting::agentsetting_read('coupon');
|
|
// $cutoff_time = $config['cutoff_time'] ? intval($config['cutoff_time']) : 7;
|
|
//
|
|
// if ($cutofftime > time() && $cutofftime < (time() + $cutoff_time * 24 * 3600)) {
|
|
// self::cutoffFollow($v['id'], $v['mid'], $v['title'], $sid, $cutofftime);
|
|
// pdo_update(PDO_NAME . 'member_coupons', array('cutoffnotice' => 1), array('id' => $v['id']));
|
|
// }
|
|
// }
|
|
// }
|
|
//新过期流程兼容
|
|
$noestorder = pdo_fetchall("SELECT * FROM " . tablename('wlmerchant_order') . "WHERE plugin = 'coupon' {$where} AND status = 1 AND estimatetime = 0 ORDER BY id DESC limit 20");
|
|
if ($noestorder) {
|
|
foreach ($noestorder as $key => $noest) {
|
|
$estimatetime = pdo_getcolumn(PDO_NAME . 'member_coupons' , ['id' => $noest['recordid']] , 'endtime');
|
|
pdo_update('wlmerchant_order' , ['estimatetime' => $estimatetime] , ['id' => $noest['id']]);
|
|
}
|
|
}
|
|
/*标记过期订单*/
|
|
$nowtime = time();
|
|
$cutoffcou = pdo_fetchall("SELECT orderno,parentid,uniacid,aid FROM " . tablename('wlmerchant_member_coupons') . "WHERE status = 1 {$where} AND usetimes > 0 AND orderno > 0 AND endtime < {$nowtime} ORDER BY id DESC LIMIT 10");
|
|
if (!empty($cutoffcou)) {
|
|
foreach ($cutoffcou as $key => $cutcou) {
|
|
pdo_update('wlmerchant_member_coupons' , ['status' => 3] , ['orderno' => $cutcou['orderno']]);
|
|
pdo_update('wlmerchant_order' , ['status' => 9] , ['orderno' => $cutcou['orderno']]);
|
|
//自动退款
|
|
$_W['uniacid'] = $cutcou['uniacid'];
|
|
$_W['aid'] = $cutcou['aid'];
|
|
$orderset = Setting::wlsetting_read('orderset');
|
|
$goods = pdo_get('wlmerchant_couponlist' , ['id' => $cutcou['parentid']] , ['overrefund']);
|
|
$orderid = pdo_getcolumn(PDO_NAME . 'order' , ['orderno' => $cutcou['orderno']] , 'id');
|
|
if ($orderset['reovertime'] && $goods['overrefund']) {
|
|
pdo_update('wlmerchant_order' , ['status' => 6] , ['id' => $orderid]);
|
|
self::refund($orderid , 0 , 0);
|
|
}
|
|
}
|
|
}
|
|
pdo_fetch("update" . tablename('wlmerchant_couponlist') . "SET name=title WHERE name = 0");
|
|
}
|
|
|
|
/**
|
|
* Comment: 卡券信息列表导出
|
|
* Author: zzw
|
|
* Date: 2020/11/9 18:03
|
|
* @param $where
|
|
*/
|
|
public static function exportCoupons($where){
|
|
//列表信息获取
|
|
$field = ['status','is_charge','id','merchantid','title','createtime','price','surplus','quantity','get_limit' ,'time_type','starttime','endtime','deadline'];
|
|
$list = pdo_getall(PDO_NAME."couponlist",$where,$field,'','indexorder DESC');
|
|
$newList = [];
|
|
//循环处理信息
|
|
foreach($list as $key => &$value){
|
|
//状态信息
|
|
switch ($value['status']){
|
|
case 0: $value['status'] = '已下架';break;
|
|
case 1: $value['status'] = '未开始';break;
|
|
case 2: $value['status'] = '活动中';break;
|
|
case 3: $value['status'] = '已结束';break;
|
|
case 4: $value['status'] = '已下架';break;
|
|
case 5: $value['status'] = '审核中';break;
|
|
case 6: $value['status'] = '被驳回';break;
|
|
case 8: $value['status'] = '回收站';break;
|
|
}
|
|
//判断是否免费
|
|
if($value['is_charge'] == 0) $value['price'] = '免费';
|
|
//获取商户信息
|
|
$value['storename'] = pdo_getcolumn(PDO_NAME."merchantdata",['id'=>$value['merchantid']],'storename');
|
|
//添加时间
|
|
$value['createtime'] = date("Y-m-d H:i:s",$value['createtime']);
|
|
//有效时间
|
|
if($value['time_type'] == 1) $value['time'] = date("Y-m-d",$value['starttime']) .' ~ '. date("Y-m-d",$value['endtime']);
|
|
else $value['time'] = "领取后{$value['deadline']}天内";
|
|
//库存信息
|
|
$value['stk'] = "{$value['quantity']}/{$value['surplus']}";
|
|
//限购信息
|
|
if($value['get_limit']> 0){
|
|
$value['get_limit'] = $value['get_limit'].'张';
|
|
} else{
|
|
$value['get_limit'] = '不限量';
|
|
}
|
|
//删除多余的信息
|
|
unset($value['is_charge'],$value['merchantid'],$value['time_type'],$value['starttime'],$value['endtime'],$value['deadline'] ,$value['surplus'] ,$value['quantity']);
|
|
//由于排序问题 需要重新生成新的数组 否则顺序不能进行自定义
|
|
$newList[] = [
|
|
'id' => $value['id'],
|
|
'title' => $value['title'],
|
|
'storename' => $value['storename'],
|
|
'price' => $value['price'] ,
|
|
'stk' => $value['stk'] ,
|
|
'limit' => $value['get_limit'],
|
|
'time' => $value['time'] ,
|
|
'status' => $value['status'] ,
|
|
'mobile' => ''
|
|
];
|
|
}
|
|
//标题内容
|
|
$filter = [
|
|
'id' => 'ID',
|
|
'title' => '标题' ,
|
|
'storename' => '店铺' ,
|
|
'price' => '价格' ,
|
|
'stk' => '总数量/已售数量' ,
|
|
'limit' => '每人限量' ,
|
|
'time' => '使用期限' ,
|
|
'status' => '状态' ,
|
|
'mobile' => '发放手机号'
|
|
];
|
|
|
|
util_csv::export_csv_2($newList, $filter, '卡券列表.csv');
|
|
exit();
|
|
}
|
|
|
|
|
|
/**
|
|
* Comment: 卡券发放
|
|
* Author: wlf
|
|
* Date: 2021/08/31 18:00
|
|
* @param $where
|
|
*/
|
|
public static function coupon_send($user,$coupons){
|
|
global $_W;
|
|
if($coupons['get_limit'] > 0){
|
|
$num = wlCoupon::getCouponNum($coupons['id'],1,$user);
|
|
if($num > $coupons['get_limit'] || $num == $coupons['get_limit']){
|
|
return array(
|
|
'errno' => 1,
|
|
'message' => '获取数量超过限制',
|
|
);
|
|
}
|
|
}
|
|
if($coupons['status'] != 1 && $coupons['status'] != 2){
|
|
return array(
|
|
'errno' => 1,
|
|
'message' => '卡券所在状态无法发放',
|
|
);
|
|
}
|
|
|
|
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 = array(
|
|
'uniacid' => $coupons['uniacid'],
|
|
'mid' => $user,
|
|
'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' => '后台卡券发放',
|
|
'paytime' => time()
|
|
);
|
|
$orderid = wlCoupon::saveCouponOrder($orderdata);
|
|
Order::createSmallorder($orderid,4);
|
|
//生成卡券
|
|
$data = array(
|
|
'mid' => $user,
|
|
'aid' => $coupons['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' => $coupons['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, array('id' => $orderid)); //更新订单状态
|
|
if($res){
|
|
//修改卡券的已售数量
|
|
$newsurplus = $coupons['surplus'] + 1;
|
|
wlCoupon::updateCoupons(array('surplus' => $newsurplus), array('id' => $coupons['id']));
|
|
//发送模板消息
|
|
$first = '一个卡券已经发放';
|
|
$type = '卡券发放通知';
|
|
$content = '卡券名:['.$coupons['title'].']';
|
|
$newStatus = '已到账';
|
|
$remark = '点击查看卡券';
|
|
$url = h5_url('pages/subPages/coupon/coupon');
|
|
News::jobNotice($user,$first,$type,$content,$newStatus,$remark,time(),$url);
|
|
return array(
|
|
'errno' => 0,
|
|
'message' => '发放成功',
|
|
);
|
|
}else{
|
|
return array(
|
|
'errno' => 1,
|
|
'message' => '发放失败',
|
|
);
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|