栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

CRM营销管理

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

CRM营销管理

  • 营销机会管理功能实现

     1.准备工作
     	生成代码
     		通过mybatis-generator生成代码。能够生成JavaBean对象、mapper映射文件以及mapper接口。
     	IDEA创建MYSQL链接
     2.营销机会数据查询
     	1.后端代码实现
     	layui框架通过表格展示后端表数据
     		1.查询条件
     			创建query包,新建SaleChanceQuery.java查询类并且继承BaseQuery,设置对应的查询条件。
     		2.设置SQL
     			在由逆向工程下生成的SaleChanceMapper.xml内设置SQL查询语句。
     		3.Dao
     			在dao包下新建接口SaleChanceMapper.java并且继承BaseService,在其中定义查询方法。
     		4.Service
     			在service包下新建SaleChanceService.java并且继承BaseMapper,在其中实现查询方法(BaseService中有对应的方法)。
     		5.Controller
     			在controller包下新建SaleChanceController.java并且继承BaseController,在其中连接SaleChanceService中的查询方法。
     		6.时间格式化
     			在SaleChance实体类中的时间字段上添加注解,用来格式化时间。
     				@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") 
     				private Date assignTime; 
     				@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") 
     				private Date createDate; 
     				@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") 
     				private Date updateDate;
     	2.前端核心代码
     		1.页面模板
     			在resources/views/saleChance目录创建sale_chance.ftl模块文件,其中模板依赖的layui文件由common.ftl文件提供。
     		2.页面入口
     			SaleChanceController后台设置对应的接口。
     				@RequestMapping("index") 
     				public String index () { 
     					return "saleChance/sale_chance"; 
     				}
     		3.核心JS
     			public/js/saleChance目录下创建sale.chance.js文件,初始化layui表格数据。
     		4.多条件查询
     			使用layui表格reload重载基础方法实现。sale.chance.js添加搜索点击事件。
     				$(".search_btn").click(function () { 
     					table.reload('saleChanceListTable', { 
     						where: { //设定异步数据接口的额外参数,任意设 
     							customerName: $("input[name='customerName']").val(), // 客户名 
     							createMan: $("input[name='createMan']").val(), // 创建人 
     							state: $("#state").val() // 状态 
     						}
     						,page: { 
     							curr: 1 // 重新从第 1 页开始 
     						} 
     					}); // 只重载数据 
     				});
    
  • 营销机会数据添加

     1.后端代码实现
     	1.实现思路
     		1.参数校验 
     			customerName:非空 
     			linkMan:非空 
     			linkPhone:非空 11位手机号 
     		2.设置相关参数默认值 
     			state:默认未分配 如果选择分配人 state 为已分配
     			assignTime:如果 如果选择分配人 时间为当前系统时间 
     			devResult:默认未开发 如果选择分配人devResult为开发中 
     				0-未开发 1-开发中 2-开发成功 3-开发失败 
     			isValid:默认有效数据(1-有效 0-无效) 
     			createDate updateDate:默认当前系统时间 
     		3.执行添加 判断结果
     	2.核心代码
     		SaleChanceService.java中使用@Transactional(propagation = Propagation.REQUIRED)定义在方法级别上。
     		1.参数校验
     			封装一个checkParams方法,其中使用AssertUtil.isTrue(StringUtils.isBlank())来判断参数是否非空。
     		2.设置相关参数默认值
     			未选择分配人 			
     				saleChance.setState(StateStatus.UNSTATE.getType()); 
     				saleChance.setDevResult(DevResult.UNDEV.getStatus());
     			选择分配人
     				if (StringUtils.isNotBlank(saleChance.getAssignMan())) { 
     					saleChance.setState(StateStatus.STATED.getType()); 
     					saleChance.setDevResult(DevResult.DEVING.getStatus()); 
     					saleChance.setAssignTime(new Date()); 
     				}
     		3.执行添加 判断结果
     			AssertUtil.isTrue(insertSelective(saleChance) < 1, "营销机会数据添加失败!");
     	3.方法调用
     		SaleChanceController.java中使用@RequestMapping("save")和@ResponseBody定义在方法级别上。
     			//获取用户ID 
     			Integer userId = LoginUserUtil.releaseUserIdFromCookie(request); 
     			//获取用户的真实姓名 
     			String trueName = userService.selectByPrimaryKey(userId).getTrueName(); 
     			//设置营销机会的创建人 
     			saleChance.setCreateMan(trueName); 
     			//添加营销机会的数据 
     			saleChanceService.saveSaleChance(saleChance); 
     			return success("营销机会数据添加成功!");
     	4.页面转发
     		SaleChanceController.java中使用@RequestMapping("toAppUpdatePage")定义在方法级别上。
     			return "saleChance/add_update";
     2.前端核心代码
     	1.页面模板
     		views/saleChance目录下添加add_update.ftl页面模板。
     	2.工具栏事件
     		sale_chance.ftl
     			这里对于对话框打开方法代码。
     		sale_chancel.js
     			监听头部工具栏事件
     				table.on('toolbar(saleChances)', function(obj){ 
     					var checkStatus = table.checkStatus(obj.config.id); 
     					switch(obj.event){ 
     						case 'add': 
     							// 点击添加按钮,打开添加营销机会的对话框 
     							openAddOrUpdateSaleChanceDialog(); 
     							break; 
     					}; 
     				});
     	3.核心JS
     		js/saleChance目录下添加add.update.js文件,完成机会数据添加与更新表单提交操作。监听submit提交。
     			form.on("submit(addOrUpdateSaleChance)", function (data)
     	4.关闭弹出层
     		add_update.ftl
     			给按钮设置id属性值,通过id绑定点击事件。
     		add.update.js
     			关闭弹出层
     				$("#closeBtn").click(function () { 
     					//先得到当前iframe层的索引 
     					var index = parent.layer.getFrameIndex(window.name);
     					//再执行关闭 
     					parent.layer.close(index); 
     				});
    
  • 营销机会数据更新

     1.后端代码实现
     	1.实现思路
     		1.参数校验 
     			id:记录必须存在 
     			customerName:非空 
     			linkMan:非空 
     			linkPhone:非空,11位手机号 
     		2.设置相关参数值
     			update_date  修改时间
     			判断是否指派了工作人员
              		1.修改前没有分配人
                  		修改后没有分配人
                     		不做任何操作
                   		修改后有分配人
                        	dev_result  开发状态                           
                        	assign_time 分配时间
     	                    state       分配状态
          			2.修改前有分配人
                 		修改后没有分配人
                        	dev_result  开发状态
                 			state       分配状态 0
             			修改后有分配人
                       		判断更改后的人员和更改前的人员有没有变动
                            	没有变动不做操作
                       			有变动,assign_time最新的时间
     		3.执行修改操作,判断是否修改成功
     	2.核心代码
     		SaleChanceService.java中使用@Transactional(propagation = Propagation.REQUIRED)定义在方法级别上。
     		1.参数校验
     			判断id是否存在
     				AssertUtil.isTrue(saleChance.getId() == null,"数据异常,请重试");
     			校验非空参数
     				封装一个checkParams方法,其中使用AssertUtil.isTrue(StringUtils.isBlank())来判断参数是否非空。
     		2.设置相关参数值
     			设置默认值
     		        saleChance.setUpdateDate(new Date());
     		     通过现有的id查询修改之前的数据
     				SaleChance dbSaleChance = saleChanceMapper.selectByPrimaryKey(saleChance.getId());
     				AssertUtil.isTrue(dbSaleChance == null,"数据异常,请重试");
     			//判断原有数据中是否有分配人
     			if(StringUtils.isBlank(dbSaleChance.getAssignMan())){
         			//进入当前判断说明修改前没有分配人
         			//判断修改后是否有分配人
         			if(!StringUtils.isBlank(saleChance.getAssignMan())){
             			//修改后有分配人
             			saleChance.setAssignTime(new Date());
             			saleChance.setState(1);
             			saleChance.setDevResult(1);
         			}
         		//修改后没有分配人,什么都不做
     			}else{
         			//进入当前判断说明修改前有分配人
         			//判断修改后是否有分配人
         			if(StringUtils.isBlank(saleChance.getAssignMan())){
             			//修改后没有分配人
             			saleChance.setAssignTime(null);
             			saleChance.setState(0);
             			saleChance.setDevResult(0);
         			}else{
             			//修改后有分配人
     	                //判断前后的分配人是否有变化
             			if(!dbSaleChance.getAssignMan().equals(saleChance.getAssignMan())){
                 			//不是一个人,有变化
                 			saleChance.setAssignTime(new Date());
             			}else{
     	                    //相同的分配人  那么前台后台都没有设置分配的时间,那么结合刚修改的sql条件,那么原有的数据机会被更改
                 			saleChance.setAssignTime(new Date());
             			}
     	            }
     	  		}
     	  	3.执行修改操作
     			AssertUtil.isTrue(saleChanceMapper.updateByPrimaryKeySelective(saleChance) < 1,"营销数据修改失败");
     	3.方法调用
     		这里机会数据更新与添加操作实现代码共用,修改原有的添加方法。
     		SaleChanceController.java中使用@RequestMapping("update")和@ResponseBody定义在方法级别上。
     			saleChanceService.updateSaleChance(saleChance);
     			return success();
     	4.页面转发
     		id为空 添加操作
     		id非空 修改操作
     		SaleChanceController.java使用@RequestMapping("addOrUpdateSaleChancePage")定义在方法级别上。
     			//如果是修改操作那么需要将修改的数据映射在页面中
     			if(id != null){
         			SaleChance saleChance = saleChanceService.selectByPrimaryKey(id);
         			AssertUtil.isTrue(saleChance == null,"数据异常,请重试");
         			request.setAttribute("saleChance",saleChance);
     			}
     			return "saleChance/add_update";
     2.前端核心代码
     	1.表格行事件
     		sale_chance.ftl
     			这里对于对话框打开方法代码。
     		sale.chance.js 
     			表格添加行监听事件。
     			table.on('tool(saleChances)', function(obj){ 
     				var data = obj.data; //获得当前行数据 
     				var layEvent = obj.event; //获得 lay-event 对应的值(也可以是表头的 event 参数对应的 值)
     				//判断事件类型 
     				if(layEvent === 'edit'){ //编辑操作 
     					//获取当前要修改的行的id 
     					var saleChanceId = data.id; 
     					//点击表格行的编辑按钮,打开更新营销机会的对话框 
     					openAddOrUpdateSaleChanceDialog(saleChanceId); 
     				} 
     			});
     		add_update.ftl
     			在页面中通过EL表达式获取作用域中的数据。
     			添加隐藏域,存放营销机会的ID。
     				
     	2.核心JS
     		修改操作的JS与添加操作的可共用,通过隐藏域中存放的营销机会ID,来判断当前的操作行为。
     			form.on("submit(addOrUpdateSaleChance)", function (data)
     	3.加载下拉框
     		SaleChanceMapper.java
     			// 查询所有的销售人员 
     			public List> queryAllSales();
     		SaleChanceMapper.xml添加查询所有销售人员的SQL语句
     		SaleChanceService.java
     			public List> queryAllSales() { 
     				return userMapper.queryAllSales(); 
     			}
     		SaleChanceController.java
     			@RequestMapping("user/queryAllSales") 
     			@ResponseBody 
     			public List> queryAllSales() { 
     				return userService.queryAllSales(); 
     			}
     		add_update.ftl
     			<#--设置营销人员的ID--> 
     			
     		add.update.js
     			加载下拉框
     			$.post(ctx + "/user/queryAllSales",function (data)
     		显示指派人
     			1.修改查询的SQL语句 (SaleChanceMapper.xml)
     			2.JavaBean中添加属性字段 (SaleChance.java)
    
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/862824.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号