数仓+admin拼团

ibrand_multi_groupon拼团表

CREATE TABLE `ibrand_multi_groupon` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `title` varchar(191) DEFAULT NULL COMMENT '拼团名称',
  `goods_id` int(10) DEFAULT NULL,
  `nums` int(10) DEFAULT NULL COMMENT '拼团人数',
  `price` decimal(10,2) DEFAULT NULL COMMENT '价格',
  `sort` bigint(4) DEFAULT NULL COMMENT '排序',
  `status` tinyint(4) DEFAULT '1' COMMENT '状态',
  `starts_at` datetime DEFAULT NULL COMMENT '开始时间',
  `ends_at` datetime DEFAULT NULL COMMENT '结束时间',
  `created_at` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
  `updated_at` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
  `deleted_at` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4;

商品表

CREATE TABLE `goods_db` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `goods_no` varchar(32) NOT NULL,
  `goods_name` varchar(100) DEFAULT NULL,
  `category_id` bigint(4) DEFAULT NULL,
  `sell_price` decimal(10,2) DEFAULT NULL,
  `img` varchar(100) DEFAULT NULL,
  `created_at` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
  `updated_at` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
  `deleted_at` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4;

创建对应模型层

php artisan make:model ....

创建admin控制器

php artisan admin:make Controller --model=App\User

admin规格选择器
admin
数仓

php artisan make:provider RiakServiceProvider

数仓绑定

 public function register()
    {
        $this->app->bind(
            AsdInterfaces::class,
            AsdRepository::class
        );
    }

Repository文件夹
Interfaces Repositories
Interfaces内的接口

<?php


namespace App\Repository\Interfaces;


interface AsdInterfaces
{
    public function Asdf($num);
}

Repositories 接口实现方法

<?php


namespace App\Repository\Repositories;


use App\IbrandMultiGroupon;
use App\Repository\Interfaces\AsdInterfaces;

class AsdRepository implements AsdInterfaces
{

    public function Asdf($num)
    {/*  '0'=> '所有活动',
                1=> '未开始',
                2=>'进行中',
                3=>'已结束',
                4=>'已失效',*/

        $times=date("Y-m-d H:i:s");//获取当前时间
        if ($num==1){//未开始
            $ids=IbrandMultiGroupon::where('starts_at','>',$times)
                ->where('status','=',1)
                ->get()->pluck('id');
           return $ids;
        }elseif ($num==0){//所有活动
            $ids=IbrandMultiGroupon::get()->pluck('id');
            return $ids;
        }elseif ($num==2){//正在进行的
            $ids=IbrandMultiGroupon::where('starts_at','<',$times)
                ->where('status','=',1)
                ->where('ends_at','>',$times)
                ->get()->pluck('id');
//            dd(132);
            return $ids;
        }elseif ($num==3){//结束的
            $ids=IbrandMultiGroupon::where('ends_at','<',$times)
                ->where('status','=',1)
                ->get()->pluck('id');
//            dd(132);
            return $ids;
        }else{//失效的
            $ids=IbrandMultiGroupon::where('status','=',0)
                ->get()->pluck('id');
//            dd(132);
            return $ids;
        }

    }
}


团购控制器

<?php

namespace App\Admin\Controllers;

use App\DbGoods;
use App\IbrandMultiGroupon;
use App\Repository\Interfaces\AsdInterfaces;
use Encore\Admin\Controllers\AdminController;
use Encore\Admin\Form;
use Encore\Admin\Grid;
use Encore\Admin\Show;

class IbrandMultiGrouponController extends AdminController
{
    /**
     * Title for current resource.
     *
     * @var string
     */
    protected $title = 'IbrandMultiGroupon';

    /**
     * Make a grid builder.
     *
     * @return Grid
     */
    protected $asd;

    public function __construct(AsdInterfaces $asdf)
    {
        $this->asd = $asdf;
    }

    protected function grid()
    {
        $grid = new Grid(new IbrandMultiGroupon());
        $a = 1;
        $grid->selector(function (Grid\Tools\Selector $selector) {
            $selector->select('status', '拼团状态', [
                '0' => '所有活动',
                1 => '未开始',
                2 => '进行中',
                3 => '已结束',
                4 => '已失效',
            ], function ($query, $value) {

                $num = $value[0];
                $a = $this->asd->Asdf($num);
//dd($value[0]);
                $query->wherein('id', $a);


            }
            );
        });

        $grid->column('id', __('Id'));
        $grid->column('title', __('标题'));
        $grid->column('goods_id', __('商品编号'));
        $grid->column('nums', __('拼团人数'));
        $grid->column('price', __('拼团价格'));
        $grid->column('sort', __('排序'));
        $grid->column('status', __('状态'))->editable('select',[
            0 => '下架',

            1 => '上架',
        ]);
        $grid->column('starts_at', __('开始时间'));
        $grid->column('ends_at', __('结束时间'));
        $grid->column('created_at', __('Created at'));
        $grid->column('updated_at', __('Updated at'));
        $grid->column('deleted_at', __('Deleted at'));

        return $grid;
    }

    /**
     * Make a show builder.
     *
     * @param mixed $id
     * @return Show
     */
    protected function detail($id)
    {
        $show = new Show(IbrandMultiGroupon::findOrFail($id));

        $show->field('id', __('Id'));
        $show->field('title', __('Title'));
        $show->field('goods_id', __('商品编号'));
        $show->field('nums', __('拼团人数'));
        $show->field('price', __('拼团价格'));
        $show->field('sort', __('排序'));
        $show->field('status', __('状态'));
        $show->field('starts_at', __('开始时间'));
        $show->field('ends_at', __('结束时间'));
        $show->field('created_at', __('Created at'));
        $show->field('updated_at', __('Updated at'));
        $show->field('deleted_at', __('Deleted at'));

        return $show;
    }

    /**
     * Make a form builder.
     *
     * @return Form
     */
    protected function form()
    {
        $form = new Form(new IbrandMultiGroupon());

        $form->text('title', __('Title'));
//        $form->number('goods_id', __('商品编号'));
//        dd(DbGoods::get()->pluck('goods_name','id'));
        $form->radio('goods_id')->options(DbGoods::get()->pluck('goods_name', 'id'))->stacked();
        $form->number('nums', __('拼团人数'));
        $form->decimal('price', __('拼团价格'));
        $form->number('sort', __('排序'));
        $form->select('status', __('状态'))->options([
            0 => '下架',

            1 => '上架',
        ])->default(1);
        $form->datetime('starts_at', __('开始时间'));//->default(date('Y-m-d H:i:s'))
        $form->datetime('ends_at', __('结束时间'));

        return $form;
    }
}

回收站软删除
请点击

控制器
   $grid->filter(function ($filter) {

            // 范围过滤器,调用模型的`onlyTrashed`方法,查询出被软删除的数据。
            $filter->scope('trashed', '回收站')->onlyTrashed();

        });

回收站

模型层
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class IbrandMultiGroupon extends Model
{
    protected $table = 'ibrand_multi_groupon';
    use SoftDeletes;

}
本作品采用《CC 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 3

能讲一下你们前端如何控制拼团人数控制(尤其是涉及支付的情况),还有就是商品库存问题吗?你说的界面这些基本上都能够想到怎么处理,深度不大,希望能够扩展开来讲一下 :joy:

3年前 评论

库存不用加锁吗???

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!