Merge branch 'feature/purchase_record' into dev

This commit is contained in:
luofei 2023-07-14 16:14:55 +08:00
commit 57eeeece53
6 changed files with 126 additions and 7 deletions

View File

@ -15,6 +15,7 @@ namespace app\common\model\community;
use app\common\model\BaseModel;
use app\common\model\store\product\Spu;
use app\common\model\store\Resale;
use app\common\model\system\Relevance;
use app\common\model\user\User;
use app\common\repositories\system\RelevanceRepository;
@ -173,8 +174,7 @@ class Community extends BaseModel
public function resale()
{
return $this->hasMany(Relevance::class, 'left_id','community_id')
->where('type',RelevanceRepository::TYPE_COMMUNITY_PRODUCT);
return $this->hasMany(Resale::class, 'community_id','community_id');
}
}

View File

@ -0,0 +1,26 @@
<?php
namespace app\common\model\store;
use app\common\model\BaseModel;
use app\common\model\store\product\Spu;
class Resale extends BaseModel
{
public static function tablePk(): string
{
return 'id';
}
public static function tableName(): string
{
return 'resale';
}
public function spu()
{
return $this->hasOne(Spu::class, 'product_id','product_id');
}
}

View File

@ -13,6 +13,9 @@
namespace app\common\repositories\community;
use app\common\dao\community\CommunityDao;
use app\common\model\store\product\ProductAttrValue;
use app\common\model\store\product\PurchaseRecord;
use app\common\model\store\Resale;
use app\common\repositories\BaseRepository;
use app\common\repositories\store\order\StoreOrderProductRepository;
use app\common\repositories\store\product\SpuRepository;
@ -112,13 +115,22 @@ class CommunityRepository extends BaseRepository
],
'is_fans' => function($query) use($userInfo){
$query->where('left_id',$userInfo->uid?? 0);
}
},
'resale',
]);
$count = $query->count();
$list = $query->page($page, $limit)->setOption('field',[])
->field('community_id,title,image,topic_id,Community.count_start,count_reply,start,Community.create_time,Community.uid,Community.status,is_show,content,video_link,is_type,refusal')
->select()->append(['time']);
if ($list) $list = $list->toArray();
foreach ($list as $k => $item) {
if ($item['is_type'] == self::COMMUNITY_TYPE_RESALE) {
$list[$k]['total_price'] = '0';
foreach ($item['resale'] as $value) {
$list[$k]['total_price'] = bcadd($list[$k]['total_price'], bcmul($value['price'], $value['number'], 2), 2);
}
}
}
return compact('count','list');
}
@ -238,6 +250,11 @@ class CommunityRepository extends BaseRepository
'is_start' => function ($query) use ($user) {
$query->where('left_id', $user->uid ?? '');
},
'resale' => [
'spu' => function ($query) {
$query->field('spu_id,store_name,image,price,product_type,activity_id,product_id');
}
],
])->hidden(['is_del'])->find();
if (!$data) throw new ValidateException('内容不存在,可能已被删除了哦~');
@ -251,6 +268,12 @@ class CommunityRepository extends BaseRepository
'type' => RelevanceRepository::TYPE_COMMUNITY_FANS,
]);
$data['is_fans'] = $is_fans;
if ($data['is_type'] == self::COMMUNITY_TYPE_RESALE) {
$data['total_price'] = '0';
foreach ($data['resale'] as $value) {
$data['total_price'] = bcadd($data['total_price'], bcmul($value['price'], $value['number'], 2), 2);
}
}
return $data;
}
@ -304,6 +327,9 @@ class CommunityRepository extends BaseRepository
return Db::transaction(function () use($data) {
$community = $this->dao->create($data);
if ($data['spu_id'])$this->joinProduct($community->community_id,$data['spu_id']);
if ($data['product_info'] && $data['is_type'] == self::COMMUNITY_TYPE_RESALE) {
$this->resale($community->community_id, $data['product_info']);
}
event('community.create',compact('community'));
return $community->community_id;
});
@ -508,5 +534,53 @@ class CommunityRepository extends BaseRepository
return $make->getWechatQrcodePath($name, $link, false, $key);
}
}
/**
* 转售贴
* @param $id
* @param array $data
* @return void
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function resale($id, array $data)
{
$insert = [];
foreach ($data as $value) {
$purchaseRecord = PurchaseRecord::find($value['purchase_record_id']);
$exist = Resale::where('purchase_record_id', $purchaseRecord['id'])->find();
if ($exist) {
throw new ValidateException('已发起转售');
}
if (empty($purchaseRecord) || ($purchaseRecord['number'] - $purchaseRecord['sales_volume']) <= 0) {
throw new ValidateException('进货记录不存在或已售罄');
}
if (($purchaseRecord['number'] - $purchaseRecord['sales_volume']) < $value['number']) {
throw new ValidateException('库存不足');
}
if ($value) {
$insert[] = [
'community_id' => $id,
'purchase_record_id' => $purchaseRecord['id'],
'product_id' => $purchaseRecord['product_id'],
'product_attr_unique' => $purchaseRecord['unique'],
'mer_id' => $purchaseRecord['mer_id'],
'number' => $value['number'],
'price' => $value['price'],
'update_time' => date('Y-m-d H:i:s'),
];
}
$purchaseRecord->product->stock -= $value['number'];
$purchaseRecord->product->save();
$attrValue = ProductAttrValue::where('product_id', $purchaseRecord['product_id'])->where('unique', $purchaseRecord['unique'])->find();
$attrValue->stock -= $value['number'];
$attrValue->save();
}
if ($insert) {
Resale::getInstance()->insertAll($insert);
}
}
}

View File

@ -851,7 +851,6 @@ class StoreOrderRepository extends BaseRepository
$param['StoreOrder.is_del'] = 0;
switch ($status) {
case 1:
$param['paid'] = 0;
break; // 未支付
case 2:
$param['paid'] = 1;
@ -1494,6 +1493,12 @@ class StoreOrderRepository extends BaseRepository
$status = $where['status'];
unset($where['status']);
$query = $this->dao->search($where)->where($this->getOrderType($status))
->when($status == 4, function ($query) {
$query->where('paid', 1)->where('pay_type', '<>', StoreGroupOrder::PAY_TYPE_CREDIT_BUY);
})
->when($status == 1, function ($query) {
$query->whereRaw("(StoreOrder.paid=0 and StoreOrder.status!=12) or (StoreOrder.paid=1 and StoreOrder.pay_type=8 and StoreOrder.status=2)");
})
->with([
'orderProduct',
'merchant' => function ($query) {
@ -2591,7 +2596,7 @@ class StoreOrderRepository extends BaseRepository
$products = $order->orderProduct;
$currentOrder = $order->toArray();
foreach ($products as $k => $product) {
$purchaseRecord = PurchaseRecord::where(['order_id' => $product['order_id'], 'order_product_id' => $product['product_id'], 'order_unique' => $product['product_sku']])->field('mer_id,product_id,unique,number,sales_volume')->find();
$purchaseRecord = PurchaseRecord::where(['order_id' => $product['order_id'], 'order_product_id' => $product['product_id'], 'order_unique' => $product['product_sku']])->field('id,number,sales_volume')->find();
if (!empty($purchaseRecord)) {
$currentOrder['orderProduct'][$k]['sales_volume'] = $purchaseRecord->sales_volume;
$currentOrder['orderProduct'][$k]['purchase_record'] = $purchaseRecord->toArray();

View File

@ -12,8 +12,10 @@
namespace app\controller\api\community;
use app\common\model\system\merchant\Merchant;
use app\common\repositories\community\CommunityRepository;
use app\common\repositories\store\order\StoreOrderProductRepository;
use app\common\repositories\store\order\StoreOrderRepository;
use app\common\repositories\system\RelevanceRepository;
use app\common\repositories\user\UserHistoryRepository;
use app\common\repositories\user\UserRelationRepository;
@ -268,7 +270,7 @@ class Community extends BaseController
public function checkParams()
{
$data = $this->request->params(['image','topic_id','content','spu_id','order_id',['is_type',1],'video_link']);
$data = $this->request->params(['image','topic_id','content','spu_id','order_id',['is_type',1],'video_link', 'product_info']);
$config = systemConfig(["community_app_switch",'community_audit','community_video_audit']);
$data['status'] = 0;
$data['is_show'] = 0;
@ -280,7 +282,7 @@ class Community extends BaseController
$data['is_show'] = 1;
$data['status_time'] = date('Y-m-d H:i:s', time());
}
} else {
} elseif ($data['is_type'] == 2) {
if (!in_array($this->repository::COMMUNIT_TYPE_VIDEO,$config['community_app_switch']))
throw new ValidateException('短视频未开启');
if ($config['community_video_audit']) {
@ -427,4 +429,15 @@ class Community extends BaseController
if (!$url) return app('json')->fail('二维码生成失败');
return app('json')->success(compact('url'));
}
public function getOrderList()
{
[$page, $limit] = $this->getPage();
$keyword = $this->request->param('keyword');
/** @var StoreOrderRepository $repo */
$repo = app()->make(StoreOrderRepository::class);
$list = $repo->purchaseOrder(['uid' => $this->request->uid()], $keyword, $page, $limit);
return app('json')->success($list);
}
}

View File

@ -400,6 +400,7 @@ Route::group('api/', function () {
Route::get('/:id/reply', 'CommunityReply/lst');
Route::get('/focuslst', 'Community/focuslst');
Route::get('/getOrderList', 'Community/getOrderList');
})->prefix('api.community.');
//上传图片
Route::post('upload/image/:field', 'api.Common/uploadImage');