背景介绍
因公司产品的营销活动被羊毛党盯上,导致现有批量结算系统暂不满足需求,所以采取数据分析师分析数据过后,将需要结算的用户结算信息整理成表格,再将表格中的用户数据拼接成批量更新的sql给dba执行。
环境准备
php7
phpoffice/phpexcel扩展
<?php
/**
*
*
* User: 原子酱
* Date: 2019/9/23
* Time: 17:36
*/
require_once 'E:\git\stock-account\Common\Library\Date\XDateTime.php';
require_once 'E:\git\demo\vendor\autoload.php';
use NCFGroup\Common\Library\Date\XDateTime;
function setUserIdArr($fileName)
{
if (!file_exists($fileName)) {
exit("文件" . $fileName . "不存在");
}
$objPHPExcel = PHPExcel_IOFactory::load($fileName);
//获取sheet表格数目
$sheetCount = $objPHPExcel->getSheetCount();
//默认选中sheet0表
$sheetSelected = 0;
$objPHPExcel->setActiveSheetIndex($sheetSelected);
//获取表格行数
$rowCount = $objPHPExcel->getActiveSheet()->getHighestRow();
//获取表格列数
$columnCount = $objPHPExcel->getActiveSheet()->getHighestColumn();
echo "Sheet Count : " . $sheetCount . " 行数: " . $rowCount . " 列数:" . $columnCount . PHP_EOL;
$dataArr = array();
for ($i = 1; $i <= $rowCount - 1; $i++) { //最后一行是总和
$value = $objPHPExcel->getActiveSheet()->getCell('A' . $i)->getValue();
if($value == '总和') {
break;
}
if(empty($value) || $value == 'user_id') {
continue;
}
$dataArr[] = $value;
}
return $dataArr;
}
$userIdArr = [];
$fileName = 'C:\Users\原子酱\Desktop\xxx\batch_upd_sql\结算1010.xlsx'; // todo 每次更改文件名称
$userIdArr = setUserIdArr($fileName);
$userIdStr = implode($userIdArr, ',');
// 生成sql后注意查看时间是否正确!!!!!!!
$startTime = XDateTime::today()->addDay(-1)->toShortString() . ' 15:00:00';
$endTime = XDateTime::today()->toShortString() . ' 15:00:00';
//var_dump($startTime, $endTime);die;
$countSql = "select count(*),sum(`extract_money`*100)/100 from table_xx where extract_time >= '$startTime' AND extract_time <= '$endTime' and extract_status = 2 and user_id IN ($userIdStr);";
$updSql = "update table_xx set extract_status = 4, cut_off_status = 2, cut_off_time = NOW() where extract_time >= '$startTime' AND extract_time <= '$endTime' and extract_status = 2 and user_id IN ($userIdStr);";
$now = date('Y_m_d');
$sqlFileName = "C:\Users\原子酱\Desktop\xxx\batch_upd_sql\sql_$now.sql";
echo $sqlFileName . PHP_EOL;
$sqlFile = fopen($sqlFileName, "w");
$sqlStr = "-- 统计sql" . PHP_EOL . $countSql . PHP_EOL . PHP_EOL . "-- 更新sql" . PHP_EOL . $updSql;
fwrite($sqlFile, $sqlStr);
fclose($sqlFile);
小结
善用语言做工具,其实这个需求属于每天日常任务,涉及到运营、数据分析师、开发、dba等多人,过程非常繁琐,可考虑在结算平台添加文件上传处理按钮,每次由运营人员将数据分析师的表格导入后,生成查询sql,如果数据没问题,再经过二次确认批量结算。
说一点自己想说的话~~~我非常讨厌当需求交付之后再出现要开发人员参与其中的环节(改bug除外),更不用说这种日常的、涉及多人的需求。开发人员的存在是为了简化这些环节,我也将我自己的想法向他人表述过,不知道是我处的环境如此还是因为其他原因,更多人愿意重复一件事情而不愿意花一部分时间去简化流程。同时我也非常强烈的感觉到,除了技术的提升,积累用技术改变生活的能力也非常重要。比如自己如果想炒股,想选几只优质股票,可以抓包计算下近段时间连续上涨、涨幅较高的股票,再根据历史走势预估一下未来的走势,对错都由时间来判断。