package com.sunda.spmsoversea.service.impl;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.sunda.spmscommon.entity.ZSapOrgClient;
import com.sunda.spmscommon.feign.IFeignServiceCommon;
import com.sunda.spmscommon.mapper.ZSapOrgClientMapper;
import com.sunda.spmsoversea.service.IZSapOrgClientService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.UUID;

/**
 * <p>
 * SAP组织架构与Client对应表 服务实现类
 * </p>
 *
 * @author HZC
 * @since 2023-06-29
 */
@Service
public class ZSapOrgClientServiceImpl extends ServiceImpl<ZSapOrgClientMapper, ZSapOrgClient> implements IZSapOrgClientService {

    @Value("${zxd.sap.client}")
    private String sapClient;

    @Autowired
    IFeignServiceCommon iFeignServiceCommon;

    private static final Logger logger = LoggerFactory.getLogger(ZSapOrgClientServiceImpl.class);

    @Override
    public void syncSapOrgClient(ZSapOrgClient sapOrgClient) {
        try {
            JSONObject dataToSap = formatDataToSap();
            String message = iFeignServiceCommon.sendRestToSapCommon(dataToSap);
            JSONObject doc = JSONObject.parseObject(message);

            JSONObject RETURN_DATA = doc.getJSONObject("RESPONSE").getJSONObject("RETURN_DATA");
            JSONArray jsonArray = RETURN_DATA.getJSONArray("ET_FIMM_CLIENT");//Client与公司代码、工厂对应关系
            //ET_FIMM_CLIENT=ZTCOMM001-Client、公司代码以及工厂对应表
            //ET_VKORG_CLIENT=ZTSD010-Client与公司代码、销售组织关系表
            //ET_VSTEL_CLIENT=ZTSD011-Client与公司代码、工厂、装运点关系表
            if (jsonArray.size() > 0) {
                List<Map> clients = jsonArray.toJavaList(Map.class);
                if (clients != null && clients.size() > 0) {
                    //保存前先删除所有数据
                    QueryWrapper<ZSapOrgClient> sapOrgClientQueryWrapper = new QueryWrapper<ZSapOrgClient>();
                    this.baseMapper.delete(sapOrgClientQueryWrapper);
                    for (int i = 0; i < clients.size(); i++) {
                        String SYSID = clients.get(i).get("SYSID")!=null?clients.get(i).get("SYSID").toString():"";//SAP系统的名称
                        String ZMANDT = clients.get(i).get("ZMANDT")!=null?clients.get(i).get("ZMANDT").toString():"";//客户端
                        String ZMTXT = clients.get(i).get("ZMTXT")!=null?clients.get(i).get("ZMTXT").toString():"";//Client描述
                        String BUKRS = clients.get(i).get("BUKRS")!=null?clients.get(i).get("BUKRS").toString():"";//公司代码
                        String WERKS = clients.get(i).get("WERKS")!=null?clients.get(i).get("WERKS").toString():"";//工厂
                        String EKORG = clients.get(i).get("EKORG")!=null?clients.get(i).get("EKORG").toString():"";//采购组织
                        ZSapOrgClient vo = new ZSapOrgClient();
                        vo.setSysid(SYSID);
                        vo.setZmandt(ZMANDT);
                        vo.setZmtxt(ZMTXT);
                        vo.setBukrs(BUKRS);
                        vo.setWerks(WERKS);
                        vo.setEkorg(EKORG);
                        vo.setCreateTime(new Date());
                        this.baseMapper.insert(vo);
                    }
                }
            }
        }catch (Exception e) {
            logger.error("同步SapOrgClient异常：" + e);
        }
    }

    private JSONObject formatDataToSap() {
        JSONObject dataToSap = new JSONObject();
        JSONObject REQUEST = new JSONObject();
        JSONObject ESB_ATTRS = new JSONObject();
        JSONObject REQUEST_DATA = new JSONObject();
        JSONObject Head = new JSONObject();

        REQUEST_DATA.put("Head", Head);
        REQUEST_DATA.put("Operation", "Z_SAP_ORG_CLIENT");
        REQUEST_DATA.put("Type", "Z_SAP_ORG_CLIENT");
        ESB_ATTRS.put("App_ID", "SPMS");
        ESB_ATTRS.put("Target_ID", sapClient);
        ESB_ATTRS.put("Application_ID", "00020000000002");
        ESB_ATTRS.put("Transaction_ID", UUID.randomUUID().toString());
        REQUEST.put("ESB_ATTRS", ESB_ATTRS);
        REQUEST.put("REQUEST_DATA", REQUEST_DATA);
        dataToSap.put("REQUEST", REQUEST);
        logger.info(dataToSap.toJSONString());
        return dataToSap;
    }

}
