src/main/java/com/ruoyi/aftersalesservice/controller/AfterSalesServiceController.java
@@ -2,19 +2,19 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.aftersalesservice.dto.AfterSalesServiceDto; import com.ruoyi.aftersalesservice.dto.AfterSalesServiceExeclDto; import com.ruoyi.aftersalesservice.dto.AfterSalesServiceNewDto; import com.ruoyi.aftersalesservice.pojo.AfterSalesService; import com.ruoyi.aftersalesservice.service.AfterSalesServiceService; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.equipmentenergyconsumption.pojo.EquipmentEnergyConsumption; 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.project.system.domain.SysUser; import com.ruoyi.project.system.mapper.SysUserMapper; import com.ruoyi.purchase.dto.VatDto; import com.ruoyi.sales.dto.SalesLedgerDto; import com.ruoyi.sales.service.ISalesLedgerService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.BeanUtils; @@ -25,6 +25,7 @@ import javax.servlet.http.HttpServletResponse; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; /** * @author :yys @@ -42,6 +43,9 @@ @Autowired private SysUserMapper sysUserMapper; @Autowired private ISalesLedgerService salesLedgerService; @GetMapping("/listPage") @ApiOperation("å®åæå¡-å页æ¥è¯¢") @Log(title = "å®åæå¡-å页æ¥è¯¢", businessType = BusinessType.OTHER) @@ -57,14 +61,14 @@ Page page = new Page(-1,-1); AfterSalesService afterSalesService = new AfterSalesService(); IPage<AfterSalesService> listPage = afterSalesServiceService.listPage(page, afterSalesService); List<AfterSalesServiceDto> list = new ArrayList<>(); List<AfterSalesServiceExeclDto> list = new ArrayList<>(); listPage.getRecords().forEach(item -> { AfterSalesServiceDto dto = new AfterSalesServiceDto(); AfterSalesServiceExeclDto dto = new AfterSalesServiceExeclDto(); BeanUtils.copyProperties(item, dto); dto.setStatusName(item.getStatus().toString()); list.add(dto); }); ExcelUtil<AfterSalesServiceDto> util = new ExcelUtil<AfterSalesServiceDto>(AfterSalesServiceDto.class); ExcelUtil<AfterSalesServiceExeclDto> util = new ExcelUtil<AfterSalesServiceExeclDto>(AfterSalesServiceExeclDto.class); util.exportExcel(response, list , "åé¦ç»è®°"); } @@ -85,20 +89,21 @@ @PostMapping("/add") @ApiOperation("å®åæå¡-æ°å¢") @Log(title = "å®åæå¡-æ°å¢", businessType = BusinessType.INSERT) public AjaxResult add(@RequestBody AfterSalesService afterSalesService) { afterSalesService.setStatus(1); SysUser sysUser = sysUserMapper.selectUserById(afterSalesService.getCheckUserId()); if(sysUser == null) throw new RuntimeException("å®¡æ ¸äººä¸åå¨"); afterSalesService.setCheckNickName(sysUser.getNickName()); boolean save = afterSalesServiceService.save(afterSalesService); return save ? AjaxResult.success() : AjaxResult.error(); public AjaxResult add(@RequestBody AfterSalesServiceNewDto afterSalesServiceNewDto) { return afterSalesServiceService.addAfterSalesServiceDto(afterSalesServiceNewDto) ? AjaxResult.success() : AjaxResult.error(); } @PostMapping("/update") @ApiOperation("å®åæå¡-ä¿®æ¹") @Log(title = "å®åæå¡-ä¿®æ¹", businessType = BusinessType.UPDATE) public AjaxResult update(@RequestBody AfterSalesService afterSalesService) { boolean update = afterSalesServiceService.updateById(afterSalesService); public AjaxResult update(@RequestBody AfterSalesServiceNewDto afterSalesServiceNewDto) { if (afterSalesServiceNewDto.getProductModelIdList() != null && afterSalesServiceNewDto.getProductModelIdList().isEmpty() ) { String productModelIds = afterSalesServiceNewDto.getProductModelIdList().stream() .map(String::valueOf) .collect(Collectors.joining(",")); afterSalesServiceNewDto.setProductModelIds(productModelIds); } boolean update = afterSalesServiceService.updateById(afterSalesServiceNewDto); return update ? AjaxResult.success() : AjaxResult.error(); } @@ -129,4 +134,18 @@ } @GetMapping("listSalesLedger") @ApiOperation("å®åæå¡-è·åéå®å°è´¦") public AjaxResult listSalesLedger(SalesLedgerDto salesLedgerDto, Page page) { IPage<SalesLedgerDto> list = salesLedgerService.listSalesLedger(salesLedgerDto,page); return AjaxResult.success(list); } @GetMapping("getById") @ApiOperation("å®åæå¡-æ ¹æ®idè·å详æ ") public AjaxResult getById(Long id) { return AjaxResult.success(afterSalesServiceService.getAfterSalesServiceNewDtoById(id)); } } src/main/java/com/ruoyi/aftersalesservice/dto/AfterSalesServiceExeclDto.java
ÎļþÃû´Ó src/main/java/com/ruoyi/aftersalesservice/dto/AfterSalesServiceDto.java ÐÞ¸Ä @@ -1,14 +1,11 @@ package com.ruoyi.aftersalesservice.dto; import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.TableField; import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.framework.aspectj.lang.annotation.Excel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; import java.time.LocalDateTime; import java.util.Date; /** @@ -16,7 +13,7 @@ * @date : 2025/11/3 11:14 */ @Data public class AfterSalesServiceDto { public class AfterSalesServiceExeclDto { /** * ç¶æ 1-å¾ å¤ç 2-å·²å¤ç src/main/java/com/ruoyi/aftersalesservice/dto/AfterSalesServiceNewDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,19 @@ package com.ruoyi.aftersalesservice.dto; import com.baomidou.mybatisplus.annotation.TableField; import com.ruoyi.aftersalesservice.pojo.AfterSalesService; import com.ruoyi.sales.dto.SalesLedgerDto; import com.ruoyi.sales.pojo.SalesLedgerProduct; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; @Data public class AfterSalesServiceNewDto extends AfterSalesService { @ApiModelProperty("产ååå·IDæ°ç»") private List<Long> productModelIdList; private SalesLedgerDto salesLedgerDto; } src/main/java/com/ruoyi/aftersalesservice/pojo/AfterSalesService.java
@@ -138,5 +138,22 @@ private String deptName; @TableField("å®åç±»å") private String serviceType; @TableField("ç´§æ¥ç¨åº¦") private String urgency; @TableField("éå®å°è´¦ID") private Long salesLedgerId; @TableField("åé 人ID") private Long distributionUserId; @TableField("产ååå·IDs") private String productModelIds; } src/main/java/com/ruoyi/aftersalesservice/service/AfterSalesServiceService.java
@@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.aftersalesservice.dto.AfterSalesServiceNewDto; import com.ruoyi.aftersalesservice.pojo.AfterSalesService; /** @@ -19,4 +20,8 @@ * @return */ IPage<AfterSalesService> listPage(Page page, AfterSalesService afterSalesService); boolean addAfterSalesServiceDto(AfterSalesServiceNewDto afterSalesServiceNewDto); AfterSalesServiceNewDto getAfterSalesServiceNewDtoById(Long id); } src/main/java/com/ruoyi/aftersalesservice/service/impl/AfterSalesServiceServiceImpl.java
@@ -1,17 +1,34 @@ package com.ruoyi.aftersalesservice.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.aftersalesservice.dto.AfterSalesServiceNewDto; import com.ruoyi.aftersalesservice.mapper.AfterSalesServiceMapper; import com.ruoyi.aftersalesservice.pojo.AfterSalesService; import com.ruoyi.aftersalesservice.service.AfterSalesServiceService; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.project.system.domain.SysDept; import com.ruoyi.project.system.domain.SysUser; import com.ruoyi.project.system.mapper.SysDeptMapper; import com.ruoyi.project.system.mapper.SysUserMapper; import com.ruoyi.sales.dto.SalesLedgerDto; import com.ruoyi.sales.pojo.SalesLedger; import com.ruoyi.sales.pojo.SalesLedgerProduct; import com.ruoyi.sales.service.ISalesLedgerProductService; import com.ruoyi.sales.service.ISalesLedgerService; import com.ruoyi.sales.service.impl.SalesLedgerProductServiceImpl; import com.ruoyi.sales.service.impl.SalesLedgerServiceImpl; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; /** * @author :yys @@ -27,6 +44,13 @@ @Autowired private SysDeptMapper sysDeptMapper; @Autowired private SysUserMapper sysUserMapper; @Autowired private ISalesLedgerProductService salesLedgerProductService; @Autowired private ISalesLedgerService salesLedgerService; @Override public IPage<AfterSalesService> listPage(Page page, AfterSalesService afterSalesService) { Long tenantId = SecurityUtils.getLoginUser().getTenantId(); @@ -37,4 +61,34 @@ }); return afterSalesServiceIPage; } @Override public boolean addAfterSalesServiceDto(AfterSalesServiceNewDto afterSalesServiceNewDto) { afterSalesServiceNewDto.setStatus(1); if (afterSalesServiceNewDto.getProductModelIdList() != null && afterSalesServiceNewDto.getProductModelIdList().isEmpty() ) { String productModelIds = afterSalesServiceNewDto.getProductModelIdList().stream() .map(String::valueOf) .collect(Collectors.joining(",")); afterSalesServiceNewDto.setProductModelIds(productModelIds); } SysUser sysUser = sysUserMapper.selectUserById(afterSalesServiceNewDto.getCheckUserId()); if(sysUser == null) throw new RuntimeException("å®¡æ ¸äººä¸åå¨"); afterSalesServiceNewDto.setCheckNickName(sysUser.getNickName()); return this.save(afterSalesServiceNewDto); } @Override public AfterSalesServiceNewDto getAfterSalesServiceNewDtoById(Long id) { AfterSalesService afterSalesService = afterSalesServiceMapper.selectById(id); SalesLedger byId = salesLedgerService.getById(afterSalesService.getSalesLedgerId()); List<Long> collect = Arrays.stream(afterSalesService.getProductModelIds().split(",")).map(Long::valueOf).collect(Collectors.toList()); List<SalesLedgerProduct> list = salesLedgerProductService.list(new QueryWrapper<SalesLedgerProduct>().lambda().in(SalesLedgerProduct::getProductModelId, collect)); AfterSalesServiceNewDto afterSalesServiceNewDto = new AfterSalesServiceNewDto(); BeanUtils.copyProperties(afterSalesService, afterSalesServiceNewDto); SalesLedgerDto salesLedgerDto = new SalesLedgerDto(); BeanUtils.copyProperties(byId, salesLedgerDto); salesLedgerDto.setProductData( list); afterSalesServiceNewDto.setSalesLedgerDto(salesLedgerDto); return afterSalesServiceNewDto; } } src/main/java/com/ruoyi/sales/controller/SalesQuotationController.java
@@ -1,26 +1,15 @@ package com.ruoyi.sales.controller; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.ruoyi.aftersalesservice.dto.AfterSalesServiceDto; import com.ruoyi.aftersalesservice.pojo.AfterSalesService; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.framework.aspectj.lang.annotation.Log; import com.ruoyi.framework.aspectj.lang.enums.BusinessType; import com.ruoyi.framework.web.domain.AjaxResult; import com.ruoyi.sales.dto.SalesQuotationDto; import com.ruoyi.sales.pojo.SalesQuotation; import com.ruoyi.sales.service.SalesQuotationService; import io.swagger.annotations.ApiOperation; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; import java.util.ArrayList; import java.util.List; @RestController @RequestMapping("/sales/quotation") src/main/java/com/ruoyi/sales/dto/ShippingInfoDto.java
@@ -29,4 +29,8 @@ @TableField(exist = false) private List<CommonFile> commonFileList; private String specificationModel; private String productName; } src/main/java/com/ruoyi/sales/mapper/SalesLedgerMapper.java
@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.support.SFunction; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.aftersalesservice.pojo.AfterSalesService; import com.ruoyi.home.dto.IncomeExpenseAnalysisDto; import com.ruoyi.sales.dto.SalesLedgerDto; import com.ruoyi.sales.dto.SalesTrendDto; @@ -83,4 +84,6 @@ "ORDER BY month" + "</script>") List<SalesTrendDto> statisticsTable(@Param("statisticsTableDto")StatisticsTableDto statisticsTableDto); IPage<SalesLedgerDto> listSalesLedger(Page page,@Param("ew") SalesLedgerDto salesLedgerDto); } src/main/java/com/ruoyi/sales/service/ISalesLedgerService.java
@@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.aftersalesservice.pojo.AfterSalesService; import com.ruoyi.framework.web.domain.AjaxResult; import com.ruoyi.sales.dto.LossProductModelDto; import com.ruoyi.sales.dto.MonthlyAmountDto; @@ -43,4 +44,5 @@ List<LossProductModelDto> getSalesLedgerWithProductsLoss(Long salesLedgerId); IPage<SalesLedgerDto> listSalesLedger(SalesLedgerDto salesLedgerDto, Page page); } src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
@@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.account.service.AccountIncomeService; import com.ruoyi.aftersalesservice.pojo.AfterSalesService; import com.ruoyi.basic.mapper.CustomerMapper; import com.ruoyi.basic.mapper.ProductMapper; import com.ruoyi.basic.mapper.ProductModelMapper; @@ -452,6 +453,40 @@ return lossProductModelDtos; } @Override public IPage<SalesLedgerDto> listSalesLedger(SalesLedgerDto salesLedgerDto, Page page) { IPage<SalesLedgerDto> salesLedgerDtoIPage = salesLedgerMapper.listSalesLedger(page, salesLedgerDto); for (SalesLedgerDto salesLedger : salesLedgerDtoIPage.getRecords()) { LambdaQueryWrapper<SalesLedgerProduct> productWrapper = new LambdaQueryWrapper<>(); productWrapper.eq(SalesLedgerProduct::getSalesLedgerId, salesLedger.getId()); productWrapper.eq(SalesLedgerProduct::getType, 1); List<SalesLedgerProduct> products = salesLedgerProductMapper.selectList(productWrapper); for (SalesLedgerProduct product : products) { product.setOriginalNoInvoiceNum(product.getNoInvoiceNum()); // æä¾ä¸´æ¶æªå¼ç¥¨æ°ï¼æªå¼ç¥¨éé¢ä¾åæ®µè®¡ç® product.setTempnoInvoiceAmount(product.getNoInvoiceAmount()); product.setTempNoInvoiceNum(product.getNoInvoiceNum()); product.setRegister(SecurityUtils.getLoginUser().getUser().getNickName()); product.setRegisterDate(LocalDateTime.now()); // åè´§ä¿¡æ¯ ShippingInfo shippingInfo = shippingInfoMapper.selectOne(new LambdaQueryWrapper<ShippingInfo>() .eq(ShippingInfo::getSalesLedgerProductId, product.getId()) .orderByDesc(ShippingInfo::getCreateTime) .last("limit 1")); if (shippingInfo != null) { product.setShippingStatus(shippingInfo.getStatus()); } } if (!products.isEmpty()) { salesLedger.setHasChildren(true); salesLedger.setProductData(products); } } return salesLedgerDtoIPage; } // å é¨ç±»ç¨äºåå¨èåç»æ private static class GroupedCustomer { src/main/resources/application-dev.yml
@@ -28,7 +28,7 @@ # å¼åç¯å¢é ç½® server: # æå¡å¨çHTTP端å£ï¼é»è®¤ä¸º8080 port: 7003 port: 7008 servlet: # åºç¨ç访é®è·¯å¾ context-path: / @@ -74,9 +74,9 @@ druid: # ä¸»åºæ°æ®æº master: url: jdbc:mysql://localhost:3306/product-inventory-management-new?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 url: jdbc:mysql://1.15.17.182:9999/product-inventory-management-new?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 username: root password: 123456 password: xd@123456.. # ä»åºæ°æ®æº slave: # 仿°æ®æºå¼å ³/é»è®¤å ³é @@ -154,7 +154,7 @@ database: 0 # å¯ç # password: root2022! password: password: 123456 # è¿æ¥è¶ æ¶æ¶é´ timeout: 10s src/main/resources/mapper/sales/SalesLedgerMapper.xml
@@ -111,4 +111,14 @@ FROM sales_ledger GROUP BY customer_name </select> <select id="listSalesLedger" resultType="com.ruoyi.sales.dto.SalesLedgerDto"> select * from sales_ledger sl <where> <if test="ew.customerName != null and ew.customerName != '' "> and sl.customer_name like concat('%',#{ew.customerName},'%') </if> </where> </select> </mapper> src/main/resources/mapper/sales/ShippingInfoMapper.xml
@@ -19,9 +19,14 @@ s.update_user, s.tenant_id, sl.sales_contract_no, slp.specification_model, p.product_name, sl.customer_name FROM shipping_info s LEFT JOIN sales_ledger sl ON s.sales_ledger_id = sl.id LEFT JOIN sales_ledger_product slp ON s.sales_ledger_product_id = slp.id left join product_model pm on slp.product_model_id = pm.id left join product p on pm.product_id = p.id WHERE 1=1 <if test="req.salesContractNo != null and req.salesContractNo != ''"> AND sl.sales_contract_no LIKE CONCAT('%',#{req.salesContractNo},'%')