public with sharing class ConsumTrialController { public static final String NONE = system.label.StartTrading_None; private List assetFieldApiList; private List receivingNoteFieldApiList; public List outputFieldList {get; set;} public List inputFieldList {get; set;} public String parId {get; set;} public PageBean pageB {get; set;} public Boolean showSelectRnsButton{get;set;} public Boolean canEdit{get;set;} public Boolean redOnly{get;set;} public Boolean showEditButton{get;set;} private String case_OR_animal_organLabel{get;set;} private String saveType{get;set;} public String staticResource {get; set;} public String rowListString{set;get;} public String EditAWSDataId{set;get;} public ConsumTrialController(ApexPages.StandardController stdController) { parId = System.currentPageReference().getParameters().get('Id'); canEdit = System.currentPageReference().getParameters().get('canedit') == 'true'; saveType = System.currentPageReference().getParameters().get('saveType'); redOnly = false; showEditButton = false; if (String.isBlank(parId)) { parId = stdController.getId(); } PIHelper.PIIntegration piIntegration = PIHelper.getPIIntegrationInfo('Consum_Apply_Equipment_Set_Detail__c'); staticResource = JSON.serialize(piIntegration); } public void init() { try { if (String.isBlank(parId)) { throw new ControllerUtil.myException('请传入正确的参数'); } List rnList = [SELECT Id // , DateOfDelivery__c // , ReceivingNoteNo__c , Status__c ,AWS_Data_Id__c // , Asset_loaner_category__c , RA_Status__c , demo_purpose2__c , Person_In_Charge__c , Request_demo_time__c FROM Consum_Apply__c WHERE Id = :parId]; if (rnList.size() == 0) { throw new ControllerUtil.myException('收货清单Id不存在'); } if (rnList[0].Request_demo_time__c != null) { redOnly = true; } case_OR_animal_organLabel = '病例'; if (rnList[0].demo_purpose2__c == '动物实验' ) { case_OR_animal_organLabel = '动物脏器'; } Set assetFieldApiSet = new Set(); Set receivingNoteFieldApiSet = new Set(); outputFieldList = setFIeldSet('Consum_Apply_Equipment_Set_Detail__c', 'ConsumTrial_L', receivingNoteFieldApiSet); inputFieldList = setFIeldSet('Consum_Apply_Equipment_Set_Detail__c', 'ConsumTrial_R', receivingNoteFieldApiSet); addField(receivingNoteFieldApiSet, assetFieldApiSet); assetFieldApiList = new List(); receivingNoteFieldApiList = new List(); assetFieldApiList.addAll(assetFieldApiSet); receivingNoteFieldApiList.addAll(receivingNoteFieldApiSet); pageB = new PageBean(rnList[0], assetFieldApiList, receivingNoteFieldApiList); rowListString = JSON.serialize(pageB.rowBList); showEditButton = (rnList[0].Status__c != '申请中' && rnList[0].Status__c != '取消'); } catch (Exception e) { ApexPages.addMessages(e); } if (saveType == '1') { ApexPages.Message message = new ApexPages.Message(ApexPages.severity.INFO, '保存成功'); ApexPages.addMessage(message); } } public List getAsreceivedConditionOps() { return getPlickList('Consum_Apply__c', 'Status__c'); } public List getcategoryOps() { return getPlickList('Consum_Apply__c', 'Asset_loaner_category__c'); } public void search() { System.debug(assetFieldApiList); String wher = ''; if (String.isNotBlank(pageB.rn.Status__c)) { wher += ' AND RND_Status__c = \'' + String.escapeSingleQuotes(pageB.rn.Status__c) + '\''; } if (String.isNotBlank(pageB.fixture_Model_No)) { wher += ' AND Fixture_Model_No_F__c Like \'%' + String.escapeSingleQuotes(pageB.fixture_Model_No) + '%\''; } pageB.search(wher, assetFieldApiList, receivingNoteFieldApiList); } public void changeFixModel() { pageB.fixMode = pageB.fixMode == false; } private void addField(Set receivingNoteFieldApiSet, Set assetFieldApiSet) { receivingNoteFieldApiSet.add('Id'); receivingNoteFieldApiSet.add('Name'); receivingNoteFieldApiSet.add('Asset__c'); receivingNoteFieldApiSet.add('Fixture_Model_No_F__c'); receivingNoteFieldApiSet.add('Consum_Apply__r.AnimalExerimentFlag__c'); receivingNoteFieldApiSet.add('Consum_Apply__r.demo_purpose2__c'); } private List getPlickList(String objApi, String fieldApi) { Schema.DescribeFieldResult fieldResult = Schema.getGlobalDescribe().get(objApi).getDescribe().fields.getMap().get(fieldApi).getDescribe(); List pickListValuesList= new List(); List ple = fieldResult.getPicklistValues(); pickListValuesList.add(new SelectOption('', NONE)); for( Schema.PicklistEntry pickListVal : ple){ pickListValuesList.add(new SelectOption(pickListVal.getValue(), pickListVal.getLabel())); } return pickListValuesList; } private List setFIeldSet(String objApi, String fieldSetApi, Set fieldApiSet) { List lvList = new List(); Map fsMap = Schema.getGlobalDescribe().get(objApi).getDescribe().fieldSets.getMap(); Schema.FieldSet fs = fsMap.get(fieldSetApi); List fsmList = fs.getFields(); for (FieldSetMember fsm : fsmList) { if (objApi == 'Asset') { fieldApiSet.add('Assert__r.' + fsm.getFieldPath()); } else { fieldApiSet.add(fsm.getFieldPath()); } if (fsm.getFieldPath() == 'Case_OR_animal_organ__c') { lvList.add(new LabelValue(case_OR_animal_organLabel, fsm.getFieldPath())); } else { lvList.add(new LabelValue(fsm.getLabel(), fsm.getFieldPath())); } } return lvList; } // 适用区域信息提示 public void showApplyMsg() { String applyMsg = ApexPages.currentPage().getParameters().get('applyMsg'); String applyMsgType = ApexPages.currentPage().getParameters().get('applyMsgType'); String applyErrorLabel = ApexPages.currentPage().getParameters().get('applyErrorLabel'); if(applyMsgType == 'Fail') { ApexPages.Message vfApplyMsg = new ApexPages.Message(ApexPages.severity.ERROR, applyMsg); ApexPages.addMessage(vfApplyMsg); System.debug('applyMsg===' + applyMsg); System.debug('applyMsgType===' + applyMsgType); System.debug('applyErrorLabel===' + applyErrorLabel); if(applyErrorLabel != null) { System.debug('applyErrorLabel===' + applyErrorLabel); } } else { ApexPages.Message vfApplyMsg = new ApexPages.Message(ApexPages.severity.INFO, applyMsg); ApexPages.addMessage(vfApplyMsg); } } public List getShowDemonstrationOps() { List options = getPlickList('Consum_Apply_Equipment_Set_Detail__c', 'Show_demonstration__c'); // 显示为空白,值为'x',适用时保持原样 options.add(0, new SelectOption('x','')); return options; } public List getOperationTypeOps() { List options = getPlickList('Consum_Apply_Equipment_Set_Detail__c', 'Operation_Type__c'); // 显示为空白,值为'x',适用时保持原样 options.add(0, new SelectOption('x','')); return options; } public List getCase_OR_animal_organOpsHead() { List opList = getCase_OR_animal_organOps(); opList.add(0, new SelectOption('x','')); return opList; } public List getCase_OR_animal_organOps() { List opList = new List(); opList.add(new SelectOption('', NONE)); for (Integer i = 0; i < 20; i ++) { String value = case_OR_animal_organLabel + String.valueOf(i + 1); opList.add(new SelectOption(value, value)); } return opList; } // 保存画面上的数据 public PageReference saveRecord() { try { List rnList = [SELECT Id // , DateOfDelivery__c // , ReceivingNoteNo__c , Status__c // , Asset_loaner_category__c , RA_Status__c , demo_purpose2__c , Person_In_Charge__c FROM Consum_Apply__c WHERE Id = :parId]; if (rnList.size() == 0) { throw new ControllerUtil.myException('耗材申请书不存在,请刷新画面重试'); } if (rnList[0].Status__c == '申请中') { throw new ControllerUtil.myException('申请中的耗材申请书不能保存'); } else if (rnList[0].Status__c == '取消') { throw new ControllerUtil.myException('取消的耗材申请书不能保存'); } system.debug('耗材备品明细加密信息:'+JSON.serialize(pageB.rowBList)); List rndList = new List(); for (RowBean rowB : pageB.rowBList) { if (rowB.checked) { rowB.rnd.InputCheck__c = true; //rowB.rnd.AWS_Data_Id__c = EditAWSDataId; System.debug('zhj rowB.rnd.AWS_Data_Id__c = '+ rowB.rnd.AWS_Data_Id__c); rndList.add(rowB.rnd); } } if (rndList.size() > 0) { FixtureUtil.withoutUpdate(rndList, true); PageReference pag = new PageReference('/apex/ConsumTrial?id=' + parId + '&canedit=true&saveType=1'); pag.setRedirect(true); return null; } else{ init(); } } catch (Exception e) { ApexPages.addMessages(e); return null; } pageB.fixMode = false; return null; } public PageReference SelectRNS() { try { // List rowId = new List(); // String rdId; // String snumber; // Set selectKey = new Set(); // Set modelKey = new Set(); // Boolean haveCheck = false; // for (RowBean rowB : pageB.rowBList) { // if (rowb.checked) { // if(String.isblank(rowB.rnd.Asset__c)){ // throw new ControllerUtil.myException('存在不带保有设备的明细,不可以选择配套'); // } // // rowId.add(rowB.rnd.Consum_Apply_Equipment_Set__c); // if (selectKey.isEmpty()) { // selectKey.add(rowB.rnd.Consum_Apply_Equipment_Set__r.Select_Fixture_Set_Key__c); // modelKey.add(rowB.rnd.Fixture_Model_No_F__c); // } // if (selectKey.contains(rowB.rnd.Consum_Apply_Equipment_Set__r.Select_Fixture_Set_Key__c) == false) { // throw new ControllerUtil.myException('有不是一起选择配套的明细,不可以一起选择配套'); // } // if (modelKey.contains(rowB.rnd.Fixture_Model_No_F__c) == false) { // throw new ControllerUtil.myException('有不统一的备品配套明细型号一起选择,不可以一起选择配套'); // } // rdId = rowB.rnd.Consum_Apply_Equipment_Set__r.Consum_Apply__c; // if (String.isBlank(snumber)) { // snumber = rowB.rnd.Id; // } // haveCheck = true; // } // } // if (haveCheck == false) { // throw new ControllerUtil.myException('请选择收货清单一览明细'); // } // PageReference pg = new PageReference('/apex/ReceivingNoteSummarySelect?pt_recid=' + rdId + '&raesid=' + String.join(rowId, ',')); // return pg; } catch (Exception e) { ApexPages.addMessages(e); } return null; } /** @description 取消按钮Action OLY_OCM-768 指摘【取消】按钮的功能是关闭画面,此处为提高覆盖率而注释掉 */ //public PageReference cancelRecord() { // try { // Set rnsIdList = new Set(); // for (RowBean rowB : pageB.rowBList) { // if (rowB.checked) { // rnsIdList.add(rowB.rnd.Consum_Apply_Equipment_Set__c); // } // } // List rndList = [SELECT Id // FROM Consum_Apply_Equipment_Set_Detail__c // WHERE Asset__c = null // AND Consum_Apply_Equipment_Set__c = :rnsIdList]; // if (rndList.size() > 0) { // delete rndList; // } // else { // ApexPages.Message vfApplyMsg = new ApexPages.Message(ApexPages.severity.WARNING, '没有需要取消的收货清单配套一览'); // ApexPages.addMessage(vfApplyMsg); // } // search(); // } // catch (Exception e) { // ApexPages.addMessages(e); // } // pageB.fixMode = false; // return null; //} // 幸好提醒邮件Action public void sendEmail() { // Savepoint sp = Database.setSavepoint(); // try{ // String emailBody = System.currentPageReference().getParameters().get('emailBody'); // String emailMsg = ''; // for (RowBean rowB : pageB.rowBList) { // if (rowB.checked) { // emailMsg += rowB.rnd.Name + '
'; // } // } // if (String.isNotBlank(emailMsg)) { // pageB.rn.Model_Reminder_Email_Text__c = null; // update pageB.rn; // pageB.rn.Model_Reminder_Email_Text__c = emailBody + '

' + emailMsg; // update pageB.rn; // ApexPages.Message vfApplyMsg = new ApexPages.Message(ApexPages.severity.INFO, '已发送'); // ApexPages.addMessage(vfApplyMsg); // } // else { // throw new ControllerUtil.myException('请选择型号提醒邮件明细'); // } // } // catch (Exception e) { // Database.rollback(sp); // ApexPages.addMessages(e); // } } public class PageBean { /* ------------ 检索编辑用 ------------ */ //public Consum_Apply_Equipment_Set_Detail__c caesdInput {get{ // if (caesdInput == null) { // List caesdList = [SELECT Id // FROM Consum_Apply_Equipment_Set_Detail__c // LIMIT 1]; // caesdInput = new Consum_Apply_Equipment_Set_Detail__c(); // if (caesdList.size() > 0) { // caesdInput.Id = caesdList[0].Id; // } // } // return caesdInput; //} set;} public Consum_Apply_Equipment_Set_Detail__c caesdInput {get;set;} /* ------------ 检索用 ------------ */ public Consum_Apply__c rn {get; set;} public String fixture_Model_No {get; set;} /* ------------ 显示用 ------------ */ public String spareLocationName {get; set;} public String dateOfDelivery {get; set;} public String orderCode {get; set;} public String approvalNumber {get; set;} public String receivingNoteNo {get; set;} public String asreceivedCondition {get; set;} /* ------------ 明细一覧 ------------ */ public List rowBList {get; set;} /* ------------ 记录用 ------------ */ public Boolean fixMode {get; set;} public Integer currentPageRecordCnt {get; set;} public PageBean() { rn = new Consum_Apply__c(); rowBList = new List(); fixMode = false; currentPageRecordCnt = 0; } public PageBean(Consum_Apply__c rnObj, List assetFieldApiList, List receivingNoteFieldApiList) { rn = rnObj; asreceivedCondition = rnObj.RA_Status__c; // dateOfDelivery = rnObj.DateOfDelivery__c == null ? '' : rnObj.DateOfDelivery__c.format(); rowBList = new List(); fixMode = false; search(null, assetFieldApiList, receivingNoteFieldApiList); if (caesdInput == null) { List caesdList = [SELECT Id FROM Consum_Apply_Equipment_Set_Detail__c LIMIT 1]; caesdInput = new Consum_Apply_Equipment_Set_Detail__c(); if (caesdList.size() > 0) { caesdInput.Id = caesdList[0].Id; caesdInput.Follower_User__c = rnObj.Person_In_Charge__c; } } } public void search(String wher, List assetFieldApiList, List receivingNoteFieldApiList) { wher = String.isBlank(wher) ? '' : wher; System.debug(assetFieldApiList); String soql = 'SELECT ' + String.join(assetFieldApiList, ',') + (assetFieldApiList.size() > 0 ? ',' : '') + String.join(receivingNoteFieldApiList, ',') + ',AWS_Data_Id__c,Trial_User_Encrypt__c' + ' FROM Consum_Apply_Equipment_Set_Detail__c ' + ' WHERE Consum_Apply_Equipment_Set__r.Consum_Apply__c = \'' + rn.Id + '\'' + wher + ' AND (Cancel_Select__c = false OR NG_Select_Again__c = true)' + ' ORDER BY Consum_Apply_Equipment_Set__r.Consum_Apply__c, Consum_Apply_Equipment_Set__c, Fixture_Model_No_F__c, NG_Select_Again__c, Degree_Of_Importance__c Limit 501'; rowBList = new List(); System.debug(soql); List rndList = Database.query(soql); if (rndList.size() > 500) { ApexPages.Message vfApplyMsg = new ApexPages.Message(ApexPages.severity.WARNING, '耗材明细超过500条,只显示前500条耗材明细'); ApexPages.addMessage(vfApplyMsg); rndList.remove(500); } // Map maxDegree_Of_ImportanceMap = new Map(); // for (Consum_Apply_Equipment_Set_Detail__c rnd : rndList) { // if (maxDegree_Of_ImportanceMap.containsKey(rnd.Fixture_Model_No_F__c) == false) { // maxDegree_Of_ImportanceMap.put(rnd.Fixture_Model_No_F__c, 0); // } // maxDegree_Of_ImportanceMap.put(rnd.Fixture_Model_No_F__c, maxDegree_Of_ImportanceMap.get(rnd.Fixture_Model_No_F__c) + 1); // } Integer i = 0; Boolean isOddnumber = true; String modelNumber = ''; for (Consum_Apply_Equipment_Set_Detail__c rnd : rndList) { RowBean rb = new RowBean(rnd, i); rb.maxDegree_Of_Importance = rndList.size(); if (String.isBlank(modelNumber)) { modelNumber = rb.rnd.Fixture_Model_No_F__c; } if (modelNumber != rb.rnd.Fixture_Model_No_F__c) { modelNumber = rb.rnd.Fixture_Model_No_F__c; isOddnumber = !isOddnumber; } rb.isOddnumber = isOddnumber; rowBList.add(rb); i ++; } currentPageRecordCnt = rndList.size(); } } public class RowBean { public Boolean checked {get; set;} public Boolean canChange {get; set;} public Boolean dataConfirmation {get; set;} public String canChangeField {get; set;} public Integer lineNo {get; set;} public Boolean haveAsset {get; set;} public Integer maxDegree_Of_Importance {get; set;} public Consum_Apply_Equipment_Set_Detail__c rnd {get; set;} public Boolean isOddnumber {get; set;} // public Asset asse {get; set;} public RowBean() { checked = false; rnd = new Consum_Apply_Equipment_Set_Detail__c(); // asse = new Asset(); canChange = true; dataConfirmation = false; canChangeField = ''; } public RowBean(Consum_Apply_Equipment_Set_Detail__c rnd1, Integer lineNo1) { rnd = rnd1; // asse = rnd1.RNDAssert__r; checked = false; canChange = true; // dataConfirmation = rnd1.DataConfirmation__c; lineNo = lineNo1 + 1; canChangeField = 'Show_demonstration__c, Operation_Type__c, Consum_Start_Date__c'; canChangeField += ',AWS_Data_Id__c, Case_OR_animal_organ__c, Trial_User__c,Trial_User_Encrypt__c, Follower_User__c, Spare__c, Comment__c, Degree_Of_Importance__c'; haveAsset = String.isNotBlank(rnd1.Asset__c); } } public class LabelValue { public String label {get; set;} public String value {get; set;} public LabelValue() { label = ''; value = ''; } public LabelValue(String l, String v) { label = l; value = v; } } @TestVisible private static void test() { if (false == Test.isRunningTest()) return; 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++; } }