CreateCertification.java 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415
  1. package com.kingdee.eas.custom.certification.utils;
  2. import com.kingdee.bos.BOSException;
  3. import com.kingdee.bos.Context;
  4. import com.kingdee.bos.dao.IObjectPK;
  5. import com.kingdee.bos.dao.ormapping.ObjectUuidPK;
  6. import com.kingdee.bos.metadata.function.WfEventListenerStateManager;
  7. import com.kingdee.bos.util.BOSUuid;
  8. import com.kingdee.eas.base.permission.UserFactory;
  9. import com.kingdee.eas.base.permission.UserInfo;
  10. import com.kingdee.eas.basedata.org.AdminOrgUnitFactory;
  11. import com.kingdee.eas.basedata.org.AdminOrgUnitInfo;
  12. import com.kingdee.eas.basedata.org.PositionFactory;
  13. import com.kingdee.eas.basedata.org.PositionInfo;
  14. import com.kingdee.eas.basedata.person.PersonInfo;
  15. import com.kingdee.eas.common.EASBizException;
  16. import com.kingdee.eas.custom.sendmessage.utils.SendMessageUtils;
  17. import com.kingdee.eas.framework.CoreBaseInfo;
  18. import com.kingdee.eas.hr.affair.*;
  19. import com.kingdee.eas.hr.base.ApproveTypeEnum;
  20. import com.kingdee.eas.hr.base.EmpPosOrgRelationCollection;
  21. import com.kingdee.eas.hr.base.EmpPosOrgRelationFactory;
  22. import com.kingdee.eas.hr.base.HRBillStateEnum;
  23. import com.kingdee.eas.hr.emp.LabContractFirstPartyInfo;
  24. import com.kingdee.eas.hr.emp.PersonContactMethodInfo;
  25. import com.kingdee.shr.base.syssetting.exception.SHRWebException;
  26. import com.kingdee.shr.base.syssetting.exception.ShrWebBizException;
  27. import com.kingdee.shr.certificationservice.*;
  28. import com.kingdee.shr.certificationservice.app.CertificateBillSource;
  29. import com.kingdee.shr.certificationservice.app.CertificateStatusEnum;
  30. import com.kingdee.shr.certificationservice.app.CertificationDrawUpMode;
  31. import com.kingdee.util.StringUtils;
  32. import com.kingdee.util.UuidException;
  33. import org.apache.commons.lang3.ObjectUtils;
  34. import org.slf4j.Logger;
  35. import org.slf4j.LoggerFactory;
  36. import java.io.IOException;
  37. import java.util.*;
  38. public class CreateCertification {
  39. private static Logger logger = LoggerFactory.getLogger(CreateCertification.class);
  40. /**
  41. * 根据离职单据id生成离职证明
  42. * @param ctx
  43. * @param billId
  44. * @throws BOSException
  45. * @throws EASBizException
  46. */
  47. public static void createCertificationById(Context ctx, String billId,int auditType) throws BOSException, EASBizException {
  48. IResignBizBill bizIns = ResignBizBillFactory.getLocalInstance(ctx);
  49. // 离职单
  50. ResignBizBillInfo resiInfo = bizIns.getResignBizBillInfo(new ObjectUuidPK(billId));
  51. ResignBizBillEntryCollection entrys = resiInfo.getEntrys();
  52. // List<String> billList = new ArrayList();
  53. for (int i = 0; i < entrys.size(); i++) {
  54. ResignBizBillEntryInfo resiEn = entrys.get(i);
  55. createCert(ctx, resiEn.getId().toString(),auditType);
  56. }
  57. }
  58. /**
  59. *
  60. * @param ctx
  61. * @param entryId
  62. */
  63. public static void createCert(Context ctx, String entryId,int auditType) {
  64. List<String> certIds = new ArrayList();
  65. HRCertificationBillInfo quitElecInfo = new HRCertificationBillInfo();
  66. HRCertificationBillInfo socialElecInfo = new HRCertificationBillInfo();
  67. try {
  68. IResignBizBillEntry entryIns = ResignBizBillEntryFactory.getLocalInstance(ctx);
  69. ResignBizBillEntryInfo resiEn = entryIns.getResignBizBillEntryInfo(new ObjectUuidPK(entryId));
  70. //
  71. IResignBizBill billIns = ResignBizBillFactory.getLocalInstance(ctx);
  72. ResignBizBillInfo resiInfo = billIns.getResignBizBillInfo(new ObjectUuidPK(resiEn.getBill().getId()));
  73. // 人员
  74. PersonInfo person = resiEn.getPerson();
  75. quitElecInfo.setPerson(person);
  76. socialElecInfo.setPerson(person);
  77. // 人事业务组织
  78. quitElecInfo.setHrOrgUnit(resiInfo.getHrOrgUnit());
  79. socialElecInfo.setHrOrgUnit(resiInfo.getHrOrgUnit());
  80. //直接审批
  81. if(auditType == 1){
  82. // 状态
  83. quitElecInfo.setBillState(HRBillStateEnum.SAVED);
  84. socialElecInfo.setBillState(HRBillStateEnum.SAVED);
  85. quitElecInfo.setApproveType(ApproveTypeEnum.DIRECT);
  86. socialElecInfo.setApproveType(ApproveTypeEnum.DIRECT);
  87. }else{
  88. quitElecInfo.setBillState(HRBillStateEnum.SUBMITED);
  89. socialElecInfo.setBillState(HRBillStateEnum.SUBMITED);
  90. quitElecInfo.setApproveType(ApproveTypeEnum.WORKFLOW);
  91. socialElecInfo.setApproveType(ApproveTypeEnum.WORKFLOW);
  92. }
  93. // 制单日期
  94. quitElecInfo.setApplyDate(new Date());
  95. socialElecInfo.setApplyDate(new Date());
  96. // 审批日期
  97. // quitElecInfo.setBizDate(new Date());
  98. // socialElecInfo.setBizDate(new Date());
  99. // 制单人
  100. quitElecInfo.setApplier(resiInfo.getApplier());
  101. socialElecInfo.setApplier(resiInfo.getApplier());
  102. // 单据来源人事
  103. quitElecInfo.setBillSource(CertificateBillSource.CertificateEmp);
  104. socialElecInfo.setBillSource(CertificateBillSource.CertificateEmp);
  105. //
  106. // quitElecInfo.put("billType", CertificateBillType.Common);
  107. // socialElecInfo.put("billType", CertificateBillType.Common);
  108. // 源单id
  109. quitElecInfo.put("souBillId", resiInfo.getId());
  110. socialElecInfo.put("souBillId", resiInfo.getId());
  111. //是否自动生成
  112. quitElecInfo.put("isAutoGen", true);
  113. socialElecInfo.put("isAutoGen", true);
  114. //是否发送
  115. quitElecInfo.put("isSend", false);
  116. socialElecInfo.put("isSend", false);
  117. // 快递
  118. quitElecInfo.setNeedExpress(false);
  119. socialElecInfo.setNeedExpress(false);
  120. //
  121. quitElecInfo.setFreeDate(resiEn.getBizDate());
  122. socialElecInfo.setFreeDate(resiEn.getBizDate());
  123. // 开具状态
  124. quitElecInfo.setCertificationStatus(CertificateStatusEnum.UnCertificated);
  125. socialElecInfo.setCertificationStatus(CertificateStatusEnum.UnCertificated);
  126. IHRCertificationBillType cerIns = HRCertificationBillTypeFactory.getLocalInstance(ctx);
  127. if (ObjectUtils.isNotEmpty(resiEn.get("quittemp"))) {
  128. CertificationTempletInfo tempInfo = (CertificationTempletInfo) resiEn.get("quittemp");
  129. setTempType(ctx, quitElecInfo, tempInfo);
  130. }
  131. if (ObjectUtils.isNotEmpty(resiEn.get("socialtemp"))) {
  132. CertificationTempletInfo tempInfo = (CertificationTempletInfo) resiEn.get("socialtemp");
  133. setTempType(ctx, socialElecInfo, tempInfo);
  134. }
  135. // reason 申请原因 实体
  136. ICertificationApplyReason reasonIns = CertificationApplyReasonFactory.getLocalInstance(ctx);
  137. CertificationApplyReasonInfo reasonInfo = reasonIns.getCertificationApplyReasonInfo(" where name = '离职'");
  138. quitElecInfo.setReason(reasonInfo);
  139. socialElecInfo.setReason(reasonInfo);
  140. // expectedTime 期望日期
  141. // freeDate 劳动关系解除日期
  142. // drawUpMode 开具形式 电子证明
  143. quitElecInfo.setDrawUpMode(CertificationDrawUpMode.electronic);
  144. socialElecInfo.setDrawUpMode(CertificationDrawUpMode.electronic);
  145. // labContractFirstParty 证明开具主体
  146. quitElecInfo.setLabContractFirstParty(resiEn.get("labContractFirstParty") == null ? null
  147. : (LabContractFirstPartyInfo) resiEn.get("labContractFirstParty"));
  148. socialElecInfo.setLabContractFirstParty(resiEn.get("labContractFirstParty") == null ? null
  149. : (LabContractFirstPartyInfo) resiEn.get("labContractFirstParty"));
  150. // certificationStatus 证明状态
  151. quitElecInfo.put("genFromResign", true);
  152. socialElecInfo.put("genFromResign", true);
  153. Map<String, Object> pData = new HashMap<String, Object>();
  154. ResignBillUtil.assemblePersonInfoDataMap(ctx, pData, person.getId().toString());
  155. if (ObjectUtils.isNotEmpty(pData)) {
  156. // 联系方式
  157. setContact(quitElecInfo, pData.get("personContact"));
  158. setContact(socialElecInfo, pData.get("personContact"));
  159. // adminOrg 所属行政组织
  160. quitElecInfo
  161. .setAdminOrg(pData.get("adminOrg") == null ? null : (AdminOrgUnitInfo) pData.get("adminOrg"));
  162. socialElecInfo
  163. .setAdminOrg(pData.get("adminOrg") == null ? null : (AdminOrgUnitInfo) pData.get("adminOrg"));
  164. // position 职位
  165. quitElecInfo.setPosition(pData.get("position") == null ? null : (PositionInfo) pData.get("position"));
  166. socialElecInfo.setPosition(pData.get("position") == null ? null : (PositionInfo) pData.get("position"));
  167. // enterDate 入职日期
  168. quitElecInfo.put("enterDate", pData.get("enterDate"));
  169. socialElecInfo.put("enterDate", pData.get("enterDate"));
  170. }
  171. IHRCertificationBill certIns;
  172. certIns = HRCertificationBillFactory.getLocalInstance(ctx);
  173. // 离职单如果选择了是否需要电子证明;用于判断;
  174. if (resiEn.getBoolean("quitElec")) {
  175. updateOtherInfo(ctx,quitElecInfo);
  176. IObjectPK addnew = certIns.addnew(quitElecInfo);
  177. String keyValue = StringUtils.cnulls(addnew.getKeyValue("id"));
  178. certIds.add(keyValue);
  179. }
  180. // 社保结算证明
  181. if (resiEn.getBoolean("socialElec")) {
  182. updateOtherInfo(ctx,quitElecInfo);
  183. IObjectPK addnew = certIns.addnew(socialElecInfo);
  184. String keyValue = StringUtils.cnulls(addnew.getKeyValue("id"));
  185. certIds.add(keyValue);
  186. }
  187. if (certIds.size() > 0) {
  188. if(auditType == 1 ){
  189. auditCertiBill(ctx, certIds);
  190. }else{
  191. submitCertific(ctx, certIds);
  192. }
  193. }
  194. } catch (BOSException e) {
  195. e.printStackTrace();
  196. } catch (EASBizException e) {
  197. e.printStackTrace();
  198. }
  199. }
  200. /**
  201. * 通过模板字段设置模板类型
  202. * @throws EASBizException
  203. * @throws BOSException
  204. */
  205. private static void setTempType(Context ctx, HRCertificationBillInfo certInfo, CertificationTempletInfo tempInfo)
  206. throws EASBizException, BOSException {
  207. ICertificationTemplet tempIns = CertificationTempletFactory.getLocalInstance(ctx);
  208. tempInfo = tempIns.getCertificationTempletInfo(new ObjectUuidPK(tempInfo.getId()));
  209. certInfo.setCertificationTemplet(tempInfo);
  210. IHRCertificationBillType cerIns = HRCertificationBillTypeFactory.getLocalInstance(ctx);
  211. if (ObjectUtils.isNotEmpty(tempInfo.getCertificationBillType())) {
  212. HRCertificationBillTypeInfo typeInfo = cerIns
  213. .getHRCertificationBillTypeInfo(new ObjectUuidPK(tempInfo.getCertificationBillType().getId()));
  214. if (null != typeInfo) {
  215. certInfo.setCertificationBillType(typeInfo);
  216. }
  217. }
  218. }
  219. /**
  220. * 联系方式
  221. */
  222. private static void setContact(HRCertificationBillInfo elecProofInfo ,Object cmInfoObj) {
  223. if( ObjectUtils.isNotEmpty(cmInfoObj) ) {
  224. PersonContactMethodInfo cmInfo = (PersonContactMethodInfo)cmInfoObj;
  225. //email 联系邮箱
  226. elecProofInfo.setEmail(cmInfo.getEmail());
  227. //手机号码 nCell
  228. elecProofInfo.setNCell( cmInfo.getNCell());
  229. elecProofInfo.setCallPhone(cmInfo.getNCell());
  230. //国际区号 globalRoaming
  231. elecProofInfo.setGlobalRoaming(cmInfo.getGlobalRoaming());
  232. }
  233. }
  234. /**
  235. * 审批证明单据
  236. */
  237. private static void auditCertiBill(Context ctx, List<String> bills) {
  238. try {
  239. IHRCertificationBill certiIns = HRCertificationBillFactory.getLocalInstance(ctx);
  240. for(int i = 0;i<bills.size();i++) {
  241. certiIns.auditEntryEffect(BOSUuid.read(bills.get(i)));
  242. }
  243. // Thread.sleep(3000L);
  244. // batchCompanySign (ctx,billList);
  245. } catch (BOSException e ) {
  246. e.printStackTrace();
  247. } catch (EASBizException e) {
  248. e.printStackTrace();
  249. }
  250. }
  251. private static void submitCertific(Context ctx, List<String> bills) {
  252. try {
  253. for(int i = 0;i<bills.size();i++) {
  254. exeSubmit(ctx,bills.get(i));
  255. Thread.sleep(2000);
  256. }
  257. } catch (BOSException e ) {
  258. e.printStackTrace();
  259. } catch (EASBizException e) {
  260. e.printStackTrace();
  261. } catch (InterruptedException e) {
  262. e.printStackTrace();
  263. }
  264. }
  265. /**
  266. * 签署
  267. * @param ctx
  268. */
  269. public static void batchCompanySign (Context ctx , List<String> billList)
  270. throws SHRWebException, InterruptedException, BOSException, EASBizException, IOException {
  271. try {
  272. IECertificationOptFacade eCertificationOptFacade = ECertificationOptFacadeFactory.getLocalInstance(ctx);
  273. for (int i = 0; i < billList.size(); i++) {
  274. eCertificationOptFacade.createECertification(BOSUuid.read(billList.get(i)), true);
  275. Thread.sleep(2000L);
  276. }
  277. } catch (EASBizException var15) {
  278. logger.error(var15.getMessage(), var15);
  279. } catch (BOSException var16) {
  280. logger.error(var16.getMessage(), var16);
  281. } catch (Exception var17) {
  282. logger.error(var17.getMessage(), var17);
  283. }
  284. }
  285. /**
  286. * 发送消息
  287. * @param ctx
  288. * @param billList
  289. * @throws BOSException
  290. * @throws EASBizException
  291. * @throws IOException
  292. */
  293. public static void sendMsg(Context ctx, List<String> billList) throws BOSException, EASBizException, IOException, ShrWebBizException {
  294. for(int i = 0;i<billList.size();i++) {
  295. SendMessageUtils.sendMessage(ctx, billList.get(i));
  296. }
  297. }
  298. /**
  299. * 更新其他信息
  300. * 提交前执行
  301. * @param ctx
  302. * @param certificationBillinfo
  303. */
  304. private static void updateOtherInfo(Context ctx, HRCertificationBillInfo certificationBillinfo) {
  305. try {
  306. if (certificationBillinfo.getAdminOrg() != null) {
  307. AdminOrgUnitInfo adminorg = AdminOrgUnitFactory.getLocalInstance(ctx).getAdminOrgUnitInfo(
  308. new ObjectUuidPK(BOSUuid.read(certificationBillinfo.getAdminOrg().getId().toString())));
  309. certificationBillinfo.setAdminOrgStr(adminorg.getName());
  310. }
  311. if (certificationBillinfo.getPosition() != null) {
  312. PositionInfo position = PositionFactory.getLocalInstance(ctx).getPositionInfo(
  313. new ObjectUuidPK(BOSUuid.read(certificationBillinfo.getPosition().getId().toString())));
  314. certificationBillinfo.setPositionStr(position.getName());
  315. }
  316. CertificationApplyReasonInfo certificationApplyReasonInfo = CertificationApplyReasonFactory
  317. .getLocalInstance(ctx).getCertificationApplyReasonInfo(
  318. new ObjectUuidPK(BOSUuid.read(certificationBillinfo.getReason().getId().toString())));
  319. certificationBillinfo.setApplyreasonStr(certificationApplyReasonInfo.getName());
  320. String personId = certificationBillinfo.getPerson().getId().toString();
  321. EmpPosOrgRelationCollection empPosOrgRelationCollection = EmpPosOrgRelationFactory.getLocalInstance(ctx)
  322. .getEmpPosOrgRelationCollection("where person='" + personId
  323. + "' and assignType=1 and isSystem=1 order by endDateTime desc");
  324. if (empPosOrgRelationCollection.size() > 0) {
  325. certificationBillinfo.setEmpOrgRelation(empPosOrgRelationCollection.get(0));
  326. }
  327. HRCertificationBillTypeInfo billTypeInfo = (HRCertificationBillTypeInfo) certificationBillinfo.get("certificationBillType");
  328. if (billTypeInfo != null) {
  329. String certificationBillTypeId = billTypeInfo.getId().toString();
  330. CertificationTempletCollection coll = CertificationTempletFactory.getLocalInstance(ctx)
  331. .getCertificationTempletCollection(
  332. "where certificationBillType = '" + certificationBillTypeId + "' and state=1");
  333. if (coll != null && coll.size() == 1) {
  334. CertificationTempletInfo tempinfo = coll.get(0);
  335. certificationBillinfo.setCertificationTemplet(tempinfo);
  336. }
  337. }
  338. } catch (EASBizException var11) {
  339. logger.error(var11.getMessage(), var11);
  340. } catch (BOSException var12) {
  341. logger.error(var12.getMessage(), var12);
  342. } catch (UuidException var13) {
  343. logger.error(var13.getMessage(), var13);
  344. }
  345. }
  346. /**
  347. * 调用submit方法
  348. */
  349. public static void exeSubmit(Context ctx, String billId ) throws BOSException, EASBizException {
  350. //提交
  351. try {
  352. IHRCertificationBill localInstance = HRCertificationBillFactory.getLocalInstance(ctx);
  353. HRCertificationBillInfo billInfo = localInstance.getHRCertificationBillInfo(new ObjectUuidPK(billId));
  354. // IObjectPK userId = ctx.getCaller();
  355. // UserInfo user = UserFactory.getLocalInstance(ctx).getUserByID(userId);
  356. // billInfo.setAuditor(user);
  357. boolean isOpen = WfEventListenerStateManager.getInstance().isEnable();
  358. //开启工作流事务
  359. if(!isOpen) {
  360. WfEventListenerStateManager.getInstance().enableEventListener();
  361. }
  362. localInstance.submit(billInfo);
  363. //如果本来工作流服务状态不是关的,将它关掉
  364. if(!isOpen) {
  365. WfEventListenerStateManager.getInstance().disableEventListener();
  366. }
  367. } catch (Exception var4) {
  368. var4.printStackTrace();
  369. }
  370. }
  371. }