Commit 891436d5 by zhiheng.zhang

Merge branch 'feature/20201223-订单详情查询接口增加配送类型字段-张志恒' into develop

# Conflicts:
#	assortment-ordercenter-sdk/pom.xml
#	assortment-ordercenter-sdk/readme.md
#	order-application-service/pom.xml
#	order-application-service/src/main/java/cn/freemud/service/Orderservice.java
#	order-application-service/src/main/java/cn/freemud/service/impl/OrderAdapterServiceImpl.java
#	order-application-service/src/main/java/cn/freemud/service/impl/OrderServiceImpl.java
#	ordercenter-sdk/pom.xml
#	ordercenter-sdk/readme.md
parents 72d12698 7db28739
......@@ -10,7 +10,7 @@
<modelVersion>4.0.0</modelVersion>
<artifactId>assortment-ordercenter-sdk</artifactId>
<version>2.2.24-SNAPSHOT</version>
<version>2.2.25-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
......
......@@ -140,3 +140,7 @@
| 2.1.8-RELEASE | 拼单 | 缪晖 | 2020-12-10 |
| 2.1.9-RELEASE | 去掉0元核销优惠券 | 李小二 | 2020-12-14 |
>>>>>>> feature/20201216_切换门店清除代金券缓存_yu.sun
| 2.1.10-RELEASE | coco | 刘鹏飞 | 2020-12-17 |
| 2.1.11-RELEASE | 农工商添加设备号 | 梁崇福 | 2020-12-17 |
| 2.2.25-SNAPSHOT | 订单详情查询接口增加配送类型字段 | 张志恒 | 2020-12-23 |
\ No newline at end of file
......@@ -21,6 +21,7 @@ import lombok.NoArgsConstructor;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;
import javax.persistence.Column;
import java.math.BigDecimal;
import java.util.List;
......@@ -431,6 +432,11 @@ public class QueryOrdersResponse {
// 预计到达时间
private Long estimateDeliveryCompleteTime;
/**
* 配送类型 1自配送(三方渠道配送、商家店员配送) 2平台配送
*/
private Byte expressType;
@NoArgsConstructor
@Data
public static class AddDeliveryInfo {
......
......@@ -233,7 +233,8 @@ public class OrderController {
@ApiAnnotation(logMessage = "deleteOrderById")
@PostMapping("/deleteOrderById")
public BaseResponse deleteOrderById(@Validated @LogParams @RequestBody DeleteOrderVo deleteOrderVo) {
return orderservice.deleteOrderById(deleteOrderVo);
//return orderservice.deleteOrderById(deleteOrderVo);
return orderservice.cancelPayOrder(deleteOrderVo);
}
/**
......@@ -385,6 +386,16 @@ public class OrderController {
}
/**
* timeOutRefund
* @param timeOutOrderVo
* @return
*/
@ApiAnnotation(logMessage = "timeOutOrderRefund")
@PostMapping("/timeOutOrderRefund")
public BaseResponse timeOutOrderRefund(@Validated @LogParams @RequestBody TimeOutOrderVo timeOutOrderVo){
return orderservice.timeOutOrderRefund(timeOutOrderVo);
}
/**
* 根据订单号查询配送操作日志及骑手位置
* @param requestVo
* @return
......
package cn.freemud.entities.dto;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.util.List;
@Data
public class PaySuccessBuridPointDto {
/**
* 用户id
*/
@JsonProperty("user_id")
private String userId;
/**
* 用户行为标识 9=结算支付
*/
private String action;
/**
* 商户ID
*/
@JsonProperty("partner_id")
private String partnerId;
/**
* 门店ID
*/
@JsonProperty("store_id")
private String storeId;
/**
* 商品Id
*/
private List<String> skus;
/**
* 商品Id
*/
@JsonProperty("create_time")
private String createTime;
}
......@@ -200,7 +200,7 @@ public class QueryOrdersResponseDto {
private List<OrderCostResp> orderCostDetailList;
private List<QueryOrdersResponse.DataBean.OrderBean.OrderPayItem> orderPayItem;
private Integer abnormalState;
/**
* 订单操作状态(从订单操作历史表中获取)
*/
......
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @Title: GetProductVo
* @Package cn.freemud.entities.vo
* @Description:
* @author: liming.guo
* @date: 2018/5/16 17:35
* @version V1.0
* @Copyright: 2018 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
package cn.freemud.entities.vo;
import lombok.Data;
import org.hibernate.validator.constraints.NotEmpty;
@Data
public class TimeOutOrderVo {
@NotEmpty(message = "订单编号不能为空")
private String oid;
private String partnerId;
}
......@@ -26,4 +26,6 @@ public interface BuriedPointService {
* 埋点支付
*/
BaseResponse BuriedPointPayment(BuriedPointPaymentRequestDto requestDto, QueryOrdersResponseDto.DataBean.OrderBean orderBean);
BaseResponse paySuccessBuridPoint(String partnerId,String storeId,QueryOrdersResponseDto.DataBean.OrderBean orderBean);
}
......@@ -144,5 +144,7 @@ public interface Orderservice {
BaseResponse queryCollageOrderById(Integer operation,String sessionId, String oid, String partnerId,String channel);
BaseResponse timeOutOrderRefund(TimeOutOrderVo timeOutOrderVo);
BaseResponse queryOrderRider(OrderRiderRequestVo requestVo);
}
......@@ -9,6 +9,7 @@ import cn.freemud.enums.GuessLikeStatus;
import cn.freemud.manager.OpenPlatformIappWxappConfigManager;
import cn.freemud.redis.RedisCache;
import cn.freemud.service.BuriedPointService;
import cn.freemud.service.thirdparty.BuriedPointClient;
import cn.freemud.service.thirdparty.SyncTxProductClient;
import cn.freemud.utils.LogUtil;
import com.freemud.api.assortment.datamanager.entity.db.AssortmentOpenPlatformIappWxappConfig;
......@@ -61,6 +62,8 @@ public class BuriedPointServiceImpl implements BuriedPointService {
private AssortmentOpenPlatformWxappManager openPlatformWxappManager;
@Autowired
private AssortmentOpenPlatformIappWxappConfigManager openPlatformIappWxappConfigManager;
@Autowired
private BuriedPointClient buriedPointClient;
@Override
public BaseResponse BuriedPointPayment(BuriedPointPaymentRequestDto requestDto, QueryOrdersResponseDto.DataBean.OrderBean orderBean) {
......@@ -166,4 +169,30 @@ public class BuriedPointServiceImpl implements BuriedPointService {
}
return false;
}
public BaseResponse paySuccessBuridPoint(String partnerId,String storeId,QueryOrdersResponseDto.DataBean.OrderBean orderBean) {
try {
PaySuccessBuridPointDto paySuccessBuridPointDto = new PaySuccessBuridPointDto();
paySuccessBuridPointDto.setPartnerId(partnerId);
paySuccessBuridPointDto.setStoreId(storeId);
paySuccessBuridPointDto.setUserId(orderBean.getUserId());
paySuccessBuridPointDto.setAction("9");
paySuccessBuridPointDto.setCreateTime(DateUtil.convert2String(new Date(),DateUtil.FORMAT_YYYY_MM_DD_HHMMSS));
List<QueryOrdersResponseDto.DataBean.OrderBean.ProductBean> productList = orderBean.getProductList();
List<String> skus = new ArrayList<>(0);
for (int i = 0; i < productList.size(); i++) {
QueryOrdersResponseDto.DataBean.OrderBean.ProductBean productBean = productList.get(i);
if (StringUtils.isNotBlank(productBean.getParentProductId())) {
skus.add(productBean.getProductId());
}
}
paySuccessBuridPointDto.setSkus(skus);
log.info("paySuccessBuridPoint {}" + paySuccessBuridPointDto);
Integer str = buriedPointClient.returnSubmit(paySuccessBuridPointDto);
} catch (Exception e) {
log.info("paySuccessBuridPoint error {}" + e);
}
return null;
}
}
......@@ -34,6 +34,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Map;
......@@ -92,7 +93,8 @@ public class OrderAdapterServiceImpl implements OrderAdapterService {
private OrderCommonService orderCommonService;
@Autowired
private SellCouponOrderServiceImpl sellCouponOrderService;
@Value("${saas.autoRefund.client}")
private String autoRefundClient;
@Override
public BaseResponse createOrderNew(CreateOrderVo createOrderVo) {
AssortmentCustomerInfoVo assortmentCustomerInfoVo = assortmentCustomerInfoManager.getCustomerInfoByObject(createOrderVo.getSessionId());
......@@ -242,6 +244,12 @@ public class OrderAdapterServiceImpl implements OrderAdapterService {
if (!PayStatus.NOT_PAY.getCode().equals(orderBean.getPayStatus())){
return orderAdapter.sendPaySuccessNoticeMessage();
}
Integer client = OrderSourceType.getClientByCode(orderBean.getSource());
//若是app订单超时回调了 订单已取消则做退款处理
if (OrderStatus.CALCEL.getCode().equals(orderBean.getStatus()) && Arrays.asList(autoRefundClient.split(",")).contains(client.toString())) {
orderService.timeOutRefund(orderBean);
return orderAdapter.sendPaySuccessNoticeMessage();
}
/*
* 围餐处理
*/
......
......@@ -96,6 +96,7 @@ import com.freemud.application.sdk.api.ordercenter.request.OrderConditionsReq;
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.OrderModifyRelatingCodeReq;
import com.freemud.application.sdk.api.ordercenter.request.SdkUpdateAbnormalState;
import com.freemud.application.sdk.api.ordercenter.request.carpark.ParkingOrderCreateReq;
import com.freemud.application.sdk.api.ordercenter.response.carpark.OrderResp;
import com.freemud.application.sdk.api.ordercenter.response.BaseDownLoadResponse;
......@@ -106,8 +107,12 @@ import com.freemud.application.sdk.api.ordercenter.response.orderInfo.QueryByCod
import com.freemud.application.sdk.api.ordercenter.service.OrderDownLoadSdkService;
import com.freemud.application.sdk.api.ordercenter.service.OrderSdkService;
import com.freemud.application.sdk.api.paymentcenter.client.request.CodePayRequest;
import com.freemud.application.sdk.api.paymentcenter.client.request.PaymentCloseUnifiedOrderRequest;
import com.freemud.application.sdk.api.paymentcenter.client.request.PaymentQueryRequest;
import com.freemud.application.sdk.api.paymentcenter.client.request.SVCCardAmountRequest;
import com.freemud.application.sdk.api.paymentcenter.client.response.CodePayResponse;
import com.freemud.application.sdk.api.paymentcenter.client.response.PaymentCloseUnifiedOrderResponse;
import com.freemud.application.sdk.api.paymentcenter.client.response.PaymentQueryResponse;
import com.freemud.application.sdk.api.paymentcenter.client.response.SVCCardAmountResponse;
import com.freemud.application.sdk.api.paymentcenter.client.service.PaymentNewService;
import com.freemud.application.sdk.api.storecenter.request.GetListByCodesRequest;
......@@ -146,6 +151,7 @@ import com.google.gson.Gson;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.MapUtils;
import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.builder.ToStringBuilder;
......@@ -304,6 +310,7 @@ public class OrderServiceImpl implements Orderservice {
@Autowired
private SvcComPayClient svcComPayClient;
@Autowired
private OrderRelationFactory orderRelationFactory;
@Override
......@@ -584,6 +591,8 @@ public class OrderServiceImpl implements Orderservice {
verificationCoupon(message.getTrans_id());
log.info("调用券码结束=="+ message.getTrans_id());
}
//支付成功后
buriedPointService.paySuccessBuridPoint(partnerId,storeId,orderBean);
return sendPaySuccessNoticeMessage();
}
......@@ -1240,6 +1249,20 @@ public class OrderServiceImpl implements Orderservice {
return ResponseUtil.success(responseVo);
}
@Override
public BaseResponse timeOutOrderRefund(TimeOutOrderVo timeOutOrderVo) {
Map<String, QueryOrdersResponseDto.DataBean.OrderBean> orderBeans = this.getOrderBeanByOrderId(timeOutOrderVo.getOid());
if (MapUtils.isEmpty(orderBeans)) {
ResponseUtil.error("404","订单不存在");
}
QueryOrdersResponseDto.DataBean.OrderBean orderBean = orderBeans.get(OrderBeanType.SAASORDER.getCode());
if (OrderStatus.CALCEL.getCode().equals(orderBean.getStatus())){
this.timeOutRefund(orderBean);
}
return ResponseUtil.success();
}
private String getRedpacketsPicture(String activityId) {
if (StringUtils.isNotBlank(activityId)) {
try {
......@@ -1692,7 +1715,7 @@ public class OrderServiceImpl implements Orderservice {
if (!OrderStatus.WAIT_PAY.getCode().equals(orderBean.getStatus())) {
return ResponseUtil.error(ResponseResult.ORDER_DELETE_ERROR.getCode(), "订单状态不允许取消");
}
//
this.closeHistoryPrePay(orderBean);
CancelOrderRequest var1 = new CancelOrderRequest();
var1.setOrderId(deleteOrderVo.getOid());
var1.setPartnerId(deleteOrderVo.getPartnerId());
......@@ -2503,7 +2526,7 @@ public class OrderServiceImpl implements Orderservice {
orderPayResponse = uSvcPay(createPrepayRequestDto.getFatherOrderBean(), paymentRequest, transId, LogThreadLocal.getTrackingNo(), createPrepayRequestDto.getUnionPayCard());
} else if (totalAmount > 0 && StringUtils.isBlank(cardCode)) {
String partnerPayOvertime = this.getPartnerPayOvertime(createPrepayRequestDto.getPartnerId());
orderPayResponse = getPreOrderPay(createPrepayRequestDto.getFatherOrderBean(), paymentRequest, LogThreadLocal.getTrackingNo(), createPrepayRequestDto.getCardAmount(), transId, partnerPayOvertime);
orderPayResponse = getPreOrderPay(createPrepayRequestDto.getFatherOrderBean(), paymentRequest, LogThreadLocal.getTrackingNo(), createPrepayRequestDto.getCardAmount(), transId, partnerPayOvertime, createPrepayRequestDto.getOrderExtInfoDTO());
}
//混合支付+svc卡
else if (totalAmount > 0 && StringUtils.isNotBlank(cardCode)) {
......@@ -2723,6 +2746,9 @@ public class OrderServiceImpl implements Orderservice {
}
}
// add by miaohui for 拼单群收款判断拼单人数大于1时参与微信平台补贴活动,创建预支付时上送goodsTag,后续抽成促销服务活动时删除此逻辑 end
if (orderExtInfoDto != null && StringUtils.isNotBlank(orderExtInfoDto.getStationId())) {
request.setStationId(orderExtInfoDto.getStationId());
}
com.freemud.application.sdk.api.base.BaseResponse<UnifiedOrderResponse> responseBase = standardPaymentService.unifiedOrder(request, trackingNo);
if (!ResponseCodeConstant.RESPONSE_SUCCESS_STR.equals(responseBase.getCode())) {
log.error("支付SDK返回信息错误,trackingNo:{} request:{} response:{}", trackingNo, JSONObject.toJSONString(request), JSONObject.toJSONString(responseBase));
......@@ -3668,4 +3694,82 @@ public class OrderServiceImpl implements Orderservice {
}
return map;
}
/**
* 超时回调直接退款
* @param orderBean
*/
public void timeOutRefund(QueryOrdersResponseDto.DataBean.OrderBean orderBean) {
//调用支付退款
log.info("payment timeout callback for refund orderDto={}",JSON.toJSONString(orderBean));
Integer abState = 4;
String noPay = "8200404";
if (abState.equals(orderBean.getAbnormalState()) ) {
log.info("payment timeout callback for refund is exist");
return;
}
com.freemud.application.sdk.api.base.BaseResponse<OrderRefundResponse> response = null;
Long refundId = System.currentTimeMillis();
OrderExtInfoDto orderExtInfoDTO = gson.fromJson(orderBean.getExtInfo(), OrderExtInfoDto.class);
if (orderExtInfoDTO==null || StringUtils.isBlank(orderExtInfoDTO.getFmId())) {
log.info("payment timeout callback for refund not create pre order");
return;
}
Integer state = PayRefundStatus.SUCCESS.getCode();
orderBean.setPayVoucher(orderExtInfoDTO.getFmId());
SdkUpdateAbnormalState sdkUpdateAbnormalState = new SdkUpdateAbnormalState();
String desc = "支付未及时回调";
com.freemud.sdk.api.assortment.payment.request.OrderRefundRequest orderPayRefundRequest = orderAdapter.getOrderPayRefundRequest(orderBean, refundId, orderBean.getOid());
response = standardPaymentService.orderRefund(orderPayRefundRequest, LogTreadLocal.getTrackingNo());
log.info("payment timeout callback for refund orderId={},request={},resp={}",orderBean.getOid(),JSON.toJSONString(orderPayRefundRequest),JSON.toJSONString(response));
if (response!=null && noPay.equals(response.getCode())) {
return;
}
if (response!=null || state.equals(response.getData().getRefundStatus())) {
sdkUpdateAbnormalState.setAbnormalDesc(desc+",退款成功");
} else {
sdkUpdateAbnormalState.setAbnormalDesc(desc+",退款失败");
}
sdkUpdateAbnormalState.setPartnerId(orderBean.getCompanyId());
sdkUpdateAbnormalState.setAbnormalState(4);
sdkUpdateAbnormalState.setOrderCode(orderBean.getOid());
orderSdkService.updateAbnormalState(sdkUpdateAbnormalState);
}
private void closeHistoryPrePay(OrderBean orderBean) {
OrderExtInfoDto extInfo = JSONObject.parseObject(orderBean.getExtInfo(), OrderExtInfoDto.class);
//判断当前订单是否存在预支付订单
if(extInfo != null && StringUtils.isNotEmpty(extInfo.getFmId())){
//订单状态未支付且存在预支付订单:
// 1.查询预支付订单支付状态
PaymentQueryRequest paymentQueryRequest = new PaymentQueryRequest();
paymentQueryRequest.setPartnerId(orderBean.getCompanyId());
paymentQueryRequest.setStoreId(orderBean.getShopId());
paymentQueryRequest.setFmId(extInfo.getFmId());
paymentQueryRequest.setVer("2");
com.freemud.application.sdk.api.base.BaseResponse<PaymentQueryResponse> queryResponseBaseResponse = paymentNewService.query(paymentQueryRequest,LogThreadLocal.getTrackingNo());
//判断预支付订单状态
if(ObjectUtils.notEqual(ResponseResult.SUCCESS.getCode(), queryResponseBaseResponse.getCode())){
throw new ServiceException(ResponseResult.ORDER_PAY_GETPRE_MESSAGE_ERROR);
}
//判断当前预支付订单是否已经支付成功
if(ObjectUtils.equals(TradeState.SUCCESS.getCode(), queryResponseBaseResponse.getData().getTradeState())){
throw new ServiceException(ResponseResult.ORDER_HAS_PAID);
}
// 3.取消前一个预支付订单 调用支付取消预支付订单,如果预支付订单已经取消了再调用取消预支付订单接口会报错的
if(ObjectUtils.equals(TradeState.NOTPAY.getCode(), queryResponseBaseResponse.getData().getTradeState())) {
PaymentCloseUnifiedOrderRequest closeUnifiedOrderRequest = new PaymentCloseUnifiedOrderRequest();
closeUnifiedOrderRequest.setFmId(extInfo.getFmId());
closeUnifiedOrderRequest.setVer("2");
closeUnifiedOrderRequest.setPartnerId(orderBean.getCompanyId());
closeUnifiedOrderRequest.setStoreId(orderBean.getShopId());
com.freemud.application.sdk.api.base.BaseResponse<PaymentCloseUnifiedOrderResponse> cancelNewUnifiedOrder = paymentNewService.cancelNewUnifiedOrder(closeUnifiedOrderRequest,LogThreadLocal.getTrackingNo());
if(ObjectUtils.notEqual(ResponseResult.SUCCESS.getCode(),cancelNewUnifiedOrder.getCode())){
throw new ServiceException(ResponseResult.ORDER_PRE_PAYMENT_CLOSE_FAILED);
}
}
}
}
}
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @Title: PaymentClient
* @Package cn.freemud.service.thirdparty
* @Description: 支付服务
* @author: liming.guo
* @date: 2018/5/12519:24
* @version V1.0
* @Copyright: 2018 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
package cn.freemud.service.thirdparty;
import cn.freemud.entities.dto.PaySuccessBuridPointDto;
import cn.freemud.entities.dto.pay.CombPayResponse;
import com.freemud.sdk.api.assortment.order.request.payment.CombPayRequest;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
@FeignClient(name = "favorite",url="${saas.favorite.submit.url}")
@RequestMapping(produces = {"application/json;charset=UTF-8"})
public interface BuriedPointClient {
/**
* 支付成功埋点
*/
@PostMapping("/favorite/submit")
Integer returnSubmit(@RequestBody PaySuccessBuridPointDto paySuccessBuridPointDto);
}
......@@ -50,3 +50,6 @@
| 1.7.6-SNAPSHOT| 拼单列表查询 | 缪晖 | 2020-12-22 |
| 1.7.7-SNAPSHOT| 添加储值卡支付 | 梁崇福 | 2020-12-22 |
| 1.7.8-SNAPSHOT| 抖音支付 | 张志恒 | 2020-12-22 |
| 1.3.23.RELEASE | 拼单 | 缪晖 | 2020-12-10 |
| 1.3.24.RELEASE | coco | 刘鹏飞 | 2020-12-17 |
| 1.3.25.RELEASE | 农工商添加设备号 | 梁崇福 | 2020-12-21 |
\ No newline at end of file
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