From b10d9b8fcbe9eddeb881690bbeddafc7f786077f Mon Sep 17 00:00:00 2001
From: liding <756868258@qq.com>
Date: 星期三, 14 五月 2025 16:12:13 +0800
Subject: [PATCH] 来票登记优化

---
 src/main/java/com/ruoyi/purchase/dto/TicketRegistrationDto.java                  |   55 +++++
 src/main/java/com/ruoyi/purchase/service/IPurchaseLedgerService.java             |    4 
 src/main/java/com/ruoyi/purchase/dto/PurchaseLedgerDto.java                      |   10 +
 src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java     |   84 +++++++
 src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java                       |   20 ++
 src/main/java/com/ruoyi/purchase/controller/TicketRegistrationController.java    |   88 ++++++++
 src/main/java/com/ruoyi/purchase/pojo/TicketRegistration.java                    |   97 +++++++++
 src/main/java/com/ruoyi/basic/service/impl/CustomerServiceImpl.java              |    2 
 src/main/java/com/ruoyi/purchase/mapper/TicketRegistrationMapper.java            |   13 +
 src/main/java/com/ruoyi/purchase/service/impl/TicketRegistrationServiceImpl.java |  127 ++++++++++++
 src/main/java/com/ruoyi/purchase/service/ITicketRegistrationService.java         |   24 ++
 src/main/java/com/ruoyi/purchase/controller/PurchaseLedgerController.java        |   16 +
 src/main/java/com/ruoyi/purchase/pojo/PurchaseLedger.java                        |   18 +
 13 files changed, 552 insertions(+), 6 deletions(-)

diff --git a/src/main/java/com/ruoyi/basic/service/impl/CustomerServiceImpl.java b/src/main/java/com/ruoyi/basic/service/impl/CustomerServiceImpl.java
index 3c12a6f..b0b1e56 100644
--- a/src/main/java/com/ruoyi/basic/service/impl/CustomerServiceImpl.java
+++ b/src/main/java/com/ruoyi/basic/service/impl/CustomerServiceImpl.java
@@ -55,7 +55,7 @@
         LambdaQueryWrapper<Customer> queryWrapper = new LambdaQueryWrapper<>();
 
         if (StringUtils.isNotBlank(customer.getCustomerName())) {
-            queryWrapper.eq(Customer::getCustomerName, customer.getCustomerName());
+            queryWrapper.like(Customer::getCustomerName, customer.getCustomerName());
         }
 
         List<Customer> customerList = customerMapper.selectList(queryWrapper);
diff --git a/src/main/java/com/ruoyi/purchase/controller/PurchaseLedgerController.java b/src/main/java/com/ruoyi/purchase/controller/PurchaseLedgerController.java
index 3b902c2..1e210f0 100644
--- a/src/main/java/com/ruoyi/purchase/controller/PurchaseLedgerController.java
+++ b/src/main/java/com/ruoyi/purchase/controller/PurchaseLedgerController.java
@@ -92,4 +92,20 @@
     public List getSalesNo() {
         return salesLedgerService.getSalesNo();
     }
+
+    /**
+     * 鏍规嵁閲囪喘鍚堝悓鍙锋煡璇骇鍝�
+     */
+    @GetMapping("/getProduct")
+    public List getProduct(PurchaseLedgerDto purchaseLedgerDto){
+        return purchaseLedgerService.getProduct(purchaseLedgerDto);
+    }
+
+    /**
+     * 鏍规嵁閲囪喘鍚堝悓鍙锋煡璇骇鍝�
+     */
+    @GetMapping("/getInfo")
+    public PurchaseLedgerDto getInfo(PurchaseLedgerDto purchaseLedgerDto){
+        return purchaseLedgerService.getInfo(purchaseLedgerDto);
+    }
 }
