小程序审批通知页面跳转地址调整

This commit is contained in:
aikai 2024-03-21 20:13:16 +08:00
parent 38cddda869
commit 23576a5286
6 changed files with 80 additions and 87 deletions

View File

@ -5,13 +5,11 @@ import cn.iocoder.yudao.module.system.api.notify.dto.NotifySendSingleToUserReqDT
import cn.iocoder.yudao.module.system.api.sms.dto.send.SmsSendSingleToUserReqDTO; import cn.iocoder.yudao.module.system.api.sms.dto.send.SmsSendSingleToUserReqDTO;
import cn.iocoder.yudao.module.system.api.subscribe.dto.MsgData; import cn.iocoder.yudao.module.system.api.subscribe.dto.MsgData;
import cn.iocoder.yudao.module.system.api.subscribe.dto.SubscribeMessageReqDTO; import cn.iocoder.yudao.module.system.api.subscribe.dto.SubscribeMessageReqDTO;
import org.flowable.bpmn.model.UserTask;
import org.mapstruct.Mapper; import org.mapstruct.Mapper;
import org.mapstruct.Mapping; import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers; import org.mapstruct.factory.Mappers;
import java.util.Date; import java.util.Date;
import java.util.List;
import java.util.Map; import java.util.Map;
@Mapper @Mapper
@ -32,56 +30,56 @@ public interface BpmMessageConvert {
/** /**
* * @param openId 微信小程序唯一id
* @param openId 微信小程序唯一id
* @param processInstanceName 流程名称 * @param processInstanceName 流程名称
* @param result 审批结果 * @param result 审批结果
* @param reason 审批原因 * @param reason 审批原因
* @param miniProgramState 小程序的状态 * @param miniProgramState 小程序的状态
* @return * @return
*/ */
default SubscribeMessageReqDTO convertApprovalResultNotification(String openId, String processInstanceName, String time, String result, String reason, String miniProgramState) { default SubscribeMessageReqDTO convertApprovalResultNotification(String openId, String processInstanceName, String time, String result, String reason, String processInstanceId,
SubscribeMessageReqDTO message = new SubscribeMessageReqDTO() ; String miniProgramState) {
message.setToUser(openId) ; SubscribeMessageReqDTO message = new SubscribeMessageReqDTO();
message.setTemplateId("OnJjp5pdjG1PHMoELYaqp3Xq8jWZ5E6ndO0clEIQ4tk") ; message.setToUser(openId);
message.setTemplateId("OnJjp5pdjG1PHMoELYaqp3Xq8jWZ5E6ndO0clEIQ4tk");
//审批类型 //审批类型
MsgData processType = new MsgData(); MsgData processType = new MsgData();
processType.setName("thing1") ; processType.setName("thing1");
processType.setValue(processInstanceName) ; processType.setValue(processInstanceName);
message.addData(processType); message.addData(processType);
//发起时间 //发起时间
MsgData createTime = new MsgData(); MsgData createTime = new MsgData();
createTime.setName("time2") ; createTime.setName("time2");
createTime.setValue(time) ; createTime.setValue(time);
message.addData(createTime); message.addData(createTime);
//审批时间 //审批时间
MsgData approvalTime = new MsgData(); MsgData approvalTime = new MsgData();
approvalTime.setName("time7") ; approvalTime.setName("time7");
approvalTime.setValue(DateUtils.dateFormat(new Date(),DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)) ; approvalTime.setValue(DateUtils.dateFormat(new Date(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND));
message.addData(approvalTime); message.addData(approvalTime);
//审批结果 //审批结果
MsgData approvalResult = new MsgData(); MsgData approvalResult = new MsgData();
approvalResult.setName("phrase3") ; approvalResult.setName("phrase3");
approvalResult.setValue(result) ; approvalResult.setValue(result);
message.addData(approvalResult); message.addData(approvalResult);
if(reason != null ) { if (reason != null) {
MsgData approvalReason = new MsgData(); MsgData approvalReason = new MsgData();
approvalReason.setName("thing12") ; approvalReason.setName("thing12");
approvalReason.setValue(reason) ; approvalReason.setValue(reason);
message.addData(approvalReason); message.addData(approvalReason);
} }
message.setMiniprogramState(miniProgramState) ; message.setMiniprogramState(miniProgramState);
message.setPage("pages/home/index?id=" + processInstanceId);
return message; return message;
} }
/** /**
* * @param openId 微信小程序唯一id
* @param openId 微信小程序唯一id
* @param processInstanceName 流程名称 * @param processInstanceName 流程名称
* @param startUserNickname 申请人 * @param startUserNickname 申请人
* @param time 申请时间 * @param time 申请时间
@ -89,35 +87,36 @@ public interface BpmMessageConvert {
* @param miniProgramState 小程序的状态 * @param miniProgramState 小程序的状态
* @return * @return
*/ */
default SubscribeMessageReqDTO convertProcessToDoReminder(String openId, String processInstanceName,String startUserNickname, String time, String schedule, String miniProgramState) { default SubscribeMessageReqDTO convertProcessToDoReminder(String openId, String processInstanceName, String startUserNickname, String time, String schedule, String processInstanceId, String miniProgramState) {
SubscribeMessageReqDTO message = new SubscribeMessageReqDTO() ; SubscribeMessageReqDTO message = new SubscribeMessageReqDTO();
message.setToUser(openId) ; message.setToUser(openId);
message.setTemplateId("3cP4btlFSSiZk65qVewN_WoT_bh0OfUkYzzTsADOrR4") ; message.setTemplateId("3cP4btlFSSiZk65qVewN_WoT_bh0OfUkYzzTsADOrR4");
//待办标题 //待办标题
MsgData processType = new MsgData(); MsgData processType = new MsgData();
processType.setName("thing1") ; processType.setName("thing1");
processType.setValue("您收到了一条新的待办任务:"+processInstanceName) ; processType.setValue("您收到了一条新的待办任务:" + processInstanceName);
message.addData(processType); message.addData(processType);
//申请人 //申请人
MsgData applicant = new MsgData(); MsgData applicant = new MsgData();
applicant.setName("thing4") ; applicant.setName("thing4");
applicant.setValue(startUserNickname) ; applicant.setValue(startUserNickname);
message.addData(applicant); message.addData(applicant);
//申请时间 //申请时间
MsgData createTime = new MsgData(); MsgData createTime = new MsgData();
createTime.setName("time5") ; createTime.setName("time5");
createTime.setValue(time) ; createTime.setValue(time);
message.addData(createTime); message.addData(createTime);
//当前进度 //当前进度
MsgData currentSchedule = new MsgData(); MsgData currentSchedule = new MsgData();
currentSchedule.setName("thing6") ; currentSchedule.setName("thing6");
currentSchedule.setValue(schedule) ; currentSchedule.setValue(schedule);
message.addData(currentSchedule); message.addData(currentSchedule);
message.setMiniprogramState(miniProgramState) ; message.setMiniprogramState(miniProgramState);
message.setPage("pages/bpm/task/todo/examineApprove?id=" + processInstanceId);
return message; return message;
} }
} }

