当前位置:网站首页>第3章业务功能开发(线索关联市场活动,插入数据并查询)
第3章业务功能开发(线索关联市场活动,插入数据并查询)
2022-07-29 20:38:00 【做一道光】
客户需求
用户在线索明细页面,点击"关联市场活动"按钮,弹出线索关联市场活动的模态窗口;
用户在线索关联市场活动的模态窗口,输入搜索条件,每次键盘弹起,根据名称模糊查询市场活动,把所有符合条件的市场活动显示到列表中;
用户选择要关联的市场活动,点击"关联"按钮,完成线索关联市场活动的功能.
*每次至少关联一个市场活动
*同一个市场活动只能跟同一个线索关联一次
*关联成功之后,关闭模态窗口,刷新已经关联过的市场活动列表
*关联失败,提示信息,模态窗口不关闭,已经关联过的市场活动列表也不刷新
功能实现
插入市场活动可以单选或多选,参数为集合类型,集合中的每个数据封装为一个实体类。
如果成功插入一条或多条数据,则根据市场活动的ids来查询市场活动表的信息,并把该信息拼接在tbody中,实时显示在页面上。
1.ClueActivityRelationMapper接口
/**
* 批量保存线索和市场活动的关联关系
* @param list
* @return
*/
int insertClueActivityRelationByList(List<ClueActivityRelation> list);ClueActivityRelationMapperImpl.xml文件
<insert id="insertClueActivityRelationByList" parameterType="com.it.crm.workbench.entity.ClueActivityRelation">
insert into tbl_clue_activity_relation(id,clue_id,activity_id)
values
<foreach collection="list" item="obj" separator=",">
(#{obj.id},#{obj.clueId},#{obj.activityId})
</foreach>
</insert>2.ClueActivityRelationService接口
![]()
ClueActivityRelationServiceImpl类

3.ActivityMapper接口
/**
* 根据ids查询市场活动的明细信息
* @param ids
* @return
*/
List<Activity> selectActivityForDetailByIds(String[] ids);ActivityMapper.xml文件
<select id="selectActivityForDetailByIds" parameterType="String" resultMap="BaseResultMap">
select a.id,a.name,a.start_date,a.end_date,u.name as owner
from tbl_activity a
join tbl_user u on a.owner=u.id
where a.id in
<foreach collection="array" item="id" separator="," open="(" close=")">
#{id}
</foreach>
</select>4.ActivityService接口

ActivityServiceImpl类

5.ClueController
@RequestMapping(value = "/workbench/clue/saveBund.do")
@ResponseBody
public Object saveBund(String[] activityId,String clueId){
//封装参数
ClueActivityRelation car=null;
List<ClueActivityRelation> relationList=new ArrayList<>();
for (String ai:activityId){
car=new ClueActivityRelation();
car.setActivityId(ai);
car.setClueId(clueId);
car.setId(UUIDUtils.getUUID());
relationList.add(car);
}
ReturnObject returnObject=new ReturnObject();
try{
//调用service方法,批量保存线索和市场活动的关联关系
int i = clueActivityRelationService.saveCreateClueActivityRelationByList(relationList);
if (i>0){
returnObject.setCode(Contants.RETURN_OBJECT_CODE_SUCCESS);
List<Activity> activityList = activityService.queryActivityForDetailByIds(activityId);
returnObject.setReturnData(activityList);
}else {
returnObject.setCode(Contants.RETURN_OBJECT_CODE_FAIL);
returnObject.setMessage("系统忙,请稍后再试!");
}
}catch (Exception e){
e.printStackTrace();
returnObject.setCode(Contants.RETURN_OBJECT_CODE_FAIL);
returnObject.setMessage("系统忙,请稍后再试!");
}
return returnObject;
}6.clue的detail.jsp页面
js
//给关联按钮添加单击事件
$("#saveBundActivityBtn").click(function () {
//收集参数
//获取列表中所有被选择的checkbox
var checkIds=$("#tBody input[type='checkbox']:checked");
//表单验证
if (checkIds.size()==0){
alert("请选择要关联的市场活动!");
return;
}
var ids="";
$.each(checkIds,function () {
ids+="activityId="+this.value+"&";
});
ids+="clueId=${clue.id}";
//发送请求
$.ajax({
url:"workbench/clue/saveBund.do",
type:'post',
data:ids,
dataType:'json',
success:function (data) {
if (data.code=="1"){
//关闭模态窗口
$("#bundModal").modal("hide");
//刷新已经关联过的市场活动列表
var htmlStr="";
$.each(data.returnData,function (index,obj) {
htmlStr+="<tr>";
htmlStr+="<td>"+obj.name+"</td>";
htmlStr+="<td>"+obj.startDate+"</td>";
htmlStr+="<td>"+obj.endDate+"</td>";
htmlStr+="<td>"+obj.owner+"</td>";
htmlStr+="<td><a href=\"javascript:void(0);\" activityId=\""+obj.id+"\" style=\"text-decoration: none;\"><span class=\"glyphicon glyphicon-remove\"></span>解除关联</a></td>";
htmlStr+="</tr>";
});
$("#relationTbody").append(htmlStr);
}else {
//提示信息
alert(data.message);
$("#bundModal").modal("show");
}
}
});
});html
<!-- 市场活动 -->
<div>
<div style="position: relative; top: 60px; left: 40px;">
<div class="page-header">
<h4>市场活动</h4>
</div>
<div style="position: relative;top: 0px;">
<table class="table table-hover" style="width: 900px;">
<thead>
<tr style="color: #B3B3B3;">
<td>名称</td>
<td>开始日期</td>
<td>结束日期</td>
<td>所有者</td>
<td></td>
</tr>
</thead>
<tbody id="relationTbody">
<c:forEach items="${activityList}" var="activity">
<tr>
<td>${activity.name}</td>
<td>${activity.startDate}</td>
<td>${activity.endDate}</td>
<td>${activity.owner}</td>
<td><a href="javascript:void(0);" activityId="${activity.id}" style="text-decoration: none;"><span class="glyphicon glyphicon-remove"></span>解除关联</a></td>
</tr>
</c:forEach>
</tbody>
</table>
</div>
<div>
<a href="javascript:void(0);" id="bundActivityBtn" style="text-decoration: none;"><span class="glyphicon glyphicon-plus"></span>关联市场活动</a>
</div>
</div>
</div>功能测试
搜索出市场活动后,选择需要与该线索关联的市场活动,
选中活动项,点击关联,关闭窗口,页面拼接出选中的市场活动,并显示出来

边栏推荐
猜你喜欢

The sword refers to Offer II 097. Number of subsequences

4. Implementation Guide for GET_ENTITYSET Method of SAP ABAP OData Service Data Provider Class

MySQL Data Query - Simple Query
![LeetCode 593 有效的正方形[数学] HERODING的LeetCode之路](/img/c2/34624c9c7693ba40d0b3724c0db611.png)
LeetCode 593 有效的正方形[数学] HERODING的LeetCode之路

240. 搜索二维矩阵 II
![[ACTF2020 新生赛]Exec 1](/img/1e/a3c19d514207e6965d09c66b86e519.png)
[ACTF2020 新生赛]Exec 1

336. 回文对

第二好PyTorch新手课程;论文写作指南;使用µGo语言开发迷你编译器;超高效使用Transformer的扩展库;前沿论文 | ShowMeAI资讯日报

【无标题】

一 JS中Promise用法、二闭包的概念与用法、三对象创建的四种方式与区区别、四 如何声明一个类
随机推荐
Sasser virus source code (ransomware source code)
2022了你还不会『低代码』?数据科学也能玩转Low-Code啦!
错误解决:Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255]
The difference between analog, digital and switching
:style中颜色使用函数动态获取赋值
Minimal jvm source code analysis
ES6用法,面试大全
LeetCode 0144. 二叉树的前序遍历:二叉树必会题
MySQL Data Query - Union Query
关于 golang 错误处理的一些优化想法
940. 不同的子序列 II
打破原则!MongoDB 引入 SQL?
太卷了,企业级的智慧物业系统,也完全开源....
七个易犯的 IT 管理错误—以及如何避免
PEG-PEI共聚物/DNA复合物|甘草次酸修饰的长循环阳离子脂质体DNA复合物|解析说明
VR直播营销需求增加,数据模块为我们铺路
南华早报 | 助力亚洲最具公信力报章实现AD域自动化管理
Dry goods!Cooperative Balance in Federated Learning
如何进入董事会:给CIO的十条建议
MySQL数据查询 - 简单查询