Browse Source

[feat]

财务管理 应收账款
修改应收账款实体类,修改金额字段类型,修改导出字段,新增结案原因字段;
修改应收账款导出账单和导出收款凭证controller接口,实现多选导出,新增结案controller接口;
修改编辑应收账款新增收款凭证service方法、销售订单审批完成后生成财务应收账款service方法、结案方法和处理付款记录导出service方法,新增批量查询service方法;
修改应付账款mapper,新增字段,修改list查询方法,新增根据单号批量查询方法;
新增根据单号批量查找收款记录service和mapper方法;
dev
王晓迪 2 months ago
parent
commit
dca244ec03
  1. 130
      ruoyi-admin/src/main/java/com/ruoyi/financial/controller/FinancialReceivablesController.java
  2. 48
      ruoyi-admin/src/main/java/com/ruoyi/financial/domain/FinancialReceivables.java
  3. 3
      ruoyi-admin/src/main/java/com/ruoyi/financial/mapper/FinancialReceivablesMapper.java
  4. 4
      ruoyi-admin/src/main/java/com/ruoyi/financial/mapper/FinancialReceivablesRecordsMapper.java
  5. 4
      ruoyi-admin/src/main/java/com/ruoyi/financial/service/IFinancialReceivablesRecordsService.java
  6. 5
      ruoyi-admin/src/main/java/com/ruoyi/financial/service/IFinancialReceivablesService.java
  7. 6
      ruoyi-admin/src/main/java/com/ruoyi/financial/service/impl/FinancialReceivablesRecordsServiceImpl.java
  8. 89
      ruoyi-admin/src/main/java/com/ruoyi/financial/service/impl/FinancialReceivablesServiceImpl.java
  9. 19
      ruoyi-admin/src/main/resources/mapper/financial/FinancialReceivablesMapper.xml
  10. 9
      ruoyi-admin/src/main/resources/mapper/financial/FinancialReceivablesRecordsMapper.xml

130
ruoyi-admin/src/main/java/com/ruoyi/financial/controller/FinancialReceivablesController.java

