導(dǎo)入
?導(dǎo)入模板格式的保單規(guī)則清單,每個文件最多可導(dǎo)入1000條數(shù)據(jù),超過1000條數(shù)據(jù)糊余,管控提示“最多可提交1000條數(shù)據(jù)泵殴,請分批導(dǎo)入”涮帘;
?如導(dǎo)入文件中的保單號與系統(tǒng)維護清單中現(xiàn)有的保單號重復(fù),更新保單規(guī)則清單中的信息”
?如導(dǎo)入文件不符合模板規(guī)范笑诅,管控提示“請使用正確模板表格導(dǎo)入”调缨;
?如導(dǎo)入文件中的任一字段空白,管控提示“導(dǎo)入失敗,導(dǎo)入失敗原因為:第X行數(shù)據(jù)YYY為空吆你!”(X為導(dǎo)入文件中的行數(shù)弦叶,YYY為空白字段名稱【彈窗提示語中的*需篩除,如:保單號】妇多;)伤哺;
?如導(dǎo)入文件中的保單號不是22字,管控提示“導(dǎo)入失敗,導(dǎo)入失敗原因為:第X行保單號應(yīng)為22個字砌梆!”(X為導(dǎo)入文件中的行數(shù))默责;
?導(dǎo)入文件中的保單號只能由大寫英文字母+數(shù)字組成,否則管控提示“導(dǎo)入失敗,導(dǎo)入失敗原因為:第X行保單號應(yīng)為22位的數(shù)字和大寫英文字母組合咸包!”(X為導(dǎo)入文件中的行數(shù))桃序;
?如導(dǎo)入文件中的起保日期格式不是年月日,管控提示“導(dǎo)入失敗,導(dǎo)入失敗原因為:第X行起保日期格式不是年月日(YYYY-MM-DD)烂瘫!”(X為導(dǎo)入文件中的行數(shù))媒熊;
?如導(dǎo)入文件中的終保日期格式不是年月日奇适,管控提示“導(dǎo)入失敗,導(dǎo)入失敗原因為:第X行終保日期格式不是年月日(YYYY-MM-DD)!”(X為導(dǎo)入文件中的行數(shù))芦鳍;
?如導(dǎo)入文件中的起保日期>終保日期嚷往,管控提示“導(dǎo)入失敗,導(dǎo)入失敗原因為:第X行終保日期早于起保日期!”(X為導(dǎo)入文件中的行數(shù))柠衅;
?如導(dǎo)入文件中的單次賠付最大天數(shù)不是非負整數(shù)皮仁,管控提示“導(dǎo)入失敗,導(dǎo)入失敗原因為:第X行單次賠付最大天數(shù)不是非負整數(shù)!”(X為導(dǎo)入文件中的行數(shù))菲宴;
?如導(dǎo)入文件中的賠付最大天數(shù)不是非負整數(shù)贷祈,管控提示“導(dǎo)入失敗,導(dǎo)入失敗原因為:第X行賠付最大天數(shù)不是非負整數(shù)!”(X為導(dǎo)入文件中的行數(shù))喝峦;
?如導(dǎo)入文件中的單次賠付最大天數(shù)>最大賠付天數(shù)势誊,管控提示“導(dǎo)入失敗,導(dǎo)入失敗原因為:第X行單次最大賠付天數(shù)超過最大賠付天數(shù)!”(X為導(dǎo)入文件中的行數(shù))
?如導(dǎo)入文件中的賠付標(biāo)準1(1860周歲)不是非負整數(shù)谣蠢,管控提示“導(dǎo)入失敗,導(dǎo)入失敗原因為:第X行賠付標(biāo)準1(1860周歲)不是非負整數(shù)粟耻!”(X為導(dǎo)入文件中的行數(shù));
?如導(dǎo)入文件中的賠付標(biāo)準2(小于18 或 大于60 周歲)不是非負整數(shù)眉踱,管控提示“導(dǎo)入失敗,導(dǎo)入失敗原因為:第X行賠付標(biāo)準2(小于18 或 大于60 周歲)不是非負整數(shù)挤忙!”(X為導(dǎo)入文件中的行數(shù));
注:
?如導(dǎo)入文件中有多行數(shù)據(jù)不符合管控要求勋锤,則彈出一個管控窗口饭玲,管控提示語分別展示;
?如同一行數(shù)據(jù)多個字段不符合管控要求叁执,則彈出一個管控窗口,管控提示語分別展示矮冬;
?如導(dǎo)入文件中的保單號已在系統(tǒng)維護谈宛,且原保單規(guī)則為有效狀態(tài),則覆蓋原保單規(guī)則胎署;
?如導(dǎo)入文件中的保單號已在系統(tǒng)維護吆录,但原保單規(guī)則為無效狀態(tài),則原保單規(guī)則不變琼牧,新保單規(guī)則和新保單規(guī)則均保存恢筝;
/**
* 嘉興保單規(guī)則維護導(dǎo)入
* @param file
* @return
*/
@RequestMapping(value = "/importExcel", method = POST)
public BaseResponse<Object> importExcel(MultipartFile file,HttpServletRequest request) {
User user = (User) request.getSession().getAttribute(Constants.SESSION_USER);
return newNotEawRuleService.importExcel(file,user);
}
/**
* 導(dǎo)入嘉興保單規(guī)則excel
*
* @param file
* @return
*/
@Override
public BaseResponse<Object> importExcel(MultipartFile file, User user) {
String id = null;
try {
String originalFilename = file.getOriginalFilename();
//校驗excel文件格式
String suffix = originalFilename.substring(file.getOriginalFilename().lastIndexOf(".") + 1);
if (!StringUtils.equals("xls", suffix)) {
return new BaseResponse<>(400, "請使用正確模板表格導(dǎo)入");
}
//獲取模板標(biāo)題
List<String> title = generateTitle();
//獲取表
HSSFWorkbook hssfWorkbook = new HSSFWorkbook(file.getInputStream());
HSSFSheet sheet = hssfWorkbook.getSheetAt(0);
//獲取總行數(shù)
int totalRowNum = sheet.getLastRowNum() + 1;
//獲取第一行數(shù)據(jù)
HSSFRow row = sheet.getRow(0);
//校驗?zāi)0迨欠褚恢? for (int i = 0; i < title.size(); i++) {
HSSFCell cell = row.getCell(i);
String titleName = title.get(i);
try {
String cellValue = cell.getStringCellValue();
if (!StringUtils.equals(titleName, cellValue)) {
return new BaseResponse<>(400, "請使用正確模板表格導(dǎo)入");
}
} catch (Exception e) {
return new BaseResponse<>(400, "請使用正確模板表格導(dǎo)入");
}
}
if (totalRowNum == 1) {
return new BaseResponse<>(400, "導(dǎo)入內(nèi)容不應(yīng)為空");
}
//校驗條數(shù)
if (totalRowNum > 1001) {
return new BaseResponse<>(400, "導(dǎo)入數(shù)量不能超過1000條,請修改后重新導(dǎo)入");
}
List<NcEawPolicyRule> ncEawPolicyRuleList = new ArrayList<>();
return readExcel(ncEawPolicyRuleList, sheet, totalRowNum, user);
} catch (Exception e) {
e.printStackTrace();
CiapLog.info("嘉興保單規(guī)則導(dǎo)入異常:" + e.getMessage());
return new BaseResponse<>(500, "嘉興保單規(guī)則導(dǎo)入接口異常巨坊!");
}
}
/**
* 讀取excel數(shù)據(jù)
*
* @param sheet 表
* @param totalRowNum 總行數(shù)
*/
private BaseResponse<Object> readExcel(List<NcEawPolicyRule> ncEawPolicyRuleList, HSSFSheet sheet, int totalRowNum, User user) throws Exception {
//獲取第一行數(shù)據(jù)
HSSFRow row = sheet.getRow(0);
List<String> msgList = new ArrayList<>();
for (int i = 1; i < totalRowNum; i++) {
int rowNum = i+1;
HSSFRow hssfRow = sheet.getRow(i);
NcEawPolicyRule ncEawPolicyRulelVo = new NcEawPolicyRule();
for (int j = 0; j < row.getLastCellNum(); j++) {
//獲取當(dāng)前列的標(biāo)題
HSSFCell cellTitle = row.getCell(j);
String title = cellTitle.getStringCellValue();
//獲取當(dāng)前行當(dāng)前列的元素
HSSFCell cell = hssfRow.getCell(j);
if (cell != null && cell.getCellType() != Cell.CELL_TYPE_BLANK) {
switch (j) {
case 0:
//獲取保單號
String policyNo = getValue(cell);
//校驗保單號字符數(shù)
if (policyNo.length() != 22) {
CiapLog.info("導(dǎo)入失敗,導(dǎo)入失敗原因為:第" + rowNum + "行保單號應(yīng)為22個字撬槽!");
// msgMap.put("message", "導(dǎo)入失敗,導(dǎo)入失敗原因為:第" + i + "行保單號應(yīng)為22個字!<br>");
msgList.add("第" + rowNum + "行保單號應(yīng)為22個字趾撵!");
} else if (!policyNo.matches(BAO_DAN_HAO2)) {
////保單號校驗 匹配數(shù)字和字母
CiapLog.info("導(dǎo)入失敗,導(dǎo)入失敗原因為:第" + i + "行保單號應(yīng)為22位的數(shù)字和大寫英文字母組合侄柔!");
msgList.add("第" + rowNum + "行保單號應(yīng)為22位的數(shù)字和大寫英文字母組合!");
} else if (policyNo.matches(VIN1)) {
//正則匹配純英文
CiapLog.info("導(dǎo)入失敗,導(dǎo)入失敗原因為:第" + i + "行保單號應(yīng)為22位的數(shù)字和大寫英文字母組合!");
msgList.add("第" + rowNum + "行保單號應(yīng)為22位的數(shù)字和大寫英文字母組合暂题!");
} else {
ncEawPolicyRulelVo.setPolicyNo(policyNo);
}
break;
case 1:
//獲取起保日期
String policyStartDate = getValue(cell);
//校驗起保日期是否合法
if (!policyStartDate.matches(regex)) {
CiapLog.info("導(dǎo)入失敗,導(dǎo)入失敗原因為:第" + rowNum + "行數(shù)據(jù),起保日期格式不是年月日(YYYY-MM-DD)移剪!");
msgList.add("第" + rowNum + "行數(shù)據(jù),起保日期格式不是年月日(YYYY-MM-DD)!");
} else {
ncEawPolicyRulelVo.setPolicyStartDate(policyStartDate);
}
break;
case 2:
//獲取終保日期
String policyEndDate = getValue(cell);
//校驗終保日期是否合法
if (!policyEndDate.matches(regex)) {
CiapLog.info("導(dǎo)入失敗,導(dǎo)入失敗原因為:第" + rowNum + "行數(shù)據(jù),終保日期格式不是年月日(YYYY-MM-DD)薪者!");
msgList.add("第" + rowNum + "行數(shù)據(jù),終保日期格式不是年月日(YYYY-MM-DD)纵苛!");
} else {
ncEawPolicyRulelVo.setPolicyEndDate(policyEndDate);
}
break;
case 3:
//獲取最大賠付天數(shù)
String maxPayDate = getValue(cell);
if (!maxPayDate.matches(MNS)) {
CiapLog.info("導(dǎo)入失敗,導(dǎo)入失敗原因為:第" + rowNum + "行數(shù)據(jù),最大賠付天數(shù)格式不是數(shù)字!");
msgList.add("第" + rowNum + "行數(shù)據(jù),最大賠付天數(shù)格式不是非負整數(shù)言津!");
} else {
ncEawPolicyRulelVo.setMaxPayDate(maxPayDate);
}
break;
case 4:
//獲取單次賠付最大天數(shù)
String maxPayDateOnce = getValue(cell);
if (!maxPayDateOnce.matches(MNS)) {
CiapLog.info("導(dǎo)入失敗,導(dǎo)入失敗原因為:第" + rowNum + "行數(shù)據(jù),單次賠付最大天數(shù)格式不是數(shù)字赶站!");
msgList.add("第" + rowNum + "行數(shù)據(jù),單次賠付最大天數(shù)格式不是非負整數(shù)!");
} else {
ncEawPolicyRulelVo.setMaxPayDateOnce(maxPayDateOnce);
}
break;
case 5:
//獲取賠付標(biāo)準1(18-60周歲)
String payStandard1 = getValue(cell);
if (!payStandard1.matches(MNS)) {
CiapLog.info("導(dǎo)入失敗,導(dǎo)入失敗原因為:第" + rowNum + "行數(shù)據(jù),賠付標(biāo)準1格式不是數(shù)字纺念!");
msgList.add("第" + rowNum + "行數(shù)據(jù),賠付標(biāo)準1格式不是非負整數(shù)贝椿!");
} else {
ncEawPolicyRulelVo.setPayStandard1(payStandard1);
}
break;
case 6:
//賠付標(biāo)準2(小于18或大于60周歲)
String payStandard2 = getValue(cell);
if (!payStandard2.matches(MNS)) {
CiapLog.info("導(dǎo)入失敗,導(dǎo)入失敗原因為:第" + rowNum + "行數(shù)據(jù),賠付標(biāo)準2格式不是數(shù)字!");
msgList.add("第" + rowNum + "行數(shù)據(jù),賠付標(biāo)準2格式不是非負整數(shù)陷谱!");
} else {
ncEawPolicyRulelVo.setPayStandard2(payStandard2);
}
break;
}
} else {
CiapLog.info("導(dǎo)入失敗,導(dǎo)入失敗原因為:第" + rowNum + "行數(shù)據(jù)," + title + "為空烙博!");
msgList.add("第" + rowNum + "行數(shù)據(jù)," + title + "為空!");
}
}
//起保日期
String policyStartDate = ncEawPolicyRulelVo.getPolicyStartDate();
//終保日期
String policyEndDate = ncEawPolicyRulelVo.getPolicyEndDate();
//校驗終保日期是否小于起保日期
if (StringUtils.isNotBlank(policyStartDate) && StringUtils.isNotBlank(policyEndDate)) {
SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd");
Date beginDate = sd.parse(policyStartDate);
Date endDate = sd.parse(policyEndDate);
if (endDate.before(beginDate)) {
CiapLog.info("導(dǎo)入失敗,導(dǎo)入失敗原因為:第" + rowNum + "行數(shù)據(jù),終保日期早于起保日期烟逊!");
msgList.add("第" + rowNum + "行數(shù)據(jù),終保日期早于起保日期渣窜!");
}
}
//校驗單次賠付天數(shù)是否大于最大賠付天數(shù)
//最大賠付天數(shù)
String maxPayDate = ncEawPolicyRulelVo.getMaxPayDate();
//單次賠付最大天數(shù)
String maxPayDateOnce = ncEawPolicyRulelVo.getMaxPayDateOnce();
if (StringUtils.isNotBlank(maxPayDate) && StringUtils.isNotBlank(maxPayDateOnce)) {
if (Integer.parseInt(maxPayDateOnce) > Integer.parseInt(maxPayDate)) {
CiapLog.info("導(dǎo)入失敗,導(dǎo)入失敗原因為:第" + rowNum + "行數(shù)據(jù),單次賠付最大天數(shù)大于最大賠付天數(shù)!");
msgList.add("第" + rowNum + "行數(shù)據(jù),單次賠付最大天數(shù)不能超過最大賠付天數(shù)宪躯!");
}
}
if (msgList.isEmpty()) {
//如果保單號重復(fù)更新數(shù)據(jù)
String policyNo = ncEawPolicyRulelVo.getPolicyNo();
if (StringUtils.isNotBlank(policyNo)) {
String userCode = null;
String userName = null;
if(user!=null){
userCode = user.getUserCode();
userName = user.getUserName();
}
//如果保單號已存在
NcEawPolicyRule getRule = ncEawPolicyRuleMapper.selectBypolicyNo(policyNo);
if (getRule != null) {
getRule.setUpdateUserCode(userCode);
getRule.setUpdateUserName(userName);
int flag = ncEawPolicyRuleMapper.updateBypolicyNo(getRule);
if (flag == 1) {
CiapLog.info("保單號:" + policyNo + "更新成功");
}
} else {
ncEawPolicyRulelVo.setInsertUserCode(userCode);
ncEawPolicyRulelVo.setInsertUserName(userName);
ncEawPolicyRuleList.add(ncEawPolicyRulelVo);
}
}
}
}
if (msgList.isEmpty() ) {
if(ncEawPolicyRuleList.size()>0){
ncEawPolicyRuleMapper.batchInsert(ncEawPolicyRuleList);
}
CiapLog.info("導(dǎo)入成功");
return new BaseResponse(200, "導(dǎo)入成功");
}
Map result = new HashMap();
result.put("message", msgList);
return new BaseResponse(200, "導(dǎo)入數(shù)據(jù)格式有誤", result);
}
/**
* 獲取表格數(shù)據(jù)
*
* @param cell 單元格
* @return 返回數(shù)據(jù)
*/
public static String getValue(Cell cell) {
String result = null;
switch (cell.getCellType()) {
case 0:
if (HSSFDateUtil.isCellDateFormatted(cell)) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
result = dateFormat.format(cell.getDateCellValue());
} else {
NumberFormat nf = NumberFormat.getInstance();
nf.setGroupingUsed(false);
nf.setMaximumFractionDigits(100);
result = nf.format(cell.getNumericCellValue());
}
break;
case 1:
result = cell.getStringCellValue();
break;
case 2:
result = cell.getNumericCellValue() + "";
break;
case 3:
result = "";
break;
case 4:
result = String.valueOf(cell.getBooleanCellValue());
break;
case 5:
result = String.valueOf(cell.getErrorCellValue());
break;
}
return result;
}
/**
* 生成模板標(biāo)題
*
* @return
*/
private List<String> generateTitle() {
List<String> list = new ArrayList<>();
list.add("保單號*");
list.add("起保日期*");
list.add("終保日期*");
list.add("最大賠付天數(shù)*");
list.add("單次賠付最大天數(shù)*");
list.add("賠付標(biāo)準1(18-60周歲)*");
list.add("賠付標(biāo)準2(小于18或大于60周歲)*");
return list;
}