越秀区营销型网站建设珠海网络推广

当前位置: 首页 > news >正文

越秀区营销型网站建设,珠海网络推广,朔城网站制作,网站排名优化服务公司在项目中应用 进行认证和授权需要前面课程中提到的权限模型涉及的7张表支撑#xff0c;因为用户信息、权限信息、菜单信息、角色信息、关联信息等都保存在这7张表中#xff0c;也就是这些表中的数据是进行认证和授权的依据。所以在真正进行认证和授权之前需要对这些数据进行…在项目中应用 进行认证和授权需要前面课程中提到的权限模型涉及的7张表支撑因为用户信息、权限信息、菜单信息、角色信息、关联信息等都保存在这7张表中也就是这些表中的数据是进行认证和授权的依据。所以在真正进行认证和授权之前需要对这些数据进行管理即需要开发如下一些功能 1、权限数据管理增删改查 2、菜单数据管理增删改查 3、角色数据管理增删改查、角色关联权限、角色关联菜单 4、用户数据管理增删改查、用户关联角色 导入Spring Security环境 第一步在health_parent父工程的pom.xml中导入Spring Security的maven坐标 第二步在health_backend工程的web.xml文件中配置用于整合Spring Security框架的过滤器DelegatingFilterProxy 实现认证和授权 第一步在health_backend工程中按照Spring Security框架要求提供SpringSecurityUserService并且实现UserDetailsService接口 第二步创建UserService服务接口、服务实现类、Dao接口、Mapper映射文件等 第三步修改health_backend工程中的springmvc.xml文件修改dubbo批量扫描的包路径 第四步在health_backend工程中提供spring-security.xml配置文件 第五步在springmvc.xml文件中引入spring-security.xml文件 !–设置在页面可以通过iframe访问受保护的页面默认为不允许访问–security:frame-options policySAMEORIGIN/security:frame-options 显示用户名 第一步在main.html页面中修改定义username模型数据基于VUE的数据绑定展示用户名发送ajax请求获取username 第二步创建UserController并提供getUsername方法 注意此处的User对象是使用到框架提供的User对象框架通过session获得模型数据的信息 RestController RequestMapping(/user) public class UserController {//获取当前登录用户的用户名RequestMapping(/getUsername)public Result getUsername()throws Exception{try{org.springframework.security.core.userdetails.User user (org.springframework.security.core.userdetails.User)SecurityContextHolder.getContext().getAuthentication().getPrincipal();return new Result(true, MessageConstant.GET_USERNAME_SUCCESS,user.getUsername());}catch (Exception e){return new Result(false, MessageConstant.GET_USERNAME_FAIL);}} } 用户退出 第一步在main.html中提供的退出菜单上加入超链接 第二步在spring-security.xml文件中配置 Echarts图表 动态显示图标的x轴为具体的yyyy-MM格式 导入ECharts库 第一步将echarts.js文件复制到health_backend工程的plugins目录下 第二步在report_member.html页面引入echarts.js文件 script src../plugins/echarts/echarts.js/script 参照官方实例导入折线图 div classbox!– 为 ECharts 准备一个具备大小宽高的 DOM –div idchart1 styleheight:600px;/div /div // 基于准备好的dom初始化echarts实例var myChart1 echarts.init(document.getElementById(chart1));//发送ajax请求获取动态数据axios.get(/report/getMemberReport.do).then((res){myChart1.setOption({title: {text: 会员数量},tooltip: {},legend: {data:[会员数量]},xAxis: {data: res.data.data.months},yAxis: {type:value},series: [{name: 会员数量,type: line,data: res.data.data.memberCount}]});}); /script 后台代码 controller /*** 统计报表/ RestController RequestMapping(/report) public class ReportController {Referenceprivate MemberService memberService;/** 会员数量统计* return*/RequestMapping(/getMemberReport)public Result getMemberReport(){Calendar calendar Calendar.getInstance();calendar.add(Calendar.MONTH,-12);//获得当前日期之前12个月的日期ListString list new ArrayList();for(int i0;i12;i){calendar.add(Calendar.MONTH,1);list.add(new SimpleDateFormat(yyyy.MM).format(calendar.getTime()));}MapString,Object map new HashMap();map.put(months,list);ListInteger memberCount memberService.findMemberCountByMonth(list);map.put(memberCount,memberCount);return new Result(true, MessageConstant.GET_MEMBER_NUMBER_REPORT_SUCCESS,map);} } 注意Mapper文件中的转义字符 在mysql8.0中上述sql查询语句会显示日期出错更改查询方式 %Y.%m不等于%Y-%m 图形报表 导入饼形图步骤 1.设置一个div  2.导入官方文档的option 3.明确Contrller响应的数据格式 4.书写controller //套餐预定占比饼形图RequestMapping(/getSetmealReport)public Result getSetmealReport(){//模拟数据测试什么样的java对象转为饼形图所需的json数据格式MapString,Object data new HashMap();try{ListMapString,Object setmealCount setmealService.findSetmealCount();data.put(setmealCount,setmealCount);//遍历集合中的map得到名称ListString setmealNames new ArrayList();for(MapString,Object map : setmealCount){String name (String) map.get(name);//套餐名称setmealNames.add(name);}data.put(setmealNames,setmealNames);return new Result(true, MessageConstant.GET_SETMEAL_COUNT_REPORT_SUCCESS,data);}catch (Exception e){e.printStackTrace();return new Result(false, MessageConstant.GET_SETMEAL_COUNT_REPORT_FAIL);}} 后续完善serviceServiceImplDaoMapper文件 POI报表 前端代码 定义模型数据 定义数据模型通过VUE的数据绑定展示数据 Controller返回的数据格式应该如下  {data:{todayVisitsNumber:0,reportDate:2019-04-25,todayNewMember:0,thisWeekVisitsNumber:0,thisMonthNewMember:2,thisWeekNewMember:0,totalMember:10,thisMonthOrderNumber:2,thisMonthVisitsNumber:0,todayOrderNumber:0,thisWeekOrderNumber:0,hotSetmeal:[{proportion:0.4545,name:粉红珍爱(女)升级TM12项筛查体检套餐,setmeal_count:5},{proportion:0.1818,name:阳光爸妈升级肿瘤12项筛查体检套餐,setmeal_count:2},{proportion:0.1818,name:珍爱高端升级肿瘤12项筛查,setmeal_count:2},{proportion:0.0909,name:孕前检查套餐,setmeal_count:1}],},flag:true,message:获取运营统计数据成功 } 在Controller类中调用ServiceService的实现类 public MapString, Object getBusinessReportData() throws Exception {//获得当前日期String today DateUtils.parseDate2String(DateUtils.getToday());//获得本周一的日期String monday DateUtils.parseDate2String(DateUtils.getThisWeekMonday());//获得本月第一天的日期String firstDay4ThisMonth DateUtils.parseDate2String(DateUtils.getFirstDay4ThisMonth());//本日新增会员数Integer todayNewMember memberDao.findMemberCountByDate(today);//总会员数Integer totalMember memberDao.findMemberTotalCount();//本周新增会员数Integer thisWeekNewMember memberDao.findMemberCountAfterDate(monday);//本月新增会员数Integer thisMonthNewMember memberDao.findMemberCountAfterDate(firstDay4ThisMonth);//热门套餐取前4ListMap hotSetmeal orderDao.findHotSetmeal();//报表产生日期MapString,Object result new HashMap();result.put(reportDate,today);result.put(todayNewMember,todayNewMember);result.put(totalMember,totalMember);result.put(thisWeekNewMember,thisWeekNewMember);result.put(thisMonthNewMember,thisMonthNewMember);result.put(hotSetmeal,hotSetmeal);return result;} 补充相关的Dao和Mapper文件 报表导出 上面的Excel效果可以看到表格比较复杂涉及到合并单元格、字体、字号、字体加粗、对齐方式等的设置。如果通过POI编程的方式来设置这些效果代码会非常繁琐。 在企业实际开发中对于这种比较复杂的表格导出一般会提前设计一个Excel模板文件在这个模板文件中提前将表格的结构和样式设置好程序只需要读取这个文件并在文件中的相应位置写入具体的值就可以了。 前端代码 div classexcelTitle el-button clickexportExcel导出Excel/el-button运营数据统计/div methods:{exportExcel(){window.location.href /report/exportBusinessReport.do;}} 后端代码 try{MapString,Object result reportService.getBusinessReportData();//取出返回结果数据准备将报表数据写入到Excel文件中String reportDate (String) result.get(reportDate);Integer todayNewMember (Integer) result.get(todayNewMember);Integer totalMember (Integer) result.get(totalMember);Integer thisWeekNewMember (Integer) result.get(thisWeekNewMember);Integer thisMonthNewMember (Integer) result.get(thisMonthNewMember);ListMap hotSetmeal (ListMap) result.get(hotSetmeal);//获得Excel模板文件绝对路径String filepath request.getSession().getServletContext().getRealPath(template) File.separator report_template.xlsx;//基于提供的Excel模板文件在内存中创建一个Excel表格对象XSSFWorkbook excel new XSSFWorkbook(new FileInputStream(new File(filepath)));//读取第一个工作表XSSFSheet sheet excel.getSheetAt(0);//获得第三行的第六个单元格XSSFRow row sheet.getRow(2);XSSFCell cell row.getCell(5);cell.setCellValue(reportDate);//日期在Excel中对应的单元格位置row sheet.getRow(4);row.getCell(5).setCellValue(todayNewMember);//新增会员数本日row.getCell(7).setCellValue(totalMember);//总会员数row sheet.getRow(5);row.getCell(5).setCellValue(thisWeekNewMember);//本周新增会员数row.getCell(7).setCellValue(thisMonthNewMember);//本月新增会员数int rowNum 12;for(Map map : hotSetmeal){//热门套餐String name (String) map.get(name);Long setmeal_count (Long) map.get(setmeal_count);BigDecimal proportion (BigDecimal) map.get(proportion);row sheet.getRow(rowNum );row.getCell(4).setCellValue(name);//套餐名称row.getCell(5).setCellValue(setmeal_count);//预约数量row.getCell(6).setCellValue(proportion.doubleValue());//占比}//通过输出流进行文件下载,基于浏览器作为客户端下载ServletOutputStream out response.getOutputStream();response.setContentType(application/vnd.ms-excel);//代表excel类型向客户端声明文件类型response.setHeader(content-Disposition, attachment;filenamereport.xlsx);//指定以附件形式下载excel.write(out);out.flush();out.close();excel.close();return null;}catch (Exception e){return new Result(true,MessageConstant.GET_BUSINESS_REPORT_FAIL);}