Quellcode durchsuchen

客户、货品、提货配置、供应商

shasha vor 3 Monaten
Ursprung
Commit
ec67b34c4c
41 geänderte Dateien mit 2331 neuen und 59 gelöschten Zeilen
  1. 159 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/customer/controller/BizCustomerController.java
  2. 68 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/customer/entity/BizCustomer.java
  3. 34 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/customer/enums/BizCustomerEnum.java
  4. 25 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/customer/mapper/BizCustomerMapper.java
  5. 5 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/customer/mapper/mapping/BizCustomerMapper.xml
  6. 65 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/customer/param/BizCustomerAddParam.java
  7. 67 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/customer/param/BizCustomerEditParam.java
  8. 35 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/customer/param/BizCustomerIdParam.java
  9. 63 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/customer/param/BizCustomerPageParam.java
  10. 96 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/customer/service/BizCustomerService.java
  11. 216 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/customer/service/impl/BizCustomerServiceImpl.java
  12. 2 4
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/goods/controller/BizGoodsController.java
  13. 9 28
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/goods/entity/BizGoods.java
  14. 2 2
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/goods/enums/BizGoodsEnum.java
  15. 8 3
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/goods/param/BizGoodsAddParam.java
  16. 9 4
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/goods/param/BizGoodsEditParam.java
  17. 3 2
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/goods/param/BizGoodsPageParam.java
  18. 1 1
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/goods/service/BizGoodsService.java
  19. 27 15
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/goods/service/impl/BizGoodsServiceImpl.java
  20. 135 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/goodsConf/controller/BizGoodsConfController.java
  21. 77 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/goodsConf/entity/BizGoodsConf.java
  22. 34 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/goodsConf/enums/BizGoodsConfEnum.java
  23. 25 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/goodsConf/mapper/BizGoodsConfMapper.java
  24. 5 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/goodsConf/mapper/mapping/BizGoodsConfMapper.xml
  25. 48 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/goodsConf/param/BizGoodsConfAddParam.java
  26. 68 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/goodsConf/param/BizGoodsConfEditParam.java
  27. 35 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/goodsConf/param/BizGoodsConfIdParam.java
  28. 77 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/goodsConf/param/BizGoodsConfPageParam.java
  29. 99 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/goodsConf/service/BizGoodsConfService.java
  30. 205 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/goodsConf/service/impl/BizGoodsConfServiceImpl.java
  31. 121 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/supplier/controller/BizSupplierController.java
  32. 56 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/supplier/entity/BizSupplier.java
  33. 34 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/supplier/enums/BizSupplierEnum.java
  34. 25 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/supplier/mapper/BizSupplierMapper.java
  35. 5 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/supplier/mapper/mapping/BizSupplierMapper.xml
  36. 52 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/supplier/param/BizSupplierAddParam.java
  37. 57 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/supplier/param/BizSupplierEditParam.java
  38. 35 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/supplier/param/BizSupplierIdParam.java
  39. 49 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/supplier/param/BizSupplierPageParam.java
  40. 80 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/supplier/service/BizSupplierService.java
  41. 115 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/supplier/service/impl/BizSupplierServiceImpl.java

+ 159 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/customer/controller/BizCustomerController.java

