huike汇客CRM项目实战-并肩作战

任务目录:

任务一:添加线索跟进记录

任务二:查询线索跟进记录列表

任务三:添加商机跟进记录

任务四:查询商机跟进记录列表

任务一:新增线索跟进记录

实体类:

@Data
public class TableDataInfo implements Serializable{
    
    private static final long serialVersionUID = 1L;

    /** 总记录数 */
    private long total;

    /** 列表数据 */
    private List<?> rows;

    /** 消息状态码 */
    private int code;

    /** 消息内容 */
    private String msg;

    private Map<String,Object> params;

    /**
     * 表格数据对象
     */
    public TableDataInfo()
    {
    }

    /**
     * 分页
     * 
     * @param list 列表数据
     * @param total 总记录数
     */
    public TableDataInfo(List<?> list, int total)
    {
        this.rows = list;
        this.total = total;
    }

Controller层

/**
     * 新增线索跟进记录
     */
    @PreAuthorize("@ss.hasPermi('clues:record:add')")
    @Log(title = "线索跟进记录", businessType = BusinessType.INSERT)
    @PostMapping
    public AjaxResult add(@RequestBody ClueTrackRecordVo tbClueTrackRecord) {
        tbClueTrackRecordService.addTrack(tbClueTrackRecord);
        return AjaxResult.success("操作成功!");
    }

Service层:

void addTrack(ClueTrackRecordVo tbClueTrackRecord);

实现层:

public void addTrack(ClueTrackRecordVo tbClueTrackRecord) {
        /*分析:线索跟进涉及到两张表的操作,一部分是客户基本信息(已经存在,所以用修改操作),一部分是跟进信息(不存在,所以用新增操作)*/
        //1.因为修改操作的参数要求TbClue,所以将ClueTrackRecordVo拷贝到TbClue中
        TbClue tbClue = new TbClue();
        BeanUtils.copyProperties(tbClueTrackRecord,tbClue);
        tbClue.setId(tbClueTrackRecord.getClueId());//TbClue表中线索为id,ClueTrackRecordVo表中线索为clueId
        tbClueMapper.updateTbClue(tbClue);

        //2.在跟进表中新增
        String username = SecurityUtils.getUsername();
        tbClueTrackRecordMapper.addTrackRecord(tbClueTrackRecord,username);
    }

Mapper层:

void addTrackRecord(@Param("tbClueTrackRecord") ClueTrackRecordVo tbClueTrackRecord, @Param("username") String username);

Mapper.xml

<insert id="addTrackRecord">
        INSERT INTO tb_clue_track_record(clue_id, create_by, subject, record, level, create_time, next_time) VALUES (#{tbClueTrackRecord.clueId},#{username},#{tbClueTrackRecord.subject},#{tbClueTrackRecord.record},#{tbClueTrackRecord.level},NOW(),#{tbClueTrackRecord.nextTime})
    </insert>

任务二:查询线索跟进记录列表

效果图:

实体类:

/**
 * 表格分页数据对象
 * 
 * 
 */
@Date
public class TableDataInfo implements Serializable{
    
    private static final long serialVersionUID = 1L;

    /** 总记录数 */
    private long total;

    /** 列表数据 */
    private List<?> rows;

    /** 消息状态码 */
    private int code;

    /** 消息内容 */
    private String msg;

    private Map<String,Object> params;

Controller层:

/**
     * 查询线索跟进记录列表
     */
    @PreAuthorize("@ss.hasPermi('clues:record:list')")
    @GetMapping("/list")
    public TableDataInfo list(@RequestParam("clueId")Long clueId) {

        List<TbClueTrackRecord> list=tbClueTrackRecordService.getRecords(clueId);//返回需要一个list集合类型的TbClueTrackRecord
        return getDataTable(list);//getDataTable类型是TableDataInfo,用于返回分页集合
    }

Service层:

List<TbClueTrackRecord> getRecords(Long clueId);

实现层:

@Override
    public List<TbClueTrackRecord> getRecords(Long clueId) {
        return tbClueTrackRecordMapper.selectTrack(clueId);
    }

Mapper层:

List<TbClueTrackRecord> selectTrack(Long clueId);

Mapper.xml:

<select id="selectTrack" resultType="com.huike.clues.domain.TbClueTrackRecord">
        SELECT id, clue_id, create_by, subject, record, level, create_time, type, next_time
        FROM tb_clue_track_record
        WHERE clue_id=#{clueId}
        ORDER BY create_time DESC
    </select>

任务三:新增商机跟进记录

实体类:

@Date
public class BusinessTrackVo {

    private Long businessId;

    /** 客户姓名 */
    private String name;

    /** 手机号 */
    private String phone;

    /** 渠道 */
    private Long channelId;

    /** 活动id */
    private Long activityId;

    /** 省 */
    @Excel(name = "省")
    private String provinces;

    /** 区 */
    @Excel(name = "区")
    private String city;

    /** 男或者女 */
    private String sex;

    /** 年龄 */
    private Integer age;

    /** 微信 */
    private String weixin;

    /** qq */
    private String qq;

    /** 意向等级 */
    private String level;

    /** 意向学科 */
    private String subject;

    /** 课程 */
    private Long courseId;

    /** 职业 */
    private String occupation;

    /** 学历 */
    private String education;

    /** 在职情况 */
    private String job;

    /** 薪资 */
    private String salary;

    /** 专业 */
    private String major;

    /** 希望薪资 */
    private String expectedSalary;

    /** 学习原因 */
    private String reasons;

    /** 职业计划 */
    private String plan;

    /** 计划时间 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "计划时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date planTime;

    /** 其他意向 */
    @Excel(name = "其他意向")
    private String otherIntention;


    @JsonFormat(pattern = "yyyy-MM-dd HH:mm")
    private Date nextTime;

    //沟通备注
    private String remark;

    //沟通重点
    private String keyItems;


    /** 沟通纪要 */
    private String record;

    /** 跟进状态 */
    private String trackStatus;

Controller层:

/**
     * 新增商机跟进记录
     */
    @PreAuthorize("@ss.hasPermi('business:record:add')")
    @Log(title = "商机跟进记录", businessType = BusinessType.INSERT)
    @PostMapping
    public AjaxResult add(@RequestBody BusinessTrackVo businessTrackVo){
        tbBusinessTrackRecordService.addBusinessTrack(businessTrackVo);
        return AjaxResult.success("操作成功!");
    }

Service层:

void addBusinessTrack(BusinessTrackVo businessTrackVo);

实现层:

@Override
    public void addBusinessTrack(BusinessTrackVo businessTrackVo) {
        TbBusiness tbBusiness = new TbBusiness();
        BeanUtils.copyProperties(businessTrackVo, tbBusiness);
        tbBusiness.setId(businessTrackVo.getBusinessId());
        tbBusinessMapper.updateTbBusiness(tbBusiness);

        String username = SecurityUtils.getUsername();
        tbBusinessTrackRecordMapper.addBusinessTrack(businessTrackVo, username);
    }

Mapper层:

void addBusinessTrack(@Param("businessTrackVo") BusinessTrackVo businessTrackVo,@Param("username") String username);

Mapper.xml:

<insert id="addBusinessTrack">
        INSERT INTO tb_business_track_record
        VALUES (null,#{businessTrackVo.businessId},#{username},#{businessTrackVo.keyItems},#{businessTrackVo.record},NOW(),#{businessTrackVo.trackStatus},#{businessTrackVo.nextTime})
    </insert>

任务四:查询商机跟进记录列表

效果图:

实体类:

@Date
public class TbBusinessTrackRecord extends BaseEntity
{
    private static final long serialVersionUID = 1L;

    /** 任务id */
    private Long id;

    /** 线索id */
    @Excel(name = "线索id")
    private Long businessId;

    @Excel(name = "跟进人")
    private String createBy;

    /** 沟通重点 */
    @Excel(name = "沟通重点")
    private String keyItems;

    private List<String> keys =new ArrayList<>();

    /** 沟通纪要 */
    @Excel(name = "沟通纪要")
    private String record;

    /** 跟进状态 */
    @Excel(name = "跟进状态")
    private String trackStatus;

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm")
    private Date nextTime;

Controller层:

/**
     * 查询商机跟进记录列表
     */
    @PreAuthorize("@ss.hasPermi('business:record:list')")
    @GetMapping("/list")
    public  AjaxResult list(@RequestParam("businessId")Long id){

        List<TbBusinessTrackRecord> tbBusinessTrackRecordList = tbBusinessTrackRecordService.selectBusinessTrack(id);
        return AjaxResult.success(tbBusinessTrackRecordList);
    }

Service层:

List<TbBusinessTrackRecord> selectBusinessTrack(Long id);

实现层:

@Override
    public List<TbBusinessTrackRecord> selectBusinessTrack(Long id) {

        //思考:因为tbBusinessTrackRecordMapper获取的对象集合不包括返回需要的keys字段,所以遍历对象,将对象的KeyItems值查询对应的keys
        //1.获取TbBusinessTrackRecord集合
        List<TbBusinessTrackRecord> tbBusinessTrackRecordList = tbBusinessTrackRecordMapper.selectBusinessTrack(id);

        //2.遍历集合
        for (TbBusinessTrackRecord tbBusinessTrackRecord : tbBusinessTrackRecordList) {
            //2.将tbBusinessTrackRecord对象中的keyItems取出
            String[] split = tbBusinessTrackRecord.getKeyItems().split(",");
            //3.将tbBusinessTrackRecord对象中的keys取出
            List<String> keys = tbBusinessTrackRecord.getKeys();

            //3.将split赋值给tbBusinessTrackRecord中的keys
            for (String s : split) {
                String key = sysDictDataService.selectDictLabel("communication_point", s);//通过sysDictDataService获取type(communication_point)和value(2,4,5)对应的label(价格,师资....)
                keys.add(key);
            }
        }
        return tbBusinessTrackRecordList;
}

Mapper层:

List<TbBusinessTrackRecord> selectBusinessTrack(Long id);

Mapper.xml:

<sql id="Base_Column_List">
        create_time,business_id,key_items,track_status,next_time,record,create_by
    </sql>
    <select id="selectBusinessTrack" resultType="com.huike.business.domain.TbBusinessTrackRecord">
        SELECT <include refid="Base_Column_List"/>
        FROM tb_business_track_record
        WHERE business_id=#{businessId}
        ORDER BY create_time DESC
    </select>

  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值