Browse Source

feat(lottery):新增活动用户信息浏览

wangyc 7 years ago
parent
commit
af8cea4404

+ 15 - 0
src/main/java/com/uas/platform/b2c/common/lottery/controller/LotteryController.java

@@ -120,4 +120,19 @@ public class LotteryController {
     public ResultMap redempte(Long id, String userTel, String code) {
         return winningHistoryService.redempte(id, userTel, code);
     }
+
+    /**
+     * 分页获取全部用户信息
+     * @param activityCode 活动编号
+     * @param pageParams 分页参数
+     * @param keyword 关键字
+     * @param itemCode 等级编号
+     * @param role 角色
+     * @param status 状态
+     * @return
+     */
+    @RequestMapping(value = "/user/userinfos", method = RequestMethod.GET, produces = "application/json")
+    public JSONObject getUserInfos(String activityCode, com.uas.platform.core.model.PageParams pageParams, String keyword, String itemCode, String role, Integer status) {
+        return userInfoService.findUserInfos(activityCode, pageParams, keyword, itemCode, role, status);
+    }
 }

+ 13 - 0
src/main/java/com/uas/platform/b2c/common/lottery/service/UserInfoService.java

@@ -1,6 +1,8 @@
 package com.uas.platform.b2c.common.lottery.service;
 
+import com.alibaba.fastjson.JSONObject;
 import com.uas.platform.b2c.trade.support.ResultMap;
+import com.uas.platform.core.model.PageParams;
 
 /**
  * Created by wangyc on 2018/9/12.
@@ -16,4 +18,15 @@ public interface UserInfoService {
      */
     ResultMap findUserInfo(String activityCode);
 
+    /**
+     * 分页获取全部用户信息
+     * @param activityCode 活动编号
+     * @param pageParams 分页参数
+     * @param keyword 关键字
+     * @param itemCode 等级编号
+     * @param role 角色
+     * @param status 状态
+     * @return
+     */
+    JSONObject findUserInfos(String activityCode, PageParams pageParams, String keyword, String itemCode, String role, Integer status);
 }

+ 29 - 0
src/main/java/com/uas/platform/b2c/common/lottery/service/impl/UserInfoServiceImpl.java

@@ -1,13 +1,16 @@
 package com.uas.platform.b2c.common.lottery.service.impl;
 
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.uas.platform.b2c.common.lottery.service.UserInfoService;
 import com.uas.platform.b2c.core.config.SysConf;
 import com.uas.platform.b2c.core.support.SystemSession;
 import com.uas.platform.b2c.trade.support.CodeType;
 import com.uas.platform.b2c.trade.support.ResultMap;
+import com.uas.platform.core.model.PageParams;
 import com.uas.platform.core.util.HttpUtil;
 import com.uas.platform.core.util.HttpUtil.Response;
+import com.uas.ps.core.page.exception.IllegalOperatorException;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.StringUtils;
@@ -26,6 +29,9 @@ public class UserInfoServiceImpl implements UserInfoService {
     // 获取单个用户信息路径
     private static final String GET_USER_URL = "/users/user";
 
+    // 分页获取全部用户信息路径
+    private static final String GET_ALL_USERS_URL = "/users";
+
     private final SysConf sysConf;
 
     @Autowired
@@ -51,4 +57,27 @@ public class UserInfoServiceImpl implements UserInfoService {
             return new ResultMap(CodeType.ERROR_STATE, "获取用户信息错误,请重试");
         }
     }
+
+    @Override
+    public JSONObject findUserInfos(String activityCode, PageParams pageParams, String keyword, String itemCode, String role, Integer status) {
+        if (StringUtils.isEmpty(activityCode)) {
+            throw new IllegalOperatorException("活动信息不完全,请确认活动信息");
+        }
+
+        Map<String, Object> params = new HashMap<>();
+        params.put("activityCode", activityCode);
+        params.put("count", pageParams.getCount());
+        params.put("page", pageParams.getPage());
+        params.put("keyword", keyword);
+        params.put("itemCode", itemCode);
+        params.put("role", role);
+        params.put("status", status);
+
+        try {
+            Response response = HttpUtil.sendGetRequest(sysConf.getLottery() + GET_ALL_USERS_URL, params);
+            return JSON.parseObject(response.getResponseText());
+        } catch (Exception e) {
+            throw new IllegalOperatorException("获取用户信息错误,请重试");
+        }
+    }
 }

+ 2 - 0
src/main/webapp/WEB-INF/views/normal/adminWithNav.html

@@ -239,6 +239,8 @@
 					class="fa fa-upload"></i><span> 品牌推广</span></a></li>
 			<li class="nav-node"><a href="#ads/component" ><i
 					class="fa fa-upload"></i><span> 器件推广</span></a></li>
