From 02452f33ce18738c10a79566afb025cd03362393 Mon Sep 17 00:00:00 2001
From: huminmin <mac@MacBook-Pro.local>
Date: 星期四, 28 五月 2026 10:37:32 +0800
Subject: [PATCH] 厂家管理

---
 src/main/java/com/ruoyi/stock/pojo/StockInventory.java                  |    3 
 src/main/java/com/ruoyi/stock/service/impl/ManufacturerServiceImpl.java |  130 ++++++++++
 src/main/java/com/ruoyi/stock/execl/ManufacturerExcelDto.java           |   35 ++
 src/main/java/com/ruoyi/stock/dto/ManufacturerDto.java                  |   12 +
 src/main/java/com/ruoyi/stock/mapper/ManufacturerMapper.java            |   29 ++
 src/main/java/com/ruoyi/stock/pojo/Manufacturer.java                    |  143 +++++++++++
 src/main/java/com/ruoyi/stock/controller/ManufacturerController.java    |  152 ++++++++++++
 doc/万通新型建材.sql                                                          |   29 ++
 src/main/java/com/ruoyi/stock/service/ManufacturerService.java          |   71 +++++
 src/main/resources/mapper/stock/ManufacturerMapper.xml                  |   93 +++++++
 src/main/java/com/ruoyi/basic/enums/RecordTypeEnum.java                 |    1 
 11 files changed, 698 insertions(+), 0 deletions(-)

