Commit 47fb12a2 by 杨清松

账单明细导出

parent 3e0e4d88
package com.xyst.dinas.finance.internal.service;
import java.math.BigDecimal;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.Resource;
import com.beecode.bcp.type.KObject;
import com.beecode.inz.basis.team.pojo.ResponseObj;
......@@ -28,97 +44,148 @@ public class StatementAccountServiceImpl implements StatementAccountService{
private StatementAccountDao statementAccountDao;
@Override
public Object queryStatementAccountByContractId(JSONObject jsonObject) {
try {
Map<String, Object> map = new HashMap<>();
List<KObject> artificialRechargeList = statementAccountDao.queryStatementAccountByContractId(jsonObject, ArtificialRechargeConstant.ENTITY);
List<StatementAccount> statementAccounts = new ArrayList<StatementAccount>();
//人工充值
BigDecimal advanceRechargeAmount = new BigDecimal("0"); //预付款充值
BigDecimal depositRechargeAmount = new BigDecimal("0"); //保证金充值
if (artificialRechargeList.size() > 0) {
for (int i = 0; i < artificialRechargeList.size(); i++) {
KObject kObject = artificialRechargeList.get(i);
StatementAccount statementAccount = new StatementAccount();
if (kObject.getString("fundType").equals(FundTypeEnum.ADVANCE.name())) { //预付款
statementAccount.setDealType("预付款充值");
advanceRechargeAmount = advanceRechargeAmount.add(kObject.getBigDecimal("rechargeAmount"));
} else if (kObject.getString("fundType").equals(FundTypeEnum.DEPOSIT.name())){
statementAccount.setDealType("保证金充值");
depositRechargeAmount = depositRechargeAmount.add(kObject.getBigDecimal("rechargeAmount"));
}
statementAccount.setDealAmount(kObject.getBigDecimal("rechargeAmount"));
statementAccount.setDealDate(kObject.getString("createTime"));
statementAccounts.add(statementAccount);
public Map<String, Object> queryStatementAccountByContractId(JSONObject jsonObject) {
Map<String, Object> map = new HashMap<>();
List<KObject> artificialRechargeList = statementAccountDao.queryStatementAccountByContractId(jsonObject, ArtificialRechargeConstant.ENTITY);
List<StatementAccount> statementAccounts = new ArrayList<StatementAccount>();
//人工充值
BigDecimal advanceRechargeAmount = new BigDecimal("0"); //预付款充值
BigDecimal depositRechargeAmount = new BigDecimal("0"); //保证金充值
if (artificialRechargeList.size() > 0) {
for (int i = 0; i < artificialRechargeList.size(); i++) {
KObject kObject = artificialRechargeList.get(i);
StatementAccount statementAccount = new StatementAccount();
if (kObject.getString("fundType").equals(FundTypeEnum.ADVANCE.name())) { //预付款
statementAccount.setDealType("预付款充值");
advanceRechargeAmount = advanceRechargeAmount.add(kObject.getBigDecimal("rechargeAmount"));
} else if (kObject.getString("fundType").equals(FundTypeEnum.DEPOSIT.name())){
statementAccount.setDealType("保证金充值");
depositRechargeAmount = depositRechargeAmount.add(kObject.getBigDecimal("rechargeAmount"));
}
statementAccount.setDealAmount(kObject.getBigDecimal("rechargeAmount"));
statementAccount.setDealDate(kObject.getString("createTime"));
statementAccounts.add(statementAccount);
}
map.put("advanceRechargeAmount", advanceRechargeAmount);
map.put("depositRechargeAmount", depositRechargeAmount);
//退费
BigDecimal advanceFinanceRefundAmount = new BigDecimal("0"); //预付款退费
BigDecimal depositFinanceRefundAmount = new BigDecimal("0"); //保证金退费
List<KObject> financeRefundList = statementAccountDao.queryStatementAccountByContractId(jsonObject, FinanceRefundConstant.ENTITY);
if (financeRefundList.size() > 0) {
for (int i = 0; i < financeRefundList.size(); i++) {
KObject kObject = financeRefundList.get(i);
StatementAccount statementAccount = new StatementAccount();
if (kObject.getString("fundType").equals(FundTypeEnum.ADVANCE.name())) { //预付款
statementAccount.setDealType("预付款退费");
advanceFinanceRefundAmount = advanceFinanceRefundAmount.add(kObject.getBigDecimal("actualRefundAmount"));//实际退费金额
} else if (kObject.getString("fundType").equals(FundTypeEnum.DEPOSIT.name())){
statementAccount.setDealType("保证金退费");
depositFinanceRefundAmount = depositFinanceRefundAmount.add(kObject.getBigDecimal("actualRefundAmount"));
}
statementAccount.setDealAmount(kObject.getBigDecimal("actualRefundAmount"));
statementAccount.setDealDate(kObject.getString("createTime"));
statementAccounts.add(statementAccount);
}
map.put("advanceRechargeAmount", advanceRechargeAmount);
map.put("depositRechargeAmount", depositRechargeAmount);
//退费
BigDecimal advanceFinanceRefundAmount = new BigDecimal("0"); //预付款退费
BigDecimal depositFinanceRefundAmount = new BigDecimal("0"); //保证金退费
List<KObject> financeRefundList = statementAccountDao.queryStatementAccountByContractId(jsonObject, FinanceRefundConstant.ENTITY);
if (financeRefundList.size() > 0) {
for (int i = 0; i < financeRefundList.size(); i++) {
KObject kObject = financeRefundList.get(i);
StatementAccount statementAccount = new StatementAccount();
if (kObject.getString("fundType").equals(FundTypeEnum.ADVANCE.name())) { //预付款
statementAccount.setDealType("预付款退费");
advanceFinanceRefundAmount = advanceFinanceRefundAmount.add(kObject.getBigDecimal("actualRefundAmount"));//实际退费金额
} else if (kObject.getString("fundType").equals(FundTypeEnum.DEPOSIT.name())){
statementAccount.setDealType("保证金退费");
depositFinanceRefundAmount = depositFinanceRefundAmount.add(kObject.getBigDecimal("actualRefundAmount"));
}
statementAccount.setDealAmount(kObject.getBigDecimal("actualRefundAmount"));
statementAccount.setDealDate(kObject.getString("createTime"));
statementAccounts.add(statementAccount);
}
map.put("advanceFinanceRefundAmount", advanceFinanceRefundAmount);
map.put("depositFinanceRefundAmount", depositFinanceRefundAmount);
//费用调整
BigDecimal advanceExpenseAdjustAmount = new BigDecimal("0"); //预付款费用调整
BigDecimal depositExpenseAdjustAmount = new BigDecimal("0"); //保证金费用调整
List<KObject> expenseAdjustList = statementAccountDao.queryStatementAccountByContractId(jsonObject, ExpenseAdjustConstant.ENTITY);
if (expenseAdjustList.size() > 0) {
for (int i = 0; i < expenseAdjustList.size(); i++) {
KObject kObject = expenseAdjustList.get(i);
StatementAccount statementAccount = new StatementAccount();
if (kObject.getString("fundType").equals(FundTypeEnum.ADVANCE.name())) { //预付款
statementAccount.setDealType("预付款费用调整");
advanceExpenseAdjustAmount = advanceExpenseAdjustAmount.add(kObject.getBigDecimal("expenseAdjustAmount"));
} else if (kObject.getString("fundType").equals(FundTypeEnum.DEPOSIT.name())){
statementAccount.setDealType("保证金费用调整");
depositExpenseAdjustAmount = depositExpenseAdjustAmount.add(kObject.getBigDecimal("expenseAdjustAmount"));
}
statementAccount.setDealAmount(kObject.getBigDecimal("expenseAdjustAmount"));
statementAccount.setDealDate(kObject.getString("createTime"));
statementAccounts.add(statementAccount);
}
map.put("advanceFinanceRefundAmount", advanceFinanceRefundAmount);
map.put("depositFinanceRefundAmount", depositFinanceRefundAmount);
//费用调整
BigDecimal advanceExpenseAdjustAmount = new BigDecimal("0"); //预付款费用调整
BigDecimal depositExpenseAdjustAmount = new BigDecimal("0"); //保证金费用调整
List<KObject> expenseAdjustList = statementAccountDao.queryStatementAccountByContractId(jsonObject, ExpenseAdjustConstant.ENTITY);
if (expenseAdjustList.size() > 0) {
for (int i = 0; i < expenseAdjustList.size(); i++) {
KObject kObject = expenseAdjustList.get(i);
StatementAccount statementAccount = new StatementAccount();
if (kObject.getString("fundType").equals(FundTypeEnum.ADVANCE.name())) { //预付款
statementAccount.setDealType("预付款费用调整");
advanceExpenseAdjustAmount = advanceExpenseAdjustAmount.add(kObject.getBigDecimal("expenseAdjustAmount"));
} else if (kObject.getString("fundType").equals(FundTypeEnum.DEPOSIT.name())){
statementAccount.setDealType("保证金费用调整");
depositExpenseAdjustAmount = depositExpenseAdjustAmount.add(kObject.getBigDecimal("expenseAdjustAmount"));
}
statementAccount.setDealAmount(kObject.getBigDecimal("expenseAdjustAmount"));
statementAccount.setDealDate(kObject.getString("createTime"));
statementAccounts.add(statementAccount);
}
map.put("advanceExpenseAdjustAmount", advanceFinanceRefundAmount);
map.put("depositExpenseAdjustAmount", depositExpenseAdjustAmount);
//销售
BigDecimal salesAmount = new BigDecimal("0"); //销售总额
List<KObject> saleRecordList = statementAccountDao.queryStatementAccountByContractId(jsonObject, SalesRecordConstant.ENTITY);
if (saleRecordList.size() > 0) {
for (int i = 0; i < saleRecordList.size(); i++) {
KObject kObject = saleRecordList.get(i);
StatementAccount statementAccount = new StatementAccount();
statementAccount.setDealType("销售");
statementAccount.setDealAmount(kObject.getBigDecimal("amount"));
statementAccount.setDealDate(kObject.getString("createTime"));
statementAccounts.add(statementAccount);
salesAmount = salesAmount.add(kObject.getBigDecimal("amount"));
}
}
map.put("advanceExpenseAdjustAmount", advanceFinanceRefundAmount);
map.put("depositExpenseAdjustAmount", depositExpenseAdjustAmount);
//销售
BigDecimal salesAmount = new BigDecimal("0"); //销售总额
List<KObject> saleRecordList = statementAccountDao.queryStatementAccountByContractId(jsonObject, SalesRecordConstant.ENTITY);
if (saleRecordList.size() > 0) {
for (int i = 0; i < saleRecordList.size(); i++) {
KObject kObject = saleRecordList.get(i);
StatementAccount statementAccount = new StatementAccount();
statementAccount.setDealType("销售");
statementAccount.setDealAmount(kObject.getBigDecimal("amount"));
statementAccount.setDealDate(kObject.getString("createTime"));
statementAccounts.add(statementAccount);
salesAmount = salesAmount.add(kObject.getBigDecimal("amount"));
}
}
map.put("salesAmount", salesAmount);
map.put("statementAccounts", statementAccounts);
return map;
}
@Value("classpath:template/statementAccount.xlsx")
private Resource statementAccountResource;
@Override
public void exportStatementAccountDetails(HttpServletResponse response, JSONObject param) {
Map<String, Object> statementAccountMap = queryStatementAccountByContractId(param);
Workbook xssfWorkbook = null;
try {
xssfWorkbook = new XSSFWorkbook(statementAccountResource.getInputStream());
CellStyle textStyle = xssfWorkbook.createCellStyle();
textStyle.setBorderBottom(CellStyle.BORDER_THIN);
textStyle.setBorderTop(CellStyle.BORDER_THIN);
textStyle.setBorderLeft(CellStyle.BORDER_THIN);
textStyle.setBorderRight(CellStyle.BORDER_THIN);
SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日");
//设置字体
Font createFont = xssfWorkbook.createFont();
createFont.setFontHeightInPoints((short) 10);
createFont.setFontName("黑体");
textStyle.setFont(createFont);
Sheet sheetAt = xssfWorkbook.getSheetAt(0);
List<StatementAccount> statementAccounts = (List<StatementAccount>) statementAccountMap.get("statementAccounts");
for (int i = 0; i < statementAccounts.size(); i++) {
StatementAccount statementAccount = statementAccounts.get(i);
//从第2行开始写数据
Row row = sheetAt.createRow(1 + i);
Cell cell = row.createCell(0);
cell.setCellValue(1 + i);
cell.setCellStyle(textStyle);
Cell cell1 = row.createCell(1);
cell1.setCellValue(statementAccount.getDealDate());
cell1.setCellStyle(textStyle);
Cell cell2 = row.createCell(2);
cell2.setCellValue(statementAccount.getDealType());
cell2.setCellStyle(textStyle);
Cell cell3 = row.createCell(3);
cell3.setCellValue(statementAccount.getDealAmount().doubleValue());
cell3.setCellStyle(textStyle);
}
map.put("salesAmount", salesAmount);
map.put("statementAccounts", statementAccounts);
return ResponseObj.success("查询成功", map);
String fileName = URLEncoder.encode("对账单明细.xlsx", "utf-8");
response.setHeader("Content-Disposition", "attachment; filename =" + fileName);
ServletOutputStream outputStream = response.getOutputStream();
xssfWorkbook.write(outputStream);
xssfWorkbook.close();
outputStream.flush();
outputStream.close();
} catch (Exception e) {
e.printStackTrace();
return ResponseObj.error();
}
}
......
package com.xyst.dinas.finance.service;
import java.util.Map;
import java.util.UUID;
import javax.servlet.http.HttpServletResponse;
import org.json.JSONObject;
public interface StatementAccountService {
Object queryStatementAccountByContractId(JSONObject jsonObject);
Map<String, Object> queryStatementAccountByContractId(JSONObject jsonObject);
void exportStatementAccountDetails(HttpServletResponse response, JSONObject param);
}
package com.xyst.dinas.finance.web;
import java.io.IOException;
import java.util.Map;
import java.util.UUID;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -12,10 +17,11 @@ import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import com.beecode.inz.basis.team.pojo.ResponseObj;
import com.xyst.dinas.finance.service.StatementAccountService;
/**
* 费用调整
* 对账单
*
* @author yangqingsong
* @date 2021年4月25日
......@@ -30,7 +36,34 @@ public class StatementAccountController {
@ResponseBody
@RequestMapping(value = "/sand/user/finance/statementAccount/queryStatementAccountByContractId", method = RequestMethod.POST)
public Object queryStatementAccountByContractId(@RequestBody String body) {
return statementAccountService.queryStatementAccountByContractId(new JSONObject(body));
try{
Map<String, Object> statementAccountByContract = statementAccountService.queryStatementAccountByContractId(new JSONObject(body));
return ResponseObj.success("查询成功", statementAccountByContract);
} catch(Exception e) {
return ResponseObj.error();
}
}
@ResponseBody
@RequestMapping(value = "/sand/user/finance/exportStatementAccountDetails", method = RequestMethod.POST)
public Object exportStatementAccountDetails(HttpServletRequest request, HttpServletResponse response) throws IOException {
request.setCharacterEncoding("utf-8");
String exportParamStr = request.getParameter("exportParamStr");
response.reset();
response.setCharacterEncoding("UTF-8");
response.setContentType("application/x-www-form-urlencoded");
JSONObject obj = new JSONObject();
try {
obj.put("code", 200);
JSONObject param = new JSONObject(exportParamStr);
statementAccountService.exportStatementAccountDetails(response, param);
} catch(Exception e) {
e.printStackTrace();
return ResponseObj.error();
}
return obj.toString();
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment