test_ration_calc.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441
  1. /**
  2. * Created by CSL on 2017/7/14.
  3. */
  4. var test = require('tape');
  5. var calcUtil = require('../../public/calc_util');
  6. let dummyFee = [
  7. {
  8. "ID" : 1,
  9. "ParentID" : null,
  10. "name" : "企业管理费",
  11. "rate" : null,
  12. "memo" : null
  13. },
  14. {
  15. "ID" : 2,
  16. "ParentID" : 1,
  17. "name" : "建筑工程",
  18. "rate" : null,
  19. "memo" : null
  20. },
  21. {
  22. "ID" : 3,
  23. "ParentID" : 2,
  24. "name" : "一类工程",
  25. "rate" : 16.03,
  26. "memo" : null
  27. },
  28. {
  29. "ID" : 4,
  30. "ParentID" : 2,
  31. "name" : "二类工程",
  32. "rate" : 14.95,
  33. "memo" : null
  34. },
  35. {
  36. "ID" : 5,
  37. "ParentID" : 2,
  38. "name" : "三类工程",
  39. "rate" : 12.47,
  40. "memo" : null
  41. },
  42. {
  43. "ID" : 6,
  44. "ParentID" : 2,
  45. "name" : "四类工程",
  46. "rate" : 9.3,
  47. "memo" : null
  48. },
  49. {
  50. "ID" : 7,
  51. "ParentID" : 1,
  52. "name" : "市政工程",
  53. "rate" : null,
  54. "memo" : null
  55. },
  56. {
  57. "ID" : 8,
  58. "ParentID" : 7,
  59. "name" : "一类工程",
  60. "rate" : 16.33,
  61. "memo" : null
  62. },
  63. {
  64. "ID" : 9,
  65. "ParentID" : 7,
  66. "name" : "二类工程",
  67. "rate" : 15,
  68. "memo" : null
  69. },
  70. {
  71. "ID" : 10,
  72. "ParentID" : 7,
  73. "name" : "三类工程",
  74. "rate" : 12.5,
  75. "memo" : null
  76. },
  77. {
  78. "ID" : 11,
  79. "ParentID" : 7,
  80. "name" : "四类工程",
  81. "rate" : 9.5,
  82. "memo" : null
  83. },
  84. {
  85. "ID" : 12,
  86. "ParentID" : 1,
  87. "name" : "机械土石方",
  88. "rate" : 15.5,
  89. "memo" : null
  90. },
  91. {
  92. "ID" : 13,
  93. "ParentID" : 1,
  94. "name" : "仿古建筑工程",
  95. "rate" : 12,
  96. "memo" : null
  97. },
  98. {
  99. "ID" : 14,
  100. "ParentID" : 1,
  101. "name" : "建筑修缮工程",
  102. "rate" : 12.47,
  103. "memo" : null
  104. },
  105. {
  106. "ID" : 15,
  107. "ParentID" : 1,
  108. "name" : "炉窑砌筑工程",
  109. "rate" : null,
  110. "memo" : null
  111. },
  112. {
  113. "ID" : 16,
  114. "ParentID" : 15,
  115. "name" : "一类工程",
  116. "rate" : 14.25,
  117. "memo" : null
  118. },
  119. {
  120. "ID" : 17,
  121. "ParentID" : 15,
  122. "name" : "二类工程",
  123. "rate" : 12.47,
  124. "memo" : null
  125. },
  126. {
  127. "ID" : 18,
  128. "ParentID" : 15,
  129. "name" : "三类工程",
  130. "rate" : 10.8,
  131. "memo" : null
  132. },
  133. {
  134. "ID" : 19,
  135. "ParentID" : 15,
  136. "name" : "四类工程",
  137. "rate" : null,
  138. "memo" : null
  139. },
  140. {
  141. "ID" : 20,
  142. "ParentID" : null,
  143. "name" : "规费",
  144. "rate" : null,
  145. "memo" : null
  146. },
  147. {
  148. "ID" : 21,
  149. "ParentID" : 20,
  150. "name" : "建筑工程",
  151. "rate" : 4.87,
  152. "memo" : null
  153. },
  154. {
  155. "ID" : 22,
  156. "ParentID" : 20,
  157. "name" : "市政工程",
  158. "rate" : 3.61,
  159. "memo" : null
  160. },
  161. {
  162. "ID" : 23,
  163. "ParentID" : 20,
  164. "name" : "机械土石方",
  165. "rate" : 2.15,
  166. "memo" : null
  167. },
  168. {
  169. "ID" : 24,
  170. "ParentID" : 20,
  171. "name" : "仿古建筑工程",
  172. "rate" : 2.84,
  173. "memo" : null
  174. },
  175. {
  176. "ID" : 25,
  177. "ParentID" : 20,
  178. "name" : "建筑修缮工程",
  179. "rate" : 2.84,
  180. "memo" : null
  181. },
  182. {
  183. "ID" : 26,
  184. "ParentID" : 20,
  185. "name" : "炉窑砌筑工程",
  186. "rate" : 3.61,
  187. "memo" : null
  188. },
  189. {
  190. "ID" : 27,
  191. "ParentID" : null,
  192. "name" : "利润",
  193. "rate" : null,
  194. "memo" : null
  195. },
  196. {
  197. "ID" : 28,
  198. "ParentID" : 27,
  199. "name" : "建筑工程",
  200. "rate" : null,
  201. "memo" : null
  202. },
  203. {
  204. "ID" : 29,
  205. "ParentID" : 28,
  206. "name" : "一类工程",
  207. "rate" : 8.73,
  208. "memo" : null
  209. },
  210. {
  211. "ID" : 30,
  212. "ParentID" : 28,
  213. "name" : "二类工程",
  214. "rate" : 6.94,
  215. "memo" : null
  216. }
  217. ]
  218. let dummyCalcTpl = {
  219. calType: 3,
  220. calTypeName: "测试用_重庆",
  221. compiledSeq: [],
  222. calcItems: [
  223. {
  224. code: "1",
  225. name: "基价直接工程费",
  226. dispExpr: "A2+A5+A6+A10",
  227. expression: "A('2') + A('5') + A('6') + A('10')",
  228. compiledExpr: "",
  229. statement: "基价人工费+基价材料费+基价机械费+未计价材料费"
  230. },
  231. {
  232. code: "2",
  233. name: "基价人工费",
  234. dispExpr: "A3+A4",
  235. expression: "A('3') + A('4')",
  236. compiledExpr: "",
  237. statement: "定额基价人工费+定额人工单价(基价)调整"
  238. },
  239. {
  240. code: "3",
  241. name: "定额基价人工费",
  242. dispExpr: "定额基价人工费",
  243. expression: "base('定额基价人工费').toFixed(2)",
  244. compiledExpr: "",
  245. statement: "定额基价人工费"
  246. },
  247. {
  248. code: "4",
  249. name: "定额人工单价(基价)调整",
  250. dispExpr: "A3*[1.89-1]",
  251. expression: "A('3') * (1.89-1)",
  252. compiledExpr: "",
  253. statement: "定额基价人工费*[定额人工单价(基价)调整系数-1]"
  254. },
  255. {
  256. code: "5",
  257. name: "基价材料费",
  258. dispExpr: "定额基价材料费",
  259. expression: "base('定额基价材料费')",
  260. compiledExpr: "",
  261. statement: "定额基价材料费"
  262. },
  263. {
  264. code: "6",
  265. name: "基价机械费",
  266. dispExpr: "A7+A9",
  267. expression: "A('7') + A('9')",
  268. compiledExpr: "",
  269. statement: "定额基价机械费+定额机上人工单价(基价)调整"
  270. },
  271. {
  272. code: "7",
  273. name: "定额基价机械费",
  274. dispExpr: "定额基价机械费",
  275. expression: "base('定额基价机械费')",
  276. compiledExpr: "",
  277. statement: "定额基价机械费"
  278. },
  279. {
  280. code: "8",
  281. name: "其中:定额基价机上人工费",
  282. dispExpr: "定额基价机上人工费",
  283. expression: "base('定额基价机上人工费')",
  284. compiledExpr: "",
  285. statement: "定额基价机上人工费"
  286. },
  287. {
  288. code: "9",
  289. name: "定额机上人工单价(基价)调整",
  290. dispExpr: "A8*[1.89-1]",
  291. expression: "A('8') * (1.89-1)",
  292. compiledExpr: "",
  293. statement: "定额基价机上人工费*[定额机上人工单价(基价)调整系数-1]"
  294. },
  295. {
  296. code: "10",
  297. name: "未计价材料费",
  298. dispExpr: "主材费+设备费",
  299. expression: "base('主材费') + base('设备费')",
  300. compiledExpr: "",
  301. statement: "主材费+设备费"
  302. },
  303. {
  304. code: "11",
  305. name: "企业管理费",
  306. dispExpr: "A3",
  307. expression: "A('3')",
  308. compiledExpr: "",
  309. statement: "定额基价人工费"
  310. },
  311. {
  312. code: "12",
  313. name: "利润",
  314. dispExpr: "A3",
  315. expression: "A('3')",
  316. compiledExpr: "",
  317. statement: "定额基价人工费"
  318. },
  319. {
  320. code: "13",
  321. name: "风险因素",
  322. dispExpr: "",
  323. expression: "A('3')",
  324. compiledExpr: "",
  325. statement: "定额基价人工费"
  326. },
  327. {
  328. code: "14",
  329. name: "人材机价差",
  330. dispExpr: "A15+A16+A17",
  331. expression: "A('15') + A('16') + A('17')",
  332. compiledExpr: "",
  333. statement: "人工费价差+材料费价差+机械费价差"
  334. },
  335. {
  336. code: "15",
  337. name: "人工费价差",
  338. dispExpr: "信息价或市场价格-调整后的定额人工费(基价)",
  339. expression: "base('市场价格人工费') - base('定额基价人工费(调整后)')",
  340. compiledExpr: "",
  341. statement: "市场价格人工费-调整后的定额人工费(基价)"
  342. },
  343. {
  344. code: "16",
  345. name: "材料费价差",
  346. dispExpr: "信息价或市场价格-定额基价材料费",
  347. expression: "base('市场价格材料费') - base('定额基价材料费(调整后)')",
  348. compiledExpr: "",
  349. statement: "市场价格材料费-定额基价材料费"
  350. },
  351. {
  352. code: "17",
  353. name: "机械费价差",
  354. dispExpr: "信息价或市场价格-调整后的定额基价机械费(基价)",
  355. expression: "base('市场价格机械费') - base('定额基价机械费(调整后)')",
  356. compiledExpr: "",
  357. statement: "市场价格机械费-调整后的定额基价机械费(基价)"
  358. },
  359. {
  360. code: "18",
  361. name: "综合单价",
  362. dispExpr: "A1+A11+A12+A13+A14",
  363. expression: "A('1') + A('11') + A('12') + A('13') + A('14')",
  364. compiledExpr: "",
  365. statement: "基价直接工程费+企业管理费+利润+风险因素+人材机价差"
  366. }
  367. ]
  368. };
  369. let dummyRation = {
  370. "sectionId" : 76,
  371. "ID" : 15,
  372. "code" : "AA0001",
  373. "name" : "人工挖土方",
  374. "unit" : "100m3",
  375. "basePrice" : 840.84,
  376. "caption" : "人工挖土方",
  377. "feeType" : 2,
  378. "rationGljList" : [
  379. {
  380. "glj" : {
  381. "repositoryId" : 3,
  382. "ID" : 17,
  383. "code" : "00010201",
  384. "name" : "土石方综合工日",
  385. "specs" : null,
  386. "unit" : "工日",
  387. "basePrice" : 22,
  388. "gljDistType" : "人工",
  389. "gljType" : 2
  390. },
  391. "consumeAmt" : 38.22,
  392. "proportion" : 0
  393. },{
  394. "glj": {
  395. "repositoryId" : 3,
  396. "ID" : 68,
  397. "code" : "85030207",
  398. "name" : "履带式起重机",
  399. "specs" : "50t",
  400. "unit" : "台班",
  401. "basePrice" : 1194.05,
  402. "gljDistType" : "机械",
  403. "gljType" : 64
  404. },
  405. "consumeAmt" : 1.22,
  406. "proportion" : 0
  407. },{
  408. "glj": {
  409. "repositoryId" : 3,
  410. "ID" : 200,
  411. "code" : "36290101",
  412. "name" : "水",
  413. "specs" : "",
  414. "unit" : "m3",
  415. "basePrice" : 2,
  416. "gljDistType" : "材料",
  417. "gljType" : 6
  418. },
  419. "consumeAmt" : 9.2,
  420. "proportion" : 0
  421. }
  422. ],
  423. "rationRepId" : 3
  424. }
  425. //*
  426. test('计算式测试', function(t){
  427. calcUtil.init(dummyCalcTpl, dummyFee);
  428. calcUtil.compile();
  429. calcUtil.calculate(dummyRation);
  430. for (let idx of dummyCalcTpl.compiledSeq) {
  431. let item = dummyCalcTpl.calcItems[idx];
  432. console.log('code: ' + item.code + ' | expression: ' + item.compiledExpr + ' | result: ' + item.execRst);
  433. }
  434. t.pass('just pass for calculation initialization!');
  435. t.end();
  436. })