月度汇总视图查询接口;

This commit is contained in:
王奎兴
2026-09-09 14:19:38 +08:00
parent f118c7ff29
commit 910c7b1701
10 changed files with 255 additions and 0 deletions
@@ -33,6 +33,7 @@ import com.mhd.bms.infrastructure.constant.BillLogsConstants;
import com.mhd.bms.interfaces.assembler.billManage.BillManageAssembler;
import com.mhd.bms.interfaces.dto.billManage.BillDetailDTO;
import com.mhd.bms.interfaces.dto.billManage.BillManageDTO;
import com.mhd.bms.interfaces.dto.billManage.CustomerMonthBillVO;
import com.mhd.bms.interfaces.dto.billingStatement.BillingStatementDTO;
import com.mhd.common.core.exception.ServiceException;
import com.mhd.common.core.exception.digitalLogisticsException.DigitalLogisticsException;
@@ -876,5 +877,66 @@ public class BillManageApplicationService {
return flag && flagTwo;
}
/**
* 客户每月账单分组查询
*/
public List<CustomerMonthBillVO> queryCustomerMonthBillList(BillManageDO billManageDO) {
LoginUser loginUser = SecurityUtils.getLoginUser();
if (loginUser != null && loginUser.getUserPo() != null) {
Long userOrganizationId = loginUser.getUserPo().getOrganizationId();
Long frontendOrganizationId = billManageDO.getOrganizationId();
if (userOrganizationId != null && userOrganizationId == 2827L) {
if (frontendOrganizationId != null) {
billManageDO.setOrganizationId(frontendOrganizationId);
billManageDO.setTopOrganizationId(null);
} else {
billManageDO.setOrganizationId(null);
billManageDO.setTopOrganizationId(null);
}
} else {
if (frontendOrganizationId != null && userOrganizationId != null) {
if (!frontendOrganizationId.equals(userOrganizationId)) {
billManageDO.setOrganizationId(userOrganizationId);
}
} else {
if (userOrganizationId != null) {
billManageDO.setOrganizationId(userOrganizationId);
}
}
if (billManageDO.getOrganizationId() == null) {
Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId();
if (topOrganizationId != null && topOrganizationId != 1) {
billManageDO.setTopOrganizationId(topOrganizationId);
}
} else {
billManageDO.setTopOrganizationId(2827L);
}
}
}
List<CustomerMonthBillVO> list = billManageDomainService.queryCustomerMonthBillList(billManageDO);
// 计算付款状态
for (CustomerMonthBillVO vo : list) {
BigDecimal totalAmount = vo.getTotalBillAmount() != null ? vo.getTotalBillAmount() : BigDecimal.ZERO;
BigDecimal settledAmount = vo.getTotalSettledAmount() != null ? vo.getTotalSettledAmount() : BigDecimal.ZERO;
if (totalAmount.compareTo(BigDecimal.ZERO) == 0) {
vo.setPaymentStatus(3);
vo.setPaymentStatusName("已付款");
} else if (settledAmount.compareTo(BigDecimal.ZERO) == 0) {
vo.setPaymentStatus(1);
vo.setPaymentStatusName("未付款");
} else if (settledAmount.compareTo(totalAmount) >= 0) {
vo.setPaymentStatus(3);
vo.setPaymentStatusName("已付款");
} else {
vo.setPaymentStatus(2);
vo.setPaymentStatusName("部分付款");
}
}
return list;
}
}
@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
import com.mhd.bms.domain.billManage.entity.BillManage;
import com.mhd.bms.domain.billManage.repository.po.BillManagePO;
import com.mhd.bms.domain.billManage.repository.todo.BillManageDO;
import com.mhd.bms.interfaces.dto.billManage.CustomerMonthBillVO;
import java.util.List;
@@ -20,6 +21,11 @@ public interface IBillManageService extends IService<BillManage>
*/
public List<BillManagePO> queryList(BillManageDO billManageDO);
/**
* 客户每月账单分组查询
*/
public List<CustomerMonthBillVO> queryCustomerMonthBillList(BillManageDO billManageDO);
/**
* 新增账单管理
*/
@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mhd.bms.domain.billManage.entity.BillManage;
import com.mhd.bms.domain.billManage.repository.po.BillManagePO;
import com.mhd.bms.domain.billManage.repository.todo.BillManageDO;
import com.mhd.bms.interfaces.dto.billManage.CustomerMonthBillVO;
import org.apache.ibatis.annotations.Param;
/**
* 账单管理Mapper接口
@@ -19,6 +20,11 @@ public interface BillManageMapper extends BaseMapper<BillManage>
*/
public List<BillManagePO> queryList(@Param("billManageDO") BillManageDO billManageDO);
/**
* 客户每月账单分组查询
*/
public List<CustomerMonthBillVO> queryCustomerMonthBillList(@Param("billManageDO") BillManageDO billManageDO);
String getInvoiceItemName(@Param("invoiceItemId") String invoiceItemId);
String getInvoiceItemNcCode(@Param("invoiceItemId") String invoiceItemId);
@@ -31,6 +31,7 @@ import com.mhd.bms.domain.settlementCustomers.entity.SettlementCustomers;
import com.mhd.bms.domain.settlementCustomers.repository.facade.ISettlementCustomersService;
import com.mhd.bms.interfaces.dto.billManage.BillDetailDTO;
import com.mhd.bms.interfaces.dto.billManage.BillManageDTO;
import com.mhd.bms.interfaces.dto.billManage.CustomerMonthBillVO;
import com.mhd.common.core.domain.dto.ReconciliationDTO;
import com.mhd.common.core.domain.dto.nc.*;
import com.mhd.common.core.domain.entity.R;
@@ -1504,4 +1505,9 @@ public class BillManageImpl extends ServiceImpl<BillManageMapper, BillManage> im
return 0;
}
@Override
public List<CustomerMonthBillVO> queryCustomerMonthBillList(BillManageDO billManageDO) {
return billManageMapper.queryCustomerMonthBillList(billManageDO);
}
}
@@ -266,4 +266,7 @@ public class BillManageDO extends BaseVOEntity{
private String paymentAccountName;
@ApiModelProperty("业务员ID")
private String salesmanId;
@ApiModelProperty("账单月份(yyyy-MM,按创建时间月份筛选,用于客户月账单分组查询)")
private String billMonth;
}
@@ -12,6 +12,7 @@ import com.mhd.bms.domain.billManage.repository.facade.IBillManageService;
import com.mhd.bms.domain.billManage.repository.po.BillManagePO;
import com.mhd.bms.domain.billManage.repository.todo.BillDetailDO;
import com.mhd.bms.domain.billManage.repository.todo.BillManageDO;
import com.mhd.bms.interfaces.dto.billManage.CustomerMonthBillVO;
import com.mhd.bms.domain.billOperationLog.entity.BillOperationLog;
import com.mhd.bms.domain.billOperationLog.repository.todo.BillOperationLogDO;
import com.mhd.bms.domain.billOperationLog.service.BillOperationLogDomainService;
@@ -776,4 +777,11 @@ public class BillManageDomainService {
{
return billManageService.synchronousNcSK(businessDocumentDetaliIds);
}
/**
* 客户每月账单分组查询
*/
public List<CustomerMonthBillVO> queryCustomerMonthBillList(BillManageDO billManageDO) {
return billManageService.queryCustomerMonthBillList(billManageDO);
}
}
@@ -276,4 +276,7 @@ public class BillManageDTO extends BaseVOEntity{
private String paymentAccountId;
@ApiModelProperty("收款帐户名称")
private String paymentAccountName;
@ApiModelProperty("账单月份(yyyy-MM,按创建时间月份筛选,用于客户月账单分组查询)")
private String billMonth;
}
@@ -0,0 +1,65 @@
package com.mhd.bms.interfaces.dto.billManage;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
@Data
@ApiModel(value = "客户月账单VO", description = "客户每月账单分组统计信息")
public class CustomerMonthBillVO implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty("结算对象id")
private Long settlementCustomersId;
@ApiModelProperty("结算对象code")
private String settlementCustomersCode;
@ApiModelProperty("结算对象/客户名称")
private String settlementEntity;
@ApiModelProperty("结算主体id")
private Long settlementEntityId;
@ApiModelProperty("结算主体")
private String settlementEntityName;
@ApiModelProperty("组织ID")
private Long organizationId;
@ApiModelProperty("组织名称")
private String organizationName;
@ApiModelProperty("账单月份(yyyy-MM")
private String billMonth;
@ApiModelProperty("账单总金额合计")
private BigDecimal totalBillAmount;
@ApiModelProperty("已收金额合计")
private BigDecimal totalSettledAmount;
@ApiModelProperty("未收金额合计")
private BigDecimal totalUnsettledAmount;
@ApiModelProperty("账单数量")
private Integer billCount;
@ApiModelProperty("付款状态(1-未付款,2-部分付款,3-已付款)")
private Integer paymentStatus;
@ApiModelProperty("付款状态名称")
private String paymentStatusName;
@ApiModelProperty("应收账单id列表(逗号拼接)")
private String billManageIds;
@ApiModelProperty("结算方式")
private String settlementMethod;
@ApiModelProperty("默认结算币种")
private String settlementCurrency;
}
@@ -3,6 +3,7 @@ package com.mhd.bms.interfaces.facadeApi;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.math.BigDecimal;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -31,6 +32,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.web.bind.annotation.*;
import com.mhd.bms.interfaces.dto.billManage.BillManageDTO;
import com.mhd.bms.interfaces.dto.billManage.CustomerMonthBillVO;
import com.mhd.bms.domain.billManage.repository.todo.BillManageDO;
import com.mhd.bms.domain.billManage.repository.po.BillManagePO;
import com.mhd.bms.interfaces.assembler.billManage.BillManageAssembler;
@@ -84,6 +86,72 @@ public class BillManageApi extends BaseController{
return AjaxResult.success(billManageApplicationService.listCount(billManageDO));
}
/**
* 客户每月账单分组列表(应收)
*/
@ApiOperation("客户每月账单分组列表")
@GetMapping("/receivableCustomerMonthList")
public TableDataInfo receivableCustomerMonthList(BillManageDTO billManageDTO)
{
BillManageDO billManageDO = new BillManageDO();
BeanUtils.copyProperties(billManageDTO, billManageDO);
billManageDO.setBillType(1);
startPage();
List<CustomerMonthBillVO> list = billManageApplicationService.queryCustomerMonthBillList(billManageDO);
return getDataTable(list);
}
/**
* 客户每月账单分组列表统计(应收)
*/
@ApiOperation("客户每月账单分组列表统计")
@GetMapping(value = "/receivableCustomerMonthListCount")
public AjaxResult receivableCustomerMonthListCount(BillManageDTO billManageDTO)
{
BillManageDO billManageDO = new BillManageDO();
BeanUtils.copyProperties(billManageDTO, billManageDO);
billManageDO.setBillType(1);
List<CustomerMonthBillVO> list = billManageApplicationService.queryCustomerMonthBillList(billManageDO);
BigDecimal totalBillAmount = list.stream()
.map(CustomerMonthBillVO::getTotalBillAmount)
.filter(java.util.Objects::nonNull)
.reduce(java.math.BigDecimal.ZERO, java.math.BigDecimal::add);
BigDecimal totalSettledAmount = list.stream()
.map(CustomerMonthBillVO::getTotalSettledAmount)
.filter(java.util.Objects::nonNull)
.reduce(java.math.BigDecimal.ZERO, java.math.BigDecimal::add);
BigDecimal totalUnsettledAmount = list.stream()
.map(CustomerMonthBillVO::getTotalUnsettledAmount)
.filter(java.util.Objects::nonNull)
.reduce(java.math.BigDecimal.ZERO, java.math.BigDecimal::add);
java.util.Map<String, Object> resultMap = new java.util.HashMap<>();
resultMap.put("totalBillAmount", totalBillAmount);
resultMap.put("totalSettledAmount", totalSettledAmount);
resultMap.put("totalUnsettledAmount", totalUnsettledAmount);
resultMap.put("totalCount", list.size());
return AjaxResult.success(resultMap);
}
/**
* 根据账单ID列表查询应收账单详情(客户月账单点击账单数量回显)
*/
@ApiOperation("根据账单ID列表查询应收账单详情")
@GetMapping("/receivableDetailByMonth")
public TableDataInfo receivableDetailByMonth(BillManageDTO billManageDTO)
{
if (billManageDTO.getBillManageIds() != null && !billManageDTO.getBillManageIds().isEmpty()) {
Set<String> idSet = java.util.Arrays.stream(billManageDTO.getBillManageIds().split(","))
.collect(java.util.stream.Collectors.toSet());
billManageDTO.setBillManageIdSet(idSet);
}
BillManageDO billManageDO = new BillManageDO();
BeanUtils.copyProperties(billManageDTO, billManageDO);
billManageDO.setBillType(1);
startPage();
List<BillManagePO> list = billManageApplicationService.queryList(billManageDO);
return getDataTable(list);
}
@ApiOperation("导出应收账单")
@GetMapping(value = "/exportReceivableList", produces = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
public void exportReceivableList(BillManageDTO billManageDTO, HttpServletResponse response) throws IOException
@@ -22,7 +22,35 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
ORDER BY a.create_time DESC
</select>
<select id="queryCustomerMonthBillList" parameterType="com.mhd.bms.domain.billManage.repository.todo.BillManageDO" resultType="com.mhd.bms.interfaces.dto.billManage.CustomerMonthBillVO">
SELECT
a.SETTLEMENT_CUSTOMERS_ID AS settlementCustomersId,
a.SETTLEMENT_CUSTOMERS_CODE AS settlementCustomersCode,
a.SETTLEMENT_ENTITY AS settlementEntity,
b.SETTLEMENT_ENTITY_ID AS settlementEntityId,
b.SETTLEMENT_ENTITY AS settlementEntityName,
a.ORGANIZATION_ID AS organizationId,
a.ORGANIZATION_NAME AS organizationName,
DATE_FORMAT(a.CREATE_TIME, '%Y-%m') AS billMonth,
SUM(a.BILL_AMOUNT) AS totalBillAmount,
SUM(IFNULL(a.BILL_AMOUNT_SETTLEMENT, 0)) AS totalSettledAmount,
SUM(IFNULL(a.BILL_AMOUNT_UNSETTLED, 0)) AS totalUnsettledAmount,
COUNT(*) AS billCount,
GROUP_CONCAT(a.BILL_MANAGE_ID) AS billManageIds,
b.SETTLEMENT_METHOD AS settlementMethod,
b.SETTLEMENT_CURRENCY AS settlementCurrency
FROM bill_manage a
LEFT JOIN SETTLEMENT_CUSTOMERS b ON a.SETTLEMENT_CUSTOMERS_ID = b.SETTLEMENT_CUSTOMERS_ID AND b.del_flag = 1
WHERE a.del_flag = 1
<include refid="common_where"/>
GROUP BY a.SETTLEMENT_CUSTOMERS_ID, DATE_FORMAT(a.CREATE_TIME, '%Y-%m')
ORDER BY a.CREATE_TIME DESC
</select>
<sql id="common_where">
<if test="billManageDO.billMonth != null and billManageDO.billMonth != ''">
AND DATE_FORMAT(a.CREATE_TIME, '%Y-%m') = #{billManageDO.billMonth}
</if>
<if test="billManageDO.createTimeStart != null and billManageDO.createTimeStart != ''">
AND date_format(a.create_time,'%Y-%m-%d') <![CDATA[>=]]> #{billManageDO.createTimeStart}
</if>