分页显示解决Result set type is TYPE_FORWARD_ONLY

本文介绍了一种在JSP页面中实现数据库查询结果分页显示的方法。通过将查询结果存储在Result对象中并计算总页数,实现了动态跳转及数据显示。文章还解决了Resultset类型为TYPE_FORWARD_ONLY时使用last()方法导致的错误。

        jsp页面中,当进行数据库查询时,数据过多时,可用分页显示 。常用的方法是把所有结果放到Result对象当中,然后用Result.last()把指针移到未尾,然后对记录的数量用Result.getRow()得到。完了以后就可进行分页设计。当指定的页码显示记录数为Size,总的记录有Count条,则总的页码数为N=(Size+Count-1)/Size.

        整个页面如下:

<%@ page language="java" contentType="text/html; charset=gb2312" pageEncoding="gb2312"
  %>
<%@ page import="java.sql.*" %>
<%@ page import="java.util.*" %>
<%@ page import="java.text.*" %>
<%@ page import="java.util.Date" %>
<jsp:useBean id="ConnectBean" scope="page" class="dbpackage.conn"></jsp:useBean>
<%if(session.getAttribute("logined").equals("yes")){
%>
<% int intPageSize;
 int intRowCount=0;
 int intPageCount;
 int intPage;
 String strPage;
 intPageSize = 1;
 strPage = request.getParameter("page");
 if(strPage==null)
  intPage=1;
 else
 {
  intPage=Integer.parseInt(strPage);
    if(intPage<1)intPage=1;
 }

 String username=(String)session.getAttribute("username").toString();
 String sql = "select * from subject where subject_teacher ='"+username+"'";
 ResultSet rs=null;
 rs = ConnectBean.executeQuery(sql);
 //try
//{
rs.last();

intRowCount = rs.getRow();
//}
//catch(java.lang.Exception ex)
//{
//System.out.print(ex.getMessage());
//}

 intPageCount = (intRowCount+intPageSize-1)/intPageSize;
 if(intPage > intPageCount)intPage = intPageCount;
 
 %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
 <title>登录页面</title>
 </head>
 <body>
  <p align="center"><img width="540" height="150" border="0" src="../image/222.JPG"></p><div align="center"><div align="left">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;
    <%=session.getAttribute("username") %>老 师<br></div>
  </div>
   <div align="right"><form method="post" action="add_subject.jsp">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
    <input type="submit" name="add_subject" value="添加题目"></form></div><div align="right"><form method="post" action="../logout.jsp"> 
    <input type="submit" name="logout" value="注  销"></form></div>
  <form method="post" action="teacher_manage.jsp">
   第<%=intPage%>页 共<%=intPageCount%>页
   <%if(intPage <intPageCount){%>
    <a href = "teacher_manage.jsp?page=<%=intPage+1%>">下一页</a>
   <%}%>
   
   <%if(intPage > 1){%>
    <a href = "teacher_manage.jsp?page=<%=intPage-1%>">上一页</a>
   <%}%>
   转到第:<input type="text" name = "page" size = "8">页
   <span><input type = "submit" name ="1"vlaue = "GO"  ></span>
  </form>
  <table width="800" border="2">
   <tbody >
   <tr>
    <td width="50"align="center">序 号</td>
    <td width="50"align="center">状 态</td>
    <td width="250" align="center">题  目</td>
    <td width="50" align="center">老 师</td>
    <td width="50" align="center">选  题</td>
    <td width="150" align="center">内  容</td>
    <td width="100" align="center">操  作</td>
   </tr>
   <%
   if( intPageCount > 0)
   {
    rs.absolute((intPage-1)*intPageSize+1); 
    int xuhao=0;
    int i=0;
    while(i<intPageSize&&!rs.isAfterLast())
    {
   
    int subject_id = rs.getInt("subject_id");
    String subject_name = rs.getString("subject_name");
    String subject_teacher = rs.getString("subject_teacher");
    String subject_student = "";
    subject_student=rs.getString("subject_student");
    rs.next();
    i++;
   %>
  <tr>
   <td width="50"align="center"><%=Integer.toString(xuhao++)%></td>
   <td width="50"align="center">
   <%if(!(subject_student==null))
   { %>
    <input type="radio" checked="true" value="1" >
   <%}
   else{%>
    <input type="radio" value="1" >
   <%}%></td>
   <td width="250" align="center"><%=subject_name%></td>
   <td width="50" align="center"><%=subject_teacher%></td>
   <td width="50" align="center"><%=subject_student%><%=subject_id%></td>
   <td width="150" align="center"><%=subject_name%></td>
   <td width="100" align="center"><a href="change.jsp?subject_id=<%=subject_id%>">修改</a> _fcksavedurl=""change.jsp?subject_id=<%=subject_id%>">修改</a>" _fcksavedurl=""change.jsp?subject_id=<%=subject_id%>">修改</a>" <a href="delete.jsp?subject_id=<%=subject_id%>">删除</a></td>
   </tr>
   <%} %>
  </tbody></table>
 </body>
</html>
<%}}%>

        结果在控制台显示Result set type is TYPE_FORWARD_ONLY的错误信息。

