dlhmaster/app/api/controller/Order.php

631 lines
28 KiB
PHP
Raw Permalink Normal View History

2024-06-06 11:06:09 +08:00
<?php
namespace app\api\controller;
use app\api\logic\OrderInvoiceLogic;
use app\api\logic\OrderLogic;
use app\api\validate\OrderValidate;
use app\common\basics\Api;
use app\common\server\JsonServer;
use think\facade\Db;
use app\common\model\after_sale\AfterSale;
use app\common\model\order\Order as Morder;
use app\common\model\user\User;
use app\common\server\ConfigServer;
use app\common\model\AccountLog;
use app\common\model\shop\Shop;
use app\common\model\user\UserDistribution;
2024-07-19 09:52:11 +08:00
use app\shop\logic\order\OrderLogic as Express;
2024-06-06 11:06:09 +08:00
2024-07-29 15:04:48 +08:00
2024-06-06 11:06:09 +08:00
class Order extends Api
{
public $like_not_need_login = ['testPromotion'];
/**
* @notes 下单
* @return \think\response\Json
* @throws \think\Exception
* @author suny
* @date 2021/7/13 6:11 下午
*/
public function submitOrder()
{
$post = $this->request->post();
$post['user_id'] = $this->user_id;
$post['client'] = $this->client;
(new OrderValidate())->goCheck('add', $post);
2024-07-07 17:34:14 +08:00
2024-06-06 11:06:09 +08:00
$order = OrderLogic::add($post);
if (false === $order) {
return JsonServer::error(OrderLogic::getError());
}
return JsonServer::success('下单成功!', $order);
}
2024-08-02 14:37:23 +08:00
2024-06-06 11:06:09 +08:00
public function testPromotion(){ ///无相测试使用
$time = time();
$afterSaleTime = ConfigServer::get('distribution', 'settlement_days', 7);
$afterSaleTime = intval($afterSaleTime * 24 * 60 * 60);
2024-08-02 14:37:23 +08:00
2024-06-06 11:06:09 +08:00
//2.查询所有未分销结算的订单,推荐人提成计算 //无相增加
2024-08-02 14:37:23 +08:00
$promotionOrders_rz = Morder::alias('O') //入驻店铺
->field(['O.id','O.order_sn','O.total_amount','O.user_id','U.first_leader','S.type as stype','U.second_leader','U.third_leader','S.id as sid','U.id as uid','S.trade_promotion_fee','S.promotion_buy_fee','S.team_first_fee','S.team_second_fee','S.team_third_fee'])
->join('shop S','O.shop_id = S.id')
->join('shop_admin SA','O.shop_id = SA.shop_id')
->join('shop_apply SAP','SAP.account = SA.account')
->join('procurement U','SAP.user_id = U.id')
->whereRaw("O.confirm_take_time+$afterSaleTime < $time")
->where([['O.confirm_take_time', '>', 0],['O.promotion_settle',"=",0],['S.type','=',2]]) //已确认收货且没有结算的订单,商家为入驻商家
->limit(100)
->select()->toArray();
$promotionOrders_zy = Morder::alias('O') //自营店铺
->field(['O.id','O.order_sn','O.total_amount','U.first_leader','U.second_leader','U.third_leader','S.id as sid','U.id as uid','S.trade_promotion_fee','S.promotion_buy_fee','S.team_first_fee','S.team_second_fee','S.team_third_fee','S.type as stype'])
->join('shop S','O.shop_id = S.id')
->join('procurement U','O.user_id = U.id')
->whereRaw("O.confirm_take_time+$afterSaleTime < $time")
->where([['O.confirm_take_time', '>', 0],['O.promotion_settle',"=",0],['S.type','=',1]]) //已确认收货且没有结算的订单,商家为入驻商家
->limit(100)
->select()->toArray();
$promotionOrders = array_merge($promotionOrders_rz,$promotionOrders_zy);
//dump($promotionOrders);die();
2024-06-06 11:06:09 +08:00
foreach ($promotionOrders as &$order) {
2024-08-02 14:37:23 +08:00
// 增加用户佣金,推广者如果是个人,就直接返推广点,否者按推广层级进行返点
if($order["stype"]==1){ //如果是自营店铺,直接给购买人提成
$buyer = User::where('id', $order['uid'])->find(); //购买者
$wallet = Shop::where('id', $order['sid'])->value('wallet'); //商家减去佣金
$earnings_buy = User::where('id', $buyer['first_leader'])->value('earnings');
if($earnings_buy){ //如果购买者有推荐人,就发推荐奖励
$money_buy = $order['total_amount'] * $order['promotion_buy_fee'] / 100;
User::update([
'earnings' => $earnings_buy + $money_buy,
'update_time' => $time,
'id' => $buyer['first_leader']
]);
Shop::update([
'wallet' => $wallet - $money_buy,
2024-06-06 11:06:09 +08:00
'update_time' => $time,
'id' => $order['sid']
2024-08-02 14:37:23 +08:00
]);
UserDistribution::where("user_id",$buyer['id'])->update([
'order_num' => Db::raw('order_num+1'),
'distribution_money' => $money_buy,
'order_amount' => Db::raw("order_amount+".$order['total_amount']),
]);
// 记录流水
2024-06-06 11:06:09 +08:00
AccountLog::create([
'log_sn' => createSn('account_log', 'log_sn', '', 4),
2024-08-02 14:37:23 +08:00
'user_id' => $buyer['first_leader'],
2024-06-06 11:06:09 +08:00
'source_type' => AccountLog::distribution_inc_earnings,
'source_id' => $order['id'],
'source_sn' => $order['order_sn'],
2024-08-02 14:37:23 +08:00
'change_amount' => $money_buy,
'left_amount' => $earnings_buy+$money_buy,
2024-06-06 11:06:09 +08:00
'change_type' => 1,
'remark' => '推广佣金增加'
]);
// 记录流水
AccountLog::create([
'log_sn' => createSn('account_log', 'log_sn', '', 4),
'user_id' => $order['uid'],
'source_type' => AccountLog::shop_reduce_wallet,
'source_id' => $order['id'],
'source_sn' => $order['order_sn'],
2024-08-02 14:37:23 +08:00
'change_amount' => $money_buy,
'left_amount' => $wallet - $money_buy,
2024-06-06 11:06:09 +08:00
'change_type' => 1,
'remark' => '商铺钱包余额减少'
]);
2024-08-02 14:37:23 +08:00
}
}else{
// 商家钱包金额
$wallet = Shop::where('id', $order['sid'])->value('wallet'); //商家减去佣金
//先执行推荐购买返点
$buyer = User::where('id', $order['user_id'])->find(); //购买者
$earnings_buy = User::where('id', $buyer['first_leader'])->value('earnings');
if($earnings_buy){ //如果购买者有推荐人,就发推荐奖励
$money_buy = $order['total_amount'] * $order['promotion_buy_fee'] / 100;
User::update([
'earnings' => $earnings_buy + $money_buy,
'update_time' => $time,
'id' => $buyer['first_leader']
]);
Shop::update([
'wallet' => $wallet - $money_buy,
2024-06-06 11:06:09 +08:00
'update_time' => $time,
'id' => $order['sid']
2024-08-02 14:37:23 +08:00
]);
// 记录流水
2024-06-06 11:06:09 +08:00
AccountLog::create([
'log_sn' => createSn('account_log', 'log_sn', '', 4),
2024-08-02 14:37:23 +08:00
'user_id' => $buyer['first_leader'],
2024-06-06 11:06:09 +08:00
'source_type' => AccountLog::distribution_inc_earnings,
'source_id' => $order['id'],
'source_sn' => $order['order_sn'],
2024-08-02 14:37:23 +08:00
'change_amount' => $money_buy,
'left_amount' => $earnings_buy+$money_buy,
2024-06-06 11:06:09 +08:00
'change_type' => 1,
'remark' => '推广佣金增加'
]);
// 记录流水
AccountLog::create([
'log_sn' => createSn('account_log', 'log_sn', '', 4),
'user_id' => $order['uid'],
'source_type' => AccountLog::shop_reduce_wallet,
'source_id' => $order['id'],
'source_sn' => $order['order_sn'],
2024-08-02 14:37:23 +08:00
'change_amount' => $money_buy,
'left_amount' => $wallet - $money_buy,
2024-06-06 11:06:09 +08:00
'change_type' => 1,
'remark' => '商铺钱包余额减少'
]);
2024-08-02 14:37:23 +08:00
}
//获取店铺
$promoter = User::where('id', $order['first_leader'])->find(); //查询推广者
if($promoter){
if(!$promoter["is_team"]){ //不是团队就直接分账
$earnings = User::where('id', $order['first_leader'])->value('earnings'); //给推广者增加佣金
$money = $order['total_amount'] * $order['trade_promotion_fee'] / 100;
2024-06-06 11:06:09 +08:00
User::update([
'earnings' => $earnings + $money,
'update_time' => $time,
2024-08-02 14:37:23 +08:00
'id' => $order['first_leader']
2024-06-06 11:06:09 +08:00
]);
2024-08-02 14:37:23 +08:00
2024-06-06 11:06:09 +08:00
Shop::update([
'wallet' => $wallet - $money,
'update_time' => $time,
'id' => $order['sid']
2024-08-02 14:37:23 +08:00
]);
2024-06-06 11:06:09 +08:00
// 记录流水
AccountLog::create([
'log_sn' => createSn('account_log', 'log_sn', '', 4),
2024-08-02 14:37:23 +08:00
'user_id' => $order['first_leader'],
2024-06-06 11:06:09 +08:00
'source_type' => AccountLog::distribution_inc_earnings,
'source_id' => $order['id'],
'source_sn' => $order['order_sn'],
'change_amount' => $money,
'left_amount' => $earnings+$money,
'change_type' => 1,
'remark' => '推广佣金增加'
]);
// 记录流水
AccountLog::create([
'log_sn' => createSn('account_log', 'log_sn', '', 4),
'user_id' => $order['uid'],
'source_type' => AccountLog::shop_reduce_wallet,
'source_id' => $order['id'],
'source_sn' => $order['order_sn'],
'change_amount' => $money,
'left_amount' => $wallet - $money,
'change_type' => 1,
'remark' => '商铺钱包余额减少'
]);
2024-08-02 14:37:23 +08:00
}else{ //如果是团队需要按三级分成
//一级
$earnings = User::where('id', $order['first_leader'])->value('earnings'); //给推广者增加佣金
$money = $order['total_amount'] * $order['team_first_fee'] / 100;
2024-06-06 11:06:09 +08:00
User::update([
'earnings' => $earnings + $money,
'update_time' => $time,
2024-08-02 14:37:23 +08:00
'id' => $order['first_leader']
2024-06-06 11:06:09 +08:00
]);
2024-08-02 14:37:23 +08:00
2024-06-06 11:06:09 +08:00
Shop::update([
'wallet' => $wallet - $money,
'update_time' => $time,
'id' => $order['sid']
2024-08-02 14:37:23 +08:00
]);
2024-06-06 11:06:09 +08:00
// 记录流水
AccountLog::create([
'log_sn' => createSn('account_log', 'log_sn', '', 4),
2024-08-02 14:37:23 +08:00
'user_id' => $order['first_leader'],
2024-06-06 11:06:09 +08:00
'source_type' => AccountLog::distribution_inc_earnings,
'source_id' => $order['id'],
'source_sn' => $order['order_sn'],
'change_amount' => $money,
'left_amount' => $earnings+$money,
'change_type' => 1,
'remark' => '推广佣金增加'
]);
// 记录流水
AccountLog::create([
'log_sn' => createSn('account_log', 'log_sn', '', 4),
'user_id' => $order['uid'],
'source_type' => AccountLog::shop_reduce_wallet,
'source_id' => $order['id'],
'source_sn' => $order['order_sn'],
'change_amount' => $money,
'left_amount' => $wallet - $money,
'change_type' => 1,
'remark' => '商铺钱包余额减少'
]);
2024-08-02 14:37:23 +08:00
//二级
$promoter_2 = User::where('id', $order['second_leader'])->find(); //给推广者增加佣金
if($promoter_2){
$earnings = User::where('id', $order['second_leader'])->value('earnings'); //给推广者增加佣金
$money = $order['total_amount'] * $order['team_second_fee'] / 100;
User::update([
'earnings' => $earnings + $money,
'update_time' => $time,
'id' => $order['second_leader']
]);
Shop::update([
'wallet' => $wallet - $money,
'update_time' => $time,
'id' => $order['sid']
]);
// 记录流水
AccountLog::create([
'log_sn' => createSn('account_log', 'log_sn', '', 4),
'user_id' => $order['second_leader'],
'source_type' => AccountLog::distribution_inc_earnings,
'source_id' => $order['id'],
'source_sn' => $order['order_sn'],
'change_amount' => $money,
'left_amount' => $earnings+$money,
'change_type' => 1,
'remark' => '推广佣金增加'
]);
// 记录流水
AccountLog::create([
'log_sn' => createSn('account_log', 'log_sn', '', 4),
'user_id' => $order['uid'],
'source_type' => AccountLog::shop_reduce_wallet,
'source_id' => $order['id'],
'source_sn' => $order['order_sn'],
'change_amount' => $money,
'left_amount' => $wallet - $money,
'change_type' => 1,
'remark' => '商铺钱包余额减少'
]);
}
//三级
$promoter_3 = User::where('id', $order['third_leader'])->find(); //给推广者增加佣金
if($promoter_3){
$earnings = User::where('id', $order['third_leader'])->value('earnings'); //给推广者增加佣金
$money = $order['total_amount'] * $order['team_third_fee'] / 100;
User::update([
'earnings' => $earnings + $money,
'update_time' => $time,
'id' => $order['third_leader']
]);
Shop::update([
'wallet' => $wallet - $money,
'update_time' => $time,
'id' => $order['sid']
]);
// 记录流水
AccountLog::create([
'log_sn' => createSn('account_log', 'log_sn', '', 4),
'user_id' => $order['third_leader'],
'source_type' => AccountLog::distribution_inc_earnings,
'source_id' => $order['id'],
'source_sn' => $order['order_sn'],
'change_amount' => $money,
'left_amount' => $earnings+$money,
'change_type' => 1,
'remark' => '推广佣金增加'
]);
// 记录流水
AccountLog::create([
'log_sn' => createSn('account_log', 'log_sn', '', 4),
'user_id' => $order['uid'],
'source_type' => AccountLog::shop_reduce_wallet,
'source_id' => $order['id'],
'source_sn' => $order['order_sn'],
'change_amount' => $money,
'left_amount' => $wallet - $money,
'change_type' => 1,
'remark' => '商铺钱包余额减少'
]);
}
2024-06-06 11:06:09 +08:00
}
2024-08-02 14:37:23 +08:00
2024-06-06 11:06:09 +08:00
}
2024-08-02 14:37:23 +08:00
} ///入驻店铺结束
//更新订单推广状态
Morder::update([
'promotion_settle' => 1,
'update_time' => $time,
'id' => $order['id']
]);
2024-06-06 11:06:09 +08:00
2024-08-02 14:37:23 +08:00
}
2024-06-06 11:06:09 +08:00
//var_dump($promotionOrders);die();
return JsonServer::success('获取成功', $promotionOrders);
}
/**
* @notes 结算页数据
* @return \think\response\Json
* @author suny
* @date 2021/7/13 6:11 下午
*/
public function settlement()
{
$post = $this->request->post();
$post['user_id'] = $this->user_id;
$post['client'] = $this->client;
$result = OrderLogic::settlement($post);
if($result === false) {
return JsonServer::error(OrderLogic::getError(), [], 301);
}
return JsonServer::success('获取成功', $result);
}
/**
* @notes 订单列表
* @return \think\response\Json
* @author suny
* @date 2021/7/13 6:11 下午
*/
public function lists()
{
$type = $this->request->get('type', 'all');
$order_list = OrderLogic::getOrderList($this->user_id, $type, $this->page_no, $this->page_size);
return JsonServer::success('获取成功', $order_list);
}
/**
* @notes 获取订单详情
* @return \think\response\Json
* @author suny
* @date 2021/7/13 6:11 下午
*/
public function getOrderDetail()
{
$get = $this->request->get();
(new OrderValidate())->goCheck('detail', $get);
$detail = OrderLogic::getOrderDetail($get['id']);
return JsonServer::success('获取成功', $detail);
}
2024-07-29 15:04:48 +08:00
// public function getOrder1()
// {
2024-08-02 14:37:23 +08:00
2024-07-29 15:04:48 +08:00
// $detail = OrderLogic::billions();
2024-08-02 14:37:23 +08:00
2024-07-29 15:04:48 +08:00
// }
2024-06-06 11:06:09 +08:00
/**
* @notes 取消订单
* @return array|\think\response\Json
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\ModelNotFoundException
* @throws \think\exception\DbException
* @author suny
* @date 2021/7/13 6:11 下午
*/
public function cancel()
{
$order_id = $this->request->post('id');
if (empty($order_id)) {
return JsonServer::error('参数错误');
}
return OrderLogic::cancel($order_id, $this->user_id);
}
/**
* @notes 确认收货
* @return array|\think\response\Json
* @author suny
* @date 2021/7/13 6:11 下午
*/
public function confirm()
{
$order_id = $this->request->post('id');
if (empty($order_id)) {
return JsonServer::error('参数错误');
}
2024-08-02 14:37:23 +08:00
$result = OrderLogic::billions($order_id);
2024-07-07 17:34:14 +08:00
if($result === -2){
return JsonServer::error('账户被禁用');
}
if($result === -3){
return JsonServer::error('更新余额状态失败');
}
if($result === -4){
return JsonServer::error('更新余额失败');
}
if($result === -5){
return JsonServer::error('插入记录失败');
}
2024-06-06 11:06:09 +08:00
return OrderLogic::confirm($order_id, $this->user_id);
}
/**
* @notes 删除订单
* @return array|\think\response\Json
* @author suny
* @date 2021/7/13 6:12 下午
*/
public function del()
{
$order_id = $this->request->post('id');
if (empty($order_id)) {
return JsonServer::error('参数错误');
}
return OrderLogic::del($order_id, $this->user_id);
}
/**
* @notes 订单支付结果页面数据
* @return \think\response\Json
* @author suny
* @date 2021/7/13 6:12 下午
*/
public function pay_result()
{
$id = $this->request->get('id');
$from = $this->request->get('from');//标识:trade:父订单,order:子订单
$result = OrderLogic::pay_result($id,$from);
if ($result !== false) {
return JsonServer::success('', $result);
} else {
return JsonServer::error('参数错误');
}
}
/**
* @notes 获取支付方式
* @return \think\response\Json
* @author suny
* @date 2021/7/13 6:12 下午
*/
public function getPayWay()
{
$params = $this->request->get();
if(!isset($params['from']) || !isset($params['order_id'])) {
return JsonServer::error('参数缺失');
}
$pay_way = OrderLogic::getPayWay($this->user_id, $this->client, $params);
return JsonServer::success('', $pay_way);
}
/**
* @notes 物流查询
* @return \think\response\Json
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
* @throws \think\exception\DbException
* @author suny
* @date 2021/7/13 6:12 下午
*/
public function orderTraces()
{
$order_id = $this->request->get('id');
$tips = '参数错误';
if ($order_id) {
$traces = OrderLogic::orderTraces($order_id, $this->user_id);
if ($traces) {
return JsonServer::success('获取成功', $traces);
}
$tips = '暂无物流信息';
}
return JsonServer::error($tips);
}
/**
* @notes PC获取支付状态
* @return \think\response\Json
* @author suny
* @date 2021/10/29 3:52 下午
*/
public function getPayStatus()
{
$id = $this->request->get('id');
$from = $this->request->get('from');//标识:trade:父订单,order:子订单
$result = OrderLogic::getPayStatus($id,$from);
if ($result !== false) {
return JsonServer::success('', $result);
} else {
return JsonServer::error('参数错误');
}
}
/**
* @notes 发票详情
* @return \think\response\Json
* @author 段誉
* @date 2022/4/12 9:25
*/
public function invoice()
{
$id = $this->request->get('id');
$result = OrderInvoiceLogic::getInvoiceDetailByOrderId($id);
return JsonServer::success('获取成功', $result);
}
2024-08-02 14:37:23 +08:00
/*提交集采订单*/
public function submitJicai(){
$post = $this->request->post();
$post["user_id"] = $this->user_id;
$post["status"] = 0;
$post["create_time"] = time();
$post["get_time"] = strtotime($post["get_time"]);
$res = Db::name("jicai")->insert($post);
if($res){
return JsonServer::success('提交成功');
}
}
2024-07-19 09:52:11 +08:00
/**
* 获取物流地址
*/
public function express()
{
$order_id = $this->request->get('order_id');
$result = Express::getShipping($order_id);
2024-07-29 15:04:48 +08:00
return JsonServer::success('获取成功', []);
try {
$result = json_decode($result, true);
if (isset($result['returnCode']) && $result['returnCode'] == 500) {
return JsonServer::success('获取成功', []);
}
} catch (\Exception $e ) {
}
//return JsonServer::success('获取成功', []);
if ($result == '暂无物流信息') {
return JsonServer::success('获取成功');
} else if(isset($result['returnCode']) && $result['returnCode'] == 200) {
return JsonServer::success('获取成功', $result);
} else if(isset($result['state'])) {
return JsonServer::success('获取成功', $result);
} else if (isset($result['returnCode']) && $result['returnCode'] != 200) {
return JsonServer::success('获取成功', []);
2024-08-02 14:37:23 +08:00
}
2024-07-29 15:04:48 +08:00
//dump(123);die;
// if ($result['returnCode'] == 200) {
2024-08-02 14:37:23 +08:00
2024-07-29 15:04:48 +08:00
// }
2024-07-19 09:52:11 +08:00
}
2024-07-29 15:04:48 +08:00
2024-06-06 11:06:09 +08:00
}