From 366b67926809852c1090f14c5a24fe00109a81b5 Mon Sep 17 00:00:00 2001 From: maven <2163098428@qq.com> Date: 星期一, 28 七月 2025 17:59:52 +0800 Subject: [PATCH] yys 首页接口开发 --- src/main/java/com/ruoyi/home/dto/HomeBusinessDto.java | 35 ++ src/main/java/com/ruoyi/home/dto/StatisticsReceivablePayableDto.java | 29 ++ src/main/java/com/ruoyi/approve/pojo/ApproveProcess.java | 9 src/main/java/com/ruoyi/home/controller/HomeController.java | 80 ++++++ src/main/java/com/ruoyi/home/dto/QualityStatisticsItem.java | 28 ++ src/main/java/com/ruoyi/sales/service/ISalesLedgerService.java | 2 src/main/java/com/ruoyi/dto/MapDto.java | 26 ++ src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java | 368 ++++++++++++++++++++++++++++ src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java | 4 src/main/java/com/ruoyi/home/dto/QualityStatisticsDto.java | 29 ++ src/main/java/com/ruoyi/home/service/HomeService.java | 28 ++ src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java | 92 ++++-- src/main/java/com/ruoyi/home/dto/AnalysisCustomerContractAmountsDto.java | 32 ++ 13 files changed, 725 insertions(+), 37 deletions(-) diff --git a/src/main/java/com/ruoyi/approve/pojo/ApproveProcess.java b/src/main/java/com/ruoyi/approve/pojo/ApproveProcess.java index 8ede335..02e9f45 100644 --- a/src/main/java/com/ruoyi/approve/pojo/ApproveProcess.java +++ b/src/main/java/com/ruoyi/approve/pojo/ApproveProcess.java @@ -6,6 +6,8 @@ import com.baomidou.mybatisplus.annotation.*; import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** @@ -14,6 +16,7 @@ */ @Data @TableName("approve_process") +@ApiModel public class ApproveProcess{ /** * @@ -24,6 +27,7 @@ /** * 娴佺▼缂栧彿 */ + @ApiModelProperty(value = "娴佺▼缂栧彿") private String approveId; /** @@ -44,6 +48,7 @@ /** * 鐢宠閮ㄩ棬鍚嶇О */ + @ApiModelProperty(value = "鐢宠閮ㄩ棬鍚嶇О") private String approveDeptName; /** @@ -59,6 +64,7 @@ /** * 鐢宠鍘熷洜 */ + @ApiModelProperty(value = "鐢宠鍘熷洜") private String approveReason; /** @@ -75,6 +81,7 @@ * 鐢宠鏃ユ湡 */ @JsonFormat(pattern = "yyyy-MM-dd") + @ApiModelProperty(value = "鐢宠鏃ユ湡") private Date approveTime; /** @@ -86,6 +93,7 @@ /** * 瀹℃壒鐘舵�侊細0寰呭鏍革紝1瀹℃牳涓紝2瀹℃牳瀹屾垚 3瀹℃牳鏈�氳繃 4宸查噸鏂版彁浜� */ + @ApiModelProperty(value = "瀹℃壒鐘舵�侊細0寰呭鏍革紝1瀹℃牳涓紝2瀹℃牳瀹屾垚 3瀹℃牳鏈�氳繃 4宸查噸鏂版彁浜�") private Integer approveStatus; /** @@ -107,6 +115,7 @@ /** * 瀹℃壒澶囨敞 */ + @ApiModelProperty(value = "瀹℃壒澶囨敞") private String approveRemark; /** diff --git a/src/main/java/com/ruoyi/dto/MapDto.java b/src/main/java/com/ruoyi/dto/MapDto.java new file mode 100644 index 0000000..f6822a5 --- /dev/null +++ b/src/main/java/com/ruoyi/dto/MapDto.java @@ -0,0 +1,26 @@ +package com.ruoyi.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; + +/** + * @author :yys + * @date : 2025/7/25 10:37 + */ +@Data +@ApiModel +public class MapDto { + + @ApiModelProperty(value = "鍚嶇О") + private String name; + + @ApiModelProperty(value = "鏁伴噺") + private BigDecimal value; + + @ApiModelProperty(value = "鍗犳瘮") + private String rate; + +} diff --git a/src/main/java/com/ruoyi/home/controller/HomeController.java b/src/main/java/com/ruoyi/home/controller/HomeController.java new file mode 100644 index 0000000..137b4b8 --- /dev/null +++ b/src/main/java/com/ruoyi/home/controller/HomeController.java @@ -0,0 +1,80 @@ +package com.ruoyi.home.controller; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.approve.pojo.ApproveProcess; +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.home.dto.AnalysisCustomerContractAmountsDto; +import com.ruoyi.home.dto.HomeBusinessDto; +import com.ruoyi.home.dto.QualityStatisticsDto; +import com.ruoyi.home.dto.StatisticsReceivablePayableDto; +import com.ruoyi.home.service.HomeService; +import com.ruoyi.production.dto.SalesLedgerWorkDto; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * @author :yys + * @date : 2025/7/25 9:15 + */ +@RestController +@Api(tags = "棣栭〉缁熻") +@RequestMapping("/home") +public class HomeController extends BaseController { + + @Autowired + private HomeService homeService; + + @GetMapping("/business") + @Log(title = "閿�鍞�-閲囪喘-搴撳瓨鏁版嵁", businessType = BusinessType.OTHER) + @ApiOperation("閿�鍞�-閲囪喘-搴撳瓨鏁版嵁") + public AjaxResult business(HomeBusinessDto req) { + HomeBusinessDto homeBusinessDto = homeService.business(); + return AjaxResult.success(homeBusinessDto); + } + + + @GetMapping("/analysisCustomerContractAmounts") + @Log(title = "瀹㈡埛鍚堝悓閲戦鍒嗘瀽", businessType = BusinessType.OTHER) + @ApiOperation("瀹㈡埛鍚堝悓閲戦鍒嗘瀽") + public AjaxResult analysisCustomerContractAmounts(AnalysisCustomerContractAmountsDto req) { + AnalysisCustomerContractAmountsDto analysisCustomerContractAmounts = homeService.analysisCustomerContractAmounts(); + return AjaxResult.success(analysisCustomerContractAmounts); + } + + @GetMapping("/qualityStatistics") + @Log(title = "璐ㄩ噺鍒嗘瀽", businessType = BusinessType.OTHER) + @ApiOperation("璐ㄩ噺鍒嗘瀽") + public AjaxResult qualityStatistics(QualityStatisticsDto req) { + QualityStatisticsDto qualityStatisticsDto = homeService.qualityStatistics(); + return AjaxResult.success(qualityStatisticsDto); + } + + @GetMapping("/todos") + @Log(title = "寰呭姙浜嬮」", businessType = BusinessType.OTHER) + @ApiOperation("寰呭姙浜嬮」") + public AjaxResult todos(ApproveProcess req) { + List<ApproveProcess> approveProcessList = homeService.todos(); + return AjaxResult.success(approveProcessList); + } + + @GetMapping("/statisticsReceivablePayable") + @Log(title = "搴旀敹搴斾粯缁熻", businessType = BusinessType.OTHER) + @ApiOperation("搴旀敹搴斾粯缁熻") + public AjaxResult statisticsReceivablePayable(StatisticsReceivablePayableDto req, @RequestParam(value = "type", defaultValue = "1") Integer type ) { + StatisticsReceivablePayableDto statisticsReceivablePayable = homeService.statisticsReceivablePayable(type); + return AjaxResult.success(statisticsReceivablePayable); + } + + +} diff --git a/src/main/java/com/ruoyi/home/dto/AnalysisCustomerContractAmountsDto.java b/src/main/java/com/ruoyi/home/dto/AnalysisCustomerContractAmountsDto.java new file mode 100644 index 0000000..4801705 --- /dev/null +++ b/src/main/java/com/ruoyi/home/dto/AnalysisCustomerContractAmountsDto.java @@ -0,0 +1,32 @@ +package com.ruoyi.home.dto; + +import com.ruoyi.dto.MapDto; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.List; + +/** + * @author :yys + * @date : 2025/7/25 10:31 + */ +@Data +@ApiModel +public class AnalysisCustomerContractAmountsDto { + + @ApiModelProperty(value = "鍚堝悓鎬婚噾棰�") + private BigDecimal sum; + + @ApiModelProperty(value = "鏃ョ幆姣�") + private String chain; + + @ApiModelProperty(value = "鍛ㄥ悓姣�") + private String yny; + + private List<MapDto> item; + + + +} diff --git a/src/main/java/com/ruoyi/home/dto/HomeBusinessDto.java b/src/main/java/com/ruoyi/home/dto/HomeBusinessDto.java new file mode 100644 index 0000000..9acd9c6 --- /dev/null +++ b/src/main/java/com/ruoyi/home/dto/HomeBusinessDto.java @@ -0,0 +1,35 @@ +package com.ruoyi.home.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; + +/** + * @author :yys + * @date : 2025/7/25 9:25 + */ +@Data +@ApiModel +public class HomeBusinessDto { + + @ApiModelProperty("鏈湀閿�鍞噾棰�") + private BigDecimal monthSaleMoney; + + @ApiModelProperty("鏈湀閿�鍞湭寮�绁ㄩ噾棰�") + private BigDecimal monthSaleHaveMoney; + + @ApiModelProperty("鏈湀閲囪喘閲戦") + private BigDecimal monthPurchaseMoney; + + @ApiModelProperty("鏈湀閲囪喘鏈紑绁ㄩ噾棰�") + private BigDecimal monthPurchaseHaveMoney; + + @ApiModelProperty("褰撳墠搴撳瓨鏁伴噺") + private BigDecimal inventoryNum; + + @ApiModelProperty("浠婃棩搴撳瓨鏁伴噺") + private BigDecimal todayInventoryNum; + +} diff --git a/src/main/java/com/ruoyi/home/dto/QualityStatisticsDto.java b/src/main/java/com/ruoyi/home/dto/QualityStatisticsDto.java new file mode 100644 index 0000000..970449a --- /dev/null +++ b/src/main/java/com/ruoyi/home/dto/QualityStatisticsDto.java @@ -0,0 +1,29 @@ +package com.ruoyi.home.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.List; + +/** + * @author :yys + * @date : 2025/7/25 11:22 + */ +@Data +@ApiModel +public class QualityStatisticsDto { + + @ApiModelProperty(value = "鍘熸潗鏂欏凡妫�娴嬫暟") + private BigDecimal supplierNum; + + @ApiModelProperty(value = "鍑哄巶宸叉娴嬫暟") + private BigDecimal factoryNum; + + @ApiModelProperty(value = "杩囩▼宸叉娴嬫暟") + private BigDecimal processNum; + + private List<QualityStatisticsItem> item; + +} diff --git a/src/main/java/com/ruoyi/home/dto/QualityStatisticsItem.java b/src/main/java/com/ruoyi/home/dto/QualityStatisticsItem.java new file mode 100644 index 0000000..38ca74a --- /dev/null +++ b/src/main/java/com/ruoyi/home/dto/QualityStatisticsItem.java @@ -0,0 +1,28 @@ +package com.ruoyi.home.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; + +/** + * @author :yys + * @date : 2025/7/25 11:27 + */ +@Data +@ApiModel +public class QualityStatisticsItem { + + @ApiModelProperty(value = "鍘熸潗鏂欎笉鍚堟牸鏁�") + private BigDecimal supplierNum; + + @ApiModelProperty(value = "鍑哄巶涓嶅悎鏍兼暟") + private BigDecimal factoryNum; + + @ApiModelProperty(value = "杩囩▼涓嶅悎鏍兼暟") + private BigDecimal processNum; + + private String date; + +} diff --git a/src/main/java/com/ruoyi/home/dto/StatisticsReceivablePayableDto.java b/src/main/java/com/ruoyi/home/dto/StatisticsReceivablePayableDto.java new file mode 100644 index 0000000..c929543 --- /dev/null +++ b/src/main/java/com/ruoyi/home/dto/StatisticsReceivablePayableDto.java @@ -0,0 +1,29 @@ +package com.ruoyi.home.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; + +/** + * @author :yys + * @date : 2025/7/25 13:34 + */ +@Data +@ApiModel +public class StatisticsReceivablePayableDto { + + @ApiModelProperty("搴旀敹閲戦") + private BigDecimal receivableMoney; + + @ApiModelProperty("搴斾粯閲戦") + private BigDecimal payableMoney; + + @ApiModelProperty("棰勬敹閲戦") + private BigDecimal advanceMoney; + + @ApiModelProperty("棰勪粯閲戦") + private BigDecimal prepayMoney; + +} diff --git a/src/main/java/com/ruoyi/home/service/HomeService.java b/src/main/java/com/ruoyi/home/service/HomeService.java new file mode 100644 index 0000000..49e7530 --- /dev/null +++ b/src/main/java/com/ruoyi/home/service/HomeService.java @@ -0,0 +1,28 @@ +package com.ruoyi.home.service; + +import com.ruoyi.approve.pojo.ApproveProcess; +import com.ruoyi.home.dto.AnalysisCustomerContractAmountsDto; +import com.ruoyi.home.dto.HomeBusinessDto; +import com.ruoyi.home.dto.QualityStatisticsDto; +import com.ruoyi.home.dto.StatisticsReceivablePayableDto; + +import java.util.List; + +/** + * @author :yys + * @date : 2025/7/25 9:23 + */ +public interface HomeService { + + + HomeBusinessDto business(); + + + AnalysisCustomerContractAmountsDto analysisCustomerContractAmounts(); + + QualityStatisticsDto qualityStatistics(); + + List<ApproveProcess> todos(); + + StatisticsReceivablePayableDto statisticsReceivablePayable(Integer type); +} diff --git a/src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java b/src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java new file mode 100644 index 0000000..d346d41 --- /dev/null +++ b/src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java @@ -0,0 +1,368 @@ +package com.ruoyi.home.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.ruoyi.approve.mapper.ApproveProcessMapper; +import com.ruoyi.approve.pojo.ApproveProcess; +import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.dto.MapDto; +import com.ruoyi.framework.security.LoginUser; +import com.ruoyi.home.dto.*; +import com.ruoyi.home.service.HomeService; +import com.ruoyi.procurementrecord.mapper.ProcurementRecordMapper; +import com.ruoyi.procurementrecord.mapper.ProcurementRecordOutMapper; +import com.ruoyi.procurementrecord.pojo.ProcurementRecordOut; +import com.ruoyi.procurementrecord.pojo.ProcurementRecordStorage; +import com.ruoyi.project.system.domain.SysDept; +import com.ruoyi.project.system.mapper.SysDeptMapper; +import com.ruoyi.purchase.mapper.PaymentRegistrationMapper; +import com.ruoyi.purchase.mapper.PurchaseLedgerMapper; +import com.ruoyi.purchase.pojo.PaymentRegistration; +import com.ruoyi.purchase.pojo.PurchaseLedger; +import com.ruoyi.quality.mapper.QualityInspectMapper; +import com.ruoyi.quality.pojo.QualityInspect; +import com.ruoyi.sales.mapper.ReceiptPaymentMapper; +import com.ruoyi.sales.mapper.SalesLedgerMapper; +import com.ruoyi.sales.mapper.SalesLedgerProductMapper; +import com.ruoyi.sales.pojo.ReceiptPayment; +import com.ruoyi.sales.pojo.SalesLedger; +import com.ruoyi.sales.pojo.SalesLedgerProduct; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.time.*; +import java.time.temporal.TemporalAdjusters; +import java.util.*; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.stream.Collectors; + +/** + * @author :yys + * @date : 2025/7/25 9:23 + */ +@Service +@Slf4j +public class HomeServiceImpl implements HomeService { + + @Autowired + private SalesLedgerMapper salesLedgerMapper; + + @Autowired + private PurchaseLedgerMapper purchaseLedgerMapper; + + @Autowired + private SalesLedgerProductMapper salesLedgerProductMapper; + + @Autowired + private ProcurementRecordOutMapper procurementRecordOutMapper; + + @Autowired + private ProcurementRecordMapper procurementRecordStorageMapper; + + @Autowired + private QualityInspectMapper qualityStatisticsMapper; + + @Autowired + private ApproveProcessMapper approveProcessMapper; + + @Autowired + private ReceiptPaymentMapper receiptPaymentMapper; + + @Autowired + private PaymentRegistrationMapper paymentRegistrationMapper; + + @Autowired + private SysDeptMapper sysDeptMapper; + + @Override + public HomeBusinessDto business() { + LocalDate now = LocalDate.now(); + YearMonth currentMonth = YearMonth.from(now); + // 鍒涘缓LambdaQueryWrapper + LambdaQueryWrapper<SalesLedger> salesLedgerLambdaQueryWrapper = new LambdaQueryWrapper<>(); + salesLedgerLambdaQueryWrapper.ge(SalesLedger::getEntryDate, currentMonth.atDay(1).atStartOfDay()) // 澶т簬绛変簬鏈湀绗竴澶� + .lt(SalesLedger::getEntryDate, currentMonth.plusMonths(1).atDay(1).atStartOfDay()); // 灏忎簬涓嬫湀绗竴澶� + List<SalesLedger> salesLedgers = salesLedgerMapper.selectList(salesLedgerLambdaQueryWrapper); + // 鍚堣鍚堝悓閲戦 + BigDecimal contractAmount = salesLedgers.stream().map(SalesLedger::getContractAmount) + .filter(Objects::nonNull) + .reduce(BigDecimal.ZERO, BigDecimal::add); + LambdaQueryWrapper<SalesLedgerProduct> salesLedgerProductMapperLambdaQueryWrapper = new LambdaQueryWrapper<SalesLedgerProduct>(); + salesLedgerProductMapperLambdaQueryWrapper.eq(SalesLedgerProduct::getType, 1) + .in(SalesLedgerProduct::getSalesLedgerId, salesLedgers.stream().map(SalesLedger::getId).collect(Collectors.toList())); + List<SalesLedgerProduct> salesLedgerProducts = salesLedgerProductMapper.selectList(salesLedgerProductMapperLambdaQueryWrapper); + // 鏈紑绁ㄩ噾棰� + BigDecimal noInvoiceAmountTotal = salesLedgerProducts.stream().map(SalesLedgerProduct::getNoInvoiceAmount) + .filter(Objects::nonNull) + .reduce(BigDecimal.ZERO, BigDecimal::add); + + // 鍒涘缓LambdaQueryWrapper + LambdaQueryWrapper<PurchaseLedger> queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.ge(PurchaseLedger::getEntryDate, currentMonth.atDay(1).atStartOfDay()) // 澶т簬绛変簬鏈湀绗竴澶� + .lt(PurchaseLedger::getEntryDate, currentMonth.plusMonths(1).atDay(1).atStartOfDay()); // 灏忎簬涓嬫湀绗竴澶� + + // 鎵ц鏌ヨ骞惰绠楁�诲拰 + List<PurchaseLedger> purchaseLedgers = purchaseLedgerMapper.selectList(queryWrapper); + + LambdaQueryWrapper<SalesLedgerProduct> salesLedgerProductMapperLambdaQueryWrapperCopy = new LambdaQueryWrapper<SalesLedgerProduct>(); + salesLedgerProductMapperLambdaQueryWrapper.eq(SalesLedgerProduct::getType, 2) + .in(SalesLedgerProduct::getSalesLedgerId, purchaseLedgers.stream().map(PurchaseLedger::getId).collect(Collectors.toList())); + List<SalesLedgerProduct> salesLedgerProductsCopy = salesLedgerProductMapper.selectList(salesLedgerProductMapperLambdaQueryWrapperCopy); + // 鍚堣鍚堝悓閲戦 + BigDecimal receiveAmount = purchaseLedgers.stream() + .map(PurchaseLedger::getContractAmount) + .filter(Objects::nonNull) + .reduce(BigDecimal.ZERO, BigDecimal::add); + // 鏈紑绁ㄩ噾棰� + BigDecimal unReceiptPaymentAmount = salesLedgerProductsCopy.stream() + .map(SalesLedgerProduct::getNoInvoiceAmount) + .filter(Objects::nonNull) + .reduce(BigDecimal.ZERO, BigDecimal::add); + + // 缁熻搴撳瓨 + List<ProcurementRecordStorage> procurementRecordStorages = procurementRecordStorageMapper.selectList(null); + BigDecimal stockAmount = procurementRecordStorages.stream() + .map(ProcurementRecordStorage::getInboundNum) + .filter(Objects::nonNull) + .reduce(BigDecimal.ZERO, BigDecimal::add); + List<ProcurementRecordOut> procurementRecordOuts = procurementRecordOutMapper.selectList(null); + BigDecimal outboundAmount = procurementRecordOuts.stream() + .map(ProcurementRecordOut::getInboundNum) + .filter(Objects::nonNull) + .reduce(BigDecimal.ZERO, BigDecimal::add); + BigDecimal stock = stockAmount.subtract(outboundAmount); + // 鑾峰彇褰撳ぉ鍏ュ簱鏁伴噺 + LambdaQueryWrapper<ProcurementRecordStorage> procurementRecordStorageLambdaQueryWrapper = new LambdaQueryWrapper<>(); + procurementRecordStorageLambdaQueryWrapper.ge(ProcurementRecordStorage::getCreateTime, now) // 澶т簬绛変簬褰撳ぉ + .lt(ProcurementRecordStorage::getCreateTime, now.plusDays(1)); // 灏忎簬鏄庡ぉ + List<ProcurementRecordStorage> procurementRecordStorages1 = procurementRecordStorageMapper.selectList(procurementRecordStorageLambdaQueryWrapper); + BigDecimal stockAmount1 = procurementRecordStorages1.stream() + .map(ProcurementRecordStorage::getInboundNum) + .filter(Objects::nonNull) + .reduce(BigDecimal.ZERO, BigDecimal::add); + // 鏋勫缓缁撴灉 + HomeBusinessDto homeBusinessDto = new HomeBusinessDto(); + homeBusinessDto.setMonthSaleMoney(contractAmount); + homeBusinessDto.setMonthSaleHaveMoney(noInvoiceAmountTotal); + homeBusinessDto.setMonthPurchaseMoney(receiveAmount); + homeBusinessDto.setMonthPurchaseHaveMoney(unReceiptPaymentAmount); + homeBusinessDto.setInventoryNum(stock); + homeBusinessDto.setTodayInventoryNum(stockAmount1); + + return homeBusinessDto; + } + + @Override + public AnalysisCustomerContractAmountsDto analysisCustomerContractAmounts() { + List<SalesLedger> salesLedgers = salesLedgerMapper.selectList(null); + // 鍚堣鍚堝悓閲戦 + BigDecimal contractAmount = salesLedgers.stream().map(SalesLedger::getContractAmount) + .filter(Objects::nonNull) + .reduce(BigDecimal.ZERO, BigDecimal::add); + // 璁$畻鍛ㄥ悓姣� + // 鑾峰彇褰撳墠鏃堕棿 + LocalDate today = LocalDate.now(); + + // 鑾峰彇鏈懆鍛ㄤ竴 + LocalDate startOfWeek = today.with(DayOfWeek.MONDAY); + + // 鑾峰彇鏈懆鍛ㄦ棩 + LocalDate endOfWeek = today.with(DayOfWeek.SUNDAY); + List<SalesLedger> salesLedgers1 = salesLedgerMapper.selectList(new LambdaQueryWrapper<SalesLedger>() + .ge(SalesLedger::getEntryDate, startOfWeek) // 澶т簬绛変簬鏈懆鍛ㄤ竴 + .gt(SalesLedger::getEntryDate, endOfWeek)); + BigDecimal weekContractAmount = salesLedgers1.stream().map(SalesLedger::getContractAmount) + .filter(Objects::nonNull) + .reduce(BigDecimal.ZERO, BigDecimal::add); + // 鑾峰彇鍘诲勾鏈懆鏃堕棿 + LocalDate lastYearStartOfWeek = today.minusYears(1).with(DayOfWeek.MONDAY); + LocalDate lastYearEndOfWeek = today.minusYears(1).with(DayOfWeek.SUNDAY); + List<SalesLedger> salesLedgers2 = salesLedgerMapper.selectList(new LambdaQueryWrapper<SalesLedger>() + .ge(SalesLedger::getEntryDate, lastYearStartOfWeek) // 澶т簬绛変簬鍘诲勾鏈懆鍛ㄤ竴 + .gt(SalesLedger::getEntryDate, lastYearEndOfWeek)); + BigDecimal lastYearWeekContractAmount = salesLedgers2.stream().map(SalesLedger::getContractAmount) + .filter(Objects::nonNull) + .reduce(BigDecimal.ZERO, BigDecimal::add); + BigDecimal subtract = weekContractAmount.subtract(lastYearWeekContractAmount); + String weekYny = ""; + // 鍛ㄥ悓姣� + if(subtract.compareTo(BigDecimal.ZERO) == 0 || lastYearWeekContractAmount.compareTo(BigDecimal.ZERO) == 0){ + weekYny = "0.00"; + }else{ + weekYny = String.format("%.2f", subtract.divide(lastYearWeekContractAmount, 2, RoundingMode.HALF_UP).multiply(new BigDecimal("100"))); + + } + + // 璁$畻鏃ョ幆姣� + LocalDate yesterday = today.minusDays(1); + LocalDate plusDays = today.plusDays(1); + List<SalesLedger> salesLedgers3 = salesLedgerMapper.selectList(new LambdaQueryWrapper<SalesLedger>() + .ge(SalesLedger::getEntryDate, today) // 澶т簬绛変簬鏄ㄥぉ + .lt(SalesLedger::getEntryDate, plusDays)); + BigDecimal yesterdayContractAmount = salesLedgers3.stream().map(SalesLedger::getContractAmount) + .filter(Objects::nonNull) + .reduce(BigDecimal.ZERO, BigDecimal::add); + List<SalesLedger> salesLedgers4 = salesLedgerMapper.selectList(new LambdaQueryWrapper<SalesLedger>() + .ge(SalesLedger::getEntryDate, yesterday) // 澶т簬绛変簬鍘诲勾鏄ㄥぉ + .lt(SalesLedger::getEntryDate, today)); + BigDecimal lastYearYesterdayContractAmount = salesLedgers4.stream().map(SalesLedger::getContractAmount) + .filter(Objects::nonNull) + .reduce(BigDecimal.ZERO, BigDecimal::add); + BigDecimal subtract1 = yesterdayContractAmount.subtract(lastYearYesterdayContractAmount); + // 鏃ョ幆姣� + String chain = ""; + if(subtract1.compareTo(BigDecimal.ZERO) == 0 || lastYearYesterdayContractAmount.compareTo(BigDecimal.ZERO) == 0){ + chain = "0.00"; + }else{ + chain = String.format("%.2f", subtract1.divide(lastYearYesterdayContractAmount, 2, RoundingMode.HALF_UP).multiply(new BigDecimal("100"))); + } + + + AnalysisCustomerContractAmountsDto analysisCustomerContractAmountsDto = new AnalysisCustomerContractAmountsDto(); + analysisCustomerContractAmountsDto.setSum(contractAmount); + analysisCustomerContractAmountsDto.setYny(weekYny); + analysisCustomerContractAmountsDto.setChain(chain); + + Map<String, BigDecimal> collect = salesLedgers.stream().collect(Collectors.groupingBy(SalesLedger::getCustomerName, Collectors.reducing(BigDecimal.ZERO, + SalesLedger::getContractAmount, BigDecimal::add))); + List<MapDto> mapDtos = new ArrayList<>(); + collect.forEach((k,v)->{ + MapDto mapDto = new MapDto(); + mapDto.setName(k); + mapDto.setValue(v); + if(contractAmount.compareTo(new BigDecimal(0)) == 0){ + mapDto.setRate("0"); + }else{ + mapDto.setRate(String.format("%.2f", v.divide(contractAmount, 2, RoundingMode.HALF_UP).multiply(new BigDecimal("100")))); + } + mapDtos.add(mapDto); + }); + analysisCustomerContractAmountsDto.setItem(mapDtos); + return analysisCustomerContractAmountsDto; + } + + @Override + public QualityStatisticsDto qualityStatistics() { + // 鑾峰彇涓�鍛ㄦ暟鎹� + // 鑾峰彇褰撳墠鏃堕棿 + LocalDate today = LocalDate.now(); + // 鑾峰彇鏈懆鍛ㄤ竴 + LocalDate startOfWeek = today.with(DayOfWeek.MONDAY); + // 鑾峰彇鏈懆鍛ㄦ棩 + LocalDate endOfWeek = today.with(DayOfWeek.SUNDAY); + LambdaQueryWrapper<QualityInspect> qualityInspectLambdaQueryWrapper = new LambdaQueryWrapper<>(); + qualityInspectLambdaQueryWrapper.ge(QualityInspect::getCheckTime, startOfWeek) + .gt(QualityInspect::getCheckTime, endOfWeek); + List<QualityInspect> qualityInspects = qualityStatisticsMapper.selectList(qualityInspectLambdaQueryWrapper); + QualityStatisticsDto qualityStatisticsDto = new QualityStatisticsDto(); + qualityStatisticsDto.setSupplierNum(qualityInspects.stream().filter(item -> item.getInspectType().equals(0)).map(QualityInspect::getQuantity).reduce(BigDecimal.ZERO, BigDecimal::add)); + qualityStatisticsDto.setProcessNum(qualityInspects.stream().filter(item -> item.getInspectType().equals(1)).map(QualityInspect::getQuantity).reduce(BigDecimal.ZERO, BigDecimal::add)); + qualityStatisticsDto.setFactoryNum(qualityInspects.stream().filter(item -> item.getInspectType().equals(2)).map(QualityInspect::getQuantity).reduce(BigDecimal.ZERO, BigDecimal::add)); + List<QualityStatisticsItem> qualityStatisticsItems = new ArrayList<>(); + for (int j = 1; j < 8; j++) { + LocalDate endTime = startOfWeek.plusDays(j); + LocalDate startTime = endTime.minusDays(1); + QualityStatisticsItem qualityStatisticsItem = new QualityStatisticsItem(); + qualityStatisticsItem.setDate(startTime.toString()); + qualityStatisticsItem.setSupplierNum(qualityInspects.stream() + .filter(item -> item.getInspectType().equals(0) && "涓嶅悎鏍�".equals(item.getCheckResult()) + && (startTime.isEqual(item.getCheckTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate()) || startTime.isAfter(item.getCheckTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate())) + && endTime.isBefore(item.getCheckTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate())) + .map(QualityInspect::getQuantity) + .reduce(BigDecimal.ZERO, BigDecimal::add) + ); + qualityStatisticsItem.setFactoryNum(qualityInspects.stream() + .filter(item -> item.getInspectType().equals(1) && "涓嶅悎鏍�".equals(item.getCheckResult()) + && (startTime.isEqual(item.getCheckTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate()) || startTime.isAfter(item.getCheckTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate())) + && endTime.isBefore(item.getCheckTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate())) + .map(QualityInspect::getQuantity) + .reduce(BigDecimal.ZERO, BigDecimal::add) + ); + qualityStatisticsItem.setProcessNum(qualityInspects.stream() + .filter(item -> item.getInspectType().equals(2) && "涓嶅悎鏍�".equals(item.getCheckResult()) + && (startTime.isEqual(item.getCheckTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate()) || startTime.isAfter(item.getCheckTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate())) + && endTime.isBefore(item.getCheckTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate())) + .map(QualityInspect::getQuantity) + .reduce(BigDecimal.ZERO, BigDecimal::add)); + qualityStatisticsItems.add(qualityStatisticsItem); + } + qualityStatisticsDto.setItem(qualityStatisticsItems); + return qualityStatisticsDto; + } + + @Override + public List<ApproveProcess> todos() { + LoginUser loginUser = SecurityUtils.getLoginUser(); + LambdaQueryWrapper<ApproveProcess> approveProcessLambdaQueryWrapper = new LambdaQueryWrapper<>(); + approveProcessLambdaQueryWrapper.eq(ApproveProcess::getApproveDelete, 0) + .eq(ApproveProcess::getApproveUserCurrentId, loginUser.getUserId()) + .ne(ApproveProcess::getApproveStatus, 2) + .eq(ApproveProcess::getTenantId, loginUser.getTenantId()); + return approveProcessMapper.selectList(approveProcessLambdaQueryWrapper); + } + + /** + * + * @param type 1-鍛� 2-鏈� 3-瀛e害 + * @return + */ + @Override + public StatisticsReceivablePayableDto statisticsReceivablePayable(Integer type) { + LocalDate today = LocalDate.now(); + LocalDate startDate = null; + LocalDate endDate = null; + switch (type){ + case 1: + // 鑾峰彇鏈懆鍛ㄤ竴 + startDate = today.with(DayOfWeek.MONDAY); + // 鑾峰彇鏈懆鍛ㄦ棩 + endDate = today.with(DayOfWeek.SUNDAY); + break; + case 2: + startDate = today.with(TemporalAdjusters.firstDayOfMonth()); + endDate = today.with(TemporalAdjusters.lastDayOfMonth()); + break; + case 3: + Month currentMonth = today.getMonth(); + Month firstMonthOfQuarter = currentMonth.firstMonthOfQuarter(); + Month lastMonthOfQuarter = Month.of(firstMonthOfQuarter.getValue() + 2); + + startDate = today.withMonth(firstMonthOfQuarter.getValue()) + .with(TemporalAdjusters.firstDayOfMonth()); + endDate = today.withMonth(lastMonthOfQuarter.getValue()) + .with(TemporalAdjusters.lastDayOfMonth()); + break; + } + // 搴旀敹 + List<SalesLedger> salesLedgers = salesLedgerMapper.selectList(new LambdaQueryWrapper<SalesLedger>() + .ge(SalesLedger::getEntryDate, startDate) + .lt(SalesLedger::getEntryDate, endDate) + ); + BigDecimal receivableMoney = salesLedgers.stream().map(SalesLedger::getContractAmount).reduce(BigDecimal.ZERO, BigDecimal::add); + // 搴斾粯 + List<PurchaseLedger> procurementRecords = purchaseLedgerMapper.selectList(new LambdaQueryWrapper<PurchaseLedger>() + .ge(PurchaseLedger::getEntryDate, startDate) + .lt(PurchaseLedger::getEntryDate, endDate) + ); + BigDecimal payableMoney = procurementRecords.stream().map(PurchaseLedger::getContractAmount).reduce(BigDecimal.ZERO, BigDecimal::add); + // 棰勬敹 + List<ReceiptPayment> receiptPayments = receiptPaymentMapper.selectList(new LambdaQueryWrapper<ReceiptPayment>() + .ge(ReceiptPayment::getReceiptPaymentDate, startDate) + .lt(ReceiptPayment::getReceiptPaymentDate, endDate)); + BigDecimal advanceMoney = receiptPayments.stream().map(ReceiptPayment::getReceiptPaymentAmount).reduce(BigDecimal.ZERO, BigDecimal::add); + // 棰勪粯 + List<PaymentRegistration> paymentRegistrations = paymentRegistrationMapper.selectList(new LambdaQueryWrapper<PaymentRegistration>() + .ge(PaymentRegistration::getPaymentDate, startDate) + .lt(PaymentRegistration::getPaymentDate, endDate)); + BigDecimal prepayMoney = paymentRegistrations.stream().map(PaymentRegistration::getCurrentPaymentAmount).reduce(BigDecimal.ZERO, BigDecimal::add); + StatisticsReceivablePayableDto statisticsReceivablePayableDto = new StatisticsReceivablePayableDto(); + statisticsReceivablePayableDto.setPayableMoney(payableMoney); + statisticsReceivablePayableDto.setReceivableMoney(receivableMoney); + statisticsReceivablePayableDto.setAdvanceMoney(advanceMoney); + statisticsReceivablePayableDto.setPrepayMoney(prepayMoney); + + return statisticsReceivablePayableDto; + } +} diff --git a/src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java b/src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java index 8853bb0..a18d5c4 100644 --- a/src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java +++ b/src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java @@ -161,8 +161,8 @@ * 杩戝崐骞村紑绁�,鍥炴閲戦 */ @GetMapping("/getAmountHalfYear") - public AjaxResult getAmountHalfYear() { - return AjaxResult.success(salesLedgerService.getAmountHalfYear()); + public AjaxResult getAmountHalfYear(@RequestParam(value = "type",defaultValue = "1") Integer type) { + return AjaxResult.success(salesLedgerService.getAmountHalfYear(type)); } /** diff --git a/src/main/java/com/ruoyi/sales/service/ISalesLedgerService.java b/src/main/java/com/ruoyi/sales/service/ISalesLedgerService.java index b38e4af..b4cf320 100644 --- a/src/main/java/com/ruoyi/sales/service/ISalesLedgerService.java +++ b/src/main/java/com/ruoyi/sales/service/ISalesLedgerService.java @@ -32,7 +32,7 @@ List getTopFiveList(); - List<MonthlyAmountDto> getAmountHalfYear(); + List<MonthlyAmountDto> getAmountHalfYear(Integer type); IPage<SalesLedger> selectSalesLedgerListPage(Page page, SalesLedgerDto salesLedgerDto); } diff --git a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java index b6c43ed..fa807c9 100644 --- a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java +++ b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java @@ -204,53 +204,77 @@ } @Override - public List<MonthlyAmountDto> getAmountHalfYear() { + public List<MonthlyAmountDto> getAmountHalfYear(Integer type) { LocalDate now = LocalDate.now(); - YearMonth currentMonth = YearMonth.from(now); + LocalDateTime currentDateTime = LocalDateTime.now(); - List<MonthlyAmountDto> monthlyAmounts = new ArrayList<>(); + // 鏍规嵁 type 纭畾鏌ヨ鐨勬椂闂撮棿闅旓紙澶╂暟锛夊拰鎬绘煡璇㈠ぉ鏁� + int daysPerPeriod; + int totalDays; + switch (type) { + case 1: + daysPerPeriod = 5; // 姣�5澶╂煡涓�娆� + totalDays = 30; // 6娆� 脳 5澶� = 30澶� + break; + case 2: + daysPerPeriod = 15; // 姣�15澶╂煡涓�娆� + totalDays = 90; // 6娆� 脳 15澶� = 90澶� + break; + case 3: + daysPerPeriod = 30; // 姣�30澶╂煡涓�娆� + totalDays = 180; // 6娆� 脳 30澶� = 180澶� + break; + default: + throw new IllegalArgumentException("Invalid type value: " + type); + } + List<MonthlyAmountDto> result = new ArrayList<>(); + + // 寰幆6娆★紝姣忔鏌ヨ涓�涓椂闂存鐨勬暟鎹� for (int i = 0; i < 6; i++) { - YearMonth targetMonth = currentMonth.minusMonths(i); - LocalDate firstDayOfMonth = targetMonth.atDay(1); - LocalDate firstDayOfNextMonth = targetMonth.plusMonths(1).atDay(1); + // 璁$畻褰撳墠鏃堕棿娈电殑璧峰鍜岀粨鏉熸椂闂� + LocalDateTime endTime = currentDateTime.minusDays(i * daysPerPeriod); + LocalDateTime startTime = endTime.minusDays(daysPerPeriod); - LocalDateTime startOfMonth = firstDayOfMonth.atStartOfDay(); - LocalDateTime startOfNextMonth = firstDayOfNextMonth.atStartOfDay(); + // 鏌ヨ鍥炴閲戦 + LambdaQueryWrapper<ReceiptPayment> receiptPaymentQuery = new LambdaQueryWrapper<>(); + receiptPaymentQuery + .ge(ReceiptPayment::getCreateTime, startTime) + .lt(ReceiptPayment::getCreateTime, endTime); + List<ReceiptPayment> receiptPayments = receiptPaymentMapper.selectList(receiptPaymentQuery); - LambdaQueryWrapper<ReceiptPayment> receiptPaymentLambdaQueryWrapper = new LambdaQueryWrapper<>(); - receiptPaymentLambdaQueryWrapper.ge(ReceiptPayment::getCreateTime, startOfMonth) - .lt(ReceiptPayment::getCreateTime, startOfNextMonth); + // 鏌ヨ寮�绁ㄩ噾棰� + LambdaQueryWrapper<InvoiceLedger> invoiceLedgerQuery = new LambdaQueryWrapper<>(); + invoiceLedgerQuery + .ge(InvoiceLedger::getCreateTime, startTime) + .lt(InvoiceLedger::getCreateTime, endTime); + List<InvoiceLedger> invoiceLedgers = invoiceLedgerMapper.selectList(invoiceLedgerQuery); - LambdaQueryWrapper<InvoiceLedger> invoiceLedgerLambdaQueryWrapper = new LambdaQueryWrapper<>(); - invoiceLedgerLambdaQueryWrapper.ge(InvoiceLedger::getCreateTime, startOfMonth) - .lt(InvoiceLedger::getCreateTime, startOfNextMonth); - - // 鑾峰彇鍥炴閲戦 - List<ReceiptPayment> receiptPaymentList = receiptPaymentMapper.selectList(receiptPaymentLambdaQueryWrapper); - //寮�绁ㄩ噾棰� - List<InvoiceLedger> invoiceLedgerList = invoiceLedgerMapper.selectList(invoiceLedgerLambdaQueryWrapper); - - // 浣跨敤 Stream 姹傚拰 - BigDecimal invoiceAmount = invoiceLedgerList.stream() - .map(InvoiceLedger::getInvoiceTotal) - .filter(Objects::nonNull) - .reduce(BigDecimal.ZERO, BigDecimal::add); - - BigDecimal receiptAmount = receiptPaymentList.stream() + // 璁$畻鍥炴鎬婚 + BigDecimal receiptAmount = receiptPayments.stream() .map(ReceiptPayment::getReceiptPaymentAmount) .filter(Objects::nonNull) .reduce(BigDecimal.ZERO, BigDecimal::add); - MonthlyAmountDto monthlyAmount = new MonthlyAmountDto(); - monthlyAmount.setMonth(targetMonth.format(DateTimeFormatter.ofPattern("yyyy-MM"))); - monthlyAmount.setInvoiceAmount(invoiceAmount); - monthlyAmount.setReceiptAmount(receiptAmount); + // 璁$畻寮�绁ㄦ�婚 + BigDecimal invoiceAmount = invoiceLedgers.stream() + .map(InvoiceLedger::getInvoiceTotal) + .filter(Objects::nonNull) + .reduce(BigDecimal.ZERO, BigDecimal::add); - monthlyAmounts.add(monthlyAmount); + // 鏋勯�犺繑鍥炵殑 DTO + MonthlyAmountDto dto = new MonthlyAmountDto(); + dto.setMonth(startTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + " ~ " + + endTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); + dto.setReceiptAmount(receiptAmount); + dto.setInvoiceAmount(invoiceAmount); + + result.add(dto); } - Collections.reverse(monthlyAmounts); - return monthlyAmounts; + + // 鍙嶈浆鍒楄〃锛屼娇鏃堕棿椤哄簭浠庢棭鍒版櫄 + Collections.reverse(result); + return result; } @Override -- Gitblit v1.9.3