|
@@ -8,42 +8,127 @@ let consts = require('../../main/models/project_consts')
|
|
|
let commonConsts = consts.commonConst;
|
|
|
let _=require("lodash");
|
|
|
let ration_glj = mongoose.model('ration_glj');
|
|
|
+import GLJListModel from '../../glj/models/glj_list_model';
|
|
|
//let std_ration_lib_glj_list_model = require('../../ration_repository/models/glj_repository');
|
|
|
let std_ration_lib_glj_list_model = mongoose.model('std_ration_lib_glj_list');
|
|
|
-let async = require("async");
|
|
|
+let async_n = require("async");
|
|
|
let ration = mongoose.model('ration');
|
|
|
+let ration_coe_facade = require('./ration_coe_facade');
|
|
|
|
|
|
let operationMap={
|
|
|
'ut_create':create_ration_glj,
|
|
|
'ut_update':update_ration_glj,
|
|
|
'ut_delete':delete_ration_glj
|
|
|
+};
|
|
|
+let updateFunctionMap = {
|
|
|
+ 'normalUpdate':normalUpdate,
|
|
|
+ 'marketPriceAdjustUpdate':marketPriceAdjustUpdate
|
|
|
}
|
|
|
|
|
|
-
|
|
|
module.exports={
|
|
|
save:save,
|
|
|
getData:getData,
|
|
|
- deleteByRation:deleteByRation
|
|
|
+ deleteByRation:deleteByRation,
|
|
|
+ getQuantityByProjectGLJ:getQuantityByProjectGLJ
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+/**
|
|
|
+ * 根据项目工料机ID和项目ID取消耗量
|
|
|
+ *
|
|
|
+ * @param {object} condition
|
|
|
+ * @return Array
|
|
|
+ */
|
|
|
+async function getQuantityByProjectGLJ(condition) {
|
|
|
+ let query ={
|
|
|
+ $and:[
|
|
|
+ {'projectID':condition.projectID},
|
|
|
+ {'projectGLJID':{$in:condition.projectGLJIDList}}
|
|
|
+ ]
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ let results = await ration_glj.find(query,['projectGLJID','quantity']);
|
|
|
+ return combineQuantity(results);
|
|
|
+}
|
|
|
+
|
|
|
+function combineQuantity(results) {
|
|
|
+ var resultMap = {};
|
|
|
+ _.forEach(results,function (data) {
|
|
|
+ if(resultMap.hasOwnProperty(data.projectGLJID)){
|
|
|
+ resultMap[data.projectGLJID] += data.quantity;
|
|
|
+ }else {
|
|
|
+ resultMap[data.projectGLJID] = data.quantity;
|
|
|
+ }
|
|
|
+ })
|
|
|
+
|
|
|
+ var resultList =[];
|
|
|
+ for(let key in resultMap){
|
|
|
+ let newObject = {
|
|
|
+ 'projectGLJID':key,
|
|
|
+ 'quantity':resultMap[key]
|
|
|
+ }
|
|
|
+ resultList.push(newObject)
|
|
|
+ }
|
|
|
+ return resultList;
|
|
|
}
|
|
|
|
|
|
+
|
|
|
function get_lib_glj_info(ration_glj) {
|
|
|
return function (cb) {
|
|
|
- std_ration_lib_glj_list_model.findOne({'ID':ration_glj.GLJID},(err,glj)=>{
|
|
|
+ std_ration_lib_glj_list_model.findOne({'ID':ration_glj.GLJID,'repositoryId':ration_glj.glj_repository_id},(err,glj)=>{
|
|
|
if(err){
|
|
|
cb(err,'')
|
|
|
- }else {
|
|
|
+ }else if(glj){
|
|
|
ration_glj.name = glj.name;
|
|
|
ration_glj.code = glj.code;
|
|
|
ration_glj.unit = glj.unit;
|
|
|
ration_glj.specs = glj.specs;
|
|
|
ration_glj.basePrice = glj.basePrice;
|
|
|
ration_glj.gljDistType = glj.gljDistType;
|
|
|
- cb(null,ration_glj)
|
|
|
+ ration_glj.type = glj.gljType;
|
|
|
+ getInfoFromProjectGLJ(ration_glj).then(function (result) {
|
|
|
+ if(result){
|
|
|
+ cb(null,result);
|
|
|
+ }else {
|
|
|
+ cb(new Error('get project glj error'),null);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }else {
|
|
|
+ cb(null,null);
|
|
|
}
|
|
|
})
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+async function getInfoFromProjectGLJ(ration_glj) {
|
|
|
+ let data = {
|
|
|
+ glj_repository_id: ration_glj.glj_repository_id,
|
|
|
+ project_id: ration_glj.projectID,
|
|
|
+ code: ration_glj.code,
|
|
|
+ name: ration_glj.name,
|
|
|
+ specs: ration_glj.specs,
|
|
|
+ unit: ration_glj.unit,
|
|
|
+ type: ration_glj.type,
|
|
|
+ type_of_work: ration_glj.type,
|
|
|
+ base_price: ration_glj.basePrice,
|
|
|
+ market_price: ration_glj.basePrice
|
|
|
+ };
|
|
|
+ try {
|
|
|
+ let projectGljModel = new GLJListModel();
|
|
|
+ let result = await projectGljModel.addList(data);
|
|
|
+ ration_glj.marketPrice=result.unit_price.market_price;
|
|
|
+ ration_glj.adjustPrice=result.adjust_price;
|
|
|
+ ration_glj.projectGLJID=result.id;
|
|
|
+ ration_glj.isEstimate=result.is_evaluate;
|
|
|
+ return ration_glj;
|
|
|
+ } catch (err) {
|
|
|
+ console.log(err);
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
function create_ration_glj(user_id,datas) {
|
|
|
return function (callback) {
|
|
|
let ration_glj_list=datas.ration_glj_list;
|
|
@@ -52,7 +137,7 @@ function create_ration_glj(user_id,datas) {
|
|
|
ration_glj_list[i].ID = uuidV1();
|
|
|
tasks.push(get_lib_glj_info(ration_glj_list[i]))
|
|
|
}
|
|
|
- async.parallel(tasks,(err,results)=>{
|
|
|
+ async_n.parallel(tasks,(err,results)=>{
|
|
|
if(err){
|
|
|
callback(err,results)
|
|
|
}else {
|
|
@@ -75,7 +160,16 @@ function create_ration_glj(user_id,datas) {
|
|
|
}
|
|
|
|
|
|
function update_ration_glj(user_id,datas) {
|
|
|
- return function (callback) {
|
|
|
+ if(datas.updateFunction){
|
|
|
+ return updateFunctionMap[datas.updateFunction](user_id,datas);
|
|
|
+ }else {
|
|
|
+ return normalUpdate(user_id,datas);
|
|
|
+ }
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+function normalUpdate(user_id,datas){
|
|
|
+ return function(callback) {
|
|
|
ration_glj.update(datas.query,datas.doc,(err,result)=>{
|
|
|
if(err){
|
|
|
callback(err,'');
|
|
@@ -90,11 +184,49 @@ function update_ration_glj(user_id,datas) {
|
|
|
}
|
|
|
callback(null,returndata)
|
|
|
}
|
|
|
+ })
|
|
|
+ }
|
|
|
+}
|
|
|
|
|
|
+
|
|
|
+function marketPriceAdjustUpdate(user_id,datas) {
|
|
|
+ return function (callback) {
|
|
|
+ updateprojectGljAndRationGLJ(datas.query,datas.doc).then((result)=>{
|
|
|
+ let returndata ={
|
|
|
+ moduleName:'ration_glj',
|
|
|
+ data:{
|
|
|
+ updateTpye:commonConsts.UT_UPDATE,
|
|
|
+ query:datas.query,
|
|
|
+ doc:result
|
|
|
+ }
|
|
|
+ }
|
|
|
+ callback(null,returndata)
|
|
|
})
|
|
|
+
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+async function updateprojectGljAndRationGLJ(query,doc) {
|
|
|
+ try {
|
|
|
+ let gljListModel = new GLJListModel();
|
|
|
+ let result = await gljListModel.modifyMarketPrice(doc);
|
|
|
+ let updateDoc ={
|
|
|
+ marketPrice:result.unit_price.market_price,
|
|
|
+ marketPriceAdjust:doc.market_price,
|
|
|
+ projectGLJID:result.id,
|
|
|
+ isEstimate:result.is_evaluate,
|
|
|
+ name : result.name,
|
|
|
+ code:result.code
|
|
|
+ };
|
|
|
+ let updateresult = await ration_glj.findOneAndUpdate(query, updateDoc)
|
|
|
+ return updateDoc;
|
|
|
+
|
|
|
+ } catch (error) {
|
|
|
+ console.log(error);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
function delete_ration_glj(user_id,datas) {
|
|
|
return function (callback) {
|
|
|
if(datas.deleteType=="RATION"){
|
|
@@ -109,16 +241,30 @@ function delete_ration_glj(user_id,datas) {
|
|
|
|
|
|
function deleteByRation(datas,callback) {
|
|
|
let data = datas.updateData;
|
|
|
- ration_glj.deleteMany({projectID: data.projectID, rationID: data.ID},callback);
|
|
|
+ let tasks=[];
|
|
|
+ tasks.push(deleteGLJList(data));
|
|
|
+ tasks.push(ration_coe_facade.delete_ration_coe(data))
|
|
|
+ async_n.parallel(tasks,function (err,result) {
|
|
|
+ commonCallback(callback,result,err)
|
|
|
+ })
|
|
|
+}
|
|
|
+
|
|
|
+function deleteGLJList(data) {
|
|
|
+ return function (callback) {
|
|
|
+ ration_glj.deleteMany({projectID: data.projectID, rationID: data.ID},(err,result)=>{
|
|
|
+ commonCallback(callback,result,err)
|
|
|
+ });
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
+
|
|
|
function deleteByBill(user_id,datas,callback) {
|
|
|
let tasks = [];
|
|
|
tasks.push(startingTask("deleteByBill"));
|
|
|
tasks.push(getRationsByBill(datas));
|
|
|
tasks.push(deleteRationsbyBill(user_id,datas));
|
|
|
tasks.push(deleteByMultiRations(datas));
|
|
|
- async.waterfall(tasks,function (err,results) {
|
|
|
+ async_n.waterfall(tasks,function (err,results) {
|
|
|
if(err){
|
|
|
callback(err,'');
|
|
|
}else {
|
|
@@ -189,19 +335,16 @@ function deleteByMultiRations(datas) {
|
|
|
var deleteOne=function (ration) {
|
|
|
return function (callback) {
|
|
|
ration_glj.deleteMany({projectID: ration.projectID, rationID: ration.ID},function (err,result) {
|
|
|
- if(err){
|
|
|
- callback(err,'');
|
|
|
- }else {
|
|
|
- callback(null,result);
|
|
|
- }
|
|
|
+ commonCallback(callback,result,err)
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
let rations = results.rations;
|
|
|
for(let i=0;i<rations.length;i++){
|
|
|
delete_tasks.push(deleteOne(rations[i]._doc));
|
|
|
+ delete_tasks.push(ration_coe_facade.delete_ration_coe(rations[i]._doc));
|
|
|
}
|
|
|
- async.parallel(delete_tasks,(err,results)=>{
|
|
|
+ async_n.parallel(delete_tasks,(err,results)=>{
|
|
|
if (err){
|
|
|
deleteCallBack(err,'')
|
|
|
}else {
|
|
@@ -221,15 +364,15 @@ function deleteByRation(doc) {
|
|
|
*/
|
|
|
|
|
|
function save (user_id, datas, callback) {
|
|
|
- let perations=[];
|
|
|
+ let operations=[];
|
|
|
if(_.isArray(datas)){
|
|
|
for(let i=0;i<datas.length;i++){
|
|
|
- perations.push(operationMap[datas[i].updateType](user_id,datas[i]));
|
|
|
+ operations.push(operationMap[datas[i].updateType](user_id,datas[i]));
|
|
|
}
|
|
|
}else {
|
|
|
- perations.push(operationMap[datas.updateType](user_id,datas));
|
|
|
+ operations.push(operationMap[datas.updateType](user_id,datas));
|
|
|
}
|
|
|
- async.parallel(perations,function (err,results) {
|
|
|
+ async_n.parallel(operations,function (err,results) {
|
|
|
if(err){
|
|
|
callback(err,'');
|
|
|
}else {
|
|
@@ -243,7 +386,6 @@ function save (user_id, datas, callback) {
|
|
|
}
|
|
|
|
|
|
function getData(projectID, callback) {
|
|
|
- console.log("ration_glj getData function");
|
|
|
ration_glj.find({'projectID':projectID},(err,datas)=>{
|
|
|
if(err){
|
|
|
callback(1, '', null);
|
|
@@ -251,6 +393,12 @@ function getData(projectID, callback) {
|
|
|
callback(0, consts.projectConst.RATION_GLJ, datas);
|
|
|
}
|
|
|
})
|
|
|
+}
|
|
|
|
|
|
-
|
|
|
-}
|
|
|
+function commonCallback(callback,result,err) {
|
|
|
+ if(err){
|
|
|
+ callback(err,'');
|
|
|
+ }else {
|
|
|
+ callback(null,result);
|
|
|
+ }
|
|
|
+}
|