diff --git "a/doc/\344\270\207\351\200\232\346\226\260\345\236\213\345\273\272\346\235\220.sql" "b/doc/\344\270\207\351\200\232\346\226\260\345\236\213\345\273\272\346\235\220.sql"
index 508e3d5..d9a8a9b 100644
--- "a/doc/\344\270\207\351\200\232\346\226\260\345\236\213\345\273\272\346\235\220.sql"
+++ "b/doc/\344\270\207\351\200\232\346\226\260\345\236\213\345\273\272\346\235\220.sql"
@@ -1,3 +1,4 @@
+## 琛ヨ创閰嶇疆
 drop table if exists subsidy_configuration;
 create table subsidy_configuration
 (
@@ -14,3 +15,31 @@
     add night_days decimal(16, 4) default 0 not null comment '澶滅彮澶╂暟',
     add meal_amount decimal(16, 4) default 0 not null comment '椁愯ˉ',
     add night_amount decimal(16, 4) default 0 not null comment '澶滅彮琛ヨ创';
+
+## 鐢熶骇鍘傚晢
+drop table if exists manufacturer;
+create table manufacturer
+(
+    id                          bigint auto_increment
+        primary key,
+    name               varchar(255) not null default '' comment '鍘傚晢鍚嶇О',
+    taxpayer_identification_num varchar(128) not null default '' comment '绾崇◣浜鸿瘑鍒彿',
+    company_address             varchar(255) not null default '' comment '鍘傚晢鍦板潃',
+    type                        varchar(25) not null default '' comment '鍘傚晢绫诲瀷',
+    company_phone               varchar(64) not null default '' comment '鍘傚晢鐢佃瘽',
+    bank_account_name           varchar(128) not null default '' comment '閾惰璐︽埛鍚嶇О',
+    bank_account_num            varchar(128) not null default '' comment '閾惰璐︽埛鍙风爜',
+    contact_user_name           varchar(255) not null default '' comment '鑱旂郴浜哄鍚�',
+    contact_user_phone          varchar(128) not null default '' comment '鑱旂郴浜虹數璇�',
+    maintain_user_id            bigint not null default 0 comment '缁存姢浜篒D',
+    maintain_time               datetime null comment '缁存姢鏃堕棿',
+    create_time                 datetime null comment '鍒涘缓鏃堕棿',
+    create_user                 bigint not null default 0 comment '鍒涘缓浜篒D',
+    update_time                 datetime null comment '鏇存柊鏃堕棿',
+    update_user                 bigint not null default 0 comment '鏇存柊浜篒D',
+    tenant_id                   bigint not null default 0 comment '绉熸埛ID',
+    is_white                    bigint not null default 0 comment '鏄惁鐧藉悕鍗�'
+);
+
+alter table stock_inventory
+    add manufacturer_id bigint not null default 0 comment '鍘傚晢id';
diff --git a/src/main/java/com/ruoyi/basic/enums/RecordTypeEnum.java b/src/main/java/com/ruoyi/basic/enums/RecordTypeEnum.java
index 506a9d8..a9929b4 100644
--- a/src/main/java/com/ruoyi/basic/enums/RecordTypeEnum.java
+++ b/src/main/java/com/ruoyi/basic/enums/RecordTypeEnum.java
@@ -33,6 +33,7 @@
     STOCK_UNINVENTORY("stock_uninventory"),
     STOCK_INVENTORY("stock_inventory"),
     STOCK_IN_RECORD("stock_in_record"),
+    MANUFACTURER("manufacturer"),
     // Staff
     STAFF_WORK_EXPERIENCE("staff_work_experience"),
     STAFF_SALARY_MAIN("staff_salary_main"),
diff --git a/src/main/java/com/ruoyi/stock/controller/ManufacturerController.java b/src/main/java/com/ruoyi/stock/controller/ManufacturerController.java
new file mode 100644
index 0000000..2c567a4
--- /dev/null
+++ b/src/main/java/com/ruoyi/stock/controller/ManufacturerController.java
@@ -0,0 +1,152 @@
+package com.ruoyi.stock.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.framework.aspectj.lang.annotation.Log;
+import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
+import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.stock.dto.ManufacturerDto;
+import com.ruoyi.stock.pojo.Manufacturer;
+import com.ruoyi.stock.service.ManufacturerService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.servlet.http.HttpServletResponse;
+import lombok.AllArgsConstructor;
+import org.springframework.util.CollectionUtils;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 鍘傚鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-05-28 09:52:35
+ */
+@RestController
+@RequestMapping("/stock/manufacturer")
+@AllArgsConstructor
+@Tag(name = "鍘傚绠$悊")
+public class ManufacturerController {
+
+    private ManufacturerService manufacturerService;
+
+    /**
+     * 鍘傚鏂板
+     * @param manufacturer
+     * @return
+     */
+    @PostMapping("/add")
+    @Log(title = "鍘傚-鏂板", businessType = BusinessType.INSERT)
+    @Operation(summary = "鏂板鍘傚")
+    public AjaxResult add(@RequestBody Manufacturer manufacturer) {
+        manufacturerService.saveManufacturer(manufacturer);
+        return AjaxResult.success();
+    }
+
+    /**
+     * 鍘傚鍒犻櫎
+     * @param ids
+     * @return
+     */
+    @DeleteMapping("/del")
+    @Log(title = "鍘傚-鍒犻櫎", businessType = BusinessType.DELETE)
+    @Operation(summary = "鍒犻櫎鍘傚")
+    public AjaxResult delManufacturer(@RequestBody List<Long> ids) {
+        if(CollectionUtils.isEmpty(ids)){
+            return AjaxResult.error("璇烽�夋嫨鑷冲皯涓�鏉℃暟鎹�");
+        }
+        manufacturerService.delManufacturer(ids);
+        return AjaxResult.success();
+    }
+
+    /**
+     * 鍘傚璇︽儏
+     * @param id
+     * @return
+     */
+    @GetMapping("/{id}")
+    @Log(title = "鍘傚-璇︽儏", businessType = BusinessType.OTHER)
+    @Operation(summary = "鍘傚璇︽儏")
+    public AjaxResult manufacturerDetail(@PathVariable("id") Long id) {
+        return AjaxResult.success(manufacturerService.manufacturerDetail(id));
+    }
+
+    /**
+     * 鍘傚淇敼
+     * @param manufacturer
+     * @return
+     */
+    @PostMapping("/update")
+    @Log(title = "鍘傚-淇敼", businessType = BusinessType.UPDATE)
+    @Operation(summary = "淇敼鍘傚")
+    public AjaxResult update(@RequestBody Manufacturer manufacturer) {
+        manufacturerService.manufacturerUpdate(manufacturer);
+        return AjaxResult.success();
+    }
+
+    /**
+     * 鍘傚绠$悊鍒嗛〉鏌ヨ
+     * @param page
+     * @param manufacturerDto
+     * @return
+     */
+    @GetMapping("/listPage")
+    @Log(title = "鍘傚-鍒嗛〉鏌ヨ", businessType = BusinessType.OTHER)
+    @Operation(summary = "鍘傚鍒嗛〉鏌ヨ")
+    public AjaxResult manufacturerListPage(Page page, ManufacturerDto manufacturerDto) {
+        return AjaxResult.success(manufacturerService.manufacturerListPage(page, manufacturerDto));
+    }
+
+    /**
+     * 鍘傚瀵煎嚭
+     * @param response
+     * @param manufacturerDto
+     */
+    @PostMapping("/export")
+    @Log(title = "鍘傚-瀵煎嚭", businessType = BusinessType.EXPORT)
+    @Operation(summary = "鍘傚瀵煎嚭")
+    public void manufacturerExport(HttpServletResponse response, ManufacturerDto manufacturerDto) {
+        manufacturerService.manufacturerExport(response, manufacturerDto);
+    }
+
+    /**
+     * 涓嬭浇妯℃澘
+     * @param response
+     */
+    @PostMapping("/downloadTemplate")
+    @Log(title = "鍘傚-涓嬭浇妯℃澘", businessType = BusinessType.EXPORT)
+    @Operation(summary = "涓嬭浇鍘傚妯℃澘")
+    public void downloadTemplate(HttpServletResponse response) {
+        ExcelUtil<Manufacturer> util = new ExcelUtil<>(Manufacturer.class);
+        util.importTemplateExcel(response, "鍘傚妗f妯℃澘");
+    }
+
+    /**
+     * 鍘傚瀵煎叆
+     */
+    @PostMapping("/import")
+    @Log(title = "鍘傚-瀵煎叆", businessType = BusinessType.IMPORT)
+    @Operation(summary = "瀵煎叆鍘傚")
+    public AjaxResult importData(MultipartFile file) {
+        Boolean b = manufacturerService.importData(file);
+        if (b) {
+            return AjaxResult.success("瀵煎叆鎴愬姛");
+        }
+        return AjaxResult.error("瀵煎叆澶辫触");
+    }
+
+    /**
+     * 鍘傚閫夐」鎺ュ彛
+     * @return
+     */
+    @GetMapping("/getOptions")
+    @Log(title = "鍘傚-閫夐」鎺ュ彛", businessType = BusinessType.OTHER)
+    @Operation(summary = "鑾峰彇鍘傚閫夐」")
+    public AjaxResult getOptions() {
+        return AjaxResult.success(manufacturerService.list());
+    }
+}
diff --git a/src/main/java/com/ruoyi/stock/dto/ManufacturerDto.java b/src/main/java/com/ruoyi/stock/dto/ManufacturerDto.java
new file mode 100644
index 0000000..ee06ccb
--- /dev/null
+++ b/src/main/java/com/ruoyi/stock/dto/ManufacturerDto.java
@@ -0,0 +1,12 @@
+package com.ruoyi.stock.dto;
+
+import com.ruoyi.stock.pojo.Manufacturer;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Data
+public class ManufacturerDto extends Manufacturer {
+
+    @Schema(description = "缁存姢浜哄憳鍚嶇О")
+    private String maintainUserName;
+}
diff --git a/src/main/java/com/ruoyi/stock/execl/ManufacturerExcelDto.java b/src/main/java/com/ruoyi/stock/execl/ManufacturerExcelDto.java
new file mode 100644
index 0000000..39c6b39
--- /dev/null
+++ b/src/main/java/com/ruoyi/stock/execl/ManufacturerExcelDto.java
@@ -0,0 +1,35 @@
+package com.ruoyi.stock.execl;
+
+import com.ruoyi.framework.aspectj.lang.annotation.Excel;
+import lombok.Data;
+
+@Data
+public class ManufacturerExcelDto {
+
+    @Excel(name = "鍘傚鍚嶇О")
+    private String name;
+
+    @Excel(name = "绾崇◣浜鸿瘑鍒彿")
+    private String taxpayerIdentificationNum;
+
+    @Excel(name = "鍏徃鍦板潃")
+    private String companyAddress;
+
+    @Excel(name = "鍏徃鐢佃瘽")
+    private String companyPhone;
+
+    @Excel(name = "寮�鎴疯")
+    private String bankAccountName;
+
+    @Excel(name = "璐﹀彿")
+    private String bankAccountNum;
+
+    @Excel(name = "鑱旂郴浜�")
+    private String contactUserName;
+
+    @Excel(name = "鑱旂郴鐢佃瘽")
+    private String contactUserPhone;
+
+    @Excel(name = "缁存姢浜�")
+    private String maintainUserName;
+}
diff --git a/src/main/java/com/ruoyi/stock/mapper/ManufacturerMapper.java b/src/main/java/com/ruoyi/stock/mapper/ManufacturerMapper.java
new file mode 100644
index 0000000..d519f8d
--- /dev/null
+++ b/src/main/java/com/ruoyi/stock/mapper/ManufacturerMapper.java
@@ -0,0 +1,29 @@
+package com.ruoyi.stock.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.basic.dto.SupplierManageDto;
+import com.ruoyi.basic.pojo.SupplierManage;
+import com.ruoyi.stock.dto.ManufacturerDto;
+import com.ruoyi.stock.execl.ManufacturerExcelDto;
+import com.ruoyi.stock.pojo.Manufacturer;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * <p>
+ *  Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-05-28 09:52:35
+ */
+@Mapper
+public interface ManufacturerMapper extends BaseMapper<Manufacturer> {
+    IPage<Manufacturer> manufacturerListPage(Page page, @Param("manufacturerDto") ManufacturerDto manufacturerDto);
+
+    List<ManufacturerExcelDto> manufacturerExportList(@Param("manufacturerDto") ManufacturerDto manufacturerDto);
+}
diff --git a/src/main/java/com/ruoyi/stock/pojo/Manufacturer.java b/src/main/java/com/ruoyi/stock/pojo/Manufacturer.java
new file mode 100644
index 0000000..56adea9
--- /dev/null
+++ b/src/main/java/com/ruoyi/stock/pojo/Manufacturer.java
@@ -0,0 +1,143 @@
+package com.ruoyi.stock.pojo;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-05-28 09:52:35
+ */
+@Getter
+@Setter
+@ToString
+@TableName("manufacturer")
+@ApiModel(value = "Manufacturer瀵硅薄", description = "")
+public class Manufacturer implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 鍘傚晢鍚嶇О
+     */
+    @ApiModelProperty("鍘傚晢鍚嶇О")
+    private String name;
+
+    /**
+     * 绾崇◣浜鸿瘑鍒彿
+     */
+    @ApiModelProperty("绾崇◣浜鸿瘑鍒彿")
+    private String taxpayerIdentificationNum;
+
+    /**
+     * 鍘傚晢鍦板潃
+     */
+    @ApiModelProperty("鍘傚晢鍦板潃")
+    private String companyAddress;
+
+    /**
+     * 鍘傚晢绫诲瀷
+     */
+    @ApiModelProperty("鍘傚晢绫诲瀷")
+    private String type;
+
+    /**
+     * 鍘傚晢鐢佃瘽
+     */
+    @ApiModelProperty("鍘傚晢鐢佃瘽")
+    private String companyPhone;
+
+    /**
+     * 閾惰璐︽埛鍚嶇О
+     */
+    @ApiModelProperty("閾惰璐︽埛鍚嶇О")
+    private String bankAccountName;
+
+    /**
+     * 閾惰璐︽埛鍙风爜
+     */
+    @ApiModelProperty("閾惰璐︽埛鍙风爜")
+    private String bankAccountNum;
+
+    /**
+     * 鑱旂郴浜哄鍚�
+     */
+    @ApiModelProperty("鑱旂郴浜哄鍚�")
+    private String contactUserName;
+
+    /**
+     * 鑱旂郴浜虹數璇�
+     */
+    @ApiModelProperty("鑱旂郴浜虹數璇�")
+    private String contactUserPhone;
+
+    /**
+     * 缁存姢浜篒D
+     */
+    @ApiModelProperty("缁存姢浜篒D")
+    private Long maintainUserId;
+
+    /**
+     * 缁存姢鏃堕棿
+     */
+    @ApiModelProperty("缁存姢鏃堕棿")
+    private LocalDateTime maintainTime;
+
+    /**
+     * 鍒涘缓鏃堕棿
+     */
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    /**
+     * 鍒涘缓浜篒D
+     */
+    @ApiModelProperty("鍒涘缓浜篒D")
+    @TableField(fill = FieldFill.INSERT)
+    private Long createUser;
+
+    /**
+     * 鏇存柊鏃堕棿
+     */
+    @ApiModelProperty("鏇存柊鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    /**
+     * 鏇存柊浜篒D
+     */
+    @ApiModelProperty("鏇存柊浜篒D")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Long updateUser;
+
+    /**
+     * 绉熸埛ID
+     */
+    @ApiModelProperty("绉熸埛ID")
+    @TableField(fill = FieldFill.INSERT)
+    private Long tenantId;
+
+    /**
+     * 鏄惁鐧藉悕鍗�
+     */
+    @ApiModelProperty("鏄惁鐧藉悕鍗�")
+    private Long isWhite;
+}
diff --git a/src/main/java/com/ruoyi/stock/pojo/StockInventory.java b/src/main/java/com/ruoyi/stock/pojo/StockInventory.java
index 5652ec7..fde3329 100644
--- a/src/main/java/com/ruoyi/stock/pojo/StockInventory.java
+++ b/src/main/java/com/ruoyi/stock/pojo/StockInventory.java
@@ -72,4 +72,7 @@
     @TableField(fill = FieldFill.INSERT)
     private Long deptId;
 
+    @Schema(description = "鍘傚晢id")
+    private Long manufacturerId;
+
 }
