public with sharing class SetProvinceTargetController { // 当前期 public String currentPeriod { get; private set; } public String currentPeriodOld;//20210225 ljh WLIG-BV8CHF add 财年 // 上年度按钮制御 public boolean previousRendered { get; private set; } // 下年度按钮制御 public boolean nextRendered { get; private set; } // 数据集 public List dataBeans { get; set; } // 金额分类 public List opportunity_category { get; private set; } // 是否是过去年度 public Boolean isPast { get; private set; } // 年度変化時セーブかどうか public Boolean saveFlg { get; set; } // 本部の選択値 public String salesDpt { get; set; } public SetProvinceTargetController() { //Apexpages.currentPage().getHeaders().put('X-UA-Compatible', 'IE=8'); } // 本部プルダウン public List getSalesDptOpts() { List salesDpt = new List(); salesDpt.add(new SelectOption('0.无','--无--')); salesDpt.add(new SelectOption('1.华北','1.华北')); salesDpt.add(new SelectOption('2.东北','2.东北')); salesDpt.add(new SelectOption('3.西北','3.西北')); salesDpt.add(new SelectOption('4.华东','4.华东')); salesDpt.add(new SelectOption('5.华南','5.华南')); salesDpt.add(new SelectOption('6.西南','6.西南')); return salesDpt; } // 现在年度 private Integer currentYear; // 当前年度 private Integer iYear; private String target_category; // 省目标 public User loginUser { get; set; } // 登陆用户 private RecordType rt; // 目标的数据类型 private Map> proportion; // 比重 private Map> salesDptMap; //本部-省对应关系 private Map provinceMap; //省-本部对应关系 // 既存目标数据 private Map oppsMap; // 金额分类 //private static String[] amountCategory = new String[] {'GI','ET','BF','GS','URO','GYN','ENT','OTH'}; //省目标(SetProvinceTarget):隐藏OTH。追加ENG。 private static String[] amountCategory = new String[] {'GI','ET','BF','GS','URO','GYN','ENT','ENG'}; //CHAN-BDQBLX 20210129 you start public string csvAsString {get; set;} public String[] csvFileLines {get; set;} private static String[] titlepage = new String[] {'销售本部', '省', '担当','GI', 'ET', 'BF', 'GS', 'URO', 'GYN', 'ENT', 'ENG'}; public Integer detailCountLimit{get;private set;} private Map oppsMap1; private List upsertAMPList ; private List deleteAMPList ; //CHAN-BDQBLX 20210129 you end // 画面初始化 public Pagereference init() { //CHAN-BDQBLX 20210129 you start oppsMap1 = new Map(); detailCountLimit = 10000; upsertAMPList = new List(); deleteAMPList = new List(); //CHAN-BDQBLX 20210129 you end // 现在时间 Date dateNow = Date.today(); Integer year = dateNow.year(); Integer month = dateNow.month(); if (month < 4) { year -= 1; } // 初始化 currentYear = year; iYear = year; isPast = false; if (month == 3) isPast = true; //20210225 ljh WLIG-BV8CHF update 财年 start //currentPeriod = String.valueOf(iYear - 1867 + 'P'); currentPeriodOld = String.valueOf(iYear - 1867 + 'P'); Integer tempiYear = iYear+1; currentPeriod = String.valueOf('FY'+tempiYear); //20210225 ljh WLIG-BV8CHF update 财年 end previousRendered = true; nextRendered = true; saveFlg = false; // 金额分类 opportunity_category = amountCategory; // 每月比重 if (proportion == null) { proportion = new Map>(); String strObjectiveProportionGI = System.Label.ObjectiveProportionGI; List objectiveProportionGI = strObjectiveProportionGI.split(','); List doubleGI = new List(); for (String strGI : objectiveProportionGI) { doubleGI.add(Double.valueOf(strGI)); } proportion.put('GI', doubleGI); String strObjectiveProportionET = System.Label.ObjectiveProportionET; List objectiveProportionET = strObjectiveProportionET.split(','); List doubleET = new List(); for (String strET : objectiveProportionET) { doubleET.add(Double.valueOf(strET)); } proportion.put('ET', doubleET); String strObjectiveProportionBF = System.Label.ObjectiveProportionBF; List objectiveProportionBF = strObjectiveProportionBF.split(','); List doubleBF = new List(); for (String strBF : objectiveProportionBF) { doubleBF.add(Double.valueOf(strBF)); } proportion.put('BF', doubleBF); String strObjectiveProportionGS = System.Label.ObjectiveProportionGS; List objectiveProportionGS = strObjectiveProportionGS.split(','); List doubleGS = new List(); for (String strGS : objectiveProportionGS) { doubleGS.add(Double.valueOf(strGS)); } proportion.put('GS', doubleGS); String strObjectiveProportionURO = System.Label.ObjectiveProportionURO; List objectiveProportionURO = strObjectiveProportionURO.split(','); List doubleURO = new List(); for (String strURO : objectiveProportionURO) { doubleURO.add(Double.valueOf(strURO)); } proportion.put('URO', doubleURO); String strObjectiveProportionGYN = System.Label.ObjectiveProportionGYN; List objectiveProportionGYN = strObjectiveProportionGYN.split(','); List doubleGYN = new List(); for (String strGYN : objectiveProportionGYN) { doubleGYN.add(Double.valueOf(strGYN)); } proportion.put('GYN', doubleGYN); String strObjectiveProportionENT = System.Label.ObjectiveProportionENT; List objectiveProportionENT = strObjectiveProportionENT.split(','); List doubleENT = new List(); for (String strENT : objectiveProportionENT) { doubleENT.add(Double.valueOf(strENT)); } proportion.put('ENT', doubleENT); String strObjectiveProportionOTH = System.Label.ObjectiveProportionOTH; List objectiveProportionOTH = strObjectiveProportionOTH.split(','); List doubleOTH = new List(); for (String strOTH : objectiveProportionOTH) { doubleOTH.add(Double.valueOf(strOTH)); } proportion.put('OTH', doubleOTH); String strObjectiveProportionENG = System.Label.ObjectiveProportionENG; List objectiveProportionENG = strObjectiveProportionENG.split(','); List doubleENG = new List(); for (String strENG : objectiveProportionENG) { doubleENG.add(Double.valueOf(strENG)); } proportion.put('ENG', doubleENG); proportion.put('_ENG', doubleENG); } // 当前用户信息 if (loginUser == null) { loginUser = [Select Id, Salesdepartment__c, ProfileId From User where Id = :Userinfo.getUserId()]; } getsalesDptMap(); salesDpt = '0.无'; // 所有本年度属于省目标的目标 if (target_category == null) { target_category = '省目标'; } // 目标的数据类型 if (rt == null) { rt = [select Id from RecordType where SobjectType = 'Opportunity' and IsActive = true and DeveloperName = 'Target']; } // 数据赋值 setBean(iYear); return null; } //SWAG-BB48QB 判断当前时间是否是4月15日之后 start private boolean checkCurrentDate(){ boolean dateResult = true; Date today = Date.today(); Date date415 = Date.newInstance(today.year(), 4, Integer.valueOf(System.Label.SetPersonalTarget_buffer_day)); if(iYear >= currentYear -1 && today <= date415 ) dateResult = false; return dateResult; } //SWAG-BB48QB 判断当前时间是否是4月15日之后 end // // 点击上年度 public void previous() { if (saveFlg) { this.saveLogic(); } iYear -= 1; //20210225 ljh WLIG-BV8CHF update 财年 start //currentPeriod = String.valueOf(iYear - 1867 + 'P'); currentPeriodOld = String.valueOf(iYear - 1867 + 'P'); Integer tempiYear = iYear+1; currentPeriod = String.valueOf('FY'+tempiYear); //20210225 ljh WLIG-BV8CHF update 财年 end // 是否是过去数据 isPast = false; //SWAG-BB48QB 判断当前时间是否是4月15日之后 start if (iYear < currentYear && checkCurrentDate()) { isPast = true; } //else if (iYear == currentYear) { // if (Date.today().month() == 3) { // isPast = true; // } //} //SWAG-BB48QB 判断当前时间是否是4月15日之后 end previousRendered = true; nextRendered = true; // 数据赋值 setBean(iYear); } // 点击下年度 public void next() { if (saveFlg) { this.saveLogic(); } iYear += 1; //20210225 ljh WLIG-BV8CHF update 财年 start //currentPeriod = String.valueOf(iYear - 1867 + 'P'); currentPeriodOld = String.valueOf(iYear - 1867 + 'P'); Integer tempiYear = iYear+1; currentPeriod = String.valueOf('FY'+tempiYear); //20210225 ljh WLIG-BV8CHF update 财年 end // 是否是过去数据 isPast = false; //SWAG-BB48QB 判断当前时间是否是4月15日之后 start if (iYear < currentYear && checkCurrentDate()) { isPast = true; } //else if (iYear == currentYear) { // if (Date.today().month() == 3) { // isPast = true; // } //} //SWAG-BB48QB 判断当前时间是否是4月15日之后 end previousRendered = true; nextRendered = true; // 只显示到现在时间的下一年数据 if (iYear > currentYear) { nextRendered = false; } // 数据赋值 setBean(iYear); } // 本部プルダウン変更時の処理 public void searchByDpt() { if (saveFlg) { this.saveLogic(); } setBean(iYear); } //CHAN-BDQBLX 20210129 you start 导出方法 public Pagereference exportBycsv() { setBean(iYear); system.debug('进来了'); return page.SetProvinceTargetcsv; } //导入方法 public PageReference importCSVFile() { String csvData = ApexPages.currentPage().getParameters().get('csvData'); // 将内容转换成为中文 if(!Test.isRunningTest()){ //csvAsString = bitToString(csvFileBody, 'gb2312'); csvAsString = csvData; system.debug('==csvAsString=='+csvAsString); } // 拆成每一行 csvFileLines = csvAsString.split('\n'); system.debug(csvFileLines.size()); Boolean ValFlag = false; String exportByVal = ''; ApexPages.Message successMsg = new ApexPages.Message(ApexPages.severity.INFO, ''); // 需要根据情况来解析,查看表头是否一致 if (csvFileLines.size() > 0) { string[] titlecsv = csvFileLines[0].trim().split(',');// system.debug(titlecsv + '==titlepage==' + titlepage); for (integer j = 0; j < titlecsv.size(); j++) { if (!titlepage.contains(titlecsv[j])) { system.debug('表头不一致得列===' + titlecsv[j]); ValFlag = true; exportByVal = '表头不一致,请严格按照导出模板填写'; break; } } } if (ValFlag) { successMsg = new ApexPages.Message(ApexPages.severity.INFO, exportByVal); ApexPages.addMessage(successMsg); } else { List UserInfoList = new List(); Map> szMap = new Map>(); Set sfs = new Set();//省份 for (Integer i = 1; i < csvFileLines.size(); i++) { string[] csvRecordData = csvFileLines[i].split(','); if (csvRecordData.size() > 0) { String bu = csvRecordData[0].replace(' ', '');//销售本部 String sf = csvRecordData[1].replace(' ', '');//省 String dandang = csvRecordData[2].replace(' ', '');//担当 if(String.isNotBlank(dandang)){ UserInfoList.add(dandang);//根据 担当查user } szMap.put(bu+'_'+ sf + '_'+ dandang, csvRecordData); sfs.add(sf);//把省份放进去 } } if (null != sfs && sfs.size() > 0) { this.getOppprtunity_List(sfs);//根据省份年份,获取当前系统中已经存在得数据 放到map中 } List userList = new List(); System.debug('==UserInfoList=='+UserInfoList); if (null != UserInfoList && UserInfoList.size() > 0) { userList = this.getUserList(UserInfoList);//返回用户得一些信息 } Map userMap = new Map(); for (User userl : userList) { userMap.put(userl.Alias, userl); } Integer GI_Number = 3; Integer ET_Number = 4; Integer BF_Number = 5; Integer GS_Number = 6; Integer URO_Number = 7; Integer GYN_Number = 8; Integer ENT_Number = 9; Integer ENG_Number = 10; upsertAMPList = new List();//初始化,解决重复导入数据 id重复得问题 deleteAMPList = new List(); for (String key : szMap.keySet()) { //取用户的Id String userid = ''; String key_shengfen=key.split('_')[1];//省份 String key_dandang= ''; if(key.split('_').size()>=3){ key_dandang=key.split('_')[2];//把担当取出来 } if (userMap.containskey(key_dandang)) { userid = userMap.get(key_dandang).Id; } else { System.debug('==key==='+key); //用户不存在要提醒 continue; } system.debug('==userid=='+userid+'\n'); List csvRecordData = szMap.get(key); //获取导入数量 Decimal GI_Amount = String.isNotBlank(csvRecordData[GI_Number]) ? Decimal.valueof(csvRecordData[GI_Number]) : 0.00; DataSplicing(GI_Amount,key_shengfen + '_GI',oppsMap1,userid); Decimal ET_Amount = String.isNotBlank(csvRecordData[ET_Number]) ? Decimal.valueOf(csvRecordData[ET_Number]) : 0.00; DataSplicing(ET_Amount,key_shengfen + '_ET',oppsMap1,userid); Decimal BF_Amount = String.isNotBlank(csvRecordData[BF_Number]) ? Decimal.valueOf(csvRecordData[BF_Number]) : 0.00; DataSplicing(BF_Amount,key_shengfen + '_BF',oppsMap1,userid); Decimal GS_Amount = String.isNotBlank(csvRecordData[GS_Number]) ? Decimal.valueOf(csvRecordData[GS_Number]) : 0.00; DataSplicing(GS_Amount,key_shengfen + '_GS',oppsMap1,userid); Decimal URO_Amount = String.isNotBlank(csvRecordData[URO_Number]) ? Decimal.valueOf(csvRecordData[URO_Number]) : 0.00; DataSplicing(URO_Amount,key_shengfen + '_URO',oppsMap1,userid); Decimal GYN_Amount = String.isNotBlank(csvRecordData[GYN_Number]) ? Decimal.valueOf(csvRecordData[GYN_Number]) : 0.00; DataSplicing(GYN_Amount,key_shengfen + '_GYN',oppsMap1,userid); Decimal ENT_Amount = String.isNotBlank(csvRecordData[ENT_Number]) ? Decimal.valueOf(csvRecordData[ENT_Number]) : 0.00; DataSplicing(ENT_Amount,key_shengfen + '_ENT',oppsMap1,userid); system.debug('ENG_Number--->'+csvRecordData[ENG_Number]); //因为最后一列数据有空格,所以加.trim() Decimal ENG_Amount = String.isNotBlank(csvRecordData[ENG_Number]) ? Decimal.valueOf(csvRecordData[ENG_Number].trim()) : 0.00; // Decimal.valueOf(String str) DataSplicing(ENG_Amount,key_shengfen + '_ENG',oppsMap1,userid); //拼接Key } if(null!=upsertAMPList && upsertAMPList.size()>0){ system.debug('upsertAMPList=='+upsertAMPList.size()+'=upsertAMPList=='+upsertAMPList+'\n'); upsert upsertAMPList; } if(null!=deleteAMPList && deleteAMPList.size()>0){ delete deleteAMPList; } setBean(iYear); successMsg = new ApexPages.Message(ApexPages.severity.INFO, '导入成功'); ApexPages.addMessage(successMsg); } return null; } // 最终得数据处理, private void DataSplicing(Decimal amount, String key, Map ampMap, String userid) {//去进行最终数据得插入,更新或删除操作 //system.debug('==amount=='+amount+'==key=='+key+'==ampMap=='+ampMap+'\n'); for (Integer i = 0; i < 12; i++) { Integer y = iYear; Integer m = 4 + i; if (m > 12) { y += 1; m -= 12; } String syear = String.valueOf(y); String smonth = String.valueOf(m); if (m < 10) { smonth = '0' + smonth; } String sTargetDay = syear + '-' + smonth + '-01'; Date targetDay = Date.valueOf(sTargetDay); String key_shengfen=key.split('_')[0];//省 String key_ksfl=key.split('_')[1];//科室分类 Opportunity upsertAMP = new Opportunity(); if (ampMap.containskey(key+'_' + sTargetDay)) { upsertAMP = ampMap.get(key+'_' + sTargetDay); if (amount > 0) { if(amount!=upsertAMP.Amount || upsertAMP.Owner_System__c !=userid){ system.debug('有数据==='+'==key=='+key+'_' + sTargetDay+'==upsertAMP=='+upsertAMP+'==amount=='+amount+'\n'); upsertAMP.Name = upsertAMP.SAP_Province__c+ ' 省目标'; upsertAMP.StageName = '目標'; upsertAMP.OwnerId = userid; upsertAMP.Owner_System__c = userid; upsertAMP.Opportunity_Category__c = key_ksfl; upsertAMP.Proportion__c = proportion.get(key_ksfl)[i]; upsertAMP.CloseDate = targetDay; upsertAMP.Amount = amount; upsertAMP.Target_category__c = target_category; upsertAMP.SAP_Province__c = upsertAMP.SAP_Province__c; upsertAMP.RecordTypeId = rt.Id; upsertAMP.Target_Source__c = 'SetProvinceTarget'; //20210225 ljh WLIG-BV8CHF update 财年 start //upsertAMP.OCM_Target_period__c = currentPeriod; upsertAMP.OCM_Target_period__c = currentPeriodOld; //20210225 ljh WLIG-BV8CHF update 财年 start upsertAMPList.add(upsertAMP); //更新 } } else { //删除 system.debug('需要删除得数据'+'==key=='+key+'_' + sTargetDay+'==amount=='+amount+'\n'); deleteAMPList.add(upsertAMP); } } else { system.debug('无数据'+'==key=='+key+'_' + sTargetDay+'==amount=='+amount+'\n'); if (amount > 0) { upsertAMP.Name = key_shengfen + ' 省目标'; upsertAMP.StageName = '目標'; upsertAMP.OwnerId = userid; upsertAMP.Owner_System__c = userid; upsertAMP.Opportunity_Category__c = key_ksfl; upsertAMP.Proportion__c = proportion.get(key_ksfl)[i]; upsertAMP.CloseDate = targetDay; upsertAMP.Amount = amount; upsertAMP.Target_category__c = target_category; upsertAMP.SAP_Province__c = key_shengfen; upsertAMP.RecordTypeId = rt.Id; upsertAMP.Target_Source__c = 'SetProvinceTarget'; //20210225 ljh WLIG-BV8CHF update 财年 start //upsertAMP.OCM_Target_period__c = currentPeriod; upsertAMP.OCM_Target_period__c = currentPeriodOld; //20210225 ljh WLIG-BV8CHF update 财年 start upsertAMPList.add(upsertAMP); system.debug('=upsertAMPList=='+upsertAMPList+'\n'); } else { system.debug('无效得数据'); // deleteAMPList.add(upsertAMP); } } } } private List getUserList(List UserInfoList) {//根据上传文件中得本部,省份,担当,职位 得到了user 信息 String soql = 'select Id,Alias from User where IsActive = true' + ' and Alias IN :UserInfoList order by Salesdepartment__c, Province__c'; System.debug('==soql==' + soql); return Database.query(soql); } private void getOppprtunity_List(Set sfs) {// 取得当前年度目标数据 oppsMap1 = new Map(); Opportunity[] opportunitys = [select Id, OwnerId, Opportunity_Category__c, Proportion__c, CloseDate, Amount, Objective__c, Target_category__c, SAP_Province__c, RecordTypeId, OCM_Target_period__c, Owner_System__c,Owner_System__r.Name from Opportunity where Target_category__c = :target_category and RecordTypeId = :rt.Id and Target_Source__c = 'SetProvinceTarget' //20210225 ljh WLIG-BV8CHF update 财年 start //and OCM_Target_period__c = :currentPeriod and OCM_Target_period__c = :currentPeriodOld //20210225 ljh WLIG-BV8CHF update 财年 start and SAP_Province__c in :sfs]; for (Opportunity opp : opportunitys) { if (opp.OwnerId != null && opp.Opportunity_Category__c != null && opp.CloseDate !=null){ // 目标 key : Province + _ + Opportunity_Category__c + _ + CloseDate(yyyy-mm-dd) String key = opp.SAP_Province__c + '_' + opp.Opportunity_Category__c + '_' + String.valueOf(opp.CloseDate); oppsMap1.put(key, opp); } } } //CHAN-BDQBLX 20210129 you end // 点击保存按钮 public Pagereference saveBtn() { this.saveLogic(); setBean(iYear); ApexPages.Message msg = new ApexPages.Message(ApexPages.Severity.INFO, '保存成功。'); ApexPages.addMessage(msg); return null; } // 点击返回按钮 public Pagereference backBtn() { // HOMEに戻る PageReference ref = new Pagereference('/home/home.jsp'); ref.setRedirect(true); return ref; } // 数据赋值 private void setBean(Integer year) { // 取得当前年度目标数据 Opportunity[] opportunitys = [select Id, OwnerId, Opportunity_Category__c, Proportion__c, CloseDate, Amount, Objective__c, Target_category__c, SAP_Province__c, RecordTypeId, OCM_Target_period__c, Owner_System__c,Owner_System__r.Name from Opportunity where Target_category__c = :target_category and RecordTypeId = :rt.Id and Target_Source__c = 'SetProvinceTarget' //20210225 ljh WLIG-BV8CHF update 财年 start //and OCM_Target_period__c = :currentPeriod]; and OCM_Target_period__c = :currentPeriodOld]; //20210225 ljh WLIG-BV8CHF update 财年 start // 当前年度没有数据时,显示信息 if (opportunitys.size() <= 0 && isPast && iYear < currentYear) { ApexPages.Message msg = new ApexPages.Message(ApexPages.Severity.INFO, '没有上年度的数据。'); ApexPages.addMessage(msg); previousRendered = false; iYear += 1; //20210225 ljh WLIG-BV8CHF update 财年 start //currentPeriod = String.valueOf(iYear - 1867 + 'P'); currentPeriodOld = String.valueOf(iYear - 1867 + 'P'); Integer tempiYear = iYear+1; currentPeriod = String.valueOf('FY'+tempiYear); //20210225 ljh WLIG-BV8CHF update 财年 end isPast = false; if (iYear < currentYear) { isPast = true; } else if (iYear == currentYear) { if (Date.today().month() == 3) { isPast = true; } } // 今表示しているデータを再取得 setBean(iYear); return; } oppsMap = new Map(); for (Opportunity opp : opportunitys) { if (opp.OwnerId != null && opp.Opportunity_Category__c != null && opp.CloseDate !=null){ // 目标 key : Province + _ + Opportunity_Category__c + _ + CloseDate(yyyy-mm-dd) String key = opp.SAP_Province__c + '_' + opp.Opportunity_Category__c + '_' + String.valueOf(opp.CloseDate); oppsMap.put(key, opp); } } dataBeans = new List(); List provinces = salesDptMap.get(salesDpt); for (String pro : provinces) { DataBean dataBean = new DataBean(provinceMap.get(pro), pro, oppsMap, iYear); dataBeans.add(dataBean); } } //获取本部-省对应关系 private void getsalesDptMap() { salesDptMap = new Map>(); List provinceList = new List(); provinceList.add('北京市'); provinceList.add('天津市'); provinceList.add('河北省'); provinceList.add('内蒙古'); provinceList.add('山东省'); provinceList.add('青岛市'); provinceList.add('辽宁省'); provinceList.add('黑龙江省'); provinceList.add('吉林省'); provinceList.add('大连市'); provinceList.add('河南省'); provinceList.add('山西省'); provinceList.add('陕西省'); provinceList.add('青海省'); provinceList.add('宁夏自治区'); provinceList.add('甘肃省'); provinceList.add('新疆自治区'); provinceList.add('上海市'); provinceList.add('江苏省'); provinceList.add('浙江省'); provinceList.add('福建省'); provinceList.add('安徽省'); provinceList.add('江西省'); provinceList.add('广东省'); provinceList.add('广西自治区'); provinceList.add('海南省'); provinceList.add('湖北省'); provinceList.add('湖南省'); provinceList.add('深圳市'); provinceList.add('四川省'); provinceList.add('重庆市'); provinceList.add('云南省'); provinceList.add('贵州省'); provinceList.add('西藏自治区'); salesDptMap.put('0.无',provinceList); provinceList = new List(); provinceList.add('北京市'); provinceList.add('天津市'); provinceList.add('河北省'); provinceList.add('内蒙古'); provinceList.add('山东省'); provinceList.add('青岛市'); salesDptMap.put('1.华北',provinceList); provinceList = new List(); provinceList.add('辽宁省'); provinceList.add('黑龙江省'); provinceList.add('吉林省'); provinceList.add('大连市'); salesDptMap.put('2.东北',provinceList); provinceList = new List(); provinceList.add('河南省'); provinceList.add('山西省'); provinceList.add('陕西省'); provinceList.add('青海省'); provinceList.add('宁夏自治区'); provinceList.add('甘肃省'); provinceList.add('新疆自治区'); salesDptMap.put('3.西北',provinceList); provinceList = new List(); provinceList.add('上海市'); provinceList.add('江苏省'); provinceList.add('浙江省'); provinceList.add('福建省'); provinceList.add('安徽省'); provinceList.add('江西省'); salesDptMap.put('4.华东',provinceList); provinceList = new List(); provinceList.add('广东省'); provinceList.add('广西自治区'); provinceList.add('海南省'); provinceList.add('湖北省'); provinceList.add('湖南省'); provinceList.add('深圳市'); salesDptMap.put('5.华南',provinceList); provinceList = new List(); provinceList.add('四川省'); provinceList.add('重庆市'); provinceList.add('云南省'); provinceList.add('贵州省'); provinceList.add('西藏自治区'); salesDptMap.put('6.西南',provinceList); provinceMap = new Map(); provinceMap.put('北京市','1.华北'); provinceMap.put('天津市','1.华北'); provinceMap.put('河北省','1.华北'); provinceMap.put('内蒙古','1.华北'); provinceMap.put('山东省','1.华北'); provinceMap.put('青岛市','1.华北'); provinceMap.put('辽宁省','2.东北'); provinceMap.put('黑龙江省','2.东北'); provinceMap.put('吉林省','2.东北'); provinceMap.put('大连市','2.东北'); provinceMap.put('河南省','3.西北'); provinceMap.put('山西省','3.西北'); provinceMap.put('陕西省','3.西北'); provinceMap.put('青海省','3.西北'); provinceMap.put('宁夏自治区','3.西北'); provinceMap.put('甘肃省','3.西北'); provinceMap.put('新疆自治区','3.西北'); provinceMap.put('上海市','4.华东'); provinceMap.put('江苏省','4.华东'); provinceMap.put('浙江省','4.华东'); provinceMap.put('福建省','4.华东'); provinceMap.put('安徽省','4.华东'); provinceMap.put('江西省','4.华东'); provinceMap.put('广东省','5.华南'); provinceMap.put('广西自治区','5.华南'); provinceMap.put('海南省','5.华南'); provinceMap.put('湖北省','5.华南'); provinceMap.put('湖南省','5.华南'); provinceMap.put('深圳市','5.华南'); provinceMap.put('四川省','6.西南'); provinceMap.put('重庆市','6.西南'); provinceMap.put('云南省','6.西南'); provinceMap.put('贵州省','6.西南'); provinceMap.put('西藏自治区','6.西南'); } // 是否删除整行数据 private boolean isDelete(DataBean db) { if (db.opportunity.Owner_System__c == null) { for (Integer i = 0; i < 12; i++) { Integer y = iYear; Integer m = 4 + i; if (m > 12) { y += 1; m -= 12; } String syear = String.valueOf(y); String smonth = String.valueOf(m); if (m < 10) { smonth = '0' + smonth; } String sTargetDay = syear + '-' + smonth + '-01'; Date targetDay = Date.valueOf(sTargetDay); // 按金额分类顺序处理 for (Integer j = 0; j < amountCategory.size(); j++) { String amountC = amountCategory[j]; // 数据检索Key String key = db.opportunity.SAP_Province__c + '_' + amountC + '_' + sTargetDay; if (oppsMap.containskey(key)) { return true; } } } } return false; } // 実際の保存ロジック private void saveLogic() { List saveList = new List(); List deleteList = new List(); for (Integer d = 0; d < dataBeans.size(); d++) { DataBean db = dataBeans[d]; // 寄存数据比例值是否变化 Boolean proportionChanged = false; for (Integer i = 0; i < 12; i++) { Integer y = iYear; Integer m = 4 + i; if (m > 12) { y += 1; m -= 12; } String syear = String.valueOf(y); String smonth = String.valueOf(m); if (m < 10) { smonth = '0' + smonth; } String sTargetDay = syear + '-' + smonth + '-01'; // 按金额分类顺序处理 for (Integer j = 0; j < amountCategory.size(); j++) { String amountC = amountCategory[j]; // 数据检索Key String key = db.opportunity.SAP_Province__c + '_' + amountC + '_' + sTargetDay; // 每月数据赋值 Opportunity opp = new Opportunity(); if (oppsMap.containskey(key)) { opp = oppsMap.get(key); if (opp.Proportion__c != proportion.get(amountC)[i]) { proportionChanged = true; break; } } } if (proportionChanged) { break; } } if (db.isChanged == '0' && !proportionChanged) { continue; } User u = new User(); /*************************Update 20160413 Start*************************/ if (db.opportunity.Owner_System__c == null) { if (isDelete(db) == false) { continue; } } /*************************Update 20160413 End***************************/ // 一年分成12条数据 for (Integer i = 0; i < 12; i++) { Integer y = iYear; Integer m = 4 + i; if (m > 12) { y += 1; m -= 12; } String syear = String.valueOf(y); String smonth = String.valueOf(m); if (m < 10) { smonth = '0' + smonth; } String sTargetDay = syear + '-' + smonth + '-01'; Date targetDay = Date.valueOf(sTargetDay); // 按金额分类顺序处理 for (Integer j = 0; j < amountCategory.size(); j++) { String amountC = amountCategory[j]; // 数据检索Key String key = db.opportunity.SAP_Province__c + '_' + amountC + '_' + sTargetDay; // 每月数据赋值 Opportunity opp = new Opportunity(); if (oppsMap.containskey(key)) { opp = oppsMap.get(key); //if (db.opportunity.Owner_System__c == null || db.amount[j].Amount == null || db.amount[j].Amount == 0) { if (db.amount[j].Amount == null || db.amount[j].Amount == 0) { deleteList.add(opp); continue; } /*************************Update 20160531 Start*************************/ opp.OwnerId = db.opportunity.Owner_System__c; opp.Owner_System__c = db.opportunity.Owner_System__c; /*************************Update 20160531 End***************************/ opp.Proportion__c = proportion.get(amountC)[i]; opp.Amount = db.amount[j].Amount; } else { if (db.amount[j].Amount == null || db.amount[j].Amount == 0) { continue; } opp.Name = db.opportunity.SAP_Province__c + ' 省目标'; opp.StageName = '目標'; /*************************Update 20160531 Start*************************/ opp.OwnerId = db.opportunity.Owner_System__c; //トリガをスルーのため、ここでやります opp.Owner_System__c = db.opportunity.Owner_System__c; /*************************Update 20160531 End***************************/ opp.Opportunity_Category__c = amountC; opp.Proportion__c = proportion.get(amountC)[i]; opp.CloseDate = targetDay; opp.Amount = db.amount[j].Amount; opp.Target_category__c = target_category; opp.SAP_Province__c = db.opportunity.SAP_Province__c; opp.RecordTypeId = rt.Id; opp.Target_Source__c = 'SetProvinceTarget'; //20210225 ljh WLIG-BV8CHF update 财年 start //opp.OCM_Target_period__c = currentPeriod; opp.OCM_Target_period__c = currentPeriodOld; //20210225 ljh WLIG-BV8CHF update 财年 end } // 加入保存列表 saveList.add(opp); } } // 数据库限制小于10000条 if (saveList.size() + deleteList.size() >= 4000) { ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.INFO, '操作数据量过大,截止至' + db.opportunity.SAP_Province__c + '的数据操作完成,之后的数据请再次输入并保存。')); break; } } // トリガをスルー StaticParameter.EscapeOpportunityBefUpdTrigger = true; StaticParameter.EscapeOpportunityHpDeptUpdTrigger = true; StaticParameter.EscapeNFM007Trigger = true; // 更新数据库 if (saveList.size() > 0) upsert saveList; if (deleteList.size() > 0) delete deleteList; } // 数据类 class DataBean { // 担当者信息 public Opportunity opportunity { get; set; } // 总金额,画面用 public Opportunity[] amount { get; set; } // 本部表示用 public String department { get; private set; } // 是否变化 0:无 1:有 public String isChanged { get; set; } //CHAN-BDQBLX 20210129 you start 导出用name public String ownername { get; private set; } //CHAN-BDQBLX 20210129 you end // 构造方法 DataBean(String salesDpt, String province, Map oppMap, Integer iYear) { this.opportunity = new Opportunity(); this.amount = new List(); this.opportunity.SAP_Province__c = province; this.department = salesDpt; this.isChanged = '0'; // 按金额分类,查找数据,并设值 for (Integer i = 0; i < amountCategory.size(); i++) { String amountC = amountCategory[i]; Opportunity a = new Opportunity(); a.Opportunity_Category__c = amountC; Decimal amountSum = 0.0; for (Integer j = 0; j < 12; j++) { Integer y = iYear; Integer m = 4 + j; if (m > 12) { y += 1; m -= 12; } String strY = String.valueOf(y); String strM = String.valueOf(m); if (strM.length() < 2) { strM = '0' + strM; } String key = this.opportunity.SAP_Province__c + '_' + amountC + '_' + strY + '-' + strM + '-01'; if (oppMap.containskey(key)) { /*************************Update 20160531 Start*************************/ if (oppMap.get(key).Owner_System__c != null) { this.opportunity.Owner_System__c = oppMap.get(key).Owner_System__c; } //CHAN-BDQBLX 20210129 you start this.ownername = oppMap.get(key).Owner_System__r.Name; //CHAN-BDQBLX 20210129 you end a.Amount = oppMap.get(key).Amount; /*************************Update 20160531 End***************************/ amountSum += oppMap.get(key).Objective__c == null ? 0 : oppMap.get(key).Objective__c; } } if (amountSum > 0) { amountSum = amountSum.setScale(2); a.Amount = amountSum; } this.amount.add(a); } } } }