From 47806d9e390ee00e1d29ad1da8c1aa908882a758 Mon Sep 17 00:00:00 2001
From: yuan <123@>
Date: 星期二, 11 八月 2026 14:43:59 +0800
Subject: [PATCH] 用河南鹤壁代码覆盖山西长治
---
src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java | 177 +++++++++++++++++++++++++++++++----------------------------
1 files changed, 93 insertions(+), 84 deletions(-)
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 00e913f..b52b8bf 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
@@ -22,6 +22,7 @@
import com.ruoyi.common.enums.FileNameType;
import com.ruoyi.common.enums.SaleEnum;
import com.ruoyi.common.exception.base.BaseException;
+import com.ruoyi.common.utils.AmountUtils;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.EnumUtil;
import com.ruoyi.common.utils.SecurityUtils;
@@ -38,6 +39,8 @@
import com.ruoyi.project.system.domain.SysUser;
import com.ruoyi.project.system.mapper.SysDeptMapper;
import com.ruoyi.project.system.mapper.SysUserMapper;
+import com.ruoyi.purchase.dto.SimpleReturnOrderGroupDto;
+import com.ruoyi.purchase.mapper.PurchaseReturnOrderProductsMapper;
import com.ruoyi.quality.mapper.QualityInspectMapper;
import com.ruoyi.sales.dto.*;
import com.ruoyi.sales.mapper.CommonFileMapper;
@@ -61,7 +64,6 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import java.io.InputStream;
import java.lang.reflect.Field;
@@ -119,6 +121,9 @@
@Autowired
private ProductionProductMainService productionProductMainService;
@Autowired
+ private PurchaseReturnOrderProductsMapper purchaseReturnOrderProductsMapper;
+ ;
+ @Autowired
private SysUserMapper sysUserMapper;
@Override
@@ -143,11 +148,17 @@
productWrapper.eq(SalesLedgerProduct::getType, type.getCode());
List<SalesLedgerProduct> salesLedgerProducts = salesLedgerProductMapper.selectList(productWrapper);
if (type.equals(SaleEnum.PURCHASE)) {
+ // 鏌ヨ閫�璐т俊鎭�
+ List<Long> productIds = salesLedgerProducts.stream().map(SalesLedgerProduct::getProductModelId).collect(Collectors.toList());
+ List<SimpleReturnOrderGroupDto> groupListByProductIds = new ArrayList<>();
+ if (CollectionUtils.isNotEmpty(productIds)) {
+ groupListByProductIds = purchaseReturnOrderProductsMapper.getReturnOrderGroupListByProductIds(productIds);
+ }
+ Map<Long, BigDecimal> returnOrderGroupDtoMap = groupListByProductIds.stream().collect(Collectors.toMap(SimpleReturnOrderGroupDto::getProductModelId, SimpleReturnOrderGroupDto::getSumReturnQuantity));
salesLedgerProducts.forEach(item -> {
- BigDecimal returnQuantity = item.getReturnQuantity() == null ? BigDecimal.ZERO : item.getReturnQuantity();
- item.setReturnQuantity(returnQuantity);
- BigDecimal quantity = item.getQuantity() == null ? BigDecimal.ZERO : item.getQuantity();
- item.setAvailableQuality(quantity.subtract(returnQuantity));
+ BigDecimal returnQuality = returnOrderGroupDtoMap.getOrDefault(item.getProductModelId(), BigDecimal.ZERO);
+ item.setReturnQuality(returnQuality);
+ item.setAvailableQuality(item.getQuantity().subtract(returnQuality));
});
}
return salesLedgerProducts;
@@ -166,6 +177,7 @@
productWrapper.eq(SalesLedgerProduct::getSalesLedgerId, salesLedger.getId());
productWrapper.eq(SalesLedgerProduct::getType, 1);
List<SalesLedgerProduct> products = salesLedgerProductMapper.selectList(productWrapper);
+ AmountUtils.normalizeSalesLedgerProducts(products);
for (SalesLedgerProduct product : products) {
product.setRegister(SecurityUtils.getLoginUser().getUser().getNickName());
product.setRegisterDate(LocalDateTime.now());
@@ -175,7 +187,11 @@
.orderByDesc(ShippingInfo::getCreateTime)
.last("limit 1"));
if (shippingInfo != null) {
+ product.setShippingCarNumber(shippingInfo.getShippingCarNumber());
+ product.setShippingDate(shippingInfo.getShippingDate());
product.setShippingStatus(shippingInfo.getStatus());
+ product.setExpressCompany(shippingInfo.getExpressCompany());
+ product.setExpressNumber(shippingInfo.getExpressNumber());
}
}
@@ -188,6 +204,7 @@
// 4. 杞崲 DTO
SalesLedgerDto resultDto = new SalesLedgerDto();
BeanUtils.copyProperties(salesLedger, resultDto);
+ AmountUtils.normalizeContractAmount(resultDto);
if (!products.isEmpty()) {
resultDto.setHasChildren(true);
resultDto.setProductData(products);
@@ -287,7 +304,7 @@
dto.setReceiptAmount(totalIncome);
//寮�绁ㄩ噾棰�
List<AccountInvoiceApplication> accountInvoiceApplications = accountInvoiceApplicationMapper.selectList(new LambdaQueryWrapper<AccountInvoiceApplication>()
- .eq(AccountInvoiceApplication::getStatus,1)
+ .eq(AccountInvoiceApplication::getStatus, 1)
.between(AccountInvoiceApplication::getApplyDate, startTime, endTime));
BigDecimal totalInvoiceAmount = Optional.of(
accountInvoiceApplications.stream()
@@ -303,7 +320,11 @@
@Override
public IPage<SalesLedgerVo> selectSalesLedgerListPage(Page page, SalesLedgerDto salesLedgerDto) {
- return salesLedgerMapper.selectSalesLedgerListPage(page, salesLedgerDto);
+ IPage<SalesLedgerVo> result = salesLedgerMapper.selectSalesLedgerListPage(page, salesLedgerDto);
+ if (!CollectionUtils.isEmpty(result.getRecords())) {
+ result.getRecords().forEach(AmountUtils::normalizeContractAmount);
+ }
+ return result;
}
@Override
@@ -320,17 +341,9 @@
if (CollectionUtils.isEmpty(salesLedgerImportDtoList)) return AjaxResult.error("閿�鍞彴璐︽暟鎹负绌猴紒");
List<SalesLedgerImportDto> salesLedgerProductImportDtoList = stringListMap.get("閿�鍞骇鍝佹暟鎹�");
if (CollectionUtils.isEmpty(salesLedgerProductImportDtoList)) return AjaxResult.error("閿�鍞骇鍝佹暟鎹负绌猴紒");
- // 瀹㈡埛鏁版嵁 - 鍙傝�� listPage 鏌ヨ绉佹捣瀹㈡埛锛坱ype = 0锛�
- // type = 0锛堢娴峰鎴凤級鎴栬�� type = 1锛堝叕娴峰鎴凤級涓斿凡琚垎閰嶏紝骞朵笖鏄嚜宸遍鐢ㄣ�佽嚜宸卞垱寤烘垨鑰呭叡浜粰鑷繁鐨勫鎴�
- Long loginUserId = loginUser.getUser().getUserId();
- List<Customer> customers = customerMapper.selectList(new QueryWrapper<Customer>()
- .in("customer_name", salesLedgerImportDtoList.stream()
- .map(SalesLedgerImportDto::getCustomerName).collect(Collectors.toList()))
- .and(wrapper -> wrapper.eq("type", 0)
- .or(wrapper2 -> wrapper2.eq("type", 1).eq("is_assigned", 1)))
- .and(wrapper -> wrapper.eq("usage_user", loginUserId)
- .or(wrapper2 -> wrapper2.eq("create_user", loginUserId)
- .or(wrapper3 -> wrapper3.exists("select 1 from customer_user cu where cu.customer_id = customer.id and cu.user_id = " + loginUserId)))));
+ // 瀹㈡埛鏁版嵁
+ List<Customer> customers = customerMapper.selectList(new LambdaQueryWrapper<Customer>().in(Customer::getCustomerName,
+ salesLedgerImportDtoList.stream().map(SalesLedgerImportDto::getCustomerName).collect(Collectors.toList())));
// // 瑙勬牸鍨嬪彿鏁版嵁
// List<ProductModel> productModels = productModelMapper.selectList(new LambdaQueryWrapper<ProductModel>().in(ProductModel::getModel,
// salesLedgerProductImportDtoList.stream().map(SalesLedgerImportDto::getSpecificationModel).collect(Collectors.toList())));
@@ -348,26 +361,21 @@
if (salesLedger1 != null) {
continue;
}
-
- // 鍒ゆ柇涓氬姟鍛樻槸鍚﹀瓨鍦�
- SysUser salesman = sysUserMapper.selectOne(new LambdaQueryWrapper<SysUser>()
- .eq(SysUser::getNickName, salesLedgerImportDto.getSalesman()));
- if (salesman == null) {
- throw new RuntimeException("涓氬姟鍛�:" + salesLedgerImportDto.getSalesman() + "涓嶅瓨鍦紒");
- }
SalesLedger salesLedger = new SalesLedger();
BeanUtils.copyProperties(salesLedgerImportDto, salesLedger);
salesLedger.setExecutionDate(DateUtils.toLocalDate(salesLedgerImportDto.getExecutionDate()));
salesLedger.setDeliveryDate(DateUtils.toLocalDate(salesLedgerImportDto.getDeliveryDate()));
// 閫氳繃瀹㈡埛鍚嶇О鏌ヨ瀹㈡埛ID锛屽鎴峰悎鍚屽彿
- Optional<Customer> customerOptional = customers.stream()
+ salesLedger.setCustomerId(customers.stream()
.filter(customer -> customer.getCustomerName().equals(salesLedger.getCustomerName()))
- .findFirst();
- if (customerOptional.isEmpty()) {
- throw new RuntimeException("瀹㈡埛:" + salesLedger.getCustomerName() + "涓嶅瓨鍦紒鎴栬�呴潪绉佹捣鐢ㄦ埛");
- }
- salesLedger.setCustomerId(customerOptional.get().getId());
- salesLedger.setCustomerContractNo(customerOptional.get().getTaxpayerIdentificationNumber());
+ .findFirst()
+ .map(Customer::getId)
+ .orElse(null));
+ salesLedger.setCustomerContractNo(customers.stream()
+ .filter(customer -> customer.getCustomerName().equals(salesLedger.getCustomerName()))
+ .findFirst()
+ .map(Customer::getTaxpayerIdentificationNumber)
+ .orElse(null));
Long aLong = sysUsers.stream()
.filter(sysUser -> sysUser.getNickName().equals(salesLedger.getEntryPerson()))
.findFirst()
@@ -385,7 +393,6 @@
salesLedger.setContractAmount(salesLedgerProductImportDtos.stream()
.map(SalesLedgerProductImportDto::getTaxInclusiveTotalPrice)
.reduce(BigDecimal.ZERO, BigDecimal::add));
- salesLedger.setNetContractAmount(salesLedger.getContractAmount());
salesLedgerMapper.insert(salesLedger);
@@ -394,18 +401,21 @@
BeanUtils.copyProperties(salesLedgerProductImportDto, salesLedgerProduct);
salesLedgerProduct.setSalesLedgerId(salesLedger.getId());
salesLedgerProduct.setType(1);
+ AmountUtils.normalizeSalesLedgerProduct(salesLedgerProduct);
// 璁$畻涓嶅惈绋庢�讳环
- salesLedgerProduct.setTaxExclusiveTotalPrice(salesLedgerProduct.getTaxInclusiveTotalPrice().divide(new BigDecimal(1).add(salesLedgerProduct.getTaxRate().divide(new BigDecimal(100))), 2, RoundingMode.HALF_UP));
- // 鏍¢獙浜у搧瑙勬牸鏄惁瀛樺湪
- Optional<Map<String, Object>> productModelOptional = list.stream()
+ salesLedgerProduct.setTaxExclusiveTotalPrice(
+ AmountUtils.calcTaxExclusiveTotalPrice(
+ salesLedgerProduct.getTaxInclusiveTotalPrice(),
+ salesLedgerProduct.getTaxRate()
+ )
+ );
+ list.stream()
.filter(map -> Objects.equals(map.get("productName"), salesLedgerProduct.getProductCategory()) && Objects.equals(map.get("model"), salesLedgerProduct.getSpecificationModel()))
- .findFirst();
- if (productModelOptional.isEmpty()) {
- throw new RuntimeException("浜у搧澶х被:" + salesLedgerProduct.getProductCategory() + ",瑙勬牸鍨嬪彿:" + salesLedgerProduct.getSpecificationModel() + "涓嶅瓨鍦紒");
- }
- Map<String, Object> productModelMap = productModelOptional.get();
- salesLedgerProduct.setProductModelId(Long.parseLong(productModelMap.get("modelId").toString()));
- salesLedgerProduct.setProductId(Long.parseLong(productModelMap.get("id").toString()));
+ .findFirst()
+ .ifPresent(map -> {
+ salesLedgerProduct.setProductModelId(Long.parseLong(map.get("modelId").toString()));
+ salesLedgerProduct.setProductId(Long.parseLong(map.get("id").toString()));
+ });
// salesLedgerProduct.setProductId(productList.stream()
// .filter(product -> product.getProductName().equals(salesLedgerProduct.getProductCategory()))
// .findFirst()
@@ -452,21 +462,23 @@
productWrapper.eq(SalesLedgerProduct::getType, 1);
List<SalesLedgerProduct> products = salesLedgerProductMapper.selectList(productWrapper);
for (SalesLedgerProduct product : products) {
- product.setRegister(SecurityUtils.getLoginUser().getUser().getNickName());
+ product.setRegister(SecurityUtils.getLoginUser().getUser().getNickName());
product.setRegisterDate(LocalDateTime.now());
// 鍙戣揣淇℃伅
ShippingInfo shippingInfo = shippingInfoMapper.selectOne(new LambdaQueryWrapper<ShippingInfo>()
.eq(ShippingInfo::getSalesLedgerProductId, product.getId())
.orderByDesc(ShippingInfo::getCreateTime)
.last("limit 1"));
- product.setShippingCarNumber(shippingInfo.getShippingCarNumber());
- product.setShippingDate(shippingInfo.getShippingDate());
if (shippingInfo != null) {
+ product.setShippingCarNumber(shippingInfo.getShippingCarNumber());
+ product.setShippingDate(shippingInfo.getShippingDate());
product.setShippingStatus(shippingInfo.getStatus());
+ product.setExpressCompany(shippingInfo.getExpressCompany());
+ product.setExpressNumber(shippingInfo.getExpressNumber());
}
}
// 杩囨护鍙繚鐣欏彂璐ц褰�
- products = products.stream().filter(product -> "宸插彂璐�".equals(product.getShippingStatus())).collect(Collectors.toList());
+ products = products.stream().filter(product -> "瀹℃牳閫氳繃".equals(product.getShippingStatus())).collect(Collectors.toList());
if (!products.isEmpty()) {
salesLedger.setHasChildren(true);
salesLedger.setProductData(products);
@@ -511,6 +523,7 @@
// 鍒犻櫎閿�鍞鐞嗘暟鎹�
LambdaQueryWrapper<SalesLedgerProduct> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.in(SalesLedgerProduct::getSalesLedgerId, idList)
+ .eq(SalesLedgerProduct::getType, 1)
.select(SalesLedgerProduct::getId);
List<SalesLedgerProduct> products = salesLedgerProductMapper.selectList(queryWrapper);
@@ -559,17 +572,14 @@
// 2. DTO杞珽ntity
SalesLedger salesLedger = convertToEntity(salesLedgerDto);
+ AmountUtils.normalizeContractAmount(salesLedger);
salesLedger.setCustomerName(customer.getCustomerName());
salesLedger.setTenantId(customer.getTenantId());
- // 褰曞叆浜猴細濡傛灉鏈紶鍒欎娇鐢ㄥ綋鍓嶇櫥褰曠敤鎴�
- if (StringUtils.isEmpty(salesLedger.getEntryPerson())) {
- salesLedger.setEntryPerson(String.valueOf(SecurityUtils.getUserId()));
- }
// 3. 鏂板鎴栨洿鏂颁富琛�
if (salesLedger.getId() == null) {
String contractNo = salesLedger.getSalesContractNo();
if (StringUtils.isEmpty(contractNo)) {
- contractNo = generateSalesContractNo(salesLedgerDto.getEntryDate());
+ contractNo = generateSalesContractNo();
}
salesLedger.setSalesContractNo(contractNo);
salesLedgerMapper.insert(salesLedger);
@@ -581,6 +591,7 @@
// 4. 澶勭悊瀛愯〃鏁版嵁
List<SalesLedgerProduct> productList = salesLedgerDto.getProductData();
if (productList != null && !productList.isEmpty()) {
+ AmountUtils.normalizeSalesLedgerProducts(productList);
handleSalesLedgerProducts(salesLedger.getId(), productList, EnumUtil.fromCode(SaleEnum.class, salesLedgerDto.getType()));
updateMainContractAmount(
salesLedger.getId(),
@@ -591,18 +602,7 @@
);
}
- // 5. 鍏滃簳锛氱‘淇濆疄闄呭悎鍚岄噾棰濇湁鍒濆鍊肩瓑浜庡悎鍚岄噾棰�
- if (salesLedger.getNetContractAmount() == null) {
- SalesLedger dbLedger = salesLedgerMapper.selectById(salesLedger.getId());
- if (dbLedger != null && dbLedger.getNetContractAmount() == null && dbLedger.getContractAmount() != null) {
- SalesLedger updateEntity = new SalesLedger();
- updateEntity.setId(salesLedger.getId());
- updateEntity.setNetContractAmount(dbLedger.getContractAmount());
- salesLedgerMapper.updateById(updateEntity);
- }
- }
-
- // 6. 淇濆瓨閿�鍞彴璐﹂檮浠�
+ // 5. 淇濆瓨閿�鍞彴璐﹂檮浠�
fileUtil.saveStorageAttachment(ApplicationTypeEnum.FILE, RecordTypeEnum.SALES_LEDGER, salesLedger.getId(), salesLedgerDto.getStorageBlobDTOs());
return 1;
@@ -621,6 +621,7 @@
// 鎵ц鏇存柊鎿嶄綔
if (!updateList.isEmpty()) {
for (SalesLedgerProduct product : updateList) {
+ AmountUtils.normalizeSalesLedgerProduct(product);
product.setType(type.getCode());
salesLedgerProductMapper.updateById(product);
}
@@ -628,6 +629,7 @@
// 鎵ц鎻掑叆鎿嶄綔
if (!insertList.isEmpty()) {
for (SalesLedgerProduct salesLedgerProduct : insertList) {
+ AmountUtils.normalizeSalesLedgerProduct(salesLedgerProduct);
salesLedgerProduct.setType(type.getCode());
salesLedgerProductMapper.insert(salesLedgerProduct);
// 娣诲姞鐢熶骇鏁版嵁
@@ -643,8 +645,8 @@
}
@Transactional(readOnly = true)
- public String generateSalesContractNo(Date entryDate) {
- LocalDate currentDate = entryDate != null ? DateUtils.toLocalDate(entryDate) : LocalDate.now();
+ public String generateSalesContractNo() {
+ LocalDate currentDate = LocalDate.now();
String datePart = currentDate.format(DateTimeFormatter.BASIC_ISO_DATE);
String lockKey = LOCK_PREFIX + datePart;
String lockValue = Thread.currentThread().getId() + "-" + System.nanoTime(); // 鍞竴鏍囪瘑閿佹寔鏈夎��
@@ -672,14 +674,15 @@
}
// 2. 鏌ヨ褰撳ぉ/鍏徃宸插瓨鍦ㄧ殑搴忓垪鍙凤紙涓庡師閫昏緫涓�鑷达級
- Long tenantId = SecurityUtils.getLoginUser().getTenantId();
- if (null != tenantId) {
- //鑾峰彇鍏徃缂栧彿
- SysDept sysDept = sysDeptMapper.selectDeptById(tenantId.longValue());
- if (!ObjectUtils.isEmpty(sysDept)) {
- datePart = (StringUtils.isEmpty(sysDept.getDeptNick()) ? "" : sysDept.getDeptNick()) + datePart;
- }
- }
+// Long tenantId = SecurityUtils.getLoginUser().getTenantId();
+// if (null != tenantId) {
+ //鑾峰彇鍏徃缂栧彿
+// SysDept sysDept = sysDeptMapper.selectDeptById(tenantId.longValue());
+// if (!ObjectUtils.isEmpty(sysDept)) {
+// datePart = (StringUtils.isEmpty(sysDept.getDeptNick()) ? "" : sysDept.getDeptNick()) + datePart;
+// }
+// }
+ datePart = "D" + datePart;
List<Integer> existingSequences = salesLedgerMapper.selectSequencesByDate(datePart);
int nextSequence = findFirstMissingSequence(existingSequences);
@@ -738,16 +741,7 @@
Field amountField = mainEntityClass.getDeclaredField("contractAmount");
amountField.setAccessible(true);
- amountField.set(entity, totalAmount);
-
- // 瀹為檯鍚堝悓閲戦鍒濆鍊肩瓑浜庡悎鍚岄噾棰�
- try {
- Field netAmountField = mainEntityClass.getDeclaredField("netContractAmount");
- netAmountField.setAccessible(true);
- netAmountField.set(entity, totalAmount);
- } catch (NoSuchFieldException ignored) {
- // 瀛愮被鍙兘娌℃湁璇ュ瓧娈碉紝蹇界暐
- }
+ amountField.set(entity, AmountUtils.scaleAmount(totalAmount));
mainMapper.updateById(entity);
} catch (Exception e) {
@@ -784,4 +778,19 @@
return totalAmount;
}
}
+
+ @Override
+ public Map<String, Object> getPrintData(Long id) {
+ SalesLedgerDto dto = new SalesLedgerDto();
+ dto.setId(id);
+ SalesLedgerDto ledger = getSalesLedgerWithProducts(dto);
+ if (ledger == null) {
+ return null;
+ }
+ SysDept dept = sysDeptMapper.selectDeptById(100L);
+ Map<String, Object> result = new HashMap<>();
+ result.put("companyName", dept != null ? dept.getDeptName() : "");
+ result.put("ledger", ledger);
+ return result;
+ }
}
--
Gitblit v1.9.3