2019-09-06 23:53:10 +08:00

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');
}
}