PersonService.php 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: michaelwu
  5. * Date: 2019/07/09
  6. * Time: 11:22
  7. */
  8. namespace App\Services\Crm;
  9. use App\Exceptions\ResponseException;
  10. use Exception;
  11. use Illuminate\Support\Facades\Cache;
  12. use Illuminate\Support\Facades\DB;
  13. use App\Repositories\MemberRepository;
  14. use App\Repositories\MemberInfoRepository;
  15. use App\Repositories\ResumeRepository;
  16. use App\Repositories\ResumeEducationRepository;
  17. use App\Repositories\ResumeWorkRepository;
  18. use App\Repositories\ResumeTrainRepository;
  19. use App\Repositories\AuditReasonsRepository;
  20. use App\Models\Resume;
  21. use App\Models\AuditReason;
  22. use App\Models\Pms;
  23. use App\Models\SmsRule;
  24. use App\Services\Common\SmsService;
  25. use App\Validators\Rules\MobileRule;
  26. class PersonService
  27. {
  28. protected $memberRepository;
  29. protected $memberInfoRepository;
  30. protected $resumeRepository;
  31. protected $resumeEducationRepository;
  32. protected $resumeWorkRepository;
  33. protected $resumeTrainRepository;
  34. protected $auditReasonsRepository;
  35. protected $smsService;
  36. /**
  37. * PersonService constructor.
  38. */
  39. public function __construct(MemberRepository $memberRepository, MemberInfoRepository $memberInfoRepository, ResumeRepository $resumeRepository, ResumeEducationRepository $resumeEducationRepository, ResumeWorkRepository $resumeWorkRepository, ResumeTrainRepository $resumeTrainRepository, AuditReasonsRepository $auditReasonsRepository, SmsService $smsService)
  40. {
  41. $this->memberRepository = $memberRepository;
  42. $this->memberInfoRepository = $memberInfoRepository;
  43. $this->resumeRepository = $resumeRepository;
  44. $this->resumeEducationRepository = $resumeEducationRepository;
  45. $this->resumeWorkRepository = $resumeWorkRepository;
  46. $this->resumeTrainRepository = $resumeTrainRepository;
  47. $this->auditReasonsRepository = $auditReasonsRepository;
  48. $this->smsService = $smsService;
  49. }
  50. public function getDuration($list)
  51. {
  52. if ($list) {
  53. foreach ($list as $key => $value) {
  54. $start = $value['startyear'].'-'.$value['startmonth'];
  55. $end = $value['endyear'].'-'.$value['endmonth'];
  56. if ($value['todate']==1) {
  57. $end = date('Y-m');
  58. }
  59. $list[$key]['duration'] = ddate($start, $end);
  60. }
  61. }
  62. return $list;
  63. }
  64. public function totalWorkDuration($list)
  65. {
  66. $total_year = 0;
  67. $total_month = 0;
  68. $return = '';
  69. if ($list) {
  70. foreach ($list as $key => $value) {
  71. $current_duration = strpos($value['duration'], '年');
  72. if ($current_duration === false) {
  73. $total_month += intval($value['duration']);
  74. } else {
  75. $arr = explode("年", $value['duration']);
  76. $total_year += intval($arr[0]);
  77. $total_month += intval($arr[1]);
  78. }
  79. }
  80. }
  81. $add_year = intval($total_month/12);
  82. $total_year += $add_year;
  83. $total_month = intval($total_month%12);
  84. if ($total_year > 0) {
  85. $return .= $total_year.'年';
  86. }
  87. if ($total_month>0) {
  88. $return .= $total_month.'个月';
  89. }
  90. return $return;
  91. }
  92. public function getResume($resume_id)
  93. {
  94. //获取简历信息
  95. $where = ['id'=>$resume_id];
  96. $resume = $this->resumeRepository->getResumeInfo($where);
  97. if (!$resume) {
  98. return ['status'=>0,'msg'=>'简历不存在或已经被删除!'];
  99. }
  100. $memberInfo = $this->memberInfoRepository->getMemberInfo($resume->uid);
  101. $resume->education_cn = $memberInfo->education_cn; //学历
  102. $resume->experience_cn = $memberInfo->experience_cn; //工作经验
  103. $resume->sex_cn = $memberInfo->sex_cn;
  104. //教育经历
  105. $education = $this->resumeEducationRepository->getResumeEducationByResumeId($resume_id);
  106. $education = $this->getDuration($education);
  107. $resume->resume_education = $education;
  108. //获取工作信息
  109. $work = $this->resumeWorkRepository->getResumeWorkByResumeId($resume_id);
  110. $work = $this->getDuration($work);
  111. $resume->resume_work = $work;
  112. $resume->work_count = count($work);
  113. $work_duration = $this->totalWorkDuration($work); //工龄
  114. $resume->work_duration = $work_duration;
  115. //获取培训信息
  116. $train = $this->resumeTrainRepository->getResumeTrainByResumeId($resume_id);
  117. $train = $this->getDuration($train);
  118. $resume->resume_training = $train;
  119. $resume->addtime = strtotime($resume->created_at);
  120. $resume->refreshtime = strtotime($resume->updated_at);
  121. $resume->fullname_ = $resume->fullname;
  122. $resume->fullname = $memberInfo->realname;
  123. $resume->age = date("Y") - $memberInfo->birthday; //年龄
  124. $resume->height = $memberInfo->height;
  125. $resume->marriage_cn = $memberInfo->marriage_cn;
  126. $resume->telephone = $memberInfo->phone;
  127. $resume->email = $memberInfo->email;
  128. $resume->householdaddress = $memberInfo->householdaddress_cn;
  129. if ($resume->display==1) {
  130. $resume->display_cn = '公开';
  131. } else {
  132. $resume->display_cn = '不公开';
  133. }
  134. if ($resume->talent==1) {
  135. $resume->talent_cn = '高级';
  136. } else {
  137. $resume->talent_cn = '普通';
  138. }
  139. if($resume->audit=='2'){
  140. $resume->audit_cn = '已通过审核';
  141. }elseif($resume->audit=='1'){
  142. $resume->audit_cn = '正在审核中';
  143. }elseif($resume->audit=='0'){
  144. $resume->audit_cn = '审核未通过';
  145. }
  146. if ($memberInfo->images) {
  147. if ($memberInfo->display_images == 1) {
  148. $resume->photo_display_cn = '公开';
  149. } else {
  150. $resume->photo_display_cn = '不公开';
  151. }
  152. } else {
  153. $resume->photo_display_cn = '未上传照片';
  154. }
  155. if (!$resume->specialty) {
  156. $resume->specialty = '无';
  157. }
  158. return ['status'=>1,'msg'=>$resume];
  159. }
  160. //审核简历
  161. public function auditResume($id, $data)
  162. {
  163. $audit = array_has($data, 'audit')?$data['audit']:'';
  164. $remark = array_has($data, 'reason')?$data['reason']:'';
  165. $pms_notice = array_has($data, 'pms_notice')?$data['pms_notice']:0;
  166. $audit_username = array_has($data, 'audit_username')?$data['audit_username']:'CRM业务员';
  167. $arr = array_filter($id);
  168. if (empty($arr)) {
  169. return ['status'=>0, 'msg'=>'数据异常'];
  170. }
  171. $reus = $this->resumeRepository->getCrmResumes([], ['id'=>$arr]);
  172. $mobile = [];
  173. foreach ($reus as $res) {
  174. if (isset($res->members->mobile)) {
  175. if (validator_check($res->members->mobile, new MobileRule())) {
  176. $mobile[] = $res->members->mobile;
  177. }
  178. }
  179. }
  180. $mobile = array_unique($mobile);
  181. $sms_id = $audit ? 'sms_resumeallow' : 'sms_resumenotallow';
  182. $result = Resume::whereIn('id', $arr)->update(['audit'=>$audit]);
  183. $data=[];
  184. foreach ($arr as $k => $v) {
  185. $data[$k]['type'] = 1;
  186. $data[$k]['type_id'] = $v;
  187. $data[$k]['status'] = $audit;
  188. $data[$k]['reason'] = $remark;
  189. $data[$k]['audit_man'] = $audit_username;
  190. $data[$k]['created_at'] = date('Y-m-d H:i:s', time());
  191. $data[$k]['updated_at'] = date('Y-m-d H:i:s', time());
  192. }
  193. AuditReason::insert($data);
  194. if ($pms_notice) {
  195. if ($audit==0) {
  196. $stat='审核未通过';
  197. } elseif ($audit==2) {
  198. $stat = '审核通过';
  199. } else {
  200. $stat='等待审核';
  201. }
  202. $da = [];
  203. foreach ($reus as $k => $v) {
  204. $da[$k]['uid'] = $v['members']['id'];
  205. $da[$k]['username'] = $v['members']['username'];
  206. $da[$k]['resume_title'] = $v->title;
  207. }
  208. foreach ($da as $k => $v) {
  209. $ds[$k]['msgtype'] = 1;
  210. $ds[$k]['msgfromuid'] = 0;
  211. $ds[$k]['msgfrom'] = $audit_username;
  212. $ds[$k]['msgtoname'] = $v['username'] ? $v['username'] : 'admin';
  213. $ds[$k]['msgtouid'] = $v['uid'] ? $v['uid'] : 0;
  214. if ($v['resume_title']) {
  215. $resume_title = '('.$v['resume_title'].')';
  216. } else {
  217. $resume_title = '';
  218. }
  219. $ds[$k]['message'] = $remark ? '简历'.$resume_title.$stat.'<备注:'.$remark.'>' : '简历'.$resume_title.$stat;
  220. $ds[$k]['created_at'] = date('Y-m-d H:i:s', time());
  221. $ds[$k]['updated_at'] = date('Y-m-d H:i:s', time());
  222. }
  223. Pms::insert($ds);
  224. }
  225. if ($result) {
  226. event_search_update(Resume::class, (string)implode(',', $arr), 'update');
  227. $this->resumeSms($sms_id, $mobile);
  228. return ['status'=>1, 'msg'=>'审核成功'];
  229. } else {
  230. return ['status'=>0, 'msg'=>'审核失败'];
  231. }
  232. }
  233. public function resumeSms($sms_id, $mobile)
  234. {
  235. $SmsRule = SmsRule::where('alias', $sms_id)->first();
  236. if (isset($SmsRule->status) && !empty($SmsRule->status)) {
  237. if ($mobile) {
  238. foreach ($mobile as $mobiles) {
  239. $this->smsService->sendSms($mobiles, $sms_id, ['sitename'=>config('aix.system.site.site.site_name'),'sitedomain'=>config('aix.system.site.site.site_domain')]);
  240. }
  241. }
  242. }
  243. }
  244. }