客户管理系统(SSM版):解除线索关联市场活动

news/2024/5/14 14:01:13/文章来源:https://blog.csdn.net/weixin_59334478/article/details/127268267

一、客户需求:

用户在线索明细页面,点击某一个"解除关联"按钮,弹出确认解除的窗口;

用户点击"确定"按钮,完成解除线索关联市场活动的功能.

*解除成功之后,刷新已经关联的市场活动列表

*解除失败,提示信息,列表也不刷新

二、功能实现

1.首先从底层开始编写代码,在com.it.crm.workbench.mapper.ClueActivityRelationMapper目录下编写代码,ClueActivityRelationMapper接口

详细代码如下所示

package com.it.crm.workbench.mapper;import com.it.crm.workbench.entity.ClueActivityRelation;import java.util.List;public interface ClueActivityRelationMapper {/*** This method was generated by MyBatis Generator.* This method corresponds to the database table tbl_clue_activity_relation** @mbggenerated Fri Jul 29 14:06:01 CST 2022*/int deleteByPrimaryKey(String id);/*** This method was generated by MyBatis Generator.* This method corresponds to the database table tbl_clue_activity_relation** @mbggenerated Fri Jul 29 14:06:01 CST 2022*/int insert(ClueActivityRelation record);/*** This method was generated by MyBatis Generator.* This method corresponds to the database table tbl_clue_activity_relation** @mbggenerated Fri Jul 29 14:06:01 CST 2022*/int insertSelective(ClueActivityRelation record);/*** This method was generated by MyBatis Generator.* This method corresponds to the database table tbl_clue_activity_relation** @mbggenerated Fri Jul 29 14:06:01 CST 2022*/ClueActivityRelation selectByPrimaryKey(String id);/*** This method was generated by MyBatis Generator.* This method corresponds to the database table tbl_clue_activity_relation** @mbggenerated Fri Jul 29 14:06:01 CST 2022*/int updateByPrimaryKeySelective(ClueActivityRelation record);/*** This method was generated by MyBatis Generator.* This method corresponds to the database table tbl_clue_activity_relation** @mbggenerated Fri Jul 29 14:06:01 CST 2022*/int updateByPrimaryKey(ClueActivityRelation record);/*** 批量保存线索和市场活动的关联关系* @param list* @return*/int insertClueActivityRelationByList(List<ClueActivityRelation> list);/*** 根据clueId和activityId删除线索和市场活动的关联关系* @return*/int deleteClueActivityRelationByClueIdActivityId(ClueActivityRelation clueActivityRelation);/*** 根据clueId来查询线索和市场活动的关联关系* @param clueId* @return*/List<ClueActivityRelation> selectClueActivityRelationByClueId(String clueId);/*** 根据clueId来删除线索和市场活动的关联关系* @param clueId* @return*/int deleteClueActivityRelationByClueId(String clueId);}

2.ClueActivityRelationMapper.xml文件

详细代码如下所示

