From 159347eb9bc00b56d600d85a981a68535e5db9ec Mon Sep 17 00:00:00 2001 From: Binary Wang Date: Fri, 18 Oct 2019 17:27:24 +0800 Subject: [PATCH] =?UTF-8?q?:art:=20#1233=20=E5=85=AC=E4=BC=97=E5=8F=B7?= =?UTF-8?q?=E6=A8=A1=E6=9D=BF=E6=B6=88=E6=81=AF=E8=AE=BE=E7=BD=AE=E8=A1=8C?= =?UTF-8?q?=E4=B8=9A=E4=BF=A1=E6=81=AF=E6=8E=A5=E5=8F=A3=E4=BC=98=E5=8C=96?= =?UTF-8?q?=EF=BC=8C=E5=A2=9E=E5=8A=A0=E6=9E=9A=E4=B8=BE=E7=B1=BB=20WxMpTe?= =?UTF-8?q?mplateIndustryEnum=20=E6=96=B9=E4=BE=BF=E4=BD=BF=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../weixin/mp/api/WxMpTemplateMsgService.java | 9 + .../api/impl/WxMpTemplateMsgServiceImpl.java | 4 +- .../bean/template/WxMpTemplateIndustry.java | 35 +-- .../template/WxMpTemplateIndustryEnum.java | 224 ++++++++++++++++++ .../mp/util/json/WxMpIndustryGsonAdapter.java | 37 ++- .../impl/WxMpTemplateMsgServiceImplTest.java | 15 +- 6 files changed, 267 insertions(+), 57 deletions(-) create mode 100644 weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/template/WxMpTemplateIndustryEnum.java diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpTemplateMsgService.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpTemplateMsgService.java index 656840cbf..24c6eded7 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpTemplateMsgService.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpTemplateMsgService.java @@ -24,7 +24,9 @@ public interface WxMpTemplateMsgService { * 详情请见:http://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1433751277&token=&lang=zh_CN * * + * @param wxMpIndustry 行业信息 * @return 是否成功 + * @throws WxErrorException . */ boolean setIndustry(WxMpTemplateIndustry wxMpIndustry) throws WxErrorException; @@ -35,6 +37,7 @@ public interface WxMpTemplateMsgService { * * * @return wxMpIndustry + * @throws WxErrorException . */ WxMpTemplateIndustry getIndustry() throws WxErrorException; @@ -44,7 +47,9 @@ public interface WxMpTemplateMsgService { * 详情请见: http://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1433751277&token=&lang=zh_CN * * + * @param templateMessage 模板消息 * @return 消息Id + * @throws WxErrorException . */ String sendTemplateMsg(WxMpTemplateMessage templateMessage) throws WxErrorException; @@ -58,6 +63,7 @@ public interface WxMpTemplateMsgService { * * @param shortTemplateId 模板库中模板的编号,有“TM**”和“OPENTMTM**”等形式 * @return templateId 模板Id + * @throws WxErrorException . */ String addTemplate(String shortTemplateId) throws WxErrorException; @@ -70,6 +76,7 @@ public interface WxMpTemplateMsgService { * * * @return templateId 模板Id + * @throws WxErrorException . */ List getAllPrivateTemplate() throws WxErrorException; @@ -82,6 +89,8 @@ public interface WxMpTemplateMsgService { * * * @param templateId 模板Id + * @return . + * @throws WxErrorException . */ boolean delPrivateTemplate(String templateId) throws WxErrorException; } diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpTemplateMsgServiceImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpTemplateMsgServiceImpl.java index 4cab8d71e..daaf60c2f 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpTemplateMsgServiceImpl.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpTemplateMsgServiceImpl.java @@ -42,8 +42,8 @@ public class WxMpTemplateMsgServiceImpl implements WxMpTemplateMsgService { @Override public boolean setIndustry(WxMpTemplateIndustry wxMpIndustry) throws WxErrorException { - if (null == wxMpIndustry.getPrimaryIndustry() || null == wxMpIndustry.getPrimaryIndustry().getId() - || null == wxMpIndustry.getSecondIndustry() || null == wxMpIndustry.getSecondIndustry().getId()) { + if (null == wxMpIndustry.getPrimaryIndustry() || null == wxMpIndustry.getPrimaryIndustry().getCode() + || null == wxMpIndustry.getSecondIndustry() || null == wxMpIndustry.getSecondIndustry().getCode()) { throw new IllegalArgumentException("行业Id不能为空,请核实"); } diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/template/WxMpTemplateIndustry.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/template/WxMpTemplateIndustry.java index 4507cacba..adab37850 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/template/WxMpTemplateIndustry.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/template/WxMpTemplateIndustry.java @@ -1,28 +1,26 @@ package me.chanjar.weixin.mp.bean.template; -import java.io.Serializable; - +import lombok.AllArgsConstructor; import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder; +import java.io.Serializable; + /** * @author miller */ @Data +@NoArgsConstructor +@AllArgsConstructor +@Accessors(chain = true) public class WxMpTemplateIndustry implements Serializable { private static final long serialVersionUID = -7700398224795914722L; - private Industry primaryIndustry; - private Industry secondIndustry; - - public WxMpTemplateIndustry() { - } - - public WxMpTemplateIndustry(Industry primaryIndustry, Industry secondIndustry) { - this.primaryIndustry = primaryIndustry; - this.secondIndustry = secondIndustry; - } + private WxMpTemplateIndustryEnum primaryIndustry; + private WxMpTemplateIndustryEnum secondIndustry; public static WxMpTemplateIndustry fromJson(String json) { return WxMpGsonBuilder.create().fromJson(json, WxMpTemplateIndustry.class); @@ -41,29 +39,22 @@ public class WxMpTemplateIndustry implements Serializable { * 官方文档中,创建和获取的数据结构不一样。所以采用冗余字段的方式,实现相应的接口. */ @Data + @NoArgsConstructor + @AllArgsConstructor + @Accessors(chain = true) public static class Industry implements Serializable { private static final long serialVersionUID = -1707184885588012142L; private String id; private String firstClass; private String secondClass; - public Industry() { - } - public Industry(String id) { this.id = id; } - public Industry(String id, String firstClass, String secondClass) { - this.id = id; - this.firstClass = firstClass; - this.secondClass = secondClass; - } - @Override public String toString() { return WxMpGsonBuilder.create().toJson(this); } - } } diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/template/WxMpTemplateIndustryEnum.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/template/WxMpTemplateIndustryEnum.java new file mode 100644 index 000000000..8a0a91371 --- /dev/null +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/template/WxMpTemplateIndustryEnum.java @@ -0,0 +1,224 @@ +package me.chanjar.weixin.mp.bean.template; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 模版消息行业枚举. + * + * @author Binary Wang + * @date 2019-10-18 + */ +@Getter +@AllArgsConstructor +public enum WxMpTemplateIndustryEnum { + /** + * IT科技 - 互联网|电子商务 + */ + E_COMMERCE("IT科技", "互联网|电子商务", 1), + /** + * IT科技 - IT软件与服务 + */ + IT_SOFTWARE_AND_SERVICES("IT科技", "IT软件与服务", 2), + /** + * IT科技 - IT硬件与设备 + */ + IT_HARDWARE_AND_EQUIPMENT("IT科技", "IT硬件与设备", 3), + /** + * IT科技 - 电子技术 + */ + ELECTRONIC_TECHNIQUE("IT科技", "电子技术", 4), + /** + * IT科技 - 通信与运营商 + */ + COMMUNICATION_AND_OPERATOR("IT科技", "通信与运营商", 5), + /** + * IT科技 - 网络游戏 + */ + ONLINE_GAME("IT科技", "网络游戏", 6), + /** + * 金融业 - 银行 + */ + BANK("金融业", "银行", 7), + /** + * 金融业 - 基金|理财|信托 + */ + FUND("金融业", "基金|理财|信托", 8), + /** + * 金融业 - 保险 + */ + INSURANCE("金融业", "保险", 9), + /** + * 餐饮 - 餐饮 + */ + REPAST("餐饮", "餐饮", 10), + /** + * 酒店旅游 - 酒店 + */ + HOTEL("酒店旅游", "酒店", 11), + /** + * 酒店旅游 - 旅游 + */ + TRAVEL("酒店旅游", "旅游", 12), + /** + * 运输与仓储 - 快递 + */ + EXPRESS("运输与仓储", "快递", 13), + /** + * 运输与仓储 - 物流 + */ + LOGISTICS("运输与仓储", "物流", 14), + /** + * 运输与仓储 - 仓储 + */ + STORAGE("运输与仓储", "仓储", 15), + /** + * 教育 - 培训 + */ + CULTIVATE("教育", "培训", 16), + /** + * 教育 - 院校 + */ + ACADEMY("教育", "院校", 17), + /** + * 政府与公共事业 - 学术科研 + */ + ACADEMIC_RESEARCH("政府与公共事业", "学术科研", 18), + /** + * 政府与公共事业 - 交警 + */ + TRAFFIC_POLICE("政府与公共事业", "交警", 19), + /** + * 政府与公共事业 - 博物馆 + */ + MUSEUM("政府与公共事业", "博物馆", 20), + /** + * 政府与公共事业 - 公共事业|非盈利机构 + */ + PUBLIC_WORKS_NONPROFIT("政府与公共事业", "公共事业|非盈利机构", 21), + /** + * 医药护理 - 医药医疗 + */ + MEDICAL_HEALTH("医药护理", "医药医疗", 22), + /** + * 医药护理 - 护理美容 + */ + CARE_AND_BEAUTY("医药护理", "护理美容", 23), + /** + * 医药护理 - 保健与卫生 + */ + HEALTH_AND_HYGIENE("医药护理", "保健与卫生", 24), + /** + * 交通工具 - 汽车相关 + */ + AUTOMOTIVE_RELATED("交通工具", "汽车相关", 25), + /** + * 交通工具 - 摩托车相关 + */ + MOTORCYCLE_CORRELATION("交通工具", "摩托车相关", 26), + /** + * 交通工具 - 火车相关 + */ + THE_TRAIN_RELATED("交通工具", "火车相关", 27), + /** + * 交通工具 - 飞机相关 + */ + THE_PLANE_RELATED("交通工具", "飞机相关", 28), + /** + * 房地产 - 建筑 + */ + ARCHITECTURE("房地产", "建筑", 29), + /** + * 房地产 - 物业 + */ + REAL_ESTATE("房地产", "物业", 30), + /** + * 消费品 - 消费品 + */ + CONSUMER_GOODS("消费品", "消费品", 31), + /** + * 商业服务 - 法律 + */ + LEGISLATION("商业服务", "法律", 32), + /** + * 商业服务 - 会展 + */ + CONVENTION_AND_EXHIBITION("商业服务", "会展", 33), + /** + * 商业服务 - 中介服务 + */ + INTERMEDIARY_SERVICES("商业服务", "中介服务", 34), + /** + * 商业服务 - 认证 + */ + AUTHENTICATION("商业服务", "认证", 35), + /** + * 商业服务 - 会计|审计 + */ + AUDIT("商业服务", "会计|审计", 36), + /** + * 文体娱乐 - 传媒 + */ + MASS_MEDIA("文体娱乐", "传媒", 37), + /** + * 文体娱乐 - 体育 + */ + SPORTS("文体娱乐", "体育", 38), + /** + * 文体娱乐 - 娱乐休闲 + */ + LEISURE_AND_ENTERTAINMENT("文体娱乐", "娱乐休闲", 39), + /** + * 印刷 - 印刷 + */ + PRINTING("印刷", "印刷", 40), + /** + * 其它 - 其它 + */ + OTHER("其它", "其它", 41); + + /** + * 主行业(一级行业) + */ + public final String firstClass; + /** + * 副行业(二级行业) + */ + public final String secondClass; + /** + * 行业代码 + */ + public final Integer code; + + /** + * 查找行业 + * + * @param industry 二级行业名称 + * @return . + */ + public static WxMpTemplateIndustryEnum findBySecondary(String industry) { + for (WxMpTemplateIndustryEnum industryEnum : WxMpTemplateIndustryEnum.values()) { + if (industryEnum.secondClass.equals(industry)) { + return industryEnum; + } + } + + return null; + } + + /** + * 查找行业 + * + * @param code 行业编码 + * @return . + */ + public static WxMpTemplateIndustryEnum findByCode(int code) { + for (WxMpTemplateIndustryEnum industryEnum : WxMpTemplateIndustryEnum.values()) { + if (industryEnum.code == code) { + return industryEnum; + } + } + + return null; + } +} diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpIndustryGsonAdapter.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpIndustryGsonAdapter.java index eb0972bcd..0c4571954 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpIndustryGsonAdapter.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpIndustryGsonAdapter.java @@ -3,41 +3,32 @@ package me.chanjar.weixin.mp.util.json; import com.google.gson.*; import me.chanjar.weixin.common.util.json.GsonHelper; import me.chanjar.weixin.mp.bean.template.WxMpTemplateIndustry; +import me.chanjar.weixin.mp.bean.template.WxMpTemplateIndustryEnum; import java.lang.reflect.Type; /** * @author miller */ -public class WxMpIndustryGsonAdapter - implements JsonSerializer, JsonDeserializer { - private static WxMpTemplateIndustry.Industry convertFromJson(JsonObject json) { - WxMpTemplateIndustry.Industry industry = new WxMpTemplateIndustry.Industry(); - industry.setFirstClass(GsonHelper.getString(json, "first_class")); - industry.setSecondClass(GsonHelper.getString(json, "second_class")); - return industry; - } - +public class WxMpIndustryGsonAdapter implements JsonSerializer, JsonDeserializer { @Override - public JsonElement serialize(WxMpTemplateIndustry wxMpIndustry, Type type, - JsonSerializationContext jsonSerializationContext) { + public JsonElement serialize(WxMpTemplateIndustry wxMpIndustry, Type type, JsonSerializationContext context) { JsonObject json = new JsonObject(); - json.addProperty("industry_id1", wxMpIndustry.getPrimaryIndustry().getId()); - json.addProperty("industry_id2", wxMpIndustry.getSecondIndustry().getId()); + json.addProperty("industry_id1", wxMpIndustry.getPrimaryIndustry().getCode()); + json.addProperty("industry_id2", wxMpIndustry.getSecondIndustry().getCode()); return json; } @Override - public WxMpTemplateIndustry deserialize(JsonElement jsonElement, Type type, - JsonDeserializationContext jsonDeserializationContext) + public WxMpTemplateIndustry deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext context) throws JsonParseException { - WxMpTemplateIndustry wxMpIndustry = new WxMpTemplateIndustry(); - JsonObject primaryIndustry = jsonElement.getAsJsonObject() - .get("primary_industry").getAsJsonObject(); - wxMpIndustry.setPrimaryIndustry(convertFromJson(primaryIndustry)); - JsonObject secondaryIndustry = jsonElement.getAsJsonObject() - .get("secondary_industry").getAsJsonObject(); - wxMpIndustry.setSecondIndustry(convertFromJson(secondaryIndustry)); - return wxMpIndustry; + return new WxMpTemplateIndustry() + .setPrimaryIndustry(this.convertFromJson(jsonElement.getAsJsonObject().get("primary_industry").getAsJsonObject())) + .setSecondIndustry(this.convertFromJson(jsonElement.getAsJsonObject().get("secondary_industry").getAsJsonObject())); } + + private WxMpTemplateIndustryEnum convertFromJson(JsonObject json) { + return WxMpTemplateIndustryEnum.findBySecondary(GsonHelper.getString(json, "second_class")); + } + } diff --git a/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpTemplateMsgServiceImplTest.java b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpTemplateMsgServiceImplTest.java index 94d759fc7..181411df4 100644 --- a/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpTemplateMsgServiceImplTest.java +++ b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpTemplateMsgServiceImplTest.java @@ -5,10 +5,7 @@ import me.chanjar.weixin.common.error.WxErrorException; import me.chanjar.weixin.mp.api.WxMpService; import me.chanjar.weixin.mp.api.test.ApiTestModule; import me.chanjar.weixin.mp.api.test.TestConfigStorage; -import me.chanjar.weixin.mp.bean.template.WxMpTemplate; -import me.chanjar.weixin.mp.bean.template.WxMpTemplateData; -import me.chanjar.weixin.mp.bean.template.WxMpTemplateIndustry; -import me.chanjar.weixin.mp.bean.template.WxMpTemplateMessage; +import me.chanjar.weixin.mp.bean.template.*; import org.apache.commons.lang3.RandomStringUtils; import org.testng.Assert; import org.testng.annotations.Guice; @@ -32,10 +29,8 @@ public class WxMpTemplateMsgServiceImplTest { @Test(invocationCount = 5, threadPoolSize = 3) public void testSendTemplateMsg() throws WxErrorException { - SimpleDateFormat dateFormat = new SimpleDateFormat( - "yyyy-MM-dd HH:mm:ss.SSS"); - TestConfigStorage configStorage = (TestConfigStorage) this.wxService - .getWxMpConfigStorage(); + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); + TestConfigStorage configStorage = (TestConfigStorage) this.wxService.getWxMpConfigStorage(); WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder() .toUser(configStorage.getOpenid()) .templateId(configStorage.getTemplateId()) @@ -58,8 +53,8 @@ public class WxMpTemplateMsgServiceImplTest { @Test public void testSetIndustry() throws Exception { - WxMpTemplateIndustry industry = new WxMpTemplateIndustry(new WxMpTemplateIndustry.Industry("1"), - new WxMpTemplateIndustry.Industry("04")); + WxMpTemplateIndustry industry = new WxMpTemplateIndustry(WxMpTemplateIndustryEnum.findByCode(1), + WxMpTemplateIndustryEnum.findByCode(4)); boolean result = this.wxService.getTemplateMsgService().setIndustry(industry); Assert.assertTrue(result); }