ssm+JSP的乡镇自来水收费系统源码和论文PPT

ssm+JSP的乡镇自来水收费系统源码和论文PPT014

开发工具:idea 

 数据库mysql5.7+(mysql5.7最佳)

 数据库链接工具:navcat,小海豚等

开发技术:java  ssm tomcat8.5

一、课题背景与意义

随着我国经济建设迅速发展,乡镇规模日益扩大,乡镇经济社会活动日益加快和人口的高度集中化,给供水企业的营业抄收和费用管理工作提出了越来越高的要求。乡镇供水系统是城市的重要基础设施之一,由于其具有管网结构复杂、客户分布广泛、地域面积大、信息量及查询量大、保存期长、要求不间断运行使用等特点,传统的营业抄收管理系统已无法适应城市供水建设及维护管理的需求。为了实现自来水公司优质、经济、高效的服务目标,应建立先进的自来水收费管理信息系统,将一流的管理与先进的计算机网络结合在一起,建立客户服务中心系统,形成一个以计算机技术为载体,业务管理为内容的统一体,最终达到用户方便、企业增效、形象良好的对外服务窗口。

      本次设计拟采用JAVA技术,对乡镇自来水收费系统的功能需求进行了全面分析,从模块功能定义、前后端交互技术、数据库及编程语言的选择、系统调试及测试、功能完善和改进等方面进行设计,解决了从用户新装、抄表、计费、收费、复查、换表、发票管理、欠费追缴、业务受理、资料归档等多种业务,并最终为用户提供一套管理严谨、业务全面、运行稳定、扩展性强,且具有强大数据分析能力的管理系统,使系统数据得以最大化利用,可以灵活应对各种规模水司的应用。系统功能涵盖面广,可以根据用户的实际管理情况,快速获得相应的管理功能以适应企业管理的需要,最终从管理角度为用户带来便捷和收益。

二、国内外研究现状

目前,美国、欧洲、日本等发达国家的自来水收费进入智能化和网络化的时代,其内容由传统的抄(表)、核(算)、收(费)、计量业务,转变为以客户为中心、以促销为目的、以服务为主要业务的新的工作体系。在技术手段上,计算机网络化程度很高,各部门之间联系通道畅通,工作高效,客户的请求能快速得到响应。在客户服务方面,重视标准化客户服务,这些标准分为确保标准和综合标准。从总体上来看,先进的国外自来水企业在自来水市场放松管制后,更加注重智能技术和设备的采用,提高供水可靠性和质量,更加注重为客户服务的能力,充分利用自动抄表、智能水表、网络技术、呼叫中心技术、Web技术,使得响应更快、服务更好。

在国内,各级自来水企业已经完成基本的信息化建设,包括计算机局域网建设,各专业系统建设,但由于建设的标准不统一,客户的管理方式不同,加上软件开发企业水平不等,导致信息系统应用水平和技术有较大差异。自来水实时收费系统还没有被足够重视,多数企业的收费功能少,收费方式单一。对收费的研究还处在比较初级的阶段。

package com.controller;

import java.text.SimpleDateFormat;
import java.util.*;
import javax.servlet.http.HttpServletRequest;

import com.annotation.IgnoreAuth;
import com.entity.UserEntity;
import com.entity.YonghuxinxiEntity;
import com.service.TokenService;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;

import com.entity.YonghuxinxiEntity;

import com.service.YonghuxinxiService;
import com.utils.PageUtils;
import com.utils.R;

/**
 * 
 * 后端接口
 * @author
 * @email
 * @date 2021-01-30
*/
@RestController
@Controller
@RequestMapping("/yonghuxinxi")
public class YonghuxinxiController {
    private static final Logger logger = LoggerFactory.getLogger(YonghuxinxiController.class);

    @Autowired
    private YonghuxinxiService yonghuxinxiService;

    @Autowired
    private TokenService tokenService;

    /**
     * 登录
     */
    @IgnoreAuth
    @PostMapping(value = "/login")
    public R login(String username, String password, String role, HttpServletRequest request) {
        YonghuxinxiEntity user = yonghuxinxiService.selectOne(new EntityWrapper<YonghuxinxiEntity>().eq("account", username));
        if(user != null){
            if(!user.getRole().equals(role)){
                return R.error("权限不正常");
            }
            if(user==null || !user.getPassword().equals(password)) {
                return R.error("账号或密码不正确");
            }
            String token = tokenService.generateToken(user.getId(),user.getName(), "users", user.getRole());
            return R.ok().put("token", token);
        }else{
            return R.error("账号、密码或权限不正确");
        }
    }

