java期末作业、javaee期末作业、ssm期末作业、

本文档详细介绍了CRM客户管理系统的设计与实现,涵盖了系统概述、需求分析、软件设计、源代码和总结。系统采用了Java语言,SSM框架,数据库设计包括多个表,如tbl_activity等,并提供了增删查改的接口。源代码包括控制器、服务接口和服务实现,涉及文件上传下载、Excel导入导出等功能。系统实现了市场活动、用户管理等多个模块,展示了数据库操作和事务处理的实例。
摘要由CSDN通过智能技术生成

《数据库技术课程设计》

设计文档

题    目               客户管理系统系统                            

教    师                                           

院    系               计算机科学与技术系                   

专    业               计算机科学与技术                     

班    级                             

 

目录:

第一章 概述................................................................................................................... 1

1.1 背景.................................................................................................................. 1

1.2 可行性分析....................................................................................................... 1

第二章 需求分析............................................................................................................ 2

2.1 开发运行环境.................................................................................................... 2

2.2 功能模块划分.................................................................................................... 2

2.3 需求模型........................................................................................................... 3

第三章 软件设计............................................................................................................ 4

3.1 设计方案........................................................................................................... 4

3.2 数据库设计....................................................................................................... 5

第四章 源代码................................................................................................................ 6

4.1 关键类清单....................................................................................................... 6

4.2 代码清单........................................................................................................... 7

4.3 源代码............................................................................................................... 8

第五章 总结................................................................................................................. 69

第一章 概述

1.1 开发目的和意义

CRM(Customer Relationship Management)客户关系管理是管理企业与客户之间关系的新型管理机制。终极目标是吸引新客户、保留老客户以及将已有客户转变为忠诚客户,以增加市场份额。

它是一个完整的客户关系管理系统,包括市场、销售、服务3大环节,产品成熟,操作简单,功能强大。帮您从客户全生命周期的各个阶段获取价值。

这是一类软件,很多公司专门做这种CRM系统。我们这个系统,是从咱们一个非常有名的专门致力于CRM项目开发的公司中拿过来的。不同行业的CRM,功能一点都不一样,它是由销售模式来决定的,你比如有分销和直销。

CRM为改善企业与客户之间关系的提供了一种新型管理机制,企业可以规划市场营销活动、增加销售线索、规范客户联系人信息、对不同阶段的交易进行有效区分和统计、妥善安排售后回访、为决策提供支撑等,优化各业务环节,减少各环节客户流失,和公司成本。当然,我们不是全部都做,我们只是拿出来其中的某几个模块来做。

1.2 可行性分析(管理、技术可行性分析)

1)管理上的可行性分析

由此系统的开发,可以节约大量的时间,使得管理人员和员工能够及时获得客户个性化的需求,此外客户关系管理不再是局部的,不再只是销售人员或服务人员所关心的,而是成为企业的核心。

  1. 技术上的可行性分析

信息技术的发展对于客户管理系统给予了强有力的支持,本系统采用java开发语言进行实现,用了ssm框架+jsp+jquery技术和mysql数据库,这些技术都是在校学习期间老师教过和我们自学过,技术不是很难通过一定时间的学习和积累,还有就是该客户管理系统并不是完整的功能,有些很复杂的功能不好实现,所以就没去代码实现,但是将简单较为容易的功能技术大体都实现了,所以将这些技术用于实现客户管理系统是可行的。

第二章 需求分析

2.1 开发运行环境

硬件:Pentium以上的计算机。

软件:Windows 10操作系统、MySql数据库、IDEA编辑器、JDK1.8,tomcat服务器等集成环境。

2.2 功能模块划分

客户管理系统模块的划分如下

2.3 需求模型

图2‑1系统的需求分析结构图

图 2‑2市场活动模块图

图 2‑3用例图

第三章 软件设计

3.1 设计方案

系统有登录页面,主页面,每个模块的主页面以及详细跳转页面等。

登录页面:用户在登录页面,输入用户名和密码,点击"登录"按钮或者回车,完成用户登录的功能.

       *用户名和密码不能为空

       *用户名或者密码错误,用户已过期,用户状态被锁定,ip受限 都不能登录成功

       *登录成功之后,所有业务页面显示当前用户的名称

       *实现10天记住密码

       *登录成功之后,跳转到业务主页面

*登陆失败后,提示信息,不跳转页面

主功能页面中,通过三七分页面,左边三分页面设有导航栏,导航栏中分成不同的管理模块,点击可跳转。主要功能界面在中间,默认页面为为一张图,同时数据库中的各种信息通过导入,显示在主功能界面中。

每个模块主页面中,右边显示区头位置设有创建、修改、删除以及多条件查询功能按钮,显示区的最下方则是一个分页导航栏可以知道有多少条记录,显示每页的记录条数还有具体第几页的信息,首页末页都可以通过点击实现跳转到具体页查看信息,还能对每页显示条数进行修改。

3.2 数据库设计

系统中的表单来源于数据库,系统中添加、删除、修改等操作又在数据库中显现。数据库中分别设有 tbl_activity,tbl_activity_remark,tbl_clue,tbl_clue_activity_relation,tbl_clue_remark,tbl_contacts,tbl_contacts_activity_relation,tbl_contacts_remark,tbl_customer,tbl_customer_remark,tbl_dic_type,tbl_dic_value,tbl_tran,tbl_tran_history,tbl_tran_remark,tbl_user共16张表及其相关属性。

表3‑1数据库设计表

第四章 源代码

4.1 代码清单

图4‑1代码清单图1

图 4‑2代码清单图2

4.2 部分源代码

package cn.szw.crm.workbench.web.Controller;



import cn.szw.crm.commons.constant.Constants;

import cn.szw.crm.commons.domain.ReturnObject;

import cn.szw.crm.commons.utils.DateUtils;

import cn.szw.crm.commons.utils.HSSFUtIls;

import cn.szw.crm.commons.utils.UUIDUtils;

import cn.szw.crm.setting.domain.User;

import cn.szw.crm.setting.service.UserService;

import cn.szw.crm.workbench.domain.Activity;

import cn.szw.crm.workbench.domain.ActivityRemark;

import cn.szw.crm.workbench.service.ActivityRemarkService;

import cn.szw.crm.workbench.service.ActivityService;

import org.apache.poi.hssf.usermodel.HSSFCell;

import org.apache.poi.hssf.usermodel.HSSFRow;

import org.apache.poi.hssf.usermodel.HSSFSheet;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.ResponseBody;

import org.springframework.web.multipart.MultipartFile;



import javax.servlet.ServletOutputStream;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

import java.io.*;

import java.util.*;



/**

 * @author 宋祖威 20级

 * @date 2022/9/21 19:56

 * @slogn 致未来的你!

 */

@Controller

public class ActivityController {

    @Autowired

    private UserService userService;



    @Autowired

    private ActivityRemarkService activityRemarkService;



    @Autowired

