package com.wms_main.model.vo.wms;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.wms_main.model.po.TAppWork;
import com.wms_main.model.po.TAppWorkRecord;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.format.annotation.DateTimeFormat;

import java.time.LocalDate;
import java.time.LocalDateTime;

/**
 * 工作界面显示
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class KateWorkVo {
    /**
     * 主键
     */
    @JsonProperty("workIndex")
    private String workIndex;
    /**
     * 工单
     */
    @JsonProperty("workOrder")
    private String workOrder;
    /**
     * 计划开工日期
     */
    @JsonProperty("planStartDate")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDate planStartDate;
    /**
     * 成品号
     */
    @JsonProperty("productId")
    private String productId;
    /**
     * 单片号
     */
    @JsonProperty("singleProductId")
    private String singleProductId;
    /**
     * 料盒号
     */
    @JsonProperty("boxNo")
    private String boxNo;
    /**
     * 原材料号
     */
    @JsonProperty("goodsId")
    private String goodsId;
    /**
     * 需求数量
     */
    @JsonProperty("needNum")
    private Integer needNum;
    /**
     * 已分配数量
     */
    @JsonProperty("distributeNum")
    private Integer distributeNum;
    /**
     * 已完成数量
     */
    @JsonProperty("finishNum")
    private Integer finishNum;
    /**
     * 工作站台
     */
    @JsonProperty("workStand")
    private String workStand;
    /**
     * 工作状态
     * -1: 暂停/暂存
     */
    @JsonProperty("workStatus")
    private Integer workStatus;
    /**
     * 工作用户
     */
    @JsonProperty("workUser")
    private String workUser;
    /**
     * 创建时间
     */
    @JsonProperty("createTime")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;
    /**
     * 完成时间
     */
    @JsonProperty("finishTime")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime finishTime;
    /**
     * 缺料状态
     * 0：不缺料
     * 1: 缺料
     */
    @JsonProperty("lackStatus")
    private Integer lackStatus;
    /**
     * 是否是库外料
     */
    @JsonProperty("isOut")
    private Integer isOut;
    /**
     * 成品类型
     */
    @JsonProperty("productType")
    private Integer productType;

    /**
     * 将po对象转换为vo对象---未关闭工作
     * @param po po对象
     * @return vo
     */
    public static KateWorkVo ofWork(TAppWork po) {
        return new KateWorkVo(
                po.getWorkIndex(),
                po.getWorkOrder(),
                po.getPlanStartDate(),
                po.getProductId(),
                po.getSingleProductId(),
                po.getBoxNo(),
                po.getGoodsId(),
                po.getNeedNum(),
                po.getDistributeNum(),
                po.getFinishNum(),
                po.getWorkStand(),
                po.getWorkStatus(),
                po.getWorkUser(),
                po.getCreateTime(),
                po.getFinishTime(),
                po.getLackStatus(),
                po.getIsOut(),
                po.getProductType()
        );
    }

    /**
     * 将po对象转换为vo对象---已关闭工作
     * @param po po对象
     * @return vo
     */
    public static KateWorkVo ofWorkRecord(TAppWorkRecord po) {
        return new KateWorkVo(
                po.getWorkIndex(),
                po.getWorkOrder(),
                po.getPlanStartDate(),
                po.getProductId(),
                po.getSingleProductId(),
                po.getBoxNo(),
                po.getGoodsId(),
                po.getNeedNum(),
                po.getFinishNum(),
                po.getFinishNum(),
                po.getWorkStand(),
                po.getWorkStatus(),
                po.getWorkUser(),
                po.getCreateTime(),
                po.getFinishTime(),
                po.getLackStatus(),
                po.getIsOut(),
                po.getProductType()
        );
    }
}
