From d6a1114f3473f86721176bc9d17ba7f35b0bddb7 Mon Sep 17 00:00:00 2001
From: chenrui <1187576398@qq.com>
Date: 星期二, 13 五月 2025 16:53:59 +0800
Subject: [PATCH] Merge branch 'master' of http://114.132.189.42:9002/r/product-inventory-management-after
---
src/main/java/com/ruoyi/sales/dto/SalesLedgerDto.java | 5
src/main/java/com/ruoyi/sales/service/impl/SalesLedgerFileServiceImpl.java | 22 ++
src/main/resources/mapper/sales/SalesLedgerMapper.xml | 3
src/main/java/com/ruoyi/purchase/service/IPurchaseLedgerService.java | 5
src/main/java/com/ruoyi/purchase/dto/PurchaseLedgerDto.java | 90 +++++++++
src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java | 210 ++++++++++++++++++++
src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java | 5
src/main/java/com/ruoyi/other/pojo/TempFile.java | 4
src/main/java/com/ruoyi/sales/pojo/SalesLedger.java | 2
src/main/java/com/ruoyi/sales/pojo/SalesLedgerFile.java | 6
src/main/java/com/ruoyi/sales/service/ISalesLedgerService.java | 2
src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java | 40 ++-
src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java | 20 +
src/main/java/com/ruoyi/sales/mapper/SalesLedgerMapper.java | 2
src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java | 67 +++++-
src/main/java/com/ruoyi/purchase/controller/PurchaseLedgerController.java | 34 ++
src/main/java/com/ruoyi/sales/service/ISalesLedgerFileService.java | 6
src/main/java/com/ruoyi/purchase/pojo/PurchaseLedger.java | 18 +
18 files changed, 496 insertions(+), 45 deletions(-)
diff --git a/src/main/java/com/ruoyi/other/pojo/TempFile.java b/src/main/java/com/ruoyi/other/pojo/TempFile.java
index 6ce652d..26ace93 100644
--- a/src/main/java/com/ruoyi/other/pojo/TempFile.java
+++ b/src/main/java/com/ruoyi/other/pojo/TempFile.java
@@ -1,5 +1,6 @@
package com.ruoyi.other.pojo;
+import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@@ -8,6 +9,9 @@
@Data
@TableName("temp_file")
public class TempFile {
+ private static final long serialVersionUID = 1L;
+
+ @TableId
private String tempId; // 涓存椂鏂囦欢ID锛圲UID锛�
private String originalName; // 鍘熷鏂囦欢鍚�
private String tempPath; // 涓存椂瀛樺偍璺緞
diff --git a/src/main/java/com/ruoyi/purchase/controller/PurchaseLedgerController.java b/src/main/java/com/ruoyi/purchase/controller/PurchaseLedgerController.java
index 7f0fb01..3b902c2 100644
--- a/src/main/java/com/ruoyi/purchase/controller/PurchaseLedgerController.java
+++ b/src/main/java/com/ruoyi/purchase/controller/PurchaseLedgerController.java
@@ -3,8 +3,10 @@
import javax.servlet.http.HttpServletResponse;
import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.purchase.dto.PurchaseLedgerDto;
import com.ruoyi.purchase.pojo.PurchaseLedger;
import com.ruoyi.purchase.service.IPurchaseLedgerService;
+import com.ruoyi.sales.service.ISalesLedgerService;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
@@ -18,19 +20,23 @@
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.framework.web.page.TableDataInfo;
+import java.io.IOException;
import java.util.List;
+import java.util.Map;
/**
* 閲囪喘鍙拌处Controller
- *
+ *
* @author ruoyi
* @date 2025-05-09
*/
@RestController
-@RequestMapping("/system/ledger")
+@RequestMapping("/purchase/ledger")
@AllArgsConstructor
public class PurchaseLedgerController extends BaseController {
private IPurchaseLedgerService purchaseLedgerService;
+
+ private ISalesLedgerService salesLedgerService;
/**
* 鏌ヨ閲囪喘鍙拌处鍒楄〃
@@ -57,17 +63,33 @@
* 鏂板淇敼閲囪喘鍙拌处
*/
@Log(title = "閲囪喘鍙拌处", businessType = BusinessType.INSERT)
- @PostMapping ("/addOrEditPurchase")
- public AjaxResult addOrEditPurchase(@RequestBody PurchaseLedger purchaseLedger) {
- return toAjax(purchaseLedgerService.addOrEditPurchase(purchaseLedger));
+ @PostMapping("/addOrEditPurchase")
+ public AjaxResult addOrEditPurchase(@RequestBody PurchaseLedgerDto purchaseLedgerDto) throws IOException {
+ return toAjax(purchaseLedgerService.addOrEditPurchase(purchaseLedgerDto));
+ }
+
+ /**
+ * 鏌ヨ閿�鍞彴璐﹀拰浜у搧鐖跺瓙鍒楄〃
+ */
+ @GetMapping("/getPurchaseById")
+ public PurchaseLedgerDto getPurchaseById(PurchaseLedgerDto purchaseLedgerDto) {
+ return purchaseLedgerService.getPurchaseById(purchaseLedgerDto);
}
/**
* 鍒犻櫎閲囪喘鍙拌处
*/
@Log(title = "閲囪喘鍙拌处", businessType = BusinessType.DELETE)
- @DeleteMapping("/delPurchase")
+ @DeleteMapping("/delPurchase")
public AjaxResult remove(@RequestBody Long[] ids) {
return toAjax(purchaseLedgerService.deletePurchaseLedgerByIds(ids));
}
+
+ /**
+ * 鏌ヨ閿�鍞悎鍚屽彿
+ */
+ @GetMapping("/getSalesNo")
+ public List getSalesNo() {
+ return salesLedgerService.getSalesNo();
+ }
}
diff --git a/src/main/java/com/ruoyi/purchase/dto/PurchaseLedgerDto.java b/src/main/java/com/ruoyi/purchase/dto/PurchaseLedgerDto.java
new file mode 100644
index 0000000..def3993
--- /dev/null
+++ b/src/main/java/com/ruoyi/purchase/dto/PurchaseLedgerDto.java
@@ -0,0 +1,90 @@
+package com.ruoyi.purchase.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.sales.pojo.SalesLedgerFile;
+import com.ruoyi.sales.pojo.SalesLedgerProduct;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+@Data
+public class PurchaseLedgerDto {
+
+ private Long id;
+
+ /**
+ * 閲囪喘鍚堝悓鍙�
+ */
+ private String purchaseContractNumber;
+
+ /**
+ * 渚涘簲鍟嗗悕绉�
+ */
+ private String supplierName;
+
+ /**
+ * 褰曞叆浜哄鍚峣d
+ */
+ private Long recorderId;
+
+
+ /**
+ * 褰曞叆浜哄鍚�
+ */
+ private String recorderName;
+
+ /**
+ * 閿�鍞悎鍚屽彿
+ */
+ private String salesContractNo;
+
+ /**
+ * 椤圭洰鍚嶇О
+ */
+ private String projectName;
+
+ /**
+ * 褰曞叆鏃ユ湡
+ */
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private Date entryDate;
+
+ /**
+ * 澶囨敞
+ */
+ private String remarks;
+
+ /**
+ * 闄勪欢鏉愭枡璺緞鎴栧悕绉�
+ */
+ private String attachmentMaterials;
+
+ /**
+ * 璁板綍鍒涘缓鏃堕棿
+ */
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private Date createdAt;
+
+ /**
+ * 璁板綍鏈�鍚庢洿鏂版椂闂�
+ */
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private Date updatedAt;
+
+ /**
+ * 鍏宠仈閿�鍞彴璐︿富琛ㄤ富閿�
+ */
+ private Long salesLedgerId;
+
+ private Boolean hasChildren = false;
+
+ private Integer Type;
+
+ private List<SalesLedgerProduct> productData;
+
+ private List<String> tempFileIds;
+
+ private List<SalesLedgerFile> SalesLedgerFiles;
+
+}
diff --git a/src/main/java/com/ruoyi/purchase/pojo/PurchaseLedger.java b/src/main/java/com/ruoyi/purchase/pojo/PurchaseLedger.java
index 02cdab9..2e3f454 100644
--- a/src/main/java/com/ruoyi/purchase/pojo/PurchaseLedger.java
+++ b/src/main/java/com/ruoyi/purchase/pojo/PurchaseLedger.java
@@ -1,11 +1,10 @@
package com.ruoyi.purchase.pojo;
+import java.math.BigDecimal;
import java.util.Date;
+import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
import com.ruoyi.framework.aspectj.lang.annotation.Excel;
import lombok.Data;
@@ -37,6 +36,11 @@
*/
@Excel(name = "渚涘簲鍟嗗悕绉�")
private String supplierName;
+
+ /**
+ * 褰曞叆浜哄鍚峣d
+ */
+ private Long recorderId;
/**
* 褰曞叆浜哄鍚�
@@ -94,4 +98,12 @@
*/
private Long salesLedgerId;
+ @TableField(fill = FieldFill.INSERT)
+ private Long tenantId;
+
+ /**
+ * 鍚堝悓閲戦锛堜骇鍝佸惈绋庢�讳环锛�
+ */
+ private BigDecimal contractAmount;
+
}
diff --git a/src/main/java/com/ruoyi/purchase/service/IPurchaseLedgerService.java b/src/main/java/com/ruoyi/purchase/service/IPurchaseLedgerService.java
index 120c15c..7f8f10d 100644
--- a/src/main/java/com/ruoyi/purchase/service/IPurchaseLedgerService.java
+++ b/src/main/java/com/ruoyi/purchase/service/IPurchaseLedgerService.java
@@ -2,8 +2,10 @@
import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.purchase.dto.PurchaseLedgerDto;
import com.ruoyi.purchase.pojo.PurchaseLedger;
+import java.io.IOException;
import java.util.List;
/**
@@ -16,8 +18,9 @@
List<PurchaseLedger> selectPurchaseLedgerList(PurchaseLedger purchaseLedger);
- int addOrEditPurchase(PurchaseLedger purchaseLedger);
+ int addOrEditPurchase(PurchaseLedgerDto purchaseLedgerDto) throws IOException;
int deletePurchaseLedgerByIds(Long[] ids);
+ PurchaseLedgerDto getPurchaseById(PurchaseLedgerDto purchaseLedgerDto);
}
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 a209ccb..c8ef0fc 100644
--- a/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
+++ b/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
@@ -1,15 +1,44 @@
package com.ruoyi.purchase.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.exception.base.BaseException;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.other.mapper.TempFileMapper;
+import com.ruoyi.other.pojo.TempFile;
+import com.ruoyi.project.system.domain.SysUser;
+import com.ruoyi.project.system.mapper.SysUserMapper;
+import com.ruoyi.purchase.dto.PurchaseLedgerDto;
import com.ruoyi.purchase.mapper.PurchaseLedgerMapper;
import com.ruoyi.purchase.pojo.PurchaseLedger;
import com.ruoyi.purchase.service.IPurchaseLedgerService;
-import lombok.AllArgsConstructor;
+import com.ruoyi.sales.mapper.SalesLedgerFileMapper;
+import com.ruoyi.sales.mapper.SalesLedgerMapper;
+import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
+import com.ruoyi.sales.pojo.SalesLedger;
+import com.ruoyi.sales.pojo.SalesLedgerFile;
+import com.ruoyi.sales.pojo.SalesLedgerProduct;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.io.FilenameUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.StandardCopyOption;
+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.stream.Collectors;
/**
* 閲囪喘鍙拌处Service涓氬姟灞傚鐞�
@@ -18,10 +47,23 @@
* @date 2025-05-09
*/
@Service
-@AllArgsConstructor
+@RequiredArgsConstructor
+@Slf4j
public class PurchaseLedgerServiceImpl extends ServiceImpl<PurchaseLedgerMapper, PurchaseLedger> implements IPurchaseLedgerService {
- private PurchaseLedgerMapper purchaseLedgerMapper;
+ private final PurchaseLedgerMapper purchaseLedgerMapper;
+
+ private final SalesLedgerMapper salesLedgerMapper;
+ private final SalesLedgerProductMapper salesLedgerProductMapper;
+
+ private final SysUserMapper userMapper;
+
+ private final TempFileMapper tempFileMapper;
+
+ private final SalesLedgerFileMapper salesLedgerFileMapper;
+
+ @Value("${file.upload-dir}")
+ private String uploadDir;
@Override
public List<PurchaseLedger> selectPurchaseLedgerList(PurchaseLedger purchaseLedger) {
@@ -29,11 +71,137 @@
}
@Override
- public int addOrEditPurchase(PurchaseLedger purchaseLedger) {
+ public int addOrEditPurchase(PurchaseLedgerDto purchaseLedgerDto) throws IOException {
+
+ SalesLedger salesLedger = salesLedgerMapper.selectById(purchaseLedgerDto.getSalesLedgerId());
+
+ if (salesLedger == null) {
+ throw new BaseException("閿�鍞彴璐︿笉瀛樺湪");
+ }
+ SysUser sysUser = userMapper.selectUserById(purchaseLedgerDto.getRecorderId());
+
+ // DTO杞珽ntity
+ PurchaseLedger purchaseLedger = new PurchaseLedger();
+ BeanUtils.copyProperties(purchaseLedgerDto, purchaseLedger);
+ purchaseLedger.setTenantId(salesLedger.getTenantId());
+ purchaseLedger.setSalesContractNo(salesLedger.getSalesContractNo());
+ purchaseLedger.setRecorderId(purchaseLedgerDto.getRecorderId());
+ purchaseLedger.setRecorderName(sysUser.getNickName());
+
+ // 3. 鏂板鎴栨洿鏂颁富琛�
if (purchaseLedger.getId() == null) {
- return purchaseLedgerMapper.insert(purchaseLedger);
+ purchaseLedgerMapper.insert(purchaseLedger);
} else {
- return purchaseLedgerMapper.updateById(purchaseLedger);
+ purchaseLedgerMapper.updateById(purchaseLedger);
+ }
+
+ // 4. 澶勭悊瀛愯〃鏁版嵁
+ List<SalesLedgerProduct> productList = purchaseLedgerDto.getProductData();
+ if (productList != null && !productList.isEmpty()) {
+ handleSalesLedgerProducts(purchaseLedger.getId(), productList, purchaseLedgerDto.getType());
+
+ }
+
+ // 5. 杩佺Щ涓存椂鏂囦欢鍒版寮忕洰褰�
+ if (purchaseLedgerDto.getTempFileIds() != null && !purchaseLedgerDto.getTempFileIds().isEmpty()) {
+ migrateTempFilesToFormal(purchaseLedger.getId(), purchaseLedgerDto.getTempFileIds());
+ }
+
+ return 1;
+ }
+
+ private void handleSalesLedgerProducts(Long salesLedgerId, List<SalesLedgerProduct> products, Integer type) {
+ // 鎸塈D鍒嗙粍锛屽尯鍒嗘柊澧炲拰鏇存柊鐨勮褰�
+ Map<Boolean, List<SalesLedgerProduct>> partitionedProducts = products.stream()
+ .peek(p -> p.setSalesLedgerId(salesLedgerId))
+ .collect(Collectors.partitioningBy(p -> p.getId() != null));
+
+ List<SalesLedgerProduct> updateList = partitionedProducts.get(true);
+ List<SalesLedgerProduct> insertList = partitionedProducts.get(false);
+
+ // 鎵ц鏇存柊鎿嶄綔
+ if (!updateList.isEmpty()) {
+ for (SalesLedgerProduct product : updateList) {
+ product.setType(type);
+ salesLedgerProductMapper.updateById(product);
+ }
+ }
+ // 鎵ц鎻掑叆鎿嶄綔
+ if (!insertList.isEmpty()) {
+ for (SalesLedgerProduct salesLedgerProduct : insertList) {
+ salesLedgerProduct.setType(type);
+ salesLedgerProductMapper.insert(salesLedgerProduct);
+ }
+ }
+ }
+
+ /**
+ * 灏嗕复鏃舵枃浠惰縼绉诲埌姝e紡鐩綍
+ *
+ * @param businessId 涓氬姟ID锛堥攢鍞彴璐D锛�
+ * @param tempFileIds 涓存椂鏂囦欢ID鍒楄〃
+ * @throws IOException 鏂囦欢鎿嶄綔寮傚父
+ */
+ private void migrateTempFilesToFormal(Long businessId, List<String> tempFileIds) throws IOException {
+ if (CollectionUtils.isEmpty(tempFileIds)) {
+ return;
+ }
+
+ // 鏋勫缓姝e紡鐩綍璺緞锛堟寜涓氬姟绫诲瀷鍜屾棩鏈熷垎缁勶級
+ String formalDir = uploadDir + LocalDate.now().format(DateTimeFormatter.ISO_LOCAL_DATE);
+
+ Path formalDirPath = Paths.get(formalDir);
+
+ // 纭繚姝e紡鐩綍瀛樺湪锛堥�掑綊鍒涘缓锛�
+ if (!Files.exists(formalDirPath)) {
+ Files.createDirectories(formalDirPath);
+ }
+
+ for (String tempFileId : tempFileIds) {
+ // 鏌ヨ涓存椂鏂囦欢璁板綍
+ TempFile tempFile = tempFileMapper.selectById(tempFileId);
+ if (tempFile == null) {
+ log.warn("涓存椂鏂囦欢涓嶅瓨鍦紝璺宠繃澶勭悊: {}", tempFileId);
+ continue;
+ }
+
+ // 鏋勫缓姝e紡鏂囦欢鍚嶏紙鍖呭惈涓氬姟ID鍜屾椂闂存埑锛岄伩鍏嶅啿绐侊級
+ String originalFilename = tempFile.getOriginalName();
+ String fileExtension = FilenameUtils.getExtension(originalFilename);
+ String formalFilename = businessId + "_" +
+ System.currentTimeMillis() + "_" +
+ UUID.randomUUID().toString().substring(0, 8) +
+ (StringUtils.hasText(fileExtension) ? "." + fileExtension : "");
+
+ Path formalFilePath = formalDirPath.resolve(formalFilename);
+
+ try {
+ // 鎵ц鏂囦欢杩佺Щ锛堜娇鐢ㄥ師瀛愭搷浣滅‘淇濆畨鍏ㄦ�э級
+ Files.move(
+ Paths.get(tempFile.getTempPath()),
+ formalFilePath,
+ StandardCopyOption.REPLACE_EXISTING,
+ StandardCopyOption.ATOMIC_MOVE
+ );
+ log.info("鏂囦欢杩佺Щ鎴愬姛: {} -> {}", tempFile.getTempPath(), formalFilePath);
+
+ // 鏇存柊鏂囦欢璁板綍锛堝叧鑱斿埌涓氬姟ID锛�
+ SalesLedgerFile fileRecord = new SalesLedgerFile();
+ fileRecord.setLedgerId(businessId);
+ fileRecord.setName(originalFilename);
+ fileRecord.setUrl(formalFilePath.toString());
+ fileRecord.setCreateTime(LocalDateTime.now());
+ salesLedgerFileMapper.insert(fileRecord);
+
+ // 鍒犻櫎涓存椂鏂囦欢璁板綍
+ tempFileMapper.deleteById(tempFile);
+
+ log.info("鏂囦欢杩佺Щ鎴愬姛: {} -> {}", tempFile.getTempPath(), formalFilePath);
+ } catch (IOException e) {
+ log.error("鏂囦欢杩佺Щ澶辫触: {}", tempFile.getTempPath(), e);
+ // 鍙�夋嫨鍥炴粴浜嬪姟鎴栬褰曞け璐ユ枃浠�
+ throw new IOException("鏂囦欢杩佺Щ寮傚父", e);
+ }
}
}
@@ -41,4 +209,34 @@
public int deletePurchaseLedgerByIds(Long[] ids) {
return purchaseLedgerMapper.deleteBatchIds(Arrays.asList(ids));
}
+
+ @Override
+ public PurchaseLedgerDto getPurchaseById(PurchaseLedgerDto purchaseLedgerDto) {
+ // 1. 鏌ヨ涓昏〃
+ PurchaseLedger purchaseLedger = purchaseLedgerMapper.selectById(purchaseLedgerDto.getId());
+ if (purchaseLedger == null) {
+ throw new BaseException("閲囪喘鍙拌处涓嶅瓨鍦�");
+ }
+
+ // 2. 鏌ヨ瀛愯〃
+ LambdaQueryWrapper<SalesLedgerProduct> productWrapper = new LambdaQueryWrapper<>();
+ productWrapper.eq(SalesLedgerProduct::getSalesLedgerId, purchaseLedger.getId())
+ .eq(SalesLedgerProduct::getType, purchaseLedgerDto.getType());
+ List<SalesLedgerProduct> products = salesLedgerProductMapper.selectList(productWrapper);
+
+ // 3.鏌ヨ涓婁紶鏂囦欢
+ LambdaQueryWrapper<SalesLedgerFile> salesLedgerFileWrapper = new LambdaQueryWrapper<>();
+ salesLedgerFileWrapper.eq(SalesLedgerFile::getLedgerId, purchaseLedger.getId());
+ List<SalesLedgerFile> salesLedgerFiles = salesLedgerFileMapper.selectList(salesLedgerFileWrapper);
+
+ // 4. 杞崲 DTO
+ PurchaseLedgerDto resultDto = new PurchaseLedgerDto();
+ BeanUtils.copyProperties(purchaseLedger, resultDto);
+ if (!products.isEmpty()) {
+ resultDto.setHasChildren(true);
+ resultDto.setProductData(products);
+ resultDto.setSalesLedgerFiles(salesLedgerFiles);
+ }
+ return resultDto;
+ }
}
diff --git a/src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java b/src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java
index 18ad04f..ace01c0 100644
--- a/src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java
+++ b/src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java
@@ -6,8 +6,9 @@
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.sales.dto.SalesLedgerDto;
import com.ruoyi.sales.pojo.SalesLedger;
+import com.ruoyi.sales.service.ISalesLedgerFileService;
import com.ruoyi.sales.service.ISalesLedgerService;
-import org.springframework.beans.factory.annotation.Autowired;
+import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.*;
import com.ruoyi.framework.aspectj.lang.annotation.Log;
import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
@@ -23,9 +24,12 @@
*/
@RestController
@RequestMapping("/sales/ledger")
+@AllArgsConstructor
public class SalesLedgerController extends BaseController {
- @Autowired
+
private ISalesLedgerService salesLedgerService;
+
+ private ISalesLedgerFileService salesLedgerFileService;
/**
* 鏌ヨ閿�鍞彴璐﹀垪琛�
@@ -87,4 +91,16 @@
List<SalesLedger> list = salesLedgerService.selectSalesLedgerList(salesLedgerDto);
return AjaxResult.success(list);
}
+
+ /**
+ * 閿�鍞彴璐﹂檮浠跺垹闄�
+ */
+ @Log(title = "閿�鍞彴璐﹂檮浠跺垹闄�", businessType = BusinessType.DELETE)
+ @DeleteMapping("/delLedgerFile")
+ public AjaxResult delLedgerFile(@RequestBody Long[] ids) {
+ if (ids == null || ids.length == 0) {
+ return AjaxResult.error("璇蜂紶鍏ヨ鍒犻櫎鐨処D");
+ }
+ return toAjax(salesLedgerFileService.deleteSalesLedgerByIds(ids));
+ }
}
diff --git a/src/main/java/com/ruoyi/sales/dto/SalesLedgerDto.java b/src/main/java/com/ruoyi/sales/dto/SalesLedgerDto.java
index c069104..af98858 100644
--- a/src/main/java/com/ruoyi/sales/dto/SalesLedgerDto.java
+++ b/src/main/java/com/ruoyi/sales/dto/SalesLedgerDto.java
@@ -1,6 +1,7 @@
package com.ruoyi.sales.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.sales.pojo.SalesLedgerFile;
import com.ruoyi.sales.pojo.SalesLedgerProduct;
import lombok.Data;
@@ -23,6 +24,8 @@
private String attachmentMaterials;
private Boolean hasChildren = false;
private List<SalesLedgerProduct> productData;
-
private List<String> tempFileIds;
+ private List<SalesLedgerFile> SalesLedgerFiles;
+
+ private Integer Type;
}
diff --git a/src/main/java/com/ruoyi/sales/mapper/SalesLedgerMapper.java b/src/main/java/com/ruoyi/sales/mapper/SalesLedgerMapper.java
index c188733..8656614 100644
--- a/src/main/java/com/ruoyi/sales/mapper/SalesLedgerMapper.java
+++ b/src/main/java/com/ruoyi/sales/mapper/SalesLedgerMapper.java
@@ -19,4 +19,6 @@
* @return 搴忓垪鍙峰垪琛�
*/
List<Integer> selectSequencesByDate(@Param("datePart") String datePart);
+
+ List getSalesNo();
}
diff --git a/src/main/java/com/ruoyi/sales/pojo/SalesLedger.java b/src/main/java/com/ruoyi/sales/pojo/SalesLedger.java
index b6eaf67..2ebf084 100644
--- a/src/main/java/com/ruoyi/sales/pojo/SalesLedger.java
+++ b/src/main/java/com/ruoyi/sales/pojo/SalesLedger.java
@@ -91,7 +91,7 @@
/**
* 鍚堝悓閲戦锛堜骇鍝佸惈绋庢�讳环锛�
*/
- @Excel(name = "绋庣巼")
+ @Excel(name = "鍚堝悓閲戦")
private BigDecimal contractAmount;
}
diff --git a/src/main/java/com/ruoyi/sales/pojo/SalesLedgerFile.java b/src/main/java/com/ruoyi/sales/pojo/SalesLedgerFile.java
index 2ee36d7..ace387a 100644
--- a/src/main/java/com/ruoyi/sales/pojo/SalesLedgerFile.java
+++ b/src/main/java/com/ruoyi/sales/pojo/SalesLedgerFile.java
@@ -9,6 +9,8 @@
@TableName("sales_ledger_file")
public class SalesLedgerFile {
+ private static final long serialVersionUID = 1L;
+
@TableId(type = IdType.AUTO)
private Long id;
@@ -16,10 +18,10 @@
private Long ledgerId;
/** 鏂囦欢鍚嶇О */
- private String fileName;
+ private String name;
/** 鏂囦欢璺緞 */
- private String filePath;
+ private String url;
/** 鍒涘缓鏃堕棿 */
@TableField(fill = FieldFill.INSERT)
diff --git a/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java b/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java
index 79c397e..c620152 100644
--- a/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java
+++ b/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java
@@ -84,4 +84,9 @@
*/
@Excel(name = "鍙戠エ绫诲瀷")
private String invoiceType;
+
+ /**
+ * 鍙拌处绫诲瀷 1.閿�鍞� 2锛岄噰璐�
+ */
+ private Integer type;
}
diff --git a/src/main/java/com/ruoyi/sales/service/ISalesLedgerFileService.java b/src/main/java/com/ruoyi/sales/service/ISalesLedgerFileService.java
new file mode 100644
index 0000000..4cbbeb5
--- /dev/null
+++ b/src/main/java/com/ruoyi/sales/service/ISalesLedgerFileService.java
@@ -0,0 +1,6 @@
+package com.ruoyi.sales.service;
+
+public interface ISalesLedgerFileService {
+
+ int deleteSalesLedgerByIds(Long[] ids);
+}
diff --git a/src/main/java/com/ruoyi/sales/service/ISalesLedgerService.java b/src/main/java/com/ruoyi/sales/service/ISalesLedgerService.java
index 10eedf4..870db65 100644
--- a/src/main/java/com/ruoyi/sales/service/ISalesLedgerService.java
+++ b/src/main/java/com/ruoyi/sales/service/ISalesLedgerService.java
@@ -21,4 +21,6 @@
int addOrUpdateSalesLedger(SalesLedgerDto salesLedgerDto);
SalesLedgerDto getSalesLedgerWithProducts(SalesLedgerDto salesLedgerDto);
+
+ List getSalesNo();
}
diff --git a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerFileServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerFileServiceImpl.java
new file mode 100644
index 0000000..41b82d1
--- /dev/null
+++ b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerFileServiceImpl.java
@@ -0,0 +1,22 @@
+package com.ruoyi.sales.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.sales.mapper.SalesLedgerFileMapper;
+import com.ruoyi.sales.pojo.SalesLedgerFile;
+import com.ruoyi.sales.service.ISalesLedgerFileService;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.util.Arrays;
+
+@Service
+@AllArgsConstructor
+public class SalesLedgerFileServiceImpl extends ServiceImpl<SalesLedgerFileMapper, SalesLedgerFile> implements ISalesLedgerFileService {
+
+ private SalesLedgerFileMapper salesLedgerFileMapper;
+
+ @Override
+ public int deleteSalesLedgerByIds(Long[] ids) {
+ return salesLedgerFileMapper.deleteBatchIds(Arrays.asList(ids));
+ }
+}
diff --git a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
index c397b9f..b34d193 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
@@ -3,6 +3,8 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.purchase.mapper.PurchaseLedgerMapper;
+import com.ruoyi.purchase.pojo.PurchaseLedger;
import com.ruoyi.sales.mapper.SalesLedgerMapper;
import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
import com.ruoyi.sales.pojo.SalesLedger;
@@ -35,6 +37,8 @@
private SalesLedgerMapper salesLedgerMapper;
+ private PurchaseLedgerMapper purchaseLedgerMapper;
+
@Override
public SalesLedgerProduct selectSalesLedgerProductById(Long id) {
return salesLedgerProductMapper.selectById(id);
@@ -43,7 +47,8 @@
@Override
public List<SalesLedgerProduct> selectSalesLedgerProductList(SalesLedgerProduct salesLedgerProduct) {
LambdaQueryWrapper<SalesLedgerProduct> queryWrapper = new LambdaQueryWrapper<>();
- queryWrapper.eq(SalesLedgerProduct::getSalesLedgerId,salesLedgerProduct.getSalesLedgerId());
+ queryWrapper.eq(SalesLedgerProduct::getSalesLedgerId, salesLedgerProduct.getSalesLedgerId())
+ .eq(SalesLedgerProduct::getType, salesLedgerProduct.getType());
return salesLedgerProductMapper.selectList(queryWrapper);
}
@@ -92,7 +97,6 @@
public int addOrUpdateSalesLedgerProduct(SalesLedgerProduct salesLedgerProduct) {
int result;
Long salesLedgerId = salesLedgerProduct.getSalesLedgerId();
-
if (salesLedgerProduct.getId() == null) {
result = salesLedgerProductMapper.insert(salesLedgerProduct);
} else {
@@ -103,19 +107,29 @@
if (result > 0 && salesLedgerId != null) {
// 鏌ヨ璇ヤ富琛ㄤ笅鐨勬墍鏈夊瓙琛ㄦ暟鎹�
LambdaQueryWrapper<SalesLedgerProduct> wrapper = new LambdaQueryWrapper<>();
- wrapper.eq(SalesLedgerProduct::getSalesLedgerId, salesLedgerId);
+ wrapper.eq(SalesLedgerProduct::getSalesLedgerId, salesLedgerId)
+ .eq(SalesLedgerProduct::getType, salesLedgerProduct.getType());
List<SalesLedgerProduct> productList = salesLedgerProductMapper.selectList(wrapper);
-
- // 璋冪敤閫氱敤鏂规硶鏇存柊涓昏〃閲戦
- updateMainContractAmount(
- salesLedgerId,
- productList,
- SalesLedgerProduct::getTaxInclusiveTotalPrice,
- salesLedgerMapper,
- SalesLedger.class
- );
+ if (salesLedgerProduct.getType() == 1) {
+ // 璋冪敤閫氱敤鏂规硶鏇存柊涓昏〃閲戦
+ updateMainContractAmount(
+ salesLedgerId,
+ productList,
+ SalesLedgerProduct::getTaxInclusiveTotalPrice,
+ salesLedgerMapper,
+ SalesLedger.class
+ );
+ } else {
+ // 璋冪敤閫氱敤鏂规硶鏇存柊涓昏〃閲戦
+ updateMainContractAmount(
+ salesLedgerId,
+ productList,
+ SalesLedgerProduct::getTaxInclusiveTotalPrice,
+ purchaseLedgerMapper,
+ PurchaseLedger.class
+ );
+ }
}
-
return result;
}
diff --git a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
index 38ab1d8..777bbb4 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
@@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
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.basic.mapper.CustomerMapper;
import com.ruoyi.basic.pojo.Customer;
@@ -28,7 +29,6 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
-import java.io.FileNotFoundException;
import java.io.IOException;
import java.lang.reflect.Field;
import java.math.BigDecimal;
@@ -52,11 +52,11 @@
@Slf4j
public class SalesLedgerServiceImpl extends ServiceImpl<SalesLedgerMapper, SalesLedger> implements ISalesLedgerService {
- private final SalesLedgerMapper salesLedgerMapper;
+ private final SalesLedgerMapper salesLedgerMapper;
- private final CustomerMapper customerMapper;
+ private final CustomerMapper customerMapper;
- private final SalesLedgerProductMapper salesLedgerProductMapper;
+ private final SalesLedgerProductMapper salesLedgerProductMapper;
private final SalesLedgerFileMapper salesLedgerFileMapper;
@@ -92,14 +92,58 @@
productWrapper.eq(SalesLedgerProduct::getSalesLedgerId, salesLedger.getId());
List<SalesLedgerProduct> products = salesLedgerProductMapper.selectList(productWrapper);
- // 3. 杞崲 DTO
+ // 3.鏌ヨ涓婁紶鏂囦欢
+ LambdaQueryWrapper<SalesLedgerFile> salesLedgerFileWrapper = new LambdaQueryWrapper<>();
+ salesLedgerFileWrapper.eq(SalesLedgerFile::getLedgerId, salesLedger.getId());
+ List<SalesLedgerFile> salesLedgerFiles = salesLedgerFileMapper.selectList(salesLedgerFileWrapper);
+
+ // 4. 杞崲 DTO
SalesLedgerDto resultDto = new SalesLedgerDto();
BeanUtils.copyProperties(salesLedger, resultDto);
if (!products.isEmpty()) {
resultDto.setHasChildren(true);
resultDto.setProductData(products);
+ resultDto.setSalesLedgerFiles(salesLedgerFiles);
}
return resultDto;
+ }
+
+ @Override
+ public List<Map<String, Object>> getSalesNo() {
+ LambdaQueryWrapper<SalesLedger> queryWrapper = Wrappers.lambdaQuery();
+ queryWrapper.select(SalesLedger::getId, SalesLedger::getSalesContractNo);
+
+ // 鑾峰彇鍘熷鏌ヨ缁撴灉
+ List<Map<String, Object>> result = salesLedgerMapper.selectMaps(queryWrapper);
+
+ // 灏嗕笅鍒掔嚎鍛藉悕杞崲涓洪┘宄板懡鍚�
+ return result.stream().map(map -> map.entrySet().stream()
+ .collect(Collectors.toMap(
+ entry -> underlineToCamel(entry.getKey()),
+ Map.Entry::getValue))
+ ).collect(Collectors.toList());
+ }
+
+ /**
+ * 涓嬪垝绾垮懡鍚嶈浆椹煎嘲鍛藉悕
+ */
+ 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();
}
@Override
@@ -148,7 +192,7 @@
// 4. 澶勭悊瀛愯〃鏁版嵁
List<SalesLedgerProduct> productList = salesLedgerDto.getProductData();
if (productList != null && !productList.isEmpty()) {
- handleSalesLedgerProducts(salesLedger.getId(), productList);
+ handleSalesLedgerProducts(salesLedger.getId(), productList,salesLedgerDto.getType());
updateMainContractAmount(
salesLedger.getId(),
productList,
@@ -197,7 +241,8 @@
// 鏌ヨ涓存椂鏂囦欢璁板綍
TempFile tempFile = tempFileMapper.selectById(tempFileId);
if (tempFile == null) {
- throw new FileNotFoundException("涓存椂鏂囦欢涓嶅瓨鍦�: " + tempFileId);
+ log.warn("涓存椂鏂囦欢涓嶅瓨鍦紝璺宠繃澶勭悊: {}", tempFileId);
+ continue;
}
// 鏋勫缓姝e紡鏂囦欢鍚嶏紙鍖呭惈涓氬姟ID鍜屾椂闂存埑锛岄伩鍏嶅啿绐侊級
@@ -223,8 +268,8 @@
// 鏇存柊鏂囦欢璁板綍锛堝叧鑱斿埌涓氬姟ID锛�
SalesLedgerFile fileRecord = new SalesLedgerFile();
fileRecord.setLedgerId(businessId);
- fileRecord.setFileName(originalFilename);
- fileRecord.setFilePath(formalFilePath.toString());
+ fileRecord.setName(originalFilename);
+ fileRecord.setUrl(formalFilePath.toString());
fileRecord.setCreateTime(LocalDateTime.now());
salesLedgerFileMapper.insert(fileRecord);
@@ -241,7 +286,7 @@
}
- private void handleSalesLedgerProducts(Long salesLedgerId, List<SalesLedgerProduct> products) {
+ private void handleSalesLedgerProducts(Long salesLedgerId, List<SalesLedgerProduct> products,Integer type) {
// 鎸塈D鍒嗙粍锛屽尯鍒嗘柊澧炲拰鏇存柊鐨勮褰�
Map<Boolean, List<SalesLedgerProduct>> partitionedProducts = products.stream()
.peek(p -> p.setSalesLedgerId(salesLedgerId))
@@ -253,12 +298,14 @@
// 鎵ц鏇存柊鎿嶄綔
if (!updateList.isEmpty()) {
for (SalesLedgerProduct product : updateList) {
+ product.setType(type);
salesLedgerProductMapper.updateById(product);
}
}
// 鎵ц鎻掑叆鎿嶄綔
if (!insertList.isEmpty()) {
for (SalesLedgerProduct salesLedgerProduct : insertList) {
+ salesLedgerProduct.setType(type);
salesLedgerProductMapper.insert(salesLedgerProduct);
}
}
diff --git a/src/main/resources/mapper/sales/SalesLedgerMapper.xml b/src/main/resources/mapper/sales/SalesLedgerMapper.xml
index 16ba140..add6a3f 100644
--- a/src/main/resources/mapper/sales/SalesLedgerMapper.xml
+++ b/src/main/resources/mapper/sales/SalesLedgerMapper.xml
@@ -9,4 +9,7 @@
FROM sales_ledger
WHERE SUBSTR(sales_contract_no, 1, 8) = #{datePart}
</select>
+ <select id="getSalesNo" resultType="com.ruoyi.sales.pojo.SalesLedger">
+
+ </select>
</mapper>
\ No newline at end of file
--
Gitblit v1.9.3