thinkPHP交易详情查询功能详解


Posted in PHP onDecember 02, 2016

本文实例分析了thinkPHP交易详情查询功能。分享给大家供大家参考,具体如下:

交易详情

一般都是按月的,包含,交易日期,交易金额,交易状态(可有可无)
总交易额等等。
如果数据多的话,最好能够分页。
最好能够查询具体的哪一个商户。

1.模拟sql实现查询功能

SELECT a.id as user_id,a.username,b.name as store_name,c.id as order_id,c.price,c.paytime,c.sendtime,c.receivetime FROM sh_user a
  LEFT JOIN sh_store b on a.id = b.user_id
  LEFT JOIN sh_order c ON b.id = c.store_id
  WHERE a.opener_id = 1 and a.`status` = 1 and c.status = 1 ORDER BY c.id desc;
SELECT count(b.id) as count ,sum(c.price) as total_price FROM sh_user a
  LEFT JOIN sh_store b on a.id = b.user_id
  LEFT JOIN sh_order c ON b.id = c.store_id
  WHERE a.opener_id = 1 and a.`status` = 1 and c.status = 1;

sql查询出来了,基本上就搞定了,剩下的就是用php,thinkphp实现这个查询功能,加入一些逻辑与条件。

// 商户交易
public function trade(){
  if($type = $this->_request('type','trim')){
   $s_year = $this->_request('s_year','trim');
   $s_month = $this->_request('s_month','trim');
   $s_user_id = $this->_request('s_user_id','trim,intval');
   $this->assign('s_user_id',$s_user_id);
   if($type == 'last'){ // 获取上一月
    if($s_month==1){
     $useYear = $s_year-1;
     $useMonth = 12;
    }else{
     $useYear = $s_year;
     $useMonth = $s_month-1;
    }
   }
   if($type == 'next'){ // 获取下一月
    if($s_month==12){
     $useYear = $s_year+1;
     $useMonth = 1;
    }else{
     $useYear = $s_year;
     $useMonth = $s_month+1;
    }
   }
   if ($type == 'selectuser'){
    $useYear = $s_year;
    $useMonth = $s_month;
   }
  }else{
   // 获取当前年 月
   $useYear = date('Y'); 
   $useMonth = date('m'); 
  }
  $this->assign('s_year',$useYear);
  $this->assign('s_month',$useMonth);
  $b_time = strtotime($useYear.'-'.$useMonth.'-'.'1');
  $e_time = strtotime($useYear.'-'.$useMonth.'-'.date('t',strtotime($b_time)).' 23:59:59');
  if(isset($s_user_id) && $s_user_id > 0){
   $where['a.id'] = $s_user_id;
  }
  $where['a.opener_id'] = $this->opener_id;
  $where['a.status'] = 1; // 合法的用户
  $where['c.status'] = 1; // 合法的订单
  $where['c.paytime'] = array(array('gt',$b_time),array('lt',$e_time),'and');
  $count_and_totalprice = M()->table('sh_user a')
        ->join('sh_store b on a.id = b.user_id')
        ->join('sh_order c on b.id = c.store_id')
        ->where($where)
        ->field('count(b.id) as count ,sum(c.price) as totalprice')
        ->find();
  $count  = $count_and_totalprice['count'];
  $totalprice = $count_and_totalprice['totalprice'] ? $count_and_totalprice['totalprice'] : 0;
  $Page  = new Page($count, 10);
  $list  = M()->table('sh_user a')
     ->join('sh_store b on a.id = b.user_id')
     ->join('sh_order c on b.id = c.store_id')
     ->where($where)
     ->order('c.id desc')
     ->limit($Page->firstRow.','.$Page->listRows)
     ->field('a.id as user_id,a.username,b.name as store_name,c.id as order_id,c.price,c.paytime,c.sendtime,c.receivetime')
     ->select();
  foreach ($list as $k => $v) {
   if($v['sendtime'] == 0 && $v['receivetime'] == 0){
    $list[$k]['progress'] = '1'; // 已付款,待发货
   }
   if($v['sendtime'] > 0 && $v['receivetime'] == 0){
    $list[$k]['progress'] = '2'; // 已发货,待签收
   }
   if($v['sendtime'] > 0 && $v['receivetime'] > 0){
    $list[$k]['progress'] = '3'; // 交易完成
   }
  }
  // 获取拓展员用户
  $user_list = M('User')
      ->where(array('opener_id'=>$this->opener_id))
      ->field('id,username')
      ->select();
  $this->assign('user_list',$user_list);
  $this->assign('totalprice',$totalprice);
  $this->assign('page',$Page->show());
  $this->assign('list', $list);
  $this->display();
}

