Ver Fonte

后台修改余额 查看余额记录

Charlie há 8 anos atrás
pai
commit
30240be302

+ 116 - 4
www/protected/controllers/RUserController.php

@@ -3,7 +3,12 @@ class RUserController extends AdminController{
 
     public function actionIndex()
     {
-        $this->render('index');
+        // 订单类型
+        $type_data = Yii::app()->params['o2o_service'];
+        $type = CommonFn::getComboboxData($type_data, 100, true, 100);
+        $this->render('index', array(
+            'type'         => $type
+        ));
     }
 
     public function actionList(){
@@ -59,9 +64,9 @@ class RUserController extends AdminController{
         $user = RUser::model()->find($criteria);
 
 
-        //$keys = array('status','certify_status','is_fake_user','city_info');
+        $keys = array('status','certify_status','is_fake_user','city_info');
 
-        //$success = $user->save(true, $keys, true);
+        $success = $user->save(true, $keys, true);
 
 
         CommonFn::requestAjax($success, $message, array());
@@ -116,5 +121,112 @@ class RUserController extends AdminController{
         echo CommonFn::composeDatagridData($data, $total);
     }
 
-    
+    public function actionChangeBalance(){
+        $id = Yii::app()->request->getParam('id');
+        $amount = intval(Yii::app()->request->getParam('amount'));
+        $memo = Yii::app()->request->getParam('memo');
+        $type = Yii::app()->request->getParam('type');
+
+        if(!$id||!$amount||!$memo||!$type){
+            CommonFn::requestAjax(false, "缺少必须参数");
+        }
+
+        $user = RUser::get(new MongoId($id));
+        if(!$user){
+            CommonFn::requestAjax(false, "用户不存在");
+        }
+
+        $user->balance = $user->balance+$amount;
+        if($user->balance<0){
+            CommonFn::requestAjax(false, "用户余额不能小于0");
+        }
+        $user->save();
+
+        $balance_log = new BalanceLog();
+        $balance_log->time = time();
+        $balance_log->user =  $user->_id;
+        $balance_log->memo = $memo;
+        $balance_log->type = $type;
+        $balance_log->amout = $amount;
+        $balance_log->save(true);
+
+        CommonFn::requestAjax(true, '修改成功', array());
+    }
+
+    public function actionBalanceLog(){
+        $id = Yii::app()->request->getParam('$id', '');
+
+        $params = CommonFn::getPageParams();
+        $criteria = new EMongoCriteria($params);
+
+        if ($id != ''){
+            $id = new MongoId($id);
+            $criteria->user('==', $id);
+        }else{
+            CommonFn::requestAjax(false, "缺少必须参数");
+        }
+
+        $cursor = BalanceLog::model()->findAll($criteria);
+        $total = $cursor->count();
+        $rows = CommonFn::getRowsFromCursor($cursor);
+        $parsedRows = BalanceLog::model()->parse($rows);
+        echo CommonFn::composeDatagridData($parsedRows, $total);
+    }
+
+
+     public function actionSendCoupon() {
+         $user_id = Yii::app()->request->getParam('user_id', '');
+         $coupon_id = Yii::app()->request->getParam('coupon_id', '');
+         $start_time = Yii::app()->request->getParam('start_time', '');
+         $end_time = Yii::app()->request->getParam('end_time', '');
+         $need_sms = intval(Yii::app()->request->getParam('need_sms', '0'));
+         $copy = Yii::app()->request->getParam('copy', '');
+
+         $mongo = new MongoClient(DB_CONNETC);
+         $db = $mongo->fuwu;
+         $coll = 'admin_send_coupon_log';
+         $collection = $db->selectCollection($coll);
+
+         $admin = Yii::app()->user;
+         $admin_id = $admin->id;
+         $user_id = new MongoId($user_id);
+         $coupon_id = new MongoId($coupon_id);
+         $time = time();
+
+         $user = RUser::get($user_id);
+
+         //开始与结束时间处理
+         $start_time = empty($start_time) ? $time : strtotime($start_time);
+         $end_time   = empty($end_time) ? strtotime('+30 day', $start_time) : strtotime($end_time);
+
+         //插入user_coupons表
+         $flag_user_coupon = Service::factory('CouponService')->giveCoupon($user_id, $coupon_id, $start_time, $end_time);
+         if (!$flag_user_coupon) {
+             CommonFn::requestAjax($flag_user_coupon, '发放优惠券失败', array());
+         }
+
+          //插入admin_send_coupon_log表
+         $data = array(
+             'admin_id'  => $admin_id,
+             'user_id'   => $user_id,
+             'coupon_id' => $coupon_id,
+             'time'      => $time
+         );
+         $flag_send_log = $collection->insert($data);
+         if ($flag_send_log['err'] != null) {
+             CommonFn::requestAjax($flag_user_coupon, '优惠券已发放,日志记录失败', array());
+         }
+
+          //发送短信
+         if ($need_sms) {
+             if ($user->mobile != '') {
+                 Service::factory('SendSMSService')->send_sms($copy, $user->mobile);
+             } else if (!empty($user->shop_address) && isset($user->shop_address[0]['mobile'])) {
+                 $mobile = $user->shop_address[0]['mobile'];
+                 Service::factory('SendSMSService')->send_sms($copy, $mobile);
+             }
+         }
+
+         CommonFn::requestAjax(true, '优惠券已成功发放');
+     }
 }

+ 17 - 2
www/protected/modules/o2o/controllers/RechargeController.php

@@ -32,9 +32,12 @@ class  RechargeController extends O2oBaseController{
             // 支付成功后 用户余额/代金券  增加   暂时充值卡发放的代金券没有过期时间
 
             $recharge = Recharge::get(new MongoId($order->recharge));
+
+            $amount = $recharge->denomination;
+
+
             if($recharge->cash_back){
-                $user_obj->balance = $user_obj->balance+$recharge->cash_back;
-                $user_obj->save();
+                $amount += $recharge->cash_back;
             }
             if(isset($recharge->coupons) && is_array($recharge->coupons) && count($recharge->coupons)){
                 foreach ($recharge->coupons as $coupon_id) {
@@ -44,11 +47,23 @@ class  RechargeController extends O2oBaseController{
                 }
             }
 
+            $user_obj->balance = $user_obj->balance+$amount;
+            $user_obj->save();
+
             $log = new RechargeLog();
             $log->time = time();
             $log->user =  $user_obj->_id;
             $log->recharge = $recharge->_id;
             $log->save(true);
+
+            $balance_log = new BalanceLog();
+            $balance_log->time = time();
+            $balance_log->user =  $user_obj->_id;
+            $balance_log->memo = '购买充值卡充值';
+            $balance_log->type = 'recharge';
+            $balance_log->amout = $amount;
+            $balance_log->save(true);
+
             CommonFn::requestAjax(true,'success',json_decode($result),200,array());
         }
     }

+ 89 - 0
www/protected/modules/o2o/models/BalanceLog.php

@@ -0,0 +1,89 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: PHP
+ * Date: 2016/9/26
+ * Time: 11:57
+ * 用户余额
+ */
+class BalanceLog extends MongoAr
+{
+    public $_id;
+
+    public $user;//用户 mongoid
+
+    public $time;//时间
+
+    public $memo;//说明
+
+
+    public $type;//操作类型   'recharge  充值;admin_recharge  后台充值;order  下订单;send  赠送;other  其他'
+
+    public $amount;//金额  可以为负数
+
+    public static $type_option = array(
+        'recharge' => '充值',
+        'admin_recharge' => '后台充值',
+        'order' => '下订单',
+        'send' => '赠送',
+        'other' => '其他',
+    );
+
+    public function __construct($scenario='insert'){
+        $this->setMongoDBComponent(Yii::app()->getComponent('mongodb_o2o'));
+        parent::__construct($scenario);
+    }
+
+    public static function model($className=__CLASS__)
+    {
+        return parent::model($className);
+    }
+
+    public function getCollectionName()
+    {
+        return 'balance_log';
+    }
+
+    public static function get($_id) {
+        if(CommonFn::isMongoId($_id)){
+            $criteria = new EMongoCriteria();
+            $criteria->_id('==', $_id);
+            $model = self::model()->find($criteria);
+            return $model;
+        }else{
+            return false;
+        }
+    }
+
+    public function parseRow($row,$output=array()){
+        $newRow = array();
+        $newRow['id'] = (string)$row['_id'];
+
+        $newRow['memo'] = CommonFn::get_val_if_isset($row,'memo','');
+
+        $newRow['type'] = CommonFn::get_val_if_isset($row,'type','other');
+        $newRow['type_str'] = self::$type_option[$newRow['type']];
+
+        $newRow['time'] = CommonFn::get_val_if_isset($row,'time',time());
+
+        $newRow['time_str'] = CommonFn::sgmdate("Y年n月d日", $newRow['time'],1);
+
+        $newRow['amount'] = CommonFn::get_val_if_isset($row,'amount',0);
+
+        $user = array();
+        $t_user = new ZUser();
+        if(isset($row['user'])){
+            $_user = $t_user->get($row['user']);
+            $user = RUser::model()->parseRow($_user->attributes,array('id','user_name'));
+        }
+        $newRow['user'] = $user;
+
+
+        $newRow['action_user'] = CommonFn::get_val_if_isset($row,'action_user',"");
+        $newRow['action_time'] = CommonFn::get_val_if_isset($row,'action_time',"");
+        $newRow['action_log'] = CommonFn::get_val_if_isset($row,'action_log',"");
+
+
+        return $this->output($newRow,$output);
+    }
+}

+ 168 - 28
www/protected/views/rUser/index.php

@@ -124,7 +124,6 @@
             </div>
         </div>
     </div>
-
     
     <div region="center" title="用户订单" data-options="iconCls:'icon-save'" style="overflow:auto;padding:10px;">
         <div class="detail_layout">
@@ -133,6 +132,7 @@
             </div>
         </div>
     </div>
+
     <div region="center" title="用户可用代金券" data-options="iconCls:'icon-save'" style="overflow:auto;padding:10px;">
         <div class="detail_layout">
             <div data-options="region:'center'" class="detail_center">
@@ -196,7 +196,7 @@
                                     </div>
                                 </div>
                             </li>
-                            <!-- <li class="f_item">
+                            <li class="f_item">
                                 <div class="box">
                                     <div class="f_label">
                                         <span>发送短信: </span>
@@ -205,9 +205,9 @@
                                         <input name="need_sms" id="need_sms" type="checkbox" value="1" onclick="needMessage();"/>
                                     </div>
                                 </div>
-                            </li> -->
+                            </li>
                             
-                            <li class="f_item" id="coupon_copy_item" style="display: none;">
+                            <li class="f_item" id="coupon_copy_item" >
                                 <div class="box">
                                     <div class="f_label">
                                         <span>默认文案: </span>
@@ -231,41 +231,105 @@
         </div>
     </div>
 
+    <div region="center" title="修改余额" data-options="iconCls:'icon-save'" style="overflow:auto;padding:10px;">
+        <div class="detail_layout">
+            <div data-options="region:'center'" class="detail_center">
+                <div class="detail_main">
+                    <form id="sendCoupon_form" method="post">
+                        <ul>
+                            <li class="f_item">
+                                <div class="box">
+                                    <div class="f_label">
+                                        <span>ID: </span>
+                                    </div>
+                                    <div class="box_flex f_content">
+                                        <span id="balance_user_str"></span>
+                                        <input type="hidden" name="id" id="balance_user_id" />
+                                    </div>
+                                </div>
+                            </li>
+                            <li class="f_item">
+                                <div class="box">
+                                    <div class="f_label">
+                                        <span>金额: </span>
+                                    </div>
+                                    <div class="box_flex f_content">
+                                        <input name="amount" id="amount" placeholder="如100或者-100" style="width:250px;"/>
+                                    </div>
+                                </div>
+                            </li>
 
+                            <li class="f_item">
+                                <div class="box">
+                                    <div class="f_label">
+                                        <span>类型: </span>
+                                    </div>
+                                    <div class="box_flex f_content">
+                                        <input type="radio" name="type" value="admin_recharge">后台充值
+                                        <input type="radio" name="type" value="order">下订单
+                                        <input type="radio" name="type" value="send">赠送
+                                        <input type="radio" name="type" value="other">其他
+                                    </div>
+                                </div>
+                            </li>
+
+                            <li class="f_item">
+                                <div class="box">
+                                    <div class="f_label">
+                                        <span>备注: </span>
+                                    </div>
+                                    <div class="box_flex f_content">
+                                        <textarea name="memo" id="memo" style="width:250px;height:120px;"></textarea>
+                                    </div>
+                                </div>
+                            </li>
+                        </ul>
+                    </form>
+                </div>
+            </div>
+            <div data-options="region:'south'" class="detail_south">
+                <div class="detail_toolbar">
+                    <a href="javascript:void(0);" class="easyui-linkbutton set_button" iconCls="icon-save" onclick="sendCoupon();return false;">发送</a>
+                </div>
+            </div>
+            <div data-options="region:'south'" class="detail_south">
+            </div>
+        </div>
+    </div>
+
+    <div region="center" title="余额记录" data-options="iconCls:'icon-save'" style="overflow:auto;padding:10px;">
+        <div class="detail_layout">
+            <div data-options="region:'center'" class="detail_center">
+                <table id="balance_dg"></table>
+            </div>
+        </div>
+    </div>
 </div>
 
 </div>
 <!--新增用户结束 -->
-<style type="text/css">
-#pets_info_container .pets_item {margin:6px 0;border:1px solid #0099FF;border-radius: 4px;width: 100%;padding: 6px 8px;}
-#pets_info_container .pets_label {display: inline-block; width: 40px;}
-#pets_info_container .pets_value {display: inline-block; width: 80px;}
-</style>
 <script type="text/javascript" src="<?php echo Yii::app()->request->baseUrl; ?>/js/qiniu_upload_single.js?v=20200907"></script>
 <script type="text/javascript">
 var jq_dg_content = $('#dg_content');
 var w_width = $(window).width();
 var w_height = $(window).height();
 var jq_content_form = $('#content_form');
-var jq_msg_form = $("#message_form");
-var jq_filter_status = $('#filter_status');
 var jq_action_info = $('#action_info');
 var jq_add_dialog = $('#add_dialog');
 var jq_add_form = $('#add_form');
 var jq_score_form = $('#score_form');
-var jq_status_select = $('#status_select');
 var jq_avatar = $('#avatar_info');
 var jq_ss = $('#ss');
 var jq_acc = $('#acc_container');
 var module_router = site_root + '/index.php?r=rUser';
-
+var type = <?php echo json_encode($type); ?>;
 var jq_sendCoupon_form = $('#sendCoupon_form');
-var jq_filter_app_client = $('#filter_app_client');
 
 var price = '';
 var endtime = '';
 
 var jq_order_dg = $('#order_dg');
+var jq_balance_dg = $('#balance_dg');
 
 console.log(window.location.href);
 $(function(){
@@ -447,7 +511,7 @@ $(function(){
             jq_content_form.form('load', data);
             console.log(data);
             $('#id_str').html(data.id);
-
+            $('#balance_id_str').val(data.id);
             $('#register_time_str').html(format_time_stamp(data.register_time,true));
 
 
@@ -459,7 +523,7 @@ $(function(){
 
             $('#view_latitude').val(data.latitude);
             $('#view_longitude').val(data.longitude);
-
+            $('#balance_user_id').val(data.id);
 
             jq_sendCoupon_form.form('clear');
             $('#coupon_user_id').val(data.id);
@@ -487,6 +551,25 @@ $(function(){
                 ]]   
             });
 
+            jq_balance_dg.datagrid({
+                url: site_root + '/index.php?r=rUser/balanceLog',
+                fitColumns: true,
+                pagination: true,
+                pageList: [20, 30, 50],
+                pageSize: 20,
+                singleSelect: true,
+                queryParams: {
+                    search: data.id
+                },
+                columns: [[
+                    {field: 'time_str', title: '时间', width: 100},
+                    {field: 'type_str', title: '类型', width: 100,},
+                    {field: 'action_user', title: '操作者', width: 100,},
+                    {field:'amount', title:'数量', width:40},
+                    {field:'memo', title:'说明', width:40}
+                ]]
+            });
+
             jq_order_dg.datagrid({
                 url: site_root + '/index.php?r=rOrder/list',
                 fitColumns: true,
@@ -500,7 +583,7 @@ $(function(){
                 columns: [[
                     {field: 'products', title: '服务', width: 40,
                         formatter: function(value, row) {
-                            return value[0].type_str.replace('','');
+                            return type[value].text;
                         }
                     },
                     {field: 'order_time_str', title: '下单时间', width: 100,
@@ -517,18 +600,11 @@ $(function(){
                             return month+'月'+date+'日 '+hour + ':00';
                         }
                     },
-                    {field: 'precedence', title: '加急', width: 20,
-                        formatter: function(value, row) {
-                            if (value == 1) {
-                                return '是';
-                            } else {
-                                return '否';
-                            }
-                        }
-                    },
+
                     {field:'af_sum_price', title:'总额', width:40},
                     {field:'sum_price', title:'折后', width:40},
                     {field: 'status_str', title: '订单状态', width: 40},
+                    {field:'counts', title:'数量', width:20,sortable:false},
                     {field:'score', title:'评价',width:20,
                         formatter:function(value, row) {
                             if (value == 100) {
@@ -573,7 +649,8 @@ $(function(){
             $('#view_latitude').val('');
             $('#view_longitude').val('');
 
-
+            $('#balance_user_id').val('');
+            $('#balance_id_str').html('');
             $('#coupon_user_id').val('');
             $('#coupon_user_str').html('');
             $('#coupon_id').val('');
@@ -621,7 +698,44 @@ $(function(){
         }
     });
 
+//修改余额
+    jq_balance_form.form({
+        url: site_root + '/index.php?r=rUser/changeBalance',
+        onSubmit: function(param){
+            if (!$('#balance_user_id').val()){
+                return false;
+            }
+            var isValid = $(this).form('validate');
+            if (!isValid){
+                $.messager.progress('close');
+            }
+            return isValid;
+        },
+        success: function(res){
+            $.messager.progress('close');
+            var res = JSON.parse(res);
+            if (res.success){
+                $.messager.show({
+                    title: '提示',
+                    msg: '保存成功',
+                    timeout: 3500,
+                    showType: 'slide'
+                });
+                $('#user_balance').val('');
+                $('#user_reason').val('');
+                jq_dg_content.datagrid('clearSelections');
+                jq_dg_content.datagrid('reload');
+            }else{
+                $.messager.show({
+                    title: '提示',
+                    msg: res.message,
+                    timeout: 3500,
+                    showType: 'slide'
+                });
+            }
 
+        }
+    });
 
     // 发送优惠券
     jq_sendCoupon_form.form({
@@ -716,6 +830,21 @@ function save_content(){
     jq_content_form.submit();
 }
 
+//修改余额
+function saveBalance(){
+    var a_id = $('#balance_user_id').val();
+    if (!a_id){
+        $.messager.alert('提示', "请先选择一个用户");
+        return false;
+    }
+
+    var balance = $('#user_balance').val();
+    var balanceParse = parseInt(balance);
+
+    $.messager.progress();
+    jq_score_form.submit();
+}
+
 
 function add_content(){
     jq_add_dialog.dialog('open');
@@ -783,13 +912,24 @@ function getCoupon() {
                 return false;
             }
 
-            price = '恭喜你获得一张价值'+couponInfo.content['value']+'元的上门服务优惠券。';
+            price = '恭喜你获得一张价值'+couponInfo.content['value']+'元的家政上门服务优惠券。';
             var copy = endtime == '' ? price : price + endtime;
             $('#coupon_copy').val(copy);
         }
     );
 }
 
+function needMessage() {
+    if ($('#need_sms').is(':checked') || $('#need_zpush').is(':checked')) {
+        if ($('#coupon_copy').val() == '' && $('#coupon_id').val() != '') {
+            getCoupon();
+        }
+        $('#coupon_copy_item').show();
+    } else {
+        $('#coupon_copy_item').hide();
+    }
+}
+
 function formatCity(value){
     var _city = "";
     if(value.province){

+ 2 - 2
www/webapp/o2o/js/build/.cache/home/index.js

@@ -1,10 +1,10 @@
-/*TMODJS:{"version":117,"md5":"563178a0378ea5ae401ebb285e9d6dde"}*/
+/*TMODJS:{"version":14,"md5":"52992efab7b1b3ac336d4d45425ff83a"}*/
 template('home/index',function($data,$filename
 /**/) {
 'use strict';var $utils=this,$helpers=$utils.$helpers,showNavBar=$data.showNavBar,$each=$utils.$each,productsa=$data.productsa,product=$data.product,$index=$data.$index,$escape=$utils.$escape,productsb=$data.productsb,productsc=$data.productsc,productsd=$data.productsd,$out='';if(showNavBar ){
 $out+=' <header class="bar bar-nav"> <a class="left-button back-button"> <div class="icon icon-left-nav"></div> </a> <a class="right-button service-telephone"> <div></div> </a> <h1 class="title">壹管家</h1> </header> ';
 }
-$out+=' <div class="content"> <div class="box-container"> <div class="box-container box box-vertical"> <div id="homeScroll" class="scroll-container box-flex-1"> <div class="scroller"> <div class="home-content"> <div class="box main-service-box width-percent-100"> <div class="title-column-left box-container"> <div class="title-container-square"> <div class="the-main-figure"> <img src="http://odulvej8l.bkt.clouddn.com/Home_image%281%29.png" alt=""/> </div> </div> </div> </div> <div class="clearfix"></div> <div class="global-msg" style="display: flex;justify-content: space-between;font-size: 15px;font-weight: 500;padding: 15px;color: #999999;font-family: \'΢���ź�\', \'Microsoft YaHei\', \'STHeiti Light\';text-align: center;"> <div class="width-percent-25 btn-product-group global-msg-active" data-group-index="0">家庭保洁</div> <div class="width-percent-25 btn-product-group" data-group-index="1">月子服务</div> <div class="width-percent-25 btn-product-group" data-group-index="2">保姆服务</div> <div class="width-percent-25 btn-product-group" data-group-index="3">家庭产品</div> </div> <div> <div class="products-list" id="list0"> ';
+$out+=' <div class="content"> <div class="box-container"> <div class="box-container box box-vertical"> <div id="homeScroll" class="scroll-container box-flex-1"> <div class="scroller"> <div class="home-content"> <div class="box main-service-box width-percent-100"> <div class="title-column-left box-container"> <div class="title-container-square"> <div class="the-main-figure"> <img src="http://odulvej8l.bkt.clouddn.com/Home_image%281%29.png" alt=""/> </div> </div> </div> </div> <div class="global-msg" style="display: flex;justify-content: space-between; padding: 15px;"> <div class="width-percent-25 btn-product-group global-msg-active" data-group-index="0">家庭保洁</div> <div class="width-percent-25 btn-product-group" data-group-index="1">月子服务</div> <div class="width-percent-25 btn-product-group" data-group-index="2">保姆服务</div> <div class="width-percent-25 btn-product-group" data-group-index="3">家庭产品</div> </div> <div> <div class="products-list" id="list0"> ';
 $each(productsa,function(product,$index){
 $out+=' <img src="';
 $out+=$escape(product.desc[0].content);

Diff do ficheiro suprimidas por serem muito extensas
+ 0 - 373
www/webapp/o2o/js/build/template.js


Alguns ficheiros não foram mostrados porque muitos ficheiros mudaram neste diff