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)@PostMappingpublic 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表中线索为clueIdtbClueMapper.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集合类型的TbClueTrackRecordreturn getDataTable(list);//getDataTable类型是TableDataInfo,用于返回分页集合}

Service层:

List<TbClueTrackRecord> getRecords(Long clueId);

实现层:

@Overridepublic 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_timeFROM tb_clue_track_recordWHERE 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)@PostMappingpublic AjaxResult add(@RequestBody BusinessTrackVo businessTrackVo){tbBusinessTrackRecordService.addBusinessTrack(businessTrackVo);return AjaxResult.success("操作成功!");}

Service层:

void addBusinessTrack(BusinessTrackVo businessTrackVo);

实现层:

@Overridepublic 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_recordVALUES (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);

实现层:

@Overridepublic 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中的keysfor (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_recordWHERE business_id=#{businessId}ORDER BY create_time DESC</select>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/32467.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CSDN分类专栏操作演示

专栏没有消失&#xff01; CSDN仍然保留专栏功能&#xff0c;与分类功能合并&#xff0c;改名为分类专栏。文章目录 分类专栏的入口分类专栏的功能演示如何新建一个二级分类专栏如何快速编辑分类专栏名称在哪管理分类专栏内的文章如何编辑分类专栏内的单篇文章如何对分类专栏内…

重复造轮子的百模大战:两极热,中间空

文&#xff5c;光锥智能&#xff0c;作者&#xff5c;周文斌&#xff0c;编辑&#xff5c;王一粟 “不敢下手&#xff0c;现在中国还没跑出来一家绝对有优势的大模型&#xff0c;上层应用没法投&#xff0c;担心押错宝。”投资人Jucy&#xff08;化名&#xff09;向光锥智能表…

“腰部”大模型,活在故事里

撰文 | 文烨豪 编辑 | 吴先之 AIGC浪潮下&#xff0c;“模”力正在席卷科技语境。 百度、阿里等巨头们接连出牌的同时&#xff0c;体量略逊一筹的知乎、小红书、云从科技等玩家&#xff0c;亦试图挤进赛道——大模型的牌桌&#xff0c;正变得愈发拥挤。 当下的千模、万模大战…

被 GPT-4 Plus 账号价格劝退了!

很多朋友想体验OpenAI官网GPT-4 Plus账号&#xff0c;但是GPT-4 Plus是按月充值付费的。GPT-4 Plus账号没有Usage额度的概念。而且最新的GPT-4 Plus开始灰度已经支持联网&#xff0c;可以获取最新的实时信息。不用像普通号需要安装第三方插件&#xff0c;才能用联网。GPT-4 Plu…

梁宁:VisionPro、GPT、Web3三件套齐备,元宇宙开启

本文内容整理自图灵社区对谈栏目直播&#xff0c;主题为 ChatGPT 真需求&#xff0c;从产品的第一性原理解析。 上篇内容回顾&#xff1a;梁宁&#xff1a;为什么中国没有像 ChatGPT 和 Vision Pro 这样的创新产品&#xff1f; 梁宁&#xff0c;产品战略专家&#xff0c;曾任湖…

已解决This key is associated with a deactivated account. If you feel this is an error, contact us throu

已解决This key is associated with a deactivated account. If you feel this is an error, contact us through our help center at help.openai.com. 文章目录 报错问题报错翻译报错原因解决方法千人全栈VIP答疑群联系博主帮忙解决报错 报错问题 粉丝群里面的一个小伙伴遇…

已解决raise JSONDecodeError(“Expecting value”, s, err.value) from None

已解决&#xff08;Python解析json文件报错&#xff09;raise JSONDecodeError(“Expecting value”, s, err.value) from None json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0) 文章目录 报错代码报错翻译报错原因解决方法千人全栈VIP答疑群联系博主…

使用ChatGPT帮助我们编码的10种场景

文章目录 1、技术搜索2、生成常用工具函数3、帮助解读代码4、添加注释5、优化代码6、Vue2 转 Vue37、Vue 转 React8、补充 TypeScript 类型9、生成文档10、工具配置总结 ChatGPT 的出现&#xff0c;彻底改变的很多代码开发的方式&#xff0c;特别是通用型的代码&#xff0c;使用…

【会讯易】4月线下活动分享

4月&#xff0c;全国会展活动恢复的势头愈加猛烈&#xff0c;师盛也马不停蹄&#xff0c;足迹遍布北京、上海、广州、深圳、杭州、三亚、南京、苏州、绍兴等地。在活动紧凑、地域跨度较大的情况下&#xff0c;师盛充分发挥16年的现场运营经验和能力&#xff0c;合理规划人员和物…

国际短信通道短信后台软件路由流程—移讯云短信系统

国际短信通道短信后台源码路由流程—移讯云短信系统 用户模板审核和签名审核 可审核用户提交过来的短信模板&#xff0c;可审核用户提交过来的签名&#xff0c;可管理用户提交过来的模板和签名进行编辑删除和修改&#xff0c;支持用户企业认证和个人认证 短信号码分拣功能介绍…

android短信和彩信探秘threads

android源代码在 彩信sms 表和彩信 pdu表&#xff0c;增加了一个触发器 CREATE TRIGGER delete_obsolete_threads_pdu AFTER DELETE ON pdu BEGIN DELETE FROM threads WHERE _id old.thread_id AND _id NOT IN (SELECT thread_id FROM sms UNION SEL…

中国最容易和最难被GPT所代替的TOP25职业!

ChatGPT狂飙160天&#xff0c;世界已经不是之前的样子。 我新建了人工智能中文站https://tmqcjr.com 每天给大家更新可用的国内可用chatGPT资源 OpenAI 研究人员曾发文称「约 80% 美国人的工作将被 AI 影响」。 文章的结论是&#xff0c;至少80%的美国劳动力会受到影响&#xf…

AI帮我搞科研-网站汇总

检索相关论文&#xff1a;https://www.connectedpapers.com/ 说明&#xff1a;Connected Papers 不是引文树。为了创建每个图表&#xff0c;网站分析了大约 50,000 篇论文&#xff0c;并选择了几十篇与原始论文有最强联系的论文。在图中&#xff0c;论文根据它们的相似性进行…

android6 wifi耗电,耗电太快?快来看不一样的安卓手机省电攻略

前阵子在官方授权店把我的iPhone电池换了个新的&#xff0c;感觉自己的手机又活过来了!那么问题来了&#xff0c;咱们的安卓手机该怎么省电呐~ 所以我发现其实最简单粗暴的方法就是 换电池&#xff01;别打我…我就是皮一下… 下面就是知识点了&#xff0c;快点操作起来吧~ 首先…

股票价格趋势预测与量化投资案例可视化演示系统(附代码)

摘要 随着全球经济与股市的快速发展&#xff0c;股票投资成为了民众们常用的理财方式之一。近年来&#xff0c;量化投资凭借其优良的纪律性、准确性、时效性和系统性等优势受到越来越多的关注。与西方成熟市场相比&#xff0c;我国量化投资还处于起步阶段&#xff0c;存在一些…

基于大数据的股票数据可视化分析与预测系统

温馨提示&#xff1a;文末有 CSDN 平台官方提供的博主 Wechat / QQ 名片 :) 1. 项目简介 股票市场行情分析与预测是数据分析领域里面的重头戏&#xff0c;其符合大数据的四大特征&#xff1a;交易量大、频率高、数据种类多、价值高。 本项目基于 Python 利用网络爬虫技术从某财…

TensorFlow神经网络实现股票预测

目录 1、数据来源 2、数据可视化 3、神经网络设计 神经网络&#xff08;NeuralNetworks&#xff09;是一种用训练数据拟合目标函数的黑箱模型&#xff0c;只要数据量足够大&#xff0c;它可以拟合出输入到输出之间的任意函数关系。 本篇博文将使用TensorFlow神经网络进行股…

火狐插件FoxyProxy的使用方法

以前自己挖漏洞使用火狐burp抓包测试&#xff0c;但是每次浏览器开代理老麻烦了 今天同事无意间给我提了这个插件FoxyProxy 很实用&#xff0c;下面是使用教程&#xff0c;很直白很详细 首先安装火狐插件FoxyProxy 然后选择Options开始配置 . 然后重启浏览器 选中Burpsuite …

如何解决:FIREFOX的副本已经打开。一次只能打开一份FIREFOX

1.问题 由于电脑卡机使Firefox自动退出之后&#xff0c;重新点击Firefox图标无法打开程序在mac版Firefox中打开时提示&#xff1a;“Firefox的副本已经打开。一次只能打开一份Firefox” 2.解决 重启没解决使用终端中断程序也无法解决活动监视器中中断程序解决 3.方法 1.其他…

Firefox浏览器多账号登陆方法

1、需要安装插件Multifox&#xff0c;由于此插件已经从firefox官网&#xff08;插件&#xff09;上下架&#xff0c;因此需要从Multifox的github上直接下载 2、下载地址&#xff1a;https://github.com/hultmann/multifox/releases/tag/3.2.3 3、直接选则“ multifox-3.2.3-fx.…