From 30a4a720cfdd57248514f50d141dfd51519aa75d Mon Sep 17 00:00:00 2001
From: maven <2163098428@qq.com>
Date: 星期五, 16 一月 2026 08:58:57 +0800
Subject: [PATCH] yys 销售指标,采购报表
---
src/main/java/com/ruoyi/sales/service/impl/MetricStatisticsServiceImpl.java | 73 +++++
src/main/java/com/ruoyi/account/pojo/AccountIncome.java | 10
src/main/java/com/ruoyi/CodeGenerator.java | 4
src/main/java/com/ruoyi/sales/dto/StatisticsTableDto.java | 31 ++
src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java | 30 --
src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java | 2
src/main/java/com/ruoyi/account/service/BorrowInfoService.java | 27 +
src/main/java/com/ruoyi/account/service/impl/BorrowInfoServiceImpl.java | 132 +++++++++
src/main/java/com/ruoyi/purchase/service/impl/ProcurementBusinessSummaryServiceImpl.java | 26 +
src/main/java/com/ruoyi/purchase/service/impl/PaymentRegistrationServiceImpl.java | 22 +
src/main/java/com/ruoyi/purchase/controller/ProcurementBusinessSummaryController.java | 32 ++
src/main/java/com/ruoyi/sales/controller/MetricStatisticsController.java | 38 ++
src/main/resources/mapper/sales/SalesLedgerProductMapper.xml | 30 ++
src/main/java/com/ruoyi/sales/dto/SalesTrendDto.java | 19 +
src/main/java/com/ruoyi/account/mapper/BorrowInfoMapper.java | 18 +
src/main/java/com/ruoyi/framework/security/service/SysLoginService.java | 14
src/main/java/com/ruoyi/account/controller/BorrowInfoController.java | 84 ++++++
src/main/java/com/ruoyi/sales/mapper/SalesLedgerMapper.java | 32 ++
src/main/resources/mapper/system/SysUserMapper.xml | 2
src/main/java/com/ruoyi/purchase/dto/ProcurementBusinessSummaryDto.java | 76 +++++
src/main/java/com/ruoyi/account/pojo/BorrowInfo.java | 93 ++++++
src/main/java/com/ruoyi/sales/mapper/SalesLedgerProductMapper.java | 3
src/main/resources/mapper/account/BorrowInfoMapper.xml | 22 +
23 files changed, 776 insertions(+), 44 deletions(-)
diff --git a/src/main/java/com/ruoyi/CodeGenerator.java b/src/main/java/com/ruoyi/CodeGenerator.java
index 9e75ced..cca67a2 100644
--- a/src/main/java/com/ruoyi/CodeGenerator.java
+++ b/src/main/java/com/ruoyi/CodeGenerator.java
@@ -19,11 +19,11 @@
// 婕旂ず渚嬪瓙锛屾墽琛� main 鏂规硶鎺у埗鍙拌緭鍏ユā鍧楄〃鍚嶅洖杞﹁嚜鍔ㄧ敓鎴愬搴旈」鐩洰褰曚腑
public class CodeGenerator {
- public static String database_url = "jdbc:mysql://127.0.0.1:3306/product-inventory-management";
+ public static String database_url = "jdbc:mysql://127.0.0.1:3306/product-inventory-management-new";
public static String database_username = "root";
public static String database_password= "123456";
public static String author = "鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃";
- public static String model = "quality"; // 妯″潡
+ public static String model = "account"; // 妯″潡
public static String setParent = "com.ruoyi."+ model; // 鍖呰矾寰�
public static String tablePrefix = ""; // 璁剧疆杩囨护琛ㄥ墠缂�
public static void main(String[] args) {
diff --git a/src/main/java/com/ruoyi/account/controller/BorrowInfoController.java b/src/main/java/com/ruoyi/account/controller/BorrowInfoController.java
new file mode 100644
index 0000000..b9fe0a1
--- /dev/null
+++ b/src/main/java/com/ruoyi/account/controller/BorrowInfoController.java
@@ -0,0 +1,84 @@
+package com.ruoyi.account.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.account.pojo.BorrowInfo;
+import com.ruoyi.account.service.BorrowInfoService;
+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 io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * <p>
+ * 鍊熸淇℃伅琛� 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-01-15 02:57:29
+ */
+@Api(tags = "鍊熸淇℃伅琛�")
+@RestController
+@RequestMapping("/borrowInfo")
+public class BorrowInfoController {
+
+ @Autowired
+ private BorrowInfoService borrowInfoService;
+
+ @GetMapping("/listPage")
+ @ApiOperation("鍒嗛〉鏌ヨ")
+ public AjaxResult listPage(Page page, BorrowInfo borrowInfo) {
+ return borrowInfoService.listPage(page,borrowInfo);
+ }
+
+ /**
+ * 鏂板
+ */
+ @PostMapping("/add")
+ @Transactional(rollbackFor = Exception.class)
+ @Log(title = "鏂板鍊熸淇℃伅", businessType = BusinessType.INSERT)
+ public AjaxResult add(@RequestBody BorrowInfo borrowInfo) {
+ return borrowInfoService.add(borrowInfo);
+ }
+
+ /**
+ * 淇敼
+ */
+ @PostMapping("/update")
+ @Transactional(rollbackFor = Exception.class)
+ @Log(title = "淇敼鍊熸淇℃伅", businessType = BusinessType.UPDATE)
+ public AjaxResult updateBorrowInfo(@RequestBody BorrowInfo borrowInfo) {
+ return borrowInfoService.updateBorrowInfo(borrowInfo);
+ }
+
+
+ /**
+ * 鍒犻櫎
+ */
+ @DeleteMapping("/delete")
+ @Transactional(rollbackFor = Exception.class)
+ @Log(title = "鍒犻櫎鍊熸淇℃伅", businessType = BusinessType.DELETE)
+ public AjaxResult delete(@RequestBody List<Long> ids) {
+ return borrowInfoService.delete(ids);
+ }
+
+ /**
+ * 瀵煎嚭
+ */
+ @PostMapping("/export")
+ @ApiOperation(value = "瀵煎嚭鍊熸淇℃伅")
+ public void export(HttpServletResponse response, BorrowInfo borrowInfo) {
+ List<BorrowInfo> list = borrowInfoService.list();
+ ExcelUtil<BorrowInfo> util = new ExcelUtil<>(BorrowInfo.class);
+ util.exportExcel(response,list, "鍊熸淇℃伅鏁版嵁");
+ }
+
+
+}
diff --git a/src/main/java/com/ruoyi/account/mapper/BorrowInfoMapper.java b/src/main/java/com/ruoyi/account/mapper/BorrowInfoMapper.java
new file mode 100644
index 0000000..bcac543
--- /dev/null
+++ b/src/main/java/com/ruoyi/account/mapper/BorrowInfoMapper.java
@@ -0,0 +1,18 @@
+package com.ruoyi.account.mapper;
+
+import com.ruoyi.account.pojo.BorrowInfo;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 鍊熸淇℃伅琛� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-01-15 02:57:29
+ */
+@Mapper
+public interface BorrowInfoMapper extends BaseMapper<BorrowInfo> {
+
+}
diff --git a/src/main/java/com/ruoyi/account/pojo/AccountIncome.java b/src/main/java/com/ruoyi/account/pojo/AccountIncome.java
index e5d6c37..ff89f7b 100644
--- a/src/main/java/com/ruoyi/account/pojo/AccountIncome.java
+++ b/src/main/java/com/ruoyi/account/pojo/AccountIncome.java
@@ -30,6 +30,16 @@
private Long id;
/**
+ * 涓氬姟id
+ */
+ private Long businessId;
+
+ /**
+ * 涓氬姟绫诲瀷 1-鍥炴 2-鍊熸
+ */
+ private Integer businessType;
+
+ /**
* 鏀跺叆鏃ユ湡
*/
@JsonFormat(pattern = "yyyy-MM-dd")
diff --git a/src/main/java/com/ruoyi/account/pojo/BorrowInfo.java b/src/main/java/com/ruoyi/account/pojo/BorrowInfo.java
new file mode 100644
index 0000000..889cc4f
--- /dev/null
+++ b/src/main/java/com/ruoyi/account/pojo/BorrowInfo.java
@@ -0,0 +1,93 @@
+package com.ruoyi.account.pojo;
+
+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.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.dto.DateQueryDto;
+import com.ruoyi.framework.aspectj.lang.annotation.Excel;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.format.annotation.DateTimeFormat;
+
+/**
+ * <p>
+ * 鍊熸淇℃伅琛�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-01-15 02:57:29
+ */
+@Getter
+@Setter
+@TableName("borrow_info")
+@ApiModel(value = "BorrowInfo瀵硅薄", description = "鍊熸淇℃伅琛�")
+public class BorrowInfo extends DateQueryDto implements Serializable{
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty("鍊熸璁板綍涓婚敭ID")
+ @TableId(value = "id", type = IdType.AUTO)
+ private Long id;
+
+ @ApiModelProperty("鍊熸浜哄鍚�")
+ @Excel(name = "鍊熸浜哄鍚�")
+ private String borrowerName;
+
+ @ApiModelProperty("鍊熸閲戦锛堝厓锛�")
+ @Excel(name = "鍊熸閲戦锛堝厓锛�")
+ private BigDecimal borrowAmount;
+
+ @ApiModelProperty("鍊熸鍒╃巼锛堝锛�5.85 浠h〃5.85%锛�")
+ @Excel(name = "鍊熸鍒╃巼")
+ private BigDecimal interestRate;
+
+ @ApiModelProperty("鍊熸鏃ユ湡")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @DateTimeFormat(pattern = "yyyy-MM-dd")
+ @Excel(name = "鍊熸鏃ユ湡", width = 30, dateFormat = "yyyy-MM-dd")
+ private LocalDate borrowDate;
+
+ @ApiModelProperty("瀹為檯杩樻鏃ユ湡锛堣繕娆惧悗濉厖锛�")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @DateTimeFormat(pattern = "yyyy-MM-dd")
+ @Excel(name = "瀹為檯杩樻鏃ユ湡", width = 30, dateFormat = "yyyy-MM-dd")
+ private LocalDate repayDate;
+
+ @ApiModelProperty("鍊熸鐘舵�侊細1=寰呰繕娆撅紝2=宸茶繕娆�")
+ @Excel(name = "鍊熸鐘舵��", readConverterExp = "1=寰呰繕娆�,2=宸茶繕娆�")
+ private Integer status;
+
+ @ApiModelProperty("澶囨敞锛堝�熸璇存槑锛�")
+ @Excel(name = "澶囨敞")
+ private String remark;
+
+ @ApiModelProperty("鍒涘缓鏃堕棿")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @ApiModelProperty("鍒涘缓鑰匢D")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @ApiModelProperty("淇敼鏃堕棿")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+
+ @ApiModelProperty("淇敼鑰匢D")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @ApiModelProperty("绉熸埛id")
+ @TableField(fill = FieldFill.INSERT)
+ private Long tenantId;
+}
diff --git a/src/main/java/com/ruoyi/account/service/BorrowInfoService.java b/src/main/java/com/ruoyi/account/service/BorrowInfoService.java
new file mode 100644
index 0000000..eb1c83b
--- /dev/null
+++ b/src/main/java/com/ruoyi/account/service/BorrowInfoService.java
@@ -0,0 +1,27 @@
+package com.ruoyi.account.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.account.pojo.BorrowInfo;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.framework.web.domain.AjaxResult;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 鍊熸淇℃伅琛� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-01-15 02:57:29
+ */
+public interface BorrowInfoService extends IService<BorrowInfo> {
+
+ AjaxResult listPage(Page page, BorrowInfo borrowInfo);
+
+ AjaxResult add(BorrowInfo borrowInfo);
+
+ AjaxResult updateBorrowInfo(BorrowInfo borrowInfo);
+
+ AjaxResult delete(List<Long> ids);
+}
diff --git a/src/main/java/com/ruoyi/account/service/impl/BorrowInfoServiceImpl.java b/src/main/java/com/ruoyi/account/service/impl/BorrowInfoServiceImpl.java
new file mode 100644
index 0000000..ee69c6f
--- /dev/null
+++ b/src/main/java/com/ruoyi/account/service/impl/BorrowInfoServiceImpl.java
@@ -0,0 +1,132 @@
+package com.ruoyi.account.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.account.pojo.AccountExpense;
+import com.ruoyi.account.pojo.AccountIncome;
+import com.ruoyi.account.pojo.BorrowInfo;
+import com.ruoyi.account.mapper.BorrowInfoMapper;
+import com.ruoyi.account.service.AccountExpenseService;
+import com.ruoyi.account.service.AccountIncomeService;
+import com.ruoyi.account.service.BorrowInfoService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.sales.service.ReceiptPaymentService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 鍊熸淇℃伅琛� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-01-15 02:57:29
+ */
+@Service
+@Slf4j
+public class BorrowInfoServiceImpl extends ServiceImpl<BorrowInfoMapper, BorrowInfo> implements BorrowInfoService {
+
+ @Autowired
+ private BorrowInfoMapper borrowInfoMapper;
+
+ @Autowired
+ private AccountIncomeService accountIncomeService;
+
+ @Autowired
+ private AccountExpenseService accountExpenseService;
+
+ @Override
+ public AjaxResult listPage(Page page, BorrowInfo borrowInfo) {
+ LambdaQueryWrapper<BorrowInfo> borrowInfoLambdaQueryWrapper = new LambdaQueryWrapper<>();
+ if(borrowInfo != null){
+ if(StringUtils.isNotEmpty(borrowInfo.getEntryDateStart()) && StringUtils.isNotEmpty(borrowInfo.getEntryDateEnd())){
+ borrowInfoLambdaQueryWrapper.ge(BorrowInfo::getBorrowDate, borrowInfo.getEntryDateStart());
+ borrowInfoLambdaQueryWrapper.le(BorrowInfo::getBorrowDate, borrowInfo.getEntryDateEnd());
+ }
+ if(borrowInfo.getStatus() != null){
+ borrowInfoLambdaQueryWrapper.eq(BorrowInfo::getStatus, borrowInfo.getStatus());
+ }
+ if(StringUtils.isNotEmpty(borrowInfo.getBorrowerName())){
+ borrowInfoLambdaQueryWrapper.like(BorrowInfo::getBorrowerName, borrowInfo.getBorrowerName());
+ }
+ }
+ return AjaxResult.success(borrowInfoMapper.selectPage(page, borrowInfoLambdaQueryWrapper));
+ }
+
+ @Override
+ public AjaxResult add(BorrowInfo borrowInfo) {
+ int insert = borrowInfoMapper.insert(borrowInfo);
+ if(insert > 0){
+ // 娣诲姞鎴愬姛锛岃繘鍏ユ敹鍏ョ鐞�
+ AccountIncome accountIncome = new AccountIncome();
+ accountIncome.setBusinessId(borrowInfo.getId());
+ accountIncome.setBusinessType(2);
+ accountIncome.setIncomeDate(DateUtils.toDate(borrowInfo.getBorrowDate()));
+ accountIncome.setIncomeType("2");
+ accountIncome.setIncomeMoney(borrowInfo.getBorrowAmount());
+ accountIncome.setIncomeDescribed("鍊熸");
+ accountIncome.setIncomeMethod("3");
+ accountIncome.setInputTime(DateUtils.getNowDate());
+ accountIncome.setInputUser(borrowInfo.getBorrowerName());
+ accountIncomeService.save(accountIncome);
+ return AjaxResult.success("娣诲姞鎴愬姛");
+ }
+ return AjaxResult.success("娣诲姞澶辫触");
+ }
+
+ @Override
+ public AjaxResult updateBorrowInfo(BorrowInfo borrowInfo) {
+ int update = borrowInfoMapper.updateById(borrowInfo);
+ if(update > 0){
+ // 淇敼鎴愬姛锛屼慨鏀规敹鍏ョ鐞�
+ AccountIncome one = accountIncomeService.getOne(new LambdaQueryWrapper<AccountIncome>()
+ .eq(AccountIncome::getBusinessId, borrowInfo.getId())
+ .eq(AccountIncome::getBusinessType, 2)
+ .last("limit 1"));
+ if(one != null){
+ one.setIncomeMoney(borrowInfo.getBorrowAmount());
+ accountIncomeService.updateById(one);
+ }
+ // 鏄惁涓鸿繕娆�
+ if(borrowInfo.getStatus() != null && borrowInfo.getStatus() == 2){
+ // 鏂板鏀嚭璁板綍
+ AccountExpense accountExpense = new AccountExpense();
+ accountExpense.setBusinessId(borrowInfo.getId());
+ accountExpense.setBusinessType(2);
+ accountExpense.setExpenseDate(DateUtils.toDate(borrowInfo.getRepayDate()));
+ accountExpense.setExpenseType("4");
+ accountExpense.setExpenseMoney(borrowInfo.getBorrowAmount());
+ accountExpense.setExpenseDescribed("杩樻");
+ accountExpense.setExpenseMethod("3");
+ accountExpense.setInputTime(DateUtils.getNowDate());
+ accountExpense.setInputUser(borrowInfo.getBorrowerName());
+ accountExpenseService.save(accountExpense);
+ }
+ return AjaxResult.success("淇敼鎴愬姛");
+ }
+ return AjaxResult.success("淇敼澶辫触");
+ }
+
+ @Override
+ public AjaxResult delete(List<Long> ids) {
+ int delete = borrowInfoMapper.deleteBatchIds(ids);
+ if(delete > 0){
+ // 鍒犻櫎鎴愬姛锛屽垹闄ゆ敹鍏ョ鐞�
+ accountIncomeService.remove(new LambdaQueryWrapper<AccountIncome>()
+ .in(AccountIncome::getBusinessId, ids)
+ .eq(AccountIncome::getBusinessType, 2));
+ // 鍒犻櫎鏀嚭绠$悊
+ accountExpenseService.remove(new LambdaQueryWrapper<AccountExpense>()
+ .in(AccountExpense::getBusinessId, ids)
+ .eq(AccountExpense::getBusinessType, 2));
+ return AjaxResult.success("鍒犻櫎鎴愬姛");
+ }
+ return AjaxResult.success("鍒犻櫎澶辫触");
+ }
+}
diff --git a/src/main/java/com/ruoyi/framework/security/service/SysLoginService.java b/src/main/java/com/ruoyi/framework/security/service/SysLoginService.java
index f379b7f..6a7874a 100644
--- a/src/main/java/com/ruoyi/framework/security/service/SysLoginService.java
+++ b/src/main/java/com/ruoyi/framework/security/service/SysLoginService.java
@@ -270,13 +270,13 @@
LoginUser loginUser = (LoginUser) authentication.getPrincipal();
recordLoginInfo(loginUser.getUserId());
// 鏇存柊鐢ㄦ埛淇℃伅锛屼慨鏀瑰綋鍓嶉�変腑鍏徃
- SysUser user = loginUser.getUser();
- if(factoryId != null){
- user.setTenantId(factoryId);
- }else{
- user.setTenantId(tokenService.getDeptIdsByUserId(user.getUserId())[0]);
- }
- sysUserMapper.updateUser(user);
+// SysUser user = loginUser.getUser();
+// if(factoryId != null){
+// user.setTenantId(factoryId);
+// }else{
+// user.setTenantId(tokenService.getDeptIdsByUserId(user.getUserId())[0]);
+// }
+// sysUserMapper.updateUser(user);
// 鐢熸垚token
return tokenService.createToken(loginUser);
}
diff --git a/src/main/java/com/ruoyi/purchase/controller/ProcurementBusinessSummaryController.java b/src/main/java/com/ruoyi/purchase/controller/ProcurementBusinessSummaryController.java
new file mode 100644
index 0000000..f58c331
--- /dev/null
+++ b/src/main/java/com/ruoyi/purchase/controller/ProcurementBusinessSummaryController.java
@@ -0,0 +1,32 @@
+package com.ruoyi.purchase.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.framework.web.controller.BaseController;
+import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.purchase.dto.ProcurementBusinessSummaryDto;
+import com.ruoyi.purchase.service.impl.ProcurementBusinessSummaryServiceImpl;
+import io.swagger.annotations.Api;
+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.RestController;
+
+/**
+ * @author :yys
+ * @date : 2026/1/15 13:29
+ */
+@Api(tags = "閲囪喘涓氬姟姹囨��")
+@RestController
+@RequestMapping("/procurementBusinessSummary")
+public class ProcurementBusinessSummaryController extends BaseController {
+
+
+ @Autowired
+ private ProcurementBusinessSummaryServiceImpl procurementBusinessSummaryService;
+
+ @GetMapping("/listPage")
+ public AjaxResult listPage(Page page, ProcurementBusinessSummaryDto procurementBusinessSummaryDto) {
+ return procurementBusinessSummaryService.listPage(page, procurementBusinessSummaryDto);
+ }
+
+}
diff --git a/src/main/java/com/ruoyi/purchase/dto/ProcurementBusinessSummaryDto.java b/src/main/java/com/ruoyi/purchase/dto/ProcurementBusinessSummaryDto.java
new file mode 100644
index 0000000..310ca78
--- /dev/null
+++ b/src/main/java/com/ruoyi/purchase/dto/ProcurementBusinessSummaryDto.java
@@ -0,0 +1,76 @@
+package com.ruoyi.purchase.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.basic.dto.ProductDto;
+import com.ruoyi.basic.dto.ProductModelDto;
+import com.ruoyi.basic.pojo.Product;
+import com.ruoyi.basic.pojo.ProductModel;
+import com.ruoyi.framework.aspectj.lang.annotation.Excel;
+import com.ruoyi.purchase.pojo.PurchaseLedger;
+import com.ruoyi.sales.pojo.SalesLedgerProduct;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * @author :yys
+ * @date : 2026/1/15 13:34
+ */
+@Data
+@ApiModel
+public class ProcurementBusinessSummaryDto {
+
+ private String productCategory;
+
+ /**
+ * 瑙勬牸鍨嬪彿
+ */
+ private String specificationModel;
+
+ @ApiModelProperty(value = "寮�濮嬫椂闂�")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @DateTimeFormat(pattern = "yyyy-MM-dd")
+ private Date entryDateStart;
+
+ @ApiModelProperty(value = "缁撴潫鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @DateTimeFormat(pattern = "yyyy-MM-dd")
+ private Date entryDateEnd;
+
+ /**
+ * 閲囪喘鏁伴噺
+ */
+ private BigDecimal purchaseNum;
+
+ /**
+ * 閲囪喘閲戦
+ */
+ private BigDecimal purchaseAmount;
+
+ /**
+ * 閲囪喘娆℃暟
+ */
+ private Integer purchaseTimes;
+
+ /**
+ * 骞冲潎鍗曚环
+ */
+ private BigDecimal averagePrice;
+
+
+ /**
+ * 渚涘簲鍟嗗悕绉�
+ */
+ private String supplierName;
+
+ /**
+ * 褰曞叆鏃ユ湡
+ */
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private Date entryDate;
+
+}
diff --git a/src/main/java/com/ruoyi/purchase/service/impl/PaymentRegistrationServiceImpl.java b/src/main/java/com/ruoyi/purchase/service/impl/PaymentRegistrationServiceImpl.java
index d6504cd..ec3be20 100644
--- a/src/main/java/com/ruoyi/purchase/service/impl/PaymentRegistrationServiceImpl.java
+++ b/src/main/java/com/ruoyi/purchase/service/impl/PaymentRegistrationServiceImpl.java
@@ -6,6 +6,9 @@
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.account.mapper.AccountExpenseMapper;
+import com.ruoyi.account.pojo.AccountExpense;
+import com.ruoyi.account.service.AccountExpenseService;
import com.ruoyi.basic.mapper.SupplierManageMapper;
import com.ruoyi.basic.pojo.SupplierManage;
import com.ruoyi.common.utils.DateUtils;
@@ -60,6 +63,8 @@
private ProductRecordMapper productRecordMapper;
+ private AccountExpenseService accountExpenseService;
+
/**
* 鏌ヨ浠樻鐧昏
*
@@ -98,7 +103,7 @@
*/
@Override
public int insertPaymentRegistration(List<PaymentRegistration> paymentRegistrationList) {
- Long userId = SecurityUtils.getLoginUser().getUser().getUserId();
+ LoginUser userId = SecurityUtils.getLoginUser();
for (PaymentRegistration paymentRegistration : paymentRegistrationList) {
PaymentRegistration byId = paymentRegistration;
if (!ObjectUtils.isEmpty(paymentRegistration.getId())){
@@ -114,11 +119,24 @@
}
paymentRegistration.setCreateTime(DateUtils.getNowDate());
paymentRegistration.setUpdateTime(DateUtils.getNowDate());
- paymentRegistration.setRegistrantId(userId);
+ paymentRegistration.setRegistrantId(userId.getUserId());
salesLedgerProduct.setTicketsTotal(salesLedgerProduct.getTicketsTotal().add(paymentRegistration.getCurrentPaymentAmount()));
salesLedgerProduct.setPendingTicketsTotal(salesLedgerProduct.getTaxInclusiveTotalPrice().subtract(salesLedgerProduct.getTicketsTotal()));
paymentRegistrationMapper.insert(paymentRegistration);
salesLedgerProductMapper.updateById(salesLedgerProduct);
+ // 2. 澶勭悊璐︽埛鏀跺叆
+ AccountExpense accountExpense = new AccountExpense();
+ accountExpense.setExpenseDate(purchaseLedger.getEntryDate());
+ accountExpense.setExpenseType("0");
+ accountExpense.setSupplierName(purchaseLedger.getSupplierName());
+ accountExpense.setExpenseMoney(paymentRegistration.getCurrentPaymentAmount());
+ accountExpense.setExpenseDescribed("浠樻鏀嚭");
+ accountExpense.setExpenseMethod("0");
+ accountExpense.setBusinessId(paymentRegistration.getId());
+ accountExpense.setBusinessType(1);
+ accountExpense.setInputTime(new Date());
+ accountExpense.setInputUser(userId.getNickName());
+ accountExpenseService.save(accountExpense);
}
return 1;
diff --git a/src/main/java/com/ruoyi/purchase/service/impl/ProcurementBusinessSummaryServiceImpl.java b/src/main/java/com/ruoyi/purchase/service/impl/ProcurementBusinessSummaryServiceImpl.java
new file mode 100644
index 0000000..96945f3
--- /dev/null
+++ b/src/main/java/com/ruoyi/purchase/service/impl/ProcurementBusinessSummaryServiceImpl.java
@@ -0,0 +1,26 @@
+package com.ruoyi.purchase.service.impl;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.purchase.dto.ProcurementBusinessSummaryDto;
+import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
+import com.ruoyi.sales.pojo.SalesLedgerProduct;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author :yys
+ * @date : 2026/1/15 13:30
+ */
+@Service
+@Slf4j
+public class ProcurementBusinessSummaryServiceImpl {
+
+ @Autowired
+ private SalesLedgerProductMapper salesLedgerProductMapper;
+
+ public AjaxResult listPage(Page page, ProcurementBusinessSummaryDto procurementBusinessSummaryDto) {
+ return AjaxResult.success(salesLedgerProductMapper.procurementBusinessSummaryListPage(page, procurementBusinessSummaryDto));
+ }
+}
diff --git a/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java b/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
index 22b2501..55ea7ae 100644
--- a/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
+++ b/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
@@ -191,41 +191,11 @@
purchaseLedger.setRecorderId(purchaseLedgerDto.getRecorderId());
purchaseLedger.setRecorderName(sysUser.getNickName());
purchaseLedger.setPhoneNumber(sysUser.getPhonenumber());
- // 2. 澶勭悊璐︽埛鏀跺叆
- AccountExpense accountExpense = new AccountExpense();
- accountExpense.setExpenseDate(purchaseLedger.getEntryDate());
- accountExpense.setExpenseType("0");
- accountExpense.setSupplierName(purchaseLedger.getSupplierName());
- accountExpense.setExpenseMoney(purchaseLedger.getContractAmount());
- accountExpense.setExpenseDescribed("閲囪喘鍚堝悓锛�" + purchaseLedger.getPurchaseContractNumber());
- accountExpense.setExpenseMethod("0");
- accountExpense.setInvoiceNumber(purchaseLedger.getPurchaseContractNumber());
- accountExpense.setInputTime(new Date());
- accountExpense.setInputUser(loginUser.getNickName());
-
-
// 3. 鏂板鎴栨洿鏂颁富琛�
if (purchaseLedger.getId() == null) {
purchaseLedgerMapper.insert(purchaseLedger);
-// accountIncomeService.save(accountIncome);
- accountExpenseService.save(accountExpense);
} else {
purchaseLedgerMapper.updateById(purchaseLedger);
- PurchaseLedger purchaseLedgerDB = purchaseLedgerMapper.selectById(purchaseLedger.getId());
- List<AccountExpense> accountExpenseDBs = accountExpenseService.getByInvoiceNumberList(purchaseLedger.getPurchaseContractNumber());
- if (!CollectionUtils.isEmpty(accountExpenseDBs)) {
- accountExpenseDBs.forEach(accountExpenseDB ->{
- accountExpenseDB.setExpenseDate(purchaseLedgerDB.getEntryDate());
- accountExpenseDB.setExpenseType("0");
- accountExpenseDB.setSupplierName(purchaseLedgerDB.getSupplierName());
- accountExpenseDB.setExpenseMoney(purchaseLedgerDB.getContractAmount());
- accountExpenseDB.setExpenseDescribed("閲囪喘鍚堝悓锛�" + purchaseLedgerDB.getPurchaseContractNumber());
- accountExpenseDB.setExpenseMethod("0");
- accountExpenseDB.setInvoiceNumber(purchaseLedgerDB.getPurchaseContractNumber());
- accountExpenseService.updateById(accountExpenseDB);
- });
- }
-
}
// 4. 澶勭悊瀛愯〃鏁版嵁
diff --git a/src/main/java/com/ruoyi/sales/controller/MetricStatisticsController.java b/src/main/java/com/ruoyi/sales/controller/MetricStatisticsController.java
new file mode 100644
index 0000000..3c610a1
--- /dev/null
+++ b/src/main/java/com/ruoyi/sales/controller/MetricStatisticsController.java
@@ -0,0 +1,38 @@
+package com.ruoyi.sales.controller;
+
+import com.ruoyi.framework.web.controller.BaseController;
+import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.sales.dto.StatisticsTableDto;
+import com.ruoyi.sales.service.impl.MetricStatisticsServiceImpl;
+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.RestController;
+
+/**
+ * @author :yys
+ * @date : 2026/1/15 9:39
+ */
+@Api(tags = "鎸囨爣缁熻")
+@RestController
+@RequestMapping("/metricStatistics")
+public class MetricStatisticsController extends BaseController {
+
+ @Autowired
+ private MetricStatisticsServiceImpl metricStatisticsService;
+
+ @ApiOperation("澶撮儴鎬昏")
+ @GetMapping("/total")
+ public AjaxResult total() {
+ return metricStatisticsService.total();
+ }
+
+ @ApiOperation("缁熻琛�")
+ @GetMapping("/statisticsTable")
+ public AjaxResult statisticsTable(StatisticsTableDto statisticsTableDto) {
+ return metricStatisticsService.statisticsTable(statisticsTableDto);
+ }
+
+}
diff --git a/src/main/java/com/ruoyi/sales/dto/SalesTrendDto.java b/src/main/java/com/ruoyi/sales/dto/SalesTrendDto.java
new file mode 100644
index 0000000..36a8290
--- /dev/null
+++ b/src/main/java/com/ruoyi/sales/dto/SalesTrendDto.java
@@ -0,0 +1,19 @@
+package com.ruoyi.sales.dto;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @author :yys
+ * @date : 2026/1/15 10:34
+ */
+@Data
+public class SalesTrendDto {
+
+ private String month; // 鏈堜唤锛堝2024-12锛�
+ private Integer orderCount; // 璁㈠崟鏁�
+ private BigDecimal salesAmount; // 閿�鍞
+ private BigDecimal shipRate;
+
+}
diff --git a/src/main/java/com/ruoyi/sales/dto/StatisticsTableDto.java b/src/main/java/com/ruoyi/sales/dto/StatisticsTableDto.java
new file mode 100644
index 0000000..702bc00
--- /dev/null
+++ b/src/main/java/com/ruoyi/sales/dto/StatisticsTableDto.java
@@ -0,0 +1,31 @@
+package com.ruoyi.sales.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.dto.DateQueryDto;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author :yys
+ * @date : 2026/1/15 10:18
+ */
+@Data
+@ApiModel
+public class StatisticsTableDto{
+
+ private String customerName;
+
+ private String productCategory;
+
+ @ApiModelProperty(value = "寮�濮嬫椂闂�")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private Date entryDateStart;
+
+ @ApiModelProperty(value = "缁撴潫鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private Date entryDateEnd;
+
+}
diff --git a/src/main/java/com/ruoyi/sales/mapper/SalesLedgerMapper.java b/src/main/java/com/ruoyi/sales/mapper/SalesLedgerMapper.java
index a0a0b1f..6e4aee6 100644
--- a/src/main/java/com/ruoyi/sales/mapper/SalesLedgerMapper.java
+++ b/src/main/java/com/ruoyi/sales/mapper/SalesLedgerMapper.java
@@ -6,8 +6,11 @@
import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.sales.dto.SalesLedgerDto;
+import com.ruoyi.sales.dto.SalesTrendDto;
+import com.ruoyi.sales.dto.StatisticsTableDto;
import com.ruoyi.sales.pojo.SalesLedger;
import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
import java.math.BigDecimal;
import java.util.List;
@@ -45,4 +48,33 @@
* @return
*/
IPage<SalesLedger> selectSalesLedgerListPage(Page page, @Param("salesLedgerDto") SalesLedgerDto salesLedgerDto);
+
+ /**
+ * 鎸夋湀浠界粺璁¤鍗曟暟銆侀攢鍞锛堟敮鎸佷骇鍝佸ぇ绫汇�佸鎴峰悕绉扮瓫閫夛級
+ * @param statisticsTableDto 缁熻鏌ヨ鍙傛暟DTO
+ * @return 閿�鍞秼鍔跨粺璁$粨鏋�
+ */
+ @Select("<script>" +
+ "SELECT " +
+ "DATE_FORMAT(sl.entry_date, '%Y-%m') AS month, " +
+ "COUNT(DISTINCT sl.id) AS order_count, " + // 鎬昏鍗曟暟
+ "SUM(slp.tax_inclusive_total_price) AS sales_amount, " + // 閿�鍞
+ // 鍙戣揣鐜� = 鍙戣揣璁㈠崟鏁� * 100 / 鎬昏鍗曟暟锛堜繚鐣�2浣嶅皬鏁帮紝閬垮厤闄�0鎶ラ敊锛�
+ "ROUND(IF(COUNT(DISTINCT sl.id) = 0, 0, " +
+ "SUM(CASE WHEN slp.approve_status = 2 THEN 1 ELSE 0 END) / COUNT(DISTINCT sl.id) * 100), 2) AS ship_rate " +
+ "FROM sales_ledger sl " +
+ "LEFT JOIN sales_ledger_product slp ON sl.id = slp.sales_ledger_id " +
+ "WHERE sl.entry_date BETWEEN #{statisticsTableDto.entryDateStart} AND #{statisticsTableDto.entryDateEnd} " +
+ // 浜у搧澶х被绛涢��
+ "<if test='statisticsTableDto.productCategory != null and statisticsTableDto.productCategory != \"\"'>" +
+ "AND slp.product_category = #{statisticsTableDto.productCategory} " +
+ "</if>" +
+ // 瀹㈡埛鍚嶇О绛涢��
+ "<if test='statisticsTableDto.customerName != null and statisticsTableDto.customerName != \"\"'>" +
+ "AND sl.customer_name = #{statisticsTableDto.customerName} " +
+ "</if>" +
+ "GROUP BY DATE_FORMAT(sl.entry_date, '%Y-%m') " +
+ "ORDER BY month" +
+ "</script>")
+ List<SalesTrendDto> statisticsTable(@Param("statisticsTableDto")StatisticsTableDto statisticsTableDto);
}
diff --git a/src/main/java/com/ruoyi/sales/mapper/SalesLedgerProductMapper.java b/src/main/java/com/ruoyi/sales/mapper/SalesLedgerProductMapper.java
index 8777851..e765f71 100644
--- a/src/main/java/com/ruoyi/sales/mapper/SalesLedgerProductMapper.java
+++ b/src/main/java/com/ruoyi/sales/mapper/SalesLedgerProductMapper.java
@@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.config.MyBaseMapper;
+import com.ruoyi.purchase.dto.ProcurementBusinessSummaryDto;
import com.ruoyi.sales.dto.SalesLedgerProductDto;
import com.ruoyi.sales.pojo.SalesLedgerProduct;
import org.apache.ibatis.annotations.Param;
@@ -23,4 +24,6 @@
IPage<SalesLedgerProductDto> listPage(Page page, @Param("req") SalesLedgerProductDto salesLedgerProduct);
IPage<SalesLedgerProductDto> listPagePurchaseLedger(Page page,@Param("req") SalesLedgerProductDto salesLedgerProduct);
+
+ IPage<ProcurementBusinessSummaryDto> procurementBusinessSummaryListPage(Page page,@Param("req") ProcurementBusinessSummaryDto procurementBusinessSummaryDto);
}
diff --git a/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java b/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java
index 409a048..c528b55 100644
--- a/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java
+++ b/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java
@@ -207,7 +207,7 @@
* 鍙戣揣瀹℃壒鐘舵��
*/
// @TableField(exist = false)
- @ApiModelProperty(value = "瀹℃壒鐘舵�侊細0鏈敓浜�,1宸茬敓浜�,2寰呭鏍�(瀹℃牳涓�),3瀹℃牳瀹屾垚,4瀹℃牳澶辫触")
+ @ApiModelProperty(value = "瀹℃壒鐘舵�侊細0鏈敓浜�,1宸茬敓浜�,2宸插彂璐�")
private Integer approveStatus;
@ApiModelProperty(value = "寰呭洖娆炬�婚噾棰�")
diff --git a/src/main/java/com/ruoyi/sales/service/impl/MetricStatisticsServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/MetricStatisticsServiceImpl.java
new file mode 100644
index 0000000..efa3909
--- /dev/null
+++ b/src/main/java/com/ruoyi/sales/service/impl/MetricStatisticsServiceImpl.java
@@ -0,0 +1,73 @@
+package com.ruoyi.sales.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.sales.dto.SalesTrendDto;
+import com.ruoyi.sales.dto.StatisticsTableDto;
+import com.ruoyi.sales.mapper.SalesLedgerMapper;
+import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
+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.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * @author :yys
+ * @date : 2026/1/15 9:41
+ */
+@Service
+@Slf4j
+public class MetricStatisticsServiceImpl {
+
+ @Autowired
+ private SalesLedgerMapper salesLedgerMapper;
+
+ @Autowired
+ private SalesLedgerProductMapper salesLedgerProductMapper;
+
+ public AjaxResult total() {
+ List<SalesLedger> salesLedgers = salesLedgerMapper.selectList(null);
+ if(CollectionUtils.isEmpty(salesLedgers)) return AjaxResult.success(salesLedgers);
+ Map<String, Object> map = new HashMap<>();
+ // 閿�鍞
+ map.put("contractAmountTotal", salesLedgers.stream().map(SalesLedger::getContractAmount).reduce(BigDecimal.ZERO, BigDecimal::add));
+ // 璁㈠崟鏁伴噺
+ map.put("total", new BigDecimal(salesLedgers.size()));
+ // 鍙戣揣鐜�
+ List<SalesLedgerProduct> salesLedgerProducts = salesLedgerProductMapper.selectList(new LambdaQueryWrapper<SalesLedgerProduct>()
+ .eq(SalesLedgerProduct::getType, 1));
+ map.put("shipRate", "0%");
+ if(CollectionUtils.isEmpty(salesLedgerProducts)) return AjaxResult.success(map);
+ // 鍙戣揣鏁伴噺
+ long count = salesLedgerProducts.stream()
+ .filter(salesLedgerProduct -> salesLedgerProduct.getApproveStatus().equals(2))
+ .count();
+ map.put("shipRate", String.format("%.2f", count * 100.0 / salesLedgerProducts.size()) + "%");
+ return AjaxResult.success(map);
+ }
+
+ public AjaxResult statisticsTable(StatisticsTableDto statisticsTableDto) {
+ Map<String, Object> map = new HashMap<>();
+ if (statisticsTableDto.getEntryDateStart() == null || statisticsTableDto.getEntryDateEnd() == null) {
+ Calendar calendar = Calendar.getInstance();
+ // 缁撴潫鏃堕棿榛樿鏄綋鍓嶆椂闂�
+ statisticsTableDto.setEntryDateEnd(new Date());
+ // 寮�濮嬫椂闂撮粯璁ゆ槸6涓湀鍓�
+ calendar.add(Calendar.MONTH, -6);
+ statisticsTableDto.setEntryDateStart(calendar.getTime());
+ }
+ List<SalesTrendDto> salesTrendDtos = salesLedgerMapper.statisticsTable(statisticsTableDto);
+ if(CollectionUtils.isEmpty(salesTrendDtos)) return AjaxResult.success(map);
+ map.put("dateList", salesTrendDtos.stream().map(SalesTrendDto::getMonth).collect(Collectors.toList()));
+ map.put("orderCountList", salesTrendDtos.stream().map(SalesTrendDto::getOrderCount).collect(Collectors.toList()));
+ map.put("salesAmountList", salesTrendDtos.stream().map(SalesTrendDto::getSalesAmount).collect(Collectors.toList()));
+ map.put("shippingRateList", salesTrendDtos.stream().map(SalesTrendDto::getShipRate).collect(Collectors.toList()));
+ return AjaxResult.success(map);
+ }
+}
diff --git a/src/main/resources/mapper/account/BorrowInfoMapper.xml b/src/main/resources/mapper/account/BorrowInfoMapper.xml
new file mode 100644
index 0000000..f21c8d7
--- /dev/null
+++ b/src/main/resources/mapper/account/BorrowInfoMapper.xml
@@ -0,0 +1,22 @@
+<?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.account.mapper.BorrowInfoMapper">
+
+ <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+ <resultMap id="BaseResultMap" type="com.ruoyi.account.pojo.BorrowInfo">
+ <id column="id" property="id" />
+ <result column="borrower_name" property="borrowerName" />
+ <result column="borrow_amount" property="borrowAmount" />
+ <result column="interest_rate" property="interestRate" />
+ <result column="borrow_date" property="borrowDate" />
+ <result column="repay_date" property="repayDate" />
+ <result column="status" property="status" />
+ <result column="remark" property="remark" />
+ <result column="create_time" property="createTime" />
+ <result column="create_user" property="createUser" />
+ <result column="update_time" property="updateTime" />
+ <result column="update_user" property="updateUser" />
+ <result column="tenant_id" property="tenantId" />
+ </resultMap>
+
+</mapper>
diff --git a/src/main/resources/mapper/sales/SalesLedgerProductMapper.xml b/src/main/resources/mapper/sales/SalesLedgerProductMapper.xml
index b2a18d8..2579a18 100644
--- a/src/main/resources/mapper/sales/SalesLedgerProductMapper.xml
+++ b/src/main/resources/mapper/sales/SalesLedgerProductMapper.xml
@@ -96,4 +96,34 @@
</where>
order by slp.register_date desc
</select>
+ <select id="procurementBusinessSummaryListPage"
+ resultType="com.ruoyi.purchase.dto.ProcurementBusinessSummaryDto">
+ SELECT
+ slp.product_category AS productCategory,
+ slp.specification_model AS specificationModel,
+ sl.supplier_name AS supplierName,
+ SUM(slp.quantity) AS purchaseNum,
+ SUM(slp.tax_inclusive_total_price) AS purchaseAmount,
+ COUNT(DISTINCT slp.sales_ledger_id) AS purchaseTimes,
+ <!-- 骞冲潎鍗曚环 = 鎬婚噰璐噾棰�/鎬婚噰璐暟閲忥紝淇濈暀2浣嶅皬鏁帮紝閬垮厤闄�0 -->
+ ROUND(IF(SUM(slp.quantity) = 0, 0, SUM(slp.tax_inclusive_total_price) / SUM(slp.quantity)), 2) AS averagePrice,
+ <!-- 璇ヤ骇鍝佸ぇ绫讳笅鏈�鍚庝竴涓綍鍏ユ棩鏈燂紙鍙栧彴璐︿富琛ㄧ殑entry_date锛� -->
+ MAX(sl.entry_date) AS entryDate
+ FROM sales_ledger_product slp
+ <!-- 鍏宠仈鍙拌处涓昏〃锛氳幏鍙栧綍鍏ユ棩鏈焑ntry_date -->
+ LEFT JOIN purchase_ledger sl ON slp.sales_ledger_id = sl.id
+ WHERE slp.type = 2 <!-- 鍥哄畾绛涢�夛細閲囪喘鍙拌处锛坱ype=2锛� -->
+ <!-- 閲囪喘鏃ユ湡绛涢�夛細鍙�夋潯浠� -->
+ <if test="req.entryDateStart != null and req.entryDateEnd != null">
+ AND sl.entry_date BETWEEN #{req.entryDateStart} AND #{req.entryDateEnd} <!-- 鏃堕棿鑼冨洿锛氶潪绌烘湁鏁� -->
+ </if>
+ <!-- 浜у搧澶х被绛涢�夛細鍙�夋潯浠� -->
+ <if test="req.productCategory != null and req.productCategory != ''">
+ AND slp.product_category = #{req.productCategory}
+ </if>
+ <!-- 鎸変骇鍝佸ぇ绫诲垎缁勮仛鍚� -->
+ GROUP BY slp.product_category
+ <!-- 鎸変骇鍝佸ぇ绫绘帓搴� -->
+ ORDER BY slp.product_category
+ </select>
</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/system/SysUserMapper.xml b/src/main/resources/mapper/system/SysUserMapper.xml
index 8f66fd3..d0a03fb 100644
--- a/src/main/resources/mapper/system/SysUserMapper.xml
+++ b/src/main/resources/mapper/system/SysUserMapper.xml
@@ -190,7 +190,6 @@
<insert id="insertUser" parameterType="com.ruoyi.project.system.domain.SysUser" useGeneratedKeys="true" keyProperty="userId">
insert into sys_user(
<if test="userId != null and userId != 0">user_id,</if>
- <if test="deptId != null and deptId != 0">dept_id,</if>
<if test="userName != null and userName != ''">user_name,</if>
<if test="nickName != null and nickName != ''">nick_name,</if>
<if test="email != null and email != ''">email,</if>
@@ -205,7 +204,6 @@
create_time
)values(
<if test="userId != null and userId != ''">#{userId},</if>
- <if test="deptId != null and deptId != ''">#{deptId},</if>
<if test="userName != null and userName != ''">#{userName},</if>
<if test="nickName != null and nickName != ''">#{nickName},</if>
<if test="email != null and email != ''">#{email},</if>
--
Gitblit v1.9.3