hrjy 2 years ago
parent
commit
5977afc5db

+ 4 - 1
app/admin/controller/card/Card.php

@@ -63,7 +63,8 @@ class Card extends AuthController
             'introduce' => '',
             'start_week' => '',
             'end_week' => '',
-            'price' => ''
+            'price' => '',
+            'details_image' => ''
         ];
         if ($id){
             $data = \app\admin\model\card\Card::where('id', $id)->find()->toArray();
@@ -94,6 +95,7 @@ class Card extends AuthController
             'end_week',
             'introduce',
             'image',
+            'details_image',
         ]);
         if ($data['id']){
             $list = \app\admin\model\card\Card::where('id', $data['id'])->find();
@@ -104,6 +106,7 @@ class Card extends AuthController
             $list['end_week'] = $data['end_week'];
             $list['introduce'] = $data['introduce'];
             $list['image'] = $data['image'];
+            $list['details_image'] = $data['details_image'];
             $res = $list->save();
         }else{
             $res = $model->save($data);

+ 10 - 0
app/admin/controller/diagnosis/DiagnosisCate.php

@@ -63,8 +63,10 @@ class DiagnosisCate extends AuthController
             ['value' => 1, 'label' => '陪诊'],
             ['value' => 2, 'label' => '代办'],
         ])->filterable(true)->required();
+        $f[] = Form::frameImageOne('image', '图标', Url::buildUrl('admin/widget.images/index', array('fodder' => 'image')))->icon('image')->width('100%')->height('500px');
         $f[] = Form::input('price', '金额')->required();
         $f[] = Form::input('reward', '接单奖励')->required();
+        $f[] = Form::textarea('info', '简介');
         $f[] = Form::radio('status', '状态', 1)->options([['value' => 0, 'label' => '禁用'], ['value' => 1, 'label' => '正常']]);
         $form = Form::make_post_form('添加', $f, Url::buildUrl('save'));
         $this->assign(compact('form'));
@@ -82,6 +84,8 @@ class DiagnosisCate extends AuthController
             'price',
             'status',
             'reward',
+            'image',
+            'info',
         ]);
         $res = $model->save($data);
         if ($res) return Json::successful('添加成功');
@@ -103,9 +107,11 @@ class DiagnosisCate extends AuthController
             ['value' => 1, 'label' => '陪诊'],
             ['value' => 2, 'label' => '代办'],
         ])->filterable(true)->required();
+        $f[] = Form::frameImageOne('image', '图标', Url::buildUrl('admin/widget.images/index', array('fodder' => 'image')), $data->getData('image'))->icon('image')->width('100%')->height('500px');
         $f[] = Form::input('price', '金额', $data['price'])->required();
         $f[] = Form::input('reward', '接单奖励', $data['reward'])->required();
         $f[] = Form::radio('status', '状态', (string)$data['status'])->options([['value' => 0, 'label' => '禁用'], ['value' => 1, 'label' => '正常']]);
+        $f[] = Form::textarea('info', '简介', $data['info']);
         $f[] = Form::hidden('id', $id);
         $form = Form::make_post_form('修改', $f, Url::buildUrl('update'));
         $this->assign(compact('form'));
@@ -129,6 +135,8 @@ class DiagnosisCate extends AuthController
             'price',
             'status',
             'reward',
+            'image',
+            'info',
             'id'
         ]);
         $details = $model->find($data['id']);
@@ -137,6 +145,8 @@ class DiagnosisCate extends AuthController
         $details['price'] = $data['price'];
         $details['status'] = $data['status'];
         $details['reward'] = $data['reward'];
+        $details['image'] = $data['image'];
+        $details['info'] = $data['info'];
         $res = $details->save();
         if ($res) return Json::successful('修改成功');
         return Json::fail('修改失败');

+ 7 - 0
app/admin/controller/diagnosis/DiagnosisOrder.php

@@ -11,6 +11,7 @@ use app\admin\controller\AuthController;
 use app\admin\model\diagnosis\DiagnosisOrderAttr;
 use app\admin\model\user\User;
 use app\admin\model\user\UserBill;
+use app\admin\model\user\UserCard;
 use crmeb\basic\BaseModel;
 use crmeb\services\{ExpressService,
     JsonService,
@@ -264,6 +265,11 @@ class DiagnosisOrder extends AuthController
         $attr = DiagnosisOrderAttr::where('oid', $id)->find();
         $cate = implode(',',\app\admin\model\diagnosis\DiagnosisCate::where('id', 'in', $order['cate_id'])->column('name'));
         $service = \app\admin\model\diagnosis\DiagnosisService::where('id', 'in', $attr['service_id'])->select();
+        $card = UserCard::alias('a')
+            ->field('b.name')
+            ->leftJoin('card b', 'a.card_id = b.id')
+            ->where('a.id', 'in', $order['user_card_id'])
+            ->select();
         $attr['time'] = date('Y-m-d H:i:s', $attr['time']);
         $this->assign('order', $order);
         $this->assign('user', $user);
@@ -271,6 +277,7 @@ class DiagnosisOrder extends AuthController
         $this->assign('attr', $attr);
         $this->assign('cate', $cate);
         $this->assign('service', $service);
+        $this->assign('card', $card);
 
         return $this->fetch();
     }

+ 27 - 0
app/admin/controller/user/UserCard.php

@@ -8,6 +8,7 @@
 namespace app\admin\controller\user;
 
 use app\admin\controller\AuthController;
+use app\admin\model\user\UserEquity;
 use crmeb\services\{ExpressService,
     JsonService,
     JsonService as Json,
@@ -71,6 +72,32 @@ class UserCard extends AuthController
 
     }
 
