package com.sunda.spmsoversea.service.impl;

import com.alibaba.fastjson.JSONObject;
import com.sunda.spmsoversea.service.IFormatDataToSapService;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import java.text.SimpleDateFormat;
import java.util.*;

/**
 * @program: spms
 * @description: impl
 * @author: Wayne Wu
 * @create: 2021-08-19 10:24
 **/
@Service
public class FormatDataToSapServiceImpl implements IFormatDataToSapService {

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

    @Override
    public JSONObject formatDataToSap(Map<String, Object> dataHead, List<Map<String, Object>> dataItem, String operation, String type) {
        JSONObject doc = new JSONObject();
        JSONObject request = new JSONObject();
        JSONObject esbAttrs = new JSONObject();
        JSONObject requestData = new JSONObject();
        esbAttrs.put("App_ID", "SPMS");
        Map<String, Object> tablesZxd04 = new HashMap<>();
        if("ZZXD_IF_SPMS_04".equals(operation) || "ZZXD_IF_SPMS_03".equals(operation)){
            esbAttrs.put("Target_ID", sapClient);//装箱单的接口只推送到装箱单的client
        }
        esbAttrs.put("Application_ID", "00020000000002");
        esbAttrs.put("Transaction_ID", UUID.randomUUID().toString());

        if (dataHead != null){
            SimpleDateFormat simp = new SimpleDateFormat("yyyy:MM:ddHH:mm:ss:SS");//月日时分秒 毫秒
            String serialNumber=simp.format(new Date()).replace(":","" );
            if("Z_POS_PO_CREATE".equals(operation)){
                dataHead.put("ZID", "SPMS"+serialNumber);
            }else if (!"Z_SPMS_SKU_CHECK".equals(operation) && !"Z_SPMS_CANCEL".equals(operation) && !"Z_SPMS_ANOMALY_POST".equals(operation)
                    && !"ZZXD_IF_SPMS_03".equals(operation) && !"Z_SPMS_GETHWDN".equals(operation) && !"ZZXD_IF_SPMS_04".equals(operation)){
                dataHead.put("SPMSID", "SPMS"+serialNumber);
            }
            //requestData.put("Head", dataHead);
            if("Z_SPMS_ANOMALY_POST".equals(operation)){
                Map<String, Object> fileds = new HashMap<>();
                if(dataHead.get("SAP_KEY_CODE")!=null && dataHead.get("SAP_KEY_CODE").toString().length()>0){
                    fileds.put("SPMSID", dataHead.get("SAP_KEY_CODE").toString());//赋值幂等ID
                    dataHead.remove("SAP_KEY_CODE");
                }else{
                    fileds.put("SPMSID", "SPMS"+serialNumber);
                }
                requestData.put("fileds", fileds);
                Map<String, Object> structures = new HashMap<>();
                structures.put("I_HEADER", dataHead);
                requestData.put("structures", structures);
            }else if("ZZXD_IF_SPMS_03".equals(operation)){
                Map<String, Object> structures = new HashMap<>();
                structures.put("IS_DATA", dataHead);
                requestData.put("structures", structures);
            }else if ("Z_SPMS_SKU_CHECK".equals(operation)) {
                Map<String, Object> fileds = new HashMap<>();
                fileds.put("SPMSID", "SPMS"+serialNumber);
                requestData.put("fileds", fileds);
                Map<String, Object> structures = new HashMap<>();
                structures.put("I_HEADER", dataHead);
                requestData.put("structures", structures);
            } else if ("Z_SPMS_CANCEL".equals(operation)) {
                requestData.put("fileds", dataHead);
            }else if (!"ZZXD_IF_SPMS_04".equals(operation)){
                requestData.put("fileds", dataHead);
            }


        }


        if (dataItem != null && dataItem.size() > 0){
            if("Z_SPMS_ANOMALY_POST".equals(operation)){
                Map<String, Object> tables = new HashMap<>();
                tables.put("IT_ITME", dataItem);
                requestData.put("tables", tables);
            }else if ("Z_SPMS_SKU_CHECK".equals(operation)){
            	Map<String, Object> tables = new HashMap<>();
                tables.put("IT_ITME", dataItem);
                requestData.put("tables", tables);
            }else if("ZZXD_IF_SPMS_04".equals(operation)){
            	List<Object> heads = new ArrayList<>();
                heads.add(dataHead);
                tablesZxd04.put("T_HEAD", heads);
                tablesZxd04.put("T_ITEM", dataItem);
                requestData.put("tables", tablesZxd04);
            }else{
                requestData.put("Items", dataItem);
            }
        }
        requestData.put("Operation", operation);
        requestData.put("Type", type);

        request.put("ESB_ATTRS", esbAttrs);
        request.put("REQUEST_DATA", requestData);

        doc.put("REQUEST", request);
        return doc;
    }
}
