公司消费一卡通“变法”记

一卡通在每家公司都存在,不仅含考勤机,还会有门禁,订餐,食堂消费等。我们公司采用的是厦门舒特科技的一卡通系统,前后用了好几年了。

在我之前,一卡通的功能主要启用了考勤和消费这两大模块。

1、考勤机是每个子公司都有相应设备,员工每天上下班刷卡,然后每个区域子公司的人事部考勤同事开始每周排队,一人分一天下载考勤数据。如果所有人一起下载考勤数据的话,就会因为数据量巨大而导致网络堵塞,说到底是公司的小型VPN太烂。

2、消费数据是由IT维护人员负责,每个月不定时IT维护人员会去下载所有区域的消费机的脱机数据,在月初的时候在一卡通系统里导出所有公司所有员工的消费数据,差不多会有十几万笔,再在Excel里做成汇总表,然后把这些数据发到公司一卡通的QQ群里供人事部同事下载人工导入HR系统。而月初的“补贴”也是由IT维护人员必做的不能忘记的一项工作。

然后,就以上这么点工作,敢接的,能接的人不多,坑实在是太多了,能说道的事情也太多了。

我认为公司一卡通系统有几个缺陷:

1、考勤数据都要由人事部轮流时间去人工下载再导入,而且经常因为账号卡死在里面而发生其他人没办法进去的情况。没办法实现自动下载和自动导入,增加了人工成本,IT 在其中的价值基本的不到体现;这其中主要的原因还是因为一卡通设备的问题。

2、消费机的数据整理全部都是IT来做,从管理上和安全要求来说,IT是不应该去直接接触数据的。耗费太多的时间和精力去整理这些数据,做着毫无价值和意义的事情。

自从今年3月份开始接手以来到现在,我逐渐摸通了一卡通系统的很多门道。既然之前信息化部门的头头造了这么多孽,我自然不能没有规划,一直想方设法把IT做的事情分到人事部门去做。

但这过程中我需要解决是写一个程序,让人事部可以自己自由查询消费数据,能够在程序上导出来汇总表。然后我再写一个可以自动发“补贴”的定时作业。

一、查询程序

因为对后台程序的数据库结构了解不多,但我还是懂得了消费表是哪张表,以及其他相关人员,设备等表。

于是我把查询消费表的功能写成了一个存储过程,通过传入时间和区域参数来查询消费记录。

还有汇总表的计算,因为要很长时间,所以我把计算功能做成一个存储过程,并用一张表存储计算结果:

然后,通过C#快速开发出一个查询程序出来,功能相对简单,但通过在Sql Server上做一个版本控制的存储过程,一旦我有修改程序,我就更新新的版本,之前的版本就自动失效,避免出现旧程序被使用的情况:

程序界面简单,如下:

二、设定自动排程计算每月消费汇总表

由于做成了存储过程,所以用排程去执行它就可以了!

三、自动发放补贴

PS:说到“补贴”,我就想笑。其实只是员工工资预支600元而已。

但做到自动发放补贴这里就比较艰难了。

因为发放补贴是要排除掉离职和非公司的人员,而且一卡通系统并不是执行标准的存储过程,而是把sql语句写到程序中了,所以根本不知道它是怎么执行的哪些表。

虽然我知道更新哪张表哪个字段可以实现发放补贴,但这样会有风险,因为我并不知道其中更多的逻辑。

打电话给舒特科技公司,告之说这个数据库规格书是要钱的!(顿时心中一万匹草泥马奔腾过,公司是跟舒特科技关系有多僵啊?)

后打算用Sql Server Profiler连接后台数据库,哪知道提示说:

我不知道公司信息管理部领导当初购买一卡通系统的时候到底是想的什么,居然还在用这么原始的系统存在!!后台数据库用的是sql server 2000,实在无力吐槽了!

于是我只好安装Sql Server 2008的Profiler工具,成功连接上系统,在里面做跟踪,经过大量的分析,总算知道了“发放补贴”这一逻辑:

里面使用大量的临时表,诸如这类语句:

