diff --git a/db/800pjcloudx_hardware.sql b/db/800pjcloudx_hardware.sql index c279747f7..00e008477 100644 --- a/db/800pjcloudx_hardware.sql +++ b/db/800pjcloudx_hardware.sql @@ -414,6 +414,7 @@ CREATE TABLE hard_spu ks_status char(1) DEFAULT NULL COMMENT '旷世审核状态', ks_status_title varchar(64) DEFAULT NULL COMMENT '旷世审核状态标题', ks_comments varchar(512) DEFAULT NULL COMMENT '旷世审核状态描述', + version int DEFAULT 0 NOT NULL COMMENT '乐观锁', create_by varchar(64) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '创建人', create_time datetime DEFAULT NULL COMMENT '创建时间', update_by varchar(64) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '修改人', diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/spu/DeductionSpuStockDto.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/spu/DeductionSpuStockDto.java new file mode 100644 index 000000000..bd0781c54 --- /dev/null +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/spu/DeductionSpuStockDto.java @@ -0,0 +1,14 @@ +package com.bsd.pjcloud.hard.api.dto.spu; + +import lombok.Data; + +import java.util.List; + +@Data +public class DeductionSpuStockDto { + + private Long hardSpuId; + + private Integer incrCount; + +} 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 d2f959ecd..b13f3518d 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 @@ -165,6 +165,12 @@ public class HardSpuEntity extends Model { @Schema(description = "旷世审核状态标题") private String ksStatusTitle; + /** + * 乐观锁 + */ + @Version + private Integer version; + /** * 旷世审核状态描述 */ 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 4fee0e018..f4e458a3b 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 @@ -3,6 +3,7 @@ package com.bsd.pjcloud.hard.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.bsd.pjcloud.common.data.datascope.DataScope; +import com.bsd.pjcloud.hard.api.dto.spu.DeductionSpuStockDto; 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; @@ -60,7 +61,12 @@ public interface HardSpuService extends IService { void asyncAll(); /** - * 拉取旷世商品 + * 检验商品 */ HardSpuEntity validateSpu(Long hardSpuId); + + /** + * 扣减库存 + */ + Boolean deductionSpuStock(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/HardDoorFlowServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardDoorFlowServiceImpl.java index d732fad50..d329ca222 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 @@ -298,7 +298,7 @@ public class HardDoorFlowServiceImpl extends ServiceImpl carList = hardCarService.getByParentCarId(order.getParentCarId()); @@ -624,7 +625,7 @@ public class HardOrderServiceImpl extends ServiceImpl carList = hardCarService.getByParentCarId(order.getParentCarId()); @@ -653,6 +654,10 @@ public class HardOrderServiceImpl extends ServiceImpl getByIds(List spuIds) { - return baseMapper.selectList(new LambdaQueryWrapper().in(HardSpuEntity::getId, spuIds)); + return baseMapper.selectList(new LambdaQueryWrapper().in(HardSpuEntity::getId, spuIds)); } /** @@ -233,6 +234,31 @@ public class HardSpuServiceImpl extends ServiceImpl list) { + if (ObjectUtil.isEmpty(list)) { + log.error("|{}|扣减商品库存失败list为空", TAG); + return false; + } + List hardSpuIdes = list.stream().map(DeductionSpuStockDto::getHardSpuId).toList(); + List hardSpuList = getByIds(hardSpuIdes); + if (ObjectUtil.isEmpty(hardSpuList)) { + log.error("|{}|扣减商品库存失败查询到的智能柜商品为空dto|{}|", TAG, JSONUtil.toJsonStr(list)); + return false; + } + List updateList = new ArrayList<>(); + for (HardSpuEntity i : hardSpuList) { + list.stream().filter(j -> ObjectUtil.equals(i.getId(), j.getHardSpuId())).findFirst().ifPresent(hardSpu -> { + if(ObjectUtil.isNotEmpty(hardSpu.getIncrCount())){ + HardSpuEntity entity = new HardSpuEntity(); + entity.setId(hardSpu.getHardSpuId()); + entity.setRepertoryCount(i.getRepertoryCount() - hardSpu.getIncrCount()); + } + }); + } + return null; + } + public boolean asyncAllGroup(KsBarcodeLikeDto likeDto) { KsBarcodeLikeVo data = remoterThirdKsService.barcodeSkuLike(likeDto).getData(); if (ObjectUtil.isEmpty(data) || !data.isSuccess() || ObjectUtil.isEmpty(data.getResultList())) return false; 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 8ddea82f6..4490dde4f 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 @@ -361,10 +361,23 @@ public class ThirdKsApiServiceImpl implements ThirdKsApiService { */ private boolean apiParseSign(String json, String uri, Map headers) { String authorization = headers.get("Authorization"); + if (ObjectUtil.isEmpty(authorization)) { + throw new RuntimeException("签名参数缺失"); + } String referer = headers.get("Referer"); + if (ObjectUtil.isEmpty(referer)) { + throw new RuntimeException("签名参数缺失"); + } + String cleanUrl = referer.replaceAll("^(http|https)://", ""); String contentType = headers.get("Content-Type"); - String timestamp = headers.get("REQUEST-START-TIME"); - String signAuth = KsRetailSignUtils.getSignAuth(referer, uri, contentType, HttpPost.METHOD_NAME, Long.valueOf(timestamp), ksDiscernConfig.getAccessKey(), ksDiscernConfig.getSecretKey(), json, ""); + if (ObjectUtil.isEmpty(contentType)) { + throw new RuntimeException("签名参数缺失"); + } + String timestamp = headers.get("X-Request-Date"); + if (ObjectUtil.isEmpty(timestamp)) { + throw new RuntimeException("签名参数缺失"); + } + String signAuth = KsRetailSignUtils.getSignAuth(cleanUrl, uri, contentType, HttpPost.METHOD_NAME, Long.valueOf(timestamp), ksDiscernConfig.getAccessKey(), ksDiscernConfig.getSecretKey(), json, ""); return ObjectUtil.equals(signAuth, authorization); } }