package com.yhy.module.core.dal.dataobject.quota;

import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.yhy.module.core.dal.typehandler.PostgreSQLJsonbTypeHandler;
import java.math.BigDecimal;
import java.util.Map;
import lombok.Data;
import lombok.EqualsAndHashCode;

/**
 * 统一取费子目工料机 DO
 * 
 * 关联到子定额（node_type='child'）下的工料机组成
 * 结构与 QuotaResourceDO 一致，通过 resourceItemId 关联工料机基础数据
 */
@TableName(value = "yhy_quota_unified_fee_resource", autoResultMap = true)
@Data
@EqualsAndHashCode(callSuper = true)
public class QuotaUnifiedFeeResourceDO extends BaseDO {

    /**
     * 主键ID
     */
    @TableId(type = IdType.ASSIGN_ID)
    private Long id;

    /**
     * 租户ID
     */
    private Long tenantId;

    /**
     * 关联子定额ID（yhy_quota_unified_fee_setting）
     */
    private Long unifiedFeeSettingId;

    /**
     * 关联工料机ID（yhy_resource_item）
     */
    private Long resourceItemId;

    /**
     * 定额消耗量
     */
    private BigDecimal dosage;

    /**
     * 调整消耗量
     * 
     * 应用调整设置后的消耗量
     * 当此字段非空且非0时，用此字段代替 dosage 计算合价
     */
    private BigDecimal adjustedDosage;

    /**
     * 扩展属性（JSONB）
     */
    @TableField(typeHandler = PostgreSQLJsonbTypeHandler.class)
    private Map<String, Object> attributes;

    /**
     * 排序字段
     */
    private Integer sortOrder;

    // ==================== 便捷方法 ====================

    /**
     * 获取有效消耗量（用于计算合价）
     * 
     * 如果 adjustedDosage 非空且非0，返回 adjustedDosage
     * 否则返回 dosage
     */
    public BigDecimal getEffectiveDosage() {
        if (adjustedDosage != null && adjustedDosage.compareTo(BigDecimal.ZERO) != 0) {
            return adjustedDosage;
        }
        return dosage;
    }
}
