BOS中定区关联客户
1. 首先发布crm服务
第一步:创建动态的web项目crm,导入hessian的jar
第二步:创建一个crm数据库和t_customer表
第三步:在crm项目的web.xml中配置spring的DispatcherServlet
<servlet>
<servlet-name>remoting</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>remoting</servlet-name>
<url-pattern>/remoting/*</url-pattern>
</servlet-mapping>
第四步:提供接口CustomerService和Customer类、hbm映射文件
// 客户服务接口
public interface CustomerService {
// 未关联定区客户
public List<Customer> findnoassociationCustomers();
// 查询已经关联指定定区的客户
public List<Customer> findhasassociationCustomers(String decidedZoneId);
// 将未关联定区客户关联到定区上
public void assignCustomersToDecidedZone(Integer[] customerIds, String decidedZoneId);
}
第五步:为上面的CustomerService接口提供实现类
public class CustomerServiceImpl implements CustomerService {
public List<Customer> findnoassociationCustomers() {
Session session = HibernateUtils.openSession();
session.beginTransaction();
String hql = "from Customer where decidedzone_id is null";
List<Customer> customers = session.createQuery(hql).list();
session.getTransaction().commit();
session.close();
return customers;
}
public List<Customer> findhasassociationCustomers(String decidedZoneId) {
Session session = HibernateUtils.openSession();
session.beginTransaction();
String hql = "from Customer where decidedzone_id = ?";
List<Customer> customers = session.createQuery(hql).setParameter(0, decidedZoneId).list();
session.getTransaction().commit();
session.close();
return customers;
}
public void assignCustomersToDecidedZone(Integer[] customerIds, String decidedZoneId) {
Session session = HibernateUtils.openSession();
session.beginTransaction();
// 取消定区所有关联客户
String hql2 = "update Customer set decidedzone_id=null where decidedzone_id=?";
session.createQuery(hql2).setParameter(0, decidedZoneId).executeUpdate();
// 进行关联
String hql = "update Customer set decidedzone_id=? where id =?";
if (customerIds != null) {
for (Integer id : customerIds) {
session.createQuery(hql).setParameter(0, decidedZoneId).setParameter(1, id).executeUpdate();
}
}
session.getTransaction().commit();
session.close();
}
}
第六步:在WEB-INF目录提供spring的配置文件remoting-servlet.xml
<!-- 业务类 -->
<bean id="customerService" class="cn.itcast.crm.service.impl.CustomerServiceImpl" /> <!-- 注册hessian服务 -->
<bean id="/customer" class="org.springframework.remoting.caucho.HessianServiceExporter">
<!-- 业务接口实现类 -->
<property name="service" ref="customerService" />
<!-- 业务接口 -->
<property name="serviceInterface" value="cn.itcast.crm.service.CustomerService" />
</bean>
2. 在bos项目中调用crm服务获得客户数据
第一步:在bos项目中导入hessian的jar
第二步:从crm项目中复制CustomerService接口和Customer类到bos项目中
第三步:在spring配置文件中配置一个代理对象,可以调用crm服务
<!-- 配置远程服务的代理对象 -->
<bean id="customerService" class="org.springframework.remoting.caucho.HessianProxyFactoryBean">
<!-- 注入接口类型 -->
<property name="serviceInterface" value="com.itheima.bos.crm.CustomerService"/>
<!-- 服务访问路径 -->
<property name="serviceUrl" value="http://localhost:8080/crm/remoting/customer"/>
</bean>
第四步:将上面的代理对象通过注解方式注入到Action中
@Autowired
protected CustomerService customerService;
第五步:为定区列表页面中的“关联客户”按钮绑定事件,发送2次ajax请求访问Action,在Action中调用hessian代理对象,通过代理对象可以远程访问crm获取客户数据
//全局变量,定区选中的定区id
var id;
function doAssociations(){
//判断当前是否选中了一个定区
var rows = $("#grid").datagrid("getSelections");
if(rows.length == 1){
id = rows[0].id;
//选中了一个
$('#customerWindow').window('open');
$("#noassociationSelect").empty();//清空下拉框
$("#associationSelect").empty();//清空下拉框 //发送ajax请求获取没有关联到定区的客户
var url1 = "${pageContext.request.contextPath}/decidedzoneAction_findnoassociationCustomers.action";
$.post(url1,{},function(data){
//解析json数据,填充到下拉框中
///////////////
for(var i=0;i<data.length;i++){
var id = data[i].id;
var name = data[i].name;
$("#noassociationSelect").append("<option value='"+id+"'>"+name+"</option>");
}
},'json'); //发送ajax请求获取关联到当前选中定区的客户
var url2 = "${pageContext.request.contextPath}/decidedzoneAction_findhasassociationCustomers.action";
$.post(url2,{"id":rows[0].id},function(data){
//解析json数据,填充到下拉框中
///////////////
for(var i=0;i<data.length;i++){
var id = data[i].id;
var name = data[i].name;
$("#associationSelect").append("<option value='"+id+"'>"+name+"</option>");
}
},'json');
}else{
$.messager.alert("提示信息","请选择一个定区操作!","warning");
}
}
第六步:为左右移动按钮绑定事件
//为左右移动按钮绑定事件
$("#toRight").click(function(){
$("#associationSelect").append($("#noassociationSelect option:selected"));
});
$("#toLeft").click(function(){
$("#noassociationSelect").append($("#associationSelect option:selected"));
});
第七步:为关联客户窗口中的“关联客户”按钮绑定事件
//为关联客户按钮绑定事件
$("#associationBtn").click(function(){
//在提交表单之前,选中右侧下拉框中的所有选项
$("#associationSelect option").attr("selected","selected");
//在提交表单之前设置隐藏域的值(定区id)
$("input[name=id]").val(id);
$("#customerForm").submit();
});
第八步:在定区Action中接收提交的参数,调用crm服务实现定区关联客户业务功能
private Integer[] customerIds;
/**
* 定区关联客户
* @return
*/
public String assigncustomerstodecidedzone(){
customerService.assignCustomersToDecidedZone(customerIds, model.getId());
return "list";
}
BOS中定区关联客户的更多相关文章
- 项目一:第七天 CRM 和bos系统实现定区关联客户,关联快递员. 通过CXF框架实现
定区关联客户 需求:为了快递方便客户下订单(发快递),派快递员上门取件. 所以说需要让定区关联客户(知道客户属于哪个定区),定区跟快递员关系:多对多.知道让哪个快递员上门取件. 将CRM系统中,客户 ...
- JAVAEE——BOS物流项目08:配置代理对象远程调用crm服务、查看定区中包含的分区、查看定区关联的客户
1 学习计划 1.定区关联客户 n 完善CRM服务中的客户查询方法 n 在BOS项目中配置代理对象远程调用crm服务 n 调整定区关联客户页面 n 实现定区关联客户 2.查看定区中包含的分区 n 页面 ...
- easyUI定区关联快递员js代码
easyUI定区关联快递员js代码: <script type="text/javascript"> $.fn.serializeJson=function(){ va ...
- JAVAEE——BOS物流项目06:分页查询、分区导出Excel文件、定区添加、分页问题总结
1 学习计划 1.分区组合条件分页查询 n 分区分页查询(没有过滤条件) n 分区分页查询(带有过滤条件) 2.分区导出 n 页面调整 n 使用POI将数据写到Excel文件 n 通过输出流进行文件下 ...
- 项目一:第五天 1、区域数据(pinyin4j-简码,城市编码) 2、Web层代码重构(model对象,分页代码提取) 3、区域分页查询 3、分区添加功能 4、定区管理管理-添加,分页
Service: /** * @Description: 1.保存定区 2.让分区关联定区 * 对象三种状态 1.持久态(被session管理对象-一级缓存中有对象) 2.托管态(有OID标识,数据 ...
- Yii2中多表关联查询(join、joinwith)
我们用实例来说明这一部分 表结构 现在有客户表.订单表.图书表.作者表, 客户表Customer (id customer_name) 订单表Order (id order_name ...
- [moka同学笔记]Yii2中多表关联查询(join、joinwith) (摘录)
表结构 现在有客户表.订单表.图书表.作者表, 客户表Customer (id customer_name) 订单表Order (id order_name cu ...
- Yii2.0中文开发向导——Yii2中多表关联查询(join、joinwith)(转)
我们用实例来说明这一部分 表结构 现在有客户表.订单表.图书表.作者表, 客户表Customer (id customer_name) 订单表Order (id order_ ...
- Yii2.0中文开发向导——Yii2中多表关联查询(join、joinwith)
我们用实例来说明这一部分 表结构 现在有客户表.订单表.图书表.作者表, 客户表Customer (id customer_name) 订单表Order (id order_ ...
随机推荐
- javascript+dom编程艺术 读后感
利用上班空闲2,3天把这本书看完了,整体来说,这本书很不错.虽然我js有一定的基础了,jquery基础也会使用,但是我觉得对js应该有个循序渐进的理解,所以还是把js系统的学习一遍.我看技术类的书总数 ...
- spark技术热点问题互动问答
决胜云计算大数据时代” Spark亚太研究院100期公益大讲堂 [第4期互动问答分享] Q1:Spark SQL和Shark有啥区别? Shark需要依赖于Hadoop上Hive去做SQL语句的解析 ...
- 【转.解析清晰】你真明白 Python 装饰器么?
原文出处: 武沛齐 装饰器是程序开发中经常会用到的一个功能,用好了装饰器,开发效率如虎添翼,所以这也是Python面试中必问的问题,但对于好多小白来讲,这个功能 有点绕,自学时直接绕过去了, ...
- 服务器重启之后wdcp打不开【解决】
service wdapache restart
- 使用scrapy爬取金庸小说目录和章节url
刚接触使用scrapy的时候,如果一开始就想实现特别复杂的配置,显然是不太现实的,用一些小的例子可以帮助自己理解各个模块. 今天的目标:爬取http://www.luoxia.com/shendiao ...
- Linux命令之vim(二)
这一章主要介绍vim编辑器的内部使用方法和注意事项 vim编辑器有四种工作模式:正常模式.插入模式.命令模式.可视模式.简单的判断方法就是看底部,什么都没有就是正常模式,光标在编辑器最底下时则是命令模 ...
- Express下使用formidable实现POST表单上传文件并保存
Express下使用formidable实现POST表单上传文件并保存 在上一篇文章中使用formidable实现了上传文件,但没将它保存下来. 一开始,我也以为是只得到了文件的相关信息,需要用fs. ...
- 进程注入后门工具Cymothoa
进程注入后门工具Cymothoa Cymothoa是一款隐秘的后门工具.它通过向目标主机活跃的进程注入恶意代码,从而获取和原进程相同的权限.该工具最大的优点就是不创建新的进程,不容易被发现.由于该 ...
- [xsy2363]树
设$f_{i,j}$表示$i$个点的树,权值为$j$且可以不选根的方案数,$g_{i,j}$表示$i$个点的树,权值为$j$且必选根的方案数 首先$g_{1,1}=0$ 我们可以把原树连上一个新的子树 ...
- [Contest20180318]求和
题意:求$\sum\limits_{i=1}^n\sum\limits_{j=1}^i\sum\limits_{k=1}^i(i,j,k)$ 先令$f(n)=\sum\limits_{i=1}^n\s ...