Authored by LUOXC

添加客服取消订单

... ... @@ -46,6 +46,9 @@ public enum Constant {
//买家取消,卖家发货之后
BUYER_ORDER_STATUS_BUYER_CANCEL_AFTER_SELLER_DELIVERY((byte)17,"已取消(买家在卖家发货后取消订单)"),
//客服取消,鉴定中心收货前
CS_CANCEL_BEFORE_DEPOT_RECEIVE((byte)18,"已取消(鉴定中心收货前客服取消)"),
;
private byte byteVal;
... ...
... ... @@ -18,6 +18,7 @@ public enum OperateTypeEnum {
OPERATE_TYPE_DELIVERY_GOODS(7,"发货给买家"),
OPERATE_TYPE_RETURN_CAUSE_OF_JUDGE_FAILURE(8,"发货给卖家(鉴定不通过)"),
OPERATE_TYPE_RETURN_CAUSE_OF_BUYER_CANCEL_AFTER_SELLER_SELL_OUT(9,"发货给卖家(买家在卖家发货后取消)"),
CS_CANCEL_BEFORE_DEPOT_RECEIVE(10,"鉴定中心收货前客服取消"),
;
private Integer code;
private String desc;
... ...
... ... @@ -238,25 +238,37 @@ public class BuyerOrderController {
return new ApiResponse.ApiResponseBuilder().code(200).build();
}
/**
* 查询回访记录成功
*
* @param orderCode
* @return
*/
@RequestMapping(value = "/queryBuyerOrderFeedback")
public ApiResponse queryBuyerOrderFeedback(String orderCode) {
return new ApiResponse.ApiResponseBuilder()
.code(200)
.data(buyerOrderService.queryBuyerOrderFeedback(orderCode).stream()
.map(feedback -> new JSONObject()
.fluentPut("id", feedback.getId())
.fluentPut("content", feedback.getContent())
.fluentPut("operatorUid", feedback.getOperatorUid())
.fluentPut("operatorName", feedback.getOperatorName())
.fluentPut("createTime", DateUtil.getDateFormatFromInt(feedback.getCreateTime(), "yyyy-MM-dd HH:mm:ss")))
.collect(toList()))
.build();
}
/**
* 查询回访记录成功
*
* @param orderCode
* @return
*/
@RequestMapping(value = "/queryBuyerOrderFeedback")
public ApiResponse queryBuyerOrderFeedback(String orderCode) {
return new ApiResponse.ApiResponseBuilder()
.code(200)
.data(buyerOrderService.queryBuyerOrderFeedback(orderCode).stream()
.map(feedback -> new JSONObject()
.fluentPut("id", feedback.getId())
.fluentPut("content", feedback.getContent())
.fluentPut("operatorUid", feedback.getOperatorUid())
.fluentPut("operatorName", feedback.getOperatorName())
.fluentPut("createTime", DateUtil.getDateFormatFromInt(feedback.getCreateTime(), "yyyy-MM-dd HH:mm:ss")))
.collect(toList()))
.build();
}
/**
* 客服取消订单
*
* @param orderCode
* @return
*/
@RequestMapping(value = "/cancelBuyerOrder")
public ApiResponse cancelBuyerOrder(String orderCode) {
buyerOrderService.cancelBuyerOrder(orderCode);
return new ApiResponse.ApiResponseBuilder().code(200).build();
}
}
... ...
... ... @@ -24,6 +24,12 @@ public interface IBuyerOrderService {
JSONObject confirmReceive(BuyerOrderReq req);
/**
* 客服取消订单
* @param orderCode
*/
void cancelBuyerOrder(String orderCode);
JSONObject judgeBegin(BuyerOrderReq req);
JSONObject judgePass(BuyerOrderReq req);
... ...
package com.yoho.ufo.order.service.impl;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import com.alibaba.fastjson.JSON;
import com.yoho.order.model.*;
import com.yoho.ufo.order.constant.OperateTypeEnum;
import com.yohobuy.ufo.model.order.common.EnumExpressType;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.elasticsearch.common.collect.Lists;
import org.elasticsearch.common.collect.Maps;
import org.elasticsearch.common.netty.util.internal.StringUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import com.alibaba.fastjson.JSONObject;
import com.yoho.core.common.utils.DateUtil;
import com.yoho.core.rest.client.ServiceCaller;
import com.yoho.error.exception.ServiceException;
import com.yoho.order.dal.AppraiseAddressMapper;
import com.yoho.order.dal.AreaMapper;
import com.yoho.order.dal.BuyerOrderGoodsMapper;
import com.yoho.order.dal.BuyerOrderMapper;
import com.yoho.order.dal.BuyerOrderMetaMapper;
import com.yoho.order.dal.ExpressCompanyMapper;
import com.yoho.order.dal.ExpressInfoMapper;
import com.yoho.order.dal.ExpressRecordMapper;
import com.yoho.order.dal.OrderOperateRecordMapper;
import com.yoho.order.dal.OrdersPayMapper;
import com.yoho.order.dal.QiniuLiveRecordMapper;
import com.yoho.order.dal.SellerOrderGoodsMapper;
import com.yoho.order.dal.SellerOrderMapper;
import com.yoho.order.dal.SellerOrderMetaMapper;
import com.yoho.order.dal.*;
import com.yoho.order.model.*;
import com.yoho.service.model.order.request.OrderRequest;
import com.yoho.ufo.dal.IdentifyRecordsMapper;
import com.yoho.ufo.dal.ProductMapper;
import com.yoho.ufo.dal.model.IdentifyRecords;
import com.yoho.ufo.dal.model.Product;
import com.yoho.ufo.order.constant.Constant;
import com.yoho.ufo.order.constant.OperateTypeEnum;
import com.yoho.ufo.order.service.IBuyerOrderService;
import com.yoho.ufo.service.impl.UserHelper;
import com.yoho.ufo.service.model.PageResponseBO;
import com.yoho.ufo.util.ImagesConstant;
import com.yoho.ufo.util.ImagesHelper;
import com.yohobuy.ufo.model.order.bo.AppraiseExpressInfoBo;
import com.yohobuy.ufo.model.order.common.EnumExpressType;
import com.yohobuy.ufo.model.order.req.BuyerOrderMetaUpdateReq;
import com.yohobuy.ufo.model.order.resp.BuyerOrderResp;
import com.yohobuy.ufo.model.order.resp.ExpressInfoResp;
import com.yohobuy.ufo.model.order.resp.OrderDetailResp;
import com.yohobuy.ufo.model.order.resp.OrderOperateRecordResp;
import java.util.Arrays;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.elasticsearch.common.collect.Lists;
import org.elasticsearch.common.collect.Maps;
import org.elasticsearch.common.netty.util.internal.StringUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
/**
* @author caoyan
... ... @@ -370,6 +350,35 @@ public class BuyerOrderServiceImpl implements IBuyerOrderService {
return jsonObject;
}
@Override
public void cancelBuyerOrder(String orderCode) {
BuyerOrder buyerOrder = buyerOrderMapper.selectByOrderCode(orderCode);
if (null == buyerOrder) {
throw new ServiceException(400, "订单不存在");
}
if (Constant.BUYER_ORDER_STATUS_ALLOCATING.getByteVal() != buyerOrder.getStatus().byteValue()) {
throw new ServiceException(400, "错误:订单状态变化,不允许取消订单,请重新刷新列表");
}
String args = "ufo-gateway.cancelBuyerOrderByCS";
LOGGER.info("call ufo-gateway enter orderCode is {}, interface is {},result is {}", orderCode, args);
OrderRequest request = new OrderRequest();
request.setUid(buyerOrder.getUid());
request.setOrderCode(Long.valueOf(orderCode));
JSONObject result = serviceCaller.asyncCall(args, request, JSONObject.class).get(5);
LOGGER.info("call ufo-gateway orderCode is {}, interface is {},result is {}", orderCode, args, result.toJSONString());
if (result.getIntValue("code") == 200) {
int operateType = OperateTypeEnum.CS_CANCEL_BEFORE_DEPOT_RECEIVE.getCode();
UserHelper userHelper = new UserHelper();
try {
saveOrderOperateRecord(buyerOrder.getOrderCode(), userHelper, operateType, "");
} catch (Exception e) {
LOGGER.info("cancelBuyerOrder saveOrderOperateRecord operateType={} ,order code ={} ,userHelper = {}", operateType, buyerOrder.getOrderCode(), userHelper);
}
} else {
throw new ServiceException(500, result.getString("message"));
}
}
public JSONObject judgeBegin(BuyerOrderReq req){
if(null == req.getId()) {
return null;
... ...
... ... @@ -66,6 +66,7 @@
<option value="15">已取消(买家支付超时)</option>
<option value="16">已取消(买家在卖家发货前取消订单)</option>
<option value="17">已取消(买家在卖家发货后取消订单)</option>
<option value="18">已取消(鉴定中心收货前客服取消)</option>
</select>
<br><br>
... ... @@ -219,7 +220,13 @@ function getOrderList(){
width: 30,
align: "center",
formatter: function (value, rowData, rowIndex) {
return "<a role='detail' dataId='"+ rowData.orderCode +"' style='margin-left:10px;background-color: #5cb85c !important;'>详情</a>";
var buttons = '';
buttons += "<a role='detail' dataId='"+ rowData.orderCode +"' style='margin-left:10px;background-color: #5cb85c !important;'>详情</a>";
// 卖家已发货
if(rowData.status == 2){
buttons += "<a role='cancelOrder' dataId='"+ rowData.orderCode +"' style='margin-left:10px;background-color: #5cb85c !important;'>取消订单</a>";
}
return buttons;
}
}]],
cache: false,
... ... @@ -228,12 +235,29 @@ function getOrderList(){
idField: "id",
singleSelect: true,
onLoadSuccess: function (data) {
$(this).datagrid("getPanel").find("a[role='detail']").linkbutton({
$(this).datagrid("getPanel").find("a[role='detail']").linkbutton({
onClick: function () {
var orderCode = $(this).attr("dataId");
var orderCode = $(this).attr("dataId");
window.open(contextPath + "/html/orderManage/detail.html?orderCode=" + orderCode + "&ver=" + new Date().getTime())
}
});
$(this).datagrid("getPanel").find("a[role='cancelOrder']").linkbutton({
onClick: function () {
var orderCode = $(this).attr("dataId");
$.post(contextPath + "/buyerOrder/cancelBuyerOrder", {
orderCode : orderCode
}, function(data) {
if (data.code == 200) {
window.self.$.messager.show({
title : "提示",
msg : "取消订单成功!"
});
}else {
window.self.$.messager.alert("失败", data.message, "error");
}
});
}
});
}
});
}
... ...