JobUserServiceImpl.java 42 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887
  1. package com.hz.employmentsite.services.impl.jobUserManager;
  2. import com.github.pagehelper.PageHelper;
  3. import com.github.pagehelper.PageInfo;
  4. import com.hz.employmentsite.filter.exception.BaseException;
  5. import com.hz.employmentsite.mapper.*;
  6. import com.hz.employmentsite.mapper.cquery.JobUserCQuery;
  7. import com.hz.employmentsite.mapper.cquery.LabelCQuery;
  8. import com.hz.employmentsite.model.*;
  9. import com.hz.employmentsite.services.service.jobUserManager.JobUserService;
  10. import com.hz.employmentsite.services.service.system.DictionaryService;
  11. import com.hz.employmentsite.util.DateUtils;
  12. import com.hz.employmentsite.util.StringUtils;
  13. import com.hz.employmentsite.vo.jobUserManager.JobHuntVo;
  14. import com.hz.employmentsite.vo.jobUserManager.JobUserVo;
  15. import org.springframework.beans.factory.annotation.Autowired;
  16. import org.springframework.stereotype.Service;
  17. import java.text.ParseException;
  18. import java.text.SimpleDateFormat;
  19. import java.util.*;
  20. import java.util.regex.Matcher;
  21. import java.util.regex.Pattern;
  22. import java.util.stream.Collectors;
  23. @Service("JobUserService")
  24. public class JobUserServiceImpl implements JobUserService {
  25. @Autowired
  26. private JobUserCQuery jobUserCQuery;
  27. @Autowired
  28. private StringUtils stringUtils;
  29. @Autowired
  30. private DateUtils dateUtils;
  31. @Autowired
  32. private DictionaryService dictionaryService;
  33. @Autowired
  34. private PcEducationMapper pcEducationMapper;
  35. @Autowired
  36. private PcJobuserMapper pcJobuserMapper;
  37. @Autowired
  38. private PcExperienceMapper pcExperienceMapper;
  39. @Autowired
  40. private PcJobhuntMapper pcJobhuntMapper;
  41. @Autowired
  42. private PcPostMapper pcPostMapper;
  43. @Autowired
  44. private PcSiteUserMapper pcSiteUserMapper;
  45. @Autowired
  46. private PcSiteMapper pcSiteMapper;
  47. @Autowired
  48. private PcLabelJobuserMapper pcLabelJobuserMapper;
  49. @Autowired
  50. private PcOccupationalMapper pcOccupationalMapper;
  51. @Autowired
  52. private AreaCodeMapper areaCodeMapper;
  53. @Autowired
  54. private LabelCQuery labelCQuery;
  55. @Override
  56. public PageInfo<JobUserVo> getList(Integer pageIndex, Integer pageSize,
  57. List<String> jobUserIDList, String name,
  58. String siteId, String jobStatus,
  59. Integer sexId, Integer educationTypeId,
  60. Integer emphasisTypeId, String createUserId,
  61. String workTime, String loginUserID,
  62. String regionCode, Date startDate,
  63. Date endDate) {
  64. String curLoginUserSiteID = "";
  65. if (!stringUtils.IsNullOrEmpty(loginUserID)) {
  66. PcSiteUserExample siteUserExp = new PcSiteUserExample();
  67. siteUserExp.or().andUserIDEqualTo(loginUserID);
  68. curLoginUserSiteID = pcSiteUserMapper.selectByExample(siteUserExp).get(0).getSiteID();
  69. }
  70. PageHelper.startPage(pageIndex, pageSize);
  71. List<JobUserVo> list = jobUserCQuery.selectJobUserList(stringUtils.ListToInSql(jobUserIDList), name, siteId, jobStatus, sexId, educationTypeId, emphasisTypeId, createUserId, workTime, curLoginUserSiteID, regionCode, startDate, endDate);
  72. // // 信息脱敏
  73. // list.forEach(item -> {
  74. // item.setAge(dateUtils.getAgeForIdCard(item.getIdentityNumber()));
  75. // item.setIdentityNumber(stringUtils.desensitizeData(item.getIdentityNumber(), "************", 3, 4));
  76. // item.setSocialSecurityCard(stringUtils.desensitizeData(item.getSocialSecurityCard(), "****", 3, 3));
  77. // });
  78. PageInfo<JobUserVo> result = new PageInfo(list);
  79. return result;
  80. }
  81. @Override
  82. public List<SelectProps> getDataList() {
  83. var dataList = getList(1, 99999, null, null, null, null, null, null, null, null, null, null, null, null, null).getList();
  84. List<SelectProps> dataResult = new ArrayList<>();
  85. for (var item: dataList) {
  86. SelectProps itemResult = new SelectProps();
  87. itemResult.setText(item.getName());
  88. itemResult.setValue(item.getJobUserID());
  89. dataResult.add(itemResult);
  90. }
  91. return dataResult;
  92. }
  93. @Override
  94. public JobUserVo getDataById(String id) {
  95. if (stringUtils.IsNullOrEmpty(id)) {
  96. return null;
  97. }
  98. JobUserVo data = jobUserCQuery.selectJobUserList(stringUtils.ListToInSql(Arrays.asList(id)), null, null, null, null, null, null, null, null,null,null,null,null).stream().findFirst().orElse(null);
  99. if(data!=null){
  100. data.listLabel = labelCQuery.getUserLabelList(id);
  101. }
  102. return data;
  103. }
  104. @Override
  105. public List<PcEducation> getJobUserEducationList(String jobuserID) {
  106. PcEducationExample exp = new PcEducationExample();
  107. PcEducationExample.Criteria cro = exp.or();
  108. cro.andJobuserIDEqualTo(jobuserID);
  109. List<PcEducation> educationList = pcEducationMapper.selectByExample(exp);
  110. return educationList;
  111. }
  112. @Override
  113. public List<PcExperience> getJobUserPcExperienceList(String jobuserID) {
  114. PcExperienceExample exp = new PcExperienceExample();
  115. PcExperienceExample.Criteria cro = exp.or();
  116. cro.andJobuserIDEqualTo(jobuserID);
  117. List<PcExperience> educationList = pcExperienceMapper.selectByExample(exp);
  118. return educationList;
  119. }
  120. @Override
  121. public List<PcPost> getUserHuntList(String jobuserID) {
  122. PcJobhuntExample huntExp = new PcJobhuntExample();
  123. PcJobhuntExample.Criteria huntCro = huntExp.or();
  124. huntCro.andJobUserIDEqualTo(jobuserID);
  125. List<PcJobhunt> jobHuntList = pcJobhuntMapper.selectByExample(huntExp);
  126. List<String> professionIDList = new ArrayList<>();
  127. if (jobHuntList.size()>0){
  128. jobHuntList.stream().forEach(item->{
  129. professionIDList.add(item.getProfessionID());
  130. });
  131. PcPostExample postExp = new PcPostExample();
  132. PcPostExample.Criteria postCro = postExp.or();
  133. postCro.andPostIDIn(professionIDList);
  134. List<PcPost> curPostList = pcPostMapper.selectByExample(postExp);
  135. return curPostList;
  136. }else{
  137. return null;
  138. }
  139. }
  140. private int deleteEducation(List<String> ids) {
  141. int educationRows = 0;
  142. PcEducationExample expEducation = new PcEducationExample();
  143. PcEducationExample.Criteria croEducation = expEducation.or();
  144. croEducation.andJobuserIDIn(ids);
  145. educationRows = pcEducationMapper.deleteByExample(expEducation);
  146. return educationRows;
  147. }
  148. private int deleteExperience(List<String> ids) {
  149. int experienceRows = 0;
  150. PcExperienceExample expExperi = new PcExperienceExample();
  151. PcExperienceExample.Criteria croExperi = expExperi.or();
  152. croExperi.andJobuserIDIn(ids);
  153. experienceRows = pcExperienceMapper.deleteByExample(expExperi);
  154. return experienceRows;
  155. }
  156. @Override
  157. public int delete(List<String> ids) {
  158. deleteEducation(ids);
  159. deleteExperience(ids);
  160. int result = 0;
  161. for(String curJobUserID: ids){
  162. PcJobhuntExample jobHuntExample = new PcJobhuntExample();
  163. jobHuntExample.or().andJobUserIDEqualTo(curJobUserID);
  164. var curJobUserHuntList = pcJobhuntMapper.selectByExample(jobHuntExample).stream().toList();
  165. if( curJobUserHuntList != null && curJobUserHuntList.size()>0){
  166. throw new BaseException("10004","所选求职人员已有关联的求职意向,不允许删除!");
  167. }else{
  168. int count = pcJobuserMapper.deleteByPrimaryKey(curJobUserID);
  169. if(count>0){
  170. PcLabelJobuserExample labelEmp = new PcLabelJobuserExample();
  171. labelEmp.or().andJobuserIDEqualTo(curJobUserID);
  172. pcLabelJobuserMapper.deleteByExample(labelEmp);
  173. }
  174. result+=count;
  175. }
  176. }
  177. return result;
  178. }
  179. @Override
  180. public int save(JobUserVo data, String userId) {
  181. int result = 0;
  182. PcJobuser dbData = pcJobuserMapper.selectByPrimaryKey(data.getJobUserID());
  183. PcJobuserExample emp = new PcJobuserExample();
  184. PcJobuserExample.Criteria cir = emp.or();
  185. //验证身份证是否已经录入
  186. if (dbData != null) {
  187. cir.andJobuserIDNotEqualTo(data.getJobUserID());
  188. }
  189. cir.andIdentityNumberEqualTo(data.getIdentityNumber());
  190. if (pcJobuserMapper.selectByExample(emp).size() > 0) {
  191. throw new BaseException("500", "该身份证号已绑定其他人员");
  192. }
  193. //验证联系电话是否已经录入
  194. cir = emp.or();
  195. if (dbData != null) {
  196. cir.andJobuserIDNotEqualTo(data.getJobUserID());
  197. }
  198. cir.andUserMobileEqualTo(data.getUserMobile());
  199. if (pcJobuserMapper.selectByExample(emp).size() > 0) {
  200. throw new BaseException("500", "该联系电话已绑定其他人员");
  201. }
  202. // 验证社保卡是否绑定
  203. if (data.getSocialSecurityCard() != null && !data.getSocialSecurityCard().isBlank()) {
  204. cir = emp.or();
  205. if (dbData != null) {
  206. cir.andJobuserIDNotEqualTo(data.getJobUserID());
  207. }
  208. cir.andUserMobileEqualTo(data.getSocialSecurityCard());
  209. if (pcJobuserMapper.selectByExample(emp).size() > 0) {
  210. throw new BaseException("500", "该社保卡已绑定其他人员");
  211. }
  212. }
  213. if (dbData == null) {
  214. dbData = new PcJobuser();
  215. dbData.setJobuserID(data.getJobUserID());
  216. dbData.setSiteID(data.getSiteID());
  217. dbData.setIdentityNumber(data.getIdentityNumber());
  218. dbData.setName(data.getName());
  219. dbData.setPyName(data.getPyName());
  220. dbData.setEngName(data.getEngName());
  221. dbData.setJobStatusID(data.getJobStatusID());
  222. dbData.setSex(data.getSex());
  223. dbData.setNation(data.getNation());
  224. dbData.setPoliticsStatusID(data.getPoliticsStatusID());
  225. dbData.setBirthplace(data.getBirthPlace());
  226. dbData.setBirthDay(data.getBirthDay());
  227. dbData.setFamilyNatureID(data.getFamilyNatureID());
  228. dbData.setFamilyAddress(data.getFamilyAddress());
  229. dbData.setCultureRank(data.getCultureRank());
  230. dbData.setHealthID(data.getHealthID());
  231. dbData.setHeight(data.getHeight());
  232. dbData.setBloodTypeID(data.getBloodTypeID());
  233. dbData.setVision(data.getVision());
  234. dbData.setWeight(data.getWeight());
  235. dbData.setMaritalStatusID(data.getMaritalStatusID());
  236. dbData.setProvinceCode(data.getProvinceCode());
  237. dbData.setRegionCode(data.getRegionCode());
  238. dbData.setStreetCode(data.getStreetCode());
  239. dbData.setUserName(data.getUserName());
  240. dbData.setUserMobile(data.getUserMobile());
  241. dbData.setAddress(data.getAddress());
  242. dbData.setPostalCode(data.getPostalCode());
  243. dbData.setEmail(data.getEmail());
  244. dbData.setHobby(data.getHobby());
  245. dbData.setKeyPersonTypeID(data.getKeyPersonTypeID());
  246. dbData.setPersonalSkills(data.getPersonalSkills());
  247. dbData.setSocialSecurityCard(data.getSocialSecurityCard());
  248. dbData.setFinishSchool(data.getFinishSchool());
  249. dbData.setProfession(data.getProfession());
  250. dbData.setNativePlace(data.getNativePlace());
  251. dbData.setIsFullTime(data.getIsFullTime());
  252. dbData.setOccupationalCategory(data.getOccupationalCategory());
  253. dbData.setOccupationalLevel(data.getOccupationalLevel());
  254. dbData.setCreateTime(new Date());
  255. dbData.setCreateUserID(userId);
  256. dbData.setLongitude(data.longitude);
  257. dbData.setLatitude(data.latitude);
  258. result = pcJobuserMapper.insert(dbData);
  259. } else {
  260. dbData.setJobuserID(data.getJobUserID());
  261. dbData.setSiteID(data.getSiteID());
  262. dbData.setIdentityNumber(data.getIdentityNumber());
  263. dbData.setName(data.getName());
  264. dbData.setPyName(data.getPyName());
  265. dbData.setEngName(data.getEngName());
  266. dbData.setSex(data.getSex());
  267. dbData.setJobStatusID(data.getJobStatusID());
  268. dbData.setNation(data.getNation());
  269. dbData.setPoliticsStatusID(data.getPoliticsStatusID());
  270. dbData.setBirthplace(data.getBirthPlace());
  271. dbData.setBirthDay(data.getBirthDay());
  272. dbData.setFamilyNatureID(data.getFamilyNatureID());
  273. dbData.setFamilyAddress(data.getFamilyAddress());
  274. dbData.setCultureRank(data.getCultureRank());
  275. dbData.setHealthID(data.getHealthID());
  276. dbData.setHeight(data.getHeight());
  277. dbData.setBloodTypeID(data.getBloodTypeID());
  278. dbData.setVision(data.getVision());
  279. dbData.setWeight(data.getWeight());
  280. dbData.setMaritalStatusID(data.getMaritalStatusID());
  281. dbData.setProvinceCode(data.getProvinceCode());
  282. dbData.setRegionCode(data.getRegionCode());
  283. dbData.setStreetCode(data.getStreetCode());
  284. dbData.setUserName(data.getUserName());
  285. dbData.setUserMobile(data.getUserMobile());
  286. dbData.setAddress(data.getAddress());
  287. dbData.setPostalCode(data.getPostalCode());
  288. dbData.setEmail(data.getEmail());
  289. dbData.setHobby(data.getHobby());
  290. dbData.setKeyPersonTypeID(data.getKeyPersonTypeID());
  291. dbData.setPersonalSkills(data.getPersonalSkills());
  292. dbData.setSocialSecurityCard(data.getSocialSecurityCard());
  293. dbData.setFinishSchool(data.getFinishSchool());
  294. dbData.setProfession(data.getProfession());
  295. dbData.setNativePlace(data.getNativePlace());
  296. dbData.setIsFullTime(data.getIsFullTime());
  297. dbData.setOccupationalCategory(data.getOccupationalCategory());
  298. dbData.setOccupationalLevel(data.getOccupationalLevel());
  299. dbData.setModifyTime(new Date());
  300. dbData.setModifyUserID(userId);
  301. dbData.setLongitude(data.getLongitude());
  302. dbData.setLatitude(data.getLatitude());
  303. result = pcJobuserMapper.updateByPrimaryKey(dbData);
  304. }
  305. if (result >= 1) {
  306. SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
  307. String jobUserId = dbData.getJobuserID();
  308. List<String> ids = new ArrayList<>();
  309. ids.add(jobUserId);
  310. deleteEducation(ids);
  311. deleteExperience(ids);
  312. data.getJobEducation().stream().forEach(x -> {
  313. PcEducation education = new PcEducation();
  314. education.setEducationID(UUID.randomUUID().toString());
  315. education.setJobuserID(jobUserId);
  316. education.setCultureRank(Integer.parseInt(x.get("cultureRank") + ""));
  317. education.setSchoolName(x.get("schoolName").toString());
  318. try {
  319. education.setSchoolTime(dateFormat.parse(x.get("schoolTime").toString()));
  320. education.setOverTime(dateFormat.parse(x.get("overTime").toString()));
  321. } catch (ParseException e) {
  322. e.printStackTrace();
  323. }
  324. education.setMajor(x.get("major").toString());
  325. education.setCreateTime(new Date());
  326. education.setCreateUserID(userId);
  327. pcEducationMapper.insert(education);
  328. });
  329. data.getJobExperience().stream().forEach(x -> {
  330. PcExperience experience = new PcExperience();
  331. experience.setExperienceID(UUID.randomUUID().toString());
  332. experience.setJobuserID(jobUserId);
  333. try {
  334. experience.setStartTime(dateFormat.parse(x.get("startTime").toString()));
  335. experience.setEndTime(dateFormat.parse(x.get("endTime").toString()));
  336. } catch (ParseException e) {
  337. e.printStackTrace();
  338. }
  339. experience.setDuties(x.get("duties").toString());
  340. experience.setWorkAddress(x.get("workAddress").toString());
  341. experience.setCreateTime(new Date());
  342. experience.setCreateUserID(userId);
  343. pcExperienceMapper.insert(experience);
  344. });
  345. }
  346. PcLabelJobuserExample labelEmp = new PcLabelJobuserExample();
  347. labelEmp.or().andJobuserIDEqualTo(data.getJobUserID());
  348. pcLabelJobuserMapper.deleteByExample(labelEmp);
  349. if(data.listLabel!=null && data.listLabel.size()>0){
  350. data.listLabel.forEach(x->{
  351. PcLabelJobuser labelModel = new PcLabelJobuser();
  352. labelModel.setJobuserID(data.getJobUserID());
  353. labelModel.setLabelID(x.getLabelID());
  354. pcLabelJobuserMapper.insert(labelModel);
  355. });
  356. }
  357. return result;
  358. }
  359. private int ifHadRepeatData(JobUserVo data){
  360. var result = 0;
  361. PcJobuserExample jobUserExp1 = new PcJobuserExample();
  362. jobUserExp1.or().andIdentityNumberEqualTo(data.getIdentityNumber()).andJobuserIDNotEqualTo(data.getJobUserID());
  363. var ifRepeatIdentity = pcJobuserMapper.selectByExample(jobUserExp1).size()>0;
  364. PcJobuserExample jobUserExp2= new PcJobuserExample();
  365. jobUserExp2.or().andUserMobileEqualTo(data.getUserMobile()).andJobuserIDNotEqualTo(data.getJobUserID());
  366. var ifRepeatMobile = pcJobuserMapper.selectByExample(jobUserExp2).size()>0;
  367. result += ifRepeatIdentity? 1:0;
  368. result += ifRepeatMobile? 2:0;
  369. if(!stringUtils.IsNullOrEmpty(data.getSocialSecurityCard())){
  370. PcJobuserExample jobUserExp3= new PcJobuserExample();
  371. jobUserExp3.or().andUserMobileEqualTo(data.getSocialSecurityCard()).andJobuserIDNotEqualTo(data.getJobUserID());
  372. var ifRepeatSocialCard = pcJobuserMapper.selectByExample(jobUserExp3).size()>0;
  373. result += ifRepeatSocialCard ? 4:0;
  374. }
  375. return result;
  376. }
  377. @Override
  378. public int baseInfoSave(JobUserVo data, String userId) {
  379. int result = 0;
  380. var repeatResult = ifHadRepeatData(data);
  381. switch (repeatResult){
  382. default:
  383. case 0:
  384. break;
  385. case 1:
  386. throw new BaseException("1004","身份证号码已存在!");
  387. case 2:
  388. throw new BaseException("1004","联系电话已存在!");
  389. case 3:
  390. throw new BaseException("1004","身份证号码、联系电话重复!");
  391. case 4:
  392. throw new BaseException("1004","社保卡已绑定其他人员!");
  393. case 5:
  394. throw new BaseException("1004","身份证号码、社保卡号重复!");
  395. case 6:
  396. throw new BaseException("1004","联系电话、社保卡号重复!");
  397. case 7:
  398. throw new BaseException("1004","身份证号码、联系电话、社保卡号重复!");
  399. }
  400. PcJobuser dbData = pcJobuserMapper.selectByPrimaryKey(data.getJobUserID());
  401. if (dbData == null) {
  402. dbData = new PcJobuser();
  403. dbData.setJobuserID(data.getJobUserID());
  404. dbData.setSiteID(data.getSiteID());
  405. dbData.setIdentityNumber(data.getIdentityNumber());
  406. dbData.setName(data.getName());
  407. dbData.setPyName(data.getPyName());
  408. dbData.setEngName(data.getEngName());
  409. dbData.setJobStatusID(data.getJobStatusID());
  410. dbData.setSex(data.getSex());
  411. dbData.setNation(data.getNation());
  412. dbData.setPoliticsStatusID(data.getPoliticsStatusID());
  413. dbData.setBirthplace(data.getBirthPlace());
  414. dbData.setBirthDay(data.getBirthDay());
  415. dbData.setFamilyNatureID(data.getFamilyNatureID());
  416. dbData.setFamilyAddress(data.getFamilyAddress());
  417. dbData.setCultureRank(data.getCultureRank());
  418. dbData.setHealthID(data.getHealthID());
  419. dbData.setHeight(data.getHeight());
  420. dbData.setBloodTypeID(data.getBloodTypeID());
  421. dbData.setVision(data.getVision());
  422. dbData.setWeight(data.getWeight());
  423. dbData.setMaritalStatusID(data.getMaritalStatusID());
  424. dbData.setProvinceCode(data.getProvinceCode());
  425. dbData.setRegionCode(data.getRegionCode());
  426. dbData.setStreetCode(data.getStreetCode());
  427. dbData.setUserName(data.getUserName());
  428. dbData.setUserMobile(data.getUserMobile());
  429. dbData.setAddress(data.getAddress());
  430. dbData.setPostalCode(data.getPostalCode());
  431. dbData.setEmail(data.getEmail());
  432. dbData.setHobby(data.getHobby());
  433. dbData.setKeyPersonTypeID(data.getKeyPersonTypeID());
  434. dbData.setPersonalSkills(data.getPersonalSkills());
  435. dbData.setOpenId(data.getOpenId());
  436. dbData.setSocialSecurityCard(data.getSocialSecurityCard());
  437. dbData.setFinishSchool(data.getFinishSchool());
  438. dbData.setProfession(data.getProfession());
  439. dbData.setIsFullTime(data.getIsFullTime());
  440. dbData.setOccupationalCategory(data.getOccupationalCategory());
  441. dbData.setOccupationalLevel(data.getOccupationalLevel());
  442. dbData.setNativePlace(data.getNativePlace());
  443. dbData.setLongitude(data.getLongitude());
  444. dbData.setLatitude(data.getLatitude());
  445. dbData.setCreateTime(new Date());
  446. dbData.setCreateUserID(userId);
  447. result = pcJobuserMapper.insert(dbData);
  448. } else {
  449. dbData.setJobuserID(data.getJobUserID());
  450. dbData.setSiteID(data.getSiteID());
  451. dbData.setIdentityNumber(data.getIdentityNumber());
  452. dbData.setName(data.getName());
  453. dbData.setPyName(data.getPyName());
  454. dbData.setEngName(data.getEngName());
  455. dbData.setSex(data.getSex());
  456. dbData.setJobStatusID(data.getJobStatusID());
  457. dbData.setNation(data.getNation());
  458. dbData.setPoliticsStatusID(data.getPoliticsStatusID());
  459. dbData.setBirthplace(data.getBirthPlace());
  460. dbData.setBirthDay(data.getBirthDay());
  461. dbData.setFamilyNatureID(data.getFamilyNatureID());
  462. dbData.setFamilyAddress(data.getFamilyAddress());
  463. dbData.setCultureRank(data.getCultureRank());
  464. dbData.setHealthID(data.getHealthID());
  465. dbData.setHeight(data.getHeight());
  466. dbData.setBloodTypeID(data.getBloodTypeID());
  467. dbData.setVision(data.getVision());
  468. dbData.setWeight(data.getWeight());
  469. dbData.setMaritalStatusID(data.getMaritalStatusID());
  470. dbData.setProvinceCode(data.getProvinceCode());
  471. dbData.setRegionCode(data.getRegionCode());
  472. dbData.setStreetCode(data.getStreetCode());
  473. dbData.setUserName(data.getUserName());
  474. dbData.setUserMobile(data.getUserMobile());
  475. dbData.setAddress(data.getAddress());
  476. dbData.setPostalCode(data.getPostalCode());
  477. dbData.setEmail(data.getEmail());
  478. dbData.setHobby(data.getHobby());
  479. dbData.setKeyPersonTypeID(data.getKeyPersonTypeID());
  480. dbData.setPersonalSkills(data.getPersonalSkills());
  481. dbData.setOpenId(data.getOpenId());
  482. dbData.setSocialSecurityCard(data.getSocialSecurityCard());
  483. dbData.setFinishSchool(data.getFinishSchool());
  484. dbData.setProfession(data.getProfession());
  485. dbData.setIsFullTime(data.getIsFullTime());
  486. dbData.setOccupationalCategory(data.getOccupationalCategory());
  487. dbData.setOccupationalLevel(data.getOccupationalLevel());
  488. dbData.setNativePlace(data.getNativePlace());
  489. dbData.setLongitude(data.getLongitude());
  490. dbData.setLatitude(data.getLatitude());
  491. dbData.setModifyTime(new Date());
  492. dbData.setModifyUserID(userId);
  493. result = pcJobuserMapper.updateByPrimaryKey(dbData);
  494. }
  495. PcLabelJobuserExample labelEmp = new PcLabelJobuserExample();
  496. labelEmp.or().andJobuserIDEqualTo(data.getJobUserID());
  497. pcLabelJobuserMapper.deleteByExample(labelEmp);
  498. if(data.listLabel!=null && data.listLabel.size()>0){
  499. data.listLabel.forEach(x->{
  500. PcLabelJobuser labelModel = new PcLabelJobuser();
  501. labelModel.setJobuserID(data.getJobUserID());
  502. labelModel.setLabelID(x.getLabelID());
  503. pcLabelJobuserMapper.insert(labelModel);
  504. });
  505. }
  506. return result;
  507. }
  508. //验证身份证号是否合法
  509. private boolean identityNumberIsValid(String idNumber) {
  510. if (idNumber == null || (idNumber.length() != 18 && idNumber.length() != 15)) {
  511. return false;
  512. }
  513. // 校验18位身份证
  514. if (idNumber.length() == 18) {
  515. String[] idInfo = idNumber.substring(0, 17).split("");
  516. String birth = idInfo[6] + idInfo[7] + '-' + idInfo[8] + idInfo[9] + '-' + idInfo[10] + idInfo[11];
  517. try {
  518. if (!idInfo[12].equals("19") && !idInfo[12].equals("20")) {
  519. return false;
  520. }
  521. java.time.LocalDate.parse(birth, java.time.format.DateTimeFormatter.ISO_DATE);
  522. } catch (Exception e) {
  523. return false;
  524. }
  525. int sum = 0;
  526. int[] weights = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
  527. char[] checkCode = {'1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'};
  528. for (int i = 0; i < 17; i++) {
  529. sum += Integer.parseInt(idInfo[i]) * weights[i];
  530. }
  531. return idInfo[17].equals(String.valueOf(checkCode[sum % 11]));
  532. }
  533. return true;
  534. }
  535. //验证手机号是否合法
  536. private boolean userMobileIsValid(String mobile) {
  537. // 中国手机号码长度为11位,且符合以下格式:13x, 14x, 15x, 17x, 18x
  538. String mobile_Regex = "^(13[0-9]|14[57]|15[0-35-9]|17[0-9]|18[0-9])\\d{8}$";
  539. return mobile.matches(mobile_Regex);
  540. }
  541. private boolean userEmailIsValid(String email){
  542. String email_Regex = "^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";
  543. Pattern pattern = Pattern.compile(email_Regex);
  544. Matcher matcher = pattern.matcher(email);
  545. return matcher.matches();
  546. }
  547. @Override
  548. public List<JobUserVo> importJobUser(List<JobUserVo> dataList, String userID) {
  549. if (dataList.size() <= 0)
  550. throw new BaseException("", "请添加导入数据!");
  551. //性别
  552. List<SysDictionaryItem> dicJobUserGenderList = dictionaryService.getDictionaryItemList("Gender");
  553. //重点人员类别
  554. List<SysDictionaryItem> dicKeyPersonTypeList = dictionaryService.getDictionaryItemList("KeyPersonType");
  555. //就业状态
  556. List<SysDictionaryItem> dicJobStatusList = dictionaryService.getDictionaryItemList("JobStatus");
  557. //所属驿站
  558. PcSite curLoginUserSiteInfo = null;
  559. PcSiteUserExample siteUserExp = new PcSiteUserExample();
  560. siteUserExp.or().andUserIDEqualTo(userID);
  561. PcSiteUser curLoginSiteUser = pcSiteUserMapper.selectByExample(siteUserExp).stream().findFirst().orElse(null);
  562. if(curLoginSiteUser==null){
  563. throw new BaseException("", "未能查询到当前登录人的驿站信息!");
  564. }else{
  565. PcSiteExample siteExp = new PcSiteExample();
  566. siteExp.or().andSiteIDEqualTo(curLoginSiteUser.getSiteID());
  567. curLoginUserSiteInfo = pcSiteMapper.selectByExample(siteExp).stream().findFirst().orElse(null);
  568. }
  569. //是否全日制
  570. List<SysDictionaryItem> dicIsFullTimeList = dictionaryService.getDictionaryItemList("IsFullTime");
  571. //职业资格类别
  572. List<SysDictionaryItem> secondLevelOcCategoryList = new ArrayList<>();
  573. PcOccupationalExample occupationalExp = new PcOccupationalExample();
  574. occupationalExp.or().andParentOccupationalIDEqualTo("").andStatusEqualTo(1);
  575. var firstLevelData = pcOccupationalMapper.selectByExample(occupationalExp);
  576. for (PcOccupational curOccupational : firstLevelData) {
  577. occupationalExp = new PcOccupationalExample();
  578. occupationalExp.or().andParentOccupationalIDEqualTo(curOccupational.getOccupationalID()).andStatusEqualTo(1);
  579. var secondLevelData = pcOccupationalMapper.selectByExample(occupationalExp);
  580. for (PcOccupational curChildOccupational : secondLevelData) {
  581. SysDictionaryItem item = new SysDictionaryItem();
  582. item.setCode(curChildOccupational.getOccupationalID());
  583. item.setName(curChildOccupational.getOccupationalName());
  584. secondLevelOcCategoryList.add(item);
  585. }
  586. }
  587. //职业资格等级
  588. List<SysDictionaryItem> dicOcclLevelList = dictionaryService.getDictionaryItemList("OccupationalLevel");
  589. //民族
  590. List<SysDictionaryItem> dicNationTypeList = dictionaryService.getDictionaryItemList("NationType");
  591. //政治面貌
  592. List<SysDictionaryItem> dicPoliticsTypeList = dictionaryService.getDictionaryItemList("PoliticsStatus");
  593. //户口性质
  594. List<SysDictionaryItem> dicFamilyNatureList = dictionaryService.getDictionaryItemList("FamilyNature");
  595. //最高学历
  596. List<SysDictionaryItem> dicHighestDegreeList = dictionaryService.getDictionaryItemList("HighestDegree");
  597. //健康状况
  598. List<SysDictionaryItem> dicHealthTypeList = dictionaryService.getDictionaryItemList("Health");
  599. //婚姻状况
  600. List<SysDictionaryItem> dicMaritalStatusList = dictionaryService.getDictionaryItemList("MaritalStatus");
  601. //市/县
  602. List<SysDictionaryItem> regionDataList = new ArrayList<>();
  603. AreaCodeExample regionExp= new AreaCodeExample();
  604. regionExp.or().andFidEqualTo("441300000000000").andLvEqualTo("3");
  605. var thirdLevelRegionList = areaCodeMapper.selectByExample(regionExp);
  606. for (AreaCode curRegionData : thirdLevelRegionList) {
  607. SysDictionaryItem item = new SysDictionaryItem();
  608. item.setCode(curRegionData.getCode());
  609. item.setName(curRegionData.getName());
  610. regionDataList.add(item);
  611. }
  612. //镇街
  613. List<SysDictionaryItem> streetDataList = new ArrayList<>();
  614. AreaCodeExample streetExp= new AreaCodeExample();
  615. streetExp.or().andLvEqualTo("4");
  616. var forthLevelStreetList = areaCodeMapper.selectByExample(streetExp);
  617. for (AreaCode curStreetData : forthLevelStreetList) {
  618. SysDictionaryItem item = new SysDictionaryItem();
  619. item.setCode(curStreetData.getCode());
  620. item.setName(curStreetData.getName());
  621. streetDataList.add(item);
  622. }
  623. List<JobUserVo> resultList = new ArrayList<>();
  624. PcSite finalCurLoginUserSiteInfo = curLoginUserSiteInfo;
  625. dataList.forEach(item -> {
  626. String errorInfo = "";
  627. item.setJobUserID(UUID.randomUUID().toString());
  628. var repeatResult = ifHadRepeatData(item);
  629. switch (repeatResult){
  630. default:
  631. case 0:
  632. break;
  633. case 1:
  634. errorInfo += "身份证号码已存在!";
  635. case 2:
  636. errorInfo += "联系电话已存在!";
  637. case 3:
  638. errorInfo += "身份证号码、联系电话重复!";
  639. case 4:
  640. errorInfo += "社保卡已绑定其他人员!";
  641. case 5:
  642. errorInfo += "身份证号码、社保卡号重复!";
  643. case 6:
  644. errorInfo += "联系电话、社保卡号重复!";
  645. case 7:
  646. errorInfo += "身份证号码、联系电话、社保卡号重复!";
  647. }
  648. if (stringUtils.IsNullOrEmpty(item.getName())){
  649. errorInfo += "请填写姓名!";
  650. }
  651. if (stringUtils.IsNullOrEmpty(item.getIdentityNumber()))
  652. errorInfo += "请填写身份证号码!";
  653. else{
  654. if(identityNumberIsValid(item.getIdentityNumber())) {
  655. var birthDay = dateUtils.StrToDate(item.getIdentityNumber().substring(6,14));
  656. var sexStr = Integer.parseInt(item.getIdentityNumber().substring(16,17));
  657. if(!stringUtils.IsNullOrEmpty(item.getBirthDayStr())){
  658. if(birthDay!=dateUtils.StrToDate(item.getBirthDayStr())){
  659. errorInfo += "出生日期与身份证号不匹配!";
  660. }
  661. }else{
  662. item.setBirthDay(birthDay);
  663. }
  664. if(!stringUtils.IsNullOrEmpty(item.getSexName())){
  665. if((sexStr%2==0&&item.getSexName()=="男")||(sexStr%2!=0&&item.getSexName()=="女")){
  666. errorInfo += "性别与身份证号不匹配!";
  667. }
  668. }
  669. }else{
  670. errorInfo += "身份证号码不合法!";
  671. }
  672. }
  673. if (stringUtils.IsNullOrEmpty(item.getSexName()))
  674. errorInfo += "请选择性别!";
  675. else {
  676. item.setSex(dicJobUserGenderList.stream().filter(it -> it.getName().equals(item.getSexName().trim()))
  677. .findFirst().orElse(new SysDictionaryItem()).getValue());
  678. if (item.getSex() == null || item.getSex() == 0)
  679. errorInfo += "性别不存在!";
  680. }
  681. if (stringUtils.IsNullOrEmpty(item.getKeyPersonTypeName()))
  682. errorInfo += "请选择重点人员类别!";
  683. else {
  684. item.setKeyPersonTypeID(dicKeyPersonTypeList.stream().filter(it -> it.getName().equals(item.getKeyPersonTypeName().trim()))
  685. .findFirst().orElse(new SysDictionaryItem()).getValue());
  686. if (item.getKeyPersonTypeID() == null || item.getKeyPersonTypeID() == 0)
  687. errorInfo += "重点人员类别不存在!";
  688. }
  689. if (stringUtils.IsNullOrEmpty(item.getJobStatusName()))
  690. errorInfo += "请选择就业状态!";
  691. else {
  692. item.setJobStatusID(dicJobStatusList.stream().filter(it -> it.getName().equals(item.getJobStatusName().trim()))
  693. .findFirst().orElse(new SysDictionaryItem()).getValue());
  694. if (item.getJobStatusID() == null || item.getJobStatusID() == 0)
  695. errorInfo += "就业状态不存在!";
  696. }
  697. if (stringUtils.IsNullOrEmpty(item.getSiteName()))
  698. errorInfo += "请填写所属驿站!";
  699. else {
  700. if (finalCurLoginUserSiteInfo!=null){
  701. if(item.getSiteName()!= finalCurLoginUserSiteInfo.getSiteName()){
  702. errorInfo += "请填写您所在的驿站名称!";
  703. }else{
  704. item.setSiteID(finalCurLoginUserSiteInfo.getSiteID());
  705. }
  706. }
  707. }
  708. if (stringUtils.IsNullOrEmpty(item.getAddress()))
  709. errorInfo += "请填写地址!";
  710. if (stringUtils.IsNullOrEmpty(item.getUserMobile()))
  711. errorInfo += "请填写联系电话!";
  712. else{
  713. if(!userMobileIsValid(item.getUserMobile())){
  714. errorInfo += "联系电话不合法!";
  715. }
  716. }
  717. if (!stringUtils.IsNullOrEmpty(item.getIsFullTimeName())){
  718. item.setIsFullTime(dicIsFullTimeList.stream().filter(it -> it.getName().equals(item.getIsFullTimeName().trim()))
  719. .findFirst().orElse(new SysDictionaryItem()).getValue());
  720. if (item.getIsFullTime() == null || item.getIsFullTime() == 0)
  721. errorInfo += "是否全日制不存在!";
  722. }
  723. if (!stringUtils.IsNullOrEmpty(item.getOccupationalCategoryName())){
  724. item.setOccupationalCategory(secondLevelOcCategoryList.stream().filter(it -> it.getName().equals(item.getOccupationalCategoryName().trim()))
  725. .findFirst().orElse(new SysDictionaryItem()).getCode());
  726. if (item.getOccupationalCategory() == null)
  727. errorInfo += "职业资格类别不存在!";
  728. }
  729. if (!stringUtils.IsNullOrEmpty(item.getOccupationalLevelName())) {
  730. item.setOccupationalLevel(dicOcclLevelList.stream().filter(it -> it.getName().equals(item.getOccupationalLevelName().trim()))
  731. .findFirst().orElse(new SysDictionaryItem()).getValue());
  732. if (item.getOccupationalLevel() == null || item.getOccupationalLevel() == 0)
  733. errorInfo += "职业资格等级不存在!";
  734. }
  735. if (!stringUtils.IsNullOrEmpty(item.getNationName())) {
  736. item.setNation(dicNationTypeList.stream().filter(it -> it.getName().equals(item.getNationName().trim()))
  737. .findFirst().orElse(new SysDictionaryItem()).getValue());
  738. if (item.getNation() == null || item.getNation() == 0)
  739. errorInfo += "民族不存在!";
  740. }
  741. if (!stringUtils.IsNullOrEmpty(item.getPoliticsStatusName())) {
  742. item.setPoliticsStatusID(dicPoliticsTypeList.stream().filter(it -> it.getName().equals(item.getPoliticsStatusName().trim()))
  743. .findFirst().orElse(new SysDictionaryItem()).getValue());
  744. if (item.getPoliticsStatusID() == null || item.getPoliticsStatusID() == 0)
  745. errorInfo += "政治面貌不存在!";
  746. }
  747. if (!stringUtils.IsNullOrEmpty(item.getFamilyNatureName())) {
  748. item.setFamilyNatureID(dicFamilyNatureList.stream().filter(it -> it.getName().equals(item.getFamilyNatureName().trim()))
  749. .findFirst().orElse(new SysDictionaryItem()).getValue());
  750. if (item.getFamilyNatureID() == null || item.getFamilyNatureID() == 0)
  751. errorInfo += "户口性质不存在!";
  752. }
  753. if (!stringUtils.IsNullOrEmpty(item.getCultureRankName())) {
  754. item.setCultureRank(dicHighestDegreeList.stream().filter(it -> it.getName().equals(item.getCultureRankName().trim()))
  755. .findFirst().orElse(new SysDictionaryItem()).getValue());
  756. if (item.getCultureRank() == null || item.getCultureRank() == 0)
  757. errorInfo += "最高学历不存在!";
  758. }
  759. if (!stringUtils.IsNullOrEmpty(item.getHealthName())) {
  760. item.setHealthID(dicHealthTypeList.stream().filter(it -> it.getName().equals(item.getHealthName().trim()))
  761. .findFirst().orElse(new SysDictionaryItem()).getValue());
  762. if (item.getHealthID() == null || item.getHealthID() == 0)
  763. errorInfo += "健康状况不存在!";
  764. }
  765. if (!stringUtils.IsNullOrEmpty(item.getMaritalStatusName())) {
  766. item.setMaritalStatusID(dicMaritalStatusList.stream().filter(it -> it.getName().equals(item.getMaritalStatusName().trim()))
  767. .findFirst().orElse(new SysDictionaryItem()).getValue());
  768. if (item.getMaritalStatusID() == null || item.getMaritalStatusID() == 0)
  769. errorInfo += "婚姻状况不存在!";
  770. }
  771. if (!stringUtils.IsNullOrEmpty(item.getEmail())) {
  772. if (!userEmailIsValid(item.getEmail()))
  773. errorInfo += "电子邮箱不合法!";
  774. }
  775. if (!stringUtils.IsNullOrEmpty(item.getProvinceName())) {
  776. if((item.getProvinceName().trim()).equals("广东省")){
  777. item.setProvinceCode("440000000000000");
  778. }else{
  779. errorInfo += "省份不存在!";
  780. }
  781. }
  782. if (!stringUtils.IsNullOrEmpty(item.getRegionName())) {
  783. item.setRegionCode(regionDataList.stream().filter(it -> it.getName().equals(item.getRegionName().trim()))
  784. .findFirst().orElse(new SysDictionaryItem()).getCode());
  785. if (item.getRegionCode() == null)
  786. errorInfo += "市/县不存在!";
  787. }
  788. if (!stringUtils.IsNullOrEmpty(item.getStreetName())) {
  789. item.setStreetCode(streetDataList.stream().filter(it -> it.getName().equals(item.getStreetName().trim()))
  790. .findFirst().orElse(new SysDictionaryItem()).getCode());
  791. if (item.getStreetCode() == null)
  792. errorInfo += "镇街不存在!";
  793. else{
  794. if (stringUtils.IsNullOrEmpty(item.getRegionName())){
  795. errorInfo += "请选择相关市/县!";
  796. }else{
  797. AreaCodeExample curStreetExp = new AreaCodeExample();
  798. streetExp.or().andCodeEqualTo(item.getStreetCode());
  799. var curStreetReginCode = areaCodeMapper.selectByExample(curStreetExp).get(0).getFid();
  800. if(item.getRegionCode()!= null&&curStreetReginCode!=item.getRegionCode()){
  801. errorInfo += "镇街不属于当前市/县!";
  802. }
  803. }
  804. }
  805. }
  806. if (stringUtils.IsNullOrEmpty(errorInfo)) {
  807. resultList.add(item);
  808. } else {
  809. item.setErrorMessage(errorInfo);
  810. }
  811. });
  812. if (dataList.stream().filter(it -> !stringUtils.IsNullOrEmpty(it.errorMessage)).collect(Collectors.toList()).size() > 0)
  813. return dataList;
  814. resultList.forEach(item -> {
  815. save(item, userID);
  816. });
  817. return null;
  818. }
  819. }