This commit is contained in:
zoomtk@126.com 2023-04-25 21:01:31 +08:00
parent c3252e528a
commit 143f9c5ce2
8 changed files with 178 additions and 160 deletions

View File

@ -70,7 +70,8 @@ class Fenxiao extends BaseApi
if (!empty($three_commission[ 'data' ][ 'commission' ])) $commission += $three_commission[ 'data' ][ 'commission' ];
$info[ 'data' ][ 'today_commission' ] = $commission;
$info[ 'data' ][ 'one_commission' ] = $one_commission[ 'data' ][ 'commission' ]??0;
$info[ 'data' ][ 'two_commission' ] = $two_commission[ 'data' ][ 'commission' ]??0;
// 总销售额
$fenxiao_order_info = $fenxiao_order_model->getFenxiaoOrderInfoNew([ [ 'fo.one_fenxiao_id|fo.two_fenxiao_id|fo.three_fenxiao_id', '=', $info[ 'data' ][ 'fenxiao_id' ] ], [ "", 'exp', Db::raw("fo.is_refund=0 or (o.order_status=10 and fo.is_refund=1) ") ] ], 'sum(fo.real_goods_money) as real_goods_money');

View File

@ -150,6 +150,7 @@ class Futures extends BaseApi{
'o.pay_money',
'o.order_id',
'seller.nickname as buyer_name',
'seller.username as buyer_username',
'f.seller_uid as fseller_uid',
];
// 表关联

View File

