Commit ec7f7737 by ping.wu

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

parent 1ab2de56
......@@ -536,5 +536,16 @@ public class OrderController {
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 {
private Long orderAmount;
/**
* 储值卡卡号
*/
private String cardCode;
/**
* 小程序版本号
*/
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 {
private Long orderAmount;
/**
* 储值卡卡号
*/
@ApiModelProperty("储值卡卡号")
private String cardCode;
/**
* 小程序版本号
*/
@ApiModelProperty("小程序版本号")
......
......@@ -4,6 +4,7 @@ import cn.freemud.entities.dto.ConfirmOrderDto;
import cn.freemud.entities.dto.order.CreateCashierOrderDto;
import cn.freemud.entities.vo.CreateOrderResponseVo;
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.application.sdk.api.ordercenter.entities.v1.OrderBeanV1;
......@@ -35,4 +36,12 @@ public interface CashierOrderService {
* @return 处理结果json字符串
*/
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;
import cn.freemud.adapter.LightApplicationConvertToAssortmentSdkAdapter;
import cn.freemud.base.util.DateUtil;
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.StoreResponseDto;
import cn.freemud.entities.dto.order.CreateCashierOrderDto;
......@@ -10,6 +12,7 @@ import cn.freemud.entities.dto.order.CreatePrepayRequestDto;
import cn.freemud.entities.dto.store.StoreMixResponseDto;
import cn.freemud.entities.vo.CreateOrderResponseVo;
import cn.freemud.entities.vo.PaysuccessNoticeMessage;
import cn.freemud.entities.vo.order.CashierCheckResponseVo;
import cn.freemud.enums.OrderBeanType;
import cn.freemud.enums.ResponseResult;
import cn.freemud.enums.UserLoginChannelEnum;
......@@ -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.orderInfo.OrderInfoReqs;
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.google.common.collect.Maps;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
......@@ -91,6 +94,7 @@ public class CashierOrderServiceImpl implements CashierOrderService {
createPrepayRequestDto.setOpenId(member.getOpenId());
createPrepayRequestDto.setTotalAmount(createOrderDto.getOrderAmount());
createPrepayRequestDto.setChannel(Objects.requireNonNull(PayChannelType.getByIndex(request.getPayChannelType())).getEbcode());
createPrepayRequestDto.setCardCode(createOrderDto.getCardCode());
OrderBeanV1 orderBeanV1 = orderCenterSdkAdapter.convent2NEWOrderInfo(response.getResult());
createPrepayRequestDto.setProductOrderBean(orderBeanV1);
createPrepayRequestDto.setFatherOrderBean(orderBeanV1);
......@@ -190,4 +194,18 @@ public class CashierOrderServiceImpl implements CashierOrderService {
map.put("message", "success");
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;
import cn.freemud.entities.dto.ConfirmOrderDto;
import cn.freemud.entities.dto.order.CreateCashierOrderDto;
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.PlugInParameter;
import cn.freemud.enums.*;
......@@ -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;
import cn.freemud.base.util.DateUtil;
import cn.freemud.constant.RedisKeyConstant;
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.SvcComPayResponseDto;
import cn.freemud.entities.dto.order.CreatePrepayRequestDto;
......@@ -1341,10 +1343,6 @@ public class PayServiceImpl {
if (!Objects.equals(checkParam.getCode(), "100")) {
return checkParam;
} 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;
try {
refundNewResponse = omsPaymentClient.payRefund(request);
......@@ -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) {
if (StringUtils.isBlank(partnerId)) {
......@@ -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) {
// 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;
// }
public CheckSvcAmountResponse checkSvcAmount(CheckSvcAmountBo checkSvcAmountBo) {
/**
* 易宝会员分账计算
*
* @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;
// }
CheckSvcAmountResponse checkSvcAmountResponse = new CheckSvcAmountResponse();
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)) {
// return null;
// }
// //分账
// List<ReceiverBiz> receivers = receiverBizs;
// List<AccountDivideVo> divideVos = new ArrayList<>();
// for (ReceiverBiz receiver : receivers) {
// AccountDivideVo divideVo = new AccountDivideVo();
// divideVo.setLedgerNo(receiver.getAccount());
// divideVo.setLedgerName(receiver.getName());
// Double amount = receiver.getPrice() / 100d;
// divideVo.setAmount(amount + "");
// divideVos.add(divideVo);
// }
// return JSONObject.toJSONString(divideVos);
// }
//混合支付开关
boolean combPaySwitch = this.checkSvcComPay(partnerId, storeId);
SVCCardAmountRequestDto svcRequest = new SVCCardAmountRequestDto();
svcRequest.setPartnerId(partnerId);
svcRequest.setCardCodes(Arrays.asList(cardCode));
//查询svc卡余额
BaseResponse<SVCCardAmountResponseDto> svcCardAmountResponseBaseResponse = svcAppClient.batchQueryCardAmount(svcRequest);
if (svcCardAmountResponseBaseResponse == null || !ResponseCodeConstant.RESPONSE_SUCCESS_STR.equals(svcCardAmountResponseBaseResponse.getCode())
|| svcCardAmountResponseBaseResponse.getResult() == null || CollectionUtils.isEmpty(svcCardAmountResponseBaseResponse.getResult().getCardSimpleInfos())) {
checkSvcAmountResponse.setMsg(Objects.isNull(svcCardAmountResponseBaseResponse) ? "获取卡余额异常" : svcCardAmountResponseBaseResponse.getMessage());
return checkSvcAmountResponse;
}
Integer amount = svcCardAmountResponseBaseResponse.getResult().getCardSimpleInfos().get(0).getAmount();
Integer vamount = svcCardAmountResponseBaseResponse.getResult().getCardSimpleInfos().get(0).getVamount();
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