SSHDay05(多对多关系处理 日期 客户拦截器 来源统计)

搭建客户拜访表的开发环境
1、客户关系拜访表是该系统的用户和客户之间的关系建立表
    用户可以拜访多个客户
    客户也可以被多个用户拜访
    所以:用户和客户之间应该是多对多的关系,那么客户拜访表就是用户和客户直接的中间表
    正常的情况下,在用户和客户中添加set集合,在映射的配置文件中配置<set>标签即可
    但是现在客户拜访中间表中存在其他的字段,默认的情况下,中间表只能维护外键,而不能维护其他的字段,所以需要把多对多拆开成多个一对多

2、用户与客户拜访表是一对多的关系
3、客户与客户拜访表是一对多的关系
4、创建客户拜访表的实体类和映射配置文件
5、编写客户拜访的Action等类和完成配置
    Action编写@Controller(value="visitAction")
    @Scope(value="prototype")
    Service编写@Service(value="visitService")
    @Transactional
    Dao编写@Repository(value="visitDao")
        重点是Dao中注入SessionFactory对象
            @Resource(name="sessionFactory")
            public void set2SessionFactory(SessionFactory sessionFactory){
                //关键,调用父类的方法
                super.setSessionFactory(sessionFactory);
            }

客户拜访列表查询功能
1、查询我的客户拜访记录
    登录的用户,点击客户拜访列表,查询该用户下的所有的拜访记录
    通过用户的主键查询该用户下的所有的拜访记录

新增客户拜访记录功能
1、点击新增客户拜访功能菜单,跳转到新增页面,输入信息,保存数据
    从HttpSession中获取到用户的信息,设置到拜访记录中,保存到数据库中

按条件查询客户信息列表功能
添加开始和结束日期的选项
    $(function(){
        //给beginDate和endDate绑定日期控件的方法
        $('#beginDate').datepick({dateFormat: 'yy-mm-dd'}); 
        $('#endDate').datepick({dateFormat: 'yy-mm-dd'}); 
    });
    <TD>选择日期:</TD>
    <TD>
        <INPUT class=textbox id="beginDate" style="WIDTH: 80px" maxLength=50 name="beginDate">
        至
        <INPUT class=textbox id="endDate" style="WIDTH: 80px" maxLength=50 name="endDate">
    </TD>   

客户来源统计
统计客户的来源,即该来源下有多少个客户
    SQL语句:SELECT d.dict_item_name,COUNT(*) FROM cst_customer c,base_dict d WHERE d.dict_id = c.cust_source GROUP BY d.dict_id;
    HQL语句:String hql= "select c.source.dict_item_name,count(*) from Customer c inner join c.source group by c.source";


用户登录的拦截器
拦截器的功能实现
1、功能:如果用户没有登录,不能操作后台的功能
2、代码
    public class UserInterceptor extends MethodFilterInterceptor{

        private static final long serialVersionUID = -6298831508261295982L;

        /**
         * 拦截目标Action的方法
         */
        @Override
        protected String doIntercept(ActionInvocation invocation) throws Exception {
            //获取session
            User user = (User) ServletActionContext.getRequest().getSession().getAttribute("existUser");
            if(user == null){
                return "login";
            }
            //执行下一个拦截器
            return invocation.invoke();
        }

    }

3、配置
    <interceptors>
        <interceptor name="userInterceptor" class="my.web.interceptor.UserInterceptor"></interceptor>
    </interceptors>
    <!-- login,regist,checkCode 方法不拦截 -->
    <interceptor-ref name="userInterceptor">
        <param name="excludeMethods">login,regist,checkCode</param>
    </interceptor-ref>
    <interceptor-ref name="defaultStack"></interceptor-ref>
@Controller(value="visitAction")
@Scope(value="prototype")
public class VisitAction extends BaseAction implements ModelDriven<Visit>{

    private static final long serialVersionUID = 466690322690214519L;
    private Visit visit = new Visit();
    public Visit getModel() {

        return visit;
    }
    @Resource(name="visitService")
    private VisitService visitService;

    private String beginDate;
    private String endDate;


