如何使用ssm实现中小型企业财务管理系统

231 篇文章 0 订阅
128 篇文章 1 订阅

@TOC

ssm067中小型企业财务管理系统+jsp

绪论

1.1 选题背景

网络技术和计算机技术发展至今,已经拥有了深厚的理论基础,并在现实中进行了充分运用,尤其是基于计算机运行的软件更是受到各界的关注。计算机软件可以针对不同行业的营业特点以及管理需求,设置不同的功能,可以符合各个行业的实际运营要求,其快速便捷的信息处理模式已经可以让信息的管理者从繁琐的工作中得到解脱,还可以实现数据的易维护和安全性。加上现在人们已经步入信息时代,所以对于信息的宣传和管理就很关键。因此信息化管理模式也是当今的管理趋势。对于中小型企业财务信息管理,如果仍使用旧办法进行,将会影响其在行业中的竞争力,也很容易被时代淘汰,所以中小型企业财务信息的管理计算机化,系统化是必要的。设计开发中小型企业财务管理系统不仅会节约人力和管理成本,还会安全保存庞大的数据量,对于中小型企业财务信息的维护和检索也不需要花费很多时间,非常的便利。

1.2 选题意义

中小型企业财务管理系统在实际运用中,对管理员的综合素质的提升也有帮助。因为中小型企业财务管理系统在减轻了中小型企业财务信息管理人员的工作量的同时,还可以让他们把节省出来的时间用来充实自己,提升个人能力,这样才可以充分发挥中小型企业财务管理系统提供的服务,让中小型企业财务管理系统显示数据信息的同时,也可以快速完成数据处理,提升服务水平。而且中小型企业财务管理系统开发需要投入的成本较低,但是后期运用中,会产生大量效益,尤其是中小型企业财务管理系统在进行高负荷运转时,还可以保证数据处理的质量与数据安全,通过对处理工作的流程的优化,可以节省传统模式需要投入的人力和资金,从而降低信息管理的成本。另外,中小型企业财务管理系统在让中小型企业财务信息规范化的同时,也能及时通过数据输入的有效性规则检测出错误数据,让数据的录入达到准确性的目的,进而提升中小型企业财务管理系统提供的数据的可靠性,让系统数据的错误率降至最低。

1.3 研究内容

按照设计开发一个系统的常用流程来描述系统,可以把系统分成分析阶段,设计阶段,实现阶段,测试阶段。所以在编写系统的说明文档时,根据系统所处的阶段来描述系统的内容。

绪论:这是对选题的背景,意义等内容做出介绍。

系统开发技术:这是对系统即将使用的技术,包括使用的工具,编程的语言等做出介绍。

系统分析:这是对系统做出分析,包括投资前期必备的可行性分析,包括对用户调研获取的需求,包括系统运行具备的性能等内容做出介绍。

系统设计:这是对系统进行设计,包括运用绘图工具设计的系统功能结构,包括设计的在数据库中要创建的数据表的存储结构等内容做出介绍。

系统实现:这是对系统进行编码实现。包括实现的系统各个模块的运行效果等内容做出介绍。

系统测试:这是对编制的系统进行测试。包括功能的测试等内容做出介绍。

2 系统开发技术

这部分内容主要介绍本系统使用的技术,包括使用的工具,编程的语言等内容。

2.1 Java语言

Java语言自公元1995年至今,已经超过25年了,依然在软件开发上面有很大的市场占有率。当年Sun公司发明Java就是为了发展一门跨平台的高级编程语言,让程序开发人员专注于程序开发过程,不需要关注服务器是属于哪个平台,因为跨平台的特性让语言发展的很迅速。Java的发展,吸收了C++这些语言的优点,因为新生事物一般就是解决老旧事物一些痛点的,虽然Java也有很多缺点,但是起码也算是一种发展方向。学习Java不需要太多的指针这些理念,也不用学习太过复杂的数据结构理论,比如什么堆栈这些概念,除非某些特殊行业对这些要求相当严谨之外,一般用Java开发程序是不用考虑各种各样的数据结构的。因为Java属于一种强类型语言,已经对各种数据定义了各种相应的类型。Java对数据类型定义分为两大种,一种是基本类型,含有8个基本属性,另一个是包装类。基本类和包装类从根本的定义上,都有很明显的区分,计算机运行也会有很明显的差别,如果用错了会编译错误还会影响运行效果的,Java的各种优点只需要按部就班的学习使用即可。