+			<li class="nav-node"><a href="#ads/lotteryUsers" ><i
+					class="fa fa-upload"></i><span> 抽奖活动用户信息</span></a></li>
 			<li class="nav-node"><a href="#ads/winningHistories" ><i
 					class="fa fa-upload"></i><span> 中奖记录</span></a></li>
 

+ 8 - 1
src/main/webapp/resources/js/admin/app.js

@@ -798,7 +798,14 @@
 				controller: 'adsBrandCtrl',
 				controllerUrl: 'app/controllers/ads/ads_brand',
 				title: '品牌推广'
-		})).state('adsWinningHistories', angularAMD.route({
+		})).state('adsLotteryUsers', angularAMD.route({
+      // 抽奖活动用户
+      url: '/ads/lotteryUsers',
+      templateUrl: 'static/view/admin/ads/ads_lotteryUsers.html',
+      controller: 'LotteryUsersCtrl',
+      controllerUrl: 'app/controllers/ads/lotteryUsersCtrl',
+      title: '抽奖活动用户'
+    })).state('adsWinningHistories', angularAMD.route({
       // 中奖记录
       url: '/ads/winningHistories',
       templateUrl: 'static/view/admin/ads/ads_winninghistories.html',

+ 137 - 0
src/main/webapp/resources/js/admin/controllers/ads/lotteryUsersCtrl.js

@@ -0,0 +1,137 @@
+define([ 'app/app' ], function(app) {
+	//品牌审批
+	app.register.controller('LotteryUsersCtrl', ['$scope', 'ngTableParams', 'Lottery', 'BaseService', '$modal', function($scope, ngTableParams, Lottery, BaseService, $modal) {
+    BaseService.scrollBackToTop();
+
+		$scope.itemActive = 'all';
+		$scope.roleActive = 'all';
+    $scope.keyword = '';
+    $scope.role = '';
+    $scope.status = 100;
+
+    // 设置等级
+    $scope.setActive = function(state) {
+      if($scope.itemActive != state) {
+        $scope.itemActive = state;
+        if($scope.usersTableParams.page() == 1)
+          $scope.usersTableParams.reload();
+        else
+          $scope.usersTableParams.page(1);
+      }
+    };
+
+		var getState = function() {
+			var state = '';
+			switch($scope.itemActive) {
+				case 'all' : //全部
+					state = ''; break;
+				case 'bronze' ://青铜
+					state = '12wwwwwwww'; break;
+				case 'gold' : //黄金
+					state = '12wwwwwwwQ'; break;
+				case 'diamond' : //钻石
+					state = '12wwwwwwwZ'; break;
+				case 'king' : //王者
+					state = '12wwwwwwwX'; break;
+			}
+			return state;
+		};
+
+		// 设置角色
+    $scope.setRole = function(state) {
+      if($scope.roleActive != state) {
+        $scope.roleActive = state;
+        if($scope.usersTableParams.page() == 1)
+          $scope.usersTableParams.reload();
+        else
+          $scope.usersTableParams.page(1);
+      }
+    };
+
+    var getRole = function() {
+      var state = '';
+      switch($scope.roleActive) {
+        case '' : //全部
+          state = ''; break;
+        case 'NORMAL' ://普通
+          state = 'NORMAL'; break;
+        case 'CUSTOMER' : //买家
+          state = 'CUSTOMER'; break;
+        case 'SELLER' : //卖家
+          state = 'SELLER'; break;
+      }
+      return state;
+    };
+
+		var loadData = function() {
+      $scope.usersTableParams = new ngTableParams({
+        page : 1,
+        count : 10,
+      }, {
+        total : 0,
+        getData : function($defer, params) {
+          var param = BaseService.parseParams(params.url());
+          param.activityCode = '11wwwwwwww';
+          param.keyword = $scope.keyword;
+          param.role = getRole();
+          param.itemCode = getState();
+          param.status = $scope.status;
+          Lottery.getAllUsers(param, function(page) {
+            if (page) {
+              params.total(page.totalElements);
+              $defer.resolve(page.content);
+            }
+          });
+        }
+      });
+		};
+
+		loadData();
+
+		//根据订单号搜索
+		$scope.onSearch = function() {
+			$scope.usersTableParams.reload();
+		};
+
+    // 填写兑奖信息
+    $scope.openRedempte = function(id) {
+      var modalInstance = $modal.open({
+        templateUrl : 'static/view/admin/ads/redempte_modal.html',
+        controller : 'RedempteModalCtrl',
+        size : 'md',
+        resolve: {
+          winningHistoryId: function() {
+            return id;
+          }
+        }
+      });
+      modalInstance.opened.then(function(){
+
+      });
+      modalInstance.result.then(function(brand){
+        $scope.usersTableParams.reload();
+      }, function(reason){
+
+      });
+    };
+	}]);
+
+  //兑奖信息模态框的controller
+  app.register.controller('RedempteModalCtrl', ['$scope', '$modalInstance', 'Lottery', 'toaster', 'winningHistoryId', function($scope, $modalInstance, Lottery, toaster, winningHistoryId) {
+
+    $scope.cancel = function() {
+      $modalInstance.dismiss();
+    };
+
+    $scope.confirm = function() {
+      Lottery.redempte({id: winningHistoryId, userTel: $scope.userTel, code: $scope.code}, {}, function (data) {
+        if (data.code == 200) {
+          toaster.pop('info', '兑奖成功!');
+          $modalInstance.close();
+        } else {
+          toaster.pop('error', '兑奖失败:' + data.message);
+        }
+      });
+    };
+  }]);
+});

+ 5 - 1
src/main/webapp/resources/js/common/query/lottery.js

@@ -7,7 +7,11 @@ define([ 'ngResource'], function() {
       },
       redempte: {
         url: 'lottery/redempte',
-        method : 'PUT'
+        method: 'PUT'
+      },
+      getAllUsers: {
+        url: 'lottery/user/userinfos',
+        method : 'GET'
       }
     });
   }]);

