package com.ydd.app.callback.controller; import com.alibaba.fastjson.JSONObject; import com.ydd.api.ElemeApi; import com.ydd.app.service.ApiWaimaiPlatformService; import com.ydd.app.service.ApiWaimaiService; import com.ydd.module.enums.DeliveryStatusEnum; import com.ydd.module.push.MessagePushService; import com.ydd.third.common.utils.StringUtils; import com.ydd.third.common.vo.ResObject; import com.ydd.third.common.vo.waimai.*; import com.ydd.third.common.vo.waimai.eleme.api.entity.user.OAuthorizedShop; import com.ydd.third.common.vo.waimai.eleme.oauth.response.Token; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import java.util.List; import java.util.Map; @Slf4j @RestController @RequestMapping("/app/waimai/eleme/callback") public class ElemeWaiMaiCallback { @Autowired private ElemeApi elemeCallback; @Autowired private MessagePushService messagePushService; @Resource private ApiWaimaiService apiWaimaiService; @Autowired ApiWaimaiPlatformService apiWaimaiPlatformService; /** * 授权重定向跳转 * * @param params * @return */ @RequestMapping("/doOAuth") public String doOAuth(@RequestParam Map params) { if (null == params) { return ""; } log.info("饿了么token--------"+JSONObject.toJSONString(params)); String code = params.get("code"); String state = params.get("state"); if (StringUtils.isNotBlank(code) && StringUtils.isNotBlank(state)) { ResObject res = elemeCallback.doOAuthToken(code, state); if (res.getCode() == 0) { log.info("饿了么res++++++++"+JSONObject.toJSONString(res)); ElemeMerchantResultVo resultVo = res.getData(); log.info(JSONObject.toJSONString(resultVo)); //得到代表本地商家的state String stateId = resultVo.getState(); //得到token Token token = resultVo.getToken(); String accessToken = token.getAccessToken();//访问令牌,API访问时需要的token参数 Long expiresIn = token.getExpiresIn(); //令牌有效时间,单位秒,在令牌有效期内可以重复使用。沙箱环境为1天、正式环境为30天 String refresh_token = token.getRefreshToken();//更新令牌,用来在令牌即将到期时延续访问令牌的有效期,获取一个新的访问令牌和更新令牌refresh_token。 //得到商户信息 String merchantId = resultVo.getMerchantId(); //商户id String merchantName = resultVo.getMerchantName(); //商户账号名 List shopList = resultVo.getShopList(); //商户的授权门店列表 apiWaimaiPlatformService.doOAuth(resultVo); return "获取token成功,token:" + token.getAccessToken(); } else { return res.getMsg(); } } else { return "非法访问!"; } } @RequestMapping("/doOrder") public String doOrder(@RequestBody(required = false) JSONObject jsonParams) { log.info("饿了么订单:"); if (null == jsonParams) { return "{\"message\":\"ok\"}"; } log.info("饿了么订单:" + jsonParams.toJSONString()); JSONObject resJson = new JSONObject(); try { ResObject callbackRes = elemeCallback.doOrder(jsonParams); // Long appId = jsonParams.getLong("appId"); // String requestId = jsonParams.getString("requestId"); // Integer type = jsonParams.getInteger("type"); // String message = jsonParams.getString("message"); // Long shopId = jsonParams.getLong("shopId"); // Long timestamp= jsonParams.getLong("timestamp"); // String signature = jsonParams.getString("signature"); if (callbackRes.getCode() == 0) { Integer type = jsonParams.getInteger("type"); Long shopId = jsonParams.getLong("shopId"); if (type == 10) { //新的订单 ElemeOrderResultVo orderResultVo = (ElemeOrderResultVo) callbackRes.getData(); //处理新的订单 apiWaimaiService.doElmNewOrder(orderResultVo); } else if (type == 12 || type == 14 || type == 15 || type == 17) { //订单状态变更消息 ElemeOrderStateResultVo orderResultVo = (ElemeOrderStateResultVo) callbackRes.getData(); // log.info(JSONObject.toJSONString(orderResultVo)); apiWaimaiService.doStateNewOrder(orderResultVo, type); //12:商户已经接单, 14:订单被取消(接单前) 15:订单置为无效(接单后)17:订单强制无效(商家主动取消已接订单、用户1分钟内取消 //18:订单完结 } else if (type >= 20 && type <= 26) { //取消单消息 ElemeOrderRefundResultVo orderResultVo = (ElemeOrderRefundResultVo) callbackRes.getData(); //log.info(JSONObject.toJSONString(orderResultVo)); apiWaimaiService.doEleCancelOrder(orderResultVo.getOrderId(), type); //20:下单用户申请取消 21:用户取消取消订单 22:商户拒绝取消订单 23:商户同意取消订单 24:用户申请仲裁 //25:客服仲裁取消单申请有效 26:客服仲裁取消单申请无效 } else if (type >= 30 && type <= 39) { //退单消息 ElemeOrderRefundResultVo orderResultVo = (ElemeOrderRefundResultVo) callbackRes.getData(); log.info(JSONObject.toJSONString(orderResultVo)); //30:用户申请退单 31:用户取消退单 32:商户拒绝退单 33:商户同意退单 34:用户申请仲裁 35:客服仲裁退单有效 //36:客服仲裁退单无效 37:用户申请售中取消,商家15分钟内没有处理,自动退单成功 38:商家拒绝取消,用户24小时没有申请仲裁,自动退单失败 //39:商户售中部分取消 } else if (type == 45) { //催单消息 ElemeRemindResultVo orderResultVo = (ElemeRemindResultVo) callbackRes.getData(); log.info(JSONObject.toJSONString(orderResultVo)); //45:用户催单 } else if (type == 18) { //完结 ElemeOrderStateResultVo orderResultVo = (ElemeOrderStateResultVo) callbackRes.getData(); log.info(JSONObject.toJSONString(orderResultVo)); apiWaimaiService.updateWaimaiOrderStatus(orderResultVo.getOrderId(),DeliveryStatusEnum.FINISH.status); } else if (type >= 52 && type <= 56) { //运单状态变更消息 ElemeRemindResultVo orderResultVo = (ElemeRemindResultVo) callbackRes.getData(); log.info(JSONObject.toJSONString(orderResultVo)); switch (type){ case 52: apiWaimaiService.updateWaimaiOrderStatus(orderResultVo.getOrderId(),DeliveryStatusEnum.ORDERS_TO_BE_RECEIVED.status); break; case 53: apiWaimaiService.updateWaimaiOrderStatus(orderResultVo.getOrderId(),DeliveryStatusEnum.TO_BE_DELIVERED.status); break; case 54: apiWaimaiService.updateWaimaiOrderStatus(orderResultVo.getOrderId(),DeliveryStatusEnum.IN_DELIVERY.status); break; case 55: apiWaimaiService.updateWaimaiOrderStatus(orderResultVo.getOrderId(),DeliveryStatusEnum.IN_DELIVERY.status); break; case 56: apiWaimaiService.updateWaimaiOrderStatus(orderResultVo.getOrderId(),DeliveryStatusEnum.FINISH.status); break; default:break; } } //服务商接收后需立即返回{“message”:“ok”} resJson.put("message", "ok"); } else { log.error(callbackRes.getMsg()); resJson.put("message", "error"); } } catch (Exception e) { log.error("饿了么回调异常", e); return "{\"message\":\"ok\"}"; } return resJson.toJSONString(); } }