    private ActivityService activityService;

    @RequestMapping("/workbench/activity/index")

    public String index(HttpServletRequest request){

        //调用service层方法来查询所有的用户

        List<User> userList = userService.queryAllUsers();

        //把数据保存到request中

        request.setAttribute("userList",userList);

        //转发到市场活动的主页面

        return "workbench/activity/index";

    }



    @RequestMapping("/workbench/activity/saveCreateActivity")

    @ResponseBody

    public Object saveCreateActivity(Activity activity, HttpSession session){

        User user = (User)session.getAttribute(Constants.SESSION_USER);

        //封装参数

        activity.setId(UUIDUtils.getUUID());

        activity.setCreateTime(DateUtils.formateDateTime(new Date()));

        activity.setCreateBy(user.getId());

        ReturnObject returnObject = new ReturnObject();

        try{

            //调用service层用法,保存创建的市场活动

            int i = activityService.saveCreateActivity(activity);

            if(i>0){

                returnObject.setCode(Constants.RETURN_OBJECT_CODE_SUCCESS);

            }else {

                returnObject.setCode(Constants.RETURN_OBJECT_CODE_FAIL);

                returnObject.setMessage("系统忙,请稍后重试....");

            }

        }catch (Exception e){

            e.printStackTrace();

            returnObject.setCode(Constants.RETURN_OBJECT_CODE_FAIL);

            returnObject.setMessage("系统忙,请稍后重试....");

        }



        return returnObject;

    }



    @RequestMapping("/workbench/activity/queryActivityByConditionForPage")

    @ResponseBody

    public Object queryActivityByConditionForPage(String name,String owner,String starDate,String endDate,

                                                  Integer pageNo,Integer pageSize){

        //封装参数

        Map<String,Object> map = new HashMap<>();

        map.put("name",name);

        map.put("owner",owner);

        map.put("startDate",starDate);

        map.put("endDate",endDate);

        map.put("pageSize",pageSize);

        map.put("beginNo",(pageNo-1)*pageSize);

        //调用service层方法 查询数据

        List<Activity> activityList = activityService.queryActivityByConditionForPage(map);

        int totalRows = activityService.queryCountOfActivityByCondition(map);

        //根据查询结果生成响应信息

        Map<String,Object> resMap = new HashMap<>();

        resMap.put("activityList",activityList);

        resMap.put("totalRows",totalRows);

        return resMap;

    }

    @RequestMapping("/workbench/activity/deleteActivityIds")

    @ResponseBody

    public Object deleteActivityIds(String[] id){

        ReturnObject returnObject = new ReturnObject();

        try{

            //调用service层方法,删除市场活动

            int i = activityService.deleteActivityByIds(id);

            if(i>0){

                returnObject.setCode(Constants.RETURN_OBJECT_CODE_SUCCESS);

            }else{

                returnObject.setCode(Constants.RETURN_OBJECT_CODE_FAIL);

                returnObject.setMessage("系统忙,请稍后重试。。。");

            }

        }catch (Exception e){

            e.printStackTrace();

            returnObject.setCode(Constants.RETURN_OBJECT_CODE_FAIL);

            returnObject.setMessage("系统忙,请稍后重试。。。");

        }

        return returnObject;

    }



    @ResponseBody

    @RequestMapping("/workbench/activity/queryActivityById")

    public Object queryActivityById(String id){

        //调用service层方法 查询市场活动

        Activity activity = activityService.queryActivityById(id);

        //根据查询结果返回相应信息

        return activity;

    }



    @RequestMapping("/workbench/activity/saveEditActivity")

    @ResponseBody

    public Object saveEditActivity(Activity activity,HttpSession httpSession){

        User user = (User) httpSession.getAttribute(Constants.SESSION_USER);

        //封装参数

        activity.setEditTime(DateUtils.formateDateTime(new Date()));

        activity.setEditBy(user.getId());

        ReturnObject returnObject = new ReturnObject();

        try{

        //调用service层方法 保存修改的市场活动

        int i = activityService.saveEditActivity(activity);

        if(i>0){

            returnObject.setCode(Constants.RETURN_OBJECT_CODE_SUCCESS);

        }else{

            returnObject.setCode(Constants.RETURN_OBJECT_CODE_FAIL);

            returnObject.setMessage("系统忙,请稍后");

        }



    }catch (Exception e){

            e.printStackTrace();

            returnObject.setCode(Constants.RETURN_OBJECT_CODE_FAIL);

            returnObject.setMessage("系统忙,请稍后");

        }

        return returnObject;

    }



    @RequestMapping("/workbench/activity/fileDownload")

    public void fileDownload(HttpServletResponse response) throws IOException {

        //1.设置响应类型

        response.setContentType("application/octet-stream;charset=UTF-8");

        //2.获取输出流

        ServletOutputStream writer = response.getOutputStream();

        //浏览器接收到相应信息后 默认情况下 直接在显示窗口中打开响应信息 即使打不开也会调用电脑上的应用程序打开

        //只有实在打不开才会激活文件下载 可以设置响应头信息 使浏览器接收到响应信息后直接激活文件下载窗口 即使能打开也不能打开

        response.addHeader("Content-Disposition","attachment;filename=mystudent.xls");





        //读取磁盘上的excel文件(InputStream) 把输出到浏览器(OutPutStream)

        FileInputStream fileInputStream = new FileInputStream("D:\\douban\\student.xls");

        byte[] buff = new byte[256];

        int len=0;

        while( (len=fileInputStream.read(buff))!=-1){

            writer.write(buff,0,len);

        }

        //关闭资源

        fileInputStream.close();

        writer.flush();

    }



    @RequestMapping("/workbench/activity/exportAllActivitys")