    /**
     * 注册
     */
    @IgnoreAuth
    @PostMapping(value = "/register")
    public R register(@RequestBody YonghuxinxiEntity user){
//    	ValidatorUtils.validateEntity(user);
        if(yonghuxinxiService.selectOne(new EntityWrapper<YonghuxinxiEntity>().eq("account", user.getAccount())) !=null) {
            return R.error("用户已存在");
        }
        yonghuxinxiService.insert(user);
        return R.ok();
    }

    /**
     * 退出
     */
    @GetMapping(value = "logout")
    public R logout(HttpServletRequest request) {
        request.getSession().invalidate();
        return R.ok("退出成功");
    }

    /**
     * 密码重置
     */
    @IgnoreAuth
    @RequestMapping(value = "/resetPass")
    public R resetPass(String username, HttpServletRequest request){
        YonghuxinxiEntity user = yonghuxinxiService.selectOne(new EntityWrapper<YonghuxinxiEntity>().eq("account", username));
        if(user==null) {
            return R.error("账号不存在");
        }
        user.setPassword("123456");
        yonghuxinxiService.update(user,null);
        return R.ok("密码已重置为:123456");
    }

    /**
     * 获取用户的session用户信息
     */
    @RequestMapping("/session")
    public R getCurrUser(HttpServletRequest request){
        Integer id = (Integer)request.getSession().getAttribute("userId");
        YonghuxinxiEntity user = yonghuxinxiService.selectById(id);
        return R.ok().put("data", user);
    }


    /**
    * 后端列表
    */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params, HttpServletRequest request){
        logger.debug("Controller:"+this.getClass().getName()+",page方法");
        Object role = request.getSession().getAttribute("role");
        PageUtils page = null;
        if(role.equals("用户")){
            params.put("yh",request.getSession().getAttribute("userId"));
            page = yonghuxinxiService.queryPage(params);
        }else{
            page = yonghuxinxiService.queryPage(params);
        }
        return R.ok().put("data", page);
    }
    /**
    * 后端详情
    */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id){
        logger.debug("Controller:"+this.getClass().getName()+",info方法");
        YonghuxinxiEntity yonghuxinxi = yonghuxinxiService.selectById(id);
        if(yonghuxinxi!=null){
            return R.ok().put("data", yonghuxinxi);
        }else {
            return R.error(511,"查不到数据");
        }

    }

    /**
    * 后端保存
    */
    @IgnoreAuth
    @RequestMapping("/save")
    public R save(@RequestBody YonghuxinxiEntity yonghuxinxi){
        logger.debug("Controller:"+this.getClass().getName()+",save");
        Wrapper<YonghuxinxiEntity> queryWrapper = new EntityWrapper<YonghuxinxiEntity>()
            .eq("name", yonghuxinxi.getName())
            .eq("account", yonghuxinxi.getAccount());
        logger.info("sql语句:"+queryWrapper.getSqlSegment());
        YonghuxinxiEntity yonghuxinxiEntity = yonghuxinxiService.selectOne(queryWrapper);
        if("".equals(yonghuxinxi.getImgPhoto()) || "null".equals(yonghuxinxi.getImgPhoto())){
            yonghuxinxi.setImgPhoto(null);
        }
        yonghuxinxi.setRole("用户");
        yonghuxinxi.setSbTypes(1);
        yonghuxinxi.setCredit(0);
        if(yonghuxinxiEntity==null){
            yonghuxinxiService.insert(yonghuxinxi);
            return R.ok();
        }else {
            return R.error(511,"表中有相同数据");
        }
    }

    /**
    * 修改
    */
    @RequestMapping("/update")
    public R update(@RequestBody YonghuxinxiEntity yonghuxinxi, HttpServletRequest request){
        logger.debug("Controller:"+this.getClass().getName()+",update");
        //根据字段查询是否有相同数据
        Wrapper<YonghuxinxiEntity> queryWrapper = new EntityWrapper<YonghuxinxiEntity>()
            .notIn("id",yonghuxinxi.getId())
            .eq("name", yonghuxinxi.getName())
            .eq("account", yonghuxinxi.getAccount());
        logger.info("sql语句:"+queryWrapper.getSqlSegment());
        YonghuxinxiEntity yonghuxinxiEntity = yonghuxinxiService.selectOne(queryWrapper);
        if("".equals(yonghuxinxi.getImgPhoto()) || "null".equals(yonghuxinxi.getImgPhoto())){
                yonghuxinxi.setImgPhoto(null);
        }
        if(yonghuxinxiEntity==null){
            yonghuxinxiService.updateById(yonghuxinxi);//根据id更新
            return R.ok();
        }else {
            return R.error(511,"表中有相同数据");
        }
    }

    /**
     * 缴费
     */
    @RequestMapping("/payment")
    public R payment(@RequestBody Double money, HttpServletRequest request){
        logger.debug("Controller:"+this.getClass().getName()+",delete");
        YonghuxinxiEntity yonghuxinxi = yonghuxinxiService.selectById(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));
        Double q = yonghuxinxi.getBalance() - money;
        if(q != null && q >= 0){
            yonghuxinxi.setBalance(q);
            yonghuxinxi.setCredit(+1);
            yonghuxinxiService.updateById(yonghuxinxi);
        }else {
            return R.error("余额不足");
        }
        return R.ok();
    }


    /**
    * 删除
    */
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids){
        logger.debug("Controller:"+this.getClass().getName()+",delete");
        yonghuxinxiService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }
}

