Commit b44dc9a9 by yu.sun

Merge branch 'qa' of gitlab.freemud.com:order-group-application/order-group into qa

parents cc39db83 a3cf374e
......@@ -144,3 +144,4 @@
| 2.0.16.RELEASE | 麦咖啡问题修复 | 徐康 | 2020-11-09 |
| 2.1.2.RELEASE | 活动扣减库存 | 缪晖 | 2020-11-11 |
| 2.1.3-RELEASE | 退款增加自动退款配置的null判断 | 刘鹏飞 | 2020-11-12 |
| 2.1.4-RELEASE | 退款增加自动退款配置的null判断 | 刘鹏飞 | 2020-11-12 |
\ No newline at end of file
......@@ -1174,6 +1174,8 @@ public class OrderSdkAdapter {
if (CollectionUtils.isNotEmpty(orderInfoReqs.getOrderPayItemCreateReqList())) {
data.setOrderPayItem(this.getOrderItemPayList(orderInfoReqs.getOrderPayItemCreateReqList()));
}
data.setPayChannelType(orderInfoReqs.getPayChannelType());
//data.setOrderPayItemCreateReqList(orderInfoReqs.getOrderPayItemCreateReqList());
return data;
}
......@@ -1624,6 +1626,9 @@ public class OrderSdkAdapter {
activityUpdateStockRequest.setPartnerCode(orderBean.getCompanyId());
activityUpdateStockRequest.setStoreId(orderBean.getShopId());
activityUpdateStockRequest.setVer("1");
// add by miaohui 20201030 for 【ID1018638】【C端服务端】活动库存接口调整对接
activityUpdateStockRequest.setUserId(orderBean.getUserId());
activityUpdateStockRequest.setOrderCreateTime(DateUtil.getCurrentDate(DateUtil.FORMAT_yyyyMMdd_date));
return activityUpdateStockRequest;
}
......
......@@ -15,14 +15,14 @@ public class MultiOrderRefundResponse<T> {
private String msg;
private T data;
private RefundPlatform data;
@lombok.Data
public class Data {
@Data
public class RefundPlatform {
public List<RefundPlatformResponse> refundPlatformResponseList;
}
@lombok.Data
@Data
public static class RefundPlatformResponse{
private String endTransTradeNo;
private String fmRefundNo;
......@@ -39,6 +39,6 @@ public class MultiOrderRefundResponse<T> {
private Integer settleRefundAmount;
private Integer totalAmount;
private String transId;
private String ebCode;
private String ebcode;
}
}
\ No newline at end of file
......@@ -12,6 +12,7 @@
*/
package com.freemud.sdk.api.assortment.order.response.order;
import com.freemud.application.sdk.api.ordercenter.response.OrderPayItemResp;
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.AfterSalesOrderResp;
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderCostResp;
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderInvoice;
......@@ -413,6 +414,9 @@ public class QueryOrdersResponse {
/**
* 混合支付list
*/
//订单支付详情
private List<OrderPayItemResp> orderPayItemCreateReqList;
private List<OrderPayItem> orderPayItem;
@NoArgsConstructor
......
......@@ -88,7 +88,7 @@
<dependency>
<groupId>com.freemud.application.service.sdk</groupId>
<artifactId>storecenter-sdk</artifactId>
<version>3.1.9.RELEASE</version>
<version>3.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>cn.freemud</groupId>
......
......@@ -185,7 +185,7 @@ public class DeliveryAdapter {
if (CollectionUtils.isNotEmpty(order.getProductList())) {
order.getProductList().forEach(productList -> {
ProductInfo deliveryProductInfo = new ProductInfo();
deliveryProductInfo.setProductCode(productList.getProductId());
deliveryProductInfo.setProductCode(productList.getProductId().substring(4));
String productName = StringUtils.isBlank(productList.getSpecificationName()) ? productList.getProductName() : productList.getSpecificationName();
OrderProductAddInfoDto extInfo = JSON.parseObject(productList.getExtInfo(), OrderProductAddInfoDto.class);
if(CollectionUtils.isNotEmpty(extInfo.getSpecialAttrs())) {
......@@ -221,7 +221,7 @@ public class DeliveryAdapter {
if(CollectionUtils.isNotEmpty(productList.getComboProduct())) {
productList.getComboProduct().forEach(comboProduct -> {
ProductInfo deliveryComboProductInfo = new ProductInfo();
deliveryComboProductInfo.setProductCode(comboProduct.getProductId());
deliveryComboProductInfo.setProductCode(comboProduct.getProductId().substring(4));
String productNameCombo = StringUtils.isBlank(comboProduct.getSpecificationName()) ? comboProduct.getProductName() : comboProduct.getSpecificationName();
OrderProductAddInfoDto extInfoCombo = JSON.parseObject(comboProduct.getExtInfo(), OrderProductAddInfoDto.class);
if(CollectionUtils.isNotEmpty(extInfoCombo.getSpecialAttrs())) {
......@@ -251,7 +251,7 @@ public class DeliveryAdapter {
deliveryComboProductInfo.setTaxId(StringUtils.isNotEmpty(orderComboProductAddInfoDto.getTaxId()) ? orderComboProductAddInfoDto.getTaxId() : "10");
deliveryComboProductInfo.setTaxRate(orderComboProductAddInfoDto.getTax() > 0 ? orderComboProductAddInfoDto.getTax() : 6);
deliveryComboProductInfo.setParentCode(Long.valueOf(comboProduct.getParentProductId().replace("_", "")));
deliveryComboProductInfo.setParentCode(Long.valueOf(comboProduct.getParentProductId().replace("_", "").substring(4)));
deliveryProductInfo.setProductCode(deliveryComboProductInfo.getParentCode()+"");
if(CollectionUtils.isNotEmpty(comboProduct.getMaterialProduct())) {
......
......@@ -88,6 +88,7 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.awt.geom.Point2D;
import java.io.*;
import java.math.BigDecimal;
import java.security.NoSuchAlgorithmException;
import java.security.spec.InvalidKeySpecException;
......@@ -189,6 +190,7 @@ public class OrderAdapter {
}
}
createOrderDto.setProducts(products);
boolean hasDeliveryMonthCard = false;
for (ActivityDiscountsDto activityDiscountsDto : activityDiscountsDtos) {
CreateOrderAccountRequest createOrderAccountDto = CreateOrderAccountRequest.builder()
.accountId(activityDiscountsDto.getActivityCode())
......@@ -205,6 +207,9 @@ public class OrderAdapter {
jsonObject.put("tenderId", activityDiscountsDto.getTenderId());
} else if(ActivityTypeEnum.TYPE_34.getCode().equals(activityDiscountsDto.getActivityType())) {
jsonObject.put("customerCode", activityDiscountsDto.getTenderId());
if(null != activityDiscountsDto.getExtendType() && activityDiscountsDto.getExtendType() == 2) {
hasDeliveryMonthCard = true;
}
}
if(null != activityDiscountsDto.getExtendType()) {
jsonObject.put("extendType", activityDiscountsDto.getExtendType());
......@@ -223,6 +228,9 @@ public class OrderAdapter {
.sequence(orderAccountIndex++)
.actualPrice(discountDeliveryAmount)
.build();
if(hasDeliveryMonthCard && StringUtils.isNotBlank(storeResponseDto.getBenefitCardDiscountAmount())) {
createOrderAccountDto.setActualPrice(Long.valueOf(storeResponseDto.getBenefitCardDiscountAmount()) * 100l);
}
orderAccountDtos.add(createOrderAccountDto);
}
if (packageAmount > 0) {
......@@ -613,12 +621,27 @@ public class OrderAdapter {
createOrderDto.setLongitude(longitude);
createOrderDto.setOrderType(convent2OrderTypeEnum(orderType));
createOrderDto.setPayType(QueryPayType.ONLINE_PAY);
//电子风味卡
if (Objects.nonNull(createOrderVo.getUnionPayCard())) {
createOrderDto.setPayChannel(PayChannel.USVCP.getCode());
createOrderDto.setPayChannelName(PayChannel.USVCP.getDesc());
} else if(StringUtils.isNotBlank(createOrderVo.getCardCode())){
createOrderDto.setPayChannel("10102");
createOrderDto.setPayChannelName("储值卡支付");
createOrderDto.setPayChannel(PayChannelType.USVCP.getEbcode());
createOrderDto.setPayChannelName(PayChannelType.USVCP.getName());
}
//混合支付
else if (PayChannelType.COMB.getIndex().equals(createOrderVo.getPayChannelType())) {
createOrderDto.setPayChannel(PayChannelType.COMB.getEbcode());
createOrderDto.setPayChannelName(PayChannelType.COMB.getName());
}
else if (PayChannelType.WECHAT.getIndex().equals(createOrderVo.getPayChannelType())) {
createOrderDto.setPayChannel(PayChannelType.WECHAT.getEbcode());
createOrderDto.setPayChannelName(PayChannelType.WECHAT.getName());
}
else if (PayChannelType.ALIPAY.getIndex().equals(createOrderVo.getPayChannelType())) {
createOrderDto.setPayChannel(PayChannelType.ALIPAY.getEbcode());
createOrderDto.setPayChannelName(PayChannelType.ALIPAY.getName());
}
else if(StringUtils.isNotBlank(createOrderVo.getCardCode())){
createOrderDto.setPayChannel(PayChannelType.SVC.getEbcode());
createOrderDto.setPayChannelName(PayChannelType.SVC.getName());
}
createOrderDto.setSource(OrderSourceType.SAAS.getCode());
createOrderDto.setSourceName(OrderSourceType.SAAS.getDesc());
......@@ -1120,6 +1143,10 @@ public class OrderAdapter {
responseVo.setPayStatusDesc(Optional.ofNullable(PayStatus.getByCode(ordersBean.getPayStatus()))
.map(PayStatus::getDesc).orElse(""));
responseVo.setPayVoucher(orderExtInfoDto != null ? orderExtInfoDto.getPayTransId() : "");
if(mcCafePartnerId.equals(ordersBean.getCompanyId())) {
responseVo.setPayVoucherBarCode(Base64.getEncoder().encodeToString(
BarcodeUtil.generateBarCode128(responseVo.getPayVoucher(),null,null, true, true)));
}
responseVo.setPayCreateTime(orderExtInfoDto != null ? orderExtInfoDto.getPayDate() : "");
responseVo.setPayChannel(ordersBean.getPayChannel());
if (StringUtils.isNotBlank(ordersBean.getPayChannel())) {
......@@ -1541,7 +1568,7 @@ public class OrderAdapter {
public OrderViewStatusDto getOrderViewStatusDesc(QueryOrdersResponse.DataBean.OrderBean orderBean, String wxAppId) {
OrderViewStatusDto orderViewStatusDto = new OrderViewStatusDto();
LogUtil.info("getOrderStatusDesc start ", new Gson().toJson(orderBean), new Gson().toJson(orderBean));
LogUtil.info("getOrderStatusDesc start ", JSON.toJSONString(orderBean),"");
QueryOrdersResponse.DataBean.OrderBean.RefundBean refundBean = null;
if (CollectionUtils.isNotEmpty(orderBean.getRefundList())) {
refundBean = orderBean.getRefundList().get(0);
......@@ -2151,6 +2178,7 @@ public class OrderAdapter {
multiQueryRequest.setNotifyUrl(refundNotifyCallback);
multiQueryRequest.setVer("V1");
multiQueryRequest.setVer3(false);
multiQueryRequest.setOutOrderNo(orderBean.getOid());
return multiQueryRequest;
}
......
......@@ -203,6 +203,10 @@ public class QueryOrderResponseVo {
*/
private String payVoucher;
/**
* 付款单号条形码
*/
private String payVoucherBarCode;
/**
* 退款状态 enum refundStatus
*/
private Integer refundStatus;
......
......@@ -54,12 +54,14 @@ import com.freemud.application.sdk.api.storecenter.response.StoreResponse;
import com.freemud.application.sdk.api.storecenter.service.StoreCenterService;
import com.google.common.collect.Lists;
import com.google.gson.Gson;
import lombok.extern.log4j.Log4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import sun.rmi.runtime.Log;
import java.awt.geom.Point2D;
import java.math.BigDecimal;
......@@ -69,6 +71,7 @@ import java.util.*;
import java.util.stream.Collectors;
@Component
@Log4j
public class CheckOrder {
// 配送费逻辑是否使用旧的
......@@ -748,17 +751,20 @@ public class CheckOrder {
if (StringUtils.isBlank(createOrderVo.getCardCode())) {
return false;
}
//这么不合规的粗暴搞法 设置支付方式
PayChannelType payType = PayChannelType.getByIndex(Byte.parseByte(createOrderVo.getChannel()));
createOrderVo.setPayChannelType(payType.getIndex());
SVCCardAmountRequest request = new SVCCardAmountRequest();
request.setPartnerId(createOrderVo.getPartnerId());
request.setCardCodes(Arrays.asList(createOrderVo.getCardCode()));
BaseResponse<SVCCardAmountResponse> svcCardAmount = paymentNewService.querySVCCardAmount(request, trackingNo);
if (svcCardAmount==null || svcCardAmount.getData()==null ||!ResponseResult.SUCCESS.getCode().equals(svcCardAmount.getCode())) {
throw new ServiceException(ResponseResult.USER_SVC_CARD_ERROR);
}
Integer svcAmount = 0 ;
Integer svcVAmount = 0 ;
Long totalVAmount = shoppingCartGoodsDto.getTotalAmount();
Long totalVAmount = shoppingCartGoodsDto.getTotalAmount() +shoppingCartGoodsDto.getPackageAmount();
if (svcCardAmount.getData().getData().getCardSimpleInfos().size()>0) {
svcAmount = svcCardAmount.getData().getData().getCardSimpleInfos().get(0).getAmount();
svcVAmount = svcCardAmount.getData().getData().getCardSimpleInfos().get(0).getVamount();
......
......@@ -187,7 +187,21 @@ public class OrderAdapterServiceImpl implements OrderAdapterService {
if(ObjectUtils.notEqual(baseResponse.getCode(),ResponseResult.SUCCESS.getCode())){
return baseResponse;
}
// 添加分布式锁,如果没有取得锁直接返回失败;整个方法执行完毕后会删掉该锁
// 锁定秒数从apollo获取,如果apollo没有设置,默认5秒
String createOrderKey = CREATE_ORDER_KEY + assortmentCustomerInfoVo.getMemberId();
try {
Long expire = Long.valueOf(createOrderKeyExpire);
if(!LockUtils.lock(redisCache.getRedisTemplate(),createOrderKey,expire)){
return ResponseUtil.error(ResponseResult.ORDER_NOT_CREATE_ERROR);
}
return mcCafeOrderService.createMCCafeOrder(createOrderVo);
} catch (Exception e) {
throw e;
} finally {
//LockUtils.unlock(redisCache.getRedisTemplate(),createOrderKey);
}
}
@Override
......
......@@ -1709,12 +1709,12 @@ public class OrderServiceImpl implements Orderservice {
if(orderBean.getPayChannelType().equalsIgnoreCase("4")){
//调用支付退款
MultiOrderRefundRequest multiOrderRefundRequest = orderAdapter.getMultiOrderPayRefundRequest(orderBean, refundId);
MultiOrderRefundResponse<MultiOrderRefundResponse.Data> multiOrderRefundResponse = mulitiPaymentClient.paymentApplicationRefund(multiOrderRefundRequest,orderBean.getCompanyId());
MultiOrderRefundResponse multiOrderRefundResponse = mulitiPaymentClient.paymentApplicationRefund(multiOrderRefundRequest,orderBean.getCompanyId());
if (multiOrderRefundResponse == null || multiOrderRefundResponse.getData() == null || !com.freemud.sdk.api.assortment.order.domain.ResponseCodeConstant.ORDER_PAY_RESPONSE_SUCCESS.equals(multiOrderRefundResponse.getCode())) {
return ResponseUtil.error(ResponseResult.ORDER__ERRORREFUND.getCode(), "orderRefund_failed");
}
List<MultiOrderRefundResponse.RefundPlatformResponse> refundPlatformResponseList = multiOrderRefundResponse.getData().getRefundPlatformResponseList();
refundPlatformResponseList = refundPlatformResponseList.stream().filter(m -> !m.getEbCode().equalsIgnoreCase("4")).collect(Collectors.toList());
List<MultiOrderRefundResponse.RefundPlatformResponse> refundPlatformResponseList = multiOrderRefundResponse.getData().refundPlatformResponseList;
refundPlatformResponseList = refundPlatformResponseList.stream().filter(m -> !m.getEbcode().equalsIgnoreCase("10102")).collect(Collectors.toList());
if(null != refundPlatformResponseList && refundPlatformResponseList.size()>0){
redisCache.save(RedisUtil.getPaymentTransIdSequenceKey(refundPlatformResponseList.get(0).getTransId()),orderBean.getOid(),1L,TimeUnit.DAYS);
}
......@@ -2445,6 +2445,31 @@ public class OrderServiceImpl implements Orderservice {
return ResponseUtil.error(ResponseResultEnum.PAY_UNIFIED_ORDER_ERROR.getCode(), ResponseResultEnum.PAY_UNIFIED_ORDER_ERROR.getMessage(), null);
}
/**
* 混合预支付
* @param trackingNo
* @param orderBean
* @param cardCode
* @param orderClient
* @param msg
* @return
*/
private BaseResponse failCombPreOrderPay(String trackingNo, QueryOrdersResponse.DataBean.OrderBean orderBean, String cardCode, OrderClientType orderClient, String msg) {
List<OrderClientType> notCancelOrderClientList = Lists.newArrayList(OrderClientType.APP);
if(!notCancelOrderClientList.contains(orderClient)) {
//失败冲正库存,冲正活动库存,取消订单
CancelOrderRequest cancelOrderRequest = orderAdapter.convent2CancelOrderRequest(orderBean.getOid(), orderBean.getCompanyId(),
AfterSalesType.SYSTEM_CANCEL, StringUtils.join(new String[]{"获取预支付失败", msg}, '-'), trackingNo, null);
orderCenterSdkService.orderCancel(cancelOrderRequest);
// TODO: 2019/9/10 hubowen mq推送变更
backOrdersStatusChange(orderBean.getOid(), orderBean.getStatus());
}
//svc 卡支付失败
//if (StringUtils.isNotBlank(cardCode)) {
// return ResponseUtil.error(ResponseResultEnum.PAY_BACKEND_CONFIG_ERROR.getCode(), ResponseResultEnum.PAY_BACKEND_CONFIG_ERROR.getMessage(), null);
//}
return ResponseUtil.error(ResponseResultEnum.PAY_UNIFIED_ORDER_ERROR.getCode(),"获取混合预支付信息失败", null);
}
public OrderPayResponse getPreOrderPay(QueryOrdersResponse.DataBean.OrderBean orderBean, PaymentRequest paymentRequest, String trackingNo, Integer cardAmount, String transId, String partnerPayOvertime, OrderExtInfoDto orderExtInfoDto) {
try {
UnifiedOrderRequest request = orderAdapter.convent2UnifiedOrderRequest(orderBean, paymentRequest, orderBean.getAmount(), cardAmount, transId, partnerPayOvertime);
......@@ -2472,6 +2497,7 @@ public class OrderServiceImpl implements Orderservice {
public OrderPayResponse svcPay(String cardCode, QueryOrdersResponse.DataBean.OrderBean orderBean, PaymentRequest paymentRequest, String transId, String trackingNo) {
CodePayRequest request = new CodePayRequest();
OrderPayResponse orderPayResponse = new OrderPayResponse();
String partnerId = orderBean.getCompanyId();
request.setBody(orderBean.getShopName());
request.setBusinessDate(DateUtil.convert2String(new Date(), DateUtil.FORMAT_YYYY_MM_DD_HHMMSS));
......@@ -2487,22 +2513,25 @@ public class OrderServiceImpl implements Orderservice {
svcRequest.setPartnerId(partnerId);
svcRequest.setCardCodes(Arrays.asList(cardCode));
//查询svc卡余额
log.info("svc支付:{}",transId);
com.freemud.application.sdk.api.base.BaseResponse<SVCCardAmountResponse> svcCardAmountResponseBaseResponse = paymentNewService.querySVCCardAmount(svcRequest, trackingNo);
if (svcCardAmountResponseBaseResponse == null || !ResponseCodeConstant.RESPONSE_SUCCESS_STR.equals(svcCardAmountResponseBaseResponse.getCode())
|| svcCardAmountResponseBaseResponse.getData().getData() == null || CollectionUtils.isEmpty(svcCardAmountResponseBaseResponse.getData().getData().getCardSimpleInfos())) {
return null;
orderPayResponse.setMsg(Objects.isNull(svcCardAmountResponseBaseResponse) ? "获取svc卡余额异常" : svcCardAmountResponseBaseResponse.getMessage());
return orderPayResponse;
}
Integer amount = svcCardAmountResponseBaseResponse.getData().getData().getCardSimpleInfos().get(0).getAmount();
Integer vamount = svcCardAmountResponseBaseResponse.getData().getData().getCardSimpleInfos().get(0).getVamount();
if (amount + vamount < orderBean.getAmount()) {
return null;
orderPayResponse.setMsg("svc卡余额不足");
return orderPayResponse;
}
//svc卡支付
com.freemud.application.sdk.api.base.BaseResponse<CodePayResponse> responseBase = paymentNewService.codePay(request, trackingNo);
if (responseBase == null || !ResponseCodeConstant.RESPONSE_SUCCESS_STR.equals(responseBase.getCode()) || responseBase.getData().getData() == null) {
return null;
}
OrderPayResponse orderPayResponse = new OrderPayResponse();
// 1.9.34 预支付失败需要把原因进行记录
orderPayResponse.setMsg(Objects.isNull(responseBase) ? "svc卡支付异常" : responseBase.getMessage());
} else {
CodePayResponse.CodePayDate codePayResponse = responseBase.getData().getData();
orderPayResponse.setFmId(codePayResponse.getFmId());
orderPayResponse.setPayTransId(codePayResponse.getPayTransId());
......@@ -2510,6 +2539,7 @@ public class OrderServiceImpl implements Orderservice {
orderPayResponse.setOpenId(paymentRequest.getOpenId());
orderPayResponse.setPartnerId(orderBean.getCompanyId());
orderPayResponse.setOrderId(orderBean.getOid());
}
return orderPayResponse;
}
......@@ -3175,7 +3205,8 @@ public class OrderServiceImpl implements Orderservice {
orderPayResponse = comPayOrder(paymentRequest,createPrepayRequestDto,partnerPayOvertime,LogThreadLocal.getTrackingNo());
if (orderPayResponse == null || Objects.isNull(orderPayResponse.getFmId())) {
return failPreOrderPay(LogThreadLocal.getTrackingNo()
log.info("混合支付返回:{}",JSON.toJSONString(orderPayResponse));
return failCombPreOrderPay(LogThreadLocal.getTrackingNo()
, createPrepayRequestDto.getProductOrderBean()
, cardCode
, createPrepayRequestDto.getOrderClient()
......@@ -3229,6 +3260,7 @@ public class OrderServiceImpl implements Orderservice {
CombPayResponse responseBase = null;
CombPayRequest combPayRequest = null;
CombPayResponse.PayPlatform payPlatform = null;
log.info("混合支付...");
try {
String orderClient = this.getPayCodeByChanel(createPrepayRequestDto);
if (StringUtils.isBlank(orderClient)) {
......@@ -3244,6 +3276,7 @@ public class OrderServiceImpl implements Orderservice {
orderPayResponse.setMsg(responseBase.getMsg());
}
else {
log.info("混合支付请求request:{},response:{}",JSON.toJSONString(combPayRequest),JSON.toJSONString(responseBase));
/**
* 生成预支付参数
*/
......@@ -3263,7 +3296,7 @@ public class OrderServiceImpl implements Orderservice {
orderPayResponse.setOrderId(createPrepayRequestDto.getTransId());
//隐射关系
redisCache.save(RedisUtil.getPaymentTransIdSequenceKey(payPlatform.getTransId()),createPrepayRequestDto.getTransId(),1L,TimeUnit.DAYS);
redisCache.save(RedisUtil.getPaymentTransIdOrderKey(payPlatform.getTransId()),createPrepayRequestDto.getTransId(),1L,TimeUnit.DAYS);
//加入轮训队列
putDelMq(createPrepayRequestDto.getPartnerId()
, createPrepayRequestDto.getStoreId()
......@@ -3275,6 +3308,7 @@ public class OrderServiceImpl implements Orderservice {
}
}
catch (Exception e) {
log.info("混合支付异常...");
//TODO 邮件告警
LogUtil.error("comPay_error", JSONObject.toJSONString(responseBase), JSONObject.toJSONString(paymentRequest), e);
orderPayResponse = new OrderPayResponse();
......
package cn.freemud.service.impl;
import cn.freemud.management.entities.dto.request.order.OrderManagerRequest;
import cn.freemud.management.service.adapter.OrderManagerAdapter;
import cn.freemud.management.thirdparty.MulitiPaymentClient;
import com.alibaba.fastjson.JSON;
import com.freemud.application.sdk.api.ordercenter.request.OrderConditionsReq;
import com.freemud.application.sdk.api.ordercenter.service.OrderDownLoadSdkService;
import com.freemud.sdk.api.assortment.order.request.order.MultiOrderRefundRequest;
import com.freemud.sdk.api.assortment.order.response.order.MultiOrderRefundResponse;
import cn.freemud.entities.dto.shoppingCart.ShoppingCartGoodsDto;
......@@ -20,6 +25,7 @@ import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.feign.EnableFeignClients;
import org.springframework.test.context.junit4.SpringRunner;
import springfox.documentation.spring.web.json.Json;
@RunWith(SpringRunner.class)
@SpringBootTest
......@@ -29,17 +35,28 @@ import org.springframework.test.context.junit4.SpringRunner;
public class MallOrderServiceImplTest {
@Autowired
private MallOrderServiceImpl mallOrderService;
private OrderDownLoadSdkService orderDownLoadSdkService;
// @Autowired
// private MallOrderServiceImpl mallOrderService;
//
@Autowired
private MCCafeOrderServiceImpl mcCafeOrderService;
//
// @Autowired
// private MulitiPaymentClient mulitiPaymentClient;
//
// @Autowired
// private OrderManagerAdapter orderManagerAdapter;
@Autowired
private MulitiPaymentClient mulitiPaymentClient;
@Autowired
private OrderServiceImpl orderService;
@Autowired
private OrderManagerAdapter orderManagerAdapter;
// @Before
// public void before() throws Exception {
// }
......@@ -84,20 +101,28 @@ public class MallOrderServiceImplTest {
@Test
public void test() {
MultiOrderRefundRequest multiOrderRefundRequest = new MultiOrderRefundRequest();
multiOrderRefundRequest.setFmId("");
multiOrderRefundRequest.setVer3(false);
multiOrderRefundRequest.setVer("V1");
multiOrderRefundRequest.setNotifyUrl("http://open-store-order-application-service.open-store.svc:9212/order/refundNotifyCallback");
multiOrderRefundRequest.setOperatorId("1");
multiOrderRefundRequest.setPartnerId("1864");
multiOrderRefundRequest.setRefundAmount(1L);
multiOrderRefundRequest.setRefundTradeNo("1604886134387{{$timestamp}}");
multiOrderRefundRequest.setStationId("1");
multiOrderRefundRequest.setStoreId("999999998");
multiOrderRefundRequest.setOutOrderNo("3900472893821604933666");
MultiOrderRefundResponse<MultiOrderRefundResponse.Data> multiOrderRefundResponseDto = mulitiPaymentClient.paymentApplicationRefund(multiOrderRefundRequest,"1864");
System.out.println(2345678);
// MultiOrderRefundRequest multiOrderRefundRequest = new MultiOrderRefundRequest();
// multiOrderRefundRequest.setFmId("");
// multiOrderRefundRequest.setVer3(false);
// multiOrderRefundRequest.setVer("V1");
// multiOrderRefundRequest.setNotifyUrl("http://open-store-order-application-service.open-store.svc:9212/order/refundNotifyCallback");
// multiOrderRefundRequest.setOperatorId("1");
// multiOrderRefundRequest.setPartnerId("1864");
// multiOrderRefundRequest.setRefundAmount(1L);
// multiOrderRefundRequest.setRefundTradeNo("1604886134387{{$timestamp}}");
// multiOrderRefundRequest.setStationId("1");
// multiOrderRefundRequest.setStoreId("999999998");
// multiOrderRefundRequest.setOutOrderNo("3900472893821604933666");
// MultiOrderRefundResponse<MultiOrderRefundResponse.Data> multiOrderRefundResponseDto = mulitiPaymentClient.paymentApplicationRefund(multiOrderRefundRequest,"1864");
// System.out.println(2345678);
// OrderManagerRequest orderManagerRequest = new OrderManagerRequest();
// orderManagerRequest.setOrderId("19404015572678969200003");
// orderManagerRequest.setPartnerId("1864");
// orderManagerAdapter.orderAgreeRefund(orderManagerRequest);
OrderConditionsReq request ;
String str = "{\"abnormalStatuses\":[],\"afterSalesStatus\":0,\"appId\":\"\",\"bizType\":0,\"bizTypes\":[1,6,97,98],\"dispenseStatus\":0,\"endTimestamp\":1605542399,\"endUpdateTimestamp\":0,\"expressType\":0,\"externalObjectIds\":[],\"finishStatus\":false,\"isDeleted\":0,\"mobile\":\"\",\"orderClients\":[],\"orderCode\":\"19356550932276285500005\",\"orderCodes\":[],\"orderStatus\":0,\"orderStatuses\":[],\"orderTypes\":[],\"pageNum\":1,\"pageSize\":10,\"partnerId\":\"2655\",\"payStatuses\":[2,3,4],\"payTypes\":[],\"printNum\":0,\"productId\":\"\",\"productName\":\"\",\"settlementTypes\":[],\"startTimestamp\":1604160000,\"startUpdateTimestamp\":0,\"storeIds\":[],\"suspendState\":0,\"thirdOrderCode\":\"\",\"userId\":\"\",\"userName\":\"\"}";
request = JSON.toJavaObject(JSON.parseObject(str),OrderConditionsReq.class);
orderDownLoadSdkService.queryOrderByConditions(request,"");
}
......
......@@ -55,6 +55,7 @@ public class PaymentSdkAdapter {
multiQueryRequest.setNotifyUrl(refundNotifyCallback);
multiQueryRequest.setVer("V1");
multiQueryRequest.setVer3(false);
multiQueryRequest.setOutOrderNo(orderBean.getOid());
return multiQueryRequest;
}
......
......@@ -122,7 +122,12 @@ public class OrderManagerAdapter {
//查询订单
QueryOrdersResponse.DataBean.OrderBean orderBean = orderBaseService.getByOrderCode(request.getOrderId());
//订单接单参数校验
BaseResponse verifyResponse = orderVerifyHandle.orderRejectVerify(orderBean, request);
BaseResponse verifyResponse;
if (!macCafePartnerId.equals(orderBean.getCompanyId())) {
verifyResponse = orderVerifyHandle.orderRejectVerify(orderBean, request);
} else {
verifyResponse = orderVerifyHandle.mcCafeOrderRejectVerify(orderBean, request);
}
if (ObjectUtils.notEqual(verifyResponse.getCode(), ResponseResult.SUCCESS.getCode())) {
return handleResponse(request,orderBean,verifyResponse);
}
......
......@@ -212,6 +212,40 @@ public class OrderVerifyHandle {
if (OrderStatus.COMPLETE.getCode().equals(status)) {
return ResponseUtil.error(ResponseResult.REJECT_FAIL_ORDER_IS_COMPLETE, getOrderManagerResponse(orderBean));
}
if (!OrderStatus.TAKE_ORDER.getCode().equals(status)) {
return ResponseUtil.error(ResponseResult.REJECT_FAIL_ORDER_IS_NOT_NEW, getOrderManagerResponse(orderBean));
}
return ResponseUtil.success();
}
/**
* 拒单
*
* @param orderBean
* @param request
* @return
*/
public BaseResponse mcCafeOrderRejectVerify(QueryOrdersResponse.DataBean.OrderBean orderBean, OrderManagerRequest request) {
if (orderBean == null) {
return ResponseUtil.error(ResponseResult.ORDER_NOT_EXIST);
}
Integer status = orderBean.getStatus();
//判断订单是否已经被拒单
if (OrderStatus.REFUSE.getCode().equals(status)) {
return ResponseUtil.error(ResponseResult.REJECT_FAIL_REPETITION, getOrderManagerResponse(orderBean));
}
//判断订单是否已经取消
if (OrderStatus.CANCEL.getCode().equals(status)) {
return ResponseUtil.error(ResponseResult.ORDER_HAS_CANCELED, getOrderManagerResponse(orderBean));
}
//判断订单是否在配送中
if (OrderStatus.DISTRIBUTION.getCode().equals(status)) {
return ResponseUtil.error(ResponseResult.REJECT_FAIL_ORDER_IS_DELIVERY, getOrderManagerResponse(orderBean));
}
//判断订单是否已送达
if (OrderStatus.COMPLETE.getCode().equals(status)) {
return ResponseUtil.error(ResponseResult.REJECT_FAIL_ORDER_IS_COMPLETE, getOrderManagerResponse(orderBean));
}
if (!OrderStatus.TAKE_ORDER.getCode().equals(status) && !OldOrderType.TAKE_OUT.getCode().equals(orderBean.getOrderType())) {
return ResponseUtil.error(ResponseResult.REJECT_FAIL_ORDER_IS_NOT_NEW, getOrderManagerResponse(orderBean));
}
......
......@@ -145,12 +145,12 @@ public class PaymentHandle {
public PayRefundResponse multiRefund(QueryOrdersResponse.DataBean.OrderBean orderBean){
PayRefundStatus refundStatus=PayRefundStatus.SUCCESS;
MultiOrderRefundRequest multiOrderRefundRequest = paymentSdkAdapter.getMultiOrderPayRefundRequest(orderBean);
MultiOrderRefundResponse<MultiOrderRefundResponse.Data> multiOrderRefundResponse = mulitiPaymentClient.paymentApplicationRefund(multiOrderRefundRequest,orderBean.getCompanyId());
MultiOrderRefundResponse multiOrderRefundResponse = mulitiPaymentClient.paymentApplicationRefund(multiOrderRefundRequest,orderBean.getCompanyId());
if (multiOrderRefundResponse == null || multiOrderRefundResponse.getData() == null || !com.freemud.sdk.api.assortment.order.domain.ResponseCodeConstant.ORDER_PAY_RESPONSE_SUCCESS.equals(multiOrderRefundResponse.getCode())) {
throw new OrderServiceException(ResponseResult.REFUND_EXCEPTION);
}
List<MultiOrderRefundResponse.RefundPlatformResponse> refundPlatformResponseList = multiOrderRefundResponse.getData().getRefundPlatformResponseList();
refundPlatformResponseList = refundPlatformResponseList.stream().filter(m -> !m.getEbCode().equalsIgnoreCase("4")).collect(Collectors.toList());
List<MultiOrderRefundResponse.RefundPlatformResponse> refundPlatformResponseList = multiOrderRefundResponse.getData().refundPlatformResponseList;
refundPlatformResponseList = refundPlatformResponseList.stream().filter(m -> !m.getEbcode().equalsIgnoreCase("10102")).collect(Collectors.toList());
if(null != refundPlatformResponseList && refundPlatformResponseList.size()>0){
redisCache.save(RedisUtil.getPaymentTransIdSequenceKey(refundPlatformResponseList.get(0).getTransId()),orderBean.getOid(),1L,TimeUnit.DAYS);
}
......
......@@ -128,7 +128,11 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService {
//支付退款
PayRefundResponse refundResponse = new PayRefundResponse();
try {
if(orderBean.getPayChannelType().equalsIgnoreCase("4")){
refundResponse = paymentHandle.multiRefund(orderBean);
}else{
refundResponse = paymentHandle.refund(request, orderBean);
}
} catch (OrderServiceException orderEx){ // 爱马哥兼容,不抛错
return ResponseUtil.error(orderEx.getResult());
}
......@@ -158,11 +162,10 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService {
//支付退款
PayRefundResponse refundResponse = new PayRefundResponse();
try {
if(orderBean.getPayChannelType() != "4"){
refundResponse = paymentHandle.refund(request, orderBean);
}else{
if(orderBean.getPayChannelType().equalsIgnoreCase("4")){
refundResponse = paymentHandle.multiRefund(orderBean);
}else{
refundResponse = paymentHandle.refund(request, orderBean);
}
} catch (OrderServiceException orderEx){ // 爱马哥兼容,不抛错
return ResponseUtil.error(orderEx.getResult());
......
package com.freemud.application.sdk.api.ordercenter.response;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class OrderPayItemResp {
private Long id;
private Long orderId;
private String orderCode;
private String partnerId;
private String storeId;
private String payChannelType;
private String payChannelName;
private String operator;
private BigDecimal payAmount;
private String transId;
private String fmTradeNo;
private String outOrderNo;
private String platformTradeNo;
private String endTransTradeNo;
}
\ No newline at end of file
......@@ -13,6 +13,8 @@
package com.freemud.application.sdk.api.ordercenter.response.orderInfo;
import com.freemud.application.sdk.api.ordercenter.request.OrderExtendedReq;
import com.freemud.application.sdk.api.ordercenter.request.OrderTraceInfoResp;
import com.freemud.application.sdk.api.ordercenter.response.OrderPayItemResp;
import lombok.Data;
import java.math.BigDecimal;
......
......@@ -181,8 +181,12 @@ public class CalculationServiceImpl {
shoppingCartGoodsDto.setTotalDiscountAmount(shoppingCartGoodsResponseVo.getTotalDiscountAmount());
//随单购 月卡价格
shoppingCartGoodsDto.setPayCardFee(shoppingCartGoodsResponseVo.getPayCardFee());
// long buyThreeGiveOneCouponFee = calculationDiscountResult.getDiscounts().stream().filter(t -> t.getExtendType() == 7).mapToLong(apportionGoods -> apportionGoods.getCardAmount()).sum();
shoppingCartGoodsDto.setBuyThreeGiveOneCouponFee(0L);
if (calculationDiscountResult != null ) {
if (CollectionUtils.isNotEmpty(calculationDiscountResult.getDiscounts())) {
long buyThreeGiveOneCouponFee = calculationDiscountResult.getDiscounts().stream().filter(t -> t.getExtendType() == 7).mapToLong(apportionGoods -> apportionGoods.getCardAmount()).sum();
shoppingCartGoodsDto.setBuyThreeGiveOneCouponFee(buyThreeGiveOneCouponFee);
}
}
shoppingCartGoodsDto.setDeliveryAmount(shoppingCartGoodsResponseVo.getDeliveryAmount());
shoppingCartGoodsDto.setDiscountDeliveryAmount(shoppingCartGoodsResponseVo.getDiscountDeliveryAmount());
shoppingCartGoodsDto.setThresholdAmount(shoppingCartGoodsResponseVo.getThresholdAmount());
......
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