Commit bb3225d7 by 周晓航

Merge branch 'feature-20211115-视频卖券ID1039458-zxh-look'

# Conflicts:
#	order-application-service/src/main/java/cn/freemud/controller/OrderController.java
#	order-application-service/src/main/java/cn/freemud/entities/vo/CreateOrderResponseVo.java
#	order-application-service/src/main/java/cn/freemud/service/impl/SellCouponOrderServiceImpl.java
parents 6e6221d8 3c9f00ad
......@@ -14,6 +14,10 @@ package com.freemud.sdk.api.assortment.order.enums;
import org.apache.commons.lang.StringUtils;
/**
* com.freemud.application.sdk.api.ordercenter.enums.OrderClientType
* 两个枚举类 需要同步加, 不然在订单业务代码中 会报错
*/
public enum OrderSourceType {
WE_CHAT("we_chat", "自营微信小程序", 1),
SAAS("saas", "saas 点餐", 2),
......@@ -46,6 +50,7 @@ public enum OrderSourceType {
ASSISTANT("assistant","非码小助手", 29),
SHERPAS("sherpas","食派士", 30),
CASHIER("cashier", "收银单", 36),
WE_CHAT_LIVE_SELL("we_chat_live_sell", "微信视频卖券", 37),
parkingmanual("parkingmanual", "农工商停车手工录单", 98),
PARKING("parking", "农工商停车", 99),
SDG("sdg", "闪电购", 1000);
......@@ -64,7 +69,8 @@ public enum OrderSourceType {
if (e.getCode().equals(code))
return e;
}
return null;
// 没查询到 默认设置 saas
return OrderSourceType.SAAS;
}
/**
......
......@@ -19,6 +19,22 @@
<dependencies>
<dependency>
<groupId>com.freemud.thirdparty.sdk</groupId>
<artifactId>thirdparty-weichat-sdk</artifactId>
<version>1.0.0.RELEASE</version>
<exclusions>
<exclusion>
<groupId>com.freemud.application.service.sdk</groupId>
<artifactId>common-log-sdk</artifactId>
</exclusion>
<exclusion>
<groupId>com.freemud.application.service.sdk</groupId>
<artifactId>sdk-common-base</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>2.0.1</version>
......
......@@ -61,6 +61,7 @@ import com.freemud.api.assortment.datamanager.manager.cache.CacheOpenPlatformPar
import com.freemud.application.sdk.api.log.LogThreadLocal;
import com.freemud.application.sdk.api.ordercenter.entities.v1.*;
import com.freemud.application.sdk.api.ordercenter.enums.*;
import com.freemud.application.sdk.api.ordercenter.enums.orderv1.OrderStatusV1;
import com.freemud.application.sdk.api.ordercenter.request.AfterOrderExtInfoDto;
import com.freemud.application.sdk.api.ordercenter.request.OrderConditionsReq;
import com.freemud.application.sdk.api.ordercenter.request.OrderExtInfoDto;
......@@ -3393,6 +3394,7 @@ public class OrderAdapter {
createOrderResponseVo.setOid(orderBean.getOid());
createOrderResponseVo.setWxappId(orderPayResponse.getWxAppid());
createOrderResponseVo.setFmId(orderPayResponse.getFmId());
createOrderResponseVo.setPayId(orderPayResponse.getPayId());
OrderPayResponse.PayOrderBean payOrderBean = orderPayResponse.getPayOrder();
// 腾讯有数数据上报 时间戳不能为空
createOrderResponseVo.setTimestamp(payOrderBean == null ? Instant.now().getEpochSecond() + "" : payOrderBean.getTimestamp());
......
......@@ -106,6 +106,11 @@ public class RedisKeyConstant {
public final static String KGD_PAYMENT_CANCEL_OID = "kgd:cancel_payment_oid:";
/**
* 获取生态 accessToken 的key前缀
*/
public final static String SAAS_ACCESSTOKEN_APPID = "saas:accesstoken:appid:";
/**
* cocoNotMadeGoods:商户号:门店号:yyyy-MM-dd
*
* @param partnerId
......
......@@ -22,12 +22,15 @@ import cn.freemud.entities.vo.encircle.CreateReserveOrderVo;
import cn.freemud.entities.vo.encircle.EncircleReserveBaseVo;
import cn.freemud.entities.vo.order.CreateCashierOrderVo;
import cn.freemud.entities.vo.order.CreateOrderInvoiceRequest;
import cn.freemud.entities.vo.order.OrderAppealVo;
import cn.freemud.entities.vo.order.GetInvoiceConfigRequest;
import cn.freemud.entities.vo.order.OrderAppealVo;
import cn.freemud.entities.vo.order.PaymentConfigVo;
import cn.freemud.handler.OrderReportJobHandler;
import cn.freemud.handler.WeChatLiveMsgHandle;
import cn.freemud.monitorcenter.tools.HealthUtil;
import cn.freemud.service.*;
import cn.freemud.service.EncircleOrderService;
import cn.freemud.service.Orderservice;
import cn.freemud.service.PointsMallOrderService;
import cn.freemud.service.impl.MallOrderServiceImpl;
import cn.freemud.service.impl.OrderAdapterServiceImpl;
import cn.freemud.utils.AppLogUtil;
......@@ -35,6 +38,12 @@ import cn.freemud.utils.ResponseUtil;
import cn.freemud.xxljob.OrderCountJobHandler;
import com.freemud.application.sdk.api.log.ApiAnnotation;
import com.freemud.application.sdk.api.log.LogParams;
import com.freemud.thirdparty.wechat.WeChatClient;
import com.freemud.thirdparty.wechat.constant.WeChatConstant;
import com.freemud.thirdparty.wechat.entities.WeChatBaseResponse;
import com.freemud.thirdparty.wechat.entities.vo.NullFieldVo;
import com.freemud.thirdparty.wechat.entities.vo.request.OrderDeliverySendRequestVO;
import com.freemud.thirdparty.wechat.entities.vo.request.OrderSycnPayRequestVO;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -496,6 +505,7 @@ public class OrderController {
}
/**
* 一元捐插件获取支付配置
* @param createOrderVo
......
package cn.freemud.entities.live;
import com.freemud.thirdparty.wechat.entities.vo.request.OrderCreateRequestVO;
import com.freemud.thirdparty.wechat.entities.vo.response.OrderCreateResponseVO;
import lombok.Data;
/**
* @author : xh.Z
* @email : fisherman0510@163.com
* @Date : 2021/11/16 下午4:32
* @description :
*/
@Data
public class WeChatReportVO {
private OrderCreateRequestVO requestVO;
private OrderCreateResponseVO data;
public WeChatReportVO(OrderCreateRequestVO requestVO, OrderCreateResponseVO data) {
this.requestVO = requestVO;
this.data = data;
}
private WeChatReportVO() {
}
}
package cn.freemud.entities.vo;
import cn.freemud.entities.dto.CreateOrderProductDto;
import cn.freemud.entities.dto.UserDeliveryInfoDto;
import cn.freemud.entities.dto.delivery.WeixinDeliveryAddressDto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Builder;
import lombok.Data;
import org.hibernate.validator.constraints.NotEmpty;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import java.util.List;
/**
......@@ -84,5 +78,9 @@ public class AppCreateOrderVo {
private Integer bizType;
/**
* 卖券场景值
*/
private String scene ;
}
......@@ -13,7 +13,7 @@
package cn.freemud.entities.vo;
import cn.freemud.entities.ttpay.OrderInfo;
import cn.freemud.entities.vo.order.PlugInParameter;
import com.freemud.thirdparty.wechat.entities.vo.request.OrderCreateRequestVO;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
......@@ -72,4 +72,14 @@ public class CreateOrderResponseVo {
//一元捐插件新增
private String outTradeNo;
/**
* pay_id : 微信小程序支付
*/
private String payId;
/**
* 微信视频直播卖券,需要的反馈对象
*/
private OrderCreateRequestVO wxOrderInfo;
}
package cn.freemud.entities.vo;
import cn.freemud.entities.dto.UserDeliveryInfoDto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Builder;
import lombok.Data;
import org.hibernate.validator.constraints.NotEmpty;
import javax.validation.Valid;
import javax.validation.constraints.Pattern;
/**
* All rights Reserved, Designed By www.freemud.cn
*
......@@ -67,9 +61,17 @@ public class SellCouponCreateOrderVo {
/**
* 【华莱士】【订单C端记录不分账的卡面编号】不让走分账,卡面编号--11840,11845,11846,11853,11854,11855,11857,11858,11859,11860,11861,11862,11863,11864,11865,11866,11906
*
* 1 表示不分账 ,其他情况 不传值 给基础服务
* <p>
* 1 表示不分账 ,其他情况 不传值 给基础服务
*/
private Integer unDistribution;
/**
* 视频卖券 需要带上该参数
* 卖券场景值
*/
private String scene;
}
package cn.freemud.handler;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.base.util.DateUtil;
import cn.freemud.constant.RedisKeyConstant;
import cn.freemud.entities.dto.order.CreatePrepayRequestDto;
import cn.freemud.entities.dto.wechat.GetAuthorizerRequestDto;
import cn.freemud.entities.dto.wechat.GetTokenResponseDto;
import cn.freemud.entities.live.WeChatReportVO;
import cn.freemud.entities.vo.CreateOrderResponseVo;
import cn.freemud.enums.ResponseResult;
import cn.freemud.interceptor.ServiceException;
import cn.freemud.redis.RedisCache;
import cn.freemud.service.thirdparty.EcologyAdminApplicationClient;
import cn.freemud.utils.AppLogUtil;
import cn.freemud.utils.ResponseUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.freemud.application.sdk.api.ordercenter.entities.v1.OrderBeanV1;
import com.freemud.application.sdk.api.ordercenter.entities.v1.ProductBeanV1;
import com.freemud.application.sdk.api.ordercenter.enums.OrderClientType;
import com.freemud.thirdparty.wechat.WeChatClient;
import com.freemud.thirdparty.wechat.constant.WeChatConstant;
import com.freemud.thirdparty.wechat.entities.WeChatBaseResponse;
import com.freemud.thirdparty.wechat.entities.vo.NullFieldVo;
import com.freemud.thirdparty.wechat.entities.vo.request.OrderCreateRequestVO;
import com.freemud.thirdparty.wechat.entities.vo.request.OrderDeliverySendRequestVO;
import com.freemud.thirdparty.wechat.entities.vo.request.OrderSycnPayRequestVO;
import com.freemud.thirdparty.wechat.entities.vo.response.OrderCreateResponseVO;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.util.*;
import java.util.concurrent.TimeUnit;
/**
* @author : xh.Z
* @email : fisherman0510@163.com
* @Date : 2021/11/16 上午11:25
* @description : 微信直播 卖券商品 数据处理
*/
@Component
public class WeChatLiveMsgHandle {
@Value("${wechat.live.order.path:}")
private String path;
@Value("${wechat.live.order.product.path:}")
private String productPath;
@Autowired
private EcologyAdminApplicationClient ecologyAdminApplicationClient;
@Autowired
private RedisCache redisCache;
private List<String> refresList = Arrays.asList("42001", "40001");
/**
* @param orderBean
* @param flag 1:支付成功,2:支付失败,3:用户取消,4:超时未支付;5:商家取消;10:其他原因取消
*/
public void reportOrderStatus(OrderBeanV1 orderBean, int flag) {
if (Objects.nonNull(orderBean)
&& Objects.equals(orderBean.getOrderClient(), OrderClientType.WE_CHAT_LIVE_SELL.getIndex().toString())) {
OrderSycnPayRequestVO request = new OrderSycnPayRequestVO();
String orderId = orderBean.getOid();
request.setOut_order_id(orderId);
String extInfo = orderBean.getExtInfo();
JSONObject jsonObject = JSON.parseObject(extInfo);
if (Objects.isNull(jsonObject)) {
return;
}
// 需要拿到 openid
Object openid = jsonObject.get("openid");
request.setOpenid(Objects.isNull(openid) ? "" : openid.toString());
if (flag == 1) {
// Object payTransId = jsonObject.get("payTransId");
// request.setTransaction_id(Objects.isNull(payTransId) ? "" : payTransId.toString());
request.setTransaction_id(orderId);
Object payDate = jsonObject.get("payDate");
request.setPay_time(Objects.isNull(payDate) ? "" : payDate.toString());
}
request.setAction_type(flag);
// 获取 session
String accessToken = this.getAccessToken(orderBean.getAppId(), orderBean.getParentCode());
WeChatClient weChatClient = new WeChatClient();
WeChatBaseResponse<NullFieldVo> weChatBaseResponse = weChatClient.orderApply(accessToken, request, WeChatConstant.OrderMethod.ORDER_PAY);
if (refresList.contains(weChatBaseResponse.getErrcode())) {
accessToken = this.refreshAccessToken(orderBean.getAppId(), orderBean.getParentCode());
weChatBaseResponse = weChatClient.orderApply(accessToken, request, WeChatConstant.OrderMethod.ORDER_PAY);
}
AppLogUtil.printLog("视频直播订单数据上报", JSON.toJSONString(request), JSON.toJSONString(weChatBaseResponse));
if ("0".equals(weChatBaseResponse.getErrcode())) {
// 1 支付成功进行发货
if (flag == 1) {
// 如果是支付成功, 同步发配送信息
OrderDeliverySendRequestVO requestVO = new OrderDeliverySendRequestVO();
requestVO.setOut_order_id(orderId);
requestVO.setOpenid(Objects.isNull(openid) ? "" : openid.toString());
requestVO.setFinish_all_delivery(1);
weChatBaseResponse = weChatClient.orderApply(accessToken, requestVO, WeChatConstant.OrderMethod.ORDER_SEND);
AppLogUtil.printLog("视频直播发货数据上报-发货", JSON.toJSONString(requestVO), JSON.toJSONString(weChatBaseResponse));
}
}
}
}
/**
* 组装 订单创建上报数据 对象
*
* @param createPrepayRequestDto
* @param prepayOrder
*/
public BaseResponse reportOrder(CreatePrepayRequestDto createPrepayRequestDto,
CreateOrderResponseVo prepayOrder, String scene) {
// 组装 request
OrderCreateRequestVO requestVO = this.getOrderCreateRequest(createPrepayRequestDto, prepayOrder, scene);
// 获取 session
String accessToken = this.getAccessToken(createPrepayRequestDto.getWxAppId(), createPrepayRequestDto.getPartnerId());
WeChatClient weChatClient = new WeChatClient();
// fisherman 调用sdk
WeChatBaseResponse<OrderCreateResponseVO> weChatBaseResponse = weChatClient.orderApply(accessToken, requestVO, WeChatConstant.OrderMethod.ORDER_ADD);
if (weChatBaseResponse == null) {
// 调用失败
return ResponseUtil.error(ResponseResult.SYSTEM_BUSINESS_ERROR.getCode(), "错误码" + ResponseResult.SYSTEM_BUSINESS_ERROR.getCode() + ",创建视频号订单异常,请稍后再试。");
}
AppLogUtil.printLog("视频直播订单创建", JSON.toJSONString(requestVO), JSON.toJSONString(weChatBaseResponse));
if ("0".equals(weChatBaseResponse.getErrcode())) {
// 调用成功
OrderCreateResponseVO data = weChatBaseResponse.getData();
WeChatReportVO weChatReportVO = new WeChatReportVO(requestVO, data);
return ResponseUtil.success(weChatReportVO);
}
// 处理 token失败的情况 42001 表示 accesstoken 有问题 重新调用一遍
if (refresList.contains(weChatBaseResponse.getErrcode())) {
String accessTokenNew = this.refreshAccessToken(createPrepayRequestDto.getWxAppId(), createPrepayRequestDto.getPartnerId());
WeChatBaseResponse<OrderCreateResponseVO> agResponse = weChatClient.orderApply(accessTokenNew, requestVO, WeChatConstant.OrderMethod.ORDER_ADD);
if (agResponse == null) {
// 调用失败
return ResponseUtil.error(ResponseResult.SYSTEM_BUSINESS_ERROR.getCode(), "错误码" + ResponseResult.SYSTEM_BUSINESS_ERROR.getCode() + ",创建视频号订单异常,请稍后再试。");
}
if ("0".equals(agResponse.getErrcode())) {
// 调用成功
OrderCreateResponseVO data = agResponse.getData();
WeChatReportVO weChatReportVO = new WeChatReportVO(requestVO, data);
return ResponseUtil.success(weChatReportVO);
}
return ResponseUtil.error(agResponse.getErrcode(), "错误码" + agResponse.getErrmsg() + ",创建视频号订单异常,请稍后再试。");
}
// 全部失败 直接抛出异常
return ResponseUtil.error(weChatBaseResponse.getErrcode(), "错误码" + weChatBaseResponse.getErrmsg() + ",创建视频号订单异常,请稍后再试。");
}
private String refreshAccessToken(String wxAppId, String partnerId) {
String dbAccessToken = this.getDBAccessToken(wxAppId, partnerId);
String redisKey = RedisKeyConstant.SAAS_ACCESSTOKEN_APPID + wxAppId;
this.putRedis(redisKey, dbAccessToken);
return dbAccessToken;
}
private String getDBAccessToken(String wxAppId, String partnerId) {
GetAuthorizerRequestDto request = new GetAuthorizerRequestDto();
request.setAuthorizerAppid(wxAppId);
request.setPartnerId(partnerId);
GetTokenResponseDto authorizerAccessToken = ecologyAdminApplicationClient.getAuthorizerAccessToken(request);
if (authorizerAccessToken == null || authorizerAccessToken.getResult() == null || StringUtils.isBlank(authorizerAccessToken.getResult().getAccessToken())) {
throw new ServiceException(ResponseResult.SYSTEM_BUSINESS_ERROR.getCode(), "获取生态accessToken失败");
}
String accessToken = authorizerAccessToken.getResult().getAccessToken();
return accessToken;
}
private void putRedis(String redisKey, String accessToken) {
// 存redis + 过期时间
redisCache.save(redisKey, accessToken);
redisCache.updateTTL(redisKey, 2, TimeUnit.MINUTES);
}
/**
* 获取 token
*
* @param wxAppId
* @param partnerId
* @return
*/
public String getAccessToken(String wxAppId, String partnerId) {
String redisKey = RedisKeyConstant.SAAS_ACCESSTOKEN_APPID + wxAppId;
Object value = redisCache.getValue(redisKey);
// 该操作 无需关注 重入情况
if (Objects.isNull(value)) {
String accessToken = this.getDBAccessToken(wxAppId, partnerId);
// 存redis + 过期时间
this.putRedis(redisKey, accessToken);
return accessToken;
}
return value.toString();
}
private OrderCreateRequestVO getOrderCreateRequest(CreatePrepayRequestDto createPrepayRequestDto,
CreateOrderResponseVo prepayOrder,
String scene) {
OrderCreateRequestVO requestVO = new OrderCreateRequestVO();
OrderBeanV1 orderBean = createPrepayRequestDto.getProductOrderBean();
Long gmtCreate = orderBean.getGmtCreate();
Date createTime;
if (gmtCreate == null) {
createTime = new Date();
} else {
createTime = new Date(gmtCreate);
}
requestVO.setCreate_time(DateUtil.convert2Str(createTime, DateUtil.FORMAT_YYYY_MM_DD_HHMMSS));
requestVO.setOut_order_id(orderBean.getOid());
requestVO.setOpenid(createPrepayRequestDto.getOpenId());
requestVO.setPath(path + orderBean.getOid());
requestVO.setScene(Integer.valueOf(scene));
OrderCreateRequestVO.DeliveryDetail deliveryDetail = new OrderCreateRequestVO.DeliveryDetail();
deliveryDetail.setDelivery_type(2);
requestVO.setDelivery_detail(deliveryDetail);
// 组装商品参数
OrderCreateRequestVO.OrderDetail orderDetail = this.getOrderDetail(orderBean, prepayOrder);
requestVO.setOrder_detail(orderDetail);
return requestVO;
}
private OrderCreateRequestVO.OrderDetail getOrderDetail(OrderBeanV1 orderBean, CreateOrderResponseVo prepayOrder) {
OrderCreateRequestVO.OrderDetail detail = new OrderCreateRequestVO.OrderDetail();
// payinfo
OrderCreateRequestVO.PayInfo payInfo = new OrderCreateRequestVO.PayInfo();
payInfo.setPay_method_type(0);
payInfo.setPrepay_id(prepayOrder.getPackageX());
String gmtCreate = prepayOrder.getTimestamp();
payInfo.setPrepay_time(DateUtil.convert2Str(new Date(Long.parseLong(gmtCreate + "000")), DateUtil.FORMAT_YYYY_MM_DD_HHMMSS));
detail.setPay_info(payInfo);
// priceinfo
OrderCreateRequestVO.PriceInfo priceInfo = new OrderCreateRequestVO.PriceInfo();
priceInfo.setOrder_price(orderBean.getSettlementAmount());
priceInfo.setFreight(0L);
detail.setPrice_info(priceInfo);
// list productinfo
List<ProductBeanV1> productList = orderBean.getProductList();
List<OrderCreateRequestVO.ProductInfo> productInfos = new ArrayList<>(productList.size());
productList.forEach(p -> {
OrderCreateRequestVO.ProductInfo productInfo = new OrderCreateRequestVO.ProductInfo();
productInfo.setOut_product_id(p.getProductId());
productInfo.setOut_sku_id(p.getProductId());
productInfo.setProduct_cnt(p.getNumber());
productInfo.setSale_price(p.getSalePrice());
productInfo.setReal_price(p.getSalePrice());
productInfo.setHead_img(p.getPicture());
productInfo.setTitle(p.getProductName());
// fisherman 虚拟商品的 path 未知
productInfo.setPath(productPath + p.getProductId());
productInfos.add(productInfo);
});
detail.setProduct_infos(productInfos);
return detail;
}
}
......@@ -198,7 +198,7 @@ public class AppOrderServiceImpl implements AppOrderService {
String skuId = createOrderReq.getOrderProducts().get(0).getSkuId();
//20200107提取虚拟商品券效验方法---》校验虚拟商品,如果正常则返回创建订单对象
BaseResponse createOrderRequestResponse =
sellCouponOrderService.checkOrderCoupon(customerInfo, storeResponse, trackingNo, createOrderReq.getMenuType(), Integer.valueOf(createOrderReq.getBizType()), partnerId, shopId, skuId, null);
sellCouponOrderService.checkOrderCoupon(customerInfo, storeResponse, trackingNo, createOrderReq.getMenuType(), Integer.valueOf(createOrderReq.getBizType()), partnerId, shopId, skuId, null,createOrderReq.getScene());
if (createOrderRequestResponse == null || !ResponseResult.SUCCESS.getCode().equals(createOrderRequestResponse.getCode()) || createOrderRequestResponse.getResult() == null) {
return createOrderRequestResponse;
}
......
......@@ -43,6 +43,7 @@ import cn.freemud.entities.vo.order.OrderAppealVo;
import cn.freemud.entities.vo.order.QueryOrderAppealResponseVo;
import cn.freemud.enums.OrderType;
import cn.freemud.enums.*;
import cn.freemud.handler.WeChatLiveMsgHandle;
import cn.freemud.interceptor.ServiceException;
import cn.freemud.management.entities.dto.request.BatchOrderRefundV2Request;
import cn.freemud.management.entities.dto.response.activity.GroupWorkRefundResponse;
......@@ -261,6 +262,8 @@ public class OrderServiceImpl implements Orderservice {
@Autowired
private MicroOpenplatformClient microOpenplatformClient;
@Autowired
private WeChatLiveMsgHandle weChatLiveMsgHandle;
@Override
public BaseResponse checkBeforeCreateOrder(CheckBeforeCreateOrderRequestVo requestVo) {
......@@ -1834,6 +1837,8 @@ public class OrderServiceImpl implements Orderservice {
}
// TODO: 2019/9/10 删除订单通知
orderQueueService.backOrdersStatusChange(orderBean.getOid(), orderBean.getStatus());
weChatLiveMsgHandle.reportOrderStatus(orderBean,3);
return ResponseUtil.success();
}
......
......@@ -21,8 +21,10 @@ import cn.freemud.entities.dto.product.ProductInfo;
import cn.freemud.entities.dto.product.ValidateProductInfosDto;
import cn.freemud.entities.dto.promotion.CalculationDiscountGoodsDto;
import cn.freemud.entities.dto.promotion.CalculationDiscountRequestDto;
import cn.freemud.entities.live.WeChatReportVO;
import cn.freemud.entities.vo.*;
import cn.freemud.enums.*;
import cn.freemud.handler.WeChatLiveMsgHandle;
import cn.freemud.interceptor.ServiceException;
import cn.freemud.manager.BuyProductOnceManager;
import cn.freemud.redis.RedisCache;
......@@ -34,6 +36,7 @@ import cn.freemud.service.thirdparty.PromotionDiscountClient;
import cn.freemud.service.thirdparty.StoreItemClient;
import cn.freemud.utils.AppLogUtil;
import cn.freemud.utils.ResponseUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.freemud.api.assortment.datamanager.entity.db.AssortmentOpenPlatformIappWxappStore;
import com.freemud.api.assortment.datamanager.entity.db.AssortmentOpenPlatformPartnerConfig;
......@@ -50,10 +53,12 @@ import com.freemud.application.sdk.api.log.LogThreadLocal;
import com.freemud.application.sdk.api.log.ThirdPartyLog;
import com.freemud.application.sdk.api.ordercenter.entities.v1.OrderBeanV1;
import com.freemud.application.sdk.api.ordercenter.entities.v1.ProductBeanV1;
import com.freemud.application.sdk.api.ordercenter.enums.CreateOrderSceneEnum;
import com.freemud.application.sdk.api.ordercenter.enums.OrderType;
import com.freemud.application.sdk.api.ordercenter.enums.*;
import com.freemud.application.sdk.api.ordercenter.request.OrderChangeStateReq;
import com.freemud.application.sdk.api.ordercenter.request.OrderExtInfoDto;
import com.freemud.application.sdk.api.ordercenter.request.UpdateOrderReq;
import com.freemud.application.sdk.api.ordercenter.request.create.CreateOrderRequest;
import com.freemud.application.sdk.api.ordercenter.request.create.DeliveryContactInfoCreateReq;
import com.freemud.application.sdk.api.ordercenter.request.create.OrderItemCreateReq;
......@@ -78,6 +83,7 @@ import com.freemud.sdk.api.assortment.order.response.order.BaseOrderResponse;
import com.freemud.sdk.api.assortment.order.response.order.CreateOrderResponse;
import com.freemud.sdk.api.assortment.order.response.order.PayAccessResponse;
import com.freemud.sdk.api.assortment.order.service.OrderCenterSdkService;
import com.freemud.thirdparty.wechat.entities.vo.request.OrderCreateRequestVO;
import com.google.common.collect.Maps;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.ObjectUtils;
......@@ -178,6 +184,8 @@ public class SellCouponOrderServiceImpl implements OrderFactoryService {
private AssortmentOpenPlatformPartnerConfigManager openPlatformPartnerConfigManager;
@Autowired
private AssortmentOpenPlatformIappWxappStoreManager assortmentOpenPlatformIappWxappStoreManager;
@Autowired
private WeChatLiveMsgHandle weChatLiveMsgHandle;
/**
* 抖音卖券
......@@ -224,7 +232,7 @@ public class SellCouponOrderServiceImpl implements OrderFactoryService {
}
//卖券订单biztype默认传入6
BaseResponse createOrderRequestResponse = checkOrderCoupon(userLoginInfoDto, storeResponse, trackingNo, requestVo.getMenuType(), BizTypeEnum.SALE_COUPON.getBizType(), partnerId, storeId, skuId,requestVo.getCardCode());
BaseResponse createOrderRequestResponse = checkOrderCoupon(userLoginInfoDto, storeResponse, trackingNo, requestVo.getMenuType(), BizTypeEnum.SALE_COUPON.getBizType(), partnerId, storeId, skuId,requestVo.getCardCode(),requestVo.getScene());
if (createOrderRequestResponse == null || !ResponseResult.SUCCESS.getCode().equals(createOrderRequestResponse.getCode()) || createOrderRequestResponse.getResult() == null) {
return createOrderRequestResponse;
}
......@@ -357,7 +365,7 @@ public class SellCouponOrderServiceImpl implements OrderFactoryService {
}
//卖券订单biztype默认传入6
BaseResponse createOrderRequestResponse = checkOrderCoupon(userLoginInfoDto, storeResponse, trackingNo, requestVo.getMenuType(), 6, partnerId, storeId, requestVo.getSkuId(),requestVo.getCardCode());
BaseResponse createOrderRequestResponse = checkOrderCoupon(userLoginInfoDto, storeResponse, trackingNo, requestVo.getMenuType(), 6, partnerId, storeId, requestVo.getSkuId(),requestVo.getCardCode(),requestVo.getScene());
if (createOrderRequestResponse == null || !ResponseResult.SUCCESS.getCode().equals(createOrderRequestResponse.getCode()) || createOrderRequestResponse.getResult() == null) {
return createOrderRequestResponse;
}
......@@ -493,6 +501,18 @@ public class SellCouponOrderServiceImpl implements OrderFactoryService {
//唤起支付返回参数
checkOrder.convent2CreateOrderResponseVo(createOrderResponseVo, appId, response.getData());
// fisherman 视频卖券 需要拼装额外对象 给前端
if (StringUtils.isNotBlank(requestVo.getScene()) && CreateOrderSceneEnum.verifySceneOrder.contains(requestVo.getScene())) {
BaseResponse<WeChatReportVO> baseResponse = weChatLiveMsgHandle.reportOrder(createPrepayRequestDto, createOrderResponseVo, requestVo.getScene());
if (ResponseResult.SUCCESS.getCode().equals(baseResponse.getCode())) {
WeChatReportVO weChatReportVO = baseResponse.getResult();
OrderCreateRequestVO requestVO = weChatReportVO.getRequestVO();
createOrderResponseVo.setWxOrderInfo(requestVO);
}else {
return baseResponse;
}
}
return ResponseUtil.success(createOrderResponseVo);
}
......@@ -522,6 +542,7 @@ public class SellCouponOrderServiceImpl implements OrderFactoryService {
public void updatExtInfo(UnifiedPayResponseDto response , String appId,CreatePrepayRequestDto createPrepayRequestDto){
OrderPayResponse createOrderResponseVo = new OrderPayResponse();
convent2CreateOrderResponseVo(createOrderResponseVo, appId,response);
createOrderResponseVo.setOpenId(createPrepayRequestDto.getOpenId());
BaseResponse baseEditResponse = payService.updateOrderInfo(createOrderResponseVo, createPrepayRequestDto.getOrderExtInfoDTO(), createPrepayRequestDto.getProductOrderBean(), LogThreadLocal.getTrackingNo());
}
......@@ -536,6 +557,7 @@ public class SellCouponOrderServiceImpl implements OrderFactoryService {
* @param storeId
* @param skuId
* @param cardCode
* @param scene 下单的场景
* @return
*/
public BaseResponse checkOrderCoupon(AssortmentCustomerInfoVo userLoginInfoDto,
......@@ -545,7 +567,8 @@ public class SellCouponOrderServiceImpl implements OrderFactoryService {
Integer bizType,
String partnerId,
String storeId,
String skuId,String cardCode) {
String skuId,String cardCode,
String scene) {
//校验虚拟商品是否在门店菜单
GetValidateProductInfoDto getProductInfoDto = new GetValidateProductInfoDto();
......@@ -619,7 +642,7 @@ public class SellCouponOrderServiceImpl implements OrderFactoryService {
CreateOrderRequest createOrderRequest = convent2NEWCreateOrderRequest(userLoginInfoDto,
productInfos.getData(),
activeDetailVOS,
storeResponse.getBizVO(),storeId,cardCode,skuId,menuType,bizType);
storeResponse.getBizVO(),storeId,cardCode,skuId,menuType,bizType,scene);
return ResponseUtil.success(createOrderRequest);
}
......@@ -805,7 +828,8 @@ public class SellCouponOrderServiceImpl implements OrderFactoryService {
String cardCode,
String skuId,
String channel,
Integer bizType){
Integer bizType,
String scene){
CreateOrderRequest request = new CreateOrderRequest();
Integer orderClient = OrderClientType.SAAS.getIndex();
request.setPayChannel(PayChannelType.WECHAT.getIndex().toString());
......@@ -818,6 +842,11 @@ public class SellCouponOrderServiceImpl implements OrderFactoryService {
if(UserLoginChannelEnum.APP.getCode().equals(userLoginInfoDto.getChannel())){
orderClient = OrderClientType.APP.getIndex();
}
// fisherman 视频直播卖券 需要修改 orderclient
if (StringUtils.isNotBlank(scene) && CreateOrderSceneEnum.verifySceneOrder.contains(scene)) {
orderClient = OrderClientType.WE_CHAT_LIVE_SELL.getIndex();
}
//抖音小程序
if("5".equalsIgnoreCase(userLoginInfoDto.getChannel())) {
request.setPayChannel(PayChannelType.TIKTOKPAY.getIndex().toString());
......@@ -1065,6 +1094,14 @@ public class SellCouponOrderServiceImpl implements OrderFactoryService {
request.setRemark("已完成");
OrderBaseResp updateOrderStateResp = orderSdkService.updateOrderState(request, LogThreadLocal.getTrackingNo());
orderSdkAdapter.convent2BaseOrderResponse(updateOrderStateResp);
// fisherman 直播卖券-> 需要额外上报 时间来不及 有时间 这一块需要移到 异步调用
try {
weChatLiveMsgHandle.reportOrderStatus(orderBean, 1);
}catch (Exception e){
// 不要影响主流程
}
Map<String, Object> map = Maps.newTreeMap();
map.put("code", 100);
map.put("message", "success");
......
package com.freemud.application.sdk.api.ordercenter.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
import java.util.List;
/**
* @author : xh.Z
* @email : fisherman0510@163.com
* @Date : 2021/11/16 下午2:08
* @description : 视频直播 场景值记录
*/
@AllArgsConstructor
@Getter
public enum CreateOrderSceneEnum {
LIVE_STORE_ENTER("1175", "视频号主页商店入口"),
LIVE_PRODUCT("1177", "视频号直播商品"),
LIVE_HOME_PAGE_PRODUCT("1195", "视频号主页商品tab");
private String scene;
private String name;
/**
* 卖券订单需要校验的场景值
*/
public static List<String> verifySceneOrder = Arrays.asList(CreateOrderSceneEnum.LIVE_STORE_ENTER.getScene(),
CreateOrderSceneEnum.LIVE_PRODUCT.getScene(),
CreateOrderSceneEnum.LIVE_HOME_PAGE_PRODUCT.getScene()
);
}
......@@ -11,6 +11,10 @@ package com.freemud.application.sdk.api.ordercenter.enums;
* @date: 2019/4/2 13:44
* @Copyright: 2019 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
* <p>
* <p>
* * com.freemud.application.sdk.api.ordercenter.enums.OrderClientType
* * 两个枚举类 需要同步加, 不然在订单业务代码中 会报错
*/
public enum OrderClientType {
......@@ -18,7 +22,7 @@ public enum OrderClientType {
SAAS(2, "i点餐"),
ALIPAY(3, "自营支付宝小程序"),
HTML5(4, "自营H5"),
ANDROID( 5, "自营安卓APP"),
ANDROID(5, "自营安卓APP"),
IOS(6, "自营苹果APP"),
PC_WEB(7, "自营PC-WEB"),
ELEME(8, "饿了么"),
......@@ -27,9 +31,9 @@ public enum OrderClientType {
MEITUAN(11, "美团外卖"),
APP(12, "自营APP"),
I_MEMBER(13, "i应用会员"),
I_CARGO(14 , "i应用订货"),
POS(15 , "POS"),
WAI_MEAL(19,"i围餐"),
I_CARGO(14, "i应用订货"),
POS(15, "POS"),
WAI_MEAL(19, "i围餐"),
JUBAOPEN(20, "美团服务商"),
DIANPING(21, "美团点评"),
KOUBEI(22, "口碑"),
......@@ -39,9 +43,10 @@ public enum OrderClientType {
TIKTOKPAY(27, "抖音小程序"),
BEAUTIFUL(28, "美业"),
ASSISTANT(29, "非码小助手"),
SHERPAS(30,"食派士"),
PARKING(99 , "农工商停车"),
SHERPAS(30, "食派士"),
PARKING(99, "农工商停车"),
CASHIER(36, "收银买单"),
WE_CHAT_LIVE_SELL(37, "微信视频卖券"),
;
......@@ -69,9 +74,9 @@ public enum OrderClientType {
this.name = name;
}
public static OrderClientType getOrderClientType(Integer index){
for (OrderClientType orderType : values()){
if (index.equals(orderType.getIndex())){
public static OrderClientType getOrderClientType(Integer index) {
for (OrderClientType orderType : values()) {
if (index.equals(orderType.getIndex())) {
return orderType;
}
}
......
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