492a17628cfbcd12a13fb66059f4ba06bf639395.svn-base 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740
  1. /**
  2. *
  3. */
  4. package com.kingdee.shr.customer.gtiit.imports;
  5. import java.io.UnsupportedEncodingException;
  6. import java.sql.SQLException;
  7. import java.text.MessageFormat;
  8. import java.text.ParseException;
  9. import java.text.SimpleDateFormat;
  10. import java.time.Instant;
  11. import java.time.LocalDate;
  12. import java.time.ZoneId;
  13. import java.time.temporal.ChronoUnit;
  14. import java.util.ArrayList;
  15. import java.util.Calendar;
  16. import java.util.Date;
  17. import java.util.HashMap;
  18. import java.util.Iterator;
  19. import java.util.List;
  20. import java.util.Map;
  21. import java.util.Map.Entry;
  22. import java.util.TimeZone;
  23. import java.util.regex.Matcher;
  24. import java.util.regex.Pattern;
  25. import com.kingdee.shr.base.syssetting.app.io.fileImport.BaseColumnInfo;
  26. import com.kingdee.shr.base.syssetting.app.io.fileImport.BaseImportService;
  27. import com.kingdee.bos.BOSException;
  28. import com.kingdee.bos.Context;
  29. import com.kingdee.bos.dao.ormapping.ObjectUuidPK;
  30. import com.kingdee.bos.util.BOSUuid;
  31. import com.kingdee.eas.base.codingrule.CodingRuleManagerFactory;
  32. import com.kingdee.eas.base.codingrule.ICodingRuleManager;
  33. import com.kingdee.eas.base.core.hr.util.HRParamUtil;
  34. import com.kingdee.eas.basedata.org.HROrgUnitInfo;
  35. import com.kingdee.eas.basedata.org.OrgType;
  36. import com.kingdee.eas.basedata.org.OrgUnitInfo;
  37. import com.kingdee.eas.basedata.org.PositionCollection;
  38. import com.kingdee.eas.basedata.org.PositionFactory;
  39. import com.kingdee.eas.basedata.org.PositionInfo;
  40. import com.kingdee.eas.basedata.person.Genders;
  41. import com.kingdee.eas.common.EASBizException;
  42. import com.kingdee.eas.hr.base.ConstellationInfo;
  43. import com.kingdee.eas.hr.base.EmployeeTypeCollection;
  44. import com.kingdee.eas.hr.base.EmployeeTypeFactory;
  45. import com.kingdee.eas.hr.base.HRBillStateEnum;
  46. import com.kingdee.eas.hr.base.ZodiacInfo;
  47. import com.kingdee.eas.hr.base.util.HRUtilExtend;
  48. import com.kingdee.eas.hr.base.util.IDCardCommonUtil;
  49. import com.kingdee.eas.hr.emp.EmployeeBizException;
  50. import com.kingdee.eas.hr.emp.app.util.EMPhelper;
  51. import com.kingdee.eas.hr.emp.app.util.SHREmpImportTool;
  52. import com.kingdee.eas.hr.emp.app.util.SHREmpOptBizManageTool;
  53. import com.kingdee.eas.hr.emp.app.util.SHREmpPreEntryCheckTool;
  54. import com.kingdee.eas.hr.org.JobGradeCollection;
  55. import com.kingdee.eas.hr.org.JobGradeFactory;
  56. import com.kingdee.eas.hr.org.JobGradeInfo;
  57. import com.kingdee.eas.hr.org.OrgnizationImportBizException;
  58. import com.kingdee.eas.util.app.DbUtil;
  59. import com.kingdee.jdbc.rowset.IRowSet;
  60. import com.kingdee.shr.affair.web.handler.util.EmployeeUtil;
  61. import com.kingdee.shr.base.permission.api.auth.SHRUserOrgPermissionApi;
  62. import com.kingdee.shr.base.syssetting.BaseItemStateEnum;
  63. import com.kingdee.shr.base.syssetting.SHRBaseItemInfo;
  64. import com.kingdee.shr.base.syssetting.app.filter.HRFilterUtils;
  65. import com.kingdee.shr.base.syssetting.app.io.fileImport.BaseRowInfo;
  66. import com.kingdee.shr.base.syssetting.app.io.fileImport.ImportException;
  67. import com.kingdee.shr.base.syssetting.app.io.impl.PreEntryPersonImportService;
  68. import com.kingdee.shr.base.syssetting.app.io.impl.util.EmpEnrollImportCheck;
  69. import com.kingdee.shr.base.syssetting.app.io.impl.util.FileServiceUtil;
  70. import com.kingdee.shr.base.syssetting.context.SHRContext;
  71. import com.kingdee.shr.base.syssetting.exception.SHRWebException;
  72. import com.kingdee.shr.base.syssetting.ml.SHRWebResource;
  73. import com.kingdee.shr.base.syssetting.util.LocaleUtils;
  74. import com.kingdee.shr.ml.util.BOSConfigUtil;
  75. import com.kingdee.shr.preentry.PreEntryCollection;
  76. import com.kingdee.shr.preentry.PreEntryFactory;
  77. import com.kingdee.shr.preentry.PreEntryInfo;
  78. import com.kingdee.shr.preentry.PreEntryPersonInfo;
  79. import com.kingdee.util.StringUtils;
  80. import com.kingdee.util.DateTimeUtils;
  81. import com.kingdee.eas.hr.base.BaseException;
  82. /**
  83. * @author ISSUSER 预入职导入
  84. */
  85. public class PreEntryPersonImport extends PreEntryPersonImportService {
  86. private static Pattern pattern = Pattern.compile("[一-龥]");
  87. Context ctx = SHRContext.getInstance().getContext();
  88. @Override
  89. protected void importNew(BaseRowInfo row) throws ImportException {
  90. try {
  91. Context ctx = this.getContext();
  92. HashMap<String, Object> modelMap = this.beforeImport(row);
  93. PreEntryInfo preEntryInfo = (PreEntryInfo) modelMap.get("PreEntryInfo");
  94. PreEntryPersonInfo preEntryPersonInfo = (PreEntryPersonInfo) modelMap.get("PreEntryPersonInfo");
  95. String userId = HRFilterUtils.getCurrentUserId(ctx);
  96. String hrOrgIdsString = SHRUserOrgPermissionApi.getUserHROrgRangeInSQL(ctx, userId, this.getPermItemId());
  97. // 本地姓名
  98. String localName = preEntryInfo.getString("localname");
  99. // 姓 只包含英文和空格
  100. String surname = preEntryInfo.getString("surname");
  101. boolean allUpperCase = isEnglishAndSpaceOnly(surname);
  102. if (!allUpperCase) {
  103. throw new ImportException("The first name must be in English");
  104. }
  105. preEntryInfo.put("surname", surname.toUpperCase());
  106. // 名
  107. String givenName = preEntryInfo.getString("givenname");
  108. // 中间名
  109. String middleNames = preEntryInfo.getString("middlenames");
  110. preEntryInfo.put("middlenames", middleNames);
  111. // 预入职日期
  112. Date preEnterDate = preEntryInfo.getDate("preenterdate");
  113. // 试用期(月)
  114. int tryMonth = preEntryInfo.getInt("trymonth");
  115. // 逻辑
  116. // 用户名 名】.【姓】 超过20字节保留首字母
  117. String userName = givenName + "." + surname;
  118. if (userName.length() > 20) {
  119. userName = givenName + "." + surname.substring(0, 1);
  120. if(userName.length() > 20) {
  121. int startLength = userName.length() - 20;
  122. userName = userName.substring(startLength,userName.length());
  123. }
  124. }
  125. userName = userName.toLowerCase();
  126. preEntryInfo.put("userName", userName);
  127. // 姓名= 名+姓+本地名称
  128. String name = givenName + " " + surname.toUpperCase() + " " + localName;
  129. // 工作邮箱=用户名】+"@gtiit.edu.cn"
  130. String workemail = userName + "@gtiit.edu.cn";
  131. preEntryInfo.put("workemail", workemail);
  132. // 私人邮箱
  133. // 试用期开始日期 默认为预入职日期
  134. preEntryInfo.put("trialStartDate", preEnterDate);
  135. // 预计转正日期 =【预入职日期】 + 【试用期(月)】
  136. Calendar instance = Calendar.getInstance();
  137. instance.setTime(preEnterDate);
  138. instance.add(Calendar.MONTH, tryMonth);
  139. Date time = instance.getTime();
  140. preEntryInfo.put("transferDate", time);
  141. String employeeTypeNumber = "";
  142. if(tryMonth > 0) {
  143. employeeTypeNumber = "002";
  144. }else {
  145. employeeTypeNumber = "001";
  146. }
  147. EmployeeTypeCollection employeeTypeColl = EmployeeTypeFactory.getLocalInstance(ctx).getEmployeeTypeCollection("where number = '"+employeeTypeNumber+"'");
  148. if(employeeTypeColl!=null && employeeTypeColl.size()>0) {
  149. preEntryInfo.put("empType", employeeTypeColl.get(0).getId().toString());
  150. }
  151. // 编码
  152. EmployeeUtil employee = new EmployeeUtil();
  153. int number = employee.getFnumber();
  154. preEntryInfo.put("empNumber", number);
  155. // 判断是否大于18岁
  156. Date birthday = preEntryPersonInfo.getBirthday();
  157. SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
  158. String dateBirthday = formatter.format(birthday);
  159. LocalDate now = LocalDate.now();
  160. Calendar calendar = Calendar.getInstance();
  161. calendar.setTime(birthday);
  162. calendar.setTimeZone(TimeZone.getTimeZone("UTC")); // 设置时区为UTC,可以根据需要修改时区
  163. java.time.ZonedDateTime zonedDateTime = java.time.ZonedDateTime.ofInstant(calendar.toInstant(),
  164. calendar.getTimeZone().toZoneId());
  165. // 将ZonedDateTime转换为LocalDate
  166. LocalDate lobirthday = zonedDateTime.toLocalDate();
  167. long daysBetween = ChronoUnit.DAYS.between(lobirthday, now);
  168. if (daysBetween / 365.25 < 18) {
  169. throw new ImportException("Onboarding is not allowed for persons under 18 years old");
  170. }
  171. // 身份证不为空用身份证
  172. // 不为空就用 姓名+出生日期判断用户的唯一
  173. String cardno = preEntryPersonInfo.getIdCardNO();
  174. String checkSql = "select FIDCardNO,FPASSPORTNO from t_bd_person where to_char(FBirthday,'yyyy-MM-dd') = '"
  175. + dateBirthday + "' and UPPER(FName_L1) = UPPER('" + name + "') or FIDCardNO = '"+cardno+"'";
  176. IRowSet rs = DbUtil.executeQuery(ctx, checkSql);
  177. if (rs.next()) {
  178. if(!StringUtils.isEmpty(rs.getString("FIDCardNO"))){
  179. throw new ImportException("Employee is re-entry employee, ID number:" + rs.getString("FIDCardNO"));
  180. }
  181. if(!StringUtils.isEmpty(rs.getString("FPASSPORTNO"))){
  182. throw new ImportException("Employee is re-entry employee, passport number:" + rs.getString("FPASSPORTNO"));
  183. }
  184. }
  185. JobGradeInfo jobGrade = (JobGradeInfo)preEntryInfo.get("jobGrade");
  186. if(jobGrade != null) {
  187. jobGrade = JobGradeFactory.getLocalInstance(ctx).getJobGradeInfo(new ObjectUuidPK(jobGrade.getId().toString()));
  188. // checkGrade(ctx, preEntryInfo.getPosition().getId().toString(), jobGrade);
  189. String errorMsg = checkJobGrade(ctx, preEntryInfo.getPosition().getId().toString(), jobGrade);
  190. if(org.apache.commons.lang3.StringUtils.isNotBlank(errorMsg)) {
  191. throw new ImportException(errorMsg);
  192. }
  193. }
  194. String nameOrEmailSql = "select fid from t_bd_person where Upper(CFUserName) = Upper('"+userName+"') or Upper(FEMail) = Upper('"+workemail+"') union select fid from T_HR_PreEntry where Upper(CFUserName_l1) = Upper('"+userName+"') or Upper(CFWorkemail) = Upper('"+workemail+"')";
  195. IRowSet emailRow = DbUtil.executeQuery(ctx, nameOrEmailSql);
  196. if(emailRow.next()) {
  197. throw new ImportException("The username: "+userName+" or email: "+workemail+" already exists");
  198. }
  199. if (!hrOrgIdsString.contains(preEntryInfo.getHrOrgUnit().getId().toString())) {
  200. EmployeeBizException e = new EmployeeBizException(EmployeeBizException.ENTRY_POSI_ORG_NOT_IN);
  201. throw new ImportException(e.getMessage(), e);
  202. }
  203. this.checkBlackList(ctx, preEntryPersonInfo);
  204. String empName = "";
  205. String l = LocaleUtils.getShortCode(ctx);
  206. boolean isNecessary = HRParamUtil.getParamOfHR(ctx, "IS_FULLNAME_SUBFIELD", (String) null);
  207. List<Map<String, String>> languageMapping = this.getLanguageMappingList();
  208. Matcher m1 = null;
  209. Matcher m2 = null;
  210. String firstNameLocal = null;
  211. String lastNameLocal = null;
  212. String curLang = null;
  213. Map<String, String> curLangs = new HashMap();
  214. curLangs.put("l1", "l1");
  215. curLangs.put("l2", "l2");
  216. curLangs.put("l3", "l3");
  217. Iterator var18;
  218. Map map;
  219. String orgId;
  220. if (isNecessary) {
  221. var18 = languageMapping.iterator();
  222. label145: while (true) {
  223. if (!var18.hasNext()) {
  224. if (curLangs.size() <= 0) {
  225. break;
  226. }
  227. var18 = curLangs.keySet().iterator();
  228. while (true) {
  229. if (!var18.hasNext()) {
  230. break label145;
  231. }
  232. orgId = (String) var18.next();
  233. curLang = (String) curLangs.get(orgId);
  234. preEntryInfo.setFirstName(
  235. preEntryInfo.getFirstName(com.kingdee.util.LocaleUtils.getLocale(l)),
  236. com.kingdee.util.LocaleUtils.getLocale(curLang));
  237. preEntryInfo.setLastName(
  238. preEntryInfo.getLastName(com.kingdee.util.LocaleUtils.getLocale(l)),
  239. com.kingdee.util.LocaleUtils.getLocale(curLang));
  240. preEntryPersonInfo.setFirstName(
  241. preEntryPersonInfo.getFirstName(com.kingdee.util.LocaleUtils.getLocale(l)),
  242. com.kingdee.util.LocaleUtils.getLocale(curLang));
  243. preEntryPersonInfo.setLastName(
  244. preEntryPersonInfo.getLastName(com.kingdee.util.LocaleUtils.getLocale(l)),
  245. com.kingdee.util.LocaleUtils.getLocale(curLang));
  246. // preEntryInfo.setName(preEntryInfo.getName(com.kingdee.util.LocaleUtils.getLocale(l)),
  247. // com.kingdee.util.LocaleUtils.getLocale(curLang));
  248. // preEntryPersonInfo.setName(
  249. // preEntryPersonInfo.getName(com.kingdee.util.LocaleUtils.getLocale(l)),
  250. // com.kingdee.util.LocaleUtils.getLocale(curLang));
  251. }
  252. }
  253. map = (Map) var18.next();
  254. firstNameLocal = row
  255. .getValueOfString(MessageFormat.format("{0}.{1}", "firstName", map.get("locale")));
  256. lastNameLocal = row
  257. .getValueOfString(MessageFormat.format("{0}.{1}", "lastName", map.get("locale")));
  258. curLang = (String) map.get("lang");
  259. preEntryInfo.setFirstName(firstNameLocal, com.kingdee.util.LocaleUtils.getLocale(curLang));
  260. preEntryInfo.setLastName(lastNameLocal, com.kingdee.util.LocaleUtils.getLocale(curLang));
  261. preEntryPersonInfo.setFirstName(firstNameLocal, com.kingdee.util.LocaleUtils.getLocale(curLang));
  262. preEntryPersonInfo.setLastName(lastNameLocal, com.kingdee.util.LocaleUtils.getLocale(curLang));
  263. m1 = pattern.matcher(firstNameLocal);
  264. m2 = pattern.matcher(lastNameLocal);
  265. empName = !m1.find() && !m2.find() ? firstNameLocal + " " + lastNameLocal
  266. : lastNameLocal + firstNameLocal;
  267. // preEntryInfo.setName(empName,
  268. // com.kingdee.util.LocaleUtils.getLocale(curLang));
  269. // preEntryPersonInfo.setName(empName,
  270. // com.kingdee.util.LocaleUtils.getLocale(curLang));
  271. }
  272. } else {
  273. var18 = languageMapping.iterator();
  274. while (var18.hasNext()) {
  275. map = (Map) var18.next();
  276. curLang = (String) map.get("lang");
  277. empName = row.getValueOfString(MessageFormat.format("{0}.{1}", "name", map.get("locale")));
  278. // preEntryInfo.setName(empName,
  279. // com.kingdee.util.LocaleUtils.getLocale(curLang));
  280. // preEntryPersonInfo.setName(empName,
  281. // com.kingdee.util.LocaleUtils.getLocale(curLang));
  282. preEntryInfo.setName(name, com.kingdee.util.LocaleUtils.getLocale(curLang));
  283. preEntryPersonInfo.setName(name, com.kingdee.util.LocaleUtils.getLocale(curLang));
  284. curLangs.remove(curLang);
  285. curLangs.remove(curLang);
  286. }
  287. if (curLangs.size() > 0) {
  288. var18 = curLangs.keySet().iterator();
  289. while (var18.hasNext()) {
  290. orgId = (String) var18.next();
  291. curLang = (String) curLangs.get(orgId);
  292. // preEntryInfo.setName(preEntryInfo.getName(com.kingdee.util.LocaleUtils.getLocale(l)),
  293. // com.kingdee.util.LocaleUtils.getLocale(curLang));
  294. // preEntryPersonInfo.setName(
  295. // preEntryPersonInfo.getName(com.kingdee.util.LocaleUtils.getLocale(l)),
  296. // com.kingdee.util.LocaleUtils.getLocale(curLang));
  297. }
  298. }
  299. }
  300. if (SHREmpImportTool.SPECIAL_AREA_CODE.equals(preEntryInfo.getGlobalRoaming())) {
  301. preEntryInfo.setCellPhone(preEntryInfo.getNCell());
  302. } else {
  303. preEntryInfo.setCellPhone(preEntryInfo.getGlobalRoaming() + "-" + preEntryInfo.getNCell());
  304. }
  305. preEntryInfo.setIsSSC(false);
  306. preEntryInfo.setBillState(HRBillStateEnum.SAVED);
  307. // 单据编号
  308. // if (!row.getValueOfString("PreEntry.number").equals("")) {
  309. // String preNumber = row.getValueOfString("PreEntry.number");
  310. // PreEntryCollection coll = PreEntryFactory.getLocalInstance(ctx)
  311. // .getPreEntryCollection("where number = '" + preNumber + "'");
  312. // if (coll.size() > 0) {
  313. // EmployeeBizException e = new EmployeeBizException(EmployeeBizException.HAS_EXIST_BILL_COD_OBJ,
  314. // new Object[] { preNumber });
  315. // throw new ImportException(e.getMessage(), e);
  316. // }
  317. //
  318. // preEntryInfo.setNumber(preNumber);
  319. // }
  320. EmployeeBizException e;
  321. if (StringUtils.isEmpty(preEntryInfo.getNumber())) {
  322. OrgUnitInfo mainOrg = (OrgUnitInfo) ctx.get(OrgType.ControlUnit);
  323. orgId = mainOrg == null ? "" : mainOrg.getString("id");
  324. if (orgId == null || orgId.trim().length() == 0) {
  325. orgId = "00000000-0000-0000-0000-000000000000CCE7AED4";
  326. }
  327. ICodingRuleManager iCodingRuleManager = CodingRuleManagerFactory.getLocalInstance(ctx);
  328. if (!iCodingRuleManager.isExist(preEntryInfo, orgId)) {
  329. e = new EmployeeBizException(EmployeeBizException.BILL_NUM_NULL_NO_COD_RULE);
  330. throw new ImportException(e.getMessage(), e);
  331. }
  332. } else {
  333. preEntryInfo.put("isNeedCoding", "true");
  334. }
  335. PositionCollection coll = PositionFactory.getLocalInstance(ctx)
  336. .getPositionCollection("where id = '" + preEntryInfo.getPosition().getId().toString() + "'");
  337. HROrgUnitInfo hrOrgUnitInfo = SHREmpOptBizManageTool.getManageHROByAdminOrg(ctx,
  338. coll.get(0).getAdminOrgUnit().getId().toString());
  339. String importCheckEffectPermission = this.importCheckEffectPermission(ctx,
  340. "/dynamic.do?method=submitEffect#uri=emp.PreEntry.form", hrOrgUnitInfo);
  341. if (!StringUtils.isEmpty(importCheckEffectPermission)) {
  342. throw new ImportException(importCheckEffectPermission);
  343. }
  344. if (hrOrgUnitInfo == null) {
  345. e = new EmployeeBizException(EmployeeBizException.CANNOT_GET_TARGET,
  346. new Object[] { preEntryInfo.getPosition().getName() });
  347. throw new ImportException(e.getMessage(), e);
  348. }
  349. String IDCardNo = row.getValueOfString("IDCardNO");
  350. String constellationName = row.getValueOfString("constellation");
  351. String zodiacName = row.getValueOfString("zodiac");
  352. Map<String, String> resultMap = null;
  353. ConstellationInfo cInfo = new ConstellationInfo();
  354. ZodiacInfo zInfo = new ZodiacInfo();
  355. IDCardCommonUtil iDCardCommonUti = null;
  356. if (StringUtils.isEmpty(constellationName)) {
  357. if (!StringUtils.isEmpty(row.getValueOfString("birthday"))) {
  358. resultMap = EMPhelper.getConZocByBirthDay(ctx, preEntryPersonInfo.getBirthday());
  359. } else if (!StringUtils.isEmpty(IDCardNo)) {
  360. iDCardCommonUti = new IDCardCommonUtil(IDCardNo,
  361. HRParamUtil.getParamOfHR(ctx, "IS_IDCARD_VERIFY", hrOrgUnitInfo.getId().toString()));
  362. resultMap = EMPhelper.getConZocByBirthDay(ctx, iDCardCommonUti.getBirthday());
  363. }
  364. if (resultMap != null && resultMap.containsKey("constellationId")) {
  365. cInfo.setId(BOSUuid.read((String) resultMap.get("constellationId")));
  366. cInfo.setName((String) resultMap.get("constellation"));
  367. }
  368. } else {
  369. cInfo = EMPhelper.getConstellationByName(ctx, constellationName);
  370. }
  371. preEntryPersonInfo.setConstellation(cInfo);
  372. if (StringUtils.isEmpty(zodiacName)) {
  373. if (!StringUtils.isEmpty(row.getValueOfString("birthday"))) {
  374. resultMap = EMPhelper.getConZocByBirthDay(ctx, preEntryPersonInfo.getBirthday());
  375. } else if (!StringUtils.isEmpty(IDCardNo)) {
  376. iDCardCommonUti = new IDCardCommonUtil(IDCardNo,
  377. HRParamUtil.getParamOfHR(ctx, "IS_IDCARD_VERIFY", hrOrgUnitInfo.getId().toString()));
  378. resultMap = EMPhelper.getConZocByBirthDay(ctx, iDCardCommonUti.getBirthday());
  379. }
  380. if (resultMap != null && resultMap.containsKey("zodiacId")) {
  381. zInfo.setId(BOSUuid.read((String) resultMap.get("zodiacId")));
  382. zInfo.setName((String) resultMap.get("zodiac"));
  383. }
  384. } else {
  385. zInfo = EMPhelper.getZodiacByName(ctx, zodiacName);
  386. }
  387. preEntryPersonInfo.setZodiac(zInfo);
  388. // // 员工姓名不能为空
  389. // if (StringUtils.isEmpty(preEntryInfo.getName())) {
  390. //// EmployeeBizException e1 = new
  391. // EmployeeBizException(EmployeeBizException.EMP_NAME_NOT_NULL);
  392. //// throw new ImportException(e1.getMessage(), e1);
  393. // throw new ImportException("年龄不能大于18岁");
  394. // }
  395. SHRBaseItemInfo baseItemInfo = preEntryInfo.getEnrollSource();
  396. if (baseItemInfo != null && !this.isAvailableBaseItem(hrOrgUnitInfo.getId().toString(),
  397. baseItemInfo.getId().toString(), "com.kingdee.eas.hr.base.app.EnrollSource")) {
  398. EmployeeBizException e1 = new EmployeeBizException(EmployeeBizException.INVITE_SOURCE_BASE,
  399. new Object[] { baseItemInfo.getName(), hrOrgUnitInfo.getName() });
  400. throw new ImportException(e1.getMessage(), e1);
  401. }
  402. //法人
  403. preEntryInfo.put("legalemployer", preEntryInfo.getString("legalemployer"));
  404. this.setWorkFlow(preEntryInfo);
  405. super.addnewModel(preEntryInfo, preEntryPersonInfo);
  406. } catch (EASBizException var30) {
  407. throw new ImportException(var30.getMessage(), var30);
  408. } catch (BOSException var31) {
  409. throw new ImportException(var31.getMessage(), var31);
  410. } catch (SHRWebException var32) {
  411. var32.printStackTrace();
  412. } catch (ParseException var33) {
  413. var33.printStackTrace();
  414. } catch (SQLException e2) {
  415. e2.printStackTrace();
  416. }
  417. }
  418. /**
  419. * 校验职等是否在职位范围内
  420. * @param ctx
  421. * @param positionId
  422. * @param jobGradeInfo
  423. * @return
  424. * @throws BOSException
  425. * @throws SQLException
  426. */
  427. public static boolean checkGrade(Context ctx,String positionId, JobGradeInfo jobGradeInfo) throws BOSException, SQLException {
  428. String sql = "SELECT a.FHIGHJOBGRADEID,a.FLOWJOBGRADEID,b.FINDEX highIndex,c.FINDEX lowIndex,c.FJOBGRADEMODULEID FROM T_ORG_Position a left join T_HR_JobGrade b on a.FHIGHJOBGRADEID = b.FID left join T_HR_JobGrade c on a.FLOWJOBGRADEID = c.fid where a.FID = '"+positionId+"'";
  429. IRowSet rs = DbUtil.executeQuery(ctx, sql);
  430. String highJobGradeId = "";
  431. String lowJobGradeId = "";
  432. String highIndex = "";
  433. String lowIndex = "";
  434. String jobGradeModuleId = "";
  435. if (rs.next()) {
  436. highJobGradeId = rs.getString("FHIGHJOBGRADEID")==null?"":rs.getString("FHIGHJOBGRADEID");
  437. lowJobGradeId = rs.getString("FLOWJOBGRADEID")==null?"":rs.getString("FLOWJOBGRADEID");
  438. highIndex = rs.getString("highIndex")==null?"":rs.getString("highIndex");
  439. lowIndex = rs.getString("lowIndex")==null?"":rs.getString("lowIndex");
  440. jobGradeModuleId = rs.getString("FJOBGRADEMODULEID")==null?"":rs.getString("FJOBGRADEMODULEID");
  441. }
  442. if(highJobGradeId != "" && lowJobGradeId != "") {
  443. String gradeIndex = String.valueOf(jobGradeInfo.getIndex());
  444. String gradeJobModuleId = jobGradeInfo.getJobGradeModule().getId().toString();
  445. if(gradeIndex.compareTo(lowIndex)>=0 && gradeIndex.compareTo(highIndex)<=0 && jobGradeModuleId.equals(gradeJobModuleId)) {
  446. return false;
  447. }
  448. }
  449. return true;
  450. }
  451. /**
  452. * 校验职等是否在职位范围内(标准方法)
  453. * @param ctx
  454. * @param positionId
  455. * @param jobGradeInfo
  456. * @return
  457. * @throws BOSException
  458. * @throws SQLException
  459. */
  460. public String checkJobGrade(Context ctx,String positionId, JobGradeInfo jobGradeInfo) throws BOSException {
  461. String errorMsg = "";
  462. String jobGradeId = jobGradeInfo.getId().toString();
  463. if (StringUtils.isEmpty(jobGradeId)) {
  464. return errorMsg;
  465. } else {
  466. StringBuffer sql = (new StringBuffer())
  467. .append("select id,name,number,index,jobGradeModule.state,jobGradeModule.name,jobGradeModule.id")
  468. .append(" where id = '").append(jobGradeId).append("')").append(" and state = 1");
  469. JobGradeCollection jgColl = JobGradeFactory.getLocalInstance(ctx).getJobGradeCollection(sql.toString());
  470. if (jgColl.size() > 0) {
  471. JobGradeInfo jgInfo = jgColl.get(0);
  472. if (jgInfo.getJobGradeModule() == null
  473. || jgInfo.getJobGradeModule().getState() != BaseItemStateEnum.ENABLE) {
  474. errorMsg = MessageFormat.format(
  475. SHRWebResource.getString("com.kingdee.eas.hr.emp.EmployeeBizResource", "label153", ctx),
  476. jgInfo.getJobGradeModule().getName());
  477. return errorMsg;
  478. } else {
  479. int index = jgInfo.getIndex();
  480. String oql = "select id,lowJobGrade.name,lowJobGrade.number,lowJobGrade.index,highJobGrade.name,highJobGrade.number,highJobGrade.index,lowJobGrade.jobGradeModule.id where id ='"
  481. + positionId + "'";
  482. PositionInfo pInfo = PositionFactory.getLocalInstance(ctx).getPositionCollection(oql).get(0);
  483. if (pInfo.getLowJobGrade() != null && pInfo.getHighJobGrade() != null) {
  484. if (pInfo.getLowJobGrade().getJobGradeModule() == null) {
  485. errorMsg = SHRWebResource.getString("com.kingdee.eas.hr.emp.EmployeeBizResource",
  486. "label160", ctx);
  487. return errorMsg;
  488. } else if (!jgInfo.getJobGradeModule().getId().toString()
  489. .equals(pInfo.getLowJobGrade().getJobGradeModule().getId().toString())) {
  490. errorMsg = SHRWebResource.getString("com.kingdee.eas.hr.emp.EmployeeBizResource",
  491. "label162", ctx);
  492. return errorMsg;
  493. } else if (index >= pInfo.getLowJobGrade().getIndex()
  494. && index <= pInfo.getHighJobGrade().getIndex()) {
  495. return errorMsg;
  496. } else {
  497. errorMsg = SHRWebResource.getString("com.kingdee.eas.hr.emp.EmployeeBizResource",
  498. "label151", ctx);
  499. return errorMsg;
  500. }
  501. } else {
  502. errorMsg = SHRWebResource.getString("com.kingdee.eas.hr.emp.EmployeeBizResource",
  503. "label158", ctx);
  504. return errorMsg;
  505. }
  506. }
  507. } else {
  508. return errorMsg;
  509. }
  510. }
  511. }
  512. @Override
  513. protected void verifyRow(BaseRowInfo row) throws ImportException {
  514. Map<String, BaseColumnInfo> columnInfoMap = row.getMapColumnInfo();
  515. Iterator<Entry<String, BaseColumnInfo>> iterator = columnInfoMap.entrySet().iterator();
  516. Context ctx = this.getContext();
  517. Map<String, String> validMap = new HashMap();
  518. EmpEnrollImportCheck eeic = new EmpEnrollImportCheck();
  519. String value;
  520. while (iterator.hasNext()) {
  521. BaseColumnInfo columnInfo = (BaseColumnInfo) ((Entry) iterator.next()).getValue();
  522. if (columnInfo != null) {
  523. value = row.getValueOfStringByIndex(columnInfo.getColumnIndex());
  524. if (columnInfo.getPropName().equals("PreEntry.adminOrg")) {
  525. validMap.put("adminOrg", value);
  526. } else if (columnInfo.getPropName().equals("PreEntry.position")) {
  527. validMap.put("position", value);
  528. } else {
  529. validMap.put(columnInfo.getPropName(), value);
  530. }
  531. }
  532. }
  533. try {
  534. value = eeic.checkPositionAndOrgAndCompany(ctx, validMap);
  535. if (!StringUtils.isEmpty(value)) {
  536. throw new ImportException(value);
  537. }
  538. } catch (BOSException var9) {
  539. var9.printStackTrace();
  540. }
  541. super.verifyRow(row);
  542. }
  543. @Override
  544. public boolean verifyModelData(HashMap<String, Object> map) throws BOSException, EASBizException {
  545. boolean verifyType = true;
  546. PreEntryInfo preEntryInfo = (PreEntryInfo) map.get("PreEntryInfo");
  547. PreEntryPersonInfo preEntryPersonInfo = (PreEntryPersonInfo) map.get("PreEntryPersonInfo");
  548. String errorInfo;
  549. if (!StringUtils.isEmpty(preEntryPersonInfo.getIdCardNO()) && preEntryInfo.getHrOrgUnit() != null
  550. && preEntryInfo.getHrOrgUnit().getId() != null) {
  551. IDCardCommonUtil iDCardCommonUtil = null;
  552. boolean isIDCardVerify = false;
  553. try {
  554. isIDCardVerify = HRParamUtil.getParamOfHR(this.getContext(), "IS_IDCARD_VERIFY",
  555. preEntryInfo.getHrOrgUnit().getId().toString());
  556. iDCardCommonUtil = new IDCardCommonUtil(preEntryPersonInfo.getIdCardNO(), isIDCardVerify);
  557. errorInfo = iDCardCommonUtil.getBirthday();
  558. Genders gender = iDCardCommonUtil.getGenders();
  559. Date birthday = DateTimeUtils.parseDate(errorInfo);
  560. if (preEntryPersonInfo.getGender() == null) {
  561. preEntryPersonInfo.setGender(gender);
  562. }
  563. if (preEntryPersonInfo.getBirthday() == null) {
  564. preEntryPersonInfo.setBirthday(birthday);
  565. }
  566. } catch (BaseException var12) {
  567. throw new ImportException(var12.getMessage(), var12);
  568. } catch (ParseException var13) {
  569. if (isIDCardVerify) {
  570. BaseException e1 = new BaseException(BaseException.IDCARD_NUMERROR);
  571. throw new ImportException(e1.getMessage(), e1);
  572. }
  573. }
  574. }
  575. if (!StringUtils.isEmpty(preEntryInfo.getNCell()) && !StringUtils.isEmpty(preEntryInfo.getGlobalRoaming())) {
  576. if (SHREmpImportTool.SPECIAL_AREA_CODE.equals(preEntryInfo.getGlobalRoaming())) {
  577. preEntryInfo.setCellPhone(preEntryInfo.getNCell());
  578. } else {
  579. preEntryInfo.setCellPhone(preEntryInfo.getGlobalRoaming() + "-" + preEntryInfo.getNCell());
  580. }
  581. Context ctx = this.getContext();
  582. try {
  583. String preEntryID = preEntryInfo.getId() != null ? preEntryInfo.getId().toString() : "";
  584. errorInfo = "";
  585. String email;
  586. if (preEntryInfo.getCellPhone() != null) {
  587. email = preEntryInfo.getCellPhone();
  588. HRUtilExtend.verifyCellPhoneNumber(ctx, email);
  589. errorInfo = SHREmpPreEntryCheckTool.checkPreEntryCellPhone(ctx, email, preEntryID);
  590. if (!errorInfo.equals("")) {
  591. throw new ImportException(errorInfo);
  592. }
  593. }
  594. if (preEntryInfo.getEmail() != null) {
  595. email = preEntryInfo.getEmail();
  596. HRUtilExtend.verifyMail(ctx, email);
  597. errorInfo = SHREmpPreEntryCheckTool.checkPreEntryEmail(ctx, email, preEntryID);
  598. if (!errorInfo.equals("")) {
  599. throw new ImportException(errorInfo);
  600. }
  601. }
  602. } catch (BOSException var10) {
  603. var10.printStackTrace();
  604. } catch (SQLException var11) {
  605. var11.printStackTrace();
  606. }
  607. return verifyType;
  608. } else {
  609. EmployeeBizException e = new EmployeeBizException(EmployeeBizException.TEL_IS_NULL);
  610. throw new ImportException(e.getMessage(), e);
  611. }
  612. }
  613. // 判断字符串是否是英文和空格
  614. public static boolean isEnglishAndSpaceOnly(String str) {
  615. // 定义正则表达式,表示只包含英文和空格
  616. String pattern = "^[a-zA-Z\\s]*$";
  617. // 判断字符串是否匹配正则表达式
  618. return str.matches(pattern);
  619. }
  620. // 模板动态添加列
  621. @Override
  622. public List<BaseColumnInfo> getDynamicColumn() {
  623. Context ctx = this.getContext();
  624. List<BaseColumnInfo> list = new ArrayList();
  625. boolean isNecessary = false;
  626. OrgnizationImportBizException e1;
  627. try {
  628. isNecessary = HRParamUtil.getParamOfHR(ctx, "IS_FULLNAME_SUBFIELD", (String)null);
  629. } catch (EASBizException var9) {
  630. e1 = new OrgnizationImportBizException(OrgnizationImportBizException.EXCEPTION116, var9, new Object[]{var9.getMessage()});
  631. throw new ImportException(e1.getMessage(), e1);
  632. } catch (BOSException var10) {
  633. e1 = new OrgnizationImportBizException(OrgnizationImportBizException.EXCEPTION116, var10, new Object[]{var10.getMessage()});
  634. throw new ImportException(e1.getMessage(), e1);
  635. }
  636. List<Map<String, String>> languageMapping = this.getLanguageMappingList();
  637. int i = 1;
  638. BaseColumnInfo columnInfo = null;
  639. String columnName = null; int j;
  640. if (isNecessary) {
  641. for(j = 0; j < languageMapping.size(); ++j) {
  642. columnName = MessageFormat.format("{0}.{1}", "lastName", ((Map)languageMapping.get(j)).get("locale"));
  643. columnInfo = BaseColumnInfo.createDynamicColumn(columnName, "", isNecessary);
  644. columnInfo.setName(MessageFormat.format("{0}.{1}", SHRWebResource.getString("com.kingdee.eas.hr.emp.EmployeeResource", "EMP_LASTNAME", ctx), ((Map)languageMapping.get(j)).get("text")));
  645. columnInfo.setColumnIndex(i);
  646. columnInfo.setDataType(1);
  647. columnInfo.setMultiLanFieldSupport(true);
  648. list.add(columnInfo);
  649. ++i;
  650. }
  651. for(j = 0; j < languageMapping.size(); ++j) {
  652. columnName = MessageFormat.format("{0}.{1}", "firstName", ((Map)languageMapping.get(j)).get("locale"));
  653. columnInfo = BaseColumnInfo.createDynamicColumn(columnName, "", isNecessary);
  654. columnInfo.setName(MessageFormat.format("{0}.{1}", SHRWebResource.getString("com.kingdee.eas.hr.emp.EmployeeResource", "EMP_FIRSTNAME", ctx), ((Map)languageMapping.get(j)).get("text")));
  655. columnInfo.setColumnIndex(i);
  656. columnInfo.setDataType(1);
  657. columnInfo.setMultiLanFieldSupport(true);
  658. list.add(columnInfo);
  659. ++i;
  660. }
  661. } else {
  662. for(j = 0; j < languageMapping.size(); ++j) {
  663. //去除name.chas这个字段
  664. columnName = MessageFormat.format("{0}.{1}", "name", ((Map)languageMapping.get(j)).get("locale"));
  665. columnInfo = BaseColumnInfo.createDynamicColumn(columnName, "", false);
  666. columnInfo.setName(MessageFormat.format("{0}.{1}", SHRWebResource.getString("com.kingdee.eas.hr.emp.EmployeeResource", "EMP_NAME", ctx), ((Map)languageMapping.get(j)).get("text")));
  667. columnInfo.setColumnIndex(i);
  668. columnInfo.setDataType(1);
  669. columnInfo.setMultiLanFieldSupport(true);
  670. list.add(columnInfo);
  671. ++i;
  672. }
  673. }
  674. return list;
  675. }
  676. }