Commit ec7f7737 by ping.wu

无单收银使用储值卡校验余额

parent 1ab2de56
...@@ -536,5 +536,16 @@ public class OrderController { ...@@ -536,5 +536,16 @@ public class OrderController {
return ResponseUtil.success(); return ResponseUtil.success();
} }
/**
* 无单收银使用储值卡混合支付校验余额
*/
@ApiAnnotation(logMessage = "cashierCheck")
@PostMapping("/cashierCheck")
public BaseResponse<CashierCheckResponseVo> cashierCheck(@Validated @LogParams @RequestBody CashierCheckVo request) {
CreateCashierOrderDto dto = new CreateCashierOrderDto();
BeanUtils.copyProperties(request, dto);
return ResponseUtil.success(orderAdapterService.cashierCheck(dto));
}
} }
package cn.freemud.entities.bo;
import lombok.Data;
@Data
public class CheckSvcAmountBo {
/**
* 商户号
*/
private String partnerId;
/**
* 门店号
*/
private String storeCode;
/**
* 订单金额(单位:分)
*/
private Long orderAmount;
/**
* 储值卡卡号
*/
private String cardCode;
}
package cn.freemud.entities.bo;
import lombok.Data;
@Data
public class CheckSvcAmountResponse {
/**
* 储值卡支付金额(分)
*/
private Long svcPayAmount;
/**
* 微信或支付宝 支付金额(分)
*/
private Long payAmount;
/**
* 错误提示
*/
private String msg;
}
...@@ -31,6 +31,11 @@ public class CreateCashierOrderDto { ...@@ -31,6 +31,11 @@ public class CreateCashierOrderDto {
private Long orderAmount; private Long orderAmount;
/** /**
* 储值卡卡号
*/
private String cardCode;
/**
* 小程序版本号 * 小程序版本号
*/ */
private String version; private String version;
......
package cn.freemud.entities.vo.order;
import lombok.Data;
@Data
public class CashierCheckResponseVo {
/**
* 储值卡支付金额(分)
*/
private Long svcPayAmount;
/**
* 微信或支付宝 支付金额(分)
*/
private Long payAmount;
/**
* 错误提示
*/
private String msg;
}
package cn.freemud.entities.vo.order;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
@Data
public class CashierCheckVo {
/**
* 用户登陆的session
*/
@ApiModelProperty("用户登陆的session")
@NotEmpty(message = "请先授权登陆")
private String sessionId;
/**
* 商户号
*/
@ApiModelProperty("商户号")
@NotEmpty(message = "商户号必填")
private String partnerId;
/**
* 门店号
*/
@ApiModelProperty("门店号")
@NotEmpty(message = "门店号必填")
private String storeCode;
/**
* 订单金额(单位:分)
*/
@ApiModelProperty("订单金额(单位:分)")
@NotNull(message = "请输入订单金额")
@Min(value = 1, message = "请输入有效的订单金额哟")
private Long orderAmount;
/**
* 储值卡卡号
*/
@ApiModelProperty("储值卡卡号")
private String cardCode;
/**
* 小程序版本号
*/
@ApiModelProperty("小程序版本号")
private String version;
}
...@@ -45,6 +45,12 @@ public class CreateCashierOrderVo { ...@@ -45,6 +45,12 @@ public class CreateCashierOrderVo {
private Long orderAmount; private Long orderAmount;
/** /**
* 储值卡卡号
*/
@ApiModelProperty("储值卡卡号")
private String cardCode;
/**
* 小程序版本号 * 小程序版本号
*/ */
@ApiModelProperty("小程序版本号") @ApiModelProperty("小程序版本号")
......
...@@ -4,6 +4,7 @@ import cn.freemud.entities.dto.ConfirmOrderDto; ...@@ -4,6 +4,7 @@ import cn.freemud.entities.dto.ConfirmOrderDto;
import cn.freemud.entities.dto.order.CreateCashierOrderDto; import cn.freemud.entities.dto.order.CreateCashierOrderDto;
import cn.freemud.entities.vo.CreateOrderResponseVo; import cn.freemud.entities.vo.CreateOrderResponseVo;
import cn.freemud.entities.vo.PaysuccessNoticeMessage; import cn.freemud.entities.vo.PaysuccessNoticeMessage;
import cn.freemud.entities.vo.order.CashierCheckResponseVo;
import com.freemud.api.assortment.datamanager.entity.vo.AssortmentCustomerInfoVo; import com.freemud.api.assortment.datamanager.entity.vo.AssortmentCustomerInfoVo;
import com.freemud.application.sdk.api.ordercenter.entities.v1.OrderBeanV1; import com.freemud.application.sdk.api.ordercenter.entities.v1.OrderBeanV1;
...@@ -35,4 +36,12 @@ public interface CashierOrderService { ...@@ -35,4 +36,12 @@ public interface CashierOrderService {
* @return 处理结果json字符串 * @return 处理结果json字符串
*/ */
String paySuccessCallback(PaysuccessNoticeMessage message, ConfirmOrderDto confirmOrderDto, Map<String, OrderBeanV1> orderBeans); String paySuccessCallback(PaysuccessNoticeMessage message, ConfirmOrderDto confirmOrderDto, Map<String, OrderBeanV1> orderBeans);
/**
* 无单收银使用储值卡校验余额
* @param createOrderDto 同创建无单收银订单请求数据
* @param member 会员信息
* @return 储值卡支付金额和现金支付金额
*/
CashierCheckResponseVo cashierCheck(CreateCashierOrderDto createOrderDto, AssortmentCustomerInfoVo member);
} }
...@@ -3,6 +3,8 @@ package cn.freemud.service.impl; ...@@ -3,6 +3,8 @@ package cn.freemud.service.impl;
import cn.freemud.adapter.LightApplicationConvertToAssortmentSdkAdapter; import cn.freemud.adapter.LightApplicationConvertToAssortmentSdkAdapter;
import cn.freemud.base.util.DateUtil; import cn.freemud.base.util.DateUtil;
import cn.freemud.constant.ResponseCodeConstant; import cn.freemud.constant.ResponseCodeConstant;
import cn.freemud.entities.bo.CheckSvcAmountBo;
import cn.freemud.entities.bo.CheckSvcAmountResponse;
import cn.freemud.entities.dto.ConfirmOrderDto; import cn.freemud.entities.dto.ConfirmOrderDto;
import cn.freemud.entities.dto.StoreResponseDto; import cn.freemud.entities.dto.StoreResponseDto;
import cn.freemud.entities.dto.order.CreateCashierOrderDto; import cn.freemud.entities.dto.order.CreateCashierOrderDto;
...@@ -10,6 +12,7 @@ import cn.freemud.entities.dto.order.CreatePrepayRequestDto; ...@@ -10,6 +12,7 @@ import cn.freemud.entities.dto.order.CreatePrepayRequestDto;
import cn.freemud.entities.dto.store.StoreMixResponseDto; import cn.freemud.entities.dto.store.StoreMixResponseDto;
import cn.freemud.entities.vo.CreateOrderResponseVo; import cn.freemud.entities.vo.CreateOrderResponseVo;
import cn.freemud.entities.vo.PaysuccessNoticeMessage; import cn.freemud.entities.vo.PaysuccessNoticeMessage;
import cn.freemud.entities.vo.order.CashierCheckResponseVo;
import cn.freemud.enums.OrderBeanType; import cn.freemud.enums.OrderBeanType;
import cn.freemud.enums.ResponseResult; import cn.freemud.enums.ResponseResult;
import cn.freemud.enums.UserLoginChannelEnum; import cn.freemud.enums.UserLoginChannelEnum;
...@@ -31,10 +34,10 @@ import com.freemud.application.sdk.api.ordercenter.request.create.CreateOrderReq ...@@ -31,10 +34,10 @@ import com.freemud.application.sdk.api.ordercenter.request.create.CreateOrderReq
import com.freemud.application.sdk.api.ordercenter.response.OrderBaseResp; import com.freemud.application.sdk.api.ordercenter.response.OrderBaseResp;
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderInfoReqs; import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderInfoReqs;
import com.freemud.application.sdk.api.ordercenter.service.OrderSdkService; import com.freemud.application.sdk.api.ordercenter.service.OrderSdkService;
import com.freemud.sdk.api.assortment.order.adapter.OrderSdkAdapter;
import com.freemud.sdk.api.assortment.order.request.order.ConfirmOrderRequest; import com.freemud.sdk.api.assortment.order.request.order.ConfirmOrderRequest;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.ArrayList; import java.util.ArrayList;
...@@ -91,6 +94,7 @@ public class CashierOrderServiceImpl implements CashierOrderService { ...@@ -91,6 +94,7 @@ public class CashierOrderServiceImpl implements CashierOrderService {
createPrepayRequestDto.setOpenId(member.getOpenId()); createPrepayRequestDto.setOpenId(member.getOpenId());
createPrepayRequestDto.setTotalAmount(createOrderDto.getOrderAmount()); createPrepayRequestDto.setTotalAmount(createOrderDto.getOrderAmount());
createPrepayRequestDto.setChannel(Objects.requireNonNull(PayChannelType.getByIndex(request.getPayChannelType())).getEbcode()); createPrepayRequestDto.setChannel(Objects.requireNonNull(PayChannelType.getByIndex(request.getPayChannelType())).getEbcode());
createPrepayRequestDto.setCardCode(createOrderDto.getCardCode());
OrderBeanV1 orderBeanV1 = orderCenterSdkAdapter.convent2NEWOrderInfo(response.getResult()); OrderBeanV1 orderBeanV1 = orderCenterSdkAdapter.convent2NEWOrderInfo(response.getResult());
createPrepayRequestDto.setProductOrderBean(orderBeanV1); createPrepayRequestDto.setProductOrderBean(orderBeanV1);
createPrepayRequestDto.setFatherOrderBean(orderBeanV1); createPrepayRequestDto.setFatherOrderBean(orderBeanV1);
...@@ -190,4 +194,18 @@ public class CashierOrderServiceImpl implements CashierOrderService { ...@@ -190,4 +194,18 @@ public class CashierOrderServiceImpl implements CashierOrderService {
map.put("message", "success"); map.put("message", "success");
return JSONObject.toJSONString(map); return JSONObject.toJSONString(map);
} }
/**
* 无单收银使用储值卡混合支付
*/
@Override
public CashierCheckResponseVo cashierCheck(CreateCashierOrderDto createOrderDto, AssortmentCustomerInfoVo member) {
CheckSvcAmountBo bo = new CheckSvcAmountBo();
BeanUtils.copyProperties(createOrderDto, bo);
CheckSvcAmountResponse checkSvcAmountResponse = payService.checkSvcAmount(bo);
CashierCheckResponseVo responseVo = new CashierCheckResponseVo();
BeanUtils.copyProperties(checkSvcAmountResponse, responseVo);
return responseVo;
}
} }
...@@ -8,6 +8,7 @@ import cn.freemud.entities.bo.CreateOrderBONew; ...@@ -8,6 +8,7 @@ import cn.freemud.entities.bo.CreateOrderBONew;
import cn.freemud.entities.dto.ConfirmOrderDto; import cn.freemud.entities.dto.ConfirmOrderDto;
import cn.freemud.entities.dto.order.CreateCashierOrderDto; import cn.freemud.entities.dto.order.CreateCashierOrderDto;
import cn.freemud.entities.vo.*; import cn.freemud.entities.vo.*;
import cn.freemud.entities.vo.order.CashierCheckResponseVo;
import cn.freemud.entities.vo.order.PaymentConfigVo; import cn.freemud.entities.vo.order.PaymentConfigVo;
import cn.freemud.entities.vo.order.PlugInParameter; import cn.freemud.entities.vo.order.PlugInParameter;
import cn.freemud.enums.*; import cn.freemud.enums.*;
...@@ -393,4 +394,16 @@ public class OrderAdapterServiceImpl { ...@@ -393,4 +394,16 @@ public class OrderAdapterServiceImpl {
} }
/**
* 无单收银使用储值卡混合支付
*/
public CashierCheckResponseVo cashierCheck(CreateCashierOrderDto createOrderDto) {
AssortmentCustomerInfoVo member = assortmentCustomerInfoManager.getCustomerInfoByObject(createOrderDto.getSessionId());
if (member == null || StringUtils.isEmpty(member.getMemberId())) {
throw new ServiceException(ResponseResult.NOT_LOGIN);
}
//校验储值卡余额
return cashierOrderService.cashierCheck(createOrderDto, member);
}
} }
...@@ -6,6 +6,8 @@ import cn.freemud.base.log.ErrorLog; ...@@ -6,6 +6,8 @@ import cn.freemud.base.log.ErrorLog;
import cn.freemud.base.util.DateUtil; import cn.freemud.base.util.DateUtil;
import cn.freemud.constant.RedisKeyConstant; import cn.freemud.constant.RedisKeyConstant;
import cn.freemud.constant.ResponseCodeConstant; import cn.freemud.constant.ResponseCodeConstant;
import cn.freemud.entities.bo.CheckSvcAmountBo;
import cn.freemud.entities.bo.CheckSvcAmountResponse;
import cn.freemud.entities.dto.SvcComPayRequestDto; import cn.freemud.entities.dto.SvcComPayRequestDto;
import cn.freemud.entities.dto.SvcComPayResponseDto; import cn.freemud.entities.dto.SvcComPayResponseDto;
import cn.freemud.entities.dto.order.CreatePrepayRequestDto; import cn.freemud.entities.dto.order.CreatePrepayRequestDto;
...@@ -1341,10 +1343,6 @@ public class PayServiceImpl { ...@@ -1341,10 +1343,6 @@ public class PayServiceImpl {
if (!Objects.equals(checkParam.getCode(), "100")) { if (!Objects.equals(checkParam.getCode(), "100")) {
return checkParam; return checkParam;
} else { } else {
// String receiveJsonStr = this.setPayValueFromSDKByManager(refundRequest.getPartnerId(), refundRequest.getStoreId(), refundRequest.getRefundAmount() + vipAmount, vipAmount, wxAppStore.getIndirectId(), false);
// if (!StringUtils.isEmpty(receiveJsonStr)) {
// request.setAccountDivided(receiveJsonStr);
// }
com.freemud.application.sdk.api.base.BaseResponse<PayRefundData> refundNewResponse = null; com.freemud.application.sdk.api.base.BaseResponse<PayRefundData> refundNewResponse = null;
try { try {
refundNewResponse = omsPaymentClient.payRefund(request); refundNewResponse = omsPaymentClient.payRefund(request);
...@@ -1393,15 +1391,6 @@ public class PayServiceImpl { ...@@ -1393,15 +1391,6 @@ public class PayServiceImpl {
} }
} }
// private String setPayValueFromSDKByManager(String partnerId, String storeId, Long totalAmount, Long vipAmount, Long indirectId, boolean isPay) {
// if (indirectId == null) {
// return null;
// } else {
// AssortmentOpenPlatformPartnerMerchant openPlatformPartnerMerchant = openPlatformPartnerMerchantManager.selectMerchantDetail(indirectId);
// List<ReceiverBiz> dtoReceivers = this.calcReceiverNew(openPlatformPartnerMerchant, partnerId, storeId, totalAmount, vipAmount, isPay);
// return this.convertOrderPayRequestToReceivers(dtoReceivers);
// }
// }
public com.freemud.application.sdk.api.base.BaseResponse<OrderRefundResponse> checkParam(String partnerId, String storeId, Long amount, AssortmentOpenPlatformIappWxappStore wxAppStore) { public com.freemud.application.sdk.api.base.BaseResponse<OrderRefundResponse> checkParam(String partnerId, String storeId, Long amount, AssortmentOpenPlatformIappWxappStore wxAppStore) {
if (StringUtils.isBlank(partnerId)) { if (StringUtils.isBlank(partnerId)) {
...@@ -1415,97 +1404,55 @@ public class PayServiceImpl { ...@@ -1415,97 +1404,55 @@ public class PayServiceImpl {
} }
} }
/** /**
* 新获取分账信息逻辑 * 校验五单收银 储值卡余额,返回储值支付金额与现金支付金额
*
* @param openPlatformPartnerMerchant 收单方
* @param partnerId
* @param storeId
* @param totalAmount
* @return
*/ */
// public List<ReceiverBiz> calcReceiverNew(AssortmentOpenPlatformPartnerMerchant openPlatformPartnerMerchant, String partnerId, String storeId, Long totalAmount, Long vipAmount, boolean isPay) { public CheckSvcAmountResponse checkSvcAmount(CheckSvcAmountBo checkSvcAmountBo) {
// String platform = openPlatformPartnerMerchant != null ? openPlatformPartnerMerchant.getPlatform() : "";
// if (!PlatformType.YI_BAO_PAYMENT.getCode().equals(platform) && !PlatformType.YF_PAYMENT.getCode().equals(platform)) {
// return null;
// }
// AssortmentOpenPlatformPartnerMerchantAccountManager openPlatformPartnerMerchantAccountManager = ApplicationBeanManager.getBean(AssortmentOpenPlatformPartnerMerchantAccountManager.class);
// Long orderAmount;
// List<ReceiverBiz> result = Lists.newArrayList();
// List<AssortmentOpenPlatformPartnerMerchantAccount> openPlatformPartnerMerchantAccounts;
// if (vipAmount == null || vipAmount == 0L) {
// // 不走会员分账
// openPlatformPartnerMerchantAccounts = openPlatformPartnerMerchantAccountManager.selectByRuleId(partnerId, storeId, PayRuleIdEnum.DEFAULT.getCode());
// orderAmount = totalAmount;
// } else {
// // 走会员分账
// openPlatformPartnerMerchantAccounts = vipSubAccount(partnerId, storeId, vipAmount, platform, openPlatformPartnerMerchantAccountManager, result, isPay);
// orderAmount = totalAmount - vipAmount;
// }
// ReceiverService receiverService = ApplicationBeanManager.getBean(platform, ReceiverService.class);
// if (receiverService == null) {
// return null;
// }
// List<ReceiverBiz> list = receiverService.getReceivers(openPlatformPartnerMerchant, openPlatformPartnerMerchantAccounts, orderAmount, isPay);
// result.addAll(list);
// return result;
// }
/** CheckSvcAmountResponse checkSvcAmountResponse = new CheckSvcAmountResponse();
* 易宝会员分账计算
*
* @param partnerId
* @param storeId
* @param vipAmount
* @param platform
* @param openPlatformPartnerMerchantAccountManager
* @param result
* @return
*/
// private List<AssortmentOpenPlatformPartnerMerchantAccount> vipSubAccount(String partnerId, String storeId, Long vipAmount, String platform, AssortmentOpenPlatformPartnerMerchantAccountManager openPlatformPartnerMerchantAccountManager
// , List<ReceiverBiz> result, boolean isPay) {
// // 退款不需要计算会员分账
// if (!PlatformType.YI_BAO_PAYMENT.getCode().equals(platform)) {
// return Collections.emptyList();
// }
// // 查询固定金额得分账记录
// List<AssortmentOpenPlatformPartnerMerchantAccount> openPlatformPartnerMerchantAccounts = null;
// List<AssortmentOpenPlatformPartnerMerchantAccount> payRates = openPlatformPartnerMerchantAccountManager.selectPayRate(partnerId, storeId, vipAmount + "", PayRuleTypeEnum.FIXED_AMOUNT.getCode());
// if (CollectionUtils.isNotEmpty(payRates)) {
// AssortmentOpenPlatformPartnerMerchantAccount account = payRates.get(0);
// if (isPay) {
// ReceiverBiz receiver = new ReceiverBiz();
// receiver.setAccount(account.getAccountCard());
// //传整数,直接去除小数点后面的数字
// receiver.setPrice(vipAmount);
// receiver.setName(account.getAccountName());
// result.add(receiver);
// }
// List<AssortmentOpenPlatformPartnerMerchantAccount> subAccounts = openPlatformPartnerMerchantAccountManager.selectByRuleId(partnerId, storeId, account.getRuleId());
// // 剔除固定金额
// openPlatformPartnerMerchantAccounts = subAccounts.stream().filter(a -> Objects.equals(a.getRuleType(), PayRuleTypeEnum.FIXED_PROPORTION.getCode())).collect(Collectors.toList());
// }
// return openPlatformPartnerMerchantAccounts;
// }
String partnerId = checkSvcAmountBo.getPartnerId();
String storeId = checkSvcAmountBo.getStoreCode();
String cardCode = checkSvcAmountBo.getCardCode();
Long orderAmount = checkSvcAmountBo.getOrderAmount();
// public String convertOrderPayRequestToReceivers(List<ReceiverBiz> receiverBizs) { //混合支付开关
// if (CollectionUtils.isEmpty(receiverBizs)) { boolean combPaySwitch = this.checkSvcComPay(partnerId, storeId);
// return null;
// } SVCCardAmountRequestDto svcRequest = new SVCCardAmountRequestDto();
// //分账 svcRequest.setPartnerId(partnerId);
// List<ReceiverBiz> receivers = receiverBizs; svcRequest.setCardCodes(Arrays.asList(cardCode));
// List<AccountDivideVo> divideVos = new ArrayList<>(); //查询svc卡余额
// for (ReceiverBiz receiver : receivers) { BaseResponse<SVCCardAmountResponseDto> svcCardAmountResponseBaseResponse = svcAppClient.batchQueryCardAmount(svcRequest);
// AccountDivideVo divideVo = new AccountDivideVo(); if (svcCardAmountResponseBaseResponse == null || !ResponseCodeConstant.RESPONSE_SUCCESS_STR.equals(svcCardAmountResponseBaseResponse.getCode())
// divideVo.setLedgerNo(receiver.getAccount()); || svcCardAmountResponseBaseResponse.getResult() == null || CollectionUtils.isEmpty(svcCardAmountResponseBaseResponse.getResult().getCardSimpleInfos())) {
// divideVo.setLedgerName(receiver.getName()); checkSvcAmountResponse.setMsg(Objects.isNull(svcCardAmountResponseBaseResponse) ? "获取卡余额异常" : svcCardAmountResponseBaseResponse.getMessage());
// Double amount = receiver.getPrice() / 100d; return checkSvcAmountResponse;
// divideVo.setAmount(amount + ""); }
// divideVos.add(divideVo); Integer amount = svcCardAmountResponseBaseResponse.getResult().getCardSimpleInfos().get(0).getAmount();
// } Integer vamount = svcCardAmountResponseBaseResponse.getResult().getCardSimpleInfos().get(0).getVamount();
// return JSONObject.toJSONString(divideVos);
// } Integer svcAmount = amount + vamount;
if (!combPaySwitch && svcAmount < orderAmount) {
checkSvcAmountResponse.setMsg("卡余额不足");
return checkSvcAmountResponse;
}
//储值卡支付金额(分)
Long svcPayAmount;
//微信或支付宝 支付金额(分)
Long payAmount;
if (svcAmount < orderAmount) {
svcPayAmount = svcAmount.longValue();
payAmount = orderAmount - svcAmount.longValue();
} else {
svcPayAmount = orderAmount;
payAmount = 0L;
}
checkSvcAmountResponse.setSvcPayAmount(svcPayAmount);
checkSvcAmountResponse.setPayAmount(payAmount);
return checkSvcAmountResponse;
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment