From befc0e5606ab7c913dda0346152a4150d0ee5f79 Mon Sep 17 00:00:00 2001
From: liding <756868258@qq.com>
Date: 星期五, 06 六月 2025 09:35:59 +0800
Subject: [PATCH] 供应商,客户优化

---
 basic-server/src/main/java/com/ruoyi/basic/controller/CustomerController.java                      |   56 +++++
 basic-server/src/main/java/com/ruoyi/basic/controller/SupplyController.java                        |    9 +
 basic-server/src/main/java/com/ruoyi/basic/dto/SupplyDto.java                                      |    2 
 basic-server/src/main/resources/db/migration/postgresql/V20250530152701__create_table_supply.sql   |   35 ++-
 basic-server/src/main/java/com/ruoyi/basic/dto/CustomerDto.java                                    |   24 ++
 basic-server/src/main/java/com/ruoyi/basic/entity/Supply.java                                      |   14 +
 basic-server/src/main/java/com/ruoyi/basic/service/CustomerService.java                            |   15 +
 basic-server/src/main/java/com/ruoyi/basic/service/impl/CustomerServiceImpl.java                   |  102 +++++++++++
 basic-server/src/main/java/com/ruoyi/basic/entity/Customer.java                                    |  187 ++++++++++----------
 basic-server/src/main/java/com/ruoyi/basic/service/impl/SupplyServiceImpl.java                     |   15 +
 basic-server/src/main/java/com/ruoyi/basic/service/SupplyService.java                              |    3 
 basic-server/src/main/resources/db/migration/postgresql/V20250530171701__create_table_customer.sql |   22 +-
 main-business/src/main/java/com/ruoyi/business/service/impl/PurchaseRegistrationServiceImpl.java   |    1 
 13 files changed, 361 insertions(+), 124 deletions(-)

diff --git a/basic-server/src/main/java/com/ruoyi/basic/controller/CustomerController.java b/basic-server/src/main/java/com/ruoyi/basic/controller/CustomerController.java
index 3ed0e81..4a9b8b5 100644
--- a/basic-server/src/main/java/com/ruoyi/basic/controller/CustomerController.java
+++ b/basic-server/src/main/java/com/ruoyi/basic/controller/CustomerController.java
@@ -1,12 +1,20 @@
 package com.ruoyi.basic.controller;
 
-import org.springframework.web.bind.annotation.RequestMapping;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.basic.dto.CustomerDto;
+import com.ruoyi.basic.entity.Customer;
+import com.ruoyi.basic.service.CustomerService;
+import com.ruoyi.common.core.domain.R;
+import jakarta.servlet.http.HttpServletResponse;
 import lombok.AllArgsConstructor;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
 
 /**
  * <p>
- * 鍓嶇鎺у埗鍣�
+ * 瀹㈡埛淇℃伅 鍓嶇鎺у埗鍣�
  * </p>
  *
  * @author ruoyi
@@ -18,4 +26,46 @@
 @RequestMapping("/customer")
 public class CustomerController {
 
+    private CustomerService customerService;
+
+    /**
+     * 鏌ヨ
+     */
+    @GetMapping("/list")
+    public R<IPage<Customer>> list(Page page, CustomerDto customerDto) {
+        IPage<Customer> list = customerService.selectCustomerList(page, customerDto);
+        return R.ok(list);
+    }
+
+    /**
+     * 瀹㈡埛list
+     */
+    @GetMapping("/customerList")
+    public R<List<Customer>> list() {
+        return R.ok(customerService.customerList());
+    }
+
+    /**
+     * 鏂板淇敼
+     */
+    @PostMapping("/addOrEditCustomer")
+    public R addOrEditSupply(@RequestBody CustomerDto customerDto) {
+        return R.ok(customerService.addOrEditCustomer(customerDto));
+    }
+
+    /**
+     * 鍒犻櫎
+     */
+    @DeleteMapping("/delCustomer")
+    public R remove(@RequestBody Long[] ids) {
+        return R.ok(customerService.delCustomerByIds(ids));
+    }
+
+    /**
+     * 瀹㈡埛淇℃伅瀵煎嚭
+     */
+    @PostMapping("/export")
+    public void supplierExport(HttpServletResponse response, CustomerDto customerDto) {
+        customerService.customerExport(response, customerDto);
+    }
 }
diff --git a/basic-server/src/main/java/com/ruoyi/basic/controller/SupplyController.java b/basic-server/src/main/java/com/ruoyi/basic/controller/SupplyController.java
index ac4b428..06a6be5 100644
--- a/basic-server/src/main/java/com/ruoyi/basic/controller/SupplyController.java
+++ b/basic-server/src/main/java/com/ruoyi/basic/controller/SupplyController.java
@@ -6,6 +6,7 @@
 import com.ruoyi.basic.entity.Supply;
 import com.ruoyi.basic.service.SupplyService;
 import com.ruoyi.common.core.domain.R;
