Commit c4f76a21 by ping.wu

Merge branches 'develop' and 'feature/20220622_退款失败记录到订单_wuping' of…

Merge branches 'develop' and 'feature/20220622_退款失败记录到订单_wuping' of http://gitlab.freemud.com/order-group-application/order-group into develop

# Conflicts:
#	order-application-service/src/main/java/cn/freemud/service/impl/OrderAdapterServiceImpl.java
#	order-application-service/src/main/java/cn/freemud/service/impl/PayServiceImpl.java
parents 2e715e53 49c5bb31
......@@ -12,6 +12,10 @@
*/
package com.freemud.sdk.api.assortment.order.enums;
import java.util.Arrays;
import java.util.List;
/**
* 请勿使用已过期请用OldOrderAccountType 龚爱奇2019-05-19
*/
......@@ -44,19 +48,20 @@ public enum QueryOrderAccountType {
FULL_DISTRIBUTION_FEE("FULL_DISTRIBUTION_FEE", "满减配送费"),
OFFLINE_PAY("OFFLINE_PAY", "线下支付"),
GATHER_SPOT("GATHER_SPOT", "集点活动"),
MEMBER_PRICE_DISCOUNT("MEMBER_PRICE_DISCOUNT","会员价优惠"),
MCCAFE_MONTH_CARD("MCCAFE_MONTH_CARD","麦咖啡月卡"),
MEMBER_PRICE_DISCOUNT("MEMBER_PRICE_DISCOUNT", "会员价优惠"),
MCCAFE_MONTH_CARD("MCCAFE_MONTH_CARD", "麦咖啡月卡"),
WITH_ORDER_BUY_COUPON_FEE("WITH_ORDER_BUY_COUPON_FEE", "随单买月卡"),
COCO_PRODUCT_CASH_COUPON("COCO_PRODUCT_CASH_COUPON", "coco商品代金券"),
FULL_BUYM_SENDN("FULL_BUYM_SENDN", "满赠"),
FULL_M_COUNT_N_FOLD("FULL_M_COUNT_N_FOLD", "满M件N折"),
SCORE_PRODUCT_ACTIVITY("SCORE_PRODUCT_ACTIVITY", "积分商品活动"),
SINGLE_PRODUCT_REDUCTION("SINGLE_PRODUCT_REDUCTION", "单品立减")
;
SINGLE_PRODUCT_REDUCTION("SINGLE_PRODUCT_REDUCTION", "单品立减");
private String code;
private String desc;
public static List<QueryOrderAccountType> useCouponList = Arrays.asList(COUPON, B3S1_COUPON, FREIGHT_COUPON, PRODUCT_COUPON, DISCOUNT_COUPON);
QueryOrderAccountType(String code, String desc) {
this.code = code;
this.desc = desc;
......
......@@ -666,7 +666,7 @@ public class OrderAdapter {
orderClients = Arrays.asList(OrderClientType.TIKTOKPAY.getIndex());
bizTypes.add(BizTypeEnum.SALE_COUPON.getBizType());
} else {
orderClients = Arrays.asList(OrderClientType.SAAS.getIndex(), OrderClientType.ALIPAY.getIndex(), OrderClientType.APP.getIndex());
orderClients = Arrays.asList(OrderClientType.SAAS.getIndex(), OrderClientType.ALIPAY.getIndex(), OrderClientType.APP.getIndex(), OrderClientType.ASSISTANT.getIndex());
bizTypes = Arrays.asList(BizTypeEnum.ORDINARY.getBizType(), BizTypeEnum.SALE_COUPON.getBizType(), BizTypeEnum.ADVANCE_ORDER.getBizType());
queryOrdersDto.setMarketingTypes(Arrays.asList(MarketTypeEnum.ORDER.getIndex(), MarketTypeEnum.COLLAGE.getIndex(),
MarketTypeEnum.WE_CHAT_LIVE_SELL.getIndex(),MarketTypeEnum.CASHIER.getIndex(),MarketTypeEnum.TIKTOK_MARKET_ORDER.getIndex()));
......@@ -2036,7 +2036,7 @@ public class OrderAdapter {
String attr = "";
String attrEng = "";
for (OrderSpecialExtraAttrRequest special : extInfo.getSpecialAttrs()) {
if (special.getAttributeName().indexOf("冰") >= 0) {
if (Objects.nonNull(special.getAttributeName()) && special.getAttributeName().indexOf("冰") >= 0) {
attr = special.getAttributeName();
attrEng = special.getAttributeForeignName();
break;
......
......@@ -55,7 +55,8 @@ public class DeliveryController {
@ApiOperation(value = "麦咖啡配送回调", notes = "麦咖啡配送回调", produces = "application/json")
@PostMapping("/delivery/macCafeCallback")
public BaseResponse macCafeCallback(@Valid @LogParams @RequestBody MacCafeCallbackUrlRequestDto request) {
return deliveryService.macCafeCallbackUrl(request);
// return deliveryService.macCafeCallbackUrl(request);
return new BaseResponse("1","101");
}
@ApiAnnotation(logMessage = "商城配送回调")
@ApiOperation(value = "商城配送回调", notes = "商城配送回调", produces = "application/json")
......
package cn.freemud.entities.dto.blacklist;
import lombok.Data;
/**
* @author : xh.Z
* @email : fisherman0510@163.com
* @Date : 2022/5/27 13:40
* @description :
*/
@Data
public class BlacklistDto {
/**
* 商户号
*/
private String partnerId;
/**
* 用户id
*/
private String memberId;
/**
* 是否使用用户积分
* 1=不显示积分
* 2=显示积分但不扣减
* 3=显示积分且扣减
* 消费黑名单用户 不管是否满足 都不能使用积分消费
*/
private Integer useCustomerScore;
/**
* 当前这一笔订单需要消费的金额
*/
private Long amount;
private boolean useCoupon = false;
}
package cn.freemud.entities.dto.blacklist;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @author : xh.Z
* @email : fisherman0510@163.com
* @Date : 2022/5/27 15:06
* @description : 返回前端提示数据
*/
@Data
public class OrderBlacklistResp {
@ApiModelProperty(value = "客服电话")
private String moblie;
@ApiModelProperty(value = "金额限制(单位:分)")
private Long surplusAmount;
}
package cn.freemud.entities.dto.blacklist;
import lombok.Data;
import java.util.Objects;
/**
* @author : xh.Z
* @email : fisherman0510@163.com
* @Date : 2022/5/27 14:49
* @description :
*/
@Data
public class Result<T> {
private boolean status = false;
private String message;
private T result;
private String statusCode;
public boolean isOk() {
return Objects.equals(statusCode, "200");
}
}
package cn.freemud.entities.dto.blacklist.req;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.hibernate.validator.constraints.Range;
import javax.validation.constraints.NotBlank;
/**
* @author : xh.Z
* @email : fisherman0510@163.com
* @Date : 2022/5/27 14:34
* @description :
*/
@Data
public class BlackListQueryByClient {
/**
* 0储值卡黑名单
*/
public static final int RECORD_TYPE_SVC = 0;
/**
* 1消费黑名单
*/
public static final int RECORD_TYPE_CUSTOMER = 1;
@ApiModelProperty(value = "商户id")
@NotBlank(message = "商户id不能为空")
private String partnerId;
@ApiModelProperty("会员id")
private String memberId;
@ApiModelProperty("添加的黑名单类型 0储值卡黑名单 1消费黑名单")
@Range(min = 0, max = 1, message = "添加的黑名单类型 0储值卡黑名单 1消费黑名单")
private Integer recordType;
}
package cn.freemud.entities.dto.blacklist.resp;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @author : xh.Z
* @email : fisherman0510@163.com
* @Date : 2022/5/27 14:35
* @description :
*/
@Data
public class MemberBlacklistVO {
/**
* 是否存在黑名单中
*/
private boolean exist;
// ---------> 消费黑名单才有下面的配置
@ApiModelProperty(value = "客服电话")
private String moblie;
@ApiModelProperty(value = "金额限制(单位:分)")
private Long limitAmount;
@ApiModelProperty(value = "已经消费的累积金额(单位:分)")
private Long shoppingTotalAmount;
}
......@@ -195,6 +195,7 @@ public enum ResponseResult {
ORDER_BIZ_TYPE_ERROR("45086", "订单业务类型异常",""),
COUPON_ORDER_VERIFY_FAIL("45087","买券订单校验异常",""),
COUPON_ORDER_COMMON_VERIFY_FAIL("45088","卖券订单基础校验失败",""),
TOUCH_SHOPPING_BLACK_LIST("45089","触发消费黑名单",""),
/**
* 售后单
......
package cn.freemud.handler;
import cn.freemud.constant.CustomerScoreConstant;
import cn.freemud.entities.dto.blacklist.BlacklistDto;
import cn.freemud.entities.dto.blacklist.Result;
import cn.freemud.entities.dto.blacklist.req.BlackListQueryByClient;
import cn.freemud.entities.dto.blacklist.resp.MemberBlacklistVO;
import cn.freemud.service.thirdparty.DataCenterClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.util.Objects;
/**
* @author : xh.Z
* @email : fisherman0510@163.com
* @Date : 2022/5/27 11:59
* @description :
*/
@Component
public class MemberBlacklistHandler {
@Autowired
private DataCenterClient dataCenterClient;
/**
* 查询用户是否在黑名单中
*
* @param blacklistDto
*/
public String checkisTrueBlacklist(BlacklistDto blacklistDto) {
//step1 查询是否存在
BlackListQueryByClient req = new BlackListQueryByClient();
req.setPartnerId(blacklistDto.getPartnerId());
req.setMemberId(blacklistDto.getMemberId());
// 默认只查询消费黑名单
req.setRecordType(BlackListQueryByClient.RECORD_TYPE_CUSTOMER);
Result<MemberBlacklistVO> memberBlacklistVOResult = dataCenterClient.queryByMemberId(req);
if (!memberBlacklistVOResult.isOk()) {
return null;
}
MemberBlacklistVO result = memberBlacklistVOResult.getResult();
if (!result.isExist()) {
return null;
}
StringBuilder sb = new StringBuilder();
// 消费黑名单用户 不可使用积分支付
if (Objects.nonNull(blacklistDto.getUseCustomerScore()) && blacklistDto.getUseCustomerScore().compareTo(CustomerScoreConstant.SUBSTRACT.getValue()) == 0) {
sb.append("您已列入消费黑名单暂不可使用积分");
return sb.toString();
}
// 黑名单用户 不可使用优惠券
if (blacklistDto.isUseCoupon()) {
sb.append("您已列入消费黑名单暂不可使用优惠券");
return sb.toString();
}
//step2 存在校验剩余余额
Long limitAmount = result.getLimitAmount();
Long shoppingTotalAmount = result.getShoppingTotalAmount();
if (limitAmount.compareTo(shoppingTotalAmount + blacklistDto.getAmount()) >= 0) {
// 满足
return null;
}
// step3 余额不足组装前端参数 考虑负数默认0
long surplusAmount = limitAmount - shoppingTotalAmount;
// OrderBlacklistResp orderBlacklistResp = new OrderBlacklistResp();
// orderBlacklistResp.setMoblie(result.getMoblie());
// orderBlacklistResp.setSurplusAmount(surplusAmount < 0 ? 0L : surplusAmount);
// return orderBlacklistResp;
// 您的消费额度还有3元,暂无法支付,如有疑问,详询客服热线4008899096
BigDecimal amount = new BigDecimal(Math.max(surplusAmount, 0L)).divide(new BigDecimal("100"), 2, BigDecimal.ROUND_DOWN);
if (amount.compareTo(BigDecimal.ZERO) <= 0) {
sb.append("您的消费金额额度已用完,暂无法支付,如有疑问,详询客服热线").append(result.getMoblie());
} else {
sb.append("您的消费额度还有")
.append(amount)
.append("元,暂无法支付,如有疑问,详询客服热线")
.append(result.getMoblie());
}
return sb.toString();
}
}
......@@ -20,7 +20,7 @@ public interface ThirdDeliveryService {
/**
* 配送回调
*/
BaseResponse macCafeCallbackUrl(MacCafeCallbackUrlRequestDto request);
// BaseResponse macCafeCallbackUrl(MacCafeCallbackUrlRequestDto request);
/**
......
......@@ -212,76 +212,76 @@ public class ThirdDeliveryServiceImpl implements ThirdDeliveryService {
*
* @param request
*/
@Override
public BaseResponse macCafeCallbackUrl(MacCafeCallbackUrlRequestDto request) {
OrderManagerRequest orderManagerRequest = new OrderManagerRequest();
orderManagerRequest.setPartnerId(request.getPartnerId());
orderManagerRequest.setOrderId(request.getOrderId());
if ("1".equals(request.getCancelApplicant())) {
orderManagerRequest.setReason(StringUtils.isNotBlank(request.getCancelReason()) ? request.getCancelReason() : "餐道主动取消");
} else {
orderManagerRequest.setReason(null);
}
orderManagerRequest.setOperator("配送回调");
Integer reviewStatus = request.getReviewStatus();
int deliveryStatus = request.getDeliveryStatus();
if (reviewStatus != null && reviewStatus.equals(DeliveryReviewStatus.AGREE.getCode())) {
orderManagerRequest.setOperateType(OperateType.ORDER_AGREE_REFUND.getOpType());
orderManagerRequest.setReason("配送回调-同意退款");
return orderManagerAdapter.orderPayRefund(orderManagerRequest);
}
if (reviewStatus != null && reviewStatus.equals(DeliveryReviewStatus.REJECT.getCode())) {
orderManagerRequest.setOperateType(OperateType.ORDER_REJECT_REFUND.getOpType());
orderManagerRequest.setReason("配送回调-拒绝退款");
return orderManagerAdapter.mcCafeOrderRejectRefund(orderManagerRequest);
}
if (deliveryStatus == DeliveryStatus.RIDERGETMEAL.getCode() || deliveryStatus == DeliveryStatus.RIDERSTARTDELIVERY.getCode()) {
orderManagerRequest.setOperateType(OperateType.ORDER_SEND.getOpType());
BaseResponse<OrderManagerResponse> baseResponse = orderManagerAdapter.orderDelivery(orderManagerRequest);
if (ResponseConstant.SUCCESS_RESPONSE_CODE_STR.equals(baseResponse.getCode())) {
updateDeliveryStatus(request);
}
sendMcCafeMicroMessage(request.getPartnerId(), request.getOrderId(), request.getDeliveryStatus());
return baseResponse;
} else if (deliveryStatus == DeliveryStatus.DELIVERYARRIVED.getCode()) {
orderManagerRequest.setOperateType(OperateType.ORDER_AFFIRM.getOpType());
BaseResponse<OrderManagerResponse> baseResponse = orderManagerAdapter.orderAffirm(orderManagerRequest, null);
if (ResponseConstant.SUCCESS_RESPONSE_CODE_STR.equals(baseResponse.getCode())) {
updateDeliveryStatus(request);
}
sendMcCafeMicroMessage(request.getPartnerId(), request.getOrderId(), request.getDeliveryStatus());
return baseResponse;
} else if (deliveryStatus == DeliveryStatus.WATINGORDER.getCode() || deliveryStatus == DeliveryStatus.SYSTEMGETORDER.getCode()
|| deliveryStatus == DeliveryStatus.ALLOTRIDER.getCode() || deliveryStatus == DeliveryStatus.RIDERARRIVESTORE.getCode()) {
updateDeliveryStatus(request);
return ResponseUtil.success();
} else if (deliveryStatus == DeliveryStatus.COLLECTING.getCode()) {
//推送订单到拉单队列
OrderCollectReq orderCollectReq = new OrderCollectReq();
orderCollectReq.setOrderCode(request.getOrderId());
orderCollectReq.setPartnerId(request.getPartnerId());
OrderBaseResp baseResponse = orderSdkService.collectOrder(orderCollectReq, LogThreadLocal.getTrackingNo());
if (ResponseConstant.SUCCESS_RESPONSE_CODE_STR.equals(baseResponse.getCode())) {
ResponseUtil.error(ResponseResult.ORDER_COLLECT_FAILED);
}
//回调成功,记录汇集状态
updateDeliveryStatus(request);
return ResponseUtil.success();
} else if (deliveryStatus == DeliveryStatus.DELIVERYERROR.getCode()) {
AssortmentUpdateDeliveryAbnormalRequest assortmentUpdateDeliveryAbnormalRequest = AssortmentUpdateDeliveryAbnormalRequest.builder()
.abnormalDesc(request.getRemark())
.deliveryId(request.getDeliveryId())
.orderCode(request.getOrderId())
.partnerId(request.getPartnerId())
.operator("餐道")
.build();
orderCenterSdkService.updateDeliveryAbnormal(assortmentUpdateDeliveryAbnormalRequest);
return ResponseUtil.success();
}
return ResponseUtil.error(ResponseResult.ORDER_DELIVERY_CALL_BACK_FAILED);
}
// @Override
// public BaseResponse macCafeCallbackUrl(MacCafeCallbackUrlRequestDto request) {
// OrderManagerRequest orderManagerRequest = new OrderManagerRequest();
// orderManagerRequest.setPartnerId(request.getPartnerId());
// orderManagerRequest.setOrderId(request.getOrderId());
// if ("1".equals(request.getCancelApplicant())) {
// orderManagerRequest.setReason(StringUtils.isNotBlank(request.getCancelReason()) ? request.getCancelReason() : "餐道主动取消");
// } else {
// orderManagerRequest.setReason(null);
// }
// orderManagerRequest.setOperator("配送回调");
//
//
// Integer reviewStatus = request.getReviewStatus();
// int deliveryStatus = request.getDeliveryStatus();
// if (reviewStatus != null && reviewStatus.equals(DeliveryReviewStatus.AGREE.getCode())) {
// orderManagerRequest.setOperateType(OperateType.ORDER_AGREE_REFUND.getOpType());
// orderManagerRequest.setReason("配送回调-同意退款");
// return orderManagerAdapter.orderPayRefund(orderManagerRequest);
// }
// if (reviewStatus != null && reviewStatus.equals(DeliveryReviewStatus.REJECT.getCode())) {
// orderManagerRequest.setOperateType(OperateType.ORDER_REJECT_REFUND.getOpType());
// orderManagerRequest.setReason("配送回调-拒绝退款");
// return orderManagerAdapter.mcCafeOrderRejectRefund(orderManagerRequest);
// }
// if (deliveryStatus == DeliveryStatus.RIDERGETMEAL.getCode() || deliveryStatus == DeliveryStatus.RIDERSTARTDELIVERY.getCode()) {
// orderManagerRequest.setOperateType(OperateType.ORDER_SEND.getOpType());
// BaseResponse<OrderManagerResponse> baseResponse = orderManagerAdapter.orderDelivery(orderManagerRequest);
// if (ResponseConstant.SUCCESS_RESPONSE_CODE_STR.equals(baseResponse.getCode())) {
// updateDeliveryStatus(request);
// }
// sendMcCafeMicroMessage(request.getPartnerId(), request.getOrderId(), request.getDeliveryStatus());
// return baseResponse;
// } else if (deliveryStatus == DeliveryStatus.DELIVERYARRIVED.getCode()) {
// orderManagerRequest.setOperateType(OperateType.ORDER_AFFIRM.getOpType());
// BaseResponse<OrderManagerResponse> baseResponse = orderManagerAdapter.orderAffirm(orderManagerRequest, null);
// if (ResponseConstant.SUCCESS_RESPONSE_CODE_STR.equals(baseResponse.getCode())) {
// updateDeliveryStatus(request);
// }
// sendMcCafeMicroMessage(request.getPartnerId(), request.getOrderId(), request.getDeliveryStatus());
// return baseResponse;
// } else if (deliveryStatus == DeliveryStatus.WATINGORDER.getCode() || deliveryStatus == DeliveryStatus.SYSTEMGETORDER.getCode()
// || deliveryStatus == DeliveryStatus.ALLOTRIDER.getCode() || deliveryStatus == DeliveryStatus.RIDERARRIVESTORE.getCode()) {
// updateDeliveryStatus(request);
// return ResponseUtil.success();
// } else if (deliveryStatus == DeliveryStatus.COLLECTING.getCode()) {
// //推送订单到拉单队列
// OrderCollectReq orderCollectReq = new OrderCollectReq();
// orderCollectReq.setOrderCode(request.getOrderId());
// orderCollectReq.setPartnerId(request.getPartnerId());
// OrderBaseResp baseResponse = orderSdkService.collectOrder(orderCollectReq, LogThreadLocal.getTrackingNo());
// if (ResponseConstant.SUCCESS_RESPONSE_CODE_STR.equals(baseResponse.getCode())) {
// ResponseUtil.error(ResponseResult.ORDER_COLLECT_FAILED);
// }
// //回调成功,记录汇集状态
// updateDeliveryStatus(request);
// return ResponseUtil.success();
// } else if (deliveryStatus == DeliveryStatus.DELIVERYERROR.getCode()) {
// AssortmentUpdateDeliveryAbnormalRequest assortmentUpdateDeliveryAbnormalRequest = AssortmentUpdateDeliveryAbnormalRequest.builder()
// .abnormalDesc(request.getRemark())
// .deliveryId(request.getDeliveryId())
// .orderCode(request.getOrderId())
// .partnerId(request.getPartnerId())
// .operator("餐道")
// .build();
// orderCenterSdkService.updateDeliveryAbnormal(assortmentUpdateDeliveryAbnormalRequest);
// return ResponseUtil.success();
// }
// return ResponseUtil.error(ResponseResult.ORDER_DELIVERY_CALL_BACK_FAILED);
// }
private OrderBaseResponse updateDeliveryStatus(MacCafeCallbackUrlRequestDto request) {
UpdateDeliveryInfoByIdRequest updateDeliveryInfoByIdRequest = new UpdateDeliveryInfoByIdRequest();
......
......@@ -1329,7 +1329,7 @@ public class MCCafeOrderServiceImpl implements MCCafeOrderService {
extendParams.put("mealType", "pickup");
}
orderPayRefundRequest.setExtendParams(extendParams);
response = payService.orderRefund(orderPayRefundRequest);
// response = payService.orderRefund(orderPayRefundRequest);
if (response == null || response.getData() == null || !com.freemud.sdk.api.assortment.order.domain.ResponseCodeConstant.RESPONSE_SUCCESS_STR.equals(response.getCode())) {
return ResponseUtil.error(ResponseResult.ORDER__ERRORREFUND.getCode(), "orderRefund_failed");
}
......
......@@ -9,6 +9,7 @@ import cn.freemud.constant.RedisKeyConstant;
import cn.freemud.constant.ResponseCodeConstant;
import cn.freemud.entities.bo.CreateOrderBONew;
import cn.freemud.entities.dto.*;
import cn.freemud.entities.dto.blacklist.BlacklistDto;
import cn.freemud.entities.dto.ecology.VirtualBindStoreResponse;
import cn.freemud.entities.dto.ecology.VirtualStoreRequest;
import cn.freemud.entities.dto.order.CreateOrderOperateDto;
......@@ -24,9 +25,12 @@ import cn.freemud.entities.dto.wechat.GetAuthorizerRequestDto;
import cn.freemud.entities.dto.wechat.GetTokenResponseDto;
import cn.freemud.entities.vo.*;
import cn.freemud.enums.*;
import cn.freemud.handler.MemberBlacklistHandler;
import cn.freemud.interceptor.ServiceException;
import cn.freemud.management.entities.dto.request.order.OrderManagerRequest;
import cn.freemud.management.entities.dto.request.pay.PayRefundRequestDto;
import cn.freemud.management.entities.dto.response.pay.OrderRefundResponse;
import cn.freemud.management.entities.dto.response.pay.PayRefundResponse;
import cn.freemud.manager.SpellGroupOrderDataManager;
import cn.freemud.redis.RedisCache;
import cn.freemud.service.BuriedPointService;
......@@ -63,6 +67,7 @@ import com.freemud.application.sdk.api.ordercenter.response.orderInfo.AfterSales
import com.freemud.application.sdk.api.ordercenter.service.OrderSdkService;
import com.freemud.application.sdk.api.storecenter.response.StoreResponse;
import com.freemud.sdk.api.assortment.order.adapter.OrderSdkAdapter;
import com.freemud.sdk.api.assortment.order.enums.QueryOrderAccountType;
import com.freemud.sdk.api.assortment.order.request.order.*;
import com.freemud.sdk.api.assortment.order.response.order.BaseOrderResponse;
import com.freemud.sdk.api.assortment.order.response.order.CreateOrderResponse;
......@@ -149,6 +154,9 @@ public class MallOrderServiceImpl implements MallOrderService {
@Autowired
private SpellGroupOrderDataManager spellGroupOrderDataManager;
@Autowired
private MemberBlacklistHandler memberBlacklistHandler;
/**
* 创建订单
*/
......@@ -169,7 +177,9 @@ public class MallOrderServiceImpl implements MallOrderService {
checkMallOrder.checkOrderByDelivery(createOrderVo, userLoginInfoDto, storeResponseDto, shoppingCartGoodsDto.getTotalAmount(), trackingNo);
OrderExtInfoDto extInfo = this.getExtInfo(userLoginInfoDto, storeResponseDto, createOrderVo);
BaseResponse response = this.createOrderFlow(createOrderVo, storeResponseDto, shoppingCartGoodsDto, userLoginInfoDto, extInfo);
if (!Objects.equals(response.getCode(), ResponseResult.SUCCESS.getCode())) {
return response;
}
//组装支付公共方法参数
CreateOrderOperateDto createOrderOperateDto = (CreateOrderOperateDto) response.getResult();
createOrderBO.setExtInfo(extInfo);
......@@ -287,6 +297,31 @@ public class MallOrderServiceImpl implements MallOrderService {
createOrderRequest.setBaseCreateOrderRequest(baseCreateOrderRequest);
createOrderRequest.getBaseCreateOrderRequest().setUserName(userLoginInfoDto.getNickName());
createOrderRequest.setTrackingNo(LogThreadLocal.getTrackingNo());
// fisherman -> 微商城消费黑名单限制
BlacklistDto blacklistDto = new BlacklistDto();
blacklistDto.setAmount(baseCreateOrderRequest.getAmount());
blacklistDto.setPartnerId(createOrderVo.getPartnerId());
blacklistDto.setMemberId(createOrderVo.getUserId());
if (CollectionUtils.isNotEmpty(baseCreateOrderRequest.getAccounts())) {
// 过滤出券, 黑名单有用户不能用券
List<CreateOrderAccountRequest> useAccount = baseCreateOrderRequest.getAccounts()
.stream()
.filter(a -> QueryOrderAccountType.useCouponList.contains(a.getAccountType()))
.collect(Collectors.toList());
blacklistDto.setUseCoupon(CollectionUtils.isNotEmpty(useAccount));
}
blacklistDto.setUseCustomerScore(createOrderVo.getUseCustomerScore());
String touchStr = memberBlacklistHandler.checkisTrueBlacklist(blacklistDto);
if (StringUtils.isNotEmpty(touchStr)) {
CreateOrderResponse baseOrderResponse = new CreateOrderResponse();
baseOrderResponse.setErrcode(Integer.valueOf(ResponseResult.TOUCH_SHOPPING_BLACK_LIST.getCode()));
baseOrderResponse.setErrmsg(touchStr);
baseOrderResponse.setData(null);
return baseOrderResponse;
}
return orderBusinessService.createOrderFlow(createOrderRequest);
});
......@@ -650,19 +685,24 @@ public class MallOrderServiceImpl implements MallOrderService {
* @param orderBean
*/
private BaseResponse partnerNoTakeOrder(OrderRefundVo orderRefundVo, OrderBeanV1 orderBean, String fatherOrderId) {
com.freemud.application.sdk.api.base.BaseResponse<OrderRefundResponse> response = null;
// PayRefundResponse response = null;
Long refundId = System.currentTimeMillis();
String partnerId = orderBean.getCompanyId();
int state = PayRefundStatus.SUCCESS.getCode();
if (orderBean.getAmount() != 0) {
//调用支付退款
PayRefundRequestDto orderPayRefundRequest = orderAdapter.getOrderPayRefundRequest(orderBean, refundId, fatherOrderId);
response = payServiceImpl.orderRefund(orderPayRefundRequest);
if (response == null || response.getData() == null || !com.freemud.sdk.api.assortment.order.domain.ResponseCodeConstant.RESPONSE_SUCCESS_STR.equals(response.getCode())) {
return ResponseUtil.error(ResponseResult.ORDER__ERRORREFUND.getCode(), "orderRefund_failed");
}
// PayRefundRequestDto orderPayRefundRequest = orderAdapter.getOrderPayRefundRequest(orderBean, refundId, fatherOrderId);
// response = payServiceImpl.orderRefund(orderPayRefundRequest);
// if (response == null || response.getData() == null || !com.freemud.sdk.api.assortment.order.domain.ResponseCodeConstant.RESPONSE_SUCCESS_STR.equals(response.getCode())) {
// return ResponseUtil.error(ResponseResult.ORDER__ERRORREFUND.getCode(), "orderRefund_failed");
// }
//获取支付返回退款状态
// state = response.getData().getRefundStatus() == null ? PayRefundStatus.SUCCESS.getCode() : response.getData().getRefundStatus();
OrderManagerRequest request = new OrderManagerRequest();
request.setReason(orderRefundVo.getReason());
PayRefundResponse payRefundResponse = payServiceImpl.payRefundCommon(request, orderBean);
//获取支付返回退款状态
state = response.getData().getRefundStatus() == null ? PayRefundStatus.SUCCESS.getCode() : response.getData().getRefundStatus();
state = payRefundResponse.getPayRefundStatus() == null ? PayRefundStatus.SUCCESS.getCode() : payRefundResponse.getPayRefundStatus().getCode();
}
CancelOrderRequest cancelOrderRequest = orderAdapter.convent2CancelOrderRequest(orderBean.getOid(),
partnerId, AfterSalesType.USER_CANCEL, orderRefundVo.getReason(), LogThreadLocal.getTrackingNo(), refundId.toString());
......
......@@ -522,7 +522,7 @@ public class OrderAdapterServiceImpl {
request.setMiniAppId(orderBean.getAppId());
response = ecologyProgramApplicationClient.reportActivityBehaviors(request);
if (!Objects.equals(response.getCode(), "100")) {
if(Objects.equals(response.getMessage(), "用户未参加或已退出该活动")){//用户未报名活动的过滤掉
if(!Objects.equals(response.getMessage(), "用户未参加或已退出该活动")){//用户未报名活动的过滤掉
emailAlertService.sendEmailAlert("低碳活动上报失败", String.format("request:%s \r\nresponse:%s \r\norderNo:%s", JSONObject.toJSONString(request), JSONObject.toJSONString(response), orderBean.getOid()));
}
ApiLog.printLog("sendLowCarbonToWeixin error "+orderBean.getOid(), message,request,response);
......
......@@ -24,6 +24,8 @@ import cn.freemud.entities.dto.*;
import cn.freemud.entities.dto.activity.PayGiftCheckAndJoinResponseDto;
import cn.freemud.entities.dto.activity.PayGiftCheckAndJoinResponseObj;
import cn.freemud.entities.dto.activity.PayGitCheckAndJoinRequestDto;
import cn.freemud.entities.dto.blacklist.BlacklistDto;
import cn.freemud.entities.dto.blacklist.OrderBlacklistResp;
import cn.freemud.entities.dto.coupon.CheckAndCancelRequest;
import cn.freemud.entities.dto.coupon.CheckAndCancelResponseDTO;
import cn.freemud.entities.dto.coupon.CouponResponseDTO;
......@@ -50,6 +52,7 @@ import cn.freemud.entities.dto.user.UserCouponCheckRequest;
import cn.freemud.entities.vo.*;
import cn.freemud.entities.vo.order.*;
import cn.freemud.enums.*;
import cn.freemud.handler.MemberBlacklistHandler;
import cn.freemud.handler.WeChatLiveMsgHandle;
import cn.freemud.interceptor.ServiceException;
import cn.freemud.management.entities.dto.request.BatchOrderRefundV2Request;
......@@ -93,6 +96,7 @@ import com.freemud.api.assortment.datamanager.manager.customer.AssortmentCustome
import com.freemud.api.assortment.datamanager.meal.MealCacheManager;
import com.freemud.application.sdk.api.constant.ResponseConstant;
import com.freemud.application.sdk.api.constant.ResponseResultEnum;
import com.freemud.application.sdk.api.log.ApiLog;
import com.freemud.application.sdk.api.log.ErrorLog;
import com.freemud.application.sdk.api.log.LogThreadLocal;
import com.freemud.application.sdk.api.ordercenter.common.OrderAndShoppingCommonRedisKey;
......@@ -104,6 +108,7 @@ import com.freemud.application.sdk.api.ordercenter.enums.orderv1.OrderTypeV1;
import com.freemud.application.sdk.api.ordercenter.enums.orderv1.*;
import com.freemud.application.sdk.api.ordercenter.enums.OrderType;
import com.freemud.application.sdk.api.ordercenter.enums.orderv1.OrderStatusV1;
import com.freemud.application.sdk.api.ordercenter.enums.orderv1.OrderStatusV1;
import com.freemud.application.sdk.api.ordercenter.enums.orderv1.OrderTypeV1;
import com.freemud.application.sdk.api.ordercenter.request.*;
import com.freemud.application.sdk.api.ordercenter.request.carpark.ParkingOrderCreateReq;
......@@ -128,6 +133,7 @@ import com.freemud.sdk.api.assortment.message.service.IMessageTemplatePushServic
import com.freemud.sdk.api.assortment.order.constant.OrderRedisKeyConstant;
import com.freemud.sdk.api.assortment.order.entities.OrderRefundConfigEntity;
import com.freemud.sdk.api.assortment.order.enums.AutoOrderConfigTime;
import com.freemud.sdk.api.assortment.order.enums.QueryOrderAccountType;
import com.freemud.sdk.api.assortment.order.enums.StoreDeliveryMethod;
import com.freemud.sdk.api.assortment.order.request.order.*;
import com.freemud.sdk.api.assortment.order.response.order.*;
......@@ -297,6 +303,9 @@ public class OrderServiceImpl implements Orderservice {
private StockHandle stockHandle;
@Autowired
private MemberBlacklistHandler memberBlacklistHandler;
@Autowired
private OrderManagerAdapter orderManagerAdapter;
@Value("${sellcoupon.test.order.refund.fail:}")
......@@ -2074,7 +2083,7 @@ public class OrderServiceImpl implements Orderservice {
if (orderBean.getAmount() != 0) {
OrderManagerRequest orderManagerRequest = new OrderManagerRequest();
orderManagerRequest.setReason(orderRefundVo.getReason());
PayRefundResponse refundResponse = paymentHandle.getCommonPayRefundResponse(orderManagerRequest, orderBean);
PayRefundResponse refundResponse = payServiceImpl.payRefundCommon(orderManagerRequest, orderBean);
state = refundResponse.getPayRefundStatus().getCode();
}
......@@ -2470,6 +2479,26 @@ public class OrderServiceImpl implements Orderservice {
//组装老的创建订单数据模型
BaseCreateOrderRequest baseCreateOrderRequest = orderAdapter.convent2CreateOrderDto(createOrderVo, shoppingCartGoodsDto, storeResponseDto);
// fisherman 订单支付价格 _> 处理 消费黑面名单逻辑
Long amount = baseCreateOrderRequest.getAmount();
BlacklistDto blacklistDto = new BlacklistDto();
blacklistDto.setAmount(amount);
blacklistDto.setPartnerId(createOrderVo.getPartnerId());
blacklistDto.setMemberId(createOrderVo.getUserId());
blacklistDto.setUseCustomerScore(createOrderVo.getUseCustomerScore());
if (CollectionUtils.isNotEmpty(baseCreateOrderRequest.getAccounts())) {
// 过滤出券, 黑名单有用户不能用券
List<CreateOrderAccountRequest> useAccount = baseCreateOrderRequest.getAccounts()
.stream()
.filter(a -> QueryOrderAccountType.useCouponList.contains(a.getAccountType()))
.collect(Collectors.toList());
blacklistDto.setUseCoupon(CollectionUtils.isNotEmpty(useAccount));
}
String touchStr = memberBlacklistHandler.checkisTrueBlacklist(blacklistDto);
if (StringUtils.isNotEmpty(touchStr)) {
return ResponseUtil.error(ResponseResult.TOUCH_SHOPPING_BLACK_LIST.getCode(), touchStr);
}
// 预先前置 设置 支付方式
this.preSetPayChannelType(baseCreateOrderRequest, createOrderVo);
......@@ -2797,7 +2826,11 @@ public class OrderServiceImpl implements Orderservice {
String desc = "支付未及时回调";
PayRefundRequestDto orderPayRefundRequest = orderAdapter.getOrderPayRefundRequest(orderBean, refundId, orderBean.getOid());
// TODO: 22-6-23 待联调修改
response = payServiceImpl.orderRefund(orderPayRefundRequest);
// OrderManagerRequest request = new OrderManagerRequest();
// request.setReason(desc);
// PayRefundResponse response = payServiceImpl.payRefundCommon(request, orderBean);
if (response != null && noPay.equals(response.getCode())) {
return;
}
......@@ -3490,6 +3523,7 @@ public class OrderServiceImpl implements Orderservice {
if (Integer.valueOf(1).equals(queryRefundFailuresListDto.getLastFailureType()) || Integer.valueOf(2).equals(queryRefundFailuresListDto.getLastFailureType())) {
Long refundId = System.currentTimeMillis();
// TODO: 22-6-23 退款逻辑待合并
if (orderBean.getAmount() != 0) {
if (null != orderBean.getOrderPayItem() && orderBean.getOrderPayItem().size() > 0) {
//调用支付退款
......@@ -3601,7 +3635,8 @@ public class OrderServiceImpl implements Orderservice {
return ResponseUtil.error(ResponseResult.ORDER__ERRORREFUND.getCode(), "订单已取消,无法退款");
}
// fisherman 仅仅支持 餐饮类订单进行操作
if (BizTypeEnum.ORDINARY.getBizType().compareTo(orderBean.getBizType()) != 0) {
List<Integer> bizTypes = Arrays.asList(1,7);
if (!bizTypes.contains(orderBean.getBizType())) {
return ResponseUtil.error(ResponseResult.ORDER__ERRORREFUND.getCode(), "仅支持餐饮订单操作");
}
......@@ -3750,8 +3785,9 @@ public class OrderServiceImpl implements Orderservice {
PayRefundResponse refundResponse;
try {
if (null != orderBean.getOrderPayItem() && orderBean.getOrderPayItem().size() > 0) {
refundResponse = paymentHandle.multiRefund(orderBean);
refundResponse = payServiceImpl.payRefundCommon(null,orderBean);
} else {
// TODO: 22-6-23 待考虑合并到上面一起
refundResponse = paymentHandle.refund("用户买券订单-申请退款", orderBean);
}
if (refundResponse.getPayRefundStatus().getCode().compareTo(PayRefundStatus.SUCCESS.getCode()) != 0) {
......@@ -3908,5 +3944,4 @@ public class OrderServiceImpl implements Orderservice {
this.sendPaySuccessMessage(orderBean);
}
}
......@@ -28,13 +28,13 @@ import cn.freemud.enums.ResponseResult;
import cn.freemud.enums.TradeState;
import cn.freemud.interceptor.ServiceException;
import cn.freemud.management.entities.dto.request.BatchOrderRefundV2Request;
import cn.freemud.management.entities.dto.request.order.OrderManagerRequest;
import cn.freemud.management.entities.dto.request.pay.PayRefundRequestDto;
import cn.freemud.management.entities.dto.request.pay.PaymentQueryOrderRequestDto;
import cn.freemud.management.entities.dto.response.pay.OrderRefundResponse;
import cn.freemud.management.entities.dto.response.pay.PayBatchRefundResponse;
import cn.freemud.management.entities.dto.response.pay.PayRefundData;
import cn.freemud.management.entities.dto.response.pay.*;
import cn.freemud.management.entities.dto.response.pay.PaymentQueryOrderResponseDto;
import cn.freemud.management.enums.PaymentRefundStatus;
import cn.freemud.management.service.handle.PaymentHandle;
import cn.freemud.management.thirdparty.MulitiPaymentClient;
import cn.freemud.management.thirdparty.OMSPaymentClient;
import cn.freemud.redis.RedisCache;
......@@ -100,6 +100,8 @@ public class PayServiceImpl {
private PaymentNewClient paymentNewClient;
@Autowired
private OMSPaymentClient omsPaymentClient;
@Autowired
private PaymentHandle paymentHandle;
@Autowired
private AssortmentOpenPlatformWxappManager openPlatformWxappManager;
......@@ -861,20 +863,6 @@ public class PayServiceImpl {
/**
* 支付退款
*/
public com.freemud.application.sdk.api.base.BaseResponse<OrderRefundResponse> orderRefund(PayRefundRequestDto orderPayRefundRequest) {
return orderPayRefund(orderPayRefundRequest);
}
/**
* 混合支付退款接口
*/
public MultiOrderRefundResponse paymentApplicationRefund(MultiOrderRefundRequest multiOrderRefundRequest, String partnerId) {
return mulitiPaymentClient.paymentApplicationRefund(multiOrderRefundRequest, partnerId);
}
/**
* 批量支付退款
*/
public PayBatchRefundResponse batchRefund(BatchOrderRefundV2Request batchOrderRefundV2Request) {
......@@ -1663,4 +1651,33 @@ public class PayServiceImpl {
return payTypeCode;
}
/**
* 支付退款
*/
public com.freemud.application.sdk.api.base.BaseResponse<OrderRefundResponse> orderRefund(PayRefundRequestDto orderPayRefundRequest) {
return orderPayRefund(orderPayRefundRequest);
}
/**
* 混合支付退款接口
*/
public MultiOrderRefundResponse paymentApplicationRefund(MultiOrderRefundRequest multiOrderRefundRequest, String partnerId) {
return mulitiPaymentClient.paymentApplicationRefund(multiOrderRefundRequest, partnerId);
}
/**
* 提取 退款公共代码
*
* @param request
* @param orderBean
* @return
*/
public PayRefundResponse payRefundCommon(OrderManagerRequest request, OrderBeanV1 orderBean) {
PayRefundResponse refundResponse = paymentHandle.getCommonPayRefundResponse(request, orderBean);
return refundResponse;
}
}
......@@ -12,6 +12,7 @@ import cn.freemud.constant.ResponseCodeConstant;
import cn.freemud.entities.Active;
import cn.freemud.entities.bo.CreateOrderBONew;
import cn.freemud.entities.dto.*;
import cn.freemud.entities.dto.blacklist.BlacklistDto;
import cn.freemud.entities.dto.coupon.CouponResponseDTO;
import cn.freemud.entities.dto.coupon.FastBatchQueryTemplateInfoRequest;
import cn.freemud.entities.dto.coupon.FastTemplateInfoResponseVO;
......@@ -29,6 +30,7 @@ import cn.freemud.entities.dto.store.StoreMixResponseDto;
import cn.freemud.entities.live.WeChatReportVO;
import cn.freemud.entities.vo.*;
import cn.freemud.enums.*;
import cn.freemud.handler.MemberBlacklistHandler;
import cn.freemud.handler.WeChatLiveMsgHandle;
import cn.freemud.interceptor.ServiceException;
import cn.freemud.manager.BuyProductOnceManager;
......@@ -180,6 +182,10 @@ public class SellCouponOrderServiceImpl implements OrderFactoryService {
@Autowired
private CouponOnlineClient couponOnlineClient;
@Autowired
private MemberBlacklistHandler memberBlacklistHandler;
/**
* 抖音卖券
*/
......@@ -380,6 +386,18 @@ public class SellCouponOrderServiceImpl implements OrderFactoryService {
//标准化平台虚拟商品特价活动计算,不包含蜜雪APP买虚拟商品
List<SubtractStockVO> stockBeanDtos = calculationDiscount(partnerId, storeId, userLoginInfoDto.getMemberId(), productInfosDto.getData().getProducts().get(0), createOrderRequest);
// fisherman --> 校验是否存在用户消费黑名单 需要校验 !=null && >0
Long amount = createOrderRequest.getActualPayAmount();
if (Objects.nonNull(amount) && amount.compareTo(0L) > 0) {
BlacklistDto blacklistDto = new BlacklistDto();
blacklistDto.setAmount(amount);
blacklistDto.setPartnerId(createOrderRequest.getPartnerId());
blacklistDto.setMemberId(createOrderRequest.getUserId());
String touchStr = memberBlacklistHandler.checkisTrueBlacklist(blacklistDto);
if (StringUtils.isNotEmpty(touchStr)) {
return ResponseUtil.error(ResponseResult.TOUCH_SHOPPING_BLACK_LIST.getCode(), touchStr);
}
}
OrderBaseResp<OrderInfoReqs> orderInfoReqsBaseResponse = orderSdkService.createOrder(createOrderRequest, trackingNo);
CreateOrderResponse createOrderResponse = orderSdkAdapter.convent2NEWOrderInfoReqs(orderInfoReqsBaseResponse);
if (createOrderResponse == null || createOrderResponse.getErrcode() != 100) {
......
package cn.freemud.service.thirdparty;
import cn.freemud.entities.dto.blacklist.Result;
import cn.freemud.entities.dto.blacklist.req.BlackListQueryByClient;
import cn.freemud.entities.dto.blacklist.resp.MemberBlacklistVO;
import com.freemud.application.sdk.api.ordercenter.annotation.LogIgnoreFeign;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* @author : xh.Z
* @email : fisherman0510@163.com
* @Date : 2022/5/27 14:17
* @description :
*/
@FeignClient(name = "data-center")
@RequestMapping(produces = {MediaType.APPLICATION_JSON_UTF8_VALUE})
public interface DataCenterClient {
/**
* 查询用户是否在黑名单中
*/
@LogIgnoreFeign(logMessage="queryByMemberId")
@PostMapping("/blacklist/query-by-memberId")
Result<MemberBlacklistVO> queryByMemberId(@RequestBody BlackListQueryByClient req);
}
......@@ -72,6 +72,7 @@ public interface PaymentNewClient {
/**
* 支付查询
* 关闭预支付使用
*/
@LogIgnoreFeign(logMessage="payQuery")
@PostMapping("paymentcenter/query")
......
......@@ -78,4 +78,14 @@ public class OrderManagerRequest {
* 内部使用字段, 订单流转时间设置
*/
private Integer timeout;
/**
* 售后渠道 1:POS插件 2:小助手 3:开放平台 4:自动任务 5:用户端 6:系统 7:万象 8:太一
*/
private Integer afterSalesApplyClient;
/**
* 品牌审核售后单 不传默认无需品牌审核
*/
private Boolean brandVerifyAfterSales;
}
......@@ -34,4 +34,9 @@ public class PayRefundResponse {
* 兼容爱马哥退款报错的字段 ,其他场景不会有值
*/
private ResponseResult result;
/**
* 退款失败记录原因
*/
private String message;
}
......@@ -34,9 +34,9 @@ public class OrderBeanFactory {
// String source = orderBean.getSource();
String orderClient = orderBean.getOrderClient();
String companyId = orderBean.getCompanyId();
if (macCafePartnerId.equals(companyId)){
return applicationContext.getBean(McCafeMangerServiceImpl.class);
}
// if (macCafePartnerId.equals(companyId)){
// return applicationContext.getBean(McCafeMangerServiceImpl.class);
// }
// if (OrderSource.BDWM.getSource().equals(source) || OrderSource.JDWM.getSource().equals(source)
// || OrderSource.MTWM.getSource().equals(source) || OrderSource.ELEME.getSource().equals(source)
// || OrderSource.FMWD.getSource().equals(source) || OrderSource.EBAI.getSource().equals(source)
......
......@@ -194,25 +194,25 @@ public class OrderManagerAdapter {
/**
* 同意退款或者取消订单
*/
public BaseResponse orderPayRefund(OrderManagerRequest request) {
//查询订单
OrderBeanV1 orderBean = orderBaseService.getByOrderCode(request.getOrderId());
if (null == orderBean) {
return ResponseUtil.error(ResponseResult.ORDER_NOT_EXIST);
}
if (CollectionUtils.isNotEmpty(orderBean.getRefundList())) {
//订单接单参数校验
BaseResponse verifyResponse = orderVerifyHandle.orderAgreeRefundMCCafe(orderBean, request);
if (ObjectUtils.notEqual(verifyResponse.getCode(), ResponseResult.SUCCESS.getCode())) {
return handleResponse(request, orderBean, verifyResponse);
}
BaseResponse<OrderManagerResponse> orderManagerResponse = orderBeanFactory.getOrderManagerService(orderBean).orderAgreeRefund(request, orderBean);
return handleResponse(request, orderBean, orderManagerResponse);
} else {
BaseResponse<OrderManagerResponse> orderManagerResponse = orderBeanFactory.getOrderManagerService(orderBean).orderCancel(request, orderBean);
return handleResponse(request, orderBean, orderManagerResponse);
}
}
// public BaseResponse orderPayRefund(OrderManagerRequest request) {
// //查询订单
// OrderBeanV1 orderBean = orderBaseService.getByOrderCode(request.getOrderId());
// if (null == orderBean) {
// return ResponseUtil.error(ResponseResult.ORDER_NOT_EXIST);
// }
// if (CollectionUtils.isNotEmpty(orderBean.getRefundList())) {
// //订单接单参数校验
// BaseResponse verifyResponse = orderVerifyHandle.orderAgreeRefundMCCafe(orderBean, request);
// if (ObjectUtils.notEqual(verifyResponse.getCode(), ResponseResult.SUCCESS.getCode())) {
// return handleResponse(request, orderBean, verifyResponse);
// }
// BaseResponse<OrderManagerResponse> orderManagerResponse = orderBeanFactory.getOrderManagerService(orderBean).orderAgreeRefund(request, orderBean);
// return handleResponse(request, orderBean, orderManagerResponse);
// } else {
// BaseResponse<OrderManagerResponse> orderManagerResponse = orderBeanFactory.getOrderManagerService(orderBean).orderCancel(request, orderBean);
// return handleResponse(request, orderBean, orderManagerResponse);
// }
// }
/**
* 拒绝退款
......@@ -264,20 +264,20 @@ public class OrderManagerAdapter {
* @param request
* @return
*/
public BaseResponse mcCafeOrderRejectRefund(OrderManagerRequest request) {
//查询订单
OrderBeanV1 orderBean = orderBaseService.getByOrderCode(request.getOrderId());
if (null == orderBean) {
return ResponseUtil.error(ResponseResult.ORDER_NOT_EXIST);
}
//订单接单参数校验
BaseResponse verifyResponse = orderVerifyHandle.mcCafeOrderRejectRefund(orderBean, request);
if (ObjectUtils.notEqual(verifyResponse.getCode(), ResponseResult.SUCCESS.getCode())) {
return handleResponse(request, orderBean, verifyResponse);
}
BaseResponse<OrderManagerResponse> orderManagerResponse = orderBeanFactory.getOrderManagerService(orderBean).orderRejectRefund(request, orderBean);
return handleResponse(request, orderBean, orderManagerResponse);
}
// public BaseResponse mcCafeOrderRejectRefund(OrderManagerRequest request) {
// //查询订单
// OrderBeanV1 orderBean = orderBaseService.getByOrderCode(request.getOrderId());
// if (null == orderBean) {
// return ResponseUtil.error(ResponseResult.ORDER_NOT_EXIST);
// }
// //订单接单参数校验
// BaseResponse verifyResponse = orderVerifyHandle.mcCafeOrderRejectRefund(orderBean, request);
// if (ObjectUtils.notEqual(verifyResponse.getCode(), ResponseResult.SUCCESS.getCode())) {
// return handleResponse(request, orderBean, verifyResponse);
// }
// BaseResponse<OrderManagerResponse> orderManagerResponse = orderBeanFactory.getOrderManagerService(orderBean).orderRejectRefund(request, orderBean);
// return handleResponse(request, orderBean, orderManagerResponse);
// }
private BaseResponse<OrderManagerResponse> handleResponse(OrderManagerRequest request, OrderBeanV1 orderBean, BaseResponse result) {
......
......@@ -14,12 +14,16 @@ import cn.freemud.management.service.handle.*;
import cn.freemud.management.util.ResponseUtil;
import com.alibaba.fastjson.JSONObject;
import com.freemud.application.sdk.api.constant.ResponseConstant;
import com.freemud.application.sdk.api.log.LogThreadLocal;
import com.freemud.application.sdk.api.ordercenter.entities.v1.OrderBeanV1;
import com.freemud.application.sdk.api.ordercenter.enums.AfterSalesStatus;
import com.freemud.application.sdk.api.ordercenter.enums.BizTypeEnum;
import com.freemud.application.sdk.api.ordercenter.enums.MarketTypeEnum;
import com.freemud.application.sdk.api.ordercenter.enums.RefundModeEnum;
import com.freemud.application.sdk.api.ordercenter.request.AfterOrderExtInfoDto;
import com.freemud.application.sdk.api.ordercenter.request.AfterSalesRefundFailReq;
import com.freemud.application.sdk.api.ordercenter.service.OrderSdkService;
import com.freemud.sdk.api.assortment.order.enums.PayRefundStatus;
import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -52,6 +56,8 @@ public class MallOrderMangerServiceImpl implements OrderManagerService {
private StockHandle stockHandle;
@Autowired
private ActivityHandle activityHandle;
@Autowired
private OrderSdkService orderSdkService;
/**
* 同意退款
......@@ -89,11 +95,10 @@ public class MallOrderMangerServiceImpl implements OrderManagerService {
}
//支付退款
PayRefundResponse refundResponse = new PayRefundResponse();
try {
refundResponse = paymentHandle.refund(request, orderBean);
} catch (OrderServiceException orderEx) {
return ResponseUtil.error(orderEx.getResult());
PayRefundResponse refundResponse = this.payRefundCommon(request, orderBean);
//fisherman --> 退款中的状态 阻止后续流程 等待支付回调 不是退款成功 都终止下面的退款流程
if (refundResponse.getPayRefundStatus().getCode().compareTo(PayRefundStatus.SUCCESS.getCode()) != 0) {
return ResponseUtil.error(ResponseResult.REFUND_FAIL);
}
//订单同意退款
mallOrderHandle.refundAgree(request, refundResponse, orderBean);
......@@ -117,11 +122,10 @@ public class MallOrderMangerServiceImpl implements OrderManagerService {
}
//支付退款
PayRefundResponse refundResponse = new PayRefundResponse();
try {
refundResponse = paymentHandle.refund(request, orderBean);
} catch (OrderServiceException orderEx) {
return ResponseUtil.error(orderEx.getResult());
PayRefundResponse refundResponse = this.payRefundCommon(request, orderBean);
//fisherman --> 退款中的状态 阻止后续流程 等待支付回调 不是退款成功 都终止下面的退款流程
if (refundResponse.getPayRefundStatus().getCode().compareTo(PayRefundStatus.SUCCESS.getCode()) != 0) {
return ResponseUtil.error(ResponseResult.REFUND_FAIL);
}
//订单同意退款
mallOrderHandle.refundAgree(request, refundResponse, orderBean);
......@@ -161,15 +165,10 @@ public class MallOrderMangerServiceImpl implements OrderManagerService {
@Override
public BaseResponse<OrderManagerResponse> orderReject(OrderManagerRequest request, OrderBeanV1 orderBean) {
//支付退款
PayRefundResponse refundResponse = new PayRefundResponse();
try {
if(null != orderBean.getOrderPayItem() && orderBean.getOrderPayItem().size()>0){
refundResponse = paymentHandle.multiRefund(orderBean);
}else{
refundResponse = paymentHandle.refund(request, orderBean);
}
} catch (OrderServiceException orderEx){ // 爱马哥兼容,不抛错
return ResponseUtil.error(orderEx.getResult());
PayRefundResponse refundResponse = this.payRefundCommon(request, orderBean);
//fisherman --> 退款中的状态 阻止后续流程 等待支付回调 不是退款成功 都终止下面的退款流程
if (refundResponse.getPayRefundStatus().getCode().compareTo(PayRefundStatus.SUCCESS.getCode()) != 0) {
return ResponseUtil.error(ResponseResult.REFUND_FAIL);
}
//订单拒单
mallOrderHandle.mallOrderReject(request, refundResponse, orderBean);
......@@ -181,4 +180,28 @@ public class MallOrderMangerServiceImpl implements OrderManagerService {
return ResponseUtil.success();
}
/**
* 提取 退款公共代码
*
* @param request
* @param orderBean
* @return
*/
private PayRefundResponse payRefundCommon(OrderManagerRequest request, OrderBeanV1 orderBean) {
PayRefundResponse refundResponse = paymentHandle.getCommonPayRefundResponse(request, orderBean);
//同意退款失败记录到订单售后单
if (orderBean.getAfterSalesOrderResp() != null && refundResponse.getPayRefundStatus().getCode().compareTo(PayRefundStatus.SUCCESS.getCode()) != 0) {
AfterSalesRefundFailReq refundFailReq = new AfterSalesRefundFailReq();
refundFailReq.setOrderCode(orderBean.getOid());
refundFailReq.setPartnerId(orderBean.getCompanyId());
refundFailReq.setRefundFailReason("退款失败或退款中," + refundResponse.getMessage());
refundFailReq.setAfterSalesCode(orderBean.getAfterSalesOrderResp().getAfterSalesCode());
refundFailReq.setOperationClient(request.getAfterSalesApplyClient());
refundFailReq.setOperator(request.getOperator());
orderSdkService.refundFail(refundFailReq, LogThreadLocal.getTrackingNo());
}
return refundResponse;
}
}
......@@ -4,6 +4,7 @@ import cn.freemud.base.entity.BaseResponse;
import cn.freemud.management.entities.dto.request.order.OrderManagerRequest;
import cn.freemud.management.entities.dto.response.order.OrderManagerResponse;
import cn.freemud.management.entities.dto.response.pay.PayRefundResponse;
import cn.freemud.management.enums.ResponseResult;
import cn.freemud.management.service.OrderManagerService;
import cn.freemud.management.service.handle.ActivityHandle;
import cn.freemud.management.service.handle.MallOrderHandle;
......@@ -11,12 +12,16 @@ import cn.freemud.management.service.handle.PaymentHandle;
import cn.freemud.management.service.handle.StockHandle;
import cn.freemud.management.util.ResponseUtil;
import com.alibaba.fastjson.JSONObject;
import com.freemud.application.sdk.api.log.LogThreadLocal;
import com.freemud.application.sdk.api.ordercenter.entities.v1.OrderBeanV1;
import com.freemud.application.sdk.api.ordercenter.enums.AfterSalesStatus;
import com.freemud.application.sdk.api.ordercenter.enums.PayChannelType;
import com.freemud.application.sdk.api.ordercenter.enums.RefundModeEnum;
import com.freemud.application.sdk.api.ordercenter.request.AfterOrderExtInfoDto;
import com.freemud.application.sdk.api.ordercenter.request.AfterSalesRefundFailReq;
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderPayItemResp;
import com.freemud.application.sdk.api.ordercenter.service.OrderSdkService;
import com.freemud.sdk.api.assortment.order.enums.PayRefundStatus;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -45,6 +50,8 @@ public class NewMallOrderMangerServiceImpl implements OrderManagerService {
private StockHandle stockHandle;
@Autowired
private ActivityHandle activityHandle;
@Autowired
private OrderSdkService orderSdkService;
/**
* 同意退款
......@@ -67,34 +74,37 @@ public class NewMallOrderMangerServiceImpl implements OrderManagerService {
// 修改售后单状态为退货中
mallOrderHandle.mallOrderAgreeApply(request, orderBean);
} else {
//支付退款
PayRefundResponse refundResponse;
boolean cashPay = false;
boolean svcPay = false;
if(CollectionUtils.isNotEmpty(orderBean.getOrderPayItem())){
for (OrderPayItemResp payItemResp : orderBean.getOrderPayItem()){
if(Objects.equals(payItemResp.getPayChannelType(),(int)PayChannelType.SVC.getIndex())){
svcPay = true;
}
if(Objects.equals(payItemResp.getPayChannelType(),(int)PayChannelType.WECHAT.getIndex())){
cashPay = true;
}
if(Objects.equals(payItemResp.getPayChannelType(),(int)PayChannelType.ALIPAY.getIndex())){
cashPay = true;
}
}
PayRefundResponse refundResponse = this.payRefundCommon(request, orderBean);
// 退款异常
if (refundResponse.getPayRefundStatus().getCode().compareTo(PayRefundStatus.COMPATIBILITY_STATUS.getCode()) == 0) {
return ResponseUtil.error(refundResponse.getResult());
}
if (cashPay && svcPay) {
refundResponse = paymentHandle.multiRefund(orderBean);
} else {
// OrderExtendedReq ext = orderBean.getOrderExtended();
// if (StringUtils.isNotBlank(ext.getAgentPayerId()) && !Objects.equals(ext.getAgentPayerId(), orderBean.getUserId())) {
// //代付人信息不为空 并且和订单创建人不一样,表示代付单
// refundResponse = paymentHandle.agentPayRefund(orderBean);
// }
refundResponse = paymentHandle.refund(request, orderBean);
// fisherman --> 退款中的状态 阻止后续流程 等待支付回调 不是退款成功 都终止下面的退款流程
if (refundResponse.getPayRefundStatus().getCode().compareTo(PayRefundStatus.SUCCESS.getCode()) != 0) {
return ResponseUtil.error(ResponseResult.REFUND_FAIL_WAIT_CALLBACK);
}
// PayRefundResponse refundResponse;
// boolean cashPay = false;
// boolean svcPay = false;
// if(CollectionUtils.isNotEmpty(orderBean.getOrderPayItem())){
// for (OrderPayItemResp payItemResp : orderBean.getOrderPayItem()){
// if(Objects.equals(payItemResp.getPayChannelType(),(int)PayChannelType.SVC.getIndex())){
// svcPay = true;
// }
// if(Objects.equals(payItemResp.getPayChannelType(),(int)PayChannelType.WECHAT.getIndex())){
// cashPay = true;
// }
// if(Objects.equals(payItemResp.getPayChannelType(),(int)PayChannelType.ALIPAY.getIndex())){
// cashPay = true;
// }
// }
// }
// if (cashPay && svcPay) {
// refundResponse = paymentHandle.multiRefund(orderBean);
// } else {
// refundResponse = paymentHandle.getCommonPayRefundResponse(request, orderBean);
// }
//订单同意退款
mallOrderHandle.refundAgree(request, refundResponse, orderBean);
//冲正库存
......@@ -129,4 +139,28 @@ public class NewMallOrderMangerServiceImpl implements OrderManagerService {
return ResponseUtil.error("501","暂无");
}
/**
* 提取 退款公共代码
*
* @param request
* @param orderBean
* @return
*/
private PayRefundResponse payRefundCommon(OrderManagerRequest request, OrderBeanV1 orderBean) {
PayRefundResponse refundResponse = paymentHandle.getCommonPayRefundResponse(request, orderBean);
//同意退款失败记录到订单售后单
if (orderBean.getAfterSalesOrderResp() != null && refundResponse.getPayRefundStatus().getCode().compareTo(PayRefundStatus.SUCCESS.getCode()) != 0) {
AfterSalesRefundFailReq refundFailReq = new AfterSalesRefundFailReq();
refundFailReq.setOrderCode(orderBean.getOid());
refundFailReq.setPartnerId(orderBean.getCompanyId());
refundFailReq.setRefundFailReason("退款失败或退款中," + refundResponse.getMessage());
refundFailReq.setAfterSalesCode(orderBean.getAfterSalesOrderResp().getAfterSalesCode());
refundFailReq.setOperationClient(request.getAfterSalesApplyClient());
refundFailReq.setOperator(request.getOperator());
orderSdkService.refundFail(refundFailReq, LogThreadLocal.getTrackingNo());
}
return refundResponse;
}
}
......@@ -26,10 +26,7 @@ import com.freemud.application.sdk.api.ordercenter.entities.vo.OrderCallBackRequ
import com.freemud.application.sdk.api.ordercenter.enums.*;
import com.freemud.application.sdk.api.ordercenter.enums.orderv1.OrderSourceV1;
import com.freemud.application.sdk.api.ordercenter.enums.orderv1.OrderStatusV1;
import com.freemud.application.sdk.api.ordercenter.request.OrderCancelReq;
import com.freemud.application.sdk.api.ordercenter.request.OrderExpressReq;
import com.freemud.application.sdk.api.ordercenter.request.OrderExtInfoDto;
import com.freemud.application.sdk.api.ordercenter.request.OrderExtendedReq;
import com.freemud.application.sdk.api.ordercenter.request.*;
import com.freemud.application.sdk.api.ordercenter.response.OrderBaseResp;
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.AfterSalesOrderResp;
import com.freemud.application.sdk.api.ordercenter.service.OrderSdkService;
......@@ -210,15 +207,14 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService {
@Override
public BaseResponse<OrderManagerResponse> orderReject(OrderManagerRequest request, OrderBeanV1 orderBean) {
//支付退款
PayRefundResponse refundResponse;
try {
if (null != orderBean.getOrderPayItem() && orderBean.getOrderPayItem().size() > 0) {
refundResponse = paymentHandle.multiRefund(orderBean);
} else {
refundResponse = paymentHandle.refund(request, orderBean);
}
} catch (OrderServiceException orderEx) { // 爱马哥兼容,不抛错
return ResponseUtil.error(orderEx.getResult());
PayRefundResponse refundResponse = this.payRefundCommon(request,orderBean);
// 退款异常
if (refundResponse.getPayRefundStatus().getCode().compareTo(PayRefundStatus.COMPATIBILITY_STATUS.getCode()) == 0) {
return ResponseUtil.error(refundResponse.getResult());
}
// fisherman --> 退款中的状态 阻止后续流程 等待支付回调 不是退款成功 都终止下面的退款流程
if (refundResponse.getPayRefundStatus().getCode().compareTo(PayRefundStatus.SUCCESS.getCode()) != 0) {
return ResponseUtil.error(ResponseResult.REFUND_FAIL_WAIT_CALLBACK);
}
//订单拒单
saasOrderHandle.orderReject(request, refundResponse, orderBean);
......@@ -243,7 +239,7 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService {
//取消配送单
deliveryHandle.cancelDelivery(orderBean, request);
//支付退款
PayRefundResponse refundResponse = this.getPayRefundResponse(request, orderBean);
PayRefundResponse refundResponse = this.payRefundCommon(request, orderBean);
// 退款异常
if (refundResponse.getPayRefundStatus().getCode().compareTo(PayRefundStatus.COMPATIBILITY_STATUS.getCode()) == 0) {
return ResponseUtil.error(refundResponse.getResult());
......@@ -264,14 +260,26 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService {
}
/**
* 提 退款公共代码
* 提 退款公共代码
*
* @param request
* @param orderBean
* @return
*/
private PayRefundResponse getPayRefundResponse(OrderManagerRequest request, OrderBeanV1 orderBean) {
return paymentHandle.getCommonPayRefundResponse(request, orderBean);
private PayRefundResponse payRefundCommon(OrderManagerRequest request, OrderBeanV1 orderBean) {
PayRefundResponse refundResponse = paymentHandle.getCommonPayRefundResponse(request, orderBean);
//同意退款失败记录到订单售后单
if (orderBean.getAfterSalesOrderResp() != null && refundResponse.getPayRefundStatus().getCode().compareTo(PayRefundStatus.SUCCESS.getCode()) != 0) {
AfterSalesRefundFailReq refundFailReq = new AfterSalesRefundFailReq();
refundFailReq.setOrderCode(orderBean.getOid());
refundFailReq.setPartnerId(orderBean.getCompanyId());
refundFailReq.setRefundFailReason("退款失败或退款中," + refundResponse.getMessage());
refundFailReq.setAfterSalesCode(orderBean.getAfterSalesOrderResp().getAfterSalesCode());
refundFailReq.setOperationClient(request.getAfterSalesApplyClient());
refundFailReq.setOperator(request.getOperator());
orderSdkService.refundFail(refundFailReq,LogThreadLocal.getTrackingNo());
}
return refundResponse;
}
/**
......@@ -313,7 +321,7 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService {
} else if (OrderSourceV1.POS.getCode().equals(orderBean.getSource())) {
return posCancel(orderBean);
}
return ResponseUtil.success();
return ResponseUtil.error("501","暂不支持");
}
/**
......
......@@ -74,6 +74,7 @@ public class OrderCenterSdkAdapter {
}
if (orderInfoReqs.getAfterSalesOrderList() != null && orderInfoReqs.getAfterSalesOrderList().size() >= 1) {
orderInfoReqs.getAfterSalesOrderList().sort(Comparator.comparing(AfterSalesOrderResp :: getCreateTime));
data.setAfterSalesOrderResp(orderInfoReqs.getAfterSalesOrderList().get(0));
}
......
......@@ -291,4 +291,10 @@ public class InterfaceAddressConstant {
*/
public static final String QUERY_EVALUATION = "evaluation/getEvaluationsByOrderId";
/**
* 支付退款失败,更新售后单退款失败
*/
public static final String AFTERSALES_REFUND_FAIL= "/afterSales/v2/refundFail";
}
package com.freemud.application.sdk.api.ordercenter.request;
import lombok.Data;
import javax.validation.constraints.NotBlank;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: AfterSalesRefundFailReq
* @Package com.freemud.application.sdk.api.ordercenter.request
* @Description:
* @author: ping.wu
* @date: 22-6-22 下午6:19
* @Copyright: 2022 www.freemud.cn Inc. All rights reserved.
*/
@Data
public class AfterSalesRefundFailReq {
private String partnerId;
private String orderCode;
/**
* 售后单编号
*/
private String afterSalesCode;
/**
* 退款失败原因
*/
private String refundFailReason;
/**
* 操作来源客户端
*/
private Integer operationClient;
/**
* 操作人
*/
private String operator;
}
......@@ -1029,4 +1029,14 @@ public class OrderSdkService {
});
return responseHandle(responseDTO);
}
/**
* 退款失败记录到订单售后单
*/
public OrderBaseResp refundFail(AfterSalesRefundFailReq request, String trackingNo) {
OrderBaseResp responseDTO = RequestThirdPartyUtils.httpJsonReqComplexNew(restTemplate, AFTERSALES_REFUND_FAIL,
createBaseRequest(request, trackingNo), new ParameterizedTypeReference<OrderBaseResp>() {
});
return responseHandle(responseDTO);
}
}
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