diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/spu/HardSpuDto.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/spu/HardSpuDto.java index d5940b6d3..0e8fdfaa8 100644 --- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/spu/HardSpuDto.java +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/spu/HardSpuDto.java @@ -13,4 +13,9 @@ public class HardSpuDto extends HardSpuEntity { private LocalDateTime[] createTimeList; + /** + * 分类不能为空 + */ + private Boolean spuCategoryIdIsNotNull = false; + } diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/spu/HardSpuEntity.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/spu/HardSpuEntity.java index b13f3518d..a662ed16d 100644 --- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/spu/HardSpuEntity.java +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/spu/HardSpuEntity.java @@ -155,12 +155,20 @@ public class HardSpuEntity extends Model { /** * 旷世审核状态 + * 0:待审核 + * 1:审核中 + * 2:审核通过 + * 3:审核不通过 */ @Schema(description = "旷世审核状态") private String ksStatus; /** * 旷世审核状态标题 + * 0:待审核 + * 1:审核中 + * 2:审核通过 + * 3:审核不通过 */ @Schema(description = "旷世审核状态标题") private String ksStatusTitle; diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/feign/RemoteHardSpuController.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/feign/RemoteHardSpuController.java new file mode 100644 index 000000000..a72e31d37 --- /dev/null +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/feign/RemoteHardSpuController.java @@ -0,0 +1,19 @@ +package com.bsd.pjcloud.hard.api.feign; + + +import com.bsd.pjcloud.common.core.constant.ServiceNameConstants; +import com.bsd.pjcloud.common.core.util.R; +import com.bsd.pjcloud.common.feign.annotation.NoToken; +import com.bsd.pjcloud.thirdparty.dto.ks.KsSkuSubmitCallbackDto; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + +@FeignClient(contextId = "remoteHardSpuController", value = ServiceNameConstants.HARDWARE_SERVICE) +public interface RemoteHardSpuController { + + @NoToken + @PostMapping("/sku-check-callback") + R skuCheckCallback(@RequestBody KsSkuSubmitCallbackDto dto); + +} diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/resources/META-INF/spring/org.springframework.cloud.openfeign.FeignClient.imports b/pjcloud-hardware/pjcloud-hardware-api/src/main/resources/META-INF/spring/org.springframework.cloud.openfeign.FeignClient.imports index 910612a76..c5c83c74f 100644 --- a/pjcloud-hardware/pjcloud-hardware-api/src/main/resources/META-INF/spring/org.springframework.cloud.openfeign.FeignClient.imports +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/resources/META-INF/spring/org.springframework.cloud.openfeign.FeignClient.imports @@ -1,3 +1,4 @@ com.bsd.pjcloud.hard.api.feign.RemoteHardDoorService com.bsd.pjcloud.hard.api.feign.RemoteHardOrderService -com.bsd.pjcloud.hard.api.feign.RemoteHardThirdSelfZyService \ No newline at end of file +com.bsd.pjcloud.hard.api.feign.RemoteHardSpuController +com.bsd.pjcloud.hard.api.feign.RemoteHardThirdSelfZyService diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/spu/HardSpuController.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/spu/HardSpuController.java index 36fd5dda5..cb53ab33b 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/spu/HardSpuController.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/spu/HardSpuController.java @@ -9,11 +9,13 @@ import com.bsd.pjcloud.common.core.util.R; import com.bsd.pjcloud.common.data.datascope.DataScope; import com.bsd.pjcloud.common.idempotent.annotation.Idempotent; import com.bsd.pjcloud.common.log.annotation.SysLog; +import com.bsd.pjcloud.common.security.annotation.Inner; import com.bsd.pjcloud.hard.api.dto.spu.HardPutawayDto; import com.bsd.pjcloud.hard.api.dto.spu.HardSpuDto; import com.bsd.pjcloud.hard.api.entity.spu.HardSpuEntity; import com.bsd.pjcloud.hard.api.vo.spu.HardSpuJoinVo; import com.bsd.pjcloud.hard.service.HardSpuService; +import com.bsd.pjcloud.thirdparty.dto.ks.KsSkuSubmitCallbackDto; import jakarta.validation.Valid; import org.springframework.security.access.prepost.PreAuthorize; import com.bsd.pjcloud.common.excel.annotation.ResponseExcel; @@ -42,6 +44,18 @@ public class HardSpuController { private final HardSpuService hardSpuService; + /* ************************************* start callback start ************************************* */ + + @Inner + @Operation(summary = "商品审核回调", description = "商品审核回调") + @PostMapping("/sku-check-callback") + public R skuCheckCallback(@RequestBody KsSkuSubmitCallbackDto dto) { + hardSpuService.skuCheckCallback(dto); + return R.ok(); + } + + /* ************************************* end callback end ************************************* */ + /* ************************************* start APP start ************************************* */ @Operation(summary = "app上架", description = "上架") @@ -88,6 +102,13 @@ public class HardSpuController { return R.ok(); } + @Operation(summary = "更新旷世商品审核进度", description = "更新旷世商品审核进度") + @GetMapping("/progress") + public R progress(@RequestParam Long id) { + hardSpuService.progress(id); + return R.ok(); + } + @Operation(summary = "根据设备id智能柜编号查询商品", description = "根据设备id智能柜编号查询商品") @GetMapping("/get-by-cabinet-no") public R>>> getByCabinetNo(@RequestParam Long hardId, @RequestParam String cabinetNo) { @@ -108,7 +129,6 @@ public class HardSpuController { return R.ok(); } - @Operation(summary = "下拉查询", description = "下拉查询") @GetMapping("/select") public R select(@ParameterObject Page page, @ParameterObject HardSpuDto dto) { diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardSpuService.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardSpuService.java index e4d8cfc9c..6bf246745 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardSpuService.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardSpuService.java @@ -10,6 +10,7 @@ import com.bsd.pjcloud.hard.api.entity.HardDoorFlowEntity; import com.bsd.pjcloud.hard.api.entity.spu.HardSpuEntity; import com.bsd.pjcloud.hard.api.vo.spu.HardSpuJoinVo; import com.bsd.pjcloud.hard.api.vo.spu.HardSpuVo; +import com.bsd.pjcloud.thirdparty.dto.ks.KsSkuSubmitCallbackDto; import java.util.ArrayList; import java.util.List; @@ -31,6 +32,16 @@ public interface HardSpuService extends IService { */ Long create(HardSpuEntity entity); + /** + * 更新旷世商品审核进度 + */ + void progress(Long id); + + /** + * 商品审核回调 + */ + void skuCheckCallback(KsSkuSubmitCallbackDto dto); + /** * 编辑 */ @@ -75,4 +86,5 @@ public interface HardSpuService extends IService { * 扣减库存 */ Boolean deductionSpuStock(HardDoorFlowEntity hardDoorFlow, List list); + } \ No newline at end of file diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/spu/HardSpuServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/spu/HardSpuServiceImpl.java index 3ecc61e85..415839bcf 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/spu/HardSpuServiceImpl.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/spu/HardSpuServiceImpl.java @@ -27,9 +27,8 @@ import com.bsd.pjcloud.hard.service.HardManagerService; import com.bsd.pjcloud.hard.service.HardSpuJoinService; import com.bsd.pjcloud.hard.service.HardSpuService; import com.bsd.pjcloud.thirdparty.api.feign.RemoterThirdKsService; -import com.bsd.pjcloud.thirdparty.dto.ks.KsBarcodeLikeDto; -import com.bsd.pjcloud.thirdparty.vo.ks.KsBarcodeLikeVo; -import com.bsd.pjcloud.thirdparty.vo.ks.KsSpuVo; +import com.bsd.pjcloud.thirdparty.dto.ks.*; +import com.bsd.pjcloud.thirdparty.vo.ks.*; import com.bsd.pjcloud.wallet.api.feign.RemoteMchService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -82,25 +81,97 @@ public class HardSpuServiceImpl extends ServiceImpl picList = Arrays.asList(pic.split(",")); entity.setSkuType(HardKsSkuTypeEnum.SELF.getType()); baseMapper.insert(entity); - // 发起审核 - + if (ObjectUtil.equals(entity.getIsDefault(), YesNoEnum.NO.getCode())) { + return entity.getId(); + } + // 发起旷世审核 + KsSkuSubmitDto dto = new KsSkuSubmitDto(); + dto.setSku_id(String.valueOf(entity.getId())); + dto.setSku_name(entity.getName()); + dto.setImg_urls(picList); + Map specs = new HashMap<>(); + specs.put("taste", entity.getSpecsTaste()); + specs.put("capacity", entity.getSpecsCapacity()); + specs.put("weight", entity.getSpecsWeight()); + dto.setSpecs(specs); + KsSkuSubmitVo data = remoterThirdKsService.skuSubmit(dto).getData(); + if (ObjectUtil.isEmpty(data) || !data.isSuccess()) throw new RuntimeException(data.getMessage()); + HardSpuEntity update = new HardSpuEntity(); + update.setId(entity.getId()); + update.setKsSkuId(data.getKs_sku_id()); + update.setKsStatus("0"); + update.setKsStatusTitle("待审核"); + update.setKsComments("提交审核"); + baseMapper.updateById(update); return entity.getId(); } + /** + * 更新旷世商品审核进度 + */ + @Override + public void progress(Long id) { + HardSpuEntity detail = baseMapper.selectById(id); + if (ObjectUtil.isEmpty(detail)) { + throw new RuntimeException("商品不存在"); + } + KsSkuResultDto dto = new KsSkuResultDto(); + dto.setKs_sku_id(detail.getKsSkuId()); + KsSkuResultVo vo = remoterThirdKsService.skuResult(dto).getData(); + if (ObjectUtil.isEmpty(vo) || !vo.isSuccess()) throw new RuntimeException(vo.getMessage()); + KsSkuResultVo.Result result = vo.getResult(); + String comments = ""; + if (ObjectUtil.isEmpty(vo.getComments())) { + comments = vo.getComments(); + } + if (ObjectUtil.isNotEmpty(result)) { + HardSpuEntity update = new HardSpuEntity(); + update.setId(detail.getId()); + update.setKsStatus(result.getCode()); + update.setKsStatusTitle(result.getDesc()); + update.setKsComments(comments); + baseMapper.updateById(update); + } + } + + /** + * 商品审核回调 + */ + @Override + public void skuCheckCallback(KsSkuSubmitCallbackDto dto) { + if (ObjectUtil.isEmpty(dto) || ObjectUtil.isEmpty(dto.getKs_sku_id())) return; + HardSpuEntity detail = baseMapper.selectOne(new LambdaQueryWrapper().eq(HardSpuEntity::getKsSkuId, dto.getKs_sku_id())); + if (ObjectUtil.isEmpty(detail)) return; + KsSkuSubmitCallbackDto.Result result = dto.getResult(); + String comments = ""; + if (ObjectUtil.isEmpty(dto.getComments())) { + comments = dto.getComments(); + } + if (ObjectUtil.isNotEmpty(result)) { + HardSpuEntity update = new HardSpuEntity(); + update.setId(detail.getId()); + update.setKsStatus(result.getCode()); + update.setKsStatusTitle(result.getDesc()); + update.setKsComments(comments); + baseMapper.updateById(update); + } + } + /** * 编辑 */ @Override public Long edit(HardSpuEntity entity) { - // if (existName(entity)) { - // throw new RuntimeException("商品名不能重复"); - // } baseMapper.updateById(entity); return entity.getId(); } @@ -111,6 +182,18 @@ public class HardSpuServiceImpl extends ServiceImpl list) { if (ObjectUtil.isEmpty(list)) return; + List spuList = baseMapper.selectList(new LambdaQueryWrapper() + .in(HardSpuEntity::getId, list) + ); + for (HardSpuEntity v : spuList) { + if (ObjectUtil.notEqual(v.getSkuType(), HardKsSkuTypeEnum.SELF.getType())) continue; + if (ObjectUtil.isNotEmpty(v.getKsSkuId())) { + KsSkuDeleteDto dto = new KsSkuDeleteDto(); + dto.setKs_sku_id(v.getKsSkuId()); + KsSkuDeleteVo data = remoterThirdKsService.skuDelete(dto).getData(); + if (ObjectUtil.isEmpty(data) || !data.isSuccess()) throw new RuntimeException(data.getMessage()); + } + } baseMapper.deleteByIds(list); } diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/spu/HardSpuMapper.xml b/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/spu/HardSpuMapper.xml index 71329ef84..274957e3c 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/spu/HardSpuMapper.xml +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/spu/HardSpuMapper.xml @@ -80,6 +80,11 @@ and a.spu_category_id = #{dto.spuCategoryId} + + + and a.spu_category_id is not null + + and a.status = #{dto.status} diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/ks/KsSkuSubmitCallbackDto.java b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/ks/KsSkuSubmitCallbackDto.java index 840194c15..600c2f8cc 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/ks/KsSkuSubmitCallbackDto.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/ks/KsSkuSubmitCallbackDto.java @@ -32,7 +32,7 @@ public class KsSkuSubmitCallbackDto { * 2:审核通过 * 3:审核不通过 */ - private Integer code; + private String code; private String desc; diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/ks/KsSkuSubmitDto.java b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/ks/KsSkuSubmitDto.java index 84ff297fa..4d7f630b9 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/ks/KsSkuSubmitDto.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/ks/KsSkuSubmitDto.java @@ -2,6 +2,9 @@ package com.bsd.pjcloud.thirdparty.dto.ks; import lombok.Data; +import java.util.List; +import java.util.Map; + @Data public class KsSkuSubmitDto { /** @@ -22,7 +25,7 @@ public class KsSkuSubmitDto { /** * 该字段为SKU不同方位视图,所需拍摄的图片数量及角度请参考商品建模文档,参数具体值为图片资源地址,如资源为使用方所属,请确保外部可以访问,请注意图片尺寸及质量,综合质量不佳可能会导致审核不通过。图片尺寸不小于1920*1080,压缩质量不低于70%,长宽比介于16:9同1:1之间。 */ - private String img_urls; + private List img_urls; /** * 审核结果回调地址 @@ -32,6 +35,6 @@ public class KsSkuSubmitDto { /** * 该字段为SKU所对应的规格,包含口味、容量、重量,taste表示口味,capacity表示容量,单位:ml,weight表示重量,单位:g */ - private String specs; + private Map specs; } diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/ks/KsSkuDeleteVo.java b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/ks/KsSkuDeleteVo.java index 9547e56f9..d49569d9e 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/ks/KsSkuDeleteVo.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/ks/KsSkuDeleteVo.java @@ -3,7 +3,7 @@ package com.bsd.pjcloud.thirdparty.vo.ks; import lombok.Data; @Data -public class KsSkuDeleteVo { +public class KsSkuDeleteVo extends KsBaseInnerVo { /** * 该sku_id为使用方sku_id diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/ks/KsSkuResultVo.java b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/ks/KsSkuResultVo.java index 6f417657f..1ae1db3cb 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/ks/KsSkuResultVo.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/ks/KsSkuResultVo.java @@ -3,24 +3,27 @@ package com.bsd.pjcloud.thirdparty.vo.ks; import lombok.Data; @Data -public class KsSkuResultVo { +public class KsSkuResultVo extends KsBaseInnerVo { /** * 该字段返回结果为字典值,不同code代表不同结果 - *

* 0:待审核 - *

* 1:审核中 - *

* 2:审核通过 - *

* 3:审核不通过 */ - private String result; + private Result result; /** * 审核不通过时该字段才有值 */ private String comments; + @Data + public static class Result { + private String code; + private String desc; + } + + } diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/ks/ThirdKsApiServiceImpl.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/ks/ThirdKsApiServiceImpl.java index 4490dde4f..296201c03 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/ks/ThirdKsApiServiceImpl.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/ks/ThirdKsApiServiceImpl.java @@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.json.JSONUtil; import com.bsd.pjcloud.hard.api.feign.RemoteHardDoorService; +import com.bsd.pjcloud.hard.api.feign.RemoteHardSpuController; import com.bsd.pjcloud.thirdparty.config.KsDiscernConfig; import com.bsd.pjcloud.thirdparty.dto.ks.*; import com.bsd.pjcloud.thirdparty.entity.door.ThirdDoorLogEntity; @@ -14,7 +15,6 @@ import com.bsd.pjcloud.thirdparty.utils.ks.tool.KsRetailSignUtils; import com.bsd.pjcloud.thirdparty.vo.ks.*; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.apache.http.client.methods.HttpDelete; import org.apache.http.client.methods.HttpPost; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; @@ -35,19 +35,37 @@ public class ThirdKsApiServiceImpl implements ThirdKsApiService { private final ThirdDoorLogService doorLogService; private final RemoteHardDoorService remoteHardDoorService; + private final RemoteHardSpuController remoteHardSpuController; /** * 常规SKU提交审核 */ @Override public KsSkuSubmitVo skuSubmit(KsSkuSubmitDto dto) { + dto.setNotify_url(ksDiscernConfig.getCallbackBaseUrl() + ksDiscernConfig.getCallbackSkuUrl()); long startTime = System.currentTimeMillis(); KsBaseVo ksBaseVo = new KsBaseVo(); - KsApi.Api api = KsApi.SKU_SUBMIT.setBaseUrl(ksDiscernConfig.getBaseUrl()).setParams(BeanUtil.beanToMap(dto)); + KsApi.Api api = KsApi.SKU_SUBMIT.setBaseUrl(ksDiscernConfig.getBaseUrl()) + .setParams(BeanUtil.beanToMap(dto)) + .setAccessKey(ksDiscernConfig.getAccessKey()) + .setSecretKey(ksDiscernConfig.getSecretKey()) + .setHost(ksDiscernConfig.getHost()); ThirdDoorLogEntity logEntity = api.getInitLogEntity(); logEntity.setReq(JSONUtil.toJsonStr(dto)); try { - + String body = JSONUtil.toJsonStr(dto); + api.setBody(body); + String res = api.getHttpRequest().execute().body(); + if (ObjectUtil.isEmpty(res)) throw new RuntimeException("response响应为空"); + logEntity.setRes(res); + ksBaseVo = JSONUtil.toBean(res, KsBaseVo.class); + if (!ksBaseVo.isSuccess()) { + String errorLog = String.format("请求错误res|%s|url|%s|body|%s|", res, api, body); + log.error(errorLog); + KsSkuSubmitVo errorVo = new KsSkuSubmitVo(); + errorVo.setMessage(ksBaseVo.getMsg()); + return errorVo; + } } catch (Exception e) { String error = String.format("|%s||skuSubmit|意外的错误error|%s|stack|%s|", TAG, e.getMessage(), Arrays.toString(e.getStackTrace())); log.error(error); @@ -89,11 +107,25 @@ public class ThirdKsApiServiceImpl implements ThirdKsApiService { public KsSkuResultVo skuResult(KsSkuResultDto dto) { long startTime = System.currentTimeMillis(); KsBaseVo ksBaseVo = new KsBaseVo(); - KsApi.Api api = KsApi.SKU_RESULT.setBaseUrl(ksDiscernConfig.getBaseUrl()).setParams(BeanUtil.beanToMap(dto)); + KsApi.Api api = KsApi.SKU_RESULT.setBaseUrl(ksDiscernConfig.getBaseUrl()) + .setpath(dto.getKs_sku_id()) + .setAccessKey(ksDiscernConfig.getAccessKey()) + .setSecretKey(ksDiscernConfig.getSecretKey()) + .setHost(ksDiscernConfig.getHost()); ThirdDoorLogEntity logEntity = api.getInitLogEntity(); logEntity.setReq(JSONUtil.toJsonStr(dto)); try { - + String res = api.getHttpRequest().execute().body(); + if (ObjectUtil.isEmpty(res)) throw new RuntimeException("response响应为空"); + logEntity.setRes(res); + ksBaseVo = JSONUtil.toBean(res, KsBaseVo.class); + if (!ksBaseVo.isSuccess()) { + String errorLog = String.format("请求错误res|%s|url|%s|", res, api); + log.error(errorLog); + KsSkuResultVo errorVo = new KsSkuResultVo(); + errorVo.setMessage(ksBaseVo.getMsg()); + return errorVo; + } } catch (Exception e) { String error = String.format("|%s||skuResult|意外的错误error|%s|stack|%s|", TAG, e.getMessage(), Arrays.toString(e.getStackTrace())); log.error(error); @@ -135,11 +167,25 @@ public class ThirdKsApiServiceImpl implements ThirdKsApiService { public KsSkuDeleteVo skuDelete(KsSkuDeleteDto dto) { long startTime = System.currentTimeMillis(); KsBaseVo ksBaseVo = new KsBaseVo(); - KsApi.Api api = KsApi.SKU_DELETE.setBaseUrl(ksDiscernConfig.getBaseUrl()).setParams(BeanUtil.beanToMap(dto)); + KsApi.Api api = KsApi.SKU_DELETE.setBaseUrl(ksDiscernConfig.getBaseUrl()) + .setpath(dto.getKs_sku_id()) + .setAccessKey(ksDiscernConfig.getAccessKey()) + .setSecretKey(ksDiscernConfig.getSecretKey()) + .setHost(ksDiscernConfig.getHost()); ThirdDoorLogEntity logEntity = api.getInitLogEntity(); logEntity.setReq(JSONUtil.toJsonStr(dto)); try { - + String res = api.getHttpRequest().execute().body(); + if (ObjectUtil.isEmpty(res)) throw new RuntimeException("response响应为空"); + logEntity.setRes(res); + ksBaseVo = JSONUtil.toBean(res, KsBaseVo.class); + if (!ksBaseVo.isSuccess()) { + String errorLog = String.format("请求错误res|%s|url|%s|", res, api); + log.error(errorLog); + KsSkuDeleteVo errorVo = new KsSkuDeleteVo(); + errorVo.setMessage(ksBaseVo.getMsg()); + return errorVo; + } } catch (Exception e) { String error = String.format("|%s||skuDelete|意外的错误error|%s|stack|%s|", TAG, e.getMessage(), Arrays.toString(e.getStackTrace())); log.error(error); @@ -318,7 +364,7 @@ public class ThirdKsApiServiceImpl implements ThirdKsApiService { ThirdDoorLogEntity logEntity = api.getInitLogEntity(); logEntity.setReq(json); try { - + remoteHardSpuController.skuCheckCallback(dto); } catch (Exception e) { String error = String.format("|%s||callbackSKu|意外的错误error|%s|stack|%s|", TAG, e.getMessage(), Arrays.toString(e.getStackTrace())); log.error(error); diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/utils/ks/api/KsApi.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/utils/ks/api/KsApi.java index c53b2192f..404a86d44 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/utils/ks/api/KsApi.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/utils/ks/api/KsApi.java @@ -1,6 +1,7 @@ package com.bsd.pjcloud.thirdparty.utils.ks.api; +import cn.hutool.core.collection.ListUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.RandomUtil; import cn.hutool.http.HttpRequest; @@ -35,7 +36,7 @@ public class KsApi { public static final KsApi.Api SKU_SUBMIT_COLLECTION = KsApi.Api.builder().url("/openapi/sc/v1/sku/collection").bizType(ThirdDoorKsApiTypeEnum.SKU_SUBMIT).method(HttpPost.METHOD_NAME).contentType("application/json").build(); // SKU审核结果主动获取 - public static final KsApi.Api SKU_RESULT = KsApi.Api.builder().url("/openapi/sc/v1/sku/%s").bizType(ThirdDoorKsApiTypeEnum.SKU_SUBMIT).method(HttpPost.METHOD_NAME).contentType("application/json").build(); + public static final KsApi.Api SKU_RESULT = KsApi.Api.builder().url("/openapi/sc/v1/sku/%s").bizType(ThirdDoorKsApiTypeEnum.SKU_SUBMIT).method(HttpGet.METHOD_NAME).contentType("application/json").build(); // SKU识别结果回调通知 public static final KsApi.Api SKU_EDIT = KsApi.Api.builder().url("/callback").bizType(ThirdDoorKsApiTypeEnum.SKU_SUBMIT).method(HttpPatch.METHOD_NAME).contentType("application/json").build(); @@ -75,6 +76,8 @@ public class KsApi { private Map params = new TreeMap<>(); + private List path; + private String body; private String method; @@ -91,7 +94,6 @@ public class KsApi { private String host = ""; - private String requestId; public KsApi.Api setBaseUrl(String baseUrl) { @@ -119,14 +121,17 @@ public class KsApi { return this; } + public Api setpath(Object... path) { + this.url = String.format(this.url, path); + this.path = ListUtil.of(path); + return this; + } + public KsApi.Api setBody(String body) { this.body = body; return this; } - /** - * 获取当前时间戳 - */ public Long getXRequestDate() { return System.currentTimeMillis(); } @@ -153,6 +158,7 @@ public class KsApi { // 计算签名 Long currentTime = getXRequestDate(); String queryString = getQueryString(); + if (ObjectUtil.isEmpty(queryString)) queryString = ""; String auth = KsRetailSignUtils.getSignAuth(getHost(), getUrl(), contentType, getMethod(), currentTime, getAccessKey(), getSecretKey(), getBody(), queryString); String requestId = getXRequestDate() + RandomUtil.randomString(19); setRequestId(requestId); @@ -181,7 +187,7 @@ public class KsApi { } else if (ObjectUtil.equals(method, HttpPatch.METHOD_NAME)) { return HttpRequest.patch(fullPatch).header(getHeader()).body(getBody()); } else if (ObjectUtil.equals(method, HttpDelete.METHOD_NAME)) { - return HttpRequest.delete(fullPatch).header(getHeader()).body(getBody()); + return HttpRequest.delete(fullPatch).header(getHeader()); } else { return null; }