You've already forked qlg.tsgz.moe
							
							
		
			
				
	
	
		
			246 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			246 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
<?php
 | 
						|
namespace wstmart\home\model;
 | 
						|
use think\Db;
 | 
						|
use think\Loader;
 | 
						|
/**
 | 
						|
 * ============================================================================
 | 
						|
 * 结算类
 | 
						|
 */
 | 
						|
class Settlements extends Base{
 | 
						|
    /**
 | 
						|
     * 获取已结算的结算单列表
 | 
						|
     */
 | 
						|
    public function pageQuery(){
 | 
						|
        $shopId = (int)session('WST_USER.shopId');
 | 
						|
        $where = [];
 | 
						|
        $where['shopId'] = $shopId;
 | 
						|
        if(input('settlementNo')!='')$where['settlementNo'] = ['like','%'.input('settlementNo').'%'];
 | 
						|
        if((int)input('isFinish')>=0)$where['settlementStatus'] = (int)input('isFinish');
 | 
						|
        return Db::name('settlements')->alias('s')->where($where)->order('settlementId', 'desc')
 | 
						|
            ->paginate(input('pagesize/d'));
 | 
						|
    }
 | 
						|
    /**
 | 
						|
     *  获取未结算订单列表
 | 
						|
     */
 | 
						|
    public function pageUnSettledQuery(){
 | 
						|
        $where = [];
 | 
						|
        if(input('orderNo')!='')$where['orderNo'] = ['like','%'.input('orderNo').'%'];
 | 
						|
        $where['dataFlag'] = 1;
 | 
						|
        $where['orderStatus'] = 2;
 | 
						|
        $where['settlementId'] = 0;
 | 
						|
        $where['shopId'] = (int)session('WST_USER.shopId');
 | 
						|
        $page =  Db::name('orders')->where($where)->order('orderId', 'desc')
 | 
						|
                   ->field('orderId,orderNo,createTime,payType,goodsMoney,deliverMoney,totalMoney,commissionFee,realTotalMoney')
 | 
						|
                   ->paginate(input('pagesize/d'))->toArray();
 | 
						|
        if(count($page['Rows'])){
 | 
						|
            foreach ($page['Rows'] as $key => $v) {
 | 
						|
                $page['Rows'][$key]['payTypeNames'] = WSTLangPayType($v['payType']);
 | 
						|
            }
 | 
						|
        }
 | 
						|
        return $page;
 | 
						|
    }
 | 
						|
    /**
 | 
						|
     * 结算指定的订单
 | 
						|
     */
 | 
						|
    public function settlement(){
 | 
						|
        $shopId = (int)session('WST_USER.shopId');
 | 
						|
        $ids = input('ids');
 | 
						|
        $where['dataFlag'] = 1;
 | 
						|
        $where['orderStatus'] = 2;
 | 
						|
        $where['settlementId'] = 0;
 | 
						|
        $where['orderId'] = ['in',$ids];
 | 
						|
        $where['shopId'] = $shopId;
 | 
						|
        $orders = Db::name('orders')->where($where)->field('orderId,payType,realTotalMoney,scoreMoney,commissionFee')->select();
 | 
						|
        if(empty($orders))return WSTReturn('没有需要结算的订单,请刷新后再核对!');
 | 
						|
        $settlementMoney = 0;
 | 
						|
        $commissionFee = 0;    //平台要收的佣金
 | 
						|
        $ids = [];
 | 
						|
        foreach ($orders as $key => $v) {
 | 
						|
            $ids[] = $v['orderId'];
 | 
						|
            if($v['payType']==1){
 | 
						|
                $settlementMoney += $v['realTotalMoney']+$v['scoreMoney'];
 | 
						|
            }else{
 | 
						|
                $settlementMoney += $v['scoreMoney'];
 | 
						|
            }
 | 
						|
            $commissionFee += abs($v['commissionFee']);
 | 
						|
        }
 | 
						|
        
 | 
						|
        $shops = model('shops')->get($shopId);
 | 
						|
        if(empty($shops))WSTReturn('无效的店铺结算账号!');
 | 
						|
        Db::startTrans();
 | 
						|
        try{
 | 
						|
            $areaNames  = model('areas')->getParentNames($shops['bankAreaId']);
 | 
						|
            $data = [];
 | 
						|
            $data['settlementType'] = 0;
 | 
						|
            $data['shopId'] = $shopId;
 | 
						|
            $data['settlementMoney'] = $settlementMoney;
 | 
						|
            $data['commissionFee'] = $commissionFee;
 | 
						|
            $data['backMoney'] = $settlementMoney-$commissionFee;
 | 
						|
            $data['settlementStatus'] = 0;
 | 
						|
            $data['createTime'] = date('Y-m-d H:i:s');
 | 
						|
            $data['settlementNo'] = '';
 | 
						|
            $result = $this->save($data);
 | 
						|
            if(false !==  $result){
 | 
						|
                 $this->settlementNo = $this->settlementId.(fmod($this->settlementId,7));
 | 
						|
                 $this->save();
 | 
						|
                 Db::name('orders')->where(['orderId'=>['in',$ids]])->update(['settlementId'=>$this->settlementId]);
 | 
						|
                 //修改商家订单情况
 | 
						|
                 $commissionFee = -1*$commissionFee;//平台要收的佣金就等于商家要付的钱
 | 
						|
                 $shops->noSettledOrderNum = $shops->noSettledOrderNum-count($orders);
 | 
						|
                 $shops->paymentMoney = $shops->paymentMoney + $commissionFee;
 | 
						|
                 $shops->noSettledOrderFee = $shops->noSettledOrderFee-$commissionFee;
 | 
						|
                 $shops->save();
 | 
						|
                 Db::commit();
 | 
						|
                 return WSTReturn('提交结算申请成功,请留意结算信息~',1);
 | 
						|
            }
 | 
						|
        }catch (\Exception $e) {
 | 
						|
            Db::rollback();errLog($e);
 | 
						|
        }
 | 
						|
        return WSTReturn('提交结算申请失败',-1);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * 获取已结算订单
 | 
						|
     */
 | 
						|
    public function pageSettledQuery(){
 | 
						|
        $where = [];
 | 
						|
        if(input('settlementNo')!='')$where['settlementNo'] = ['like','%'.input('settlementNo').'%'];
 | 
						|
        if(input('orderNo')!='')$where['orderNo'] = ['like','%'.input('orderNo').'%'];
 | 
						|
        if((int)input('isFinish')>=0)$where['settlementStatus'] = (int)input('isFinish');
 | 
						|
        $where['dataFlag'] = 1;
 | 
						|
        $where['orderStatus'] = 2;
 | 
						|
        $where['o.shopId'] = (int)session('WST_USER.shopId');
 | 
						|
        $page = Db::name('orders')->alias('o')
 | 
						|
          ->join('__SETTLEMENTS__ s','o.settlementId=s.settlementId')
 | 
						|
          ->join('__PAYMENTS__ p','o.payFrom=p.payCode')->where($where)
 | 
						|
          ->field('orderId,orderNo,payType,goodsMoney,deliverMoney,totalMoney,o.commissionFee,realTotalMoney,s.settlementTime,s.settlementNo,p.payName')->order('s.settlementTime desc')->paginate(input('pagesize/d'))->toArray();
 | 
						|
        if(count($page['Rows'])){
 | 
						|
            foreach ($page['Rows'] as $key => $v) {
 | 
						|
                $page['Rows'][$key]['commissionFee'] = abs($v['commissionFee']);
 | 
						|
                $page['Rows'][$key]['payTypeNames'] = WSTLangPayType($v['payType']);
 | 
						|
            }
 | 
						|
        }
 | 
						|
        return $page;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * 获取结算订单详情
 | 
						|
     */
 | 
						|
    public function getById(){
 | 
						|
        $shopId = (int)session('WST_USER.shopId');
 | 
						|
        $settlementId = (int)input('id');
 | 
						|
        $object =  Db::name('settlements')->alias('st')->where(['settlementId'=>$settlementId,'st.shopId'=>$shopId])->join('__SHOPS__ s','s.shopId=st.shopId','left')->field('s.shopName,st.*')->find();
 | 
						|
        if(!empty($object)){
 | 
						|
            $object['list'] = Db::name('orders')->where(['settlementId'=>$settlementId])
 | 
						|
                      ->field('orderId,orderNo,payType,goodsMoney,deliverMoney,realTotalMoney,totalMoney,scoreMoney,commissionFee,createTime')
 | 
						|
                      ->order('payType desc,orderId desc')->select();
 | 
						|
        }
 | 
						|
        return $object;
 | 
						|
    }
 | 
						|
    /**
 | 
						|
   * 导出订单
 | 
						|
   */
 | 
						|
  public function toExport(){
 | 
						|
    $name='已结算订单表';
 | 
						|
    $where = [];
 | 
						|
        if(input('settlementNo')!='')$where['settlementNo'] = ['like','%'.input('settlementNo').'%'];
 | 
						|
        if(input('orderNo')!='')$where['orderNo'] = ['like','%'.input('orderNo').'%'];
 | 
						|
        if((int)input('isFinish')>=0)$where['settlementStatus'] = (int)input('isFinish');
 | 
						|
        $where['dataFlag'] = 1;
 | 
						|
        $where['orderStatus'] = 2;
 | 
						|
        $where['o.shopId'] = (int)session('WST_USER.shopId');
 | 
						|
        $page = Db::name('orders')->alias('o')
 | 
						|
          ->join('__SETTLEMENTS__ s','o.settlementId=s.settlementId')
 | 
						|
          ->join('__PAYMENTS__ p','o.payFrom=p.payCode')->where($where)
 | 
						|
          ->field('orderId,orderNo,payType,goodsMoney,deliverMoney,totalMoney,o.commissionFee,realTotalMoney,s.settlementTime,s.settlementNo,p.payName')->order('s.settlementTime desc')->select();
 | 
						|
        if(count($page)){
 | 
						|
            foreach ($page as $key => $v) {
 | 
						|
                $page[$key]['commissionFee'] = abs($v['commissionFee']);
 | 
						|
                $page[$key]['payTypeNames'] = WSTLangPayType($v['payType']);
 | 
						|
            }
 | 
						|
        }
 | 
						|
    Loader::import('phpexcel.PHPExcel.IOFactory');
 | 
						|
    $objPHPExcel = new \PHPExcel();
 | 
						|
    // 设置excel文档的属性
 | 
						|
    $objPHPExcel->getProperties()->setCreator("WSTMart")//创建人
 | 
						|
    ->setLastModifiedBy("WSTMart")//最后修改人
 | 
						|
    ->setTitle($name)//标题
 | 
						|
    ->setSubject($name)//题目
 | 
						|
    ->setDescription($name)//描述
 | 
						|
    ->setKeywords("订单")//关键字
 | 
						|
    ->setCategory("Test result file");//种类
 | 
						|
  
 | 
						|
    // 开始操作excel表
 | 
						|
    $objPHPExcel->setActiveSheetIndex(0);
 | 
						|
    // 设置工作薄名称
 | 
						|
    $objPHPExcel->getActiveSheet()->setTitle(iconv('gbk', 'utf-8', 'Sheet'));
 | 
						|
    // 设置默认字体和大小
 | 
						|
    $objPHPExcel->getDefaultStyle()->getFont()->setName(iconv('gbk', 'utf-8', ''));
 | 
						|
    $objPHPExcel->getDefaultStyle()->getFont()->setSize(11);
 | 
						|
    $styleArray = array(
 | 
						|
        'font' => array(
 | 
						|
            'bold' => true,
 | 
						|
            'color'=>array(
 | 
						|
                'argb' => 'ffffffff',
 | 
						|
            )
 | 
						|
        ),
 | 
						|
        'borders' => array (
 | 
						|
            'outline' => array (
 | 
						|
                'style' => \PHPExcel_Style_Border::BORDER_THIN,  //设置border样式
 | 
						|
                'color' => array ('argb' => 'FF000000'),     //设置border颜色
 | 
						|
            )
 | 
						|
        )
 | 
						|
    );
 | 
						|
    //设置宽
 | 
						|
    $objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(12);
 | 
						|
    $objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(12);
 | 
						|
    $objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(12);
 | 
						|
    $objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(25);
 | 
						|
    $objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(12);
 | 
						|
    $objPHPExcel->getActiveSheet()->getColumnDimension('F')->setWidth(12);
 | 
						|
    $objPHPExcel->getActiveSheet()->getColumnDimension('G')->setWidth(12);
 | 
						|
    $objPHPExcel->getActiveSheet()->getColumnDimension('H')->setWidth(20);
 | 
						|
    $objPHPExcel->getActiveSheet()->getColumnDimension('I')->setWidth(30);
 | 
						|
    $objPHPExcel->getActiveSheet()->getColumnDimension('J')->setWidth(30);
 | 
						|
    $objPHPExcel->getActiveSheet()->getColumnDimension('K')->setWidth(12);
 | 
						|
    $objPHPExcel->getActiveSheet()->getColumnDimension('L')->setWidth(12);
 | 
						|
    $objPHPExcel->getActiveSheet()->getColumnDimension('M')->setWidth(20);
 | 
						|
    $objPHPExcel->getActiveSheet()->getColumnDimension('N')->setWidth(20);
 | 
						|
    $objPHPExcel->getActiveSheet()->getStyle('A1:N1')->getFill()->setFillType(\PHPExcel_Style_Fill::FILL_SOLID);
 | 
						|
    $objPHPExcel->getActiveSheet()->getStyle('A1:N1')->getFill()->getStartColor()->setARGB('333399');
 | 
						|
  
 | 
						|
    $objPHPExcel->getActiveSheet()->setCellValue('A1', '订单编号')->setCellValue('B1', '支付方式')->setCellValue('C1', '商品总金额')->setCellValue('D1', '运费')->setCellValue('E1', '订单总金额')
 | 
						|
    ->setCellValue('F1', '实付金额')->setCellValue('G1', '应付佣金')->setCellValue('H1', '结算方式')->setCellValue('I1', '结算单号')->setCellValue('J1', '结算时间');
 | 
						|
    $objPHPExcel->getActiveSheet()->getStyle('A1:J1')->applyFromArray($styleArray);
 | 
						|
  
 | 
						|
    for ($row = 0; $row < count($page); $row++){
 | 
						|
      $i = $row+2;
 | 
						|
      $objPHPExcel->getActiveSheet()
 | 
						|
      ->setCellValue('A'.$i, $page[$row]['orderNo'])
 | 
						|
      ->setCellValue('B'.$i, $page[$row]['payTypeNames'])
 | 
						|
      ->setCellValue('C'.$i, $page[$row]['goodsMoney'])
 | 
						|
      ->setCellValue('D'.$i, $page[$row]['deliverMoney'])
 | 
						|
      ->setCellValue('E'.$i, $page[$row]['totalMoney'])
 | 
						|
      ->setCellValue('F'.$i, $page[$row]['realTotalMoney'])
 | 
						|
      ->setCellValue('G'.$i, $page[$row]['commissionFee'])
 | 
						|
      ->setCellValue('H'.$i, $page[$row]['payName'])
 | 
						|
      ->setCellValue('I'.$i, $page[$row]['settlementNo'])
 | 
						|
      ->setCellValue('J'.$i, $page[$row]['settlementTime']);
 | 
						|
    }
 | 
						|
  
 | 
						|
    //输出EXCEL格式
 | 
						|
    $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
 | 
						|
    // 从浏览器直接输出$filename
 | 
						|
    header('Content-Type:application/csv;charset=UTF-8');
 | 
						|
    header("Pragma: public");
 | 
						|
    header("Expires: 0");
 | 
						|
    header("Cache-Control:must-revalidate, post-check=0, pre-check=0");
 | 
						|
    header("Content-Type:application/force-download");
 | 
						|
    header("Content-Type:application/vnd.ms-excel;");
 | 
						|
    header("Content-Type:application/octet-stream");
 | 
						|
    header("Content-Type:application/download");
 | 
						|
    header('Content-Disposition: attachment;filename="'.$name.'.xls"');
 | 
						|
    header("Content-Transfer-Encoding:binary");
 | 
						|
    $objWriter->save('php://output');
 | 
						|
  }
 | 
						|
} |