diff --git a/ant-design-vue-jeecg/src/views/reserve/reservationsubmission/ReservationSubmissionList.vue b/ant-design-vue-jeecg/src/views/reserve/reservationsubmission/ReservationSubmissionList.vue index 93ebc16..237dca9 100644 --- a/ant-design-vue-jeecg/src/views/reserve/reservationsubmission/ReservationSubmissionList.vue +++ b/ant-design-vue-jeecg/src/views/reserve/reservationsubmission/ReservationSubmissionList.vue @@ -183,7 +183,7 @@ dataIndex: 'stare_dictText' }, { - title:'填表人名称', + title:'客户名称', align:"center", dataIndex: 'customerName' }, diff --git a/ant-design-vue-jeecg/src/views/reserve/reservationsubmission/ReservationSubmissionListLoading.vue b/ant-design-vue-jeecg/src/views/reserve/reservationsubmission/ReservationSubmissionListLoading.vue index feaa923..93e559c 100644 --- a/ant-design-vue-jeecg/src/views/reserve/reservationsubmission/ReservationSubmissionListLoading.vue +++ b/ant-design-vue-jeecg/src/views/reserve/reservationsubmission/ReservationSubmissionListLoading.vue @@ -171,7 +171,7 @@ dataIndex: 'vehicle_dictText' }, { - title:'填表人名称', + title:'客户名称', align:"center", dataIndex: 'customerName' }, diff --git a/ant-design-vue-jeecg/src/views/reserve/reservationsubmission/modules/ReservationSubmissionForm.vue b/ant-design-vue-jeecg/src/views/reserve/reservationsubmission/modules/ReservationSubmissionForm.vue index 9754c1c..27e7f5a 100644 --- a/ant-design-vue-jeecg/src/views/reserve/reservationsubmission/modules/ReservationSubmissionForm.vue +++ b/ant-design-vue-jeecg/src/views/reserve/reservationsubmission/modules/ReservationSubmissionForm.vue @@ -4,8 +4,8 @@ <a-form-model ref="form" :model="model" :rules="validatorRules" slot="detail"> <a-row> <a-col :span="24"> - <a-form-model-item label="月台" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="railwayPlatform"> - <j-dict-select-tag type="list" v-model="model.railwayPlatform" dictCode="platform_management,name,name" placeholder="请选择月台" /> + <a-form-model-item label="月台组" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="railwayPlatform"> + <j-dict-select-tag type="list" v-model="model.railwayPlatform" dictCode="platform_management,name,name" placeholder="请选择月台组" /> </a-form-model-item> </a-col> @@ -47,14 +47,13 @@ <a-input v-model="model.phoneNumber" placeholder="请输入司机手机号" ></a-input> </a-form-model-item> </a-col> + <a-input type="hidden" v-model="model.objective=2"></a-input> + + <a-input type="hidden" v-model="model.reservationMethod='WEB页面'"></a-input> + <a-col :span="24"> - <a-form-model-item label="装车/卸车" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="objective"> - <j-dict-select-tag type="list" v-model="model.objective" dictCode="objective" placeholder="请选择装车/卸车" /> - </a-form-model-item> - </a-col> - <a-col :span="24"> - <a-form-model-item label="卸货种类" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="detailed"> - <a-input v-model="model.detailed" placeholder="请输入卸货种类" ></a-input> + <a-form-model-item label="卸货名称" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="detailed"> + <a-input v-model="model.detailed" placeholder="请输入卸货物品名称" ></a-input> </a-form-model-item> </a-col> <a-col :span="24"> @@ -62,12 +61,6 @@ <j-dict-select-tag type="list" v-model="model.vehicle" dictCode="vehicle_table,name,name" placeholder="请选择车型" /> </a-form-model-item> </a-col> - - <a-col :span="24"> - <a-form-model-item label="月台" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="platformGroup"> - <a-input v-model="model.platformGroup" placeholder="月台" ></a-input> - </a-form-model-item> - </a-col> <a-col :span="24"> <a-form-model-item label="客户名称" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="customerName"> <a-input v-model="model.customerName" placeholder="请输入客户名称" ></a-input> diff --git a/ant-design-vue-jeecg/src/views/reserve/reservationsubmission/modules/ReservationSubmissionFormto.vue b/ant-design-vue-jeecg/src/views/reserve/reservationsubmission/modules/ReservationSubmissionFormto.vue index 22fcbcd..f880768 100644 --- a/ant-design-vue-jeecg/src/views/reserve/reservationsubmission/modules/ReservationSubmissionFormto.vue +++ b/ant-design-vue-jeecg/src/views/reserve/reservationsubmission/modules/ReservationSubmissionFormto.vue @@ -4,8 +4,32 @@ <a-form-model ref="form" :model="model" :rules="validatorRules" slot="detail"> <a-row> <a-col :span="24"> - <a-form-model-item label="月台" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="railwayPlatform"> - <j-dict-select-tag type="list" v-model="model.railwayPlatform" dictCode="platform_management,name,name" placeholder="请选择月台" /> + <a-form-model-item label="月台组" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="railwayPlatform"> + <j-dict-select-tag type="list" v-model="model.railwayPlatform" dictCode="platform_management,name,name" placeholder="请选择月台组" /> + </a-form-model-item> + </a-col> + + + <a-col :span="24"> + <a-form-model-item label="预约时间" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="appointmentTime"> + <j-dict-select-tag type="list" v-model="model.appointmentTime" v-on:change="changeEvn($event)" dictCode="time" placeholder="请选择预约时间" /> + </a-form-model-item> + </a-col> + + <a-col :span="24"> + <a-form-model-item label="时间段:" :labelCol="labelCol" :wrapperCol="wrapperCol" > + <a-select class="extTimeSelection" placeholder="请选择预约时间段" v-model="model.timeSelection" v-on:change="changeEvn2($event)" > + <a-select-option v-for="timeSelection in timeSelectionList" :key="timeSelection" :value="timeSelection">{{ timeSelection }}</a-select-option> + </a-select> + </a-form-model-item> + </a-col> + + + + + <a-col :span="24"> + <a-form-model-item label="订单号" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="orderNumber"> + <a-input v-model="model.orderNumber" placeholder="请输入订单号" ></a-input> </a-form-model-item> </a-col> <a-col :span="24"> @@ -28,15 +52,13 @@ <j-dict-select-tag type="list" v-model="model.vehicle" dictCode="vehicle_table,name,name" placeholder="请选择车型" /> </a-form-model-item> </a-col> + <a-input type="hidden" v-model="model.objective=1"></a-input> + + <a-input type="hidden" v-model="model.reservationMethod='WEB页面'"></a-input> - <a-col :span="24"> - <a-form-model-item label="月台" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="platformGroup"> - <a-input v-model="model.platformGroup" placeholder="月台" ></a-input> - </a-form-model-item> - </a-col> <a-col :span="24"> <a-form-model-item label="客户名称" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="customerName"> - <a-input v-model="model.customerName" placeholder="请输入填表人名称" ></a-input> + <a-input v-model="model.customerName" placeholder="请输入客户名称" ></a-input> </a-form-model-item> </a-col> <a-col :span="24"> @@ -49,12 +71,6 @@ <a-input v-model="model.remark" placeholder="请输入备注" ></a-input> </a-form-model-item> </a-col> - - <a-input type="hidden" v-model="model.objective=1"></a-input> - - <a-input type="hidden" v-model="model.reservationMethod='WEB端'"></a-input> - - </a-row> </a-form-model> </j-form-container> @@ -65,10 +81,10 @@ import { httpAction, getAction } from '@/api/manage' import { validateDuplicateValue } from '@/utils/util' - import {getSchedulerPrint, getTime, searchTimePeriod} from "../../../../api/api"; + import {getSchedulerPrint, searchTimePeriod} from "../../../../api/api"; export default { - name: 'ReservationSubmissionFormto', + name: 'ReservationSubmissionForm', components: { }, props: { @@ -83,10 +99,8 @@ return { timeSelection:'', timeSelectionList:[], - timedateList:[], - objective:1, model:{ - }, + }, labelCol: { xs: { span: 24 }, sm: { span: 5 }, @@ -97,23 +111,25 @@ }, confirmLoading: false, validatorRules: { - appointmentTime: [ - { required: true, message: '请输入预约时间!'}, - ], - - orderNumber: [ - { required: true, message: '请输入订单号!'}, - { pattern: /^.{6,18}$/, message: '请输入6到18位任意字符!'}, - ], - phoneNumber: [ - { required: true, message: '请输入司机手机号!'}, - { pattern: /^1[3456789]\d{9}$/, message: '请输入正确的手机号码!'}, - ], - - submitPhone: [ - { required: true, message: '请输入填表人电话!'}, - { pattern: /^1[3456789]\d{9}$/, message: '请输入正确的手机号码!'}, - ], + appointmentTime: [ + { required: true, message: '请输入预约时间!'}, + ], + + orderNumber: [ + { required: true, message: '请输入订单号!'}, + { pattern: /^.{6,18}$/, message: '请输入6到18位任意字符!'}, + ], + reservationMethod: [ + { required: true, message: '请输入预约形式!'}, + ], + phoneNumber: [ + { required: true, message: '请输入司机手机号!'}, + { pattern: /^1[3456789]\d{9}$/, message: '请输入正确的手机号码!'}, + ], + submitPhone: [ + { required: true, message: '请输入填表人电话!'}, + { pattern: /^1[3456789]\d{9}$/, message: '请输入正确的手机号码!'}, + ], }, url: { add: "/reservationsubmission/reservationSubmission/add", @@ -127,12 +143,8 @@ return this.disabled }, }, - mounted:function() { - let id = this.$route.query.id; - this.loadForm(id) - }, created () { - //备份model原始值 + //备份model原始值 this.modelDefault = JSON.parse(JSON.stringify(this.model)); }, methods: { @@ -142,11 +154,7 @@ }); }, - loadForm(id){ - getTime(id).then((res) => { - this.timedateList=res; - }) - }, + changeEvn(event){ let tempEl= document.querySelector(".extTimeSelection .ant-select-selection-selected-value"); @@ -155,7 +163,6 @@ this.timeSlot(event) }, - changeEvn2(event){ var str1=event.substring(0, event.indexOf("---")); @@ -188,7 +195,7 @@ method = 'post'; }else{ httpurl+=this.url.edit; - method = 'put'; + method = 'put'; } httpAction(httpurl,this.model,method).then((res)=>{ if(res.success){ diff --git a/ant-design-vue-jeecg/src/views/reserve/submit/reservationapplication.vue b/ant-design-vue-jeecg/src/views/reserve/submit/reservationapplication.vue index 57c956b..f4f9e0b 100644 --- a/ant-design-vue-jeecg/src/views/reserve/submit/reservationapplication.vue +++ b/ant-design-vue-jeecg/src/views/reserve/submit/reservationapplication.vue @@ -135,6 +135,7 @@ }, timeSelection:'', codez:'', + disableSubmit:'', a:0, b:0, timeSelectionList:[], @@ -197,6 +198,9 @@ timeSlot(id){ searchTimePeriod(id).then((res) => { this.timeSelectionList=res; + let els= document.querySelector(".extTimeSelection .ant-select-selection-selected-value"); + els.innerText=''; + }); }, PlatformTimeSlot(id){ @@ -266,61 +270,75 @@ onSubmit() { - // const code = getUrlParam('code') // 截取路径中的code,如果没有就去微信授权,如果已经获取到了就直接传code给后台获取openId - // const local = window.location.href - // if (code == null || code === '') { - // window.location.href = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' + "wx3f9ef1399cfe4aed" + '&redirect_uri=' + encodeURIComponent(local) + '&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect' - // } else { + const code = getUrlParam('code') // 截取路径中的code,如果没有就去微信授权,如果已经获取到了就直接传code给后台获取openId + const local = window.location.href + if (code == null || code === '') { + window.location.href = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' + "wx3f9ef1399cfe4aed" + '&redirect_uri=' + encodeURIComponent(local) + '&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect' + } else { + this.model.codez=code; - if (this.model.objective==1) - { - this.model.detailed=''; - } - const that = this; - // 触发表单验证 - // this.model.phoneNumber=""; - // this.model.orderNumber=""; - // for (let i=this.a;i>=0;i--) - // { - // this.model.phoneNumber=this.model.phoneNumber+document.getElementById("number"+i).value; - // } - // for (let i=this.b;i>=0;i--) - // { - // this.model.orderNumber=this.model.orderNumber+","+document.getElementById("numbers"+i).value; - // } - this.$refs.form.validate(valid => { - if (valid) { - that.confirmLoading = true; - let httpurl = ''; - let method = ''; - if (!this.model.id) { - httpurl += this.url.add; - method = 'post'; - } else { - httpurl += this.url.edit; - method = 'put'; + if (this.model.objective == 1) { + this.model.detailed = ''; + } + const that = this; + // 触发表单验证 + this.model.phoneNumber = ""; + this.model.orderNumber = ""; + for (let i = this.a; i >= 0; i--) { + if (i==0) + { + this.model.phoneNumber = this.model.phoneNumber + document.getElementById("number" + i).value; } - httpAction(httpurl, this.model, method).then((res) => { - if (res.success) { - that.$message.success(res.message); - that.$emit('ok'); - this.$router.push({ - path: "/result/Success" - }); - } else { - that.$message.warning(res.message); - this.$router.push({ - path: "/reserve/submit" - }); - } - }).finally(() => { - that.confirmLoading = false; - }) + else + { + this.model.phoneNumber = this.model.phoneNumber + document.getElementById("number" + i).value+ ","; + } + + } + for (let i = this.b; i >= 0; i--) { + if (i==0) + { + this.model.orderNumber = this.model.orderNumber + document.getElementById("numbers" + i).value; + } + else { + this.model.orderNumber = this.model.orderNumber + document.getElementById("numbers" + i).value+ ","; + } - }) - }, + } + this.$refs.form.validate(valid => { + if (valid) { + that.confirmLoading = true; + let httpurl = ''; + let method = ''; + if (!this.model.id) { + httpurl += this.url.add; + method = 'post'; + } else { + httpurl += this.url.edit; + method = 'put'; + } + httpAction(httpurl, this.model, method).then((res) => { + if (res.success) { + that.$message.success(res.message); + that.$emit('ok'); + this.$router.push({ + path: "/result/Success" + }); + } else { + that.$message.warning(res.message); + this.$router.push({ + path: "/reserve/submit" + }); + } + }).finally(() => { + that.confirmLoading = false; + }) + } + }) + } + } } } </script> \ No newline at end of file diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/basics/weighing/controller/WeighingController.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/basics/weighing/controller/WeighingController.java index 945d41d..27c4422 100644 --- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/basics/weighing/controller/WeighingController.java +++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/basics/weighing/controller/WeighingController.java @@ -188,12 +188,10 @@ public class WeighingController extends JeecgController<Weighing, IWeighingServi throw new JSONException("重量不能为空"); } - //查看月台是否被释放,如果被释放了表示出 没释放表示入 //1.根据车牌号查询月台状态 - // if (11) { //过磅完成查看是否有预约单 没有则状态为N iweighingService.addWeighing(weighing, 1); diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/reserve/reservationsubmission/service/impl/ReservationSubmissionServiceImpl.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/reserve/reservationsubmission/service/impl/ReservationSubmissionServiceImpl.java index 655d9a2..fcf3e0f 100644 --- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/reserve/reservationsubmission/service/impl/ReservationSubmissionServiceImpl.java +++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/reserve/reservationsubmission/service/impl/ReservationSubmissionServiceImpl.java @@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON; import com.aliyun.oss.ServiceException; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import io.micrometer.core.instrument.util.StringUtils; import me.chanjar.weixin.common.error.WxErrorException; import org.jeecg.common.util.HttpUtils; @@ -13,6 +14,7 @@ import org.jeecg.modules.basics.userrecord.service.IUserRecordService; import org.jeecg.modules.reserve.reservationsubmission.entity.ReservationSubmission; import org.jeecg.modules.reserve.reservationsubmission.mapper.ReservationSubmissionMapper; import org.jeecg.modules.reserve.reservationsubmission.service.IReservationSubmissionService; +import org.jeecg.modules.tool.controller.ShortMessageController; import org.jeecg.modules.tool.entity.WeChatResult; import org.jeecg.modules.tool.service.ToolService; import org.jeecg.modules.wms.shipment.shipmentHeader.domain.ShipmentHeader; @@ -20,15 +22,13 @@ import org.jeecg.modules.wms.shipment.shipmentHeader.service.ShipmentHeaderServi import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; - import javax.annotation.Resource; import java.util.Calendar; /** * @Description: 预约表 * @Author: jeecg-boot - * @Date: 2022-02-21 + * @Date: 2022-02-21 * @Version: V1.0 */ @Service @@ -73,35 +73,51 @@ public class ReservationSubmissionServiceImpl extends ServiceImpl<ReservationSub reservationSubmission.setStare(QuantityConstant.SHIPMENT_BOOKING_SUCCESS); reservationSubmissionService.save(reservationSubmission); - //配置微信请求openid的url - String url="https://api.weixin.qq.com/sns/oauth2/access_token?appid=wx3f9ef1399cfe4aed&secret=c19b68816cc5ef52d2c49b765ec90032&code="+reservationSubmission.getCodez()+"&grant_type=authorization_code"; - //请求url获取openid - String result = HttpUtils.sendGet(url); - if(StringUtils.isEmpty(result)) { - throw new ServiceException("接口地址错误或返回为空"); - } - WeChatResult weChatResult = JSON.parseObject(result, WeChatResult.class); - - //存储openid到数据库(根据填表人) - - UserRecord userRecord =new UserRecord(); - //姓名 - userRecord.setName(reservationSubmission.getCustomerName()); - userRecord.setPhone(reservationSubmission.getSubmitPhone()); - userRecord.setOpenid(weChatResult.getOpenid()); - userRecord.setBlock("N"); - userRecordService.save(userRecord); - - try { - tool.successfulPush(reservationSubmission); - //发送公众号通知 - } catch (WxErrorException e) { - e.printStackTrace(); + //查询手机号的openid在不在 + LambdaQueryWrapper<UserRecord> userRecordLambdaQueryWrapper = Wrappers.lambdaQuery(); + userRecordLambdaQueryWrapper.eq(UserRecord::getPhone, reservationSubmission.getSubmitPhone()); + UserRecord one = userRecordService.getOne(userRecordLambdaQueryWrapper); + + if (reservationSubmission.getReservationMethod().contains("H5")) { + //配置微信请求openid的url + String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=wx3f9ef1399cfe4aed&secret=c19b68816cc5ef52d2c49b765ec90032&code=" + reservationSubmission.getCodez() + "&grant_type=authorization_code"; + + //请求url获取openid + String result = HttpUtils.sendGet(url); + if (StringUtils.isEmpty(result) == false) { + + WeChatResult weChatResult = JSON.parseObject(result, WeChatResult.class); + //存储openid到数据库(根据填表人) + UserRecord userRecord = new UserRecord(); + //姓名 + userRecord.setName(reservationSubmission.getCustomerName()); + userRecord.setPhone(reservationSubmission.getSubmitPhone()); + userRecord.setOpenid(weChatResult.getOpenid()); + userRecord.setBlock("N"); + userRecordService.save(userRecord); + try { + tool.successfulPush(reservationSubmission, weChatResult.getOpenid()); + //发送公众号通知 + } catch (WxErrorException e) { + e.printStackTrace(); + } + + } + } else { + if (one != null) { + try { + tool.successfulPush(reservationSubmission, one.getOpenid()); + //发送公众号通知 + } catch (WxErrorException e) { + e.printStackTrace(); + } + } } -// //发送短信通知 -// ShortMessageController.sendSingleSms(reservationSubmission,reservationSubmission.getSubmitPhone()); +// +//// //发送短信通知 +// ShortMessageController.sendSingleSms(reservationSubmission, reservationSubmission.getSubmitPhone()); return true; diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/tool/service/ToolService.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/tool/service/ToolService.java index 35cfc0f..e4310aa 100644 --- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/tool/service/ToolService.java +++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/tool/service/ToolService.java @@ -16,5 +16,5 @@ public interface ToolService{ - void successfulPush(ReservationSubmission reservationSubmission) throws WxErrorException; + void successfulPush(ReservationSubmission reservationSubmission,String openId) throws WxErrorException; } diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/tool/service/impl/ToolServiceImpl.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/tool/service/impl/ToolServiceImpl.java index c19311a..2576f31 100644 --- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/tool/service/impl/ToolServiceImpl.java +++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/tool/service/impl/ToolServiceImpl.java @@ -38,7 +38,7 @@ public class ToolServiceImpl implements ToolService { private WxMpService mpService; @ApiLogger(value = "微信预约成功通知") @Override - public void successfulPush(ReservationSubmission reservationSubmission) throws WxErrorException { + public void successfulPush(ReservationSubmission reservationSubmission,String optId) throws WxErrorException { WxMpTemplateData wxMpTemplateData = new WxMpTemplateData(); List<WxMpTemplateData> data = new ArrayList(); @@ -92,13 +92,18 @@ public class ToolServiceImpl implements ToolService { WxMpTemplateMessage wxMpTemplateMessage = new WxMpTemplateMessage(); - wxMpTemplateMessage.setToUser("oyd-u6vagcOANtoA3CdBbUnsQlDQ"); + wxMpTemplateMessage.setToUser(optId); wxMpTemplateMessage.setTemplateId("wNjuIP5WxRtwhcnKicU93loVIrQRLC_8B004jhP3kWY"); wxMpTemplateMessage.setUrl("http://www.baidu.com"); wxMpTemplateMessage.setData(data); WxMpTemplateMsgService wxMpTemplateMsgService = mpService.getTemplateMsgService(); log.info("####微信消息模版正在推送####"); - wxMpTemplateMsgService.sendTemplateMsg(wxMpTemplateMessage); + + try { + String s = wxMpTemplateMsgService.sendTemplateMsg(wxMpTemplateMessage); + } catch (WxErrorException e) { + log.error("【微信模版消息】发送失败, {}", e); + } }