function clipbordExcelImportTotal($content, &$coll, &$myerrorno) { $coll = 'zjgf'; $dataconf =& App::getDataconf(); $collconf = $dataconf['zjgf']; $lines = explode("\n", $content); $mc = DbConfig::getMongodb('zjgf'); $datestr = date('Ymd'); foreach ($lines as $k => $l) { $row = explode("\t", trim($l)); $fnum = count($row); if ($k == 0) { foreach ($collconf['theader'] as $kk => $v) { if ($v != $row[$kk]) { $myerrorno = 'noheader'; return $error = "theader not match {$kk} [{$v}] [{$row[$kk]}]"; } } } elseif (1 == $k) { $id = $datestr . '_total'; $row['date'] = $datestr; $row['istotal'] = 1; $cond['_id'] = $id; $rid = md5($datestr . $row[0] . $row[1] . $row[2] . $row[3] . $row[4] . $row[5]); $old = $mc->findOne($cond); if ($old) { //合并 if ($old['rids'][$rid] == 1) { return $error .= "{$id} imported"; } for ($i = 1; $i < 6; $i++) { $row[$i] += $old[$i]; } } $row['rids'] = $old['rids']; $row['rids'][$rid] = 1; $mc->findAndModify($cond, array('$set' => $row), array(), array('upsert' => true)); } elseif (3 == $k) { if ($row[5] != '参考保本价') { // rr $isrr = 1; $coll = 'zjgf_rr'; $error .= "isrr 1\n"; } if ($isrr) { foreach ($collconf['rr'] as $mk => $v) { // echo "$mk $v\n"; $nrow[$mk] = $row[$v]; } $row = $nrow; } foreach ($collconf['header'] as $kk => $v) { $nk = $kk; if ($isrr) { $nk = $collconf['rr'][$kk]; } if ($nk === '') { continue; } if ($v != $row[$kk]) { if ($kk < 10) { $myerrorno = 'noheader'; $error .= "header not compact kk[{$kk}] nk[{$nk}] [{$v}] [{$row[$kk]}]\n"; return $error; } } } } else { if ($fnum < 8) { continue; } if ($isrr) { foreach ($collconf['rr'] as $mk => $v) { $nrow[$mk] = $row[$v]; } $row = $nrow; } $id = $datestr . '_' . $row[12]; //股东代码 $rid = md5($row[0] . $row[1] . $row[3] . $row[4] . $row[7] . $row[10]); $row['date'] = $datestr; $row['istotal'] = 0; $cond['_id'] = $id; $old = $mc->findOne($cond); if ($old) { $findi += 1; } if ($old && $old['rids'][$rid] == 1) { //合并 continue; } if ($old) { $mergei += 1; $totalcb = $row[4] * $row[2] + $old[4] * $old[2]; $row[1] += $old[1]; $row[2] += $old[2]; //库存数量 $row[3] += $old[3]; $row[7] += $old[7]; $row[8] += $old[8]; $row[10] += $old[10]; $row[11] += $old[11]; $row['chengben'] = $totalcb; $row[4] = number_format($totalcb / $row[2], 3); //成本价 $row[5] = number_format($row[4] * 1.002, 3); $row[9] = number_format($row[8] * 100 / $totalcb, 3); //算盈亏比例 } else { $newi += 1; } $row['rids'] = $old['rids']; $row['rids'][$rid] = 1; App::normalTodb($row, $collconf['numfields']); $mc->findAndModify($cond, array('$set' => $row), array(), array('upsert' => true)); } } $error .= "\n {$counterror} improt [{$newi}] new records, [{$findi}] old records ,[{$mergei}] merge {$coll}\n"; return $error; }
///允许一个不同,因为该死的头部两字节不好去除 foreach ($header as $k => $v) { if ($v != $row[$k]) { echo "{$fn} header checknot {$k}=>{$v} {$row[$k]} \n"; $headerinvalid += 1; if ($headerinvalid > 1) { break; } } } if ($headerinvalid > 1) { echo "{$fn} header notmatch \n"; var_export($row); break; } $headerfind = true; echo "{$fn} match\n"; } else { $id = $row['_id'] = md5($vstr); App::normalTodb($row, $collconf['numfields']); $row['_fnorder'] = $i; $mc->findAndModify(array('_id' => $id), array('$set' => $row), array(), array('upsert' => true)); if ($i % 100 == 1) { echo "{$fn} import {$i} records \n"; } $i += 1; } } fclose($fd); echo "{$fn} import {$coll} -- {$collconf['name']} ok\n"; }