diff --git a/service/src/main/java/com/sv/service/api/MemberLessonTicketService.java b/service/src/main/java/com/sv/service/api/MemberLessonTicketService.java index 19cf9b1..9588b30 100644 --- a/service/src/main/java/com/sv/service/api/MemberLessonTicketService.java +++ b/service/src/main/java/com/sv/service/api/MemberLessonTicketService.java @@ -9,6 +9,7 @@ import com.sv.dto.api.wechat.OrderPaySignResponse; import com.sv.entity.*; import com.sv.exception.api.ExceptionCodeTemplate; import com.sv.mapper.MemberLessonTicketMapper; +import com.sv.service.api.util.AsyncTaskUtil; import com.sv.service.api.util.DateUtilCard; import com.sv.service.common.RedisLock; import com.ydd.framework.core.common.Pagination; @@ -28,6 +29,7 @@ import javax.annotation.Resource; import java.math.BigDecimal; import java.text.DecimalFormat; import java.time.LocalTime; +import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; @@ -364,7 +366,7 @@ public class MemberLessonTicketService extends BaseServiceImpl { // 3.创建用户预约的场馆课程票号 orderSn = orderService.createSn(); //预约课程支付订单号 - createMemberLessonTicket(memberId, tickets, lessonTicketOrderDTO.getLessonId(), orderSn, MemberLessonTicketTypeEnum.MEMBER_CARD.value, platformId, lessonTicketOrderDTO.getMemberCardId()); + List memberLessonTicket = createMemberLessonTicket(memberId, tickets, lessonTicketOrderDTO.getLessonId(), orderSn, MemberLessonTicketTypeEnum.MEMBER_CARD.value, platformId, lessonTicketOrderDTO.getMemberCardId()); // 4.创建订单记录 // 订单总价格 @@ -377,25 +379,31 @@ public class MemberLessonTicketService extends BaseServiceImpl { // 6.修改课程销售数量 venueLessonService.updateSaleNumById(lessonTicketOrderDTO.getLessonId(), lessonTicketOrderDTO.getNum(), venueLesson); + sendMessageToVenue(memberLessonTicket); } return orderSn; } + /* 发送消息给运动员*/ + private void sendMessageToVenue(List memberLessonTickets) { + // TODO 需要发送通知 +// AsyncTaskUtil.INSTANCE.submit(); + } /** * 创建用户预约的场馆课程票号记录 */ @Transactional - public void createMemberLessonTicket(Integer memberId, List tickets, Integer lessonId, String orderSn, + public List createMemberLessonTicket(Integer memberId, List tickets, Integer lessonId, String orderSn, Integer payType, Integer platformId, Integer memberCardId) { + List lessonTicketList = new ArrayList<>(); for (VenueLessonTicket ticket : tickets) { MemberLessonTicket memberLessonTicket = new MemberLessonTicket(); memberLessonTicket.setVeneuType(ticket.getVenueType()); memberLessonTicket.setVenueId(ticket.getVenueId()); memberLessonTicket.setTicketId(ticket.getId()); - memberLessonTicket.setLessonId(ticket.getId()); memberLessonTicket.setTicket(ticket.getTicket()); memberLessonTicket.setLessonId(ticket.getLessonId()); memberLessonTicket.setMemberId(memberId); @@ -407,7 +415,9 @@ public class MemberLessonTicketService extends BaseServiceImpl { } memberLessonTicket.setPlatformId(platformId); memberLessonTicketMapper.insert(memberLessonTicket); + lessonTicketList.add(memberLessonTicket); } + return lessonTicketList; } /** @@ -429,6 +439,7 @@ public class MemberLessonTicketService extends BaseServiceImpl { Integer lessonId = memberLessonTickets.get(0).getLessonId(); memberMoneyLogService.create(order.getMemberId(), order.getPlatformId(), MoneyLogEnum.BUY_LESSON.value, order.getPrice().multiply(new BigDecimal(-1)), PayTypeEnum.WEI_XIN.value, null, null, null, lessonId); + sendMessageToVenue(memberLessonTickets); } /** diff --git a/service/src/main/java/com/sv/service/api/config/NotifyAdminMsgThread.java b/service/src/main/java/com/sv/service/api/config/NotifyAdminMsgThread.java new file mode 100644 index 0000000..fd4668f --- /dev/null +++ b/service/src/main/java/com/sv/service/api/config/NotifyAdminMsgThread.java @@ -0,0 +1,47 @@ +package com.sv.service.api.config; + +import org.springframework.util.StringUtils; + +public class NotifyAdminMsgThread extends Thread{ + + private String openId = ""; + private String webHook = ""; + private String dingSecret = ""; + + public String getOpenId() { + return openId; + } + + public void setOpenId(String openId) { + this.openId = openId; + } + + public String getWebHook() { + return webHook; + } + + public void setWebHook(String webHook) { + this.webHook = webHook; + } + + public String getDingSecret() { + return dingSecret; + } + + public void setDingSecret(String dingSecret) { + this.dingSecret = dingSecret; + } + + public NotifyAdminMsgThread(String openId, String webHook, String dingSecret) { + this.openId = openId; + this.webHook = webHook; + this.dingSecret = dingSecret; + } + + @Override + public void run() { + if (!StringUtils.isEmpty(openId)) { + + } + } +} diff --git a/service/src/main/java/com/sv/service/api/util/AsyncTaskUtil.java b/service/src/main/java/com/sv/service/api/util/AsyncTaskUtil.java new file mode 100644 index 0000000..896f2fc --- /dev/null +++ b/service/src/main/java/com/sv/service/api/util/AsyncTaskUtil.java @@ -0,0 +1,16 @@ +package com.sv.service.api.util; + +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + +public enum AsyncTaskUtil { + + INSTANCE; + + ExecutorService executorService = Executors.newFixedThreadPool(5); + + public void submit(Runnable runnable){ + executorService.submit(runnable); + } + +} diff --git a/service/src/main/java/com/sv/service/api/util/DingTalkSignUtils.java b/service/src/main/java/com/sv/service/api/util/DingTalkSignUtils.java new file mode 100644 index 0000000..1e460ff --- /dev/null +++ b/service/src/main/java/com/sv/service/api/util/DingTalkSignUtils.java @@ -0,0 +1,42 @@ +package com.sv.service.api.util; + +import com.sv.service.common.DingTalkMsg; +import com.sv.service.utils.HttpClientUtils; +import com.ydd.framework.core.common.utils.JsonUtils; +import org.apache.commons.codec.binary.Base64; +import javax.crypto.Mac; +import javax.crypto.spec.SecretKeySpec; +import java.net.URLEncoder; + +public class DingTalkSignUtils { + + private static final String WEBHOOK = "https://oapi.dingtalk.com/robot/send?access_token=4d661fd412a3baa1712bd29ef01d86277fec495441430267df1bbe206337dbfa"; + + private static final String SECRET = "SEC5854845f8d47522d54ef85be26945e1cc78e25b4d0f87f6308cc35637fc58534"; + + private static final String TIME_LINK = "×tamp="; + + private static final String SIGN_LINK = "&sign="; + + private static String signUrl(String webhook) throws Exception { + Long timestamp = System.currentTimeMillis(); + String stringToSign = timestamp + "\n" + SECRET; + Mac mac = Mac.getInstance("HmacSHA256"); + mac.init(new SecretKeySpec(SECRET.getBytes("UTF-8"), "HmacSHA256")); + byte[] signData = mac.doFinal(stringToSign.getBytes("UTF-8")); + String sign = URLEncoder.encode(new String(Base64.encodeBase64(signData)), "UTF-8"); + return webhook + TIME_LINK + timestamp + SIGN_LINK + sign; + } + + public static void sendDingTalk() throws Exception { + DingTalkMsg msg3 = new DingTalkMsg(); + msg3.sendSingleActionCard("预定提醒","您好!系统检测到有用户xiaoming刚刚在场馆**长宁运动馆**预定了时间段1-时间段2的**我的什么什么的**课程,请及时关注。","https://api.hongyutiyu.top/getLessonOrder/46"); + String r3 = HttpClientUtils.doPostJson(signUrl(WEBHOOK), JsonUtils.encode(msg3)); + System.out.println("发送消息=============" + r3); + } + + public static void main(String[] args) throws Exception { + sendDingTalk(); + } + +} diff --git a/service/src/main/java/com/sv/service/api/util/WeiXinSendUtils.java b/service/src/main/java/com/sv/service/api/util/WeiXinSendUtils.java new file mode 100644 index 0000000..fb67055 --- /dev/null +++ b/service/src/main/java/com/sv/service/api/util/WeiXinSendUtils.java @@ -0,0 +1,37 @@ +package com.sv.service.api.util; + +import com.dw.ccm.wechat.base.WeChat; +import com.dw.ccm.wechat.base.WeChatHelper; +import com.dw.ccm.wechat.base.message.response.AccessTokenResponse; +import com.dw.ccm.wechat.base.message.template.Attribute; +import com.dw.ccm.wechat.base.message.template.TemplateMessage; +import org.springframework.util.StringUtils; + +import java.util.HashMap; + +public class WeiXinSendUtils { + + public static void sendCard(String webhook){ + AccessTokenResponse accessToken = WeChatHelper.getAccessToken("wx51d82eba3f5f4858", "d28320bcb885cc208b6fde2253d8663e"); + String token = accessToken.getAccessToken(); + if (!StringUtils.isEmpty(token)){ + WeChat weChat = WeChatHelper.getWeChat(token); + TemplateMessage templateMessage = new TemplateMessage(); + templateMessage.setTemplateId("vPRolOW7D3jnXhT4uqN4FOcIIuHcsHuresbZjlPBg9Y"); + templateMessage.setToUser("o81UzwYksMMqbNJgsOvyjhbk-7b0"); + templateMessage.setUrl(""); + HashMap attr = new HashMap<>(); + attr.put("thing2",new Attribute("啦啦啦德玛西亚","")); + attr.put("thing3",new Attribute("dadasd","")); + attr.put("time5",new Attribute("2014年9月22日","")); + attr.put("phrase7",new Attribute("你好","")); + templateMessage.setAttributes(attr); + weChat.sendTemplate(templateMessage); + } + } + + public static void main(String[] args) { + sendCard(""); + } + +} diff --git a/service/src/main/java/com/sv/service/common/DingTalkMsg.java b/service/src/main/java/com/sv/service/common/DingTalkMsg.java new file mode 100644 index 0000000..265789d --- /dev/null +++ b/service/src/main/java/com/sv/service/common/DingTalkMsg.java @@ -0,0 +1,297 @@ +package com.sv.service.common; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +public class DingTalkMsg implements Serializable { + + private static final String MSG_TEXT = "text"; + private static final String MSG_MARKDOWN = "markdown"; + private static final String MSG_ACTION_CARD = "actionCard"; + + + private String msgtype; + + private DingSendText text; + + private AtPerson at; + + /** + * 无需设置 singleTitle & singleURL + */ + private Markdown markdown; + + private ActionCard actionCard; + + public static String getMsgText() { + return MSG_TEXT; + } + + public static String getMsgMarkdown() { + return MSG_MARKDOWN; + } + + public static String getMsgActionCard() { + return MSG_ACTION_CARD; + } + + public String getMsgtype() { + return msgtype; + } + + public void setMsgtype(String msgtype) { + this.msgtype = msgtype; + } + + public DingSendText getText() { + return text; + } + + public void setText(DingSendText text) { + this.text = text; + } + + public AtPerson getAt() { + return at; + } + + public void setAt(AtPerson at) { + this.at = at; + } + + public Markdown getMarkdown() { + return markdown; + } + + public void setMarkdown(Markdown markdown) { + this.markdown = markdown; + } + + public ActionCard getActionCard() { + return actionCard; + } + + public void setActionCard(ActionCard actionCard) { + this.actionCard = actionCard; + } + + public void setAtPersonByIds(List ids) { + AtPerson atPerson = new AtPerson(); + atPerson.setAtUserIds(ids); + this.at = atPerson; + } + + public void setAtPersonByPhone(List phoneNums) { + AtPerson atPerson = new AtPerson(); + atPerson.setAtMobiles(phoneNums); + this.at = atPerson; + } + + public void setAllAt() { + AtPerson atPerson = new AtPerson(); + atPerson.setAtAll(true); + this.at = atPerson; + } + + public void sendText(String content){ + this.msgtype = MSG_TEXT; + this.text = new DingSendText(content); + } + + public void sendMarkDown(String title,String content){ + this.msgtype = MSG_MARKDOWN; + this.markdown = new Markdown(title,content); + } + + public void sendSingleActionCard(String title,String content,String linkUrl){ + this.msgtype = MSG_ACTION_CARD; + ActionCard actionCard = new ActionCard(); + actionCard.setTitle(title); + actionCard.setText(content); + actionCard.setSingleTitle("阅读全文"); + actionCard.setSingleURL(linkUrl); + this.actionCard = actionCard; + } + + public void sendActionCards(String title,String content){ + this.msgtype = MSG_ACTION_CARD; + ActionCard actionCard = new ActionCard(); + actionCard.setTitle(title); + actionCard.setText(content); + actionCard.setBtnOrientation("1"); + List