diff --git a/src/main/java/com/ruoyi/stock/service/ManufacturerService.java b/src/main/java/com/ruoyi/stock/service/ManufacturerService.java
new file mode 100644
index 0000000..dded3ee
--- /dev/null
+++ b/src/main/java/com/ruoyi/stock/service/ManufacturerService.java
@@ -0,0 +1,71 @@
+package com.ruoyi.stock.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.stock.dto.ManufacturerDto;
+import com.ruoyi.stock.pojo.Manufacturer;
+import jakarta.servlet.http.HttpServletResponse;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 鍘傚晢鏈嶅姟鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-05-28 09:52:35
+ */
+public interface ManufacturerService extends IService<Manufacturer> {
+
+    /**
+     * 鍘傚晢鏂板
+     * @param manufacturer
+     */
+    void saveManufacturer(Manufacturer manufacturer);
+
+    /**
+     * 鍘傚晢鍒犻櫎
+     * @param ids
+     * @return
+     */
+    int delManufacturer(List<Long> ids);
+
+    /**
+     * 鍘傚晢璇︽儏
+     * @param id
+     * @return
+     */
+    Manufacturer manufacturerDetail(Long id);
+
+    /**
+     * 鍘傚晢淇敼
+     * @param manufacturer
+     * @return
+     */
+    int manufacturerUpdate(Manufacturer manufacturer);
+
+    /**
+     * 鍘傚晢鍒嗛〉鏌ヨ
+     * @param page
+     * @param manufacturerDto
+     * @return
+     */
+    IPage<Manufacturer> manufacturerListPage(Page page, ManufacturerDto manufacturerDto);
+
+    /**
+     * 鍘傚晢瀵煎嚭
+     * @param response
+     * @param manufacturerDto
+     */
+    void manufacturerExport(HttpServletResponse response, ManufacturerDto manufacturerDto);
+
+    /**
+     * 鍘傚晢瀵煎叆
+     * @param file
+     * @return
+     */
+    Boolean importData(MultipartFile file);
+}
diff --git a/src/main/java/com/ruoyi/stock/service/impl/ManufacturerServiceImpl.java b/src/main/java/com/ruoyi/stock/service/impl/ManufacturerServiceImpl.java
new file mode 100644
index 0000000..c0b859a
--- /dev/null
+++ b/src/main/java/com/ruoyi/stock/service/impl/ManufacturerServiceImpl.java
@@ -0,0 +1,130 @@
+package com.ruoyi.stock.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.basic.excel.SupplierManageExcelDto;
+import com.ruoyi.basic.pojo.SupplierManage;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.stock.dto.ManufacturerDto;
+import com.ruoyi.stock.execl.ManufacturerExcelDto;
+import com.ruoyi.stock.mapper.ManufacturerMapper;
+import com.ruoyi.stock.mapper.StockInventoryMapper;
+import com.ruoyi.stock.pojo.Manufacturer;
+import com.ruoyi.stock.pojo.StockInventory;
+import com.ruoyi.stock.service.ManufacturerService;
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 鍘傚晢鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-05-28 09:52:35
+ */
+@Service
+@RequiredArgsConstructor
+public class ManufacturerServiceImpl extends ServiceImpl<ManufacturerMapper, Manufacturer> implements ManufacturerService {
+
+    private final StockInventoryMapper stockInventoryMapper;
+    private final ManufacturerMapper manufacturerMapper;
+
+    /**
+     * 鍘傚晢鏂板
+     */
+    @Override
+    @Transactional
+    public void saveManufacturer(Manufacturer manufacturer) {
+        LambdaQueryWrapper<Manufacturer> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(Manufacturer::getName,manufacturer.getName());
+        if (baseMapper.selectCount(queryWrapper) > 0) {
+            throw new RuntimeException("渚涘簲鍟嗗凡瀛樺湪");
+        }
+
+        baseMapper.insert(manufacturer);
+    }
+
+    /**
+     * 鍘傚晢鍒犻櫎
+     */
+    @Override
+    @Transactional
+    public int delManufacturer(List<Long> ids) {
+        // 鎵归噺妫�鏌ユ槸鍚﹀叧鑱斿簱瀛�
+        LambdaQueryWrapper<StockInventory> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.in(StockInventory::getManufacturerId, ids);
+        List<StockInventory> inventoryList = stockInventoryMapper.selectList(queryWrapper);
+
+        if (!inventoryList.isEmpty()) {
+            throw new RuntimeException("鍘傚晢宸插叧鑱斿簱瀛橈紝鏃犳硶鍒犻櫎");
+        }
+
+        return baseMapper.deleteBatchIds(ids);
+    }
+
+    /**
+     * 鍘傚晢璇︽儏
+     */
+    @Override
+    public Manufacturer manufacturerDetail(Long id) {
+        return baseMapper.selectById(id);
+    }
+
+    /**
+     * 鍘傚晢淇敼
+     */
+    @Override
+    @Transactional
+    public int manufacturerUpdate(Manufacturer manufacturer) {
+        return baseMapper.updateById(manufacturer);
+    }
+
+    /**
+     * 鍘傚晢鍒嗛〉鏌ヨ
+     */
+    @Override
+    public IPage<Manufacturer> manufacturerListPage(Page page, ManufacturerDto manufacturerDto) {
+        return manufacturerMapper.manufacturerListPage(page,manufacturerDto);
+    }
+
+    /**
+     * 鍘傚晢瀵煎嚭
+     */
+    @Override
+    public void manufacturerExport(HttpServletResponse response, ManufacturerDto manufacturerDto) {
+        List<ManufacturerExcelDto> list = manufacturerMapper.manufacturerExportList(manufacturerDto);
+        ExcelUtil<ManufacturerExcelDto> util = new ExcelUtil<>(ManufacturerExcelDto.class);
+        util.exportExcel(response, list, "鍘傚晢鏁版嵁");
+    }
+
+    /**
+     * 鍘傚晢瀵煎叆
+     */
+    @Override
+    @Transactional
+    public Boolean importData(MultipartFile file) {
+        try {
+            ExcelUtil<Manufacturer> util = new ExcelUtil<>(Manufacturer.class);
+            List<Manufacturer> list = util.importExcel(file.getInputStream());
+            if (list != null && !list.isEmpty()) {
+                this.saveBatch(list);
+            }
+            return true;
+        } catch (Exception e) {
+            log.error("瀵煎叆澶辫触", e);
+            return false;
+        }
+    }
+}
diff --git a/src/main/resources/mapper/stock/ManufacturerMapper.xml b/src/main/resources/mapper/stock/ManufacturerMapper.xml
new file mode 100644
index 0000000..794ac6e
--- /dev/null
+++ b/src/main/resources/mapper/stock/ManufacturerMapper.xml
@@ -0,0 +1,93 @@
+<?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="com.ruoyi.stock.mapper.ManufacturerMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.stock.pojo.Manufacturer">
+        <id column="id" property="id" />
+        <result column="name" property="name" />
+        <result column="taxpayer_identification_num" property="taxpayerIdentificationNum" />
+        <result column="company_address" property="companyAddress" />
+        <result column="type" property="type" />
+        <result column="company_phone" property="companyPhone" />
+        <result column="bank_account_name" property="bankAccountName" />
+        <result column="bank_account_num" property="bankAccountNum" />
+        <result column="contact_user_name" property="contactUserName" />
+        <result column="contact_user_phone" property="contactUserPhone" />
+        <result column="maintain_user_id" property="maintainUserId" />
+        <result column="maintain_time" property="maintainTime" />
+        <result column="create_time" property="createTime" />
+        <result column="create_user" property="createUser" />
+        <result column="update_time" property="updateTime" />
+        <result column="update_user" property="updateUser" />
+        <result column="tenant_id" property="tenantId" />
+        <result column="is_white" property="isWhite" />
+    </resultMap>
+
+    <select id="manufacturerListPage" resultType="com.ruoyi.stock.dto.ManufacturerDto">
+        SELECT
+        T1.id,
+        T1.name,
+        T1.taxpayer_identification_num,
+        T1.company_address,
+        T1.company_phone,
+        T1.bank_account_name,
+        T1.bank_account_num,
+        T1.contact_user_name,
+        T1.contact_user_phone,
+        T1.maintain_user_id,
+        T1.maintain_time,
+        T1.create_time,
+        T1.create_user,
+        T1.update_time,
+        T1.update_user,
+        T1.tenant_id,
+        T1.is_white,
+        T2.nick_name AS maintainUserName,
+        T1.type
+        FROM manufacturer T1
+        LEFT JOIN sys_user T2 ON T1.maintain_user_id = T2.user_id
+        <where>
+            <if test="manufacturerDto.name != null and manufacturerDto.name != '' ">
+                AND T1.name LIKE CONCAT('%',#{manufacturerDto.name},'%')
+            </if>
+            <if test="manufacturerDto.isWhite != null">
+                AND T1.is_white = #{manufacturerDto.isWhite}
+            </if>
+        </where>
+        order by T1.create_time desc
+    </select>
+
+    <select id="manufacturerExportList" resultType="com.ruoyi.stock.execl.ManufacturerExcelDto">
+        SELECT
+        T1.id,
+        T1.name,
+        T1.type,
+        T1.taxpayer_identification_num,
+        T1.company_address,
+        T1.company_phone,
+        T1.bank_account_name,
+        T1.bank_account_num,
+        T1.contact_user_name,
+        T1.contact_user_phone,
+        T1.maintain_user_id,
+        T1.maintain_time,
+        T1.create_time,
+        T1.create_user,
+        T1.update_time,
+        T1.update_user,
+        T1.tenant_id,
+        T1.is_white,
+        T2.nick_name AS maintainUserName
+        FROM manufacturer T1
+        LEFT JOIN sys_user T2 ON T1.maintain_user_id = T2.user_id
+        <where>
+            <if test="manufacturerDto.name != null and manufacturerDto.name != '' ">
+                AND T1.name LIKE CONCAT('%',#{manufacturerDto.name},'%')
+            </if>
+            <if test="manufacturerDto.isWhite != null">
+                AND T1.is_white = #{manufacturerDto.isWhite}
+            </if>
+        </where>
+    </select>
+</mapper>

--
Gitblit v1.9.3