1280 行
52 KiB
PHP
可执行文件
1280 行
52 KiB
PHP
可执行文件
<?php
|
||
|
||
namespace Common\Business;
|
||
|
||
use Common\Model\RetailMCouponGroupModel;
|
||
use Common\Model\RetailMCouponModel;
|
||
use Common\Model\RetailMessageModel;
|
||
use Common\Model\RetailSmallProgramUserModel;
|
||
use Common\Model\RetailVipMCouponModel;
|
||
|
||
//[1.7.90]
|
||
|
||
/**
|
||
* 优惠券操作类
|
||
* Class CouponOperation
|
||
* [
|
||
* 优惠券充值设置 rechargeSet
|
||
* 优惠券支付设置 paySet
|
||
* 优惠券使失效 couponInvalid
|
||
* 批量发放优惠券 BatchGrantCoupon
|
||
* 发放优惠券操作 grantOperation
|
||
* 编辑券包 editPackage
|
||
* 创建券包 createCouponPackage
|
||
* 编辑优惠券 editCoupon
|
||
* 创建优惠券 createCoupon
|
||
* 创建优惠券参数验证 createCouponVerify
|
||
* 创建优惠券局部参数验证 createCouponPartVerify
|
||
* ]
|
||
* @package Common\Business
|
||
*/
|
||
class CouponOperation
|
||
{
|
||
/**
|
||
* 充值设置
|
||
* @param $param
|
||
* [
|
||
* user_type 3商户 4门店
|
||
* merchant_id
|
||
* store_id
|
||
* id 券id
|
||
* recharge_state 充值赠送(无关优惠券类型) 0.关闭 1.开启
|
||
* money 充值赠送的金额门槛
|
||
* ]
|
||
* @return mixed
|
||
*/
|
||
public function rechargeSet($param)
|
||
{
|
||
$verifyClass = new VerifyParam();
|
||
$verifyResult = $verifyClass->identityVerify($param);
|
||
if ($verifyResult['status'] != 1) {
|
||
return $verifyResult;
|
||
}
|
||
if (empty($param['id'])) {
|
||
return callBack(statusCode()['error'], '缺少优惠券id');
|
||
}
|
||
if ($param['recharge_state'] == 1) {
|
||
$reg = "/^[0-9]+(.[0-9]{1,2})?$/";
|
||
if (empty($param['money']) || !preg_match($reg, $param['money'])) {
|
||
return callBack(statusCode()['error'], "请输入正确的金额");
|
||
}
|
||
}
|
||
try {
|
||
$CouponModel = new RetailMCouponModel();
|
||
$save = $CouponModel->updateOrder([
|
||
'id' => $param['id'],
|
||
'merchantid' => $param['merchant_id']
|
||
], [
|
||
'recharge_state' => $param['recharge_state'] ? $param['recharge_state'] : 0,
|
||
'money' => $param['money'] ? $param['money'] : 0
|
||
]);
|
||
if ($save) {
|
||
return callBack(statusCode()['success'], "操作成功");
|
||
} else {
|
||
return callBack(statusCode()['error'], "暂无修改");
|
||
}
|
||
} catch (\Exception $e) {
|
||
return callBack(statusCode()['error'], "暂无修改");
|
||
}
|
||
}
|
||
|
||
|
||
/**
|
||
* 支付设置
|
||
* @param $param
|
||
* [
|
||
* user_type 3商户 4门店
|
||
* merchant_id
|
||
* store_id
|
||
* id 优惠券id
|
||
* payment_state 支付设置 0 关闭 1开启
|
||
* payment_money 满足支付发放的支付金额
|
||
* ]
|
||
* @return mixed
|
||
*/
|
||
public function paySet($param)
|
||
{
|
||
$verifyClass = new VerifyParam();
|
||
$verifyResult = $verifyClass->identityVerify($param);
|
||
if ($verifyResult['status'] != 1) {
|
||
return $verifyResult;
|
||
}
|
||
if (empty($param['id'])) {
|
||
return callBack(statusCode()['error'], '缺少优惠券id');
|
||
}
|
||
$reg = "/^[0-9]+(.[0-9]{1,2})?$/";
|
||
if (empty($param['payment_money']) || !preg_match($reg, $param['payment_money'])) {
|
||
return callBack(statusCode()['error'], "请输入正确的金额");
|
||
}
|
||
try {
|
||
$CouponModel = new RetailMCouponModel();
|
||
$save = $CouponModel->updateOrder([
|
||
'id' => $param['id'],
|
||
'merchantid' => $param['merchant_id']
|
||
], [
|
||
'payment_state' => $param['payment_state'] ? $param['payment_state'] : 0,
|
||
'payment_money' => $param['payment_money']
|
||
]);
|
||
if ($save) {
|
||
return callBack(statusCode()['success'], "操作成功");
|
||
} else {
|
||
return callBack(statusCode()['error'], "暂无修改");
|
||
}
|
||
} catch (\Exception $e) {
|
||
return callBack(statusCode()['error'], "暂无修改");
|
||
}
|
||
}
|
||
|
||
|
||
/**
|
||
* 优惠券失效
|
||
* @param $param
|
||
* [
|
||
* operator_type 1后台 2收银端 3助手端
|
||
* user_type 3商户 4门店
|
||
* merchant_id
|
||
* store_id
|
||
* coupon_type 1优惠券 2券包
|
||
* id
|
||
* ]
|
||
* @return mixed
|
||
*/
|
||
public function couponInvalid($param)
|
||
{
|
||
$verifyClass = new VerifyParam();
|
||
$verifyResult = $verifyClass->identityVerify($param);
|
||
if ($verifyResult['status'] != 1) {
|
||
return $verifyResult;
|
||
}
|
||
if (!in_array($param['coupon_type'], ['1', '2'])) {
|
||
return callBack(statusCode()['error'], "缺少券类型");
|
||
}
|
||
if (empty($param['id'])) {
|
||
return callBack(statusCode()['error'], "缺少券ID");
|
||
}
|
||
try {
|
||
$CouponModel = new RetailMCouponModel();
|
||
switch ($param['coupon_type']) {
|
||
case 1:
|
||
//优惠券
|
||
$save = $CouponModel->updateOrder([
|
||
'id' => $param['id']
|
||
], [
|
||
'status' => 2
|
||
]);
|
||
break;
|
||
case 2:
|
||
//券包
|
||
$save_coupon = $CouponModel->updateOrder([
|
||
'mcoupon_group_id' => $param['id'],
|
||
'type' => 2
|
||
], [
|
||
'status' => 2
|
||
]);
|
||
if ($save_coupon) {
|
||
$PackageCouponModel = new RetailMCouponGroupModel();
|
||
$save_package = $PackageCouponModel->updateOrder([
|
||
'id' => $param['id']
|
||
], [
|
||
'status' => 2
|
||
]);
|
||
}
|
||
break;
|
||
}
|
||
if ($save || $save_package) {
|
||
return callBack(statusCode()['success'], '操作成功');
|
||
} else {
|
||
return callBack(statusCode()['error'], '暂无修改');
|
||
}
|
||
} catch (\Exception $e) {
|
||
return callBack(statusCode()['error'], '暂无修改');
|
||
}
|
||
}
|
||
|
||
|
||
/**
|
||
* 批量发放优惠券
|
||
* @param $param
|
||
* [
|
||
* operator_type 1后台 2收银端 3助手端
|
||
* operator_id 操作人id
|
||
* user_type 3商户 4门店
|
||
* merchant_id
|
||
* store_id
|
||
* batch_type 1优惠券 2券包
|
||
* grant_type 1批量 2指定
|
||
* vip_id_arr 指定的会员id ,拼接
|
||
* id 优惠券或券包id
|
||
* page
|
||
* limit
|
||
* ]
|
||
* @return mixed
|
||
*/
|
||
public function batchGrantCoupon($param)
|
||
{
|
||
$verifyClass = new VerifyParam();
|
||
$verifyResult = $verifyClass->identityVerify($param);
|
||
if ($verifyResult['status'] != 1) {
|
||
return $verifyResult;
|
||
}
|
||
if (!in_array($param['batch_type'], ['1', '2'])) {
|
||
return callBack(statusCode()['error'], "缺少券类型");
|
||
}
|
||
if (!in_array($param['grant_type'], ['1', '2'])) {
|
||
return callBack(statusCode()['error'], "缺少发放类型");
|
||
}
|
||
if (empty($param['id'])) {
|
||
return callBack(statusCode()['error'], "缺少券ID");
|
||
}
|
||
if (C('IS_SET_REDIS')) {
|
||
if ($param['batch_type'] == 1) {
|
||
//优惠券
|
||
$redis_key = 'retail_merchant_id_' . $param['merchant_id'] . '_coupon_type_2_coupon_id_' . $param['id'];
|
||
} else if ($param['batch_type'] == 2) {
|
||
//券包
|
||
$redis_key = 'retail_merchant_id_' . $param['merchant_id'] . '_coupon_package_id_' . $param['id'];
|
||
}
|
||
$CacheClass = new CacheHandle();
|
||
$CacheClass->testingKey($redis_key);
|
||
$keyState = $CacheClass->isExists($redis_key);
|
||
if ($keyState == 1) {
|
||
return callBack(statusCode()['error'], "该券正在操作中,请稍候");
|
||
}
|
||
$CacheClass->startAffair();
|
||
$CacheClass->addTimeCache($redis_key, 60, $param['id']);
|
||
}
|
||
$CouponModel = new RetailMCouponModel();
|
||
$time = $_SERVER['REQUEST_TIME'];
|
||
$where = [
|
||
'id' => $param['id'],
|
||
];
|
||
switch ($param['batch_type']) {
|
||
case 1:
|
||
//优惠券
|
||
$fields = [
|
||
'id',
|
||
'coupon_name',
|
||
'starttime',
|
||
'endtime',
|
||
'needmoney',
|
||
'reducemoney',
|
||
'storeids',
|
||
'type',
|
||
'coupon_gradeid',
|
||
'status',
|
||
'coupon_num',
|
||
'coupontype',
|
||
'daynum',
|
||
'merchantid',
|
||
'mcoupon_group_id',
|
||
];
|
||
try {
|
||
$coupon_info = $CouponModel->getFind($where, $fields);
|
||
} catch (\Exception $e) {
|
||
return callBack(statusCode()['error'], "未找到该优惠券");
|
||
}
|
||
if (empty($coupon_info)) {
|
||
return callBack(statusCode()['error'], "未找到该优惠券");
|
||
}
|
||
if ($coupon_info['status'] != 1) {
|
||
return callBack(statusCode()['error'], "该优惠券已下架");
|
||
}
|
||
if ($coupon_info['coupon_num'] <= 0 && $param['page'] == 1) {
|
||
return callBack(statusCode()['error'], "该优惠券库存不足");
|
||
}
|
||
if ($coupon_info['coupontype'] == 1) {
|
||
if ($coupon_info['endtime'] < $time) {
|
||
return callBack(statusCode()['error'], "该优惠券已过期");
|
||
}
|
||
}
|
||
$store_id_arr = $coupon_info['storeids'];
|
||
$grade_id_arr = $coupon_info['coupon_gradeid'];
|
||
$grant_num = $coupon_info['coupon_num'];
|
||
$coupon_list[] = $coupon_info;
|
||
break;
|
||
case 2:
|
||
//券包
|
||
$fields = [
|
||
'id',
|
||
'coupon_group_num',
|
||
'storeids',
|
||
'gradeids',
|
||
'status'
|
||
];
|
||
try {
|
||
$PackageCouponModel = new RetailMCouponGroupModel();
|
||
$package_info = $PackageCouponModel->getFind($where, $fields);
|
||
} catch (\Exception $e) {
|
||
return callBack(statusCode()['error'], "未找到该券包");
|
||
}
|
||
if (empty($package_info)) {
|
||
return callBack(statusCode()['error'], "未找到该券包");
|
||
}
|
||
if ($package_info['status'] != 1) {
|
||
return callBack(statusCode()['error'], "该券包已下架");
|
||
}
|
||
if ($package_info['coupon_group_num'] <= 0) {
|
||
return callBack(statusCode()['error'], "该券包库存不足");
|
||
}
|
||
$map = [
|
||
'type' => 2,
|
||
'mcoupon_group_id' => $param['id'],
|
||
'merchantid' => $param['merchant_id'],
|
||
[
|
||
[
|
||
'coupontype' => 1,
|
||
'endtime' => ['gt', $time]
|
||
],
|
||
'coupontype' => ['neq', 1],
|
||
'_logic' => 'OR'
|
||
]
|
||
];
|
||
$fields = [
|
||
'id',
|
||
'coupon_name',
|
||
'starttime',
|
||
'endtime',
|
||
'needmoney',
|
||
'reducemoney',
|
||
'storeids',
|
||
'type',
|
||
'coupon_gradeid',
|
||
'status',
|
||
'coupon_num',
|
||
'coupontype',
|
||
'merchantid',
|
||
'mcoupon_group_id',
|
||
'daynum',
|
||
];
|
||
try {
|
||
$coupon_list = $CouponModel->getSelect($map, $fields, 'id asc');
|
||
} catch (\Exception $e) {
|
||
return callBack(statusCode()['error'], "暂无可用优惠券");
|
||
}
|
||
if (empty($coupon_list)) {
|
||
return callBack(statusCode()['error'], "暂无可用优惠券");
|
||
}
|
||
$store_id_arr = $package_info['storeids'];
|
||
$grade_id_arr = $package_info['gradeids'];
|
||
$grant_num = $package_info['coupon_group_num'];
|
||
break;
|
||
}
|
||
switch ($param['grant_type']) {
|
||
case 1:
|
||
//批量
|
||
if ($grade_id_arr == '-1') {
|
||
$fields = ['v.id'];
|
||
} else {
|
||
$fields = ['id'];
|
||
}
|
||
$VipClass = new VipInfo();
|
||
$vipResult = $VipClass->basisStoreGetVip([
|
||
'user_type' => $param['user_type'],
|
||
'merchant_id' => $param['merchant_id'],
|
||
'store_id_str' => $store_id_arr,
|
||
'grade_id_str' => $grade_id_arr,
|
||
'fields' => $fields,
|
||
'page' => $param['page'],
|
||
'limit' => $param['limit']
|
||
]); //获取会员集合
|
||
if ($vipResult['status'] != 1) {
|
||
return $vipResult;
|
||
}
|
||
$vip_id_arr = $vipResult['data']['vip_id_arr'];
|
||
$vip_count = count($vip_id_arr);
|
||
$vip_id_arr = array_column($vip_id_arr, 'id');
|
||
if (empty($vip_id_arr)) {
|
||
if ($param['page'] == 1) {
|
||
return callBack(statusCode()['error'], "未找到符合条件的会员", [
|
||
'vip_count' => 0
|
||
]);
|
||
} else {
|
||
return callBack(statusCode()['success'], "发放成功", [
|
||
'vip_count' => 0
|
||
]);
|
||
}
|
||
}
|
||
break;
|
||
case 2:
|
||
//指定
|
||
if (empty($param['vip_id_arr'])) {
|
||
return callBack(statusCode()['error'], '请选择会员');
|
||
}
|
||
$vip_id_arr = $param['vip_id_arr'];
|
||
$vip_id_arr = explode(',', $vip_id_arr);
|
||
if (empty($vip_id_arr)) {
|
||
return callBack(statusCode()['error'], "暂无可以发放的会员");
|
||
}
|
||
break;
|
||
}
|
||
$result = $this->grantOperation([
|
||
'grant_num' => $grant_num,
|
||
'vip_id_arr' => $vip_id_arr,
|
||
'coupon_list' => $coupon_list,
|
||
'batch_type' => $param['batch_type'],
|
||
'id' => $param['id'],
|
||
'operator_id' => $param['operator_id'],
|
||
'user_type' => $param['user_type']
|
||
]);
|
||
if ($param['grant_type'] == 1) {
|
||
if ($grant_num < $vip_count) {
|
||
$vip_count = $grant_num;
|
||
}
|
||
$result['data'] = [
|
||
'vip_count' => $vip_count ? intval($vip_count) : 0
|
||
];
|
||
}
|
||
return $result;
|
||
}
|
||
|
||
|
||
/**
|
||
* 发放优惠券操作
|
||
* @param $param
|
||
* [
|
||
* grant_num 发放的数量
|
||
* vip_id_arr 会员id集合
|
||
* coupon_list 优惠券集合
|
||
* batch_type 1优惠券 2券包
|
||
* operator_id 操作人id
|
||
* user_type 3商户 4门店
|
||
* id 券包id
|
||
* ]
|
||
* @return mixed
|
||
*/
|
||
public function grantOperation($param)
|
||
{
|
||
$time = $_SERVER['REQUEST_TIME'];
|
||
$vip_id_arr = $param['vip_id_arr'];
|
||
$coupon_list = $param['coupon_list'];
|
||
$grant_num = $param['grant_num'];
|
||
$id = $param['id'];
|
||
$operator_id = $param['operator_id'];
|
||
$user_type = $param['user_type'];
|
||
$batch_type = $param['batch_type'];
|
||
$VipCouponRecordModel = new RetailVipMCouponModel();
|
||
$CouponModel = new RetailMCouponModel();
|
||
$PackageCouponModel = new RetailMCouponGroupModel();
|
||
$XcxUserModel = new RetailSmallProgramUserModel();
|
||
//发放优惠券
|
||
$num = 0;
|
||
$grant_vip_num = 0; //发放的会员数
|
||
try {
|
||
foreach ($vip_id_arr as $key => $value) {
|
||
if (($key + 1) > $grant_num) {
|
||
return callBack(statusCode()['success'], '优惠券发放完毕');
|
||
} else {
|
||
$uid = $XcxUserModel->getFindField(['vid' => $value], 'id');
|
||
$isVip = $uid ? true : false;
|
||
$grant_vip_num++;
|
||
foreach ($coupon_list as $val) {
|
||
$data = [
|
||
'vid' => $value,
|
||
'mcouponid' => $val['id'],
|
||
'starttime' => $val['starttime'],
|
||
'endtime' => $val['endtime'],
|
||
'needmoney' => $val['needmoney'],
|
||
'reducemoney' => $val['reducemoney'],
|
||
'isuse' => 1,
|
||
'canusestoreids' => $val['storeids'],
|
||
'merchantid' => $val['merchantid'],
|
||
'addtime' => $time,
|
||
'status' => 2,
|
||
'type' => $val['type'],
|
||
'mcoupon_group_id' => $val['mcoupon_group_id'] ? $val['mcoupon_group_id'] : null,
|
||
'operator_id' => $operator_id,
|
||
'user_type' => $user_type
|
||
];
|
||
$record_id = $VipCouponRecordModel->addOrder($data);
|
||
if ($record_id) {
|
||
if ($isVip) {
|
||
$RetailMessageModel = new RetailMessageModel();
|
||
$RetailMessageModel->couponSkipAdd($uid, $val['id']);
|
||
}
|
||
//发放成功
|
||
$CouponModel->toSetDec([
|
||
'id' => $val['id']
|
||
], 'coupon_num', 1);
|
||
$num++;
|
||
$fisrt = "尊敬的用户,赠送您一张" . $val['coupon_name'];
|
||
switch ($val['coupontype']) {
|
||
case 1:
|
||
$remark = '提示:优惠券在' . date('Y-m-d', $val['starttime']) . '到' . date('Y-m-d', $val['endtime']) . '有效期内可以使用';
|
||
break;
|
||
case 2:
|
||
$remark = '提示:优惠券在领取日当日开始' . $val['daynum'] . '天内有效';
|
||
break;
|
||
case 3:
|
||
$remark = '提示:优惠券在领取后次日开始' . $val['daynum'] . '天内有效';
|
||
break;
|
||
}
|
||
A('Vip/Mark')->launchcoupon($value, $fisrt, $remark, $data);
|
||
}
|
||
}
|
||
if ($batch_type == 2) {
|
||
$PackageCouponModel->toSetDec(['id' => $id], 'coupon_group_num', 1);
|
||
}
|
||
}
|
||
}
|
||
if ($num > 0) {
|
||
return callBack(statusCode()['success'], "发放成功", [
|
||
'grant_vip_num' => $grant_vip_num
|
||
]);
|
||
} else {
|
||
return callBack(statusCode()['error'], "发放失败");
|
||
}
|
||
} catch (\Exception $e) {
|
||
return callBack(statusCode()['error'], "发放失败");
|
||
}
|
||
}
|
||
|
||
|
||
/**
|
||
* 券包编辑
|
||
* @param $param
|
||
* [
|
||
* operator_type 1后台 2收银端 3助手端
|
||
* operator_id 操作人id
|
||
* user_type 3商户 4门店
|
||
* merchant_id
|
||
* store_id
|
||
* coupon json字符串=>[
|
||
* id 券id
|
||
* coupon_name 名称
|
||
* coupon_amount 券包数量
|
||
* coupon_list=>[
|
||
* id
|
||
* coupon_name 优惠券名称
|
||
* explain 说明
|
||
* ]
|
||
* ]
|
||
* @return mixed
|
||
*/
|
||
public function editPackage($param)
|
||
{
|
||
$VerifyClass = new VerifyParam(); //参数验证
|
||
$verifyResult = $VerifyClass->identityVerify($param);
|
||
if ($verifyResult['status'] != 1) {
|
||
return $verifyResult;
|
||
}
|
||
$coupon = json_decode($param['coupon'], true);
|
||
$coupon_list = $coupon['coupon_list'];
|
||
if (empty($coupon) || empty($coupon['id'])) {
|
||
return callBack(statusCode()['error'], "登录超时");
|
||
}
|
||
if (empty($coupon_list)) {
|
||
return callBack(statusCode()['error'], "缺少优惠券信息");
|
||
}
|
||
$CouponPackageModel = new RetailMCouponGroupModel();
|
||
$package_info = $CouponPackageModel->getFind([
|
||
'id' => $coupon['id']
|
||
], 'coupon_group_allnum,coupon_group_num,id');
|
||
if (empty($package_info)) {
|
||
return callBack(statusCode()['error'], "未找到该券包");
|
||
}
|
||
$reg1 = "/^\+?[0-9][0-9]*$/";
|
||
if ($coupon['coupon_amount'] < ($package_info['coupon_group_allnum'] - $package_info['coupon_group_num']) || !preg_match($reg1, $coupon['coupon_amount'])) {
|
||
return callBack(statusCode()['error'], "请输入正确的发放数量,且不能小于已发数量" . $package_info['coupon_amount']);
|
||
}
|
||
if ($coupon['coupon_amount'] > 10000000) {
|
||
return callBack(statusCode()['error'], "券包发放总量不能超过一千万");
|
||
}
|
||
if (mb_strlen($coupon['coupon_name'], 'UTF8') > 120) {
|
||
return callBack(statusCode()['error'], "优惠券名称不能超过120个字符");
|
||
}
|
||
foreach ($coupon_list as $val) {
|
||
if (empty($val['id'])) {
|
||
return callBack(statusCode()['error'], $val['coupon_name'] . "缺少优惠券ID");
|
||
}
|
||
if (mb_strlen($val['coupon_name'], 'UTF8') > 120 || empty($val['coupon_name'])) {
|
||
return callBack(statusCode()['error'], $val['coupon_name'] . "优惠券名称不能为空且超过120个字符");
|
||
}
|
||
if (mb_strlen($val['explain'], 'UTF8') > 500) {
|
||
return callBack(statusCode()['error'], $val['coupon_name'] . "使用说明不得超过500个字符");
|
||
}
|
||
}
|
||
try {
|
||
$package = [
|
||
'coupon_group_name' => $coupon['coupon_name'],
|
||
'coupon_group_allnum' => $coupon['coupon_amount'],
|
||
'edit_time' => $_SERVER['REQUEST_TIME'],
|
||
'operator_type' => $param['operator_type'],
|
||
'operator_id' => $param['operator_id']
|
||
];
|
||
$package_save = $CouponPackageModel->updateOrder([
|
||
'id' => $coupon['id']
|
||
], $package);
|
||
$coupon_group_num = $coupon['coupon_amount'] - $package_info['coupon_group_allnum'];
|
||
if ($coupon_group_num > 0) {
|
||
$num_save = $CouponPackageModel->toSetInc(['id' => $coupon['id']], 'coupon_group_num', $coupon_group_num);
|
||
} else if ($coupon_group_num < 0) {
|
||
$num_save = $CouponPackageModel->toSetDec(['id' => $coupon['id']], 'coupon_group_num', abs($coupon_group_num));
|
||
}
|
||
$CouponModel = new RetailMCouponModel();
|
||
$coupon_save_num = 0;
|
||
foreach ($coupon_list as $val) {
|
||
$data = [
|
||
'coupon_name' => $val['coupon_name'],
|
||
'detailmsg' => $val['explain'],
|
||
'coupon_allnum' => $coupon['coupon_amount'],
|
||
'edit_time' => $_SERVER['REQUEST_TIME'],
|
||
'operator_type' => $param['operator_type'],
|
||
'operator_id' => $param['operator_id']
|
||
];
|
||
$coupon_save = $CouponModel->updateOrder([
|
||
'id' => $val['id']
|
||
], $data);
|
||
if ($coupon_group_num > 0) {
|
||
$coupon_num_save = $CouponModel->toSetInc(['id' => $val['id']], 'coupon_num', $coupon_group_num);
|
||
} else if ($coupon_group_num < 0) {
|
||
$coupon_num_save = $CouponModel->toSetDec(['id' => $val['id']], 'coupon_num', abs($coupon_group_num));
|
||
}
|
||
if ($coupon_save || $coupon_num_save) {
|
||
$coupon_save_num++;
|
||
}
|
||
}
|
||
if (empty($package_save) && empty($num_save) && $coupon_save_num == 0) {
|
||
return callBack(statusCode()['error'], "暂无修改");
|
||
} else {
|
||
return callBack(statusCode()['success'], "修改成功");
|
||
}
|
||
} catch (\Exception $e) {
|
||
return callBack(statusCode()['error'], "暂无修改");
|
||
}
|
||
}
|
||
|
||
|
||
/**
|
||
* 创建券包
|
||
* @param $param
|
||
* [
|
||
* operator_type 1后台 2收银端 3助手端
|
||
* operator_id 操作人id
|
||
* user_type 3商户 4门店
|
||
* merchant_id
|
||
* store_id
|
||
* type 1优惠券 2券包
|
||
* coupon json字符串 优惠券信息=>
|
||
* [
|
||
* coupon_name 名称
|
||
* coupon_amount 优惠券数量
|
||
* grant_type 发放类型 1. 自主发放 2. 充值赠送 3支付成功后发放
|
||
* choose_store 指定门店类型 0所有门店 1指定门店
|
||
* store_id_arr 指定的门店id 集合
|
||
* choose_grade 指定会员等级 0所有等级 1指定等级 -1plus会员
|
||
* vip_grade_id 优惠券发放用户vip等级:-1、plus会员 0、所有用户;其他:以等级id连接
|
||
* coupon_list=>[
|
||
* coupon_name 优惠券名称
|
||
* consumption_threshold 消费门槛
|
||
* discount_amount 优惠金额
|
||
* explain 说明
|
||
* validity_time_type 有效期类型:1,开始---结束。2,领取日后N天,3,领取日次日后N天。
|
||
* appoint_type 1 全部商品 2指定分类 3指定商品
|
||
* appoint_id_arr 指定分类或商品id的集合
|
||
* start_time 有效期的开始时间
|
||
* end_time 有效期的结束时间
|
||
* day_num 领取后的有效天数
|
||
* ]
|
||
* ]
|
||
* ]
|
||
* @return mixed
|
||
*/
|
||
public function createCouponPackage($param)
|
||
{
|
||
$verifyResult = $this->createCouponVerify($param); //参数验证
|
||
if ($verifyResult['status'] != 1) {
|
||
return $verifyResult;
|
||
}
|
||
$time = $_SERVER['REQUEST_TIME'];
|
||
$coupon = $param['coupon']; //券包信息
|
||
$couponList = $coupon['coupon_list']; //优惠券信息
|
||
$data = [
|
||
'merchantid' => $param['merchant_id'],
|
||
'coupon_group_name' => $coupon['coupon_name'],
|
||
'coupon_group_allnum' => $coupon['coupon_amount'],
|
||
'coupon_group_num' => $coupon['coupon_amount'],
|
||
'give_status' => $coupon['grant_type'],
|
||
'status' => 3,
|
||
'addtime' => $time,
|
||
'edit_time' => $time,
|
||
'operator_type' => $param['operator_type'],
|
||
'operator_id' => $param['operator_id'],
|
||
'user_type' => $param['user_type']
|
||
]; //券包信息
|
||
$single_coupon = [
|
||
'merchantid' => $param['merchant_id'],
|
||
'coupon_allnum' => $coupon['coupon_amount'],
|
||
'coupon_num' => $coupon['coupon_amount'],
|
||
'give_status' => $coupon['grant_type'],
|
||
'type' => 2,
|
||
'maxnum' => 0,
|
||
'status' => 1,
|
||
'addtime' => $time,
|
||
'user_type' => $param['user_type'],
|
||
'edit_time' => $time,
|
||
'operator_type' => $param['operator_type'],
|
||
'operator_id' => $param['operator_id'],
|
||
]; //单张优惠券信息
|
||
switch ($coupon['grant_type']) {
|
||
case '1':
|
||
// 1. 自主发放
|
||
if (($coupon['choose_store'] == 1 && $param['user_type'] == 3)) {
|
||
$data['storeids'] = $coupon['store_id_arr'];
|
||
$single_coupon['storeids'] = $data['storeids'];
|
||
} else if ($param['user_type'] == 4) {
|
||
$data['storeids'] = $param['store_id'];
|
||
$single_coupon['storeids'] = $param['store_id'];
|
||
} else {
|
||
$data['storeids'] = 0;
|
||
$single_coupon['storeids'] = 0;
|
||
}
|
||
switch ($coupon['choose_grade']) {
|
||
case '-1':
|
||
$data['gradeids'] = '-1';
|
||
$single_coupon['coupon_gradeid'] = '-1';
|
||
break;
|
||
case '0':
|
||
$data['gradeids'] = '0';
|
||
$single_coupon['coupon_gradeid'] = '0';
|
||
break;
|
||
case '1':
|
||
$data['gradeids'] = $coupon['vip_grade_id'];
|
||
$single_coupon['coupon_gradeid'] = $data['coupon_gradeid'];
|
||
break;
|
||
}
|
||
break;
|
||
case '2':
|
||
//充值
|
||
$data['gradeids'] = '0';
|
||
$single_coupon['coupon_gradeid'] = '0';
|
||
if (($coupon['choose_store'] == 1 && $param['user_type'] == 3)) {
|
||
$data['storeids'] = $coupon['store_id_arr'];
|
||
$single_coupon['storeids'] = $data['storeids'];
|
||
} else if ($param['user_type'] == 4) {
|
||
$data['storeids'] = $param['store_id'];
|
||
$single_coupon['storeids'] = $param['store_id'];
|
||
} else {
|
||
$data['storeids'] = 0;
|
||
$single_coupon['storeids'] = 0;
|
||
}
|
||
break;
|
||
}
|
||
try {
|
||
M()->startTrans();
|
||
$MCouponGroupModel = new RetailMCouponGroupModel();
|
||
$package_id = $MCouponGroupModel->addOrder($data);
|
||
if (empty($package_id)) {
|
||
M()->rollback();
|
||
return callBack(statusCode()['error'], "券包创建失败");
|
||
}
|
||
$single_coupon['mcoupon_group_id'] = $package_id;
|
||
$z_single_coupon = []; //单张优惠券集合
|
||
$package_coupon_money = 0;
|
||
foreach ($couponList as $val) {
|
||
$package_coupon_money += $val['discount_amount'];
|
||
$single_coupon['coupon_name'] = $val['coupon_name'];
|
||
$single_coupon['detailmsg'] = $val['explain'] ? $val['explain'] : '';
|
||
$single_coupon['needmoney'] = $val['consumption_threshold'];
|
||
$single_coupon['reducemoney'] = $val['discount_amount'];
|
||
$single_coupon['coupontype'] = $val['validity_time_type'];
|
||
switch ($val['validity_time_type']) {
|
||
case '1':
|
||
$single_coupon['starttime'] = strtotime($val['start_time']);
|
||
$single_coupon['endtime'] = strtotime($val['end_time']);
|
||
$single_coupon['daynum'] = 1; //默认值
|
||
break;
|
||
case '2':
|
||
case '3':
|
||
$single_coupon['starttime'] = ''; //默认值
|
||
$single_coupon['endtime'] = '';
|
||
$single_coupon['daynum'] = $val['day_num'];
|
||
break;
|
||
}
|
||
if (($coupon['choose_store'] == 1 && count($data['storeids']) == 1 && $param['user_type'] == 3) || $param['user_type'] == 4) {
|
||
$single_coupon['appoint_type'] = $val['appoint_type'] ? $val['appoint_type'] : 1;
|
||
if ($val['appoint_type'] == 2 || $val['appoint_type'] == 3) {
|
||
$single_coupon['appoint_id_str'] = $val['appoint_id_arr'];
|
||
}
|
||
}
|
||
$single_coupon['appoint_type'] = $single_coupon['appoint_type'] ? $single_coupon['appoint_type'] : 1;
|
||
$single_coupon['appoint_id_str'] = $single_coupon['appoint_id_str'] ? $single_coupon['appoint_id_str'] : null;
|
||
$z_single_coupon[] = $single_coupon;
|
||
unset($single_coupon['starttime']);
|
||
unset($single_coupon['endtime']);
|
||
unset($single_coupon['daynum']);
|
||
unset($single_coupon['appoint_type']);
|
||
unset($single_coupon['appoint_id_str']);
|
||
}
|
||
$CouponModel = new RetailMCouponModel();
|
||
$single_id = $CouponModel->addAll($z_single_coupon);
|
||
if (empty($single_id)) {
|
||
M()->rollback();
|
||
return callBack(statusCode()['error'], "创建失败");
|
||
}
|
||
$save = $MCouponGroupModel->updateOrder([
|
||
'id' => $package_id
|
||
], [
|
||
'status' => 1,
|
||
'coupon_group_money' => $package_coupon_money
|
||
]);
|
||
if ($save) {
|
||
M()->commit();
|
||
return callBack(statusCode()['success'], "创建成功");
|
||
} else {
|
||
M()->rollback();
|
||
return callBack(statusCode()['error'], "创建失败");
|
||
}
|
||
} catch (\Exception $e) {
|
||
return callBack(statusCode()['error'], "创建失败");
|
||
}
|
||
}
|
||
|
||
|
||
/**
|
||
* 编辑优惠券
|
||
* @param $param
|
||
* [
|
||
* operator_type 1后台 2收银端 3助手端
|
||
* operator_id 操作人id
|
||
* user_type 3商户 4门店
|
||
* merchant_id
|
||
* store_id
|
||
* coupon json字符串=>[
|
||
* id 券id
|
||
* coupon_name 名称
|
||
* coupon_amount 优惠券数量
|
||
* explain 说明
|
||
* ]
|
||
* ]
|
||
* @return mixed
|
||
*/
|
||
public function editCoupon($param)
|
||
{
|
||
$VerifyClass = new VerifyParam();
|
||
$verifyResult = $VerifyClass->identityVerify($param);
|
||
if ($verifyResult['status'] != 1) {
|
||
return $verifyResult;
|
||
}
|
||
$coupon = json_decode($param['coupon'], true);
|
||
if (empty($coupon) || empty($coupon['id'])) {
|
||
return callBack(statusCode()['error'], "登录超时");
|
||
}
|
||
$where = [
|
||
'id' => $coupon['id']
|
||
];
|
||
try {
|
||
$CouponModel = new RetailMCouponModel();
|
||
$coupon_info = $CouponModel->getFind($where, "coupon_allnum,id,coupon_num");
|
||
if (empty($coupon_info)) {
|
||
return callBack(statusCode()['error'], "未找到该优惠券");
|
||
}
|
||
if ($coupon['coupon_amount'] < ($coupon_info['coupon_allnum'] - $coupon_info['coupon_num'])) {
|
||
return callBack(statusCode()['error'], "优惠券发放总量不能小于已发数量" . $coupon_info['coupon_allnum']);
|
||
}
|
||
if (mb_strlen($coupon['coupon_name'], 'UTF8') > 120) {
|
||
return callBack(statusCode()['error'], "优惠券名称不能超过120个字符");
|
||
}
|
||
if ($coupon['coupon_amount'] > 10000000 || $coupon['coupon_amount'] <= 0) {
|
||
return callBack(statusCode()['error'], "优惠券发放总量不能超过一千万");
|
||
}
|
||
if (mb_strlen($coupon['explain'], 'UTF8') > 500) {
|
||
return callBack(statusCode()['error'], "使用说明不得超过500个字符");
|
||
}
|
||
$data = [
|
||
'coupon_name' => $coupon['coupon_name'],
|
||
'coupon_allnum' => $coupon['coupon_amount'],
|
||
'detailmsg' => $coupon['explain'],
|
||
'operator_type' => $param['operator_type'],
|
||
'operator_id' => $param['operator_id'],
|
||
'edit_time' => $_SERVER['REQUEST_TIME'],
|
||
];
|
||
$result = $CouponModel->updateOrder($where, $data);
|
||
$coupon_num = $coupon['coupon_amount'] - $coupon_info['coupon_allnum'];
|
||
if ($coupon_num > 0) {
|
||
$save_num = $CouponModel->toSetInc($where, 'coupon_num', $coupon_num);
|
||
} else if ($coupon_num < 0) {
|
||
$save_num = $CouponModel->toSetDec($where, 'coupon_num', $coupon_num);
|
||
}
|
||
if ($result || $save_num) {
|
||
return callBack(statusCode()['success'], "修改成功");
|
||
} else {
|
||
return callBack(statusCode()['error'], "暂无修改");
|
||
}
|
||
} catch (\Exception $e) {
|
||
return callBack(statusCode()['error'], "暂无修改");
|
||
}
|
||
}
|
||
|
||
|
||
/**
|
||
* 创建优惠券
|
||
* @param $param
|
||
* [
|
||
* operator_type 1后台 2收银端 3助手端
|
||
* operator_id 操作人id
|
||
* user_type 3商户 4门店
|
||
* merchant_id
|
||
* store_id
|
||
* type 1优惠券 2券包
|
||
* coupon json字符串 优惠券信息=>
|
||
* [
|
||
* coupon_name 名称
|
||
* coupon_amount 优惠券数量
|
||
* consumption_threshold 消费门槛
|
||
* discount_amount 优惠金额
|
||
* explain 说明
|
||
* grant_type 发放类型 1. 自主发放 2. 充值赠送 3支付成功后发放
|
||
* validity_time_type 有效期类型:1,开始---结束。2,领取日后N天,3,领取日次日后N天。
|
||
* choose_store 指定门店类型 0所有门店 1指定门店
|
||
* store_id_arr 指定的门店id 集合
|
||
* appoint_type 1 全部商品 2指定分类 3指定商品
|
||
* appoint_id_arr 指定分类或商品id的集合
|
||
* choose_grade 指定会员等级 0所有等级 1指定等级 -1plus会员
|
||
* vip_grade_id 优惠券发放用户vip等级:-1、plus会员 0、所有用户;其他:以等级id连接
|
||
* start_time 有效期的开始时间
|
||
* end_time 有效期的结束时间
|
||
* day_num 领取后的有效天数
|
||
* ]
|
||
* ]
|
||
* @return mixed
|
||
*/
|
||
public function createCoupon($param)
|
||
{
|
||
$verifyResult = $this->createCouponVerify($param); //参数验证
|
||
if ($verifyResult['status'] != 1) {
|
||
return $verifyResult;
|
||
}
|
||
$coupon = $param['coupon'];
|
||
$data = [
|
||
'merchantid' => $param['merchant_id'],
|
||
'coupon_name' => $coupon['coupon_name'],
|
||
'coupon_allnum' => $coupon['coupon_amount'],
|
||
'coupon_num' => $coupon['coupon_amount'],
|
||
'needmoney' => $coupon['consumption_threshold'],
|
||
'reducemoney' => $coupon['discount_amount'],
|
||
'detailmsg' => $coupon['explain'] ? $coupon['explain'] : '',
|
||
'give_status' => $coupon['grant_type'],
|
||
'coupontype' => $coupon['validity_time_type'],
|
||
'type' => 1,
|
||
'status' => 1,
|
||
'maxnum' => 0,
|
||
'addtime' => $_SERVER['REQUEST_TIME'],
|
||
'edit_time' => $_SERVER['REQUEST_TIME'],
|
||
'operator_type' => $param['operator_type'],
|
||
'operator_id' => $param['operator_id'],
|
||
'user_type' => $param['user_type']
|
||
];
|
||
//处理门店限制、商品限制
|
||
if ($coupon['choose_store'] == 1) {
|
||
if ($param['user_type'] == 3) {
|
||
$data['storeids'] = $coupon['store_id_arr'];
|
||
} else if ($param['user_type'] == 4) {
|
||
$data['storeids'] = $param['store_id'];
|
||
}
|
||
//商品限制
|
||
if (count($data['storeids']) == 1 && ($coupon['appoint_type'] == 2 || $coupon['appoint_type'] == 3)) {
|
||
$data['appoint_id_str'] = $coupon['appoint_id_arr'];
|
||
}
|
||
} else {
|
||
//门店端创建则限制为该门店
|
||
$data['storeids'] = $param['user_type'] == 4 ? $param['store_id'] : 0;
|
||
}
|
||
//处理发放类型 1自主发放 2充值赠送 3支付成功后发放
|
||
switch ($coupon['grant_type']) {
|
||
case '1':
|
||
case '3':
|
||
// (1自主发放 3支付成功后发放—) 可限制会员等级
|
||
switch ($coupon['choose_grade']) {
|
||
case '-1':
|
||
$data['coupon_gradeid'] = '-1';
|
||
break;
|
||
case '0':
|
||
$data['coupon_gradeid'] = '0';
|
||
break;
|
||
case '1':
|
||
$data['coupon_gradeid'] = $coupon['vip_grade_id'];
|
||
break;
|
||
}
|
||
break;
|
||
case '2':
|
||
//充值-不限制会员等级
|
||
$data['coupon_gradeid'] = '0';
|
||
break;
|
||
}
|
||
switch ($coupon['validity_time_type']) {
|
||
case '1':
|
||
$data['starttime'] = strtotime($coupon['start_time']);
|
||
$data['endtime'] = strtotime($coupon['end_time']);
|
||
break;
|
||
case '2':
|
||
case '3':
|
||
$data['daynum'] = $coupon['day_num'];
|
||
break;
|
||
}
|
||
$data['appoint_id_str'] = $data['appoint_id_str'] ? $data['appoint_id_str'] : null;
|
||
$data['appoint_type'] = $coupon['appoint_type'] ? $coupon['appoint_type'] : 1;
|
||
|
||
try {
|
||
$CouponModel = new RetailMCouponModel();
|
||
$id = $CouponModel->addOrder($data);
|
||
if (empty($id)) {
|
||
return callBack(statusCode()['error'], "创建失败");
|
||
} else {
|
||
return callBack(statusCode()['success'], "创建成功", ['coupon_id' => $id]);
|
||
}
|
||
} catch (\Exception $e) {
|
||
return callBack(statusCode()['error'], "创建失败");
|
||
}
|
||
}
|
||
|
||
|
||
/**
|
||
* 创建优惠券参数验证
|
||
* @param $param
|
||
* [
|
||
* operator_type 1后台 2收银端 3助手端
|
||
* operator_id 操作人id
|
||
* user_type 3商户 4门店
|
||
* merchant_id
|
||
* store_id
|
||
* type 1优惠券 2券包
|
||
* coupon json字符串 优惠券信息=>
|
||
* [
|
||
* coupon_name 名称
|
||
* coupon_amount 优惠券数量
|
||
* consumption_threshold 消费门槛
|
||
* discount_amount 优惠金额
|
||
* explain 说明
|
||
* grant_type 发放类型 1. 自主发放 2. 充值赠送 3支付成功后发放
|
||
* validity_time_type 有效期类型:1,开始---结束。2,领取日后N天,3,领取日次日后N天。
|
||
* choose_store 指定门店类型 0所有门店 1指定门店
|
||
* store_id_arr 指定的门店id 集合
|
||
* appoint_type 1 全部商品 2指定分类 3指定商品
|
||
* appoint_id_arr 指定分类或商品id的集合
|
||
* choose_grade 指定会员等级 0所有等级 1指定等级 -1plus会员
|
||
* vip_grade_id 优惠券发放用户vip等级:-1、plus会员 0、所有用户;其他:以等级id连接
|
||
* start_time 有效期的开始时间
|
||
* end_time 有效期的结束时间
|
||
* day_num coupontype:为2/3时有效。领取后的有效天数
|
||
* ]
|
||
* coupon json字符串 券包=>
|
||
* [
|
||
* coupon_name 名称
|
||
* coupon_amount 优惠券数量
|
||
* grant_type 发放类型 1. 自主发放 2. 充值赠送 3支付成功后发放
|
||
* choose_store 指定门店类型 0所有门店 1指定门店
|
||
* store_id_arr 指定的门店id 集合
|
||
* choose_grade 指定会员等级 0所有等级 1指定等级 -1plus会员
|
||
* vip_grade_id 优惠券发放用户vip等级:-1、plus会员 0、所有用户;其他:以等级id连接
|
||
* coupon_list=>[
|
||
* coupon_name 名称
|
||
* consumption_threshold 消费门槛
|
||
* discount_amount 优惠金额
|
||
* explain 说明
|
||
* validity_time_type 有效期类型:1,开始---结束。2,领取日后N天,3,领取日次日后N天。
|
||
* appoint_type 1 全部商品 2指定分类 3指定商品
|
||
* appoint_id_arr 指定分类或商品id的集合
|
||
* start_time 有效期的开始时间
|
||
* end_time 有效期的结束时间
|
||
* day_num coupontype:为2/3时有效。领取后的有效天数
|
||
* ]
|
||
* ]
|
||
* ]
|
||
* @return mixed
|
||
*/
|
||
public function createCouponVerify(&$param)
|
||
{
|
||
$verifyClass = new VerifyParam();
|
||
$verifyResult = $verifyClass->identityVerify($param);
|
||
if ($verifyResult['status'] != 1) {
|
||
return $verifyResult;
|
||
}
|
||
if (empty($param['operator_id'])) {
|
||
return callBack(statusCode()['error'], "登录超时");
|
||
}
|
||
$coupon = json_decode($param['coupon'], true);
|
||
if (empty($coupon) || !in_array($param['type'], ['1', '2'])) {
|
||
return callBack(statusCode()['error'], "请输入正确的优惠券信息");
|
||
}
|
||
$param['coupon'] = $coupon;
|
||
if ($param['type'] == 2) {
|
||
$name = '券包';
|
||
if (count($coupon['coupon_list']) > 20) {
|
||
return callBack(statusCode()['error'], "一个券包最多只能含有20张优惠券");
|
||
}
|
||
if (count($coupon['coupon_list']) <= 0) {
|
||
return callBack(statusCode()['error'], "请创建优惠券");
|
||
}
|
||
} else {
|
||
$name = '优惠券';
|
||
}
|
||
if (empty($coupon['coupon_amount'])) {
|
||
return callBack(statusCode()['error'], '请输入' . $name . '数量');
|
||
}
|
||
if ($coupon['coupon_amount'] > 10000000 || $coupon['coupon_amount'] <= 0) {
|
||
return callBack(statusCode()['error'], $name . '发放总量不能超过一千万');
|
||
}
|
||
if (!in_array($coupon['grant_type'], ['1', '2', '3'])) {
|
||
return callBack(statusCode()['error'], "请选择正确的发放类型");
|
||
}
|
||
switch ($coupon['grant_type']) {
|
||
case '1':
|
||
case '3':
|
||
//自主发放 支付发放
|
||
if ($param['user_type'] == 3) {
|
||
//商户后台
|
||
if (!in_array($coupon['choose_store'], ['0', '1'])) {
|
||
return callBack(statusCode()['error'], "请选择门店");
|
||
}
|
||
if ($coupon['choose_store'] == 1 && empty($coupon['store_id_arr'])) {
|
||
return callBack(statusCode()['error'], "请指定门店");
|
||
}
|
||
}
|
||
if (!in_array($coupon['choose_grade'], ['0', '1', '-1'])) {
|
||
return callBack(statusCode()['error'], "请选择指定会员等级");
|
||
}
|
||
if ($coupon['choose_grade'] == 1 && empty($coupon['vip_grade_id'])) {
|
||
return callBack(statusCode()['error'], "请选择指定等级会员");
|
||
}
|
||
break;
|
||
}
|
||
switch ($param['type']) {
|
||
case 1:
|
||
//优惠券
|
||
$PartVerifyResult = $this->createCouponPartVerify($param); //局部参数验证
|
||
return $PartVerifyResult;
|
||
break;
|
||
case 2:
|
||
//券包
|
||
if (empty($coupon['coupon_name'])) {
|
||
return callBack(statusCode()['error'], "请输入券包名称");
|
||
}
|
||
if (mb_strlen($coupon['coupon_name'], 'UTF8') > 120) {
|
||
return callBack(statusCode()['error'], "券包名称不能超过120个字符");
|
||
}
|
||
$coupon_list = $coupon['coupon_list'];
|
||
if (empty($coupon_list)) {
|
||
return callBack(statusCode()['error'], "请创建优惠券");
|
||
}
|
||
foreach ($coupon_list as $key => $val) {
|
||
$PartVerifyResult = $this->createCouponPartVerify(['coupon' => $val]);
|
||
if ($PartVerifyResult['status'] != 1) {
|
||
$PartVerifyResult['message'] = '第' . ($key + 1) . '张' . $PartVerifyResult['message'];
|
||
return $PartVerifyResult;
|
||
}
|
||
}
|
||
return callBack(statusCode()['success'], "验证成功");
|
||
break;
|
||
}
|
||
}
|
||
|
||
|
||
/**
|
||
* 创建优惠券局部参数验证
|
||
* @param $param
|
||
* [
|
||
* operator_type 1后台 2收银端 3助手端
|
||
* operator_id 操作人id
|
||
* user_type 3商户 4门店
|
||
* merchant_id
|
||
* store_id
|
||
* coupon json字符串 优惠券信息=>
|
||
* [
|
||
* coupon_name 名称
|
||
* grant_type 发放类型 1. 自主发放 2. 充值赠送 3支付成功后发放
|
||
* validity_time_type 有效期类型:1,开始---结束。2,领取日后N天,3,领取日次日后N天。
|
||
* choose_store 指定门店类型 0所有门店 1指定门店
|
||
* store_id_arr 指定的门店id 集合
|
||
* appoint_type 1 全部商品 2指定分类 3指定商品
|
||
* appoint_id_arr 指定分类或商品id的集合
|
||
* choose_grade 指定会员等级 0所有等级 1指定等级 -1plus会员
|
||
* vip_grade_id 优惠券发放用户vip等级:-1、plus会员 0、所有用户;其他:以等级id连接
|
||
* start_time 有效期的开始时间
|
||
* end_time 有效期的结束时间
|
||
* day_num 领取后的有效天数
|
||
* ]
|
||
* ]
|
||
* @return mixed
|
||
*/
|
||
public function createCouponPartVerify($param)
|
||
{
|
||
$coupon = $param['coupon'];
|
||
$reg1 = "/^\+?[0-9][0-9]*$/";
|
||
$reg2 = "/^[0-9]+(.[0-9]{1,2})?$/";
|
||
$time = $_SERVER['REQUEST_TIME'];
|
||
if (empty($coupon['coupon_name']) || empty($coupon['discount_amount']) || empty($coupon['consumption_threshold'])) {
|
||
return callBack(statusCode()['error'], "请完善表单");
|
||
}
|
||
if (mb_strlen($coupon['coupon_name'], 'UTF8') > 120) {
|
||
return callBack(statusCode()['error'], "优惠券名称不能超过120个字符");
|
||
}
|
||
if (!preg_match($reg2, $coupon['discount_amount'])) {
|
||
return callBack(statusCode()['error'], "请输入正确的优惠金额");
|
||
}
|
||
if (!preg_match($reg2, $coupon['consumption_threshold']) || $coupon['consumption_threshold'] > 10000000) {
|
||
return callBack(statusCode()['error'], "请输入正确的消费门槛,消费门槛最高一千万");
|
||
}
|
||
if ($coupon['discount_amount'] >= $coupon['consumption_threshold']) {
|
||
return callBack(statusCode()['error'], "优惠金额必须小于消费门槛");
|
||
}
|
||
if (mb_strlen($coupon['explain'], 'UTF8') > 500) {
|
||
return callBack(statusCode()['error'], "使用说明不得超过500个字符");
|
||
}
|
||
if (!in_array($coupon['validity_time_type'], ['1', '2', '3'])) {
|
||
return callBack(statusCode()['error'], "请选择正确的有效期");
|
||
}
|
||
switch ($coupon['validity_time_type']) {
|
||
case '1':
|
||
//固定日期
|
||
if (empty($coupon['start_time']) || empty($coupon['end_time'])) {
|
||
return callBack(statusCode()['error'], "请选择优惠券的有效期");
|
||
}
|
||
$start_time = strtotime($coupon['start_time']);
|
||
$end_time = strtotime($coupon['end_time']);
|
||
if ($start_time < $time) {
|
||
return callBack(statusCode()['error'], "开始时间不得早于当前时间");
|
||
}
|
||
$cha = ($start_time - $time) / 86400;
|
||
if ($cha > 60) {
|
||
return callBack(statusCode()['error'], "开始时间不得晚于当前时间后60天");
|
||
}
|
||
if ($end_time <= $start_time) {
|
||
return callBack(statusCode()['error'], "结束时间必须大于开始时间");
|
||
}
|
||
$cha = ($end_time - $start_time) / 86400;
|
||
if ($cha > 90) {
|
||
return callBack(statusCode()['error'], "领取时间不能超过90天");
|
||
}
|
||
break;
|
||
case '2':
|
||
case '3':
|
||
//领到券当日开始或次日开始
|
||
if (empty($coupon['day_num']) || !preg_match($reg1, $coupon['day_num'])) {
|
||
return callBack(statusCode()['error'], "请输入正确的有效期");
|
||
}
|
||
if ($coupon['day_num'] > 90) {
|
||
return callBack(statusCode()['error'], "有效期最长90天内有效");
|
||
}
|
||
break;
|
||
}
|
||
switch ($coupon['grant_type']) {
|
||
case '1':
|
||
case '3':
|
||
//自主发放 支付发放
|
||
if ((count($coupon['store_id_arr']) == 1 && $param['user_type'] == 3 && $param['choose_store'] == 1) || $param['user_type'] == 4) {
|
||
if (!in_array($coupon['appoint_type'], ['1', '2', '3'])) {
|
||
return callBack(statusCode()['error'], "请指定可使用类型");
|
||
}
|
||
if ($coupon['appoint_type'] == 2 && empty($coupon['appoint_id_arr'])) {
|
||
return callBack(statusCode()['error'], "请指定分类");
|
||
}
|
||
if ($coupon['appoint_type'] == 3 && empty($coupon['appoint_id_arr'])) {
|
||
return callBack(statusCode()['error'], "请指定商品");
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
return callBack(statusCode()['success'], "验证成功");
|
||
}
|
||
}
|