@@ -0,0 +1,159 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.biz.modular.customer.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+import vip.xiaonuo.biz.modular.customer.param.*;
+import vip.xiaonuo.common.annotation.CommonLog;
+import vip.xiaonuo.common.pojo.CommonResult;
+import vip.xiaonuo.biz.modular.customer.entity.BizCustomer;
+import vip.xiaonuo.biz.modular.customer.service.BizCustomerService;
+
+import jakarta.annotation.Resource;
+import jakarta.validation.Valid;
+import jakarta.validation.constraints.NotEmpty;
+import java.util.List;
+
+/**
+ * 客户控制器
+ *
+ * @author fanzherong
+ * @date  2025/03/21 11:44
+ */
+@Tag(name = "客户控制器")
+@RestController
+@Validated
+public class BizCustomerController {
+
+    @Resource
+    private BizCustomerService bizCustomerService;
+
+    /**
+     * 获取客户分页
+     *
+     * @author fanzherong
+     * @date  2025/03/21 11:44
+     */
+    @Operation(summary = "获取客户分页")
+    @GetMapping("/biz/customer/page")
+    public CommonResult<Page<BizCustomer>> page(BizCustomerPageParam bizCustomerPageParam) {
+        return CommonResult.data(bizCustomerService.page(bizCustomerPageParam));
+    }
+
+    /**
+     * 获取客户列表
+     *
+     * @author sandy
+     * @date  2025/03/26 17:00
+     */
+    @Operation(summary = "获取客户列表")
+    @GetMapping("/biz/customer/getList")
+    public CommonResult<List<BizCustomer>> getList(BizCustomerPageParam bizCustomerPageParam) {
+        return CommonResult.data(bizCustomerService.getList(bizCustomerPageParam));
+    }
+
+    /**
+     * 添加客户
+     *
+     * @author fanzherong
+     * @date  2025/03/21 11:44
+     */
+    @Operation(summary = "添加客户")
+    @CommonLog("添加客户")
+    @SaCheckPermission("/biz/customer/add")
+    @PostMapping("/biz/customer/add")
+    public CommonResult<String> add(@RequestBody @Valid BizCustomerAddParam bizCustomerAddParam) {
+        bizCustomerService.add(bizCustomerAddParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 编辑客户
+     *
+     * @author fanzherong
+     * @date  2025/03/21 11:44
+     */
+    @Operation(summary = "编辑客户")
+    @CommonLog("编辑客户")
+    @SaCheckPermission("/biz/customer/edit")
+    @PostMapping("/biz/customer/edit")
+    public CommonResult<String> edit(@RequestBody @Valid BizCustomerEditParam bizCustomerEditParam) {
+        bizCustomerService.edit(bizCustomerEditParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 删除客户
+     *
+     * @author fanzherong
+     * @date  2025/03/21 11:44
+     */
+    @Operation(summary = "删除客户")
+    @CommonLog("删除客户")
+    @SaCheckPermission("/biz/customer/delete")
+    @PostMapping("/biz/customer/delete")
+    public CommonResult<String> delete(@RequestBody @Valid @NotEmpty(message = "集合不能为空")
+                                                   List<BizCustomerIdParam> bizCustomerIdParamList) {
+        bizCustomerService.delete(bizCustomerIdParamList);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 获取客户详情
+     *
+     * @author fanzherong
+     * @date  2025/03/21 11:44
+     */
+    @Operation(summary = "获取客户详情")
+    @GetMapping("/biz/customer/detail")
+    public CommonResult<BizCustomer> detail(@Valid BizCustomerIdParam bizCustomerIdParam) {
+        return CommonResult.data(bizCustomerService.detail(bizCustomerIdParam));
+    }
+
+    /**
+     * 重置用户密码
+     *
+     * @author sandy
+     * @date  2025/03/26 10:00
+     **/
+    @Operation(summary = "重置用户密码")
+    @CommonLog("重置用户密码")
+    @PostMapping("/biz/customer/resetPassword")
+    public CommonResult<String> resetPassword(@RequestBody @Valid BizCustomerIdParam bizCustomerIdParam) {
+        bizCustomerService.resetPassword(bizCustomerIdParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 用友推送客户接口
+     *
+     * @author sandy
+     * @date  2025/03/27 17:00
+     */
+    @Operation(summary = "用友推送客户接口")
+    @CommonLog("用友推送客户接口")
+    @PostMapping("/biz/customer/yongAdd")
+    public CommonResult<String> yongAdd(@RequestBody @Valid BizCustomerAddParam bizCustomerAddParam) {
+        bizCustomerService.add(bizCustomerAddParam);
+        return CommonResult.ok();
+    }
+
+}

+ 68 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/customer/entity/BizCustomer.java

@@ -0,0 +1,68 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.biz.modular.customer.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+import vip.xiaonuo.common.pojo.CommonEntity;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 客户实体
+ *
+ * @author sandy
+ * @date  2025/03/25 15:30
+ **/
+@Getter
+@Setter
+@TableName("biz_customer")
+public class BizCustomer extends CommonEntity {
+
+    /** 主键ID */
+    @TableId
+    @Schema(description = "主键ID")
+    private String id;
+
+    /** 客户登录账号 */
+    @Schema(description = "客户登录账号")
+    private String loginAccount;
+
+    /** 客户名称 */
+    @Schema(description = "客户名称")
+    private String name;
+
+    /** 联系人 */
+    @Schema(description = "联系人")
+    private String contact;
+
+    /** 手机号 */
+    @Schema(description = "手机号")
+    private String phone;
+
+    /** 客户地址 */
+    @Schema(description = "客户地址")
+    private String address;
+
+    /** 备注 */
+    @Schema(description = "备注")
+    private String remark;
+
+    /** 关联用友平台的ID */
+    @Schema(description = "关联用友平台的ID")
+    private String yongId;
+
+}

+ 34 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/customer/enums/BizCustomerEnum.java

@@ -0,0 +1,34 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.biz.modular.customer.enums;
+
+import lombok.Getter;
+
+/**
+ * 客户枚举
+ *
+ * @author fanzherong
+ * @date  2025/03/21 11:44
+ **/
+@Getter
+public enum BizCustomerEnum {
+
+    /** 未删除 */
+    NOT_DELETE("NOT_DELETE");
+
+    private final String value;
+
+    BizCustomerEnum(String value) {
+        this.value = value;
+    }
+}

+ 25 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/customer/mapper/BizCustomerMapper.java

@@ -0,0 +1,25 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.biz.modular.customer.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import vip.xiaonuo.biz.modular.customer.entity.BizCustomer;
+
+/**
+ * 客户Mapper接口
+ *
+ * @author fanzherong
+ * @date  2025/03/21 11:44
+ **/
+public interface BizCustomerMapper extends BaseMapper<BizCustomer> {
+}

+ 5 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/customer/mapper/mapping/BizCustomerMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="vip.xiaonuo.biz.modular.customer.mapper.BizCustomerMapper">
+
+</mapper>

+ 65 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/customer/param/BizCustomerAddParam.java

@@ -0,0 +1,65 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.biz.modular.customer.param;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 客户添加参数
+ *
+ * @author sandy
+ * @date  2025/03/25 15:30
+ **/
+@Getter
+@Setter
+public class BizCustomerAddParam {
+
+    /** 客户登录账号 */
+    @Schema(description = "客户登录账号", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotBlank(message = "客户登录账号不能为空")
+    private String loginAccount;
+
+    /** 客户名称 */
+    @Schema(description = "客户名称")
+    private String name;
+
+    /** 联系人 */
+    @Schema(description = "联系人")
+    private String contact;
+
+    /** 手机号 */
+    @Schema(description = "手机号", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotBlank(message = "手机号不能为空")
+    private String phone;
+
+    /** 客户地址 */
+    @Schema(description = "客户地址")
+    private String address;
+
+    /** 备注 */
+    @Schema(description = "备注")
+    private String remark;
+
+    /** 关联用友平台的ID */
+    @Schema(description = "关联用友平台的ID", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotBlank(message = "关联用友平台的ID不能为空")
+    private String yongId;
+
+}

+ 67 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/customer/param/BizCustomerEditParam.java

@@ -0,0 +1,67 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.biz.modular.customer.param;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 客户编辑参数
+ *
+ * @author sandy
+ * @date  2025/03/25 15:30
+ **/
+@Getter
+@Setter
+public class BizCustomerEditParam {
+
+    /** 主键ID */
+    @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotBlank(message = "id不能为空")
+    private String id;
+
+    /** 客户登录账号 */
+    @Schema(description = "客户登录账号")
+    private String loginAccount;
+
+    /** 客户名称 */
+    @Schema(description = "客户名称")
+    private String name;
+
+    /** 联系人 */
+    @Schema(description = "联系人")
+    private String contact;
+
+    /** 手机号 */
+    @Schema(description = "手机号")
+    private String phone;
+
+    /** 客户地址 */
+    @Schema(description = "客户地址")
+    private String address;
+
+    /** 备注 */
+    @Schema(description = "备注")
+    private String remark;
+
+    /** 关联用友平台的ID */
+    @Schema(description = "关联用友平台的ID")
+    private String yongId;
+
+}

+ 35 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/customer/param/BizCustomerIdParam.java

@@ -0,0 +1,35 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.biz.modular.customer.param;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import jakarta.validation.constraints.NotBlank;
+
+/**
+ * 客户Id参数
+ *
+ * @author sandy
+ * @date  2025/03/25 15:30
+ **/
+@Getter
+@Setter
+public class BizCustomerIdParam {
+
+    /** 主键ID */
+    @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotBlank(message = "id不能为空")
+    private String id;
+}

+ 63 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/customer/param/BizCustomerPageParam.java

@@ -0,0 +1,63 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.biz.modular.customer.param;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 客户查询参数
+ *
+ * @author sandy
+ * @date  2025/03/25 15:30
+ **/
+@Getter
+@Setter
+public class BizCustomerPageParam {
+
+    /** 当前页 */
+    @Schema(description = "当前页码")
+    private Integer current;
+
+    /** 每页条数 */
+    @Schema(description = "每页条数")
+    private Integer size;
+
+    /** 排序字段 */
+    @Schema(description = "排序字段,字段驼峰名称,如:userName")
+    private String sortField;
+
+    /** 排序方式 */
+    @Schema(description = "排序方式,升序:ASCEND;降序:DESCEND")
+    private String sortOrder;
+
+    /** 关键词 */
+    @Schema(description = "关键词")
+    private String searchKey;
+
+    /** 客户登录账号 */
+    @Schema(description = "客户登录账号")
+    private String loginAccount;
+
+    /** 客户名称 */
+    @Schema(description = "客户名称")
+    private String name;
+
+    /** 手机号 */
+    @Schema(description = "手机号")
+    private String phone;
+
+}

+ 96 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/customer/service/BizCustomerService.java

@@ -0,0 +1,96 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.biz.modular.customer.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import vip.xiaonuo.biz.modular.customer.entity.BizCustomer;
+import vip.xiaonuo.biz.modular.customer.param.BizCustomerAddParam;
+import vip.xiaonuo.biz.modular.customer.param.BizCustomerEditParam;
+import vip.xiaonuo.biz.modular.customer.param.BizCustomerIdParam;
+import vip.xiaonuo.biz.modular.customer.param.BizCustomerPageParam;
+
+import java.util.List;
+
+/**
+ * 客户Service接口
+ *
+ * @author fanzherong
+ * @date  2025/03/21 11:44
+ **/
+public interface BizCustomerService extends IService<BizCustomer> {
+
+    /**
+     * 获取客户分页
+     *
+     * @author fanzherong
+     * @date  2025/03/21 11:44
+     */
+    Page<BizCustomer> page(BizCustomerPageParam bizCustomerPageParam);
+
+    /**
+     * 获取有效未删除的列表
+     *
+     * @author sandy
+     * @date  2025/03/28 8:00
+     **/
+    List<BizCustomer> getList(BizCustomerPageParam bizCustomerPageParam);
+
+    /**
+     * 添加客户
+     *
+     * @author fanzherong
+     * @date  2025/03/21 11:44
+     */
+    void add(BizCustomerAddParam bizCustomerAddParam);
+
+    /**
+     * 编辑客户
+     *
+     * @author fanzherong
+     * @date  2025/03/21 11:44
+     */
+    void edit(BizCustomerEditParam bizCustomerEditParam);
+
+    /**
+     * 删除客户
+     *
+     * @author fanzherong
+     * @date  2025/03/21 11:44
+     */
+    void delete(List<BizCustomerIdParam> bizCustomerIdParamList);
+
+    /**
+     * 获取客户详情
+     *
+     * @author fanzherong
+     * @date  2025/03/21 11:44
+     */
+    BizCustomer detail(BizCustomerIdParam bizCustomerIdParam);
+
+    /**
+     * 重置用户密码
+     *
+     * @author sandy
+     * @date  2025/03/26 10:00
+     **/
+    void resetPassword(BizCustomerIdParam bizCustomerIdParam);
+
+    /**
+     * 获取客户详情
+     *
+     * @author fanzherong
+     * @date  2025/03/21 11:44
+     **/
+    BizCustomer queryEntity(String id);
+}

+ 216 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/customer/service/impl/BizCustomerServiceImpl.java

@@ -0,0 +1,216 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.biz.modular.customer.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollStreamUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.PhoneUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import jakarta.annotation.Resource;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import vip.xiaonuo.biz.modular.customer.enums.BizCustomerEnum;
+import vip.xiaonuo.biz.modular.goodsConf.entity.BizGoodsConf;
+import vip.xiaonuo.biz.modular.goodsConf.enums.BizGoodsConfEnum;
+import vip.xiaonuo.biz.modular.user.entity.BizUser;
+import vip.xiaonuo.biz.modular.user.enums.BizUserStatusEnum;
+import vip.xiaonuo.biz.modular.user.mapper.BizUserMapper;
+import vip.xiaonuo.common.enums.CommonSortOrderEnum;
+import vip.xiaonuo.common.exception.CommonException;
+import vip.xiaonuo.common.page.CommonPageRequest;
+import vip.xiaonuo.biz.modular.customer.entity.BizCustomer;
+import vip.xiaonuo.biz.modular.customer.mapper.BizCustomerMapper;
+import vip.xiaonuo.biz.modular.customer.param.BizCustomerAddParam;
+import vip.xiaonuo.biz.modular.customer.param.BizCustomerEditParam;
+import vip.xiaonuo.biz.modular.customer.param.BizCustomerIdParam;
+import vip.xiaonuo.biz.modular.customer.param.BizCustomerPageParam;
+import vip.xiaonuo.biz.modular.customer.service.BizCustomerService;
+import vip.xiaonuo.common.util.CommonCryptogramUtil;
+import vip.xiaonuo.dev.api.DevConfigApi;
+import vip.xiaonuo.sys.api.SysUserApi;
+
+import java.util.List;
+
+/**
+ * 客户Service接口实现类
+ *
+ * @author fanzherong
+ * @date  2025/03/21 11:44
+ **/
+@Service
+public class BizCustomerServiceImpl extends ServiceImpl<BizCustomerMapper, BizCustomer> implements BizCustomerService {
+
+    private static final String SNOWY_SYS_DEFAULT_PASSWORD_KEY = "SNOWY_SYS_DEFAULT_PASSWORD";
+
+    @Resource
+    private DevConfigApi devConfigApi;
+
+    @Resource
+    private BizUserMapper bizUserMapper;
+
+    @Resource
+    private SysUserApi sysUserApi;
+
+    @Override
+    public Page<BizCustomer> page(BizCustomerPageParam bizCustomerPageParam) {
+        QueryWrapper<BizCustomer> queryWrapper = new QueryWrapper<BizCustomer>().checkSqlInjection();
+        if(ObjectUtil.isNotEmpty(bizCustomerPageParam.getLoginAccount())) {
+            queryWrapper.lambda().like(BizCustomer::getLoginAccount, bizCustomerPageParam.getLoginAccount());
+        }
+        if(ObjectUtil.isNotEmpty(bizCustomerPageParam.getName())) {
+            queryWrapper.lambda().like(BizCustomer::getName, bizCustomerPageParam.getName());
+        }
+        if(ObjectUtil.isNotEmpty(bizCustomerPageParam.getPhone())) {
+            queryWrapper.lambda().like(BizCustomer::getPhone, bizCustomerPageParam.getPhone());
+        }
+        queryWrapper.lambda().eq(BizCustomer::getDeleteFlag, BizCustomerEnum.NOT_DELETE.getValue());
+        if(ObjectUtil.isAllNotEmpty(bizCustomerPageParam.getSortField(), bizCustomerPageParam.getSortOrder())) {
+            CommonSortOrderEnum.validate(bizCustomerPageParam.getSortOrder());
+            queryWrapper.orderBy(true, bizCustomerPageParam.getSortOrder().equals(CommonSortOrderEnum.ASC.getValue()),
+                    StrUtil.toUnderlineCase(bizCustomerPageParam.getSortField()));
+        } else {
+            queryWrapper.lambda().orderByAsc(BizCustomer::getId);
+        }
+        return this.page(CommonPageRequest.defaultPage(), queryWrapper);
+    }
+
+    @Override
+    public List<BizCustomer> getList(BizCustomerPageParam bizCustomerPageParam) {
+        QueryWrapper<BizCustomer> queryWrapper = new QueryWrapper<BizCustomer>().checkSqlInjection();
+        if(ObjectUtil.isNotEmpty(bizCustomerPageParam.getLoginAccount())) {
+            queryWrapper.lambda().like(BizCustomer::getLoginAccount, bizCustomerPageParam.getLoginAccount());
+        }
+        if(ObjectUtil.isNotEmpty(bizCustomerPageParam.getName())) {
+            queryWrapper.lambda().like(BizCustomer::getName, bizCustomerPageParam.getName());
+        }
+        if(ObjectUtil.isNotEmpty(bizCustomerPageParam.getPhone())) {
+            queryWrapper.lambda().like(BizCustomer::getPhone, bizCustomerPageParam.getPhone());
+        }
+        queryWrapper.lambda().eq(BizCustomer::getDeleteFlag, BizCustomerEnum.NOT_DELETE.getValue());
+        queryWrapper.lambda().orderByAsc(BizCustomer::getId);
+        return this.list(queryWrapper);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void add(BizCustomerAddParam bizCustomerAddParam) {
+        //校验手机号格式
+        if(ObjectUtil.isNotEmpty(bizCustomerAddParam.getPhone())){
+            if(!PhoneUtil.isMobile(bizCustomerAddParam.getPhone())) {
+                throw new CommonException("手机号码:{}格式错误", bizCustomerAddParam.getPhone());
+            }
+        }
+        //查询客户账号是否添加过
+        long countLogin = this.count(new QueryWrapper<BizCustomer>().lambda().eq(BizCustomer::getLoginAccount, bizCustomerAddParam.getLoginAccount()));
+        if(countLogin>0){
+            throw new CommonException("客户账号已存在!");
+        }
+        //查询客户名称是否添加过
+        long countName = this.count(new QueryWrapper<BizCustomer>().lambda().eq(BizCustomer::getName, bizCustomerAddParam.getName()));
+        if(countName>0){
+            throw new CommonException("客户名称已存在!");
+        }
+        BizCustomer bizCustomer = BeanUtil.toBean(bizCustomerAddParam, BizCustomer.class);
+        this.save(bizCustomer);
+
+        // 添加客户登录账号
+        BizUser bizUser = new BizUser();
+        bizUser.setCustomerId(bizCustomer.getId());
+        bizUser.setAccount(bizCustomer.getLoginAccount());
+        bizUser.setName(bizCustomer.getName());
+        bizUser.setPhone(bizCustomer.getPhone());
+        bizUser.setUserType("1");
+        // 设置密码
+        bizUser.setPassword(CommonCryptogramUtil.doHashValue(devConfigApi.getValueByKey(SNOWY_SYS_DEFAULT_PASSWORD_KEY)));
+        // 设置状态
+        bizUser.setUserStatus(BizUserStatusEnum.ENABLE.getValue());
+        this.bizUserMapper.insert(bizUser);
+
+        // 添加客户角色
+        this.sysUserApi.grantRoleType(bizUser.getId(), "客户");
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void edit(BizCustomerEditParam bizCustomerEditParam) {
+        //校验手机号格式
+        if(ObjectUtil.isNotEmpty(bizCustomerEditParam.getPhone())){
+            if(!PhoneUtil.isMobile(bizCustomerEditParam.getPhone())) {
+                throw new CommonException("手机号码:{}格式错误", bizCustomerEditParam.getPhone());
+            }
+        }
+        BizCustomer bizCustomer = this.queryEntity(bizCustomerEditParam.getId());
+        if(!StringUtils.equals(bizCustomer.getName(),bizCustomerEditParam.getName())){
+            //查询客户名称是否添加过
+            long count = this.count(new QueryWrapper<BizCustomer>().lambda().eq(BizCustomer::getName, bizCustomerEditParam.getName()));
+            if(count>0){
+                throw new CommonException("客户名称已存在!");
+            }
+        }
+        BeanUtil.copyProperties(bizCustomerEditParam, bizCustomer);
+        this.updateById(bizCustomer);
+
+        // 检查是否存在账号
+        long count = this.bizUserMapper.selectCount(new QueryWrapper<BizUser>().lambda().eq(BizUser::getCustomerId, bizCustomer.getId()));
+        if(count == 0){
+            BizUser bizUser = new BizUser();
+            bizUser.setCustomerId(bizCustomer.getId());
+            bizUser.setAccount(bizCustomer.getLoginAccount());
+            bizUser.setName(bizCustomer.getName());
+            bizUser.setPhone(bizCustomer.getPhone());
+            bizUser.setUserType("1");
+            // 设置密码
+            bizUser.setPassword(CommonCryptogramUtil.doHashValue(devConfigApi.getValueByKey(SNOWY_SYS_DEFAULT_PASSWORD_KEY)));
+            // 设置状态
+            bizUser.setUserStatus(BizUserStatusEnum.ENABLE.getValue());
+            this.bizUserMapper.insert(bizUser);
+
+            // 添加客户角色
+            this.sysUserApi.grantRoleType(bizUser.getId(), "客户");
+        }
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void delete(List<BizCustomerIdParam> bizCustomerIdParamList) {
+        // 执行删除
+        this.removeByIds(CollStreamUtil.toList(bizCustomerIdParamList, BizCustomerIdParam::getId));
+    }
+
+    @Override
+    public BizCustomer detail(BizCustomerIdParam bizCustomerIdParam) {
+        return this.queryEntity(bizCustomerIdParam.getId());
+    }
+
+    @Override
+    public void resetPassword(BizCustomerIdParam bizCustomerIdParam) {
+        this.bizUserMapper.update(new LambdaUpdateWrapper<BizUser>().eq(BizUser::getCustomerId,
+                bizCustomerIdParam.getId()).set(BizUser::getPassword,
+                CommonCryptogramUtil.doHashValue(devConfigApi.getValueByKey(SNOWY_SYS_DEFAULT_PASSWORD_KEY))));
+    }
+
+    @Override
+    public BizCustomer queryEntity(String id) {
+        BizCustomer bizCustomer = this.getById(id);
+        if(ObjectUtil.isEmpty(bizCustomer)) {
+            throw new CommonException("客户不存在,id值为:{}", id);
+        }
+        return bizCustomer;
+    }
+}

+ 2 - 4
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/goods/controller/BizGoodsController.java

@@ -56,7 +56,6 @@ public class BizGoodsController {
      * @date  2025/01/02 17:44
      */
     @Operation(summary = "获取货品管理分页")
-    @SaCheckPermission("/biz/goods/page")
     @GetMapping("/biz/goods/page")
     public CommonResult<Page<BizGoods>> page(BizGoodsPageParam bizGoodsPageParam) {
         return CommonResult.data(bizGoodsService.page(bizGoodsPageParam));
@@ -115,7 +114,6 @@ public class BizGoodsController {
      * @date  2025/01/02 17:44
      */
     @Operation(summary = "获取货品管理详情")
-    @SaCheckPermission("/biz/goods/detail")
     @GetMapping("/biz/goods/detail")
     public CommonResult<BizGoods> detail(@Valid BizGoodsIdParam bizGoodsIdParam) {
         return CommonResult.data(bizGoodsService.detail(bizGoodsIdParam));
@@ -129,7 +127,7 @@ public class BizGoodsController {
      */
     @Operation(summary = "获取货品管理详情")
     @GetMapping("/biz/goods/getList")
-    public CommonResult<List<BizGoods>> getList() {
-        return CommonResult.data(bizGoodsService.getList());
+    public CommonResult<List<BizGoods>> getList(BizGoodsPageParam bizGoodsPageParam) {
+        return CommonResult.data(bizGoodsService.getList(bizGoodsPageParam));
     }
 }

+ 9 - 28
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/goods/entity/BizGoods.java

@@ -16,6 +16,8 @@ import com.baomidou.mybatisplus.annotation.*;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Getter;
 import lombok.Setter;
+import vip.xiaonuo.common.pojo.CommonEntity;
+
 import java.math.BigDecimal;
 import java.util.Date;
 
@@ -28,44 +30,23 @@ import java.util.Date;
 @Getter
 @Setter
 @TableName("BIZ_GOODS")
-public class BizGoods {
+public class BizGoods extends CommonEntity {
 
     /** 主键 */
     @TableId
     @Schema(description = "主键")
     private String id;
 
+    /** 货品编码 */
+    @Schema(description = "货品编码")
+    private String goodsCode;
+
     /** 货品名称 */
     @Schema(description = "货品名称")
-    private String name;
+    private String goodsName;
 
     /** 货品规格 */
     @Schema(description = "货品规格")
-    private String model;
-
-    /** 删除标志 */
-    @Schema(description = "删除标志")
-    @TableLogic
-    @TableField(fill = FieldFill.INSERT)
-    private String deleteFlag;
-
-    /** 创建时间 */
-    @Schema(description = "创建时间")
-    @TableField(fill = FieldFill.INSERT)
-    private Date createTime;
-
-    /** 创建用户 */
-    @Schema(description = "创建用户")
-    @TableField(fill = FieldFill.INSERT)
-    private String createUser;
-
-    /** 更新时间 */
-    @Schema(description = "更新时间")
-    @TableField(fill = FieldFill.UPDATE)
-    private Date updateTime;
+    private String goodsModel;
 
-    /** 更新用户 */
-    @Schema(description = "更新用户")
-    @TableField(fill = FieldFill.UPDATE)
-    private String updateUser;
 }

+ 2 - 2
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/goods/enums/BizGoodsEnum.java

@@ -23,8 +23,8 @@ import lombok.Getter;
 @Getter
 public enum BizGoodsEnum {
 
-    /** 测试 */
-    TEST("TEST");
+    /** 未删除 */
+    NOT_DELETE("NOT_DELETE");
 
     private final String value;
 

+ 8 - 3
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/goods/param/BizGoodsAddParam.java

@@ -31,13 +31,18 @@ import java.util.Date;
 @Setter
 public class BizGoodsAddParam {
 
+    /** 货品编码 */
+    @Schema(description = "货品编码", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotBlank(message = "货品编码不能为空")
+    private String goodsCode;
+
     /** 货品名称 */
     @Schema(description = "货品名称", requiredMode = Schema.RequiredMode.REQUIRED)
-    @NotBlank(message = "name不能为空")
-    private String name;
+    @NotBlank(message = "货品名称不能为空")
+    private String goodsName;
 
     /** 货品规格 */
     @Schema(description = "货品规格")
-    private String model;
+    private String goodsModel;
 
 }

+ 9 - 4
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/goods/param/BizGoodsEditParam.java

@@ -33,16 +33,21 @@ public class BizGoodsEditParam {
 
     /** 主键 */
     @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED)
-    @NotBlank(message = "id不能为空")
+    @NotBlank(message = "主键不能为空")
     private String id;
 
+    /** 货品编码 */
+    @Schema(description = "货品编码", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotBlank(message = "货品编码不能为空")
+    private String goodsCode;
+
     /** 货品名称 */
     @Schema(description = "货品名称", requiredMode = Schema.RequiredMode.REQUIRED)
-    @NotBlank(message = "name不能为空")
-    private String name;
+    @NotBlank(message = "货品名称不能为空")
+    private String goodsName;
 
     /** 货品规格 */
     @Schema(description = "货品规格")
-    private String model;
+    private String goodsModel;
 
 }

+ 3 - 2
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/goods/param/BizGoodsPageParam.java

@@ -13,6 +13,7 @@
 package vip.xiaonuo.biz.modular.goods.param;
 
 import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotBlank;
 import lombok.Getter;
 import lombok.Setter;
 import java.math.BigDecimal;
@@ -50,10 +51,10 @@ public class BizGoodsPageParam {
 
     /** 货品名称 */
     @Schema(description = "货品名称")
-    private String name;
+    private String goodsName;
 
     /** 货品规格 */
     @Schema(description = "货品规格")
-    private String model;
+    private String goodsModel;
 
 }

+ 1 - 1
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/goods/service/BizGoodsService.java

@@ -79,5 +79,5 @@ public interface BizGoodsService extends IService<BizGoods> {
     BizGoods queryEntity(String id);
 
     /** 获取货品列表*/
-    List<BizGoods> getList();
+    List<BizGoods> getList(BizGoodsPageParam bizGoodsPageParam);
 }

+ 27 - 15
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/goods/service/impl/BizGoodsServiceImpl.java

@@ -22,6 +22,8 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import vip.xiaonuo.biz.modular.goodsConf.entity.BizGoodsConf;
+import vip.xiaonuo.biz.modular.goodsConf.enums.BizGoodsConfEnum;
 import vip.xiaonuo.common.enums.CommonSortOrderEnum;
 import vip.xiaonuo.common.exception.CommonException;
 import vip.xiaonuo.common.page.CommonPageRequest;
@@ -47,12 +49,13 @@ public class BizGoodsServiceImpl extends ServiceImpl<BizGoodsMapper, BizGoods> i
     @Override
     public Page<BizGoods> page(BizGoodsPageParam bizGoodsPageParam) {
         QueryWrapper<BizGoods> queryWrapper = new QueryWrapper<BizGoods>().checkSqlInjection();
-        if(ObjectUtil.isNotEmpty(bizGoodsPageParam.getName())) {
-            queryWrapper.lambda().like(BizGoods::getName, bizGoodsPageParam.getName());
+        if(ObjectUtil.isNotEmpty(bizGoodsPageParam.getGoodsName())) {
+            queryWrapper.lambda().like(BizGoods::getGoodsName, bizGoodsPageParam.getGoodsName());
         }
-        if(ObjectUtil.isNotEmpty(bizGoodsPageParam.getModel())) {
-            queryWrapper.lambda().like(BizGoods::getModel, bizGoodsPageParam.getModel());
+        if(ObjectUtil.isNotEmpty(bizGoodsPageParam.getGoodsModel())) {
+            queryWrapper.lambda().like(BizGoods::getGoodsModel, bizGoodsPageParam.getGoodsModel());
         }
+        queryWrapper.lambda().eq(BizGoods::getDeleteFlag, BizGoodsConfEnum.NOT_DELETE.getValue());
         queryWrapper.lambda().orderByDesc(BizGoods::getCreateTime);
         return this.page(CommonPageRequest.defaultPage(), queryWrapper);
     }
@@ -61,11 +64,11 @@ public class BizGoodsServiceImpl extends ServiceImpl<BizGoodsMapper, BizGoods> i
     @Override
     public void add(BizGoodsAddParam bizGoodsAddParam) {
         QueryWrapper<BizGoods> queryWrapper = new QueryWrapper<>();
-        if(ObjectUtil.isNotEmpty(bizGoodsAddParam.getName())){
-            queryWrapper.lambda().eq(BizGoods::getName,bizGoodsAddParam.getName());
+        if(ObjectUtil.isNotEmpty(bizGoodsAddParam.getGoodsName())){
+            queryWrapper.lambda().eq(BizGoods::getGoodsName,bizGoodsAddParam.getGoodsName());
         }
-        if(ObjectUtil.isNotEmpty(bizGoodsAddParam.getModel())){
-            queryWrapper.lambda().eq(BizGoods::getModel,bizGoodsAddParam.getModel());
+        if(ObjectUtil.isNotEmpty(bizGoodsAddParam.getGoodsModel())){
+            queryWrapper.lambda().eq(BizGoods::getGoodsModel,bizGoodsAddParam.getGoodsModel());
         }
         long count = this.count(queryWrapper);
         if(count>0){
@@ -79,13 +82,13 @@ public class BizGoodsServiceImpl extends ServiceImpl<BizGoodsMapper, BizGoods> i
     @Override
     public void edit(BizGoodsEditParam bizGoodsEditParam) {
         BizGoods bizGoods = this.queryEntity(bizGoodsEditParam.getId());
-        if(!StringUtils.equals(bizGoods.getName(),bizGoodsEditParam.getName()) || !StringUtils.equals(bizGoods.getModel(),bizGoodsEditParam.getModel())){
+        if(!StringUtils.equals(bizGoods.getGoodsName(),bizGoodsEditParam.getGoodsName()) || !StringUtils.equals(bizGoods.getGoodsModel(),bizGoodsEditParam.getGoodsModel())){
             QueryWrapper<BizGoods> queryWrapper = new QueryWrapper<>();
-            if(ObjectUtil.isNotEmpty(bizGoodsEditParam.getName())){
-                queryWrapper.lambda().eq(BizGoods::getName,bizGoodsEditParam.getName());
+            if(ObjectUtil.isNotEmpty(bizGoodsEditParam.getGoodsName())){
+                queryWrapper.lambda().eq(BizGoods::getGoodsName,bizGoodsEditParam.getGoodsName());
             }
-            if(ObjectUtil.isNotEmpty(bizGoodsEditParam.getModel())){
-                queryWrapper.lambda().eq(BizGoods::getModel,bizGoodsEditParam.getModel());
+            if(ObjectUtil.isNotEmpty(bizGoodsEditParam.getGoodsModel())){
+                queryWrapper.lambda().eq(BizGoods::getGoodsModel,bizGoodsEditParam.getGoodsModel());
             }
             long count = this.count(queryWrapper);
             if(count>0){
@@ -118,7 +121,16 @@ public class BizGoodsServiceImpl extends ServiceImpl<BizGoodsMapper, BizGoods> i
     }
 
     @Override
-    public List<BizGoods> getList() {
-        return this.list();
+    public List<BizGoods> getList(BizGoodsPageParam bizGoodsPageParam) {
+        QueryWrapper<BizGoods> queryWrapper = new QueryWrapper<BizGoods>().checkSqlInjection();
+        if(ObjectUtil.isNotEmpty(bizGoodsPageParam.getGoodsName())) {
+            queryWrapper.lambda().like(BizGoods::getGoodsName, bizGoodsPageParam.getGoodsName());
+        }
+        if(ObjectUtil.isNotEmpty(bizGoodsPageParam.getGoodsModel())) {
+            queryWrapper.lambda().like(BizGoods::getGoodsModel, bizGoodsPageParam.getGoodsModel());
+        }
+        queryWrapper.lambda().eq(BizGoods::getDeleteFlag, BizGoodsConfEnum.NOT_DELETE.getValue());
+        queryWrapper.lambda().orderByDesc(BizGoods::getCreateTime);
+        return this.list(queryWrapper);
     }
 }

+ 135 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/goodsConf/controller/BizGoodsConfController.java

@@ -0,0 +1,135 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.biz.modular.goodsConf.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+import vip.xiaonuo.common.annotation.CommonLog;
+import vip.xiaonuo.common.pojo.CommonResult;
+import vip.xiaonuo.biz.modular.goodsConf.entity.BizGoodsConf;
+import vip.xiaonuo.biz.modular.goodsConf.param.BizGoodsConfAddParam;
+import vip.xiaonuo.biz.modular.goodsConf.param.BizGoodsConfEditParam;
+import vip.xiaonuo.biz.modular.goodsConf.param.BizGoodsConfIdParam;
+import vip.xiaonuo.biz.modular.goodsConf.param.BizGoodsConfPageParam;
+import vip.xiaonuo.biz.modular.goodsConf.service.BizGoodsConfService;
+
+import jakarta.annotation.Resource;
+import jakarta.validation.Valid;
+import jakarta.validation.constraints.NotEmpty;
+import java.util.List;
+
+/**
+ * 提货时间配置表控制器
+ *
+ * @author sandy
+ * @date  2025/03/27 10:54
+ */
+@Tag(name = "提货时间配置表控制器")
+@RestController
+@Validated
+public class BizGoodsConfController {
+
+    @Resource
+    private BizGoodsConfService goodsConfService;
+
+    /**
+     * 获取提货时间配置表分页
+     *
+     * @author sandy
+     * @date  2025/03/27 10:54
+     */
+    @Operation(summary = "获取提货时间配置表分页")
+    @GetMapping("/biz/goodsConf/page")
+    public CommonResult<Page<BizGoodsConf>> page(BizGoodsConfPageParam goodsConfPageParam) {
+        return CommonResult.data(goodsConfService.page(goodsConfPageParam));
+    }
+
+    /**
+     * 添加提货时间配置表
+     *
+     * @author sandy
+     * @date  2025/03/27 10:54
+     */
+    @Operation(summary = "添加提货时间配置表")
+    @CommonLog("添加提货时间配置表")
+    @SaCheckPermission("/biz/goodsConf/add")
+    @PostMapping("/biz/goodsConf/add")
+    public CommonResult<String> add(@RequestBody @Valid BizGoodsConfAddParam goodsConfAddParam) {
+        goodsConfService.add(goodsConfAddParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 编辑提货时间配置表
+     *
+     * @author sandy
+     * @date  2025/03/27 10:54
+     */
+    @Operation(summary = "编辑提货时间配置表")
+    @CommonLog("编辑提货时间配置表")
+    @SaCheckPermission("/biz/goodsConf/edit")
+    @PostMapping("/biz/goodsConf/edit")
+    public CommonResult<String> edit(@RequestBody @Valid BizGoodsConfEditParam goodsConfEditParam) {
+        goodsConfService.edit(goodsConfEditParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 删除提货时间配置表
+     *
+     * @author sandy
+     * @date  2025/03/27 10:54
+     */
+    @Operation(summary = "删除提货时间配置表")
+    @CommonLog("删除提货时间配置表")
+    @SaCheckPermission("/biz/goodsConf/delete")
+    @PostMapping("/biz/goodsConf/delete")
+    public CommonResult<String> delete(@RequestBody @Valid @NotEmpty(message = "集合不能为空")
+                                                   List<BizGoodsConfIdParam> goodsConfIdParamList) {
+        goodsConfService.delete(goodsConfIdParamList);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 获取提货时间配置表详情
+     *
+     * @author sandy
+     * @date  2025/03/27 10:54
+     */
+    @Operation(summary = "获取提货时间配置表详情")
+    @GetMapping("/biz/goodsConf/detail")
+    public CommonResult<BizGoodsConf> detail(@Valid BizGoodsConfIdParam goodsConfIdParam) {
+        return CommonResult.data(goodsConfService.detail(goodsConfIdParam));
+    }
+
+    /**
+     * 大于当前时间的获取货品列表
+     * 参数:goodsCode 货品编码  完全匹配
+     * 参数:goodsName 货品名称  完全匹配
+     * 参数:needWeight 需要重量  大于等于
+     * @author sandy
+     * @date  2025/03/27 14:23
+     */
+    @Operation(summary = "获取货品管理详情")
+    @GetMapping("/biz/goodsConf/getList")
+    public CommonResult<List<BizGoodsConf>> getList(BizGoodsConfPageParam goodsConfPageParam) {
+        return CommonResult.data(goodsConfService.list(goodsConfPageParam));
+    }
+}

+ 77 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/goodsConf/entity/BizGoodsConf.java

@@ -0,0 +1,77 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.biz.modular.goodsConf.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+import vip.xiaonuo.common.pojo.CommonEntity;
+
+import java.util.Date;
+
+/**
+ * 提货时间配置表实体
+ *
+ * @author sandy
+ * @date  2025/03/27 10:54
+ **/
+@Getter
+@Setter
+@TableName("biz_goods_conf")
+public class BizGoodsConf extends CommonEntity {
+
+    /** 主键 */
+    @TableId
+    @Schema(description = "主键")
+    private String id;
+
+    /** 货物id */
+    @Schema(description = "货物id")
+    private String goodsId;
+
+    /** 货品编码 */
+    @Schema(description = "货品编码")
+    private String goodsCode;
+
+    /** 货品名称 */
+    @Schema(description = "货品名称")
+    private String goodsName;
+
+    /** 货品规格 */
+    @Schema(description = "货品规格")
+    private String goodsModel;
+
+    /** 提货开始时间 */
+    @Schema(description = "提货开始时间")
+    private Date confStartTime;
+
+    /** 提货结束时间 */
+    @Schema(description = "提货结束时间")
+    private Date confEndTime;
+
+    /** 可提重量(KG) */
+    @Schema(description = "可提重量(KG)")
+    private Double confWeight;
+
+    /** 已提重量(KG) */
+    @Schema(description = "已提重量(KG)")
+    private Double usedWeight;
+
+    /** 剩余提货重量(KG) */
+    @Schema(description = "剩余提货重量(KG)")
+    private Double lastWeight;
+
+
+
+}

+ 34 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/goodsConf/enums/BizGoodsConfEnum.java

@@ -0,0 +1,34 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.biz.modular.goodsConf.enums;
+
+import lombok.Getter;
+
+/**
+ * 提货时间配置表枚举
+ *
+ * @author sandy
+ * @date  2025/03/27 10:54
+ **/
+@Getter
+public enum BizGoodsConfEnum {
+
+    /** 未删除 */
+    NOT_DELETE("NOT_DELETE");
+
+    private final String value;
+
+    BizGoodsConfEnum(String value) {
+        this.value = value;
+    }
+}

+ 25 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/goodsConf/mapper/BizGoodsConfMapper.java

@@ -0,0 +1,25 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.biz.modular.goodsConf.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import vip.xiaonuo.biz.modular.goodsConf.entity.BizGoodsConf;
+
+/**
+ * 提货时间配置表Mapper接口
+ *
+ * @author sandy
+ * @date  2025/03/27 10:54
+ **/
+public interface BizGoodsConfMapper extends BaseMapper<BizGoodsConf> {
+}

+ 5 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/goodsConf/mapper/mapping/BizGoodsConfMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="vip.xiaonuo.biz.modular.goodsConf.mapper.BizGoodsConfMapper">
+
+</mapper>

+ 48 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/goodsConf/param/BizGoodsConfAddParam.java

@@ -0,0 +1,48 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.biz.modular.goodsConf.param;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+
+import java.util.Date;
+
+/**
+ * 提货时间配置表添加参数
+ *
+ * @author sandy
+ * @date  2025/03/27 10:54
+ **/
+@Getter
+@Setter
+public class BizGoodsConfAddParam {
+
+    /** 提货开始时间 */
+    @Schema(description = "提货开始时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotBlank(message = "提货开始时间不能为空")
+    private String confStartTime;
+
+    /** 提货结束时间 */
+    @Schema(description = "提货结束时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotBlank(message = "提货结束时间不能为空")
+    private String confEndTime;
+
+    @Schema(description = "提货信息", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotBlank(message = "提货信息不能为空")
+    private String goodsJson;
+
+}

+ 68 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/goodsConf/param/BizGoodsConfEditParam.java

@@ -0,0 +1,68 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.biz.modular.goodsConf.param;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+
+import java.util.Date;
+
+/**
+ * 提货时间配置表编辑参数
+ *
+ * @author sandy
+ * @date  2025/03/27 10:54
+ **/
+@Getter
+@Setter
+public class BizGoodsConfEditParam {
+
+    /** 主键 */
+    @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotBlank(message = "id不能为空")
+    private String id;
+
+    /** 货品编码 */
+    @Schema(description = "货品编码", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotBlank(message = "货品编码不能为空")
+    private String goodsCode;
+
+    /** 货品名称 */
+    @Schema(description = "货品名称", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotBlank(message = "货品名称不能为空")
+    private String goodsName;
+
+    /** 货品规格 */
+    @Schema(description = "货品规格")
+    private String goodsModel;
+
+    /** 提货开始时间 */
+    @Schema(description = "提货开始时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotBlank(message = "提货开始时间不能为空")
+    private String confStartTime;
+
+    /** 提货结束时间 */
+    @Schema(description = "提货结束时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotBlank(message = "提货结束时间不能为空")
+    private String confEndTime;
+
+    /** 可提重量(KG) */
+    @Schema(description = "可提重量", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "可提重量不能为空")
+    private Double confWeight;
+
+}

+ 35 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/goodsConf/param/BizGoodsConfIdParam.java

@@ -0,0 +1,35 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.biz.modular.goodsConf.param;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import jakarta.validation.constraints.NotBlank;
+
+/**
+ * 提货时间配置表Id参数
+ *
+ * @author sandy
+ * @date  2025/03/27 10:54
+ **/
+@Getter
+@Setter
+public class BizGoodsConfIdParam {
+
+    /** 主键 */
+    @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotBlank(message = "id不能为空")
+    private String id;
+}

+ 77 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/goodsConf/param/BizGoodsConfPageParam.java

@@ -0,0 +1,77 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.biz.modular.goodsConf.param;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 提货时间配置表查询参数
+ *
+ * @author sandy
+ * @date  2025/03/27 10:54
+ **/
+@Getter
+@Setter
+public class BizGoodsConfPageParam {
+
+    /** 当前页 */
+    @Schema(description = "当前页码")
+    private Integer current;
+
+    /** 每页条数 */
+    @Schema(description = "每页条数")
+    private Integer size;
+
+    /** 排序字段 */
+    @Schema(description = "排序字段,字段驼峰名称,如:userName")
+    private String sortField;
+
+    /** 排序方式 */
+    @Schema(description = "排序方式,升序:ASCEND;降序:DESCEND")
+    private String sortOrder;
+
+    /** 关键词 */
+    @Schema(description = "关键词")
+    private String searchKey;
+
+    /** 货品编码 */
+    @Schema(description = "货品编码")
+    private String goodsCode;
+
+    /** 货品名称 */
+    @Schema(description = "货品名称")
+    private String goodsName;
+
+    /** 重量(KG) */
+    @Schema(description = "重量(KG)")
+    private Double needWeight;
+
+    /** 提货开始时间开始 */
+    @Schema(description = "提货开始时间开始")
+    private String startConfStartTime;
+
+    /** 提货开始时间结束 */
+    @Schema(description = "提货开始时间结束")
+    private String endConfStartTime;
+
+    /** 提货结束时间开始 */
+    @Schema(description = "提货结束时间开始")
+    private String startConfEndTime;
+
+    /** 提货结束时间结束 */
+    @Schema(description = "提货结束时间结束")
+    private String endConfEndTime;
+
+}

+ 99 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/goodsConf/service/BizGoodsConfService.java

@@ -0,0 +1,99 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.biz.modular.goodsConf.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import vip.xiaonuo.biz.modular.goodsConf.entity.BizGoodsConf;
+import vip.xiaonuo.biz.modular.goodsConf.param.BizGoodsConfAddParam;
+import vip.xiaonuo.biz.modular.goodsConf.param.BizGoodsConfEditParam;
+import vip.xiaonuo.biz.modular.goodsConf.param.BizGoodsConfIdParam;
+import vip.xiaonuo.biz.modular.goodsConf.param.BizGoodsConfPageParam;
+
+import java.util.List;
+
+/**
+ * 提货时间配置表Service接口
+ *
+ * @author sandy
+ * @date  2025/03/27 10:54
+ **/
+public interface BizGoodsConfService extends IService<BizGoodsConf> {
+
+    /**
+     * 获取提货时间配置表分页
+     *
+     * @author sandy
+     * @date  2025/03/27 10:54
+     */
+    Page<BizGoodsConf> page(BizGoodsConfPageParam goodsConfPageParam);
+
+    /**
+     * 获取提货时间配置表
+     * 参数:goodsCode 货品编码  完全匹配
+     * 参数:goodsName 货品名称  完全匹配
+     * 参数:needWeight 需要重量  大于等于
+     * @author sandy
+     * @date  2025/03/27 10:54
+     */
+    List<BizGoodsConf> list(BizGoodsConfPageParam goodsConfPageParam);
+
+    /**
+     * 添加提货时间配置表
+     *
+     * @author sandy
+     * @date  2025/03/27 10:54
+     */
+    void add(BizGoodsConfAddParam goodsConfAddParam);
+
+    /**
+     * 编辑提货时间配置表
+     *
+     * @author sandy
+     * @date  2025/03/27 10:54
+     */
+    void edit(BizGoodsConfEditParam goodsConfEditParam);
+
+    /**
+     * 删除提货时间配置表
+     *
+     * @author sandy
+     * @date  2025/03/27 10:54
+     */
+    void delete(List<BizGoodsConfIdParam> goodsConfIdParamList);
+
+    /**
+     * 获取提货时间配置表详情
+     *
+     * @author sandy
+     * @date  2025/03/27 10:54
+     */
+    BizGoodsConf detail(BizGoodsConfIdParam goodsConfIdParam);
+
+    /**
+     * 获取提货时间配置表详情
+     *
+     * @author sandy
+     * @date  2025/03/27 10:54
+     **/
+    BizGoodsConf queryEntity(String id);
+
+    /**
+     * 更新已提货重量
+     *
+     * @author sandy
+     * @date  2025/03/27 17:54
+     **/
+    void editUsedWeight(String goodsConfId, Double newUsedWeight);
+
+}

+ 205 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/goodsConf/service/impl/BizGoodsConfServiceImpl.java

@@ -0,0 +1,205 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.biz.modular.goodsConf.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollStreamUtil;
+import cn.hutool.core.date.DateUnit;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.tencentcloudapi.ses.v20201002.models.Simple;
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.annotation.Resource;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import vip.xiaonuo.biz.modular.goods.entity.BizGoods;
+import vip.xiaonuo.biz.modular.goods.service.BizGoodsService;
+import vip.xiaonuo.biz.modular.goodsConf.enums.BizGoodsConfEnum;
+import vip.xiaonuo.common.enums.CommonSortOrderEnum;
+import vip.xiaonuo.common.exception.CommonException;
+import vip.xiaonuo.common.page.CommonPageRequest;
+import vip.xiaonuo.biz.modular.goodsConf.entity.BizGoodsConf;
+import vip.xiaonuo.biz.modular.goodsConf.mapper.BizGoodsConfMapper;
+import vip.xiaonuo.biz.modular.goodsConf.param.BizGoodsConfAddParam;
+import vip.xiaonuo.biz.modular.goodsConf.param.BizGoodsConfEditParam;
+import vip.xiaonuo.biz.modular.goodsConf.param.BizGoodsConfIdParam;
+import vip.xiaonuo.biz.modular.goodsConf.param.BizGoodsConfPageParam;
+import vip.xiaonuo.biz.modular.goodsConf.service.BizGoodsConfService;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 提货时间配置表Service接口实现类
+ *
+ * @author sandy
+ * @date  2025/03/27 10:54
+ **/
+@Service
+public class BizGoodsConfServiceImpl extends ServiceImpl<BizGoodsConfMapper, BizGoodsConf> implements BizGoodsConfService {
+
+    @Resource
+    private BizGoodsService bizGoodsService;
+
+    @Override
+    public Page<BizGoodsConf> page(BizGoodsConfPageParam goodsConfPageParam) {
+        QueryWrapper<BizGoodsConf> queryWrapper = new QueryWrapper<BizGoodsConf>().checkSqlInjection();
+        if(ObjectUtil.isNotEmpty(goodsConfPageParam.getGoodsName())) {
+            queryWrapper.lambda().like(BizGoodsConf::getGoodsName, goodsConfPageParam.getGoodsName());
+        }
+        if(ObjectUtil.isNotEmpty(goodsConfPageParam.getStartConfStartTime()) && ObjectUtil.isNotEmpty(goodsConfPageParam.getEndConfStartTime())) {
+            queryWrapper.lambda().between(BizGoodsConf::getConfStartTime, goodsConfPageParam.getStartConfStartTime(), goodsConfPageParam.getEndConfStartTime());
+        }
+        if(ObjectUtil.isNotEmpty(goodsConfPageParam.getStartConfEndTime()) && ObjectUtil.isNotEmpty(goodsConfPageParam.getEndConfEndTime())) {
+            queryWrapper.lambda().between(BizGoodsConf::getConfEndTime, goodsConfPageParam.getStartConfEndTime(), goodsConfPageParam.getEndConfEndTime());
+        }
+        queryWrapper.lambda().eq(BizGoodsConf::getDeleteFlag, BizGoodsConfEnum.NOT_DELETE.getValue());
+        if(ObjectUtil.isAllNotEmpty(goodsConfPageParam.getSortField(), goodsConfPageParam.getSortOrder())) {
+            CommonSortOrderEnum.validate(goodsConfPageParam.getSortOrder());
+            queryWrapper.orderBy(true, goodsConfPageParam.getSortOrder().equals(CommonSortOrderEnum.ASC.getValue()),
+                    StrUtil.toUnderlineCase(goodsConfPageParam.getSortField()));
+        } else {
+            queryWrapper.lambda().orderByDesc(BizGoodsConf::getConfStartTime).orderByDesc(BizGoodsConf::getConfEndTime).orderByDesc(BizGoodsConf::getId);
+        }
+        return this.page(CommonPageRequest.defaultPage(), queryWrapper);
+    }
+
+    @Override
+    public List<BizGoodsConf> list(BizGoodsConfPageParam goodsConfPageParam) {
+        QueryWrapper<BizGoodsConf> queryWrapper = new QueryWrapper<BizGoodsConf>().checkSqlInjection();
+        if(ObjectUtil.isNotEmpty(goodsConfPageParam.getGoodsCode())) {
+            queryWrapper.lambda().eq(BizGoodsConf::getGoodsCode, goodsConfPageParam.getGoodsCode());
+        }
+        if(ObjectUtil.isNotEmpty(goodsConfPageParam.getGoodsName())) {
+            queryWrapper.lambda().eq(BizGoodsConf::getGoodsName, goodsConfPageParam.getGoodsName());
+        }
+        queryWrapper.lambda().ge(BizGoodsConf::getConfStartTime, DateUtil.date());
+        queryWrapper.lambda().gt(BizGoodsConf::getConfEndTime, DateUtil.date());
+
+        if(ObjectUtil.isNotEmpty(goodsConfPageParam.getNeedWeight())) {
+            queryWrapper.lambda().ge(BizGoodsConf::getLastWeight, goodsConfPageParam.getNeedWeight());
+        }else{
+            queryWrapper.lambda().gt(BizGoodsConf::getLastWeight, 0);
+        }
+        queryWrapper.lambda().eq(BizGoodsConf::getDeleteFlag, BizGoodsConfEnum.NOT_DELETE.getValue());
+        queryWrapper.lambda().orderByAsc(BizGoodsConf::getConfStartTime).orderByAsc(BizGoodsConf::getConfEndTime).orderByAsc(BizGoodsConf::getId);
+        return this.list(queryWrapper);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void add(BizGoodsConfAddParam goodsConfAddParam) {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        String goodsJson = goodsConfAddParam.getGoodsJson();
+        if (ObjectUtil.isNotEmpty(goodsJson)) {
+
+            JSONUtil.parseArray(goodsJson).forEach(object -> {
+                JSONObject jsonObject = JSONUtil.parseObj(object);
+                String goodsId = jsonObject.getStr("goodsId");
+                Double confWeight = jsonObject.getDouble("confWeight");
+                if (ObjectUtil.isNotEmpty(goodsId)) {
+                    // 查询货品
+                    BizGoods bizGoods = this.bizGoodsService.queryEntity(goodsId);
+                    if (ObjectUtil.isNotEmpty(bizGoods)) {
+                        BizGoodsConf goodsConf = new BizGoodsConf();
+                        try {
+                            /** 提货开始时间 */
+                            goodsConf.setConfStartTime(sdf.parse(goodsConfAddParam.getConfStartTime()));
+                            /** 提货结束时间 */
+                            goodsConf.setConfEndTime(sdf.parse(goodsConfAddParam.getConfEndTime()));
+                        } catch (ParseException e) {
+                            throw new RuntimeException(e);
+                        }
+                        /** 货物id */
+                        goodsConf.setGoodsId(goodsId);
+                        /** 货品编码 */
+                        goodsConf.setGoodsCode(bizGoods.getGoodsCode());
+                        /** 货品名称 */
+                        goodsConf.setGoodsName(bizGoods.getGoodsName());
+                        /** 货品规格 */
+                        goodsConf.setGoodsModel(bizGoods.getGoodsModel());
+                        /** 可提重量(KG) */
+                        goodsConf.setConfWeight(confWeight);
+                        /** 已提重量(KG) */
+                        goodsConf.setUsedWeight(0.0);
+                        /** 剩余提货重量(KG) */
+                        goodsConf.setLastWeight(goodsConf.getConfWeight());
+                        this.save(goodsConf);
+                    }
+                }
+            });
+        }
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void edit(BizGoodsConfEditParam goodsConfEditParam) {
+        BizGoodsConf goodsConf = this.queryEntity(goodsConfEditParam.getId());
+        BeanUtil.copyProperties(goodsConfEditParam, goodsConf);
+        /** 可提重量(KG) */
+        Double confWeight = goodsConf.getConfWeight();
+        /** 已提重量(KG) */
+        Double usedWeight = goodsConf.getUsedWeight();
+        /** 剩余提货重量(KG) */
+        goodsConf.setLastWeight(confWeight-usedWeight);
+        this.updateById(goodsConf);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void delete(List<BizGoodsConfIdParam> goodsConfIdParamList) {
+        // 执行删除
+        this.removeByIds(CollStreamUtil.toList(goodsConfIdParamList, BizGoodsConfIdParam::getId));
+    }
+
+    @Override
+    public BizGoodsConf detail(BizGoodsConfIdParam goodsConfIdParam) {
+        return this.queryEntity(goodsConfIdParam.getId());
+    }
+
+    @Override
+    public BizGoodsConf queryEntity(String id) {
+        BizGoodsConf goodsConf = this.getById(id);
+        if(ObjectUtil.isEmpty(goodsConf)) {
+            throw new CommonException("提货时间配置表不存在,id值为:{}", id);
+        }
+        return goodsConf;
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void editUsedWeight(String goodsConfId, Double newUsedWeight) {
+        BizGoodsConf goodsConf = this.queryEntity(goodsConfId);
+        if(null != goodsConf){
+            /** 最大可提货重量(KG) */
+            Double confWeight = goodsConf.getConfWeight();
+            /** 原已提重量(KG) */
+            Double usedWeight = goodsConf.getUsedWeight();
+            usedWeight = usedWeight + newUsedWeight;
+            // 更新已提货重量
+            goodsConf.setUsedWeight(usedWeight);
+            /** 剩余提货重量(KG) */
+            goodsConf.setLastWeight(confWeight-usedWeight);
+            this.updateById(goodsConf);
+        }
+    }
+
+}

+ 121 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/supplier/controller/BizSupplierController.java

@@ -0,0 +1,121 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.biz.modular.supplier.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+import vip.xiaonuo.common.annotation.CommonLog;
+import vip.xiaonuo.common.pojo.CommonResult;
+import vip.xiaonuo.biz.modular.supplier.entity.BizSupplier;
+import vip.xiaonuo.biz.modular.supplier.param.BizSupplierAddParam;
+import vip.xiaonuo.biz.modular.supplier.param.BizSupplierEditParam;
+import vip.xiaonuo.biz.modular.supplier.param.BizSupplierIdParam;
+import vip.xiaonuo.biz.modular.supplier.param.BizSupplierPageParam;
+import vip.xiaonuo.biz.modular.supplier.service.BizSupplierService;
+
+import jakarta.annotation.Resource;
+import jakarta.validation.Valid;
+import jakarta.validation.constraints.NotEmpty;
+import java.util.List;
+
+/**
+ * 供货商控制器
+ *
+ * @author fanzherong
+ * @date  2025/03/21 10:38
+ */
+@Tag(name = "供货商控制器")
+@RestController
+@Validated
+public class BizSupplierController {
+
+    @Resource
+    private BizSupplierService bizSupplierService;
+
+    /**
+     * 获取供货商分页
+     *
+     * @author fanzherong
+     * @date  2025/03/21 10:38
+     */
+    @Operation(summary = "获取供货商分页")
+    @GetMapping("/biz/supplier/page")
+    public CommonResult<Page<BizSupplier>> page(BizSupplierPageParam bizSupplierPageParam) {
+        return CommonResult.data(bizSupplierService.page(bizSupplierPageParam));
+    }
+
+    /**
+     * 添加供货商
+     *
+     * @author fanzherong
+     * @date  2025/03/21 10:38
+     */
+    @Operation(summary = "添加供货商")
+    @CommonLog("添加供货商")
+    @SaCheckPermission("/biz/supplier/add")
+    @PostMapping("/biz/supplier/add")
+    public CommonResult<String> add(@RequestBody @Valid BizSupplierAddParam bizSupplierAddParam) {
+        bizSupplierService.add(bizSupplierAddParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 编辑供货商
+     *
+     * @author fanzherong
+     * @date  2025/03/21 10:38
+     */
+    @Operation(summary = "编辑供货商")
+    @CommonLog("编辑供货商")
+    @SaCheckPermission("/biz/supplier/edit")
+    @PostMapping("/biz/supplier/edit")
+    public CommonResult<String> edit(@RequestBody @Valid BizSupplierEditParam bizSupplierEditParam) {
+        bizSupplierService.edit(bizSupplierEditParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 删除供货商
+     *
+     * @author fanzherong
+     * @date  2025/03/21 10:38
+     */
+    @Operation(summary = "删除供货商")
+    @CommonLog("删除供货商")
+    @SaCheckPermission("/biz/supplier/delete")
+    @PostMapping("/biz/supplier/delete")
+    public CommonResult<String> delete(@RequestBody @Valid @NotEmpty(message = "集合不能为空")
+                                                   List<BizSupplierIdParam> bizSupplierIdParamList) {
+        bizSupplierService.delete(bizSupplierIdParamList);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 获取供货商详情
+     *
+     * @author fanzherong
+     * @date  2025/03/21 10:38
+     */
+    @Operation(summary = "获取供货商详情")
+    @GetMapping("/biz/supplier/detail")
+    public CommonResult<BizSupplier> detail(@Valid BizSupplierIdParam bizSupplierIdParam) {
+        return CommonResult.data(bizSupplierService.detail(bizSupplierIdParam));
+    }
+}

+ 56 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/supplier/entity/BizSupplier.java

@@ -0,0 +1,56 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.biz.modular.supplier.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+import vip.xiaonuo.common.pojo.CommonEntity;
+
+/**
+ * 供货商实体
+ *
+ * @author fanzherong
+ * @date  2025/03/21 10:38
+ **/
+@Getter
+@Setter
+@TableName("biz_supplier")
+public class BizSupplier extends CommonEntity {
+
+    /** 主键ID */
+    @TableId
+    @Schema(description = "主键ID")
+    private String id;
+
+    /** 供货商名称 */
+    @Schema(description = "供货商名称")
+    private String supplierName;
+
+    /** 联系人 */
+    @Schema(description = "联系人")
+    private String supplierContactName;
+
+    /** 供货商手机号 */
+    @Schema(description = "供货商手机号")
+    private String supplierPhone;
+
+    /** 供货商地址 */
+    @Schema(description = "供货商地址")
+    private String supplierAddress;
+
+    /** 备注 */
+    @Schema(description = "备注")
+    private String supplierRemark;
+}

+ 34 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/supplier/enums/BizSupplierEnum.java

@@ -0,0 +1,34 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.biz.modular.supplier.enums;
+
+import lombok.Getter;
+
+/**
+ * 供货商枚举
+ *
+ * @author fanzherong
+ * @date  2025/03/21 10:38
+ **/
+@Getter
+public enum BizSupplierEnum {
+
+    /** 测试 */
+    TEST("TEST");
+
+    private final String value;
+
+    BizSupplierEnum(String value) {
+        this.value = value;
+    }
+}

+ 25 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/supplier/mapper/BizSupplierMapper.java

@@ -0,0 +1,25 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.biz.modular.supplier.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import vip.xiaonuo.biz.modular.supplier.entity.BizSupplier;
+
+/**
+ * 供货商Mapper接口
+ *
+ * @author fanzherong
+ * @date  2025/03/21 10:38
+ **/
+public interface BizSupplierMapper extends BaseMapper<BizSupplier> {
+}

+ 5 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/supplier/mapper/mapping/BizSupplierMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="vip.xiaonuo.biz.modular.supplier.mapper.BizSupplierMapper">
+
+</mapper>

+ 52 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/supplier/param/BizSupplierAddParam.java

@@ -0,0 +1,52 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.biz.modular.supplier.param;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import jakarta.validation.constraints.NotBlank;
+
+/**
+ * 供货商添加参数
+ *
+ * @author fanzherong
+ * @date  2025/03/21 10:38
+ **/
+@Getter
+@Setter
+public class BizSupplierAddParam {
+
+    /** 供货商名称 */
+    @Schema(description = "供货商名称", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotBlank(message = "supplierName不能为空")
+    private String supplierName;
+
+    /** 联系人 */
+    @Schema(description = "联系人")
+    private String supplierContactName;
+
+    /** 供货商手机号 */
+    @Schema(description = "供货商手机号", requiredMode = Schema.RequiredMode.REQUIRED)
+    private String supplierPhone;
+
+    /** 供货商地址 */
+    @Schema(description = "供货商地址")
+    private String supplierAddress;
+
+    /** 备注 */
+    @Schema(description = "备注")
+    private String supplierRemark;
+
+}

+ 57 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/supplier/param/BizSupplierEditParam.java

@@ -0,0 +1,57 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.biz.modular.supplier.param;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import jakarta.validation.constraints.NotBlank;
+
+/**
+ * 供货商编辑参数
+ *
+ * @author fanzherong
+ * @date  2025/03/21 10:38
+ **/
+@Getter
+@Setter
+public class BizSupplierEditParam {
+
+    /** 主键ID */
+    @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotBlank(message = "id不能为空")
+    private String id;
+
+    /** 供货商名称 */
+    @Schema(description = "供货商名称", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotBlank(message = "supplierName不能为空")
+    private String supplierName;
+
+    /** 联系人 */
+    @Schema(description = "联系人")
+    private String supplierContactName;
+
+    /** 供货商手机号 */
+    @Schema(description = "供货商手机号", requiredMode = Schema.RequiredMode.REQUIRED)
+    private String supplierPhone;
+
+    /** 供货商地址 */
+    @Schema(description = "供货商地址")
+    private String supplierAddress;
+
+    /** 备注 */
+    @Schema(description = "备注")
+    private String supplierRemark;
+
+}

+ 35 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/supplier/param/BizSupplierIdParam.java

@@ -0,0 +1,35 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.biz.modular.supplier.param;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import jakarta.validation.constraints.NotBlank;
+
+/**
+ * 供货商Id参数
+ *
+ * @author fanzherong
+ * @date  2025/03/21 10:38
+ **/
+@Getter
+@Setter
+public class BizSupplierIdParam {
+
+    /** 主键ID */
+    @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotBlank(message = "id不能为空")
+    private String id;
+}

+ 49 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/supplier/param/BizSupplierPageParam.java

@@ -0,0 +1,49 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.biz.modular.supplier.param;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 供货商查询参数
+ *
+ * @author fanzherong
+ * @date  2025/03/21 10:38
+ **/
+@Getter
+@Setter
+public class BizSupplierPageParam {
+
+    /** 当前页 */
+    @Schema(description = "当前页码")
+    private Integer current;
+
+    /** 每页条数 */
+    @Schema(description = "每页条数")
+    private Integer size;
+
+    /** 排序字段 */
+    @Schema(description = "排序字段,字段驼峰名称,如:userName")
+    private String sortField;
+
+    /** 排序方式 */
+    @Schema(description = "排序方式,升序:ASCEND;降序:DESCEND")
+    private String sortOrder;
+
+    /** 关键词 */
+    @Schema(description = "关键词")
+    private String searchKey;
+
+}

+ 80 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/supplier/service/BizSupplierService.java

@@ -0,0 +1,80 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.biz.modular.supplier.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import vip.xiaonuo.biz.modular.supplier.entity.BizSupplier;
+import vip.xiaonuo.biz.modular.supplier.param.BizSupplierAddParam;
+import vip.xiaonuo.biz.modular.supplier.param.BizSupplierEditParam;
+import vip.xiaonuo.biz.modular.supplier.param.BizSupplierIdParam;
+import vip.xiaonuo.biz.modular.supplier.param.BizSupplierPageParam;
+
+import java.util.List;
+
+/**
+ * 供货商Service接口
+ *
+ * @author fanzherong
+ * @date  2025/03/21 10:38
+ **/
+public interface BizSupplierService extends IService<BizSupplier> {
+
+    /**
+     * 获取供货商分页
+     *
+     * @author fanzherong
+     * @date  2025/03/21 10:38
+     */
+    Page<BizSupplier> page(BizSupplierPageParam bizSupplierPageParam);
+
+    /**
+     * 添加供货商
+     *
+     * @author fanzherong
+     * @date  2025/03/21 10:38
+     */
+    void add(BizSupplierAddParam bizSupplierAddParam);
+
+    /**
+     * 编辑供货商
+     *
+     * @author fanzherong
+     * @date  2025/03/21 10:38
+     */
+    void edit(BizSupplierEditParam bizSupplierEditParam);
+
+    /**
+     * 删除供货商
+     *
+     * @author fanzherong
+     * @date  2025/03/21 10:38
+     */
+    void delete(List<BizSupplierIdParam> bizSupplierIdParamList);
+
+    /**
+     * 获取供货商详情
+     *
+     * @author fanzherong
+     * @date  2025/03/21 10:38
+     */
+    BizSupplier detail(BizSupplierIdParam bizSupplierIdParam);
+
+    /**
+     * 获取供货商详情
+     *
+     * @author fanzherong
+     * @date  2025/03/21 10:38
+     **/
+    BizSupplier queryEntity(String id);
+}

+ 115 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/supplier/service/impl/BizSupplierServiceImpl.java

@@ -0,0 +1,115 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.biz.modular.supplier.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollStreamUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.PhoneUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import vip.xiaonuo.common.exception.CommonException;
+import vip.xiaonuo.common.page.CommonPageRequest;
+import vip.xiaonuo.biz.modular.supplier.entity.BizSupplier;
+import vip.xiaonuo.biz.modular.supplier.mapper.BizSupplierMapper;
+import vip.xiaonuo.biz.modular.supplier.param.BizSupplierAddParam;
+import vip.xiaonuo.biz.modular.supplier.param.BizSupplierEditParam;
+import vip.xiaonuo.biz.modular.supplier.param.BizSupplierIdParam;
+import vip.xiaonuo.biz.modular.supplier.param.BizSupplierPageParam;
+import vip.xiaonuo.biz.modular.supplier.service.BizSupplierService;
+
+import java.util.List;
+
+/**
+ * 供货商Service接口实现类
+ *
+ * @author fanzherong
+ * @date  2025/03/21 10:38
+ **/
+@Service
+public class BizSupplierServiceImpl extends ServiceImpl<BizSupplierMapper, BizSupplier> implements BizSupplierService {
+
+    @Override
+    public Page<BizSupplier> page(BizSupplierPageParam bizSupplierPageParam) {
+        QueryWrapper<BizSupplier> queryWrapper = new QueryWrapper<BizSupplier>().checkSqlInjection();
+        if(ObjectUtil.isNotEmpty(bizSupplierPageParam.getSearchKey())){
+            queryWrapper.lambda().like(BizSupplier::getSupplierName,bizSupplierPageParam.getSearchKey());
+        }
+        queryWrapper.lambda().orderByDesc(BizSupplier::getCreateTime);
+        return this.page(CommonPageRequest.defaultPage(), queryWrapper);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void add(BizSupplierAddParam bizSupplierAddParam) {
+        //校验手机号格式
+        if(ObjectUtil.isNotEmpty(bizSupplierAddParam.getSupplierPhone())){
+            if(!PhoneUtil.isMobile(bizSupplierAddParam.getSupplierPhone())) {
+                throw new CommonException("手机号码:{}格式错误", bizSupplierAddParam.getSupplierPhone());
+            }
+        }
+        //判断供货商是否存在
+        long count = this.count(new QueryWrapper<BizSupplier>().lambda().eq(BizSupplier::getSupplierName, bizSupplierAddParam.getSupplierName()));
+        if(count>0){
+            throw new CommonException("供货商已存在!");
+        }
+        BizSupplier bizSupplier = BeanUtil.toBean(bizSupplierAddParam, BizSupplier.class);
+        this.save(bizSupplier);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void edit(BizSupplierEditParam bizSupplierEditParam) {
+        //校验手机号格式
+        if(ObjectUtil.isNotEmpty(bizSupplierEditParam.getSupplierPhone())){
+            if(!PhoneUtil.isMobile(bizSupplierEditParam.getSupplierPhone())) {
+                throw new CommonException("手机号码:{}格式错误", bizSupplierEditParam.getSupplierPhone());
+            }
+        }
+        BizSupplier bizSupplier = this.queryEntity(bizSupplierEditParam.getId());
+        if(!StringUtils.equals(bizSupplier.getSupplierName(),bizSupplierEditParam.getSupplierName())){
+            //修改过供货商名称,判断供货商是否存在
+            long count = this.count(new QueryWrapper<BizSupplier>().lambda().eq(BizSupplier::getSupplierName, bizSupplierEditParam.getSupplierName()));
+            if(count>0){
+                throw new CommonException("供货商已存在!");
+            }
+        }
+        BeanUtil.copyProperties(bizSupplierEditParam, bizSupplier);
+        this.updateById(bizSupplier);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void delete(List<BizSupplierIdParam> bizSupplierIdParamList) {
+        // 执行删除
+        this.removeByIds(CollStreamUtil.toList(bizSupplierIdParamList, BizSupplierIdParam::getId));
+    }
+
+    @Override
+    public BizSupplier detail(BizSupplierIdParam bizSupplierIdParam) {
+        return this.queryEntity(bizSupplierIdParam.getId());
+    }
+
+    @Override
+    public BizSupplier queryEntity(String id) {
+        BizSupplier bizSupplier = this.getById(id);
+        if(ObjectUtil.isEmpty(bizSupplier)) {
+            throw new CommonException("供货商不存在,id值为:{}", id);
+        }
+        return bizSupplier;
+    }
+}