Commit f784b8f1 by dingkai

Merge branch 'feature/1.9.19-蜜雪中台订单创建-dingkai'

# Conflicts:
#	order-application-service/pom.xml
parents 3f671fe9 00f06ac3
......@@ -10,7 +10,7 @@
<modelVersion>4.0.0</modelVersion>
<artifactId>assortment-ordercenter-sdk</artifactId>
<version>1.2.9.RELEASE</version>
<version>1.3.0.RELEASE</version>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
......
......@@ -24,3 +24,4 @@
| 1.2.7.RELEASE | 判断优化 | 丁凯 | 2020-04-03 |
| 1.2.8.RELEASE | 增加延时队列 | 海波 | 2020-04-13 |
| 1.2.9.RELEASE | oms接单 | 侯书虎 | 2020-04-13 |
| 1.3.0.RELEASE | app订单 | 丁凯 | 2020-04-20 |
\ No newline at end of file
......@@ -1244,6 +1244,9 @@ public class OrderSdkAdapter {
case 23:
name = "saasmall";
break;
case 12:
name = "app";
break;
default:
name = orderClientType.toString();
break;
......@@ -1285,6 +1288,9 @@ public class OrderSdkAdapter {
case 23:
name = "saas 商城";
break;
case 12:
name = "APP";
break;
default:
break;
}
......
......@@ -81,4 +81,11 @@ public class OrderExtInfoDTO {
* 微信上报异常补推使用
*/
private String sessionKey;
/**
* 来源appId
*/
private String fromAppId;
private String fmId;
}
......@@ -40,7 +40,7 @@
<dependency>
<groupId>cn.freemud</groupId>
<artifactId>assortment-ordercenter-sdk</artifactId>
<version>1.2.9.RELEASE</version>
<version>1.3.0.RELEASE</version>
</dependency>
<dependency>
<groupId>com.freemud.application.service.sdk</groupId>
......
......@@ -2336,6 +2336,25 @@ public class OrderAdapter {
return createOrderResponseVo;
}
public CreateOrderResponseVo convent2CreateFatherSonOrderNoPayResponseVo(QueryOrdersResponse.DataBean.OrderBean orderBean) {
CreateOrderResponseVo createOrderResponseVo = new CreateOrderResponseVo();
createOrderResponseVo.setOid(orderBean.getOid());
createOrderResponseVo.setWxappId("");
createOrderResponseVo.setFmId("");
createOrderResponseVo.setTimestamp("");
createOrderResponseVo.setNonceStr("");
createOrderResponseVo.setPackageX("");
createOrderResponseVo.setSignType("");
createOrderResponseVo.setSign("");
//微信新版订阅消息判断新加字段
if(orderBean != null && orderBean.getType() != null){
createOrderResponseVo.setOrderType(getNewOrderType(orderBean.getType(), orderBean.getGmtExpect()));
}
createOrderResponseVo.setOrderStr("");
createOrderResponseVo.setPaySuccess(false);
return createOrderResponseVo;
}
public OrderPayResponse convent2OrderPayResponse(UnifiedOrderResponse unifiedOrderResponse) {
OrderPayResponse responseDto = new OrderPayResponse();
responseDto.setFmId(unifiedOrderResponse.getFmId());
......@@ -2718,4 +2737,30 @@ public class OrderAdapter {
return orderTask;
}
public CreatePrepayRequestDto convertToCreatePrepayRequestDto(String partnerId, String wxAppId, String openId,
String faceCode, String cardCode, QueryOrdersResponse.DataBean.OrderBean fatherOrderBean,
QueryOrdersResponse.DataBean.OrderBean productOrderBean, long totalAmount, int cardAmount, OrderExtInfoDTO orderExtInfoDTO){
CreatePrepayRequestDto requestDto = new CreatePrepayRequestDto();
requestDto.setPartnerId(partnerId);
requestDto.setWxAppId(wxAppId);
requestDto.setOpenId(openId);
requestDto.setFaceCode(faceCode);
requestDto.setCardCode(cardCode);
requestDto.setFatherOrderBean(fatherOrderBean);
requestDto.setProductOrderBean(productOrderBean);
requestDto.setTotalAmount(totalAmount);
requestDto.setCardAmount(cardAmount);
requestDto.setOrderExtInfoDTO(orderExtInfoDTO);
return requestDto;
}
public CreatePrepayRequestDto convertToCreatePrepayRequestDto(AssortmentCustomerInfoVo userLoginInfoDto,CreateOrderVo createOrderVo,
CreateOrderOperateDto createOrderOperateDto, OrderExtInfoDTO orderExtInfoDTO){
return this.convertToCreatePrepayRequestDto(createOrderVo.getPartnerId(), userLoginInfoDto.getWxAppId(), userLoginInfoDto.getOpenId(),
createOrderVo.getFaceCode(), createOrderVo.getCardCode(), createOrderOperateDto.getFatherOrderBean(), createOrderOperateDto.getProductOrderBean(),
createOrderOperateDto.getTotalAmount() == null ? 0 : createOrderOperateDto.getTotalAmount(),
createOrderOperateDto.getCardAmount() == null ? 0 : createOrderOperateDto.getCardAmount(), orderExtInfoDTO);
}
}
......@@ -25,6 +25,7 @@ import cn.freemud.utils.ResponseUtil;
import cn.freemud.service.impl.MallOrderServiceImpl;
import com.freemud.application.sdk.api.log.ApiAnnotation;
import com.freemud.application.sdk.api.log.LogParams;
import com.freemud.sdk.api.assortment.order.response.order.CreateOrderResponse;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -218,4 +219,13 @@ public class OrderController {
return mallOrderService.orderAffirm(request);
}
/**
* 创建预支付
*/
@ApiAnnotation(logMessage = "createPrepay")
@PostMapping("/createPrepay")
public BaseResponse createPrepay(@Validated @LogParams @RequestBody CreatePrepayVo request) {
return orderAdapterService.createPrepay(request);
}
}
package cn.freemud.entities.dto.order;
import com.freemud.sdk.api.assortment.order.entities.OrderExtInfoDTO;
import com.freemud.sdk.api.assortment.order.response.order.QueryOrdersResponse;
import lombok.Data;
@Data
public class CreatePrepayRequestDto {
private String partnerId;
private String wxAppId;
private String openId;
private String faceCode;
private String cardCode;
private QueryOrdersResponse.DataBean.OrderBean fatherOrderBean;
private QueryOrdersResponse.DataBean.OrderBean productOrderBean;
private long totalAmount;
private int cardAmount;
private OrderExtInfoDTO orderExtInfoDTO;
}
......@@ -12,47 +12,54 @@
*/
package cn.freemud.entities.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class CreateOrderResponseVo {
@ApiModelProperty(value = "订单id")
private String oid;
@ApiModelProperty(value = "微信appid")
private String wxappId;
@ApiModelProperty(value = "时间戳")
private String timestamp;
@ApiModelProperty(value = "随机字符串")
private String nonceStr;
@ApiModelProperty(value = "订单详情扩展字符串")
private String packageX;
@ApiModelProperty(value = "签名方式")
private String signType;
@ApiModelProperty(value = "签名")
private String sign;
/**
* 是否支持成功 支付金额为0,现为商品券时返回true,其余为false
*/
@ApiModelProperty(value = "是否支持成功")
private Boolean paySuccess;
/**
* 非码支付商户号 用户数据上报
*/
@ApiModelProperty(value = "非码支付商户号")
private String fmId;
/**
* 下单版本号
*/
@ApiModelProperty(value = "下单版本号")
private Integer orderUpdateVer;
/**
* 订单类型
*/
@ApiModelProperty(value = "订单类型")
private Integer orderType;
/**
* 支付宝参数 唤起支付宝支付使用
*/
@ApiModelProperty(value = "支付宝参数 唤起支付宝支付使用")
private String orderStr;
}
package cn.freemud.entities.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.hibernate.validator.constraints.NotEmpty;
@Data
public class CreatePrepayVo {
/**
* 商户id
*/
@NotEmpty
@ApiModelProperty(value = "商户id")
private String partnerId;
/**
* 用户sessionId
*/
@NotEmpty
@ApiModelProperty(value = "用户sessionId")
private String sessionId;
/**
* 订单号
*/
@NotEmpty
@ApiModelProperty(value = "订单号")
private String orderCode;
/**
* 门店id
*/
@NotEmpty
@ApiModelProperty(value = "门店id")
private String storeId;
/**
* 支付appid
*/
@NotEmpty
@ApiModelProperty(value = "支付appId")
private String payAppId;
@ApiModelProperty(value = "微信openId")
private String openId;
}
......@@ -136,6 +136,10 @@ public enum ResponseResult {
ORDER_HAS_CANCELED("45053", "订单已经被取消"),
ORDER_MALL_NOT_MATCH("45054", "非商城订单,无法操作"),
AFFIRM_ORDER_FAIL("45055", "确认订单失败"),
ORDER_EMPTY_CREATE_PREPAY_FAIL("45056", "订单为空,创建预订单失败"),
ORDER_HAS_PAID("45057", "订单已支付或已完成"),
ORDER_PRE_PAYMENT_CLOSE_FAILED("45058","关闭预支付订单失败"),
ORDER_OWNER_ERROR("45059","订单归属错误"),
/**
* 支付
......
package cn.freemud.enums;
import lombok.Getter;
@Getter
public enum UserLoginChannelEnum {
WEIXIN("1", "微信"),
ALIPAY("2", "支付宝"),
APP("3", "APP");
private String code;
private String desc;
UserLoginChannelEnum(String code, String desc) {
this.code = code;
this.desc = desc;
}
}
package cn.freemud.service;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.entities.vo.CreateOrderVo;
import cn.freemud.entities.vo.CreatePrepayVo;
/**
* app订单服务
*/
public interface AppOrderService {
/**
* 创建订单
*/
BaseResponse createOrderFlow(CreateOrderVo createOrderVo);
/**
* 创建预支付
*/
BaseResponse createPrepay(CreatePrepayVo createPrepayVo);
}
......@@ -2,6 +2,7 @@ package cn.freemud.service;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.entities.vo.CreateOrderVo;
import cn.freemud.entities.vo.CreatePrepayVo;
/**
* All rights Reserved, Designed By www.freemud.cn
......@@ -23,4 +24,9 @@ public interface OrderAdapterService {
*/
BaseResponse createOrderNew(CreateOrderVo createOrderVo);
/**
* 创建预支付
*/
BaseResponse createPrepay(CreatePrepayVo createPrepayVo);
}
package cn.freemud.service.impl;
import cn.freemud.adapter.OrderAdapter;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.base.log.LogTreadLocal;
import cn.freemud.constant.ResponseCodeConstant;
import cn.freemud.entities.dto.order.CreateOrderOperateDto;
import cn.freemud.entities.dto.order.CreatePrepayRequestDto;
import cn.freemud.entities.dto.shoppingCart.ShoppingCartGoodsDto;
import cn.freemud.entities.vo.CreateOrderResponseVo;
import cn.freemud.entities.vo.CreateOrderVo;
import cn.freemud.entities.vo.CreatePrepayVo;
import cn.freemud.enums.PayStatus;
import cn.freemud.enums.ResponseResult;
import cn.freemud.enums.TradeState;
import cn.freemud.interceptor.ServiceException;
import cn.freemud.service.AppOrderService;
import cn.freemud.utils.ResponseUtil;
import com.alibaba.fastjson.JSONObject;
import com.freemud.api.assortment.datamanager.entity.vo.AssortmentCustomerInfoVo;
import com.freemud.application.sdk.api.log.LogThreadLocal;
import com.freemud.application.sdk.api.ordercenter.enums.AfterSalesType;
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.response.PaymentCloseUnifiedOrderResponse;
import com.freemud.application.sdk.api.paymentcenter.client.response.PaymentQueryResponse;
import com.freemud.application.sdk.api.paymentcenter.client.service.PaymentNewService;
import com.freemud.application.sdk.api.storecenter.response.StoreResponse;
import com.freemud.sdk.api.assortment.order.entities.OrderExtInfoDTO;
import com.freemud.sdk.api.assortment.order.request.order.CancelOrderRequest;
import com.freemud.sdk.api.assortment.order.request.order.OrderEditRequest;
import com.freemud.sdk.api.assortment.order.request.order.QueryRelatedOrderByCodeRequest;
import com.freemud.sdk.api.assortment.order.response.order.BaseOrderResponse;
import com.freemud.sdk.api.assortment.order.response.order.QueryOrdersResponse;
import com.freemud.sdk.api.assortment.order.response.order.QueryRelatedOrderByCodeResp;
import com.freemud.sdk.api.assortment.order.service.OrderCenterSdkService;
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.stereotype.Service;
import java.util.List;
@Service
public class AppOrderServiceImpl implements AppOrderService {
@Autowired
private OrderServiceImpl orderservice;
@Autowired
private CheckOrder checkOrder;
@Autowired
private OrderAdapter orderAdapter;
@Autowired
private OrderCenterSdkService orderCenterSdkService;
@Autowired
private PaymentNewService paymentNewService;
/**
* 不支持会员卡
*/
@Override
public BaseResponse createOrderFlow(CreateOrderVo createOrderVo) {
String trackingNo = LogThreadLocal.getTrackingNo();
// 查询用户信息
AssortmentCustomerInfoVo userLoginInfoDto = checkOrder.checkOrderByMember(createOrderVo, trackingNo);
// 查询门店信息 营业时间、营业状态,服务器当前时间在营业时间内 点餐桌号
StoreResponse.BizVO storeResponseDto = checkOrder.checkOrderByStore(createOrderVo, trackingNo);
// 查询购物车(内部校验券点餐方式,券是否可用) 校验当前订单类型的下单参数
ShoppingCartGoodsDto shoppingCartGoodsDto = checkOrder.getShoppingCartGoodsDto(createOrderVo);
// 查询小程序自提外卖配置信息 校验当前订单类型的下单参数 校验外卖是否满足起送条件
Integer pushOrderTime = checkOrder.checkOrderByOrderType(createOrderVo, userLoginInfoDto, storeResponseDto,shoppingCartGoodsDto.getTotalAmount(), trackingNo);
//1.5.4版本,商品库存校验与扣库存
//List<String> stockProductIds = checkOrder.getStockProductIdList(createOrderVo, shoppingCartGoodsDto);
OrderExtInfoDTO extInfo = orderservice.getExtInfo(userLoginInfoDto, storeResponseDto, pushOrderTime, createOrderVo);
//创建订单
CreateOrderOperateDto createOrderOperateDto = orderservice.sdkCreateOrder(createOrderVo, storeResponseDto, shoppingCartGoodsDto, userLoginInfoDto);
BaseResponse baseResponse = this.updateOrderExtInfo(createOrderOperateDto.getProductOrderBean(), extInfo, trackingNo);
if(baseResponse != null) {
return baseResponse;
}
//返回没创建预支付的结果
CreateOrderResponseVo responseVo = orderAdapter.convent2CreateFatherSonOrderNoPayResponseVo(createOrderOperateDto.getProductOrderBean());
return ResponseUtil.success(responseVo);
}
@Override
public BaseResponse createPrepay(CreatePrepayVo createPrepayVo) {
CreateOrderOperateDto createOrderOperateDto = this.getCreateOrderOperateDto(createPrepayVo.getOrderCode());
QueryOrdersResponse.DataBean.OrderBean productOrderBean = createOrderOperateDto.getProductOrderBean();
this.checkOrderBefore(createPrepayVo, productOrderBean);
// 关闭历史预支付订单
this.closeHistoryPrePay(productOrderBean);
OrderExtInfoDTO extInfo = JSONObject.parseObject(productOrderBean.getExtInfo(), OrderExtInfoDTO.class);
String faceCode = "";
String cardCode = "";
CreatePrepayRequestDto createPrepayRequestDto = orderAdapter.convertToCreatePrepayRequestDto(createPrepayVo.getPartnerId(), createPrepayVo.getPayAppId(), createPrepayVo.getOpenId(), faceCode,
cardCode, createOrderOperateDto.getFatherOrderBean(), createOrderOperateDto.getProductOrderBean(), createOrderOperateDto.getTotalAmount(),
createOrderOperateDto.getCardAmount(), extInfo);
return orderservice.createPrepayOrder(createPrepayRequestDto);
}
private void checkOrderBefore(CreatePrepayVo createPrepayVo, QueryOrdersResponse.DataBean.OrderBean orderBean) {
if(!PayStatus.NOT_PAY.getCode().equals(orderBean.getPayStatus())){
throw new ServiceException(ResponseResult.ORDER_HAS_PAID);
}
OrderExtInfoDTO extInfo = JSONObject.parseObject(orderBean.getExtInfo(), OrderExtInfoDTO.class);
if(extInfo == null || StringUtils.isBlank(extInfo.getSessionId()) || extInfo.getSessionId().equals(createPrepayVo.getSessionId())) {
throw new ServiceException(ResponseResult.ORDER_OWNER_ERROR);
}
}
/**
* 更新订单扩展信息
*/
private BaseResponse updateOrderExtInfo(QueryOrdersResponse.DataBean.OrderBean orderBean, OrderExtInfoDTO orderExtInfo, String trackingNo) {
OrderEditRequest orderEditRequest = new OrderEditRequest(orderBean.getOid(), JSONObject.toJSONString(orderExtInfo));
orderEditRequest.setTrackingNo(trackingNo);
BaseOrderResponse baseOrderResponse = orderCenterSdkService.orderEdit(orderEditRequest);
if (!ObjectUtils.equals(ResponseCodeConstant.RESPONSE_SUCCESS, baseOrderResponse.getErrcode())) {
CancelOrderRequest cancelOrderRequest = orderAdapter.convent2CancelOrderRequest(orderBean.getOid(), orderBean.getCompanyId(),
AfterSalesType.SYSTEM_CANCEL, "编辑订单支付信息失败", trackingNo, null);
orderCenterSdkService.orderCancel(cancelOrderRequest);
return ResponseUtil.error(baseOrderResponse.getErrcode().toString(), baseOrderResponse.getErrmsg());
}
return null;
}
private CreateOrderOperateDto getCreateOrderOperateDto(String orderId){
QueryRelatedOrderByCodeRequest baseQueryOrderRequest = new QueryRelatedOrderByCodeRequest();
baseQueryOrderRequest.setOrderCode(orderId);
baseQueryOrderRequest.setTrackingNo(LogTreadLocal.getTrackingNo());
QueryRelatedOrderByCodeResp queryOrderByIdResponse = orderCenterSdkService.queryRelatedOrderByCode(baseQueryOrderRequest);
if(queryOrderByIdResponse == null || CollectionUtils.isEmpty(queryOrderByIdResponse.getOrderBeanList())) {
throw new ServiceException(ResponseResult.ORDER_QUERYORDER_ERROR);
}
List<QueryOrdersResponse.DataBean.OrderBean> orderBeanList = queryOrderByIdResponse.getOrderBeanList();
long totalAmount = 0;
QueryOrdersResponse.DataBean.OrderBean fatherBeanListOne = new QueryOrdersResponse.DataBean.OrderBean();
QueryOrdersResponse.DataBean.OrderBean productBeanListOne = new QueryOrdersResponse.DataBean.OrderBean();
if(1 == orderBeanList.size()) {
fatherBeanListOne = orderBeanList.get(0);
productBeanListOne = orderBeanList.get(0);
totalAmount = orderBeanList.get(0).getAmount();
} else {
fatherBeanListOne = orderBeanList.stream().filter(orderBeanTemp -> orderBeanTemp.getIsParent()).findFirst().orElse(fatherBeanListOne);
productBeanListOne = orderBeanList.stream().filter(orderBeanTemp -> 1 == orderBeanTemp.getBizType()).findFirst().orElse(productBeanListOne);
totalAmount = orderBeanList.stream().mapToLong(QueryOrdersResponse.DataBean.OrderBean::getAmount).count();
}
CreateOrderOperateDto createOrderOperateDto = new CreateOrderOperateDto();
createOrderOperateDto.setTotalAmount(totalAmount);
createOrderOperateDto.setCardAmount(0);
createOrderOperateDto.setFatherOrderBean(fatherBeanListOne);
createOrderOperateDto.setProductOrderBean(productBeanListOne);
return createOrderOperateDto;
}
private void closeHistoryPrePay(QueryOrdersResponse.DataBean.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);
}
}
}
}
}
......@@ -116,7 +116,6 @@ public class CheckOrder {
return userLoginInfoDto;
}
/**
* 查询门店信息
*/
......
......@@ -2,14 +2,13 @@ package cn.freemud.service.impl;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.entities.vo.CreateOrderVo;
import cn.freemud.entities.vo.CreatePrepayVo;
import cn.freemud.entities.vo.encircle.CreateReserveOrderVo;
import cn.freemud.enums.OrderChannelType;
import cn.freemud.enums.ResponseResult;
import cn.freemud.enums.UserLoginChannelEnum;
import cn.freemud.interceptor.ServiceException;
import cn.freemud.service.EncircleOrderService;
import cn.freemud.service.MallOrderService;
import cn.freemud.service.OrderAdapterService;
import cn.freemud.service.Orderservice;
import cn.freemud.service.*;
import cn.freemud.utils.ResponseUtil;
import com.freemud.api.assortment.datamanager.entity.vo.AssortmentCustomerInfoVo;
import com.freemud.api.assortment.datamanager.enums.IappIdType;
......@@ -41,6 +40,8 @@ public class OrderAdapterServiceImpl implements OrderAdapterService {
private AssortmentCustomerInfoManager assortmentCustomerInfoManager;
@Autowired
private MallOrderService mallOrderService;
@Autowired
private AppOrderService appOrderService;
@Override
public BaseResponse createOrderNew(CreateOrderVo createOrderVo) {
......@@ -81,6 +82,13 @@ public class OrderAdapterServiceImpl implements OrderAdapterService {
return mallOrderService.createOrder(createOrderVo);
}
/**
* APP下单
*/
if (UserLoginChannelEnum.APP.getCode().equals(assortmentCustomerInfoVo.getChannel())) {
return appOrderService.createOrderFlow(createOrderVo);
}
//原标准点餐程序逻辑处理
BaseResponse baseResponse = this.checkStandardParamInfo(createOrderVo);
if(ObjectUtils.notEqual(baseResponse.getCode(),ResponseResult.SUCCESS.getCode())){
......@@ -89,6 +97,18 @@ public class OrderAdapterServiceImpl implements OrderAdapterService {
return orderservice.createOrderNew(createOrderVo);
}
@Override
public BaseResponse createPrepay(CreatePrepayVo createPrepayVo) {
AssortmentCustomerInfoVo assortmentCustomerInfoVo = assortmentCustomerInfoManager.getCustomerInfoByObject(createPrepayVo.getSessionId());
if (assortmentCustomerInfoVo == null || StringUtils.isEmpty(assortmentCustomerInfoVo.getMemberId())) {
return ResponseUtil.error(ResponseResult.NOT_LOGIN);
}
if (UserLoginChannelEnum.APP.getCode().equals(assortmentCustomerInfoVo.getChannel())) {
return appOrderService.createPrepay(createPrepayVo);
}
throw new UnsupportedOperationException("暂不支持渠道:"+assortmentCustomerInfoVo.getChannel());
}
/**
* 标准点餐参数校验
* @param createOrderVo
......
......@@ -30,6 +30,7 @@ import cn.freemud.entities.dto.QueryOrdersResponseDto.DataBean.OrderBean;
import cn.freemud.entities.dto.activity.PayGiftCheckAndJoinResponseDto;
import cn.freemud.entities.dto.activity.PayGitCheckAndJoinRequestDto;
import cn.freemud.entities.dto.order.CreateOrderOperateDto;
import cn.freemud.entities.dto.order.CreatePrepayRequestDto;
import cn.freemud.entities.dto.order.FacePayRequestDto;
import cn.freemud.entities.dto.order.FacePayResponseDto;
import cn.freemud.entities.dto.product.AttributeValue;
......@@ -279,7 +280,10 @@ public class OrderServiceImpl implements Orderservice {
OrderExtInfoDTO extInfo = getExtInfo(userLoginInfoDto, storeResponseDto, pushOrderTime, createOrderVo);
//1.9.2套餐需求同步优化创建订单代码
return this.sdkCreateOrder(createOrderVo, storeResponseDto, shoppingCartGoodsDto, userLoginInfoDto, extInfo);
CreateOrderOperateDto createOrderOperateDto = this.sdkCreateOrder(createOrderVo, storeResponseDto, shoppingCartGoodsDto, userLoginInfoDto);
//创建支付
CreatePrepayRequestDto createPrepayRequestDto = orderAdapter.convertToCreatePrepayRequestDto(userLoginInfoDto, createOrderVo, createOrderOperateDto, extInfo);
return this.createPrepayOrder(createPrepayRequestDto);
}
/**
......@@ -607,7 +611,7 @@ public class OrderServiceImpl implements Orderservice {
return newSendPaySuccessNoticeMessage();
}
private QueryRelationOrderByIdResponseDto getQueryRelationOrderByIdResponseDto(String oid) {
public QueryRelationOrderByIdResponseDto getQueryRelationOrderByIdResponseDto(String oid) {
QueryRelatedOrderByCodeRequest baseQueryOrderRequest = new QueryRelatedOrderByCodeRequest();
baseQueryOrderRequest.setOrderCode(oid);
baseQueryOrderRequest.setTrackingNo(LogTreadLocal.getTrackingNo());
......@@ -1718,51 +1722,20 @@ public class OrderServiceImpl implements Orderservice {
*
* @return
*/
private BaseResponse sdkCreateOrder(CreateOrderVo createOrderVo, StoreResponse.BizVO storeResponseDto, ShoppingCartGoodsDto shoppingCartGoodsDto,
AssortmentCustomerInfoVo userLoginInfoDto, OrderExtInfoDTO orderExtInfoDTO) {
public CreateOrderOperateDto sdkCreateOrder(CreateOrderVo createOrderVo, StoreResponse.BizVO storeResponseDto, ShoppingCartGoodsDto shoppingCartGoodsDto,
AssortmentCustomerInfoVo userLoginInfoDto) {
CreateOrderOperateDto response = new CreateOrderOperateDto();
OrderExtendedReq orderExtendedReq = orderAdapter.saveStoreInfo(storeResponseDto);
String orderWarnTime = storeResponseDto.getOrderWarnTime();
OrderClientType orderClient = OrderClientType.SAAS;
String appId = userLoginInfoDto.getWxAppId();
if("2".equals(userLoginInfoDto.getChannel()) ){
orderClient = OrderClientType.ALIPAY;
} else if(UserLoginChannelEnum.APP.getCode().equals(userLoginInfoDto.getChannel())) {
orderClient = OrderClientType.APP;
}
//创建普通订单
OrderClientType finalOrderClient = orderClient;
Function<Object, CreateOrderResponse> createOrder = (var -> {
BaseCreateOrderRequest baseCreateOrderRequest = orderAdapter.convent2CreateOrderDto(createOrderVo, shoppingCartGoodsDto, storeResponseDto);
//查询第三方商品编号
baseCreateOrderRequest = getProductCustomerCode(baseCreateOrderRequest);
//保存门店渠道信息
baseCreateOrderRequest.setOrderExtended(orderExtendedReq);
baseCreateOrderRequest.setOrderClient(finalOrderClient);
CreateOrderRequest createOrderRequest = new CreateOrderRequest();
baseCreateOrderRequest.setTrackingNo(LogThreadLocal.getTrackingNo());
createOrderRequest.setBaseCreateOrderRequest(baseCreateOrderRequest);
MqMessageRequest mqMessageRequest = new MqMessageRequest();
mqMessageRequest.setBackOrdersNotifyActivityExchange(backOrdersNotifyActivityExchange);
mqMessageRequest.setBackOrdersNotifyActivityQueue(backOrdersChangeOrderStatusConsumerQueue);
createOrderRequest.setMqMessageRequest(mqMessageRequest);
createOrderRequest.setTrackingNo(LogThreadLocal.getTrackingNo());
return orderCenterSdkService.createOrderFlow(createOrderRequest);
});
//创建父子订单
Function<Object, CreateFatherSonOrderResponse> createFatherSonOrder = (var -> {
CreateFatherSonOrderRequest createFatherSonOrderRequest = orderAdapter.convertFatherSonOrderRequest(createOrderVo, shoppingCartGoodsDto, orderExtendedReq,storeResponseDto);
//查询第三方商品编号
createFatherSonOrderRequest = getProductCustomerCodeNew(createFatherSonOrderRequest);
MqMessageRequest mqMessageRequest = new MqMessageRequest();
mqMessageRequest.setBackOrdersNotifyActivityExchange(backOrdersNotifyActivityExchange);
mqMessageRequest.setBackOrdersNotifyActivityQueue(backOrdersChangeOrderStatusConsumerQueue);
createFatherSonOrderRequest.setMqMessageRequest(mqMessageRequest);
return orderCenterSdkService.createFatherSonOrder(createFatherSonOrderRequest);
});
CreateOrderResponseVo createOrderResponse = new CreateOrderResponseVo();
PaymentRequest paymentRequest = new PaymentRequest();
long totalAmount = 0;
int cardAmount = 0;
QueryOrdersResponse.DataBean.OrderBean orderBean = new QueryOrdersResponse.DataBean.OrderBean();
QueryOrdersResponse.DataBean.OrderBean fatherBeanListOne = new QueryOrdersResponse.DataBean.OrderBean();
QueryOrdersResponse.DataBean.OrderBean productBeanListOne = new QueryOrdersResponse.DataBean.OrderBean();
if (createOrderVo.getBuyMemberCard() != null && StringUtils.isNotEmpty(createOrderVo.getBuyMemberCard().getRuleId()) && StringUtils.isNotEmpty(createOrderVo.getBuyMemberCard().getPaidId())) {
......@@ -1770,9 +1743,9 @@ public class OrderServiceImpl implements Orderservice {
int cardOriginalAmount = shoppingCartGoodsDto.getCardOriginalAmount() == null ? 0 : shoppingCartGoodsDto.getCardOriginalAmount();
int cardDiscountAmount = shoppingCartGoodsDto.getCardDiscountAmount() == null ? 0 : shoppingCartGoodsDto.getCardDiscountAmount();
cardAmount = cardOriginalAmount - cardDiscountAmount;
CreateFatherSonOrderResponse createFatherSonOrderResponse = createFatherSonOrder.apply(null);
CreateFatherSonOrderResponse createFatherSonOrderResponse = createFatherSonOrder(createOrderVo, storeResponseDto, shoppingCartGoodsDto, orderExtendedReq);
if (ObjectUtils.notEqual(Integer.valueOf(ResponseResult.SUCCESS.getCode()), createFatherSonOrderResponse.getErrcode())) {
return ResponseUtil.error(createFatherSonOrderResponse.getErrcode().toString(), createFatherSonOrderResponse.getErrmsg());
throw new ServiceException(ResponseResult.ORDER_CREATE_ERROR);
}
List<QueryOrdersResponse.DataBean.OrderBean> orderBeanList = createFatherSonOrderResponse.getOrderBeanList();
List<QueryOrdersResponse.DataBean.OrderBean> fatherBeanList = orderBeanList.stream().filter(orderBeanTemp -> orderBeanTemp.getIsParent()).collect(Collectors.toList());
......@@ -1783,45 +1756,53 @@ public class OrderServiceImpl implements Orderservice {
totalAmount = orderBeanList.stream().mapToLong(QueryOrdersResponse.DataBean.OrderBean::getAmount).count();
fatherBeanList.get(0).setShopId(storeResponseDto.getStoreCode());
fatherBeanList.get(0).setCompanyId(createOrderVo.getPartnerId());
List<QueryOrdersResponse.DataBean.OrderBean> orderBeans = createFatherSonOrderResponse.getOrderBeanList().stream().filter(orderBeanTemp -> orderBeanTemp.getBizType().equals(1)).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(orderBeans)) {
orderBean = orderBeans.get(0);
}
} else {
//普通订单
CreateOrderResponse createOrderFlowResponse = createOrder.apply(null);
CreateOrderResponse createOrderFlowResponse = createOrder(createOrderVo, storeResponseDto, shoppingCartGoodsDto, orderExtendedReq, orderClient);
if (ObjectUtils.notEqual(Integer.valueOf(ResponseResult.SUCCESS.getCode()), createOrderFlowResponse.getErrcode())) {
return ResponseUtil.error(createOrderFlowResponse.getErrcode().toString(), createOrderFlowResponse.getErrmsg());
throw new ServiceException(ResponseResult.ORDER_CREATE_ERROR);
}
orderBean = createOrderFlowResponse.getData();
fatherBeanListOne = orderBean;
productBeanListOne = orderBean;
totalAmount = orderBean.getAmount();
fatherBeanListOne = createOrderFlowResponse.getData();
productBeanListOne = createOrderFlowResponse.getData();
totalAmount = createOrderFlowResponse.getData().getAmount();
}
response.setTotalAmount(totalAmount);
response.setCardAmount(cardAmount);
response.setFatherOrderBean(fatherBeanListOne);
response.setProductOrderBean(productBeanListOne);
return response;
}
//<!---创建订单公共方法执行逻辑--->
/**
* 创建预支付订单
*/
public BaseResponse createPrepayOrder(CreatePrepayRequestDto createPrepayRequestDto) {
CreateOrderResponseVo createOrderResponse;
OrderPayResponse orderPayResponse = null;
paymentRequest = orderBodyConvertToPaymentBody(userLoginInfoDto, createOrderVo.getPartnerId(),appId);
PaymentRequest paymentRequest = orderBodyConvertToPaymentBody(createPrepayRequestDto.getOpenId(), createPrepayRequestDto.getPartnerId(), createPrepayRequestDto.getWxAppId());
long totalAmount = createPrepayRequestDto.getTotalAmount();
String cardCode = createPrepayRequestDto.getCardCode();
if (totalAmount < 0) {
throw new ServiceException(ResponseResult.PAY_AMOUNT_ERROR);
} else if (totalAmount > 0 && StringUtils.isBlank(createOrderVo.getCardCode())) {
orderPayResponse = getPreOrderPay(fatherBeanListOne, paymentRequest, LogThreadLocal.getTrackingNo(), cardAmount);
} else if (totalAmount > 0 && StringUtils.isNotBlank(createOrderVo.getCardCode())) {
} else if (totalAmount > 0 && StringUtils.isBlank(cardCode)) {
orderPayResponse = getPreOrderPay(createPrepayRequestDto.getFatherOrderBean(), paymentRequest, LogThreadLocal.getTrackingNo(), createPrepayRequestDto.getCardAmount());
} else if (totalAmount > 0 && StringUtils.isNotBlank(cardCode)) {
//svc卡支付
orderPayResponse = svcPay(createOrderVo.getCardCode(), fatherBeanListOne, paymentRequest, LogThreadLocal.getTrackingNo());
orderPayResponse = svcPay(cardCode, createPrepayRequestDto.getFatherOrderBean(), paymentRequest, LogThreadLocal.getTrackingNo());
} else {
// 0元订单如果不需要支付,自定义支付单号
orderPayResponse = getOrderPayResponse(paymentRequest, fatherBeanListOne);
orderPayResponse = getOrderPayResponse(paymentRequest, createPrepayRequestDto.getFatherOrderBean());
}
if (orderPayResponse == null) {
return failPreOrderPay(LogThreadLocal.getTrackingNo(), productBeanListOne, createOrderVo.getCardCode());
return failPreOrderPay(LogThreadLocal.getTrackingNo(), createPrepayRequestDto.getProductOrderBean(), cardCode);
}
createOrderResponse = orderAdapter.convent2CreateFatherSonOrderResponseVo(orderPayResponse, orderBean);
BaseResponse baseEditResponse = this.updateOrderInfo(orderPayResponse, orderExtInfoDTO, productBeanListOne, LogThreadLocal.getTrackingNo());
createOrderResponse = orderAdapter.convent2CreateFatherSonOrderResponseVo(orderPayResponse, createPrepayRequestDto.getProductOrderBean());
BaseResponse baseEditResponse = this.updateOrderInfo(orderPayResponse, createPrepayRequestDto.getOrderExtInfoDTO(), createPrepayRequestDto.getProductOrderBean(), LogThreadLocal.getTrackingNo());
if (baseEditResponse != null) {
return baseEditResponse;
}
if (totalAmount > 0 && StringUtils.isBlank(createOrderVo.getCardCode())) {
if (totalAmount > 0 && StringUtils.isBlank(cardCode)) {
createOrderResponse.setPaySuccess(false);
} else {
createOrderResponse.setPaySuccess(true);
......@@ -1837,15 +1818,47 @@ public class OrderServiceImpl implements Orderservice {
message.setOut_trade_no(createOrderResponse.getFmId());
message.setTrans_id(createOrderResponse.getOid());
message.setTotal_fee(0);
message.setOpenid(userLoginInfoDto.getOpenId());
message.setOpenid(createPrepayRequestDto.getOpenId());
message.setPlatform_coupon(0);
message.setMerchant_coupon(0);
this.paySuccessCallback(message);
return ResponseUtil.success(createOrderResponse);
}
}
/**
* 创建普通订单
*/
public CreateOrderResponse createOrder(CreateOrderVo createOrderVo, StoreResponse.BizVO storeResponseDto, ShoppingCartGoodsDto shoppingCartGoodsDto, OrderExtendedReq orderExtendedReq, OrderClientType orderClient) {
BaseCreateOrderRequest baseCreateOrderRequest = orderAdapter.convent2CreateOrderDto(createOrderVo, shoppingCartGoodsDto, storeResponseDto);
//查询第三方商品编号
baseCreateOrderRequest = getProductCustomerCode(baseCreateOrderRequest);
//保存门店渠道信息
baseCreateOrderRequest.setOrderExtended(orderExtendedReq);
baseCreateOrderRequest.setOrderClient(orderClient);
CreateOrderRequest createOrderRequest = new CreateOrderRequest();
baseCreateOrderRequest.setTrackingNo(LogThreadLocal.getTrackingNo());
createOrderRequest.setBaseCreateOrderRequest(baseCreateOrderRequest);
MqMessageRequest mqMessageRequest = new MqMessageRequest();
mqMessageRequest.setBackOrdersNotifyActivityExchange(backOrdersNotifyActivityExchange);
mqMessageRequest.setBackOrdersNotifyActivityQueue(backOrdersChangeOrderStatusConsumerQueue);
createOrderRequest.setMqMessageRequest(mqMessageRequest);
createOrderRequest.setTrackingNo(LogThreadLocal.getTrackingNo());
return orderCenterSdkService.createOrderFlow(createOrderRequest);
}
/**
* 创建父子订单
*/
public CreateFatherSonOrderResponse createFatherSonOrder(CreateOrderVo createOrderVo, StoreResponse.BizVO storeResponseDto, ShoppingCartGoodsDto shoppingCartGoodsDto, OrderExtendedReq orderExtendedReq) {
CreateFatherSonOrderRequest createFatherSonOrderRequest = orderAdapter.convertFatherSonOrderRequest(createOrderVo, shoppingCartGoodsDto, orderExtendedReq,storeResponseDto);
//查询第三方商品编号
createFatherSonOrderRequest = getProductCustomerCodeNew(createFatherSonOrderRequest);
MqMessageRequest mqMessageRequest = new MqMessageRequest();
mqMessageRequest.setBackOrdersNotifyActivityExchange(backOrdersNotifyActivityExchange);
mqMessageRequest.setBackOrdersNotifyActivityQueue(backOrdersChangeOrderStatusConsumerQueue);
createFatherSonOrderRequest.setMqMessageRequest(mqMessageRequest);
return orderCenterSdkService.createFatherSonOrder(createFatherSonOrderRequest);
}
private OrderPayResponse getOrderPayResponse(PaymentRequest paymentRequest, QueryOrdersResponse.DataBean.OrderBean orderBean) {
OrderPayResponse orderPayResponse;
......@@ -1935,11 +1948,11 @@ public class OrderServiceImpl implements Orderservice {
return orderPayResponse;
}
private PaymentRequest orderBodyConvertToPaymentBody(AssortmentCustomerInfoVo userLoginInfoDto, String partnerId,String appId) {
private PaymentRequest orderBodyConvertToPaymentBody(String openId, String partnerId,String appId) {
// String wxAppId = userLoginInfoDto.getWxAppId();
//设置支付信息
PaymentRequest paymentRequest = new PaymentRequest();
paymentRequest.setOpenId(userLoginInfoDto.getOpenId());
paymentRequest.setOpenId(openId);
paymentRequest.setWxAppId(appId);
AssortmentOpenPlatformWxapp wxApp = openPlatformWxappManager.findByPartnerIdAndWxappId(partnerId, appId);
String principalName = "上海非码网络科技有限公司";
......@@ -1987,6 +2000,7 @@ public class OrderServiceImpl implements Orderservice {
// 扩展字段中存储 sessionKey
orderExtInfoDto.setSessionKey(createOrderVo.getSessionKey());
orderExtInfoDto.setFormId(createOrderVo.getFormId());
orderExtInfoDto.setFromAppId(userLoginInfoDto.getWxAppId());
return orderExtInfoDto;
}
......@@ -2049,6 +2063,7 @@ public class OrderServiceImpl implements Orderservice {
, QueryOrdersResponse.DataBean.OrderBean orderBean, String trackingNo) {
// orderExtInfo = orderAdapter.getOrderExtInfo(orderPayResponse, orderExtInfo);
orderExtInfo.setOpenid(orderPayResponse.getOpenId());
orderExtInfo.setFmId(orderPayResponse.getFmId());
String prepayId = "";
OrderPayResponse.PayOrderBean payOrder = orderPayResponse.getPayOrder();
// StringUtils 依赖修改
......@@ -2316,7 +2331,7 @@ public class OrderServiceImpl implements Orderservice {
//<!---创建订单公共方法执行逻辑--->
OrderPayResponse orderPayResponse = null;
String appId = userLoginInfoDto.getWxAppId();
PaymentRequest paymentRequest = orderBodyConvertToPaymentBody(userLoginInfoDto, createOrderVo.getPartnerId(),appId);
PaymentRequest paymentRequest = orderBodyConvertToPaymentBody(userLoginInfoDto.getOpenId(), createOrderVo.getPartnerId(),appId);
//支付金额异常
if (totalAmount < 0) {
throw new ServiceException(ResponseResult.PAY_AMOUNT_ERROR);
......
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