diff --git a/jero-boot-incoming-payment/src/main/java/com/jero/member/controller/TbMemberProjectSubitemController.java b/jero-boot-incoming-payment/src/main/java/com/jero/member/controller/TbMemberProjectSubitemController.java index 10c604a5..a03d29d2 100644 --- a/jero-boot-incoming-payment/src/main/java/com/jero/member/controller/TbMemberProjectSubitemController.java +++ b/jero-boot-incoming-payment/src/main/java/com/jero/member/controller/TbMemberProjectSubitemController.java @@ -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 { @Resource private ITbMemberProjectSubitemService tbMemberProjectSubitemService; - + @Resource + private ISysBaseAPI sysBaseAPI; /** * 分页列表查询 */ @@ -230,16 +236,13 @@ public class TbMemberProjectSubitemController extends JeroController importXls(HttpServletRequest request, TbMemberProjectSubitem tbMemberProjectSubitem) { - String projectId = tbMemberProjectSubitem.getProjectId(); - List 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 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("文件导入成功!"); } /** diff --git a/jero-boot-incoming-payment/src/main/java/com/jero/member/service/ITbMemberProjectSubitemService.java b/jero-boot-incoming-payment/src/main/java/com/jero/member/service/ITbMemberProjectSubitemService.java index 93b85e1b..0df8407f 100644 --- a/jero-boot-incoming-payment/src/main/java/com/jero/member/service/ITbMemberProjectSubitemService.java +++ b/jero-boot-incoming-payment/src/main/java/com/jero/member/service/ITbMemberProjectSubitemService.java @@ -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 excelData) { + int errorRowNum = 2; + List insertList = new ArrayList<>(); + List errorMessage = new ArrayList<>(); + //来款方式 + Map paymentTypeMap = sysBaseAPI.queryDictItemsMapByCode("payment_type"); + //需要发票 + Map invoiceTypeMap = sysBaseAPI.queryDictItemsMapByCode("invoice_type"); + //会员性质 + Map memberNatureMap = sysBaseAPI.queryDictItemsMapByCode("member_nature"); + List 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 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 queryPayIncomeContract = new LambdaQueryWrapper<>(); + queryPayIncomeContract.eq(PayIncomeContract::getContractNum,contractNum); + queryPayIncomeContract.eq(PayIncomeContract::getSignedCompanyId,subitemExcel.getCompanyId()); + List 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(",请修改!
"); + } + 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 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); // 来款方式为合同,校验合同编号 diff --git a/jero-boot-incoming-payment/src/main/java/com/jero/member/vo/TbMemberProjectSubitemExcel.java b/jero-boot-incoming-payment/src/main/java/com/jero/member/vo/TbMemberProjectSubitemExcel.java index 286f0bbf..15f9278d 100644 --- a/jero-boot-incoming-payment/src/main/java/com/jero/member/vo/TbMemberProjectSubitemExcel.java +++ b/jero-boot-incoming-payment/src/main/java/com/jero/member/vo/TbMemberProjectSubitemExcel.java @@ -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) diff --git a/jero-boot-incoming-payment/src/main/java/com/jero/member/vo/TbMemberProjectSubitemExcelImport.java b/jero-boot-incoming-payment/src/main/java/com/jero/member/vo/TbMemberProjectSubitemExcelImport.java new file mode 100644 index 00000000..536b4c82 --- /dev/null +++ b/jero-boot-incoming-payment/src/main/java/com/jero/member/vo/TbMemberProjectSubitemExcelImport.java @@ -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; +}