public without sharing class TSRepairController { // 基础Url public String baseUrl { get; private set; } // 日报ID public String repairId {get; set;} public TS_Repair__c tsr {get; set;} public String datestr; public Integer num {get; set{ num = value;}} //添加产品时使用 public String baIds {get; set{ baIds = value;}} //添加附件时使用 public Integer BusinessActivitySize {get; set;} public String serviceCategoryJSON {get; set;} public Date OriginalDate { get; set; }//修改日期查找日报时,错误还原 public List attachments { get; set; } //附件 //页面显示内容 public List RepairInfoList {get; set;} public String temp {get; set;} // Label public Integer initFailureAssetListSize; //TS日报页面故障机器初始化数量 public Integer maxFailureAssetListSize; //TS日报页面故障机器展示最大数量 public Integer initBusinessActivityListSize;//TS日报页面故业务活动初始化数量 public User use {get; set;}//用户 //public List activityInItList; public Map activityInItMap; //public Map activityInItMap1; public String fromUserFaultInfoId {get; set;} public String lineno {get; set;} public String saveSign; public Boolean errorFlag { get; set; } public Map> errorMessageMap; public Map> businessActivityListToMap; // 王鹏伟定义变量开始 // 前台点击按钮修改状态 public String status {get; set;} // 前台是否可以点击按钮 //onclickType=0时只能点击草案,申请;onclickType=1时只能点击驳回,批准 public String onclickType {get; set;} //onclickType=0时 // 王鹏伟定义变量结束 public TSRepairController() { baseUrl = URL.getSalesforceBaseUrl().toExternalForm(); String path = URL.getCurrentRequestUrl().getPath(); if (path.indexOf('/apex') > 0) { baseUrl += path.substring(0, path.indexOf('/apex')); } errorFlag = false; repairId = System.currentPageReference().getParameters().get('id'); datestr = System.currentPageReference().getParameters().get('date'); } public TSRepairController(ApexPages.StandardController stdController) { baseUrl = URL.getSalesforceBaseUrl().toExternalForm(); String path = URL.getCurrentRequestUrl().getPath(); if (path.indexOf('/apex') > 0) { baseUrl += path.substring(0, path.indexOf('/apex')); } errorFlag = false; repairId = ApexPages.currentPage().getParameters().get('Id'); datestr = System.currentPageReference().getParameters().get('date'); } public PageReference init() { errorMessageMap = new Map>(); businessActivityListToMap = new Map>(); initFailureAssetListSize = Integer.valueOf(System.label.TSRepairPageInitFailureAssetListSize); maxFailureAssetListSize = Integer.valueOf(System.label.TSRepairPageMaxFailureAssetListSize); initBusinessActivityListSize = Integer.valueOf(System.label.TSRepairPageInitBusinessActivityListSize); serviceCategoryJSON = JSON.serialize(TSRepairUtil.GetserviceCategoryMap()); activityInItMap = new Map(); temp = '0'; BusinessActivitySize = 0; RepairInfoList = new List(); // 王鹏伟 控制前台日报状态按钮 onclickType = '0'; List selectUserIdList = new List(); String userId = UserInfo.getUserId(); selectUserIdList.add(userId); use = TSRepairUtil.GetUserList(selectUserIdList)[0]; String saveflg = ApexPages.currentPage().getParameters().get('save'); if (String.isNotBlank(saveflg)) { ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Info, initPagePrompt(saveflg))); } if (repairId != null && repairId != '') { GetInfoData(repairId, null); // TS日报创建人 与 当前用户的对比 if (tsr.CreatedById != UserInfo.getUserId()) { temp = '1'; onclickType = '-1'; // TS日报的上级 与 当前用户的对比 if (tsr.TSRepairSuperior__c == UserInfo.getUserId()) { onclickType = '1'; } } if (tsr.CreatedDate != Date.today() && tsr.TSReportStatus__c != '草案中' && tsr.TSReportStatus__c != '驳回') { temp = '1'; } if (tsr.TSReportStatus__c == '确认') { onclickType = '-1'; } } else { if (String.isBlank(datestr)) { FindTSRepair(); if (String.isBlank(repairId)) { GetInfoData('', null); } else { return UnabletoEdit('2'); } } else { String dateTransform = datestr.split(' ')[0].replaceall('-', ''); Date updateDate = NFMUtil.parseStr2Date(dateTransform, false);//2020-09-26 00:00:00 GetInfoData('', updateDate); } } return null; } public String initPagePrompt(String saveflg) { String result = ''; if (saveflg == '1') { result = '服务日报保存成功'; } else if (saveflg == 'Submit') { result = '服务日报提交成功'; } else if (saveflg == 'Draft') { result = '服务日报调回成功'; } else if (saveflg == 'Approval') { result = '服务日报确认成功'; } else if (saveflg == 'Rejected') { result = '服务日报驳回成功'; } else if (saveflg == '2') { result = '服务日报刷新成功'; } return result; } public PageReference save() { errorMessageMap = new Map>(); List businessActivityList = new List(); Map userFaultInfoMap = new Map(); Map> failureAssetMap = new Map>(); List deleteBusinessActivityIdList = new List();//删除业务活动 // 业务活动信息是否正确 if (!AuthenticationInformationSave(RepairInfoList)) { return null; } Savepoint sp = Database.setSavepoint(); try { Boolean tSReportStatusIsApplyFor = false; if (String.isBlank(repairId)) { repairId = TSRepairAssembled(tsr);//TS日报保存 if (String.isBlank(repairId)) { return null; } } else { //查找TS日报的状态 List tSRepairList = TSRepairUtil.GetTsRepairList(repairId, '', null , null, null, ''); if (tSRepairList.size() > 0 ) { tSReportStatusIsApplyFor = tSRepairList[0].TSReportStatus__c == '申请中' ? true : false; } upsert tsr; repairId = tsr.Id; } if ( tSReportStatusIsApplyFor && (tsr.TSReportStatus__c == '驳回' || tsr.TSReportStatus__c == '草案中') ) { TSRepairStatus(); return null; } // 业务活动 解除与 案件的关系 RepairInfoList = BusinessActivityAndUser_FaultInfoDissociated(RepairInfoList); List selectBAIdList = new List(); for (RepairInfo info : RepairInfoList) { if (String.isNotBlank(info.ba.serviceType__c)) { info.ba.BusinessATS__c = repairId; info.ba.BusinessASegment__c = use.TSUserSegment__c; if (String.isBlank(info.ba.Id) && String.isBlank(info.ba.User_FaultInfo__c) && info.ba.firstInput__c == '是') { info.ba.AgreeReportDate__c = tsr.TSReportDate__c; } if ('申请中'.equals(tsr.TSReportStatus__c)) { info.ba.BusinessAFirstSubmission__c = Datetime.now(); } if (String.isNotBlank(info.ba.Id)) { if (info.ba.BaFromUserFaultInfo__c) { selectBAIdList.add(info.ba.Id); } } info.ba.BaFromUserFaultInfo__c = false; businessActivityList.add(info.ba); info.uf.UFLineNumber__c = info.lineNumber; info.ba.BusinessALineNumber__c = info.lineNumber; failureAssetMap.put(info.lineNumber, info.failureAssetList); } else { if (String.isNotBlank(info.ba.Id)) { deleteBusinessActivityIdList.add(info.ba.Id); } } } if (businessActivityList.size() > 0) { upsert businessActivityList; } // 删除业务活动、用户故障信息 if (deleteBusinessActivityIdList != null && deleteBusinessActivityIdList.size() > 0) { TSRepairUtil.deleteBusinessActivityInformation(deleteBusinessActivityIdList); } // 通过 搜索按钮 查找 用户/故障信息,删除业务活动下的 故障产品信息 和 附件 Start if (selectBAIdList.size() > 0) { // 查找 业务活动下的 故障产品信息 并删除 List deleteFailureAssetList = TSRepairUtil.GetFailureAssetList(null, null, selectBAIdList, null, null); if (deleteFailureAssetList.size() > 0) { delete deleteFailureAssetList; } // 查找 业务活动下的 附件 并删除 List parentIdList = new List(); List deleteAttachmentList = TSRepairUtil.GetAttachmentList(selectBAIdList); if (deleteAttachmentList.size() > 0) { delete deleteAttachmentList; } } // 通过 搜索按钮 查找 用户/故障信息,删除业务活动下的 故障产品信息 和 附件 End if (businessActivityList.size() > 0) { Map updateUserFaultInfoMap = new Map(); List updateBusinessActivityList = new List(); // upsert businessActivityList; //日报状态 确认状态 查找用户/故障信息的 服务内容(汇总)的值 List selectUfIdListPass = new List(); for ( BusinessActivity__c ba : businessActivityList) { updateUserFaultInfoMap.put(ba.Id, ba); if (ba.BusinessAHaveAttachment__c) { // 用户/故障信息下的附件克隆一份至业务活动 List selectUfIdList = new List(); selectUfIdList.add(ba.User_FaultInfo__c); TSRepairUtil.insertattachmentCloneList(selectUfIdList, ba.Id); ba.BusinessAHaveAttachment__c = false; updateBusinessActivityList.add(ba); } if ('确认'.equals(tsr.TSReportStatus__c)) { selectUfIdListPass.add(ba.User_FaultInfo__c); } } // 更新 业务活动 if (updateBusinessActivityList != null && updateBusinessActivityList.size() > 0) { upsert updateBusinessActivityList; } if ('申请中'.equals(tsr.TSReportStatus__c) || '确认'.equals(tsr.TSReportStatus__c)) { if (updateUserFaultInfoMap != null && updateUserFaultInfoMap.size() > 0) { // 用户故障信息赋值 userFaultInfoMap.putAll(UserFaultInfoAssembled(updateUserFaultInfoMap, selectUfIdListPass)); } if ('申请中'.equals(tsr.TSReportStatus__c)) { upsertFailureAssetStatus(failureAssetMap, businessActivityList); if ( userFaultInfoMap != null && userFaultInfoMap.size() > 0) { // 用户故障样机赋值 upsertFailureAsset(failureAssetMap, userFaultInfoMap); } } } else { // 更新故障产品信息的业务活动ID,更新业务活动的合计台数 upsertFailureAssetStatus(failureAssetMap, businessActivityList); } } } catch (Exception e) { ApexPages.addMessages(e); errorFlag = true; List errorMessageList = new List(); errorMessageList.add(e.getMessage()); errorMessageMap.put('TS日报异常', errorMessageList); pagemessages(errorMessageMap); Database.rollback(sp); return null; } saveSign = '1'; return UnabletoEdit('1'); } // 业务活动解除与案件的关系 public List BusinessActivityAndUser_FaultInfoDissociated(List RepairInfoList) { List deleteBaIdList = new List(); List RepairInfoListSave = new List(); for (RepairInfo info : RepairInfoList) { if (info.ba.firstInput__c == '是') { String baId = info.ba.Id; // BaFromUserFaultInfo__c为True,为 选择已有案件,又重新选择了 首次登陆案件 为 [是],不更新 业务活动 if (info.ba.BaFromUserFaultInfo__c == true) { } else { // BaFromUserFaultInfo__c为false,有 Id,检查 原来的业务活动 的首次登陆案件 的 值 if (String.isNotBlank(baId) && activityInItMap != null && activityInItMap.containsKey(baId)) { String firstInputOriginalValue = activityInItMap.get(baId); if (firstInputOriginalValue != info.ba.firstInput__c) { // 不相等 删除业务活动 deleteBaIdList.add(baId); } else { // 不做特殊处理 RepairInfoListSave.add(info); } } else { RepairInfoListSave.add(info); } } } else { RepairInfoListSave.add(info); } } // 删除业务活动 if (deleteBaIdList.size() > 0) { TSRepairUtil.deleteBusinessActivityInformation(deleteBaIdList); } return RepairInfoListSave; } // TS日报被驳回或状态由申请中变成草案中,与TS日报下业务活动关联的 用户/故障信息 进行还原或删除 public Void TSRepairStatus() { //获取业务活动关联的用户故障信息Id,取出相关联的业务活动 List ufIdList = new List(); List deleteUfIdList = new List(); for (RepairInfo info : RepairInfoList) { String ufId = info.ba.User_FaultInfo__c; if (String.isNotBlank(ufId) && info.ba.firstInput__c == '否') { ufIdList.add(ufId); } else if (String.isNotBlank(ufId) && info.ba.firstInput__c == '是') { deleteUfIdList.add(ufId); } } if (deleteUfIdList.size() > 0) { List activityList = TSRepairUtil.GetBusinessActivityList(null, deleteUfIdList , null, null, null, ''); Map> businessActivityListMap = new Map>(); if (activityList.size() > 0) { // 统计用户/故障信息 下 关联的业务活动的数量 Start for (BusinessActivity__c ba : activityList) { List baList = new List(); if (businessActivityListMap.containsKey(ba.User_FaultInfo__c)) { baList = businessActivityListMap.get(ba.User_FaultInfo__c); } baList.add(ba); businessActivityListMap.put(ba.User_FaultInfo__c, baList); } // 统计用户/故障信息 下 关联的业务活动的数量 End if (businessActivityListMap != null && businessActivityListMap.size() > 0) { List deleteUfIdList01 = new List(); List updateBAlist = new List(); for ( String ufId : businessActivityListMap.keySet()) { // 用户故障信息下只有一个 业务活动 if (businessActivityListMap.get(ufId).size() == 1) { // 将业务活动 与 用户/故障信息 相关字段的值 清空 Start BusinessActivity__c updateBA = businessActivityListMap.get(ufId)[0]; updateBA.FindManagementCode__c = null; updateBA.ManagementCode__c = null; updateBA.User_FaultInfo__c = null; updateBAlist.add(updateBA); // 将业务活动 与 用户/故障信息 相关字段的值 清空 End deleteUfIdList01.add(ufId); } else if (businessActivityListMap.get(ufId).size() > 1 ) { ufIdList.add(ufId); } } if (deleteUfIdList01.size() > 0) { // 查找用户/故障信息下的 故障产品信息 并删除 List deleteUFfailureAssetList = TSRepairUtil.GetFailureAssetList(null, deleteUfIdList01, null, null, null); if (deleteUFfailureAssetList.size() > 0) { delete deleteUFfailureAssetList; } // 查找用户/故障信息 并删除 List delletefaultInfoList = TSRepairUtil.GetfaultInfoList(deleteUfIdList01, null, null, ''); if (delletefaultInfoList.size() > 0) { delete delletefaultInfoList; } // 变更 业务活动 if (updateBAlist.size() > 0) { update updateBAlist; } } } } } Map maxSubmissionMap = new Map(); // 为 用户/故障信息的 服务内容(汇总) 字段 赋值 businessActivityListToMap = new Map>(); if (ufIdList.size() > 0) { // 查找与用户/故障信息关联的业务活动 List activityList = TSRepairUtil.GetBusinessActivityList(null, ufIdList , null, null, null, ''); if (activityList.size() > 0) { for (BusinessActivity__c ba : activityList) { if (ba.BusinessATSReportStatus__c == '申请中' || ba.BusinessATSReportStatus__c == '确认') { // 取 状态是 '申请中'/ '确认' 并且提交时间最大值的业务活动 用于 用户/故障信息的数据 还原 Start String ufId = ba.User_FaultInfo__c; if (maxSubmissionMap.containsKey(ufId)) { if (ba.BusinessAFirstSubmission__c > maxSubmissionMap.get(ufId).BusinessAFirstSubmission__c) { maxSubmissionMap.put(ufId, ba); } } else { maxSubmissionMap.put(ufId, ba); } // 取 状态是 '申请中'/ '确认' 并且提交时间最大值的业务活动 用于 用户/故障信息的数据 还原 End if (ba.BusinessATSReportStatus__c == '确认') { List baList = new List(); if (businessActivityListToMap.containsKey(ba.User_FaultInfo__c)) { baList = businessActivityListToMap.get(ba.User_FaultInfo__c); } baList.add(ba); businessActivityListToMap.put(ba.User_FaultInfo__c, baList); } } } } } if (maxSubmissionMap != null && maxSubmissionMap.size() > 0) { Map baMap = new Map(); List ufIdList01 = new List(); List baIdListGetFailureAsset = new List(); Map BaUfIdMap = new Map(); for (String ufId : maxSubmissionMap.keySet()) { BusinessActivity__c ba = maxSubmissionMap.get(ufId); ufIdList01.add(ufId); baMap.put(ba.Id, ba); baIdListGetFailureAsset.add(ba.Id); BaUfIdMap.put(ba.Id, ufId); } //删除 用户/故障信息下的 故障产品信息 Start Map> selectUFfailureAssetMap = new Map>(); selectUFfailureAssetMap = TSRepairUtil.GetUserFaultInfMap(ufIdList01, null); List deleteFailureAssetList = new List(); if (selectUFfailureAssetMap != null && selectUFfailureAssetMap.size() > 0 ) { for (String ufId : selectUFfailureAssetMap.keySet()) { for (FailureAsset__c fa : selectUFfailureAssetMap.get(ufId)) { deleteFailureAssetList.add(fa); } } if (deleteFailureAssetList.size() > 0) { delete deleteFailureAssetList; } } // 删除 用户/故障信息下的 故障产品信息 End //用户/故障信息 数据还原 Start List selectUfIdListPass = new List(); UserFaultInfoAssembled(baMap, selectUfIdListPass); //用户/故障信息 数据还原 End Map> selectBAfailureAssetMap = new Map>(); if (BaUfIdMap != null && BaUfIdMap.size() > 0 ) { selectBAfailureAssetMap = TSRepairUtil.GetUserFaultInfMap(null, baIdListGetFailureAsset); if ( selectBAfailureAssetMap != null && selectBAfailureAssetMap.size() > 0) { List baFailureAssetList = new List(); List updateUFlist = new List(); for (String baId : selectBAfailureAssetMap.keySet()) { for (FailureAsset__c fa : selectBAfailureAssetMap.get(baId)) { // 将 业务活动下的 故障产品信息 克隆一份 至 用户/故障信息下 Start FailureAsset__c cloneFa = fa.clone(); cloneFa.FAActivity__c = null; cloneFa.Id = null; cloneFa.FAUserFaultInfo__c = BaUfIdMap.get(baId); baFailureAssetList.add(cloneFa); // 将 业务活动下的 故障产品信息 克隆一份 至 用户/故障信息下 End } // 汇总 用户/故障信息 下面的 故障产品信息 中 机型/产品系列/机身号/保修状态 Start User_FaultInfo__c updateUserFaultInfo = new User_FaultInfo__c(); updateUserFaultInfo.Id = BaUfIdMap.get(baId); updateUserFaultInfo.UserFaultInfoCombinedAmount__c = selectBAfailureAssetMap.get(baId).size();//合计台数 updateUserFaultInfo = Summation(selectBAfailureAssetMap.get(baId), updateUserFaultInfo); updateUFlist.add(updateUserFaultInfo); // 汇总 用户/故障信息 下面的 故障产品信息 中 机型/产品系列/机身号/保修状态 End } if (baFailureAssetList.size() > 0) { insert baFailureAssetList; } if (updateUFlist.size() > 0) { update updateUFlist; } } } } } // 新增 TS日报 public String TSRepairAssembled(TS_Repair__c tsr) { String result = ''; if (tsr.TSReportDate__c == null) { tsr.TSReportDate__c = Date.today(); } tsr.TSReportPerson__c = UserInfo.getUserId(); tsr.TSRepairSuperior__c = use.TSUserSuperior__c ; tsr.TSRepairClass__c = use.TSUserClass__c; tsr.TSReportPerson__c = use.id; if (tsr.TSReportStatus__c != '申请中') { tsr.TSReportStatus__c = '草案中'; } tsr.TSRepairDepartment__c = use.TSUserDepartment__c; tsr.TSRepairSegment__c = use.TSUserSegment__c; List tSRepairList = TSRepairUtil.GetTsRepairList('', tsr.TSReportPerson__c, tsr.TSReportDate__c , null, null, ''); if (tSRepairList != null && tSRepairList.size() > 0) { List errorMessageList = new List(); String date01 = String.valueOf(tsr.TSReportDate__c); errorMessageList.add(date01 + '日TS日报已存在,请不要重复创建,已存在的TS日报名称:' + tSRepairList[0].Name); errorMessageMap.put('TS日报异常', errorMessageList); pagemessages(errorMessageMap); } else { upsert tsr; result = tsr.Id; } return result; } // 刷新TS日报 public PageReference UnabletoEdit(String saveSign) { String url = '/apex/TSRepair?Id='; if (String.isNotBlank(repairId)) { url += repairId; } if (String.isNotBlank(saveSign)) { url += '&save=' + saveSign; } PageReference ref = new Pagereference(url); ref.setRedirect(true); return ref; } //业务活动相关字段赋值 public String ServiceContentNewAssembled(String serviceContentNew) { String result = ''; if ( String.isNotBlank(serviceContentNew)) { // 送信者/TS日报报告人 String username = tsr.TSReportName__c; // TS日报 报告日期 Date dt = tsr.TSReportDate__c; // 服务内容 result += '****** ' + username + ' ' + dt + ' ******\n'; result += serviceContentNew; } return result; } //业务活动相关字段赋值 public String ServiceContentNewBa(BusinessActivity__c ba) { String result = ''; // if ( String.isNotBlank(serviceContentNew)) { // // 送信者/TS日报报告人 String username = ba.BusinessATSReportReporter__c; // // TS日报 报告日期 Date tSReportDate = ba.BusinessATSReportDay__c; // 服务内容 result += '****** ' + username + ' ' + tSReportDate + ' ******\n'; result += ba.BusinessAServiceContentNew__c; // } return result; } /** * [UserFaultInfoAssembled 用户/故障信息字段赋值] * @param updateUserFaultInfoMap [业务活动的基本信息] * @return [description] */ public Map UserFaultInfoAssembled(Map updateUserFaultInfoMap, List selectUfIdListPass) { Map result = new Map(); List updateUserFaultInfoList = new List(); String UserFaultInfoId = ''; Map> insertAttachmentMap = new Map>(); Map findfaultInfoMap = new Map(); if (selectUfIdListPass != null && selectUfIdListPass.size() > 0) { findfaultInfoMap = TSRepairUtil.GetfaultInfoMap(selectUfIdListPass); } for (String baId : updateUserFaultInfoMap.keySet()) { BusinessActivity__c ba = updateUserFaultInfoMap.get(baId); UserFaultInfoId = ba.User_FaultInfo__c; User_FaultInfo__c updateUserFaultInfo = new User_FaultInfo__c(); if (String.isBlank(UserFaultInfoId)) { updateUserFaultInfo.UserFaultInfoUserArea__c = use.TSUserArea__c; updateUserFaultInfo.UserFaultInfoSuperior__c = use.TSUserSuperior__c; updateUserFaultInfo.UserFaultInfoDepartment__c = use.TSUserDepartment__c; updateUserFaultInfo.UserFaultInfoEmployeeID__c = use.TSEmployeeID__c; updateUserFaultInfo.UserFaultInfoReportPerson__c = use.Id; updateUserFaultInfo.UserFaultInfoClass__c = use.TSUserClass__c; updateUserFaultInfo.UserFaultInfoSegment__c = use.TSUserSegment__c; updateUserFaultInfo.UserFaultInfoReportDate__c = tsr.TSReportDate__c; // updateUserFaultInfo.RecordTypeId = '0120T0000000zFj'; updateUserFaultInfo.RecordTypeId = System.label.Case_RecordTypeTSTSReport; } else { //将业务活动下的附件克隆至 用户/故障信息 List selectBAIdList = new List(); selectBAIdList.add(baId); TSRepairUtil.insertattachmentCloneList(selectBAIdList, UserFaultInfoId); } updateUserFaultInfo.Id = UserFaultInfoId; updateUserFaultInfo.UserFaultInfoServiceType__c = ba.serviceType__c ;//服务类型 updateUserFaultInfo.UFFaultContent__c = ba.BusinessAFaultContent__c ;//故障内容 updateUserFaultInfo.UFRepairDate__c = ba.BusinessARepairDate__c ;//报修日期 updateUserFaultInfo.UFDetermineDate__c = ba.BusinessADetermineDate__c;//判断日期 updateUserFaultInfo.UFDateRequest__c = ba.BusinessADateRequest__c ;//要求服务日期 updateUserFaultInfo.UFMessageSource__c = ba.BusinessAMessageSource__c ;//信息来源 updateUserFaultInfo.UFNatureService__c = ba.BusinessANatureService__c ;//服务性质 updateUserFaultInfo.UFWithoutReason__c = ba.BusinessAWithoutReason__c ;//无偿原因 updateUserFaultInfo.UFDateApproval__c = ba.BusinessADateApproval__c ;//同意报价日期 updateUserFaultInfo.UserFaultInfoDateQuotation__c = ba.BusinessADateQuotation__c;//报价日期 if ('确认'.equals(tsr.TSReportStatus__c)) {//服务内容(汇总) String getserviceContent = findfaultInfoMap.get(UserFaultInfoId).UserFaultInfoServiceContent__c; String serviceContent = ServiceContentNewAssembled(ba.BusinessAServiceContentNew__c); if (String.isNotBlank(getserviceContent)) { updateUserFaultInfo.UserFaultInfoServiceContent__c = getserviceContent + '\n'; updateUserFaultInfo.UserFaultInfoServiceContent__c += serviceContent; } else { updateUserFaultInfo.UserFaultInfoServiceContent__c = serviceContent; } } updateUserFaultInfo.UserFaultInfoServicePlace__c = ba.BusinessAServicePlace__c ;//服务场所 updateUserFaultInfo.UserFaultInfoBusinessTrip__c = ba.BusinessABusinessTrip__c ;//出差地 updateUserFaultInfo.UserFaultInfoCompletionDate__c = ba.BusinessACompletionDate__c ;//案件完成日 updateUserFaultInfo.UserFaultInfoNextService__c = ba.BusinessANextService__c ;//下次服务时间 updateUserFaultInfo.UFAccount__c = ba.BusinessAAccount__c ;//客户单位(查找) updateUserFaultInfo.UserFaultInfoCustomerUnit__c = ba.BusinessACustomerUnit__c ;//客户单位(文本) updateUserFaultInfo.UFContact__c = ba.BusinessAContact__c ;//联系人 updateUserFaultInfo.UFPhone__c = ba.BusinessAPhone_F__c ;//联系电话 updateUserFaultInfo.UserFaultInfoServiceCategory__c = ba.BusinessAServiceCategory__c ;//服务范畴 updateUserFaultInfo.UFLineNumber__c = ba.BusinessALineNumber__c; updateUserFaultInfo.UserFaultInfoServiceContractNo__c = ba.BusinessAServiceContractNo__c;//服务合同号 updateUserFaultInfo.UserFaultInfoServiceResult__c = ba.BusinessAServiceResult__c;//服务结果 List selectUserFaultInfoIdList = new List(); selectUserFaultInfoIdList.add(UserFaultInfoId); updateUserFaultInfoList.add(updateUserFaultInfo); // 删除 用户/故障信息下的附件 List delectUFAttachmentList = TSRepairUtil.GetAttachmentList(selectUserFaultInfoIdList); if (delectUFAttachmentList != null && delectUFAttachmentList.size() > 0) { delete delectUFAttachmentList; } } if (updateUserFaultInfoList.size() > 0 ) { upsert updateUserFaultInfoList; List ufIdList = new List(); for (User_FaultInfo__c uf : updateUserFaultInfoList) { ufIdList.add(uf.Id); } // 查找 用户故障信息 并将Name赋值给业务活动相关的值 List faultInfoList = TSRepairUtil.GetfaultInfoList(ufIdList, null, null, ''); List updateBusinessActivityList = new List(); Map updateBusinessActivityMap = new Map(); for (String baId : updateUserFaultInfoMap.keySet()) { BusinessActivity__c ba = updateUserFaultInfoMap.get(baId); for (User_FaultInfo__c uf : faultInfoList) { // if (String.isBlank(ba.FindManagementCode__c)) { if (ba.User_FaultInfo__c == uf.Id || ba.BusinessALineNumber__c == uf.UFLineNumber__c) { ba.ManagementCode__c = uf.Name; ba.FindManagementCode__c = uf.Name; ba.User_FaultInfo__c = uf.Id; updateBusinessActivityList.add(ba); //将业务活动下的附件克隆至 用户/故障信息 List selectBAIdList = new List(); selectBAIdList.add(baId); TSRepairUtil.insertattachmentCloneList(selectBAIdList, uf.Id); } // } result.put(Integer.valueOf(uf.UFLineNumber__c), uf); } } if (updateBusinessActivityList.size() > 0) { update updateBusinessActivityList; } } return result; } //日报状态是草案中或驳回状态 故障产品赋值 //更新故障产品信息的业务活动ID,更新业务活动的合计台数 public void upsertFailureAssetStatus(Map> failureAssetMap, List businessActivityList) { List upsertFailureAssetList = new List(); Map> combinedAmountMap = new Map>(); for (BusinessActivity__c ba : businessActivityList) { Integer lineNumber = Integer.valueOf(ba.BusinessALineNumber__c); List combinedAmountList = new List(); if ( failureAssetMap != null && failureAssetMap.size() > 0) { for (FailureAsset__c fa : failureAssetMap.get(lineNumber)) { if (String.isNotBlank(fa.model__c)) { if (String.isBlank(fa.Id)) { fa.FAActivity__c = ba.Id; } upsertFailureAssetList.add(fa); combinedAmountList.add(fa); } } } combinedAmountMap.put(ba.Id, combinedAmountList); } if (upsertFailureAssetList.size() > 0 ) { upsert upsertFailureAssetList; } if (combinedAmountMap != null && combinedAmountMap.size() > 0) { List updateCombinedAmount = new List(); for (String baId : combinedAmountMap.keySet()) { BusinessActivity__c updateBa = new BusinessActivity__c(); updateBa.Id = baId; updateBa.BusinessACombinedAmount__c = combinedAmountMap.get(baId).size(); updateCombinedAmount.add(updateBa); } update updateCombinedAmount; } } //保存用户/故障样机 public void upsertFailureAsset(Map> failureAssetMap, Map userFaultInfoMap) { List upsertFailureAssetList = new List(); List deleteFailureAssetList = new List(); Map updateUserFaultInfoMap = new Map(); List selectUfIdList = new List(); Map> combinedAmountMap = new Map>(); for (Integer lineNumber : failureAssetMap.keySet()) { User_FaultInfo__c updateUserFaultInfoOriginal = userFaultInfoMap.get(lineNumber); User_FaultInfo__c updateUserFaultInfo = new User_FaultInfo__c(); updateUserFaultInfo.Id = updateUserFaultInfoOriginal.Id; if (failureAssetMap.get(lineNumber).size() > 0) { selectUfIdList.add(updateUserFaultInfo.Id); } List combinedAmountList = new List(); String baId = ''; for (FailureAsset__c fa : failureAssetMap.get(lineNumber)) { if (String.isNotBlank(fa.model__c)) { // 获取业务活动ID baId = fa.FAActivity__c; // 故障样机 Start fa.FAUserFaultInfo__c = updateUserFaultInfo.Id; fa.Id = null; fa.FAActivity__c = null; upsertFailureAssetList.add(fa); // 故障样机 End combinedAmountList.add(fa); } else { // 用户故障样机的机型为空,并且样机存在Id,那么删除这个样机 if (String.isNotBlank(fa.Id)) { deleteFailureAssetList.add(fa); } } } if (String.isNotBlank(baId)) { combinedAmountMap.put(baId, combinedAmountList); } updateUserFaultInfo.UserFaultInfoCombinedAmount__c = combinedAmountList.size(); updateUserFaultInfo.UserFaultInfoApprovalDate__c = updateUserFaultInfoOriginal.UserFaultInfoApprovalDate__c; updateUserFaultInfo = Summation(failureAssetMap.get(lineNumber), updateUserFaultInfo); updateUserFaultInfoMap.put(updateUserFaultInfo.Id, updateUserFaultInfo); } if (selectUfIdList.size() > 0) { List deleteUFfailureAssetList = TSRepairUtil.GetFailureAssetList(null, selectUfIdList, null, null, null); if (deleteUFfailureAssetList.size() > 0) { delete deleteUFfailureAssetList; } } if (combinedAmountMap != null && combinedAmountMap.size() > 0) { List updateCombinedAmount = new List(); for (String baId : combinedAmountMap.keySet()) { BusinessActivity__c updateBa = new BusinessActivity__c(); updateBa.Id = baId; updateBa.BusinessACombinedAmount__c = combinedAmountMap.get(baId).size(); updateCombinedAmount.add(updateBa); } update updateCombinedAmount; } // 更新/新增 故障样机 if (upsertFailureAssetList.size() > 0) { upsert upsertFailureAssetList; } // 删除 故障样机 if (deleteFailureAssetList.size() > 0) { delete deleteFailureAssetList; } // 更新 用户/故障样机 机型/产品系列/机身号/保修状态 if (updateUserFaultInfoMap != null && updateUserFaultInfoMap.size() > 0) { upsert updateUserFaultInfoMap.values(); } } /** * [getValue description]数据拼接 * @param originalValue [原始值] * @param addValue [新增值] * @return [description] */ public String getValue(String originalValue, String addValue) { // originalValue 空 addValue 不空 数据拼接 // originalValue 空 addValue 空 // originalValue 不空 addValue 空 // originalValue 不空 addValue 不空 数据拼接 if (String.isBlank(originalValue) && String.isNotBlank(addValue)) { originalValue = addValue; } else if (String.isNotBlank(originalValue) && String.isNotBlank(addValue)) { originalValue += ';' + addValue; } return originalValue; } // 机型/产品系列/机身号/保修状态 汇总 public User_FaultInfo__c Summation(List failureAssetList, User_FaultInfo__c updateUserFaultInfo) { String userFaultInfoModel = ''; String userFaultInfoProductSeries = ''; String userFaultInfoSerialNumber = ''; String userFaultInfoWarrantyStatus = ''; for (FailureAsset__c fa : failureAssetList) { if (String.isNotBlank(fa.model__c)) { // 机型/产品系列/机身号/保修状态 汇总 Start userFaultInfoModel = getValue(userFaultInfoModel, fa.model__c); userFaultInfoProductSeries = getValue(userFaultInfoProductSeries, fa.FAProductSeries__c); userFaultInfoSerialNumber = getValue(userFaultInfoSerialNumber, fa.SerialNumber__c); userFaultInfoWarrantyStatus = getValue(userFaultInfoWarrantyStatus, fa.WarrantyStatus__c); // 机型/产品系列/机身号/保修状态 汇总 End } updateUserFaultInfo.UserFaultInfoModel__c = userFaultInfoModel;//机型 updateUserFaultInfo.UserFaultInfoProductSeries__c = userFaultInfoProductSeries;//产品系列 updateUserFaultInfo.UserFaultInfoSerialNumber__c = userFaultInfoSerialNumber;//机身号 updateUserFaultInfo.UserFaultInfoWarrantyStatus__c = userFaultInfoWarrantyStatus;//保修状态 } return updateUserFaultInfo; } // 初始化TS日报 public void GetInfoData(String repairId, Date dd) { activityInItMap = new Map(); //activityInItMap1 = new Map(); if (String.isNotBlank(repairId)) { List TSRepairs = TSRepairUtil.GetTsRepairList(repairId, '', null, null, null, ''); tsr = TSRepairs[0]; List selectRepairIdList = new List(); selectRepairIdList.add(repairId); List activityList = TSRepairUtil.GetBusinessActivityList(selectRepairIdList, null, null, null, null, ''); // 用户故障信息 Map user_FaultMap = new Map(); // 用户故障样机 Map> failureAssetMap = new Map>(); // 查找业务活动下的附件 Map> attachmentsMap = new Map>(); if (activityList.size() > 0) { //activityInItList = activityList List selectUfIdList = new List(); List selectbaIdList = new List(); for (BusinessActivity__c ba : activityList) { selectUfIdList.add(ba.User_FaultInfo__c); selectbaIdList.add(ba.Id); activityInItMap.put(ba.Id, ba.firstInput__c ); //activityInItMap1.put(ba.Id,ba.firstInput__c); } //system.debug('activityInItMap--->'+activityInItMap); user_FaultMap = TSRepairUtil.GetfaultInfoMap(selectUfIdList); failureAssetMap = TSRepairUtil.GetUserFaultInfMap(null, selectbaIdList); attachmentsMap = TSRepairUtil.GetAttachmentMap(selectbaIdList); DataAssembly(activityList, user_FaultMap, failureAssetMap, attachmentsMap); } else { additionBusinessActivity(0); } } else { //初始化 日报 tsr = new TS_Repair__c(); if (dd != null) { tsr.TSReportDate__c = dd; } else { tsr.TSReportDate__c = Date.today(); } tsr.TSReportPerson__c = UserInfo.getUserId(); tsr.TSRepairSuperior__c = use.TSUserSuperior__c ; tsr.TSRepairClass__c = use.TSUserClass__c; tsr.TSReportPerson__c = use.id; tsr.TSReportStatus__c = '草案中'; tsr.TSRepairDepartment__c = use.TSUserDepartment__c; tsr.TSRepairSegment__c = use.TSUserSegment__c; List activityList = new List(); DataAssembly(activityList, null, null, null); } } // 页面数据组装 public void DataAssembly(List activityList, Map user_FaultMap, Map> failureAssetMap, Map> attachmentsMap) { RepairInfoList = new List(); User_FaultInfo__c uf = new User_FaultInfo__c(); for (BusinessActivity__c ba : activityList) { // 页面显示 用户/故障信息 if (user_FaultMap != null && user_FaultMap.size() > 0) { if (user_FaultMap.containsKey(ba.User_FaultInfo__c)) { uf = user_FaultMap.get(ba.User_FaultInfo__c); } } // 页面显示 故障样机 List faList = new List(); if (failureAssetMap != null && failureAssetMap.size() > 0) { if (failureAssetMap.containsKey(ba.Id)) { faList = failureAssetMap.get(ba.Id); } Integer size = faList.size(); if ( size < initFailureAssetListSize) { faList = getFailureAssetList(faList, size); } } else { faList = getFailureAssetList(null, 0); } // 页面显示 附件 List attachments = new List(); if (attachmentsMap.containsKey(ba.Id)) { attachments = attachmentsMap.get(ba.Id); } RepairInfo re = new RepairInfo(tsr, ba, uf, faList, BusinessActivitySize, attachments); RepairInfoList.add(re); BusinessActivitySize++; } Integer index = activityList.size(); additionBusinessActivity(index); } //添加业务活动 public void addBusinessActivity () { // 用户/故障信息 初始化赋值 User_FaultInfo__c uf = new User_FaultInfo__c(); uf.UserFaultInfoUserArea__c = use.TSUserArea__c; uf.UserFaultInfoSuperior__c = use.TSUserSuperior__c; uf.UserFaultInfoDepartment__c = use.TSUserDepartment__c; uf.UserFaultInfoEmployeeID__c = use.TSEmployeeID__c; uf.UserFaultInfoReportPerson__c = use.Id; uf.UserFaultInfoClass__c = use.TSUserClass__c; uf.UserFaultInfoSegment__c = use.TSUserSegment__c; uf.UserFaultInfoReportDate__c = Date.today(); List selectUfIdList = new List(); selectUfIdList.add(uf.Id); List uflist = TSRepairUtil.GetfaultInfoList(selectUfIdList, null, null, ''); //初始化业务活动 BusinessActivity__c ba = new BusinessActivity__c(); ba.StartTimeHour__c = '0'; ba.StartTimeMinute__c = '00'; ba.EndTimeHour__c = '0'; ba.EndTimeMinute__c = '00'; ba.workingHours__c = 0.00; ba.firstInput__c = '是'; ba.BusinessAFirstSubmission__c = null; List faList = getFailureAssetList(null, 0); List attachments = new List(); RepairInfo re = new RepairInfo(tsr, ba, uf, faList, BusinessActivitySize, attachments); BusinessActivitySize++; RepairInfoList.add(re); } //添加产品 public void addFailureAsset() { for (RepairInfo ri : RepairInfoList) { if (ri.lineNumber == num) { if (ri.failureAssetList.size() < maxFailureAssetListSize) { FailureAsset__c fa = new FailureAsset__c(); ri.failureAssetList.add(fa); if (ri.failureAssetList.size() == maxFailureAssetListSize) { ri.disabled = true; } } } } } // 服务范畴 赋值 public void updateServiceCategory() { for (RepairInfo ri : RepairInfoList) { if (ri.lineNumber == num) { Map serviceCategoryMap = TSRepairUtil.GetserviceCategoryMap(); String serviceType = serviceCategoryMap.get(ri.ba.serviceType__c); ri.ba.BusinessAServiceCategory__c = serviceType; } } } // TS日报页面初始化 显示 业务活动 数量 public void additionBusinessActivity(Integer index) { for (Integer i = index ; i < initBusinessActivityListSize; i++) { addBusinessActivity(); } } // TS日报页面初始化 显示 故障样机 数量 public List getFailureAssetList(List faList, Integer index) { List result = new List(); if (faList != null && faList.size() > 0) { result = faList; } for (Integer i = index ; i < initFailureAssetListSize; i++) { FailureAsset__c fa = new FailureAsset__c(); result.add(fa); } return result; } //TS日报页面,修改日期查找对应日期的TS日报 public PageReference checkReportDate() { Date tsDate = tsr.TSReportDate__c; if (tsDate == null) { ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '报告日期为空请确认')); tsr.TSReportDate__c = OriginalDate; return null; } String userId = UserInfo.getUserId(); List TSRepairs = TSRepairUtil.GetTsRepairList('', userId, tsDate, null, null, ''); if (TSRepairs != null && TSRepairs.size() > 0) { repairId = TSRepairs[0].Id; return UnabletoEdit('2'); } else { return SkipNewTSRepairPage(tsDate); } } // 跳转至新页面 public PageReference SkipNewTSRepairPage(Date newDate) { PageReference ref = new Pagereference('/apex/TSRepair?date=' + newDate); ref.setRedirect(true); return ref; } //跳转到上传附件页面 public PageReference uploadingAttachment() { save(); if (errorMessageMap != null && errorMessageMap.size() > 0) { return null; } String pid = getParentId(); if (String.isBlank(pid)) { return null; } PageReference ref = new Pagereference('/p/attach/NoteAttach?pid=' + pid + '&retURL=%2Fapex/TSRepair?id=' + repairId); ref.setRedirect(true); return ref; } // 获取附件的父Id public String getParentId() { String result = ''; if (String.isNotBlank(baIds.split('/')[0])) { result = baIds.split('/')[0]; } else { Integer lineNumber = Integer.ValueOf(baIds.split('/')[1]); // 根据TS日报查找业务活动 List selectRepairIdList = new List(); selectRepairIdList.add(repairId); List activityList = TSRepairUtil.GetBusinessActivityList(selectRepairIdList, null, null, null, null, ''); if (activityList.size() > 0) { for (BusinessActivity__c ba : activityList) { if (ba.BusinessALineNumber__c == lineNumber) { result = ba.Id; } } } if (String.isBlank(result)) { List errorMessageList = new List(); errorMessageList.add('附件上传失败,服务类型为空,请确认'); errorMessageMap.put(baIds.split('/')[1], errorMessageList); pagemessages(errorMessageMap); } } return result; } // 查找当天的TS日报 public void FindTSRepair() { Date tSReportDate = Date.today(); String ownId = UserInfo.getUserId(); List tsRepairList = TSRepairUtil.GetTsRepairList('', ownId, tSReportDate, null, null, ''); if (tsRepairList.size() > 0) { repairId = tsRepairList[0].Id; } } // 王鹏伟 前台点击按钮修改状态 public PageReference setStatus() { if (status != null && status != '') { if (approvalOfValidationPass(status, RepairInfoList)) { tsr.TSReportStatus__c = status; save(); } if (errorMessageMap != null && errorMessageMap.size() > 0) { if ('申请中'.equals(status)) { status = '草案中'; } pagemessages(errorMessageMap); return null; } } String statusSign = '1'; if ('申请中'.equals(status)) { statusSign = 'Submit'; } else if ('草案中'.equals(status)) { statusSign = 'Draft'; } else if ('确认'.equals(status)) { statusSign = 'Approval'; } else if ('驳回'.equals(status)) { statusSign = 'Rejected'; } return UnabletoEdit(statusSign); } public Boolean approvalOfValidationPass(String status, List RepairInfoList) { errorMessageMap = new Map>(); errorFlag = false; List errorMessageList = new List(); List TSRepairs = TSRepairUtil.GetTsRepairList(repairId, '', null, null, null, ''); for (RepairInfo info : RepairInfoList) { String code = info.ba.FindManagementCode__c; if ('确认'.equals(status)) { // 验证是否符合批准规则 Boolean haveRead = info.ba.BusinessAApprovalOpinion__c != '同意';//审批意见 不是 同意 if (String.isNotBlank(info.ba.Id) && haveRead) { errorFlag = true; String errorMessage = '业务活动 管理编码 [ ' + code + ' ] 审批意见不是同意不能审批' ; errorMessageList.add(errorMessage); continue; } // 判断业务活动的 案件完成日 来修改 用户故障信息的 批准日 BusinessACompletionDate__c if (info.ba.BusinessACompletionDate__c != null ) { info.uf.UserFaultInfoApprovalDate__c = Date.today(); } // 设置日报批准日 tsr.TSApprovalDate__c = Date.today(); } else if ('申请中'.equals(status)) { } } if ('确认'.equals(status)) { //判断TS日报最后修改日期是否一致 if (tsr.LastModifiedDate != TSRepairs[0].LastModifiedDate) { errorFlag = true; String errorMessage = '日报已被提交人更新,请刷新后再确认'; errorMessageList.add(errorMessage); } } else if ('申请中'.equals(status)) { if (!AuthenticationInformation(RepairInfoList)) { errorFlag = true; } if (tsr.TSRepairFirstSubmission__c == null) { tsr.TSRepairFirstSubmission__c = Datetime.now(); } } else if ('驳回'.equals(status)) { //判断TS日报最后修改日期是否一致 if (tsr.LastModifiedDate != TSRepairs[0].LastModifiedDate) { errorFlag = true; String errorMessage = '日报已被提交人更新,请刷新后再确认信息'; errorMessageList.add(errorMessage); } if (String.isBlank(tsr.TSRepairDismissReason__c)) { errorFlag = true; String errorMessage = '驳回理由不能为空,请确认'; errorMessageList.add(errorMessage); } } if (errorMessageList.size() > 0) { errorMessageMap.put('TS日报异常', errorMessageList); } if (errorFlag && errorMessageMap != null && errorMessageMap.size() > 0) { pagemessages(errorMessageMap); return false; } return true; } // 获取时间戳 public Long GetTimestamp(String timenow, Integer hour, Integer minute, Date tsReportDate) { Long result = null; if (String.isNotBlank(timenow)) { List timeList = timenow.split('-'); Integer year = Integer.valueOf(timeList[0]); Integer month = Integer.valueOf(timeList[1]); Integer day = Integer.valueOf(timeList[2]); Integer timehour = Integer.valueOf(timeList[3]); Integer timeminute = Integer.valueOf(timeList[4]); result = Datetime.newInstanceGmt(year, month, day, timehour, timeminute, 0).getTime(); } else { Integer year = tsReportDate.year(); Integer month = tsReportDate.month(); Integer day = tsReportDate.day(); result = Datetime.newInstanceGmt(year, month, day, hour, minute, 0).getTime(); } return result; } public void initBusinessActivity() { if (String.isNotBlank(fromUserFaultInfoId)) { List ufIdList = new List(); ufIdList.add(fromUserFaultInfoId); List faultInfoList = TSRepairUtil.GetfaultInfoList(ufIdList, null, null, ''); BusinessActivity__c ba = TSRepairUtil.BusinessActivityAssembled(faultInfoList); // 查询附件 List attachmentList = TSRepairUtil.GetAttachmentCloneList(ufIdList); // 查询 用户故障样机 List failureAssetList = TSRepairUtil.GetFailureAssetList(null, ufIdList, null, null, null); List baFailureAssetList = new List(); if (failureAssetList.size() > 0) { for (FailureAsset__c fa : failureAssetList) { FailureAsset__c cloneFa = fa.clone(); cloneFa.FAActivity__c = null; cloneFa.Id = null; cloneFa.FAUserFaultInfo__c = null; baFailureAssetList.add(cloneFa); } } if (baFailureAssetList.size() < 3) { baFailureAssetList = getFailureAssetList(baFailureAssetList, baFailureAssetList.size()); } for (RepairInfo repairInfo : RepairInfoList) { Integer linenoInteger = Integer.valueof(lineno); if (repairInfo.lineNumber == linenoInteger) { String baId = null; if (String.isNotBlank(repairInfo.ba.Id)) { baId = repairInfo.ba.Id; } repairInfo.ba = ba; repairInfo.ba.Id = baId; repairInfo.attachmentLsit = attachmentList; repairInfo.failureAssetList = baFailureAssetList; } } } } // 异常信息提示 public void pagemessages(Map> errorMessageMap) { for (String key : errorMessageMap.keySet()) { String title = ''; if ('TS日报异常'.equals(key)) { title = 'TS日报异常信息如下:'; } else { title = '业务活动 [ ' + key + ' ] 异常信息如下:' ; } ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, title)); for (String errorMessage : errorMessageMap.get(key)) { String body = '业务活动 [ ' + key + ' ], ' + errorMessage + ''; if ('TS日报异常'.equals(key)) { body = errorMessage; } ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, body)); } } } //正常保存时 验证 字段有值 是否满足条件 public Boolean AuthenticationInformationSave(List RepairInfoList) { errorFlag = false; for (RepairInfo info : RepairInfoList) { List errorMessageList = new List(); String key = PromptMessage(info.ba, info.lineNumber); if (String.isNotBlank(info.ba.serviceType__c)) { if (String.isBlank(key)) { continue; } // 案件完成日 if (info.ba.BusinessACompletionDate__c != null) { if (info.ba.BusinessACompletionDate__c != tsr.TSReportDate__c) { errorFlag = true; String errorMessage = '案件完成日只能是报告日期,请确认\n'; errorMessageList.add(errorMessage); } } if ('否'.equals(info.ba.firstInput__c) && String.isBlank(info.ba.User_FaultInfo__c)) { errorFlag = true; String errorMessage = '请检索有效的管理编码\n'; errorMessageList.add(errorMessage); } Boolean ServiceCategoryIsRepair = info.ba.BusinessAServiceCategory__c == 'Repair'; // 服务范畴 为 Repair 必填验证 if (ServiceCategoryIsRepair) { String accountId = info.ba.BusinessAAccount__c; if (String.isBlank(accountId)) { //1> 客户单位 Id 为空 报错 errorFlag = true; String errorMessage = '客户单位 名称 为空,请确认\n'; errorMessageList.add(errorMessage); } // 4> 根据联系人Id 确认该联系人是否是 客户单位下的联系人 String contactId = info.ba.BusinessAContact__c; if (String.isNotBlank(contactId)) { List contactList = TSRepairUtil.GetContactList(contactId, null, null, ''); if (contactList.size() <= 0) { String errorMessage = '联系人 无效 请确认\n'; errorFlag = true; errorMessageList.add(errorMessage); } else { // 查找联系人 获取 联系人的客户 与客户单位进行比对 String contactAccountId = contactList[0].AccountId__c; if (String.isNotBlank(accountId)) { accountId = accountId.substring(0, 15); String contactName = contactList[0].Name; if (!accountId.equals(contactAccountId)) { String errorMessage = '联系人 [ ' + contactName + ' ] 不是客户下的联系人 请确认\n'; errorFlag = true; errorMessageList.add(errorMessage); } } else { String errorMessage = '客户单位为空 联系人无法验证是否有效 请确认\n'; errorFlag = true; errorMessageList.add(errorMessage); } } } // 判断日期 if (info.ba.BusinessADetermineDate__c != null && info.ba.BusinessARepairDate__c != null) { if (info.ba.BusinessARepairDate__c > info.ba.BusinessADetermineDate__c) { // 报错 String errorMessage = '判断日期小于报修日期,请确认'; errorMessageList.add(errorMessage); } } // 要求服务日期 if (info.ba.BusinessADateRequest__c != null && info.ba.BusinessARepairDate__c != null) { if (info.ba.BusinessARepairDate__c > info.ba.BusinessADateRequest__c) { // 报错 String errorMessage = '要求服务日期小于报修日期,请确认'; errorMessageList.add(errorMessage); } } if (info.ba.BusinessANatureService__c == '有偿') { if (info.ba.BusinessADateApproval__c > tsr.TSReportDate__c) { String errorMessage = '同意报价日期 不能大于报告日期,请确认'; errorMessageList.add(errorMessage); } if (info.ba.BusinessADateQuotation__c != null && info.ba.BusinessARepairDate__c != null) { if (info.ba.BusinessADateQuotation__c < info.ba.BusinessARepairDate__c) { String errorMessage = '报价日期 不能早于报修日期,请确认'; errorMessageList.add(errorMessage); } } } } } else { //if (String.isNotBlank(info.ba.Id) && tsr.TSRepairFirstSubmission__c != null) { // String errorMessage = '已申请过的业务活动,不可删除'; // errorMessageList.add(errorMessage); //} } if ( errorMessageList.size() > 0) { errorFlag = true; errorMessageMap.put(key, errorMessageList); } } if (errorFlag) { pagemessages(errorMessageMap); return false; } return true; } // TS日报申请时验证活动信息 public Boolean AuthenticationInformation(List RepairInfoList) { errorFlag = false; Integer serviceTypeQuantity = 0; for (RepairInfo info : RepairInfoList) { if (String.isNotBlank(info.ba.serviceType__c)) { serviceTypeQuantity = 1; String key = PromptMessage(info.ba, info.lineNumber); List errorMessageList = new List(); if (String.isBlank(key)) { continue; } Boolean isNotZero = info.ba.BusinessACombinedAmount__c != null && info.ba.BusinessACombinedAmount__c != 0 ; //合计台数 不为 0 String code = info.ba.FindManagementCode__c; //若用户在添加完用户故障样机 直接点击 申请中 Boolean needVerification = false; for (FailureAsset__c fa : info.failureAssetList) { //1>若 故障样机 的 机型不为空 我们就要验证 if (!needVerification) { if (String.isNotBlank(fa.model__c)) { needVerification = true; } } } if (String.isBlank(info.ba.BusinessAServiceCategory__c)) { String errorMessage = '服务范畴 不能为空,请确认\n'; errorMessageList.add(errorMessage); } if ('否'.equals(info.ba.firstInput__c) && String.isBlank(info.ba.User_FaultInfo__c)) { errorFlag = true; String errorMessage = '请检索有效的管理编码\n'; errorMessageList.add(errorMessage); } // 获取当前时间的时间戳 String timenow = Datetime.now().format('yyyy-MM-dd-HH-mm-ss'); Long timestampNow = GetTimestamp(timenow, null, null, null); if (info.ba.workingHours__c == null || info.ba.workingHours__c <= 0) { errorFlag = true; String errorMessage = '业务活动 工作时间填写错误,请确认\n'; errorMessageList.add(errorMessage); } else { Integer baEndHour = Integer.valueOf(info.ba.EndTimeHour__c); Integer baEndMinute = Integer.valueOf(info.ba.EndTimeMinute__c); // 获取报告日期 Date reportDate = tsr.TSReportDate__c ; Long timestamp = GetTimestamp('', baEndHour, baEndMinute, reportDate); if (timestampNow < timestamp) { errorFlag = true; String errorMessage = '请在今天最终事件结束之后再提交日报'; errorMessageList.add(errorMessage); } } // 案件完成日 if (info.ba.BusinessACompletionDate__c != null) { if (info.ba.BusinessACompletionDate__c != tsr.TSReportDate__c) { errorFlag = true; String errorMessage = '案件完成日只能是报告日期,请确认\n'; errorMessageList.add(errorMessage); } } if (info.ba.workingHours__c == null || info.ba.workingHours__c <= 0) { errorFlag = true; String errorMessage = '工作时间填写错误,请确认\n'; errorMessageList.add(errorMessage); } if (String.isBlank(info.ba.firstInput__c)) { errorFlag = true; String errorMessage = '首次登录案件 为空,请确认\n'; errorMessageList.add(errorMessage); } if (String.isBlank(info.ba.BusinessAServiceContentNew__c)) { errorFlag = true; String errorMessage = '服务内容 为空,请确认\n'; errorMessageList.add(errorMessage); } Boolean ServiceCategoryIsRepair = info.ba.BusinessAServiceCategory__c == 'Repair'; Boolean ServiceCategoryIsSevice = info.ba.BusinessAServiceCategory__c == 'Sevice'; // 服务范畴 为 Repair 必填验证 if (ServiceCategoryIsRepair) { String accountId = info.ba.BusinessAAccount__c; if (String.isBlank(accountId)) { // 1> 客户单位 名称 为空 报错 // 2> 客户单位 Id 为空 报错 errorFlag = true; String errorMessage = '客户单位 名称 为空,请确认\n'; errorMessageList.add(errorMessage); } // 4> 根据联系人Id 确认该联系人是否是 客户单位下的联系人 String contactId = info.ba.BusinessAContact__c; if (String.isNotBlank(contactId)) { List contactList = TSRepairUtil.GetContactList(contactId, null, null, ''); if (contactList.size() <= 0) { String errorMessage = '联系人 无效 请确认\n'; errorFlag = true; errorMessageList.add(errorMessage); } else { // 查找联系人 获取 联系人的客户 与客户单位进行比对 String contactAccountId = contactList[0].AccountId__c; if (String.isNotBlank(accountId)) { accountId = accountId.substring(0, 15); String contactName = contactList[0].Name; if (!accountId.equals(contactAccountId)) { String errorMessage = '联系人 [ ' + contactName + ' ] 不是客户下的联系人 请确认'; errorFlag = true; errorMessageList.add(errorMessage); } } else { String errorMessage = '客户单位为空 联系人无法验证是否有效 请确认'; errorFlag = true; errorMessageList.add(errorMessage); } } } else { String errorMessage = '联系人为空 请确认'; errorFlag = true; errorMessageList.add(errorMessage); } // 验证故障样机 必填字段 if (info.failureAssetList.size() > 0 ) { for (FailureAsset__c fa : info.failureAssetList) { // 机型 if (String.isNotBlank(fa.model__c)) { // 产品系列 if (String.isBlank(fa.FAProductSeries__c)) { errorFlag = true; String errorMessage = '机型 [ ' + fa.model__c + ' ] 产品系列为空,请确认'; errorMessageList.add(errorMessage); } // 保修状态 if (String.isBlank(fa.WarrantyStatus__c) ) { errorFlag = true; String errorMessage = '机型 [ ' + fa.model__c + ' ] 保修状态为空,请确认'; errorMessageList.add(errorMessage); } } } } else { // 错误提醒 String errorMessage = '未填写故障机器,请确认'; errorMessageList.add(errorMessage); } // 故障内容 if ( String.isBlank(info.ba.BusinessAFaultContent__c)) { errorFlag = true; String errorMessage = '故障内容为空 请确认'; errorMessageList.add(errorMessage); } // 报修日期 if (info.ba.BusinessARepairDate__c == null) { // 报错 String errorMessage = '报修日期为空,请确认'; errorMessageList.add(errorMessage); } // 判断日期 if (info.ba.BusinessADetermineDate__c == null) { // 报错 String errorMessage = '判断日期为空,请确认'; errorMessageList.add(errorMessage); } else { if (info.ba.BusinessARepairDate__c > info.ba.BusinessADetermineDate__c) { // 报错 String errorMessage = '判断日期小于报修日期,请确认'; errorMessageList.add(errorMessage); } } // 要求服务日期 if (info.ba.BusinessADateRequest__c == null) { String errorMessage = '要求服务日期为空,请确认'; errorMessageList.add(errorMessage); } else { if (info.ba.BusinessARepairDate__c > info.ba.BusinessADateRequest__c) { // 报错 String errorMessage = '要求服务日期小于报修日期,请确认'; errorMessageList.add(errorMessage); } } // 信息来源 if (String.isBlank(info.ba.BusinessAMessageSource__c)) { // 报错 String errorMessage = '信息来源为空,请确认'; errorMessageList.add(errorMessage); } // 服务性质 if (String.isBlank(info.ba.BusinessANatureService__c)) { // 报错 String errorMessage = '服务性质为空,请确认'; errorMessageList.add(errorMessage); } else { // 无偿原因 if (info.ba.BusinessANatureService__c == '无偿' && String.isBlank(info.ba.BusinessAWithoutReason__c)) { // 报错 String errorMessage = '无偿原因为空,请确认'; errorMessageList.add(errorMessage); } else if (info.ba.BusinessANatureService__c == '有偿' && info.ba.BusinessADateApproval__c == null && info.ba.BusinessACompletionDate__c != null) {// 服务范畴为Repair,[服务性质]="有偿",案件完成日不为空的情况下 // 报错 String errorMessage = '同意报价日期为空,请确认'; errorMessageList.add(errorMessage); } else if (info.ba.BusinessANatureService__c == '有偿' ) { // 同意报价日期 if ( info.ba.BusinessADateApproval__c > tsr.TSReportDate__c) { String errorMessage = '同意报价日期 不能大于报告日期,请确认'; errorMessageList.add(errorMessage); } if (info.ba.BusinessADateQuotation__c == null ) { String errorMessage = '报价日期 不能为空,请确认'; errorMessageList.add(errorMessage); } else { // 报价日期 if (info.ba.BusinessADateQuotation__c < info.ba.BusinessARepairDate__c) { String errorMessage = '报价日期 不能早于报修日期,请确认'; errorMessageList.add(errorMessage); } } } } // 服务场所 if (String.isBlank(info.ba.BusinessAServicePlace__c)) { errorFlag = true; String errorMessage = '服务场所 为空,请确认'; errorMessageList.add(errorMessage); } } if (ServiceCategoryIsRepair || ServiceCategoryIsSevice) { Boolean cmpletionDateIsNotNull = info.ba.BusinessACompletionDate__c != null;//案件完成日 // 服务结果 if (cmpletionDateIsNotNull && String.isBlank(info.ba.BusinessAServiceResult__c)) { errorFlag = true; String errorMessage = '服务结果 为空,请确认'; errorMessageList.add(errorMessage); } } if ( errorMessageList.size() > 0) { errorFlag = true; errorMessageMap.put(key, errorMessageList); } } } if (serviceTypeQuantity == 0) { errorFlag = true; String errorMessage = '所有业务活动的服务类型都为空,提交失败,请确认'; List errorMessageList = new List(); errorMessageList.add(errorMessage); errorMessageMap.put('TS日报异常', errorMessageList); } if (errorFlag) { pagemessages(errorMessageMap); return false; } return true; } // 提示信息标记 public String PromptMessage(BusinessActivity__c ba, Integer lineNumber) { String result = ''; // 业务活动管理编码 String code = ba.FindManagementCode__c; // 业务活动Id String baId = ba.Id; if (String.isNotBlank(baId)) { if (String.isNotBlank(code)) { result = code; } else { result = String.valueOf(lineNumber + 1) ; } } else { result = String.valueOf(lineNumber + 1); } return result; } public class RepairInfo { public BusinessActivity__c ba {get; set;} //业务活动 public User_FaultInfo__c uf {get; set;} //用户故障信息 public List failureAssetList {get; set;} //故障样机 public List attachmentLsit {get; set;}//附件信息 public String baServiceType {get; set;} //服务类型 public Integer lineNumber {get; set;} public String BusinessActivityId {get; set;} //业务活动Id public Boolean disabled {get; set;}//添加产品 按钮 禁用 public Boolean firstSubmission {get; private set;} public Boolean approvalOpinionDisabled {get; set;} //审批意见/意见 不可修改 public String firstinputOriginalValue {get; set;} // 首次登陆案件 public RepairInfo (TS_Repair__c tsr, BusinessActivity__c ba_in , User_FaultInfo__c uf_in , List faList , Integer num_in, List attachments) { ba = ba_in; baServiceType = ba.serviceType__c; firstinputOriginalValue = ba.firstInput__c; BusinessActivityId = ba.Id; uf = uf_in; failureAssetList = faList; attachmentLsit = attachments; lineNumber = num_in; firstSubmission = false; String firstSubmissionStr = String.valueOf(ba.BusinessAFirstSubmission__c); if (String.isNotBlank(firstSubmissionStr)) { firstSubmission = true; } Integer maxFailureAssetListSize = Integer.valueOf(System.label.TSRepairPageMaxFailureAssetListSize); if (faList == null || faList.size() < maxFailureAssetListSize) { disabled = false; } else { disabled = true; } //用户不是TS日报创建人的上级,审批意见、意见 不可修改 if (tsr.TSRepairSuperior__c != UserInfo.getUserId()) { approvalOpinionDisabled = true; } } } }