    public void setBeginDate(String beginDate) {
        this.beginDate = beginDate;
    }
    public void setEndDate(String endDate) {
        this.endDate = endDate;
    }
    /**
     * 分页的查询
     * 查询客户的拜访记录,根据用户的主键查询
     * select * from sale_visit where visit_user_id = ?
     */
    public String findByPage(){
        //先获取当前登录的用户
        User user = (User) ServletActionContext.getRequest().getSession().getAttribute("existUser");
        //判断
        if(user == null){
            return LOGIN;
        }
        //查询该用户下所有的拜访记录
        DetachedCriteria criteria = DetachedCriteria.forClass(Visit.class);
        //拼接查询的条件
        if(beginDate !=null && !beginDate.trim().isEmpty()){
            criteria.add(Restrictions.ge("visit_time",beginDate));
        }
        //select * from xx where visit_time >=? and visit_time <=?
        if(endDate !=null && !endDate.trim().isEmpty()){
            criteria.add(Restrictions.le("visit_time",endDate));
        }
        //添加查询的条件
        criteria.add(Restrictions.eq("user.user_id", user.getUser_id()));
        //分页查询
        PageBean<Visit> page = visitService.findByPage(this.getPageCode(),this.getPageSize(),criteria);
        this.setVs("page", page);

        return "page";
    }
    /**
     * 保存拜访记录
     * @return
     */
    public String save(){
        //把用户获取到,设置到当前的拜访记录中,再保存
        User user = (User) ServletActionContext.getRequest().getSession().getAttribute("existUser");
        //判断
        if(user == null){
            return LOGIN;
        }
        //设置
        visit.setUser(user);
        //保存数据
        visitService.save(visit);
        return "save";
    }
}
@Repository(value="visitDao")
public class VisitDaoImpl extends BaseDaoImpl<Visit> implements VisitDao {

    /*//注入sessionFactory
    @Resource(name="sessionFactory")
    private SessionFactory sessionFactory;*/
    /* 很麻烦 因为 base不能用了
     * @
    private HibernateTemplate hibernateTemplate;*/
    @Resource(name="sessionFactory")
    public void set2SessionFactory(SessionFactory sessionFactory){
        //关键,调用父类的方法
        super.setSessionFactory(sessionFactory);
    }
}
@Service(value="visitService")
@Transactional
public class VisitServiceImpl implements VisitService{
    @Resource(name="visitDao")
    private VisitDao visitDao;
/**
 * 用户拦截器,判断用户是否已经登录,如果登录,执行下一个拦截器
 * 如果没有登录,返回到登录页面(不能对所有的请求都拦截,login和regist方法不能拦截)
 * 继承指定拦截器
 * @author Administrator
 *
 */
public class UserInterceptor extends MethodFilterInterceptor{

    private static final long serialVersionUID = -6298831508261295982L;

    /**
     * 拦截目标Action的方法
     */
    @Override
    protected String doIntercept(ActionInvocation invocation) throws Exception {
        //获取session
        User user = (User) ServletActionContext.getRequest().getSession().getAttribute("existUser");
        if(user == null){
            return "login";
        }
        //执行下一个拦截器
        return invocation.invoke();
    }

}
   <!-- 引入默认的拦截器 -->
            <interceptor-ref name="defaultStack">
                <!-- 设置单个上传文件的大小 -->
                <param name="fileUpload.maximumSize">2097152</param>
                <!-- 决定上传文件的类型 -->
                <param name="fileUpload.allowedExtensions">.jpg,.txt</param>
            </interceptor-ref>
        </action>
        <!-- 配置客户的模块 -->
        <action name="user_*" class="userAction" method="{1}">
            <result name="loginOK" type="redirect">/index.jsp</result>
            <!-- login,regist,checkCode 方法不拦截 -->
            <interceptor-ref name="userInterceptor">
                <param name="excludeMethods">login,regist,checkCode</param>
            </interceptor-ref>
            <interceptor-ref name="defaultStack"></interceptor-ref>
        </action> 
        <!-- 字典模块 -->
        <action name="dict_*" class="dictAction" method="{1}">
            <interceptor-ref name="userInterceptor"/>
            <interceptor-ref name="defaultStack"/>
        </action> 
        <!-- 联系人模块 -->
        <action name="linkman_*" class="linkmanAction" method="{1}">
            <result name="page">/jsp/linkman/list.jsp</result>
            <interceptor-ref name="userInterceptor"/>
            <interceptor-ref name="defaultStack"/>
        </action>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值