fix 标协会员导入的bug

This commit is contained in:
lijiarao
2024-03-28 15:06:01 +08:00
parent 4434d16a2a
commit 407c563c6a
4 changed files with 259 additions and 65 deletions
@@ -1,7 +1,9 @@
package com.jero.member.controller;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
@@ -13,7 +15,10 @@ import cn.hutool.core.date.DateUtil;
import cn.hutool.core.date.format.DateParser;
import com.jero.aspect.annotation.CompanyNameTranslate;
import com.jero.common.api.vo.Result;
import com.jero.common.exception.JeroBootException;
import com.jero.common.system.api.ISysBaseAPI;
import com.jero.common.system.query.QueryGenerator;
import com.jero.common.system.vo.DictModel;
import com.jero.common.system.vo.LoginUser;
import com.jero.common.util.AuthenticationUtils;
import com.jero.common.util.PasswordUtil;
@@ -53,7 +58,8 @@ import com.jero.common.aspect.annotation.AutoLog;
public class TbMemberProjectSubitemController extends JeroController<TbMemberProjectSubitem, ITbMemberProjectSubitemService> {
@Resource
private ITbMemberProjectSubitemService tbMemberProjectSubitemService;
@Resource
private ISysBaseAPI sysBaseAPI;
/**
* 分页列表查询
*/
@@ -230,16 +236,13 @@ public class TbMemberProjectSubitemController extends JeroController<TbMemberPro
@RequiresPermissions("safeguardStardsMember:import")
@PostMapping(value = "/importXls")
public Result<Object> importXls(HttpServletRequest request, TbMemberProjectSubitem tbMemberProjectSubitem) {
String projectId = tbMemberProjectSubitem.getProjectId();
List<Object> excelData = super.getExcelData(request, TbMemberProjectSubitemExcel.class);
for (Object obj : excelData) {
TbMemberProjectSubitemExcel subitemExcel = (TbMemberProjectSubitemExcel) obj;
TbMemberProjectSubitem subitem = new TbMemberProjectSubitem();
BeanUtils.copyProperties(subitemExcel,subitem);
subitem.setProjectId(projectId);
tbMemberProjectSubitemService.addExcel(subitem);
List<Object> excelData = super.getExcelData(request, TbMemberProjectSubitemExcelImport.class);
if (excelData.isEmpty()) {
throw new JeroBootException("导入数据为空,请填写数据之后重新导入!");
}
return Result.OK();
String projectId = tbMemberProjectSubitem.getProjectId();
tbMemberProjectSubitemService.addExcel(projectId,excelData);
return Result.OK("文件导入成功!");
}
/**
@@ -1,4 +1,5 @@
package com.jero.member.service;
import java.math.RoundingMode;
import java.util.*;
import cn.hutool.core.date.DateField;
@@ -17,10 +18,12 @@ import com.jero.common.system.api.ISysBaseAPI;
import com.jero.common.system.query.QueryGenerator;
import com.jero.common.system.vo.DictModel;
import com.jero.common.system.vo.LoginUser;
import com.jero.common.util.ValidUtil;
import com.jero.company.entity.PayCompanyManagement;
import com.jero.company.entity.PayContactsManagement;
import com.jero.company.service.IPayCompanyManagementService;
import com.jero.company.service.IPayContactsManagementService;
import com.jero.config.StaticConfig;
import com.jero.contract.entity.PayIncomeContract;
import com.jero.contract.entity.PayIncomeContractAssociated;
import com.jero.contract.service.IPayIncomeContractAssociatedService;
@@ -33,9 +36,7 @@ import com.jero.meeting.mapper.PayMeetingSituationMapper;
import com.jero.member.entity.TbMemberProjectSubitem;
import com.jero.member.enums.MemberStatusEnum;
import com.jero.member.mapper.TbMemberProjectSubitemMapper;
import com.jero.member.vo.CopyMemberVO;
import com.jero.member.vo.EditMemberBenefitsVO;
import com.jero.member.vo.QueryAggVO;
import com.jero.member.vo.*;
import com.jero.pack.entity.PayPackCompanyProject;
import com.jero.pack.service.IPayPackCompanyProjectService;
import com.jero.payment.entity.PayConfirmPaymentRecord;
@@ -46,8 +47,12 @@ import com.jero.project.common.PayProjectCommon;
import com.jero.statistics.entity.MemberLineChartMap;
import com.jero.statistics.entity.MemberLineChartVO;
import com.jero.statistics.entity.MemberPieChartVO;
import com.jero.valid.group.ChargeNotice;
import com.jero.valid.group.Contract;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -171,67 +176,153 @@ public class ITbMemberProjectSubitemService extends ServiceImpl<TbMemberProjectS
}
}
}
public void addExcel(String projectId, List<Object> excelData) {
int errorRowNum = 2;
List<TbMemberProjectSubitem> insertList = new ArrayList<>();
List<String> errorMessage = new ArrayList<>();
//来款方式
Map<String, String> paymentTypeMap = sysBaseAPI.queryDictItemsMapByCode("payment_type");
//需要发票
Map<String, String> invoiceTypeMap = sysBaseAPI.queryDictItemsMapByCode("invoice_type");
//会员性质
Map<String, String> memberNatureMap = sysBaseAPI.queryDictItemsMapByCode("member_nature");
List<String> companyNameList = new ArrayList<>();
for (Object obj : excelData) {
errorRowNum += 1;
TbMemberProjectSubitemExcelImport subitemExcel = (TbMemberProjectSubitemExcelImport) obj;
TbMemberProjectSubitem subitem = new TbMemberProjectSubitem();
errorMessage.addAll(ValidUtil.validateReturnListWithNum(subitemExcel,errorRowNum));
String companyName = subitemExcel.getCompanyId();
PayCompanyManagement companyManagement = companyManagementService.getCompanyByName(companyName);
if (companyManagement == null){
errorMessage.add("" + errorRowNum + "行:" + "会员单位不存在");
}else if(companyNameList.contains(companyName)){
errorMessage.add("" + errorRowNum + "行:" + "会员单位重复");
} else {
companyNameList.add(companyManagement.getCompanyName());
subitem.setCompanyName(companyManagement.getCompanyName());
subitem.setCompanyId(companyManagement.getId());
}
if (companyManagement != null){
String companyId = companyManagement.getId();
LambdaQueryWrapper<TbMemberProjectSubitem> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(TbMemberProjectSubitem::getProjectId, projectId);
wrapper.eq(TbMemberProjectSubitem::getCompanyId, companyId);
int count = this.count(wrapper);
if (count > 0) {
errorMessage.add("" + errorRowNum + "行:" + "会员单位已经存在");
}
String liaisonManId = subitemExcel.getLiaisonManId();
PayContactsManagement liaisonMan = payContactsManagementService.checkByCompanyIdAndName(liaisonManId, companyId);
if (liaisonMan == null){
errorMessage.add("" + errorRowNum + "行:" + "企业联系人不存在");
}else {
subitem.setLiaisonManId(liaisonMan.getId());
}
String postContactId = subitemExcel.getPostContactId();
PayContactsManagement postContact = payContactsManagementService.checkByCompanyIdAndName(postContactId, companyId);
if (postContact == null){
errorMessage.add("" + errorRowNum + "行:" + "邮寄联系人不存在");
}else {
subitem.setPostContactId(postContact.getId());
}
}
//会员性质
String memberNature = subitemExcel.getMemberNature();
if (!memberNatureMap.containsKey(memberNature)){
errorMessage.add("" + errorRowNum + "行:" + "会员性质不存在");
}else {
int memberNatureInt = Integer.parseInt(memberNatureMap.get(memberNature));
subitem.setMemberNature(memberNatureInt);
}
//待确收金额
String amountReceivable = subitemExcel.getAmountReceivable();
subitem.setAmountReceivable(new BigDecimal(amountReceivable));
//预估到账日期
String estimatedArrivalDate = subitemExcel.getEstimatedArrivalDate();
try {
subitem.setEstimatedArrivalDate(DateUtil.parseDate(estimatedArrivalDate));
}catch (Exception e){
log.error("error",e);
}
String paymentMethod = subitemExcel.getPaymentMethod();
if (!paymentTypeMap.containsKey(paymentMethod)){
errorMessage.add("" + errorRowNum + "行:" + "来款方式不存在");
}else {
int paymentMethodInt = Integer.parseInt(paymentTypeMap.get(paymentMethod));
subitem.setPaymentMethod(paymentMethodInt);
if (Objects.equals(paymentMethodInt, PayProjectCommon.CHARGE_WAY2)) {
errorMessage.addAll(ValidUtil.validateReturnListWithNum(subitemExcel,errorRowNum, Contract.class));
String contractNum = subitemExcel.getContractNum();
subitem.setContractNum(contractNum);
// 合同编号验证
LambdaQueryWrapper<PayIncomeContract> queryPayIncomeContract = new LambdaQueryWrapper<>();
queryPayIncomeContract.eq(PayIncomeContract::getContractNum,contractNum);
queryPayIncomeContract.eq(PayIncomeContract::getSignedCompanyId,subitemExcel.getCompanyId());
List<PayIncomeContract> listPayIncomeContract = payIncomeContractService.list(queryPayIncomeContract);
if(CollectionUtils.isEmpty(listPayIncomeContract)){
errorMessage.add("" + errorRowNum + "行:合同号不存在");
}
}
if (Objects.equals(paymentMethodInt, PayProjectCommon.CHARGE_WAY3)) {
errorMessage.addAll(ValidUtil.validateReturnListWithNum(subitemExcel,errorRowNum, ChargeNotice.class));
String chargeNoticeNo = subitemExcel.getChargeNoticeNo();
subitem.setChargeNoticeNo(chargeNoticeNo);
}
}
String invoiceRequirements = subitemExcel.getInvoiceRequirements();
if (!invoiceTypeMap.containsKey(invoiceRequirements)){
errorMessage.add("" + errorRowNum + "行:" + "需要发票不存在");
}else {
int invoiceRequirementsInt = Integer.parseInt(invoiceTypeMap.get(invoiceRequirements));
subitem.setInvoiceRequirements(invoiceRequirementsInt);
}
//备注
String remark = subitemExcel.getRemark();
subitem.setRemark(remark);
subitem.setProjectId(projectId);
insertList.add(subitem);
}
if (!errorMessage.isEmpty()) {
StringBuilder msg = new StringBuilder();
for (String s : errorMessage) {
msg.append(s).append(",请修改!<br/>");
}
throw new JeroBootException(msg.toString());
}
for (TbMemberProjectSubitem subitem : insertList) {
tbMemberProjectSubitemService.addExcel(subitem);
}
}
public void addExcel(TbMemberProjectSubitem tbMemberProjectSubitem) {
setDefaultCreateValue(tbMemberProjectSubitem);
String companyId = tbMemberProjectSubitem.getCompanyId();
PayCompanyManagement companyManagement = companyManagementService.getById(companyId);
if (companyManagement == null){
throw new JeroBootException("单位不存在");
}
tbMemberProjectSubitem.setCompanyName(companyManagement.getCompanyName());
String liaisonManId = tbMemberProjectSubitem.getLiaisonManId();
PayContactsManagement liaisonMan = payContactsManagementService.checkByCompanyIdAndName(liaisonManId, companyId);
if (liaisonMan == null){
throw new JeroBootException("企业联系人不存在");
}else {
tbMemberProjectSubitem.setLiaisonManId(liaisonMan.getId());
}
String postContactId = tbMemberProjectSubitem.getPostContactId();
PayContactsManagement postContact = payContactsManagementService.checkByCompanyIdAndName(postContactId, companyId);
if (postContact == null){
throw new JeroBootException("邮寄联系人不存在");
}else {
tbMemberProjectSubitem.setPostContactId(postContact.getId());
}
String projectId = tbMemberProjectSubitem.getProjectId();
LambdaQueryWrapper<TbMemberProjectSubitem> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(TbMemberProjectSubitem::getProjectId, projectId);
wrapper.eq(TbMemberProjectSubitem::getCompanyId, companyId);
//wrapper.ne()
int count = this.count(wrapper);
if (count > 0) {
throw new JeroBootException("会员单位已经存在");
}
if (Objects.isNull(tbMemberProjectSubitem.getAmountReceivable())) {
throw new JeroBootException("待确收金额不能为空");
}
Integer paymentMethod = tbMemberProjectSubitem.getPaymentMethod();
if (paymentMethod == null){
throw new JeroBootException("来款方式不能为空");
}
if (Objects.equals(paymentMethod, PayProjectCommon.CHARGE_WAY2)) {
if (StringUtils.isBlank(tbMemberProjectSubitem.getContractNum())) {
throw new JeroBootException("合同号不能为空");
}
}
if (Objects.equals(paymentMethod, PayProjectCommon.CHARGE_WAY3)) {
if (Objects.isNull(tbMemberProjectSubitem.getChargeNoticeNo())) {
throw new JeroBootException("收费通知号不能为空");
}
}
String liaisonManId = tbMemberProjectSubitem.getLiaisonManId();
//赋值会员编号
TbMemberProjectSubitem takeEffectInfo = getTakeEffectInfo(companyId);
if (takeEffectInfo!=null){
tbMemberProjectSubitem.setMemberNo(takeEffectInfo.getMemberNo());
}
//默认税率
BigDecimal amountReceivable = tbMemberProjectSubitem.getAmountReceivable();
tbMemberProjectSubitem.setTaxRate(StaticConfig.TAX_RATE);
BigDecimal noTaxAmount = amountReceivable.divide(StaticConfig.TAX_RATE_CALCULATE, 2, RoundingMode.HALF_UP);
BigDecimal tax = amountReceivable.subtract(noTaxAmount);
tbMemberProjectSubitem.setNoTaxAmount(noTaxAmount);
tbMemberProjectSubitem.setTax(tax);
save(tbMemberProjectSubitem);
// 来款方式为合同,校验合同编号
@@ -77,8 +77,8 @@ public class TbMemberProjectSubitemExcel {
private String chargeNoticeNo;
/**合同编号*/
@Excel(name = "合同", width = 15)
@ApiModelProperty(value = "合同")
@Excel(name = "合同号", width = 15)
@ApiModelProperty(value = "合同号")
private String contractNum;
@Excel(name = "备注", width = 15)
@@ -0,0 +1,100 @@
package com.jero.member.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.jero.common.aspect.annotation.Dict;
import com.jero.valid.group.ChargeNotice;
import com.jero.valid.group.Contract;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.springframework.format.annotation.DateTimeFormat;
import javax.validation.constraints.*;
import java.math.BigDecimal;
import java.util.Date;
/**
* @Description: 标协会员项目成员表
* @Author: jero-boot
* @Date: 2021-09-01
* @Version: V1.0
*/
@Data
public class TbMemberProjectSubitemExcelImport {
/**会员单位*/
@ApiModelProperty(value = "会员单位")
@Excel(name = "会员单位", width = 15)
@NotBlank(message = "会员单位不能为空")
@Size(max = 50, message = "会员单位最大为50字符")
@Dict(dictTable = "pay_company_management", dicText = "company_name", dicCode = "id")
private String companyId;
/**会员性质(1-副理事单位,2-理事单位,3-会员单位)*/
@Excel(name = "会员性质", width = 15)
@Dict(dicCode = "member_nature")
@NotBlank(message = "会员性质不能为空")
@ApiModelProperty(value = "会员性质(1-副理事单位,2-理事单位,3-会员单位)")
private String memberNature;
/**会员联系人*/
@ApiModelProperty(value = "企业联系人")
@Excel(name = "企业联系人", width = 15)
@NotBlank(message = "企业联系人不能为空")
@Size(max = 50, message = "企业联系人最大为50字符")
@Dict(dictTable = "pay_contacts_management", dicText = "name", dicCode = "id")
private String liaisonManId;
@ApiModelProperty(value = "邮寄联系人id")
@Excel(name = "邮寄联系人", width = 15)
@NotBlank(message = "邮寄联系人不能为空")
@Size(max = 50, message = "邮寄联系人最大为50字符")
private String postContactId;
/**
* 待确收金额
*/
@Excel(name = "待确收金额", width = 15)
@ApiModelProperty(value = "待确收金额")
@NotBlank(message = "待确收金额不能为空")
@Pattern(regexp = "^[0-9]{1,10}(\\.[0-9]{1,2})?$",message = "待确收金额格式错误")
private String amountReceivable;
/**预估到账日期*/
@ApiModelProperty(value = "预估到账日期")
@NotBlank(message = "预估到账日期不能为空")
@Pattern(regexp = "^\\d{4}-\\d{1,2}-\\d{1,2}$",message = "预估到账日期格式错误")
@Excel(name = "预估到账日期", width = 15)
private String estimatedArrivalDate;
/**需要发票*/
@Excel(name = "需要发票", width = 15)
@ApiModelProperty(value = "需要发票")
@NotBlank(message = "需要发票不能为空")
@Dict(dicCode = "invoice_type")
private String invoiceRequirements;
/**缴费方式*/
@Excel(name = "来款方式", width = 15)
@Dict(dicCode = "payment_type")
private String paymentMethod;
/**收费通知号*/
@Excel(name = "收费通知号", width = 15)
@ApiModelProperty(value = "收费通知号")
@NotBlank(message = "收费通知号不能为空", groups = ChargeNotice.class)
@Size(max = 50, message = "收费通知号最大为50字符", groups = ChargeNotice.class)
private String chargeNoticeNo;
/**合同编号*/
@Excel(name = "合同号", width = 15)
@ApiModelProperty(value = "合同号")
@NotBlank(message = "合同号不能为空", groups = Contract.class)
@Size(max = 50, message = "合同号最大为50字符", groups = Contract.class)
private String contractNum;
@Excel(name = "备注", width = 15)
@ApiModelProperty(value = "备注")
@Size(max = 200, message = "备注最大为200个字符")
private String remark;
}