diff --git a/src/main/java/com/ruoyi/purchase/controller/TicketRegistrationController.java b/src/main/java/com/ruoyi/purchase/controller/TicketRegistrationController.java
new file mode 100644
index 0000000..73dcd51
--- /dev/null
+++ b/src/main/java/com/ruoyi/purchase/controller/TicketRegistrationController.java
@@ -0,0 +1,88 @@
+package com.ruoyi.purchase.controller;
+
+import javax.servlet.http.HttpServletResponse;
+
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.purchase.dto.TicketRegistrationDto;
+import com.ruoyi.purchase.pojo.TicketRegistration;
+import com.ruoyi.purchase.service.ITicketRegistrationService;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.framework.aspectj.lang.annotation.Log;
+import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
+import com.ruoyi.framework.web.controller.BaseController;
+import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.framework.web.page.TableDataInfo;
+
+import java.util.List;
+
+/**
+ * 鏉ョエ鐧昏Controller
+ * 
+ * @author ruoyi
+ * @date 2025-05-13
+ */
+@RestController
+@RequestMapping("/purchase/registration")
+@AllArgsConstructor
+public class TicketRegistrationController extends BaseController {
+
+    private ITicketRegistrationService ticketRegistrationService;
+
+    /**
+     * 鏌ヨ鏉ョエ鐧昏鍒楄〃
+     */
+    @GetMapping("/list")
+    public TableDataInfo list(TicketRegistration ticketRegistration)
+    {
+        startPage();
+        List<TicketRegistration> list = ticketRegistrationService.selectTicketRegistrationList(ticketRegistration);
+        return getDataTable(list);
+    }
+
+    /**
+     * 瀵煎嚭鏉ョエ鐧昏鍒楄〃
+     */
+    @Log(title = "鏉ョエ鐧昏", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, TicketRegistration ticketRegistration)
+    {
+        List<TicketRegistration> list = ticketRegistrationService.selectTicketRegistrationList(ticketRegistration);
+        ExcelUtil<TicketRegistration> util = new ExcelUtil<TicketRegistration>(TicketRegistration.class);
+        util.exportExcel(response, list, "鏉ョエ鐧昏鏁版嵁");
+    }
+
+    /**
+     * 鏌ヨ鏉ョエ鐧昏鍜屼骇鍝佺埗瀛愬垪琛�
+     */
+    @GetMapping("/getRegistrationById")
+    public TicketRegistrationDto getRegistrationById(TicketRegistrationDto ticketRegistrationDto) {
+        return ticketRegistrationService.getRegistrationById(ticketRegistrationDto);
+    }
+
+    /**
+     * 鏂板淇敼鏉ョエ鐧昏
+     */
+    @Log(title = "鏉ョエ鐧昏", businessType = BusinessType.INSERT)
+    @PostMapping  ("/addOrUpdateRegistration")
+    public AjaxResult addOrUpdateRegistration(@RequestBody TicketRegistrationDto ticketRegistrationDto)
+    {
+        return toAjax(ticketRegistrationService.addOrUpdateRegistration(ticketRegistrationDto));
+    }
+
+    /**
+     * 鍒犻櫎鏉ョエ鐧昏
+     */
+    @Log(title = "鏉ョエ鐧昏", businessType = BusinessType.DELETE)
+	@DeleteMapping("/delRegistration")
+    public AjaxResult delRegistration(@RequestBody Long[] ids)
+    {
+        return toAjax(ticketRegistrationService.delRegistration(ids));
+    }
+
+}
diff --git a/src/main/java/com/ruoyi/purchase/dto/PurchaseLedgerDto.java b/src/main/java/com/ruoyi/purchase/dto/PurchaseLedgerDto.java
index def3993..6a9b1e8 100644
--- a/src/main/java/com/ruoyi/purchase/dto/PurchaseLedgerDto.java
+++ b/src/main/java/com/ruoyi/purchase/dto/PurchaseLedgerDto.java
@@ -40,6 +40,11 @@
     private String salesContractNo;
 
     /**
+     * 閿�鍞悎鍚屽彿id
+     */
+    private Long salesContractNoId;
+
+    /**
      * 椤圭洰鍚嶇О
      */
     private String projectName;
@@ -87,4 +92,9 @@
 
     private List<SalesLedgerFile> SalesLedgerFiles;
 
+    /**
+     * 涓氬姟鍛榠d
+     */
+    private Long businessPersonId;
+
 }