+    /**
+     * 详情
+     * @param $id
+     * @return string
+     * @throws \Exception
+     */
+    public function equity($id)
+    {
+
+        $this->assign('id', $id);
+        return $this->fetch();
+    }
+
+
+    public function equity_list($id)
+    {
+
+        $where = Util::getMore([
+            ['page', 1],
+            ['limit', 20],
+            ['id'],
+        ]);
+
+        return Json::successlayui(UserEquity::list($where));
+
+    }
 
 
 }

+ 120 - 0
app/admin/model/card/CardOrder.php

@@ -10,7 +10,13 @@ namespace app\admin\model\card;
 
 use app\admin\model\store\StoreProduct;
 use app\admin\model\system\SystemAdmin;
+use app\admin\model\user\UserCard;
 use app\models\article\ArticleContent;
+use app\models\user\User;
+use app\models\user\UserBill;
+use app\models\user\WechatUser;
+use crmeb\services\MiniProgramService;
+use crmeb\services\WechatService;
 use crmeb\traits\ModelTrait;
 use crmeb\basic\BaseModel;
 
@@ -57,4 +63,118 @@ class CardOrder extends BaseModel
         return $data;
 
     }
+
+    public static function addCard($uid, $card_id, $pay_type)
+    {
+        $order_id = self::getNewOrderId();
+        if (!$order_id) return self::setErrorInfo('订单生成失败!');
+        $card = Card::find($card_id);
+        if (!$card) return self::setErrorInfo('没有该优惠卡');
+        $add_time = time();
+        return self::create([
+            'order_id' => $order_id,
+            'uid' => $uid,
+            'card_id' => $card_id,
+            'time' => $card['time'],
+            'pay_type' => $pay_type,
+            'price' => $card['price'],
+            'create_time' => $add_time
+        ]);
+    }
+
+
+    /**
+     * 生成订单唯一id
+     * @param $uid 用户uid
+     * @return string
+     */
+    public static function getNewOrderId()
+    {
+        do {
+            list($msec, $sec) = explode(' ', microtime());
+            $msectime = number_format((floatval($msec) + floatval($sec)) * 1000, 0, '', '');
+            $orderId = 'wx' . $msectime . mt_rand(10000, 99999);
+        } while (self::be(['order_id' => $orderId]));// $orderId = 'wx' . $msectime . mt_rand(10000, 99999);
+        return $orderId;
+    }
+
+
+    /**
+     * 充值js支付
+     * @param $orderInfo
+     * @return array|string
+     * @throws \Exception
+     */
+    public static function jsPay($orderInfo)
+    {
+        return MiniProgramService::jsPay(WechatUser::uidToOpenid($orderInfo['uid']), $orderInfo['order_id'], $orderInfo['price'], 'user_card', '用户购买优惠卡');
+    }
+
+    /**
+     * 微信H5支付
+     * @param $orderInfo
+     * @return mixed
+     */
+    public static function wxH5Pay($orderInfo)
+    {
+        return WechatService::paymentPrepare(null, $orderInfo['order_id'], $orderInfo['price'], 'user_card', '用户购买优惠卡', '', 'MWEB');
+    }
+
+    /**
+     * 公众号支付
+     * @param $orderInfo
+     * @return array|string
+     * @throws \Exception
+     */
+    public static function wxPay($orderInfo)
+    {
+        return WechatService::jsPay(WechatUser::uidToOpenid($orderInfo['uid'], 'openid'), $orderInfo['order_id'], $orderInfo['price'], 'user_card', '用户购买优惠卡');
+    }
+
+
+    /**
+     * 会员卡购买成功
+     * @param $orderId
+     * @return bool
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\DbException
+     * @throws \think\db\exception\ModelNotFoundException
+     */
+    public static function rechargeSuccess($orderId)
+    {
+        $order = self::where('order_id', $orderId)->where('paid', 0)->find();
+        if (!$order) return false;
+        $user = User::getUserInfo($order['uid']);
+        self::beginTrans();
+        $res1 = self::where('order_id', $order['order_id'])->update(['paid' => 1, 'pay_time' => time()]);
+        $card = Card::where('id', $order['card_id'])->find();
+        $mark = '购买优惠卡'.$card['name'];
+        $res2 = UserBill::income('购买优惠卡', $order['uid'], 'now_money', 'discount', $order['price'], $order['id'], $user['now_money'], $mark);
+
+        $res3 = UserCard::create([
+            'card_id' => $order['card_id'],
+            'uid' => $order['uid'],
+            'card' => self::getRandPass(12),
+            'pwd' => self::getRandPass(12),
+        ]);
+        $res = $res1 && $res2 && $res3;
+        self::checkTrans($res);
+//        event('RechargeSuccess', [$order]);
+        return $res;
+
+    }
+
+
+    public static function getRandPass($length = 6){
+        $password = '';
+        $chars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
+        $char_len = strlen($chars);
+        for ($i=0;$i < $length;$i++){
+            $loop = mt_rand(0, ($char_len - 1));
+            $password .= $chars[$loop];
+        }
+        return $password;
+    }
+
+
 }

+ 6 - 3
app/admin/model/diagnosis/DiagnosisApply.php

