PluralityDelBizBillControllerBeanEx.java 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352
  1. package com.kingdee.eas.hr.affair.app;
  2. import java.sql.Date;
  3. import java.sql.SQLException;
  4. import com.kingdee.bos.BOSException;
  5. import com.kingdee.bos.Context;
  6. import com.kingdee.bos.dao.IObjectPK;
  7. import com.kingdee.bos.dao.IObjectValue;
  8. import com.kingdee.bos.dao.ormapping.ObjectUuidPK;
  9. import com.kingdee.eas.common.EASBizException;
  10. import com.kingdee.eas.framework.CoreBaseCollection;
  11. import com.kingdee.eas.framework.CoreBaseInfo;
  12. import com.kingdee.eas.hr.affair.IPluralityAddBizBillEntry;
  13. import com.kingdee.eas.hr.affair.IPluralityDelBizBill;
  14. import com.kingdee.eas.hr.affair.PluralityAddBizBillEntryFactory;
  15. import com.kingdee.eas.hr.affair.PluralityAddBizBillEntryInfo;
  16. import com.kingdee.eas.hr.affair.PluralityDelBizBillEntryCollection;
  17. import com.kingdee.eas.hr.affair.PluralityDelBizBillEntryInfo;
  18. import com.kingdee.eas.hr.affair.PluralityDelBizBillFactory;
  19. import com.kingdee.eas.hr.affair.PluralityDelBizBillInfo;
  20. import com.kingdee.eas.hr.base.EmpPosOrgRelationFactory;
  21. import com.kingdee.eas.hr.base.EmpPosOrgRelationInfo;
  22. import com.kingdee.eas.hr.base.IEmpPosOrgRelation;
  23. import com.kingdee.eas.util.app.DbUtil;
  24. import com.kingdee.jdbc.rowset.IRowSet;
  25. import com.kingdee.shr.compensation.CmpEmpORelationFactory;
  26. import com.kingdee.shr.compensation.CmpEmpORelationInfo;
  27. import com.kingdee.shr.compensation.ICmpEmpORelation;
  28. /**
  29. * 扩展了PluralityDelBizBillControllerBean类,增加了在提交单据后的endDate更新逻辑。
  30. */
  31. public class PluralityDelBizBillControllerBeanEx extends PluralityDelBizBillControllerBean {
  32. /**
  33. * 覆盖父类的_submitEffect方法,在提交单据后更新endDate。
  34. * @param ctx 上下文对象
  35. * @param model 单据模型
  36. * @return 单据主键
  37. * @throws BOSException 业务基础服务异常
  38. * @throws EASBizException EAS业务异常
  39. */
  40. @Override
  41. protected IObjectPK _submitEffect(Context ctx, CoreBaseInfo model) throws BOSException, EASBizException {
  42. // 调用父类的_submitEffect方法获取单据主键
  43. IObjectPK objectPk = super._submitEffect(ctx, model);
  44. // 更新endDate
  45. updateEndDate(ctx, model);
  46. return objectPk;
  47. }
  48. /**
  49. * 覆盖父类的_submit方法,在提交单据后更新endDate。
  50. * @param ctx 上下文对象
  51. * @param model 单据模型
  52. * @return 单据主键
  53. * @throws BOSException 业务基础服务异常
  54. * @throws EASBizException EAS业务异常
  55. */
  56. @Override
  57. protected IObjectPK _submit(Context ctx, IObjectValue model) throws BOSException, EASBizException {
  58. // 调用父类的_submit方法获取单据主键
  59. IObjectPK objectPk = super._submit(ctx, model);
  60. // 更新endDate
  61. updateEndDate(ctx, model);
  62. return objectPk;
  63. }
  64. /**
  65. * 更新单据中的endDate字段。
  66. * @param ctx 上下文对象
  67. * @param model 单据模型
  68. * @throws EASBizException EAS业务异常
  69. * @throws BOSException 业务基础服务异常
  70. */
  71. public void updateEndDate(Context ctx, IObjectValue model) throws EASBizException, BOSException {
  72. // 将模型转换为PluralityDelBizBillInfo类型
  73. PluralityDelBizBillInfo billInfo = (PluralityDelBizBillInfo) model;
  74. // 获取单据ID
  75. String billId = billInfo.getId().toString();
  76. // 获取单据条目集合
  77. PluralityDelBizBillEntryCollection entrys = billInfo.getEntrys();
  78. // 如果条目集合不为空且大小大于0,则遍历条目集合
  79. if (null != entrys && entrys.size() > 0) {
  80. for (int i = 0; i < entrys.size(); i++) {
  81. // 获取单据条目信息
  82. PluralityDelBizBillEntryInfo entryInfo = entrys.get(i);
  83. // 检查并更新添加单据的endDate
  84. checkAddBill(ctx, entryInfo.getId().toString(),1);
  85. //更新变更记录
  86. checkRelation(ctx,entryInfo.getId().toString(),null,1);
  87. }
  88. }
  89. }
  90. /**
  91. * 检查并更新添加单据的endDate。
  92. * @param ctx 上下文对象
  93. * @param entryId 单据条目ID
  94. * @param type 1:审核 ; 0:反审核
  95. * @throws BOSException 业务基础服务异常
  96. * @throws EASBizException EAS业务异常
  97. */
  98. private Date checkAddBill(Context ctx, String entryId, int type) throws BOSException, EASBizException {
  99. // // 创建删除单据条目集合
  100. // CoreBaseCollection delEnCol = new CoreBaseCollection();
  101. // 构建SQL查询语句
  102. StringBuilder sbu = new StringBuilder();
  103. sbu.append(" select bill.fid addId , entry.fid addEnId ,entry.fendDate addEndDate ");
  104. // SQL语句中重复的select关键字可能是错误,这里假设应该是逗号
  105. sbu.append(" ,entry.cfoldEndDate oldAddEDate , delen.fbizDate newEDate ");
  106. sbu.append(" from T_HR_PluralityAddBizBill bill ");
  107. sbu.append(" left join T_HR_PluralityAddBizBillEntry entry on bill.FId = entry.fbillid ");
  108. sbu.append(" left join T_HR_PluralityDelBizBillEntry delen ");
  109. sbu.append(" on entry.fpersonid = delen.fpersonid ");
  110. sbu.append(" and entry.FBizDate = delen.FBeginDate ");
  111. sbu.append(" and entry.fpositionid = delen.FOldPositionID ");
  112. sbu.append(" and ( ");
  113. sbu.append(" entry.cfpthwage = delen.cfpthwage ");
  114. sbu.append(" OR ( entry.cfpthwage IS NULL AND delen.cfpthwage IS NULL ) ");
  115. sbu.append(" ) ");
  116. sbu.append(" and ( ");
  117. sbu.append(" entry.cfptlmanagerid = delen.cfptlmanagerid ");
  118. sbu.append(" OR ( entry.cfptlmanagerid IS NULL AND delen.cfptlmanagerid IS NULL ) ");
  119. sbu.append(" ) ");
  120. sbu.append(" where bill.fbillstate = '3' ");
  121. sbu.append(" and delen.fid = '" + entryId + "'");
  122. //反审核
  123. if( type == 0 ) {
  124. return restoreAddBillEndDate(ctx, sbu.toString());
  125. }else if( type == 1 ) {
  126. //审核
  127. return updateAddBillEndDate(ctx, sbu.toString());
  128. }
  129. return null;
  130. }
  131. /**
  132. * 检查并更新变动记录的endDate。
  133. * @param ctx 上下文对象
  134. * @param entryId 单据条目ID
  135. * @param type 1:审核 ; 0:反审核
  136. * @throws BOSException 业务基础服务异常
  137. * @throws EASBizException EAS业务异常
  138. */
  139. private Date checkRelation(Context ctx, String entryId, Date newDate , int type) throws BOSException, EASBizException {
  140. // 构建SQL查询语句
  141. StringBuilder sbu = new StringBuilder();
  142. sbu.append(" select bill.fid billId ");
  143. sbu.append(" , cmpBill.FID cmpBillId ");
  144. sbu.append(" , delen.fbizDate newEDate ");
  145. sbu.append(" from T_HR_EmpOrgRelation bill ");
  146. sbu.append(" left join T_HR_SCmpEmpORelation cmpBill ");
  147. sbu.append(" on bill.FID = cmpBill.femporgrelationid ");
  148. sbu.append(" left join T_HR_PluralityDelBizBillEntry delen ");
  149. sbu.append(" on bill.fpersonid = delen.fpersonid ");
  150. sbu.append(" and bill.feffdt = delen.FBeginDate ");
  151. sbu.append(" and bill.fpositionid = delen.FOldPositionID ");
  152. sbu.append(" and ( ");
  153. sbu.append(" bill.CFLineManagerNameI = delen.cfptlmanagerid ");
  154. sbu.append(" OR ( bill.CFLineManagerNameI IS NULL AND delen.cfptlmanagerid IS NULL ) ");
  155. sbu.append(" ) ");
  156. sbu.append(" where ");
  157. sbu.append(" delen.fid = '" + entryId + "'");
  158. //反审核
  159. if( type == 0 ) {
  160. return updateRelationEndDate(ctx, sbu.toString(),newDate,type);
  161. }else if( type == 1 ) {
  162. //审核
  163. return updateRelationEndDate(ctx, sbu.toString(),null,type);
  164. }
  165. return null;
  166. }
  167. /**
  168. * 更新变动记录结束日期
  169. * @param ctx
  170. * @param sqlStr
  171. * @param newEDate
  172. * @param opType 0,反审核; 1,审核
  173. * @return
  174. */
  175. private Date updateRelationEndDate(Context ctx, String sqlStr,Date newEDate,int opType ) {
  176. // 创建添加单据条目集合
  177. CoreBaseCollection addEnCol = new CoreBaseCollection();
  178. try {
  179. // 获取添加单据条目实例
  180. IEmpPosOrgRelation billIns = EmpPosOrgRelationFactory.getLocalInstance(ctx);
  181. ICmpEmpORelation cmpBillIns = CmpEmpORelationFactory.getLocalInstance(ctx);
  182. // 执行SQL查询
  183. IRowSet rowSet = DbUtil.executeQuery(ctx, sqlStr);
  184. // 遍历查询结果
  185. while (rowSet.next()) {
  186. // 获取添加单据条目ID
  187. String billId = rowSet.getString("billId");
  188. // 获取薪酬档案记录ID
  189. String cmpBillId = rowSet.getString("cmpBillId");
  190. // 获取新的endDate 审核的时候;
  191. if(opType == 1){
  192. newEDate = rowSet.getDate("newEDate");
  193. }
  194. // 变动记录
  195. EmpPosOrgRelationInfo billInfo = billIns.getEmpPosOrgRelationInfo(new ObjectUuidPK(billId));
  196. //薪酬 记录
  197. CmpEmpORelationInfo cmpInfo = cmpBillIns.getCmpEmpORelationInfo(new ObjectUuidPK(cmpBillId));
  198. if ( null != newEDate) {
  199. //结束日期 = 单据创建时的结束日期
  200. billInfo.setLEFFDT(newEDate);
  201. billInfo.setEndDateTime(newEDate);
  202. cmpInfo.setLeffectDate(newEDate);
  203. }
  204. // addEnCol.add(billInfo);
  205. billIns.update(new ObjectUuidPK(billId),billInfo);
  206. cmpBillIns.update(new ObjectUuidPK(cmpBillId),cmpInfo);
  207. }
  208. // 更新 集合
  209. // billIns.update(addEnCol);
  210. } catch (BOSException | SQLException | EASBizException e) {
  211. e.printStackTrace();
  212. }
  213. return newEDate;
  214. }
  215. private Date updateAddBillEndDate(Context ctx, String sqlStr) {
  216. Date newEDate = null;
  217. // 创建添加单据条目集合
  218. CoreBaseCollection addEnCol = new CoreBaseCollection();
  219. try {
  220. // 获取添加单据条目实例
  221. IPluralityAddBizBillEntry addEnIns = PluralityAddBizBillEntryFactory.getLocalInstance(ctx);
  222. // 执行SQL查询
  223. IRowSet rowSet = DbUtil.executeQuery(ctx, sqlStr);
  224. // 遍历查询结果
  225. while (rowSet.next()) {
  226. // 获取添加单据条目ID
  227. String addEnId = rowSet.getString("addEnId");
  228. // 获取 原兼职单上创建时的日期,第一次写兼职结束时是空的;
  229. Date oldAddEDate = rowSet.getDate("oldAddEDate");
  230. // 获取oldEDate
  231. Date addEndDate = rowSet.getDate("addEndDate");
  232. // 获取新的endDate
  233. newEDate = rowSet.getDate("newEDate");
  234. // 如果添加单据条目ID为空,则进行更新操作
  235. // 获取兼职单据条目信息
  236. PluralityAddBizBillEntryInfo addInfo = addEnIns.getPluralityAddBizBillEntryInfo(new ObjectUuidPK(addEnId));
  237. if ( null == oldAddEDate) {
  238. //原结束日期 = 单据创建时的结束日期
  239. addInfo.put("oldEndDate", addEndDate);
  240. }
  241. // 设置更新前的endDate
  242. addInfo.put("endDate", newEDate);
  243. addEnCol.add(addInfo);
  244. }
  245. // 更新添加单据条目集合
  246. addEnIns.update(addEnCol);
  247. } catch (BOSException | SQLException | EASBizException e) {
  248. e.printStackTrace();
  249. }
  250. return newEDate;
  251. }
  252. /**
  253. * 反审核后执行
  254. */
  255. @Override
  256. protected void _untiCheckBizBill(Context ctx, String billId) throws BOSException, EASBizException {
  257. super._untiCheckBizBill(ctx, billId);
  258. IPluralityDelBizBill delIns = PluralityDelBizBillFactory.getLocalInstance(ctx);
  259. PluralityDelBizBillInfo delInfo = delIns.getPluralityDelBizBillInfo(new ObjectUuidPK(billId));
  260. PluralityDelBizBillEntryCollection entrys = delInfo.getEntrys();
  261. for(int i = 0; i < entrys.size(); i++ ) {
  262. PluralityDelBizBillEntryInfo entryInfo = entrys.get(i);
  263. //恢复兼职但上的结束日期
  264. Date newDate = checkAddBill(ctx, entryInfo.getId().toString(), 0);
  265. //更新变更记录
  266. checkRelation(ctx,entryInfo.getId().toString(),newDate,0);
  267. }
  268. }
  269. /**
  270. * 反审核之后恢复原时间
  271. * @param ctx
  272. * @param sqlStr
  273. */
  274. private Date restoreAddBillEndDate(Context ctx, String sqlStr) {
  275. Date oldAddEDate = null;
  276. // 创建添加单据条目集合
  277. CoreBaseCollection addEnCol = new CoreBaseCollection();
  278. try {
  279. // 获取添加单据条目实例
  280. IPluralityAddBizBillEntry addEnIns = PluralityAddBizBillEntryFactory.getLocalInstance(ctx);
  281. // 执行SQL查询
  282. IRowSet rowSet = DbUtil.executeQuery(ctx, sqlStr);
  283. // 遍历查询结果
  284. while (rowSet.next()) {
  285. // 获取添加单据条目ID
  286. String addEnId = rowSet.getString("addEnId");
  287. // 获取 原兼职单上创建时的日期,第一次写兼职结束时是空的;
  288. oldAddEDate = rowSet.getDate("oldAddEDate");
  289. // 获取兼职单据条目信息
  290. PluralityAddBizBillEntryInfo addInfo = addEnIns.getPluralityAddBizBillEntryInfo(new ObjectUuidPK(addEnId));
  291. if ( null != oldAddEDate) {
  292. // 设置更新前的endDate
  293. addInfo.put("endDate", oldAddEDate);
  294. }
  295. addEnCol.add(addInfo);
  296. }
  297. // 更新添加单据条目集合
  298. addEnIns.update(addEnCol);
  299. } catch (BOSException | SQLException | EASBizException e) {
  300. e.printStackTrace();
  301. }
  302. return oldAddEDate;
  303. }
  304. }