package com.yunzhupaas.mdm.controller;


import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import com.yunzhupaas.base.ActionResult;
import com.yunzhupaas.base.UserInfo;
import com.yunzhupaas.exception.DataException;
import com.yunzhupaas.permission.entity.UserEntity;
import com.yunzhupaas.constant.MsgCode;
import com.yunzhupaas.mdm.service.*;
import com.yunzhupaas.mdm.entity.*;
import com.yunzhupaas.util.*;
import com.yunzhupaas.mdm.model.company.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import com.yunzhupaas.flowable.entity.TaskEntity;
import jakarta.validation.Valid;
import java.util.*;
import com.yunzhupaas.model.ExcelModel;
import com.yunzhupaas.excel.ExcelExportStyler;
import com.yunzhupaas.excel.ExcelHelper;
import com.yunzhupaas.annotation.YunzhupaasField;
import com.yunzhupaas.base.vo.PageListVO;
import com.yunzhupaas.base.vo.PaginationVO;
import com.yunzhupaas.base.vo.DownloadVO;
import com.yunzhupaas.config.ConfigValueUtil;
import com.yunzhupaas.base.entity.ProvinceEntity;
import java.io.IOException;
import java.util.stream.Collectors;
import com.yunzhupaas.flowable.entity.TaskEntity;
import com.yunzhupaas.exception.WorkFlowException;
import com.yunzhupaas.model.visualJson.UploaderTemplateModel;
import com.yunzhupaas.base.util.FormExecelUtils;
import org.springframework.web.multipart.MultipartFile;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.ExcelImportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.ImportParams;
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Workbook;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import com.yunzhupaas.onlinedev.model.ExcelImFieldModel;
import com.yunzhupaas.base.model.OnlineImport.ImportDataModel;
import com.yunzhupaas.base.model.OnlineImport.ImportFormCheckUniqueModel;
import com.yunzhupaas.base.model.OnlineImport.ExcelImportModel;
import com.yunzhupaas.base.model.OnlineImport.VisualImportModel;
import cn.xuyanwu.spring.file.storage.FileInfo;
import lombok.Cleanup;
import com.yunzhupaas.model.visualJson.config.HeaderModel;
import com.yunzhupaas.base.model.ColumnDataModel;
import com.yunzhupaas.base.util.VisualUtils;
import org.springframework.transaction.annotation.Transactional;

/**
 * 企业信息
 * @版本： V5.2.7
 * @版权： Copyright @ 2025  深圳市乐程软件有限公司版权所有
 * @作者： 深圳市乐程软件有限公司
 * @日期： 2026-04-24
 */
@Slf4j
@RestController
@Tag(name = "企业信息" , description = "bcm")
@RequestMapping("/api/bcm/Company")
public class CompanyController {

    @Autowired
    private GeneraterSwapUtil generaterSwapUtil;

    @Autowired
    private UserProvider userProvider;

    @Autowired
    private CompanyService companyService;

    @Autowired
    private CompanyBankService mdmCompanyBankService;
    @Autowired
    private CompanyInvoiceService companyInvoiceService;


    @Autowired
    private ConfigValueUtil configValueUtil;

    /**
    * 列表
    *
    * @param companyPagination
    * @return
    */
    @Operation(summary = "获取列表")
    @PostMapping("/getList")
    public ActionResult list(@RequestBody CompanyPagination companyPagination)throws Exception{
        List<CompanyEntity> list= companyService.getList(companyPagination);
        List<Map<String, Object>> realList=new ArrayList<>();
        for (CompanyEntity entity : list) {
        Map<String, Object> companyMap=JsonUtil.entityToMap(entity);
        companyMap.put("id", companyMap.get("company_id"));
        //副表数据
        //子表数据
        List<CompanyBankEntity> mdmCompanyBankList = entity.getCompanyBank();
        companyMap.put("tableFieldad9d92",JsonUtil.getJsonToList(JsonUtil.getListToJsonArray(mdmCompanyBankList)));
        companyMap.put("mdmCompanyBankList",JsonUtil.getJsonToList(JsonUtil.getListToJsonArray(mdmCompanyBankList)));
        List<CompanyInvoiceEntity> companyInvoiceList = entity.getCompanyInvoice();
        companyMap.put("tableField46dc53",JsonUtil.getJsonToList(JsonUtil.getListToJsonArray(companyInvoiceList)));
        companyMap.put("companyInvoiceList",JsonUtil.getJsonToList(JsonUtil.getListToJsonArray(companyInvoiceList)));
            realList.add(companyMap);
        }
        //数据转换
        boolean isPc = "pc".equals(ServletUtil.getHeader("yunzhupaas-origin" ));
        realList = generaterSwapUtil.swapDataList(realList, CompanyConstant.getFormData(), CompanyConstant.getColumnData(), companyPagination.getModuleId(),isPc?false:false);

        //返回对象
        PageListVO vo = new PageListVO();
        vo.setList(realList);
        PaginationVO page = JsonUtil.getJsonToBean(companyPagination, PaginationVO.class);
        vo.setPagination(page);
        return ActionResult.success(vo);
    }
    /**
    * 创建
    *
    * @param companyForm
    * @return
    */
    @PostMapping()
    @Operation(summary = "创建")
    public ActionResult create(@RequestBody @Valid CompanyForm companyForm) {
        String b = companyService.checkForm(companyForm,0);
        if (StringUtil.isNotEmpty(b)){
            return ActionResult.fail(b );
        }
        try{
            companyService.saveOrUpdate(companyForm, null ,true);
        }catch(Exception e){
            return ActionResult.fail(MsgCode.FA028.get());
        }
        return ActionResult.success(MsgCode.SU001.get());
    }
    /**
    * 导出Excel
    *
    * @return
    */
    @Operation(summary = "导出Excel")
    @PostMapping("/Actions/Export")
    public ActionResult Export(@RequestBody CompanyPagination companyPagination) throws IOException {
        if (StringUtil.isEmpty(companyPagination.getSelectKey())){
            return ActionResult.fail(MsgCode.IMP011.get());
        }
        List<CompanyEntity> list= companyService.getList(companyPagination);
        List<Map<String, Object>> realList=new ArrayList<>();
        for (CompanyEntity entity : list) {
        Map<String, Object> companyMap=JsonUtil.entityToMap(entity);
        companyMap.put("id", companyMap.get("company_id"));
        //副表数据
        //子表数据
        List<CompanyBankEntity> mdmCompanyBankList = entity.getCompanyBank();
        companyMap.put("tableFieldad9d92",JsonUtil.getJsonToList(JsonUtil.getListToJsonArray(mdmCompanyBankList)));
        companyMap.put("mdmCompanyBankList",JsonUtil.getJsonToList(JsonUtil.getListToJsonArray(mdmCompanyBankList)));
        List<CompanyInvoiceEntity> companyInvoiceList = entity.getCompanyInvoice();
        companyMap.put("tableField46dc53",JsonUtil.getJsonToList(JsonUtil.getListToJsonArray(companyInvoiceList)));
        companyMap.put("companyInvoiceList",JsonUtil.getJsonToList(JsonUtil.getListToJsonArray(companyInvoiceList)));
            realList.add(companyMap);
        }
        //数据转换
        realList = generaterSwapUtil.swapDataList(realList, CompanyConstant.getFormData(), CompanyConstant.getColumnData(), companyPagination.getModuleId(),false);
        String[]keys=!StringUtil.isEmpty(companyPagination.getSelectKey())?companyPagination.getSelectKey():new String[0];
        UserInfo userInfo=userProvider.get();
        String menuFullName = generaterSwapUtil.getMenuName(companyPagination.getMenuId());

            DownloadVO vo=this.creatModelExcel(configValueUtil.getTemporaryFilePath(),realList,keys,userInfo,menuFullName);
        return ActionResult.success(vo);
    }