@ -3,10 +3,9 @@ package com.ruoyi.financial.controller;
import java.io.*; import java.io.*;
import java.net.URLEncoder; import java.net.URLEncoder;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.Collections; import java.util.*;
import java.util.HashMap; import java.util.stream.Collectors;
import java.util.List; import java.util.stream.IntStream;
import java.util.Map;
import com.alibaba.excel.EasyExcel; import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter; import com.alibaba.excel.ExcelWriter;
@ -14,14 +13,21 @@ import com.alibaba.excel.write.builder.ExcelWriterBuilder;
import com.alibaba.excel.write.metadata.WriteSheet; import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.excel.write.metadata.fill.FillConfig; import com.alibaba.excel.write.metadata.fill.FillConfig;
import com.alibaba.excel.write.metadata.fill.FillWrapper; import com.alibaba.excel.write.metadata.fill.FillWrapper;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.text.Convert;
import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.ShiroUtils; import com.ruoyi.common.utils.ShiroUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.file.FileDownloadUtils; import com.ruoyi.common.utils.file.FileDownloadUtils;
import com.ruoyi.financial.domain.FinancialReceivablesRecords; import com.ruoyi.financial.domain.FinancialReceivablesRecords;
import com.ruoyi.financial.domain.VO.ExportFinancialReceivablesVo; import com.ruoyi.financial.domain.VO.ExportFinancialReceivablesVo;
import com.ruoyi.financial.service.IFinancialReceivablesRecordsService; import com.ruoyi.financial.service.IFinancialReceivablesRecordsService;
import com.ruoyi.framework.web.service.DictService; import com.ruoyi.framework.web.service.DictService;
import com.ruoyi.system.domain.BaseExpenseAccountChild;
import com.ruoyi.system.domain.SysMakeorderPickVo;
import com.ruoyi.system.service.ISysUserService;
import org.apache.avalon.framework.service.ServiceException; import org.apache.avalon.framework.service.ServiceException;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.*; import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook;
@ -30,6 +36,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.ClassPathResource;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap; import org.springframework.ui.ModelMap;
import org.springframework.util.ResourceUtils;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import com.ruoyi.common.annotation.Log; import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.enums.BusinessType;
@ -94,11 +101,19 @@ public class FinancialReceivablesController extends BaseController
@Log(title = "财务应收账款", businessType = BusinessType.EXPORT) @Log(title = "财务应收账款", businessType = BusinessType.EXPORT)
@PostMapping("/export") @PostMapping("/export")
@ResponseBody @ResponseBody
public AjaxResult export(FinancialReceivables financialReceivables) public AjaxResult export(FinancialReceivables financialReceivables, String ids)
{ {
if (org.springframework.util.StringUtils.isEmpty(ids)){
List<FinancialReceivables> list = financialReceivablesService.selectFinancialReceivablesList(financialReceivables); List<FinancialReceivables> list = financialReceivablesService.selectFinancialReceivablesList(financialReceivables);
ExcelUtil<FinancialReceivables> util = new ExcelUtil<FinancialReceivables>(FinancialReceivables.class); ExcelUtil<FinancialReceivables> util = new ExcelUtil<FinancialReceivables>(FinancialReceivables.class);
return util.exportExcel(list, "财务应收账款数据"); return util.exportExcel(list, "财务应收账款数据");
}else {
String[] codes = ids.split(",");
List<FinancialReceivables> list = financialReceivablesService.selectFinancialReceivablesByNos(codes);
ExcelUtil<FinancialReceivables> util = new ExcelUtil<FinancialReceivables>(FinancialReceivables.class);
return util.exportExcel(list, ids);
}
} }
/** /**
@ -161,18 +176,19 @@ public class FinancialReceivablesController extends BaseController
/**导出收款凭证*/ /**导出收款凭证*/
@RequiresPermissions("financial:receivables:export") @RequiresPermissions("financial:receivables:export")
@Log(title = "财务应收账款凭证", businessType = BusinessType.EXPORT) @Log(title = "财务应收账款凭证", businessType = BusinessType.EXPORT)
@GetMapping("/excelReceivablesVoucher/{financialReceivablesId}") @GetMapping("/excelReceivablesVoucher")
public void excelReceivablesVoucher(@PathVariable("financialReceivablesId") Long financialReceivablesId,HttpServletResponse response) throws IOException { public void excelReceivablesVoucher(@RequestParam("financialReceivablesId") Long financialReceivablesId,@RequestParam("ids") String ids, HttpServletResponse response) throws IOException {
FinancialReceivables financialReceivables = financialReceivablesService.selectFinancialReceivablesById(financialReceivablesId); FinancialReceivables financialReceivables = financialReceivablesService.selectFinancialReceivablesById(financialReceivablesId);
List<FinancialReceivablesRecords> financialReceivablesRecordsList = receivablesRecordsService.selectFinancialReceivablesRecordsListByCode(financialReceivables.getFinancialReceivablesCode()); List<FinancialReceivablesRecords> financialReceivablesRecordsList = receivablesRecordsService.selectFinancialReceivablesRecordsListByCode(financialReceivables.getFinancialReceivablesCode());
// if(StringUtils.isNotEmpty(ids)){
// Map<String, Object> map = financialReceivablesService.exportTemplate(financialReceivablesRecordsList); financialReceivablesRecordsList = receivablesRecordsService.selectFinancialReceivablesRecordsListByIds(Convert.toStrArray(ids));
}
// 模版位置 // 模版位置
String name = "FinancialReceiptVoucherTemplate.xlsx"; String name = "FinancialReceiptVoucherTemplate.xlsx";
FileDownloadUtils fileDownloadUtils = new FileDownloadUtils(); FileDownloadUtils fileDownloadUtils = new FileDownloadUtils();
//获取文件的绝对路径 //获取文件的绝对路径
String fileAbsolutePath = fileDownloadUtils.getFileAbsolutePath(name); String fileAbsolutePath = fileDownloadUtils.getFileAbsolutePath(name);
File file = ResourceUtils.getFile(fileAbsolutePath);
String fileName = DateUtils.dateTimeNow() + financialReceivables.getFinancialReceivablesCode() +"收款凭证.xlsx"; String fileName = DateUtils.dateTimeNow() + financialReceivables.getFinancialReceivablesCode() +"收款凭证.xlsx";
// 设置响应头,指定文件名和文件类型 // 设置响应头,指定文件名和文件类型
@ -180,30 +196,62 @@ public class FinancialReceivablesController extends BaseController
response.setContentType("application/octet-stream"); response.setContentType("application/octet-stream");
// 获取模板文件的输入流,引用绝对路径上的模版 // 获取模板文件的输入流,引用绝对路径上的模版
// 创建一个ExcelWriterBuilder对象,并指定输出流和输入流 // 创建一个ExcelWriterBuilder对象,并指定输出流和输入流
// 每页最多显示的行数
ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).withTemplate(fileAbsolutePath).build();
final int maxRowsPerPage = 6; final int maxRowsPerPage = 6;
// 计算需要多少页 // 计算需要多少页
int totalPages = (int) Math.ceil((double) financialReceivablesRecordsList.size() / maxRowsPerPage); int totalPages = (int) Math.ceil((double) financialReceivablesRecordsList.size() / maxRowsPerPage);
for (int i = 0; i < totalPages - 1; i++) {
List<FinancialReceivablesRecords> financialReceivablesRecordsListPage = List<FinancialReceivablesRecords> receivablesRecordsList = financialReceivablesRecordsList;
receivablesRecordsService.selectFinancialReceivablesRecordsListByCodePage(financialReceivables.getFinancialReceivablesCode(), i + 1, maxRowsPerPage);
Map<String, Object> map = financialReceivablesService.exportTemplate(financialReceivablesRecordsListPage); List<List<FinancialReceivablesRecords>> pages = IntStream.range(0, totalPages)
Map<String, Object> map1 = new HashMap<>(); .mapToObj(i -> receivablesRecordsList.subList(
map1.put("debitAccount",dictService.getLabel("receivables_debit_entry", financialReceivables.getDebitAccount())); i * maxRowsPerPage,
Math.min((i + 1) * maxRowsPerPage, receivablesRecordsList.size())))
.collect(Collectors.toList());
// 重新制作导出模板
XSSFWorkbook workbook = null;
if (file.exists()) {
try {
workbook = new XSSFWorkbook(file);
for (int i = 0; i < totalPages; i++) {
if (i == 0) {
workbook.setSheetName(i, "sheet" + (i + 1));
} else {
workbook.cloneSheet(0, "sheet" + (i + 1));
}
}
} catch (InvalidFormatException e) {
throw new RuntimeException(e);
}
}
//写到流里
ByteArrayOutputStream bos = new ByteArrayOutputStream();
workbook.write(bos);
byte[] bArray = bos.toByteArray();
InputStream is = new ByteArrayInputStream(bArray);
// 这里 会填充到第一个sheet, 然后文件流会自动关闭
ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).withTemplate(is).build();
for (int i = 0; i < totalPages; i++) {
List<FinancialReceivablesRecords> receivablesRecordsListPage = pages.get(i);
Map<String, Object> map = financialReceivablesService.exportTemplate(receivablesRecordsListPage);
map.put("debitAccount", financialReceivables.getDebitAccount());
map.put("debitBank", financialReceivables.getDebitBank());
String date = DateUtils.getDate(); String date = DateUtils.getDate();
String[] dateArray = date.split("-"); String[] dateArray = date.split("-");
map1.put("year", dateArray[0]); map.put("year", dateArray[0]);
map1.put("month", dateArray[1]); map.put("month", dateArray[1]);
map1.put("day", dateArray[2]); map.put("day", dateArray[2]);
map1.put("debitBank", dictService.getLabel("receivables_bank", financialReceivables.getOpenBank())); SysUser loginUser = ShiroUtils.getSysUser();
map1.put("loginName", ShiroUtils.getLoginName()); map.put("loginName", loginUser.getUserName());
// 创建一个WriteSheet对象,并指定模板中的Sheet编号 // 创建一个WriteSheet对象,并指定模板中的Sheet编号
WriteSheet writeSheet = EasyExcel.writerSheet("sheet" + (i + 1)).build(); WriteSheet writeSheet = EasyExcel.writerSheet("sheet" + (i + 1)).build();
FillConfig fillConfig = FillConfig.builder().forceNewRow(false).build(); FillConfig fillConfig = FillConfig.builder().forceNewRow(false).build();
excelWriter.fill(map1,fillConfig, writeSheet); excelWriter.fill(map, writeSheet);
excelWriter.fill(map.get("list"), fillConfig, writeSheet); excelWriter.fill(map.get("list"), fillConfig, writeSheet);
excelWriter.fill(map.get("amount"), writeSheet);
} }
excelWriter.finish(); excelWriter.finish();
} }
@ -258,18 +306,6 @@ public class FinancialReceivablesController extends BaseController
} }
/**
* 结案
*/
@RequiresPermissions("financial:receivables:receivablesClosing")
@Log(title = "财务应收账款", businessType = BusinessType.UPDATE)
@GetMapping( "/receivablesClosing/{financialReceivablesId}")
@ResponseBody
public AjaxResult receivablesClosing(@PathVariable("financialReceivablesId") Long financialReceivablesId){
return toAjax(financialReceivablesService.closingFinancialReceivablesById(financialReceivablesId));
}
/** /**
* 应收款账单详情 * 应收款账单详情
*/ */
@ -345,4 +381,24 @@ public class FinancialReceivablesController extends BaseController
{ {
return AjaxResult.success( financialReceivablesService.updateReceivableDebit(financialReceivables)); return AjaxResult.success( financialReceivablesService.updateReceivableDebit(financialReceivables));
} }
/**
* 应收款账单结案
*/
@GetMapping("/closed/{financialReceivablesId}")
public String receivablesClosed(@PathVariable("financialReceivablesId") Long financialReceivablesId, ModelMap mmap)
{
FinancialReceivables financialReceivables = financialReceivablesService.selectFinancialReceivablesById(financialReceivablesId);
mmap.put("financialReceivables", financialReceivables);
return prefix + "/closed";
}
/**
* 保存应收账款结案
*/
@PostMapping("/closed")
@ResponseBody
public AjaxResult saveClosed(FinancialReceivables financialReceivables)
{
return toAjax(financialReceivablesService.closingFinancialReceivables(financialReceivables));
}
} }

