基于Java的城市天然气费管理系统的设计与实现(源码+lw+部署文档+讲解等)

news2024/11/27 9:50:09

文章目录

  • 前言
  • 具体实现截图
  • 论文参考
  • 详细视频演示
  • 为什么选择我
    • 自己的网站
    • 自己的小程序(小蔡coding)
    • 有保障的售后
    • 福利
  • 代码参考
  • 源码获取

前言

💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗
👇🏻 精彩专栏 推荐订阅👇🏻
2023-2024年最值得选的微信小程序毕业设计选题大全:100个热门选题推荐✅

2023-2024年最值得选的Java毕业设计选题大全:500个热门选题推荐✅

Java精品实战案例《500套》

微信小程序项目精品案例《500套》

🌟文末获取源码+数据库🌟
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人

具体实现截图

管理员进入指定功能操作区之后可以管理天然气费信息。其页面见下图。管理员可以查看各个用户的天然气费信息,完成用户天然气表抄表,完成用户天然气费的线上缴费操作。

在这里插入图片描述
管理员进入指定功能操作区之后可以处理天然气表信息。其页面见下图。管理员添加天然气表,批量删除或针对性删除天然气表信息,修改天然气表信息。
在这里插入图片描述
管理员进入指定功能操作区之后可以查看用户申请更换的天然气表信息。其页面见下图。管理员在本页面可以选择同意更换天然气表或取消用户更换天然气表的请求。

在这里插入图片描述

管理员进入指定功能操作区之后可以管理用户。其页面见下图。本功能就是为了方便管理员增加用户,修改用户,批量删除用户而设置的。

在这里插入图片描述
管理员进入指定功能操作区之后可以管理留言。其页面见下图。管理员批量删除留言,回答用户的留言。
在这里插入图片描述

用户进入指定功能操作区之后可以查看天然气费并缴费。其页面见下图。用户点击缴费即可完成对应天然气费的缴费操作。

在这里插入图片描述
用户进入指定功能操作区之后可以更换天然气表。其页面见下图。当用户提交了天然气表更换信息之后,在管理员未审核前,用户可以自行取消更换天然气表的请求。
在这里插入图片描述

论文参考

在这里插入图片描述

详细视频演示

请联系我获取更详细的演示视频

为什么选择我

自己的网站

网站上传的项目均为博主自己收集和开发的,质量都可以得到保障,适合自己懂一点程序开发的同学使用!

自己的小程序(小蔡coding)

为了方便同学们使用,我开发了小程序版的,名字叫小蔡coding。同学们可以通过小程序快速搜索和定位到自己想要的程序

有保障的售后

福利

每推荐一位同学,推荐费一位100!
a51e38c5bf9f17df58ffdbbe74c16c44_720

代码参考

@IgnoreAuth
@PostMapping(value = "/login")
public R login(String username, String password, String captcha, HttpServletRequest request) {
   UsersEntity user = userService.selectOne(new EntityWrapper<UsersEntity>().eq("username", username));
   if(user==null || !user.getPassword().equals(password)) {
      return R.error("账号或密码不正确");
   }
   String token = tokenService.generateToken(user.getId(),username, "users", user.getRole());
   return R.ok().put("token", token);
}

	@Override
	public String generateToken(Long userid,String username, String tableName, String role) {
		TokenEntity tokenEntity = this.selectOne(new EntityWrapper<TokenEntity>().eq("userid", userid).eq("role", role));
		String token = CommonUtil.getRandomString(32);
		Calendar cal = Calendar.getInstance();   
    	cal.setTime(new Date());   
    	cal.add(Calendar.HOUR_OF_DAY, 1);
		if(tokenEntity!=null) {
			tokenEntity.setToken(token);
			tokenEntity.setExpiratedtime(cal.getTime());
			this.updateById(tokenEntity);
		} else {
			this.insert(new TokenEntity(userid,username, tableName, role, token, cal.getTime()));
		}
		return token;
	}



/**
 * 权限(Token)验证
 */
@Component
public class AuthorizationInterceptor implements HandlerInterceptor {

    public static final String LOGIN_TOKEN_KEY = "Token";

    @Autowired
    private TokenService tokenService;
    
	@Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

		//支持跨域请求
        response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
        response.setHeader("Access-Control-Max-Age", "3600");
        response.setHeader("Access-Control-Allow-Credentials", "true");
        response.setHeader("Access-Control-Allow-Headers", "x-requested-with,request-source,Token, Origin,imgType, Content-Type, cache-control,postman-token,Cookie, Accept,authorization");
        response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
	// 跨域时会首先发送一个OPTIONS请求,这里我们给OPTIONS请求直接返回正常状态
	if (request.getMethod().equals(RequestMethod.OPTIONS.name())) {
        	response.setStatus(HttpStatus.OK.value());
            return false;
        }
        
