From 2bce1acb693d014547299a1795eddfd0defba117 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=9D=BE?= <8605635+zhang3064194730@user.noreply.gitee.com> Date: Thu, 27 Feb 2025 13:58:04 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AD=98=E9=85=92=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/user/UShopUserController.java | 8 +- .../user/UserAuthorizationController.java | 2 +- .../admin/ShopStorageController.java | 85 +++++++++++ .../admin/ShopStorageGoodController.java | 23 ++- .../com/czg/account/dto/ShopStorageDTO.java | 92 ++++++++++++ .../czg/product/dto/ShopStorageRecordDTO.java | 46 ++++++ .../product/dto/storage/CountStorageDTO.java | 14 ++ .../dto/storage/ShopStorageAddDTO.java | 34 +++++ .../dto/storage/ShopStorageEditDTO.java | 25 ++++ .../dto/storage/ShopStorageGoodDTO.java | 11 +- .../com/czg/product/entity/ShopStorage.java | 97 +++++++++++++ .../entity/ShopStorageGood.java | 2 +- .../czg/product/entity/ShopStorageRecord.java | 50 +++++++ .../service/ShopStorageGoodService.java | 10 +- .../service/ShopStorageRecordService.java | 14 ++ .../product/service/ShopStorageService.java | 31 ++++ .../service/impl/ShopInfoServiceImpl.java | 2 + .../impl/ShopStorageGoodServiceImpl.java | 40 ------ .../mapper/ShopStorageGoodMapper.java | 4 +- .../product/mapper/ShopStorageMapper.java | 20 +++ .../mapper/ShopStorageRecordMapper.java | 14 ++ .../impl/ShopStorageGoodServiceImpl.java | 69 +++++++++ .../impl/ShopStorageRecordServiceImpl.java | 18 +++ .../service/impl/ShopStorageServiceImpl.java | 133 ++++++++++++++++++ .../mapper/ShopStorageGoodMapper.xml | 2 +- .../resources/mapper/ShopStorageMapper.xml | 17 +++ .../mapper/ShopStorageRecordMapper.xml | 7 + 27 files changed, 807 insertions(+), 63 deletions(-) create mode 100644 cash-api/product-server/src/main/java/com/czg/controller/admin/ShopStorageController.java rename cash-api/{account-server => product-server}/src/main/java/com/czg/controller/admin/ShopStorageGoodController.java (76%) create mode 100644 cash-common/cash-common-service/src/main/java/com/czg/account/dto/ShopStorageDTO.java create mode 100644 cash-common/cash-common-service/src/main/java/com/czg/product/dto/ShopStorageRecordDTO.java create mode 100644 cash-common/cash-common-service/src/main/java/com/czg/product/dto/storage/CountStorageDTO.java create mode 100644 cash-common/cash-common-service/src/main/java/com/czg/product/dto/storage/ShopStorageAddDTO.java create mode 100644 cash-common/cash-common-service/src/main/java/com/czg/product/dto/storage/ShopStorageEditDTO.java rename cash-common/cash-common-service/src/main/java/com/czg/{account => product}/dto/storage/ShopStorageGoodDTO.java (71%) create mode 100644 cash-common/cash-common-service/src/main/java/com/czg/product/entity/ShopStorage.java rename cash-common/cash-common-service/src/main/java/com/czg/{account => product}/entity/ShopStorageGood.java (97%) create mode 100644 cash-common/cash-common-service/src/main/java/com/czg/product/entity/ShopStorageRecord.java rename cash-common/cash-common-service/src/main/java/com/czg/{account => product}/service/ShopStorageGoodService.java (55%) create mode 100644 cash-common/cash-common-service/src/main/java/com/czg/product/service/ShopStorageRecordService.java create mode 100644 cash-common/cash-common-service/src/main/java/com/czg/product/service/ShopStorageService.java delete mode 100644 cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopStorageGoodServiceImpl.java rename cash-service/{account-service/src/main/java/com/czg/service/account => product-service/src/main/java/com/czg/service/product}/mapper/ShopStorageGoodMapper.java (69%) create mode 100644 cash-service/product-service/src/main/java/com/czg/service/product/mapper/ShopStorageMapper.java create mode 100644 cash-service/product-service/src/main/java/com/czg/service/product/mapper/ShopStorageRecordMapper.java create mode 100644 cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ShopStorageGoodServiceImpl.java create mode 100644 cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ShopStorageRecordServiceImpl.java create mode 100644 cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ShopStorageServiceImpl.java rename cash-service/{account-service => product-service}/src/main/resources/mapper/ShopStorageGoodMapper.xml (74%) create mode 100644 cash-service/product-service/src/main/resources/mapper/ShopStorageMapper.xml create mode 100644 cash-service/product-service/src/main/resources/mapper/ShopStorageRecordMapper.xml diff --git a/cash-api/account-server/src/main/java/com/czg/controller/user/UShopUserController.java b/cash-api/account-server/src/main/java/com/czg/controller/user/UShopUserController.java index 39ad3131..4ad64fbd 100644 --- a/cash-api/account-server/src/main/java/com/czg/controller/user/UShopUserController.java +++ b/cash-api/account-server/src/main/java/com/czg/controller/user/UShopUserController.java @@ -29,8 +29,8 @@ public class UShopUserController { * @return 店铺会员信息 */ @GetMapping - public CzgResult get() { - return CzgResult.success(shopUserService.getShopUserInfo(StpKit.USER.getShopId(), StpKit.USER.getLoginIdAsLong())); + public CzgResult get(Long shopId) { + return CzgResult.success(shopUserService.getShopUserInfo(shopId == null ? StpKit.USER.getShopId() : shopId, StpKit.USER.getLoginIdAsLong())); } /** @@ -49,8 +49,8 @@ public class UShopUserController { * @return 店铺会员信息列表 */ @GetMapping("/code") - public CzgResult code() { - return shopUserService.getCode(StpKit.USER.getLoginIdAsLong(), StpKit.USER.getShopId()); + public CzgResult code(Long shopId) { + return shopUserService.getCode(StpKit.USER.getLoginIdAsLong(), shopId == null ? StpKit.USER.getShopId() : shopId); } } diff --git a/cash-api/account-server/src/main/java/com/czg/controller/user/UserAuthorizationController.java b/cash-api/account-server/src/main/java/com/czg/controller/user/UserAuthorizationController.java index 3e548b41..1d2bb102 100644 --- a/cash-api/account-server/src/main/java/com/czg/controller/user/UserAuthorizationController.java +++ b/cash-api/account-server/src/main/java/com/czg/controller/user/UserAuthorizationController.java @@ -38,7 +38,7 @@ public class UserAuthorizationController { */ @PostMapping("/test") public CzgResult login() { -// StpKit.USER.login(1L, null, MyStpLogic.LoginType.USER, false); + StpKit.USER.login(1L, "2342", null, MyStpLogic.LoginType.USER, false); return CzgResult.success(StpKit.USER.getTokenValue()); } } diff --git a/cash-api/product-server/src/main/java/com/czg/controller/admin/ShopStorageController.java b/cash-api/product-server/src/main/java/com/czg/controller/admin/ShopStorageController.java new file mode 100644 index 00000000..85b6fd95 --- /dev/null +++ b/cash-api/product-server/src/main/java/com/czg/controller/admin/ShopStorageController.java @@ -0,0 +1,85 @@ +package com.czg.controller.admin; + +import com.czg.product.dto.storage.CountStorageDTO; +import com.czg.product.dto.storage.ShopStorageAddDTO; +import com.czg.product.dto.storage.ShopStorageEditDTO; +import com.czg.product.entity.ShopStorage; +import com.czg.product.entity.ShopStorageRecord; +import com.czg.annotation.SaAdminCheckPermission; +import com.czg.product.service.ShopStorageService; +import com.czg.resp.CzgResult; +import com.czg.sa.StpKit; +import com.mybatisflex.core.paginate.Page; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 存酒记录管理 + * @author Administrator + */ +@RestController +@RequestMapping("/admin/shopStorage") +public class ShopStorageController { + @Resource + private ShopStorageService shopStorageService; + + /** + * 存酒记录 + * @param key 酒名/用户昵称 + * @param phone 手机号 + * @param status 0:已取完;1:未取完;2:已过期 + * @return 分页数据 + */ + @SaAdminCheckPermission(value = "shopStorage:list", name = "获取存酒记录列表") + @GetMapping + public CzgResult> list(String key, String phone, Integer status) { + return CzgResult.success(shopStorageService.pageInfo(StpKit.USER.getShopId(), key, phone, status)); + } + + /** + * 存酒记录添加 + * @return 分页数据 + */ + @SaAdminCheckPermission(value = "shopStorage:add", name = "添加存酒") + @PostMapping + public CzgResult add(@RequestBody @Validated ShopStorageAddDTO shopStorageAddDTO) { + return CzgResult.success(shopStorageService.add(StpKit.USER.getShopId(), shopStorageAddDTO)); + } + + /** + * 存酒取酒 + * @return 分页数据 + */ + @SaAdminCheckPermission(value = "shopStorage:edit", name = "修改存酒数量") + @PutMapping + public CzgResult edit(@RequestBody @Validated ShopStorageEditDTO shopStorageEditDTO) { + if (shopStorageEditDTO.getNum() == 0) { + return CzgResult.failure("数量不为0"); + } + return CzgResult.success(shopStorageService.edit(StpKit.USER.getShopId(), shopStorageEditDTO)); + } + + /** + * 查询存取酒记录 + * @param id 存酒id + * @return 分页数据 + */ + @SaAdminCheckPermission(value = "shopStorage:record", name = "查询存取酒记录") + @GetMapping("/record") + public CzgResult> recordList(@RequestParam Integer id) { + return CzgResult.success(shopStorageService.getRecord(StpKit.USER.getShopId(), id)); + } + + /** + * 存酒统计 + * @return 统计信息 + */ + @SaAdminCheckPermission(value = "shopStorage:count", name = "存酒统计") + @GetMapping("/count") + public CzgResult> countRecord() { + return CzgResult.success(shopStorageService.countRecord(StpKit.USER.getShopId())); + } +} diff --git a/cash-api/account-server/src/main/java/com/czg/controller/admin/ShopStorageGoodController.java b/cash-api/product-server/src/main/java/com/czg/controller/admin/ShopStorageGoodController.java similarity index 76% rename from cash-api/account-server/src/main/java/com/czg/controller/admin/ShopStorageGoodController.java rename to cash-api/product-server/src/main/java/com/czg/controller/admin/ShopStorageGoodController.java index e142c9c5..6bf94c31 100644 --- a/cash-api/account-server/src/main/java/com/czg/controller/admin/ShopStorageGoodController.java +++ b/cash-api/product-server/src/main/java/com/czg/controller/admin/ShopStorageGoodController.java @@ -1,14 +1,14 @@ package com.czg.controller.admin; import cn.hutool.core.util.StrUtil; -import com.czg.account.dto.storage.ShopStorageGoodDTO; -import com.czg.account.entity.ShopStorageGood; -import com.czg.account.service.ShopStorageGoodService; +import com.czg.product.dto.storage.ShopStorageGoodDTO; +import com.czg.product.entity.ShopStorage; +import com.czg.product.entity.ShopStorageGood; +import com.czg.product.service.ShopStorageGoodService; import com.czg.annotation.SaAdminCheckPermission; import com.czg.resp.CzgResult; import com.czg.sa.StpKit; import com.czg.utils.PageUtil; -import com.czg.validator.group.DefaultGroup; import com.czg.validator.group.InsertGroup; import com.czg.validator.group.UpdateGroup; import com.mybatisflex.core.paginate.Page; @@ -39,6 +39,7 @@ public class ShopStorageGoodController { if (StrUtil.isNotBlank(name)) { queryWrapper.eq(ShopStorageGood::getName, name); } + queryWrapper.orderBy(ShopStorageGood::getId, false); return CzgResult.success(shopStorageGoodService.page(PageUtil.buildPage(), queryWrapper)); } @@ -64,15 +65,23 @@ public class ShopStorageGoodController { } /** - * 编辑存酒商品 + * 添加存酒商品 * @return 列表 */ @SaAdminCheckPermission(value = "storageGood:add", name = "存酒商品新增") - @PutMapping("/add") + @PostMapping public CzgResult add(@RequestBody @Validated({InsertGroup.class}) ShopStorageGoodDTO shopStorageGoodDTO) { return CzgResult.success(shopStorageGoodService.saveInfo(StpKit.USER.getShopId(), shopStorageGoodDTO)); } - + /** + * 删除存酒商品 + * @return 列表 + */ + @SaAdminCheckPermission(value = "storageGood:del", name = "存酒商品删除") + @DeleteMapping + public CzgResult del(@RequestBody @Validated({UpdateGroup.class}) ShopStorageGoodDTO shopStorageGoodDTO) { + return CzgResult.success(shopStorageGoodService.remove(new QueryWrapper().eq(ShopStorageGood::getShopId, StpKit.USER.getShopId()).eq(ShopStorageGood::getId, shopStorageGoodDTO.getId()))); + } } diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/dto/ShopStorageDTO.java b/cash-common/cash-common-service/src/main/java/com/czg/account/dto/ShopStorageDTO.java new file mode 100644 index 00000000..5d77ce3a --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/dto/ShopStorageDTO.java @@ -0,0 +1,92 @@ + +package com.czg.account.dto; + +import java.io.Serializable; +import java.time.LocalDateTime; +import com.alibaba.fastjson2.annotation.JSONField; +import java.io.Serial; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 用户存酒 实体类。 + * + * @author zs + * @since 2025-02-27 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ShopStorageDTO implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + private Integer id; + + /** + * 酒品名 + */ + private String name; + + /** + * 酒品图 + */ + private String imgUrl; + + /** + * 单位 + */ + private String unit; + + /** + * 数量 + */ + private Integer num; + + /** + * 0:已取完;1:未取完;2:已过期 + */ + private Integer status; + + /** + * 到期时间 + */ + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime expTime; + + /** + * 存酒时间 + */ + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime savTime; + + /** + * 用户Id + */ + private Integer userId; + + /** + * 用户头像 + */ + private String headImg; + + /** + * 用户昵称 + */ + private String nickName; + + /** + * 用户电话 + */ + private String telphone; + + /** + * 店铺id + */ + private Integer shopId; + +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/product/dto/ShopStorageRecordDTO.java b/cash-common/cash-common-service/src/main/java/com/czg/product/dto/ShopStorageRecordDTO.java new file mode 100644 index 00000000..dd4eee63 --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/product/dto/ShopStorageRecordDTO.java @@ -0,0 +1,46 @@ + +package com.czg.product.dto; + +import java.io.Serializable; +import java.time.LocalDateTime; +import com.alibaba.fastjson2.annotation.JSONField; +import java.io.Serial; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 存取酒记录表 实体类。 + * + * @author zs + * @since 2025-02-27 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ShopStorageRecordDTO implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + private Integer id; + + /** + * 存酒信息id + */ + private Integer storageId; + + /** + * 记录 + */ + private String content; + + /** + * 操作时间 + */ + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime time; + +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/product/dto/storage/CountStorageDTO.java b/cash-common/cash-common-service/src/main/java/com/czg/product/dto/storage/CountStorageDTO.java new file mode 100644 index 00000000..4917980e --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/product/dto/storage/CountStorageDTO.java @@ -0,0 +1,14 @@ +package com.czg.product.dto.storage; + +import lombok.Data; + +/** + * @author Administrator + */ +@Data +public class CountStorageDTO { + private String name; + private String imgUrl; + private Long savNum; + private Long expNum; +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/product/dto/storage/ShopStorageAddDTO.java b/cash-common/cash-common-service/src/main/java/com/czg/product/dto/storage/ShopStorageAddDTO.java new file mode 100644 index 00000000..f7a9a407 --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/product/dto/storage/ShopStorageAddDTO.java @@ -0,0 +1,34 @@ +package com.czg.product.dto.storage; + +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +/** + * + * @author Administrator + */ +@Data +public class ShopStorageAddDTO { + /** + * shopUser的userId不是主键id + */ + @NotNull(message = "用户id不为空") + private Long userId; + /** + * 酒品id + */ + @NotNull(message = "酒品id不为空") + private Long shopStorageGoodId; + /** + * 数量 + */ + @NotNull(message = "数量不为空") + @Min(value = 1, message = "数量不能小于1") + private Integer num; + + /** + * 多少天后过期,默认一天 + */ + private Integer expDay; +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/product/dto/storage/ShopStorageEditDTO.java b/cash-common/cash-common-service/src/main/java/com/czg/product/dto/storage/ShopStorageEditDTO.java new file mode 100644 index 00000000..c0322a4b --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/product/dto/storage/ShopStorageEditDTO.java @@ -0,0 +1,25 @@ +package com.czg.product.dto.storage; + +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +import javax.swing.*; + +/** + * + * @author Administrator + */ +@Data +public class ShopStorageEditDTO { + /** + * 存酒id + */ + @NotNull(message = "存酒id不为空") + private Integer id; + /** + * 正数为存酒反之为取酒 + */ + @NotNull(message = "数量不为空") + private Integer num; +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/dto/storage/ShopStorageGoodDTO.java b/cash-common/cash-common-service/src/main/java/com/czg/product/dto/storage/ShopStorageGoodDTO.java similarity index 71% rename from cash-common/cash-common-service/src/main/java/com/czg/account/dto/storage/ShopStorageGoodDTO.java rename to cash-common/cash-common-service/src/main/java/com/czg/product/dto/storage/ShopStorageGoodDTO.java index 3fc308af..7c3b437f 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/account/dto/storage/ShopStorageGoodDTO.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/product/dto/storage/ShopStorageGoodDTO.java @@ -1,11 +1,12 @@ -package com.czg.account.dto.storage; +package com.czg.product.dto.storage; import java.io.Serializable; import java.time.LocalDateTime; import com.alibaba.fastjson2.annotation.JSONField; import java.io.Serial; +import com.czg.validator.group.InsertGroup; import com.czg.validator.group.UpdateGroup; import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotNull; @@ -32,19 +33,19 @@ public class ShopStorageGoodDTO { /** * 酒品名 */ - @NotEmpty(message = "酒品名不为空") + @NotEmpty(message = "酒品名不为空", groups = {UpdateGroup.class, InsertGroup.class}) private String name; /** * 图片地址 */ - @NotEmpty(message = "酒品名不为空") + @NotEmpty(message = "酒品名不为空", groups = {UpdateGroup.class, InsertGroup.class}) private String imgUrl; /** * 单位 */ - @NotEmpty(message = "单位不为空") + @NotEmpty(message = "单位不为空", groups = {UpdateGroup.class, InsertGroup.class}) private String unit; /** @@ -57,4 +58,6 @@ public class ShopStorageGoodDTO { */ private Integer source; + private Long prodId; + } diff --git a/cash-common/cash-common-service/src/main/java/com/czg/product/entity/ShopStorage.java b/cash-common/cash-common-service/src/main/java/com/czg/product/entity/ShopStorage.java new file mode 100644 index 00000000..cfac19f2 --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/product/entity/ShopStorage.java @@ -0,0 +1,97 @@ +package com.czg.product.entity; + +import com.mybatisflex.annotation.Id; +import com.mybatisflex.annotation.KeyType; +import com.mybatisflex.annotation.Table; +import java.io.Serializable; +import java.time.LocalDateTime; + +import java.io.Serial; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +/** + * 用户存酒 实体类。 + * + * @author zs + * @since 2025-02-27 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Table("tb_shop_storage") +@Accessors(chain = true) +public class ShopStorage implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + @Id(keyType = KeyType.Auto) + private Long id; + + /** + * 酒品名 + */ + private String name; + + /** + * 酒品图 + */ + private String imgUrl; + + /** + * 单位 + */ + private String unit; + + /** + * 数量 + */ + private Integer num; + + /** + * 0:已取完;1:未取完;2:已过期 + */ + private Integer status; + + /** + * 到期时间 + */ + private LocalDateTime expTime; + + /** + * 存酒时间 + */ + private LocalDateTime savTime; + + /** + * 用户Id + */ + private Long userId; + + /** + * 用户头像 + */ + private String headImg; + + /** + * 用户昵称 + */ + private String nickName; + + /** + * 用户电话 + */ + private String phone; + + /** + * 店铺id + */ + private Long shopId; + +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/entity/ShopStorageGood.java b/cash-common/cash-common-service/src/main/java/com/czg/product/entity/ShopStorageGood.java similarity index 97% rename from cash-common/cash-common-service/src/main/java/com/czg/account/entity/ShopStorageGood.java rename to cash-common/cash-common-service/src/main/java/com/czg/product/entity/ShopStorageGood.java index 029e195a..f8ce496b 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/account/entity/ShopStorageGood.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/product/entity/ShopStorageGood.java @@ -1,4 +1,4 @@ -package com.czg.account.entity; +package com.czg.product.entity; import com.mybatisflex.annotation.Column; import com.mybatisflex.annotation.Id; diff --git a/cash-common/cash-common-service/src/main/java/com/czg/product/entity/ShopStorageRecord.java b/cash-common/cash-common-service/src/main/java/com/czg/product/entity/ShopStorageRecord.java new file mode 100644 index 00000000..85efd24a --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/product/entity/ShopStorageRecord.java @@ -0,0 +1,50 @@ +package com.czg.product.entity; + +import com.mybatisflex.annotation.Id; +import com.mybatisflex.annotation.KeyType; +import com.mybatisflex.annotation.Table; +import java.io.Serializable; +import java.time.LocalDateTime; + +import java.io.Serial; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 存取酒记录表 实体类。 + * + * @author zs + * @since 2025-02-27 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Table("tb_shop_storage_record") +public class ShopStorageRecord implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + @Id(keyType = KeyType.Auto) + private Long id; + + /** + * 存酒信息id + */ + private Long storageId; + + /** + * 记录 + */ + private String content; + + /** + * 操作时间 + */ + private LocalDateTime time; + +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/service/ShopStorageGoodService.java b/cash-common/cash-common-service/src/main/java/com/czg/product/service/ShopStorageGoodService.java similarity index 55% rename from cash-common/cash-common-service/src/main/java/com/czg/account/service/ShopStorageGoodService.java rename to cash-common/cash-common-service/src/main/java/com/czg/product/service/ShopStorageGoodService.java index 62e74af6..0f594a16 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/account/service/ShopStorageGoodService.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/product/service/ShopStorageGoodService.java @@ -1,8 +1,11 @@ -package com.czg.account.service; +package com.czg.product.service; -import com.czg.account.dto.storage.ShopStorageGoodDTO; +import com.czg.product.dto.storage.ShopStorageAddDTO; +import com.czg.product.dto.storage.ShopStorageGoodDTO; +import com.czg.product.entity.ShopStorage; +import com.mybatisflex.core.paginate.Page; import com.mybatisflex.core.service.IService; -import com.czg.account.entity.ShopStorageGood; +import com.czg.product.entity.ShopStorageGood; /** * 酒品表 服务层。 @@ -15,4 +18,5 @@ public interface ShopStorageGoodService extends IService { Boolean edit(Long shopId, ShopStorageGoodDTO shopStorageGoodDTO); Boolean saveInfo(Long shopId, ShopStorageGoodDTO shopStorageGoodDTO); + } diff --git a/cash-common/cash-common-service/src/main/java/com/czg/product/service/ShopStorageRecordService.java b/cash-common/cash-common-service/src/main/java/com/czg/product/service/ShopStorageRecordService.java new file mode 100644 index 00000000..75083ce8 --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/product/service/ShopStorageRecordService.java @@ -0,0 +1,14 @@ +package com.czg.product.service; + +import com.mybatisflex.core.service.IService; +import com.czg.product.entity.ShopStorageRecord; + +/** + * 存取酒记录表 服务层。 + * + * @author zs + * @since 2025-02-27 + */ +public interface ShopStorageRecordService extends IService { + +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/product/service/ShopStorageService.java b/cash-common/cash-common-service/src/main/java/com/czg/product/service/ShopStorageService.java new file mode 100644 index 00000000..8f313f64 --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/product/service/ShopStorageService.java @@ -0,0 +1,31 @@ +package com.czg.product.service; + +import com.czg.product.dto.storage.CountStorageDTO; +import com.czg.product.dto.storage.ShopStorageAddDTO; +import com.czg.product.dto.storage.ShopStorageEditDTO; +import com.czg.product.entity.ShopStorageRecord; +import com.mybatisflex.core.paginate.Page; +import com.mybatisflex.core.service.IService; +import com.czg.product.entity.ShopStorage; + +import java.util.List; + +/** + * 用户存酒 服务层。 + * + * @author zs + * @since 2025-02-27 + */ +public interface ShopStorageService extends IService { + + Page pageInfo(Long shopId, String key, String phone, Integer status); + + Boolean add(Long shopId, ShopStorageAddDTO shopStorageAddDTO); + + Boolean edit(Long shopId, ShopStorageEditDTO shopStorageEditDTO); + + List getRecord(Long shopId, Integer id); + + List countRecord(Long shopId); + +} diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopInfoServiceImpl.java b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopInfoServiceImpl.java index 93236e97..ed6d3258 100644 --- a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopInfoServiceImpl.java +++ b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopInfoServiceImpl.java @@ -130,6 +130,8 @@ public class ShopInfoServiceImpl extends ServiceImpl i if (!StpKit.USER.isAdmin() && !Objects.equals(StpKit.USER.getShopId(), shopInfo.getId())) { throw new ApiNotPrintException("店铺信息不存在"); } + + SysUser sysUser = sysUserService.getById(shopInfo.getId()); return shopInfo; } diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopStorageGoodServiceImpl.java b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopStorageGoodServiceImpl.java deleted file mode 100644 index 30c39357..00000000 --- a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopStorageGoodServiceImpl.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.czg.service.account.service.impl; - -import cn.hutool.core.bean.BeanUtil; -import com.czg.account.dto.storage.ShopStorageGoodDTO; -import com.czg.exception.ApiNotPrintException; -import com.mybatisflex.core.query.QueryWrapper; -import com.mybatisflex.spring.service.impl.ServiceImpl; -import com.czg.account.entity.ShopStorageGood; -import com.czg.account.service.ShopStorageGoodService; -import com.czg.service.account.mapper.ShopStorageGoodMapper; -import org.springframework.stereotype.Service; - -/** - * 酒品表 服务层实现。 - * - * @author zs - * @since 2025-02-26 - */ -@Service -public class ShopStorageGoodServiceImpl extends ServiceImpl implements ShopStorageGoodService{ - - @Override - public Boolean edit(Long shopId, ShopStorageGoodDTO shopStorageGoodDTO) { - ShopStorageGood storageGood = getOne(new QueryWrapper().eq(ShopStorageGood::getShopId, shopId).eq(ShopStorageGood::getId, shopStorageGoodDTO.getId())); - if (storageGood == null) { - throw new ApiNotPrintException("商品不存在"); - } - - BeanUtil.copyProperties(shopStorageGoodDTO, storageGood); - storageGood.setSource(null); - return updateById(storageGood); - } - - @Override - public Boolean saveInfo(Long shopId, ShopStorageGoodDTO shopStorageGoodDTO) { - ShopStorageGood shopStorageGood = BeanUtil.copyProperties(shopStorageGoodDTO, ShopStorageGood.class); - shopStorageGood.setShopId(shopId); - return save(shopStorageGood); - } -} diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/mapper/ShopStorageGoodMapper.java b/cash-service/product-service/src/main/java/com/czg/service/product/mapper/ShopStorageGoodMapper.java similarity index 69% rename from cash-service/account-service/src/main/java/com/czg/service/account/mapper/ShopStorageGoodMapper.java rename to cash-service/product-service/src/main/java/com/czg/service/product/mapper/ShopStorageGoodMapper.java index 868ad944..701cf5e1 100644 --- a/cash-service/account-service/src/main/java/com/czg/service/account/mapper/ShopStorageGoodMapper.java +++ b/cash-service/product-service/src/main/java/com/czg/service/product/mapper/ShopStorageGoodMapper.java @@ -1,7 +1,7 @@ -package com.czg.service.account.mapper; +package com.czg.service.product.mapper; import com.mybatisflex.core.BaseMapper; -import com.czg.account.entity.ShopStorageGood; +import com.czg.product.entity.ShopStorageGood; /** * 酒品表 映射层。 diff --git a/cash-service/product-service/src/main/java/com/czg/service/product/mapper/ShopStorageMapper.java b/cash-service/product-service/src/main/java/com/czg/service/product/mapper/ShopStorageMapper.java new file mode 100644 index 00000000..ded1d84e --- /dev/null +++ b/cash-service/product-service/src/main/java/com/czg/service/product/mapper/ShopStorageMapper.java @@ -0,0 +1,20 @@ +package com.czg.service.product.mapper; + +import com.czg.product.dto.storage.CountStorageDTO; +import com.mybatisflex.core.BaseMapper; +import com.czg.product.entity.ShopStorage; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 用户存酒 映射层。 + * + * @author zs + * @since 2025-02-27 + */ +public interface ShopStorageMapper extends BaseMapper { + + + List countRecord(@Param("shopId") Long shopId); +} diff --git a/cash-service/product-service/src/main/java/com/czg/service/product/mapper/ShopStorageRecordMapper.java b/cash-service/product-service/src/main/java/com/czg/service/product/mapper/ShopStorageRecordMapper.java new file mode 100644 index 00000000..25608e4c --- /dev/null +++ b/cash-service/product-service/src/main/java/com/czg/service/product/mapper/ShopStorageRecordMapper.java @@ -0,0 +1,14 @@ +package com.czg.service.product.mapper; + +import com.mybatisflex.core.BaseMapper; +import com.czg.product.entity.ShopStorageRecord; + +/** + * 存取酒记录表 映射层。 + * + * @author zs + * @since 2025-02-27 + */ +public interface ShopStorageRecordMapper extends BaseMapper { + +} diff --git a/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ShopStorageGoodServiceImpl.java b/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ShopStorageGoodServiceImpl.java new file mode 100644 index 00000000..71756e94 --- /dev/null +++ b/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ShopStorageGoodServiceImpl.java @@ -0,0 +1,69 @@ +package com.czg.service.product.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.StrUtil; +import com.czg.product.dto.storage.ShopStorageGoodDTO; +import com.czg.product.entity.Product; +import com.czg.product.entity.ShopProdUnit; +import com.czg.product.entity.ShopStorage; +import com.czg.exception.ApiNotPrintException; +import com.czg.product.service.ProductService; +import com.czg.product.service.ShopProdUnitService; +import com.czg.sa.StpKit; +import com.czg.service.product.mapper.ShopStorageGoodMapper; +import com.czg.utils.PageUtil; +import com.mybatisflex.core.paginate.Page; +import com.mybatisflex.core.query.QueryWrapper; +import com.mybatisflex.spring.service.impl.ServiceImpl; +import com.czg.product.entity.ShopStorageGood; +import com.czg.product.service.ShopStorageGoodService; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; + +import static com.mybatisflex.core.query.QueryMethods.column; + +/** + * 酒品表 服务层实现。 + * + * @author zs + * @since 2025-02-26 + */ +@Service +public class ShopStorageGoodServiceImpl extends ServiceImpl implements ShopStorageGoodService{ + @Resource + private ProductService productService; + @Resource + private ShopProdUnitService shopProdUnitService; + + @Override + public Boolean edit(Long shopId, ShopStorageGoodDTO shopStorageGoodDTO) { + ShopStorageGood storageGood = getOne(new QueryWrapper().eq(ShopStorageGood::getShopId, shopId).eq(ShopStorageGood::getId, shopStorageGoodDTO.getId())); + if (storageGood == null) { + throw new ApiNotPrintException("商品不存在"); + } + + BeanUtil.copyProperties(shopStorageGoodDTO, storageGood); + storageGood.setSource(null); + return updateById(storageGood); + } + + @Override + public Boolean saveInfo(Long shopId, ShopStorageGoodDTO shopStorageGoodDTO) { + ShopStorageGood shopStorageGood = BeanUtil.copyProperties(shopStorageGoodDTO, ShopStorageGood.class); + if (shopStorageGoodDTO.getSource() == 1) { + Product product = productService.getOne(new QueryWrapper().eq(Product::getShopId, shopId).eq(Product::getId, shopStorageGoodDTO.getId())); + if (product == null) { + throw new ApiNotPrintException("商品不存在"); + } + + shopStorageGood.setName(product.getName()); + shopStorageGood.setImgUrl(product.getCoverImg()); + ShopProdUnit unit = shopProdUnitService.getOne(new QueryWrapper().eq(ShopProdUnit::getShopId, shopId).eq(ShopProdUnit::getId, product.getId())); + shopStorageGood.setUnit(unit == null ? "" : unit.getName()); + } + shopStorageGood.setShopId(shopId); + return save(shopStorageGood); + } + + +} diff --git a/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ShopStorageRecordServiceImpl.java b/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ShopStorageRecordServiceImpl.java new file mode 100644 index 00000000..4d63dbe0 --- /dev/null +++ b/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ShopStorageRecordServiceImpl.java @@ -0,0 +1,18 @@ +package com.czg.service.product.service.impl; + +import com.mybatisflex.spring.service.impl.ServiceImpl; +import com.czg.product.entity.ShopStorageRecord; +import com.czg.product.service.ShopStorageRecordService; +import com.czg.service.product.mapper.ShopStorageRecordMapper; +import org.springframework.stereotype.Service; + +/** + * 存取酒记录表 服务层实现。 + * + * @author zs + * @since 2025-02-27 + */ +@Service +public class ShopStorageRecordServiceImpl extends ServiceImpl implements ShopStorageRecordService{ + +} diff --git a/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ShopStorageServiceImpl.java b/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ShopStorageServiceImpl.java new file mode 100644 index 00000000..43c9e8eb --- /dev/null +++ b/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ShopStorageServiceImpl.java @@ -0,0 +1,133 @@ +package com.czg.service.product.service.impl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.StrUtil; +import com.czg.account.entity.ShopUser; +import com.czg.account.service.ShopUserService; +import com.czg.exception.ApiNotPrintException; +import com.czg.product.dto.storage.CountStorageDTO; +import com.czg.product.dto.storage.ShopStorageAddDTO; +import com.czg.product.dto.storage.ShopStorageEditDTO; +import com.czg.product.entity.ShopStorageGood; +import com.czg.product.entity.ShopStorageRecord; +import com.czg.product.service.ShopStorageGoodService; +import com.czg.product.service.ShopStorageRecordService; +import com.czg.service.product.mapper.ShopStorageMapper; +import com.czg.utils.PageUtil; +import com.mybatisflex.core.paginate.Page; +import com.mybatisflex.core.query.QueryWrapper; +import com.mybatisflex.spring.service.impl.ServiceImpl; +import com.czg.product.entity.ShopStorage; +import com.czg.product.service.ShopStorageService; +import jakarta.annotation.Resource; +import org.apache.dubbo.config.annotation.DubboReference; +import org.springframework.stereotype.Service; + +import java.util.List; + +import static com.mybatisflex.core.query.QueryMethods.column; + +/** + * 用户存酒 服务层实现。 + * + * @author zs + * @since 2025-02-27 + */ +@Service +public class ShopStorageServiceImpl extends ServiceImpl implements ShopStorageService{ + @DubboReference + private ShopUserService shopUserService; + + @Resource + private ShopStorageGoodService shopStorageGoodService; + @Resource + private ShopStorageRecordService storageRecordService; + + @Override + public Page pageInfo(Long shopId, String key, String phone, Integer status) { + QueryWrapper queryWrapper = new QueryWrapper().eq(ShopStorage::getShopId, shopId).eq(ShopStorage::getStatus, status); + if (StrUtil.isNotBlank(key)) { + queryWrapper.and(column(ShopStorage::getName).like(key).or(column(ShopStorage::getNickName).like(key))); + } + + if (StrUtil.isNotBlank(phone)) { + queryWrapper.eq(ShopStorage::getPhone, phone); + } + queryWrapper.orderBy(ShopStorage::getId, false); + return page(PageUtil.buildPage(), queryWrapper); + } + + @Override + public Boolean add(Long shopId, ShopStorageAddDTO shopStorageAddDTO) { + ShopUser shopUser = shopUserService.getOne(new QueryWrapper().eq(ShopUser::getUserId, shopStorageAddDTO.getUserId()).eq(ShopUser::getShopId, shopId)); + if (shopUser == null) { + throw new ApiNotPrintException("店铺用户不存在"); + } + + ShopStorageGood shopStorageGood = shopStorageGoodService.getOne(new QueryWrapper().eq(ShopStorageGood::getShopId, shopId).eq(ShopStorageGood::getId, shopStorageAddDTO.getShopStorageGoodId())); + if (shopStorageGood == null) { + throw new ApiNotPrintException("存酒商品不存在"); + } + + ShopStorage shopStorage = new ShopStorage().setName(shopStorageGood.getName()) + .setImgUrl(shopStorageGood.getImgUrl()) + .setUnit(shopStorageGood.getUnit()) + .setNum(shopStorageAddDTO.getNum()) + .setSavTime(DateUtil.date().toLocalDateTime()) + .setExpTime(DateUtil.offsetDay(DateUtil.date(), shopStorageAddDTO.getExpDay()).toLocalDateTime()) + .setShopId(shopId) + .setUserId(shopStorageAddDTO.getUserId()) + .setHeadImg(shopUser.getHeadImg()) + .setNickName(shopUser.getNickName()) + .setPhone(shopUser.getPhone()); + boolean save = save(shopStorage); + + if (save) { + ShopStorageRecord record = new ShopStorageRecord(); + record.setStorageId(shopStorage.getId()); + record.setTime(DateUtil.date().toLocalDateTime()); + record.setContent("存入"+ shopStorage.getNum() + shopStorage.getUnit() + shopStorage.getName()); + return storageRecordService.save(record); + } + throw new ApiNotPrintException("保存失败"); + } + + @Override + public Boolean edit(Long shopId, ShopStorageEditDTO shopStorageEditDTO) { + ShopStorage shopStorage = getOne(new QueryWrapper().eq(ShopStorage::getShopId, shopId).eq(ShopStorage::getId, shopStorageEditDTO.getId())); + if (shopStorage == null) { + throw new ApiNotPrintException("存酒记录不存在"); + } + + if (shopStorageEditDTO.getNum() < 0 && shopStorage.getNum() + shopStorageEditDTO.getNum() < 0) { + throw new ApiNotPrintException("可取酒数量不足"); + } + + shopStorage.setNum(shopStorage.getNum() + shopStorageEditDTO.getNum()); + boolean b = updateById(shopStorage); + + if (b) { + ShopStorageRecord record = new ShopStorageRecord(); + record.setStorageId(shopStorage.getId()); + record.setTime(DateUtil.date().toLocalDateTime()); + record.setContent(((shopStorageEditDTO.getNum() > 0) ? "存入" : "取出") + Math.abs(shopStorageEditDTO.getNum()) + shopStorage.getUnit() + shopStorage.getName()); + return storageRecordService.save(record); + } + + return false; + } + + @Override + public List getRecord(Long shopId, Integer id) { + ShopStorage shopStorage = getOne(new QueryWrapper().eq(ShopStorage::getShopId, shopId).eq(ShopStorage::getId, id)); + if (shopStorage == null) { + throw new ApiNotPrintException("存酒记录不存在"); + } + return storageRecordService.list(new QueryWrapper().eq(ShopStorageRecord::getStorageId, id)); + } + + @Override + public List countRecord(Long shopId) { + return mapper.countRecord(shopId); + } +} diff --git a/cash-service/account-service/src/main/resources/mapper/ShopStorageGoodMapper.xml b/cash-service/product-service/src/main/resources/mapper/ShopStorageGoodMapper.xml similarity index 74% rename from cash-service/account-service/src/main/resources/mapper/ShopStorageGoodMapper.xml rename to cash-service/product-service/src/main/resources/mapper/ShopStorageGoodMapper.xml index 9ef64d9d..a0463837 100644 --- a/cash-service/account-service/src/main/resources/mapper/ShopStorageGoodMapper.xml +++ b/cash-service/product-service/src/main/resources/mapper/ShopStorageGoodMapper.xml @@ -2,6 +2,6 @@ - + diff --git a/cash-service/product-service/src/main/resources/mapper/ShopStorageMapper.xml b/cash-service/product-service/src/main/resources/mapper/ShopStorageMapper.xml new file mode 100644 index 00000000..cb156800 --- /dev/null +++ b/cash-service/product-service/src/main/resources/mapper/ShopStorageMapper.xml @@ -0,0 +1,17 @@ + + + + + + diff --git a/cash-service/product-service/src/main/resources/mapper/ShopStorageRecordMapper.xml b/cash-service/product-service/src/main/resources/mapper/ShopStorageRecordMapper.xml new file mode 100644 index 00000000..2b69023f --- /dev/null +++ b/cash-service/product-service/src/main/resources/mapper/ShopStorageRecordMapper.xml @@ -0,0 +1,7 @@ + + + + +