From 10b88a7ff17caf92f3d4e8a550c1085a70c2517a Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期四, 28 五月 2026 17:43:26 +0800
Subject: [PATCH] Merge dev_New_pro into dev_山西_晋和园_pro

---
 src/main/java/com/ruoyi/account/service/impl/sales/AccountInvoiceApplicationServiceImpl.java |   97 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 97 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/ruoyi/account/service/impl/sales/AccountInvoiceApplicationServiceImpl.java b/src/main/java/com/ruoyi/account/service/impl/sales/AccountInvoiceApplicationServiceImpl.java
new file mode 100644
index 0000000..74cec42
--- /dev/null
+++ b/src/main/java/com/ruoyi/account/service/impl/sales/AccountInvoiceApplicationServiceImpl.java
@@ -0,0 +1,97 @@
+package com.ruoyi.account.service.impl.sales;
+
+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.account.bean.dto.sales.AccountInvoiceApplicationDto;
+import com.ruoyi.account.bean.vo.sales.AccountInvoiceApplicationVo;
+import com.ruoyi.account.bean.vo.sales.SalesOutboundVo;
+import com.ruoyi.account.mapper.sales.AccountInvoiceApplicationMapper;
+import com.ruoyi.account.mapper.sales.AccountSalesInvoiceMapper;
+import com.ruoyi.account.pojo.sales.AccountInvoiceApplication;
+import com.ruoyi.account.pojo.sales.AccountSalesInvoice;
+import com.ruoyi.account.service.sales.AccountInvoiceApplicationService;
+import com.ruoyi.basic.mapper.StorageAttachmentMapper;
+import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import jakarta.servlet.http.HttpServletResponse;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Random;
+
+/**
+ * <p>
+ * 璐㈠姟绠$悊--寮�绁ㄧ敵璇� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-05-18 01:38:32
+ */
+@Service
+@RequiredArgsConstructor
+public class AccountInvoiceApplicationServiceImpl extends ServiceImpl<AccountInvoiceApplicationMapper, AccountInvoiceApplication> implements AccountInvoiceApplicationService {
+
+    private final AccountInvoiceApplicationMapper accountInvoiceApplicationMapper;
+    private final AccountSalesInvoiceMapper accountSalesInvoiceMapper;
+    private final StorageAttachmentMapper storageAttachmentMapper;
+    private static final DateTimeFormatter CODE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyMMddHHmmss");
+
+    @Override
+    public IPage<AccountInvoiceApplicationVo> listPageAccountInvoiceApplication(Page page, AccountInvoiceApplicationDto accountInvoiceApplicationDto) {
+        return accountInvoiceApplicationMapper.listPageAccountInvoiceApplication(page, accountInvoiceApplicationDto);
+    }
+
+    @Override
+    public List<SalesOutboundVo> getOutboundBatchesByCustomer(Integer customerId) {
+        return accountInvoiceApplicationMapper.getOutboundBatchesByCustomer(customerId);
+    }
+
+    @Override
+    public boolean addAccountInvoiceApplication(AccountInvoiceApplication accountInvoiceApplication) {
+        if (StringUtils.isEmpty(accountInvoiceApplication.getInvoiceApplicationNo())) {
+            accountInvoiceApplication.setInvoiceApplicationNo(genInvoiceApplicationNo());
+        }
+        String stockOutRecordIds = accountInvoiceApplication.getStockOutRecordIds();
+        if (stockOutRecordIds != null && !stockOutRecordIds.isEmpty()) {
+            List<Long> ids = Arrays.stream(stockOutRecordIds.split(","))
+                    .map(Long::valueOf)
+                    .toList();
+            if (accountInvoiceApplicationMapper.existsByStockOutRecordId(ids)){
+                throw new ServiceException("瀛樺湪閲嶅鐨勫嚭搴撳崟");
+            }
+        }
+        return save(accountInvoiceApplication);
+    }
+
+    @Override
+    public void exportAccountInvoiceApplication(HttpServletResponse response, AccountInvoiceApplicationDto accountInvoiceApplicationDto) {
+        List<AccountInvoiceApplicationVo> list = accountInvoiceApplicationMapper.listPageAccountInvoiceApplication(new Page(1,-1),accountInvoiceApplicationDto).getRecords();
+        ExcelUtil<AccountInvoiceApplicationVo> util = new ExcelUtil<>(AccountInvoiceApplicationVo.class);
+        util.exportExcel(response, list , "寮�绁ㄧ敵璇�");
+    }
+
+    @Override
+    public boolean deleteAccountInvoiceApplication(List<Long> ids) {
+        if (ids == null || ids.isEmpty()) {
+            throw new ServiceException("鍒犻櫎澶辫触锛岃閫夋嫨瑕佸垹闄ょ殑鏁版嵁");
+        }
+        //鍒犻櫎鐩稿叧闄勪欢
+        List<AccountSalesInvoice> accountSalesInvoices = accountSalesInvoiceMapper.selectList(Wrappers.<AccountSalesInvoice>lambdaQuery().in(AccountSalesInvoice::getAccountInvoiceApplicationId,ids));
+        storageAttachmentMapper.deleteBatchIds(accountSalesInvoices.stream().map(AccountSalesInvoice::getStorageAttachmentId).toList());
+        //鍒犻櫎鐩稿叧鐨勯攢椤瑰彂绁�
+        accountSalesInvoiceMapper.delete(Wrappers.<AccountSalesInvoice>lambdaQuery().in(AccountSalesInvoice::getAccountInvoiceApplicationId,ids));
+        //鍒犻櫎寮�绁ㄧ敵璇�
+        return removeBatchByIds(ids);
+    }
+
+    private String genInvoiceApplicationNo() {
+        return "KP" + LocalDateTime.now().format(CODE_TIME_FORMATTER) + new Random().nextInt(10);
+    }
+}

--
Gitblit v1.9.3