营销管理模块总结
1. Maven
依赖管理,自动构建。
依赖管理:pom.xml中添加各种jar包的依赖。
自动构建:install安装,自动的编译,测试,安装到本地仓库。
SSM整合:
spring + mybatis
父子级容器问题,spring容器父容器扫描service,springmvc子容器扫描controller
扫描service
- 
管理数据源 dbcp连接池管理数据源
 
 <!-- 数据库连接池 -->
 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
       destroy-method="close">
     <property name="driverClassName" value="${jdbc.driver}"/>
     <property name="url" value="${jdbc.url}"/>
     <property name="username" value="${jdbc.username}"/>
     <property name="password" value="${jdbc.password}"/>
     <property name="maxActive" value="10"/>
     <property name="maxIdle" value="5"/>
 </bean>
- 
管理SqlSessionFactory
 
 <!-- 配置SqlSessionFactory -->
 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
     <!-- 配置mybatis核心配置文件 -->
     <property name="configLocation" value="classpath:conf.xml"/>
     <!-- 配置数据源 -->
     <property name="dataSource" ref="dataSource"/>
     <property name="plugins">
         <array>
             <bean class="com.github.pagehelper.PageInterceptor">
                 <property name="properties">
                     <props>
                         <!--数据库方言-->
                         <prop key="helperDialect">mysql</prop>
                         <!--分页合理化-->
                         <prop key="reasonable">true</prop>
                     </props>
                 </property>
             </bean>
         </array>
     </property>
 </bean>
- 
提供了包扫描器,扫描mapper接口所在的包,自动生成代理对象,加载同一包下的mapper.xml文件
 
 <!-- Mapper代理的方式开发方式二,扫描包方式配置代理
 扫描mapper接口并生成代理对象同时自动加载mapper.xml文件
 -->
 <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
     <!-- 配置Mapper接口 -->
     <property name="basePackage" value="com.galaxy.crm.mapper"/>
 </bean>
- 
spring帮mybatis管理了事务
 
 <!--管理式事务管理-->
 <bean id="myHibTransactionManager"
       class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
     <property name="dataSource" ref="dataSource"></property>
 </bean>
4.1 注解形式
 <!--开启注解型事务管理-->
 <tx:annotation-driven transaction-manager="myHibTransactionManager"/>
4.2 xml方式(自定义)
 //xml方式配置事务管理
 //定义切面
 <tx:advice id="txMangener" transaction-manager="myHibTransactionManager">
     <!--限定方法的命名规则-->
     <tx:attributes>
          <tx:method name="insert*" propagation="REQUIRED"/>
          <tx:method name="delete*" propagation="REQUIRED"/>
          <tx:method name="*" propagation="NOT_SUPPORTED" read-only="true"/>
          <tx:method name="update*" propagation="REQUIRED"/>
      </tx:attributes>
  </tx:advice>
  <aop:config>
      <aop:pointcut id="mycut" expression="execution(* com.galaxy.crm.service.impl.*.*(..))"></aop:pointcut>
      <aop:advisor advice-ref="txMangener" pointcut-ref="mycut"></aop:advisor>
  </aop:config>
3.web.xml中
3.1 添加监听器 监听tomcat启动状态,加载spring配置文件
 <!--1.加载application.xml文件
   1.1配置监听器
   1.2配置全局初始化参数
 -->
   <welcome-file-list>
     <welcome-file>login.jsp</welcome-file>
   </welcome-file-list>
   <listener>
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
   </listener>
   <context-param>
     <param-name>contextConfigLocation</param-name>
     <param-value>classpath:applicationContext.xml</param-value>
   </context-param>
3.2 添加springMVC的中央控制器,并设置开启tomcat自动启动,加载springmvc配置文件,设置dispatcherServlet处理所有请求,静态资源被拦截了
 <!--
   2.加载springmvc.xml
   2.1配置DispatcherServlet
 -->
   <servlet>
     <servlet-name>dispatcherServlet</servlet-name>
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
     <init-param>
       <param-name>contextConfigLocation</param-name>
       <param-value>classpath:springmvc.xml</param-value>
     </init-param>
     <load-on-startup>1</load-on-startup>
   </servlet>
   <servlet-mapping>
     <servlet-name>dispatcherServlet</servlet-name>
     <!--
         /会拦截所有的请求(包含静态资源),一旦是静态资源,是没有对应的处理器处理的,所以就是404
     -->
     <url-pattern>/</url-pattern>
   </servlet-mapping>
