Selaa lähdekoodia

feat: 求职人员服务跟进记录

zhangying 8 kuukautta sitten
vanhempi
commit
1ffe571b5c
20 muutettua tiedostoa jossa 1822 lisäystä ja 12 poistoa
  1. 55 0
      src/main/java/com/hz/employmentsite/controller/jobUserManager/JobUserServiceController.java
  2. 1 1
      src/main/java/com/hz/employmentsite/controller/jobUserManager/RecommendMgtController.java
  3. 30 0
      src/main/java/com/hz/employmentsite/mapper/PcJobuserServiceMapper.java
  4. 10 0
      src/main/java/com/hz/employmentsite/mapper/cquery/JobUserServiceCQuery.java
  5. 95 0
      src/main/java/com/hz/employmentsite/model/PcJobuserService.java
  6. 800 0
      src/main/java/com/hz/employmentsite/model/PcJobuserServiceExample.java
  7. 18 0
      src/main/java/com/hz/employmentsite/services/impl/jobUserManager/JobUserServiceImpl.java
  8. 81 0
      src/main/java/com/hz/employmentsite/services/impl/jobUserManager/JobUserServiceServiceImpl.java
  9. 16 2
      src/main/java/com/hz/employmentsite/services/impl/jobUserManager/RecommendMgtServiceImpl.java
  10. 17 0
      src/main/java/com/hz/employmentsite/services/service/jobUserManager/JobUserServiceService.java
  11. 1 2
      src/main/java/com/hz/employmentsite/services/service/jobUserManager/RecommendMgtService.java
  12. 34 0
      src/main/java/com/hz/employmentsite/vo/jobUserManager/JobUserServiceVo.java
  13. 276 0
      src/main/resources/mapping/PcJobuserServiceMapper.xml
  14. 24 0
      src/main/resources/mapping/cquery/JobUserServiceCQuery.xml
  15. 52 0
      vue/src/api/jobUserManager/jobuser/jobUserService.ts
  16. 1 1
      vue/src/views/jobUserManager/jobhunt/index.vue
  17. 14 3
      vue/src/views/jobUserManager/jobhunt/recommend.vue
  18. 267 0
      vue/src/views/jobUserManager/jobuser/ServiceTableCom.vue
  19. 16 3
      vue/src/views/jobUserManager/jobuser/index.vue
  20. 14 0
      vue/src/views/jobUserManager/recommendMgt/remarkAdd.vue

+ 55 - 0
src/main/java/com/hz/employmentsite/controller/jobUserManager/JobUserServiceController.java

@@ -0,0 +1,55 @@
+package com.hz.employmentsite.controller.jobUserManager;
+
+import com.github.pagehelper.PageInfo;
+import com.hz.employmentsite.filter.exception.BaseErrorEnum;
+import com.hz.employmentsite.filter.exception.BaseException;
+import com.hz.employmentsite.filter.exception.BaseResponse;
+import com.hz.employmentsite.filter.exception.RespGenerstor;
+import com.hz.employmentsite.services.service.AccountService;
+import com.hz.employmentsite.services.service.jobUserManager.JobUserServiceService;
+import com.hz.employmentsite.vo.jobUserManager.JobUserServiceVo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("/api/jobUserServiceRecords")
+public class JobUserServiceController {
+    @Autowired
+    private JobUserServiceService jobUserServiceService;
+
+    @Autowired
+    private AccountService accountService;
+
+    @ResponseBody
+    @GetMapping("/getList")
+    public BaseResponse getList(@RequestParam int pageIndex,
+                                @RequestParam int pageSize,
+                                @RequestParam String jobUserID){
+        PageInfo<JobUserServiceVo> result = jobUserServiceService.getList(pageIndex, pageSize, jobUserID, null);
+        return RespGenerstor.success(result);
+    }
+
+    @GetMapping("/getByID")
+    public BaseResponse<JobUserServiceVo> getByID(@RequestParam(required = false) String serviceID) {
+        JobUserServiceVo result = jobUserServiceService.getById(serviceID);
+        return RespGenerstor.success(result);
+    }
+
+    @PostMapping("/save")
+    public BaseResponse<Integer> save(@RequestBody JobUserServiceVo data) {
+        int result = jobUserServiceService.save(data, accountService.getLoginUserID());
+        return RespGenerstor.success(result);
+    }
+
+    @ResponseBody
+    @PostMapping("/delete")
+    public BaseResponse<Integer> delete(@RequestBody List<String> idList) {
+        var result = jobUserServiceService.delete(idList);
+        if (result <= 0) {
+            throw new BaseException(BaseErrorEnum.DELETE_NOT_DATA_ERROR);
+        }
+        return RespGenerstor.success(result);
+    }
+}

+ 1 - 1
src/main/java/com/hz/employmentsite/controller/jobUserManager/RecommendMgtController.java

@@ -54,7 +54,7 @@ public class RecommendMgtController {
     }
 
     @PostMapping("/addRecommend")