+ 219 - 0
src/main/webapp/resources/view/admin/ads/ads_lotteryUsers.html

@@ -0,0 +1,219 @@
+<style>
+    .checkout-steps {
+        background-color: #fff;
+        padding: 0 15px;
+        border: 1px solid #f0f0f0;
+        width: 990px;
+        margin: 10px auto;
+    }
+
+    .checkout-steps .basetop {
+        margin-bottom: 20px;
+    }
+
+    .checkout-steps .titletip {
+        height: 35px;
+        line-height: 35px;
+    }
+
+    .checkout-steps .smalltitle {
+        font-size: 14px;
+        font-weight: bold;
+        float: left;
+    }
+
+    .checkout-steps .in-right {
+        color: #005ea7;
+        float: right;
+    }
+
+    .checkout-steps .item-select {
+        margin-left: 20px;
+        border: 2px solid #e4393c;
+        cursor: pointer;
+        padding: 6px 15px;
+    }
+
+    .checkout-steps .item-noselect {
+        margin-left: 20px;
+        border: 2px solid #ddd;;
+        cursor: pointer;
+        padding: 6px 15px;
+    }
+
+    .checkout-steps .item-noselect:hover {
+        border: 2px solid #e4393c;
+        cursor: pointer;
+        padding: 6px 15px;
+    }
+
+    .checkout-steps .hr {
+        border-bottom: 1px solid #e6e6e6;
+        height: 0;
+    }
+
+    .addr-detail {
+        float: left;
+        line-height: 24px;
+    }
+
+    .addr-detail span {
+        margin-left: 10px
+    }
+
+    .address_more {
+        position: relative;
+        line-height: 30px;
+        text-align: center;
+        border-top: 1px solid #DDD;
+    }
+
+    .address_more a {
+        position: relative;
+        display: inline-block;
+        margin-top: -1px;
+        height: 30px;
+        line-height: 30px;
+        padding: 0 10px 0 10px;
+        border-width: 1px;
+        border-style: solid;
+        border-color: #FFF #DDD #DDD;
+        background: #fff;
+        cursor: pointer;
+         -webkit-transition: border-color .15s ease-in-out;
+         -moz-transition: border-color .15s ease-in-out;
+        transition: border-color .15s ease-in-out;
+    }
+
+    .audit-failure-modal {
+        display: block !important;
+        position: fixed;
+        background-color: white;
+        opacity: 1;
+        width: 300px;
+        height: 140px;
+        top: 250px;
+        left: 554px;
+        font-family: "microsoft yahei";
+        border: 1px solid #d9d5ce;
+        z-index: 10;
+    }
+
+    .audit-failure-modal .title {
+        line-height: 31px;
+        height: 31px;
+        font-size: 14px;
+        background-color: #3a76e4;
+        color: white;
+        text-align: left;
+        font-family: microsoft yahei;
+        padding-left: 15px;
+    }
+
+    .audit-failure-modal .content input {
+        width: 80%;
+        height: 31px;
+        line-height: 31px;
+        border-radius: 4px;
+        margin-top: 10px;
+        margin-left: 28px;
+        margin-bottom: 15px;
+    }
+
+    .audit-failure-modal  .footer .confirm {
+        width: 90px;
+        padding: 5px 10px;
+        background-color: #3A76E4;
+        border: none;
+        color: white;
+        font-size: 14px;
+    }
+
+    .audit-failure-modal .footer .cancle-button {
+        width: 90px;
+        padding: 5px 10px;
+        background-color: #D9D5CE;
+        border: none;
+        color: #333333;
+        font-size: 14px;
+    }
+</style>
+<div class="row-fluid sortable">
+    <div class="box">
+        <div class="box-header well" data-original-title>
+            <i class="icon-user"></i> 中奖记录
+        </div>
+        <div class="box-content">
+            <!-- ng-tableStart -->
+            <div class="fullscreen" style="padding: 10px;">
+                <div class="row">
+                    <div class="col-sm-1">
+                        共<span class="badge">{{usersTableParams.total()}} </span>条
+                    </div>
+                    <div class="col-sm-4">
+                        <div class="btn-group" role="group" aria-label="...">
+                            <button type="button" class="btn btn-default" ng-class="{'btn-primary':itemActive=='all'}" ng-click="setActive('all')">全部</button>
+                            <button type="button" class="btn btn-default" ng-class="{'btn-primary':itemActive=='bronze'}" ng-click="setActive('bronze')">青铜</button>
+                            <button type="button" class="btn btn-default" ng-class="{'btn-primary':itemActive=='gold'}" ng-click="setActive('gold')">黄金</button>
+                            <button type="button" class="btn btn-default" ng-class="{'btn-primary':itemActive=='diamond'}" ng-click="setActive('diamond')">钻石</button>
+                            <button type="button" class="btn btn-default" ng-class="{'btn-primary':itemActive=='king'}" ng-click="setActive('king')">王者</button>
+                        </div>
+                    </div>
+                    <div class="col-sm-offset-1 col-sm-3">
+                        <div class="btn-group" role="group" aria-label="...">
+                            <button type="button" class="btn btn-default" ng-class="{'btn-primary':roleActive=='all'}" ng-click="setRole('all')">全部</button>
+                            <button type="button" class="btn btn-default" ng-class="{'btn-primary':roleActive=='NORMAL'}" ng-click="setRole('NORMAL')">普通</button>
+                            <button type="button" class="btn btn-default" ng-class="{'btn-primary':roleActive=='CUSTOMER'}" ng-click="setRole('CUSTOMER')">买家</button>
+                            <button type="button" class="btn btn-default" ng-class="{'btn-primary':roleActive=='SELLER'}" ng-click="setRole('SELLER')">卖家</button>
+                        </div>
+                    </div>
+                    <div class="col-sm-3">
+                        <div class="input-group">
+                            <input placeholder="请输入备注查询" class="form-control"
+                                   ng-model="keyword"  ng-search="onSearch()" size="16" type="text">
+                            <span class="input-group-btn">
+                                <button class="btn btn-primary" type="button" ng-click="onSearch()">搜索</button>
+                            </span>
+                        </div>
+                    </div>
+                </div>
+                <table ng-table="usersTableParams" class="table table-bordered table-striped" style="margin-top: 10px;">
+                    <thead>
+                    <tr>
+                        <th class="text-center" width="50">序号</th>
+                        <th class="text-center" width="auto">用户uu</th>
+                        <th class="text-center" width="75">用户名称</th>
+                        <th class="text-center" width="75">企业uu</th>
+                        <th class="text-center" width="100">企业名称</th>
+                        <th class="text-center" width="100">手机号</th>
+                        <th class="text-center" width="75">用户角色</th>
+                        <th class="text-center" width="100">当前等级</th>
+                        <th class="text-center" width="100">当前等级计数</th>
+                        <th class="text-center" width="100">参与活动时间</th>
+                        <th class="text-center" width="100">活动总询价数</th>
+                        <th class="text-center" width="75">活动总报价数</th>
+                        <th class="text-center" width="100">活动总交易额(¥)</th>
+                    </tr>
+                    </thead>
+                    <tbody class="text-center">
+                    <tr class="text-center" ng-repeat="user in $data">
+                        <td class="text-center">{{$index+1}}</td>
+                        <td class="text-center" ng-bind="user.userUU"></td>
+                        <td class="text-center" ng-bind="user.userName"></td>
+                        <td class="text-center" ng-bind="user.enUU"></td>
+                        <td class="text-center" ng-bind="user.enName"></td>
+                        <td class="text-center" ng-bind="user.userTel"></td>
+                        <td class="text-center"><span ng-show="user.role=='CUSTOMER'">买家</span><span ng-show="user.role=='SELLER'">卖家</span><span ng-show="user.role=='NORMAL'">普通</span></td>
+                        <td class="text-center" ng-bind="user.itemName"></td>
+                        <td class="text-center" ng-bind="user.itemCount"></td>
+                        <td class="text-center" ng-bind="user.createDate"></td>
+                        <td class="text-center" ng-bind="user.activityInquiryCount"></td>
+                        <td class="text-center" ng-bind="user.activityReplyCount"></td>
+                        <td class="text-center" ng-bind="user.activityTradeCount"></td>
+                    </tr>
+                    </tbody>
+                </table>
+            </div>
+        </div>
+    </div>
+</div>