package com.pusong.business.domain.vo;

import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.pusong.business.domain.PsContractInfo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.pusong.common.excel.annotation.ExcelDictFormat;
import com.pusong.common.excel.convert.ExcelDictConvert;
import com.pusong.common.translation.annotation.Translation;
import com.pusong.common.translation.constant.TransConstant;
import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.NotNull;
import lombok.Data;

import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
import java.util.List;


/**
 * 合同基本信息视图对象 ps_contract_info
 *
 * @author wls
 * @date 2024-07-29
 */
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = PsContractInfo.class)
public class PsContractInfoVo implements Serializable {

    @Serial
    private static final long serialVersionUID = 1L;


    /**
     * 合同编码
     */
    private String contractCode;

    /**
     * 合同名称
     */
    private String contractName;

    /**
     * 客户id
     */
    private Long customId;

    /**
     * 签约公司id
     */
    private Long companyId;

    /**
     * 合同主体
     */
    private String contractMain;
    /**
     * 合同主体
     */
    @Translation(type = TransConstant.DICT_TYPE_TO_LABEL,other = "contract_main",mapper="contractMain")
    private String contractMainName;

    /**
     * 合同总金额
     */
    private BigDecimal contractAmount;

    /**
     * 合同状态
     */
    private String contractStatus;



    /**
     * 合同状态审批失败描述
     */
    private String contractStatusDesc;
    /**
     * 合同状态名
     */
    @Translation(type = TransConstant.DICT_TYPE_TO_LABEL,other = "contract_status",mapper="contractStatus")
    private String contractStatusName;

    /**
     * 签约日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date applyDate;
    /**
     * 服务周期开始时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date startServiceDate;
    /**
     * 服务周期结束时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date endServiceDate;
    /**
     * 合同结束天数
     */
    private Integer endNum;
    /**
     * 办理期限
     */
    private Long timeLimit;

    /**
     * 客户是否到达现场
     */
    private String customScene;

    /**
     * 是否代账
     */
    private String isProxy;
    /**
     * 所属客户经理
     */
    private Long customManager;
    /**
     * 所属客户经理姓名
     */
    private String customManagerName;
    /**
     * 签约备注
     */
    private String signDesc;
    /**
     * 付款方式描述
     */
    private String payModeDesc;
    /**
     * 文件系统ossId
     */
    private Long pdfId;
    /**
     * 已付金额
     */
    private BigDecimal payMoney;
    /**
     * 退款金额
     */
    private BigDecimal returnMoney;

    /**
     * 未付金额
     */
    private BigDecimal residualMoney;
    /**
     * 回款周期（天）
     */
    private Integer period;
    /**
     * 服务类别名（多个是用逗号分隔）
     */
    @Translation(type = TransConstant.DICT_TYPE_TO_LABEL,other = "contract_type")
    private String businessTypeName;
    /**
     * 合同回传状态失败原因
     */
    private String rollBackFailDesc;
    /**
     * 合同回传状态0未回传1已回传
     * CommonStatusEnum
     */
    private String rollBackStatus;
    /**
     * 回传的合同文件ossid
     */
    private Long rollBackPdf;

    /**
     * 合同签章状态CommonStatusEnum
     */
    private String signStatus;
    /**
     * 合同签章失败原因
     */
    private String signFailDesc;
    /**
     * 是否老账新接
     */
    private String isOld;

    /**
     * 是否续费0新签 1续费
     */
    private String isDue;

    /**
     * 签约个人时联系人姓名
     */
    private String contactPersonName;

    /**
     * 签约个人时联系人手机号
     */
    private String contactPersonPhone;

    /**
     * 签约个人时联系人身份证号
     */
    private String contactPersonIdcard;

    /**
     * 签约公司信息（不会有服务类别）
     */
    private PsCompanyInfoVo psCompanyInfoVo;
    /**
     * 客户信息
     */
    private PsCustomInfoVo psCustomInfoVo;
    /**
     * 服务公司信息
     */
    private List<PsCompanyInfoVo> psCompanySerivceVo;

    /**
     * 汇款记录信息信息
     */
    private List<PsContractPayVo> contractPayVoList;
    /**
     * 是否作废 02审批中03是04否
     */
    private String isCancel;
    /**
     * 首次签约日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date firstApplyDate;

    /**
     * 合作年限
     */
    private String conTime;
    /**
     * 发票ossid
     */
    private String invoiceOssid;

    /**
     * 确认单
     */
    private Long confirmOssid;
    /**
     * 原合同编码（续费合同使用）
     */
    private String srcContractCode;
    /**
     * 续费日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date renewalDate;
    /**
     * 合同完成时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm")
    private Date finishDate;

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm")
    private Long createBy;


    /**
     * 服务项目里是否为 托管服务
     * @return
     */
    public boolean isTuoguanService(){
        for (PsCompanyInfoVo psCompanyInfoVo : this.getPsCompanySerivceVo()) {
            for (PsContractBusinessVo psContractBusinessVo : psCompanyInfoVo.getBusinessVoList()) {
                if (psContractBusinessVo.getBusinessType().equals("2")){//2托管服务，没找到枚举，暂时写死2
                    return true;
                }
            }
        }
        return false;
    }
}
