/** * Created by Mai on 2017/1/18. */ import UnitPriceFileModel from "../../glj/models/unit_price_file_model"; let counter = require("../../../public/counter/counter.js"); let newProjController = require('../controllers/new_proj_controller'); let copyProjController = require('../controllers/copy_proj_controller'); let Projects = require("./project_schema"); let projectType = { folder: 'Folder', tender: 'Tender', project: 'Project', engineering: 'Engineering', }; let ProjectsDAO = function(){}; ProjectsDAO.prototype.getUserProjects = function(userId, callback){ Projects.find({'$or': [{'userID': userId, 'deleteInfo': null}, {'userID': userId, 'deleteInfo.deleted': {'$in': [null, false]}}]}, '-_id', function(err, templates){ if (err) { callback(1, 'Error', null); } else { callback(0, '', templates); } }); }; ProjectsDAO.prototype.getUserProject = function (userId, ProjId, callback) { Projects.findOne({userID: userId, ID: ProjId}, '-_id', function(err, template){ if (err) { callback(1, '找不到标段数据', null); } else { callback(0, '', template); } }); } ProjectsDAO.prototype.updateUserProjects = async function(userId, datas, callback){ let data, project, updateLength = 0, hasError = false, deleteInfo = null, i, newProject; let updateAll = function (err) { if (!err){ updateLength += 1; if (updateLength === datas.length) { callback(0, '', datas); } } else { hasError = true; console.log(err); callback(1, '提交数据出错.', null); } }; if (datas){ for (i = 0; i < datas.length && !hasError; i++){ data = datas[i]; data.updateData.name = data.updateData.name !== undefined ? data.updateData.name.trim() : null; if (data.updateType === 'update') { Projects.update({userID: userId, ID: data.updateData.ID}, data.updateData, updateAll) } else if (data.updateType === 'new') { data.updateData['userID'] = userId; data.updateData['createDateTime'] = new Date(); newProject = new Projects(data.updateData); // 查找同级是否存在同名数据 let exist = await this.isExist(data.updateData.name, data.updateData.ParentID); if (exist) { callback(1, '同级目录已存在相同名称数据.', null); return; } newProject.save(async function (err, result) { if (!err && result._doc.projType === projectType.tender) { newProjController.copyTemplateData(data.updateData.property, newProject.ID, updateAll); // 新增单价文件 let unitPriceFileModel = new UnitPriceFileModel(); let insertData = { name: data.updateData.name, project_id: data.updateData.ID }; let addResult = await unitPriceFileModel.add(insertData); if (!addResult) { callback(1, '新增单价文件失败.', null); return; } } else { updateAll(err); } }); } else if (data.updateType === 'delete') { deleteInfo = {}; deleteInfo['deleted'] = true; deleteInfo['deleteDateTime'] = new Date(); deleteInfo['deleteBy'] = userId; data.updateData['deleteInfo'] = deleteInfo; Projects.update({userID: userId, ID: data.updateData.ID}, data.updateData, updateAll); } else { hasError = true; callback(1, '提交数据错误.', null); } } } }; ProjectsDAO.prototype.copyUserProjects = function (userId, datas, callback) { let data, project, updateLength = 0, hasError = false, deleteInfo = null, tempType = 1, i; let updateAll = function (err) { if (!err){ updateLength += 1; if (updateLength === datas.length) { callback(0, '', datas); } } else { hasError = true; callback(1, '提交数据出错.', null); } }; if (datas) { for (i = 0; i < datas.length && !hasError; i++) { data = datas[i]; if (data.updateType === 'update') { Projects.update({userID: userId, ID: data.updateData.ID}, data.updateData, updateAll) } else if (data.updateType === 'copy') { data.updateData['userID'] = userId; data.updateData['createDateTime'] = new Date(); let newProject = new Projects(data.updateData); newProject['srcProjectId'] = data.srcProjectId; newProject.save(function (err, result) { if (!err && result._doc.projType === 'Tender') { copyProjController.copyProjectData(newProject.srcProjectId, result._doc.ID, updateAll); } else { updateAll(err); } }); } else { hasError = true; callback(1, '提交数据错误', null); } } } }; ProjectsDAO.prototype.rename = function (userId, projectId, newName, callback){ Projects.update({userID: userId, ID: projectId}, {name: newName}, function(err){ if (err){ callback(1, '项目不存在.'); } else { callback(0, ''); } }); }; ProjectsDAO.prototype.beforeOpenProject = function (userId, projectId, updateData, callback){ updateData['recentDateTime'] = new Date(); Projects.update({userID: userId, ID: projectId}, updateData, function(err){ if (err){ callback(1, '项目不存在.'); } else { callback(0, ''); } }); }; ProjectsDAO.prototype.getNewProjectID = function (count, callback) { counter.counterDAO.getIDAfterCount(counter.moduleName.project, count, function (err, result) { let highID = result.value.sequence_value; if (!err) { callback(0, '', {lowID: highID - count + 1, highID: highID}); } else { callback(1, '获取主键失败', null); } }); }; ProjectsDAO.prototype.getProject = function (key, callback) { if (callback) { Projects.findOne({'_id': key}, function (err, result) { if (err) { callback(1, '查找标段失败'); } else { callback(0, result); } }); } else { return Projects.findOne({'ID': key}).exec(); } }; /** * 整理工程专业对应标准库数据 * * @param {Object} data * @return {Boolean} */ ProjectsDAO.prototype.isExist = async function(name, parentID) { parentID = parseInt(parentID); if (name === '' || isNaN(parentID)) { return true; } let count = await Projects.count({ParentID: parentID, name: name}); return count > 0; }; module.exports ={ project: new ProjectsDAO(), projType: projectType };