zm
2020-05-18 a18bfacbf56b401f6e0fdae8710fbca4df8cff77
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
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();
 
    
    
}