src/main/java/com/ruoyi/basic/service/impl/CustomerServiceImpl.java
@@ -55,7 +55,7 @@ LambdaQueryWrapper<Customer> queryWrapper = new LambdaQueryWrapper<>(); if (StringUtils.isNotBlank(customer.getCustomerName())) { queryWrapper.eq(Customer::getCustomerName, customer.getCustomerName()); queryWrapper.like(Customer::getCustomerName, customer.getCustomerName()); } List<Customer> customerList = customerMapper.selectList(queryWrapper); 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) { @@ -92,4 +92,20 @@ public List getSalesNo() { return salesLedgerService.getSalesNo(); } /** * æ ¹æ®éè´ååå·æ¥è¯¢äº§å */ @GetMapping("/getProduct") public List getProduct(PurchaseLedgerDto purchaseLedgerDto){ return purchaseLedgerService.getProduct(purchaseLedgerDto); } /** * æ ¹æ®éè´ååå·æ¥è¯¢äº§å */ @GetMapping("/getInfo") public PurchaseLedgerDto getInfo(PurchaseLedgerDto purchaseLedgerDto){ return purchaseLedgerService.getInfo(purchaseLedgerDto); } } src/main/java/com/ruoyi/purchase/controller/TicketRegistrationController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,88 @@ package com.ruoyi.purchase.controller; import javax.servlet.http.HttpServletResponse; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.purchase.dto.TicketRegistrationDto; import com.ruoyi.purchase.pojo.TicketRegistration; import com.ruoyi.purchase.service.ITicketRegistrationService; 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; import java.util.List; /** * æ¥ç¥¨ç»è®°Controller * * @author ruoyi * @date 2025-05-13 */ @RestController @RequestMapping("/purchase/registration") @AllArgsConstructor public class TicketRegistrationController extends BaseController { private ITicketRegistrationService ticketRegistrationService; /** * æ¥è¯¢æ¥ç¥¨ç»è®°å表 */ @GetMapping("/list") public TableDataInfo list(TicketRegistration ticketRegistration) { startPage(); List<TicketRegistration> list = ticketRegistrationService.selectTicketRegistrationList(ticketRegistration); return getDataTable(list); } /** * å¯¼åºæ¥ç¥¨ç»è®°å表 */ @Log(title = "æ¥ç¥¨ç»è®°", businessType = BusinessType.EXPORT) @PostMapping("/export") public void export(HttpServletResponse response, TicketRegistration ticketRegistration) { List<TicketRegistration> list = ticketRegistrationService.selectTicketRegistrationList(ticketRegistration); ExcelUtil<TicketRegistration> util = new ExcelUtil<TicketRegistration>(TicketRegistration.class); util.exportExcel(response, list, "æ¥ç¥¨ç»è®°æ°æ®"); } /** * æ¥è¯¢æ¥ç¥¨ç»è®°å产åç¶åå表 */ @GetMapping("/getRegistrationById") public TicketRegistrationDto getRegistrationById(TicketRegistrationDto ticketRegistrationDto) { return ticketRegistrationService.getRegistrationById(ticketRegistrationDto); } /** * æ°å¢ä¿®æ¹æ¥ç¥¨ç»è®° */ @Log(title = "æ¥ç¥¨ç»è®°", businessType = BusinessType.INSERT) @PostMapping ("/addOrUpdateRegistration") public AjaxResult addOrUpdateRegistration(@RequestBody TicketRegistrationDto ticketRegistrationDto) { return toAjax(ticketRegistrationService.addOrUpdateRegistration(ticketRegistrationDto)); } /** * å 餿¥ç¥¨ç»è®° */ @Log(title = "æ¥ç¥¨ç»è®°", businessType = BusinessType.DELETE) @DeleteMapping("/delRegistration") public AjaxResult delRegistration(@RequestBody Long[] ids) { return toAjax(ticketRegistrationService.delRegistration(ids)); } } 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
@@ -40,6 +40,11 @@ private String salesContractNo; /** * éå®ååå·id */ private Long salesContractNoId; /** * 项ç®åç§° */ private String projectName; @@ -86,5 +91,14 @@ private List<String> tempFileIds; private List<SalesLedgerFile> SalesLedgerFiles; /** * ä¸å¡åææºå· */ private String phoneNumber; /** * ä¸å¡åid */ private Long businessPersonId; } src/main/java/com/ruoyi/purchase/dto/TicketRegistrationDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,55 @@ package com.ruoyi.purchase.dto; import com.ruoyi.sales.pojo.SalesLedgerProduct; import lombok.Data; import java.util.List; @Data public class TicketRegistrationDto { /** * 主é®ID */ private Long id; /** * éè´å°è´¦id */ private Long purchaseLedgerId; /** * éè´ååå· */ private String purchaseContractNumber; /** * éå®ååå· */ private String salesContractNo; /** * 客æ·åç§° */ private String customerName; /** * ä¸å¡å */ private String businessPerson; /** * ä¸å¡åid */ private Long businessPersonId; /** * 项ç®åç§° */ private String projectName; private List<SalesLedgerProduct> productData; private Long salesContractNoId; private String supplierName; } 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/mapper/TicketRegistrationMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,13 @@ package com.ruoyi.purchase.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.purchase.pojo.TicketRegistration; /** * æ¥ç¥¨ç»è®°Mapperæ¥å£ * * @author ruoyi * @date 2025-05-13 */ public interface TicketRegistrationMapper extends BaseMapper<TicketRegistration> { } 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/PurchaseLedger.java
@@ -106,4 +106,22 @@ */ private BigDecimal contractAmount; /** * ä¸å¡å */ @Excel(name = "ä¸å¡å") private String businessPerson; /** * ä¸å¡åid */ private Long businessPersonId; /** * ä¸å¡åææºå· */ private String phoneNumber; } src/main/java/com/ruoyi/purchase/pojo/TicketRegistration.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,103 @@ 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; /** * æ¥ç¥¨ç»è®°å¯¹è±¡ ticket_registration * * @author ruoyi * @date 2025-05-13 */ @Data @TableName("ticket_registration") public class TicketRegistration{ private static final long serialVersionUID = 1L; /** * 主é®ID */ @TableId(value = "id", type = IdType.AUTO) private Long id; /** * éè´å°è´¦id */ private Long purchaseLedgerId; /** * éè´ååå· */ @Excel(name = "éè´ååå·") private String purchaseContractNumber; /** * éå®ååå· */ @Excel(name = "éå®ååå·") private String salesContractNo; /** * ä¾åºååç§° */ @Excel(name = "ä¾åºååç§°") private String supplierName; /** * 客æ·åç§° */ private String customerName; /** * ä¸å¡å */ @Excel(name = "ä¸å¡å") private String businessPerson; /** * ä¸å¡åid */ private Long businessPersonId; /** * 项ç®åç§° */ @Excel(name = "项ç®åç§°") private String projectName; /** * 产åä¿¡æ¯ */ private Long productId; /** * å建æ¶é´ */ @JsonFormat(pattern = "yyyy-MM-dd") private Date createdAt; /** * æ´æ°æ¶é´ */ @JsonFormat(pattern = "yyyy-MM-dd") private Date updatedAt; /** * å ³èéå®å°è´¦ä¸»è¡¨ä¸»é® */ 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/IPurchaseLedgerService.java
@@ -23,4 +23,8 @@ int deletePurchaseLedgerByIds(Long[] ids); PurchaseLedgerDto getPurchaseById(PurchaseLedgerDto purchaseLedgerDto); List getProduct(PurchaseLedgerDto purchaseLedgerDto); PurchaseLedgerDto getInfo(PurchaseLedgerDto purchaseLedgerDto); } src/main/java/com/ruoyi/purchase/service/ITicketRegistrationService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,24 @@ package com.ruoyi.purchase.service; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.purchase.dto.TicketRegistrationDto; import com.ruoyi.purchase.pojo.TicketRegistration; import java.util.List; /** * æ¥ç¥¨ç»è®°Serviceæ¥å£ * * @author ruoyi * @date 2025-05-13 */ public interface ITicketRegistrationService extends IService<TicketRegistration> { List<TicketRegistration> selectTicketRegistrationList(TicketRegistration ticketRegistration); int addOrUpdateRegistration(TicketRegistrationDto ticketRegistrationDto); int delRegistration(Long[] ids); TicketRegistrationDto getRegistrationById(TicketRegistrationDto ticketRegistrationDto); } 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
@@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.exception.base.BaseException; import com.ruoyi.common.utils.StringUtils; @@ -27,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; @@ -34,10 +36,7 @@ import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.UUID; import java.util.*; import java.util.stream.Collectors; /** @@ -67,7 +66,11 @@ @Override public List<PurchaseLedger> selectPurchaseLedgerList(PurchaseLedger purchaseLedger) { return purchaseLedgerMapper.selectList(new LambdaQueryWrapper<>()); LambdaQueryWrapper<PurchaseLedger> queryWrapper = new LambdaQueryWrapper<>(); if (StringUtils.isNotBlank(purchaseLedger.getPurchaseContractNumber())) { queryWrapper.like(PurchaseLedger::getPurchaseContractNumber,purchaseLedger.getPurchaseContractNumber()); } return purchaseLedgerMapper.selectList(queryWrapper); } @Override @@ -75,9 +78,13 @@ SalesLedger salesLedger = salesLedgerMapper.selectById(purchaseLedgerDto.getSalesLedgerId()); //ä¸å¡å SysUser businessPerson = userMapper.selectUserById(purchaseLedgerDto.getBusinessPersonId()); if (salesLedger == null) { throw new BaseException("éå®å°è´¦ä¸åå¨"); } //å½å ¥äºº SysUser sysUser = userMapper.selectUserById(purchaseLedgerDto.getRecorderId()); // DTO转Entity @@ -87,6 +94,9 @@ purchaseLedger.setSalesContractNo(salesLedger.getSalesContractNo()); purchaseLedger.setRecorderId(purchaseLedgerDto.getRecorderId()); purchaseLedger.setRecorderName(sysUser.getNickName()); purchaseLedger.setBusinessPersonId(purchaseLedgerDto.getBusinessPersonId()); purchaseLedger.setBusinessPerson(businessPerson.getNickName()); purchaseLedger.setPhoneNumber(sysUser.getPhonenumber()); // 3. æ°å¢ææ´æ°ä¸»è¡¨ if (purchaseLedger.getId() == null) { @@ -99,7 +109,6 @@ List<SalesLedgerProduct> productList = purchaseLedgerDto.getProductData(); if (productList != null && !productList.isEmpty()) { handleSalesLedgerProducts(purchaseLedger.getId(), productList, purchaseLedgerDto.getType()); } // 5. è¿ç§»ä¸´æ¶æä»¶å°æ£å¼ç®å½ @@ -132,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); } } @@ -239,4 +260,66 @@ } return resultDto; } @Override public List getProduct(PurchaseLedgerDto purchaseLedgerDto) { LambdaQueryWrapper<PurchaseLedger> queryWrapper = Wrappers.lambdaQuery(); queryWrapper.select(PurchaseLedger::getId, PurchaseLedger::getPurchaseContractNumber); // è·ååå§æ¥è¯¢ç»æ List<Map<String, Object>> result = purchaseLedgerMapper.selectMaps(queryWrapper); // å°ä¸å线å½å转æ¢ä¸ºé©¼å³°å½å return result.stream().map(map -> map.entrySet().stream() .collect(Collectors.toMap( entry -> underlineToCamel(entry.getKey()), Map.Entry::getValue)) ).collect(Collectors.toList()); } @Override public PurchaseLedgerDto getInfo(PurchaseLedgerDto purchaseLedgerDto) { PurchaseLedger purchaseLedger = purchaseLedgerMapper.selectById(purchaseLedgerDto.getId()); if (purchaseLedger == null) { throw new BaseException("éè´å°è´¦ä¸åå¨"); } // å建并填å DTO PurchaseLedgerDto resultDto = new PurchaseLedgerDto(); resultDto.setSalesContractNoId(purchaseLedger.getSalesLedgerId()); resultDto.setSalesContractNo(purchaseLedger.getSalesContractNo()); resultDto.setSupplierName(purchaseLedger.getSupplierName()); resultDto.setProjectName(purchaseLedger.getProjectName()); resultDto.setBusinessPersonId(purchaseLedger.getBusinessPersonId()); // æ¥è¯¢å¹¶è®¾ç½®å ³è产å LambdaQueryWrapper<SalesLedgerProduct> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(SalesLedgerProduct::getSalesLedgerId, purchaseLedger.getId()) .eq(SalesLedgerProduct::getType, 2); List<SalesLedgerProduct> productList = salesLedgerProductMapper.selectList(queryWrapper); resultDto.setProductData(productList); return resultDto; } /** * ä¸å线å½å转驼峰å½å */ private String underlineToCamel(String param) { if (param == null || "".equals(param.trim())) { return ""; } int len = param.length(); StringBuilder sb = new StringBuilder(len); for (int i = 0; i < len; i++) { char c = param.charAt(i); if (c == '_') { if (++i < len) { sb.append(Character.toUpperCase(param.charAt(i))); } } else { sb.append(Character.toLowerCase(c)); } } return sb.toString(); } } src/main/java/com/ruoyi/purchase/service/impl/TicketRegistrationServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,128 @@ 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.common.exception.base.BaseException; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.bean.BeanUtils; import com.ruoyi.project.system.domain.SysUser; import com.ruoyi.project.system.mapper.SysUserMapper; import com.ruoyi.purchase.dto.TicketRegistrationDto; import com.ruoyi.purchase.mapper.PurchaseLedgerMapper; import com.ruoyi.purchase.mapper.TicketRegistrationMapper; import com.ruoyi.purchase.pojo.PurchaseLedger; import com.ruoyi.purchase.pojo.TicketRegistration; import com.ruoyi.purchase.service.ITicketRegistrationService; import com.ruoyi.sales.mapper.SalesLedgerProductMapper; import com.ruoyi.sales.pojo.SalesLedgerProduct; import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; /** * æ¥ç¥¨ç»è®°Serviceä¸å¡å±å¤ç * * @author ruoyi * @date 2025-05-13 */ @Service @AllArgsConstructor public class TicketRegistrationServiceImpl extends ServiceImpl<TicketRegistrationMapper, TicketRegistration> implements ITicketRegistrationService { private TicketRegistrationMapper ticketRegistrationMapper; private PurchaseLedgerMapper purchaseLedgerMapper; private SalesLedgerProductMapper salesLedgerProductMapper; private final SysUserMapper userMapper; @Override public List<TicketRegistration> selectTicketRegistrationList(TicketRegistration ticketRegistration) { LambdaQueryWrapper<TicketRegistration> queryWrapper = new LambdaQueryWrapper<>(); if (StringUtils.isNotBlank(ticketRegistration.getPurchaseContractNumber())) { queryWrapper.like(TicketRegistration::getPurchaseContractNumber,ticketRegistration.getPurchaseContractNumber()); } return ticketRegistrationMapper.selectList(queryWrapper); } @Override public int addOrUpdateRegistration(TicketRegistrationDto ticketRegistrationDto) { PurchaseLedger purchaseLedger = purchaseLedgerMapper.selectById(ticketRegistrationDto.getPurchaseLedgerId()); SysUser sysUser = userMapper.selectUserById(ticketRegistrationDto.getBusinessPersonId()); TicketRegistration ticketRegistration = new TicketRegistration(); BeanUtils.copyProperties(ticketRegistrationDto, ticketRegistration); ticketRegistration.setPurchaseContractNumber(purchaseLedger.getPurchaseContractNumber()); ticketRegistration.setBusinessPerson(sysUser.getNickName()); ticketRegistration.setTenantId(purchaseLedger.getTenantId()); ticketRegistration.setContractAmount(purchaseLedger.getContractAmount()); // å¤çåè¡¨æ°æ® List<SalesLedgerProduct> productData = ticketRegistrationDto.getProductData(); if (productData != null && !productData.isEmpty()) { handleSalesLedgerProducts(purchaseLedger.getId(), productData, 2); } // æ§è¡æå ¥ææ´æ°æä½ if (ticketRegistrationDto.getId() == null) { return ticketRegistrationMapper.insert(ticketRegistration); } else { return ticketRegistrationMapper.updateById(ticketRegistration); } } @Override public int delRegistration(Long[] ids) { return ticketRegistrationMapper.deleteBatchIds(Arrays.asList(ids)); } @Override public TicketRegistrationDto getRegistrationById(TicketRegistrationDto ticketRegistrationDto) { TicketRegistration ticketRegistration = ticketRegistrationMapper.selectById(ticketRegistrationDto.getId()); LambdaQueryWrapper<PurchaseLedger> purchaseQueryWrapper = new LambdaQueryWrapper<>(); purchaseQueryWrapper.eq(PurchaseLedger::getId,ticketRegistration.getPurchaseLedgerId()); PurchaseLedger purchaseLedger = purchaseLedgerMapper.selectOne(purchaseQueryWrapper); if (ticketRegistration == null) { throw new BaseException("éè´å°è´¦ä¸åå¨"); } // å建并填å DTO TicketRegistrationDto resultDto = new TicketRegistrationDto(); BeanUtils.copyProperties(ticketRegistration,resultDto); // æ¥è¯¢å¹¶è®¾ç½®å ³è产å LambdaQueryWrapper<SalesLedgerProduct> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(SalesLedgerProduct::getSalesLedgerId, purchaseLedger.getId()) .eq(SalesLedgerProduct::getType, 2); List<SalesLedgerProduct> productList = salesLedgerProductMapper.selectList(queryWrapper); resultDto.setProductData(productList); return resultDto; } private void handleSalesLedgerProducts(Long salesLedgerId, List<SalesLedgerProduct> products, Integer type) { if (products == null || products.isEmpty()) { return; } // è¿æ»¤åºæ ID çè®°å½ï¼å³éè¦æ´æ°çè®°å½ï¼ List<SalesLedgerProduct> updateList = products.stream() .filter(p -> p.getId() != null) .peek(p -> { p.setSalesLedgerId(salesLedgerId); p.setType(type); }) .collect(Collectors.toList()); // Java 8 å ¼å®¹åæ³ // æ¹éæ´æ°ï¼éè¦ MyBatis æä¾æ¹éæ´æ°æ¹æ³ï¼ if (!updateList.isEmpty()) { updateList.forEach(product -> { product.setType(type); salesLedgerProductMapper.updateById(product); }); } } } src/main/java/com/ruoyi/sales/controller/InvoiceLedgerController.java
@@ -1,7 +1,6 @@ package com.ruoyi.sales.controller; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.basic.dto.SupplierManageDto; import com.ruoyi.framework.web.domain.AjaxResult; import com.ruoyi.sales.dto.InvoiceLedgerDto; import com.ruoyi.sales.service.InvoiceLedgerService; @@ -111,4 +110,15 @@ return AjaxResult.error(e.getMessage()); } } /** * å¼ç¥¨å°è´¦æ¥è¯¢ * @param invoiceLedgerDto * @return */ @GetMapping("/list") public AjaxResult invoiceLedgerList(InvoiceLedgerDto invoiceLedgerDto) { return AjaxResult.success(invoiceLedgerService.invoiceLedgerList(invoiceLedgerDto)); } } src/main/java/com/ruoyi/sales/controller/ReceiptPaymentController.java
@@ -22,9 +22,9 @@ * @param receiptPayment * @return */ @PostMapping("/add") public AjaxResult receiptPaymentAdd (@RequestBody ReceiptPayment receiptPayment) { receiptPaymentService.receiptPaymentAdd(receiptPayment); @PostMapping("/saveOrUpdate") public AjaxResult receiptPaymentSaveOrUpdate (@RequestBody ReceiptPayment receiptPayment) { receiptPaymentService.receiptPaymentSaveOrUpdate(receiptPayment); return AjaxResult.success(); } @@ -59,5 +59,15 @@ return AjaxResult.success(receiptPaymentService.receiptPaymentListPage(page,receiptPaymentDto)); } /** * 忬¾ç»è®°è¯¦æ * @param id * @return */ @GetMapping("/info") public AjaxResult receiptPaymentInfo (Integer id) { return AjaxResult.success(receiptPaymentService.receiptPaymentInfo(id)); } } src/main/java/com/ruoyi/sales/dto/ReceiptPaymentDto.java
@@ -1,19 +1,19 @@ package com.ruoyi.sales.dto; import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.sales.pojo.ReceiptPayment; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; import java.math.BigDecimal; import java.time.LocalDateTime; @Data public class ReceiptPaymentDto extends ReceiptPayment { @ApiModelProperty(value = "客æ·ååå·") private String customerContractNo; @ApiModelProperty(value = "客æ·åç§°") private String customerName; @ApiModelProperty(value = "æ¥è¯¢ææ¬") private String searchText; } src/main/java/com/ruoyi/sales/mapper/ReceiptPaymentMapper.java
@@ -10,4 +10,6 @@ public interface ReceiptPaymentMapper extends BaseMapper<ReceiptPayment> { IPage<ReceiptPaymentDto> receiptPaymentListPage(Page page, @Param("receiptPaymentDto") ReceiptPaymentDto receiptPaymentDto); ReceiptPaymentDto receiptPaymentInfo(Integer id); } src/main/java/com/ruoyi/sales/pojo/ReceiptPayment.java
@@ -10,6 +10,7 @@ import org.springframework.format.annotation.DateTimeFormat; import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; @Data @@ -52,9 +53,9 @@ private Integer invoiceLedgerId; @ApiModelProperty(value = "æ¥æ¬¾æ¥æ") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime receiptPaymentDate; @JsonFormat(pattern = "yyyy-MM-dd") @DateTimeFormat(pattern = "yyyy-MM-dd") private LocalDate receiptPaymentDate; @ApiModelProperty(value = "å建æ¶é´") @TableField(fill = FieldFill.INSERT) src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java
@@ -89,4 +89,24 @@ * å°è´¦ç±»å 1.éå® 2ï¼éè´ */ private Integer type; /** * æ¬æ¬¡æ¥ç¥¨æ° */ private Long ticketsNum; /** * æ¬æ¬¡æ¥ç¥¨éé¢(å ) */ private BigDecimal ticketsAmount; /** * æªæ¥ç¥¨æ° */ private Long futureTickets; /** * æªæ¥ç¥¨éé¢(å ) */ private BigDecimal futureTicketsAmount; } src/main/java/com/ruoyi/sales/service/InvoiceLedgerService.java
@@ -70,4 +70,11 @@ * @return */ void invoiceLedgerCommitFile(InvoiceLedgerDto invoiceLedgerDto); /** * å¼ç¥¨å°è´¦æ¥è¯¢ * @param invoiceLedgerDto * @return */ List<InvoiceLedgerDto> invoiceLedgerList(InvoiceLedgerDto invoiceLedgerDto); } src/main/java/com/ruoyi/sales/service/ReceiptPaymentService.java
@@ -14,7 +14,7 @@ * @param receiptPayment * @return */ int receiptPaymentAdd(ReceiptPayment receiptPayment); int receiptPaymentSaveOrUpdate(ReceiptPayment receiptPayment); /** * 忬¾ç»è®°ä¿®æ¹ @@ -37,4 +37,11 @@ * @return */ IPage<ReceiptPaymentDto> receiptPaymentListPage (Page page, ReceiptPaymentDto receiptPaymentDto); /** * 忬¾ç»è®°è¯¦æ * @param id * @return */ ReceiptPaymentDto receiptPaymentInfo(Integer id); } src/main/java/com/ruoyi/sales/service/impl/InvoiceLedgerServiceImpl.java
@@ -26,6 +26,7 @@ import javax.servlet.http.HttpServletResponse; import java.io.File; import java.util.Collections; import java.util.List; import java.util.UUID; import java.util.stream.Collectors; @@ -199,4 +200,14 @@ }); } /** * å¼ç¥¨å°è´¦æ¥è¯¢ * @param invoiceLedgerDto * @return */ @Override public List<InvoiceLedgerDto> invoiceLedgerList(InvoiceLedgerDto invoiceLedgerDto) { return invoiceLedgerMapper.invoiceLedgerList(invoiceLedgerDto); } } src/main/java/com/ruoyi/sales/service/impl/ReceiptPaymentServiceImpl.java
@@ -25,8 +25,12 @@ * @return */ @Override public int receiptPaymentAdd(ReceiptPayment receiptPayment) { return receiptPaymentMapper.insert(receiptPayment); public int receiptPaymentSaveOrUpdate(ReceiptPayment receiptPayment) { if(null==receiptPayment.getId()){ return receiptPaymentMapper.insert(receiptPayment); }else { return receiptPaymentMapper.updateById(receiptPayment); } } /** @@ -61,4 +65,14 @@ public IPage<ReceiptPaymentDto> receiptPaymentListPage(Page page, ReceiptPaymentDto receiptPaymentDto) { return receiptPaymentMapper.receiptPaymentListPage(page, receiptPaymentDto); } /** * 忬¾ç»è®°è¯¦æ * @param id * @return */ @Override public ReceiptPaymentDto receiptPaymentInfo(Integer id) { return receiptPaymentMapper.receiptPaymentInfo(id); } } 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> src/main/resources/mapper/sales/ReceiptPaymentMapper.xml
@@ -3,7 +3,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.ruoyi.sales.mapper.ReceiptPaymentMapper"> <select id="invoiceLedgerPage" resultType="com.ruoyi.sales.dto.ReceiptPaymentDto"> <select id="receiptPaymentListPage" resultType="com.ruoyi.sales.dto.ReceiptPaymentDto"> SELECT T1.id , T1.sales_ledger_id , @@ -20,9 +20,47 @@ T1.create_user , T1.update_time , T1.update_user , T1.tenant_id , T1.tenant_id, T3.customer_contract_no, T2.customer_name FROM receipt_payment T1 LEFT JOIN customer T2 ON T1.customer_id = T2.id LEFT JOIN sales_ledger T3 ON T1.sales_ledger_id = T3.id <where> <if test="receiptPaymentDto.searchText != null and receiptPaymentDto.searchText != ''"> AND ( T2.customer_name LIKE CONCAT('%',#{receiptPaymentDto.searchText},'%') OR T1.sales_contract_no LIKE CONCAT('%',#{receiptPaymentDto.searchText},'%') ) </if> </where> </select> <select id="receiptPaymentInfo" resultType="com.ruoyi.sales.dto.ReceiptPaymentDto"> SELECT T1.id , T1.sales_ledger_id , T1.sales_contract_no , T1.customer_id , T1.invoice_no , T1.invoice_amount , T1.tax_rate , T1.receipt_payment_type , T1.receipt_payment_amount , T1.registrant , T1.receipt_payment_date , T1.create_time , T1.create_user , T1.update_time , T1.update_user , T1.tenant_id, T1.invoice_ledger_id, T3.customer_contract_no, T2.customer_name FROM receipt_payment T1 LEFT JOIN customer T2 ON T1.customer_id = T2.id LEFT JOIN sales_ledger T3 ON T1.sales_ledger_id = T3.id WHERE T1.id = #{id} </select> </mapper>