@@ -32,10 +32,13 @@ class DiagnosisApply extends BaseModel
 
     public static function list($where)
     {
-        $model = self::field('*')->order('id DESC');
+        $model = self::alias('a')
+            ->field('a.*,b.nickname')
+            ->leftJoin('user b', 'a.uid = b.uid')
+            ->order('a.id DESC');
 
-        if ($where['name'])$model->where('name' , 'like', '%'.$where['name'].'%');
-        if ($where['type'])$model->where('type' , $where['type']);
+        if ($where['name'])$model->where('a.name' , 'like', '%'.$where['name'].'%');
+        if ($where['type'])$model->where('a.type' , $where['type']);
         $data['count'] = $model->count();
         if ($where['page'] && $where['limit']){
             $model->page($where['page'], $where['limit']);

+ 64 - 13
app/admin/model/diagnosis/DiagnosisOrder.php

@@ -10,6 +10,7 @@ namespace app\admin\model\diagnosis;
 
 use app\admin\model\store\StoreProduct;
 use app\admin\model\system\SystemAdmin;
+use app\admin\model\user\UserEquity;
 use app\models\article\ArticleContent;
 use app\models\user\User;
 use app\models\user\UserBill;
@@ -149,6 +150,7 @@ class DiagnosisOrder extends BaseModel
             'commission' => $order['commission'],
             'pay_type' => $pay_type,
             'type' => $order['type'],
+            'user_card_id' => $order['user_card_id']
         ]);
         $order['attr']['oid'] = $res1['id'];
         $res2 = DiagnosisOrderAttr::create($order['attr']);
@@ -172,36 +174,85 @@ class DiagnosisOrder extends BaseModel
     }
 
 
+    /**
+     * 余额支付
+     * @param $orderId
+     * @return bool
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\DbException
+     * @throws \think\db\exception\ModelNotFoundException
+     */
     public static function yuPay($orderId)
     {
+        self::beginTrans();
         $order = self::where('order_id', $orderId)->find();
-        if ($order['pay_price'] == 0){
-            $res = self::paySuccess($orderId);
-        }else{
-            if (!$order)return self::setErrorInfo('订单不存在!');
-            $user = User::where('uid', $order['uid'])->find();
-            if ($user['now_money'] < $order['pay_price'])  return self::setErrorInfo('余额不足!', true);
-
-            $res = User::where('uid', $order['uid'])->dec('now_money', $order['pay_price'])->update();
-            if ($res){
-                $res = self::paySuccess($orderId);
+        try {
+            if ($order['pay_price'] == 0){
+                self::paySuccess($orderId);
             }else{
-                return  false;
+                if (!$order)return self::setErrorInfo('订单不存在!');
+                $user = User::where('uid', $order['uid'])->find();
+                if ($user['now_money'] < $order['pay_price'])  return self::setErrorInfo('余额不足!', true);
+
+                User::where('uid', $order['uid'])->dec('now_money', $order['pay_price'])->update();
+                self::paySuccess($orderId);
             }
+            self::commitTrans();
+            return  true;
+        } catch (\Exception $e) {
+            self::rollbackTrans();
+            return self::setErrorInfo($e->getMessage());
         }
-        return $res;
     }
 
 
-
+    /**
+     * 支付成功后
+     * @param $orderId
+     * @param $paytype
+     * @param $formId
+     * @return bool
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\DbException
+     * @throws \think\db\exception\ModelNotFoundException
+     */
     public static function paySuccess($orderId, $paytype = 'weixin', $formId = '')
     {
         $order = self::where('order_id', $orderId)->find();
         if (!$order)return self::setErrorInfo('订单不存在!');
         if ($order['paid'] == 1) return self::setErrorInfo('订单已支付!');
+        if ($order['user_card_id']){
+            self::card($order['user_card_id'], $order['cate_id']);
+        }
+
         self::where('order_id', $orderId)->update(['paid' => 1, 'pay_time' => time()]);
         $now_money = User::where('uid', $order['uid'])->value('now_money');
         UserBill::expend('创建订单', $order['uid'], 'now_money', 'pay_money', $order['pay_price'], $order['id'], $now_money, '支付' . floatval($order['pay_price']) . '元创建订单');
         return true;
     }
+
+
+    /**
+     * 优惠卡使用减一
+     * @param $card_id
+     * @return void
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\DbException
+     * @throws \think\db\exception\ModelNotFoundException
+     */
+    public static function card($card_id, $c_id)
+    {
+        $equity = UserEquity::where('user_card_id', 'in', $card_id)->where('c_id', 'in', $c_id)->select();
+        if ($equity){
+            foreach ($equity as $item){
+                if ($item['type'] == 2){
+                    if ($item['number'] == 1){
+                        UserEquity::where('id', $item['id'])->update(['use' => 0]);
+                    }
+                    UserEquity::where('id', $item['id'])->dec('number')->update();
+
+                }
+            }
+        }
+    }
 }

+ 5 - 2
app/admin/model/user/UserEquity.php

@@ -32,9 +32,12 @@ class UserEquity extends BaseModel
 
     public static function list($where)
     {
-        $model = self::field('*')->order('id DESC');
+        $model = self::alias('a')
+            ->field('a.*,b.name')
+            ->leftJoin('diagnosis_cate b', 'a.c_id = b.id')
+            ->order('a.id DESC')
+            ->where('a.user_card_id', $where['id']);
 
-        if ($where['name'])$model->where('name' , 'like', '%'.$where['name'].'%');
         $data['count'] = $model->count();
         if ($where['page'] && $where['limit']){
             $model->page($where['page'], $where['limit']);

+ 48 - 4
app/admin/view/card/card/create.php

@@ -84,7 +84,33 @@
                                    <br>
                                </div>
                            </div>
-                           <input type="hidden" name="image" id="image_input" value=""/>
+                           <input type="hidden" name="image" id="image_input" value="{$list['image']}"/>
+                       </div>
+                   </div>
+               </div>
+               <div class="form-group">
+                   <div class="col-md-12">
+                       <div class="form-control" style="height:auto">
+                           <label style="color:#ccc">详情图片</label>
+                           <div class="row nowrap">
+                               {if condition="$list['details_image']"}
+                               <div class="upload-image-box transition image_imgs" style="height: 80px;background-repeat:no-repeat;background-size:contain;background-image:url({$list['details_image']})">
+                                   <input value="" type="hidden" name="local_url">
+                               </div>
+                               {else/}
+                               <div class="upload-image-box transition image_imgs" style="height: 80px;background-repeat:no-repeat;background-size:contain;background-image:url('/system/module/wechat/news/images/image.png')">
+                                   <input value="" type="hidden" name="local_url">
+                               </div>
+                               {/if}
+                               <div class="col-xs-6">
+                                   <input type="file" class="upload" name="details_image" style="display: none;" id="details_image" />
+                                   <br>
+                                   <a class="btn btn-sm add_image upload_spans">上传图片</a>
+                                   <br>
+                                   <br>
+                               </div>
+                           </div>
+                           <input type="hidden" name="details_image" id="image_inputs" value="{$list['details_image']}"/>
                        </div>
                    </div>
                </div>
@@ -168,9 +194,15 @@
             }
             //选择图片
             function changeIMG(index,pic){
-                $(".image_img").css('background-image',"url("+pic+")");
-                $(".active").css('background-image',"url("+pic+")");
-                $('#image_input').val(pic);
+                if (index == 'image'){
+                    $(".image_img").css('background-image',"url("+pic+")");
+                    $(".active").css('background-image',"url("+pic+")");
+                    $('#image_input').val(pic);
+                }else{
+                    $(".image_imgs").css('background-image',"url("+pic+")");
+                    $('#image_inputs').val(pic);
+                }
+
             }
             //选择图片插入到编辑器中
             function insertEditor(list){
@@ -185,6 +217,13 @@
                 createFrame('选择图片','{:Url('widget.images/index')}?fodder=image');
             })
 
+            /**
+             * 上传图片
+             * */
+            $('.upload_spans').on('click',function (e) {
+//                $('.upload').trigger('click');
+                createFrame('选择图片','{:Url('widget.images/index')}?fodder=images');
+            })
             /**
              * 编辑器上传图片
              * */
@@ -206,6 +245,7 @@
                 list.id = $('#id').val();/* 原文链接 */
                 list.start_week = $('#start_week').val();/* 原文链接 */
                 list.end_week = $('#end_week').val();/* 原文链接 */
+                list.details_image = $('#image_inputs').val();/* 原文链接 */
                 var Expression = /http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w- .\/?%&=]*)?/;
                 var objExp=new RegExp(Expression);
                 if(list.name == ''){
@@ -220,6 +260,10 @@
                     $eb.message('error','请添加图片');
                     return false;
                 }
