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 blAll = new ArrayList<>(); protected Fieldsets fieldsets; /* * 一组票据信息 */ protected BillLevel billLevel; //@Override public void mappingJourney(BillInfo billInfo) { //sdfdsdsf List 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 返回类型 * @throws */ protected void setCityBill() { List 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(); }