From 77fa9ac80fe5c60a196e437699d8b2bb7ed23546 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=89=9B=E5=8F=89=E9=97=AA=E9=97=AA?= <18322780655@163.com> Date: Mon, 9 Sep 2024 09:50:31 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=80=80=E6=AC=BE?= =?UTF-8?q?=E5=88=A4=E6=96=AD=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../chaozhanggui/system/cashierservice/service/PayService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/service/PayService.java b/src/main/java/com/chaozhanggui/system/cashierservice/service/PayService.java index f4bc8a3..ad9071f 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/service/PayService.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/service/PayService.java @@ -1092,7 +1092,7 @@ public class PayService { TbShopInfo shopInfo = tbShopInfoMapper.selectByPrimaryKey(Integer.valueOf(orderInfo.getShopId())); - if ("0".equals(shopInfo.getIsReturn())) { + if ("1".equals(shopInfo.getIsReturn())) { if (ObjectUtil.isEmpty(pwd)) { return Result.fail(CodeEnum.PARAM); } From 724d5fc2dad30ffa9c36dff7b67a578cc85badd3 Mon Sep 17 00:00:00 2001 From: wangw <1594593906@qq.com> Date: Fri, 13 Sep 2024 10:45:03 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E5=BA=97=E9=93=BA=E4=BF=A1=E6=81=AF=20?= =?UTF-8?q?=E8=BF=90=E8=90=A5=E6=A8=A1=E5=BC=8F=20restaurant=20=E9=A4=90?= =?UTF-8?q?=E9=A5=AE=E7=89=88=20=E5=85=88=E4=B8=8B=E5=8D=95=E5=90=8E?= =?UTF-8?q?=E6=94=AF=E4=BB=98=20munchies=20=20=20=E5=BF=AB=E9=A4=90?= =?UTF-8?q?=E7=89=88=EF=BC=88=E5=85=88=E6=94=AF=E4=BB=98=E5=90=8E=E4=B8=8B?= =?UTF-8?q?=E5=8D=95=EF=BC=89=20=E6=98=AF=E5=90=A6=E5=BC=80=E5=90=AF?= =?UTF-8?q?=E6=A1=8C=E4=BD=8D=E8=B4=B9=200=E5=90=A61=E6=98=AF=20=E6=A1=8C?= =?UTF-8?q?=E4=BD=8D=E8=B4=B9=20=E5=B0=B1=E9=A4=90=E6=A8=A1=E5=BC=8F=20=20?= =?UTF-8?q?=E5=A0=82=E9=A3=9F=20dine-in=20=20=E5=A4=96=E5=B8=A6=20take-out?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ShopInfoController.java | 5 ++ .../cashierservice/entity/TbShopInfo.java | 53 +++++++++++++++++-- .../service/ShopInfoService.java | 4 ++ .../resources/mapper/TbShopInfoMapper.xml | 8 ++- 4 files changed, 66 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/controller/ShopInfoController.java b/src/main/java/com/chaozhanggui/system/cashierservice/controller/ShopInfoController.java index a6fb4e1..522c1a7 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/controller/ShopInfoController.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/controller/ShopInfoController.java @@ -17,6 +17,11 @@ public class ShopInfoController { @Autowired ShopInfoService shopInfoService; + @GetMapping("/queryShopInfo") + public Result queryShopInfo(@RequestParam Integer shopId){ + return shopInfoService.queryShopInfo(shopId); + } + @GetMapping("queryShopArea") public Result queryShopArea(@RequestHeader("token") String token, @RequestHeader("loginName") String loginName, diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/entity/TbShopInfo.java b/src/main/java/com/chaozhanggui/system/cashierservice/entity/TbShopInfo.java index b1a62cc..9ec0ae2 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/entity/TbShopInfo.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/entity/TbShopInfo.java @@ -105,9 +105,16 @@ public class TbShopInfo implements Serializable { private String isMemberReturn; - - - + //是否开启桌位费 0否1是 + private Integer isTableFee; + //桌位费 + private BigDecimal tableFee; + //就餐模式 堂食 dine-in 外带 take-out + private String eatModel; + //程序码(零点八零首页) + private String smallQrcode; + //店铺收款码 + private String paymentQrcode; private static final long serialVersionUID = 1L; @@ -495,4 +502,44 @@ public class TbShopInfo implements Serializable { public void setIsMemberReturn(String isMemberReturn) { this.isMemberReturn = isMemberReturn; } + + public Integer getIsTableFee() { + return isTableFee; + } + + public void setIsTableFee(Integer isTableFee) { + this.isTableFee = isTableFee; + } + + public BigDecimal getTableFee() { + return tableFee; + } + + public void setTableFee(BigDecimal tableFee) { + this.tableFee = tableFee; + } + + public String getEatModel() { + return eatModel; + } + + public void setEatModel(String eatModel) { + this.eatModel = eatModel; + } + + public String getSmallQrcode() { + return smallQrcode; + } + + public void setSmallQrcode(String smallQrcode) { + this.smallQrcode = smallQrcode; + } + + public String getPaymentQrcode() { + return paymentQrcode; + } + + public void setPaymentQrcode(String paymentQrcode) { + this.paymentQrcode = paymentQrcode; + } } \ No newline at end of file diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/service/ShopInfoService.java b/src/main/java/com/chaozhanggui/system/cashierservice/service/ShopInfoService.java index 48db52d..14e6f74 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/service/ShopInfoService.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/service/ShopInfoService.java @@ -53,6 +53,10 @@ public class ShopInfoService { this.orderInfoMapper = orderInfoMapper; } + public Result queryShopInfo(Integer shopId) { + return new Result(CodeEnum.SUCCESS,tbShopInfoMapper.selectByPrimaryKey(shopId)); + } + public Result queryShopArea(String shopId){ List list= tbShopAreaMapper.selectByShopId(shopId); return Result.success(CodeEnum.SUCCESS,list); diff --git a/src/main/resources/mapper/TbShopInfoMapper.xml b/src/main/resources/mapper/TbShopInfoMapper.xml index 47ed043..e9f9f2b 100644 --- a/src/main/resources/mapper/TbShopInfoMapper.xml +++ b/src/main/resources/mapper/TbShopInfoMapper.xml @@ -51,6 +51,11 @@ + + + + + @@ -61,7 +66,8 @@ detail, lat, lng, mch_id, register_type, is_wx_ma_independent, address, city, type, industry, industry_name, business_time, post_time, post_amount_line, on_sale, settle_type, settle_time, enter_at, expire_at, status, average, order_wait_pay_minute, support_device_number, - distribute_level, created_at, updated_at, proxy_id,is_custom,is_return,is_member_in,is_member_return + distribute_level, created_at, updated_at, proxy_id,is_custom,is_return,is_member_in,is_member_return, + is_table_fee,table_fee,eat_model,small_qrcode,payment_qrcode view From 0775b09c77bb35a48040061a703257390246ac2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=89=9B=E5=8F=89=E9=97=AA=E9=97=AA?= <18322780655@163.com> Date: Fri, 13 Sep 2024 11:06:36 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E6=B7=BB=E5=8A=A0pcpay=20=E6=94=AF?= =?UTF-8?q?=E4=BB=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/PayController.java | 65 ++++- .../interceptor/WebAppConfigurer.java | 1 + .../cashierservice/service/PayService.java | 262 +++++++++--------- 3 files changed, 184 insertions(+), 144 deletions(-) diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/controller/PayController.java b/src/main/java/com/chaozhanggui/system/cashierservice/controller/PayController.java index 9104fda..1bbec3e 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/controller/PayController.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/controller/PayController.java @@ -1,8 +1,10 @@ package com.chaozhanggui.system.cashierservice.controller; +import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONObject; import com.alipay.api.AlipayApiException; import com.alipay.api.AlipayClient; +import com.alipay.api.AlipayConfig; import com.alipay.api.DefaultAlipayClient; import com.alipay.api.request.AlipaySystemOauthTokenRequest; import com.alipay.api.request.AlipayUserInfoShareRequest; @@ -17,6 +19,7 @@ import com.chaozhanggui.system.cashierservice.service.PayService; import com.chaozhanggui.system.cashierservice.sign.CodeEnum; import com.chaozhanggui.system.cashierservice.sign.Result; import com.chaozhanggui.system.cashierservice.util.IpUtil; +import com.chaozhanggui.system.cashierservice.util.JSONUtil; import com.chaozhanggui.system.cashierservice.util.RedisCst; import com.chaozhanggui.system.cashierservice.util.WechatUtil; import com.fasterxml.jackson.core.JsonProcessingException; @@ -28,6 +31,7 @@ import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.List; import java.util.Objects; @@ -304,6 +308,10 @@ public class PayController { } + + + + @RequestMapping("createOrder") public Result createOrder(HttpServletRequest request,@RequestBody PaymentReq paymentReq){ try { @@ -315,8 +323,10 @@ public class PayController { } - - + @GetMapping("queryOrderPay") + public Result queryOrderPay(String orderId){ + return payService.queryOrderPay(orderId); + } @@ -365,15 +375,32 @@ public class PayController { return Result.success(CodeEnum.SUCCESS,openid); }else if("ALIPAY".equals(payType)){ - AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do",aliAppId,privateKey,"json","GBK",publicKey,"RSA2"); - AlipayUserInfoShareRequest request = new AlipayUserInfoShareRequest(); - AlipayUserInfoShareResponse response = alipayClient.execute(request,code); - log.info("AlipayUserInfoShareResponse:{}",JSONObject.toJSONString(response)); - if(!response.isSuccess()){ + + // 初始化SDK + AlipayClient alipayClient = new DefaultAlipayClient(getAlipayConfig()); + + // 构造请求参数以调用接口 + AlipaySystemOauthTokenRequest request = new AlipaySystemOauthTokenRequest(); + + // 设置刷新令牌 +// request.setRefreshToken("201208134b203fe6c11548bcabd8da5bb087a83b"); + + // 设置授权码 + request.setCode(code); + + // 设置授权方式 + request.setGrantType("authorization_code"); + + AlipaySystemOauthTokenResponse response = alipayClient.execute(request); + + log.info("AlipaySystemOauthTokenResponse:{}", JSONUtil.toJSONString(response)); + + response.setAccessToken(response.getRefreshToken()); + if (!response.isSuccess()) { return Result.fail("获取支付宝userId失败"); } - return Result.success(CodeEnum.SUCCESS,response.getUserId()); + return Result.success(CodeEnum.SUCCESS, ObjectUtil.isNull(response.getUserId())?response.getOpenId():response.getUserId()); } return Result.fail(CodeEnum.FAIL); @@ -381,6 +408,28 @@ public class PayController { + private AlipayConfig getAlipayConfig() { + AlipayConfig alipayConfig = new AlipayConfig(); + alipayConfig.setServerUrl("https://openapi.alipay.com/gateway.do"); + alipayConfig.setAppId(aliAppId); + alipayConfig.setPrivateKey(privateKey); + alipayConfig.setFormat("json"); + alipayConfig.setAlipayPublicKey(publicKey); + alipayConfig.setCharset("UTF-8"); + alipayConfig.setSignType("RSA2"); + return alipayConfig; + } + + + public static void main(String[] args){ + LocalDate date=LocalDate.now(); + if(date.isLeapYear()){ + System.out.println(); + } + } + + + diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/interceptor/WebAppConfigurer.java b/src/main/java/com/chaozhanggui/system/cashierservice/interceptor/WebAppConfigurer.java index 2aa9cb5..7a8f40a 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/interceptor/WebAppConfigurer.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/interceptor/WebAppConfigurer.java @@ -31,6 +31,7 @@ public class WebAppConfigurer implements WebMvcConfigurer { .excludePathPatterns("/pay/pcscanpay") .excludePathPatterns("/pay/openId") .excludePathPatterns("/pay/createOrder") + .excludePathPatterns("/pay/queryOrderPay") ; diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/service/PayService.java b/src/main/java/com/chaozhanggui/system/cashierservice/service/PayService.java index 0f03308..4f49752 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/service/PayService.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/service/PayService.java @@ -40,7 +40,6 @@ import javax.annotation.Resource; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.*; -import java.util.concurrent.atomic.AtomicReference; import static com.chaozhanggui.system.cashierservice.sign.CodeEnum.ACCOUNTEIXST; import static com.chaozhanggui.system.cashierservice.sign.CodeEnum.SUCCESS; @@ -50,43 +49,27 @@ import static com.chaozhanggui.system.cashierservice.sign.CodeEnum.SUCCESS; public class PayService { + private final RedisTemplate redisTemplate; @Autowired TbOrderInfoMapper tbOrderInfoMapper; - @Autowired TbMerchantThirdApplyMapper tbMerchantThirdApplyMapper; - @Autowired TbOrderPaymentMapper tbOrderPaymentMapper; - @Autowired TbShopPayTypeMapper tbShopPayTypeMapper; - @Autowired TbCashierCartMapper tbCashierCartMapper; - @Autowired TbShopUserMapper tbShopUserMapper; - - @Autowired TbShopUserFlowMapper tbShopUserFlowMapper; - @Autowired TbOrderDetailMapper tbOrderDetailMapper; - @Autowired RestTemplate restTemplate; - - @Autowired RabbitProducer producer; - @Resource - private TbGroupOrderInfoMapper tbGroupOrderInfoMapper; - @Resource - private TbGroupOrderCouponMapper couponMapper; - - @Autowired TbUserInfoMapper tbUserInfoMapper; @Autowired @@ -95,22 +78,24 @@ public class PayService { TbShopInfoMapper tbShopInfoMapper; @Autowired TbQuickPayMapper tbQuickPayMapper; - + @Autowired + TbmerchantAccountMapper tbmerchantAccountMapper; + @Autowired + TbPlussShopStaffMapper tbPlussShopStaffMapper; + @Resource + private TbGroupOrderInfoMapper tbGroupOrderInfoMapper; + @Resource + private TbGroupOrderCouponMapper couponMapper; @Autowired private TbProductSkuMapper productSkuMapper; - @Autowired private TbProductMapper productMapper; - @Autowired private TbShopUnitMapper shopUnitMapper; - @Autowired private TbProductStockDetailMapper productStockDetailMapper; - @Autowired private RedisUtils redisUtil; - @Value("${gateway.url}") private String gateWayUrl; @Value("${client.backUrl}") @@ -121,14 +106,6 @@ public class PayService { private String url; @Value("${thirdPay.callBack}") private String callBack; - - - @Autowired - TbmerchantAccountMapper tbmerchantAccountMapper; - - - @Autowired - TbPlussShopStaffMapper tbPlussShopStaffMapper; @Autowired private MpShopUserMapper mpShopUserMapper; @Autowired @@ -136,12 +113,13 @@ public class PayService { @Autowired private MpShopTableMapper mpShopTableMapper; - private final RedisTemplate redisTemplate; - public PayService(RedisTemplate redisTemplate) { this.redisTemplate = redisTemplate; } + public static void main(String[] args) { + System.out.println(MD5Util.encrypt("123456".concat("13718478323").concat("10"))); + } public Result queryPayType(String shopId) { return Result.success(CodeEnum.SUCCESS, tbShopPayTypeMapper.selectByShopId(shopId)); @@ -305,7 +283,7 @@ public class PayService { log.info("更新购物车:{}", cartCount); //更新子单状态 - tbOrderDetailMapper.updateStatusByOrderId(Integer.valueOf(orderId), "closed",orderInfo.getDiscountRatio()); + tbOrderDetailMapper.updateStatusByOrderId(Integer.valueOf(orderId), "closed", orderInfo.getDiscountRatio()); JSONObject jsonObject = new JSONObject(); jsonObject.put("token", token); @@ -387,10 +365,10 @@ public class PayService { int cartCount = tbCashierCartMapper.updateByOrderId(orderId, "final"); log.info("更新购物车:{}", cartCount); - if(ObjectUtil.isNotNull(orderInfo.getDiscountRatio())&&ObjectUtil.isNotEmpty(orderInfo.getDiscountRatio())){ - tbOrderDetailMapper.updateStatusByOrderId(Integer.valueOf(orderId), "closed",orderInfo.getDiscountRatio()); - }else { - tbOrderDetailMapper.updateStatusByOrderId(Integer.valueOf(orderId), "closed",null); + if (ObjectUtil.isNotNull(orderInfo.getDiscountRatio()) && ObjectUtil.isNotEmpty(orderInfo.getDiscountRatio())) { + tbOrderDetailMapper.updateStatusByOrderId(Integer.valueOf(orderId), "closed", orderInfo.getDiscountRatio()); + } else { + tbOrderDetailMapper.updateStatusByOrderId(Integer.valueOf(orderId), "closed", null); } JSONObject jsonObject = new JSONObject(); @@ -509,10 +487,10 @@ public class PayService { int cartCount = tbCashierCartMapper.updateByOrderId(orderId, "final"); log.info("更新购物车:{}", cartCount); - if(ObjectUtil.isNotNull(orderInfo.getDiscountRatio())&&ObjectUtil.isNotEmpty(orderInfo.getDiscountRatio())){ - tbOrderDetailMapper.updateStatusByOrderId(Integer.valueOf(orderId), "closed",orderInfo.getDiscountRatio()); - }else { - tbOrderDetailMapper.updateStatusByOrderId(Integer.valueOf(orderId), "closed",null); + if (ObjectUtil.isNotNull(orderInfo.getDiscountRatio()) && ObjectUtil.isNotEmpty(orderInfo.getDiscountRatio())) { + tbOrderDetailMapper.updateStatusByOrderId(Integer.valueOf(orderId), "closed", orderInfo.getDiscountRatio()); + } else { + tbOrderDetailMapper.updateStatusByOrderId(Integer.valueOf(orderId), "closed", null); } JSONObject jsonObject = new JSONObject(); jsonObject.put("token", token); @@ -595,7 +573,7 @@ public class PayService { if (ObjectUtil.isNotEmpty(memberAccount)) { - if (!memberAccount.substring(0, 2).equals("46")) { + if (!memberAccount.startsWith("46")) { return Result.fail(CodeEnum.ERRORQR); } @@ -647,10 +625,10 @@ public class PayService { //更新购物车状态 int cartCount = tbCashierCartMapper.updateByOrderId(orderId, "final"); - if(ObjectUtil.isNotNull(orderInfo.getDiscountRatio())&&ObjectUtil.isNotEmpty(orderInfo.getDiscountRatio())){ - tbOrderDetailMapper.updateStatusByOrderId(Integer.valueOf(orderId), "closed",orderInfo.getDiscountRatio()); - }else { - tbOrderDetailMapper.updateStatusByOrderId(Integer.valueOf(orderId), "closed",null); + if (ObjectUtil.isNotNull(orderInfo.getDiscountRatio()) && ObjectUtil.isNotEmpty(orderInfo.getDiscountRatio())) { + tbOrderDetailMapper.updateStatusByOrderId(Integer.valueOf(orderId), "closed", orderInfo.getDiscountRatio()); + } else { + tbOrderDetailMapper.updateStatusByOrderId(Integer.valueOf(orderId), "closed", null); } log.info("更新购物车:{}", cartCount); @@ -671,14 +649,13 @@ public class PayService { producer.sendStockSaleMsg(mqData); - - JSONObject baObj=new JSONObject(); - baObj.put("userId",user.getUserId()); - baObj.put("shopId",user.getShopId()); - baObj.put("amount",orderInfo.getPayAmount()); - baObj.put("balance",user.getAmount()); - baObj.put("type","消费"); - baObj.put("time",flow.getCreateTime()); + JSONObject baObj = new JSONObject(); + baObj.put("userId", user.getUserId()); + baObj.put("shopId", user.getShopId()); + baObj.put("amount", orderInfo.getPayAmount()); + baObj.put("balance", user.getAmount()); + baObj.put("type", "消费"); + baObj.put("time", flow.getCreateTime()); producer.balance(baObj.toString()); String tableCartKey = RedisCst.getCurrentOrderKey(orderInfo.getTableId(), @@ -738,7 +715,7 @@ public class PayService { } - TbShopUser user = tbShopUserMapper.selectByShopId(orderInfo.getShopId(), tbUserInfo.getId().toString(),"2").get(0); + TbShopUser user = tbShopUserMapper.selectByShopId(orderInfo.getShopId(), tbUserInfo.getId().toString(), "2").get(0); if (ObjectUtil.isEmpty(user) || !"1".equals(user.getIsVip().toString())) { return Result.fail(CodeEnum.MEMBERNOEXIST); } @@ -778,11 +755,10 @@ public class PayService { int cartCount = tbCashierCartMapper.updateByOrderId(orderId, "final"); - - if(ObjectUtil.isNotNull(orderInfo.getDiscountRatio())&&ObjectUtil.isNotEmpty(orderInfo.getDiscountRatio())){ - tbOrderDetailMapper.updateStatusByOrderId(Integer.valueOf(orderId), "closed",orderInfo.getDiscountRatio()); - }else { - tbOrderDetailMapper.updateStatusByOrderId(Integer.valueOf(orderId), "closed",null); + if (ObjectUtil.isNotNull(orderInfo.getDiscountRatio()) && ObjectUtil.isNotEmpty(orderInfo.getDiscountRatio())) { + tbOrderDetailMapper.updateStatusByOrderId(Integer.valueOf(orderId), "closed", orderInfo.getDiscountRatio()); + } else { + tbOrderDetailMapper.updateStatusByOrderId(Integer.valueOf(orderId), "closed", null); } @@ -804,14 +780,13 @@ public class PayService { producer.sendStockSaleMsg(mqData); - - JSONObject baObj=new JSONObject(); - baObj.put("userId",user.getUserId()); - baObj.put("shopId",user.getShopId()); - baObj.put("amount",orderInfo.getPayAmount()); - baObj.put("balance",user.getAmount()); - baObj.put("type","消费"); - baObj.put("time",flow.getCreateTime()); + JSONObject baObj = new JSONObject(); + baObj.put("userId", user.getUserId()); + baObj.put("shopId", user.getShopId()); + baObj.put("amount", orderInfo.getPayAmount()); + baObj.put("balance", user.getAmount()); + baObj.put("type", "消费"); + baObj.put("time", flow.getCreateTime()); producer.balance(baObj.toString()); clearTableInfoCache(orderInfo); @@ -823,7 +798,7 @@ public class PayService { return Result.fail(CodeEnum.PARAM); } - TbOrderInfo orderInfo = tbOrderInfoMapper.selectByPrimaryKey(Integer.valueOf(orderId)); + TbOrderInfo orderInfo = tbOrderInfoMapper.selectByPrimaryKey(orderId); if (ObjectUtil.isEmpty(orderInfo)) { return Result.fail(CodeEnum.ORDERNOEXIST); @@ -859,8 +834,6 @@ public class PayService { } - - TbShopUserFlow userFlow = new TbShopUserFlow(); userFlow.setAmount((payAmount != null && discountAmount != null) ? payAmount : orderInfo.getOrderAmount()); userFlow.setBalance(shopUser.getAmount().subtract((payAmount != null && discountAmount != null) ? payAmount : orderInfo.getOrderAmount())); @@ -890,10 +863,10 @@ public class PayService { int cartCount = tbCashierCartMapper.updateByOrderId(String.valueOf(orderId), "final"); - if(ObjectUtil.isNotNull(orderInfo.getDiscountRatio())&&ObjectUtil.isNotEmpty(orderInfo.getDiscountRatio())){ - tbOrderDetailMapper.updateStatusByOrderId(Integer.valueOf(orderId), "closed",orderInfo.getDiscountRatio()); - }else { - tbOrderDetailMapper.updateStatusByOrderId(Integer.valueOf(orderId), "closed",null); + if (ObjectUtil.isNotNull(orderInfo.getDiscountRatio()) && ObjectUtil.isNotEmpty(orderInfo.getDiscountRatio())) { + tbOrderDetailMapper.updateStatusByOrderId(orderId, "closed", orderInfo.getDiscountRatio()); + } else { + tbOrderDetailMapper.updateStatusByOrderId(orderId, "closed", null); } log.info("更新购物车:{}", cartCount); @@ -980,10 +953,10 @@ public class PayService { int cartCount = tbCashierCartMapper.updateByOrderId(orderId, "final"); - if(ObjectUtil.isNotNull(orderInfo.getDiscountRatio())&&ObjectUtil.isNotEmpty(orderInfo.getDiscountRatio())){ - tbOrderDetailMapper.updateStatusByOrderId(Integer.valueOf(orderId), "closed",orderInfo.getDiscountRatio()); - }else { - tbOrderDetailMapper.updateStatusByOrderId(Integer.valueOf(orderId), "closed",null); + if (ObjectUtil.isNotNull(orderInfo.getDiscountRatio()) && ObjectUtil.isNotEmpty(orderInfo.getDiscountRatio())) { + tbOrderDetailMapper.updateStatusByOrderId(Integer.valueOf(orderId), "closed", orderInfo.getDiscountRatio()); + } else { + tbOrderDetailMapper.updateStatusByOrderId(Integer.valueOf(orderId), "closed", null); } log.info("更新购物车:{}", cartCount); @@ -1074,10 +1047,10 @@ public class PayService { int cartCount = tbCashierCartMapper.updateByOrderId(orderId, "final"); log.info("更新购物车:{}", cartCount); - if(ObjectUtil.isNotNull(orderInfo.getDiscountRatio())&&ObjectUtil.isNotEmpty(orderInfo.getDiscountRatio())){ - tbOrderDetailMapper.updateStatusByOrderId(Integer.valueOf(orderId), "closed",orderInfo.getDiscountRatio()); - }else { - tbOrderDetailMapper.updateStatusByOrderId(Integer.valueOf(orderId), "closed",null); + if (ObjectUtil.isNotNull(orderInfo.getDiscountRatio()) && ObjectUtil.isNotEmpty(orderInfo.getDiscountRatio())) { + tbOrderDetailMapper.updateStatusByOrderId(Integer.valueOf(orderId), "closed", orderInfo.getDiscountRatio()); + } else { + tbOrderDetailMapper.updateStatusByOrderId(Integer.valueOf(orderId), "closed", null); } JSONObject jsonObject = new JSONObject(); @@ -1216,7 +1189,7 @@ public class PayService { detailPo.setStatus("closed"); } - BigDecimal returnAmount = it.getPriceAmount().divide(new BigDecimal(it.getNum()), 2, RoundingMode.DOWN).multiply(new BigDecimal(map1.get(it.getId())));; + BigDecimal returnAmount = it.getPriceAmount().divide(new BigDecimal(it.getNum()), 2, RoundingMode.DOWN).multiply(new BigDecimal(map1.get(it.getId()))); detailPo.setReturnNum(map1.get(it.getId())); detailPos.add(detailPo); @@ -1266,7 +1239,7 @@ public class PayService { } } else { - TbOrderPayment payment = tbOrderPaymentMapper.selectByOrderId(orderId + ""); + TbOrderPayment payment = tbOrderPaymentMapper.selectByOrderId(String.valueOf(orderId)); PublicResp publicResp = thirdPayService.returnOrder(url, thirdApply.getAppId(), newOrderInfo.getOrderNo(), payment.getTradeNumber(), null, "订单退款", newOrderInfo.getPayAmount().setScale(2, RoundingMode.DOWN).multiply(new BigDecimal(100)).longValue(), callBack, null, thirdApply.getAppToken()); if (ObjectUtil.isNotNull(publicResp) && ObjectUtil.isNotEmpty(publicResp)) { @@ -1318,13 +1291,13 @@ public class PayService { tbShopUserFlowMapper.insert(flow); - JSONObject baObj=new JSONObject(); - baObj.put("userId",user.getUserId()); - baObj.put("shopId",user.getShopId()); - baObj.put("amount",newOrderInfo.getPayAmount()); - baObj.put("balance",user.getAmount()); - baObj.put("type","退款"); - baObj.put("time",flow.getCreateTime()); + JSONObject baObj = new JSONObject(); + baObj.put("userId", user.getUserId()); + baObj.put("shopId", user.getShopId()); + baObj.put("amount", newOrderInfo.getPayAmount()); + baObj.put("balance", user.getAmount()); + baObj.put("type", "退款"); + baObj.put("time", flow.getCreateTime()); producer.balance(baObj.toString()); } @@ -1365,13 +1338,9 @@ public class PayService { producer.putOrderCollect(jsonObject.toJSONString()); - producer.printMechine(newOrderInfo.getId().toString()); - - - //修改耗材数据 JSONObject jsonObject1 = new JSONObject(); jsonObject1.put("orderId", newOrderInfo.getId()); @@ -1692,7 +1661,6 @@ public class PayService { return Result.success(CodeEnum.SUCCESS); } - public Result getOrderDiscount(String staffId, String orderId, String token) { if (ObjectUtil.isNull(staffId) || ObjectUtil.isNull(orderId) || ObjectUtil.isEmpty(staffId) || ObjectUtil.isEmpty(orderId)) { return Result.fail(CodeEnum.PARAM); @@ -1719,7 +1687,7 @@ public class PayService { } if ("master".equals(staff.getType())) { - return Result.success(SUCCESS, new BigDecimal(0.1)); + return Result.success(SUCCESS, new BigDecimal("0.1")); } if (ObjectUtil.isEmpty(staff.getMaxDiscountAmount()) || ObjectUtil.isNull(staff.getMaxDiscountAmount())) { @@ -1729,7 +1697,7 @@ public class PayService { if ("0".equals(staff.getDiscountType())) { if (staff.getMaxDiscountAmount().compareTo(tbOrderInfo.getOrderAmount()) >= 0) { - staff.setMaxDiscountAmount(new BigDecimal(0.1)); + staff.setMaxDiscountAmount(new BigDecimal("0.1")); } else { staff.setMaxDiscountAmount(BigDecimal.ONE.subtract(staff.getMaxDiscountAmount().divide(tbOrderInfo.getOrderAmount(), 2, RoundingMode.HALF_DOWN).setScale(2, RoundingMode.HALF_DOWN))); } @@ -1739,9 +1707,8 @@ public class PayService { return Result.success(SUCCESS, staff.getMaxDiscountAmount()); } - - public Result pcscanpay(String orderId,String ip,String userId,String payType) throws JsonProcessingException { - if (ObjectUtil.isEmpty(orderId) || ObjectUtil.isEmpty(ip)) { + public Result pcscanpay(String orderId, String ip, String userId, String payType) throws JsonProcessingException { + if (ObjectUtil.isEmpty(orderId) || ObjectUtil.isEmpty(ip)) { return Result.fail(CodeEnum.PARAM); } @@ -1757,7 +1724,6 @@ public class PayService { } - List cashierCarts = tbCashierCartMapper.selectByOrderId(orderId, null); if (ObjectUtil.isEmpty(cashierCarts) || ObjectUtil.isNull(cashierCarts)) { return Result.fail(CodeEnum.CARTEXIST); @@ -1778,7 +1744,6 @@ public class PayService { } - TbOrderPayment payment = tbOrderPaymentMapper.selectByOrderId(orderId); if (ObjectUtil.isEmpty(payment) || payment == null) { payment = new TbOrderPayment(); @@ -1814,10 +1779,10 @@ public class PayService { reqbody = body.toString(); } - PublicResp publicResp = thirdPayService.jspay(url,thirdApply.getAppId(),thirdApply.getAppToken(),reqbody,reqbody,orderInfo.getOrderAmount().multiply(new BigDecimal(100)).longValue(),payType,"WECHAT".equals(payType)?thirdApply.getSmallAppid():null,userId,ip,DateUtils.getSsdfTimes(),thirdApply.getStoreId(),backUrl,backUrl); + PublicResp publicResp = thirdPayService.jspay(url, thirdApply.getAppId(), thirdApply.getAppToken(), reqbody, reqbody, orderInfo.getOrderAmount().multiply(new BigDecimal(100)).longValue(), payType, "WECHAT".equals(payType) ? thirdApply.getSmallAppid() : null, userId, ip, DateUtils.getSsdfTimes(), thirdApply.getStoreId(), backUrl, backUrl); - if (ObjectUtil.isNotNull(publicResp) && ObjectUtil.isNotEmpty(publicResp)) { + if (ObjectUtil.isNotNull(publicResp) && ObjectUtil.isNotEmpty(publicResp)) { if ("000000".equals(publicResp.getCode())) { JspayResp scanpayResp = publicResp.getObjData(); if ("TRADE_SUCCESS".equals(scanpayResp.getState())) { @@ -1835,10 +1800,10 @@ public class PayService { int cartCount = tbCashierCartMapper.updateByOrderId(orderId, "final"); log.info("更新购物车:{}", cartCount); - if(ObjectUtil.isNotNull(orderInfo.getDiscountRatio())&&ObjectUtil.isNotEmpty(orderInfo.getDiscountRatio())){ - tbOrderDetailMapper.updateStatusByOrderId(Integer.valueOf(orderId), "closed",orderInfo.getDiscountRatio()); - }else { - tbOrderDetailMapper.updateStatusByOrderId(Integer.valueOf(orderId), "closed",null); + if (ObjectUtil.isNotNull(orderInfo.getDiscountRatio()) && ObjectUtil.isNotEmpty(orderInfo.getDiscountRatio())) { + tbOrderDetailMapper.updateStatusByOrderId(Integer.valueOf(orderId), "closed", orderInfo.getDiscountRatio()); + } else { + tbOrderDetailMapper.updateStatusByOrderId(Integer.valueOf(orderId), "closed", null); } // JSONObject jsonObject = new JSONObject(); @@ -1854,7 +1819,7 @@ public class PayService { ObjectMapper mapper = new ObjectMapper(); return Result.success(CodeEnum.SUCCESS, mapper.readTree(scanpayResp.getPayInfo())); - }else if("TRADE_AWAIT".equals(scanpayResp.getState())){ + } else if ("TRADE_AWAIT".equals(scanpayResp.getState())) { orderInfo.setStatus("paying"); orderInfo.setPayOrderNo(payment.getTradeNumber()); tbOrderInfoMapper.updateByPrimaryKeySelective(orderInfo); @@ -1864,11 +1829,11 @@ public class PayService { tbOrderPaymentMapper.updateByPrimaryKeySelective(payment); - if("WECHAT".equals(scanpayResp.getPayType())){ + if ("WECHAT".equals(scanpayResp.getPayType())) { orderInfo.setPayType("WECHAT"); - }else if("ALIPAY".equals(scanpayResp.getPayType())){ + } else if ("ALIPAY".equals(scanpayResp.getPayType())) { orderInfo.setPayType("ALIPAY"); - }else if("UNIONPAY".equals(scanpayResp.getPayType())){ + } else if ("UNIONPAY".equals(scanpayResp.getPayType())) { orderInfo.setPayType("UNIONPAY"); } @@ -1877,7 +1842,7 @@ public class PayService { ObjectMapper mapper = new ObjectMapper(); - return Result.success(CodeEnum.PAYING,mapper.readTree(scanpayResp.getPayInfo())); + return Result.success(CodeEnum.PAYING, mapper.readTree(scanpayResp.getPayInfo())); } } } @@ -1886,7 +1851,6 @@ public class PayService { } - public String generateOrderNumber() { String date = DateUtils.getSdfTimes(); Random random = new Random(); @@ -1894,28 +1858,23 @@ public class PayService { return "QR" + date + randomNum; } + public Result createOrder(String ip, String userId, String payType, String shopId, BigDecimal amount) throws JsonProcessingException { - public Result createOrder(String ip,String userId,String payType,String shopId,BigDecimal amount) throws JsonProcessingException { + if (ObjectUtil.isNull(userId) || ObjectUtil.isEmpty(userId) || ObjectUtil.isEmpty(payType) || ObjectUtil.isNull(payType) - if(ObjectUtil.isNull(userId)||ObjectUtil.isEmpty(userId)||ObjectUtil.isEmpty(payType)||ObjectUtil.isNull(payType) - - ||ObjectUtil.isNull(shopId)||ObjectUtil.isEmpty(shopId)||ObjectUtil.isNull(shopId)||ObjectUtil.isNull(amount)||ObjectUtil.isEmpty(amount) - ){ + || ObjectUtil.isNull(shopId) || ObjectUtil.isEmpty(shopId) || ObjectUtil.isNull(shopId) || ObjectUtil.isNull(amount) || ObjectUtil.isEmpty(amount) + ) { return Result.fail(CodeEnum.PARAM); } - if(!"WECHAT".equals(payType)||!"ALIPAY".equals(payType)){ - return Result.fail(CodeEnum.PARAM); - } - TbShopInfo shopInfo= tbShopInfoMapper.selectByPrimaryKey(Integer.valueOf(shopId)); + TbShopInfo shopInfo = tbShopInfoMapper.selectByPrimaryKey(Integer.valueOf(shopId)); - if(ObjectUtil.isNull(shopInfo)){ + if (ObjectUtil.isNull(shopInfo)) { return Result.fail(CodeEnum.SHOPINFONOEXIST); } - - TbOrderInfo orderInfo=new TbOrderInfo(); + TbOrderInfo orderInfo = new TbOrderInfo(); String orderNo = generateOrderNumber(); orderInfo.setOrderNo(orderNo); @@ -1963,8 +1922,6 @@ public class PayService { } - - TbMerchantThirdApply thirdApply = tbMerchantThirdApplyMapper.selectByPrimaryKey(Integer.valueOf(orderInfo.getMerchantId())); if (ObjectUtil.isEmpty(thirdApply) || ObjectUtil.isNull(thirdApply)) { return Result.fail(CodeEnum.NOCUSTOMER); @@ -1973,7 +1930,7 @@ public class PayService { String reqbody = "店铺收款码"; - PublicResp publicResp = thirdPayService.jspay(url,thirdApply.getAppId(),thirdApply.getAppToken(),reqbody,reqbody,orderInfo.getOrderAmount().multiply(new BigDecimal(100)).longValue(),payType,"WECHAT".equals(payType)?thirdApply.getSmallAppid():null,userId,ip,DateUtils.getSsdfTimes(),thirdApply.getStoreId(),backUrl,backUrl); + PublicResp publicResp = thirdPayService.jspay(url, thirdApply.getAppId(), thirdApply.getAppToken(), reqbody, reqbody, orderInfo.getOrderAmount().multiply(new BigDecimal(100)).longValue(), payType, "WECHAT".equals(payType) ? thirdApply.getSmallAppid() : null, userId, ip, DateUtils.getSsdfTimes(), thirdApply.getStoreId(), backUrl, backUrl); if (ObjectUtil.isNotNull(publicResp) && ObjectUtil.isNotEmpty(publicResp)) { @@ -2014,22 +1971,55 @@ public class PayService { ObjectMapper mapper = new ObjectMapper(); - return Result.success(CodeEnum.PAYING, mapper.readTree(scanpayResp.getPayInfo())); + + Map map=new HashMap<>(); + + map.put("orderInfo",orderInfo); + map.put("payInfo",mapper.readTree(scanpayResp.getPayInfo())); + return Result.success(CodeEnum.PAYING, map); } } } return Result.fail(CodeEnum.FAIL); } + public Result queryOrderPay(String orderId) { + if (ObjectUtil.isEmpty(orderId)) { + return Result.fail(CodeEnum.PARAM); + } + + TbOrderInfo orderInfo = tbOrderInfoMapper.selectByPrimaryKey(Integer.valueOf(orderId)); + + if (ObjectUtil.isEmpty(orderInfo)) { + return Result.fail(CodeEnum.ORDERNOEXIST); + } + if ("unpaid".equals(orderInfo.getStatus()) || "paying".equals(orderInfo.getStatus())) { + TbMerchantThirdApply thirdApply = tbMerchantThirdApplyMapper.selectByPrimaryKey(Integer.valueOf(orderInfo.getMerchantId())); + if (ObjectUtil.isEmpty(thirdApply) || ObjectUtil.isNull(thirdApply)) { + return Result.fail(CodeEnum.NOCUSTOMER); + } + TbOrderPayment tbOrderPayment = tbOrderPaymentMapper.selectByOrderId(orderId); + if (ObjectUtil.isNotEmpty(tbOrderPayment)) { + PublicResp orderstatus = thirdPayService.queryOrder(url, thirdApply.getAppId(), tbOrderPayment.getTradeNumber(), null, thirdApply.getAppToken()); + if (ObjectUtil.isNotNull(orderstatus) && ObjectUtil.isNotEmpty(orderstatus)) { + if ("000000".equals(orderstatus.getCode())) { + if ("TRADE_SUCCESS".equals(orderstatus.getObjData().getState())) { + orderInfo.setStatus("closed"); + orderInfo.setPayOrderNo(tbOrderPayment.getTradeNumber()); + tbOrderInfoMapper.updateByPrimaryKeySelective(orderInfo); + } + } + } + } + } + return Result.success(CodeEnum.SUCCESS, orderInfo); - public static void main(String[] args) { - System.out.println(MD5Util.encrypt("123456".concat("13718478323").concat("10"))); } } From 074cc5374deb4b0d3d7658e82a2a0b5db48403f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=89=9B=E5=8F=89=E9=97=AA=E9=97=AA?= <18322780655@163.com> Date: Fri, 13 Sep 2024 11:08:33 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E6=B7=BB=E5=8A=A0pcpay=20=E6=94=AF?= =?UTF-8?q?=E4=BB=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/application.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 110ae23..f2b9a7b 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -61,8 +61,8 @@ wx: secrete: a34a61adc0602118b49400baa8812454 warnMsgTmpId: AV-KybUHaK3KtFVLqpy6PHccHBS7XeX__mOM4RbufnQ ali: - appId: 2021003175619219 - privateKey: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCInywsrhhiSNj7jjOB4/zL79pAaLzoYOuOqHeQELxgXrVFmpqJ7y76wniu4nrHKfp4jQVIHw4+IkBsTNwABTPiryVzAQ4ydb/opzn4zblWRB4S7mAgnc2wqO4FMcwSOiHh7uPFAqvB8oZmEizlbXIJSiDFd3rqG2l8ZADjwuwM0nue1fUJLu65d2B6NDFgBIa11enkrNyX9uPiaeIFW62lvTN1W2AUqTJLvfko5ejExGUDkie6g5W5MIvUSKfq7sDkpt5IoQCooBzjJJ/Ckfw/rJlqoPDFzUSiANBABwu0jAJ42MGYdJ8+dyDDUNla20xmMjXbRtUe5roVzJrrgMjFAgMBAAECggEAPKPx9o77sbxF2zod8JxiW57Fj+stVjOWuoZaM27KPjgrW46o42pvvsvMx0stVfNzAkkNvBpUtw167Nccm0Gz6vz0sVwZkhojqT94gs/FYN3xP1PhBPkmEDCbHWEiBEEbQu5G2O47kGV2dB3DIb53bFoju6Ixw3GRW64DmxSss2+ZsErAWPBwbxIbUDGzIxtGhuWrvWX6pSnnvs+PNNqyoisXnh4cDjrmS9qSgsgcL4D0HwNGTsG1uBeLx4g3D2vKKqhP1osEly91P0QAGzcpuvKqeJ2ZwfFMDlabeOyqRQxFW/FLT2DuY1KmBhcGx6tjDMo7EEpVJ7NHcSHYfAa6wQKBgQDzZbIAV7shEiwS6ZwLSbeMvJkWELJtmEGk/qI/01tULHmrwDh8FIjbrHZrQNXruZ+dS+RObahCKywjYVEr/g15v5vv4yA20bmUgmO27/mVj6mpwvoHYBn0H/511a6V7lopFlCA735K+liFZ6ZW+qZxV8gkZ3/ZZDUy1LSArQmg8QKBgQCPsiK+mUdvs+1ReDm09RessbastXgYvj6UWIsPHc4Mxx/6R8qgy9nt2n2u95cK2uONtpNWswpDtOeWVakuHSKHbdG7Xz0DlklHuzin2JhOBwBu36HAVDjWPF+JDcVkUz7hFWFwl0DawRijFBcr0OV6GUoUURB21xtRnrQPmK/lFQKBgHPWFE7hceedVGhz0ZX1sWtDXsAHlkNeUO+LWAB0QGTg/c7lnnw+8ZtKitkkdCrJntMniTJiMc+76De2WwFK2XL14+rY9z3ftiidnYM01l19j8uBRak47WEn0NyXo40rcLFZM1sJn9tjJbnnyFxg0dHjaxcYQtpdPIxCet06fPihAoGAfaqJ3CnsYXH3H4KG5Qxa8fpRCWWCbBEkZVOx+TxVkLMr8hOKz2i3Y93qgHOisimPS8XZwL6/QUsaJU0wsVVldw7Blp3JnDN4TrUa7R7sw4A4Dr6glLSTKDiQTCmw8PYkTXAHURHV8/le9G+DfBwqM8eeE3p5bZTdHVovmlwrp6kCgYEA7uTSOa0phZ7ts++FVdEZf9TI/B4tRuP4aT31BHs9UoCW1g01/NEEBDiHV9udq9B6Cd5onq+QFj4jiwakTNzXjhQZqgmag1TBE9VpahLxYAD5pYn/Tvm8l5vWuSKcOSwQb2lDg5R2/bmCJRV/QHRkdkAAhHGC/TrOskUCRgosUac= + appId: 2021004174605036 + privateKey: MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQD48HaUoV7OH7os+9L01kHgxzwIhJick4OkFq4aHsntsXEJJ3gedhuEZtV8oHKZ30DPW12IJ4S8NXtpr8OWaqrAPFonf4wVaRY1d0yIAea57kfLEn9oOEEy4FzARgMNDkyxC+/3OUdGbLHpTjfVX3gusXsEhUDy1/WewihAkoNYF37+W3W/uVLzeWoPq0EcUbRv/G/t/p6gL69ltsMAiVFG4Q/Yk24YAN6lYgBPNLXUEwQ1Q+T+1omjfavHgvarKOp33z3JOUH+aGOmDsJ5Y9gyGtJzOCipAd8Zcv+T1ygsEzZYO1/gzcbPnfO1ShqStCHzssuw8FBVx2JdfQKXKMMNAgMBAAECggEAVTrO/pg5Q00titU1Jspsh67u6OOs9H605Ws2dI7yB8VmtAGlaJh7V1t14FN2qSP8poHbhhAxq9aLyGV7C3a9u09udnN+3J28EtYjh7VO732bavWMVXxdJjQWzWWrCb9JlpxFrlkYBA6W4w/6ob0sAqCVQ7jzwbEa0R4cde8ztOa5nysKSfr4YTSs0gqvoiC6fmg8eiRJraEQBoYz9VkKFtOhhh/4w5FhVcYQ2gQvZ3kK3QVuD1eJIQKlCtz8qaox9lXKDiZT4SCmnKshdUL0u5TYIcYeBjZmhJz0Q50KHcpZrCs5y7I0+vRBH3hU+TKSQt7ureymwhbwWMHScLV2gQKBgQD+58SHXhr5M8NGagAmTdsgmCnNv2kOYMd4STyPMY10SVwCv1Bk808ZuP+7e558J1b5/OuDLI5dLq6xrZ/1wLv1G++XqxI00hlFuWS5mUGJVcXotT1mw20rVeUILc7Qe3mLvbMGgfyKf4A7Qa5SSZ4bDeDTJYaFxyiQ281hMzDuPQKBgQD6AiL/Na2/uPH4CG6juwpjYvYVUcjK+7gbRwf3wWsWMpk90Z4ju2iUiP5c1J/oK9P+1T3PIr6M4Xjza8JJj+r9KC/PVB0gBv6vVM96cDpKUEy/UMpcn/T81vqj/Z+WEOODU8Ms6NiTTm+u9ldvpCjbu0u8M+9c0JeIyadJvSTFEQKBgQCsxmFyM3nq8YfpgU2qqNjfBeRH3faSVUy+nj1a/YZYjKS+A/i1BCnYUImeBVNN6chNV342ggvY4xxruDiU9Vcw8wd58O09Oi8BEIFSP6upL6cebUI6Fjo3xlegLJRiwV6INkNTJOYM5hD/mSxUACwXQFfkJipBINXBIgraWD1RLQKBgQCj49axWq0F6+WjZVOyPaD3uh37p9trRUxRhWTxw3fB23WdktaKMgbCqHOmwzP4bRLSEVQtf2dOz1gMqu14b8HqJvgAf/F/11YJ9hz09LEhmjZVjE68HZfqT7uK2W5OX8/lfXmK7TFcj6SjG5YB96lZMhTZ0WnufEd6QkdKDZYXIQKBgQD9GDTcIMbFwbEaKHnfZaTD3f876EGRgsgrCxwdEk7LBCRPwWo7yI929M4psIlpNwNeiyjBkBunWIVkpznp6qPtJqagIPUYesU4f5v6/okq5wcpaNKSkWbIvWVLaLGOiA1aeGJtbpMpyClbSr52puHpRRdvAiIEQ74yYh0JX8q96g== publicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAiQkrz+emAuS1mB3KKDOMmAZRd/BlPbh7fAIHAqAj1+QCZNcV3o2BTLIIqnuKpSlFXDG3uDzp2VsBxcizXuBbFyPGylnD9CgCj5abyh3+FIHPAZ2IM3TtpqImZ0TSPGXrMli4Nir7MvZktgccCqQKCC4o6iaDGz+UwWwJUIPna8fm2tiTZ+KH150CZbKVj4ZGNpBh5XSV/1dRgyQIV9D/EwSbkZ0n6VgKQLJBi0C2UE3QB17aL1Ir6+gDXIDbknN8O7GUD3aMGdThYdSRUb5wp9CZ5qfV7vCS/CgaRo38nhH3NOzkTL+7v0m1ZDHPmqEkn9VzZN6sCQdL7PoAOjHOCwIDAQAB