| 
					
				 | 
			
			
				@@ -10,6 +10,8 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 const { app, assert } = require('egg-mock/bootstrap'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 const AnalysisExcel = require('../../../app/lib/analysis_excel'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const Xlsx = require('js-xlsx'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const _ = require('lodash'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 describe('test/app/lib/analysis_excel.test.js', () => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     it('analysis Test Data', function* () { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -34,7 +36,7 @@ describe('test/app/lib/analysis_excel.test.js', () => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 [ '1-2-2', null, null, '挖方', 'm3' ], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 [ '1-2-2-1', null, null, '挖土方', 'm3' ], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 [ '1-2-2-1-1', null, null, '挖路基土方', 'm3' ], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                [ null, '203-1-a', null, ' ', 'm3', 92954.75, null, null, 7.53 ], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                [ null, '203-1-a', null, ' ', 'm3', null, null, null, 7.53 ], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 [ null, null, 1, 'K0+000-K1+000', null, 11619.34375, null, null, null, null, '第二册S-2-1' ], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 [ null, null, 2, 'K1+000-K1+800', null, 11619.34375, null, null, null, null, '第二册S-2-1' ], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 [ null, null, 3, 'K2+800-K3+004', null, 11619.34375, null, null, null, null, '第二册S-2-1' ], 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -46,14 +48,69 @@ describe('test/app/lib/analysis_excel.test.js', () => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 [ '1-2-2-2', null, null, '挖石方', 'm3' ], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 [ '1-2-2-2-1', null, null, '挖软石', 'm3' ], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 [ null, '203-1-b', null, '挖石方', 'm3', 105.36, null, null, 16.11 ], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                [ '1-3', null, null, '路面工程', 'km' ], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                [ '1-4', null, null, '桥梁涵洞工程', 'km' ], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                [ '1-6', null, null, '隧道工程', 'km' ], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             ], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             range: 'A1:L29', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         const ctx = app.mockContext(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         const templateData = yield ctx.service.tenderNodeTemplate.getData(true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         const result = analysisExcel.analysisData(testData, templateData); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        assert(result.items.length === 21); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        assert(result.roots.length === 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 检查插入总量 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        assert(result.items.length === 72); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        assert(result.roots.length === 6); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         assert(result.pos.length === 8); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 检查第一部分子节点排序 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const nodes = result.roots[0].children; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        assert(nodes[nodes.length - 2].code === '1-6'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        assert(nodes[nodes.length - 1].code === '1-10'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 检查第203-1-a的数量 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const xmj = result.codeNodes['1-2-2-1-1']; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const gcl = xmj.children[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        assert(gcl.quantity === 92954.75); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    it('Analysis Excel Test Data And Import', function* () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const excelFile = app.baseDir  + '/app/public/files/template/ledger/导入分项清单Excel格式.xls'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const wb = Xlsx.readFile(excelFile); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const name = wb.SheetNames[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const sheetData = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            rows: Xlsx.utils.sheet_to_json(wb.Sheets[name], {header: 1}), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            merge: wb.Sheets[name]["!merges"], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const ctx = app.mockContext(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const analysisExcel = new AnalysisExcel(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const templateData = yield ctx.service.tenderNodeTemplate.getData(true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const result = analysisExcel.analysisData(sheetData, templateData); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        assert(result.items.length === 216); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const xmj = result.codeNodes['1-2-3-1-2']; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const gcl = xmj.children[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        assert(gcl.quantity === 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        ctx.tender = { id: 2 }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // pos需要记录createUserId 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        ctx.session = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            sessionUser: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                accountId: 2, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        yield ctx.service.ledger.importExcel(sheetData); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    it('analysis 渭武12标 Excel', function* () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const excelFile = app.baseDir  + '/app/public/files/template/ledger/渭武12标.xls'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const wb = Xlsx.readFile(excelFile); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const name = wb.SheetNames[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const sheetData = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            rows: Xlsx.utils.sheet_to_json(wb.Sheets[name], {header: 1}), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            merge: wb.Sheets[name]["!merges"], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const ctx = app.mockContext(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        ctx.tender = { id: 2 }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // pos需要记录createUserId 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        ctx.session = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            sessionUser: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                accountId: 2, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        yield ctx.service.ledger.importExcel(sheetData); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }); 
			 |