基于SpringBoot的“企业客户信息反馈平台”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“企业客户信息反馈平台”的设计与实现(源码+数据库+文档+PPT)

  • 开发语言:Java

  • 数据库:MySQL

  • 技术:SpringBoot

  • 工具:IDEA/Ecilpse、Navicat、Maven


系统展示


平台首页界面图


技术文档界面图


问题信息界面图


个人中心界面图


后台登录界面图


管理员功能界面图


客户管理界面图


问题信息管理界面图


技术文档管理界面图

摘要

本平台设计的现状和趋势,从需求、结构、数据库等方面的设计到平台的实现,分别为管理员、客户的实现。论文的内容从平台的设计、描述、实现、分析、测试方面来表明开发的过程。本平台根据现实情况来选择一种可行的开发方案,借助java编程语言和MySQL数据库等实现平台的全部功能,接下来对平台进行测试,测试平台是否有漏洞和测试用户权限来完善平台,最终平台完成达到相关标准。

研究背景

21世纪,我国早在上世纪就已普及互联网信息,互联网对人们生活中带来了无限的便利。像大部分的企事业单位都有自己的平台,由从今传统的管理模式向互联网发展,如今开发自己的平台是理所当然的。那么开发企业客户信息反馈平台意义和用处有哪些呢?

1.首先提升形象:这是每个企事业单位建设平台的目的之一。当今的网络信息年代,连一个操作平台都不从有过,将会跟不上时代的步伐。

2.加强企业客户信息反馈服务:企业客户信息反馈管理行业性质要求您定期提供资料给管理员,或者随时接受用户的建议。如果客户需要,可以通过平台进行管理。

3.同时一个好的平台能将企业客户信息反馈的信息管理手段提上一个新的台阶。平台内容可以随时更新,这点对于现代企业客户信息反馈管理来说是很重要,但传统的管理方式都无法做到的。企业客户信息反馈平台就可以每天更新,随时向您反映企业客户信息反馈的最新情况。

研究现状

在国外很多发达国家,软件产业早已得到全面普及,但我国经济已不断发展,不断引进国外信息化建设,使国内软件行业得以不断发展,在摸索中进步,最终也得到一些成果,我国的软件业迎来了高速的发展,使更多的软件平台得以开发出来,从此逐渐地改变人们的生活工作方式。但是,对于信息化的建设,与很多发达国家相比,由于信息化程度的落后以及经费的不足,我国的企业客户信息反馈平台开发方面还是相对落后的,因此,要不断的努力探索,争取开发出一个实用的信息化的企业客户信息反馈平台,来实现企业客户信息反馈管理的信息化。因此本课题以企业客户信息反馈为例,目的是开发一个实用的企业客户信息反馈平台。

部分源码

/**
 * 问题报表
 * 后端接口
 * @author 
 * @email 
 * @date 2022-05-27 16:31:40
 */
@RestController
@RequestMapping("/wentibaobiao")
public class WentibaobiaoController {
    @Autowired
    private WentibaobiaoService wentibaobiaoService;


    


