public Object uploadExcel(MultipartFile uploadfile, String storeNo) throws AnmavException { JSONObject result = new JSONObject(); String directory = null; try { if (StringUtil.isEmpty(uploadfile)) { logger.error("未检测到文件为空"); return new ResponseBean(AnmavResponseConstant.STATUS_PARAM_ERROR, "未检测到文件不能为空"); } float size = uploadfile.getSize() / (float) 1024 / (float) 1024; if (size > 100) { logger.error("文件大小不能超过100M"); return new ResponseBean(AnmavResponseConstant.STATUS_PARAM_ERROR, "文件大小不能超过100M"); } String originalName = uploadfile.getOriginalFilename(); if (StringUtil.isEmpty(originalName)) { logger.error("文件的原始名字为空"); return new ResponseBean(AnmavResponseConstant.STATUS_PARAM_ERROR, "文件的原始名字为空"); } logger.info("文件名:" + originalName); if (!originalName.toLowerCase().endsWith(".zip")) { logger.error("文件格式只能是zip"); return new ResponseBean(AnmavResponseConstant.STATUS_PARAM_ERROR, "文件格式只能是zip"); } String fileName = FileUtils.getNewName(originalName); directory = FileUtils.getFolder(config.getExcelDirectory(), storeNo); String filePath = Paths.get(directory, fileName).toString(); File file = new File(filePath); BufferedOutputStream stream = new BufferedOutputStream(new FileOutputStream(file)); stream.write(uploadfile.getBytes()); stream.close(); // 解压文件 获取里面的excel 文件 ZipUtils.deCompress(file, directory); List excelList = FileUtils.listFiles(directory, new String[]{ "xls", "xlsx"}); if (StringUtil.isEmpty(excelList) || excelList.size() != 1) { logger.error("文件格式只能是zip"); FileUtils.deleteDir(new File(directory)); return new ResponseBean(AnmavResponseConstant.STATUS_PARAM_ERROR, "压缩包中应只能包含一个Excel文件"); } // 获取模板文件 进行解析 File excelFile = excelList.get(0); // 获取菜品类别 单位设置 工作间设置 // 获取菜品类别 MenuBarBean barParam = new MenuBarBean(); barParam.setStoreNo(storeNo); List barList = menuBarDao.selectByStoreNo(barParam); // 获取单位信息 UnitInfoBean unitParam = new UnitInfoBean(); unitParam.setStoreNo(storeNo); List unitList = unitInfoDao.selectSomeUnitInfo(unitParam); // 获取工作间信息 WorkshopInfoBean workParam = new WorkshopInfoBean(); workParam.setStoreNo(storeNo); List workList = workshopInfoDao.selectWorkshopMenu(workParam); // 上传成功 JSONObject respData = batchAddMenu(excelFile, directory, barList, unitList, workList, storeNo); String code = respData.getString("respCode"); String data = respData.getString("respData"); result.put("respData", data); if (!"00".equals(code)) { throw new Exception(respData.getString("message")); } result.put("respCode", "00"); result.put("message", "操作成功"); FileUtils.deleteDir(new File(directory)); return new ResponseBean(result); } catch (Exception e) { result.put("respCode", "01"); result.put("message", e.getMessage()); logger.info("修改出错:" + e.getMessage()); FileUtils.deleteDir(new File(directory)); return new ResponseBean(result); } }
public JSONObject batchAddMenu(File excelFile, String filePath, List barList, List unitList, List workList, String storeNo) {
JSONObject result = new JSONObject();
try {
//File file = new File(filePath);
Workbook workbook = Workbook.getWorkbook(excelFile);
Sheet sheet = workbook.getSheet(0);
//获取行数 和列数
//行数
int maxRow = sheet.getRows();
int maxColumn = sheet.getColumns();
if (maxRow <= 1) {
logger.error("Excel文件中无菜单数据数据,行数不能小于1");
throw new Exception("Excel文件中无菜单数据数据,行数不能小于1");
}
if (maxRow >= 1000) {
logger.error("Excel中每次最多为1000条数据");
throw new Exception("Excel中每次最多为1000条数据");
}
if (maxColumn != 12) {
logger.error("必须是12列数据");
throw new Exception("必须是12列数据");
}
//处理List数据
List barNameList = new ArrayList<>();
Map menuBarMap = new HashMap<>();
for (MenuBarBean menuBar : barList) {
if (!StringUtil.isEmpty(menuBar)) {
barNameList.add(menuBar.getMenuBarName());
menuBarMap.put(menuBar.getMenuBarName(), menuBar.getMenuBarNo());
}
}
List unitNameList = new ArrayList<>();
Map unitMap = new HashMap<>();
for (UnitInfoBean unitInfo : unitList) {
if (!StringUtil.isEmpty(unitInfo)) {
unitNameList.add(unitInfo.getUnitName());
unitMap.put(unitInfo.getUnitName(), unitInfo.getId());
}
}
List workNameList = new ArrayList<>();
Map workMap = new HashMap<>();
for (WorkshopInfoBean workInfo : workList) {
if (StringUtil.isEmpty(workInfo)) {
workNameList.add(workInfo.getWorkshopName());
workMap.put(workInfo.getWorkshopName(), workInfo.getId());
}
}
//获取所有的菜单名称
MenuDetailsBean menuDetailsParam = new MenuDetailsBean();
menuDetailsParam.setStoreNo(storeNo);
List menuList = menuDetailsDao.selectByStoreNo(menuDetailsParam);
Map tjdMap = new HashMap<>();
tjdMap.put("一星", 1);
tjdMap.put("一星半", 2);
tjdMap.put("二星", 3);
tjdMap.put("二星半", 4);
tjdMap.put("三星", 5);
tjdMap.put("三星半", 6);
tjdMap.put("四星", 7);
tjdMap.put("四星半", 8);
tjdMap.put("五星", 9);
List menuNameList = new ArrayList();
//List menuShortNameList = new ArrayList();
List menuSerList = new ArrayList();
for (MenuDetailsBean detail2 : menuList) {
if (!StringUtil.isEmpty(detail2)) {
menuNameList.add(detail2.getMenuName());
//menuShortNameList.add(e)
menuSerList.add(detail2.getMenuNo());
}
}
List menus = new ArrayList();
MenuUploadInfo uploadInfo = new MenuUploadInfo();
uploadInfo.setStoreNo(storeNo);
uploadInfo.setAddTime(DateUtils.getCurrentDateString());
uploadInfo.setAddUser("");
uploadInfo.setFilePath(filePath);
uploadInfo.setFileSize(excelFile.length() + "B");
//首先插入上传的记录 在插入详情记录
List detailList = new ArrayList<>();
int success = 0;
int fail = 0;
//解析数据
for (int rowIndex = 1; rowIndex < maxRow; rowIndex++) {
String index = ExportExcelUtil.getContent(sheet.getCell(0, rowIndex));
String menuName = ExportExcelUtil.getContent(sheet.getCell(1, rowIndex));
String menuShortName = ExportExcelUtil.getContent(sheet.getCell(2, rowIndex));
String menuNo = ExportExcelUtil.getContent(sheet.getCell(3, rowIndex));
String menuBarName = ExportExcelUtil.getContent(sheet.getCell(4, rowIndex));
String menuImgUrl = ExportExcelUtil.getContent(sheet.getCell(5, rowIndex));
String unitSz = ExportExcelUtil.getContent(sheet.getCell(6, rowIndex));
String workSz = ExportExcelUtil.getContent(sheet.getCell(7, rowIndex));
String menuRemark = ExportExcelUtil.getContent(sheet.getCell(8, rowIndex));
String menuPrices = ExportExcelUtil.getContent(sheet.getCell(9, rowIndex));
String menuXh = ExportExcelUtil.getContent(sheet.getCell(10, rowIndex));
String menuTjd = ExportExcelUtil.getContent(sheet.getCell(11, rowIndex));
MenuUploadDetail detail = new MenuUploadDetail();
detail.setMenuName(menuName);
detail.setMenuShortName(menuShortName);
MenuDetailsBean menuDetails = new MenuDetailsBean();
menuDetails.setStoreNo(storeNo);
//参数判断
//菜品名称
if (StringUtil.isEmpty(menuName)) {
detail.setOptResult("F");
detail.setOptRemark("失败原因:第" + rowIndex + "行,菜品名称为空");
fail++;
detailList.add(detail);
continue;
} else if (menuNameList.contains(menuName)) {
detail.setOptResult("F");
detail.setOptRemark("失败原因:第" + rowIndex + "行,系统中已经存在该名称[" + menuName + "]");
fail++;
detailList.add(detail);
continue;
} else if (menuName.length() > 20) {
detail.setOptResult("F");
detail.setOptRemark("失败原因:第" + rowIndex + "行,该名称[" + menuName + "]长度过大");
fail++;
detailList.add(detail);
continue;
} else {
menuDetails.setMenuName(menuName);
menuNameList.add(menuName);
}
//菜品简称
if (StringUtil.isEmpty(menuShortName)) {
detail.setOptResult("F");
detail.setOptRemark("失败原因:第" + rowIndex + "行,菜品简称为空");
fail++;
detailList.add(detail);
continue;
} else if (menuShortName.length() > 10) {
detail.setOptResult("F");
detail.setOptRemark("失败原因:第" + rowIndex + "行,菜品简称长度过大");
fail++;
detailList.add(detail);
continue;
} else {
menuDetails.setMenuShortName(menuShortName);
}
//菜品编码
if (StringUtil.isEmpty(menuNo)) {
detail.setOptResult("F");
detail.setOptRemark("失败原因:第" + rowIndex + "行,菜品编号为空");
fail++;
detailList.add(detail);
continue;
} else if (menuSerList.contains(menuNo)) {
detail.setOptResult("F");
detail.setOptRemark("失败原因:第" + rowIndex + "行,系统中已经存在该编号[" + menuNo + "]");
fail++;
detailList.add(detail);
continue;
} else if (menuNo.length() > 20) {
detail.setOptResult("F");
detail.setOptRemark("失败原因:第" + rowIndex + "行,该编号[" + menuNo + "]长度过大");
fail++;
detailList.add(detail);
continue;
} else {
menuDetails.setMenuNo(menuNo);
menuSerList.add(menuNo);
}
//判断菜品类型
if (StringUtil.isEmpty(menuBarName)) {
detail.setOptResult("F");
detail.setOptRemark("失败原因:第" + rowIndex + "行,菜品类别为空");
fail++;
detailList.add(detail);
continue;
} else if (!barNameList.contains(menuBarName)) {
detail.setOptResult("F");
detail.setOptRemark("失败原因:第" + rowIndex + "行,不存在菜品类别[" + menuBarName + "]");
fail++;
detailList.add(detail);
continue;
} else {
menuDetails.setMenuBarNo(menuBarMap.get(menuBarName));
}
//菜品图片 暂时不判断
if (StringUtil.isEmpty(menuImgUrl)) {
logger.info("没有图片不做处理");
} else if (!menuImgUrl.toLowerCase().endsWith(".png") && !menuImgUrl.toLowerCase().endsWith(".jpg") && !menuImgUrl.toLowerCase().endsWith(".jpeg")) {
detail.setOptResult("F");
detail.setOptRemark("失败原因:第" + rowIndex + "行,菜品图片格式不对,只能为png、jpg、jpeg");
fail++;
detailList.add(detail);
continue;
} else {
//得到图片 判断图片的属性
File file = new File(filePath, menuImgUrl);
if (!file.exists()) {
detail.setOptResult("F");
detail.setOptRemark("失败原因:第" + rowIndex + "行," + menuName + "对应图片未找到");
fail++;
detailList.add(detail);
continue;
}
BufferedImage image = ImageIO.read(new FileInputStream(file));
if (StringUtil.isEmpty(image) || image.getWidth() < 400 || image.getHeight() < 400) {
detail.setOptResult("F");
detail.setOptRemark("失败原因:第" + rowIndex + "行,图片的宽度或者图片的高度不满足尺寸要求");
fail++;
detailList.add(detail);
continue;
} else if (file.length() > 2 * 1024 * 1024) {
detail.setOptResult("F");
detail.setOptRemark("失败原因:第" + rowIndex + "行,菜品图片大小不能超过2M");
fail++;
detailList.add(detail);
continue;
}
String fileName = FileUtils.getNewName(file.getName());
Map map = OSSUtils.upload(fileName, new FileInputStream(file));
if (!StringUtil.isEmpty(map)) {
menuDetails.setMenuLargeImg(map.get(OSSUtils.IMAGE_URL));
menuDetails.setMenuSmallImg(map.get(OSSUtils.SMALL_IMAGE_URL));
} else {
logger.info(file.getName() + "处理失败");
}
}
//判断单位信息
if (StringUtil.isEmpty(unitSz)) {
detail.setOptResult("F");
detail.setOptRemark("失败原因:第" + rowIndex + "行,单位设置为空");
fail++;
detailList.add(detail);
continue;
} else if (!unitNameList.contains(unitSz)) {
detail.setOptResult("F");
detail.setOptRemark("失败原因:第" + rowIndex + "行,不存在该单位[" + unitSz + "]");
fail++;
detailList.add(detail);
continue;
} else {
menuDetails.setUintId(unitMap.get(unitSz));
}
//判断工作间
if (StringUtil.isEmpty(workSz)) {
detail.setOptResult("F");
detail.setOptRemark("失败原因:第" + rowIndex + "行,工作间为空");
fail++;
detailList.add(detail);
continue;
} else if (!workNameList.contains(workSz)) {
detail.setOptResult("F");
detail.setOptRemark("失败原因:第" + rowIndex + "行,不存在工作间[" + workSz + "]");
fail++;
detailList.add(detail);
continue;
} else {
menuDetails.setWorkshopId(workMap.get(workSz));
}
//菜品描述
menuDetails.setMenuContent(menuRemark);
//判断销售价格
if (StringUtil.isEmpty(menuPrices)) {
detail.setOptResult("F");
detail.setOptRemark("失败原因:第" + rowIndex + "行,销售单价为空");
fail++;
detailList.add(detail);
continue;
} else if (!StringUtil.isNumber(menuPrices)) {
detail.setOptResult("F");
detail.setOptRemark("失败原因:第" + rowIndex + "行,销售单价不是金额字符串");
fail++;
detailList.add(detail);
continue;
} else {
BigDecimal price = new BigDecimal(menuPrices);
if (price.compareTo(BigDecimal.ZERO) != 1) {
detail.setOptResult("F");
detail.setOptRemark("失败原因:第" + rowIndex + "行,销售单价必须大于0");
fail++;
detailList.add(detail);
continue;
} else {
menuDetails.setPrice(price);
}
}
//排序位
if (StringUtil.isEmpty(menuXh)) {
detail.setOptResult("F");
detail.setOptRemark("失败原因:第" + rowIndex + "行,排序位为空");
fail++;
detailList.add(detail);
continue;
} else if (!StringUtil.isInt(menuXh)) {
detail.setOptResult("F");
detail.setOptRemark("失败原因:第" + rowIndex + "行,排序位为正整数");
fail++;
detailList.add(detail);
continue;
} else if (Integer.parseInt(menuXh) < 1) {
detail.setOptResult("F");
detail.setOptRemark("失败原因:第" + rowIndex + "行,排序位必须大于0");
fail++;
detailList.add(detail);
continue;
} else {
menuDetails.setArrayNum(Integer.parseInt(menuXh));
}
if (StringUtil.isEmpty(menuTjd)) {
detail.setOptResult("F");
detail.setOptRemark("失败原因:第" + rowIndex + "行,推荐度为空");
fail++;
detailList.add(detail);
continue;
} else if (!tjdMap.containsKey(menuTjd)) {
detail.setOptResult("F");
detail.setOptRemark("失败原因:第" + rowIndex + "行,不存在推荐度[" + menuTjd + "]");
fail++;
detailList.add(detail);
continue;
} else {
menuDetails.setRecommendLevel(tjdMap.get(menuTjd));
}
menuDetails.setIsDelete("N");
menuDetails.setIsMust("N");
menuDetails.setChilliLevel(0);
menuDetails.setIsSignboard("N");
menuDetails.setStatus(1);
menuDetails.setClearStatus(1);
menuDetails.setShowIcon("1");
menuDetails.setAddTime(DateUtils.getCurrentDateString());
menuDetails.setHaveTaste(0);
menuDetails.setBidPrice(new BigDecimal(0));
detail.setOptResult("Y");
detail.setOptRemark("第" + rowIndex + "行,数据验证通过");
success++;
detailList.add(detail);
//菜单List 加入
menus.add(menuDetails);
}
uploadInfo.setSuccessNum(success);
uploadInfo.setFailNum(fail);
uploadInfo.setOptNum(success + fail);
JSONObject response = new JSONObject();
response.put("successNum", success);
response.put("failNum", fail);
response.put("resultData", detailList);
result.put("respData", response);
/*
* 添加数据库到数据库 先添加 批量操作历史
* 获取批量历史Id 插入详情信息中
* 添加 成功的菜单详情
*/
//删除目录下的文件
excelFile.delete();
//添加批量历史
MenuUploadInfo uploadReturnInfo;
if (uploadInfoDao.insert(uploadInfo) > 0) {
uploadReturnInfo = uploadInfo;
} else {
logger.error("批量插入操作历史失败");
throw new Exception("批量插入操作历史失败");
}
MenuUploadInfo upload = JsonUtils.jsonToPojo(uploadReturnInfo.toString(), MenuUploadInfo.class);
for (MenuUploadDetail menuUploadDetail : detailList) {
menuUploadDetail.setUploadId(upload.getId());
}
if (!(uploadDetailDao.batchInsert(detailList) > 0)) {
logger.error("批量插入详情失败");
throw new Exception("批量插入详情失败");
}
if (menus.size() > 0) {
//插入成功的菜品
if (!(menuDetailsDao.batchAddMenu(menus) > 0)) {
logger.error("插入菜单失败");
throw new Exception("插入菜单失败");
}
}
result.put("respCode", "00");
result.put("message", "上传成功");
return result;
} catch (Exception e) {
result.put("respCode", "01");
result.put("message", e.getMessage());
logger.info("修改出错:" + e.getMessage());
e.printStackTrace();
return result;
}
}