diff --git a/mall-common/src/main/java/com/suisung/mall/common/modules/store/ShopStoreSfOrder.java b/mall-common/src/main/java/com/suisung/mall/common/modules/store/ShopStoreSfOrder.java index 639229f5..655dec2a 100644 --- a/mall-common/src/main/java/com/suisung/mall/common/modules/store/ShopStoreSfOrder.java +++ b/mall-common/src/main/java/com/suisung/mall/common/modules/store/ShopStoreSfOrder.java @@ -44,7 +44,7 @@ public class ShopStoreSfOrder { private String sf_bill_id; @ApiModelProperty(value = "顺丰店铺id") - private String sf_shop_id; + private String shop_id; @ApiModelProperty(value = "商家订单号,唯一的") private String shop_order_id; @@ -61,6 +61,18 @@ public class ShopStoreSfOrder { @ApiModelProperty(value = "状态说明") private String sf_order_status_desc; + @ApiModelProperty(value = "取消码") + private String cancel_code; + + @ApiModelProperty(value = "取消原因") + private String cancel_reason; + + @ApiModelProperty(value = "配送员位置经度") + private Long rider_lng; + + @ApiModelProperty(value = "配送员位置维度") + private Long rider_lat; + @ApiModelProperty(value = "推送时间") private Long push_time; diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/sfexpress/service/impl/SFExpressApiServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/sfexpress/service/impl/SFExpressApiServiceImpl.java index 1af4fbd1..73857ee0 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/sfexpress/service/impl/SFExpressApiServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/sfexpress/service/impl/SFExpressApiServiceImpl.java @@ -166,6 +166,9 @@ public class SFExpressApiServiceImpl implements SFExpressApiService { // 取件码。在顺丰同城商户侧配置,配置后有此字段。 String pickupCode = shopStoreSfOrder.getPickup_code() != null ? shopStoreSfOrder.getPickup_code().toString() : ""; + + // TODO 商城订单状态:从 待发货 更改为 待收货 + return Pair.of(true, pickupCode); } @@ -180,6 +183,11 @@ public class SFExpressApiServiceImpl implements SFExpressApiService { @Override public SFExpressApiRes cancelOrder(String sfOrderId, Integer cancelCode, String cancelReason) { Map params = buildCommonParams(); + params.put("order_id", sfOrderId); + if (StrUtil.isNotEmpty(cancelReason) && cancelCode != null) { + params.put("cancel_code", sfOrderId); + params.put("cancel_reason", sfOrderId); + } return cancelOrder(params); } @@ -206,7 +214,15 @@ public class SFExpressApiServiceImpl implements SFExpressApiService { return new SFExpressApiRes().fail(-1,"顺丰同城:无返回值!"); } - return JsonUtil.json2object(retRespStr, SFExpressApiRes.class); + SFExpressApiRes sfExpressApiRes = JsonUtil.json2object(retRespStr, SFExpressApiRes.class); + if (sfExpressApiRes == null) { + logger.error("顺丰同城:取消订单,返回值异常!"); + return new SFExpressApiRes().fail(-1,"顺丰同城:无返回值!"); + } + + // TODO 更改商品订单状态: + + return sfExpressApiRes; } /** @@ -382,6 +398,16 @@ public class SFExpressApiServiceImpl implements SFExpressApiService { logger.info("接收顺丰原因订单取消回调返回的 JSON 数据:{}", jsonData); + // 更改顺丰同城订单状态 + ShopStoreSfOrder shopStoreSfOrder = toShopStoreSfOrder(jsonData); + Boolean success = shopStoreSfOrderService.updateShopStoreSfOrderStatus(shopStoreSfOrder); + if (!success) { + return new SFExpressApiRes().fail(-1,"状态处理失败!"); + } + + // TODO 更改商城订单状态为:已取消,注意事务问题 + + return new SFExpressApiRes().success("success"); } @@ -404,6 +430,13 @@ public class SFExpressApiServiceImpl implements SFExpressApiService { logger.info("接收顺丰配送状态更改回调返回的 JSON 数据:{}", jsonData); + // 更改顺丰同城订单状态 + ShopStoreSfOrder shopStoreSfOrder = toShopStoreSfOrder(jsonData); + Boolean success = shopStoreSfOrderService.updateShopStoreSfOrderStatus(shopStoreSfOrder); + if (!success) { + return new SFExpressApiRes().fail(-1,"状态处理失败!"); + } + return new SFExpressApiRes().success("success"); } @@ -426,6 +459,33 @@ public class SFExpressApiServiceImpl implements SFExpressApiService { logger.info("接收顺丰订单完成回调返回的 JSON 数据:{}", jsonData); + + + // 更改顺丰同城订单状态 + ShopStoreSfOrder shopStoreSfOrder = toShopStoreSfOrder(jsonData); + if ( shopStoreSfOrder == null) { + return new SFExpressApiRes().fail(-1,"返回数据转换失败!"); + } + + ShopStoreSfOrder order = shopStoreSfOrderService.getBySfOrderId(shopStoreSfOrder.getSf_order_id()); + if (order == null) { + return new SFExpressApiRes().fail(-1,"订单不存在!"); + } + + // 订单状态已经更改过,无需更改 + if (order.getSf_order_status().equals(17)){ + return new SFExpressApiRes().success("success"); + } + + + Boolean success = shopStoreSfOrderService.updateShopStoreSfOrderStatus(shopStoreSfOrder); + if (!success) { + return new SFExpressApiRes().fail(-1,"状态处理失败!"); + } + + // TODO 更改商城订单状态为:已完成,注意事务问题 + + return new SFExpressApiRes().success("success"); } @@ -500,4 +560,17 @@ public class SFExpressApiServiceImpl implements SFExpressApiService { generateOpenSign(postData); return sb; } + + /** + * 回调结果数据填充顺丰同城订单实例 + * @param resultJSON + * @return + */ + private ShopStoreSfOrder toShopStoreSfOrder(String resultJSON){ + if(StrUtil.isBlank(resultJSON)){ + return null; + } + + return JSONUtil.toBean(resultJSON, ShopStoreSfOrder.class); + } } diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/store/service/ShopStoreSfOrderService.java b/mall-shop/src/main/java/com/suisung/mall/shop/store/service/ShopStoreSfOrderService.java index c2ced356..331f1296 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/store/service/ShopStoreSfOrderService.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/store/service/ShopStoreSfOrderService.java @@ -2,9 +2,18 @@ package com.suisung.mall.shop.store.service; import com.suisung.mall.common.modules.store.ShopStoreSfOrder; import com.suisung.mall.core.web.service.IBaseService; +import io.swagger.models.auth.In; public interface ShopStoreSfOrderService extends IBaseService { + + /** + * 根据顺丰同城订单id获取一条记录 + * @param sfOrderId + * @return + */ + ShopStoreSfOrder getBySfOrderId(String sfOrderId); + /** * 新增一个顺丰同城订单记录 * @@ -14,5 +23,11 @@ public interface ShopStoreSfOrderService extends IBaseService Boolean insertShopStoreSfOrder(ShopStoreSfOrder record); + /** + * 更新顺丰同城订单的状态等关键字段 + * @param record + * @return + */ + Boolean updateShopStoreSfOrderStatus(ShopStoreSfOrder record); } diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreSfOrderServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreSfOrderServiceImpl.java index ef981b3b..8f7b6d73 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreSfOrderServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreSfOrderServiceImpl.java @@ -9,6 +9,8 @@ package com.suisung.mall.shop.store.service.impl; import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.suisung.mall.common.modules.store.ShopStoreSfOrder; import com.suisung.mall.core.web.service.impl.BaseServiceImpl; import com.suisung.mall.shop.store.mapper.ShopStoreSfOrderMapper; @@ -17,12 +19,30 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; +import java.util.Date; + @Service public class ShopStoreSfOrderServiceImpl extends BaseServiceImpl implements ShopStoreSfOrderService { private static final Logger logger = LoggerFactory.getLogger(ShopStoreSfOrderServiceImpl.class); + /** + * 根据顺丰同城订单id获取一条记录 + * + * @param sfOrderId + * @return + */ + @Override + public ShopStoreSfOrder getBySfOrderId(String sfOrderId) { + if (StrUtil.isBlank(sfOrderId)) { + return null; + } + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("sf_order_id", sfOrderId); + return getOne(wrapper); + } + /** * 新增一个顺丰同城订单记录 * @@ -32,15 +52,90 @@ public class ShopStoreSfOrderServiceImpl extends BaseServiceImpl updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("sf_order_id", record.getSf_order_id()); + + if (record.getSf_order_status() != null && record.getSf_order_status() > 0) { + updateWrapper.set("sf_order_status", record.getSf_order_status() ); + cnt+=1; + } + + if (StrUtil.isNotEmpty(record.getSf_order_status_desc())) { + updateWrapper.set("sf_order_status_desc", record.getSf_order_status_desc()); + cnt+=1; + } + + if (StrUtil.isNotEmpty(record.getOperator_name())) { + updateWrapper.set("operator_name", record.getOperator_name()); + cnt+=1; + } + + if (StrUtil.isNotEmpty(record.getOperator_phone())) { + updateWrapper.set("operator_phone", record.getOperator_phone()); + cnt+=1; + } + + if (StrUtil.isNotEmpty(record.getFeed())) { + updateWrapper.set("feed", record.getFeed()); + cnt+=1; + } + + if (StrUtil.isNotEmpty(record.getCancel_code())) { + updateWrapper.set("cancel_code", record.getCancel_code()); + cnt+=1; + } + + if (StrUtil.isNotEmpty(record.getCancel_reason())) { + updateWrapper.set("cancel_reason", record.getCancel_reason()); + cnt+=1; + } + + if (record.getRider_lng()!=null) { + updateWrapper.set("rider_lng", record.getRider_lng()); + cnt+=1; + } + + if (record.getRider_lat()!=null) { + updateWrapper.set("rider_lat", record.getPush_time()); + cnt+=1; + } + + if (record.getPush_time()!=null && record.getPush_time()>0) { + updateWrapper.set("push_time", record.getPush_time()); + cnt+=1; + } + + updateWrapper.set("updated_at", new Date()); + if (cnt <= 0) { + return false; + } + + return update(updateWrapper); + } }