@ -124,7 +124,6 @@ class Ordercreate extends BaseApi
'order_from' => $this->params[ 'app_type' ],
'is_balance' => $this->params[ 'is_balance' ] ?? 0,//是否使用余额
'order_from_name' => $this->params[ 'app_type_name' ],
'latitude' => $this->params[ 'latitude' ] ?? '',
'longitude' => $this->params[ 'longitude' ] ?? '',
'default_store_id' => $this->params[ 'default_store_id' ] ?? 0,
@ -138,6 +137,7 @@ class Ordercreate extends BaseApi
return $this->response($res);
}
public function memberAddress(){
$token = $this->checkToken();
if ($token[ 'code' ] < 0) return $this->response($token);

View File

@ -14,6 +14,7 @@ namespace addon\futures\model;
use addon\futures\model\Futures as FuturesModel;
use addon\fenxiao\model\FenxiaoOrder;
use app\model\BaseModel;
use think\facade\Db;
class Forder extends BaseModel
{
/**
@ -22,12 +23,14 @@ class Forder extends BaseModel
*/
public function calculate($order)
{
$site_id=$order['site_id'];
$futuresModel = new FuturesModel;
$basics = $futuresModel->getBasicsConfig($site_id)['data']['value'];
if(!empty(model("fenxiao_order")->getValue(['order_id'=>$order[ 'order_id' ]],'fenxiao_order_id'))){
if(!empty(model("fenxiao_order")->getValue(['order_id'=>$order[ 'order_id' ]],'fenxiao_order_id'))){//判断是否重复计算
return $this->success();
}
//检测分销商上级关系
$member_info = model("member")->getInfo([ [ 'member_id', '=', $order[ 'member_id' ] ] ], 'fenxiao_id,is_fenxiao');
//如果没有分销商直接返回不计算,没有考虑首次付款上下级绑定
@ -51,10 +54,20 @@ class Forder extends BaseModel
$is_range=$basics['is_range'];
if($is_range && $parent_fenxiao_info){ //减去极差奖励
$direct_push -=$indirect_push;
}else{
$direct_push +5; //管理直推
}
$unit_price=Db::name('futures')->alias('a')
->where([
'a.order_id'=>$order['order_id'],
'a.seller_uid'=>$order[ 'member_id' ]]
)
->join( 'futures f','a.old_futures_id=f.id')
->value('f.unit_price'); //获取上次买入价格
$order_goods = model("order_goods")->getInfo(['order_id'=>$order[ 'order_id' ]]);
$commission_rate=$direct_push+$indirect_push; //总佣金比例
$service_charge=$order['order_money']*$basics['service_price']/100;//总服务费
$service_charge=$unit_price * $basics['service_price']/100;//总服务费
$commission=$commission_rate*$service_charge/100;//总佣金
$order_fenxiao_data = [
'one_rate' => $direct_push,
@ -74,9 +87,9 @@ class Forder extends BaseModel
'sku_id' => $order_goods[ 'sku_id' ],
'sku_name' => $order_goods[ 'sku_name' ],
'sku_image' => $order_goods[ 'sku_image' ],
'price' => $order[ 'order_money' ],
'price' => $unit_price,
'num' => $order_goods[ 'num' ],
'real_goods_money' =>$order[ 'order_money' ],
'real_goods_money' =>$unit_price,
'member_id' => $order[ 'member_id' ],
'member_name' => $order[ 'name' ],
'member_mobile' => $order[ 'mobile' ],

View File

@ -1,6 +1,7 @@
<?php
namespace addon\futures\model;
use addon\fenxiao\model\FenxiaoAccount;
use addon\futures\model\Futures as FuturesModel;
use addon\message\model\Message;
@ -11,7 +12,8 @@ use Psr\SimpleCache\InvalidArgumentException;
use think\facade\Cache;
use think\facade\Db;
class Futures extends BaseModel{
class Futures extends BaseModel
{
/**
* 获取列表
@ -29,13 +31,15 @@ class Futures extends BaseModel{
$list = model('futures')->pageList($condition, $field, $order, $page, $page_size, $alias, $join);
return $this->success($list);
}
/**
* 详情
* @param $id
* @param $site_id
* @return array
*/
public function detail($id, $site_id){
public function detail($id, $site_id)
{
$condition = [
['a.id', '=', $id],
['a.site_id', '=', $site_id]
@ -68,7 +72,7 @@ class Futures extends BaseModel{
'a.take_time',
'o.order_no',
'o.buyer_message',
'buyer.nickname as buyer_name',
'seller.nickname as buyer_name'
];
// 表关联
$join = [
@ -79,22 +83,22 @@ class Futures extends BaseModel{
['futures f', 'f.id = a.old_futures_id', 'left'],// 获取旧订单信息
['member old_seller', 'old_seller.member_id = f.seller_uid', 'left'],// 获取旧卖家信息
];
$detail = model('futures')->getInfo($condition, $field, 'a', $join);
return $this->success($detail);
}
/**
* 增加库存
* @param $data
* @return array
* @throws InvalidArgumentException
*/
public function add($data){
public function add($data)
{
$id = model('futures')->add($data);
if (!($id > 0)) {
return $this->error('', '添加失败');
}
Cache::store('redis_concurrent')->set('addon_futures_stock_'.$id,'1');
return $this->success($id);
}
@ -105,14 +109,12 @@ class Futures extends BaseModel{
* @return array
* @throws InvalidArgumentException
*/
public function release($id, $price, $agree_split_order = 0){
public function release($id, $price, $agree_split_order = 0)
{
$date = model('futures')->getInfo([['id', '=', $id]]);
if (empty($date) || $date['status'] !== 1) {
return $this->error('', '发布失败-db');
}
if(!Cache::store('redis_concurrent')->delete('addon_futures_stock_'.$id)){
return $this->error('','发布失败-chche'.'addon_futures_stock_'.$id);
}
$basics = $this->getBasicsConfig($date['site_id'])['data']['value'];
model('futures')->startTrans();
try {
@ -130,7 +132,6 @@ class Futures extends BaseModel{
//拆单
$futuresInfo['status'] = 8;
$splitOrderNum = $basics['split_order_num'];
// for($i = 0;$i < $futuresInfo['total'];$i++){
for ($i = 0; $i < $splitOrderNum; $i++) {
$newSmallFuturesId = $this->add([
'site_id' => $futuresInfo['site_id'],
@ -143,14 +144,15 @@ class Futures extends BaseModel{
'order_id' => $futuresInfo['order_id'],
'created_time' => time()
])['data'];
$this->release($newSmallFuturesId,$price / $futuresInfo['total']);
$this->release($newSmallFuturesId, $price / $splitOrderNum);
}
model('futures')->commit();
return $this->success();
}
}
}
$service_price = $price * $basics['service_price'] / 100;
$service_price = $date['unit_price'] * $basics['service_price'] / 100; //更改为买入价格
$technical_range = $service_price * $basics['technical_range'] / 100;
if (model('member')->getValue(['member_id' => $date['seller_uid']], 'balance_money') < $service_price) {
Cache::store('redis_concurrent')->set('addon_futures_stock_'.$id,'1');
return error(-800, '您余额不足!');
}
model('futures')->update([
@ -164,45 +166,44 @@ class Futures extends BaseModel{
//扣除服务费
$memberAccountModel = new MemberAccount();
$memberAccountModel->addMemberAccount($date['site_id'], $date['seller_uid'], 'balance_money', -$technical_range, 'service_price', $date['id'], '服务费', $date['id']);
$memberAccountModel->addMemberAccount($date['site_id'], $date['seller_uid'], 'balance_money', -$service_price-$technical_range, 'service_price', $date['id'], '商家分账', $date['id']);
$memberAccountModel->addMemberAccount($date['site_id'], $date['seller_uid'], 'balance_money', -($service_price - $technical_range), 'service_price', $date['id'], '商家分账', $date['id']);
model('futures')->commit();
Cache::store('redis_concurrent')->set('addon_futures_'.$id,'1');
return $this->success();
} catch (\Exception $e) {
model('futures')->rollback();
Cache::store('redis_concurrent')->set('addon_futures_stock_'.$id,'1');
return $this->error('', $e->getMessage() . $e->getFile() . $e->getLine());
}
}
/**
* 下架到库存
* @return array
*/
public function stock($id){
public function stock($id)
{
$date = model('futures')->getInfo([['id', '=', $id]]);
if (empty($date) || $date['status'] !== 2) {
return $this->error('', '下架失败');
}
if(!Cache::store('redis_concurrent')->delete('addon_futures_'.$id)){
return $this->error('','下架失败');
}
model('futures')->update([
'status' => 1,
], [['id', '=', $id]]);
//扣除服务费
$memberAccountModel = new MemberAccount();
$memberAccountModel->addMemberAccount($date['site_id'], $date['seller_uid'], 'balance_money', $date['service_price'], 'service_price', $date['id'], '退回服务费与商家分账', $date['id']);
Cache::store('redis_concurrent')->set('addon_futures_stock_'.$id,'1');
Cache::store('redis_concurrent')->delete('addon_futures_' . $id);
return $this->success();
}
/**
* 提货
* @param $id
* @return array
* @throws InvalidArgumentException
*/
public function pickUp($id){
public function pickUp($id)
{
$date = model('futures')->getInfo([['id', '=', $id]]);
if (empty($date) || $date['status'] !== 1) {
return $this->error($date, '提货失败');
@ -212,9 +213,6 @@ class Futures extends BaseModel{
if (empty($member_address)) {
return $this->error($date, '提货失败-无收获地址');
}
if(!Cache::store('redis_concurrent')->delete('addon_futures_stock_'.$id)){
return $this->error('','提货失败');
}
model('futures')->update([
'status' => 5,
], [['id', '=', $id]]);
@ -232,9 +230,7 @@ class Futures extends BaseModel{
'latitude' => $member_address['latitude'] ?? '',
'promotion_type' => 'futures_tihuo',
];
model('order')->update($order_info, [['order_id', '=', $date['order_id']]]);
$basics = $this->getBasicsConfig($date['site_id'])['data']['value'];
// 提货用来减少用户买入限制
Db::name('futures_user')
@ -249,14 +245,18 @@ class Futures extends BaseModel{
* 订单创建
* @return array
*/
public function orderCreate($id, $order_id, $member_id){
public function orderCreate($id, $order_id, $member_id)
{
$date = model('futures')->getInfo([['id', '=', $id]]);
if (empty($date) || ($date['status'] !== 2 && $date['status'] !== 7)) {
return $this->error($date, '下单失败-1001');
}
if(!Cache::store('redis_concurrent')->delete('addon_futures_'.$id)){
return $this->error('','下单失败-1002');
// if (!Cache::store('redis_concurrent')->delete('addon_futures_' . $id)) {
// return $this->error('', '下单失败-1002');
// }
if(Cache::store('redis_concurrent')->get('addon_futures_' . $id)){
return $this->error('', '你太慢了已被抢购');
}
model('futures')->update(
[
@ -267,14 +267,14 @@ class Futures extends BaseModel{
],
[['id', '=', $id]]);
//增加用户已下单次数
$res=Db::name('futures_user')
Db::name('futures_user')
->where('member_id', $member_id)
->update([
'business_num' => Db::raw('business_num +1'),
'total_business_num' => Db::raw('total_business_num +1'),
]);
(new Message())->addMessage($date['site_id'], '订单创建', 1, $member_id, $id);
Cache::store('redis_concurrent')->set('addon_futures_pay_'.$id,'1');
Cache::store('redis_concurrent')->set('addon_futures_' . $id, '1');
return $this->success();
}
@ -282,14 +282,12 @@ class Futures extends BaseModel{
* 订单完成
* @return array
*/
public function orderComplete($id,$order_id){
public function orderComplete($id, $order_id)
{
$date = model('futures')->getInfo([['id', '=', $id]]);
if (empty($date) || $date['status'] !== 6) {
return $this->error($date, '完成失败');
}
if(!Cache::store('redis_concurrent')->delete('addon_futures_pay_'.$id)){
return $this->error('','完成失败');
}
$date = model('futures')->getInfo([['id', '=', $id]]);
model('futures')->update([
'status' => 3,
@ -300,6 +298,7 @@ class Futures extends BaseModel{
'order_id' => $order_id,
'site_id' => $date['site_id'],
'seller_uid' => $date['member_id'],
'member_id' => $date['member_id'],
'old_futures_id' => $id,
'goods_id' => (int)$date['goods_id'],
'total' => (int)$date['total'],
@ -323,6 +322,7 @@ class Futures extends BaseModel{
$point = $date['price'] * $basics['order_give_points_ratio'] / 100;
//赠送积分
$memberAccountModel->addMemberAccount($date['site_id'], $date['member_id'], 'point', intval($point), 'sell', $date['id'], '秒杀赠送积分', $date['id']);
Cache::store('redis_concurrent')->delete('addon_futures_' . $id);
return $this->success();
}
@ -330,14 +330,16 @@ class Futures extends BaseModel{
* 订单取消
* @return array
*/
public function orderClose($id){
public function orderClose($id)
{
$date = model('futures')->getInfo([['id', '=', $id]]);
if (empty($date) || $date['status'] !== 6) {
return $this->error($date, '取消失败');
}
if(!Cache::store('redis_concurrent')->delete('addon_futures_pay_'.$id)){
return $this->error('','取消失败');
}
// if(!Cache::store('redis_concurrent')->delete('addon_futures_pay_'.$id)){
// return $this->error('','取消失败');
// }
// Cache::store('redis_concurrent')->delete('addon_futures_pay_' . $id);
model('futures')->update(['status' => 7], [['id', '=', $id]]);
Cache::store('redis_concurrent')->set('addon_futures_' . $id, '1');
(new Message())->addMessage($date['site_id'], '订单取消', 1, $date['member_id'], $id);
@ -400,6 +402,7 @@ class Futures extends BaseModel{
$config = new ConfigModel();
return $config->getConfig([['site_id', '=', $site_id], ['app_module', '=', 'shop'], ['config_key', '=', 'MIAOSHA_BASICS_CONFIG']]);
}
/**
* 判断当前时间是否在秒杀开启时间,并区分有无钻石用户
* @param $site_id
@ -407,7 +410,8 @@ class Futures extends BaseModel{
* @param $status
* @return array
*/
public function checkTimes($site_id, $member_id, $status = 2){
public function checkTimes($site_id, $member_id, $status = 2)
{
switch ($status) {
case '2':
$startTimeKey = 'miaosha_start_time';

View File

@ -113,28 +113,19 @@ class User extends BaseModel{
try{
$futuresModel = new Futures();
$time = time();
$insert = [];
for($i=0;$i<$info['order_num'];$i++){
$futuresModel->add([
'site_id' => $this->site_id,
'seller_uid' => $memberId,
'member_id' => $memberId,
'goods_id' => (int)$info['goods_id'],
'total' => (int)$info['goods_num'],
'price' => sprintf("%.2f",$info['unit_price'] * $info['goods_num']),
'unit_price' => sprintf("%.2f",$info['unit_price'] * $info['goods_num']),
'status' => 1,
'created_time' => $time,
]);
// $insert[] = [
// 'site_id' => $this->site_id,
// 'seller_uid' => $memberId,
// 'goods_id' => (int)$info['goods_id'],
// 'total' => (int)$info['goods_num'],
// 'unit_price' => sprintf("%.2f",$info['unit_price'] * $info['goods_num']),
// 'status' => 1,
// 'created_time' => $time,
// ];
}
// Db::name('futures')->insertAll($insert);
return $this->success();
}catch(Exception $e){
return $this->error('',$e->getMessage());

View File

@ -197,7 +197,7 @@ class FuturesOrderCreate extends OrderCreate
$calculate_data[ 'shop_goods_list' ][ 'goods_list' ][ $k_order_goods ][ 'order_goods_id' ] = $order_goods_id;
}
$futures_model = new Futures;
$futures_info = $futures_model->orderCreate($data['futures_id'],$order_id,$data['member_id']);
$futures_info = $futures_model->orderCreate($data['futures_id'],$order_id,$member_id);
if ($futures_info[ 'code' ] != 0) {
model('order')->rollback();
return $futures_info;

View File

@ -14,6 +14,7 @@
namespace app\pay\controller;
use addon\aliapp\model\CloudPay;
use addon\aliapp\model\OpenPay;
use addon\futures\model\Forder;
use app\Controller;
use think\Validate;
use think\facade\Db;
@ -30,7 +31,14 @@ class Test extends Controller
public function s(){
var_dump(329*1/100);
$order=model('order')->getInfo(['order_id'=>258]);
$res= (new Forder())->calculate($order); //计算订单佣金
var_dump($res);
// var_dump(329*1/100);
// $paydata='{"item_code":"AM010201000000117823","charset":"UTF-8","notify_time":"2023-02-02 10:41:48","commodity_order_id":"202302020000000008847076","quantity":"1","total_price":"0.00","method":"alipay.open.servicemarket.order.notify","sign":"PrqlBU8y1sIIS962JrLmAuggPH89kSTy1cPLur9z0ynHI0YurAVVahaxxt9iWErUMOQGNKehyilyMtCeZdRh84hSdHKktSTHpDvy423sX9xVLYvPBii05joMBJUZ3PM4y7BbizyPamie3yPqdomDuGQ539AYTA\/9YtmwUoh62zjloIoq4UefDOihwuESGFmB5B3HYbw6HpSiVbe8lHEGNSKOGBTCi2OowaSk1sGaT9\/5dQgBCARDGb+amg4pKGMkw105ERlD2EEW9qoGQNwQVP7o9R5UP+7KqgOhg+X95kW5qcIjltjF6rRPa2cH\/j1WQ1RSeTfTuuRBOMLAOr3xuw==","order_time":"2023-02-02 10:38:00","title":"客单豹","specifications":"客单豹","version":"1.0","notify_id":"2023020200222103800094771410174673","merchant_pid":"2088402283167085","package_count":"0","notify_type":"servicemarket_order_notify","period_day":"-1","phone":"18980669271","name":"*敏","order_item_num":"1","contactor":"柏鸿凯","app_id":"2021003167617037","sign_type":"RSA2","timestamp":"2023-02-02 10:41:48"}';
// $res= event('AliAuthNotify',json_decode($paydata,true));
// var_dump($res);