6
0
Fork 0

admin store order 添加成本价/售价总额

release
1163816051@qq.com 2022-05-26 13:40:43 +08:00
parent fcebed9a9d
commit f70e9605b6
7 changed files with 150 additions and 39 deletions

View File

@ -8,6 +8,7 @@ use App\Models\{Order, OrderProduct, OrderPackage};
use App\Enums\PayWay; use App\Enums\PayWay;
use Dcat\Admin\Layout\Row; use Dcat\Admin\Layout\Row;
use Dcat\Admin\Widgets\{Box, Tab, Card}; use Dcat\Admin\Widgets\{Box, Tab, Card};
use App\Constants\OrderStatus;
class OrderController extends AdminController class OrderController extends AdminController
{ {
@ -49,6 +50,12 @@ class OrderController extends AdminController
$grid->column('total_amount')->display(function ($value) { $grid->column('total_amount')->display(function ($value) {
return bcdiv($value, 100, 2); return bcdiv($value, 100, 2);
})->prepend('¥'); })->prepend('¥');
$grid->column('market_price')->display(function ($value) {
return bcdiv($value, 100, 2);
})->prepend('¥');
$grid->column('cost_price')->display(function ($value) {
return bcdiv($value, 100, 2);
})->prepend('¥');
$grid->column('sales_value'); $grid->column('sales_value');
$grid->column('order_status')->using($this->statusMap)->dot($this->statusColor); $grid->column('order_status')->using($this->statusMap)->dot($this->statusColor);
$grid->column('pay_way')->display(function ($v) { $grid->column('pay_way')->display(function ($v) {
@ -65,7 +72,40 @@ class OrderController extends AdminController
$filter->like('sn')->width(3); $filter->like('sn')->width(3);
$filter->like('user.phone')->width(3); $filter->like('user.phone')->width(3);
$filter->like('inviter.phone')->width(3); $filter->like('inviter.phone')->width(3);
$filter->between('created_at')->dateTime()->width(7); $filter->equal('pay_way')->select([
PayWay::WxpayMiniProgram->value => PayWay::WxpayMiniProgram->text(),
PayWay::Offline->value => PayWay::Offline->text(),
])->width(3);
$filter->where('order_status', function ($q) {
switch ($this->input) {
case OrderStatus::PENDING:
$q->where('status', Order::STATUS_PENDING);
break;
case OrderStatus::WAIT_SHIPPING:
$q->where('status', Order::STATUS_PAID)->where('shipping_state', Order::SHIPPING_STATE_PENDING);
break;
case OrderStatus::SHIPPING:
$q->where('status', Order::STATUS_PAID)->where('shipping_state', Order::SHIPPING_STATE_PROCESSING);
break;
case OrderStatus::SHIPPED:
$q->where('status', Order::STATUS_PAID)->where('shipping_state', Order::SHIPPING_STATE_PROCESSED);
break;
case OrderStatus::COMPLETED:
$q->where('status', Order::STATUS_COMPLETED);
break;
case OrderStatus::CANCELLED:
$q->where('status', Order::STATUS_CANCELLED);
break;
}
})->select([
OrderStatus::PENDING => '待付款',
OrderStatus::WAIT_SHIPPING => '待发货',
OrderStatus::SHIPPING => '发货中',
OrderStatus::SHIPPED => '已发货',
OrderStatus::COMPLETED => '已完成',
OrderStatus::CANCELLED => '已取消'
])->width(3);
$filter->between('created_at')->dateTime()->width(6);
}); });
return $grid; return $grid;
} }
@ -80,6 +120,12 @@ class OrderController extends AdminController
$show->field('total_amount')->as(function ($value) { $show->field('total_amount')->as(function ($value) {
return bcdiv($value, 100, 2); return bcdiv($value, 100, 2);
}); });
$show->field('market_price')->as(function ($value) {
return bcdiv($value, 100, 2);
});
$show->field('cost_price')->as(function ($value) {
return bcdiv($value, 100, 2);
});
$show->field('sales_value'); $show->field('sales_value');
$show->field('order_status')->as(function ($v) { $show->field('order_status')->as(function ($v) {
return $this->order_status; return $this->order_status;

View File

@ -14,7 +14,9 @@ class TotalMoney extends Card
$this->title('营业额'); $this->title('营业额');
$this->subTitle('订单营业额'); $this->subTitle('订单营业额');
$this->withContent(Order::whereNotNull('store_id')->where('status', Order::STATUS_COMPLETED)->sum('total_amount')); $money = floor(Order::whereNotNull('store_id')->where('status', Order::STATUS_COMPLETED)->sum('total_amount') / 100);
$this->withContent(number_format($money));
} }
public function withContent($content) public function withContent($content)

View File

@ -94,6 +94,8 @@ class Order extends Model
'source_id', 'source_id',
'store_id', 'store_id',
'inviter_id', 'inviter_id',
'market_price',
'cost_price',
]; ];
/** /**

View File

@ -42,6 +42,8 @@ class OrderProduct extends Model
'is_gift', 'is_gift',
'activity_id', 'activity_id',
'bargain_amount', 'bargain_amount',
'market_price',
'cost_price',
]; ];
public function packageProducts() public function packageProducts()

View File

@ -151,6 +151,7 @@ class OrderService
$note, $note,
$coupon, $coupon,
$bargainOrder,//添加砍价订单逻辑 $bargainOrder,//添加砍价订单逻辑
$mapProducts
); );
$this->storeOrderProducts($order, $mapProducts); $this->storeOrderProducts($order, $mapProducts);
@ -209,7 +210,9 @@ class OrderService
$salesValue, $salesValue,
null, null,
$note, $note,
$coupon $coupon,
null,
$mapProducts
); );
$order->update([ $order->update([
'store_id' => $order_pre->store_id, 'store_id' => $order_pre->store_id,
@ -234,15 +237,18 @@ class OrderService
/** /**
* 保存订单 * 保存订单
* *
* @param \App\Models\User $user * @param \App\Models\User $user 下单用户
* @param \App\Models\ShippingAddress $shippingAddress * @param int $productsTotalAmount 商品售价总额
* @param int $productsTotalAmount * @param int $couponDiscountAmount 优惠券抵扣金额
* @param int $couponDiscountAmount * @param int $vipDiscountAmount 会员抵扣金额
* @param int $vipDiscountAmount * @param int $shippingFee 配送费
* @param int $shippingFee * @param float $salesValue 成长值
* @param float $salesValue * @param \App\Models\ShippingAddress $shippingAddress 配送地址
* @param string|null $note * @param string $note 用户订单备注
* @param \App\Models\UserCoupon|null $coupon * @param \App\Models\UserCoupon $coupon 使用的优惠券
* @param \App\Models\BargainOrder 砍价订单
* @param array 商品列表
*
* @return \App\Models\Order * @return \App\Models\Order
*/ */
protected function storeOrder( protected function storeOrder(
@ -256,6 +262,7 @@ class OrderService
?string $note = null, ?string $note = null,
?UserCoupon $coupon = null, ?UserCoupon $coupon = null,
?BargainOrder $bargainOrder = null, ?BargainOrder $bargainOrder = null,
?array $mapProducts = null
): Order { ): Order {
// 订单支付金额=商品总额-券折扣金额-会员折扣金额+邮费-砍价金额 // 订单支付金额=商品总额-券折扣金额-会员折扣金额+邮费-砍价金额
$totalAmount = $productsTotalAmount - $couponDiscountAmount - $vipDiscountAmount; $totalAmount = $productsTotalAmount - $couponDiscountAmount - $vipDiscountAmount;
@ -271,35 +278,42 @@ class OrderService
$totalAmount += $shippingFee; $totalAmount += $shippingFee;
// 生成不重复的订单号
do { do {
// 如果订单号重复,则直接重试 $sn = serial_number();
try { } while(Order::where('sn', $sn)->exists());
$attrs = [
'sn' => serial_number(),
'user_coupon_id' => $coupon?->id,
'coupon_discount_amount' => $couponDiscountAmount,
'vip_discount_amount' => $vipDiscountAmount,
'shipping_fee' => $shippingFee,
'products_total_amount' => $productsTotalAmount,
'total_amount' => $totalAmount, // 商品总额-券折扣金额-会员折扣金额+邮费
'sales_value' => $salesValue, // 订单总销售值
'note' => $note,
// 收货地址
'consignee_name' => $shippingAddress->consignee??'',
'consignee_telephone' => $shippingAddress->telephone??'',
'consignee_zone' => $shippingAddress->zone??'',
'consignee_address' => $shippingAddress->address??'',
//砍价订单金额
'bargain_amount'=>$bargainOrder?->bargain_price ?? 0,
];
return $user->orders()->create($attrs); // 计算商品市场价和成本价之和
} catch (QueryException $e) { $market_price = 0;
if (strpos($e->getMessage(), 'Duplicate entry') === false) { $cost_price = 0;
throw $e; foreach($mapProducts as $item) {
} $sku = $item['sku'];
} $market_price += $sku->market_price;
} while (true); $cost_price += $sku->cost_price;
}
$attrs = [
'sn' => $sn,
'user_coupon_id' => $coupon?->id,
'coupon_discount_amount' => $couponDiscountAmount,
'vip_discount_amount' => $vipDiscountAmount,
'shipping_fee' => $shippingFee,
'products_total_amount' => $productsTotalAmount,
'total_amount' => $totalAmount, // 商品总额-券折扣金额-会员折扣金额+邮费
'sales_value' => $salesValue, // 订单总销售值
'note' => $note,
// 收货地址
'consignee_name' => $shippingAddress->consignee??'',
'consignee_telephone' => $shippingAddress->telephone??'',
'consignee_zone' => $shippingAddress->zone??'',
'consignee_address' => $shippingAddress->address??'',
//砍价订单金额
'bargain_amount'=>$bargainOrder?->bargain_price ?? 0,
'market_price' => $market_price,
'cost_price' => $cost_price,
];
return $user->orders()->create($attrs);
} }
/** /**
@ -336,6 +350,8 @@ class OrderService
'sell_price' => $sku->sell_price, 'sell_price' => $sku->sell_price,
'vip_price' => $sku->vip_price, 'vip_price' => $sku->vip_price,
'sales_value' => $sku->sales_value, 'sales_value' => $sku->sales_value,
'market_price' => $sku->cost_price,
'cost_price' => $sku->cost_price,
'quantity' => $qty, 'quantity' => $qty,
'remain_quantity' => $qty, // 剩余发货数量 'remain_quantity' => $qty, // 剩余发货数量
'coupon_discount_amount' => $product['coupon_discount_amount'], 'coupon_discount_amount' => $product['coupon_discount_amount'],

View File

@ -0,0 +1,41 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class AddCostPriceToOrders extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('orders', function (Blueprint $table) {
$table->bigInteger('market_price')->unsigned()->default(0)->comment('市场价格:分');
$table->bigInteger('cost_price')->unsigned()->default(0)->comment('成本价格:分');
});
Schema::table('order_products', function (Blueprint $table) {
$table->bigInteger('market_price')->unsigned()->default(0)->comment('市场价格:分');
$table->bigInteger('cost_price')->unsigned()->default(0)->comment('成本价格:分');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('orders', function (Blueprint $table) {
$table->dropColumn(['market_price', 'cost_price']);
});
Schema::table('order_products', function (Blueprint $table) {
$table->dropColumn(['market_price', 'cost_price']);
});
}
}

View File

@ -57,6 +57,8 @@ return [
'tags'=>'标签', 'tags'=>'标签',
'profit' => '累计返利', 'profit' => '累计返利',
'sales_value' => '成长值', 'sales_value' => '成长值',
'market_price' => '市场价',
'cost_price' => '成本价',
], ],
'options' => [ 'options' => [
], ],