-    public BaseResponse addRecommend(@RequestBody List<PcRecommendMgt> data) {
+    public BaseResponse addRecommend(@RequestBody List<RecommendMgtVo> data) {
         var result = recommendMgtService.addRecommend(data, accountService.getLoginUserID());
         return RespGenerstor.success(result);
     }

+ 30 - 0
src/main/java/com/hz/employmentsite/mapper/PcJobuserServiceMapper.java

@@ -0,0 +1,30 @@
+package com.hz.employmentsite.mapper;
+
+import com.hz.employmentsite.model.PcJobuserService;
+import com.hz.employmentsite.model.PcJobuserServiceExample;
+import java.util.List;
+import org.apache.ibatis.annotations.Param;
+
+public interface PcJobuserServiceMapper {
+    long countByExample(PcJobuserServiceExample example);
+
+    int deleteByExample(PcJobuserServiceExample example);
+
+    int deleteByPrimaryKey(String serviceID);
+
+    int insert(PcJobuserService row);
+
+    int insertSelective(PcJobuserService row);
+
+    List<PcJobuserService> selectByExample(PcJobuserServiceExample example);
+
+    PcJobuserService selectByPrimaryKey(String serviceID);
+
+    int updateByExampleSelective(@Param("row") PcJobuserService row, @Param("example") PcJobuserServiceExample example);
+
+    int updateByExample(@Param("row") PcJobuserService row, @Param("example") PcJobuserServiceExample example);
+
+    int updateByPrimaryKeySelective(PcJobuserService row);
+
+    int updateByPrimaryKey(PcJobuserService row);
+}

+ 10 - 0
src/main/java/com/hz/employmentsite/mapper/cquery/JobUserServiceCQuery.java

@@ -0,0 +1,10 @@
+package com.hz.employmentsite.mapper.cquery;
+
+import com.hz.employmentsite.vo.jobUserManager.JobUserServiceVo;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface JobUserServiceCQuery {
+    List<JobUserServiceVo> getList(@Param("jobUserID") String jobUserID, @Param("serviceID") String serviceID);
+}

+ 95 - 0
src/main/java/com/hz/employmentsite/model/PcJobuserService.java

@@ -0,0 +1,95 @@
+package com.hz.employmentsite.model;
+
+import java.util.Date;
+
+public class PcJobuserService {
+    private String serviceID;
+
+    private String jobUserID;
+
+    private String serviceContent;
+
+    private Date serviceTime;
+
+    private String serviceUserID;
+
+    private String createUserID;
+
+    private Date createTime;
+
+    private String modifyUserID;
+
+    private Date modifyTime;
+
+    public String getServiceID() {
+        return serviceID;
+    }
+
+    public void setServiceID(String serviceID) {
+        this.serviceID = serviceID == null ? null : serviceID.trim();
+    }
+
+    public String getJobUserID() {
+        return jobUserID;
+    }
+
+    public void setJobUserID(String jobUserID) {
+        this.jobUserID = jobUserID == null ? null : jobUserID.trim();
+    }
+
+    public String getServiceContent() {
+        return serviceContent;
+    }
+
+    public void setServiceContent(String serviceContent) {
+        this.serviceContent = serviceContent == null ? null : serviceContent.trim();
+    }
+
+    public Date getServiceTime() {
+        return serviceTime;
+    }
+
+    public void setServiceTime(Date serviceTime) {
+        this.serviceTime = serviceTime;
+    }
+
+    public String getServiceUserID() {
+        return serviceUserID;
+    }
+
+    public void setServiceUserID(String serviceUserID) {
+        this.serviceUserID = serviceUserID == null ? null : serviceUserID.trim();
+    }
+
+    public String getCreateUserID() {
+        return createUserID;
+    }
+
+    public void setCreateUserID(String createUserID) {
+        this.createUserID = createUserID == null ? null : createUserID.trim();
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public String getModifyUserID() {
+        return modifyUserID;
+    }
+
+    public void setModifyUserID(String modifyUserID) {
+        this.modifyUserID = modifyUserID == null ? null : modifyUserID.trim();
+    }
+
+    public Date getModifyTime() {
+        return modifyTime;
+    }
+
+    public void setModifyTime(Date modifyTime) {
+        this.modifyTime = modifyTime;
+    }
+}

+ 800 - 0
src/main/java/com/hz/employmentsite/model/PcJobuserServiceExample.java

@@ -0,0 +1,800 @@
+package com.hz.employmentsite.model;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+public class PcJobuserServiceExample {
+    protected String orderByClause;
+
+    protected boolean distinct;
+
+    protected List<Criteria> oredCriteria;
+
+    public PcJobuserServiceExample() {
+        oredCriteria = new ArrayList<>();
+    }
+
+    public void setOrderByClause(String orderByClause) {
+        this.orderByClause = orderByClause;
+    }
+
+    public String getOrderByClause() {
+        return orderByClause;
+    }
+
+    public void setDistinct(boolean distinct) {
+        this.distinct = distinct;
+    }
+
+    public boolean isDistinct() {
+        return distinct;
+    }
+
+    public List<Criteria> getOredCriteria() {
+        return oredCriteria;
+    }
+
+    public void or(Criteria criteria) {
+        oredCriteria.add(criteria);
+    }
+
+    public Criteria or() {
+        Criteria criteria = createCriteriaInternal();
+        oredCriteria.add(criteria);
+        return criteria;
+    }
+
+    public Criteria createCriteria() {
+        Criteria criteria = createCriteriaInternal();
+        if (oredCriteria.size() == 0) {
+            oredCriteria.add(criteria);
+        }
+        return criteria;
+    }
+
+    protected Criteria createCriteriaInternal() {
+        Criteria criteria = new Criteria();
+        return criteria;
+    }
+
+    public void clear() {
+        oredCriteria.clear();
+        orderByClause = null;
+        distinct = false;
+    }
+
+    protected abstract static class GeneratedCriteria {
+        protected List<Criterion> criteria;
+
+        protected GeneratedCriteria() {
+            super();
+            criteria = new ArrayList<>();
+        }
+
+        public boolean isValid() {
+            return criteria.size() > 0;
+        }
+
+        public List<Criterion> getAllCriteria() {
+            return criteria;
+        }
+
+        public List<Criterion> getCriteria() {
+            return criteria;
+        }
+
+        protected void addCriterion(String condition) {
+            if (condition == null) {
+                throw new RuntimeException("Value for condition cannot be null");
+            }
+            criteria.add(new Criterion(condition));
+        }
+
+        protected void addCriterion(String condition, Object value, String property) {
+            if (value == null) {
+                throw new RuntimeException("Value for " + property + " cannot be null");
+            }
+            criteria.add(new Criterion(condition, value));
+        }
+
+        protected void addCriterion(String condition, Object value1, Object value2, String property) {
+            if (value1 == null || value2 == null) {
+                throw new RuntimeException("Between values for " + property + " cannot be null");
+            }
+            criteria.add(new Criterion(condition, value1, value2));
+        }
+
+        public Criteria andServiceIDIsNull() {
+            addCriterion("ServiceID is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andServiceIDIsNotNull() {
+            addCriterion("ServiceID is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andServiceIDEqualTo(String value) {
+            addCriterion("ServiceID =", value, "serviceID");
+            return (Criteria) this;
+        }
+
+        public Criteria andServiceIDNotEqualTo(String value) {
+            addCriterion("ServiceID <>", value, "serviceID");
+            return (Criteria) this;
+        }
+
+        public Criteria andServiceIDGreaterThan(String value) {
+            addCriterion("ServiceID >", value, "serviceID");
+            return (Criteria) this;
+        }
+
+        public Criteria andServiceIDGreaterThanOrEqualTo(String value) {
+            addCriterion("ServiceID >=", value, "serviceID");
+            return (Criteria) this;
+        }
+
+        public Criteria andServiceIDLessThan(String value) {
+            addCriterion("ServiceID <", value, "serviceID");
+            return (Criteria) this;
+        }
+
+        public Criteria andServiceIDLessThanOrEqualTo(String value) {
+            addCriterion("ServiceID <=", value, "serviceID");
+            return (Criteria) this;
+        }
+
+        public Criteria andServiceIDLike(String value) {
+            addCriterion("ServiceID like", value, "serviceID");
+            return (Criteria) this;
+        }
+
+        public Criteria andServiceIDNotLike(String value) {
+            addCriterion("ServiceID not like", value, "serviceID");
+            return (Criteria) this;
+        }
+
+        public Criteria andServiceIDIn(List<String> values) {
+            addCriterion("ServiceID in", values, "serviceID");
+            return (Criteria) this;
+        }
+
+        public Criteria andServiceIDNotIn(List<String> values) {
+            addCriterion("ServiceID not in", values, "serviceID");
+            return (Criteria) this;
+        }
+
+        public Criteria andServiceIDBetween(String value1, String value2) {
+            addCriterion("ServiceID between", value1, value2, "serviceID");
+            return (Criteria) this;
+        }
+
+        public Criteria andServiceIDNotBetween(String value1, String value2) {
+            addCriterion("ServiceID not between", value1, value2, "serviceID");
+            return (Criteria) this;
+        }
+
+        public Criteria andJobUserIDIsNull() {
+            addCriterion("JobUserID is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andJobUserIDIsNotNull() {
+            addCriterion("JobUserID is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andJobUserIDEqualTo(String value) {
+            addCriterion("JobUserID =", value, "jobUserID");
+            return (Criteria) this;
+        }
+
+        public Criteria andJobUserIDNotEqualTo(String value) {
+            addCriterion("JobUserID <>", value, "jobUserID");
+            return (Criteria) this;
+        }
+
+        public Criteria andJobUserIDGreaterThan(String value) {
+            addCriterion("JobUserID >", value, "jobUserID");
+            return (Criteria) this;
+        }
+
+        public Criteria andJobUserIDGreaterThanOrEqualTo(String value) {
+            addCriterion("JobUserID >=", value, "jobUserID");
+            return (Criteria) this;
+        }
+
+        public Criteria andJobUserIDLessThan(String value) {
+            addCriterion("JobUserID <", value, "jobUserID");
+            return (Criteria) this;
+        }
+
+        public Criteria andJobUserIDLessThanOrEqualTo(String value) {
+            addCriterion("JobUserID <=", value, "jobUserID");
+            return (Criteria) this;
+        }
+
+        public Criteria andJobUserIDLike(String value) {
+            addCriterion("JobUserID like", value, "jobUserID");
+            return (Criteria) this;
+        }
+
+        public Criteria andJobUserIDNotLike(String value) {
+            addCriterion("JobUserID not like", value, "jobUserID");
+            return (Criteria) this;
+        }
+
+        public Criteria andJobUserIDIn(List<String> values) {
+            addCriterion("JobUserID in", values, "jobUserID");
+            return (Criteria) this;
+        }
+
+        public Criteria andJobUserIDNotIn(List<String> values) {
+            addCriterion("JobUserID not in", values, "jobUserID");
+            return (Criteria) this;
+        }
+
+        public Criteria andJobUserIDBetween(String value1, String value2) {
+            addCriterion("JobUserID between", value1, value2, "jobUserID");
+            return (Criteria) this;
+        }
+
+        public Criteria andJobUserIDNotBetween(String value1, String value2) {
+            addCriterion("JobUserID not between", value1, value2, "jobUserID");
+            return (Criteria) this;
+        }
+
+        public Criteria andServiceContentIsNull() {
+            addCriterion("ServiceContent is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andServiceContentIsNotNull() {
+            addCriterion("ServiceContent is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andServiceContentEqualTo(String value) {
+            addCriterion("ServiceContent =", value, "serviceContent");
+            return (Criteria) this;
+        }
+
+        public Criteria andServiceContentNotEqualTo(String value) {
+            addCriterion("ServiceContent <>", value, "serviceContent");
+            return (Criteria) this;
+        }
+
+        public Criteria andServiceContentGreaterThan(String value) {
+            addCriterion("ServiceContent >", value, "serviceContent");
+            return (Criteria) this;
+        }
+
+        public Criteria andServiceContentGreaterThanOrEqualTo(String value) {
+            addCriterion("ServiceContent >=", value, "serviceContent");
+            return (Criteria) this;
+        }
+
+        public Criteria andServiceContentLessThan(String value) {
+            addCriterion("ServiceContent <", value, "serviceContent");
+            return (Criteria) this;
+        }
+
+        public Criteria andServiceContentLessThanOrEqualTo(String value) {
+            addCriterion("ServiceContent <=", value, "serviceContent");
+            return (Criteria) this;
+        }
+
+        public Criteria andServiceContentLike(String value) {
+            addCriterion("ServiceContent like", value, "serviceContent");
+            return (Criteria) this;
+        }
+
+        public Criteria andServiceContentNotLike(String value) {
+            addCriterion("ServiceContent not like", value, "serviceContent");
+            return (Criteria) this;
+        }
+
+        public Criteria andServiceContentIn(List<String> values) {
+            addCriterion("ServiceContent in", values, "serviceContent");
+            return (Criteria) this;
+        }
+
+        public Criteria andServiceContentNotIn(List<String> values) {
+            addCriterion("ServiceContent not in", values, "serviceContent");
+            return (Criteria) this;
+        }
+
+        public Criteria andServiceContentBetween(String value1, String value2) {
+            addCriterion("ServiceContent between", value1, value2, "serviceContent");
+            return (Criteria) this;
+        }
+
+        public Criteria andServiceContentNotBetween(String value1, String value2) {
+            addCriterion("ServiceContent not between", value1, value2, "serviceContent");
+            return (Criteria) this;
+        }
+
+        public Criteria andServiceTimeIsNull() {
+            addCriterion("ServiceTime is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andServiceTimeIsNotNull() {
+            addCriterion("ServiceTime is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andServiceTimeEqualTo(Date value) {
+            addCriterion("ServiceTime =", value, "serviceTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andServiceTimeNotEqualTo(Date value) {
+            addCriterion("ServiceTime <>", value, "serviceTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andServiceTimeGreaterThan(Date value) {
+            addCriterion("ServiceTime >", value, "serviceTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andServiceTimeGreaterThanOrEqualTo(Date value) {
+            addCriterion("ServiceTime >=", value, "serviceTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andServiceTimeLessThan(Date value) {
+            addCriterion("ServiceTime <", value, "serviceTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andServiceTimeLessThanOrEqualTo(Date value) {
+            addCriterion("ServiceTime <=", value, "serviceTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andServiceTimeIn(List<Date> values) {
+            addCriterion("ServiceTime in", values, "serviceTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andServiceTimeNotIn(List<Date> values) {
+            addCriterion("ServiceTime not in", values, "serviceTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andServiceTimeBetween(Date value1, Date value2) {
+            addCriterion("ServiceTime between", value1, value2, "serviceTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andServiceTimeNotBetween(Date value1, Date value2) {
+            addCriterion("ServiceTime not between", value1, value2, "serviceTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andServiceUserIDIsNull() {
+            addCriterion("ServiceUserID is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andServiceUserIDIsNotNull() {
+            addCriterion("ServiceUserID is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andServiceUserIDEqualTo(String value) {
+            addCriterion("ServiceUserID =", value, "serviceUserID");
+            return (Criteria) this;
+        }
+
+        public Criteria andServiceUserIDNotEqualTo(String value) {
+            addCriterion("ServiceUserID <>", value, "serviceUserID");
+            return (Criteria) this;
+        }
+
+        public Criteria andServiceUserIDGreaterThan(String value) {
+            addCriterion("ServiceUserID >", value, "serviceUserID");
+            return (Criteria) this;
+        }
+
+        public Criteria andServiceUserIDGreaterThanOrEqualTo(String value) {
+            addCriterion("ServiceUserID >=", value, "serviceUserID");
+            return (Criteria) this;
+        }
+
+        public Criteria andServiceUserIDLessThan(String value) {
+            addCriterion("ServiceUserID <", value, "serviceUserID");
+            return (Criteria) this;
+        }
+
+        public Criteria andServiceUserIDLessThanOrEqualTo(String value) {
+            addCriterion("ServiceUserID <=", value, "serviceUserID");
+            return (Criteria) this;
+        }
+
+        public Criteria andServiceUserIDLike(String value) {
+            addCriterion("ServiceUserID like", value, "serviceUserID");
+            return (Criteria) this;
+        }
+
+        public Criteria andServiceUserIDNotLike(String value) {
+            addCriterion("ServiceUserID not like", value, "serviceUserID");
+            return (Criteria) this;
+        }
+
+        public Criteria andServiceUserIDIn(List<String> values) {
+            addCriterion("ServiceUserID in", values, "serviceUserID");
+            return (Criteria) this;
+        }
+
+        public Criteria andServiceUserIDNotIn(List<String> values) {
+            addCriterion("ServiceUserID not in", values, "serviceUserID");
+            return (Criteria) this;
+        }
+
+        public Criteria andServiceUserIDBetween(String value1, String value2) {
+            addCriterion("ServiceUserID between", value1, value2, "serviceUserID");
+            return (Criteria) this;
+        }
+
+        public Criteria andServiceUserIDNotBetween(String value1, String value2) {
+            addCriterion("ServiceUserID not between", value1, value2, "serviceUserID");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateUserIDIsNull() {
+            addCriterion("CreateUserID is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateUserIDIsNotNull() {
+            addCriterion("CreateUserID is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateUserIDEqualTo(String value) {
+            addCriterion("CreateUserID =", value, "createUserID");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateUserIDNotEqualTo(String value) {
+            addCriterion("CreateUserID <>", value, "createUserID");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateUserIDGreaterThan(String value) {
+            addCriterion("CreateUserID >", value, "createUserID");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateUserIDGreaterThanOrEqualTo(String value) {
+            addCriterion("CreateUserID >=", value, "createUserID");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateUserIDLessThan(String value) {
+            addCriterion("CreateUserID <", value, "createUserID");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateUserIDLessThanOrEqualTo(String value) {
+            addCriterion("CreateUserID <=", value, "createUserID");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateUserIDLike(String value) {
+            addCriterion("CreateUserID like", value, "createUserID");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateUserIDNotLike(String value) {
+            addCriterion("CreateUserID not like", value, "createUserID");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateUserIDIn(List<String> values) {
+            addCriterion("CreateUserID in", values, "createUserID");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateUserIDNotIn(List<String> values) {
+            addCriterion("CreateUserID not in", values, "createUserID");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateUserIDBetween(String value1, String value2) {
+            addCriterion("CreateUserID between", value1, value2, "createUserID");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateUserIDNotBetween(String value1, String value2) {
+            addCriterion("CreateUserID not between", value1, value2, "createUserID");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeIsNull() {
+            addCriterion("CreateTime is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeIsNotNull() {
+            addCriterion("CreateTime is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeEqualTo(Date value) {
+            addCriterion("CreateTime =", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeNotEqualTo(Date value) {
+            addCriterion("CreateTime <>", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeGreaterThan(Date value) {
+            addCriterion("CreateTime >", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeGreaterThanOrEqualTo(Date value) {
+            addCriterion("CreateTime >=", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeLessThan(Date value) {
+            addCriterion("CreateTime <", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeLessThanOrEqualTo(Date value) {
+            addCriterion("CreateTime <=", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeIn(List<Date> values) {
+            addCriterion("CreateTime in", values, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeNotIn(List<Date> values) {
+            addCriterion("CreateTime not in", values, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeBetween(Date value1, Date value2) {
+            addCriterion("CreateTime between", value1, value2, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeNotBetween(Date value1, Date value2) {
+            addCriterion("CreateTime not between", value1, value2, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andModifyUserIDIsNull() {
+            addCriterion("ModifyUserID is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andModifyUserIDIsNotNull() {
+            addCriterion("ModifyUserID is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andModifyUserIDEqualTo(String value) {
+            addCriterion("ModifyUserID =", value, "modifyUserID");
+            return (Criteria) this;
+        }
+
+        public Criteria andModifyUserIDNotEqualTo(String value) {
+            addCriterion("ModifyUserID <>", value, "modifyUserID");
+            return (Criteria) this;
+        }
+
+        public Criteria andModifyUserIDGreaterThan(String value) {
+            addCriterion("ModifyUserID >", value, "modifyUserID");
+            return (Criteria) this;
+        }
+
+        public Criteria andModifyUserIDGreaterThanOrEqualTo(String value) {
+            addCriterion("ModifyUserID >=", value, "modifyUserID");
+            return (Criteria) this;
+        }
+
+        public Criteria andModifyUserIDLessThan(String value) {
+            addCriterion("ModifyUserID <", value, "modifyUserID");
+            return (Criteria) this;
+        }
+
+        public Criteria andModifyUserIDLessThanOrEqualTo(String value) {
+            addCriterion("ModifyUserID <=", value, "modifyUserID");
+            return (Criteria) this;
+        }
+
+        public Criteria andModifyUserIDLike(String value) {
+            addCriterion("ModifyUserID like", value, "modifyUserID");
+            return (Criteria) this;
+        }
+
+        public Criteria andModifyUserIDNotLike(String value) {
+            addCriterion("ModifyUserID not like", value, "modifyUserID");
+            return (Criteria) this;
+        }
+
+        public Criteria andModifyUserIDIn(List<String> values) {
+            addCriterion("ModifyUserID in", values, "modifyUserID");
+            return (Criteria) this;
+        }
+
+        public Criteria andModifyUserIDNotIn(List<String> values) {
+            addCriterion("ModifyUserID not in", values, "modifyUserID");
+            return (Criteria) this;
+        }
+
+        public Criteria andModifyUserIDBetween(String value1, String value2) {
+            addCriterion("ModifyUserID between", value1, value2, "modifyUserID");
+            return (Criteria) this;
+        }
+
+        public Criteria andModifyUserIDNotBetween(String value1, String value2) {
+            addCriterion("ModifyUserID not between", value1, value2, "modifyUserID");
+            return (Criteria) this;
+        }
+
+        public Criteria andModifyTimeIsNull() {
+            addCriterion("ModifyTime is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andModifyTimeIsNotNull() {
+            addCriterion("ModifyTime is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andModifyTimeEqualTo(Date value) {
+            addCriterion("ModifyTime =", value, "modifyTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andModifyTimeNotEqualTo(Date value) {
+            addCriterion("ModifyTime <>", value, "modifyTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andModifyTimeGreaterThan(Date value) {
+            addCriterion("ModifyTime >", value, "modifyTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andModifyTimeGreaterThanOrEqualTo(Date value) {
+            addCriterion("ModifyTime >=", value, "modifyTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andModifyTimeLessThan(Date value) {
+            addCriterion("ModifyTime <", value, "modifyTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andModifyTimeLessThanOrEqualTo(Date value) {
+            addCriterion("ModifyTime <=", value, "modifyTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andModifyTimeIn(List<Date> values) {
+            addCriterion("ModifyTime in", values, "modifyTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andModifyTimeNotIn(List<Date> values) {
+            addCriterion("ModifyTime not in", values, "modifyTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andModifyTimeBetween(Date value1, Date value2) {
+            addCriterion("ModifyTime between", value1, value2, "modifyTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andModifyTimeNotBetween(Date value1, Date value2) {
+            addCriterion("ModifyTime not between", value1, value2, "modifyTime");
+            return (Criteria) this;
+        }
+    }
+
+    public static class Criteria extends GeneratedCriteria {
+        protected Criteria() {
+            super();
+        }
+    }
+
+    public static class Criterion {
+        private String condition;
+
+        private Object value;
+
+        private Object secondValue;
+
+        private boolean noValue;
+
+        private boolean singleValue;
+
+        private boolean betweenValue;
+
+        private boolean listValue;
+
+        private String typeHandler;
+
+        public String getCondition() {
+            return condition;
+        }
+
+        public Object getValue() {
+            return value;
+        }
+
+        public Object getSecondValue() {
+            return secondValue;
+        }
+
+        public boolean isNoValue() {
+            return noValue;
+        }
+
+        public boolean isSingleValue() {
+            return singleValue;
+        }
+
+        public boolean isBetweenValue() {
+            return betweenValue;
+        }
+
+        public boolean isListValue() {
+            return listValue;
+        }
+
+        public String getTypeHandler() {
+            return typeHandler;
+        }
+
+        protected Criterion(String condition) {
+            super();
+            this.condition = condition;
+            this.typeHandler = null;
+            this.noValue = true;
+        }
+
+        protected Criterion(String condition, Object value, String typeHandler) {
+            super();
+            this.condition = condition;
+            this.value = value;
+            this.typeHandler = typeHandler;
+            if (value instanceof List<?>) {
+                this.listValue = true;
+            } else {
+                this.singleValue = true;
+            }
+        }
+
+        protected Criterion(String condition, Object value) {
+            this(condition, value, null);
+        }
+
+        protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {
+            super();
+            this.condition = condition;
+            this.value = value;
+            this.secondValue = secondValue;
+            this.typeHandler = typeHandler;
+            this.betweenValue = true;
+        }
+
+        protected Criterion(String condition, Object value, Object secondValue) {
+            this(condition, value, secondValue, null);
+        }
+    }
+}

+ 18 - 0
src/main/java/com/hz/employmentsite/services/impl/jobUserManager/JobUserServiceImpl.java

@@ -9,10 +9,12 @@ import com.hz.employmentsite.mapper.cquery.JobUserCQuery;
 import com.hz.employmentsite.mapper.cquery.LabelCQuery;
 import com.hz.employmentsite.model.*;
 import com.hz.employmentsite.services.service.jobUserManager.JobUserService;
+import com.hz.employmentsite.services.service.jobUserManager.JobUserServiceService;
 import com.hz.employmentsite.services.service.system.DictionaryService;
 import com.hz.employmentsite.util.*;
 import com.hz.employmentsite.vo.dataMap.JobUserMapVo;
 import com.hz.employmentsite.vo.jobUserManager.JobHuntVo;
+import com.hz.employmentsite.vo.jobUserManager.JobUserServiceVo;
 import com.hz.employmentsite.vo.jobUserManager.JobUserVo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -65,6 +67,8 @@ public class JobUserServiceImpl implements JobUserService {
     private LabelCQuery labelCQuery;
     @Autowired
     private JobHuntCQuery jobHuntCQuery;
+    @Autowired
+    private JobUserServiceService jobUserServiceService;
 
     @Override
     public PageInfo<JobUserVo> getList(Integer pageIndex, Integer pageSize,
@@ -368,6 +372,12 @@ public class JobUserServiceImpl implements JobUserService {
                 throw new BaseException("500", "该社保卡已绑定其他人员");
             }
         }
+
+        JobUserServiceVo jobUserServiceVo = new JobUserServiceVo();
+        jobUserServiceVo.setJobUserID(data.getJobUserID());
+        jobUserServiceVo.setServiceTime(new Date());
+        jobUserServiceVo.setServiceUserID(userId);
+
         if (dbData == null) {
             dbData = new PcJobuser();
             dbData.setJobuserID(data.getJobUserID());
@@ -417,6 +427,7 @@ public class JobUserServiceImpl implements JobUserService {
             dbData.setCreateUserID(userId);
             result = pcJobuserMapper.insert(dbData);
 
+            jobUserServiceVo.setServiceContent("登记求职者个人求职信息");
         }
         else {
             dbData.setJobuserID(data.getJobUserID());
@@ -465,6 +476,8 @@ public class JobUserServiceImpl implements JobUserService {
             dbData.setModifyTime(new Date());
             dbData.setModifyUserID(userId);
             result = pcJobuserMapper.updateByPrimaryKey(dbData);
+
+            jobUserServiceVo.setServiceContent("更新求职者个人求职信息");
         }
 
         PcLabelJobuserExample labelEmp = new PcLabelJobuserExample();
@@ -479,6 +492,11 @@ public class JobUserServiceImpl implements JobUserService {
             });
         }
 
+        // 保存服务记录
+        if (result > 0){
+            jobUserServiceService.save(jobUserServiceVo, userId);
+        }
+
         return result;
     }
 

+ 81 - 0
src/main/java/com/hz/employmentsite/services/impl/jobUserManager/JobUserServiceServiceImpl.java

@@ -0,0 +1,81 @@
+package com.hz.employmentsite.services.impl.jobUserManager;
+
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.hz.employmentsite.mapper.PcJobuserServiceMapper;
+import com.hz.employmentsite.mapper.cquery.JobUserServiceCQuery;
+import com.hz.employmentsite.model.PcJobuserService;
+import com.hz.employmentsite.model.PcJobuserServiceExample;
+import com.hz.employmentsite.services.service.jobUserManager.JobUserServiceService;
+import com.hz.employmentsite.util.StringUtils;
+import com.hz.employmentsite.vo.jobUserManager.JobUserServiceVo;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.List;
+import java.util.UUID;
+
+@Service("JobUserServiceService")
+public class JobUserServiceServiceImpl implements JobUserServiceService {
+    @Autowired
+    private PcJobuserServiceMapper pcJobuserServiceMapper;
+
+    @Autowired
+    private JobUserServiceCQuery jobUserServiceCQuery;
+
+    @Autowired
+    private StringUtils stringUtils;
+
+    @Override
+    public PageInfo<JobUserServiceVo> getList(Integer pageIndex, Integer pageSize, String jobUserID, String serviceID) {
+        PageHelper.startPage(pageIndex, pageSize);
+        List<JobUserServiceVo> list = jobUserServiceCQuery.getList(jobUserID, serviceID);
+        PageInfo<JobUserServiceVo> result = new PageInfo(list);
+        return result;
+    }
+
+    @Override
+    public JobUserServiceVo getById(String serviceID) {
+        if (stringUtils.IsNullOrEmpty(serviceID)) {
+            return null;
+        }
+        JobUserServiceVo model = jobUserServiceCQuery.getList(null, serviceID).stream().findFirst().orElse(null);
+        return model;
+    }
+
+    @Override
+    public int save(JobUserServiceVo data, String userID) {
+        int result = 0;
+        // 按主键查询数据库
+        JobUserServiceVo byId = getById(data.getServiceID());
+
+        PcJobuserService dbData = new PcJobuserService();
+        // 复制vo的字段值到dto类
+        BeanUtils.copyProperties(data, dbData);
+
+        if (byId == null){
+            // 新增
+            if (stringUtils.IsNullOrEmpty(data.getServiceID())) {
+                dbData.setServiceID(UUID.randomUUID().toString());
+            }
+            dbData.setCreateUserID(userID);
+            dbData.setCreateTime(new Date());
+            result = pcJobuserServiceMapper.insert(dbData);
+        } else {
+            // 修改
+            dbData.setModifyUserID(userID);
+            dbData.setModifyTime(new Date());
+            result = pcJobuserServiceMapper.updateByPrimaryKey(dbData);
+        }
+        return result;
+    }
+
+    @Override
+    public int delete(List<String> ids) {
+        PcJobuserServiceExample jobuserServiceExample = new PcJobuserServiceExample();
+        jobuserServiceExample.or().andServiceIDIn(ids);
+        return pcJobuserServiceMapper.deleteByExample(jobuserServiceExample);
+    }
+}

+ 16 - 2
src/main/java/com/hz/employmentsite/services/impl/jobUserManager/RecommendMgtServiceImpl.java

@@ -7,12 +7,12 @@ import com.hz.employmentsite.mapper.*;
 import com.hz.employmentsite.mapper.cquery.RecommendMgtCQuery;
 import com.hz.employmentsite.model.*;
 import com.hz.employmentsite.services.service.WechatService;
+import com.hz.employmentsite.services.service.jobUserManager.JobUserServiceService;
 import com.hz.employmentsite.services.service.jobUserManager.RecommendMgtService;
 import com.hz.employmentsite.util.CalculateUtils;
 import com.hz.employmentsite.util.DesUtils;
 import com.hz.employmentsite.util.StringUtils;
 import com.hz.employmentsite.vo.jobUserManager.*;
-import jdk.jfr.consumer.RecordedObject;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -48,6 +48,8 @@ public class RecommendMgtServiceImpl implements RecommendMgtService {
     private DesUtils desUtils;
     @Autowired
     private CalculateUtils calculateUtils;
+    @Autowired
+    private JobUserServiceService jobUserServiceService;
 
     @Override
     public PageInfo<RecommendMgtVo> getList(Integer page, Integer rows, String name,
@@ -104,9 +106,10 @@ public class RecommendMgtServiceImpl implements RecommendMgtService {
     }
 
     @Override
-    public int addRecommend(List<PcRecommendMgt> list, String userID) {
+    public int addRecommend(List<RecommendMgtVo> list, String userID) {
         try {
             List<PcRecommendMgt> addList = new ArrayList<>();
+            List<JobUserServiceVo> serviceList = new ArrayList<>();
             final int[] result = {1};
             list.forEach(item -> {
                 PcPost curPost = pcPostMapper.selectByPrimaryKey(item.getPostID());
@@ -122,6 +125,13 @@ public class RecommendMgtServiceImpl implements RecommendMgtService {
                     model.setCreateUserID(userID);
                     model.setCreateTime(new Date());
                     addList.add(model);
+
+                    JobUserServiceVo service = new JobUserServiceVo();
+                    service.setJobUserID(item.jobuserId);
+                    service.setServiceContent("已推荐 " + item.companyName + " 的 " + item.zpProfessionName + " 岗位");
+                    service.setServiceTime(new Date());
+                    service.setServiceUserID(userID);
+                    serviceList.add(service);
                 }
             });
 
@@ -129,6 +139,10 @@ public class RecommendMgtServiceImpl implements RecommendMgtService {
                 pcRecommendMgtMapper.insert(x);
             });
 
+            serviceList.forEach(item -> {
+                jobUserServiceService.save(item, userID);
+            });
+
             return result[0];
         } catch (Exception e) {
             e.printStackTrace();

+ 17 - 0
src/main/java/com/hz/employmentsite/services/service/jobUserManager/JobUserServiceService.java

@@ -0,0 +1,17 @@
+package com.hz.employmentsite.services.service.jobUserManager;
+
+import com.github.pagehelper.PageInfo;
+import com.hz.employmentsite.vo.jobUserManager.JobUserServiceVo;
+
+import java.util.List;
+
+public interface JobUserServiceService {
+    PageInfo<JobUserServiceVo> getList(Integer pageIndex, Integer pageSize,
+                                       String jobUserID, String serviceID);
+
+    JobUserServiceVo getById(String jobUserServiceID);
+
+    int save(JobUserServiceVo data, String userID);
+
+    int delete(List<String> ids);
+}

+ 1 - 2
src/main/java/com/hz/employmentsite/services/service/jobUserManager/RecommendMgtService.java

@@ -1,7 +1,6 @@
 package com.hz.employmentsite.services.service.jobUserManager;
 
 import com.github.pagehelper.PageInfo;
-import com.hz.employmentsite.model.PcRecommendMgt;
 import com.hz.employmentsite.vo.jobUserManager.*;
 
 import java.util.Date;
@@ -26,7 +25,7 @@ public interface RecommendMgtService {
 
     int saveRemark(String id, String remark, String userId);
 
-    int addRecommend(List<PcRecommendMgt> list, String userId);
+    int addRecommend(List<RecommendMgtVo> list, String userId);
 
 
     /**

+ 34 - 0
src/main/java/com/hz/employmentsite/vo/jobUserManager/JobUserServiceVo.java

@@ -0,0 +1,34 @@
+package com.hz.employmentsite.vo.jobUserManager;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+@Data
+public class JobUserServiceVo {
+    private String serviceID;
+
+    private String jobUserID;
+
+    private String serviceContent;
+
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date serviceTime;
+
+    private String serviceUserID;
+
+    private String createUserID;
+
+    private Date createTime;
+
+    private String modifyUserID;
+
+    private Date modifyTime;
+
+    private String jobUserName;
+
+    private String serviceUserName;
+}

+ 276 - 0
src/main/resources/mapping/PcJobuserServiceMapper.xml

@@ -0,0 +1,276 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.hz.employmentsite.mapper.PcJobuserServiceMapper">
+  <resultMap id="BaseResultMap" type="com.hz.employmentsite.model.PcJobuserService">
+    <id column="ServiceID" jdbcType="VARCHAR" property="serviceID" />
+    <result column="JobUserID" jdbcType="VARCHAR" property="jobUserID" />
+    <result column="ServiceContent" jdbcType="VARCHAR" property="serviceContent" />
+    <result column="ServiceTime" jdbcType="TIMESTAMP" property="serviceTime" />
+    <result column="ServiceUserID" jdbcType="VARCHAR" property="serviceUserID" />
+    <result column="CreateUserID" jdbcType="VARCHAR" property="createUserID" />
+    <result column="CreateTime" jdbcType="TIMESTAMP" property="createTime" />
+    <result column="ModifyUserID" jdbcType="VARCHAR" property="modifyUserID" />
+    <result column="ModifyTime" jdbcType="TIMESTAMP" property="modifyTime" />
+  </resultMap>
+  <sql id="Example_Where_Clause">
+    <where>
+      <foreach collection="oredCriteria" item="criteria" separator="or">
+        <if test="criteria.valid">
+          <trim prefix="(" prefixOverrides="and" suffix=")">
+            <foreach collection="criteria.criteria" item="criterion">
+              <choose>
+                <when test="criterion.noValue">
+                  and ${criterion.condition}
+                </when>
+                <when test="criterion.singleValue">
+                  and ${criterion.condition} #{criterion.value}
+                </when>
+                <when test="criterion.betweenValue">
+                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+                </when>
+                <when test="criterion.listValue">
+                  and ${criterion.condition}
+                  <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
+                    #{listItem}
+                  </foreach>
+                </when>
+              </choose>
+            </foreach>
+          </trim>
+        </if>
+      </foreach>
+    </where>
+  </sql>
+  <sql id="Update_By_Example_Where_Clause">
+    <where>
+      <foreach collection="example.oredCriteria" item="criteria" separator="or">
+        <if test="criteria.valid">
+          <trim prefix="(" prefixOverrides="and" suffix=")">
+            <foreach collection="criteria.criteria" item="criterion">
+              <choose>
+                <when test="criterion.noValue">
+                  and ${criterion.condition}
+                </when>
+                <when test="criterion.singleValue">
+                  and ${criterion.condition} #{criterion.value}
+                </when>
+                <when test="criterion.betweenValue">
+                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+                </when>
+                <when test="criterion.listValue">
+                  and ${criterion.condition}
+                  <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
+                    #{listItem}
+                  </foreach>
+                </when>
+              </choose>
+            </foreach>
+          </trim>
+        </if>
+      </foreach>
+    </where>
+  </sql>
+  <sql id="Base_Column_List">
+    ServiceID, JobUserID, ServiceContent, ServiceTime, ServiceUserID, CreateUserID, CreateTime, 
+    ModifyUserID, ModifyTime
+  </sql>
+  <select id="selectByExample" parameterType="com.hz.employmentsite.model.PcJobuserServiceExample" resultMap="BaseResultMap">
+    select
+    <if test="distinct">
+      distinct
+    </if>
+    <include refid="Base_Column_List" />
+    from pc_jobuser_service
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+    <if test="orderByClause != null">
+      order by ${orderByClause}
+    </if>
+  </select>
+  <select id="selectByPrimaryKey" parameterType="java.lang.String" resultMap="BaseResultMap">
+    select 
+    <include refid="Base_Column_List" />
+    from pc_jobuser_service
+    where ServiceID = #{serviceID,jdbcType=VARCHAR}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.String">
+    delete from pc_jobuser_service
+    where ServiceID = #{serviceID,jdbcType=VARCHAR}
+  </delete>
+  <delete id="deleteByExample" parameterType="com.hz.employmentsite.model.PcJobuserServiceExample">
+    delete from pc_jobuser_service
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+  </delete>
+  <insert id="insert" parameterType="com.hz.employmentsite.model.PcJobuserService">
+    insert into pc_jobuser_service (ServiceID, JobUserID, ServiceContent, 
+      ServiceTime, ServiceUserID, CreateUserID, 
+      CreateTime, ModifyUserID, ModifyTime
+      )
+    values (#{serviceID,jdbcType=VARCHAR}, #{jobUserID,jdbcType=VARCHAR}, #{serviceContent,jdbcType=VARCHAR}, 
+      #{serviceTime,jdbcType=TIMESTAMP}, #{serviceUserID,jdbcType=VARCHAR}, #{createUserID,jdbcType=VARCHAR}, 
+      #{createTime,jdbcType=TIMESTAMP}, #{modifyUserID,jdbcType=VARCHAR}, #{modifyTime,jdbcType=TIMESTAMP}
+      )
+  </insert>
+  <insert id="insertSelective" parameterType="com.hz.employmentsite.model.PcJobuserService">
+    insert into pc_jobuser_service
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="serviceID != null">
+        ServiceID,
+      </if>
+      <if test="jobUserID != null">
+        JobUserID,
+      </if>
+      <if test="serviceContent != null">
+        ServiceContent,
+      </if>
+      <if test="serviceTime != null">
+        ServiceTime,
+      </if>
+      <if test="serviceUserID != null">
+        ServiceUserID,
+      </if>
+      <if test="createUserID != null">
+        CreateUserID,
+      </if>
+      <if test="createTime != null">
+        CreateTime,
+      </if>
+      <if test="modifyUserID != null">
+        ModifyUserID,
+      </if>
+      <if test="modifyTime != null">
+        ModifyTime,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides=",">
+      <if test="serviceID != null">
+        #{serviceID,jdbcType=VARCHAR},
+      </if>
+      <if test="jobUserID != null">
+        #{jobUserID,jdbcType=VARCHAR},
+      </if>
+      <if test="serviceContent != null">
+        #{serviceContent,jdbcType=VARCHAR},
+      </if>
+      <if test="serviceTime != null">
+        #{serviceTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="serviceUserID != null">
+        #{serviceUserID,jdbcType=VARCHAR},
+      </if>
+      <if test="createUserID != null">
+        #{createUserID,jdbcType=VARCHAR},
+      </if>
+      <if test="createTime != null">
+        #{createTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="modifyUserID != null">
+        #{modifyUserID,jdbcType=VARCHAR},
+      </if>
+      <if test="modifyTime != null">
+        #{modifyTime,jdbcType=TIMESTAMP},
+      </if>
+    </trim>
+  </insert>
+  <select id="countByExample" parameterType="com.hz.employmentsite.model.PcJobuserServiceExample" resultType="java.lang.Long">
+    select count(*) from pc_jobuser_service
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+  </select>
+  <update id="updateByExampleSelective" parameterType="map">
+    update pc_jobuser_service
+    <set>
+      <if test="row.serviceID != null">
+        ServiceID = #{row.serviceID,jdbcType=VARCHAR},
+      </if>
+      <if test="row.jobUserID != null">
+        JobUserID = #{row.jobUserID,jdbcType=VARCHAR},
+      </if>
+      <if test="row.serviceContent != null">
+        ServiceContent = #{row.serviceContent,jdbcType=VARCHAR},
+      </if>
+      <if test="row.serviceTime != null">
+        ServiceTime = #{row.serviceTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="row.serviceUserID != null">
+        ServiceUserID = #{row.serviceUserID,jdbcType=VARCHAR},
+      </if>
+      <if test="row.createUserID != null">
+        CreateUserID = #{row.createUserID,jdbcType=VARCHAR},
+      </if>
+      <if test="row.createTime != null">
+        CreateTime = #{row.createTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="row.modifyUserID != null">
+        ModifyUserID = #{row.modifyUserID,jdbcType=VARCHAR},
+      </if>
+      <if test="row.modifyTime != null">
+        ModifyTime = #{row.modifyTime,jdbcType=TIMESTAMP},
+      </if>
+    </set>
+    <if test="example != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByExample" parameterType="map">
+    update pc_jobuser_service
+    set ServiceID = #{row.serviceID,jdbcType=VARCHAR},
+      JobUserID = #{row.jobUserID,jdbcType=VARCHAR},
+      ServiceContent = #{row.serviceContent,jdbcType=VARCHAR},
+      ServiceTime = #{row.serviceTime,jdbcType=TIMESTAMP},
+      ServiceUserID = #{row.serviceUserID,jdbcType=VARCHAR},
+      CreateUserID = #{row.createUserID,jdbcType=VARCHAR},
+      CreateTime = #{row.createTime,jdbcType=TIMESTAMP},
+      ModifyUserID = #{row.modifyUserID,jdbcType=VARCHAR},
+      ModifyTime = #{row.modifyTime,jdbcType=TIMESTAMP}
+    <if test="example != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByPrimaryKeySelective" parameterType="com.hz.employmentsite.model.PcJobuserService">
+    update pc_jobuser_service
+    <set>
+      <if test="jobUserID != null">
+        JobUserID = #{jobUserID,jdbcType=VARCHAR},
+      </if>
+      <if test="serviceContent != null">
+        ServiceContent = #{serviceContent,jdbcType=VARCHAR},
+      </if>
+      <if test="serviceTime != null">
+        ServiceTime = #{serviceTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="serviceUserID != null">
+        ServiceUserID = #{serviceUserID,jdbcType=VARCHAR},
+      </if>
+      <if test="createUserID != null">
+        CreateUserID = #{createUserID,jdbcType=VARCHAR},
+      </if>
+      <if test="createTime != null">
+        CreateTime = #{createTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="modifyUserID != null">
+        ModifyUserID = #{modifyUserID,jdbcType=VARCHAR},
+      </if>
+      <if test="modifyTime != null">
+        ModifyTime = #{modifyTime,jdbcType=TIMESTAMP},
+      </if>
+    </set>
+    where ServiceID = #{serviceID,jdbcType=VARCHAR}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.hz.employmentsite.model.PcJobuserService">
+    update pc_jobuser_service
+    set JobUserID = #{jobUserID,jdbcType=VARCHAR},
+      ServiceContent = #{serviceContent,jdbcType=VARCHAR},
+      ServiceTime = #{serviceTime,jdbcType=TIMESTAMP},
+      ServiceUserID = #{serviceUserID,jdbcType=VARCHAR},
+      CreateUserID = #{createUserID,jdbcType=VARCHAR},
+      CreateTime = #{createTime,jdbcType=TIMESTAMP},
+      ModifyUserID = #{modifyUserID,jdbcType=VARCHAR},
+      ModifyTime = #{modifyTime,jdbcType=TIMESTAMP}
+    where ServiceID = #{serviceID,jdbcType=VARCHAR}
+  </update>
+</mapper>

+ 24 - 0
src/main/resources/mapping/cquery/JobUserServiceCQuery.xml

@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.hz.employmentsite.mapper.cquery.JobUserServiceCQuery">
+    <select id="getList" resultType="com.hz.employmentsite.vo.jobUserManager.JobUserServiceVo">
+        SELECT
+            service.*,
+            jobUser.`Name` AS jobUserName,
+            sysUser.`Name` AS serviceUserName
+        FROM
+            `pc_jobuser_service` service
+                LEFT JOIN pc_jobuser jobUser ON service.JobUserID = jobUser.JobuserID
+                LEFT JOIN sys_user sysUser ON service.ServiceUserID = sysUser.UserID
+        WHERE
+            1=1
+        <if test="jobUserID != '' and jobUserID != null">
+            and service.JobUserID = #{jobUserID}
+        </if>
+        <if test="serviceID != '' and serviceID != null">
+            and service.ServiceID = #{serviceID}
+        </if>
+        ORDER BY
+            service.ServiceTime DESC
+    </select>
+</mapper>

+ 52 - 0
vue/src/api/jobUserManager/jobuser/jobUserService.ts

@@ -0,0 +1,52 @@
+import {request} from '@/utils/request';
+
+export function getList(query: any) {
+  return request(
+    {
+      url: 'jobUserServiceRecords/getList',
+      method: 'get',
+      params: query,
+    },
+    {isNew: true},
+  );
+}
+
+export function getDataById(serviceID: any) {
+  return request(
+    {
+      url: 'jobUserServiceRecords/getByID',
+      method: 'get',
+      params: {serviceID},
+    },
+    {isNew: true},
+  );
+}
+
+export function save(data: any) {
+  return request<object>(
+    {
+      url: "jobUserServiceRecords/save",
+      method: 'post',
+      data: data
+    },
+    {
+      isNew: true,
+      successMsg: '提交成功!',
+      errorMsg: '提交失败!'
+    },
+  );
+}
+
+export function del(data: any) {
+  return request({
+      url: 'jobUserServiceRecords/delete',
+      method: 'post',
+      data: data
+    },
+    {
+      isNew: true,
+      successMsg: '删除成功!',
+      errorMsg: '删除失败!'
+    }
+  )
+}

+ 1 - 1
vue/src/views/jobUserManager/jobhunt/index.vue

@@ -410,7 +410,7 @@ export default defineComponent({
 
     const onRecommendCompanyPost = (item) => {
       recommendRef.value.show(item.professionID, item.professionName, item.jobHuntID, item.jobUserName, 0,
-        item.parentProfessionID, item.cultureRank, item.workYear, item.minSalary, item.maxSalary, "推荐企业岗位");
+        item.parentProfessionID, item.cultureRank, item.workYear, item.minSalary, item.maxSalary, item.jobUserID, "推荐企业岗位");
     }
 
     const onRecommendInfo = (item) => {

+ 14 - 3
vue/src/views/jobUserManager/jobhunt/recommend.vue

@@ -154,6 +154,7 @@ export default defineComponent({
     const companyList = ref<SelectProps['options']>();
     const addRecommendList = ref([] as any);
     const recommendPostWhereList = ref([] as any);
+    const jobUserID = ref();
 
     get('companyService/company/getList', {pageIndex: 1, pageSize: 9999}).then(result => {
       companyList.value = result.list;
@@ -358,7 +359,9 @@ export default defineComponent({
 
     const show = (professionID: any, professionName: any, jobHuntID: any, jobUserName: any, type: any,
                   parentProfessionID: any, cultureRank: any, workYear: any, minSalary: any, maxSalary: any,
-                  titleName: string) => {
+                  jobUserId: any, titleName: string) => {
+      jobUserID.value = jobUserId;
+
       visible.value = true;
       searchParams.jobHuntID = jobHuntID;
       searchParams.jobUserName = jobUserName;
@@ -391,7 +394,11 @@ export default defineComponent({
         recommendMgtID: item.recommendMgtID,
         postID: item.postID,
         jobHuntID: searchParams.jobHuntID,
-        recommendType: 1
+        recommendType: 1,
+        // 服务跟进记录需要的数据
+        jobuserId: jobUserID.value,
+        companyName: item.companyName,
+        zpProfessionName: item.professionName
       });
       addRecommend(addRecommendList.value).then((data) => {
         if(data!=-1){
@@ -416,7 +423,11 @@ export default defineComponent({
             recommendMgtID: item.recommendMgtID,
             postID: item.postID,
             jobHuntID: searchParams.jobHuntID,
-            recommendType: 1
+            recommendType: 1,
+            // 服务跟进记录需要的数据
+            jobuserId: jobUserID.value,
+            companyName: item.companyName,
+            zpProfessionName: item.professionName
           });
         }
       })

+ 267 - 0
vue/src/views/jobUserManager/jobuser/ServiceTableCom.vue

@@ -0,0 +1,267 @@
+<!-- 就业人员服务记录弹窗组件 -->
+<template>
+  <div>
+    <a-modal v-model:visible="visible" width="1000px" :title="'服务跟进记录'" @ok="handleOk">
+      <template #footer>
+        <a-button key="submit" type="primary" @click="handleOk">确定</a-button>
+      </template>
+      <a-row class="edit-operation" style="margin-bottom: 10px">
+        <a-col :span="24" class="flex-space-between">
+          <div>
+
+          </div>
+          <div>
+            <a-button type="primary" html-type="submit" @click='onAdd'>新增</a-button>
+          </div>
+        </a-col>
+      </a-row>
+      <a-table :dataSource="serviceRecordsList" :columns="tableColumns" bordered :scroll="{ x: '100%', y: 500 }"
+               :pagination="tablePagination" :loading="searchLoading" @change="handleTableChange">
+        <template #bodyCell="{ column, text, record }">
+          <template v-if="column.key === 'serviceTime'">
+            <div>
+              {{ dayjs(record.serviceTime).format('YYYY-MM-DD') }}
+            </div>
+          </template>
+          <template v-if="column.key === 'operation'">
+            <div class="table-operation" v-if="userInfo.userID == record.serviceUserID">
+              <a-button type="link" size="small" @click="onEdit(record)">编辑</a-button>
+              <a-button type="link" size="small" @click="onDel(record)">删除</a-button>
+            </div>
+          </template>
+        </template>
+      </a-table>
+    </a-modal>
+
+    <!-- 编辑服务记录对话框 -->
+    <a-modal
+      v-model:visible="editModalVisible"
+      :title="(isAdd ? '新增' : '编辑') + '服务跟进记录'"
+      :centered="true"
+      width="500px"
+      :confirmLoading="editLoading"
+      @cancel="editModalHandleCancel"
+      @ok="editModalHandleOk"
+    >
+      <a-form
+        ref="editFormRef"
+        :model="editFormData"
+        :label-col="{ span: 6 }"
+        :wrapper-col="{ span: 18 }"
+        autocomplete="off"
+      >
+        <a-form-item
+          label="求职人员姓名"
+          name="jobUserName"
+          :rules="[{ required: true, message: '请填写求职人员姓名!' }]"
+        >
+          <a-input v-model:value="editFormData.jobUserName" :disabled="true"/>
+        </a-form-item>
+        <a-form-item
+          label="服务内容"
+          name="serviceContent"
+          :rules="[{ required: true, message: '请填写服务内容!' }]"
+        >
+          <a-textarea v-model:value="editFormData.serviceContent" :row="4"/>
+        </a-form-item>
+        <a-form-item
+          label="服务时间"
+          name="serviceTime"
+          :rules="[{ type: 'string' as const, required: true, message: '请选择服务时间!' }]"
+        >
+          <a-date-picker v-model:value="editFormData.serviceTime" picker="date" value-format="YYYY-MM-DD HH:mm:ss"
+                         format="YYYY-MM-DD"/>
+        </a-form-item>
+        <a-form-item
+          label="服务人员"
+          name="serviceUserName"
+          :rules="[{ required: true, message: '请选择服务人员!' }]"
+        >
+          <a-input v-model:value="editFormData.serviceUserName" :disabled="true"/>
+        </a-form-item>
+      </a-form>
+    </a-modal>
+  </div>
+</template>
+
+<script setup lang="ts">
+import {computed, createVNode, reactive, ref} from "vue";
+import {del, getDataById, getList, save} from "@/api/jobUserManager/jobuser/jobUserService";
+import {getPaginationTotalTitle} from "@/utils/common";
+import {Modal, type TableProps} from "ant-design-vue";
+import {useUserStore} from "@/store/modules/user";
+import dayjs from "dayjs";
+import {ExclamationCircleOutlined} from "@ant-design/icons-vue";
+
+const userStore = useUserStore();
+const userInfo = ref(userStore.getUserInfo);
+
+// 对话框显示关闭开关
+const visible = ref(false);
+// 求职人员信息
+const jobUserData = ref<any>()
+// 查询参数
+const searchParams = reactive({
+  pageIndex: 1,
+  pageSize: 20,
+  jobUserID: ''
+})
+// 查询加载
+const searchLoading = ref(false);
+// 服务跟进记录数据
+const serviceRecordsList = ref([]);
+// 查询总条数
+const serviceRecordsTotal = ref(0);
+// 表格结构定义
+const tableColumns = [
+  {
+    title: '序号',
+    align: 'center',
+    width: 80,
+    key: 'jobUserID',
+    customRender: (item) =>
+      `${searchParams.pageSize * (searchParams.pageIndex - 1) + item.index + 1}`,
+    isDisabled: true
+  },
+  {title: '姓名', dataIndex: 'jobUserName', key: 'jobUserName', width: 150, align: "center"},
+  {title: '服务内容', dataIndex: 'serviceContent', key: 'serviceContent', width: 200, align: "center"},
+  {title: '服务时间', dataIndex: 'serviceTime', key: 'serviceTime', width: 150, align: "center"},
+  {title: '服务人员', dataIndex: 'serviceUserName', key: 'serviceUserName', width: 150, align: "center"},
+  {title: '操作', key: 'operation', width: 100, align: 'center', isDisabled: true},
+];
+// 表格分页数据
+const tablePagination = computed(() => ({
+  total: serviceRecordsTotal,
+  current: searchParams.pageIndex,
+  pageSize: searchParams.pageSize,
+  showSizeChanger: true,
+  showTotal: (total) => getPaginationTotalTitle(total),
+}));
+// 新增对话框显示关闭开关
+const editModalVisible = ref(false);
+// 新增加载动画
+const editLoading = ref(false);
+// 编辑数据
+const editFormData = ref({
+  jobUserID: "",
+  jobUserName: "",
+  serviceContent: "",
+  serviceTime: "",
+  serviceUserName: "",
+  serviceUserID: "",
+});
+// 是否新增
+const isAdd = ref(true);
+// 编辑表单ref
+const editFormRef = ref();
+
+// 数据加载
+async function loadData() {
+  searchLoading.value = true;
+  searchParams.jobUserID = jobUserData.value.jobUserID;
+  await getList(searchParams).then((result: any) => {
+    serviceRecordsList.value = result.list;
+    serviceRecordsTotal.value = result.total;
+  }).finally(() => {
+    searchLoading.value = false;
+  });
+}
+
+// 对话框开启事件
+function show(jobUser: any) {
+  jobUserData.value = jobUser;
+  loadData();
+  visible.value = true;
+}
+
+// 对话框确定事件
+function handleOk() {
+  visible.value = false;
+}
+
+// 表格分页触发事件
+const handleTableChange: TableProps['onChange'] = (pag: {
+  pageSize: number;
+  current: number;
+}) => {
+  searchParams.pageIndex = pag.current;
+  searchParams.pageSize = pag.pageSize;
+  loadData();
+};
+
+// 新增按钮点击事件
+function onAdd() {
+  // 初始化部分数据
+  editFormData.value.jobUserName = jobUserData.value.name;
+  editFormData.value.jobUserID = jobUserData.value.jobUserID;
+  editFormData.value.serviceUserName = <string>userInfo.value.name;
+  editFormData.value.serviceUserID = <string>userInfo.value.userID;
+  editFormData.value.serviceTime = dayjs().format('YYYY-MM-DD HH:mm:ss');
+  editModalVisible.value = true;
+  isAdd.value = true;
+}
+
+// 编辑按钮点击事件
+function onEdit(record: any) {
+  console.log(record)
+  getDataById(record.serviceID).then((result: any) => {
+    editFormData.value = result;
+  })
+  editModalVisible.value = true;
+  isAdd.value = false;
+}
+
+// 删除事件
+function onDel(record: any) {
+  Modal.confirm({
+    title: '确认删除该服务记录吗?',
+    icon: createVNode(ExclamationCircleOutlined),
+    content: '',
+    okText: '确认删除',
+    okType: 'danger',
+    okButtonProps: {},
+    cancelText: '取消',
+    onOk() {
+      del([record.serviceID]).then(() => {
+        loadData();
+      });
+    },
+    onCancel() {
+      formState.selectedRowKeys = [];
+    },
+  })
+}
+
+// 编辑对话框确定事件
+async function editModalHandleOk() {
+  editFormRef.value
+    .validate()
+    .then(async () => {
+      editLoading.value = true;
+      await save(editFormData.value).then(() => {
+        editModalHandleCancel();
+        loadData();
+      }).finally(() => {
+        editLoading.value = false;
+      });
+    })
+    .catch(error => {
+      console.log('error', error);
+    });
+}
+
+// 编辑对话框取消事件
+function editModalHandleCancel() {
+  editFormData.value.serviceContent = '';
+  editFormData.value.serviceTime = '';
+  editModalVisible.value = false;
+}
+
+defineExpose({
+  show
+})
+</script>
+
+<style scoped>
+
+</style>

+ 16 - 3
vue/src/views/jobUserManager/jobuser/index.vue

@@ -158,11 +158,15 @@
               <a-button type="link" size="small" functioncode="T01030106" @click='onVitae(record)'>个人简历</a-button>
               <a-button type="link" size="small" functioncode="T01030103" @click='onEdit(record)'>编辑</a-button>
               <a-button type="link" size="small" functioncode="T01030104" @click="onDel(record)">删除</a-button>
+              <a-button type="link" size="small" @click="openServiceModal(record)">跟进</a-button>
             </div>
           </template>
         </template>
       </a-table>
     </div>
+
+    <!-- 跟进服务记录 -->
+    <ServiceTableCom ref="serviceTableComRef"></ServiceTableCom>
   </div>
 </template>
 
@@ -181,15 +185,17 @@ import {getSiteList} from "@/api/baseSettings/siteInfo";
 import {get} from "@/api/common";
 import ColumnsSetting from "@/components/common/ColumnsSetting.vue";
 import type {ImportProps} from "@/components/basic/excel/importExcel/ImportProps";
+import ServiceTableCom from "@/views/jobUserManager/jobuser/ServiceTableCom.vue";
 
 export default defineComponent({
   name: 'JobUserList',
-  components: {ColumnsSetting, DownOutlined, UpOutlined, BExportExcel, BImportExcel},
+  components: {ServiceTableCom, ColumnsSetting, DownOutlined, UpOutlined, BExportExcel, BImportExcel},
   setup() {
     const modalRoleUserRef = ref();
     const expand = ref(false);
     const modalRoleEditRef = ref();
     const formRef = ref<FormInstance>();
+    const serviceTableComRef = ref();
     const searchParamsState = reactive({
       pageIndex: 1,
       pageSize: 20,
@@ -237,7 +243,7 @@ export default defineComponent({
       {title: '民族', dataIndex: 'nationName', key: 'nationName', width: 80, align: "center", isDefaultClose: true},
       {title: '最高学历', dataIndex: 'cultureName', key: 'cultureName', align: "center", isDefaultClose: true},
       {title: '地址', dataIndex: 'address', key: 'address', align: "center", isDefaultClose: true},
-      {title: '操作', key: 'operation', width: 170, align: 'center', isDisabled: true},
+      {title: '操作', key: 'operation', width: 220, align: 'center', isDisabled: true},
     ];
     // 响应式表格定义
     const columns = ref<Array<any>>(originalColumns.filter(item => !item.isDefaultClose));
@@ -422,6 +428,11 @@ export default defineComponent({
       columns.value = originalColumns.filter((item: any) => columnsKeys.includes(item.key));
     }
 
+    // 开启服务跟进记录对话框
+    function openServiceModal(jobUser: any) {
+      serviceTableComRef.value.show(JSON.parse(JSON.stringify(jobUser)));
+    }
+
     return {
       modalRoleUserRef,
       modalRoleEditRef,
@@ -455,7 +466,9 @@ export default defineComponent({
       exportSearchParams,
       regionList,
       createDate,
-      onCreateTimeChange
+      onCreateTimeChange,
+      serviceTableComRef,
+      openServiceModal
     };
   },
   created() {

+ 14 - 0
vue/src/views/jobUserManager/recommendMgt/remarkAdd.vue

@@ -20,6 +20,9 @@ import {ref} from "vue";
 import type {FormInstance} from 'ant-design-vue';
 import {setEntryState,saveRemark} from '@/api/jobUserManager/recommendMgt';
 import {getSysDictionaryList} from "@/api/system/dictionary";
+import dayjs from "dayjs";
+import {useUserStore} from "@/store/modules/user";
+import {save} from "@/api/jobUserManager/jobuser/jobUserService";
 
 defineOptions({
   name:'remarkAddModal',
@@ -29,6 +32,9 @@ defineOptions({
   }
 });
 
+const userStore = useUserStore();
+const userInfo = ref(userStore.getUserInfo);
+
 const visible = ref<boolean>(false);
 const loading = ref<boolean>(false);
 const entryStateList = ref<SelectProps['options']>();
@@ -62,6 +68,14 @@ const onCommit =() =>{
       visible.value = false;
       handleModalClosed(true);
     });
+    // 保存跟进服务记录
+    let serviceData = {
+      jobUserID: thePostRecommend.value.jobuserId,
+      serviceContent: `${thePostRecommend.value.entryState == 0 ? '未入职' : '已入职'}被推荐的 ${thePostRecommend.value.companyName} 的 ${thePostRecommend.value.zpProfessionName} 岗位。${thePostRecommend.value.remark ? '备注:' + thePostRecommend.value.remark : ''}`,
+      serviceTime: dayjs().format("YYYY-MM-DD HH:mm:ss"),
+      serviceUserID: userInfo.value.userID
+    }
+    save(serviceData);
   });
 };