|
@@ -566,23 +566,33 @@ const getSummaryMap = (items) => {
|
|
|
}
|
|
|
|
|
|
// 匹配总表
|
|
|
-// 按规则匹配信息价的编码、别名编码、计算式(只匹配珠海建筑,要单独标记珠海地区);
|
|
|
+// 按规则匹配信息价的编码、别名编码
|
|
|
// 匹配规则:名称+规格型号+单位,与总表一致则自动填入编码、别名编码、计算式(珠海建筑);
|
|
|
-const matchSummary = async (compilationID, libID, areaID) => {
|
|
|
- const updateBulks = [];
|
|
|
- const areaFilter = { compilationID };
|
|
|
- if (areaID) {
|
|
|
- areaFilter.ID = areaID;
|
|
|
+const matchSummary = async (compilationID, libID, areaID, matchAll) => {
|
|
|
+ if (!compilationID || !libID || !areaID) {
|
|
|
+ return;
|
|
|
}
|
|
|
- const areas = await priceInfoAreaModel.find(areaFilter, '-_id ID name').lean();
|
|
|
- const areaNameMap = {};
|
|
|
- areas.forEach(area => {
|
|
|
- areaNameMap[area.ID] = area.name;
|
|
|
- });
|
|
|
const filter = { libID };
|
|
|
- if (areaID) {
|
|
|
+ if (matchAll) {
|
|
|
+ const areas = await priceInfoAreaModel.find({ compilationID }, 'ID name').lean();
|
|
|
+ const area = areas.find(area => area.ID === areaID);
|
|
|
+ if (!area) {
|
|
|
+ return [];
|
|
|
+ }
|
|
|
+ const rootAreaName = area.name.split('-')[0];
|
|
|
+ const areaIDs = [];
|
|
|
+ areas.forEach(area => {
|
|
|
+ const name = area.name.split('-')[0];
|
|
|
+ if (name === rootAreaName) {
|
|
|
+ areaIDs.push(area.ID);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ filter.areaID = { $in: areaIDs };
|
|
|
+ } else {
|
|
|
filter.areaID = areaID;
|
|
|
}
|
|
|
+
|
|
|
+ const updateBulks = [];
|
|
|
const priceItems = await priceInfoItemModel.find(filter, '-_id ID compilationID name specs unit areaID period').lean();
|
|
|
const summaryItems = await priceInfoSummaryModel.find({}, '-_id ID name specs unit code classCode expString').lean();
|
|
|
const summaryMap = getSummaryMap(summaryItems);
|
|
@@ -594,12 +604,6 @@ const matchSummary = async (compilationID, libID, areaID) => {
|
|
|
code: matched.code,
|
|
|
classCode: matched.classCode,
|
|
|
}
|
|
|
- console.log(matched);
|
|
|
- console.log(updateObj);
|
|
|
- const areaName = areaNameMap[priceItem.areaID];
|
|
|
- /* if (/珠海/.test(areaName)) {
|
|
|
- updateObj.expString = matched.expString;
|
|
|
- } */
|
|
|
updateBulks.push({
|
|
|
updateOne: {
|
|
|
filter: { ID: priceItem.ID, compilationID: priceItem.compilationID, areaID: priceItem.areaID, period: priceItem.period },
|
|
@@ -615,13 +619,29 @@ const matchSummary = async (compilationID, libID, areaID) => {
|
|
|
}
|
|
|
|
|
|
// 获取空数据(没有别名编码)
|
|
|
-const getPriceEmptyData = async (compilationID, libID, areaID) => {
|
|
|
+const getPriceEmptyData = async (compilationID, libID, areaID, matchAll) => {
|
|
|
const lib = await priceInfoLibModel.findOne({ ID: libID }).lean();
|
|
|
- if (!lib) {
|
|
|
+ if (!lib || !areaID) {
|
|
|
return [];
|
|
|
}
|
|
|
const filter = { compilationID, libID, period: lib.period };
|
|
|
- if (areaID) {
|
|
|
+ if (matchAll) {
|
|
|
+ const areas = await priceInfoAreaModel.find({ compilationID }, 'ID name').lean();
|
|
|
+ const area = areas.find(area => area.ID === areaID);
|
|
|
+ console.log(area);
|
|
|
+ if (!area) {
|
|
|
+ return [];
|
|
|
+ }
|
|
|
+ const rootAreaName = area.name.split('-')[0];
|
|
|
+ const areaIDs = [];
|
|
|
+ areas.forEach(area => {
|
|
|
+ const name = area.name.split('-')[0];
|
|
|
+ if (name === rootAreaName) {
|
|
|
+ areaIDs.push(area.ID);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ filter.areaID = { $in: areaIDs };
|
|
|
+ } else {
|
|
|
filter.areaID = areaID;
|
|
|
}
|
|
|
const priceItems = await priceInfoItemModel.find(filter).lean();
|
|
@@ -866,9 +886,9 @@ async function getZheJiangSheetData(from, to) {
|
|
|
const allPriceItems = await priceInfoItemModel.find({ compilationID, areaID: { $in: areaIDs }, libID: { $in: libIDs } }, '-_id libID areaID code name noTaxPrice').lean();
|
|
|
// 材料大类配置
|
|
|
const priceClasses = [
|
|
|
- { name: '水泥', codes: ['5509003', '5509001', '5509002', '5509006'] },
|
|
|
- { name: '钢材', codes: ['2001006', '2003004', '2003008', '2001001', '2001008'] },
|
|
|
- { name: '砂石料', codes: ['5503005', '5503007', '5503013', '5503014', '5505005', '5505016', '5505025', '5505012', '5505013', '1516001', '5503006', '5505019001', '5505019'] },
|
|
|
+ { name: '水泥', codes: ['5509001', '5509002', '5509003'] },
|
|
|
+ { name: '钢材', codes: ['2001001', '2001002', '2001008', '2003004'] },
|
|
|
+ { name: '砂石料', codes: ['5505016', '5503006', '1516001'] },
|
|
|
]
|
|
|
const excelData = [['日期', '地区', '材料大类', '编码', '名称', '价格']];
|
|
|
libs.forEach(lib => {
|