package com.bcxin.risk.util;

import com.alibaba.fastjson.JSON;
import com.bcxin.risk.activity.ActivityApproval;
import com.bcxin.risk.common.domain.SyncTask;
import com.bcxin.risk.common.dto.data.SBDataDTO;
import com.bcxin.risk.common.service.CommonService;
import com.bcxin.risk.communicate.main.MainReqService;
import com.bcxin.risk.constant.DictConst;
import com.bcxin.risk.spring.SpringContextHolder;
import com.google.common.collect.Maps;

import java.util.Map;
import java.util.Objects;

/**
 * author hzp
 */
public class SyncTaskUtil {

    private static CommonService commonService;
    private static MainReqService mainReqService;

    /**
     * 使用单例
     * @return
     */
    public static CommonService getCommonService(){
        if(commonService!=null){
            return commonService;
        }
        commonService = SpringContextHolder.getBean(CommonService.class);
        return commonService;
    }

    public static MainReqService getMainReqService(){
        if(mainReqService!=null){
            return mainReqService;
        }
        mainReqService=SpringContextHolder.getBean(MainReqService.class);
        return mainReqService;
    }


    /**
     * 添加同步审批记录的任务
     */
    public static void addApprovalSyncTask(ActivityApproval param) {
        try {
            // 退回的情况，才需要记录
            if (Objects.equals(param.getApprovalStatus(), DictConst.PRIMARYSTATUS_CSXG ) ||
                    Objects.equals(param.getApprovalStatus(), DictConst.SLSTATUS_BSL) ||
                    Objects.equals(param.getApprovalStatus(), DictConst.APPROVALSTATUS_SP_SHBTG) ||
                    Objects.equals(param.getApprovalStatus(), DictConst.APPROVALSTATUS_SP_SHDH) ) {
                CommonService commonService = getCommonService();
                String activityNo=param.getActivity().getActivityNo();
                Map<String,String> map=Maps.newHashMap();
                map.put("activityNo",activityNo);
                map.put("name",param.getName());
                map.put("approvalName",param.getApprovalName());
                map.put("approvalStatus",param.getApprovalStatus());
                map.put("approvalDate",param.getApprovalDate());
                map.put("comment",param.getComment());

                SBDataDTO dataDTO = new SBDataDTO();
                dataDTO.setSyncTaskType(DictConst.SYNCTASKTYPE_APPROVAL);
                dataDTO.setActivityNo(activityNo);
                dataDTO.setApproveLogParam(JSON.toJSONString(map));
                SyncTask task = commonService.instance(DictConst.SYNCTASKTYPE_APPROVAL, JSON.toJSONString(dataDTO));
                task.setActivityNo(activityNo);
                dataDTO.setTask(task);
                getMainReqService().mainAsync(dataDTO);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
