营销管理模块总结

营销管理模块总结

1. Maven

依赖管理,自动构建。

依赖管理:pom.xml中添加各种jar包的依赖。

自动构建:install安装,自动的编译,测试,安装到本地仓库。

SSM整合:

spring + mybatis

父子级容器问题,spring容器父容器扫描service,springmvc子容器扫描controller

扫描service

2.applicationContext.xml中

  1. 管理数据源 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>
  1. 管理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>
  1. 提供了包扫描器,扫描mapper接口所在的包,自动生成代理对象,加载同一包下的mapper.xml文件

 <!-- Mapper代理的方式开发方式二,扫描包方式配置代理
 扫描mapper接口并生成代理对象同时自动加载mapper.xml文件
 -->
 <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
     <!-- 配置Mapper接口 -->
     <property name="basePackage" value="com.galaxy.crm.mapper"/>
 </bean>
  1. 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中

  1. 扫描controller

  2. 配置处理器映射器及处理器适配器(如果不配置,@ResponseBody无效)

  3. 配置视图解析器

  4. 使用默认的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注解)

 

 

 

 

 

posted @ 2022-06-13 12:08  为了她  阅读(300)  评论(0编辑  收藏  举报