2.2 SSM框架

本课题开发的应用程序主要采用的框架技术是SSM,是Java语言的一种框架集合的简称,目前在Java语言方面,主要有两大分支,一个是主攻Java语言,学习了Java基础之后,会有很多Java进阶框架进行学习,主要是针对应用程序后台进行开发设计,另一方面是转行去学习安卓语言,主要是做安卓的前端设计方面,虽然也是Java语言,但是主要去学习安卓平台的各种架构和框架了。但是不管前端应用如何,SSM框架主要是针对服务端方面进行开发的一个主流框架集合。针对于传统的SSH框架的臃肿,配置繁琐,不管是开发还是二次开发都会造成时间上大量的浪费,并且学习上面也不能有效衔接,需要去适应框架的各种设计,而框架设计比较死板,容易出错。SSM框架是当前最流行的,告别了繁琐的配置,让配置更加灵活,让数据操作更加方便,选择SSM框架进行开发感觉是很合适的。

2.3 MYSQL数据库

关系型数据库设计,对于数据库字段类型的设计以及字段长度的设计,都无时无刻的影响着后续程序开发后大量数据操作的运行效率。关系型数据库对不同的字段类型都有解释,本着课题所需的应用程序开发,寻找最适合的关系型数据库,基本上都有考虑。关系型数据库发展至今也有几十年了,优胜劣汰导致到现在还依然存在的关系型数据库其实并不多,基本上也都能满足应用程序的功能所需,所以要从其他方面来进行考虑数据库的选择。从安装维护上面考虑,SQL Server数据库有好几个G的安装包,并且安装过程中会安装很多不需要的功能,非常占用资源。Oracle数据库不比SQL Server安装包小,并且安装也会出现很多问题,对于课题所需来讲,没必要这么麻烦,并且安装还需要各种激活,只有MySQL数据库完全适合,几十兆大小的安装包,运行起来压力不大,毕竟开发电脑上还有很多其他有用的东西,而且完全免费,所以选择了MySQL数据库作为首选数据库。

3 系统分析

这部分内容虽然在开发流程中处于最开始的环节,但是它对接下来的设计和实现起着重要的作用,因为系统分析结果的好坏,将直接影响后面环节的开展。

3.1可行性研究

影响系统开发的因素有很多,比如开发成本高就不适合开展,或者是开发时间超过了预期,也不适合开展等等。所以,在正式作出开发决策前,研究系统可行性问题,从经济,时间,操作等角度论证系统是否可以开展。

3.1.1经济可行性

中小型企业财务管理系统可以简化工作流程,提供信息处理功能,并可以长期保存数据,在后期的数据查询与编辑中耗时少,提升信息管理效率,其带来的收益比较可观。对于本系统开发,无论是开发需要使用的计算机,还是开发工具等投入的成本很低,计算机是机房的电脑,开发工具是从网上下载安装的,并没有收取费用。

3.1.2时间可行性

中小型企业财务管理系统是作为本人毕设项目的一个作品,学院也充分预留了制作时间,并且在每个时间段,都安排了相应的任务,所以根据这个时间安排开展工作,是可以对本系统进行设计完成的。

3.1.3操作可行性

随着电脑的普及,已经有很多人可以独立操作电脑了。而本系统就是在配置了运行环境的电脑上运行,其功能简单,省去了很多繁琐的操作逻辑,使用者通过页面导航可以直接进入功能操作区,所以稍微懂点电脑的人,都可以轻松完成系统的使用。

综上所述,本系统可以开展接下来的工作了。

3.2系统性能分析

为了降低本系统在实际使用中的出错率,就需要分析系统具备的性能。常见的可以评估系统的性能的指标有安全性,易用性,健壮性等。

3.2.1系统易用性

系统提供的信息和服务都有特定的用户群,所以,一个容易操作的系统相比一个不方便使用的系统来讲,用户还是更加青睐于使用方便的系统。所以系统具备易用性就显得非常重要。

3.2.2系统健壮性