    public void exportAllActivitys(HttpServletResponse response) throws IOException {

        //调用service层方法 去查询所有的市场活动

        List<Activity> activities = activityService.queryAllActivitys();

        //创建excel表 把activityList写入到excel表中

        HSSFWorkbook wb = new HSSFWorkbook();

        HSSFSheet sheet = wb.createSheet("市场活动列表");

        HSSFRow row = sheet.createRow(0);

        HSSFCell cell = row.createCell(0);

        cell.setCellValue("ID");

        cell = row.createCell(1);

        cell.setCellValue("所有者");

        cell = row.createCell(2);

        cell.setCellValue("名称");

        cell = row.createCell(3);

        cell.setCellValue("开始日期");

        cell = row.createCell(4);

        cell.setCellValue("结束日期");

        cell = row.createCell(5);

        cell.setCellValue("成本");

        cell = row.createCell(6);

        cell.setCellValue("描述");

        cell = row.createCell(7);

        cell.setCellValue("创建时间");

        cell = row.createCell(8);

        cell.setCellValue("创建者");

        cell = row.createCell(9);

        cell.setCellValue("修改时间");

        cell = row.createCell(10);

        cell.setCellValue("修改者");

        //遍历activities创建HSSFRow对象 生成所有的数据

        Activity activity = null;

        if(activities!=null&activities.size()>0){

            for(int i = 0 ; i < activities.size();i++){

                activity = activities.get(i);

                //每遍历出一个activity 生成一行

                 row = sheet.createRow(i + 1);

                //每一行都创建11列 每列数据从activities中获取

                cell = row.createCell(0);

                cell.setCellValue(activity.getId());

                cell = row.createCell(1);

                cell.setCellValue(activity.getOwner());

                cell = row.createCell(2);

                cell.setCellValue(activity.getName());

                cell = row.createCell(3);

                cell.setCellValue(activity.getStartDate());

                cell = row.createCell(4);

                cell.setCellValue(activity.getEndDate());

                cell = row.createCell(5);

                cell.setCellValue(activity.getCost());

                cell = row.createCell(6);

                cell.setCellValue(activity.getDescription());

                cell = row.createCell(7);

                cell.setCellValue(activity.getCreateTime());

                cell = row.createCell(8);

                cell.setCellValue(activity.getCreateBy());

                cell = row.createCell(9);

                cell.setCellValue(activity.getEditTime());

                cell = row.createCell(10);

                cell.setCellValue(activity.getEditBy());

            }

        }

        //根据wb对象生成excele文件

//        FileOutputStream fileOutputStream = new FileOutputStream("D:\\douban\\activity.xls");

//        wb.write(fileOutputStream);



//        fileOutputStream.close();

//        wb.close();



        //把生成的excel文件下载到用户客户端

        response.setContentType("application/octet-stream;charset=UTF-8");

        response.addHeader("Content-Disposition","attachment;filename=activity.xls");

        ServletOutputStream outputStream = response.getOutputStream();

//        FileInputStream fileInputStream = new FileInputStream("D:\\douban\\activity.xls");

//        byte[] buff = new byte[256];

//        int len=0;

//        while((len=fileInputStream.read(buff))!=-1){

//            outputStream.write(buff,0,len);

//        }

//        fileInputStream.close();

        wb.write(outputStream);

        wb.close();

        outputStream.flush();

    }



    /**

     * 配置springmvc的文件上传解析器

     * @param username

     * @param myFile

     * @return

     */

    @RequestMapping("/workbench/activity/fileUpload")

    @ResponseBody

    public Object fileUpload(String username, MultipartFile myFile) throws IOException {

        //把文本数据打印到控制台

        System.out.println("username:"+username);

        //把文件在服务器指定目录上生成一个同样的文件

        String originalFilename = myFile.getOriginalFilename();

        File file = new File("D:\\douban\\"+originalFilename);//路径必须手动创建好,文件如果不存在会自动创建

        myFile.transferTo(file);



        //返回响应信息

        ReturnObject returnObject = new ReturnObject();

        returnObject.setCode(Constants.RETURN_OBJECT_CODE_SUCCESS);

        returnObject.setMessage("上传成功");

        return returnObject;

    }



    @RequestMapping("/workbench/activity/importAllActivitys")

    @ResponseBody

    public Object importAllActivitys(MultipartFile activityFile,HttpSession session){

        User user = (User) session.getAttribute(Constants.SESSION_USER);

        ReturnObject returnObject = new ReturnObject();

        try {

            //excel文件上传到磁盘目录上

            /*String originalFilename = activityFile.getOriginalFilename();

            File file = new File("D:\\douban\\"+originalFilename);//路径必须手动创建好,文件如果不存在会自动创建

            activityFile.transferTo(file);*/

            //解析excel文件 获取文件中的数据 并且封装成activityList

//          FileInputStream fileInputStream = new FileInputStream("D:\\douban\\" + originalFilename);

            InputStream inputStream = activityFile.getInputStream();

            HSSFWorkbook wb = new HSSFWorkbook(inputStream);

            HSSFSheet sheet = wb.getSheetAt(0);

            HSSFRow row = null;

            HSSFCell cell = null;

            Activity activity = null;

            List<Activity>activityList = new ArrayList<>();

            for(int i = 1; i <=sheet.getLastRowNum();i++){

                row = sheet.getRow(i);

                activity = new Activity();

                activity.setId(UUIDUtils.getUUID());

                activity.setOwner(user.getId());

                activity.setCreateTime(DateUtils.formateDateTime(new Date()));

                activity.setCreateBy(user.getId());

                for(int j = 0;j<row.getLastCellNum();j++ ){

                    cell = row.getCell(j);

                    String value = HSSFUtIls.getCellValueForStr(cell);

                    if(j==0){

                       activity.setName(value);

                    }else if(j==1){

                        activity.setStartDate(value);

                    }else if(j==2){

                        activity.setEndDate(value);

                    }else if(j==3){

                        activity.setCost(value);

                    }else if(j==4){

                        activity.setDescription(value);

                    }

                }

                //每一行所有的列都封装完成后 把activity

                activityList.add(activity);

            }

            //调用service层方法 保持市场活动

            int i = activityService.saveCreateActivityByList(activityList);

            returnObject.setCode(Constants.RETURN_OBJECT_CODE_SUCCESS);

            returnObject.setReturnDate(i);

        } catch (Exception e) {

            e.printStackTrace();

            returnObject.setCode(Constants.RETURN_OBJECT_CODE_FAIL);

            returnObject.setMessage("系统忙,请稍后重试...");

        }

       return returnObject;

    }



    @RequestMapping("/workbench/activity/detailActivity")

    public String detailActivity(String id,HttpServletRequest request){

        //调用service层方法查询数据

        Activity activity = activityService.queryActivityForDetailById(id);

        List<ActivityRemark> remarkList = activityRemarkService.queryActivityRemarkForDetailByActivityId(id);

        //把数据保持到作用域request

        request.setAttribute("activity",activity);

        request.setAttribute("remarkList",remarkList);

        //请求转发

        return "workbench/activity/detail";

    }

}
package cn.szw.crm.workbench.service;



import cn.szw.crm.workbench.domain.Activity;



import java.util.List;

import java.util.Map;



/**

 * @author 宋祖威 20级

 * @date 2022/9/21 21:00

 * @slogn 致未来的你!

 */

public interface ActivityService {

    int saveCreateActivity(Activity activity);

    List<Activity> queryActivityByConditionForPage(Map<String,Object> map);

    int queryCountOfActivityByCondition(Map<String,Object> map);

    int deleteActivityByIds(String[] ids);

    Activity  queryActivityById(String id);

    int saveEditActivity(Activity activity);

    List<Activity> queryAllActivitys();

    int saveCreateActivityByList(List<Activity> activityList);

    Activity queryActivityForDetailById(String id);

    List<Activity> queryActivityForDetailByClueId(String clueId);

    List<Activity> queryActivityForDetailByNameClueId(Map<String,Object> map);

    List<Activity> queryActivityForDetailByIds(String[] ids);

