fee_rates_facade.js 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317
  1. /**
  2. * Created by chen on 2017/8/2.
  3. */
  4. let async_n = require("async");
  5. let mongoose = require('mongoose');
  6. let feeRateModel = mongoose.model('fee_rates');
  7. let feeRateFileModel = mongoose.model('fee_rate_file');
  8. let std_fee_rate_lib_model = mongoose.model('std_fee_rate_libs');
  9. let project_feerate_temp = mongoose.model('project_feerate_temp');
  10. let consts = require('../../main/models/project_consts');
  11. let _=require("lodash");
  12. let template = require('../controllers/feerate_template');
  13. const uuidV1 = require('uuid/v1');
  14. module.exports={
  15. save:save,
  16. getData:getData,
  17. getFeeRateStandardsByProjectID:getFeeRateStandardsByProjectID,
  18. changeFeeRateStandard:changeFeeRateStandard,
  19. checkFeeRateName:checkFeeRateName,
  20. getChangeInfo:getChangeInfo,
  21. changeFeeRateFileFromCurrent:changeFeeRateFileFromCurrent,
  22. changeFeeRateFileFromOthers:changeFeeRateFileFromOthers
  23. };
  24. let operationMap={
  25. 'ut_create':create_fee_rate,
  26. 'ut_update':update_fee_rate,
  27. 'ut_delete':delete_fee_rate
  28. };
  29. let updateFunctionMap = {
  30. 'normalUpdate':normalUpdate,
  31. 'update_rates':update_rates,
  32. 'updateStatusBySelected':updateStatusBySelected,
  33. 'feeRateFileSaveAs':feeRateFileSaveAs
  34. }
  35. //测试数据 key projectID, value feeRateFileID
  36. let project_feeRateF_map={
  37. 99:'da059df1-7c18-11e7-9e2f-1390b52643b4'
  38. }
  39. function create_fee_rate() {
  40. }
  41. function update_fee_rate(user_id,datas) {
  42. if(datas.updateFunction){
  43. return updateFunctionMap[datas.updateFunction](user_id,datas);
  44. }else {
  45. return normalUpdate(user_id,datas);
  46. }
  47. }
  48. function updateStatusBySelected(user_id,datas) {
  49. return function(callback){
  50. feeRateModel.bulkWrite(generateUpdateTaks(datas.tasks),function (err,data) {
  51. console.log(data);
  52. commonCallback(callback,data,err);
  53. })
  54. }
  55. }
  56. function feeRateFileSaveAs(user_id,datas) {
  57. return function(callback){
  58. let doc = datas.doc;
  59. let projectID=datas.query.projectID;
  60. let feeRate={
  61. ID:doc.feeRateID,
  62. rates:doc.rates
  63. };
  64. delete doc._id;
  65. delete doc.rates;
  66. creatFeeRateFile(doc,feeRate,projectID).then(function (result) {
  67. commonCallback(callback,result,result.err);
  68. })
  69. }
  70. }
  71. async function creatFeeRateFile(feeRateFile,feeRate,projectID) {//预留projectID
  72. let result={
  73. err:null
  74. }
  75. try {
  76. await project_feerate_temp.findOneAndUpdate({projectID:projectID},{feeRateFileID:feeRateFile.ID});
  77. await feeRateFileModel.create(feeRateFile);
  78. await feeRateModel.create(feeRate);
  79. }catch (err){
  80. console.log(err);
  81. result.err=err;
  82. }
  83. return result;
  84. }
  85. function normalUpdate(user_id,datas) {
  86. return function(callback){
  87. console.log(datas)
  88. callback(null,'');
  89. }
  90. }
  91. function generateUpdateTaks(updateTasks) {
  92. var tasks=[];
  93. for(let u of updateTasks){
  94. let t ={
  95. updateOne:{
  96. filter:u.query,
  97. update: u.doc
  98. }
  99. }
  100. tasks.push(t);
  101. }
  102. return tasks;
  103. }
  104. function update_rates(user_id,datas) {
  105. return function(callback){
  106. feeRateModel.findOne(datas.query,['rates'],function(err, data){
  107. let doc = datas.doc;
  108. if(_.isArray(doc)){
  109. _.forEach(doc,function (item) {
  110. data.rates[item.rateIndex]=item.rate;
  111. })
  112. }else {
  113. data.rates[doc.rateIndex]=doc.rate;
  114. }
  115. data.save(function (err) {
  116. commonCallback(callback,'',err);
  117. });
  118. })
  119. }
  120. }
  121. function delete_fee_rate() {
  122. }
  123. function save (user_id, datas, callback) {
  124. let operations=[];
  125. if(_.isArray(datas)){
  126. for(let i=0;i<datas.length;i++){
  127. operations.push(operationMap[datas[i].updateType](user_id,datas[i]));
  128. }
  129. }else {
  130. operations.push(operationMap[datas.updateType](user_id,datas));
  131. }
  132. async_n.parallel(operations,function (err,results) {
  133. if(err){
  134. callback(err,'');
  135. }else {
  136. if(results.length==1){
  137. callback(null,results[0])
  138. }else {
  139. callback(null,results)
  140. }
  141. }
  142. })
  143. }
  144. function getData(projectID, callback) {
  145. getFeeRateData(projectID).then(function (result) {
  146. if(result.err){
  147. callback(1, '', null);
  148. }else {
  149. //feeRateModel
  150. callback(0, consts.projectConst.FEERATE, result.datas);
  151. }
  152. })
  153. }
  154. async function getFeeRateData(projectID) {
  155. // to do 需根据projectID查找对应的费率文件
  156. let result={
  157. err:null
  158. }
  159. try {
  160. //
  161. let tem = await project_feerate_temp.findOne({projectID:projectID});//暂时取tem表的记录,写死为99
  162. if (tem){
  163. let feeRateData = await feeRateFileModel.findOne({'ID':tem.feeRateFileID,deleteInfo:null});
  164. let feeRate = await feeRateModel.findOne({ID:feeRateData.feeRateID});
  165. feeRateData._doc.rates = feeRate.rates;
  166. //
  167. feeRateData._doc.usageProjects=getUsageProjects(feeRateData.ID);
  168. result.datas = feeRateData;
  169. }else {
  170. result.datas=[];
  171. }
  172. }catch (err){
  173. console.log(err);
  174. result.err=err;
  175. }
  176. return result;
  177. }
  178. function getUsageProjects(feeRateID){
  179. //从数据库中查,项目结构暂时还没做 todo
  180. var projects = [];
  181. projects.push({ID:99,name:'单价调整'});
  182. projects.push({ID:100,name:'工程02'});
  183. projects.push({ID:101,name:'建筑工程'});
  184. return projects;
  185. }
  186. function commonCallback(callback,result,err) {
  187. if(err){
  188. callback(err,'');
  189. }else {
  190. callback(null,result);
  191. }
  192. }
  193. function getFeeRateStandardsByProjectID(rootProjectID) {
  194. //这里应该从项目配置中读取 to do, 暂时使用模板文件里的数据
  195. let t1 = template.feerate_template1;
  196. let t2 = template.feerate_template2;
  197. let feeRateStandards=[];
  198. feeRateStandards.push({ID:t1.ID,libName:t1.libName});
  199. feeRateStandards.push({ID:t2.ID,libName:t2.libName});
  200. return feeRateStandards;
  201. }
  202. async function changeFeeRateStandard(jdata){
  203. let data = JSON.parse(jdata);
  204. let template = await std_fee_rate_lib_model.findOne({"ID":data.newLibID});
  205. let newFeeRate = {};
  206. newFeeRate.ID =uuidV1();
  207. newFeeRate.rates=template.rates;
  208. await feeRateModel.create(newFeeRate);
  209. let doc={
  210. libID:data.newLibID,
  211. libName:template.libName,
  212. feeRateID: newFeeRate.ID
  213. };
  214. let deleteInfo = {deleted: true, deleteDateTime: new Date(), deleteBy: data.user_id};
  215. await feeRateFileModel.findOneAndUpdate({ID:data.feeRateFileID,deleteInfo:null},doc);
  216. await feeRateModel.findOneAndUpdate({ID:data.feeRateID},{deleteInfo:deleteInfo});
  217. doc.rates=newFeeRate.rates;
  218. return doc;
  219. }
  220. async function checkFeeRateName(jdata) {
  221. let data = JSON.parse(jdata);
  222. let count = await feeRateFileModel.count({rootProjectID:data.rootProjectID,name:data.name,deleteInfo:null});
  223. if(count>0){
  224. return true;
  225. }
  226. return false;
  227. }
  228. async function getChangeInfo(jdata){
  229. let data = JSON.parse(jdata);
  230. //{ projectID: 99, user_id: '76075' }
  231. let result={};
  232. let currentProject = {projectID:99,name:'建设项目1'};//dummy 数据
  233. currentProject.currentOptions=await feeRateFileModel.find({rootProjectID:data.projectID,deleteInfo:null},['ID','name']);
  234. //根据用户ID 找除了当前项目的其它建设项目;
  235. let others = [
  236. {projectID:100,name:'建设项目2',optionList:[
  237. {ID:'590cf860-7d99-11e7-90b0-e3a3dfdb2116',name:'2-test另存'},
  238. {ID:'c55718d0-7d98-11e7-b3b4-cfc9038d29b0',name:'2-费率B'},
  239. {ID:'da059df1-7c18-11e7-9e2f-1390b52643b4',name:'2-费率A'}
  240. ] },
  241. {projectID:101,name:'建设项目3',optionList:currentProject.currentOptions },
  242. {projectID:102,name:'建设项目4',optionList:currentProject.currentOptions },
  243. ]
  244. result.currentProject=currentProject;
  245. result.others = others;
  246. return result;
  247. }
  248. async function changeFeeRateFileFromCurrent(jdata){
  249. let data = JSON.parse(jdata);
  250. let result = await project_feerate_temp.findOneAndUpdate({projectID:data.projectID},{feeRateFileID:data.newFeeRateFileID});
  251. let feeRateData = await feeRateFileModel.findOne({'ID':data.newFeeRateFileID});
  252. let feeRate = await feeRateModel.findOne({ID:feeRateData.feeRateID});
  253. feeRateData._doc.rates = feeRate.rates;
  254. //
  255. feeRateData._doc.usageProjects=getUsageProjects(feeRateData.ID);
  256. return feeRateData;
  257. }
  258. async function changeFeeRateFileFromOthers(jdata) {
  259. let data = JSON.parse(jdata);
  260. console.log(data);
  261. let feeRateFile = await feeRateFileModel.findOne({'ID':data.feeRateFileID});
  262. let feeRate = await feeRateModel.findOne({ID:feeRateFile.feeRateID});
  263. let newFeeRate={};
  264. newFeeRate.ID=uuidV1();
  265. newFeeRate.rates =feeRate.rates;
  266. let newFeeRateFile = {};
  267. newFeeRateFile.ID = uuidV1();
  268. newFeeRateFile.name = data.name;
  269. newFeeRateFile.libName = feeRateFile.libName;
  270. newFeeRateFile.libID=feeRateFile.libID;
  271. newFeeRateFile.rootProjectID = data.rootProjectID;
  272. newFeeRateFile.feeRateID =newFeeRate.ID;
  273. await feeRateModel.create(newFeeRate);
  274. await feeRateFileModel.create(newFeeRateFile);
  275. await project_feerate_temp.findOneAndUpdate({projectID:data.projectID},{feeRateFileID:newFeeRateFile.ID});
  276. newFeeRateFile.rates=newFeeRate.rates;
  277. newFeeRateFile.usageProjects=getUsageProjects(newFeeRateFile.ID);
  278. return newFeeRateFile;
  279. }