package cn.iocoder.yudao.module.system.dal.dataobject.biz;

import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;

import java.time.LocalDate;
import java.util.*;
import java.math.BigDecimal;

import com.baomidou.mybatisplus.annotation.*;

import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY;

/**
 * 长者账单明细 DO
 *
 * @author 系统管理员
 */
@TableName("elderly_expense_order_item")
@Data
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ExpenseOrderItemDO {

    /**
     * 账单明细ID
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    /**
     * 账单ID
     */
    private Long expenseOrderId;
    /**
     * 费用项来源ID
     */
    private Long sourceExpenseItemId;
    /**
     * 费用项来源,长者费项或者日常费用
     */
    private String expenseSource;
    /**
     * 费项分类名称
     */
    private String itemCategoryName;
    /**
     * 费项名称
     */
    private String itemName;
    /**
     * 原价
     */
    private BigDecimal price;
    /**
     * 实际价格
     */
    private BigDecimal actualPrice;
    /**
     * 单项总金额(应收总额)
     */
    private BigDecimal totalAmount;
    /**
     * 取整金额，四舍五入
     */
    private BigDecimal roundAmount;
    /**
     * 金额（四舍五入保留两位小数）
     */
    private BigDecimal roundTwoDecimalAmount;
    /**
     * 已缴金额
     */
    private BigDecimal payAmount;
    /**
     * 数量
     */
    private Integer count;
    /**
     * 支付状态，0: 未缴费 1：已缴费 2:部分缴费
     */
    private Integer payStatus;
    /**
     * 支付时间
     */
    private Date payTime;
    /**
     * 支付账单ID
     */
    private Long payOrderId;
    /**
     * 创建时间
     */
    private Date createdTime;
    /**
     * 创建人
     */
    private String createdBy;
    /**
     * 费用具体类型，1：床位费，2：护理费，3：膳食费，7：服务费，8：预约床位定金等
     */
    private Integer type;

    /**
     * 是否显示，默认显示，true:显示 false：隐藏
     */
    private Boolean isShow;


    private Long tenantId;



    /** ==================扩展字段===================**/

    @TableField(exist = false)
    @Schema(description = "是否是月度费用，0:否 1：是")
    private Integer isMonthlyExpense;
    /**
     * 是否是一次性费用(其他费用)
     */
    @TableField(exist = false)
    @Schema(description = "是否是一次性费用，0:否 1：是")
    private Integer isOneTimeFee;
    /**
     * 是否是押金及预备金
     */
    @TableField(exist = false)
    @Schema(description = "是否是押金及预备金，0:否 1：是")
    private Integer isDeposit;

    @TableField(exist = false)
    @Schema(description = "费用来源类型,1:日常 2：变更 3：外出")
    private Integer dailyExpenseType;

    @TableField(exist = false)
    @Schema(description = "是否分期付款，0：否  1：是")
    private Integer isHirePurchase;

    @TableField(exist = false)
    @Schema(description = "是否赠送，0：否  1：是")
    private Integer isFreeGift;

    @Schema(description = "描述")
    private String description;

    @Schema(description = "开始日期")
    @JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY)
    private LocalDate startDate;

    @Schema(description = "结束日期")
    @JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY)
    private LocalDate endDate;

    @Schema(description = "合同id")
    private Long contractId;

    @Schema(description = "")
    @TableField(exist = false)
    private Long itemId;

}