【增加】myDetail

This commit is contained in:
liqianjin 2023-03-03 15:26:53 +08:00
parent 836d9ef8c4
commit 8b4ae16873
7 changed files with 189 additions and 22 deletions

View File

@ -17,7 +17,8 @@ class Futures extends BaseApi{
$status = input('status', 'miaosha');
$condition = [
['a.site_id','=',$this->site_id]
['a.site_id','=',$this->site_id],
['release_time', '<', time() ],
];
$futuresModel = new FuturesModel;
@ -25,19 +26,24 @@ class Futures extends BaseApi{
case 'miaosha':
$condition[] = ['a.status', '=', '2'];
$times = $futuresModel->checkTimes($this->site_id, $this->member_id, 2);
if($times['code'] != 0){
return $this->response($times);
}
break;
case 'jianlou':
$condition[] = ['a.status', '=', '7'];
$times = $futuresModel->checkTimes($this->site_id, $this->member_id, 7);
if($times['code'] != 0){
$times['message'] = '未到捡漏时间';
return $this->response($times);
}
break;
default:
return $this->response($this->error('','参数不合法'));
break;
}
if($times['code'] != 0){
return $this->response($times);
}
// 获取内容
$field = [
@ -46,6 +52,8 @@ class Futures extends BaseApi{
'seller.headimg as seller_headimg',
'g.goods_name',
'g.goods_image',
'g.market_price',
'g.unit',
'a.id',
'a.total',
'a.unit_price',
@ -67,6 +75,8 @@ class Futures extends BaseApi{
$page_size = input('page_size', PAGE_LIST_ROWS);
$list = $futuresModel->getPageList($condition, $page, $page_size, 'a.created_time desc,a.id desc', $field, 'a', $join);
$list['data']['times'] = $times['data'];
$list['data']['start_time'] = strtotime(date("Y-m-d", time())) + $times['data']['start_time'];
$list['data']['end_time'] = strtotime(date("Y-m-d", time())) + $times['data']['end_time'];
return $this->response($list);
}
@ -107,6 +117,8 @@ class Futures extends BaseApi{
'seller.headimg as seller_headimg',
'g.goods_name',
'g.goods_image',
'g.market_price',
'g.unit',
'a.id',
'a.total',
'a.unit_price',
@ -116,11 +128,13 @@ class Futures extends BaseApi{
'a.sell_time',
'a.created_time',
'a.take_time',
'o.order_no'
];
// 表关联
$join = [
['member seller', 'seller.member_id = a.seller_uid', 'left'],// 获取卖家信息
['goods g', 'g.goods_id = a.goods_id', 'left'],// 获取商品信息
['order o', 'o.order_id = a.order_id', 'left'],// 获取商品信息
];
$futuresModel = new FuturesModel;
@ -149,11 +163,11 @@ class Futures extends BaseApi{
$futuresModel = new FuturesModel;
$basicsConfig = $futuresModel->getBasicsConfig($this->site_id)['data']['value'];
if($price < $date['unit_price'] * (1 + $basicsConfig['price_range']['min'] / 100) || $price >= $date['unit_price'] * (1 + $basicsConfig['price_range']['max'] / 100)){// 后台配置范围
if(!($price > $date['unit_price'] * (1 + $basicsConfig['price_range']['min'] / 100) && $price <= $date['unit_price'] * (1 + $basicsConfig['price_range']['max'] / 100))){// 后台配置范围
return $this->response($this->error('','发布失败,价格不在允许范围内'));
}
//TODO 拆单
// $futuresInfo = $futuresModel->detail($date);
//TODO 限制发布时间
return $this->response($futuresModel->release($id, $price));
}
@ -191,7 +205,6 @@ class Futures extends BaseApi{
if(empty($date)){
return $this->response($this->error('','提货失败'));
}
//TODO 提货用来减少用户买入限制
$futuresModel = new FuturesModel;
return $this->response($futuresModel->pickUp($id));
@ -213,7 +226,9 @@ class Futures extends BaseApi{
if($times['code'] != 0){
return $this->response($times);
}
$detail['data']['times'] = $times;
$detail['data']['times'] = $times['data'];
$detail['data']['start_time'] = strtotime(date("Y-m-d", time())) + $times['data']['start_time'];
$detail['data']['end_time'] = strtotime(date("Y-m-d", time())) + $times['data']['end_time'];
return $this->response($detail);
}
/**
@ -228,4 +243,22 @@ class Futures extends BaseApi{
];
return $this->response($this->success($res));
}
/**
* 详情
* @return false|string
*/
public function myDetail(){
$token = $this->checkToken();
if ($token['code'] < 0) return $this->response($token);
$id = input('id', 0);
$futuresModel = new FuturesModel;
$detail = $futuresModel->detail($id, $this->site_id);
if($detail['code'] < 0 || empty($detail['data']) || $detail['data']['seller_uid'] != $this->member_id){
return $this->response($this->error('','订单不存在'));
}
return $this->response($detail);
}
}

View File

@ -20,7 +20,7 @@ class OrderPay
public function handle($param){
if($param['promotion_type'] == 'futures'){
$futures_model = new Futures();
$result = $futures_model->orderComplete($param['promotion_id']);
$result = $futures_model->orderComplete($param['promotion_id'],$param['order_id']);
return $result;
}else{
return success();

View File

@ -5,6 +5,7 @@ use app\model\system\Config as ConfigModel;
use app\model\BaseModel;
use Psr\SimpleCache\InvalidArgumentException;
use think\facade\Cache;
use think\facade\Db;
class Futures extends BaseModel{
@ -44,6 +45,11 @@ class Futures extends BaseModel{
'g.goods_name',
'g.goods_image',
'g.goods_content',
'g.market_price',
'g.unit',
'a.site_id',
'a.seller_uid',
'a.goods_id',
'a.id',
'a.total',
'a.unit_price',
@ -53,11 +59,14 @@ class Futures extends BaseModel{
'a.sell_time',
'a.created_time',
'a.take_time',
'o.order_no',
'o.buyer_message',
];
// 表关联
$join = [
['member seller', 'seller.member_id = a.seller_uid', 'left'],// 获取卖家信息
['goods g', 'g.goods_id = a.goods_id', 'left'],// 获取商品信息
['order o', 'o.order_id = a.order_id', 'left'],// 获取商品信息
];
$detail = model('futures')->getInfo($condition, $field, 'a', $join);
@ -92,13 +101,49 @@ class Futures extends BaseModel{
if(!Cache::store('redis_concurrent')->delete('addon_futures_stock_'.$id)){
return $this->error('','发布失败');
}
model('futures')->update([
'status' => 2,
'release_time' => time(),
'price' => $price
], [['id', '=', $id]]);
Cache::store('redis_concurrent')->set('addon_futures_'.$id,'1');
return $this->success();
model('futures')->startTrans();
try{
//拆单
$futuresInfo = $this->detail($id,$date['site_id'])['data'];
$futuresInfo['status'] = 2;
if($price >= $futuresInfo['market_price'] * $futuresInfo['total']){
$futuresInfo['total'] *= 2;
if($futuresInfo['total'] > pow(2,3)){//TODO 配置单订单商品最大裂变次数
//拆单
$futuresInfo['status'] = 8;
for($i = 0;$i < $futuresInfo['total'];$i++){
$newSmallFuturesId = $this->add([
'site_id' => $futuresInfo['site_id'],
'seller_uid' => $futuresInfo['seller_uid'],
'old_futures_id' => $id,
'goods_id' => $futuresInfo['goods_id'],
'total' => 1,
'unit_price' => $futuresInfo['unit_price'] / $futuresInfo['total'],
'status' => 1,
'order_id' => $futuresInfo['order_id'],
'created_time' => time()
])['data'];
$this->release($newSmallFuturesId,$price / $futuresInfo['total']);
}
}
}
model('futures')->update([
'status' => $futuresInfo['status'],
'release_time' => time() + 3 * 24 * 60 * 60,//TODO 配置上线延迟时间
'price' => $price,
'total' => $futuresInfo['total']
],[['id','=',$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());
}
}
/**
@ -135,6 +180,8 @@ class Futures extends BaseModel{
model('futures')->update([
'status' => 5,
], [['id', '=', $id]]);
//TODO 提货用来减少用户买入限制
return $this->success();
}
@ -153,9 +200,11 @@ class Futures extends BaseModel{
model('futures')->update([
'status' => 6,
'created_time' => time(),
'order_id' => $order_id,
'member_id' => $member_id
], [['id', '=', $id]]);
//TODO 提前秒杀扣除钻石
//TODO 增加用户已下单次数
Cache::store('redis_concurrent')->set('addon_futures_pay_'.$id,'1');
return $this->success();
}
@ -164,7 +213,7 @@ class Futures extends BaseModel{
* 订单完成
* @return array
*/
public function orderComplete($id){
public function orderComplete($id,$order_id){
$date = model('futures')->getInfo([['id', '=', $id]]);
if(empty($date) || $date['status'] !== 6){
return $this->error($date,'完成失败');
@ -185,7 +234,9 @@ class Futures extends BaseModel{
'total' => (int)$date['total'],
'unit_price' => $date['price'],
'status' => 1,
'order_id' => $order_id,
'created_time' => time()]);
//TODO 给用户增加余额
return $this->success();
}
@ -205,6 +256,16 @@ class Futures extends BaseModel{
'status' => 7,
], [['id', '=', $id]]);
Cache::store('redis_concurrent')->set('addon_futures_'.$id,'1');
// 订单取消后 添加违规次数
Db::name('futures_user')
->where('member_id',$date['member_id'])
->update([
'violation_num' => Db::raw('violation_num+1'),
'total_violation_num' => Db::raw('total_violation_num+1'),
]);
return $this->success();
}

View File

@ -1,6 +1,7 @@
<?php
namespace addon\futures\model;
use addon\futures\model\order\FuturesOrderCreate as OrderCreateModel;
use app\model\BaseModel;
use think\Exception;
use think\facade\Db;
@ -140,5 +141,66 @@ class User extends BaseModel{
return $this->error('',$e->getMessage());
}
}
//TODO 回收
// 回收
public function buyBack(){
$nowTime = time() - strtotime("today");
$futuresModel = new Futures();
$basics = $futuresModel->getBasicsConfig($this->site_id)['data']['value'];
$status = 0;
foreach($basics['times'] as $times){
if($nowTime <= $times['jianlou_end_time'] && $nowTime >= $times['jianlou_end_time'] - 5 * 60){//TODO 配置在结束时间前多久开始回购
$status = 7;
break;
}
if($nowTime <= $times['miaosha_end_time'] && $nowTime >= $times['miaosha_end_time'] - 5 * 60){//TODO 配置在结束时间前多久开始回购
$status = 2;
break;
}
}
if($status == 0){
return $this->success('','未达到回购时间');
}
$menberList = model('futures_user')->getList([['is_special', '=', 1]]);
$futuresList = model('futures')->getList([
['status', '=', $status],
['release_time', '<', time()]
]);
foreach($futuresList as $futures){
//创建订单
$order_create = new OrderCreateModel();
$data = [
'futures_id' => $futures[ 'futures_id' ],
'member_id' => $menberList[0]['member_id'],
'site_id' => $this->site_id,//站点id
'order_from' => 'weapp',
'order_from_name' => '微信小程序',
'is_balance' => 0,//是否使用余额
'buyer_message' => '',
'delivery' => isset($this->params[ 'delivery' ]) && !empty($this->params[ 'delivery' ]) ? json_decode($this->params[ 'delivery' ], true) : [],
'coupon' => isset($this->params[ 'coupon' ]) && !empty($this->params[ 'coupon' ]) ? json_decode($this->params[ 'coupon' ], true) : [],
'member_address' => isset($this->params[ 'member_address' ]) && !empty($this->params[ 'member_address' ]) ? json_decode($this->params[ 'member_address' ], true) : [],
'latitude' => $this->params[ 'latitude' ] ?? '',
'longitude' => $this->params[ 'longitude' ] ?? '',
'is_invoice' => $this->params[ 'is_invoice' ] ?? 0,
'invoice_type' => $this->params[ 'invoice_type' ] ?? 0,
'invoice_title' => $this->params[ 'invoice_title' ] ?? '',
'taxpayer_number' => $this->params[ 'taxpayer_number' ] ?? '',
'invoice_content' => $this->params[ 'invoice_content' ] ?? '',
'invoice_full_address' => $this->params[ 'invoice_full_address' ] ?? '',
'is_tax_invoice' => $this->params[ 'is_tax_invoice' ] ?? 0,
'invoice_email' => $this->params[ 'invoice_email' ] ?? '',
'invoice_title_type' => $this->params[ 'invoice_title_type' ] ?? 0,
'buyer_ask_delivery_time' => $this->params[ 'buyer_ask_delivery_time' ] ?? '',
'form_data' => isset($this->params['form_data']) && !empty($this->params['form_data']) ? json_decode($this->params['form_data'], true) : [],
'goods_sku_list' => !empty($this->params['goods_sku_list']) ? json_decode($this->params['goods_sku_list'], true) : [],
'sku_id' => isset($this->params['sku_id']) ? $this->params['sku_id'] : '',
];
$res = $order_create->create($data);
}
}
}

View File

@ -266,7 +266,7 @@ class FuturesOrderCreate extends OrderCreate
['id', '=', $futures_id],
// ['member_id', '=', $member_id],
['status', 'in', [2,7] ],
['release_time', '>', strtotime('-3 day') ],
['release_time', '<', time() ],
);
$futures_info = model('futures')->getInfo($condition) ?? [];
if(empty($futures_info))
@ -278,10 +278,12 @@ class FuturesOrderCreate extends OrderCreate
return $times;
}
//TODO 判断用户是否有足够多的购买机会
//TODO 判断是否本人购买
//TODO 判断惩罚时间
$futures_id = $futures_info['id'];
$data['futures_id'] = $futures_id;
$data['futures_info'] = $futures_info;
$data['futures_info'] = $futuresModel->detail($futures_id,$site_id)['data'];
$data['sku_id'] = $futures_info['goods_id'];
$data['num'] = $futures_info['total'];
//商品列表信息

View File

@ -121,6 +121,7 @@
<div class="layui-form-mid layui-word-aux">%</div>
</div>
</div>
<!-- TODO 特殊账号回购设置-->
</div>
<div class="form-row">
<button class="layui-btn" lay-submit lay-filter="save">保存</button>

View File

@ -14,6 +14,14 @@ Vue.component("many-goods-list-sources", {
text: "手动选择",
icon: "iconshoudongxuanze"
},
point: {
text: "积分",
icon: "iconshoudongxuanze"
},
jianlou: {
text: "捡漏",
icon: "iconshoudongxuanze"
},
},
sortWayList: [
{