思迅商品同步
This commit is contained in:
parent
0fe181fdae
commit
b8bc6f658e
@ -0,0 +1,62 @@
|
||||
/*
|
||||
* Copyright (c) 2025. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
||||
* Morbi non lorem porttitor neque feugiat blandit. Ut vitae ipsum eget quam lacinia accumsan.
|
||||
* Etiam sed turpis ac ipsum condimentum fringilla. Maecenas magna.
|
||||
* Proin dapibus sapien vel ante. Aliquam erat volutpat. Pellentesque sagittis ligula eget metus.
|
||||
* Vestibulum commodo. Ut rhoncus gravida arcu.
|
||||
*/
|
||||
|
||||
package com.suisung.mall.common.modules.sync;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@EqualsAndHashCode
|
||||
@ApiModel(value = "第三方App同步设置", description = "第三方App同步设置")
|
||||
public class SyncApp implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ApiModelProperty(value = "自增ID")
|
||||
@TableId(value = "id", type = IdType.AUTO)
|
||||
private Long id;
|
||||
|
||||
@ApiModelProperty(value = "app id")
|
||||
private String app_id;
|
||||
|
||||
@ApiModelProperty(value = "app key")
|
||||
private String app_key;
|
||||
|
||||
@ApiModelProperty(value = "app 密钥")
|
||||
private String app_secret;
|
||||
|
||||
@ApiModelProperty(value = "关联店铺Id")
|
||||
private String store_id;
|
||||
|
||||
@ApiModelProperty(value = "名称")
|
||||
private String name;
|
||||
|
||||
@ApiModelProperty(value = "介绍")
|
||||
private String intro;
|
||||
|
||||
@ApiModelProperty(value = "状态")
|
||||
private Integer status;
|
||||
|
||||
@ApiModelProperty(value = "新增时间")
|
||||
private Date created_at;
|
||||
|
||||
@ApiModelProperty(value = "更新时间")
|
||||
private Date updated_at;
|
||||
}
|
||||
@ -23,7 +23,8 @@ import java.io.Serializable;
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
public class SFExpressApiRes implements Serializable {
|
||||
public class ThirdApiRes implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
@ApiModelProperty(value = "错误码")
|
||||
private Integer error_code;
|
||||
@ -34,11 +35,11 @@ public class SFExpressApiRes implements Serializable {
|
||||
@ApiModelProperty(value = "错误数据")
|
||||
public Object error_data;
|
||||
|
||||
public SFExpressApiRes fail(Integer errorCode, String errorMsg) {
|
||||
return new SFExpressApiRes(errorCode, errorMsg, null, null);
|
||||
public ThirdApiRes fail(Integer errorCode, String errorMsg) {
|
||||
return new ThirdApiRes(errorCode, errorMsg, null, null);
|
||||
}
|
||||
|
||||
public SFExpressApiRes success(String errorMsg) {
|
||||
return new SFExpressApiRes(0, errorMsg, null, null);
|
||||
public ThirdApiRes success(String errorMsg) {
|
||||
return new ThirdApiRes(0, errorMsg, null, null);
|
||||
}
|
||||
}
|
||||
@ -253,7 +253,7 @@ public class CommonUtil {
|
||||
MessageDigest md = MessageDigest.getInstance("MD5");
|
||||
byte[] md5 = md.digest(sb.toString().getBytes(StandardCharsets.UTF_8));
|
||||
int i;
|
||||
StringBuffer buf = new StringBuffer("");
|
||||
StringBuffer buf = new StringBuffer();
|
||||
for (byte b : md5) {
|
||||
i = b;
|
||||
if (i < 0) {
|
||||
@ -272,6 +272,14 @@ public class CommonUtil {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 验证MD5摘要签名
|
||||
* @param sign
|
||||
* @param postData
|
||||
* @param appId
|
||||
* @param appKey
|
||||
* @return
|
||||
*/
|
||||
public static boolean checkOpenSign(String sign, String postData, String appId, String appKey) {
|
||||
if (StrUtil.isBlank(sign) || StrUtil.isBlank(postData)|| StrUtil.isBlank(appId)|| StrUtil.isBlank(appKey)) {
|
||||
logger.error("验签时缺少必要参数!");
|
||||
|
||||
@ -83,6 +83,7 @@ secure:
|
||||
- "/shop/sf-express/cancel-order/notify"
|
||||
- "/shop/sf-express/rider-order-status/notify"
|
||||
- "/shop/sf-express/order-complete/notify"
|
||||
- "/shop/sync/third/**"
|
||||
- "/mobile/shop/sf-express/order/status/listening/**"
|
||||
- "/admin/shop/open/**"
|
||||
- "/admin/account/open/**"
|
||||
|
||||
@ -27,6 +27,27 @@ public interface ShopBaseProductBrandService extends IBaseService<ShopBaseProduc
|
||||
|
||||
boolean enable(String brand_name, Integer brand_id, Integer brand_enable);
|
||||
|
||||
/**
|
||||
* 根据品牌名称判断记录是否存在
|
||||
* @param brand_name
|
||||
* @return
|
||||
*/
|
||||
boolean existsByBrandName(String brand_name);
|
||||
|
||||
/**
|
||||
* 根据品牌名称查询记录列表
|
||||
* @param brand_name
|
||||
* @return
|
||||
*/
|
||||
List<ShopBaseProductBrand> selectByBrandName(String brand_name);
|
||||
|
||||
/**
|
||||
* 新增或更新品牌,判断品牌名一样后,不一样新增,再判断关键字段是否一样,不一样更改。
|
||||
* @param shopBaseProductBrand
|
||||
* @return
|
||||
*/
|
||||
int saveOrUpdateBrand2(ShopBaseProductBrand shopBaseProductBrand);
|
||||
|
||||
Map brand();
|
||||
|
||||
}
|
||||
|
||||
@ -110,6 +110,13 @@ public interface ShopBaseProductCategoryService extends IBaseService<ShopBasePro
|
||||
*/
|
||||
ProductCategoryFilterRes getCategoryFilter(Integer categoryId);
|
||||
|
||||
/**
|
||||
* 根据分类名称获取一条记录
|
||||
* @param categoryName
|
||||
* @return
|
||||
*/
|
||||
ShopBaseProductCategory getCategoryByName(String categoryName);
|
||||
|
||||
/**
|
||||
* 把思迅的商品分类转出澜弛的商品分类
|
||||
* @param sxSyncCategory
|
||||
@ -125,4 +132,6 @@ public interface ShopBaseProductCategoryService extends IBaseService<ShopBasePro
|
||||
* @return
|
||||
*/
|
||||
Boolean syncSxCategoryToShopBaseProductCategory(String storeId, Integer pageNum, Integer pageSize);
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -8,6 +8,7 @@ import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.extra.pinyin.PinyinUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.suisung.mall.common.domain.UserDto;
|
||||
import com.suisung.mall.common.exception.ApiException;
|
||||
import com.suisung.mall.common.modules.base.ShopBaseProductBrand;
|
||||
import com.suisung.mall.common.modules.base.ShopBaseProductCategory;
|
||||
@ -121,13 +122,18 @@ public class ShopBaseProductBrandServiceImpl extends BaseServiceImpl<ShopBasePro
|
||||
|
||||
shopBaseProductBrand.setBrand_name_pinyin(PinyinUtil.getPinyin(shopBaseProductBrand.getBrand_name()));
|
||||
shopBaseProductBrand.setBrand_initial(Convert.toStr(shopBaseProductBrand.getBrand_name_pinyin().charAt(0)));
|
||||
Integer store_id = Convert.toInt(getCurrentUser().getStore_id());
|
||||
|
||||
Integer store_id = shopBaseProductBrand.getStore_id();
|
||||
boolean isPlatform = true;
|
||||
UserDto user = getCurrentUser();
|
||||
if(user != null) {
|
||||
store_id = Convert.toInt(user.getStore_id());
|
||||
isPlatform = getCurrentUser().isPlatform();
|
||||
}
|
||||
|
||||
if (ObjectUtil.isEmpty(shopBaseProductBrand.getBrand_id())) {
|
||||
if (!getCurrentUser().isPlatform()) {
|
||||
if (!isPlatform) {
|
||||
shopBaseProductBrand.setBrand_apply(0);
|
||||
}
|
||||
if (getCurrentUser().isPlatform()) {
|
||||
} else {
|
||||
shopBaseProductBrand.setStore_id(store_id);
|
||||
}
|
||||
}
|
||||
@ -157,6 +163,69 @@ public class ShopBaseProductBrandServiceImpl extends BaseServiceImpl<ShopBasePro
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据品牌名称判断记录是否存在
|
||||
*
|
||||
* @param brand_name
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public boolean existsByBrandName(String brand_name) {
|
||||
QueryWrapper<ShopBaseProductBrand> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("brand_name", brand_name);
|
||||
return count(queryWrapper) > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据品牌名称查询记录列表
|
||||
*
|
||||
* @param brand_name
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public List<ShopBaseProductBrand> selectByBrandName(String brand_name) {
|
||||
QueryWrapper<ShopBaseProductBrand> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("brand_name", brand_name);
|
||||
return list(queryWrapper);
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增或更新品牌,判断品牌名一样后,不一样新增,再判断关键字段是否一样,不一样更改。
|
||||
*
|
||||
* @param shopBaseProductBrand
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public int saveOrUpdateBrand2(ShopBaseProductBrand shopBaseProductBrand) {
|
||||
|
||||
List<ShopBaseProductBrand> list = selectByBrandName(shopBaseProductBrand.getBrand_name());
|
||||
if (ObjectUtil.isEmpty(list)) {
|
||||
// 新增记录
|
||||
if (saveOrUpdateBrand(shopBaseProductBrand)) {
|
||||
// 根据id判断新增或更新
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int cnt = 0;
|
||||
for (ShopBaseProductBrand spb : list) {
|
||||
if (!spb.getBrand_image().equals(shopBaseProductBrand.getBrand_image())
|
||||
|| !spb.getBrand_desc().equals(shopBaseProductBrand.getBrand_desc())
|
||||
|| !spb.getCategory_id().equals(shopBaseProductBrand.getCategory_id())) {
|
||||
|
||||
// TODO 外网图片需要本地上传
|
||||
|
||||
shopBaseProductBrand.setBrand_id(spb.getBrand_id());
|
||||
if (saveOrUpdateBrand(shopBaseProductBrand)) { // 根据id判断新增或更新
|
||||
cnt++;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
return cnt;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map brand() {
|
||||
|
||||
|
||||
@ -1115,6 +1115,25 @@ public class ShopBaseProductCategoryServiceImpl extends BaseServiceImpl<ShopBase
|
||||
return output;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据分类名称获取一条记录
|
||||
*
|
||||
* @param categoryName
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public ShopBaseProductCategory getCategoryByName(String categoryName) {
|
||||
QueryWrapper<ShopBaseProductCategory> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("category_name", categoryName);
|
||||
queryWrapper.orderByAsc("category_parent_id").orderByAsc("category_order");
|
||||
List<ShopBaseProductCategory> list = list(queryWrapper);
|
||||
if (CollUtil.isNotEmpty(list)) {
|
||||
return list.get(0);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 把思迅的商品分类转出澜弛的商品分类
|
||||
*
|
||||
|
||||
@ -8,7 +8,7 @@
|
||||
|
||||
package com.suisung.mall.shop.sfexpress.controller.api;
|
||||
|
||||
import com.suisung.mall.common.pojo.res.SFExpressApiRes;
|
||||
import com.suisung.mall.common.pojo.res.ThirdApiRes;
|
||||
import com.suisung.mall.shop.sfexpress.service.SFExpressApiService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
@ -29,19 +29,19 @@ public class SFExpressApiController {
|
||||
|
||||
@ApiOperation(value = "顺丰原因订单取消回调", notes = "顺丰原因订单取消回调")
|
||||
@RequestMapping(value = "/cancel-order/notify", method = RequestMethod.POST)
|
||||
public SFExpressApiRes cancelOrderNotify(@RequestBody String requestBody, @RequestParam(name = "sign") String sign) {
|
||||
public ThirdApiRes cancelOrderNotify(@RequestBody String requestBody, @RequestParam(name = "sign") String sign) {
|
||||
return sfExpressApiService.receiveCancelOrderNotify(requestBody, sign);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "接收顺丰配送状态更改回调", notes = "接收顺丰配送状态更改回调")
|
||||
@RequestMapping(value = "/rider-order-status/notify", method = RequestMethod.POST)
|
||||
public SFExpressApiRes receiveRiderOrderStatusNotify(@RequestBody String requestBody, @RequestParam(name = "sign") String sign) {
|
||||
public ThirdApiRes receiveRiderOrderStatusNotify(@RequestBody String requestBody, @RequestParam(name = "sign") String sign) {
|
||||
return sfExpressApiService.receiveRiderOrderStatusNotify(requestBody, sign);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "接收顺丰订单完成回调", notes = "接收顺丰订单完成回调")
|
||||
@RequestMapping(value = "/order-complete/notify", method = RequestMethod.POST)
|
||||
public SFExpressApiRes receiveOrderCompleteNotify(@RequestBody String requestBody, @RequestParam(name = "sign") String sign) {
|
||||
public ThirdApiRes receiveOrderCompleteNotify(@RequestBody String requestBody, @RequestParam(name = "sign") String sign) {
|
||||
return sfExpressApiService.receiveOrderCompleteNotify(requestBody, sign);
|
||||
}
|
||||
}
|
||||
|
||||
@ -9,7 +9,7 @@
|
||||
package com.suisung.mall.shop.sfexpress.controller.mobile;
|
||||
|
||||
import com.suisung.mall.common.api.CommonResult;
|
||||
import com.suisung.mall.common.pojo.res.SFExpressApiRes;
|
||||
import com.suisung.mall.common.pojo.res.ThirdApiRes;
|
||||
import com.suisung.mall.common.utils.SseEmitterUtil;
|
||||
import com.suisung.mall.shop.sfexpress.service.SFExpressApiService;
|
||||
import com.suisung.mall.shop.store.service.ShopStoreSfOrderService;
|
||||
@ -38,13 +38,13 @@ public class SFExpressController {
|
||||
|
||||
@ApiOperation(value = "顺丰同城店铺发单", notes = "顺丰同城店铺发单")
|
||||
@RequestMapping(value = "/create-order", method = RequestMethod.POST)
|
||||
public SFExpressApiRes createOrder(@RequestParam(name = "shop_order_id", defaultValue = "") String shopOrderId) {
|
||||
public ThirdApiRes createOrder(@RequestParam(name = "shop_order_id", defaultValue = "") String shopOrderId) {
|
||||
return sfExpressApiService.createOrder(shopOrderId);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "用户或店铺取消顺丰同城订单", notes = "用户或店铺取消顺丰同城订单")
|
||||
@RequestMapping(value = "/cancel-order", method = RequestMethod.POST)
|
||||
public SFExpressApiRes cancelOrder(@RequestParam(name = "order_id", defaultValue = "") String orderId) {
|
||||
public ThirdApiRes cancelOrder(@RequestParam(name = "order_id", defaultValue = "") String orderId) {
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("order_id", shopStoreSfOrderService.getSfOrderIdByShopOrderId(orderId));
|
||||
return sfExpressApiService.cancelOrder(params);
|
||||
@ -52,8 +52,8 @@ public class SFExpressController {
|
||||
|
||||
@ApiOperation(value = "给顺丰同城配送员加小费", notes = "给顺丰同城配送员加小费")
|
||||
@RequestMapping(value = "/add-order-gratuity-fee", method = RequestMethod.POST)
|
||||
public SFExpressApiRes addOrderGratuityFee(@RequestParam(name = "order_id", defaultValue = "") String orderId,
|
||||
@RequestParam(name = "gratuity_fee", defaultValue = "DD-20241119-0001") Integer gratuityFee) {
|
||||
public ThirdApiRes addOrderGratuityFee(@RequestParam(name = "order_id", defaultValue = "") String orderId,
|
||||
@RequestParam(name = "gratuity_fee", defaultValue = "DD-20241119-0001") Integer gratuityFee) {
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("order_id", shopStoreSfOrderService.getSfOrderIdByShopOrderId(orderId));
|
||||
params.put("gratuity_fee", gratuityFee);
|
||||
@ -62,7 +62,7 @@ public class SFExpressController {
|
||||
|
||||
@ApiOperation(value = "向配送员或顺丰同城平台催单", notes = "向配送员或顺丰同城平台催单")
|
||||
@RequestMapping(value = "/reminder-order", method = RequestMethod.POST)
|
||||
public SFExpressApiRes reminderOrder(@RequestParam(name = "order_id", defaultValue = "") String orderId) {
|
||||
public ThirdApiRes reminderOrder(@RequestParam(name = "order_id", defaultValue = "") String orderId) {
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("order_id", shopStoreSfOrderService.getSfOrderIdByShopOrderId(orderId));
|
||||
return sfExpressApiService.reminderOrder(params);
|
||||
@ -70,7 +70,7 @@ public class SFExpressController {
|
||||
|
||||
@ApiOperation(value = "查询顺丰同城订单状态流", notes = "查询顺丰同城订单状态流")
|
||||
@RequestMapping(value = "/list-order-feed", method = RequestMethod.POST)
|
||||
public SFExpressApiRes listOrderFeed(@RequestParam(name = "order_id", defaultValue = "") String orderId) {
|
||||
public ThirdApiRes listOrderFeed(@RequestParam(name = "order_id", defaultValue = "") String orderId) {
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("order_id", shopStoreSfOrderService.getSfOrderIdByShopOrderId(orderId));
|
||||
return sfExpressApiService.listOrderFeed(params);
|
||||
@ -78,7 +78,7 @@ public class SFExpressController {
|
||||
|
||||
@ApiOperation(value = "获取配送员实时坐标接口", notes = "获取配送员实时坐标接口")
|
||||
@RequestMapping(value = "/rider-latest-position", method = RequestMethod.POST)
|
||||
public SFExpressApiRes riderLatestPosition(@RequestParam(name = "order_id", defaultValue = "") String orderId) {
|
||||
public ThirdApiRes riderLatestPosition(@RequestParam(name = "order_id", defaultValue = "") String orderId) {
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("order_id", shopStoreSfOrderService.getSfOrderIdByShopOrderId(orderId));
|
||||
return sfExpressApiService.riderLatestPosition(params);
|
||||
@ -86,7 +86,7 @@ public class SFExpressController {
|
||||
|
||||
@ApiOperation(value = "获取配送员轨迹H5", notes = "获取配送员轨迹H5")
|
||||
@RequestMapping(value = "/rider-view/v2", method = RequestMethod.POST)
|
||||
public SFExpressApiRes riderViewV2(@RequestParam(name = "order_id", defaultValue = "") String orderId) {
|
||||
public ThirdApiRes riderViewV2(@RequestParam(name = "order_id", defaultValue = "") String orderId) {
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("order_id", shopStoreSfOrderService.getSfOrderIdByShopOrderId(orderId));
|
||||
return sfExpressApiService.riderViewV2(params);
|
||||
|
||||
@ -8,7 +8,7 @@
|
||||
|
||||
package com.suisung.mall.shop.sfexpress.service;
|
||||
|
||||
import com.suisung.mall.common.pojo.res.SFExpressApiRes;
|
||||
import com.suisung.mall.common.pojo.res.ThirdApiRes;
|
||||
import org.springframework.data.util.Pair;
|
||||
|
||||
import java.util.Map;
|
||||
@ -21,7 +21,7 @@ public interface SFExpressApiService {
|
||||
* @param shopOrderId 商家订单号
|
||||
* @return
|
||||
*/
|
||||
SFExpressApiRes createOrder(String shopOrderId);
|
||||
ThirdApiRes createOrder(String shopOrderId);
|
||||
|
||||
|
||||
/**
|
||||
@ -42,7 +42,7 @@ public interface SFExpressApiService {
|
||||
* @param cancelReason 取消原因
|
||||
* @return
|
||||
*/
|
||||
SFExpressApiRes cancelOrder(String sfOrderId, Integer cancelCode, String cancelReason);
|
||||
ThirdApiRes cancelOrder(String sfOrderId, Integer cancelCode, String cancelReason);
|
||||
|
||||
|
||||
/**
|
||||
@ -51,7 +51,7 @@ public interface SFExpressApiService {
|
||||
* @param params 综合参数,顺丰订单号必填项,请参考:https://openic.sf-express.com/open/api/docs/index/#/apidoc
|
||||
* @return
|
||||
*/
|
||||
SFExpressApiRes cancelOrder(Map<String, Object> params);
|
||||
ThirdApiRes cancelOrder(Map<String, Object> params);
|
||||
|
||||
/**
|
||||
* 订单加小费,订单创建后,骑士未接单的情况下通过该接口对订单进行加小费,促进订单接单,截止订单完成前,都可以对订单加小费
|
||||
@ -59,7 +59,7 @@ public interface SFExpressApiService {
|
||||
* @param params 综合参数,顺丰订单号order_id,订单小费 gratuity_fee,必填项,请参考:https://openic.sf-express.com/open/api/docs/index/#/apidoc
|
||||
* @return
|
||||
*/
|
||||
SFExpressApiRes addOrderGratuityFee(Map<String, Object> params);
|
||||
ThirdApiRes addOrderGratuityFee(Map<String, Object> params);
|
||||
|
||||
/**
|
||||
* 催单,当订单为配送状态中,可通过该接口发起催单
|
||||
@ -67,7 +67,7 @@ public interface SFExpressApiService {
|
||||
* @param params 综合参数,顺丰订单号order_id必填项,请参考:https://openic.sf-express.com/open/api/docs/index/#/apidoc
|
||||
* @return
|
||||
*/
|
||||
SFExpressApiRes reminderOrder(Map<String, Object> params);
|
||||
ThirdApiRes reminderOrder(Map<String, Object> params);
|
||||
|
||||
/**
|
||||
* 订单状态流查询,此接口可获取到指定订单操作记录;当接收顺丰状态回调失败时,可以主动查询此接口补齐订单操作与状态。
|
||||
@ -76,7 +76,7 @@ public interface SFExpressApiService {
|
||||
* @param params
|
||||
* @return
|
||||
*/
|
||||
SFExpressApiRes listOrderFeed(Map<String, Object> params);
|
||||
ThirdApiRes listOrderFeed(Map<String, Object> params);
|
||||
|
||||
/**
|
||||
* 获取配送员实时坐标接口,此接口用于获取订单配送员的实时经纬度坐标,一般情况下骑士经纬度30s更新一次。
|
||||
@ -84,7 +84,7 @@ public interface SFExpressApiService {
|
||||
* @param params 综合参数,顺丰订单号order_id必填项,请参考:https://openic.sf-express.com/open/api/docs/index/#/apidoc
|
||||
* @return
|
||||
*/
|
||||
SFExpressApiRes riderLatestPosition(Map<String, Object> params);
|
||||
ThirdApiRes riderLatestPosition(Map<String, Object> params);
|
||||
|
||||
/**
|
||||
* 获取配送员轨迹H5,此接口可获取一个订单的骑士位置H5链接,可进行内嵌或发送给用户(内嵌时无法保证界面的兼容性,如发现兼容性问题可使用获取配送员坐标接口自行开发轨迹H5)。
|
||||
@ -92,7 +92,7 @@ public interface SFExpressApiService {
|
||||
* @param params 综合参数,顺丰订单号order_id必填项,请参考:https://openic.sf-express.com/open/api/docs/index/#/apidoc
|
||||
* @return
|
||||
*/
|
||||
SFExpressApiRes riderViewV2(Map<String, Object> params);
|
||||
ThirdApiRes riderViewV2(Map<String, Object> params);
|
||||
|
||||
/**
|
||||
* 改单,支持店铺和企业客户改单,当订单生成后,可通过该接口修改收件人信息,可修改字段:收件地址、物品重量等,详情可参考请求参数列表
|
||||
@ -100,7 +100,7 @@ public interface SFExpressApiService {
|
||||
* @param params 综合参数,请参考:https://openic.sf-express.com/open/api/docs/index/#/apidoc
|
||||
* @return
|
||||
*/
|
||||
SFExpressApiRes changeOrder(Map<String, Object> params);
|
||||
ThirdApiRes changeOrder(Map<String, Object> params);
|
||||
|
||||
|
||||
// *********** 顺丰同城回调相关业务 ****************
|
||||
@ -112,7 +112,7 @@ public interface SFExpressApiService {
|
||||
* @param sign
|
||||
* @return
|
||||
*/
|
||||
SFExpressApiRes receiveCancelOrderNotify(String jsonData, String sign);
|
||||
ThirdApiRes receiveCancelOrderNotify(String jsonData, String sign);
|
||||
|
||||
/**
|
||||
* 接收顺丰配送状态更改回调
|
||||
@ -121,7 +121,7 @@ public interface SFExpressApiService {
|
||||
* @param sign
|
||||
* @return
|
||||
*/
|
||||
SFExpressApiRes receiveRiderOrderStatusNotify(String jsonData, String sign);
|
||||
ThirdApiRes receiveRiderOrderStatusNotify(String jsonData, String sign);
|
||||
|
||||
/**
|
||||
* 接收顺丰订单完成回调
|
||||
@ -130,5 +130,5 @@ public interface SFExpressApiService {
|
||||
* @param sign
|
||||
* @return
|
||||
*/
|
||||
SFExpressApiRes receiveOrderCompleteNotify(String jsonData, String sign);
|
||||
ThirdApiRes receiveOrderCompleteNotify(String jsonData, String sign);
|
||||
}
|
||||
|
||||
@ -20,7 +20,7 @@ import com.suisung.mall.common.constant.SFExpressConstant;
|
||||
import com.suisung.mall.common.exception.ApiException;
|
||||
import com.suisung.mall.common.modules.store.ShopStoreSfOrder;
|
||||
import com.suisung.mall.common.pojo.req.*;
|
||||
import com.suisung.mall.common.pojo.res.SFExpressApiRes;
|
||||
import com.suisung.mall.common.pojo.res.ThirdApiRes;
|
||||
import com.suisung.mall.common.utils.CommonUtil;
|
||||
import com.suisung.mall.common.utils.I18nUtil;
|
||||
import com.suisung.mall.common.utils.JsonUtil;
|
||||
@ -29,7 +29,6 @@ import com.suisung.mall.shop.order.service.ShopOrderBaseService;
|
||||
import com.suisung.mall.shop.order.service.ShopOrderInfoService;
|
||||
import com.suisung.mall.shop.sfexpress.service.SFExpressApiService;
|
||||
import com.suisung.mall.shop.store.service.ShopStoreSfOrderService;
|
||||
import org.apache.commons.codec.binary.Base64;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
@ -38,8 +37,6 @@ import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.security.MessageDigest;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
@ -67,7 +64,7 @@ public class SFExpressApiServiceImpl implements SFExpressApiService {
|
||||
private ShopOrderInfoService shopOrderInfoService;
|
||||
|
||||
@Override
|
||||
public SFExpressApiRes createOrder(String shopOrderId) {
|
||||
public ThirdApiRes createOrder(String shopOrderId) {
|
||||
// 组织请求参数
|
||||
// Map<String, Object> params = buildCommonParams();
|
||||
// params.put("app_id", appId);
|
||||
@ -137,7 +134,7 @@ public class SFExpressApiServiceImpl implements SFExpressApiService {
|
||||
return null;
|
||||
}
|
||||
|
||||
return JsonUtil.json2object(retRespStr, SFExpressApiRes.class);
|
||||
return JsonUtil.json2object(retRespStr, ThirdApiRes.class);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -217,7 +214,7 @@ public class SFExpressApiServiceImpl implements SFExpressApiService {
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public SFExpressApiRes cancelOrder(String orderId, Integer cancelCode, String cancelReason) {
|
||||
public ThirdApiRes cancelOrder(String orderId, Integer cancelCode, String cancelReason) {
|
||||
Map<String, Object> params = buildCommonParams();
|
||||
params.put("order_id", orderId);
|
||||
if (StrUtil.isNotBlank(cancelReason) && cancelCode != null) {
|
||||
@ -235,11 +232,11 @@ public class SFExpressApiServiceImpl implements SFExpressApiService {
|
||||
*/
|
||||
@Override
|
||||
@Transactional
|
||||
public SFExpressApiRes cancelOrder(Map<String, Object> params) {
|
||||
public ThirdApiRes cancelOrder(Map<String, Object> params) {
|
||||
// TODO 检验用户权限
|
||||
|
||||
if (params == null || ObjectUtil.isEmpty(params.get("order_id"))) {
|
||||
return new SFExpressApiRes().fail(1003, "请求参数有误!");
|
||||
return new ThirdApiRes().fail(1003, "请求参数有误!");
|
||||
}
|
||||
|
||||
// 转换 json 字符串参数
|
||||
@ -253,30 +250,30 @@ public class SFExpressApiServiceImpl implements SFExpressApiService {
|
||||
String retRespStr = HttpUtil.post(send_url, paramJSON);
|
||||
if (StrUtil.isBlank(retRespStr)) {
|
||||
logger.error("顺丰同城:取消订单异常,无返回值!");
|
||||
return new SFExpressApiRes().fail(2, "顺丰同城:无返回值!");
|
||||
return new ThirdApiRes().fail(2, "顺丰同城:无返回值!");
|
||||
}
|
||||
|
||||
SFExpressApiRes sfExpressApiRes = JsonUtil.json2object(retRespStr, SFExpressApiRes.class);
|
||||
ThirdApiRes sfExpressApiRes = JsonUtil.json2object(retRespStr, ThirdApiRes.class);
|
||||
if (sfExpressApiRes == null) {
|
||||
logger.error("顺丰同城:取消订单,返回值异常!{}", retRespStr);
|
||||
return new SFExpressApiRes().fail(2, "顺丰同城:无返回值!");
|
||||
return new ThirdApiRes().fail(2, "顺丰同城:无返回值!");
|
||||
}
|
||||
|
||||
if (!sfExpressApiRes.getError_code().equals(0)) {
|
||||
logger.error("顺丰同城:取消订单失败!{}", retRespStr);
|
||||
return new SFExpressApiRes().fail(2, sfExpressApiRes.getError_msg());
|
||||
return new ThirdApiRes().fail(2, sfExpressApiRes.getError_msg());
|
||||
}
|
||||
|
||||
// 判断订单的状态,是否已经取消了?已取消,不再执行
|
||||
ShopStoreSfOrder shopStoreSfOrderExist = shopStoreSfOrderService.getBySfOrderId(orderId);
|
||||
if (shopStoreSfOrderExist == null) {
|
||||
return new SFExpressApiRes().fail(2, "订单有误!");
|
||||
return new ThirdApiRes().fail(2, "订单有误!");
|
||||
}
|
||||
|
||||
if (shopStoreSfOrderExist.getOrder_status() != null
|
||||
&& (shopStoreSfOrderExist.getOrder_status().equals(StateCode.SF_ORDER_STATUS_CANCELED) ||
|
||||
(shopStoreSfOrderExist.getOrder_status().equals(StateCode.SF_ORDER_STATUS_CANCELING)))) {
|
||||
return new SFExpressApiRes().success("订单已取消过!");
|
||||
return new ThirdApiRes().success("订单已取消过!");
|
||||
}
|
||||
|
||||
// 更改商城订单状态为:已取消,注意事务问题
|
||||
@ -308,9 +305,9 @@ public class SFExpressApiServiceImpl implements SFExpressApiService {
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public SFExpressApiRes addOrderGratuityFee(Map<String, Object> params) {
|
||||
public ThirdApiRes addOrderGratuityFee(Map<String, Object> params) {
|
||||
if (params == null || ObjectUtil.isEmpty(params.get("order_id")) || params.get("gratuity_fee") == null) {
|
||||
return new SFExpressApiRes().fail(1003, "请求参数有误!");
|
||||
return new ThirdApiRes().fail(1003, "请求参数有误!");
|
||||
}
|
||||
|
||||
params.putAll(buildCommonParams());
|
||||
@ -323,10 +320,10 @@ public class SFExpressApiServiceImpl implements SFExpressApiService {
|
||||
String retRespStr = HttpUtil.post(send_url, paramJSON);
|
||||
if (StrUtil.isBlank(retRespStr)) {
|
||||
logger.error("顺丰同城:订单加小费,无返回值!{}", retRespStr);
|
||||
return new SFExpressApiRes().fail(-1, "顺丰同城:无返回值!");
|
||||
return new ThirdApiRes().fail(-1, "顺丰同城:无返回值!");
|
||||
}
|
||||
|
||||
return JsonUtil.json2object(retRespStr, SFExpressApiRes.class);
|
||||
return JsonUtil.json2object(retRespStr, ThirdApiRes.class);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -336,9 +333,9 @@ public class SFExpressApiServiceImpl implements SFExpressApiService {
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public SFExpressApiRes reminderOrder(Map<String, Object> params) {
|
||||
public ThirdApiRes reminderOrder(Map<String, Object> params) {
|
||||
if (params == null || ObjectUtil.isEmpty(params.get("order_id"))) {
|
||||
return new SFExpressApiRes().fail(1003, "请求参数有误!");
|
||||
return new ThirdApiRes().fail(1003, "请求参数有误!");
|
||||
}
|
||||
|
||||
params.putAll(buildCommonParams());
|
||||
@ -351,10 +348,10 @@ public class SFExpressApiServiceImpl implements SFExpressApiService {
|
||||
String retRespStr = HttpUtil.post(send_url, paramJSON);
|
||||
if (StrUtil.isBlank(retRespStr)) {
|
||||
logger.error("顺丰同城:催单异常,无返回值!");
|
||||
return new SFExpressApiRes().fail(-1, "顺丰同城:无返回值!");
|
||||
return new ThirdApiRes().fail(-1, "顺丰同城:无返回值!");
|
||||
}
|
||||
|
||||
return JsonUtil.json2object(retRespStr, SFExpressApiRes.class);
|
||||
return JsonUtil.json2object(retRespStr, ThirdApiRes.class);
|
||||
}
|
||||
|
||||
|
||||
@ -366,9 +363,9 @@ public class SFExpressApiServiceImpl implements SFExpressApiService {
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public SFExpressApiRes listOrderFeed(Map<String, Object> params) {
|
||||
public ThirdApiRes listOrderFeed(Map<String, Object> params) {
|
||||
if (params == null || ObjectUtil.isEmpty(params.get("order_id"))) {
|
||||
return new SFExpressApiRes().fail(1003, "请求参数有误!");
|
||||
return new ThirdApiRes().fail(1003, "请求参数有误!");
|
||||
}
|
||||
|
||||
params.putAll(buildCommonParams());
|
||||
@ -381,10 +378,10 @@ public class SFExpressApiServiceImpl implements SFExpressApiService {
|
||||
String retRespStr = HttpUtil.post(send_url, paramJSON);
|
||||
if (StrUtil.isBlank(retRespStr)) {
|
||||
logger.error("顺丰同城:订单状态流查询异常,无返回值!");
|
||||
return new SFExpressApiRes().fail(-1, "顺丰同城:无返回值!");
|
||||
return new ThirdApiRes().fail(-1, "顺丰同城:无返回值!");
|
||||
}
|
||||
|
||||
return JsonUtil.json2object(retRespStr, SFExpressApiRes.class);
|
||||
return JsonUtil.json2object(retRespStr, ThirdApiRes.class);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -394,9 +391,9 @@ public class SFExpressApiServiceImpl implements SFExpressApiService {
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public SFExpressApiRes riderLatestPosition(Map<String, Object> params) {
|
||||
public ThirdApiRes riderLatestPosition(Map<String, Object> params) {
|
||||
if (params == null || ObjectUtil.isEmpty(params.get("order_id"))) {
|
||||
return new SFExpressApiRes().fail(1003, "请求参数有误!");
|
||||
return new ThirdApiRes().fail(1003, "请求参数有误!");
|
||||
}
|
||||
|
||||
params.putAll(buildCommonParams());
|
||||
@ -409,10 +406,10 @@ public class SFExpressApiServiceImpl implements SFExpressApiService {
|
||||
String retRespStr = HttpUtil.post(send_url, paramJSON);
|
||||
if (StrUtil.isBlank(retRespStr)) {
|
||||
logger.error("顺丰同城:获取配送员实时坐标异常,无返回值!");
|
||||
return new SFExpressApiRes().fail(-1, "顺丰同城:无返回值!");
|
||||
return new ThirdApiRes().fail(-1, "顺丰同城:无返回值!");
|
||||
}
|
||||
|
||||
return JsonUtil.json2object(retRespStr, SFExpressApiRes.class);
|
||||
return JsonUtil.json2object(retRespStr, ThirdApiRes.class);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -422,9 +419,9 @@ public class SFExpressApiServiceImpl implements SFExpressApiService {
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public SFExpressApiRes riderViewV2(Map<String, Object> params) {
|
||||
public ThirdApiRes riderViewV2(Map<String, Object> params) {
|
||||
if (params == null || ObjectUtil.isEmpty(params.get("order_id"))) {
|
||||
return new SFExpressApiRes().fail(1003, "请求参数有误!");
|
||||
return new ThirdApiRes().fail(1003, "请求参数有误!");
|
||||
}
|
||||
|
||||
params.putAll(buildCommonParams());
|
||||
@ -437,10 +434,10 @@ public class SFExpressApiServiceImpl implements SFExpressApiService {
|
||||
String retRespStr = HttpUtil.post(send_url, paramJSON);
|
||||
if (StrUtil.isBlank(retRespStr)) {
|
||||
logger.error("顺丰同城:获取配送员轨迹H5异常,无返回值!");
|
||||
return new SFExpressApiRes().fail(-1, "顺丰同城:无返回值!");
|
||||
return new ThirdApiRes().fail(-1, "顺丰同城:无返回值!");
|
||||
}
|
||||
|
||||
return JsonUtil.json2object(retRespStr, SFExpressApiRes.class);
|
||||
return JsonUtil.json2object(retRespStr, ThirdApiRes.class);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -450,7 +447,7 @@ public class SFExpressApiServiceImpl implements SFExpressApiService {
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public SFExpressApiRes changeOrder(Map<String, Object> params) {
|
||||
public ThirdApiRes changeOrder(Map<String, Object> params) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ -463,13 +460,13 @@ public class SFExpressApiServiceImpl implements SFExpressApiService {
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public SFExpressApiRes receiveCancelOrderNotify(String jsonData, String sign) {
|
||||
public ThirdApiRes receiveCancelOrderNotify(String jsonData, String sign) {
|
||||
if (StrUtil.isBlank(jsonData) || StrUtil.isBlank(sign)) {
|
||||
return new SFExpressApiRes().fail(1003, "缺少必要参数!");
|
||||
return new ThirdApiRes().fail(1003, "缺少必要参数!");
|
||||
}
|
||||
|
||||
if (!checkOpenSign(sign, jsonData)) {
|
||||
return new SFExpressApiRes().fail(2002, "请求签名sign校验失败!");
|
||||
return new ThirdApiRes().fail(2002, "请求签名sign校验失败!");
|
||||
}
|
||||
|
||||
logger.info("接收顺丰原因订单取消回调返回的 JSON 数据:{}", jsonData);
|
||||
@ -482,12 +479,12 @@ public class SFExpressApiServiceImpl implements SFExpressApiService {
|
||||
if (shopStoreSfOrderExist != null && shopStoreSfOrderExist.getOrder_status() != null
|
||||
&& (shopStoreSfOrderExist.getOrder_status().equals(StateCode.SF_ORDER_STATUS_CANCELED) ||
|
||||
(shopStoreSfOrderExist.getOrder_status().equals(StateCode.SF_ORDER_STATUS_CANCELING)))) {
|
||||
return new SFExpressApiRes().success("success");
|
||||
return new ThirdApiRes().success("success");
|
||||
}
|
||||
|
||||
Boolean success = shopStoreSfOrderService.updateShopStoreSfOrderStatus(shopStoreSfOrder);
|
||||
if (!success) {
|
||||
return new SFExpressApiRes().fail(-1, "状态处理失败!");
|
||||
return new ThirdApiRes().fail(-1, "状态处理失败!");
|
||||
}
|
||||
|
||||
// 更改商城订单状态为:已取消,注意事务问题
|
||||
@ -495,10 +492,10 @@ public class SFExpressApiServiceImpl implements SFExpressApiService {
|
||||
orderList.add(shopStoreSfOrder.getShop_order_id());
|
||||
success = shopOrderBaseService.cancel(orderList, null, false);
|
||||
if (!success) {
|
||||
return new SFExpressApiRes().fail(-1, "取消订单业务处理失败!");
|
||||
return new ThirdApiRes().fail(-1, "取消订单业务处理失败!");
|
||||
}
|
||||
|
||||
return new SFExpressApiRes().success("success");
|
||||
return new ThirdApiRes().success("success");
|
||||
}
|
||||
|
||||
/**
|
||||
@ -511,13 +508,13 @@ public class SFExpressApiServiceImpl implements SFExpressApiService {
|
||||
*/
|
||||
@Transactional
|
||||
@Override
|
||||
public SFExpressApiRes receiveRiderOrderStatusNotify(String jsonData, String sign) {
|
||||
public ThirdApiRes receiveRiderOrderStatusNotify(String jsonData, String sign) {
|
||||
if (StrUtil.isBlank(jsonData) || StrUtil.isBlank(sign)) {
|
||||
return new SFExpressApiRes().fail(1003, "缺少必要参数!");
|
||||
return new ThirdApiRes().fail(1003, "缺少必要参数!");
|
||||
}
|
||||
|
||||
if (!checkOpenSign(sign, jsonData)) {
|
||||
return new SFExpressApiRes().fail(2002, "请求签名sign校验失败!");
|
||||
return new ThirdApiRes().fail(2002, "请求签名sign校验失败!");
|
||||
}
|
||||
|
||||
logger.info("接收顺丰配送状态更改回调返回的 JSON 数据:{}", jsonData);
|
||||
@ -528,7 +525,7 @@ public class SFExpressApiServiceImpl implements SFExpressApiService {
|
||||
// 获取顺丰同城的物流轨迹
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("order_id", shopStoreSfOrder.getSf_order_id());
|
||||
SFExpressApiRes feedRes = listOrderFeed(params);
|
||||
ThirdApiRes feedRes = listOrderFeed(params);
|
||||
logger.info("获取配送员物流轨迹:{}", feedRes);
|
||||
if (feedRes != null && feedRes.getError_code().equals(0)) {
|
||||
JSONObject result = JSONUtil.parseObj(feedRes.getResult());
|
||||
@ -576,7 +573,7 @@ public class SFExpressApiServiceImpl implements SFExpressApiService {
|
||||
SseEmitterUtil.sendMessage(shopStoreSfOrder.getSf_order_id(), jsonData);
|
||||
// logger.debug("向 SSE 通道 {} 发送了:{}", shopStoreSfOrder.getSf_order_id(), jsonData);
|
||||
|
||||
return new SFExpressApiRes().success("success");
|
||||
return new ThirdApiRes().success("success");
|
||||
}
|
||||
|
||||
/**
|
||||
@ -588,13 +585,13 @@ public class SFExpressApiServiceImpl implements SFExpressApiService {
|
||||
*/
|
||||
@Transactional
|
||||
@Override
|
||||
public SFExpressApiRes receiveOrderCompleteNotify(String jsonData, String sign) {
|
||||
public ThirdApiRes receiveOrderCompleteNotify(String jsonData, String sign) {
|
||||
if (StrUtil.isBlank(jsonData) || StrUtil.isBlank(sign)) {
|
||||
return new SFExpressApiRes().fail(1003, "缺少必要参数!");
|
||||
return new ThirdApiRes().fail(1003, "缺少必要参数!");
|
||||
}
|
||||
|
||||
if (!checkOpenSign(sign, jsonData)) {
|
||||
return new SFExpressApiRes().fail(2002, "请求签名sign校验失败!");
|
||||
return new ThirdApiRes().fail(2002, "请求签名sign校验失败!");
|
||||
}
|
||||
|
||||
logger.info("接收顺丰订单完成回调返回的 JSON 数据:{}", jsonData);
|
||||
@ -603,23 +600,23 @@ public class SFExpressApiServiceImpl implements SFExpressApiService {
|
||||
// 更改顺丰同城订单状态
|
||||
ShopStoreSfOrder shopStoreSfOrder = toShopStoreSfOrder(jsonData);
|
||||
if (shopStoreSfOrder == null) {
|
||||
return new SFExpressApiRes().fail(-1, "返回数据转换失败!");
|
||||
return new ThirdApiRes().fail(-1, "返回数据转换失败!");
|
||||
}
|
||||
|
||||
ShopStoreSfOrder order = shopStoreSfOrderService.getBySfOrderId(shopStoreSfOrder.getSf_order_id());
|
||||
if (order == null) {
|
||||
return new SFExpressApiRes().fail(-1, "订单不存在!");
|
||||
return new ThirdApiRes().fail(-1, "订单不存在!");
|
||||
}
|
||||
|
||||
// 订单状态已经更改过,无需更改
|
||||
if (order.getOrder_status().equals(StateCode.SF_ORDER_STATUS_FINISH)) {
|
||||
return new SFExpressApiRes().success("success");
|
||||
return new ThirdApiRes().success("success");
|
||||
}
|
||||
|
||||
// 获取顺丰同城的物流轨迹
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("order_id", shopStoreSfOrder.getSf_order_id());
|
||||
SFExpressApiRes feedRes = listOrderFeed(params);
|
||||
ThirdApiRes feedRes = listOrderFeed(params);
|
||||
logger.info("获取配送员物流轨迹:{}", feedRes);
|
||||
if (feedRes != null && feedRes.getError_code().equals(0)) {
|
||||
JSONObject result = JSONUtil.parseObj(feedRes.getResult());
|
||||
@ -645,7 +642,7 @@ public class SFExpressApiServiceImpl implements SFExpressApiService {
|
||||
// logger.debug("准备发送SSE消息...");
|
||||
SseEmitterUtil.sendMessage(shopStoreSfOrder.getSf_order_id(), jsonData);
|
||||
|
||||
return new SFExpressApiRes().success("success");
|
||||
return new ThirdApiRes().success("success");
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -0,0 +1,60 @@
|
||||
/*
|
||||
* Copyright (c) 2025. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
||||
* Morbi non lorem porttitor neque feugiat blandit. Ut vitae ipsum eget quam lacinia accumsan.
|
||||
* Etiam sed turpis ac ipsum condimentum fringilla. Maecenas magna.
|
||||
* Proin dapibus sapien vel ante. Aliquam erat volutpat. Pellentesque sagittis ligula eget metus.
|
||||
* Vestibulum commodo. Ut rhoncus gravida arcu.
|
||||
*/
|
||||
|
||||
package com.suisung.mall.shop.sync.controller;
|
||||
|
||||
import com.suisung.mall.common.api.CommonResult;
|
||||
import com.suisung.mall.common.modules.base.ShopBaseProductBrand;
|
||||
import com.suisung.mall.common.pojo.res.ThirdApiRes;
|
||||
import com.suisung.mall.shop.sync.service.SyncThirdDataService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
|
||||
@Api(tags = "第三方数据同步")
|
||||
@RestController
|
||||
@RequestMapping("/shop/sync/third")
|
||||
public class SyncThirdDataController {
|
||||
@Resource
|
||||
private SyncThirdDataService syncThirdDataService;
|
||||
|
||||
@ApiOperation(value = "商品品牌数据同步", notes = "商品品牌数据同步")
|
||||
@RequestMapping(value = "/goods/brand", method = RequestMethod.POST)
|
||||
public ThirdApiRes syncGoodsBrand(@RequestBody String brandListJSON) {
|
||||
return syncThirdDataService.saveOrUpdateShopBaseProductBrandBatch(brandListJSON);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "商品辅助属性数据同步", notes = "商品辅助属性数据同步")
|
||||
@RequestMapping(value = "/goods/assist", method = RequestMethod.POST)
|
||||
public ThirdApiRes syncGoodsAssist(@RequestBody String reqBody) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ApiOperation(value = "商品分类数据同步", notes = "商品分类数据同步")
|
||||
@RequestMapping(value = "/goods/category", method = RequestMethod.POST)
|
||||
public ThirdApiRes syncGoodsCategory(@RequestBody String reqBody) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ApiOperation(value = "商品数据同步", notes = "商品数据同步")
|
||||
@RequestMapping(value = "/goods", method = RequestMethod.POST)
|
||||
public ThirdApiRes syncGoods(@RequestBody String reqBody) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ApiOperation(value = "会员数据同步", notes = "会员数据同步")
|
||||
@RequestMapping(value = "/member", method = RequestMethod.POST)
|
||||
public ThirdApiRes syncMember(@RequestBody String reqBody) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@ -0,0 +1,17 @@
|
||||
/*
|
||||
* Copyright (c) 2025. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
||||
* Morbi non lorem porttitor neque feugiat blandit. Ut vitae ipsum eget quam lacinia accumsan.
|
||||
* Etiam sed turpis ac ipsum condimentum fringilla. Maecenas magna.
|
||||
* Proin dapibus sapien vel ante. Aliquam erat volutpat. Pellentesque sagittis ligula eget metus.
|
||||
* Vestibulum commodo. Ut rhoncus gravida arcu.
|
||||
*/
|
||||
|
||||
package com.suisung.mall.shop.sync.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.suisung.mall.common.modules.sync.SyncApp;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
@Repository
|
||||
public interface SyncAppMapper extends BaseMapper<SyncApp> {
|
||||
}
|
||||
@ -0,0 +1,15 @@
|
||||
/*
|
||||
* Copyright (c) 2025. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
||||
* Morbi non lorem porttitor neque feugiat blandit. Ut vitae ipsum eget quam lacinia accumsan.
|
||||
* Etiam sed turpis ac ipsum condimentum fringilla. Maecenas magna.
|
||||
* Proin dapibus sapien vel ante. Aliquam erat volutpat. Pellentesque sagittis ligula eget metus.
|
||||
* Vestibulum commodo. Ut rhoncus gravida arcu.
|
||||
*/
|
||||
|
||||
package com.suisung.mall.shop.sync.mapper;
|
||||
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
@Repository
|
||||
public interface SyncThirdDataMapper {
|
||||
}
|
||||
@ -0,0 +1,69 @@
|
||||
/*
|
||||
* Copyright (c) 2025. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
||||
* Morbi non lorem porttitor neque feugiat blandit. Ut vitae ipsum eget quam lacinia accumsan.
|
||||
* Etiam sed turpis ac ipsum condimentum fringilla. Maecenas magna.
|
||||
* Proin dapibus sapien vel ante. Aliquam erat volutpat. Pellentesque sagittis ligula eget metus.
|
||||
* Vestibulum commodo. Ut rhoncus gravida arcu.
|
||||
*/
|
||||
|
||||
package com.suisung.mall.shop.sync.service;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.suisung.mall.common.modules.sync.SyncApp;
|
||||
|
||||
public interface SyncAppService {
|
||||
|
||||
/**
|
||||
* 根据 appId 获取一条记录
|
||||
* @param appId
|
||||
* @return
|
||||
*/
|
||||
SyncApp getSyncApp(String appId);
|
||||
|
||||
/**
|
||||
* 根据关键字搜索记录分页列表
|
||||
* @param keyword
|
||||
* @param status
|
||||
* @param pageNum
|
||||
* @param pageSize
|
||||
* @return
|
||||
*/
|
||||
IPage<SyncApp> pageSyncAppList(String keyword, Integer status, Integer pageNum, Integer pageSize);
|
||||
|
||||
/**
|
||||
* 新增一条记录
|
||||
* @param syncApp
|
||||
* @return
|
||||
*/
|
||||
Boolean addSyncApp(SyncApp syncApp);
|
||||
|
||||
/**
|
||||
* 修改一条记录
|
||||
* @param syncApp
|
||||
* @return
|
||||
*/
|
||||
Boolean updateSyncApp(SyncApp syncApp);
|
||||
|
||||
/**
|
||||
* 修改 app key 和 app 密钥
|
||||
* @param appId
|
||||
* @param appKey
|
||||
* @param appSecret
|
||||
* @return
|
||||
*/
|
||||
Boolean updateAppKey(String appId, String appKey, String appSecret);
|
||||
|
||||
/**
|
||||
* 删除一条记录
|
||||
* @param appId
|
||||
* @return
|
||||
*/
|
||||
Boolean deleteSyncApp(String appId);
|
||||
|
||||
/**
|
||||
* 删除一条记录
|
||||
* @param id
|
||||
* @return
|
||||
*/
|
||||
Boolean deleteSyncApp(Long id);
|
||||
}
|
||||
@ -0,0 +1,24 @@
|
||||
/*
|
||||
* Copyright (c) 2025. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
||||
* Morbi non lorem porttitor neque feugiat blandit. Ut vitae ipsum eget quam lacinia accumsan.
|
||||
* Etiam sed turpis ac ipsum condimentum fringilla. Maecenas magna.
|
||||
* Proin dapibus sapien vel ante. Aliquam erat volutpat. Pellentesque sagittis ligula eget metus.
|
||||
* Vestibulum commodo. Ut rhoncus gravida arcu.
|
||||
*/
|
||||
|
||||
package com.suisung.mall.shop.sync.service;
|
||||
|
||||
import com.suisung.mall.common.modules.base.ShopBaseProductBrand;
|
||||
import com.suisung.mall.common.pojo.res.ThirdApiRes;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface SyncThirdDataService {
|
||||
|
||||
/**
|
||||
* 批量保存商品品牌记录
|
||||
* @param brandListJSON
|
||||
* @return
|
||||
*/
|
||||
ThirdApiRes saveOrUpdateShopBaseProductBrandBatch(String brandListJSON);
|
||||
}
|
||||
@ -0,0 +1,159 @@
|
||||
/*
|
||||
* Copyright (c) 2025. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
||||
* Morbi non lorem porttitor neque feugiat blandit. Ut vitae ipsum eget quam lacinia accumsan.
|
||||
* Etiam sed turpis ac ipsum condimentum fringilla. Maecenas magna.
|
||||
* Proin dapibus sapien vel ante. Aliquam erat volutpat. Pellentesque sagittis ligula eget metus.
|
||||
* Vestibulum commodo. Ut rhoncus gravida arcu.
|
||||
*/
|
||||
|
||||
package com.suisung.mall.shop.sync.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.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.suisung.mall.common.modules.sixun.SxSyncGoods;
|
||||
import com.suisung.mall.common.modules.sync.SyncApp;
|
||||
import com.suisung.mall.core.web.service.impl.BaseServiceImpl;
|
||||
import com.suisung.mall.shop.sixun.mapper.SxSyncGoodsMapper;
|
||||
import com.suisung.mall.shop.sixun.service.SxSyncGoodsService;
|
||||
import com.suisung.mall.shop.sync.mapper.SyncAppMapper;
|
||||
import com.suisung.mall.shop.sync.service.SyncAppService;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
@Service
|
||||
public class SyncAppServiceImpl extends BaseServiceImpl<SyncAppMapper, SyncApp> implements SyncAppService {
|
||||
|
||||
@Resource
|
||||
private SyncAppMapper syncAppMapper;
|
||||
|
||||
/**
|
||||
* 根据 appId 获取一条记录
|
||||
*
|
||||
* @param appId
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public SyncApp getSyncApp(String appId) {
|
||||
if (StrUtil.isBlank(appId)) {
|
||||
return null;
|
||||
}
|
||||
QueryWrapper<SyncApp> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("app_id", appId);
|
||||
return getOne(queryWrapper);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据关键字搜索记录分页列表
|
||||
*
|
||||
* @param keyword
|
||||
* @param status
|
||||
* @param pageNum
|
||||
* @param pageSize
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public IPage<SyncApp> pageSyncAppList(String keyword, Integer status, Integer pageNum, Integer pageSize) {
|
||||
QueryWrapper<SyncApp> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.like("name", keyword);
|
||||
|
||||
QueryWrapper<SyncApp> queryWrapper2 = new QueryWrapper<>();
|
||||
queryWrapper2.like("intro", keyword).or((Consumer<QueryWrapper<SyncApp>>) queryWrapper);
|
||||
|
||||
if(status!=null && status>0){
|
||||
queryWrapper.eq("status",status);
|
||||
queryWrapper2.eq("status",status);
|
||||
}
|
||||
|
||||
return lists(queryWrapper2,pageNum,pageSize);
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增一条记录
|
||||
*
|
||||
* @param syncApp
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public Boolean addSyncApp(SyncApp syncApp) {
|
||||
if(syncApp==null){
|
||||
return false;
|
||||
}
|
||||
return add(syncApp);
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改一条记录
|
||||
*
|
||||
* @param syncApp
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public Boolean updateSyncApp(SyncApp syncApp) {
|
||||
if(syncApp==null){
|
||||
return false;
|
||||
}
|
||||
return updateById(syncApp);
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改 app key 和 app 密钥
|
||||
*
|
||||
* @param appId
|
||||
* @param appKey
|
||||
* @param appSecret
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public Boolean updateAppKey(String appId, String appKey, String appSecret) {
|
||||
if (appId == null || (appKey == null && appSecret == null)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
UpdateWrapper<SyncApp> updateWrapper = new UpdateWrapper<>();
|
||||
updateWrapper.eq("app_id", appId);
|
||||
if (StrUtil.isNotBlank(appKey)) {
|
||||
updateWrapper.eq("app_key", appKey);
|
||||
}
|
||||
|
||||
if (StrUtil.isNotBlank(appSecret)) {
|
||||
updateWrapper.eq("app_secret", appSecret);
|
||||
}
|
||||
|
||||
return update(updateWrapper);
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除一条记录
|
||||
*
|
||||
* @param appId
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public Boolean deleteSyncApp(String appId) {
|
||||
if (appId == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
QueryWrapper<SyncApp> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("app_id", appId);
|
||||
return remove(queryWrapper);
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除一条记录
|
||||
*
|
||||
* @param id
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public Boolean deleteSyncApp(Long id) {
|
||||
if (id == null) {
|
||||
return false;
|
||||
}
|
||||
return remove(id);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,78 @@
|
||||
/*
|
||||
* Copyright (c) 2025. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
||||
* Morbi non lorem porttitor neque feugiat blandit. Ut vitae ipsum eget quam lacinia accumsan.
|
||||
* Etiam sed turpis ac ipsum condimentum fringilla. Maecenas magna.
|
||||
* Proin dapibus sapien vel ante. Aliquam erat volutpat. Pellentesque sagittis ligula eget metus.
|
||||
* Vestibulum commodo. Ut rhoncus gravida arcu.
|
||||
*/
|
||||
|
||||
package com.suisung.mall.shop.sync.service.impl;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.json.JSONArray;
|
||||
import cn.hutool.json.JSONObject;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.suisung.mall.common.modules.base.ShopBaseProductBrand;
|
||||
import com.suisung.mall.common.modules.base.ShopBaseProductCategory;
|
||||
import com.suisung.mall.common.pojo.res.ThirdApiRes;
|
||||
import com.suisung.mall.common.utils.I18nUtil;
|
||||
import com.suisung.mall.shop.base.service.ShopBaseProductBrandService;
|
||||
import com.suisung.mall.shop.base.service.ShopBaseProductCategoryService;
|
||||
import com.suisung.mall.shop.sync.service.SyncThirdDataService;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
public class SyncThirdDataServiceImpl implements SyncThirdDataService {
|
||||
@Resource
|
||||
private ShopBaseProductBrandService productBrandService;
|
||||
|
||||
@Resource
|
||||
private ShopBaseProductCategoryService productCategoryService;
|
||||
|
||||
/**
|
||||
* 批量保存商品品牌记录
|
||||
*
|
||||
* @param brandListJSON
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public ThirdApiRes saveOrUpdateShopBaseProductBrandBatch(String brandListJSON) {
|
||||
// TODO 验签、appid,必要参数判断
|
||||
|
||||
if (StringUtils.isEmpty(brandListJSON)) {
|
||||
return new ThirdApiRes().fail(1003, I18nUtil._("缺少必要参数!"));
|
||||
}
|
||||
|
||||
List<ShopBaseProductBrand> goodBrandList = JSONUtil.toList(brandListJSON, ShopBaseProductBrand.class);
|
||||
if (goodBrandList == null) {
|
||||
return new ThirdApiRes().fail(1004, I18nUtil._("请求参数发生异常!"));
|
||||
}
|
||||
|
||||
if (goodBrandList != null && goodBrandList.size() > 500) {
|
||||
return new ThirdApiRes().fail(1004, I18nUtil._("单次同步记录最多500条!"));
|
||||
}
|
||||
|
||||
JSONArray brandListJSONObj = JSONUtil.parseArray(brandListJSON);
|
||||
|
||||
int count = 0;
|
||||
for (int i = 0; i < goodBrandList.size(); i++) {
|
||||
goodBrandList.get(i).setStore_id(3); // app 记录传进来
|
||||
// 处理大分类字段
|
||||
JSONObject o = (JSONObject) brandListJSONObj.get(i);
|
||||
if (o != null && StrUtil.isNotBlank(o.getStr("category"))) {
|
||||
ShopBaseProductCategory cate = productCategoryService.getCategoryByName(o.getStr("category"));
|
||||
if (cate != null) {
|
||||
goodBrandList.get(i).setCategory_id(cate.getCategory_id());
|
||||
}
|
||||
}
|
||||
|
||||
count += productBrandService.saveOrUpdateBrand2(goodBrandList.get(i));
|
||||
}
|
||||
|
||||
return new ThirdApiRes().success("成功同步" + count + "条记录!");
|
||||
}
|
||||
}
|
||||
12
pom.xml
12
pom.xml
@ -315,11 +315,11 @@
|
||||
<!-- sentinel配置 -->
|
||||
<sentinel.transport.dashboard>114.132.210.208:8718</sentinel.transport.dashboard>
|
||||
<!-- mysql配置 -->
|
||||
<mysql.host>127.0.0.1</mysql.host>
|
||||
<mysql.host>42.194.196.179</mysql.host>
|
||||
<mysql.port>3306</mysql.port>
|
||||
<mysql.db>mall_dev</mysql.db>
|
||||
<mysql.user>root</mysql.user>
|
||||
<mysql.pwd>123456</mysql.pwd>
|
||||
<mysql.pwd>B1x1GuKZr55PPmox</mysql.pwd>
|
||||
<mysql.driver>com.mysql.cj.jdbc.Driver</mysql.driver>
|
||||
<!-- redis配置 -->
|
||||
<redis.host>114.132.210.208</redis.host>
|
||||
@ -362,11 +362,11 @@
|
||||
<!-- sentinel配置 -->
|
||||
<sentinel.transport.dashboard>114.132.210.208:8718</sentinel.transport.dashboard>
|
||||
<!-- mysql配置 -->
|
||||
<mysql.host>114.132.210.208</mysql.host>
|
||||
<mysql.host>42.194.196.179</mysql.host>
|
||||
<mysql.port>3306</mysql.port>
|
||||
<mysql.db>fafamall</mysql.db>
|
||||
<mysql.user>web_dev</mysql.user>
|
||||
<mysql.pwd>Abc654321$^</mysql.pwd>
|
||||
<mysql.db>mall_dev</mysql.db>
|
||||
<mysql.user>fafamall</mysql.user>
|
||||
<mysql.pwd>brCnv0qLt8s0VqhI</mysql.pwd>
|
||||
<mysql.driver>com.mysql.cj.jdbc.Driver</mysql.driver>
|
||||
<!-- redis配置 -->
|
||||
<redis.host>114.132.210.208</redis.host>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user