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<Account> 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<String, object> data = new Map<String, object>();
|
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<Account> 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<Account> 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<Account> 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<String,Decimal> mapTemp = new Map<String,Decimal>();
|
// 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<Decimal> decimalList = new List<Decimal>(mapTemp.values());
|
// decimalList.sort((a, b) => b.compareTo(a));
|
// Map<String, Decimal> sortedMap = new Map<String, Decimal>();
|
// for (String key : mapTemp.keySet()) {
|
// sortedMap.put(key, mapTemp.get(key));
|
// }
|
|
// System.debug('Sorted Map: ' + sortedMap);
|
|
//查询客户信息(名称,省,县)
|
System.debug('arList = ' + arList);
|
List<String> accountList = new List<String>();
|
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<Account> 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<Account> acListTemp = new List<Account>();
|
|
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<String, object> data = new Map<String, object>();
|
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<String> accountList = new List<String>();
|
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<Account> 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<Account> acListTemp = new List<Account>();
|
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<String, object> data = new Map<String, object>();
|
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<Account> 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<Account> 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<Account> acList { get; set; }
|
@AuraEnabled
|
public List<Decimal> deList { get; set; }
|
|
public TopInfo() {
|
acList = new List<Account>();
|
deList = new List<Decimal>();
|
}
|
}
|
}
|