|
@@ -0,0 +1,256 @@
|
|
|
+/**
|
|
|
+ * Created by chen on 2017/6/29.
|
|
|
+ */
|
|
|
+
|
|
|
+let mongoose = require('mongoose');
|
|
|
+const uuidV1 = require('uuid/v1')
|
|
|
+let consts = require('../../main/models/project_consts')
|
|
|
+let commonConsts = consts.commonConst;
|
|
|
+let _=require("lodash");
|
|
|
+let ration_glj = mongoose.model('ration_glj');
|
|
|
+//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 ration = mongoose.model('ration');
|
|
|
+
|
|
|
+let operationMap={
|
|
|
+ 'ut_create':create_ration_glj,
|
|
|
+ 'ut_update':update_ration_glj,
|
|
|
+ 'ut_delete':delete_ration_glj
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+module.exports={
|
|
|
+ save:save,
|
|
|
+ getData:getData,
|
|
|
+ deleteByRation:deleteByRation
|
|
|
+}
|
|
|
+
|
|
|
+function get_lib_glj_info(ration_glj) {
|
|
|
+ return function (cb) {
|
|
|
+ std_ration_lib_glj_list_model.findOne({'ID':ration_glj.GLJID},(err,glj)=>{
|
|
|
+ if(err){
|
|
|
+ cb(err,'')
|
|
|
+ }else {
|
|
|
+ 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)
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+function create_ration_glj(user_id,datas) {
|
|
|
+ return function (callback) {
|
|
|
+ let ration_glj_list=datas.ration_glj_list;
|
|
|
+ var tasks=[];
|
|
|
+ for(let i =0;i<ration_glj_list.length;i++){
|
|
|
+ ration_glj_list[i].ID = uuidV1();
|
|
|
+ tasks.push(get_lib_glj_info(ration_glj_list[i]))
|
|
|
+ }
|
|
|
+ async.parallel(tasks,(err,results)=>{
|
|
|
+ if(err){
|
|
|
+ callback(err,results)
|
|
|
+ }else {
|
|
|
+ ration_glj.insertMany(results,(err,doc)=>{
|
|
|
+ if(err){
|
|
|
+ callback(err,null);
|
|
|
+ }else {
|
|
|
+ let returndata ={
|
|
|
+ updateTpye:commonConsts.UT_CREATE,
|
|
|
+ moduleName:'ration_glj',
|
|
|
+ data:results
|
|
|
+ }
|
|
|
+ callback(null,returndata)
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+function update_ration_glj(user_id,datas) {
|
|
|
+ return function (callback) {
|
|
|
+ ration_glj.update(datas.query,datas.doc,(err,result)=>{
|
|
|
+ if(err){
|
|
|
+ callback(err,'');
|
|
|
+ }else {
|
|
|
+ let returndata ={
|
|
|
+ moduleName:'ration_glj',
|
|
|
+ data:{
|
|
|
+ updateTpye:commonConsts.UT_UPDATE,
|
|
|
+ query:datas.query,
|
|
|
+ doc:datas.doc
|
|
|
+ }
|
|
|
+ }
|
|
|
+ callback(null,returndata)
|
|
|
+ }
|
|
|
+
|
|
|
+ })
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+function delete_ration_glj(user_id,datas) {
|
|
|
+ return function (callback) {
|
|
|
+ if(datas.deleteType=="RATION"){
|
|
|
+ deleteByRation(datas,callback);
|
|
|
+ }else if(datas.deleteType=="BILL"){
|
|
|
+ deleteByBill(user_id,datas,callback);
|
|
|
+ } else{
|
|
|
+ deleteByID(datas,callback);
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+function deleteByRation(datas,callback) {
|
|
|
+ let data = datas.updateData;
|
|
|
+ ration_glj.deleteMany({projectID: data.projectID, rationID: data.ID},callback);
|
|
|
+}
|
|
|
+
|
|
|
+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) {
|
|
|
+ if(err){
|
|
|
+ callback(err,'');
|
|
|
+ }else {
|
|
|
+ callback(null,results);
|
|
|
+ }
|
|
|
+ })
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+function deleteByID(datas,callback){
|
|
|
+ ration_glj.deleteOne(datas.query,(err,result)=>{
|
|
|
+ if(err){
|
|
|
+ callback(err,'');
|
|
|
+ }else {
|
|
|
+ let returndata ={
|
|
|
+ moduleName:'ration_glj',
|
|
|
+ data:{
|
|
|
+ updateTpye:commonConsts.UT_DELETE,
|
|
|
+ query:datas.query,
|
|
|
+ }
|
|
|
+ }
|
|
|
+ callback(null,returndata)
|
|
|
+ }
|
|
|
+ })
|
|
|
+}
|
|
|
+
|
|
|
+function startingTask(processName){
|
|
|
+ return function(asyncCallBack){
|
|
|
+ var result = {
|
|
|
+ processName : processName
|
|
|
+ };
|
|
|
+ asyncCallBack(null, result);
|
|
|
+ };
|
|
|
+}
|
|
|
+
|
|
|
+function getRationsByBill(datas) {
|
|
|
+ return function (results,callback) {
|
|
|
+ ration.find({projectID:datas.updateData.projectID,billsItemID:datas.updateData.ID},function (err,rations) {
|
|
|
+ if(err){
|
|
|
+ callback(err,'')
|
|
|
+ }else {
|
|
|
+ results.rations=rations;
|
|
|
+ callback(null,results)
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+function deleteRationsbyBill (user_id,datas){
|
|
|
+ return function (results,callback) {
|
|
|
+ let deleteInfo ={
|
|
|
+ deleteInfo :{deleted: true, deleteDateTime: new Date(), deleteBy: user_id}
|
|
|
+ };
|
|
|
+ ration.update({projectID: datas.updateData.projectID, billsItemID:datas.updateData.ID},deleteInfo,{multi: true},(err,deleteresults)=>{
|
|
|
+ if(err){
|
|
|
+ callback(err,'');
|
|
|
+ }else {
|
|
|
+ callback(null,results);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+function deleteByMultiRations(datas) {
|
|
|
+ return function (results,deleteCallBack) {
|
|
|
+ var delete_tasks = [];
|
|
|
+ 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);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ let rations = results.rations;
|
|
|
+ for(let i=0;i<rations.length;i++){
|
|
|
+ delete_tasks.push(deleteOne(rations[i]._doc));
|
|
|
+ }
|
|
|
+ async.parallel(delete_tasks,(err,results)=>{
|
|
|
+ if (err){
|
|
|
+ deleteCallBack(err,'')
|
|
|
+ }else {
|
|
|
+ deleteCallBack(null,results)
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+/*
|
|
|
+function deleteByRation(doc) {
|
|
|
+ return function (callback){
|
|
|
+ ration_glj.deleteMany({projectID: doc.updateData.projectID, rationID: doc.updateData.ID},callback);
|
|
|
+ }
|
|
|
+}
|
|
|
+*/
|
|
|
+
|
|
|
+function save (user_id, datas, callback) {
|
|
|
+ let perations=[];
|
|
|
+ if(_.isArray(datas)){
|
|
|
+ for(let i=0;i<datas.length;i++){
|
|
|
+ perations.push(operationMap[datas[i].updateType](user_id,datas[i]));
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ perations.push(operationMap[datas.updateType](user_id,datas));
|
|
|
+ }
|
|
|
+ async.parallel(perations,function (err,results) {
|
|
|
+ if(err){
|
|
|
+ callback(err,'');
|
|
|
+ }else {
|
|
|
+ if(results.length==1){
|
|
|
+ callback(null,results[0])
|
|
|
+ }else {
|
|
|
+ callback(null,results)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+}
|
|
|
+
|
|
|
+function getData(projectID, callback) {
|
|
|
+ console.log("ration_glj getData function");
|
|
|
+ ration_glj.find({'projectID':projectID},(err,datas)=>{
|
|
|
+ if(err){
|
|
|
+ callback(1, '', null);
|
|
|
+ }else {
|
|
|
+ callback(0, consts.projectConst.RATION_GLJ, datas);
|
|
|
+ }
|
|
|
+ })
|
|
|
+
|
|
|
+
|
|
|
+}
|