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. RQNOJ PID379 / 约会计划 -并查集

    PID379 / 约会计划 题目描述 cc是个超级帅哥,口才又好,rp极高(这句话似乎降rp),又非常的幽默,所以很多mm都跟他关系不错.然而,最关键的是,cc能够很好的调解各各妹妹间的关系.mm之间 ...

  2. HDU 2504.又见GCD-递归

    又见GCD Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  3. Codeforces 723 A. The New Year: Meeting Friends

    A. The New Year: Meeting Friends time limit per test 1 second memory limit per test 256 megabytes in ...

  4. 训练指南 UVA - 10917(最短路Dijkstra + 基础DP)

    layout: post title: 训练指南 UVA - 10917(最短路Dijkstra + 基础DP) author: "luowentaoaa" catalog: tr ...

  5. 1、Flask实战第1天:第一个Flask程序

    Flask是流行的python web框架...(* ̄︶ ̄) 零基础到企业级论坛实战,人生苦短,我用python,开启FLask之旅吧... 安装开发环境 下载Python win版安装包 双击运行, ...

  6. java中的控制语句

    控制语句 1.1 顺序结构 (最常见的) 特点:代码从上往下依次执行 1.2 选择结构 : if 判断语句 : switch 判断语句: Switch语句使用的注意事项: 1.每一个语句结束后需要有一 ...

  7. [BZOJ 1143] 祭祀river

    Link:https://www.lydsy.com/JudgeOnline/problem.php?id=1143 Solution: 一道最长反链的模板题 由Dilworth定理可知:最小链覆盖数 ...

  8. 【分块】【哈希】bzoj3578 GTY的人类基因组计划2

    每个房间用一个集合来维护,具体来说,就是给1-n的数每个数一个long long的hash值,往集合S里insert(i),就是S^=HASH[i]:erase(i),也是S^=HASH[i]. 用m ...

  9. 【分块】【线段树】bzoj3212 Pku3468 A Simple Problem with Integers

    线段树入门题…… 因为poj原来的代码莫名RE,所以丧病地写了区间修改的分块…… 其实就是块上打标记,没有上传下传之类. #include<cstdio> #include<cmat ...

  10. Java杂谈6——Java安全模型

    Java语言安全模型是其有别于传统的编程语言的一个很重要的特点,采用一种沙箱模型隔离了Java的运行环境与具体的操作系统,使得Java在网络环境下能够更为安全的运行.理解Java的安全模型,能够帮助我 ...