From 2960aa82b407d969025c314ea173aa26f26f2dbd 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, 20 Feb 2025 15:32:27 +0800 Subject: [PATCH] =?UTF-8?q?=E6=89=93=E5=8D=B0=E6=9C=BA=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/PrintMachineController.java | 93 +++++++++++++ .../czg/account/dto/print/PrinterAddDTO.java | 94 ++++++++++++++ .../czg/account/dto/print/PrinterDelDTO.java | 13 ++ .../czg/account/dto/print/PrinterEditDTO.java | 89 +++++++++++++ .../com/czg/account/entity/PrintMachine.java | 122 ++++++++++++++++++ .../account/service/PrintMachineService.java | 21 +++ .../src/main/java/com/czg/LoadingRole.java | 2 +- .../account/mapper/PrintMachineMapper.java | 14 ++ .../service/impl/PrintMachineServiceImpl.java | 57 ++++++++ .../resources/mapper/PrintMachineMapper.xml | 7 + .../src/main/java/com/czg/Main.java | 2 +- 11 files changed, 512 insertions(+), 2 deletions(-) create mode 100644 cash-api/account-server/src/main/java/com/czg/controller/admin/PrintMachineController.java create mode 100644 cash-common/cash-common-service/src/main/java/com/czg/account/dto/print/PrinterAddDTO.java create mode 100644 cash-common/cash-common-service/src/main/java/com/czg/account/dto/print/PrinterDelDTO.java create mode 100644 cash-common/cash-common-service/src/main/java/com/czg/account/dto/print/PrinterEditDTO.java create mode 100644 cash-common/cash-common-service/src/main/java/com/czg/account/entity/PrintMachine.java create mode 100644 cash-common/cash-common-service/src/main/java/com/czg/account/service/PrintMachineService.java create mode 100644 cash-service/account-service/src/main/java/com/czg/service/account/mapper/PrintMachineMapper.java create mode 100644 cash-service/account-service/src/main/java/com/czg/service/account/service/impl/PrintMachineServiceImpl.java create mode 100644 cash-service/account-service/src/main/resources/mapper/PrintMachineMapper.xml diff --git a/cash-api/account-server/src/main/java/com/czg/controller/admin/PrintMachineController.java b/cash-api/account-server/src/main/java/com/czg/controller/admin/PrintMachineController.java new file mode 100644 index 000000000..40c5aeb26 --- /dev/null +++ b/cash-api/account-server/src/main/java/com/czg/controller/admin/PrintMachineController.java @@ -0,0 +1,93 @@ +package com.czg.controller.admin; + +import cn.hutool.core.util.StrUtil; +import com.czg.account.dto.print.PrinterAddDTO; +import com.czg.account.dto.print.PrinterDelDTO; +import com.czg.account.dto.print.PrinterEditDTO; +import com.czg.account.entity.PrintMachine; +import com.czg.account.service.PrintMachineService; +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/printer") +public class PrintMachineController { + @Resource + private PrintMachineService printMachineService; + + + /** + * 打印机列表 + * @param name 名称 + * @param connectionType 类型 USB 网络 蓝牙 + * @return 打印机列表 + */ + @SaAdminCheckPermission(value = "printer:list", name = "打印机列表获取") + @GetMapping + public CzgResult> list(String name, String connectionType) { + QueryWrapper queryWrapper = new QueryWrapper().eq(PrintMachine::getShopId, StpKit.USER.getShopId()); + if (StrUtil.isNotBlank(name)) { + queryWrapper.like(PrintMachine::getName, name); + } + + if (StrUtil.isNotBlank(connectionType)) { + queryWrapper.eq(PrintMachine::getConnectionType, connectionType); + } + queryWrapper.orderBy(PrintMachine::getSort, true).orderBy(PrintMachine::getId, false); + return CzgResult.success(printMachineService.page(PageUtil.buildPage(), queryWrapper)); + } + + /** + * 打印机详情 + * @param id 打印机id + * @return 是否成功 + */ + @SaAdminCheckPermission(value = "printer:detail", name = "打印机详情获取") + @GetMapping("/detail") + public CzgResult detail(@RequestParam Integer id) { + return CzgResult.success(printMachineService.getOne(new QueryWrapper().eq(PrintMachine::getId, id).eq(PrintMachine::getShopId, StpKit.USER.getShopId()))); + } + + + /** + * 打印机新增 + * @return 打印机列表 + */ + @SaAdminCheckPermission(value = "printer:add", name = "打印机新增") + @PostMapping + public CzgResult list(@RequestBody @Validated PrinterAddDTO printerAddDTO) { + return CzgResult.success(printMachineService.add(StpKit.USER.getShopId(), printerAddDTO)); + } + + /** + * 打印机修改 + * @return 打印机列表 + */ + @SaAdminCheckPermission(value = "printer:edit", name = "打印机编辑") + @PutMapping + public CzgResult edit(@RequestBody @Validated PrinterEditDTO printerEditDTO) { + return CzgResult.success(printMachineService.edit(StpKit.USER.getShopId(), printerEditDTO)); + } + + /** + * 打印机删除 + * @return 打印机列表 + */ + @SaAdminCheckPermission(value = "printer:del", name = "打印机删除") + @DeleteMapping + public CzgResult edit(@RequestBody @Validated PrinterDelDTO printerDelDTO) { + return CzgResult.success(printMachineService.remove(new QueryWrapper().eq(PrintMachine::getShopId, StpKit.USER.getShopId()).eq(PrintMachine::getId, printerDelDTO.getId()))); + } + +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/dto/print/PrinterAddDTO.java b/cash-common/cash-common-service/src/main/java/com/czg/account/dto/print/PrinterAddDTO.java new file mode 100644 index 000000000..af5cc2bb3 --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/dto/print/PrinterAddDTO.java @@ -0,0 +1,94 @@ +package com.czg.account.dto.print; + +import com.alibaba.fastjson2.annotation.JSONField; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotEmpty; +import lombok.Data; + +import java.io.Serial; +import java.time.LocalDateTime; + +/** + * @author Administrator + */ +@Data +public class PrinterAddDTO { + /** + * 设备名称 + */ + @NotBlank(message = "设备名称不为空") + private String name; + + /** + * 现在打印机支持USB 和 网络、蓝牙 + */ + @NotBlank + private String connectionType; + + /** + * ip地址 + */ + private String address; + + /** + * 端口 + */ + private String port; + + /** + * 打印类型(分类)label标签cash小票kitchen出品 + */ + private String subType; + + + /** + * 打印机品牌 + */ + @NotBlank(message = "打印机品牌不为空") + private String contentType; + + + /** + * 打印分类Id + */ + private String categoryIds; + + /** + * 分类 + */ + private String categoryList; + + /** + * 排序 + */ + private Integer sort; + + /** + * 小票尺寸 58mm 80mm + */ + private String receiptSize; + + /** + * 分类打印 0-所有 1-部分分类 2-部分商品 + */ + @NotBlank(message = "打印分类不为空") + private String classifyPrint; + + /** + * 打印数量 c1m1^2=顾客+商家[2张] m1^1=商家[1张] c1^1顾客[1张] c2m1^3顾客2+商家1[3张] + */ + @NotBlank(message = "打印数量不为空") + private String printQty; + + /** + * 打印方式 all-全部打印 normal-仅打印结账单「前台」one-仅打印制作单「厨房」 + */ + @NotBlank(message = "打印方式不为空") + private String printMethod; + + /** + * 打印类型,JSON数组 refund-确认退款单 handover-交班单 queue-排队取号 + */ + @NotBlank(message = "打印类型不为空") + private String printType; +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/dto/print/PrinterDelDTO.java b/cash-common/cash-common-service/src/main/java/com/czg/account/dto/print/PrinterDelDTO.java new file mode 100644 index 000000000..71e17fcd9 --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/dto/print/PrinterDelDTO.java @@ -0,0 +1,13 @@ +package com.czg.account.dto.print; + +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +/** + * @author Administrator + */ +@Data +public class PrinterDelDTO { + @NotNull(message = "打印机id不为空") + private Long id; +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/dto/print/PrinterEditDTO.java b/cash-common/cash-common-service/src/main/java/com/czg/account/dto/print/PrinterEditDTO.java new file mode 100644 index 000000000..ae7510bac --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/dto/print/PrinterEditDTO.java @@ -0,0 +1,89 @@ +package com.czg.account.dto.print; + +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +/** + * @author Administrator + */ +@Data +public class PrinterEditDTO { + @NotNull(message = "打印机id不为空") + private Long id; + /** + * 设备名称 + */ + private String name; + + /** + * 现在打印机支持USB 和 网络、蓝牙 + */ + private String connectionType; + + /** + * ip地址 + */ + private String address; + + /** + * 端口 + */ + private String port; + + /** + * 打印类型(分类)label标签cash小票kitchen出品 + */ + private String subType; + + + /** + * 打印机品牌 + */ + private String contentType; + + + /** + * 打印分类Id + */ + private String categoryIds; + + /** + * 分类 + */ + private String categoryList; + + /** + * 排序 + */ + private Integer sort; + + /** + * 小票尺寸 58mm 80mm + */ + private String receiptSize; + + /** + * 分类打印 0-所有 1-部分分类 2-部分商品 + */ + private String classifyPrint; + + /** + * 打印数量 c1m1^2=顾客+商家[2张] m1^1=商家[1张] c1^1顾客[1张] c2m1^3顾客2+商家1[3张] + */ + private String printQty; + + /** + * 打印方式 all-全部打印 normal-仅打印结账单「前台」one-仅打印制作单「厨房」 + */ + private String printMethod; + + /** + * 打印类型,JSON数组 refund-确认退款单 handover-交班单 queue-排队取号 + */ + private String printType; + + /** + * 打印机状态 online在线 + */ + private String status; +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/entity/PrintMachine.java b/cash-common/cash-common-service/src/main/java/com/czg/account/entity/PrintMachine.java new file mode 100644 index 000000000..f00253c8b --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/entity/PrintMachine.java @@ -0,0 +1,122 @@ +package com.czg.account.entity; + +import com.mybatisflex.annotation.Column; +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-20 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Table("tb_print_machine") +public class PrintMachine implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + @Id(keyType = KeyType.Auto) + private Integer id; + + /** + * 设备名称 + */ + private String name; + + /** + * 现在打印机支持USB 和 网络、蓝牙 + */ + private String connectionType; + + /** + * ip地址 + */ + private String address; + + /** + * 端口 + */ + private String port; + + /** + * 打印类型(分类)label标签cash小票kitchen出品 + */ + private String subType; + + /** + * 状态 online + */ + private Integer status; + + /** + * 店铺Id + */ + private String shopId; + + /** + * 分类Id + */ + private String categoryIds; + + /** + * 现在打印机支持USB 和 网络两种 + */ + private String contentType; + + @Column(onInsertValue = "now()") + private LocalDateTime createTime; + + @Column(onInsertValue = "now()", onUpdateValue = "now()") + private LocalDateTime updateTime; + + /** + * 分类 + */ + private String categoryList; + + /** + * 排序 + */ + private Integer sort; + + /** + * 小票尺寸 58mm 80mm + */ + private String receiptSize; + + /** + * 分类打印 0-所有 1-部分分类 2-部分商品 + */ + private String classifyPrint; + + /** + * 打印数量 c1m1^2=顾客+商家[2张] m1^1=商家[1张] c1^1顾客[1张] c2m1^3顾客2+商家1[3张] + */ + private String printQty; + + /** + * 打印方式 all-全部打印 normal-仅打印结账单「前台」one-仅打印制作单「厨房」 + */ + private String printMethod; + + /** + * 打印类型,JSON数组 refund-确认退款单 handover-交班单 queue-排队取号 + */ + private String printType; + +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/service/PrintMachineService.java b/cash-common/cash-common-service/src/main/java/com/czg/account/service/PrintMachineService.java new file mode 100644 index 000000000..dfd22aa0b --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/service/PrintMachineService.java @@ -0,0 +1,21 @@ +package com.czg.account.service; + +import com.czg.account.dto.print.PrinterAddDTO; +import com.czg.account.dto.print.PrinterEditDTO; +import com.mybatisflex.core.paginate.Page; +import com.mybatisflex.core.service.IService; +import com.czg.account.entity.PrintMachine; + +/** + * 打印机设备 服务层。 + * + * @author zs + * @since 2025-02-20 + */ +public interface PrintMachineService extends IService { + + boolean add(Long shopId, PrinterAddDTO printerAddDTO); + + Boolean edit(Long shopId, PrinterEditDTO printerEditDTO); + +} diff --git a/cash-common/cash-common-tools/src/main/java/com/czg/LoadingRole.java b/cash-common/cash-common-tools/src/main/java/com/czg/LoadingRole.java index cd3793faf..bb9ed2143 100644 --- a/cash-common/cash-common-tools/src/main/java/com/czg/LoadingRole.java +++ b/cash-common/cash-common-tools/src/main/java/com/czg/LoadingRole.java @@ -61,7 +61,7 @@ public class LoadingRole implements CommandLineRunner { log.info("接口菜单添加成功, 菜单名称: {}, 菜单权限: {}", title, permission); } - if (StrUtil.isNotBlank(permissionName) && !title.equals(permissionName)) { + if (StrUtil.isNotBlank(permissionName) && (title == null || !title.equals(permissionName))) { sql = "update sys_menu set title=? where menu_id=?"; Db.updateBySql(sql, permissionName, menuId); log.info("接口菜单修改成功, 旧名称: {}, 新菜单名称: {}", title, permissionName); diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/mapper/PrintMachineMapper.java b/cash-service/account-service/src/main/java/com/czg/service/account/mapper/PrintMachineMapper.java new file mode 100644 index 000000000..522779655 --- /dev/null +++ b/cash-service/account-service/src/main/java/com/czg/service/account/mapper/PrintMachineMapper.java @@ -0,0 +1,14 @@ +package com.czg.service.account.mapper; + +import com.mybatisflex.core.BaseMapper; +import com.czg.account.entity.PrintMachine; + +/** + * 打印机设备 映射层。 + * + * @author zs + * @since 2025-02-20 + */ +public interface PrintMachineMapper extends BaseMapper { + +} diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/PrintMachineServiceImpl.java b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/PrintMachineServiceImpl.java new file mode 100644 index 000000000..86eb923d5 --- /dev/null +++ b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/PrintMachineServiceImpl.java @@ -0,0 +1,57 @@ +package com.czg.service.account.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONUtil; +import com.czg.account.dto.print.PrinterAddDTO; +import com.czg.account.dto.print.PrinterEditDTO; +import com.czg.exception.ApiNotPrintException; +import com.mybatisflex.core.paginate.Page; +import com.mybatisflex.core.query.QueryWrapper; +import com.mybatisflex.spring.service.impl.ServiceImpl; +import com.czg.account.entity.PrintMachine; +import com.czg.account.service.PrintMachineService; +import com.czg.service.account.mapper.PrintMachineMapper; +import org.springframework.stereotype.Service; + +/** + * 打印机设备 服务层实现。 + * + * @author zs + * @since 2025-02-20 + */ +@Service +public class PrintMachineServiceImpl extends ServiceImpl implements PrintMachineService{ + + @Override + public boolean add(Long shopId, PrinterAddDTO dto) { + //分类打印选择部分打印时必传,JsonArray字符串数据 如:[{"id":125,"name":"意式咖啡"},{"id":127,"name":"饮品"}] + if ("1".equals(dto.getClassifyPrint()) || "2".equals(dto.getClassifyPrint())) { + if (StrUtil.isBlank(dto.getCategoryList())) { + throw new ApiNotPrintException("分类打印选择部分打印时,必须勾选需要部分打印的菜品"); + } + if (!JSONUtil.isTypeJSONArray(dto.getCategoryList())) { + throw new ApiNotPrintException("传递的部分打印菜品数据不合法"); + } + if (StrUtil.isBlank(dto.getCategoryIds())) { + throw new ApiNotPrintException("分类打印选择部分打印时,传递的部分打印菜品id数据不能为空"); + } + } else { + dto.setCategoryIds(null); + dto.setCategoryList(null); + } + PrintMachine entity = BeanUtil.copyProperties(dto, PrintMachine.class); + return save(entity); + } + + @Override + public Boolean edit(Long shopId, PrinterEditDTO printerEditDTO) { + PrintMachine printMachine = getOne(new QueryWrapper().eq(PrintMachine::getShopId, shopId).eq(PrintMachine::getId, printerEditDTO.getId())); + if (printMachine == null) { + throw new ApiNotPrintException("打印机不存在"); + } + + BeanUtil.copyProperties(printerEditDTO, printerEditDTO); + return updateById(printMachine); + } +} diff --git a/cash-service/account-service/src/main/resources/mapper/PrintMachineMapper.xml b/cash-service/account-service/src/main/resources/mapper/PrintMachineMapper.xml new file mode 100644 index 000000000..d65736f7e --- /dev/null +++ b/cash-service/account-service/src/main/resources/mapper/PrintMachineMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/cash-service/code-generator/src/main/java/com/czg/Main.java b/cash-service/code-generator/src/main/java/com/czg/Main.java index 4763013f9..3b11b3a45 100644 --- a/cash-service/code-generator/src/main/java/com/czg/Main.java +++ b/cash-service/code-generator/src/main/java/com/czg/Main.java @@ -28,7 +28,7 @@ public class Main { // String packageName = "product"; // String packageName = "order"; - String tableName = "tb_product"; + String tableName = "tb_print_machine"; String author = "zs"; //是否生成DTO实体 默认生成 boolean isGenerateDto = true;