diff --git a/src/main/java/com/ruoyi/purchase/dto/TicketRegistrationDto.java b/src/main/java/com/ruoyi/purchase/dto/TicketRegistrationDto.java
new file mode 100644
index 0000000..1bdd771
--- /dev/null
+++ b/src/main/java/com/ruoyi/purchase/dto/TicketRegistrationDto.java
@@ -0,0 +1,55 @@
+package com.ruoyi.purchase.dto;
+
+import com.ruoyi.sales.pojo.SalesLedgerProduct;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class TicketRegistrationDto {
+
+    /**
+     * 涓婚敭ID
+     */
+    private Long id;
+
+    /**
+     * 閲囪喘鍙拌处id
+     */
+    private Long purchaseLedgerId;
+
+    /**
+     * 閲囪喘鍚堝悓鍙�
+     */
+    private String purchaseContractNumber;
+
+    /**
+     * 閿�鍞悎鍚屽彿
+     */
+    private String salesContractNo;
+
+    /**
+     * 瀹㈡埛鍚嶇О
+     */
+    private String customerName;
+
+    /**
+     * 涓氬姟鍛�
+     */
+    private String businessPerson;
+
+    /**
+     * 涓氬姟鍛榠d
+     */
+    private Long businessPersonId;
+
+    /**
+     * 椤圭洰鍚嶇О
+     */
+    private String projectName;
+
+    private List<SalesLedgerProduct> productData;
+
+    private Long salesContractNoId;
+    private String supplierName;
+}
diff --git a/src/main/java/com/ruoyi/purchase/mapper/TicketRegistrationMapper.java b/src/main/java/com/ruoyi/purchase/mapper/TicketRegistrationMapper.java
new file mode 100644
index 0000000..39633c1
--- /dev/null
+++ b/src/main/java/com/ruoyi/purchase/mapper/TicketRegistrationMapper.java
@@ -0,0 +1,13 @@
+package com.ruoyi.purchase.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.purchase.pojo.TicketRegistration;
+
+/**
+ * 鏉ョエ鐧昏Mapper鎺ュ彛
+ *
+ * @author ruoyi
+ * @date 2025-05-13
+ */
+public interface TicketRegistrationMapper extends BaseMapper<TicketRegistration> {
+}
diff --git a/src/main/java/com/ruoyi/purchase/pojo/PurchaseLedger.java b/src/main/java/com/ruoyi/purchase/pojo/PurchaseLedger.java
index 2e3f454..a2843c8 100644
--- a/src/main/java/com/ruoyi/purchase/pojo/PurchaseLedger.java
+++ b/src/main/java/com/ruoyi/purchase/pojo/PurchaseLedger.java
@@ -106,4 +106,22 @@
      */
     private BigDecimal contractAmount;
 
+    /**
+     * 涓氬姟鍛�
+     */
+    @Excel(name = "涓氬姟鍛�")
+    private String businessPerson;
+
+    /**
+     * 涓氬姟鍛榠d
+     */
+    private Long businessPersonId;
+
+    /**
+     * 涓氬姟鍛樻墜鏈哄彿
+     */
+    private String phoneNumber;
+
+
+
 }
