public with sharing class SpecialDiscountController { public String accountId { get; set; } //public List productInfoList = new List(); public List productInfoListview { get; set; } public Account acc { get; set; } public Dealer_Product__c dpc { get; set; } public Boolean Pro2DealerFlag {get ; set;} public Integer productRecoedsCount { get; set; } //错误信息 public String alertMessage {set;get;} // 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;} Map ExistProdSDMap = new Map (); //1-5分类选项 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 String SpecialDiscount{ 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 SpecialDiscountController() { productSearch = false; accountId = ApexPages.currentPage().getParameters().get('userid'); //page pagesize = Integer.valueof(system.label.orderdetLimitsize); currentpage = 0; } public void init(){ geCategory(); acc = [SELECT Id,Name,Parent.Name,Parent.Management_Code__c FROM Account WHERE Id = :accountId]; ExistProdSDMap = new Map(); List productInfoList = new List(); productInfoListview = new List(); dpc = new Dealer_Product__c(); Pro2DealerFlag = false; //所有的产品 List product2Selected = [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 < product2Selected.size(); i++) { productInfoList.add(new product2Info(product2Selected[i])); } //已存在的特殊折扣 List dealerProductList = [select Id, Special_Discount__c,Dealer_Product2__c FROM Dealer_Product__c WHERE Dealer_Contact__c = :accountId AND Special_Discount__c != null]; for(Dealer_Product__c ahlc : dealerProductList){ ExistProdSDMap.put(ahlc.Dealer_Product2__c, ahlc); } for(product2Info prd : productInfoList){ if(ExistProdSDMap.containsKey(prd.pro.Id)){ //prd.check = true; prd.dealerPro = ExistProdSDMap.get(prd.pro.Id); prd.specialDiscount = ExistProdSDMap.get(prd.pro.Id).Special_Discount__c; } } productInfoList.sort(); //总件数 totalcount = productInfoList.size(); //页数 pagecount=(totalcount + pagesize - 1) / pagesize; //显示第一页 moveToFirst(); makeCurrentPageRecords(productInfoList); } 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('', '--无--')); } 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)); } } } 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)); } } } 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)); } } } 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 PageReference save() { List Ins = new List(); List Del = new List(); alertMessage = ''; Savepoint sp = Database.setSavepoint(); try{ for(product2Info proinfo:productInfoListview){ if(proinfo.check == true){ if(proinfo.dealerPro.Special_discount__c != null && (proinfo.dealerPro.Special_discount__c <=0 || proinfo.dealerPro.Special_discount__c >=100)){ proinfo.dealerPro.Special_discount__c.addError('百分比无效,请输入0~100的数字。'); return null; } Dealer_Product__c dpc = new Dealer_Product__c(); dpc.Id = proinfo.dealerPro.Id; dpc.Dealer_Contact__c = accountId; dpc.Dealer_Product2__c = proinfo.pro.Id; if(proinfo.dealerPro.Special_Discount__c != null && proinfo.dealerPro.Special_Discount__c > 0){ dpc.Special_Discount__c = proinfo.dealerPro.Special_Discount__c; Ins.add(dpc); } else{ if(proinfo.dealerPro.Id != null){ Del.add(dpc); } /*List results = [select Id, Special_Discount__c,Dealer_Product2__c FROM Dealer_Product__c WHERE id = :proinfo.dealerPro.Id]; if (results !=null && results.size()>0) Del.add(dpc);*/ } } else{ if(proinfo.dealerPro.Special_Discount__c == null || proinfo.dealerPro.Special_Discount__c==0){ if(proinfo.dealerPro.id != null){ Dealer_Product__c dpc = new Dealer_Product__c(); dpc.Id = proinfo.dealerPro.Id; dpc.Dealer_Contact__c = accountId; dpc.Dealer_Product2__c = proinfo.pro.Id; Del.add(dpc); } //101 sql 对应注释 /*List results = [select Id, Special_Discount__c,Dealer_Product2__c FROM Dealer_Product__c WHERE id = :proinfo.dealerPro.Id]; if (results !=null && results.size()>0){ Dealer_Product__c dpc = new Dealer_Product__c(); dpc.Id = proinfo.dealerPro.Id; dpc.Dealer_Contact__c = accountId; dpc.Dealer_Product2__c = proinfo.pro.Id; Del.add(dpc); }*/ } } } /*if(Del.size()>0){ ApexPages.addmessage(new ApexPages.message(ApexPages.severity.WARNING, 'Del' + Del)); return null; delete Del; }*/ if(Ins.size()>0){ upsert Ins; } if(Del.size()>0){ delete Del; } //alertMessage = '保存成功。'; }catch(Exception e){ ApexPages.addMessages(e); Database.rollback(sp); return null; } return setpage(); //return null; } public PageReference setpage(){ PageReference ref = new Pagereference('/' + acc.Id); ref.setRedirect(true); return ref; } // 检索 public void searchProduct() { 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])); } //已存在的特殊折扣 ExistProdSDMap.clear(); List DealerProductList = [select Id, Special_Discount__c,Dealer_Product2__c FROM Dealer_Product__c WHERE Dealer_Contact__c = :accountId AND Special_Discount__c != null]; for(Dealer_Product__c ahlc : dealerProductList){ ExistProdSDMap.put(ahlc.Dealer_Product2__c, ahlc); } for(product2Info prd : productInfoList){ if(ExistProdSDMap.containsKey(prd.pro.Id)){ //prd.check = true; prd.dealerPro = ExistProdSDMap.get(prd.pro.Id); prd.specialDiscount = ExistProdSDMap.get(prd.pro.Id).Special_Discount__c; } } 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 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 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])); } //已存在的特殊折扣 ExistProdSDMap.clear(); List DealerProductList = [select Id, Special_Discount__c,Dealer_Product2__c FROM Dealer_Product__c WHERE Dealer_Contact__c = :accountId AND Special_Discount__c != null]; for(Dealer_Product__c ahlc : dealerProductList){ ExistProdSDMap.put(ahlc.Dealer_Product2__c, ahlc); } for(product2Info prd : productInfoList){ if(ExistProdSDMap.containsKey(prd.pro.Id)){ prd.dealerPro = ExistProdSDMap.get(prd.pro.Id); prd.specialDiscount = ExistProdSDMap.get(prd.pro.Id).Special_Discount__c; } } /*}else{ productInfoList = searchAllProduct(); //已存在的产品促销信息 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); return null; } //编辑当前页内容 public void makeCurrentPageRecords(List productInfoList){ Integer startIdx; Integer endIdx; productInfoListview = new List(); /* List reSet = new List(); Map selectedIdMap = new Map(); for(product2Info prd : productInfoListview){ if(prd.check == true){ selectedIdMap.put(prd.pro.Id,prd.pro.Id); reSet.add(prd); } } if(reSet.size() > 0){ productInfoListview = reSet; } */ startIdx = (currentpage-1) * pagesize; endIdx = (currentpage-1) * pagesize+ pagesize; if (endIdx > productInfoList.size()){ endIdx = productInfoList.size(); } for(Integer i=startIdx; i < endIdx ; i++){ //if(selectedIdMap.containsKey(productInfoList.get(i).pro.Id)){ // continue; //} //else{ productInfoListview.add(productInfoList.get(i)); //} } productRecoedsCount = productInfoListview.size(); } class product2Info implements Comparable { public Boolean check { get; set; } public Decimal specialDiscount { get; set; } public Product2__c pro { get; set; } public Dealer_Product__c dealerPro { get; set; } public product2Info(Product2__c e) { check = false; pro = e; dealerPro = new Dealer_Product__c(); specialDiscount = null; } public Integer compareTo(Object compareTo) { product2Info compareToesd =(product2Info)compareTo; Integer returnValue = 0; if(check == true){ returnValue = -1; }else{ if (specialDiscount == null){ returnValue = 1; }else{ if (specialDiscount > compareToesd.specialDiscount) { returnValue = -1; } else if (specialDiscount < compareToesd.specialDiscount) { returnValue = 1; } } } return returnValue; } } }