如何创建一个完整的CRM工程

本文详细介绍了CRM系统中涉及的模块与组件,包括登录、分页、新建、客户销售机会管理等功能。同时,展示了如何配置web.xml、springDispatcherServlet等关键步骤,以及通过applicationContext.xml、ehcache-hibernate.xml等配置文件实现数据持久化和事务管理。此外,还提供了登录操作的实现方式,并通过实体类如User、Role、Authority展示了权限管理和用户认证的实现细节。
CRM包括很多功能模块,如登录,分页,新建,客户销售机会管理等,在这里zh
00_jar包
antlr-2.7.7.jar
c3p0-0.9.2.1.jar
com.springsource.net.sf.cglib-2.2.0.jar
com.springsource.org.aopalliance-1.0.0.jar
com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar
commons-logging-1.1.3.jar
dom4j-1.6.1.jar
ehcache-core-2.4.3.jar
hibernate-c3p0-4.2.4.Final.jar
hibernate-commons-annotations-4.0.2.Final.jar
hibernate-core-4.2.4.Final.jar
hibernate-ehcache-4.2.4.Final.jar
hibernate-entitymanager-4.2.4.Final.jar
hibernate-jpa-2.0-api-1.0.1.Final.jar
javassist-3.15.0-GA.jar
jboss-logging-3.1.0.GA.jar
jboss-transaction-api_1.1_spec-1.0.1.Final.jar
mchange-commons-java-0.2.3.4.jar
ojdbc14.jar
slf4j-api-1.6.1.jar
spring-aop-4.0.0.RELEASE.jar
spring-aspects-4.0.0.RELEASE.jar
spring-beans-4.0.0.RELEASE.jar
spring-context-4.0.0.RELEASE.jar
spring-core-4.0.0.RELEASE.jar
spring-data-commons-1.6.2.RELEASE.jar
spring-data-jpa-1.4.2.RELEASE.jar
spring-expression-4.0.0.RELEASE.jar
spring-jdbc-4.0.0.RELEASE.jar
spring-orm-4.0.0.RELEASE.jar
spring-tx-4.0.0.RELEASE.jar
spring-web-4.0.0.RELEASE.jar
spring-webmvc-4.0.0.RELEASE.jar
 
 
01_配web.xml
<context-param>
           <param-name> contextConfigLocation</param-name >
           <param-value> classpath:applicationContext*.xml </param-value>
     </context-param > 
     <listener >
           <listener-class> org.springframework.web.context.ContextLoaderListener</listener-class >
     </listener >
     
     <!-- 配置 OpenEntityManagerInViewFilter. 解决 JPA 懒加载问题的 Filter -->
     <filter >
           <filter-name> OpenEntityManagerInViewFilter</filter-name >
           <filter-class> org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter </filter-class>
     </filter >
     
     <filter-mapping >
           <filter-name> OpenEntityManagerInViewFilter</filter-name >
           <url-pattern> /*</ url-pattern>
     </filter-mapping >
     
     <!-- 配置字符编码过滤器 -->
     <filter >
           <filter-name> CharacterEncodingFilter</filter-name >
           <filter-class> org.springframework.web.filter.CharacterEncodingFilter</filter-class >
     </filter >
     
     <filter-mapping >
           <filter-name> CharacterEncodingFilter</filter-name >
           <url-pattern> /*</ url-pattern>
     </filter-mapping >
     
     <!--
     配置可以把 POST 请求解析为 PUT 或 DELETE 请求的 Filter.
  注意: 该 Filter 必须配置在 CharacterEncodingFilter 的后面
     否则会导致 CharacterEncodingFilter 无效.
     -->
     <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 >     
     
     <servlet >
           <servlet-name> springDispatcherServlet</servlet-name >
           <servlet-class> org.springframework.web.servlet.DispatcherServlet</servlet-class >
           <load-on-startup> 1</ load-on-startup>
     </servlet >
 
     <servlet-mapping >
           <servlet-name> springDispatcherServlet</servlet-name >
           <url-pattern> /</ url-pattern>
     </servlet-mapping >
02_配置springDispatcherServlet-sevlet.xml
   <!-- 配置自动扫描的包: 注意. 只扫描 @Controller 和 @ControllerAdivce 的 bean -->
<context:component-scanbase-package="com.atuigu.crm"use-default-filters="false">
  <context:include-filter type= "annotation" expression="org.springframework.stereotype.Controller" />
 
           <context:include-filter type= "annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice" />
     </context:component-scan >
     
     <!-- 配置视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" >
           <property name= "prefix" value="/WEB-INF/views/" ></property>
           <property name= "suffix" value =".jsp"></ property>
 </bean >
 
     <!-- 配置能够解析静态 -->
     <mvc:default-servlet-handler />
     
     <!-- 配置 mvc:annotation-driven -->
     <mvc:annotation-driven ></mvc:annotation-driven>
     
03_配置applicationContext.xml
<description>Spring 公共配置</description>

     <!-- 配置自动扫描的包: 注意不扫描 @Controller 注解和 @ControllerAdvice 注解的 bean -->
     <context:component-scan base-package="com.atguigu.crm">
          <context:exclude-filter type="annotation"
               expression="org.springframework.stereotype.Controller" />
          <context:exclude-filter type="annotation"
               expression="org.springframework.web.bind.annotation.ControllerAdvice" />
     </context:component-scan>
    
     <!-- 配置 C3P0 数据源 -->
     <!-- 导入资源文件 -->
     <context:property-placeholder location="classpath:application.properties"/>

     <!-- 配置数据库连接池 -->
     <bean id="dataSource"
          class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
          <property name="driverClass" value="${jdbc.driver}" />
          <property name="url" value="${jdbc.url}" />
          <property name="username" value="${jdbc.username}" />
          <property name="password" value="${jdbc.password}" />
     </bean>
    
     <!-- 整合 JPA: 配置 JPA 的 EntityManagerFactory -->
     <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
          <property name="dataSource" ref="dataSource"></property>
          <property name="jpaVendorAdapter">
               <bean id="jpaVendorAdapter" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>
          </property>
          <property name="packagesToScan" value="com.atguigu.crm"></property>
          <property name="jpaProperties">
               <props>
                    <!-- 二级缓存相关 -->
                    <prop key="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</prop>
                    <prop key="net.sf.ehcache.configurationResourceName">ehcache-hibernate.xml</prop>
                   
                    <!-- 生成的数据表的列的映射策略 -->
                    <prop key="hibernate.ejb.naming_strategy">org.hibernate.cfg.ImprovedNamingStrategy</prop>
                   
                    <!-- hibernate 基本属性 -->
                    <prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
                    <prop key="hibernate.show_sql">true</prop>
                    <prop key="hibernate.format_sql">true</prop>
                    <prop key="hibernate.hbm2ddl.auto">update</prop>
               </props>
          </property>
     </bean>

     <!-- 配置事务管理器 -->
     <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
          <property name="entityManagerFactory" ref="entityManagerFactory"></property>
     </bean>
    
     <!-- 配置支持基于注解的事务 -->
     <tx:annotation-driven transaction-manager="transactionManager"/>
    
     <!-- 配置 SpringData -->
     <jpa:repositories base-package="com.atguigu.crm"
          entity-manager-factory-ref="entityManagerFactory"></jpa:repositories>

</beans>
 
 
 
04_配置application.properties
 
#jdbc.driver=com.mysql.jdbc.Driver
#jdbc.url=jdbc:mysql:///crm5?useUnicode=true&characterEncoding=utf-8
#jdbc.username=root
#jdbc.password=1230

jdbc.driver=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:@127.0.0.1:1521:orcl
jdbc.username=atguigu
jdbc.password=atguigu

jdbc.pool.maxIdle=5
jdbc.pool.maxActive=40
 
05_配置ehcache-hibernate.xml
<ehcache updateCheck="false" name="hibernateCache">

     <diskStore path="java.io.tmpdir/ehcache/crm/hibernate" />

     <!-- DefaultCache setting. -->
     <defaultCache
          maxElementsInMemory="10000"
          eternal="false"
          timeToIdleSeconds="300"
          timeToLiveSeconds="600"
          overflowToDisk="true" />
    
     <!-- 
     <cache
          name="com.atguigu.crm.entity.User"
          maxElementsInMemory="1000"
          eternal="true"
          overflowToDisk="true" />
     -->
         
</ehcache>
 
06_配置i18n.proerties
user.login.disabled=\u7528\u6237\u88AB\u9501\u5B9A!
 
07_完成登录操作(jsp页面)
 
[1].在index.jsp里面
 
<jsp:forward page="/WEB-INF/views/login.jsp"></jsp:forward> 
 
【2】.login.jsp 
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ include file="/commons/common.jsp" %>
   
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<HEAD>
     <TITLE>客户关系管理系统</TITLE>
     <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=GB2312">
    
     <script>
          function doSubmit(){
               document.forms[0].submit();
          }
     </script>
 
<table width="100%">
                              <tr>  <th>
                                        用户名
                                   </th>     <td>
                                        <input type="text" name="name" value="${name }" />
                                   </td>                   </tr>
                              <tr>
                                   <th>
                                        密码
                                   </th>
                                   <td>
                                        <input type="password" name="password" />
                                   </td>
                              </tr>
                             
                              <tr>
                                   <td>
                                        &nbsp;&nbsp;&nbsp;
                                   </td>
                                   <td>
                                        <img onclick="document.forms[0].submit();" style="cursor: hand;"
                                             src="${cp}/static/images/login/login_button.jpg" width="73" height="25">
                                   </td>
                              </tr>
                         </table>
 
 
 
08—完成登录操作功能模块(entity类)
[0]超级类
@MappedSuperclass
public abstract class IdEntity {

     protected Long id;

     @Id
     @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="CRM_SEQ")
     @SequenceGenerator(name="CRM_SEQ", sequenceName="CRM_SEQ", allocationSize=1)
     public Long getId() {
          return id;
     }

     public void setId(Long id) {
          this.id = id;
     }
    
}
 
 
【1】.User类
 
@Entity
@Table(name="USERS")
public class User extends IdEntity{
     private String name;
     private String password;
     private int enabled ;    
     //盐值, 进行密码加密
     private String salt;
     //该用户拥有的角色
     private Role role;
     public User() {
          // TODO Auto-generated constructor stub     }
    
     public User(Long id) {
          this.id = id;     }
 
     public String getName() {
         return name;     }

     public void setName(String name) {
          this.name = name;     }

     public String getPassword() {
          return password;     }

     public void setPassword(String password) {
          this.password = password;     }

     public int getEnabled() {
          return enabled;     }

     public void setEnabled(int enabled) {
          this.enabled = enabled;
     }
    
     public String getSalt() {
          return salt;     }

     public void setSalt(String salt) {
          this.salt = salt;     }

     @ManyToOne
     @JoinColumn(name="ROLE_ID")
     public Role getRole() {
          return role;     }
 
     public void setRole(Role role) {
          this.role = role;     }

     @Transient
     public Collection<String> getRoleList() {
          Collection<String> roles =  new ArrayList<>();
         
          if(role != null){
               for(Authority authority: role.getAuthorities()){
                    roles.add(authority.getName());   }        }         
          return roles;     }}
 
【2】Roles类
 
@Table(name="ROLES")
@Entity
@Cache(usage=CacheConcurrencyStrategy.READ_WRITE)
public class Role extends IdEntity {

     // 角色名称
     private String name;
     // 角色描述
     private String description;
     // 角色状态: 角色是否可用
     private boolean enabled;
     // 角色拥有的权限
     private List<Authority> authorities = new ArrayList<>();
     //该角色分配给了哪些用户
     private Set<User> users = new HashSet<>();

     public String getName() {
          return name;
     }

     public void setName(String name) {
          this.name = name;
     }

     public String getDescription() {
          return description;     }

     public void setDescription(String description) {
          this.description = description;     }

     public boolean isEnabled() {
          return enabled;     }

     public void setEnabled(boolean enabled) {
          this.enabled = enabled;     }

     @ManyToMany
     @JoinTable(
          name="ROLE_AUTHORITY",
          joinColumns={@JoinColumn(name="ROLE_ID")},
          inverseJoinColumns={@JoinColumn(name="AUTHORITY_ID")}
     )
     @Fetch(FetchMode.JOIN)
     @OrderBy("ID")
     @Cache(usage=CacheConcurrencyStrategy.READ_WRITE)
     public List<Authority> getAuthorities() {
          return authorities;     }

     public void setAuthorities(List<Authority> authorities) {
          this.authorities = authorities;     }
    
     public void setAuthorities2(List<String> authorities){
          this.authorities.clear();
          for(String authorityId: authorities){
               this.authorities.add(new Authority(Long.parseLong(authorityId)));         }     }
    
     @Transient
     public List<String> getAuthorities2(){
          List<String> authorites = new ArrayList<>();
          for(Authority authority:this.authorities){
               authorites.add("" + authority.getId());         }
         
          return authorites;     }

     @OneToMany(mappedBy="role")
     public Set<User> getUsers() {
          return users;    }

     public void setUsers(Set<User> users) {
          this.users = users;
     }}
 
 
【3】、Authority类;(权限管理)
@Table(name="AUTHORITIES")
@Entity
@Cache(usage=CacheConcurrencyStrategy.READ_WRITE)
public class Authority extends IdEntity{

     //权限的名字, 用于显示
     private String displayName;
     //权限的名字: 用于配置 Shiro
     private String name;
     //权限允许的行为: 即权限的具体内容.
     private String permissions;
     //父权限
     private Authority parentAuthority;
     //URL 地址
     private String url;
     //子权限
     private List<Authority> subAuthorities = new ArrayList<>();
    
     public Authority(Long id) {
          this.id = id;
     }
    
     public Authority() {
          // TODO Auto-generated constructor stub
     }
    
     public String getDisplayName() {
          return displayName;
     }

     public void setDisplayName(String displayName) {
          this.displayName = displayName;
     }

     public String getName() {
          return name;
     }

     public void setName(String name) {
          this.name = name;
     }

     public String getPermissions() {
          return permissions;
     }

     public void setPermissions(String permissions) {
          this.permissions = permissions;
     }
    
     @ManyToOne
     @JoinColumn(name="PARENT_AUTHORITY_ID")
     public Authority getParentAuthority() {
          return parentAuthority;
     }

     public void setParentAuthority(Authority parentAuthority) {
          this.parentAuthority = parentAuthority;
     }

     @OneToMany(mappedBy="parentAuthority")
     public List<Authority> getSubAuthorities() {
          return subAuthorities;
     }

     public void setSubAuthorities(List<Authority> subAuthorities) {
          this.subAuthorities = subAuthorities;
     }

     @Transient
     public List<String> getPermissionList(){
          return Arrays.asList(permissions.split(","));
     }
    
     public String getUrl() {
          return url;
     }

     public void setUrl(String url) {
          this.url = url;
     }

}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

转载于:https://www.cnblogs.com/panchanghong/p/4698548.html

标题SpringBoot智能在线预约挂号系统研究AI更换标题第1章引言介绍智能在线预约挂号系统的研究背景、意义、国内外研究现状及论文创新点。1.1研究背景与意义阐述智能在线预约挂号系统对提升医疗服务效率的重要性。1.2国内外研究现状分析国内外智能在线预约挂号系统的研究与应用情况。1.3研究方法及创新点概述本文采用的技术路线、研究方法及主要创新点。第2章相关理论总结智能在线预约挂号系统相关理论,包括系统架构、开发技术等。2.1系统架构设计理论介绍系统架构设计的基本原则和常用方法。2.2SpringBoot开发框架理论阐述SpringBoot框架的特点、优势及其在系统开发中的应用。2.3数据库设计与管理理论介绍数据库设计原则、数据模型及数据库管理系统。2.4网络安全与数据保护理论讨论网络安全威胁、数据保护技术及其在系统中的应用。第3章SpringBoot智能在线预约挂号系统设计详细介绍系统的设计方案,包括功能模块划分、数据库设计等。3.1系统功能模块设计划分系统功能模块,如用户管理、挂号管理、医生排班等。3.2数据库设计与实现设计数据库表结构,确定字段类型、主键及外键关系。3.3用户界面设计设计用户友好的界面,提升用户体验。3.4系统安全设计阐述系统安全策略,包括用户认证、数据加密等。第4章系统实现与测试介绍系统的实现过程,包括编码、测试及优化等。4.1系统编码实现采用SpringBoot框架进行系统编码实现。4.2系统测试方法介绍系统测试的方法、步骤及测试用例设计。4.3系统性能测试与分析对系统进行性能测试,分析测试结果并提出优化建议。4.4系统优化与改进根据测试结果对系统进行优化和改进,提升系统性能。第5章研究结果呈现系统实现后的效果,包括功能实现、性能提升等。5.1系统功能实现效果展示系统各功能模块的实现效果,如挂号成功界面等。5.2系统性能提升效果对比优化前后的系统性能
在金融行业中,对信用风险的判断是核心环节之一,其结果对机构的信贷政策和风险控制策略有直接影响。本文将围绕如何借助机器学习方法,尤其是Sklearn工具包,建立用于判断信用状况的预测系统。文中将涵盖逻辑回归、支持向量机等常见方法,并通过实际操作流程进行说明。 一、机器学习基本概念 机器学习属于人工智能的子领域,其基本理念是通过数据自动学习规律,而非依赖人工设定规则。在信贷分析中,该技术可用于挖掘历史数据中的潜在规律,进而对未来的信用表现进行预测。 二、Sklearn工具包概述 Sklearn(Scikit-learn)是Python语言中广泛使用的机器学习模块,提供多种数据处理和建模功能。它简化了数据清洗、特征提取、模型构建、验证与优化等流程,是数据科学项目中的常用工具。 三、逻辑回归模型 逻辑回归是一种常用于分类任务的线性模型,特别适用于二类问题。在信用评估中,该模型可用于判断借款人是否可能违约。其通过逻辑函数将输出映射为0到1之间的概率值,从而表示违约的可能性。 四、支持向量机模型 支持向量机是一种用于监督学习的算法,适用于数据维度高、样本量小的情况。在信用分析中,该方法能够通过寻找最佳分割面,区分违约与非违约客户。通过选用不同核函数,可应对复杂的非线性关系,提升预测精度。 五、数据预处理步骤 在建模前,需对原始数据进行清理与转换,包括处理缺失值、识别异常点、标准化数值、筛选有效特征等。对于信用评分,常见的输入变量包括收入水平、负债比例、信用历史记录、职业稳定性等。预处理有助于减少噪声干扰,增强模型的适应性。 六、模型构建与验证 借助Sklearn,可以将数据集划分为训练集和测试集,并通过交叉验证调整参数以提升模型性能。常用评估指标包括准确率、召回率、F1值以及AUC-ROC曲线。在处理不平衡数据时,更应关注模型的召回率与特异性。 七、集成学习方法 为提升模型预测能力,可采用集成策略,如结合多个模型的预测结果。这有助于降低单一模型的偏差与方差,增强整体预测的稳定性与准确性。 综上,基于机器学习的信用评估系统可通过Sklearn中的多种算法,结合合理的数据处理与模型优化,实现对借款人信用状况的精准判断。在实际应用中,需持续调整模型以适应市场变化,保障预测结果的长期有效性。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值