diff --git a/src/main/java/com/ruoyi/purchase/pojo/TicketRegistration.java b/src/main/java/com/ruoyi/purchase/pojo/TicketRegistration.java
new file mode 100644
index 0000000..b74d863
--- /dev/null
+++ b/src/main/java/com/ruoyi/purchase/pojo/TicketRegistration.java
@@ -0,0 +1,97 @@
+package com.ruoyi.purchase.pojo;
+
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.framework.aspectj.lang.annotation.Excel;
+import lombok.Data;
+
+/**
+ * 鏉ョエ鐧昏瀵硅薄 ticket_registration
+ *
+ * @author ruoyi
+ * @date 2025-05-13
+ */
+@Data
+@TableName("ticket_registration")
+public class TicketRegistration{
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 涓婚敭ID
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 閲囪喘鍙拌处id
+     */
+    private Long purchaseLedgerId;
+
+    /**
+     * 閲囪喘鍚堝悓鍙�
+     */
+    @Excel(name = "閲囪喘鍚堝悓鍙�")
+    private String purchaseContractNumber;
+
+    /**
+     * 閿�鍞悎鍚屽彿
+     */
+    @Excel(name = "閿�鍞悎鍚屽彿")
+    private String salesContractNo;
+
+    /**
+     * 渚涘簲鍟嗗悕绉�
+     */
+    @Excel(name = "渚涘簲鍟嗗悕绉�")
+    private String supplierName;
+
+    /**
+     * 瀹㈡埛鍚嶇О
+     */
+    private String customerName;
+
+    /**
+     * 涓氬姟鍛�
+     */
+    @Excel(name = "涓氬姟鍛�")
+    private String businessPerson;
+
+    /**
+     * 涓氬姟鍛榠d
+     */
+    private Long businessPersonId;
+
+    /**
+     * 椤圭洰鍚嶇О
+     */
+    @Excel(name = "椤圭洰鍚嶇О")
+    private String projectName;
+
+    /**
+     * 浜у搧淇℃伅
+     */
+    private Long productId;
+
+    /**
+     * 鍒涘缓鏃堕棿
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date createdAt;
+
+    /**
+     * 鏇存柊鏃堕棿
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date updatedAt;
+
+    /**
+     * 鍏宠仈閿�鍞彴璐︿富琛ㄤ富閿�
+     */
+    private Long salesLedgerId;
+
+    @TableField(fill = FieldFill.INSERT)
+    private Long tenantId;
+
+}
diff --git a/src/main/java/com/ruoyi/purchase/service/IPurchaseLedgerService.java b/src/main/java/com/ruoyi/purchase/service/IPurchaseLedgerService.java
index 7f8f10d..ac40957 100644
--- a/src/main/java/com/ruoyi/purchase/service/IPurchaseLedgerService.java
+++ b/src/main/java/com/ruoyi/purchase/service/IPurchaseLedgerService.java
@@ -23,4 +23,8 @@
     int deletePurchaseLedgerByIds(Long[] ids);
 
     PurchaseLedgerDto getPurchaseById(PurchaseLedgerDto purchaseLedgerDto);
+
+    List getProduct(PurchaseLedgerDto purchaseLedgerDto);
+
+    PurchaseLedgerDto getInfo(PurchaseLedgerDto purchaseLedgerDto);
 }
diff --git a/src/main/java/com/ruoyi/purchase/service/ITicketRegistrationService.java b/src/main/java/com/ruoyi/purchase/service/ITicketRegistrationService.java
new file mode 100644
index 0000000..03a5202
--- /dev/null
+++ b/src/main/java/com/ruoyi/purchase/service/ITicketRegistrationService.java
@@ -0,0 +1,24 @@
+package com.ruoyi.purchase.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.purchase.dto.TicketRegistrationDto;
+import com.ruoyi.purchase.pojo.TicketRegistration;
+
+import java.util.List;
+
+/**
+ * 鏉ョエ鐧昏Service鎺ュ彛
+ *
+ * @author ruoyi
+ * @date 2025-05-13
+ */
+public interface ITicketRegistrationService extends IService<TicketRegistration> {
+
+    List<TicketRegistration> selectTicketRegistrationList(TicketRegistration ticketRegistration);
+
+    int addOrUpdateRegistration(TicketRegistrationDto ticketRegistrationDto);
+
+    int delRegistration(Long[] ids);
+
+    TicketRegistrationDto getRegistrationById(TicketRegistrationDto ticketRegistrationDto);
+}
diff --git a/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java b/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
index c8ef0fc..1074d31 100644
--- a/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
+++ b/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
@@ -2,6 +2,7 @@
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.common.exception.base.BaseException;
 import com.ruoyi.common.utils.StringUtils;
