public with sharing class AgencyCampaignController { //产品一览画面用 public List productInfoListview { get; set; } //促销信息 public Consumable_Promotion__c consumable_P { get; set; } //促销产品---录入价格适用 public Dealer_Product__c dpc { get; set; } //产品数量 public Integer productRecoedsCount { get; set; } // public Boolean productSearch; //page用 public Integer pagesize{get; set;} public Integer totalcount{get; set;} public Integer pagecount{get; set;} public Integer currentpage{get; set;} public Boolean hasPrevious{get; set;} public Boolean hasNext{get; set;} //促销ID public String recordId {get; set;} //合同一览 public List lineInfoList { get; set; } public Integer lineNo { get; set; } public Integer lineInfoListSize { get { return lineInfoList == null ? 0 : lineInfoList.size(); } } private Map nowContactMap = new Map(); Map agencyedHospitalMap = new Map (); //当前促销中存在的促销产品 Map existRecordsMap = new Map(); //不是当前促销的已存在的促销产品 Map existRecordsOtherMap = new Map(); //合同 public String accContact { get; set; } public List accContactList{get;set;} //1-5分类选项 public Boolean pro2DealerFlag {get ; set;} public String keyword { get; set; } public String category1 { get; set; } public String category2 { get; set; } public String category3 { get; set; } public String category4 { get; set; } public String category5 { get; set; } public List category1OptionList{get;set;} public List category2OptionList{get;set;} public List category3OptionList{get;set;} public List category4OptionList{get;set;} public List category5OptionList{get;set;} public AgencyCampaignController() { pro2DealerFlag = false; productSearch = false; recordId = ApexPages.currentPage().getParameters().get('id'); //size = 100; //page pagesize = Integer.valueof(system.label.orderdetLimitsize); currentpage = 0; accContactList= new List(); accContactList.add(new SelectOption('', '--无--')); lineInfoList = new List(); } public void init(){ //所有产品 List productInfoList = new List(); geCategory(); dpc = new Dealer_Product__c(); agencyedHospitalMap = new Map(); //获取所有有效合同 List validContract = [SELECT Id,Agent_Ref__c, Agent_Ref__r.Name,Name,ParentId FROM Account WHERE Contract_Department_Class__c = 'ET' AND Contract_Decide_Start_Date__c <= :Date.Today() AND Contract_Decide_End_Date__c >= :Date.Today()]; if(validContract.size() > 0){ Integer nowLine = lineInfoListSize; for(Account oldcontact: validContract){ nowContactMap.put(oldcontact.Id, oldcontact.Name); product2Info newopi = new product2Info(nowLine + 1,oldcontact); nowLine ++; lineInfoList.add(newopi); } } if(String.isNotBlank(recordId)){ //获取已经存在的促销合同信息 List oldcontactList = [select Id,Agent_Ref__c, Agent_Ref__r.Name,Name,ParentId from Account WHERE Id in ( select Dealer_Contact__c from Dealer_Product__c WHERE Promotion_No__c = :recordId)]; for(Account existContact : oldcontactList){ for(product2Info con : lineInfoList){ if(existContact.Id == con.accountIn.Id){ con.check = true; } } } } lineInfoList.sort(); productInfoListview = new List(); productInfoList = searchAllProduct(); //已存在的产品促销信息 if(String.isNotBlank(recordId)){ consumable_P = [select Id,Name FROM Consumable_Promotion__c WHERE Id = :recordId]; if(nowContactMap.size() > 0){ List dealerProductList = [select Id, Dealer_Product2__c,Dealer_Contact__c, Special_Campaign_Price__c,Campaign_StartDate__c, Campaign_EndDate__c,OrderGoods_Limit__c FROM Dealer_Product__c WHERE Dealer_Contact__c in :nowContactMap.keySet() AND Promotion_No__c = :recordId]; for(Dealer_Product__c ahlc : dealerProductList){ existRecordsMap.put('' + ahlc.Dealer_Contact__c + ahlc.Dealer_Product2__c,ahlc); agencyedHospitalMap.put(ahlc.Dealer_Product2__c, ahlc); } for(product2Info prd : productInfoList){ if(agencyedHospitalMap.containsKey(prd.pro.Id)){ prd.dealerPro = agencyedHospitalMap.get(prd.pro.Id); } } } } productInfoList.sort(); //总件数 totalcount = productInfoList.size(); //页数 pagecount=(totalcount + pagesize - 1) / pagesize; //显示第一页 moveToFirst(); makeCurrentPageRecords(productInfoList); } //获取所有产品 public List searchAllProduct(){ //所有的产品 List allProductList = new List(); List accountInfo = [select Id, Name,Name__c, Asset_Model_No__c,Category1__c, Category2__c,Category3__c,Category4__c, Category5__c,SFDA_Status__c FROM Product2__c WHERE Estimation_Entry_Possibility__c = '○' order by Name__c]; for (Integer i = 0; i < accountInfo.size(); i++) { allProductList.add(new product2Info(accountInfo[i])); } return allProductList; } //分类列表制作 public void geCategory(){ AggregateResult[] categoryList = [select Count(id), Category1_text__c c1c from Product2__c group by Category1_text__c]; category1OptionList = new List(); category1OptionList.add(new SelectOption('', '--无--')); for(AggregateResult category3Search : categoryList) { String deliverycnt = String.valueOf(category3Search.get('c1c')); if(String.isNotBlank(deliverycnt)){ category1OptionList.add(new SelectOption(deliverycnt,deliverycnt)); } } category2OptionList = new List(); category2OptionList.add(new SelectOption('', '--无--')); category3OptionList = new List(); category3OptionList.add(new SelectOption('', '--无--')); category4OptionList = new List(); category4OptionList.add(new SelectOption('', '--无--')); category5OptionList = new List(); category5OptionList.add(new SelectOption('', '--无--')); } //加载第2分类 public void showcategory2() { AggregateResult[] categoryList = [select Count(id), Category2_text__c c2c from Product2__c WHERE Category1_text__c = :category1 group by Category2_text__c]; category2OptionList = new List(); category2OptionList.add(new SelectOption('', '--无--')); for(AggregateResult category3Search : categoryList) { String deliverycnt = String.valueOf(category3Search.get('c2c')); if(String.isNotBlank(deliverycnt)){ category2OptionList.add(new SelectOption(deliverycnt,deliverycnt)); } } } //加载第3分类 public void showcategory3() { AggregateResult[] categoryList = [select Count(id), Category3_text__c c3c from Product2__c WHERE Category1_text__c = :category1 AND Category2_text__c = :category2 group by Category3_text__c]; category3OptionList = new List(); category3OptionList.add(new SelectOption('', '--无--')); for(AggregateResult category3Search : categoryList) { String deliverycnt = String.valueOf(category3Search.get('c3c')); if(String.isNotBlank(deliverycnt)){ category3OptionList.add(new SelectOption(deliverycnt,deliverycnt)); } } } //加载第4分类 public void showcategory4() { AggregateResult[] categoryList = [select Count(id), Category4_text__c c4c from Product2__c WHERE Category1_text__c = :category1 AND Category2_text__c = :category2 AND Category3_text__c = :category3 group by Category4_text__c]; category4OptionList = new List(); category4OptionList.add(new SelectOption('', '--无--')); for(AggregateResult category3Search : categoryList) { String deliverycnt = String.valueOf(category3Search.get('c4c')); if(String.isNotBlank(deliverycnt)){ category4OptionList.add(new SelectOption(deliverycnt,deliverycnt)); } } } //加载第5分类 public void showcategory5() { AggregateResult[] categoryList = [select Count(id), Category5_text__c c5c from Product2__c WHERE Category1_text__c = :category1 AND Category2_text__c = :category2 AND Category3_text__c = :category3 AND Category4_text__c = :category4 group by Category5_text__c]; category5OptionList = new List(); category5OptionList.add(new SelectOption('', '--无--')); for(AggregateResult category3Search : categoryList) { String deliverycnt = String.valueOf(category3Search.get('c5c')); if(String.isNotBlank(deliverycnt)){ category5OptionList.add(new SelectOption(deliverycnt,deliverycnt)); } } } //已存在促销产品检测 public void promotioncheck() { List existDealerProList = new List(); List selectProId = new List(); for(product2Info proinfo:productInfoListview){ if(proinfo.check == true){ selectProId.add(proinfo.Pro.Id); } } //编辑促销 if(String.isNotBlank(recordId)){ existDealerProList = [select Id, Dealer_Product2__c,Dealer_Contact__c, Special_Campaign_Price__c,Campaign_StartDate__c, Campaign_EndDate__c,Promotion_No__r.Name,OrderGoods_Limit__c FROM Dealer_Product__c WHERE Dealer_Contact__c in :nowContactMap.keySet() AND Promotion_No__c != :recordId AND Dealer_Product2__c in :selectProId AND Campaign_StartDate__c <= :Date.Today() AND Campaign_EndDate__c >= :Date.Today()]; }else{ existDealerProList = [select Id, Dealer_Product2__c,Dealer_Contact__c, Special_Campaign_Price__c,Campaign_StartDate__c, Campaign_EndDate__c,Promotion_No__r.Name,OrderGoods_Limit__c FROM Dealer_Product__c WHERE Dealer_Contact__c in :nowContactMap.keySet() AND Dealer_Product2__c in :selectProId AND Campaign_StartDate__c <= :Date.Today() AND Campaign_EndDate__c >= :Date.Today()]; } for(Dealer_Product__c record : existDealerProList){ existRecordsOtherMap.put('' + record.Dealer_Contact__c + record.Dealer_Product2__c, record.Promotion_No__r.Name); } } public PageReference save() { List Ins = new List(); List detailsdet = new List(); List productId = new List(); List contactId = new List(); if(lineInfoList.size()<= 0){ ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '没有经销商合同信息,请确认。')); return null; } promotioncheck(); Savepoint sp = Database.setSavepoint(); try{ Consumable_Promotion__c cpc = new Consumable_Promotion__c(Id = recordId); upsert cpc; recordId = cpc.Id; for(product2Info acc : lineInfoList){ if(acc.check == true){ contactId.add(acc.accountIn.Id); for(product2Info proinfo:productInfoListview){ if(proinfo.check == true){ if(existRecordsOtherMap.containsKey('' + acc.accountIn.Id + proinfo.pro.Id)){ ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '促销 ' + existRecordsOtherMap.get('' + acc.accountIn.Id + proinfo.pro.Id) + ' 的合同 ' + acc.accountIn.Name + ' 中,已经存在产品 ' + proinfo.pro.Name + ' 的有效促销。')); return null; } if(proinfo.dealerPro.Special_Campaign_Price__c != null){ if(proinfo.dealerPro.Campaign_StartDate__c == null){ proinfo.dealerPro.Campaign_StartDate__c.addError('请输入产品 ' + proinfo.Pro.Name__c + ' 的促销开始日。'); return null; } if(proinfo.dealerPro.OrderGoods_Limit__c == null){ proinfo.dealerPro.OrderGoods_Limit__c.addError('请输入产品 ' + proinfo.Pro.Name__c + ' 的采购限制数量。'); return null; } if(proinfo.dealerPro.Campaign_EndDate__c == null){ proinfo.dealerPro.Campaign_EndDate__c.addError('请输入产品 ' + proinfo.Pro.Name__c + ' 的促销结束日。'); return null; } if(proinfo.dealerPro.Campaign_EndDate__c < proinfo.dealerPro.Campaign_StartDate__c){ proinfo.dealerPro.Campaign_EndDate__c.addError('产品 ' + proinfo.Pro.Name__c + ' 的促销结束日必须大于促销开始日。'); return null; } } Dealer_Product__c ahl = new Dealer_Product__c(); if(existRecordsMap.containsKey('' + acc.accountIn.Id + proinfo.pro.Id)){ ahl.id = existRecordsMap.get('' + acc.accountIn.Id + proinfo.pro.Id).Id; } ahl.Dealer_Contact__c = acc.accountIn.Id; ahl.Dealer_Product2__c = proinfo.pro.Id; ahl.Promotion_No__c = cpc.Id; ahl.Special_Campaign_Price__c = proinfo.dealerPro.Special_Campaign_Price__c; ahl.OrderGoods_Limit__c = proinfo.dealerPro.OrderGoods_Limit__c; ahl.Campaign_StartDate__c = proinfo.dealerPro.Campaign_StartDate__c; ahl.Campaign_EndDate__c = proinfo.dealerPro.Campaign_EndDate__c; Ins.add(ahl); }else if(proinfo.dealerPro.Id != null && proinfo.dealerPro.Special_Campaign_Price__c == null){ productId.add(proinfo.Pro.Id); detailsdet.add(proinfo.dealerPro); } } } } //删除合同后的多余数据 List deleteRecords = [select Id FROM Dealer_Product__c WHERE Promotion_No__c = :recordId AND Dealer_Contact__c not in : contactId //AND Dealer_Product2__c in : productId ]; if(deleteRecords.size() >0){ delete deleteRecords; } //删除价格后的多余数据 List deleteRecords2 = [select Id FROM Dealer_Product__c WHERE Promotion_No__c = :recordId AND Dealer_Contact__c in : contactId AND Dealer_Product2__c in : productId ]; if(deleteRecords2.size() >0){ delete deleteRecords2; } if(Ins.size()>0){ upsert Ins; } }catch(Exception e){ ApexPages.addMessages(e); Database.rollback(sp); return null; } return setpage(); } // 返回 public PageReference setpage(){ PageReference ref = new Pagereference('/' + recordId); ref.setRedirect(true); return ref; } // 检索 public void searchHospital() { productSearch = true; //所有的产品 List productInfoList = new List(); //检索产品 String soql = this.makeSoql(category1,category2,category3,category4,category5,keyword,pro2DealerFlag); List product2Selected = Database.query(soql); for (Integer i = 0; i < product2Selected.size(); i++) { productInfoList.add(new product2Info(product2Selected[i])); } //已存在的产品促销信息 agencyedHospitalMap.clear(); if(String.isNotBlank(recordId)){ if(nowContactMap.size() > 0){ List dealerProductList = [select Id, Dealer_Product2__c,Dealer_Contact__c, Special_Campaign_Price__c,Campaign_StartDate__c, Campaign_EndDate__c,OrderGoods_Limit__c FROM Dealer_Product__c WHERE Dealer_Contact__c in :nowContactMap.keySet() AND Promotion_No__c = :recordId]; for(Dealer_Product__c ahlc : dealerProductList){ agencyedHospitalMap.put(ahlc.Dealer_Product2__c, ahlc); } for(product2Info prd : productInfoList){ if(agencyedHospitalMap.containsKey(prd.pro.Id)){ prd.dealerPro = agencyedHospitalMap.get(prd.pro.Id); } } } } productInfoList.sort(); //总件数 totalcount = productInfoList.size(); //页数 pagecount=(totalcount + pagesize - 1) / pagesize; //显示第一页 moveToFirst(); makeCurrentPageRecords(productInfoList); } //产品检索 public String makeSoql(String category1,String category2,String category3,String category4,String category5,String keyword,Boolean pro2DealerFlag){ String soql = 'select Id, Name,Name__c,Asset_Model_No__c,Category1__c,Category2__c,Category3__c,Category4__c,'; soql += ' Category5__c,SFDA_Status__c FROM Product2__c WHERE Estimation_Entry_Possibility__c = \'○\' '; if(String.isNotBlank(category1)){ soql += ' AND Category1__c = \'' + category1 + '\''; } if(String.isNotBlank(category2)){ soql += ' AND Category2__c = \'' + category2 + '\''; } if(String.isNotBlank(category3)){ soql += ' AND Category3__c = \'' + category3 + '\''; } if(String.isNotBlank(category4)){ soql += ' AND Category4__c = \'' + category4 + '\''; } if(String.isNotBlank(category5)){ soql += ' AND Category5__c = \'' + category5 + '\''; } if(String.isNotBlank(keyword)){ soql += ' AND Name__c like \'%' + String.escapeSingleQuotes(keyword.replaceAll('%', '\\%')) + '%\''; } if(Pro2DealerFlag){ soql += ' AND Pro2_Dealer_Object__c = true'; } soql += ' order by Name__c '; return soql; } //首页 public void moveToFirst(){ if(currentpage == 1) return; currentpage = 1; canMove(); } //尾页 public void moveToLast(){ if(currentpage >= pagecount) return; currentpage = pagecount; canMove(); } //上一页 public void moveToPrevious(){ if(currentpage == 1) return; currentpage = currentpage -1; canMove(); } //下一页 public void moveToNext(){ if(currentpage >= pagecount) return; currentpage = currentpage + 1; canMove(); } //判断是否可翻页 public void canMove(){ hasPrevious = false; hasNext = false; if(pagecount > 1 && currentpage > 1) hasPrevious = true; if(pagecount > 1 && currentpage < pagecount) hasNext = true; } //刷新当前页 public PageReference refreshPageSize() { //所有的产品 List productInfoList = new List(); if(productSearch){ //检索产品 String soql = this.makeSoql(category1,category2,category3,category4,category5,keyword,pro2DealerFlag); List product2Selected = Database.query(soql); for (Integer i = 0; i < product2Selected.size(); i++) { productInfoList.add(new product2Info(product2Selected[i])); } //已存在的产品促销信息 agencyedHospitalMap.clear(); if(String.isNotBlank(recordId)){ if(nowContactMap.size() > 0){ List dealerProductList = [select Id, Dealer_Product2__c,Dealer_Contact__c, Special_Campaign_Price__c,Campaign_StartDate__c, Campaign_EndDate__c,OrderGoods_Limit__c FROM Dealer_Product__c WHERE Dealer_Contact__c in :nowContactMap.keySet() AND Promotion_No__c = :recordId]; for(Dealer_Product__c ahlc : dealerProductList){ agencyedHospitalMap.put(ahlc.Dealer_Product2__c, ahlc); } for(product2Info prd : productInfoList){ if(agencyedHospitalMap.containsKey(prd.pro.Id)){ prd.dealerPro = agencyedHospitalMap.get(prd.pro.Id); } } } } }else{ productInfoList = searchAllProduct(); //已存在的产品促销信息 if(String.isNotBlank(recordId)){ consumable_P = [select Id,Name FROM Consumable_Promotion__c WHERE Id = :recordId]; if(nowContactMap.size() > 0){ List dealerProductList = [select Id, Dealer_Product2__c,Dealer_Contact__c, Special_Campaign_Price__c,Campaign_StartDate__c, Campaign_EndDate__c,OrderGoods_Limit__c FROM Dealer_Product__c WHERE Dealer_Contact__c in :nowContactMap.keySet() AND Promotion_No__c = :recordId]; for(Dealer_Product__c ahlc : dealerProductList){ existRecordsMap.put('' + ahlc.Dealer_Contact__c + ahlc.Dealer_Product2__c,ahlc); agencyedHospitalMap.put(ahlc.Dealer_Product2__c, ahlc); } for(product2Info prd : productInfoList){ if(agencyedHospitalMap.containsKey(prd.pro.Id)){ //prd.check = true; prd.dealerPro = agencyedHospitalMap.get(prd.pro.Id); } } } } } productInfoList.sort(); //总件数 totalcount = productInfoList.size(); //页数 pagecount=(totalcount + pagesize - 1) / pagesize; makeCurrentPageRecords(productInfoList); //makeCurrentPageRecords(); return null; } //编辑当前页内容 public void makeCurrentPageRecords(List productInfoList){ Integer startIdx; Integer endIdx; productInfoListview = new List(); startIdx = (currentpage-1) * pagesize; endIdx = (currentpage-1) * pagesize+ pagesize; if (endIdx > productInfoList.size()){ endIdx = productInfoList.size(); } for(Integer i=startIdx; i < endIdx ; i++){ productInfoListview.add(productInfoList.get(i)); } productRecoedsCount = productInfoListview.size(); } class product2Info implements Comparable { public Boolean check { get; set; } public Decimal campaignPrice { get; set; } public Date campaignSdate { get; set; } public Date campaignEdate { get; set; } public Product2__c pro { get; set; } public Dealer_Product__c dealerPro { get; set; } public Integer line { get; set; } public Account accountIn { get; set; } public product2Info(Product2__c e) { check = false; pro = e; dealerPro = new Dealer_Product__c(); } public product2Info(Integer in_line, Account e) { check = false; line = in_line; accountIn = e; } public Integer compareTo(Object compareTo) { product2Info compareToesd =(product2Info)compareTo; Integer returnValue = 0; if(check == true){ returnValue = -1; }else if(dealerPro != null){ if (dealerPro.Special_Campaign_Price__c == null){ returnValue = 1; }else{ if (dealerPro.Special_Campaign_Price__c > compareToesd.dealerPro.Special_Campaign_Price__c) { returnValue = -1; } else if (dealerPro.Special_Campaign_Price__c < compareToesd.dealerPro.Special_Campaign_Price__c) { returnValue = 1; } } }else{ returnValue = 1; } return returnValue; } } }