《新源水厂管理收费系统 网络版》是根据水厂公司的实际运营情况编写的一套完善的收费系统。本系统包括了七大组成部分:用户管理、开户管理、抄表管理、减免管理、预存管理、收费管理、数据报表。本系统功能齐全、操作方便经过长期收费使用,系统运行稳定可靠,其特点如下: 1、一户一表、一表多户(总表、单户同时管理,区别收费)。 2、批量建档,自动生成户号,建档错误自动报警。 3、多种用户卡片打印方式,增加用户按抄表人员自动或自定义排序,方便抄表人员抄表。 4、批量抄表,抄表起度、止度不正确自动报警,支持抄表机抄表、支持水损计算。 5、实用度数收取和基本度数收取两种收费模式,两种收费模式可以随时转换。 6、可灵活设置多种气价类型和附加费,不同的气价类型可以设置不同的基本方、不同的气价类型可以设置不同的附加费,附加费计算方式有二种:按用量和按固定金额计算。 7、可以开启和关闭收款四舍五入功能,方便找零。 8、可以开启和关闭用户的个人帐户结余(开启后上期找零结余自动累加到下期收款中)。 9、预存收费功能,预存收款自动扣款、预存收款不足自动提示,预存扣款明细可以随时查询。 10、完善和统一的发票管理、发票统计、发票作废、补打发票。 11、支持用户减免管理,可以实施多种条件对用户实行全额减免或部分减免,永久减免或按次数减免。 12、支持批量收费和发票连打功能。 13、支持按固定金额或按利率结算的滞纳金管理功能。 14、支持阶梯水价功能,阶梯水价和固定水价两种收费方便,可以随时转换;并且阶梯水价的各个阶梯段可以自定义设置,并且可以设置无限个阶梯段。 15、支持磁卡收费功能。 16、支持正式发票管理功能。 17、支持发票套打功能。 18、支持操作人员权限功能。 19、支持日志管理功能。 20、支持自动备份数据库功能。 21、支持多套界面皮肤功能。 22、功能强大的财会管理和统计查询系统。 23、 支持换表管理。 24、支持固定抄表。 25、支持用户开户管理。
软件简介:<br>系统特点<br>自来水收费管理系统下载共分为两块<br>自来水收费管理系统服务器块<br>自来水收费管理系统终端模块<br>安装说明请登陆www.sokubo.cn教程栏目查看。安装录像在www.sokubo.cn演示录像栏目<br><br>首酷-自来水收费系统,是专为县(市)级大中小自来水公司量身定制的信息系统建设方案,其主要特点是:<br>★本软件包括用户管理、抄表数据录入、用户缴费、各项信息统计查询、报表生成等多个功能模块,各个模块进多年实际应用成熟完善;<br>★支持远程抄表设备扩展,支持IC卡扩展管理。<br>★减轻收费人员的工作量与工作强度并提高了工作效率,本软件可以支持移动终端的数据导入<br>★本系统可根据当地实际情况做二次开发,扩展性强。<br>★及时掌握交款情况和用水量<br>★极大的方便了交款单位和个人<br>★分析损耗原因,并对用水大户进行监控<br>★便于及时发现偷、漏水现象<br>★本系统完全采用图形操作界面,易学易用,操作方便,流程清晰<br>★本系统提供完善的权限管理,可以任意设置操作员的操作权限级别,保证系统的安全性<br>★本系统可在单机使用也可以组网使用,以满足不同规模单位的需求<br>★各项费用计算准确无误,统计查询功能强大,各项数据报表打印清晰明了<br>★支持多用户可同时操作,MS-SQL数据存储流程,信息传递及时、检索更方便、高效安全<br>★拓展WEB查询功能,用户可通过Internet网上查询自己的缴费信息,帮助企业建议完善的透明缴费流程<br>★ 系统可以随时根据自来水公司的规模进行拓展,方便使用单位资源整合。<br>★多年的实际应用,证明了系统的高稳定性<br><br><br>主要功能简介 <br>系统设置<br>1)用户设置:管理本软件的操作员信息,设置操作员的权限等<br>2)系统配置:单位信息、界面配置,系统参数(注:收取增值税的用水性质编号)。<br>3)系统初始化:可以针对基础数据做永久性删除,便于备份一年的数据后,进行清空,并开始第二年的工作(可选)<br><br>基础资料<br>1)用户类别定义:将用户划分不同类别的用户,如:居民用户、单位用户等。不同的用户可以打印不同格式的发票、采取不同标准的滞纳金计算规则。 <br>2)区域定义:为了方便管理及信息查询统计,将用户按地理位置划分区域。<br>3)银行资料:银行名称<br>4)水表口径定义:标识水表的口径,以便分类统计用水及水费信息。<br>5)用水性质:性质名称、用水单价、用水费率、水资源费单价,污水除理单价。<br>6)水表信息 :初始值、用户编号、口径编号、安装日期、最大吨位、生产厂家、安装地址 <br><br>抄表管理<br>本模块用于抄表科管理用户、水表信息。<br>1)抄表数据录入:用户编号、用户名称、所属区域、所属抄表员、地址、电话、当前水表(有可能有几块水表)、日期、起始与终止吨数自动得到一个用水量,还有一个实际用水量(注:根据实际情况,如有管部漏水,损坏,按具体情况来定水,以此为准)<br>2)抄表数据管理:主要是对用户信息进行修改。可以按区域、编号、名称查询出缴纳水费与污水除理费中的已缴与未缴用户(注:只能对未缴的用户可以修改信息)<br>3)分区域统计:统计出某一区域的实际抄表用水量、用水量(生活用水、生产办公用水、商业建筑用水。其它)、水费,水资源费及污水处理费。<br>4)抄表情况查询:某一区域的已抄表与未抄表用户,便于安排工作计划<br><br>缴费管理<br>1)水费缴纳:将抄表科的抄表数据直接调入,输入用户编号自动出现抄表数据,直接生成缴纳的水费等数据,交费后直接点回车却可打印出发票。本系统还增设了一个补打发票功能(便于水费缴纳错误用户,补打发票)。<br>2)污水除理缴纳:功能如水费缴纳(注:除不交违约金,不交水资源以外)。 <br>3)水费发票设置:该模块用于税务部门发放的发票管理。可以直接输入发票的起始与终止发票号,并可以显示当前的发票号。<br>5)污水发票设置:功能如水费发票设置。<br><br>统计查询<br>1)水费已缴查询: <br>2)水费未缴查询:<br>3)水费应缴查询:已缴水费+未缴水费。<br>4)水费余额查询:<br>5)增值税查询:<br>6)污水处理已缴查询:<br>7)污水处理未缴查询:<br>8)污水处理应缴查询:<br>9)污水处理余额查询:<br>用户在线查询<br>通过挂接web查询模块连接到数据库服务器,用户可以在互连网上实时查询自己的缴费信息,增加了水费缴纳业务的透明度;不仅大大方便了用户也降低了工作人员的工作量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿毕业分享网

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值