3.3添加utf-8编码过滤器,解决post请求接收中文乱码
 <!-- 配置字符集过滤器 -->
 <filter>
   <filter-name>CharacterEncodingFilter</filter-name>
   <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
   <init-param>
     <param-name>encoding</param-name>
     <param-value>UTF-8</param-value>
   </init-param>
 </filter>
 <filter-mapping>
   <filter-name>CharacterEncodingFilter</filter-name>
   <url-pattern>/*</url-pattern> <!--拦截所有的URL请求 -->
 </filter-mapping>
3.4 添加方法过滤器,让springMVC能接收put,delete请求,处理restful请求风格
 <!--配置PUT和 DELETE请求过滤器-->
 <filter>
   <filter-name>HiddenHttpMethodFilter</filter-name>
   <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
 </filter>
 <filter-mapping>
   <filter-name>HiddenHttpMethodFilter</filter-name>
   <url-pattern>/*</url-pattern>
 </filter-mapping>
4.springMVC.xml中
- 
扫描controller
 - 
配置处理器映射器及处理器适配器(如果不配置,@ResponseBody无效)
 - 
配置视图解析器
 - 
使用默认的servlet处理未映射的资源,放行静态资源
 
 <!--扫描@controller注解-->
 <context:component-scan base-package="com.galaxy.crm.controller" />
    <mvc:annotation-driven></mvc:annotation-driven>
 <bean
    class="org.springframework.web.servlet.view.InternalResourceViewResolver"
    p:prefix="/WEB-INF/jsp/" p:suffix=".jsp" />
 <!--使用默认的servlet来处理映射不到的请求
    放行静态资源
 -->
 <mvc:default-servlet-handler/>
5.Conf.xml
因为本身conf.xml中的配置都被spring管理了,所以在这只配置别名即可
 <configuration>
     <typeAliases>
         <package name="com.galaxy.crm.bean"></package>
     </typeAliases>
 </configuration>
登陆:
在用户登陆成功后,在main.jsp页面中发送ajax请求。根据用户角色不同,登陆成功后显示不同的树状结构。
RBAC思想设计数据库
通过t_user -->t_sysRight 四表关联,查询用户对应的所有权限
前台:使用easyUI-lay进行布局,左侧使用ztree加载后台返回的简单json数据
easyUI单页面无刷新,里面的组件都是自动发送ajax请求与后台交互,局部刷新页面
销售机会管理/客户开发计划分页:
因为datagrid组件会自动计算分页,通过pageNation分页条。所以我们只需要返回datagrid规定格式的json即可自动完成分页。{“total”:总条数,”rows”:分页数据集合}
所以后台封装了DatagridResult用户于datagrid组件进行交互
借助了pageHelper分页插件完成了分页查询功能
销售机会管理
saleChance/list/0 devResult=0 检索所有未开发的机会
客户开发计划
saleChance/list/1 state=1 检索已分配的机会
又因为都有查询条件
所以后台使用tsaleChance对象接收前台的查询条件参数,后台通过自定义mapper,动态sql的方式完成了查询工作
销售机会管理的增删改查:
插入:
弹出层:easyui-dialog
下拉框:easyui-combobox
文本验证框: easyui-validatebox
数字验证框:easyui-numberbox
表单:easyui-form
先处理combobox发送的url,检索所有的客户经理显示到下拉列表中
输入内容后,点击提交
调用$(“#form”).form(“submit”,{
onSubmit:提交前校验 function(){
Return true/false
}
Success:function(data){根据data局部刷新页面(关闭对话框dialog,调用datagrid(“reload”)刷新成最新数据显示)}
})
修改:
点击修改按钮,会调用$(“form”).form(“load”,row);根据选中的行,回显数据。无须通过后台查询
如果修改了的是没有分配的机会,给他分配了一个客户经理
后台直接把state=1设好就行
删除:
可以删除一条或多条,前台通过js拼接ids字符串如1,2,3,4,5
后台将字符串变List<Interger>格式,调用逆向工程的andIdIn(list)创建条件删除数据
删除完成后,同样刷新datagrid显示最新数据
客户开发计划增删改查:
查询
客户开发计划
saleChance/list/1 state=1 检索已分配的机会
点击开发按钮,新增选项卡并且请求?saleChanceId=xx
在新增的选项卡中,通过${param.saleChanceId}取到对应的参数
在页面中,ajax发送了两个请求,一个是findById根据id检索销售机会,一个是GET cusDevPlan/33根据33外键检索所有的销售计划
增删改:
Restful风格发送请求,后台处理,根据前台请求成功的回调函数,决定返回的内容
增改:
返回数据库最新的数据
在逆向工程的insert方法中添加了查询主键,插入后将id主键返回给参数,
Controller直接将参数通过自定义的json转换,转换日期为规定格式字符串响应给前台。
fastJson技术。
删:
只能单条删除,后台接到delete方式的请求,根据id删除数据,返回{success:true/false}
开发成功/中止开发
接收请求,修改devResult为接收的参数,返回{success:true/false},前台openTab(),closeTab()将当前选项卡关闭,并重新打开一个客户开发计划的选项卡来查看最新的数据。
大家的总结文档:需要详细的实现代码
Ajax异步请求
同步请求,异步请求
一车道 多车道
同步请求:返回一整个jsp页面 交互比较复杂 ,用户体验差
异步请求:返回json数据 前台在请求成功的回调中通过js修改dom节点。 即使请求没有处理完,不妨碍页面元素加载的,但是就是显示的内容没有及时的修改。增加了用户体验。
前台发送ajax的形式:
\1. 自己发
$.ajax({
data:
Type:
Url:
Success:function(data){局部刷新}
})
$.get() 发送ajax的get请求
$.post() 发送ajax的post请求
$.load() 异步加载服务器资源的时候使用
后台处理:
后台响应json数据即可,具体json是啥,分析前台的success回调中如何处理的逻辑来决定json的格式
能转换json:
\1. @ResponseBody 返回对象自动转换json
\2. 自定义转换 fastJson,通过response.getWriter().print(json字符串)
\2. 用前端框架控件发
Datagrid form combobox......
200 请求成功
500 服务器内部错误 后台控制台会报错
404 资源为找到 1.请求处理了但是返回的内容不能找到跳转的路径2.请求没接收到(断点调试)
405 请求方式不匹配 检查前后台请求方式处理方式是否一致
400 参数不能正常映射 1.检查参数名称2.检查参数类型(String--->Date 后台加入@DateTimeFormat注解)
                    
                
                
            
        
浙公网安备 33010602011771号