        IgnoreAuth annotation;
        if (handler instanceof HandlerMethod) {
            annotation = ((HandlerMethod) handler).getMethodAnnotation(IgnoreAuth.class);
        } else {
            return true;
        }

        //从header中获取token
        String token = request.getHeader(LOGIN_TOKEN_KEY);
        
        /**
         * 不需要验证权限的方法直接放过
         */
        if(annotation!=null) {
        	return true;
        }
        
        TokenEntity tokenEntity = null;
        if(StringUtils.isNotBlank(token)) {
        	tokenEntity = tokenService.getTokenEntity(token);
        }
        
        if(tokenEntity != null) {
        	request.getSession().setAttribute("userId", tokenEntity.getUserid());
        	request.getSession().setAttribute("role", tokenEntity.getRole());
        	request.getSession().setAttribute("tableName", tokenEntity.getTablename());
        	request.getSession().setAttribute("username", tokenEntity.getUsername());
        	return true;
        }
        
		PrintWriter writer = null;
		response.setCharacterEncoding("UTF-8");
		response.setContentType("application/json; charset=utf-8");
		try {
		    writer = response.getWriter();
		    writer.print(JSONObject.toJSONString(R.error(401, "请先登录")));
		} finally {
		    if(writer != null){
		        writer.close();
		    }
		}
//				throw new EIException("请先登录", 401);
		return false;
    }
}

源码获取

文章下方名片联系我即可~
大家点赞、收藏、关注、评论啦 、查看👇🏻获取联系方式👇🏻
精彩专栏推荐订阅:在下方专栏👇🏻
Java精品实战案例《500套》
微信小程序项目精品案例《500套》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1056049.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

S5PV210裸机(一):裸机基础,arm指令,210启动刷机

本文主要探讨s5pv210裸机基础知识&#xff0c;arm指令&#xff0c;以及210启动刷机相关知识。 Soc与cpu Soc是cpu与其他外设的集合即SoC<>cpuDDRflashutral...... 地址总线与数据总线 cpu通过地址总线寻址即传输DDR或flash等地址,通过数据总线与外设进…

【算法优选】双指针专题——贰

文章目录 &#x1f60e;前言&#x1f332;[快乐数](https://leetcode.cn/problems/happy-number/)&#x1f6a9;题目描述&#x1f6a9;题⽬分析&#xff1a;&#x1f6a9;算法思路&#xff1a;&#x1f6a9;代码实现&#xff1a; &#x1f38b;[盛水最多的容器](https://leetco…

第四十章 持久对象和SQL - Object IDs

文章目录 第四十章 持久对象和SQL - Object IDsObject IDsID是如何确定的访问 ID 第四十章 持久对象和SQL - Object IDs Object IDs 每个对象在其所属的每个范围内都有一个唯一的 ID。在大多数情况下&#xff0c;使用此 ID 来处理对象。此 ID 是类中 %Persistent 的以下常用方…

如何制作在线流程图?6款在线工具帮你轻松搞定

流程图&#xff0c;顾名思义 —— 用视觉化的方式来描述一种过程或流程。它可以应用于各种领域&#xff0c;从业务流程&#xff0c;算法&#xff0c;到计算机程序等。然而&#xff0c;在创建流程图时&#xff0c;可能会遇到许多问题或者困惑&#xff0c;如缺乏专业的设计技能&a…

锚框_的标定

一、查漏补缺、熟能生巧&#xff1a; 1.关于fix.axis.add_patch在原来图像的坐标系同添加 边框的函数的使用&#xff1a; 2.torch.arange( h , device)生成tensor的等差数组: 3.torch.T&#xff08;&#xff09;就是transpose转置操作的函数咯: 4.torch.repeat操作&#xff0c…

静态数码管显示+动态数码管显示——“51单片机”

各位CSDN的uu们好呀&#xff0c;今天小雅兰的内容还是51单片机的知识&#xff0c;是为静态数码管显示和动态数码管显示&#xff0c;下面&#xff0c;让我们进入51单片机的世界吧&#xff01;&#xff01;&#xff01; 静态数码管显示 动态数码管显示 源代码 静态数码管显示 …

网络运营推广过程中客户说需要资质

大家好&#xff0c;我是网络工程师成长日记实验室的郑老师&#xff0c;您现在正在查看的是网络工程师成长日记专栏&#xff0c;记录网络工程师日常生活的点点滴滴 一个同学跟我学网络运营&#xff0c;他说他现在也学我做弱电。然后他说他接到电话&#xff0c;对方都是问资质&am…

首发Orin N芯片,腾势追赶「智驾第一梯队」

张祥威 编辑 | 德新 英伟达最新一代芯片—— Orin N&#xff0c;腾势拿下 首发。 9月26日&#xff0c;腾势N7推出「高快智驾包」。官方描述中&#xff0c;这一选装将“基于新一代NIVIDIA DRIVE ORIN的 高性能平台”&#xff0c;可以实现高速NOA。 此前&#xff0c;腾势的…

