public with sharing class NFM202Controller { public static boolean isRunning = false; public static String debug_msg = ''; public static String status; public class AgencyInfo { public String agencyCode_1; public String agencyCode_2; public Decimal price; } public class Quotations_element { public NFMUtil.Monitoring Monitoring; public Quotation_element[] GeData; } public class Quotation_element { public String InquiryCode; public String Quote_Code; public String SalesPoint; public String Province; public String City; public String HPCode; public String OwnerDepartment; public String Trade; public Boolean SpecialLanhai; public Boolean GroupPurchase; public Boolean STMSPackage; // CHAN-BZD8M6 XHL Start public Boolean EnergyHost;//能量主机 // CHAN-BZD8M6 XHL End public String SubmitUser; public String SalesMethod; public String SalesRoot; public String SpecialDealerCode; public String SpeciaDealerCode_2; public String SalesType; public String OwnerNo; public String DepartmentCode; public String OppCategory; public Decimal Cost; public Decimal Agent12Price; public String Situation; public String TransType; public Decimal ListPrice; public Decimal DealerFinalPrice; public Decimal ContractPrice; public String Authorized_DB_No; public Boolean Special170; public Boolean SpecialAohui; public String OrderType; // 耗材订单类型 public String TermContractNo; // 协议编码 // LHJ 多年保修 20190812 Start public Decimal ServicePrice; // ServicePrice public String ContractPeriod; // 保修期限 public Boolean IfCancelGuarantee; // 是否除掉多年保修 // LHJ 多年保修 20190812 End public String SFDC_DataID; public Detail_element[] Items; //报价试算 public ProductDetais[] ProductDetais; //报价试算行 //20200810 ljh add start //public String IsCorrosion; //20200810 ljh add end //阿西赛多 wql 20210331 public Boolean IsAcecide; // CHAN-C9P5WM 20211216 ssm 增加科室名 start public String DepartmentName; // CHAN-C9P5WM 20211216 ssm 增加科室名 end public String winBiddingDate;//SWAG-CCL6R7 2022-3-22 yjk 增加中标日 public String CelonOpportunity;// 20220415 ljh SWAG-CCK8V4 add } public class Detail_element { public String ProductCode; public Decimal Quantity; public Decimal MasterPrice; public String RegistrationNo; public String ProductionCompany; public String SalesPackagingUnit_c; // LHJ 多年保修 20190812 Start public Decimal SerPrice; // ServicePrice public String GuaranteeType; // 保修类别 public Decimal GuaranteePeriod; // 保修年限 // LHJ 多年保修 20190812 End // LHJ SWAG-C9F9P8 20211206 增加规格 Start public Decimal Packing; // 产品规格 public String GuaranteeTypePro; // LHJ SWAG-C9F9P8 20211206 增加规格 End // CHAN-C9P5WM 20211216 ssm 增加产品型号和产品名称 start public String ModelNo; public String productName; // CHAN-C9P5WM 20211216 ssm 增加产品型号和产品名称 end //lt 20220223 CHAN-CBW9FX 特殊交货期影响的对应 start public String DeliveryDate; //lt 20220223 CHAN-CBW9FX 特殊交货期影响的对应 end } /* 报价试算 */ public class ProductDetais{ public String CID; //促销方案ID public String PriceStrategyType; //策略类型 public String ProductCode; //产品编码(指OTcode) public Decimal CXNum; //促销数量 public Decimal OneCXPrice; //单次促销方案价格 public Decimal UseCount; //使用次数 public Decimal ContractPrice; //合同价格 public Decimal DiscountRate; //折扣 } /** * NFM202の送信処理 * * @param iflog_Id ログテーブルのId * @param oppIds 送信対象取引先 * @param transTypeMap 1:第一次询价 2:第二次询价 */ @future (callout=true) public static void callout(String iflog_Id, List oppIds, Map transTypeMap) { if (oppIds == null || oppIds.size() == 0) { return; } // MessageGroupNumber の取得 List iflogList = [Select Id, Name, Log__c, ErrorLog__c from BatchIF_Log__c where Id = :iflog_Id]; BatchIF_Log__c iflog = null; if (iflogList.size() > 0) { iflog = iflogList.get(0); iflog.ErrorLog__c = ''; } else { // データ取れってないとは、rollbackされていることです return; } String logstr = iflog.Log__c + '\nNumberOfRecord=' + oppIds.size() + ' '; // Monitoringの設定 Datetime nowDT = Datetime.now(); String nowStr = nowDT.format('yyyyMMddHHmm'); Quotations_element quotations = new Quotations_element(); quotations.Monitoring = new NFMUtil.Monitoring(); quotations.Monitoring.Tag = 'MSGH'; quotations.Monitoring.Sender = 'SFDC'; quotations.Monitoring.Receiver = 'SPO'; quotations.Monitoring.MessageType = 'NFM202'; quotations.Monitoring.MessageGroupNumber = iflog.Name; quotations.Monitoring.NumberOfRecord = '' + oppIds.size(); quotations.Monitoring.TransmissionDateTime = nowStr; quotations.Monitoring.Text = ''; BatchIF_Log__c rowData = null; // BatchIF転送表 から、コード変換のMapを作成 Map transferMap = new Map(); List transferList = [select Table__c, Column__c, External_value__c, Internal_value__c from BatchIF_Transfer__c where Dropped_Flag__c = false and Table__c = 'Opportunity']; for (BatchIF_Transfer__c t : transferList) { transferMap.put(t.Column__c + t.Internal_value__c, t.External_value__c); } try { // 根据询价ID取得报价询价相关信息 List oppList = [select id, Estimation_No__c, Estimation_List_Price__c, Dealer_Final_Price_F__c, OCM_Agent1_Price__c, Agent1_Agent2_Price__c, Stocking_Price__c, Agency1__r.Management_Code__c, Agency2__r.Management_Code__c, Opportunity_No__c, SAP_Province__c, State__c, City__c, HP_Management_Code__c, Owner_Salesdepartment__c, Trade__c, Special_Opp_lanhai__c, Group_purchase_PCL__c, STMS_Package_Sale__c, EnergyHost__c, Sales_Method__c, Sales_Root__c, Direct_Separate__c, Owner_System__r.Employee_No__c, Account.Management_Code__c, Opportunity_Category__c, Opp_situation__c, Authorized_DB_No__c, Estimation_Id__c, If_Have_170__c, If_Have_AH__c, Opp_order_Type__c, Account.Term_Contract_No__c, // CHAN-BGZ394 start SalesdepartmentForecast__c, Account.Salesdepartment_Dept__c, // CHAN-BGZ394 end // LHJ 多年保修 20190627 Start multiYearWarranty__c, Gurantee_Period__c, //外贸多年保修 精琢技术 wql 2021/03/23 start DecideQuoteDate__c, //外贸多年保修 精琢技术 wql 2021/03/23 start // MultiYearWarrantyTotalPrice__c, // LHJ 多年保修 20190627 End //20200810 ljh 阿西赛多 add start Is_Corrosion__c, //20200810 ljh 阿西赛多 add end // CHAN-C9P5WM 20211216 ssm 增加科室名 start Department_Name__c, // CHAN-C9P5WM 20211216 ssm 增加科室名 end //SWAG-CCL6R7 2022-3-22 yjk 增加中标日 start Closing_Bid_Date_Bid__c, Closing_Bid_Date__c, //SWAG-CCL6R7 2022-3-22 yjk 增加中标日 end CelonOpportunity__c, // 20220415 ljh SWAG-CCK8V4 add Account.RecordType.DeveloperName from Opportunity where id in :oppIds]; // 根据询价ID取得询价产品信息 List itemList = [select id, OpportunityId, ProductCode__c, Register_alleffective__c, UnitPrice__c, Product_ListPrice__c, PricebookEntry.Product2.ProduceCompany_F__c, //生产企业 增加检索 PricebookEntry.Product2.ProduceCompany__c, //生产企业 增加检索 PricebookEntry.Product2.SalesPackagingUnit_Chinese__c, Item_Order__c, PricebookEntry.Product2.Intra_Trade_Cost_RMB__c, PricebookEntry.Product2.Foreign_Trade_Cost_US__c, ListPrice__c, // LHJ 多年保修 20190627 Start latestServicePrice__c, latestWarrantyType__c, lastestGuaranteePeriod__c, lastestIf_Cancel_Guarantee__c, // LHJ 多年保修 20190627 End Quantity , // CHAN-C9P5WM 20211216 ssm 增加科室名 start Name__c, Asset_Model_No__c, // CHAN-C9P5WM 20211216 ssm 增加科室名 end PricebookEntry.Product2.Packing_list_manual__c, PricebookEntry.Product2.GuranteeType__c //lt 20220223 CHAN-CBW9FX 特殊交货期影响的对应 start ,DeliveryDate__c //lt 20220223 CHAN-CBW9FX 特殊交货期影响的对应 end from OpportunityLineItem where OpportunityId in :oppIds]; Map> oppIDMap = new Map>(); for (OpportunityLineItem oppItem : itemList) { if (!oppIDMap.containsKey(oppItem.OpportunityId)) { oppIDMap.put(oppItem.OpportunityId, new List()); } oppIDMap.get(oppItem.OpportunityId).add(oppItem); } //报价试算 通过询价找到报价id,检索报价试算行 制作map start------------------------------------------ //报价id list List quoIdList = new List(); Map promotionSalesMap = new Map(); //报价试算产品行 List psList =new List(); //报价试算选择方案 List promotionList =new List(); //询价不为空 if(oppList.size()>0){ //根据询价找到报价id for(Opportunity opp1 : oppList){ if(opp1.Estimation_Id__c !=null){ quoIdList.add(opp1.Estimation_Id__c); } } //报价id不为空 检索试算行 if(quoIdList.size()>0){ /* 检索报价试算行的 id,促销方案,促销方案SPOid,促销方案分类,otcode,数量,经销商小计,使用次数,报价id */ psList = [select id,PromotionSales__c,PromotionSales__r.PromotionHead__r.SpoId__c,PromotionSales__r.Category__c,Asset_Model_No__c,Quantity__c,AgencyUnitPrice__c,AgencySubtotal__c,UseCount__c,QuantityId__c,Product2__r.ProductCode,Product2__r.MDM_Model_No__c,PromotionNo__c,DiscountRate__c from PromotionSalesProducts__c where QuantityId__c in:quoIdList]; // if(psList.size()>0){ // for (PromotionSalesProducts__c p : psList) { // promotionSalesMap.put(p.QuantityId__c,p); // } // } promotionList = [select id,contractPrice__c,itemCounts__c,PromotionHead__r.PromotionNo__c,PromotionHead__r.SpoId__c from PromotionSales__c where Quote__c in:quoIdList]; } } //报价试算 通过询价找到报价id,检索报价试算行 制作map end-------------------------------------------- // 取得当前操作用户 String userId = UserInfo.getUserId(); List userList = [select Employee_No__c from user where id = :userId]; String strEmpNo = ''; if (!userList.isEmpty()) { strEmpNo = userList[0].Employee_No__c; } //报价试算 start List cateClass = new List{'促销方案','一般产品', '经销商固定折扣'}; Map transferMapCU = new Map(); List transferListCU = [select Table__c, Column__c, External_value__c, Internal_value__c from BatchIF_Transfer__c where Dropped_Flag__c = false and Table__c = 'PromotionSales__c']; for (BatchIF_Transfer__c t : transferListCU) { transferMapCU.put(t.External_value__c,t.Internal_Value__c); } //构建map 促销方案、一般产品 传实际主数据数量 start Map PromotionMap = new Map(); //构建map 促销方案、一般产品 传实际促销包价钱之和 Map priceMap = new Map(); if(psList.size()>0){ List PromotionNoList = new List(); for(PromotionSalesProducts__c psps : psList){ if(psps.PromotionNo__c!=null){ PromotionNoList.add(psps.PromotionNo__c); //每一行小计/使用次数 = 小计之和/次数 Decimal dec = psps.AgencySubtotal__c/psps.UseCount__c; if(priceMap.get(psps.PromotionNo__c)!=null){ Decimal decSum = dec+priceMap.get(psps.PromotionNo__c); priceMap.put(psps.PromotionNo__c,decSum.setScale(2, RoundingMode.HALF_UP) ); }else{ priceMap.put(psps.PromotionNo__c, dec.setScale(2, RoundingMode.HALF_UP)); } } } //构建map 促销方案、一般产品 传实际主数据数量 start if(PromotionNoList.size()>0){ List ppList =[select id,PromotionHead__c,PromotionHead__r.PromotionNo__c,Quantity__c,Asset_Model_No__c from PromotionProduct__c where PromotionHead__r.PromotionNo__c in:PromotionNoList]; if(ppList.size()>0){ for(PromotionProduct__c pp :ppList){ PromotionMap.put(pp.PromotionHead__r.PromotionNo__c+pp.Asset_Model_No__c,pp.Quantity__c); } } } //构建map 促销方案、一般产品 传实际主数据数量 end } //构建map 促销方案、一般产品 传手输后的促销价格合计 start Map PromotionSaleMap = new Map(); //构建map 促销方案、一般产品 新增传输字段 Map PromotionSalePriceMap = new Map(); if(promotionList.size()>0){ for(PromotionSales__c promotion:promotionList){ if(promotion.contractPrice__c!=null &&promotion.itemCounts__c!=null){ Decimal rounded = promotion.contractPrice__c /Integer.valueOf(promotion.itemCounts__c); PromotionSaleMap.put(promotion.PromotionHead__r.SpoId__c,rounded.setScale(2, RoundingMode.HALF_UP) ); PromotionSalePriceMap.put(promotion.PromotionHead__r.SpoId__c, promotion.contractPrice__c); } } } //报价试算 end // データの設定 quotations.GeData = new List(); for (Opportunity opp : oppList) { logstr += '询价区分:' + transTypeMap.get(opp.id) + '\n'; List agencyList = new List(); AgencyInfo agencyInfo = new AgencyInfo(); //外贸多年保修 精琢技术 wql 2021/03/23 start //上线前decide的询价标识 Boolean oldDecideDateUSD = false; //已经decide 并且在上线前decide if(opp.DecideQuoteDate__c== null ||(opp.DecideQuoteDate__c!= null &&opp.DecideQuoteDate__c < Date.valueOf(Label.GuaranteeUSD)&&opp.Trade__c == '外貿')){ oldDecideDateUSD = true; }else{ oldDecideDateUSD = false; } //外贸多年保修 精琢技术 wql 2021/03/23 end // 经销商1的金额设置到MAP agencyInfo.agencyCode_1 = opp.Agency1__r.Management_Code__c; agencyInfo.agencyCode_2 = opp.Agency2__r.Management_Code__c; agencyInfo.price = opp.OCM_Agent1_Price__c; agencyList.add(agencyInfo); for (AgencyInfo agency: agencyList) { Quotation_element quotation = new Quotation_element(); quotations.GeData.add(quotation); logstr += opp.Opportunity_No__c + '\n' ; // 将询价报价信息设置到rowdate中 quotation.SFDC_DataID = opp.ID; quotation.TransType = transTypeMap.get(opp.id); // 询价区分 quotation.InquiryCode = opp.Opportunity_No__c; // 询价编码 quotation.Quote_Code = opp.Estimation_No__c; // 报价编码 //20230322 lt DB202303088261 两票制 SAP上传省增加 OSH-安徽省,但传给SPO “安徽省” start if(opp.SAP_Province__c == 'OSH-安徽省'){ quotation.SalesPoint = '安徽省'; }else{ quotation.SalesPoint = opp.SAP_Province__c; // SAP上传省 } // quotation.SalesPoint = opp.SAP_Province__c; // SAP上传省 //20230322 lt DB202303088261 两票制 SAP上传省增加 OSH-安徽省,但传给SPO “安徽省” end quotation.Province = opp.State__c; // 省份 quotation.City = opp.City__c; // 市/地区 quotation.HPCode = opp.HP_Management_Code__c; // 医院代码 quotation.SubmitUser = strEmpNo; // 授权提交人 if (opp.Account.RecordType.DeveloperName == 'AgencyContract') { quotation.TermContractNo = opp.Account.Term_Contract_No__c; } quotation.OrderType = opp.Opp_order_Type__c; // 耗材订单类型 quotation.OwnerDepartment = opp.Owner_Salesdepartment__c; // 询价所有人本部 // CHAN-BGZ394 销售本部(预测)为能量时, 上传客户所在省本部 start if(opp.SalesdepartmentForecast__c!= null && opp.SalesdepartmentForecast__c.equals('7.能量') && opp.Account.Salesdepartment_Dept__c != ''){ quotation.OwnerDepartment = opp.Account.Salesdepartment_Dept__c; } // CHAN-BGZ394 销售本部(预测)为能量时, 上传客户所在省本部 end quotation.SpecialLanhai = opp.Special_Opp_lanhai__c; // 蓝海询价 quotation.GroupPurchase = opp.Group_purchase_PCL__c; // 集中采购课负责的询价 // LHJ 取消能量 - 全部设为false Start if (transTypeMap.get(opp.id) == '1') { quotation.STMSPackage = opp.STMS_Package_Sale__c;// 授权时能量打包 // CHAN-BZD8M6 XHL Start quotation.EnergyHost = opp.EnergyHost__c; // 授权时能量主机 // CHAN-BZD8M6 XHL End } else { quotation.STMSPackage = false; // 合同申请时能量打包为false // CHAN-BZD8M6 XHL Start quotation.EnergyHost = false; // 合同申请时能量主机为false // CHAN-BZD8M6 XHL End } //quotation.STMSPackage = false; // 能量打包 // LHJ 取消能量 - 全部设为false End quotation.SalesMethod = opp.Sales_Method__c; // 招标方式 quotation.SalesType = opp.Direct_Separate__c; // 销售渠道 经销商/OCM直接销售 quotation.OwnerNo = opp.Owner_System__r.Employee_No__c; // SFDC担当人 quotation.DepartmentCode = opp.Account.Management_Code__c; // 客户管理编码(科室代码) quotation.OppCategory = NFMUtil.getMapValue(transferMap, 'Opportunity_Category__c', opp.Opportunity_Category__c, iflog); // 战略科室(对应SFDC的GBIC分类.转送表IF) quotation.SalesRoot = NFMUtil.getMapValue(transferMap, 'Sales_Root__c__SPO', opp.Sales_Root__c, iflog); // 销售途径(直销/分销) quotation.Trade = NFMUtil.getMapValue(transferMap, 'Trade__c', opp.Trade__c, iflog); // 内贸/外贸 // 报价 quotation.SpecialDealerCode = agency.agencyCode_1; // 经销商CODE quotation.SpeciaDealerCode_2 = agency.agencyCode_2; // 二级经销商CODE quotation.DealerFinalPrice = opp.Dealer_Final_Price_F__c; // 最终用户成交价格 quotation.Agent12Price = opp.Agent1_Agent2_Price__c; // 一级经销商和二级经销商之间的价格 quotation.Authorized_DB_No = opp.Authorized_DB_No__c; // DB授权编码 quotation.Special170 = opp.If_Have_170__c; //包含170 quotation.SpecialAohui = opp.If_Have_AH__c; // 包含奥辉 // LHJ 多年保修 20190627 Start //外贸多年保修 精琢技术 wql 2021/03/23 start // if(!oldDecideDateUSD){ quotation.IfCancelGuarantee = opp.multiYearWarranty__c; quotation.ContractPeriod = opp.Gurantee_Period__c; // }else{ // quotation.IfCancelGuarantee = false; // quotation.ContractPeriod = null; // } //外贸多年保修 精琢技术 wql 2021/03/23 end // LHJ 多年保修 20190627 End //阿西赛多 quotation.IsAcecide = opp.Is_Corrosion__c; // CHAN-C9P5WM 20211216 ssm 增加科室名 start quotation.DepartmentName = opp.Department_Name__c; // CHAN-C9P5WM 20211216 ssm 增加科室名 end //SWAG-CCL6R7 2022-3-22 yjk 增加中标日 start quotation.winBiddingDate = opp.Closing_Bid_Date_Bid__c ==null? NFMUtil.formatDate2Str(opp.Closing_Bid_Date__c) : NFMUtil.formatDate2Str(opp.Closing_Bid_Date_Bid__c); //SWAG-CCL6R7 2022-3-22 yjk 增加中标日 end quotation.CelonOpportunity = opp.CelonOpportunity__c; // 20220415 ljh ljh SWAG-CCK8V4 add // 产品 List oppLineList = oppIDMap.get(opp.id); quotation.Items = new List(); //报价试算 start 授权不需要传--------------------------------------------------------- if(transTypeMap.get(opp.id).equals('2')){ quotation.ProductDetais = new List(); if(psList.size()>0){ for(PromotionSalesProducts__c psp : psList){ //如果是同一个报价 if(opp.Estimation_Id__c.equals(psp.QuantityId__c)){ ProductDetais dqe = new ProductDetais(); quotation.ProductDetais.add(dqe); //是否需要处理SFDC系统的SPOID后,传给SPO //截取id部分 // Pattern p = Pattern.compile('([\u0800-\u9fa5()()]+)'); // Matcher pm = p.matcher(dqe.CID); // if( pm.find() ){ // system.debug('123'); // dqe.CID = dqe.CID.replace(pm.group(0),''); // } //策略类型 dqe.PriceStrategyType = psp.PromotionSales__r.Category__c; if(!cateClass.contains(psp.PromotionSales__r.Category__c)&&psp.PromotionSales__r.Category__c!=null){ dqe.CID = transferMapCU.get(psp.PromotionSales__r.Category__c); dqe.PriceStrategyType = '一般固定折扣'; //一般固定折扣 传实际值 dqe.CXNum =psp.Quantity__c; //一般折扣 传小计 dqe.OneCXPrice =psp.AgencySubtotal__c; // 外贸场合直接传美元 Start // if(opp.Trade__c == '外貿'){ // dqe.OneCXPrice =psp.AgencySubtotal__c*Decimal.valueOf(Label.Account_Exc); // } // 外贸场合直接传美元 End //使用的折扣 dqe.DiscountRate = psp.DiscountRate__c; }else if(psp.PromotionSales__r.Category__c ==null){ dqe.CID = ''; //分类为空也传实际值 dqe.CXNum =psp.Quantity__c; } else{ //促销方案ID dqe.CID =psp.PromotionSales__r.PromotionHead__r.SpoId__c; if(psp.PromotionSales__r.Category__c=='促销方案'||psp.PromotionSales__r.Category__c=='一般产品'){ if(PromotionMap!=null){ //一般产品和促销方案选择主数据上值 dqe.CXNum =PromotionMap.get(psp.PromotionNo__c+psp.Asset_Model_No__c); if(dqe.CXNum==null){ dqe.CXNum =PromotionMap.get(psp.PromotionNo__c+psp.Product2__r.MDM_Model_No__c ); } //单次促销方案价格 // dqe.OneCXPrice =PromotionSaleMap.get(psp.PromotionSales__r.PromotionHead__r.SpoId__c); if(priceMap.get(psp.PromotionNo__c)!=null){ dqe.OneCXPrice =priceMap.get(psp.PromotionNo__c); } dqe.ContractPrice =PromotionSalePriceMap.get(psp.PromotionSales__r.PromotionHead__r.SpoId__c); // 外贸场合直接传美元 Start // if(opp.Trade__c == '外貿'){ // // dqe.OneCXPrice =PromotionSaleMap.get(psp.PromotionSales__r.PromotionHead__r.SpoId__c)*Decimal.valueOf(Label.Account_Exc); // if(priceMap.get(psp.PromotionNo__c)!=null){ // dqe.OneCXPrice =priceMap.get(psp.PromotionNo__c)*Decimal.valueOf(Label.Account_Exc); // } // dqe.ContractPrice =PromotionSalePriceMap.get(psp.PromotionSales__r.PromotionHead__r.SpoId__c)*Decimal.valueOf(Label.Account_Exc); // } // 外贸场合直接传美元 End } }else{ //特约经销商 传实际值 dqe.CXNum =psp.Quantity__c; //使用的折扣 dqe.DiscountRate = psp.DiscountRate__c; //特约经销商 传小计 dqe.OneCXPrice =psp.AgencySubtotal__c; // 外贸场合直接传美元 Start // if(opp.Trade__c == '外貿'){ // dqe.OneCXPrice =psp.AgencySubtotal__c*Decimal.valueOf(Label.Account_Exc); // } // 外贸场合直接传美元 End } } //产品编码 dqe.ProductCode = psp.Product2__r.ProductCode; //使用次数 dqe.UseCount =psp.UseCount__c; } } } } //报价试算 end 授权不需要传--------------------------------------------------------- Decimal Con_price = 0.00; Decimal Cost_price = 0.00; Decimal List_price = 0.00; Decimal Cost_line = 0.00; Decimal Service_Line = 0.00; Boolean CancelFlg = false; for (OpportunityLineItem oppLine : oppLineList) { Detail_element detail = new Detail_element(); quotation.Items.add(detail); // 产品OTCode detail.ProductCode = oppLine.ProductCode__c; // 产品编码(指OTCode); // 数量 detail.Quantity = oppLine.Quantity; //lt 20220223 CHAN-CBW9FX 特殊交货期影响的对应 交货期 start detail.DeliveryDate = oppLine.DeliveryDate__c; //lt 20220223 CHAN-CBW9FX 特殊交货期影响的对应 end // LHJ SWAG-C9F9P8 20211206 增加规格 Start // 规格 detail.Packing = oppLine.PricebookEntry.Product2.Packing_list_manual__c; detail.GuaranteeTypePro = oppLine.PricebookEntry.Product2.GuranteeType__c; // LHJ SWAG-C9F9P8 20211206 增加规格 End // List价 detail.MasterPrice = oppLine.Product_ListPrice__c; // 注册证号 if (String.isBlank(oppLine.Register_alleffective__c)) { detail.RegistrationNo = 'FYL'; } else { detail.RegistrationNo = oppLine.Register_alleffective__c; } //生产企业 WLIG-BZ699Z 精琢技术 wql 2021/03/19 start //生产企业 注释源代码 // 生产企业 //detail.ProductionCompany = oppLine.PricebookEntry.Product2.ProduceCompany_F__c; if(oppLine.PricebookEntry.Product2.ProduceCompany__c !=null){ detail.ProductionCompany = getProduceCompanyName(oppLine.PricebookEntry.Product2.ProduceCompany__c); } //生产企业 WLIG-BZ699Z 精琢技术 wql 2021/03/19 end // 产品单位 if (oppLine.Item_Order__c != null && String.isblank(oppLine.PricebookEntry.Product2.SalesPackagingUnit_Chinese__c)) { detail.SalesPackagingUnit_c = '件'; } else { detail.SalesPackagingUnit_c = oppLine.PricebookEntry.Product2.SalesPackagingUnit_Chinese__c; } // 合同金额 Con_price += oppLine.Quantity * oppLine.UnitPrice__c; // 成本金额 if (opp.Trade__c == '外貿') { Cost_line = (oppLine.PricebookEntry.Product2.Foreign_Trade_Cost_US__c == null) ? 0 : oppLine.PricebookEntry.Product2.Foreign_Trade_Cost_US__c; } else { Cost_line = (oppLine.PricebookEntry.Product2.Intra_Trade_Cost_RMB__c == null) ? 0 : oppLine.PricebookEntry.Product2.Intra_Trade_Cost_RMB__c; } Cost_price += oppLine.Quantity * Cost_line; List_price += oppLine.Quantity * oppLine.Product_ListPrice__c; //外贸多年保修 精琢技术 wql 2021/03/23 start //保修年限 外贸多年保修 字段里做4.1切换 detail.GuaranteePeriod = oppLine.lastestGuaranteePeriod__c; if(!oldDecideDateUSD){ // LHJ 多年保修 20190627 Start Service_Line += oppLine.Quantity * oppLine.latestServicePrice__c ; detail.SerPrice = oppLine.latestServicePrice__c; detail.GuaranteeType = oppLine.latestWarrantyType__c; detail.GuaranteePeriod = oppLine.lastestGuaranteePeriod__c; if(oppLine.lastestIf_Cancel_Guarantee__c == true){ CancelFlg = true; } // LHJ 多年保修 20190627 End }else{ //外贸多年保未上线前 传0 Service_Line = 0; //外贸多年保未上线前 传0 detail.SerPrice = 0; //外贸多年保未上线前 传null detail.GuaranteeType=null; //detail.GuaranteePeriod = null; CancelFlg = false; } //外贸多年保修 精琢技术 wql 2021/03/23 end // CHAN-C9P5WM 20211216 ssm 增加产品型号和产品名称 start String nowName = oppLine.Name__c != null && !''.equals(oppLine.Name__c) ? oppLine.Name__c : ''; detail.ModelNo = ''; detail.productName = nowName; if (oppLine.Asset_Model_No__c == 'N/A'){ detail.ModelNo = ''; } else if (nowName.indexOf(':') >= 0) { detail.ModelNo = nowName.subString(0, nowName.indexOf(':')); detail.productName = nowName.subString(nowName.indexOf(':') + 1); } else if (nowName.indexOf(':') >= 0) { detail.ModelNo = nowName.subString( 0, nowName.indexOf(':')); detail.productName = nowName.subString( nowName.indexOf(':') + 1); } // CHAN-C9P5WM 20211216 ssm 增加产品型号和产品名称 end } if (String.IsNotBLank(opp.Estimation_Id__c) && opp.Estimation_Id__c.startsWith('a2K')) { // 消耗品 quotation.ContractPrice = Con_price; // 合同金额 } else { quotation.ContractPrice = (agency.price == null) ? opp.Dealer_Final_Price_F__c : agency.price ; } // LHJ 多年保修 Start //quotation.IfCancelGuarantee = CancelFlg; // LHJ 多年保修 End quotation.Cost = Cost_price; // Cost成本(总价) quotation.ListPrice = List_price; // List Price公开价(总价) quotation.ServicePrice = Service_Line; // ServicePrice } } if (quotations.GeData.size() > 0) { NFMUtil.Monitoring Monitoring = new NFMUtil.Monitoring(); Monitoring.Tag = quotations.Monitoring.Tag; Monitoring.Sender = quotations.Monitoring.Sender; Monitoring.Receiver = quotations.Monitoring.Receiver; Monitoring.MessageType = quotations.Monitoring.MessageType; Monitoring.MessageGroupNumber = quotations.Monitoring.MessageGroupNumber; Monitoring.NumberOfRecord = quotations.Monitoring.NumberOfRecord; Monitoring.TransmissionDateTime = quotations.Monitoring.TransmissionDateTime; Monitoring.Text = ''; rowData = NFMUtil.makeRowData(Monitoring, 'NFM202', quotations); execute(rowData, iflog); } logstr +='Status:' + status; logstr += '\n end'; } catch (Exception ex) { // エラーが発生した場合 System.debug(Logginglevel.ERROR, 'NFM202_' + iflog.Name + ':' + ex.getMessage()); System.debug(Logginglevel.ERROR, 'NFM202_' + iflog.Name + ':' + ex.getStackTraceString()); logstr += ex.getMessage(); iflog.ErrorLog__c += ex.getMessage() + '\n'; iflog.ErrorLog__c += ex.getStackTraceString() + '\n'; } if (rowData != null) { upsert rowData; } System.debug(Logginglevel.DEBUG, 'NFM202_' + iflog.Name + ' end'); iflog.Log__c = logstr; upsert iflog; } public static void execute(BatchIF_Log__c rowData, BatchIF_Log__c iflog) { Integer batch_retry_max_cnt = Integer.valueOf(System.Label.batch_retry_max_cnt); String rowDataStr = NFMUtil.getRowDataStr(rowData); Quotations_element quotations = (Quotations_element) JSON.deserialize(rowDataStr, Quotations_element.class); String logstr = quotations.Monitoring.MessageGroupNumber + ' start\n'; Boolean needUpdateIflog = false; if (iflog == null) { needUpdateIflog = true; iflog = new BatchIF_Log__c(); iflog.Type__c = 'NFM202'; iflog.MessageGroupNumber__c = quotations.Monitoring.MessageGroupNumber; iflog.Log__c = logstr; iflog.ErrorLog__c = ''; //insert iflog; //iflog = [Select Id, Name, Log__c, ErrorLog__c from BatchIF_Log__c where Id = :iflog.Id]; } else { logstr = iflog.Log__c; } try{ // 向SPO送信 // NFMUtil.sendToSpo(rowDataStr, NFMUtil.NFM202_ENDPOINT); status = NFMUtil.sendToSpoRet(rowDataStr, NFMUtil.NFM202_ENDPOINT); if (status == 'OK') { rowData.retry_cnt__c=0; } else { // 20210602 CHAN-C3JCLN start Http http = new Http(); HttpRequest req = new HttpRequest(); HTTPResponse res; String resb; req.setEndpoint('http://cbpr.olympuschina.com/conn.html'); req.setMethod('GET'); res = http.send(req); resb = res.getBody(); status += '\nconn StatusCode:'+ res.getStatusCode() + '\nconn status:' + res.getStatus() ; // 20210602 CHAN-C3JCLN end if (rowData.retry_cnt__c == null) rowData.retry_cnt__c = 0; if (rowData.retry_cnt__c < batch_retry_max_cnt) { rowData.retry_cnt__c++; LogAutoSendSchedule.assignOneMinute(); } if (rowData.retry_cnt__c >= batch_retry_max_cnt) { rowData.ErrorLog__c = status+'错误次数已经超过自动送信设定的最大次数,请手动送信'; } } } catch (Exception ex) { // TODO IOException // エラーが発生した場合 System.debug(Logginglevel.ERROR, 'NFM001_' + iflog.Name + ':' + ex.getMessage()); System.debug(Logginglevel.ERROR, 'NFM001_' + iflog.Name + ':' + ex.getStackTraceString()); logstr += ex.getMessage(); // 20210602 CHAN-C3JCLN start Http http = new Http(); HttpRequest req = new HttpRequest(); HTTPResponse res; String resb; req.setEndpoint('http://cbpr.olympuschina.com/conn.html'); req.setMethod('GET'); try{ res = http.send(req); }catch (Exception ex1) {} status += res == null? '11':( '\nconn StatusCode:'+ res.getStatusCode() + '\nconn status:' + res.getStatus()+'\n'); // 20210602 CHAN-C3JCLN end iflog.ErrorLog__c += status + ex.getMessage() + '\n'; iflog.ErrorLog__c += ex.getStackTraceString() + '\n'; //---Gaozw---add if (rowData.retry_cnt__c == null) rowData.retry_cnt__c = 0; if (rowData.retry_cnt__c < batch_retry_max_cnt) { rowData.retry_cnt__c++; LogAutoSendSchedule.assignOneMinute(); } if (rowData.retry_cnt__c >= batch_retry_max_cnt) { rowData.ErrorLog__c = ex.getMessage() + '\n' + ex.getStackTraceString() + '\n' + rowData.ErrorLog__c+'错误次数已经超过自动送信设定的最大次数,请手动送信'; } } iflog.Log__c = logstr; System.debug('logdate2' + rowData); if (needUpdateIflog) { upsert iflog; update rowData; } } //生产企业 WLIG-BZ699Z 精琢技术 wql 2021/03/19 start //产品主数据生产企业 获取企业名称 (生产企业) private static String getProduceCompanyName(String produceCompany){ //获取企业名称 (生产企业,注册证状态) //getProduceCompanyName(String produceCompany,String sfdaApprobatedStatus) //取前一部分 eg: 生产企业名称 : //String firstHalf = ''; //①统一中英文符号 找不到就返回原数据 String tempProduceCompany = produceCompany.replace(';', ';'); tempProduceCompany = tempProduceCompany.replace(':', ':'); //②先截取第一个分号前的数据 if(tempProduceCompany.indexOf(';')>0){ tempProduceCompany = tempProduceCompany.substring(0, tempProduceCompany.indexOf(';')); } //③截取第一个分号前 冒号后 分号前的数据 if(tempProduceCompany.indexOf(':') > 0){ //如果需要传入注册证状态的话 再拼接前一部分 //firstHalf = tempProduceCompany.substring(0, tempProduceCompany.indexOf(':')+1); tempProduceCompany = tempProduceCompany.substring(tempProduceCompany.indexOf(':')+1, tempProduceCompany.length()); } //④正则 只取出中文 不包括 全角符号 # % 不包括英文名 //[\u4E00-\u9FA5\\s]+ 多个汉字,包括空格 //[\u4E00-\u9FA5]+ 多个汉字,不包括空格 //[\u4E00-\u9FA5] 一个汉字 ///u0800-/u4e00 日文 //输出中日文 Pattern p = Pattern.compile('[\u0800-\u9fa5()()]{2,}'); Matcher pm = p.matcher(tempProduceCompany); if( pm.find() ){ system.debug('123'); tempProduceCompany = pm.group(0); } //如果注册证等于不要 拼接前一部分 // if(sfdaApprobatedStatus == '不要'){ // //如果前半部分不为空 则拼接上前半部分 // if(firstHalf!= ''){ // tempProduceCompany = firstHalf +tempProduceCompany; // } // } return tempProduceCompany; } //生产企业 WLIG-BZ699Z 精琢技术 wql 2021/03/19 end @TestVisible public static void testI() { integer i = 0; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; } }