src/main/java/com/ruoyi/sales/controller/SalesQuotationController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,31 @@ package com.ruoyi.sales.controller; import com.ruoyi.framework.web.domain.AjaxResult; import com.ruoyi.sales.dto.SalesQuotationDto; import com.ruoyi.sales.service.SalesQuotationService; import org.springframework.beans.factory.annotation.Autowired; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.springframework.web.bind.annotation.*; @RestController @RequestMapping("/sales/quotation") public class SalesQuotationController { @Autowired private SalesQuotationService salesQuotationService; @GetMapping("/list") public AjaxResult getList(Page page, SalesQuotationDto salesQuotationDto) { return AjaxResult.success(salesQuotationService.listPage(page, salesQuotationDto)); } @PostMapping("/add") public AjaxResult add(@RequestBody SalesQuotationDto salesQuotationDto) { return AjaxResult.success(salesQuotationService.add(salesQuotationDto)); } @PostMapping("/update") public AjaxResult update(@RequestBody SalesQuotationDto salesQuotationDto) { return AjaxResult.success(salesQuotationService.edit(salesQuotationDto)); } @DeleteMapping("/delete") public AjaxResult delete(@RequestBody Long id) { return AjaxResult.success(salesQuotationService.delete(id)); } } src/main/java/com/ruoyi/sales/dto/SalesQuotationDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,14 @@ package com.ruoyi.sales.dto; import com.ruoyi.sales.pojo.SalesQuotation; import com.ruoyi.sales.pojo.SalesQuotationProduct; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; @Data public class SalesQuotationDto extends SalesQuotation { @ApiModelProperty(value = "æ¥ä»·åå") private List<SalesQuotationProduct> products; } src/main/java/com/ruoyi/sales/mapper/SalesQuotationMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,14 @@ package com.ruoyi.sales.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.ruoyi.sales.dto.SalesQuotationDto; import com.ruoyi.sales.pojo.SalesQuotation; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.apache.ibatis.annotations.Mapper; import org.springframework.data.repository.query.Param; @Mapper public interface SalesQuotationMapper extends BaseMapper<SalesQuotation> { IPage<SalesQuotationDto> listPage(Page page,@Param("salesQuotationDto") SalesQuotationDto salesQuotationDto); } src/main/java/com/ruoyi/sales/mapper/SalesQuotationProductMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,16 @@ package com.ruoyi.sales.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.sales.pojo.SalesQuotationProduct; import io.lettuce.core.dynamic.annotation.Param; import org.apache.ibatis.annotations.Mapper; import java.util.List; @Mapper public interface SalesQuotationProductMapper extends BaseMapper<SalesQuotationProduct> { // List<SalesQuotationProduct> selectBySalesQuotationIds(List<Long> salesQuotationIds); List<SalesQuotationProduct> selectBySalesQuotationId(@Param("id") Long id); } src/main/java/com/ruoyi/sales/pojo/SalesQuotation.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,62 @@ package com.ruoyi.sales.pojo; import com.baomidou.mybatisplus.annotation.*; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; import java.time.LocalDate; import java.time.LocalDateTime; @Data @TableName("sales_quotation") public class SalesQuotation { @TableId(value = "id", type = IdType.AUTO) private Long id; @ApiModelProperty(value = "æ¥ä»·åç¼å·") private String quotationNo; @ApiModelProperty(value = "客æ·åç§°") private String customer; @ApiModelProperty(value = "ä¸å¡å") private String salesperson; @ApiModelProperty(value = "æ¥ä»·æ¥æ") @JsonFormat(pattern = "yyyy-MM-dd") @DateTimeFormat(pattern = "yyyy-MM-dd") private LocalDate quotationDate; @ApiModelProperty(value = "æææè³") @JsonFormat(pattern = "yyyy-MM-dd") @DateTimeFormat(pattern = "yyyy-MM-dd") private LocalDate validDate; @ApiModelProperty(value = "仿¬¾æ¹å¼") private String paymentMethod; @ApiModelProperty(value = "äº¤è´§å¨æå¤©æ°") private String deliveryPeriod; @ApiModelProperty(value = "ç¶æ") private String status; @ApiModelProperty(value = "æ¥ä»·æ»éé¢") private Double totalAmount; @ApiModelProperty(value = "夿³¨") private String remark; @ApiModelProperty(value = "å建æ¶é´") @TableField(fill = FieldFill.INSERT) private LocalDateTime createTime; @ApiModelProperty(value = "ä¿®æ¹æ¶é´") @TableField(fill = FieldFill.INSERT_UPDATE) private LocalDateTime updateTime; @ApiModelProperty(value = "åå»ºç¨æ·") @TableField(fill = FieldFill.INSERT) private Integer createUser; @ApiModelProperty(value = "ä¿®æ¹ç¨æ·") @TableField(fill = FieldFill.INSERT_UPDATE) private Integer updateUser; @ApiModelProperty(value = "ç§æ·ID") @TableField(fill = FieldFill.INSERT) private Long tenantId; } src/main/java/com/ruoyi/sales/pojo/SalesQuotationProduct.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,49 @@ package com.ruoyi.sales.pojo; import com.baomidou.mybatisplus.annotation.*; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.time.LocalDateTime; @Data @TableName("sales_quotation_product") public class SalesQuotationProduct { @ApiModelProperty(value = "æ¥ä»·ååID") @TableId(value = "id", type = IdType.AUTO) private Long id; @ApiModelProperty(value = "é宿¥ä»·åid") private Long salesQuotationId; @ApiModelProperty(value = "åååç§°") private String product; @ApiModelProperty(value = "ååè§æ ¼") private String specification; @ApiModelProperty(value = "åä½") private String unit; @ApiModelProperty(value = "åä»·") private Double unitPrice; @ApiModelProperty(value = "æ°é") private Integer quantity; @ApiModelProperty(value = "éé¢") private Double amount; @ApiModelProperty(value = "å建æ¶é´") @TableField(fill = FieldFill.INSERT) private LocalDateTime createTime; @ApiModelProperty(value = "ä¿®æ¹æ¶é´") @TableField(fill = FieldFill.INSERT_UPDATE) private LocalDateTime updateTime; @ApiModelProperty(value = "åå»ºç¨æ·") @TableField(fill = FieldFill.INSERT) private Integer createUser; @ApiModelProperty(value = "ä¿®æ¹ç¨æ·") @TableField(fill = FieldFill.INSERT_UPDATE) private Integer updateUser; @ApiModelProperty(value = "ç§æ·ID") @TableField(fill = FieldFill.INSERT) private Long tenantId; } src/main/java/com/ruoyi/sales/service/SalesQuotationProductService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,8 @@ package com.ruoyi.sales.service; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.sales.pojo.SalesQuotationProduct; public interface SalesQuotationProductService extends IService<SalesQuotationProduct> { } src/main/java/com/ruoyi/sales/service/SalesQuotationService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,17 @@ package com.ruoyi.sales.service; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.sales.dto.SalesQuotationDto; import com.ruoyi.sales.pojo.SalesQuotation; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; public interface SalesQuotationService extends IService<SalesQuotation> { IPage listPage(Page page, SalesQuotationDto salesQuotationDto); boolean add(SalesQuotationDto salesQuotationDto); boolean delete(Long id); boolean edit(SalesQuotationDto salesQuotationDto); } src/main/java/com/ruoyi/sales/service/impl/SalesQuotationProductServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,11 @@ package com.ruoyi.sales.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.sales.mapper.SalesQuotationProductMapper; import com.ruoyi.sales.pojo.SalesQuotationProduct; import com.ruoyi.sales.service.SalesQuotationProductService; import org.springframework.stereotype.Service; @Service public class SalesQuotationProductServiceImpl extends ServiceImpl<SalesQuotationProductMapper, SalesQuotationProduct> implements SalesQuotationProductService { } src/main/java/com/ruoyi/sales/service/impl/SalesQuotationServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,96 @@ package com.ruoyi.sales.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.utils.bean.BeanUtils; import com.ruoyi.sales.dto.SalesQuotationDto; import com.ruoyi.sales.mapper.SalesQuotationMapper; import com.ruoyi.sales.mapper.SalesQuotationProductMapper; import com.ruoyi.sales.pojo.SalesQuotation; import com.ruoyi.sales.pojo.SalesQuotationProduct; import com.ruoyi.sales.service.SalesQuotationProductService; import com.ruoyi.sales.service.SalesQuotationService; import org.springframework.beans.factory.annotation.Autowired; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.List; import java.util.stream.Collectors; @Service @Transactional(rollbackFor = Exception.class) public class SalesQuotationServiceImpl extends ServiceImpl<SalesQuotationMapper, SalesQuotation> implements SalesQuotationService { @Autowired private SalesQuotationMapper salesQuotationMapper; @Autowired private SalesQuotationProductMapper salesQuotationProductMapper; @Autowired private SalesQuotationProductService salesQuotationProductService; @Override public IPage<SalesQuotationDto> listPage(Page page, SalesQuotationDto salesQuotationDto) { IPage<SalesQuotationDto> salesQuotationDtoIPage = salesQuotationMapper.listPage(page, salesQuotationDto); if(CollectionUtils.isEmpty(salesQuotationDtoIPage.getRecords())){ return salesQuotationDtoIPage; } salesQuotationDtoIPage.getRecords().forEach(record -> { List<SalesQuotationProduct> products = salesQuotationProductMapper.selectBySalesQuotationId(record.getId()); record.setProducts(products); }); return salesQuotationDtoIPage; } @Override public boolean add(SalesQuotationDto salesQuotationDto) { SalesQuotation salesQuotation = new SalesQuotation(); BeanUtils.copyProperties(salesQuotationDto, salesQuotation); String quotationNo = salesQuotation.getQuotationNo(); salesQuotationMapper.insert(salesQuotation); // if(salesQuotationMapper.insert(salesQuotation)!=1){ // return false; // } if(CollectionUtils.isEmpty(salesQuotationDto.getProducts())){ return true; } List<SalesQuotationProduct> products = salesQuotationDto.getProducts().stream().map(product -> { SalesQuotationProduct salesQuotationProduct = new SalesQuotationProduct(); BeanUtils.copyProperties(product, salesQuotationProduct); salesQuotationProduct.setSalesQuotationId(salesQuotationMapper.selectOne(new LambdaQueryWrapper<SalesQuotation>().eq(SalesQuotation::getQuotationNo, quotationNo)).getId()); return salesQuotationProduct; }).collect(Collectors.toList()); salesQuotationProductService.saveBatch(products); return true; } @Override public boolean edit(SalesQuotationDto salesQuotationDto) { SalesQuotation salesQuotation = new SalesQuotation(); BeanUtils.copyProperties(salesQuotationDto, salesQuotation); if(salesQuotationMapper.updateById(salesQuotation)!=1){ return false; } salesQuotationProductMapper.delete(new LambdaQueryWrapper<SalesQuotationProduct>().eq(SalesQuotationProduct::getSalesQuotationId, salesQuotationDto.getId())); if(CollectionUtils.isEmpty(salesQuotationDto.getProducts())){ return true; } List<SalesQuotationProduct> products = salesQuotationDto.getProducts().stream().map(product -> { SalesQuotationProduct salesQuotationProduct = new SalesQuotationProduct(); BeanUtils.copyProperties(product, salesQuotationProduct); salesQuotationProduct.setSalesQuotationId(salesQuotation.getId()); return salesQuotationProduct; }).collect(Collectors.toList()); salesQuotationProductService.saveBatch(products); return true; } @Override public boolean delete(Long id) { salesQuotationMapper.deleteById(id); salesQuotationProductMapper.delete(new LambdaQueryWrapper<SalesQuotationProduct>().eq(SalesQuotationProduct::getSalesQuotationId, id)); return true; } } src/main/resources/mapper/sales/SalesQuotationMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,19 @@ <?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.sales.mapper.SalesQuotationMapper"> <select id="listPage" resultType="com.ruoyi.sales.dto.SalesQuotationDto"> SELECT * FROM sales_quotation WHERE 1=1 <if test="salesQuotationDto.quotationNo != null and salesQuotationDto.quotationNo != '' "> AND quotation_no LIKE CONCAT('%',#{salesQuotationDto.quotationNo},'%') </if> <if test="salesQuotationDto.customer != null and salesQuotationDto.customer != '' "> AND customer = #{salesQuotationDto.customer} </if> <if test="salesQuotationDto.status != null and salesQuotationDto.status != '' "> AND status = #{salesQuotationDto.status} </if> </select> </mapper> src/main/resources/mapper/sales/SalesQuotationProductMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,15 @@ <?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.sales.mapper.SalesQuotationProductMapper"> <!-- <select id="selectBySalesQuotationIds" resultType="com.ruoyi.sales.pojo.SalesQuotationProduct">--> <!-- select * from sales_quotation_product where sales_quotation_id in--> <!-- <foreach collection="salesQuotationIds" item="salesQuotationId" open="(" close=")" separator=",">--> <!-- #{salesQuotationId}--> <!-- </foreach>--> <!-- </select>--> <select id="selectBySalesQuotationId" resultType="com.ruoyi.sales.pojo.SalesQuotationProduct"> select * from sales_quotation_product where sales_quotation_id = #{id} </select> </mapper>