public without sharing class LexConsumableAccountController { //经销商用户产品分类(ET、ENG) public static String agencyProType { get; set; } public static String agencyProTypestr { get; set; } //选项卡名称 public static String filterName { get; set; } //选项卡类型 public static String hosptialType { get; set; } public static ApexPages.StandardSetController setCon { get; set; } //画面显示数量 public static Integer size { get; set; } public static Integer noOfRecords { get; set; } //显示集合 public static List pageRecords { get; set; } //经销商信息 private static String accountName { get; set; } private static String accountId { get; set; } //排序使用 // public static String sortKey { get; set; } // public static String preSortKey { get; private set; } // public static Boolean sortOrderAsc { get; private set; } // public static String[] sortOrder { get; private set; } // //排序使用 // private static String[] orderby = new String[]{ 'Name','State_Master__c','Salesdepartment_HP__c','CreatedDate','Is_Active__c','RecordType.Name','Grade__c','OCM_Category__c','City_Master__c','Town__c','Phone'}; //上周开始、结束日期 private static Datetime lastweekstart { get; set; } private static Datetime lastweekend { get; set; } // page public static Integer pagesize { get; set; } public static Integer pageToken { get; set; } public static String sortField { get; set; } public static String sortOrder { get; set; } public static Integer totalcount { get; set; } //初始化 @AuraEnabled public static ResponseBodyLWC init( Integer pageSizeLWC, Integer pageTokenLWC, String fiscalYear ) { try { ResponseBodyLWC res = new ResponseBodyLWC(); Map data = new Map(); res.entity = data; pageSize = pageSizeLWC; pageToken = pageTokenLWC > 2000 ? 2000 : pageTokenLWC; User Useracc = [ SELECT accountid, UserPro_Type__c FROM user WHERE id = :UserInfo.getUserId() ]; accountId = [SELECT id, Name FROM account WHERE id = :Useracc.accountid] .id; agencyProType = Useracc.UserPro_Type__c; if (String.isBlank(Useracc.UserPro_Type__c)) { agencyProType = 'ET'; } agencyProTypestr = '%' + agencyProType + '%'; System.debug('accountId = ' + accountId); System.debug('agencyProTypestr = ' + agencyProTypestr); List allSelectAccount = [ SELECT id, Name, State_Master__c, State_Master__r.Name, Salesdepartment_HP__c, CreatedDate, Is_Active__c, RecordType.Name, Grade__c, OCM_Category__c, City_Master__c, City_Master__r.Name, Town__c, Phone FROM Account WHERE id IN ( SELECT Hospital__c FROM Agency_Hospital_Link__c WHERE Agency__c = :accountId AND Hosptial_Type__c LIKE :agencyProTypestr ) ]; totalCount = allSelectAccount.size(); List selectAccList = [ SELECT id, Name, State_Master__c, State_Master__r.Name, Salesdepartment_HP__c, CreatedDate, Is_Active__c, RecordType.Name, Grade__c, OCM_Category__c, City_Master__c, City_Master__r.Name, Town__c, Phone FROM Account WHERE id IN ( SELECT Hospital__c FROM Agency_Hospital_Link__c WHERE Agency__c = :accountId AND Hosptial_Type__c LIKE :agencyProTypestr ) LIMIT :pageSize ]; System.debug('selectAccList = ' + selectAccList); PaginatedAccounts paginatedAccounts = new PaginatedAccounts(); paginatedAccounts.nextPageToken = (pageToken + pageSize < totalCount) ? pageToken + pageSize : null; paginatedAccounts.recordStart = pageToken + 1; paginatedAccounts.pageNumber = pageToken / pageSize + 1; Integer recordEnd = pageSize * paginatedAccounts.pageNumber; paginatedAccounts.recordEnd = totalCount >= recordEnd ? recordEnd : totalCount; paginatedAccounts.totalRecords = totalCount; //销量前十的客户 // List acList = [ // SELECT // id, // Name, // State_Master__c, // State_Master__r.Name, // Salesdepartment_HP__c, // CreatedDate, // Is_Active__c, // RecordType.Name, // Grade__c, // OCM_Category__c, // City_Master__c, // City_Master__r.Name, // Town__c, // Phone // FROM Account // WHERE State_Master__r.Name != '' AND City_Master__r.Name != '' AND Is_Active__c = '有効' AND RecordType.Name = '病院' // LIMIT 10 // ]; TopInfo topInfo = new TopInfo(); Date today = Date.today(); Integer lastYear = today.year() - 1; Integer thisYear = today.year(); Integer nextYear = today.year() + 1; Date lastDatetime = Date.newInstance(lastYear, 4, 1); Date thisDatetime = Date.newInstance(thisYear, 4, 1); Date thisDatetime2 = Date.newInstance(thisYear, 4, 1); Date nextDatetime = Date.newInstance(nextYear, 4, 1); AggregateResult[] arList = null; System.debug('fiscalYear = ' + fiscalYear); if (fiscalYear == 'thisYear') { AggregateResult[] saleAmountList = LexConsumableAccountSOQL.getAccountTotalSales( thisDatetime, nextDatetime ); topInfo.saleAmount = Decimal.valueOf( String.valueOf(saleAmountList[0].get('saleAmount')) ); System.debug('topInfo.saleAmount = ' + topInfo.saleAmount); arList = LexConsumableAccountSOQL.getAccountBySales( thisDatetime, nextDatetime ); } else if (fiscalYear == 'lastYear') { AggregateResult[] saleAmountList = LexConsumableAccountSOQL.getAccountTotalSales( lastDatetime, thisDatetime2 ); topInfo.saleAmount = Decimal.valueOf( String.valueOf(saleAmountList[0].get('saleAmount')) ); System.debug('topInfo.saleAmount = ' + topInfo.saleAmount); arList = LexConsumableAccountSOQL.getAccountBySales( lastDatetime, thisDatetime2 ); } else { AggregateResult[] saleAmountList = LexConsumableAccountSOQL.getAccountTotalSales( lastDatetime, nextDatetime ); topInfo.saleAmount = Decimal.valueOf( String.valueOf(saleAmountList[0].get('saleAmount')) ); System.debug('topInfo.saleAmount = ' + topInfo.saleAmount); arList = LexConsumableAccountSOQL.getAccountBySales( lastDatetime, nextDatetime ); } // Map mapTemp = new Map(); // for (AggregateResult ar : arList) { // if(!mapTemp.get(String.valueOf(ar.get('hospitalName')))){ // mapTemp.put(String.valueOf(ar.get('hospitalName'),Decimal.valueOf(String.valueOf(ar.get('thisAmount'))))); // }else { // Decimal decimal = mapTemp.get(String.valueOf(ar.get('hospitalName'))); // decimal += Decimal.valueOf(String.valueOf(ar.get('thisAmount'))); // mapTemp.put(String.valueOf(ar.get('hospitalName'),decimal)); // } // } // System.debug('mapTemp = ' + mapTemp); // //排序Decimal从大到小 // List decimalList = new List(mapTemp.values()); // decimalList.sort((a, b) => b.compareTo(a)); // Map sortedMap = new Map(); // for (String key : mapTemp.keySet()) { // sortedMap.put(key, mapTemp.get(key)); // } // System.debug('Sorted Map: ' + sortedMap); //查询客户信息(名称,省,县) System.debug('arList = ' + arList); List accountList = new List(); for (AggregateResult ar : arList) { System.debug('thisAmount = ' + String.valueOf(ar.get('thisAmount'))); if (String.valueOf(ar.get('thisAmount')) != '0.0') { accountList.add(String.valueOf(ar.get('Order_ForHospital__c'))); topInfo.deList.add( Decimal.valueOf(String.valueOf(ar.get('thisAmount'))) ); } } System.debug('accountList = ' + accountList); System.debug('topInfo = ' + topInfo); List acList = [ SELECT id, Name, State_Master__c, State_Master__r.Name, Salesdepartment_HP__c, CreatedDate, Is_Active__c, RecordType.Name, Grade__c, OCM_Category__c, City_Master__c, City_Master__r.Name, Town__c, Phone FROM Account WHERE Id = :accountList ]; List acListTemp = new List(); for (String s : accountList) { for (Account a : acList) { if (s == a.id) { acListTemp.add(a); } } } topInfo.acList = acListTemp; data.put('topInfo', topInfo); data.put('pageRecords', selectAccList); data.put('paginatedAccounts', paginatedAccounts); data.put('accountId', accountId); data.put('agencyProType', agencyProType); data.put('agencyProTypestr', agencyProTypestr); res.status = 'Success'; res.code = 200; res.msg = ''; return res; } catch (Exception e) { return new ResponseBodyLWC( 'Error', 500, e.getMessage() + e.getLineNumber(), '' ); } } @AuraEnabled public static ResponseBodyLWC changeFiscalYearView(String fiscalYear) { ResponseBodyLWC res = new ResponseBodyLWC(); Map data = new Map(); res.entity = data; try { TopInfo topInfo = new TopInfo(); Date today = Date.today(); Integer lastYear = today.year() - 1; Integer thisYear = today.year(); Integer nextYear = today.year() + 1; Date lastDatetime = Date.newInstance(lastYear, 4, 1); Date thisDatetime = Date.newInstance(thisYear, 4, 1); Date thisDatetime2 = Date.newInstance(thisYear, 4, 1); Date nextDatetime = Date.newInstance(nextYear, 4, 1); AggregateResult[] arList = null; System.debug('fiscalYear = ' + fiscalYear); System.debug('thisYear = ' + thisYear); System.debug('lastYear = ' + lastYear); if (fiscalYear == 'thisYear') { AggregateResult[] saleAmountList = LexConsumableAccountSOQL.getAccountTotalSales( thisDatetime, nextDatetime ); if (saleAmountList[0].get('saleAmount') != null) { topInfo.saleAmount = Decimal.valueOf( String.valueOf(saleAmountList[0].get('saleAmount')) ); System.debug('topInfo.saleAmount = ' + topInfo.saleAmount); } arList = LexConsumableAccountSOQL.getAccountBySales( thisDatetime, nextDatetime ); } else if (fiscalYear == 'lastYear') { AggregateResult[] saleAmountList = LexConsumableAccountSOQL.getAccountTotalSales( lastDatetime, thisDatetime2 ); if (saleAmountList[0].get('saleAmount') != null) { topInfo.saleAmount = Decimal.valueOf( String.valueOf(saleAmountList[0].get('saleAmount')) ); System.debug('topInfo.saleAmount = ' + topInfo.saleAmount); } arList = LexConsumableAccountSOQL.getAccountBySales( lastDatetime, thisDatetime2 ); } else { AggregateResult[] saleAmountList = LexConsumableAccountSOQL.getAccountTotalSales( lastDatetime, nextDatetime ); if (saleAmountList[0].get('saleAmount') != null) { topInfo.saleAmount = Decimal.valueOf( String.valueOf(saleAmountList[0].get('saleAmount')) ); System.debug('topInfo.saleAmount = ' + topInfo.saleAmount); } arList = LexConsumableAccountSOQL.getAccountBySales( lastDatetime, nextDatetime ); } //查询客户信息(名称,省,县) List accountList = new List(); for (AggregateResult ar : arList) { System.debug('thisAmount = ' + String.valueOf(ar.get('thisAmount'))); if (String.valueOf(ar.get('thisAmount')) != '0.0') { accountList.add(String.valueOf(ar.get('Order_ForHospital__c'))); topInfo.deList.add( Decimal.valueOf(String.valueOf(ar.get('thisAmount'))) ); } } System.debug('accountList = ' + accountList); System.debug('topInfo = ' + topInfo); List acList = [ SELECT id, Name, State_Master__c, State_Master__r.Name, Salesdepartment_HP__c, CreatedDate, Is_Active__c, RecordType.Name, Grade__c, OCM_Category__c, City_Master__c, City_Master__r.Name, Town__c, Phone FROM Account WHERE Id = :accountList ]; List acListTemp = new List(); for (String s : accountList) { for (Account a : acList) { if (s == a.id) { acListTemp.add(a); } } } topInfo.acList = acListTemp; data.put('topInfo', topInfo); res.status = 'Success'; res.code = 200; res.msg = ''; return res; } catch (Exception e) { return new ResponseBodyLWC( 'Error', 500, e.getMessage() + e.getLineNumber(), '' ); } } @AuraEnabled public static ResponseBodyLWC changelistView( String filterNameLwc, String accountIdLwc, String agencyProTypeLwc, Integer pageSizeLWC, Integer pageTokenLWC, String sortFieldLWC, String sortOrderLWC ) { try { ResponseBodyLWC res = new ResponseBodyLWC(); Map data = new Map(); res.entity = data; filterName = filterNameLwc; accountId = accountIdLwc; agencyProTypestr = agencyProTypeLwc; pageSize = pageSizeLWC; pageToken = pageTokenLWC > 2000 ? 2000 : pageTokenLWC; sortField = sortFieldLWC; sortOrder = sortOrderLWC; String soql = makeSoql(filterName, accountId); System.debug('soql1+++++++ ' + soql); List allSelectAccount = Database.query(soql); totalCount = allSelectAccount.size(); String nullFL = sortOrder.toLowerCase() == 'asc' ? 'NULLS FIRST' : 'NULLS LAST'; if (String.isNotBlank(sortField)) { soql += ' order by ' + sortField + ' ' + sortOrder + ' ' + nullFL; } soql += ' limit ' + pagesize + ' offset ' + pageToken; System.debug('soql2+++++++ ' + soql); List selectAccList = Database.query(soql); System.debug('selectAccList = ' + selectAccList); PaginatedAccounts paginatedAccounts = new PaginatedAccounts(); paginatedAccounts.nextPageToken = (pageToken + pageSize < totalCount) ? pageToken + pageSize : null; paginatedAccounts.recordStart = pageToken + 1; paginatedAccounts.pageNumber = pageToken / pageSize + 1; Integer recordEnd = pageSize * paginatedAccounts.pageNumber; paginatedAccounts.recordEnd = totalCount >= recordEnd ? recordEnd : totalCount; paginatedAccounts.totalRecords = totalCount; data.put('pageRecords', selectAccList); data.put('paginatedAccounts', paginatedAccounts); res.status = 'Success'; res.code = 200; res.msg = ''; return res; } catch (Exception e) { return new ResponseBodyLWC( 'Error', 500, e.getMessage() + ' ' + e.getLineNumber(), '' ); } } //sql文作成 private static String makeSoql(String viewName, String accountId) { Date st = Date.today().addDays(-7).toStartOfWeek(); lastweekstart = Datetime.newInstance( st.year(), st.month(), st.day(), 8, 0, 0 ); lastweekend = lastweekstart.addDays(7); String soql = 'SELECT id,Name,State_Master__c,Salesdepartment_HP__c,CreatedDate,Is_Active__c,RecordType.Name,State_Master__r.Name,City_Master__r.Name'; soql += ' ,Grade__c,OCM_Category__c,City_Master__c,Town__c,Phone FROM Account'; soql += ' WHERE id in (SELECT Hospital__c FROM Agency_Hospital_Link__c WHERE Agency__c =:accountId AND Hosptial_Type__c like \'%' + String.escapeSingleQuotes(agencyProTypestr.replaceAll('%', '\\%')) + '%\')'; if (viewName == '61. 医院_Hospital草案中的医院') { soql += ' AND Is_Active__c = \'' + '草案中' + '\''; } if (viewName == '62. 医院_Hospital申请中的医院') { soql += ' AND Is_Active__c = \'' + '申请中' + '\''; } if (viewName == '63. 医院_Hospital上周创建的医院') { soql += ' AND Is_Active__c = \'' + '有效' + '\''; soql += ' AND CreatedDate >= :lastweekstart '; soql += ' AND CreatedDate < :lastweekend '; } System.debug('soql +++++' + soql); return soql; } //分页Bean public class PaginatedAccounts { @AuraEnabled public Integer nextPageToken; @AuraEnabled public Integer pageNumber { get; set; } @AuraEnabled public Integer totalRecords { get; set; } @AuraEnabled public Integer recordStart { get; set; } @AuraEnabled public Integer recordEnd { get; set; } } //top10 Account public class TopInfo { @AuraEnabled public Decimal saleAmount { get; set; } @AuraEnabled public List acList { get; set; } @AuraEnabled public List deList { get; set; } public TopInfo() { acList = new List(); deList = new List(); } } }