系统在与用户进行交互过程中,面对用户的误操作行为,系统应该有相应的处理这种问题的反馈机制,而不是进入系统崩溃状态。系统中设置了很多的功能,在应对系统中某个功能出现异常情况时,系统的其它功能还是可以让用户使用。这就是系统健壮性的体现。

3.2.3系统安全性

保存在系统里面的数据,都是比较重要的系统资源,一旦这些资源泄露,不仅会有财产损失,还会丧失很多客户。所以,系统里面的数据要随时都处于安全的环境中,因此就需要采取措施保证数据安全,比如设置登录功能,使用安全验证技术引导条件用户进入指定页面,而让非条件用户停留在登录页面,不能访问系统。

3.3 系统流程分析

软件开发设计的思想始终贯穿本系统,其开发流程见下图。前期需要进行功能分析,功能设计,还有对系统后台支持数据库的设计,利用编码技术对设计的系统进行实现,然后检测和完善。

图3.1系统开发流程图

访问者操作系统,前提是需要验证身份,而登录功能的设置就是把本系统的用户引导进入后台操作区,把不是本系统的用户拒之门外。其流程见下图。

图3.2 登录流程图

3.4系统功能分析

在明确系统的用途,以及系统的目标用户群后,可以对本系统的功能进行设置,可以获取调研用户对功能的要求,也可以对市场上同类系统进行分析和总结,得出本系统的功能。

中小型企业财务管理系统设置了管理员权限,其用例图见下图。管理员登录进入本人后台之后,管理职工和部门,管理企业资产,经营信息和职工薪资。

图3.4 管理员用例图

中小型企业财务管理系统设置了职工权限,其用例图见下图。职工查询和查看企业经营和企业资产信息,查看每月发放给职工的薪资。

图3.5 职工用例图

4 系统设计

当前,系统的类型有很多,从系统呈现的内容来看,系统的类型有社交类,有商业类,有政府类,有新闻类等。那么,在众多系统类型中,先明确将要设计的系统的类型才是系统设计的首要工作,然后在此基础上明确系统的用户群,功能等,针对这些信息设计出具有独特体验和视觉的系统。如此才能让系统比较具有特色,也能够在众多相似系统中给用户留下深刻印象。

4.1系统目标

本系统在功能制定上,严格参照用户的要求,但是在设计本系统时,也要满足易操作,使用便利的设计要求。由此,设计出一个规范化并且符合用户需求的系统,一定要达到下述系统目标。

第一个系统目标:用户与系统之间的操作方式是基于人机对话,可视化界面的设计除了美观性之外,也具备友好性。可视化界面提供的各类信息符合准确性,可靠性的要求,并能够方便用户灵活查看。

第二个系统目标:用户与系统交互产生的数据,要严格规范的保存在数据库里,无论是后期管理人员查找与管理,都要确保数据安全。

第三个系统目标:实现用户需求的功能。根据对用户的调查得出的功能需求,完成中小型企业财务管理系统的设计与实现。

第四个系统目标:在必要环节,对用户登记的数据进行检查,包括数据长度,以及数据输入类型等的检查,发现错误及时反馈,引导用户规范登记数据。常见的有密码修改,注册登录,用户资料填写等环节的数据核验。

第五个系统目标:设计开发本系统,需要尽最大努力,在系统具备易操作的特点外,也要求系统于后期使用中,维护方便,让系统具备易维护的特点。

第六个系统目标:本系统在交付用户使用时,可以达到运行稳定的目标,另外,系统具备安全性,也符合可靠性的条件,用户可以放心使用。

4.2功能结构设计

前面所做的功能分析,只是本系统的一个大概功能,这部分需要在此基础上进行各个模块的详细设计。

设计的管理员的详细功能见下图,管理员登录进入本人后台之后,管理职工和部门,管理企业资产,经营信息和职工薪资。

图4.1 管理员功能结构图

设计的职工的详细功能见下图,职工查询和查看企业经营和企业资产信息,查看每月发放给职工的薪资。

图4.2 职工功能结构图

4.3数据库设计

相比非关系型数据库来说,目前市场上使用率比较高,并且易于维护的数据库,当数关系型数据库了。这个数据库主要是基于关系模型的方式来对数据信息进行组织。也就是常见的二维表模型。可以说二维表和二维表之间的相互联系就构成了关系型数据库。

4.3.1数据库E-R图

