diff --git a/coolstore-partner-common/src/main/java/com/cool/store/constants/CommonConstants.java b/coolstore-partner-common/src/main/java/com/cool/store/constants/CommonConstants.java index 03237cc04..bb98209a9 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/constants/CommonConstants.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/constants/CommonConstants.java @@ -232,4 +232,7 @@ public class CommonConstants { public static final int REFRESH_TOKEN_EXPIRE = 30 * 24 * 60 * 60; public static final int BATCH_SIZE = 200; + + public static final Integer INDEX_ZERO = 0; + public static final Integer INDEX_ONE = 1; } diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/BusinessModelEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/BusinessModelEnum.java index 7fdeec748..992738fbe 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/enums/BusinessModelEnum.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/BusinessModelEnum.java @@ -9,7 +9,8 @@ package com.cool.store.enums; public enum BusinessModelEnum { NULL(0, "无"), DIRECT_SALES(1, "直营"), - JOIN_SALES(2, "加盟"); + JOIN_SALES(2, "加盟"), + JOINT_STORE(3, "联营"); private Integer code; private String desc; diff --git a/coolstore-partner-common/src/main/java/com/cool/store/utils/CommonUtil.java b/coolstore-partner-common/src/main/java/com/cool/store/utils/CommonUtil.java new file mode 100644 index 000000000..07bf9d41a --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/utils/CommonUtil.java @@ -0,0 +1,25 @@ +package com.cool.store.utils; + +import org.apache.commons.lang3.StringUtils; + +import java.math.BigDecimal; + +/** + *

+ * 公共工具 + *

+ * + * @author wangff + * @since 2025/10/29 + */ +public class CommonUtil { + public static BigDecimal convertToBig(String value) { + if (StringUtils.isBlank(value)) { + return BigDecimal.ZERO; + } + try { + return new BigDecimal(value); + } catch (Exception ignored) {} + return BigDecimal.ZERO; + } +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/ShopStageInfoDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/ShopStageInfoDAO.java index 09f3c4a5f..33b1aeb93 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/dao/ShopStageInfoDAO.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/ShopStageInfoDAO.java @@ -4,7 +4,9 @@ import com.cool.store.constants.CommonConstants; import com.cool.store.dto.BuildStageDTO; import com.cool.store.dto.PlatformBuildStageDTO; import com.cool.store.dto.Preparation.ScheduleDTO; +import com.cool.store.entity.ShopInfoDO; import com.cool.store.entity.ShopStageInfoDO; +import com.cool.store.enums.FranchiseBrandEnum; import com.cool.store.enums.point.ShopStageEnum; import com.cool.store.enums.point.ShopSubStageEnum; import com.cool.store.enums.point.ShopSubStageStatusEnum; @@ -40,17 +42,22 @@ public class ShopStageInfoDAO { /** * 初始化店铺阶段信息 * @param lineId - * @param shopIds + * @param shopInfoList * @return flag =true:表示意向加盟节点完成正常初始化。false:表示意向加盟节点未完成新建分店阶段都为未开始-100。 */ - public Integer initShopStageInfo(Long lineId, List shopIds, Boolean flag) { - if (CollectionUtils.isEmpty(shopIds)) { + public Integer initShopStageInfo(Long lineId, List shopInfoList, Boolean flag) { + if (CollectionUtils.isEmpty(shopInfoList)) { return CommonConstants.ZERO; } List addShopStageList = new ArrayList<>(); LocalDate selectStartDate = LocalDate.now(); - for (Long shopId : shopIds) { + for (ShopInfoDO shopInfoDO : shopInfoList) { + Long shopId = shopInfoDO.getId(); for (ShopSubStageEnum shopSubStageEnum : ShopSubStageEnum.values()) { + if (ShopSubStageEnum.SHOP_STAGE_24.equals(shopSubStageEnum) && String.valueOf(FranchiseBrandEnum.ZXSMZ.getCode()).equals(shopInfoDO.getFranchiseBrand())) { + // 三明治跳过营帐通开通 + continue; + } ShopStageInfoDO shopStageInfo = new ShopStageInfoDO(); shopStageInfo.setLineId(lineId); shopStageInfo.setShopId(shopId); diff --git a/coolstore-partner-dao/src/main/resources/mapper/ShopInfoMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/ShopInfoMapper.xml index 783288301..ab6e29373 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/ShopInfoMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/ShopInfoMapper.xml @@ -279,7 +279,9 @@ from xfsg_shop_info a left join store_${enterpriseId} b on a.shop_code = b.store_num - where b.store_id is not null and a.id in + where a.shop_code is not null + and a.shop_code !='' + and b.store_id is not null and a.id in #{shopId} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/FranchiseFeeDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/FranchiseFeeDO.java index e1bb2f98c..648836e45 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/entity/FranchiseFeeDO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/FranchiseFeeDO.java @@ -72,4 +72,8 @@ public class FranchiseFeeDO { @ApiModelProperty("新管家已缴金额") private BigDecimal xgjFeesPaid; + @Column(name = "cashier_fee") + @ApiModelProperty("收银费(系统费)") + private String cashierFee; + } diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/OrderSysInfoDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/OrderSysInfoDO.java index fcf946e2d..1c24e6dbe 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/entity/OrderSysInfoDO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/OrderSysInfoDO.java @@ -117,4 +117,8 @@ public class OrderSysInfoDO { /** 总部订货收款修改人 */ @Column(name = "receiving_update_user") private String receivingUpdateUser; + + /** 订货方式,0先款后货、1先货后款 */ + @Column(name = "order_type") + private Integer orderType; } \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/FranchiseFeeRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/FranchiseFeeRequest.java index d5c9f3395..c0ec45835 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/FranchiseFeeRequest.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/FranchiseFeeRequest.java @@ -44,6 +44,8 @@ public class FranchiseFeeRequest { @ApiModelProperty("加盟费优惠原因") private String discountReason; + @ApiModelProperty("收银费(系统费)(三明治使用)") + private String cashierFee; public FranchiseFeeDO toFranchiseFeeDO() { FranchiseFeeDO franchiseFeeDO = new FranchiseFeeDO(); @@ -63,6 +65,7 @@ public class FranchiseFeeRequest { franchiseFeeDO.setThirdYearFee(this.thirdYearFee); franchiseFeeDO.setPerformanceBond(this.performanceBond); franchiseFeeDO.setDiscountReason(this.discountReason); + franchiseFeeDO.setCashierFee(this.cashierFee); return franchiseFeeDO; } } diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/OrderSysInfoRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/OrderSysInfoRequest.java index 1bbcbcb80..d553473bc 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/OrderSysInfoRequest.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/OrderSysInfoRequest.java @@ -1,5 +1,6 @@ package com.cool.store.request; +import com.cool.store.constants.CommonConstants; import com.cool.store.entity.OrderSysInfoDO; import com.cool.store.enums.JoinModeEnum; import com.cool.store.enums.OrderSysTypeEnum; @@ -94,6 +95,9 @@ public class OrderSysInfoRequest { @ApiModelProperty(value = "总部订货收款修改人" ) private String receivingUpdateUser; + + @ApiModelProperty("订货方式,0先款后货、1先货后款") + private Integer orderType; public OrderSysInfoDO toOrderSysInfoDO() { OrderSysInfoDO orderSysInfoDO = new OrderSysInfoDO(); @@ -131,7 +135,10 @@ public class OrderSysInfoRequest { if (Objects.equals(joinMode, JoinModeEnum.FLAGSHIP_STORE.getCode())&&this.shopCode!=null){ return true; } - if (StringUtils.isAnyBlank(this.receivingFirmName,this.receivingMsBankAccount,this.receivingMsBankBranch,this.bankUnionPayAccount,this.shopCode)){ + if (StringUtils.isBlank(this.shopCode)) { + return false; + } + if (!CommonConstants.INDEX_ONE.equals(this.orderType) && StringUtils.isAnyBlank(this.receivingFirmName,this.receivingMsBankAccount,this.receivingMsBankBranch,this.bankUnionPayAccount)){ return false; } } diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/xgj/PushFranchiseFeeRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/xgj/PushFranchiseFeeRequest.java index fb150b4e1..373356ea5 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/xgj/PushFranchiseFeeRequest.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/xgj/PushFranchiseFeeRequest.java @@ -3,10 +3,13 @@ package com.cool.store.request.xgj; import com.cool.store.entity.FranchiseFeeDO; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import org.apache.commons.lang3.StringUtils; import java.math.BigDecimal; import java.util.Date; +import static com.cool.store.utils.CommonUtil.convertToBig; + /** * @Author suzhuhong * @Date 2025/6/3 16:52 @@ -44,17 +47,24 @@ public class PushFranchiseFeeRequest { @ApiModelProperty( "创建时间") private Date createTime; + + @ApiModelProperty("品牌") + private Integer joinBrand; public PushFranchiseFeeRequest(){} public PushFranchiseFeeRequest(Long shopId, String partnerName, FranchiseFeeDO franchiseFeeDO){ this.setShopId(shopId); this.setPartnerName(partnerName); this.setBillId(franchiseFeeDO.getId().intValue()); - this.setFranchiseFee(new BigDecimal(franchiseFeeDO.getYearFranchiseFee())); - this.setBond(new BigDecimal(franchiseFeeDO.getLoanMargin())); - this.setFirstYearManageFee(new BigDecimal(franchiseFeeDO.getFirstYearManageFee())); - this.setFirstYearFee(new BigDecimal(franchiseFeeDO.getFirstYearFee())); - this.setDesignFee(new BigDecimal(franchiseFeeDO.getPerformanceBond())); + this.setFranchiseFee(convertToBig(franchiseFeeDO.getYearFranchiseFee())); + this.setBond(convertToBig(franchiseFeeDO.getLoanMargin())); + this.setFirstYearManageFee(convertToBig(franchiseFeeDO.getFirstYearManageFee())); + this.setFirstYearFee(convertToBig(franchiseFeeDO.getFirstYearFee())); + this.setDesignFee(convertToBig(franchiseFeeDO.getPerformanceBond())); + // 三明治收银费 + if (StringUtils.isNotBlank(franchiseFeeDO.getCashierFee())) { + this.setFranchiseFee(convertToBig(franchiseFeeDO.getCashierFee())); + } this.setTotalFee(this.getBond() .add(this.getFranchiseFee()) .add(this.getFirstYearManageFee()) diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/xgj/ReceiptRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/xgj/ReceiptRequest.java index 69a1110b7..d9c5877dc 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/xgj/ReceiptRequest.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/xgj/ReceiptRequest.java @@ -56,6 +56,9 @@ public class ReceiptRequest { @ApiModelProperty( "删除标识") private Integer deleted = 0; + @ApiModelProperty("品牌") + private Integer joinBrand; + public ReceiptRequest() { } diff --git a/coolstore-partner-model/src/main/java/com/cool/store/response/AddSignFranchiseResponse.java b/coolstore-partner-model/src/main/java/com/cool/store/response/AddSignFranchiseResponse.java index f6537dfe0..70ae9306d 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/response/AddSignFranchiseResponse.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/response/AddSignFranchiseResponse.java @@ -241,5 +241,9 @@ public class AddSignFranchiseResponse { @ApiModelProperty("是否统管 : 1-统管,0-不统管") private Integer unifiedManagement; + @ApiModelProperty("收银费(系统费)") + private String cashierFee; + @ApiModelProperty("收银费(系统费)大写") + private String bigCashierFee; } diff --git a/coolstore-partner-model/src/main/java/com/cool/store/response/BuildInformationResponse.java b/coolstore-partner-model/src/main/java/com/cool/store/response/BuildInformationResponse.java index f0795f6e0..9e3a1fd1f 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/response/BuildInformationResponse.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/response/BuildInformationResponse.java @@ -206,4 +206,7 @@ public class BuildInformationResponse { @ApiModelProperty(value = "建店资料当前阶段状态") private Integer shopSubStageStatus; + + @ApiModelProperty("订货方式,0先款后货、1先货后款") + private Integer orderType; } diff --git a/coolstore-partner-model/src/main/java/com/cool/store/response/FranchiseFeeResponse.java b/coolstore-partner-model/src/main/java/com/cool/store/response/FranchiseFeeResponse.java index 0decbfc60..aedd7e18c 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/response/FranchiseFeeResponse.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/response/FranchiseFeeResponse.java @@ -63,7 +63,8 @@ public class FranchiseFeeResponse { @ApiModelProperty("新管家已缴金额") private BigDecimal xgjFeesPaid; - + @ApiModelProperty("收银费(系统费)") + private String cashierFee; @Data public static class LinePay{ @@ -200,6 +201,7 @@ public class FranchiseFeeResponse { franchiseFeeResponse.setXgjCollectionStatus(franchiseFeeDO.getXgjCollectionStatus()); franchiseFeeResponse.setXgjRemainderPayableAmount(franchiseFeeDO.getXgjRemainderPayableAmount()); franchiseFeeResponse.setXgjFeesPaid(franchiseFeeDO.getXgjFeesPaid()); + franchiseFeeResponse.setCashierFee(franchiseFeeDO.getCashierFee()); return franchiseFeeResponse; } } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/BuildInformationServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/BuildInformationServiceImpl.java index acd630ce4..ea175790d 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/BuildInformationServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/BuildInformationServiceImpl.java @@ -213,6 +213,7 @@ public class BuildInformationServiceImpl implements BuildInformationService { response.setReceivingMsBankAccount(orderSysInfoDO.getReceivingMsBankAccount()); response.setReceivingMsBankBranch(orderSysInfoDO.getReceivingMsBankBranch()); response.setBankUnionPayAccount(orderSysInfoDO.getBankUnionPayAccount()); + response.setOrderType(orderSysInfoDO.getOrderType()); WarehouseInfoDO warehouseInfoDO = warehouseInfoMapper.getByCode(orderSysInfoDO.getDeclareGoodsLogisticsWarehouse()); if (Objects.nonNull(warehouseInfoDO)) { response.setDeclareGoodsLogisticsWarehouseName(warehouseInfoDO.getWarehouseName()); diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FranchiseFeeServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FranchiseFeeServiceImpl.java index 8bfb2cc07..99627e4f6 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FranchiseFeeServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FranchiseFeeServiceImpl.java @@ -75,6 +75,13 @@ public class FranchiseFeeServiceImpl implements FranchiseFeeService { if (!shopStageInfo.getShopSubStageStatus().equals(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_70.getShopSubStageStatus())){ throw new ServiceException(ErrorCodeEnum.NOT_ALLOW_OPERATE); } + ShopInfoDO shopInfoDO = shopInfoMapper.selectByPrimaryKey(request.getShopId()); + // 三明治前端没有改这块代码,还是会传这三个字段,因此后端这三个字段置空 + if (Integer.valueOf(shopInfoDO.getFranchiseBrand()).equals(FranchiseBrandEnum.ZXSMZ.getCode())) { + request.setFirstYearManageFee("0"); + request.setFirstYearFee("0"); + request.setYearFranchiseFee("0"); + } FranchiseFeeDO franchiseFeeDO = request.toFranchiseFeeDO(); shopStageInfoDAO.updateShopStageInfo(request.getShopId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_71); if (request.getId() != null) { @@ -89,11 +96,11 @@ public class FranchiseFeeServiceImpl implements FranchiseFeeService { franchiseFeeDO.setCreateTime(new Date()); franchiseFeeMapper.insertSelective(franchiseFeeDO); } - ShopInfoDO shopInfoDO = shopInfoMapper.selectByPrimaryKey(request.getShopId()); LineInfoDO lineInfoDO = lineInfoMapper.getByLineId(shopInfoDO.getLineId()); commonService.sendSms(lineInfoDO.getMobile(), SMSMsgEnum.PAY_FRANCHISE_FEES); //推送加盟费信息到新管家 PushFranchiseFeeRequest feeRequest = new PushFranchiseFeeRequest(shopInfoDO.getId(), lineInfoDO.getUsername(), franchiseFeeDO); + feeRequest.setJoinBrand(Integer.valueOf(shopInfoDO.getFranchiseBrand())); pushService.pushFranchiseFeeToXGJ(feeRequest); return true; } @@ -116,6 +123,7 @@ public class FranchiseFeeServiceImpl implements FranchiseFeeService { //推送加盟费信息到新管家 franchiseFeeDO.setCreateTime(franchiseFeeDO1.getCreateTime()); PushFranchiseFeeRequest feeRequest = new PushFranchiseFeeRequest(shopInfoDO.getId(), lineInfoDO.getUsername(), franchiseFeeDO); + feeRequest.setJoinBrand(Integer.valueOf(shopInfoDO.getFranchiseBrand())); pushService.pushFranchiseFeeToXGJ(feeRequest); return true; } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/LinePayServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/LinePayServiceImpl.java index d1be25aea..bdc18fa13 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/LinePayServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/LinePayServiceImpl.java @@ -308,6 +308,10 @@ public class LinePayServiceImpl implements LinePayService { public Boolean pushPayInfo(Long shopId, LinePayDO linePayDO) { FranchiseFeeDO franchiseFeeDO = franchiseFeeMapper.selectByShopId(shopId); ReceiptRequest receiptRequest = new ReceiptRequest(shopId, franchiseFeeDO.getId().intValue(), linePayDO); + ShopInfoDO shopInfoDO = shopInfoMapper.selectByPrimaryKey(shopId); + if (Objects.nonNull(shopInfoDO)) { + receiptRequest.setJoinBrand(Integer.valueOf(shopInfoDO.getFranchiseBrand())); + } //推送缴费单数据到新管家 pushService.pushReceiptToXGJ(receiptRequest); return Boolean.TRUE; diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/OrderSysInfoServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/OrderSysInfoServiceImpl.java index 20778e775..e95ba45a2 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/OrderSysInfoServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/OrderSysInfoServiceImpl.java @@ -143,6 +143,7 @@ public class OrderSysInfoServiceImpl implements OrderSysInfoService { orderSysInfoDO.setReceivingMsBankAccount(request.getReceivingMsBankAccount()); orderSysInfoDO.setReceivingMsBankBranch(request.getReceivingMsBankBranch()); orderSysInfoDO.setBankUnionPayAccount(request.getBankUnionPayAccount()); + orderSysInfoDO.setOrderType(request.getOrderType()); if (shopSubStageInfo.getShopSubStageStatus().equals(SHOP_SUB_STAGE_STATUS_152.getShopSubStageStatus())) { if (orderSysInfoDO.getReceivingCreateTime() == null) { orderSysInfoDO.setReceivingCreateTime(new Date()); diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/PointServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/PointServiceImpl.java index 8b15ce1e4..06b5bc244 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/PointServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/PointServiceImpl.java @@ -519,6 +519,14 @@ public class PointServiceImpl implements PointService { if (AuditStatusEnum.REJECT.equals(auditStatus)) { return auditRejectDeal(pointInfo, request.getReason()); } + // 如果是三明治,将地址写入门店信息表 + ShopInfoDO shopInfo = shopInfoDAO.getShopInfo(pointInfo.getShopId()); + if (Objects.nonNull(shopInfo) && Integer.valueOf(shopInfo.getFranchiseBrand()).equals(FranchiseBrandEnum.ZXSMZ.getCode())) { + ShopInfoDO updateShopInfo = new ShopInfoDO(); + updateShopInfo.setId(pointInfo.getShopId()); + updateShopInfo.setDetailAddress(pointInfo.getAddress()); + shopInfoDAO.updateShopInfo(updateShopInfo); + } //处理下一节点任务及更新point状态 return dealNextAuditRecord(pointInfo, pointAuditRecordMap, pointTodo.getNodeNo()); } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/ShopServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/ShopServiceImpl.java index 9f4a09703..f3f05c479 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/ShopServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/ShopServiceImpl.java @@ -146,7 +146,7 @@ public class ShopServiceImpl implements ShopService { } shopInfoDAO.batchAddShop(addShopList); List shopIds = addShopList.stream().map(ShopInfoDO::getId).collect(Collectors.toList()); - Integer result = shopStageInfoDAO.initShopStageInfo(lineInfo.getId(), shopIds, true); + Integer result = shopStageInfoDAO.initShopStageInfo(lineInfo.getId(), addShopList, true); //初始化平台账号 HyPartnerUserInfoDO hyPartnerUserInfoDO = hyPartnerUserInfoDAO.selectByPartnerId(lineInfo.getPartnerId()); shopAccountDAO.initShopAccount(hyPartnerUserInfoDO, shopIds); @@ -298,7 +298,7 @@ public class ShopServiceImpl implements ShopService { } shopInfoDAO.batchAddShop(addShopList); List shopIds = addShopList.stream().map(ShopInfoDO::getId).collect(Collectors.toList()); - shopStageInfoDAO.initShopStageInfo(lineInfo.getId(), shopIds, true); + shopStageInfoDAO.initShopStageInfo(lineInfo.getId(), addShopList, true); return 1L; } @@ -356,7 +356,7 @@ public class ShopServiceImpl implements ShopService { shopInfoDO.setCreateUserId(userId); Long shopId = shopInfoDAO.addShopInfo(shopInfoDO); if (lineInfo.getWorkflowSubStageStatus().equals(WorkflowSubStageStatusEnum.SIGN_INTENT_AGREEMENT_125.getCode())) { - shopStageInfoDAO.initShopStageInfo(request.getLineId(), Collections.singletonList(shopId), true); + shopStageInfoDAO.initShopStageInfo(request.getLineId(), Collections.singletonList(shopInfoDO), true); HashMap map = new HashMap<>(); map.put("partnerUsername", lineInfo.getUsername()); map.put("partnerMobile", lineInfo.getMobile()); @@ -381,7 +381,7 @@ public class ShopServiceImpl implements ShopService { MessageEnum.MESSAGE_21, map); } else { - shopStageInfoDAO.initShopStageInfo(request.getLineId(), Collections.singletonList(shopId), false); + shopStageInfoDAO.initShopStageInfo(request.getLineId(), Collections.singletonList(shopInfoDO), false); } //初始化平台账号 HyPartnerUserInfoDO hyPartnerUserInfoDO = hyPartnerUserInfoDAO.selectByPartnerId(lineInfo.getPartnerId()); diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java index 96305a297..3f7e7ecc6 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java @@ -36,6 +36,7 @@ import java.util.stream.Collectors; import static com.cool.store.enums.UserRoleEnum.*; import static com.cool.store.enums.point.ShopSubStageStatusEnum.*; +import static com.cool.store.utils.CommonUtil.convertToBig; @Service @Slf4j @@ -554,11 +555,12 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu } else { if (Objects.nonNull(franchiseFeeDO)) { - BigDecimal total = new BigDecimal(franchiseFeeDO.getYearFranchiseFee()) - .add(new BigDecimal(franchiseFeeDO.getLoanMargin())) - .add(new BigDecimal(franchiseFeeDO.getFirstYearFee())) - .add(new BigDecimal(franchiseFeeDO.getFirstYearManageFee())) - .add(new BigDecimal(franchiseFeeDO.getPerformanceBond())); + BigDecimal total = convertToBig(franchiseFeeDO.getYearFranchiseFee()) + .add(convertToBig(franchiseFeeDO.getLoanMargin())) + .add(convertToBig(franchiseFeeDO.getFirstYearFee())) + .add(convertToBig(franchiseFeeDO.getFirstYearManageFee())) + .add(convertToBig(franchiseFeeDO.getPerformanceBond())) + .add(convertToBig(franchiseFeeDO.getCashierFee())); addSignFranchiseResponse.setContractAmount(total.toString()); } addSignFranchiseResponse.setMobile(lineInfoDO.getMobile()); @@ -611,9 +613,9 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu if (Objects.nonNull(franchiseFeeDO)) { addSignFranchiseResponse.setYearFranchiseFee(franchiseFeeDO.getYearFranchiseFee()); - addSignFranchiseResponse.setBigYearFranchiseFee(Convert.digitToChinese(new BigDecimal(franchiseFeeDO.getYearFranchiseFee()))); + addSignFranchiseResponse.setBigYearFranchiseFee(Convert.digitToChinese(convertToBig(franchiseFeeDO.getYearFranchiseFee()))); addSignFranchiseResponse.setLoanMargin(franchiseFeeDO.getLoanMargin()); - addSignFranchiseResponse.setBigLoanMargin(Convert.digitToChinese(new BigDecimal(franchiseFeeDO.getLoanMargin()))); + addSignFranchiseResponse.setBigLoanMargin(Convert.digitToChinese(convertToBig(franchiseFeeDO.getLoanMargin()))); addSignFranchiseResponse.setFirstYearStartTime(franchiseFeeDO.getFirstYearStartTime()); addSignFranchiseResponse.setFirstYearEndTime(franchiseFeeDO.getFirstYearEndTime()); addSignFranchiseResponse.setFirstYearFee(franchiseFeeDO.getFirstYearFee()); @@ -625,7 +627,9 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu addSignFranchiseResponse.setThirdYearEndTime(franchiseFeeDO.getThirdYearEndTime()); addSignFranchiseResponse.setThirdYearFee(franchiseFeeDO.getThirdYearFee()); addSignFranchiseResponse.setPerformanceBond(franchiseFeeDO.getPerformanceBond()); - addSignFranchiseResponse.setBigPerformanceBond(Convert.digitToChinese(new BigDecimal(franchiseFeeDO.getPerformanceBond()))); + addSignFranchiseResponse.setBigPerformanceBond(Convert.digitToChinese(convertToBig(franchiseFeeDO.getPerformanceBond()))); + addSignFranchiseResponse.setCashierFee(franchiseFeeDO.getCashierFee()); + addSignFranchiseResponse.setBigCashierFee(Convert.digitToChinese(convertToBig(franchiseFeeDO.getCashierFee()))); } return addSignFranchiseResponse; } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/xinfa/XinFaDeviceService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/xinfa/XinFaDeviceService.java index 144b447d1..0c3d4667b 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/xinfa/XinFaDeviceService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/xinfa/XinFaDeviceService.java @@ -23,8 +23,10 @@ import org.springframework.web.bind.annotation.RequestParam; import javax.annotation.PostConstruct; import javax.annotation.Resource; import java.io.IOException; +import java.net.SocketTimeoutException; import java.text.MessageFormat; import java.util.*; +import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; /** @@ -68,6 +70,12 @@ public class XinFaDeviceService { private final Map accountMap = new HashMap<>(); + private final OkHttpClient httpClient = new OkHttpClient.Builder() + .connectTimeout(10, TimeUnit.SECONDS) + .readTimeout(30, TimeUnit.SECONDS) + .writeTimeout(30, TimeUnit.SECONDS) + .build(); + @PostConstruct public void initAccountMap() { accountMap.put("restaurant", new HuoMaAccountDTO(huoMaRestaurantStoresAccount, huoMaRestaurantStoresPassword)); @@ -102,7 +110,7 @@ public class XinFaDeviceService { public List getStoreEquipmentDataByStoreNumList(List storeNumList, String token) { Map> requestBody = new HashMap<>(); requestBody.put("codeList", storeNumList); - String responseBody = sendPostRequestByToken(JSONObject.toJSONString(requestBody), huoMaGetPointTerminalUrl,token); + String responseBody = sendPostRequestNoRetryByToken(JSONObject.toJSONString(requestBody), huoMaGetPointTerminalUrl,token); try{ ObjectMapper mapper = new ObjectMapper(); JsonNode rootNode = mapper.readTree(responseBody); @@ -127,7 +135,7 @@ public class XinFaDeviceService { } } StoreRequestDTO requestBody = new StoreRequestDTO("point_report", 0, 10, storeNum); - String responseBody = sendPostRequestByToken(JSONObject.toJSONString(requestBody), huoMaGetStoreIdUrl,token); + String responseBody = sendPostRequestNoRetryByToken(JSONObject.toJSONString(requestBody), huoMaGetStoreIdUrl,token); try{ Integer storeId = extractIdsFromResponse(responseBody); redisUtilPool.hashSet(RedisConstant.HUO_MA_STORE_ID, storeNum, storeId.toString()); @@ -186,7 +194,7 @@ public class XinFaDeviceService { TagDTO tagDTO = new TagDTO("DEFAULT", 0, 30,"program"); String responseBody = null; try{ - responseBody = sendPostRequestByToken(JSONObject.toJSONString(tagDTO), huoMaGetTagUrl,token); + responseBody = sendPostRequestNoRetryByToken(JSONObject.toJSONString(tagDTO), huoMaGetTagUrl,token); ObjectMapper mapper = new ObjectMapper(); JsonNode rootNode = mapper.readTree(responseBody); @@ -238,7 +246,7 @@ public class XinFaDeviceService { String token = getStoreToken(huoMaAccountDTO.getAccount(), huoMaAccountDTO.getPassword()); String responseBody = null; try{ - responseBody = sendPostRequestByToken(JSONObject.toJSONString(programReqDTO), huoMaGetProgramUrl,token); + responseBody = sendPostRequestNoRetryByToken(JSONObject.toJSONString(programReqDTO), huoMaGetProgramUrl,token); ObjectMapper mapper = new ObjectMapper(); JsonNode rootNode = mapper.readTree(responseBody); @@ -270,7 +278,7 @@ public class XinFaDeviceService { String token = getStoreToken(huoMaAccountDTO.getAccount(), huoMaAccountDTO.getPassword()); String responseBody = null; try{ - responseBody = sendPostRequestByToken(JSONObject.toJSONString(publishDTO), huoMaGetPublishUrl,token); + responseBody = sendPostRequestNoRetryByToken(JSONObject.toJSONString(publishDTO), huoMaGetPublishUrl,token); ObjectMapper mapper = new ObjectMapper(); JsonNode rootNode = mapper.readTree(responseBody); int code = rootNode.get("code").asInt(); @@ -294,7 +302,7 @@ public class XinFaDeviceService { StoreXinFaDetailRequestDTO storeXinFaDetailRequestDTO = new StoreXinFaDetailRequestDTO(0, 10, pointId); String responseBody = null; try{ - responseBody = sendPostRequestByToken(JSONObject.toJSONString(storeXinFaDetailRequestDTO), huoMaGetStoreXinFaDeviceDetailUrl,token); + responseBody = sendPostRequestNoRetryByToken(JSONObject.toJSONString(storeXinFaDetailRequestDTO), huoMaGetStoreXinFaDeviceDetailUrl,token); ObjectMapper mapper = new ObjectMapper(); JsonNode rootNode = mapper.readTree(responseBody); @@ -502,8 +510,8 @@ public class XinFaDeviceService { } @NotNull - private static String sendPost(String requestUrl, Request request) { - try (Response response = new OkHttpClient().newCall(request).execute()) { + private String sendPost(String requestUrl, Request request) { + try (Response response = httpClient.newCall(request).execute()) { log.info("发起请求 time:{}", System.currentTimeMillis()); if (!response.isSuccessful()) { log.info("HTTP请求失败,msg: " + response.message()); @@ -513,6 +521,9 @@ public class XinFaDeviceService { String responseBody = response.body().string(); log.info("请求成功responseBody:{}", JSONObject.toJSONString(responseBody)); return responseBody; + } catch (SocketTimeoutException e) { + log.error("API调用超时 - URL: {}, 错误: {}", requestUrl, e.getMessage(), e); + throw new ServiceException(ErrorCodeEnum.THIRD_API_ERROR, "接口调用超时: " + e.getMessage()); } catch (ServiceException e) { throw e; } catch (Exception e) { diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/TestController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/TestController.java index 3234f4f7e..5d56f85f0 100644 --- a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/TestController.java +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/TestController.java @@ -20,6 +20,8 @@ import com.cool.store.job.XxlJobHandler; import com.cool.store.mapper.HyOpenAreaInfoMapper; import com.cool.store.request.ShopListSuccessOpenRequest; import com.cool.store.request.xfsgFirstOrderListRequest; +import com.cool.store.request.xgj.FranchiseFeeCallBackRequest; +import com.cool.store.request.xgj.ReceiptCallBackRequest; import com.cool.store.response.MiniShopsResponse; import com.cool.store.response.ResponseResult; import com.cool.store.response.caipin.StoreUserResponse; @@ -39,6 +41,7 @@ import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import java.io.ByteArrayOutputStream; +import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalTime; import java.time.temporal.ChronoUnit; @@ -85,6 +88,27 @@ public class TestController { ThirdFoodService thirdFoodService; @Autowired StoreService storeService; + @Resource + LinePayDAO linePayDAO; + @Resource + OpenApiService openApiService; + + @PostMapping("/testXgjCallback") + public ResponseResult testXgjCallback(Long linePayId) { + LinePayDO linePayDO = linePayDAO.getById(linePayId); + ReceiptCallBackRequest receiptRequest = new ReceiptCallBackRequest(); + receiptRequest.setReceiptId(linePayDO.getPaymentReceiptCode()); + receiptRequest.setClaimStatus(1); + openApiService.changeReceiptStatus(receiptRequest); + FranchiseFeeCallBackRequest franchiseRequest = new FranchiseFeeCallBackRequest(); + franchiseRequest.setShopId(linePayDO.getShopId()); + franchiseRequest.setPayableFee(linePayDO.getAmount()); + franchiseRequest.setPaidFees(linePayDO.getAmount()); + franchiseRequest.setRemainingFee(BigDecimal.ZERO); + franchiseRequest.setPaymentStatus(2); + openApiService.changePaymentStatus(franchiseRequest); + return ResponseResult.success(true); + } @PostMapping("/getFirstOrders") public ResponseResult getFirstOrders(@RequestBody xfsgFirstOrderListRequest storeCodeList) { diff --git a/coolstore-partner-web/src/main/resources/application-ab.properties b/coolstore-partner-web/src/main/resources/application-ab.properties index e14312016..8822f629d 100644 --- a/coolstore-partner-web/src/main/resources/application-ab.properties +++ b/coolstore-partner-web/src/main/resources/application-ab.properties @@ -150,12 +150,13 @@ huoMa.get.point.terminal.url = https://www.huoMayunping.com/api/terminal/getPoin huoMa.get.tag.url = https://www.huomayunping.com/api/tag/search huoMa.get.program.url = https://www.huomayunping.com/api/program/search huoMa.get.publish.url = https://www.huomayunping.com/api/channelPublish/target/v2/quick-publish -huoMa.direct.stores.account = 15370309163 -huoMa.direct.stores.password = Zx@123456. -huoMa.franchise.stores.account = 13563273279 -huoMa.franchise.stores.password = Zx@123456. -huoMa.restaurant.stores.account = 18656552865 -huoMa.restaurant.stores.password = ZX123456 +huoMa.direct.stores.account = 18375320931 +huoMa.direct.stores.password = Huoma@123456. +huoMa.franchise.stores.account = 13345565081 +huoMa.franchise.stores.password = Huoma@123456. +huoMa.restaurant.stores.account = 15167817007 +huoMa.restaurant.stores.password = Huoma@123456. + cool.api.rsa.private.key=MIIEpQIBAAKCAQEA0erPAWesjkp9J4htmfCyqKS9npmT9dW3KqWTfb4c7x/QBUtKuokWOO0XikHd4bGUa9kl+twSv/5A3kYz1B9eg6wRuDJoads+G5U7rVQjzdoUtLaf3lNXkuSehl4uHUPQfNa6vcmvzraXPxJjEpYzj9WZh7uJqq2oSgw42H1qdbFCXSaE5BwsOb+2vZXjzh4RO10Sy3Qb1UqGsoZoxVzrtDeEctCjrecFyQr96L2UtYa4NTxSTfu4rgObrwIOMvqqnLsXEzK/rd6kIHYjkZYQCOa48AedWp2YKQ7Ldclj+VMLnXvl42J9exVkbs++8k3P5sI9fdZX4Ey2RBjnSoAo/QIDAQABAoIBACbBGi8I+CE77M+13wAu4RkD8xL7CQc3ic2ojGqIRPi7r5CuphD6mpzvXqtyfhd7DKr9h8bAxwBlnQ28ObjVgsI96/aM7dxvMs/uVPpqwIJyWuTDG5A05EPVC9REQnC6Mp09mnPL7rZz3Mfy6dIGY2YQWfwmWiPl1B45k+wZ+WPZPI0JVnvRzM881kf4aAhEAt08i9VoihylwVAjWIPmLuhf6ZcqI5q8iUsjfO22wZJsudVTCA/dsJdNxv+1RDKeYnSLJL79cZQcodqEhFqTy6vnn2dMsaHH7dpphU27barxUjeL482SR7kFfMqEXn5sltRn/3ep+3sf4Ph2vMtoZeECgYEA6gXzEtT9ZOeAMp4BRGmfNZ0TQLprPPVSwudz/uUBE4j/vyhfXkh9p7hqwyoxN+Z8b65yINvx8yP6hge6ek/MyAwBCZyfIRxZAPZu1eEGoYKl391ubFt2EIVqrN2DtAvzHMr5B/E2VHBq6AJm/rERFX5oKsg6zHS9tPLhgGnWVd0CgYEA5aFWOrtiqZJlp1MHQ4OeWBJatBSynkORdxCW7ic0CKbkYus0NSz1SsvskpbnfEXNB53x98qJxRhSopg/DC4m7XqxjSf9lY3HH4Y/9907olj33yGAnLWC88GivVndt577u/XhYRCk33vOQ3GoibEdjnpMOkWmOfwYG/FsRWWQvaECgYEA1N2siEisZIgel+wZAv2AD+hchtgKi1wqd5bIb+Yl4HsRBfPXK4+MnG6mzfcm5c4FCiEHNtRZc+waCKgm+vJzNtOUbgXEyP1cCAAgOPOCcI7CCqsDshRPhB+XNL4Y+kCUVnBZrNu/q3bGB1uIC8tL2t0sKx4OPcNCe8EhVQjwKRECgYEA4uothdhKRPtwDIsVsHfN74Yjr7SMVay7gIcaPrjqyGnzYnS+oJWOx50AaFNK6Rko5JAF3jF9NxE0B4yfMPAic6Y88hpEkpcJ4HMPn2Y1WdbFCu/WYgVUJICCys6VNLCcXj85umtyIY38Y9VbEMW/SV49GZBeFQqy4FoP/fvBrkECgYEAnfjTDYwgdmJdsUqyNzAocwcJXG2rVtYc7Txrl0TltcwuJmgoSywdzyOP2R9+NZsfoxWDzG0/yr15ApMvUcnnTwHN/8bGQ9SLatFLKqS4EtdwDKKS1JvNbs7V1myQGpt7jbShZOI0e6Fs4xP8ujxsLeGgiq9mZrS9UdRj5XKDoVM= cool.api.rsa.public.key=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0erPAWesjkp9J4htmfCyqKS9npmT9dW3KqWTfb4c7x/QBUtKuokWOO0XikHd4bGUa9kl+twSv/5A3kYz1B9eg6wRuDJoads+G5U7rVQjzdoUtLaf3lNXkuSehl4uHUPQfNa6vcmvzraXPxJjEpYzj9WZh7uJqq2oSgw42H1qdbFCXSaE5BwsOb+2vZXjzh4RO10Sy3Qb1UqGsoZoxVzrtDeEctCjrecFyQr96L2UtYa4NTxSTfu4rgObrwIOMvqqnLsXEzK/rd6kIHYjkZYQCOa48AedWp2YKQ7Ldclj+VMLnXvl42J9exVkbs++8k3P5sI9fdZX4Ey2RBjnSoAo/QIDAQAB diff --git a/coolstore-partner-web/src/main/resources/application-online.properties b/coolstore-partner-web/src/main/resources/application-online.properties index bb4f1e31f..8e0948fe6 100644 --- a/coolstore-partner-web/src/main/resources/application-online.properties +++ b/coolstore-partner-web/src/main/resources/application-online.properties @@ -153,9 +153,9 @@ huoMa.get.point.terminal.url = https://www.huoMayunping.com/api/terminal/getPoin huoMa.get.tag.url = https://www.huomayunping.com/api/tag/search huoMa.get.program.url = https://www.huomayunping.com/api/program/search huoMa.get.publish.url = https://www.huomayunping.com/api/channelPublish/target/v2/quick-publish -huoMa.direct.stores.account = 15370309163 -huoMa.direct.stores.password = Zx@123456. -huoMa.franchise.stores.account = 13563273279 -huoMa.franchise.stores.password = Zx@123456. -huoMa.restaurant.stores.account = 18656552865 -huoMa.restaurant.stores.password = ZX123456 \ No newline at end of file +huoMa.direct.stores.account = 18375320931 +huoMa.direct.stores.password = Huoma@123456. +huoMa.franchise.stores.account = 13345565081 +huoMa.franchise.stores.password = Huoma@123456. +huoMa.restaurant.stores.account = 15167817007 +huoMa.restaurant.stores.password = Huoma@123456. \ No newline at end of file diff --git a/coolstore-partner-web/src/main/resources/application-test.properties b/coolstore-partner-web/src/main/resources/application-test.properties index 3792da08d..f44ebe092 100644 --- a/coolstore-partner-web/src/main/resources/application-test.properties +++ b/coolstore-partner-web/src/main/resources/application-test.properties @@ -163,12 +163,12 @@ huoMa.get.point.terminal.url = https://www.huoMayunping.com/api/terminal/getPoin huoMa.get.tag.url = https://www.huomayunping.com/api/tag/search huoMa.get.program.url = https://www.huomayunping.com/api/program/search huoMa.get.publish.url = https://www.huomayunping.com/api/channelPublish/target/v2/quick-publish -huoMa.direct.stores.account = 15370309163 -huoMa.direct.stores.password = Zx@123456. -huoMa.franchise.stores.account = 13563273279 -huoMa.franchise.stores.password = Zx@123456. -huoMa.restaurant.stores.account = 18656552865 -huoMa.restaurant.stores.password = ZX123456 +huoMa.direct.stores.account = 18375320931 +huoMa.direct.stores.password = Huoma@123456. +huoMa.franchise.stores.account = 13345565081 +huoMa.franchise.stores.password = Huoma@123456. +huoMa.restaurant.stores.account = 15167817007 +huoMa.restaurant.stores.password = Huoma@123456. cool.api.rsa.private.key=MIIEpQIBAAKCAQEA0erPAWesjkp9J4htmfCyqKS9npmT9dW3KqWTfb4c7x/QBUtKuokWOO0XikHd4bGUa9kl+twSv/5A3kYz1B9eg6wRuDJoads+G5U7rVQjzdoUtLaf3lNXkuSehl4uHUPQfNa6vcmvzraXPxJjEpYzj9WZh7uJqq2oSgw42H1qdbFCXSaE5BwsOb+2vZXjzh4RO10Sy3Qb1UqGsoZoxVzrtDeEctCjrecFyQr96L2UtYa4NTxSTfu4rgObrwIOMvqqnLsXEzK/rd6kIHYjkZYQCOa48AedWp2YKQ7Ldclj+VMLnXvl42J9exVkbs++8k3P5sI9fdZX4Ey2RBjnSoAo/QIDAQABAoIBACbBGi8I+CE77M+13wAu4RkD8xL7CQc3ic2ojGqIRPi7r5CuphD6mpzvXqtyfhd7DKr9h8bAxwBlnQ28ObjVgsI96/aM7dxvMs/uVPpqwIJyWuTDG5A05EPVC9REQnC6Mp09mnPL7rZz3Mfy6dIGY2YQWfwmWiPl1B45k+wZ+WPZPI0JVnvRzM881kf4aAhEAt08i9VoihylwVAjWIPmLuhf6ZcqI5q8iUsjfO22wZJsudVTCA/dsJdNxv+1RDKeYnSLJL79cZQcodqEhFqTy6vnn2dMsaHH7dpphU27barxUjeL482SR7kFfMqEXn5sltRn/3ep+3sf4Ph2vMtoZeECgYEA6gXzEtT9ZOeAMp4BRGmfNZ0TQLprPPVSwudz/uUBE4j/vyhfXkh9p7hqwyoxN+Z8b65yINvx8yP6hge6ek/MyAwBCZyfIRxZAPZu1eEGoYKl391ubFt2EIVqrN2DtAvzHMr5B/E2VHBq6AJm/rERFX5oKsg6zHS9tPLhgGnWVd0CgYEA5aFWOrtiqZJlp1MHQ4OeWBJatBSynkORdxCW7ic0CKbkYus0NSz1SsvskpbnfEXNB53x98qJxRhSopg/DC4m7XqxjSf9lY3HH4Y/9907olj33yGAnLWC88GivVndt577u/XhYRCk33vOQ3GoibEdjnpMOkWmOfwYG/FsRWWQvaECgYEA1N2siEisZIgel+wZAv2AD+hchtgKi1wqd5bIb+Yl4HsRBfPXK4+MnG6mzfcm5c4FCiEHNtRZc+waCKgm+vJzNtOUbgXEyP1cCAAgOPOCcI7CCqsDshRPhB+XNL4Y+kCUVnBZrNu/q3bGB1uIC8tL2t0sKx4OPcNCe8EhVQjwKRECgYEA4uothdhKRPtwDIsVsHfN74Yjr7SMVay7gIcaPrjqyGnzYnS+oJWOx50AaFNK6Rko5JAF3jF9NxE0B4yfMPAic6Y88hpEkpcJ4HMPn2Y1WdbFCu/WYgVUJICCys6VNLCcXj85umtyIY38Y9VbEMW/SV49GZBeFQqy4FoP/fvBrkECgYEAnfjTDYwgdmJdsUqyNzAocwcJXG2rVtYc7Txrl0TltcwuJmgoSywdzyOP2R9+NZsfoxWDzG0/yr15ApMvUcnnTwHN/8bGQ9SLatFLKqS4EtdwDKKS1JvNbs7V1myQGpt7jbShZOI0e6Fs4xP8ujxsLeGgiq9mZrS9UdRj5XKDoVM=