feat(oa): 添加客户跟进记录功能
- 新增跟进记录添加接口和页面 - 实现客户id查询跟进记录列表功能 - 新增跟进记录相关BO和VO类
This commit is contained in:
@@ -2,12 +2,13 @@ package com.ruoyi.oa.controller;
|
|||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.concurrent.TimeUnit;
|
|
||||||
|
|
||||||
|
import com.ruoyi.oa.domain.bo.OaFollowUpRecordAddBo;
|
||||||
|
import com.ruoyi.oa.service.IOaFollowUpRecordService;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import javax.validation.constraints.*;
|
import javax.validation.constraints.*;
|
||||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
import com.ruoyi.common.annotation.RepeatSubmit;
|
import com.ruoyi.common.annotation.RepeatSubmit;
|
||||||
@@ -17,7 +18,6 @@ import com.ruoyi.common.core.domain.PageQuery;
|
|||||||
import com.ruoyi.common.core.domain.R;
|
import com.ruoyi.common.core.domain.R;
|
||||||
import com.ruoyi.common.core.validate.AddGroup;
|
import com.ruoyi.common.core.validate.AddGroup;
|
||||||
import com.ruoyi.common.core.validate.EditGroup;
|
import com.ruoyi.common.core.validate.EditGroup;
|
||||||
import com.ruoyi.common.core.validate.QueryGroup;
|
|
||||||
import com.ruoyi.common.enums.BusinessType;
|
import com.ruoyi.common.enums.BusinessType;
|
||||||
import com.ruoyi.common.utils.poi.ExcelUtil;
|
import com.ruoyi.common.utils.poi.ExcelUtil;
|
||||||
import com.ruoyi.oa.domain.vo.OaCustomerVo;
|
import com.ruoyi.oa.domain.vo.OaCustomerVo;
|
||||||
@@ -39,6 +39,9 @@ public class OaCustomerController extends BaseController {
|
|||||||
|
|
||||||
private final IOaCustomerService iOaCustomerService;
|
private final IOaCustomerService iOaCustomerService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IOaFollowUpRecordService iOaFollowUpRecordService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询CRM 客户列表
|
* 查询CRM 客户列表
|
||||||
*/
|
*/
|
||||||
@@ -109,4 +112,13 @@ public class OaCustomerController extends BaseController {
|
|||||||
@PathVariable Long[] customerIds) {
|
@PathVariable Long[] customerIds) {
|
||||||
return toAjax(iOaCustomerService.deleteWithValidByIds(Arrays.asList(customerIds), true));
|
return toAjax(iOaCustomerService.deleteWithValidByIds(Arrays.asList(customerIds), true));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 添加跟进记录
|
||||||
|
*/
|
||||||
|
@PostMapping("/follow")
|
||||||
|
public R<Void> addFollow(@Validated(AddGroup.class) @RequestBody OaFollowUpRecordAddBo bo) {
|
||||||
|
return toAjax(iOaFollowUpRecordService.insertByAddBo(bo));
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,16 +1,14 @@
|
|||||||
package com.ruoyi.oa.controller;
|
package com.ruoyi.oa.controller;
|
||||||
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.concurrent.TimeUnit;
|
|
||||||
|
|
||||||
import com.ruoyi.oa.service.IOaBusinessProductService;
|
import com.ruoyi.oa.domain.vo.OaFollowUpRecordQueryVo;
|
||||||
import com.ruoyi.oa.service.IOaBusinessService;
|
import com.ruoyi.oa.service.IOaBusinessService;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import javax.validation.constraints.*;
|
import javax.validation.constraints.*;
|
||||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
import com.ruoyi.common.annotation.RepeatSubmit;
|
import com.ruoyi.common.annotation.RepeatSubmit;
|
||||||
@@ -20,7 +18,6 @@ import com.ruoyi.common.core.domain.PageQuery;
|
|||||||
import com.ruoyi.common.core.domain.R;
|
import com.ruoyi.common.core.domain.R;
|
||||||
import com.ruoyi.common.core.validate.AddGroup;
|
import com.ruoyi.common.core.validate.AddGroup;
|
||||||
import com.ruoyi.common.core.validate.EditGroup;
|
import com.ruoyi.common.core.validate.EditGroup;
|
||||||
import com.ruoyi.common.core.validate.QueryGroup;
|
|
||||||
import com.ruoyi.common.enums.BusinessType;
|
import com.ruoyi.common.enums.BusinessType;
|
||||||
import com.ruoyi.common.utils.poi.ExcelUtil;
|
import com.ruoyi.common.utils.poi.ExcelUtil;
|
||||||
import com.ruoyi.oa.domain.vo.OaFollowUpRecordVo;
|
import com.ruoyi.oa.domain.vo.OaFollowUpRecordVo;
|
||||||
@@ -116,4 +113,13 @@ public class OaFollowUpRecordController extends BaseController {
|
|||||||
@PathVariable Long[] followIds) {
|
@PathVariable Long[] followIds) {
|
||||||
return toAjax(iOaFollowUpRecordService.deleteWithValidByIds(Arrays.asList(followIds), true));
|
return toAjax(iOaFollowUpRecordService.deleteWithValidByIds(Arrays.asList(followIds), true));
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* 根据用户id查询跟进记录列表
|
||||||
|
*/
|
||||||
|
@GetMapping("/list/{customerId}")
|
||||||
|
public R<OaFollowUpRecordQueryVo> selectByCustomerIdId(
|
||||||
|
@NotNull(message = "主键不能为空")
|
||||||
|
@PathVariable Long customerId) {
|
||||||
|
return R.ok(iOaFollowUpRecordService.selectByCustomerId(customerId));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,61 @@
|
|||||||
|
package com.ruoyi.oa.domain.bo;
|
||||||
|
|
||||||
|
import com.ruoyi.common.core.domain.BaseEntity;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
public class OaFollowUpRecordAddBo extends BaseEntity {
|
||||||
|
/**
|
||||||
|
* 客户id
|
||||||
|
*/
|
||||||
|
private Long customerId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 最后跟进时间
|
||||||
|
*/
|
||||||
|
private Date contactLastTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 最后跟进内容
|
||||||
|
*/
|
||||||
|
private String contactLastContent;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 下次跟进时间
|
||||||
|
*/
|
||||||
|
private Date contactNextTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 负责人id
|
||||||
|
*/
|
||||||
|
private Long ownerUserId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 跟进类型
|
||||||
|
*/
|
||||||
|
private Long type;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 涉及图片
|
||||||
|
*/
|
||||||
|
private String picUrls;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 涉及附件
|
||||||
|
*/
|
||||||
|
private String fileUrls;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 下次时间
|
||||||
|
*/
|
||||||
|
private Date nextTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 关联的商机编号数组
|
||||||
|
*/
|
||||||
|
private String businessIds;
|
||||||
|
}
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
package com.ruoyi.oa.domain.vo;
|
||||||
|
|
||||||
|
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@ExcelIgnoreUnannotated
|
||||||
|
public class OaFollowUpRecordQueryVo {
|
||||||
|
/**
|
||||||
|
* 跟进id
|
||||||
|
*/
|
||||||
|
private String followId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 类型
|
||||||
|
*/
|
||||||
|
private String type;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 跟进内容
|
||||||
|
*/
|
||||||
|
private String content;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 下次跟进时间
|
||||||
|
*/
|
||||||
|
private String nextTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 图片
|
||||||
|
*/
|
||||||
|
private String picUrls;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 附件
|
||||||
|
*/
|
||||||
|
private String fileUrls;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 涉及商机id
|
||||||
|
*/
|
||||||
|
private String businessIds;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 封存所有商机
|
||||||
|
*/
|
||||||
|
private List<OaBusinessVo> businessVoList;
|
||||||
|
}
|
||||||
@@ -1,11 +1,10 @@
|
|||||||
package com.ruoyi.oa.service;
|
package com.ruoyi.oa.service;
|
||||||
|
|
||||||
import com.ruoyi.oa.domain.OaBusiness;
|
|
||||||
import com.ruoyi.oa.domain.vo.OaBusinessVo;
|
import com.ruoyi.oa.domain.vo.OaBusinessVo;
|
||||||
import com.ruoyi.oa.domain.bo.OaBusinessBo;
|
import com.ruoyi.oa.domain.bo.OaBusinessBo;
|
||||||
import com.ruoyi.common.core.page.TableDataInfo;
|
import com.ruoyi.common.core.page.TableDataInfo;
|
||||||
import com.ruoyi.common.core.domain.PageQuery;
|
import com.ruoyi.common.core.domain.PageQuery;
|
||||||
import com.ruoyi.oa.domain.vo.OaFollowUpRecordVo;
|
|
||||||
import com.ruoyi.oa.domain.vo.OaProductVo;
|
import com.ruoyi.oa.domain.vo.OaProductVo;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
@@ -55,4 +54,9 @@ public interface IOaBusinessService {
|
|||||||
*/
|
*/
|
||||||
TableDataInfo<OaProductVo> getBusinessProducts(OaBusinessBo bo);
|
TableDataInfo<OaProductVo> getBusinessProducts(OaBusinessBo bo);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询CRM 批量商机
|
||||||
|
*/
|
||||||
|
List<OaBusinessVo> queryByIds(Collection<Long> list);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
package com.ruoyi.oa.service;
|
package com.ruoyi.oa.service;
|
||||||
|
|
||||||
import com.ruoyi.oa.domain.OaFollowUpRecord;
|
|
||||||
|
import com.ruoyi.oa.domain.bo.OaFollowUpRecordAddBo;
|
||||||
|
import com.ruoyi.oa.domain.vo.OaFollowUpRecordQueryVo;
|
||||||
import com.ruoyi.oa.domain.vo.OaFollowUpRecordVo;
|
import com.ruoyi.oa.domain.vo.OaFollowUpRecordVo;
|
||||||
import com.ruoyi.oa.domain.bo.OaFollowUpRecordBo;
|
import com.ruoyi.oa.domain.bo.OaFollowUpRecordBo;
|
||||||
import com.ruoyi.common.core.page.TableDataInfo;
|
import com.ruoyi.common.core.page.TableDataInfo;
|
||||||
@@ -48,4 +50,8 @@ public interface IOaFollowUpRecordService {
|
|||||||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||||||
|
|
||||||
List<OaFollowUpRecordVo> selectByBusinessIds(Collection<Long> list);
|
List<OaFollowUpRecordVo> selectByBusinessIds(Collection<Long> list);
|
||||||
|
|
||||||
|
OaFollowUpRecordQueryVo selectByCustomerId(Long customerId);
|
||||||
|
|
||||||
|
Boolean insertByAddBo(OaFollowUpRecordAddBo bo);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ import com.ruoyi.common.core.domain.PageQuery;
|
|||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
import com.ruoyi.oa.domain.vo.OaFollowUpRecordVo;
|
|
||||||
import com.ruoyi.oa.domain.vo.OaProductVo;
|
import com.ruoyi.oa.domain.vo.OaProductVo;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
@@ -133,4 +132,15 @@ public class OaBusinessServiceImpl implements IOaBusinessService {
|
|||||||
queryWrapper.eq(bo.getBusinessId() != null,"ob.business_id", bo.getBusinessId());
|
queryWrapper.eq(bo.getBusinessId() != null,"ob.business_id", bo.getBusinessId());
|
||||||
return TableDataInfo.build(baseMapper.getBusinessProducts(bo,queryWrapper));
|
return TableDataInfo.build(baseMapper.getBusinessProducts(bo,queryWrapper));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询CRM 批量商机
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public List<OaBusinessVo> queryByIds(Collection<Long> list) {
|
||||||
|
if (list == null || list.isEmpty()) {
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
return baseMapper.selectVoList(new LambdaQueryWrapper<OaBusiness>().in(OaBusiness::getBusinessId, list));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,11 @@ import com.ruoyi.common.core.domain.PageQuery;
|
|||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
|
import com.ruoyi.oa.domain.bo.OaFollowUpRecordAddBo;
|
||||||
|
import com.ruoyi.oa.domain.vo.OaFollowUpRecordQueryVo;
|
||||||
|
import com.ruoyi.oa.service.IOaBusinessService;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import com.ruoyi.oa.domain.bo.OaFollowUpRecordBo;
|
import com.ruoyi.oa.domain.bo.OaFollowUpRecordBo;
|
||||||
import com.ruoyi.oa.domain.vo.OaFollowUpRecordVo;
|
import com.ruoyi.oa.domain.vo.OaFollowUpRecordVo;
|
||||||
@@ -15,10 +19,8 @@ import com.ruoyi.oa.domain.OaFollowUpRecord;
|
|||||||
import com.ruoyi.oa.mapper.OaFollowUpRecordMapper;
|
import com.ruoyi.oa.mapper.OaFollowUpRecordMapper;
|
||||||
import com.ruoyi.oa.service.IOaFollowUpRecordService;
|
import com.ruoyi.oa.service.IOaFollowUpRecordService;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.*;
|
||||||
import java.util.List;
|
import java.util.stream.Collectors;
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Collection;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* CRM 跟进记录Service业务层处理
|
* CRM 跟进记录Service业务层处理
|
||||||
@@ -32,6 +34,9 @@ public class OaFollowUpRecordServiceImpl implements IOaFollowUpRecordService {
|
|||||||
|
|
||||||
private final OaFollowUpRecordMapper baseMapper;
|
private final OaFollowUpRecordMapper baseMapper;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IOaBusinessService oaBusinessService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询CRM 跟进记录
|
* 查询CRM 跟进记录
|
||||||
*/
|
*/
|
||||||
@@ -127,4 +132,37 @@ public class OaFollowUpRecordServiceImpl implements IOaFollowUpRecordService {
|
|||||||
|
|
||||||
return baseMapper.selectVoList(queryWrapper);
|
return baseMapper.selectVoList(queryWrapper);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 添加跟进记录
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Boolean insertByAddBo(OaFollowUpRecordAddBo bo) {
|
||||||
|
OaFollowUpRecord add = BeanUtil.toBean(bo, OaFollowUpRecord.class);
|
||||||
|
add.setContent(bo.getContactLastContent());
|
||||||
|
validEntityBeforeSave(add);
|
||||||
|
return baseMapper.insert(add) > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过顾客id获取跟进记录
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public OaFollowUpRecordQueryVo selectByCustomerId(Long customerId) {
|
||||||
|
//通过customerId查询出跟进记录
|
||||||
|
OaFollowUpRecord followUpRecord=baseMapper.selectOne(new LambdaQueryWrapper<OaFollowUpRecord>().eq(OaFollowUpRecord::getCustomerId,customerId));
|
||||||
|
|
||||||
|
OaFollowUpRecordQueryVo queryVo=BeanUtil.toBean(followUpRecord,OaFollowUpRecordQueryVo.class);
|
||||||
|
//通过businessIds查询出业务
|
||||||
|
if (StringUtils.isNotBlank(followUpRecord.getBusinessIds())){
|
||||||
|
//分割businessIds
|
||||||
|
List<Long> businessIds = Arrays.stream(followUpRecord.getBusinessIds().split(","))
|
||||||
|
.map(String::trim)
|
||||||
|
.map(Long::parseLong)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
//批量查询出业务
|
||||||
|
queryVo.setBusinessVoList(oaBusinessService.queryByIds(businessIds));
|
||||||
|
}
|
||||||
|
return queryVo;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user