package com.changhong.epc.parsing.service.bill.group;
|
|
import com.alibaba.fastjson.JSON;
|
import com.changhong.epc.bean.form.Fieldsets;
|
import com.changhong.epc.bean.parsing.BillInfo;
|
import com.changhong.epc.bean.parsing.BillLevel;
|
import com.changhong.epc.bean.tenant.bill.OCRBillEntity;
|
import com.changhong.epc.bean.tenant.bill.OCRBillHeaderEntity;
|
import com.changhong.epc.parsing.service.bill.BillMappingJourney;
|
import com.changhong.epc.parsing.service.bill.impl.AbstractJourney;
|
import com.changhong.epc.parsing.service.loop.tools.impl.SortBill;
|
import com.changhong.epc.parsing.service.util.BillTool;
|
import com.iemsoft.framework.cloud.core.tools.JSONTool;
|
import lombok.extern.slf4j.Slf4j;
|
import org.apache.commons.collections4.CollectionUtils;
|
|
import javax.annotation.Resource;
|
import java.util.ArrayList;
|
import java.util.List;
|
|
@Slf4j
|
public abstract class AbstractGroupBill extends AbstractJourney implements BillMappingJourney{
|
|
@Resource
|
private BillValToCode billValToCode;
|
/**
|
* 所有票据分组
|
*/
|
protected List<BillLevel> blAll = new ArrayList<>();
|
|
protected Fieldsets fieldsets;
|
|
/*
|
* 一组票据信息
|
*/
|
protected BillLevel billLevel;
|
|
//@Override
|
public void mappingJourney(BillInfo billInfo) {
|
//sdfdsdsf
|
List<OCRBillHeaderEntity> bills = getOCRBillEntity().getBillDatas();
|
if(CollectionUtils.isEmpty(bills))
|
return;
|
|
/**
|
* 1.获得表单基本信息
|
*/
|
this.fieldsets = this.billValToCode.getFieldsets(getOCRBillEntity());
|
|
/**
|
* 2.获得城市间交通费
|
*/
|
setCityBill();
|
|
/**
|
* 3.循环其他票据
|
*/
|
for (OCRBillHeaderEntity ocrBillHeaderEntity : bills) {
|
/* 城市间交通费 */
|
if(BillTool.isJourneyBill(ocrBillHeaderEntity))
|
continue;
|
setBillGroup(ocrBillHeaderEntity);
|
}
|
log.debug("编辑行程信息");
|
/**
|
* 5.编辑行程信息,向子表单添加行程
|
*/
|
// System.err.println("子表单数据+"+JSONTool.toJson(billInfo));
|
editJourney(billInfo);
|
log.debug("---------------------------->行程信息:\n" + JSON.toJSONString(blAll));
|
|
}
|
|
/**
|
* 获得票据中的城市间交通费
|
* @Title: getCityBill
|
|
* @param @return 设定文件
|
* @return List<OCRBillHeaderEntity> 返回类型
|
* @throws
|
*/
|
protected void setCityBill() {
|
List<OCRBillHeaderEntity> allBill = getOCRBillEntity().getBillDatas();
|
log.debug("排序前票据信息:{}", JSONTool.toJson(allBill));
|
SortBill.sortBill(allBill);
|
log.debug("排序后票据信息:{}", JSONTool.toJson(allBill));
|
/**
|
* 2.迭代分组票据
|
*/
|
allBill.stream().forEach(ocrBillHeaderEntity -> {
|
if(!BillTool.isJourneyBill(ocrBillHeaderEntity)){
|
return;
|
}
|
billLevel = new BillLevel();
|
setBillInfo(ocrBillHeaderEntity);
|
billLevel.setBill(ocrBillHeaderEntity);
|
blAll.add(billLevel);
|
});
|
log.debug("过滤行程后:{}", JSONTool.toJson(blAll));
|
}
|
|
/**
|
* 对除 城市间交通费 其他说有票据进行分组处理
|
* @param bill
|
* @return
|
*/
|
protected boolean setBillGroup(OCRBillHeaderEntity bill) {
|
for (BillLevel eachBillLevel : blAll) {
|
if(BillGroupRule.billEquery(eachBillLevel, bill)){
|
eachBillLevel.setBill(bill);
|
return Boolean.TRUE;
|
}
|
}
|
return Boolean.FALSE;
|
}
|
|
/**
|
* @param billInfo
|
* 编辑行程
|
* @Title: editJourney
|
|
* @param
|
* @return void 返回类型
|
* @throws
|
*/
|
protected abstract void editJourney(BillInfo billInfo);
|
|
/**
|
* set票据信息
|
* @Title: setBillInfo
|
|
* @param @param bill 设定文件
|
* @return void 返回类型
|
* @throws
|
*/
|
protected void setBillInfo(OCRBillHeaderEntity bill) {
|
/**
|
* 1.添加一组票据时间
|
*/
|
/*
|
* 出发地
|
*/
|
billLevel.setBeginSit(bill.getVal(FROM));
|
/*
|
* 到达地
|
*/
|
billLevel.setEndSit(bill.getVal(TO));
|
/*
|
* 开始日期
|
*/
|
String formDate = bill.getVal(FROM_DATE);
|
billLevel.setBeginDate(formDate);
|
/*
|
* 开始时间
|
*/
|
String formTime = bill.getVal(FROM_TIME);
|
billLevel.setBeginTime(formTime);
|
/*
|
* 截止日期
|
*/
|
billLevel.setEndDate(bill.getVal(TO_DATE));
|
/*
|
* 缓存截止时间
|
*/
|
billLevel.setCacheEndDate(bill.getVal(TO_DATE));
|
/*
|
* 截止时间
|
*/
|
billLevel.setEndTime(bill.getVal(TO_TIME));
|
|
/**
|
* 2.修改上一组票据的结束时间
|
*/
|
if(CollectionUtils.isNotEmpty(blAll)){
|
BillLevel lastBl = blAll.get(blAll.size()-1);
|
lastBl.setEndDate(formDate);
|
lastBl.setEndTime(formTime);
|
}
|
}
|
|
/**
|
* 获得所有票据信息
|
* @Title: getBillInfo
|
|
* @param @return 设定文件
|
* @return OCRBillEntity 返回类型
|
* @throws
|
*/
|
protected abstract OCRBillEntity getOCRBillEntity();
|
|
/**
|
* 获得原始票据
|
* @Title: getOldOCRBillEntity
|
* @param @return 设定文件
|
* @return OCRBillEntity 返回类型
|
* @throws
|
*/
|
protected abstract OCRBillEntity getOldOCRBillEntity();
|
|
|
|
}
|