/** * [FrameNumUploadController 进口单证上传] * @Author lijinhuan * @DateTime 2022-11-04T18:31:03+0800 * @return [进口单证上传] */ public with sharing class FrameNumUploadController { public Integer detailCountLimit{get;private set;} public FrameNumUploadController() { detailCountLimit = 10000; } public void importCSVFile() { String csvData = ApexPages.currentPage().getParameters().get('csvData'); List> tempCsvBody = CSVReader.readIETFRFC4180CSVFile(Blob.valueof(csvData)); // 全部CSV数据 List importLabelList = tempCsvBody[0]; // CSV读入的标题行 // List fnmList = new List(); Map fnmMap = new Map(); Integer importLine = 0; List warningList = new List(); Map labelToApiMap = createLabelApiMap(); Map queryFrameNumFieldMap = FrameNumManage__c.getSObjectType().getDescribe().fields.getMap(); for (Integer i = 1; i < tempCsvBody.size(); i++) { FrameNumManage__c tempFnm = new FrameNumManage__c(); for (Integer j = 0; j < importLabelList.size(); j++) { String api = labelToApiMap.get(importLabelList[j]); if (queryFrameNumFieldMap.containsKey(api) == false) { throw new ControllerUtil.myException('字段:【' + importLabelList[j] + '】在' + FrameNumManage__c.getSObjectType().getDescribe().getLabel() + '里不存在, 请确认。'); } DescribeFieldResult queryAssetFieldResult = queryFrameNumFieldMap.get(api).getDescribe(); if (String.isNotBlank(tempCsvBody[i][j])){ String value = String.valueOf(tempCsvBody[i][j]).trim(); if (queryAssetFieldResult.getType() == Schema.DisplayType.Date) { value = value.replace('/', '-'); tempFnm.put(api, Date.valueOf(value)); } else if (queryAssetFieldResult.getType() == Schema.DisplayType.Boolean) { tempFnm.put(api, Boolean.valueOf(value)); } else if (queryAssetFieldResult.getType() == Schema.DisplayType.Double) { tempFnm.put(api, Decimal.valueOf(value)); } else { tempFnm.put(api, value); } } } String managementCode = tempFnm.ManagementCode__c; String key = tempFnm.SerialNumber__c+'('+tempFnm.ManagementCode__c+')'; tempFnm.SerialNumberS__c = key; tempFnm.name = tempFnm.ManagementCode__c; if(String.isBlank(managementCode)){ throw new ControllerUtil.myException('【' + queryFrameNumFieldMap.get('ManagementCode__c').getDescribe().getLabel() + '】不可为空' + tempFnm); }else if(fnmMap.containsKey(key)){ throw new ControllerUtil.myException('【' + queryFrameNumFieldMap.get('ManagementCode__c').getDescribe().getLabel() + '】存在多条数据' + tempFnm); } else{ fnmMap.put(key,tempFnm); } } // 执行插入/更新 if(fnmMap.size() > 0){ /*List tempList = [SELECT Id,SerialNumberS__c FROM FrameNumManage__c WHERE SerialNumberS__c IN :fnmMap.keySet()]; IF(tempList.size() > 0){ for(FrameNumManage__c temp:tempList){ FrameNumManage__c fnm = new FrameNumManage__c(); fnm = fnmMap.get(temp.SerialNumberS__c); fnm.put('Id',temp.Id); fnmMap.put(temp.SerialNumberS__c,fnm); } } Database.UpsertResult[] urList = Database.upsert(fnmMap.values(),FrameNumManage__c.Id,false); */ Database.UpsertResult[] urList = Database.upsert(fnmMap.values(),FrameNumManage__c.SerialNumberS__c,false); for (Integer tIdx = 0; tIdx < urList.size(); tIdx++) { Database.UpsertResult sr = urList[tIdx]; if (!sr.isSuccess()) { String errStr = ''; Database.Error emsg = sr.getErrors()[0]; errStr = emsg.getMessage(); warningList.add(errStr); }else{ importLine++; } } for(Integer i = 0; i < Math.min(5, warningList.size()); i++){ ApexPages.addMessage(new ApexPages.Message(ApexPages.severity.WARNING, warningList[i])); } if (warningList.size() > 0) { ApexPages.addMessage(new ApexPages.Message(ApexPages.severity.WARNING, warningList.size() + '条记录插入/更新失败')); } if(importLine == 0) { ApexPages.addMessage(new ApexPages.Message(ApexPages.severity.WARNING, '未导入任何数据,请检查CSV文件')); } else { String importSuccessfulMsg = '导入CSV文件完成,成功导入' + importLine + '条数据。'; ApexPages.addMessage(new ApexPages.Message(ApexPages.severity.INFO, importSuccessfulMsg)); // 调用batch Database.executeBatch(new SetFrameNumManageBatch(), 100); } } } private Map createLabelApiMap(){ Map apiMap = new Map(); Map mfields = FrameNumManage__c.sObjectType.getDescribe().fields.getMap(); for(String strField:mfields.keySet()) { SObjectField fl = mfields.get(strField); apiMap.put(fl.getDescribe().getlabel(), strField); } return apiMap; } }