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 4d133475..70a2854e 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 @@ -30,6 +30,7 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; +import org.jeecgframework.poi.excel.annotation.Excel; import org.jeecgframework.poi.excel.def.MapExcelConstants; import org.jeecgframework.poi.excel.entity.ExportParams; import org.jeecgframework.poi.excel.entity.params.ExcelExportEntity; @@ -496,6 +497,7 @@ public class PayIncomeContractController extends JeroController importExcel(HttpServletRequest request, HttpServletResponse response) { - return super.importExcel(request, response, PaySpendingContract.class); + 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(Integer.parseInt(sub.get(20 + (i * 5) + 1))); + paySpendingContractInstallment.setAccountsReceivableTime(DateUtils.str2Date(sub.get(20 + (i * 5) + 2),new SimpleDateFormat("yyyy-MM-dd"))); + paySpendingContractInstallment.setPaidAmount(Integer.parseInt(sub.get(20 + (i * 5) + 3))); + paySpendingContractInstallment.setPaidTime(DateUtils.str2Date(sub.get(20 + (i * 5) + 4),new SimpleDateFormat("yyyy-MM-dd"))); + listPaySpendingContractInstallment.add(paySpendingContractInstallment); + } + paySpendingContractInstallmentService.saveBatch(listPaySpendingContractInstallment); + } + } + }); + } + } + 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(map.get(8)); + paySpendingContract.setNoTaxAmount(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(map.get(13)); + paySpendingContract.setAmountReceived(map.get(14)); + paySpendingContract.setOutstandingAmount(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 { * @Return * @Exception */ - void checkContractNum(String contractNum); + PayIncomeContract checkContractNum(String contractNum); } diff --git a/jero-boot-incoming-payment/src/main/java/com/jero/contract/service/impl/PayIncomeContractServiceImpl.java b/jero-boot-incoming-payment/src/main/java/com/jero/contract/service/impl/PayIncomeContractServiceImpl.java index 47372110..e27d4e6e 100644 --- a/jero-boot-incoming-payment/src/main/java/com/jero/contract/service/impl/PayIncomeContractServiceImpl.java +++ b/jero-boot-incoming-payment/src/main/java/com/jero/contract/service/impl/PayIncomeContractServiceImpl.java @@ -608,16 +608,17 @@ public class PayIncomeContractServiceImpl extends ServiceImpl query = new LambdaQueryWrapper<>(); query.eq(PayIncomeContract::getContractNum,contractNum); List payIncomeContract = payIncomeContractService.list(query); - if(CollectionUtils.isEmpty(payIncomeContract)){ - throw new JeroBootException("合同编号不存在!"); + if(!CollectionUtils.isEmpty(payIncomeContract)){ + return payIncomeContract.get(0); } } + return null; } } diff --git a/jero-boot-incoming-payment/src/main/java/com/jero/project/service/impl/PayCommonProjectServiceImpl.java b/jero-boot-incoming-payment/src/main/java/com/jero/project/service/impl/PayCommonProjectServiceImpl.java index b57ffb13..e60c0594 100644 --- a/jero-boot-incoming-payment/src/main/java/com/jero/project/service/impl/PayCommonProjectServiceImpl.java +++ b/jero-boot-incoming-payment/src/main/java/com/jero/project/service/impl/PayCommonProjectServiceImpl.java @@ -7,6 +7,8 @@ import com.jero.common.api.vo.Result; import com.jero.common.exception.JeroBootException; import com.jero.common.service.ProjectDetailService; import com.jero.contract.entity.PayIncomeContract; +import com.jero.contract.entity.PayIncomeContractAssociated; +import com.jero.contract.service.IPayIncomeContractAssociatedService; import com.jero.contract.service.IPayIncomeContractService; import com.jero.modules.system.entity.SysUser; import com.jero.modules.system.service.ISysUserService; @@ -55,6 +57,8 @@ public class PayCommonProjectServiceImpl extends ServiceImpl