paypal 导出收款记录:增加记住每次导出的最后一条,指定总金额

feature/trippest
lyt 6 years ago
parent d08b32a8d5
commit c8f0abfc6c

@ -907,6 +907,11 @@ class Index extends CI_Controller {
$data['notelist'] = $this->Note_model->search_date($data['date']);
}
/**
* 导出记录用的记录节点
*/
$data['record_flags'] = $this->Note_model->list_export_record();
$this->load->view('n-header', $data);
$this->load->view('note_list');
$this->load->view('n-footer');
@ -989,11 +994,80 @@ class Index extends CI_Controller {
$from_date = $this->input->post("from_date");
$to_date = $this->input->post("to_date");
$currency = $this->input->post("currency");
$export_list = $this->Note_model->date_range($from_date, $to_date, $currency);
$amount = $this->input->post("set_amount");
$last_record = $this->input->post("date_history");
if (empty($amount)) {
$export_list = $this->Note_model->date_range($from_date, $to_date, $currency);
} else {
$allmost_day = intval(ceil($amount/10000));
if ( ! in_array($currency, array('CNY','USD'))) {
$allmost_day = 30;
}
$last_sn = null;
if ( ! empty($last_record)) {
$last_sn = strstr($last_record, '@', TRUE);
$from_date = substr(strstr($last_record, '@'),1);
}
$all_list = $this->target_amount_recursive($currency, $amount, 0, $from_date, $allmost_day, array(), $last_sn);
$export_list = $all_list['list'];
}
if ($export_list == false) {
echo "Not found any records for export.";
return false;
}
// 记录这次导出的最后一条
if (isset($all_list['last_flag']) && ! empty($all_list['last_flag'])) {
$insert_db = array(
"TEL_transactionType" => 15002
,"TEL_transactionNoticeId" => $all_list['last_flag']->pn_sn
,"TEL_transactionId" => $all_list['last_flag']->pn_txn_id
,"TEL_transactionDate" => $all_list['last_flag']->pn_datetime
,"TEL_transactionAmount" => $all_list['last_flag']->pn_mc_gross
,"TEL_transactionCurrency" => $all_list['last_flag']->pn_mc_currency
,"TEL_orderId" => $all_list['last_flag']->pn_invoice
,"TEL_exportAmount" => $all_list['last_flag']->pn_mc_gross
,"TEL_exportDate" => date('Y-m-d H:i:s')
);
$this->Note_model->export_record($insert_db);
}
$this->save_excel($export_list);
}
/*!
* 递归查询收款记录, 直到总金额>=目标总金额
* @date 2019-02-27
*/
public function target_amount_recursive($currency, $target_amount, $now_amount, $from_date,$days=10,$list=array(), $last_sn=null, $last_flag=null)
{
$to_date = date('Y-m-d', strtotime("+$days days", strtotime($from_date)));
$former_list = $this->Note_model->date_range($from_date, $to_date, $currency, $last_sn);
$list_index = 0;
$last_sn = $last_sn===null ? 0 : $last_sn;
$last_flag = $last_flag===null ? null : $last_flag;
while ($now_amount < $target_amount && isset($former_list[$list_index])) {
$list[] = $former_list[$list_index];
$now_amount = bcadd($now_amount, $former_list[$list_index]->pn_mc_gross);
$last_sn = $former_list[$list_index]->pn_sn;
$last_flag = $former_list[$list_index];
$list_index++;
}
$ret = array(
"last_flag" => $last_flag,
"list" => $list
);
if (empty($former_list)) {
return $ret;
}
if ($now_amount < $target_amount) {
return $this->target_amount_recursive($currency, $target_amount, $now_amount, $to_date, 10, $list, $last_sn, $last_flag);
} else {
return $ret;
}
}
public function save_excel($export_list)
{
$this->load->library('PHPExcel');
$objPHPExcel = new PHPExcel();
$objPHPExcel->setActiveSheetIndex(0);
@ -1005,18 +1079,21 @@ class Index extends CI_Controller {
$objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(30);
$objPHPExcel->getActiveSheet()->getColumnDimension('F')->setWidth(20);
$objPHPExcel->getActiveSheet()->getColumnDimension('G')->setWidth(20);
$objPHPExcel->getActiveSheet()->getColumnDimension('H')->setWidth(20);
// 对齐
$objPHPExcel->getActiveSheet()->getStyle('B')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
$objPHPExcel->getActiveSheet()->getStyle('C')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
$objPHPExcel->getActiveSheet()->getStyle('D')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
// 表标题行
$objPHPExcel->getActiveSheet()
->SetCellValue('A1', '#')
->SetCellValue('B1', '团号')
->SetCellValue('C1', '金额')
->SetCellValue('D1', '付款人')
->SetCellValue('E1', '付款人邮箱')
->SetCellValue('F1', '交易号')
->SetCellValue('G1', '收单时间');
->SetCellValue('D1', '币种')
->SetCellValue('E1', '付款人')
->SetCellValue('F1', '付款人邮箱')
->SetCellValue('G1', '交易号')
->SetCellValue('H1', '收单时间');
$currency_sum = array();
bcscale(2);
$rowCount = 2;
@ -1028,12 +1105,14 @@ class Index extends CI_Controller {
$orderid = $row->pn_invoice ? $row->pn_invoice : $row->pn_item_number;
$objPHPExcel->getActiveSheet()
->SetCellValue('A'.$rowCount, ($rowCount-1))
// ->SetCellValue('A'.$rowCount, $row->pn_sn)
->setCellValueExplicit('B'.$rowCount, $orderid,PHPExcel_Cell_DataType::TYPE_STRING)
->setCellValueExplicit('C'.$rowCount, trim($row->pn_mc_currency) . number_format($row->pn_mc_gross, 2, ".", ""),PHPExcel_Cell_DataType::TYPE_STRING)
->SetCellValue('D'.$rowCount, $row->pn_payer)
->SetCellValue('E'.$rowCount, $row->pn_payer_email)
->setCellValueExplicit('F'.$rowCount, $row->pn_txn_id,PHPExcel_Cell_DataType::TYPE_STRING)
->SetCellValue('G'.$rowCount, $row->pn_datetime);
->setCellValue('C'.$rowCount, number_format($row->pn_mc_gross, 2, ".", ""))
->setCellValueExplicit('D'.$rowCount, trim($row->pn_mc_currency) ,PHPExcel_Cell_DataType::TYPE_STRING)
->SetCellValue('E'.$rowCount, $row->pn_payer)
->SetCellValue('F'.$rowCount, $row->pn_payer_email)
->setCellValueExplicit('G'.$rowCount, $row->pn_txn_id,PHPExcel_Cell_DataType::TYPE_STRING)
->SetCellValue('H'.$rowCount, $row->pn_datetime);
$payer = $orderid = "";
$rowCount++;
}

@ -153,7 +153,7 @@ class Note_model extends CI_Model {
return $this->HT->query($sql, array($pn_invoice, $pn_txn_id));
}
public function date_range($from, $to, $currency=NULL)
public function date_range($from, $to, $currency=NULL, $pn_sn=NULL)
{
$this->init();
$search_sql = " AND pn_payment_status in ('Completed','Refunded') ";
@ -161,9 +161,31 @@ class Note_model extends CI_Model {
if ( ! empty($currency)) {
$search_sql .= " AND pn_mc_currency = '$currency' ";
}
if ( ! empty($pn_sn)) {
$search_sql .= " AND pn_sn > $pn_sn ";
}
$this->search = $search_sql;
$this->orderby = "";
$this->orderby = " order by pn.pn_sn asc";
return $this->get_list();
}
/**
* export note
*/
public function export_record($db)
{
$this->info = $this->load->database('INFO', TRUE);
$this->info->insert('Transaction_Export_Log', $db);
}
public function list_export_record()
{
$this->info = $this->load->database('INFO', TRUE);
$sql = "SELECT TOP 10 *
FROM [InfoManager].[dbo].[Transaction_Export_Log]
order by TEL_SN desc";
return $this->info->query($sql)->result();
}
}

@ -1,6 +1,7 @@
<link href="http://www.mycht.cn/min?f=/css/destination.css" rel="stylesheet">
<script type="text/javascript">
$(document).ready(function() {
// $('.trigger_export_btn').trigger('click');// test
$('#datepicker').datepicker({
defaultDate: '<?php echo $date; ?>',
dateFormat: 'yy-mm-dd',
@ -44,37 +45,88 @@
</script>
<style type="text/css">
.export_form_area{display: inline-block;padding: 6px;border: 1px solid #ccc;background-color: #ccc;position: absolute;top: 0;left: 17%;}
.export_form_area{display: inline-block;padding: 6px;border: 1px solid #ccc;background-color: #ccc;/*position: absolute;top: 0;left: 17%;*/}
.trigger_export_btn{position: absolute;top: 0;left: 17%;}
</style>
<div class="export_form_area ">
<form class="form-inline " method="post" id="search_list" action="/webht.php/apps/paypal/index/export_list/">
<div class="form-group ">
<label for="from_date" class="">Date From</label>
<input type="text" class="form-control" id="from_date" name="from_date" required>
</div>
<div class="form-group ">
<label for="to_date" class="">To</label>
<input type="text" class="form-control" id="to_date" name="to_date" required>
</div>
<div class="form-group ">
<label for="currency" class="">Currency</label>
<select class="form-control" id="currency" name="currency">
<option value="">All</option>
<option value="CNY">CNY</option>
<option value="USD">USD</option>
<option value="EUR">EUR</option>
<option value="CAD">CAD</option>
<option value="AUD">AUD</option>
<option value="GBP">GBP</option>
<option value="NZD">NZD</option>
<option value="SGD">SGD</option>
<option value="CHF">CHF</option>
</select>
<!-- Button trigger modal -->
<button type="button" class="btn btn-primary trigger_export_btn" data-toggle="modal" data-target="#exampleModal">
导出收款记录 &gt;
</button>
<!-- Modal -->
<div class="modal fade" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel">导出 Paypal 记录</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<form class="form-horizontal" role="form" method="post" id="search_list" action="/webht.php/apps/paypal/index/export_list/">
<div class="form-group row">
<label for="from_date" class="col-md-4">使用上次</label>
<div class="col-md-16">
<select class="form-control" id="date_history" name="date_history" onchange="set_start_date(this)">
<option value="">选择一个开始记录</option>
<?php
foreach ($record_flags as $kf => $vf) {
echo "<option value=\"$vf->TEL_transactionNoticeId@" . strstr($vf->TEL_transactionDate, " ", true) . "\">" . substr($vf->TEL_transactionDate,0,16) . ' / '. $vf->TEL_orderId . ' / '. $vf->TEL_transactionAmount . ' / '. $vf->TEL_transactionCurrency . "</option>";
}
?>
</select>
</div>
</div>
<div class="form-group row">
<label for="from_date" class="col-md-4">Date From</label>
<div class="col-md-16">
<input type="text" class="form-control col-md-8" id="from_date" name="from_date" placeholder="开始日期" required>
</div>
</div>
<div class="form-group row">
<label for="to_date" class="col-md-4">To</label>
<div class="col-md-16">
<input type="text" class="form-control" id="to_date" name="to_date" placeholder="结束日期" required>
</div>
</div>
<div class="form-group row">
<label for="currency" class="col-md-4">Currency</label>
<div class="col-md-16">
<select class="form-control" id="currency" name="currency" required>
<option value="">所有币种</option>
<option value="CNY">CNY</option>
<option value="USD">USD</option>
<option value="EUR">EUR</option>
<option value="CAD">CAD</option>
<option value="AUD">AUD</option>
<option value="GBP">GBP</option>
<option value="NZD">NZD</option>
<option value="SGD">SGD</option>
<option value="CHF">CHF</option>
</select>
</div>
</div>
<div class="form-group row">
<label for="set_amount" class="col-md-4">总金额(元)</label>
<div class="col-md-16">
<input type="number" class="form-control" id="set_amount" name="set_amount" placeholder="总金额">
</div>
</div>
<div class="form-group">
<div class="col-sm-24 ">
<button type="submit" class="btn btn-primary center-block">导出</button>
</div>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
</div>
</div>
</div>
<button type="submit" class="btn btn-primary">Export</button>
</form>
</div>
<div class="container-fluid">
<div class="row">
@ -219,6 +271,21 @@
<script type="text/javascript">
function set_start_date(select) {
if (select.value=='') {
$("#from_date").datepicker( "option", "disabled", false );
$('#from_date').prop("readonly",false);
$('#to_date').prop("readonly",false).parents('.form-group').show();
$("#to_date").datepicker( "option", "disabled", false );
} else {
var this_date = select.value.split('@')[1];
$('#from_date').val(this_date).prop("readonly",true);
$("#from_date" ).datepicker( "option", "disabled", true );
$('#to_date').prop("readonly",true).parents('.form-group').hide();
$("#to_date" ).datepicker( "option", "disabled", true );
}
}
function show_order_modal(pn_txn_id, pn_invoice) {
$.ajax({
type: "get",

Loading…
Cancel
Save