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