为了更好地保存中小型企业财务管理系统产生的数据,就需要在数据库的设计阶段对E-R模型进行建立,以及完成数据库中的表结构的创建。之所以要单独完成数据库的设计,主要有以下几点原因:

第一点:防止代码冗余;

第二点:防止占用过多内存;

第三点:提升数据库的整体性能,方便程序开发以及数据更新;

第四点:保证数据的完整性;

本部分内容主要在于建立本系统的E-R模型,需要先收集数据,然后根据数据库实现的思路,对用户的需求进行分析,这期间需要对实体,属性,还有关系进行标识,为绘制E-R模型做好充足准备。同时,在作图中,也要注意作图规范,注意每个符号的正确使用。

(1)设计的薪资实体,其具备的属性见下图。

图4.4 薪资实体属性图

(2)设计的管理员实体,其具备的属性见下图。

图4.5 管理员实体属性图

(3)设计的职工实体,其具备的属性见下图。

图4.6 职工实体属性图

(4)设计的资产实体,其具备的属性见下图。

图4.7 资产实体属性图

(5)设计的各实体间关系见下图。

图4.8 实体间关系E-R图

4.3.2 数据库表结构

为了设计出结构合理,性能优良的数据库,在设计数据库时,需要遵循三大范式:

第一范式:确保数据表当中的每列所代表的字段值都不能再进行分解了;

第二范式:在满足第一范式基础上,让数据表中每列与主键相关;

第三范式:在满足第二范式基础上,确保每列数据直接与主键相关,不是间接相关。

从上面的表述中可以看出,这三大范式,在等级上还是有区分的,最低等级的就数第一范式,最高等级的就是第三范式,趋于两者中间的是第二范式。总之,数据库设计按照这三大范式进行,可以简化设计过程,并且还会减少数据冗余,对于数据检索效率的提升也很有帮助。

表4. 1 经营信息表

字段类型默认注释
id (主键)int(11)主键
jingying_namevarchar(200)NULL标题
jingying_typesint(11)NULL经营类型
jingying_contentvarchar(200)NULL详情
jingying_moneyint(11)NULL金额
insert_timetimestampNULL添加时间
create_timetimestampNULL创建时间

表4.2 管理员信息表

字段类型默认注释
id (主键)bigint(20)主键
usernamevarchar(100)用户名
passwordvarchar(100)密码

表4. 3 薪资信息表

字段类型默认注释
id (主键)int(11)主键
yonghu_idint(11)NULL职工
monthvarchar(200)NULL月份
moneydecimal(10,4)NULL薪资
create_timetimestampNULL创建时间

表4. 4职工信息表

字段类型默认注释
id (主键)int(11)主键
usernamevarchar(200)NULL账户
passwordvarchar(200)NULL密码
namevarchar(200)NULL姓名
phonevarchar(200)NULL手机号
id_numbervarchar(200)NULL身份证号
sex_typesint(11)NULL性别
bumen_typesint(11)NULL部门
my_photovarchar(200)NULL照片
nationvarchar(200)NULL民族
politics_typesint(11)NULL政治面貌
birthplacevarchar(200)NULL籍贯
create_timetimestampNULL创建时间

表4.5 资产信息表

字段类型默认注释
id (主键)int(11)主键
zichan_namevarchar(200)NULL资产名字
zichan_typesint(11)NULL资产类型
zichan_contentvarchar(200)NULL资产详情
zichan_moneyint(11)NULL资产价值
create_timetimestampNULL创建时间

5 系统实现

在此部分内容中,主要通过系统功能的运行效果图展示前面设计的最终结果。系统实现对编制人员的技术能力有较高要求,因为需要他们使用编程的方式去实现系统设计的方案。

5.1 管理员功能实现

5.1.1 职工管理

管理员权限中的职工管理,其运行效果见下图。职工资料包括籍贯,民族,政治面貌,部门等信息,这些信息都需要管理员进行维护,比如修改,比如删除,新来的职工,管理员也需要登记其信息。

图5.1 职工管理页面

5.1.2 薪资管理

管理员权限中的薪资管理,其运行效果见下图。职工每月发放的薪资需要管理员登记和维护,管理员随时可以修改本页面的职工薪资数据。

图5.2 薪资管理页面

5.1.3 添加资产