View File

@ -1,6 +1,5 @@
package cn.iocoder.yudao.module.bpm.service.message; package cn.iocoder.yudao.module.bpm.service.message;
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
import cn.iocoder.yudao.framework.web.config.WebProperties; import cn.iocoder.yudao.framework.web.config.WebProperties;
import cn.iocoder.yudao.module.bpm.convert.message.BpmMessageConvert; import cn.iocoder.yudao.module.bpm.convert.message.BpmMessageConvert;
import cn.iocoder.yudao.module.bpm.enums.message.BpmMessageEnum; import cn.iocoder.yudao.module.bpm.enums.message.BpmMessageEnum;
@ -17,7 +16,8 @@ import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.*; import java.util.HashMap;
import java.util.Map;
/** /**
* BPM 消息 Service 实现类 * BPM 消息 Service 实现类
@ -36,7 +36,7 @@ public class BpmMessageServiceImpl implements BpmMessageService {
private NotifyMessageSendApi notifyMessageSendApi; private NotifyMessageSendApi notifyMessageSendApi;
@Resource @Resource
private SubscribeMessageSendApi subscribeMessageSendApi ; private SubscribeMessageSendApi subscribeMessageSendApi;
@Resource @Resource
private WebProperties webProperties; private WebProperties webProperties;
@ -53,15 +53,16 @@ public class BpmMessageServiceImpl implements BpmMessageService {
BpmMessageEnum.PROCESS_INSTANCE_APPROVE.getSmsTemplateCode(), templateParams)); BpmMessageEnum.PROCESS_INSTANCE_APPROVE.getSmsTemplateCode(), templateParams));
//发送审批结果通知 //发送审批结果通知
String openId = getUserOpenId(reqDTO.getStartUserId()) ; String openId = getUserOpenId(reqDTO.getStartUserId());
if(openId != null ) { if (openId != null) {
subscribeMessageSendApi.sendApprovalResultNotification( subscribeMessageSendApi.sendApprovalResultNotification(
BpmMessageConvert.INSTANCE.convertApprovalResultNotification( BpmMessageConvert.INSTANCE.convertApprovalResultNotification(
openId,reqDTO.getProcessInstanceName(), reqDTO.getCreateTime(), "通过", reqDTO.getReason(), openId, reqDTO.getProcessInstanceName(), reqDTO.getCreateTime(), "通过", reqDTO.getReason(),
reqDTO.getProcessInstanceId(),
/** /**
* 跳转小程序类型developer为开发版trial为体验版formal为正式版默认为正式版 * 跳转小程序类型developer为开发版trial为体验版formal为正式版默认为正式版
*/ */
"formal") ) ; "formal"));
} }
} }
@ -78,15 +79,16 @@ public class BpmMessageServiceImpl implements BpmMessageService {
reqDTO.getStartUserId(), BpmMessageEnum.PROCESS_INSTANCE_REJECT.getSmsTemplateCode(), templateParams)); reqDTO.getStartUserId(), BpmMessageEnum.PROCESS_INSTANCE_REJECT.getSmsTemplateCode(), templateParams));
// //发送审批结果通知 // //发送审批结果通知
String openId = getUserOpenId(reqDTO.getStartUserId()) ; String openId = getUserOpenId(reqDTO.getStartUserId());
if(openId != null ) { if (openId != null) {
subscribeMessageSendApi.sendApprovalResultNotification( subscribeMessageSendApi.sendApprovalResultNotification(
BpmMessageConvert.INSTANCE.convertApprovalResultNotification( BpmMessageConvert.INSTANCE.convertApprovalResultNotification(
openId,reqDTO.getProcessInstanceName(),reqDTO.getCreateTime(),"不通过", reqDTO.getReason(), openId, reqDTO.getProcessInstanceName(), reqDTO.getCreateTime(), "不通过", reqDTO.getReason(),
reqDTO.getProcessInstanceId(),
/** /**
* 跳转小程序类型developer为开发版trial为体验版formal为正式版默认为正式版 * 跳转小程序类型developer为开发版trial为体验版formal为正式版默认为正式版
*/ */
"formal") ) ; "formal"));
} }
} }
@ -95,10 +97,10 @@ public class BpmMessageServiceImpl implements BpmMessageService {
public void sendMessageWhenTaskAssigned(BpmMessageSendWhenTaskCreatedReqDTO reqDTO) { public void sendMessageWhenTaskAssigned(BpmMessageSendWhenTaskCreatedReqDTO reqDTO) {
//任务分配 //任务分配
Long startUserId = reqDTO.getStartUserId(); //流程发起人 Long startUserId = reqDTO.getStartUserId(); //流程发起人
Long assigneeUserId = reqDTO.getAssigneeUserId() ; //任务审批人 Long assigneeUserId = reqDTO.getAssigneeUserId(); //任务审批人
String taskName = reqDTO.getTaskName() ; String taskName = reqDTO.getTaskName();
//如果流程发起人和任务审批是同一个人 那么不发送站内信否则就发送 //如果流程发起人和任务审批是同一个人 那么不发送站内信否则就发送
if(!assigneeUserId.toString().equals(startUserId.toString())) { if (!assigneeUserId.toString().equals(startUserId.toString())) {
Map<String, Object> templateParams = new HashMap<>(); Map<String, Object> templateParams = new HashMap<>();
templateParams.put("processInstanceName", reqDTO.getProcessInstanceName()); templateParams.put("processInstanceName", reqDTO.getProcessInstanceName());
// templateParams.put("taskName", reqDTO.getTaskName()); // templateParams.put("taskName", reqDTO.getTaskName());
@ -112,11 +114,12 @@ public class BpmMessageServiceImpl implements BpmMessageService {
reqDTO.getAssigneeUserId(), BpmMessageEnum.TASK_ASSIGNED.getSmsTemplateCode(), templateParams)); reqDTO.getAssigneeUserId(), BpmMessageEnum.TASK_ASSIGNED.getSmsTemplateCode(), templateParams));
//微信小程序订阅消息 //微信小程序订阅消息
//发送OA流程待办提醒 //发送OA流程待办提醒
String openId = getUserOpenId(reqDTO.getStartUserId()) ; //只有在微信小程序登陆过用户才会有openid String openId = getUserOpenId(reqDTO.getStartUserId()); //只有在微信小程序登陆过用户才会有openid
if(openId != null ) { if (openId != null) {
subscribeMessageSendApi.sendProcessToDoReminder( BpmMessageConvert.INSTANCE.convertProcessToDoReminder( subscribeMessageSendApi.sendProcessToDoReminder(BpmMessageConvert.INSTANCE.convertProcessToDoReminder(
openId, reqDTO.getProcessInstanceName(), reqDTO.getStartUserNickname(),reqDTO.getCreateTime(),reqDTO.getSchedule() , openId, reqDTO.getProcessInstanceName(), reqDTO.getStartUserNickname(), reqDTO.getCreateTime(), reqDTO.getSchedule(),
"formal" ) ) ; reqDTO.getProcessInstanceId(),
"formal"));
} }
} }
} }
@ -127,10 +130,11 @@ public class BpmMessageServiceImpl implements BpmMessageService {
} }
@Resource @Resource
private AdminUserApi adminUserApi ; private AdminUserApi adminUserApi;
private String getUserOpenId(Long userId) { private String getUserOpenId(Long userId) {
AdminUserRespDTO adminUserRespDTO = adminUserApi.getUser(userId).getData(); AdminUserRespDTO adminUserRespDTO = adminUserApi.getUser(userId).getData();
String openId = adminUserRespDTO.getOpenId() ; String openId = adminUserRespDTO.getOpenId();
return openId ; return openId;
} }
} }