Acwing 843. n-皇后问题

Acwing 843. n-皇后问题 知识点题目描述思路讲解代码展示 知识点 DFS剪枝 题目描述 思路讲解 代码展示 第一种搜索方式&#xff1a; #include <iostream>using namespace std;const int N 20;int n; char g[N][N]; bool col[N], dg[N * 2], udg[N * 2];void dfs(in…

常见开发、测试模型

开发模型瀑布模型螺旋模型增量、迭代敏捷开发模型 测试模型V模型W模型 开发模型 瀑布模型 瀑布模型的每一个阶段都只执行一次&#xff0c;是线性顺序进行的软件开发模式。 优点&#xff1a;每个阶段做什么&#xff1b;产生什么非常清晰&#xff1b; 缺点&#xff1a;风险往…

Python3数据科学包系列(三):数据分析实战

Python3中类的高级语法及实战 Python3(基础|高级)语法实战(|多线程|多进程|线程池|进程池技术)|多线程安全问题解决方案 Python3数据科学包系列(一):数据分析实战 Python3数据科学包系列(二):数据分析实战 一: 数据分析与挖掘认知升维 我们知道在数据分析与数据挖掘中,数据…

15: 8种GPIO模式和其他资源

目录 一:GPIO 1:简历 2:模式 3:位结构 4:八种模式 A: 浮空/上拉/下拉输入 B:模拟输入 ----GPIO_Mode_AIN C: 开漏/推挽输出 D:复用开漏/推挽输出 E: 模式总结 二:其他资源 1:片上资源/外设 2:引脚定义表 一:GPIO 1:简历 GPIO&#xff08;General Purpose Input …

排序---P1012 [NOIP1998 提高组] 拼数

思路&#xff1a; 这道题的思路就是进行排序&#xff0c;但不同于以往是根据数的大小排序&#xff0c;这道题是根据最高位最大就放在越前面。那么要怎么解决最高位越大排得越前这个问题呢&#xff0c;我们就会想到用字符串比较大小&#xff0c;就可以解决&#xff0c;所以我们…

RESTFul风格接口如何设计

RESTFul风格设计规范 HTTP协议请求方式要求 REST 风格主张在项目设计、开发过程中&#xff0c;具体的操作符合HTTP协议定义的请求方式的语义。 操作请求方式查询操作GET保存操作POST删除操作DELETE更新操作PUT 需求分析 数据结构&#xff1a; User {id 唯一标识,name 用户名&a…

车牌超分辨率:License Plate Super-Resolution Using Diffusion Models

论文作者&#xff1a;Sawsan AlHalawani,Bilel Benjdira,Adel Ammar,Anis Koubaa,Anas M. Ali 作者单位&#xff1a;Prince Sultan University 论文链接&#xff1a;http://arxiv.org/abs/2309.12506v1 内容简介&#xff1a; 1&#xff09;方向&#xff1a;图像超分辨率技术…

MySQL进阶_1.数据类型约束

文章目录 第一章、名词解释第二章、数据类型2.1、数据类型简介2.2、数据类型对应属性2.3、整数类型2.4、浮点类型2.5、定点数类型2.6、日期和时间类型2.7、文本字符串类型2.7.1、CHAR和VARCHAR区别2.7.2、TEXT 2.8、小结和建议 第三章、约束3.1 约束的定义3.2 非空约束3.3 唯一…

浅谈OV SSL 证书的优势

随着网络威胁日益增多&#xff0c;保护网站和用户安全已成为每个企业和组织的重要任务。在众多SSL证书类型中&#xff0c;OV&#xff08;Organization Validation&#xff09;证书以其独特的优势备受关注。让我们深入探究OV证书的优势所在&#xff0c;为网站安全搭建坚实的防线…

内网安全学习

域 域在我的理解就是一个局域网&#xff0c;管理员为了便于操作域内主机&#xff0c;通常会有一个DC&#xff08;domain control&#xff09;&#xff0c;域控主机可以直接控制其他域内主机&#xff0c;相当于域内的管理员权限&#xff0c;内网渗透的终极目的即拿到域控的权限…

嵌入式学习笔记(41)实时时钟RTC

7.6.1何为实时时钟 (1)real time clock&#xff0c;真实时间&#xff0c;就是所谓的xx年x月x日x时x分x秒星期x (2)RTC是SoC中一个内部外设&#xff0c;RTC有自己独立的晶振提供RTC时钟源&#xff08;32.768KHz&#xff09;&#xff0c;内部有一些寄存器用来记录时间&#xff…

Acwing 842. 排列数字

Acwing 842. 排列数字 知识点题目描述思路讲解代码展示 知识点 DFS 题目描述 思路讲解 DFS重点是&#xff1a;顺序&#xff01;&#xff08;暴力的手法&#xff09;&#xff08;递归&#xff09; 用 path 数组保存排列&#xff0c;当排列的长度为 n 时&#xff0c;是一种方…