package com.changhong.epc.bean.tenant.bill;
|
|
import com.alibaba.fastjson.annotation.JSONField;
|
import com.changhong.epc.bean.count.MasterInfo;
|
import com.changhong.epc.constter.parsing.bill.ConstBill;
|
import lombok.AllArgsConstructor;
|
import lombok.Data;
|
import lombok.NoArgsConstructor;
|
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.math.NumberUtils;
|
|
import java.math.BigDecimal;
|
import java.util.*;
|
|
public interface IOCRBill extends ConstBill {
|
|
/**
|
* 获得票据金额
|
* @return
|
*/
|
Double getBillMoney();
|
|
/**
|
* 判断类型是否相等
|
* @param type
|
* @return
|
*/
|
Boolean getBillByType(String type);
|
|
/**
|
* 是否忽略
|
* @return
|
*/
|
default Boolean isIgnore(){
|
return false;
|
}
|
|
/**
|
* 获取汇率
|
* @return
|
*/
|
String getExchangeRate();
|
|
/**
|
* 添加汇率
|
* @param exchangeRate
|
*/
|
void setExchangeRate(String exchangeRate);
|
|
/**
|
* 获得票据类型
|
* @return
|
*/
|
String getBillType();
|
|
/**
|
* 获得票据主数据
|
* @return
|
*/
|
@JSONField(serialize=false)
|
default Set<MasterInfo> getMasterInfo(){
|
return new HashSet<>(Arrays.asList(
|
getBillMasterCode().entrySet().stream()
|
.map(masterInfo->new MasterInfo(masterInfo.getKey(), null, masterInfo.getValue()))
|
.toArray(MasterInfo[]::new)
|
));
|
}
|
|
/**
|
* 获得票据唯一code
|
* @return
|
*/
|
String getBillCode();
|
|
/**
|
* 获得票据值
|
* @param key
|
* @return
|
*/
|
default String getVal(String key){
|
return getBillKeyCode(key);
|
}
|
|
/**
|
* 票据信息
|
* 别名:名称
|
* @return
|
*/
|
Map<String, String> getBillKeyName();
|
default String getBillKeyName(String key){
|
return getBillKeyName() != null ? getBillKeyName().get(key) : null;
|
}
|
default void setBillKeyName(String key, String val){
|
if(getBillKeyName() != null){
|
getBillKeyName().put(key, val);
|
}
|
}
|
void setBillKeyName(Map<String, String> billKeyName);
|
|
|
|
/**
|
* 票据信息
|
* 别名:code
|
* @return
|
*/
|
Map<String, String> getBillKeyCode();
|
default String getBillKeyCode(String key){
|
return getBillKeyCode() != null ? getBillKeyCode().get(key) : null;
|
}
|
default void setBillKeyCode(String key, String val){
|
if(getBillKeyCode() != null){
|
getBillKeyCode().put(key, val);
|
}
|
}
|
|
default void meage(Map<String, String> target, Map<String, String> source){
|
source.entrySet()
|
.stream()
|
.forEach(s->{
|
if(Objects.equals(s.getKey(), AMOUNT)
|
|| Objects.equals(s.getKey(), R_EAMOUT)
|
|| Objects.equals(s.getKey(), R_VTAX)){
|
if(NumberUtils.isNumber(target.get(s.getKey())) && NumberUtils.isNumber(s.getValue())){
|
target.put(s.getKey()
|
,
|
new BigDecimal(target.get(s.getKey()))
|
.add(new BigDecimal(s.getValue()))
|
.toString()
|
);
|
return;
|
}
|
}
|
target.put(s.getKey(), s.getValue());
|
});
|
}
|
|
/**
|
* 票据信息
|
* 主数据:名称
|
* @return
|
*/
|
Map<String, String> getBillMasterName();
|
default String getBillMasterName(String masterCode){
|
return getBillMasterName() != null ? getBillMasterName().get(masterCode) : null;
|
}
|
default void setBillMasterName(String key, String val){
|
if(getBillMasterName() != null){
|
getBillMasterName().put(key, val);
|
}
|
}
|
|
/**
|
* 票据信息
|
* 主数据:code
|
* @return
|
*/
|
Map<String, String> getBillMasterCode();
|
default String getBillMasterCode(String masterCode){
|
return getBillMasterCode() != null ? getBillMasterCode().get(masterCode) : null;
|
}
|
default void setBillMasterCode(String key, String val){
|
if(getBillMasterCode() != null){
|
getBillMasterCode().put(key, val);
|
}
|
}
|
|
/**
|
* 获得票据原始信息
|
* @return
|
*/
|
@JSONField(serialize=false)
|
Map<String, String> getBillOriginalInfo();
|
|
/**
|
* 添加票据信息
|
* @param key
|
* @param val
|
*/
|
default void setBillInfo(String key, String val){
|
setBillKeyCode(key, val);
|
setBillKeyName(key, val);
|
// setBillMasterCode(key, val);
|
// setBillMasterName(key, val);
|
}
|
|
/**
|
* 获得票据金额
|
* @param key
|
* @return
|
*/
|
default double getMoney(String key) {
|
try {
|
String money = String.valueOf(getBillKeyName(key));
|
if(StringUtils.isNotBlank(money)){
|
return new BigDecimal(money).doubleValue();
|
}else{
|
return 0D;
|
}
|
} catch (NumberFormatException e) {
|
return 0D;
|
}
|
}
|
|
/**
|
* 修改费用类型
|
* @param costType
|
*/
|
void setCostType(CostType costType);
|
|
/**
|
* 获得费用类型
|
* @return
|
*/
|
CostType getCostType();
|
|
/**
|
* @Author WangYX
|
* @Description 合并票据
|
* @Date 2019/1/17 下午2:05
|
*/
|
void appendBill(IOCRBill bill);
|
|
/**
|
* @Author WangYX
|
* @Description
|
* @Date 2019/1/21 4:08 PM
|
*/
|
default <T> boolean isAssignableFrom(Class<T> clazz){
|
return getClass().isAssignableFrom(clazz);
|
}
|
|
/**
|
* 费用类型
|
*/
|
@Data
|
@AllArgsConstructor
|
@NoArgsConstructor
|
class CostType{
|
// 费用类型编码
|
private String code;
|
// 费用类型名称
|
private String name;
|
}
|
}
|