package com.weaver.seconddev.interfaces.workflow.controller;

import com.alibaba.fastjson.JSONObject;
import com.weaver.seconddev.interfaces.k3.CallK3CustomerService;
import com.weaver.seconddev.interfaces.k3.CustomerServiceStub;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.weaver.common.base.entity.result.WeaResult;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @Author: calyrex
 * @CreateTime: 2025-02-18
 * @Description: K3_Get_CustomerInfo的API调用
 */

@Slf4j
@RestController
@RequestMapping({"/papi/secondev/workflow/controller" })
public class K3_Get_CustomerInfo_controller {

    @Autowired
    private CallK3CustomerService service;

    @RequestMapping("/K3_Get_CustomerInfo")
    public WeaResult<String> run(@RequestParam Map<String,Object> params){
        log.error("K3_Get_CustomerInfo_controller execute start");
        log.error("K3_Get_CustomerInfo_controller execute params : " + params);
        try{
            String datacenterid = null2String(params.get("datacenterid")); //数据中心
            String custname= null2String(params.get("custname")); //供应商名称
            String custnumber = null2String(params.get("custnumber")); //供应商编号
            String code = "0";
            String message = "";
            String issuccess = "";
            String result = "";

            CustomerServiceStub.CustomerSearchReq req = new CustomerServiceStub.CustomerSearchReq();
            req.setUser("oa");
            req.setPwd("k3cloud_htgd");
            req.setFName(custname);
            req.setFNumber(custnumber);
            req.setDataCenterID(datacenterid);

            CustomerServiceStub.CustomerReturn res = service.getCustomer(req);
            code = res.getCode();
            message = res.getMessage();
            issuccess = res.getIsSuccess();
            result = res.getResult();

            JSONObject resultJson = new JSONObject();
            resultJson.put("code",code);
            resultJson.put("message",message);
            resultJson.put("IsSuccess",issuccess);
            resultJson.put("result",result);
            log.error("K3_Get_CustomerInfo_controller code--" + code);
            log.error("K3_Get_CustomerInfo_controller resultJson--" + resultJson);
            CustomerServiceStub.Customer  customer = res.getCustomer();
            Map<String,Object> supJson = new HashMap<>();
            if(customer!=null){
                supJson.put("FCustName",customer.getFCustName());//客户名称
                supJson.put("FCustNumber",customer.getFCustNumber());//客户代码
                supJson.put("Fgroup",customer.getFGroup());//客户分组分组
                supJson.put("FGroupName",customer.getFGroupName());//客户分组名称
                supJson.put("FCustClassify",customer.getFCustClassify());//供应商类别
                supJson.put("FCustCLASSIFYNAME",customer.getFCustCLASSIFYNAME());//供应商类别名称
                supJson.put("FTAXREGISTERCODE",customer.getFTAXREGISTERCODE());//统一社会信用代码
                supJson.put("FTRADINGCURRID",customer.getFTRADINGCURRID());//结算币别
                supJson.put("FRECCONDITIONID",customer.getFRECCONDITIONID());//付款条件
                supJson.put("FTaxRateId",customer.getFTaxRate());//默认税率
                supJson.put("F_HTGD_RELATEDTYPE",customer.getF_HTGD_RELATEDTYPE());//关联方属性
                CustomerServiceStub.ArrayOfOrganization org = customer.getListOrgs();
                String orgcode = "";
                String orgname = "";
                if (org != null) {
                    CustomerServiceStub.Organization[] orgArr =  org.getOrganization();

                    if(orgArr!=null){
                        for(int m=0;m<orgArr.length;m++){
                            orgcode = orgcode + orgArr[m].getFNumber()+",";
                            orgname = orgname + orgArr[m].getFName()+",";
                        }
                        orgcode = orgcode.substring(0,orgcode.lastIndexOf(","));
                        orgname = orgname.substring(0,orgname.lastIndexOf(","));
                    }
                }

                supJson.put("orgcode",orgcode);//关联方属性
                supJson.put("orgname",orgname);//关联方属性
                //联系人信息
                CustomerServiceStub.CustContact contact = customer.getCustContact();
                Map<String,Object> contactJson = new HashMap<>();
                if(contact!=null) {
                    contactJson.put("Fcontact", contact.getFCONTACT()); //联系人
                    contactJson.put("FBizAddress", contact.getFBIZADDRESS());//通讯地址
                    contactJson.put("FMobile", contact.getFMOBILE());//手机
                    contactJson.put("Ftel", contact.getFTEL());//电话
                    contactJson.put("FFax", contact.getFFAX());//传真
                    contactJson.put("Femail", contact.getFEMAIL());//电子邮箱
                }
                supJson.put("contact",contactJson);
                CustomerServiceStub.ArrayOfCustBank bankinfo = customer.getBankList();
                if(bankinfo!=null) {
                    CustomerServiceStub.CustBank[] bankarr = bankinfo.getCustBank();
                    List<Map<String,Object>> bankJsonarr = new ArrayList<>();
                    if(bankarr!=null && bankarr.length>0){
                        for (int i=0; i<bankarr.length;i++){
                            Map<String,Object> item = new HashMap<>();
                            item.put("FBankHolder",bankarr[i].getFBankHolder());
                            item.put("FBankCode",bankarr[i].getFBankCode());
                            item.put("FOPENBANKNAME",bankarr[i].getFOPENBANKNAME());
                            item.put("FCNAPS",bankarr[i].getFCNAPS());
                            bankJsonarr.add(item);
                        }
                    }
                    supJson.put("banklist",bankJsonarr);
                }else{
                    supJson.put("banklist",new ArrayList<>());
                }
            }
            resultJson.put("customer",supJson);
            return WeaResult.success(JSONObject.toJSONString(resultJson));
        }catch (Exception e){
            log.error("K3_Get_CustomerInfo_controller execute error : " , e );
            return WeaResult.fail( 500, "K3_Get_CustomerInfo_controller execute error", e);
        }
    }

    public static String null2String(String s){
        return s == null ? "" : s;
    }

    public static String null2String(Object o){
        return o == null ? "" : o.toString();
    }

    public static String null2String(String s1,String s2){
        return s1 == null ? (s2 == null ? "" : s2) : s1;
    }
}