@@ -34,10 +35,7 @@
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -67,7 +65,11 @@
 
     @Override
     public List<PurchaseLedger> selectPurchaseLedgerList(PurchaseLedger purchaseLedger) {
-        return purchaseLedgerMapper.selectList(new LambdaQueryWrapper<>());
+        LambdaQueryWrapper<PurchaseLedger> queryWrapper = new LambdaQueryWrapper<>();
+        if (StringUtils.isNotBlank(purchaseLedger.getPurchaseContractNumber())) {
+            queryWrapper.like(PurchaseLedger::getPurchaseContractNumber,purchaseLedger.getPurchaseContractNumber());
+        }
+        return purchaseLedgerMapper.selectList(queryWrapper);
     }
 
     @Override
@@ -75,9 +77,13 @@
 
         SalesLedger salesLedger = salesLedgerMapper.selectById(purchaseLedgerDto.getSalesLedgerId());
 
+        //涓氬姟鍛�
+        SysUser businessPerson = userMapper.selectUserById(purchaseLedgerDto.getBusinessPersonId());
+
         if (salesLedger == null) {
             throw new BaseException("閿�鍞彴璐︿笉瀛樺湪");
         }
+        //褰曞叆浜�
         SysUser sysUser = userMapper.selectUserById(purchaseLedgerDto.getRecorderId());
 
         // DTO杞珽ntity
@@ -87,6 +93,9 @@
         purchaseLedger.setSalesContractNo(salesLedger.getSalesContractNo());
         purchaseLedger.setRecorderId(purchaseLedgerDto.getRecorderId());
         purchaseLedger.setRecorderName(sysUser.getNickName());
+        purchaseLedger.setBusinessPersonId(purchaseLedgerDto.getBusinessPersonId());
+        purchaseLedger.setBusinessPerson(businessPerson.getNickName());
+        purchaseLedger.setPhoneNumber(sysUser.getPhonenumber());
 
         // 3. 鏂板鎴栨洿鏂颁富琛�
         if (purchaseLedger.getId() == null) {
@@ -239,4 +248,69 @@
         }
         return resultDto;
     }
+
+    @Override
+    public List getProduct(PurchaseLedgerDto purchaseLedgerDto) {
+        LambdaQueryWrapper<PurchaseLedger> queryWrapper = Wrappers.lambdaQuery();
+        queryWrapper.select(PurchaseLedger::getId, PurchaseLedger::getPurchaseContractNumber);
+
+        // 鑾峰彇鍘熷鏌ヨ缁撴灉
+        List<Map<String, Object>> result = purchaseLedgerMapper.selectMaps(queryWrapper);
+
+        //鏌ヨ閿�鍞悎鍚屽彿
+
+
+        // 灏嗕笅鍒掔嚎鍛藉悕杞崲涓洪┘宄板懡鍚�
+        return result.stream().map(map -> map.entrySet().stream()
+                .collect(Collectors.toMap(
+                        entry -> underlineToCamel(entry.getKey()),
+                        Map.Entry::getValue))
+        ).collect(Collectors.toList());
+    }
+
+    @Override
+    public PurchaseLedgerDto getInfo(PurchaseLedgerDto purchaseLedgerDto) {
+        PurchaseLedger purchaseLedger = purchaseLedgerMapper.selectById(purchaseLedgerDto.getId());
+        if (purchaseLedger == null) {
+            throw new BaseException("閲囪喘鍙拌处涓嶅瓨鍦�");
+        }
+        // 鍒涘缓骞跺~鍏匘TO
+        PurchaseLedgerDto resultDto = new PurchaseLedgerDto();
+        resultDto.setSalesContractNoId(purchaseLedger.getSalesLedgerId());
+        resultDto.setSalesContractNo(purchaseLedger.getSalesContractNo());
+        resultDto.setSupplierName(purchaseLedger.getSupplierName());
+        resultDto.setProjectName(purchaseLedger.getProjectName());
+        resultDto.setBusinessPersonId(purchaseLedger.getBusinessPersonId());
+
+        // 鏌ヨ骞惰缃叧鑱斾骇鍝�
+        LambdaQueryWrapper<SalesLedgerProduct> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(SalesLedgerProduct::getSalesLedgerId, purchaseLedger.getId())
+                .eq(SalesLedgerProduct::getType, 2);
+        List<SalesLedgerProduct> productList = salesLedgerProductMapper.selectList(queryWrapper);
+        resultDto.setProductData(productList);
+
+        return resultDto;
+    }
+
+    /**
+     * 涓嬪垝绾垮懡鍚嶈浆椹煎嘲鍛藉悕
+     */
+    private String underlineToCamel(String param) {
+        if (param == null || "".equals(param.trim())) {
+            return "";
+        }
+        int len = param.length();
+        StringBuilder sb = new StringBuilder(len);
+        for (int i = 0; i < len; i++) {
+            char c = param.charAt(i);
+            if (c == '_') {
+                if (++i < len) {
+                    sb.append(Character.toUpperCase(param.charAt(i)));
+                }
+            } else {
+                sb.append(Character.toLowerCase(c));
+            }
+        }
+        return sb.toString();
+    }
 }
