|  | @@ -297,29 +297,57 @@ class GljDao  extends OprDao{
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      static addGljItems (repId, lastOpr, items, callback) {
 | 
	
		
			
				|  |  |          if (items && items.length > 0) {
 | 
	
		
			
				|  |  | -            counter.counterDAO.getIDAfterCount(counter.moduleName.GLJ, items.length, function(err, result){
 | 
	
		
			
				|  |  | -                var maxId = result.sequence_value;
 | 
	
		
			
				|  |  | -                var arr = [];
 | 
	
		
			
				|  |  | -                for (var i = 0; i < items.length; i++) {
 | 
	
		
			
				|  |  | -                    var obj = new gljModel(items[i]);
 | 
	
		
			
				|  |  | -                    obj.ID = (maxId - (items.length - 1) + i);
 | 
	
		
			
				|  |  | -                    obj.repositoryId = repId;
 | 
	
		
			
				|  |  | -                    arr.push(obj);
 | 
	
		
			
				|  |  | +            const codes = [];
 | 
	
		
			
				|  |  | +            items.forEach(item => codes.push(item.code));
 | 
	
		
			
				|  |  | +            gljModel.find({repositoryId: repId, code: {$in: codes}}, '-_id code', {lean: true}, (err, codeData) => {
 | 
	
		
			
				|  |  | +                if (err) {
 | 
	
		
			
				|  |  | +                    callback(true, '判断编码唯一性失败', false);
 | 
	
		
			
				|  |  | +                    return;
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  | -                gljModel.collection.insert(arr, null, function(err, docs){
 | 
	
		
			
				|  |  | -                    if (err) {
 | 
	
		
			
				|  |  | -                        callback(true, "Fail to add", false);
 | 
	
		
			
				|  |  | +                const insertData = [];
 | 
	
		
			
				|  |  | +                const failCode = [];
 | 
	
		
			
				|  |  | +                items.forEach(item => {
 | 
	
		
			
				|  |  | +                    const matchData = codeData.find(codeItem => codeItem.code === item.code);
 | 
	
		
			
				|  |  | +                    if (!matchData) {
 | 
	
		
			
				|  |  | +                        insertData.push(item);
 | 
	
		
			
				|  |  |                      } else {
 | 
	
		
			
				|  |  | +                        failCode.push(item.code);
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                });
 | 
	
		
			
				|  |  | +                if (!insertData.length) {
 | 
	
		
			
				|  |  | +                    callback(false, 'empty data', {insertData, failCode});
 | 
	
		
			
				|  |  | +                    return;
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +                counter.counterDAO.getIDAfterCount(counter.moduleName.GLJ, items.length, (counterErr, counterData) => {
 | 
	
		
			
				|  |  | +                    if (counterErr) {
 | 
	
		
			
				|  |  | +                        callback(true, '获取人材机ID失败', false);
 | 
	
		
			
				|  |  | +                        return;
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                    const maxId = counterData.sequence_value;
 | 
	
		
			
				|  |  | +                    for (let i = 0; i < insertData.length; i++) {
 | 
	
		
			
				|  |  | +                        insertData[i].ID = (maxId - (insertData.length - 1) + i);
 | 
	
		
			
				|  |  | +                        insertData[i].repositoryId = repId;
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                    const task = [];
 | 
	
		
			
				|  |  | +                    insertData.forEach(item => {
 | 
	
		
			
				|  |  | +                        task.push({
 | 
	
		
			
				|  |  | +                            insertOne: {document: item}
 | 
	
		
			
				|  |  | +                        });
 | 
	
		
			
				|  |  | +                    });
 | 
	
		
			
				|  |  | +                    gljModel.bulkWrite(task, (insertErr, rst) => {
 | 
	
		
			
				|  |  | +                        if (insertErr) {
 | 
	
		
			
				|  |  | +                            callback(true, '新增数据失败', false);
 | 
	
		
			
				|  |  | +                            return;
 | 
	
		
			
				|  |  | +                        }
 | 
	
		
			
				|  |  |                          GljDao.updateOprArr({ID: repId}, lastOpr, moment(Date.now()).format('YYYY-MM-DD HH:mm:ss'), function (err) {
 | 
	
		
			
				|  |  |                              if(err){
 | 
	
		
			
				|  |  |                                  callback(true, "Fail to update Operator", false);
 | 
	
		
			
				|  |  | -                            }
 | 
	
		
			
				|  |  | -                            else{
 | 
	
		
			
				|  |  | -                                callback(false, "Add successfully", docs);
 | 
	
		
			
				|  |  | +                            } else{
 | 
	
		
			
				|  |  | +                                callback(false, "Add successfully", {insertData, failCode});
 | 
	
		
			
				|  |  |                              }
 | 
	
		
			
				|  |  |                          });
 | 
	
		
			
				|  |  | -                    }
 | 
	
		
			
				|  |  | -                })
 | 
	
		
			
				|  |  | +                    });
 | 
	
		
			
				|  |  | +                });
 | 
	
		
			
				|  |  |              });
 | 
	
		
			
				|  |  |          } else {
 | 
	
		
			
				|  |  |              callback(true, "No source", false);
 |