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中定区关联客户的更多相关文章

  1. 项目一:第七天 CRM 和bos系统实现定区关联客户,关联快递员. 通过CXF框架实现

    定区关联客户 需求:为了快递方便客户下订单(发快递),派快递员上门取件.  所以说需要让定区关联客户(知道客户属于哪个定区),定区跟快递员关系:多对多.知道让哪个快递员上门取件. 将CRM系统中,客户 ...

  2. JAVAEE——BOS物流项目08:配置代理对象远程调用crm服务、查看定区中包含的分区、查看定区关联的客户

    1 学习计划 1.定区关联客户 n 完善CRM服务中的客户查询方法 n 在BOS项目中配置代理对象远程调用crm服务 n 调整定区关联客户页面 n 实现定区关联客户 2.查看定区中包含的分区 n 页面 ...

  3. easyUI定区关联快递员js代码

    easyUI定区关联快递员js代码: <script type="text/javascript"> $.fn.serializeJson=function(){ va ...

  4. JAVAEE——BOS物流项目06:分页查询、分区导出Excel文件、定区添加、分页问题总结

    1 学习计划 1.分区组合条件分页查询 n 分区分页查询(没有过滤条件) n 分区分页查询(带有过滤条件) 2.分区导出 n 页面调整 n 使用POI将数据写到Excel文件 n 通过输出流进行文件下 ...

  5. 项目一:第五天 1、区域数据(pinyin4j-简码,城市编码) 2、Web层代码重构(model对象,分页代码提取) 3、区域分页查询 3、分区添加功能 4、定区管理管理-添加,分页

    Service: /** * @Description: 1.保存定区  2.让分区关联定区 * 对象三种状态 1.持久态(被session管理对象-一级缓存中有对象) 2.托管态(有OID标识,数据 ...

  6. Yii2中多表关联查询(join、joinwith)

    我们用实例来说明这一部分 表结构 现在有客户表.订单表.图书表.作者表, 客户表Customer   (id  customer_name) 订单表Order      (id  order_name ...

  7. [moka同学笔记]Yii2中多表关联查询(join、joinwith) (摘录)

    表结构 现在有客户表.订单表.图书表.作者表, 客户表Customer   (id  customer_name) 订单表Order          (id  order_name       cu ...

  8. Yii2.0中文开发向导——Yii2中多表关联查询(join、joinwith)(转)

    我们用实例来说明这一部分 表结构 现在有客户表.订单表.图书表.作者表, 客户表Customer   (id  customer_name) 订单表Order          (id  order_ ...

  9. Yii2.0中文开发向导——Yii2中多表关联查询(join、joinwith)

    我们用实例来说明这一部分 表结构 现在有客户表.订单表.图书表.作者表, 客户表Customer   (id  customer_name) 订单表Order          (id  order_ ...

随机推荐

  1. 跨机房openvpn互联

    实现目标:北京的client能访问上海的client (1)vpn server配置 1)基本配置 关闭selinux sed -ri '/^SELINUX=/cSELINUX=disabled' / ...

  2. 【转.解析清晰】你真明白 Python 装饰器么?

      原文出处: 武沛齐    装饰器是程序开发中经常会用到的一个功能,用好了装饰器,开发效率如虎添翼,所以这也是Python面试中必问的问题,但对于好多小白来讲,这个功能 有点绕,自学时直接绕过去了, ...

  3. CF 1005A Tanya and Stairways 【STL】

    Little girl Tanya climbs the stairs inside a multi-storey building. Every time Tanya climbs a stairw ...

  4. 51nod 循环数组最大子段和(动态规划)

    循环数组最大子段和 输入 第1行:整数序列的长度N(2 <= N <= 50000) 第2 - N+1行:N个整数 (-10^9 <= S[i] <= 10^9) 输出   输 ...

  5. 火狐浏览器信息提取工具Dumpzilla

    火狐浏览器信息提取工具Dumpzilla   浏览器会自动保存用户访问网站的各项信息,如Cookie.网址.下载记录.书签等.通过分析这些信息,可以获取使用者的诸多个人信息和行为习惯.Kali Lin ...

  6. 洛谷 P3041 [USACO12JAN] Video Game Combos

    题目描述 Bessie is playing a video game! In the game, the three letters 'A', 'B', and 'C' are the only v ...

  7. TZOJ 5347: 数据结构实验:删除链表元素

    描述 完成链表的创建.元素查找和删除等操作. 部分代码已经给出,请补充完整,提交时请勿包含已经给出的代码. void PrintLinkList(Node *head) { int flag = 0; ...

  8. new beginning

    新的一年开始. BLOG搬到CNBLOG. 往事太匆匆, 一切终成风. 他日再相逢, 依旧笑语中. -----AT.Y

  9. url参数的获取

    方法 function getQueryString(name) { var reg = new RegExp("(^|&)" + name + "=([^&am ...

  10. 动态OSPF配置路由表

    动态ospf设置路由表 以Rourer1为例子 (1)首先设置路由器端口ip Router(config)#inter f0/0 Router(config-if)#ip add 192.168.1. ...