CRM项目-- 基于SSM框架搭建V06

这个版本还是线索相关的操作。不过和之前大不同,即:线索转换操作,线索转换会导致1条线索删除,变成一条客户和一个联系人,还包括一些其他的备注和关联关系的转移。

1.点击转换按钮跳转到转换页面

转换页面是这样子的
在这里插入图片描述
正常情况下,我们是需要先过后台取得这些数据,然后在跳到这里的,也就是request搭一个请求转发的方式。但是前面做这样的太多了,这里使用不过后台的方式,直接在参数里面传递。
但是,使用传参的方式是有条件的,1)没有敏感的信息。2)内容不太多。 注意,除了传图片上的信息之外,还要多加一个clueId,因为你才知道要转换的是哪条线索。代码:

<button type="button" class="btn btn-default" onclick="window.location.href='workbench/clue/convert.jsp?clueId=${clue.id}&company=${clue.company}&fullname=${clue.fullname}&appellation=${clue.appellation}&owner=${clue.owner}';"><span class="glyphicon glyphicon-retweet"></span> 转换</button>

那么,在跳转后的页面怎么取值呢?
第一种方式:在最前面request.getAttribute(“xx”)取值(放在这里边<%=%>),这样做就可以把参数值放到这个jsp页面的request域中,在文中使用的地方使用java脚本<%=%>
第二种:使用EL表达式来取数据,在EL表达式(注意不是jsp的,jsp页面是没有这个对象的)当中有一个隐含对象param,可以直接使用,所以使用的使用要在el表达式里面,如:${param.xxx}。(这里使用第二种方式取值)
语法格式:
${param.name},必须加上param,否则取不到值,因为在jsp域对象里面是没有值的,只有在参数里面有值,所以要用到param。

	<div id="title" class="page-header" style="position: relative; left: 20px;">
		<h4>转换线索 <small>${param.fullname}${param.appellation}-${param.company}</small></h4>
	</div>
	<div id="create-customer" style="position: relative; left: 40px; height: 35px;">
		新建客户:${param.company}
	</div>
	<div id="create-contact" style="position: relative; left: 40px; height: 35px;">
		新建联系人:${param.fullname}${param.appellation}
	</div>

2.转换操作,线索–>客户+联系人

这个部分看起来挺简单的,但是挺多问题需要注意的,而且步骤也非常繁琐多。
首先,就是在转换的时候是可以分为 创建交易 和 不创建交易的。这就是一个难点。这个在前端要先进行分支,创建交易咋样,不创建交易又咋样,而且在后端都是用同一个controller的方法来处理的,不可能分两个。虽然前端可以通过复选框有没有选中来判断需不需要创建交易,但是后端是不知道的,所以在传值的时候,我们还需要传递一个标记。
其次,就是转换完成之后,因为没有什么需要局部刷新的内容,所以我们直接使用传统请求即可。不创建交易的时候好办,直接在地址后面挂参数,但是创建交易,内容比较多,如果直接挂参数,地址可能不够用,所以创建交易直接使用提交form表单的形式进行。好处:不用手动挂参数,可以发post请求。

		//为转换按钮绑定事件----因为转换完成后,没什么需要局部刷新的,直接使用传统请求,但又分为可能需要创建交易也可能不需要
		$("#convertBtn").click(function (){
			if ($("#isCreateTransaction").prop("checked")){ //判断是否打钩的方式,记一下
				$("#activityForm").submit();
			}else {
				//不需要创建交易
				window.location.href="workbench/clue/convert.do?clueId=${param.clueId}&flag=false";
			}
		})