diff --git a/src/main/java/com/ruoyi/purchase/service/impl/TicketRegistrationServiceImpl.java b/src/main/java/com/ruoyi/purchase/service/impl/TicketRegistrationServiceImpl.java
new file mode 100644
index 0000000..ef3bc4d
--- /dev/null
+++ b/src/main/java/com/ruoyi/purchase/service/impl/TicketRegistrationServiceImpl.java
@@ -0,0 +1,127 @@
+package com.ruoyi.purchase.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.exception.base.BaseException;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.bean.BeanUtils;
+import com.ruoyi.project.system.domain.SysUser;
+import com.ruoyi.project.system.mapper.SysUserMapper;
+import com.ruoyi.purchase.dto.TicketRegistrationDto;
+import com.ruoyi.purchase.mapper.PurchaseLedgerMapper;
+import com.ruoyi.purchase.mapper.TicketRegistrationMapper;
+import com.ruoyi.purchase.pojo.PurchaseLedger;
+import com.ruoyi.purchase.pojo.TicketRegistration;
+import com.ruoyi.purchase.service.ITicketRegistrationService;
+import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
+import com.ruoyi.sales.pojo.SalesLedgerProduct;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 鏉ョエ鐧昏Service涓氬姟灞傚鐞�
+ *
+ * @author ruoyi
+ * @date 2025-05-13
+ */
+@Service
+@AllArgsConstructor
+public class TicketRegistrationServiceImpl extends ServiceImpl<TicketRegistrationMapper, TicketRegistration> implements ITicketRegistrationService {
+
+    private TicketRegistrationMapper ticketRegistrationMapper;
+
+    private PurchaseLedgerMapper purchaseLedgerMapper;
+
+    private SalesLedgerProductMapper salesLedgerProductMapper;
+
+    private final SysUserMapper userMapper;
+
+
+    @Override
+    public List<TicketRegistration> selectTicketRegistrationList(TicketRegistration ticketRegistration) {
+        LambdaQueryWrapper<TicketRegistration> queryWrapper = new LambdaQueryWrapper<>();
+        if (StringUtils.isNotBlank(ticketRegistration.getPurchaseContractNumber())) {
+            queryWrapper.like(TicketRegistration::getPurchaseContractNumber,ticketRegistration.getPurchaseContractNumber());
+        }
+        return ticketRegistrationMapper.selectList(queryWrapper);
+    }
+
+    @Override
+    public int addOrUpdateRegistration(TicketRegistrationDto ticketRegistrationDto) {
+        PurchaseLedger purchaseLedger = purchaseLedgerMapper.selectById(ticketRegistrationDto.getPurchaseLedgerId());
+        SysUser sysUser = userMapper.selectUserById(ticketRegistrationDto.getBusinessPersonId());
+        TicketRegistration ticketRegistration = new TicketRegistration();
+        BeanUtils.copyProperties(ticketRegistrationDto, ticketRegistration);
+        ticketRegistration.setPurchaseContractNumber(purchaseLedger.getPurchaseContractNumber());
+        ticketRegistration.setBusinessPerson(sysUser.getNickName());
+        ticketRegistration.setTenantId(purchaseLedger.getTenantId());
+
+        // 澶勭悊瀛愯〃鏁版嵁
+        List<SalesLedgerProduct> productData = ticketRegistrationDto.getProductData(); 
+        if (productData != null && !productData.isEmpty()) {
+            handleSalesLedgerProducts(purchaseLedger.getId(), productData, 2);
+        }
+
+        // 鎵ц鎻掑叆鎴栨洿鏂版搷浣�
+        if (ticketRegistrationDto.getId() == null) {
+            return ticketRegistrationMapper.insert(ticketRegistration);
+        } else {
+            return ticketRegistrationMapper.updateById(ticketRegistration);
+        }
+    }
+
+    @Override
+    public int delRegistration(Long[] ids) {
+        return ticketRegistrationMapper.deleteBatchIds(Arrays.asList(ids));
+    }
+
+    @Override
+    public TicketRegistrationDto getRegistrationById(TicketRegistrationDto ticketRegistrationDto) {
+        TicketRegistration ticketRegistration = ticketRegistrationMapper.selectById(ticketRegistrationDto.getId());
+        LambdaQueryWrapper<PurchaseLedger> purchaseQueryWrapper = new LambdaQueryWrapper<>();
+        purchaseQueryWrapper.eq(PurchaseLedger::getId,ticketRegistration.getPurchaseLedgerId());
+        PurchaseLedger purchaseLedger = purchaseLedgerMapper.selectOne(purchaseQueryWrapper);
+        if (ticketRegistration == null) {
+            throw new BaseException("閲囪喘鍙拌处涓嶅瓨鍦�");
+        }
+        // 鍒涘缓骞跺~鍏匘TO
+        TicketRegistrationDto resultDto = new TicketRegistrationDto();
+        BeanUtils.copyProperties(ticketRegistration,resultDto);
+
+        // 鏌ヨ骞惰缃叧鑱斾骇鍝�
+        LambdaQueryWrapper<SalesLedgerProduct> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(SalesLedgerProduct::getSalesLedgerId, purchaseLedger.getId())
+                .eq(SalesLedgerProduct::getType, 2);
+        List<SalesLedgerProduct> productList = salesLedgerProductMapper.selectList(queryWrapper);
+        resultDto.setProductData(productList);
+
+        return resultDto;
+    }
+
+    private void handleSalesLedgerProducts(Long salesLedgerId, List<SalesLedgerProduct> products, Integer type) {
+        if (products == null || products.isEmpty()) {
+            return;
+        }
+
+        // 杩囨护鍑烘湁 ID 鐨勮褰曪紙鍗抽渶瑕佹洿鏂扮殑璁板綍锛�
+        List<SalesLedgerProduct> updateList = products.stream()
+                .filter(p -> p.getId() != null)
+                .peek(p -> {
+                    p.setSalesLedgerId(salesLedgerId);
+                    p.setType(type);
+                })
+                .collect(Collectors.toList()); // Java 8 鍏煎鍐欐硶
+
+        // 鎵归噺鏇存柊锛堥渶瑕� MyBatis 鎻愪緵鎵归噺鏇存柊鏂规硶锛�
+        if (!updateList.isEmpty()) {
+            updateList.forEach(product -> {
+                product.setType(type);
+                salesLedgerProductMapper.updateById(product);
+            });
+        }
+    }
+}
diff --git a/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java b/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java
index c620152..dde60d3 100644
--- a/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java
+++ b/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java
@@ -89,4 +89,24 @@
      * 鍙拌处绫诲瀷 1.閿�鍞� 2锛岄噰璐�
      */
     private Integer type;
+
+    /**
+     * 鏈鏉ョエ鏁�
+     */
+    private Long ticketsNum;
+
+    /**
+     * 鏈鏉ョエ閲戦(鍏�)
+     */
+    private BigDecimal ticketsAmount;
+
+    /**
+     * 鏈潵绁ㄦ暟
+     */
+    private Long futureTickets;
+
+    /**
+     * 鏈潵绁ㄩ噾棰�(鍏�)
+     */
+    private BigDecimal futureTicketsAmount;
 }

--
Gitblit v1.9.3