From 684e4306a08feeae188070f264148e6765da8dcf Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期日, 20 九月 2026 19:25:15 +0800
Subject: [PATCH] feat(account): 更新往来付款回款流水表及接口
---
src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordOutServiceImpl.java | 91 +++++++++++++++++++++++++++++++++++++++++----
1 files changed, 82 insertions(+), 9 deletions(-)
diff --git a/src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordOutServiceImpl.java b/src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordOutServiceImpl.java
index 0735a39..d75db6c 100644
--- a/src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordOutServiceImpl.java
+++ b/src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordOutServiceImpl.java
@@ -5,28 +5,34 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.utils.poi.ExcelUtil;
-import com.ruoyi.procurementrecord.dto.ProcurementRecordOutAdd;
-import com.ruoyi.procurementrecord.dto.ProcurementRecordOutPageDto;
-import com.ruoyi.procurementrecord.dto.ProcurementUpdateDto;
+import com.ruoyi.procurementrecord.bean.dto.ProcurementRecordOutAdd;
+import com.ruoyi.procurementrecord.bean.dto.ProcurementRecordOutPageDto;
+import com.ruoyi.procurementrecord.bean.dto.ProcurementUpdateDto;
+import com.ruoyi.procurementrecord.bean.vo.BatchNoOptionVo;
import com.ruoyi.procurementrecord.mapper.ProcurementRecordOutMapper;
import com.ruoyi.procurementrecord.pojo.ProcurementRecordOut;
-import com.ruoyi.procurementrecord.pojo.ProcurementRecordStorage;
import com.ruoyi.procurementrecord.service.ProcurementRecordOutService;
import com.ruoyi.project.system.domain.SysUser;
import com.ruoyi.project.system.mapper.SysUserMapper;
+import com.ruoyi.sales.dto.ShippingInfoDto;
+import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
+import com.ruoyi.sales.pojo.SalesLedgerProduct;
+import com.ruoyi.sales.pojo.ShippingProductDetail;
+import com.ruoyi.sales.service.ShippingInfoService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
-import java.text.DateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
+import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
@@ -39,11 +45,26 @@
@Slf4j
public class ProcurementRecordOutServiceImpl extends ServiceImpl<ProcurementRecordOutMapper, ProcurementRecordOut> implements ProcurementRecordOutService {
+ /**
+ * 鍑哄簱绫诲瀷锛氶攢鍞嚭搴撱�傛补鍝侀攢鍞嚭搴撳嵆鍙戣揣
+ */
+ private static final Integer TYPE_SALE_OUT = 2;
+
+ /**
+ * 閿�鍞骇鍝佹槑缁嗙被鍨嬶細1閿�鍞紙sales_ledger_product.type锛屼笌鍑哄簱 type 璇箟涓嶅悓锛�
+ */
+ private static final Integer LEDGER_PRODUCT_TYPE_SALE = 1;
+
public final ProcurementRecordOutMapper procurementRecordOutMapper;
public final SysUserMapper sysUserMapper;
+ public final ShippingInfoService shippingInfoService;
+
+ public final SalesLedgerProductMapper salesLedgerProductMapper;
+
@Override
+ @Transactional(rollbackFor = Exception.class)
public int stockout(ProcurementRecordOutAdd procurementRecordOutAdd) {
SysUser sysUser = sysUserMapper.selectUserById(Long.valueOf(procurementRecordOutAdd.getUserId().toString()));
if(sysUser == null){
@@ -71,7 +92,7 @@
Long aLong = procurementRecordOutMapper.selectCount(procurementRecordLambdaQueryWrapper);
ProcurementRecordOut.ProcurementRecordOutBuilder procurementRecordOut = ProcurementRecordOut.builder()
.procurementRecordStorageId(procurementRecordOutAdd.getId())
- .code("LS" + dateFormat.format(now) + String.format("%03d", aLong1 + 1))
+ .code("SC" + dateFormat.format(now) + String.format("%03d", aLong1 + 1))
.salesLedgerProductId(procurementRecordOutAdd.getSalesLedgerProductId())
.inboundBatches(aLong.equals(0L) ? "绗�1鎵规" : "绗�"+ (aLong + 1) + "鎵规")
.inboundNum(new BigDecimal(procurementRecordOutAdd.getQuantity()))
@@ -80,9 +101,41 @@
.createUser(Long.valueOf(procurementRecordOutAdd.getUserId()))
.createBy(sysUser.getNickName())
.updateUser(Long.valueOf(procurementRecordOutAdd.getUserId()))
- .updateTime(LocalDateTime.now());
- this.save(procurementRecordOut.build());
+ .updateTime(LocalDateTime.now())
+ .productModelId(procurementRecordOutAdd.getProductModelId())
+ .batchNo(procurementRecordOutAdd.getBatchNo());
+ ProcurementRecordOut record = procurementRecordOut.build();
+ this.save(record);
+
+ // 娌瑰搧閿�鍞嚭搴撳嵆鍙戣揣锛氳嚜鍔ㄧ敓鎴愪竴鏉″凡鍙戣揣鐨勫彂璐у彴璐﹀苟鍥炲啓鍏宠仈
+ if (TYPE_SALE_OUT.equals(record.getType())) {
+ record.setShippingInfoId(createShippingForOutbound(record));
+ this.updateById(record);
+ }
return 0;
+ }
+
+ /**
+ * 鎸夊嚭搴撹褰曠敓鎴愬彂璐у彴璐︼細鎵规蹇呭~锛屽簱瀛樼敱鍙戣揣渚ф墸鍑�
+ */
+ private Long createShippingForOutbound(ProcurementRecordOut record) {
+ if (StringUtils.isBlank(record.getBatchNo())) {
+ throw new RuntimeException("璇烽�夋嫨鍑哄簱鎵规");
+ }
+ SalesLedgerProduct salesLedgerProduct = salesLedgerProductMapper.selectById(record.getSalesLedgerProductId());
+ if (salesLedgerProduct == null || !LEDGER_PRODUCT_TYPE_SALE.equals(salesLedgerProduct.getType())) {
+ throw new RuntimeException("閿�鍞嚭搴撴湭鍏宠仈鍒版湁鏁堢殑閿�鍞骇鍝佹槑缁�");
+ }
+ ShippingProductDetail detail = new ShippingProductDetail();
+ detail.setProductModelId(record.getProductModelId());
+ detail.setQuantity(record.getInboundNum());
+ detail.setBatchNo(record.getBatchNo());
+
+ ShippingInfoDto shippingInfoDto = new ShippingInfoDto();
+ shippingInfoDto.setSalesLedgerId(salesLedgerProduct.getSalesLedgerId());
+ shippingInfoDto.setSalesLedgerProductId(record.getSalesLedgerProductId());
+ shippingInfoDto.setBatchNoDetailList(Collections.singletonList(detail));
+ return shippingInfoService.addShippedFromOutbound(shippingInfoDto);
}
@Override
@@ -95,10 +148,17 @@
}
@Override
+ @Transactional(rollbackFor = Exception.class)
public int deletePro(ProcurementUpdateDto procurementDto) {
List<ProcurementRecordOut> procurementRecordOutByIds = getProcurementRecordOutByIds(procurementDto.getIds());
if(CollectionUtils.isEmpty(procurementRecordOutByIds)){
throw new RuntimeException("鏈煡璇㈠埌閫変腑鐨勪汉");
+ }
+ // 閿�鍞嚭搴撳凡鐢熸垚鍙戣揣鍗曪紝鍒犻櫎鍑哄簱鍗曞墠鍏堝啿閿�鍙戣揣鍗曞苟褰掕繕宸叉墸搴撳瓨
+ for (ProcurementRecordOut record : procurementRecordOutByIds) {
+ if (record.getShippingInfoId() != null) {
+ shippingInfoService.cancelByOutbound(record.getShippingInfoId());
+ }
}
procurementRecordOutMapper.deleteBatchIds(procurementRecordOutByIds.stream().map(ProcurementRecordOut::getId).collect(Collectors.toList()));
return 0;
@@ -120,4 +180,17 @@
public IPage<ProcurementRecordOutPageDto> listPageByCustom(Page page, ProcurementRecordOutPageDto procurementDto) {
return procurementRecordOutMapper.listPageByCustom(page, procurementDto);
}
+
+ @Override
+ public IPage<ProcurementRecordOutPageDto> listPageBySemiProduct(Page page, ProcurementRecordOutPageDto procurementDto) {
+ return procurementRecordOutMapper.listPageBySemiProduct(page, procurementDto);
+ }
+
+ @Override
+ public List<BatchNoOptionVo> listBatchNoByProductModelId(Long productModelId) {
+ if (productModelId == null) {
+ return Collections.emptyList();
+ }
+ return procurementRecordOutMapper.listBatchNoByProductModelId(productModelId);
+ }
}
--
Gitblit v1.9.3