<?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.it.crm.workbench.mapper.ClueActivityRelationMapper" ><resultMap id="BaseResultMap" type="com.it.crm.workbench.entity.ClueActivityRelation" ><!--WARNING - @mbggeneratedThis element is automatically generated by MyBatis Generator, do not modify.This element was generated on Fri Jul 29 14:06:01 CST 2022.--><id column="id" property="id" jdbcType="CHAR" /><result column="clue_id" property="clueId" jdbcType="CHAR" /><result column="activity_id" property="activityId" jdbcType="CHAR" /></resultMap><sql id="Base_Column_List" ><!--WARNING - @mbggeneratedThis element is automatically generated by MyBatis Generator, do not modify.This element was generated on Fri Jul 29 14:06:01 CST 2022.-->id, clue_id, activity_id</sql><select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.String" ><!--WARNING - @mbggeneratedThis element is automatically generated by MyBatis Generator, do not modify.This element was generated on Fri Jul 29 14:06:01 CST 2022.-->select <include refid="Base_Column_List" />from tbl_clue_activity_relationwhere id = #{id,jdbcType=CHAR}</select><delete id="deleteByPrimaryKey" parameterType="java.lang.String" ><!--WARNING - @mbggeneratedThis element is automatically generated by MyBatis Generator, do not modify.This element was generated on Fri Jul 29 14:06:01 CST 2022.-->delete from tbl_clue_activity_relationwhere id = #{id,jdbcType=CHAR}</delete><insert id="insert" parameterType="com.it.crm.workbench.entity.ClueActivityRelation" ><!--WARNING - @mbggeneratedThis element is automatically generated by MyBatis Generator, do not modify.This element was generated on Fri Jul 29 14:06:01 CST 2022.-->insert into tbl_clue_activity_relation (id, clue_id, activity_id)values (#{id,jdbcType=CHAR}, #{clueId,jdbcType=CHAR}, #{activityId,jdbcType=CHAR})</insert><insert id="insertSelective" parameterType="com.it.crm.workbench.entity.ClueActivityRelation" ><!--WARNING - @mbggeneratedThis element is automatically generated by MyBatis Generator, do not modify.This element was generated on Fri Jul 29 14:06:01 CST 2022.-->insert into tbl_clue_activity_relation<trim prefix="(" suffix=")" suffixOverrides="," ><if test="id != null" >id,</if><if test="clueId != null" >clue_id,</if><if test="activityId != null" >activity_id,</if></trim><trim prefix="values (" suffix=")" suffixOverrides="," ><if test="id != null" >#{id,jdbcType=CHAR},</if><if test="clueId != null" >#{clueId,jdbcType=CHAR},</if><if test="activityId != null" >#{activityId,jdbcType=CHAR},</if></trim></insert><update id="updateByPrimaryKeySelective" parameterType="com.it.crm.workbench.entity.ClueActivityRelation" ><!--WARNING - @mbggeneratedThis element is automatically generated by MyBatis Generator, do not modify.This element was generated on Fri Jul 29 14:06:01 CST 2022.-->update tbl_clue_activity_relation<set ><if test="clueId != null" >clue_id = #{clueId,jdbcType=CHAR},</if><if test="activityId != null" >activity_id = #{activityId,jdbcType=CHAR},</if></set>where id = #{id,jdbcType=CHAR}</update><update id="updateByPrimaryKey" parameterType="com.it.crm.workbench.entity.ClueActivityRelation" ><!--WARNING - @mbggeneratedThis element is automatically generated by MyBatis Generator, do not modify.This element was generated on Fri Jul 29 14:06:01 CST 2022.-->update tbl_clue_activity_relationset clue_id = #{clueId,jdbcType=CHAR},activity_id = #{activityId,jdbcType=CHAR}where id = #{id,jdbcType=CHAR}</update><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><delete id="deleteClueActivityRelationByClueIdActivityId" parameterType="com.it.crm.workbench.entity.ClueActivityRelation">delete from tbl_clue_activity_relationwhere clue_id=#{clueId} and activity_id=#{activityId}</delete><select id="selectClueActivityRelationByClueId" parameterType="string" resultMap="BaseResultMap">
select id, clue_id, activity_id
from tbl_clue_activity_relation
where clue_id=#{clueId}</select><delete id="deleteClueActivityRelationByClueId" parameterType="string">delete from tbl_clue_activity_relationwhere clue_id=#{clueId}</delete></mapper>

3.编写服务层代码

ClueActivityRelationService类

package com.it.crm.workbench.service;import com.it.crm.workbench.entity.ClueActivityRelation;import java.util.List;public interface ClueActivityRelationService {int saveCreateClueActivityRelationByList(List<ClueActivityRelation> list);int removeClueActivityRelationByClueIdActivityId(ClueActivityRelation clueActivityRelation);
}

