| @@ -0,0 +1,17 @@ | |||||
| --加商户提现菜单 | |||||
| INSERT INTO `mall_permission`(`id`, `name`, `parent_id`, `available`, `permission`, `resource_type`, `module_color`, `module_color_num`, `url`, `icon`, `version_type`, `sort`) VALUES (614, '商户提现', 6, 'Y', NULL, 1, NULL, NULL, 'merchantCashout', 'icon-tixian', 0, 610); | |||||
| --销售类型加权限 | |||||
| update mall_sale_type set menus = '[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 50, 101, 102, 103, 104, 105, 106, 107, 108, 201, 202, 203, 204, 205, 206, 209, 211, 212, 221, 222, 251, 299, 300, 301, 302, 303, 304, 305, 306, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 501, 502, 503, 504, 505, 506, 507, 508, 509, 511, 512, 513, 514, 521, 522, 523, 531, 532, 533, 591, 592, 595, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 621, 622, 623, 624, 625, 626, 627, 641, 642, 643, 644, 645, 646, 651, 661, 662, 663, 664, 671, 672, 673, 674, 675, 681, 682, 683, 684, 685, 686, 691, 692, 693, 694, 695, 701, 702, 703, 704, 711, 712, 713, 901, 902, 903, 904, 905, 931, 932, 951, 952, 961, 962, 963, 965, 966, 967, 968, 1001, 1002, 1003, 1004, 60701, 60702]' where id=1; | |||||
| update mall_sale_type set menus = '[1, 2, 4, 5, 6, 7, 8, 9, 10, 50, 101, 102, 103, 104, 105, 106, 107, 201, 202, 203, 204, 205, 209, 211, 212, 221, 222, 251, 409, 410, 411, 416, 418, 501, 502, 503, 504, 505, 506, 507, 508, 509, 511, 512, 513, 514, 521, 522, 523, 531, 532, 533, 591, 592, 595, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 621, 622, 623, 624, 625, 626, 627, 641, 642, 643, 644, 645, 646, 651, 661, 662, 663, 664, 671, 672, 673, 674, 675, 681, 682, 683, 684, 685, 686, 691, 692, 693, 694, 695, 701, 702, 703, 704, 711, 712, 713, 901, 902, 903, 904, 905, 931, 932, 951, 961, 60701, 60702]' where id=2; | |||||
| update mall_sale_type set menus = '[2, 4, 5, 6, 7, 10, 50, 201, 202, 205, 211, 212, 221, 222, 251, 409, 410, 411, 416, 418, 501, 502, 503, 504, 505, 506, 507, 508, 511, 512, 513, 514, 521, 522, 523, 531, 532, 533, 591, 592, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 621, 622, 623, 624, 625, 626, 641, 642, 643, 644, 645, 646, 651, 661, 662, 663, 664, 671, 672, 673, 674, 675, 681, 682, 683, 684, 685, 686, 691, 692, 693, 694, 695, 701, 702, 703, 704, 711, 712, 713, 901, 902, 903, 904, 905, 931, 932, 60701, 60702]' where id=3; | |||||
| update mall_sale_type set menus = '[2, 4, 5, 6, 7, 10, 50, 201, 202, 205, 211, 212, 221, 222, 251, 409, 410, 411, 416, 418, 501, 502, 503, 504, 505, 506, 507, 508, 511, 512, 513, 514, 521, 522, 523, 531, 532, 591, 601, 602, 604, 605, 606, 607, 608, 610, 611, 612, 613, 614, 622, 623, 624, 625, 626, 641, 642, 643, 644, 661, 662, 663, 664, 671, 672, 674, 675, 681, 682, 684, 685, 686, 691, 692, 693, 694, 695, 711, 901, 902, 904, 905, 931, 932, 60701, 60702]' where id=4; | |||||
| --所有广场管理员角色加权限 | |||||
| INSERT INTO `mall_role_permission`(`id`, `tenant_id`, `parent_tenant_id`, `permission_id`, `role_id`) | |||||
| select CEILING(RAND()*90000000000+10000000000) ,mui.tenant_id,mui.parent_tenant_id, 614,mur.role_id | |||||
| from mall_user_info mui | |||||
| left join mall_user_role mur on mui.id = mur.uid | |||||
| where mui.is_admin = 1 and mur.role_id is not null GROUP BY mur.role_id; | |||||
| @@ -108,7 +108,7 @@ public class ShiroConfig { | |||||
| filterChainDefinitionMap.put("/wxPay/notify/**", "anon"); // 支付回调 | filterChainDefinitionMap.put("/wxPay/notify/**", "anon"); // 支付回调 | ||||
| filterChainDefinitionMap.put("/wxPayBill/notify/**", "anon"); | filterChainDefinitionMap.put("/wxPayBill/notify/**", "anon"); | ||||
| filterChainDefinitionMap.put("/business/**", "anon"); // 商圈回调 | |||||
| filterChainDefinitionMap.put("/business/circle/**", "anon"); // 商圈回调 | |||||
| filterChainDefinitionMap.put("/alipay/notify/**", "anon"); | filterChainDefinitionMap.put("/alipay/notify/**", "anon"); | ||||
| @@ -14,6 +14,7 @@ import com.iformall.interceptor.BodyReaderHttpServletRequestWrapper; | |||||
| import com.iformall.service.WxBusinessCircleOrderService; | import com.iformall.service.WxBusinessCircleOrderService; | ||||
| import com.iformall.service.WxMallService; | import com.iformall.service.WxMallService; | ||||
| import com.iformall.service.WxPayAccountService; | import com.iformall.service.WxPayAccountService; | ||||
| import com.iformall.utils.MaUtil; | |||||
| import org.apache.commons.lang3.StringUtils; | import org.apache.commons.lang3.StringUtils; | ||||
| import org.slf4j.Logger; | import org.slf4j.Logger; | ||||
| import org.slf4j.LoggerFactory; | import org.slf4j.LoggerFactory; | ||||
| @@ -28,7 +29,7 @@ import java.util.Locale; | |||||
| import java.util.Map; | import java.util.Map; | ||||
| @RestController | @RestController | ||||
| @RequestMapping("/business") | |||||
| @RequestMapping("/business/circle") | |||||
| public class WxBusinessOrderController extends BaseController { | public class WxBusinessOrderController extends BaseController { | ||||
| private final Logger logger = LoggerFactory.getLogger(this.getClass()); | private final Logger logger = LoggerFactory.getLogger(this.getClass()); | ||||
| @@ -46,28 +47,28 @@ public class WxBusinessOrderController extends BaseController { | |||||
| /** | /** | ||||
| * | * | ||||
| * @return 微信商圈支付结果通知 | |||||
| * @return 微信商圈支付通知 | |||||
| */ | */ | ||||
| @PostMapping(value = "/order/{tenantId}") | @PostMapping(value = "/order/{tenantId}") | ||||
| @ResponseBody | @ResponseBody | ||||
| public Map<String,String> createOrder(@PathVariable String tenantId, HttpServletRequest request){ | public Map<String,String> createOrder(@PathVariable String tenantId, HttpServletRequest request){ | ||||
| logger.info("[" +getIpAddr() + "]微信商圈支付结果通知-----"+tenantId); | |||||
| logger.info("[" +getIpAddr() + "]微信商圈通知-----"+tenantId); | |||||
| Map<String,String> resultMap = new HashMap<>(); | Map<String,String> resultMap = new HashMap<>(); | ||||
| if(StringUtils.isBlank(tenantId)){ | if(StringUtils.isBlank(tenantId)){ | ||||
| logger.error("微信商圈支付结果通知-----tenantId为空"); | |||||
| logger.error("微信商圈通知-----tenantId为空"); | |||||
| resultMap.put("code","FAIL"); | resultMap.put("code","FAIL"); | ||||
| return resultMap; | return resultMap; | ||||
| } | } | ||||
| TenantEntity tenantEntity = wxMallService.getByTenantId(tenantId); | TenantEntity tenantEntity = wxMallService.getByTenantId(tenantId); | ||||
| if(tenantEntity == null){ | if(tenantEntity == null){ | ||||
| logger.error("微信商圈支付结果通知-----获取tenantEntity为null"); | |||||
| logger.error("微信商圈通知-----获取tenantEntity为null"); | |||||
| resultMap.put("code","FAIL"); | resultMap.put("code","FAIL"); | ||||
| return resultMap; | return resultMap; | ||||
| } | } | ||||
| WxPayService wxPayService = wxPayAccountService.getWxPayService(tenantId); | WxPayService wxPayService = wxPayAccountService.getWxPayService(tenantId); | ||||
| if(wxPayService == null){ | if(wxPayService == null){ | ||||
| logger.error("微信商圈支付结果通知-----获取wxPayService失败"); | |||||
| logger.error("微信商圈通知-----获取wxPayService失败"); | |||||
| resultMap.put("code","FAIL"); | resultMap.put("code","FAIL"); | ||||
| return resultMap; | return resultMap; | ||||
| } | } | ||||
| @@ -75,117 +76,74 @@ public class WxBusinessOrderController extends BaseController { | |||||
| try { | try { | ||||
| //----------------签名验证----------- | //----------------签名验证----------- | ||||
| BusinessCircleNotifyData notifyData = verifySignature(request,wxPayService); | BusinessCircleNotifyData notifyData = verifySignature(request,wxPayService); | ||||
| logger.info("微信商圈支付结果通知---回调通知对象{}"+notifyData.toString()); | |||||
| //解密 | |||||
| PaidResult result = wxPayService.getBusinessCircleService().decryptPaidNotifyDataResource(notifyData); | |||||
| logger.info("微信商圈支付结果通知---解密结果{}"+notifyData.toString()); | |||||
| logger.info("微信商圈通知---回调通知对象{}"+notifyData.toString()); | |||||
| WxBusinessCircleOrder wxBusinessCircleOrder = new WxBusinessCircleOrder(); | WxBusinessCircleOrder wxBusinessCircleOrder = new WxBusinessCircleOrder(); | ||||
| wxBusinessCircleOrder.updateTenantInfo(tenantEntity); | wxBusinessCircleOrder.updateTenantInfo(tenantEntity); | ||||
| wxBusinessCircleOrder.setSourceType(EnumThirdPartyConfigType.WEIXIN.getCode()); | wxBusinessCircleOrder.setSourceType(EnumThirdPartyConfigType.WEIXIN.getCode()); | ||||
| wxBusinessCircleOrder.setNoticeId(notifyData.getId()); | |||||
| wxBusinessCircleOrder.setNoticeCreateTime(sdf.parse(notifyData.getCreateTime())); | |||||
| wxBusinessCircleOrder.setNoticeEventType(notifyData.getEventType()); | |||||
| wxBusinessCircleOrder.setNoticeResourceType(notifyData.getResourceType()); | |||||
| wxBusinessCircleOrder.setSummary(notifyData.getSummary()); | |||||
| wxBusinessCircleOrder.setWxMchid(result.getMchid()); | |||||
| wxBusinessCircleOrder.setWxMerchantName(result.getMerchantName()); | |||||
| wxBusinessCircleOrder.setWxShopName(result.getShopName()); | |||||
| wxBusinessCircleOrder.setWxShopNumber(result.getShopNumber()); | |||||
| wxBusinessCircleOrder.setAppid(result.getAppid()); | |||||
| wxBusinessCircleOrder.setOpenid(result.getOpenid()); | |||||
| wxBusinessCircleOrder.setTimeEnd(sdf.parse(result.getTimeEnd())); | |||||
| wxBusinessCircleOrder.setAmount(result.getAmount()); | |||||
| wxBusinessCircleOrder.setTransactionId(result.getTransactionId()); | |||||
| wxBusinessCircleOrder.setCommitTag(result.getCommitTag()); | |||||
| wxBusinessCircleOrderService.createOrder(wxBusinessCircleOrder); | |||||
| resultMap.put("code","SUCCESS"); | |||||
| return resultMap; | |||||
| } catch (WxPayException e) { | |||||
| e.printStackTrace(); | |||||
| logger.error(e.getCustomErrorMsg()); | |||||
| resultMap.put("code","FAIL"); | |||||
| return resultMap; | |||||
| } catch (ParseException e) { | |||||
| e.printStackTrace(); | |||||
| //解密 | |||||
| if(MaUtil.noticeEventType.equals(notifyData.getEventType())){ | |||||
| PaidResult result = wxPayService.getBusinessCircleService().decryptPaidNotifyDataResource(notifyData); | |||||
| logger.info("微信商圈支付成功通知---解密结果{}"+notifyData.toString()); | |||||
| wxBusinessCircleOrder.setNoticeId(notifyData.getId()); | |||||
| wxBusinessCircleOrder.setNoticeCreateTime(sdf.parse(notifyData.getCreateTime())); | |||||
| wxBusinessCircleOrder.setNoticeEventType(notifyData.getEventType()); | |||||
| wxBusinessCircleOrder.setNoticeResourceType(notifyData.getResourceType()); | |||||
| wxBusinessCircleOrder.setSummary(notifyData.getSummary()); | |||||
| wxBusinessCircleOrder.setWxMchid(result.getMchid()); | |||||
| wxBusinessCircleOrder.setWxMerchantName(result.getMerchantName()); | |||||
| wxBusinessCircleOrder.setWxShopName(result.getShopName()); | |||||
| wxBusinessCircleOrder.setWxShopNumber(result.getShopNumber()); | |||||
| wxBusinessCircleOrder.setAppid(result.getAppid()); | |||||
| wxBusinessCircleOrder.setOpenid(result.getOpenid()); | |||||
| wxBusinessCircleOrder.setTimeEnd(sdf.parse(result.getTimeEnd())); | |||||
| wxBusinessCircleOrder.setAmount(result.getAmount()); | |||||
| wxBusinessCircleOrder.setTransactionId(result.getTransactionId()); | |||||
| wxBusinessCircleOrder.setCommitTag(result.getCommitTag()); | |||||
| wxBusinessCircleOrderService.createOrder(wxBusinessCircleOrder); | |||||
| resultMap.put("code","SUCCESS"); | |||||
| return resultMap; | |||||
| }else if(MaUtil.refundEventType.equals(notifyData.getEventType())){ | |||||
| RefundResult result = wxPayService.getBusinessCircleService().decryptRefundNotifyDataResource(notifyData); | |||||
| logger.info("微信商圈退款成功通知---解密结果{}"+result.toString()); | |||||
| wxBusinessCircleOrder.setRefundNoticeId(notifyData.getId()); | |||||
| wxBusinessCircleOrder.setRefundCreateTime(sdf.parse(notifyData.getCreateTime())); | |||||
| wxBusinessCircleOrder.setRefundEventType(notifyData.getEventType()); | |||||
| wxBusinessCircleOrder.setRefundResourceType(notifyData.getResourceType()); | |||||
| wxBusinessCircleOrder.setRefundSummary(notifyData.getSummary()); | |||||
| wxBusinessCircleOrder.setTransactionId(result.getTransactionId()); | |||||
| wxBusinessCircleOrder.setWxMchid(result.getMchid()); | |||||
| wxBusinessCircleOrder.setWxMerchantName(result.getMerchantName()); | |||||
| wxBusinessCircleOrder.setWxShopName(result.getShopName()); | |||||
| wxBusinessCircleOrder.setWxShopNumber(result.getShopNumber()); | |||||
| wxBusinessCircleOrder.setAppid(result.getAppid()); | |||||
| wxBusinessCircleOrder.setOpenid(result.getOpenid()); | |||||
| wxBusinessCircleOrder.setRefundTime(sdf.parse(result.getRefundTime())); | |||||
| wxBusinessCircleOrder.setRefundAmount(result.getRefundAmount()); | |||||
| wxBusinessCircleOrder.setRefundId(result.getRefundId()); | |||||
| wxBusinessCircleOrderService.updateRefundOrder(wxBusinessCircleOrder); | |||||
| resultMap.put("code","SUCCESS"); | |||||
| return resultMap; | |||||
| } | |||||
| logger.error("时间转换异常"); | logger.error("时间转换异常"); | ||||
| resultMap.put("code","FAIL"); | resultMap.put("code","FAIL"); | ||||
| return resultMap; | return resultMap; | ||||
| } | |||||
| } | |||||
| /** | |||||
| * | |||||
| * @return 微信商圈退款成功通知 | |||||
| */ | |||||
| @PostMapping(value = "/refundOrder/{tenantId}") | |||||
| @ResponseBody | |||||
| public Map<String,String> updateRefundOrder(@PathVariable String tenantId, HttpServletRequest request){ | |||||
| logger.info("[" +getIpAddr() + "]微信商圈退款成功通知-----"+tenantId); | |||||
| Map<String,String> resultMap = new HashMap<>(); | |||||
| if(StringUtils.isBlank(tenantId)){ | |||||
| logger.error("微信商圈退款成功通知-----tenantId为空"); | |||||
| resultMap.put("code","FAIL"); | |||||
| return resultMap; | |||||
| } | |||||
| TenantEntity tenantEntity = wxMallService.getByTenantId(tenantId); | |||||
| if(tenantEntity == null){ | |||||
| logger.error("微信商圈退款成功通知-----获取tenantEntity为null"); | |||||
| resultMap.put("code","FAIL"); | |||||
| return resultMap; | |||||
| } | |||||
| WxPayService wxPayService = wxPayAccountService.getWxPayService(tenantId); | |||||
| if(wxPayService == null){ | |||||
| logger.error("微信商圈退款成功通知-----获取wxPayService失败"); | |||||
| resultMap.put("code","FAIL"); | |||||
| return resultMap; | |||||
| } | |||||
| try { | |||||
| //----------------签名验证----------- | |||||
| BusinessCircleNotifyData notifyData = verifySignature(request,wxPayService); | |||||
| logger.info("微信商圈退款成功通知---回调通知对象{}"+notifyData.toString()); | |||||
| //解密 | |||||
| RefundResult result = wxPayService.getBusinessCircleService().decryptRefundNotifyDataResource(notifyData); | |||||
| logger.info("微信商圈退款成功通知---解密结果{}"+result.toString()); | |||||
| WxBusinessCircleOrder wxBusinessCircleOrder = new WxBusinessCircleOrder(); | |||||
| wxBusinessCircleOrder.updateTenantInfo(tenantEntity); | |||||
| wxBusinessCircleOrder.setSourceType(EnumThirdPartyConfigType.WEIXIN.getCode()); | |||||
| wxBusinessCircleOrder.setRefundNoticeId(notifyData.getId()); | |||||
| wxBusinessCircleOrder.setRefundCreateTime(sdf.parse(notifyData.getCreateTime())); | |||||
| wxBusinessCircleOrder.setRefundEventType(notifyData.getEventType()); | |||||
| wxBusinessCircleOrder.setRefundResourceType(notifyData.getResourceType()); | |||||
| wxBusinessCircleOrder.setRefundSummary(notifyData.getSummary()); | |||||
| wxBusinessCircleOrder.setTransactionId(result.getTransactionId()); | |||||
| wxBusinessCircleOrder.setWxMchid(result.getMchid()); | |||||
| wxBusinessCircleOrder.setWxMerchantName(result.getMerchantName()); | |||||
| wxBusinessCircleOrder.setWxShopName(result.getShopName()); | |||||
| wxBusinessCircleOrder.setWxShopNumber(result.getShopNumber()); | |||||
| wxBusinessCircleOrder.setAppid(result.getAppid()); | |||||
| wxBusinessCircleOrder.setOpenid(result.getOpenid()); | |||||
| wxBusinessCircleOrder.setRefundTime(sdf.parse(result.getRefundTime())); | |||||
| wxBusinessCircleOrder.setRefundAmount(result.getRefundAmount()); | |||||
| wxBusinessCircleOrder.setRefundId(result.getRefundId()); | |||||
| wxBusinessCircleOrderService.updateRefundOrder(wxBusinessCircleOrder); | |||||
| resultMap.put("code","SUCCESS"); | |||||
| return resultMap; | |||||
| } catch (WxPayException e) { | } catch (WxPayException e) { | ||||
| e.printStackTrace(); | e.printStackTrace(); | ||||
| logger.error(e.getCustomErrorMsg()); | |||||
| logger.error("微信商圈通知---"+e.getCustomErrorMsg()); | |||||
| resultMap.put("code","FAIL"); | resultMap.put("code","FAIL"); | ||||
| return resultMap; | return resultMap; | ||||
| } catch (ParseException e) { | } catch (ParseException e) { | ||||
| e.printStackTrace(); | e.printStackTrace(); | ||||
| logger.error("时间转换异常"); | |||||
| logger.error("微信商圈通知---时间转换异常"); | |||||
| resultMap.put("code","FAIL"); | resultMap.put("code","FAIL"); | ||||
| return resultMap; | return resultMap; | ||||
| } | } | ||||
| @@ -193,6 +151,7 @@ public class WxBusinessOrderController extends BaseController { | |||||
| } | } | ||||
| /** | /** | ||||
| * 验签 | * 验签 | ||||
| */ | */ | ||||
| @@ -48,6 +48,9 @@ public class MqBaseConsumer { | |||||
| @Autowired | @Autowired | ||||
| private FmInsideCashOutMsgServiceImpl fmInsideCashOutMsgService; | private FmInsideCashOutMsgServiceImpl fmInsideCashOutMsgService; | ||||
| @Autowired | |||||
| private FmInsideBusinessCircleMsgServiceImpl fmInsideBusinessCircleMsgService; | |||||
| @@ -117,6 +120,11 @@ public class MqBaseConsumer { | |||||
| //} | //} | ||||
| //baseMsg.setMsgStatus(EnumMsgRecordStatus.CONSUME_SUCC.getCode()); | //baseMsg.setMsgStatus(EnumMsgRecordStatus.CONSUME_SUCC.getCode()); | ||||
| //wxMsgRecordMapper.updateByBaseMsg(baseMsg); | //wxMsgRecordMapper.updateByBaseMsg(baseMsg); | ||||
| else if(EnumMsgRecordType.BUSINESS_CIRCLE_NOTICE.getCode().equals(baseMsg.getMsgType())) { | |||||
| // 商圈通知 | |||||
| FmInsideBusinessCircleMsg msg = (FmInsideBusinessCircleMsg)JsonUtil.readValue(message, FmInsideBusinessCircleMsg.class); | |||||
| fmInsideBusinessCircleMsgService.send(msg); | |||||
| } | |||||
| }catch (Throwable e){ | }catch (Throwable e){ | ||||
| log.error("consum received error: ", e); | log.error("consum received error: ", e); | ||||
| /** | /** | ||||
| @@ -7,6 +7,7 @@ import com.iformall.domain.po.base.TenantEntity; | |||||
| import lombok.Data; | import lombok.Data; | ||||
| import lombok.EqualsAndHashCode; | import lombok.EqualsAndHashCode; | ||||
| import lombok.ToString; | import lombok.ToString; | ||||
| import org.apache.commons.lang3.StringUtils; | |||||
| /** | /** | ||||
| @@ -72,4 +73,11 @@ public class BaseMsg extends BaseEntity { | |||||
| }}; | }}; | ||||
| } | } | ||||
| public String getFinalTenantId() { | |||||
| if (!StringUtils.isBlank(parentTenantId)) { | |||||
| return parentTenantId; | |||||
| } | |||||
| return tenantId; | |||||
| } | |||||
| } | } | ||||
| @@ -0,0 +1,32 @@ | |||||
| package com.iformall.domain.po.msg; | |||||
| import lombok.Data; | |||||
| import lombok.EqualsAndHashCode; | |||||
| import lombok.ToString; | |||||
| @Data | |||||
| @ToString(callSuper = true) | |||||
| @EqualsAndHashCode(callSuper = true) | |||||
| public class FmInsideBusinessCircleMsg extends BaseMsg{ | |||||
| private static final long serialVersionUID = 1L; | |||||
| @io.swagger.annotations.ApiModelProperty(value="商圈支付结果通知类型",name="eventType") | |||||
| private String eventType; | |||||
| @io.swagger.annotations.ApiModelProperty(value="商圈订单Id",name="businessCircleOrderId") | |||||
| private Long businessCircleOrderId; | |||||
| @io.swagger.annotations.ApiModelProperty(value="门店Id",name="merchantId") | |||||
| private Long merchantId; | |||||
| @io.swagger.annotations.ApiModelProperty(value="c端会员id",name="cUserId") | |||||
| private Long cUserId; | |||||
| @io.swagger.annotations.ApiModelProperty(value="门店名称,商圈在商圈小程序上圈店时填写的门店名称",name="wxShopName") | |||||
| private String wxShopName; | |||||
| @io.swagger.annotations.ApiModelProperty(value="用户实际消费金额,单位(分)",name="amount") | |||||
| private Integer amount; | |||||
| } | |||||
| @@ -15,11 +15,12 @@ public enum EnumMsgRecordType { | |||||
| WEBSOCKET_APP(8, "小程序websocket"), | WEBSOCKET_APP(8, "小程序websocket"), | ||||
| INSIDE_ORDER_SUCCESS(100, "下订单成功"), | INSIDE_ORDER_SUCCESS(100, "下订单成功"), | ||||
| INSIDE_COUPON_VERIFY(101, "券核销"), | INSIDE_COUPON_VERIFY(101, "券核销"), | ||||
| INSIDE_C_LOGIN(102, "C端用户登录"), | |||||
| INSIDE_C_LOGIN(102, "C端用户登录"),//内部消息,加积分等 | |||||
| //INSIDE_NOTIFY_PAY_SUCCESS(103, "微信支付回调"), | //INSIDE_NOTIFY_PAY_SUCCESS(103, "微信支付回调"), | ||||
| INSIDE_NOTIFY_REFUND_SUCCESS(104, "微信退款回调"), | INSIDE_NOTIFY_REFUND_SUCCESS(104, "微信退款回调"), | ||||
| COUPON_STOCK(105, "券库存更新"), | COUPON_STOCK(105, "券库存更新"), | ||||
| CASH_OUT(106,"商户提现") | |||||
| CASH_OUT(106,"商户提现"), | |||||
| BUSINESS_CIRCLE_NOTICE(107, "商圈支付通知"),//内部消息,加积分+积分同步 | |||||
| ; | ; | ||||
| public static EnumMsgRecordType getEnum(Integer code) { | public static EnumMsgRecordType getEnum(Integer code) { | ||||
| @@ -29,6 +29,8 @@ public enum EnumScoreType { | |||||
| QUESTION_ADD_CREDIT(21, "问卷奖励积分"), | QUESTION_ADD_CREDIT(21, "问卷奖励积分"), | ||||
| REFUND_CONSUMPTION(22, "消费退款"), | |||||
| ; | ; | ||||
| public static EnumScoreType getEnum(Integer code) { | public static EnumScoreType getEnum(Integer code) { | ||||
| @@ -5,7 +5,9 @@ public enum EnumUserType { | |||||
| CUSER(1, "C端用户"), | CUSER(1, "C端用户"), | ||||
| CUSERBASIC(2, "C端用户(会员)"), | CUSERBASIC(2, "C端用户(会员)"), | ||||
| BUSER(3, "B端用户"), | BUSER(3, "B端用户"), | ||||
| MALLUSER(4, "A端用户") | |||||
| MALLUSER(4, "A端用户"), | |||||
| BUSINESS_CIRCLE(5, "微信商圈") | |||||
| ; | ; | ||||
| public static EnumUserType getEnum(Integer code) { | public static EnumUserType getEnum(Integer code) { | ||||
| @@ -9,6 +9,8 @@ public interface WxBusinessCircleOrderMapper extends CommonMapper<WxBusinessCirc | |||||
| List<WxBusinessCircleOrder> findList(WxBusinessCircleOrder record); | List<WxBusinessCircleOrder> findList(WxBusinessCircleOrder record); | ||||
| WxBusinessCircleOrder getById(WxBusinessCircleOrder wxBusinessCircleOrder); | |||||
| WxBusinessCircleOrder getByTransactionId(WxBusinessCircleOrder wxBusinessCircleOrder); | WxBusinessCircleOrder getByTransactionId(WxBusinessCircleOrder wxBusinessCircleOrder); | ||||
| /** | /** | ||||
| @@ -39,4 +41,6 @@ public interface WxBusinessCircleOrderMapper extends CommonMapper<WxBusinessCirc | |||||
| * @param wxBusinessCircleOrder | * @param wxBusinessCircleOrder | ||||
| */ | */ | ||||
| void updateRefundPoints(WxBusinessCircleOrder wxBusinessCircleOrder); | void updateRefundPoints(WxBusinessCircleOrder wxBusinessCircleOrder); | ||||
| } | } | ||||
| @@ -16,8 +16,40 @@ public interface WxBusinessCircleOrderService { | |||||
| */ | */ | ||||
| PageInfo<WxBusinessCircleOrder> listAsPage(WxBusinessCircleOrder record, Integer pageIndex, Integer pageSize); | PageInfo<WxBusinessCircleOrder> listAsPage(WxBusinessCircleOrder record, Integer pageIndex, Integer pageSize); | ||||
| /** | |||||
| * id+tenantId | |||||
| * @param | |||||
| * @return | |||||
| */ | |||||
| WxBusinessCircleOrder getById(Long id, String tenantId); | |||||
| /** | |||||
| * transactionId+tenantId | |||||
| * @param | |||||
| * @return | |||||
| */ | |||||
| WxBusinessCircleOrder getByTransactionId(String transactionId, String tenantId); | |||||
| void createOrder(WxBusinessCircleOrder wxBusinessCircleOrder); | void createOrder(WxBusinessCircleOrder wxBusinessCircleOrder); | ||||
| void updateRefundOrder(WxBusinessCircleOrder wxBusinessCircleOrder); | void updateRefundOrder(WxBusinessCircleOrder wxBusinessCircleOrder); | ||||
| /** | |||||
| * 加积分 | |||||
| * @param wxBusinessCircleOrder | |||||
| */ | |||||
| void updateAddPoints(WxBusinessCircleOrder wxBusinessCircleOrder); | |||||
| /** | |||||
| * 积分同步状态修改 | |||||
| */ | |||||
| void updateIsPointsNotify(WxBusinessCircleOrder wxBusinessCircleOrder); | |||||
| /** | |||||
| * 退积分 | |||||
| * @param wxBusinessCircleOrder | |||||
| */ | |||||
| void updateRefundPoints(WxBusinessCircleOrder wxBusinessCircleOrder); | |||||
| } | } | ||||
| @@ -6,7 +6,12 @@ import com.iformall.common.IdWorker; | |||||
| import com.iformall.domain.po.WxBusinessCircleOrder; | import com.iformall.domain.po.WxBusinessCircleOrder; | ||||
| import com.iformall.domain.po.WxCUser; | import com.iformall.domain.po.WxCUser; | ||||
| import com.iformall.domain.po.WxMerchant; | import com.iformall.domain.po.WxMerchant; | ||||
| import com.iformall.domain.po.msg.FmInsideBusinessCircleMsg; | |||||
| import com.iformall.enums.EnumMsgMqKey; | |||||
| import com.iformall.enums.EnumMsgMqTag; | |||||
| import com.iformall.enums.EnumMsgMqTopic; | |||||
| import com.iformall.mapper.WxBusinessCircleOrderMapper; | import com.iformall.mapper.WxBusinessCircleOrderMapper; | ||||
| import com.iformall.mq.MqBaseProducer; | |||||
| import com.iformall.service.WxBusinessCircleOrderService; | import com.iformall.service.WxBusinessCircleOrderService; | ||||
| import com.iformall.service.WxCUserService; | import com.iformall.service.WxCUserService; | ||||
| import com.iformall.service.WxMerchantService; | import com.iformall.service.WxMerchantService; | ||||
| @@ -30,12 +35,31 @@ public class WxBusinessCircleOrderServiceImpl implements WxBusinessCircleOrderSe | |||||
| @Autowired | @Autowired | ||||
| WxCUserService wxCUserService; | WxCUserService wxCUserService; | ||||
| @Autowired | |||||
| MqBaseProducer mqBaseProducer; | |||||
| @Override | @Override | ||||
| public PageInfo<WxBusinessCircleOrder> listAsPage(WxBusinessCircleOrder record, Integer pageIndex, Integer pageSize) { | public PageInfo<WxBusinessCircleOrder> listAsPage(WxBusinessCircleOrder record, Integer pageIndex, Integer pageSize) { | ||||
| return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxBusinessCircleOrderMapper.findList(record)); | return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxBusinessCircleOrderMapper.findList(record)); | ||||
| } | } | ||||
| @Override | |||||
| public WxBusinessCircleOrder getById(Long id, String tenantId) { | |||||
| WxBusinessCircleOrder wxBusinessCircleOrder = new WxBusinessCircleOrder(); | |||||
| wxBusinessCircleOrder.setId(id); | |||||
| wxBusinessCircleOrder.setTenantId(tenantId); | |||||
| return wxBusinessCircleOrderMapper.getById(wxBusinessCircleOrder); | |||||
| } | |||||
| @Override | |||||
| public WxBusinessCircleOrder getByTransactionId(String transactionId, String tenantId) { | |||||
| WxBusinessCircleOrder wxBusinessCircleOrder = new WxBusinessCircleOrder(); | |||||
| wxBusinessCircleOrder.setTransactionId(transactionId); | |||||
| wxBusinessCircleOrder.setTenantId(tenantId); | |||||
| return wxBusinessCircleOrderMapper.getByTransactionId(wxBusinessCircleOrder); | |||||
| } | |||||
| @Override | @Override | ||||
| public void createOrder(WxBusinessCircleOrder wxBusinessCircleOrder) { | public void createOrder(WxBusinessCircleOrder wxBusinessCircleOrder) { | ||||
| WxBusinessCircleOrder byTransactionId = wxBusinessCircleOrderMapper.getByTransactionId(wxBusinessCircleOrder); | WxBusinessCircleOrder byTransactionId = wxBusinessCircleOrderMapper.getByTransactionId(wxBusinessCircleOrder); | ||||
| @@ -66,13 +90,31 @@ public class WxBusinessCircleOrderServiceImpl implements WxBusinessCircleOrderSe | |||||
| wxBusinessCircleOrderMapper.insertNoticeOrder(wxBusinessCircleOrder); | wxBusinessCircleOrderMapper.insertNoticeOrder(wxBusinessCircleOrder); | ||||
| // TODO: 2021/4/21 mq 新增积分 积分同步 | // TODO: 2021/4/21 mq 新增积分 积分同步 | ||||
| this.sendMessage(wxBusinessCircleOrder,wxBusinessCircleOrder.getNoticeEventType()); | |||||
| } | } | ||||
| } | } | ||||
| /** | |||||
| * | |||||
| * @param wxBusinessCircleOrder | |||||
| * @param eventType | |||||
| */ | |||||
| private void sendMessage(WxBusinessCircleOrder wxBusinessCircleOrder,String eventType){ | |||||
| FmInsideBusinessCircleMsg msg = new FmInsideBusinessCircleMsg(); | |||||
| msg.updateTenantInfo(wxBusinessCircleOrder); | |||||
| msg.setEventType(eventType); | |||||
| msg.setBusinessCircleOrderId(wxBusinessCircleOrder.getId()); | |||||
| msg.setMerchantId(wxBusinessCircleOrder.getMerchantId()); | |||||
| msg.setCUserId(wxBusinessCircleOrder.getCUserId()); | |||||
| msg.setWxShopName(wxBusinessCircleOrder.getWxShopName()); | |||||
| msg.setAmount(wxBusinessCircleOrder.getAmount()); | |||||
| mqBaseProducer.sendMessage(msg, EnumMsgMqTopic.DEFAULT.getCode(), EnumMsgMqTag.DEFAULT.getCode(), EnumMsgMqKey.DEFAULT.getCode()); | |||||
| } | |||||
| @Override | @Override | ||||
| public void updateRefundOrder(WxBusinessCircleOrder wxBusinessCircleOrder) { | public void updateRefundOrder(WxBusinessCircleOrder wxBusinessCircleOrder) { | ||||
| WxBusinessCircleOrder byTransactionId = wxBusinessCircleOrderMapper.getByTransactionId(wxBusinessCircleOrder); | |||||
| WxBusinessCircleOrder byTransactionId = this.getByTransactionId(wxBusinessCircleOrder.getTransactionId(),wxBusinessCircleOrder.getTenantId()); | |||||
| if(byTransactionId == null){ | if(byTransactionId == null){ | ||||
| logger.error("--商圈退款--付款消息未找到--"); | logger.error("--商圈退款--付款消息未找到--"); | ||||
| }else{ | }else{ | ||||
| @@ -82,8 +124,27 @@ public class WxBusinessCircleOrderServiceImpl implements WxBusinessCircleOrderSe | |||||
| wxBusinessCircleOrderMapper.updateRefundNoticeOrder(wxBusinessCircleOrder); | wxBusinessCircleOrderMapper.updateRefundNoticeOrder(wxBusinessCircleOrder); | ||||
| // TODO: 2021/4/21 mq 退积分 | // TODO: 2021/4/21 mq 退积分 | ||||
| this.sendMessage(wxBusinessCircleOrder,wxBusinessCircleOrder.getRefundEventType()); | |||||
| } | } | ||||
| } | } | ||||
| @Override | |||||
| public void updateAddPoints(WxBusinessCircleOrder wxBusinessCircleOrder) { | |||||
| wxBusinessCircleOrder.setUpdateTime(new Date()); | |||||
| wxBusinessCircleOrderMapper.updateAddPoints(wxBusinessCircleOrder); | |||||
| } | |||||
| @Override | |||||
| public void updateIsPointsNotify(WxBusinessCircleOrder wxBusinessCircleOrder) { | |||||
| wxBusinessCircleOrder.setUpdateTime(new Date()); | |||||
| wxBusinessCircleOrderMapper.updateIsPointsNotify(wxBusinessCircleOrder); | |||||
| } | |||||
| @Override | |||||
| public void updateRefundPoints(WxBusinessCircleOrder wxBusinessCircleOrder) { | |||||
| wxBusinessCircleOrder.setUpdateTime(new Date()); | |||||
| wxBusinessCircleOrderMapper.updateRefundPoints(wxBusinessCircleOrder); | |||||
| } | |||||
| } | } | ||||
| @@ -283,7 +283,7 @@ public class WxCreditHistoryServiceImpl implements WxCreditHistoryService { | |||||
| // if (total > Integer.MAX_VALUE) { | // if (total > Integer.MAX_VALUE) { | ||||
| // throw new MallinkException(ErrorCode.OUT_OF_CREDIT); | // throw new MallinkException(ErrorCode.OUT_OF_CREDIT); | ||||
| // } | // } | ||||
| if (total < 0) { | |||||
| if (total < 0 && !Objects.equals(record.getCreditType(),EnumScoreType.REFUND_CONSUMPTION.getCode())) { | |||||
| throw new MallinkException(ErrorCode.CREDIT_NOT_ENOUGH); | throw new MallinkException(ErrorCode.CREDIT_NOT_ENOUGH); | ||||
| } | } | ||||
| //如果为导入的会员 则直接覆盖总积分和操作积分明细 | //如果为导入的会员 则直接覆盖总积分和操作积分明细 | ||||
| @@ -448,6 +448,10 @@ public class WxCreditHistoryServiceImpl implements WxCreditHistoryService { | |||||
| return record.getCreditNum(); | return record.getCreditNum(); | ||||
| } | } | ||||
| if (record.getCreditType() == EnumScoreType.REFUND_CONSUMPTION.getCode()) { | |||||
| return reduceCredit(record); | |||||
| } | |||||
| return 0; | return 0; | ||||
| } | } | ||||
| @@ -0,0 +1,147 @@ | |||||
| package com.iformall.service.msg.impl; | |||||
| import com.github.binarywang.wxpay.bean.businesscircle.PointsNotifyRequest; | |||||
| import com.github.binarywang.wxpay.service.WxPayService; | |||||
| import com.iformall.domain.po.WxBusinessCircleOrder; | |||||
| import com.iformall.domain.po.WxCUserBasicInfo; | |||||
| import com.iformall.domain.po.WxCreditHistory; | |||||
| import com.iformall.domain.po.WxMerchant; | |||||
| import com.iformall.domain.po.msg.BaseMsg; | |||||
| import com.iformall.domain.po.msg.FmInsideBusinessCircleMsg; | |||||
| import com.iformall.enums.EnumBusiness; | |||||
| import com.iformall.enums.EnumScoreType; | |||||
| import com.iformall.enums.EnumUserType; | |||||
| import com.iformall.service.*; | |||||
| import com.iformall.service.msg.MsgSendService; | |||||
| import com.iformall.utils.MaUtil; | |||||
| import org.slf4j.Logger; | |||||
| import org.slf4j.LoggerFactory; | |||||
| import org.springframework.beans.factory.annotation.Autowired; | |||||
| import org.springframework.stereotype.Service; | |||||
| import java.text.SimpleDateFormat; | |||||
| import java.util.Date; | |||||
| import java.util.Locale; | |||||
| /** | |||||
| * | |||||
| * | |||||
| */ | |||||
| @Service | |||||
| public class FmInsideBusinessCircleMsgServiceImpl implements MsgSendService { | |||||
| private final Logger logger = LoggerFactory.getLogger(this.getClass()); | |||||
| private final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'+'mm:ss", Locale.CHINA); | |||||
| @Autowired | |||||
| WxMerchantService wxMerchantService; | |||||
| @Autowired | |||||
| WxCreditHistoryService creditHistoryService; | |||||
| @Autowired | |||||
| WxCUserBasicInfoService cUserBasicInfoService; | |||||
| WxBusinessCircleOrderService businessCircleOrderService; | |||||
| @Autowired | |||||
| WxPayAccountService wxPayAccountService; | |||||
| @Override | |||||
| public void send(BaseMsg baseMsg) throws Exception { | |||||
| FmInsideBusinessCircleMsg msg = (FmInsideBusinessCircleMsg)baseMsg; | |||||
| if(msg.getCUserId() == null){ | |||||
| return; | |||||
| } | |||||
| WxCUserBasicInfo user = cUserBasicInfoService.getById(msg.getCUserId(), msg.getFinalTenantId()); | |||||
| if(user == null){ | |||||
| return; | |||||
| } | |||||
| WxBusinessCircleOrder wxBusinessCircleOrder = businessCircleOrderService.getById(msg.getBusinessCircleOrderId(),msg.getTenantId()); | |||||
| if(wxBusinessCircleOrder == null){ | |||||
| return; | |||||
| } | |||||
| if(msg.getMerchantId() == null){ | |||||
| return; | |||||
| } | |||||
| Integer businessId = EnumBusiness.BUSINESS_ID6.getCode(); | |||||
| WxMerchant wxMerchant = wxMerchantService.getById(msg.getMerchantId()); | |||||
| if(wxMerchant != null){ | |||||
| businessId = wxMerchant.getBusinessId(); | |||||
| } | |||||
| WxCreditHistory creditHistory = new WxCreditHistory(); | |||||
| creditHistory.setTenantId(msg.getFinalTenantId()); | |||||
| creditHistory.setOperatorType(EnumUserType.BUSINESS_CIRCLE.getCode()); | |||||
| creditHistory.setOperatorId(msg.getCUserId()); | |||||
| creditHistory.setCUserId(msg.getCUserId()); | |||||
| creditHistory.setCreateDate(new Date()); | |||||
| creditHistory.setCouponId(msg.getBusinessCircleOrderId()); | |||||
| creditHistory.setBusinessId(businessId); | |||||
| creditHistory.setMerchantId(msg.getMerchantId()); | |||||
| if(MaUtil.noticeEventType.equals(msg.getEventType())){ | |||||
| creditHistory.setCreditType(EnumScoreType.CONSUMPTION.getCode()); | |||||
| creditHistory.setSpend(msg.getAmount()); | |||||
| creditHistory.setChangePurpose("商圈消费:消费商户["+msg.getWxShopName()+"] ("+creditHistory.getSpendStr()+"元) "); | |||||
| creditHistory = creditHistoryService.saveOrUpdate(creditHistory,msg.getTenantId()); | |||||
| Integer creditNum = 0; | |||||
| if (creditHistory.getCreditNum() != null) { | |||||
| creditNum = creditHistory.getCreditNum(); | |||||
| } | |||||
| if(creditNum == 0){ | |||||
| return; | |||||
| } | |||||
| wxBusinessCircleOrder.setIncreasedPoints(creditNum); | |||||
| wxBusinessCircleOrder.setPointsUpdateTime(creditHistory.getCreateDate()); | |||||
| businessCircleOrderService.updateAddPoints(wxBusinessCircleOrder); | |||||
| this.notifyPoints(wxBusinessCircleOrder); | |||||
| }else if(MaUtil.refundEventType.equals(msg.getEventType())){ | |||||
| creditHistory.setCreditType(EnumScoreType.REFUND_CONSUMPTION.getCode()); | |||||
| creditHistory.setCreditNum(wxBusinessCircleOrder.getIncreasedPoints()); | |||||
| creditHistory.setSpend(0-msg.getAmount()); | |||||
| creditHistory.setChangePurpose("商圈消费退款:消费商户["+msg.getWxShopName()+"] ("+creditHistory.getSpendStr()+"元) ");// | |||||
| creditHistory = creditHistoryService.saveOrUpdate(creditHistory,msg.getTenantId()); | |||||
| Integer creditNum = 0; | |||||
| if (creditHistory.getCreditNum() != null) { | |||||
| creditNum = creditHistory.getCreditNum(); | |||||
| } | |||||
| if(creditNum == 0){ | |||||
| return; | |||||
| } | |||||
| wxBusinessCircleOrder.setRefundPointsTime(creditHistory.getCreateDate()); | |||||
| businessCircleOrderService.updateRefundPoints(wxBusinessCircleOrder); | |||||
| } | |||||
| } | |||||
| private void notifyPoints(WxBusinessCircleOrder wxBusinessCircleOrder) throws Exception{ | |||||
| //添加积分成功,做积分同步 | |||||
| WxPayService wxPayService = wxPayAccountService.getWxPayService(wxBusinessCircleOrder.getTenantId()); | |||||
| PointsNotifyRequest request = new PointsNotifyRequest(); | |||||
| request.setSubMchid(wxPayService.getConfig().getSubMchId()); | |||||
| request.setTransactionId(wxBusinessCircleOrder.getTransactionId()); | |||||
| request.setOpenid(wxBusinessCircleOrder.getOpenid()); | |||||
| request.setEarnPoints(true); | |||||
| request.setIncreasedPoints(wxBusinessCircleOrder.getIncreasedPoints()); | |||||
| request.setPointsUpdateTime(sdf.format(new Date())); | |||||
| String result = wxPayService.getBusinessCircleService().notifyPoints(request); | |||||
| logger.info("微信商圈同步积分请求结果----"+result); | |||||
| businessCircleOrderService.updateIsPointsNotify(wxBusinessCircleOrder); | |||||
| } | |||||
| } | |||||
| @@ -13,6 +13,9 @@ import org.apache.commons.lang3.StringUtils; | |||||
| public class MaUtil { | public class MaUtil { | ||||
| public static final String noticeEventType = "MALL_TRANSACTION.SUCCESS"; | |||||
| public static final String refundEventType = "MALL_REFUND.SUCCESS"; | |||||
| static public WxMaService getWeappService(WxAppinfo appinfo) { | static public WxMaService getWeappService(WxAppinfo appinfo) { | ||||
| WxMaDefaultConfigImpl config = new WxMaDefaultConfigImpl(); | WxMaDefaultConfigImpl config = new WxMaDefaultConfigImpl(); | ||||
| config.setAppid(appinfo.getAppId()); | config.setAppid(appinfo.getAppId()); | ||||
| @@ -40,13 +43,13 @@ public class MaUtil { | |||||
| config.setKeyPath(payAccount.getCertPath()); | config.setKeyPath(payAccount.getCertPath()); | ||||
| //以下是apiv3以及支付分相关 | //以下是apiv3以及支付分相关 | ||||
| // config.setServiceId(); | |||||
| // config.setPayScoreNotifyUrl(); | |||||
| // TODO: 2021/4/20 | |||||
| config.setPrivateKeyPath(null);//apiv3 商户apiclient_key.pem 商户私钥 | |||||
| config.setPrivateCertPath(null);//apiv3 商户apiclient_cert.pem | |||||
| config.setCertSerialNo(null);//证书序列号 | |||||
| config.setApiV3Key(null);//apiV3秘钥 | |||||
| // config.setServiceId(payAccount.getServiceId()); | |||||
| // config.setPayScoreNotifyUrl(payAccount.getPayScoreNotifyUrl()); | |||||
| config.setPrivateKeyPath(payAccount.getPrivateKeyPath());//apiv3 商户apiclient_key.pem 商户私钥 | |||||
| config.setPrivateCertPath(payAccount.getPrivateCertPath());//apiv3 商户apiclient_cert.pem | |||||
| config.setCertSerialNo(payAccount.getCertSerialNo());//证书序列号 | |||||
| config.setApiV3Key(payAccount.getApiV3Key());//apiV3秘钥 | |||||
| WxPayService wxPayService = new WxPayServiceImpl(); | WxPayService wxPayService = new WxPayServiceImpl(); | ||||
| wxPayService.setConfig(config); | wxPayService.setConfig(config); | ||||
| @@ -165,6 +165,14 @@ | |||||
| <include refid="dynamicWhereConditions"/> | <include refid="dynamicWhereConditions"/> | ||||
| </select> | </select> | ||||
| <select id="getById" parameterType="com.iformall.domain.po.WxBusinessCircleOrder" resultMap="BaseResultMap"> | |||||
| select | |||||
| <include refid="allColumns"/> | |||||
| from wx_business_circle_order | |||||
| where `id` = #{id} | |||||
| and tenant_id=#{tenantId} | |||||
| </select> | |||||
| <select id="getByTransactionId" parameterType="com.iformall.domain.po.WxBusinessCircleOrder" resultMap="BaseResultMap"> | <select id="getByTransactionId" parameterType="com.iformall.domain.po.WxBusinessCircleOrder" resultMap="BaseResultMap"> | ||||
| select | select | ||||
| <include refid="allColumns"/> | <include refid="allColumns"/> | ||||