1. 程式人生 > >BOS中定區關聯客戶

BOS中定區關聯客戶

time find 映射 mod ets map tid 移動 imp

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";
    }

BOS中定區關聯客戶