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/PurchaseLedgerController.java
@@ -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/PurchaseLedgerDto.java
@@ -40,6 +40,11 @@ private String salesContractNo; /** * éå®ååå·id */ private Long salesContractNoId; /** * 项ç®åç§° */ private String projectName; @@ -87,4 +92,9 @@ private List<SalesLedgerFile> SalesLedgerFiles; /** * ä¸å¡å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/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/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,97 @@ package com.ruoyi.purchase.pojo; 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; @TableField(fill = FieldFill.INSERT) private Long tenantId; } 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/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; @@ -34,10 +35,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 +65,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 +77,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 +93,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) { @@ -239,4 +248,69 @@ } 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,127 @@ 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()); // å¤çåè¡¨æ°æ® 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/pojo/SalesLedgerProduct.java
@@ -89,4 +89,24 @@ * å°è´¦ç±»å 1.éå® 2ï¼éè´ */ private Integer type; /** * æ¬æ¬¡æ¥ç¥¨æ° */ private Long ticketsNum; /** * æ¬æ¬¡æ¥ç¥¨éé¢(å ) */ private BigDecimal ticketsAmount; /** * æªæ¥ç¥¨æ° */ private Long futureTickets; /** * æªæ¥ç¥¨éé¢(å ) */ private BigDecimal futureTicketsAmount; }