    List<Activity> queryActivityForConvertByNameClueId(Map<String,Object> map);

}
package cn.szw.crm.workbench.service.impl;



import cn.szw.crm.workbench.domain.Activity;

import cn.szw.crm.workbench.mapper.ActivityMapper;

import cn.szw.crm.workbench.service.ActivityService;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;



import java.util.List;

import java.util.Map;



/**

 * @author 宋祖威 20级

 * @date 2022/9/21 21:03

 * @slogn 致未来的你!

 */

@Service("activityService")

public class ActivityServiceImpl implements ActivityService {

    @Autowired

    private ActivityMapper activityMapper;

    @Override

    public int saveCreateActivity(Activity activity) {

        return activityMapper.insertActivity(activity);

    }



    @Override

    public List<Activity> queryActivityByConditionForPage(Map<String, Object> map) {

        return activityMapper.selectActivityByConditionForPage(map);

    }



    @Override

    public int queryCountOfActivityByCondition(Map<String, Object> map) {

        return activityMapper.selectCountOfActivityByCondition(map);

    }



    @Override

    public int deleteActivityByIds(String[] ids) {

        return activityMapper.deldetActivityByIds(ids);

    }



    @Override

    public Activity queryActivityById(String id) {

        return activityMapper.selectActivityById(id);

    }



    @Override

    public int saveEditActivity(Activity activity) {

        return activityMapper.updateActivity(activity);

    }



    @Override

    public List<Activity> queryAllActivitys() {

        return activityMapper.selectAllActivitys();

    }



    @Override

    public int saveCreateActivityByList(List<Activity> activityList) {

        return activityMapper.insertActivityByList(activityList);

    }



    @Override

    public Activity queryActivityForDetailById(String id) {

        return activityMapper.selectActivityForDetailById(id);

    }



    @Override

    public List<Activity> queryActivityForDetailByClueId(String clueId) {

        return activityMapper.selectActivityForDetailByClueId(clueId);

    }



    @Override

    public List<Activity> queryActivityForDetailByNameClueId(Map<String, Object> map) {

        return activityMapper.selectActivityForDetailByNameClueId(map);

    }



    @Override

    public List<Activity> queryActivityForDetailByIds(String[] ids) {

        return activityMapper.selectActivityForDetailByIds(ids);

    }



    @Override

    public List<Activity> queryActivityForConvertByNameClueId(Map<String, Object> map) {

        return activityMapper.selectActivityForConvertByNameClueId(map);

    }



}
package cn.szw.crm.workbench.mapper;



import cn.szw.crm.workbench.domain.Activity;



import java.util.List;

import java.util.Map;



public interface ActivityMapper {

    /**

     * This method was generated by MyBatis Generator.

     * This method corresponds to the database table tbl_activity

     *

     * @mbg.generated Wed Sep 21 20:54:17 CST 2022

     */

    int deleteByPrimaryKey(String id);







    /**

     * This method was generated by MyBatis Generator.

     * This method corresponds to the database table tbl_activity

     *

     * @mbg.generated Wed Sep 21 20:54:17 CST 2022

     */

    int insertSelective(Activity record);



    /**

     * This method was generated by MyBatis Generator.

     * This method corresponds to the database table tbl_activity

     *

     * @mbg.generated Wed Sep 21 20:54:17 CST 2022

     */

    Activity selectByPrimaryKey(String id);



    /**

     * This method was generated by MyBatis Generator.

     * This method corresponds to the database table tbl_activity

     *

     * @mbg.generated Wed Sep 21 20:54:17 CST 2022

     */

    int updateByPrimaryKeySelective(Activity record);



    /**

     * This method was generated by MyBatis Generator.

     * This method corresponds to the database table tbl_activity

     *

     * @mbg.generated Wed Sep 21 20:54:17 CST 2022

     */

    int updateByPrimaryKey(Activity record);



    /**

     保存创建的市场活动

     */

    int insertActivity(Activity activity);



    /**

     * 根据条件分页查询

     * @param map

     * @return

     */

    List<Activity> selectActivityByConditionForPage(Map<String,Object> map);



    /**

     * 根据条件查询市场活动的总条数

     * @param map

     * @return

     */

    int selectCountOfActivityByCondition(Map<String,Object> map);



    /**

     * 根据Ids批量删除市场活动

     * @param ids

     * @return

     */

    int deldetActivityByIds(String[] ids);



    /**

     * 根据id查询市场活动的信息

     * @param id

     * @return

     */

    Activity selectActivityById(String id);



    /**

     * 保存修改的市场活动

     * @param activity

     * @return

     */

    int updateActivity(Activity activity);



    /**

     * 查询所有的市场活动

     * @return

     */

    List<Activity> selectAllActivitys();



    /**

     * 批量保持创建的市场活动

     * @param activityList

     * @return

     */

    int insertActivityByList(List<Activity> activityList);



    /**

     * 根据id查询市场活动明细信息

     * @param id

     * @return

     */

    Activity selectActivityForDetailById(String id);



    /**

     * 根据clueId查询该线索相关联的市场活动的明细信息

     * @param clueId

     * @return

     */

    List<Activity> selectActivityForDetailByClueId(String clueId);



    /**

     * 根据name模糊查询市场活动并且把已经跟clueId关联过的市场活动排除

     * @param map

     * @return

     */

    List<Activity> selectActivityForDetailByNameClueId(Map<String,Object> map);



    /**

     * 根据ids查询市场活动的明细

     * @param ids

     * @return

     */

    List<Activity> selectActivityForDetailByIds(String[] ids);



    /**

     * 根据name 模糊查询市场活动 并且查询哪些跟clueId关联过的

     * @param map

     * @return

     */