管理员权限中的添加资产,其运行效果见下图。管理员不仅需要登记资产的名称,也需要上传跟资产相关的文件,并描述资产信息,最后通过新增按钮提交信息。

图5.3 添加资产页面

5.1.4 经营管理

管理员权限中的经营管理,其运行效果见下图。管理员根据经营类型,或者时间段查询经营信息,可以编辑,删除经营信息。

图5.4 经营管理页面

5.2 职工功能实现

5.2.1 薪资信息

职工权限中的薪资信息,其运行效果见下图。职工在本页面主要就是查看每月的薪资,可以根据月份查询薪资。

图5.5 薪资信息页面

5.2.2 经营信息

职工权限中的经营信息,其运行效果见下图。职工查看企业经营的收入与支出类型的详情和金额信息,根据经营类型或时间段查询企业经营信息。

图5.6 经营信息页面

5.2.3 资产信息

职工权限中的资产信息,其运行效果见下图。职工查看固定资产,流动资产等资产类型的资产价值。

图5.7 资产信息页面

系统

DictionaryServiceImpl.java
package com.service.impl;

import com.utils.StringUtil;
import org.springframework.stereotype.Service;
import java.lang.reflect.Field;
import java.util.*;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.transaction.annotation.Transactional;
import com.utils.PageUtils;
import com.utils.Query;
import org.springframework.web.context.ContextLoader;
import javax.servlet.ServletContext;

import com.dao.DictionaryDao;
import com.entity.DictionaryEntity;
import com.service.DictionaryService;
import com.entity.view.DictionaryView;

/**
 * 字典表 服务实现类
 * @author 
 * @since 2021-03-12
 */
@Service("dictionaryService")
@Transactional
public class DictionaryServiceImpl extends ServiceImpl<DictionaryDao, DictionaryEntity> implements DictionaryService {

    @Override
    public PageUtils queryPage(Map<String,Object> params) {
        if(params != null && (params.get("limit") == null || params.get("page") == null)){
            params.put("page","1");
            params.put("limit","10");
        }
        Page<DictionaryView> page =new Query<DictionaryView>(params).getPage();
        page.setRecords(baseMapper.selectListView(page,params));
        return new PageUtils(page);
    }

