Authored by qinchao

物流

package com.yohoufo.dal.order;
import org.apache.ibatis.annotations.Param;
public interface QualityCheckMapper {
int updateByOrderCode(@Param("orderCode") Long orderCode,@Param("status") int status);
}
\ No newline at end of file
... ...
package com.yohoufo.dal.order.model;
import lombok.Data;
import lombok.ToString;
@Data
@ToString
public class QualityCheck {
private Integer id;
private Long orderCode;
private String checkText;
// 1质检不通过 , 2瑕疵确认
private Byte type;
// 1等待确认 , 2瑕疵通过 ,8瑕疵不接受 ,9瑕疵不通过(超时)
private Byte status;
private String imageUrl;
}
\ No newline at end of file
... ...
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yohoufo.dal.order.QualityCheckMapper">
<resultMap id="BaseResultMap" type="com.yohoufo.dal.order.model.QualityCheck">
<id column="id" jdbcType="INTEGER" property="id" />
<result column="order_code" jdbcType="BIGINT" property="orderCode" />
<result column="check_text" jdbcType="VARCHAR" property="checkText" />
<result column="type" jdbcType="TINYINT" property="type" />
<result column="status" jdbcType="TINYINT" property="status" />
<result column="image_url" jdbcType="VARCHAR" property="imageUrl" />
</resultMap>
<sql id="Base_Column_List">
id, order_code, check_text, type, status, image_url
</sql>
<update id="updateByOrderCode">
update quality_check
set status = #{status}
where order_code = #{orderCode}
</update>
</mapper>
\ No newline at end of file
... ...
... ... @@ -160,6 +160,40 @@ public class BuyerOrderController {
return rtn;
}
/**
* 用户接受瑕疵
*/
@RequestMapping(params = "method=ufo.buyer.miniFaultAccept")
public ApiResponse miniFaultAccept(@RequestParam("orderCode") long orderCode,@RequestParam("uid") int uid){
LOG.info("method ufo.buyer.miniFaultAccept in, orderCode is {}, uid is {}", orderCode, uid);
OrderRequest orderRequest = OrderRequest.builder()
.uid(uid)
.orderCode(orderCode)
.build();
buyerOrderService.miniFaultAccept(orderRequest);
LOG.info("method ufo.buyer.miniFaultAccept out, orderCode is {}, uid is {}", orderCode, uid);
return new ApiResponse.ApiResponseBuilder().code(200).message("接受瑕疵").build();
}
/**
* 用户不接受瑕疵
*/
@RequestMapping(params = "method=ufo.buyer.miniFaultReject")
public ApiResponse miniFaultReject(@RequestParam("orderCode") long orderCode,@RequestParam("uid") int uid){
LOG.info("method ufo.buyer.miniFaultReject in, orderCode is {}, uid is {}", orderCode, uid);
OrderRequest orderRequest = OrderRequest.builder()
.uid(uid)
.orderCode(orderCode)
.build();
buyerOrderService.miniFaultReject(orderRequest);
LOG.info("method ufo.buyer.miniFaultReject out, orderCode is {}, uid is {}", orderCode, uid);
return new ApiResponse.ApiResponseBuilder().code(200).message("不接受瑕疵").build();
}
/**
* 取消订单
... ... @@ -266,6 +300,18 @@ public class BuyerOrderController {
return new ApiResponse.ApiResponseBuilder().code(200).message("鉴定中心质检通过成功").build();
}
@IgnoreSession
@IgnoreSignature
@RequestMapping(value = "/erp/miniFaultCreate")
@ResponseBody
public ApiResponse miniFaultCreate(@RequestBody OrderRequest request) {
LOG.info("method ufo.depot.miniFaultCreate in, req is {}", request);
buyerOrderService.miniFaultCreate(request.getOrderCode());
LOG.info("method ufo.depot.miniFaultCreate out, req is {}", request);
return new ApiResponse.ApiResponseBuilder().code(200).message("瑕疵创建成功").build();
}
@RequestMapping(params = "method=ufo.buyer.computeCompensate")
@ResponseBody
public ApiResponse computeCompensate(@RequestParam("orderCode") long orderCode,
... ...
... ... @@ -17,6 +17,10 @@ public interface IBuyerOrderService extends IOrderListService, IOrderDetailServi
*/
BuyerOrderNums getBuyerOrderNums(int uid);
void miniFaultAccept(OrderRequest orderRequest);
void miniFaultReject(OrderRequest orderRequest);
/**
* 取消订单
* @param orderRequest
... ... @@ -56,5 +60,7 @@ public interface IBuyerOrderService extends IOrderListService, IOrderDetailServi
void qualityCheckPass(long orderCode);
void miniFaultCreate(long orderCode);
OrderCntResp getOrderCnt(OrderRequest req, OrderListType listType);
}
... ...
... ... @@ -220,11 +220,10 @@ public class AppraiseService {
apiResponse.setCode(400);
apiResponse.setMessage(content);
}finally {
//记录调拨信息(卖家和买家都需要记录)
//记录调拨信息
EnumExpressType expressType = EnumExpressType.EXPRESS_TYPE_JUDGE_CENTER;
EnumExpressDataType expressDataType = EnumExpressDataType.operate_transfer;
EnumExpressDataOperateTransferCode operateTransferCode = EnumExpressDataOperateTransferCode.judge_pass;
expressInfoService.saveOperateTransferExpressInfo(buyerUid,orderCode,expressType.getCode(),expressDataType,operateTransferCode);
expressInfoService.saveOperateTransferExpressInfo(sellerUid,orderCode,expressType.getCode(),expressDataType,operateTransferCode);
}
... ... @@ -577,14 +576,29 @@ public class AppraiseService {
operateTransferCode = EnumExpressDataOperateTransferCode.judge_reject;
}else if(type == 2){
//质检不通过,不发物流
//先补加一条鉴定中物流
EnumExpressType expressType = EnumExpressType.EXPRESS_TYPE_JUDGE_CENTER;
EnumExpressDataType expressDataType = EnumExpressDataType.operate_transfer;
operateTransferCode = EnumExpressDataOperateTransferCode.judging;
expressInfoService.saveOperateTransferExpressInfo(sellerUid,orderCode,expressType.getCode(),expressDataType,operateTransferCode);
//再加一个鉴定不通过的物流
operateTransferCode = EnumExpressDataOperateTransferCode.quality_check_reject;
}else if(type == 3){
//先补加一条鉴定中物流
EnumExpressType expressType = EnumExpressType.EXPRESS_TYPE_JUDGE_CENTER;
EnumExpressDataType expressDataType = EnumExpressDataType.operate_transfer;
operateTransferCode = EnumExpressDataOperateTransferCode.mini_fault_reject;
expressInfoService.saveOperateTransferExpressInfo(sellerUid,orderCode,expressType.getCode(),expressDataType,operateTransferCode);
operateTransferCode = EnumExpressDataOperateTransferCode.mini_fault_not_pass;
}
//记录调拨信息(只保存卖家一条)
EnumExpressType expressType = EnumExpressType.EXPRESS_TYPE_JUDGE_CENTER;
EnumExpressDataType expressDataType = EnumExpressDataType.operate_transfer;
//expressInfoService.saveOperateTransferExpressInfo(buyerUid,orderCode,expressType.getCode(),expressDataType,operateTransferCode);
expressInfoService.saveOperateTransferExpressInfo(sellerUid,orderCode,expressType.getCode(),expressDataType,operateTransferCode);
}
... ...
... ... @@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.yoho.error.ServiceError;
import com.yoho.error.exception.ServiceException;
import com.yohobuy.ufo.model.order.bo.AppraiseExpressInfoBo;
import com.yohobuy.ufo.model.order.common.*;
import com.yohobuy.ufo.model.order.req.BuyerOrderMetaUpdateReq;
import com.yohobuy.ufo.model.order.resp.BuyerOrderNums;
... ... @@ -12,12 +13,14 @@ import com.yohobuy.ufo.model.order.resp.OrderListInfo;
import com.yohobuy.ufo.model.order.resp.PageResp;
import com.yohobuy.ufo.model.order.vo.AddressInfo;
import com.yohobuy.ufo.model.order.vo.OrderListVo;
import com.yohoufo.common.ApiResponse;
import com.yohoufo.common.alarm.EventBusPublisher;
import com.yohoufo.common.exception.UfoServiceException;
import com.yohoufo.common.utils.DateUtil;
import com.yohoufo.common.utils.UserInfoHiddenHelper;
import com.yohoufo.dal.order.BuyerOrderGoodsMapper;
import com.yohoufo.dal.order.BuyerOrderMapper;
import com.yohoufo.dal.order.QualityCheckMapper;
import com.yohoufo.dal.order.SellerOrderGoodsMapper;
import com.yohoufo.dal.order.model.BuyOrderNums;
import com.yohoufo.dal.order.model.BuyerOrder;
... ... @@ -107,6 +110,12 @@ public class BuyerOrderServiceImpl implements IBuyerOrderService {
private OrderStatusFlowService orderStatusFlowService;
@Autowired
private QualityCheckMapper qualityCheckMapper;
@Autowired
private AppraiseService appraiseService;
@Autowired
private TransferService transferService;
@Autowired
... ... @@ -311,6 +320,85 @@ public class BuyerOrderServiceImpl implements IBuyerOrderService {
return changed;
}
/**
* 接受瑕疵
* @param orderRequest
*/
@Override
public void miniFaultAccept(OrderRequest orderRequest){
logger.info("Buyer Order miniFaultAccept (OrderRequest) {}", orderRequest);
//订单状态变更为鉴定中 ,记录调拨的物流信息 ,发消息 ,
OrderStatus expectStatus = OrderStatus.PLATFORM_RECEIVE;
OrderStatus targetStatus = OrderStatus.PLATFORM_CHECKING;
// 参数检查
DataNode node = checkBase(orderRequest);
checkStatus(node,orderRequest, expectStatus);
int uid=orderRequest.getUid();
long orderCode=orderRequest.getOrderCode();
BuyerOrder buyerOrder = node.buyerOrderInDB;
int sellerUid = buyerOrder.getSellerUid();
if (1 == buyerOrderMapper.updateStatusByOrderCode(orderCode, uid,
expectStatus.getCode(),
targetStatus.getCode(),
DateUtil.getCurrentTimeSecond())) {
logger.info("Buyer Order miniFaultAccept (OrderRequest) {} ,update status success ", orderRequest);
//更新瑕疵确认结果
int updateNum = qualityCheckMapper.updateByOrderCode(orderCode,EnumQualityCheckStatus.PASS.getCode());
logger.info("Buyer Order miniFaultAccept (OrderRequest) {} ,update quality check record status num {} ", orderRequest,updateNum);
//记录新的调拨信息
//记录调拨信息(只保存卖家一条)
EnumExpressType expressType = EnumExpressType.EXPRESS_TYPE_JUDGE_CENTER;
EnumExpressDataType expressDataType = EnumExpressDataType.operate_transfer;
EnumExpressDataOperateTransferCode operateTransferCode = EnumExpressDataOperateTransferCode.mini_fault_accept;
expressInfoService.saveOperateTransferExpressInfo(sellerUid,orderCode,expressType.getCode(),expressDataType,operateTransferCode);
//TODO 发消息
}else{
throw new ServiceException(ServiceError.ORDER_STATUS_INVALIDATE); // 更新失败,可能是因为订单状态已经被并发修改
}
}
/**
* 不接受瑕疵
* @param orderRequest
*/
@Override
public void miniFaultReject(OrderRequest orderRequest){
logger.info("Buyer Order miniFaultReject (OrderRequest) {}", orderRequest);
//订单状态变更为 鉴定不通过 ,记录调拨的物流信息 ,发消息 ,
OrderStatus expectStatus = OrderStatus.PLATFORM_RECEIVE;
OrderStatus targetStatus = OrderStatus.CHECKING_FAKE;
// 参数检查
DataNode node = checkBase(orderRequest);
checkStatus(node,orderRequest, expectStatus);
int uid=orderRequest.getUid();
long orderCode=orderRequest.getOrderCode();
BuyerOrder buyerOrder = node.buyerOrderInDB;
int sellerUid = buyerOrder.getSellerUid();
//调用鉴定不通过的逻辑
int type= 3; //1 鉴定不通过 ;2 质检不通过 ; 3,瑕疵确认不通过
AppraiseExpressInfoBo appraiseExpressInfoBo=new AppraiseExpressInfoBo();
appraiseExpressInfoBo.setOrderCode(orderCode);
ApiResponse result=appraiseService.appraiseFail(appraiseExpressInfoBo,expectStatus,type);
if(result!=null&&result.getCode()==200){
//更新瑕疵确认结果
int updateNum = qualityCheckMapper.updateByOrderCode(orderCode,EnumQualityCheckStatus.REJECT_BY_BUYER.getCode());
logger.info("Buyer Order miniFaultReject (OrderRequest) {} ,update quality check record status num {} ", orderRequest,updateNum);
//TODO 发消息
}else{
logger.warn("Buyer Order miniFaultReject (OrderRequest) {} ,call appraiseFail fail result {} ", orderRequest,result);
}
}
/**
* 取消订单
... ... @@ -689,7 +777,6 @@ public class BuyerOrderServiceImpl implements IBuyerOrderService {
EnumExpressType expressType = EnumExpressType.EXPRESS_TYPE_JUDGE_CENTER;
EnumExpressDataType expressDataType = EnumExpressDataType.operate_transfer;
EnumExpressDataOperateTransferCode operateTransferCode = EnumExpressDataOperateTransferCode.platform_receive;
//expressInfoService.saveOperateTransferExpressInfo(uid,orderCode,expressType.getCode(),expressDataType,operateTransferCode);
expressInfoService.saveOperateTransferExpressInfo(sellerUid,orderCode,expressType.getCode(),expressDataType,operateTransferCode);
cleanCacheAfterUpdateStatus(orderCode,uid,sellerUid);
... ... @@ -711,6 +798,7 @@ public class BuyerOrderServiceImpl implements IBuyerOrderService {
}
}
// 质检通过,不需要记录物流调拨信息
@Override
public void qualityCheckPass(long orderCode){
logger.info("in qualityCheckPass, orderCode {}", orderCode);
... ... @@ -729,21 +817,54 @@ public class BuyerOrderServiceImpl implements IBuyerOrderService {
if(num>=1){
logger.info("in qualityCheckPass record status change, orderCode {},uid {} ,sellerUid {}", orderCode,uid,sellerUid);
orderStatusFlowService.addAsy(buyerOrder.getOrderCode(),targetStatus.getCode());
//记录调拨信息(只保存卖家一条)
EnumExpressType expressType = EnumExpressType.EXPRESS_TYPE_JUDGE_CENTER;
EnumExpressDataType expressDataType = EnumExpressDataType.operate_transfer;
EnumExpressDataOperateTransferCode operateTransferCode = EnumExpressDataOperateTransferCode.judging;
expressInfoService.saveOperateTransferExpressInfo(sellerUid,orderCode,expressType.getCode(),expressDataType,operateTransferCode);
}else{
logger.warn("in qualityCheckPass not record status change cause of update empty num , orderCode {},uid {} ,sellerUid {}", orderCode,uid,sellerUid);
}
//记录调拨信息(只保存卖家一条)
EnumExpressType expressType = EnumExpressType.EXPRESS_TYPE_JUDGE_CENTER;
EnumExpressDataType expressDataType = EnumExpressDataType.operate_transfer;
EnumExpressDataOperateTransferCode operateTransferCode = EnumExpressDataOperateTransferCode.quality_check_pass;
//expressInfoService.saveOperateTransferExpressInfo(uid,orderCode,expressType.getCode(),expressDataType,operateTransferCode);
expressInfoService.saveOperateTransferExpressInfo(sellerUid,orderCode,expressType.getCode(),expressDataType,operateTransferCode);
cleanCacheAfterUpdateStatus(orderCode,uid,sellerUid);
}
}
// 瑕疵创建
@Override
public void miniFaultCreate(long orderCode){
logger.info("in miniFaultCreate, orderCode {}", orderCode);
OrderStatus expectStatus = OrderStatus.PLATFORM_RECEIVE;
BuyerOrder buyerOrder = buyerOrderMapper.selectByOrderCode(orderCode);
if (buyerOrder == null ){
throw new ServiceException(400,"订单为空");
}
if( buyerOrder.getStatus() != expectStatus.getCode()){
throw new ServiceException(400,"订单状态发生变化");
}
int uid = buyerOrder.getUid();
int sellerUid = buyerOrder.getSellerUid();
//先补一条鉴定中
EnumExpressType expressType = EnumExpressType.EXPRESS_TYPE_JUDGE_CENTER;
EnumExpressDataType expressDataType = EnumExpressDataType.operate_transfer;
EnumExpressDataOperateTransferCode operateTransferCode = EnumExpressDataOperateTransferCode.judging;
expressInfoService.saveOperateTransferExpressInfo(sellerUid,orderCode,expressType.getCode(),expressDataType,operateTransferCode);
//记录调拨信息(只保存卖家一条)
expressType = EnumExpressType.EXPRESS_TYPE_JUDGE_CENTER;
expressDataType = EnumExpressDataType.operate_transfer;
operateTransferCode = EnumExpressDataOperateTransferCode.mini_fault_create;
expressInfoService.saveOperateTransferExpressInfo(sellerUid,orderCode,expressType.getCode(),expressDataType,operateTransferCode);
cleanCacheAfterUpdateStatus(orderCode,uid,sellerUid);
}
//清理缓存
private void cleanCacheAfterUpdateStatus(long orderCode,int uid,int sellerUid){
BuyerOrderGoods bog = buyerOrderGoodsMapper.selectByOrderCode(uid, orderCode);
... ...
... ... @@ -69,6 +69,7 @@ datasources:
- com.yohoufo.dal.order.OrdersPrePayMapper
- com.yohoufo.dal.order.MetaConfigMapper
- com.yohoufo.dal.order.BuyerOrderStatusFlowMapper
- com.yohoufo.dal.order.QualityCheckMapper
ufo_promotion:
servers:
... ...
... ... @@ -73,6 +73,7 @@ datasources:
- com.yohoufo.dal.order.OrdersPrePayMapper
- com.yohoufo.dal.order.MetaConfigMapper
- com.yohoufo.dal.order.BuyerOrderStatusFlowMapper
- com.yohoufo.dal.order.QualityCheckMapper
- com.yohoufo.dal.order.BusinessLicenseMapper
- com.yohoufo.dal.order.SellerEnterApplyMapper
- com.yohoufo.dal.order.SellerFuncMapper
... ...
... ... @@ -73,6 +73,7 @@ datasources:
- com.yohoufo.dal.order.OrdersPrePayMapper
- com.yohoufo.dal.order.MetaConfigMapper
- com.yohoufo.dal.order.BuyerOrderStatusFlowMapper
- com.yohoufo.dal.order.QualityCheckMapper
- com.yohoufo.dal.order.BusinessLicenseMapper
- com.yohoufo.dal.order.SellerEnterApplyMapper
- com.yohoufo.dal.order.SellerFuncMapper
... ...