Authored by qinchao

add 订单状态拆分 接口for platform

@@ -40,6 +40,33 @@ public class AppraiseController { @@ -40,6 +40,33 @@ public class AppraiseController {
40 } 40 }
41 41
42 /** 42 /**
  43 + * 鉴定中心鉴定通过后,发货
  44 + * 提供给运营平台使用
  45 + * @return
  46 + */
  47 + @RequestMapping(value="/deliverGoods")
  48 + @IgnoreSession
  49 + @IgnoreSignature
  50 + public ApiResponse deliverGoods(@RequestBody AppraiseExpressInfoBo appraiseExpressInfoBo) {
  51 + logger.info("in deliverGoods , req {}", appraiseExpressInfoBo);
  52 + appraiseService.deliverGoods(appraiseExpressInfoBo);
  53 + return new ApiResponse();
  54 + }
  55 +
  56 + /**
  57 + * 鉴定中心鉴定不通过后,寄回
  58 + * 提供给运营平台使用
  59 + * @return
  60 + */
  61 + @RequestMapping(value="/returnBackOrderCauseOfJudgeFailure")
  62 + @IgnoreSession
  63 + @IgnoreSignature
  64 + public ApiResponse returnBackOrderCauseOfJudgeFailure(@RequestBody AppraiseExpressInfoBo appraiseExpressInfoBo) {
  65 + logger.info("in returnBackOrderCauseOfJudgeFailure , req {}", appraiseExpressInfoBo);
  66 + appraiseService.returnBackOrderCauseOfJudgeFailure(appraiseExpressInfoBo);
  67 + return new ApiResponse();
  68 + }
  69 + /**
43 * 卖家发货后,买家又取消了订单,鉴定中心寄回商品给卖家 70 * 卖家发货后,买家又取消了订单,鉴定中心寄回商品给卖家
44 * 提供给运营平台使用 71 * 提供给运营平台使用
45 * @return 72 * @return
@@ -234,6 +234,17 @@ public class BuyerOrderController { @@ -234,6 +234,17 @@ public class BuyerOrderController {
234 return new ApiResponse.ApiResponseBuilder().code(200).message("鉴定中心确认收货成功").build(); 234 return new ApiResponse.ApiResponseBuilder().code(200).message("鉴定中心确认收货成功").build();
235 } 235 }
236 236
  237 + @IgnoreSession
  238 + @IgnoreSignature
  239 + @RequestMapping(value = "/erp/judgeBegin")
  240 + @ResponseBody
  241 + public ApiResponse judgeBegin(@RequestBody OrderRequest request) {
  242 + LOG.info("method ufo.depot.judgeBegin in, req is {}", request);
  243 + buyerOrderService.judgeBegin(request.getOrderCode());
  244 + LOG.info("method ufo.depot.judgeBegin out, req is {}", request);
  245 + return new ApiResponse.ApiResponseBuilder().code(200).message("鉴定中心开始鉴定成功").build();
  246 + }
  247 +
237 @RequestMapping(params = "method=ufo.buyer.computeCompensate") 248 @RequestMapping(params = "method=ufo.buyer.computeCompensate")
238 @ResponseBody 249 @ResponseBody
239 public ApiResponse computeCompensate(@RequestParam("orderCode") long orderCode, 250 public ApiResponse computeCompensate(@RequestParam("orderCode") long orderCode,
@@ -52,5 +52,7 @@ public interface IBuyerOrderService extends IOrderListService, IOrderDetailServi @@ -52,5 +52,7 @@ public interface IBuyerOrderService extends IOrderListService, IOrderDetailServi
52 52
53 void confirmReceive(long orderCode); 53 void confirmReceive(long orderCode);
54 54
  55 + void judgeBegin(long orderCode);
  56 +
55 OrderCntResp getOrderCnt(OrderRequest req, OrderListType listType); 57 OrderCntResp getOrderCnt(OrderRequest req, OrderListType listType);
56 } 58 }
@@ -10,6 +10,7 @@ import com.yohobuy.ufo.model.order.common.TabType; @@ -10,6 +10,7 @@ import com.yohobuy.ufo.model.order.common.TabType;
10 import com.yohoufo.common.ApiResponse; 10 import com.yohoufo.common.ApiResponse;
11 import com.yohoufo.common.alarm.EventBusPublisher; 11 import com.yohoufo.common.alarm.EventBusPublisher;
12 import com.yohoufo.common.alarm.SmsAlarmEvent; 12 import com.yohoufo.common.alarm.SmsAlarmEvent;
  13 +import com.yohoufo.common.exception.UfoServiceException;
13 import com.yohoufo.common.utils.DateUtil; 14 import com.yohoufo.common.utils.DateUtil;
14 import com.yohoufo.dal.order.*; 15 import com.yohoufo.dal.order.*;
15 import com.yohoufo.dal.order.model.*; 16 import com.yohoufo.dal.order.model.*;
@@ -104,7 +105,7 @@ public class AppraiseService { @@ -104,7 +105,7 @@ public class AppraiseService {
104 throw new ServiceException(ServiceError.ORDER_NULL); 105 throw new ServiceException(ServiceError.ORDER_NULL);
105 } 106 }
106 final OrderStatus expectOrderStatus = OrderStatus.PLATFORM_CHECKING; 107 final OrderStatus expectOrderStatus = OrderStatus.PLATFORM_CHECKING;
107 - final OrderStatus targetOrderStatus = OrderStatus.WAITING_RECEIVE; 108 + final OrderStatus targetOrderStatus = OrderStatus.JUDGE_PASS;
108 if (expectOrderStatus.getCode() != buyerOrder.getStatus().intValue()){ 109 if (expectOrderStatus.getCode() != buyerOrder.getStatus().intValue()){
109 LOGGER.warn("in appraiseSuccess, buyer Order orderCode {} pstatus {}, expect Order Status {}", 110 LOGGER.warn("in appraiseSuccess, buyer Order orderCode {} pstatus {}, expect Order Status {}",
110 orderCode, buyerOrder.getStatus(), expectOrderStatus); 111 orderCode, buyerOrder.getStatus(), expectOrderStatus);
@@ -188,7 +189,8 @@ public class AppraiseService { @@ -188,7 +189,8 @@ public class AppraiseService {
188 BuyerConfirmEvent buyerConfirmEvent = BuyerConfirmEvent.builder().uid(buyerUid).orderCode(orderCode).build(); 189 BuyerConfirmEvent buyerConfirmEvent = BuyerConfirmEvent.builder().uid(buyerUid).orderCode(orderCode).build();
189 EventBusPublisher.publishEvent(buyerConfirmEvent); 190 EventBusPublisher.publishEvent(buyerConfirmEvent);
190 //记录物流信息 191 //记录物流信息
191 - expressInfoService.appraiseSuccess(buyerUid, expressCompanyId, orderCode, wayBillCode, depotNum,mobile); 192 + //不发物流
  193 + //expressInfoService.appraiseSuccess(buyerUid, expressCompanyId, orderCode, wayBillCode, depotNum,mobile);
192 //平台已发货给买家 194 //平台已发货给买家
193 inBoxFacade.appraisePassNotice(buyerUid, orderCode, sellerOrderGoods); 195 inBoxFacade.appraisePassNotice(buyerUid, orderCode, sellerOrderGoods);
194 }catch (Exception ex){ 196 }catch (Exception ex){
@@ -273,6 +275,106 @@ public class AppraiseService { @@ -273,6 +275,106 @@ public class AppraiseService {
273 } 275 }
274 276
275 /** 277 /**
  278 + * 发货
  279 + * (1)更新订单状态
  280 + * (2)记录物流
  281 + * (3)消息
  282 + */
  283 + public void deliverGoods(AppraiseExpressInfoBo appraiseExpressInfoBo){
  284 + Integer expressCompanyId = appraiseExpressInfoBo.getExpressCompanyId();
  285 + Long orderCode=appraiseExpressInfoBo.getOrderCode();
  286 + String wayBillCode=appraiseExpressInfoBo.getWayBillCode();
  287 + Integer depotNum=appraiseExpressInfoBo.getDepotNum();
  288 + String mobile=appraiseExpressInfoBo.getMobile();
  289 +
  290 + BuyerOrder buyerOrder = buyerOrderMapper.selectOnlyByOrderCode(orderCode);
  291 +
  292 + if (buyerOrder == null){
  293 + LOGGER.warn("deliverGoods getOrderInfo order not exist, orderCode {}", orderCode);
  294 + throw new ServiceException(ServiceError.ORDER_NULL);
  295 + }
  296 +
  297 + OrderStatus expectStatus = OrderStatus.JUDGE_PASS;
  298 + final OrderStatus targetStatus = OrderStatus.WAITING_RECEIVE;
  299 + if (buyerOrder.getStatus() != expectStatus.getCode()){
  300 + LOGGER.warn("deliverGoods expectStatus {}, actual status {}, orderCode {}", expectStatus,
  301 + buyerOrder.getStatus(), orderCode);
  302 + throw new ServiceException(ServiceError.ORDER_STATUS_INVALIDATE);
  303 + }
  304 +
  305 + //更新状态为 (待收货[买家])
  306 + int buyerUid = buyerOrder.getUid();
  307 + BuyerOrderGoods bog = buyerOrderGoodsMapper.selectByOrderCode(buyerUid, orderCode);
  308 + int skup = bog.getSkup();
  309 + SellerOrder sellerOrder = sellerOrderMapper.selectBySkup(skup);
  310 + SellerOrderGoods sellerOrderGoods = sellerOrderGoodsMapper.selectByPrimaryKey(skup);
  311 +
  312 + int updateBuyerCnt = buyerOrderMapper.updateStatusByOrderCode(orderCode, buyerUid,
  313 + expectStatus.getCode(), targetStatus.getCode(), DateUtil.getCurrentTimeSecond());
  314 +
  315 + LOGGER.info("deliverGoods updateBuyerCnt {} ,expectStatus {}, actual status {}, orderCode {}", updateBuyerCnt ,expectStatus,
  316 + buyerOrder.getStatus(), orderCode);
  317 + if(updateBuyerCnt==1){
  318 + int sellerUid = buyerOrder.getSellerUid();
  319 +
  320 + //记录物流信息
  321 + expressInfoService.appraiseSuccess(buyerUid, expressCompanyId, orderCode, wayBillCode, depotNum,mobile);
  322 + //平台已发货给买家 TODO
  323 + //inBoxFacade.appraisePassNotice(buyerUid, orderCode, sellerOrderGoods);
  324 +
  325 + //清理
  326 + cacheCleaner.delete(Arrays.asList(CacheKeyBuilder.orderListKey(sellerUid, TabType.SELL.getValue()),
  327 + CacheKeyBuilder.orderListKey(buyerUid, TabType.BUY.getValue()),
  328 + CacheKeyBuilder.sellerOrderDetailKey(sellerOrderGoods),
  329 + CacheKeyBuilder.orderDetailKey(sellerUid, TabType.SELL.getValue(), orderCode),
  330 + CacheKeyBuilder.orderDetailKey(buyerUid,TabType.BUY.getValue(), orderCode),
  331 + CacheKeyBuilder.buyerOrderNums(buyerUid)));
  332 +
  333 + ErpBuyerOrderEvent event = new ErpBuyerOrderEvent(buyerUid);
  334 + EventBusPublisher.publishEvent(event);
  335 +
  336 + }else{
  337 + LOGGER.warn("in deliverGoods update buyer count fail ,expectStatus {}, actual status {}, orderCode {}", updateBuyerCnt ,expectStatus,
  338 + buyerOrder.getStatus(), orderCode);
  339 + throw new UfoServiceException(400,"更新订单状态失败");
  340 + }
  341 + }
  342 +
  343 + /**
  344 + * 鉴定不通过退回
  345 + * (1)记录物流
  346 + * (2)消息
  347 + */
  348 + public void returnBackOrderCauseOfJudgeFailure(AppraiseExpressInfoBo appraiseExpressInfoBo){
  349 + Integer expressCompanyId = appraiseExpressInfoBo.getExpressCompanyId();
  350 + Long orderCode=appraiseExpressInfoBo.getOrderCode();
  351 + String wayBillCode=appraiseExpressInfoBo.getWayBillCode();
  352 + Integer depotNum=appraiseExpressInfoBo.getDepotNum();
  353 + String mobile=appraiseExpressInfoBo.getMobile();
  354 +
  355 + BuyerOrder buyerOrder = buyerOrderMapper.selectOnlyByOrderCode(orderCode);
  356 +
  357 + if (buyerOrder == null){
  358 + LOGGER.warn("returnBackOrderCauseOfJudgeFailure getOrderInfo order not exist, orderCode {}", orderCode);
  359 + throw new ServiceException(ServiceError.ORDER_NULL);
  360 + }
  361 +
  362 + OrderStatus expectStatus = OrderStatus.CHECKING_FAKE;
  363 + if (buyerOrder.getStatus() != expectStatus.getCode()){
  364 + LOGGER.warn("returnBackOrderCauseOfJudgeFailure expectStatus {}, actual status {}, orderCode {}", expectStatus,
  365 + buyerOrder.getStatus(), orderCode);
  366 + throw new ServiceException(ServiceError.ORDER_STATUS_INVALIDATE);
  367 + }
  368 +
  369 + //更新物流信息
  370 + int sellerUid = buyerOrder.getSellerUid();
  371 + expressInfoService.appraiseFail(sellerUid, expressCompanyId, orderCode, wayBillCode, depotNum,mobile);
  372 +
  373 + //发消息给卖家 TODO
  374 + //inBoxFacade.sendCancelledProductToSellerByCenter(sellerUid,wayBillCode);
  375 + }
  376 +
  377 + /**
276 * 直接退回商品,记录物流,不涉及状态更改 378 * 直接退回商品,记录物流,不涉及状态更改
277 * @param expressCompanyId 379 * @param expressCompanyId
278 * @param orderCode 380 * @param orderCode
@@ -396,6 +498,7 @@ public class AppraiseService { @@ -396,6 +498,7 @@ public class AppraiseService {
396 payRefundService.refund(req, bleb); 498 payRefundService.refund(req, bleb);
397 // 499 //
398 500
  501 + //TODO 消息
399 inBoxFacade.noticeSellerWhenAppraiseFail( sellerOrderGoods,orderCode,wayBillCode); 502 inBoxFacade.noticeSellerWhenAppraiseFail( sellerOrderGoods,orderCode,wayBillCode);
400 inBoxFacade.buyerGetEarnestMoneyWhenAppraiseFail(buyerUid, buyerOrder.getOrderCode(), sellerOrderGoods.getProductName()); 503 inBoxFacade.buyerGetEarnestMoneyWhenAppraiseFail(buyerUid, buyerOrder.getOrderCode(), sellerOrderGoods.getProductName());
401 }catch (Exception ex){ 504 }catch (Exception ex){
@@ -414,7 +517,8 @@ public class AppraiseService { @@ -414,7 +517,8 @@ public class AppraiseService {
414 }finally { 517 }finally {
415 518
416 //更新物流信息,写到最后 519 //更新物流信息,写到最后
417 - expressInfoService.appraiseFail(sellerUid, expressCompanyId, orderCode, wayBillCode, depotNum,mobile); 520 + //鉴定不通过,不发物流
  521 + //expressInfoService.appraiseFail(sellerUid, expressCompanyId, orderCode, wayBillCode, depotNum,mobile);
418 } 522 }
419 523
420 }else{ 524 }else{
@@ -630,14 +630,18 @@ public class BuyerOrderServiceImpl implements IBuyerOrderService { @@ -630,14 +630,18 @@ public class BuyerOrderServiceImpl implements IBuyerOrderService {
630 public void confirmReceive(long orderCode) { 630 public void confirmReceive(long orderCode) {
631 logger.info("in confirmReceive, orderCode {}", orderCode); 631 logger.info("in confirmReceive, orderCode {}", orderCode);
632 OrderStatus expectStatus = OrderStatus.SELLER_SEND_OUT; 632 OrderStatus expectStatus = OrderStatus.SELLER_SEND_OUT;
633 - OrderStatus targetStatus = OrderStatus.PLATFORM_CHECKING; 633 + OrderStatus targetStatus = OrderStatus.PLATFORM_RECEIVE;
634 BuyerOrder buyerOrder = buyerOrderMapper.selectByOrderCode(orderCode); 634 BuyerOrder buyerOrder = buyerOrderMapper.selectByOrderCode(orderCode);
635 635
636 if (buyerOrder != null && buyerOrder.getStatus() == expectStatus.getCode()){ 636 if (buyerOrder != null && buyerOrder.getStatus() == expectStatus.getCode()){
637 int uid = buyerOrder.getUid(); 637 int uid = buyerOrder.getUid();
638 int sellerUid = buyerOrder.getSellerUid(); 638 int sellerUid = buyerOrder.getSellerUid();
  639 + logger.info("in confirmReceive begin update status orderCode {},uid {} ,sellerUid {}", orderCode,uid,sellerUid);
639 buyerOrderMapper.updateStatusByOrderCode(orderCode, uid, expectStatus.getCode(), 640 buyerOrderMapper.updateStatusByOrderCode(orderCode, uid, expectStatus.getCode(),
640 targetStatus.getCode(), DateUtil.getCurrentTimeSecond()); 641 targetStatus.getCode(), DateUtil.getCurrentTimeSecond());
  642 +
  643 + cleanCacheAfterUpdateStatus(orderCode,uid,sellerUid);
  644 + /*
641 BuyerOrderGoods bog = buyerOrderGoodsMapper.selectByOrderCode(uid, orderCode); 645 BuyerOrderGoods bog = buyerOrderGoodsMapper.selectByOrderCode(uid, orderCode);
642 SellerOrderGoods sellerOrderGoods = sellerOrderGoodsMapper.selectByPrimaryKey(bog.getSkup()); 646 SellerOrderGoods sellerOrderGoods = sellerOrderGoodsMapper.selectByPrimaryKey(bog.getSkup());
643 647
@@ -650,10 +654,45 @@ public class BuyerOrderServiceImpl implements IBuyerOrderService { @@ -650,10 +654,45 @@ public class BuyerOrderServiceImpl implements IBuyerOrderService {
650 654
651 ErpBuyerOrderEvent event = new ErpBuyerOrderEvent(uid); 655 ErpBuyerOrderEvent event = new ErpBuyerOrderEvent(uid);
652 EventBusPublisher.publishEvent(event); 656 EventBusPublisher.publishEvent(event);
  657 + */
  658 +
