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

import com.boco.nbd.framework.common.ResponseMessage2;
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.bo.SapStatisticsBO;
import com.boco.nbd.wios.flow.enums.FlowNodeEnum;
import com.boco.nbd.wios.flow.service.IOrderService;
import com.boco.nbd.wios.flow.util.ProcessUtil;
import com.boco.nbd.wios.log.entity.po.InterfaceMonitorPO;
import com.boco.nbd.wios.log.enums.InterfaceMonitorEnum;
import com.boco.nbd.wios.manage.service.impl.OrderService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;

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

    @Autowired
    protected IOrderService orderService;

    @Autowired
    private OrderService oldOrderService;

    /**
     * 预处理(业务数据调整)
     *
     * @param request
     */
    @Override
    protected void preProcess(SubmitFlowRequest request) {
        LocalSubmitFlowBO bo = (LocalSubmitFlowBO) request;
        if (SubmitTypeEnum.TaskFlow.equals(bo.getSubmitType())) {
            StringBuffer builder = new StringBuffer();
            boolean refuseFlag = ProcessUtil.compare(bo.getBusiness().getWhether(), 0);
            builder.append(FlowNodeEnum.NODE_107.getValue() + ":");
            builder.append(refuseFlag ? "审核不通过;" : "审核通过;");
            if (refuseFlag) {
                Integer failNum = bo.getOldBusiness().getInstallCheckFailNum();
                if (failNum == null) {
                    failNum = 0;
                }
                bo.getBusiness().setInstallCheckFailNum(failNum + 1);
                builder.append(System.lineSeparator());
                builder.append(bo.getBusiness().getInstallFinishFailReason());
                bo.setNextNodeEnum(FlowNodeEnum.NODE_111);
            } else {
                bo.getBusiness().setInstallApproveTime(new Date());
                //移桩订单直接归档,个人客户不上传开票系统
                boolean shiftOrder = (bo.getOldBusiness().getType() == 1);
                FlowNodeEnum nextNodeEnum = shiftOrder ? FlowNodeEnum.NODE_113 : FlowNodeEnum.NODE_END;
                //modify2022-10-09 个人客户也上传开票系统
//                if (shiftOrder && WiosConstant.PERSONAL_OEM_CODE.equals(po.getOemCode())) {
//                    nextNodeEnum = FlowNodeEnum.NODE_114;
//                }
                bo.setNextNodeEnum(nextNodeEnum);
            }
            bo.setCommentMsg(builder.toString());
        }
    }

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

    }

    /**
     * 后续处理
     *
     * @param request
     */
    @Override
    protected void postProcess(SubmitFlowRequest request) {
        LocalSubmitFlowBO bo = (LocalSubmitFlowBO) request;
        if (!ProcessUtil.compare(bo.getBusiness().getWhether(), 0)) {
            //调用Sap接口
            try {
                ResponseMessage2<SapStatisticsBO> response = oldOrderService.pushOrder(request.getWorkId());
                SapStatisticsBO sapStatisticsBO = response.getData();
                if (sapStatisticsBO != null) {
                    InterfaceMonitorPO interfaceMonitorPO = sapStatisticsBO.create(InterfaceMonitorEnum.Evaluation_InstallationAuditSap);
                    orderService.addMonitorLog(interfaceMonitorPO);
                }
            } catch (Exception ex) {
                //modify 2022-10-15 不抛出异常
                log.error(request.getWorkId() + " sap订单状态推送失败:" + ex.getMessage());
                //throw new FlowException(request.getWorkId() + " sap订单状态推送失败:" + ex.getMessage());
            }
        }
    }
}