• 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='"+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";
        }
  • 相关阅读:
    CnForums1.0 Alpha 开始试运行
    asp.net Forums2.0修改密码后无法登陆问题——都是Cache惹的祸
    CnForums1.0 Alpha RC1 发布
    Docker: Nvidia Driver, Nvidia Docker 推荐安装步骤
    Docker: docker pull, wget, curl, git clone 等如何更快?
    DL4J实战之三:经典卷积实例(LeNet5)
    纯净Ubuntu16安装CUDA(9.1)和cuDNN
    DL4J实战之四:经典卷积实例(GPU版本)
    JAVA 中静态块、静态变量加载顺序详解
    设计模式之单例模式
  • 原文地址:https://www.cnblogs.com/zjfjava/p/7092311.html
Copyright © 2020-2023  润新知