src/main/java/cc/mrbird/febs/common/enumerates/DataDictionaryEnum.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/cc/mrbird/febs/mall/dto/RechargeWalletMessageSendDto.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/cc/mrbird/febs/mall/vo/RechargeWalletMessageSendVo.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/cc/mrbird/febs/pay/controller/XcxPayController.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/cc/mrbird/febs/pay/service/IXcxPayService.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/cc/mrbird/febs/pay/service/impl/XcxPayServiceImpl.java | ●●●●● patch | view | raw | blame | history | |
src/main/resources/mapper/modules/MallMoneyFlowMapper.xml | ●●●●● patch | view | raw | blame | history |
src/main/java/cc/mrbird/febs/common/enumerates/DataDictionaryEnum.java
@@ -5,8 +5,11 @@ @Getter public enum DataDictionaryEnum { //微信订阅模板ID,微信订单通知 //微信订阅模板ID, // 微信订单通知 WX_TEMPLATE_ID_ONE("WX_TEMPLATE", "WX_TEMPLATE_ID_ONE"), // 充值到账通知 WX_TEMPLATE_ID_TWO("WX_TEMPLATE", "WX_TEMPLATE_ID_TWO"), //配送设置 HOME_DELIVERY_AMOUNT("DELIVERY_SETTING", "HOME_DELIVERY_AMOUNT"), FRIST_COST_LEVEL("HOME_DELIVERY_SETTING", "FRIST_COST_LEVEL"), src/main/java/cc/mrbird/febs/mall/dto/RechargeWalletMessageSendDto.java
New file @@ -0,0 +1,24 @@ package cc.mrbird.febs.mall.dto; import io.swagger.annotations.ApiModel; import lombok.Data; @Data @ApiModel(value = "RechargeWalletMessageSendDto", description = "充值到账消息通知") public class RechargeWalletMessageSendDto { //交易单号 private String rechargeNo; //充值金额 private String rechargeAmount; //账户余额 private String balance; //充值时间 private String createTime; //用户openId private String openId; //订阅消息模版id private String templateId; //默认跳到小程序首页 private String page = "pages/home/index"; } src/main/java/cc/mrbird/febs/mall/vo/RechargeWalletMessageSendVo.java
New file @@ -0,0 +1,19 @@ package cc.mrbird.febs.mall.vo; import cc.mrbird.febs.pay.model.WxTemplateData; import io.swagger.annotations.ApiModel; import lombok.Data; import java.util.Map; @Data @ApiModel(value = "RechargeWalletMessageSendVo", description = "通知") public class RechargeWalletMessageSendVo { private String touser;//用户openid private String template_id;//订阅消息模版id private String miniprogram_state="developer";//跳转小程序类型:developer为开发版;trial为体验版;formal为正式版;默认为正式版 private String lang="zh_CN";//进入小程序查看”的语言类型,支持zh_CN(简体中文)、en_US(英文)、zh_HK(繁体中文)、zh_TW(繁体中文),默认为zh_CN private String page;//默认跳到小程序首页 private Map<String, WxTemplateData> data;//推送文字 } src/main/java/cc/mrbird/febs/pay/controller/XcxPayController.java
@@ -1,17 +1,18 @@ package cc.mrbird.febs.pay.controller; import cc.mrbird.febs.common.entity.FebsResponse; import cc.mrbird.febs.common.enumerates.DataDictionaryEnum; import cc.mrbird.febs.common.enumerates.OrderDeliveryStateEnum; import cc.mrbird.febs.common.enumerates.OrderStatusEnum; import cc.mrbird.febs.common.properties.XcxProperties; import cc.mrbird.febs.common.utils.RedisUtils; import cc.mrbird.febs.common.utils.SpringContextHolder; import cc.mrbird.febs.mall.dto.RechargeWalletMessageSendDto; import cc.mrbird.febs.mall.entity.DataDictionaryCustom; import cc.mrbird.febs.mall.entity.MallMemberWallet; import cc.mrbird.febs.mall.entity.MallMoneyFlow; import cc.mrbird.febs.mall.entity.MallOrderInfo; import cc.mrbird.febs.mall.mapper.MallMemberWalletMapper; import cc.mrbird.febs.mall.mapper.MallMoneyFlowMapper; import cc.mrbird.febs.mall.mapper.MallOrderInfoMapper; import cc.mrbird.febs.mall.mapper.*; import cc.mrbird.febs.mall.service.IApiMallMemberWalletService; import cc.mrbird.febs.pay.model.NotifyData; import cc.mrbird.febs.pay.model.OrderStateDto; @@ -23,6 +24,7 @@ import cc.mrbird.febs.pay.util.Signature; import cc.mrbird.febs.pay.util.Util; import cc.mrbird.febs.pay.util.WechatConfigure; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; @@ -59,6 +61,10 @@ MallMoneyFlowMapper mallMoneyFlowMapper; @Autowired MallMemberWalletMapper mallMemberWalletMapper; @Autowired MallMemberMapper mallMemberMapper; @Autowired DataDictionaryCustomMapper dataDictionaryCustomMapper; @Autowired RedisUtils redisUtils; @Autowired @@ -125,11 +131,19 @@ RoundingMode.HALF_UP); if (ObjectUtil.isNotEmpty(mallMoneyFlow)) { log.debug("检查支付金额payMoney={},mallMoneyFlow.getPayMoney()={}", payMoney, mallMoneyFlow.getAmount()); MallMemberWallet mallMemberWallet = mallMemberWalletMapper.selectWalletByMemberId(memberId); if(ObjectUtil.isNotEmpty(mallMemberWallet)){ log.debug("检查支付金额payMoney={},mallMoneyFlow.getPayMoney()={}", payMoney, mallMoneyFlow.getAmount()); memberWalletService.addBalance(payMoney,memberId); } RechargeWalletMessageSendDto rechargeWalletMessageSendDto = new RechargeWalletMessageSendDto(); rechargeWalletMessageSendDto.setRechargeNo(rechargeNo); rechargeWalletMessageSendDto.setRechargeAmount(payMoney.toString()); MallMemberWallet mallMemberWallet = mallMemberWalletMapper.selectWalletByMemberId(memberId); rechargeWalletMessageSendDto.setBalance(mallMemberWallet.getBalance().toString()); rechargeWalletMessageSendDto.setCreateTime(DateUtil.now()); rechargeWalletMessageSendDto.setOpenId(mallMemberMapper.selectById(memberId).getOpenId()); DataDictionaryCustom dataDictionaryCustom = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.WX_TEMPLATE_ID_TWO.getType(), DataDictionaryEnum.WX_TEMPLATE_ID_TWO.getCode()); rechargeWalletMessageSendDto.setTemplateId(dataDictionaryCustom.getValue()); iXcxPayService.rechargeWalletMessageSend(rechargeWalletMessageSendDto); threadResult.success().message("充值成功"); } else { log.info("充值失败", attrStr); src/main/java/cc/mrbird/febs/pay/service/IXcxPayService.java
@@ -2,6 +2,7 @@ import cc.mrbird.febs.common.entity.FebsResponse; import cc.mrbird.febs.mall.dto.ApiRechargeWalletDto; import cc.mrbird.febs.mall.dto.RechargeWalletMessageSendDto; import cc.mrbird.febs.mall.entity.MallOrderInfo; import cc.mrbird.febs.pay.model.BrandWCPayRequestData; import cc.mrbird.febs.pay.model.OrderStateDto; @@ -37,4 +38,10 @@ * 发起充值(创建预付订单) */ BrandWCPayRequestData startRechargeWallet(ApiRechargeWalletDto apiRechargeWalletDto) throws Exception; /** * 充值到账消息 */ void rechargeWalletMessageSend(RechargeWalletMessageSendDto info); } src/main/java/cc/mrbird/febs/pay/service/impl/XcxPayServiceImpl.java
@@ -10,6 +10,7 @@ import cc.mrbird.febs.common.utils.RedisUtils; import cc.mrbird.febs.common.utils.SpringContextHolder; import cc.mrbird.febs.mall.dto.ApiRechargeWalletDto; import cc.mrbird.febs.mall.dto.RechargeWalletMessageSendDto; import cc.mrbird.febs.mall.entity.DataDictionaryCustom; import cc.mrbird.febs.mall.entity.MallMember; import cc.mrbird.febs.mall.entity.MallOrderInfo; @@ -18,6 +19,7 @@ import cc.mrbird.febs.mall.mapper.MallMemberMapper; import cc.mrbird.febs.mall.mapper.MallOrderInfoMapper; import cc.mrbird.febs.mall.service.IMallMoneyFlowService; import cc.mrbird.febs.mall.vo.RechargeWalletMessageSendVo; import cc.mrbird.febs.pay.model.*; import cc.mrbird.febs.pay.service.IXcxPayService; import cc.mrbird.febs.pay.util.WechatConfigure; @@ -94,6 +96,28 @@ } @Override public void rechargeWalletMessageSend(RechargeWalletMessageSendDto info) { RestTemplate restTemplate = new RestTemplate(); String url = WechatConfigure.SEND_INFO_URL + redisUtils.get(WechatConfigure.WX_ACCESS_TOKEN_REDIS_KEY); //拼接推送的模版 RechargeWalletMessageSendVo orderStateMsgVo = new RechargeWalletMessageSendVo(); orderStateMsgVo.setTouser(info.getOpenId());//用户的openId orderStateMsgVo.setTemplate_id(info.getTemplateId());//订阅消息模板id orderStateMsgVo.setPage(info.getPage()); Map<String, WxTemplateData> m = new HashMap<>(4); m.put("character_string1", new WxTemplateData(info.getRechargeNo())); m.put("amount3", new WxTemplateData(info.getRechargeAmount())); m.put("amount4", new WxTemplateData(info.getBalance())); m.put("date5", new WxTemplateData(info.getCreateTime())); orderStateMsgVo.setData(m); String s = JSONUtil.toJsonStr(orderStateMsgVo); log.info(s); ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, orderStateMsgVo, String.class); log.info(responseEntity.getBody()); } @Override public BrandWCPayRequestData startPayment(MallOrderInfo mallOrderInfo) throws Exception { BigDecimal unit = new BigDecimal("100"); BigDecimal money = new BigDecimal(mallOrderInfo.getAmount().toString()); @@ -122,12 +146,11 @@ orderStateMsgVo.setTouser(info.getOpenId());//用户的openId orderStateMsgVo.setTemplate_id(info.getTemplateId());//订阅消息模板id orderStateMsgVo.setPage(info.getPage()); Map<String, WxTemplateData> m = new HashMap<>(5); m.put("character_string1", new WxTemplateData(info.getOrderNo())); m.put("thing9", new WxTemplateData(info.getGoodsName())); m.put("phrase2", new WxTemplateData(info.getOrderState())); m.put("thing13", new WxTemplateData(info.getAddressArea())); m.put("thing16", new WxTemplateData(info.getTakeCode())); Map<String, WxTemplateData> m = new HashMap<>(4); m.put("character_string2", new WxTemplateData(info.getOrderNo())); m.put("thing11", new WxTemplateData(info.getGoodsName())); m.put("amount1", new WxTemplateData(info.getAmount())); m.put("character_string9", new WxTemplateData(info.getTakeCode())); orderStateMsgVo.setData(m); String s = JSONUtil.toJsonStr(orderStateMsgVo); log.info(s); @@ -172,7 +195,7 @@ orderStateMsgVo.setTouser(info.getOpenId());//用户的openId orderStateMsgVo.setTemplate_id(info.getTemplateId());//订阅消息模板id orderStateMsgVo.setPage(info.getPage()); Map<String, WxTemplateData> m = new HashMap<>(5); Map<String, WxTemplateData> m = new HashMap<>(4); m.put("character_string2", new WxTemplateData(info.getOrderNo())); m.put("thing11", new WxTemplateData(info.getGoodsName())); m.put("amount1", new WxTemplateData(info.getAmount())); src/main/resources/mapper/modules/MallMoneyFlowMapper.xml
@@ -134,6 +134,6 @@ <select id="selectOneByOrderNoAndMemberId" resultType="cc.mrbird.febs.mall.entity.MallMoneyFlow"> select a.* from mall_money_flow a where a.order_no = #{} and a.member_id = #{memberId} where a.order_no = #{rechargeNo} and a.member_id = #{memberId} </select> </mapper>