微服務(wù)中消息推送模塊脯颜,一般消息推送分為微信模板消息、阿里云短信贩据、APP消息推送栋操,APP消息推送選擇個(gè)推,本文主要介紹微信消息模板
- 引入maven(具體版本具體引入)
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>weixin-java-mp</artifactId>
<version>3.3.0</version>
</dependency>
- yml配置文件配置微信賬號(hào)基本信息
#微信參數(shù)設(shè)置
wx:
msg:
#參數(shù)配置
appid: wx1cXXXXad983
secret: 4269XXXX9e3df3c6af03833
AESKey: JykXXXX4+=@
- 創(chuàng)建模板實(shí)體類
WxTemplate.java
/**
* 實(shí)體類
*
* @author myn
* @since 2021-10-12
*/
@Data
@TableName("message_wx_template")
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "WxTemplate對(duì)象", description = "WxTemplate對(duì)象")
public class WxTemplate extends BaseEntity {
private static final long serialVersionUID = 1L;
/**
* 主鍵
*/
@ApiModelProperty(value = "主鍵")
private Long id;
/**
* 模板id
*/
@ApiModelProperty(value = "模板id")
private String tid;
/**
* 關(guān)鍵字列表,最多支持5個(gè)乐设,最少2個(gè)
*/
@ApiModelProperty(value = "關(guān)鍵字列表,最多支持5個(gè)讼庇,最少2個(gè)")
private String kidList;
/**
* 服務(wù)場(chǎng)景描述,15個(gè)字以內(nèi)
*/
@ApiModelProperty(value = "服務(wù)場(chǎng)景描述近尚,15個(gè)字以內(nèi)")
private String sceneDesc;
/**
* 審核結(jié)果蠕啄。0--未通過(guò),1--通過(guò)
*/
@ApiModelProperty(value = "審核結(jié)果。0--未通過(guò)歼跟,1--通過(guò)")
private String reviewStatus;
/**
* 生成的模板id
*/
@ApiModelProperty(value = "生成的模板id")
private String templateId;
/**
* 模板類型和媳。0--一次性訂閱,1--永久性推送
*/
@ApiModelProperty(value = "模板類型哈街。0--一次性訂閱留瞳,1--永久性推送")
private String type;
/**
* 模板標(biāo)題
*/
@ApiModelProperty(value = "模板標(biāo)題")
private String title;
/**
* 模板類目id
*/
@ApiModelProperty(value = "模板類目id")
private Integer categoryId;
/**
* 模板類目名稱
*/
@ApiModelProperty(value = "模板類目名稱")
private String categoryName;
/**
* 租戶標(biāo)識(shí)
*/
@ApiModelProperty(value = "租戶標(biāo)識(shí)")
private String tenant;
/**
* 排序
*/
@ApiModelProperty(value = "排序")
private Integer sort;
}
WxTemplateData.java
/**
* 實(shí)體類
*
* @author myn
* @since 2021-10-13
*/
@Data
@TableName("message_wx_template_data")
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "WxTemplateData對(duì)象", description = "WxTemplateData對(duì)象")
public class WxTemplateData extends BaseEntity {
private static final long serialVersionUID = 1L;
/**
* id
*/
@ApiModelProperty(value = "id")
private Long id;
/**
* 生成的模板id,如TbZwosLXXXXXXfTP27E
*/
@ApiModelProperty(value = "生成的模板id骚秦,如TbZwosLXXXXXXfTP27E")
private String templateId;
/**
* 模板id她倘,如“2269”
*/
@ApiModelProperty(value = "模板id,如“2269”")
private String tid;
/**
* 用戶ID
*/
@ApiModelProperty(value = "用戶ID")
private String openId;
/**
* 跳轉(zhuǎn)頁(yè)面
*/
@ApiModelProperty(value = "跳轉(zhuǎn)頁(yè)面")
private String page;
/**
* 跳轉(zhuǎn)小程序類型:developer為開(kāi)發(fā)版作箍;trial為體驗(yàn)版硬梁;formal為正式版;默認(rèn)為正式版
*/
@ApiModelProperty(value = "跳轉(zhuǎn)小程序類型:developer為開(kāi)發(fā)版胞得;trial為體驗(yàn)版荧止;formal為正式版;默認(rèn)為正式版")
private String miniprogramState;
/**
* 進(jìn)入小程序查看”的語(yǔ)言類型阶剑,支持zh_CN(簡(jiǎn)體中文)跃巡、en_US(英文)、zh_HK(繁體中文)牧愁、zh_TW(繁體中文)素邪,默認(rèn)為zh_CN
返回值
*/
@ApiModelProperty(value = "進(jìn)入小程序查看”的語(yǔ)言類型,支持zh_CN(簡(jiǎn)體中文)递宅、en_US(英文)娘香、zh_HK(繁體中文)、zh_TW(繁體中文)办龄,默認(rèn)為zh_CN 返回值")
private String lang;
/**
* 關(guān)鍵字id烘绽,如 1
*/
@ApiModelProperty(value = "關(guān)鍵字id,如 1 ")
private String kid1;
/**
* 關(guān)鍵字名稱俐填,如“商品名稱”
*/
@ApiModelProperty(value = "關(guān)鍵字名稱安接,如“商品名稱”")
private String kidName1;
/**
* 關(guān)鍵字的key。如”thing1“英融,微信后臺(tái)獲取
*/
@ApiModelProperty(value = "關(guān)鍵字的key盏檐。如”thing1“,微信后臺(tái)獲取")
private String kidDataKey1;
/**
* 關(guān)鍵字發(fā)送的內(nèi)容
*/
@ApiModelProperty(value = "關(guān)鍵字發(fā)送的內(nèi)容")
private String kidData1;
/**
* 關(guān)鍵字id驶悟,如 1
*/
@ApiModelProperty(value = "關(guān)鍵字id胡野,如 1 ")
private String kid2;
/**
* 關(guān)鍵字名稱,如“商品名稱”
*/
@ApiModelProperty(value = "關(guān)鍵字名稱痕鳍,如“商品名稱”")
private String kidName2;
/**
* 關(guān)鍵字的key硫豆。如”thing1“龙巨,微信后臺(tái)獲取
*/
@ApiModelProperty(value = "關(guān)鍵字的key。如”thing1“熊响,微信后臺(tái)獲取")
private String kidDataKey2;
/**
* 關(guān)鍵字發(fā)送的內(nèi)容
*/
@ApiModelProperty(value = "關(guān)鍵字發(fā)送的內(nèi)容")
private String kidData2;
/**
* 關(guān)鍵字id旨别,如 1
*/
@ApiModelProperty(value = "關(guān)鍵字id,如 1 ")
private String kid3;
/**
* 關(guān)鍵字名稱汗茄,如“商品名稱”
*/
@ApiModelProperty(value = "關(guān)鍵字名稱秸弛,如“商品名稱”")
private String kidName3;
/**
* 關(guān)鍵字的key。如”thing1“洪碳,微信后臺(tái)獲取
*/
@ApiModelProperty(value = "關(guān)鍵字的key递览。如”thing1“,微信后臺(tái)獲取")
private String kidDataKey3;
/**
* 關(guān)鍵字發(fā)送的內(nèi)容
*/
@ApiModelProperty(value = "關(guān)鍵字發(fā)送的內(nèi)容")
private String kidData3;
/**
* 關(guān)鍵字id瞳腌,如 1
*/
@ApiModelProperty(value = "關(guān)鍵字id非迹,如 1 ")
private String kid4;
/**
* 關(guān)鍵字名稱,如“商品名稱”
*/
@ApiModelProperty(value = "關(guān)鍵字名稱纯趋,如“商品名稱”")
private String kidName4;
/**
* 關(guān)鍵字的key。如”thing1“冷离,微信后臺(tái)獲取
*/
@ApiModelProperty(value = "關(guān)鍵字的key吵冒。如”thing1“,微信后臺(tái)獲取")
private String kidDataKey4;
/**
* 關(guān)鍵字發(fā)送的內(nèi)容
*/
@ApiModelProperty(value = "關(guān)鍵字發(fā)送的內(nèi)容")
private String kidData4;
/**
* 關(guān)鍵字id西剥,如 1
*/
@ApiModelProperty(value = "關(guān)鍵字id痹栖,如 1 ")
private String kid5;
/**
* 關(guān)鍵字名稱绣硝,如“商品名稱”
*/
@ApiModelProperty(value = "關(guān)鍵字名稱路幸,如“商品名稱”")
private String kidName5;
/**
* 關(guān)鍵字的key爽待。如”thing1“鸯旁,微信后臺(tái)獲取
*/
@ApiModelProperty(value = "關(guān)鍵字的key袖迎。如”thing1“松邪,微信后臺(tái)獲取")
private String kidDataKey5;
/**
* 關(guān)鍵字發(fā)送的內(nèi)容
*/
@ApiModelProperty(value = "關(guān)鍵字發(fā)送的內(nèi)容")
private String kidData5;
/**
* 租戶標(biāo)識(shí)
*/
@ApiModelProperty(value = "租戶標(biāo)識(shí)")
private String tenant;
}
- service實(shí)現(xiàn)類携狭,主要實(shí)現(xiàn)微信模板的增刪改查
/**
* 服務(wù)實(shí)現(xiàn)類
*
* @author myn
* @since 2021-10-12
*/
@Service
public class WxTemplateServiceImpl extends BaseServiceImpl<WxTemplateMapper, WxTemplate> implements IWxTemplateService {
@Autowired
private PlatformTransactionManager platformTransactionManager;
@Autowired
private TransactionDefinition transactionDefinition;
@Override
public IPage<WxTemplateVO> selectWxTemplatePage(IPage<WxTemplateVO> page, WxTemplateVO wxTemplate) {
return page.setRecords(baseMapper.selectWxTemplatePage(page, wxTemplate));
}
@Override
public JSONObject addWxTemplate(WxTemplate wxTemplate) {
String accessToken = GetAccessToken.getAccessToken();
String tid = wxTemplate.getTid();
char[] kidList = wxTemplate.getKidList().toCharArray();
String sceneDesc = wxTemplate.getSceneDesc();
String url = "https://api.weixin.qq.com/wxaapi/newtmpl/addtemplate?access_token="
+ accessToken;
wxTemplate.setReviewStatus("0");
Map<String, String> map = new HashMap<>();
map.put("tid", tid);
map.put("kidList", Arrays.toString(kidList));
map.put("sceneDesc", sceneDesc);
//租戶標(biāo)識(shí)
wxTemplate.setTenant("");
JSONObject object = null;
R<Object> resp = R.status(this.save(wxTemplate));
if (resp.getCode() == 200) {
String result = HttpUtil.sendPost(url, map);
object = JSON.parseObject(result);
if (object.get("errcode") == "0") {
String tempid = object.get("priTmplId").toString();
wxTemplate.setTemplateId(tempid);
wxTemplate.setReviewStatus("1");
R.status(this.updateById(wxTemplate));
} else {
return object;
}
} else {
return JSONObject.parseObject(String.valueOf(resp));
}
return object;
}
@Override
public JSONObject delWxTemplate(String id, String templateId) {
String accessToken = GetAccessToken.getAccessToken();
TransactionStatus transaction = platformTransactionManager.getTransaction(transactionDefinition);
String url = "https://api.weixin.qq.com/wxaapi/newtmpl/deltemplate?access_token="
+ accessToken;
JSONObject object = null;
Map<String, String> map = new HashMap<>();
map.put("priTmplId", templateId);
try {
R<Object> resp = R.status(this.deleteLogic(Func.toLongList(id)));
if (resp.getCode() == 200) {
String result = HttpUtil.sendPost(url, map);
object = JSON.parseObject(result);
if (object.get("errcode") == "0") {
platformTransactionManager.commit(transaction);
return object;
} else {
return object;
}
} else {
return JSONObject.parseObject(String.valueOf(resp));
}
} catch (Exception e) {
platformTransactionManager.rollback(transaction);
e.printStackTrace();
}
assert object != null;
return object;
}
@Override
public JSONObject getCategory() {
String accessToken = GetAccessToken.getAccessToken();
String url = "https://api.weixin.qq.com/wxaapi/newtmpl/getcategory?access_token="
+ accessToken;
String result = HttpUtil.sendGet(url);
return JSON.parseObject(result);
}
@Override
public JSONObject getPubTemplateKeyWordsById(String tid) {
String accessToken = GetAccessToken.getAccessToken();
String url = "https://api.weixin.qq.com/wxaapi/newtmpl/getpubtemplatekeywords?access_token="
+ accessToken
+ "&tid="
+ tid;
String result = HttpUtil.sendGet(url);
return JSON.parseObject(result);
}
@Override
public JSONObject getPubTemplateTitleList(String ids, int start, int limit) {
String accessToken = GetAccessToken.getAccessToken();
String url = "https://api.weixin.qq.com/wxaapi/newtmpl/getpubtemplatetitles?access_token="
+ accessToken
+ "&ids="
+ ids
+ "&start="
+ start
+ "&limit="
+ limit;
String result = HttpUtil.sendGet(url);
return JSON.parseObject(result);
}
@Override
public JSONObject getTemplateList() {
String accessToken = GetAccessToken.getAccessToken();
String url = "https://api.weixin.qq.com/wxaapi/newtmpl/gettemplate?access_token="
+ accessToken;
String result = HttpUtil.sendGet(url);
return JSON.parseObject(result);
}
@Override
public Map<String,String> getTemplateId(){
JSONArray js = (JSONArray) getTemplateList().get("data");
Map<String,String> map = new HashMap<>();
for (int i=0;i<js.size();i++){
map.put(js.getJSONObject(i).get("priTmplId").toString(),js.getJSONObject(i).get("title").toString());
}
return map;
}
}
微信消息的服務(wù)實(shí)現(xiàn)類
/**
* 服務(wù)實(shí)現(xiàn)類
*
* @author myn
* @since 2021-10-13
*/
@Service
public class WxTemplateDataServiceImpl extends BaseServiceImpl<WxTemplateDataMapper, WxTemplateData> implements IWxTemplateDataService {
@Autowired
private IWxAcceptsingleService wxAcceptsingleService;
private WxMaMsgService msgService;
public WxTemplateDataServiceImpl() {
}
Log log = LogFactory.get();
@Override
public IPage<WxTemplateDataVO> selectWxTemplateDataPage(IPage<WxTemplateDataVO> page, WxTemplateDataVO wxTemplateData) {
return page.setRecords(baseMapper.selectWxTemplateDataPage(page, wxTemplateData));
}
/**
* 獲取需要填寫(xiě)的關(guān)鍵字列表
*
* @param templateId
* @return 關(guān)鍵字的鍵值對(duì)
* @author huan
*/
@Override
public Map<String, String> getDataList(String templateId) {
WxTemplateData wxTemplateData = baseMapper.selectWxTemplateDataParam(templateId);
Map<String, String> map = new HashMap<>();
map.put(wxTemplateData.getKidName1(), wxTemplateData.getKidDataKey1());
map.put(wxTemplateData.getKidName2(), wxTemplateData.getKidDataKey2());
map.put(wxTemplateData.getKidName3(), wxTemplateData.getKidDataKey3());
map.put(wxTemplateData.getKidName4(), wxTemplateData.getKidDataKey4());
map.put(wxTemplateData.getKidName5(), wxTemplateData.getKidDataKey5());
//去掉空的KEY和Value缸兔,返回有數(shù)值的map
MapRemoveNullUtil.removeNullEntry(map);
System.out.println(map);
return map;
}
/**
* 發(fā)送消息
*
* @param wxTemplateData
* @return 返回信息的String
* @throws Exception
* @author huan
*/
@Override
public String sendMsg(WxTemplateData wxTemplateData) throws Exception {
Map<String, String> map = new HashMap<>();
map.put(wxTemplateData.getKidDataKey1(), wxTemplateData.getKidData1());
map.put(wxTemplateData.getKidDataKey2(), wxTemplateData.getKidData2());
map.put(wxTemplateData.getKidDataKey3(), wxTemplateData.getKidData3());
map.put(wxTemplateData.getKidDataKey4(), wxTemplateData.getKidData4());
map.put(wxTemplateData.getKidDataKey5(), wxTemplateData.getKidData5());
//去掉空的鍵值對(duì)
MapRemoveNullUtil.removeNullEntry(map);
List<Map<String, String>> data = new ArrayList<>();
data.add(map);
//根據(jù),分割傳進(jìn)來(lái)的多個(gè)openid
String[] templateId = wxTemplateData.getTemplateId().split(",");
net.sf.json.JSONObject jsonResult = new JSONObject();
//foreach發(fā)送
for (String id : templateId) {
Template template = new Template();
template.setTemplate_id(id);
template.setTouser(wxTemplateData.getOpenId());
template.setPage(wxTemplateData.getPage());
List<TemplateParam> paras = new ArrayList<>(data.size());
//轉(zhuǎn)換成{things:{value:"things"}}形式
for (Map<String, String> m : data) {
for (String k : m.keySet()) {
paras.add(new TemplateParam(k, m.get(k)));
}
}
template.setTemplateParamList(paras);
//拼接鏈接
String requestUrl = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=ACCESS_TOKEN";
requestUrl = requestUrl.replace("ACCESS_TOKEN", GetAccessToken.getAccessToken());
log.info("鏈接地址:{}", template.toJSON());
//獲取返回信息
jsonResult = CommonUtil.httpsRequest(requestUrl, "POST", template.toJSON());
log.info("返回消息:{}", jsonResult);
int errorCode = jsonResult.getInt("errcode");
String errorMessage = jsonResult.getString("errmsg");
if (errorCode == 0) {
//發(fā)送成功
log.info("給{}發(fā)送的消息成功,返回消息:{}", id, jsonResult.toString());
//記錄存庫(kù)
WxAcceptsingle wxAcceptsingle = new WxAcceptsingle();
wxAcceptsingle.setData(data.toString());
wxAcceptsingle.setLang(WxMaConstants.MiniprogramLang.ZH_CN);
wxAcceptsingle.setMiniprogramState(WxMaConstants.MiniprogramState.FORMAL);
wxAcceptsingle.setAccessToken(GetAccessToken.getAccessToken());
wxAcceptsingle.setPage(wxTemplateData.getPage());
wxAcceptsingle.setSendStatus("1");
wxAcceptsingle.setTouser(wxTemplateData.getOpenId());
wxAcceptsingle.setTenant(AESUtils.aesEncode(WxAppConfig.getAesKey(), WxAppConfig.getAppId()));
R.status(this.wxAcceptsingleService.save(wxAcceptsingle));
} else {
//發(fā)送失敗旧找,不進(jìn)行終止溺健,日志記錄后繼續(xù)發(fā)送下一個(gè)
log.warn("訂閱消息發(fā)送失敗" + errorCode + "," + errorMessage);
}
}
return jsonResult.toString();
}
/**
* 利用租戶字段進(jìn)行增刪改查測(cè)試
* 查詢測(cè)試
*
* @return
*/
@Override
public List<WxTemplateData> selectList() {
QueryWrapper<WxTemplateData> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("tenant", AESUtils.aesEncode(WxAppConfig.getAesKey(), WxAppConfig.getAppId()));
String a = AESUtils.aesEncode(WxAppConfig.getAesKey(), WxAppConfig.getAppId());
System.out.println(a);
return baseMapper.selectList(queryWrapper);
}
/**
* 利用租戶字段進(jìn)行增刪改查測(cè)試
* 刪除測(cè)試
* @author huan
* @return 1為刪除成功,0為刪除失敗
*/
@Override
public int deleteByEntity(String id) {
QueryWrapper<WxTemplateData> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("tenant", AESUtils.aesEncode(WxAppConfig.getAesKey(), WxAppConfig.getAppId()))
.eq("id", id);
String a = AESUtils.aesEncode(WxAppConfig.getAesKey(), WxAppConfig.getAppId());
System.out.println(a);
return baseMapper.delete(queryWrapper);
}
}
- 控制器
這個(gè)就很簡(jiǎn)單了钮蛛,中間建立接口實(shí)現(xiàn)調(diào)用
WxTemplateController.java
/**
* 控制器
*
* @author myn
* @since 2021-10-12
*/
@RestController
@AllArgsConstructor
@RequestMapping("/wxtemplate")
@Api(value = "", tags = "接口")
public class WxTemplateController extends BladeController {
private IWxTemplateService wxTemplateService;
/**
* 詳情
*/
@GetMapping("/detail")
@ApiOperationSupport(order = 1)
@ApiOperation(value = "詳情", notes = "傳入wxTemplate")
public R<WxTemplateVO> detail(WxTemplate wxTemplate) {
WxTemplate detail = wxTemplateService.getOne(Condition.getQueryWrapper(wxTemplate));
return R.data(WxTemplateWrapper.build().entityVO(detail));
}
/**
* 分頁(yè)
*/
@GetMapping("/list")
@ApiOperationSupport(order = 2)
@ApiOperation(value = "分頁(yè)", notes = "傳入wxTemplate")
public R<IPage<WxTemplateVO>> list(WxTemplate wxTemplate, Query query) {
IPage<WxTemplate> pages = wxTemplateService.page(Condition.getPage(query), Condition.getQueryWrapper(wxTemplate));
return R.data(WxTemplateWrapper.build().pageVO(pages));
}
/**
* 自定義分頁(yè)
*/
@GetMapping("/page")
@ApiOperationSupport(order = 3)
@ApiOperation(value = "分頁(yè)", notes = "傳入wxTemplate")
public R<IPage<WxTemplateVO>> page(WxTemplateVO wxTemplate, Query query) {
IPage<WxTemplateVO> pages = wxTemplateService.selectWxTemplatePage(Condition.getPage(query), wxTemplate);
return R.data(pages);
}
/**
* 新增
*/
@PostMapping("/save")
@ApiOperationSupport(order = 4)
@ApiOperation(value = "新增", notes = "傳入wxTemplate")
public R save(@Valid @RequestBody WxTemplate wxTemplate) {
return R.status(wxTemplateService.save(wxTemplate));
}
/**
* 修改
*/
@PostMapping("/update")
@ApiOperationSupport(order = 5)
@ApiOperation(value = "修改", notes = "傳入wxTemplate")
public R update(@Valid @RequestBody WxTemplate wxTemplate) {
return R.status(wxTemplateService.updateById(wxTemplate));
}
/**
* 新增或修改
*/
@PostMapping("/submit")
@ApiOperationSupport(order = 6)
@ApiOperation(value = "新增或修改", notes = "傳入wxTemplate")
public R submit(@Valid @RequestBody WxTemplate wxTemplate) {
return R.status(wxTemplateService.saveOrUpdate(wxTemplate));
}
/**
* 刪除
*/
@PostMapping("/remove")
@ApiOperationSupport(order = 7)
@ApiOperation(value = "邏輯刪除", notes = "傳入ids")
public R remove(@ApiParam(value = "主鍵集合", required = true) @RequestParam String ids) {
return R.status(wxTemplateService.deleteLogic(Func.toLongList(ids)));
}
/**
* 添加模板
*
* @return
*/
@PostMapping("/addTem")
@ApiOperationSupport(order = 8)
@ApiOperation(value = "添加", notes = "傳入wxTemplate")
public JSONObject addTem(@Valid @RequestBody WxTemplate wxTemplate) {
return wxTemplateService.addWxTemplate(wxTemplate);
}
/**
* 刪除模板
*
* @return
*/
@PostMapping("/removeTem")
@ApiOperationSupport(order = 9)
@ApiOperation(value = "邏輯刪除", notes = "傳入id和模板id")
public JSONObject removeTem(@ApiParam(value = "主鍵集合", required = true) @RequestParam String id, @RequestParam String templateId) {
return wxTemplateService.delWxTemplate(id, templateId);
}
/**
* 獲取小程序賬號(hào)的類目
*
* @return
*/
@GetMapping("/getCategory")
@ApiOperationSupport(order = 10)
@ApiOperation(value = "查詢類目")
public JSONObject getCategory() {
return wxTemplateService.getCategory();
}
/**
* 獲取模板標(biāo)題下的關(guān)鍵詞列表
*
* @return
*/
@GetMapping("/getPubTemplateKeyWordsById")
@ApiOperationSupport(order = 11)
@ApiOperation(value = "獲取模板標(biāo)題下的關(guān)鍵詞列表")
public JSONObject getPubTemplateKeyWordsById(@ApiParam(value = "關(guān)鍵詞id", required = true) @RequestParam String tid) {
return wxTemplateService.getPubTemplateKeyWordsById(tid);
}
/**
* 獲取帳號(hào)所屬類目下的公共模板標(biāo)題
*
* @return
*/
@GetMapping("/getPubTemplateTitleList")
@ApiOperationSupport(order = 12)
@ApiOperation(value = "獲取帳號(hào)所屬類目下的公共模板標(biāo)題")
public JSONObject getPubTemplateTitleList(@ApiParam(value = "關(guān)鍵詞集合", required = true) @RequestParam String ids, @RequestParam int start, @RequestParam int limit) {
return wxTemplateService.getPubTemplateTitleList(ids, start, limit);
}
/**
* 獲取當(dāng)前帳號(hào)下的個(gè)人模板列表
*
* @return
*/
@GetMapping("/getTemplateList")
@ApiOperationSupport(order = 13)
@ApiOperation(value = "獲取帳號(hào)所屬類目下的公共模板標(biāo)題")
public JSONObject getTemplateList() {
return wxTemplateService.getTemplateList();
}
/**
* 獲取當(dāng)前帳號(hào)下的個(gè)人模板列表
*
* @return
*/
@GetMapping("/getTemplateListIdAndName")
@ApiOperationSupport(order = 14)
@ApiOperation(value = "獲取帳號(hào)所屬類目下的公共模板標(biāo)題和ID")
public Map<String, String> getTemplateListIdAndName() {
return wxTemplateService.getTemplateId();
}
}
WxTemplateDataController.java
/**
* 控制器
*
* @author myn
* @since 2021-10-13
*/
@RestController
@AllArgsConstructor
@RequestMapping("/wxtemplatedata")
@Api(value = "", tags = "接口")
public class WxTemplateDataController extends BladeController {
private IWxTemplateDataService wxTemplateDataService;
/**
* 詳情
*/
@GetMapping("/detail")
@ApiOperationSupport(order = 1)
@ApiOperation(value = "詳情", notes = "傳入wxTemplateData")
public R<WxTemplateDataVO> detail(WxTemplateData wxTemplateData) {
WxTemplateData detail = wxTemplateDataService.getOne(Condition.getQueryWrapper(wxTemplateData));
return R.data(WxTemplateDataWrapper.build().entityVO(detail));
}
/**
* 分頁(yè)
*/
@GetMapping("/list")
@ApiOperationSupport(order = 2)
@ApiOperation(value = "分頁(yè)", notes = "傳入wxTemplateData")
public R<IPage<WxTemplateDataVO>> list(WxTemplateData wxTemplateData, Query query) {
QueryWrapper<WxTemplateData> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("tenant", AESUtils.aesEncode(WxAppConfig.getAesKey(), WxAppConfig.getAppId()));
String a=AESUtils.aesEncode(WxAppConfig.getAesKey(), WxAppConfig.getAppId());
System.out.println(a);
IPage<WxTemplateData> pages = wxTemplateDataService.page(Condition.getPage(query), queryWrapper);
return R.data(WxTemplateDataWrapper.build().pageVO(pages));
}
/**
* 自定義分頁(yè)
*/
@GetMapping("/page")
@ApiOperationSupport(order = 3)
@ApiOperation(value = "分頁(yè)", notes = "傳入wxTemplateData")
public R<IPage<WxTemplateDataVO>> page(WxTemplateDataVO wxTemplateData, Query query) {
IPage<WxTemplateDataVO> pages = wxTemplateDataService.selectWxTemplateDataPage(Condition.getPage(query), wxTemplateData);
return R.data(pages);
}
/**
* 新增
*/
@PostMapping("/save")
@ApiOperationSupport(order = 4)
@ApiOperation(value = "新增", notes = "傳入wxTemplateData")
public R save(@Valid @RequestBody WxTemplateData wxTemplateData) {
return R.status(wxTemplateDataService.save(wxTemplateData));
}
/**
* 修改
*/
@PostMapping("/update")
@ApiOperationSupport(order = 5)
@ApiOperation(value = "修改", notes = "傳入wxTemplateData")
public R update(@Valid @RequestBody WxTemplateData wxTemplateData) {
return R.status(wxTemplateDataService.updateById(wxTemplateData));
}
/**
* 新增或修改
*/
@PostMapping("/submit")
@ApiOperationSupport(order = 6)
@ApiOperation(value = "新增或修改", notes = "傳入wxTemplateData")
public R submit(@Valid @RequestBody WxTemplateData wxTemplateData) {
return R.status(wxTemplateDataService.saveOrUpdate(wxTemplateData));
}
/**
* 刪除
*/
@PostMapping("/remove")
@ApiOperationSupport(order = 7)
@ApiOperation(value = "邏輯刪除", notes = "傳入ids")
public R remove(@ApiParam(value = "主鍵集合", required = true) @RequestParam String ids) {
return R.status(wxTemplateDataService.deleteLogic(Func.toLongList(ids)));
}
/**
* 發(fā)送
*/
@PostMapping("/send")
@ApiOperationSupport(order = 8)
@ApiOperation(value = "發(fā)送", notes = "傳入實(shí)體類")
public String send(@Valid @RequestBody WxTemplateData wxTemplateData) throws Exception {
return wxTemplateDataService.sendMsg(wxTemplateData);
}
/**
* 獲取需要填寫(xiě)的關(guān)鍵字名稱
* @return
*/
@GetMapping("/getKeyWords")
@ApiOperationSupport(order = 9)
@ApiOperation(value = "獲取需要填寫(xiě)的關(guān)鍵字名稱", notes = "傳入模板id")
public Map<String, String> getKeyWords(@ApiParam(value = "模板id", required = true) @RequestParam String templateId) throws Exception {
return wxTemplateDataService.getDataList(templateId);
}
/**
* 租戶測(cè)試
* @return
*/
@GetMapping("/getList")
@ApiOperationSupport(order = 10)
@ApiOperation(value = "租戶測(cè)試")
public List<WxTemplateData> getList(){
return wxTemplateDataService.selectList();
}
/**
* 租戶刪除測(cè)試
* @return
*/
@GetMapping("/deleteByEntity")
@ApiOperationSupport(order = 10)
@ApiOperation(value = "租戶測(cè)試")
public int deleteByEntity(String id){
return wxTemplateDataService.deleteByEntity(id);
}
}
微信模板的建立可以在微信公眾后臺(tái)手工創(chuàng)建鞭缭,比調(diào)用API簡(jiǎn)單。