View File

@ -69,7 +69,7 @@ public class BpmOAProcurePayServiceImpl extends BpmOABaseService implements BpmO
private BpmProcessInstanceService bpmProcessInstanceService; private BpmProcessInstanceService bpmProcessInstanceService;
/** /**
* OA 请假对应的流程定义 KEY * OA 采购支付对应的流程定义 KEY
*/ */
public static final String PROCESS_KEY = "oa_procure_pay"; public static final String PROCESS_KEY = "oa_procure_pay";

View File

@ -40,7 +40,7 @@ public class BpmOAProcureServiceImpl extends BpmOABaseService implements BpmOAPr
@Resource @Resource
private BpmProcessInstanceApi processInstanceApi; private BpmProcessInstanceApi processInstanceApi;
/** /**
* OA 对应的流程定义 KEY * OA 采购申请对应的流程定义 KEY
*/ */
public static final String PROCESS_KEY = "oa_procure"; public static final String PROCESS_KEY = "oa_procure";

View File

@ -30,9 +30,13 @@ public class SubscribeMessageReqDTO {
@Schema(description = "跳转小程序类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "developer为开发版trial为体验版formal为正式版默认为正式版") @Schema(description = "跳转小程序类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "developer为开发版trial为体验版formal为正式版默认为正式版")
@NotNull(message = "跳转小程序类型不能为空") @NotNull(message = "跳转小程序类型不能为空")
private String miniprogramState = "formal" ; private String miniprogramState = "formal";
@Schema(description = "小程序页面地址", requiredMode = Schema.RequiredMode.REQUIRED, example = "pages/home/index")
@NotNull(message = "小程序页面地址不能为空")
private String page;
public void addData(MsgData data) { public void addData(MsgData data) {
this.data.add(data) ; this.data.add(data);
} }
} }

