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; +} diff --git a/jero-boot-incoming-payment/src/main/java/com/jero/data/controller/PayDataFileController.java b/jero-boot-incoming-payment/src/main/java/com/jero/data/controller/PayDataFileController.java index 0029eb5d..de1407df 100644 --- a/jero-boot-incoming-payment/src/main/java/com/jero/data/controller/PayDataFileController.java +++ b/jero-boot-incoming-payment/src/main/java/com/jero/data/controller/PayDataFileController.java @@ -97,7 +97,7 @@ public class PayDataFileController extends JeroController queryWrapper = QueryGenerator.initQueryWrapper(queryFileList2, req.getParameterMap()); - queryWrapper.eq("pd.parent_id",id).or().eq("pd.id",id); + queryWrapper.eq("pd.id",id); queryWrapper.eq("pd.type",1); queryWrapper.orderByDesc("pf.create_time"); Page page = new Page<>(pageNo, pageSize); @@ -142,7 +142,7 @@ public class PayDataFileController extends JeroController page = new Page<>(pageNo, pageSize); queryWrapper.eq("pd.type",2); queryWrapper.orderByDesc("pf.create_time"); - queryWrapper.eq("pd.parent_id",id).or().eq("pd.id",id); + queryWrapper.eq("pd.id",id); // QueryWrapper queryWrapper = new QueryWrapper<>(); // queryWrapper.eq("pf.id",id); // queryWrapper.like(StringUtils.isNotBlank(fileName),"of.fileName",fileName); diff --git a/jero-boot-incoming-payment/src/main/java/com/jero/data/entity/QueryFileList.java b/jero-boot-incoming-payment/src/main/java/com/jero/data/entity/QueryFileList.java index ff87d173..a864bd9c 100644 --- a/jero-boot-incoming-payment/src/main/java/com/jero/data/entity/QueryFileList.java +++ b/jero-boot-incoming-payment/src/main/java/com/jero/data/entity/QueryFileList.java @@ -14,6 +14,9 @@ public class QueryFileList { @ApiModelProperty(value = "资料id") private java.lang.String dataId; + @ApiModelProperty(value = "资料id") + private java.lang.String fileId; + @ApiModelProperty(value = "资料名称") private java.lang.String fileName; diff --git a/jero-boot-incoming-payment/src/main/java/com/jero/data/entity/QueryFileList2.java b/jero-boot-incoming-payment/src/main/java/com/jero/data/entity/QueryFileList2.java index 3ce535f7..dc2c1e7d 100644 --- a/jero-boot-incoming-payment/src/main/java/com/jero/data/entity/QueryFileList2.java +++ b/jero-boot-incoming-payment/src/main/java/com/jero/data/entity/QueryFileList2.java @@ -11,6 +11,9 @@ public class QueryFileList2 { @ApiModelProperty(value = "主键id") private java.lang.String keyId; + @ApiModelProperty(value = "目录id") + private java.lang.String fileId; + @ApiModelProperty(value = "资料id") private java.lang.String dataId; diff --git a/jero-boot-incoming-payment/src/main/java/com/jero/data/mapper/xml/PayDataFileMapper.xml b/jero-boot-incoming-payment/src/main/java/com/jero/data/mapper/xml/PayDataFileMapper.xml index edfb82f5..876415b0 100644 --- a/jero-boot-incoming-payment/src/main/java/com/jero/data/mapper/xml/PayDataFileMapper.xml +++ b/jero-boot-incoming-payment/src/main/java/com/jero/data/mapper/xml/PayDataFileMapper.xml @@ -4,6 +4,7 @@ SELECT pf.id as keyid, pf.file_id as dataId, + pf.data_id as fileId, pf.file_path as filePath, of.file_name as fileName, pd.meeting_id as meetingId, diff --git a/jero-boot-incoming-payment/src/main/java/com/jero/meeting/controller/PayMeetingSituationController.java b/jero-boot-incoming-payment/src/main/java/com/jero/meeting/controller/PayMeetingSituationController.java index 547182f3..fad1ee18 100644 --- a/jero-boot-incoming-payment/src/main/java/com/jero/meeting/controller/PayMeetingSituationController.java +++ b/jero-boot-incoming-payment/src/main/java/com/jero/meeting/controller/PayMeetingSituationController.java @@ -6,14 +6,21 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.http.HttpUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 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.LoginUser; import com.jero.meeting.entity.PayMeetingSituation; import com.jero.meeting.service.IPayMeetingSituationService; 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.meeting.vo.AddDockVO; +import com.jero.meeting.vo.PayMeetingSituationVO; import lombok.extern.slf4j.Slf4j; import com.jero.common.system.base.controller.JeroController; import org.springframework.validation.annotation.Validated; @@ -71,7 +78,7 @@ public class PayMeetingSituationController extends JeroController add(@Validated @RequestBody PayMeetingSituation payMeetingSituation) { + public Result add(@RequestBody PayMeetingSituation payMeetingSituation) { payMeetingSituationService.add(payMeetingSituation); return Result.OK("添加成功!"); } @@ -82,8 +89,8 @@ public class PayMeetingSituationController extends JeroController edit(@Validated @RequestBody PayMeetingSituation payMeetingSituation) { - payMeetingSituationService.editById(payMeetingSituation); + public Result edit(@RequestBody PayMeetingSituationVO payMeetingSituationVO) { + payMeetingSituationService.editById(payMeetingSituationVO); return Result.OK("编辑成功!"); } @@ -131,20 +138,15 @@ public class PayMeetingSituationController extends JeroController importExcel(HttpServletRequest request, HttpServletResponse response) { - return super.importExcel(request, response, PayMeetingSituation.class); - } + /** + * 设置对接人 + */ + @AutoLog(value = "设置对接人") + @ApiOperation(value="设置对接人", notes="设置对接人") + @PostMapping(value = "/addDock") + public Result addDock(@RequestBody AddDockVO addDockVO) { + payMeetingSituationService.addDock(addDockVO); + return Result.OK("设置对接人成功!"); + } } diff --git a/jero-boot-incoming-payment/src/main/java/com/jero/meeting/entity/PayMeeting.java b/jero-boot-incoming-payment/src/main/java/com/jero/meeting/entity/PayMeeting.java index a3747c22..ced68267 100644 --- a/jero-boot-incoming-payment/src/main/java/com/jero/meeting/entity/PayMeeting.java +++ b/jero-boot-incoming-payment/src/main/java/com/jero/meeting/entity/PayMeeting.java @@ -176,11 +176,13 @@ public class PayMeeting implements Serializable { /**会议费用*/ @Excel(name = "会议费用", width = 15) @ApiModelProperty(value = "会议费用") + @JsonFormat(shape = JsonFormat.Shape.STRING) private BigDecimal meetingCosts; /**会议费用(标协会员)*/ @Excel(name = "会议费用(标协会员)", width = 15) @ApiModelProperty(value = "会议费用(标协会员)") + @JsonFormat(shape = JsonFormat.Shape.STRING) private BigDecimal meetingCostsVip; /**会议负责人id*/ diff --git a/jero-boot-incoming-payment/src/main/java/com/jero/meeting/entity/PayMeetingSituation.java b/jero-boot-incoming-payment/src/main/java/com/jero/meeting/entity/PayMeetingSituation.java index c9ee0eb4..86e5767c 100644 --- a/jero-boot-incoming-payment/src/main/java/com/jero/meeting/entity/PayMeetingSituation.java +++ b/jero-boot-incoming-payment/src/main/java/com/jero/meeting/entity/PayMeetingSituation.java @@ -3,6 +3,7 @@ package com.jero.meeting.entity; import java.io.Serializable; import java.math.BigDecimal; import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.jero.meeting.valid.group.CommonPeople; @@ -302,12 +303,14 @@ public class PayMeetingSituation implements Serializable { * 应收金额 */ @ApiModelProperty(value = "应收金额") + @JsonFormat(shape = JsonFormat.Shape.STRING) private BigDecimal amountReceivable; /** * 实收金额 */ @ApiModelProperty(value = "实收金额") + @JsonFormat(shape = JsonFormat.Shape.STRING) private BigDecimal paidAmount; /**打包*/ @@ -344,5 +347,14 @@ public class PayMeetingSituation implements Serializable { @ApiModelProperty(value = "对接人姓名") private String dockName; + /**审核状态*/ + @Excel(name = "审核状态", width = 15) + @ApiModelProperty(value = "审核状态") + @Dict(dicCode = "signup_status") + private Integer checkResult; + /**审核状态*/ + @ApiModelProperty(value = "审核备注") + @TableField(exist = false) + private String checkRemark; } diff --git a/jero-boot-incoming-payment/src/main/java/com/jero/meeting/service/IPayMeetingSituationService.java b/jero-boot-incoming-payment/src/main/java/com/jero/meeting/service/IPayMeetingSituationService.java index 91ce9045..4d7303c8 100644 --- a/jero-boot-incoming-payment/src/main/java/com/jero/meeting/service/IPayMeetingSituationService.java +++ b/jero-boot-incoming-payment/src/main/java/com/jero/meeting/service/IPayMeetingSituationService.java @@ -2,6 +2,9 @@ package com.jero.meeting.service; import com.jero.meeting.entity.PayMeetingSituation; import com.baomidou.mybatisplus.extension.service.IService; +import com.jero.meeting.vo.AddDockVO; +import com.jero.meeting.vo.PayMeetingSituationVO; + import java.util.List; /** @@ -20,7 +23,7 @@ public interface IPayMeetingSituationService extends IService queryList(); + + void addDock(AddDockVO addDockVO); } diff --git a/jero-boot-incoming-payment/src/main/java/com/jero/meeting/service/impl/PayMeetingSituationServiceImpl.java b/jero-boot-incoming-payment/src/main/java/com/jero/meeting/service/impl/PayMeetingSituationServiceImpl.java index 17a67f01..ab981bed 100644 --- a/jero-boot-incoming-payment/src/main/java/com/jero/meeting/service/impl/PayMeetingSituationServiceImpl.java +++ b/jero-boot-incoming-payment/src/main/java/com/jero/meeting/service/impl/PayMeetingSituationServiceImpl.java @@ -1,8 +1,11 @@ package com.jero.meeting.service.impl; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.http.HttpUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.jero.common.exception.JeroBootException; +import com.jero.common.system.api.ISysBaseAPI; +import com.jero.common.system.vo.LoginUser; import com.jero.common.util.ValidUtil; import com.jero.company.entity.PayContactsManagement; import com.jero.company.service.IPayContactsManagementService; @@ -22,12 +25,15 @@ import com.jero.temporary.entity.PayCompanyManagementTemporary; import com.jero.temporary.entity.PayContactsManagementTemporary; import com.jero.temporary.service.IPayCompanyManagementTemporaryService; import com.jero.temporary.service.IPayContactsManagementTemporaryService; +import org.jetbrains.annotations.NotNull; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.util.List; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; @@ -38,6 +44,7 @@ import javax.annotation.Resource; * @Version: V1.0 */ @Service +@Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = Exception.class) public class PayMeetingSituationServiceImpl extends ServiceImpl implements IPayMeetingSituationService { @Resource private IPayContactsManagementService contactsManagementService; @@ -49,17 +56,53 @@ public class PayMeetingSituationServiceImpl extends ServiceImpl wrapper = new LambdaQueryWrapper<>(); - wrapper.eq(MemberInfo::getCompanyName,payMeetingSituation.getCompanyName()); + wrapper.eq(MemberInfo::getCompanyName, payMeetingSituation.getCompanyName()); wrapper.isNotNull(MemberInfo::getMemberType); int count = memberInfoService.count(wrapper); //如果是标协会员就存入会议费用(标协会员) @@ -179,22 +222,10 @@ public class PayMeetingSituationServiceImpl extends ServiceImpl queryList() { return list(); } + + @Override + public void addDock(AddDockVO addDockVO) { + String dockId = addDockVO.getDockId(); + LoginUser user = iSysBaseApi.getUserById(dockId); + if (ObjectUtil.isNull(user)){ + throw new JeroBootException("对接人不存在"); + } + String username = user.getUsername(); + List meetingSituationIds = addDockVO.getMeetingSituationIds(); + for (String meetingSituationId : meetingSituationIds) { + PayMeetingSituation payMeetingSituation = getById(meetingSituationId); + payMeetingSituation.setDockId(dockId); + payMeetingSituation.setDockName(username); + saveOrUpdate(payMeetingSituation); + } + } } diff --git a/jero-boot-incoming-payment/src/main/java/com/jero/meeting/vo/AddDockVO.java b/jero-boot-incoming-payment/src/main/java/com/jero/meeting/vo/AddDockVO.java new file mode 100644 index 00000000..c0d3a83f --- /dev/null +++ b/jero-boot-incoming-payment/src/main/java/com/jero/meeting/vo/AddDockVO.java @@ -0,0 +1,16 @@ +package com.jero.meeting.vo; + +import lombok.Data; + +import java.util.List; + +/** + * 设置对接人 + * @author liJiaRao + * @date 2021-09-09 17:51 + */ +@Data +public class AddDockVO { + private String dockId; + private List meetingSituationIds; +} diff --git a/jero-boot-incoming-payment/src/main/java/com/jero/meeting/vo/PayMeetingSituationVO.java b/jero-boot-incoming-payment/src/main/java/com/jero/meeting/vo/PayMeetingSituationVO.java new file mode 100644 index 00000000..9035b52e --- /dev/null +++ b/jero-boot-incoming-payment/src/main/java/com/jero/meeting/vo/PayMeetingSituationVO.java @@ -0,0 +1,291 @@ +package com.jero.meeting.vo; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.jero.common.aspect.annotation.Dict; +import com.jero.meeting.valid.group.CommonPeople; +import com.jero.meeting.valid.group.Guest; +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; + +/** + * @author liJiaRao + * @date 2021-09-09 17:25 + */ +@Data +public class PayMeetingSituationVO { + /**id*/ + @TableId(type = IdType.ASSIGN_ID) + @ApiModelProperty(value = "id") + private String id; + + /**创建人*/ + @ApiModelProperty(value = "创建人") + private String createBy; + + /**创建日期*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern="yyyy-MM-dd") + @ApiModelProperty(value = "创建日期") + private java.util.Date createTime; + + /**更新人*/ + @ApiModelProperty(value = "更新人") + private String updateBy; + + /**更新日期*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern="yyyy-MM-dd") + @ApiModelProperty(value = "更新日期") + private java.util.Date updateTime; + + /**会议id*/ + @Excel(name = "会议id", width = 15) + @ApiModelProperty(value = "会议id") + @NotBlank(message = "会议项目不能为空") + private String meetingId; + + /**企业id*/ + @ApiModelProperty(value = "企业id") + @NotBlank(message = "企业名称不能为空") + @Size(max = 50, message = "企业名称最大为50字符") + private String companyId; + + /** + * 企业临时id + */ + @Excel(name = "会员单位", width = 15, dictTable = "pay_company_management_temporary", dicText = "company_name", dicCode = "id",orderNum = "1") + private String companyTemporaryId; + + /**企业名称*/ + @Excel(name = "企业名称", width = 15) + @ApiModelProperty(value = "企业名称") + private String companyName; + + /**企业联系人id*/ + @ApiModelProperty(value = "企业联系人id") + @NotBlank(message = "企业联系人不能为空") + @Size(max = 50, message = "企业联系人最大为50字符") + private String companyContactId; + + /** + * 企业联系人临时id + */ + @Excel(name = "企业联系人名称", width = 15, dictTable = "pay_contacts_management_temporary", dicText = "name", dicCode = "id",orderNum = "2") + private String companyContactTemporaryId; + + /**企业联系人姓名*/ + @Excel(name = "企业联系人姓名", width = 15) + @ApiModelProperty(value = "企业联系人姓名") + private String companyContactName; + + /**职务*/ + @ApiModelProperty(value = "职务") + private String post; + + /**手机号*/ + @ApiModelProperty(value = "手机号") + private String phone; + + /**邮箱*/ + @ApiModelProperty(value = "邮箱") + private String email; + + /**身份*/ + @ApiModelProperty(value = "身份") + @Dict(dicCode = "meet_identify_type") + private Integer identity; + + /**嘉宾类型*/ + @ApiModelProperty(value = "嘉宾类型") + @NotNull(message = "请选择嘉宾类型",groups = Guest.class) + @Min(value = 1,groups = Guest.class) + @Max(value = 4,groups = Guest.class) + private Integer guestType; + + /**演讲题目*/ + @Excel(name = "演讲题目", width = 15) + @ApiModelProperty(value = "演讲题目") + @NotBlank(message = "演讲题目不能为空",groups = Guest.class) + @Size(max = 50, message = "演讲题目最大为50字符") + private String speechTopic; + + /**演讲ppt*/ + @Excel(name = "演讲ppt", width = 15) + @ApiModelProperty(value = "演讲ppt") + @NotBlank(message = "演讲ppt不能为空",groups = Guest.class) + private String speechPpt; + + /**照片*/ + @Excel(name = "照片", width = 15) + @ApiModelProperty(value = "照片") + private String photo; + + /**个人简介*/ + @Excel(name = "个人简介", width = 15) + @ApiModelProperty(value = "个人简介") + private String profile; + + /**是否用餐*/ + @Excel(name = "是否用餐", width = 15) + @ApiModelProperty(value = "是否用餐") + @Dict(dicCode = "yn") + private Integer haveMeals; + + /**是否回民*/ + @Excel(name = "是否回民", width = 15) + @ApiModelProperty(value = "是否回民") + @Dict(dicCode = "yn") + private Integer huiPeople; + + /**是否入住协议酒店*/ + @Excel(name = "是否入住协议酒店", width = 15) + @ApiModelProperty(value = "是否入住协议酒店") + @Dict(dicCode = "yn") + private Integer checkInHotel; + + /**入住酒店时间*/ + @Excel(name = "入住酒店时间", width = 20, format = "yyyy-MM-dd") + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern="yyyy-MM-dd") + @ApiModelProperty(value = "入住酒店时间") + private java.util.Date inHotelTime; + + /**离开酒店时间*/ + @Excel(name = "离开酒店时间", width = 20, format = "yyyy-MM-dd") + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern="yyyy-MM-dd") + @ApiModelProperty(value = "离开酒店时间") + private java.util.Date outHotelTime; + + /**房型*/ + @Excel(name = "房型", width = 15) + @ApiModelProperty(value = "房型") + private String roomLayout; + + /**是否需要接站*/ + @Excel(name = "是否需要接站", width = 15) + @ApiModelProperty(value = "是否需要接站") + @Dict(dicCode = "yn") + private Integer pickUp; + + /**抵达时间*/ + @Excel(name = "抵达时间", width = 20, format = "yyyy-MM-dd") + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern="yyyy-MM-dd") + @ApiModelProperty(value = "抵达时间") + private java.util.Date arrivalTime; + + /**到达站*/ + @Excel(name = "到达站", width = 15) + @ApiModelProperty(value = "到达站") + private String destination; + + /**到达班次*/ + @Excel(name = "到达班次", width = 15) + @ApiModelProperty(value = "到达班次") + private String arrivalShift; + + /**是否需要送站*/ + @Excel(name = "是否需要送站", width = 15) + @ApiModelProperty(value = "是否需要送站") + @Dict(dicCode = "yn") + private Integer deliveryStation; + + /**离开时间*/ + @Excel(name = "离开时间", width = 20, format = "yyyy-MM-dd") + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern="yyyy-MM-dd") + @ApiModelProperty(value = "离开时间") + private java.util.Date departureTime; + + /**离开站*/ + @Excel(name = "离开站", width = 15) + @ApiModelProperty(value = "离开站") + private String departureStation; + + /**离开班次*/ + @Excel(name = "离开班次", width = 15) + @ApiModelProperty(value = "离开班次") + private String departureShift; + + /**同行人*/ + @Excel(name = "同行人", width = 15) + @ApiModelProperty(value = "同行人") + private String peer; + + /**备注*/ + @Excel(name = "备注", width = 15) + @ApiModelProperty(value = "备注") + private String remark; + + /**是否签到*/ + @Excel(name = "是否签到", width = 15) + @ApiModelProperty(value = "是否签到") + @Dict(dicCode = "yn") + private Integer checkIn; + + /**邮寄联系人*/ + @Excel(name = "邮寄联系人", width = 15) + @ApiModelProperty(value = "邮寄联系人") + private String postContactId; + + /** + * 邮寄联系人临时id + */ + @Excel(name = "邮寄联系人姓名", width = 15, dictTable = "pay_contacts_management_temporary", dicText = "name", dicCode = "id",orderNum = "3") + private String postContactTemporaryId; + + /** + * 邮寄联系人姓名 + */ + @ApiModelProperty(value = "邮寄联系人姓名") + private String postContactName; + + /**邮寄联系人地址*/ + @Excel(name = "邮寄联系人地址", width = 15) + @ApiModelProperty(value = "邮寄联系人地址") + private String postContactAddress; + + /**缴费方式*/ + @Excel(name = "缴费方式", width = 15) + @ApiModelProperty(value = "缴费方式") + @NotNull(message = "缴费方式不能为空",groups = CommonPeople.class) + @Min(1) + @Max(3) + @Dict(dicCode = "meeting_pay_type") + private Integer payMode; + + /**需要发票*/ + @Excel(name = "需要发票", width = 15) + @ApiModelProperty(value = "需要发票") + @Min(0) + @Max(2) + @Dict(dicCode = "invoice_type") + private Integer needInvoice; + + /**付款凭证*/ + @Excel(name = "付款凭证", width = 15) + @ApiModelProperty(value = "付款凭证") + private String paymentRecord; + + /** + * 应收金额 + */ + @ApiModelProperty(value = "应收金额") + @JsonFormat(shape = JsonFormat.Shape.STRING) + private BigDecimal amountReceivable; + + /**打包*/ + @Excel(name = "打包", width = 15) + @ApiModelProperty(value = "打包") + private Integer pack; + +} diff --git a/jero-boot-incoming-payment/src/main/java/com/jero/meeting/vo/PayMeetingVO.java b/jero-boot-incoming-payment/src/main/java/com/jero/meeting/vo/PayMeetingVO.java index 5e78dd4b..d785bd0f 100644 --- a/jero-boot-incoming-payment/src/main/java/com/jero/meeting/vo/PayMeetingVO.java +++ b/jero-boot-incoming-payment/src/main/java/com/jero/meeting/vo/PayMeetingVO.java @@ -14,11 +14,9 @@ import org.jeecgframework.poi.excel.annotation.Excel; import org.jeecgframework.poi.excel.annotation.ExcelCollection; import org.springframework.format.annotation.DateTimeFormat; -import javax.validation.constraints.Max; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; +import javax.validation.constraints.*; import java.io.Serializable; +import java.math.BigDecimal; import java.util.List; /** @@ -176,15 +174,15 @@ public class PayMeetingVO implements Serializable { @Excel(name = "会议费用", width = 15) @ApiModelProperty(value = "会议费用") @NotNull(message = "会议费用不能为空") - @Max(value = 999999999,message = "会议费用格式错误") - private Integer meetingCosts; + @DecimalMax(value = "10000000000",message = "会议费用格式错误") + private BigDecimal meetingCosts; /**会议费用(标协会员)*/ @Excel(name = "会议费用(标协会员)", width = 15) @ApiModelProperty(value = "会议费用(标协会员)") @NotNull(message = "会议费用(标协会员)不能为空",groups = StandardMeeting.class) - @Max(value = 999999999,message = "会议费用(标协会员)格式错误",groups = StandardMeeting.class) - private Integer meetingCostsVip; + @DecimalMax(value = "10000000000",message = "会议费用(标协会员)格式错误",groups = StandardMeeting.class) + private BigDecimal meetingCostsVip; /**会议负责人id*/ @ApiModelProperty(value = "会议负责人id") diff --git a/jero-boot-incoming-payment/src/main/java/com/jero/meeting/vo/WorkingGroupMeetingExel.java b/jero-boot-incoming-payment/src/main/java/com/jero/meeting/vo/WorkingGroupMeetingExel.java index 3b072a96..844270ba 100644 --- a/jero-boot-incoming-payment/src/main/java/com/jero/meeting/vo/WorkingGroupMeetingExel.java +++ b/jero-boot-incoming-payment/src/main/java/com/jero/meeting/vo/WorkingGroupMeetingExel.java @@ -1,22 +1,12 @@ package com.jero.meeting.vo; import com.fasterxml.jackson.annotation.JsonFormat; -import com.jero.meeting.entity.PayMeetingHotelContacts; -import com.jero.meeting.valid.group.InternationalMeeting; -import com.jero.meeting.valid.group.StandardMeeting; -import com.jero.meeting.valid.group.WorkingGroupMeeting; -import com.jero.modules.system.volid.group.UpdateGroup; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import org.jeecgframework.poi.excel.annotation.Excel; -import org.jeecgframework.poi.excel.annotation.ExcelCollection; import org.springframework.format.annotation.DateTimeFormat; -import javax.validation.constraints.Max; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; -import java.util.List; +import javax.validation.constraints.*; /** * @author liJiaRao @@ -114,7 +104,7 @@ public class WorkingGroupMeetingExel { @Excel(name = "会议费用", width = 15) @ApiModelProperty(value = "会议费用") @NotNull(message = "会议费用不能为空") - @Max(value = 999999999,message = "会议费用格式错误") + @DecimalMax(value = "10000000000",message = "会议费用格式错误") private Integer meetingCosts; /**会议负责人id*/ diff --git a/jero-boot-incoming-payment/src/main/java/com/jero/member/entity/PayMemberProjectSubitem.java b/jero-boot-incoming-payment/src/main/java/com/jero/member/entity/PayMemberProjectSubitem.java index 46bba068..36936960 100644 --- a/jero-boot-incoming-payment/src/main/java/com/jero/member/entity/PayMemberProjectSubitem.java +++ b/jero-boot-incoming-payment/src/main/java/com/jero/member/entity/PayMemberProjectSubitem.java @@ -149,7 +149,7 @@ public class PayMemberProjectSubitem implements Serializable { @JsonFormat(shape = JsonFormat.Shape.STRING) @ApiModelProperty(value = "应收金额") @NotNull(message = "应收金额不能为空") - @DecimalMax(value = "10000000000",message = "应收金额格式错误1") + @DecimalMax(value = "10000000000",message = "应收金额格式错误") private BigDecimal amountReceivable; /** diff --git a/jero-boot-incoming-payment/src/main/java/com/jero/pack/controller/PayPackCompanyController.java b/jero-boot-incoming-payment/src/main/java/com/jero/pack/controller/PayPackCompanyController.java index 67d147ca..b8fa663d 100644 --- a/jero-boot-incoming-payment/src/main/java/com/jero/pack/controller/PayPackCompanyController.java +++ b/jero-boot-incoming-payment/src/main/java/com/jero/pack/controller/PayPackCompanyController.java @@ -11,9 +11,11 @@ import com.jero.common.api.vo.Result; import com.jero.common.aspect.annotation.AutoLog; import com.jero.common.system.base.controller.JeroController; import com.jero.common.system.query.QueryGenerator; +import com.jero.common.util.ValidUtil; import com.jero.pack.entity.PayPackCompany; import com.jero.pack.service.IPayPackCompanyService; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.ModelAndView; @@ -21,12 +23,12 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; /** - * @Description: pay_pack_company + * @Description: 打包关联 * @Author: jeecg-boot * @Date: 2021-09-07 * @Version: V1.0 */ -@Api(tags="pay_pack_company") +@Api(tags="打包关联") @RestController @RequestMapping("/pack/payPackCompany") @Slf4j @@ -43,8 +45,8 @@ public class PayPackCompanyController extends JeroController queryPageList(PayPackCompany payPackCompany, @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, @@ -62,10 +64,14 @@ public class PayPackCompanyController extends JeroController add(@RequestBody PayPackCompany payPackCompany) { + StringBuilder msg = ValidUtil.validateAll(payPackCompany); + if(!StringUtils.isBlank(msg)){ + return Result.error(msg.toString()); + } payPackCompanyService.save(payPackCompany); return Result.OK("添加成功!"); } @@ -76,10 +82,14 @@ public class PayPackCompanyController extends JeroController edit(@RequestBody PayPackCompany payPackCompany) { + StringBuilder msg = ValidUtil.validateAll(payPackCompany); + if(!StringUtils.isBlank(msg)){ + return Result.error(msg.toString()); + } payPackCompanyService.updateById(payPackCompany); return Result.OK("编辑成功!"); } @@ -90,10 +100,13 @@ public class PayPackCompanyController extends JeroController delete(@RequestParam(name="id",required=true) String id) { + @AutoLog(value = "打包关联-通过id删除") + @ApiOperation(value="打包关联-通过id删除", notes="打包关联-通过id删除") + @GetMapping(value = "/delete") + public Result delete(@RequestParam(name="id") String id) { + if(StringUtils.isBlank(id)){ + return Result.error("id不能为空!"); + } payPackCompanyService.removeById(id); return Result.OK("删除成功!"); } @@ -104,10 +117,19 @@ public class PayPackCompanyController extends JeroController deleteBatch(@RequestParam(name="ids",required=true) String ids) { + @AutoLog(value = "打包关联-批量删除") + @ApiOperation(value="打包关联-批量删除", notes="打包关联-批量删除") + @GetMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestParam(name="ids") String ids) { + if(StringUtils.isBlank(ids)){ + return Result.error("id不能为空!"); + } + String[] s = ids.split(","); + for (String s1 : s) { + if(StringUtils.isBlank(s1)){ + return Result.error("id不能为空!"); + } + } this.payPackCompanyService.removeByIds(Arrays.asList(ids.split(","))); return Result.OK("批量删除成功!"); } @@ -118,10 +140,13 @@ public class PayPackCompanyController extends JeroController queryById(@RequestParam(name="id",required=true) String id) { + public Result queryById(@RequestParam(name="id") String id) { + if(StringUtils.isBlank(id)){ + return Result.error("id不能为空!"); + } PayPackCompany payPackCompany = payPackCompanyService.getById(id); if(payPackCompany==null) { return Result.error("未找到对应数据"); @@ -135,7 +160,7 @@ public class PayPackCompanyController extends JeroController update = new LambdaUpdateWrapper<>(); + update.eq(PayWorkingGroupSubItem::getId,payWorkingGroupSubItem.getId()); + update.set(PayWorkingGroupSubItem::getPack,PayProjectCommon.PACKAGING1); + payWorkingGroupSubItemService.update(update); + // todo 缺少添加打包功能 + } } @Override @@ -176,9 +188,24 @@ public class PayWorkingGroupSubItemServiceImpl extends ServiceImpl update = new LambdaUpdateWrapper<>(); + update.eq(PayWorkingGroupSubItem::getId,payWorkingGroupSubItem.getId()); + update.set(PayWorkingGroupSubItem::getPack,PayProjectCommon.PACKAGING1); + payWorkingGroupSubItemService.update(update); + // todo 缺少添加打包功能 } payWorkingGroupSubItem = setPayWorkingGroupSubItem(payWorkingGroupSubItem); payWorkingGroupSubItem.setChargeUse(PayProjectCommon.CHARGE_USE1);