doc/³¤ÖÎ-@×¹¤Ã³.sql
@@ -12,4 +12,29 @@ MODIFY COLUMN `supplier_type` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT 'ä¾åºåç±»åï¼å¯¹å ¬/对ç§ï¼' AFTER `company_address`; ALTER TABLE `product-inventory-management-xzgm`.`sales_ledger` ADD COLUMN `sales_type` varchar(255) NULL COMMENT 'å°è´¦ç±»åï¼å¯¹å ¬/对ç§ï¼' AFTER `delivery_date`; ADD COLUMN `sales_type` varchar(255) NULL COMMENT 'å°è´¦ç±»åï¼å¯¹å ¬/对ç§ï¼' AFTER `delivery_date`; ALTER TABLE `sales_ledger_product` ADD COLUMN `unit_price` decimal(18, 2) DEFAULT NULL COMMENT '对ç§-åä»·', ADD COLUMN `freight` decimal(18, 2) DEFAULT 0.00 COMMENT '对ç§-è¿è´¹', ADD COLUMN `price_with_freight` decimal(18, 2) DEFAULT NULL COMMENT '对ç§-å«è¿è´¹åä»·(åä»·+è¿è´¹)', ADD COLUMN `total_price` decimal(18, 2) DEFAULT NULL COMMENT '对ç§-æ»ä»·(å«è¿è´¹åä»·*æ°é)'; ALTER TABLE `product-inventory-management-xzgm`.`customer` MODIFY COLUMN `customer_type` int NOT NULL COMMENT '客æ·åç±»ï¼1-å¯¹å ¬ï¼2-对ç§' AFTER `bank_code`; ALTER TABLE `product-inventory-management-xzgm`.`sales_ledger` MODIFY COLUMN `sales_type` int NULL DEFAULT NULL COMMENT 'å°è´¦ç±»åï¼1-å¯¹å ¬,2-对ç§ï¼' AFTER `delivery_date`; ALTER TABLE `product-inventory-management-xzgm`.`supplier_manage` MODIFY COLUMN `supplier_type` int NULL DEFAULT NULL COMMENT 'ä¾åºåç±»åï¼1-å¯¹å ¬/2-对ç§ï¼' AFTER `company_address`; ALTER TABLE `product-inventory-management-xzgm`.`purchase_ledger_template` MODIFY COLUMN `template_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL COMMENT '模æ¿åç§°' AFTER `execution_date`, ADD COLUMN `template_type` int NULL COMMENT '模æ¿ç±»å(1-å¯¹å ¬/2-对ç§)' AFTER `template_name`; ALTER TABLE `sales_ledger_product_template` ADD COLUMN `unit_price` decimal(18, 2) DEFAULT NULL COMMENT 'åä»·ï¼å¯¹ç§ä¸ç¨ï¼', ADD COLUMN `total_price` decimal(18, 2) DEFAULT NULL COMMENT 'æ»ä»·ï¼å¯¹ç§ä¸ç¨ï¼', ADD COLUMN `freight` decimal(18, 2) DEFAULT 0.00 COMMENT 'è¿è´¹', ADD COLUMN `price_with_freight` decimal(18, 2) DEFAULT NULL COMMENT 'å«è¿è´¹åä»·'; src/main/java/com/ruoyi/basic/dto/SupplierManageDto.java
@@ -1,5 +1,6 @@ package com.ruoyi.basic.dto; import com.baomidou.mybatisplus.annotation.TableField; import com.ruoyi.basic.pojo.SupplierManage; import io.swagger.annotations.ApiModelProperty; import lombok.Data; src/main/java/com/ruoyi/basic/excel/SupplierManageExcelDto.java
@@ -15,6 +15,9 @@ @Excel(name = "ä¾åºååç§°") private String supplierName; @Excel(name = "ä¾åºåç±»å(1-å¯¹å ¬/2-对ç§)") private Integer supplierType; @Excel(name = "纳ç¨äººè¯å«å·") private String taxpayerIdentificationNum; src/main/java/com/ruoyi/basic/pojo/Customer.java
@@ -50,8 +50,8 @@ @TableField(exist = false) private Date followUpTime; @Excel(name = "客æ·åç±»") private String customerType; @Excel(name = "客æ·åç±»ï¼1-å¯¹å ¬ï¼2-对ç§") private Integer customerType; /** * 纳ç¨äººè¯å«å· src/main/java/com/ruoyi/basic/pojo/SupplierManage.java
@@ -28,6 +28,10 @@ @Excel(name = "å ¬å¸å°å") private String companyAddress; @ApiModelProperty(value = "ä¾åºåç±»å") @Excel(name = "ä¾åºåç±»å(1-å¯¹å ¬/2-对ç§)") private Integer supplierType; @ApiModelProperty(value = "å ¬å¸çµè¯") @Excel(name = "å ¬å¸çµè¯") private String companyPhone; @@ -79,8 +83,4 @@ @ApiModelProperty(value = "ç§æ·ID") @TableField(fill = FieldFill.INSERT) private Long tenantId; @ApiModelProperty(value = "ä¾åºåç±»å") @TableField(value = "supplier_type") private String supplierType; } src/main/java/com/ruoyi/basic/service/impl/CustomerServiceImpl.java
@@ -134,12 +134,12 @@ // 2. æå»ºæ¥è¯¢æ¡ä»¶ï¼å¢å¼ºç©ºå¼å®å ¨ï¼ LambdaQueryWrapper<Customer> queryWrapper = new LambdaQueryWrapper<>(); String customerName = customer.getCustomerName(); String customerType = customer.getCustomerType(); Integer customerType = customer.getCustomerType(); if (StringUtils.isNotBlank(customerName)) { queryWrapper.like(Customer::getCustomerName, customerName); } if (StringUtils.isNotBlank(customerType)) { queryWrapper.like(Customer::getCustomerType, customerType); if (customerType != null) { queryWrapper.eq(Customer::getCustomerType, customerType); } // 3. æ§è¡å页æ¥è¯¢ï¼ä¿çåé¡µå æ°æ®ï¼ @@ -150,10 +150,17 @@ .filter(Objects::nonNull) // è¿æ»¤ç©ºå¯¹è±¡ï¼é¿å åç»æä½NPEï¼ .peek(c -> { // å®å ¨è·ååæ®µï¼é¿å null弿¼æ¥ String address = StringUtils.defaultString(c.getCompanyAddress(), ""); String phone = StringUtils.defaultString(c.getCompanyPhone(), ""); c.setAddressPhone(address + "(" + phone + ")"); String address = StringUtils.defaultString(c.getCompanyAddress(), "").trim(); String phone = StringUtils.defaultString(c.getCompanyPhone(), "").trim(); if (StringUtils.isNotEmpty(address) && StringUtils.isNotEmpty(phone)) { c.setAddressPhone(address + "(" + phone + ")"); } else if (StringUtils.isNotEmpty(address)) { c.setAddressPhone(address); } else if (StringUtils.isNotEmpty(phone)) { c.setAddressPhone(phone); } else { c.setAddressPhone(""); } // æ¥è¯¢ææ°çè·è¿è®°å½ CustomerFollowUp followUp = customerFollowUpService.getOne( new LambdaQueryWrapper<CustomerFollowUp>() @@ -263,7 +270,7 @@ @Override public List<Map<String, Object>> customerList(Customer customer) { LambdaQueryWrapper<Customer> queryWrapper = Wrappers.lambdaQuery(); queryWrapper.select(Customer::getId, Customer::getCustomerName, Customer::getTaxpayerIdentificationNumber); queryWrapper.select(Customer::getId, Customer::getCustomerName, Customer::getTaxpayerIdentificationNumber, Customer::getCustomerType); // è·ååå§æ¥è¯¢ç»æ List<Map<String, Object>> result = customerMapper.selectMaps(queryWrapper); src/main/java/com/ruoyi/purchase/controller/PurchaseLedgerController.java
@@ -35,6 +35,7 @@ import java.io.OutputStream; import java.math.BigDecimal; import java.net.URLEncoder; import java.util.ArrayList; import java.util.List; import java.util.Optional; import java.util.stream.Collectors; @@ -128,8 +129,8 @@ @PostMapping("/export") public void export(HttpServletResponse response, PurchaseLedger purchaseLedger) { List<PurchaseLedger> list = purchaseLedgerService.selectPurchaseLedgerList(purchaseLedger); ExcelUtil<PurchaseLedger> util = new ExcelUtil<PurchaseLedger>(PurchaseLedger.class); util.exportExcel(response, list, "ã请填ååè½åç§°ãæ°æ®"); ExcelUtil<PurchaseLedger> util = new ExcelUtil<>(PurchaseLedger.class); util.exportExcel(response, list, "éè´å°è´¦æ°æ®"); } /** @@ -160,8 +161,11 @@ */ @ApiOperation("/æ¥è¯¢éè´æ¨¡æ¿") @GetMapping("/getPurchaseTemplateList") public AjaxResult getPurchaseTemplateList() { List<PurchaseLedgerTemplate> purchaseLedgers = purchaseLedgerTemplateMapper.selectList(null); public AjaxResult getPurchaseTemplateList(@RequestParam(required = false) Integer templateType) { if (templateType == null){ return AjaxResult.success(new ArrayList<>()); } List<PurchaseLedgerTemplate> purchaseLedgers = purchaseLedgerTemplateMapper.selectList(new LambdaQueryWrapper<PurchaseLedgerTemplate>().eq(PurchaseLedgerTemplate::getTemplateType,templateType)); purchaseLedgers.forEach(purchaseLedgerDto1 -> { LambdaQueryWrapper<SalesLedgerProductTemplate> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(SalesLedgerProductTemplate::getSalesLedgerId, purchaseLedgerDto1.getId()) src/main/java/com/ruoyi/purchase/dto/PurchaseLedgerDto.java
@@ -51,7 +51,7 @@ * ä¾åºååç§° */ @Excel(name = "ä¾åºåç±»å") private String supplierType; private Integer supplierType; /** * æ¯å¦ç½åå */ @@ -131,7 +131,7 @@ private Boolean hasChildren = false; private Integer Type; private Integer type; private List<SalesLedgerProduct> productData; @@ -190,11 +190,6 @@ @Excel(name = "æªæ¥ç¥¨éé¢(å )") private BigDecimal unReceiptPaymentAmount =BigDecimal.ZERO; @ApiModelProperty("æä»¶ç±»å å 4") @TableField(exist = false) private Integer type; @ApiModelProperty(value = "仿¬¾æ¹å¼") private String paymentMethod; @ApiModelProperty("审æ¹ç¶æ") @@ -203,4 +198,8 @@ private String templateName; @ApiModelProperty(value = "审æ¹äººid") private Integer approverId; @ApiModelProperty("模æ¿ç±»å(1-å¯¹å ¬/2-对ç§)") private Integer templateType; } src/main/java/com/ruoyi/purchase/dto/PurchaseLedgerImportDto.java
@@ -7,11 +7,14 @@ import java.util.Date; import lombok.EqualsAndHashCode; /** * @author :yys * @date : 2026/1/26 16:01 */ @Data @EqualsAndHashCode(callSuper = true) public class PurchaseLedgerImportDto extends PurchaseLedgerProductImportDto{ @Excel(name = "éè´åå·") @@ -48,6 +51,10 @@ @Excel(name = "å®¡æ ¸äºº(å¤ä¸ªç¨ï¼éå¼)") private String approveUserIds; @ApiModelProperty(value = "å°è´¦åç±»") @Excel(name = "å°è´¦åç±»") private String purchaseType; } src/main/java/com/ruoyi/purchase/dto/PurchaseLedgerProductImportDto.java
@@ -80,4 +80,10 @@ @Excel(name = "æ¯å¦è´¨æ£", readConverterExp = "0=å¦,1=æ¯") private Integer isChecked; @Excel(name = "åä»·") private BigDecimal unitPrice; @Excel(name = "æ»ä»·") private BigDecimal totalPrice; } src/main/java/com/ruoyi/purchase/pojo/PurchaseLedger.java
@@ -159,4 +159,9 @@ @ApiModelProperty(value = "审æ¹äººid") private String approveUserIds; @ApiModelProperty(value = "å°è´¦åç±»") @Excel(name = "å°è´¦åç±»(1-å¯¹å ¬/2-对ç§)") @TableField(exist = false) private Integer purchaseType; } src/main/java/com/ruoyi/purchase/pojo/PurchaseLedgerTemplate.java
@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import java.io.Serializable; import java.math.BigDecimal; import java.time.LocalDate; @@ -91,6 +92,9 @@ @ApiModelProperty("模æ¿åç§°") private String templateName; @ApiModelProperty("模æ¿ç±»å(1-å¯¹å ¬/2-对ç§)") private Integer templateType; @TableField(exist = false) private List<SalesLedgerProductTemplate> productList; } src/main/java/com/ruoyi/purchase/pojo/SalesLedgerProductTemplate.java
@@ -6,6 +6,8 @@ import java.io.Serializable; import java.math.BigDecimal; import java.time.LocalDateTime; import com.ruoyi.framework.aspectj.lang.annotation.Excel; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; @@ -81,4 +83,29 @@ @ApiModelProperty("æ¯å¦æ¨éè´¨æ£") private Boolean isChecked; /** * åä»·ï¼å¯¹ç§ä¸ç¨ï¼ */ @ApiModelProperty(value = "åä»·ï¼å¯¹ç§ä¸ç¨ï¼") private BigDecimal unitPrice; /** * æ»ä»·ï¼å¯¹ç§ä¸ç¨ï¼ */ @ApiModelProperty(value = "æ»ä»·ï¼å¯¹ç§ä¸ç¨ï¼") private BigDecimal totalPrice; /** * è¿è´¹ */ @ApiModelProperty(value = "è¿è´¹") private BigDecimal freight = BigDecimal.ZERO; /** * å«è¿è´¹åä»· */ @ApiModelProperty(value = "å«è¿è´¹åä»·") private BigDecimal priceWithFreight; } src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
@@ -17,13 +17,11 @@ import com.ruoyi.basic.mapper.ProductMapper; import com.ruoyi.basic.mapper.ProductModelMapper; import com.ruoyi.basic.mapper.SupplierManageMapper; import com.ruoyi.basic.pojo.Customer; import com.ruoyi.basic.pojo.Product; import com.ruoyi.basic.pojo.ProductModel; import com.ruoyi.basic.pojo.SupplierManage; import com.ruoyi.common.enums.FileNameType; import com.ruoyi.common.exception.base.BaseException; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.poi.ExcelUtil; @@ -51,7 +49,6 @@ import com.ruoyi.sales.pojo.SalesLedger; import com.ruoyi.sales.pojo.SalesLedgerProduct; import com.ruoyi.sales.service.impl.CommonFileServiceImpl; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.FilenameUtils; import org.springframework.beans.BeanUtils; @@ -62,8 +59,8 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.math.BigDecimal; import java.math.RoundingMode; import java.nio.file.Files; @@ -159,13 +156,43 @@ if (StringUtils.isNotBlank(purchaseLedger.getPurchaseContractNumber())) { queryWrapper.like(PurchaseLedger::getPurchaseContractNumber, purchaseLedger.getPurchaseContractNumber()); } if(purchaseLedger.getSupplierId()!=null){ if (purchaseLedger.getSupplierId() != null) { queryWrapper.eq(PurchaseLedger::getSupplierId, purchaseLedger.getSupplierId()); } if (purchaseLedger.getApprovalStatus() != null) { queryWrapper.eq(PurchaseLedger::getApprovalStatus, purchaseLedger.getApprovalStatus()); } return purchaseLedgerMapper.selectList(queryWrapper); if (StringUtils.isNotBlank(purchaseLedger.getSupplierName())) { queryWrapper.like(PurchaseLedger::getSupplierName, purchaseLedger.getSupplierName()); } if (StringUtils.isNotBlank(purchaseLedger.getSalesContractNo())) { queryWrapper.like(PurchaseLedger::getSalesContractNo, purchaseLedger.getSalesContractNo()); } if (StringUtils.isNotBlank(purchaseLedger.getProjectName())) { queryWrapper.like(PurchaseLedger::getProjectName, purchaseLedger.getProjectName()); } queryWrapper.orderByDesc(PurchaseLedger::getEntryDate); List<PurchaseLedger> list = purchaseLedgerMapper.selectList(queryWrapper); if (CollectionUtils.isNotEmpty(list)) { Set<Long> supplierIds = list.stream() .map(PurchaseLedger::getSupplierId) .filter(Objects::nonNull) .collect(Collectors.toSet()); if (!supplierIds.isEmpty()) { List<SupplierManage> suppliers = supplierManageMapper.selectBatchIds(supplierIds); Map<Long, Integer> typeMap = suppliers.stream() .collect(Collectors.toMap(SupplierManage::getId, SupplierManage::getSupplierType, (k1, k2) -> k1)); list.forEach(item -> { if (item.getSupplierId() != null) { item.setPurchaseType(typeMap.get(item.getSupplierId())); } }); } } return list; } @Override @@ -176,7 +203,10 @@ //å½å ¥äºº SysUser sysUser = userMapper.selectUserById(purchaseLedgerDto.getRecorderId()); SupplierManage supplierManage = supplierManageMapper.selectById(purchaseLedgerDto.getSupplierId()); SupplierManage supplierManage = null; if (purchaseLedgerDto.getSupplierId() != null) { supplierManage = supplierManageMapper.selectById(purchaseLedgerDto.getSupplierId()); } // DTO转Entity PurchaseLedger purchaseLedger = new PurchaseLedger(); @@ -187,7 +217,7 @@ } purchaseLedger.setSalesContractNo(ObjectUtils.isNotEmpty(salesLedger) ? salesLedger.getSalesContractNo() : ""); purchaseLedger.setSalesLedgerId(ObjectUtils.isNotEmpty(salesLedger) ? salesLedger.getId() : -1); purchaseLedger.setSupplierName(supplierManage.getSupplierName()); purchaseLedger.setSupplierName(supplierManage != null ? supplierManage.getSupplierName() : purchaseLedgerDto.getSupplierName()); purchaseLedger.setRecorderId(purchaseLedgerDto.getRecorderId()); purchaseLedger.setRecorderName(sysUser.getNickName()); purchaseLedger.setPhoneNumber(sysUser.getPhonenumber()); @@ -328,22 +358,29 @@ LocalDateTime localDateTime = entryDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime(); salesLedgerProduct.setRegisterDate(localDateTime); salesLedgerProduct.setFutureTickets(salesLedgerProduct.getQuantity()); salesLedgerProduct.setFutureTicketsAmount(salesLedgerProduct.getTaxInclusiveTotalPrice()); salesLedgerProduct.setPendingTicketsTotal(salesLedgerProduct.getTaxInclusiveTotalPrice()); if (Integer.valueOf(2).equals(purchaseLedger.getPurchaseType())) { salesLedgerProduct.setFutureTicketsAmount(salesLedgerProduct.getTotalPrice() != null ? salesLedgerProduct.getTotalPrice() : BigDecimal.ZERO); salesLedgerProduct.setPendingTicketsTotal(salesLedgerProduct.getTotalPrice() != null ? salesLedgerProduct.getTotalPrice() : BigDecimal.ZERO); } else { salesLedgerProduct.setFutureTicketsAmount(salesLedgerProduct.getTaxInclusiveTotalPrice()); salesLedgerProduct.setPendingTicketsTotal(salesLedgerProduct.getTaxInclusiveTotalPrice()); } salesLedgerProductMapper.insert(salesLedgerProduct); } } // è®¡ç®æ»å«ç¨éé¢ BigDecimal totalTaxInclusiveAmount = products.stream() .map(SalesLedgerProduct::getTaxInclusiveTotalPrice) // è®¡ç®æ»éé¢ BigDecimal totalAmount = products.stream() .map(p -> Integer.valueOf(2).equals(purchaseLedger.getPurchaseType()) ? (p.getTotalPrice() != null ? p.getTotalPrice() : BigDecimal.ZERO) : (p.getTaxInclusiveTotalPrice() != null ? p.getTaxInclusiveTotalPrice() : BigDecimal.ZERO)) .filter(Objects::nonNull) .reduce(BigDecimal.ZERO, BigDecimal::add); // æ´æ°ä¸»è¡¨çæ»éé¢å段 if (salesLedgerId != null) { // ç´æ¥æ´æ°æå®IDçè®°å½çcontractAmountåæ®µä¸ºtotalTaxInclusiveAmount purchaseLedgerMapper.updateContractAmountById(salesLedgerId, totalTaxInclusiveAmount); // ç´æ¥æ´æ°æå®IDçè®°å½çcontractAmountåæ®µä¸ºtotalAmount purchaseLedgerMapper.updateContractAmountById(salesLedgerId, totalAmount); } } @@ -660,14 +697,14 @@ public AjaxResult importData(MultipartFile file) { LoginUser loginUser = SecurityUtils.getLoginUser(); try { InputStream inputStream = file.getInputStream(); byte[] fileBytes = file.getBytes(); ExcelUtil<PurchaseLedgerImportDto> salesLedgerImportDtoExcelUtil = new ExcelUtil<>(PurchaseLedgerImportDto.class); Map<String, List<PurchaseLedgerImportDto>> stringListMap = salesLedgerImportDtoExcelUtil.importExcelMultiSheet(Arrays.asList("éè´å°è´¦æ°æ®", "éè´äº§åæ°æ®"), inputStream, 0); if (CollectionUtils.isEmpty(stringListMap)) return AjaxResult.error("éè´è¡¨æ ¼ä¸ºç©ºï¼"); // ä¸å¡å±åå¹¶ List<PurchaseLedgerImportDto> salesLedgerImportDtoList = stringListMap.get("éè´å°è´¦æ°æ®"); // éè´å°è´¦æ°æ®ä¸è·³è¿æ é¢ List<PurchaseLedgerImportDto> salesLedgerImportDtoList = salesLedgerImportDtoExcelUtil.importExcel("éè´å°è´¦æ°æ®", new ByteArrayInputStream(fileBytes), 0); // éè´äº§åæ°æ®è·³è¿1è¡æ é¢ List<PurchaseLedgerImportDto> salesLedgerProductImportDtoList = salesLedgerImportDtoExcelUtil.importExcel("éè´äº§åæ°æ®", new ByteArrayInputStream(fileBytes), 1); if (CollectionUtils.isEmpty(salesLedgerImportDtoList)) return AjaxResult.error("éè´å°è´¦æ°æ®ä¸ºç©ºï¼"); List<PurchaseLedgerImportDto> salesLedgerProductImportDtoList = stringListMap.get("éè´äº§åæ°æ®"); if (CollectionUtils.isEmpty(salesLedgerProductImportDtoList)) return AjaxResult.error("éè´äº§åæ°æ®ä¸ºç©ºï¼"); // ä¾åºåæ°æ® List<SupplierManage> customers = supplierManageMapper.selectList(new LambdaQueryWrapper<SupplierManage>().in(SupplierManage::getSupplierName, @@ -685,12 +722,19 @@ } PurchaseLedger salesLedger = new PurchaseLedger(); BeanUtils.copyProperties(salesLedgerImportDto, salesLedger); // éè¿ä¾åºååç§°æ¥è¯¢ID salesLedger.setSupplierId(customers.stream() // æ¥è¯¢ä¾åºåæ¡£æ¡å¹¶è®¾ç½®éè´ç±»åï¼å¯¹å ¬1/对ç§2ï¼ SupplierManage matchedSupplier = customers.stream() .filter(customer -> customer.getSupplierName().equals(salesLedger.getSupplierName())) .findFirst() .map(SupplierManage::getId) .orElse(null)); .orElse(null); if (matchedSupplier != null) { salesLedger.setSupplierId(matchedSupplier.getId()); salesLedger.setPurchaseType(matchedSupplier.getSupplierType()); } else { salesLedger.setPurchaseType(1); // é»è®¤å¯¹å ¬ } Long aLong = sysUsers.stream() .filter(sysUser -> sysUser.getNickName().equals(salesLedger.getRecorderName())) .findFirst() @@ -699,15 +743,30 @@ if (aLong == null) throw new RuntimeException("å½å ¥äºº:" + salesLedger.getRecorderName() + ",æ 对åºç¨æ·ï¼"); salesLedger.setRecorderId(aLong); // éè´äº§åæ°æ®ç»å®ï¼éè¿éè´åå·è·å对åºéè´äº§åæ°æ® // éè´äº§åæ°æ®ç»å® List<PurchaseLedgerProductImportDto> salesLedgerProductImportDtos = salesLedgerProductImportDtoList.stream() .filter(salesLedgerProductImportDto -> salesLedgerProductImportDto.getPurchaseContractNumber().equals(salesLedger.getPurchaseContractNumber())) .collect(Collectors.toList()); if (CollectionUtils.isEmpty(salesLedgerProductImportDtos)) throw new RuntimeException("éè´åå·:" + salesLedgerImportDto.getPurchaseContractNumber() + ",æ 对åºäº§åæ°æ®ï¼"); boolean isPrivate = Integer.valueOf(2).equals(salesLedger.getPurchaseType()); // ç»ä¸è®¡ç®ä¸»è¡¨ååéé¢ salesLedger.setContractAmount(salesLedgerProductImportDtos.stream() .map(PurchaseLedgerProductImportDto::getTaxInclusiveTotalPrice) .reduce(BigDecimal.ZERO,BigDecimal::add)); .map(dto -> { if (isPrivate) { if (dto.getTotalPrice() != null) return dto.getTotalPrice(); BigDecimal up = dto.getUnitPrice() != null ? dto.getUnitPrice() : BigDecimal.ZERO; BigDecimal qty = dto.getQuantity() != null ? dto.getQuantity() : BigDecimal.ZERO; return up.multiply(qty); } else { return dto.getTaxInclusiveTotalPrice() != null ? dto.getTaxInclusiveTotalPrice() : BigDecimal.ZERO; } }) .reduce(BigDecimal.ZERO, BigDecimal::add)); // éè¿éå®åå·ç»å®éå® SalesLedger salesLedger1 = salesLedgerMapper.selectOne(new LambdaQueryWrapper<SalesLedger>() .eq(SalesLedger::getSalesContractNo, salesLedger.getSalesContractNo()) @@ -719,8 +778,8 @@ // éè¿æµç§°è·åç¨æ·ID String[] split = salesLedger.getApproveUserIds().split("ï¼"); List<Long> ids = new ArrayList<>(); for (int i = 0; i < split.length; i++) { SysUser sysUser = sysUserMapper.selectOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getNickName, split[i]) for (String s : split) { SysUser sysUser = sysUserMapper.selectOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getNickName, s) .last("LIMIT 1")); if (sysUser != null) { ids.add(sysUser.getUserId()); @@ -736,10 +795,48 @@ BeanUtils.copyProperties(salesLedgerProductImportDto, salesLedgerProduct); salesLedgerProduct.setSalesLedgerId(salesLedger.getId()); salesLedgerProduct.setType(2); // 计ç®ä¸å«ç¨æ»ä»· salesLedgerProduct.setTaxExclusiveTotalPrice(salesLedgerProduct.getTaxInclusiveTotalPrice().divide(new BigDecimal(1).add(salesLedgerProduct.getTaxRate().divide(new BigDecimal(100))), 2, RoundingMode.HALF_UP)); // æªæ¥ç¥¨æ°é salesLedgerProduct.setFutureTickets(salesLedgerProduct.getQuantity()); salesLedgerProduct.setFutureTicketsAmount(salesLedgerProduct.getTaxExclusiveTotalPrice()); if (isPrivate) { // 对ç§éè´é»è¾ if (salesLedgerProduct.getTotalPrice() == null && salesLedgerProduct.getUnitPrice() != null && salesLedgerProduct.getQuantity() != null) { salesLedgerProduct.setTotalPrice(salesLedgerProduct.getUnitPrice().multiply(salesLedgerProduct.getQuantity())); } BigDecimal tp = salesLedgerProduct.getTotalPrice() != null ? salesLedgerProduct.getTotalPrice() : BigDecimal.ZERO; salesLedgerProduct.setTaxInclusiveTotalPrice(tp); salesLedgerProduct.setTaxExclusiveTotalPrice(salesLedgerProduct.getUnitPrice() != null ? salesLedgerProduct.getUnitPrice().multiply(salesLedgerProduct.getQuantity()) : tp); // ç»ä¸éé¢ salesLedgerProduct.setFutureTicketsAmount(tp); salesLedgerProduct.setPendingTicketsTotal(tp); salesLedgerProduct.setTaxRate(null); salesLedgerProduct.setTaxInclusiveUnitPrice(null); salesLedgerProduct.setInvoiceType(null); } else { // å¯¹å ¬éè´é»è¾ // è¡¥å ¨ä¸å«ç¨æ»ä»· if (salesLedgerProduct.getTaxInclusiveTotalPrice() != null && salesLedgerProduct.getTaxRate() != null) { salesLedgerProduct.setTaxExclusiveTotalPrice( salesLedgerProduct.getTaxInclusiveTotalPrice() .divide(new BigDecimal(1).add(salesLedgerProduct.getTaxRate().divide(new BigDecimal(100))), 2, RoundingMode.HALF_UP) ); } // å¯¹å ¬ç»ä¸ä½¿ç¨å«ç¨æ»ä»· BigDecimal titp = salesLedgerProduct.getTaxInclusiveTotalPrice() != null ? salesLedgerProduct.getTaxInclusiveTotalPrice() : BigDecimal.ZERO; salesLedgerProduct.setFutureTicketsAmount(titp); salesLedgerProduct.setPendingTicketsTotal(titp); salesLedgerProduct.setUnitPrice(null); salesLedgerProduct.setTotalPrice(null); } // å¹é 产åç§ç±»åè§æ ¼åå·æ å°ID list.stream() .filter(map -> map.get("productName").equals(salesLedgerProduct.getProductCategory()) && map.get("model").equals(salesLedgerProduct.getSpecificationModel())) .findFirst() @@ -747,13 +844,15 @@ salesLedgerProduct.setProductModelId(Long.parseLong(map.get("modelId").toString())); salesLedgerProduct.setProductId(Long.parseLong(map.get("id").toString())); }); // å¡«å ç»è®°ä¿¡æ¯ salesLedgerProduct.setRegister(loginUser.getNickName()); salesLedgerProduct.setRegisterDate(LocalDateTime.now()); salesLedgerProduct.setApproveStatus(0); salesLedgerProduct.setPendingTicketsTotal(salesLedgerProductImportDto.getTaxInclusiveTotalPrice()); // æ¯å¦è´¨æ£å¤æ salesLedgerProduct.setIsChecked(salesLedgerProductImportDto.getIsChecked() == 1); if(salesLedgerProductImportDto.getIsChecked() == 1){ salesLedgerProduct.setIsChecked(salesLedgerProductImportDto.getIsChecked() != null && salesLedgerProductImportDto.getIsChecked() == 1); if(salesLedgerProduct.getIsChecked()){ addQualityInspect(salesLedger, salesLedgerProduct); } salesLedgerProductMapper.insert(salesLedgerProduct); @@ -764,9 +863,9 @@ return AjaxResult.success("å¯¼å ¥æå"); } catch (Exception e) { e.printStackTrace(); log.error("å¯¼å ¥å¤±è´¥ï¼", e); throw new RuntimeException("å¯¼å ¥æ°æ®è¿ç¨ä¸åçäºé误ï¼" + e.getMessage()); } return AjaxResult.success("å¯¼å ¥å¤±è´¥"); } @Override src/main/java/com/ruoyi/sales/dto/SalesLedgerDto.java
@@ -61,4 +61,7 @@ @ApiModelProperty(value = "客æ·åç±»") private String customerType; @ApiModelProperty(value = "å°è´¦åç±»") private Integer salesType; } src/main/java/com/ruoyi/sales/dto/SalesLedgerImportDto.java
@@ -47,5 +47,7 @@ @Excel(name = "仿¬¾æ¹å¼") private String paymentMethod; @ApiModelProperty(value = "å°è´¦åç±»") @Excel(name = "å°è´¦åç±»") private Integer salesType; } src/main/java/com/ruoyi/sales/dto/SalesLedgerProductImportDto.java
@@ -73,6 +73,18 @@ @Excel(name = "æ¯å¦è´¨æ£", readConverterExp = "0=å¦,1=æ¯") private Boolean isChecked; @Excel(name = "åä»·") private BigDecimal unitPrice; @Excel(name = "æ»ä»·") private BigDecimal totalPrice; @Excel(name = "è¿è´¹") private BigDecimal freight = BigDecimal.ZERO; @Excel(name = "å«è¿è´¹åä»·") private BigDecimal priceWithFreight; } src/main/java/com/ruoyi/sales/pojo/SalesLedger.java
@@ -153,6 +153,7 @@ private String customerType; @ApiModelProperty(value = "å°è´¦åç±»") private String salesType; @Excel(name = "å°è´¦åç±»") private Integer salesType; } src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java
@@ -243,4 +243,32 @@ // å¯ç¨æ°é quantity - returnQuality @TableField(exist = false) private BigDecimal availableQuality; /** * åä»·ï¼å¯¹ç§ä¸ç¨ï¼ */ @ApiModelProperty(value = "åä»·ï¼å¯¹ç§ä¸ç¨ï¼") @Excel(name = "åä»·ï¼å¯¹ç§ï¼") private BigDecimal unitPrice; /** * æ»ä»·ï¼å¯¹ç§ä¸ç¨ï¼ */ @ApiModelProperty(value = "æ»ä»·ï¼å¯¹ç§ä¸ç¨ï¼") @Excel(name = "æ»ä»·ï¼å¯¹ç§ï¼") private BigDecimal totalPrice; /** * è¿è´¹ */ @ApiModelProperty(value = "è¿è´¹") @Excel(name = "è¿è´¹") private BigDecimal freight = BigDecimal.ZERO; /** * å«è¿è´¹åä»· */ @ApiModelProperty(value = "å«è¿è´¹åä»·") @Excel(name = "å«è¿è´¹åä»·") private BigDecimal priceWithFreight; } src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
@@ -171,10 +171,9 @@ } // å¯è½å±äºå¤ä¸ªä¸»è¡¨ Set<Long> mainIds = deletedProducts.stream() .map(SalesLedgerProduct::getSalesLedgerId) .filter(Objects::nonNull) .collect(Collectors.toSet()); Map<Long, Integer> mainIdTypeMap = deletedProducts.stream() .filter(p -> p.getSalesLedgerId() != null) .collect(Collectors.toMap(SalesLedgerProduct::getSalesLedgerId, SalesLedgerProduct::getType, (existing, replacement) -> existing)); // 2. æ§è¡å é¤æä½ int result = salesLedgerProductMapper.deleteBatchIds(Arrays.asList(ids)); @@ -182,19 +181,44 @@ deleteProductionData(Arrays.asList(ids)); // 3. 对æ¯ä¸ªä¸»è¡¨IDè¿è¡é颿´æ° for (Long salesLedgerId : mainIds) { for (Map.Entry<Long, Integer> entry : mainIdTypeMap.entrySet()) { Long salesLedgerId = entry.getKey(); Integer type = entry.getValue(); LambdaQueryWrapper<SalesLedgerProduct> wrapper = new LambdaQueryWrapper<>(); wrapper.eq(SalesLedgerProduct::getSalesLedgerId, salesLedgerId); wrapper.eq(SalesLedgerProduct::getType, type); List<SalesLedgerProduct> remainingProducts = salesLedgerProductMapper.selectList(wrapper); // è°ç¨éç¨æ¹æ³æ´æ°ä¸»è¡¨éé¢ updateMainContractAmount( salesLedgerId, remainingProducts, SalesLedgerProduct::getTaxInclusiveTotalPrice, salesLedgerMapper, SalesLedger.class ); if (type == 1) { SalesLedger salesLedger = salesLedgerMapper.selectById(salesLedgerId); if (salesLedger != null) { Function<SalesLedgerProduct, BigDecimal> amountGetter = Integer.valueOf(2).equals(salesLedger.getSalesType()) ? p -> p.getTotalPrice() != null ? p.getTotalPrice() : BigDecimal.ZERO : p -> p.getTaxInclusiveTotalPrice() != null ? p.getTaxInclusiveTotalPrice() : BigDecimal.ZERO; updateMainContractAmount( salesLedgerId, remainingProducts, amountGetter, salesLedgerMapper, SalesLedger.class ); } } else { PurchaseLedger purchaseLedger = purchaseLedgerMapper.selectById(salesLedgerId); if (purchaseLedger != null) { Function<SalesLedgerProduct, BigDecimal> amountGetter = Integer.valueOf(2).equals(purchaseLedger.getPurchaseType()) ? p -> p.getTotalPrice() != null ? p.getTotalPrice() : BigDecimal.ZERO : p -> p.getTaxInclusiveTotalPrice() != null ? p.getTaxInclusiveTotalPrice() : BigDecimal.ZERO; updateMainContractAmount( salesLedgerId, remainingProducts, amountGetter, purchaseLedgerMapper, PurchaseLedger.class ); } } } return result; } @@ -202,21 +226,86 @@ @Override @Transactional(rollbackFor = Exception.class) public int addOrUpdateSalesLedgerProduct(SalesLedgerProduct salesLedgerProduct) { if (salesLedgerProduct.getId() != null) { SalesLedgerProduct dbProduct = salesLedgerProductMapper.selectById(salesLedgerProduct.getId()); if (dbProduct != null) { if (salesLedgerProduct.getSalesLedgerId() == null) { salesLedgerProduct.setSalesLedgerId(dbProduct.getSalesLedgerId()); } if (salesLedgerProduct.getType() == null) { salesLedgerProduct.setType(dbProduct.getType()); } if (salesLedgerProduct.getInvoiceTotal() == null) { salesLedgerProduct.setInvoiceTotal(dbProduct.getInvoiceTotal()); } if (salesLedgerProduct.getTicketsTotal() == null) { salesLedgerProduct.setTicketsTotal(dbProduct.getTicketsTotal()); } if (salesLedgerProduct.getQuantity() == null) { salesLedgerProduct.setQuantity(dbProduct.getQuantity()); } if (salesLedgerProduct.getTotalPrice() == null) { salesLedgerProduct.setTotalPrice(dbProduct.getTotalPrice()); } if (salesLedgerProduct.getTaxInclusiveTotalPrice() == null) { salesLedgerProduct.setTaxInclusiveTotalPrice(dbProduct.getTaxInclusiveTotalPrice()); } if (salesLedgerProduct.getTaxExclusiveTotalPrice() == null) { salesLedgerProduct.setTaxExclusiveTotalPrice(dbProduct.getTaxExclusiveTotalPrice()); } if (salesLedgerProduct.getTaxRate() == null) { salesLedgerProduct.setTaxRate(dbProduct.getTaxRate()); } if (salesLedgerProduct.getUnitPrice() == null) { salesLedgerProduct.setUnitPrice(dbProduct.getUnitPrice()); } if (salesLedgerProduct.getFreight() == null) { salesLedgerProduct.setFreight(dbProduct.getFreight()); } if (salesLedgerProduct.getPriceWithFreight() == null) { salesLedgerProduct.setPriceWithFreight(dbProduct.getPriceWithFreight()); } } } Long salesLedgerId = salesLedgerProduct.getSalesLedgerId(); SalesLedger salesLedger = null; PurchaseLedger purchaseLedger = null; boolean isPrivate = false; if (salesLedgerProduct.getType() != null && salesLedgerProduct.getType().equals(1)) { salesLedger = salesLedgerMapper.selectById(salesLedgerId); if (salesLedger != null && Integer.valueOf(2).equals(salesLedger.getSalesType())) { isPrivate = true; } } else { purchaseLedger = purchaseLedgerMapper.selectById(salesLedgerId); if (purchaseLedger != null && Integer.valueOf(2).equals(purchaseLedger.getPurchaseType())) { isPrivate = true; } } BigDecimal totalPrice = isPrivate ? (salesLedgerProduct.getTotalPrice() != null ? salesLedgerProduct.getTotalPrice() : BigDecimal.ZERO) : (salesLedgerProduct.getTaxInclusiveTotalPrice() != null ? salesLedgerProduct.getTaxInclusiveTotalPrice() : BigDecimal.ZERO); BigDecimal invoiceTotal = salesLedgerProduct.getInvoiceTotal() != null ? salesLedgerProduct.getInvoiceTotal() : BigDecimal.ZERO; BigDecimal ticketsTotal = salesLedgerProduct.getTicketsTotal() != null ? salesLedgerProduct.getTicketsTotal() : BigDecimal.ZERO; // å¾ åæ¬¾ï¼ä»æ¬¾ if(salesLedgerProduct.getType().equals(1)){ salesLedgerProduct.setPendingInvoiceTotal(salesLedgerProduct.getTaxInclusiveTotalPrice().subtract(salesLedgerProduct.getInvoiceTotal())); salesLedgerProduct.setPendingInvoiceTotal(totalPrice.subtract(invoiceTotal)); //æªå¼ç¥¨æ°é+éé¢ salesLedgerProduct.setNoInvoiceNum(salesLedgerProduct.getQuantity()); salesLedgerProduct.setNoInvoiceAmount(salesLedgerProduct.getTaxInclusiveTotalPrice()); salesLedgerProduct.setNoInvoiceAmount(totalPrice); }else{ salesLedgerProduct.setPendingTicketsTotal(salesLedgerProduct.getTaxInclusiveTotalPrice().subtract(salesLedgerProduct.getTicketsTotal())); salesLedgerProduct.setPendingTicketsTotal(totalPrice.subtract(ticketsTotal)); // æªæ¥ç¥¨æ°é+éé¢ salesLedgerProduct.setFutureTickets(salesLedgerProduct.getQuantity()); salesLedgerProduct.setFutureTicketsAmount(salesLedgerProduct.getTaxInclusiveTotalPrice()); salesLedgerProduct.setFutureTicketsAmount(totalPrice); } int result; Long salesLedgerId = salesLedgerProduct.getSalesLedgerId(); if (salesLedgerProduct.getId() == null) { salesLedgerProduct.setRegisterDate(LocalDateTime.now()); result = salesLedgerProductMapper.insert(salesLedgerProduct); @@ -239,12 +328,17 @@ wrapper.eq(SalesLedgerProduct::getSalesLedgerId, salesLedgerId) .eq(SalesLedgerProduct::getType, salesLedgerProduct.getType()); List<SalesLedgerProduct> productList = salesLedgerProductMapper.selectList(wrapper); Function<SalesLedgerProduct, BigDecimal> amountGetter = isPrivate ? p -> p.getTotalPrice() != null ? p.getTotalPrice() : BigDecimal.ZERO : p -> p.getTaxInclusiveTotalPrice() != null ? p.getTaxInclusiveTotalPrice() : BigDecimal.ZERO; if (salesLedgerProduct.getType() == 1) { // è°ç¨éç¨æ¹æ³æ´æ°ä¸»è¡¨éé¢ updateMainContractAmount( salesLedgerId, productList, SalesLedgerProduct::getTaxInclusiveTotalPrice, amountGetter, salesLedgerMapper, SalesLedger.class ); @@ -253,7 +347,7 @@ updateMainContractAmount( salesLedgerId, productList, SalesLedgerProduct::getTaxInclusiveTotalPrice, amountGetter, purchaseLedgerMapper, PurchaseLedger.class ); @@ -337,6 +431,9 @@ * å é¤çäº§æ°æ® */ public void deleteProductionData(List<Long> productIds) { if (productIds == null || productIds.isEmpty()){ return; } //æ¹éæ¥è¯¢productOrder List<ProductOrder> productOrders = productOrderMapper.selectList( new LambdaQueryWrapper<ProductOrder>() src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
@@ -15,6 +15,7 @@ import com.ruoyi.basic.pojo.Customer; import com.ruoyi.common.enums.FileNameType; import com.ruoyi.common.enums.SaleEnum; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.exception.base.BaseException; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.EnumUtil; @@ -51,8 +52,8 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.lang.reflect.Field; import java.math.BigDecimal; import java.math.RoundingMode; @@ -343,14 +344,14 @@ public AjaxResult importData(MultipartFile file) { LoginUser loginUser = SecurityUtils.getLoginUser(); try { InputStream inputStream = file.getInputStream(); byte[] fileBytes = file.getBytes(); ExcelUtil<SalesLedgerImportDto> salesLedgerImportDtoExcelUtil = new ExcelUtil<>(SalesLedgerImportDto.class); Map<String, List<SalesLedgerImportDto>> stringListMap = salesLedgerImportDtoExcelUtil.importExcelMultiSheet(Arrays.asList("éå®å°è´¦æ°æ®", "éå®äº§åæ°æ®"), inputStream, 0); if (CollectionUtils.isEmpty(stringListMap)) return AjaxResult.error("éå®è¡¨æ ¼ä¸ºç©ºï¼"); // ä¸å¡å±åå¹¶ List<SalesLedgerImportDto> salesLedgerImportDtoList = stringListMap.get("éå®å°è´¦æ°æ®"); // éå®å°è´¦æ°æ®ä¸è·³è¿æ é¢ List<SalesLedgerImportDto> salesLedgerImportDtoList = salesLedgerImportDtoExcelUtil.importExcel("éå®å°è´¦æ°æ®", new ByteArrayInputStream(fileBytes), 0); // éå®äº§åæ°æ®è·³è¿1è¡æ é¢ List<SalesLedgerImportDto> salesLedgerProductImportDtoList = salesLedgerImportDtoExcelUtil.importExcel("éå®äº§åæ°æ®", new ByteArrayInputStream(fileBytes), 1); if (CollectionUtils.isEmpty(salesLedgerImportDtoList)) return AjaxResult.error("éå®å°è´¦æ°æ®ä¸ºç©ºï¼"); List<SalesLedgerImportDto> salesLedgerProductImportDtoList = stringListMap.get("éå®äº§åæ°æ®"); if (CollectionUtils.isEmpty(salesLedgerProductImportDtoList)) return AjaxResult.error("éå®äº§åæ°æ®ä¸ºç©ºï¼"); // å®¢æ·æ°æ® List<Customer> customers = customerMapper.selectList(new LambdaQueryWrapper<Customer>().in(Customer::getCustomerName, @@ -376,16 +377,20 @@ BeanUtils.copyProperties(salesLedgerImportDto, salesLedger); salesLedger.setExecutionDate(DateUtils.toLocalDate(salesLedgerImportDto.getExecutionDate())); // éè¿å®¢æ·åç§°æ¥è¯¢å®¢æ·IDï¼å®¢æ·ååå· salesLedger.setCustomerId(customers.stream() // æ¥è¯¢å®¢æ·æ¡£æ¡å¹¶è®¾ç½®éå®ç±»åï¼å¯¹å ¬1/对ç§2ï¼ Customer matchedCustomer = customers.stream() .filter(customer -> customer.getCustomerName().equals(salesLedger.getCustomerName())) .findFirst() .map(Customer::getId) .orElse(null)); salesLedger.setCustomerContractNo(customers.stream() .filter(customer -> customer.getCustomerName().equals(salesLedger.getCustomerName())) .findFirst() .map(Customer::getTaxpayerIdentificationNumber) .orElse(null)); .orElse(null); if (matchedCustomer != null) { salesLedger.setCustomerId(matchedCustomer.getId()); salesLedger.setSalesType(matchedCustomer.getCustomerType()); salesLedger.setCustomerContractNo(matchedCustomer.getTaxpayerIdentificationNumber()); } else { salesLedger.setSalesType(1); } Long aLong = sysUsers.stream() .filter(sysUser -> sysUser.getNickName().equals(salesLedger.getEntryPerson())) .findFirst() @@ -394,14 +399,30 @@ if (aLong == null) throw new RuntimeException("å½å ¥äºº:" + salesLedger.getEntryPerson() + ",æ 对åºç¨æ·ï¼"); salesLedger.setEntryPerson(aLong.toString()); // éå®äº§åæ°æ®ç»å®ï¼éè¿éå®åå·è·å对åºéå®äº§åæ°æ® // éå®äº§åæ°æ®ç»å® List<SalesLedgerProductImportDto> salesLedgerProductImportDtos = salesLedgerProductImportDtoList.stream() .filter(salesLedgerProductImportDto -> salesLedgerProductImportDto.getSalesContractNo().equals(salesLedger.getSalesContractNo())) .collect(Collectors.toList()); if (CollectionUtils.isEmpty(salesLedgerProductImportDtos)) throw new RuntimeException("éå®åå·:" + salesLedgerImportDto.getSalesContractNo() + ",æ 对åºäº§åæ°æ®ï¼"); boolean isPrivate = Integer.valueOf(2).equals(salesLedger.getSalesType()); // ç»ä¸è®¡ç®ååæ»éé¢ salesLedger.setContractAmount(salesLedgerProductImportDtos.stream() .map(SalesLedgerProductImportDto::getTaxInclusiveTotalPrice) .map(dto -> { if (isPrivate) { if (dto.getTotalPrice() != null) return dto.getTotalPrice(); BigDecimal up = dto.getUnitPrice() != null ? dto.getUnitPrice() : BigDecimal.ZERO; BigDecimal fr = dto.getFreight() != null ? dto.getFreight() : BigDecimal.ZERO; BigDecimal qty = dto.getQuantity() != null ? dto.getQuantity() : BigDecimal.ZERO; return up.add(fr).multiply(qty); } else { return dto.getTaxInclusiveTotalPrice() != null ? dto.getTaxInclusiveTotalPrice() : BigDecimal.ZERO; } }) .reduce(BigDecimal.ZERO, BigDecimal::add)); salesLedgerMapper.insert(salesLedger); @@ -411,10 +432,54 @@ BeanUtils.copyProperties(salesLedgerProductImportDto, salesLedgerProduct); salesLedgerProduct.setSalesLedgerId(salesLedger.getId()); salesLedgerProduct.setType(1); // 计ç®ä¸å«ç¨æ»ä»· salesLedgerProduct.setTaxExclusiveTotalPrice(salesLedgerProduct.getTaxInclusiveTotalPrice().divide(new BigDecimal(1).add(salesLedgerProduct.getTaxRate().divide(new BigDecimal(100))), 2, RoundingMode.HALF_UP)); salesLedgerProduct.setNoInvoiceNum(salesLedgerProduct.getQuantity()); salesLedgerProduct.setNoInvoiceAmount(salesLedgerProduct.getTaxExclusiveTotalPrice()); if (isPrivate) { // 对ç§ä¸å¡ if (salesLedgerProduct.getFreight() == null) salesLedgerProduct.setFreight(BigDecimal.ZERO); if (salesLedgerProduct.getUnitPrice() != null && salesLedgerProduct.getQuantity() != null) { if (salesLedgerProduct.getPriceWithFreight() == null) { salesLedgerProduct.setPriceWithFreight(salesLedgerProduct.getUnitPrice().add(salesLedgerProduct.getFreight())); } if (salesLedgerProduct.getTotalPrice() == null) { salesLedgerProduct.setTotalPrice(salesLedgerProduct.getPriceWithFreight().multiply(salesLedgerProduct.getQuantity())); } } BigDecimal tp = salesLedgerProduct.getTotalPrice() != null ? salesLedgerProduct.getTotalPrice() : BigDecimal.ZERO; salesLedgerProduct.setTaxInclusiveTotalPrice(tp); salesLedgerProduct.setTaxExclusiveTotalPrice(salesLedgerProduct.getUnitPrice() != null ? salesLedgerProduct.getUnitPrice().multiply(salesLedgerProduct.getQuantity()) : tp); // 使ç¨å«è¿è´¹æ»ä»· salesLedgerProduct.setNoInvoiceAmount(tp); salesLedgerProduct.setPendingInvoiceTotal(tp); salesLedgerProduct.setTaxRate(null); salesLedgerProduct.setTaxInclusiveUnitPrice(null); salesLedgerProduct.setInvoiceType(null); } else { // å¯¹å ¬ä¸å¡é»è¾ if (salesLedgerProduct.getTaxInclusiveTotalPrice() != null && salesLedgerProduct.getTaxRate() != null) { salesLedgerProduct.setTaxExclusiveTotalPrice( salesLedgerProduct.getTaxInclusiveTotalPrice() .divide(new BigDecimal(1).add(salesLedgerProduct.getTaxRate().divide(new BigDecimal(100))), 2, RoundingMode.HALF_UP) ); } // å¯¹å ¬ä½¿ç¨å«ç¨æ»ä»· BigDecimal titp = salesLedgerProduct.getTaxInclusiveTotalPrice() != null ? salesLedgerProduct.getTaxInclusiveTotalPrice() : BigDecimal.ZERO; salesLedgerProduct.setNoInvoiceAmount(titp); salesLedgerProduct.setPendingInvoiceTotal(titp); salesLedgerProduct.setUnitPrice(null); salesLedgerProduct.setTotalPrice(null); salesLedgerProduct.setFreight(BigDecimal.ZERO); salesLedgerProduct.setPriceWithFreight(null); } // å¹é 产åç§ç±»åè§æ ¼åå·æ å°ID list.stream() .filter(map -> map.get("productName").equals(salesLedgerProduct.getProductCategory()) && map.get("model").equals(salesLedgerProduct.getSpecificationModel())) .findFirst() @@ -422,20 +487,12 @@ 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() // .map(Product::getId) // .orElse(null)); // salesLedgerProduct.setProductModelId(productModels.stream() // .filter(productModel -> productModel.getModel().equals(salesLedgerProduct.getSpecificationModel())) // .findFirst() // .map(ProductModel::getId) // .orElse(null)); // å¡«å ç»è®°ä¿¡æ¯ salesLedgerProduct.setRegister(loginUser.getNickName()); salesLedgerProduct.setRegisterDate(LocalDateTime.now()); salesLedgerProduct.setApproveStatus(0); salesLedgerProduct.setPendingInvoiceTotal(salesLedgerProductImportDto.getTaxInclusiveTotalPrice()); salesLedgerProductMapper.insert(salesLedgerProduct); // æ·»å çäº§æ°æ® salesLedgerProductServiceImpl.addProductionData(salesLedgerProduct); @@ -444,9 +501,9 @@ return AjaxResult.success("å¯¼å ¥æå"); } catch (Exception e) { e.printStackTrace(); log.error("å¯¼å ¥å¤±è´¥ï¼", e); throw new RuntimeException("å¯¼å ¥æ°æ®è¿ç¨ä¸åçäºé误ï¼" + e.getMessage()); } return AjaxResult.success("å¯¼å ¥å¤±è´¥"); } @Override @@ -612,16 +669,23 @@ // 4. å¤çåè¡¨æ°æ® List<SalesLedgerProduct> productList = salesLedgerDto.getProductData(); if (productList != null && !productList.isEmpty()) { handleSalesLedgerProducts(salesLedger.getId(), productList, EnumUtil.fromCode(SaleEnum.class, salesLedgerDto.getType())); if (productList == null || productList.isEmpty()){ throw new ServiceException("æ°å¢/ä¿®æ¹å¤±è´¥,éå®äº§åä¸è½ä¸ºç©º"); } handleSalesLedgerProducts(salesLedger.getId(), productList, EnumUtil.fromCode(SaleEnum.class, salesLedgerDto.getType()), salesLedger.getSalesType()); Function<SalesLedgerProduct, BigDecimal> amountGetter = Integer.valueOf(2).equals(salesLedger.getSalesType()) ? p -> p.getTotalPrice() != null ? p.getTotalPrice() : BigDecimal.ZERO : p -> p.getTaxInclusiveTotalPrice() != null ? p.getTaxInclusiveTotalPrice() : BigDecimal.ZERO; updateMainContractAmount( salesLedger.getId(), productList, SalesLedgerProduct::getTaxInclusiveTotalPrice, amountGetter, salesLedgerMapper, SalesLedger.class ); } // 5. è¿ç§»ä¸´æ¶æä»¶å°æ£å¼ç®å½ if (salesLedgerDto.getTempFileIds() != null && !salesLedgerDto.getTempFileIds().isEmpty()) { @@ -712,6 +776,10 @@ @Override public void handleSalesLedgerProducts(Long salesLedgerId, List<SalesLedgerProduct> products, SaleEnum type) { handleSalesLedgerProducts(salesLedgerId, products, type, 1); } public void handleSalesLedgerProducts(Long salesLedgerId, List<SalesLedgerProduct> products, SaleEnum type, Integer salesType) { // æIDåç»ï¼åºåæ°å¢åæ´æ°çè®°å½ Map<Boolean, List<SalesLedgerProduct>> partitionedProducts = products.stream() .peek(p -> p.setSalesLedgerId(salesLedgerId)) @@ -732,8 +800,13 @@ for (SalesLedgerProduct salesLedgerProduct : insertList) { salesLedgerProduct.setType(type.getCode()); salesLedgerProduct.setNoInvoiceNum(salesLedgerProduct.getQuantity()); salesLedgerProduct.setNoInvoiceAmount(salesLedgerProduct.getTaxInclusiveTotalPrice()); salesLedgerProduct.setPendingInvoiceTotal(salesLedgerProduct.getTaxInclusiveTotalPrice()); if (Integer.valueOf(2).equals(salesType)) { salesLedgerProduct.setNoInvoiceAmount(salesLedgerProduct.getTotalPrice() != null ? salesLedgerProduct.getTotalPrice() : BigDecimal.ZERO); salesLedgerProduct.setPendingInvoiceTotal(salesLedgerProduct.getTotalPrice() != null ? salesLedgerProduct.getTotalPrice() : BigDecimal.ZERO); } else { salesLedgerProduct.setNoInvoiceAmount(salesLedgerProduct.getTaxInclusiveTotalPrice()); salesLedgerProduct.setPendingInvoiceTotal(salesLedgerProduct.getTaxInclusiveTotalPrice()); } salesLedgerProductMapper.insert(salesLedgerProduct); // æ·»å çäº§æ°æ® // salesLedgerProductServiceImpl.addProductionData(salesLedgerProduct); src/main/resources/mapper/basic/SupplierManageMapper.xml
@@ -4,7 +4,7 @@ "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.ruoyi.basic.mapper.SupplierManageMapper"> <select id="supplierListPage" resultType="com.ruoyi.basic.dto.SupplierManageDto"> <select id="supplierListPage" resultType="com.ruoyi.basic.pojo.SupplierManage"> SELECT T1.id, T1.supplier_name, @@ -41,6 +41,7 @@ SELECT T1.id, T1.supplier_name, T1.supplier_type, T1.taxpayer_identification_num, T1.company_address, T1.company_phone, src/main/resources/mapper/purchase/PurchaseLedgerMapper.xml
@@ -66,7 +66,7 @@ <if test="c.supplierId != null"> AND pl.supplier_id = #{c.supplierId} </if> <if test="c.supplierType != null and c.supplierType != ''"> <if test="c.supplierType != null"> AND sm.supplier_type = #{c.supplierType} </if> </where> src/main/resources/mapper/purchase/PurchaseLedgerTemplateMapper.xml
@@ -24,6 +24,7 @@ <result column="payment_method" property="paymentMethod" /> <result column="execution_date" property="executionDate" /> <result column="template_name" property="templateName" /> <result column="template_type" property="templateType" /> </resultMap> </mapper> src/main/resources/static/²É¹ºÌ¨Õ˵¼ÈëÄ£°å.xlsxBinary files differ
src/main/resources/static/ÏúÊŲ̂Õ˵¼ÈëÄ£°å.xlsxBinary files differ