GetJobRegistrationPackage.java 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367
  1. package com.kingdee.eas.custom.gudoctor.server;
  2. import com.kingdee.bos.BOSException;
  3. import com.kingdee.bos.Context;
  4. import com.kingdee.bos.ContextUtils;
  5. import com.kingdee.bos.bsf.service.app.IHRMsfService;
  6. import com.kingdee.bos.bsf.service.classloader.MsfClassLoaderFactory;
  7. import com.kingdee.bos.ctrl.bizshare.ConnectException;
  8. import com.kingdee.bos.ctrl.kdf.data.impl.BOSQueryDelegate;
  9. import com.kingdee.bos.ctrl.print.common.provider.DefaultPrintDataProvider;
  10. import com.kingdee.bos.ctrl.report.forapp.kdnote.client.DefaultNoteDataProvider;
  11. import com.kingdee.bos.ctrl.report.forapp.kdnote.client.KDNoteHelper;
  12. import com.kingdee.bos.ctrl.report.forapp.kdnote.webserver.IContextProvider;
  13. import com.kingdee.bos.ctrl.report.forapp.kdnote.webserver.KDNoteWebServerHelper;
  14. import com.kingdee.bos.ctrl.reportone.kdrs.biz.IBizContext;
  15. import com.kingdee.bos.dao.ormapping.ObjectUuidPK;
  16. import com.kingdee.bos.dao.query.IQueryExecutor;
  17. import com.kingdee.bos.dao.query.QueryExecutorFactory;
  18. import com.kingdee.bos.metadata.IMetaDataPK;
  19. import com.kingdee.bos.metadata.MetaDataPK;
  20. import com.kingdee.bos.util.EASResource;
  21. import com.kingdee.eas.basedata.assistant.AbstractPrintIntegrationInfo;
  22. import com.kingdee.eas.basedata.assistant.IPrintIntegration;
  23. import com.kingdee.eas.basedata.assistant.PrintIntegrationFactory;
  24. import com.kingdee.eas.basedata.assistant.util.CommonPrintIntegrationDataProvider;
  25. import com.kingdee.eas.basedata.assistant.util.MultiDataSourceDataProviderProxy;
  26. import com.kingdee.eas.basedata.assistant.util.PrintIntegrationManager;
  27. import com.kingdee.shr.base.syssetting.context.IContext;
  28. import com.kingdee.shr.base.syssetting.context.SHRContext;
  29. import com.kingdee.shr.base.syssetting.exception.SHRWebException;
  30. import com.kingdee.shr.base.syssetting.exception.ShrWebBizException;
  31. import com.kingdee.shr.base.syssetting.util.SHRCheck;
  32. import com.kingdee.shr.base.syssetting.web.controller.ReportTemplateController;
  33. import com.kingdee.shr.component.report.CommonDataProvider;
  34. import com.kingdee.shr.component.report.ICommonDataProvider;
  35. import com.kingdee.shr.recuritment.InterviewPlanFactory;
  36. import com.kingdee.shr.recuritment.InterviewPlanInfo;
  37. import com.kingdee.util.Uuid;
  38. import org.apache.log4j.Logger;
  39. import org.springframework.ui.ModelMap;
  40. import org.springframework.validation.support.BindingAwareModelMap;
  41. import javax.servlet.ServletRequest;
  42. import javax.servlet.ServletResponse;
  43. import javax.servlet.http.HttpServletRequest;
  44. import javax.servlet.http.HttpServletResponse;
  45. import javax.servlet.http.HttpSession;
  46. import java.io.*;
  47. import java.lang.reflect.Constructor;
  48. import java.net.URLDecoder;
  49. import java.net.URLEncoder;
  50. import java.text.MessageFormat;
  51. import java.util.*;
  52. import java.util.regex.Pattern;
  53. /**
  54. * @Description TODO
  55. * @Date 2024/11/5 16:34
  56. * @Created by 30489
  57. */
  58. public class GetJobRegistrationPackage implements IHRMsfService {
  59. private static final Logger logger = Logger.getLogger(GetJobRegistrationPackage.class);
  60. public static String PDF = "PDF";
  61. public static String NODE_SERVER = "shr_node_Server";
  62. @Override
  63. public Object process(Context context, Map<String, Object> param) {
  64. HashMap<String, Object> result = new HashMap<String, Object>();
  65. try {
  66. logger.error("GetJobRegistrationPackagebillID-----------------");
  67. String recordId = (String) param.get("recordId");
  68. //T_REC_InterviewPlan
  69. InterviewPlanInfo interviewPlanInfo = InterviewPlanFactory.getLocalInstance(context).getInterviewPlanInfo("where id ='" + recordId + "'");
  70. String billID = interviewPlanInfo.getInterview().toString();
  71. BindingAwareModelMap modelMap = new BindingAwareModelMap();
  72. param.put("dataProvider", "com.kingdee.shr.recuritment.util.InterviewResultPrintHelpDataProvider1");
  73. param.put("billID", billID);
  74. param.put("tdQueryPK", "");
  75. param.put("tdTemplateName", "/s-HR/Recuritment/InterviewResult");
  76. param.put("method", "report");
  77. param.put("tdRptTemplate", "RecRegisterTem.r1-print");
  78. param.put("tdTemplatePath", "%2Fs-HR%2FRecuritment%2FInterviewResult");
  79. param.put("uipk", "com.kingdee.shr.recuritment.interview");
  80. param.put("serviceId", "X8LdsTb7TCGpfR/aas8MGfI9KRA=");
  81. byte[] bytes = reportPackage(param, modelMap, context);
  82. String s = Base64.getEncoder().encodeToString(bytes);
  83. result.put("msg", s);
  84. result.put("msgType", "1");
  85. } catch (Exception e) {
  86. e.printStackTrace();
  87. result.put("msg", e.getMessage());
  88. result.put("msgType", "0");
  89. }
  90. return result;
  91. }
  92. public byte[] reportPackage(Map<String, Object> param, ModelMap modelMap, Context context) throws SHRWebException, ShrWebBizException {
  93. String tdTemplatePath = (String) param.get("tdTemplatePath");
  94. String tdRptTemplate = (String) param.get("tdRptTemplate");
  95. String templatePath = tdTemplatePath + "/" + tdRptTemplate;
  96. try {
  97. Object dataProvider = this.getDataProvider(param, modelMap, context);
  98. byte[] pdfs = exportPackage(param, modelMap, templatePath, dataProvider, "PDF", context);
  99. return pdfs;
  100. } catch (Exception var11) {
  101. var11.printStackTrace();
  102. throw new SHRWebException(var11);
  103. }
  104. }
  105. public Object getDataProvider(Map<String, Object> param, ModelMap modelMap, Context ctx) throws BOSException {
  106. Object data = null;
  107. String tdRptTemplate = (String) param.get("tdRptTemplate");
  108. String tdQueryPK = (String) param.get("tdQueryPK");
  109. List idList = new ArrayList();
  110. String isSelectedAllStr = (String) param.get("isSelectedAll");
  111. String queryUuidStr = (String) param.get("queryUuid");
  112. String billID = (String) param.get("billID");
  113. String dataProvider = (String) param.get("dataProvider");
  114. boolean isSelectedAll = isSelectedAllStr != null && isSelectedAllStr.equalsIgnoreCase("true");
  115. int i;
  116. if (isSelectedAll) {
  117. IQueryExecutor exec = QueryExecutorFactory.getLocalInstance(ctx, MetaDataPK.create(tdQueryPK));
  118. idList = exec.getBillIDList(Uuid.read(queryUuidStr), "id", 0, 0);
  119. } else {
  120. String[] billIDs = billID.split(",");
  121. String[] var15 = billIDs;
  122. int var16 = billIDs.length;
  123. for (i = 0; i < var16; ++i) {
  124. String s = var15[i];
  125. ((List) idList).add(s);
  126. }
  127. }
  128. IMetaDataPK tdQuery = null;
  129. if (tdQueryPK != null) {
  130. tdQuery = MetaDataPK.create(tdQueryPK);
  131. }
  132. if (!com.kingdee.util.StringUtils.isEmpty(dataProvider)) {
  133. if ("com.kingdee.bos.ctrl.print.common.provider.DefaultPrintDataProvider1".equals(dataProvider)) {
  134. data = new DefaultPrintDataProvider(ctx, (List) idList, tdQuery);
  135. } else if ("com.kingdee.bos.ctrl.report.forapp.kdnote.client.DefaultNoteDataProvider".equals(dataProvider)) {
  136. data = new DefaultNoteDataProvider(ctx, (List) idList, tdQuery);
  137. } else {
  138. try {
  139. Constructor<?>[] ctor = MsfClassLoaderFactory.forName(dataProvider).getDeclaredConstructors();
  140. logger.debug("-------start--------dataprovider is " + dataProvider);
  141. i = 0;
  142. for (int total = ctor.length; i < total; ++i) {
  143. Class[] cl = ctor[i].getParameterTypes();
  144. if (cl.length == 1) {
  145. data = MsfClassLoaderFactory.forName(dataProvider).getConstructor(cl).newInstance(billID);
  146. } else if (cl.length == 2) {
  147. data = MsfClassLoaderFactory.forName(dataProvider).getConstructor(cl).newInstance(billID, tdQueryPK);
  148. break;
  149. }
  150. }
  151. logger.debug("------end---------dataprovider is " + dataProvider);
  152. } catch (Exception var21) {
  153. logger.error(var21.getMessage(), var21);
  154. }
  155. if (data == null) {
  156. try {
  157. data = Class.forName(dataProvider).newInstance();
  158. } catch (Exception var20) {
  159. var20.printStackTrace();
  160. }
  161. }
  162. }
  163. } else {
  164. data = new DefaultNoteDataProvider(ctx, (List) idList, tdQuery);
  165. }
  166. if (null == data) {
  167. data = new CommonDataProvider((List) idList, tdQuery);
  168. }
  169. if (data instanceof ICommonDataProvider) {
  170. ((ICommonDataProvider) data).setContext(ctx);
  171. }
  172. data = this.printTimesControl(data, (List) idList, tdRptTemplate, ctx);
  173. return data;
  174. }
  175. public byte[] exportPackage(Map<String, Object> param, ModelMap modelMap, String templatePath, Object dataProvider, String type, Context context) throws IOException, SHRWebException {
  176. if (templatePath != null) {
  177. try {
  178. templatePath = URLDecoder.decode(templatePath, "UTF-8");
  179. } catch (UnsupportedEncodingException var15) {
  180. logger.error("decode url error when export. the url is :" + SHRCheck.vaildLog(templatePath));
  181. }
  182. logger.info("Note output PDF start..." + SHRCheck.vaildLog(templatePath));
  183. KDNoteWebServerHelper webServerHelper = new KDNoteWebServerHelper();
  184. ByteArrayOutputStream out = new ByteArrayOutputStream();
  185. try {
  186. //out = response.getOutputStream();
  187. if (webServerHelper != null) {
  188. webServerHelper.setContextProvider(new IContextProvider() {
  189. @Override
  190. public IBizContext getBizContext(Context context1) {
  191. try {
  192. IBizContext ctx = KDNoteHelper.makeContext(context);
  193. return ctx;
  194. } catch (ConnectException e) {
  195. throw new RuntimeException(e);
  196. }
  197. }
  198. });
  199. webServerHelper.setBosContext(context);
  200. webServerHelper.exportPDF(templatePath, dataProvider, out);
  201. }
  202. //wKiDDCaiZyrsBbDblnsoeEtIrOcDCDXNad6mzSYvjFQZLSjJ7DNG-IiT3NrjmhFm RecRegisterPersonBaseQuery
  203. // String tempFilePath = "E:\\kdshr90\\eas\\server\\deploy\\easweb.ear\\shr_web.war\\tmp/wKiDDCaiZyrsBbDblnsoeEtIrOcDCDXNad6mzSYvjFQZLSjJ7DNG-IiT3NrjmhFm";
  204. //// HttpSession session = request.getSession();
  205. //// String tempFilePath = UserUtil.getUserTempDirAbsolutePath(session); //´æ·Å
  206. // File tempFile = new File(tempFilePath);
  207. // if (!tempFile.exists()) {
  208. // tempFile.mkdirs();
  209. // }
  210. // logger.error("GetJobRegistrationPackagetempFilePath-----------------" + tempFilePath);
  211. // File outFile = new File(tempFilePath + "/outA.pdf");
  212. // FileOutputStream fos = new FileOutputStream(outFile);
  213. // out.writeTo(fos);
  214. // fos.close();
  215. byte[] byteArray = out.toByteArray();
  216. return byteArray;
  217. } catch (Exception var14) {
  218. logger.error("export pdf error:", var14);
  219. } finally {
  220. if (out != null) {
  221. out.flush();
  222. out.close();
  223. }
  224. }
  225. }
  226. return null;
  227. }
  228. public static IBizContext getBizContext(Context context) throws ConnectException {
  229. IBizContext biaContext = KDNoteHelper.makeContext(context);
  230. //IBizContext biaContext = (IBizContext)SHRContext.getSessionContext().get(RPT_CTX);
  231. if (biaContext != null) {
  232. return biaContext;
  233. } else {
  234. try {
  235. KDNoteWebServerHelper nodeWeb = new KDNoteWebServerHelper();
  236. nodeWeb.setContextProvider(new IContextProvider() {
  237. public IBizContext getBizContext(Context bosCtx) {
  238. IBizContext ctx = (IBizContext) SHRContext.getSessionContext().get(ReportTemplateController.RPT_CTX);
  239. if (ctx != null) {
  240. return ctx;
  241. } else {
  242. try {
  243. ctx = KDNoteHelper.makeContext(SHRContext.getInstance().getContext());
  244. SHRContext.getSessionContext().put(ReportTemplateController.RPT_CTX, ctx);
  245. return ctx;
  246. } catch (ConnectException var4) {
  247. //ReportTemplateController.logger.error("get page data error!", var4);
  248. return null;
  249. }
  250. }
  251. }
  252. });
  253. SHRContext.getSessionContext().put(NODE_SERVER, nodeWeb);
  254. return nodeWeb.getThisBizContext();
  255. } catch (Exception var2) {
  256. logger.error("get page data error!", var2);
  257. return null;
  258. }
  259. }
  260. }
  261. private Object printTimesControl(Object data, List idList, String rptTemplate, Context context) throws BOSException {
  262. MultiDataSourceDataProviderProxy multiDataProvider = new MultiDataSourceDataProviderProxy();
  263. StringBuffer failToPrintMsg = new StringBuffer();
  264. try {
  265. HashMap printAttributes = null;
  266. IBizContext bizContext = getBizContext(context);
  267. if (bizContext != null && bizContext.getBizContent() != null) {
  268. printAttributes = bizContext.getBizContent().getAttributes("/EAS_Note.kdrs/s-HR/AffairBiz/EmpEnroll/EmpEnrollBiz.r1-print", new String[]{"isselected", "prttimes"});
  269. }
  270. if (printAttributes != null && printAttributes.get("isselected") == null) {
  271. return data;
  272. } else {
  273. int curNum = 1;
  274. if (printAttributes != null) {
  275. boolean isTimesCtrl = Integer.parseInt(String.valueOf(printAttributes.get("isselected"))) == 1;
  276. if (!isTimesCtrl) {
  277. return data;
  278. }
  279. }
  280. ObjectUuidPK pk = new ObjectUuidPK(idList.get(0).toString());
  281. String bosType = pk.getObjectType().toString();
  282. IPrintIntegration pinfo = PrintIntegrationFactory.getRemoteInstance();
  283. List infoList = pinfo.getBillsPrintInfoByList(idList, bosType);
  284. if (rptTemplate != null && rptTemplate.trim().length() > 0) {
  285. for (int i = 0; i < infoList.size(); ++i) {
  286. logger.info("start the print control!");
  287. int maxNum = 0;
  288. if (printAttributes != null && printAttributes.get("prttimes") != null) {
  289. maxNum = Integer.parseInt(String.valueOf(printAttributes.get("prttimes")));
  290. }
  291. int pnum = ((AbstractPrintIntegrationInfo) infoList.get(i)).getPrintedNumber();
  292. String billID1 = ((AbstractPrintIntegrationInfo) infoList.get(i)).getPrintBillID();
  293. logger.info("Max print number:>>" + maxNum);
  294. logger.info("Alreadey print number:>>" + pnum);
  295. logger.info("current print number:>>" + curNum);
  296. String billNumber;
  297. String msgInfo;
  298. Object[] objs;
  299. if (pnum >= maxNum) {
  300. idList.remove(billID1);
  301. billNumber = pinfo.getBillNumberByBosType(bosType, billID1);
  302. msgInfo = EASResource.getString("com.kingdee.eas.basedata.assistant.PrintIntegrationResource", "pi.controlinfo1");
  303. objs = new Object[]{billNumber, String.valueOf(curNum), String.valueOf(pnum), String.valueOf(maxNum)};
  304. failToPrintMsg.append(MessageFormat.format(msgInfo, objs) + "\n");
  305. HTML(failToPrintMsg.toString());
  306. } else if (curNum + pnum > maxNum) {
  307. idList.remove(billID1);
  308. billNumber = pinfo.getBillNumberByBosType(bosType, billID1);
  309. msgInfo = EASResource.getString("com.kingdee.eas.basedata.assistant.PrintIntegrationResource", "pi.controlinfo2");
  310. objs = new Object[]{billNumber, String.valueOf(curNum), String.valueOf(pnum), String.valueOf(maxNum)};
  311. failToPrintMsg.append(MessageFormat.format(msgInfo, objs) + "\n");
  312. HTML(failToPrintMsg.toString());
  313. }
  314. }
  315. }
  316. multiDataProvider.put("MainQuery", (BOSQueryDelegate) data);
  317. CommonPrintIntegrationDataProvider printQueryData = new CommonPrintIntegrationDataProvider(bosType.toString(), PrintIntegrationManager.getPrintQueryPK());
  318. multiDataProvider.put("PrintQuery", printQueryData);
  319. PrintIntegrationManager.initPrint((KDNoteWebServerHelper) SHRContext.getSessionContext().get(NODE_SERVER), pk.getObjectType(), idList, rptTemplate, "com.kingdee.eas.scm.common.SCMResource", true);
  320. return multiDataProvider;
  321. }
  322. } catch (Exception var21) {
  323. var21.printStackTrace();
  324. return data;
  325. }
  326. }
  327. public static void HTML(String message) throws ShrWebBizException {
  328. ServletResponse response = SHRContext.getInstance().getResponse();
  329. PrintWriter pw;
  330. try {
  331. pw = response.getWriter();
  332. } catch (IOException var4) {
  333. throw new ShrWebBizException("can't open the output stream!");
  334. }
  335. pw.write(message);
  336. pw.flush();
  337. pw.close();
  338. }
  339. }