diff --git a/db/800pjcloudx_hardware.sql b/db/800pjcloudx_hardware.sql index fbf0a0cbe..1e8d18f73 100644 --- a/db/800pjcloudx_hardware.sql +++ b/db/800pjcloudx_hardware.sql @@ -105,6 +105,7 @@ CREATE TABLE hard_door_flow id bigint NOT NULL COMMENT '编号', user_id bigint NOT NULL COMMENT '用户编号', biz_type varchar(32) NOT NULL COMMENT '业务类型', + hard_id bigint DEFAULT NULL COMMENT '硬件id', hard_door_id bigint DEFAULT NULL COMMENT '智能柜id', cabinet_no int DEFAULT NULL COMMENT '货柜编号', order_id bigint DEFAULT NULL COMMENT '订单编号', diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/order/HardPayTypeEnum.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/order/HardPayTypeEnum.java index 46b997263..e051ec26a 100644 --- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/order/HardPayTypeEnum.java +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/order/HardPayTypeEnum.java @@ -23,6 +23,7 @@ public enum HardPayTypeEnum { FOREIGN_TICKET_QR_CODE("6", "外来人员二维码支付"), RESERVE_QR_CODE("7", "线上订餐二维码支付"), CASH("8", "现金支付"), + HARD_DOOR_FREE_PAY("9", "智能柜免密支付"), ; private final String type; private final String description; diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/HardDoorFlowEntity.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/HardDoorFlowEntity.java index 8053f8557..f5c2c6ea8 100644 --- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/HardDoorFlowEntity.java +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/HardDoorFlowEntity.java @@ -43,6 +43,12 @@ public class HardDoorFlowEntity extends Model { @Schema(description = "业务类型") private String bizType; + /** + * 硬件id + */ + @Schema(description = "硬件id") + private Long hardId; + /** * 智能柜id */ diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/feign/RemoteHardDoorService.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/feign/RemoteHardDoorService.java index 8292b077f..0f52acaf8 100644 --- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/feign/RemoteHardDoorService.java +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/feign/RemoteHardDoorService.java @@ -2,18 +2,15 @@ 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.hard.api.entity.order.HardOrderEntity; import com.bsd.pjcloud.thirdparty.dto.door.DoorOpenCallbackDto; import com.bsd.pjcloud.thirdparty.dto.door.DoorStatusCallbackDto; -import com.bsd.pjcloud.thirdparty.dto.door.DoorStatusDto; import com.bsd.pjcloud.thirdparty.dto.door.DoorVideoCallbackDto; +import com.bsd.pjcloud.thirdparty.dto.ks.KsRecognitionCallbackDto; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; -import java.util.List; @FeignClient(contextId = "remoteHardDoorService", value = ServiceNameConstants.HARDWARE_SERVICE) public interface RemoteHardDoorService { @@ -23,19 +20,26 @@ public interface RemoteHardDoorService { */ @NoToken @PostMapping("/hard-door-flow/dispose-locak-callback") - R> disposeLocakCallback(@RequestBody DoorOpenCallbackDto dto); + void disposeLocakCallback(@RequestBody DoorOpenCallbackDto dto); /** * 处理柜子视频回调 */ @NoToken @PostMapping("/hard-door-flow/dispose-video-callback") - R> disposeVideoCallback(@RequestBody DoorVideoCallbackDto dto); + void disposeVideoCallback(@RequestBody DoorVideoCallbackDto dto); /** * 处理柜子视频回调 */ @NoToken @PostMapping("/hard-door-flow/dispose-status-callback") - R> disposeStatusCallback(@RequestBody DoorStatusCallbackDto dto); + void disposeStatusCallback(@RequestBody DoorStatusCallbackDto dto); + + /** + * 处理旷世识别回调 + */ + @NoToken + @PostMapping("/hard-door-flow/dispose-recognition-callback") + void disposeRecognitionCallback(@RequestBody KsRecognitionCallbackDto dto); } diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/HardDoorFlowController.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/HardDoorFlowController.java index 5a31e8f4e..34e998eea 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/HardDoorFlowController.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/HardDoorFlowController.java @@ -18,6 +18,7 @@ import com.bsd.pjcloud.hard.service.HardDoorFlowService; import com.bsd.pjcloud.thirdparty.dto.door.DoorOpenCallbackDto; import com.bsd.pjcloud.thirdparty.dto.door.DoorStatusCallbackDto; import com.bsd.pjcloud.thirdparty.dto.door.DoorVideoCallbackDto; +import com.bsd.pjcloud.thirdparty.dto.ks.KsRecognitionCallbackDto; import org.springframework.security.access.prepost.PreAuthorize; import com.bsd.pjcloud.common.excel.annotation.ResponseExcel; import io.swagger.v3.oas.annotations.security.SecurityRequirement; @@ -51,9 +52,8 @@ public class HardDoorFlowController { */ @Inner() @PostMapping("/dispose-locak-callback") - public R disposeLocakCallback(@RequestBody DoorOpenCallbackDto dto) { + public void disposeLocakCallback(@RequestBody DoorOpenCallbackDto dto) { hardDoorFlowService.disposeLocakCallback(dto); - return R.ok(); } /** @@ -61,9 +61,8 @@ public class HardDoorFlowController { */ @Inner() @PostMapping("/dispose-video-callback") - public R disposeVideoCallback(@RequestBody DoorVideoCallbackDto dto) { + public void disposeVideoCallback(@RequestBody DoorVideoCallbackDto dto) { hardDoorFlowService.disposeVideoCallback(dto); - return R.ok(); } /** @@ -71,10 +70,21 @@ public class HardDoorFlowController { */ @Inner() @PostMapping("/dispose-status-callback") - public R disposeStatusCallback(@RequestBody DoorStatusCallbackDto dto) { + public void disposeStatusCallback(@RequestBody DoorStatusCallbackDto dto) { hardDoorFlowService.disposeStatusCallback(dto); - return R.ok(); } + + /** + * 处理旷世识别回调 + */ + @Inner() + @PostMapping("/dispose-recognition-callback") + public void disposeRecognitionCallback(@RequestBody KsRecognitionCallbackDto dto) { + hardDoorFlowService.disposeRecognitionCallback(dto); + } + + + /* ************************************* end 远程调用 end ************************************* */ /* ************************************* start app start ************************************* */ diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardDoorFlowService.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardDoorFlowService.java index 2073568d5..c0a5691da 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardDoorFlowService.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardDoorFlowService.java @@ -8,6 +8,7 @@ import com.bsd.pjcloud.thirdparty.dto.door.DoorOpenCallbackDto; import com.bsd.pjcloud.thirdparty.dto.door.DoorStatusCallbackDto; import com.bsd.pjcloud.thirdparty.dto.door.DoorStatusDto; import com.bsd.pjcloud.thirdparty.dto.door.DoorVideoCallbackDto; +import com.bsd.pjcloud.thirdparty.dto.ks.KsRecognitionCallbackDto; public interface HardDoorFlowService extends IService { @@ -46,4 +47,9 @@ public interface HardDoorFlowService extends IService { * 处理柜子状态回调 */ void disposeStatusCallback(DoorStatusCallbackDto dto); + + /** + * 处理旷世识别回调 + */ + void disposeRecognitionCallback(KsRecognitionCallbackDto dto); } \ No newline at end of file diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardOrderService.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardOrderService.java index ea46186b9..9a15f336d 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardOrderService.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardOrderService.java @@ -42,6 +42,11 @@ public interface HardOrderService extends IService { */ Long appCreateOrderScancode(@Valid HardAppCreateOrderDto dto); + /** + * 创建智能柜订单 + */ + Long createHardDoorOrder(Long userId, Long hardId); + /** * 快速扣款,离线订单使用 */ diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardDoorFlowServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardDoorFlowServiceImpl.java index d6ad5a2e1..31d1fe47b 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardDoorFlowServiceImpl.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardDoorFlowServiceImpl.java @@ -13,16 +13,15 @@ import com.bsd.pjcloud.hard.api.entity.HardAuthEntity; import com.bsd.pjcloud.hard.api.entity.HardDoorFlowEntity; import com.bsd.pjcloud.hard.api.entity.manager.HardDoorManagerEntity; import com.bsd.pjcloud.hard.api.vo.manager.HardDoorManagerVo; +import com.bsd.pjcloud.hard.api.vo.manager.HardManagerVo; import com.bsd.pjcloud.hard.api.vo.spu.HardSpuJoinVo; import com.bsd.pjcloud.hard.mapper.HardAuthMapper; import com.bsd.pjcloud.hard.mapper.HardDoorFlowMapper; -import com.bsd.pjcloud.hard.service.HardDoorCabinetService; -import com.bsd.pjcloud.hard.service.HardDoorFlowService; -import com.bsd.pjcloud.hard.service.HardDoorManagerService; -import com.bsd.pjcloud.hard.service.HardSpuJoinService; +import com.bsd.pjcloud.hard.service.*; import com.bsd.pjcloud.thirdparty.api.feign.RemoterThirdDoorApiService; import com.bsd.pjcloud.thirdparty.api.feign.RemoterThirdKsService; import com.bsd.pjcloud.thirdparty.dto.door.*; +import com.bsd.pjcloud.thirdparty.dto.ks.KsRecognitionCallbackDto; import com.bsd.pjcloud.thirdparty.dto.ks.KsRecognitionDto; import com.bsd.pjcloud.thirdparty.dto.ks.KsSkuSubmitDto; import com.bsd.pjcloud.thirdparty.vo.door.DoorOpenVo; @@ -51,9 +50,11 @@ public class HardDoorFlowServiceImpl extends ServiceImpl cabinetList = hardDoorCabinetService.getListByHardDoorId(hardDoorId); if (ObjectUtil.isEmpty(cabinetList)) throw new RuntimeException("货柜不存在"); if (ObjectUtil.isEmpty(cabinetList.stream().filter(i -> ObjectUtil.equals(i.getCabinetNo(), cabinetNo)).findFirst().orElse(null))) { throw new RuntimeException("货柜不存在"); } - return doorDetail; + HardDoorManagerVo doorVo = BeanUtil.toBean(doorDetail, HardDoorManagerVo.class); + doorVo.setCabinetList(cabinetList); + return doorVo; } } \ No newline at end of file diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderServiceImpl.java index 1e7a01996..a0902b457 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderServiceImpl.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderServiceImpl.java @@ -34,6 +34,7 @@ import com.bsd.pjcloud.hard.api.entity.order.HardCarEntity; import com.bsd.pjcloud.hard.api.entity.order.HardOrderEntity; import com.bsd.pjcloud.hard.api.entity.order.HardParentCarEntity; import com.bsd.pjcloud.hard.api.utils.HardUtil; +import com.bsd.pjcloud.hard.api.vo.manager.HardManagerVo; import com.bsd.pjcloud.hard.api.vo.order.HardCarVo; import com.bsd.pjcloud.hard.api.vo.order.HardOrderVo; import com.bsd.pjcloud.hard.mapper.manager.HardManagerMapper; @@ -398,6 +399,37 @@ public class HardOrderServiceImpl extends ServiceImpl result; + } + + @Data + private static class ResultStatus { + /*** + * 1:识别中 + * 2:成功 + * 3:成功:未拿商品 + * 4:失败:无法识别 + * 6:告警:故意遮挡 + * 7:告警:柜中无此SKU + * 8:告警:其他告警 + * 9:告警:异物拿放 + * 10:告警:疑似设备故障 + */ + private String code; + + private String desc; + } + + @Data + private static class ResultSku { + + /** + * 识别到的sku_id(超级收银员平台的sku_id) + */ + private String ks_sku_id; + + /** + * 识别到的sku数量 + */ + private String sku_num; + + } +} 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 new file mode 100644 index 000000000..840194c15 --- /dev/null +++ b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/ks/KsSkuSubmitCallbackDto.java @@ -0,0 +1,41 @@ +package com.bsd.pjcloud.thirdparty.dto.ks; + +import lombok.Data; + +@Data +public class KsSkuSubmitCallbackDto { + + /** + * 该字段为使用方系统sku_id + */ + private String sku_id; + + /** + * 该字段为超级收银员平台的sku_id,后续SKU管理域所有请求都需要以该字段作为参数 + */ + private String ks_sku_id; + + /** + * 该字段返回结果为字典值,不同code代表不同结果 + */ + private Result result; + + /** + * 审核不通过时该字段才有值 + */ + private String comments; + + @Data + public static class Result { + + /** + * 2:审核通过 + * 3:审核不通过 + */ + private Integer code; + + private String desc; + + } + +} diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/config/KsDiscernConfig.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/config/KsDiscernConfig.java index 4e7c5267d..291e7a042 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/config/KsDiscernConfig.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/config/KsDiscernConfig.java @@ -16,4 +16,19 @@ public class KsDiscernConfig { private String accessKey; private String secretKey; + + /** + * 回调基础url + */ + private String callbackBaseUrl; + + /** + * sku审核回调 + */ + private String callbackSkuUrl; + + /** + * 识别回调 + */ + private String callbackRecognitionUrl; } diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/door/ThirdDoorApiController.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/door/ThirdDoorApiController.java index 792808d0c..f53b01539 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/door/ThirdDoorApiController.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/door/ThirdDoorApiController.java @@ -13,13 +13,8 @@ import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; -import org.springframework.http.server.ServletServerHttpRequest; import org.springframework.web.bind.annotation.*; -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; -import java.nio.charset.StandardCharsets; import java.util.Map; @RestController diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/ks/ThirdKsApiController.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/ks/ThirdKsApiController.java index cd2365973..c3ddc02ef 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/ks/ThirdKsApiController.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/ks/ThirdKsApiController.java @@ -11,9 +11,12 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.security.SecurityRequirement; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.web.bind.annotation.*; +import java.util.Map; + @RestController @RequiredArgsConstructor @RequestMapping("/third-ks") @@ -97,4 +100,24 @@ public class ThirdKsApiController { /* ************************************* end 远程调用 end ************************************* */ + /* ************************************* start 回调 start ************************************* */ + + @Inner(value = false) + @Operation(summary = "sku审核回调") + @PostMapping("/callback/sku") + public void callbackSKu(HttpEntity httpEntity, @RequestHeader Map headers) { + String body = httpEntity.getBody(); + thirdKsApiService.callbackSKu(body, headers); + } + + @Inner(value = false) + @Operation(summary = "识别回调") + @PostMapping("/callback/recognition") + public void callbackRecognition(HttpEntity httpEntity, @RequestHeader Map headers) { + String body = httpEntity.getBody(); + thirdKsApiService.callbackRecognition(body, headers); + } + + /* ************************************* end 回调 end ************************************* */ + } diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdKsApiService.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdKsApiService.java index e8c7406a0..f118b2f62 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdKsApiService.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdKsApiService.java @@ -6,6 +6,8 @@ import com.bsd.pjcloud.thirdparty.dto.ks.*; import com.bsd.pjcloud.thirdparty.vo.door.DoorRegisterVo; import com.bsd.pjcloud.thirdparty.vo.ks.*; +import java.util.Map; + public interface ThirdKsApiService { /** @@ -57,4 +59,14 @@ public interface ThirdKsApiService { * SKU识别结果主动获取 */ KsRecognitionResultVo recognitionResult(KsRecognitionResultDto dto); + + /** + * sku审核回调 + */ + void callbackSKu(String json, Map headers); + + /** + * 识别回调 + */ + void callbackRecognition(String json, Map headers); } 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 4915c2371..6e134f074 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 @@ -2,8 +2,8 @@ package com.bsd.pjcloud.thirdparty.service.impl.ks; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.ObjectUtil; -import cn.hutool.core.util.RandomUtil; import cn.hutool.json.JSONUtil; +import com.bsd.pjcloud.hard.api.feign.RemoteHardDoorService; import com.bsd.pjcloud.thirdparty.config.KsDiscernConfig; import com.bsd.pjcloud.thirdparty.dto.ks.*; import com.bsd.pjcloud.thirdparty.entity.door.ThirdDoorLogEntity; @@ -31,6 +31,8 @@ public class ThirdKsApiServiceImpl implements ThirdKsApiService { private final ThirdDoorLogService doorLogService; + private final RemoteHardDoorService remoteHardDoorService; + /** * 常规SKU提交审核 */ @@ -279,4 +281,65 @@ public class ThirdKsApiServiceImpl implements ThirdKsApiService { } return JSONUtil.toBean(ksBaseVo.getData(), KsRecognitionResultVo.class); } + + /** + * sku审核回调 + */ + @Override + public void callbackSKu(String json, Map headers) { + KsSkuSubmitCallbackDto dto = JSONUtil.toBean(json, KsSkuSubmitCallbackDto.class); + boolean isSign = apiParseSign(json, headers); + if (!isSign) { + log.error("|{}| callbackSKu 签名错误", TAG); + return; + } + long startTime = System.currentTimeMillis(); + KsApi.Api api = KsApi.SKU_SUBMIT_CALLBACK; + ThirdDoorLogEntity logEntity = api.getInitLogEntity(); + logEntity.setReq(json); + try { + + } catch (Exception e) { + String error = String.format("|%s||callbackSKu|意外的错误error|%s|stack|%s|", TAG, e.getMessage(), Arrays.toString(e.getStackTrace())); + log.error(error); + logEntity.setError(error); + } finally { + logEntity.setTimeConsuming(Long.toString(System.currentTimeMillis() - startTime)); + doorLogService.save(logEntity); + } + } + + /** + * 识别回调 + */ + @Override + public void callbackRecognition(String json, Map headers) { + KsRecognitionCallbackDto dto = JSONUtil.toBean(json, KsRecognitionCallbackDto.class); + boolean isSign = apiParseSign(json, headers); + if (!isSign) { + log.error("|{}| callbackRecognition 签名错误", TAG); + return; + } + long startTime = System.currentTimeMillis(); + KsApi.Api api = KsApi.RECOGNITION_CALLBACK; + ThirdDoorLogEntity logEntity = api.getInitLogEntity(); + logEntity.setReq(json); + try { + remoteHardDoorService.disposeRecognitionCallback(dto); + } catch (Exception e) { + String error = String.format("|%s||callbackRecognition|意外的错误error|%s|stack|%s|", TAG, e.getMessage(), Arrays.toString(e.getStackTrace())); + log.error(error); + logEntity.setError(error); + } finally { + logEntity.setTimeConsuming(Long.toString(System.currentTimeMillis() - startTime)); + doorLogService.save(logEntity); + } + } + + /** + * 接口解签 + */ + private boolean apiParseSign(String json, Map headers) { + return true; + } } 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 f5f10c58a..f12f77d67 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 @@ -29,34 +29,40 @@ import java.util.TreeMap; public class KsApi { // 常规SKU提交审核 - public static final KsApi.Api SKU_SUBMIT = KsApi.Api.builder().url("/openapi/sc/v1/sku").bizType(ThirdDoorKsApiTypeEnum.REGISTER).method(HttpPost.METHOD_NAME).contentType("application/json").build(); + public static final KsApi.Api SKU_SUBMIT = KsApi.Api.builder().url("/openapi/sc/v1/sku").bizType(ThirdDoorKsApiTypeEnum.SKU_SUBMIT).method(HttpPost.METHOD_NAME).contentType("application/json").build(); // 集合SKU提交审核(未公开) - public static final KsApi.Api SKU_SUBMIT_COLLECTION = KsApi.Api.builder().url("/openapi/sc/v1/sku/collection").bizType(ThirdDoorKsApiTypeEnum.REGISTER).method(HttpPost.METHOD_NAME).contentType("application/json").build(); + 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.REGISTER).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(HttpPost.METHOD_NAME).contentType("application/json").build(); - // 常规SKU修改 - public static final KsApi.Api SKU_EDIT = KsApi.Api.builder().url("/openapi/sc/v1/sku/%s").bizType(ThirdDoorKsApiTypeEnum.REGISTER).method(HttpPatch.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(); + + // SKU审核结果回调通知 + public static final KsApi.Api SKU_SUBMIT_CALLBACK = KsApi.Api.builder().url("/openapi/sc/v1/sku/%s").bizType(ThirdDoorKsApiTypeEnum.SKU_SUBMIT_CALLBACK).method(HttpPatch.METHOD_NAME).contentType("application/json").build(); // SKU删除 - public static final KsApi.Api SKU_DELETE = KsApi.Api.builder().url("/openapi/sc/v1/sku/%s").bizType(ThirdDoorKsApiTypeEnum.REGISTER).method(HttpDelete.METHOD_NAME).contentType("application/json").build(); + public static final KsApi.Api SKU_DELETE = KsApi.Api.builder().url("/openapi/sc/v1/sku/%s").bizType(ThirdDoorKsApiTypeEnum.SKU_SUBMIT).method(HttpDelete.METHOD_NAME).contentType("application/json").build(); // 根据69码查询标准库和私有库商品信息 - public static final KsApi.Api BARCODE_SKU = KsApi.Api.builder().url("/openapi/sc/v1/sku/all_sku/%s").bizType(ThirdDoorKsApiTypeEnum.REGISTER).method(HttpGet.METHOD_NAME).contentType("application/json").build(); + public static final KsApi.Api BARCODE_SKU = KsApi.Api.builder().url("/openapi/sc/v1/sku/all_sku/%s").bizType(ThirdDoorKsApiTypeEnum.SKU_SUBMIT).method(HttpGet.METHOD_NAME).contentType("application/json").build(); // 根据ks_sku_id查询标准库和私有库商品信息 - public static final KsApi.Api BARCODE_SKU_BY_ID = KsApi.Api.builder().url("/openapi/sc/v1/sku/skus/%s").bizType(ThirdDoorKsApiTypeEnum.REGISTER).method(HttpGet.METHOD_NAME).contentType("application/json").build(); + public static final KsApi.Api BARCODE_SKU_BY_ID = KsApi.Api.builder().url("/openapi/sc/v1/sku/skus/%s").bizType(ThirdDoorKsApiTypeEnum.SKU_SUBMIT).method(HttpGet.METHOD_NAME).contentType("application/json").build(); // 模糊查询标准库和私有库商品信息 - public static final KsApi.Api BARCODE_SKU_LIKE = KsApi.Api.builder().url("/openapi/sc/v1/sku/sku_list").bizType(ThirdDoorKsApiTypeEnum.REGISTER).method(HttpGet.METHOD_NAME).contentType("application/json").build(); + public static final KsApi.Api BARCODE_SKU_LIKE = KsApi.Api.builder().url("/openapi/sc/v1/sku/sku_list").bizType(ThirdDoorKsApiTypeEnum.SKU_SUBMIT).method(HttpGet.METHOD_NAME).contentType("application/json").build(); // SKU提交识别 - public static final KsApi.Api RECOGNITION = KsApi.Api.builder().url("/openapi/sc/v1/recognition/%s").bizType(ThirdDoorKsApiTypeEnum.REGISTER).method(HttpPost.METHOD_NAME).contentType("application/json").build(); + public static final KsApi.Api RECOGNITION = KsApi.Api.builder().url("/openapi/sc/v1/recognition/%s").bizType(ThirdDoorKsApiTypeEnum.SKU_SUBMIT).method(HttpPost.METHOD_NAME).contentType("application/json").build(); + + // SKU识别结果回调通知 + public static final KsApi.Api RECOGNITION_CALLBACK = KsApi.Api.builder().url("/callback").bizType(ThirdDoorKsApiTypeEnum.RECOGNITION_CALLBACK).method(HttpPost.METHOD_NAME).contentType("application/json").build(); // SKU识别结果主动获取 - public static final KsApi.Api RECOGNITION_RESULT = KsApi.Api.builder().url("/openapi/sc/v1/recognition/%s").bizType(ThirdDoorKsApiTypeEnum.REGISTER).method(HttpPost.METHOD_NAME).contentType("application/json").build(); + public static final KsApi.Api RECOGNITION_RESULT = KsApi.Api.builder().url("/openapi/sc/v1/recognition/%s").bizType(ThirdDoorKsApiTypeEnum.SKU_SUBMIT).method(HttpPost.METHOD_NAME).contentType("application/json").build(); @Data @Builder diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/resources/application.yml b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/resources/application.yml index 09d6563e1..0c3752915 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/resources/application.yml +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/resources/application.yml @@ -85,6 +85,9 @@ ks-discern: access-key: ed5A923eF0e941A1968eGTpF secret-key: Ex3X0kgoc94sBOtivjWm5Vz9AyZTOUpl host: retail.xlsdn.com + callback-base-url: http://h1yzkslmyx.ny.takin.cc + callback-recognition-url: /third/third-door/callback/open + callback-sku-url: /third/third-door/callback/video diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/WalletManageController.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/WalletManageController.java index 7aca69942..ecb477693 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/WalletManageController.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/WalletManageController.java @@ -159,6 +159,13 @@ public class WalletManageController { public R getQrCode(@RequestParam Long walletId) { return R.ok(walletManageService.getQrCode(walletId)); } + + @GetMapping("/app/is-use-door") + @Operation(summary = "是够能够使用智能柜") + public R isUseDoor() { + PjcloudUser user = SecurityUtils.getUser(); + return R.ok(walletManageService.isUseDoor(user.getId())); + } /* ************************************* end app end ************************************* */ @Operation(summary = "分页查询", description = "分页查询") diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/WalletManageService.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/WalletManageService.java index ab9ab2751..7d5524869 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/WalletManageService.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/WalletManageService.java @@ -97,4 +97,9 @@ public interface WalletManageService extends IService { * 是否可以删除该用户 */ String isDel(Long userId); + + /** + * 是够能够使用智能柜 + */ + String isUseDoor(Long userId); } \ No newline at end of file diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/WalletManageServiceImpl.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/WalletManageServiceImpl.java index c6aeff5cd..14cd09685 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/WalletManageServiceImpl.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/WalletManageServiceImpl.java @@ -459,6 +459,18 @@ public class WalletManageServiceImpl extends ServiceImpl= 100 * 100) { + return null; + } + return "消费钱包余额不足100元"; + } + private void disposeList(List list, WalletManageDto dto) { if (ObjectUtil.isNotEmpty(list)) { // 用户