4.在ClueController类中编写控制层方法

 @RequestMapping(value = "/workbench/clue/removeBind.do")@ResponseBodypublic Object removeBind(ClueActivityRelation clueActivityRelation){ReturnObject returnObject=new ReturnObject();try {//调用service层方法,删除线索和市场活动的关联关系int i = clueActivityRelationService.removeClueActivityRelationByClueIdActivityId(clueActivityRelation);//根据返回信息,生成响应信息if (i>0){returnObject.setCode(Contants.RETURN_OBJECT_CODE_SUCCESS);}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;}

5.进入clue目录下的detail.jsp

//给所有的“解除关联”按钮添加单击事件$("#relationTbody").on("click","a",function () {//收集参数var activityId=$(this).attr("activityId");var clueId="${clue.id}";if (window.confirm("确认删除吗?")){//发送请求$.ajax({url:"workbench/clue/removeBind.do",type:'post',data:{activityId:activityId,clueId:clueId},dataType:'json',success:function (data) {if (data.code=="1"){//删除数据项,并刷新数据$("#tr_"+activityId).remove();}else {alert(data.message);}}});}});

6.测试功能

这是数据库中原本有的3条数据

 

 选择一个市场活动点击解除关联

 

点击确认后,市场活动删除成功

进入到数据库表中查看数据,只剩下两条数据

 功能实现成功

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

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

相关文章

openjdk源码准备编译和依赖

在Windows系统上进行openjdk的源码编译 一、准备编译需要的装备 1.首先下载一个软件Cygwin。这个软件是一个在Windows平台下模拟Linux运行环境的软件&#xff0c;提供了一系列的Linux的运行命令。&#xff08;解释这些&#xff0c;有兴趣的自己百度&#xff09; 下载的路径点…

Web APIs:事件基础

事件三要素 1.事件是有三部分组成 事件源 事件类型 事件处理程序 &#xff08;1&#xff09;事件源 事件被触发的对象 谁 按钮 &#xff08;2&#xff09;事件类型 如何触发 什么事件 比如鼠标点击&#xff08;click&#xff09;&#xff0c;经过 还是键盘按下 &…

TRC丨艾美捷TRC D-Abequose说明书

艾美捷TRC D-Abequose是一种甜味剂和增味剂配方&#xff0c;适用于食品、饮料、药物和化妆品用途。 艾美捷TRC D-Abequose化学性质&#xff1a; 目录号A010205 化学名称D-Abequose CAS 编号56816-60-5 分子式C₆H₁₂O₄ 分子量148.16 贮存4C 溶解度甲醇&#xff08;少许…

【蓝桥杯国赛】H 机房

蓝桥杯2022年第十三届决赛真题-机房 - C语言网 (dotcpp.com) 题意&#xff1a; 一共有n个结点&#xff0c;n-1条边&#xff0c;因此这是棵树 信息经过一个结点&#xff0c;就会产生一定的延迟&#xff0c;具体延迟的时间等于该结点的度数 每次询问树上两个结点&#xff0c;问…

c++学习

C学习Static变量生存期和作用域静态局部变量类的继承多态虚函数纯虚函数&#xff08;接口&#xff09;可见性数组字符串constmutable成员初始化列表三元操作符在堆、栈上创建C实例化对象C运算符和其重载thisC对象的生存期智能指针uniqueptr&#xff08;作用域指针&#xff09;s…

Ubuntu安装微信

1.安装wine sudo dpkg --add-architecture i386 sudo mkdir -pm755 /etc/apt/keyrings sudo wget -O /etc/apt/keyrings/winehq-archive.key https://dl.winehq.org/wine-builds/winehq.key//根据你的系统执行不同的命令 Ubuntu 22.04 sudo wget -NP /etc/apt/sources.list.d/…

快乐刷课---Tampermonkey下载使用

TampermonkeyChrome插件伴侣下载资源&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1IIzB8N2iPW2RjUO2pqDVHw?pwd6666 提取码&#xff1a;6666 1. 下载 Tampermonkey 进入油猴的官网Tampermonkey&#xff0c;下载你使用的浏览器对应的版本 以谷歌浏览器为例&am…

如何计算维吉尼亚密码?Java实现维吉尼亚密码的加密解密算法

文章目录如何计算维吉尼亚密码&#xff1f;Java实现加密算法Java实现解密算法参考博客如何计算维吉尼亚密码&#xff1f; 计算维吉尼亚密码有2种方式&#xff0c;一种是根据密码表查找&#xff0c;另一种是手动计算方法。 1.密码表查找法 第一行是密钥&#xff0c;第一列是明文…

CH579 Cortex-M0 内核低功耗蓝牙 MCU 集成 ARM 内核 32 位微控制器

概述 CH579 是集成 BLE 无线通讯的 ARM 内核 32 位微控制器。片上集成低功耗蓝牙 BLE 通讯模块、以太网控制器及收发器、全速 USB 主机和设备控制器及收发器、段式 LCD 驱动模块、ADC、触摸按键检测模块、RTC 等丰富的外设资源。 特点 32 位 ARM Cortex-M0 内核&#xff0c;…

Arduino常用函数(二)

数学函数 1、min(x,y)函数的作用是返回x&#xff0c;y两者中较小的。 2、max(x,y)函数的作用是返回x&#xff0c;y两者中较大的。 3、abs(x)函数的作用是获取x的绝对值。 4、constrain(amt,low,high)函数的工作过程是&#xff0c;如果amt小于low&#xff0c;则返回low&…

Pytho07--面向对象2

之前我们已经知道了面向对象的概念及在python中创建空类&#xff0c;带方法的类&#xff0c;带初始化方法的类&#xff0c;带实例化方法的类等并认识了类的成员。在我们将其与Java的代码进行对比后发现了python确实有它的方便之处。面向对象的内容不止之前文章中提到的那些&…

IDEA+Tomcat——前端输入数据乱码问题

IDEATomcat——前端输入数据乱码问题 给别人远程部署项目的时候&#xff0c;发现比较老的项目会出现接收前端数据是乱码的问题&#xff0c;但这个项目在我自己的电脑上却是正常的&#xff0c;通过对比发现&#xff0c;IDEA版本或Tomcat版本不同及过低是造成此问题的主要原因&am…

【数学与算法】最小生成树Spanning Trees

链接 无向图&#xff1a; 无向图的意思是&#xff0c;边没有方向。 树&#xff1a; 树是一类特殊的图&#xff0c;树是由节点和无向边构成的&#xff1b; 所有的树都是无向图&#xff0c;但是无向图未必是树&#xff1b; 树有一些性质&#xff0c;但并非所有图都有这些性质…

webrtc防抖动策略NetEq

什么是NetEq:进行抖动控制和丢包隐藏,让音频更平滑。 NetEq的位置 消除抖动的基本原理 NetEq整体架构 NetEq用到的几种缓冲区 NetEq的MCU与DSP NetEq的位置: 网络抖动的计算方式: 两个包在发送端的时间间隔为S,在接收端的间隔为R,那么抖动为J=S-R。 NetEq缓冲区设置多…

golang中struct

前面已经介绍的数组&#xff0c;slice,map有一定的相同之处&#xff0c;即处理的都是相同类型的元素&#xff0c;map中的key和value属于相同的类型&#xff0c;但如果要把多个类型的元素放到一起进行处理&#xff0c;则要使用go语言为我们提供的数据结构struct struct非常适合定…

【Arcgis操作】模块化(批量、自动化)计算多个图层的面积

有很多个图层的面积要计算&#xff0c;如果采用普通的方法&#xff0c;需要给每个图层添加【字段】&#xff0c;然后再挨个计算&#xff0c;图层少的话还好&#xff0c;图层太多的话&#xff0c;很麻烦&#xff0c;很累。 那么&#xff0c;有没有一种方法&#xff0c;能够批量…

OpenCV-Python学习(7)—— OpenCV 轨迹栏操作和键盘响应操作

1. 知识点 cv.namedWindow() 创建一个窗口&#xff1b;cv.createTrackbar() 创建一个轨迹栏&#xff1b;cv.getTrackbarPos() 获取对应轨迹栏的轨迹位置&#xff1b;cv.waitKey() 键盘操作返回对应的key。 2. cv.namedWindow() 函数说明 函数使用 cv.namedWindow(winname, …

【每日算法题】最后一个单词的长度(简单)

今天开始学一学算法✨&#xff0c;前两天研究了下算法&#xff0c;发现算法和数据结构是程序的灵魂&#xff0c;这句话可真没错。 今天先从简单的开始吧&#x1f601;&#xff0c;LeetCode 第 58 题&#xff1a;最后一个单词的长度 题目&#xff1a;给你一个字符串 s&#xf…

Linux下使用WPS做office的二次开发

Linux下使用WPS做office的二次开发 序 上个版本WPS在Linux上就已经支持二次开发了&#xff0c;可以直接去看官网相关的介绍。https://open.wps.cn/ 我们选择WPS的客户端进行二次开发 开发环境 Ubuntu18.04wps-office_11.1.0.9126_amd64.debQt的开发环境&#xff08;我本地…

REACT全家桶(1)

基础 一、特点 声明式设计 高效 减少dom操作 灵活 JSX JS拓展语法 组件 单向响应的数据流 二、虚拟DOM 把真实DOM树转成对象树&#xff0c;再通过diff算法&#xff0c;减少重绘与回流 三、搭建环境&#xff08;提前安装node环境&#xff09; 1.全局安装create-rea…