    /**
    * 导出表格方法
    */
    public DownloadVO creatModelExcel(String path,List<Map<String, Object>>list,String[]keys,UserInfo userInfo,String menuFullName){
        DownloadVO vo=DownloadVO.builder().build();
        List<ExcelExportEntity> entitys=new ArrayList<>();
        if(keys.length>0){
            ExcelExportEntity tableFieldad9d92ExcelEntity = new ExcelExportEntity("设计子表(tableFieldad9d92)","tableFieldad9d92");
            List<ExcelExportEntity> tableFieldad9d92List = new ArrayList<>();
            ExcelExportEntity tableField46dc53ExcelEntity = new ExcelExportEntity("设计子表(tableField46dc53)","tableField46dc53");
            List<ExcelExportEntity> tableField46dc53List = new ArrayList<>();
            for(String key:keys){
                switch(key){
                    case "company_code" :
                    entitys.add(new ExcelExportEntity("企业编码" ,"company_code"));
                    break;
                    case "company_name" :
                    entitys.add(new ExcelExportEntity("企业名称" ,"company_name"));
                    break;
                    case "short_name" :
                    entitys.add(new ExcelExportEntity("简称/昵称" ,"short_name"));
                    break;
                    case "entity_type" :
                    entitys.add(new ExcelExportEntity("类型" ,"entity_type"));
                    break;
                    case "credit_code" :
                    entitys.add(new ExcelExportEntity("社会信用代码" ,"credit_code"));
                    break;
                    case "org_id" :
                    entitys.add(new ExcelExportEntity("归属组织" ,"org_id"));
                    break;
                    case "province_id" :
                    entitys.add(new ExcelExportEntity("所属地区" ,"province_id"));
                    break;
                    case "tax_type" :
                    entitys.add(new ExcelExportEntity("纳税人类别" ,"tax_type"));
                    break;
                    case "enterprise_scale" :
                    entitys.add(new ExcelExportEntity("企业规模" ,"enterprise_scale"));
                    break;
                    case "enterprise_nature" :
                    entitys.add(new ExcelExportEntity("企业类型" ,"enterprise_nature"));
                    break;
                    case "industry_code" :
                    entitys.add(new ExcelExportEntity("行业代码" ,"industry_code"));
                    break;
                    case "registration_date" :
                    entitys.add(new ExcelExportEntity("成立日期" ,"registration_date"));
                    break;
                    case "registered_capital" :
                    entitys.add(new ExcelExportEntity("注册资本" ,"registered_capital"));
                    break;
                    case "legal_representative" :
                    entitys.add(new ExcelExportEntity("法定代表人" ,"legal_representative"));
                    break;
                    case "phone" :
                    entitys.add(new ExcelExportEntity("联系电话" ,"phone"));
                    break;
                    case "email" :
                    entitys.add(new ExcelExportEntity("邮箱" ,"email"));
                    break;
                    case "website" :
                    entitys.add(new ExcelExportEntity("网站" ,"website"));
                    break;
                    case "address" :
                    entitys.add(new ExcelExportEntity("地址" ,"address"));
                    break;
                    case "business_scope" :
                    entitys.add(new ExcelExportEntity("经营范围" ,"business_scope"));
                    break;
                    case "remark" :
                    entitys.add(new ExcelExportEntity("备注" ,"remark"));
                    break;
                    case "tableFieldad9d92-bank_name":
                    tableFieldad9d92List.add(new ExcelExportEntity("开户行" ,"bank_name"));
                    break;
                    case "tableFieldad9d92-bank_account_name":
                    tableFieldad9d92List.add(new ExcelExportEntity("账户名" ,"bank_account_name"));
                    break;
                    case "tableFieldad9d92-bank_account_number":
                    tableFieldad9d92List.add(new ExcelExportEntity("银行账号" ,"bank_account_number"));
                    break;
                    case "tableFieldad9d92-bank_province":
                    tableFieldad9d92List.add(new ExcelExportEntity("开户行城市" ,"bank_province"));
                    break;
                    case "tableFieldad9d92-remark":
                    tableFieldad9d92List.add(new ExcelExportEntity("备注" ,"remark"));
                    break;
                    case "tableField46dc53-title_code":
                    tableField46dc53List.add(new ExcelExportEntity("发票抬头编码" ,"title_code"));
                    break;
                    case "tableField46dc53-title_name":
                    tableField46dc53List.add(new ExcelExportEntity("发票抬头名称" ,"title_name"));
                    break;
                    case "tableField46dc53-credit_code":
                    tableField46dc53List.add(new ExcelExportEntity("纳税人识别号" ,"credit_code"));
                    break;
                    case "tableField46dc53-tax_type":
                    tableField46dc53List.add(new ExcelExportEntity("纳税人类别" ,"tax_type"));
                    break;
                    case "tableField46dc53-address":
                    tableField46dc53List.add(new ExcelExportEntity("地址" ,"address"));
                    break;
                    case "tableField46dc53-phone":
                    tableField46dc53List.add(new ExcelExportEntity("电话" ,"phone"));
                    break;
                    case "tableField46dc53-bank_name":
                    tableField46dc53List.add(new ExcelExportEntity("开户银行" ,"bank_name"));
                    break;
                    case "tableField46dc53-bank_account":
                    tableField46dc53List.add(new ExcelExportEntity("银行账户" ,"bank_account"));
                    break;
                    case "tableField46dc53-is_defalut":
                    tableField46dc53List.add(new ExcelExportEntity("是否默认" ,"is_defalut"));
                    break;
                    case "tableField46dc53-is_valid":
                    tableField46dc53List.add(new ExcelExportEntity("是否有效" ,"is_valid"));
                    break;
                    case "tableField46dc53-remark":
                    tableField46dc53List.add(new ExcelExportEntity("备注" ,"remark"));
                    break;
                    default:
                    break;
                }
            }
            if(tableFieldad9d92List.size() > 0){
                tableFieldad9d92ExcelEntity.setList(tableFieldad9d92List);
                entitys.add(tableFieldad9d92ExcelEntity);
            }
            if(tableField46dc53List.size() > 0){
                tableField46dc53ExcelEntity.setList(tableField46dc53List);
                entitys.add(tableField46dc53ExcelEntity);
            }
        }

        ExportParams exportParams = new ExportParams(null, "表单信息");
        exportParams.setType(ExcelType.XSSF);
        try{
            @Cleanup Workbook workbook = new HSSFWorkbook();
            if (entitys.size()>0){
                if (list.size()==0){
                    list.add(new HashMap<>());
                }
                //去除空数据
                List<Map<String, Object>> dataList = new ArrayList<>();
                for (Map<String, Object> map : list) {
                    int i = 0;
                    for (String key : keys) {
                        //子表
                        if (key.toLowerCase().startsWith("tablefield")) {
                            String tableField = key.substring(0, key.indexOf("-" ));
                            String field = key.substring(key.indexOf("-" ) + 1);
                            Object o = map.get(tableField);
                            if (o != null) {
                                List<Map<String, Object>> childList = (List<Map<String, Object>>) o;
                                for (Map<String, Object> childMap : childList) {
                                    if (childMap.get(field) != null) {
                                        i++;
                                    }
                                }
                            }
                        } else {
                            Object o = map.get(key);
                            if (o != null) {
                                i++;
                            }
                        }
                    }
                    if (i > 0) {
                        dataList.add(map);
                    }
                }
                List<ExcelExportEntity> mergerEntitys = new ArrayList<>(entitys);
                List<Map<String, Object>> mergerList=new ArrayList<>(dataList);
                //复杂表头-表头和数据处理
                ColumnDataModel columnDataModel = JsonUtil.getJsonToBean(CompanyConstant.getColumnData(), ColumnDataModel.class);
                List<HeaderModel> complexHeaderList = columnDataModel.getComplexHeaderList();
                if (!Objects.equals(columnDataModel.getType(), 3) && !Objects.equals(columnDataModel.getType(), 5)) {
                    entitys = VisualUtils.complexHeaderHandel(entitys, complexHeaderList, Objects.equals(columnDataModel.getType(), 4));
                    dataList =  VisualUtils.complexHeaderDataHandel(dataList, complexHeaderList, Objects.equals(columnDataModel.getType(), 4));
                }

                exportParams.setStyle(ExcelExportStyler.class);
                workbook = ExcelExportUtil.exportExcel(exportParams, entitys, dataList);
                VisualUtils.mergerVertical(workbook, mergerEntitys, mergerList);
                ExcelModel excelModel = generaterSwapUtil.getExcelParams(CompanyConstant.getFormData(),Arrays.asList(keys));
                ExcelHelper helper = new ExcelHelper();
                helper.init(workbook, exportParams, entitys, excelModel);
                helper.doPreHandle();
                helper.doPostHandle();
            }
            String fileName = menuFullName  +"_"+ DateUtil.dateNow("yyyyMMddHHmmss") + ".xls";
            MultipartFile multipartFile = ExcelUtil.workbookToCommonsMultipartFile(workbook, fileName);
            String temporaryFilePath = configValueUtil.getTemporaryFilePath();
            FileInfo fileInfo = FileUploadUtils.uploadFile(multipartFile, temporaryFilePath, fileName);
            vo.setName(fileInfo.getFilename());
            vo.setUrl(UploaderUtil.uploaderFile(fileInfo.getFilename() + "#" + "Temporary") + "&name=" + fileName);
        } catch (Exception e) {
            log.error("信息导出Excel错误:{}", e.getMessage());
            e.printStackTrace();
        }
        return vo;
    }
    @Operation(summary = "上传文件")
    @PostMapping("/Uploader")
    public ActionResult<Object> Uploader() {
        List<MultipartFile> list = UpUtil.getFileAll();
        MultipartFile file = list.get(0);
        if (file.getOriginalFilename().endsWith(".xlsx") || file.getOriginalFilename().endsWith(".xls")) {
            String filePath = XSSEscape.escape(configValueUtil.getTemporaryFilePath());
            String fileName = XSSEscape.escape(RandomUtil.uuId() + "." + UpUtil.getFileType(file));
            //上传文件
            FileInfo fileInfo = FileUploadUtils.uploadFile(file, filePath, fileName);
            DownloadVO vo = DownloadVO.builder().build();
            vo.setName(fileInfo.getFilename());
            return ActionResult.success(vo);
        } else {
            return ActionResult.fail(MsgCode.FA017.get());
        }
    }

