`
rikugun
  • 浏览: 345267 次
  • 性别: Icon_minigender_1
  • 来自: 南宁
社区版块
存档分类
最新评论

话费整理tools with GOG 施工中

阅读更多
我MM在财务部里头作小会计,每个月回有一张CT发过来的话费清单.每个号码一行.
公司里头有很多个部门,每个部门还有若干电话,有些还有宽带的费用.
现在要做的是将CT的话费单按部门分类好,然后统计出每个部门每个月的话费,网路费.
原来这个工具是用cakephp做的,现在改用GOG 试试

更新:
1-19: 输出界面用的是jqgrid,补一个图




需要Excel的 java库 :JXL

3个域模型
Dept:部门
Phone:电话
Bill:单行的话费

class Dept {
    String name
    static hasMany = [phones:Phone]
}


class Phone {
    String name
    String number
    String type
    static belongsTo = [dept:Dept]
    static hasMany = [bills:Bill]
}


class Bill {
    float price
    Date date = new Date()
    static belongsTo = [phone:Phone]
}


处理excel的服务
class ExcelService {

    boolean transactional = true
    def errors =[]
    def save(FileInputStream file) throws RuntimeException{
        //数据起始行号
        def start_row = 5
        //电话号码列
        def phone_offset=0
        //默认话费列
        def total_offset = 16
        //取数据列的列名 实收,实际要入库的帐单列; 业务号码,帐单上面的号码列名. 用来确认列的序列(有时候电信给的这个帐单列数会有变动,有时17列,有时候又18列)
        static final String TOTAL_COL_NAME = '实收'
        static final String NUMBER_COL_NAME = '业务号码'
       //记录行错误
        def out_errors = []
        //获取第一个sheet
        Workbook workbook = Workbook.getWorkbook(file)
        Sheet sheet = workbook.getSheet(0)
        //获取日期,精确到月即可,在A3格中.表格数据:计费帐期:2008/12/01--2008/12/31
        def date_m = sheet.getCell("A3").getContents()=~ /:(\d{4}\/\d{2}\/\d{2})--/
        def date =(new SimpleDateFormat('yyyy/MM/dd').parse(date_m[0][1]))
        //获取业务号码,实收栏位置
        sheet.getRow(4).each{
            if(it.getContents()==NUMBER_COL_NAME){
                phone_offset = it.getColumn()
            }
            if(it.getContents()==TOTAL_COL_NAME){
                total_offset = it.getColumn()
                return
            }
        }
        //遍历所有行
        (start_row..<sheet.getRows()).each{
            println it
            def cells = sheet.getRow(it);
            def number = cells[phone_offset].getContents()
            def price =Float.parseFloat(cells[total_offset].getContents())
            def  phone= Phone.findByNumber(number)
            println number
            if(phone){
                println phone.name+"[${it}]:number=${number},price=${price}"
                phone.addToBills(price:price,date:date).save()
            }else{
                this.errors.add("行[${it}]:没有找到对应的号码[${number}]")
            }
        }
        if(this.errors.size()){
            throw new RuntimeException("多行没有找到对应的号码!")
        }
    }
}
  • 大小: 50.9 KB
分享到:
评论

相关推荐

    minigalaxy:适用于Linux的简单GOG客户端

    迷你银河系 适用于Linux的简单GOG...启用在游戏中显示FPS 使用系统的Scummvm或Dosbox安装 使用Wine安装Windows游戏 支持的语言 当前,Minigalaxy可以用以下语言显示: 巴西葡萄牙语 英语 荷兰语 法文 德语 挪威语B

    cleargog:从开始菜单中清除不需要的GOG Galaxy游戏快捷方式

    ClearGOG是一个简单的工具,可以从开始菜单中删除GOG游戏。 GOG Galaxy默认情况下会在您的“开始”菜单中放置快捷方式,并且无法禁用此功能。 此工具用于清除GOG Galaxy在其中放置的不需要的游戏快捷方式的开始菜单...

    GodotGoG:GODO引擎的GOG模块

    戈多 GODO引擎的GOG模块 适用于Windows和Mac平台的Godot游戏引擎(版本3.x)的GOG API。 目前,GOG api不支持Linux,但... 从Galaxy SDK将“库”和“包含”文件夹复制到godotgog / sdk文件夹中。 现在,将godotgog目录

    bid0-lid0-steam游戏管家_steambdth01_1.0.0.1487@1prw2r@gog.exe

    bid0-lid0-steam游戏管家_steambdth01_1.0.0.1487@1prw2r@gog.exe

    pie-galaxy:类似于RetroPie的类似于GOG Galaxy的客户端

    从您的GOG库中列出所有游戏及其说明 从GOG Connect获得可用的认领游戏 安装游戏(下面的候选。) 使用下载并进行GOG Connect 使用提取游戏 兼容性 DOSBox游戏 ScummVM游戏 ResidualVM游戏从猴岛逃生 Amiga游戏可能...

    GOG-Galaxy-Export-Script:从 GOG Galaxy 导出您的游戏列表

    如果您想在不同的工具中使用 CSV,例如,您可以默认使用-a参数来导出所有内容。 当不同的语言环境需要不同的 CSV 分隔符(例如意大利语)时,您可以手动指定要使用的字符 ( -D &lt;character&gt; )。 此外,您可以手动...

    gog-galaxy-itch.io:使用itch的v2 API将itch.io连接到GOG Galaxy 2.0的集成

    gog-galaxy-itch.io itch.io的集成 很大程度上基于和 请通过发布页面使用下载,因为存储库本身不包含任何依赖项。 请注意,Itch上的许多游戏未在IGDB中列出,因此将显示为“未知游戏”。 您可以通过在上添加它们来...

    galaxy-integration-humblebundle:与GOG Galaxy 2.0的Humble Bundle集成

    集成GOG Galaxy 2.0。 特征 图书馆: 从HumbleBundle免费下载DRM 第三方游戏键 谦卑的游戏 安装:通过webbrowser轻松下载 已安装游戏检测: 扫描Windows注册表(仅适用于可以通过“ Control Panel\Programs\...

    GOG_Galaxy_2.0.exe.cab

    GOG_Galaxy_2.0.exe.cab

    galaxy-integration-osu:集成GOG Galaxy 2.0

    当前显示为“ Newegg”,因为Galaxy API中没有osu id安装从和upack下载资产osu_v{}.zip到: Windows: %localappdata%\GOG.com\Galaxy\plugins\installed MacOS: ~/Library/Application Support/GOG....

    GOG:政府申诉专员管理-GOG

    您可以通过我们的Docker脚本在您的环境中试用GOG系统。 GOG Docker项目为您提供了系统的功能映像,该映像将由Docker容器管理器进行组装。 如果愿意,可以通过执行以下步骤来手动设置GOG系统开发环境: 系统架构 访问...

    gog-galaxy-wine

    GOG星系 这是GOG Galaxy的快照, “ GOG.com的游戏库。无DRM游戏”。... 某些游戏可能需要您在终端中运行snap connect gog-galaxy-wine:hardware-observe和/或snap connect gog-galaxy-wine:process-c

    sigchk:验证 GOG 设置完整性/真实性-开源

    签名检查 检查 GOG 游戏和好东西的完整性。 文件类型:7Z、APK、AVI、BIN、BR、BZ2、DEB、EXE、GZ、JPG、MKV、MP4、PDF、PNG、RAR、XZ、ZIP、ZST。 用法 sigchk [OPTION]... [FILE]... 选项 --dry-run 仅查找不可...

    gog-dl:从GOG下载媒体

    GOG下载器 从链接保存GOG媒体。 用法 gog-dl [选项] ... [URL] ... 选项 -b [ NAME ]将此标签用于存档 -o [ DIR ]将档案或媒体移至 -w [ DIR ]仅在此目录中工作 -i,-img仅下载图像 -n,-no-ytdl不要使用YouTube-DL...

    gog-violet:Gog Galaxy 2.0 WIP的紫色主题

    0,关闭Gog Galaxy 2.0 1,确保在设置中激活了Dark(黑暗)主题,否则它将无法正常工作。 2,将findFriendsWindow.css放在此路径C:\ Program Files(x86)\ GOG Galaxy \ web \ styles \ app \ findFriendsWindow...

    gogdb:收集有关GOG游戏数据的网站

    GOG数据库收集GOG游戏数据的网站。部署说明命令是否以$或#开头,取决于它们可以作为普通用户运行还是必须作为root用户运行。 它们特定于Debian / Ubuntu,Apache2和uWSGI。 如果要使用其他Web或应用程序服务器,请...

    InsomniaScraper:GOG.com 双重失眠交易刮板

    失眠刮板 GOG.com 双重失眠交易刮板 GOG.com 2015 年 3 月 Double Insomnia 促销活动的新优惠提醒 敬请关注《荒原》和《魔石传说 2》的优惠! 用法: npm start

    gog-russian-prices:Web应用程序,您可以在GOG.com上查看西班牙语和俄语之间的价格差异

    GOG俄罗斯价格一个WebApp,您可以在西班牙和俄罗斯地区的GOG平台上查看给定游戏的价格,因此您可以比较价格差异并选择在何处购买游戏。它是如何工作的?使用GitHub动作和cron作业,它可以获取西班牙和俄罗斯地区所有...

    galaxy2steam:自动添加和更新 GOG Galaxy 安装的游戏作为 Steam 快捷方式

    Galaxy2steam - 自动添加和更新 GOG Galaxy 安装的游戏作为 Steam 快捷方式 什么? 随着 GOG Galaxy 的发布,现在可以轻松跟踪 GOG 游戏安装。 此实用程序使用该信息来生成和/或更新 Steam 用户的快捷方式.vdf 文件...

    awesome-gog-galaxy:GOG Galaxy 2.0集成和即将推出的功能的列表

    很棒的GOG星系 ... 在积压中/进行中 聊天列表和好友列表( ) DLC管理( ) 秘密成就( ) 将被考虑 定制平台( ) 游戏语言管理( ) 安装与调试 整合位置 Windows: %LOCALAPPDATA%\GOG.com\Galaxy\

Global site tag (gtag.js) - Google Analytics