+import jakarta.servlet.http.HttpServletResponse;
 import lombok.AllArgsConstructor;
 import org.springframework.web.bind.annotation.*;
 
@@ -60,4 +61,12 @@
         return R.ok(supplyService.delSupplyByIds(ids));
     }
 
+    /**
+     * 渚涘簲鍟嗗鍑�
+     */
+    @PostMapping("/export")
+    public void supplierExport(HttpServletResponse response, SupplyDto supplyDto) {
+        supplyService.supplyExport(response, supplyDto);
+    }
+
 }
diff --git a/basic-server/src/main/java/com/ruoyi/basic/dto/CustomerDto.java b/basic-server/src/main/java/com/ruoyi/basic/dto/CustomerDto.java
new file mode 100644
index 0000000..3aa4d94
--- /dev/null
+++ b/basic-server/src/main/java/com/ruoyi/basic/dto/CustomerDto.java
@@ -0,0 +1,24 @@
+package com.ruoyi.basic.dto;
+
+import com.ruoyi.basic.entity.Customer;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class CustomerDto extends Customer {
+
+    /**
+     * 缁忚惀鍦板潃鐪佸競鍖篿ds
+     */
+    private List<Long> bids;
+
+    /**
+     * 鑱旂郴鍦板潃鐪佸競鍖篿ds
+     */
+    private List<Long> cids;
+
+    private String searchAll;
+
+    private List<Long> ids;
+}
diff --git a/basic-server/src/main/java/com/ruoyi/basic/dto/SupplyDto.java b/basic-server/src/main/java/com/ruoyi/basic/dto/SupplyDto.java
index b044e12..2629975 100644
--- a/basic-server/src/main/java/com/ruoyi/basic/dto/SupplyDto.java
+++ b/basic-server/src/main/java/com/ruoyi/basic/dto/SupplyDto.java
@@ -19,4 +19,6 @@
     private List<Long> cids;
 
     private String searchAll;
+
+    private List<Long> ids;
 }
diff --git a/basic-server/src/main/java/com/ruoyi/basic/entity/Customer.java b/basic-server/src/main/java/com/ruoyi/basic/entity/Customer.java
index 2a96b0b..faf057e 100644
--- a/basic-server/src/main/java/com/ruoyi/basic/entity/Customer.java
+++ b/basic-server/src/main/java/com/ruoyi/basic/entity/Customer.java
@@ -1,105 +1,106 @@
 package com.ruoyi.basic.entity;
 
-import com.baomidou.mybatisplus.annotation.*;
+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 com.ruoyi.common.annotation.Excel;
 import com.ruoyi.common.core.domain.MyBaseEntity;
 import lombok.Data;
