文件
mashangyoujiu/Application/Common/Model/RetailMerchantConfigModel.class.php

274 行
15 KiB
PHP
可执行文件

<?php
namespace Common\Model;
//[1.5.52]
/**
* 商户设置表 之后的 MerchantConfigModel.class.php 删除
* Class MerchantConfigModel
* @package Common\Model
*/
class RetailMerchantConfigModel extends BaseModel
{
protected $tableName = 'retail_merchant_config';
const ID = 'id'; //int(11) NOT NULL AUTO_INCREMENT,
const MERCHANT_ID = 'merchant_id'; //int(11) NOT NULL DEFAULT '0' COMMENT '商户id',
const INTEGRAL_ARRIVE_CASH = 'integral_arrive_cash'; //tinyint(1) DEFAULT '0' COMMENT '积分抵现设置 0关闭 1开启',
const INTEGRAL_ARRIVE_CASH_DATA = 'integral_arrive_cash_data'; //int(11) DEFAULT '0' COMMENT '积分抵现比例 按照多少积分抵0.01元',
const INTEGRAL_ARRIVE_CASH_RATE = 'integral_arrive_cash_rate'; //decimal(10,6) DEFAULT '0.000000' COMMENT '积分抵现比例 按照整单百分比抵扣',
const OTHER_PAY_STATE = 'other_pay'; //tinyint(1) DEFAULT '0' COMMENT '是否开启其他支付 0关闭 1开启',
const ADD_TIME = 'add_time'; //varchar(20) DEFAULT NULL COMMENT '创建时间',
const TURNTABLE_STATUS = 'turntable_status'; //tinyint(1) NOT NULL DEFAULT '1' COMMENT '大转盘活动 系统开关 默认1关闭 2开启'
const MARKETING_METHODS = 'marketing_methods'; //营销方式 1基于订单 2基于商品
const SHOP_COUPON_SIMPLE_IMAGE = 'shop_coupon_simple_image'; //普通支付本地商家券图片
const SHOP_COUPON_SERVICE_IMAGE = 'shop_coupon_service_image'; //服务商模式本地商家券图片
const SHOP_COUPON_SIMPLE_WX_IMAGE = 'shop_coupon_simple_wx_image'; //服务商模式微信商家券图片
const SHOP_COUPON_SERVICE_WX_IMAGE = 'shop_coupon_service_wx_image'; //服务商模式微信商家券图片
public function getConfig($merchant_id)
{
$config = $this->getFindTrue(array($this::MERCHANT_ID => $merchant_id), $this::ID . ',' . $this::ADD_TIME . ',' . $this::MERCHANT_ID);
if (empty($config)) {
$config = array(
$this::INTEGRAL_ARRIVE_CASH => 0,
$this::INTEGRAL_ARRIVE_CASH_DATA => 0,
$this::INTEGRAL_ARRIVE_CASH_RATE => 0,
$this::OTHER_PAY_STATE => 1,
);
}
return $config;
}
/**
* 设置参数验证
* @param $parameter
* @return mixed
*/
public function verify_data($parameter)
{
$reg = "/^\+?[1-9][0-9]*$/"; //积分规则
$price_reg = "/^[0-9]+(.[0-9]{1,2})?$/"; //金额规则
$rate_reg = " /^[+]?\d*\.?\d{0,2}$/"; //比例规则
if ($parameter['integral_arrive_cash'] == 1) {
//开启积分营销规则
if (empty($parameter['integral_arrive_cash_data']) || !preg_match($reg, $parameter['integral_arrive_cash_data']) || $parameter['integral_arrive_cash_data'] < 0 || $parameter['integral_arrive_cash_data'] > 10000000) {
$res = array('status' => 0, 'msg' => '积分设置有误');
return $res;
}
if (empty($parameter['integral_arrive_cash_price']) || !preg_match($price_reg, $parameter['integral_arrive_cash_price']) || $parameter['integral_arrive_cash_price'] < 0 || $parameter['integral_arrive_cash_price'] > 10000000) {
$res = array('status' => 0, 'msg' => '金额设置有误');
return $res;
}
if ($parameter['marketing_methods'] == 1) {
if (empty($parameter['integral_arrive_cash_rate']) || !preg_match($rate_reg, $parameter['integral_arrive_cash_rate'])) {
$res = array('status' => 0, 'msg' => '抵现比例有误');
return $res;
}
}else if($parameter['marketing_methods'] == 2){
if(strval(round($parameter['integral_arrive_cash_price'] / $parameter['integral_arrive_cash_data'],12)) != strval($parameter['integral_arrive_cash_price'] / $parameter['integral_arrive_cash_data'])){
$res = array('status' => 0, 'msg' => '金额必须除尽积分');
return $res;
}
}
}
$res = array('status' => 1, 'msg' => '验证成功');
return $res;
}
/**
* 积分营销添加
* @param $data
* @return mixed
*/
public function market_add($data)
{
$item = array();
$item['integral_arrive_cash'] = $data['integral_arrive_cash'] == 1 ? $data['integral_arrive_cash'] : 0;
if ($data['integral_arrive_cash'] == 1) {
$item['integral_arrive_cash_price'] = $data['integral_arrive_cash_price'];
$item['integral_arrive_cash_data'] = $data['integral_arrive_cash_data'];
$item['marketing_methods'] = $data['marketing_methods'] ? $data['marketing_methods'] : 1;
if ($data['marketing_methods'] == 1) {
$item['integral_arrive_cash_rate'] = $data['integral_arrive_cash_rate'] / 100;
}
}
$old = $this->getFind(array('merchant_id' => $data['merchant_id']));
if (!empty($old)) {
$result = $this->updateOrder(array('merchant_id' => $data['merchant_id']), $item);
} else {
$item['merchant_id'] = $data['merchant_id'];
$item['add_time'] = time();
$result = $this->addOrder($item);
}
if ($result) {
$res = array('status' => 1, 'msg' => '操作成功');
} else {
$res = array('status' => 0, 'msg' => '暂无修改');
}
return $res;
}
/**
*下单积分抵现
* @param $parameter
* @return array
*/
public function integral_cash($parameter)
{
if (empty($parameter['vid'])) {
$res = array('status' => 0, 'msg' => '下单信息有误,请刷新重试');
return $res;
}
$Config = $parameter['Config']; //积分营销设置
if ($Config['integral_arrive_cash'] != 1) {
$res = array('status' => 0, 'msg' => '积分抵现设置变动,请刷新重试');
return $res;
}
if (!$Config['integral_arrive_cash_price'] || !$Config['integral_arrive_cash_data'] || $Config['integral_arrive_cash_price'] <= 0 || $Config['integral_arrive_cash_data'] <= 0) {
$res = array('status' => 0, 'msg' => '积分抵现设置变动,请刷新重试');
return $res;
}
$vip_info = $parameter['vip_info']; //会员信息
$bill_type = $parameter['bill_type']; //1商城 2店内
switch ($Config['marketing_methods']) {
case 1:
//基于订单
if ($Config['integral_arrive_cash_rate'] > 0) {
//执行积分抵扣
$integral_money_rate = round($Config['integral_arrive_cash_data'] / $Config['integral_arrive_cash_price'], 2);
$integralDisMoney = round($parameter['all_money'] * $Config['integral_arrive_cash_rate'], 2); //最多能抵扣的金额
$needIntegral = round(($integralDisMoney / $Config['integral_arrive_cash_price']) * $Config['integral_arrive_cash_data']); //获取所需积分
if ($vip_info['integral'] >= $needIntegral) {
$use_integral = $needIntegral;
} else {
$use_integral = $vip_info['integral'];
$integralDisMoney = round(($use_integral / $Config['integral_arrive_cash_data']) * $Config['integral_arrive_cash_price'], 2);
}
if ($integralDisMoney != $parameter['integral_dis_money'] || $parameter['integral_dis_num'] != $use_integral) {
$res = array(
'status' => 0,
'msg' => '积分抵现设置变动,请刷新重试1',
'integralDisMoney' => $integralDisMoney,
'integral_dis_money' => $parameter['integral_dis_money'],
'use_integral' => $use_integral,
'integral_dis_num' => $parameter['integral_dis_num'],
);
return $res;
}
$sellDataArray = reduceOrderMoney($parameter['sell_data_array'], $integralDisMoney, $parameter['all_money'], "integral_dis_money", $use_integral, $integral_money_rate);
$allMoney = round($parameter['all_money'] - $integralDisMoney, 2);
} else {
$res = array('status' => 0, 'msg' => '积分抵现设置变动,请刷新重试');
return $res;
}
break;
case 2:
//基于商品
$old_vip_integral = $vip_info['integral']; //会员初始拥有的积分
$vip_integral = $vip_info['integral']; //会员积分用来计算单品抵扣的金额
$goods_deduction_all_money = 0; //商品类加的抵扣积分的总金额数
$deduction_all_money = 0; //抵扣总积分的总金额
$integral_dis_num = 0; //订单可以扣除的总积分
$z_all_need_integral = 0; //总共需要扣除的积分
foreach ($parameter['sell_data_array'] as $key => &$val) {
$val['integral_marketing'] = 2;
$need_integral = 0;
if ($vip_info['user_type'] == 2) {
//plus会员所需积分
if ($val['plus_mem_status'] == 1) {
$need_integral = $val['plus_mem_integral'] ? $val['plus_mem_integral'] : 0;
}
} else {
switch ($bill_type) {
case 1:
//常规会员商城所需积分
if ($val['shop_mem_status'] == 1) {
$need_integral = $val['shop_mem_integral'] ? $val['shop_mem_integral'] : 0;
}
break;
case 2:
//店内
if ($val['store_mem_status'] == 1) {
$need_integral = $val['store_mem_integral'] ? $val['store_mem_integral'] : 0;
}
break;
}
}
if ($need_integral > 0) {
//商品设置了会员价加积分模式
$val['mem_integral'] = $need_integral;
$all_need_integral = round($need_integral * $val['num']);
$z_all_need_integral += $all_need_integral;
if ($vip_integral >= $all_need_integral) {
$deduction_integral = $all_need_integral; //扣除总积分
} else {
//积分不够
if ($vip_integral > 0) {
$deduction_integral = $vip_integral;
$surplus_need_integral = round($all_need_integral - $deduction_integral);
} else {
$deduction_integral = 0;
$surplus_need_integral = $all_need_integral;
}
$deduction_money = round($surplus_need_integral / $Config['integral_arrive_cash_data'] * $Config['integral_arrive_cash_price'], 2); //抵扣的金额
$val['integral_dis_money'] = $deduction_money;
$goods_deduction_all_money += $deduction_money;
}
$val['use_integral'] = $deduction_integral; //单品扣除的总积分
$integral_dis_num += $deduction_integral; //扣除的积分
$vip_integral -= $deduction_integral; //扣除积分
}
}
if ($old_vip_integral < $z_all_need_integral) {
//会员初始积分小于应该扣除的积分
$z_surplus_need_integral = round($z_all_need_integral - $old_vip_integral); //应该抵扣的总积分
$deduction_all_money = round($z_surplus_need_integral / $Config['integral_arrive_cash_data'] * $Config['integral_arrive_cash_price'], 2); //抵扣的总金额
if ($deduction_all_money != $goods_deduction_all_money) {
$difference_price = round($deduction_all_money - $goods_deduction_all_money, 2);
for ($i = count($parameter['sell_data_array']) - 1; $i >= 0; $i--) {
if ($parameter['sell_data_array'][$i]['mem_integral'] > 0 && $val['integral_dis_money'] > 0) {
if ($difference_price > 0) {
$parameter['sell_data_array'][$i]['integral_dis_money'] += $difference_price;
} else {
$difference_price = abs($difference_price);
if ($parameter['sell_data_array'][$i]['integral_dis_money'] > $difference_price) {
$parameter['sell_data_array'][$i]['integral_dis_money'] -= $difference_price;
}
}
}
}
}
}
if ($integral_dis_num != $parameter['integral_dis_num'] || $deduction_all_money != $parameter['integral_dis_money']) {
$res = array(
'status' => 0,
'msg' => '积分抵现设置变动,请刷新重试11',
'deduction_all_money' => $deduction_all_money,
'integral_dis_money' => $parameter['integral_dis_money'],
'integral_dis_num1' => $integral_dis_num,
'integral_dis_num' => $parameter['integral_dis_num'],
);
return $res;
}
$allMoney = round($parameter['all_money'] + $deduction_all_money, 2);
$sellDataArray = $parameter['sell_data_array'];
break;
default:
$res = array('status' => 0, 'msg' => '积分抵现设置变动,请刷新重试');
return $res;
break;
}
$allMoney = $allMoney > 0.01 ? $allMoney : 0.01;
$res = array(
'status' => 1,
'msg' => '抵扣成功',
'data' => array(
'allMoney' => $allMoney,
'sellDataArray' => $sellDataArray,
'vip_config' => $Config,
'money_dis_integral' => $surplus_need_integral ? $surplus_need_integral : 0,
)
);
return $res;
}
}