48
ruoyi-admin/src/main/java/com/ruoyi/financial/domain/FinancialReceivables.java

@ -32,31 +32,32 @@ public class FinancialReceivables extends BaseEntity
private String financialReceivablesCode; private String financialReceivablesCode;
/** 收款结案状态 (0 待付款,1 部分付款,2 已结案) */ /** 收款结案状态 (0 待付款,1 部分付款,2 已结案) */
@Excel(name = "收款结案状态",readConverterExp = "0=待付款,1=部分付款,2=已结案") @Excel(name = "收款结案状态",dictType = "receivables_closing_status")
private String receivablesClosingStatus; private String receivablesClosingStatus;
/** 关联销售订单号 */ /** 关联销售订单号 */
@Excel(name = "关联销售订单号") @Excel(name = "关联销售订单号")
private String salesOrderCode; private String salesOrderCode;
/*借方科目*/ /*借方科目*/
@Excel(name = "借方科目", readConverterExp="0=银行存款,1=现金") @Excel(name = "借方科目")
private String debitAccount; private String debitAccount;
@Excel(name = "借方开户银行" ,readConverterExp="0=中行基本户,建行一般户")
@Excel(name = "借方开户银行")
private String debitBank; private String debitBank;
/** 贷方科目 */ /** 贷方科目 */
@Excel(name = "贷方科目") // @Excel(name = "贷方科目")
private String creditAccount; private String creditAccount;
/** 贷方明细 */ /** 贷方明细 */
@Excel(name = "贷方明细") // @Excel(name = "贷方明细")
private String creditDetail; private String creditDetail;
/** 开户银行 */ /** 开户银行 */
@Excel(name = "开户银行") // @Excel(name = "开户银行")
private String openBank; private String openBank;
/** 开户账号 */ /** 借方账户 */
@Excel(name = "开户账号") // @Excel(name = "借方账户")
private String openAccount; private String openAccount;
/** 客户ID */ /** 客户ID */
@ -64,14 +65,15 @@ public class FinancialReceivables extends BaseEntity
private String customerId; private String customerId;
/** 客户名称 */ /** 客户名称 */
@Excel(name = "客户名称")
private String customerName; private String customerName;
/** 合同编号 */ /** 合同编号 */
@Excel(name = "合同编号") // @Excel(name = "合同编号")
private String contractNumber; private String contractNumber;
/** 币种 */ /** 币种 */
@Excel(name = "币种") @Excel(name = "币种",dictType = "sys_common_currency")
private String currencyType; private String currencyType;
/** 不含税金额 */ /** 不含税金额 */
@ -88,31 +90,31 @@ public class FinancialReceivables extends BaseEntity
/** 实收含税金额 */ /** 实收含税金额 */
@Excel(name = "实收含税金额") @Excel(name = "实收含税金额")
private String receivedIncludesTax; private BigDecimal receivedIncludesTax;
/** 未收含税金额 */ /** 未收含税金额 */
@Excel(name = "未收含税金额") @Excel(name = "未收含税金额")
private String notReceivedIncludesTax; private BigDecimal notReceivedIncludesTax;
/** 业务人员 */ /** 业务人员 */
@Excel(name = "业务人员") @Excel(name = "业务人员")
private String businessMembers; private String businessMembers;
/** 发货状态(0 待发货,1 部分发货,2 全部发货,3 客户已验收) */ /** 发货状态(0 待发货,1 部分发货,2 全部发货,3 客户已验收) */
@Excel(name = "发货状态",readConverterExp = "0=待发货,1=部分发货,2=全部发货,3=客户已验收") @Excel(name = "发货状态",dictType = "financial_deliver_status")
private String financialDeliverStatus; private String financialDeliverStatus;
/** 收款日期 */ /** 收款日期 */
@JsonFormat(pattern = "yyyy-MM-dd") @JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "收款日期", width = 30, dateFormat = "yyyy-MM-dd") // @Excel(name = "收款日期", width = 30, dateFormat = "yyyy-MM-dd")
private Date receivablesDate; private Date receivablesDate;
/** 收款金额 */ /** 收款金额 */
@Excel(name = "收款金额") // @Excel(name = "收款金额")
private BigDecimal receivablesPrice; private BigDecimal receivablesPrice;
/** 收款摘要 */ /** 收款摘要 */
@Excel(name = "收款摘要") // @Excel(name = "收款摘要")
private String receivablesAbstract; private String receivablesAbstract;
/** 操作时间 */ /** 操作时间 */
@ -128,9 +130,13 @@ public class FinancialReceivables extends BaseEntity
private String day; private String day;
/** 收款备注 */ /** 收款备注 */
@Excel(name = "收款备注") // @Excel(name = "收款备注")
private String receivablesRemark; private String receivablesRemark;
/** 结案原因 */
@Excel(name = "结案原因")
private String closedReason;
public String getYear() { public String getYear() {
return year; return year;
} }
@ -295,21 +301,21 @@ public class FinancialReceivables extends BaseEntity
{ {
return paymentCondition; return paymentCondition;
} }
public void setReceivedIncludesTax(String receivedIncludesTax) public void setReceivedIncludesTax(BigDecimal receivedIncludesTax)
{ {
this.receivedIncludesTax = receivedIncludesTax; this.receivedIncludesTax = receivedIncludesTax;
} }
public String getReceivedIncludesTax() public BigDecimal getReceivedIncludesTax()
{ {
return receivedIncludesTax; return receivedIncludesTax;
} }
public void setNotReceivedIncludesTax(String notReceivedIncludesTax) public void setNotReceivedIncludesTax(BigDecimal notReceivedIncludesTax)
{ {
this.notReceivedIncludesTax = notReceivedIncludesTax; this.notReceivedIncludesTax = notReceivedIncludesTax;
} }
public String getNotReceivedIncludesTax() public BigDecimal getNotReceivedIncludesTax()
{ {
return notReceivedIncludesTax; return notReceivedIncludesTax;
} }

