RecommendMgtServiceImpl.java 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350
  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.RecommendMgtCQuery;
  7. import com.hz.employmentsite.model.*;
  8. import com.hz.employmentsite.services.service.WechatService;
  9. import com.hz.employmentsite.services.service.jobUserManager.JobUserServiceService;
  10. import com.hz.employmentsite.services.service.jobUserManager.RecommendMgtService;
  11. import com.hz.employmentsite.util.CalculateUtils;
  12. import com.hz.employmentsite.util.DesUtils;
  13. import com.hz.employmentsite.util.StringUtils;
  14. import com.hz.employmentsite.vo.jobUserManager.*;
  15. import lombok.extern.slf4j.Slf4j;
  16. import org.springframework.beans.factory.annotation.Autowired;
  17. import org.springframework.stereotype.Service;
  18. import java.util.*;
  19. @Service("RecommendMgtService")
  20. @Slf4j
  21. public class RecommendMgtServiceImpl implements RecommendMgtService {
  22. @Autowired
  23. private RecommendMgtCQuery recommendMgtCQuery;
  24. @Autowired
  25. private PcRecommendMgtMapper pcRecommendMgtMapper;
  26. @Autowired
  27. private StringUtils stringUtils;
  28. @Autowired
  29. private WechatService wechatService;
  30. @Autowired
  31. private PcSiteUserMapper pcSiteUserMapper;
  32. @Autowired
  33. private PcJobuserMapper pcJobuserMapper;
  34. @Autowired
  35. private PcJobhuntMapper pcJobhuntMapper;
  36. @Autowired
  37. private PcPostMapper pcPostMapper;
  38. @Autowired
  39. private DesUtils desUtils;
  40. @Autowired
  41. private CalculateUtils calculateUtils;
  42. @Autowired
  43. private JobUserServiceService jobUserServiceService;
  44. @Override
  45. public PageInfo<RecommendMgtVo> getList(Integer page, Integer rows, String name,
  46. String companyName, Integer recommendType, Integer entryState,
  47. String pushName, String qzProfessionName, String zpProfessionName,
  48. String siteID, String regionCode, Date startDate,
  49. Date endDate, String loginUserID) {
  50. List<String> curLoginUserSiteJobHuntIDs = new ArrayList<>();
  51. if (!stringUtils.IsNullOrEmpty(loginUserID)) {
  52. // 查询APP登录人员的驿站信息
  53. PcSiteUserExample siteUserExp = new PcSiteUserExample();
  54. siteUserExp.or().andUserIDEqualTo(loginUserID);
  55. // 获取到登录人员的所属驿站ID
  56. String curLoginUserSiteID = pcSiteUserMapper.selectByExample(siteUserExp).get(0).getSiteID();
  57. // 查询该驿站下录入的求职人员信息
  58. PcJobuserExample jobUserExp = new PcJobuserExample();
  59. jobUserExp.or().andSiteIDEqualTo(curLoginUserSiteID);
  60. // 获取到求职人员ID
  61. List<String> jobUserIDs = pcJobuserMapper.selectByExample(jobUserExp).stream().map(item -> item.getJobuserID()).toList();
  62. if (!jobUserIDs.isEmpty()) {
  63. // 查询求职人员的求职意向
  64. PcJobhuntExample jobHuntExample = new PcJobhuntExample();
  65. jobHuntExample.or().andJobUserIDIn(jobUserIDs);
  66. // 获取求职意向ID
  67. curLoginUserSiteJobHuntIDs = pcJobhuntMapper.selectByExample(jobHuntExample).stream().map(item -> item.getJobHuntID()).toList();
  68. }
  69. }
  70. PageHelper.startPage(page, rows);
  71. List<RecommendMgtVo> list;
  72. if (!stringUtils.IsNullOrEmpty(loginUserID) && curLoginUserSiteJobHuntIDs.isEmpty()) {
  73. // APP查询时,当前驿站没有录入求职人员与求职记录信息,返回空,防止curLoginUserSiteJobHuntIDs为空字符,查询语句不能触发
  74. list = new ArrayList<>();
  75. } else {
  76. list = recommendMgtCQuery.getRecommendMgtList(null, name, companyName, recommendType, entryState, pushName, qzProfessionName, zpProfessionName, siteID, regionCode, startDate, endDate, stringUtils.ListToInSql(curLoginUserSiteJobHuntIDs));
  77. }
  78. list.forEach(item->{
  79. item.setUserMobile(calculateUtils.maskMobile(desUtils.decoderText(item.getUserMobile())));
  80. });
  81. PageInfo<RecommendMgtVo> result = new PageInfo(list);
  82. return result;
  83. }
  84. @Override
  85. public RecommendMgtVo getListById(String recommendMgtID) {
  86. RecommendMgtVo data = recommendMgtCQuery.getRecommendMgtList(recommendMgtID, null, null, null, null, null, null, null, null, null, null, null, null).stream().findFirst().orElse(null);
  87. if(data==null){
  88. throw new BaseException("500","未查询到数据");
  89. }
  90. return data;
  91. }
  92. @Override
  93. public int addRecommend(List<RecommendMgtVo> list, String userID) {
  94. try {
  95. List<PcRecommendMgt> addList = new ArrayList<>();
  96. List<JobUserServiceVo> serviceList = new ArrayList<>();
  97. final int[] result = {1};
  98. list.forEach(item -> {
  99. PcPost curPost = pcPostMapper.selectByPrimaryKey(item.getPostID());
  100. if(curPost.getEndTime().before(new Date())||curPost.getRecordStatus().equals(0)){
  101. result[0] = -1;
  102. }else{
  103. PcRecommendMgt model = new PcRecommendMgt();
  104. model.setRecommendMgtID(item.getRecommendMgtID());
  105. model.setPostID(item.getPostID());
  106. model.setJobHuntID(item.getJobHuntID());
  107. model.setRecommendType(item.getRecommendType());
  108. model.setEntryState(Integer.parseInt("0"));
  109. model.setCreateUserID(userID);
  110. model.setCreateTime(new Date());
  111. addList.add(model);
  112. JobUserServiceVo service = new JobUserServiceVo();
  113. service.setJobUserID(item.jobuserId);
  114. service.setServiceContent("已推荐 " + item.companyName + " 的 " + item.zpProfessionName + " 岗位");
  115. service.setServiceTime(new Date());
  116. service.setServiceUserID(userID);
  117. serviceList.add(service);
  118. }
  119. });
  120. addList.forEach(x -> {
  121. pcRecommendMgtMapper.insert(x);
  122. });
  123. serviceList.forEach(item -> {
  124. jobUserServiceService.save(item, userID);
  125. });
  126. return result[0];
  127. } catch (Exception e) {
  128. e.printStackTrace();
  129. return 0;
  130. }
  131. }
  132. @Override
  133. public int setEntryState(String id, Integer state) {
  134. PcRecommendMgt data = pcRecommendMgtMapper.selectByPrimaryKey(id);
  135. if (data == null) {
  136. return -1;
  137. }
  138. data.setEntryState(state);
  139. if(state.equals(1)){
  140. var curJobHuntInfo = pcJobhuntMapper.selectByPrimaryKey(data.getJobHuntID());
  141. var curJobUserInfo = pcJobuserMapper.selectByPrimaryKey(curJobHuntInfo.getJobUserID());
  142. curJobUserInfo.setJobStatusID(1);
  143. pcJobuserMapper.updateByPrimaryKey(curJobUserInfo);
  144. }
  145. return pcRecommendMgtMapper.updateByPrimaryKey(data);
  146. }
  147. @Override
  148. public int saveRemark(String id, String remark, String userId) {
  149. PcRecommendMgt data = pcRecommendMgtMapper.selectByPrimaryKey(id);
  150. if (data == null) {
  151. return -1;
  152. }
  153. data.setRemark(remark);
  154. data.setModifyTime(new Date());
  155. data.setModifyUserID(userId);
  156. return pcRecommendMgtMapper.updateByPrimaryKey(data);
  157. }
  158. @Override
  159. public PageInfo<RecommendCompanyPostVo> getRecommendCompanyPostList(Integer page, Integer rows, String jobHuntID, String professionID,
  160. String companyName,String inviteProfessionName, Integer type, String parentProfessionID, Integer cultureRank,
  161. String workYear,Integer minSalary,Integer maxSalary) {
  162. PageHelper.startPage(page, rows);
  163. List<RecommendCompanyPostVo> list = recommendMgtCQuery.getRecommendCompanyPostList(jobHuntID, professionID, companyName, inviteProfessionName, type,parentProfessionID,cultureRank,workYear,minSalary,maxSalary);
  164. list.forEach(x -> {
  165. if (stringUtils.IsNullOrEmpty(x.recommendMgtID)) {
  166. x.recommendMgtID = UUID.randomUUID().toString();
  167. }
  168. });
  169. PageInfo<RecommendCompanyPostVo> result = new PageInfo(list);
  170. return result;
  171. }
  172. @Override
  173. public PageInfo<RecommendJobVo> getRecommendJobList(Integer page, Integer rows, String postID, String professionID,String huntProfessionName,
  174. String userName, Integer type, Integer cultureRank, Integer keyPersonType, String parentProfessionID,
  175. Integer workYear,String regionCode,String siteID,Integer minSalary,Integer maxSalary) {
  176. PageHelper.startPage(page, rows);
  177. List<String> recommendedJobHuntIDList = new ArrayList<>();
  178. PcRecommendMgtExample recommendMgtExp = new PcRecommendMgtExample();
  179. recommendMgtExp.or().andPostIDEqualTo(postID);
  180. var recommendedList = pcRecommendMgtMapper.selectByExample(recommendMgtExp);
  181. if( recommendedList.size()>0 && type.equals(0)){
  182. for(PcRecommendMgt curRecommended:recommendedList){
  183. recommendedJobHuntIDList.add(curRecommended.getJobHuntID());
  184. }
  185. }
  186. List<RecommendJobVo> list = recommendMgtCQuery.getRecommendJobList(postID, professionID, huntProfessionName, userName, type, cultureRank, keyPersonType, parentProfessionID, workYear,regionCode,siteID, minSalary, maxSalary,stringUtils.ListToInSql(recommendedJobHuntIDList));
  187. List<RecommendJobVo> resultList = new ArrayList<>();
  188. list.forEach(x -> {
  189. if (stringUtils.IsNullOrEmpty(x.getRecommendMgtID())) {
  190. x.setRecommendMgtID(UUID.randomUUID().toString());
  191. }
  192. x.setUserMobile(calculateUtils.maskMobile(desUtils.decoderText(x.getUserMobile())));
  193. //过滤已入职的求职意向数据
  194. PcRecommendMgtExample curRecommendMgtExp = new PcRecommendMgtExample();
  195. curRecommendMgtExp.or().andJobHuntIDEqualTo(x.getJobhuntID());
  196. var curRecommendMgtInfo = pcRecommendMgtMapper.selectByExample(curRecommendMgtExp).stream().findFirst().orElse(null);
  197. if( curRecommendMgtInfo ==null || curRecommendMgtInfo.getEntryState().equals(0)){
  198. resultList.add(x);
  199. }
  200. });
  201. PageInfo<RecommendJobVo> result = new PageInfo(resultList);
  202. return result;
  203. }
  204. @Override
  205. public List<ProfessionLevel> getProfessionLevelList() {
  206. return recommendMgtCQuery.getProfessionLevelList();
  207. }
  208. @Override
  209. public List<WorkCategoryLevel> getWorkCategoryLevelList() {
  210. return recommendMgtCQuery.getWorkCategoryLevelList();
  211. }
  212. @Override
  213. public PageInfo<ProfessionLevel> getProfessionLikeList(Integer page, Integer rows,String professionName) {
  214. PageHelper.startPage(page, rows);
  215. List<ProfessionLevel> list = recommendMgtCQuery.getProfessionLikeList(professionName);
  216. PageInfo<ProfessionLevel> result = new PageInfo(list);
  217. return result;
  218. }
  219. @Override
  220. public PageInfo<ProfessionLevel> getCompanyProfessionLikeList(Integer page, Integer rows,String professionName,String companyName) {
  221. PageHelper.startPage(page, rows);
  222. List<ProfessionLevel> list = recommendMgtCQuery.getCompanyProfessionLikeList(professionName,companyName);
  223. List<ProfessionLevel> finalList = new ArrayList<>();
  224. HashMap<String,String> nameCodeList = new HashMap<>();
  225. list.forEach(item->{
  226. if(!nameCodeList.containsValue(item.postName)){
  227. nameCodeList.put("postName",item.postName);
  228. finalList.add(item);
  229. }
  230. });
  231. PageInfo<ProfessionLevel> result = new PageInfo(finalList);
  232. return result;
  233. }
  234. @Override
  235. public List<OccupationCategory> getOccupationCategoryList() {return recommendMgtCQuery.getOccupationCategoryList();}
  236. @Override
  237. public List<IndustryLevel> getAllIndustryList() {return recommendMgtCQuery.getAllIndustryList();}
  238. @Override
  239. public void sendWxMessage() {
  240. sendUser();
  241. sendCompany();
  242. }
  243. private void sendUser() {
  244. List<HashMap<String, Object>> toUserList = recommendMgtCQuery.getCompanypostToUsermessageList();
  245. WxMessagetempsetting toUserTemp = wechatService.getWxMessagetempsettingList().stream().filter(it -> it.getTemplateNo().equals("toUser")).findFirst().orElse(null);
  246. if (toUserTemp != null) {
  247. List<WxMessagetempsettingField> fieldList = wechatService.getWxMessagetempFieldList(toUserTemp.getTemplateNo());
  248. if (fieldList.size() > 0) {
  249. toUserList.forEach(item -> {
  250. try {
  251. String recommendmgtid = item.get("recommendmgtid").toString();
  252. PcRecommendMgt pcRecommendMgt = pcRecommendMgtMapper.selectByPrimaryKey(recommendmgtid);
  253. Map<String, String> data = new HashMap<>();
  254. fieldList.forEach(field -> {
  255. data.put(field.getWxFieldName(), item.get(field.getSysFieldName()).toString());
  256. });
  257. boolean result = wechatService.sendMsg(item.get("userOpenId").toString(), recommendmgtid, toUserTemp.getUrl() + "?recommendmgtid=" + recommendmgtid, toUserTemp.getTemplateId(), data);
  258. if (result) {
  259. pcRecommendMgt.setIsSendUser(true);
  260. pcRecommendMgtMapper.updateByPrimaryKey(pcRecommendMgt);
  261. }
  262. } catch (Exception e) {
  263. log.error("sendUser:微信消息推送失败," + e.getMessage());
  264. }
  265. });
  266. }
  267. }
  268. }
  269. private void sendCompany() {
  270. List<HashMap<String, Object>> toCompanyList = recommendMgtCQuery.getUserhuntpostToCompanymessageList();
  271. WxMessagetempsetting toCompanyTemp = wechatService.getWxMessagetempsettingList().stream().filter(it -> it.getTemplateNo().equals("toCompany")).findFirst().orElse(null);
  272. if (toCompanyTemp != null) {
  273. List<WxMessagetempsettingField> fieldList = wechatService.getWxMessagetempFieldList(toCompanyTemp.getTemplateNo());
  274. if (fieldList.size() > 0) {
  275. toCompanyList.forEach(item -> {
  276. try {
  277. String recommendmgtid = item.get("recommendmgtid").toString();
  278. PcRecommendMgt pcRecommendMgt = pcRecommendMgtMapper.selectByPrimaryKey(recommendmgtid);
  279. Map<String, String> data = new HashMap<>();
  280. fieldList.forEach(field -> {
  281. data.put(field.getWxFieldName(), item.get(field.getSysFieldName()).toString());
  282. });
  283. boolean result = wechatService.sendMsg(item.get("companyOpenId").toString(), recommendmgtid, toCompanyTemp.getUrl() + "?recommendmgtid=" + recommendmgtid, toCompanyTemp.getTemplateId(), data);
  284. if (result) {
  285. pcRecommendMgt.setIsSendCompany(true);
  286. pcRecommendMgtMapper.updateByPrimaryKey(pcRecommendMgt);
  287. }
  288. } catch (Exception e) {
  289. log.error("sendCompany:微信消息推送失败," + e.getMessage());
  290. }
  291. });
  292. }
  293. }
  294. }
  295. }