hrjy il y a 2 ans
Parent
commit
81d7eff3db

+ 282 - 0
app/admin/controller/store/ProductCode.php

@@ -0,0 +1,282 @@
+<?php
+/**
+ *
+ * @author: xaboy<365615158@qq.com>
+ * @day: 2017/11/11
+ */
+
+namespace app\admin\controller\store;
+
+use app\admin\controller\AuthController;
+use app\admin\model\user\User;
+use app\admin\model\user\User as UserModel;
+use crmeb\repositories\OrderRepository;
+use crmeb\repositories\ShortLetterRepositories;
+use crmeb\services\{ExpressService,
+    JsonService,
+    JsonService as Json,
+    MiniProgramService,
+    WechatService,
+    FormBuilder as Form,
+    CacheService,
+    UtilService as Util};
+use app\admin\model\ump\StorePink;
+use crmeb\basic\BaseModel;
+use think\facade\Route as Url;
+use crmeb\services\YLYService;
+use think\facade\Log;
+use think\facade\Validate;
+
+/**
+ * 订单管理控制器 同一个订单表放在一个控制器
+ * Class StoreOrder
+ * @package app\admin\controller\store
+ */
+class ProductCode extends AuthController
+{
+    /**
+     * @return mixed
+     */
+    public function index($id)
+    {
+
+        $this->assign('id', $id);
+        return $this->fetch();
+    }
+
+
+    public function list()
+    {
+        $where = Util::getMore([
+            ['status', ''],
+            ['bd', ''],
+            ['page', 1],
+            ['limit', 20],
+            ['id']
+        ]);
+        return Json::successlayui(\app\admin\model\store\ProductCode::list($where));
+    }
+
+    /**
+     * 显示创建资源表单页.
+     *
+     * @return \think\Response
+     */
+    public function code($id = 0)
+    {
+        $f = [];
+        $f[] = Form::input('number', '生成数量');
+        if ($id) $f[] = Form::hidden('id', $id);
+        $form = Form::make_post_form('添加', $f, Url::buildUrl('save'));
+        $this->assign(compact('form'));
+        return $this->fetch('public/form-builder');
+
+
+    }
+
+    public function save()
+    {
+        $model = new \app\admin\model\store\ProductCode();
+        $data = Util::postMore([
+            'number',
+            'id'
+        ]);
+        $validate = Validate::rule([
+            'number' => 'require',
+        ]);
+        $validate->message([
+            'number.require' => '数量不能为空',
+        ]);
+        if (!$validate->check($data)) {
+            return Json::fail($validate->getError());
+        }
+        for ($i=1; $i <=$data['number']; $i++){
+            $save[] = [
+                'product_id' => $data['id'],
+                'code' => generate_promotion_code(1),
+            ];
+        }
+        $res = $model->saveAll($save);
+        if ($res) return Json::successful('生成成功');
+        return Json::fail('生成失败');
+    }
+
+
+    public function grant($id)
+    {
+        $f = [];
+        $f[] = Form::select('uid', '绑定推荐人')->options(UserModel::field('uid as value,nickname as label')->select()->toArray())->filterable(true);
+        $f[] = Form::hidden('id', $id);
+        $form = Form::make_post_form('添加', $f, Url::buildUrl('bd_grant'));
+        $this->assign(compact('form'));
+        return $this->fetch('public/form-builder');
+    }
+
+    public function bd_grant()
+    {
+        $model = new \app\admin\model\store\ProductCode();
+        $data = Util::postMore([
+            'uid',
+            'id'
+        ]);
+        $code = $model::where('id', 'in', $data['id'])->where('uid', '>', 0)->select()->toArray();
+        if ($code){
+            return Json::fail('兑换码已绑定');
+        }
+        $res = $model->where('id', 'in', $data['id'])->update(['uid' => $data['uid']]);
+        if ($res) return Json::successful('绑定成功');
+        return Json::fail('绑定失败');
+    }
+
+
+    /**
+     * 显示创建资源表单页.
+     *
+     * @return \think\Response
+     */
+    public function edit($id = 0)
+    {
+        $data = \app\admin\model\many\Many::find($id);
+        $f = [];
+        $f[] = Form::input('name', '名称',$data->getData('name'))->col(12);
+        $f[] = Form::frameImageOne('image', '封面图(305*305px)', Url::buildUrl('admin/widget.images/index', array('fodder' => 'image')), $data->getData('image'))->icon('image')->width('100%')->height('500px');
+        $f[] = Form::input('money', '额度', $data->getData('money'));
+        $f[] = Form::input('upper_limit', '参与上限',  $data->getData('upper_limit'));
+        $f[] = Form::dateTime('add_time', '开启时间', date('Y-m-d H:i:s', $data->getData('add_time')));
+        $f[] = Form::dateTime('end_time', '结束时间', date('Y-m-d H:i:s', $data->getData('end_time')));
+        $f[] = Form::input('sort', '排序',$data->getData('sort'));
+        $f[] = Form::hidden('id', $id);
+        $form = Form::make_post_form('修改', $f, Url::buildUrl('update'));
+        $this->assign(compact('form'));
+        return $this->fetch('public/form-builder');
+    }
+
+
+    /**
+     * 修改
+     * @return void
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\DbException
+     * @throws \think\db\exception\ModelNotFoundException
+     */
+    public function update()
+    {
+        $model = new \app\admin\model\many\Many();
+        $data = Util::postMore([
+            'id',
+            'name',
+            'image',
+            'money',
+            'upper_limit',
+            'add_time',
+            'end_time',
+            'sort',
+        ]);
+        $validate = Validate::rule('name', 'require')->rule([
+            'name' => 'require',
+            'image' => 'require',
+            'money' => 'require',
+            'upper_limit' => 'require',
+            'add_time' => 'require',
+            'end_time' => 'require',
+        ]);
+        $validate->message([
+            'name.require' => '名称不能为空',
+            'image.require' => '图片不能为空',
+            'money.require' => '额度不能为空',
+            'upper_limit.require' => '上限不能为空',
+            'add_time.require' => '请选择进场时间',
+            'end_time.require' => '请选择结束时间',
+        ]);
+        if (!$validate->check($data)) {
+            return Json::fail($validate->getError());
+        }
+        $details = $model->find($data['id']);
+        $details['name'] = $data['name'];
+        $details['image'] = $data['image'];
+        $details['money'] = $data['money'];
+        $details['upper_limit'] = $data['upper_limit'];
+        $details['add_time'] = strtotime($data['add_time']);
+        $details['end_time'] = strtotime($data['end_time']);
+        $details['sort'] = $data['sort'];
+        $res = $details->save();
+        if ($res) return Json::successful('修改成功');
+        return Json::fail('修改失败');
+    }
+
+    /**
+     * 显示创建资源表单页.
+     *
+     * @return \think\Response
+     */
+    public function next($id = 0)
+    {
+        $f = [];
+        $f[] = Form::dateTime('add_time', '开启时间');
+        $f[] = Form::dateTime('end_time', '结束时间');
+        $f[] = Form::hidden('id', $id);
+        $form = Form::make_post_form('添加', $f, Url::buildUrl('next_save'));
+        $this->assign(compact('form'));
+        return $this->fetch('public/form-builder');
+    }
+
+    public function next_save()
+    {
+        $model = new \app\admin\model\many\Many();
+        $data = Util::postMore([
+            'id',
+            'add_time',
+            'end_time',
+        ]);
+        $validate = Validate::rule([
+            'add_time' => 'require',
+            'end_time' => 'require',
+        ]);
+        $validate->message([
+            'add_time.require' => '请选择开启时间',
+            'end_time.require' => '请选择结束时间',
+        ]);
+        if (!$validate->check($data)) {
+            return Json::fail($validate->getError());
+        }
+        $details = $model->find($data['id']);
+        if ($details['status'] == 1) return Json::fail('未结束不能进行下一场');
+        if ($details['suc'] == 2) return Json::fail('已众筹失败无法就行下一场');
+        if (strtotime($data['end_time']) < strtotime($data['add_time'])) return Json::fail('结束时间不能小于开启时间');
+        $details['stage'] += 1;
+        $details['status'] = 1;
+        $details['number'] = 0;//重置额度
+        $details['money'] = intval($details['money'] * 1.3);//提搞额度130%
+        $details['suc'] = 0;
+        $details['add_time'] = strtotime($data['add_time']);
+        $details['end_time'] = strtotime($data['end_time']);
+        $res = $details->save();
+        if ($res) return Json::successful('成功');
+        return Json::fail('失败');
+
+
+    }
+
+
+
+    /**
+     * 删除
+     * @param $id
+     * @return void
+     * @throws \Exception
+     */
+    public function delete($id)
+    {
+        if (!$id) Json::fail('删除失败');
+        $model = new \app\admin\model\store\ProductCode();
+
+        $res = $model->where('id', $id)->delete();
+        if ($res){
+            return Json::success('删除成功!');
+        }else{
+            return Json::fail($model->getErrorInfo());
+        }
+
+    }
+
+}

