global class MaintenanceContractWebService { // 用户点击上传sap按钮,更新状态到契约,自动触发上传sap接口程序 WebService static String up2sap(String mcid) { List mcList = [select id, Status__c, Maintenance_Contract_No__c , Hospital__c , RecordTypeId, RecordType.DeveloperName,Is_RecognitionModel__c,Recognition_Model_Type__c,upload_to_RM_time__c,old_Is_RecognitionModel__c,Is_Recognition_Model_True__c from Maintenance_Contract__c where id = :mcid ]; if (mcList.size() == 0) { return '维修合同不存在,请确认维修合同ID。'; } Maintenance_Contract__c mc = mcList[0]; if (mc.Maintenance_Contract_No__c == null || mc.Maintenance_Contract_No__c == '') { return Schema.SObjectType.Maintenance_Contract__c.fields.Maintenance_Contract_No__c.label + '为空,不能上传sap'; } //update wangweipeng 2021/11/17 start //用于判断当前合同是否需要认款 boolean flag = false; //判断是否需要认款合同 if(mc.old_Is_RecognitionModel__c){ //判断当前合同是否已经认款完成 if(!mc.Is_Recognition_Model_True__c){ flag = true; } } //update wangweipeng 2021/11/17 end try { if(flag){ mc.upload_to_RM_time__c = Datetime.now();//上传认款合同时间 //mc.old_Is_RecognitionModel__c = mc.Is_RecognitionModel__c; }else{ mc.Status__c = '契約'; mc.upload_to_sap_time__c = Datetime.now(); //2021-01-14 mzy add LJPH-BWY5QB 合同状态为合同中时 ,将客户上的 维修合同用户类型 设为true ,合同上的 用户类型 为 新用户, 以后维修合同用户类型 都为 true 合同上的 用户类型 为 既有用户 //只有合同是维修合同和服务合同的时候进入 if (!mc.RecordType.DeveloperName.equals('VM_Contract')) { List acList = [select id, MaintenanceContractUserType__c from Account where id = :mc.Hospital__c]; if (acList != null && acList.size() > 0) { Account hp = acList[0]; //老用户 if (hp.MaintenanceContractUserType__c == true) { mc.UserType__c = '既有用户'; } else { //新用户 hp.MaintenanceContractUserType__c = true; mc.UserType__c = '新用户'; update hp; } } } } update mc; //2021-01-14 mzy add LJPH-BWY5QB 合同状态为合同中时 ,将客户上的 维修合同用户类型 设为true ,合同上的 用户类型 为 新用户, 以后维修合同用户类型 都为 true 合同上的 用户类型 为 既有用户 } catch (Exception ex) { return ex.getMessage(); } return '1'; } // fxk 点击上传SAP按钮自动生成点检计划 2021/7/22 Start WebService static String Check_plan(List mcidList) { System.debug('1234567890'); List MCList = [select Id, Contract_Start_Date__c, Service_contract_target_number__c, Actual_Execution_Quantity_Summary__c, //2021-09-08 mzy FSE分批点检如果有遗漏设备的提醒设置 设置点检计划的合同担当 start Service_Contract_Staff__c,Contract_Range__c,Contract_Period__c, //2021-09-08 mzy FSE分批点检如果有遗漏设备的提醒设置 设置点检计划的合同担当 end Contract_End_Date__c, Inspection_Time__c from Maintenance_Contract__c where Id in: mcidList]; // Inspection_Report__c CheckPlanR = [select Id, Inspection_asset_number__c, Approved_date__c, // Failourassetnumber__c // from Inspection_Report__c where Contract__c = : mcid]; // Inspection_Item__c CheckPlanI = [select Id, ItemStatus__c, Failourassetnumber__c // from Inspection_Item__c where Maintance_Static_His__c = : mcid]; System.debug('MCInfoList:' + MCList); // 存新创建的点检计划 List IPInfoList = new List(); // 1.合同总月数 // 2.合同总点检次数 // 3.每次点检月份区间 // 遍历总月数{ // 满一年点检日期区间 // 不满一年点检日期区间 // // 总年数 // Integer Allyear = Integer.valueOf(PageMCEElement.Contract_End_Date__c.year() - PageMCEElement.Contract_Start_Date__c.year()); // System.debug('Zongnianshu' + Allyear); // // 剩余月数 // Integer RestMonth = Integer.valueOf(PageMCEElement.Contract_End_Date__c.month() - PageMCEElement.Contract_Start_Date__c.month()); // // 剩余月应该点检的次数 // Integer RestMonth_check = RestMonth / (12 / Integer.valueOf(PageMCEElement.Inspection_Time__c)); // // 合同点检总次数 // Integer All_check = Allyear * Integer.valueOf(PageMCEElement.Inspection_Time__c) + RestMonth_check; // 总点检次数 // Integer All_check; //合同总月数 // Integer Contract_validMonth; // Integer CheckPlan; Map MCTOCheckMap = new Map(); for (Maintenance_Contract__c Mc : MCList) { Integer All_check = 0; if (MC.Inspection_Time__c != null && MC.Inspection_Time__c != '') { Integer CheckPlan = Integer.valueOf(MC.Inspection_Time__c); //合同总月数 Integer Contract_validMonth = Integer.valueOf(MC.Contract_Range__c); // add 一年内点检区间不够生成一次点检计划,默认生成一个点检计划,计划区间为合同开始日-结束日 2021/10/25 fxk Star if((CheckPlan == 1 && Contract_validMonth < 9) || (CheckPlan == 2 && Contract_validMonth < 6) || (CheckPlan == 3 && Contract_validMonth < 4) || (CheckPlan == 4 && Contract_validMonth < 3)){ All_check = 1; }else{ // add 一年内点检区间不够生成一次点检计划,默认生成一个点检计划,计划区间为合同开始日-结束日 2021/10/25 fxk end if (Contract_validMonth - Integer.valueOf(Contract_validMonth / 12) * 12 >= 6 && CheckPlan == 1) { All_check = (Contract_validMonth * Integer.valueOf(MC.Inspection_Time__c)) / 12 + 1; } else { All_check = (Contract_validMonth * Integer.valueOf(MC.Inspection_Time__c)) / 12; } System.debug('-------Contract_validMonth:' + Contract_validMonth); } MCTOCheckMap.put(Mc.Id, All_check); } } // 合同点检总次数 Map> tempMapCheck = new Map>(); // 如果签一年合同有效期不是(1-12月)则它的点检的月份应为(点检次数为1) // Integer[] a1 = new Integer[] {9}; // Integer[] a2 = new Integer[] {6}; // Integer[] a3 = new Integer[] {4}; // Integer[] a4 = new Integer[] {3}; List checkMonth = new List {0, 9, 6, 4, 3}; // tempMapCheck.put(1, a1); // tempMapCheck.put(2, a2); // tempMapCheck.put(3, a3); // tempMapCheck.put(4, a4); // gzw 计数初始化 // Integer nameNo = 0; try { for (Maintenance_Contract__c Mc : MCList) { // gzw 计数初始化 Integer nameNo = 0; if (MC.Inspection_Time__c != null && MC.Inspection_Time__c != '') { // 总点检次数 Integer All_check = 0; if (MCTOCheckMap.containsKey(Mc.Id)) { All_check = MCTOCheckMap.get(Mc.Id); } // 年点检次数 Integer CheckPlan = Integer.valueOf(MC.Inspection_Time__c); //合同总月数 //update 2021/11/11 fxk star Integer Contract_validMonth = Integer.valueOf(MC.Contract_Period__c); //Integer Contract_validMonth = MC.Contract_Start_Date__c.monthsBetween(MC.Contract_End_Date__c); //update 2021/11/11 fxk end for (Integer i = 1; i <= All_check; i++ ) { if (i * 12 <= Contract_validMonth) { if (CheckPlan == 1) { Integer keys = checkMonth[CheckPlan]; System.debug('------3-------' + keys); // for (Integer keys : tempMapCheck.get(CheckPlan)) { for (Integer j = 1; j <= CheckPlan; j++ ) { System.debug('------5-------' + i); // Integer keys = checkMonth[CheckPlan] Integer keys1 = checkMonth[CheckPlan]; System.debug('------4-------' + keys1); // 计划开始日 Date startDate; Date endDate; Date taskTime; // if (Contract_validMonth <= 12) { // startDate = MC.Contract_Start_Date__c.addMonths((i - 1) * 12 + (keys - keys1)); // taskTime = startDate.addMonths(5); // }else if(i>1){ startDate = MC.Contract_Start_Date__c.addMonths((i - 1) * 12 + (keys - keys1)-3); taskTime = startDate.addMonths(8); }else{ startDate = MC.Contract_Start_Date__c.addMonths((i - 1) * 12 + (keys - keys1)); taskTime = startDate.addMonths(5); } System.debug('------1-------' + startDate); // 计划结束日 endDate = MC.Contract_Start_Date__c.addMonths((i - 1) * 12 + keys).addDays(-1); System.debug('------2-------' + endDate); keys += keys1; System.debug('------6-------' + keys); //防止点检计划结束日大于合同结束日 if (endDate > MC.Contract_End_Date__c ) { endDate = MC.Contract_End_Date__c; } nameNo++; //2021-09-02 mzy update start //发送任务的日期改成跟着实施期限的日期和合同期限的日期走,不要是固定的那个月的1号 //Date taskTime = Date.newInstance(endDate.year(), endDate.month() - 1, 1); //如果是1年点检1次的话则是合同开始日+5个月 // Date taskTime = endDate.addMonths(-1); // if (CheckPlan == 1) { //taskTime = MC.Contract_Start_Date__c.addMonths(5); // } //2021-09-02 mzy update end System.debug('1234567890:' + nameNo); planInfo(IPInfoList, nameNo, MC, startDate, endDate, taskTime); } } else { Integer keys = checkMonth[CheckPlan]; System.debug('------3-------' + keys); // for (Integer keys : tempMapCheck.get(CheckPlan)) { for (Integer j = 1; j <= CheckPlan; j++ ) { System.debug('------5-------' + i); // Integer keys = checkMonth[CheckPlan] Integer keys1 = checkMonth[CheckPlan]; System.debug('------4-------' + keys1); // 计划开始日 Date startDate = MC.Contract_Start_Date__c.addMonths((i - 1) * 12 + (keys - keys1)); System.debug('------1-------' + startDate); // 计划结束日 Date endDate = MC.Contract_Start_Date__c.addMonths((i - 1) * 12 + keys).addDays(-1); System.debug('------2-------' + endDate); keys += keys1; System.debug('------6-------' + keys); //防止点检计划结束日大于合同结束日 if (endDate > MC.Contract_End_Date__c ) { endDate = MC.Contract_End_Date__c; } nameNo++; //2021-09-02 mzy update start //发送任务的日期改成跟着实施期限的日期和合同期限的日期走,不要是固定的那个月的1号 //Date taskTime = Date.newInstance(endDate.year(), endDate.month() - 1, 1); //如果是1年点检1次的话则是合同开始日+5个月 Date taskTime = endDate.addMonths(-1); // if (CheckPlan == 1) { // //taskTime = MC.Contract_Start_Date__c.addMonths(5); // taskTime = startDate.addMonths(5); // } //2021-09-02 mzy update end System.debug('1234567890:' + nameNo); planInfo(IPInfoList, nameNo, MC, startDate, endDate, taskTime); } } } else { // 剩余月份应该点检的次数 Integer num; if (CheckPlan == 1) { System.debug('-------2-----' + CheckPlan); if ((Contract_validMonth - (i - 1) * 12) >= 6 ) { System.debug('--------1--------' + (Contract_validMonth - (i - 1) * 12)); num = 1; for (Integer j = 0 ; j < num ; j++) { Integer keys = checkMonth[CheckPlan]; Date startDate; if (Contract_validMonth < 12) { startDate = MC.Contract_Start_Date__c.addMonths((i - 1) * 12 + (keys * j)); }else{ startDate = MC.Contract_Start_Date__c.addMonths((i - 1) * 12 + (keys * j) - 3); } // Date endDate = MC.Contract_Start_Date__c.addMonths((i - 1) * 12 + (keys1 + keys1 * j)).addDays(-1); Date endDate = MC.Contract_End_Date__c; nameNo++; //2021-09-02 mzy update start //发送任务的日期改成跟着实施期限的日期和合同期限的日期走,不要是固定的那个月的1号 //Date taskTime = Date.newInstance(MC.Contract_End_Date__c.year(), MC.Contract_End_Date__c.month() - 2, 1); Date taskTime = MC.Contract_End_Date__c.addMonths(-2); //2021-09-02 mzy update end planInfo(IPInfoList, nameNo, MC, startDate, endDate, taskTime); } } // add 一年内点检区间不够生成一次点检计划,默认生成一个点检计划,计划区间为合同开始日-结束日 2021/10/25 fxk Star if ( Contract_validMonth < 6 ) { Date startDate = MC.Contract_Start_Date__c; Date endDate = MC.Contract_End_Date__c; nameNo = 1; Date taskTime = MC.Contract_End_Date__c.addMonths(-2); planInfo(IPInfoList, nameNo, MC, startDate, endDate, taskTime); } // add 一年内点检区间不够生成一次点检计划,默认生成一个点检计划,计划区间为合同开始日-结束日 2021/10/25 fxk end } else { // add 一年内点检区间不够生成一次点检计划,默认生成一个点检计划,计划区间为合同开始日-结束日 2021/10/25 fxk Star if(Contract_validMonth < checkMonth[CheckPlan]){ Date startDate = MC.Contract_Start_Date__c; Date endDate = MC.Contract_End_Date__c; nameNo = 1; Date taskTime = endDate.addMonths(-1); planInfo(IPInfoList, nameNo, MC, startDate, endDate, taskTime); }else{ // add 一年内点检区间不够生成一次点检计划,默认生成一个点检计划,计划区间为合同开始日-结束日 2021/10/25 fxk end num = Integer.valueOf((Contract_validMonth - (i - 1) * 12) * CheckPlan / 12); for (Integer j = 0 ; j < num ; j++) { Integer keys = checkMonth[CheckPlan]; Date startDate = MC.Contract_Start_Date__c.addMonths((i - 1) * 12 + (keys * j)); Date endDate = MC.Contract_Start_Date__c.addMonths((i - 1) * 12 + (keys + keys * j)).addDays(-1); //防止点检计划结束日大于合同结束日 if (endDate > MC.Contract_End_Date__c ) { endDate = MC.Contract_End_Date__c; } nameNo++; //2021-09-02 mzy update start //发送任务的日期改成跟着实施期限的日期和合同期限的日期走,不要是固定的那个月的1号 //Date taskTime = Date.newInstance(endDate.year(), endDate.month() - 1, 1); Date taskTime = endDate.addMonths(-1); //2021-09-02 mzy update end planInfo(IPInfoList, nameNo, MC, startDate, endDate, taskTime); } } } // nameNo = 0; // break; } } } } System.debug('1234567887654321' + MCList); if (MCList.size() > 0 ) { update MCList; } System.debug('12345678' + IPInfoList); if (IPInfoList.size() > 0) { insert IPInfoList; // Integer a = Integer.valueOf('asdfg12345'); } } catch (Exception ex) { return ex.getMessage(); } return '1'; } public static List planInfo(List IPInfoList, Integer nameNo, Maintenance_Contract__c MC, Date startDate, Date endDate, Date taskTime) { // List IPInfoList = new List(); Inspectup_Plan__c IPInfo = new Inspectup_Plan__c(); IPInfo.Name = '第' + nameNo + '次计划'; IPInfo.Maintenance_Contract__c = MC.Id; IPInfo.Planned_Start_Date__c = startDate; IPInfo.Planned_End_Date__c = endDate; IPInfo.Task_sending_time__c = taskTime; IPInfo.Chack_Plan_NO__c = String.valueOf(nameNo); //2021-09-08 mzy FSE分批点检如果有遗漏设备的提醒设置 设置点检计划的合同担当,为了发邮件时使用 start IPInfo.Service_Contract_Staff__c = MC.Service_Contract_Staff__c; //2021-09-08 mzy FSE分批点检如果有遗漏设备的提醒设置 设置点检计划的合同担当,为了发邮件时使用 end IPInfoList.add(IPInfo); return IPInfoList; } // fxk 点击上传SAP按钮自动生成点检计划 2021/7/22 End }