首页 > 代码库 > BOS中定区关联客户

BOS中定区关联客户

1. 首先发布crm服务

第一步:创建动态的web项目crm,导入hessianjar

第二步:创建一个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>

第四步:提供接口CustomerServiceCustomer类、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项目中导入hessianjar

第二步:从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;

第五步:为定区列表页面中的“关联客户”按钮绑定事件,发送2ajax请求访问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=http://www.mamicode.com/‘"+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=http://www.mamicode.com/‘"+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中定区关联客户