     /**
     * 赋值给字典表
     * @param obj view对象
     */
    public void dictionaryConvert(Object obj) {
        try {
            if (obj == null) return;
            //当前view和entity中的所有types的字段
            List<String> fieldNameList = new ArrayList<>();
            Class tempClass = obj.getClass();
            while (tempClass !=null) {
                Field[] declaredFields = tempClass.getDeclaredFields();
                for (Field f : declaredFields) {
                    f.setAccessible(true);
                    if (f.getType().getName().equals("java.lang.Integer") && f.getName().contains("Types")) {
                        fieldNameList.add(f.getName());
                    }
                }
                tempClass = tempClass.getSuperclass(); //得到父类,然后赋给自己
            }

            // 获取监听器中的字典表
            ServletContext servletContext = ContextLoader.getCurrentWebApplicationContext().getServletContext();
            Map<String, Map<Integer, String>> dictionaryMap= (Map<String, Map<Integer, String>>) servletContext.getAttribute("dictionaryMap");

            //通过Types的值给Value字段赋值
            for (String s : fieldNameList) {
                Field types = null;
                if(hasField(obj.getClass(),s)){
                    //判断view中有没有这个字段,有就通过反射取出字段
                    types= obj.getClass().getDeclaredField(s);//获取Types私有字段
                }else{
                    //本表中没有这个字段,说明它是父表中的字段,也就是entity中的字段,从entity中取值
                    types=obj.getClass().getSuperclass().getDeclaredField(s);
                }
                Field value = obj.getClass().getDeclaredField(s.replace("Types", "Value"));//获取value私有字段
                //设置权限
                types.setAccessible(true);
                value.setAccessible(true);

                //赋值
                if (StringUtil.isNotEmpty(String.valueOf(types.get(obj)))) { //types的值不为空
                    int i = Integer.parseInt(String.valueOf(types.get(obj)));//type
                    String s1 = s.replace("Types", "_types");
                    String s2 = dictionaryMap.get(s1).get(i);
                    value.set(obj, s2);
                } else {
                    new Exception("字典表赋值出现问题::::"+value.getName());
                    value.set(obj, "");
                }
            }
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 判断本实体有没有这个字段
     * @param c
     * @param fieldName
     * @return
     */
    public boolean hasField(Class c, String fieldName){
        Field[] fields = c.getDeclaredFields();

        for (Field f : fields) {
            if (fieldName.equals(f.getName())) {
                return true;

            }

        }

        return false;
    }

}

JingyingController.java
package com.controller;


import java.text.SimpleDateFormat;
import com.alibaba.fastjson.JSONObject;
import java.util.*;
import org.springframework.beans.BeanUtils;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.context.ContextLoader;
import javax.servlet.ServletContext;
import com.service.TokenService;
import com.utils.StringUtil;
import java.lang.reflect.InvocationTargetException;

import com.service.DictionaryService;
import org.apache.commons.lang3.StringUtils;
import com.annotation.IgnoreAuth;
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.JingyingEntity;

import com.service.JingyingService;
import com.entity.view.JingyingView;
import com.utils.PageUtils;
import com.utils.R;

/**
 * 经营
 * 后端接口
 * @author
 * @email
 * @date 2021-03-12
*/
@RestController
@Controller
@RequestMapping("/jingying")
public class JingyingController {
    private static final Logger logger = LoggerFactory.getLogger(JingyingController.class);

    @Autowired
    private JingyingService jingyingService;


    @Autowired
    private TokenService tokenService;
    @Autowired
    private DictionaryService dictionaryService;


    //级联表service


    /**
    * 后端列表
    */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params, HttpServletRequest request){
        logger.debug("page方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));
        String role = String.valueOf(request.getSession().getAttribute("role"));
        if(StringUtil.isNotEmpty(role) && "用户".equals(role)){
            params.put("yonghuId",request.getSession().getAttribute("userId"));
        }
        PageUtils page = jingyingService.queryPage(params);

        //字典表数据转换
        List<JingyingView> list =(List<JingyingView>)page.getList();
        for(JingyingView c:list){
            //修改对应字典表字段
            dictionaryService.dictionaryConvert(c);
        }
        return R.ok().put("data", page);
    }
    /**
    * 后端详情
    */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id){
        logger.debug("info方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
        JingyingEntity jingying = jingyingService.selectById(id);
        if(jingying !=null){
            //entity转view
            JingyingView view = new JingyingView();
            BeanUtils.copyProperties( jingying , view );//把实体数据重构到view中

            //修改对应字典表字段
            dictionaryService.dictionaryConvert(view);
            return R.ok().put("data", view);
        }else {
            return R.error(511,"查不到数据");
        }

    }

    /**
    * 后端保存
    */
    @RequestMapping("/save")
    public R save(@RequestBody JingyingEntity jingying, HttpServletRequest request){
        logger.debug("save方法:,,Controller:{},,jingying:{}",this.getClass().getName(),jingying.toString());
        Wrapper<JingyingEntity> queryWrapper = new EntityWrapper<JingyingEntity>()
            .eq("jingying_name", jingying.getJingyingName())
            .eq("jingying_types", jingying.getJingyingTypes())
            .eq("jingying_content", jingying.getJingyingContent())
            .eq("jingying_money", jingying.getJingyingMoney())
            ;
        logger.info("sql语句:"+queryWrapper.getSqlSegment());
        JingyingEntity jingyingEntity = jingyingService.selectOne(queryWrapper);
        if(jingyingEntity==null){
            jingying.setInsertTime(new Date());
            jingying.setCreateTime(new Date());
        //  String role = String.valueOf(request.getSession().getAttribute("role"));
        //  if("".equals(role)){
        //      jingying.set
        //  }
            jingyingService.insert(jingying);
            return R.ok();
        }else {
            return R.error(511,"表中有相同数据");
        }
    }

    /**
    * 修改
    */
    @RequestMapping("/update")
    public R update(@RequestBody JingyingEntity jingying, HttpServletRequest request){
        logger.debug("update方法:,,Controller:{},,jingying:{}",this.getClass().getName(),jingying.toString());
        //根据字段查询是否有相同数据
        Wrapper<JingyingEntity> queryWrapper = new EntityWrapper<JingyingEntity>()
            .notIn("id",jingying.getId())
            .eq("jingying_name", jingying.getJingyingName())
            .eq("jingying_types", jingying.getJingyingTypes())
            .eq("jingying_content", jingying.getJingyingContent())
            .eq("jingying_money", jingying.getJingyingMoney())
            ;
        logger.info("sql语句:"+queryWrapper.getSqlSegment());
        JingyingEntity jingyingEntity = jingyingService.selectOne(queryWrapper);
        if(jingyingEntity==null){
            //  String role = String.valueOf(request.getSession().getAttribute("role"));
            //  if("".equals(role)){
            //      jingying.set
            //  }
            jingyingService.updateById(jingying);//根据id更新
            return R.ok();
        }else {
            return R.error(511,"表中有相同数据");
        }
    }


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


}


YonghuServiceImpl.java
package com.service.impl;

import com.utils.StringUtil;
import org.springframework.stereotype.Service;
import java.lang.reflect.Field;
import java.util.*;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.transaction.annotation.Transactional;
import com.utils.PageUtils;
import com.utils.Query;
import org.springframework.web.context.ContextLoader;
import javax.servlet.ServletContext;

import com.dao.YonghuDao;
import com.entity.YonghuEntity;
import com.service.YonghuService;
import com.entity.view.YonghuView;

/**
 * 职工 服务实现类
 * @author 
 * @since 2021-03-12
 */
@Service("yonghuService")
@Transactional
public class YonghuServiceImpl extends ServiceImpl<YonghuDao, YonghuEntity> implements YonghuService {

    @Override
    public PageUtils queryPage(Map<String,Object> params) {
        if(params != null && (params.get("limit") == null || params.get("page") == null)){
            params.put("page","1");
            params.put("limit","10");
        }
        Page<YonghuView> page =new Query<YonghuView>(params).getPage();
        page.setRecords(baseMapper.selectListView(page,params));
        return new PageUtils(page);
    }


}

polarChart.js
  var chartData = [
            {
                value : Math.random(),
                color: "#6ADAE4"
            },
            {
                value : Math.random(),
                color: "#F89406"
            },
            {
                value : Math.random(),
                color: "#FF0064"
            },
            {
                value : Math.random(),
                color: "#3498DB"
            },
            {
                value : Math.random(),
                color: "#1ABC9C"
            },
            {
                value : Math.random(),
                color: "#E74C3C"
            }
        ];
    var myPolarArea = new Chart(document.getElementById("canvas3").getContext("2d")).PolarArea(chartData);

声明

本博客适用于广泛的学术和教育用途,包括但不限于个人学习、开发设计,产品设计。仅供学习参考,旨在为读者提供深入理解和学术研究的材料。

1.1项目来源 自从世界上第一台计算机诞生以后,信息技术就以令人瞠目结舌的速度深入到全球各地和各个领域。它对全球的影响是全方位的,强大的力量改变着人类的生活。我国财务管理软件经过多年的发展,正在逐步走向成熟,初步形成了一定的产业规模。无论是从厂商还是从市场方面看,进入 21 世纪,我国财务管理软件产业将迎来一个更加辉煌的高速发展期。随着经济全球化的趋势,财务管理软件开发与应用的成败无疑将直接影响企业经营决策。 对小型企业来说,财务管理是一项日常性的工作,企业的各级管理人员需要及时了解、掌握企业的运营状况,以便心有数,合理安排企业的经营策略,因而财务管理是现代小型企业的一项非常重要的工作。而如今相当部分小型企业,由于日常资金的流动十分频繁,依靠手工处理来记录或统计各种凭证数据,既难做到及时性,也难保证数据的准确性,因而有必要建立一个计算机财务管理信息系统。 1.2任务目标 “小型企业财务管理信息系统”是自行调研、设计、开发并成功实施,为提高财务业务处理的准确性、时效性,从而为财务管理活动提供准确、及时的信息的管理信息系统。系统要求界面设计人性化,便于财务人员的操作。要求系统维护性强。对相关子系统不同的硬件平台、操作系统、实现技术、数据库数据格式等要求要有兼容性,能进行统一用户管理与权限集管理,并且提供详细的系统技术手册。开发良好的扩展性,为以后进一步提升系统的服务层次提供相应的平台。总的来说,本系统的总体目标就是便捷、安全、美观、实用、可扩展性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值