-    import com.ruoyi.common.core.domain.BaseEntity;
 
 /**
-*  瀹炰綋绫�
-*
-* @author ruoyi
-* @date 2025-06-03
-*/
+ * 瀹炰綋绫�
+ *
+ * @author ruoyi
+ * @date 2025-06-03
+ */
 @Data
 @TableName("customer")
 public class Customer extends MyBaseEntity {
 
-private static final long serialVersionUID = 1L;
+    private static final long serialVersionUID = 1L;
 
-        /**
-        * 瀹㈡埛鍞竴鏍囪瘑锛屼富閿�
-        */
-            @TableId(value = "id", type = IdType.AUTO)
-        private Long id;
-        /**
-        * 瀹㈡埛鍚嶇О锛屼笉鑳戒负绌�
-        */
-            @TableField(value = "customer_name")
-        private String customerName;
-        /**
-        * 绾崇◣浜鸿瘑鍒彿锛屼腑鍥藉ぇ闄嗕负缁熶竴绀句細淇$敤浠g爜锛屼笉鑳戒负绌�
-        */
-            @TableField(value = "taxpayer_id")
-        private String taxpayerId;
-        /**
-        * 缁忚惀鍦板潃鎵�鍦ㄧ渷浠界殑鍦板尯ID锛岄粯璁�0
-        */
-            @TableField(value = "business_province_id")
-        private Long businessProvinceId;
-        /**
-        * 缁忚惀鍦板潃鎵�鍦ㄥ煄甯傜殑鍦板尯ID锛岄粯璁�0
-        */
-            @TableField(value = "business_city_id")
-        private Long businessCityId;
-        /**
-        * 缁忚惀鍦板潃鎵�鍦ㄥ尯鍘跨殑鍦板尯ID锛岄粯璁�0
-        */
-            @TableField(value = "business_district_id")
-        private Long businessDistrictId;
-        /**
-        * 缁忚惀璇︾粏鍦板潃锛岄粯璁ょ┖瀛楃涓�
-        */
-            @TableField(value = "business_address")
-        private String businessAddress;
-        /**
-        * 閾惰璐︽埛鍙风爜锛岄粯璁ょ┖瀛楃涓�
-        */
-            @TableField(value = "bank_account")
-        private String bankAccount;
-        /**
-        * 寮�鎴烽摱琛屽悕绉帮紝榛樿绌哄瓧绗︿覆
-        */
-            @TableField(value = "bank_name")
-        private String bankName;
-        /**
-        * 瀹㈡埛鑱旂郴浜哄鍚嶏紝榛樿绌哄瓧绗︿覆
-        */
-            @TableField(value = "contact_person")
-        private String contactPerson;
-        /**
-        * 鑱旂郴浜虹數璇濆彿鐮侊紝榛樿绌哄瓧绗︿覆
-        */
-            @TableField(value = "contact_phone")
-        private String contactPhone;
-        /**
-        * 鑱旂郴鍦板潃鎵�鍦ㄧ渷浠界殑鍦板尯ID锛岄粯璁�0
-        */
-            @TableField(value = "province_id")
-        private Long provinceId;
-        /**
-        * 鑱旂郴鍦板潃鎵�鍦ㄥ煄甯傜殑鍦板尯ID锛岄粯璁�0
-        */
-            @TableField(value = "city_id")
-        private Long cityId;
-        /**
-        * 鑱旂郴鍦板潃鎵�鍦ㄥ尯鍘跨殑鍦板尯ID锛岄粯璁�0
-        */
-            @TableField(value = "district_id")
-        private Long districtId;
-        /**
-        * 鑱旂郴璇︾粏鍦板潃锛岄粯璁ょ┖瀛楃涓�
-        */
-            @TableField(value = "contact_address")
-        private String contactAddress;
-        /**
-        * 鍒涘缓璇ヨ褰曠殑鐢ㄦ埛ID锛岄粯璁�0
-        */
-            @TableField(value = "create_user")
-        private Long createUser;
-        /**
-        * 鏈�鍚庝慨鏀硅璁板綍鐨勭敤鎴稩D锛岄粯璁�0
-        */
-            @TableField(value = "update_user")
-        private Long updateUser;
+    /**
+     * 瀹㈡埛鍞竴鏍囪瘑锛屼富閿�
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+    /**
+     * 瀹㈡埛鍚嶇О锛屼笉鑳戒负绌�
+     */
+    @Excel(name = "瀹㈡埛鍚嶇О")
+    @TableField(value = "customer_name")
+    private String customerName;
+    /**
+     * 绾崇◣浜鸿瘑鍒彿锛屼腑鍥藉ぇ闄嗕负缁熶竴绀句細淇$敤浠g爜锛屼笉鑳戒负绌�
+     */
+    @Excel(name = "绾崇◣浜鸿瘑鍒彿")
+    @TableField(value = "taxpayer_id")
+    private String taxpayerId;
+    /**
+     * 缁忚惀鍦板潃鎵�鍦ㄧ渷浠界殑鍦板尯ID锛岄粯璁�0
+     */
+    @TableField(value = "business_province_id")
+    private Long businessProvinceId;
+    /**
+     * 缁忚惀鍦板潃鎵�鍦ㄥ煄甯傜殑鍦板尯ID锛岄粯璁�0
+     */
+    @TableField(value = "business_city_id")
+    private Long businessCityId;
+    /**
+     * 缁忚惀鍦板潃鎵�鍦ㄥ尯鍘跨殑鍦板尯ID锛岄粯璁�0
+     */
+    @TableField(value = "business_district_id")
+    private Long businessDistrictId;
+    /**
+     * 缁忚惀璇︾粏鍦板潃锛岄粯璁ょ┖瀛楃涓�
+     */
+    @Excel(name = "缁忚惀璇︾粏鍦板潃")
+    @TableField(value = "business_address")
+    private String businessAddress;
+    /**
+     * 閾惰璐︽埛鍙风爜锛岄粯璁ょ┖瀛楃涓�
+     */
+    @Excel(name = "閾惰璐︽埛")
+    @TableField(value = "bank_account")
+    private String bankAccount;
+    /**
+     * 寮�鎴烽摱琛屽悕绉帮紝榛樿绌哄瓧绗︿覆
+     */
+    @Excel(name = "寮�鎴疯")
+    @TableField(value = "bank_name")
+    private String bankName;
+    /**
+     * 瀹㈡埛鑱旂郴浜哄鍚嶏紝榛樿绌哄瓧绗︿覆
+     */
+    @Excel(name = "鑱旂郴浜�")
+    @TableField(value = "contact_person")
+    private String contactPerson;
+    /**
+     * 鑱旂郴浜虹數璇濆彿鐮侊紝榛樿绌哄瓧绗︿覆
+     */
+    @Excel(name = "鑱旂郴浜虹數璇�")
+    @TableField(value = "contact_phone")
+    private String contactPhone;
+    /**
+     * 鑱旂郴鍦板潃鎵�鍦ㄧ渷浠界殑鍦板尯ID锛岄粯璁�0
+     */
+    @TableField(value = "province_id")
+    private Long provinceId;
+    /**
+     * 鑱旂郴鍦板潃鎵�鍦ㄥ煄甯傜殑鍦板尯ID锛岄粯璁�0
+     */
+    @TableField(value = "city_id")
+    private Long cityId;
+    /**
+     * 鑱旂郴鍦板潃鎵�鍦ㄥ尯鍘跨殑鍦板尯ID锛岄粯璁�0
+     */
+    @TableField(value = "district_id")
+    private Long districtId;
+    /**
+     * 鑱旂郴璇︾粏鍦板潃锛岄粯璁ょ┖瀛楃涓�
+     */
+    @Excel(name = "鑱旂郴璇︾粏鍦板潃")
+    @TableField(value = "contact_address")
+    private String contactAddress;
 }
