src/main/java/com/ruoyi/purchase/controller/InvoicePurchaseController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,73 @@ package com.ruoyi.purchase.controller; import java.util.List; import javax.servlet.http.HttpServletResponse; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.purchase.pojo.InvoicePurchase; import com.ruoyi.purchase.service.IInvoicePurchaseService; import lombok.AllArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.ruoyi.framework.aspectj.lang.annotation.Log; import com.ruoyi.framework.aspectj.lang.enums.BusinessType; import com.ruoyi.framework.web.controller.BaseController; import com.ruoyi.framework.web.domain.AjaxResult; import com.ruoyi.framework.web.page.TableDataInfo; /** * å票信æ¯Controller * * @author ruoyi * @date 2025-05-14 */ @RestController @AllArgsConstructor @RequestMapping("/purchase/invoice") public class InvoicePurchaseController extends BaseController { private IInvoicePurchaseService invoicePurchaseService; /** * æ¥è¯¢å票信æ¯å表 */ @GetMapping("/list") public TableDataInfo list(InvoicePurchase invoicePurchase) { startPage(); List<InvoicePurchase> list = invoicePurchaseService.selectInvoicePurchaseList(invoicePurchase); return getDataTable(list); } /** * 导åºå票信æ¯å表 */ @Log(title = "å票信æ¯", businessType = BusinessType.EXPORT) @PostMapping("/export") public void export(HttpServletResponse response, InvoicePurchase invoicePurchase) { List<InvoicePurchase> list = invoicePurchaseService.selectInvoicePurchaseList(invoicePurchase); ExcelUtil<InvoicePurchase> util = new ExcelUtil<InvoicePurchase>(InvoicePurchase.class); util.exportExcel(response, list, "åç¥¨ä¿¡æ¯æ°æ®"); } /** * æ°å¢ä¿®æ¹åç¥¨ä¿¡æ¯ */ @Log(title = "å票信æ¯", businessType = BusinessType.INSERT) @PostMapping ("/addOrUpdateInvoice") public AjaxResult addOrUpdateInvoice(@RequestBody InvoicePurchase invoicePurchase) { return toAjax(invoicePurchaseService.addOrUpdateInvoice(invoicePurchase)); } /** * å é¤åç¥¨ä¿¡æ¯ */ @Log(title = "å票信æ¯", businessType = BusinessType.DELETE) @DeleteMapping("/delInvoice") public AjaxResult remove(@RequestBody Long[] ids) { return toAjax(invoicePurchaseService.delInvoice(ids)); } } src/main/java/com/ruoyi/purchase/controller/PurchaseLedgerController.java
@@ -69,7 +69,7 @@ } /** * æ¥è¯¢éå®å°è´¦å产åç¶åå表 * æ¥è¯¢éè´å°è´¦å产åç¶åå表 */ @GetMapping("/getPurchaseById") public PurchaseLedgerDto getPurchaseById(PurchaseLedgerDto purchaseLedgerDto) { src/main/java/com/ruoyi/purchase/dto/InvoicePurchaseDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,7 @@ package com.ruoyi.purchase.dto; import lombok.Data; @Data public class InvoicePurchaseDto { } src/main/java/com/ruoyi/purchase/dto/PurchaseLedgerDto.java
@@ -91,6 +91,10 @@ private List<String> tempFileIds; private List<SalesLedgerFile> SalesLedgerFiles; /** * ä¸å¡åææºå· */ private String phoneNumber; /** * ä¸å¡åid src/main/java/com/ruoyi/purchase/mapper/InvoicePurchaseMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,14 @@ package com.ruoyi.purchase.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.purchase.pojo.InvoicePurchase; /** * å票信æ¯Mapperæ¥å£ * * @author ruoyi * @date 2025-05-14 */ public interface InvoicePurchaseMapper extends BaseMapper<InvoicePurchase> { } src/main/java/com/ruoyi/purchase/mapper/PurchaseLedgerMapper.java
@@ -3,6 +3,9 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.purchase.pojo.PurchaseLedger; import org.apache.ibatis.annotations.Param; import java.math.BigDecimal; /** * éè´å°è´¦Mapperæ¥å£ @@ -12,4 +15,5 @@ */ public interface PurchaseLedgerMapper extends BaseMapper<PurchaseLedger> { int updateContractAmountById(@Param("id") Long id, @Param("totalTaxInclusiveAmount") BigDecimal totalTaxInclusiveAmount); } src/main/java/com/ruoyi/purchase/pojo/InvoicePurchase.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,98 @@ 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.ruoyi.framework.aspectj.lang.annotation.Excel; import lombok.Data; /** * å票信æ¯å¯¹è±¡ invoice_purchase * * @author ruoyi * @date 2025-05-14 */ @TableName("invoice_purchase") @Data public class InvoicePurchase { private static final long serialVersionUID = 1L; /** * 主é®ID */ @TableId(value = "id", type = IdType.AUTO) private Long id; /** * éè´ååå· */ @Excel(name = "éè´ååå·") private String purchaseContractNo; /** * éå®ååå· */ @Excel(name = "éå®ååå·") private String salesContractNo; /** * ä¾åºååç§° */ @Excel(name = "ä¾åºååç§°") private String supplierName; /** * åç¥¨å· */ @Excel(name = "å票å·") private String invoiceNumber; /** * å票éé¢ï¼å ï¼ */ @Excel(name = "å票éé¢", readConverterExp = "å =") private BigDecimal invoiceAmount; /** * ç¨ç */ @Excel(name = "ç¨ç") private BigDecimal taxRate; /** * å¼ç¥¨äºº */ @Excel(name = "å¼ç¥¨äºº") private String issuer; /** * å¼ç¥¨æ¥æ */ @JsonFormat(pattern = "yyyy-MM-dd") @Excel(name = "å¼ç¥¨æ¥æ", width = 30, dateFormat = "yyyy-MM-dd") private Date issueDate; /** * å票æä»¶ï¼PDFæ ¼å¼ï¼ */ @Excel(name = "å票æä»¶", readConverterExp = "P=DFæ ¼å¼") private String invoiceFile; /** * å建æ¶é´ */ @JsonFormat(pattern = "yyyy-MM-dd") private Date createdAt; /** * æ´æ°æ¶é´ */ @JsonFormat(pattern = "yyyy-MM-dd") private Date updatedAt; @TableField(fill = FieldFill.INSERT) private Long tenantId; } src/main/java/com/ruoyi/purchase/pojo/TicketRegistration.java
@@ -1,5 +1,6 @@ package com.ruoyi.purchase.pojo; import java.math.BigDecimal; import java.util.Date; import com.baomidou.mybatisplus.annotation.*; @@ -91,6 +92,11 @@ */ private Long salesLedgerId; /** * ååéé¢ï¼äº§åå«ç¨æ»ä»·ï¼ */ private BigDecimal contractAmount; @TableField(fill = FieldFill.INSERT) private Long tenantId; src/main/java/com/ruoyi/purchase/service/IInvoicePurchaseService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,21 @@ package com.ruoyi.purchase.service; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.purchase.pojo.InvoicePurchase; import java.util.List; /** * å票信æ¯Serviceæ¥å£ * * @author ruoyi * @date 2025-05-14 */ public interface IInvoicePurchaseService extends IService<InvoicePurchase> { List<InvoicePurchase> selectInvoicePurchaseList(InvoicePurchase invoicePurchase); int delInvoice(Long[] ids); int addOrUpdateInvoice(InvoicePurchase invoicePurchase); } src/main/java/com/ruoyi/purchase/service/impl/InvoicePurchaseServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,45 @@ package com.ruoyi.purchase.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.purchase.mapper.InvoicePurchaseMapper; import com.ruoyi.purchase.pojo.InvoicePurchase; import com.ruoyi.purchase.service.IInvoicePurchaseService; import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; import java.util.Arrays; import java.util.List; /** * å票信æ¯Serviceä¸å¡å±å¤ç * * @author ruoyi * @date 2025-05-14 */ @Service @AllArgsConstructor public class InvoicePurchaseServiceImpl extends ServiceImpl<InvoicePurchaseMapper, InvoicePurchase> implements IInvoicePurchaseService { private InvoicePurchaseMapper invoicePurchaseMapper; @Override public List<InvoicePurchase> selectInvoicePurchaseList(InvoicePurchase invoicePurchase) { return invoicePurchaseMapper.selectList(new LambdaQueryWrapper<>()); } @Override public int delInvoice(Long[] ids) { return invoicePurchaseMapper.deleteBatchIds(Arrays.asList(ids)); } @Override public int addOrUpdateInvoice(InvoicePurchase invoicePurchase) { if (invoicePurchase.getId() == null) { return invoicePurchaseMapper.insert(invoicePurchase); } else { return invoicePurchaseMapper.updateById(invoicePurchase); } } } src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
@@ -28,6 +28,7 @@ import org.springframework.stereotype.Service; import java.io.IOException; import java.math.BigDecimal; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; @@ -108,7 +109,6 @@ List<SalesLedgerProduct> productList = purchaseLedgerDto.getProductData(); if (productList != null && !productList.isEmpty()) { handleSalesLedgerProducts(purchaseLedger.getId(), productList, purchaseLedgerDto.getType()); } // 5. è¿ç§»ä¸´æ¶æä»¶å°æ£å¼ç®å½ @@ -141,6 +141,18 @@ salesLedgerProduct.setType(type); salesLedgerProductMapper.insert(salesLedgerProduct); } } // è®¡ç®æ»å«ç¨éé¢ BigDecimal totalTaxInclusiveAmount = products.stream() .map(SalesLedgerProduct::getTaxInclusiveTotalPrice) .filter(Objects::nonNull) .reduce(BigDecimal.ZERO, BigDecimal::add); // æ´æ°ä¸»è¡¨çæ»éé¢å段 if (salesLedgerId != null) { // ç´æ¥æ´æ°æå®IDçè®°å½çcontractAmountåæ®µä¸ºtotalTaxInclusiveAmount purchaseLedgerMapper.updateContractAmountById(salesLedgerId, totalTaxInclusiveAmount); } } @@ -256,9 +268,6 @@ // è·ååå§æ¥è¯¢ç»æ List<Map<String, Object>> result = purchaseLedgerMapper.selectMaps(queryWrapper); //æ¥è¯¢éå®ååå· // å°ä¸å线å½å转æ¢ä¸ºé©¼å³°å½å return result.stream().map(map -> map.entrySet().stream() src/main/java/com/ruoyi/purchase/service/impl/TicketRegistrationServiceImpl.java
@@ -59,6 +59,7 @@ ticketRegistration.setPurchaseContractNumber(purchaseLedger.getPurchaseContractNumber()); ticketRegistration.setBusinessPerson(sysUser.getNickName()); ticketRegistration.setTenantId(purchaseLedger.getTenantId()); ticketRegistration.setContractAmount(purchaseLedger.getContractAmount()); // å¤çåè¡¨æ°æ® List<SalesLedgerProduct> productData = ticketRegistrationDto.getProductData(); src/main/resources/mapper/purchase/PurchaseLedgerMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,12 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.ruoyi.purchase.mapper.PurchaseLedgerMapper"> <update id="updateContractAmountById"> UPDATE purchase_ledger SET contract_amount = #{totalTaxInclusiveAmount} WHERE id = #{id} </update> </mapper>