global class OPDPlanWarningBatch implements Database.Batchable<sObject> {
	String opdPlanId;
	Boolean flag = false;
	global OPDPlanWarningBatch() {

	}

	global OPDPlanWarningBatch(Boolean flag) {
		this.flag = flag;
	}

	global OPDPlanWarningBatch(String opdPlanId) {
		this.opdPlanId = opdPlanId;
	}
	global Database.QueryLocator start(Database.BatchableContext BC) {
		String query =
		    //原'Select Id, Name,Ownerid,owner.alias,Account_Laboratory__r.Name from OPDPlan__c ';
		    //新增StayOrNot__c
		    'Select Id, Name,Ownerid,owner.alias,StayOrNot__c ,Account_Laboratory__r.Name from OPDPlan__c ';
		if (flag) {
			//---SWAG-BMS8EJ---20200323---AddStart
			//请设置当担当人用户中的“在职/离职”为离职时，OPD计划为计划中的变为 取消。
			query += '  where StayOrNot__c = \'已离职\' and Status__c = \'计划中\' ';
			//---SWAG-BMS8EJ---20200323---AddEnd
		} else {
			query += '  where ThisMonthPlan__c	= 1 and Status__c = \'计划中\' ';
		}

		if (!String.isBlank(opdPlanId)) {
			query += ' and Id =\'' + opdPlanId + '\'';
		}
		return Database.getQueryLocator(query);
	}

	global void execute(Database.BatchableContext BC, List<sObject> opdPlanList) {
		if (flag) {
			system.debug('担当人用户中的“在职/离职”为离职时，OPD计划为计划中的变为 取消');
			List<OPDPlan__c> opdPlans = new List<OPDPlan__c>();
			
			if (opdPlanList.size() > 0) {
				opdPlans = opdPlanList;
				for (OPDPlan__c opd :opdPlans) {
					opd.Status__c = '取消';
				}

				update opdPlans;
			}
			
			
		} else {
			sendMailtoNotComplete(opdPlanList);
		}
		

	}
	global void finish(Database.BatchableContext BC) {

	}
	@TestVisible
	private static boolean sendMailtoNotComplete(list<OPDPlan__c> opdPlanList) {
		boolean rs = true;
		List<Messaging.SingleEmailMessage> sendMails = new List<Messaging.SingleEmailMessage>();
		Messaging.SingleEmailMessage messageNEW = new Messaging.SingleEmailMessage();
		for (OPDPlan__c OPDPlan : opdPlanList) {
			String title = '';
			String body = '';
			List<String> toMailsList = new List<String>();
			toMailsList.add(OPDPlan.Ownerid);

			title =  'OPD计划' + OPDPlan.Name + '更新提醒';
			body +=   OPDPlan.owner.alias + '您好：';
			body += '<br/>';
			body += '<br/>';
			body += '您计划于本月于' + OPDPlan.Account_Laboratory__r.Name + '实行OPD计划' + OPDPlan.Name + '，请您取消或延期该计划。';
			body += '<a href="' + URL.getSalesforceBaseUrl().toExternalForm() + '/' + OPDPlan.id + '">'
			        + URL.getSalesforceBaseUrl().toExternalForm() + '/' + OPDPlan.id + '</a><br/>';
			body += '<br/>';
			body += '<br/>';
			body += '谢谢！';

			messageNEW = new Messaging.SingleEmailMessage();
			messageNEW.subject = title;
			//messageNEW.plainTextBody = body;
			messageNEW.htmlBody = body;
			messageNEW.setCharset('UTF-8');
			messageNEW.setToAddresses(toMailsList);			
			sendMails.add(messageNEW);
		}

		system.debug('sendMailtoNotComplete:' + sendMails);
		if (sendMails.size() > 0) {
			Messaging.SendEmailResult[] results = messaging.sendEmail(sendMails);
			for (Integer i = 0; i < results.size(); i++) {
				if (results[i].success == false) {
					system.debug('=====send mail error:' + results[i].errors[0].message);
					rs = false;
				}
			}
		}
		return rs;
	}
}