html部分

<include file="Public:head" title="交易详情" />
<style>
.top {
  background-color: #eee;
  height: 50px;
  line-height: 50px;
  font-size: 18px;
  border-bottom: #ddd 1px solid;
  margin-bottom: -1px;
}
.list-group{
  border: 1px solid #DDDDDD;
}
.list-group .list-group-item {
  text-align: left;
  line-height: 25px;
  border: none;
  background-color: #F9F9F9;
  font-size: 14px;
}
#select-date {
  padding: 0px 10px;
}
#select-date .date-txt {
  font-size: 18px;
}
#total {
  width: 140px;
  height: 140px;
  background-color: #EC6C00;
  margin: auto;
}
#total .money-txt {
  color: white;
  padding-top: 10px;
}
#datalist {
  margin-top: 30px;
}
#relief .form-control{
  margin-top: 10px;
  margin-bottom: 10px;
  /*background-color: #FFCE42;*/
}
.page{
  margin-right: 10px;
  margin-bottom: 20px;
}
.table th {
  color: #C4C4C4;
}
.table tbody tr td+td+td {
  color: #D3964F;
}
</style>
<script type="text/javascript">
function lastMonth(){
  todo('last');
}
function nextMonth(){
  todo('next');
}
function selectUser(){
  todo('selectuser');
}
function todo(type){
  var s_year = $('#s_year').val();
  var s_month = $('#s_month').val();
  var s_user_id = $('#s_user_id').val();
  window.location.href="{sh::U('User/trade')}&s_year="+s_year+"&s_month="+s_month+"&s_user_id="+s_user_id+"&type="+type;
}
</script>
<body>
  <div data-example-id="list-group-btns" class="bs-example">
    <div id="select-date">
      <ul class="pager">
        <li class="previous"><a onclick="lastMonth();"><span aria-hidden="true">←</span> </a></li>
        <span class="date-txt"><strong>{sh:$s_year}.{sh:$s_month}</strong>
        <present name="paymentData"><span class="glyphicon glyphicon-ok-sign" aria-hidden="true"></span></present>
        </span>
        <input type="text" id="s_year" value="{sh:$s_year}" hidden="hidden">
        <input type="text" id="s_month" value="{sh:$s_month}" hidden="hidden">
        <li class="next"><a onclick="nextMonth();"><span aria-hidden="true">→</span></a></li>
      </ul>
    </div>
    <div id="relief">
      <select id="s_user_id" onchange="selectUser();" class="form-control btn-success">
        <option value="">全部商户</option>
        <volist name="user_list" id="vo">
          <option value="{sh:$vo.id}" <eq name="vo.id" value="$s_user_id">selected="selected"</eq>>{sh:$vo.username}</option>
        </volist>
      </select>
    </div>
    <div id="total" class="img-circle">
      <div class="text-center money-txt">
        <h3>总交易金额</h3>
        <h2>¥{sh:$totalprice}</h2>
      </div>
    </div>
    <div id="datalist">
      <table class="table table-striped">
        <thead>
          <tr>
            <th>商户</th>
            <th>日期</th>
            <th>交易金额</th>
            <!-- <th>状态</th> -->
          </tr>
        </thead>
        <tbody>
        <empty name="list"><tr><td class="text-center" colspan="4">暂无数据</td></tr></empty>
        <volist name="list" id="vo">
          <tr>
            <td>{sh:$vo.username}</td>
            <td>{sh:$vo.paytime|date="Y-m-d H:i",###}</td>
            <td>{sh:$vo.price}</td>
            <!-- <td>
            <if condition="$vo.progress eq 1"><span class="text-primary">待发货</span>
            <elseif condition="$vo.progress eq 2"/><span class="text-danger">待签收</span>
            <elseif condition="$vo.progress eq 3"/><span class="text-success"><strong>已完成</strong></span>
            </if>
            </td> -->
          </tr>
        </volist>
        </tbody>
      </table>
      <div class="page text-right">
        {sh:$page}
      </div>
    </div>
</body>
</html>

效果,多看看别人的设计,多学学,最重要的就是界面展示,一切的数据都是基于几面展示,所以先确定好需要什么数据,然后获取他们。

thinkPHP交易详情查询功能详解

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

PHP 相关文章推荐
PHP.MVC的模板标签系统(二)
Sep 05 PHP
php调用mysql数据 dbclass类
May 07 PHP
PHP乱码问题,UTF-8乱码常见问题小结
Apr 09 PHP
php写的带缓存数据功能的mysqli类
Sep 06 PHP
ubuntu下编译安装xcache for php5.3 的具体操作步骤
Jun 18 PHP
smarty内置函数capture用法分析
Jan 22 PHP
php递归调用删除数组空值元素的方法
Apr 28 PHP
PHP检测用户是否关闭浏览器的方法
Feb 14 PHP
PHP创建多级目录的两种方法
Oct 28 PHP
PHP双向链表定义与用法示例
Jan 31 PHP
thinkphp框架表单数组实现图片批量上传功能示例
Apr 04 PHP
PHP数组访问常用方法解析
Sep 05 PHP
php变量与数组相互转换的方法(extract与compact)
Dec 02 #PHP
php图像处理函数imagecopyresampled用法详解
Dec 02 #PHP
PHP面向对象继承用法详解(优化与减少代码重复)
Dec 02 #PHP
PHP面向对象程序设计高级特性详解(接口,继承,抽象类,析构,克隆等)
Dec 02 #PHP
PHP面向对象程序设计之命名空间与自动加载类详解
Dec 02 #PHP
PHP面向对象程序设计之类与反射API详解
Dec 02 #PHP
PHP面向对象程序设计之对象生成方法详解
Dec 02 #PHP
You might like
PHP中常用数组处理方法实例分析
2008/08/30 PHP
php ob_flush,flush在ie中缓冲无效的解决方法
2010/05/09 PHP
JavaScript 判断浏览器类型及版本
2009/02/21 Javascript
用JSON做数据传输格式中的一些问题总结
2011/12/21 Javascript
JavaScript起点(严格模式深度了解)
2013/01/28 Javascript
JS操作select下拉框动态变动(创建/删除/获取)
2013/06/02 Javascript
JS中for循序中延迟加载动态效果的具体实现
2013/08/18 Javascript
jquery插件开发之实现jquery手风琴功能分享
2014/03/10 Javascript
有效提高JavaScript执行效率的几点知识
2015/01/31 Javascript
JavaScript多图片上传案例
2015/09/28 Javascript
分享10个优化代码的CSS和JavaScript工具
2016/05/11 Javascript
js获取对象、数组的实际长度,元素实际个数的实现代码
2016/06/08 Javascript
D3.js实现饼状图的方法详解
2016/09/21 Javascript
深入理解JS继承和原型链的问题
2016/12/17 Javascript
vue中将网页打印成pdf实例代码
2017/06/15 Javascript
认识less和webstrom的less配置方法
2017/08/02 Javascript
Angular2的管道Pipe的使用方法
2017/11/07 Javascript
简单的Vue异步组件实例Demo
2017/12/27 Javascript
浅谈react性能优化的方法
2018/09/05 Javascript
Vue 事件处理操作实例详解
2019/03/05 Javascript
详解基于vue-cli3快速发布一个fullpage组件
2019/03/08 Javascript
JavaScript中的null和undefined用法解析
2019/09/30 Javascript
微信小程序canvas截取任意形状的实现代码
2020/01/13 Javascript
python实现异步回调机制代码分享
2014/01/10 Python
python每隔N秒运行指定函数的方法
2015/03/16 Python
Python实现连接两个无规则列表后删除重复元素并升序排序的方法
2018/02/05 Python
python MySQLdb使用教程详解
2018/03/20 Python
对python中GUI,Label和Button的实例详解
2019/06/27 Python
HTML5 表单验证失败的提示语问题
2017/07/13 HTML / CSS
我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串?
2014/03/30 面试题
研究生毕业鉴定
2014/01/29 职场文书
乡镇庆八一活动方案
2014/02/02 职场文书
校园公益广告语
2014/03/13 职场文书
安全事故隐患排查治理制度
2015/08/05 职场文书
基于python的matplotlib制作双Y轴图
2021/04/20 Python
SQL使用复合索引实现数据库查询的优化
2022/05/25 SQL Server