    /**
    * 模板下载
    *
    * @return
    */
    @Operation(summary = "模板下载")
    @GetMapping("/TemplateDownload")
    public ActionResult<DownloadVO>  TemplateDownload(@RequestParam("menuId") String menuId){
        DownloadVO vo = DownloadVO.builder().build();
        UserInfo userInfo = userProvider.get();
        String menuFullName = generaterSwapUtil.getMenuName(menuId);
        //主表对象
        List<ExcelExportEntity> entitys = new ArrayList<>();
        List<String> selectKeys = new ArrayList<>();
        //以下添加字段
                entitys.add(new ExcelExportEntity("企业名称(company_name)" ,"company_name"));
                selectKeys.add("company_name");
                entitys.add(new ExcelExportEntity("社会信用代码(credit_code)" ,"credit_code"));
                selectKeys.add("credit_code");
                entitys.add(new ExcelExportEntity("归属组织(org_id)" ,"org_id"));
                selectKeys.add("org_id");
                entitys.add(new ExcelExportEntity("企业编码(company_code)" ,"company_code"));
                selectKeys.add("company_code");
                entitys.add(new ExcelExportEntity("简称/昵称(short_name)" ,"short_name"));
                selectKeys.add("short_name");
                entitys.add(new ExcelExportEntity("类型(entity_type)" ,"entity_type"));
                selectKeys.add("entity_type");
                entitys.add(new ExcelExportEntity("纳税人类别(tax_type)" ,"tax_type"));
                selectKeys.add("tax_type");
                entitys.add(new ExcelExportEntity("企业规模(enterprise_scale)" ,"enterprise_scale"));
                selectKeys.add("enterprise_scale");
                entitys.add(new ExcelExportEntity("企业类型(enterprise_nature)" ,"enterprise_nature"));
                selectKeys.add("enterprise_nature");
                entitys.add(new ExcelExportEntity("行业代码(industry_code)" ,"industry_code"));
                selectKeys.add("industry_code");
                entitys.add(new ExcelExportEntity("成立日期(registration_date)" ,"registration_date"));
                selectKeys.add("registration_date");
                entitys.add(new ExcelExportEntity("注册资本(registered_capital)" ,"registered_capital"));
                selectKeys.add("registered_capital");
                entitys.add(new ExcelExportEntity("法定代表人(legal_representative)" ,"legal_representative"));
                selectKeys.add("legal_representative");
                entitys.add(new ExcelExportEntity("联系电话(phone)" ,"phone"));
                selectKeys.add("phone");
                entitys.add(new ExcelExportEntity("邮箱(email)" ,"email"));
                selectKeys.add("email");
                entitys.add(new ExcelExportEntity("网站(website)" ,"website"));
                selectKeys.add("website");
                entitys.add(new ExcelExportEntity("地址(address)" ,"address"));
                selectKeys.add("address");
                entitys.add(new ExcelExportEntity("所属地区(province_id)" ,"province_id"));
                selectKeys.add("province_id");
                entitys.add(new ExcelExportEntity("经营范围(business_scope)" ,"business_scope"));
                selectKeys.add("business_scope");
                entitys.add(new ExcelExportEntity("备注(remark)" ,"remark"));
                selectKeys.add("remark");
                //tableFieldad9d92子表对象
                ExcelExportEntity tableFieldad9d92ExcelEntity = new ExcelExportEntity("设计子表(tableFieldad9d92)","tableFieldad9d92");
                List<ExcelExportEntity> tableFieldad9d92ExcelEntityList = new ArrayList<>();
                    tableFieldad9d92ExcelEntityList.add(new ExcelExportEntity("开户行(tableFieldad9d92-bank_name)" ,"bank_name"));
                    selectKeys.add("tableFieldad9d92-bank_name");
                    tableFieldad9d92ExcelEntityList.add(new ExcelExportEntity("账户名(tableFieldad9d92-bank_account_name)" ,"bank_account_name"));
                    selectKeys.add("tableFieldad9d92-bank_account_name");
                    tableFieldad9d92ExcelEntityList.add(new ExcelExportEntity("银行账号(tableFieldad9d92-bank_account_number)" ,"bank_account_number"));
                    selectKeys.add("tableFieldad9d92-bank_account_number");
                    tableFieldad9d92ExcelEntityList.add(new ExcelExportEntity("开户行城市(tableFieldad9d92-bank_province)" ,"bank_province"));
                    selectKeys.add("tableFieldad9d92-bank_province");
                    tableFieldad9d92ExcelEntityList.add(new ExcelExportEntity("备注(tableFieldad9d92-remark)" ,"remark"));
                    selectKeys.add("tableFieldad9d92-remark");
                tableFieldad9d92ExcelEntity.setList(tableFieldad9d92ExcelEntityList);
                if(tableFieldad9d92ExcelEntityList.size() > 0){
                    entitys.add(tableFieldad9d92ExcelEntity);
                }
                //tableField46dc53子表对象
                ExcelExportEntity tableField46dc53ExcelEntity = new ExcelExportEntity("设计子表(tableField46dc53)","tableField46dc53");
                List<ExcelExportEntity> tableField46dc53ExcelEntityList = new ArrayList<>();
                    tableField46dc53ExcelEntityList.add(new ExcelExportEntity("发票抬头名称(tableField46dc53-title_name)" ,"title_name"));
                    selectKeys.add("tableField46dc53-title_name");
                    tableField46dc53ExcelEntityList.add(new ExcelExportEntity("纳税人识别号(tableField46dc53-credit_code)" ,"credit_code"));
                    selectKeys.add("tableField46dc53-credit_code");
                    tableField46dc53ExcelEntityList.add(new ExcelExportEntity("纳税人类别(tableField46dc53-tax_type)" ,"tax_type"));
                    selectKeys.add("tableField46dc53-tax_type");
                    tableField46dc53ExcelEntityList.add(new ExcelExportEntity("地址(tableField46dc53-address)" ,"address"));
                    selectKeys.add("tableField46dc53-address");
                    tableField46dc53ExcelEntityList.add(new ExcelExportEntity("电话(tableField46dc53-phone)" ,"phone"));
                    selectKeys.add("tableField46dc53-phone");
                    tableField46dc53ExcelEntityList.add(new ExcelExportEntity("开户银行(tableField46dc53-bank_name)" ,"bank_name"));
                    selectKeys.add("tableField46dc53-bank_name");
                    tableField46dc53ExcelEntityList.add(new ExcelExportEntity("银行账户(tableField46dc53-bank_account)" ,"bank_account"));
                    selectKeys.add("tableField46dc53-bank_account");
                    tableField46dc53ExcelEntityList.add(new ExcelExportEntity("是否默认(tableField46dc53-is_defalut)" ,"is_defalut"));
                    selectKeys.add("tableField46dc53-is_defalut");
                    tableField46dc53ExcelEntityList.add(new ExcelExportEntity("是否有效(tableField46dc53-is_valid)" ,"is_valid"));
                    selectKeys.add("tableField46dc53-is_valid");
                    tableField46dc53ExcelEntityList.add(new ExcelExportEntity("备注(tableField46dc53-remark)" ,"remark"));
                    selectKeys.add("tableField46dc53-remark");
                tableField46dc53ExcelEntity.setList(tableField46dc53ExcelEntityList);
                if(tableField46dc53ExcelEntityList.size() > 0){
                    entitys.add(tableField46dc53ExcelEntity);
                }
        ExcelModel excelModel = generaterSwapUtil.getExcelParams(CompanyConstant.getFormData(),selectKeys);
        List<Map<String, Object>> list = new ArrayList<>();
        list.add(excelModel.getDataMap());

        ExportParams exportParams = new ExportParams(null, menuFullName + "模板");
        exportParams.setStyle(ExcelExportStyler.class);
        exportParams.setType(ExcelType.XSSF);
        try{
        @Cleanup Workbook workbook = new HSSFWorkbook();
        if (entitys.size()>0){
            if (list.size()==0){
                list.add(new HashMap<>());
            }
            //复杂表头-表头和数据处理
            ColumnDataModel columnDataModel = JsonUtil.getJsonToBean(CompanyConstant.getColumnData(), ColumnDataModel.class);
            List<HeaderModel> complexHeaderList = columnDataModel.getComplexHeaderList();
            if (!Objects.equals(columnDataModel.getType(), 3) && !Objects.equals(columnDataModel.getType(), 5)) {
                entitys = VisualUtils.complexHeaderHandel(entitys, complexHeaderList, false);
                list =  VisualUtils.complexHeaderDataHandel(list, complexHeaderList, false);
            }
            workbook = ExcelExportUtil.exportExcel(exportParams, entitys, list);
            ExcelHelper helper = new ExcelHelper();
            helper.init(workbook, exportParams, entitys, excelModel);
            helper.doPreHandle();
            helper.doPostHandle();
        }
        String fileName = menuFullName + "导入模板.xls";
        MultipartFile multipartFile = ExcelUtil.workbookToCommonsMultipartFile(workbook, fileName);
            String temporaryFilePath = configValueUtil.getTemporaryFilePath();
            FileInfo fileInfo = FileUploadUtils.uploadFile(multipartFile, temporaryFilePath, fileName);
        vo.setName(fileInfo.getFilename());
        vo.setUrl(UploaderUtil.uploaderFile(fileInfo.getFilename() + "#" + "Temporary") + "&name=" + fileName);
        } catch (Exception e) {
        log.error("模板信息导出Excel错误:{}", e.getMessage());
        e.printStackTrace();
        }
        return ActionResult.success(vo);
    }

