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. 只用120行Java代码写一个自己的区块链-2网络

    已经看完第一章的内容了吗,欢迎回来. 上一章我们介绍了关于怎么去编写自己的区块链,完成哈希和新块的校验.但是它只是在一个终端(结点)上跑.我们怎么样来连接其他结点以及贡献新的块呢,怎么样广播到其他结点 ...

  2. CF 1006B Polycarp's Practice【贪心】

    Polycarp is practicing his problem solving skill. He has a list of n problems with difficulties a1,a ...

  3. POJ 1008 Maya Calendar / UVA 300【日期转换/常量数组】

    Maya Calendar Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 82431 Accepted: 25319 Descr ...

  4. HDU 1018 Big Number(数论,Stirling公式)

    1. 利用数学公式lg(n!)=lg(2)+lg(3)+....+lg(n) 求解 2.

  5. LCA+差分【CF191C】Fools and Roads

    Description 有一颗 \(n\) 个节点的树,\(k\) 次旅行,问每一条边被走过的次数. Input 第一行一个整数 \(n\) (\(2\leq n\leq 10^5\)). 接下来 \ ...

  6. 洛谷——P1480 A/B Problem

    P1480 A/B Problem 题目描述 输入两个整数a,b,输出它们的商(a<=10^5000,b<=10^9) 输入输出格式 输入格式: 两行,第一行是被除数,第二行是除数. 输出 ...

  7. POJ 3728 The merchant(并查集+DFS)

    [题目链接] http://poj.org/problem?id=3728 [题目大意] 给出一棵树,每个点上都可以交易货物,现在给出某货物在不同点的价格, 问从u到v的路程中,只允许做一次买入和一次 ...

  8. 显示ACSII码字符表 Exercise05_15

    /** * @author 冰樱梦 * 时间:2018年下半年 * 题目:显示ACSII码字符表 * */ public class Exercise05_15 { public static voi ...

  9. Problem J: 零起点学算法34——3n+1问题

    #include<stdio.h> int main() { ; int n; scanf("%d",&n); ) { ==) n=n*+; else n/=; ...

  10. Java高级架构师(一)第26节:测试并调整登录的业务功能

    主Index的处理Java: package com.sishuok.architecture1; import org.springframework.beans.factory.annotatio ...