\ No newline at end of file
diff --git a/basic-server/src/main/java/com/ruoyi/basic/entity/Supply.java b/basic-server/src/main/java/com/ruoyi/basic/entity/Supply.java
index 556a7dc..c1ea428 100644
--- a/basic-server/src/main/java/com/ruoyi/basic/entity/Supply.java
+++ b/basic-server/src/main/java/com/ruoyi/basic/entity/Supply.java
@@ -1,6 +1,10 @@
 package com.ruoyi.basic.entity;
 
-import com.baomidou.mybatisplus.annotation.*;
+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 com.ruoyi.common.annotation.Excel;
 import com.ruoyi.common.core.domain.MyBaseEntity;
 import lombok.Data;
 
@@ -25,42 +29,50 @@
      * 渚涘簲鍟嗗叏绉帮紝涓氬姟鍦烘櫙涓敮涓�璇嗗埆鐨勫悕绉帮紝
      */
     @TableField(value = "supplier_name")
+    @Excel(name = "渚涘簲鍟�")
     private String supplierName;
     /**
      * 渚涘簲鍟嗙◣鍔$櫥璁板敮涓�鏍囪瘑锛堝缁熶竴绀句細淇$敤浠g爜锛夛紝鐢ㄤ簬璐㈢◣绠$悊
      */
     @TableField(value = "taxpayer_id")
+    @Excel(name = "绋庡彿")
     private String taxpayerId;
     /**
      * 渚涘簲鍟嗚惀涓氭墽鐓ф敞鍐屽湴鍧�鎴栦富瑕佺粡钀ュ満鎵�锛岄粯璁ょ┖瀛楃涓�
      */
     @TableField(value = "business_address")
+    @Excel(name = "娉ㄥ唽鍦板潃")
     private String businessAddress;
     /**
      * 渚涘簲鍟嗘敹娆鹃摱琛岃处鎴蜂俊鎭紝榛樿绌哄瓧绗︿覆锛岀敤浜庤祫閲戝線鏉�
      */
     @TableField(value = "bank_account")
+    @Excel(name = "閾惰璐︽埛")
     private String bankAccount;
     /**
      * 渚涘簲鍟嗛摱琛岃处鎴风殑寮�鎴锋満鏋勫悕绉帮紝榛樿绌哄瓧绗︿覆锛�
      */
     @TableField(value = "bank_name")
+    @Excel(name = "閾惰璐︽埛")
     private String bankName;
     /**
      * 渚涘簲鍟嗕笟鍔″鎺ヤ汉濮撳悕
      */
     @TableField(value = "contact_person")
+    @Excel(name = "鑱旂郴浜�")
     private String contactPerson;
     /**
      * 渚涘簲鍟嗚仈绯讳汉鐨勮仈绯诲湴鍧�
      */
     @TableField(value = "contact_address")
+    @Excel(name = "鑱旂郴鍦板潃")
     private String contactAddress;
 
     /**
      * 鑱旂郴浜虹殑鐢佃瘽
      */
     @TableField(value = "contact_phone")