3
ruoyi-admin/src/main/java/com/ruoyi/financial/mapper/FinancialReceivablesMapper.java

@ -88,4 +88,7 @@ public interface FinancialReceivablesMapper
* 结案 * 结案
*/ */
public int updateReceivablesClosingStatusById(Long financialReceivablesId); public int updateReceivablesClosingStatusById(Long financialReceivablesId);
/*批量查询*/
public List<FinancialReceivables> selectFinancialReceivablesByNos(String[] ids);
} }

4
ruoyi-admin/src/main/java/com/ruoyi/financial/mapper/FinancialReceivablesRecordsMapper.java

@ -86,4 +86,8 @@ public interface FinancialReceivablesRecordsMapper
List<FinancialReceivablesRecords> selectFinancialReceivablesRecordsListByCode(String financialReceivablesCode); List<FinancialReceivablesRecords> selectFinancialReceivablesRecordsListByCode(String financialReceivablesCode);
List<FinancialReceivablesRecords> selectFinancialReceivablesRecordsListByCodePage(Map<String, Object> paramsMap); List<FinancialReceivablesRecords> selectFinancialReceivablesRecordsListByCodePage(Map<String, Object> paramsMap);
/*
* 根据单号批量查找*/
List<FinancialReceivablesRecords> selectFinancialReceivablesRecordsListByIds(String[] receivablesRecordsIds);
} }

4
ruoyi-admin/src/main/java/com/ruoyi/financial/service/IFinancialReceivablesRecordsService.java

@ -80,4 +80,8 @@ public interface IFinancialReceivablesRecordsService
List<FinancialReceivablesRecords> selectFinancialReceivablesRecordsListByCodePage(String financialReceivablesCode, int pageNum, int pageSize); List<FinancialReceivablesRecords> selectFinancialReceivablesRecordsListByCodePage(String financialReceivablesCode, int pageNum, int pageSize);
/*
* 根据单号批量查找*/
List<FinancialReceivablesRecords> selectFinancialReceivablesRecordsListByIds(String[] receivablesRecordsIds);
} }

5
ruoyi-admin/src/main/java/com/ruoyi/financial/service/IFinancialReceivablesService.java

@ -82,7 +82,7 @@ public interface IFinancialReceivablesService
/** /**
* 结案 * 结案
* */ * */
int closingFinancialReceivablesById(Long financialReceivablesId); int closingFinancialReceivables(FinancialReceivables financialReceivables);
/* /*
* 应收账款详情 * 应收账款详情
@ -102,4 +102,7 @@ public interface IFinancialReceivablesService
Map<String, Object> exportTemplate(List<FinancialReceivablesRecords> financialReceivablesRecordsList) throws IOException; Map<String, Object> exportTemplate(List<FinancialReceivablesRecords> financialReceivablesRecordsList) throws IOException;
Integer updateReceivableDebit(FinancialReceivables financialReceivables); Integer updateReceivableDebit(FinancialReceivables financialReceivables);
/*批量查询*/
public List<FinancialReceivables> selectFinancialReceivablesByNos(String[] ids);
} }

6
ruoyi-admin/src/main/java/com/ruoyi/financial/service/impl/FinancialReceivablesRecordsServiceImpl.java

