EmpPosOrgRelationMultiRowExtendHandler.java 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. package com.kingdee.eas.custom.wamke.web;
  2. import java.text.SimpleDateFormat;
  3. import java.util.Date;
  4. import java.util.HashMap;
  5. import java.util.Map;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8. import org.apache.log4j.Logger;
  9. import org.apache.log4j.Priority;
  10. import org.springframework.ui.ModelMap;
  11. import com.kingdee.bos.Context;
  12. import com.kingdee.bos.dao.IObjectPK;
  13. import com.kingdee.eas.framework.CoreBaseInfo;
  14. import com.kingdee.eas.hr.base.EmpPosOrgRelationInfo;
  15. import com.kingdee.eas.hr.emp.web.handler.EmpPosOrgRelationMultiRowHandler;
  16. import com.kingdee.eas.util.app.DbUtil;
  17. import com.kingdee.jdbc.rowset.IRowSet;
  18. import com.kingdee.shr.base.syssetting.context.SHRContext;
  19. import com.kingdee.shr.base.syssetting.exception.SHRWebException;
  20. public class EmpPosOrgRelationMultiRowExtendHandler extends
  21. EmpPosOrgRelationMultiRowHandler {
  22. private static Logger logger = Logger.getLogger(EmpPosOrgRelationMultiRowExtendHandler.class);
  23. private void logInfo(String msg) {
  24. System.out.println(msg);
  25. logger.log(Priority.INFO, msg);
  26. }
  27. @Override
  28. public String recoveryAction(HttpServletRequest request,
  29. HttpServletResponse response, ModelMap modelMap)
  30. throws SHRWebException {
  31. String result = super.recoveryAction(request, response, modelMap);
  32. String id = getBillId(request);
  33. try{
  34. adjustWorkType(id,false);
  35. }
  36. catch(Exception e){
  37. logInfo("执行更新工种时发生了异常");
  38. e.printStackTrace();
  39. }
  40. return result;
  41. }
  42. @Override
  43. protected IObjectPK runSave(HttpServletRequest request,
  44. HttpServletResponse response, CoreBaseInfo model)
  45. throws SHRWebException {
  46. IObjectPK result = super.runSave(request, response, model);
  47. try{
  48. EmpPosOrgRelationInfo info = (EmpPosOrgRelationInfo) model;
  49. adjustWorkType(info.getId().toString(),true);
  50. }
  51. catch(Exception e){
  52. logInfo("执行更新工种时发生了异常");
  53. e.printStackTrace();
  54. }
  55. return result;
  56. }
  57. @Override
  58. public void adjustEmpEnrollErrorAction(HttpServletRequest request,
  59. HttpServletResponse response, ModelMap modelMap)
  60. throws SHRWebException {
  61. super.adjustEmpEnrollErrorAction(request, response, modelMap);
  62. String empOrgRelaId = request.getParameter("billId");
  63. try{
  64. adjustWorkType(empOrgRelaId,true);
  65. }
  66. catch(Exception e){
  67. logInfo("执行更新工种时发生了异常");
  68. e.printStackTrace();
  69. }
  70. }
  71. /**
  72. * 根据跨公司调动单ID进行员工新工种信息
  73. * @param id
  74. */
  75. private void adjustWorkType(String id, boolean isSubmitEffect){
  76. Map<String,String> info = isWjCompany(id,isSubmitEffect);
  77. if(info.get("pass").equals("true")){
  78. String posId = info.get("posId");
  79. String personId = info.get("personId");
  80. String workId = getWorkCategoryIdByPosId(posId);
  81. if(null==workId){
  82. return;
  83. }
  84. updatePersonWorkType(personId,workId);
  85. }
  86. }
  87. /**
  88. * 根据岗位ID获取对应匹配的工种ID
  89. * @param posId
  90. * @return
  91. */
  92. private String getWorkCategoryIdByPosId(String posId){
  93. try{
  94. String sql = " SELECT work_category_id fROM T_ORG_Position a "
  95. + " INNER JOIN CT_WK_work_category_setting b ON(a.FName_l2 COLLATE Chinese_PRC_CI_AS = b.position_name) "
  96. + " WHERE a.FID= '"+posId+"' ";
  97. logInfo("根据岗位ID获取对应匹配的工种IDsql:"+sql);
  98. Context ctx = SHRContext.getInstance().getContext();
  99. IRowSet rowSet = DbUtil.executeQuery(ctx, sql);
  100. while(rowSet.next()){
  101. return rowSet.getString("work_category_id");
  102. }
  103. }
  104. catch(Exception e){
  105. logInfo("根据岗位ID获取对应匹配的工种ID时发生异常:"+e.getMessage());
  106. e.printStackTrace();
  107. return null;
  108. }
  109. return null;
  110. }
  111. /**
  112. * 根据岗位更新对应人员的工种
  113. * @param personId
  114. * @param personId
  115. * @param workId
  116. */
  117. private void updatePersonWorkType(String personId, String workId){
  118. try{
  119. Context ctx = SHRContext.getInstance().getContext();
  120. //更新人员表
  121. String sql = "UPDATE T_BD_Person SET CFWORKCATEGORYID = '"+workId+"' WHERE FID = '"+personId+"'";
  122. logInfo("根据岗位更新对应人员表的工种sql:"+sql);
  123. DbUtil.execute(ctx, sql);
  124. //更新人员历史表
  125. sql = "UPDATE T_BD_PersonHis SET CFWORKCATEGORYID = '"+workId+"' "
  126. +" WHERE FNumber = ( SELECT TOP 1 FNumber FROM T_BD_Person WHERE FID = '"+personId+"' ) AND FLEFFDT >='2199-12-31'";
  127. logInfo("根据岗位更新对应人员历史表的工种sql:"+sql);
  128. DbUtil.execute(ctx, sql);
  129. }
  130. catch(Exception e){
  131. logInfo("根据岗位更新对应人员表的工种字段发生异常:"+e.getMessage());
  132. e.printStackTrace();
  133. }
  134. }
  135. /**
  136. * 判断是否为万净公司下的人员
  137. * @param id
  138. * @param isSubmitEffect 是否提交生效
  139. * @return
  140. */
  141. private Map<String,String> isWjCompany(String id, boolean isSubmitEffect) {
  142. Map<String,String> result = new HashMap<String,String>();
  143. result.put("pass","false");
  144. try{
  145. String sql = "SELECT TOP 1 FADMINORGID, FPersonId, FPositionId, FLEFFDT FROM T_HR_EmpOrgRelation WHERE FBILLID = '"+id+"' ";
  146. logInfo("执行公司内调入单据数据sql:"+sql);
  147. Context ctx = SHRContext.getInstance().getContext();
  148. IRowSet rowSet = DbUtil.executeQuery(ctx, sql);
  149. String adminId = null, posId = null, personId = null;
  150. Date bizDate = null;
  151. while (rowSet.next()) {
  152. adminId = rowSet.getString("FADMINORGID");
  153. posId = rowSet.getString("FPositionId");
  154. personId = rowSet.getString("FPersonId");
  155. bizDate = rowSet.getDate("FLEFFDT");
  156. result.put("adminId",adminId);
  157. result.put("posId",posId);
  158. result.put("personId",personId);
  159. break;
  160. }
  161. if(adminId==null || adminId == ""){
  162. result.put("pass","false");
  163. return result;
  164. }
  165. //如果为提交生效,则需要判断日期
  166. if(isSubmitEffect){
  167. //如果生效时间<=当前日期,则执行,否则直接返回(由定时器扫描再去变更)
  168. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  169. String bizDateStr = sdf.format(bizDate);
  170. String currentDate = "2199-12-31";
  171. //因为是变动记录,需要判断是否为最新的一条
  172. if(bizDateStr.compareTo(currentDate)<0){
  173. result.put("pass","false");
  174. return result;
  175. }
  176. }
  177. sql = "SELECT TOP 1 FID FROM T_ORG_ADmin WHERE FId = '"+adminId+"' AND FLONGNUMBER LIKE '01!WKWY!50952375!%";
  178. logInfo("执行查询是否为万净公司sql:"+sql);
  179. IRowSet rowSetWj = DbUtil.executeQuery(ctx, sql);
  180. while(rowSetWj.next()){
  181. if(rowSetWj.getString("FID") != null && rowSetWj.getString("FID") != ""){
  182. result.put("pass","true");
  183. }
  184. else{
  185. result.put("pass","false");
  186. }
  187. break;
  188. }
  189. return result;
  190. }
  191. catch(Exception e ){
  192. logInfo("判 断是否为万净公司数据时发生了异常:"+e.getMessage());
  193. e.printStackTrace();
  194. return result;
  195. }
  196. }
  197. }