作者 刘朕
1 个管道 的构建 通过 耗费 9 秒

数据导出调试

... ... @@ -15,6 +15,122 @@ use think\Db;
class TestController extends HomeBaseController
{
public function prob()
{
$uid = 451;
$user = Db::name('user')->where('id',$uid)->find();
$indent = Db::name('indent')->where('salesman_uid',$uid)->order('create_time','desc')->select();
$arr = collection($indent)->toArray();
$data = [];
$state_arr = [
4 => '待付款',
2 => '待发货',
3 => '已完成',
5 => '已发货',
6 => '待取货'
];
foreach ($arr as &$v) {
$money = Db::name('money_income')->where('uid',$uid)->where('indent_id',$v['id'])->value('money');
$fact_money = Db::name('money_income')->where('uid',$uid)->where('indent_id',$v['id'])->sum('money');
// $income = Db::name('money_income')->where('uid',$uid)->where('indent_id',$v['id'])->select();
// $v['income'] = collection($income)->toArray();
// $data[] = [
// 'id' => $v['id'],
// 'money' => $money,
// 'number' => $v['book_num'],
// 'name' => $v['name'],
// 'phone' => $v['phone'],
// 'school' => $v['school'].'-'.$v['grade'].$v['class'],
// 'state' => $state_arr[$v['state']],
// 'create_time' => date('Y-m-d H:i:s',$v['create_time']),
// 'pay_time' => date('Y-m-d H:i:s',$v['pay_time']),
// 'region' => $v['region'],
// 'beiyong_address' => $v['beiyong_address'],
// 'award' => $money,
// 'fact_award' => $fact_money,
// 'is_error' => $fact_money != $money ? '是' : '否'
// ];
$data[] = [
$v['id'],
$money,
$v['book_num'],
$v['name'],
$v['phone'],
$v['school'].'-'.$v['grade'].$v['class'],
$state_arr[$v['state']],
date('Y-m-d H:i:s',$v['create_time']),
date('Y-m-d H:i:s',$v['pay_time']),
$v['region'],
$v['beiyong_address'],
$money,
$fact_money,
$fact_money != $money ? '是' : '否'
];
}
$this->excel($user,$data);
print_r($arr);exit;
}
/**
*
* 导出Excel
*/
public function excel($user,$data2)
{
//引入PHPExcel库文件
// Vendor('phpexcel2.PHPExcel');
//创建对象
$excel = new \PHPExcel();
//Excel表格式,这里简略写了8列
$letter = array('A', 'B', 'C', 'D', 'E', 'F', 'F', 'G','H','I','J','k','L','M','N');
$excel->getActiveSheet()->setCellValue("A1", "业务员名称");
$excel->getActiveSheet()->setCellValue("B1", $user['user_nickname']);
//表头数组
$tableheader = array('订单号', '价钱', '数量', '姓名', '电话', '学校-班级', '订单状态', '创建时间', '支付时间', '配送时间', '地区', '备用地址',
'应得收益', '实际收益', '是否异常');
//填充表头信息
for ($i = 1; $i < count($tableheader) + 1; $i++) {
$excel->getActiveSheet()->setCellValue("$letter[$i]2", "$tableheader[$i]");
}
//表格数组
$data = array(
array('1', 'B', 'C', 'D', 'E', 'F', 'G'),
array('2', 'B', 'C', 'D', 'E', 'F', 'G'),
array('3', 'B', 'C', 'D', 'E', 'F', 'G'),
array('4', 'B', 'C', 'D', 'E', 'F', 'G'),
array('5', 'B', 'C', 'D', 'E', 'F', 'G'),
array('6', 'B', 'C', 'D', 'E', 'F', 'G'),
array('7', 'B', 'C', 'D', 'E', 'F', 'G'),
);
// $tz = Db::name('taizhang');
// $data2 = $tz->field('type',true)->select();
//print_r($data2);exit();
//填充表格信息
for ($i = 3; $i <= count($data2) + 1; $i++) {
$j = 0;
foreach ($data2[$i - 2] as $key => $value) {
$excel->getActiveSheet()->setCellValue("$letter[$j]$i", "$value");
$j++;
}
}
//创建Excel输入对象
$write = new \PHPExcel_Writer_Excel2007($excel);
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-execl");
header("Content-Type:application/octet-stream");
header("Content-Type:application/download");;
header('Content-Disposition:attachment;filename="信息系统表.xlsx"');
header("Content-Transfer-Encoding:binary");
$write->save('php://output');
}
/**
* 恢复父级id
* @throws \think\Exception
... ... @@ -24,14 +140,93 @@ class TestController extends HomeBaseController
* @throws \think\exception\PDOException
*/
public function test(){
$uids = Db::name('indent_over')->group('uid')->column('uid');
$indent = Db::name('indent')->whereIn('salesman_uid',$uids)->select();
$insert = [];
foreach ($indent as $v) {
unset($v['id']);
$insert[] = $v;
ini_set('max_execution_time', 3600);//秒为单位,自己根据需要定义
ini_set('memory_limit','-1');
// $b = Db::name('indent_pro')->where('salesman_uid',309)->update(['is_out'=>0]);
$page = $this->request->param('page',1);
$uid = Db::name('indent_pro')->where('is_out',0)->group('salesman_uid')->order('salesman_uid','desc')->value('salesman_uid');
if(!$uid) {
echo 123;exit;
}
Db::name('indent_pro')->insertAll($insert);
// print_r($uid);exit;
$list = Db::name('indent_pro')->where('salesman_uid',$uid)->paginate(50,true,['page'=>$page]);
$list = $list->items();
$state_arr = ['2'=>'待发货','3'=>'已完成','5'=>'已发货','6'=>'待收货'];
$i = [];
foreach ($list as $v) {
$order = Db::name('indent')->where('salesman_uid',$v['salesman_uid'])->where('order_number',$v['order_number'])
->whereIn('state',['2','3','5','6'])->find();
if(!$order) continue;
$school_class = $v['school'].'-'.$v['grade'].$v['class'];
$salesman_name = Db::name('user')->where('id',$v['salesman_uid'])->value('user_nickname');
$award = Db::name('money_income')->where('indent_id',$order['id'])->where('uid',$order['salesman_uid'])->value('money');
if($award) {
$award_fac = Db::name('money_income')->where('indent_id',$order['id'])->where('uid',$order['salesman_uid'])->sum('money');
$i[] = [
'state_text' => $state_arr[$order['state']],
'order_number' => $order['order_number'],
'money' => $order['money'],
'create_time' => date('Y-m-d H:i:s',$order['create_time']),
'book_num' => $order['book_num'],
'leave_word' => $order['leave_word'],
'name' => $order['name'],
'phone' => $order['phone'],
'school_class' => $school_class,
'salesman_name' => $salesman_name,
'pay_time' => date('Y-m-d H:i:s',$order['pay_time']),
'start_time' => $order['start_time'],
'end_time' => $order['end_time'],
'region' => $order['region'],
'beiyong_address' => $order['beiyong_address'],
'award' => $award,
'award_fac' => $award_fac,
'is_pro' => $award_fac > $award ? '是' : '否'
];
}
}
$b = true;
Db::startTrans();
if(count($i) == 0) {
Db::name('indent_pro')->where('salesman_uid',$uid)->update(['is_out'=>1]);
$page = 0;
} else {
$a = Db::name('indent_orders')->insertAll($i);
if(count($i) < 50) {
$b = Db::name('indent_pro')->where('salesman_uid',$uid)->update(['is_out'=>1]);
$page = 0;
}
if(!$a || !$b) Db::rollback();
}
Db::commit();
$page = $page + 1;
sleep(1);
$this->redirect(url('portal/test/test',['page'=>$page],true,true));
// $sql = Db::name('indent_pro')->getLastSql();
// print_r($sql);
// print_r($uid);exit;
// $page = $this->request->param('page',1,'intval');
// $num = 2000;
//// $arr = [267,295,309];
// $uid = Db::name('indent_over')->where('status',0)
//// ->whereNotIn('uid',$arr)
// ->group('uid')->value('uid');
//// print_r($uid);exit;
// $list = Db::name('indent')->whereIn('salesman_uid',$uid)->paginate($num,true,['page'=>$page]);
// $indent = $list->items();
// $insert = [];
// foreach ($indent as $v) {
// unset($v['id']);
// $insert[] = $v;
// }
// $res = $res2 = true;
// Db::startTrans();
// if(count($indent) == 0) {
// $res2 = Db::name('indent_over')->where('uid',$uid)->update(['status'=>1]);
// } else {
// $res = Db::name('indent_pro')->insertAll($insert);
// }
// if(!$res || !$res2) Db::rollback();
// Db::commit();
// $all = Db::name('indent_over')->select();
// foreach ($all as $v) {
// $indent = Db::name('indent')->where('id',$v['indent_id'])->where('book_num',2)->count();
... ...