653 } 659 }
654 } 660 }
655 661
656 @Override 662 @Override
  663 + public void judgeBegin(long orderCode){
  664 + logger.info("in judgeBegin, orderCode {}", orderCode);
  665 + OrderStatus expectStatus = OrderStatus.PLATFORM_RECEIVE;
  666 + OrderStatus targetStatus = OrderStatus.PLATFORM_CHECKING;
  667 + BuyerOrder buyerOrder = buyerOrderMapper.selectByOrderCode(orderCode);
  668 +
  669 + if (buyerOrder != null && buyerOrder.getStatus() == expectStatus.getCode()){
  670 + int uid = buyerOrder.getUid();
  671 + int sellerUid = buyerOrder.getSellerUid();
  672 + logger.info("in judgeBegin begin update status orderCode {},uid {} ,sellerUid {}", orderCode,uid,sellerUid);
  673 + buyerOrderMapper.updateStatusByOrderCode(orderCode, uid, expectStatus.getCode(),
  674 + targetStatus.getCode(), DateUtil.getCurrentTimeSecond());
  675 + cleanCacheAfterUpdateStatus(orderCode,uid,sellerUid);
  676 + }
  677 + }
  678 +
  679 + //清理缓存
  680 + private void cleanCacheAfterUpdateStatus(long orderCode,int uid,int sellerUid){
  681 + BuyerOrderGoods bog = buyerOrderGoodsMapper.selectByOrderCode(uid, orderCode);
  682 + SellerOrderGoods sellerOrderGoods = sellerOrderGoodsMapper.selectByPrimaryKey(bog.getSkup());
  683 + logger.info("in cleanCacheAfterUpdateStatus begin clean cache orderCode {},uid {} ,sellerUid {}", orderCode,uid,sellerUid);
  684 + cacheCleaner.delete(Arrays.asList(CacheKeyBuilder.orderListKey(sellerUid, TabType.SELL.getValue()),
  685 + CacheKeyBuilder.orderListKey(uid, TabType.BUY.getValue()),
  686 + CacheKeyBuilder.sellerOrderDetailKey(sellerOrderGoods),
  687 + CacheKeyBuilder.orderDetailKey(sellerUid, TabType.SELL.getValue(), orderCode),
  688 + CacheKeyBuilder.orderDetailKey(uid, TabType.BUY.getValue(), orderCode),
  689 + CacheKeyBuilder.buyerOrderNums(uid)));
  690 +
  691 + ErpBuyerOrderEvent event = new ErpBuyerOrderEvent(uid);
  692 + EventBusPublisher.publishEvent(event);
  693 + }
  694 +
  695 + @Override
657 public OrderCntResp getOrderCnt(OrderRequest req, OrderListType listType) { 696 public OrderCntResp getOrderCnt(OrderRequest req, OrderListType listType) {
658 logger.info("in buyer getOrderCnt req {} listType {}", req, listType); 697 logger.info("in buyer getOrderCnt req {} listType {}", req, listType);
659 OrderCntResp resp; 698 OrderCntResp resp;