CRM_SSH(二)

客户模块---新增客户

1、创建表

CREATE TABLE `cst_customer` (
  `cust_id` bigint(32) NOT NULL AUTO_INCREMENT COMMENT '客户编号(主键)',
  `cust_name` varchar(32) NOT NULL COMMENT '客户名称(公司名称)',
  `cust_source` varchar(32) DEFAULT NULL COMMENT '客户信息来源',
  `cust_industry` varchar(32) DEFAULT NULL COMMENT '客户所属行业',
  `cust_level` varchar(32) DEFAULT NULL COMMENT '客户级别',
  `cust_phone` varchar(64) DEFAULT NULL COMMENT '固定电话',
  `cust_mobile` varchar(16) DEFAULT NULL COMMENT '移动电话',
  PRIMARY KEY (`cust_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

2、创建实体和映射

  • 创建实体
public class Customer {

	private long cust_id;
	private String cust_name;
	private String cust_source;
	private String cust_industry;
	private String cust_level;
	private String cust_phone;
	private String cust_mobile;

    get/set...
}
  • 创建映射
    <hibernate-mapping>
    	<class name="com.ithou.crm.domain.Customer" table="cst_customer">
    		<id name="cust_id" column="cust_id">
    			<generator class="native"/>
    		</id>
    		<property name="cust_name" column="cust_name"/>
    		<property name="cust_source" column="cust_source"/>
    		<property name="cust_industry" column="cust_industry"/>
    		<property name="cust_level" column="cust_level"/>
    		<property name="cust_phone" column="cust_phone"/>
    		<property name="cust_mobile" column="cust_mobile"/>
    	</class>
    </hibernate-mapping>

3、创建Action

public class CustomerAction extends ActionSupport implements ModelDriven<Customer> {

	private Customer customer = new Customer();
	@Override
	public Customer getModel() {
		return customer;
	}

	private CustomerService customerService;
	public void setCustomerService(CustomerService customerService) {
		this.customerService = customerService;
	}
}

4、创建Service

public class CustomerServiceImpl implements CustomerService{
	
	private CustomerDao customerDao;
	public void setCustomerDao(CustomerDao customerDao) {
		this.customerDao = customerDao;
	}
}

5、创建Dao

public class CustomerDaoImpl extends BaseDaoImpl<Customer> implements CustomerDao{

}

6、配置Action、Service、Dao

	<!-- 配置客户管理的相关的类 -->
	<bean id="customerDao" class="com.ithou.crm.dao.impl.CustomerDaoImpl">
		<property name="sessionFactory" ref="sessionFactory" />
	</bean>
	<bean id="customerService" class="com.ithou.crm.service.impl.CustomerServiceImpl">
		<property name="customerDao" ref="customerDao" />
	</bean>
	<bean id="customerAction" class="com.ithou.crm.web.action.CustomerAction">
		<property name="customerService" ref="customerService" />
	</bean>

7、跳转到添加页面,修改menu.jsp菜单页面

8、编写Action中的saveUI的方法

	/**
	 * 客户管理:跳转到添加页面的方法:saveUI
	 */
	public String saveUI() {
		return "saveUI";
	}

9、配置Action的跳转

	<action name="customer_*" class="com.ithou.crm.web.action.CustomerAction" method="{1}">
		<result name="saveUI">/jsp/customer/add.jsp</result>
	</action>

引入数据字典

数据字典:用来规范某些地方具体值和数据

1、创建数据字典表

CREATE TABLE `base_dict` (
  `dict_id` varchar(32) NOT NULL COMMENT '数据字典id(主键)',
  `dict_type_code` varchar(10) NOT NULL COMMENT '数据字典类别代码',
  `dict_type_name` varchar(64) NOT NULL COMMENT '数据字典类别名称',
  `dict_item_name` varchar(64) NOT NULL COMMENT '数据字典项目名称',
  `dict_item_code` varchar(10) DEFAULT NULL COMMENT '数据字典项目(可为空)',
  `dict_sort` int(10) DEFAULT NULL COMMENT '排序字段',
  `dict_enable` char(1) NOT NULL COMMENT '1:使用 0:停用',
  `dict_memo` varchar(64) DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`dict_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

2、客户表和字典表的关系分析

3、创建字典的实体和映射

  • 创建实体
public class BaseDict {

	private String dict_id;
	private String dict_type_code;
	private String dict_type_name;
	private String dict_item_name;
	private String dict_item_code;
	private String dict_sort;
	private String dict_enable;
	private String dict_memo;

    get/set...
}
  • 创建映射
    <hibernate-mapping>
    	<class name="com.ithou.crm.domain.BaseDict" table="base_dict">
    		<id name="dict_id" column="dict_id">
    			<generator class="native"/>
    		</id>
    		<property name="dict_type_code" column="dict_type_code"/>
    		<property name="dict_type_name" column="dict_type_name"/>
    		<property name="dict_item_name" column="dict_item_name"/>
    		<property name="dict_item_code" column="dict_item_code"/>
    		<property name="dict_sort" column="dict_sort"/>
    		<property name="dict_enable" column="dict_enable"/>
    		<property name="dict_memo" column="dict_memo"/>
    	</class>
    </hibernate-mapping>

4、修改字典和客户的关系映射

  • 修改客户的实体
public class Customer {

	private long cust_id;
	private String cust_name;
	/*private String cust_source;
	private String cust_industry;
	private String cust_level;*/
	private String cust_phone;
	private String cust_mobile;
	private String cust_image;
	
	/**
	 * 客户和字典表示多对一,需要在多的一方放的时一的一方的对象
	 */
	private BaseDict baseDictSource;
	private BaseDict baseDictIndustry;
	private BaseDict baseDictLevel;

    get/set...
}
  • 修改客户的映射
    <hibernate-mapping>
    	<class name="com.ithou.crm.domain.Customer" table="cst_customer">
    		<id name="cust_id" column="cust_id">
    			<generator class="native"/>
    		</id>
    		<property name="cust_name" column="cust_name"/>
    		<property name="cust_phone" column="cust_phone"/>
    		<property name="cust_mobile" column="cust_mobile"/>
    		<property name="cust_image" column="cust_image"/>
    		
                <!-- 配置客户与字典的多对一的映射 -->
    		<many-to-one name="baseDictSource" class="com.ithou.crm.domain.BaseDict" column="cust_source"></many-to-one>
    		<many-to-one name="baseDictIndustry" class="com.ithou.crm.domain.BaseDict" column="cust_industry"></many-to-one>
    		<many-to-one name="baseDictLevel" class="com.ithou.crm.domain.BaseDict" column="cust_level"></many-to-one>
    	</class>
    </hibernate-mapping>

5、将映射文件交给spring

	<!-- 引入映射文件 -->
	<property name="mappingResources">
		<list>
			<value>/com/ithou/crm/domain/user.hbm.xml</value>
			<value>/com/ithou/crm/domain/customer.hbm.xml</value>
			<value>/com/ithou/crm/domain/baseDict.hbm.xml</value>
		</list>
	</property>

在添加页面上异步加载字典数据

1、创建字典的Action、Service、Dao

  • 编写Dao
public class BaseDictDaoImpl extends BaseDaoImpl<BaseDict> implements BaseDictDao{

}
  • 编写Service
public class BaseDictServiceImpl implements BaseDictService {

	private BaseDictDao baseDictDao;
	public void setBaseDictDao(BaseDictDao baseDictDao) {
		this.baseDictDao = baseDictDao;
	}
}
  • 编写Action
public class BaseDictAction extends ActionSupport implements ModelDriven<BaseDict> {

	private BaseDict baseDict = new BaseDict();
	@Override
	public BaseDict getModel() {
		return baseDict;
	}
	
	private BaseDictService baseDictService;
	public void setBaseDictService(BaseDictService baseDictService) {
		this.baseDictService = baseDictService;
	}
}

2、将字典类交给Spring

	<!-- 配置字典管理的相关的类 -->
	<bean id="baseDictDao" class="com.ithou.crm.dao.impl.BaseDictDaoImpl">
		<property name="sessionFactory" ref="sessionFactory" />
	</bean>
	<bean id="baseDictService" class="com.ithou.crm.service.impl.BaseDictServiceImpl">
		<property name="baseDictDao" ref="baseDictDao" />
	</bean>
	<bean id="baseDictAction" class="com.ithou.crm.web.action.BaseDictAction">
		<property name="baseDictService" ref="baseDictService" />
	</bean>

3、引入jequery的js(在添加页面jsp/customer/add.jsp上)

4、编写异步加载的方法

<script type="text/javascript">
	$(function() {
		$.post("${pageContext.request.contextPath }/baseDict_findByTypeCode.action",{"dict_type_code" : "002"}, function(data) {
			$(data).each(function(i, n) {
				$("#cust_source").append("<option value='"+n.dict_id+"'>"+ n.dict_item_name+ "</option>");
				});
			}, "json");
	});
</script>

5、编写Action

package com.ithou.crm.web.action;

import java.io.IOException;
import java.util.List;

import org.apache.struts2.ServletActionContext;
import org.springframework.transaction.annotation.Transactional;

import com.ithou.crm.domain.BaseDict;
import com.ithou.crm.service.BaseDictService;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

import net.sf.json.JSONArray;
import net.sf.json.JsonConfig;

public class BaseDictAction extends ActionSupport implements ModelDriven<BaseDict> {

	private BaseDict baseDict = new BaseDict();
	@Override
	public BaseDict getModel() {
		return baseDict;
	}
	
	private BaseDictService baseDictService;
	public void setBaseDictService(BaseDictService baseDictService) {
		this.baseDictService = baseDictService;
	}
	
        //根据类型名称查询字典的方法
	public String findByTypeCode() throws IOException {
		List<BaseDict> list = baseDictService.findByTypeCode(baseDict.getDict_type_code());
		//将list转换成json
		/*
		 * JSONConfig:转JSON的配置对象
		 * JSONArray:将数组和list集合转成JSON
		 * JSONObject:将对象和Map集合转成JSON
		 */
		JsonConfig jsonConfig = new JsonConfig();
		jsonConfig.setExcludes(new String[]{"dict_sort","dict_enable","dict_memo"});
		JSONArray jsonArray = JSONArray.fromObject(list, jsonConfig);
		System.out.println(jsonArray.toString());
		
		//将json打印到页面
		ServletActionContext.getResponse().setContentType("text/html;charset=UTF-8");
		ServletActionContext.getResponse().getWriter().println(jsonArray.toString());
		return NONE;
	}
}

6、编写Service

public class BaseDictServiceImpl implements BaseDictService {

	private BaseDictDao baseDictDao;
	public void setBaseDictDao(BaseDictDao baseDictDao) {
		this.baseDictDao = baseDictDao;
	}

	@Override
	public List<BaseDict> findByTypeCode(String dict_type_code) {
		return baseDictDao.findByTypeCode(dict_type_code);
	}
}

7、编写Dao

public class BaseDictDaoImpl extends BaseDaoImpl<BaseDict> implements BaseDictDao{

	@Override
	public List<BaseDict> findByTypeCode(String dict_type_code) {
		return (List<BaseDict>) this.getHibernateTemplate().find("from BaseDict where dict_type_code = ?", dict_type_code);
	}
}

8、加载其他字典项数据

<script type="text/javascript">
	$(function() {
		$.post("${pageContext.request.contextPath }/baseDict_findByTypeCode.action",{"dict_type_code" : "002"}, function(data) {
			$(data).each(function(i, n) {
				$("#cust_source").append("<option value='"+n.dict_id+"'>"+ n.dict_item_name+ "</option>");
				});
			}, "json");
	});
	$(function() {
		$.post("${pageContext.request.contextPath }/baseDict_findByTypeCode.action",{"dict_type_code" : "006"}, function(data) {
			$(data).each(function(i, n) {
				$("#cust_level").append("<option value='"+n.dict_id+"'>"+ n.dict_item_name+ "</option>");
				});
			}, "json");
	});
	$(function() {
		$.post("${pageContext.request.contextPath }/baseDict_findByTypeCode.action",{"dict_type_code" : "001"}, function(data) {
			$(data).each(function(i, n) {
				$("#cust_industry").append("<option value='"+n.dict_id+"'>"+ n.dict_item_name+ "</option>");
				});
			}, "json");
	});
</script>

保存数据到数据库中

1、修改添加页面

  • 修改表单项名称

2、编写Action

	public String save() throws IOException {
		customerService.save(customer);
		return "saveSuccess";
	}

3、编写Service

	public void save(Customer customer) {
		customerDao.save(customer);
	}

4、编写Dao

public class CustomerDaoImpl extends BaseDaoImpl<Customer> implements CustomerDao{
    public void save(Customer customer){
        this.getHibernateTemplete().save(customer);
    }
}

5、添加事务

客户管理---分页查询客户

1、修改menu.jsp

2、编写Action中findAll的方法

	public String findAll() {
		// 接收参数:分页参数
		// 封装离线条件查询对象,使用DetachedCriteria对象(条件查询--带分页)
		DetachedCriteria detachedCriteria = DetachedCriteria.forClass(Customer.class);
		
		PageBean<Customer> pageBean = customerService.findByPage(detachedCriteria, currPage, pageSize);
		//将pageBean的数据存入到值栈
		ActionContext.getContext().getValueStack().push(pageBean);
		return "findAll";
	}

3、编写Service

	public PageBean<Customer> findByPage(DetachedCriteria detachedCriteria, Integer currPage, Integer pageSize) {
		PageBean<Customer> pageBean = new PageBean<Customer>();
		pageBean.setCurrPage(currPage);//封装当前页
		pageBean.setPageSize(pageSize);//封装每页记录数
		
		Integer totalCount = customerDao.findCount(detachedCriteria);
		pageBean.setTotalCount(totalCount);//封装总记录数
		
		Double tc = totalCount.doubleValue();
		Double num = Math.ceil(tc/pageSize);
		pageBean.setTotalPage(num.intValue());//封装总页数
		
		Integer begin = (currPage-1)*pageSize;
		List<Customer> list = customerDao.findByPage(detachedCriteria,begin,pageSize);
		pageBean.setList(list);
		return pageBean;
	}

4、编写Dao

	@Override
        //Dao中带条件统计个数的方法
	public Integer findCount(DetachedCriteria detachedCriteria) {
		detachedCriteria.setProjection(Projections.rowCount());
		List<Long> list = (List<Long>) this.getHibernateTemplate().findByCriteria(detachedCriteria);
		if(list.size()>0) {
			return list.get(0).intValue();
		}
		return null;
	}

	@Override
        //Dao中分页查询客户的方法
	public List<T> findByPage(DetachedCriteria detachedCriteria, Integer currPage, Integer pageSize) {
		detachedCriteria.setProjection(null);
		return (List<T>) this.getHibernateTemplate().findByCriteria(detachedCriteria, currPage, pageSize);
	}

5、配置页面跳转

    <action name="customer_*" class="com.ithou.crm.web.action.CustomerAction" method="{1}">
	    <result name="saveUI">/jsp/customer/add.jsp</result>
	    <result name="findAll">/jsp/customer/list.jsp</result>
    </action>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值