思迅商品同步

This commit is contained in:
Jack 2025-01-12 18:18:54 +08:00
parent 0fe181fdae
commit b8bc6f658e
20 changed files with 708 additions and 99 deletions

View File

@ -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;
}

View File

@ -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);
}
}

View File

@ -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("验签时缺少必要参数!");

View File

@ -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/**"

View File

@ -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();
}

View File

@ -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);
}

View File

@ -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() {

View File

@ -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;
}
/**
* 把思迅的商品分类转出澜弛的商品分类
*

View File

@ -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);
}
}

View File

@ -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);

View File

@ -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);
}

View File

@ -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");
}

View File

@ -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;
}
}

View File

@ -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> {
}

View File

@ -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 {
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);
}
}

View File

@ -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
View File

@ -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>