查看数据库连接的Bean:dbpackage.conn,里面对Statement对象的创建是默认方。这样在返回的 Statement 对象创建的结果集在默认情况下类型为 TYPE_FORWARD_ONLY,并带有 CONCUR_READ_ONLY 并发级别。因此不允许用last()方法,一旦调用这个方法就会出在上述错误。

      对statement创建修改如下:Statement stmt = connect.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);

再运行程序,分页成功实现。

<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.htsc.pos.api.ta.forwardOrder.mapper.PosDsOrderForwardMapper"> <!-- 基础结果映射 --> <resultMap id="PosDsOrderForwardMap" type="com.htsc.pos.api.ta.forwardOrder.entity.PosDsOrderForward"> <id column="id" property="id" jdbcType="NUMERIC"/> <result column="manager_id" property="managerId" jdbcType="NUMERIC"/> <result column="business_date" property="businessDate" jdbcType="TIMESTAMP"/> <result column="prdt_code" property="prdtCode" jdbcType="VARCHAR"/> <result column="prdt_name" property="prdtName" jdbcType="VARCHAR"/> <result column="inv_name" property="invName" jdbcType="VARCHAR"/> <result column="inv_cust_type" property="invCustType" jdbcType="NUMERIC"/> <result column="inv_cert_type" property="invCertType" jdbcType="VARCHAR"/> <result column="inv_cert_num" property="invCertNum" jdbcType="VARCHAR"/> <result column="business_type" property="businessType" jdbcType="NUMERIC"/> <result column="trading_amount" property="tradingAmount" jdbcType="NUMERIC"/> <result column="trading_share_num" property="tradingShareNum" jdbcType="NUMERIC"/> <result column="charge_discount" property="chargeDiscount" jdbcType="VARCHAR"/> <result column="creator" property="creator" jdbcType="VARCHAR"/> <result column="creator_name" property="creatorName" jdbcType="VARCHAR"/> <result column="create_time" property="createTime" jdbcType="TIMESTAMP"/> <result column="modifier" property="modifier" jdbcType="VARCHAR"/> <result column="modifier_name" property="modifierName" jdbcType="VARCHAR"/> <result column="modify_time" property="modifyTime" jdbcType="TIMESTAMP"/> <result column="state" property="state" jdbcType="NUMERIC"/> <result column="trading_account" property="tradingAccount" jdbcType="VARCHAR"/> <result column="is_valid" property="isValid" jdbcType="NUMERIC"/> <result column="cool_off_period_flag" property="coolOffPeriodFlag" jdbcType="NUMERIC"/> <result column="request_no" property="requestNo" jdbcType="VARCHAR"/> <result column="redeem_type" property="redeemType" jdbcType="NUMERIC"/> <result column="charge_type" property="chargeType" jdbcType="NUMERIC"/> <result column="transaction_cost" property="transactionCost" jdbcType="NUMERIC"/> <result column="achievement_fee_discount" property="achievementFeeDiscount" jdbcType="VARCHAR"/> <result column="investor_id" property="investorId" jdbcType="NUMERIC"/> <result column="send_szt_flag" property="sendSztFlag" jdbcType="NUMERIC"/> </resultMap> <!-- 基础列名 --> <sql id="Base_Column_List"> id, manager_id, business_date, prdt_code, prdt_name, inv_name, inv_cust_type, inv_cert_type, inv_cert_num, business_type, trading_amount, trading_share_num, charge_discount, creator, creator_name, create_time, modifier, modifier_name, modify_time, state, trading_account, is_valid, cool_off_period_flag, request_no, redeem_type, charge_type, transaction_cost, achievement_fee_discount, investor_id </sql> <!-- 根据主键查询 --> <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="PosDsOrderForwardMap"> SELECT <include refid="Base_Column_List"/> FROM POS_DS_ORDER_FORWARD WHERE id = #{id,jdbcType=NUMERIC} </select> <!-- 查询条件对象 --> <select id="getPosDsOrderForwardList" parameterType="com.htsc.pos.api.ta.forwardOrder.req.PosDsOrderForwardReq" resultMap="PosDsOrderForwardMap"> SELECT <include refid="Base_Column_List"/> FROM POS_DS_ORDER_FORWARD WHERE <if test="managerId != null"> AND MANAGER_ID = #{managerId} </if> <if test="prdtCode != null"> AND PRDT_CODE = #{prdtCode} </if> <if test="invName != null"> AND INV_NAME LIKE '%'||#{invName}||'%' </if> <if test="businessType != null"> AND BUSINESS_TYPE = #{businessType} </if> <if test="state != null"> AND STATE = #{state} </if> <if test="requestNo != null"> AND REQUEST_NO = #{requestNo} </if> <if test="investorId != null"> AND INVESTOR_ID = #{investorId} </if> <if test="sendSztFlag != null"> AND SEND_SZT_FLAG = #{sendSztFlag} </if> <if test="isValid != null"> AND IS_VALID = #{isValid} </if> ORDER BY ID DESC </select> <!-- 插入记录 --> <insert id="insert" parameterType="com.htsc.pos.api.ta.forwardOrder.entity.PosDsOrderForward"> <selectKey keyProperty="id" resultType="java.lang.Long" order="BEFORE"> SELECT SEQ_POS_DS_ORDER_FORWARD.NEXTVAL FROM DUAL </selectKey> INSERT INTO POS_DS_ORDER_FORWARD ( id, manager_id, business_date, prdt_code, prdt_name, inv_name, inv_cust_type, inv_cert_type, inv_cert_num, business_type, trading_amount, trading_share_num, charge_discount, creator, creator_name, create_time, modifier, modifier_name, modify_time, state, trading_account, is_valid, cool_off_period_flag, request_no, redeem_type, charge_type, transaction_cost, achievement_fee_discount, investor_id ) VALUES ( #{id,jdbcType=NUMERIC}, #{managerId,jdbcType=NUMERIC}, #{businessDate,jdbcType=TIMESTAMP}, #{prdtCode,jdbcType=VARCHAR}, #{prdtName,jdbcType=VARCHAR}, #{invName,jdbcType=VARCHAR}, #{invCustType,jdbcType=NUMERIC}, #{invCertType,jdbcType=VARCHAR}, #{invCertNum,jdbcType=VARCHAR}, #{businessType,jdbcType=NUMERIC}, #{tradingAmount,jdbcType=NUMERIC}, #{tradingShareNum,jdbcType=NUMERIC}, #{chargeDiscount,jdbcType=VARCHAR}, #{creator,jdbcType=VARCHAR}, #{creatorName,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP}, #{modifier,jdbcType=VARCHAR}, #{modifierName,jdbcType=VARCHAR}, #{modifyTime,jdbcType=TIMESTAMP}, #{state,jdbcType=NUMERIC}, #{tradingAccount,jdbcType=VARCHAR}, #{isValid,jdbcType=NUMERIC}, #{coolOffPeriodFlag,jdbcType=NUMERIC}, #{requestNo,jdbcType=VARCHAR}, #{redeemType,jdbcType=NUMERIC}, #{chargeType,jdbcType=NUMERIC}, #{transactionCost,jdbcType=NUMERIC}, #{achievementFeeDiscount,jdbcType=VARCHAR}, #{investorId,jdbcType=NUMERIC} ) </insert> <!-- 根据主键ID更新记录 --> <update id="updateById" parameterType="com.htsc.pos.api.ta.forwardOrder.entity.PosDsOrderForward"> UPDATE POS_DS_ORDER_FORWARD <set> <if test="managerId != null">manager_id = #{managerId,jdbcType=NUMERIC},</if> <if test="businessDate != null">business_date = #{businessDate,jdbcType=TIMESTAMP},</if> <if test="prdtCode != null">prdt_code = #{prdtCode,jdbcType=VARCHAR},</if> <if test="prdtName != null">prdt_name = #{prdtName,jdbcType=VARCHAR},</if> <if test="invName != null">inv_name = #{invName,jdbcType=VARCHAR},</if> <if test="invCustType != null">inv_cust_type = #{invCustType,jdbcType=NUMERIC},</if> <if test="invCertType != null">inv_cert_type = #{invCertType,jdbcType=VARCHAR},</if> <if test="invCertNum != null">inv_cert_num = #{invCertNum,jdbcType=VARCHAR},</if> <if test="businessType != null">business_type = #{businessType,jdbcType=NUMERIC},</if> <if test="tradingAmount != null">trading_amount = #{tradingAmount,jdbcType=NUMERIC},</if> <if test="tradingShareNum != null">trading_share_num = #{tradingShareNum,jdbcType=NUMERIC},</if> <if test="chargeDiscount != null">charge_discount = #{chargeDiscount,jdbcType=VARCHAR},</if> <if test="modifier != null">modifier = #{modifier,jdbcType=VARCHAR},</if> <if test="modifierName != null">modifier_name = #{modifierName,jdbcType=VARCHAR},</if> <if test="modifyTime != null">modify_time = #{modifyTime,jdbcType=TIMESTAMP},</if> <if test="state != null">state = #{state,jdbcType=NUMERIC},</if> <if test="tradingAccount != null">trading_account = #{tradingAccount,jdbcType=VARCHAR},</if> <if test="isValid != null">is_valid = #{isValid,jdbcType=NUMERIC},</if> <if test="coolOffPeriodFlag != null">cool_off_period_flag = #{coolOffPeriodFlag,jdbcType=NUMERIC},</if> <if test="requestNo != null">request_no = #{requestNo,jdbcType=VARCHAR},</if> <if test="redeemType != null">redeem_type = #{redeemType,jdbcType=NUMERIC},</if> <if test="chargeType != null">charge_type = #{chargeType,jdbcType=NUMERIC},</if> <if test="transactionCost != null">transaction_cost = #{transactionCost,jdbcType=NUMERIC},</if> <if test="achievementFeeDiscount != null">achievement_fee_discount = #{achievementFeeDiscount,jdbcType=VARCHAR},</if> <if test="investorId != null">investor_id = #{investorId,jdbcType=NUMERIC},</if> <if test="sendSztFlag != null">send_szt_flag = #{sendSztFlag,jdbcType=NUMERIC},</if> </set> WHERE id = #{id,jdbcType=NUMERIC} </update> </mapper> package com.htsc.pos.api.ta.forwardOrder.req; import lombok.Getter; import lombok.Setter; import lombok.ToString; import java.io.Serializable; import java.math.BigDecimal; import java.util.Date; /** * 【申赎转发】订单查询参数 * * @author 022686 * @date 2025/11/9 */ @Getter @Setter @ToString public class PosDsOrderForwardReq implements Serializable { private static final long serialVersionUID = -1651437776206088132L; /** * 所属管理人 */ private Long managerId; /** * 申请日期 */ private Date businessDate; /** * 产品代码 */ private String prdtCode; /** * 产品名称 */ private String prdtName; /** * 客户姓名 */ private String invName; /** * 客户类别 */ private Integer invCustType; /** * 客户证件类型 */ private String invCertType; /** * 客户证件号码 */ private String invCertNum; /** * 业务类型=>0:认购;1:申购;2:赎回 */ private Integer businessType; /** * 交易金额 */ private BigDecimal tradingAmount; /** * 交易份额 */ private BigDecimal tradingShareNum; /** * 巨额赎回处理方式 * 0-放弃超额部分 * 1-继续赎回 */ private Integer mintRedeemType; /** * 手续费折扣率 */ private String chargeDiscount; /** * 订单创建人 */ private String creator; /** * 订单创建人姓名 */ private String creatorName; /** * 订单创建时间 */ private Date createTime; /** * 订单修改人 */ private String modifier; /** * 订单修改人姓名 */ private String modifierName; /** * 订单修改时间 */ private Date modifyTime; /** * 状态=>0:受理中;4:已撤销交易;5:TA确认成功;6:TA确认失败 * 与直销订单有所区别,因为转发订单,TA不在我们这里做,接收到订单即认为受理 */ private Integer state; /** * 交易账号 */ private String tradingAccount; /** * 是否有效=>0:无效;1:有效 */ private Integer isValid; /** * 是否需冷静期:0.不需要;1.需要; */ private Integer coolOffPeriodFlag; /** * 流水号 */ private String requestNo; /** * 赎回方式 1金额申请2份额申请3至指定金额业务申请 */ private Integer redeemType; /** * 收费类型:1指定折扣2指定费用 */ private Integer chargeType; /** * 交易费用 */ private BigDecimal transactionCost; /** * 业绩报酬折扣 */ private String achievementFeeDiscount; /** * 机构投资者Id */ private Long investorId; /** * 是否深证通发送完成 0-未发送,1-已发送 */ private Integer sendSztFlag; } 帮我检查代码
最新发布
11-10
参考我的调查问卷表结构 把下方会员列表方法 , 改成 问卷记录 , 还有一个问卷详情 需要知道他答的是什么 , 还有导出的功能 需要适配一下 CREATE TABLE `lb_wenjuan_options` ( `id` int(11) NOT NULL AUTO_INCREMENT, `question_id` int(11) NOT NULL COMMENT '所属问题ID', `option_text` varchar(255) NOT NULL COMMENT '选项文本', `sort_order` int(11) DEFAULT '0' COMMENT '排序字段', `is_text_input` tinyint(1) DEFAULT '0' COMMENT '是否允许文本输入(对应"其他"选项)', PRIMARY KEY (`id`), KEY `idx_question` (`question_id`) ) ENGINE=InnoDB AUTO_INCREMENT=104 DEFAULT CHARSET=utf8mb4; CREATE TABLE `lb_wenjuan_questions` ( `id` int(11) NOT NULL AUTO_INCREMENT, `survey_id` int(11) NOT NULL COMMENT '所属问卷ID', `title` varchar(255) NOT NULL COMMENT '问题标题', `type` enum('radio','checkbox') NOT NULL COMMENT '问题类型', `min_select` tinyint(4) DEFAULT '1' COMMENT '最少选择数(仅checkbox)', `sort_order` int(11) DEFAULT '0' COMMENT '排序字段', PRIMARY KEY (`id`), KEY `idx_survey` (`survey_id`) ) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8mb4; CREATE TABLE `lb_wenjuan_submissions` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL COMMENT '用户ID', `survey_id` int(11) NOT NULL DEFAULT '1' COMMENT '问卷ID(当前固定为1)', `submit_time` int(11) NOT NULL COMMENT '提交时间戳', PRIMARY KEY (`id`), UNIQUE KEY `unique_submission` (`user_id`,`survey_id`,`submit_time`) USING BTREE, KEY `idx_user_submit` (`user_id`,`submit_time`) ) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4; CREATE TABLE `lb_wenjuan_text_answers` ( `id` int(11) NOT NULL AUTO_INCREMENT, `question_id` int(11) NOT NULL COMMENT '关联的问题ID', `option_id` int(11) NOT NULL COMMENT '关联的选项ID(通常是"其他"选项)', `user_id` varchar(50) NOT NULL COMMENT '用户ID', `submission_id` int(11) NOT NULL DEFAULT '0', `content` text NOT NULL COMMENT '用户填写的文本内容', `create_time` int(11) DEFAULT '0' COMMENT '创建时间', PRIMARY KEY (`id`), KEY `idx_submission` (`submission_id`) ) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8mb4 COMMENT='填空题答案表'; CREATE TABLE `lb_wenjuan_user_answers` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id` varchar(64) NOT NULL COMMENT '用户ID', `submission_id` int(11) NOT NULL DEFAULT '0', `question_id` int(11) NOT NULL COMMENT '问题ID', `option_id` int(11) NOT NULL COMMENT '选项ID', `created_at` int(11) DEFAULT '0', PRIMARY KEY (`id`), UNIQUE KEY `uk_user_question` (`user_id`,`question_id`,`option_id`), KEY `idx_question` (`question_id`), KEY `idx_submission` (`submission_id`) ) ENGINE=InnoDB AUTO_INCREMENT=136 DEFAULT CHARSET=utf8mb4; /** * 会员主表列表 * @author 似水星辰 [2630481389@qq.com] * @return mixed * @throws \think\exception\DbException */ public function index() { cookie('__forward__', $_SERVER['REQUEST_URI']); // 查询 $map = request()->param(); $name = isset($map['name']) ? $map['name'] : ''; $user_type = isset($map['user_type']) ? $map['user_type'] : 'all'; $sex = isset($map['sex']) ? $map['sex'] : 'all'; $mobile = isset($map['mobile']) ? $map['mobile'] : ''; $create_time = isset($map['create_time']) ? $map['create_time'] : 0; $by = isset($map['by']) ? $map['by'] : ''; $orders = isset($map['order']) ? $map['order'] : ''; $where = ' is_delete = 0 '; $where .= ' and unsubscribe_time = 0 ';//@author Jin <1508215182@qq.com> if ($name) { $where .= " and (user_name like '%{$name}%' or user_nickname like '%{$name}%') "; } if ($mobile) { $where .= " and mobile like '%{$mobile}%' "; } if ($user_type != 'all') { $where .= " and user_type ={$user_type} "; } if ($create_time) { $create_time = explode(' - ', $create_time); $start_time = strtotime($create_time[0].' 00:00:00'); $end_time = strtotime($create_time[1].' 23:59:59'); $where .= " and create_time >= $start_time and create_time <= $end_time "; } if ($sex != 'all') { $where .= " and sex ={$sex} "; } $has_id = isset($map['id']) ? $map['id'] : 0; if($has_id){ if(is_numeric($has_id)){ $where .= " AND id = ".$has_id; }else{ $this->error('ID值请输入数字'); } } $order = ['id' => 'desc']; if ($by && $orders) { $order = [$orders => $by]; } $search_fields = [ ['id', lang('用户ID'), 'text'], ['name', lang('昵称'), 'text'], ['mobile', lang('手机号'), 'text'], //会员类型0普通会员1白银会员2黄金会员 // ['user_type', lang('会员类型'), 'select', '', ['all' => lang('全部'), '0' => lang('普通会员'), '1' => lang('白银会员'), '2' => lang('黄金会员')]], ['sex', lang('性别'), 'select', '', ['all' => lang('全部'), '1' => lang('男'), '2' => lang('女')]], ['create_time', lang('注册时间'), 'daterange'], ]; //导出excel if (isset($map['is_import'])) { set_time_limit(0); ini_set('memory_limit', '2048M'); if (isset($map['ids']) && !empty($map['ids'])) { $where .= " and id in ({$map['ids']}) "; } $list = UserModel::where($where)->field("id,user_nickname,sex,mobile,user_money,score,create_time")->order($order)->select(); $excelData = $_excelData = []; $shop_res = Db::name("user_zx")->where("type",1)->column("user_id,shop_name"); // dump($shop_res);die; foreach ($list as $v) { // $shop_name = ; $is_store = !empty($shop_res[$v['id']]) ? $shop_res[$v['id']] : '-'; $excelData[] = [ 'user_nickname' => $v['user_nickname'], 'sex' => $this->getUserSex($v['sex']), 'mobile' => $v['mobile'], 'user_money' => $v['user_money'], 'score' => $v['score'], 'create_time' => $v['create_time'], 'is_store' => $is_store ]; } unset($v); $_excelData[0]['list'] = $excelData; $xlsName = '会员信息-' . date("Y-m-d H:i:s", time()); $xlsCell = [ ['user_nickname', lang('昵称')], ['sex', lang('性别')], ['mobile', lang('手机号')], ['birthday', lang('生日')], ['is_store', lang('是否商户(- / 商户名称)')], ['score', '会员积分 '], ['create_time', lang('注册时间')] ]; $excelData = array_values($_excelData); $this->exportExcel($xlsName, $xlsCell, $excelData); } // 数据列表 $data_list = UserModel::where($where)->order($order)->paginate(); foreach ($data_list as $k => &$v) { if (!$v['head_img']) { // $data_list[$k]['head_img'] = Db::name("admin_config")->where('name', 'web_site_logo')->value('value'); $v['head_img'] = get_file_url($v['head_img']); } // $v['order_num'] = Order::where([ // 'user_id' => $v['id'] // ])->count(); // $order_time = Order::where([ // 'user_id' => $v['id'] // ])->max('create_time'); // $v['order_time'] = $order_time ? date('Y-m-d H:i:s', $order_time) : ''; $shop_name = Db::name("user_zx")->where("user_id",$v['id'])->where("type",1)->value("shop_name"); $v['is_store'] = $shop_name ? $shop_name : ' - '; // $v['birthday'] = date('Y-m-d', $v['birthday']); } $fields = [ ['id', 'ID'], ['right_button', lang('操作'), 'btn'], ['head_img', lang('头像'), 'picture'], ['user_nickname', lang('昵称')], ['is_store', lang('是否商户')], // ['user_nickname', lang('昵称'), 'callback', function ($value, $data) { // return // "<a href=" . url('info', ['ids' => $data['id'], 'layer' => 1]) // . " class='mr5 comment' data-toggle='dialog-right'>{$value}</a>"; // }, '__data__'], ['sex', lang('性别'), 'callback', function ($value) { return $this->getUserSex($value); }], ['mobile', lang('手机号')], // ['birthday', lang('生日')], ['score', lang('会员积分'), 'text', '', '', '', 'user'], // ['count_score', lang('累计获取积分')], // ['order_num', lang('下单次数')], // ['order_time', lang('最后一次下单时间')], ['status', lang('状态'), 'status'], ['create_time', lang('注册时间')], ]; //是否显示导出excel按钮 1显示 $this->assign('excel_show', 1); if (count($data_list) <= 0) { $this->bottom_button_select = []; } return Format::ins()//实例化 ->setOrder('user_money,score,total_consumption_money,count_score') ->addColumns($fields)//设置字段 ->setTopSearch($search_fields) ->setTopButtons($this->top_button=[]) ->hideCheckbox() ->setRightButtons($this->right_button, ['delete']) ->setData($data_list)//设置数据 ->fetch();//显示 }
10-19
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值