Commit 0201fe8f by shuhu.hou@freemud.cn

Merge branch 'feature/20200325_oms接单' into qa

# Conflicts:
#	order-application-service/pom.xml
parents 4a7f4203 cb46b96e
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>assortment-ordercenter-sdk</artifactId> <artifactId>assortment-ordercenter-sdk</artifactId>
<version>1.2.7.RELEASE</version> <version>1.3.0-SNAPSHOT</version>
<dependencies> <dependencies>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
...@@ -38,7 +38,7 @@ ...@@ -38,7 +38,7 @@
<dependency> <dependency>
<groupId>cn.freemud</groupId> <groupId>cn.freemud</groupId>
<artifactId>ordercenter-sdk</artifactId> <artifactId>ordercenter-sdk</artifactId>
<version>1.1.9.RELEASE</version> <version>1.1.8.RELEASE</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.freemud.application.service.sdk</groupId> <groupId>com.freemud.application.service.sdk</groupId>
......
...@@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONObject; ...@@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONObject;
import com.freemud.application.sdk.api.couponcenter.offline.domain.ProductRedeemVO; import com.freemud.application.sdk.api.couponcenter.offline.domain.ProductRedeemVO;
import com.freemud.application.sdk.api.couponcenter.offline.domain.TransactionVO; import com.freemud.application.sdk.api.couponcenter.offline.domain.TransactionVO;
import com.freemud.application.sdk.api.couponcenter.offline.request.CouponRequest; import com.freemud.application.sdk.api.couponcenter.offline.request.CouponRequest;
import com.freemud.application.sdk.api.log.LogThreadLocal;
import com.freemud.application.sdk.api.membercenter.request.UserScoreRequest; import com.freemud.application.sdk.api.membercenter.request.UserScoreRequest;
import com.freemud.application.sdk.api.ordercenter.enums.*; import com.freemud.application.sdk.api.ordercenter.enums.*;
import com.freemud.application.sdk.api.ordercenter.request.*; import com.freemud.application.sdk.api.ordercenter.request.*;
...@@ -48,6 +49,21 @@ public class OrderSdkAdapter { ...@@ -48,6 +49,21 @@ public class OrderSdkAdapter {
private static final int STACK_SUB = 1; private static final int STACK_SUB = 1;
public BaseQueryOrderRequest getOrderConfirmRequest(String operator, QueryOrdersResponse.DataBean.OrderBean orderBean){
BaseQueryOrderRequest orderRequest = new BaseQueryOrderRequest();
orderRequest.setOrderId(orderBean.getOid());
orderRequest.setShopId(orderBean.getShopId());
orderRequest.setHasSelfDelivery(true);
orderRequest.setPartnerId(orderBean.getCompanyId());
orderRequest.setOrderType(getNewOrderTypeEnum(orderBean.getType(), orderBean.getGmtExpect()));
if(orderBean.getGmtExpect() != null && orderBean.getGmtExpect() != 0){
orderRequest.setExpectTime(cn.freemud.base.util.DateUtil.convert2String(new Date(orderBean.getGmtExpect()), cn.freemud.base.util.DateUtil.FORMAT_YYYY_MM_DD_HHMMSS));
}
orderRequest.setOperator(operator);
orderRequest.setTrackingNo(LogThreadLocal.getTrackingNo());
return orderRequest;
}
public CancelOrderRequest convent2CancelOrderRequest(String orderId, String partnerId, AfterSalesType afterSalesType, public CancelOrderRequest convent2CancelOrderRequest(String orderId, String partnerId, AfterSalesType afterSalesType,
String reason, String trackingNo, Long refund_id) { String reason, String trackingNo, Long refund_id) {
CancelOrderRequest cancelOrderRequest = new CancelOrderRequest(); CancelOrderRequest cancelOrderRequest = new CancelOrderRequest();
......
...@@ -84,6 +84,11 @@ ...@@ -84,6 +84,11 @@
<artifactId>deliverycenter-sdk</artifactId> <artifactId>deliverycenter-sdk</artifactId>
<version>1.5.RELEASE</version> <version>1.5.RELEASE</version>
</dependency> </dependency>
<dependency>
<groupId>com.freemud.application.service.sdk</groupId>
<artifactId>takeawaycenter-sdk</artifactId>
<version>1.2.3-SNAPSHOT</version>
</dependency>
<!-- 商户门店sdk --> <!-- 商户门店sdk -->
<dependency> <dependency>
<groupId>com.freemud.application.service.sdk</groupId> <groupId>com.freemud.application.service.sdk</groupId>
......
...@@ -31,11 +31,34 @@ ...@@ -31,11 +31,34 @@
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<dependency>
<groupId>com.freemud.application.service.sdk</groupId>
<artifactId>sdk-common-base</artifactId>
<version>1.3.9-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.freemud.application.service.sdk</groupId>
<artifactId>takeawaycenter-sdk</artifactId>
<version>1.2.3-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency> <dependency>
<groupId>cn.freemud</groupId> <groupId>cn.freemud</groupId>
<artifactId>assortment-ordercenter-sdk</artifactId> <artifactId>assortment-ordercenter-sdk</artifactId>
<version>1.2.3.RELEASE</version> <version>1.3.0-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
<artifactId>structure-center-sdk</artifactId>
<groupId>com.freemud.application.service.sdk</groupId>
<version>1.2-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.freemud.sdk.api.assortment</groupId>
<artifactId>assortment-messagepush-sdk</artifactId>
<version>2.6.3.RELEASE</version>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<dependency> <dependency>
...@@ -47,7 +70,8 @@ ...@@ -47,7 +70,8 @@
<dependency> <dependency>
<groupId>com.freemud.application.service.sdk</groupId> <groupId>com.freemud.application.service.sdk</groupId>
<artifactId>deliverycenter-sdk</artifactId> <artifactId>deliverycenter-sdk</artifactId>
<version>1.1.3-SNAPSHOT</version> <version>1.5.RELEASE</version>
<scope>provided</scope>
</dependency> </dependency>
<dependency> <dependency>
<groupId>cn.freemud.commons</groupId> <groupId>cn.freemud.commons</groupId>
......
package cn.freemud.management.adapter;
import com.freemud.application.sdk.api.deliverycenter.dto.CreateDeliveryOrderRequestDto;
import com.freemud.application.sdk.api.storecenter.response.StoreResponse;
import com.freemud.sdk.api.assortment.order.response.order.QueryOrdersResponse;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@Component
public class DeliverySdkAdapter {
/**
* 创建配送单请求对象
*
* @param order
* @param storeInfo
* @param deliveryCallBackUrl
* @return
*/
public CreateDeliveryOrderRequestDto buildDeliveryOrderRequestDto(QueryOrdersResponse.DataBean.OrderBean order
, StoreResponse storeInfo, String deliveryCallBackUrl) {
CreateDeliveryOrderRequestDto deliveryOrderRequestDto = new CreateDeliveryOrderRequestDto();
deliveryOrderRequestDto.setDepatchWeight(new BigDecimal(1));
deliveryOrderRequestDto.setSerialNumber(order.getDaySeq().toString());
deliveryOrderRequestDto.setOrderId(order.getOid());
deliveryOrderRequestDto.setOrderRemark(order.getRemark());
deliveryOrderRequestDto.setOrderTotalAmount(order.getAmount().intValue());
deliveryOrderRequestDto.setOrderActualAmount(order.getAmount().intValue());
deliveryOrderRequestDto.setPartnerId(order.getCompanyId());
deliveryOrderRequestDto.setOrderChannel(order.getSource());
deliveryOrderRequestDto.setStoreId(storeInfo.getBizVO().getStoreId());
deliveryOrderRequestDto.setStoreCode(storeInfo.getBizVO().getStoreCode());
StringBuffer address = new StringBuffer(storeInfo.getBizVO().getCity())
.append(storeInfo.getBizVO().getProvince())
.append(storeInfo.getBizVO().getRegion())
.append(storeInfo.getBizVO().getAddress());
deliveryOrderRequestDto.setStoreAddress(address.toString());
deliveryOrderRequestDto.setStoreLng(new BigDecimal(storeInfo.getBizVO().getLongitude()));
deliveryOrderRequestDto.setStoreLat(new BigDecimal(storeInfo.getBizVO().getLatitude()));
deliveryOrderRequestDto.setStorePhone(storeInfo.getBizVO().getPhone());
deliveryOrderRequestDto.setStoreName(order.getShopName());
deliveryOrderRequestDto.setCityName(storeInfo.getBizVO().getCity());
deliveryOrderRequestDto.setReceiverName(order.getUserName());
deliveryOrderRequestDto.setReceiverPrimaryPhone(order.getPhone());
deliveryOrderRequestDto.setReceiverAddress(order.getAddress());
deliveryOrderRequestDto.setReceiverLng(new BigDecimal(order.getLongitude()));
deliveryOrderRequestDto.setReceiverLat(new BigDecimal(order.getLatitude()));
deliveryOrderRequestDto.setOrderTime(new Date(order.getGmtCreate()));
deliveryOrderRequestDto.setCallbackUrl(deliveryCallBackUrl);
// 预约单预计送到时间
if (order.getGmtExpect() != null && order.getGmtExpect() != 0) {
deliveryOrderRequestDto.setExpectTime(new Date(order.getGmtExpect()));
}
deliveryOrderRequestDto.setIsPre(order.getGmtExpect() != null ? 1 : 0);
List<CreateDeliveryOrderRequestDto.DeliveryProductInfo> productInfos = new ArrayList<>();
order.getProductList().forEach(productList -> {
if (productList.getPrice() > 0) {
CreateDeliveryOrderRequestDto.DeliveryProductInfo deliveryProductInfo = new CreateDeliveryOrderRequestDto.DeliveryProductInfo();
deliveryProductInfo.setProductCode(productList.getProductId());
deliveryProductInfo.setProductName(productList.getProductName());
deliveryProductInfo.setProductNumber(productList.getNumber());
deliveryProductInfo.setProductPrice(productList.getPrice().intValue());
productInfos.add(deliveryProductInfo);
}
});
deliveryOrderRequestDto.setProductInfos(productInfos);
return deliveryOrderRequestDto;
}
}
package cn.freemud.management.adapter;
import cn.freemud.management.enums.OperateType;
import com.alibaba.fastjson.JSONObject;
import com.freemud.application.sdk.api.ordercenter.request.OrderExtInfoDto;
import com.freemud.application.sdk.api.structure.request.PushMessageNoticeDto;
import com.freemud.sdk.api.assortment.message.enums.MessageEventType;
import com.freemud.sdk.api.assortment.message.request.MessagePushOrderTemplateRequest;
import com.freemud.sdk.api.assortment.message.request.MessageTemplateRequest;
import com.freemud.sdk.api.assortment.order.response.order.QueryOrdersResponse;
import org.apache.commons.lang.ObjectUtils;
import org.springframework.stereotype.Component;
@Component
public class MessagePushAdapter {
public PushMessageNoticeDto convent2PushMessageNoticeDto(Integer targetType, String partnerId,
String storeId, String userId, String oid, Integer deliveryStatus, Integer cmdType) {
PushMessageNoticeDto pushMessageNoticeDto = new PushMessageNoticeDto();
pushMessageNoticeDto.setPartnerId(partnerId);
pushMessageNoticeDto.setStoreId(storeId);
pushMessageNoticeDto.setTargetId(userId);
pushMessageNoticeDto.setTargetType(targetType);
pushMessageNoticeDto.setCmd(cmdType);
pushMessageNoticeDto.setTtl(0);
pushMessageNoticeDto.setVer("1");
PushMessageNoticeDto.Message message = new PushMessageNoticeDto.Message();
message.setType(1);
if (targetType == 2) {
PushMessageNoticeDto.Message.Content content = new PushMessageNoticeDto.Message.Content();
content.setOid(oid);
content.setDeliveryStatus(deliveryStatus);
message.setContent(content);
}
pushMessageNoticeDto.setData(JSONObject.toJSONString(message));
return pushMessageNoticeDto;
}
public MessageTemplateRequest<MessagePushOrderTemplateRequest> convent2MessageTemplateRequest(QueryOrdersResponse.DataBean.OrderBean order, String reason, OperateType opType) {
OrderExtInfoDto extInfo = JSONObject.parseObject(order.getExtInfo(), OrderExtInfoDto.class);
if (extInfo==null){
return null;
}
MessageTemplateRequest<MessagePushOrderTemplateRequest> messageTemplateRequest = new MessageTemplateRequest<>();
messageTemplateRequest.setAppId(extInfo.getAppid());
messageTemplateRequest.setPartnerId(order.getCompanyId());
MessagePushOrderTemplateRequest messagePushOrderTemplateRequest = new MessagePushOrderTemplateRequest();
messagePushOrderTemplateRequest.setAddress(order.getAddress());
messagePushOrderTemplateRequest.setDaySeq(order.getDaySeq());
messagePushOrderTemplateRequest.setGmtExpect(order.getGmtExpect());
messagePushOrderTemplateRequest.setShopName(order.getShopName());
messagePushOrderTemplateRequest.setOpenId(extInfo.getOpenid());
messagePushOrderTemplateRequest.setGmtCreate(order.getGmtCreate());
messagePushOrderTemplateRequest.setOrderId(order.getOid());
messagePushOrderTemplateRequest.setPrepayId(extInfo.getPrepayId());
messagePushOrderTemplateRequest.setFormId(extInfo.getFormId());
messagePushOrderTemplateRequest.setOrderType(order.getType());
messagePushOrderTemplateRequest.setOtherCode(order.getOtherCode());
messagePushOrderTemplateRequest.setAmount(Double.valueOf(order.getAmount()));
messagePushOrderTemplateRequest.setReason(reason);
messageTemplateRequest.setData(messagePushOrderTemplateRequest);
MessageEventType messageEventType = null;
switch (opType) {
case ORDER_REJECT:
messageEventType = MessageEventType.REJECTORDER;
break;
case ORDER_DONE:
messageEventType = MessageEventType.DONEORDER;
break;
case ORDER_SEND:
//外卖订单送出发微信模板消息
if (ObjectUtils.equals(1, order.getType())) {
messageEventType = MessageEventType.DELIVERYORDER;
} else {
messageEventType = MessageEventType.APPRAISEORDER;
}
break;
case ORDER_AFFIRM:
messageEventType = MessageEventType.APPRAISEORDER;
break;
case ORDER_REJECT_REFUND:
messageEventType = MessageEventType.REFUNDREJECTORDER;
break;
default:
messageEventType = null;
}
messageTemplateRequest.setMessageEventType(messageEventType);
return messageTemplateRequest;
}
}
package cn.freemud.management.controller; package cn.freemud.management.controller;
import cn.freemud.base.entity.BaseResponse; import cn.freemud.base.entity.BaseResponse;
import cn.freemud.management.entities.DeliveryOrderRequest; import cn.freemud.management.entities.dto.request.delivery.DeliveryOrderRequest;
import cn.freemud.management.service.OrderDeliveryService; import cn.freemud.management.service.impl.OrderDeliveryService;
import com.freemud.application.sdk.api.log.ApiAnnotation; import com.freemud.application.sdk.api.log.ApiAnnotation;
import com.freemud.application.sdk.api.log.LogParams; import com.freemud.application.sdk.api.log.LogParams;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
......
package cn.freemud.management.controller;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.management.entities.dto.request.order.OrderManagerRequest;
import cn.freemud.management.enums.OperateType;
import cn.freemud.management.enums.ResponseResult;
import cn.freemud.management.service.adapter.OrderManagerAdapter;
import cn.freemud.management.util.ResponseUtil;
import com.freemud.application.sdk.api.log.ApiAnnotation;
import com.freemud.application.sdk.api.log.LogParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: OrderManagerController
* @Package cn.freemud.management.controller
* @Description:
* @author: shuhu.hou
* @date: 2020/3/26 16:09
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Slf4j
@RequestMapping("/order")
@RestController
@Validated
public class OrderManagerController {
@Autowired
private OrderManagerAdapter orderManagerAdapter;
@ApiAnnotation(logMessage = "订单履单")
@ApiOperation(value = "订单履单", notes = "订单履单", produces = "application/json")
@PostMapping("/statusOperate")
public BaseResponse deliveryCreate(@Validated @LogParams @RequestBody OrderManagerRequest request) {
OperateType byOpType = OperateType.getByOpType(request.getOperateType());
if (byOpType==null){
return ResponseUtil.error(ResponseResult.ORDER_OPERATE_TYPE_NOT_VALIDATE);
}
switch (byOpType) {
case ORDER_CONFIRM:
return orderManagerAdapter.orderConfirmTake(request);
case ORDER_REJECT:
return orderManagerAdapter.orderReject(request);
default:
return ResponseUtil.error(ResponseResult.ORDER_OPERATE_TYPE_NOT_VALIDATE);
}
}
}
package cn.freemud.management.entities.dto.request.order;
import cn.freemud.management.enums.OperateType;
import lombok.Data;
import org.hibernate.validator.constraints.NotEmpty;
import javax.validation.constraints.Size;
@Data
public class OrderManagerRequest {
/**
* 商户号
*/
@NotEmpty(message = "商户号不允许为null")
private String partnerId;
/**
* 门店号
*/
private String storeId;
/**
* 订单号
*/
@NotEmpty(message = "订单号不允许为nul")
private String orderId;
@Size(max=50,message = "原因不能超过50个字符")
private String reason;
/**
* 订单操作类型
* @see OperateType
*/
@NotEmpty(message = "操作类型不能为空")
private String operateType;
/**
* 操作人
* pos
* 开放平台
* 小助手
* 系统自动履单
*/
@NotEmpty(message = "操作人不能为空")
private String operator;
}
package cn.freemud.management.entities.dto.response.order;
import cn.freemud.management.enums.OrderStatus;
import cn.freemud.management.enums.RefundStatus;
import lombok.Data;
import org.hibernate.validator.constraints.NotEmpty;
import javax.validation.constraints.Size;
@Data
public class OrderManagerResponse {
/**
* 预订单打印时间{1:提醒时打印;2:接单时打印} 默认为1
*/
private String orderPrintConfig;
/**
* 订单预约时间
*/
private Long gmtExpect;
/**
* 订单状态
* 1=下单,2=待支付,3=接单,4=配送中,5=完成,6=取消,7=拒单,31=制作完成
* @see OrderStatus
*/
private Integer status;
/**
* 订单退款状态
* 1 申请退款 2 同意退款 3 已退货 4 退款完成 5 拒绝退款
* @see RefundStatus
*/
private Integer refundStatus;
public OrderManagerResponse(){
}
public OrderManagerResponse(String orderPrintConfig, Long gmtExpect){
this.orderPrintConfig=orderPrintConfig;
this.gmtExpect=gmtExpect;
}
public OrderManagerResponse(OrderStatus status, RefundStatus refundStatus){
if (status!=null){
this.status=status.getCode();
}
if (refundStatus!=null){
this.refundStatus=refundStatus.getCode();
}
}
public OrderManagerResponse(String orderPrintConfig, Long gmtExpect, RefundStatus refundStatus){
this.orderPrintConfig=orderPrintConfig;
this.gmtExpect=gmtExpect;
if (refundStatus!=null){
this.refundStatus=refundStatus.getCode();
}
}
}
package cn.freemud.management.enums;
public enum MessageCenterCmdType {
JIEDAN_DAYIN_TIXING(1, "推送接单-打印-提醒 消息"),
DAYIN(2, "推送接单-打印消息"),
TIXING_DAYIN(3, "推送提醒-打印消息"),
TIXING(4, "推送提醒消息"),
JIEDAN(5, "推送接单消息"),
RIDER_STATUS(6, "推送配送员状态");
private Integer cmd;
private String des;
MessageCenterCmdType(Integer cmd, String des) {
this.cmd = cmd;
this.des = des;
}
public Integer getCmd() {
return cmd;
}
public void setCmd(Integer cmd) {
this.cmd = cmd;
}
public String getDes() {
return des;
}
public void setDes(String des) {
this.des = des;
}
}
package cn.freemud.management.enums;
import org.apache.commons.lang.StringUtils;
public enum OperateType {
ORDER_CONFIRM("orderConfirm","接单"),
ORDER_REJECT("orderReject","拒单"),
ORDER_DONE("orderDone","制作完成"),
ORDER_SEND("orderSend","送出"),
ORDER_AFFIRM("orderAffirm","完成"),
ORDER_AGREE_REFUND("orderAgreeRefund","同意退款"),
ORDER_REJECT_REFUND("orderRejectRefund","拒绝退款");
/**
* 操作类型
*/
private String opType;
/**
* 操作名称
*/
private String opName;
OperateType(String opType, String opName) {
this.opType = opType;
this.opName = opName;
}
public String getOpType() {
return opType;
}
public void setOpType(String opType) {
this.opType = opType;
}
public String getOpName() {
return opName;
}
public void setOpName(String opName) {
this.opName = opName;
}
public static OperateType getByOpType(String opType){
if (StringUtils.isEmpty(opType)) {
return null;
}
for (OperateType operateType : values()) {
if (operateType.getOpType().equals(opType)) {
return operateType;
}
}
return null;
}
}
package cn.freemud.management.enums;
public enum OrderSource {
BDWM("bdwm", "百度外卖"),
JDWM("jdwm", "京东到家"),
MTWM("mtwm", "美团外卖"),
SDG("sdg", "闪电购"),
ELEME("eleme", "饿了么外卖"),
FMWD("fmwd", "非码微店"),
MALL("mall", "非码Mall"),
SAAS("saas", "saas点餐"),
ALIPAY("alipay", "支付宝");
private String source;
private String sourceName;
OrderSource(String source, String sourceName) {
this.source = source;
this.sourceName = sourceName;
}
public String getSource() {
return source;
}
public void setSource(String source) {
this.source = source;
}
public String getSourceName() {
return sourceName;
}
public void setSourceName(String sourceName) {
this.sourceName = sourceName;
}
}
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @Title: OrderType
* @Package cn.freemud.enums
* @Description: 订单状态
* @author: liming.guo
* @date: 2018/5/21 14:43
* @version V1.0
* @Copyright: 2018 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
package cn.freemud.management.enums;
public enum OrderStatus {
TAKE_ORDER(1, "下单"),
WAIT_PAY(2, "待支付"),
RECEIPT(3, "接单"),
DISTRIBUTION(4, "配送中"),
COMPLETE(5, "完成"),
CALCEL(6, "取消"),
REFUSE(7,"拒单"),
COMPLETE_MAKE(31, "制作完成");
private Integer code;
private String desc;
OrderStatus(Integer code, String desc) {
this.code = code;
this.desc = desc;
}
public static Integer[] getAllCodes() {
Integer[] codeArray = new Integer[values().length];
int i = 0;
for (OrderStatus orderStatus : values()) {
codeArray[i] = orderStatus.getCode();
i++;
}
return codeArray;
}
public static OrderStatus getByCode(Integer code) {
if (code == null) {
return null;
}
for (OrderStatus orderStatus : values()) {
if (orderStatus.getCode().equals(code)) {
return orderStatus;
}
}
return null;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
}
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @Title: OrderType
* @Package cn.freemud.enums
* @Description: 订单状态
* @author: liming.guo
* @date: 2018/5/21 14:43
* @version V1.0
* @Copyright: 2018 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
package cn.freemud.management.enums;
public enum RefundStatus {
APPLY_REFUND(1, "申请退款"),
AGREE_REFUND(2, "同意退款"),
ALREADY_REFUND(3, "已退货"),
COMPLETE_REFUND(4, "退款完成"),
REFUSE_REFUND(5, "拒绝退款");
private Integer code;
private String desc;
RefundStatus(Integer code, String desc) {
this.code = code;
this.desc = desc;
}
public static RefundStatus getByCode(Integer code) {
for (RefundStatus status : values()) {
if (status.getCode().equals(code)) {
return status;
}
}
return null;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
}
package cn.freemud.management.service; package cn.freemud.management.service;
import cn.freemud.management.adapter.MessagePushAdapter;
import cn.freemud.management.enums.DeliveryStatus; import cn.freemud.management.enums.DeliveryStatus;
import cn.freemud.management.enums.MessageCenterCmdType;
import cn.freemud.management.enums.OperateType;
import cn.freemud.management.enums.OrderSource;
import com.freemud.application.sdk.api.log.ErrorLog;
import com.freemud.application.sdk.api.log.LogThreadLocal;
import com.freemud.application.sdk.api.structure.request.PushMessageNoticeDto;
import com.freemud.application.sdk.api.structure.service.MessageCenterClient;
import com.freemud.sdk.api.assortment.message.request.MessagePushOrderTemplateRequest;
import com.freemud.sdk.api.assortment.message.request.MessageTemplateRequest;
import com.freemud.sdk.api.assortment.message.service.IMessageTemplatePushService;
import com.freemud.sdk.api.assortment.order.request.order.AssortmentUpdateDeliveryAbnormalRequest; import com.freemud.sdk.api.assortment.order.request.order.AssortmentUpdateDeliveryAbnormalRequest;
import com.freemud.sdk.api.assortment.order.request.order.BaseQueryOrderRequest; import com.freemud.sdk.api.assortment.order.request.order.BaseQueryOrderRequest;
import com.freemud.sdk.api.assortment.order.request.order.UpdateDeliveryInfoByIdRequest; import com.freemud.sdk.api.assortment.order.request.order.UpdateDeliveryInfoByIdRequest;
...@@ -8,30 +19,62 @@ import com.freemud.sdk.api.assortment.order.response.order.QueryOrderByIdRespons ...@@ -8,30 +19,62 @@ import com.freemud.sdk.api.assortment.order.response.order.QueryOrderByIdRespons
import com.freemud.sdk.api.assortment.order.response.order.QueryOrdersResponse; import com.freemud.sdk.api.assortment.order.response.order.QueryOrdersResponse;
import com.freemud.sdk.api.assortment.order.service.OrderCenterSdkService; import com.freemud.sdk.api.assortment.order.service.OrderCenterSdkService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@Service @Service
@Slf4j @Slf4j
public class OrderBaseService { public class OrderBaseService {
private static final int SUCCESS = 100;
@Autowired @Autowired
private OrderCenterSdkService orderCenterSdkService; private OrderCenterSdkService orderCenterSdkService;
@Autowired
private MessageCenterClient messageCenterClient;
@Autowired
private MessagePushAdapter messagePushAdapter;
@Autowired
@Qualifier("messageTemplatePushOrderService")
private IMessageTemplatePushService<MessagePushOrderTemplateRequest> messageTemplatePushService;
public QueryOrdersResponse.DataBean.OrderBean getByOrderCode(String orderCode) { public QueryOrdersResponse.DataBean.OrderBean getByOrderCode(String orderCode) {
BaseQueryOrderRequest queryRequest = new BaseQueryOrderRequest();
queryRequest.setOrderId(orderCode);
QueryOrderByIdResponse response = orderCenterSdkService.queryOrderById(queryRequest);
if (ObjectUtils.notEqual(response.getErrcode(), SUCCESS) || response.getData() == null) {
return null;
}
return response.getData();
}
public void sendMessage(QueryOrdersResponse.DataBean.OrderBean orderBean, OperateType opType, String reason) {
//发送消息到pos消息中心
PushMessageNoticeDto pushMessageNoticeDto1 = null;
try {
pushMessageNoticeDto1 = messagePushAdapter.convent2PushMessageNoticeDto(2, orderBean.getCompanyId(), orderBean.getShopId(), null, orderBean.getOid(), null, MessageCenterCmdType.JIEDAN_DAYIN_TIXING.getCmd());
messageCenterClient.createMessage(pushMessageNoticeDto1, LogThreadLocal.getTrackingNo());
} catch (Exception e) {
ErrorLog.printErrorLog("sendMessageCenterError", "", pushMessageNoticeDto1, e);
}
//发送微信模板消息
if (orderBean.getExtInfo() != null && !(OrderSource.SAAS.getSource().equals(orderBean.getSource()) || OrderSource.ALIPAY.getSource().equals(orderBean.getSource()))) {
return;
}
MessageTemplateRequest<MessagePushOrderTemplateRequest> messageTemplateRequest = null;
try { try {
BaseQueryOrderRequest queryRequest = new BaseQueryOrderRequest(); messageTemplateRequest = messagePushAdapter.convent2MessageTemplateRequest(orderBean, reason, opType);
queryRequest.setOrderId(orderCode); if (messageTemplateRequest!=null && messageTemplateRequest.getMessageEventType() != null) {
QueryOrderByIdResponse response = orderCenterSdkService.queryOrderById(queryRequest); this.messageTemplatePushService.sendTemplateMsg(messageTemplateRequest);
if (response.getErrcode() == 100) {
return response.getData();
} }
return response.getData(); } catch (Exception e) {
} catch (Exception ex) { ErrorLog.printErrorLog("sendTemplateMsgError", "", messageTemplateRequest, e);
ex.printStackTrace();
return null;
} }
} }
/** /**
......
package cn.freemud.management.service;
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 com.freemud.sdk.api.assortment.order.response.order.QueryOrdersResponse;
/**
* 订单操作接口
*/
public interface OrderManagerService {
/**
* 接单
* @param request 请求参数
* @param orderBean 订单实体
* @return
*/
BaseResponse<OrderManagerResponse> orderConfirm(OrderManagerRequest request, QueryOrdersResponse.DataBean.OrderBean orderBean);
}
package cn.freemud.management.service.adapter;
import cn.freemud.management.enums.OrderSource;
import cn.freemud.management.service.OrderManagerService;
import cn.freemud.management.service.impl.SaasOrderMangerServiceImpl;
import cn.freemud.management.service.impl.WaimaiOrderMangerServiceImpl;
import com.freemud.sdk.api.assortment.order.response.order.QueryOrdersResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Service;
/**
* 根据渠道获取渠道操作实体类
*/
@Service
public class OrderBeanFactory {
@Autowired
private ApplicationContext applicationContext;
public OrderManagerService getOrderManagerService(QueryOrdersResponse.DataBean.OrderBean orderBean){
String source = orderBean.getSource();
if (OrderSource.BDWM.getSource().equals(source) || OrderSource.JDWM.getSource().equals(source)
|| OrderSource.MTWM.getSource().equals(source) || OrderSource.ELEME.getSource().equals(source)){
return applicationContext.getBean(WaimaiOrderMangerServiceImpl.class);
}
return applicationContext.getBean(SaasOrderMangerServiceImpl.class);
}
}
package cn.freemud.management.service.adapter;
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.enums.ResponseResult;
import cn.freemud.management.service.OrderBaseService;
import cn.freemud.management.service.impl.OrderVerifyService;
import com.freemud.sdk.api.assortment.order.response.order.QueryOrdersResponse;
import org.apache.commons.lang.ObjectUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class OrderManagerAdapter {
@Autowired
private OrderVerifyService orderVerifyService;
@Autowired
private OrderBaseService orderBaseService;
@Autowired
private OrderBeanFactory orderBeanFactory;
/**
* 接单
*
* @param request
* @return
*/
public BaseResponse<OrderManagerResponse> orderConfirmTake(OrderManagerRequest request) {
//查询订单
QueryOrdersResponse.DataBean.OrderBean orderBean = orderBaseService.getByOrderCode(request.getOrderId());
//订单接单参数校验
BaseResponse verifyResponse = orderVerifyService.orderConfirmTakeVerify(orderBean, request);
if (ObjectUtils.notEqual(verifyResponse.getCode(), ResponseResult.SUCCESS.getCode())) {
return verifyResponse;
}
return orderBeanFactory.getOrderManagerService(orderBean).orderConfirm(request, orderBean);
}
/**
* 拒单
* @param request
* @return
*/
public BaseResponse orderReject(OrderManagerRequest request) {
return null;
}
}
package cn.freemud.management.service; package cn.freemud.management.service.impl;
import cn.freemud.base.entity.BaseResponse; import cn.freemud.base.entity.BaseResponse;
import cn.freemud.base.log.LogTreadLocal; import cn.freemud.base.log.LogTreadLocal;
import cn.freemud.management.entities.DeliveryOrderRequest; import cn.freemud.management.adapter.DeliverySdkAdapter;
import cn.freemud.management.entities.dto.request.delivery.DeliveryOrderRequest;
import cn.freemud.management.enums.DeliveryStatus; import cn.freemud.management.enums.DeliveryStatus;
import cn.freemud.management.util.CheckException; import cn.freemud.management.enums.ResponseResult;
import cn.freemud.management.service.OrderBaseService;
import cn.freemud.management.util.CommonResp; import cn.freemud.management.util.CommonResp;
import cn.freemud.management.util.ResponseUtil;
import com.freemud.application.sdk.api.deliverycenter.dto.CancelDeliveryOrderRequestDto; import com.freemud.application.sdk.api.deliverycenter.dto.CancelDeliveryOrderRequestDto;
import com.freemud.application.sdk.api.deliverycenter.dto.CreateDeliveryOrderRequestDto; import com.freemud.application.sdk.api.deliverycenter.dto.CreateDeliveryOrderRequestDto;
import com.freemud.application.sdk.api.deliverycenter.response.CreateDeliveryOrderResponseDto; import com.freemud.application.sdk.api.deliverycenter.response.CreateDeliveryOrderResponseDto;
...@@ -17,7 +20,6 @@ import com.freemud.application.sdk.api.storecenter.response.StoreResponse; ...@@ -17,7 +20,6 @@ import com.freemud.application.sdk.api.storecenter.response.StoreResponse;
import com.freemud.application.sdk.api.storecenter.service.StoreCenterService; import com.freemud.application.sdk.api.storecenter.service.StoreCenterService;
import com.freemud.sdk.api.assortment.order.enums.OrderSourceType; import com.freemud.sdk.api.assortment.order.enums.OrderSourceType;
import com.freemud.sdk.api.assortment.order.response.order.QueryOrdersResponse; import com.freemud.sdk.api.assortment.order.response.order.QueryOrdersResponse;
import com.google.common.base.Throwables;
import javafx.util.Pair; import javafx.util.Pair;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.ObjectUtils; import org.apache.commons.lang.ObjectUtils;
...@@ -26,11 +28,6 @@ import org.springframework.beans.factory.annotation.Autowired; ...@@ -26,11 +28,6 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@Slf4j @Slf4j
@Service @Service
public class OrderDeliveryService { public class OrderDeliveryService {
...@@ -41,6 +38,8 @@ public class OrderDeliveryService { ...@@ -41,6 +38,8 @@ public class OrderDeliveryService {
private DeliveryService deliveryService; private DeliveryService deliveryService;
@Autowired @Autowired
private OrderBaseService orderBaseService; private OrderBaseService orderBaseService;
@Autowired
private DeliverySdkAdapter deliverySdkAdapter;
@Value("${saas.order.delivery.callBackUrl}") @Value("${saas.order.delivery.callBackUrl}")
private String deliveryCallBackUrl; private String deliveryCallBackUrl;
...@@ -59,18 +58,8 @@ public class OrderDeliveryService { ...@@ -59,18 +58,8 @@ public class OrderDeliveryService {
if (null == orderBean) { if (null == orderBean) {
return CommonResp.fail("订单不存在"); return CommonResp.fail("订单不存在");
} }
Pair<Boolean, String> pair = checkOrderOfDelivery(orderBean); Pair<Boolean, String> delivery = this.createDelivery(orderBean, null, operator);
if (!pair.getKey()) { return delivery.getKey()? ResponseUtil.success():ResponseUtil.error(ResponseResult.DELIVERY_CREATE_ORDER_ERROR);
log.info("无需创建配送单({}),{}", orderBean.getOid(), pair.getValue());
return CommonResp.success(pair.getValue());
}
try {
this.createDelivery(orderBean, operator);
} catch (CheckException e) {
log.error("创建配送单失败({}),trace:{}", orderCode, Throwables.getStackTraceAsString(e));
return CommonResp.fail(e.getMessage());
}
return CommonResp.success();
} }
/** /**
...@@ -79,15 +68,19 @@ public class OrderDeliveryService { ...@@ -79,15 +68,19 @@ public class OrderDeliveryService {
* @param orderBean * @param orderBean
* @return * @return
*/ */
public Boolean createDelivery(QueryOrdersResponse.DataBean.OrderBean orderBean, String operator) { public Pair<Boolean, String> createDelivery(QueryOrdersResponse.DataBean.OrderBean orderBean,StoreResponse storeInfo, String operator) {
StoreInfoRequest storeInfoRequestDto = new StoreInfoRequest(orderBean.getCompanyId(), orderBean.getShopId()); Pair<Boolean, String> pair = checkOrderOfDelivery(orderBean);
StoreResponse storeInfo = storeCenterService.getStoreInfo(storeInfoRequestDto, LogTreadLocal.getTrackingNo()); if (!pair.getKey()) {
if (SUCCESS != storeInfo.getStatusCode() || storeInfo.getBizVO() == null) { return new Pair<>(true, "该订单不是外卖类型订单,无需创建配送单");
throw new CheckException("查询门店信息失败"); }
if (storeInfo==null){
storeInfo = storeCenterService.getStoreInfo(new StoreInfoRequest(orderBean.getCompanyId(), orderBean.getShopId()), LogTreadLocal.getTrackingNo());
if (SUCCESS != storeInfo.getStatusCode() || storeInfo.getBizVO() == null) {
return new Pair<>(false, "获取门店信息失败");
}
} }
// 调用配送系统创建配送单 // 调用配送系统创建配送单
CreateDeliveryOrderRequestDto requestDto = buildDeliveryOrderRequestDto(orderBean, storeInfo, deliveryCallBackUrl); CreateDeliveryOrderRequestDto requestDto = deliverySdkAdapter.buildDeliveryOrderRequestDto(orderBean, storeInfo, deliveryCallBackUrl);
CreateDeliveryOrderResponseDto deliveryResponse = deliveryService.deliveryOrderAdd(requestDto, LogTreadLocal.getTrackingNo()); CreateDeliveryOrderResponseDto deliveryResponse = deliveryService.deliveryOrderAdd(requestDto, LogTreadLocal.getTrackingNo());
if (StringUtils.isBlank(operator)) { if (StringUtils.isBlank(operator)) {
...@@ -97,11 +90,11 @@ public class OrderDeliveryService { ...@@ -97,11 +90,11 @@ public class OrderDeliveryService {
if (deliveryResponse == null || SUCCESS != deliveryResponse.getCode() || deliveryResponse.getData() == null) { if (deliveryResponse == null || SUCCESS != deliveryResponse.getCode() || deliveryResponse.getData() == null) {
String deliveryId = deliveryResponse != null && deliveryResponse.getData() != null ? deliveryResponse.getData().getDeliveryId() : ""; String deliveryId = deliveryResponse != null && deliveryResponse.getData() != null ? deliveryResponse.getData().getDeliveryId() : "";
orderBaseService.updateDeliveryAbnormal(orderBean.getCompanyId(), orderBean.getOid(), deliveryId, operator); orderBaseService.updateDeliveryAbnormal(orderBean.getCompanyId(), orderBean.getOid(), deliveryId, operator);
throw new CheckException("创建配送单信息失败,配送状态更新为配送异常"); return new Pair<>(true, "创建配送单信息失败,配送状态更新为配送异常");
} }
// 创建配送单成功 // 创建配送单成功
orderBaseService.updateDeliverySuccess(orderBean.getOid(), deliveryResponse.getData().getDeliveryId(), operator); orderBaseService.updateDeliverySuccess(orderBean.getOid(), deliveryResponse.getData().getDeliveryId(), operator);
return true; return new Pair<>(true, "创建配送单成功");
} }
/** /**
...@@ -129,64 +122,6 @@ public class OrderDeliveryService { ...@@ -129,64 +122,6 @@ public class OrderDeliveryService {
return new Pair<>(true, "success"); return new Pair<>(true, "success");
} }
/**
* 创建配送单请求对象
*
* @param order
* @param storeInfo
* @param deliveryCallBackUrl
* @return
*/
private CreateDeliveryOrderRequestDto buildDeliveryOrderRequestDto(QueryOrdersResponse.DataBean.OrderBean order
, StoreResponse storeInfo, String deliveryCallBackUrl) {
CreateDeliveryOrderRequestDto deliveryOrderRequestDto = new CreateDeliveryOrderRequestDto();
deliveryOrderRequestDto.setDepatchWeight(new BigDecimal(1));
deliveryOrderRequestDto.setSerialNumber(order.getDaySeq().toString());
deliveryOrderRequestDto.setOrderId(order.getOid());
deliveryOrderRequestDto.setOrderRemark(order.getRemark());
deliveryOrderRequestDto.setOrderTotalAmount(order.getAmount().intValue());
deliveryOrderRequestDto.setOrderActualAmount(order.getAmount().intValue());
deliveryOrderRequestDto.setPartnerId(order.getCompanyId());
deliveryOrderRequestDto.setOrderChannel(order.getSource());
deliveryOrderRequestDto.setStoreId(storeInfo.getBizVO().getStoreId());
deliveryOrderRequestDto.setStoreCode(storeInfo.getBizVO().getStoreCode());
StringBuffer address = new StringBuffer(storeInfo.getBizVO().getCity())
.append(storeInfo.getBizVO().getProvince())
.append(storeInfo.getBizVO().getRegion())
.append(storeInfo.getBizVO().getAddress());
deliveryOrderRequestDto.setStoreAddress(address.toString());
deliveryOrderRequestDto.setStoreLng(new BigDecimal(storeInfo.getBizVO().getLongitude()));
deliveryOrderRequestDto.setStoreLat(new BigDecimal(storeInfo.getBizVO().getLatitude()));
deliveryOrderRequestDto.setStorePhone(storeInfo.getBizVO().getPhone());
deliveryOrderRequestDto.setStoreName(order.getShopName());
deliveryOrderRequestDto.setCityName(storeInfo.getBizVO().getCity());
deliveryOrderRequestDto.setReceiverName(order.getUserName());
deliveryOrderRequestDto.setReceiverPrimaryPhone(order.getPhone());
deliveryOrderRequestDto.setReceiverAddress(order.getAddress());
deliveryOrderRequestDto.setReceiverLng(new BigDecimal(order.getLongitude()));
deliveryOrderRequestDto.setReceiverLat(new BigDecimal(order.getLatitude()));
deliveryOrderRequestDto.setOrderTime(new Date(order.getGmtCreate()));
deliveryOrderRequestDto.setCallbackUrl(deliveryCallBackUrl);
// 预约单预计送到时间
if (order.getGmtExpect() != null && order.getGmtExpect() != 0) {
deliveryOrderRequestDto.setExpectTime(new Date(order.getGmtExpect()));
}
deliveryOrderRequestDto.setIsPre(order.getGmtExpect() != null ? 1 : 0);
List<CreateDeliveryOrderRequestDto.DeliveryProductInfo> productInfos = new ArrayList<>();
order.getProductList().forEach(productList -> {
if (productList.getPrice() > 0) {
CreateDeliveryOrderRequestDto.DeliveryProductInfo deliveryProductInfo = new CreateDeliveryOrderRequestDto.DeliveryProductInfo();
deliveryProductInfo.setProductCode(productList.getProductId());
deliveryProductInfo.setProductName(productList.getProductName());
deliveryProductInfo.setProductNumber(productList.getNumber());
deliveryProductInfo.setProductPrice(productList.getPrice().intValue());
productInfos.add(deliveryProductInfo);
}
});
deliveryOrderRequestDto.setProductInfos(productInfos);
return deliveryOrderRequestDto;
}
/** /**
* 取消外卖配送单 * 取消外卖配送单
......
package cn.freemud.management.service.impl;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.management.entities.dto.request.order.OrderManagerRequest;
import cn.freemud.management.enums.OrderStatus;
import cn.freemud.management.enums.ResponseResult;
import cn.freemud.management.util.ResponseUtil;
import com.freemud.application.sdk.api.ordercenter.enums.OperateClient;
import com.freemud.application.sdk.api.ordercenter.enums.OperateType;
import com.freemud.sdk.api.assortment.order.response.order.QueryOrdersResponse;
import org.apache.commons.lang.ObjectUtils;
import org.springframework.stereotype.Service;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: OrderVerifyService
* @Package cn.freemud.management.service.impl
* @Description:
* @author: shuhu.hou
* @date: 2020/3/26 16:04
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Service
public class OrderVerifyService {
/**
* 接单校验
*
* @param orderBean
* @param request
* @return
*/
public BaseResponse orderConfirmTakeVerify(QueryOrdersResponse.DataBean.OrderBean orderBean, OrderManagerRequest request) {
if (orderBean == null) {
return ResponseUtil.error(ResponseResult.ORDER_NOT_EXIST);
}
if (!OrderStatus.TAKE_ORDER.getCode().equals(orderBean.getStatus())) {
return ResponseUtil.error(ResponseResult.ORDER_CANNOT_CONFIRM);
}
return commonVerify(orderBean, request);
}
private BaseResponse commonVerify(QueryOrdersResponse.DataBean.OrderBean orderBean, OrderManagerRequest request) {
if (ObjectUtils.notEqual(orderBean.getCompanyId(), request.getPartnerId())) {
return ResponseUtil.error(ResponseResult.ORDER_PARTNER_ID_NOT_MATCTH);
}
//开放平台不传入门店
if (ObjectUtils.notEqual(request.getOperator(), OperateClient.OPEN_PLATFORM.getOpName()) && ObjectUtils.notEqual(orderBean.getShopId(), request.getStoreId())) {
return ResponseUtil.error(ResponseResult.ORDER_STORE_ID_NOT_MATCTH);
}
return ResponseUtil.success();
}
}
package cn.freemud.management.service.impl;
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.enums.OperateType;
import cn.freemud.management.enums.RefundStatus;
import cn.freemud.management.enums.ResponseResult;
import cn.freemud.management.service.OrderBaseService;
import cn.freemud.management.service.OrderManagerService;
import cn.freemud.management.util.ResponseUtil;
import com.freemud.application.sdk.api.storecenter.request.StoreInfoRequest;
import com.freemud.application.sdk.api.storecenter.response.StoreResponse;
import com.freemud.application.sdk.api.storecenter.service.StoreCenterService;
import com.freemud.sdk.api.assortment.order.adapter.OrderSdkAdapter;
import com.freemud.sdk.api.assortment.order.request.order.BaseQueryOrderRequest;
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.service.OrderCenterSdkService;
import javafx.util.Pair;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.ObjectUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: rrr
* @Package cn.freemud.management.service.impl
* @Description: saas订单履单操作
* @author: shuhu.hou
* @date: 2020/3/26 16:01
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Service
public class SaasOrderMangerServiceImpl implements OrderManagerService {
@Autowired
private OrderSdkAdapter orderSdkAdapter;
@Autowired
private OrderCenterSdkService orderCenterSdkService;
@Autowired
private OrderDeliveryService orderDeliveryService;
@Autowired
private OrderBaseService orderBaseService;
@Autowired
private StoreCenterService storeCenterService;
/**
* 接单
* @param request 请求参数
* @param orderBean 订单实体
* @return
*/
@Override
public BaseResponse<OrderManagerResponse> orderConfirm(OrderManagerRequest request, QueryOrdersResponse.DataBean.OrderBean orderBean) {
//退款状态
RefundStatus refundStatus = CollectionUtils.isEmpty(orderBean.getRefundList()) ? null : RefundStatus.getByCode(orderBean.getRefundList().get(0).getStatus());
//订单接单
BaseQueryOrderRequest orderConfirmRequest = orderSdkAdapter.getOrderConfirmRequest(request.getOperator(), orderBean);
BaseOrderResponse confirmOrderResponse = orderCenterSdkService.orderConfirmTake(orderConfirmRequest);
//获取门店信息
StoreResponse storeInfo = storeCenterService.getStoreInfo(new StoreInfoRequest(orderBean.getCompanyId(), orderBean.getShopId()),"");
if (ObjectUtils.notEqual(ResponseResult.SUCCESS.getCode(),storeInfo.getStatusCode().toString()) || storeInfo.getBizVO() == null) {
return ResponseUtil.error(ResponseResult.STORE_NOT_FOUND);
}
//处理1秒重复接单问题 订单服务接单返回20067重复操作,20018状态机不支持认为接单成功
if ("20067".equals(confirmOrderResponse.getErrcode().toString()) || "20018".equals(confirmOrderResponse.getErrcode().toString()) || "50002".equals(confirmOrderResponse.getErrcode().toString()) ) {
return ResponseUtil.success(new OrderManagerResponse(storeInfo.getBizVO().getOrderPrintConfig(),orderBean.getGmtExpect(),refundStatus));
}
if( ObjectUtils.notEqual(ResponseResult.SUCCESS.getCode(),confirmOrderResponse.getErrcode().toString())){
return ResponseUtil.error(ResponseResult.ORDER_ACCEPT_FAILED);
}
//创建配送单
Pair<Boolean, String> deliveryResponse = orderDeliveryService.createDelivery(orderBean, storeInfo, request.getOperator());
if (!deliveryResponse.getKey()){
return ResponseUtil.error(ResponseResult.ORDER_ACCEPT_FAILED_CREATE_DELIVERY_FAILED);
}
// 推送pos消息中心
orderBaseService.sendMessage(orderBean, OperateType.ORDER_CONFIRM,request.getReason());
return ResponseUtil.success(new OrderManagerResponse(storeInfo.getBizVO().getOrderPrintConfig(),orderBean.getGmtExpect(),refundStatus));
}
}
package cn.freemud.management.service.impl;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.base.log.LogTreadLocal;
import cn.freemud.management.entities.dto.request.order.OrderManagerRequest;
import cn.freemud.management.entities.dto.response.order.OrderManagerResponse;
import cn.freemud.management.enums.ResponseResult;
import cn.freemud.management.service.OrderManagerService;
import cn.freemud.management.util.ResponseUtil;
import com.freemud.application.sdk.api.takeaway.request.order.PlatformOrderRequest;
import com.freemud.application.sdk.api.takeaway.service.WaimaiOrderService;
import com.freemud.sdk.api.assortment.order.response.order.QueryOrdersResponse;
import org.apache.commons.lang.ObjectUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: rrr
* @Package cn.freemud.management.service.impl
* @Description: 外卖订单履单操作
* @author: shuhu.hou
* @date: 2020/3/26 16:01
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Service
public class WaimaiOrderMangerServiceImpl implements OrderManagerService {
@Autowired
private WaimaiOrderService waimaiOrderService;
@Override
public BaseResponse<OrderManagerResponse> orderConfirm(OrderManagerRequest request, QueryOrdersResponse.DataBean.OrderBean orderBean) {
PlatformOrderRequest platformOrderRequest = new PlatformOrderRequest();
platformOrderRequest.setPlatformOrderId(orderBean.getCustomerOrder());
platformOrderRequest.setChannel(orderBean.getSource());
platformOrderRequest.setCompanyId(orderBean.getCompanyId());
platformOrderRequest.setOrderId(orderBean.getOid());
platformOrderRequest.setShopId(orderBean.getShopId());
platformOrderRequest.setOperator(request.getOperator());
com.freemud.application.sdk.api.base.BaseResponse waimaiBaseResponse = waimaiOrderService.confirm(platformOrderRequest, LogTreadLocal.getTrackingNo());
if(ObjectUtils.notEqual(ResponseResult.SUCCESS.getCode(),waimaiBaseResponse.getCode())){
return ResponseUtil.error(ResponseResult.ORDER_ACCEPT_FAILED);
}
return ResponseUtil.success();
}
}
package cn.freemud.management.util;
import cn.freemud.base.constant.Version;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.management.enums.ResponseResult;
/**
* @title: ResponseUtil
* @package: cn.freemud.utils
* @author: jiale<loverichy8 @ gmail.com>
* @date: 2017/11/29
* @description:
*/
public class ResponseUtil {
/**
* @param <T>
* @return
*/
public static <T> BaseResponse<T> success() {
return new BaseResponse<>(Version.VERSION_1, ResponseResult.SUCCESS.getCode(),"success");
}
/**
* @param t
* @param <T>
* @return
*/
public static <T> BaseResponse<T> success(T t) {
return new BaseResponse<>(ResponseResult.SUCCESS.getCode(), "success", Version.VERSION_1, t);
}
public static <T> BaseResponse<T> error(ResponseResult status) {
return new BaseResponse<>(Version.VERSION_1, status.getCode(), status.getMessage());
}
/**
* @param code
* @return
*/
public static <T> BaseResponse<T> error(String code) {
return new BaseResponse<>(Version.VERSION_1, code);
}
/**
* @param code
* @param message
* @return
*/
public static <T> BaseResponse<T> error(String code, String message) {
return new BaseResponse<>(Version.VERSION_1, code, message);
}
public static <T> BaseResponse<T> error(String code, String message, T t) {
return new BaseResponse<>(code, message, Version.VERSION_1, t);
}
public static <T> BaseResponse<T> error(ResponseResult status, T t) {
return new BaseResponse<>(status.getCode(), status.getMessage(), Version.VERSION_1, t);
}
}
package com.freemud.application.sdk.api.ordercenter.config;
import com.freemud.application.sdk.api.config.CenterConfigProperties;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: OrderManagerCenterProperties
* @Package com.freemud.application.sdk.api.ordercenter.config
* @Description:
* @author: shuhu.hou
* @date: 2020/4/2 14:55
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Component
@ConfigurationProperties(prefix = "order.manager")
public class OrderManagerCenterProperties extends CenterConfigProperties {
}
...@@ -156,4 +156,8 @@ public class InterfaceAddressConstant { ...@@ -156,4 +156,8 @@ public class InterfaceAddressConstant {
* 根据用户ID 查询30分钟内未支付并且有券的 订单 * 根据用户ID 查询30分钟内未支付并且有券的 订单
*/ */
public static final String QUERY_ORDER_WITH_COUPON="order/v2/queryOrderWithCoupon"; public static final String QUERY_ORDER_WITH_COUPON="order/v2/queryOrderWithCoupon";
/**
* 订单管理
*/
public static final String STATUS_OPERATE="order/statusOperate";
} }
package com.freemud.application.sdk.api.ordercenter.enums;
import org.apache.commons.lang.StringUtils;
public enum OperateClient {
POS("pos","pos"),
ASSISTANT_SERVICE("assistant_service","小助手"),
OPEN_PLATFORM("open_platform","开放平台"),
TASK_CENTER("task_center","自动任务");
/**
* 操作类型
*/
private String opType;
/**
* 操作名称
*/
private String opName;
OperateClient(String opType, String opName) {
this.opType = opType;
this.opName = opName;
}
public String getOpType() {
return opType;
}
public void setOpType(String opType) {
this.opType = opType;
}
public String getOpName() {
return opName;
}
public void setOpName(String opName) {
this.opName = opName;
}
public static OperateClient getByOpType(String opType){
if (StringUtils.isEmpty(opType)) {
return null;
}
for (OperateClient operateType : values()) {
if (operateType.getOpType().equals(opType)) {
return operateType;
}
}
return null;
}
}
package com.freemud.application.sdk.api.ordercenter.enums;
import org.apache.commons.lang.StringUtils;
public enum OperateType {
ORDER_CONFIRM("orderConfirm","接单"),
ORDER_REJECT("orderReject","拒单"),
ORDER_DONE("orderDone","制作完成"),
ORDER_SEND("orderSend","送出"),
ORDER_AFFIRM("orderAffirm","完成"),
ORDER_AGREE_REFUND("orderAgreeRefund","同意退款"),
ORDER_REJECT_REFUND("orderRejectRefund","拒绝退款");
/**
* 操作类型
*/
private String opType;
/**
* 操作名称
*/
private String opName;
OperateType(String opType, String opName) {
this.opType = opType;
this.opName = opName;
}
public String getOpType() {
return opType;
}
public void setOpType(String opType) {
this.opType = opType;
}
public String getOpName() {
return opName;
}
public void setOpName(String opName) {
this.opName = opName;
}
public static OperateType getByOpType(String opType){
if (StringUtils.isEmpty(opType)) {
return null;
}
for (OperateType operateType : values()) {
if (operateType.getOpType().equals(opType)) {
return operateType;
}
}
return null;
}
}
package com.freemud.application.sdk.api.ordercenter.request;
import com.freemud.application.sdk.api.ordercenter.enums.OperateClient;
import com.freemud.application.sdk.api.ordercenter.enums.OperateType;
import lombok.Data;
@Data
public class OrderManagerRequest {
/**
* 商户号
*/
private String partnerId;
/**
* 门店号
*/
private String storeId;
/**
* 订单号
*/
private String orderId;
/**
* 退款原因
*/
private String reason;
/**
* 订单操作类型
*/
private String operateType;
/**
* 操作人
* pos
* 开放平台
* 小助手
* 系统自动履单
*/
private String operator;
public OrderManagerRequest(){
}
public OrderManagerRequest(String partnerId, String storeId, String orderId, OperateClient operateClient, OperateType operateType){
this.partnerId=partnerId;
this.storeId=storeId;
this.orderId=orderId;
this.operateType=operateType.getOpType();
this.operator=operateClient.getOpName();
}
public OrderManagerRequest(String partnerId, String storeId, String orderId, OperateClient operateClient, OperateType operateType, String reason){
this.partnerId=partnerId;
this.storeId=storeId;
this.orderId=orderId;
this.operateType=operateType.getOpType();
this.operator=operateClient.getOpName();
this.reason=reason;
}
}
package com.freemud.application.sdk.api.ordercenter.response;
import lombok.Data;
@Data
public class OrderManagerResponse {
/**
* 预订单打印时间{1:提醒时打印;2:接单时打印} 默认为1
*/
private String orderPrintConfig;
/**
* 订单预约时间
*/
private Long gmtExpect;
/**
* 订单状态
* 1=下单,2=待支付,3=接单,4=配送中,5=完成,6=取消,7=拒单,31=制作完成
*/
private Integer status;
/**
* 订单退款状态
* 1 申请退款 2 同意退款 3 已退货 4 退款完成 5 拒绝退款
*/
private Integer refundStatus;
}
/*
package com.freemud.application.sdk.api.ordercenter.service;
import com.freemud.application.sdk.api.base.BaseRequest;
import com.freemud.application.sdk.api.ordercenter.constant.InterfaceAddressConstant;
import com.freemud.application.sdk.api.ordercenter.enums.ResponseResultEnum;
import com.freemud.application.sdk.api.ordercenter.request.OrderManagerRequest;
import com.freemud.application.sdk.api.ordercenter.response.BaseResponse;
import com.freemud.application.sdk.api.ordercenter.response.OrderBaseResp;
import com.freemud.application.sdk.api.ordercenter.response.OrderManagerResponse;
import com.freemud.application.sdk.api.ordercenter.util.ResponseUtil;
import com.freemud.application.sdk.api.util.RequestThirdPartyUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.core.ParameterizedTypeReference;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import java.util.Objects;
*/
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: OrderManagerSdkService
* @Package com.freemud.application.sdk.api.ordercenter.service
* @Description:
* @author: shuhu.hou
* @date: 2020/3/27 16:18
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*//*
@Service
@Slf4j
public class OrderManagerSdkService {
@Autowired
@Qualifier("orderManagerRestTemplate")
private RestTemplate restTemplate;
@Autowired
private OrderManagerCenterProperties orderManagerCenterProperties;
public static final String SUCCESS_RESPONSE_CODE = "100";
*/
/**
* 根据综合条件查询订单
*//*
public BaseResponse<OrderManagerResponse> statusOperate(OrderManagerRequest request) {
OrderBaseResp<OrderManagerResponse> responseDTO = RequestThirdPartyUtils.httpJsonReqComplexNew(restTemplate, InterfaceAddressConstant.STATUS_OPERATE,
createBaseRequest(request, ""), new ParameterizedTypeReference<OrderBaseResp<OrderManagerResponse>>() {
});
return responseHandle(responseDTO);
}
private <T> BaseResponse<T> responseHandle(OrderBaseResp<T> responseDTO) {
if (responseDTO == null) {
return ResponseUtil.error(ResponseResultEnum.SYSTEM_BUSINESS_ERROR.getCode(), ResponseResultEnum.SYSTEM_BUSINESS_ERROR.getMessage());
}
if (!Objects.equals(SUCCESS_RESPONSE_CODE, responseDTO.getCode())) {
return ResponseUtil.error(ResponseResultEnum.SYSTEM_BUSINESS_ERROR.getCode(), responseDTO.getMessage());
}
BaseResponse<T> result = new BaseResponse<>();
result.setCode(responseDTO.getCode());
result.setMessage(responseDTO.getMessage());
result.setResult(responseDTO.getResult());
result.setVer(responseDTO.getVer());
return result;
}
private <T> BaseRequest<T> createBaseRequest(T req, String trackingNo) {
BaseRequest<T> request = new BaseRequest<>();
request.setRequestBody(req);
request.setAppName(orderManagerCenterProperties.getAppName());
request.setBaseUrl(orderManagerCenterProperties.getBaseUrl());
request.setTrackingNo(trackingNo);
return request;
}
}
*/
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