JobHuntServiceImpl.java 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380
  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.JobHuntCQuery;
  7. import com.hz.employmentsite.model.*;
  8. import com.hz.employmentsite.services.service.AccountService;
  9. import com.hz.employmentsite.services.service.jobUserManager.JobHuntService;
  10. import com.hz.employmentsite.services.service.system.DictionaryService;
  11. import com.hz.employmentsite.util.StringUtils;
  12. import com.hz.employmentsite.util.ip.IpUtils;
  13. import com.hz.employmentsite.vo.jobUserManager.JobHuntVo;
  14. import org.springframework.beans.factory.annotation.Autowired;
  15. import org.springframework.stereotype.Service;
  16. import javax.servlet.http.HttpServletRequest;
  17. import java.math.BigDecimal;
  18. import java.util.*;
  19. import java.util.stream.Collectors;
  20. @Service("JobHuntService")
  21. public class JobHuntServiceImpl implements JobHuntService {
  22. @Autowired
  23. private JobHuntCQuery jobhuntCQuery;
  24. @Autowired
  25. private PcJobhuntMapper pcJobhuntMapper;
  26. @Autowired
  27. private PcJobuserMapper pcJobuserMapper;
  28. @Autowired
  29. private PcProfessionMapper pcProfessionMapper;
  30. @Autowired
  31. private PcRecommendMgtMapper pcRecommendMgtMapper;
  32. @Autowired
  33. private PcSiteUserMapper pcSiteUserMapper;
  34. @Autowired
  35. private DictionaryService dictionaryService;
  36. @Autowired
  37. private StringUtils stringUtils;
  38. @Autowired
  39. private AccountService accountService;
  40. @Autowired
  41. private SysLogMapper sysLogMapper;
  42. @Override
  43. public PageInfo<JobHuntVo> getList(Integer pageIndex, Integer pageSize, List<String> jobHuntIDList, String jobUserID, String jobUserName, String professionName,
  44. BigDecimal minWorkYear, BigDecimal maxWorkYear, Integer jobHuntTypeID, Integer jobUserTypeID,
  45. BigDecimal minSalary, BigDecimal maxSalary, Integer isAccomplish, String loginUserID,
  46. String siteID, String regionCode, Date startDate, Date endDate,boolean isAllJobHunt,
  47. String createUserName, Integer dataSource) {
  48. List<String> curLoginUserSiteJobUserIDs = new ArrayList<>();
  49. if (!stringUtils.IsNullOrEmpty(loginUserID)) {
  50. PcSiteUserExample siteUserExp = new PcSiteUserExample();
  51. siteUserExp.or().andUserIDEqualTo(loginUserID);
  52. var curLoginUserSiteID = pcSiteUserMapper.selectByExample(siteUserExp).get(0).getSiteID();
  53. PcJobuserExample jobUserExp = new PcJobuserExample();
  54. jobUserExp.or().andSiteIDEqualTo(curLoginUserSiteID);
  55. var curLoginUserSiteJobUserList = pcJobuserMapper.selectByExample(jobUserExp).stream().toList();
  56. for (PcJobuser curLoginUserSiteJobUser : curLoginUserSiteJobUserList) {
  57. curLoginUserSiteJobUserIDs.add(curLoginUserSiteJobUser.getJobuserID());
  58. }
  59. }
  60. PageHelper.startPage(pageIndex, pageSize);
  61. List<JobHuntVo> list;
  62. if (!stringUtils.IsNullOrEmpty(loginUserID) && curLoginUserSiteJobUserIDs.isEmpty()) {
  63. // APP查询时,当前驿站没有录入求职人员,返回空,防止curLoginUserSiteJobUserIDs为空字符,查询语句不能触发
  64. list = new ArrayList<>();
  65. } else {
  66. list = jobhuntCQuery.getJobHuntList(stringUtils.ListToInSql(jobHuntIDList), jobUserID, jobUserName,
  67. professionName, minWorkYear, maxWorkYear,
  68. jobHuntTypeID, jobUserTypeID, minSalary,
  69. maxSalary, isAccomplish, stringUtils.ListToInSql(curLoginUserSiteJobUserIDs),
  70. siteID, regionCode, startDate, endDate, isAllJobHunt, createUserName, dataSource);
  71. }
  72. PageInfo<JobHuntVo> result = new PageInfo(list);
  73. return result;
  74. }
  75. @Override
  76. public JobHuntVo get(String jobHuntId) {
  77. List<String> ids = new ArrayList<>();
  78. if (stringUtils.IsNullOrEmpty(jobHuntId)) {
  79. return null;
  80. }else{
  81. ids.add(jobHuntId);
  82. }
  83. JobHuntVo model = jobhuntCQuery.getJobHuntList(stringUtils.ListToInSql(ids), null, null, null, null, null,
  84. null, null, null, null, null, null, null, null, null, null,true, null, null).stream().findFirst().orElse(null);
  85. return model;
  86. }
  87. @Override
  88. public Integer delete(HttpServletRequest request, List<String> idList, String loginUserID){
  89. PcRecommendMgtExample recommendMgtExp = new PcRecommendMgtExample();
  90. recommendMgtExp.or().andJobHuntIDIn(idList);
  91. List<PcRecommendMgt> resultList = pcRecommendMgtMapper.selectByExample(recommendMgtExp).stream().toList();
  92. if( resultList.size() > 0 ) {
  93. throw new BaseException("10004","已存在该意向的推荐数据,删除失败!");
  94. }
  95. // 查询数据
  96. List<JobHuntVo> jobHuntList = jobhuntCQuery.getJobHuntList(stringUtils.ListToInSql(idList), null, null,
  97. null, null, null,
  98. null, null, null,
  99. null, null, null,
  100. null, null, null, null, false, null, null);
  101. String delInfo = "删除求职意向:";
  102. for (JobHuntVo item : jobHuntList) {
  103. delInfo += item.getJobUserName() + "("+item.getProfessionName() + "),";
  104. }
  105. PcJobhuntExample contactExample = new PcJobhuntExample();
  106. contactExample.or().andJobHuntIDIn(idList);
  107. int result = pcJobhuntMapper.deleteByExample(contactExample);
  108. if (result > 0) {
  109. SysLog sysLog = new SysLog();
  110. sysLog.setLogID(UUID.randomUUID().toString());
  111. sysLog.setPageName("求职意向信息管理");
  112. sysLog.setPageUrl("/jobusermgr/jobhunt/delete");
  113. sysLog.setActionName("删除求职意向");
  114. sysLog.setUserID(loginUserID);
  115. sysLog.setLogTime(new Date());
  116. sysLog.setIPAddress(IpUtils.getIpAddr(request));
  117. sysLog.setOperationData(delInfo.substring(0, delInfo.length() - 1)); // 注意移除最后一个,
  118. sysLogMapper.insert(sysLog);
  119. }
  120. return result;
  121. }
  122. @Override
  123. public Integer deleteJobHuntAndRecommendMgt(HttpServletRequest request, String id, String loginUserID){
  124. try{
  125. PcRecommendMgtExample emp = new PcRecommendMgtExample();
  126. emp.or().andJobHuntIDEqualTo(id);
  127. pcRecommendMgtMapper.deleteByExample(emp);
  128. // 求职意向相关数据
  129. List<JobHuntVo> jobHuntList = jobhuntCQuery.getJobHuntList(stringUtils.ListToInSql(Arrays.asList(id)), null, null,
  130. null, null, null,
  131. null, null, null,
  132. null, null, null,
  133. null, null, null, null, false,null, null);
  134. // 删除求职意向
  135. int result = pcJobhuntMapper.deleteByPrimaryKey(id);
  136. if (result > 0) {
  137. // 保存日志信息
  138. String delInfo = "删除求职意向:";
  139. for (JobHuntVo item : jobHuntList) {
  140. delInfo += item.getJobUserName() + "("+item.getProfessionName() + ")";
  141. }
  142. SysLog sysLog = new SysLog();
  143. sysLog.setLogID(UUID.randomUUID().toString());
  144. sysLog.setPageName("求职意向信息管理");
  145. sysLog.setPageUrl("/jobusermgr/jobhunt/delete");
  146. sysLog.setActionName("删除求职意向");
  147. sysLog.setUserID(loginUserID);
  148. sysLog.setLogTime(new Date());
  149. sysLog.setIPAddress(IpUtils.getIpAddr(request));
  150. sysLog.setOperationData(delInfo);
  151. sysLogMapper.insert(sysLog);
  152. }
  153. return result;
  154. }catch (Exception e){
  155. e.printStackTrace();
  156. return 0;
  157. }
  158. }
  159. @Override
  160. public Integer save(JobHuntVo data, String userId) {
  161. int result = 0;
  162. JobHuntVo record = get(data.jobHuntID);
  163. PcJobhunt dbData = record == null ? null : pcJobhuntMapper.selectByPrimaryKey(record.jobHuntID);
  164. if (dbData == null && !stringUtils.IsNullOrEmpty(data.getOracleTableID())) {
  165. PcJobhuntExample example = new PcJobhuntExample();
  166. example.createCriteria().andOracleTableIDEqualTo(data.getOracleTableID());
  167. List<PcJobhunt> jobhuntList = pcJobhuntMapper.selectByExample(example);
  168. if (!jobhuntList.isEmpty()) {
  169. // 已入库的不进行重复同步
  170. return 0;
  171. }
  172. }
  173. Boolean isExist = dbData != null;
  174. //判断岗位id是否为空
  175. if (stringUtils.IsNullOrEmpty(data.getProfessionID())) {
  176. PcProfessionExample proEmp = new PcProfessionExample();
  177. PcProfessionExample.Criteria proCia = proEmp.or();
  178. proCia.andParentProfessionIDNotEqualTo("");
  179. proCia.andProfessionNameEqualTo("其他");
  180. //获取二级其他信息
  181. PcProfession proOther = pcProfessionMapper.selectByExample(proEmp).stream().findFirst().orElse(null);
  182. if (proOther != null) {
  183. proEmp = new PcProfessionExample();
  184. proEmp.or().andParentProfessionIDEqualTo(proOther.getProfessionID()).andProfessionNameIsNotNull();
  185. // proCia.andProfessionNameEqualTo(data.getProfessionName());
  186. //查询其他岗位
  187. List<PcProfession> proOtherSonList = pcProfessionMapper.selectByExample(proEmp);
  188. PcProfession proOtherSon = proOtherSonList.stream()
  189. .filter(x -> x.getProfessionName().equals(data.getProfessionName())).findFirst().orElse(null);
  190. if (proOtherSon != null) {
  191. data.setProfessionID(proOtherSon.getProfessionID());
  192. } else {
  193. data.setProfessionID(UUID.randomUUID().toString());
  194. PcProfession proModel = new PcProfession();
  195. proModel.setProfessionID(data.getProfessionID());
  196. proModel.setParentProfessionID(proOther.getProfessionID());
  197. proModel.setProfessionName(data.getProfessionName());
  198. proModel.setStatus(Integer.parseInt("1"));
  199. proModel.setOrderNo(proOtherSonList.size() + 1);
  200. pcProfessionMapper.insert(proModel);
  201. }
  202. }
  203. }
  204. if (!isExist) {
  205. //添加
  206. dbData = new PcJobhunt();
  207. dbData.setJobHuntID(data.getJobHuntID());
  208. dbData.setJobUserID(data.getJobUserID());
  209. dbData.setProfessionID(data.getProfessionID());
  210. dbData.setWorkCode(data.getWorkCode());
  211. dbData.setWorkName(data.getWorkName());
  212. dbData.setAreaWork(data.getAreaWork());
  213. dbData.setInDate(data.getInDate());
  214. dbData.setWorkYear(data.getWorkYear());
  215. dbData.setJobHuntType(data.getJobHuntType());
  216. dbData.setJobUserType(data.getJobUserType());
  217. dbData.setMinSalary(data.getMinSalary());
  218. dbData.setMaxSalary(data.getMaxSalary());
  219. dbData.setOtherDemand(data.getOtherDemand());
  220. dbData.setCreateUserID(userId);
  221. dbData.setCreateTime(data.getCreateTime() == null ? new Date() : data.getCreateTime()); // 三目运算防止oracle同步数据的创建日期被重置
  222. dbData.setOracleTableID(data.getOracleTableID());
  223. result = pcJobhuntMapper.insert(dbData);
  224. } else {
  225. //修改
  226. dbData.setJobHuntID(data.jobHuntID);
  227. dbData.setJobUserID(data.jobUserID);
  228. dbData.setProfessionID(data.professionID);
  229. dbData.setWorkCode(data.workCode);
  230. dbData.setWorkName(data.workName);
  231. dbData.setAreaWork(data.areaWork);
  232. dbData.setInDate(data.inDate);
  233. dbData.setWorkYear(data.workYear);
  234. dbData.setJobHuntType(data.jobHuntType);
  235. dbData.setJobUserType(data.jobUserType);
  236. dbData.setMinSalary(data.minSalary);
  237. dbData.setMaxSalary(data.maxSalary);
  238. dbData.setOtherDemand(data.otherDemand);
  239. dbData.setModifyUserID(userId);
  240. dbData.setModifyTime(new Date());
  241. dbData.setOracleTableID(data.getOracleTableID());
  242. result = pcJobhuntMapper.updateByPrimaryKey(dbData);
  243. }
  244. return result;
  245. }
  246. @Override
  247. public List<JobHuntVo> importJobHunt(List<JobHuntVo> dataList, String userID) {
  248. if (dataList.size() <= 0)
  249. throw new BaseException("", "请添加导入数据!");
  250. //求职人员
  251. PcSiteUserExample siteUserExp = new PcSiteUserExample();
  252. siteUserExp.or().andUserIDEqualTo(userID);
  253. PcSiteUser curLoginSiteUser = pcSiteUserMapper.selectByExample(siteUserExp).stream().findFirst().orElse(null);
  254. List<PcJobuser> jobUserList = new ArrayList<>();
  255. if(curLoginSiteUser==null){
  256. throw new BaseException("", "未能查询到当前登录人的驿站信息!");
  257. }else{
  258. PcJobuserExample jobuserExample = new PcJobuserExample();
  259. jobuserExample.or().andNameIsNotNull().andSiteIDEqualTo(curLoginSiteUser.getSiteID());
  260. jobUserList = pcJobuserMapper.selectByExample(jobuserExample);
  261. }
  262. //岗位
  263. List<SysDictionaryItem> thirdLevelProfessionList = new ArrayList<>();
  264. PcProfessionExample professionExp = new PcProfessionExample();
  265. professionExp.or().andParentProfessionIDEqualTo("").andStatusEqualTo(1);
  266. var firstLevelData = pcProfessionMapper.selectByExample(professionExp);
  267. for (PcProfession curProfession : firstLevelData) {
  268. professionExp = new PcProfessionExample();
  269. professionExp.or().andParentProfessionIDEqualTo(curProfession.getProfessionID()).andStatusEqualTo(1);
  270. var secondLevelData = pcProfessionMapper.selectByExample(professionExp);
  271. for (PcProfession curParentProfession : secondLevelData) {
  272. professionExp = new PcProfessionExample();
  273. professionExp.or().andParentProfessionIDEqualTo(curParentProfession.getProfessionID()).andStatusEqualTo(1).andProfessionNameIsNotNull();
  274. var thirdLevelData = pcProfessionMapper.selectByExample(professionExp);
  275. for (PcProfession curItem : thirdLevelData) {
  276. SysDictionaryItem item = new SysDictionaryItem();
  277. item.setCode(curItem.getProfessionID());
  278. item.setName(curItem.getProfessionName());
  279. thirdLevelProfessionList.add(item);
  280. }
  281. }
  282. }
  283. //求职类型
  284. List<SysDictionaryItem> dicHuntTypeList = dictionaryService.getDictionaryItemList("JobHuntType");
  285. //人才类型
  286. List<SysDictionaryItem> dicUserTypeList = dictionaryService.getDictionaryItemList("JobUserType");
  287. List<JobHuntVo> resultList = new ArrayList<>();
  288. List<PcJobuser> finalJobUserList = jobUserList;
  289. dataList.forEach(item -> {
  290. String errorInfo = "";
  291. item.setJobHuntID(UUID.randomUUID().toString());
  292. if (stringUtils.IsNullOrEmpty(item.jobUserName))
  293. errorInfo += "请填写姓名!";
  294. else {
  295. item.jobUserID = finalJobUserList.stream().filter(it -> it.getName().equals(item.getJobUserName().trim()))
  296. .findFirst().orElse(new PcJobuser()).getJobuserID();
  297. if (item.jobUserID == null)
  298. errorInfo += "求职人员不存在!";
  299. }
  300. if (stringUtils.IsNullOrEmpty(item.jobHuntTypeStr))
  301. errorInfo += "请填写求职类型!";
  302. else {
  303. item.jobHuntType = dicHuntTypeList.stream().filter(it -> it.getName().equals(item.jobHuntTypeStr.trim()))
  304. .findFirst().orElse(new SysDictionaryItem()).getValue();
  305. if (item.jobHuntType == null || item.jobHuntType == 0)
  306. errorInfo += "输入求职类型不存在!";
  307. }
  308. if (stringUtils.IsNullOrEmpty(item.jobUserTypeStr))
  309. errorInfo += "请填写人才类型!";
  310. else {
  311. item.jobUserType = dicUserTypeList.stream().filter(it -> it.getName().equals(item.jobUserTypeStr.trim()))
  312. .findFirst().orElse(new SysDictionaryItem()).getValue();
  313. if (item.jobUserType == null || item.jobUserType == 0)
  314. errorInfo += "输入人才类型不存在!";
  315. }
  316. if (stringUtils.IsNullOrEmpty(String.valueOf(item.minSalary)) || item.minSalary == null)
  317. errorInfo += "请填写最低薪酬!";
  318. if (stringUtils.IsNullOrEmpty(String.valueOf(item.maxSalary)) || item.maxSalary == null)
  319. errorInfo += "请填写最高薪酬!";
  320. if (stringUtils.IsNullOrEmpty(item.professionName))
  321. errorInfo += "请填写求职岗位!";
  322. else {
  323. item.professionID = thirdLevelProfessionList.stream().filter(it -> it.getName().equals(item.getProfessionName().trim()))
  324. .findFirst().orElse(new SysDictionaryItem()).getCode();
  325. //if (item.professionID == null)
  326. // errorInfo += "求职岗位不存在!";
  327. }
  328. if (stringUtils.IsNullOrEmpty(item.areaWork))
  329. errorInfo += "请填写希望工作地区!";
  330. if (stringUtils.IsNullOrEmpty(String.valueOf(item.inDate)) || item.inDate == null)
  331. errorInfo += "请填写可到职日期!";
  332. if (stringUtils.IsNullOrEmpty(String.valueOf(item.workYear))||String.valueOf(item.workYear).equals("null"))
  333. item.setWorkYear(new BigDecimal(0));
  334. if (stringUtils.IsNullOrEmpty(errorInfo)) {
  335. resultList.add(item);
  336. } else {
  337. item.setErrorMessage(errorInfo);
  338. }
  339. });
  340. if (dataList.stream().filter(it -> !stringUtils.IsNullOrEmpty(it.errorMessage)).collect(Collectors.toList()).size() > 0)
  341. return dataList;
  342. resultList.forEach(item -> {
  343. save(item, userID);
  344. });
  345. return null;
  346. }
  347. }