【工具】phpoffice/phpexcel

背景介绍

因公司产品的营销活动被羊毛党盯上,导致现有批量结算系统暂不满足需求,所以采取数据分析师分析数据过后,将需要结算的用户结算信息整理成表格,再将表格中的用户数据拼接成批量更新的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除外),更不用说这种日常的、涉及多人的需求。开发人员的存在是为了简化这些环节,我也将我自己的想法向他人表述过,不知道是我处的环境如此还是因为其他原因,更多人愿意重复一件事情而不愿意花一部分时间去简化流程。同时我也非常强烈的感觉到,除了技术的提升,积累用技术改变生活的能力也非常重要。比如自己如果想炒股,想选几只优质股票,可以抓包计算下近段时间连续上涨、涨幅较高的股票,再根据历史走势预估一下未来的走势,对错都由时间来判断。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值