+ 68 - 0
app/admin/model/store/ProductCode.php

@@ -0,0 +1,68 @@
+<?php
+/**
+ * @author: xaboy<365615158@qq.com>
+ * @day: 2017/11/11
+ */
+
+namespace app\admin\model\store;
+
+use app\admin\model\user\User;
+use crmeb\traits\ModelTrait;
+use crmeb\basic\BaseModel;
+/**
+ * Class StoreCategory
+ * @package app\admin\model\store
+ */
+class ProductCode extends BaseModel
+{
+
+    /**
+     * 数据表主键
+     * @var string
+     */
+    protected $pk = 'id';
+
+    /**
+     * 模型名称
+     * @var string
+     */
+    protected $name = 'product_code';
+
+    use ModelTrait;
+    protected $autoWriteTimestamp = true;
+
+
+    public static function list($where)
+    {
+        $model = self::alias('a')
+            ->field('a.*,b.nickname')
+            ->leftJoin('user b', 'a.uid = b.uid')
+            ->where('a.product_id', $where['id'])
+            ->order('id DESC');
+
+        if ($where['bd'] == 1) $model->where('a.uid' , '=', 0);
+        if ($where['bd'] == 2) $model->where('a.uid' , '>', 0);
+        $data['count'] = $model->count();
+        if ($where['page'] && $where['limit']){
+            $model->page($where['page'], $where['limit']);
+        }else{
+            $model->page(20, 1);
+        }
+        $list = $model->select()->toArray();
+        foreach ($list as &$item){
+            if (empty($item['nickname'])){
+                $item['nickname'] = '未绑定';
+            }
+            if (empty($item['end_time'])){
+                $item['end_time'] = '未使用';
+            }else{
+                $item['end_time'] = date('Y-m-d H:i:s', $item['end_time']);
+            }
+        }
+        $data['data'] = $list;
+        return $data;
+
+    }
+
+
+}