+    @Excel(name = "鑱旂郴鐢佃瘽")
     private String contactPhone;
     /**
      * 渚涘簲鍟嗘墍鍦ㄧ渷浠界殑ID锛堝叧鑱斿湴鍧�瀛楀吀琛級锛岄粯璁�0
diff --git a/basic-server/src/main/java/com/ruoyi/basic/service/CustomerService.java b/basic-server/src/main/java/com/ruoyi/basic/service/CustomerService.java
index 3d3985b..671db62 100644
--- a/basic-server/src/main/java/com/ruoyi/basic/service/CustomerService.java
+++ b/basic-server/src/main/java/com/ruoyi/basic/service/CustomerService.java
@@ -1,7 +1,13 @@
 package com.ruoyi.basic.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.basic.dto.CustomerDto;
 import com.ruoyi.basic.entity.Customer;
+import jakarta.servlet.http.HttpServletResponse;
+
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +19,13 @@
  */
 public interface CustomerService extends IService<Customer> {
 
+    IPage<Customer> selectCustomerList(Page page, CustomerDto customerDto);
+
+    List<Customer> customerList();
+
+    int addOrEditCustomer(CustomerDto customerDto);
+
+    int delCustomerByIds(Long[] ids);
+
+    void customerExport(HttpServletResponse response, CustomerDto customerDto);
 }
diff --git a/basic-server/src/main/java/com/ruoyi/basic/service/SupplyService.java b/basic-server/src/main/java/com/ruoyi/basic/service/SupplyService.java
index 77cfe64..32dc581 100644
--- a/basic-server/src/main/java/com/ruoyi/basic/service/SupplyService.java
+++ b/basic-server/src/main/java/com/ruoyi/basic/service/SupplyService.java
@@ -5,6 +5,7 @@
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ruoyi.basic.dto.SupplyDto;
 import com.ruoyi.basic.entity.Supply;
+import jakarta.servlet.http.HttpServletResponse;
 
 import java.util.List;
 
@@ -25,4 +26,6 @@
     int delSupplyByIds(Long[] ids);
 
     List<Supply> supplyList();
+
+    void supplyExport(HttpServletResponse response, SupplyDto supplyDto);
 }
diff --git a/basic-server/src/main/java/com/ruoyi/basic/service/impl/CustomerServiceImpl.java b/basic-server/src/main/java/com/ruoyi/basic/service/impl/CustomerServiceImpl.java
index dc873b3..2186ae5 100644
--- a/basic-server/src/main/java/com/ruoyi/basic/service/impl/CustomerServiceImpl.java
+++ b/basic-server/src/main/java/com/ruoyi/basic/service/impl/CustomerServiceImpl.java
@@ -1,11 +1,23 @@
 package com.ruoyi.basic.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.basic.dto.CustomerDto;
 import com.ruoyi.basic.entity.Customer;
 import com.ruoyi.basic.mapper.CustomerMapper;
 import com.ruoyi.basic.service.CustomerService;
+import com.ruoyi.common.utils.bean.BeanUtils;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import jakarta.servlet.http.HttpServletResponse;
 import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+import java.util.List;