创建交易的表单:
在这里插入图片描述
另外,使用表单提交,提交的内容是有name属性的,而不是一直使用的id了。
Controller里面:

	@ResponseBody
    @RequestMapping("/workbench/clue/convert.do")
    public void convert(HttpServletRequest request, HttpServletResponse response,
                        String clueId, String flag, Tran tran) throws IOException {
        System.out.println("=====线索控制器,转换线索操作=====");
        //创建人,有request才能取到,service里面没哟request,所以直接把 创建人 传过去。
        String createBy = ((User) request.getSession().getAttribute("user")).getName();

        Boolean flag1 = clueService.convert(clueId,flag,tran,createBy);

        if (flag1) {
            response.sendRedirect(request.getContextPath()+"/workbench/clue/index.jsp");
        }
        //如果上面的 重定向 没有执行的话,前端页面就没什么也没有返回,显示空白页----亲测
    }

那转换的具体业务逻辑包络:
(1) 获取到线索id,通过线索id获取线索对象(线索对象当中封装了线索的信息)
(2) 通过线索对象提取客户信息,当该客户不存在的时候,新建客户(根据公司的名称精确匹配,判断该客户是否存在!)
(3) 通过线索对象提取联系人信息,保存联系人
(4) 线索备注转换到客户备注以及联系人备注
(5) “线索和市场活动”的关系转换到“联系人和市场活动”的关系
(6) 如果有创建交易需求,创建一条交易
(7) 如果创建了交易,则创建一条该交易下的交易历史
(8) 删除线索备注
(9) 删除线索和市场活动的关系
(10) 删除线索
上面的内容都是比较简单的,就是步骤多一点,问题不大,闷头完成即可。

到这里为止,就是线索模块的全部内容了。然后他的课是直接跳到了讲交易模块的内容。客户和联系人模块因为都是和之前重复的,就没有讲,但是我还是选择自己完成里面的内容。

3.客户和联系人模块

这两个模块需要完成的内容包括:
(1)先完成创建内容。(完成客户的时候,引入时间插件的时候出错了,应该是开头的地址有错误,去其他文件复制一样的)。
(2)写pageList(pageNo,pageSize)方法
点击左侧菜单中的"线索"超链接,需要刷新市场活动列表,调用pageList方法
添加,修改,删除后,需要刷新市场活动列表,调用pageList方法
点击查询按钮的时候,需要刷新市场活动列表,调用pageList方法
点击分页组件的时候,调用pageList方法
给前端返回的内容有: total(分页组件要用的), dataList(列表)

还包括解决一些额外的bug,包括:引入时间插件,分页插件,全选框操作,点击查询的时候出现的问题—>使用隐藏域解决。
(3)删除的需求
可以同时删除多条,先删备注,再删关系,再删线索。
(4)修改线索
一次只能修改一条
(5)跳转至详细信息页

我现在只完成了客户模块,并且在这过程中,发现了他给的资源上的一些问题。在创建客户的时候,因为打开的模态窗口是有时间的,要引入时间控件,这里我照着之前的方式引入的时候创建按钮绑定的事件就失效了。最后通过排查发现,应该是最开始引入的资源地址错了,建议直接去之前的那些地方复制一份替换即可。

还有,我在完成的这里的内容的时候,解决了之前一个一直没有想明白的bug,就是在线索模块做修改操纵的时候,打开的模态窗口是包括所有者的,这个所有者是我们拼出来的,然后我们在后台查出来什么就赋给这个所有者什么内容的时候,我这里始终没办法自动赋值,那时候还找了很久原因,没找到。
今天发现,是因为在后台查询Clue的时候,我是查出来的“张三”,而不是32为的id。而拼的又是这样的

$.each(data.uList,function (i,n){
	html += "<option value='"+n.id+"'>"+n.name+"</option>";
})

可以注意到,这里的option的value值是32位的id值,所以我查出来的"张三",和这里的value不可能有相对的情况,所以不可能给这个所有者附上值。
因此,这里再返回Clue的时候,我们应该是无脑返回Clue查询出来的内容才对,更改了之后,就成功啦。哈哈哈~

下次更新应该是直接更新【交易模块】了,不过我还是会继续完成前面重复的内容的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值