diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/DateUtils.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/DateUtils.java index c6712e45..879a6472 100644 --- a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/DateUtils.java +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/DateUtils.java @@ -646,5 +646,28 @@ public class DateUtils extends PropertyEditorSupport { calendar.setTime(getDate()); return calendar.get(Calendar.YEAR); } + /** + * @Description 校验日期格式 + * @Author lqt + * @Date 2021/7/8 + * @Param str + * @Return + * @Exception + */ + public static boolean isValidDate(String str) { + boolean convertSuccess=true; + if(str.length() != 10){ + return false; + } + // 指定日期格式为四位年/两位月份/两位日期,注意yyyy/MM/dd区分大小写; + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); + try { + format.setLenient(false); + format.parse(str); + } catch (ParseException e) { + convertSuccess = false; + } + return convertSuccess; + } } \ No newline at end of file diff --git a/jero-boot-incoming-payment/src/main/java/com/jero/contract/common/PayIncomeContractCommon.java b/jero-boot-incoming-payment/src/main/java/com/jero/contract/common/PayIncomeContractCommon.java index 7fa5782d..5639dd53 100644 --- a/jero-boot-incoming-payment/src/main/java/com/jero/contract/common/PayIncomeContractCommon.java +++ b/jero-boot-incoming-payment/src/main/java/com/jero/contract/common/PayIncomeContractCommon.java @@ -1,5 +1,8 @@ package com.jero.contract.common; +import java.util.Arrays; +import java.util.List; + public class PayIncomeContractCommon { /** * 合同状态(1:草稿,2:待审核,3:已通过,4:未通过,5:已存档) @@ -29,6 +32,18 @@ public class PayIncomeContractCommon { * 是否打包(1:是,0:否) */ public final static Integer PACK0 = 0; + /** + * 账款状态(1:未支付,2:部分支付,3:已付全款) + */ + public final static Integer ACCOUNT_STATUS1 = 1; + /** + * 账款状态(1:未支付,2:部分支付,3:已付全款) + */ + public final static Integer ACCOUNT_STATUS2 = 2; + /** + * 账款状态(1:未支付,2:部分支付,3:已付全款) + */ + public final static Integer ACCOUNT_STATUS3 = 3; /** * 项目类型(1:普通项目,2:工作组项目,3:会议项目,4:会员项目,5:标协会员项目) */ @@ -49,5 +64,15 @@ public class PayIncomeContractCommon { * 项目类型(1:普通项目,2:工作组项目,3:会议项目,4:会员项目,5:标协会员项目) */ public final static String PROJECT_TYPE5 = "5"; + /** + * 支出合同excel表头 + */ + public final static List LIST_SPENDING_CONTRACT = Arrays.asList("合同编号","合同名称","签订单位名称","签订单位联系人","是否开口","负责人", + "签订合同总金额","税率","未税金额","合同签订日期","合同终止日期","合同约定主要时点", + "应收金额","已收金额","合同约定付款次数","是否打包","打包年份"); + /** + * 支出合同分期信息excel 表头 + */ + public final static List LIST_SPENDING_CONTRACT_INSTALLMENT = Arrays.asList("阶段","期应收","期应收时间","期实收","期实收时间"); } diff --git a/jero-boot-incoming-payment/src/main/java/com/jero/contract/controller/PayIncomeContractController.java b/jero-boot-incoming-payment/src/main/java/com/jero/contract/controller/PayIncomeContractController.java index 70a2854e..b7d830e3 100644 --- a/jero-boot-incoming-payment/src/main/java/com/jero/contract/controller/PayIncomeContractController.java +++ b/jero-boot-incoming-payment/src/main/java/com/jero/contract/controller/PayIncomeContractController.java @@ -26,6 +26,7 @@ import com.jero.contract.service.IPayIncomeContractInstallmentService; import com.jero.contract.service.IPayIncomeContractService; import com.jero.contract.vo.*; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; @@ -142,7 +143,7 @@ public class PayIncomeContractController extends JeroController getContractNum(@RequestParam(name="contractNum") String contractNum) { + if(StringUtils.isBlank(contractNum)){ + return Result.error("合同编号不能为空!"); + } + try { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(PaySpendingContract::getContractNum,contractNum); + PaySpendingContract paySpendingContract = paySpendingContractService.getOne(query); + if(!Objects.isNull(paySpendingContract)){ + return Result.OK("合同编号存在!"); + } + }catch (Exception e){ + log.error("支出合同-验证合同编号是否存在异常",e); + return Result.OK("合同编号存在!"); + } + return Result.error("合同编号不存在!"); + } /** * 通过id删除 * @@ -212,7 +225,7 @@ public class PaySpendingContractController extends JeroController importExcel(HttpServletRequest request, HttpServletResponse response) { - MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; - Map fileMap = multipartRequest.getFileMap(); - for (Map.Entry entity : fileMap.entrySet()) { - // 获取上传文件对象 - MultipartFile file = entity.getValue(); - List> list = read(file); - if(!CollectionUtils.isEmpty(list)){ - List listSpendingContract = Arrays.asList("合同编号","合同名称","签订单位名称","签订单位联系人","是否开口","负责人", - "部门名称","签订合同总金额","税率","未税金额","合同签订日期","合同终止日期","合同约定主要时点", - "应收金额","已收金额","未收金额","账款状态","合同约定付款次数","是否打包","打包年份"); - List listSpendingContractInstallment = Arrays.asList("阶段","期应收","期应收时间","期实收","期实收时间"); - // 校验表头 - Map map = list.get(1); - if(!Objects.isNull(map)){ - int count = map.size(); - // 合同信息字段为20个,分期信息为5个 - if(count < 20){ - throw new JeroBootException("excel表头错误!"); - }else { - listSpendingContract.forEach(p->{ - if(!Objects.equals(map.get(listSpendingContract.indexOf(p)),p)){ - throw new JeroBootException("excel表头错误!"); - } - }); - int count1 = count - 20; - if(count1 != 0){ - Pattern p = Pattern.compile("[0-9]*"); - Matcher m = p.matcher(String.valueOf(count1 / 5)); - if (!m.matches()){ - throw new JeroBootException("excel表头错误!"); - } - int count2 = count1/5; - for (int i = 1; i <= count2; i++) { - int finalI = i; - listSpendingContractInstallment.forEach(item->{ - int n = listSpendingContractInstallment.indexOf(item) + 1; - if(Objects.equals((n + 1) + item,map.get(20 + finalI * n))){ - throw new JeroBootException("excel表头错误!"); - } - }); - } - } - } - } - Map mapOpening = sysBaseAPI.queryDictItemsMapByCode("yn"); - Map mapAccountStatus = sysBaseAPI.queryDictItemsMapByCode("revenue_contract_account_status"); - Map mapPack = sysBaseAPI.queryDictItemsMapByCode("yn"); - StringBuilder sb = new StringBuilder(); - list.forEach(sub->{ - int count = sub.size(); - int n = list.indexOf(sub); - if(n < 2){ - return; - } - - if(count < 20){ - sb.append("第").append(n + 1).append("行,excel数据错误!"); - }else { - PaySpendingContract paySpendingContract = setPaySpendingContract(sub,mapOpening,mapAccountStatus,mapPack,n,sb); - paySpendingContractService.save(paySpendingContract); - int count1 = count - 20; - if(count > 0){ - Pattern p = Pattern.compile("[0-9]*"); - Matcher m = p.matcher(String.valueOf(count1 / 5)); - if (!m.matches()){ - throw new JeroBootException("excel数据错误!"); - } - int count2 = count1/5; - List listPaySpendingContractInstallment = new ArrayList<>(); - for (int i = 0; i < count2; i++) { - PaySpendingContractInstallment paySpendingContractInstallment = new PaySpendingContractInstallment(); - paySpendingContractInstallment.setContractId(paySpendingContract.getId()); - paySpendingContractInstallment.setPhaseName(sub.get(20 + (i * 5) + 0)); - paySpendingContractInstallment.setAccountsReceivableAmount(new BigDecimal(sub.get(20 + (i * 5) + 1))); - paySpendingContractInstallment.setAccountsReceivableTime(DateUtils.str2Date(sub.get(20 + (i * 5) + 2),new SimpleDateFormat("yyyy-MM-dd"))); - paySpendingContractInstallment.setPaidAmount(new BigDecimal(sub.get(20 + (i * 5) + 3))); - paySpendingContractInstallment.setPaidTime(DateUtils.str2Date(sub.get(20 + (i * 5) + 4),new SimpleDateFormat("yyyy-MM-dd"))); - listPaySpendingContractInstallment.add(paySpendingContractInstallment); - } - if(!CollectionUtils.isEmpty(listPaySpendingContractInstallment)){ - - } - paySpendingContractInstallmentService.saveBatch(listPaySpendingContractInstallment); - } - } - }); - } - } + paySpendingContractService.importExcel(request); return Result.OK("文件导入成功!"); } - - private PaySpendingContract setPaySpendingContract(Map map,Map mapOpening, - Map mapAccountStatus,Map mapPack, - int n,StringBuilder sb){ - PaySpendingContract paySpendingContract = new PaySpendingContract(); - paySpendingContract.setContractNum(map.get(0)); - paySpendingContract.setContractName(map.get(1)); - paySpendingContract.setSignedCompanyTemporaryName(map.get(2)); - paySpendingContract.setSignedContactsTemporaryName(map.get(3)); - AtomicBoolean opening = new AtomicBoolean(false); - mapOpening.forEach((k,v)->{ - if(Objects.equals(map.get(4),v)){ - opening.set(true); - paySpendingContract.setOpening(Integer.parseInt(k)); - } - }); - if(!opening.get()){ - sb.append("第").append(n + 1).append("行,是否开口错误!"); - } - paySpendingContract.setPrincipalName(map.get(5)); - paySpendingContract.setDepartmentName(map.get(6)); - paySpendingContract.setContractAmount(map.get(7)); - paySpendingContract.setRate(new BigDecimal(map.get(8))); - paySpendingContract.setNoTaxAmount(new BigDecimal(map.get(9))); - paySpendingContract.setContractDate(DateUtils.str2Date(map.get(10),new SimpleDateFormat("yyyy-MM-dd"))); - paySpendingContract.setTerminationDate(DateUtils.str2Date(map.get(10),new SimpleDateFormat("yyyy-MM-dd"))); - paySpendingContract.setContractTimePoints(map.get(12)); - paySpendingContract.setAccountsReceivableAmount(new BigDecimal(map.get(13))); - paySpendingContract.setAmountReceived(new BigDecimal(map.get(14))); - paySpendingContract.setOutstandingAmount(new BigDecimal(map.get(15))); - AtomicBoolean accountStatus = new AtomicBoolean(false); - mapAccountStatus.forEach((k,v)->{ - if(Objects.equals(map.get(16),v)){ - accountStatus.set(true); - paySpendingContract.setAccountStatus(Integer.parseInt(k)); - } - }); - if(!accountStatus.get()){ - sb.append("第").append(n + 1).append("行,账款状态错误!"); - } - paySpendingContract.setContractPaymentTimes(map.get(17)); - AtomicBoolean pack = new AtomicBoolean(false); - mapPack.forEach((k,v)->{ - if(Objects.equals(map.get(18),v)){ - pack.set(true); - paySpendingContract.setPack(Integer.parseInt(k)); - } - }); - if(!pack.get()){ - sb.append("第").append(n + 1).append("行,是否打包错误!"); - } - paySpendingContract.setPackYear(map.get(19)); - return paySpendingContract; - } - - /** 导入excel表格,返回的List>数据结构. - * @param - * @return 返回list集合 - * @throws Exception - */ - private List> read(MultipartFile file) { - //最终返回数据 - List> list = new ArrayList<>(); - try{ - Workbook workbook = null; - InputStream is = file.getInputStream(); - String name = file.getOriginalFilename().toLowerCase(); - // 创建excel操作对象 - if (name.contains(".xlsx") || name.contains(".xls")) { - workbook = WorkbookFactory.create(is); - } - //得到一个工作表 - Sheet sheet = workbook.getSheetAt(0); - //获得数据的总行数 - int totalRowNum = sheet.getLastRowNum(); - - //获得总列数 - int cellLength = sheet.getRow(0).getPhysicalNumberOfCells(); - Map map = null; - //获得所有数据 - //从第x行开始获取 - for(int x = 0 ; x <= totalRowNum ; x++){ - map = new HashMap<>(); - //获得第i行对象 - Row row = sheet.getRow(x); - //如果一行里的所有单元格都为空则不放进list里面 - int a = 0; - for(int y=0;y ids); + /** + * @Description 通过excel导入数据 + * @Author lqt + * @Date 2021/9/9 + * @Param + * @Return + * @Exception + */ + void importExcel(HttpServletRequest req); } diff --git a/jero-boot-incoming-payment/src/main/java/com/jero/contract/service/impl/PaySpendingContractServiceImpl.java b/jero-boot-incoming-payment/src/main/java/com/jero/contract/service/impl/PaySpendingContractServiceImpl.java index 88e52d47..8132b55b 100644 --- a/jero-boot-incoming-payment/src/main/java/com/jero/contract/service/impl/PaySpendingContractServiceImpl.java +++ b/jero-boot-incoming-payment/src/main/java/com/jero/contract/service/impl/PaySpendingContractServiceImpl.java @@ -6,7 +6,13 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.jero.common.exception.JeroBootException; +import com.jero.common.system.api.ISysBaseAPI; +import com.jero.common.util.DateUtils; 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.contract.common.PayIncomeContractCommon; import com.jero.contract.entity.PayIncomeContract; import com.jero.contract.entity.PayIncomeContractInstallment; @@ -15,8 +21,11 @@ import com.jero.contract.entity.PaySpendingContractInstallment; import com.jero.contract.mapper.PaySpendingContractMapper; import com.jero.contract.service.IPaySpendingContractInstallmentService; import com.jero.contract.service.IPaySpendingContractService; +import com.jero.contract.vo.PaySpendingContractImportExcel; import com.jero.contract.vo.PaySpendingContractInput; +import com.jero.modules.system.entity.SysDepart; import com.jero.modules.system.entity.SysUser; +import com.jero.modules.system.service.ISysDepartService; import com.jero.modules.system.service.ISysUserService; import com.jero.temporary.entity.PayCompanyManagementTemporary; import com.jero.temporary.entity.PayContactsManagementTemporary; @@ -25,13 +34,25 @@ import com.jero.temporary.service.IPayContactsManagementTemporaryService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; +import org.apache.poi.ss.usermodel.*; +import org.apache.poi.xssf.usermodel.XSSFCell; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.MultipartHttpServletRequest; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; +import javax.servlet.http.HttpServletRequest; +import java.io.InputStream; +import java.math.BigDecimal; +import java.text.DateFormat; +import java.text.DecimalFormat; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import java.util.stream.Collectors; /** @@ -54,9 +75,16 @@ public class PaySpendingContractServiceImpl extends ServiceImpl fileMap = multipartRequest.getFileMap(); + for (Map.Entry entity : fileMap.entrySet()) { + // 获取上传文件对象 + MultipartFile file = entity.getValue(); + List> list = read(file); + if(!CollectionUtils.isEmpty(list)){ + List listSpendingContract = PayIncomeContractCommon.LIST_SPENDING_CONTRACT; + List listSpendingContractInstallment = PayIncomeContractCommon.LIST_SPENDING_CONTRACT_INSTALLMENT; + // 校验表头 + Map map = list.get(1); + if(!Objects.isNull(map)){ + int count = map.size(); + // 合同信息字段为20个,分期信息为5个 + if(count < 17){ + throw new JeroBootException("excel表头错误!"); + }else { + listSpendingContract.forEach(p->{ + if(!Objects.equals(map.get(listSpendingContract.indexOf(p)),p)){ + throw new JeroBootException("excel表头错误!"); + } + }); + int count1 = count - 17; + if(count1 != 0){ + Pattern p = Pattern.compile("[0-9]*"); + Matcher m = p.matcher(String.valueOf(count1 / 5)); + if (!m.matches()){ + throw new JeroBootException("excel表头错误!"); + } + int count2 = count1/5; + for (int i = 1; i <= count2; i++) { + int finalI = i; + listSpendingContractInstallment.forEach(item->{ + int n = listSpendingContractInstallment.indexOf(item) + 1; + if(Objects.equals((n + 1) + item,map.get(17 + finalI * n))){ + throw new JeroBootException("excel表头错误!"); + } + }); + } + } + } + } + Map mapOpening = sysBaseAPI.queryDictItemsMapByCode("yn"); +// Map mapAccountStatus = sysBaseAPI.queryDictItemsMapByCode("revenue_contract_account_status"); + Map mapPack = sysBaseAPI.queryDictItemsMapByCode("yn"); + StringBuilder sb = new StringBuilder(); + List listPaySpendingContractImportExcel = new ArrayList<>(); + list.forEach(sub->{ + int count = sub.size(); + int n = list.indexOf(sub); + if(n < 2){ + return; + } + if(count < 17){ + sb.append("第").append(n + 1).append("行,excel数据错误!"); + }else { + PaySpendingContractImportExcel paySpendingContractImportExcel = new PaySpendingContractImportExcel(); + // 获取合同信息 + PaySpendingContract paySpendingContract = setPaySpendingContractExcel(sub,mapOpening,mapPack,n + 1,sb); + if(!Objects.isNull(paySpendingContract)){ + paySpendingContractImportExcel.setSpendingContract(paySpendingContract); + } + int count1 = count - 17; + if(count > 0){ + Pattern p = Pattern.compile("[0-9]*"); + Matcher m = p.matcher(String.valueOf(count1 / 5)); + if (!m.matches()){ + throw new JeroBootException("excel数据错误!"); + } + int count2 = count1/5; + List listPaySpendingContractInstallment = new ArrayList<>(); + Pattern pattern = Pattern.compile("[0-9]*\\.?[0-9]+"); + for (int i = 0; i < count2; i++) { + if(StringUtils.isBlank(sub.get(17 + (i * 5) + 0))){ + continue; + } + int mm = 17 + (i * 5); + PaySpendingContractInstallment paySpendingContractInstallment = new PaySpendingContractInstallment(); + paySpendingContractInstallment.setPhaseName(sub.get(mm + 0)); + if(!StringUtils.isBlank(sub.get(mm + 1))){ + if(!pattern.matcher(sub.get(mm + 1)).matches()){ + sb.append("第").append(n + 1).append("行,").append(i+1).append("期应收金额格式错误!"); + }else{ + paySpendingContractInstallment.setAccountsReceivableAmount(new BigDecimal(sub.get(mm + 1))); + } + } + if(!StringUtils.isBlank(sub.get(mm + 2))){ + if(!DateUtils.isValidDate(sub.get(mm + 2))){ + sb.append("第").append(n + 1).append("行,").append(i+1).append("期应收时间日期格式不正确
"); + }else{ + paySpendingContractInstallment.setAccountsReceivableTime(DateUtils.str2Date(sub.get(mm + 2),new SimpleDateFormat("yyyy-MM-dd"))); + } + } + if(!StringUtils.isBlank(sub.get(mm + 3))){ + if(!pattern.matcher(sub.get(mm + 3)).matches()){ + sb.append("第").append(n + 1).append("行,").append(i+1).append("期实收金额格式错误!"); + }else{ + paySpendingContractInstallment.setPaidAmount(new BigDecimal(sub.get(mm + 3))); + } + } + if(!StringUtils.isBlank(sub.get(mm + 4))) { + if (!DateUtils.isValidDate(sub.get(mm + 4))) { + sb.append("第").append(n + 1).append("行,").append(i+1).append("期实收时间日期格式不正确
"); + } else { + paySpendingContractInstallment.setPaidTime(DateUtils.str2Date(sub.get(mm + 4), new SimpleDateFormat("yyyy-MM-dd"))); + } + } + listPaySpendingContractInstallment.add(paySpendingContractInstallment); + } + if(!Objects.isNull(paySpendingContract) && !CollectionUtils.isEmpty(listPaySpendingContractInstallment)){ + paySpendingContractImportExcel.setListInstallment(listPaySpendingContractInstallment); + } + if(!Objects.isNull(paySpendingContract)){ + listPaySpendingContractImportExcel.add(paySpendingContractImportExcel); + } + } + } + }); + if(!StringUtils.isBlank(sb)){ + throw new JeroBootException(sb.toString()); + } + // 校验excel + if(!CollectionUtils.isEmpty(listPaySpendingContractImportExcel)){ + List listPaySpendingContractData = listPaySpendingContractImportExcel.stream().map(PaySpendingContractImportExcel::getSpendingContract).collect(Collectors.toList()); + // 获取excel合同编号 + List listContractNum = listPaySpendingContractData.stream().map(PaySpendingContract::getContractNum).collect(Collectors.toList()); + // 获取数据库里 合同编号 + LambdaQueryWrapper queryDBContractNum = new LambdaQueryWrapper<>(); + queryDBContractNum.in(PaySpendingContract::getContractNum,listContractNum); + List listDBContractNum = paySpendingContractService.list(queryDBContractNum); + + // 获取excel签订单位 + List listSignedCompanyTemporaryName = listPaySpendingContractData.stream().map(PaySpendingContract::getSignedCompanyTemporaryName).collect(Collectors.toList()); + LambdaQueryWrapper queryDBSignedCompanyTemporaryName = new LambdaQueryWrapper<>(); + queryDBSignedCompanyTemporaryName.in(PayCompanyManagement::getCompanyName,listSignedCompanyTemporaryName); + List listDBSignedCompanyTemporaryName = payCompanyManagementService.list(queryDBSignedCompanyTemporaryName); + + // 获取excel签订单位联系人 + List listSignedContactsTemporaryName = listPaySpendingContractData.stream().map(PaySpendingContract::getSignedContactsTemporaryName).collect(Collectors.toList()); + LambdaQueryWrapper queryDBSignedContactsTemporaryName = new LambdaQueryWrapper<>(); + queryDBSignedContactsTemporaryName.in(PayContactsManagement::getName,listSignedContactsTemporaryName); + List listDBSignedContactsTemporaryName = payContactsManagementService.list(queryDBSignedContactsTemporaryName); + + // 获取excel负责人 + List listDBPrincipalName = sysUserService.list(); + + // 获取excel部门名称 + List listDepartmentName = sysDepartService.list(); + + // 校验excel中是否存在重复合同编号 + List listPaySpendingContract = new ArrayList<>(); + listPaySpendingContractImportExcel.forEach(p->{ + int n = listPaySpendingContractImportExcel.indexOf(p); + // 校验合同信息 + PaySpendingContract paySpendingContract = p.getSpendingContract(); + // 校验excel中是否存在重复合同编号 + List listPaySpendingContractNew = listPaySpendingContract.stream().filter(item-> + Objects.equals(item.getContractNum(),paySpendingContract.getContractNum())).collect(Collectors.toList()); + if(!CollectionUtils.isEmpty(listPaySpendingContractNew)){ + sb.append("第").append(n + 1).append("行,合同编号在excel中重复,请修改!"); + } + listPaySpendingContract.add(paySpendingContract); + if(!Objects.isNull(paySpendingContract)){ + StringBuilder msg = ValidUtil.validateExcel(paySpendingContract,n + 1); + if(!StringUtils.isBlank(msg)){ + sb.append(msg.toString()); + } + } + // 验证数据库中是否存在合同编号 + if(!StringUtils.isBlank(paySpendingContract.getContractNum())){ + // 获取数据库中数据 + List listDB = listDBContractNum.stream().filter(item-> + Objects.equals(item.getContractNum(),paySpendingContract.getContractNum())).collect(Collectors.toList()); + if(!CollectionUtils.isEmpty(listDB)){ + sb.append("第").append(n + 1).append("行,合同编号已存在,请修改!"); + } + }else{ + sb.append("第").append(n + 1).append("行,合同编号不能为空,请修改!"); + } + // 验证数据库中是否存在签订单位 + if(!StringUtils.isBlank(paySpendingContract.getSignedCompanyTemporaryName())){ + List listDB = listDBSignedCompanyTemporaryName.stream().filter(item-> + Objects.equals(item.getCompanyName(),paySpendingContract.getSignedCompanyTemporaryName())).collect(Collectors.toList()); + if(CollectionUtils.isEmpty(listDB)){ + sb.append("第").append(n + 1).append("行,签订单位不存在,请修改!"); + }else{ + paySpendingContract.setSignedCompanyId(listDB.get(0).getId()); + } + }else{ + sb.append("第").append(n + 1).append("行,签订单位不能为空,请修改!"); + } + // 验证数据库中是否存在签订单位联系人 + if(!StringUtils.isBlank(paySpendingContract.getSignedCompanyTemporaryName())){ + if(!StringUtils.isBlank(paySpendingContract.getSignedCompanyId())){ + List listDB = listDBSignedContactsTemporaryName.stream().filter(item-> + Objects.equals(item.getCompanyName(),paySpendingContract.getSignedCompanyTemporaryName()) + && Objects.equals(item.getCompanyId(),paySpendingContract.getSignedCompanyId())).collect(Collectors.toList()); + if(CollectionUtils.isEmpty(listDB)){ + sb.append("第").append(n + 1).append("行,签订企业下签订单位联系人不存在,请修改!"); + }else{ + paySpendingContract.setSignedContactsId(listDB.get(0).getId()); + } + } + }else{ + sb.append("第").append(n + 1).append("行,签订单位联系人不能为空,请修改!"); + } + // 验证数据库中是否存在负责人 + if(!StringUtils.isBlank(paySpendingContract.getContractName())){ + List listDB = listDBPrincipalName.stream().filter(item-> + Objects.equals(item.getUsername(),paySpendingContract.getPrincipalName())).collect(Collectors.toList()); + if(CollectionUtils.isEmpty(listDB)){ + sb.append("第").append(n + 1).append("行,负责人不存在,请修改!"); + }else{ + paySpendingContract.setPrincipalId(listDB.get(0).getId()); + // 验证数据库中是否存在部门名称 + List listDB1 = listDepartmentName.stream().filter(item-> + Objects.equals(listDB.get(0).getDepartIds(),item.getId())).collect(Collectors.toList()); + if(!CollectionUtils.isEmpty(listDB1)){ + paySpendingContract.setDepartmentName(listDB1.get(0).getDepartName()); + } + } + }else{ + sb.append("第").append(n + 1).append("行,负责人不能为空,请修改!"); + } + if(!Objects.isNull(paySpendingContract.getPack()) && StringUtils.isBlank(paySpendingContract.getPackYear())){ + sb.append("第").append(n + 1).append("行,打包年份不能为空,请修改!"); + } + List listPaySpendingContractInstallment = p.getListInstallment(); + if(!CollectionUtils.isEmpty(listPaySpendingContractInstallment)){ + listPaySpendingContractInstallment.forEach(item->{ + StringBuilder msg = ValidUtil.validateExcel(item,n + 1); + if(!StringUtils.isBlank(msg)){ + sb.append(msg.toString()); + } + }); + } + }); + + if(!StringUtils.isBlank(sb)){ + throw new JeroBootException(sb.toString()); + } + // 更新数据 + listPaySpendingContractImportExcel.forEach(p->{ + PaySpendingContract paySpendingContract = p.getSpendingContract(); + paySpendingContract.setOutstandingAmount(paySpendingContract.getAccountsReceivableAmount().subtract(paySpendingContract.getAmountReceived())); + + if(paySpendingContract.getAccountsReceivableAmount().compareTo(paySpendingContract.getAmountReceived()) == 1){ + paySpendingContract.setAccountStatus(PayIncomeContractCommon.ACCOUNT_STATUS2); + }else if(paySpendingContract.getAccountsReceivableAmount().compareTo(paySpendingContract.getAmountReceived()) == 0){ + paySpendingContract.setAccountStatus(PayIncomeContractCommon.ACCOUNT_STATUS3); + }else{ + paySpendingContract.setAccountStatus(PayIncomeContractCommon.ACCOUNT_STATUS1); + } + setPaySpendingContract(paySpendingContract); + paySpendingContractService.save(paySpendingContract); + List listPaySpendingContractInstallment = p.getListInstallment(); + if(!CollectionUtils.isEmpty(listPaySpendingContractInstallment)){ + listPaySpendingContractInstallment.forEach(item->{ + item.setContractId(paySpendingContract.getId()); + }); + paySpendingContractInstallmentService.saveBatch(listPaySpendingContractInstallment); + } + }); + }else{ + throw new JeroBootException("没有数据可导入"); + } + } + } + } + + + private PaySpendingContract setPaySpendingContractExcel(Map map,Map mapOpening,Map mapPack, + int n,StringBuilder sb){ + Pattern pattern = Pattern.compile("[0-9]*\\.?[0-9]+"); + PaySpendingContract paySpendingContract = new PaySpendingContract(); + paySpendingContract.setContractNum(map.get(0)); + paySpendingContract.setContractName(map.get(1)); + paySpendingContract.setSignedCompanyTemporaryName(map.get(2)); + paySpendingContract.setSignedContactsTemporaryName(map.get(3)); + mapOpening.forEach((k,v)->{ + if(Objects.equals(map.get(4),k)){ + paySpendingContract.setOpening(Integer.parseInt(v)); + } + }); + paySpendingContract.setPrincipalName(map.get(5)); + if(!StringUtils.isBlank(map.get(6))){ + if(!pattern.matcher(map.get(6)).matches()){ + sb.append("第").append(n).append("行,签订合同总金额格式错误!"); + }else{ + paySpendingContract.setContractAmount(new BigDecimal(map.get(6))); + } + } + if(!StringUtils.isBlank(map.get(7))){ + if(!pattern.matcher(map.get(7)).matches()){ + sb.append("第").append(n).append("行,税率格式错误!"); + }else{ + paySpendingContract.setRate(new BigDecimal(map.get(7))); + } + } + if(!StringUtils.isBlank(map.get(8)) ){ + if(!pattern.matcher(map.get(8)).matches()){ + sb.append("第").append(n).append("行,未税金额格式错误!"); + }else{ + paySpendingContract.setNoTaxAmount(new BigDecimal(map.get(8))); + } + } + if(!StringUtils.isBlank(map.get(9)) ){ + if(!DateUtils.isValidDate(map.get(9))){ + sb.append("第").append(n).append("行,合同签订日期格式不正确
"); + }else{ + paySpendingContract.setContractDate(DateUtils.str2Date(map.get(9),new SimpleDateFormat("yyyy-MM-dd"))); + } + } + if(!StringUtils.isBlank(map.get(10))){ + if(!DateUtils.isValidDate(map.get(10))) { + sb.append("第").append(n).append("行,合同终止日期格式不正确
"); + }else{ + paySpendingContract.setTerminationDate(DateUtils.str2Date(map.get(10),new SimpleDateFormat("yyyy-MM-dd"))); + } + } + paySpendingContract.setContractTimePoints(map.get(11)); + if(!StringUtils.isBlank(map.get(12))){ + if(!pattern.matcher(map.get(12)).matches()){ + sb.append("第").append(n).append("行,应收金额格式错误!"); + }else{ + paySpendingContract.setAccountsReceivableAmount(new BigDecimal(map.get(12))); + } + } + if(!StringUtils.isBlank(map.get(13))){ + if(!pattern.matcher(map.get(13)).matches()){ + sb.append("第").append(n).append("行,已收金额格式错误!"); + }else{ + paySpendingContract.setAmountReceived(new BigDecimal(map.get(13))); + } + } + + paySpendingContract.setContractPaymentTimes(map.get(14)); + mapPack.forEach((k,v)->{ + if(Objects.equals(map.get(15),k)){ + paySpendingContract.setPack(Integer.parseInt(v)); + } + }); + paySpendingContract.setPackYear(map.get(16)); + return paySpendingContract; + } + + /** 导入excel表格,返回的List>数据结构. + * @param + * @return 返回list集合 + * @throws Exception + */ + private List> read(MultipartFile file) { + //最终返回数据 + List> list = new ArrayList<>(); + try{ + Workbook workbook = null; + InputStream is = file.getInputStream(); + String name = file.getOriginalFilename().toLowerCase(); + // 创建excel操作对象 + if (name.contains(".xlsx") || name.contains(".xls")) { + workbook = WorkbookFactory.create(is); + } + //得到一个工作表 + Sheet sheet = workbook.getSheetAt(0); + //获得数据的总行数 + int totalRowNum = sheet.getLastRowNum(); + + //获得总列数 + int cellLength = sheet.getRow(0).getPhysicalNumberOfCells(); + Map map = null; + //获得所有数据 + //从第x行开始获取 + for(int x = 0 ; x <= totalRowNum ; x++){ + map = new HashMap<>(); + //获得第i行对象 + Row row = sheet.getRow(x); + //如果一行里的所有单元格都为空则不放进list里面 + int a = 0; + for(int y=0;y listInstallment; +}