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; } }