Browse Source

测试导入报名表

tiaosheng
zy_Java 5 years ago
parent
commit
9a875e784b
  1. 26
      mt/src/main/java/com/ccsens/mt/api/CompeteController.java
  2. 20
      mt/src/main/java/com/ccsens/mt/bean/vo/CompeteVo.java
  3. 171
      mt/src/main/java/com/ccsens/mt/service/CompeteService.java
  4. 8
      mt/src/main/java/com/ccsens/mt/service/ICompeteService.java
  5. 4
      tall/src/main/resources/application.yml
  6. 2
      util/src/main/java/com/ccsens/util/WebConstant.java
  7. 27
      util/src/test/java/com/ccsens/util/OtherTest.java
  8. 2
      util/src/test/java/com/ccsens/util/ZipTest.java

26
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<List<CompeteVo.FailPlayerInfo>> 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<CompeteVo.FailPlayerInfo> 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"})

20
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;
}
}

171
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<CompeteVo.EnrollPlayInfo> arrayList = getEnrollPlayInfos(params);
String path = getExcelFilePath(arrayList);
@ -833,4 +836,170 @@ public class CompeteService implements ICompeteService {
}
return list1;
}
/**
* 导入报名表
* @param path 报名表路径
* @return
*/
@Override
public List<CompeteVo.FailPlayerInfo> signupImport(String path) throws Exception {
List<CompeteVo.FailPlayerInfo> 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<CompeteProject> 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<CompeteGroup> 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<CompeteCompany> 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;
}
}

8
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<CompeteDto.CompeteType> params) throws IOException;
/**
* 导入报名表
* @param path 报名表路径
* @return 返回失败的信息
*/
List<CompeteVo.FailPlayerInfo> signupImport(String path) throws FileNotFoundException, Exception;
}

4
tall/src/main/resources/application.yml

@ -1,4 +1,4 @@
spring:
profiles:
active: test
include: util-test,common
active: dev
include: util-dev,common

2
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{

27
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("不是手机号");
}
}
}

2
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);
}
}

Loading…
Cancel
Save