Пример #1
0
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;
}
Пример #2
0
            ///允许一个不同,因为该死的头部两字节不好去除
            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";
}