    /**
     * 后端列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,WentibaobiaoEntity wentibaobiao,
                @RequestParam(required = false) Double jiejueshuliangstart,
                @RequestParam(required = false) Double jiejueshuliangend,
		HttpServletRequest request){
        EntityWrapper<WentibaobiaoEntity> ew = new EntityWrapper<WentibaobiaoEntity>();
                if(jiejueshuliangstart!=null) ew.ge("jiejueshuliang", jiejueshuliangstart);
                if(jiejueshuliangend!=null) ew.le("jiejueshuliang", jiejueshuliangend);
		PageUtils page = wentibaobiaoService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, wentibaobiao), params), params));

        return R.ok().put("data", page);
    }
    
    /**
     * 前端列表
     */
	@IgnoreAuth
    @RequestMapping("/list")
    public R list(@RequestParam Map<String, Object> params,WentibaobiaoEntity wentibaobiao, 
                @RequestParam(required = false) Double jiejueshuliangstart,
                @RequestParam(required = false) Double jiejueshuliangend,
		HttpServletRequest request){
        EntityWrapper<WentibaobiaoEntity> ew = new EntityWrapper<WentibaobiaoEntity>();
                if(jiejueshuliangstart!=null) ew.ge("jiejueshuliang", jiejueshuliangstart);
                if(jiejueshuliangend!=null) ew.le("jiejueshuliang", jiejueshuliangend);
		PageUtils page = wentibaobiaoService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, wentibaobiao), params), params));
        return R.ok().put("data", page);
    }

	/**
     * 列表
     */
    @RequestMapping("/lists")
    public R list( WentibaobiaoEntity wentibaobiao){
       	EntityWrapper<WentibaobiaoEntity> ew = new EntityWrapper<WentibaobiaoEntity>();
      	ew.allEq(MPUtil.allEQMapPre( wentibaobiao, "wentibaobiao")); 
        return R.ok().put("data", wentibaobiaoService.selectListView(ew));
    }

	 /**
     * 查询
     */
    @RequestMapping("/query")
    public R query(WentibaobiaoEntity wentibaobiao){
        EntityWrapper< WentibaobiaoEntity> ew = new EntityWrapper< WentibaobiaoEntity>();
 		ew.allEq(MPUtil.allEQMapPre( wentibaobiao, "wentibaobiao")); 
		WentibaobiaoView wentibaobiaoView =  wentibaobiaoService.selectView(ew);
		return R.ok("查询问题报表成功").put("data", wentibaobiaoView);
    }
	
    /**
     * 后端详情
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id){
        WentibaobiaoEntity wentibaobiao = wentibaobiaoService.selectById(id);
        return R.ok().put("data", wentibaobiao);
    }

    /**
     * 前端详情
     */
	@IgnoreAuth
    @RequestMapping("/detail/{id}")
    public R detail(@PathVariable("id") Long id){
        WentibaobiaoEntity wentibaobiao = wentibaobiaoService.selectById(id);
        return R.ok().put("data", wentibaobiao);
    }
    



    /**
     * 后端保存
     */
    @RequestMapping("/save")
    public R save(@RequestBody WentibaobiaoEntity wentibaobiao, HttpServletRequest request){
    	wentibaobiao.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(wentibaobiao);
        wentibaobiaoService.insert(wentibaobiao);
        return R.ok();
    }
    
    /**
     * 前端保存
     */
    @RequestMapping("/add")
    public R add(@RequestBody WentibaobiaoEntity wentibaobiao, HttpServletRequest request){
    	wentibaobiao.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(wentibaobiao);
        wentibaobiaoService.insert(wentibaobiao);
        return R.ok();
    }

    /**
     * 修改
     */
    @RequestMapping("/update")
    @Transactional
    public R update(@RequestBody WentibaobiaoEntity wentibaobiao, HttpServletRequest request){
        //ValidatorUtils.validateEntity(wentibaobiao);
        wentibaobiaoService.updateById(wentibaobiao);//全部更新
        return R.ok();
    }
    

    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids){
        wentibaobiaoService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }
    
    /**
     * 提醒接口
     */
	@RequestMapping("/remind/{columnName}/{type}")
	public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request, 
						 @PathVariable("type") String type,@RequestParam Map<String, Object> map) {
		map.put("column", columnName);
		map.put("type", type);
		
		if(type.equals("2")) {
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
			Calendar c = Calendar.getInstance();
			Date remindStartDate = null;
			Date remindEndDate = null;
			if(map.get("remindstart")!=null) {
				Integer remindStart = Integer.parseInt(map.get("remindstart").toString());
				c.setTime(new Date()); 
				c.add(Calendar.DAY_OF_MONTH,remindStart);
				remindStartDate = c.getTime();
				map.put("remindstart", sdf.format(remindStartDate));
			}
			if(map.get("remindend")!=null) {
				Integer remindEnd = Integer.parseInt(map.get("remindend").toString());
				c.setTime(new Date());
				c.add(Calendar.DAY_OF_MONTH,remindEnd);
				remindEndDate = c.getTime();
				map.put("remindend", sdf.format(remindEndDate));
			}
		}
		
		Wrapper<WentibaobiaoEntity> wrapper = new EntityWrapper<WentibaobiaoEntity>();
		if(map.get("remindstart")!=null) {
			wrapper.ge(columnName, map.get("remindstart"));
		}
		if(map.get("remindend")!=null) {
			wrapper.le(columnName, map.get("remindend"));
		}


		int count = wentibaobiaoService.selectCount(wrapper);
		return R.ok().put("count", count);
	}
	






    /**
     * (按值统计)
     */
    @RequestMapping("/value/{xColumnName}/{yColumnName}")
    public R value(@PathVariable("yColumnName") String yColumnName, @PathVariable("xColumnName") String xColumnName,HttpServletRequest request) {
        Map<String, Object> params = new HashMap<String, Object>();
        params.put("xColumn", xColumnName);
        params.put("yColumn", yColumnName);
        EntityWrapper<WentibaobiaoEntity> ew = new EntityWrapper<WentibaobiaoEntity>();
        List<Map<String, Object>> result = wentibaobiaoService.selectValue(params, ew);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        for(Map<String, Object> m : result) {
            for(String k : m.keySet()) {
                if(m.get(k) instanceof Date) {
                    m.put(k, sdf.format((Date)m.get(k)));
                }
            }
        }
        return R.ok().put("data", result);
    }

    /**
     * (按值统计)时间统计类型
     */
    @RequestMapping("/value/{xColumnName}/{yColumnName}/{timeStatType}")
    public R valueDay(@PathVariable("yColumnName") String yColumnName, @PathVariable("xColumnName") String xColumnName, @PathVariable("timeStatType") String timeStatType,HttpServletRequest request) {
        Map<String, Object> params = new HashMap<String, Object>();
        params.put("xColumn", xColumnName);
        params.put("yColumn", yColumnName);
        params.put("timeStatType", timeStatType);
        EntityWrapper<WentibaobiaoEntity> ew = new EntityWrapper<WentibaobiaoEntity>();
        List<Map<String, Object>> result = wentibaobiaoService.selectTimeStatValue(params, ew);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        for(Map<String, Object> m : result) {
            for(String k : m.keySet()) {
                if(m.get(k) instanceof Date) {
                    m.put(k, sdf.format((Date)m.get(k)));
                }
            }
        }
        return R.ok().put("data", result);
    }

    /**
     * 分组统计
     */
    @RequestMapping("/group/{columnName}")
    public R group(@PathVariable("columnName") String columnName,HttpServletRequest request) {
        Map<String, Object> params = new HashMap<String, Object>();
        params.put("column", columnName);
        EntityWrapper<WentibaobiaoEntity> ew = new EntityWrapper<WentibaobiaoEntity>();
        List<Map<String, Object>> result = wentibaobiaoService.selectGroup(params, ew);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        for(Map<String, Object> m : result) {
            for(String k : m.keySet()) {
                if(m.get(k) instanceof Date) {
                    m.put(k, sdf.format((Date)m.get(k)));
                }
            }
        }
        return R.ok().put("data", result);
    }

}

