package com.zcloud.flow.xgf.JiTuan;

import com.yomahub.liteflow.annotation.LiteflowComponent;
import com.yomahub.liteflow.core.NodeComponent;
import com.zcloud.entity.PageData;
import com.zcloud.flow.xgf.util.XgfFlowDto;
import com.zcloud.mapper.datasource.bus.CorpInfoMapper;
import com.zcloud.mapper.datasource.xgf.XgfFlowsMapper;
import com.zcloud.mapper.datasource.xgf.XgfUserMapper;
import com.zcloud.service.xgf.XgfUserService;
import com.zcloud.util.DateUtil;
import com.zcloud.util.Jurisdiction;
import org.apache.commons.lang3.StringUtils;

import javax.annotation.Resource;

@LiteflowComponent("JiTuanWeiTuoCharge")
public class JiTuanWeiTuoCharge extends NodeComponent {

    @Resource
    private XgfFlowsMapper xgfFlowsMapper;

    @Resource
    private XgfUserService xgfUserService;

    @Resource
    private XgfUserMapper xgfUserMapper;

    @Resource
    private CorpInfoMapper corpInfoMapper;

    @Override
    public boolean isAccess() {
        XgfFlowDto info = this.getRequestData();

        // 如果指针没有数据,赋值后自动结束
        if (StringUtils.isBlank(info.getIterator())) {
            PageData condition = new PageData();
            condition.put("FLOWS_ID", info.getFLOWS_ID());
            PageData flows = xgfFlowsMapper.findById(condition);
            info.setIterator("2");
            flows.put("APPOINT_TWO_CORP_TYPE", "0");
            flows.put("APPOINT_TWO_DEPARTMENT_ID", info.getAPPOINT_DEPARTMENT_ID());
            flows.put("APPOINT_TWO_DEPARTMENT_NAME", info.getAPPOINT_DEPARTMENT_NAME());
            flows.put("APPOINT_TWO_USER_ID", info.getAPPOINT_USER_ID());
            flows.put("APPOINT_TWO_USER_NAME", info.getAPPOINT_USER_NAME());
            flows.put("FLOWS_STEP", 2);
            xgfFlowsMapper.edit(flows);
            return false;
        }

        return "2".equals(info.getIterator());
    }

    @Override
    public void process() throws Exception {
        System.out.println(getName() + "节点");

        XgfFlowDto info = this.getRequestData();
        PageData condition = new PageData();

        condition.put("FLOWS_ID", info.getFLOWS_ID());
        PageData flows = xgfFlowsMapper.findById(condition);

        condition.clear();
        condition.put("CORPINFO_ID", Jurisdiction.getCORPINFO_ID());
        PageData corpEntity = corpInfoMapper.findById(condition);

        flows.put("APPOINT_TWO_CORP_ID", Jurisdiction.getCORPINFO_ID());
        flows.put("APPOINT_TWO_CORP_NAME", corpEntity.getString("CORP_NAME"));
        flows.put("APPOINT_TWO_TIME", DateUtil.getTime());
        flows.put("APPOINT_TWO_STATUS", info.getSTATUS());
        flows.put("APPOINT_TWO_OPINION", info.getOPINION());
        flows.put("OPINION", info.getOPINION());

        if ("0".equals(info.getSTATUS())) {
            // 打回至相关方端
            xgfUserService.repulse(flows);
        } else {
            xgfFlowsMapper.edit(flows);
            condition.clear();
            condition.put("XGF_USER_ID", flows.getString("FLOWS_ID"));
            PageData entity = xgfUserMapper.findById(condition);
            entity.put("CHECK_STATUS", 1);
            entity.put("VALID_FLAG", "2");
            entity.put("CHECK_STEP", Integer.parseInt(entity.get("CHECK_STEP").toString()) + 1);
            entity.put("LIMIT_END_TIME", info.getLIMIT_END_TIME());
            xgfUserMapper.edit(entity);
            // 清空指针
            info.setIterator("");
        }

        // 保存操作记录
        xgfUserService.saveLog(info, info.getSTATUS(), "0");

    }
}