diff --git a/cash-api/account-server/src/main/java/com/czg/controller/admin/ShopTableController.java b/cash-api/account-server/src/main/java/com/czg/controller/admin/ShopTableController.java new file mode 100644 index 00000000..c095f030 --- /dev/null +++ b/cash-api/account-server/src/main/java/com/czg/controller/admin/ShopTableController.java @@ -0,0 +1,87 @@ +package com.czg.controller.admin; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.StrUtil; +import com.czg.account.dto.table.ShopTableAddDTO; +import com.czg.account.dto.table.ShopTableDTO; +import com.czg.account.entity.ShopTable; +import com.czg.account.service.ShopTableService; +import com.czg.annotation.SaAdminCheckPermission; +import com.czg.resp.CzgResult; +import com.czg.sa.StpKit; +import com.czg.utils.PageUtil; +import com.mybatisflex.core.paginate.Page; +import com.mybatisflex.core.query.QueryWrapper; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +/** + * 台桌管理 + * @author Administrator + */ +@RestController +@RequestMapping("/admin/shopTable") +public class ShopTableController { + @Resource + private ShopTableService shopTableService; + + + /** + * 获取台桌列表 + * 权限标识: shopTable:list + * @param areaId 区域id + * @param tableCode 桌码 + * @return 台桌列表 + */ + @SaAdminCheckPermission("shopTable:list") + @GetMapping + public CzgResult> list(Integer areaId, String tableCode) { + QueryWrapper queryWrapper = new QueryWrapper().eq(ShopTable::getShopId, StpKit.USER.getShopId()); + if (areaId != null) { + queryWrapper.eq(ShopTable::getAreaId, areaId); + } + + if (StrUtil.isNotBlank(tableCode)) { + queryWrapper.like(ShopTable::getTableCode, tableCode); + } + return CzgResult.success(shopTableService.page(PageUtil.buildPage(), queryWrapper)); + } + + /** + * 台桌信息修改 + * 权限标识: shopTable:edit + * @return 是否成功 + */ + @SaAdminCheckPermission("shopTable:edit") + @PutMapping + public CzgResult edit(@RequestBody @Validated ShopTableDTO shopTableDTO) { + ShopTable shopTable = BeanUtil.copyProperties(shopTableDTO, ShopTable.class); + return CzgResult.success(shopTableService.update(shopTable, new QueryWrapper().eq(ShopTable::getShopId, StpKit.USER.getShopId()).eq(ShopTable::getId, shopTableDTO.getId()))); + } + + /** + * 台桌信息删除 + * 权限标识: shopTable:del + * @return 是否成功 + */ + @SaAdminCheckPermission("shopTable:del") + @DeleteMapping + public CzgResult remove(@RequestBody @Validated ShopTableDTO shopTableDTO) { + return CzgResult.success(shopTableService.remove(new QueryWrapper().eq(ShopTable::getShopId, StpKit.USER.getShopId()).eq(ShopTable::getId, shopTableDTO.getId()))); + } + + /** + * 台桌信息增加 + * 权限标识: shopTable:add + * @return 是否成功 + */ + @SaAdminCheckPermission("shopTable:add") + @PostMapping + public CzgResult add(@RequestBody @Validated ShopTableAddDTO shopTableAddDTO) { + if (shopTableAddDTO.getStart() >= shopTableAddDTO.getEnd()){ + return CzgResult.failure("起始数不能大于结束数"); + } + return CzgResult.success(shopTableService.add(StpKit.USER.getShopId(), shopTableAddDTO)); + } +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/dto/ShopAreaDTO.java b/cash-common/cash-common-service/src/main/java/com/czg/account/dto/ShopAreaDTO.java new file mode 100644 index 00000000..e08d996b --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/dto/ShopAreaDTO.java @@ -0,0 +1,50 @@ + +package com.czg.account.dto; + +import java.io.Serializable; +import java.io.Serial; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 店铺区域 实体类。 + * + * @author zs + * @since 2025-02-18 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ShopAreaDTO implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * id + */ + private Integer id; + + /** + * 店铺Id + */ + private Integer shopId; + + /** + * 排序 + */ + private Integer sort; + + /** + * 区域名称 + */ + private String name; + + private Long createdAt; + + private Long updatedAt; + +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/dto/shopuser/ShopUserEditDTO.java b/cash-common/cash-common-service/src/main/java/com/czg/account/dto/shopuser/ShopUserEditDTO.java index 72287e1a..0a5d66e3 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/account/dto/shopuser/ShopUserEditDTO.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/dto/shopuser/ShopUserEditDTO.java @@ -25,4 +25,8 @@ public class ShopUserEditDTO { * 生日 */ private String birthDay; + /** + * 手机号 + */ + private String phone; } diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/dto/table/ShopTableAddDTO.java b/cash-common/cash-common-service/src/main/java/com/czg/account/dto/table/ShopTableAddDTO.java new file mode 100644 index 00000000..ee1f9f93 --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/dto/table/ShopTableAddDTO.java @@ -0,0 +1,47 @@ +package com.czg.account.dto.table; + +import jakarta.validation.constraints.Max; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + + +/** + * @author Administrator + */ +@Data +public class ShopTableAddDTO { + /** + * 台桌前缀 + */ + @NotEmpty(message = "台桌标识不为空") + private String sign; + /** + * 区域id + */ + private Integer areaId; + /** + * 起始数字 + */ + @Min(1) + @NotNull + private Integer start; + /** + * 结束数字 + */ + @Min(2) + @Max(1000) + @NotNull + private Integer end; + /** + * 客座数 + */ + @NotNull + @Min(message = "客位数最小为1", value = 1) + private Integer capacity; + /** + * 是否自动清台 + */ + private Integer autoClear = 1; +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/dto/ShopTableDTO.java b/cash-common/cash-common-service/src/main/java/com/czg/account/dto/table/ShopTableDTO.java similarity index 63% rename from cash-common/cash-common-service/src/main/java/com/czg/account/dto/ShopTableDTO.java rename to cash-common/cash-common-service/src/main/java/com/czg/account/dto/table/ShopTableDTO.java index 01714243..e79ae8a7 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/account/dto/ShopTableDTO.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/dto/table/ShopTableDTO.java @@ -1,11 +1,13 @@ -package com.czg.account.dto; +package com.czg.account.dto.table; import java.io.Serializable; import java.math.BigDecimal; import java.time.LocalDateTime; import com.alibaba.fastjson2.annotation.JSONField; import java.io.Serial; + +import jakarta.validation.constraints.NotNull; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -29,12 +31,11 @@ public class ShopTableDTO implements Serializable { /** * 自增id */ + @NotNull private Integer id; private String name; - private Integer shopId; - /** * 客座数,允许的客座数量 */ @@ -65,12 +66,6 @@ public class ShopTableDTO implements Serializable { */ private String status; - @JSONField(format = "yyyy-MM-dd HH:mm:ss") - private LocalDateTime createTime; - - @JSONField(format = "yyyy-MM-dd HH:mm:ss") - private LocalDateTime updateTime; - /** * 二维码 */ @@ -81,36 +76,5 @@ public class ShopTableDTO implements Serializable { */ private Integer autoClear; - /** - * 使用时间 - */ - @JSONField(format = "yyyy-MM-dd HH:mm:ss") - private LocalDateTime useTime; - - /** - * 结束时间 - */ - @JSONField(format = "yyyy-MM-dd HH:mm:ss") - private LocalDateTime endTime; - - /** - * 已点商品数量 - */ - private Integer productNum; - - /** - * 总金额 - */ - private BigDecimal totalAmount; - - /** - * 应付金额 - */ - private BigDecimal realAmount; - - /** - * 用餐人数 - */ - private Integer useNum; } diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/entity/ShopArea.java b/cash-common/cash-common-service/src/main/java/com/czg/account/entity/ShopArea.java new file mode 100644 index 00000000..e6478b2a --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/entity/ShopArea.java @@ -0,0 +1,56 @@ +package com.czg.account.entity; + +import com.mybatisflex.annotation.Id; +import com.mybatisflex.annotation.KeyType; +import com.mybatisflex.annotation.Table; +import java.io.Serializable; + +import java.io.Serial; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 店铺区域 实体类。 + * + * @author zs + * @since 2025-02-18 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Table("tb_shop_area") +public class ShopArea implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * id + */ + @Id(keyType = KeyType.Auto) + private Integer id; + + /** + * 店铺Id + */ + private Integer shopId; + + /** + * 排序 + */ + private Integer sort; + + /** + * 区域名称 + */ + private String name; + + private Long createdAt; + + private Long updatedAt; + +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/service/ShopAreaService.java b/cash-common/cash-common-service/src/main/java/com/czg/account/service/ShopAreaService.java new file mode 100644 index 00000000..c478d0ab --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/service/ShopAreaService.java @@ -0,0 +1,14 @@ +package com.czg.account.service; + +import com.mybatisflex.core.service.IService; +import com.czg.account.entity.ShopArea; + +/** + * 店铺区域 服务层。 + * + * @author zs + * @since 2025-02-18 + */ +public interface ShopAreaService extends IService { + +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/service/ShopTableService.java b/cash-common/cash-common-service/src/main/java/com/czg/account/service/ShopTableService.java index 017523f7..f18ff998 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/account/service/ShopTableService.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/service/ShopTableService.java @@ -1,5 +1,6 @@ package com.czg.account.service; +import com.czg.account.dto.table.ShopTableAddDTO; import com.mybatisflex.core.service.IService; import com.czg.account.entity.ShopTable; @@ -11,4 +12,5 @@ import com.czg.account.entity.ShopTable; */ public interface ShopTableService extends IService { + Boolean add(Long shopId, ShopTableAddDTO shopTableAddDTO); } diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/mapper/ShopAreaMapper.java b/cash-service/account-service/src/main/java/com/czg/service/account/mapper/ShopAreaMapper.java new file mode 100644 index 00000000..df267605 --- /dev/null +++ b/cash-service/account-service/src/main/java/com/czg/service/account/mapper/ShopAreaMapper.java @@ -0,0 +1,14 @@ +package com.czg.service.account.mapper; + +import com.mybatisflex.core.BaseMapper; +import com.czg.account.entity.ShopArea; + +/** + * 店铺区域 映射层。 + * + * @author zs + * @since 2025-02-18 + */ +public interface ShopAreaMapper extends BaseMapper { + +} diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopAreaServiceImpl.java b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopAreaServiceImpl.java new file mode 100644 index 00000000..8c63995f --- /dev/null +++ b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopAreaServiceImpl.java @@ -0,0 +1,18 @@ +package com.czg.service.account.service.impl; + +import com.mybatisflex.spring.service.impl.ServiceImpl; +import com.czg.account.entity.ShopArea; +import com.czg.account.service.ShopAreaService; +import com.czg.service.account.mapper.ShopAreaMapper; +import org.springframework.stereotype.Service; + +/** + * 店铺区域 服务层实现。 + * + * @author zs + * @since 2025-02-18 + */ +@Service +public class ShopAreaServiceImpl extends ServiceImpl implements ShopAreaService{ + +} diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopTableServiceImpl.java b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopTableServiceImpl.java index c5a73c43..1caf0447 100644 --- a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopTableServiceImpl.java +++ b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopTableServiceImpl.java @@ -1,11 +1,24 @@ package com.czg.service.account.service.impl; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.StrUtil; +import com.czg.account.dto.table.ShopTableAddDTO; +import com.czg.account.entity.ShopArea; +import com.czg.account.service.ShopAreaService; +import com.czg.enums.ShopTableStatusEnum; +import com.czg.exception.ApiNotPrintException; +import com.mybatisflex.core.query.QueryWrapper; import com.mybatisflex.spring.service.impl.ServiceImpl; import com.czg.account.entity.ShopTable; import com.czg.account.service.ShopTableService; import com.czg.service.account.mapper.ShopTableMapper; +import jakarta.annotation.Resource; import org.springframework.stereotype.Service; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + /** * 台桌配置 服务层实现。 * @@ -14,5 +27,40 @@ import org.springframework.stereotype.Service; */ @Service public class ShopTableServiceImpl extends ServiceImpl implements ShopTableService{ + @Resource + private ShopAreaService shopAreaService; + @Override + public Boolean add(Long shopId, ShopTableAddDTO shopTableAddDTO) { + ShopArea shopArea = shopAreaService.getOne(new QueryWrapper().eq(ShopArea::getShopId, shopId) + .eq(ShopArea::getId, shopTableAddDTO.getAreaId())); + if (shopArea == null) { + throw new ApiNotPrintException("台桌区域不存在"); + } + + List existisList = queryChain().eq(ShopTable::getShopId, shopId).like(ShopTable::getName, shopTableAddDTO.getSign()).list().stream().map(ShopTable::getName).toList(); + StringBuilder msg = new StringBuilder(); + ArrayList tableArrayList = new ArrayList<>(); + for (int i = shopTableAddDTO.getStart(); i <= shopTableAddDTO.getEnd(); i++) { + String name = shopTableAddDTO.getSign() + i; + if (!existisList.isEmpty() && existisList.contains(name)) { + msg.append(name).append(";"); + continue; + } + ShopTable shopTable = new ShopTable(); + shopTable.setShopId(shopId); + shopTable.setName(name); + shopTable.setMaxCapacity(shopTableAddDTO.getCapacity()); + shopTable.setAreaId(shopTableAddDTO.getAreaId()); + shopTable.setStatus(ShopTableStatusEnum.CLOSED.getValue()); + tableArrayList.add(shopTable); + } + + saveBatch(tableArrayList); + if (StrUtil.isNotBlank(msg.toString())) { + msg.append("台桌名已存在,未添加"); + throw new ApiNotPrintException(msg.toString()); + } + return true; + } } diff --git a/cash-service/account-service/src/main/resources/mapper/ShopAreaMapper.xml b/cash-service/account-service/src/main/resources/mapper/ShopAreaMapper.xml new file mode 100644 index 00000000..75abec6b --- /dev/null +++ b/cash-service/account-service/src/main/resources/mapper/ShopAreaMapper.xml @@ -0,0 +1,7 @@ + + + + +