文件
mashangyoujiu/Application/CashierApi/Controller/RechargeController.class.php

517 行
24 KiB
PHP
可执行文件

此文件含有模棱两可的 Unicode 字符

此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。

<?php
namespace CashierApi\Controller;
use Api\Controller\RechargeRefundController;
use CashierApi\Business\QueryPayOrder;
use CashierApi\Business\VipRecharge;
use Common\Model\InstallAccountModel;
use Common\Model\RetailCashierModel;
use Common\Model\RetailManagerModel;
use Common\Model\RetailMerchantModel;
use Common\Model\RetailPayOrderModel;
use Common\Model\RetailPaySetModel;
use Common\Model\RetailRechargeOrderModel;
use Common\Model\RetailStoreModel;
use Common\Model\RetailVipModel;
use Common\Model\RetailVipRechargeModel;
use Pay\Controller\CloudPayController;
use Think\Controller;
//[1.9.5]
class RechargeController extends BaseController
{
/**
* @param int $vip_id 会员id
* @param int $vip_type 会员类型 1.普通会员 2.过期plus会员 3.正常plus会员(判断优惠券发放)
* @param string $pay_type 类型 1.现金 2.在线 3.刷脸
* @param int $user_type 充值人员类型 1.收银员 2.店长
* @param string $recharge_code 收银员充值码
* @param string $manager_number 店长登录账号
* @param string $manager_pass 店长登陆密码
* @param string $pay_code 用户付款码
* @param string $face_token 支付宝刷脸码
* @param int $recharge_id 充值活动id
* @param string $recharge_money 自定义充值金额
* @param string $give_money 自定义赠送金额
* @return array $res
*/
public function VipRecharge()
{
// 实例化模型
$VipRechargeModel = new RetailVipRechargeModel();
$RechargeOrderModel = new RetailRechargeOrderModel();
$MerchantModel = new RetailMerchantModel();
$StoreModel = new RetailStoreModel();
$CashierModel = new RetailCashierModel();
$ManagerModel = new RetailManagerModel();
$PayOrderModel = new RetailPayOrderModel();
$VipModel = new RetailVipModel();
$PaySetModel = new RetailPaySetModel();
$cryptoModel = new \Addons\Api\Crypto();
$InstallAccountModel = new InstallAccountModel();
$time = time();
$cr = array();
$cr2 = array();
// 接受数据
$vip_id = I('post.vip_id');
$vip_type = I('post.vip_type');
$pay_type = I('post.pay_type');
$user_type = I('post.user_type');
$recharge_code = I('post.recharge_code');
$manager_number = I('post.manager_number');
$manager_pass = I('post.manager_pass');
$pay_code = I('post.pay_code');
$face_token = I('post.face_token');
$recharge_id = I('post.recharge_id');
$recharge_money = I('post.recharge_money');
$give_money = I('post.give_money');
// 判断参数
if (!$vip_id || !$vip_type || !$pay_type || !$user_type) {
$res = array('status' => 0, 'msg' => '参数缺失');
$this->ajaxReturn($res);
}
// 判断会员
$map = array(
$VipModel::ID => $vip_id,
$VipModel::MERCHANT_ID => self::$merchant_id,
$VipModel::STATUS => 1,
);
// 获取会员信息
$vip_info = $VipModel->getFind($map);
if (!$vip_info) {
$res = array('status' => 0, 'msg' => '会员查询失败');
$this->ajaxReturn($res);
}
// 处理支付类型
switch ($pay_type) {
case 1: // 现金
// 充值人员类型
if ($user_type == 1) { // 收银员
// 判断充值权限码
if (self::$cashier[$CashierModel::RECHARGE_STATE] != 2) {
$res = array('status' => 0, 'msg' => '您无充值权限');
$this->ajaxReturn($res);
}
if (!$recharge_code || $recharge_code != self::$cashier[$CashierModel::RECHARGE_CODE]) {
$res = array('status' => 0, 'msg' => '请输入正确的权限码');
$this->ajaxReturn($res);
}
} else if ($user_type == 2) { // 店长
// 店长账号、密码
if (!$manager_number || !$manager_pass) {
$res = array('status' => 0, 'msg' => '请填写店长账号或密码后在提交');
$this->ajaxReturn($res);
}
// 查询店长
$manager = $ManagerModel->getFind(array($ManagerModel::MERCHANT_ID => self::$merchant_id, $ManagerModel::STORE_ID => self::$store_id, $ManagerModel::STATUS => 1, $ManagerModel::MOBILE => $manager_number));
if (!$manager) {
$res = array('status' => 0, 'msg' => '暂无此店长,请先添加');
$this->ajaxReturn($res);
}
// 判断密码
$encryption_pass = $cryptoModel->encrypt($manager_pass, date('YmdHis', $manager[$ManagerModel::ADD_TIME]));
if ($encryption_pass != $manager[$ManagerModel::PASSWORD]) {
$res = array('status' => 0, 'msg' => '密码错误');
$this->ajaxReturn($res);
}
} else { // 未知
$res = array('status' => 0, 'msg' => '未知的操作人员');
$this->ajaxReturn($res);
}
$cr[$PayOrderModel::PAY_TYPE] = 3;
$cr2[$RechargeOrderModel::PAY_TYPE] = 1;
break;
case 2: // 在线
// 接收支付码
if (!$pay_code || strlen($pay_code) != 18) {
$res = array('status' => 0, 'msg' => '请扫描正确的付款码');
$this->ajaxReturn($res);
}
// 处理支付码
$num = substr($pay_code, 0, 2); // 截取付款码前两位
if ($num >= 25 && $num <= 30) { //支付宝付款码支付
$cr[$PayOrderModel::PAY_TYPE] = 2;
$cr2[$RechargeOrderModel::PAY_TYPE] = 3;
} else if ($num >= 10 && $num <= 15) { //微信的付款码支付
$cr[$PayOrderModel::PAY_TYPE] = 1;
$cr2[$RechargeOrderModel::PAY_TYPE] = 2;
} else {
$res = array('status' => 0, 'msg' => '请扫描正确的付款码');
$this->ajaxReturn($res);
}
$cr['code'] = $pay_code;
break;
case 3: // 刷脸
// 判断刷脸码
if (!$face_token) {
$res = array('status' => 0, 'msg' => '刷脸支付失败');
$this->ajaxReturn($res);
}
// 判断刷脸支付码
$ids = $PayOrderModel->getFindField(array($PayOrderModel::STORE_ID => self::$store_id, $PayOrderModel::FACE_TOKEN => $face_token), array($PayOrderModel::ID), true);
if ($ids) {
$res = array('status' => 0, 'msg' => '请重新扫描');
$this->ajaxReturn($res);
}
// 判断支付模式,获取支付配置
$cr[$PayOrderModel::PAY_TYPE] = 2;
$cr[$PayOrderModel::FACE_TOKEN] = $face_token;
$cr2[$RechargeOrderModel::PAY_TYPE] = 3;
break;
default:
$res = array('status' => 0, 'msg' => '未知的支付类型');
$this->ajaxReturn($res);
}
// 判断是否为充值活动
if ($recharge_id && $recharge_id != 0) {
// 充值活动查询条件
$map2 = array(
$VipRechargeModel::ID => $recharge_id,
$VipRechargeModel::MERCHANT_ID => self::$merchant_id,
$VipRechargeModel::STORE_ID => self::$store_id,
$VipRechargeModel::STATUS => 1,
$VipRechargeModel::STATE => 1,
$VipRechargeModel::LINE_STATE => 1,
$VipRechargeModel::SURPLUS => array(array('gt', 0), array('eq', -1), 'or'),
$VipRechargeModel::START_TIME => array(array('eq', ''), array('lt', $time), 'or'),
$VipRechargeModel::END_TIME => array(array('eq', ''), array('gt', $time), 'or')
);
$field = array($VipRechargeModel::ID, $VipRechargeModel::RECHARGE_MONEY, $VipRechargeModel::GIVE_MONEY, $VipRechargeModel::SURPLUS, $VipRechargeModel::LIMIT_NUM, $VipRechargeModel::AGING_REPAY, $VipRechargeModel::AGING_TIME);
// 查询充值活动
$recharge_activity = $VipRechargeModel->getFind($map2, $field);
if (!$recharge_activity) {
$res = array('status' => 0, 'msg' => '未查询到该充值活动');
$this->ajaxReturn($res);
}
// 判断充值活动剩余库存
if ($recharge_activity[$VipRechargeModel::SURPLUS] <= 0 && $recharge_activity[$VipRechargeModel::SURPLUS != -1]) {
$res = array('status' => 0, 'msg' => '剩余数量不足');
$this->ajaxReturn($res);
}
// 获取会有充值次数
if ($recharge_activity[$VipRechargeModel::LIMIT_NUM] && $recharge_activity[$VipRechargeModel::LIMIT_NUM] > 0) {
$map3 = array(
$RechargeOrderModel::MERCHANT_ID => self::$merchant_id,
$RechargeOrderModel::STORE_ID => self::$store_id,
$RechargeOrderModel::VID => $vip_id,
$RechargeOrderModel::STATUS => 1,
$RechargeOrderModel::VIP_RECHARGE_ID => $recharge_activity[$VipRechargeModel::ID],
);
$recharge_count = $RechargeOrderModel->getCount($map3);
// 判断会员充值次数
if ($recharge_count && intval($recharge_count) >= $recharge_activity[$VipRechargeModel::LIMIT_NUM]) {
$res = array('status' => 0, 'msg' => '该会员已达到充值次数限制');
$this->ajaxReturn($res);
}
}
// 充值金额、赠送金额
$recharge_money = $recharge_activity[$VipRechargeModel::RECHARGE_MONEY];
$give_money = $recharge_activity[$VipRechargeModel::GIVE_MONEY];
} else {
// 判断自定义充值金额
if (!verifyPrice($recharge_money)) {
$res = array('status' => 0, 'msg' => '请输入正确的充值金额');
$this->ajaxReturn($res);
}
// 判断门店自定义充值权限
if (self::$merchant[$MerchantModel::CUSTOM_RECHARGE_STATE] && self::$merchant[$MerchantModel::CUSTOM_RECHARGE_STATE] == 2) {
$res = array('status' => 0, 'msg' => '暂无自定义充值权限');
$this->ajaxReturn($res);
}
// 判断赠送金额
if ($give_money) {
// 判断收银员赠送权限
if (!self::$cashier[$CashierModel::CUSTOM_RECHARGE_STATE] || self::$cashier[$CashierModel::CUSTOM_RECHARGE_STATE] == 1) {
$res = array('status' => 0, 'msg' => '暂无赠送权限');
$this->ajaxReturn($res);
}
// 处理金额
if (!verifyNumber($give_money, 2, 0.01, 1000000000)) {
$res = array('status' => 0, 'msg' => '请输入正确的赠送金额');
$this->ajaxReturn($res);
}
} else {
// 判断是否自动读取活动赠送金额
if (!self::$merchant[$MerchantModel::AUTO_USE_GRADE] || self::$merchant[$MerchantModel::AUTO_USE_GRADE] == 1) {
// 获取做大充值金额
$recharge_activity = $VipRechargeModel->getMaxGiveMoney(self::$merchant_id, self::$store_id, $recharge_money, 0, $vip_info[$VipModel::PLUS_TYPE]);
$give_money = $recharge_activity['give_money'] ?: 0;
$recharge_id = $recharge_activity['id'] ? $recharge_activity['id'] : 0;
} else {
$give_money = 0;
}
}
}
// 微信、支付宝获取支付模式
if ($cr[$PayOrderModel::PAY_TYPE] == 1 || $cr[$PayOrderModel::PAY_TYPE] == 2) {
$result = $PaySetModel->getFindMerchantConfig(self::$merchant_id, $cr[$PayOrderModel::PAY_TYPE]);
if ($result['status'] != 1) {
$res = array('status' => 0, 'msg' => $result['msg'] ? $result['msg'] : '暂无可用的支付模式');
$this->ajaxReturn($res);
}
$config = $result['config'];
$config['body'] = self::$merchant[$CashierModel::NAME] . '-' . self::$store[$StoreModel::STORE_NAME];
$cr['m_pay_type'] = $result['m_pay_type'];
}
// 创建订单
$cr[$PayOrderModel::ORDER_TYPE] = 2;
$cr[$PayOrderModel::STORE_ID] = self::$store_id;
$cr[$PayOrderModel::TRADE_AMOUNT] = $recharge_money;
$cr[$PayOrderModel::ADD_TIME] = $time;
$cr[$PayOrderModel::ORDER_STATE] = 'WAIT_BUYER_PAY';
$cr[$PayOrderModel::VID] = $vip_id;
$cr[$PayOrderModel::CASHIER_ID] = self::$cashier_id;
$cr[$PayOrderModel::MERCHANT_ID] = self::$merchant_id;
$add_result = $PayOrderModel->addPayOrder($cr);
// 获取商户充值设置
$map = array(
$MerchantModel::ID => self::$merchant_id,
$MerchantModel::STATUS => 1
);
$field = array($MerchantModel::AGING_CYCLE, $MerchantModel::AGING_REPAY, $MerchantModel::AGING_TIME);
$setting = $MerchantModel->getFind($map, $field);
if (!$add_result) {
$res = array('status' => 0, 'msg' => '订单创建失败');
$this->ajaxReturn($res);
}
// 创建充值订单(余额记录)
$cr2[$RechargeOrderModel::MERCHANT_ID] = self::$merchant_id;
$cr2[$RechargeOrderModel::STORE_ID] = self::$store_id;
$cr2[$RechargeOrderModel::VID] = $vip_id;
$cr2[$RechargeOrderModel::STATUS] = 0;
$cr2[$RechargeOrderModel::PAY_ORDER_ID] = $add_result[$PayOrderModel::ID];
$cr2[$RechargeOrderModel::MONEY] = $recharge_money;
$cr2['give_money'] = $give_money;
if ($setting['aging_repay'] == 1 && $recharge_activity['aging_repay'] == 1) {
$cr2[$RechargeOrderModel::ALL_MONEY] = $recharge_money;
$cr2['repay_name'] = 1;
$cr2[$RechargeOrderModel::REMARK] = '收银机充值' . $recharge_money . '元获得' . $recharge_money . '元,剩余' . $give_money . '分期到账';
} else {
$cr2[$RechargeOrderModel::ALL_MONEY] = $recharge_money + $give_money;
$cr2[$RechargeOrderModel::REMARK] = '收银机充值' . $recharge_money . '元获得' . ($recharge_money + $give_money) . '元';
}
$cr2[$RechargeOrderModel::USER_TYPE] = $user_type == 1 ? 3 : 2;
$cr2[$RechargeOrderModel::CASHIER_ID] = $user_type == 1 ? self::$cashier_id : $manager[$ManagerModel::ID];
$cr2[$RechargeOrderModel::VIP_RECHARGE_ID] = $recharge_id ? $recharge_id : 0;
$cr2[$RechargeOrderModel::SCENE_TYPE] = 1;
$cr2[$RechargeOrderModel::TYPE] = 1;
$cr2[$RechargeOrderModel::ADD_TIME] = $time;
$cr2[$RechargeOrderModel::STATE] = 1;
$add_result2 = $RechargeOrderModel->addOrder($cr2);
if (!$add_result2) {
$res = array('status' => 0, 'msg' => '充值订单创建失败');
$this->ajaxReturn($res);
}
//分期到账
if ($setting['aging_repay'] == 1 && $recharge_activity['aging_repay'] == 1) {
$order_data = $PayOrderModel->getFind(array('id' => $add_result[$PayOrderModel::ID]));
$accountData = array(
'vip_id' => $order_data['vid'],
'merchant_id' => self::$merchant_id,
'store_id' => self::$store_id,
'aging_money' => $give_money,
'order_id' => $add_result2,
'aging_date' => date("Y-m-d", intval(time())),
'aging_cycle' => $setting['aging_cycle'], //设置->分期到账间隔时间
'aging_repay' => $setting['aging_repay'], //设置->分期到账是否开启
'aging_time' => $setting['aging_time'], //设置->分期到账间隔
'active_aging_repay' => $recharge_activity['aging_repay'], //活动->分期到账是否开启
'active_aging_time' => $recharge_activity['aging_time'], //活动->分几期到账
);
$InstallAccountModel->waitUpgradeAccount($accountData);
}
if ($pay_type == 1) { // 现金
$up = array(
$PayOrderModel::ORDER_STATE => 'SUCCESS',
$PayOrderModel::TRADE_DATE => $time,
);
$save = $PayOrderModel->updateOrder(array($PayOrderModel::ID => $add_result[$PayOrderModel::ID]), $up);
if (!$save) {
$res = array('status' => 0, 'msg' => '现金收款失败');
$this->ajaxReturn($res);
}
} else { // 在线支付
if ($cr['m_pay_type'] == 3) {
//新大陆支付
$pay_result = A('Pay/PayContinent')->toContinentPay_v3($add_result, $config['body']);
} elseif ($cr[$PayOrderModel::M_PAY_TYPE] == 4) {
//新大陆支付
$payObj = new CloudPayController();
$pay_result = $payObj->soltCard($add_result, $config, $cr[$PayOrderModel::PAY_TYPE]);
} elseif ($cr[$PayOrderModel::M_PAY_TYPE] == 7) {
//钱客云支付
$moneyGuest = new \Terminalapi\Controller\BaseController();
//支付,查询
$pay_result = $moneyGuest->paymentQuery($add_result, $config, $cr[$PayOrderModel::PAY_TYPE]);
} else {
if ($cr[$PayOrderModel::PAY_TYPE] == 1) {
//微信
$pay_result = A('Pay/NewWxPay')->toWxPay_v2($add_result, $config);
} else if ($cr[$PayOrderModel::PAY_TYPE] == 2) {
//支付宝
$pay_result = A('Pay/NewAliPay')->toAliPay_v2($add_result, $config);
} else {
$res = array('status' => 0, 'msg' => '未知的支付类型');
$this->ajaxReturn($res);
}
}
if ($pay_result['status'] == 0) {
$this->ajaxReturn($pay_result);
}
}
//分期到账设置
$cycle = $setting['aging_cycle'] == 0 ? '天' : '月';
$aging_repay_name = $recharge_activity['aging_repay'] == 1 ? '分期到账' : '直接到账';
$install_account = array(
'aging_repay' => $setting['aging_repay'],
'aging_cycle' => $cycle,
'aging_time' => $setting['aging_time'],
'active_aging_repay' => $aging_repay_name,
'active_aging_time' => $recharge_activity['aging_time'],
);
// 更新余额记录信息
$res = A('PayApi/Recharge')->updateOrder($add_result);
$res['order_id'] = $add_result[$PayOrderModel::ID]; // 返回订单号(打印小票)
$res['install_data'] = $recharge_activity['aging_repay'] == 1 ? $install_account : ''; // 返回分期到账设置
// 判断
if ($res['status'] == 1) {
// wifi打印
A('PayApi/Printer')->rechargeWifiPrint([
'cashier_name' => self::$cashier['name'],
'store_name' => self::$store['storetag'],
'order_id' => $add_result[$PayOrderModel::ID],
'store_id' => self::$store_id,
]);
}
$this->ajaxReturn($res);
}
/**
* 打印充值订单
* @param int $order_id pay_order订单id
* @param array $res
*/
public function printRechargeOrder()
{
// 接受数据
$order_id = I('post.order_id');
if (!$order_id) {
$res = array('status' => 0, 'msg' => '参数缺失');
$this->ajaxReturn($res);
}
$res = A('PayApi/Printer')->getPrintInfo([
'cashier_name' => self::$cashier['name'],
'store_name' => self::$store['storetag'],
'order_id' => $order_id,
'store_id' => self::$store_id,
]);
$this->ajaxReturn($res);
}
/**
*
*/
public function rechargeList()
{
$merchant_id = self::$merchant_id;
$store_id = self::$store_id;
$cashier_id = self::$cashier_id;
if (IS_POST) {
$id = I('post.id');
$page = I('post.page');
$limit = I('post.limit');
$RechargeRefundController = new RechargeRefundController();
$res = $RechargeRefundController->rechargeList($id, $merchant_id, $store_id, $cashier_id, 3, $page, $limit);
} else {
$res['status'] = 0;
$res['msg'] = '数据出错';
}
$this->ajaxReturn($res);
}
/**
* 会员余额退款
*/
public function refundMoney()
{
$merchant_id = self::$merchant_id;
if (IS_POST) {
$id = I('post.id');
$res = A('Api/RechargeRefund')->refundMoney($merchant_id, $id, 1);
} else {
$res['status'] = 0;
$res['msg'] = '数据出错';
}
$this->ajaxReturn($res);
}
/**
* 会员余额退款
* user_type 1 收银员退款 2店长退款
* refund_code 收银员退款码与店长密码
* username 店长账号
*/
public function refundMoney_v1()
{
$merchant_id = self::$merchant_id;
if (IS_POST) {
$id = I('post.id');
$user_type = I('post.user_type');
$refund_code = I('post.refund_code');
$username = I('post.username');
$res = A('CashierApi/Refund')->verifyRefund($user_type, $refund_code, $username);
if ($res['status'] == 1) {
$res = A('Api/RechargeRefund')->refundMoney($merchant_id, $id, 1);
}
} else {
$res['status'] = 0;
$res['msg'] = '数据出错';
}
$this->ajaxReturn($res);
}
/*
* 会员充值 2020-10-22
*/
public function vipRecharge_v1()
{
$data = I('post.');
$data['merchant_id'] = self::$merchant_id;
$data['store_id'] = self::$store_id;
$data['cashier_id'] = self::$cashier_id;
$data['merchantInfo'] = self::$merchant;
$data['storeInfo'] = self::$store;
$data['cashierInfo'] = self::$cashier;
$data['scene_type'] = 1; //收银机充值
$RechargeClass = new VipRecharge();
$result = $RechargeClass->placeRechargeOrder($data);
$this->ajaxReturn($result);
}
/**
* 查询支付订单
*/
public function payQueryOrder()
{
$data = I('post.');
$data['merchant_id'] = self::$merchant_id;
$data['store_id'] = self::$store_id;
$data['cashier_id'] = self::$cashier_id;
$QueryClass = new QueryPayOrder();
$result = $QueryClass->rechargeQueryOrder($data);
$this->ajaxReturn($result);
}
}