diff --git a/mallinkAdmin/src/main/java/com/simple/controller/WxPayOrderController.java b/mallinkAdmin/src/main/java/com/simple/controller/WxPayOrderController.java index b90611ea1..2dfb65f18 100644 --- a/mallinkAdmin/src/main/java/com/simple/controller/WxPayOrderController.java +++ b/mallinkAdmin/src/main/java/com/simple/controller/WxPayOrderController.java @@ -75,14 +75,4 @@ public class WxPayOrderController extends BaseController { @Autowired private WxAppinfoService wxAppinfoService; - - @ApiOperation("测试分账") - @GetMapping("/sharing") - public ResultData test() { - //xProfitSharingOrderService.test(); - wxPayOrderService.sendPaySuccess(); - - return new ResultData(); - } - } diff --git a/mallinkBApi/src/main/java/com/simple/controller/WxCouponOrderController.java b/mallinkBApi/src/main/java/com/simple/controller/WxCouponOrderController.java index 22ae3324a..c5242ae93 100644 --- a/mallinkBApi/src/main/java/com/simple/controller/WxCouponOrderController.java +++ b/mallinkBApi/src/main/java/com/simple/controller/WxCouponOrderController.java @@ -147,6 +147,15 @@ public class WxCouponOrderController extends BaseController { } } + // 核销发模板消息 + if (couponOrder != null) { + try { + wxCouponOrderService.sendVerifyMsg(getAppInfo(getUser().getAppId()), couponOrder, getUser()); + } catch (Exception e) { + logger.error(e.getMessage()); + } + } + return new ResultData(couponOrder); } diff --git a/mallinkService/src/main/java/com/simple/domain/po/WxTemplateMsg.java b/mallinkService/src/main/java/com/simple/domain/po/WxTemplateMsg.java index 97bf68b21..18ea79629 100644 --- a/mallinkService/src/main/java/com/simple/domain/po/WxTemplateMsg.java +++ b/mallinkService/src/main/java/com/simple/domain/po/WxTemplateMsg.java @@ -41,20 +41,19 @@ public class WxTemplateMsg implements Serializable { } - - /*租户ID**/ + /**租户ID**/ @io.swagger.annotations.ApiModelProperty(value="租户ID",name="tenantId") private String tenantId; - /*模板ID**/ + /**模板ID**/ @io.swagger.annotations.ApiModelProperty(value="模板ID",name="templateId") private String templateId; - /*模板类型1:支付成功消息2:退款申请成功消息**/ - @io.swagger.annotations.ApiModelProperty(value="模板类型1:支付成功消息2:退款申请成功消息",name="type") + /**模板类型1:核销成功消息, 2:核销失败消息**/ + @io.swagger.annotations.ApiModelProperty(value="模板类型1:核销成功消息,2:核销失败消息",name="type") private Integer type; - /*创建时间**/ + /**创建时间**/ @io.swagger.annotations.ApiModelProperty(value="创建时间",name="createDate") private Date createDate; - /*更新时间**/ + /**更新时间**/ @io.swagger.annotations.ApiModelProperty(value="更新时间",name="updateDate") private Date updateDate; public String getTenantId() { @@ -93,11 +92,11 @@ public class WxTemplateMsg implements Serializable { public static enum Field { Id_ASC("`id` ASC"),Id_DESC("`id` DESC") - ,TenantId_ASC("`tenantId` ASC"),TenantId_DESC("`tenantId` DESC") - ,TemplateId_ASC("`templateId` ASC"),TemplateId_DESC("`templateId` DESC") + ,TenantId_ASC("`tenant_id` ASC"),TenantId_DESC("`tenant_id` DESC") + ,TemplateId_ASC("`template_id` ASC"),TemplateId_DESC("`template_id` DESC") ,Type_ASC("`type` ASC"),Type_DESC("`type` DESC") - ,CreateDate_ASC("`createDate` ASC"),CreateDate_DESC("`createDate` DESC") - ,UpdateDate_ASC("`updateDate` ASC"),UpdateDate_DESC("`updateDate` DESC") + ,CreateDate_ASC("`create_date` ASC"),CreateDate_DESC("`create_date` DESC") + ,UpdateDate_ASC("`update_date` ASC"),UpdateDate_DESC("`update_date` DESC") ; private String value; Field(String value){ @@ -130,6 +129,8 @@ public class WxTemplateMsg implements Serializable { sb.append(","); sb.append(fields[k].toString()); } + + this.sortColumns = sb.toString(); } diff --git a/mallinkService/src/main/java/com/simple/enums/EnumTemplateType.java b/mallinkService/src/main/java/com/simple/enums/EnumTemplateType.java index 5a83bc972..628dba395 100644 --- a/mallinkService/src/main/java/com/simple/enums/EnumTemplateType.java +++ b/mallinkService/src/main/java/com/simple/enums/EnumTemplateType.java @@ -5,11 +5,10 @@ package com.simple.enums; */ public enum EnumTemplateType { - // 1-支付成功消息, 2-支付失败消息 3-退款消息 + // 1-核销成功消息, 2-核销失败消息 - PAY_SUCCESS(1, "订单支付成功通知"), - PAY_FAIL(2, "支付失败通知"), - REFUND(3, "退款通知") + VERIFY_SUCCESS(1, "核销成功消息"), + VERIFY_FAIL(2, "核销失败消息") ; public static EnumTemplateType getEnum(Integer code) { diff --git a/mallinkService/src/main/java/com/simple/service/WxCouponOrderService.java b/mallinkService/src/main/java/com/simple/service/WxCouponOrderService.java index d2805b1a9..4f8008949 100644 --- a/mallinkService/src/main/java/com/simple/service/WxCouponOrderService.java +++ b/mallinkService/src/main/java/com/simple/service/WxCouponOrderService.java @@ -2,6 +2,7 @@ package com.simple.service; import com.github.pagehelper.PageInfo; import com.simple.common.ResultData; +import com.simple.domain.po.WxAppinfo; import com.simple.domain.po.WxCouponOrder; import com.simple.domain.po.WxMerchantBUser; import com.simple.domain.po.WxOrder; @@ -78,6 +79,14 @@ public interface WxCouponOrderService { */ void shareAfterVerify(WxCouponOrder couponOrder); + /** + * 核销模板消息 + * @param appInfo + * @param couponOrder + * @param bUser + */ + void sendVerifyMsg(WxAppinfo appInfo, WxCouponOrder couponOrder, WxMerchantBUser bUser); + /** * 根据日期 b用户查券list * diff --git a/mallinkService/src/main/java/com/simple/service/WxPayOrderService.java b/mallinkService/src/main/java/com/simple/service/WxPayOrderService.java index 1065e3d5f..8ed43e065 100644 --- a/mallinkService/src/main/java/com/simple/service/WxPayOrderService.java +++ b/mallinkService/src/main/java/com/simple/service/WxPayOrderService.java @@ -109,7 +109,5 @@ public interface WxPayOrderService { */ void deleteById(Long id); - void sendPaySuccess(); - } diff --git a/mallinkService/src/main/java/com/simple/service/impl/WxCouponOrderServiceImpl.java b/mallinkService/src/main/java/com/simple/service/impl/WxCouponOrderServiceImpl.java index 3c85f2a92..92d5877f0 100644 --- a/mallinkService/src/main/java/com/simple/service/impl/WxCouponOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/simple/service/impl/WxCouponOrderServiceImpl.java @@ -3,8 +3,11 @@ package com.simple.service.impl; import cn.afterturn.easypoi.excel.ExcelExportUtil; import cn.afterturn.easypoi.excel.entity.ExportParams; import cn.afterturn.easypoi.excel.entity.enmus.ExcelType; +import cn.binarywang.wx.miniapp.api.WxMaService; +import cn.binarywang.wx.miniapp.bean.WxMaTemplateMessage; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; +import com.google.common.collect.Lists; import com.simple.common.ErrorCode; import com.simple.common.IdWorker; import com.simple.common.ResultData; @@ -13,15 +16,16 @@ import com.simple.domain.vo.CUserDateAmountVo; import com.simple.domain.vo.WxCouponOrderBVo; import com.simple.domain.vo.WxCouponOrderCVo; import com.simple.domain.vo.WxCouponOrderCarCVo; -import com.simple.enums.EnumCouponOrderStatus; -import com.simple.enums.EnumCouponSendType; -import com.simple.enums.EnumPayShare; -import com.simple.enums.EnumPayStatus; +import com.simple.enums.*; import com.simple.exception.MallinkException; import com.simple.mapper.*; -import com.simple.service.*; -import com.simple.utils.DataUtil; +import com.simple.service.WxCouponOrderService; +import com.simple.service.WxCouponSendService; +import com.simple.service.WxOrderService; +import com.simple.service.WxProfitSharingOrderService; import com.simple.utils.DateUtils; +import com.simple.utils.MaUtil; +import me.chanjar.weixin.common.error.WxErrorException; import org.apache.log4j.Logger; import org.apache.poi.ss.usermodel.Workbook; import org.springframework.beans.factory.annotation.Autowired; @@ -40,7 +44,7 @@ import java.util.*; public class WxCouponOrderServiceImpl implements WxCouponOrderService { private Logger logger = Logger.getLogger(WxCouponOrderServiceImpl.class); - @Autowired + @Autowired WxCouponOrderMapper wxCouponOrderMapper; @Autowired @@ -70,6 +74,12 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { @Autowired WxMallMapper wxMallMapper; + @Autowired + WxTemplateMsgMapper wxTemplateMsgMapper; + + @Autowired + WxCouponMapper wxCouponMapper; + @Override public PageInfo listAsPage(WxCouponOrder record, Integer pageIndex, Integer pageSize) { @@ -86,7 +96,7 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { if (record.getId() == null) { //record.setId(UUID.randomUUID().toString().replaceAll("-", "")); final IdWorker idWorker = IdWorker.get(); - record.setId(idWorker.nextId()); + record.setId(idWorker.nextId()); wxCouponOrderMapper.insertSelective(record); } else { wxCouponOrderMapper.updateByPrimaryKeySelective(record); @@ -135,8 +145,7 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { } catch (ParseException e) { return new ResultData(ErrorCode.SYS_PARAMETER_CAST_ERROR); } - } - else { + } else { try { startDate = fmt.parse(date); } catch (ParseException e) { @@ -144,7 +153,7 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { } Calendar cal = Calendar.getInstance(); cal.setTime(startDate); - cal.add(Calendar.DATE,1); + cal.add(Calendar.DATE, 1); endDate = cal.getTime(); } @@ -157,7 +166,7 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { if (pageIndex == null || pageSize == null) { List list; - if(isVerified) + if (isVerified) list = wxCouponOrderMapper.findListOfVerifiedByDate(dateMap); else list = wxCouponOrderMapper.findListOfOrderedByDate(dateMap); @@ -167,8 +176,7 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { total_price = total_price + couponOrder.getCouponPrice(); } resultMap.put("amount", total_price); - } - else { + } else { if (isVerified) resultMap.put("list", PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxCouponOrderMapper.findListOfVerifiedByDateForBUser(dateMap))); else @@ -196,8 +204,8 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { @Override public ResultData detailCUserVo(Long cUserId, String couponOrderId) { WxCUser wxCuser = wxCUserMapper.selectByPrimaryKey(cUserId); - if(wxCuser == null){ - logger.error("用户不存在:"+ cUserId); + if (wxCuser == null) { + logger.error("用户不存在:" + cUserId); throw new MallinkException(ErrorCode.USER_IS_EMPTY); } @@ -215,8 +223,8 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { @Override public ResultData detailBUserVo(Long bUserId, String couponOrderId) { WxMerchantBUser wxMerchantBUser = wxMerchantBUserMapper.selectByPrimaryKey(bUserId); - if(wxMerchantBUser == null){ - logger.error("用户不存在:"+ bUserId); + if (wxMerchantBUser == null) { + logger.error("用户不存在:" + bUserId); throw new MallinkException(ErrorCode.USER_IS_EMPTY); } @@ -250,21 +258,21 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { WxMall wxMall = new WxMall(); wxMall.setTenantId(tenantId); wxMall = wxMallMapper.findList(wxMall).get(0); - String filepath="./uploads/"; + String filepath = "./uploads/"; File savefile = new File(filepath); if (!savefile.exists()) { savefile.mkdirs(); } - Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams("","",ExcelType.XSSF), WxCouponOrderBVo.class, list); + Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams("", "", ExcelType.XSSF), WxCouponOrderBVo.class, list); FileOutputStream fos = null; try { - String filename=wxMall.getName()+ DateUtils.getSystemTime("yyyyMMDDHHmmss") +".xlsx"; - filepath=filepath+filename; + String filename = wxMall.getName() + DateUtils.getSystemTime("yyyyMMDDHHmmss") + ".xlsx"; + filepath = filepath + filename; fos = new FileOutputStream(filepath); workbook.write(fos); fos.close(); - downFile(filepath,filename,response,request); + downFile(filepath, filename, response, request); } catch (Exception e) { e.printStackTrace(); } @@ -273,8 +281,8 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { } - public void downFile(String filePath,String filename, HttpServletResponse response, - HttpServletRequest req) throws IOException { + public void downFile(String filePath, String filename, HttpServletResponse response, + HttpServletRequest req) throws IOException { try { response.reset(); response.setContentType("bin"); @@ -308,21 +316,21 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { public WxCouponOrder verify(Long couponOrderId, Long bUserId) { WxCouponOrder wxCouponOrder = wxCouponOrderMapper.selectByPrimaryKey(couponOrderId); - if(wxCouponOrder == null){ - logger.error("券ID不存在:"+ couponOrderId); + if (wxCouponOrder == null) { + logger.error("券ID不存在:" + couponOrderId); throw new MallinkException(ErrorCode.COUPON_ORDER_IS_NULL); } - WxMerchantBUser wxMerchantBUser = wxMerchantBUserMapper.selectByPrimaryKey(bUserId.longValue()); - if(wxMerchantBUser == null){ - logger.error("核销员ID不存在:"+ bUserId); + WxMerchantBUser wxMerchantBUser = wxMerchantBUserMapper.selectByPrimaryKey(bUserId.longValue()); + if (wxMerchantBUser == null) { + logger.error("核销员ID不存在:" + bUserId); throw new MallinkException(ErrorCode.COUPON_ORDER_IS_NULL); } WxOrder wxOrder = wxOrderMapper.selectByPrimaryKey(wxCouponOrder.getOrderId()); - if (!wxOrder.getMerchantId().equals(wxMerchantBUser.getMerchantId())){ - logger.error("券: couponMerchantId-" + wxOrder.getMerchantId()+"核销: couponMerchantId-"+wxMerchantBUser.getMerchantId()); + if (!wxOrder.getMerchantId().equals(wxMerchantBUser.getMerchantId())) { + logger.error("券: couponMerchantId-" + wxOrder.getMerchantId() + "核销: couponMerchantId-" + wxMerchantBUser.getMerchantId()); throw new MallinkException(ErrorCode.COUPON_ORDER_IS_NULL); } if (wxCouponOrder.getCouponOrderStatus() == EnumCouponOrderStatus.COUPON_ORDER_OVER_TIME.getCode()) { @@ -381,16 +389,134 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { } } + /** + * 微信模板消息 + * + * @param appInfo, couponOrder, bUser + */ + @Override + public void sendVerifyMsg(WxAppinfo appInfo, WxCouponOrder couponOrder, WxMerchantBUser bUser) { + // 1. get template id + WxTemplateMsg msgQ = new WxTemplateMsg(); + msgQ.setTenantId(couponOrder.getTenantId()); + msgQ.setType(EnumTemplateType.VERIFY_FAIL.getCode()); + WxTemplateMsg msg = null; + List list = wxTemplateMsgMapper.select(msgQ); + if (list.size() > 0) { + msg = list.get(0); + } + if (msg == null) { + logger.error("找不到模板Id"); + throw new MallinkException(ErrorCode.TEMPLATE_NOT_FOUND); + } + // 2. get order info + WxOrder order = wxOrderMapper.selectByPrimaryKey(couponOrder.getOrderId()); + if (order == null) { + logger.error("找不到订单信息"); + throw new MallinkException(ErrorCode.ORDER_IS_NOT_FIND); + } + // 3. get coupon info + WxCoupon coupon = wxCouponMapper.selectByPrimaryKey(couponOrder.getCouponId()); + if (coupon == null) { + logger.error("找不到券信息"); + throw new MallinkException(ErrorCode.COUPON_IS_EMPTY); + } + // 4. merchant info + WxMerchant merchant = wxMerchantMapper.selectByPrimaryKey(bUser.getId()); + if (merchant == null) { + logger.error("找不到商户信息"); + throw new MallinkException(ErrorCode.MERCHANT_INFO_NOT_FOUND); + } + // 5. get user info + WxCUser user = wxCUserMapper.selectByPrimaryKey(order.getCUserId()); + if (user == null) { + logger.error("找不到C端用户"); + throw new MallinkException(ErrorCode.USER_IS_EMPTY); + } + // 6. get payOrder info + WxPayOrder payOrder = null; + WxPayOrder payOrderQ = new WxPayOrder(); + payOrderQ.setTenantId(appInfo.getTenantId()); + payOrderQ.setOrderId(order.getId()); + payOrderQ.setPayOrderStatus(EnumPayStatus.PAY_WAY_SUCCESS.getCode()); + List payList = wxPayOrderMapper.select(payOrderQ); + if (payList.size() > 0) { + payOrder = payList.get(0); + } + + WxMaService wxMaService = MaUtil.getWeappService(appInfo); + + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); + String couponDetail = ""; + if (coupon.getType() == EnumCouponType.COUPON_MANJIAN.getCode()) { + couponDetail = "满" + coupon.getUsePriceStr() + "减" + coupon.getPriceStr(); + } + + WxMaTemplateMessage templateMessage = null; + if (couponOrder.getCouponOrderStatus() == EnumCouponOrderStatus.COUPON_ORDER_USED.getCode()) { + /** + * 核销成功 + * 核销金额 {{keyword1.DATA}} + * 商家名称 {{keyword2.DATA}} + * 商品 {{keyword3.DATA}} + * 核销时间 {{keyword4.DATA}} + * 商品描述 {{keyword5.DATA}} + */ + templateMessage = WxMaTemplateMessage.builder() + .toUser(user.getOpenId()) + .formId(payOrder.getPrepayId()) // 微信支付的formId是prepayId + .page("pages/index/index") + .data(Lists.newArrayList( + new WxMaTemplateMessage.Data("keyword1", String.valueOf(coupon.getPrice() * 1.0 / 100) + "元", "#173177"), + new WxMaTemplateMessage.Data("keyword2", merchant.getName(), "#173177"), + new WxMaTemplateMessage.Data("keyword3", coupon.getTitle(), "#173177"), + new WxMaTemplateMessage.Data("keyword4", dateFormat.format(new Date()), "#173177"), + new WxMaTemplateMessage.Data("keyword5", merchant.getName(), "#173177")) + ) + .templateId(msg.getTemplateId()) + .emphasisKeyword("keyword1.DATA") + .build(); + } else { + /** + * 核销失败 + * 商品名称 {{keyword1.DATA}} + * 核销时间 {{keyword2.DATA}} + * 失败原因 {{keyword3.DATA}} + * 备注 {{keyword4.DATA}} + */ + templateMessage = WxMaTemplateMessage.builder() + .toUser(user.getOpenId()) + .formId(payOrder.getPrepayId()) // 微信支付的formId是prepayId + .page("pages/index/index") + .data(Lists.newArrayList( + new WxMaTemplateMessage.Data("keyword1", coupon.getTitle(), "#173177"), + new WxMaTemplateMessage.Data("keyword2", dateFormat.format(new Date()), "#173177"), + new WxMaTemplateMessage.Data("keyword3", "未知"), + new WxMaTemplateMessage.Data("keyword4", couponDetail)) + ) + .templateId(msg.getTemplateId()) + .emphasisKeyword("keyword1.DATA") + .build(); + } + //templateMessage.addData( new WxMaTemplateMessage.Data("keyword1", "339208499", "#173177")); + try { + wxMaService.getMsgService().sendTemplateMsg(templateMessage); + } catch (WxErrorException e) { + logger.error("支付通知发送失败: " + e.getMessage()); + throw new MallinkException(ErrorCode.TEMPLATE_SEND_FAILED); + } + } - @Override - public List queryPriceTotalGroup(String tenantId, Date startTime, Date endTime) { - return wxCouponOrderMapper.queryPriceTotalGroup(tenantId, startTime, endTime); - } - @Override - public int queryPriceTotal(String tenantId, Date startTime, Date endTime) { - return wxCouponOrderMapper.queryPriceTotal(tenantId, startTime, endTime); - } + @Override + public List queryPriceTotalGroup(String tenantId, Date startTime, Date endTime) { + return wxCouponOrderMapper.queryPriceTotalGroup(tenantId, startTime, endTime); + } + + @Override + public int queryPriceTotal(String tenantId, Date startTime, Date endTime) { + return wxCouponOrderMapper.queryPriceTotal(tenantId, startTime, endTime); + } } diff --git a/mallinkService/src/main/java/com/simple/service/impl/WxPayOrderServiceImpl.java b/mallinkService/src/main/java/com/simple/service/impl/WxPayOrderServiceImpl.java index ee0cccdc9..e75591b19 100644 --- a/mallinkService/src/main/java/com/simple/service/impl/WxPayOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/simple/service/impl/WxPayOrderServiceImpl.java @@ -901,100 +901,8 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { wxPayOrderMapper.deleteByPrimaryKey(id); } - @Override - public void sendPaySuccess() { - /* - WxAppinfo appinfoQ = new WxAppinfo(); - appinfoQ.setTenantId("234"); - appinfoQ.setType(EnumAppType.C.getCode()); - List appinfoList= wxAppinfoMapper.select(appinfoQ); - WxAppinfo appinfo = appinfoList.get(0); - - String payOrderIdStr = "196936823522459648"; - Long payOrderId = Long.valueOf(payOrderIdStr); - WxPayOrder updateOrder = wxPayOrderMapper.selectByPrimaryKey(payOrderId); - WxOrder order = wxOrderMapper.selectByPrimaryKey(updateOrder.getOrderId()); - sendPaySuccessMsg(appinfo, order, updateOrder); - */ - } - - /** - * 微信模板通知用户 - * @param updateOrder - * 支付时间 {{keyword1.DATA}} - * 支付方式 {{keyword2.DATA}} - * 支付金额 {{keyword3.DATA}} - * 商品名称 {{keyword4.DATA}} - * 商家名称 {{keyword5.DATA}} - * 订单状态 {{keyword6.DATA}} - */ - private void sendPaySuccessMsg(WxAppinfo appInfo, WxOrder order, WxPayOrder updateOrder) { - // 1. get template id - WxTemplateMsg msgQ = new WxTemplateMsg(); - msgQ.setTenantId(order.getTenantId()); - msgQ.setType(EnumTemplateType.PAY_SUCCESS.getCode()); - WxTemplateMsg msg = null; - List list= wxTemplateMsgMapper.select(msgQ); - if (list.size() > 0) { - msg = list.get(0); - } - if (msg == null) { - logger.error("找不到模板Id"); - throw new MallinkException(ErrorCode.TEMPLATE_NOT_FOUND); - } - // 2. get coupon info - WxCoupon coupon = wxCouponMapper.selectByPrimaryKey(order.getCouponId()); - if (coupon == null) { - logger.error("找不到券信息"); - throw new MallinkException(ErrorCode.COUPON_IS_EMPTY); - } - // 3. merchant info - WxMerchant merchant = wxMerchantMapper.selectByPrimaryKey(order.getMerchantId()); - if (merchant == null) { - logger.error("找不到商户信息"); - throw new MallinkException(ErrorCode.MERCHANT_INFO_NOT_FOUND); - } - // 3. get user info - WxCUser user = wxCUserMapper.selectByPrimaryKey(order.getCUserId()); - if (user == null) { - logger.error("找不到C端用户"); - throw new MallinkException(ErrorCode.USER_IS_EMPTY); - } - - if (StringUtils.isBlank(updateOrder.getPrepayId())) { - logger.error("prepayId为空"); - throw new MallinkException(ErrorCode.PREPAY_ID_IS_EMPTY); - } - - WxMaService wxMaService = MaUtil.getWeappService(appInfo); - - - SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); - WxMaTemplateMessage templateMessage = WxMaTemplateMessage.builder() - .toUser(user.getOpenId()) - .formId(updateOrder.getPrepayId()) // 微信支付的formId是prepayId - .page("pages/index/index") - .data(Lists.newArrayList( - new WxMaTemplateMessage.Data("keyword1", dateFormat.format(new Date()), "#173177"), - new WxMaTemplateMessage.Data("keyword2", "微信支付", "#173177"), - new WxMaTemplateMessage.Data("keyword3", String.valueOf(updateOrder.getPayAmount()*1.0/100) + "元", "#173177"), - new WxMaTemplateMessage.Data("keyword4", coupon.getTitle(), "#173177"), - new WxMaTemplateMessage.Data("keyword5", merchant.getName(), "#173177"), - new WxMaTemplateMessage.Data("keyword6", EnumOrderStatus.getEnum(order.getOrderStatus()).getMessage(), "#173177"))) - .templateId(msg.getTemplateId()) - .emphasisKeyword("keyword1.DATA") - .build(); - //templateMessage.addData( new WxMaTemplateMessage.Data("keyword1", "339208499", "#173177")); - try { - wxMaService.getMsgService().sendTemplateMsg(templateMessage); - } catch (WxErrorException e) { - logger.error("支付通知发送失败: " + e.getMessage()); - throw new MallinkException(ErrorCode.TEMPLATE_SEND_FAILED); - } - } - public static void main(String [] args) { - Integer v = 500; + Integer v = 50; Integer rate = 6; Double dChargeFee = Math.ceil(v*1.0D*6/1000); Integer share_amount = v - dChargeFee.intValue();