fee_rates_facade.js 10 KB

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