package com.wms.entity.app.request;

import cn.hutool.core.bean.BeanUtil;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.wms.entity.table.PickTask;
import com.wms.entity.table.WorkFlow;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springframework.format.annotation.DateTimeFormat;

import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * 工作流查询类
 */
@EqualsAndHashCode(callSuper = true)
@Data
public class WorkFlowQuery extends PageQuery {
    /**
     * id
     */
    @JsonProperty("workFlowId")
    private String workFlowId;
    /**
     * 外键，工单表id
     */
    @JsonProperty("orderId")
    private String orderId;
    /**
     * 工作站台
     */
    @JsonProperty("workStation")
    private String workStation;
    /**
     * 工单
     */
    @JsonProperty("workOrder")
    private String workOrder;
    /**
     * 工位
     */
    @JsonProperty("workCenter")
    private String workCenter;
    /**
     * 物料编号
     */
    @JsonProperty("goodsId")
    private String goodsId;
    /**
     * 已拣货数量
     */
    @JsonProperty("pickedNum")
    private BigDecimal pickedNum;
    /**
     * 需求数量
     */
    @JsonProperty("needNum")
    private BigDecimal needNum;
    /**
     * 亮灯状态
     * 0：未亮灯
     * 1：已亮灯
     * 2：已拍灯
     */
    @JsonProperty("lightStatus")
    private Integer lightStatus;
    /**
     * 工作状态
     * 0：未开始
     * 1：正在做
     * 2：已完成
     */
    @JsonProperty("workStatus")
    private Integer workStatus;
    /**
     * 任务创建时间
     */
    @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;
    /**
     * 操作人员
     */
    @JsonProperty("opUser")
    private String opUser;

    /**
     * 转化为WorkFlowPo
     * @return 转化后的po
     */
    public WorkFlow toWorkFlowPo() {
        WorkFlow workFlow = BeanUtil.copyProperties(this, WorkFlow.class);
        if (this.getWorkStatus() == 2) {
            workFlow.setFinishTime(LocalDateTime.now());
            workFlow.setOpUser(this.getUserName());
        } else if (this.getWorkStatus() == 0) {
            workFlow.setFinishTime(LocalDateTime.of(1, 1 , 1, 0, 0, 0));
            workFlow.setOpUser("");
        }
        return workFlow;
    }
}