结论

通过完成该企业客户信息反馈平台和本论文的撰写让我更加明白了软件开发过程中软件工程思想的重要性。在项目的前期由于对需求分析做的不够谨慎和明确,导致了后面在设计甚至编码时候造成了许多不必要的麻烦。由此在今后的学习和工作开发之中必须要牢牢把握住软件工程的设计思想和方法,这样可以进一步保证项目开发的健壮性和准确性。

本网站所实现的是一个企业客户信息反馈平台,该平台严格按照需求分析制作相关模块,并利用所学知识尽力完成,但是本人由于学识浅薄,无法真正做到让该程序可以投入市场使用,仅仅简单实现部分功能,希望日后还能改善。

最近更新

  1. TCP协议是安全的吗?

    2024-03-14 05:38:04       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-14 05:38:04       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-14 05:38:04       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-14 05:38:04       18 阅读

热门阅读

  1. 基于qt和css的MP3音乐播放器引擎开发

    2024-03-14 05:38:04       17 阅读
  2. 分布式ID(8):分布式ID生成方法

    2024-03-14 05:38:04       22 阅读
  3. .NET中使用Redis大全

    2024-03-14 05:38:04       19 阅读
  4. volatile关键字用处和场景?

    2024-03-14 05:38:04       18 阅读
  5. 17 OpenCv Canny算子

    2024-03-14 05:38:04       16 阅读
  6. HiveQL详解

    2024-03-14 05:38:04       18 阅读
  7. 视频测试示例

    2024-03-14 05:38:04       13 阅读
  8. 什么是池架构?

    2024-03-14 05:38:04       15 阅读
  9. OpenCV加载视频

    2024-03-14 05:38:04       18 阅读
  10. AI大语言模型GPT & R 生态环境领域数据统计分析

    2024-03-14 05:38:04       19 阅读
  11. 软考笔记--层次式架构之数据访问层设计

    2024-03-14 05:38:04       15 阅读
  12. 浅谈Spring Cloud Ribbon原理及其使用方法

    2024-03-14 05:38:04       18 阅读
  13. 在组件上使用v-model

    2024-03-14 05:38:04       16 阅读
  14. SCI 图像处理期刊

    2024-03-14 05:38:04       18 阅读
  15. Flink实时写Hudi报NumberFormatException异常

    2024-03-14 05:38:04       16 阅读