    /**
    * 导入预览
    *
    * @return
    */
    @Operation(summary = "导入预览" )
    @GetMapping("/ImportPreview")
    public ActionResult<Map<String, Object>> ImportPreview(String fileName) throws Exception {
        Map<String, Object> headAndDataMap = new HashMap<>(2);
            String filePath = FileUploadUtils.getLocalBasePath() + configValueUtil.getTemporaryFilePath();
            FileUploadUtils.downLocal(configValueUtil.getTemporaryFilePath(), filePath, fileName);
        File temporary = new File(XSSEscape.escapePath(filePath + fileName));
            int headerRowIndex = 2;
        ImportParams params = new ImportParams();
        params.setTitleRows(0);
        params.setHeadRows(headerRowIndex);
        params.setNeedVerify(true);
        try {
            InputStream inputStream = ExcelUtil.solveOrginTitle(temporary, headerRowIndex);
            List<Map> excelDataList = ExcelUtil.importExcelByInputStream(inputStream, 0, headerRowIndex, Map.class);
            //数据超过1000条
            if(excelDataList != null && excelDataList.size() > 1000) {
                return ActionResult.fail(MsgCode.ETD117.get());
            }

            ColumnDataModel columnDataModel = JsonUtil.getJsonToBean(CompanyConstant.getColumnData(), ColumnDataModel.class);
            UploaderTemplateModel uploaderTemplateModel = JsonUtil.getJsonToBean(columnDataModel.getUploaderTemplateJson(), UploaderTemplateModel.class);
            List<String> selectKey = uploaderTemplateModel.getSelectKey();
            //子表合并
            List<Map<String, Object>> results = FormExecelUtils.dataMergeChildTable(excelDataList,selectKey);
            // 导入字段
            List<ExcelImFieldModel> columns = new ArrayList<>();
            columns.add(new ExcelImFieldModel("company_name","企业名称","input"));
            columns.add(new ExcelImFieldModel("credit_code","社会信用代码","input"));
            columns.add(new ExcelImFieldModel("org_id","归属组织","organizeSelect"));
            columns.add(new ExcelImFieldModel("company_code","企业编码","billRule"));
            columns.add(new ExcelImFieldModel("short_name","简称/昵称","input"));
            columns.add(new ExcelImFieldModel("entity_type","类型","radio"));
            columns.add(new ExcelImFieldModel("tax_type","纳税人类别","select"));
            columns.add(new ExcelImFieldModel("enterprise_scale","企业规模","select"));
            columns.add(new ExcelImFieldModel("enterprise_nature","企业类型","select"));
            columns.add(new ExcelImFieldModel("industry_code","行业代码","select"));
            columns.add(new ExcelImFieldModel("registration_date","成立日期","datePicker"));
            columns.add(new ExcelImFieldModel("registered_capital","注册资本","inputNumber"));
            columns.add(new ExcelImFieldModel("legal_representative","法定代表人","input"));
            columns.add(new ExcelImFieldModel("phone","联系电话","input"));
            columns.add(new ExcelImFieldModel("email","邮箱","input"));
            columns.add(new ExcelImFieldModel("website","网站","input"));
            columns.add(new ExcelImFieldModel("address","地址","input"));
            columns.add(new ExcelImFieldModel("province_id","所属地区","areaSelect"));
            columns.add(new ExcelImFieldModel("business_scope","经营范围","textarea"));
            columns.add(new ExcelImFieldModel("remark","备注","textarea"));
            //tableFieldad9d92子表对象
            List<ExcelImFieldModel> tableFieldad9d92columns = new ArrayList<>();
                tableFieldad9d92columns.add(new ExcelImFieldModel("bank_name" ,"开户行"));
                tableFieldad9d92columns.add(new ExcelImFieldModel("bank_account_name" ,"账户名"));
                tableFieldad9d92columns.add(new ExcelImFieldModel("bank_account_number" ,"银行账号"));
                tableFieldad9d92columns.add(new ExcelImFieldModel("bank_province" ,"开户行城市"));
                tableFieldad9d92columns.add(new ExcelImFieldModel("remark" ,"备注"));
            columns.add(new ExcelImFieldModel("tableFieldad9d92","设计子表","table",tableFieldad9d92columns));
            //tableField46dc53子表对象
            List<ExcelImFieldModel> tableField46dc53columns = new ArrayList<>();
                tableField46dc53columns.add(new ExcelImFieldModel("title_name" ,"发票抬头名称"));
                tableField46dc53columns.add(new ExcelImFieldModel("credit_code" ,"纳税人识别号"));
                tableField46dc53columns.add(new ExcelImFieldModel("tax_type" ,"纳税人类别"));
                tableField46dc53columns.add(new ExcelImFieldModel("address" ,"地址"));
                tableField46dc53columns.add(new ExcelImFieldModel("phone" ,"电话"));
                tableField46dc53columns.add(new ExcelImFieldModel("bank_name" ,"开户银行"));
                tableField46dc53columns.add(new ExcelImFieldModel("bank_account" ,"银行账户"));
                tableField46dc53columns.add(new ExcelImFieldModel("is_defalut" ,"是否默认"));
                tableField46dc53columns.add(new ExcelImFieldModel("is_valid" ,"是否有效"));
                tableField46dc53columns.add(new ExcelImFieldModel("remark" ,"备注"));
            columns.add(new ExcelImFieldModel("tableField46dc53","设计子表","table",tableField46dc53columns));
            headAndDataMap.put("dataRow" , results);
            headAndDataMap.put("headerRow" , JsonUtil.getJsonToList(JsonUtil.getListToJsonArray(columns)));
            } catch (Exception e){
            e.printStackTrace();
            return ActionResult.fail(MsgCode.VS407.get());
        }
        return ActionResult.success(headAndDataMap);
    }

