PageRenderTime 62ms CodeModel.GetById 29ms RepoModel.GetById 1ms app.codeStats 0ms

/src/main/java/com/wcs/tms/service/process/inveFinaMargin/InveFinaMarginService.java

https://github.com/YuanZhencai/tms
Java | 600 lines | 424 code | 28 blank | 148 comment | 56 complexity | ea0f4a944a8ba191ac65e3a5d409440f MD5 | raw file
  1. package com.wcs.tms.service.process.inveFinaMargin;
  2. import java.io.Serializable;
  3. import java.text.DecimalFormat;
  4. import java.util.ArrayList;
  5. import java.util.Date;
  6. import java.util.HashMap;
  7. import java.util.List;
  8. import java.util.Map;
  9. import javax.ejb.EJB;
  10. import javax.ejb.Stateless;
  11. import javax.faces.model.SelectItem;
  12. import javax.inject.Inject;
  13. import org.apache.commons.logging.Log;
  14. import org.apache.commons.logging.LogFactory;
  15. import com.wcs.base.service.EntityService;
  16. import com.wcs.base.service.LoginService;
  17. import com.wcs.base.util.DateUtil;
  18. import com.wcs.common.filenet.pe.PEManager;
  19. import com.wcs.common.model.P;
  20. import com.wcs.tms.mail.MailService;
  21. import com.wcs.tms.mail.MailUtil;
  22. import com.wcs.tms.mail.SendMailService;
  23. import com.wcs.tms.conf.xml.ProcessXmlUtil;
  24. import com.wcs.tms.exception.ServiceException;
  25. import com.wcs.tms.mail.Mail;
  26. import com.wcs.tms.message.ExceptionMessage;
  27. import com.wcs.tms.model.CompanyAccount;
  28. import com.wcs.tms.model.ProcInveFinaBail;
  29. import com.wcs.tms.model.ProcInveFinaDetail;
  30. import com.wcs.tms.model.ProcTMSStatus;
  31. import com.wcs.tms.service.process.common.FtpUploadService;
  32. import com.wcs.tms.service.process.common.ProcessUtilMapService;
  33. import com.wcs.tms.service.process.common.TmsStatusService;
  34. import com.wcs.tms.service.system.bank.BankService;
  35. import com.wcs.tms.service.system.company.CompanyAccountServer;
  36. import com.wcs.tms.util.ProcessDefineUtil;
  37. import com.wcs.tms.view.process.common.entity.PaymentVo;
  38. import com.wcs.tms.view.process.common.entity.ProcessDetailVo;
  39. import filenet.vw.api.VWLogElement;
  40. import filenet.vw.api.VWWorkObjectNumber;
  41. /**
  42. * <p>Project: tms</p>
  43. * <p>Title: 投资融资保证金流程service</p>
  44. * <p>Description: </p>
  45. * <p>Copyright (c) 2012 Wilmar Consultancy Services</p>
  46. * <p>All Rights Reserved.</p>
  47. * @author <a href="mailto:wangyang6@wcs-global.com">Wang Yang</a>
  48. */
  49. @Stateless
  50. public class InveFinaMarginService implements Serializable {
  51. private static final long serialVersionUID = 1L;
  52. private static Log log = LogFactory.getLog(InveFinaMarginService.class);
  53. @Inject
  54. PEManager peManager;
  55. @Inject
  56. LoginService loginService;
  57. @Inject
  58. EntityService entityService;
  59. @Inject
  60. MailService mailService;
  61. @Inject
  62. SendMailService sendMailService;
  63. @Inject
  64. CompanyAccountServer companyAccountServer;
  65. @Inject
  66. BankService bankService;
  67. // 9.11
  68. @Inject
  69. ProcessUtilMapService processUtilMapService;
  70. @Inject
  71. FtpUploadService ftpUploadService;
  72. @EJB
  73. private TmsStatusService tmsStatusService;
  74. List<CompanyAccount> ca = new ArrayList<CompanyAccount>();
  75. // 是否需要去除重复的银行
  76. private Boolean ifa = true;
  77. /**
  78. * 得到与公司有业务关系的银行
  79. * @param companyId
  80. * @return
  81. */
  82. public List<SelectItem> getCompanyBankSelect(Long companyId) {
  83. List<SelectItem> bankSelect = new ArrayList<SelectItem>();
  84. List<CompanyAccount> ca = this.getComanyBank(companyId);
  85. if (ifa) {
  86. log.info("去重复银行");
  87. for (CompanyAccount c : ca) {
  88. // 去重复银行
  89. Boolean has = false;
  90. for (SelectItem si : bankSelect) {
  91. if (c.getAccountDesc().equals(si.getValue())) {
  92. has = true;
  93. }
  94. }
  95. if (!has) {
  96. bankSelect.add(new SelectItem(c.getAccountDesc(), c.getAccountDesc()));
  97. }
  98. log.info("cao" + c.getAccountDesc());
  99. }
  100. } else {
  101. log.info("不去重复银行");
  102. for (CompanyAccount c : ca) {
  103. // 不去重复银行
  104. log.info("getCounterpartyCode:" + c.getCounterpartyCode());
  105. log.info("AccountDesc:" + c.getAccountDesc());
  106. SelectItem si = new SelectItem(c.getCounterpartyCode(), c.getAccountDesc());
  107. bankSelect.add(si);
  108. }
  109. }
  110. log.info("bankSelect.size():" + bankSelect.size());
  111. return bankSelect;
  112. }
  113. /**
  114. * 得到公司银行关系列表
  115. * @param companyId
  116. * @return
  117. */
  118. public List<CompanyAccount> getComanyBank(Long companyId) {
  119. ca = companyAccountServer.findCompanyAccountList(companyId);
  120. return ca;
  121. }
  122. /**
  123. * 得到公司银行里面的帐号
  124. * @param companyId
  125. * @param accountDesc(帐号描述)
  126. * @return
  127. */
  128. public List<SelectItem> getCompanyAccountSelect(Long companyId, String accountDesc) {
  129. List<SelectItem> accountSelect = new ArrayList<SelectItem>();
  130. log.info("执行获得公司银行帐号方法");
  131. accountSelect = companyAccountServer.findBankSelect(companyId, accountDesc);
  132. log.info("得到公司银行里面的帐号" + accountSelect);
  133. return accountSelect;
  134. }
  135. /**
  136. * 得到公司银行里面的帐号
  137. * @param counterpartyCode
  138. * @return
  139. */
  140. public List<SelectItem> getCompanyAccountSelectNo(String counterpartyCode) {
  141. List<SelectItem> accountSelect = new ArrayList<SelectItem>();
  142. log.info("执行获得公司银行帐号方法");
  143. accountSelect = companyAccountServer.findBankSelect(counterpartyCode);
  144. log.info("得到公司银行里面的帐号:" + accountSelect.size());
  145. return accountSelect;
  146. }
  147. /**
  148. * 保存投融资保证金
  149. * @param procInveFinaBail
  150. * @throws ServiceException
  151. */
  152. public void saveInveFinaBail(ProcInveFinaBail procInveFinaBail) throws ServiceException {
  153. try {
  154. this.entityService.create(procInveFinaBail);
  155. } catch (Exception e) {
  156. log.error("saveInveFinaBail方法 保存投融资保证金出现异常:" , e);
  157. throw new ServiceException(ExceptionMessage.PREGITCAPTIAL_SAVE, e);
  158. }
  159. }
  160. /**
  161. * 流程创建保存
  162. * @param procInveFinaBail
  163. * @return
  164. * @throws ServiceException
  165. */
  166. public String createProcInstance(ProcInveFinaBail procInveFinaBail) throws ServiceException {
  167. String procInstId = "";
  168. try {
  169. // PE流程创建
  170. // 流程实例ID,并保存
  171. procInstId = this.vwApplication(procInveFinaBail);
  172. log.info("PE流程创建成功!!!!");
  173. procInveFinaBail.setProcInstId(procInstId);
  174. procInveFinaBail.setCreatedBy(loginService.getCurrentUserName());
  175. // 保存到数据库中
  176. entityService.create(procInveFinaBail);
  177. // 生成流程实例编号映射9.11
  178. processUtilMapService.generateProcessMap(procInstId, "BPM_RA_014", procInveFinaBail.getCompany());
  179. } catch (Exception e) {
  180. log.error("createProcInstance方法 流程创建保存错误信息:" , e);
  181. throw new ServiceException(ExceptionMessage.INSTANCE_CREATE, e);
  182. }
  183. return procInstId;
  184. }
  185. /**
  186. * PE流程创建
  187. * @param procInveFinaBail
  188. * @return
  189. * @throws ServiceException
  190. */
  191. public String vwApplication(ProcInveFinaBail procInveFinaBail) throws ServiceException {
  192. String workClassName = ProcessXmlUtil.getProcessAttribute("id", "InveFinaBail", "className");
  193. String workflowNumber = "";
  194. if (peManager.checkWorkClassName(workClassName)) {
  195. try {
  196. // 验证流程类名
  197. workflowNumber = peManager.vwCreateInstance(workClassName, "tms_subject1");
  198. HashMap<String, Object> step1para = new HashMap<String, Object>();
  199. peManager.vwLauchStep("TMS_Requester", step1para, workflowNumber);
  200. } catch (Exception e) {
  201. log.error("vwApplication方法 PE流程创建错误信息:" , e);
  202. throw new ServiceException(ExceptionMessage.FN_CONNECT, e);
  203. }
  204. } else {
  205. throw new ServiceException(ExceptionMessage.FN_NO_CLASS);
  206. }
  207. return workflowNumber;
  208. }
  209. /**
  210. * 流程实例Id得到投融资保证金实例
  211. * @param procInstId
  212. * @return
  213. */
  214. public ProcInveFinaBail findProcInstanceByProcInstId(String procInstId) {
  215. StringBuilder jpql = new StringBuilder("select iFB from ProcInveFinaBail iFB join fetch iFB.company where iFB.defunctInd = 'N'");
  216. jpql.append(" and iFB.procInstId='" + procInstId + "'");
  217. return entityService.findUnique(jpql.toString());
  218. }
  219. /**
  220. * 查询流程详细
  221. * @param procInstId
  222. * @return
  223. */
  224. public List<ProcessDetailVo> getProcessDetail(String procInstId) throws ServiceException {
  225. List<ProcessDetailVo> detailVos = new ArrayList<ProcessDetailVo>();
  226. String filter = "1=1 and F_WobNum = :wobNum and (F_EventType = :eventType1 or F_EventType = :eventType2)";
  227. Object[] substitutionVars = { new VWWorkObjectNumber(procInstId),
  228. ProcessDefineUtil.PROCESS_EVENTTYPE_MAP.get(ProcessDefineUtil.EventTypeEnum.StepEnd),
  229. ProcessDefineUtil.PROCESS_EVENTTYPE_MAP.get(ProcessDefineUtil.EventTypeEnum.ProcessTerminal) };
  230. try {
  231. List<VWLogElement> les = new ArrayList<VWLogElement>();
  232. les = peManager.vwEventLogWob(filter, substitutionVars);
  233. for (VWLogElement le : les) {
  234. ProcessDetailVo detailVo = new ProcessDetailVo();
  235. if (ProcessDefineUtil.PROCESS_EVENTTYPE_MAP.get(ProcessDefineUtil.EventTypeEnum.ProcessTerminal).equals(le.getEventType())) {
  236. detailVo.setProssNodeName("流程终止");
  237. } else {
  238. detailVo.setProssNodeName(le.getStepName());
  239. }
  240. detailVo.setOperatorsName(le.getUserName());
  241. detailVo.setOperatorTime(le.getTimeStamp());
  242. detailVo.setNodeMemo((String) le.getFieldValue("F_Comment"));
  243. detailVo.setId(new Long(le.getSequenceNumber()));
  244. detailVos.add(detailVo);
  245. }
  246. } catch (Exception e) {
  247. log.error("getProcessDetail方法 查询流程详细错误信息:" , e);
  248. throw new ServiceException(ExceptionMessage.FN_CONNECT, e);
  249. }
  250. return detailVos;
  251. }
  252. /**
  253. * 查询付款过程详细
  254. * @param procInstId
  255. * @return
  256. * @throws ServiceException
  257. */
  258. public List<PaymentVo> getPayDetail(String procInstId) throws ServiceException {
  259. List<PaymentVo> payDetailVos = new ArrayList<PaymentVo>();
  260. try {
  261. // 查询流程实例编号对应的流程ID
  262. StringBuilder jpql = new StringBuilder("select iFB.id from ProcInveFinaBail iFB join fetch iFB.company where iFB.defunctInd = 'N'");
  263. jpql.append(" and iFB.procInstId='" + procInstId + "'");
  264. log.info(jpql);
  265. log.info("!!!!!!!!!!!!!!!!id为:" + entityService.findUnique(jpql.toString()));
  266. // 根据明细表中的字段
  267. StringBuilder jpql2 = new StringBuilder(
  268. "select iFD from ProcInveFinaDetail iFD left join fetch iFD.procInveFinaBail where iFD.defunctInd = 'N'");
  269. jpql2.append(" and iFD.procInveFinaBail.id=" + entityService.findUnique(jpql.toString()) + "");
  270. log.info(jpql2);
  271. List<ProcInveFinaDetail> amo = entityService.find(jpql2.toString());
  272. int i = 1;
  273. for (ProcInveFinaDetail d : amo) {
  274. PaymentVo payDetailVo = new PaymentVo();
  275. payDetailVo.setSerialNumber(i);
  276. payDetailVo.setPayDatetime(d.getCreatedDatetime());
  277. payDetailVo.setPayWay(d.getPayWay());
  278. payDetailVo.setPayFundsTotal(d.getPayFundsTotal());
  279. payDetailVo.setPayer(d.getCreatedBy());
  280. i++;
  281. payDetailVos.add(payDetailVo);
  282. }
  283. } catch (Exception e) {
  284. log.error("getPayDetail方法 查询付款过程详细错误信息:" , e);
  285. throw new ServiceException(ExceptionMessage.FN_CONNECT, e);
  286. }
  287. return payDetailVos;
  288. }
  289. /**
  290. * 审批保存
  291. * @param procInveFinaBail
  292. * @param pass
  293. * @param stepName
  294. * @throws ServiceException
  295. */
  296. public void doApprove(ProcInveFinaBail procInveFinaBail, Boolean pass, String stepName) throws ServiceException {
  297. try {
  298. // 加入流程备注抬头
  299. String memoTitle = "";
  300. if (pass) {
  301. memoTitle = ProcessXmlUtil.findStepProperty("id", "InveFinaBail", stepName, "passMemo");
  302. } else {
  303. memoTitle = ProcessXmlUtil.findStepProperty("id", "InveFinaBail", stepName, "nopassMemo");
  304. }
  305. if (memoTitle != null) {
  306. procInveFinaBail.setPeMemo(memoTitle + procInveFinaBail.getPeMemo());
  307. }
  308. // 先执行更新操作
  309. entityService.update(procInveFinaBail);
  310. Map<String, Object> map = new HashMap<String, Object>();
  311. map.put("_Pass", pass);
  312. map.put("_Loan", this.ifLoan(procInveFinaBail));
  313. // map.put("_Currency", this.ifForeignCu(procInveFinaBail));
  314. // 如果是转口
  315. if("Y".equals(procInveFinaBail.getTransit())){
  316. map.put("UI_Transit", true);
  317. }else{
  318. map.put("UI_Transit", false);
  319. }
  320. // 表单类型如果是“投资理财”
  321. if("I".equals(procInveFinaBail.getFormType())){
  322. map.put("UI_Invest_Finance", true);
  323. }else{
  324. map.put("UI_Invest_Finance", false);
  325. }
  326. // 表单类型如果是“投资理财”
  327. if("D".equals(procInveFinaBail.getFormType())){
  328. map.put("UI_Time_Deposit", true);
  329. }else{
  330. map.put("UI_Time_Deposit", false);
  331. }
  332. peManager.vwDisposeTask(procInveFinaBail.getProcInstId(), map, procInveFinaBail.getPeMemo());
  333. } catch (Exception e) {
  334. log.error("doApprove方法 审批保存错误信息:" , e);
  335. throw new ServiceException(ExceptionMessage.FN_CONNECT, e);
  336. }
  337. }
  338. /**
  339. * 确认保存(付款或者终止付款)
  340. * @param procInveFinaBail
  341. * @param procInveFinaDetail
  342. * @param conf
  343. * @param payWay
  344. * @param stepName
  345. * @throws ServiceException
  346. */
  347. public void doConfirm(ProcInveFinaBail procInveFinaBail, ProcInveFinaDetail procInveFinaDetail, Boolean conf, Boolean payWay, String stepName)
  348. throws ServiceException {
  349. // conf:付款标识符-true:付款,false:终止付款
  350. try {
  351. entityService.update(procInveFinaBail);
  352. // 加入流程备注抬头
  353. String memoTitle = "";
  354. if (conf) {
  355. memoTitle = ProcessXmlUtil.findStepProperty("id", "InveFinaBail", stepName, "passMemo");
  356. } else {
  357. memoTitle = ProcessXmlUtil.findStepProperty("id", "InveFinaBail", stepName, "nopassMemo");
  358. }
  359. // 邮件知会需要信息(add on 2013-4-10)
  360. String remark = procInveFinaBail.getPeMemo();
  361. if (memoTitle != null) {
  362. procInveFinaBail.setPeMemo(memoTitle + procInveFinaBail.getPeMemo());
  363. }
  364. // payWay true:SUNGARD付款 false:网银付款
  365. if (payWay) {
  366. procInveFinaDetail.setPayWay("S");
  367. } else {
  368. procInveFinaDetail.setPayWay("O");
  369. }
  370. if (conf) {
  371. log.info("执行付款任务1111111111111111");
  372. // 是否若为true则为足额支付,false为终止付款
  373. procInveFinaDetail.setPayDatetime(new Date());
  374. procInveFinaDetail.setCreatedBy(loginService.getCurrentUserName());
  375. entityService.create(procInveFinaDetail);
  376. log.info("存入数据库成功!!!!!");
  377. Boolean ifAll = ifEnoughPay(procInveFinaBail);
  378. log.info("验证完毕:验证结果是:" + ifAll);
  379. Map<String, Object> map = new HashMap<String, Object>();
  380. map.put("_Enough", ifAll);
  381. Boolean isSungard = false;
  382. if ("S".equals(procInveFinaDetail.getPayWay())) {
  383. isSungard = true;
  384. map.put("TMS_Is_Sungard", true);
  385. } else {
  386. isSungard = false;
  387. map.put("TMS_Is_Sungard", false);
  388. }
  389. peManager.vwDisposeTask(procInveFinaBail.getProcInstId(), map, procInveFinaBail.getPeMemo());
  390. //调用生成ftp文件方法 add on 2013-8-1 by yan
  391. String className = ProcessXmlUtil.getProcessAttribute("id", "InveFinaBail","className");
  392. String bpmId = ftpUploadService.tmsFtpUploadFile(procInveFinaBail.getProcInstId(),
  393. className, procInveFinaDetail.getCreatedDatetime(), isSungard);
  394. if(payWay) {
  395. ProcTMSStatus tmsStatus = new ProcTMSStatus();
  396. tmsStatus.setPayId(procInveFinaDetail.getId());
  397. tmsStatus.setBpmId(bpmId);
  398. tmsStatus.setTmsStatus(TmsStatusService.STATUS_NOIMPORT);
  399. //增加TMS回传表
  400. tmsStatusService.saveTmsStatus(tmsStatus);
  401. }else {
  402. // 邮件知会申请人
  403. log.info("邮件知会申请人");
  404. mailRequester(procInveFinaBail, procInveFinaDetail, conf, stepName, remark);
  405. }
  406. } else {
  407. log.info("执行终止付款任务222222222222222222");
  408. conf = true;
  409. Map<String, Object> map = new HashMap<String, Object>();
  410. map.put("_Enough", conf);
  411. map.put("TMS_Is_Sungard", false);
  412. log.info("stop的值是:" + conf + "执行终止付款");
  413. peManager.vwDisposeTask(procInveFinaBail.getProcInstId(), map, procInveFinaBail.getPeMemo());
  414. // 终止付款时同样需要知会申请人
  415. conf = false;
  416. mailRequester(procInveFinaBail, procInveFinaDetail, conf, stepName,remark);
  417. }
  418. } catch (Exception e) {
  419. log.error("doConfirm方法 确认保存(付款或者终止付款)错误信息:" , e);
  420. throw new ServiceException(ExceptionMessage.FN_CONNECT, e);
  421. }
  422. }
  423. /**
  424. * 验证是否足额支付
  425. * @param procInveFinaBail
  426. * @return
  427. */
  428. public Boolean ifEnoughPay(ProcInveFinaBail procInveFinaBail) {
  429. Boolean enough = false;
  430. Double amount = needPay(procInveFinaBail);
  431. log.info("获得需要支付的总金额:" + amount);
  432. Double payAmount = payedAccount(procInveFinaBail);
  433. log.info("获得已经支付的总金额" + payAmount);
  434. if (amount > payAmount) {
  435. log.info(enough + "!!!!!!未足额支付!!!!!!");
  436. return enough;
  437. }
  438. return true;
  439. }
  440. /**
  441. * 获得需要支付的金额
  442. * @param procInveFinaBail
  443. * @return
  444. */
  445. public Double needPay(ProcInveFinaBail procInveFinaBail) {
  446. StringBuilder jpql = new StringBuilder("select iFB.amount from ProcInveFinaBail iFB where iFB.defunctInd = 'N'");
  447. jpql.append(" and iFB.procInstId='" + procInveFinaBail.getProcInstId() + "'");
  448. Double amount = entityService.findUnique(jpql.toString());
  449. log.info("需要支付总金额是:" + amount);
  450. return amount;
  451. }
  452. /**
  453. * 获得已支付的总金额
  454. * @param procInveFinaBail
  455. * @return
  456. */
  457. public Double payedAccount(ProcInveFinaBail procInveFinaBail) {
  458. Double payAmount = 0D;
  459. StringBuilder jpql = new StringBuilder(
  460. "select iFD from ProcInveFinaDetail iFD left join fetch iFD.procInveFinaBail where iFD.defunctInd = 'N'");
  461. jpql.append(" and iFD.procInveFinaBail.id=" + procInveFinaBail.getId() + "");
  462. log.info(jpql);
  463. List<ProcInveFinaDetail> amo = entityService.find(jpql.toString());
  464. log.info("amo的队列为:" + amo);
  465. for (ProcInveFinaDetail d : amo) {
  466. payAmount += d.getPayFundsTotal();
  467. }
  468. log.info("已支付的总金额是:" + payAmount);
  469. return payAmount;
  470. }
  471. /**
  472. * 验证是否是借款
  473. * @param procInveFinaBail
  474. * @return
  475. */
  476. public Boolean ifLoan(ProcInveFinaBail procInveFinaBail) {
  477. Boolean isLoan = false;
  478. String loan = procInveFinaBail.getLoanIden();
  479. if (loan != null && ("L".equals(loan) || "A".equals(loan))) {
  480. // 是借款或者借款+转款
  481. isLoan = true;
  482. return isLoan;
  483. } else {
  484. // 不是借款
  485. return isLoan;
  486. }
  487. }
  488. /**
  489. * 验证是否是外币
  490. * @return
  491. */
  492. public Boolean ifForeignCu(ProcInveFinaBail procInveFinaBail) {
  493. Boolean isForeign = false;
  494. String foreign = procInveFinaBail.getAmountCu();
  495. if (foreign != null && "1".equals(foreign)) {
  496. // 是人民币=1
  497. return isForeign;
  498. } else {
  499. // 是外币
  500. isForeign = true;
  501. return isForeign;
  502. }
  503. }
  504. /**
  505. * 邮件付款方式选择
  506. * @param procInveFinaDetail
  507. * @return
  508. */
  509. public String selectPayWay(ProcInveFinaDetail procInveFinaDetail) {
  510. if ("S".equals(procInveFinaDetail.getPayWay())) {
  511. return "SUNGARD付款";
  512. } else {
  513. return "网银支付";
  514. }
  515. }
  516. /**
  517. * 邮件通知申请人
  518. * @param procInveFinaBail
  519. * @param procInveFinaDetail
  520. * @param conf
  521. * @param stepName
  522. * @param remark
  523. */
  524. private void mailRequester(ProcInveFinaBail procInveFinaBail, ProcInveFinaDetail procInveFinaDetail, Boolean conf, String stepName, String remark) {
  525. log.info("邮件知会申请人!!!!!!!!!!!");
  526. List<Mail> mailList = new ArrayList<Mail>();
  527. StringBuilder bussMailBody = new StringBuilder("您申请的");
  528. DecimalFormat df = new DecimalFormat("0.00");
  529. if (conf && ("集团资金计划员付款".equals(stepName)) && (ifEnoughPay(procInveFinaBail) == false)) {
  530. // 邮件业务内容
  531. // 您申请的***流程,编号为[流程实例ID],集团资金计划已经通过***方式下拨***元,请知悉,谢谢!"
  532. bussMailBody.append("“投资、融资保证金及归还银行贷款借款/转款流程”,编号为:【" + processUtilMapService.getTmsIdByFnId(procInveFinaBail.getProcInstId())
  533. + "】,付款金额为:" + df.format(procInveFinaDetail.getPayFundsTotal()) +"万元,各节点已经完成审批,并生成付款指令,资金调度同事即将处理!预计付款日期为:" +
  534. DateUtil.dateToStrShort(procInveFinaDetail.getPayDatetime()) + ",付款方式为:"
  535. + this.selectPayWay(procInveFinaDetail) );
  536. bussMailBody.append(",审批备注:"+remark+"。请知悉,谢谢!");
  537. log.info(bussMailBody);
  538. } else if (conf && ("集团资金计划员付款".equals(stepName)) && (ifEnoughPay(procInveFinaBail) == true)) {
  539. bussMailBody.append("“投资、融资保证金及归还银行贷款借款/转款流程”,编号为:【" + processUtilMapService.getTmsIdByFnId(procInveFinaBail.getProcInstId())
  540. + "】,付款金额为:" + df.format(procInveFinaDetail.getPayFundsTotal()) +"万元,各节点已经完成审批,并生成付款指令,资金调度同事即将处理!预计付款日期为:" +
  541. DateUtil.dateToStrShort(procInveFinaDetail.getPayDatetime()) + ",付款方式为:"
  542. + this.selectPayWay(procInveFinaDetail) );
  543. bussMailBody.append(",审批备注:"+remark+"。此流程所有金额均已完成审批!请知悉,谢谢!");
  544. } else {
  545. bussMailBody.append("“投资、融资保证金及归还银行贷款借款/转款”流程,编号为:【" + processUtilMapService.getTmsIdByFnId(procInveFinaBail.getProcInstId())
  546. + "】已经终止付款!请知悉,谢谢!");
  547. log.info(bussMailBody);
  548. }
  549. StringBuilder jpql = new StringBuilder("select distinct pu.pernr from PU pu where pu.defunctInd='N' ");
  550. jpql.append(" and pu.id='" + procInveFinaDetail.getProcInveFinaBail().getCreatedBy() + "'");
  551. String pid = entityService.findUnique(jpql.toString());
  552. P p = entityService.find(P.class, pid);
  553. if (p != null) {
  554. Mail m = new Mail();
  555. m.setTelno(p.getCelno());
  556. m.setEmail(p.getEmail());
  557. m.setSubject(mailService.generationTitle(MailUtil.MailTypeEnum.Notice, "TMS_InveFinaBail",
  558. processUtilMapService.getTmsIdByFnId(procInveFinaBail.getProcInstId()), stepName, loginService.getCurrentUserName(), null));
  559. m.setBody(mailService.generationContent(MailUtil.MailTypeEnum.Notice, "TMS_InveFinaBail",
  560. processUtilMapService.getTmsIdByFnId(procInveFinaBail.getProcInstId()), stepName, loginService.getCurrentUserName(), null, null)
  561. + bussMailBody.toString());
  562. mailList.add(m);
  563. }
  564. log.info("邮件内容:" + mailList.get(0).getBody());
  565. log.info("邮件主题:" + mailList.get(0).getSubject());
  566. log.info("邮箱:" + mailList.get(0).getEmail());
  567. log.info(mailList);
  568. log.info("邮件封装前!!!!!!!!!");
  569. // 邮件封装
  570. sendMailService.send(mailList);
  571. }
  572. }