支出合同导出,模板下载接口

This commit is contained in:
梁琦涛
2021-09-08 17:02:37 +08:00
parent 68537889c6
commit 77480a7ade
8 changed files with 317 additions and 17 deletions
@@ -458,15 +458,22 @@ public class PayContactsManagementController extends JeroController<PayContactsM
List<PayContactsManagement> listContactsAll = payContactsManagementService.listPayContactsManagement(phoneList);
List<String> companyList = list.stream().map(PayContactsManagement::getCompanyName).collect(Collectors.toList());
List<PayCompanyManagement> listCompanyAll = payCompanyManagementService.listPayCompanyManagement(companyList);
List<String> listContacts = new ArrayList<>();
List<PayContactsManagement> listContacts = new ArrayList<>();
StringBuilder msg = new StringBuilder();
list.forEach(p->{
int count = list.indexOf(p);
// 校验excel表中是否存在重复手机号
if(listContacts.contains(p.getPhone())){
List<PayContactsManagement> listContactsPhone = listContacts.stream().filter(p1->Objects.equals(p1.getPhone(),p.getPhone())).collect(Collectors.toList());
if(!CollectionUtils.isEmpty(listContactsPhone)){
msg.append("第 ").append(count + 3).append(" 行:手机号在excel中重复,请修改。</br>");
}
listContacts.add(p.getPhone());
// 校验excel表中是否存在重复联系人
List<PayContactsManagement> listContactsName = listContacts.stream().filter(p1->Objects.equals(p1.getName(),p.getName())
&& Objects.equals(p1.getCompanyId(),p.getCompanyId())).collect(Collectors.toList());
if(CollectionUtils.isEmpty(listContactsName)){
msg.append("第 ").append(count + 3).append(" 行:联系人姓名在excel中重复,请修改。</br>");
}
listContacts.add(p);
p.setDataSource(PayContactsManagementCommon.DATA_SOURCE1);
p.setSigningUp(PayContactsManagementCommon.SIGNING_UP0);
// 校验字段值
@@ -483,8 +490,9 @@ public class PayContactsManagementController extends JeroController<PayContactsM
msg.append("第 ").append(count + 3).append(" 行:企业名称不存在,请修改。</br>");
}
}
// 校验 表中是否存手机号
// 校验 手机号,姓名
if(!CollectionUtils.isEmpty(listContactsAll)){
// 校验 表中是否存手机号
List<PayContactsManagement> listCompanyEquals = listContactsAll.stream().filter(p1->Objects.equals(p1.getPhone(),p.getPhone())).collect(Collectors.toList());
if(!CollectionUtils.isEmpty(listCompanyEquals)){
// 已存在数据来源是报名,变更来源为管理端,替换掉数据
@@ -499,6 +507,11 @@ public class PayContactsManagementController extends JeroController<PayContactsM
}
msg.append("第").append(count + 3).append("行:手机号已经存在,请修改。</br>");
}
List<PayContactsManagement> listContactsEquals = listContactsAll.stream().filter(p1->Objects.equals(p1.getCompanyId(),p.getCompanyId())
&& Objects.equals(p1.getName(),p.getName())).collect(Collectors.toList());
if(!CollectionUtils.isEmpty(listContactsEquals)){
msg.append("第").append(count + 3).append("行:联系人姓名已经存在,请修改。</br>");
}
}
if (!StringUtils.isBlank(p.getPhone())){
p.setPhone(PasswordUtil.encrypt(p.getPhone()));
@@ -492,6 +492,10 @@ public class PayIncomeContractController extends JeroController<PayIncomeContrac
filedsList.add(new ExcelExportEntity("合同签订日期", "contractDate"));
filedsList.add(new ExcelExportEntity("合同终止日期", "terminationDate"));
filedsList.add(new ExcelExportEntity("合同约定主要时点", "contractTimePoints"));
filedsList.add(new ExcelExportEntity("应收金额", "accountsReceivableAmount"));
filedsList.add(new ExcelExportEntity("已收金额", "amountReceived"));
filedsList.add(new ExcelExportEntity("未收金额", "outstandingAmount"));
filedsList.add(new ExcelExportEntity("账款状态", "accountStatus"));
filedsList.add(new ExcelExportEntity("是否打包", "pack"));
filedsList.add(new ExcelExportEntity("打包年份", "packYear"));
int count = mapCount.get("count");
@@ -1,22 +1,42 @@
package com.jero.contract.controller;
import java.util.Arrays;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jero.common.api.vo.Result;
import com.jero.common.aspect.annotation.AutoLog;
import com.jero.common.exception.JeroBootException;
import com.jero.common.system.api.ISysBaseAPI;
import com.jero.common.system.base.controller.JeroController;
import com.jero.contract.entity.PaySpendingContract;
import com.jero.common.system.query.QueryGenerator;
import com.jero.common.util.DateUtils;
import com.jero.common.util.oConvertUtils;
import com.jero.company.entity.PayCompanyManagement;
import com.jero.contract.common.PayIncomeContractCommon;
import com.jero.contract.entity.*;
import com.jero.contract.service.IPaySpendingContractInstallmentService;
import com.jero.contract.service.IPaySpendingContractService;
import com.jero.contract.vo.PaySpendingContractInput;
import com.jero.contract.vo.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.jeecgframework.poi.excel.def.MapExcelConstants;
import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.entity.params.ExcelExportEntity;
import org.jeecgframework.poi.excel.view.JeecgMapExcelView;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import io.swagger.annotations.Api;
@@ -35,6 +55,12 @@ import io.swagger.annotations.ApiOperation;
public class PaySpendingContractController extends JeroController<PaySpendingContract, IPaySpendingContractService> {
@Autowired
private IPaySpendingContractService paySpendingContractService;
@Autowired
private IPaySpendingContractInstallmentService paySpendingContractInstallmentService;
@Autowired
private Environment env;
@Autowired
private ISysBaseAPI sysBaseAPI;
/**
* 分页列表查询
@@ -144,15 +170,44 @@ public class PaySpendingContractController extends JeroController<PaySpendingCon
@AutoLog(value = "支出合同-通过id查询")
@ApiOperation(value="支出合同-通过id查询", notes="支出合同-通过id查询")
@GetMapping(value = "/queryById")
public Result<?> queryById(@RequestParam(name="id",required=true) String id) {
public Result<?> queryById(@RequestParam(name="id") String id) {
if(StringUtils.isBlank(id)){
return Result.error("id不能为空!");
}
PaySpendingContract paySpendingContract = paySpendingContractService.getById(id);
if(paySpendingContract==null) {
return Result.error("未找到对应数据");
}
return Result.OK(paySpendingContract);
// 获取分期信息
LambdaQueryWrapper<PaySpendingContractInstallment> queryPaySpendingContractInstallment = new LambdaQueryWrapper<>();
queryPaySpendingContractInstallment.eq(PaySpendingContractInstallment::getContractId,paySpendingContract.getId());
List<PaySpendingContractInstallment> listPaySpendingContractInstallment = paySpendingContractInstallmentService.list(queryPaySpendingContractInstallment);
String str = JSON.toJSONString(paySpendingContract);
PaySpendingContractDetailOutput paySpendingContractDetailOutput = JSONObject.parseObject(str,PaySpendingContractDetailOutput.class);
// 字典翻译
paySpendingContractDetailOutput.setOpening_dictText(sysBaseAPI.translateDict("yn",String.valueOf(paySpendingContract.getOpening())));
paySpendingContractDetailOutput.setAccountStatus_dictText(sysBaseAPI.translateDict("revenue_contract_account_status",String.valueOf(paySpendingContract.getAccountStatus())));
paySpendingContractDetailOutput.setPack_dictText(sysBaseAPI.translateDict("yn",String.valueOf(paySpendingContract.getPack())));
if(!CollectionUtils.isEmpty(listPaySpendingContractInstallment)){
paySpendingContractDetailOutput.setListInstallment(listPaySpendingContractInstallment);
}
return Result.OK(paySpendingContractDetailOutput);
}
/**
/**
* 模板下载
*
* @return
*/
@ApiOperation(value="支出合同-模板下载", notes="支出合同-模板下载")
@GetMapping(value = "/downloadExcelModel")
public ModelAndView downloadExcelModel() {
return super.exportTemplate(PaySpendingContractExcel.class,"支出合同导入模板");
}
/**
* 导出excel
*
* @param request
@@ -160,7 +215,103 @@ public class PaySpendingContractController extends JeroController<PaySpendingCon
*/
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, PaySpendingContract paySpendingContract) {
return super.exportXls(request, paySpendingContract, PaySpendingContract.class, "pay_spending_contract");
// Step.1 组装查询条件
QueryWrapper<PaySpendingContract> queryWrapper = QueryGenerator.initQueryWrapper(paySpendingContract, request.getParameterMap());
// Step.2 获取导出数据
List<PaySpendingContract> pageList = paySpendingContractService.list(queryWrapper);
List<PaySpendingContract> exportList = null;
// 过滤选中数据
String selections = request.getParameter("selections");
if (oConvertUtils.isNotEmpty(selections)) {
List<String> selectionList = Arrays.asList(selections.split(","));
exportList = pageList.stream().filter(item -> selectionList.contains(paySpendingContract.getId())).collect(Collectors.toList());
} else {
exportList = pageList;
}
List<Map<String,String>> list = new ArrayList<>();
// excel字段长度
Map<String,Integer> mapCount = new HashMap<>();
mapCount.put("count",0);
if(!CollectionUtils.isEmpty(exportList)){
List<String> listId = exportList.stream().map(PaySpendingContract::getId).collect(Collectors.toList());
LambdaQueryWrapper<PaySpendingContractInstallment> query = new LambdaQueryWrapper<>();
query.in(PaySpendingContractInstallment::getContractId,listId);
List<PaySpendingContractInstallment> listPaySpendingContractInstallment = paySpendingContractInstallmentService.list(query);
if(!CollectionUtils.isEmpty(listPaySpendingContractInstallment)){
exportList.forEach(p->{
String str = JSON.toJSONString(p);
Map<String,String> map = JSONObject.parseObject(str,Map.class);
map.put("contractDate", DateUtils.date2Str(p.getContractDate(),new SimpleDateFormat("yyyy-MM-dd")));
map.put("terminationDate",DateUtils.date2Str(p.getTerminationDate(),new SimpleDateFormat("yyyy-MM-dd")));
map.put("opening",sysBaseAPI.translateDict("yn",String.valueOf(p.getOpening())));
map.put("accountStatus",sysBaseAPI.translateDict("revenue_contract_account_status",String.valueOf(p.getAccountStatus())));
map.put("pack",sysBaseAPI.translateDict("yn",String.valueOf(p.getPack())));
List<PaySpendingContractInstallment> listSub = listPaySpendingContractInstallment.stream().filter(item->
Objects.equals(p.getId(),item.getContractId())).collect(Collectors.toList());
if(!CollectionUtils.isEmpty(listSub)){
int count = mapCount.get("count");
if(count < listSub.size()){
mapCount.put("count",listSub.size());
}
listSub.forEach(p1->{
int n = listSub.indexOf(p1) + 1;
map.put("phaseName" + n,p1.getPhaseName());
map.put("accountsReceivableAmount" + n,String.valueOf(p1.getAccountsReceivableAmount()));
map.put("accountsReceivableTime" + n, DateUtils.date2Str(p1.getAccountsReceivableTime(),new SimpleDateFormat("yyyy-MM-dd")));
map.put("paidAmount" + n,String.valueOf(p1.getPaidAmount()));
map.put("paidTime" + n,DateUtils.date2Str(p1.getPaidTime(),new SimpleDateFormat("yyyy-MM-dd")));
});
}
list.add(map);
});
}
}else{
throw new JeroBootException("数据为空!");
}
// 设置表头样式
List<ExcelExportEntity> filedsList = new ArrayList<>();
filedsList.add(new ExcelExportEntity("合同编号", "contractNum"));
filedsList.add(new ExcelExportEntity("合同名称", "contractName"));
filedsList.add(new ExcelExportEntity("签订单位", "signedCompanyTemporaryName"));
filedsList.add(new ExcelExportEntity("签订单位联系人", "signedContactsTemporaryName"));
filedsList.add(new ExcelExportEntity("是否开口", "opening"));
filedsList.add(new ExcelExportEntity("负责人", "principalName"));
filedsList.add(new ExcelExportEntity("部门名称", "departmentName"));
filedsList.add(new ExcelExportEntity("签订合同总金额", "contractAmount"));
filedsList.add(new ExcelExportEntity("税率", "rate"));
filedsList.add(new ExcelExportEntity("未税金额", "noTaxAmount"));
filedsList.add(new ExcelExportEntity("合同签订日期", "contractDate"));
filedsList.add(new ExcelExportEntity("合同终止日期", "terminationDate"));
filedsList.add(new ExcelExportEntity("合同约定主要时点", "contractTimePoints"));
filedsList.add(new ExcelExportEntity("应收金额", "accountsReceivableAmount"));
filedsList.add(new ExcelExportEntity("已收金额", "amountReceived"));
filedsList.add(new ExcelExportEntity("未收金额", "outstandingAmount"));
filedsList.add(new ExcelExportEntity("账款状态", "accountStatus"));
filedsList.add(new ExcelExportEntity("是否打包", "pack"));
filedsList.add(new ExcelExportEntity("打包年份", "packYear"));
int count = mapCount.get("count");
if(count > 0){
for (int i = 1; i <= count; i++){
filedsList.add(new ExcelExportEntity(i + "阶段", "phaseName" + i));
filedsList.add(new ExcelExportEntity(i + "期应收", "accountsReceivableAmount" + i));
filedsList.add(new ExcelExportEntity(i + "期应收时间", "accountsReceivableTime" + i));
filedsList.add(new ExcelExportEntity(i + "期实收", "paidAmount" + i));
filedsList.add(new ExcelExportEntity(i + "期实收时间", "paidTime" + i));
}
}
// Step.3 AutoPoi 导出Excel
ModelAndView mv = new ModelAndView(new JeecgMapExcelView());
mv.addObject(MapExcelConstants.FILE_NAME, "收入合同"); //此处设置的filename无效 ,前端会重更新设置一下
mv.addObject(MapExcelConstants.ENTITY_LIST, filedsList);
//update-begin--Author:liusq Date:20210126 for:图片导出报错,ImageBasePath未设置--------------------
ExportParams exportParams=new ExportParams("收入合同", "收入合同");
exportParams.setImageBasePath(env.getProperty("jero.path.upload"));
//update-end--Author:liusq Date:20210126 for:图片导出报错,ImageBasePath未设置----------------------
mv.addObject(MapExcelConstants.PARAMS,exportParams);
mv.addObject(MapExcelConstants.MAP_LIST, list);
return mv;
}
/**
@@ -147,12 +147,12 @@ public class PayIncomeContract implements Serializable {
@Excel(name = "已收金额", width = 15)
@ApiModelProperty(value = "已收金额")
@NotNull(message = "已收金额不能为空!")
@Max(value = 999999999,message = "应收金额格式错误")
@Max(value = 999999999,message = "已收金额格式错误")
private java.lang.Integer amountReceived;
/**未收金额*/
@Excel(name = "未收金额", width = 15)
@ApiModelProperty(value = "未收金额")
@Max(value = 999999999,message = "应收金额格式错误")
@Max(value = 999999999,message = "未收金额格式错误")
private java.lang.String outstandingAmount;
/**账款状态(1:未支付,2:部分支付,3:已付全款)*/
@Excel(name = "账款状态(1:未支付,2:部分支付,3:已付全款)", width = 15)
@@ -80,9 +80,9 @@ public class PaySpendingContract implements Serializable {
@Excel(name = "部门名称", width = 15)
@ApiModelProperty(value = "部门名称")
private String departmentName;
/**签订合同金额*/
@Excel(name = "签订合同金额", width = 15)
@ApiModelProperty(value = "签订合同金额")
/**签订合同总金额*/
@Excel(name = "签订合同总金额", width = 15)
@ApiModelProperty(value = "签订合同总金额")
private String contractAmount;
/**税率*/
@Excel(name = "税率", width = 15)
@@ -9,7 +9,7 @@
contract_name AS contractName,
signed_company_id AS signedCompanyId,
signed_company_temporary_id AS signedCompanyTemporaryId,
signed_company_temporary_name AS signedCompanTemporaryName,
signed_company_temporary_name AS signedCompanyTemporaryName,
signed_contacts_id AS signedContactsId,
signed_contacts_temporary_id AS signedContactsTemporaryId,
signed_contacts_temporary_name AS signedContactsTemporaryName,
@@ -0,0 +1,31 @@
package com.jero.contract.vo;
import com.jero.contract.entity.PaySpendingContract;
import com.jero.contract.entity.PaySpendingContractInstallment;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
@Data
public class PaySpendingContractDetailOutput extends PaySpendingContract implements Serializable {
/**
* 是否开口(1为是,0为否)
*/
private String opening_dictText;
/**
* 账款状态(1:未支付,2:部分支付,3:已付全款)
*/
private String accountStatus_dictText;
/**
* 是否打包(1:是,2:否)
*/
private String pack_dictText;
/**
* 分期记录
*/
@ApiModelProperty(value = "分期记录集合")
private List<PaySpendingContractInstallment> listInstallment;
}
@@ -0,0 +1,101 @@
package com.jero.contract.vo;
import lombok.Data;
import org.jeecgframework.poi.excel.annotation.Excel;
import java.io.Serializable;
import java.util.Date;
@Data
public class PaySpendingContractExcel implements Serializable {
/**合同编号*/
@Excel(name = "合同编号", width = 15)
private String contractNum;
/**合同名称*/
@Excel(name = "合同名称", width = 15)
private String contractName;
/**临时签订单位名称*/
@Excel(name = "签订单位名称", width = 15)
private String signedCompanyTemporaryName;
/**临时签订单位联系人名称*/
@Excel(name = "签订单位联系人", width = 15)
private String signedContactsTemporaryName;
/**是否开口(1:是,0:否)*/
@Excel(name = "是否开口", width = 15)
private Integer opening;
/**负责人名称*/
@Excel(name = "负责人", width = 15)
private String principalName;
/**部门名称*/
@Excel(name = "部门名称", width = 15)
private String departmentName;
/**签订合同总金额*/
@Excel(name = "签订合同总金额", width = 15)
private String contractAmount;
/**税率*/
@Excel(name = "税率", width = 15)
private String rate;
/**未税金额*/
@Excel(name = "未税金额", width = 15)
private String noTaxAmount;
/**合同签订日期*/
@Excel(name = "合同签订日期", width = 15, format = "yyyy-MM-dd")
private Date contractDate;
/**合同终止日期*/
@Excel(name = "合同终止日期", width = 15, format = "yyyy-MM-dd")
private Date terminationDate;
/**合同约定主要时点*/
@Excel(name = "合同约定主要时点", width = 15)
private String contractTimePoints;
/**应收金额*/
@Excel(name = "应收金额", width = 15)
private String accountsReceivableAmount;
/**已收金额*/
@Excel(name = "已收金额", width = 15)
private String amountReceived;
/**未收金额*/
@Excel(name = "未收金额", width = 15)
private String outstandingAmount;
/**账款状态(1:未支付,2:部分支付,3:已付全款)*/
@Excel(name = "账款状态", width = 15)
private Integer accountStatus;
/**合同约定付款次数*/
@Excel(name = "合同约定付款次数", width = 15)
private String contractPaymentTimes;
/**是否打包(1:是,0:否)*/
@Excel(name = "是否打包", width = 15)
private Integer pack;
/**打包年份*/
@Excel(name = "打包年份", width = 15)
private String packYear;
/**阶段名称*/
@Excel(name = "1阶段", width = 15)
private String phaseName1;
/**应收金额*/
@Excel(name = "1期应收", width = 15)
private Integer accountsReceivableAmount1;
/**应收时间*/
@Excel(name = "1期应收时间", width = 15, format = "yyyy-MM-dd")
private Date accountsReceivableTime1;
/**实收金额*/
@Excel(name = "1期实收", width = 15)
private Integer paidAmount1;
/**实收时间*/
@Excel(name = "1期实收时间", width = 15, format = "yyyy-MM-dd")
private Date paidTime1;
/**阶段名称*/
@Excel(name = "2阶段", width = 15)
private String phaseName2;
/**应收金额*/
@Excel(name = "2期应收", width = 15)
private Integer accountsReceivableAmount2;
/**应收时间*/
@Excel(name = "2期应收时间", width = 15, format = "yyyy-MM-dd")
private Date accountsReceivableTime2;
/**实收金额*/
@Excel(name = "2期实收", width = 15)
private Integer paidAmount2;
/**实收时间*/
@Excel(name = "2期实收时间", width = 15, format = "yyyy-MM-dd")
private Date paidTime2;
}