    List<Activity> selectActivityForConvertByNameClueId(Map<String,Object> map);

}
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="cn.szw.crm.workbench.mapper.ActivityMapper">

  <resultMap id="BaseResultMap" type="cn.szw.crm.workbench.domain.Activity">

    <!--

      WARNING - @mbg.generated

      This element is automatically generated by MyBatis Generator, do not modify.

      This element was generated on Wed Sep 21 20:54:17 CST 2022.

    -->

    <id column="id" jdbcType="CHAR" property="id" />

    <result column="owner" jdbcType="CHAR" property="owner" />

    <result column="name" jdbcType="VARCHAR" property="name" />

    <result column="start_date" jdbcType="CHAR" property="startDate" />

    <result column="end_date" jdbcType="CHAR" property="endDate" />

    <result column="cost" jdbcType="VARCHAR" property="cost" />

    <result column="description" jdbcType="VARCHAR" property="description" />

    <result column="create_time" jdbcType="CHAR" property="createTime" />

    <result column="create_by" jdbcType="VARCHAR" property="createBy" />

    <result column="edit_time" jdbcType="CHAR" property="editTime" />

    <result column="edit_by" jdbcType="VARCHAR" property="editBy" />

  </resultMap>

  <sql id="Base_Column_List">

    <!--

      WARNING - @mbg.generated

      This element is automatically generated by MyBatis Generator, do not modify.

      This element was generated on Wed Sep 21 20:54:17 CST 2022.

    -->

    id, owner, name, start_date, end_date, cost, description, create_time, create_by, 

    edit_time, edit_by

  </sql>

  <select id="selectByPrimaryKey" parameterType="java.lang.String" resultMap="BaseResultMap">

    <!--

      WARNING - @mbg.generated

      This element is automatically generated by MyBatis Generator, do not modify.

      This element was generated on Wed Sep 21 20:54:17 CST 2022.

    -->

    select 

    <include refid="Base_Column_List" />

    from tbl_activity

    where id = #{id,jdbcType=CHAR}

  </select>



    <delete id="deleteByPrimaryKey" parameterType="java.lang.String">

    <!--

      WARNING - @mbg.generated

      This element is automatically generated by MyBatis Generator, do not modify.

      This element was generated on Wed Sep 21 20:54:17 CST 2022.

    -->

    delete from tbl_activity

    where id = #{id,jdbcType=CHAR}

  </delete>



    <insert id="insertActivity" parameterType="cn.szw.crm.workbench.domain.Activity">

    <!--

      WARNING - @mbg.generated

      This element is automatically generated by MyBatis Generator, do not modify.

      This element was generated on Wed Sep 21 20:54:17 CST 2022.

    -->

    insert into tbl_activity (id, owner, name, start_date, end_date, cost, description, create_time, create_by)

    values (#{id,jdbcType=CHAR}, #{owner,jdbcType=CHAR}, #{name,jdbcType=VARCHAR}, #{startDate,jdbcType=CHAR}, #{endDate,jdbcType=CHAR}, #{cost,jdbcType=VARCHAR},

    #{description,jdbcType=VARCHAR}, #{createTime,jdbcType=CHAR}, #{createBy,jdbcType=VARCHAR})

  </insert>

  <insert id="insertSelective" parameterType="cn.szw.crm.workbench.domain.Activity">

    <!--

      WARNING - @mbg.generated

      This element is automatically generated by MyBatis Generator, do not modify.

      This element was generated on Wed Sep 21 20:54:17 CST 2022.

    -->

    insert into tbl_activity

    <trim prefix="(" suffix=")" suffixOverrides=",">

      <if test="id != null">

        id,

      </if>

      <if test="owner != null">

        owner,

      </if>

      <if test="name != null">

        name,

      </if>

      <if test="startDate != null">

        start_date,

      </if>

      <if test="endDate != null">

        end_date,

      </if>

      <if test="cost != null">

        cost,

      </if>

      <if test="description != null">

        description,

      </if>

      <if test="createTime != null">

        create_time,

      </if>

      <if test="createBy != null">

        create_by,

      </if>

      <if test="editTime != null">

        edit_time,

      </if>

      <if test="editBy != null">

        edit_by,

      </if>

    </trim>

    <trim prefix="values (" suffix=")" suffixOverrides=",">

      <if test="id != null">

        #{id,jdbcType=CHAR},

      </if>

      <if test="owner != null">

        #{owner,jdbcType=CHAR},

      </if>

      <if test="name != null">

        #{name,jdbcType=VARCHAR},

      </if>

      <if test="startDate != null">

        #{startDate,jdbcType=CHAR},

      </if>

      <if test="endDate != null">

        #{endDate,jdbcType=CHAR},

      </if>

      <if test="cost != null">

        #{cost,jdbcType=VARCHAR},

      </if>

      <if test="description != null">

        #{description,jdbcType=VARCHAR},

      </if>

      <if test="createTime != null">

        #{createTime,jdbcType=CHAR},

      </if>

      <if test="createBy != null">

        #{createBy,jdbcType=VARCHAR},

      </if>

      <if test="editTime != null">

        #{editTime,jdbcType=CHAR},

      </if>

      <if test="editBy != null">

        #{editBy,jdbcType=VARCHAR},

      </if>

    </trim>

  </insert>



    <update id="updateByPrimaryKeySelective" parameterType="cn.szw.crm.workbench.domain.Activity">

    <!--

      WARNING - @mbg.generated

      This element is automatically generated by MyBatis Generator, do not modify.

      This element was generated on Wed Sep 21 20:54:17 CST 2022.

    -->

    update tbl_activity

    <set>

      <if test="owner != null">

        owner = #{owner,jdbcType=CHAR},

      </if>

      <if test="name != null">

        name = #{name,jdbcType=VARCHAR},

      </if>

      <if test="startDate != null">

        start_date = #{startDate,jdbcType=CHAR},

      </if>

      <if test="endDate != null">

        end_date = #{endDate,jdbcType=CHAR},

      </if>

      <if test="cost != null">

        cost = #{cost,jdbcType=VARCHAR},

      </if>

      <if test="description != null">

        description = #{description,jdbcType=VARCHAR},

      </if>

      <if test="createTime != null">

        create_time = #{createTime,jdbcType=CHAR},

      </if>

      <if test="createBy != null">

        create_by = #{createBy,jdbcType=VARCHAR},

      </if>

      <if test="editTime != null">

        edit_time = #{editTime,jdbcType=CHAR},

      </if>

      <if test="editBy != null">

        edit_by = #{editBy,jdbcType=VARCHAR},

      </if>

    </set>

    where id = #{id,jdbcType=CHAR}

  </update>

  <update id="updateByPrimaryKey" parameterType="cn.szw.crm.workbench.domain.Activity">

    <!--

      WARNING - @mbg.generated

      This element is automatically generated by MyBatis Generator, do not modify.

      This element was generated on Wed Sep 21 20:54:17 CST 2022.

    -->

    update tbl_activity

    set owner = #{owner,jdbcType=CHAR},

      name = #{name,jdbcType=VARCHAR},

      start_date = #{startDate,jdbcType=CHAR},

      end_date = #{endDate,jdbcType=CHAR},

      cost = #{cost,jdbcType=VARCHAR},

      description = #{description,jdbcType=VARCHAR},

      create_time = #{createTime,jdbcType=CHAR},

      create_by = #{createBy,jdbcType=VARCHAR},

      edit_time = #{editTime,jdbcType=CHAR},

      edit_by = #{editBy,jdbcType=VARCHAR}

    where id = #{id,jdbcType=CHAR}

  </update>



  <select id="selectActivityByConditionForPage" resultMap="BaseResultMap">

      select a.id,u1.name as owner,a.name,a.start_date,a.end_date,a.cost,a.description,a.create_time,

      u2.name as create_by,a.edit_time,u3.name as edit_by

      from tbl_activity a

      join tbl_user u1 on a.owner=u1.id

      join tbl_user u2 on a.create_by=u2.id

      left join tbl_user u3 on a.edit_by=u3.id

      <where>

        <if test="name!=null and name!=''">

          and a.name like '%' #{name} '%'

        </if>

        <if test="owner!=null and owner!=''">

          and u1.name like '%' #{owner} '%'

        </if>

        <if test="startDate!=null and startDate!=''">

          and a.start_date&gt;=#{starDate}

        </if>

        <if test="endDate!=null and endDate!=''">

          and a.end_date&lt;=#{endDate}

        </if>

      </where>

      order by a.create_time desc

      limit #{beginNo},#{pageSize}

  </select>

  <select id="selectCountOfActivityByCondition" resultType="java.lang.Integer">

    select count(*)

    from tbl_activity a

    join tbl_user u1 on a.owner=u1.id

    join tbl_user u2 on a.create_by=u2.id

    left join tbl_user u3 on a.edit_by=u3.id

    <where>

      <if test="name!=null and name!=''">

        and a.name like '%' #{name} '%'

      </if>

      <if test="owner!=null and owner!=''">

        and u1.name like '%' #{owner} '%'

      </if>

      <if test="startDate!=null and startDate!=''">

        and a.start_date&gt;=#{starDate}

      </if>

      <if test="endDate!=null and endDate!=''">

        and a.end_date&lt;=#{endDate}

      </if>

    </where>

  </select>

    <delete id="deldetActivityByIds" parameterType="string">

    delete from tbl_activity

    where id in

    <foreach collection="array" item="id" separator="," open="(" close=")">

      #{id}

    </foreach>

  </delete>

  <select id="selectActivityById" resultMap="BaseResultMap">

   select

   <include refid="Base_Column_List"></include>

   from tbl_activity

   where id=#{id}

  </select>

  <update id="updateActivity">

    update tbl_activity

    set owner=#{owner},name=#{name},start_date=#{startDate},

    end_date=#{endDate},cost=#{cost},description=#{description},

    edit_time=#{editTime},edit_by=#{editBy}

    where id=#{id}

  </update>

  <select id="selectAllActivitys" resultMap="BaseResultMap">

      select a.id,u1.name as owner,a.name,a.start_date,a.end_date,a.cost,a.description,a.create_time,

      u2.name as create_by,a.edit_time,u3.name as edit_by

      from tbl_activity a

      join tbl_user u1 on a.owner=u1.id

      join tbl_user u2 on a.create_by=u2.id

      left join tbl_user u3 on a.edit_by=u3.id

      order by a.create_time desc

  </select>

  <insert id="insertActivityByList">

    insert into tbl_activity ( id, owner, name, start_date, end_date, cost, description, create_time, create_by)

    values

    <foreach collection="list" item="obj" separator=",">

      (#{obj.id},#{obj.owner},#{obj.name},#{obj.startDate},#{obj.endDate},#{obj.cost},#{obj.description},#{obj.createTime},#{obj.createBy})

    </foreach>

  </insert>

  <select id="selectActivityForDetailById" resultMap="BaseResultMap">

    select a1.id,u1.name as owner,a1.name,a1.start_date,a1.end_date,a1.cost,a1.description,a1.create_time

    ,u2.name as create_by,a1.edit_time,u3.name as edit_by

    from tbl_activity a1

    join tbl_user u1 on a1.owner=u1.id

    join tbl_user u2 on a1.create_by=u2.id

    left  join  tbl_user u3 on a1.edit_by=u3.id

    where a1.id =#{id}

  </select>

    <select id="selectActivityForDetailByClueId" resultMap="BaseResultMap">

      select a.id,a.name,a.start_date,a.end_date,u.name as owner

      from tbl_activity a

      join tbl_user u on a.owner=u.id

      join tbl_clue_activity_relation car on a.id=car.activity_id

      where car.clue_id=#{clueId}



    </select>

    <select id="selectActivityForDetailByNameClueId" resultMap="BaseResultMap">

      select a.id,a.name,a.start_date,a.end_date,u.name as owner

      from tbl_activity a

      join tbl_user u on a.owner=u.id

      where a.name like '%' #{activityName} '%'

      and a.id not in (

       select activity_id

       from tbl_clue_activity_relation

       where clue_id=#{clueId}

      )

    </select>

    <select id="selectActivityForDetailByIds" resultMap="BaseResultMap">

      select a.id,a.name,a.start_date,a.end_date,u.name as owner

      from tbl_activity a

      join tbl_user u on a.owner=u.id

      where a.id in

      <foreach collection="array" item="id" separator="," open="(" close=")">

        #{id}

      </foreach>

    </select>

    <select id="selectActivityForConvertByNameClueId" resultMap="BaseResultMap">

      select a.id,a.name,a.start_date,a.end_date,u.name as owner

      from tbl_activity a

      join tbl_user u on a.owner=u.id

      where a.name like '%' #{activityName} '%' and a.id in(

      select activity_id

      from tbl_clue_activity_relation

      where clue_id=#{clueId}

      )

    </select>

</mapper>
<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

       xmlns:context="http://www.springframework.org/schema/context"

       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">



    <context:component-scan base-package="cn.szw.crm.setting.service"/>

    <context:component-scan base-package="cn.szw.crm.workbench.service"/>



    <import resource="applicationContext-datasource.xml"></import>

</beans>
<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

       xmlns:aop="http://www.springframework.org/schema/aop"

       xmlns:context="http://www.springframework.org/schema/context"

       xmlns:tx="http://www.springframework.org/schema/tx"

       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd

      http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd

      http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd

      http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">

    <!-- 配置数据源 -->

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">

        <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>

        <property name="username" value="root"/>

        <property name="password" value="szw123"/>

        <property name="url" value="jdbc:mysql://localhost:3306/crm?serverTimezone=UTC"/>

    </bean>

    <!-- 配置SqlSessionFactory -->

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">

        <!-- 必须注入属性dataSource -->

        <property name="dataSource" ref="dataSource"/>

        <!-- 如果mybatis没有特殊的配置(比如别名等)configLocation可以省去 ;否则,不能省略-->

        <property name="configLocation" value="classpath:mybatis-config.xml"/>

    </bean>

    <!-- mapper注解扫描器配置,扫描@MapperScan注解,自动生成代码对象 -->

    <bean id="mapperScanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer">

        <property name="basePackage" value="cn.szw.crm.setting.mapper,cn.szw.crm.workbench.mapper"/>



        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>

    </bean>



    <!-- 配置事务管理器 -->

    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

        <property name="dataSource" ref="dataSource"/>

    </bean>

    <!-- 配置事务 -->

    <aop:config>

        <aop:pointcut expression="execution(* cn.szw.crm..service.*.*(..))" id="allMethodPointcut"/>

        <aop:advisor advice-ref="txAdvice" pointcut-ref="allMethodPointcut"/>

    </aop:config>

    <tx:advice id="txAdvice" transaction-manager="transactionManager">

        <tx:attributes>

            <tx:method name="add*" propagation="REQUIRED" rollback-for="Exception"/>

            <tx:method name="save*" propagation="REQUIRED" rollback-for="Exception"/>

            <tx:method name="edit*" propagation="REQUIRED" rollback-for="Exception"/>

            <tx:method name="update*" propagation="REQUIRED" rollback-for="Exception"/>

            <tx:method name="delete*" propagation="REQUIRED" rollback-for="Exception"/>

            <tx:method name="do*" propagation="REQUIRED" rollback-for="Exception"/>

            <tx:method name="*" propagation="REQUIRED" read-only="true"/>

        </tx:attributes>

    </tx:advice>

</beans>
<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

       xmlns:context="http://www.springframework.org/schema/context"

       xmlns:mvc="http://www.springframework.org/schema/mvc"



       xsi:schemaLocation="http://www.springframework.org/schema/beans

       http://www.springframework.org/schema/beans/spring-beans.xsd

       http://www.springframework.org/schema/context

       https://www.springframework.org/schema/context/spring-context.xsd

       http://www.springframework.org/schema/mvc

       https://www.springframework.org/schema/mvc/spring-mvc.xsd">



    <!--springmvc的配置文件,包含网站跳转的逻辑的控制 配置-->

   <context:component-scan base-package="cn.szw.crm.controller"></context:component-scan>

    <context:component-scan base-package="cn.szw.crm.setting.controller"></context:component-scan>

    <context:component-scan base-package="cn.szw.crm.workbench.web.Controller"></context:component-scan>



    <!--配置视图解析器 方便页面返回-->

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">

        <property name="prefix" value="/WEB-INF/pages/"></property>

        <property name="suffix" value=".jsp"></property>

    </bean>

    <!--俩个标准配置-->

    <!--springmvc不能处理的请求交给tomcat-->

    <mvc:default-servlet-handler></mvc:default-servlet-handler>

    <!--mvc注解驱动 支持springmvc更高级的一些功能 JSR303校验,快捷的ajax请求 映射动态请求-->

    <mvc:annotation-driven></mvc:annotation-driven>



    <mvc:interceptors>

        <mvc:interceptor>

            <!--配置拦截的请求-->

            <mvc:mapping path="/settings/**"/>

            <mvc:mapping path="/workbench/**"/>

            <!--配置排除拦截的请求(排除的优先级高)-->

            <mvc:exclude-mapping path="/settings/qx/user/tologin"/>

            <mvc:exclude-mapping path="/settings/qx/user/login"/>

            <!--拦截器类-->

            <bean class="cn.szw.crm.setting.interceptor.LoginInterceptor"></bean>

        </mvc:interceptor>

    </mvc:interceptors>



    <!--配置文件上传解析器 id:必须是multipartResolver-->

    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

        <property name="maxUploadSize" value="#{1024*1024*5}"></property>

        <property name="defaultEncoding" value="utf-8"></property>

    </bean>

</beans>
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE generatorConfiguration

        PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"

        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">



<generatorConfiguration>



    <!--指定mysql数据库驱动-->

    <!--<classPathEntry location="E://repository-p2p//mysql//mysql-connector-java//5.1.43//mysql-connector-java-5.1.43.jar"/>-->



    <!--导入属性配置-->

    <properties resource="generator.properties"></properties>



    <!--指定特定数据库的jdbc驱动jar包的位置-->

    <classPathEntry location="${jdbc.driverLocation}"/>



    <context id="default" targetRuntime="MyBatis3">



        <!-- optional,旨在创建class时,对注释进行控制,false生成注释,true无注释 -->

        <commentGenerator>

            <property name="suppressDate" value="false"/>

            <property name="suppressAllComments" value="false"/>

        </commentGenerator>



        <!--jdbc的数据库连接 -->

        <jdbcConnection

                driverClass="${jdbc.driverClass}"

                connectionURL="${jdbc.connectionURL}"

                userId="${jdbc.userId}"

                password="${jdbc.password}">

        </jdbcConnection>





        <!-- 非必需,类型处理器,在数据库类型和java类型之间的转换控制-->

        <javaTypeResolver>

            <property name="forceBigDecimals" value="false"/>

        </javaTypeResolver>





        <!-- Model模型生成器,用来生成含有主键key的类,记录类 以及查询Example

            targetPackage     指定生成的model生成所在的包名

            targetProject     指定在该项目下所在的路径|指定生成到的工程名称

        -->

        <javaModelGenerator targetPackage="cn.szw.crm.workbench.domain"

                            targetProject="E:/myjava/crm/src/main/java">



            <!-- 是否允许子包,即targetPackage.schemaName.tableName -->

            <property name="enableSubPackages" value="false"/>

            <!-- 是否对model添加 构造函数 true添加,false不添加-->

            <property name="constructorBased" value="false"/>

            <!-- 是否对类CHAR类型的列的数据进行trim操作 -->

            <property name="trimStrings" value="true"/>

            <!-- 建立的Model对象是否 不可改变  即生成的Model对象不会有 setter方法,只有构造方法 -->

            <property name="immutable" value="false"/>

        </javaModelGenerator>



        <!--Mapper映射文件生成所在的目录 为每一个数据库的表生成对应的SqlMap文件 -->

        <sqlMapGenerator targetPackage="cn.szw.crm.workbench.mapper"

                         targetProject="E:/myjava/crm/src/main/java">

            <property name="enableSubPackages" value="false"/>

        </sqlMapGenerator>



        <!-- 客户端代码,生成易于使用的针对Model对象和XML配置文件 的代码

                type="ANNOTATEDMAPPER",生成Java Model 和基于注解的Mapper对象

                type="MIXEDMAPPER",生成基于注解的Java Model 和相应的Mapper对象

                type="XMLMAPPER",生成SQLMap XML文件和独立的Mapper接口

        -->

        <javaClientGenerator targetPackage="cn.szw.crm.workbench.mapper"

                             targetProject="E:/myjava/crm/src/main/java" type="XMLMAPPER">

            <property name="enableSubPackages" value="true"/>

        </javaClientGenerator>



        <table tableName="tbl_tran_history" domainObjectName="TranHistory"

               enableCountByExample="false" enableUpdateByExample="false"

               enableDeleteByExample="false" enableSelectByExample="false"

               selectByExampleQueryId="false">

        </table>

 <!--       <table tableName="tbl_tran_remark" domainObjectName="TranRemark"

               enableCountByExample="false" enableUpdateByExample="false"

               enableDeleteByExample="false" enableSelectByExample="false"

               selectByExampleQueryId="false">

        </table>-->

    <!--    <table tableName="tbl_tran" domainObjectName="Tran"

               enableCountByExample="false" enableUpdateByExample="false"

               enableDeleteByExample="false" enableSelectByExample="false"

               selectByExampleQueryId="false">

        </table>-->





              <!--  <table tableName="tbl_contacts_activity_relation" domainObjectName="ContactsActivityRelation"

                       enableCountByExample="false" enableUpdateByExample="false"

                       enableDeleteByExample="false" enableSelectByExample="false"

                       selectByExampleQueryId="false">

                </table>-->



    <!--    <table tableName="tbl_contacts_remark" domainObjectName="ContactsRemark"

               enableCountByExample="false" enableUpdateByExample="false"

               enableDeleteByExample="false" enableSelectByExample="false"

               selectByExampleQueryId="false">

        </table>-->

    <!--    <table tableName="tbl_customer_remark" domainObjectName="CustomerRemark"

               enableCountByExample="false" enableUpdateByExample="false"

               enableDeleteByExample="false" enableSelectByExample="false"

               selectByExampleQueryId="false">

        </table>-->



 <!--       <table tableName="tbl_clue_remark" domainObjectName="ClueRemark"

               enableCountByExample="false" enableUpdateByExample="false"

               enableDeleteByExample="false" enableSelectByExample="false"

               selectByExampleQueryId="false">

        </table>-->

       <!-- <table tableName="tbl_contacts" domainObjectName="Contacts"

               enableCountByExample="false" enableUpdateByExample="false"

               enableDeleteByExample="false" enableSelectByExample="false"

               selectByExampleQueryId="false">

        </table>-->

<!--        <table tableName="tbl_customer" domainObjectName="Customer"

               enableCountByExample="false" enableUpdateByExample="false"

               enableDeleteByExample="false" enableSelectByExample="false"

               selectByExampleQueryId="false">

        </table>-->



<!--        <table tableName="tbl_clue_activity_relation" domainObjectName="ClueActivityRelation"

               enableCountByExample="false" enableUpdateByExample="false"

               enableDeleteByExample="false" enableSelectByExample="false"

               selectByExampleQueryId="false">

        </table>-->

<!--        <table tableName="tbl_clue_remark" domainObjectName="ClueRemark"-->

<!--               enableCountByExample="false" enableUpdateByExample="false"-->

<!--               enableDeleteByExample="false" enableSelectByExample="false"-->

<!--               selectByExampleQueryId="false">-->

<!--        </table>-->



<!--        <table tableName="tbl_clue" domainObjectName="Clue"-->

<!--               enableCountByExample="false" enableUpdateByExample="false"-->

<!--               enableDeleteByExample="false" enableSelectByExample="false"-->

<!--               selectByExampleQueryId="false">-->

<!--        </table>-->



<!--        <table tableName="tbl_dic_value" domainObjectName="DicValue"-->

<!--               enableCountByExample="false" enableUpdateByExample="false"-->

<!--               enableDeleteByExample="false" enableSelectByExample="false"-->

<!--               selectByExampleQueryId="false">-->

<!--        </table>-->





<!--        <table tableName="tbl_activity_remark" domainObjectName="ActivityRemark"-->

<!--               enableCountByExample="false" enableUpdateByExample="false"-->

<!--               enableDeleteByExample="false" enableSelectByExample="false"-->

<!--               selectByExampleQueryId="false">-->

<!--        </table>-->







        <!--

          <table tableName="tbl_activity" domainObjectName="Activity"

               enableCountByExample="false" enableUpdateByExample="false"

               enableDeleteByExample="false" enableSelectByExample="false"

               selectByExampleQueryId="false">

         </table>



        <table tableName="tbl_user" domainObjectName="User"

               enableCountByExample="false" enableUpdateByExample="false"

               enableDeleteByExample="false" enableSelectByExample="false"

               selectByExampleQueryId="false">

        </table>



        <table tableName="tbl_clue" domainObjectName="Clue"

               enableCountByExample="false" enableUpdateByExample="false"

               enableDeleteByExample="false" enableSelectByExample="false"

               selectByExampleQueryId="false">

        </table>



        <table tableName="tbl_clue_activity_relation" domainObjectName="ClueActivityRelation"

               enableCountByExample="false" enableUpdateByExample="false"

               enableDeleteByExample="false" enableSelectByExample="false"

               selectByExampleQueryId="false">

        </table>



        <table tableName="tbl_clue_remark" domainObjectName="ClueRemark"

               enableCountByExample="false" enableUpdateByExample="false"

               enableDeleteByExample="false" enableSelectByExample="false"

               selectByExampleQueryId="false">

        </table>

        -->

        <!--

        <table tableName="tbl_contacts" domainObjectName="Contacts"

               enableCountByExample="false" enableUpdateByExample="false"

               enableDeleteByExample="false" enableSelectByExample="false"

               selectByExampleQueryId="false">

        </table>

        <table tableName="tbl_contacts_activity_relation" domainObjectName="ContactsActivityRelation"

               enableCountByExample="false" enableUpdateByExample="false"

               enableDeleteByExample="false" enableSelectByExample="false"

               selectByExampleQueryId="false">

        </table>

        <table tableName="tbl_contacts_remark" domainObjectName="ContactsRemark"

               enableCountByExample="false" enableUpdateByExample="false"

               enableDeleteByExample="false" enableSelectByExample="false"

               selectByExampleQueryId="false">

        </table>

        -->

        <!--

        <table tableName="tbl_customer" domainObjectName="Customer"

               enableCountByExample="false" enableUpdateByExample="false"

               enableDeleteByExample="false" enableSelectByExample="false"

               selectByExampleQueryId="false">

        </table>



        <table tableName="tbl_customer_remark" domainObjectName="CustomerRemark"

               enableCountByExample="false" enableUpdateByExample="false"

               enableDeleteByExample="false" enableSelectByExample="false"

               selectByExampleQueryId="false">

        </table>

        -->

        <!--

                <table tableName="tbl_dictionary_type" domainObjectName="DictionaryType"

                       enableCountByExample="false" enableUpdateByExample="false"

                       enableDeleteByExample="false" enableSelectByExample="false"

                       selectByExampleQueryId="false">

                </table>





                <table tableName="tbl_dictionary_value" domainObjectName="DictionaryValue"

                       enableCountByExample="false" enableUpdateByExample="false"

                       enableDeleteByExample="false" enableSelectByExample="false"

                       selectByExampleQueryId="false">

                </table>













                 -->











    </context>

</generatorConfiguration>

4.3源代码包

CRM.rar

crm-mgb.rar

第五章 总结

通过这段时间对客户管理系统的建立学习,我们都学到了很多东西。不仅复习到了很多Java的基本知识,更在此基础上学习了ssm框架如何利用框架知识搭建更大的逻辑结构。不仅掌握了数据库基本的增删查改,外键的添加使用,还掌握了有数据库批量插入等操作还有数据库之间的几种关系(一对一,一对多,多对多),学习到了jsp页面相关的前端技术ajax,juqey技术等。并且,在这十天中,我们还体验到了团队协作的强大,我们将整个系统分为若干个模块,将这几个模块分别交给不同的成员完成,最终进行整合和完善,整个过程中虽然有遇到麻烦,但是在团队成员的不懈努力和网上查阅资料,我们将难题一一攻克,我们认为这样的企业级项目非常有意义。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值