|
@@ -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();
|