From f3715712dc101a12a5d91e7231888fbc06452b8f Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期五, 03 四月 2026 18:42:52 +0800
Subject: [PATCH] fix: 库存出库空数据补全
---
src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java | 308 +++++++++++++++++++++++++++++++++++++++++++--------
1 files changed, 258 insertions(+), 50 deletions(-)
diff --git a/src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java b/src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java
index 24b58ab..0a3dffa 100644
--- a/src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java
+++ b/src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java
@@ -4,7 +4,8 @@
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.common.utils.DateUtils;
+import com.ruoyi.basic.pojo.SupplierManage;
+import com.ruoyi.basic.service.ISupplierService;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.framework.security.LoginUser;
@@ -25,9 +26,10 @@
import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
+import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
-import java.util.List;
+import java.util.*;
import java.util.stream.Collectors;
/**
@@ -65,18 +67,18 @@
List<ProcurementRecordStorage> collect1 = procurementRecordStorages.stream()
.filter(procurementRecordStorage -> procurementRecordStorage.getSalesLedgerProductId().equals(dto.getId()))
.collect(Collectors.toList());
-
+
// 濡傛灉娌℃湁鐩稿叧鐨勫叆搴撹褰曪紝璺宠繃璇ユ潯鏁版嵁
if(CollectionUtils.isEmpty(collect1)){
dto.setQuantity0(dto.getQuantity());
continue;
}
-
+
// 璁$畻宸插叆搴撴暟閲忔�诲拰锛屽苟璁剧疆寰呭叆搴撴暟閲�
BigDecimal totalInboundNum = collect1.stream()
.map(ProcurementRecordStorage::getInboundNum)
.reduce(BigDecimal.ZERO, BigDecimal::add);
-
+
// 寰呭叆搴撴暟閲� = 鎬绘暟閲� - 宸插叆搴撴暟閲�
dto.setQuantity0(dto.getQuantity().subtract(totalInboundNum));
}
@@ -103,8 +105,11 @@
public int updatePro(ProcurementUpdateDto procurementDto) {
ProcurementRecordStorage procurementRecordStorageById = getProcurementRecordById(procurementDto.getId());
procurementRecordStorageById.setInboundNum(procurementDto.getQuantityStock());
+ procurementRecordStorageById.setWarnNum(procurementDto.getWarnNum());
procurementRecordStorageById.setUpdateUser(SecurityUtils.getLoginUser().getUserId());
procurementRecordStorageById.setUpdateTime(LocalDateTime.now());
+ procurementRecordStorageById.setOutStockQuantity(procurementDto.getOutStockQuantity());
+ procurementRecordStorageById.setShortageDescription(procurementDto.getShortageDescription());
return procurementRecordMapper.updateById(procurementRecordStorageById);
}
@@ -171,18 +176,26 @@
public int updateManagement(ProcurementManagementUpdateDto procurementDto) {
LoginUser loginUser = SecurityUtils.getLoginUser();
SysUser sysUser = sysUserMapper.selectUserById(procurementDto.getCreateUser());
- if(sysUser == null){
+ if (sysUser == null) {
throw new RuntimeException("鍏ュ簱浜轰笉瀛樺湪");
}
DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String entryDateStr = procurementDto.getEntryDate() + " 00:00:00";
String createTimeStr = procurementDto.getCreateTime() + " 00:00:00";
+ SalesLedgerProduct salesLedgerProduct = salesLedgerProductMapper.selectById(procurementDto.getSalesLedgerProductId());
+ if (procurementDto.getSalesLedgerProductId() != null && salesLedgerProduct == null) {
+ throw new RuntimeException("閿�鍞彴璐︿骇鍝佷笉瀛樺湪");
+ }
+ if (procurementDto.getSalesLedgerProductId() != null && salesLedgerProduct != null) {
+ salesLedgerProduct.setMinStock(procurementDto.getMinStock());
+ salesLedgerProductMapper.updateById(salesLedgerProduct);
+ }
ProcurementRecordStorage procurementRecordStorageById = getProcurementRecordById(procurementDto.getId());
procurementRecordStorageById.setCreateBy(sysUser.getNickName());
procurementRecordStorageById.setCreateUser(sysUser.getUserId());
- procurementRecordStorageById.setUpdateTime(LocalDateTime.parse(entryDateStr,df));
+ procurementRecordStorageById.setUpdateTime(LocalDateTime.parse(entryDateStr, df));
procurementRecordStorageById.setUpdateUser(loginUser.getUserId());
- procurementRecordStorageById.setCreateTime(LocalDateTime.parse(createTimeStr,df));
+ procurementRecordStorageById.setCreateTime(LocalDateTime.parse(createTimeStr, df));
procurementRecordMapper.updateById(procurementRecordStorageById);
return 0;
}
@@ -231,56 +244,42 @@
}
@Override
- public int add(ProcurementAddDto procurementDto) {
- LoginUser loginUser = SecurityUtils.getLoginUser();
- // 鎵归噺鏂板
- for (Details detail : procurementDto.getDetails()) {
- // 鏌ヨ閲囪喘鍏ュ簱鏁伴噺
- LambdaQueryWrapper<ProcurementRecordStorage> procurementRecordLambdaQueryWrapper = new LambdaQueryWrapper<>();
- procurementRecordLambdaQueryWrapper.eq(ProcurementRecordStorage::getSalesLedgerProductId, detail.getId());
- Long aLong = procurementRecordMapper.selectCount(procurementRecordLambdaQueryWrapper);
+ public Map<String, Object> getReportList(Page page, ProcurementPageDto procurementDto) {
+ // 鏋勫缓鎶ヨ〃鏁版嵁缁撴瀯
+ Map<String, Object> reportData = new HashMap<>();
+ // 2. 鏋勫缓鍥捐〃鏁版嵁
+ Map<String, Object> chartData = new HashMap<>();
- ProcurementRecordStorage.ProcurementRecordStorageBuilder procurementRecordBuilder = ProcurementRecordStorage.builder()
- .salesLedgerProductId(detail.getId())
- .inboundBatches(aLong.equals(0L) ? "绗�1鎵规" : "绗�"+ (aLong + 1) + "鎵规")
- .inboundNum(detail.getInboundQuantity())
- .createTime(LocalDateTime.now())
- .createUser(loginUser.getUserId())
- .updateTime(LocalDateTime.now())
- .updateUser(loginUser.getUserId())
- .tenantId(loginUser.getTenantId())
- .createBy(procurementDto.getNickName());
- this.save(procurementRecordBuilder.build());
- // 鍏ュ簱鎴愬姛鍑忔帀閲囪喘鏁伴噺
-// LambdaQueryWrapper<SalesLedgerProduct> salesLedgerProductLambdaQueryWrapper = new LambdaQueryWrapper<>();
-// salesLedgerProductLambdaQueryWrapper.eq(SalesLedgerProduct::getId, detail.getId());
-// SalesLedgerProduct salesLedgerProduct = salesLedgerProductMapper.selectOne(salesLedgerProductLambdaQueryWrapper);
-// if(salesLedgerProduct == null){
-// throw new RuntimeException("鏈壘鍒拌鍟嗗搧");
-// }
-// salesLedgerProduct.setQuantity(salesLedgerProduct.getQuantity().subtract(detail.getInboundQuantity()));
-// salesLedgerProductMapper.updateById(salesLedgerProduct);
- }
- return 1;
- }
-
- @Override
- public IPage<ProcurementPageDto> listPage(Page page, ProcurementPageDto procurementDto) {
- IPage<ProcurementPageDto> procurementPageDtoIPage = procurementRecordMapper.listPage(page, procurementDto);
- List<ProcurementPageDto> procurementPageDtos = procurementPageDtoIPage.getRecords();
+ IPage<ProcurementPageDtoCopy> procurementPageDtoCopyIPage = procurementRecordMapper.listPageCopy(page, procurementDto);
+ List<ProcurementPageDtoCopy> procurementPageDtoCopyList = procurementPageDtoCopyIPage.getRecords();
// 璁$畻寰呭叆搴撴暟閲�
+ reportData.put("tableData", procurementPageDtoCopyList);
// 鏌ヨ閲囪喘璁板綍宸插叆搴撴暟閲�
- List<Integer> collect = procurementPageDtos.stream().map(ProcurementPageDto::getId).collect(Collectors.toList());
- if(CollectionUtils.isEmpty( collect)){
- return procurementPageDtoIPage;
+ List<Integer> collect = procurementPageDtoCopyList.stream().map(ProcurementPageDtoCopy::getId).collect(Collectors.toList());
+ if(CollectionUtils.isEmpty(collect)){
+ return reportData;
}
LambdaQueryWrapper<ProcurementRecordOut> procurementRecordLambdaQueryWrapper = new LambdaQueryWrapper<>();
procurementRecordLambdaQueryWrapper.in(ProcurementRecordOut::getProcurementRecordStorageId, collect);
List<ProcurementRecordOut> procurementRecords = procurementRecordOutMapper.selectList(procurementRecordLambdaQueryWrapper);
if(CollectionUtils.isEmpty( procurementRecords)){
- return procurementPageDtoIPage;
+ return reportData;
}
- for (ProcurementPageDto dto : procurementPageDtos) {
+ int totalIn =0;
+ int totalOut =0;
+ int currentStock =0;
+ int turnoverRate =0;
+ List<String> dates = new ArrayList<>();
+ List<Integer> values = new ArrayList<>();
+ List<String> comparisonDates = new ArrayList<>();
+ List<Integer> inValues = new ArrayList<>();
+ List<Integer> outValues = new ArrayList<>();
+ // 瀹氫箟鏃ユ湡鏍煎紡鍖栧櫒锛屾寚瀹氫负yyyy-MM-dd鏍煎紡
+ DateTimeFormatter dateFormatter = DateTimeFormatter.ISO_LOCAL_DATE;
+ for (ProcurementPageDtoCopy dto : procurementPageDtoCopyList) {
+ dates.add(dto.getCreateTime().format(dateFormatter));
+ comparisonDates.add(dto.getCreateTime().format(dateFormatter));
+
// 鏍规嵁閲囪喘鍙拌处ID绛涢�夊搴旂殑鍑哄簱璁板綍
List<ProcurementRecordOut> collect1 = procurementRecords.stream()
.filter(ProcurementRecordOut -> ProcurementRecordOut.getProcurementRecordStorageId().equals(dto.getId()))
@@ -299,6 +298,214 @@
// 寰呭嚭搴撴暟閲� = 鎬绘暟閲� - 宸插嚭搴撴暟閲�
dto.setInboundNum0(dto.getInboundNum().subtract(totalInboundNum));
+
+ // 璁$畻鎬诲叆搴撴暟閲�
+ totalIn += dto.getInboundNum().intValue();
+ inValues.add(totalIn);
+ // 璁$畻鎬诲嚭搴撴暟閲�
+ totalOut += totalInboundNum.intValue();
+ outValues.add(totalOut);
+ // 璁$畻褰撳墠搴撳瓨
+ currentStock += dto.getInboundNum().intValue() - totalInboundNum.intValue();
+ values.add(currentStock);
+ // 璁$畻鍛ㄨ浆鐜�
+ if(totalIn > 0){
+ turnoverRate = totalOut * 100 / totalIn;
+ }
+ }
+
+
+ // 1. 鏋勫缓姹囨�绘暟鎹�
+ Map<String, Object> summary = new HashMap<>();
+ summary.put("totalIn", totalIn); // 鎬诲叆搴撻噺锛屽疄闄呭簲浠庢暟鎹绠�
+ summary.put("totalOut", totalOut); // 鎬诲嚭搴撻噺锛屽疄闄呭簲浠庢暟鎹绠�
+ summary.put("currentStock", currentStock); // 褰撳墠搴撳瓨閲忥紝瀹為檯搴斾粠鏁版嵁璁$畻
+ summary.put("turnoverRate", turnoverRate); // 鍛ㄨ浆鐜囷紝瀹為檯搴斾粠鏁版嵁璁$畻
+ reportData.put("summary", summary);
+
+ // 2. 鏋勫缓鍥捐〃鏁版嵁
+// Map<String, Object> chartData = new HashMap<>();
+// List<String> dates = Arrays.asList("2025-09-15", "2025-09-16", "2025-09-17", "2025-09-18", "2025-09-19");
+// List<Integer> values = Arrays.asList(300, 350, 400, 380, 420);
+
+ chartData.put("dates", dates);
+ chartData.put("values", values);
+ chartData.put("comparisonDates", comparisonDates); // 瀹為檯搴斾粠鏁版嵁璁$畻
+ chartData.put("inValues", inValues); // 瀹為檯搴斾粠鏁版嵁璁$畻
+ chartData.put("outValues", outValues); // 瀹為檯搴斾粠鏁版嵁璁$畻
+ reportData.put("chartData", chartData);
+
+ // 3. 璁剧疆琛ㄦ牸鏁版嵁
+ reportData.put("tableData", procurementPageDtoCopyList);
+
+ return reportData;
+ }
+
+ @Override
+ public int add(ProcurementAddDto procurementDto) {
+ LoginUser loginUser = SecurityUtils.getLoginUser();
+ // 鎵归噺鏂板
+ for (Details detail : procurementDto.getDetails()) {
+ // 鏌ヨ閲囪喘鍏ュ簱鏁伴噺
+ LambdaQueryWrapper<ProcurementRecordStorage> procurementRecordLambdaQueryWrapper = new LambdaQueryWrapper<>();
+ procurementRecordLambdaQueryWrapper.eq(ProcurementRecordStorage::getSalesLedgerProductId, detail.getId());
+ Long aLong = procurementRecordMapper.selectCount(procurementRecordLambdaQueryWrapper);
+
+ ProcurementRecordStorage.ProcurementRecordStorageBuilder procurementRecordBuilder = ProcurementRecordStorage.builder()
+ .salesLedgerProductId(detail.getId())
+ .productModelId(detail.getProductModelId())
+ .inboundBatches(aLong.equals(0L) ? "绗�1鎵规" : "绗�"+ (aLong + 1) + "鎵规")
+ .inboundNum(detail.getInboundQuantity())
+ .warnNum(detail.getWarnNum())
+ .outStockQuantity(detail.getOutStockQuantity())
+ .shortageDescription(detail.getShortageDescription())
+ .createTime(LocalDateTime.now())
+ .createUser(loginUser.getUserId())
+ .updateTime(LocalDateTime.now())
+ .updateUser(loginUser.getUserId())
+ .createBy(procurementDto.getNickName());
+ this.save(procurementRecordBuilder.build());
+ // 鍏ュ簱鎴愬姛鍑忔帀閲囪喘鏁伴噺
+// LambdaQueryWrapper<SalesLedgerProduct> salesLedgerProductLambdaQueryWrapper = new LambdaQueryWrapper<>();
+// salesLedgerProductLambdaQueryWrapper.eq(SalesLedgerProduct::getId, detail.getId());
+// SalesLedgerProduct salesLedgerProduct = salesLedgerProductMapper.selectOne(salesLedgerProductLambdaQueryWrapper);
+// if(salesLedgerProduct == null){
+// throw new RuntimeException("鏈壘鍒拌鍟嗗搧");
+// }
+// salesLedgerProduct.setQuantity(salesLedgerProduct.getQuantity().subtract(detail.getInboundQuantity()));
+// salesLedgerProductMapper.updateById(salesLedgerProduct);
+ }
+ return 1;
+ }
+
+ @Override
+ public int addProduct(Details detail) {
+ LoginUser loginUser = SecurityUtils.getLoginUser();
+
+ ProcurementRecordStorage.ProcurementRecordStorageBuilder builder = ProcurementRecordStorage.builder()
+ .id(detail.getId())
+ .inboundBatches("绗�1鎵规")
+ .inboundNum(detail.getInboundQuantity())
+ .warnNum(detail.getWarnNum())
+ .outStockQuantity(detail.getOutStockQuantity())
+ .shortageDescription(detail.getShortageDescription())
+ .productModelId(detail.getProductModelId())
+ .updateTime(LocalDateTime.now())
+ .updateUser(loginUser.getUserId());
+ if (detail.getId() == null) {
+ builder.createTime(LocalDateTime.now())
+ .createUser(loginUser.getUserId())
+ .createBy(loginUser.getNickName());
+ }
+
+ boolean success = this.saveOrUpdate(builder.build());
+ return success ? 1 : 0;
+ }
+
+// @Override
+// public IPage<ProcurementPageDto> listPage(Page page, ProcurementPageDto procurementDto) {
+// IPage<ProcurementPageDto> procurementPageDtoIPage = procurementRecordMapper.listPage(page, procurementDto);
+// List<ProcurementPageDto> procurementPageDtos = procurementPageDtoIPage.getRecords();
+// // 璁$畻寰呭叆搴撴暟閲�
+// // 鏌ヨ閲囪喘璁板綍宸插叆搴撴暟閲�
+// List<Integer> collect = procurementPageDtos.stream().map(ProcurementPageDto::getId).collect(Collectors.toList());
+// if(CollectionUtils.isEmpty( collect)){
+// return procurementPageDtoIPage;
+// }
+// LambdaQueryWrapper<ProcurementRecordOut> procurementRecordLambdaQueryWrapper = new LambdaQueryWrapper<>();
+// procurementRecordLambdaQueryWrapper.in(ProcurementRecordOut::getProcurementRecordStorageId, collect);
+// List<ProcurementRecordOut> procurementRecords = procurementRecordOutMapper.selectList(procurementRecordLambdaQueryWrapper);
+// if(CollectionUtils.isEmpty( procurementRecords)){
+// return procurementPageDtoIPage;
+// }
+// for (ProcurementPageDto dto : procurementPageDtos) {
+// // 鏍规嵁閲囪喘鍙拌处ID绛涢�夊搴旂殑鍑哄簱璁板綍
+// List<ProcurementRecordOut> collect1 = procurementRecords.stream()
+// .filter(ProcurementRecordOut -> ProcurementRecordOut.getProcurementRecordStorageId().equals(dto.getId()))
+// .collect(Collectors.toList());
+//
+// // 濡傛灉娌℃湁鐩稿叧鐨勫嚭搴撹褰曪紝璺宠繃璇ユ潯鏁版嵁
+// if(CollectionUtils.isEmpty(collect1)){
+// dto.setInboundNum0(dto.getInboundNum());
+// continue;
+// }
+//
+// // 璁$畻宸插嚭搴撴暟閲忔�诲拰锛屽苟璁剧疆寰呭嚭搴撴暟閲�
+// BigDecimal totalInboundNum = collect1.stream()
+// .map(ProcurementRecordOut::getInboundNum)
+// .reduce(BigDecimal.ZERO, BigDecimal::add);
+//
+// // 寰呭嚭搴撴暟閲� = 鎬绘暟閲� - 宸插嚭搴撴暟閲�
+// dto.setInboundNum0(dto.getInboundNum().subtract(totalInboundNum));
+// }
+// return procurementPageDtoIPage;
+// }
+
+ private final ISupplierService supplierService;
+ @Override
+ public IPage<ProcurementPageDto> listPage(Page page, ProcurementPageDto procurementDto) {
+ IPage<ProcurementPageDto> procurementPageDtoIPage = procurementRecordMapper.listPage(page, procurementDto);
+ List<ProcurementPageDto> procurementPageDtos = procurementPageDtoIPage.getRecords();
+
+ if (CollectionUtils.isEmpty(procurementPageDtos)) {
+ return procurementPageDtoIPage;
+ }
+
+ List<SupplierManage> allSuppliers = supplierService.list();
+ java.util.Random random = new java.util.Random();
+ List<BigDecimal> taxRates = Arrays.asList(new BigDecimal("1"), new BigDecimal("6"), new BigDecimal("13"));
+
+ // 璁$畻寰呭叆搴撴暟閲�
+ // 鏌ヨ閲囪喘璁板綍宸插叆搴撴暟閲�
+ List<Integer> collect = procurementPageDtos.stream().map(ProcurementPageDto::getId).collect(Collectors.toList());
+ LambdaQueryWrapper<ProcurementRecordOut> procurementRecordLambdaQueryWrapper = new LambdaQueryWrapper<>();
+ procurementRecordLambdaQueryWrapper.in(ProcurementRecordOut::getProcurementRecordStorageId, collect);
+ List<ProcurementRecordOut> procurementRecords = procurementRecordOutMapper.selectList(procurementRecordLambdaQueryWrapper);
+
+ for (ProcurementPageDto dto : procurementPageDtos) {
+ if (dto.getSupplierName() == null || dto.getSupplierName().isEmpty()) {
+ if (!allSuppliers.isEmpty()) {
+ dto.setSupplierName(allSuppliers.get(random.nextInt(allSuppliers.size())).getSupplierName());
+ }
+ }
+ if (dto.getTaxRate() == null) {
+ dto.setTaxRate(taxRates.get(random.nextInt(taxRates.size())));
+ }
+ if (dto.getTaxInclusiveUnitPrice() == null) {
+ // 鐢熸垚 50 - 500 涔嬮棿鐨勯殢鏈轰环鏍�
+ double randomPrice = 50 + random.nextDouble() * 450;
+ dto.setTaxInclusiveUnitPrice(new BigDecimal(randomPrice).setScale(2, java.math.RoundingMode.HALF_UP));
+ }
+ // 璁$畻鎬讳环
+ if (dto.getInboundNum() != null) {
+ dto.setTaxInclusiveTotalPrice(dto.getInboundNum().multiply(dto.getTaxInclusiveUnitPrice()).setScale(2, java.math.RoundingMode.HALF_UP));
+ BigDecimal taxFactor = BigDecimal.ONE.add(dto.getTaxRate().divide(new BigDecimal("100"), 4, java.math.RoundingMode.HALF_UP));
+ dto.setTaxExclusiveTotalPrice(dto.getTaxInclusiveTotalPrice().divide(taxFactor, 2, java.math.RoundingMode.HALF_UP));
+ }
+
+ if (CollectionUtils.isEmpty(procurementRecords)) {
+ dto.setInboundNum0(dto.getInboundNum() != null ? dto.getInboundNum() : BigDecimal.ZERO);
+ continue;
+ }
+
+ // 鏍规嵁閲囪喘鍙拌处ID绛涢�夊搴旂殑鍑哄簱璁板綍
+ List<ProcurementRecordOut> collect1 = procurementRecords.stream()
+ .filter(ProcurementRecordOut -> ProcurementRecordOut.getProcurementRecordStorageId().equals(dto.getId()))
+ .collect(Collectors.toList());
+
+ // 濡傛灉娌℃湁鐩稿叧鐨勫嚭搴撹褰�
+ if (CollectionUtils.isEmpty(collect1)) {
+ dto.setInboundNum0(dto.getInboundNum() != null ? dto.getInboundNum() : BigDecimal.ZERO);
+ continue;
+ }
+
+ // 璁$畻宸插嚭搴撴暟閲忔�诲拰锛屽苟璁剧疆寰呭嚭搴撴暟閲�
+ BigDecimal totalInboundNum = collect1.stream()
+ .map(ProcurementRecordOut::getInboundNum)
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
+
+ // 寰呭嚭搴撴暟閲� = 鎬绘暟閲� - 宸插嚭搴撴暟閲�
+ dto.setInboundNum0(dto.getInboundNum() != null ? dto.getInboundNum().subtract(totalInboundNum) : BigDecimal.ZERO.subtract(totalInboundNum));
}
return procurementPageDtoIPage;
}
@@ -335,7 +542,8 @@
BigDecimal totalInboundNum = collect1.stream()
.map(ProcurementRecordOut::getInboundNum)
.reduce(BigDecimal.ZERO, BigDecimal::add);
-
+ // 鍑哄簱鏁伴噺 = 鎬绘暟閲� - 寰呭嚭搴撴暟閲�
+ dto.setTotalInboundNum(totalInboundNum);
// 寰呭嚭搴撴暟閲� = 鎬绘暟閲� - 宸插嚭搴撴暟閲�
dto.setInboundNum0(dto.getInboundNum().subtract(totalInboundNum));
}
--
Gitblit v1.9.3