+ 191 - 0
app/admin/view/store/product_code/index.php

@@ -0,0 +1,191 @@
+{extend name="public/container"}
+{block name="head_top"}
+
+{/block}
+{block name="content"}
+<style>
+    .btn-outline{
+        border:none;
+    }
+    .btn-outline:hover{
+        background-color: #0e9aef;
+        color: #fff;
+    }
+    .layui-form-item .layui-btn {
+        margin-top: 5px;
+        margin-right: 10px;
+    }
+    .layui-btn-primary{
+        margin-right: 10px;
+        margin-left: 0!important;
+    }
+    label{
+        margin-bottom: 0!important;
+        margin-top: 4px;
+    }
+</style>
+<div class="layui-fluid">
+    <div class="layui-row layui-col-space15" id="app">
+        <!--搜索条件-->
+        <div class="layui-col-md12">
+            <div class="layui-card">
+                <div class="layui-card-header">搜索条件</div>
+                <div class="layui-card-body">
+                    <div class="layui-carousel layadmin-carousel layadmin-shortcut" lay-anim="" lay-indicator="inside" lay-arrow="none" style="background:none">
+                        <form class="layui-form layui-form-pane" action="">
+                            <div class="layui-form-item">
+
+                                <div class="layui-inline">
+                                    <label class="layui-form-label" style="top: -4.5px;">所有分类</label>
+                                    <div class="layui-input-block">
+                                        <select name="bd">
+                                            <option value=" ">全部</option>
+                                            <option value="1">未绑定</option>
+                                            <option value="2">已绑定</option>
+                                        </select>
+                                    </div>
+                                </div>
+                                <div class="layui-inline">
+                                    <div class="layui-input-inline">
+                                        <button class="layui-btn layui-btn-sm layui-btn-normal" lay-submit="search" lay-filter="search">
+                                            <i class="layui-icon layui-icon-search"></i>搜索</button>
+                                    </div>
+                                </div>
+                            </div>
+                        </form>
+                    </div>
+                </div>
+            </div>
+        </div>
+
+        <!-- 中间详细信息-->
+        <div :class="item.col!=undefined ? 'layui-col-sm'+item.col+' '+'layui-col-md'+item.col:'layui-col-sm6 layui-col-md3'"
+             v-for="item in badge" v-cloak="" v-if="item.count > 0">
+        </div>
+        <!--enb-->
+    </div>
+    <!--列表-->
+    <div class="layui-row layui-col-space15">
+        <div class="layui-col-md12">
+            <div class="layui-card">
+                <div class="layui-card-header">场次列表</div>
+                <div class="layui-card-body">
+
+                    <div class="layui-btn-container conrelTable" id="container-action">
+                        <a class="layui-btn layui-btn-sm" onclick="$eb.createModalFrame(this.innerText,'{:Url('code')}?id={$id}',{h:350,w:400})">生成兑换码</a>
+                        <button class="layui-btn layui-btn-sm layui-btn-normal" type="button" data-type="set_grant"><i class="fa fa-check-circle-o"></i>绑定</button>
+<!--                        <button class="layui-btn layui-btn-sm" data-type="del_auction">批量删除</button>-->
+                    </div>
+                    <table class="layui-hide" id="List" lay-filter="List"></table>
+
+
+                    <script type="text/html" id="image">
+                        <img style="cursor: pointer" lay-event="open_image" src="{{d.image}}">
+                    </script>
+                    <script type="text/html" id="status">
+                        {{#  if(d.status == 0){ }}
+                        <button type="button" name="suc" class="layui-btn-disabled layui-btn-xs" id="">
+                            关闭
+                        </button>
+                        {{#  } else if(d.status == 1) { }}
+                        <button type="button" name="suc" class="layui-btn-xs layui-btn" id="">
+                            开启
+                        </button>
+                        {{#  } }}
+                    </script>>
+                    <script type="text/html" id="act">
+                        <button type="button" class="layui-btn layui-btn-xs layui-btn-danger" lay-event='delete' id="">
+                            删除
+                        </button>
+
+                    </script>
+                </div>
+            </div>
+        </div>
+    </div>
+    <!--end-->
+</div>
+<script src="{__ADMIN_PATH}js/layuiList.js"></script>
+{/block}
+{block name="script"}
+<script>
+    layList.form.render();
+    layList.tableList('List', "{:Url('list')}?id={$id}", function () {
+        return [
+            {type: 'checkbox'},
+            {field: 'id', title: 'ID', sort: true, event: 'id', width: '5%', templet: '#id'},
+            {field: 'code', title: '兑换码',  align: 'center'},
+            {field: 'nickname', title: '发放人',  align: 'center'},
+            {field: 'end_time', title: '使用时间', align: 'center'},
+            {field: 'right', title: '操作', align: 'center', toolbar: '#act',width: '15%'},
+        ];
+    });
+
+    //查询
+    layList.search('search',function(where){
+        layList.reload(where,true);
+    });
+
+    //点击事件绑定
+    layList.tool(function (event,data,obj) {
+        switch (event) {
+            case 'delete':
+                var url=layList.U({c:'store.product_code',a:'delete',q:{id:data.id}});
+                var code = {title:"操作提示",text:"确定将该商品移入回收站吗?",type:'info',confirm:'是的,移入回收站'};
+                $eb.$swal('delete',function(){
+                    $eb.axios.get(url).then(function(res){
+                        if(res.status == 200 && res.data.code == 200) {
+                            $eb.$swal('success',res.data.msg);
+                            obj.del();
+                            location.reload();
+                        }else
+                            return Promise.reject(res.data.msg || '删除失败')
+                    }).catch(function(err){
+                        $eb.$swal('error',err);
+                    });
+                },code)
+                break;
+            case 'open_image':
+                $eb.openImage(data.image);
+                break;
+            case 'edit':
+                location.href = layList.U({a:'edit',q:{id:data.id}});
+                break;
+        }
+    })
+    var action={
+        set_grant:function () {
+            var ids=layList.getCheckData().getIds('id');
+            if(ids.length){
+                var str = ids.join(',');
+                $eb.createModalFrame('绑定兑换码',layList.Url({c:'store.product_code',a:'grant',p:{id:str}}),{'w':500});
+            }else{
+                layList.msg('请选择要发送兑换码的会员');
+            }
+        },
+    };
+
+    $('.conrelTable').find('button').each(function () {
+        var type=$(this).data('type');
+        $(this).on('click',function () {
+            action[type] && action[type]();
+        })
+    })
+    //改状态
+    layList.switch('status',function (odj,value) {
+        if(odj.elem.checked==true){
+            layList.baseGet(layList.Url({c:'auction.auction',a:'set_status',p:{status:1,id:value}}),function (res) {
+                layList.msg(res.msg, function () {
+                    layList.reload();
+                });
+            });
+        }else{
+            layList.baseGet(layList.Url({c:'auction.auction',a:'set_status',p:{status:0,id:value}}),function (res) {
+                layList.msg(res.msg, function () {
+                    layList.reload();
+                });
+            });
+        }
+    });
+</script>
+{/block}

+ 6 - 0
app/admin/view/store/store_product/index.php

@@ -106,6 +106,9 @@
                         <button type="button" class="layui-btn layui-btn-xs layui-btn-normal" lay-event='edit'>
                             编辑
                         </button>
+                        <button type="button" class="layui-btn layui-btn-xs layui-btn-normal" lay-event="code">
+                            兑换码
+                        </button>
                         <button type="button" class="layui-btn layui-btn-xs" onclick="dropdown(this)">操作 <span class="caret"></span></button>
                         <ul class="layui-nav-child layui-anim layui-anim-upbit">
                             {{# if(d.is_del){ }}
@@ -283,6 +286,9 @@
             case 'edit':
                 location.href = layList.U({a:'create',q:{id:data.id}});
                 break;
+            case 'code':
+                $eb.createModalFrame(data.store_name+'-兑换码',layList.U({c:'store.product_code',a:'index',q:{id:data.id}}),{h:1024,w:1024})
+                break;
             case 'attr':
                 $eb.createModalFrame(data.store_name+'-属性',layList.U({a:'attr',q:{id:data.id}}),{h:600,w:800})
                 break;

+ 57 - 0
app/api/controller/user/UserController.php

@@ -2,8 +2,11 @@
 
 namespace app\api\controller\user;
 
+use app\admin\model\store\ProductCode;
 use app\admin\model\ump\WriteOff;
 use app\http\validates\user\AddressValidate;
+use app\models\store\StoreCoupon;
+use app\models\store\StoreProduct;
 use app\models\system\SystemCity;
 use app\models\system\SystemStoreStaff;
 use app\models\user\UserVisit;
@@ -27,6 +30,7 @@ use app\models\user\UserExtract;
 use app\models\user\UserNotice;
 use crmeb\services\GroupDataService;
 use crmeb\services\UtilService;
+use think\facade\Db;
 
 /**
  * 用户类
@@ -727,4 +731,57 @@ class UserController
 
         return app('json')->success($coupon->toArray());
     }
+
+    /**
+     * 兑换码兑换
+     * @param Request $request
+     * @return mixed
+     * @throws DataNotFoundException
+     * @throws DbException
+     * @throws ModelNotFoundException
+     */
+    public function exchange(Request $request)
+    {
+        $data = UtilService::postMore([
+            ['code'],
+        ], $request);
+        if (!$data['code']) return app('json')->fail('请输入兑换码');
+        $product_code = ProductCode::where('code', $data['code'])->find();
+        if (!$product_code) return app('json')->fail('兑换码不存在');
+        if ($product_code['status'] == 1) return app('json')->fail('兑换码已使用');
+
+        $product = StoreProduct::where('id', $product_code['product_id'])->find();
+        $coupon = StoreCoupon::where('id', 'in', $product['coupon'])->select();
+        if ($coupon) {
+            foreach ($coupon as $value) {
+                $save[] = [
+                    'cid' => $value['id'],
+                    'uid' => $request->uid(),
+                    'order_id' => '',
+                    'coupon_title' => $value['title'],
+                    'coupon_price' => $value['coupon_price'],
+                    'use_min_price' => $value['use_min_price'],
+                    'add_time' => $value['start_time'] == 0 ? 0 : $value['start_time'],
+                    'end_time' => $value['end_time'] == 0 ? 0 : $value['end_time'],
+                    'code' => generate_promotion_code(1),
+                    'store_id' => $value['store_id'],
+                ];
+
+            }
+        }
+        $model = new StoreCouponUser();
+        try {
+            Db::startTrans();
+            $product_code['status'] = 1;
+            $product_code['end_time'] = time();
+            $product_code->save();
+            $model->saveAll($save);
+            Db::commit();
+            return app('json')->success('兑换成功');
+        } catch (\Exception $e) {
+            Db::rollback();
+            return app('json')->fail('兑换失败');
+        }
+    }
+
 }

+ 1 - 1
route/api/route.php

@@ -169,7 +169,7 @@ Route::group(function () {
     Route::get('coupon_user', 'user.UserController/coupon_user')->name('coupon_user');//用户优惠券
     Route::post('share', 'user.UserController/share')->name('share');//分享领取优惠券
     Route::get('coupon_datalis', 'user.UserController/coupon_datalis')->name('coupon_datalis');//优惠券详情
-
+    Route::post('exchange', 'user.UserController/exchange')->name('exchange');// 兑换码兑换
 
 })->middleware(\app\http\middleware\AllowOriginMiddleware::class)->middleware(\app\http\middleware\AuthTokenMiddleware::class, true);
 //未授权接口