View File

@ -1,29 +1,15 @@
package cn.iocoder.yudao.module.system.api.subscribe; package cn.iocoder.yudao.module.system.api.subscribe;
import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.binarywang.wx.miniapp.api.WxMaSubscribeService;
import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl;
import cn.binarywang.wx.miniapp.bean.WxMaSubscribeMessage; import cn.binarywang.wx.miniapp.bean.WxMaSubscribeMessage;
import cn.binarywang.wx.miniapp.config.impl.WxMaRedisBetterConfigImpl;
import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.util.cache.CacheUtils;
import cn.iocoder.yudao.module.system.api.subscribe.dto.MsgData; import cn.iocoder.yudao.module.system.api.subscribe.dto.MsgData;
import cn.iocoder.yudao.module.system.api.subscribe.dto.SubscribeMessageReqDTO; import cn.iocoder.yudao.module.system.api.subscribe.dto.SubscribeMessageReqDTO;
import cn.iocoder.yudao.module.system.service.social.SocialClientService; import cn.iocoder.yudao.module.system.service.social.SocialClientService;
import com.binarywang.spring.starter.wxjava.miniapp.properties.WxMaProperties;
import com.binarywang.spring.starter.wxjava.mp.properties.WxMpProperties;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
import lombok.SneakyThrows; import lombok.SneakyThrows;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.common.redis.RedisTemplateWxRedisOps;
import me.chanjar.weixin.mp.api.WxMpService;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.time.Duration;
import java.util.List; import java.util.List;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
@ -36,7 +22,7 @@ import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
*/ */
@RestController // 提供 RESTful API 接口 Feign 调用 @RestController // 提供 RESTful API 接口 Feign 调用
@Validated @Validated
public class SubscribeMessageSendApiImpl implements SubscribeMessageSendApi{ public class SubscribeMessageSendApiImpl implements SubscribeMessageSendApi {
@Resource @Resource
private SocialClientService socialClientService; private SocialClientService socialClientService;
@ -55,21 +41,21 @@ public class SubscribeMessageSendApiImpl implements SubscribeMessageSendApi{
return success(1L); return success(1L);
} }
private WxMaSubscribeMessage initWxMaSubscribeMessage( SubscribeMessageReqDTO reqDTO ) { private WxMaSubscribeMessage initWxMaSubscribeMessage(SubscribeMessageReqDTO reqDTO) {
WxMaSubscribeMessage message = WxMaSubscribeMessage.builder() WxMaSubscribeMessage message = WxMaSubscribeMessage.builder()
.toUser(reqDTO.getToUser()) .toUser(reqDTO.getToUser())
.templateId(reqDTO.getTemplateId()) .templateId(reqDTO.getTemplateId())
.build(); .build();
message.setMiniprogramState(reqDTO.getMiniprogramState()); message.setMiniprogramState(reqDTO.getMiniprogramState());
List<MsgData> dataList = reqDTO.getData() ; List<MsgData> dataList = reqDTO.getData();
for (MsgData msgData : dataList) { for (MsgData msgData : dataList) {
WxMaSubscribeMessage.MsgData wxMsgData = new WxMaSubscribeMessage.MsgData() ; WxMaSubscribeMessage.MsgData wxMsgData = new WxMaSubscribeMessage.MsgData();
wxMsgData.setName(msgData.getName()) ; wxMsgData.setName(msgData.getName());
wxMsgData.setValue(msgData.getValue()) ; wxMsgData.setValue(msgData.getValue());
message.addData(wxMsgData) ; message.addData(wxMsgData);
} }
message.setPage("pages/home/index") ; message.setPage(reqDTO.getPage());
return message ; return message;
} }
} }