global class OpportunityWebService {
|
|
WebService static String changeTrade(String oppId){
|
|
List<Quote> quoList = [select id from Quote where OpportunityId = :oppId];
|
List<OpportunityLineItem> oppLI = [select id from OpportunityLineItem where Opportunity.id = :oppId];
|
|
Opportunity opp = new Opportunity();
|
opp.id = oppId;
|
opp.Estimation_Decision__c = false;
|
opp.Estimation_Id__c = null;
|
opp.Quote_Update_Sum__c = null;
|
opp.Estimation_No__c = null;
|
opp.Estimation_Proposal_Date__c = null;
|
opp.Estimation_Name__c = null;
|
// LHJ SWAG-C9QAAJ 去掉 Start
|
// opp.Authorized_Finish_Sales__c = null;
|
// opp.Authorized_DB_No__c = null;
|
// opp.Authorized_Date__c = null;
|
// opp.Autholization_Activated_Date__c = null;
|
// opp.Bidding_Content__c = null;
|
// opp.Bid_Date__c = null;
|
// opp.Bidding_No__c = null;
|
// opp.Bidding_Project_Name__c = null;
|
// LHJ End
|
|
Savepoint sp = Database.setSavepoint();
|
try {
|
delete quoList;
|
delete oppLI;
|
update opp;
|
return '1';
|
} catch (Exception ex) {
|
Database.rollback(sp);
|
return ex.getMessage() + ' | Line:' + ex.getLineNumber();
|
}
|
}
|
|
// LHJ CBPR Start
|
webservice String parameter { get; set; }
|
|
public OpportunityWebService() {
|
this.parameter = 'value';
|
}
|
|
WebService static String oppCheck(String oppid, String saveFlg) {
|
|
Map<Id, String> proMap= new Map<Id, String>();
|
List<OpportunityLineItem> OppItemList = [select PricebookEntry.Product2Id, PricebookEntry.Product2.Name
|
From OpportunityLineItem
|
Where OpportunityId = :oppid];
|
|
if (OppItemList.size() > 0) {
|
for (OpportunityLineItem opl : OppItemList) {
|
proMap.put(opl.PricebookEntry.Product2Id, opl.PricebookEntry.Product2.Name);
|
}
|
}
|
|
List<Opportunity> oppList = [select Agency1__c from Opportunity where id = :oppid];
|
String angencyId = oppList[0].Agency1__c;
|
String strRet = '';
|
|
if (saveFlg == '1') {
|
strRet = checkProRegisterDecide(proMap, angencyId, oppid);
|
} else {
|
strRet = checkProRegisterDecide(proMap, angencyId, '');
|
}
|
return strRet;
|
}
|
|
// LHJ 阿西赛多检查 Start
|
WebService static String checkDangerItem(String agency1) {
|
//没有危化品证照的提示信息
|
String licenseStr = '第一经销商没有有效的危险化学品经营许可证。';
|
//没有阿西赛多经销商协议的提示信息
|
String accStr = '第一经销商没有阿西赛多经销商协议。';
|
|
//检查是否有证照
|
List<License_Information__c> licenseList = [SELECT Id
|
FROM License_Information__c
|
WHERE LicenseAndAccount__c = :agency1
|
AND LicenseType__c = '危险化学品经营许可证'
|
AND Is_Active_Formula__c = true
|
|
];
|
//检查是否有阿西赛多协议
|
List<Account> accountList = [SELECT Id
|
FROM Account
|
WHERE Parent.id = :agency1
|
//阿西赛多 增加检索阿西赛多协议 以及 可以做报价(复选框) 精琢技术 wql 2021/01/04 start
|
AND Contract_Quote_Decide_Flag_checkbox__c =true
|
AND Assiesedo_Dealer__c = true
|
//阿西赛多 增加检索阿西赛多协议 以及 可以做报价(复选框) 精琢技术 wql 2021/01/04 end
|
];
|
|
system.debug('licenseList:'+licenseList.size());
|
system.debug('agency1:'+agency1);
|
//①既没有危化品证也没有阿西赛多协议
|
if(licenseList.size() == 0 && accountList.size() ==0){
|
return licenseStr+accStr;
|
}
|
//②没有危化品证
|
else if(licenseList.size() ==0){
|
return licenseStr;
|
}
|
//②没有阿西赛多经销商协议
|
else if(accountList.size() ==0){
|
return accStr;
|
}
|
//③全都有
|
else{
|
return 'OK';
|
}
|
}
|
// LHJ 阿西赛多检查 End
|
|
public static Map<String, String> MapCheckProRegisterDecide(Map<Id, String> proMap, String agency1, String OppId) {
|
|
Map<String, String> retMap = new Map<String, String>();
|
String errormessage = '';
|
Boolean error = false;
|
Map<String,List<String>> proAllBSstrMap;
|
List<String> proNotNeedList = new List<String>();
|
|
Map<String,List<String>> old_newMap = new Map<String,List<String>>();
|
Map<String,List<String>> new_oldMap = new Map<String,List<String>>();
|
|
// 取得 经营范围对应产品关系
|
List<String> midStr = new List<String>();
|
List<String> midStrO = new List<String>();
|
|
// List<Product_Register_contrast__c> rrList = Product_Register_contrast__c.getall().values();
|
|
// for (Product_Register_contrast__c rr : rrList) {
|
|
// midStr = new List<String>();
|
// midStrO = new List<String>();
|
|
// // 经营范围对应产品关系 Map作成 旧-新对照
|
// if (old_newMap.containsKey(rr.Register_old__c)) {
|
// old_newMap.get(rr.Register_old__c).add(rr.Register_new__c);
|
// } else {
|
// midStrO.add(rr.Register_new__c);
|
// old_newMap.put(rr.Register_old__c, midStrO.clone());
|
// }
|
|
// // 经营范围对应产品关系 Map作成 新-旧对照
|
// if (new_oldMap.containsKey(rr.Register_new__c)) {
|
// new_oldMap.get(rr.Register_new__c).add(rr.Register_old__c);
|
// } else {
|
// midStr.add(rr.Register_old__c);
|
// new_oldMap.put(rr.Register_new__c, midStr.clone());
|
// }
|
|
// }
|
// 取得经销商 医疗器械经营许可证
|
List<License_Information__c> licenseList = [SELECT Id,
|
ScopeKey__c,
|
LicenseType__c
|
FROM License_Information__c
|
WHERE LicenseAndAccount__c = :agency1
|
AND (LicenseType__c = '医疗器械经营许可证'
|
OR LicenseType__c = '第二类医疗器械经营备案凭证')
|
AND Is_Active_Formula__c = true
|
];
|
// 判断 医疗器械经营许可证 是否存在
|
if (licenseList.size() == 0) {
|
error = true;
|
errormessage = '第一经销商没有有效的医疗器械经营许可证。';
|
retMap.put('agency', '0');
|
|
} else {
|
//经销商经营范围
|
List<String> agListA = new List<String>();
|
List<String> agListTemp = new List<String>();
|
List<String> agList = new List<String>();
|
|
//取经销商下 所有医疗器械经营许可证、第二类医疗器械经营备案凭证
|
for (License_Information__c li : licenseList) {
|
if (li.ScopeKey__c != null) {
|
agListA.addAll(li.ScopeKey__c.split(';'));
|
agListTemp.addAll(li.ScopeKey__c.split(';'));
|
}
|
}
|
for (String a : agListTemp) {
|
if (a.length() >= 6) {
|
agList.add(a.substring(0, a.length() - 1));
|
} else {
|
agList.add(a.trim());
|
}
|
}
|
|
//产品注册证
|
Map<String,Map<String,String>> proBSMap = new Map<String,Map<String,String>>();
|
|
Map<String,String> proMidMap = null;
|
//产品所有有效注册证(可以和经销商匹配)
|
proAllBSstrMap = new Map<String,List<String>>();
|
set<Id> proIdList = new set<Id>();
|
|
for (String qli : proMap.keySet()) {
|
proIdList.add(qli);
|
proBSMap.put(qli, proMidMap);
|
List<String> empList = new List<String>();
|
proAllBSstrMap.put(qli, empList);
|
|
}
|
|
List<Product_Register_Link__c> prls = [
|
Select Product2__c,
|
Product2__r.Asset_Model_No__c,
|
Product2__r.SFDA_Approbated_Status__c,
|
Product2__r.SFDA_Status_New__c, // 产品的CFDA最终状态 20181225
|
Product_Register__r.Name,
|
Product_Register__r.BusinessScopeKey__c,
|
Product_Register__r.RegisterNoStatus__c,
|
Product_Register__r.MedPrdClass__c
|
From Product_Register_Link__c
|
where Product2__c in :proIdList
|
];
|
|
// LHJ 20190102 增加跳过逻辑 Start
|
List<Product2> productList = [select ID,SFDA_Status__c from Product2 where id in :proIdList];
|
for (Product2 pro : productList) {
|
if (pro.SFDA_Status__c == '不要') {
|
proNotNeedList.add(pro.ID);
|
}
|
}
|
// LHJ 20190102 增加跳过逻辑 End
|
|
for (Product_Register_Link__c prl : prls) {
|
|
// 设置产品类别MAP
|
if (String.isNotBlank(prl.Product_Register__r.BusinessScopeKey__c)) {
|
system.debug('Product2 +++++++' + prl.Product2__c);
|
if (proBSMap.get(prl.Product2__c) != null) {
|
proBSMap.get(prl.Product2__c).put(prl.Product_Register__r.Name, prl.Product_Register__r.BusinessScopeKey__c);
|
|
} else {
|
Map<String,String> toooMap = new Map<String,String>();
|
toooMap.put(prl.Product_Register__r.Name, prl.Product_Register__r.BusinessScopeKey__c);
|
proBSMap.put(prl.Product2__c, toooMap.clone());
|
}
|
}
|
|
// 产品的产品注册证是"不要"状态 不需要匹配注册证 20181225
|
if (prl.Product2__r.SFDA_Approbated_Status__c == '不要'
|
|
|| prl.Product_Register__r.MedPrdClass__c == '1') {
|
proNotNeedList.add(prl.Product2__c);
|
}
|
}
|
system.debug('proBSMap +++++++' + proBSMap);
|
for (String qli : proMap.keySet()) {
|
|
String proId = qli;
|
String proName = proMap.get(proId);
|
|
if (proId != null) {
|
Boolean haveBS = false;
|
|
// 产品属于非医疗,不用判断经营范围
|
if (proNotNeedList.contains(proId)) {
|
haveBS = true;
|
continue;
|
}
|
|
if (proBSMap.get(proId) == null) {
|
error = true;
|
errormessage += '产品"' + proName + '"没有有效的产品注册证。\n';
|
retMap.put(proId, '1');
|
continue;
|
}
|
|
|
if (proBSMap.get(proId) != null) {
|
system.debug('111 +++++++' + proBSMap);
|
Map<String,String> midMap = new Map<String,String>();
|
midMap = proBSMap.get(proId);
|
|
for (String str : midMap.keySet()) {
|
// LHJ 20200711 Start
|
String strMidMap = midMap.get(str);
|
List<String> proRegList = new List<String>();
|
proRegList.addAll(strMidMap.split(';'));
|
// LHJ 20200711 End
|
for(String strReg:proRegList){
|
// 被定义为"6815A"的产品类别,经营范围中必须有6815或者6815A外才可以匹配。
|
if (strReg.length() == 6) {
|
|
for(String strAg:agListA){
|
if(strAg.length() >= 5 && midMap.get(str.substring(0, str.length() - 1)) == strAg.substring(0,5)){
|
proAllBSstrMap.get(proId).add(str.substring(0, str.length() - 1));
|
haveBS = true;
|
break;
|
}
|
}
|
|
/*if (agListA.contains(midMap.get(str.substring(0, str.length() - 1)))) {
|
proAllBSstrMap.get(proId).add(str.substring(0, str.length() - 1));
|
haveBS = true;
|
}*/
|
} else {
|
system.debug('agList +++++++' + agList);
|
system.debug('midMap +++++++' + strReg);
|
|
if (agList.contains(strReg)) {
|
|
//产品类别,匹配到经销商类别
|
proAllBSstrMap.get(proId).add(str);
|
haveBS = true;
|
break;
|
}
|
}
|
}
|
|
|
}
|
}
|
|
if (!haveBS) {
|
error = true;
|
errormessage += '第一经销商的经营范围中不包含产品" ' + proName + '"。\n';
|
retMap.put(proId, '2');
|
}
|
}
|
}
|
}
|
|
if (retMap.isEmpty() == false) {
|
//return errormessage;
|
|
} else {
|
if (OppId != '') {
|
// 更新所有注册证信息
|
String strRegister_alleffective;
|
List<Product2> pro2List = new List<Product2>();
|
Map<String, Product2> pro2Map = new Map<String, Product2>();
|
List<OpportunityLineItem> updList = new List<OpportunityLineItem>();
|
List<OpportunityLineItem> OppItemList = [select id, Id__c, Register_alleffective__c,PricebookEntry.Product2Id
|
From OpportunityLineItem
|
Where OpportunityId = :OppId];
|
// 非医疗或1类产品,取得
|
if (proNotNeedList != null && proNotNeedList.size() > 0) {
|
pro2List = [select id, SFDA_Approbated_Status__c, RegisterNo_ALL__c from Product2 where Id in :proNotNeedList];
|
}
|
for (Product2 pro2 : pro2List) {
|
pro2Map.put(pro2.Id, pro2);
|
}
|
|
for (OpportunityLineItem ol : OppItemList) {
|
if (proAllBSstrMap.containsKey(ol.PricebookEntry.Product2Id)) {
|
ol.Register_alleffective__c = '';
|
for(String str: proAllBSstrMap.get(ol.PricebookEntry.Product2Id)) {
|
|
if (String.isNotBlank(ol.Register_alleffective__c)) {
|
ol.Register_alleffective__c += ';' + str;
|
} else {
|
ol.Register_alleffective__c = str;
|
}
|
}
|
// 非医疗或1类产品
|
if (pro2Map.containskey(ol.PricebookEntry.Product2Id)) {
|
if (pro2Map.get(ol.PricebookEntry.Product2Id).SFDA_Approbated_Status__c == '不要') {
|
ol.Register_alleffective__c = 'FYL';
|
} else {
|
ol.Register_alleffective__c = pro2Map.get(ol.PricebookEntry.Product2Id).RegisterNo_ALL__c;
|
}
|
}
|
}
|
updList.add(ol);
|
}
|
if (updList.size() > 0) update updList;
|
}
|
}
|
//如果不满足阿西赛多的条件,进入这个变量 20200821 ljh
|
return retMap;
|
}
|
|
public static String checkProRegisterDecide(Map<Id, String> proMap, String agency1, String OppId) {
|
|
String errormessage = '';
|
Boolean error = false;
|
|
Map<String, String> CheckMap = new Map<String, String>();
|
CheckMap = MapCheckProRegisterDecide(proMap, agency1, OppId);
|
if (CheckMap.isEmpty()) {
|
return 'OK';
|
} else {
|
return '有不可销售产品或超出经销商经营范围,请更新报价单' + CheckMap;
|
}
|
|
}
|
WebService static String updReg(String oppid) {
|
|
List<OpportunityLineItem> updList = new List<OpportunityLineItem>();
|
List<OpportunityLineItem> OppItemList = [select id, Id__c, Register_alleffective__c,
|
PricebookEntry.Product2.RegisterNo_ALL__c
|
From OpportunityLineItem
|
Where OpportunityId = :oppid];
|
for (OpportunityLineItem ol : OppItemList) {
|
ol.Register_alleffective__c = ol.PricebookEntry.Product2.RegisterNo_ALL__c;
|
updList.add(ol);
|
}
|
if (updList.size() > 0) update updList;
|
return 'OK';
|
}
|
}
|