global without sharing class TransferApplyWebService { public TransferApplyWebService() { } WebService static String submitApply(String taId) { List taList = [ SELECT Id , Status__c , Add_Approval_Status__c , RecordType.DeveloperName //20201202 ljh add , BeiPinWindow__c //20201202 ljh add , Add_Reason__c // 20210429 1831 you FROM TransferApply__c WHERE Id = :taId FOR UPDATE ]; if (taList.isEmpty()) { return '调拨单不存在。'; } TransferApply__c ta = taList[0]; if(ta.Status__c != '草案中' && ta.Add_Approval_Status__c != '草案中'){ return '请确认调拨单状态,没有待审批的明细,不能提交'; } List errorList = checkTransferCount(ta.Id); if(!errorList.isEmpty()) { return String.join(errorList, '\n'); } if(ta.Status__c == '草案中') { ta.Status__c = '填写完毕'; } else { // 20210429 1831 you start if(ta.Add_Approval_Status__c == '草案中' && String.isBlank(ta.Add_Reason__c) ){ return '没有填写追加理由,不能提交'; }else {// 20210429 1831 you end ta.Add_Approval_Status__c = '填写完毕'; } } //20201202 ljh OCSM_BP5-76 add start if(ta.RecordType.DeveloperName == 'AgencyToCenter' && ta.BeiPinWindow__c == null){ return '请确认审批人,没有审批人(备品总窗口),不能提交'; } //20201202 ljh OCSM_BP5-76 add end Savepoint sp = Database.setSavepoint(); try { update ta; } catch (Exception e) { Database.rollback(sp); return e.getMessage(); } return '1'; } public static List checkTransferCount(Id taId) { List tadList = [ SELECT Id , Asset__r.Ji_Zhong_Guan_Li_Ku_Cun__c , Asset__r.TransferableAbandon_F__c , Asset__r.TransferableRepair_F__c , Asset__r.TransferableLost_F__c , Asset__r.Name , Asset__c , Approved_F__c , TransferType__c , OneToOneAccessory__c FROM TransferApplyDetail__c WHERE TransferApply__c=:taId AND Cancel_Select__c = false ]; Map assCountMap = new Map(); // assetId->有效库存 Map assetAbanCntMap = new Map(); // 非一对一附属品待废弃数统计,保有设备Id->待废弃调拨数量 Map assetRepairCntMap = new Map(); // 非一对一附属品待废弃数统计,保有设备Id->待废弃调拨数量 Map assetLostCntMap = new Map(); // 非一对一附属品待废弃数统计,保有设备Id->待废弃调拨数量 Boolean needApprove = false; for(TransferApplyDetail__c tad: tadList) { if(!tad.Approved_F__c && !tad.OneToOneAccessory__c) { Integer cnt = 0; if(tad.TransferType__c == '待废弃') { if(assetAbanCntMap.containsKey(tad.Asset__c)){ cnt = assetAbanCntMap.get(tad.Asset__c); } cnt += 1; assetAbanCntMap.put(tad.Asset__c, cnt); } else if(tad.TransferType__c == '待修理'){ if(assetRepairCntMap.containsKey(tad.Asset__c)){ cnt = assetRepairCntMap.get(tad.Asset__c); } cnt += 1; assetRepairCntMap.put(tad.Asset__c, cnt); } else if(tad.TransferType__c == '丢失找回'){ if(assetLostCntMap.containsKey(tad.Asset__c)){ cnt = assetLostCntMap.get(tad.Asset__c); } cnt += 1; assetLostCntMap.put(tad.Asset__c, cnt); } else { if(assCountMap.containsKey(tad.Asset__c)) { cnt = assCountMap.get(tad.Asset__c); } cnt += 1; assCountMap.put(tad.Asset__c, cnt); } if(!tad.Approved_F__c) { needApprove = true; } } } Set errorList = new Set(); if(!needApprove) { errorList.add('没有需要审批的明细!'); } for(TransferApplyDetail__c tad: tadList) { if(assCountMap.containsKey(tad.Asset__c) && assCountMap.get(tad.Asset__c) > intValueOf(tad.Asset__r.Ji_Zhong_Guan_Li_Ku_Cun__c)) { String msg = tad.Asset__r.Name; msg += ':有效库存=' + intValueOf(tad.Asset__r.Ji_Zhong_Guan_Li_Ku_Cun__c); msg += ',调拨数量=' + assCountMap.get(tad.Asset__c) ; msg += ',请确认数量后提交'; errorList.add(msg); } if(assetRepairCntMap.containsKey(tad.Asset__c) && assetRepairCntMap.get(tad.Asset__c) > intValueOf(tad.Asset__r.TransferableRepair_F__c)) { String msg = tad.Asset__r.Name; msg += ':可调拨数_待修理=' + intValueOf(tad.Asset__r.TransferableRepair_F__c); msg += ',待修理调拨数量=' + assetRepairCntMap.get(tad.Asset__c) ; msg += ',请确认数量后提交'; errorList.add(msg); } if(assetAbanCntMap.containsKey(tad.Asset__c) && assetAbanCntMap.get(tad.Asset__c) > intValueOf(tad.Asset__r.TransferableAbandon_F__c)) { String msg = tad.Asset__r.Name; msg += ':可调拨数_待废弃=' + intValueOf(tad.Asset__r.TransferableAbandon_F__c); msg += ',待废弃调拨数量=' + assetAbanCntMap.get(tad.Asset__c); msg += ',请确认数量后提交'; errorList.add(msg); } if(assetLostCntMap.containsKey(tad.Asset__c) && assetLostCntMap.get(tad.Asset__c) > intValueOf(tad.Asset__r.TransferableLost_F__c)) { String msg = tad.Asset__r.Name; msg += ':可调拨数_丢失找回=' + intValueOf(tad.Asset__r.TransferableLost_F__c); msg += ',待废弃调拨数量=' + assetLostCntMap.get(tad.Asset__c); msg += ',请确认数量后提交'; errorList.add(msg); } } return new List(errorList); } WebService static String cancelApply(Id taId) { List taList = [ SELECT Id , Add_Approval_Status__c , Cancel_Reason__c , OwnerId , Status__c , TA_Status__c , Yi_loaner_arranged__c , RecordType.DeveloperName , Request_approval_time__c FROM TransferApply__c WHERE Id = :taId FOR UPDATE ]; if (taList.isEmpty()) { return '调拨单不存在。'; } TransferApply__c ta = taList[0]; if(ta.Status__c == '取消') { return '已经取消,不能再次取消'; } if(ta.Status__c == '申请中' || ta.Add_Approval_Status__c == '申请中'){ return '申请中不能取消'; } if(ta.RecordType.DeveloperName == 'InsideCenter' && ta.Request_approval_time__c != null) { return '同备品中心内调拨在最终批准之后不可以取消'; } if(ta.TA_Status__c == '已出库' || ta.Yi_loaner_arranged__c > 0) { return '已经出库,不能取消'; } if(UserInfo.getUserId() != ta.OwnerId) { return '仅创建者可以取消'; } if(String.isBlank(ta.Cancel_Reason__c)) { return '必须输入取消理由'; } Savepoint sp = Database.setSavepoint(); try { ta.Status__c = '取消'; update ta; } catch (Exception e) { Database.rollback(sp); return e.getMessage(); } return '1'; } private static Integer intValueOf(Decimal d) { if(d == null) { return 0; } return Integer.valueOf(d); } }