    /**
    * 导入数据
    *
    * @return
    */
    @Operation(summary = "导入数据" )
    @PostMapping("/ImportData")
    public ActionResult<ExcelImportModel> ImportData(@RequestBody VisualImportModel visualImportModel) throws Exception {
        List<Map<String, Object>> listData = visualImportModel.getList();
        ImportFormCheckUniqueModel uniqueModel = new ImportFormCheckUniqueModel();
        uniqueModel.setDbLinkId(CompanyConstant.DBLINKID);
        uniqueModel.setUpdate(Objects.equals("2", "2"));

        Map<String,String> tablefieldkey = new HashMap<>();
        for(String key:CompanyConstant.TABLEFIELDKEY.keySet()){
        tablefieldkey.put(key,CompanyConstant.TABLERENAMES.get(CompanyConstant.TABLEFIELDKEY.get(key)));
        }
        ExcelImportModel excelImportModel = generaterSwapUtil.importData(CompanyConstant.getFormData(),listData,uniqueModel, tablefieldkey,CompanyConstant.getTableList());
        List<ImportDataModel> importDataModel = uniqueModel.getImportDataModel();
        for (ImportDataModel model : importDataModel) {
            String id = model.getId();
            Map<String, Object> result = model.getResultData();
            if(StringUtil.isNotEmpty(id)){
                update(id, JsonUtil.getJsonToBean(result,CompanyForm.class), true);
            }else {
                create( JsonUtil.getJsonToBean(result,CompanyForm.class));
            }
        }
        return ActionResult.success(excelImportModel);
    }

