@NotNull | @NotNull | ||||
@Column(name = "SEND_TIME") | @Column(name = "SEND_TIME") | ||||
private LocalDateTime sendTime;//发送时间 | private LocalDateTime sendTime;//发送时间 | ||||
@NotBlank | |||||
@Size(max = 32) | @Size(max = 32) | ||||
@Column(name = "APPLY_ID") | @Column(name = "APPLY_ID") | ||||
private String applyId;//主表id | private String applyId;//主表id |
import cn.com.taiji.core.model.comm.protocol.SignServiceSystem; | import cn.com.taiji.core.model.comm.protocol.SignServiceSystem; | ||||
import cn.com.taiji.core.model.comm.protocol.SignServiceType; | import cn.com.taiji.core.model.comm.protocol.SignServiceType; | ||||
import cn.com.taiji.core.model.comm.protocol.ias.IasServiceType; | |||||
public enum MsgwServiceSystem implements SignServiceSystem { | public enum MsgwServiceSystem implements SignServiceSystem { | ||||
SEND("send", "消息发送接口", "/send/api/json", "/send/common/binapi/") { | SEND("send", "消息发送接口", "/send/api/json", "/send/common/binapi/") { | ||||
public List<SignServiceType> listAllServices() { | public List<SignServiceType> listAllServices() { | ||||
return Arrays.asList(IasServiceType.values()); | |||||
return Arrays.asList(MsgwServiceType.values()); | |||||
} | } | ||||
}; | }; | ||||
implementation "${groupname}:sample-protocol:1.0.0-SNAPSHOT" | implementation "${groupname}:sample-protocol:1.0.0-SNAPSHOT" | ||||
implementation "${groupname}:ias-protocol:1.0.0-SNAPSHOT" | implementation "${groupname}:ias-protocol:1.0.0-SNAPSHOT" | ||||
implementation "${groupname}:ats-protocol:1.0.0-SNAPSHOT" | implementation "${groupname}:ats-protocol:1.0.0-SNAPSHOT" | ||||
implementation "${groupname}:msgw-protocol:1.0.0-SNAPSHOT" | |||||
implementation('cn.com.taiji.common:sso-client:2.3.10.7') | implementation('cn.com.taiji.common:sso-client:2.3.10.7') | ||||
implementation "org.springframework.boot:spring-boot-starter-security" | implementation "org.springframework.boot:spring-boot-starter-security" | ||||
implementation "com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-discovery" | implementation "com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-discovery" |
@Setter | @Setter | ||||
public class MessageSendDetailsAddRequestDto extends AbstractStaffBizRequestDTO { | public class MessageSendDetailsAddRequestDto extends AbstractStaffBizRequestDTO { | ||||
@NotBlank | |||||
private String applyId;//主表id | private String applyId;//主表id | ||||
private String modelId;//模板id | private String modelId;//模板id | ||||
@NotNull | @NotNull | ||||
private LocalDateTime sendTime;// 发送时间 | private LocalDateTime sendTime;// 发送时间 | ||||
@NotBlank | @NotBlank | ||||
private String title;//发送标题 | private String title;//发送标题 | ||||
@NotBlank | |||||
private String requestClassName;//发送类名 | private String requestClassName;//发送类名 | ||||
@NotNull | @NotNull | ||||
private MessageResult sendResult;//发送结果 | private MessageResult sendResult;//发送结果 |
package cn.com.taiji.msgw.manager; | |||||
import javax.annotation.PostConstruct; | |||||
import cn.com.taiji.core.model.comm.protocol.msgw.MsgwServiceSystem; | |||||
import cn.com.taiji.core.model.comm.protocol.msgw.MsgwServiceType; | |||||
import org.springframework.beans.factory.annotation.Autowired; | |||||
import org.springframework.stereotype.Service; | |||||
import cn.com.taiji.core.manager.comm.AbstractCommHandleManager; | |||||
import cn.com.taiji.core.model.comm.protocol.ias.IasServiceType; | |||||
import cn.com.taiji.msgw.manager.handler.SendServiceHandler; | |||||
/** | |||||
* | |||||
* @author Peream <br> | |||||
* Create Time:2019年7月28日 下午3:35:29<br> | |||||
* @since 1.0 | |||||
* @version 1.0 | |||||
*/ | |||||
@Service | |||||
public class MyCommHandleManager extends AbstractCommHandleManager { | |||||
@Autowired | |||||
private SendServiceHandler sendServiceHandler; | |||||
public MyCommHandleManager() { | |||||
super(MsgwServiceSystem.SEND); | |||||
} | |||||
@PostConstruct | |||||
public void init() { | |||||
registerJsonService(sendServiceHandler); | |||||
} | |||||
@Override | |||||
protected MsgwServiceType getServiceType(String ifCode) { | |||||
return MsgwServiceType.fromIfCode(ifCode); | |||||
} | |||||
} |
package cn.com.taiji.msgw.manager.handler; | |||||
import cn.com.taiji.common.manager.net.http.ServiceHandleException; | |||||
import cn.com.taiji.core.manager.comm.AbstractCommServiceHandler; | |||||
import cn.com.taiji.core.model.comm.protocol.AbstractSignTypeRequest; | |||||
import cn.com.taiji.core.model.comm.protocol.SignServiceCommand; | |||||
import cn.com.taiji.core.model.comm.protocol.msgw.MsgwServiceType; | |||||
public abstract class AbstractMsgwServiceHandler<C extends SignServiceCommand> | |||||
extends AbstractCommServiceHandler<MsgwServiceType> { | |||||
protected AbstractMsgwServiceHandler(MsgwServiceType serviceType) { | |||||
super(serviceType); | |||||
} | |||||
@Override | |||||
public <T extends AbstractSignTypeRequest<?>> void baseValidate(T t) throws ServiceHandleException { | |||||
} | |||||
} |
package cn.com.taiji.msgw.manager.handler; | |||||
import org.springframework.beans.factory.annotation.Autowired; | |||||
import org.springframework.stereotype.Service; | |||||
import com.zgglyun.common.model.AbstractHttpRequestInfo; | |||||
import cn.com.taiji.common.manager.net.http.ServiceHandleException; | |||||
import cn.com.taiji.common.model.file.FileProtocolSystemError; | |||||
import cn.com.taiji.core.model.comm.protocol.AbstractSignTypeRequest; | |||||
import cn.com.taiji.core.model.comm.protocol.AbstractSignTypeResponse; | |||||
import cn.com.taiji.core.model.comm.protocol.SignJsonRequest; | |||||
import cn.com.taiji.core.model.comm.protocol.msgw.MsgwServiceType; | |||||
import cn.com.taiji.core.model.comm.protocol.msgw.send.MsgwSendCmd; | |||||
import cn.com.taiji.core.model.comm.protocol.msgw.send.MsgwSmsSendRequest; | |||||
import cn.com.taiji.core.model.comm.protocol.msgw.send.MsgwWxMiniSendRequest; | |||||
import cn.com.taiji.core.model.comm.protocol.msgw.send.MsgwWxMpSendRequest; | |||||
import cn.com.taiji.msgw.manager.universalSend.UniversalSendManager; | |||||
/** | |||||
* | |||||
* @author Peream <br> | |||||
* Create Time:2019年7月28日 下午4:45:09<br> | |||||
* @since 1.0 | |||||
* @version 1.0 | |||||
*/ | |||||
@Service | |||||
public class SendServiceHandler extends AbstractMsgwServiceHandler<MsgwSendCmd> { | |||||
public SendServiceHandler() { | |||||
super(MsgwServiceType.NOTICE); | |||||
} | |||||
@Autowired | |||||
private UniversalSendManager universalSendManager; | |||||
@Override | |||||
protected <T extends AbstractSignTypeRequest<?>> AbstractSignTypeResponse handleInternal(T request, | |||||
SignJsonRequest jsonReq, AbstractHttpRequestInfo reqInfo) throws ServiceHandleException { | |||||
MsgwSendCmd cmd = MsgwSendCmd.fromIfCode(jsonReq.getIfCode()); | |||||
switch (cmd) { | |||||
case SMS: | |||||
return universalSendManager.smsDirectSend((MsgwSmsSendRequest) request); | |||||
case WXMINI: | |||||
return universalSendManager.wxMiniDirectSend((MsgwWxMiniSendRequest) request); | |||||
case WXMP: | |||||
return universalSendManager.wxMpDirectSend((MsgwWxMpSendRequest) request); | |||||
default: | |||||
throw FileProtocolSystemError.NOT_SUPPORT.toHandleException(jsonReq.getIfCode()); | |||||
} | |||||
} | |||||
} |
package cn.com.taiji.msgw.manager.universalSend; | |||||
import cn.com.taiji.core.model.comm.protocol.msgw.send.*; | |||||
public interface UniversalSendManager { | |||||
// 短信单个发送 | |||||
MsgwSmsSendResponse smsDirectSend(MsgwSmsSendRequest request); | |||||
// 微信小程序单个发送 | |||||
MsgwWxMiniSendResponse wxMiniDirectSend(MsgwWxMiniSendRequest request); | |||||
// 微信公众号单个发送 | |||||
MsgwWxMpSendResponse wxMpDirectSend(MsgwWxMpSendRequest request); | |||||
// 邮件单个发送 | |||||
} |
package cn.com.taiji.msgw.manager.universalSend; | |||||
import java.time.LocalDateTime; | |||||
import org.springframework.beans.factory.annotation.Autowired; | |||||
import org.springframework.stereotype.Service; | |||||
import cn.com.taiji.core.entity.dict.msgw.MessageResult; | |||||
import cn.com.taiji.core.entity.dict.msgw.MessageType; | |||||
import cn.com.taiji.core.entity.msgw.MsgwSendDetails; | |||||
import cn.com.taiji.core.model.comm.protocol.msgw.send.*; | |||||
import cn.com.taiji.msgw.dto.MessageSendDetailsAddRequestDto; | |||||
import cn.com.taiji.msgw.manager.AbstractCommManager; | |||||
import cn.com.taiji.msgw.manager.importReview.MessageImportManager; | |||||
import cn.com.taiji.msgw.manager.messageWaitSend.MessageWaitSendManager; | |||||
@Service | |||||
public class UniversalSendManagerImpl extends AbstractCommManager implements UniversalSendManager { | |||||
@Autowired | |||||
private MessageImportManager importManager; | |||||
@Autowired | |||||
private MessageWaitSendManager sendManager; | |||||
@Override | |||||
public MsgwSmsSendResponse smsDirectSend(MsgwSmsSendRequest request) { | |||||
MessageSendDetailsAddRequestDto addRequest = new MessageSendDetailsAddRequestDto(); | |||||
addRequest.setMessageType(MessageType.SHORT); | |||||
addRequest.setReceiverId(request.getMobile()); | |||||
addRequest.setSendTime(LocalDateTime.now()); | |||||
addRequest.setTitle(request.getTitle()); | |||||
addRequest.setSendResult(MessageResult.WAIT); | |||||
addRequest.setRequestDataJson(request.toJson()); | |||||
// 创建子表 | |||||
MsgwSendDetails sendDetails = importManager.addSendDetail(addRequest); | |||||
// 发送 | |||||
sendManager.sendMessageByQtkMessageAndQuartz(sendDetails); | |||||
return new MsgwSmsSendResponse(); | |||||
} | |||||
@Override | |||||
public MsgwWxMiniSendResponse wxMiniDirectSend(MsgwWxMiniSendRequest request) { | |||||
MessageSendDetailsAddRequestDto addRequest = new MessageSendDetailsAddRequestDto(); | |||||
addRequest.setModelId(request.getTemplateId()); | |||||
addRequest.setMessageType(MessageType.MINI_PROGRAM); | |||||
addRequest.setReceiverId(request.getWxOpenId()); | |||||
addRequest.setSendTime(LocalDateTime.now()); | |||||
addRequest.setTitle(request.getTitle()); | |||||
addRequest.setSendResult(MessageResult.WAIT); | |||||
addRequest.setRequestDataJson(request.toJson()); | |||||
// 创建子表 | |||||
MsgwSendDetails sendDetails = importManager.addSendDetail(addRequest); | |||||
// 发送 | |||||
sendManager.sendMessageByQtkMessageAndQuartz(sendDetails); | |||||
return new MsgwWxMiniSendResponse(); | |||||
} | |||||
@Override | |||||
public MsgwWxMpSendResponse wxMpDirectSend(MsgwWxMpSendRequest request) { | |||||
MessageSendDetailsAddRequestDto addRequest = new MessageSendDetailsAddRequestDto(); | |||||
addRequest.setModelId(request.getTemplateId()); | |||||
addRequest.setMessageType(MessageType.OFFICIAL_ACCOUNTS); | |||||
addRequest.setReceiverId(request.getMpOpenId()); | |||||
addRequest.setSendTime(LocalDateTime.now()); | |||||
addRequest.setTitle(request.getTitle()); | |||||
addRequest.setSendResult(MessageResult.WAIT); | |||||
addRequest.setRequestDataJson(request.toJson()); | |||||
// 创建子表 | |||||
MsgwSendDetails sendDetails = importManager.addSendDetail(addRequest); | |||||
// 发送 | |||||
sendManager.sendMessageByQtkMessageAndQuartz(sendDetails); | |||||
return new MsgwWxMpSendResponse(); | |||||
} | |||||
} |
/* | |||||
* Date: 2015年4月9日 author: Peream (peream@gmail.com) | |||||
* | |||||
*/ | |||||
package cn.com.taiji.msgw.web; | |||||
import java.io.IOException; | |||||
import javax.servlet.http.HttpServletRequest; | |||||
import javax.servlet.http.HttpServletResponse; | |||||
import org.apache.skywalking.apm.toolkit.trace.Tag; | |||||
import org.apache.skywalking.apm.toolkit.trace.Trace; | |||||
import org.apache.skywalking.apm.toolkit.trace.TraceContext; | |||||
import org.springframework.beans.factory.annotation.Autowired; | |||||
import org.springframework.web.bind.annotation.*; | |||||
import cn.com.taiji.core.manager.comm.BaseJsonPostController; | |||||
import cn.com.taiji.core.manager.comm.JsonPostHandleManager; | |||||
import cn.com.taiji.core.model.comm.protocol.SignJsonRequest; | |||||
/** | |||||
* | |||||
* @author Peream <br> | |||||
* Create Time:2015年4月9日 下午7:08:46<br> | |||||
* <a href="mailto:peream@gmail.com">peream@gmail.com</a> | |||||
* @since 1.0 | |||||
* @version 1.0 | |||||
*/ | |||||
@RestController | |||||
public class JsonPostServiceController extends BaseJsonPostController { | |||||
@Autowired | |||||
private JsonPostHandleManager handleManager; | |||||
@CrossOrigin | |||||
@RequestMapping(value = "/api/json", method = RequestMethod.POST) | |||||
public void jsonPostRequest(@RequestBody SignJsonRequest req, HttpServletRequest request, HttpServletResponse response) | |||||
throws IOException { | |||||
response.setCharacterEncoding("UTF-8"); | |||||
super.handleComm(req, req.getReqId(), handleManager, request, response); | |||||
} | |||||
@Trace | |||||
@Tag(key = "req", value = "arg[0]") | |||||
@Tag(key = "reqId", value = "arg[1]") | |||||
@CrossOrigin | |||||
@RequestMapping(value = "/api/json/{reqId}", method = RequestMethod.POST) | |||||
public void jsonPostRequest(@RequestBody SignJsonRequest req, @PathVariable("reqId") String reqId, | |||||
HttpServletRequest request, HttpServletResponse response) throws IOException { | |||||
String traceId = TraceContext.traceId(); | |||||
logger.info("traceId:{},jsonReq:{}",traceId,req); | |||||
response.setCharacterEncoding("UTF-8"); | |||||
super.handleComm(req, req.getReqId(), handleManager, request, response); | |||||
} | |||||
} |