public without sharing class ProRegisterHandler {
|
|
public static void updateProduct(List<Product_Register__c> newList, Map<Id, Product_Register__c> newMap, List<Product_Register__c> oldList, Map<Id, Product_Register__c> oldMap) {
|
|
// 产品-注册证关系 中所有 产品ID
|
List<ID> Product2_ID_list = new list<ID>();
|
// 现有产品 map
|
Map<ID, Product2> Exist_ProductMap = new map<ID, Product2>();
|
// 需要更新产品 list
|
List<Product2> UpdateProductlist = new list<Product2>();
|
// 根据变更的证ID找到关联的所有的产品
|
list<Product_Register_Link__c> ExistPRLList = [select Product2__c,
|
Product_Register__c
|
from Product_Register_Link__c
|
where Product_Register__c in: newList
|
];
|
|
for (Product_Register_Link__c PRL : ExistPRLList) {
|
// 产品ID的LIST
|
Product2_ID_list.add(PRL.Product2__c);
|
}
|
|
// 通过产品ID找到该产品最新注册证ID
|
Exist_ProductMap = new Map<ID, Product2> ([select ID, Register_Latest__c, registrationCode__c, clinical_product_code__c
|
from Product2
|
where id in: Product2_ID_list
|
]);
|
|
// 通过产品ID找到所有涉及的有效关系
|
List<Product_Register_Link__c> allPRLList = [select Product2__c,
|
Product_Register__c,
|
Product_Register__r.PrdCompanyAddr__c,
|
Product_Register__r.ValidFrom__c,
|
Product_Register__r.ValidTo__c,
|
Product_Register__r.Name,
|
Product_Register__r.ValidProductRegister__c,
|
Product_Register__r.ClinicalProductCode__c
|
from Product_Register_Link__c
|
where Product2__c in : Product2_ID_list
|
order by Product2__c,
|
LastModifiedDate desc
|
];
|
|
String tmpProductID = '';
|
Product2 temProduct = new Product2();
|
Map<Id, Product2> UpdProMap = new Map<Id, Product2>();
|
|
for (Product_Register_Link__c temPRL : allPRLList) {
|
|
if (!tmpProductID.equals(temPRL.Product2__c)) {
|
|
tmpProductID = temPRL.Product2__c;
|
temProduct = Exist_ProductMap.get(tmpProductID);
|
temProduct.Register_Latest__c = temPRL.Product_Register__c; // 最新注册证ID
|
temProduct.registrationCode__c = null;
|
temProduct.clinical_product_code__c = null;
|
}
|
|
// 如果注册证状态有效,记录有效注册证号
|
if (temPRL.Product_Register__r.ValidProductRegister__c ) {
|
if (String.isBlank(temProduct.registrationCode__c)) {
|
temProduct.registrationCode__c = temPRL.Product_Register__r.Name + '\n';
|
} else {
|
if (String.isNotBlank(temPRL.Product_Register__r.Name)) {
|
if (temProduct.registrationCode__c.indexOf(temPRL.Product_Register__r.Name) == -1) {
|
temProduct.registrationCode__c += temPRL.Product_Register__r.Name + '\n';
|
}
|
}
|
}
|
|
String clinicalCode = temPRL.Product_Register__r.ClinicalProductCode__c;
|
if (String.isBlank(temProduct.clinical_product_code__c)) {
|
temProduct.clinical_product_code__c = clinicalCode;//temPRL.Product_Register__r.ClinicalProductCode__c;
|
} else {
|
|
if (String.isNotBlank(clinicalCode)) {
|
|
Map<String, String> codeMap = new Map<String, String>();
|
for (String code : temProduct.clinical_product_code__c.split('/')) {
|
codeMap.put(code, code);
|
}
|
codeMap.put(clinicalCode, clinicalCode);
|
temProduct.clinical_product_code__c = '';
|
for (String code : codeMap.values()) {
|
if (String.isBlank(temProduct.clinical_product_code__c)) {
|
temProduct.clinical_product_code__c = code;
|
} else {
|
temProduct.clinical_product_code__c += '/' + code;
|
}
|
}
|
|
}
|
|
}
|
}
|
UpdProMap.put(tmpProductID, temProduct);
|
}
|
if (UpdProMap.keySet().size() > 0) update UpdProMap.values();
|
}
|
|
//产品降类,只要注册证更新了,就检查一遍,重新给产品上的等级类别字段赋值。
|
//可以找出需要的Id,然后调用方法。
|
public static void checkRegistervervaldatum(List<Product_Register__c> newList, Map<Id, Product_Register__c> newMap, List<Product_Register__c> oldList, Map<Id, Product_Register__c> oldMap) {
|
List<String> prcList = new List<String>();
|
for (Product_Register__c pr : newList) {
|
Product_Register__c oldpr = oldMap.get(pr.Id);
|
//有效期的始与终变了,就把这个产品注册证的id放入一个List集合里面
|
//if (pr.ValidTo__c != oldpr.ValidTo__c || pr.ValidFrom__c != oldpr.ValidFrom__c) {
|
prcList.add(pr.id);
|
//}
|
}
|
//放到Map里,用于注册证更新产品
|
Map<Id,Product2> prt2Map = new Map<Id,Product2>();
|
//通过之前存储的Id用于关系表的查询。
|
List<Product_Register_Link__c> prlList = new List<Product_Register_Link__c>();
|
prlList = [select Product2__r.id,Product2__r.demoteer_Sap__c,Product2__r.Diedatvanink__c,Product_Register__r.MedPrdClass__c,Product_Register__r.Stelsedag__c,Product_Register__r.ValidTo__c,Product_Register__r.ValidFrom__c
|
from Product_Register_Link__c
|
where Product_Register__r.Id in : prcList];
|
//查询出产品ID
|
List<Id> pro2IdList = new List<Id>();
|
for (Product_Register_Link__c prl1: prlList) {
|
pro2IdList.add(prl1.Product2__r.id);
|
}
|
|
List<Product_Register_Link__c> prl1List = new List<Product_Register_Link__c>();
|
prl1List = [select Product2__r.id,Product2__r.demoteer_Sap__c,Product2__r.Diedatvanink__c,Product_Register__r.Stelsedag__c,Product_Register__r.MedPrdClass__c,Product_Register__r.ValidTo__c,Product_Register__r.ValidFrom__c
|
from Product_Register_Link__c
|
where Product2__r.Id in : pro2IdList];
|
|
//根据Id存放产品所属的所有注册证下的器械分类。
|
Map<Id,List<String>> pro2Map = new Map<Id,List<String>>();
|
//存放注册证上最前的维护日
|
Map<Id,Date> prSteMap = new Map<Id,Date>();
|
if (prl1List.size()>0) {
|
for (Product_Register_Link__c prl: prl1List) {
|
if (pro2Map.containsKey(prl.Product2__r.Id)) {
|
pro2Map.get(prl.Product2__r.Id).add(prl.Product_Register__r.MedPrdClass__c);
|
}else {
|
pro2Map.put(prl.Product2__r.Id, new List<String>());
|
pro2Map.get(prl.Product2__r.Id).add(prl.Product_Register__r.MedPrdClass__c);
|
}
|
|
if (prl.Product_Register__r.MedPrdClass__c == '1') {
|
if (prSteMap.containsKey(prl.Product2__r.Id)) {
|
if (prSteMap.get(prl.Product2__r.Id) > prl.Product_Register__r.Stelsedag__c) {
|
prSteMap.put(prl.Product2__r.Id,prl.Product_Register__r.Stelsedag__c);
|
}
|
}else {
|
prSteMap.put(prl.Product2__r.Id,prl.Product_Register__r.Stelsedag__c);
|
}
|
}
|
}
|
|
for (Product_Register_Link__c prl: prl1List) {
|
if (prSteMap.get(prl.Product2__r.Id) == null) {
|
if (prSteMap.containsKey(prl.Product2__r.Id) && (prl.Product_Register__r.MedPrdClass__c == '2' || prl.Product_Register__r.MedPrdClass__c == '3')) {
|
if (prSteMap.containsKey(prl.Product2__r.Id)) {
|
if (prSteMap.get(prl.Product2__r.Id) > prl.Product_Register__r.Stelsedag__c) {
|
prSteMap.put(prl.Product2__r.Id,prl.Product_Register__r.Stelsedag__c);
|
}
|
}else {
|
prSteMap.put(prl.Product2__r.Id,prl.Product_Register__r.Stelsedag__c);
|
}
|
}
|
}
|
}
|
}
|
System.debug('pro2Map='+pro2Map);
|
System.debug('prSteMap='+prSteMap);
|
//产品Id与等级类别
|
Map<Id,String> prlMap = new Map<Id,String>();
|
Map<Id,String> prl1Map = new Map<Id,String>();
|
Map<Id,String> prl2Map = new Map<Id,String>();
|
List<ID> pidList = new List<ID>();
|
if (pro2Map.size()>0) {
|
for (Product_Register_Link__c pr: prl1List) {
|
if (pro2Map.containsKey(pr.Product2__r.Id) && prSteMap.containsKey(pr.Product2__r.Id)) {
|
pidList.add(pr.Product2__r.Id);
|
if (pr.Product2__r.demoteer_Sap__c <> null && pr.Product2__r.Diedatvanink__c <> null) {
|
if (pr.Product_Register__r.Stelsedag__c <> null) {
|
if (pr.Product2__r.Diedatvanink__c <= pr.Product_Register__r.Stelsedag__c) {
|
if (pr.Product2__r.demoteer_Sap__c <= pr.Product_Register__r.ValidTo__c && pr.Product2__r.demoteer_Sap__c >= pr.Product_Register__r.ValidFrom__c
|
&& pr.Product_Register__r.MedPrdClass__c == '2' || pr.Product_Register__r.MedPrdClass__c == '3') {
|
if (prlMap.get(pr.Product2__r.Id) == null) {
|
prlMap.put(pr.Product2__r.Id, '二类');
|
}else {
|
String Lins = prlMap.get(pr.Product2__r.Id);
|
Lins += '二类';
|
prlMap.put(pr.Product2__r.Id, Lins);
|
}
|
}
|
else if (pr.Product2__r.demoteer_Sap__c <= pr.Product_Register__r.ValidTo__c && pr.Product2__r.demoteer_Sap__c >= pr.Product_Register__r.ValidFrom__c
|
&& (pr.Product_Register__r.MedPrdClass__c == '1')) {
|
if (prlMap.get(pr.Product2__r.Id) == null) {
|
prlMap.put(pr.Product2__r.Id, '一类');
|
}else {
|
String Lins = prlMap.get(pr.Product2__r.Id);
|
Lins += '一类';
|
prlMap.put(pr.Product2__r.Id, Lins);
|
}
|
}else {
|
if (prlMap.get(pr.Product2__r.Id) == null) {
|
prlMap.put(pr.Product2__r.Id, '非监管');
|
}else {
|
String Lins = prlMap.get(pr.Product2__r.Id);
|
Lins += '非监管';
|
prlMap.put(pr.Product2__r.Id, Lins);
|
}
|
}
|
}else if (pr.Product2__r.Diedatvanink__c > pr.Product_Register__r.Stelsedag__c) {
|
if (pr.Product2__r.demoteer_Sap__c <= pr.Product_Register__r.ValidTo__c && pr.Product2__r.demoteer_Sap__c >= pr.Product_Register__r.ValidFrom__c
|
&& pr.Product_Register__r.MedPrdClass__c == '1') {
|
if (prl1Map.get(pr.Product2__r.Id) == null) {
|
prl1Map.put(pr.Product2__r.Id, '一类');
|
}else {
|
String Lins = prl1Map.get(pr.Product2__r.Id);
|
Lins += '一类';
|
prl1Map.put(pr.Product2__r.Id, Lins);
|
}
|
}else if (pr.Product2__r.demoteer_Sap__c <= pr.Product_Register__r.ValidTo__c && pr.Product2__r.demoteer_Sap__c >= pr.Product_Register__r.ValidFrom__c
|
&& pr.Product_Register__r.MedPrdClass__c == '2' || pr.Product_Register__r.MedPrdClass__c == '3') {
|
if (prl1Map.get(pr.Product2__r.Id) == null) {
|
prl1Map.put(pr.Product2__r.Id, '二类');
|
}else {
|
String Lins = prl1Map.get(pr.Product2__r.Id);
|
Lins += '二类';
|
prl1Map.put(pr.Product2__r.Id, Lins);
|
}
|
}else {
|
if (prlMap.get(pr.Product2__r.Id) == null) {
|
prlMap.put(pr.Product2__r.Id, '非监管');
|
}else {
|
String Lins = prlMap.get(pr.Product2__r.Id);
|
Lins += '非监管';
|
prlMap.put(pr.Product2__r.Id, Lins);
|
}
|
}
|
}
|
}else {
|
prl2Map.put(pr.Product2__r.Id, '空');
|
}
|
}
|
}
|
}
|
}
|
System.debug('prlMap='+prlMap);
|
System.debug('prl1Map='+prl1Map);
|
System.debug('prl2Map='+prl2Map);
|
|
List<Product2> por2Lsit = new List<Product2>();
|
//查出产品的id和等级类别的字段
|
por2Lsit = [select Id,Level_Category__c,demoteer_Sap__c,Diedatvanink__c from Product2 where Id in : pidList];
|
if (por2Lsit.size() > 0) {
|
for (Product2 pr2: por2Lsit) {
|
if (prlMap.containsKey(pr2.Id)) {
|
if ((prlMap.get(pr2.Id).contains('二类') && prlMap.get(pr2.Id).contains('一类')) ||
|
(!prlMap.get(pr2.Id).contains('一类') && prlMap.get(pr2.Id).contains('二类'))){
|
pr2.Level_Category__c = '二类';
|
prt2Map.put(pr2.Id, pr2);
|
}else if (prlMap.get(pr2.Id).contains('一类') && !prlMap.get(pr2.Id).contains('二类')) {
|
pr2.Level_Category__c = '一类';
|
prt2Map.put(pr2.Id, pr2);
|
}else if (prlMap.get(pr2.Id).contains('非监管') && !prl2Map.containsKey(pr2.Id)) {
|
pr2.Level_Category__c = '非监管';
|
prt2Map.put(pr2.Id, pr2);
|
}else {
|
pr2.Level_Category__c = null;
|
prt2Map.put(pr2.Id, pr2);
|
}
|
}
|
if (prl1Map.containsKey(pr2.Id)) {
|
if (prl1Map.get(pr2.Id).contains('一类')) {
|
pr2.Level_Category__c = '一类';
|
prt2Map.put(pr2.Id, pr2);
|
}else if (prl1Map.get(pr2.Id).contains('二类') && !prl1Map.get(pr2.Id).contains('一类')) {
|
pr2.Level_Category__c = '二类';
|
prt2Map.put(pr2.Id, pr2);
|
}else if (prl1Map.get(pr2.Id).contains('非监管') && !prl2Map.containsKey(pr2.Id)) {
|
pr2.Level_Category__c = '非监管';
|
prt2Map.put(pr2.Id, pr2);
|
}else {
|
pr2.Level_Category__c = null;
|
prt2Map.put(pr2.Id, pr2);
|
}
|
}
|
if (pr2.demoteer_Sap__c == null || pr2.Diedatvanink__c == null) {
|
pr2.Level_Category__c = null;
|
prt2Map.put(pr2.Id, pr2);
|
}
|
}
|
}
|
|
System.debug('prt2Map='+prt2Map);
|
if (prt2Map.size() > 0) {
|
update prt2Map.values();
|
}
|
}
|
}
|