16 changed files with 184 additions and 164 deletions
@ -1,130 +0,0 @@ |
|||||||
package co.yixiang.modules.inform; |
|
||||||
|
|
||||||
import cn.hutool.core.util.StrUtil; |
|
||||||
import cn.hutool.json.JSONUtil; |
|
||||||
import cn.iocoder.yudao.framework.common.exception.YshopException; |
|
||||||
import co.yixiang.constant.SystemConfigConstants; |
|
||||||
import co.yixiang.modules.inform.domin.*; |
|
||||||
import co.yixiang.modules.order.service.YxStoreOrderService; |
|
||||||
import co.yixiang.modules.order.service.dto.YxStoreOrderDto; |
|
||||||
import co.yixiang.modules.shop.service.YxSystemConfigService; |
|
||||||
import com.alibaba.fastjson.JSONObject; |
|
||||||
import lombok.SneakyThrows; |
|
||||||
import org.apache.http.HttpStatus; |
|
||||||
import org.apache.http.client.methods.CloseableHttpResponse; |
|
||||||
import org.apache.http.client.methods.HttpPost; |
|
||||||
import org.apache.http.entity.StringEntity; |
|
||||||
import org.apache.http.impl.client.CloseableHttpClient; |
|
||||||
import org.apache.http.impl.client.HttpClients; |
|
||||||
import org.apache.http.util.EntityUtils; |
|
||||||
import org.jsoup.nodes.Element; |
|
||||||
import org.springframework.beans.factory.annotation.Autowired; |
|
||||||
import org.springframework.stereotype.Component; |
|
||||||
|
|
||||||
import java.text.SimpleDateFormat; |
|
||||||
import java.util.ArrayList; |
|
||||||
import java.util.HashMap; |
|
||||||
import java.util.Map; |
|
||||||
|
|
||||||
import org.jsoup.Jsoup; |
|
||||||
import org.jsoup.nodes.Document; |
|
||||||
|
|
||||||
@Component |
|
||||||
public class SendMsgService { |
|
||||||
|
|
||||||
@Autowired |
|
||||||
private YxStoreOrderService yxStoreOrderService; |
|
||||||
|
|
||||||
@Autowired |
|
||||||
private YxSystemConfigService systemConfigService; |
|
||||||
|
|
||||||
@SneakyThrows |
|
||||||
public String inform(long orderId, int type) { |
|
||||||
CloseableHttpClient httpClient = HttpClients.createDefault();//实例化对象
|
|
||||||
// String webhook_url="https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=a2f0f8c9-e406-4f6b-86e4-d6ac9e4df88e";
|
|
||||||
String webhook_url = systemConfigService.getData(SystemConfigConstants.ROBOT_URL); |
|
||||||
if (StrUtil.isBlank(webhook_url)) { |
|
||||||
throw new YshopException("未配置企业微信群机器人"); |
|
||||||
} |
|
||||||
HttpPost httpPost = new HttpPost(webhook_url); |
|
||||||
httpPost.addHeader("Content-Type", "application/json; charset=utf-8"); |
|
||||||
TemplateCard templateCard = this.creatTemplatecard(orderId, type); |
|
||||||
Map<String, Object> param = new HashMap<>(); |
|
||||||
param.put("msgtype", "template_card"); |
|
||||||
param.put("template_card", JSONObject.parseObject(JSONUtil.toJsonStr(templateCard))); |
|
||||||
String jsonParam = JSONObject.toJSONString(param); |
|
||||||
|
|
||||||
StringEntity stringEntity = new StringEntity(jsonParam, "utf-8"); |
|
||||||
httpPost.setEntity(stringEntity); |
|
||||||
CloseableHttpResponse response = httpClient.execute(httpPost); |
|
||||||
// 发送成功接收返回值
|
|
||||||
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { |
|
||||||
String result = EntityUtils.toString(response.getEntity(), "utf-8"); |
|
||||||
System.out.println("发送微信机器人消息成功 " + result); |
|
||||||
return result; |
|
||||||
} else { |
|
||||||
System.out.println("发送微信机器人消息失败"); |
|
||||||
} |
|
||||||
// 关闭
|
|
||||||
httpClient.close(); |
|
||||||
response.close(); |
|
||||||
return "发送微信机器人消息失败"; |
|
||||||
} |
|
||||||
|
|
||||||
//创建订单消息
|
|
||||||
public TemplateCard creatTemplatecard(long orderId, int type) { |
|
||||||
YxStoreOrderDto yxStoreOrderDto = yxStoreOrderService.getOrderDetailByOrderId(orderId); |
|
||||||
String mainTitle; |
|
||||||
ArrayList<HorizontalContent> arrayList = new ArrayList<>(); |
|
||||||
arrayList.add(new HorizontalContent().setKeyname("会员名称").setValue(yxStoreOrderDto.getRealName())); |
|
||||||
arrayList.add(new HorizontalContent().setKeyname("会员手机号").setValue(yxStoreOrderDto.getUserPhone())); |
|
||||||
if (type == 0) {//支付时候
|
|
||||||
mainTitle = "有新的在线订单来啦"; |
|
||||||
arrayList.add(new HorizontalContent().setKeyname("下单地址").setValue(yxStoreOrderDto.getUserAddress())); |
|
||||||
arrayList.add(new HorizontalContent().setKeyname("下单时间").setValue(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(yxStoreOrderDto.getCreateTime()))); |
|
||||||
} else { |
|
||||||
mainTitle = "有新的退款申请"; |
|
||||||
//获取Document模型
|
|
||||||
Document docDesc = Jsoup.parse(yxStoreOrderDto.getStatusName()); |
|
||||||
//获取span节点
|
|
||||||
ArrayList<Element> list = docDesc.getElementsByTag("span"); |
|
||||||
//获取文本内容,并且截取只需要标题后面的
|
|
||||||
arrayList.add(new HorizontalContent().setKeyname("退款原因").setValue(list.get(0).text().substring(5))); |
|
||||||
arrayList.add(new HorizontalContent().setKeyname("备注说明").setValue(list.get(1).text().substring(5).length() == 0 ? list.get(1).text().substring(5) : "本次退款无备注")); |
|
||||||
arrayList.add(new HorizontalContent().setKeyname("申请时间").setValue(list.get(2).text().substring(5))); |
|
||||||
} |
|
||||||
|
|
||||||
// templateCard.setHorizontal_content_list(arrayList);
|
|
||||||
// templateCard.setCard_type("text_notice");
|
|
||||||
// templateCard.setSource(new Souce().setDesc("眼界甄选").setIcon_url("https://wework.qpic.cn/wwpic/252813_jOfDHtcISzuodLa_1629280209/0").setDesc_color(0));
|
|
||||||
// templateCard.setMain_title(new MainTitle().setTitle(mainTitle).setDesc("订单号:"+orderId));
|
|
||||||
// templateCard.setEmphasis_content(new EmphasisContent().setTitle(yxStoreOrderDto.getPayPrice().toString()).setDesc("订单总金额"));
|
|
||||||
//// templateCard.setQuote_area(new QuoteArea().setType(0).setUrl("").setAppid("APPID").setTitle("订单详情").setQuote_text("眼镜*1 0.01"));
|
|
||||||
// templateCard.setSub_title_text("订单类型:"+yxStoreOrderDto.getPinkName());//订单类型
|
|
||||||
// templateCard.setJump_list(arrayList1);
|
|
||||||
// templateCard.setCard_action(new CardAction().setType(1).setUrl(cardActionUrl));
|
|
||||||
ArrayList<Jump> arrayList1 = new ArrayList<>(); |
|
||||||
//机器人消息跳转地址
|
|
||||||
String cardActionUrl = systemConfigService.getData(SystemConfigConstants.CARD_ACTION_URL); |
|
||||||
if (StrUtil.isBlank(cardActionUrl)) { |
|
||||||
// throw new YshopException("未配置企业微信群机器人跳转地址");
|
|
||||||
cardActionUrl = "未配置跳转网址"; |
|
||||||
} |
|
||||||
arrayList1.add(new Jump().setType(1).setUrl(cardActionUrl).setTitle("前去处理订单")); |
|
||||||
|
|
||||||
return TemplateCard.builder() |
|
||||||
.horizontalContentList(arrayList).card_type("text_notice") |
|
||||||
.source(Souce.builder() |
|
||||||
.desc("眼界甄选") |
|
||||||
.icon_url("https://wework.qpic.cn/wwpic/252813_jOfDHtcISzuodLa_1629280209/0") |
|
||||||
.desc_color(0) |
|
||||||
.build()) |
|
||||||
.main_title(MainTitle.builder().title(mainTitle).desc("订单号:" + orderId).build()) |
|
||||||
.emphasis_content(EmphasisContent.builder().title(yxStoreOrderDto.getPayPrice().toString()).desc("订单总金额").build()) |
|
||||||
.sub_title_text("订单类型:" + yxStoreOrderDto.getPinkName()) |
|
||||||
.jump_list(arrayList1) |
|
||||||
.card_action(CardAction.builder().type(1).url(cardActionUrl).build()) |
|
||||||
.build(); |
|
||||||
} |
|
||||||
|
|
||||||
} |
|
@ -1,4 +1,4 @@ |
|||||||
package co.yixiang.modules.inform.domin; |
package co.yixiang.utils.WxTemplate.dto; |
||||||
|
|
||||||
import lombok.AllArgsConstructor; |
import lombok.AllArgsConstructor; |
||||||
import lombok.Builder; |
import lombok.Builder; |
@ -1,4 +1,4 @@ |
|||||||
package co.yixiang.modules.inform.domin; |
package co.yixiang.utils.WxTemplate.dto; |
||||||
|
|
||||||
import lombok.AllArgsConstructor; |
import lombok.AllArgsConstructor; |
||||||
import lombok.Builder; |
import lombok.Builder; |
@ -1,5 +1,6 @@ |
|||||||
package co.yixiang.modules.inform.domin; |
package co.yixiang.utils.WxTemplate.dto; |
||||||
|
|
||||||
|
import lombok.Builder; |
||||||
import lombok.Data; |
import lombok.Data; |
||||||
|
|
||||||
|
|
@ -1,4 +1,4 @@ |
|||||||
package co.yixiang.modules.inform.domin; |
package co.yixiang.utils.WxTemplate.dto; |
||||||
|
|
||||||
import lombok.AllArgsConstructor; |
import lombok.AllArgsConstructor; |
||||||
import lombok.Builder; |
import lombok.Builder; |
@ -1,4 +1,4 @@ |
|||||||
package co.yixiang.modules.inform.domin; |
package co.yixiang.utils.WxTemplate.dto; |
||||||
|
|
||||||
import lombok.Data; |
import lombok.Data; |
||||||
|
|
@ -1,6 +1,5 @@ |
|||||||
package co.yixiang.modules.inform.domin; |
package co.yixiang.utils.WxTemplate.dto; |
||||||
|
|
||||||
import io.swagger.models.auth.In; |
|
||||||
import lombok.AllArgsConstructor; |
import lombok.AllArgsConstructor; |
||||||
import lombok.Builder; |
import lombok.Builder; |
||||||
import lombok.Data; |
import lombok.Data; |
@ -0,0 +1,110 @@ |
|||||||
|
package co.yixiang.utils; |
||||||
|
|
||||||
|
import cn.hutool.core.util.StrUtil; |
||||||
|
import co.yixiang.constant.SystemConfigConstants; |
||||||
|
import co.yixiang.modules.order.service.YxStoreOrderService; |
||||||
|
import co.yixiang.modules.order.service.dto.YxStoreOrderDto; |
||||||
|
import co.yixiang.modules.shop.service.YxSystemConfigService; |
||||||
|
import co.yixiang.utils.WxTemplate.TemplateCard; |
||||||
|
import co.yixiang.utils.WxTemplate.dto.*; |
||||||
|
import com.alibaba.fastjson.JSON; |
||||||
|
import lombok.extern.slf4j.Slf4j; |
||||||
|
import org.apache.http.HttpStatus; |
||||||
|
import org.apache.http.client.methods.CloseableHttpResponse; |
||||||
|
import org.apache.http.client.methods.HttpPost; |
||||||
|
import org.apache.http.entity.StringEntity; |
||||||
|
import org.apache.http.impl.client.CloseableHttpClient; |
||||||
|
import org.apache.http.impl.client.HttpClients; |
||||||
|
import org.apache.http.util.EntityUtils; |
||||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||||
|
import org.springframework.stereotype.Component; |
||||||
|
|
||||||
|
import java.io.IOException; |
||||||
|
import java.text.SimpleDateFormat; |
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.HashMap; |
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
@Component |
||||||
|
@Slf4j |
||||||
|
public class WxbotMsgUtil { |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private YxStoreOrderService yxStoreOrderService; |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private YxSystemConfigService systemConfigService; |
||||||
|
public void inform(long orderId, int type) throws IOException { |
||||||
|
CloseableHttpClient httpClient = HttpClients.createDefault();//实例化对象
|
||||||
|
// String webhook_url = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=a08fa2aa-e299-4946-8cba-c99bacac6c33";
|
||||||
|
String webhook_url=systemConfigService.getData(SystemConfigConstants.ROBOT_URL); |
||||||
|
HttpPost httpPost = new HttpPost(webhook_url); |
||||||
|
httpPost.addHeader("Content-Type", "application/json; charset=utf-8"); |
||||||
|
TemplateCard templateCard = this.creatTemplatecard(orderId, type); |
||||||
|
Map<String, Object> param = new HashMap<>(); |
||||||
|
param.put("msgtype", "template_card"); |
||||||
|
param.put("template_card", templateCard); |
||||||
|
|
||||||
|
String jsonParam = JSON.toJSONString(param); |
||||||
|
|
||||||
|
StringEntity stringEntity = new StringEntity(jsonParam, "utf-8"); |
||||||
|
|
||||||
|
httpPost.setEntity(stringEntity); |
||||||
|
CloseableHttpResponse response = httpClient.execute(httpPost); |
||||||
|
|
||||||
|
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { |
||||||
|
String result = EntityUtils.toString(response.getEntity(), "utf-8"); |
||||||
|
log.info("result:{}", result); |
||||||
|
} else { |
||||||
|
log.error("发送微信机器人消息失败"); |
||||||
|
} |
||||||
|
// 关闭
|
||||||
|
httpClient.close(); |
||||||
|
response.close(); |
||||||
|
} |
||||||
|
|
||||||
|
//创建订单消息
|
||||||
|
private TemplateCard creatTemplatecard(long orderId, int type) { |
||||||
|
YxStoreOrderDto yxStoreOrderDto = yxStoreOrderService.getOrderDetailByOrderId(orderId); |
||||||
|
String mainTitle; |
||||||
|
ArrayList<HorizontalContent> arrayList = new ArrayList<>(); |
||||||
|
|
||||||
|
arrayList.add(new HorizontalContent("会员名称", yxStoreOrderDto.getRealName())); |
||||||
|
arrayList.add(new HorizontalContent("会员手机号", yxStoreOrderDto.getUserPhone())); |
||||||
|
if (type == 0) {//支付时候
|
||||||
|
mainTitle = StrUtil.format("您有{}条新订单需要处理", 1); |
||||||
|
arrayList.add(new HorizontalContent("下单地址", yxStoreOrderDto.getUserAddress())); |
||||||
|
arrayList.add(new HorizontalContent("下单时间", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(yxStoreOrderDto.getCreateTime()))); |
||||||
|
} else { |
||||||
|
mainTitle = StrUtil.format("您有{}条退款需要处理", 1); |
||||||
|
//获取文本内容,并且截取只需要标题后面的
|
||||||
|
arrayList.add(new HorizontalContent("退款原因", yxStoreOrderDto.getRefundReasonWap())); |
||||||
|
arrayList.add(new HorizontalContent("备注说明", StringUtils.isNotBlank(yxStoreOrderDto.getRefundReasonWapExplain())?yxStoreOrderDto.getRefundReasonWapExplain():"本次退款无备注" )); |
||||||
|
arrayList.add(new HorizontalContent("申请时间", yxStoreOrderDto.getRefundTime())); |
||||||
|
} |
||||||
|
|
||||||
|
ArrayList<Jump> arrayList1 = new ArrayList<>(); |
||||||
|
//机器人消息跳转地址
|
||||||
|
String cardActionUrl = systemConfigService.getData(SystemConfigConstants.CARD_ACTION_URL); |
||||||
|
if (StrUtil.isBlank(cardActionUrl)) { |
||||||
|
// throw new YshopException("未配置企业微信群机器人跳转地址");
|
||||||
|
cardActionUrl = "未配置跳转网址"; |
||||||
|
} |
||||||
|
arrayList1.add(new Jump().setType(1).setUrl(cardActionUrl).setTitle("前去处理订单")); |
||||||
|
return TemplateCard.builder() |
||||||
|
.horizontalContentList(arrayList) |
||||||
|
.cardType("text_notice") |
||||||
|
.source(Souce.builder() |
||||||
|
.desc("眼界甄选") |
||||||
|
.icon_url("https://wework.qpic.cn/wwpic/252813_jOfDHtcISzuodLa_1629280209/0") |
||||||
|
.desc_color(0) |
||||||
|
.build()) |
||||||
|
.mainTitle(MainTitle.builder().title(mainTitle).desc("订单号:" + orderId).build()) |
||||||
|
.emphasisContent(EmphasisContent.builder().title(yxStoreOrderDto.getPayPrice().toString()).desc("订单总金额").build()) |
||||||
|
.subTitleText("订单类型:" + yxStoreOrderDto.getPinkName()) |
||||||
|
.jumpList(arrayList1) |
||||||
|
.cardAction(CardAction.builder().type(1).url(cardActionUrl).build()) |
||||||
|
.build(); |
||||||
|
} |
||||||
|
|
||||||
|
} |
Loading…
Reference in new issue