@ -153,4 +153,10 @@ public class FinancialReceivablesRecordsServiceImpl implements IFinancialReceiva
map.put("pageSize",pageSize); map.put("pageSize",pageSize);
return financialReceivablesRecordsMapper.selectFinancialReceivablesRecordsListByCodePage(map); return financialReceivablesRecordsMapper.selectFinancialReceivablesRecordsListByCodePage(map);
} }
/*
* 根据单号批量查找*/
public List<FinancialReceivablesRecords> selectFinancialReceivablesRecordsListByIds(String[] receivablesRecordsIds){
return financialReceivablesRecordsMapper.selectFinancialReceivablesRecordsListByIds(receivablesRecordsIds);
}
} }

89
ruoyi-admin/src/main/java/com/ruoyi/financial/service/impl/FinancialReceivablesServiceImpl.java

@ -120,30 +120,62 @@ public class FinancialReceivablesServiceImpl implements IFinancialReceivablesSer
* @param financialReceivables 财务应收账款 * @param financialReceivables 财务应收账款
* @return 结果 * @return 结果
*/ */
@Transactional @Transactional(rollbackFor = Exception.class)
@Override @Override
public int updateFinancialReceivables(FinancialReceivables financialReceivables) public int updateFinancialReceivables(FinancialReceivables financialReceivables)
{ {
String loginName = ShiroUtils.getLoginName(); String loginName = ShiroUtils.getLoginName();
financialReceivables.setUpdateBy(loginName);
financialReceivables.setUpdateTime(DateUtils.getNowDate());
List<FinancialReceivablesRecordsVO> receivablesRecordsVOList = financialReceivables.getReceivablesRecordsVOList(); List<FinancialReceivablesRecordsVO> receivablesRecordsVOList = financialReceivables.getReceivablesRecordsVOList();
if (StringUtils.isEmpty(receivablesRecordsVOList)){ if (StringUtils.isEmpty(receivablesRecordsVOList)){
log.warn("收款记录数据为空"); log.warn("收款记录数据为空");
} }
FinancialReceivables originReceivables = financialReceivablesMapper.selectFinancialReceivablesById(financialReceivables.getFinancialReceivablesId());
BigDecimal receivedNum = Optional.ofNullable(originReceivables.getReceivedIncludesTax()).orElse(BigDecimal.ZERO);
BigDecimal priceIncludTax = Optional.ofNullable(originReceivables.getPriceIncludesTax()).orElse(BigDecimal.ZERO);
for (FinancialReceivablesRecordsVO financialReceivablesRecordsVO : receivablesRecordsVOList) { for (FinancialReceivablesRecordsVO financialReceivablesRecordsVO : receivablesRecordsVOList) {
FinancialReceivablesRecords receivablesRecords = new FinancialReceivablesRecords(); FinancialReceivablesRecords receivablesRecords = new FinancialReceivablesRecords();
receivablesRecords.setCreateBy(loginName); receivablesRecords.setCreateBy(loginName);
receivablesRecords.setCreateTime(new Date()); receivablesRecords.setCreateTime(new Date());
//拿到应收账款的code //拿到应收账款的code
receivablesRecords.setFinancialReceivablesCode(financialReceivables.getFinancialReceivablesCode()); receivablesRecords.setFinancialReceivablesCode(financialReceivables.getFinancialReceivablesCode());
receivablesRecords.setSalesOrderCode(receivablesRecords.getSalesOrderCode());
receivablesRecords.setOperatingTime(new Date()); receivablesRecords.setOperatingTime(new Date());
receivablesRecords.setReceivablesRemark(financialReceivablesRecordsVO.getReceivablesRemark()); receivablesRecords.setReceivablesRemark(financialReceivablesRecordsVO.getReceivablesRemark());
receivablesRecords.setReceivablesDate(financialReceivablesRecordsVO.getReceivablesDate()); receivablesRecords.setReceivablesDate(financialReceivablesRecordsVO.getReceivablesDate());
receivablesRecords.setReceivablesPrice(financialReceivablesRecordsVO.getReceivablesPrice()); receivablesRecords.setReceivablesPrice(financialReceivablesRecordsVO.getReceivablesPrice());
receivablesRecords.setReceivablesAbstract(financialReceivablesRecordsVO.getReceivablesAbstract()); receivablesRecords.setReceivablesAbstract(financialReceivablesRecordsVO.getReceivablesAbstract());
receivablesRecordsMapper.insertFinancialReceivablesRecords(receivablesRecords); receivablesRecordsMapper.insertFinancialReceivablesRecords(receivablesRecords);
receivedNum = receivedNum.add(receivablesRecords.getReceivablesPrice());
}
BigDecimal notReceivedNum = priceIncludTax.subtract(receivedNum);
if(priceIncludTax.compareTo(receivedNum) == 0 && notReceivedNum.compareTo(BigDecimal.ZERO) == 0){
financialReceivables.setReceivablesClosingStatus("2");//已结案
closingFinancialReceivables(financialReceivables);
}else if((priceIncludTax.compareTo(receivedNum)) > 0 && receivedNum.compareTo(BigDecimal.ZERO) != 0){
financialReceivables.setReceivablesClosingStatus("1");//部分收款
//更新关联销售订单收款状态
String salesOrderCode = financialReceivables.getSalesOrderCode();
if(salesOrderCode != null){
SysSalesOrderVo sysSalesOrderVo = sysSalesOrderMapper.selectSysSalesOrderBySalesOrderCode(salesOrderCode);
if (sysSalesOrderVo == null){
throw new BusinessException("关联销售订单不存在");
}
sysSalesOrderVo.setCloseStatus("1");//部分收款
sysSalesOrderVo.setUpdateBy(loginName);
sysSalesOrderVo.setUpdateTime(DateUtils.getNowDate());
int updateSysSalesOrderResult = sysSalesOrderMapper.updateSysSalesOrder(sysSalesOrderVo);
if (updateSysSalesOrderResult <= 0){
throw new BusinessException("更新销售订单失败");
} }
}
}
financialReceivables.setReceivedIncludesTax(receivedNum);//已收
financialReceivables.setNotReceivedIncludesTax(notReceivedNum);//未收
financialReceivables.setUpdateBy(loginName);
financialReceivables.setUpdateTime(DateUtils.getNowDate());
return financialReceivablesMapper.updateFinancialReceivables(financialReceivables); return financialReceivablesMapper.updateFinancialReceivables(financialReceivables);
} }
@ -168,7 +200,7 @@ public class FinancialReceivablesServiceImpl implements IFinancialReceivablesSer
@Override @Override
public int generateReceivablesBySalesOrderCode(String salesOrderCode) { public int generateReceivablesBySalesOrderCode(String salesOrderCode) {
FinancialReceivables financialReceivables = new FinancialReceivables(); FinancialReceivables financialReceivables = new FinancialReceivables();
FinancialReceivablesRecords receivablesRecords = new FinancialReceivablesRecords(); // FinancialReceivablesRecords receivablesRecords = new FinancialReceivablesRecords();
// 更改日期格式以提高可读性 // 更改日期格式以提高可读性
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
String datePart = df.format(new Date()); String datePart = df.format(new Date());
@ -190,9 +222,12 @@ public class FinancialReceivablesServiceImpl implements IFinancialReceivablesSer
financialReceivables.setOpenBank(sysCustomerVo.getDepositBank()); financialReceivables.setOpenBank(sysCustomerVo.getDepositBank());
financialReceivables.setOpenAccount(sysCustomerVo.getBankAccount()); financialReceivables.setOpenAccount(sysCustomerVo.getBankAccount());
financialReceivables.setCustomerId(sysCustomerVo.getEnterpriseCode()); financialReceivables.setCustomerId(sysCustomerVo.getEnterpriseCode());
financialReceivables.setCustomerName(sysCustomerVo.getEnterpriseName());
financialReceivables.setCurrencyType(sysSalesOrderVo.getCommonCurrency()); financialReceivables.setCurrencyType(sysSalesOrderVo.getCommonCurrency());
financialReceivables.setPriceExcludingTax(BigDecimal.valueOf(sysSalesOrderVo.getNoRmbSum())); financialReceivables.setPriceExcludingTax(BigDecimal.valueOf(sysSalesOrderVo.getNoRmbSum()));
financialReceivables.setPriceIncludesTax(BigDecimal.valueOf(sysSalesOrderVo.getRmbTaxSum())); financialReceivables.setPriceIncludesTax(BigDecimal.valueOf(sysSalesOrderVo.getRmbTaxSum()));
financialReceivables.setReceivedIncludesTax(BigDecimal.ZERO);
financialReceivables.setNotReceivedIncludesTax(BigDecimal.valueOf(sysSalesOrderVo.getRmbTaxSum()));
financialReceivables.setPaymentCondition(sysSalesOrderVo.getPaymentTerms()); financialReceivables.setPaymentCondition(sysSalesOrderVo.getPaymentTerms());
financialReceivables.setBusinessMembers(sysSalesOrderVo.getBusinessMembers()); financialReceivables.setBusinessMembers(sysSalesOrderVo.getBusinessMembers());
financialReceivables.setFinancialDeliverStatus("0"); financialReceivables.setFinancialDeliverStatus("0");
@ -200,12 +235,6 @@ public class FinancialReceivablesServiceImpl implements IFinancialReceivablesSer
financialReceivables.setCreateBy(ShiroUtils.getLoginName()); financialReceivables.setCreateBy(ShiroUtils.getLoginName());
//插入数据到应收款明细中 //插入数据到应收款明细中
receivablesRecords.setFinancialReceivablesCode(newCode);
receivablesRecords.setReceivablesClosingStatus("0");
receivablesRecords.setSalesOrderCode(salesOrderCode);
receivablesRecords.setCreateTime(new Date());
receivablesRecords.setCreateBy(ShiroUtils.getLoginName());
receivablesRecordsMapper.insertFinancialReceivablesRecords(receivablesRecords);
return financialReceivablesMapper.insertFinancialReceivables(financialReceivables); return financialReceivablesMapper.insertFinancialReceivables(financialReceivables);
} }
@ -275,10 +304,15 @@ public class FinancialReceivablesServiceImpl implements IFinancialReceivablesSer
* */ * */
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@Override @Override
public int closingFinancialReceivablesById(Long financialReceivablesId) { public int closingFinancialReceivables(FinancialReceivables financialReceivables) {
int result = financialReceivablesMapper.updateReceivablesClosingStatusById(financialReceivablesId); String loginName = ShiroUtils.getLoginName();
FinancialReceivables financialReceivables = financialReceivablesMapper.selectFinancialReceivablesById(financialReceivablesId); financialReceivables.setReceivablesClosingStatus("2");//已结案
String salesOrderCode = financialReceivables.getSalesOrderCode(); financialReceivables.setUpdateBy(loginName);
financialReceivables.setUpdateTime(DateUtils.getNowDate());
int result = financialReceivablesMapper.updateFinancialReceivables(financialReceivables);
FinancialReceivables receivables = financialReceivablesMapper.selectFinancialReceivablesById(financialReceivables.getFinancialReceivablesId());
String salesOrderCode = receivables.getSalesOrderCode();
SysSalesOrderVo sysSalesOrderVo = sysSalesOrderMapper.selectSysSalesOrderBySalesOrderCode(salesOrderCode); SysSalesOrderVo sysSalesOrderVo = sysSalesOrderMapper.selectSysSalesOrderBySalesOrderCode(salesOrderCode);
//设置为已结案 //设置为已结案
@ -286,6 +320,8 @@ public class FinancialReceivablesServiceImpl implements IFinancialReceivablesSer
if (sysSalesOrderVo == null){ if (sysSalesOrderVo == null){
log.warn("销售单号不存在:{}", salesOrderCode); log.warn("销售单号不存在:{}", salesOrderCode);
} }
sysSalesOrderVo.setUpdateBy(loginName);
sysSalesOrderVo.setUpdateTime(DateUtils.getNowDate());
int updateSysSalesOrderResult = sysSalesOrderMapper.updateSysSalesOrder(sysSalesOrderVo); int updateSysSalesOrderResult = sysSalesOrderMapper.updateSysSalesOrder(sysSalesOrderVo);
if (updateSysSalesOrderResult <= 0){ if (updateSysSalesOrderResult <= 0){
throw new BusinessException("销售订单结案失败"); throw new BusinessException("销售订单结案失败");
@ -293,11 +329,12 @@ public class FinancialReceivablesServiceImpl implements IFinancialReceivablesSer
//更改客户资料客户标识 为下过单 //更改客户资料客户标识 为下过单
SysCustomerVo sysCustomerVo = sysCustomerMapper.selectSysCustomerByEnterpriseCode(sysSalesOrderVo.getEnterpriseCode()); SysCustomerVo sysCustomerVo = sysCustomerMapper.selectSysCustomerByEnterpriseCode(sysSalesOrderVo.getEnterpriseCode());
sysCustomerVo.setCustomerSign("2"); sysCustomerVo.setCustomerSign("2");
sysCustomerVo.setUpdateBy(loginName);
sysCustomerVo.setUpdateTime(DateUtils.getNowDate());
int updateSysCustomer = sysCustomerMapper.updateSysCustomer(sysCustomerVo); int updateSysCustomer = sysCustomerMapper.updateSysCustomer(sysCustomerVo);
if (updateSysCustomer <= 0){ if (updateSysCustomer <= 0){
throw new BusinessException("客户资料更改客户标识失败"); throw new BusinessException("客户资料更改客户标识失败");
} }
return result; return result;
} }
@ -335,11 +372,6 @@ public class FinancialReceivablesServiceImpl implements IFinancialReceivablesSer
//将以上信息通过map传输出去 //将以上信息通过map传输出去
BigDecimal amount = BigDecimal.ZERO; BigDecimal amount = BigDecimal.ZERO;
List<ExportFinancialReceivablesVo> list = new ArrayList<>(); List<ExportFinancialReceivablesVo> list = new ArrayList<>();
String date = DateUtils.getDate();
String[] dateArray = date.split("-");
map.put("year", dateArray[0]);
map.put("month", dateArray[1]);
map.put("day", dateArray[2]);
//接收拆分的数字 //接收拆分的数字
for (FinancialReceivablesRecords financialReceivablesRecord : financialReceivablesRecordsList) { for (FinancialReceivablesRecords financialReceivablesRecord : financialReceivablesRecordsList) {
//对于财务分割的数据,需要合计。 //对于财务分割的数据,需要合计。
@ -357,7 +389,18 @@ public class FinancialReceivablesServiceImpl implements IFinancialReceivablesSer
map.put("list",list); map.put("list",list);
FinancialReceivablesRecords financialReceivablesRecord = new FinancialReceivablesRecords(); FinancialReceivablesRecords financialReceivablesRecord = new FinancialReceivablesRecords();
financialReceivablesRecord.setReceivablesPrice(amount); financialReceivablesRecord.setReceivablesPrice(amount);
map.put("amount",splitNumber(financialReceivablesRecord)); ExportFinancialReceivablesVo receivablesVo = splitNumber(financialReceivablesRecord);
map.put("yi",receivablesVo.getYi());
map.put("qianw",receivablesVo.getQianw());
map.put("baiw",receivablesVo.getBaiw());
map.put("shiw",receivablesVo.getShiw());
map.put("wan",receivablesVo.getWan());
map.put("qian",receivablesVo.getQian());
map.put("bai",receivablesVo.getBai());
map.put("shi",receivablesVo.getShi());
map.put("yuan",receivablesVo.getYuan());
map.put("jiao",receivablesVo.getJiao());
map.put("fen",receivablesVo.getFen());
map.put("loginName",ShiroUtils.getLoginName()); map.put("loginName",ShiroUtils.getLoginName());
return map; return map;
} }
@ -410,4 +453,8 @@ public class FinancialReceivablesServiceImpl implements IFinancialReceivablesSer
public Integer updateReceivableDebit(FinancialReceivables financialReceivables){ public Integer updateReceivableDebit(FinancialReceivables financialReceivables){
return financialReceivablesMapper.updateFinancialReceivables(financialReceivables); return financialReceivablesMapper.updateFinancialReceivables(financialReceivables);
} }
/*批量查询*/
public List<FinancialReceivables> selectFinancialReceivablesByNos(String[] ids){
return financialReceivablesMapper.selectFinancialReceivablesByNos(ids);
}
} }

