|
@@ -2,6 +2,11 @@
|
|
|
|
|
|
|
|
namespace app\models\user;
|
|
namespace app\models\user;
|
|
|
|
|
|
|
|
|
|
+use app\admin\model\user\User as UserModel;
|
|
|
|
|
+use app\admin\model\user\UserBill;
|
|
|
|
|
+use app\admin\model\user\UserBill as UserBillAdmin;
|
|
|
|
|
+use app\admin\model\user\UserLevel;
|
|
|
|
|
+use app\admin\model\user\UserTaskFinish;
|
|
|
use app\models\store\StoreBargain;
|
|
use app\models\store\StoreBargain;
|
|
|
use app\models\store\StoreCart;
|
|
use app\models\store\StoreCart;
|
|
|
use app\models\store\StoreCombination;
|
|
use app\models\store\StoreCombination;
|
|
@@ -17,6 +22,8 @@ use app\models\system\SystemUserTask;
|
|
|
use crmeb\basic\BaseModel;
|
|
use crmeb\basic\BaseModel;
|
|
|
use crmeb\repositories\PaymentRepositories;
|
|
use crmeb\repositories\PaymentRepositories;
|
|
|
use crmeb\repositories\UserRepository;
|
|
use crmeb\repositories\UserRepository;
|
|
|
|
|
+use crmeb\services\JsonService as Json;
|
|
|
|
|
+use crmeb\services\UtilService as Util;
|
|
|
use crmeb\traits\ModelTrait;
|
|
use crmeb\traits\ModelTrait;
|
|
|
use think\db\exception\DataNotFoundException;
|
|
use think\db\exception\DataNotFoundException;
|
|
|
use think\db\exception\DbException;
|
|
use think\db\exception\DbException;
|
|
@@ -202,10 +209,10 @@ class UserLevelOrder extends BaseModel
|
|
|
self::beginTrans();
|
|
self::beginTrans();
|
|
|
|
|
|
|
|
$res1 = false !== User::bcDec($uid, 'now_money', $orderInfo['pay_price'], 'uid');
|
|
$res1 = false !== User::bcDec($uid, 'now_money', $orderInfo['pay_price'], 'uid');
|
|
|
- $res2 = UserBill::expend('购买商品', $uid, 'now_money', 'pay_product', $orderInfo['pay_price'], $orderInfo['id'], $userInfo['now_money'], '余额支付' . floatval($orderInfo['pay_price']) . '元购买商品');
|
|
|
|
|
|
|
+ $res2 = UserBill::expend('购买会员', $uid, 'now_money', 'pay_level', $orderInfo['pay_price'], $orderInfo['id'], $userInfo['now_money'], '余额支付' . floatval($orderInfo['pay_price']) . '元购买会员');
|
|
|
$res3 = self::paySuccess($order_id, 'yue', $formId);//余额支付成功
|
|
$res3 = self::paySuccess($order_id, 'yue', $formId);//余额支付成功
|
|
|
try {
|
|
try {
|
|
|
- PaymentRepositories::yuePayProduct($userInfo, $orderInfo);
|
|
|
|
|
|
|
+ PaymentRepositories::yuePayLevel($userInfo, $orderInfo);
|
|
|
} catch (\Exception $e) {
|
|
} catch (\Exception $e) {
|
|
|
self::rollbackTrans();
|
|
self::rollbackTrans();
|
|
|
return self::setErrorInfo($e->getMessage());
|
|
return self::setErrorInfo($e->getMessage());
|
|
@@ -233,7 +240,7 @@ class UserLevelOrder extends BaseModel
|
|
|
if ($orderInfo['paid']) return self::setErrorInfo('该订单已支付!');
|
|
if ($orderInfo['paid']) return self::setErrorInfo('该订单已支付!');
|
|
|
$userInfo = User::getUserInfo($uid);
|
|
$userInfo = User::getUserInfo($uid);
|
|
|
self::beginTrans();
|
|
self::beginTrans();
|
|
|
- $res1 = UserBill::expend('购买商品', $uid, 'now_money', 'pay_product', $orderInfo['pay_price'], $orderInfo['id'], $userInfo['now_money'], '微信支付' . floatval($orderInfo['pay_price']) . '元购买商品');
|
|
|
|
|
|
|
+ $res1 = UserBill::expend('购买会员', $uid, 'now_money', 'pay_level', $orderInfo['pay_price'], $orderInfo['id'], $userInfo['now_money'], '微信支付' . floatval($orderInfo['pay_price']) . '元购买会员');
|
|
|
$res2 = self::paySuccess($order_id, 'weixin', $formId);//微信支付为0时
|
|
$res2 = self::paySuccess($order_id, 'weixin', $formId);//微信支付为0时
|
|
|
$res = $res1 && $res2;
|
|
$res = $res1 && $res2;
|
|
|
self::checkTrans($res);
|
|
self::checkTrans($res);
|
|
@@ -253,52 +260,152 @@ class UserLevelOrder extends BaseModel
|
|
|
{
|
|
{
|
|
|
$order = self::where('order_id', $orderId)->find();
|
|
$order = self::where('order_id', $orderId)->find();
|
|
|
$resPink = true;
|
|
$resPink = true;
|
|
|
- $res1 = self::where('order_id', $orderId)->update(['paid' => 1, 'pay_type' => $paytype, 'pay_time' => time(), 'is_del' => 0, 'is_system_del' => 0, 'mark' => '']);//订单改为支付
|
|
|
|
|
- if ($order->combination_id && $res1 && !$order->refund_status) $resPink = StorePink::createPink($order);//创建拼团
|
|
|
|
|
|
|
+ $res1 = self::where('order_id', $orderId)->update(['paid' => 1, 'pay_type' => $paytype, 'pay_time' => time(), 'is_del' => 0]);//订单改为支付
|
|
|
|
|
+// if ($order->combination_id && $res1 && !$order->refund_status) $resPink = StorePink::createPink($order);//创建拼团
|
|
|
$oid = self::where('order_id', $orderId)->value('id');
|
|
$oid = self::where('order_id', $orderId)->value('id');
|
|
|
- StoreOrderStatus::status($oid, 'pay_success', '用户付款成功');
|
|
|
|
|
|
|
+// StoreOrderStatus::status($oid, 'pay_success', '用户付款成功');
|
|
|
$now_money = User::where('uid', $order['uid'])->value('now_money');
|
|
$now_money = User::where('uid', $order['uid'])->value('now_money');
|
|
|
- UserBill::expend('购买商品', $order['uid'], 'now_money', 'pay_money', $order['pay_price'], $order['id'], $now_money, '支付' . floatval($order['pay_price']) . '元购买商品');
|
|
|
|
|
|
|
+ UserBill::expend('购买会员', $order['uid'], 'now_money', 'pay_money', $order['pay_price'], $order['id'], $now_money, '支付' . floatval($order['pay_price']) . '元购买会员');
|
|
|
//支付成功后
|
|
//支付成功后
|
|
|
- event('OrderPaySuccess', [$order, $formId]);
|
|
|
|
|
- $res = $res1 && $resPink && UserSpread::setSpreadSure($order['uid']) && User::backOrderBrokerage($order);
|
|
|
|
|
|
|
+// event('OrderPaySuccess', [$order, $formId]);
|
|
|
|
|
+ self::save_give_level($order['uid'], $order['level_id']);
|
|
|
|
|
+// 邀请返利
|
|
|
|
|
+ self::rebates($order['uid'], $order['level_id'],$order['id']);
|
|
|
|
|
+ $res = $res1;
|
|
|
|
|
+// $res = $res1 && $resPink && UserSpread::setSpreadSure($order['uid']) && User::backOrderBrokerage($order);
|
|
|
return false !== $res;
|
|
return false !== $res;
|
|
|
}
|
|
}
|
|
|
|
|
+ /*
|
|
|
|
|
+ * 购买获得会员等级
|
|
|
|
|
+ * @paran int $uid
|
|
|
|
|
+ * @return json
|
|
|
|
|
+ * */
|
|
|
|
|
+ public static function save_give_level($uid = 0,$level_id = 0)
|
|
|
|
|
+ {
|
|
|
|
|
+ if (!$uid) return Json::fail('缺少参数');
|
|
|
|
|
+ //查询当前选择的会员等级
|
|
|
|
|
+ $systemLevel = \app\admin\model\system\SystemUserLevel::where(['is_show' => 1, 'is_del' => 0, 'id' => $level_id])->find();
|
|
|
|
|
+ if (!$systemLevel) return Json::fail('您选择赠送的会员等级不存在!');
|
|
|
|
|
+ //检查是否拥有此会员等级
|
|
|
|
|
+ $level = UserLevel::where(['uid' => $uid, 'level_id' => $level_id, 'is_del' => 0])->field('valid_time,is_forever')->find();
|
|
|
|
|
+// if ($level) if (!$level['is_forever'] && time() < $level['valid_time']) return Json::fail('此用户已有该会员等级,无法再次赠送');
|
|
|
|
|
+ //设置会员过期时间
|
|
|
|
|
+ $add_valid_time = (int)$systemLevel->valid_date * 86400;
|
|
|
|
|
+ UserModel::commitTrans();
|
|
|
|
|
+ try {
|
|
|
|
|
+ //保存会员信息
|
|
|
|
|
+ $res = UserLevel::create([
|
|
|
|
|
+ 'is_forever' => $systemLevel->is_forever,
|
|
|
|
|
+ 'status' => 1,
|
|
|
|
|
+ 'is_del' => 0,
|
|
|
|
|
+ 'grade' => $systemLevel->grade,
|
|
|
|
|
+ 'uid' => $uid,
|
|
|
|
|
+ 'add_time' => time(),
|
|
|
|
|
+ 'level_id' => $level_id,
|
|
|
|
|
+ 'discount' => $systemLevel->discount,
|
|
|
|
|
+ 'valid_time' => $systemLevel->discount ? $add_valid_time + time() : 0,
|
|
|
|
|
+ 'mark' => '尊敬的用户【' . UserModel::where('uid', $uid)->value('nickname') . '】在' . date('Y-m-d H:i:s', time()) . '购买会员等级成为' . $systemLevel['name'] . '会员',
|
|
|
|
|
+ ]);
|
|
|
|
|
+ //提取等级任务并记录完成情况
|
|
|
|
|
+ $levelIds = [$level_id];
|
|
|
|
|
+ $lowGradeLevelIds = SystemUserLevel::where('grade', '<', $systemLevel->grade)->where(['is_show' => 1, 'is_del' => 0])->column('id', 'id');
|
|
|
|
|
+ if (count($lowGradeLevelIds)) $levelIds = array_merge($levelIds, $lowGradeLevelIds);
|
|
|
|
|
+ $taskIds = \app\admin\model\system\SystemUserTask::where('level_id', 'in', $levelIds)->column('id', 'id');
|
|
|
|
|
+ $inserValue = [];
|
|
|
|
|
+ foreach ($taskIds as $id) {
|
|
|
|
|
+ $inserValue[] = ['uid' => $uid, 'task_id' => $id, 'status' => 1, 'add_time' => time()];
|
|
|
|
|
+ }
|
|
|
|
|
+ $res = $res && UserModel::where('uid', $uid)->update(['level' => $level_id]);
|
|
|
|
|
+ if ($inserValue) $res && UserTaskFinish::insertAll($inserValue);
|
|
|
|
|
+ $user = UserModel::where('uid', $uid)->find();
|
|
|
|
|
+ if ($systemLevel['integral']>0) {//赠送积分
|
|
|
|
|
+ $edit['integral'] = bcadd($user['integral'], $systemLevel['integral'], 2);
|
|
|
|
|
+ $res2 = UserBillAdmin::income('购买会员增加积分', $user['uid'], 'integral', 'system_add', $systemLevel['integral'], 0, $edit['integral'], '购买会员增加了' . floatval($systemLevel['integral']) . '积分');
|
|
|
|
|
+ try {
|
|
|
|
|
+ UserRepository::adminAddIntegral($user, $systemLevel['integral']);
|
|
|
|
|
+ } catch (\Exception $e) {
|
|
|
|
|
+// BaseModel::rollbackTrans();
|
|
|
|
|
+ return Json::fail($e->getMessage());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+ if ($res) {
|
|
|
|
|
+ UserModel::commitTrans();
|
|
|
|
|
+ return Json::successful('购买成功');
|
|
|
|
|
+ } else {
|
|
|
|
|
+ UserModel::rollbackTrans();
|
|
|
|
|
+ return Json::successful('购买失败');
|
|
|
|
|
+ }
|
|
|
|
|
+ } catch (\Exception $e) {
|
|
|
|
|
+ UserModel::rollbackTrans();
|
|
|
|
|
+ return Json::fail('购买失败');
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+// 邀请返利
|
|
|
|
|
+ public static function rebates($uid, $level_id,$order_id){
|
|
|
|
|
+// $spread_id = User::where('uid', $uid)->value('spread_id');
|
|
|
|
|
+ $userInfo = User::getUserInfo($uid);
|
|
|
|
|
+ $level_info=SystemUserLevel::where('id', $level_id)->find();
|
|
|
|
|
+ if ($level_info['rebate']>0){
|
|
|
|
|
+ $brokerage = bcmul($level_info['rebate'], $level_info['money'], 2);
|
|
|
|
|
+ $balance = bcadd($userInfo['now_money'], $brokerage, 2);
|
|
|
|
|
+ $mark = $userInfo['nickname'] . '成功消费' . floatval($level_info['money']) . '元,购买会员,奖励推广佣金' . floatval($brokerage);
|
|
|
|
|
+ $res1 = UserBill::income('获得推广佣金', $userInfo['spread_uid'], 'now_money', 'brokerage', $brokerage, $order_id, $balance, $mark);
|
|
|
|
|
+ $res2 = self::bcInc($userInfo['spread_uid'], 'now_money', $brokerage, 'uid');
|
|
|
|
|
+ }
|
|
|
|
|
+ return true;
|
|
|
|
|
+ }
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 生成订单唯一id
|
|
|
|
|
+ * @param $uid 用户uid
|
|
|
|
|
+ * @return string
|
|
|
|
|
+ */
|
|
|
|
|
+ public static function getNewOrderId()
|
|
|
|
|
+ {
|
|
|
|
|
+ do {
|
|
|
|
|
+ list($msec, $sec) = explode(' ', microtime());
|
|
|
|
|
+ $msectime = number_format((floatval($msec) + floatval($sec)) * 1000, 0, '', '');
|
|
|
|
|
+ $orderId = 'hy' . $msectime . mt_rand(10000, 99999);
|
|
|
|
|
+ } while (self::be(['order_id' => $orderId]));// $orderId = 'wx' . $msectime . mt_rand(10000, 99999);
|
|
|
|
|
+ return $orderId;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
// 创建会员订单
|
|
// 创建会员订单
|
|
|
- public static function CreateOrder($uid, $level_id)
|
|
|
|
|
|
|
+ public static function CreateOrder($uid, $level_id,$recharge_type)
|
|
|
{
|
|
{
|
|
|
self::beginTrans();
|
|
self::beginTrans();
|
|
|
try {
|
|
try {
|
|
|
|
|
+// `grade` int(10) unsigned zerofill NOT NULL COMMENT '会员等级',
|
|
|
|
|
+// `price` decimal(8,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '充值金额',
|
|
|
|
|
+// `give_price` decimal(8,2) NOT NULL DEFAULT '0.00' COMMENT '购买赠送金额',
|
|
|
|
|
+// `recharge_type` varchar(32) NOT NULL COMMENT '充值类型',
|
|
|
|
|
+// `paid` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '是否支付0未支付1已支付',
|
|
|
|
|
+// `pay_time` timestamp NULL DEFAULT NULL COMMENT '充值支付时间',
|
|
|
|
|
+// `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '充值时间',
|
|
|
|
|
+// `refund_price` decimal(10,2) unsigned DEFAULT '0.00' COMMENT '退款金额',
|
|
|
|
|
+ $levelInfo = SystemUserLevel::get($level_id);
|
|
|
|
|
+ if ($levelInfo['is_spread']==1){ //限定邀请
|
|
|
|
|
+ $userSpread = \app\admin\model\user\User::where('uid', $uid)->value('spread_id');
|
|
|
|
|
+ if ($userSpread<=0){
|
|
|
|
|
+ return self::setErrorInfo('只有受邀请用户才能购买该等级的会员', true);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
$orderInfo = [
|
|
$orderInfo = [
|
|
|
'uid' => $uid,
|
|
'uid' => $uid,
|
|
|
'order_id' => self::getNewOrderId(),
|
|
'order_id' => self::getNewOrderId(),
|
|
|
-// 'mer_id' =>
|
|
|
|
|
|
|
+ 'level_id' =>$level_id,
|
|
|
|
|
+ 'grade' => $levelInfo['grade'],
|
|
|
|
|
+ 'give_price' => $levelInfo['give_price'],
|
|
|
|
|
+
|
|
|
];
|
|
];
|
|
|
- if ($shipping_type === 2) {
|
|
|
|
|
- $orderInfo['verify_code'] = self::getStoreCode();
|
|
|
|
|
- $orderInfo['store_id'] = SystemStore::getStoreDispose($storeId, 'id');
|
|
|
|
|
- if (!$orderInfo['store_id']) return self::setErrorInfo('暂无门店无法选择门店自提!', true);
|
|
|
|
|
- }
|
|
|
|
|
|
|
+
|
|
|
$order = self::create($orderInfo);
|
|
$order = self::create($orderInfo);
|
|
|
if (!$order) return self::setErrorInfo('订单生成失败!', true);
|
|
if (!$order) return self::setErrorInfo('订单生成失败!', true);
|
|
|
- $res5 = true;
|
|
|
|
|
- foreach ($cartInfo as $cart) {
|
|
|
|
|
- //减库存加销量
|
|
|
|
|
- if ($combinationId) $res5 = $res5 && StoreCombination::decCombinationStock($cart['cart_num'], $combinationId, isset($cart['productInfo']['attrInfo']) ? $cart['productInfo']['attrInfo']['unique'] : '');
|
|
|
|
|
- else if ($seckill_id) $res5 = $res5 && StoreSeckill::decSeckillStock($cart['cart_num'], $seckill_id, isset($cart['productInfo']['attrInfo']) ? $cart['productInfo']['attrInfo']['unique'] : '');
|
|
|
|
|
- else if ($bargain_id) $res5 = $res5 && StoreBargain::decBargainStock($cart['cart_num'], $bargain_id, isset($cart['productInfo']['attrInfo']) ? $cart['productInfo']['attrInfo']['unique'] : '');
|
|
|
|
|
- else $res5 = $res5 && StoreProduct::decProductStock($cart['cart_num'], $cart['productInfo']['id'], isset($cart['productInfo']['attrInfo']) ? $cart['productInfo']['attrInfo']['unique'] : '');
|
|
|
|
|
- }
|
|
|
|
|
- //保存购物车商品信息
|
|
|
|
|
- $res4 = false !== StoreOrderCartInfo::setCartInfo($order['id'], $cartInfo);
|
|
|
|
|
- //购物车状态修改
|
|
|
|
|
- $res6 = false !== StoreCart::where('id', 'IN', $cartIds)->update(['is_pay' => 1]);
|
|
|
|
|
- if (!$res4 || !$res5 || !$res6) return self::setErrorInfo('订单生成失败!', true);
|
|
|
|
|
- //自动设置默认地址
|
|
|
|
|
- UserRepository::storeProductOrderCreateEbApi($order, compact('cartInfo', 'addressId'));
|
|
|
|
|
- self::clearCacheOrderInfo($uid, $key);
|
|
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
self::commitTrans();
|
|
self::commitTrans();
|
|
|
- StoreOrderStatus::status($order['id'], 'cache_key_create_order', '订单生成');
|
|
|
|
|
|
|
+// StoreOrderStatus::status($order['id'], 'cache_key_create_order', '订单生成');
|
|
|
return $order;
|
|
return $order;
|
|
|
} catch (\PDOException $e) {
|
|
} catch (\PDOException $e) {
|
|
|
self::rollbackTrans();
|
|
self::rollbackTrans();
|