From 9a875e784b1c6ac495c3baec2530150b13705fdd Mon Sep 17 00:00:00 2001 From: zy_Java <654600784@qq.com> Date: Sun, 18 Oct 2020 22:01:15 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B5=8B=E8=AF=95=E5=AF=BC=E5=85=A5=E6=8A=A5?= =?UTF-8?q?=E5=90=8D=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ccsens/mt/api/CompeteController.java | 26 ++- .../java/com/ccsens/mt/bean/vo/CompeteVo.java | 20 ++ .../com/ccsens/mt/service/CompeteService.java | 171 +++++++++++++++++- .../ccsens/mt/service/ICompeteService.java | 8 + tall/src/main/resources/application.yml | 4 +- .../java/com/ccsens/util/WebConstant.java | 2 + .../test/java/com/ccsens/util/OtherTest.java | 27 +++ .../test/java/com/ccsens/util/ZipTest.java | 2 +- 8 files changed, 253 insertions(+), 7 deletions(-) create mode 100644 util/src/test/java/com/ccsens/util/OtherTest.java diff --git a/mt/src/main/java/com/ccsens/mt/api/CompeteController.java b/mt/src/main/java/com/ccsens/mt/api/CompeteController.java index 8ec505a8..b1a21ff7 100644 --- a/mt/src/main/java/com/ccsens/mt/api/CompeteController.java +++ b/mt/src/main/java/com/ccsens/mt/api/CompeteController.java @@ -5,15 +5,21 @@ import com.ccsens.mt.bean.dto.CompeteDto; import com.ccsens.mt.bean.vo.CompeteVo; import com.ccsens.mt.service.ICompeteService; import com.ccsens.util.JsonResponse; +import com.ccsens.util.PropUtil; +import com.ccsens.util.UploadFileUtil_Servlet3; +import com.ccsens.util.WebConstant; import com.ccsens.util.bean.dto.QueryDto; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import io.swagger.annotations.ApiParam; +import io.jsonwebtoken.Claims; +import io.swagger.annotations.*; import lombok.extern.slf4j.Slf4j; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.Part; +import java.io.File; import java.io.IOException; import java.util.List; @@ -192,6 +198,20 @@ public class CompeteController { return JsonResponse.newInstance().ok(list); } + @ApiOperation(value = "导入报名表",notes = "文件大小不能超过20M,支持后缀:.xls|.xlsx") + @RequestMapping(value = "/import", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) + public JsonResponse> signupImport(HttpServletRequest request, HttpServletResponse response, + @RequestParam(required = true) Part file) throws Exception { + //1.上传文件 + String allowedExts = "xls,xlsx"; + String dir = PropUtil.path + File.separator; + String path = UploadFileUtil_Servlet3.uploadFile(file, allowedExts, dir); + log.info(dir+""+path); + //导入数据库 + List failPlayerInfoList = competeService.signupImport(dir+""+path); + return JsonResponse.newInstance().ok(failPlayerInfoList); + } + // @MustLogin // @ApiOperation(value = "查询比赛项目上的参赛选手列表", notes = "") // @RequestMapping(value = "/get/players", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) diff --git a/mt/src/main/java/com/ccsens/mt/bean/vo/CompeteVo.java b/mt/src/main/java/com/ccsens/mt/bean/vo/CompeteVo.java index df9d06bf..518ba17f 100644 --- a/mt/src/main/java/com/ccsens/mt/bean/vo/CompeteVo.java +++ b/mt/src/main/java/com/ccsens/mt/bean/vo/CompeteVo.java @@ -425,4 +425,24 @@ public class CompeteVo { @ApiModelProperty("组别名") private String group_name; } + + @Data + @ApiModel("导入失败的报名信息") + public static class FailPlayerInfo{ + @ApiModelProperty("单位名称") + private String companyName; + @ApiModelProperty("项目名") + private String projectName; + @ApiModelProperty("组别名") + private String groupName; + @ApiModelProperty("报名人") + private String playerName; + @ApiModelProperty("身份证号") + private String idCard; + @ApiModelProperty("手机号") + private String phone; + @ApiModelProperty("其他参赛人员") + private String otherPlayerName; + } + } diff --git a/mt/src/main/java/com/ccsens/mt/service/CompeteService.java b/mt/src/main/java/com/ccsens/mt/service/CompeteService.java index 0ba8cadb..1626e5ea 100644 --- a/mt/src/main/java/com/ccsens/mt/service/CompeteService.java +++ b/mt/src/main/java/com/ccsens/mt/service/CompeteService.java @@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Snowflake; +import cn.hutool.core.util.IdcardUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.ccsens.cloudutil.bean.tall.dto.WpsDto; @@ -25,6 +26,8 @@ import lombok.extern.slf4j.Slf4j; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellType; import org.apache.poi.ss.usermodel.Workbook; +import org.apache.poi.xssf.usermodel.XSSFRow; +import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.core.io.DefaultResourceLoader; import org.springframework.core.io.ResourceLoader; @@ -609,7 +612,7 @@ public class CompeteService implements ICompeteService { @Override public String enrollPlayInfo(CompeteDto.CompeteType params) throws Exception { -// CompeteDto.CompeteType competeType = params.getParam(); + List arrayList = getEnrollPlayInfos(params); String path = getExcelFilePath(arrayList); @@ -833,4 +836,170 @@ public class CompeteService implements ICompeteService { } return list1; } + + /** + * 导入报名表 + * @param path 报名表路径 + * @return + */ + @Override + public List signupImport(String path) throws Exception { + List failPlayerInfoList = new ArrayList<>(); + //获取报名表文件 + InputStream is = new FileInputStream(new File(path)); + XSSFWorkbook workbook = new XSSFWorkbook(is); + if(ObjectUtil.isNull(workbook)){ + throw new BaseException(CodeEnum.PARAM_ERROR); + } + XSSFSheet sheet = workbook.getSheet("报名表"); + if(ObjectUtil.isNull(sheet)){ + throw new BaseException(CodeEnum.PARAM_ERROR); + } + for (int i = 3; i <= sheet.getLastRowNum(); i++) { + XSSFRow row = sheet.getRow(i); + if(ObjectUtil.isNull(row)){ + continue; + } + //参赛单位 + String companyName = ExcelUtil.getCellValue(row.getCell(1)); + //比赛项目名 + String projectName = ExcelUtil.getCellValue(row.getCell(2)); + //组别名 + String groupName = ExcelUtil.getCellValue(row.getCell(3)); + //选手名 + String playerName = ExcelUtil.getCellValue(row.getCell(4)); + //身份证 + String idCard = ExcelUtil.getCellValue(row.getCell(5)); + //手机号 + String phone = ExcelUtil.getCellValue(row.getCell(6)); + //其他参赛人员 + String otherPlayerName = ExcelUtil.getCellValue(row.getCell(7)); + //验证数据是否正确,正确的添加数据库 + boolean flag = saveSignup(companyName,projectName,groupName,playerName,idCard,phone,otherPlayerName); + if(!flag){ + CompeteVo.FailPlayerInfo failPlayerInfo = new CompeteVo.FailPlayerInfo(); + failPlayerInfo.setCompanyName(companyName); + failPlayerInfo.setGroupName(groupName); + failPlayerInfo.setProjectName(projectName); + failPlayerInfo.setPlayerName(playerName); + failPlayerInfo.setIdCard(idCard); + failPlayerInfo.setPhone(phone); + failPlayerInfo.setOtherPlayerName(otherPlayerName); + failPlayerInfoList.add(failPlayerInfo); + log.info("报名信息不正确:{}",failPlayerInfo); + } + } + return failPlayerInfoList; + } + + /** + * 验证数据的正确性,存入数据库 + */ + private boolean saveSignup(String companyName,String projectName,String groupName, + String playerName,String idCard,String phone,String otherPlayerName){ + String family = "亲子组(年龄不设限制)"; + //单位名称不能为空 + if(StrUtil.isEmpty(companyName)){return false;} + //项目名不能为空 + if(StrUtil.isEmpty(projectName)){return false;} + //根据名字查找项目,查不到返回空 + CompeteProjectExample projectExample = new CompeteProjectExample(); + projectExample.createCriteria().andNameEqualTo(projectName).andTypeEqualTo((byte) 2).andLevelEqualTo((byte) 2); + List projectList = competeProjectMapper.selectByExample(projectExample); + if(CollectionUtil.isEmpty(projectList)){return false;} + CompeteProject project = projectList.get(0); + //分组名不能为空 + if(StrUtil.isEmpty(groupName)){return false;} + //根据名字查找分组 + CompeteGroupExample groupExample = new CompeteGroupExample(); + groupExample.createCriteria().andGroupNameEqualTo(groupName).andTypeEqualTo((byte) 2); + List groupList = competeGroupMapper.selectByExample(groupExample); + if(CollectionUtil.isEmpty(groupList)){return false;} + CompeteGroup group = groupList.get(0); + //检查该分组是否可以报名此项目 + CompeteProjectGroupExample projectGroupExample = new CompeteProjectGroupExample(); + projectGroupExample.createCriteria().andProjectIdEqualTo(project.getId()).andGroupIdEqualTo(group.getId()); + if(competeProjectGroupMapper.countByExample(projectGroupExample) == 0){return false;} + //选手名不能为空 + if(StrUtil.isEmpty(playerName)){return false;} + //身份证不能为空,且正确 + if(StrUtil.isEmpty(idCard) || !IdcardUtil.isValidCard(idCard)){return false;} + //手机号不能为空,且正确 + if(StrUtil.isEmpty(phone) || !phone.matches(WebConstant.REGEX_PHONE)){return false;} + //其他参赛人员 + if(StrUtil.isEmpty(otherPlayerName) && family.equals(groupName)){return false;} + if(StrUtil.isNotEmpty(otherPlayerName) && !family.equals(groupName)){return false;} + + //查找单位 + CompeteCompany company; + CompeteCompanyExample companyExample = new CompeteCompanyExample(); + companyExample.createCriteria().andNameEqualTo(companyName).andTypeEqualTo((byte) 2); + List companyList = competeCompanyMapper.selectByExample(companyExample); + if(CollectionUtil.isNotEmpty(companyList)){ + company = companyList.get(0); + }else { + company = new CompeteCompany(); + company.setId(snowflake.nextId()); + company.setName(companyName); + company.setType((byte) 2); + competeCompanyMapper.insertSelective(company); + } + //添加选手信息 + CompetePlayer player = new CompetePlayer(); + player.setId(snowflake.nextId()); + player.setName(playerName); + player.setCompeteTimeId((long) 3); + player.setCompanyId(company.getId()); + player.setPhone(phone); + player.setCompeteGroupId(group.getId()); + player.setIdCard(idCard); + competePlayerDao.insertSelective(player); + //参加比赛 + if(project.getTeam() == 0){ + //个人赛报名 + CompeteProjectPlayer projectPlayer = new CompeteProjectPlayer(); + projectPlayer.setId(snowflake.nextId()); + projectPlayer.setCompeteGroupId(group.getId()); + projectPlayer.setPlayerId(player.getId()); + projectPlayer.setProjectId(project.getId()); + projectPlayer.setCompeteTimeId(3L); + competeProjectPlayerMapper.insertSelective(projectPlayer); + }else { + //团队项目创建团队 + CompeteTeam team = new CompeteTeam(); + team.setId(snowflake.nextId()); + team.setProjectId(project.getId()); + team.setCreator(player.getId()); + team.setCompeteTimeId(3L); + team.setCompeteGroupId(group.getId()); + competeTeamDao.insertSelective(team); + //将当前选手加入团队 + CompeteTeamMember teamMember = new CompeteTeamMember(); + teamMember.setId(snowflake.nextId()); + teamMember.setCompeteTeamId(team.getId()); + teamMember.setPlayerId(player.getId()); + teamMember.setCaptain(Constant.Compete.TEAM_LEADER_YES); + competeTeamMemberMapper.insertSelective(teamMember); + //读取其他参赛人员的姓名,并添加为选手 + if (StrUtil.isNotEmpty(otherPlayerName)) { + String[] familyNames = StringUtil.replaceComma(otherPlayerName).split(","); + if (ObjectUtil.isNotNull(familyNames)) { + for (String familyName : familyNames) { + CompetePlayer familyPlayer = new CompetePlayer(); + familyPlayer.setId(snowflake.nextId()); + familyPlayer.setName(familyName); + competePlayerDao.insertSelective(familyPlayer); + //将其他参赛人员添加至此团队 + CompeteTeamMember member = new CompeteTeamMember(); + member.setId(snowflake.nextId()); + member.setCompeteTeamId(team.getId()); + member.setPlayerId(familyPlayer.getId()); + member.setCaptain(Constant.Compete.TEAM_LEADER_NO); + competeTeamMemberMapper.insertSelective(member); + } + } + } + } + return true; + } } \ No newline at end of file diff --git a/mt/src/main/java/com/ccsens/mt/service/ICompeteService.java b/mt/src/main/java/com/ccsens/mt/service/ICompeteService.java index 4e89f125..206c18a0 100644 --- a/mt/src/main/java/com/ccsens/mt/service/ICompeteService.java +++ b/mt/src/main/java/com/ccsens/mt/service/ICompeteService.java @@ -4,6 +4,7 @@ import com.ccsens.mt.bean.dto.CompeteDto; import com.ccsens.mt.bean.vo.CompeteVo; import com.ccsens.util.bean.dto.QueryDto; +import java.io.FileNotFoundException; import java.io.IOException; import java.util.List; @@ -139,6 +140,13 @@ public interface ICompeteService { * @return 返回参赛者的详细信息 */ String enrollPlayInfoWps(QueryDto params) throws IOException; + + /** + * 导入报名表 + * @param path 报名表路径 + * @return 返回失败的信息 + */ + List signupImport(String path) throws FileNotFoundException, Exception; } diff --git a/tall/src/main/resources/application.yml b/tall/src/main/resources/application.yml index c88e995d..b2acd365 100644 --- a/tall/src/main/resources/application.yml +++ b/tall/src/main/resources/application.yml @@ -1,4 +1,4 @@ spring: profiles: - active: test - include: util-test,common + active: dev + include: util-dev,common diff --git a/util/src/main/java/com/ccsens/util/WebConstant.java b/util/src/main/java/com/ccsens/util/WebConstant.java index f5efc75c..b0b3e3c5 100644 --- a/util/src/main/java/com/ccsens/util/WebConstant.java +++ b/util/src/main/java/com/ccsens/util/WebConstant.java @@ -16,6 +16,8 @@ public class WebConstant { /**数据已删除*/ public static final byte STATUS_DELETE = 1; public static final String IMG_TYPE = "bmp,jpg,png,tif,gif,pcx,tga,exif,fpx,svg,psd,cdr,pcd,dxf,ufo,eps,ai,raw,WMF,webp,jpeg"; + /**手机号正则*/ + public static final String REGEX_PHONE = "^((13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(17[013678])|(18[0,5-9]))\\d{8}$"; /**属性名*/ public static class Field{ diff --git a/util/src/test/java/com/ccsens/util/OtherTest.java b/util/src/test/java/com/ccsens/util/OtherTest.java new file mode 100644 index 00000000..a9ddb926 --- /dev/null +++ b/util/src/test/java/com/ccsens/util/OtherTest.java @@ -0,0 +1,27 @@ +package com.ccsens.util; + + +import lombok.extern.slf4j.Slf4j; +import org.junit.Test; + +import javax.script.ScriptEngine; +import javax.script.ScriptEngineManager; +import javax.script.ScriptException; + +@Slf4j +public class OtherTest { + + + public static final String REGEX_PHONE = "^((13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(17[013678])|(18[0,5-9]))\\d{8}$"; + + @Test + public void test2() throws ScriptException { + String str = "11100000000"; + if (str.matches(REGEX_PHONE)) { + System.out.println("是手机号"); + } else { + System.out.println("不是手机号"); + } + } + +} diff --git a/util/src/test/java/com/ccsens/util/ZipTest.java b/util/src/test/java/com/ccsens/util/ZipTest.java index 90acd8a7..4b03bb60 100644 --- a/util/src/test/java/com/ccsens/util/ZipTest.java +++ b/util/src/test/java/com/ccsens/util/ZipTest.java @@ -31,6 +31,7 @@ public class ZipTest { log.info("length:" + new String(bytes, "UTF-8").length()); } + @Test public void test2() throws ScriptException { String expr = "(1+2/5)*3"; @@ -38,7 +39,6 @@ public class ZipTest { ScriptEngine engine = manager.getEngineByName("js"); Object result = engine.eval(expr); log.info((String) result); - } }