BOS中定區關聯客戶
阿新 • • 發佈:2017-06-29
time find 映射 mod ets map tid 移動 imp CustomerService接口提供實現類
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); }
第五步:為上面的
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中定區關聯客戶