+import java.util.Objects;
 
 /**
  * <p>
@@ -18,5 +30,95 @@
 @Service
 @RequiredArgsConstructor
 public class CustomerServiceImpl extends ServiceImpl<CustomerMapper, Customer> implements CustomerService {
+    
+    private final CustomerMapper customerMapper;
 
+    @Override
+    public IPage<Customer> selectCustomerList(Page page, CustomerDto customerDto) {
+        LambdaQueryWrapper<Customer> queryWrapper = new LambdaQueryWrapper<>();
+        // 鍏ㄥ眬妯$硦鎼滅储瀛楁
+        if (StringUtils.hasText(customerDto.getSearchAll())) {
+            String keyword = customerDto.getSearchAll();
+            queryWrapper.and(wrapper -> wrapper
+                    .like(Customer::getCustomerName, keyword)
+                    .or()
+                    .like(Customer::getTaxpayerId, keyword)
+                    .or()
+                    .like(Customer::getBusinessAddress, keyword)
+            );
+        } else {
+            // 鍗曠嫭鏉′欢鏌ヨ
+            if (StringUtils.hasText(customerDto.getCustomerName())) {
+                queryWrapper.like(Customer::getCustomerName, customerDto.getCustomerName());
+            }
+            if (StringUtils.hasText(customerDto.getTaxpayerId())) {
+                queryWrapper.like(Customer::getTaxpayerId, customerDto.getTaxpayerId());
+            }
+            if (StringUtils.hasText(customerDto.getBusinessAddress())) {
+                queryWrapper.like(Customer::getBusinessAddress, customerDto.getBusinessAddress());
+            }
+        }
+        // 榛樿鎸夊垱寤烘椂闂村�掑簭鎺掑垪
+        queryWrapper.orderByDesc(Customer::getCreateTime);
+        return customerMapper.selectPage(page, queryWrapper);
+    }
+
+    @Override
+    public List<Customer> customerList() {
+        return customerMapper.selectList(null);
+    }
+
+    @Override
+    public int addOrEditCustomer(CustomerDto customerDto) {
+        Customer customer = new Customer();
+        BeanUtils.copyProperties(customerDto, customer);
+        if (customerDto.getBids().size() != 3) {
+            throw new RuntimeException("璇烽�夋嫨缁忚惀鍦板潃鐪佸競鍖�");
+        }
+
+        if (customerDto.getCids().size() != 3) {
+            throw new RuntimeException("璇烽�夋嫨鑱旂郴鍦板潃鐪佸競鍖�");
+        }
+
+        customer.setBusinessProvinceId(customerDto.getBids().get(0));
+        customer.setBusinessCityId(customerDto.getBids().get(1));
+        customer.setBusinessDistrictId(customerDto.getBids().get(2));
+
+        customer.setProvinceId(customerDto.getCids().get(0));
+        customer.setCityId(customerDto.getCids().get(1));
+        customer.setDistrictId(customerDto.getCids().get(2));
+
+        if (Objects.isNull(customerDto.getId())) {
+            return customerMapper.insert(customer);
+        } else {
+            return customerMapper.updateById(customer);
+        }
+    }
+
+    @Override
+    public int delCustomerByIds(Long[] ids) {
+        // 妫�鏌ュ弬鏁�
+        if (ids == null || ids.length == 0) {
+            return 0;
+        }
+        // 鏋勯�犳洿鏂版潯浠�
+        UpdateWrapper<Customer> updateWrapper = new UpdateWrapper<>();
+        updateWrapper.in("id", ids)
+                .set("deleted", 1);  // 璁剧疆 deleted 涓� 1 琛ㄧず宸插垹闄�
+        // 鎵ц鎵归噺閫昏緫鍒犻櫎
+        return customerMapper.update(null, updateWrapper);
+    }
+
+    @Override
+    public void customerExport(HttpServletResponse response, CustomerDto customerDto) {
+        List<Long> ids = customerDto.getIds();
+        List<Customer> list;
+        if (ids != null && ids.size() > 0) {
+            list = customerMapper.selectByIds(ids);
+        } else {
+            list = customerMapper.selectList(null);
+        }
+        ExcelUtil<Customer> util = new ExcelUtil<>(Customer.class);
+        util.exportExcel(response, list, "瀹㈡埛鏁版嵁");
+    }
 }
diff --git a/basic-server/src/main/java/com/ruoyi/basic/service/impl/SupplyServiceImpl.java b/basic-server/src/main/java/com/ruoyi/basic/service/impl/SupplyServiceImpl.java
index 9946698..fdf4c45 100644
--- a/basic-server/src/main/java/com/ruoyi/basic/service/impl/SupplyServiceImpl.java
+++ b/basic-server/src/main/java/com/ruoyi/basic/service/impl/SupplyServiceImpl.java
@@ -10,6 +10,8 @@
 import com.ruoyi.basic.mapper.SupplyMapper;
 import com.ruoyi.basic.service.SupplyService;
 import com.ruoyi.common.utils.bean.BeanUtils;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import jakarta.servlet.http.HttpServletResponse;
 import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
 import org.springframework.util.StringUtils;
@@ -104,6 +106,19 @@
     }
 
     @Override
+    public void supplyExport(HttpServletResponse response, SupplyDto supplyDto) {
+        List<Long> ids = supplyDto.getIds();
+        List<Supply> list;
+        if (ids != null && ids.size() > 0) {
+            list = supplyMapper.selectByIds(ids);
+        } else {
+            list = supplyMapper.selectList(null);
+        }
+        ExcelUtil<Supply> util = new ExcelUtil<>(Supply.class);
+        util.exportExcel(response, list, "渚涘簲鍟嗘暟鎹�");
+    }
+
+    @Override
     public List<Supply> supplyList() {
         return supplyMapper.selectList(null);
     }
diff --git a/basic-server/src/main/resources/db/migration/postgresql/V20250530152701__create_table_supply.sql b/basic-server/src/main/resources/db/migration/postgresql/V20250530152701__create_table_supply.sql
index 314bed4..5b006fb 100644
--- a/basic-server/src/main/resources/db/migration/postgresql/V20250530152701__create_table_supply.sql
+++ b/basic-server/src/main/resources/db/migration/postgresql/V20250530152701__create_table_supply.sql
@@ -3,24 +3,25 @@
 CREATE TABLE supply
 (
     id               BIGSERIAL PRIMARY KEY,
-    supplier_name    VARCHAR(255) NOT NULL,                             -- 渚涘簲鍟嗗悕绉�
-    taxpayer_id      VARCHAR(255) NOT NULL,                             -- 绾崇◣浜鸿瘑鍒彿
-    business_address VARCHAR(255) NOT NULL    DEFAULT '',               -- 缁忚惀鍦板潃
-    bank_account     VARCHAR(255) NOT NULL    DEFAULT '',               -- 閾惰璐﹀彿
-    bank_name        VARCHAR(255) NOT NULL    DEFAULT '',               -- 寮�鎴疯
-    contact_person   VARCHAR(255) NOT NULL    DEFAULT '',               -- 鑱旂郴浜�
-    contact_address  VARCHAR(255) NOT NULL    DEFAULT '',               -- 鑱旂郴鍦板潃
-    b_province_id      BIGINT       NOT NULL    DEFAULT 0,              -- 缁忚惀鍦板潃鐪乮d
-    b_city_id          BIGINT       NOT NULL    DEFAULT 0,              -- 缁忚惀鍦板潃甯俰d
-    b_district_id      BIGINT       NOT NULL    DEFAULT 0,              -- 缁忚惀鍦板潃鍖篿d
-    c_province_id      BIGINT       NOT NULL    DEFAULT 0,              -- 鑱旂郴鍦板潃鐪乮d
-    c_city_id          BIGINT       NOT NULL    DEFAULT 0,              -- 鑱旂郴鍦板潃甯俰d
-    c_district_id      BIGINT       NOT NULL    DEFAULT 0,              -- 鑱旂郴鍦板潃鍖篿d
-    deleted          int4         NOT NULL DEFAULT 0,                 -- 鏄惁鍒犻櫎锛堣蒋鍒犻櫎鏍囧織锛�
-    create_by        VARCHAR(255),                                    -- 鍒涘缓浜�
+    supplier_name    VARCHAR(255) NOT NULL,                              -- 渚涘簲鍟嗗悕绉�
+    taxpayer_id      VARCHAR(255) NOT NULL,                              -- 绾崇◣浜鸿瘑鍒彿
+    business_address VARCHAR(255) NOT NULL    DEFAULT '',                -- 缁忚惀鍦板潃
+    bank_account     VARCHAR(255) NOT NULL    DEFAULT '',                -- 閾惰璐﹀彿
+    bank_name        VARCHAR(255) NOT NULL    DEFAULT '',                -- 寮�鎴疯
+    contact_person   VARCHAR(255) NOT NULL    DEFAULT '',                -- 鑱旂郴浜�
+    contact_address  VARCHAR(255) NOT NULL    DEFAULT '',                -- 鑱旂郴鍦板潃
+    b_province_id    BIGINT       NOT NULL    DEFAULT 0,                 -- 缁忚惀鍦板潃鐪乮d
+    b_city_id        BIGINT       NOT NULL    DEFAULT 0,                 -- 缁忚惀鍦板潃甯俰d
+    b_district_id    BIGINT       NOT NULL    DEFAULT 0,                 -- 缁忚惀鍦板潃鍖篿d
+    c_province_id    BIGINT       NOT NULL    DEFAULT 0,                 -- 鑱旂郴鍦板潃鐪乮d
+    c_city_id        BIGINT       NOT NULL    DEFAULT 0,                 -- 鑱旂郴鍦板潃甯俰d
+    c_district_id    BIGINT       NOT NULL    DEFAULT 0,                 -- 鑱旂郴鍦板潃鍖篿d
+    deleted          int4         NOT NULL    DEFAULT 0,                 -- 鏄惁鍒犻櫎锛堣蒋鍒犻櫎鏍囧織锛�
+    create_by        VARCHAR(255),                                       -- 鍒涘缓浜�
     create_time      TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, -- 鍒涘缓鏃堕棿锛岄粯璁ゅ綋鍓嶆椂闂�
-    update_by        VARCHAR(255),                                    -- 鏈�鍚庢洿鏂颁汉
-    update_time      TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP  -- 鏈�鍚庢洿鏂版椂闂达紝榛樿褰撳墠鏃堕棿
+    update_by        VARCHAR(255),                                       -- 鏈�鍚庢洿鏂颁汉
+    update_time      TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, -- 鏈�鍚庢洿鏂版椂闂达紝榛樿褰撳墠鏃堕棿
+    contact_phone    VARCHAR(255)                                        -- 鑱旂郴浜虹數璇�
 );
 
 -- 琛ㄦ敞閲婏細渚涘簲鍟嗕俊鎭〃锛屽瓨鍌ㄤ緵搴斿晢鍩烘湰淇℃伅锛堝惈鍦板潃灞傜骇鍏宠仈锛�
diff --git a/basic-server/src/main/resources/db/migration/postgresql/V20250530171701__create_table_customer.sql b/basic-server/src/main/resources/db/migration/postgresql/V20250530171701__create_table_customer.sql
index 6abc76d..f99ebd3 100644
--- a/basic-server/src/main/resources/db/migration/postgresql/V20250530171701__create_table_customer.sql
+++ b/basic-server/src/main/resources/db/migration/postgresql/V20250530171701__create_table_customer.sql
@@ -17,11 +17,12 @@
     city_id          INT8       NOT NULL    DEFAULT 0,                  -- 鑱旂郴鍦板潃甯�
     district_id      INT8       NOT NULL    DEFAULT 0,                  -- 鑱旂郴鍦板潃鍖�
     contact_address  VARCHAR(255) NOT NULL    DEFAULT '',               -- 鑱旂郴璇︾粏鍦板潃
-    create_time      TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,-- 鍒涘缓鏃堕棿
-    update_time      TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,-- 淇敼鏃堕棿
-    create_user      INT8       NOT NULL    ,                           -- 鍒涘缓鐢ㄦ埛
-    update_user      INT8       NOT NULL    ,                           -- 淇敼鐢ㄦ埛
-    deleted          INT2         NOT NULL    DEFAULT 0                 -- 鍒犻櫎鏍囪 0鏈垹闄� 1宸插垹闄�
+
+    deleted           INT          NOT NULL    DEFAULT 0,                 -- 杞垹闄ゆ爣蹇楋細0=鏈垹闄わ紝1=宸插垹闄�
+    create_by         VARCHAR(255),                                       -- 鍒涘缓浜虹敤鎴峰悕
+    create_time       TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, -- 鍒涘缓鏃堕棿锛岄粯璁ゅ綋鍓嶆椂闂�
+    update_by         VARCHAR(255),                                       -- 鏈�鍚庢洿鏂颁汉鐢ㄦ埛鍚�
+    update_time       TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP  -- 鏈�鍚庢洿鏂版椂闂达紝榛樿褰撳墠鏃堕棿
 );
 
 COMMENT ON COLUMN customer.id IS '瀹㈡埛鍞竴鏍囪瘑锛屼富閿�';
@@ -39,9 +40,10 @@
 COMMENT ON COLUMN customer.city_id IS '鑱旂郴鍦板潃鎵�鍦ㄥ煄甯傜殑鍦板尯ID锛岄粯璁�0';
 COMMENT ON COLUMN customer.district_id IS '鑱旂郴鍦板潃鎵�鍦ㄥ尯鍘跨殑鍦板尯ID锛岄粯璁�0';
 COMMENT ON COLUMN customer.contact_address IS '鑱旂郴璇︾粏鍦板潃锛岄粯璁ょ┖瀛楃涓�';
-COMMENT ON COLUMN customer.create_time IS '璁板綍鍒涘缓鏃堕棿锛岄粯璁ゅ綋鍓嶆椂闂�';
-COMMENT ON COLUMN customer.update_time IS '璁板綍鏈�鍚庝慨鏀规椂闂达紝榛樿褰撳墠鏃堕棿';
-COMMENT ON COLUMN customer.create_user IS '鍒涘缓璇ヨ褰曠殑鐢ㄦ埛ID锛岄粯璁�0';
-COMMENT ON COLUMN customer.update_user IS '鏈�鍚庝慨鏀硅璁板綍鐨勭敤鎴稩D锛岄粯璁�0';
-COMMENT ON COLUMN customer.deleted IS '杞垹闄ゆ爣蹇楋紝0=鏈垹闄わ紝1=宸插垹闄�';
+-- 鏂板瀛楁鐨勬敞閲�
+COMMENT ON COLUMN customer.deleted IS '杞垹闄ゆ爣蹇楋紝true琛ㄧず宸插垹闄�';
+COMMENT ON COLUMN customer.create_by IS '鍒涘缓浜虹敤鎴峰悕';
+COMMENT ON COLUMN customer.create_time IS '璁板綍鍒涘缓鏃堕棿';
+COMMENT ON COLUMN customer.update_by IS '鏈�鍚庢洿鏂颁汉鐢ㄦ埛鍚�';
+COMMENT ON COLUMN customer.update_time IS '璁板綍鏈�鍚庢洿鏂版椂闂�';
 
diff --git a/main-business/src/main/java/com/ruoyi/business/service/impl/PurchaseRegistrationServiceImpl.java b/main-business/src/main/java/com/ruoyi/business/service/impl/PurchaseRegistrationServiceImpl.java
index 2e87119..642cfea 100644
--- a/main-business/src/main/java/com/ruoyi/business/service/impl/PurchaseRegistrationServiceImpl.java
+++ b/main-business/src/main/java/com/ruoyi/business/service/impl/PurchaseRegistrationServiceImpl.java
@@ -41,6 +41,7 @@
     public int addOrEditPR(PurchaseRegistrationDto purchaseRegistrationDto) {
         PurchaseRegistration purchaseRegistration = new PurchaseRegistration();
         BeanUtils.copyProperties(purchaseRegistrationDto,purchaseRegistration);
+        
         if (Objects.isNull(purchaseRegistrationDto.getId())) {
             return purchaseRegistrationMapper.insert(purchaseRegistration);
         } else {

--
Gitblit v1.9.3