对账单拆分

* 拆分对账单
 * 
  * Created by albg on 2016/4/15.
  */
class SplitAccount {
  
  /**
   * inPath 源文件地址
   * outPath 输出文件地址
   * 规则:1.以字符串"商户交易明细"为一个子文件的开始标识
   *       2.规定前5行为文件头,原因是商户号在地五行
   *       3.文件名称为商户号+清算日期
   */
   def spilt(inPath:String,outPath:String) ={
     var isDeal:Boolean = false  //处理标识
     var lineNum:Int =0  //行计数器
     var isPrt:Boolean = false  //打印标识
     var topLines:List[String] = Nil  //记录文件头
     var writer:PrintWriter = null  //打印
     val read = Source.fromFile(inPath,"gbk")  //都入流,设定字符集为gbk
     read.getLines().foreach{ v =>//遍历整个文档
       if(v.trim.contains( "商户交易明细")){ isDeal = true ; isPrt =false }  //开闭
       if(isDeal){  //进入文件头处理
         lineNum += 1  //记录行数
         if(lineNum != 5) topLines = v::topLines  //记录文件头
         if(lineNum == 5){  //当文件头记完时,进行新文档的处理
           val merNo = v.replaceAll(" ","").substring(4,19)+v.replaceAll(" ","").substring(23,31)  //设定文件名称
           if(writer !=null)  writer.close()  //关闭上一个写入流
           writer = new PrintWriter(new File(outPath+merNo+".txt" ))  //新建一个写流
           isPrt =true  //开启打印
           topLines.reverse.foreach( a =>writer.println(a))  //将头部打印
           topLines = Nil  //将头文件记录清空
           isDeal =false  //关闭处理
           lineNum=0  //清零行数
         }
       }
       if(isPrt) writer.println(v)  //打印
     }
     if(writer !=null)  writer.close()  //关闭写入流
     read.close()  //关闭读入流
   }
 }

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是实现该需求的代码: 1. 表格中选择一条数据,并点击账单拆分按钮时,需要在方法中获取当前选择的账单信息,并打开拆分dialog,代码如下: ```html <el-table :data="tableData" @row-click="handleRowClick"> <!-- 省略表格列配置 --> </el-table> <el-button @click="openSplitDialog">账单拆分</el-button> ``` ```javascript export default { data() { return { tableData: [], // 表格数据 selectedBill: null, // 当前选择的账单信息 splitDialogVisible: false // 拆分dialog的可见状态 } }, methods: { handleRowClick(row) { // 保存当前选择的账单信息 this.selectedBill = row }, openSplitDialog() { // 打开拆分dialog this.splitDialogVisible = true } } } ``` 2. 拆分dialog的初始化需要展示账单信息,代码如下: ```html <el-dialog v-model="splitDialogVisible" title="账单拆分" width="50%"> <el-form :model="splitForm"> <el-form-item label="账单编号:">{{ selectedBill.id }}</el-form-item> <el-form-item label="账单金额:">{{ selectedBill.amount }}</el-form-item> <el-form-item label="计费周期:">{{ selectedBill.period }}</el-form-item> <el-form-item label="可拆分金额:">{{ splitForm.remainingAmount }}</el-form-item> <el-form-item label="计费开始时间:"> <el-date-picker v-model="splitForm.startDate" type="date"></el-date-picker> </el-form-item> <el-form-item label="计费结束时间:"> <el-date-picker v-model="splitForm.endDate" type="date"></el-date-picker> </el-form-item> </el-form> </el-dialog> ``` ```javascript export default { data() { return { selectedBill: null, // 当前选择的账单信息 splitForm: { // 拆分表单数据 startDate: null, // 计费开始时间 endDate: null, // 计费结束时间 amount: null, // 输入的金额 remainingAmount: null // 剩余可拆分金额 } } }, watch: { selectedBill(newVal) { // 当账单信息变化时,更新剩余可拆分金额 this.splitForm.remainingAmount = newVal.amount } } } ``` 3. 对于拆分多次的情况,可以使用一个数组来存储每次拆分后的账单信息,每次在el-table中展示该数组中的所有账单信息即可。代码如下: ```html <el-table :data="splitBills"> <!-- 省略表格列配置 --> </el-table> ``` ```javascript export default { data() { return { splitBills: [] // 拆分后的账单信息列表 } }, methods: { addSplitBill() { // 添加新的拆分账单 const newBill = { startDate: this.splitForm.startDate, endDate: this.splitForm.endDate, amount: this.splitForm.amount } this.splitBills.push(newBill) // 更新剩余可拆分金额 this.splitForm.remainingAmount -= newBill.amount }, removeSplitBill(index) { // 移除指定位置的拆分账单 const bill = this.splitBills[index] this.splitBills.splice(index, 1) // 更新剩余可拆分金额 this.splitForm.remainingAmount += bill.amount } } } ``` 4. 最后,在点击保存按钮时,将原始账单id和拆分后的账单信息列表一起发送给后端即可。代码如下: ```html <el-button type="primary" @click="submitSplitBills">保存</el-button> ``` ```javascript export default { methods: { submitSplitBills() { // 构造请求参数 const params = { id: this.selectedBill.id, bills: this.splitBills } // 发送请求到后端 axios.post('/api/split-bills', params).then(response => { // 处理接口返回值 // ... }) } } } ``` 希望以上代码对您有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值