package com.boco.nbd.wios.flow.process;

import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import com.boco.nbd.cams.core.util.LambdaUtils;
import com.boco.nbd.framework.workflow.entity.SubmitFlowRequest;
import com.boco.nbd.framework.workflow.entity.SubmitTypeEnum;
import com.boco.nbd.framework.workflow.flow.AbstractFlow;
import com.boco.nbd.wios.flow.entity.bo.LocalSubmitFlowBO;
import com.boco.nbd.wios.flow.entity.po.OrderPO;
import com.boco.nbd.wios.flow.enums.FlowNodeEnum;
import com.boco.nbd.wios.flow.util.ProcessUtil;
import org.springframework.stereotype.Service;

import java.util.Date;

/**
 * @author:cao hai
 * @date:2022/6/30 17:04
 * @version:V1.0
 * @description:Process101
 * @modify:
 */
@Service("Process101")
public class Process101 extends AbstractFlow {

    /**
     * 预处理(业务数据调整)
     *
     * @param request
     */
    @Override
    protected void preProcess(SubmitFlowRequest request) {
        LocalSubmitFlowBO bo = (LocalSubmitFlowBO) request;
        if (SubmitTypeEnum.TaskFlow.equals(bo.getSubmitType())) {
            bo.setNextNodeEnum(FlowNodeEnum.NODE_102);
            bo.getBusiness().setConnectTime(new Date());
            bo.getBusiness().setConnectPerson(bo.getSubmitUserId());
            bo.getBusiness().setConnectPersonName(bo.getSubmitUserName());
            StringBuffer builder = new StringBuffer();
            boolean refuseFlag = ProcessUtil.compare(bo.getBusiness().getWhether(), 0);
            builder.append(refuseFlag ? "预约失败" : "预约成功");
            boolean addMsg = (refuseFlag && bo.getBusiness().getSurveyFollowTime() != null);
            addMsg = (addMsg || (!refuseFlag && bo.getBusiness().getSurveyReserveTime() != null));
            if (addMsg) {
                builder.append(";" + System.lineSeparator());
                builder.append(refuseFlag ?
                        LambdaUtils.getFieldApiModelProperty(OrderPO::getSurveyFollowTime) :
                        LambdaUtils.getFieldApiModelProperty(OrderPO::getSurveyReserveTime));
                builder.append(";" + System.lineSeparator());
                builder.append(refuseFlag ?
                        DateUtil.format(bo.getBusiness().getSurveyFollowTime(), DatePattern.NORM_DATETIME_PATTERN) :
                        DateUtil.format(bo.getBusiness().getSurveyReserveTime(), DatePattern.NORM_DATETIME_PATTERN));
            }
            bo.setCommentMsg(builder.toString());
            //不更新order中address
            bo.getBusiness().setAddress(null);
            //默认勘测
            bo.getBusinessSurvey().setType(1);
        }
    }

    /**
     * 验证参数
     *
     * @param request
     */
    @Override
    protected void verifyParam(SubmitFlowRequest request) {

    }

    /**
     * 后续处理
     *
     * @param request
     */
    @Override
    protected void postProcess(SubmitFlowRequest request) {

    }
}