From 6ab07ab8a747e9ea1c1c3b3d1d5953ddc7bb3dbe Mon Sep 17 00:00:00 2001
From: xuhy <3313886187@qq.com>
Date: 星期四, 16 十月 2025 11:03:59 +0800
Subject: [PATCH] 分公司业绩报表,业务员业绩报表
---
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpProcurementServiceImpl.java | 266 ++++++++++++++++++++
ruoyi-system/src/main/java/com/ruoyi/system/service/TErpProcurementService.java | 29 ++
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TCrmBranchServiceImpl.java | 2
ruoyi-system/src/main/java/com/ruoyi/system/vo/BranchPerformanceReportVO.java | 56 ++++
ruoyi-system/src/main/java/com/ruoyi/system/mapper/TErpProcurementMapper.java | 29 ++
ruoyi-system/src/main/resources/mapper/system/TErpProcurementMapper.xml | 175 +++++++++++++
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/FinancialStatementsController.java | 83 ++++++
ruoyi-system/src/main/java/com/ruoyi/system/query/PerformanceReportQuery.java | 35 ++
ruoyi-system/src/main/java/com/ruoyi/system/vo/SalespersonPerformanceReportVO.java | 60 ++++
9 files changed, 733 insertions(+), 2 deletions(-)
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/FinancialStatementsController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/FinancialStatementsController.java
index 434c37e..5fef837 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/FinancialStatementsController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/FinancialStatementsController.java
@@ -17,9 +17,12 @@
import com.ruoyi.system.model.TCrmSupplier;
import com.ruoyi.system.query.ClinicProcurementReportQuery;
import com.ruoyi.system.query.DetectionPaymentReportQuery;
+import com.ruoyi.system.query.PerformanceReportQuery;
import com.ruoyi.system.service.*;
+import com.ruoyi.system.vo.BranchPerformanceReportVO;
import com.ruoyi.system.vo.ClinicProcurementReportVO;
import com.ruoyi.system.vo.DetectionPaymentReportVO;
+import com.ruoyi.system.vo.SalespersonPerformanceReportVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.poi.ss.usermodel.Workbook;
@@ -305,4 +308,84 @@
}
}
+ /**
+ * 分公司业绩报表
+ */
+ @ApiOperation(value = "分公司业绩报表")
+ @PostMapping(value = "/branchPerformanceReport")
+ public R<PageInfo<BranchPerformanceReportVO>> branchPerformanceReport(@RequestBody PerformanceReportQuery query) {
+ PageInfo<BranchPerformanceReportVO> pageInfo = erpProcurementService.branchPerformanceReport(query);
+ return R.ok(pageInfo);
+ }
+
+ @Log(title = "财务报表-分公司业绩报表导出", businessType = BusinessType.EXPORT)
+ @ApiOperation(value = "分公司业绩报表导出")
+ @PostMapping("/exportBranchPerformanceReport")
+ public void exportBranchPerformanceReport(@RequestBody PerformanceReportQuery query){
+ List<BranchPerformanceReportVO> list = erpProcurementService.exportBranchPerformanceReport(query);
+ Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), BranchPerformanceReportVO.class, list);
+ HttpServletResponse response = WebUtils.response();
+ assert response != null;
+ response.setContentType("application/vnd.ms-excel");
+ response.setCharacterEncoding("utf-8");
+ ServletOutputStream outputStream = null;
+ try {
+ String fileName = URLEncoder.encode("分公司业绩报表.xls", "utf-8");
+ response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
+ response.setContentType("application/vnd.ms-excel;charset=UTF-8");
+ response.setHeader("Pragma", "no-cache");
+ response.setHeader("Cache-Control", "no-cache");
+ outputStream = response.getOutputStream();
+ workbook.write(outputStream);
+ } catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ try {
+ outputStream.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ /**
+ * 业务员业绩报表
+ */
+ @ApiOperation(value = "业务员业绩报表")
+ @PostMapping(value = "/salespersonPerformanceReport")
+ public R<PageInfo<SalespersonPerformanceReportVO>> salespersonPerformanceReport(@RequestBody PerformanceReportQuery query) {
+ PageInfo<SalespersonPerformanceReportVO> pageInfo = erpProcurementService.salespersonPerformanceReport(query);
+ return R.ok(pageInfo);
+ }
+
+ @Log(title = "财务报表-业务员业绩报表导出", businessType = BusinessType.EXPORT)
+ @ApiOperation(value = "业务员业绩报表导出")
+ @PostMapping("/exportSalespersonPerformanceReport")
+ public void exportSalespersonPerformanceReport(@RequestBody PerformanceReportQuery query){
+ List<SalespersonPerformanceReportVO> list = erpProcurementService.exportSalespersonPerformanceReport(query);
+ Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), SalespersonPerformanceReportVO.class, list);
+ HttpServletResponse response = WebUtils.response();
+ assert response != null;
+ response.setContentType("application/vnd.ms-excel");
+ response.setCharacterEncoding("utf-8");
+ ServletOutputStream outputStream = null;
+ try {
+ String fileName = URLEncoder.encode("业务员业绩报表.xls", "utf-8");
+ response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
+ response.setContentType("application/vnd.ms-excel;charset=UTF-8");
+ response.setHeader("Pragma", "no-cache");
+ response.setHeader("Cache-Control", "no-cache");
+ outputStream = response.getOutputStream();
+ workbook.write(outputStream);
+ } catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ try {
+ outputStream.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TErpProcurementMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TErpProcurementMapper.java
index 25400aa..7c8ce6f 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TErpProcurementMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TErpProcurementMapper.java
@@ -10,6 +10,7 @@
import com.ruoyi.system.model.TErpProcurement;
import com.ruoyi.system.model.TErpProcurementGoods;
import com.ruoyi.system.query.ClinicProcurementReportQuery;
+import com.ruoyi.system.query.PerformanceReportQuery;
import com.ruoyi.system.query.TErpGoodsQuery;
import com.ruoyi.system.query.TErpProcurementQuery;
import com.ruoyi.system.vo.*;
@@ -135,4 +136,32 @@
* @return
*/
List<PlatformLedgerReportExport> exportPlatformLedgerReport(@Param("query")ClinicProcurementReportQuery query);
+
+ /**
+ * 分公司业绩报表
+ * @param query
+ * @return
+ */
+ List<BranchPerformanceReportVO> branchPerformanceReport(@Param("query")PerformanceReportQuery query, @Param("pageInfo")PageInfo<BranchPerformanceReportVO> pageInfo);
+
+ /**
+ * 业务员业绩报表
+ * @param query
+ * @return
+ */
+ List<SalespersonPerformanceReportVO> salespersonPerformanceReport(@Param("query")PerformanceReportQuery query, @Param("pageInfo")PageInfo<SalespersonPerformanceReportVO> pageInfo);
+
+ /**
+ * 分公司业绩报表导出
+ * @param query
+ * @return
+ */
+ List<BranchPerformanceReportVO> exportBranchPerformanceReport(@Param("query")PerformanceReportQuery query);
+
+ /**
+ * 业务员业绩报表导出
+ * @param query
+ * @return
+ */
+ List<SalespersonPerformanceReportVO> exportSalespersonPerformanceReport(@Param("query")PerformanceReportQuery query);
}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/query/PerformanceReportQuery.java b/ruoyi-system/src/main/java/com/ruoyi/system/query/PerformanceReportQuery.java
new file mode 100644
index 0000000..5b84b5a
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/query/PerformanceReportQuery.java
@@ -0,0 +1,35 @@
+package com.ruoyi.system.query;
+
+import com.ruoyi.common.core.domain.model.TimeRangeQueryBody;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+@ApiModel(value = "分公司业务员业绩报表查询PerformanceReportQuery")
+public class PerformanceReportQuery extends TimeRangeQueryBody {
+
+ @ApiModelProperty(value = "采购单号")
+ private String procurementCode;
+
+ @ApiModelProperty(value = "供应商名称")
+ private String supplierName;
+
+ @ApiModelProperty(value = "诊所名称")
+ private String clinicName;
+
+ @ApiModelProperty(value = "状态 1=草稿 2=待支付 3=待发货 4=已发货 5=已入库 6=已取消")
+ private Integer status;
+
+ @ApiModelProperty(value = "分公司名称")
+ private String branchName;
+
+ @ApiModelProperty(value = "业务员名称")
+ private String salespersonName;
+
+ @ApiModelProperty(value = "诊所id 前端忽略")
+ private List<String> clinicIds;
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/TErpProcurementService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/TErpProcurementService.java
index b5219c4..d23b4c0 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/TErpProcurementService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/TErpProcurementService.java
@@ -12,6 +12,7 @@
import com.ruoyi.system.model.TErpProcurement;
import com.ruoyi.system.model.TErpProcurementGoods;
import com.ruoyi.system.query.ClinicProcurementReportQuery;
+import com.ruoyi.system.query.PerformanceReportQuery;
import com.ruoyi.system.query.TErpGoodsQuery;
import com.ruoyi.system.query.TErpProcurementQuery;
import com.ruoyi.system.vo.*;
@@ -168,4 +169,32 @@
* @return
*/
List<PlatformLedgerReportExport> exportPlatformLedgerReport(ClinicProcurementReportQuery query);
+
+ /**
+ * 分公司业绩报表
+ * @param query
+ * @return
+ */
+ PageInfo<BranchPerformanceReportVO> branchPerformanceReport(PerformanceReportQuery query);
+
+ /**
+ * 业务员业绩报表
+ * @param query
+ * @return
+ */
+ PageInfo<SalespersonPerformanceReportVO> salespersonPerformanceReport(PerformanceReportQuery query);
+
+ /**
+ * 分公司业绩报表导出
+ * @param query
+ * @return
+ */
+ List<BranchPerformanceReportVO> exportBranchPerformanceReport(PerformanceReportQuery query);
+
+ /**
+ * 业务员业绩报表导出
+ * @param query
+ * @return
+ */
+ List<SalespersonPerformanceReportVO> exportSalespersonPerformanceReport(PerformanceReportQuery query);
}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TCrmBranchServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TCrmBranchServiceImpl.java
index 88c8b78..5200c94 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TCrmBranchServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TCrmBranchServiceImpl.java
@@ -64,8 +64,6 @@
if(!CollectionUtils.isEmpty(crmBranchAreas)){
List<String> branchIds = crmBranchAreas.stream().map(TCrmBranchArea::getBranchId).collect(Collectors.toList());
query.setBranchIds(branchIds);
- }else {
- return pageInfo;
}
List<TCrmBranchVO> list = this.baseMapper.pageList(query,pageInfo);
if(CollectionUtils.isEmpty(list)){
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpProcurementServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpProcurementServiceImpl.java
index 01d0b6d..e74112d 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpProcurementServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpProcurementServiceImpl.java
@@ -7,6 +7,7 @@
import com.ruoyi.common.core.domain.BaseModel;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.system.dto.AddProcurementDto;
import com.ruoyi.system.export.PlatformLedgerReportExport;
import com.ruoyi.system.export.ProcurementReportClinicExport;
@@ -15,6 +16,7 @@
import com.ruoyi.system.mapper.*;
import com.ruoyi.system.model.*;
import com.ruoyi.system.query.ClinicProcurementReportQuery;
+import com.ruoyi.system.query.PerformanceReportQuery;
import com.ruoyi.system.query.TErpGoodsQuery;
import com.ruoyi.system.query.TErpProcurementQuery;
import com.ruoyi.system.service.TErpGoodsService;
@@ -111,6 +113,14 @@
@Resource
private TCrmWarehouseMapper crmWarehouseMapper;
+ @Resource
+ private TCrmBranchMapper crmBranchMapper;
+ @Resource
+ private TCrmSalespersonMapper crmSalespersonMapper;
+ @Resource
+ private TCrmChangePointsMapper crmChangePointsMapper;
+ @Resource
+ private TErpProcurementCommissionMapper erpProcurementCommissionMapper;
@Override
@@ -759,4 +769,260 @@
return list;
}
+ @Override
+ public PageInfo<BranchPerformanceReportVO> branchPerformanceReport(PerformanceReportQuery query) {
+
+ List<String> clinicIds = new ArrayList<>();
+
+ if(StringUtils.isNotBlank(query.getBranchName())){
+ // 查询分公司名称
+ List<TCrmBranch> crmBranches = crmBranchMapper.selectList(Wrappers.lambdaQuery(TCrmBranch.class)
+ .like(TCrmBranch::getBranchName, query.getBranchName()));
+ if(CollectionUtils.isEmpty(crmBranches)){
+ return new PageInfo<>();
+ }
+ List<String> branchIds = crmBranches.stream().map(TCrmBranch::getId).collect(Collectors.toList());
+ List<TCrmClinic> crmClinics = crmClinicMapper.selectList(Wrappers.lambdaQuery(TCrmClinic.class)
+ .in(TCrmClinic::getBranchId, branchIds));
+ if(CollectionUtils.isEmpty(crmClinics)){
+ return new PageInfo<>();
+ }
+ List<String> ids = crmClinics.stream().map(TCrmClinic::getId).collect(Collectors.toList());
+ clinicIds.addAll(ids);
+ }
+ query.setClinicIds(clinicIds);
+ PageInfo<BranchPerformanceReportVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize());
+
+ List<BranchPerformanceReportVO> list = this.baseMapper.branchPerformanceReport(query, pageInfo);
+ if(CollectionUtils.isEmpty(list)){
+ return pageInfo;
+ }
+ List<String> procurementIds = list.stream().map(BranchPerformanceReportVO::getId).collect(Collectors.toList());
+
+ // 查询可获得积分
+ List<TCrmChangePoints> crmChangePoints = crmChangePointsMapper.selectList(Wrappers.lambdaQuery(TCrmChangePoints.class)
+ .in(TCrmChangePoints::getProcurementId, procurementIds)
+ .eq(TCrmChangePoints::getUserType, 1)
+ .eq(TCrmChangePoints::getChangeType, 1)
+ .eq(TCrmChangePoints::getChangeReason, 1));
+ // 查询业绩
+ List<TErpProcurementCommission> erpProcurementCommissions = erpProcurementCommissionMapper.selectList(Wrappers.lambdaQuery(TErpProcurementCommission.class)
+ .in(TErpProcurementCommission::getProcurementId, procurementIds)
+ .eq(TErpProcurementCommission::getCommissionType, 1));
+ for (BranchPerformanceReportVO branchPerformanceReportVO : list) {
+ // 查询可获得积分
+ List<TCrmChangePoints> changePoints = crmChangePoints.stream().filter(tCrmChangePoints -> branchPerformanceReportVO.getId().equals(tCrmChangePoints.getProcurementId())).collect(Collectors.toList());
+ if(!CollectionUtils.isEmpty(changePoints)){
+ branchPerformanceReportVO.setAvailablePoints(changePoints.stream().mapToInt(TCrmChangePoints::getChangeValue).sum());
+ }
+ // 查询业绩
+ List<TErpProcurementCommission> commissions = erpProcurementCommissions.stream().filter(tErpProcurementCommission -> branchPerformanceReportVO.getId().equals(tErpProcurementCommission.getProcurementId())).collect(Collectors.toList());
+ if(!CollectionUtils.isEmpty(commissions)){
+ branchPerformanceReportVO.setPerformance(commissions.stream().map(TErpProcurementCommission::getMoney).reduce(BigDecimal.ZERO, BigDecimal::add));
+ }
+ }
+ pageInfo.setRecords(list);
+ return pageInfo;
+ }
+
+ @Override
+ public PageInfo<SalespersonPerformanceReportVO> salespersonPerformanceReport(PerformanceReportQuery query) {
+ List<String> clinicIds = new ArrayList<>();
+
+ if(StringUtils.isNotBlank(query.getBranchName())){
+ // 查询分公司名称
+ List<TCrmBranch> crmBranches = crmBranchMapper.selectList(Wrappers.lambdaQuery(TCrmBranch.class)
+ .like(TCrmBranch::getBranchName, query.getBranchName()));
+ if(CollectionUtils.isEmpty(crmBranches)){
+ return new PageInfo<>();
+ }
+ List<String> branchIds = crmBranches.stream().map(TCrmBranch::getId).collect(Collectors.toList());
+ List<TCrmClinic> crmClinics = crmClinicMapper.selectList(Wrappers.lambdaQuery(TCrmClinic.class)
+ .in(TCrmClinic::getBranchId, branchIds));
+ if(CollectionUtils.isEmpty(crmClinics)){
+ return new PageInfo<>();
+ }
+ List<String> ids = crmClinics.stream().map(TCrmClinic::getId).collect(Collectors.toList());
+ clinicIds.addAll(ids);
+ }
+ if(StringUtils.isNotBlank(query.getSalespersonName())){
+ // 查询业务员名称
+ List<TCrmSalesperson> crmSalespeopleList = crmSalespersonMapper.selectList(Wrappers.lambdaQuery(TCrmSalesperson.class)
+ .like(TCrmSalesperson::getSalespersonName, query.getSalespersonName()));
+ if(CollectionUtils.isEmpty(crmSalespeopleList)){
+ return new PageInfo<>();
+ }
+ List<String> salespersonIds = crmSalespeopleList.stream().map(TCrmSalesperson::getId).collect(Collectors.toList());
+ List<TCrmClinic> crmClinics = crmClinicMapper.selectList(Wrappers.lambdaQuery(TCrmClinic.class)
+ .in(TCrmClinic::getSalespersonId, salespersonIds));
+ if(CollectionUtils.isEmpty(crmClinics)){
+ return new PageInfo<>();
+ }
+ List<String> ids = crmClinics.stream().map(TCrmClinic::getId).collect(Collectors.toList());
+ clinicIds.addAll(ids);
+ }
+ clinicIds = clinicIds.stream().distinct().collect(Collectors.toList());
+ query.setClinicIds(clinicIds);
+ PageInfo<SalespersonPerformanceReportVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize());
+ List<SalespersonPerformanceReportVO> list = this.baseMapper.salespersonPerformanceReport(query, pageInfo);
+ if(CollectionUtils.isEmpty(list)){
+ return pageInfo;
+ }
+ List<String> procurementIds = list.stream().map(SalespersonPerformanceReportVO::getId).collect(Collectors.toList());
+
+ // 查询可获得积分
+ List<TCrmChangePoints> crmChangePoints = crmChangePointsMapper.selectList(Wrappers.lambdaQuery(TCrmChangePoints.class)
+ .in(TCrmChangePoints::getProcurementId, procurementIds)
+ .eq(TCrmChangePoints::getUserType, 2)
+ .eq(TCrmChangePoints::getChangeType, 1)
+ .eq(TCrmChangePoints::getChangeReason, 1));
+ // 查询业绩
+ List<TErpProcurementCommission> erpProcurementCommissions = erpProcurementCommissionMapper.selectList(Wrappers.lambdaQuery(TErpProcurementCommission.class)
+ .in(TErpProcurementCommission::getProcurementId, procurementIds)
+ .eq(TErpProcurementCommission::getCommissionType, 2));
+ for (SalespersonPerformanceReportVO salespersonPerformanceReportVO : list) {
+ // 查询可获得积分
+ List<TCrmChangePoints> changePoints = crmChangePoints.stream().filter(tCrmChangePoints -> salespersonPerformanceReportVO.getId().equals(tCrmChangePoints.getProcurementId())).collect(Collectors.toList());
+ if(!CollectionUtils.isEmpty(changePoints)){
+ salespersonPerformanceReportVO.setAvailablePoints(changePoints.stream().mapToInt(TCrmChangePoints::getChangeValue).sum());
+ }
+ // 查询业绩
+ List<TErpProcurementCommission> commissions = erpProcurementCommissions.stream().filter(tErpProcurementCommission -> salespersonPerformanceReportVO.getId().equals(tErpProcurementCommission.getProcurementId())).collect(Collectors.toList());
+ if(!CollectionUtils.isEmpty(commissions)){
+ salespersonPerformanceReportVO.setPerformance(commissions.stream().map(TErpProcurementCommission::getMoney).reduce(BigDecimal.ZERO, BigDecimal::add));
+ }
+ }
+ pageInfo.setRecords(list);
+ return pageInfo;
+ }
+
+ @Override
+ public List<BranchPerformanceReportVO> exportBranchPerformanceReport(PerformanceReportQuery query) {
+ List<String> clinicIds = new ArrayList<>();
+
+ if(StringUtils.isNotBlank(query.getBranchName())){
+ // 查询分公司名称
+ List<TCrmBranch> crmBranches = crmBranchMapper.selectList(Wrappers.lambdaQuery(TCrmBranch.class)
+ .like(TCrmBranch::getBranchName, query.getBranchName()));
+ if(CollectionUtils.isEmpty(crmBranches)){
+ return new ArrayList<>();
+ }
+ List<String> branchIds = crmBranches.stream().map(TCrmBranch::getId).collect(Collectors.toList());
+ List<TCrmClinic> crmClinics = crmClinicMapper.selectList(Wrappers.lambdaQuery(TCrmClinic.class)
+ .in(TCrmClinic::getBranchId, branchIds));
+ if(CollectionUtils.isEmpty(crmClinics)){
+ return new ArrayList<>();
+ }
+ List<String> ids = crmClinics.stream().map(TCrmClinic::getId).collect(Collectors.toList());
+ clinicIds.addAll(ids);
+ }
+ query.setClinicIds(clinicIds);
+ List<BranchPerformanceReportVO> list = this.baseMapper.exportBranchPerformanceReport(query);
+ if(CollectionUtils.isEmpty(list)){
+ return new ArrayList<>();
+ }
+ List<String> procurementIds = list.stream().map(BranchPerformanceReportVO::getId).collect(Collectors.toList());
+
+ // 查询可获得积分
+ List<TCrmChangePoints> crmChangePoints = crmChangePointsMapper.selectList(Wrappers.lambdaQuery(TCrmChangePoints.class)
+ .in(TCrmChangePoints::getProcurementId, procurementIds)
+ .eq(TCrmChangePoints::getUserType, 1)
+ .eq(TCrmChangePoints::getChangeType, 1)
+ .eq(TCrmChangePoints::getChangeReason, 1));
+ // 查询业绩
+ List<TErpProcurementCommission> erpProcurementCommissions = erpProcurementCommissionMapper.selectList(Wrappers.lambdaQuery(TErpProcurementCommission.class)
+ .in(TErpProcurementCommission::getProcurementId, procurementIds)
+ .eq(TErpProcurementCommission::getCommissionType, 1));
+ for (BranchPerformanceReportVO branchPerformanceReportVO : list) {
+ // 查询可获得积分
+ List<TCrmChangePoints> changePoints = crmChangePoints.stream().filter(tCrmChangePoints -> branchPerformanceReportVO.getId().equals(tCrmChangePoints.getProcurementId())).collect(Collectors.toList());
+ if(!CollectionUtils.isEmpty(changePoints)){
+ branchPerformanceReportVO.setAvailablePoints(changePoints.stream().mapToInt(TCrmChangePoints::getChangeValue).sum());
+ }
+ // 查询业绩
+ List<TErpProcurementCommission> commissions = erpProcurementCommissions.stream().filter(tErpProcurementCommission -> branchPerformanceReportVO.getId().equals(tErpProcurementCommission.getProcurementId())).collect(Collectors.toList());
+ if(!CollectionUtils.isEmpty(commissions)){
+ branchPerformanceReportVO.setPerformance(commissions.stream().map(TErpProcurementCommission::getMoney).reduce(BigDecimal.ZERO, BigDecimal::add));
+ }
+ if(Objects.nonNull(branchPerformanceReportVO.getPayTime())){
+ String payTimeStr = new SimpleDateFormat("yyyy-MM-dd").format(branchPerformanceReportVO.getPayTime());
+ branchPerformanceReportVO.setPayTimeStr(payTimeStr);
+ }
+ }
+ return list;
+ }
+
+ @Override
+ public List<SalespersonPerformanceReportVO> exportSalespersonPerformanceReport(PerformanceReportQuery query) {
+ List<String> clinicIds = new ArrayList<>();
+
+ if(StringUtils.isNotBlank(query.getBranchName())){
+ // 查询分公司名称
+ List<TCrmBranch> crmBranches = crmBranchMapper.selectList(Wrappers.lambdaQuery(TCrmBranch.class)
+ .like(TCrmBranch::getBranchName, query.getBranchName()));
+ if(CollectionUtils.isEmpty(crmBranches)){
+ return new ArrayList<>();
+ }
+ List<String> branchIds = crmBranches.stream().map(TCrmBranch::getId).collect(Collectors.toList());
+ List<TCrmClinic> crmClinics = crmClinicMapper.selectList(Wrappers.lambdaQuery(TCrmClinic.class)
+ .in(TCrmClinic::getBranchId, branchIds));
+ if(CollectionUtils.isEmpty(crmClinics)){
+ return new ArrayList<>();
+ }
+ List<String> ids = crmClinics.stream().map(TCrmClinic::getId).collect(Collectors.toList());
+ clinicIds.addAll(ids);
+ }
+ if(StringUtils.isNotBlank(query.getSalespersonName())){
+ // 查询业务员名称
+ List<TCrmSalesperson> crmSalespeopleList = crmSalespersonMapper.selectList(Wrappers.lambdaQuery(TCrmSalesperson.class)
+ .like(TCrmSalesperson::getSalespersonName, query.getSalespersonName()));
+ if(CollectionUtils.isEmpty(crmSalespeopleList)){
+ return new ArrayList<>();
+ }
+ List<String> salespersonIds = crmSalespeopleList.stream().map(TCrmSalesperson::getId).collect(Collectors.toList());
+ List<TCrmClinic> crmClinics = crmClinicMapper.selectList(Wrappers.lambdaQuery(TCrmClinic.class)
+ .in(TCrmClinic::getSalespersonId, salespersonIds));
+ if(CollectionUtils.isEmpty(crmClinics)){
+ return new ArrayList<>();
+ }
+ List<String> ids = crmClinics.stream().map(TCrmClinic::getId).collect(Collectors.toList());
+ clinicIds.addAll(ids);
+ }
+ clinicIds = clinicIds.stream().distinct().collect(Collectors.toList());
+ query.setClinicIds(clinicIds);
+ List<SalespersonPerformanceReportVO> list = this.baseMapper.exportSalespersonPerformanceReport(query);
+ if(CollectionUtils.isEmpty(list)){
+ return new ArrayList<>();
+ }
+ List<String> procurementIds = list.stream().map(SalespersonPerformanceReportVO::getId).collect(Collectors.toList());
+
+ // 查询可获得积分
+ List<TCrmChangePoints> crmChangePoints = crmChangePointsMapper.selectList(Wrappers.lambdaQuery(TCrmChangePoints.class)
+ .in(TCrmChangePoints::getProcurementId, procurementIds)
+ .eq(TCrmChangePoints::getUserType, 2)
+ .eq(TCrmChangePoints::getChangeType, 1)
+ .eq(TCrmChangePoints::getChangeReason, 1));
+ // 查询业绩
+ List<TErpProcurementCommission> erpProcurementCommissions = erpProcurementCommissionMapper.selectList(Wrappers.lambdaQuery(TErpProcurementCommission.class)
+ .in(TErpProcurementCommission::getProcurementId, procurementIds)
+ .eq(TErpProcurementCommission::getCommissionType, 2));
+ for (SalespersonPerformanceReportVO salespersonPerformanceReportVO : list) {
+ // 查询可获得积分
+ List<TCrmChangePoints> changePoints = crmChangePoints.stream().filter(tCrmChangePoints -> salespersonPerformanceReportVO.getId().equals(tCrmChangePoints.getProcurementId())).collect(Collectors.toList());
+ if(!CollectionUtils.isEmpty(changePoints)){
+ salespersonPerformanceReportVO.setAvailablePoints(changePoints.stream().mapToInt(TCrmChangePoints::getChangeValue).sum());
+ }
+ // 查询业绩
+ List<TErpProcurementCommission> commissions = erpProcurementCommissions.stream().filter(tErpProcurementCommission -> salespersonPerformanceReportVO.getId().equals(tErpProcurementCommission.getProcurementId())).collect(Collectors.toList());
+ if(!CollectionUtils.isEmpty(commissions)){
+ salespersonPerformanceReportVO.setPerformance(commissions.stream().map(TErpProcurementCommission::getMoney).reduce(BigDecimal.ZERO, BigDecimal::add));
+ }
+ if(Objects.nonNull(salespersonPerformanceReportVO.getPayTime())){
+ String payTimeStr = new SimpleDateFormat("yyyy-MM-dd").format(salespersonPerformanceReportVO.getPayTime());
+ salespersonPerformanceReportVO.setPayTimeStr(payTimeStr);
+ }
+ }
+ return list;
+ }
+
}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/BranchPerformanceReportVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/BranchPerformanceReportVO.java
new file mode 100644
index 0000000..c17ce68
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/BranchPerformanceReportVO.java
@@ -0,0 +1,56 @@
+package com.ruoyi.system.vo;
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@Data
+@ApiModel(value = "分公司业绩报表BranchPerformanceReportVO")
+public class BranchPerformanceReportVO implements Serializable {
+
+ private String id;
+ @ApiModelProperty(value = "诊所名称")
+ @Excel(name = "诊所名称", width = 20)
+ private String clinicName;
+
+ @ApiModelProperty(value = "采购供应商")
+ @Excel(name = "采购供应商", width = 20)
+ private String supplierName;
+
+ @ApiModelProperty(value = "采购单号")
+ @Excel(name = "采购单号", width = 20)
+ private String procurementCode;
+
+ @ApiModelProperty(value = "支付时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ private LocalDateTime payTime;
+
+ @Excel(name = "采购时间", width = 20)
+ private String payTimeStr;
+
+ @ApiModelProperty(value = "采购金额")
+ @Excel(name = "采购金额", width = 20)
+ private BigDecimal payMoney;
+
+ @ApiModelProperty(value = "所属分公司")
+ @Excel(name = "所属分公司", width = 20)
+ private String branchName;
+
+ @ApiModelProperty(value = "分公司业绩")
+ @Excel(name = "分公司业绩", width = 20)
+ private BigDecimal performance;
+
+ @ApiModelProperty(value = "分公司可获积分")
+ @Excel(name = "分公司可获积分", width = 20)
+ private Integer availablePoints;
+
+ @ApiModelProperty(value = "状态 1=草稿 2=待支付 3=待发货 4=已发货 5=已入库 6=已取消")
+ @Excel(name = "状态", width = 20, replace = {"草稿_1", "待支付_2", "待发货_3", "已发货_4", "已入库_5", "已取消_6"})
+ private Integer status;
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/SalespersonPerformanceReportVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/SalespersonPerformanceReportVO.java
new file mode 100644
index 0000000..f2a0857
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/SalespersonPerformanceReportVO.java
@@ -0,0 +1,60 @@
+package com.ruoyi.system.vo;
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@Data
+@ApiModel(value = "业务员业绩报表SalespersonPerformanceReportVO")
+public class SalespersonPerformanceReportVO implements Serializable {
+
+ private String id;
+ @ApiModelProperty(value = "诊所名称")
+ @Excel(name = "诊所名称", width = 20)
+ private String clinicName;
+
+ @ApiModelProperty(value = "采购供应商")
+ @Excel(name = "采购供应商", width = 20)
+ private String supplierName;
+
+ @ApiModelProperty(value = "采购单号")
+ @Excel(name = "采购单号", width = 20)
+ private String procurementCode;
+
+ @ApiModelProperty(value = "支付时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ private LocalDateTime payTime;
+
+ @Excel(name = "采购时间", width = 20)
+ private String payTimeStr;
+
+ @ApiModelProperty(value = "采购金额")
+ @Excel(name = "采购金额", width = 20)
+ private BigDecimal payMoney;
+
+ @ApiModelProperty(value = "所属分公司")
+ @Excel(name = "所属分公司", width = 20)
+ private String branchName;
+
+ @ApiModelProperty(value = "所属业务员")
+ @Excel(name = "所属业务员", width = 20)
+ private String salespersonName;
+
+ @ApiModelProperty(value = "业务员业绩")
+ @Excel(name = "业务员业绩", width = 20)
+ private BigDecimal performance;
+
+ @ApiModelProperty(value = "业务员可获积分")
+ @Excel(name = "业务员可获积分", width = 20)
+ private Integer availablePoints;
+
+ @ApiModelProperty(value = "状态 1=草稿 2=待支付 3=待发货 4=已发货 5=已入库 6=已取消")
+ @Excel(name = "状态", width = 20, replace = {"草稿_1", "待支付_2", "待发货_3", "已发货_4", "已入库_5", "已取消_6"})
+ private Integer status;
+}
diff --git a/ruoyi-system/src/main/resources/mapper/system/TErpProcurementMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TErpProcurementMapper.xml
index 14f8c3d..a9225c2 100644
--- a/ruoyi-system/src/main/resources/mapper/system/TErpProcurementMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/TErpProcurementMapper.xml
@@ -487,5 +487,180 @@
</where>
order by tep.pay_time desc
</select>
+ <select id="branchPerformanceReport" resultType="com.ruoyi.system.vo.BranchPerformanceReportVO">
+ select tep.id, tep.procurement_code, tep.pay_money, tep.status,tep.pay_time,tep.clinic_id, tep.supplier_id,
+ tep.money,tep.supplier_money,
+ tcs.supplier_name as supplierName, tcc.clinic_name as clinicName,tcc.person_charge_name,tcc.phone,
+ tcb.branch_name as branchName
+ from t_erp_procurement tep
+ left join t_crm_supplier tcs on tep.supplier_id = tcs.id
+ left join t_crm_clinic tcc on tep.clinic_id = tcc.id
+ left join t_crm_branch tcb on tcc.branch_id = tcb.id
+ <where>
+ <if test="query.procurementCode != null and query.procurementCode != ''">
+ and tep.procurement_code like concat('%',#{query.procurementCode},'%')
+ </if>
+ <if test="query.supplierName != null and query.supplierName != ''">
+ and tcs.supplier_name like concat('%',#{query.supplierName},'%')
+ </if>
+ <if test="query.clinicName != null and query.clinicName != ''">
+ and tcc.clinic_name like concat('%',#{query.clinicName},'%')
+ </if>
+ <if test="query.status != null and query.status != ''">
+ and tep.status = #{query.status}
+ </if>
+ <if test="query.startTime != null and query.startTime != '' and query.endTime != null and query.endTime != ''">
+ AND tep.pay_time >= #{query.startTime}
+ AND tep.pay_time <= #{query.endTime}
+ </if>
+ <if test="query.clinicIds != null and query.clinicIds.size()>0">
+ and tep.clinic_id in
+ <foreach item="item" collection="query.clinicIds" separator="," open="(" close=")" index="">
+ #{item}
+ </foreach>
+ </if>
+ <if test="query.personChargeName != null and query.personChargeName != ''">
+ and tep.person_charge_name like concat('%',#{query.personChargeName},'%')
+ </if>
+ <if test="query.phone != null and query.phone != ''">
+ and tep.phone like concat('%',#{query.phone},'%')
+ </if>
+ AND tep.status in (3,4,5)
+ AND tep.disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()}
+ </where>
+ order by tep.pay_time desc
+ </select>
+ <select id="salespersonPerformanceReport" resultType="com.ruoyi.system.vo.SalespersonPerformanceReportVO">
+ select tep.id, tep.procurement_code, tep.pay_money, tep.status,tep.pay_time,tep.clinic_id, tep.supplier_id,
+ tep.money,tep.supplier_money,
+ tcs.supplier_name as supplierName, tcc.clinic_name as clinicName,tcc.person_charge_name,tcc.phone,
+ tcb.branch_name as branchName,tcsa.salesperson_name as salespersonName
+ from t_erp_procurement tep
+ left join t_crm_supplier tcs on tep.supplier_id = tcs.id
+ left join t_crm_clinic tcc on tep.clinic_id = tcc.id
+ left join t_crm_branch tcb on tcc.branch_id = tcb.id
+ left join t_crm_salesperson tcsa on tcc.salesperson_id = tcsa.id
+ <where>
+ <if test="query.procurementCode != null and query.procurementCode != ''">
+ and tep.procurement_code like concat('%',#{query.procurementCode},'%')
+ </if>
+ <if test="query.supplierName != null and query.supplierName != ''">
+ and tcs.supplier_name like concat('%',#{query.supplierName},'%')
+ </if>
+ <if test="query.clinicName != null and query.clinicName != ''">
+ and tcc.clinic_name like concat('%',#{query.clinicName},'%')
+ </if>
+ <if test="query.status != null and query.status != ''">
+ and tep.status = #{query.status}
+ </if>
+ <if test="query.startTime != null and query.startTime != '' and query.endTime != null and query.endTime != ''">
+ AND tep.pay_time >= #{query.startTime}
+ AND tep.pay_time <= #{query.endTime}
+ </if>
+ <if test="query.clinicIds != null and query.clinicIds.size()>0">
+ and tep.clinic_id in
+ <foreach item="item" collection="query.clinicIds" separator="," open="(" close=")" index="">
+ #{item}
+ </foreach>
+ </if>
+ <if test="query.personChargeName != null and query.personChargeName != ''">
+ and tep.person_charge_name like concat('%',#{query.personChargeName},'%')
+ </if>
+ <if test="query.phone != null and query.phone != ''">
+ and tep.phone like concat('%',#{query.phone},'%')
+ </if>
+ AND tep.status in (3,4,5)
+ AND tep.disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()}
+ </where>
+ order by tep.pay_time desc
+ </select>
+ <select id="exportBranchPerformanceReport" resultType="com.ruoyi.system.vo.BranchPerformanceReportVO">
+ select tep.id, tep.procurement_code, tep.pay_money, tep.status,tep.pay_time,tep.clinic_id, tep.supplier_id,
+ tep.money,tep.supplier_money,
+ tcs.supplier_name as supplierName, tcc.clinic_name as clinicName,tcc.person_charge_name,tcc.phone,
+ tcb.branch_name as branchName
+ from t_erp_procurement tep
+ left join t_crm_supplier tcs on tep.supplier_id = tcs.id
+ left join t_crm_clinic tcc on tep.clinic_id = tcc.id
+ left join t_crm_branch tcb on tcc.branch_id = tcb.id
+ <where>
+ <if test="query.procurementCode != null and query.procurementCode != ''">
+ and tep.procurement_code like concat('%',#{query.procurementCode},'%')
+ </if>
+ <if test="query.supplierName != null and query.supplierName != ''">
+ and tcs.supplier_name like concat('%',#{query.supplierName},'%')
+ </if>
+ <if test="query.clinicName != null and query.clinicName != ''">
+ and tcc.clinic_name like concat('%',#{query.clinicName},'%')
+ </if>
+ <if test="query.status != null and query.status != ''">
+ and tep.status = #{query.status}
+ </if>
+ <if test="query.startTime != null and query.startTime != '' and query.endTime != null and query.endTime != ''">
+ AND tep.pay_time >= #{query.startTime}
+ AND tep.pay_time <= #{query.endTime}
+ </if>
+ <if test="query.clinicIds != null and query.clinicIds.size()>0">
+ and tep.clinic_id in
+ <foreach item="item" collection="query.clinicIds" separator="," open="(" close=")" index="">
+ #{item}
+ </foreach>
+ </if>
+ <if test="query.personChargeName != null and query.personChargeName != ''">
+ and tep.person_charge_name like concat('%',#{query.personChargeName},'%')
+ </if>
+ <if test="query.phone != null and query.phone != ''">
+ and tep.phone like concat('%',#{query.phone},'%')
+ </if>
+ AND tep.status in (3,4,5)
+ AND tep.disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()}
+ </where>
+ order by tep.pay_time desc
+ </select>
+ <select id="exportSalespersonPerformanceReport"
+ resultType="com.ruoyi.system.vo.SalespersonPerformanceReportVO">
+ select tep.id, tep.procurement_code, tep.pay_money, tep.status,tep.pay_time,tep.clinic_id, tep.supplier_id,
+ tep.money,tep.supplier_money,
+ tcs.supplier_name as supplierName, tcc.clinic_name as clinicName,tcc.person_charge_name,tcc.phone,
+ tcb.branch_name as branchName,tcsa.salesperson_name as salespersonName
+ from t_erp_procurement tep
+ left join t_crm_supplier tcs on tep.supplier_id = tcs.id
+ left join t_crm_clinic tcc on tep.clinic_id = tcc.id
+ left join t_crm_branch tcb on tcc.branch_id = tcb.id
+ left join t_crm_salesperson tcsa on tcc.salesperson_id = tcsa.id
+ <where>
+ <if test="query.procurementCode != null and query.procurementCode != ''">
+ and tep.procurement_code like concat('%',#{query.procurementCode},'%')
+ </if>
+ <if test="query.supplierName != null and query.supplierName != ''">
+ and tcs.supplier_name like concat('%',#{query.supplierName},'%')
+ </if>
+ <if test="query.clinicName != null and query.clinicName != ''">
+ and tcc.clinic_name like concat('%',#{query.clinicName},'%')
+ </if>
+ <if test="query.status != null and query.status != ''">
+ and tep.status = #{query.status}
+ </if>
+ <if test="query.startTime != null and query.startTime != '' and query.endTime != null and query.endTime != ''">
+ AND tep.pay_time >= #{query.startTime}
+ AND tep.pay_time <= #{query.endTime}
+ </if>
+ <if test="query.clinicIds != null and query.clinicIds.size()>0">
+ and tep.clinic_id in
+ <foreach item="item" collection="query.clinicIds" separator="," open="(" close=")" index="">
+ #{item}
+ </foreach>
+ </if>
+ <if test="query.personChargeName != null and query.personChargeName != ''">
+ and tep.person_charge_name like concat('%',#{query.personChargeName},'%')
+ </if>
+ <if test="query.phone != null and query.phone != ''">
+ and tep.phone like concat('%',#{query.phone},'%')
+ </if>
+ AND tep.status in (3,4,5)
+ AND tep.disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()}
+ </where>
+ order by tep.pay_time desc
+ </select>
</mapper>
--
Gitblit v1.7.1