From 30e61bac2fb0b16dff18547bc545371cfd4d1c1f Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Fri, 18 Apr 2025 14:35:03 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E6=AF=8F=E4=B8=AA=E8=B4=A7=E6=9F=9C?= =?UTF-8?q?=E7=8B=AC=E7=AB=8B=E5=BA=93=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/800pjcloudx_hardware.sql | 5 ++ .../api/dto/manager/HardDoorCabinetDto.java | 8 ++ .../hard/api/dto/spu/HardSpuRepertoryDto.java | 2 + .../api/entity/spu/HardSpuJoinEntity.java | 19 +++++ .../entity/spu/HardSpuRepertoryEntity.java | 13 +++ .../api/vo/manager/HardDoorCabinetVo.java | 23 ++++++ .../hard/api/vo/spu/HardSpuRepertoryVo.java | 13 ++- .../manager/HardDoorManagerController.java | 9 +++ .../controller/spu/HardSpuController.java | 3 + .../spu/HardSpuRepertoryController.java | 11 ++- .../mapper/manager/HardDoorCabinetMapper.java | 6 ++ .../hard/service/HardDoorCabinetService.java | 6 ++ .../hard/service/HardDoorManagerService.java | 7 ++ .../hard/service/HardSpuRepertoryService.java | 2 +- .../pjcloud/hard/service/HardSpuService.java | 3 +- .../manager/HardDoorCabinetServiceImpl.java | 9 +++ .../manager/HardDoorManagerServiceImpl.java | 11 +++ .../impl/order/HardOrderServiceImpl.java | 11 ++- .../impl/spu/HardSpuRepertoryServiceImpl.java | 81 +++++++++++++------ .../service/impl/spu/HardSpuServiceImpl.java | 31 +++++-- .../mapper/manager/HardDoorCabinetMapper.xml | 47 ++++++++++- .../mapper/spu/HardSpuRepertoryMapper.xml | 12 ++- 22 files changed, 293 insertions(+), 39 deletions(-) create mode 100644 pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/manager/HardDoorCabinetDto.java create mode 100644 pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/manager/HardDoorCabinetVo.java diff --git a/db/800pjcloudx_hardware.sql b/db/800pjcloudx_hardware.sql index e050e7d0..1b492152 100644 --- a/db/800pjcloudx_hardware.sql +++ b/db/800pjcloudx_hardware.sql @@ -444,6 +444,9 @@ CREATE TABLE hard_spu_join cabinet_no varchar(32) DEFAULT NULL COMMENT '货柜编号', spu_id bigint DEFAULT NULL COMMENT '商品id', hard_door_number int DEFAULT NULL COMMENT '商品放置层数', + version bigint DEFAULT 0 COMMENT '乐观锁', + sales_count bigint DEFAULT 0 COMMENT '销量', + repertory_count bigint NOT NULL DEFAULT 0 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 '修改人', @@ -481,6 +484,8 @@ CREATE TABLE hard_spu_repertory ( id bigint NOT NULL AUTO_INCREMENT COMMENT '编号', user_id bigint NOT NULL COMMENT '用户id', + hard_door_id bigint NOT NULL COMMENT '智能柜编号', + cabinet_no int NOT NULL COMMENT '货柜编号(1,2)', spu_id bigint NOT NULL COMMENT '商品id', before_count int NOT NULL COMMENT '更新前的库存数量', count int DEFAULT 0 COMMENT '更新库存数量', diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/manager/HardDoorCabinetDto.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/manager/HardDoorCabinetDto.java new file mode 100644 index 00000000..ce6dc3a6 --- /dev/null +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/manager/HardDoorCabinetDto.java @@ -0,0 +1,8 @@ +package com.bsd.pjcloud.hard.api.dto.manager; + +import com.bsd.pjcloud.hard.api.entity.manager.HardDoorCabinetEntity; +import lombok.Data; + +@Data +public class HardDoorCabinetDto extends HardDoorCabinetEntity { +} diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/spu/HardSpuRepertoryDto.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/spu/HardSpuRepertoryDto.java index 20a9290e..94e3622f 100644 --- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/spu/HardSpuRepertoryDto.java +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/spu/HardSpuRepertoryDto.java @@ -13,4 +13,6 @@ public class HardSpuRepertoryDto extends HardSpuRepertoryEntity { private List userIds; + private Long cabinetId; + } diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/spu/HardSpuJoinEntity.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/spu/HardSpuJoinEntity.java index efc49d8d..98c41196 100644 --- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/spu/HardSpuJoinEntity.java +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/spu/HardSpuJoinEntity.java @@ -51,6 +51,25 @@ public class HardSpuJoinEntity extends Model { @Schema(description = "放置层数") private Integer hardDoorNumber; + /** + * 乐观锁 + */ + @Version + private Integer version; + + /** + * 销量 + */ + @Schema(description = "销量") + private Integer salesCount; + + /** + * 库存 + */ + @Schema(description = "库存") + private Integer repertoryCount; + + /** * 创建人 */ diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/spu/HardSpuRepertoryEntity.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/spu/HardSpuRepertoryEntity.java index ce612b97..3f4b199e 100644 --- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/spu/HardSpuRepertoryEntity.java +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/spu/HardSpuRepertoryEntity.java @@ -36,6 +36,19 @@ public class HardSpuRepertoryEntity extends Model { @Schema(description = "用户id") private Long userId; + /** + * 硬件柜子id + */ + @Schema(description = "硬件柜子id") + private Long hardDoorId; + + /** + * 柜门编号 + */ + @Schema(description = "柜门编号") + private Integer cabinetNo; + + /** * 商品id */ diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/manager/HardDoorCabinetVo.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/manager/HardDoorCabinetVo.java new file mode 100644 index 00000000..e19d1503 --- /dev/null +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/manager/HardDoorCabinetVo.java @@ -0,0 +1,23 @@ +package com.bsd.pjcloud.hard.api.vo.manager; + +import com.bsd.pjcloud.hard.api.entity.manager.HardDoorCabinetEntity; +import com.bsd.pjcloud.hard.api.vo.base.BaseHardInterface; +import lombok.Data; + +import java.util.List; + +@Data +public class HardDoorCabinetVo extends HardDoorCabinetEntity implements BaseHardInterface { + + /** + * 设备相关 + */ + private Long hardId; + + private String hardName; + + private String hardType; + + private String deviceCode; + +} diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/spu/HardSpuRepertoryVo.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/spu/HardSpuRepertoryVo.java index 15826858..cfbe2fcb 100644 --- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/spu/HardSpuRepertoryVo.java +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/spu/HardSpuRepertoryVo.java @@ -2,11 +2,12 @@ package com.bsd.pjcloud.hard.api.vo.spu; import com.bsd.pjcloud.admin.api.vo.base.BaseUserInterface; import com.bsd.pjcloud.hard.api.entity.spu.HardSpuRepertoryEntity; +import com.bsd.pjcloud.hard.api.vo.base.BaseHardInterface; import com.bsd.pjcloud.wallet.api.vo.base.BaseMchInterface; import lombok.Data; @Data -public class HardSpuRepertoryVo extends HardSpuRepertoryEntity implements BaseMchInterface, BaseUserInterface { +public class HardSpuRepertoryVo extends HardSpuRepertoryEntity implements BaseMchInterface, BaseUserInterface, BaseHardInterface { /** * 商品相关 @@ -42,5 +43,15 @@ public class HardSpuRepertoryVo extends HardSpuRepertoryEntity implements BaseMc private String userAvatar; + /** + * 设备相关 + */ + private Long hardId; + + private String hardName; + + private String hardType; + + private String deviceCode; } diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/manager/HardDoorManagerController.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/manager/HardDoorManagerController.java index d82c03d2..ae93bea0 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/manager/HardDoorManagerController.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/manager/HardDoorManagerController.java @@ -9,9 +9,12 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.bsd.pjcloud.common.core.util.R; import com.bsd.pjcloud.common.data.datascope.DataScope; import com.bsd.pjcloud.common.log.annotation.SysLog; +import com.bsd.pjcloud.hard.api.dto.manager.HardDoorCabinetDto; import com.bsd.pjcloud.hard.api.dto.manager.HardDoorManagerDto; import com.bsd.pjcloud.hard.api.dto.spu.HardChangeVolume; +import com.bsd.pjcloud.hard.api.entity.manager.HardDoorCabinetEntity; import com.bsd.pjcloud.hard.api.entity.manager.HardDoorManagerEntity; +import com.bsd.pjcloud.hard.api.vo.manager.HardDoorCabinetVo; import com.bsd.pjcloud.hard.api.vo.manager.HardDoorManagerVo; import com.bsd.pjcloud.hard.service.HardDoorCabinetService; import com.bsd.pjcloud.hard.service.HardDoorManagerService; @@ -79,6 +82,12 @@ public class HardDoorManagerController { return R.ok(); } + @Operation(summary = "柜门下拉查询", description = "柜门下拉查询") + @GetMapping("/select-cabinet") + public R> selectCabinet(@ParameterObject Page page, @ParameterObject HardDoorCabinetDto dto) { + return R.ok(hardDoorManagerService.selectCabinet(page, dto)); + } + @Operation(summary = "分页查询", description = "分页查询") @GetMapping("/page") @PreAuthorize("@pms.hasPermission('hard_hardDoorManager_view')") 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 e0599948..fae63dd0 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 @@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 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.hard.api.dto.spu.HardPutawayDto; import com.bsd.pjcloud.hard.api.dto.spu.HardSpuDto; @@ -45,6 +46,7 @@ public class HardSpuController { @Operation(summary = "app上架", description = "上架") @PostMapping("/app/putaway") + @Idempotent(expireTime = 5, info = "正在上架中,请勿重复操作") public R appPutaway(@Valid @RequestBody HardPutawayDto dto) { hardSpuService.putaway(dto); return R.ok(); @@ -52,6 +54,7 @@ public class HardSpuController { @Operation(summary = "app下架", description = "下架") @PostMapping("/app/un-putaway") + @Idempotent(expireTime = 5, info = "正在下架中,请勿重复操作") public R appUnPutaway(@Valid @RequestBody HardPutawayDto dto) { hardSpuService.unPutaway(dto); return R.ok(); diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/spu/HardSpuRepertoryController.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/spu/HardSpuRepertoryController.java index e8d4b5ba..c8cd6846 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/spu/HardSpuRepertoryController.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/spu/HardSpuRepertoryController.java @@ -2,11 +2,13 @@ package com.bsd.pjcloud.hard.controller.spu; import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 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.service.PjcloudUser; import com.bsd.pjcloud.common.security.util.SecurityUtils; @@ -44,6 +46,7 @@ public class HardSpuRepertoryController { @Operation(summary = "app上架完成", description = "app上架完成") @PostMapping("/app/repertory-done") + @Idempotent(expireTime = 5, info = "正在操作中,请勿重复操作") public R appRepertoryDone(@Valid @RequestBody DeductionSpuRepertoryDto body) { PjcloudUser user = SecurityUtils.getUser(); return R.ok(hardSpuRepertoryService.appRepertoryDone(body, user.getId())); @@ -78,9 +81,13 @@ public class HardSpuRepertoryController { @SysLog("新增硬件商品库存更新记录") @PostMapping @PreAuthorize("@pms.hasPermission('hard_hardSpuRepertory_add')") - public R save(@Validated @RequestBody HardSpuRepertoryEntity hardSpuRepertory) { + @Idempotent(expireTime = 5, info = "正在上架中,请勿重复操作") + public R save(@Validated @RequestBody HardSpuRepertoryDto dto) { + if (ObjectUtil.isEmpty(dto.getCabinetId())) { + return R.failed("请选择所属柜门"); + } PjcloudUser user = SecurityUtils.getUser(); - return R.ok(hardSpuRepertoryService.create(hardSpuRepertory, user)); + return R.ok(hardSpuRepertoryService.create(dto, user)); } @Operation(summary = "修改硬件商品库存更新记录", description = "修改硬件商品库存更新记录") diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/mapper/manager/HardDoorCabinetMapper.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/mapper/manager/HardDoorCabinetMapper.java index 2ec2df75..1ff0f4db 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/mapper/manager/HardDoorCabinetMapper.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/mapper/manager/HardDoorCabinetMapper.java @@ -1,11 +1,17 @@ package com.bsd.pjcloud.hard.mapper.manager; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.bsd.pjcloud.common.data.datascope.DataScope; import com.bsd.pjcloud.common.data.datascope.PjcloudBaseMapper; +import com.bsd.pjcloud.hard.api.dto.manager.HardDoorCabinetDto; import com.bsd.pjcloud.hard.api.entity.manager.HardDoorCabinetEntity; +import com.bsd.pjcloud.hard.api.vo.manager.HardDoorCabinetVo; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; @Mapper public interface HardDoorCabinetMapper extends PjcloudBaseMapper { + Page scopePageJoin(Page page, @Param("dto") HardDoorCabinetDto dto, DataScope dataScope); } \ No newline at end of file diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardDoorCabinetService.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardDoorCabinetService.java index aea015e2..f4aabea8 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardDoorCabinetService.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardDoorCabinetService.java @@ -1,13 +1,19 @@ 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.manager.HardDoorCabinetDto; import com.bsd.pjcloud.hard.api.entity.manager.HardDoorCabinetEntity; +import com.bsd.pjcloud.hard.api.vo.manager.HardDoorCabinetVo; import com.bsd.pjcloud.thirdparty.vo.door.DoorStatusVo; import java.util.List; public interface HardDoorCabinetService extends IService { + Page scopePageJoin(Page page, HardDoorCabinetDto dto, DataScope dataScope); + void saveOrUpdate(Long hardDoorId, List list); List getListByHardDoorId(Long hardDoorId); diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardDoorManagerService.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardDoorManagerService.java index 7dcc203e..4f53d528 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardDoorManagerService.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardDoorManagerService.java @@ -3,15 +3,22 @@ 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.manager.HardDoorCabinetDto; import com.bsd.pjcloud.hard.api.dto.manager.HardDoorManagerDto; import com.bsd.pjcloud.hard.api.dto.spu.HardChangeVolume; import com.bsd.pjcloud.hard.api.entity.manager.HardDoorManagerEntity; +import com.bsd.pjcloud.hard.api.vo.manager.HardDoorCabinetVo; import com.bsd.pjcloud.hard.api.vo.manager.HardDoorManagerVo; public interface HardDoorManagerService extends IService { Page scopePageJoin(Page page, HardDoorManagerDto dto, DataScope dataScope); + /** + * 柜门下拉查询 + */ + Page selectCabinet(Page page, HardDoorCabinetDto dto); + /** * 根据硬件id查询详情 */ diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardSpuRepertoryService.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardSpuRepertoryService.java index 30502325..5e5e1886 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardSpuRepertoryService.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardSpuRepertoryService.java @@ -19,7 +19,7 @@ public interface HardSpuRepertoryService extends IService { /** * 扣减库存 */ - Boolean deductionSpuStock(List list); + 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/manager/HardDoorCabinetServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/manager/HardDoorCabinetServiceImpl.java index eb45e6ee..01974dd5 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/manager/HardDoorCabinetServiceImpl.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/manager/HardDoorCabinetServiceImpl.java @@ -4,12 +4,16 @@ import cn.hutool.core.codec.Base64; import cn.hutool.core.util.ObjectUtil; import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.bsd.pjcloud.admin.api.feign.RemoteFileService; import com.bsd.pjcloud.common.core.util.QRCodeImageGenerator; import com.bsd.pjcloud.common.core.util.R; +import com.bsd.pjcloud.common.data.datascope.DataScope; +import com.bsd.pjcloud.hard.api.dto.manager.HardDoorCabinetDto; import com.bsd.pjcloud.hard.api.entity.manager.HardDoorCabinetEntity; import com.bsd.pjcloud.hard.api.vo.manager.HardDoorCabinetCodeVo; +import com.bsd.pjcloud.hard.api.vo.manager.HardDoorCabinetVo; import com.bsd.pjcloud.hard.mapper.manager.HardDoorCabinetMapper; import com.bsd.pjcloud.hard.service.HardDoorCabinetService; import com.bsd.pjcloud.thirdparty.vo.door.DoorStatusVo; @@ -36,6 +40,11 @@ public class HardDoorCabinetServiceImpl extends ServiceImpl scopePageJoin(Page page, HardDoorCabinetDto dto, DataScope dataScope) { + return baseMapper.scopePageJoin(page, dto, dataScope); + } + @Override public void saveOrUpdate(Long hardDoorId, List list) { List cabinetList = baseMapper.selectList(new LambdaQueryWrapper() diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/manager/HardDoorManagerServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/manager/HardDoorManagerServiceImpl.java index b4df51f4..76e0b83d 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/manager/HardDoorManagerServiceImpl.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/manager/HardDoorManagerServiceImpl.java @@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.bsd.pjcloud.common.core.util.CollectionUtils; import com.bsd.pjcloud.common.data.datascope.DataScope; +import com.bsd.pjcloud.hard.api.dto.manager.HardDoorCabinetDto; import com.bsd.pjcloud.hard.api.dto.manager.HardDoorManagerDto; import com.bsd.pjcloud.hard.api.dto.manager.HardManagerDto; import com.bsd.pjcloud.hard.api.dto.spu.HardChangeVolume; @@ -14,6 +15,7 @@ import com.bsd.pjcloud.hard.api.entity.manager.HardDoorCabinetEntity; import com.bsd.pjcloud.hard.api.entity.manager.HardDoorManagerEntity; import com.bsd.pjcloud.hard.api.entity.manager.HardManagerEntity; import com.bsd.pjcloud.hard.api.utils.HardUtil; +import com.bsd.pjcloud.hard.api.vo.manager.HardDoorCabinetVo; import com.bsd.pjcloud.hard.api.vo.manager.HardDoorManagerVo; import com.bsd.pjcloud.hard.mapper.manager.HardDoorManagerMapper; import com.bsd.pjcloud.hard.mapper.manager.HardManagerMapper; @@ -55,6 +57,15 @@ public class HardDoorManagerServiceImpl extends ServiceImpl selectCabinet(Page page, HardDoorCabinetDto dto) { + DataScope dataScope = new DataScope(); + return hardDoorCabinetService.scopePageJoin(page, dto, dataScope); + } + /** * 根据硬件id查询详情 */ 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 815986eb..ad494033 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 @@ -38,6 +38,7 @@ import com.bsd.pjcloud.hard.api.entity.order.HardOrderEntity; import com.bsd.pjcloud.hard.api.entity.order.HardParentCarEntity; import com.bsd.pjcloud.hard.api.entity.spu.HardSpuEntity; import com.bsd.pjcloud.hard.api.utils.HardUtil; +import com.bsd.pjcloud.hard.api.vo.HardDoorFlowVo; 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; @@ -93,6 +94,8 @@ public class HardOrderServiceImpl extends ServiceImpl() + .eq(HardSpuJoinEntity::getHardDoorId, dto.getHardDoorId()) + .eq(HardSpuJoinEntity::getCabinetNo, dto.getCabinetNo()) + .eq(HardSpuJoinEntity::getSpuId, dto.getSpuId()) + ); + if (ObjectUtil.isEmpty(cabinetSpu)) { + throw new RuntimeException("货柜中没有这个商品"); + } Integer beforeCount = 0; if (ObjectUtil.isNotEmpty(spuDetail.getRepertoryCount())) { beforeCount = spuDetail.getRepertoryCount(); } - entity.setBeforeCount(beforeCount); - entity.setUserId(user.getId()); - entity.setBizType(HardSpuRepertoryTypeEnum.HANDLER.getType()); - baseMapper.insert(entity); - // 更新商品库存 + dto.setBeforeCount(beforeCount); + dto.setUserId(user.getId()); + dto.setBizType(HardSpuRepertoryTypeEnum.HANDLER.getType()); + baseMapper.insert(dto); + // 更新商品总库存 HardSpuEntity spu = new HardSpuEntity(); spu.setId(spuDetail.getId()); - spu.setRepertoryCount(entity.getCount() + beforeCount); + spu.setRepertoryCount(dto.getCount() + beforeCount); + spu.setVersion(spuDetail.getVersion()); hardSpuService.updateById(spu); - return entity.getId(); + // 更新柜门商品库存 + HardSpuJoinEntity cabinetSpuJoin = new HardSpuJoinEntity(); + cabinetSpuJoin.setId(cabinetSpu.getId()); + cabinetSpuJoin.setVersion(cabinetSpu.getVersion()); + cabinetSpuJoin.setRepertoryCount(dto.getCount() + cabinetSpu.getRepertoryCount()); + hardSpuJoinService.updateById(cabinetSpuJoin); + return dto.getId(); } /** @@ -169,9 +193,13 @@ public class HardSpuRepertoryServiceImpl extends ServiceImpl spuIds = list.stream().map(DeductionSpuRepertoryDto.Item::getHardSpuId).toList(); List spuList = hardSpuService.listByIds(spuIds); + // 查询货柜商品列表 + List spuJoinList = hardSpuJoinService.list(new LambdaQueryWrapper() + .in(HardSpuJoinEntity::getSpuId, spuIds) + .eq(HardSpuJoinEntity::getHardDoorId, hardDoorFlow.getHardDoorId()) + .eq(HardSpuJoinEntity::getCabinetNo, hardDoorFlow.getCabinetNo()) + ); // 更新上架记录 - List spuRepertoryList = new ArrayList<>(); - List spuUpdateList = new ArrayList<>(); for (DeductionSpuRepertoryDto.Item i : list) { spuList.stream().filter(v -> v.getId().equals(i.getHardSpuId())).findFirst().ifPresent(spu -> { HardSpuRepertoryEntity entity = new HardSpuRepertoryEntity(); @@ -179,24 +207,31 @@ public class HardSpuRepertoryServiceImpl extends ServiceImpl ObjectUtil.equals(v.getSpuId(), spu.getId())).findFirst().ifPresent(spuJoin -> { + HardSpuJoinEntity spuJoinEntity = new HardSpuJoinEntity(); + spuJoinEntity.setId(spuJoin.getId()); + spuJoinEntity.setVersion(spuJoin.getVersion()); + spuJoinEntity.setRepertoryCount(entity.getCount() + spuJoin.getRepertoryCount()); + hardSpuJoinService.updateById(spuJoinEntity); + }); }); } - // 添加上架记录 - baseMapper.insert(spuRepertoryList); - // 更新商品库存 - hardSpuService.updateBatchById(spuUpdateList); return false; } 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 e82b5761..2953bc7e 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 @@ -15,6 +15,7 @@ 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.dto.spu.HardSpuJoinDto; +import com.bsd.pjcloud.hard.api.entity.HardDoorFlowEntity; import com.bsd.pjcloud.hard.api.entity.spu.HardSpuEntity; import com.bsd.pjcloud.hard.api.entity.spu.HardSpuJoinEntity; import com.bsd.pjcloud.hard.api.vo.manager.HardDoorManagerVo; @@ -183,11 +184,8 @@ public class HardSpuServiceImpl extends ServiceImpl() - .eq(HardSpuJoinEntity::getHardDoorNumber, spuJoinDetail.getHardDoorNumber()) - .eq(HardSpuJoinEntity::getSpuId, spuDetail.getId()) - ); - if (doorCount > 0) throw new RuntimeException("该层已有相同商品"); + long doorCount = hardSpuJoinService.count(new LambdaUpdateWrapper().eq(HardSpuJoinEntity::getSpuId, spuDetail.getId())); + if (doorCount > 0) throw new RuntimeException("该货柜已有相同商品"); LambdaUpdateWrapper updateObj = new LambdaUpdateWrapper() .set(HardSpuJoinEntity::getSpuId, spuDetail.getId()) .eq(HardSpuJoinEntity::getId, dto.getId()); @@ -251,7 +249,11 @@ public class HardSpuServiceImpl extends ServiceImpl list) { + public Boolean deductionSpuStock(HardDoorFlowEntity hardDoorFlow, List list) { + if (ObjectUtil.isEmpty(hardDoorFlow)) { + log.error("|{}|扣减商品库存失败flow为空dto|{}|", TAG, JSONUtil.toJsonStr(list)); + return false; + } if (ObjectUtil.isEmpty(list)) { log.error("|{}|扣减商品库存失败list为空", TAG); return false; @@ -262,6 +264,12 @@ public class HardSpuServiceImpl extends ServiceImpl hardSpuJoinList = hardSpuJoinService.list(new LambdaQueryWrapper() + .in(HardSpuJoinEntity::getSpuId, hardSpuIdes) + .eq(HardSpuJoinEntity::getHardDoorId, hardDoorFlow.getHardDoorId()) + .eq(HardSpuJoinEntity::getCabinetNo, hardDoorFlow.getCabinetNo()) + ); for (HardSpuEntity i : hardSpuList) { list.stream().filter(j -> ObjectUtil.equals(i.getId(), j.getHardSpuId())).findFirst().ifPresent(hardSpu -> { if (ObjectUtil.isNotEmpty(hardSpu.getIncrCount())) { @@ -269,11 +277,22 @@ public class HardSpuServiceImpl extends ServiceImpl ObjectUtil.equals(v.getHardSpuId(), i.getSpuId())).findFirst().ifPresent(spu -> { + HardSpuJoinEntity spuJoinEntity = new HardSpuJoinEntity(); + spuJoinEntity.setId(i.getId()); + spuJoinEntity.setVersion(i.getVersion()); + spuJoinEntity.setRepertoryCount(i.getRepertoryCount() - spu.getIncrCount()); + hardSpuJoinService.updateById(spuJoinEntity); + }); + } return true; } diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/manager/HardDoorCabinetMapper.xml b/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/manager/HardDoorCabinetMapper.xml index 3f85f0c4..e5a3c1cc 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/manager/HardDoorCabinetMapper.xml +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/manager/HardDoorCabinetMapper.xml @@ -2,8 +2,7 @@ - - + @@ -18,5 +17,47 @@ - + + + + select a.id, + a.hard_door_id, + a.cabinet_no, + a.is_lock_online, + a.lock_status, + a.door_status, + a.sale_status, + a.qr_code, + a.create_by, + a.create_time, + a.update_by, + a.update_time, + a.del_flag, + a.tenant_id, + + + + a.del_flag = '0' + + and a.hard_door_id = #{dto.hardDoorId} + + + and a.cabinet_no like concat('%', #{dto.cabinetNo}, '%') + + + + \ No newline at end of file diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/spu/HardSpuRepertoryMapper.xml b/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/spu/HardSpuRepertoryMapper.xml index 2d8b8f92..1379000c 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/spu/HardSpuRepertoryMapper.xml +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/spu/HardSpuRepertoryMapper.xml @@ -5,6 +5,8 @@ + + @@ -19,6 +21,8 @@ select a.id, + a.hard_door_id, + a.cabinet_no, a.user_id, a.spu_id, a.before_count, @@ -55,10 +59,16 @@ s.name as spuName, s.spu_category_id, - c.name as spuCategoryName + c.name as spuCategoryName, + hardD.device_code, + m.id as hardId, + m.name as hardName, + m.type as hardType from hard_spu_repertory a left join hard_spu s on s.id = a.spu_id left join hard_spu_category c on c.id = s.spu_category_id + left join hard_door_manager hardD on hardD.id = a.hard_door_id + left join hard_manager m on m.id = hardD.hard_id