/** * 分配画面(代替品・附属品)の設定 */ public with sharing class RentalFixtureSetAssignController extends CreateRelationListPagingCtrlBase { public override Integer getSearchNumMax() { //各ページに制御あれば、最大件数を指定する searchNumMax = Integer.valueOf(Label.Product_Select_Limit); searchNumMax = 20; return searchNumMax; } /* 選択されたデータ取得用Soql Fromから*/ public override String getSelectedDataSql() { // オブジェクトAPI名 selectedDataSql = ' From Rental_Apply_Equipment_Set__c'; selectedDataSql += ' where Rental_Apply__c = \'' + String.escapeSingleQuotes(parentId) + '\''; selectedDataSql += ' and Cancel_Select__c = False'; selectedDataSql += ' and Wei_loaner_arranged__c > 0'; selectedDataSql += ' order by Groupby_SortInt__c, IndexFromUniqueKey__c ASC nulls last'; // myComponentController.columnRightRW.put('QueueType__c', 'r'); return selectedDataSql; } // 検索元対象オブジェクトAPI名 public override String getOriginObjName() { // オブジェクトAPI名 originObjName = 'Rental_Apply_Equipment_Set__c'; return originObjName; } public override String getOriginObjColumns() { // 項目セット originObjColumns = ''; return originObjColumns; } public override String getObjName() { // オブジェクトAPI名 objName = 'Rental_Apply_Equipment_Set__c'; return objName; } public override String getColumnLeftFieldSetName() { // 左の項目セット columnLeftFieldSetName = ''; return columnLeftFieldSetName; } public override String getColumnRightFieldSetName() { // 右の項目セット columnRightFieldSetName = 'RentalFixtureSetAssign_RightFieldSet'; return columnRightFieldSetName; } public override String getRecordTypeId() { //ページレイアウトを収得するのレコードタイプ recordTypeId = ''; return recordTypeId; } // ページコントローラに検索処理は、WhereSoql作成のみ、パラメータとして、コンポーネントに渡される public override String getSqlWhereStr() { sqlWhereStr = ''; return sqlWhereStr; } public override List getColumnFieldList() { // strColumus 里加 field // 'QueueType__c', return new List{'Fixture_Set__c', 'Yi_Shipment_request__c', 'First_RAESD__r.Is_Body__c', 'RetalFSetDetail_Cnt__c', 'RAES_Status__c', 'Rental_Apply__r.Status__c', 'Wei_Assigned_Cnt__c', 'Yi_Assigned_Cnt__c','LastModifiedDate','First_RAESD_Is_Main__c','First_Status__c'}; // 20220104 ljh add First_RAESD_Is_Main__c,First_Status__c // 20210906 ljh SFDC-C6D9C2 add LastModifiedDate } // 20211203 ljh add start public override List getHiddenFieldList() { return new List{'QueueType__c','First_RAESD_Model_No_F__c'}; } // 20211203 ljh add end // 画面里直接可以输入的項目 List public override List getWritableColumnFieldList() { return new List{'Rental_Start_Date__c', 'Rental_End_Date__c'}; } // getObjName 连 getOriginObjName 的 FK public override String getFKColumnField() { return null; } public override Boolean getIsNeedRunSearch(){ return false; } public String bieCunFangDi; //别存放地 public String bieBenBu {get;set;} //别本部 public String bieChanPinFenLei; //产品分类 public String bieBeiPinFenLei { get; set{ bieBeiPinFenLeiList.add(bieBeiPinFenLei); } } //别备品分类 public List bieBeiPinFenLeiList { get; set; } //别备品分类 /*****************画面Object******************/ public Boolean hasError { get; private set; } public String checkEventUrl { get; set; } public Boolean bieField { get; set; } //别省、别本部、别存放地、别用途 public Rental_Apply__c parentObj { get; private set; } public Rental_Apply_Equipment_Set__c rentalApplyEquipmentObj { get; private set; } List> showButtonList = new List>(); public String salesdepartments {set;get;} public String equipmenttypes {set;get;} public Boolean is2B1 = true; public static String wrapperStr{set;get;} public static String oldCampaignType {set;get;} public Boolean changeCampaignType{set;get;} public RentalFixtureSetAssignController() { parentId = ApexPages.currentPage().getParameters().get('pt_recid'); bieBeiPinFenLeiList = new List(); is2B1 = UserInfo.getProfileId() == System.Label.ProfileId_EquipmentCenter; } public void init() { //备品配套下的所有明细 if (!String.isBlank(this.parentId)) { List parentObjs = [SELECT Name, Id, Demo_purpose1__c, Salesdept__c, Demo_purpose2__c, Internal_asset_location_F__c, Equipment_Type_F__c, Loaner_centre_mail_address__c, Product_category_Sys__c, Request_shipping_day__c, Request_return_day__c, Asset_loaner_start_day__c, Asset_loaner_closed_day__c, Product_category__c, CampaignType__c, Status__c, Owner.Profile.Name, Salesdepartment__c, Hope_Lonaer_date_Num__c, Campaign_EndDate_F__c FROM Rental_Apply__c WHERE Id = :parentId]; if(parentObjs.size()>0){ parentObj = parentObjs.get(0); bieCunFangDi = parentObj.Internal_asset_location_F__c; bieBenBu = parentObj.Salesdepartment__c; bieChanPinFenLei = parentObj.Product_category__c; // bieBeiPinFenLei = parentObj.Equipment_Type_F__c; oldCampaignType = parentObj.CampaignType__c; changeCampaignType = false; parentObj.Product_category_Sys__c = parentObj.Product_category__c; if (bieBeiPinFenLeiList.size() == 0 && String.isNotBlank(parentObj.Equipment_Type_F__c)) { for (String et : parentObj.Equipment_Type_F__c.split(',')) { bieBeiPinFenLeiList.add(et); } } //备品预计出货日、备品预计回收日初期値は、希望到货日-2天と预定归还日+2天 // if (parentObj.Request_shipping_day__c != null) { // parentObj.Asset_loaner_start_day__c = parentObj.Request_shipping_day__c.addDays(-2); // } // if (parentObj.Request_return_day__c != null) { // parentObj.Asset_loaner_closed_day__c = parentObj.Request_return_day__c.addDays(2); // } } } } // 适用按钮 public void checkDate() { String strMessage = null; hasError = false; System.debug(LoggingLevel.INFO, '***checkDate parentObj: ' + parentObj); if (parentObj.Asset_loaner_start_day__c == null) { hasError = true; strMessage = '请输入[备品预计出货日]'; } if (parentObj.Asset_loaner_closed_day__c == null) { hasError = true; strMessage = '请输入[备品预计回收日]'; } if (parentObj.Asset_loaner_start_day__c != null && parentObj.Asset_loaner_start_day__c < Date.today()) { hasError = true; strMessage = '[备品预计出货日]必须入力从今天开始起的日期 '; } if (parentObj.Asset_loaner_start_day__c != null && parentObj.Asset_loaner_closed_day__c != null && parentObj.Asset_loaner_start_day__c > parentObj.Asset_loaner_closed_day__c) { hasError = true; strMessage = '[备品预计出货日]必须小于等于[备品预计回收日]'; } if (hasError) { ApexPages.addmessage(new ApexPages.message(ApexPages.severity.WARNING, strMessage)); } system.debug(' working!!!'); } //产品分类 SelectOption public List getbieChanPinFenLeiOps() { //产品分类(GI/SP) F Product_category_F__c // return FixtureUtil.bieChanPinFenLeiOpsMap.get(sonObj.Product_category_F__c); return FixtureUtil.bieChanPinFenLeiOpsMap.get('GISP'); } //别备品分类 SelectOption public List getbieBeiPinFenLeiOps() { //备品分类(现在) Equipment_Type__c // return FixtureUtil.bieBeiPinFenLeiOpsMap.get(sonObj.Equipment_Type__c); List options = FixtureUtil.bieBeiPinFenLeiOpsMap.get('备品分类'); System.debug(LoggingLevel.INFO, '*** options: ' + options); options.remove(0); // if(parentObj.demo_purpose2__c != '其他'){ // for(Integer i = options.size() - 1;i >= 0; i -- ){ // if(i != 1 && i != 2){ // options.remove(i); // } // } // } System.debug(LoggingLevel.INFO, '*** options1111: ' + options); return options; } //别存放地 SelectOption public List getbieCunFangDiOps() { //备品存放地(现在) // return FixtureUtil.bieCunFangDiOpsMap.get(sonObj.Internal_asset_location__c); // return new List{ // new SelectOption(sonObj.Rental_Apply__r.Internal_asset_location_F__c, sonObj.Rental_Apply__r.Internal_asset_location_F__c) // }; // cunfangdiSet = new Set(); List opList; if (UserInfo.getProfileId() == System.Label.ProfileId_SystemAdmin || System.Label.ProfileId_EquCenAdmin.contains(UserInfo.getProfileId()) || is2B1) { opList = FixtureUtil.bieCunFangDiOpsMap.get('备品管理中心'); } else { opList = new List{ new SelectOption(bieCunFangDi, bieCunFangDi) }; } // for (SelectOption op : opList) { // if (String.isNotBlank(op.getValue())) { // cunfangdiSet.add(op.getValue()); // } // } return opList; } //别本部 SelectOption public List getbieBenBuOps() { List opList = FixtureUtil.bieBenBuOpsMap.get(bieCunFangDi); if(opList!= null && opList.size() > 0){ opList.remove(0); } return opList; } //产品分类 SelectOption // public List getbieChanPinFenLeiOps() { // //产品分类(GI/SP) F Product_category_F__c // // return FixtureUtil.bieChanPinFenLeiOpsMap.get(sonObj.Product_category_F__c); // return FixtureUtil.bieChanPinFenLeiOpsMap.get('GISP'); // } //别备品分类 SelectOption // public List getbieBeiPinFenLeiOps() { // //备品分类(现在) Equipment_Type__c // // return FixtureUtil.bieBeiPinFenLeiOpsMap.get(sonObj.Equipment_Type__c); // return FixtureUtil.bieBeiPinFenLeiOpsMap.get('备品分类'); // } public PageReference save() { hasError = false; // updateだけ使用する List mfUpdate = new List(); Savepoint sp = Database.setSavepoint(); try { Boolean updRAFlg = false; Rental_Apply__c raUpd = [ SELECT Id, Shipment_request_Cnt__c, Asset_loaner_start_day__c, // Campaign__c, // Campaign__r.IF_Approved__c, // Campaign__r.Meeting_Approved_No__c, Asset_loaner_closed_day__c FROM Rental_Apply__c WHERE Id = :parentId FOR Update]; if (!(raUpd.Shipment_request_Cnt__c > 0)) { if (raUpd.Asset_loaner_start_day__c == null) { raUpd.Asset_loaner_start_day__c = parentObj.Asset_loaner_start_day__c; updRAFlg = true; } if (raUpd.Asset_loaner_closed_day__c == null) { raUpd.Asset_loaner_closed_day__c = parentObj.Asset_loaner_closed_day__c; updRAFlg = true; } } //20220228 sx obpm修改 是否申请决裁勾着没有决裁编号不能进行操作 // if( raUpd.Campaign__c!= null && raUpd.Campaign__r.IF_Approved__c && raUpd.Campaign__r.Meeting_Approved_No__c == null){ // throw new ControllerUtil.myException('已申请决裁但决裁编码为空'); // } Integer indexNum = 1; // 20210708 ljh SFDC-C47CLV add start Set raeIdset = new Set(); // Map raeIdraIdM = new Map(); // 20210906 ljh SFDC-C6D9C2 Map raeIdraIdM = new Map();// 20210906 ljh SFDC-C6D9C2 add for (WrapperInfo prInfo : viewList) { Rental_Apply_Equipment_Set__c robj = (Rental_Apply_Equipment_Set__c) prInfo.sobj; if (prInfo.check) { raeIdset.add(robj.Id); } } List raeList = [SELECT Id, Name,Rental_Apply__c,Cancel_Select__c,LastModifiedDate FROM Rental_Apply_Equipment_Set__c where Id in :raeIdset]; // 20210906 ljh SFDC-C6D9C2 add LastModifiedDate for(Rental_Apply_Equipment_Set__c rae:raeList){ // 20210906 ljh SFDC-C6D9C2 update // raeIdraIdM.put(rae.Id,rae.Rental_Apply__c); raeIdraIdM.put(rae.Id,rae); // 20210906 ljh SFDC-C6D9C2 end } // 20210708 ljh SFDC-C47CLV add end for (WrapperInfo prInfo : viewList) { Rental_Apply_Equipment_Set__c robj = (Rental_Apply_Equipment_Set__c) prInfo.sobj; // 画面上にチェックした if (prInfo.check) { // 20210708 ljh add start //system.debug('zheli'+robj.Rental_Apply__c+'~'+raUpd.Id); // 20210906 ljh SFDC-C6D9C2 update start // if (robj.Rental_Apply__c != raeIdraIdM.get(robj.Id)) { if (robj.Rental_Apply__c != raeIdraIdM.get(robj.Id).Rental_Apply__c) { // 20210906 ljh SFDC-C6D9C2 update end hasError = true; throw new ControllerUtil.myException('第' + indexNum +'行数据已被分割申请单,请刷新后重试!'); } // 20210708 ljh update end // 20210906 ljh SFDC-C6D9C2 add start // 20210929 ljh SFDC-C6D9C2 注释 恢复改其他方案 start // 20211018 ljh 注释放开 start // 取消状态只能从 不取消变成取消 // 点击保存或分配按钮后,校验一览是否已取消,若勾选的有取消的一览,提示【第X行数据已取消,请刷新后重试!】 if (robj.Cancel_Select__c != raeIdraIdM.get(robj.Id).Cancel_Select__c) { hasError = true; throw new ControllerUtil.myException('第' + indexNum +'行'+robj.First_RAESD_Model_No_F__c+'已取消,请取消相应配套的勾选或刷新页面!'); } // 20211018 ljh 注释放开 start // 20210929 ljh SFDC-C6D9C2 注释 恢复改其他方案 end // 20210906 ljh SFDC-C6D9C2 add emd if (robj.Rental_Start_Date__c == null) { hasError = true; throw new ControllerUtil.myException('第' + indexNum +'行数据的[备品预计出货日]为空,备品预计出货日必须入力'); } if (robj.Rental_End_Date__c == null) { hasError = true; throw new ControllerUtil.myException('第' + indexNum +'行数据的[备品预计回收日]为空,备品预计回收日必须入力'); } if (robj.Rental_Start_Date__c != null && robj.Rental_Start_Date__c < Date.today()) { hasError = true; throw new ControllerUtil.myException('第' + indexNum +'行数据的[备品预计出货日]必须入力从今天开始起的日期'); } mfUpdate.add(robj); } indexNum += 1; } if (updRAFlg) { update raUpd; } if (mfUpdate.size() > 0) { FixtureUtil.withoutUpdate(mfUpdate); } } catch (Exception ex) { System.debug(ex.getStackTraceString()); ApexPages.addMessages(ex); Database.rollback(sp); hasError = true; return null; } return null; } // 返回按钮 public PageReference cancel() { PageReference ref = new Pagereference('/'); if (String.isNotBlank(parentId)) { // 返回备品借出申请 ref = new Pagereference('/' + parentId); } ref.setRedirect(true); return ref; } public override void checkEvent() { Rental_Apply_Equipment_Set__c raes = (Rental_Apply_Equipment_Set__c) viewList[clickLineNo].sobj; String iszhu = ApexPages.currentPage().getParameters().get('isZhu'); if (iszhu == 'true') { // 主体備品選択画面url checkEventUrl = '/apex/MainFixtureSelect?pt_recid=' + ((Rental_Apply_Equipment_Set__c) viewList[clickLineNo].sobj).Id; } else { checkEventUrl = '/apex/AccessorySelect?pt_recid=' + raes.Id; } } public override void setViewList(List queryList) { viewList = new List(); //别存放地 String bieWhere = ' and ((Internal_asset_location__c like \'%' + String.escapeSingleQuotes(bieCunFangDi) + '%\''; //别本部 if (String.isNotBlank(bieBenBu)) { bieWhere += ' and Salesdepartment__c like \'%' + String.escapeSingleQuotes(bieBenBu) + '%\''; } //产品分类 if (String.isNotBlank(bieChanPinFenLei)) { bieWhere += 'and Product_category__c like \'%' + String.escapeSingleQuotes(bieChanPinFenLei) + '%\''; } //别备品分类 bieWhere += RentalFixtureSetAssignController.setSoql('Equipment_Type__c', bieBeiPinFenLeiList); // //别备品分类 // if (String.isNotBlank(bieBeiPinFenLei)) { // bieWhere += 'and Equipment_Type__c = \'' + String.escapeSingleQuotes(bieBeiPinFenLei) + '\''; // } bieWhere += 'and Loaner_accsessary__c= false) OR (Loaner_accsessary__c= true '; //别存放地 bieWhere += ' and Internal_asset_location__c = \'' + String.escapeSingleQuotes(bieCunFangDi) + '\''; // OLY_OCM-654 保有设备合并 本部的检索条件至少有MA和产品检测的时候才需要 Start //别本部 if (String.isNotBlank(bieBenBu) && FixtureUtil.needSalesdepartment.contains(bieBenBu)) { // OLY_OCM-654 保有设备合并 本部的检索条件至少有MA和产品检测的时候才需要 End bieWhere += ' and Salesdepartment__c = \'' + String.escapeSingleQuotes(bieBenBu) + '\''; } else { bieWhere += ' and Salesdepartment__c IN ' + FixtureUtil.otherBenbus; } bieWhere += '))'; System.debug(bieWhere); // 数式項目値を取れるのために、一回Insertする List tempList = new List(); Map>> raesMap = FixtureUtil.raesGroupBy(selectedData, myComponentController.columus, bieWhere); // 選択済みの明细 if(selectedData.size()>0) { Map raesdMapz = new Map(); Map raesdMapf = new Map(); for (Integer i = 0; i < selectedData.size(); i++) { /* not include the selected data num */ // 501を超えた場合前500のみを出す Rental_Apply_Equipment_Set__c rentalObj = (Rental_Apply_Equipment_Set__c) selectedData[i]; Map> rmap = raesMap.get(rentalObj.Id); //别用途库存num Integer yongyuKucunNum = 0; //别本部库存num Integer benbuKucunNum = 0; //别产品分类num Integer chanpinFenleiNum = 0; //别存放地的库存num Integer cunfangdiKucunNum = 0; // 主机数量汇总:大于零时是主体;等于零时是附属品 Map showMap = new Map(); if (rentalObj.First_RAESD__r.Is_Body__c == true) { showMap.put('ZHU', true); showMap.put('FU', rentalObj.RetalFSetDetail_Cnt__c > 1); } else if (rentalObj.RetalFSetDetail_Cnt__c > 0 && rentalObj.First_RAESD__r.Is_Body__c == false) { showMap.put('ZHU', false); showMap.put('FU', true); } else { showMap.put('ZHU', false); showMap.put('FU', false); } showButtonList.add(showMap); //用来判断是不是一览里面的第一条明细 Boolean isf = true; System.debug('sizeis' + rmap.size()); for (Rental_Apply_Equipment_Set_Detail__c rentalc : rmap.keySet()) { if (rentalc.Is_Body__c) { raesdMapz.put(rentalc.Id, rentalc); } else { raesdMapf.put(rentalc.Id, rentalc); } Map rsdGroupInfo = rmap.get(rentalc); for (String apikey : rsdGroupInfo.keySet()){ if (apikey.indexOf('_Jia__c') >= 0) { if (apikey == 'You_Xiao_Kun_Cun_Jia__c' || apikey == 'Jie_Chu_Fen_Pei_Jia__c' || apikey == 'Fu_Shu_Pin_Fen_Pei_Jia__c' || apikey == 'Zhu_Ti_Fen_Pei_Jia__c' // || apikey == 'Jie_Chu_Shi_Jian_Jia__c' ) { // 別途設定する or 設定しない continue; } else if (apikey == 'Bie_Yong_Tu_Ku_Cun_Jia__c') { yongyuKucunNum += rsdGroupInfo.get(apikey).gnum; } else if (apikey == 'Bie_Ben_Bu_Ku_Cun_Jia__c') { benbuKucunNum += rsdGroupInfo.get(apikey).gnum; } else if (apikey == 'Bie_Chan_Pin_Fen_Lei_Jia__c') { chanpinFenleiNum += rsdGroupInfo.get(apikey).gnum; } else if (apikey == 'Bie_Cun_Fang_Di_Ku_Cun_Jia__c') { cunfangdiKucunNum += rsdGroupInfo.get(apikey).gnum; } else if (apikey == 'Ke_Yi_Fen_Pei_Zhu_Ti_Jia__c') { // 主体的状态从FixtureUtil中获取 // 附属品的状态从FixtureUtil中获取 if(rentalc.Is_Body__c == true) { rentalObj.put(apikey, rsdGroupInfo.get(apikey).gnum); } } else { //如果是一览里面的第一次设置,假字段需要清0,因为保存的时候会把假字段的值赋值进去 if (isf) { rentalObj.put(apikey, 0); isf = false; } System.debug('测试1:' + apikey); System.debug('测试2:' + rsdGroupInfo.get(apikey).gnum); if (rentalObj.get(apikey) != null) { rentalObj.put(apikey, (Decimal)rentalObj.get(apikey) + rsdGroupInfo.get(apikey).gnum); } } } } } if (yongyuKucunNum > 0) { rentalObj.Bie_Yong_Tu_Ku_Cun_Jia__c = '有'; } else { rentalObj.Bie_Yong_Tu_Ku_Cun_Jia__c = '无'; } if (benbuKucunNum > 0) { rentalObj.Bie_Ben_Bu_Ku_Cun_Jia__c = '有'; } else { rentalObj.Bie_Ben_Bu_Ku_Cun_Jia__c = '无'; } if (chanpinFenleiNum > 0) { rentalObj.Bie_Chan_Pin_Fen_Lei_Jia__c = '有'; } else { rentalObj.Bie_Chan_Pin_Fen_Lei_Jia__c = '无'; } if (cunfangdiKucunNum > 0) { rentalObj.Bie_Cun_Fang_Di_Ku_Cun_Jia__c = '有'; } else { rentalObj.Bie_Cun_Fang_Di_Ku_Cun_Jia__c = '无'; } // rentalObj.Fu_Shu_Pin_Fen_Pei_Jia__c = FixtureUtil.assetStatusMap.get(accessoryStatus); // rentalObj.Zhu_Ti_Fen_Pei_Jia__c = FixtureUtil.assetStatusMap.get(subjectStatus); System.debug('测试rentalObj.Yi_Shipment_request__c:' + rentalObj.Yi_Shipment_request__c); if (!(rentalObj.Yi_Shipment_request__c > 0)) { if (rentalObj.Rental_Start_Date__c == null) { rentalObj.Rental_Start_Date__c = parentObj.Asset_loaner_start_day__c; } if (rentalObj.Rental_End_Date__c == null) { rentalObj.Rental_End_Date__c = parentObj.Asset_loaner_closed_day__c; } } WrapperInfo info = new WrapperInfo(rentalObj, myComponentController); info.additionalInfoMap.put('QueueType__c', rentalObj.QueueType__c==null?'':rentalObj.QueueType__c); // 20211203 ljh add info.additionalInfoMap.put('First_RAESD_Model_No_F__c', rentalObj.First_RAESD_Model_No_F__c==null?'':rentalObj.First_RAESD_Model_No_F__c); // 20211203 ljh add viewList.add(info); viewList[viewList.size() - 1].lineNo = viewList.size() - 1; viewList[viewList.size() - 1].check = true; viewList[viewList.size() - 1].oldCheck = true; // viewList[viewList.size() - 1].additionalInfoMap.put('QueueType__c ', rentalObj.QueueType__c == null?'':rentalObj.QueueType__c); } Map zmap = FixtureUtil.makeZhu_Ti_Fen_Pei_Jia(raesdMapz, raesMap); Map fmap = FixtureUtil.makeFu_Shu_Pin_Fen_Pei_Jia(raesdMapf, raesMap); for (Integer i = 0; i < selectedData.size(); i++) { /* not include the selected data num */ // 501を超えた場合前500のみを出す Rental_Apply_Equipment_Set__c rentalObj = (Rental_Apply_Equipment_Set__c)selectedData[i]; if (fmap.containsKey(rentalObj.Id)) { if ((rentalObj.Rental_Apply__r.Status__c == '已批准' || rentalObj.Rental_Apply__r.Status__c == FixtureUtil.raStatusMap.get(FixtureUtil.RaStatus.Yi_Chu_Ku_Zhi_Shi.ordinal()) ) && rentalObj.Wei_Assigned_Cnt__c > 0 ) { rentalObj.Fu_Shu_Pin_Fen_Pei_Jia__c = fmap.get(rentalObj.Id); } else { //rentalObj.Zhu_Ti_Fen_Pei_Jia__c = rentalObj.RAES_Status__c; rentalObj.Fu_Shu_Pin_Fen_Pei_Jia__c = rentalObj.RAES_Status__c; } } if (zmap.containsKey(rentalObj.Id)) { if (rentalObj.Rental_Apply__r.Status__c == '填写完毕' || rentalObj.Rental_Apply__r.Status__c == '草案中' || rentalObj.Rental_Apply__r.Status__c == '申请中' || rentalObj.Rental_Apply__r.Status__c == '不批准') { rentalObj.Zhu_Ti_Fen_Pei_Jia__c = rentalObj.RAES_Status__c; } else { rentalObj.Zhu_Ti_Fen_Pei_Jia__c = zmap.get(rentalObj.Id); } } } } wrapperStr = JSON.serialize(viewList); System.debug(LoggingLevel.INFO, '*** wrapperStr: ' + wrapperStr); system.debug('●●●●● setViewList END ' ); } public static String setSoql(String field, List valieList) { String whereStr = ''; for (String val : valieList) { if (String.isNotBlank(val)) { if (String.isBlank(whereStr)) { whereStr += ' and ('; whereStr += field + ' = \'' + val + '\''; } else { whereStr += ' or ' + field + ' = \'' + val + '\''; } } } if (String.isNotBlank(whereStr)) { whereStr += ')'; } return whereStr; } public String getBodyModelNoJson() { return JSON.serialize(showButtonList); } public String getWrapperJSON(){ System.debug(LoggingLevel.INFO, '*** wrapperStr: ' + wrapperStr); return wrapperStr; } //特殊排队 public PageReference specialScheduel(){ hasError = false; List mfUpdate = new List(); Savepoint sp = Database.setSavepoint(); try { equipmenttypes = equipmenttypes =='--无--'?'':equipmenttypes; salesdepartments = salesdepartments =='--无--'?'':salesdepartments; // 20220104 ljh 排队 update start if(String.isEmpty(equipmenttypes)){ // throw new ControllerUtil.myException('特殊排队时,备品分类必填!'); throw new ControllerUtil.myException('特殊排队时,请选择备品分类'); } if(String.isEmpty(salesdepartments)){ // throw new ControllerUtil.myException('特殊排队时,本部必填!'); throw new ControllerUtil.myException('特殊排队时,请选择本部'); } // 20220104 ljh 排队 update end if(parentObj.Demo_purpose1__c =='产品试用' && (equipmenttypes.contains('维修') || equipmenttypes.contains('协议借用'))){ throw new ControllerUtil.myException('产品试用的申请单,不可以选择维修类、协议借用类的备品分类'); } if(parentObj.demo_purpose2__c == '学会展会' && parentObj.Owner.Profile.Name.contains('FSE')){ // 20220107 ljh update start // throw new ControllerUtil.myException('FSE的学会展会申请单不允许特殊排队!'); throw new ControllerUtil.myException('服务培训/学会申请单无特殊排队!'); // 20220107 ljh update end } // if(parentObj.demo_purpose2__c == '学会展会' && !(parentObj.Salesdepartment__c.contains('MA本部') || parentObj.Salesdepartment__c.contains('产品培训')) && String.isEmpty(parentObj.CampaignType__c) ){ // throw new ControllerUtil.myException('请选择学会类型!'); // } // if(parentObj.CampaignType__c == '服务培训/学会'){ // throw new ControllerUtil.myException('当前学会类型不允许特殊排队!'); // } if(parentObj.Demo_purpose1__c == '维修代用' || parentObj.Demo_purpose1__c == '协议借用'){ throw new ControllerUtil.myException('当前使用目的不允许特殊排队!'); } if((salesdepartments.contains('MA本部') || salesdepartments.contains('产品培训')) && (salesdepartments.countMatches('本部') > 1 || salesdepartments.contains('备品中心'))){ throw new ControllerUtil.myException('MA本部/产品培训本部不能与其他本部同时选择!'); } if(((equipmenttypes.contains('产品试用') || equipmenttypes.contains('学会展会'))&& equipmenttypes.contains('协议借用')) || (equipmenttypes.contains('协议借用') && equipmenttypes.contains('维修')) || ((equipmenttypes.contains('产品试用') || equipmenttypes.contains('学会展会'))&& equipmenttypes.contains('维修'))){ throw new ControllerUtil.myException('维修类、试用类、协议借用类不能同时选择!'); } if(String.isEmpty(parentObj.Product_category_Sys__c)){ throw new ControllerUtil.myException('请填写产品分类!'); } startQueue('特殊排队'); if(allSpecialQueue()){ parentObj.CampaignType__c = null; update parentObj; } } catch (Exception e) { System.debug('e.getMessage()***'+ e.getMessage()+e.getLineNumber()); ApexPages.addMessages(e); Database.rollback(sp); hasError = true; return null; } // 20220105 ljh add start myComponentController.getSelectedDataInfo(); getSqlWhereStr(); myComponentController.searchAndPaging(); // 20220105 ljh add end ApexPages.addmessage(new ApexPages.message(ApexPages.severity.CONFIRM,'排队成功')); return null; } //默认排队 public PageReference defaultScheduel(){ hasError = false; Savepoint sp = Database.setSavepoint(); System.debug(LoggingLevel.INFO, '*** parentObj: ' + parentObj); try { if(parentObj.demo_purpose2__c == '学会展会' && !(parentObj.Salesdepartment__c.contains('MA本部') || parentObj.Salesdepartment__c.contains('产品培训')) && String.isEmpty(parentObj.CampaignType__c) ){ throw new ControllerUtil.myException('请选择学会类型!'); } startQueue('默认排队'); } catch (Exception e) { System.debug('e.getMessage()***'+ e.getMessage()+e.getLineNumber()); ApexPages.addMessages(e); Database.rollback(sp); hasError = true; return null; } // 20220105 ljh add start myComponentController.getSelectedDataInfo(); getSqlWhereStr(); myComponentController.searchAndPaging(); // 20220105 ljh add end ApexPages.addmessage(new ApexPages.message(ApexPages.severity.CONFIRM,'排队成功')); return null; } //排队置顶 public PageReference topInLine(){ hasError = false; Savepoint sp = Database.setSavepoint(); try { List raesdObjs = getdetailList(viewList,parentObj); System.debug(LoggingLevel.INFO, '*** raesdObjs.size(): ' + raesdObjs.size()); saveAgdustQueue(raesdObjs,'front'); // QueuePageByAssetIdController.saveQueue(); } catch (Exception e) { System.debug('e.getMessage()***'+ e.getMessage()+e.getLineNumber()); ApexPages.addMessages(e); Database.rollback(sp); hasError = true; return null; } ApexPages.addmessage(new ApexPages.message(ApexPages.severity.CONFIRM,'排队置顶成功')); return null; } /** * 调整队列 * */ public static void saveAgdustQueue(List raesdObjs,String fromtype) { System.debug(LoggingLevel.INFO, '*** applysetMap: ' + applysetMap); List keyList = new List(); List detailIds = new List(); Map> detailMap = new Map>(); for(Rental_Apply_Equipment_Set_Detail__c raesd:raesdObjs){ System.debug(LoggingLevel.INFO, '*** raesd.Id: ' + raesd.Id); String index = ''; if(applysetMap.containskey(raesd.Rental_Apply_Equipment_Set__c)){ index = applysetMap.get(raesd.Rental_Apply_Equipment_Set__c); } String msg = ''; if(raesd.Queue_Number__c == null){ if(fromtype == 'front'){ msg = '第' + index + '行未进行过排队,不能调整。'; }else{ msg = '一览:' + index + '未进行过排队,不能调整。'; } throw new ControllerUtil.myException(msg); } if (!raesd.Allow_Adjust_Queue_Flag__c) { if(fromtype == 'front'){ msg = '第' + index + '行备品总窗口未申请插队,无法调整顺序。'; }else{ msg = '一览:' + index + '备品总窗口未申请插队,无法调整顺序。'; } throw new ControllerUtil.myException(msg); } keyList.add(raesd.ExternalKey__c); if(!detailMap.containsKey(raesd.ExternalKey__c)){ detailMap.put(raesd.ExternalKey__c,new List()); } detailMap.get(raesd.ExternalKey__c).add(raesd); detailIds.add(raesd.Id); } List raesdList = [SELECT Id, Rental_Apply_Equipment_Set__c, Asset__c,Rental_Apply_Equipment_Set__r.Fixture_Set__r.Product_Type__c, FSD_Fixture_Model_No__c, Fixture_Model_No_text__c,Rental_Apply__r.demo_purpose2__c,Queue_Day__c,ExternalKey__c, Is_Body__c, FSD_Is_OneToOne__c, Select_Time__c,Rental_Apply__r.EquipmentGuaranteeFlg__c,Allow_Adjust_Queue_Flag__c, Cancel_Select__c, Fixture_Model_No_F__c, Queue_Number__c, Internal_asset_location__c,Fixture_Model_No__c,Rental_Apply__c, Internal_asset_location_before__c,Salesdepartment__c, Product_category_F__c, Product_category_text__c,Equipment_Type_text__c, Salesdepartment_before__c,Rental_Apply__r.Request_shipping_day__c,QuenType__c,IsAdjust__c,Rental_Apply__r.Request_approval_time__c, Equipment_Type__c, Rental_Apply__r.Internal_asset_location_F__c,Cancel_Reason__c,Loaner_cancel_reason__c, Loaner_cancel_Remarks__c ,Rental_Apply_Equipment_Set__r.Name FROM Rental_Apply_Equipment_Set_Detail__c WHERE Queue_Number__c > 0 AND Cancel_Select__c = false AND ExternalKey__c IN: keyList AND Id NOT IN:detailIds ORDER BY Queue_Number__c ASC nulls last]; System.debug(LoggingLevel.INFO, '*** raesdList: ' + raesdList); Map> queueMap = new Map>(); for(Rental_Apply_Equipment_Set_Detail__c detail:raesdList){ if(!queueMap.containskey(detail.Externalkey__c)){ queueMap.put(detail.Externalkey__c,new List()); } queueMap.get(detail.Externalkey__c).add(detail); } System.debug(LoggingLevel.INFO, '*** queueMap: ' + queueMap); Decimal orderNo = 0; List sequencekeylist = new List(); List queueList = new List(); for(String key:detailMap.keySet()){ System.debug(LoggingLevel.INFO, '*** key: ' + key); List ajdusts = detailMap.get(key); Integer k = 1; for(Rental_Apply_Equipment_Set_Detail__c ajdust:ajdusts){ queueList.add(ajdust); KeyObj obj = getSequenceInfo(ajdust); sequencekeylist.addAll(obj.sequencekeylist); System.debug(LoggingLevel.INFO, '*** ajdust.Queue_Number__c: ' + ajdust.Queue_Number__c); orderNo = ajdust.Queue_Number__c; System.debug(LoggingLevel.INFO, '*** k: ' + k); ajdust.Queue_Number__c = k; ajdust.IsAdjust__c = true; k ++; } if(queueMap.containskey(key)){ Decimal i = k; for(Rental_Apply_Equipment_Set_Detail__c detail:queueMap.get(key)){ if(detail.Queue_Number__c != i){ KeyObj dobj = getSequenceInfo(detail); sequencekeylist.addAll(dobj.sequencekeylist); System.debug(LoggingLevel.INFO, '*** i: ' + i); detail.Queue_Number__c = i; queueList.add(detail); } i ++; } } } update queueList; List nodusequencekeylist = new List(new Set(sequencekeylist)); List updateSequenceList = new List(); List applysequenceList = [SELECT Id,ExternalKey__c,Demo_Purpose2__c, Apply_Set_Detail__c,Apply_Set_Detail_ExternalKey__c, Series_No__c,Salesdepartment__c,Product_category__c, Rental_Apply__c,Internal_asset_location__c, Apply_Set_Detail__r.Queue_Number__c,Series_Unequal_Queue_Flag__c, Fixture_Model_No__c,Equipment_Type__c FROM Rental_Apply_Sequence__c WHERE ExternalKey__c IN: nodusequencekeylist AND Series_No__c > 0 AND Invalid_Flag__c =false FOR Update ]; System.debug(LoggingLevel.INFO, '*** applysequenceList: ' + applysequenceList); if(applysequenceList.size() > 0){ if(queueList.size() + applysequenceList.size() > 9000){ throw new ControllerUtil.myException('当前数据量过大,请到主题分配页面进行单条数据排队操作'); } Map> modelSequenceMap = new Map>(); for(Rental_Apply_Sequence__c rasequence:applysequenceList){ if(!modelSequenceMap.containsKey(rasequence.ExternalKey__c)){ modelSequenceMap.put(rasequence.ExternalKey__c,new List()); } modelSequenceMap.get(rasequence.ExternalKey__c).add(rasequence); } System.debug(LoggingLevel.INFO, '*** modelSequenceMap: ' + modelSequenceMap); for(String key: modelSequenceMap.keySet()){ List sequenceList = modelSequenceMap.get(key); System.debug(LoggingLevel.INFO, '*** sequenceList: ' + sequenceList); if(isSinglekey(sequenceList)){ for(Rental_Apply_Sequence__c sequeuece:sequenceList){ sequeuece.Series_No__c = sequeuece.Apply_Set_Detail__r.Queue_Number__c; updateSequenceList.add(sequeuece); } } } update updateSequenceList; } } public void startQueue(String queuetype){ System.debug(LoggingLevel.INFO, '*** queuetype: ' + queuetype); List raesdObjs = getdetailList(viewList,parentObj); Boolean sameCampaignType = false; // 2022014 ljh update start // if(parentObj.CampaignType__c == oldCampaignType){ String locationEmail = FixtureUtil.locationMap.get(bieCunFangDi); System.debug(LoggingLevel.INFO, '*** locationEmail: ' + locationEmail); if(locationEmail!=null && !locationEmail.equalsIgnoreCase(parentObj.Loaner_centre_mail_address__c)){ throw new ControllerUtil.myException('无权限操作当前单据进行排队!'); } if((String.isBlank(parentObj.CampaignType__c) && String.isBlank(oldCampaignType)) || (!String.isBlank(parentObj.CampaignType__c) && !String.isBlank(oldCampaignType) && parentObj.CampaignType__c == oldCampaignType) ){ // 2022014 ljh update end sameCampaignType = true; } if(queuetype == '默认排队'){ if(changeCampaignType){ List raesdIds = new List(); for(Rental_Apply_Equipment_Set_Detail__c raesd:raesdObjs){ raesdIds.add(raesd.Id); } List oldquenlist = [SELECT Id, Rental_Apply_Equipment_Set__c, Asset__c,Rental_Apply_Equipment_Set__r.Fixture_Set__r.Product_Type__c, FSD_Fixture_Model_No__c, Fixture_Model_No_text__c,Rental_Apply__r.demo_purpose2__c,Queue_Day__c,ExternalKey__c, Is_Body__c, FSD_Is_OneToOne__c, Select_Time__c,Rental_Apply__r.EquipmentGuaranteeFlg__c,Allow_Adjust_Queue_Flag__c, Cancel_Select__c, Fixture_Model_No_F__c, Queue_Number__c, Internal_asset_location__c,Fixture_Model_No__c,Rental_Apply__c, Internal_asset_location_before__c,Salesdepartment__c, Product_category_F__c, Product_category_text__c,Equipment_Type_text__c, Salesdepartment_before__c,Rental_Apply__r.Request_shipping_day__c,QuenType__c,IsAdjust__c,Rental_Apply__r.Request_approval_time__c, Queue_Time_F__c,IndexFromUniqueKey__c,Rental_Apply_Equipment_Set__r.IndexFromUniqueKey__c, // 20220105 ljh add ueue_Time_F__c,IndexFromUniqueKey__c, Equipment_Type__c, Rental_Apply__r.Internal_asset_location_F__c,Cancel_Reason__c,Loaner_cancel_reason__c, Loaner_cancel_Remarks__c ,Rental_Apply_Equipment_Set__r.Name FROM Rental_Apply_Equipment_Set_Detail__c WHERE Rental_Apply__c =:parentObj.Id AND Id NOT IN:raesdIds AND QuenType__c = '默认排队' AND Queue_Number__c > 0 AND Cancel_Select__c = false AND Is_Body__c = true FOR Update]; raesdObjs.addAll(oldquenlist); }else{ if(String.isNotEmpty(oldCampaignType)){ parentObj.CampaignType__c = oldCampaignType; } } update parentObj; } List modelList = new List(); List departmentsList = new List(); List departmentList = new List(); List locationList = new List(); List categoryList = new List(); List equipmentList = new List(); List equipmentsList = new List(); List locationsetList = new List(); List sequencekeylist = new List(); List detailIds = new List(); List queuekeyList = new List(); // Map keyObjMap = new Map(); Map keyMap = new Map(); List changeddetailIds = new List(); List allsequenceList = new List(); Map> detailMap = new Map>(); List queueIds = new List(); List updateList = new List(); List detailWrappers = new List(); for(Rental_Apply_Equipment_Set_Detail__c raesd:raesdObjs){ detailWrappers.add(new FixtureUtil.SetDetailWrapper(raesd)); } detailWrappers.sort(); raesdObjs = new List(); for(FixtureUtil.SetDetailWrapper wrapper:detailWrappers){ raesdObjs.add(wrapper.detail); } for(Rental_Apply_Equipment_Set_Detail__c raesd:raesdObjs){ String oldKey = raesd.ExternalKey__c; String index = applysetMap.get(raesd.Rental_Apply_Equipment_Set__c); if(String.isBlank(index)){ index = '0'; } System.debug(LoggingLevel.INFO, '*---** index: ' + index+'~'+sameCampaignType); System.debug(LoggingLevel.INFO, '*** oldCampaignType: ' + oldCampaignType); System.debug(LoggingLevel.INFO, '*** parentObj.CampaignType__c: ' + parentObj.CampaignType__c); if(queuetype == '默认排队' && raesd.QuenType__c == '默认排队' && raesd.Queue_Number__c > 0 && raesd.Queue_Day__c != null && sameCampaignType){ throw new ControllerUtil.myException('第' + index + '行 '+ raesd.Fixture_Model_No__c +' 型号已参与默认排队'); } String modelType = raesd.Rental_Apply_Equipment_Set__r.Fixture_Set__r.Product_Type__c; if((parentObj.demo_purpose2__c == '试用(无询价)' || parentObj.demo_purpose2__c == '试用(有询价)' || parentObj.demo_purpose2__c == '已购待货' || parentObj.demo_purpose2__c == '新产品评价') && modelType == '新产品' && queuetype == '特殊排队'){ throw new ControllerUtil.myException('第' + index + '行 '+ raesd.Fixture_Model_No__c +' 不能参与特殊排队'); } if(modelType == null && queuetype == '默认排队' && (parentObj.demo_purpose2__c == '试用(无询价)' || parentObj.demo_purpose2__c == '试用(有询价)' || parentObj.demo_purpose2__c == '已购待货' || parentObj.demo_purpose2__c == '新产品评价' || (parentObj.demo_purpose2__c == '学会展会' && parentObj.CampaignType__c == '营业本部学会'))){ throw new ControllerUtil.myException('第' + index + '行 '+ raesd.Fixture_Model_No__c +' 备品产品类型为空!'); } KeyObj obj = null; System.debug(LoggingLevel.INFO, '*00** index: ' + index); if(queuetype == '默认排队'){ ApplyObj applyObj = new ApplyObj(); applyObj.location = parentObj.Internal_asset_location_F__c; applyObj.productType = parentObj.Product_category__c; applyObj.salesdepartment = parentObj.Salesdepartment__c ; applyObj.purpose1 = parentObj.Demo_purpose1__c; applyObj.purpose2 = parentObj.demo_purpose2__c; System.debug(LoggingLevel.INFO, '*** parentObj.CampaignType__c: ' + parentObj.CampaignType__c); applyObj.campaignType = parentObj.CampaignType__c; obj = getdefultInfo(raesd,applyObj,bieCunFangDi); }else{ obj = getSpecialInfo(raesd,parentObj,salesdepartments,equipmenttypes); } System.debug(LoggingLevel.INFO, '*11** index: ' + index); queueIds.add(raesd.Id); // keyObjMap.put(raesd.Id,obj); modelList.add(obj.model); departmentsList.addAll(obj.salesdepartmentList); locationList.add(obj.location); equipmentsList.addAll(obj.equipmentList); categoryList.addAll(obj.productTypes); sequencekeylist.addAll(obj.sequencekeylist); System.debug(LoggingLevel.INFO, '*22** index: ' + index); for(String sequencekey:obj.sequencekeylist){ System.debug(LoggingLevel.INFO, '*** sequencekey: ' + sequencekey); System.debug(LoggingLevel.INFO, '*** index: ' + index); System.debug(LoggingLevel.INFO, '*** keyMap: ' + keyMap); keyMap.put(sequencekey,Integer.valueOf(index)); } String key = obj.model + obj.location + obj.salesdepartments + obj.equipmenttypes + obj.productType; if(key == oldKey){ changeddetailIds.add(raesd.Id); } // 备品配套明细型号(借出时) raesd.Fixture_Model_No_text__c = obj.model; // 所在地区(本部) 借出时 raesd.Salesdepartment_before__c = obj.salesdepartments; // 产品分类(GI/SP)(借出时) raesd.Product_category_text__c = obj.productType; // 备品分类(借出时) raesd.Equipment_Type_text__c = obj.equipmenttypes; // 备品存放地(借出时) raesd.Internal_asset_location_before__c = obj.location; raesd.ExternalKey__c = key; raesd.QuenType__c = queuetype; // raesd.Queue_User__c = UserInfo.getUserId(); raesd.Queue_Day__c = Date.today(); raesd.Queue_Time__c = getCurrentTime(); raesd.Select_Time__c = null; raesd.Asset__c = null; // 已出库指示的排队后清除出库指示信息 raesd.Shipment_request_time2__c = null; raesd.Shipment_request__c = false; raesd.Queue_User__c = UserInfo.getUserId(); raesd.Queue_Number__c = -1; raesd.IsAdjust__c = false; raesd.Select_Time__c = null; raesd.Asset__c = null; // 已出库指示的排队后清除出库指示信息 raesd.Shipment_request_time2__c = null; raesd.Shipment_request__c = false; // OLY_OCM-243 追加字段对应 备品管理编码(借出时) 排队时清除与asset相连的借出时相关的字段 raesd.EquipmentSet_Managment_Code_text__c = null; // 机身编号(借出时) raesd.SerialNumber_text__c = null; // 备品成本(借出时) raesd.Asset_cost_del_before__c = null; detailIds.add(raesd.Id); updateList.add(raesd); // KeyObj obj = keyObjMap.get(raesd.Id); System.debug(LoggingLevel.INFO, '*** KeyObj obj: ' + obj); for(String sales:obj.salesdepartmentList){ for(String equip:obj.equipmentList){ for(String type:obj.productTypes){ Rental_Apply_Sequence__c newSequence = new Rental_Apply_Sequence__c(); newSequence.ExternalKey__c = obj.model + obj.location + sales + equip + type; newSequence.Demo_Purpose2__c = raesd.Rental_Apply__r.demo_purpose2__c; newSequence.Apply_Set_Detail__c = raesd.Id; newSequence.Series_No__c = raesd.Queue_Number__c; newSequence.Salesdepartment__c = sales; newSequence.Product_category__c = type; newSequence.Rental_Apply__c = raesd.Rental_Apply__c; newSequence.Internal_asset_location__c = obj.location; newSequence.Fixture_Model_No__c = obj.model; newSequence.Equipment_Type__c = equip; allsequenceList.add(newSequence); } } } queuekeyList.add(key); departmentList.addAll(transferStringToList(obj.salesdepartments)); equipmentList.addAll(transferStringToList(obj.equipmenttypes)); } System.debug(LoggingLevel.INFO, '**1111* updateList: ' + updateList); System.debug(LoggingLevel.INFO, '*** queueIds: ' + queueIds); System.debug(LoggingLevel.INFO, '*** modelList: ' + modelList); System.debug(LoggingLevel.INFO, '*** departmentsList: ' + departmentsList); System.debug(LoggingLevel.INFO, '*** locationList: ' + locationList); System.debug(LoggingLevel.INFO, '*** categoryList: ' + categoryList); System.debug(LoggingLevel.INFO, '*** equipmentList: ' + equipmentList); String soqlStr = 'Select Id, Last_Reserve_RAES_Detail__c, Fixture_Model_No_F__c, You_Xiao_Ku_Cun__c,' + ' Salesdepartment__c, SalesProvince__c, Product_category__c, Equipment_Type__c, Internal_asset_location__c' + ' From Asset ' + ' Where Asset_Owner__c = \'Olympus\'' + ' and Asset_loaner_category__c != \'耗材\'' + ' and RecordTypeId = \'01210000000kOPR\'' + ' and Delete_Flag__c = False' + ' and Freeze_sign_Abandoned_Flag__c = False' + ' and Product2.Fixture_Model_No_T__c IN:modelList' + ' and Salesdepartment__c IN: departmentsList' + ' and Internal_asset_location__c IN: locationList' + ' and Product_category__c IN:categoryList' + ' and Equipment_Type__c IN: equipmentList' + ' and ' + FixtureUtil.getAssetSoqlBase() + ' order by Id'; // 检索符合这四个别字段和同一产品型号的数据存在与否 System.debug(LoggingLevel.INFO, '*** soqlStr: ' + soqlStr); List aSetCheck = Database.query(soqlStr); System.debug(LoggingLevel.INFO, '*** keyMap: ' + JSON.serialize(keyMap)); for (Asset ass : aSetCheck) { String key = ass.Fixture_Model_No_F__c + ass.Internal_asset_location__c + ass.Salesdepartment__c + ass.Equipment_Type__c + ass.Product_category__c; System.debug(LoggingLevel.INFO, '*** key: ' + key); if(keyMap.containsKey(key)){ if (ass.Last_Reserve_RAES_Detail__c == null && ass.You_Xiao_Ku_Cun__c > 0) { throw new ControllerUtil.myException('第'+ keyMap.get(key)+'行 '+ ass.Fixture_Model_No_F__c +' 有可以分配主体不需要排队'); } } } System.debug(LoggingLevel.INFO, '*** queuekeyList: ' + queuekeyList); Map> queueMap = new Map>(); List queueList = [SELECT Id, Rental_Apply_Equipment_Set__c, Asset__c,Rental_Apply_Equipment_Set__r.Fixture_Set__r.Product_Type__c, FSD_Fixture_Model_No__c, Fixture_Model_No_text__c,Externalkey__c,Rental_Apply__r.demo_purpose2__c,Equipment_Type_text__c, Is_Body__c, FSD_Is_OneToOne__c, Select_Time__c,Rental_Apply__r.EquipmentGuaranteeFlg__c,Fixture_Model_No__c, Cancel_Select__c, Fixture_Model_No_F__c, Queue_Number__c, Internal_asset_location__c,IsAdjust__c,Queue_Day__c,Queue_Time__c, Salesdepartment__c, Product_category_F__c, Equipment_Type__c, Rental_Apply__r.Internal_asset_location_F__c, Queue_Time_F__c,IndexFromUniqueKey__c,Rental_Apply_Equipment_Set__r.IndexFromUniqueKey__c, // 20220105 ljh add Queue_Time_F__c,IndexFromUniqueKey__c, Cancel_Reason__c,Loaner_cancel_reason__c,Loaner_cancel_Remarks__c ,Rental_Apply__r.Request_shipping_day__c,Rental_Apply__r.Request_approval_time__c FROM Rental_Apply_Equipment_Set_Detail__c WHERE Externalkey__c IN :queuekeyList AND Cancel_Select__c = false AND Is_Body__c = true AND Id NOT IN:queueIds AND Queue_Number__c > 0 FOR Update ]; updateList.addAll(queueList); System.debug(LoggingLevel.INFO, '***old updateList: ' + updateList.size()); updateList = Batch_QueueAllDetail.getSortDetailList(updateList); System.debug(LoggingLevel.INFO, '*** updateList: ' + updateList.size()); update updateList; System.debug(LoggingLevel.INFO, '*** allsequenceList: ' + allsequenceList.size()); List oldSequenceList = [SELECT Id,ExternalKey__c,Fixture_Model_No__c FROM Rental_Apply_Sequence__c WHERE Apply_Set_Detail__c IN:detailIds]; System.debug(LoggingLevel.INFO, '*** oldSequenceList.size(): ' + oldSequenceList.size()); Set keys = new Set(); for(Rental_Apply_Sequence__c se:oldSequenceList){ keys.add(se.ExternalKey__c); } Integer count = [SELECT count() FROM Rental_Apply_Sequence__c WHERE ExternalKey__c IN:keys]; if(updateList.size() + count + oldSequenceList.size() > 9900){ throw new ControllerUtil.myException('当前排队数据量过大,请选择单个主体操作'); } List olddleteSequenceList = [SELECT Id,ExternalKey__c,Fixture_Model_No__c FROM Rental_Apply_Sequence__c WHERE Apply_Set_Detail__c IN:changeddetailIds]; delete olddleteSequenceList; if(updateList.size() + count + oldSequenceList.size() + allsequenceList.size() > 9900){ throw new ControllerUtil.myException('当前排队数据量过大,请选择单个主体操作'); } insert allsequenceList; List newSequenceIds = new List(); for(Rental_Apply_Sequence__c se:allsequenceList){ newSequenceIds.add(se.Id); } allsequenceList = [SELECT Id,ExternalKey__c,Demo_Purpose2__c,Rental_Apply__r.Request_shipping_day__c,Rental_Apply__r.EquipmentGuaranteeFlg__c, Apply_Set_Detail__c,Apply_Set_Detail_ExternalKey__c,Rental_Apply__r.Request_approval_time__c,Apply_Set_Detail__r.IsAdjust__c, Series_No__c,Salesdepartment__c,Product_category__c,Apply_Set_Detail__r.Queue_Day__c,Apply_Set_Detail__r.Queue_Time__c, Rental_Apply__c,Internal_asset_location__c,Series_Unequal_Queue_Flag__c, Apply_Set_Detail__r.Queue_Number__c,Apply_Set_Detail__r.Queue_Time_F__c,Apply_Set_Detail__r.IndexFromUniqueKey__c, Apply_Set_Detail__r.Rental_Apply_Equipment_Set__r.IndexFromUniqueKey__c, // 20220105 ljh add Apply_Set_Detail__r.Queue_Time_F__c,Apply_Set_Detail__r.IndexFromUniqueKey__c, Fixture_Model_No__c,Equipment_Type__c FROM Rental_Apply_Sequence__c WHERE Id IN:newSequenceIds ]; List nodusequencekeylist = new List(new Set(sequencekeylist)); System.debug(LoggingLevel.INFO, '*** nodusequencekeylist: ' + JSON.serialize(nodusequencekeylist)); System.debug(LoggingLevel.INFO, '*** nodusequencekeylist.size(): ' + nodusequencekeylist.size()); if(nodusequencekeylist.size() > 950){ throw new ControllerUtil.myException('当前排队数据量过大,请选择单个主体操作'); } List updateSequenceList = new List(); List newSequenceList = new List(); List applysequenceList = [SELECT Id,ExternalKey__c,Demo_Purpose2__c,Rental_Apply__r.Request_shipping_day__c,Rental_Apply__r.EquipmentGuaranteeFlg__c, Apply_Set_Detail__c,Apply_Set_Detail_ExternalKey__c,Rental_Apply__r.Request_approval_time__c,Apply_Set_Detail__r.IsAdjust__c, Series_No__c,Salesdepartment__c,Product_category__c,Apply_Set_Detail__r.Queue_Day__c,Apply_Set_Detail__r.Queue_Time__c, Rental_Apply__c,Internal_asset_location__c,Series_Unequal_Queue_Flag__c, Apply_Set_Detail__r.Queue_Number__c,Apply_Set_Detail__r.Queue_Time_F__c,Apply_Set_Detail__r.IndexFromUniqueKey__c, // 20220105 ljh add Apply_Set_Detail__r.Queue_Time_F__c,Apply_Set_Detail__r.IndexFromUniqueKey__c, Apply_Set_Detail__r.Rental_Apply_Equipment_Set__r.IndexFromUniqueKey__c, Fixture_Model_No__c,Equipment_Type__c FROM Rental_Apply_Sequence__c WHERE ExternalKey__c IN: nodusequencekeylist AND Series_No__c > 0 AND Invalid_Flag__c = false FOR Update ]; // System.debug(LoggingLevel.INFO, '*** JSON.serialize(applysequenceList): ' + JSON.serialize(applysequenceList)); newSequenceList.addAll(applysequenceList); newSequenceList.addAll(allsequenceList); System.debug(LoggingLevel.INFO, '*** newSequenceList.size(): ' + newSequenceList.size()); newSequenceList = Batch_QueueAllDetail.getSortSequenceList(newSequenceList); if(updateList.size() + count + oldSequenceList.size() + allsequenceList.size() + newSequenceList.size() > 9900){ throw new ControllerUtil.myException('当前排队数据量过大,请选择单个主体操作'); } System.debug(LoggingLevel.INFO, '*** newSequenceList: ' + newSequenceList); upsert newSequenceList; } public Boolean allSpecialQueue(){ List details = [SELECT Id, Rental_Apply_Equipment_Set__c, Asset__c,Rental_Apply_Equipment_Set__r.Fixture_Set__r.Product_Type__c, FSD_Fixture_Model_No__c, Fixture_Model_No_text__c,Rental_Apply__r.demo_purpose2__c,Queue_Day__c,ExternalKey__c, Is_Body__c, FSD_Is_OneToOne__c, Select_Time__c,Rental_Apply__r.EquipmentGuaranteeFlg__c,Allow_Adjust_Queue_Flag__c, Cancel_Select__c, Fixture_Model_No_F__c, Queue_Number__c, Internal_asset_location__c,Fixture_Model_No__c,Rental_Apply__c, Internal_asset_location_before__c,Salesdepartment__c, Product_category_F__c, Product_category_text__c,Equipment_Type_text__c, Salesdepartment_before__c,Rental_Apply__r.Request_shipping_day__c,QuenType__c,IsAdjust__c,Rental_Apply__r.Request_approval_time__c, Equipment_Type__c, Rental_Apply__r.Internal_asset_location_F__c,Cancel_Reason__c,Loaner_cancel_reason__c,Loaner_cancel_Remarks__c FROM Rental_Apply_Equipment_Set_Detail__c WHERE Rental_Apply__c =:parentObj.Id ]; for(Rental_Apply_Equipment_Set_Detail__c detail:details){ if(detail.QuenType__c == '默认排队'){ return false; } } return true; } public static Boolean isSinglekey(List sequenceList){ String externalKey = sequenceList[0].Apply_Set_Detail_ExternalKey__c; for(Rental_Apply_Sequence__c sequeuece:sequenceList){ if(externalKey != sequeuece.Apply_Set_Detail_ExternalKey__c){ return false; } } return true; } public static Map applysetMap = new Map(); public List getdetailList(List viewList,Rental_Apply__c parentObj){ List applysetIds = new List(); Integer indexNumQ = 1;// 20220104 ljh add start for(Integer i = 0;i < viewList.size();i++){ WrapperInfo prInfo = viewList.get(i); // for (WrapperInfo prInfo : viewList) { Rental_Apply_Equipment_Set__c robj = (Rental_Apply_Equipment_Set__c) prInfo.sobj; if (prInfo.check) { // 20220104 ljh add start // 待分配和排队中 if (robj.First_RAESD_Is_Main__c && String.isNotBlank(robj.First_Status__c) && robj.First_Status__c != '待分配' && robj.First_Status__c != '排队中') { // ***一览**型号不满足条件,无法进行排队 throw new ControllerUtil.myException('第' + indexNumQ + '行 '+ robj.First_RAESD_Model_No_F__c +' 不满足条件,无法进行排队'); } // 20220104 ljh add end applysetIds.add(robj.Id); applysetMap.put(robj.Id,String.valueOf(i+1)); } indexNumQ += 1;// 20220104 ljh add start } System.debug(LoggingLevel.INFO, '*** applysetMap: ' + applysetMap); List assignList = [SELECT Id, Rental_Apply_Equipment_Set__c, Asset__c,Rental_Apply_Equipment_Set__r.Fixture_Set__r.Product_Type__c, FSD_Fixture_Model_No__c, Fixture_Model_No_text__c,Rental_Apply__r.demo_purpose2__c,Queue_Day__c,ExternalKey__c, Is_Body__c, FSD_Is_OneToOne__c, Select_Time__c,Rental_Apply__r.EquipmentGuaranteeFlg__c,Allow_Adjust_Queue_Flag__c, Cancel_Select__c, Fixture_Model_No_F__c, Queue_Number__c, Internal_asset_location__c,Fixture_Model_No__c,Rental_Apply__c, Internal_asset_location_before__c,Salesdepartment__c, Product_category_F__c, Product_category_text__c,Equipment_Type_text__c, Salesdepartment_before__c,Rental_Apply__r.Request_shipping_day__c,QuenType__c,IsAdjust__c,Rental_Apply__r.Request_approval_time__c, Equipment_Type__c, Rental_Apply__r.Internal_asset_location_F__c,Cancel_Reason__c,Loaner_cancel_reason__c, Loaner_cancel_Remarks__c ,Rental_Apply_Equipment_Set__r.Name FROM Rental_Apply_Equipment_Set_Detail__c WHERE Rental_Apply_Equipment_Set__c IN :applysetIds AND Cancel_Select__c = false AND Is_Body__c = true AND (Shipment_Status_Text__c = '暂定分配' OR Shipment_Status_Text__c ='已分配')]; if(assignList.size() > 0){ throw new ControllerUtil.myException(applysetMap.get(assignList[0].Rental_Apply_Equipment_Set__c)+'行已经暂定分配或已分配,不能参与排队!'); } List raesdObjs = [SELECT Id, Rental_Apply_Equipment_Set__c, Asset__c,Rental_Apply_Equipment_Set__r.Fixture_Set__r.Product_Type__c, FSD_Fixture_Model_No__c, Fixture_Model_No_text__c,Rental_Apply__r.demo_purpose2__c,Queue_Day__c,ExternalKey__c, Is_Body__c, FSD_Is_OneToOne__c, Select_Time__c,Rental_Apply__r.EquipmentGuaranteeFlg__c,Allow_Adjust_Queue_Flag__c, Cancel_Select__c, Fixture_Model_No_F__c, Queue_Number__c, Internal_asset_location__c,Fixture_Model_No__c,Rental_Apply__c, Internal_asset_location_before__c,Salesdepartment__c, Product_category_F__c, Product_category_text__c,Equipment_Type_text__c, Salesdepartment_before__c,Rental_Apply__r.Request_shipping_day__c,QuenType__c,IsAdjust__c,Rental_Apply__r.Request_approval_time__c, Queue_Time_F__c,IndexFromUniqueKey__c,Rental_Apply_Equipment_Set__r.IndexFromUniqueKey__c, // 20220105 ljh add ueue_Time_F__c,IndexFromUniqueKey__c, Equipment_Type__c, Rental_Apply__r.Internal_asset_location_F__c,Cancel_Reason__c,Loaner_cancel_reason__c, Loaner_cancel_Remarks__c ,Rental_Apply_Equipment_Set__r.Name FROM Rental_Apply_Equipment_Set_Detail__c WHERE Rental_Apply_Equipment_Set__c IN :applysetIds AND Cancel_Select__c = false AND Is_Body__c = true AND (Shipment_Status_Text__c = '待分配' OR Shipment_Status_Text__c = '排队中') FOR Update]; if(raesdObjs.size() == 0){ throw new ControllerUtil.myException('当前无操作数据!'); } return raesdObjs; } public class KeyObj{ public String queuekey; public List sequencekeyList; public String model; public String location; public String salesdepartments; public List salesdepartmentList; public String equipmenttypes; public List equipmentList; public String productType; public List productTypes; } public static KeyObj getdefultInfo(Rental_Apply_Equipment_Set_Detail__c setDetail,ApplyObj applyObj,String bieCunFangDi){ String modelType = setDetail.Rental_Apply_Equipment_Set__r.Fixture_Set__r.Product_Type__c; KeyObj obj = new KeyObj(); obj.model = setDetail.Fixture_Model_No__c; obj.location = applyObj.location; obj.productType = applyObj.productType; // String location = String equipmenttypes = ''; String salesdepartments = ''; if(applyObj.purpose1 == '其他'){ throw new ControllerUtil.myException('使用目的为其他,不能参与默认排队'); }else{ System.debug(LoggingLevel.INFO, '*** applyObj.purpose1: ' + applyObj.purpose1); System.debug(LoggingLevel.INFO, '*** applyObj.purpose2: ' + applyObj.purpose2); System.debug(LoggingLevel.INFO, 'pageupdated'); if(applyObj.purpose1 == '产品试用'){ if(applyObj.purpose2 == '试用(无询价)' || applyObj.purpose2 == '试用(有询价)' || applyObj.purpose2 == '已购待货' || applyObj.purpose2 == '新产品评价'){ equipmenttypes = '产品试用'; if(modelType == '新产品' || modelType == '重点产品'){ salesdepartments = '0.备品中心,' + applyObj.salesdepartment ; }else if(modelType == '非重点产品'){ salesdepartments = transferListtoString(applyObj.purpose1,FixtureUtil.bieBenBuOpsMap.get(bieCunFangDi)); } }else if(applyObj.purpose2 == '学会展会'){ System.debug(LoggingLevel.INFO, '*** applyObj.salesdepartment: ' + applyObj.salesdepartment); if(applyObj.salesdepartment.contains('MA本部')){ equipmenttypes ='协议借用'; salesdepartments = applyObj.salesdepartment; } else if(applyObj.salesdepartment.contains('产品培训')){ equipmenttypes = '产品试用'; salesdepartments = applyObj.salesdepartment; }else if(!(applyObj.salesdepartment.contains('产品培训') || applyObj.salesdepartment.contains('MA本部'))){ System.debug(LoggingLevel.INFO, 'debugflag------------------'+applyObj.campaignType); if(applyObj.campaignType == '全国性学会' || applyObj.campaignType == '春秋两季医疗展'){ salesdepartments = '0.备品中心'; equipmenttypes = '学会展会'; }else if(applyObj.campaignType == '市场本部主办学会'){ equipmenttypes = '学会展会'; salesdepartments = applyObj.salesdepartment ; }else if(applyObj.campaignType == '营业本部学会'){ if(modelType == '新产品' || modelType == '重点产品'){ salesdepartments = '0.备品中心,' + applyObj.salesdepartment ; }else if(modelType == '非重点产品'){ salesdepartments = transferListtoString(applyObj.purpose1,FixtureUtil.bieBenBuOpsMap.get(bieCunFangDi)); } equipmenttypes = '产品试用'; }else if(applyObj.campaignType == '服务培训/学会'){ salesdepartments = transferListtoString(applyObj.purpose1,FixtureUtil.bieBenBuOpsMap.get(bieCunFangDi)); equipmenttypes = '维修代用(一般维修)'; } } } }else if(applyObj.purpose1 == '维修代用'){ System.debug(LoggingLevel.INFO, '*** bieCunFangDi: ' + bieCunFangDi); salesdepartments = transferListtoString(applyObj.purpose1 ,FixtureUtil.bieBenBuOpsMap.get(bieCunFangDi)); if(applyObj.purpose2 == '保修用户' || applyObj.purpose2 == '索赔QIS'|| applyObj.purpose2 == '市场多年保修'){ equipmenttypes = '维修代用(保修合同),维修代用(一般维修)'; }else { equipmenttypes ='维修代用(一般维修)'; } }else if(applyObj.purpose1 == '协议借用'){ equipmenttypes ='协议借用'; salesdepartments = '9.MA本部'; } } System.debug(LoggingLevel.INFO, '*** salesdepartments: ' + salesdepartments); System.debug(LoggingLevel.INFO, '*** equipmenttypes: ' + equipmenttypes); obj.equipmenttypes = equipmenttypes; obj.salesdepartments = salesdepartments; getsequencekeyList(obj); return obj; } public static KeyObj getSpecialInfo(Rental_Apply_Equipment_Set_Detail__c setDetail,Rental_Apply__c parentObj,String salesdepartments,String equipmenttypes){ KeyObj obj = new KeyObj(); obj.model = setDetail.Fixture_Model_No__c; obj.location = parentObj.Internal_asset_location_F__c; obj.productType = parentObj.Product_category_Sys__c =='All'?'GI,SP':parentObj.Product_category_Sys__c; obj.equipmenttypes = equipmenttypes; obj.salesdepartments = salesdepartments; getsequencekeyList(obj); return obj; } public static KeyObj getSequenceInfo(Rental_Apply_Equipment_Set_Detail__c setDetail){ KeyObj obj = new KeyObj(); obj.model = setDetail.Fixture_Model_No_text__c; obj.location = setDetail.Internal_asset_location_before__c; obj.productType = setDetail.Product_category_text__c; obj.equipmenttypes = setDetail.Equipment_Type_text__c; obj.salesdepartments = setDetail.Salesdepartment_before__c; getsequencekeyList(obj); // System.debug(LoggingLevel.INFO, '*** obj: ' + obj); return obj; } public static void getsequencekeyList(KeyObj obj){ List sequencekeylist = new List(); obj.salesdepartmentList = transferStringToList(obj.salesdepartments); obj.salesdepartmentList.sort(); obj.equipmentList = transferStringToList(obj.equipmenttypes); obj.equipmentList.sort(); obj.productTypes = transferStringToList(obj.productType); obj.productTypes.sort(); obj.salesdepartments = ''; obj.equipmenttypes = ''; obj.productType = ''; for(String sales:obj.salesdepartmentList){ if(!obj.salesdepartments.contains(sales)){ obj.salesdepartments += sales + ','; } for(String equip:obj.equipmentList){ if(!obj.equipmenttypes.contains(equip)){ obj.equipmenttypes += equip + ','; } for(String type:obj.productTypes){ if(!obj.productType.contains(type)){ obj.productType += type + ','; } String key = obj.model + obj.location + sales + equip + type; sequencekeylist.add(key); } } } obj.salesdepartments = obj.salesdepartments.removeEnd(','); obj.equipmenttypes = obj.equipmenttypes.removeEnd(','); obj.productType = obj.productType.removeEnd(','); obj.sequencekeyList = sequencekeylist; // System.debug(LoggingLevel.INFO, '*** obj: ' + obj); } public static String transferListtoString(String purpose1,List options){ String result = ''; for(SelectOption op:options){ if(String.isNotEmpty(op.getValue())){ if(purpose1 == '产品试用' || purpose1 == '维修代用'){ if(!op.getValue().contains('MA本部') && !op.getValue().contains('产品培训')){ result += op.getValue() + ','; } } else{ result += op.getValue() + ','; } } } result = result.removeEnd(','); return result; } public static List transferStringToList(String str){ // System.debug(LoggingLevel.INFO, '*** str: ' + str); List strList = new List(); if(str.contains(',')){ strList = str.split(','); }else{ strList.add(str); } for(Integer i = strList.size()-1;i >= 0 ; i --){ if(String.isEmpty(strList.get(i))){ strList.remove(i); } } return strList; } //获取当前时间 getCurrentTime public static Time getCurrentTime() { DateTime now = DateTime.now(); System.debug('GMT: ' + now); Integer hours = now.hour(); Integer minutes = now.minute(); Integer seconds = now.second(); Integer milliseconds = now.millisecond(); System.debug('local time: ' + hours + ':' + minutes + ':' + seconds + ':' + milliseconds); Time currentTime = Time.newInstance(hours, minutes, seconds, milliseconds); return currentTime; } public class ApplyObj{ public String location; public String productType; public String salesdepartment; public String purpose1; public String purpose2; public String campaignType; } }