0
点赞
收藏
分享

微信扫一扫

Saleforce 潜在客户未完成发送信息提醒

米小格儿 2023-03-06 阅读 36


trigger CaseTrigger on Case (after insert,before insert,before update,before delete) {
Case c=new Case();
if(trigger.isDelete){
c = trigger.old[0];
}else{
c = trigger.new[0];
}
if(Trigger.isBefore&&(Trigger.isInsert||Trigger.isUpdate)){
if(String.isNotBlank(c.firstowner__c)){
User u = [select id,DirectorOffice__c from User where id=:c.firstowner__c];
if(String.isNotBlank(u.DirectorOffice__c)){
List<User> uList = [select id from User where Name=:u.DirectorOffice__c];
if(uList.size()>0){
c.DirectorOffice__c = uList[0].id;
}
}
}
}

//72小时更新
if(trigger.isBefore&&trigger.isUpdate){
if(c.ordertimeX72__c){
if(c.submitApprovalTime__c==null&&c.Status!='已结案'){
c.Specialcase72Hours__c = true;
String msg='单号:'+c.CaseNumber+'的派工单距离客户预约上门时间即将达72小时,请及时结案,谢谢!';
ChatterSender.send(c.firstowner__c, msg, c.firstowner__c);
}
c.ordertimeX72__c = false;
}
}

if(Trigger.isAfter&&Trigger.isInsert){
if(c.shiporder__c!=null){
List<consignment__c> consignment =[SELECT id,Dispatchingorder__c FROM consignment__c WHERE id=:c.shiporder__c];
if(consignment.size()>0){
consignment[0].Dispatchingorder__c = true;
update consignment[0];
}
}

}

if(c.shiporder__c!=null&&trigger.isInsert&&trigger.isAfter){
//Case关联的发货单(shiporder__c)下面的所有发货单明细
List<consignment_detail__c> cDetails =[SELECT id,product__c,machineID__c,number__c,materiel_number__c,product_name__c,
ERPproductmodel__c,remark__c,partSpec__c FROM consignment_detail__c WHERE consignment__c =:c.shiporder__c];
List<installationdetail__c> iDetails = new List<installationdetail__c>();//派工明细
for(consignment_detail__c cd:cDetails){
installationdetail__c temp = new installationdetail__c();
temp.consignment_detail__c = cd.Id;
temp.machinecode1__c = cd.machineID__c;
temp.product__c = cd.product__c;
temp.casenumber__c = c.Id;
temp.quantity1__c = cd.number__c;
temp.materialnumber1__c = cd.materiel_number__c;
temp.materialname1__c = cd.product_name__c;
temp.type1__c = cd.ERPproductmodel__c;
temp.statue1__c = cd.remark__c;
temp.style1__c = cd.partSpec__c;
iDetails.add(temp);
}
insert iDetails;
}

List<RecordType> records =[SELECT Id, Name, DeveloperName, SobjectType FROM RecordType WHERE SobjectType='Case'];
Map<String,String> recordName_Id = new Map<String,String>();
for(RecordType r:records){
recordName_Id.put(r.Name,r.Id);
}




//派工分配规则
if(trigger.isBefore&&trigger.isInsert){
if(c.AccountId!=null&&(recordName_Id.get('新机装机')==c.RecordTypeId||recordName_Id.get('客户报修')==c.RecordTypeId)){
List<caseassignmentrule__c> asign = new List<caseassignmentrule__c>();
//第一层 客户名匹配
asign = [SELECT Id,skillman__c FROM caseassignmentrule__c WHERE customername__c=:c.AccountId];
if(asign.size()>0){
c.firstowner__c = asign[0].skillman__c;
}else{
Boolean step2 = false;
if(c.shiporder__c!=null){
List<consignment_detail__c> cDetails =[SELECT id,product__c FROM consignment_detail__c WHERE consignment__c =:c.shiporder__c];
//第二层 产品匹配
for(consignment_detail__c cd:cDetails){
asign =[SELECT Id,skillman__c FROM caseassignmentrule__c WHERE producttype__c=:cd.product__c];
if(asign.size()>0){
c.firstowner__c = asign[0].skillman__c;
step2 = true;
}
}
}
//第二层比对不成功再进行第三层比对
if(!step2&&c.area__c!=null){
Region__c reg =[SELECT Name FROM Region__c WHERE id=:c.area__c];
asign =[SELECT Id,skillman__c,area__r.Name FROM caseassignmentrule__c ];
if(asign.size()>0){
for(caseassignmentrule__c cg:asign){
if(reg.Name.Contains(cg.area__r.Name)){
c.firstowner__c = asign[0].skillman__c;
}
}
}
}
}
}
}

if(trigger.isBefore&&trigger.isUpdate){
List<ProcessInstance> pInstance =[SELECT TargetObjectId, Id FROM ProcessInstance WHERE TargetObjectId=:c.Id ORDER BY CreatedDate DESC];
system.debug('pInstance'+pInstance);
if(pInstance.size()>0){
List<ProcessInstanceStep> step=[SELECT Id,Comments,StepNodeId FROM ProcessInstanceStep WHERE ProcessInstanceId=:pInstance[0].Id AND StepStatus!='Started' AND Comments!=''];
system.debug('step'+step);
if(step.size()>0){
for(ProcessInstanceStep ps:step){
ProcessInstanceNode pid=[SELECT Id, NodeStatus, ProcessNodeName FROM ProcessInstanceNode WHERE ProcessNodeId=:ps.StepNodeId limit 1];
if(pid.ProcessNodeName=='投诉内容核查'){
c.Complaintsverification__c = ps.Comments;
}else if(pid.ProcessNodeName=='责任部门核实'){
c.responsibilitydepartment__c = ps.Comments;
}else if(pid.ProcessNodeName=='客服管理中心处理意见及纠正预防措施'){
c.Customermeasures__c = ps.Comments;
}else if(pid.ProcessNodeName=='公司主管领导意见'){
c.Companymanager__c = ps.Comments;
}else if(pid.ProcessNodeName=='修改投诉单处理意见及预防纠正措施'){
c.Customermeasures__c = ps.Comments;
}
}

}
}

//当个案中的状态更改为已结案,结案时间取当前系统时间
if(trigger.old[0].Status!='已结案'&&c.Status=='已结案'){
c.Specialcase__c = DateTime.now();
c.Maintenance__c = true;
system.debug('caseTrigger-Maintenance__c:'+c.Maintenance__c);
//当个案状态显示为已结案,则把所有与个案关联的服务单状态变更为 “已审核”
List<customerservicelist__c> cusSers =[SELECT id,state1__c FROM customerservicelist__c WHERE servicearr__c=:c.Id];
for(customerservicelist__c cu:cusSers){
cu.state1__c ='已审核';
}
update cusSers;
}
if(trigger.old[0].Status=='已结案'&&c.Status!='已结案'){
List<customerservicelist__c> cusSers =[SELECT id,state1__c FROM customerservicelist__c WHERE servicearr__c=:c.Id];
for(customerservicelist__c cu:cusSers){
cu.state1__c ='未审核';
}
update cusSers;
}

//第一次分派时间后2小时触发chatter
if(recordName_Id.get('客户报修')==c.RecordTypeId){
if(c.firstTime2Hours__c){
//如果第二次分派人在2小时内,则提醒第二次分派人
if(c.secondTime2Hours__c){
String msg ='单号 '+c.CaseNumber+' 的派工单距离分配时间已达2小时,请电话联系客户';
ChatterSender.send(c.secondowner__c,msg,c.Id);
c.secondTime2Hours__c = false;
c.firstTime2Hours__c = false;
User u=[SELECT Phone, weChatNumber__c FROM User WHERE id=:c.secondowner__c];
SMS.doFutureSend(u.Phone,msg);

if(u.weChatNumber__c!=null){//发送微信
WeChatUtil.sendWeChat(u.weChatNumber__c, Label.WeChatAgentId, 'text', msg);
}
}else{//否则提醒第一次分派人
String msg ='单号 '+c.CaseNumber+' 的派工单距离分配时间已达2小时,请电话联系客户';
ChatterSender.send(c.firstowner__c,msg,c.Id);
c.firstTime2Hours__c = false;
User u=[SELECT Phone, weChatNumber__c FROM User WHERE id=:c.firstowner__c];
SMS.doFutureSend(u.Phone,msg);
if(u.weChatNumber__c!=null){//发送微信
WeChatUtil.sendWeChat(u.weChatNumber__c, Label.WeChatAgentId, 'text', msg);
}
}
}
}

//特殊结案消息提醒:1、当个案原因不为空&状态=已结案&父级个案为空,则每个24小时消息提醒被分派人
//(当第一次分派人不为空,第二次为空,取第一次诶分派人;当第一次被分派人及第二次被分派人均不为空,则取第二次被分派人)
if(recordName_Id.get('客户报修')==c.RecordTypeId&&c.Reason=='等待配件'&&c.Status=='已结案'&&c.ParentId==null&&trigger.old[0].Status!='已结案'){
String msg ='您的派工单号【'+c.CaseNumber+'】已进行特殊结案,请选择特殊结案关联派工单';
c.SpecialcaseTime__c = DateTime.now();
if(c.firstowner__c!=null&&c.secondowner__c!=null){
ChatterSender.send(c.secondowner__c,msg,c.Id);
}else if(c.firstowner__c!=null){
ChatterSender.send(c.firstowner__c,msg,c.Id);
}

}

//装机审批逻辑:
//派工单提交审批时,判断派工单中的车旅费字段和派工单关联的设备安装验收单,车旅费字段必须有值,
//且派工单关联的所有设备安装验收单都有附件,才能提交成功,如果检测有一个条件不满足,则按照检测出的内容提示;
//(如果是车旅费为空,提示车旅费为空,不允许提交;如果是设备安装验收单的附件没有上传,则提示设备安装验收单附件为空,
//不允许推荐,并且给出相应的设备安装验收单单号)

if(c.Status=='审批中'&&trigger.old[0].Status=='已接受(技术员)'&&recordName_Id.get('新机装机')==c.RecordTypeId){
if(c.costprice__c==null){
c.addError('车旅费为空,不允许提交!');
}else{
List<installationdetail__c> iDetail =[SELECT id,Name FROM installationdetail__c WHERE casenumber__c=:c.Id];
List<String> iids = new List<String>();
for(installationdetail__c i:iDetail){
iids.add(i.Id);
}
List<checkinglist__c> checks=[SELECT id,Name,installationdetail__c FROM checkinglist__c WHERE installationdetail__c IN :iids];

//是否每个派工明细下都有设备安装验收单
Set<String> iDetailNames = new Set<String>();
for(installationdetail__c i:iDetail){
Boolean haveCheck = false;
for(checkinglist__c c1:checks){
if(c1.installationdetail__c==i.Id){
haveCheck = true;
}
}
if(!haveCheck){
iDetailNames.add(i.Name);
}
}
if(iDetailNames.size()>0){
c.addError(iDetailNames+'的设备安装验收单为空,不允许提交审批!');
}

List<String> cids = new List<String>();
for(checkinglist__c c1:checks){
cids.add(c1.Id);
}
system.debug('cids:'+cids);
if(cids.size()>0){
List<Attachment> att=[SELECT Id, ParentId, Name FROM Attachment WHERE ParentId IN:cids];
List<ContentDocumentLink> documents =[SELECT Id, LinkedEntityId, ContentDocumentId FROM ContentDocumentLink where LinkedEntityId IN:cids];
Set<String> NotDocNames =new Set<String>();
for(checkinglist__c c2:checks){
Boolean thisCheckHasAtt = false;
Integer thisNum =0;
for(Attachment a:att){
if(a.ParentId==c2.Id){
thisNum ++;
}
}
for(ContentDocumentLink d:documents){
if(d.LinkedEntityId==c2.Id){
thisNum ++;
}
}
if(thisNum>=3){
thisCheckHasAtt = true;
}
if(!thisCheckHasAtt){
//c.addError('设备安装验收单'+c2.Name+'附件少于三个,不允许提交!');
NotDocNames.add(c2.Name);
}
}
if(NotDocNames.size()>0){
/*
String names='';
for(String s:NotDocNames){
if(names==''){
names = s;
}else{
names = names +'、'+s;
}
}*/
c.addError('设备安装验收单'+NotDocNames+'附件少于三个,不允许提交!');
}
}
}
}
//跟装机审批判断附件逻辑一样,判断的对象不一样
//个案提交审批时:记录类型=客户报修&状态=已接收(技术员),点击提交待审批,监测个案关联的所有服务单是否已上传附件,
//如未上传附件,则提示对应未上传附件的服务单
if(c.Status=='审批中'&&trigger.old[0].Status=='已接受(技术员)'&&recordName_Id.get('客户报修')==c.RecordTypeId){
if(c.costprice__c==null){
c.addError('车旅费为空,不允许提交!');
}else{
List<customerservicelist__c> cusSer=[SELECT id,Name FROM customerservicelist__c WHERE servicearr__c=:c.Id];
if(cusSer.size()==0){
c.addError('客户服务单为空,不允许提交审批!');
}
List<String> csids = new List<String>();
for(customerservicelist__c cs:cusSer){
csids.add(cs.Id);
}
System.debug('===================1===================');
List<Attachment> att=[SELECT Id, ParentId, Name FROM Attachment WHERE ParentId IN:csids];
System.debug('==================2===================='+csids);
if(csids.size()>0){
List<ContentDocumentLink> documents =[SELECT Id, LinkedEntityId, ContentDocumentId FROM ContentDocumentLink where LinkedEntityId IN:csids];
System.debug('==================3====================');
Set<String> NotDocNames =new Set<String>();
for(customerservicelist__c cs2:cusSer){
Boolean thisCheckHasAtt = false;
for(Attachment a:att){
if(a.ParentId==cs2.Id){
thisCheckHasAtt = true;
}
}
for(ContentDocumentLink d:documents){
if(d.LinkedEntityId==cs2.Id){
thisCheckHasAtt = true;
}
}
if(!thisCheckHasAtt){
//c.addError('客户服务单'+cs2.Name+'附件为空,不允许提交!');
NotDocNames.add(cs2.Name);
}
}
if(NotDocNames.size()>0){
String names='';
for(String s:NotDocNames){
if(names==''){
names = s;
}else{
names = names +'、'+s;
}
}
c.addError('客户服务单'+names+'附件为空,不允许提交!');
}
}
}
}
}

//反审核审批通过后,把【派工单】关联的【服务单】关联的【应收款】中“是否特殊清款”=false 的应收款删除
if(trigger.isUpdate&&c.Status=='已接受(技术员)'&&trigger.old[0].Status=='已结案'&&recordName_Id.get('客户报修')==c.RecordTypeId){
List<customerservicelist__c> serlist=[SELECT id FROM customerservicelist__c WHERE servicearr__c=:c.Id];
for(customerservicelist__c ser:serlist){
List<account__c> bill=[SELECT id FROM account__c WHERE servicenumber__c=:ser.Id AND specialclearance__c=false];
delete bill;
}
}


if(trigger.isDelete){
if(c.Status!='未派工'&&(recordName_Id.get('新机装机')==c.RecordTypeId||recordName_Id.get('客户报修')==c.RecordTypeId)){
c.addError('未派工状态下才可以删除!');
}
}


//一次派工和二次派工人共享当前记录
if(trigger.isBefore&&trigger.isUpdate){
system.debug('shares:'+1);
Case c1 = trigger.old[0];
Case c2 = trigger.new[0];
if(c1.firstowner__c!=c2.firstowner__c){
system.debug('shares:'+2);
List<CaseShare> shares=[SELECT Id, CaseId, UserOrGroupId, CaseAccessLevel, RowCause FROM CaseShare WHERE CaseId=:c1.Id AND UserOrGroupId=:c1.firstowner__c AND RowCause='Manual'];
system.debug('shares:'+shares);
delete shares;
}
if(c1.secondowner__c!=c2.secondowner__c){
List<CaseShare> shares=[SELECT Id, CaseId, UserOrGroupId, CaseAccessLevel, RowCause FROM CaseShare WHERE CaseId=:c1.Id AND UserOrGroupId=:c1.secondowner__c AND RowCause='Manual'];
system.debug('shares:'+shares);
delete shares;
}
}

//短信推送

if(trigger.isUpdate&&(recordName_Id.get('新机装机')==c.RecordTypeId||recordName_Id.get('客户报修')==c.RecordTypeId||recordName_Id.get('客户投诉')==c.RecordTypeId)){

Account a = new Account();
if(String.isNotBlank(c.AccountId)){
a = [select id,Name,Owner.Phone from Account where id=:c.AccountId];
}
if(recordName_Id.get('客户投诉')!=c.RecordTypeId){
//一次派工提醒技术员
if(c.firstowner__c!=null&&c.secondowner__c==null&&c.Status=='已派工'&&trigger.old[0].Status!='已派工'){
String msg='客户'+a.Name+'单号:'+c.CaseNumber+'的派工单已分配给您,请按照派工单中的内容执行,谢谢!';
User u=[SELECT Name,Phone, weChatNumber__c FROM User WHERE id=:c.firstowner__c];
SMS.doFutureSend(u.Phone, msg);
if(u.weChatNumber__c!=null){//发送微信
WeChatUtil.sendWeChat(u.weChatNumber__c, Label.WeChatAgentId, 'text', msg);
}
}

//一次派工拒绝提醒话务员 装机到话务组长/报修到话务组
if(c.Status=='未派工'&&c.refuse__c=='1'){
User u=[SELECT Alias FROM User WHERE id=:c.firstowner__c];
String msg='单号:'+c.CaseNumber+'的派工单已被维修人员'+u.Alias+'拒绝,请重新进行派工,谢谢!';
sendToServer(msg);
}

//装机/报修派工2小时未响应提醒话务组 装机到话务组长/报修到话务组
if(c.X2HoursSms__c==true&&trigger.old[0].X2HoursSms__c!=true){
String msg='单号:'+c.CaseNumber+'的派工截止目前已超过2小时一线维修人员还未接收,请话务人员致电维修人员询问情况,谢谢!';
sendToServer(msg);
}

//派工后预约上门时间后推24小时提醒客服技术员需到达客户现场
/*
if(c.X24SendOne__c&&trigger.old[0].X24SendOne__c!=true){
String msg='客户'+a.Name+'单号:'+c.CaseNumber+'的派工单距离客户预约上门时间即将达24小时,请及时到达客户现场,谢谢!';
User u=[SELECT Phone FROM User WHERE id=:c.firstowner__c];
SMS.doFutureSend(u.Phone,msg);
if(u.weChatNumber__c!=null){//发送微信
WeChatUtil.sendWeChat(u.weChatNumber__c, Label.WeChatAgentId, 'text', msg);
}
}
if(c.X24SendTwo__c&&trigger.old[0].X24SendTwo__c!=true){
String msg='客户'+a.Name+'单号:'+c.CaseNumber+'的派工单距离客户预约上门时间即将达24小时,请及时到达客户现场,谢谢!';
User u=[SELECT Phone FROM User WHERE id=:c.secondowner__c];
SMS.doFutureSend(u.Phone,msg);
if(u.weChatNumber__c!=null){//发送微信
WeChatUtil.sendWeChat(u.weChatNumber__c, Label.WeChatAgentId, 'text', msg);
}
}*/
// 2016-6-22修改 by Felin
if(c.X24SendOne__c&&trigger.old[0].X24SendOne__c!=true){
if(c.firstowner__c!=null&&c.secondowner__c==null&&c.Status!='已结案'&&c.submitApprovalTime__c==null){
//推送chatter
String msg ='客户'+a.Name+ '单号:'+c.CaseNumber+'的派工单距离客户预约上门时间即将达24小时,请及时到达客户现场,谢谢!';
ChatterSender.send(c.firstowner__c, msg, c.Id);
//推送短信
User u=[SELECT Phone, weChatNumber__c FROM User WHERE id=:c.firstowner__c];
SMS.doFutureSend(u.Phone,msg);
//发送微信
if(u.weChatNumber__c!=null){
WeChatUtil.sendWeChat(u.weChatNumber__c, Label.WeChatAgentId, 'text', msg);
}
}
if(c.firstowner__c!=null&&c.secondowner__c!=null&&c.Status!='已结案'&&c.submitApprovalTime__c==null){
String msg='客户'+a.Name+'单号:'+c.CaseNumber+'的派工单距离客户预约上门时间即将达24小时,请及时到达客户现场,谢谢!';
//chatter
ChatterSender.send(c.firstowner__c, msg, c.Id);
User u=[SELECT Phone, weChatNumber__c FROM User WHERE id=:c.secondowner__c];
//短信
SMS.doFutureSend(u.Phone,msg);
//发送微信
if(u.weChatNumber__c!=null){
WeChatUtil.sendWeChat(u.weChatNumber__c, Label.WeChatAgentId, 'text', msg);
}
}
}
//新机装机15天提醒
if(c.timelimit__c&&trigger.old[0].timelimit__c!=true){
if(c.Status!='已结案'&&c.firstowner__c!=null&&c.secondowner__c==null){
String msg='单号为:'+c.CaseNumber+'的派工单已15天未结案,请及时结案,谢谢!';
ChatterSender.send(c.firstowner__c, msg, c.Id);
}
if(c.Status!='已结案'&&c.secondowner__c!=null){
String msg='单号为:'+c.CaseNumber+'的派工单已15天未结案,请及时结案,谢谢!';
ChatterSender.send(c.secondowner__c, msg, c.Id);
}
}

//客户报修/新机装机 短信提醒
if(c.Status=='已派工'&&trigger.old[0].Status!='已派工'){
String msg='您的客户'+a.Name+'的类型为'+c.Type+'派工单'+c.CaseNumber+'已派工,请知悉!';

SMS.doFutureSend(a.Owner.Phone,msg);

if(a.Owner.weChatNumber__c!=null){//发送微信
WeChatUtil.sendWeChat(a.Owner.weChatNumber__c, Label.WeChatAgentId, 'text', msg);
}
}

}
/*
if(c.Status=='已派工'&&trigger.old[0].Status!='已派工'){
User fu = [select Name,Alias from User where id =:c.firstowner__c];
String msg='您管辖区域的业务员'+c.sales__c+'的客户'+a.Name+'类型为'+c.Type+'的派工单已进行派工,负责的客服技术员为'+fu.Alias+',请知悉!';
if(c.DirectorOffice__c!=null){
User u = [select id,Phone from User where id =:c.DirectorOffice__c];
SMS.doFutureSend(u.Phone, msg);
}
}*/
}

public void sendToServer(String msg){
if(recordName_Id.get('客户报修')==c.RecordTypeId){
List<Group> g=[SELECT Id, Name, DeveloperName, RelatedId, Type, Email, OwnerId FROM Group WHERE Name='客服话务组' limit 1];
List<String> Uids = new List<String>();
if(g.size()>0){
List<GroupMember> members =[SELECT Id, UserOrGroupId, GroupId FROM GroupMember WHERE GroupId=:g[0].Id];
for(GroupMember m:members){
Uids.add(m.UserOrGroupId);
}
}
List<User> users=[SELECT id,Name,Phone, weChatNumber__c FROM User WHERE id IN :Uids];
for(User u2:users){
SMS.doFutureSend(u2.Phone,msg);
if(u2.weChatNumber__c!=null){//发送微信
WeChatUtil.sendWeChat(u2.weChatNumber__c, Label.WeChatAgentId, 'text', msg);
}
}
}else{
List<Group> g=[SELECT Id, Name, DeveloperName, RelatedId, Type, Email, OwnerId FROM Group WHERE Name='客服话务组长' limit 1];
List<String> Uids = new List<String>();
if(g.size()>0){
List<GroupMember> members =[SELECT Id, UserOrGroupId, GroupId FROM GroupMember WHERE GroupId=:g[0].Id];
for(GroupMember m:members){
Uids.add(m.UserOrGroupId);
}
}
List<User> users=[SELECT id,Name,Phone, weChatNumber__c FROM User WHERE id IN :Uids];
for(User u2:users){
SMS.doFutureSend(u2.Phone,msg);
if(u2.weChatNumber__c!=null){//发送微信
WeChatUtil.sendWeChat(u2.weChatNumber__c, Label.WeChatAgentId, 'text', msg);
}
}
}
}
}


举报

相关推荐

Nginx未完成

Tomcat未完成

http协议(未完成)

IDM未完成下载路径

JavaWeb期末复习(未完成)

0 条评论