package com.ydd.app.callback.controller; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.fasterxml.jackson.databind.ObjectMapper; import com.ydd.api.DeliveryCallbackApi; import com.ydd.app.service.ApiDeliveryBindService; import com.ydd.app.service.ApiOrderBackService; import com.ydd.app.service.impl.ApiCallBackContent; import com.ydd.app.service.impl.ApiCallBackShunFeng; import com.ydd.common.enums.DeliveryTypeEnums; import com.ydd.module.domain.OrderDelivery; import com.ydd.module.dto.CallBackOrderDto; import com.ydd.module.service.IOrderDeliveryService; import com.ydd.third.common.utils.StringUtils; import com.ydd.third.common.vo.ResObject; import com.ydd.third.common.vo.callback.CallBackOrderVo; import com.ydd.third.common.vo.callback.MeituanCallbackOrderVo; import com.ydd.third.common.vo.callback.ShunfengCallbackOrderVo; import com.ydd.third.common.vo.callback.ShunfengCallbackShopVo; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; @Slf4j @RestController @RequestMapping("/app/delivery/shunfeng/callback") public class ShunfengDeliveryCallback { @Autowired private DeliveryCallbackApi callback; @Resource private ApiOrderBackService apiOrderService; @Resource private IOrderDeliveryService iOrderDeliveryService; @Resource private ApiDeliveryBindService apiDeliveryBindService; @PostMapping("/doOrder") public String doOrder(HttpServletRequest request, @RequestBody JSONObject jsonParam){ log.info("顺丰回调参数:"+jsonParam.toJSONString()); JSONObject res = new JSONObject(); String sign = request.getParameter("sign"); if (StringUtils.isBlank(sign)) { res.put("error_code",1); res.put("error_msg","fail"); log.error("sign签名为空"); return res.toJSONString(); } if (null == jsonParam) { res.put("error_code",1); res.put("error_msg","fail"); log.error("json参数为空"); return res.toJSONString(); } //@RequestParam Map params CallBackOrderVo vo = new CallBackOrderVo(); vo.setLbClient(DeliveryTypeEnums.SHUN_FENG.getName()); vo.setParams(jsonParam); vo.setSign(sign); Object result = callback.doOrder(vo); ObjectMapper objectMapper = new ObjectMapper(); ResObject callbackRes = objectMapper.convertValue(result, ResObject.class); if (callbackRes.getCode() == 0) { ShunfengCallbackOrderVo orderVo = objectMapper.convertValue(callbackRes.getData(), ShunfengCallbackOrderVo.class); log.info(JSONObject.toJSONString(orderVo)); String urlIndex = orderVo.getUrlIndex(); if (StringUtils.isNotBlank(urlIndex)) { if (urlIndex.equals("rider_status")) { //配送状态更改回调 ApiCallBackContent content = new ApiCallBackContent(new ApiCallBackShunFeng(orderVo)); OrderDelivery orderDelivery = iOrderDeliveryService.getOne(new QueryWrapper().eq("child_order_sn",orderVo.getShopOrderId())); CallBackOrderDto dto = content.createCallBack(); dto.setParentOrderSn(orderDelivery.getOrderSn()); apiOrderService.callBackOrder(dto); // apiOrderService.callBackOrder(content.createCallBack()); } else if (urlIndex.equals("order_complete")) { //订单完成回调 /** * 对返回的数据作处理 */ ApiCallBackContent content = new ApiCallBackContent(new ApiCallBackShunFeng(orderVo)); OrderDelivery orderDelivery = iOrderDeliveryService.getOne(new QueryWrapper().eq("child_order_sn",orderVo.getShopOrderId())); CallBackOrderDto dto = content.createCallBack(); dto.setParentOrderSn(orderDelivery.getOrderSn()); apiOrderService.callBackOrder(dto); // apiOrderService.callBackOrder(content.createCallBack()); } else if (urlIndex.equals("sf_cancel")) { //顺丰原因订单取消回调 /** * 对返回的数据作处理 */ ApiCallBackContent content = new ApiCallBackContent(new ApiCallBackShunFeng(orderVo)); OrderDelivery orderDelivery = iOrderDeliveryService.getOne(new QueryWrapper().eq("child_order_sn",orderVo.getShopOrderId())); CallBackOrderDto dto = content.createCallBack(); dto.setParentOrderSn(orderDelivery.getOrderSn()); apiOrderService.callBackOrder(dto); // apiOrderService.callBackOrder(content.createCallBack()); } else if (urlIndex.equals("rider_exception")) { //订单发生异常回调 /** * 对返回的数据作处理 */ ApiCallBackContent content = new ApiCallBackContent(new ApiCallBackShunFeng(orderVo)); // apiOrderService.callBackOrder(content.createCallBack()); OrderDelivery orderDelivery = iOrderDeliveryService.getOne(new QueryWrapper().eq("child_order_sn",orderVo.getShopOrderId())); CallBackOrderDto dto = content.createCallBack(); dto.setParentOrderSn(orderDelivery.getOrderSn()); apiOrderService.callBackOrder(dto); }if (urlIndex.equals("rider_recall")) { //骑士撤单状态回调 转单 ApiCallBackContent content = new ApiCallBackContent(new ApiCallBackShunFeng(orderVo)); OrderDelivery orderDelivery = iOrderDeliveryService.getOne(new QueryWrapper().eq("child_order_sn",orderVo.getShopOrderId())); CallBackOrderDto dto = content.createCallBack(); dto.setParentOrderSn(orderDelivery.getOrderSn()); apiOrderService.callBackOrder(dto); // apiOrderService.callBackOrder(content.createCallBack()); } } // Integer status = data.getInteger("order_status") /** * 对返数的数据作处理 */ res.put ("error_code",0); res.put("error_msg","success"); } else { res.put("error_code",1); res.put("error_msg","fail"); log.error(callbackRes.getMsg()); } return res.toJSONString(); } /** * 顺丰异步通知建店回调 * @param jsonParam */ @RequestMapping("/doAuth") public String doAuth(HttpServletRequest request, @RequestBody JSONObject jsonParam) { log.info("顺丰建店回调参数----->>>>>>" + jsonParam.toJSONString()); JSONObject res = new JSONObject(); String sign = request.getParameter("sign"); if (StringUtils.isBlank(sign)) { res.put("error_code",1); res.put("error_msg","fail"); log.error("sign签名为空"); return res.toJSONString(); } if (null == jsonParam) { res.put("error_code",1); res.put("error_msg","fail"); log.error("json参数为空"); return res.toJSONString(); } ResObject callbackRes = callback.sfAuth(sign, jsonParam); if (callbackRes.getCode() == 0) { ShunfengCallbackShopVo shopVo = callbackRes.getData(); apiDeliveryBindService.bindShunfeng(shopVo.getOutShopId(), shopVo.getShopId(), DeliveryTypeEnums.SHUN_FENG.getType()); /** * 对返数的数据作处理 */ res.put ("error_code",0); res.put("error_msg","success"); }else { res.put("error_code",1); res.put("error_msg","fail"); String failReason = jsonParam.getString("fail_reason"); log.error(failReason); } return res.toJSONString(); } }