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 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 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 billKeyName); /** * 票据信息 * 别名:code * @return */ Map 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 target, Map 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 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 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 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 boolean isAssignableFrom(Class clazz){ return getClass().isAssignableFrom(clazz); } /** * 费用类型 */ @Data @AllArgsConstructor @NoArgsConstructor class CostType{ // 费用类型编码 private String code; // 费用类型名称 private String name; } }