ImportPersonFormExcel.js 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344
  1. /*
  2. * resources.getEntityManagerContainer() // 实体管理容器.
  3. * resources.getContext() //上下文根.
  4. * resources.getOrganization() //组织访问接口.
  5. * requestText //请求内容.
  6. * request //请求对象.
  7. */
  8. print("批量导入人员");
  9. var File = Java.type('java.io.File');
  10. var Config = {
  11. interfaceUrl : "http://lyxx.zoneland.net:20030/x_program_center/jaxrs/invoke/personSync/execute",
  12. localPath : File.separator + "data" + File.separator + "ImportPersonFromExcel" + File.separator,
  13. recordLocalPath : File.separator+'data'+ File.separator + "ImportPersonFromExcelRecord" + File.separator
  14. };
  15. (function(context) {
  16. 'use strict';
  17. var Timer = Java.type('java.util.Timer');
  18. var Phaser = Java.type('java.util.concurrent.Phaser');
  19. var timer = new Timer('jsEventLoop', false);
  20. var phaser = new Phaser();
  21. var timeoutStack = 0;
  22. function pushTimeout() {
  23. timeoutStack++;
  24. }
  25. function popTimeout() {
  26. timeoutStack--;
  27. if (timeoutStack > 0) {
  28. return;
  29. }
  30. timer.cancel();
  31. phaser.forceTermination();
  32. }
  33. var onTaskFinished = function() {
  34. phaser.arriveAndDeregister();
  35. };
  36. context.setTimeout = function(fn, millis /* [, args...] */) {
  37. var args = [].slice.call(arguments, 2, arguments.length);
  38. var phase = phaser.register();
  39. var canceled = false;
  40. timer.schedule(function() {
  41. if (canceled) {
  42. return;
  43. }
  44. try {
  45. fn.apply(context, args);
  46. } catch (e) {
  47. print(e);
  48. } finally {
  49. onTaskFinished();
  50. popTimeout();
  51. }
  52. }, millis);
  53. pushTimeout();
  54. return function() {
  55. onTaskFinished();
  56. canceled = true;
  57. popTimeout();
  58. };
  59. };
  60. context.clearTimeout = function(cancel) {
  61. cancel();
  62. };
  63. context.setInterval = function(fn, delay /* [, args...] */) {
  64. var args = [].slice.call(arguments, 2, arguments.length);
  65. var cancel = null;
  66. var loop = function() {
  67. cancel = context.setTimeout(loop, delay);
  68. fn.apply(context, args);
  69. };
  70. cancel = context.setTimeout(loop, delay);
  71. return function() {
  72. cancel();
  73. };
  74. };
  75. context.clearInterval = function(cancel) {
  76. cancel();
  77. };
  78. })(this);
  79. var Utils = {
  80. parseResp : function( resp ){
  81. if( !resp || resp === null ){
  82. return {
  83. "type": "error",
  84. message : "服务响应是null,需要管理员查看后台日志"
  85. }
  86. }else{
  87. var json = JSON.parse( resp.toString() );
  88. return json;
  89. }
  90. },
  91. getFailText : function( json ){
  92. //{
  93. // "type": "error",
  94. // "message": "手机号错误:15268803358, 手机号已有值重复.",
  95. // "date": "2018-08-05 02:51:35",
  96. // "spent": 5,
  97. // "size": -1,
  98. // "count": 0,
  99. // "position": 0,
  100. // "prompt": "com.x.organization.assemble.control.jaxrs.person.ExceptionMobileDuplicate"
  101. //}
  102. var text;
  103. if( json.message ){
  104. text = json.message + ( json.prompt ? "("+json.prompt + ")" : "" );
  105. }else if( json.prompt ){
  106. text = json.prompt;
  107. }else{
  108. text = "未知异常";
  109. }
  110. print(text);
  111. return text;
  112. }
  113. };
  114. function getFileList(){
  115. var path = Config.localPath;
  116. var file = new File(path );
  117. var ArrayList = Java.type('java.util.ArrayList');
  118. var wjList = new ArrayList();
  119. if (file.exists()) {
  120. var fileList = file.listFiles();
  121. for (var i = 0; i < fileList.length; i++) {
  122. if (fileList[i].isFile()) {//判断是否为文件
  123. print( fileList[i].getName() );
  124. var name = fileList[i].getName().split(".");
  125. if( name[ name.length - 1 ].equals("xls") ){
  126. wjList.add(fileList[i]);
  127. }
  128. }
  129. }
  130. }else{
  131. print("目录不存在:"+path);
  132. }
  133. return wjList;
  134. }
  135. function importExcel( file ) {
  136. var FileInputStream = Java.type('java.io.FileInputStream');
  137. // var InputStreamReader = Java.type('java.io.InputStreamReader');
  138. //var BufferedReader = Java.type('java.io.BufferedReader');
  139. //var FileReader = Java.type('java.io.FileReader');
  140. var errorMsg = "";
  141. var inStream = null;
  142. try {
  143. //inStream = new InputStreamReader(new FileInputStream(file), "GBK");
  144. inStream = new FileInputStream(file);
  145. var workBook = null;
  146. try {
  147. var fileName = file.getName();
  148. if (fileName.endsWith(".xls")) { // 97-03
  149. var HSSFWorkbook = Java.type('org.apache.poi.hssf.usermodel.HSSFWorkbook');
  150. workBook = new HSSFWorkbook(inStream);
  151. } else if (fileName.endsWith(".xlsx")) { // 2007
  152. var XSSFWorkbook = Java.type('org.apache.poi.hssf.usermodel.XSSFWorkbook');
  153. workBook = new XSSFWorkbook(inStream);
  154. } else {
  155. errorMsg = "不支持的文件类型!";
  156. print(errorMsg);
  157. return false;
  158. }
  159. } catch ( e) {
  160. errorMsg = "解析Excel文件出错!";
  161. print(errorMsg);
  162. e.printStackTrace();
  163. return false;
  164. } finally {
  165. inStream.close();
  166. }
  167. if( errorMsg.length === 0 ) {
  168. var sheets = null !== workBook ? workBook.getNumberOfSheets() : 0;
  169. var sheet = workBook.getSheetAt(0); // 读取第一个sheet
  170. var rows = sheet.getPhysicalNumberOfRows(); // 获得行数
  171. if (rows > 1) { // 第一行默认为标题
  172. runImportRow( sheet, 1, rows );
  173. //for (var j = 1; j < rows; j++) {
  174. // print("正在执行导入第"+j+"行");
  175. // var row = sheet.getRow(j);
  176. // var cells = row.getLastCellNum();// 获得列数
  177. // if (cells > 0) {
  178. // errorMsg = importRow( row , cells);
  179. // if( errorMsg !== "" )return false;
  180. // }
  181. //}
  182. } else {
  183. errorMsg = "EXCEL没有数据,请确定。";
  184. }
  185. }
  186. if( errorMsg.length() > 0 ) {
  187. print("错误消息:" + errorMsg);
  188. return false;
  189. }else {
  190. print( file.getName()+"导入成功!");
  191. return true;
  192. }
  193. } catch (ex) {
  194. ex.printStackTrace();
  195. return false;
  196. }
  197. }
  198. var Cell = Java.type("org.apache.poi.ss.usermodel.Cell");
  199. function runImportRow( sheet, rowIndex, total ){
  200. if( rowIndex < total ){
  201. var row = sheet.getRow(rowIndex);
  202. var cells = row.getLastCellNum();// 获得列数
  203. if (cells > 0) {
  204. print("正在执行导入第"+rowIndex+"行");
  205. var errorMsg = importRow( row , cells);
  206. //if( errorMsg !== "" )return false;
  207. }
  208. rowIndex = rowIndex + 1;
  209. setTimeout(function() {
  210. runImportRow( sheet, rowIndex, total );
  211. }, 100 );
  212. }
  213. }
  214. function importRow( row, cells ){
  215. var json = {
  216. "action" : "add",
  217. "forceFlag" : "yes",
  218. "attributeList" : []
  219. };
  220. print( "cells = " + cells );
  221. for (var k = 0; k < cells; k++) {
  222. var value = "";
  223. var cell = row.getCell(k);
  224. if( cell !== null ) {
  225. if(cell.getCellType() == Cell.CELL_TYPE_NUMERIC && java.lang.String.valueOf(cell.getNumericCellValue()).indexOf("E")==-1){ //数字
  226. value = java.lang.String.valueOf(cell.getNumericCellValue());
  227. }else {
  228. //return new DecimalFormat("#").format(cell.getNumericCellValue());
  229. cell.setCellType(Cell.CELL_TYPE_STRING); // 全部置成String类型的单元格
  230. value = cell.getStringCellValue().trim();
  231. }
  232. }
  233. var flag = true;
  234. switch( k ) {
  235. case 0:
  236. json.employee = value; //工号
  237. break;
  238. case 1:
  239. json.unique = value;
  240. break;
  241. case 2 :
  242. json.mobile = value;
  243. break;
  244. case 3 :
  245. json.mail = value;
  246. break;
  247. case 4 :
  248. json.name = value;
  249. break;
  250. case 5 :
  251. json.unitList = [{ flag : value }];
  252. break;
  253. }
  254. if( !flag )return "";
  255. }
  256. if( !json.unique || json.unique == "0")return "";
  257. return sendRequest( json );
  258. }
  259. function sendRequest( body ){
  260. var errorText = "";
  261. try{
  262. if( typeof( body ) == "string" )body = JSON.parse(bodyStr);
  263. body.saveFlag = "no";
  264. var resp = com.x.base.core.project.connection.CipherConnectionAction.post(false,Config.interfaceUrl,JSON.stringify(body));
  265. // print("resend person resp="+resp);
  266. var response = Utils.parseResp( resp );
  267. // print("resend person response="+JSON.stringify(response));
  268. if( response.type && response.type == "success" && response.data && response.data.value && response.data.value.result && response.data.value.result == "success" ){
  269. }else{
  270. errorText = Utils.getFailText( response );
  271. }
  272. }catch(e){
  273. errorText= e.printStackTrace();
  274. }finally{
  275. print("resend person errorText="+errorText);
  276. return errorText;
  277. }
  278. }
  279. function init(){
  280. var fileList = getFileList();
  281. for(var i = 0; i<fileList.size(); i++){
  282. try{
  283. var file = fileList.get(i);
  284. if( importExcel( file ) ){
  285. print( "正在修改文件目录:"+file.getName() );
  286. var newFilePath = Config.recordLocalPath + file.getName();
  287. if (file.renameTo(new File( newFilePath ))) {
  288. //println("File is moved successful!");
  289. print( "文件移动到了:"+newFilePath );
  290. } else {
  291. print( file.getName() + " is failed to move!");
  292. }
  293. }
  294. }catch( e ){
  295. e.printStackTrace();
  296. }
  297. }
  298. }
  299. init();