    /**
    * 导出异常报告
    *
    * @return
    */
    @Operation(summary = "导出异常报告")
    @PostMapping("/ImportExceptionData")
    public ActionResult<DownloadVO> ImportExceptionData(@RequestBody VisualImportModel visualImportModel) {
        DownloadVO vo = DownloadVO.builder().build();
        UserInfo userInfo = userProvider.get();
        String menuFullName = generaterSwapUtil.getMenuName(visualImportModel.getMenuId());
        //主表对象
        List<ExcelExportEntity> entitys = new ArrayList<>();
        entitys.add(new ExcelExportEntity("异常原因", "errorsInfo",30));
        List<String> selectKeys = new ArrayList<>();
        //以下添加字段
                entitys.add(new ExcelExportEntity("企业名称(company_name)" ,"company_name"));
                selectKeys.add("company_name");
                entitys.add(new ExcelExportEntity("社会信用代码(credit_code)" ,"credit_code"));
                selectKeys.add("credit_code");
                entitys.add(new ExcelExportEntity("归属组织(org_id)" ,"org_id"));
                selectKeys.add("org_id");
                entitys.add(new ExcelExportEntity("企业编码(company_code)" ,"company_code"));
                selectKeys.add("company_code");
                entitys.add(new ExcelExportEntity("简称/昵称(short_name)" ,"short_name"));
                selectKeys.add("short_name");
                entitys.add(new ExcelExportEntity("类型(entity_type)" ,"entity_type"));
                selectKeys.add("entity_type");
                entitys.add(new ExcelExportEntity("纳税人类别(tax_type)" ,"tax_type"));
                selectKeys.add("tax_type");
                entitys.add(new ExcelExportEntity("企业规模(enterprise_scale)" ,"enterprise_scale"));
                selectKeys.add("enterprise_scale");
                entitys.add(new ExcelExportEntity("企业类型(enterprise_nature)" ,"enterprise_nature"));
                selectKeys.add("enterprise_nature");
                entitys.add(new ExcelExportEntity("行业代码(industry_code)" ,"industry_code"));
                selectKeys.add("industry_code");
                entitys.add(new ExcelExportEntity("成立日期(registration_date)" ,"registration_date"));
                selectKeys.add("registration_date");
                entitys.add(new ExcelExportEntity("注册资本(registered_capital)" ,"registered_capital"));
                selectKeys.add("registered_capital");
                entitys.add(new ExcelExportEntity("法定代表人(legal_representative)" ,"legal_representative"));
                selectKeys.add("legal_representative");
                entitys.add(new ExcelExportEntity("联系电话(phone)" ,"phone"));
                selectKeys.add("phone");
                entitys.add(new ExcelExportEntity("邮箱(email)" ,"email"));
                selectKeys.add("email");
                entitys.add(new ExcelExportEntity("网站(website)" ,"website"));
                selectKeys.add("website");
                entitys.add(new ExcelExportEntity("地址(address)" ,"address"));
                selectKeys.add("address");
                entitys.add(new ExcelExportEntity("所属地区(province_id)" ,"province_id"));
                selectKeys.add("province_id");
                entitys.add(new ExcelExportEntity("经营范围(business_scope)" ,"business_scope"));
                selectKeys.add("business_scope");
                entitys.add(new ExcelExportEntity("备注(remark)" ,"remark"));
                selectKeys.add("remark");
                //tableFieldad9d92子表对象
                ExcelExportEntity tableFieldad9d92ExcelEntity = new ExcelExportEntity("设计子表(tableFieldad9d92)","tableFieldad9d92");
                List<ExcelExportEntity> tableFieldad9d92ExcelEntityList = new ArrayList<>();
                    tableFieldad9d92ExcelEntityList.add(new ExcelExportEntity("开户行(tableFieldad9d92-bank_name)" ,"bank_name"));
                    selectKeys.add("tableFieldad9d92-bank_name");
                    tableFieldad9d92ExcelEntityList.add(new ExcelExportEntity("账户名(tableFieldad9d92-bank_account_name)" ,"bank_account_name"));
                    selectKeys.add("tableFieldad9d92-bank_account_name");
                    tableFieldad9d92ExcelEntityList.add(new ExcelExportEntity("银行账号(tableFieldad9d92-bank_account_number)" ,"bank_account_number"));
                    selectKeys.add("tableFieldad9d92-bank_account_number");
                    tableFieldad9d92ExcelEntityList.add(new ExcelExportEntity("开户行城市(tableFieldad9d92-bank_province)" ,"bank_province"));
                    selectKeys.add("tableFieldad9d92-bank_province");
                    tableFieldad9d92ExcelEntityList.add(new ExcelExportEntity("备注(tableFieldad9d92-remark)" ,"remark"));
                    selectKeys.add("tableFieldad9d92-remark");
                tableFieldad9d92ExcelEntity.setList(tableFieldad9d92ExcelEntityList);
                entitys.add(tableFieldad9d92ExcelEntity);
                //tableField46dc53子表对象
                ExcelExportEntity tableField46dc53ExcelEntity = new ExcelExportEntity("设计子表(tableField46dc53)","tableField46dc53");
                List<ExcelExportEntity> tableField46dc53ExcelEntityList = new ArrayList<>();
                    tableField46dc53ExcelEntityList.add(new ExcelExportEntity("发票抬头名称(tableField46dc53-title_name)" ,"title_name"));
                    selectKeys.add("tableField46dc53-title_name");
                    tableField46dc53ExcelEntityList.add(new ExcelExportEntity("纳税人识别号(tableField46dc53-credit_code)" ,"credit_code"));
                    selectKeys.add("tableField46dc53-credit_code");
                    tableField46dc53ExcelEntityList.add(new ExcelExportEntity("纳税人类别(tableField46dc53-tax_type)" ,"tax_type"));
                    selectKeys.add("tableField46dc53-tax_type");
                    tableField46dc53ExcelEntityList.add(new ExcelExportEntity("地址(tableField46dc53-address)" ,"address"));
                    selectKeys.add("tableField46dc53-address");
                    tableField46dc53ExcelEntityList.add(new ExcelExportEntity("电话(tableField46dc53-phone)" ,"phone"));
                    selectKeys.add("tableField46dc53-phone");
                    tableField46dc53ExcelEntityList.add(new ExcelExportEntity("开户银行(tableField46dc53-bank_name)" ,"bank_name"));
                    selectKeys.add("tableField46dc53-bank_name");
                    tableField46dc53ExcelEntityList.add(new ExcelExportEntity("银行账户(tableField46dc53-bank_account)" ,"bank_account"));
                    selectKeys.add("tableField46dc53-bank_account");
                    tableField46dc53ExcelEntityList.add(new ExcelExportEntity("是否默认(tableField46dc53-is_defalut)" ,"is_defalut"));
                    selectKeys.add("tableField46dc53-is_defalut");
                    tableField46dc53ExcelEntityList.add(new ExcelExportEntity("是否有效(tableField46dc53-is_valid)" ,"is_valid"));
                    selectKeys.add("tableField46dc53-is_valid");
                    tableField46dc53ExcelEntityList.add(new ExcelExportEntity("备注(tableField46dc53-remark)" ,"remark"));
                    selectKeys.add("tableField46dc53-remark");
                tableField46dc53ExcelEntity.setList(tableField46dc53ExcelEntityList);
                entitys.add(tableField46dc53ExcelEntity);
        ExcelModel excelModel = generaterSwapUtil.getExcelParams(CompanyConstant.getFormData(),selectKeys);
        List<Map<String, Object>> list = new ArrayList<>();
        list.addAll(visualImportModel.getList());

        ExportParams exportParams = new ExportParams(null, menuFullName + "模板");
        exportParams.setStyle(ExcelExportStyler.class);
        exportParams.setType(ExcelType.XSSF);
        exportParams.setFreezeCol(1);
        try{
            @Cleanup Workbook workbook = new HSSFWorkbook();
            if (entitys.size()>0){
                if (list.size()==0){
                    list.add(new HashMap<>());
                }
                //复杂表头-表头和数据处理
                ColumnDataModel columnDataModel = JsonUtil.getJsonToBean(CompanyConstant.getColumnData(), ColumnDataModel.class);
                List<HeaderModel> complexHeaderList = columnDataModel.getComplexHeaderList();
                if (!Objects.equals(columnDataModel.getType(), 3) && !Objects.equals(columnDataModel.getType(), 5)) {
                    entitys = VisualUtils.complexHeaderHandel(entitys, complexHeaderList, false);
                    list =  VisualUtils.complexHeaderDataHandel(list, complexHeaderList, false);
                }

                workbook = ExcelExportUtil.exportExcel(exportParams, entitys, list);
                ExcelHelper helper = new ExcelHelper();
                helper.init(workbook, exportParams, entitys, excelModel);
                helper.doPreHandle();
                helper.doPostHandle();
            }

            String fileName = menuFullName + "错误报告_" + DateUtil.dateNow("yyyyMMddHHmmss") + ".xls";
            MultipartFile multipartFile = ExcelUtil.workbookToCommonsMultipartFile(workbook, fileName);
            String temporaryFilePath = configValueUtil.getTemporaryFilePath();
            FileInfo fileInfo = FileUploadUtils.uploadFile(multipartFile, temporaryFilePath, fileName);
            vo.setName(fileInfo.getFilename());
            vo.setUrl(UploaderUtil.uploaderFile(fileInfo.getFilename() + "#" + "Temporary") + "&name=" + fileName);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return ActionResult.success(vo);
    }
    /**
    * 删除
    * @param id
    * @return
    */
    @Operation(summary = "删除")
    @DeleteMapping("/{id}")
    @Transactional
    public ActionResult delete(@PathVariable("id") String id,@RequestParam(name = "forceDel",defaultValue = "false") boolean forceDel) throws Exception{
        CompanyEntity entity= companyService.getInfo(id);
        if(entity!=null){
            //主表数据删除
            companyService.delete(entity);
            QueryWrapper<CompanyBankEntity> queryWrapperMdmCompanyBank=new QueryWrapper<>();
            queryWrapperMdmCompanyBank.lambda().eq(CompanyBankEntity::getCompanyId,entity.getCompanyId());
            //子表数据删除
            mdmCompanyBankService.remove(queryWrapperMdmCompanyBank);
            QueryWrapper<CompanyInvoiceEntity> queryWrapperCompanyInvoice=new QueryWrapper<>();
            queryWrapperCompanyInvoice.lambda().eq(CompanyInvoiceEntity::getCompanyId,entity.getCompanyId());
            //子表数据删除
            companyInvoiceService.remove(queryWrapperCompanyInvoice);
        }
        return ActionResult.success(MsgCode.SU003.get());
    }
    /**
    * 批量删除
    * @param obj
    * @return
    */
    @DeleteMapping("/batchRemove")
    @Transactional
    @Operation(summary = "批量删除")
    public ActionResult batchRemove(@RequestBody Object obj){
    Map<String, Object> objectMap = JsonUtil.entityToMap(obj);
    List<String> idList = JsonUtil.getJsonToList(objectMap.get("ids"), String.class);
    String errInfo = "";
    List<String> successList = new ArrayList<>();
        for (String allId : idList){
            try {
                this.delete(allId,false);
                successList.add(allId);
            } catch (Exception e) {
                errInfo = e.getMessage();
            }
        }
        if (successList.size() == 0 && StringUtil.isNotEmpty(errInfo)){
            return ActionResult.fail(errInfo);
        }
        return ActionResult.success(MsgCode.SU003.get());
    }
    /**
    * 编辑
    * @param id
    * @param companyForm
    * @return
    */
    @PutMapping("/{id}")
    @Operation(summary = "更新")
    public ActionResult update(@PathVariable("id") String id,@RequestBody @Valid CompanyForm companyForm,
                                @RequestParam(value = "isImport", required = false) boolean isImport){
        CompanyEntity entity= companyService.getInfo(id);
        if(entity!=null){
            companyForm.setCompanyId(String.valueOf(entity.getCompanyId()));

            if (!isImport) {
                String b =  companyService.checkForm(companyForm,1);
                if (StringUtil.isNotEmpty(b)){
                    return ActionResult.fail(b );
                }
            }

            try{
                companyService.saveOrUpdate(companyForm,id,false);
            }catch (DataException e1){
                return ActionResult.fail(e1.getMessage());
            }catch(Exception e){
                return ActionResult.fail(MsgCode.FA029.get());
            }
            return ActionResult.success(MsgCode.SU004.get());
        }else{
            return ActionResult.fail(MsgCode.FA002.get());
        }
    }
    /**
    * 表单信息(详情页)
    * 详情页面使用-转换数据
    * @param id
    * @return
    */
    @Operation(summary = "表单信息(详情页)")
    @GetMapping("/detail/{id}")
    public ActionResult detailInfo(@PathVariable("id") String id){
        CompanyEntity entity= companyService.getInfo(id);
        if(entity==null){
            return ActionResult.fail(MsgCode.FA001.get());
        }
        Map<String, Object> companyMap=JsonUtil.entityToMap(entity);
        companyMap.put("id", companyMap.get("company_id"));
        //副表数据
        //子表数据
        List<CompanyBankEntity> mdmCompanyBankList = entity.getCompanyBank();
        companyMap.put("tableFieldad9d92",JsonUtil.getJsonToList(JsonUtil.getListToJsonArray(mdmCompanyBankList)));
        companyMap.put("mdmCompanyBankList",JsonUtil.getJsonToList(JsonUtil.getListToJsonArray(mdmCompanyBankList)));
        List<CompanyInvoiceEntity> companyInvoiceList = entity.getCompanyInvoice();
        companyMap.put("tableField46dc53",JsonUtil.getJsonToList(JsonUtil.getListToJsonArray(companyInvoiceList)));
        companyMap.put("companyInvoiceList",JsonUtil.getJsonToList(JsonUtil.getListToJsonArray(companyInvoiceList)));
        boolean isPc = "pc".equals(ServletUtil.getHeader("yunzhupaas-origin" ));
        companyMap = generaterSwapUtil.swapDataDetail(companyMap,CompanyConstant.getFormData(),"806858527036409349",isPc?false:false);
        //子表数据
        companyMap.put("mdmCompanyBankList",companyMap.get("tableFieldad9d92"));
        companyMap.put("companyInvoiceList",companyMap.get("tableField46dc53"));
        return ActionResult.success(companyMap);
    }
    /**
    * 获取详情(编辑页)
    * 编辑页面使用-不转换数据
    * @param id
    * @return
    */
    @Operation(summary = "信息")
    @GetMapping("/{id}")
    public ActionResult info(@PathVariable("id") String id){
        CompanyEntity entity= companyService.getInfo(id);
        if(entity==null){
            return ActionResult.fail(MsgCode.FA001.get());
        }
        Map<String, Object> companyMap=JsonUtil.entityToMap(entity);
        companyMap.put("id", companyMap.get("company_id"));
        //副表数据
        //子表数据
        List<CompanyBankEntity> mdmCompanyBankList = entity.getCompanyBank();
        companyMap.put("tableFieldad9d92",JsonUtil.getJsonToList(JsonUtil.getListToJsonArray(mdmCompanyBankList)));
        companyMap.put("mdmCompanyBankList",JsonUtil.getJsonToList(JsonUtil.getListToJsonArray(mdmCompanyBankList)));
        List<CompanyInvoiceEntity> companyInvoiceList = entity.getCompanyInvoice();
        companyMap.put("tableField46dc53",JsonUtil.getJsonToList(JsonUtil.getListToJsonArray(companyInvoiceList)));
        companyMap.put("companyInvoiceList",JsonUtil.getJsonToList(JsonUtil.getListToJsonArray(companyInvoiceList)));
        companyMap = generaterSwapUtil.swapDataForm(companyMap,CompanyConstant.getFormData(),CompanyConstant.TABLEFIELDKEY,CompanyConstant.TABLERENAMES);
        return ActionResult.success(companyMap);
    }

}