IF OBJECT_ID(‘tempdb..#Subsidy‘) IS NULL

BEGIN

SELECT A.Person_ID,Person_No,Person_Name,Card_No,Dept_No, Dept_Name,Subsidy_Fund,Subsidy_Fund[PriTime_Fund], Subsidy_Fund[Use_Fund],Subsidy_Fund[Fact_Fund],Person_Name[Type_Name],   Birthday[Subsidy_Date],Person_No[Type_No],0[Data_Type],A.Person_ID[ID_KEY],Cast(0 as bit)[Is_OnlySubsidy]

INTO #Subsidy

FROM ST_Person A

LEFT JOIN ST_Department C ON C.Dept_ID=A.Dept_ID

LEFT JOIN ST_Card B ON B.Person_ID=A.Person_ID

WHERE 1<>1

END

ELSE

TRUNCATE TABLE #Subsidy

于是有了这些逻辑,接下来发放补贴的存储过程就好办多了:

此存储过程没有任何的参数传入,也自动过滤掉了不能发放补贴的所有部门!

设定排程工作,限定在每个月的1号凌晨跑,从此一劳永逸解决了我手工发放补贴的艰难动作!

一卡通的事情耗费了我不少的时间。主要是没有任何的数据库规格书,而且对很多的技术根本没法掌握得到。由此可以想到如果系统在立项和实施的时候,IT部门如果不介入或者专业度不够,很多文档如果没有提供,那未来要维护起来是多么的可怕,就是专门给后人挖坑和造虐的!想想现在的加密系统,不就是一个大坑吗?别提有多垃圾了!

时间: 2024-08-01 19:40:00

公司消费一卡通“变法”记的相关文章

KB奇遇记(3):IT现状

2015年8月3号,终于告别了过去来到了KB. 公司给安排的住房是一间套房里的小房间,小的简直连坐的地方都没有了,中间一个大床将房间隔了两边,显得特别狭小.由于是刚来,我也不好要求太多.但就这个小房间,我几乎住了快一年! 尔后上班,终于了解KB公司的糟糕的IT环境,简直难以想象:  1.垃圾HR系统: 这个HR系统是用的ASP.NET系统,没有提供源码,公司内部IT没有介入运维.每当人事部门有新需求的时候就会委托厂商远程连接到服务器上做相应的调整,每年都会缴纳好几万块钱的维护费用.而这HR系统只

PHP实现根据银行卡号判断银行

之前用手机支付宝转账的时候就发现了这一功能,输入卡号,自动识别银行并输出,之前觉得 哇!好神奇啊!最近,要写一个东西,正好需要采集银行卡和银行卡号信息,用select太麻烦,太多,费时费力还未必写的全,而且用户体验会很差,所以就想到了这个.网上找了一下资料,居然找到了,然后调整一下,就完成了. 附 参考网址:http://www.jb51.net/article/65178.htm PHP页面代码: <div> <div>银行卡号:<input id="card&q

根据银行卡账号获取所属银行php

bank.php <?php /** * * bank.php文件 * * User: Administrator * DateTime: 2014/12/31 10:01 */ header('Content-type:text/html;charset=utf-8'); require_once('bankList.php'); function bankInfo($card,$bankList) { $card_8 = substr($card, 0, 8); if (isset($ban

银行卡代码列表

<?php$bankList = [ '621098' => '邮储银行-绿卡通-借记卡', '622150' => '邮储银行-绿卡银联标准卡-借记卡', '622151' => '邮储银行-绿卡银联标准卡-借记卡', '622181' => '邮储银行-绿卡专用卡-借记卡', '622188' => '邮储银行-绿卡银联标准卡-借记卡', '955100' => '邮储银行-绿卡(银联卡)-借记卡', '621095' => '邮储银行-绿卡VIP卡-借

后互联网+时代来临按摩O2O洗牌加速

在很多人看来,互联网+才刚刚兴起:不过在刘旷看来,在很多传统行业领域,互联网+已经进入到了后时代.大家最熟悉的莫过于滴滴快的之间的疯狂烧钱大战,从开战到结合,也就是短短的2年多时间,就宣告了对整个互联网打车市场的垄断.而今天刘旷想跟大家探讨的按摩O2O,同样也在开始迎来一个后互联网+时代. 就在上个月,刘旷刚刚通过<按摩O2O,上门与到店的角逐>一文阐述了国内主要的几大按摩O2O模式.目前不管是上门还是到店,亦或是上门与到店并做,都已经开始呈现了少数几家独大的局面.按摩O2O经历了去年一年疯狂

会员管理系统单机版哪里有?

“千里之行,始于足下”任何企业都有一个从小到大的发展过程,为了满足各种个体创业者忠诚客户的需求,软件公司推出各种版本的会员管理系统.比如单机版.连锁版.商家联盟版.积分版等等.但对于小型的商家而言,成本是客户考虑的第一步,然后就是选择适合自己的功能. 对于大多数的个体创业者,都会选择会员管理系统的单机版,原因主要是成本低,功能简单实用,能够满足自身商铺的需求,但是没有详细的了解一个品牌的软件,后期遇到的困难时很棘手的,那到底会员管理系统单机版怎么样选择才好呢? 单机版软件指的是只能在一台电脑上使

VIEWGOOD(远古)中小学数字化校园建设需求

 随着数字化校园建设已成为教育信息化整体推动的重要组成部分,对于推进教育信息化,实现教育现代化具有重要的现实意义. <国家中长期教育改革和发展规划纲要(2010-2020年)>明确提出要加快教育信息基础设施建设,强调"加快终端设施普及,推进数字化校园建设,实现多种方式接入互联网".<教育信息化十年发展规划(2011-2020年)>把数字化校园建设列为重要工作,在学校信息化能力提升行动计划中,明确提出"制定中小学校和中等职业学校数字校园建设基本标准&

RFM模型的变形LRFMC模型与K-means算法的有机结合

应用场景: 可以应用在不同行业的客户分类管理上,比如航空公司,传统的RFM模型不再适用,通过RFM模型的变形LRFMC模型实现客户价值分析:基于消费者数据的精细化营销 应用价值: LRFMC模型构建之后使用了经典的聚类算法-K-Means算法来对客户进行细分,而不是传统的来与参考值对比进行手工分类,使得准确率和效率得到了大大提升,从而实现客户价值分析,进行精准的价格和服务设置: 经常买机票的朋友不知道有没有发现,机票的价格通常“阴晴不定”.3个月前是一个价格,2个月1个月1周前又是另一个价格:有

又是随笔,连随笔都越来越少了。。。

自从进了新公司,整个人都像被掏空了,好疲倦.一开始是对公司框架不熟,对MVC.Linq.EF不熟,对各种JS调用不熟,对视图的一些公司特有写法不熟.转正后,接手了一个旧项目的UI改版,说是改版,实际上相当于二次开发了,无数的坑,加上带实习生开发,要帮他们找Bug.好在我写好一个示例,他们能照着写.一个月前又接手了个新项目,催的比较急,这几个周末都在加班,晚上弄到半夜,不过新项目还是更好搞. 老婆前几天生了个女孩,看公司项目这么紧,也就没休假了.周六上午还去加班的,十点电话催我回来说是进产房了,十