19
ruoyi-admin/src/main/resources/mapper/financial/FinancialReceivablesMapper.xml

@ -35,6 +35,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="createBy" column="create_by" /> <result property="createBy" column="create_by" />
<result property="updateBy" column="update_by" /> <result property="updateBy" column="update_by" />
<result property="updateTime" column="update_time" /> <result property="updateTime" column="update_time" />
<result property="closedReason" column="closed_reason" />
</resultMap> </resultMap>
<sql id="selectFinancialReceivablesVo"> <sql id="selectFinancialReceivablesVo">
@ -43,7 +44,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
open_account,customer_id, customer_name, contract_number, currency_type,price_excluding_tax, open_account,customer_id, customer_name, contract_number, currency_type,price_excluding_tax,
price_includes_tax, payment_condition,received_includes_tax, not_received_includes_tax, price_includes_tax, payment_condition,received_includes_tax, not_received_includes_tax,
business_members,financial_deliver_status, receivables_date, receivables_price,receivables_abstract, business_members,financial_deliver_status, receivables_date, receivables_price,receivables_abstract,
operating_time, receivables_remark,create_time, create_by, update_by, update_time operating_time, receivables_remark,create_time, create_by, update_by, update_time, closed_reason
from financial_receivables from financial_receivables
</sql> </sql>
@ -63,10 +64,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="contractNumber != null and contractNumber != ''"> and contract_number = #{contractNumber}</if> <if test="contractNumber != null and contractNumber != ''"> and contract_number = #{contractNumber}</if>
<if test="currencyType != null and currencyType != ''"> and currency_type = #{currencyType}</if> <if test="currencyType != null and currencyType != ''"> and currency_type = #{currencyType}</if>
<if test="businessMembers != null and businessMembers != ''"> and business_members = #{businessMembers}</if> <if test="businessMembers != null and businessMembers != ''"> and business_members = #{businessMembers}</if>
<if test="params.beginCreateTime != null and params.beginCreateTime != '' and params.endCreateTime != null and params.endCreateTime != ''"> and create_time between #{params.beginCreateTime} and #{params.endCreateTime}</if> <if test="params.beginCreateTime != null and params.beginCreateTime != '' and params.endCreateTime != null and params.endCreateTime != ''"> and Date(create_time) between #{params.beginCreateTime} and #{params.endCreateTime}</if>
<if test="updateBy != null and updateBy != ''"> and update_by = #{updateBy}</if> <if test="updateBy != null and updateBy != ''"> and update_by = #{updateBy}</if>
<if test="params.beginUpdateTime != null and params.beginUpdateTime != '' and params.endUpdateTime != null and params.endUpdateTime != ''"> and update_time between #{params.beginUpdateTime} and #{params.endUpdateTime}</if> <if test="params.beginUpdateTime != null and params.beginUpdateTime != '' and params.endUpdateTime != null and params.endUpdateTime != ''"> and Date(update_time) between #{params.beginUpdateTime} and #{params.endUpdateTime}</if>
</where> </where>
order by create_time desc
</select> </select>
<select id="selectFinancialReceivablesById" parameterType="Long" resultMap="FinancialReceivablesResult"> <select id="selectFinancialReceivablesById" parameterType="Long" resultMap="FinancialReceivablesResult">
@ -106,6 +108,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="createBy != null">create_by,</if> <if test="createBy != null">create_by,</if>
<if test="updateBy != null">update_by,</if> <if test="updateBy != null">update_by,</if>
<if test="updateTime != null">update_time,</if> <if test="updateTime != null">update_time,</if>
<if test="closedReason != null">closed_reason,</if>
</trim> </trim>
<trim prefix="values (" suffix=")" suffixOverrides=","> <trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="financialReceivablesCode != null">#{financialReceivablesCode},</if> <if test="financialReceivablesCode != null">#{financialReceivablesCode},</if>
@ -137,6 +140,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="createBy != null">#{createBy},</if> <if test="createBy != null">#{createBy},</if>
<if test="updateBy != null">#{updateBy},</if> <if test="updateBy != null">#{updateBy},</if>
<if test="updateTime != null">#{updateTime},</if> <if test="updateTime != null">#{updateTime},</if>
<if test="closedReason != null">#{closedReason},</if>
</trim> </trim>
</insert> </insert>
@ -172,6 +176,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="createBy != null">create_by = #{createBy},</if> <if test="createBy != null">create_by = #{createBy},</if>
<if test="updateBy != null">update_by = #{updateBy},</if> <if test="updateBy != null">update_by = #{updateBy},</if>
<if test="updateTime != null">update_time = #{updateTime},</if> <if test="updateTime != null">update_time = #{updateTime},</if>
<if test="closedReason != null">closed_reason = #{closedReason},</if>
</trim> </trim>
where financial_receivables_id = #{financialReceivablesId} where financial_receivables_id = #{financialReceivablesId}
</update> </update>
@ -202,4 +207,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="findMaxRoundCode" resultType="String"> <select id="findMaxRoundCode" resultType="String">
SELECT MAX(SUBSTRING(financial_receivables_code, 7)) FROM financial_receivables WHERE financial_receivables_code LIKE CONCAT(#{prefix}, '%') SELECT MAX(SUBSTRING(financial_receivables_code, 7)) FROM financial_receivables WHERE financial_receivables_code LIKE CONCAT(#{prefix}, '%')
</select> </select>
<select id="selectFinancialReceivablesByNos" parameterType="String" resultMap="FinancialReceivablesResult">
<include refid="selectFinancialReceivablesVo"/>
where financial_receivables_code in
<foreach item="financialReceivablesCode" collection="array" open="(" separator="," close=")">
#{financialReceivablesCode}
</foreach>
</select>
</mapper> </mapper>

9
ruoyi-admin/src/main/resources/mapper/financial/FinancialReceivablesRecordsMapper.xml

@ -37,7 +37,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</select> </select>
<select id="selectFinancialReceivablesRecordsListByCodePage" parameterType="map" resultMap="FinancialReceivablesRecordsResult"> <select id="selectFinancialReceivablesRecordsListByCodePage" parameterType="map" resultMap="FinancialReceivablesRecordsResult">
<include refid="selectFinancialReceivablesRecordsVo"/> <include refid="selectFinancialReceivablesRecordsVo"/>
where financial_receivables_code = #{code} limit #{start} offset #{pageSize} where financial_receivables_code = #{code} limit #{pageSize} offset #{start}
</select> </select>
<select id="selectFinancialReceivablesRecordsById" parameterType="Long" resultMap="FinancialReceivablesRecordsResult"> <select id="selectFinancialReceivablesRecordsById" parameterType="Long" resultMap="FinancialReceivablesRecordsResult">
@ -115,4 +115,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
update financial_receivables_records set del_flag = '0' where receivables_records_id = #{receivablesRecordsId} update financial_receivables_records set del_flag = '0' where receivables_records_id = #{receivablesRecordsId}
</update> </update>
<select id="selectFinancialReceivablesRecordsListByIds" parameterType="String" resultMap="FinancialReceivablesRecordsResult">
<include refid="selectFinancialReceivablesRecordsVo"/>
where receivables_records_id in
<foreach item="receivablesRecordsId" collection="array" open="(" separator="," close=")">
#{receivablesRecordsId}
</foreach>
</select>
</mapper> </mapper>
Loading…
Cancel
Save