+                if(list.details_image == ''){
+                    $eb.message('error','请添加详情图片');
+                    return false;
+                }
                 if(list.introduce == ''){
                     $eb.message('error','请输入内容');
                     return false;

+ 8 - 1
app/admin/view/diagnosis/diagnosis_apply/index.php

@@ -96,6 +96,12 @@
 
                     </script>
 
+                    <script type="text/html" id="nickname">
+
+                        {{d.nickname}}/{{d.uid}}
+
+                    </script>
+
                     <script type="text/html" id="act">
                         {{# if(d.status=='待审核'){ }}
                         <button type="button" class="layui-btn layui-btn-xs layui-btn-normal" onclick="$eb.createModalFrame('身份证','{:Url('card')}?id={{d.id}}',{h:800,w:800})">
@@ -125,6 +131,7 @@
         return [
             {type: 'checkbox'},
             {field: 'id', title: 'ID', sort: true, event: 'id', width: '5%', templet: '#id'},
+            {field: 'nickname', title: '用户', templet: '#nickname',  align: 'center'},
             {field: 'name', title: '姓名', templet: '#name',  align: 'center'},
             {field: 'sex', title: '性别',  align: 'center'},
             {field: 'phone', title: '联系方式', templet: '#phone',  align: 'center'},
@@ -157,7 +164,7 @@
     layList.tool(function (event,data,obj) {
         switch (event) {
             case 'delete':
-                var url=layList.U({c:'water.water_cate',a:'delete',q:{id:data.id}});
+                var url=layList.U({c:'diagnosis.diagnosis_apply',a:'delete',q:{id:data.id}});
                 var code = {title:"操作提示",text:"确定将该商品移入回收站吗?",type:'info',confirm:'是的,移入回收站'};
                 $eb.$swal('delete',function(){
                     $eb.axios.get(url).then(function(res){

+ 17 - 0
app/admin/view/diagnosis/diagnosis_order/info.php

@@ -75,6 +75,23 @@
                 </div>
             </div>
         </div>
+        {if $card}
+        <div class="col-sm-12">
+            <div class="panel panel-default">
+                <div class="panel-heading">
+                    使用优惠卡
+                </div>
+                <div class="panel-body">
+                    <div class="row show-grid">
+                        {foreach ($card as  $k => $v)}
+                        <div class="col-xs-6" >优惠卡名称:{$v.name}</div>
+                        {/foreach}
+
+                    </div>
+                </div>
+            </div>
+        </div>
+        {/if}
         {if $order.status >= 2}
         <div class="col-sm-12">
             <div class="panel panel-default">

+ 175 - 0
app/admin/view/user/user_card/equity.php

@@ -0,0 +1,175 @@
+{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="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">
+
+                    <table class="layui-hide" id="List" lay-filter="List"></table>
+
+                    <script type="text/html" id="nickname">
+                        {{d.nickname}}/{{d.uid}}
+                    </script>
+
+                    <script type="text/html" id="status">
+                        {{# if(d.status==0){ }}
+                        未使用
+                        {{# } }}
+                        {{# if(d.status==1){ }}
+                        已使用
+                        {{# } }}
+                    </script>
+                    <script type="text/html" id="use">
+                        {{# if(d.use==0){ }}
+                        失效
+                        {{# } }}
+                        {{# if(d.use==1){ }}
+                        正常
+                        {{# } }}
+                        {{# if(d.use==-1){ }}
+                        过期
+                        {{# } }}
+                    </script>
+
+                    <script type="text/html" id="type">
+                        {{# if(d.type==1){ }}
+                            限时
+                        {{# } }}
+                        {{# if(d.type==2){ }}
+                            限次
+                        {{# } }}
+                    </script>
+                    <script type="text/html" id="act">
+                        <button type="button" class="layui-btn layui-btn-xs layui-btn-normal" onclick="$eb.createModalFrame('编辑','{:Url('equity')}?id={{d.id}}',{h:1100,w:1100})">
+                            详情
+                        </button>
+                        <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();
+    var id = {$id};
+    layList.tableList('List', "{:Url('equity_list')}?id="+id, function () {
+        return [
+            {type: 'checkbox'},
+            {field: 'id', title: 'ID', sort: true, event: 'id', width: '5%', templet: '#id', align: 'center'},
+            {field: 'name', title: '优惠类型',   align: 'center'},
+            {field: 'type', title: '剩余次数',templet: '#type',  align: 'center'},
+            {field: 'number', title: '剩余次数',   align: 'center'},
+            {field: 'use', title: '状态', templet: '#use', align: 'center'},
+            {field: 'create_time', title: '时间', align: 'center'},
+            // {field: 'right', title: '操作', align: 'center', toolbar: '#act',width: '15%'},
+        ];
+    });
+
+    //查询
+    layList.search('search',function(where){
+        layList.reload(where,true);
+    });
+
+    layList.switch('is_show',function (odj,value) {
+        if(odj.elem.checked==true){
+            layList.baseGet(layList.Url({a:'set_show',p:{is_show:1,id:value}}),function (res) {
+                layList.msg(res.msg);
+            });
+        }else{
+            layList.baseGet(layList.Url({a:'set_show',p:{is_show:0,id:value}}),function (res) {
+                layList.msg(res.msg);
+            });
+        }
+    });
+
+    //点击事件绑定
+    layList.tool(function (event,data,obj) {
+        switch (event) {
+            case 'delete':
+                var url=layList.U({c:'water.water_cate',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;
+        }
+    })
+
+
+    //改状态
+    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}

+ 5 - 2
app/admin/view/user/user_card/index.php

@@ -57,7 +57,7 @@
                                                 <option value="">全部</option>
                                                 <option value="1">已用完</option>
                                                 <option value="2">正常</option>
-                                                <option value="3">过期</option>
+                                                <option value="3">失效</option>
                                             </select>
                                         </div>
                                     </div>
@@ -104,7 +104,7 @@
                     </script>
                     <script type="text/html" id="use">
                         {{# if(d.use==0){ }}
-                        使用完
+                        失效
                         {{# } }}
                         {{# if(d.use==1){ }}
                         正常
@@ -123,6 +123,9 @@
                         {{# } }}
                     </script>
                     <script type="text/html" id="act">
+                        <button type="button" class="layui-btn layui-btn-xs layui-btn-normal" onclick="$eb.createModalFrame('编辑','{:Url('equity')}?id={{d.id}}',{h:1100,w:1100})">
+                            详情
+                        </button>
                         <button type="button" class="layui-btn layui-btn-xs layui-btn-danger" lay-event='delete' id="">
                             删除
                         </button>

+ 25 - 17
app/api/controller/diagnosis/DiagnosisOrderController.php

@@ -6,6 +6,7 @@ use app\admin\model\diagnosis\DiagnosisApply;
 use app\admin\model\diagnosis\DiagnosisCate;
 use app\admin\model\diagnosis\DiagnosisOrder;
 use app\admin\model\diagnosis\DiagnosisService;
+use app\admin\model\user\UserEquity;
 use app\models\user\UserBill;
 use crmeb\basic\BaseModel;
 use crmeb\repositories\OrderRepository;
@@ -51,13 +52,24 @@ class DiagnosisOrderController
             ['remarks'],
         ]);
         $price = 0;// 金额
+        $ot_price = 0;
         $commission = 0; //佣金
+        $card_id = [];
         foreach ($data['cate'] as $item){
+            $da = date('w');
+            if ($da == 0) $da = 7;
+            $equity = UserEquity::where('c_id', $item)->order('number DESC')->where('use', 1)->where('start_week', '<=', $da)->where('end_week', '>=', $da)->find();
             $cate = DiagnosisCate::where('id', $item)->find();
-            $price += $cate['price'];
+            if ($equity){
+                $price += 0;
+                $card_id[] = $equity['user_card_id'];
+            }else{
+                $price += $cate['price'];
+            }
+            $ot_price += $cate['price'];
             $commission += $cate['reward'];
         }
-
+        $card_id = implode(',', $card_id);
         if ($data['service_id']){
             foreach ($data['service_id'] as $item){
                 $cate = DiagnosisService::where('id', $item)->find();
@@ -66,10 +78,11 @@ class DiagnosisOrderController
             }
         }
         $order['cate_id'] = implode(',', $data['cate']);
-        $order['ot_price'] = $price;
+        $order['ot_price'] = $ot_price;
         $order['pay_price'] = $price;
         $order['commission'] = $commission;
         $order['type'] = $data['type'];
+        $order['user_card_id'] = $card_id;
         if (strtotime($data['time']) < time()){
             return app('json')->fail('选择正确的时间');
         }
@@ -109,46 +122,41 @@ class DiagnosisOrderController
         $order = cache($data['cache']);
 
         if (!$order) return app('json')->fail('订单已过期');
-        BaseModel::beginTrans();
-        $res = DiagnosisOrder::create_order($order, $data['pay_type'],$uid);
+        $orderInfo = DiagnosisOrder::create_order($order, $data['pay_type'],$uid);
         if ($order['pay_price'] == 0){
-            $res1 = DiagnosisOrder::yuPay($res['order_id']);
+            $res = DiagnosisOrder::yuPay($orderInfo['order_id']);
             if ($res){
                 cache()->delete($data['cache']);
-                BaseModel::checkTrans($res);
-                return app('json')->status('success', '余额支付成功');
+                return app('json')->status('success', '支付成功');
             }else{
                 return app('json')->fail('支付失败');
             }
         }else{
-            if ($res['pay_type'] == 1){
-                $res1 = DiagnosisOrder::yuPay($res['order_id']);
+            if ($orderInfo['pay_type'] == 1){
+                $res = DiagnosisOrder::yuPay($orderInfo['order_id']);
                 if ($res){
                     cache()->delete($data['cache']);
-                    BaseModel::checkTrans($res);
                     return app('json')->status('success', '余额支付成功');
                 }else{
                     return app('json')->fail('支付失败');
                 }
-            }elseif ($res['pay_type'] ==2){
+            }elseif ($orderInfo['pay_type'] ==2){
                 try {
-                    $jsConfig = OrderRepository::jsDiaPay($res['order_id']); //创建订单jspay
+                    $jsConfig = OrderRepository::jsDiaPay($orderInfo['order_id']); //创建订单jspay
                 } catch (\Exception $e) {
                     return app('json')->status('pay_error', $e->getMessage());
                 }
                 $info['jsConfig'] = $jsConfig;
                 cache()->delete($data['cache']);
-                BaseModel::checkTrans($res);
                 return app('json')->status('wechat_pay', '订单创建成功', $info);
-            }elseif ($res['pay_type'] ==3){
+            }elseif ($orderInfo['pay_type'] ==3){
                 try {
-                    $jsConfig = OrderRepository::wxDiaPay($res['order_id']); //创建订单jspay
+                    $jsConfig = OrderRepository::wxDiaPay($orderInfo['order_id']); //创建订单jspay
                 } catch (\Exception $e) {
                     return app('json')->status('pay_error', $e->getMessage());
                 }
                 $info['jsConfig'] = $jsConfig;
                 cache()->delete($data['cache']);
-                BaseModel::checkTrans($res);
                 return app('json')->status('wechat_h5_pay', '订单创建成功', $info);
             }
         }

+ 251 - 0
app/api/controller/user/CardController.php

@@ -0,0 +1,251 @@
+<?php
+
+namespace app\api\controller\user;
+
+use app\admin\model\card\Card;
+use app\admin\model\card\CardOrder;
+use app\admin\model\card\CardProject;
+use app\admin\model\diagnosis\DiagnosisCate;
+use app\admin\model\diagnosis\DiagnosisService;
+use app\admin\model\user\UserCard;
+use app\admin\model\user\UserEquity;
+use app\models\user\UserBill;
+use crmeb\basic\BaseModel;
+use app\admin\model\system\{
+    SystemAttachment, ShippingTemplates
+};
+use app\admin\model\user\User;
+use app\Request;
+use crmeb\services\{
+    CacheService,
+    ExpressService,
+    SystemConfigService,
+    UtilService
+};
+
+/**
+ * 优惠卡
+ * Class StoreOrderController
+ * @package app\api\controller\order
+ */
+class CardController
+{
+
+
+    /**
+     * 优惠卡列表
+     * @param Request $request
+     * @return mixed
+     */
+    public function list(Request $request)
+    {
+        $data  = UtilService::getMore([
+            ['page', 1],
+            ['limit', 10]
+        ]);
+
+        $list = Card::order('id DESC')->page($data['page'],$data['limit'])->select();
+
+        $list = count($list) > 0 ? $list->toArray() : [];
+
+        return app('json')->successful($list);
+    }
+
+    /**
+     * 优惠卡详情
+     * @param Request $request
+     * @param $id
+     * @return mixed
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\DbException
+     * @throws \think\db\exception\ModelNotFoundException
+     */
+    public function details(Request $request,$id)
+    {
+        if (!$id) return app('json')->fail('传入id');
+
+        $details = Card::order('id DESC')->where('id', $id)->find()->toArray();
+
+        return app('json')->successful($details);
+    }
+
+    /**
+     * 小程序购买
+     *
+     * @param Request $request
+     * @return mixed
+     */
+    public function routine(Request $request)
+    {
+        list($card_id, $type) = UtilService::postMore([['card_id', 0], ['type', 0]], $request, true);
+        switch ((int)$type) {
+            case 0: //支付购买会员卡
+                $order = CardOrder::addCard($request->uid(), $card_id, 'routine');
+                if (!$order) return app('json')->fail('订单生成失败!');
+                try {
+                    return app('json')->successful(CardOrder::jsPay($order));
+                } catch (\Exception $e) {
+                    return app('json')->fail($e->getMessage());
+                }
+                break;
+            default:
+                return app('json')->fail('缺少参数');
+                break;
+        }
+    }
+
+    /**
+     * 公众号购买
+     *
+     * @param Request $request
+     * @return mixed
+     */
+    public function wechat(Request $request)
+    {
+        list($card_id, $type, $from) = UtilService::postMore([['card_id', 0], ['type', 0]], $request, true);
+        switch ((int)$type) {
+            case 0: //支付充值余额
+                $order = CardOrder::addCard($request->uid(), $card_id, 'weixinh5');
+                if (!$order) return app('json')->fail('订单生成失败!');
+                try {
+                    if ($from == 'weixinh5') {
+                        $recharge = CardOrder::wxH5Pay($order);
+                    } else {
+                        $recharge = CardOrder::wxPay($order);
+                    }
+                } catch (\Exception $e) {
+                    return app('json')->fail($e->getMessage());
+                }
+                return app('json')->successful(['type' => $from, 'data' => $recharge]);
+                break;
+            default:
+                return app('json')->fail('缺少参数');
+                break;
+        }
+    }
+
+
+    /**
+     * 用户优惠券
+     * @param Request $request
+     * @return mixed
+     */
+    public function user_card(Request $request)
+    {
+        $data = UtilService::getMore([
+            ['status'],
+            ['page', 1],
+            ['limit', 10]
+        ]);
+
+        $model = UserCard::alias('a')
+            ->field('a.*,b.name')
+            ->leftJoin('card b', 'a.card_id = b.id')
+            ->where('a.uid', $request->uid())
+            ->order('a.id DESC');
+
+        if ($data['status'] == 1){
+            $model = $model->where('a.status', 0);// 未使用
+        }elseif ($data['status'] == 2){
+            $model = $model->where('a.status', 1)->where('use', 1);//使用中
+        }elseif ($data['status'] ==3){
+            $model = $model->where('a.status', 1)->where('use', -1);//失效
+        }
+        $list = $model->page($data['page'], $data['limit'])->select();
+
+        $list = count($list) > 0 ? $list->toArray() : [];
+
+        return app('json')->successful($list);
+
+    }
+
+
+    /**
+     * 使用优惠卡
+     * @param Request $request
+     * @param $id
+     * @return mixed
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\DbException
+     * @throws \think\db\exception\ModelNotFoundException
+     */
+    public function use_card(Request $request,$id)
+    {
+        if (!$id) return app('json')->fail('传入id');
+        $data = UtilService::postMore([
+            ['card'],
+            ['pwd']
+        ]);
+        BaseModel::beginTrans();
+        $user_card = UserCard::where('card', $data['card'])->where('pwd', $data['pwd'])->find();
+        if (!$user_card) return app('json')->fail('卡密账号错误');
+        if ($user_card['status'] > 0) return app('json')->fail('优惠卡已使用');
+
+        $card = Card::where('id', $user_card['card_id'])->find();
+        $card_pro = CardProject::where('card_id', $card['id'])->select();
+
+        if (!$user_card) return app('json')->fail('优惠卡不存在');
+        $uid = $user_card['uid'];
+
+        if ($user_card['uid'] != $request->uid()){
+            $user_card['uid'] = $request->uid();
+        }
+        $user_card['status'] = 1;
+        $user_card['start_time'] = time();
+        $user_card['end_time'] = time() + 86400*$card['time'];
+
+        try {
+            $res = $user_card->save();
+            foreach ($card_pro as $item)
+            {
+                UserEquity::create([
+                    'uid' => $request->uid(),
+                    'user_card_id' => $id,
+                    'c_id' => $item['c_id'],
+                    'type' => $item['type'],
+                    'number' => $item['number'],
+                    'start_week' => $card['start_week'],
+                    'end_week' => $card['end_week'],
+                ]);
+            }
+            UserBill::expend('使用优惠卡', $request->uid(), 'now_money', 'card', 0, '', 0, '使用优惠卡'.$card['name'].',优惠卡原拥有人'.$uid);
+            BaseModel::commitTrans();
+            return app('json')->success('使用成功');
+        } catch (\Exception $e) {
+
+            BaseModel::rollbackTrans();
+            return app('json')->fail($e->getMessage());
+        }
+    }
+
+    /**
+     * 使用优惠卡后,用户的拥有详情
+     * @param Request $request
+     * @param $id
+     * @return mixed
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\DbException
+     * @throws \think\db\exception\ModelNotFoundException
+     */
+    public function user_card_details(Request $request,$id)
+    {
+        if (!$id) return app('json')->fail('传入id');
+        $list = UserEquity::alias('a')
+            ->field('a.*,b.name')
+            ->leftJoin('diagnosis_cate b', 'a.c_id = b.id')
+            ->where('a.user_card_id', $id)
+            ->where('a.uid', $request->uid())
+            ->select();
+        if (count($list) == 0) return app('json')->fail('优惠卡未使用');
+
+        $list = count($list) > 0 ? $list->toArray() : [];
+
+        return app('json')->successful($list);
+
+    }
+
+
+
+
+
+}

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

@@ -2,6 +2,7 @@
 
 namespace app\api\controller\user;
 
+use app\admin\model\diagnosis\DiagnosisApply;
 use app\http\validates\user\AddressValidate;
 use app\models\system\SystemCity;
 use app\models\user\UserVisit;
@@ -611,4 +612,85 @@ class UserController
         $puid = $request->post('puid/d', 0);
         return app('json')->success(User::setSpread($puid, $request->uid()));
     }
+
+
+    /**
+     * 提交修改申请
+     * @param Request $request
+     * @return mixed
+     * @throws DataNotFoundException
+     * @throws DbException
+     * @throws ModelNotFoundException
+     */
+    public function apply(Request $request)
+    {
+        $data = UtilService::postMore([
+            ['name'],
+            ['sex'],
+            ['phone'],
+            ['images', []],
+        ]);
+        if (empty($data['name'])) return app('json')->fail('请填写姓名');
+        if (empty($data['sex'])) return app('json')->fail('请填写性别');
+        if (empty($data['phone'])) return app('json')->fail('请填写手机号');
+        if(!(preg_match("/^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$/",$data['phone'])))
+        {
+            return app('json')->fail('请填写正确的手机号');
+        }
+        if (empty($data['images'])) return app('json')->fail('请上传身份证正反面');
+
+        $apply = DiagnosisApply::where('uid', $request->uid())->find();
+        if (!$apply){
+            $res = DiagnosisApply::create([
+                'name' => $data['name'],
+                'uid' => $request->uid(),
+                'sex' => $data['sex'],
+                'phone' => $data['phone'],
+                'images' => json_encode($data['images'])
+            ]);
+            if ($res) return app('json')->success('提交成功');
+            return app('json')->fail('提交失败');
+        }else{
+            if ($apply['status'] == 0) return app('json')->success('审核中无法修改');
+            if ($apply['status'] == -1){
+                $apply['status'] = 0;
+                $apply['remarks'] = '';
+            }
+            $apply['name'] = $data['name'];
+            $apply['sex'] = $data['sex'];
+            $apply['phone'] = $data['phone'];
+            $apply['images'] = json_encode($data['images']);
+
+            $res = $apply->save();
+            if ($res) return app('json')->success('修改成功');
+            return app('json')->fail('修改失败');
+
+        }
+    }
+
+    /**
+     * 申请记录
+     * @param Request $request
+     * @return mixed
+     * @throws DataNotFoundException
+     * @throws DbException
+     * @throws ModelNotFoundException
+     */
+    public function user_apply(Request $request)
+    {
+        $list = DiagnosisApply::where('uid', $request->uid())->select();
+
+
+        $list = count($list) > 0 ? $list->toArray() : [];
+        if ($list){
+            foreach ($list as &$item)
+            {
+                $item['images'] = json_decode($item['images']);
+
+            }
+
+        }
+
+        return app('json')->successful($list);
+    }
 }

+ 29 - 0
app/models/user/User.php

@@ -3,6 +3,8 @@
 
 namespace app\models\user;
 
+use app\admin\model\user\UserCard;
+use app\admin\model\user\UserEquity;
 use app\models\store\StoreOrder;
 use app\models\store\StoreProduct;
 use crmeb\services\SystemConfigService;
@@ -736,4 +738,31 @@ class User extends BaseModel
         }
         return $model->where('brokerage_price', '>', $brokerage_price)->count('uid');
     }
+
+    /**
+     * 优惠卡失效
+     * @return void
+     * @throws DataNotFoundException
+     * @throws DbException
+     * @throws ModelNotFoundException
+     */
+    public static function userCard()
+    {
+        $user_card = UserCard::where('status', 1)->where('use', 1)->select();
+        if (count($user_card) > 0){
+            foreach ($user_card as $item)
+            {
+                if ($item['end_time'] < time()){
+                    UserCard::where('id',$item['id'])->update(['use' => 0]);
+                    UserEquity::where('user_card_id', $item['id'])->update(['use' => 0]);
+                }else{
+                    $equity = UserEquity::where('user_card_id', $item['id'])->where('use', 1)->select();
+                    if (count($equity) == 0){
+                        UserCard::where('id',$item['id'])->update(['use' => 0]);
+                    }
+                }
+            }
+        }
+    }
+
 }

+ 17 - 0
crmeb/repositories/PaymentRepositories.php

@@ -2,6 +2,7 @@
 
 namespace crmeb\repositories;
 
+use app\admin\model\card\CardOrder;
 use app\admin\model\diagnosis\DiagnosisOrder;
 use app\models\store\StoreOrder;
 use app\models\user\UserRecharge;
@@ -88,4 +89,20 @@ class PaymentRepositories
             return false;
         }
     }
+
+
+    /**
+     * 购买优惠卡成功后
+     * @param string|null $order_id 订单id
+     * @return bool
+     */
+    public static function wechatUsercard(string $order_id = null)
+    {
+        try {
+            if (CardOrder::be(['order_id' => $order_id, 'paid' => 1])) return true;
+            return CardOrder::rechargeSuccess($order_id);
+        } catch (\Exception $e) {
+            return false;
+        }
+    }
 }

+ 9 - 0
crmeb/subscribes/TaskSubscribe.php

@@ -6,6 +6,7 @@ use app\admin\model\system\SystemAttachment;
 use app\models\store\StoreBargainUser;
 use app\models\store\StoreOrder;
 use app\models\store\StorePink;
+use app\models\user\User;
 use app\models\user\UserToken;
 use think\facade\Db;
 
@@ -75,6 +76,14 @@ class TaskSubscribe
         } catch (\Exception $e) {
             Db::rollback();
         }
+
+        try {
+            Db::startTrans();
+            User::userCard();//优惠卡失效
+            Db::commit();
+        } catch (\Exception $e) {
+            Db::rollback();
+        }
     }
 
     /**

+ 11 - 0
route/api/route.php

@@ -178,7 +178,18 @@ Route::group(function () {
     Route::post('diagnosis/confirmation/:id', 'diagnosis.DiagnosisOrderController/confirmation')->name('confirmation');//确认完成
     Route::post('diagnosis/after_sales/:id', 'diagnosis.DiagnosisOrderController/after_sales')->name('after_sales');//申请售后
 
+    //优惠卡
+    Route::get('card/list', 'user.CardController/list')->name('cardList');//优惠卡列表
+    Route::get('card/details/:id', 'user.CardController/details')->name('details');//优惠卡详情
+    Route::post('card/routine', 'user.CardController/routine')->name('CardRoutine');//小程序购买会员卡
+    Route::post('card/wechat', 'user.CardController/wechat')->name('CardWechat');//公众号购买会员卡
 
+    Route::get('card/user_card', 'user.CardController/user_card')->name('user_card');//用户优惠卡列表
+    Route::post('card/use_card/:id', 'user.CardController/use_card')->name('use_card');//使用优惠卡
+    Route::get('card/user_card_details/:id', 'user.CardController/user_card_details')->name('user_card_details');//使用优惠卡后,用户的拥有详情
+
+    Route::post('user/apply', 'user.UserController/apply')->name('apply');//接单员申请
+    Route::get('user/user_apply', 'user.UserController/user_apply')->name('user_apply');//申请记录
 })->middleware(\app\http\middleware\AllowOriginMiddleware::class)->middleware(\app\http\middleware\AuthTokenMiddleware::class, true);
 //未授权接口
 Route::group(function () {