From 4e9903b1b62cefbbeadeb0acddfd6b2748423d46 Mon Sep 17 00:00:00 2001 From: "xiaodong.hu" <1075471126@qq.com> Date: Wed, 16 Aug 2023 13:18:55 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=B8=8E=E5=AE=8C=E5=96=84?= =?UTF-8?q?=E7=BA=BF=E7=B4=A2=E5=AF=BC=E5=85=A5=E4=B8=8E=E6=96=B0=E5=A2=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../store/constants/ExcelErrorConstants.java | 12 +- .../com/cool/store/enums/ErrorCodeEnum.java | 11 ++ .../resources/mapper/HyOpenAreaInfoMapper.xml | 2 +- .../cool/store/entity/HyPartnerLineDO.java | 13 +- .../cool/store/request/AddLineRequest.java | 4 +- .../service/impl/LineHighSeasServiceImpl.java | 126 +++++++++++------- .../com/cool/store/utils/poi/ExcelUtil.java | 43 +++++- .../store/utils/poi/constant/Constants.java | 4 + .../cool/store/config/BodyWrapperFilter.java | 16 ++- .../controller/LineHighSeasController.java | 16 +-- 10 files changed, 162 insertions(+), 85 deletions(-) diff --git a/coolstore-partner-common/src/main/java/com/cool/store/constants/ExcelErrorConstants.java b/coolstore-partner-common/src/main/java/com/cool/store/constants/ExcelErrorConstants.java index 046477b12..54019b856 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/constants/ExcelErrorConstants.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/constants/ExcelErrorConstants.java @@ -13,16 +13,16 @@ public class ExcelErrorConstants { public static final String MOBILE_EXIST= "手机号已存在"; - public static final String LIVEAREA_LOSE= "常驻区域缺失"; + public static final String LIVE_AREA_LOSE = "常驻区域缺失"; - public static final String LIVEAREA_FORMAT_ERROR= "常驻区域格式错误"; + public static final String LIVE_AREA_FORMAT_ERROR = "常驻区域格式错误"; - public static final String WANTSHOPAREA_LOSE= "意向区域缺失"; + public static final String WANT_SHOP_AREA_LOSE = "意向区域缺失"; - public static final String WANTSHOPAREA_FORMAT_ERROR= "意向区域格式错误"; + public static final String WANT_SHOP_AREA_FORMAT_ERROR = "意向区域格式错误"; - public static final String ACCEPTADJUSTTYPE_LOSE= "是否接受调剂缺失"; + public static final String ACCEPT_ADJUST_TYPE_LOSE = "是否接受调剂缺失"; - public static final String INVESTMENTMANAGER_LOSE= "未找到此招商经理,请核实"; + public static final String INVESTMENT_MANAGER_LOSE = "未找到此招商经理,请核实"; } diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java index adeef3eee..7355cb143 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java @@ -82,6 +82,11 @@ public enum ErrorCodeEnum { INTERVIEW_INTERVIEW_TIME_IS_UNUSABLE(1021114, "当前预约时间不可用,请和线索用户协商其他时间后确定预约时间\n面试人:{0} 手机号:{1}", null), INTERVIEW_PARTNER_NOT_EXIST(1021115, "线索下的加盟商不存在!", null), ROOM_STATUS_ERROR(10211156, "当前面试房间状态不允许进行该操作!", null), + MOBILE_APP_NOT_ONLINE_ERROR(10211157, "拨出手机APP不在线!", null), + CALL_RECORD_NOT_EXIST_ERROR(10211158, "通话记录不存在!", null), + + CREATE_CALL_REQUEST_ERROR(10211158, "创建电话请求失败!", null), + CALL_UP_ERROR(10211159, "拨出电话异常!", null), CONTENT_DUPLICATED(10211200, "动态标题重复!", null), SIGN_FAIL(600000, "验签失败", null), GET_ACCESSTOKEN_ERROR(600001, "获取小程序TOKEN错误!", null), @@ -89,6 +94,12 @@ public enum ErrorCodeEnum { INSPECTION_USER_OCCUPY(600002,"当前稽核人已经配置其他战区",null), INSPECTION_INFO_NOT_EXIST(600005, "稽核信息不存在!", null), OPEN_AREA_NULL(600006,"归属地区不能为空",null), + + OUTBOUND_NUMBER_EXIST(110001, "该呼出号码已被绑定,请更改后重试", null), + + LABEL_GROUP_IN_USE(120001, "该标签组下存在标签,不可删除;请确保该标签组下标签数量为0后再进行删除", null), + LABEL_GROUP_EXIST(120002, "该标签组已存在,请重新输入", null), + LABEL_EXIST(120003, "该标签已存在,请重新输入", null), ; diff --git a/coolstore-partner-dao/src/main/resources/mapper/HyOpenAreaInfoMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/HyOpenAreaInfoMapper.xml index 60b212972..4ba49efba 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/HyOpenAreaInfoMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/HyOpenAreaInfoMapper.xml @@ -307,7 +307,7 @@ SELECT FROM `hy_open_area_info` - WHERE area_path= concat('/',#{areaPath},'/') and deleted=0 + WHERE area_path= concat('/',#{areaPath},'/') and deleted=0 and province_city_flag=0 \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/HyPartnerLineDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/HyPartnerLineDO.java index 510a45373..19b6136c6 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/entity/HyPartnerLineDO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/HyPartnerLineDO.java @@ -22,7 +22,7 @@ import java.io.Serializable; @Accessors(chain = true) public class HyPartnerLineDO implements Serializable { - @Excel(name = "*姓名(必填)") + @Excel(name = "*姓名(必填)" ) @ApiModelProperty("姓名") private String partnerName; @@ -30,33 +30,32 @@ public class HyPartnerLineDO implements Serializable { @ApiModelProperty("手机号") private String mobile; - @Excel(name = "*常驻区域(必填)") + @Excel(name = "*常驻区域(必填)",width =18) @ApiModelProperty("常驻区域") private String liveAreaReplace; private String liveArea; - @Excel(name = "*意向区域(必填)") + @Excel(name = "*意向区域(必填)",width =18) @ApiModelProperty("意向区域") private String wantShopAreaReplace; private Long wantShopArea; - @Excel(name = "*是否接受调剂(必填)") + @Excel(name = "*是否接受调剂(必填)",width =18) @ApiModelProperty("是否接受调剂") private String acceptAdjustTypeReplace; private Integer acceptAdjustType; - @Excel(name = "分配招商经理") + @Excel(name = "分配招商经理",width =18) @ApiModelProperty("分配招商经理") private String investmentManagerReplace; private String investmentManager; - - @Excel(name = "错误信息") + @Excel(name = "错误信息",width =26) @ApiModelProperty("错误信息") private String errorInfo; diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/AddLineRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/AddLineRequest.java index 6faa4e435..fe83cbcf8 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/AddLineRequest.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/AddLineRequest.java @@ -6,7 +6,9 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.experimental.Accessors; +import javax.validation.constraints.Max; import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; import javax.validation.constraints.Pattern; import java.util.List; @@ -41,7 +43,7 @@ public class AddLineRequest { /** * (0不接受调剂、1全国调剂、2省内调剂、3市内调剂)* */ - @NotBlank(message = "是否接受调剂不能为空") + @NotNull(message = "是否接受调剂不能为空") @ApiModelProperty("是否接受调剂") private Integer acceptAdjustType; diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/LineHighSeasServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/LineHighSeasServiceImpl.java index 4e22a6c42..3e357d8ff 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/LineHighSeasServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/LineHighSeasServiceImpl.java @@ -1,7 +1,8 @@ package com.cool.store.service.impl; import cn.hutool.core.bean.BeanUtil; -import cn.hutool.core.convert.Convert; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import com.cool.store.constants.ExcelErrorConstants; import com.cool.store.dao.*; @@ -22,6 +23,7 @@ import com.cool.store.utils.UUIDUtils; import com.cool.store.utils.poi.ExcelUtil; import com.cool.store.utils.poi.constant.Constants; import lombok.SneakyThrows; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; @@ -41,6 +43,13 @@ import java.util.regex.Pattern; public class LineHighSeasServiceImpl implements LineHighSeasService { + @Value("${oss.excelFile.dir:null}") + private String dir; + + @Value("${manual.channel.id}") + private Integer manual; + + @Resource private HyPartnerUserInfoDAO hyPartnerUserInfoDAO; @@ -78,13 +87,14 @@ public class LineHighSeasServiceImpl implements LineHighSeasService { /** * 新增线索 + * * @param request */ public void add(AddLineRequest request) { String partnerId = UUIDUtils.get32UUID(); HyPartnerUserInfoDO resultUser = new HyPartnerUserInfoDO(); resultUser.setUsername(request.getPartnerName()).setMobile(request.getMobile()).setPartnerId(partnerId).setCreateTime(new Date()).setAcceptAdjustType(request.getAcceptAdjustType()) - .setLiveArea(request.getLiveArea()).setWantShopArea(request.getWantShopArea()); + .setLiveArea(request.getLiveArea()).setWantShopArea(request.getWantShopArea()).setUserChannelId(manual); hyPartnerUserInfoDAO.insertSelective(resultUser); HyPartnerLineInfoDO resultLine = new HyPartnerLineInfoDO(); @@ -118,116 +128,123 @@ public class LineHighSeasServiceImpl implements LineHighSeasService { @Override @Transactional(rollbackFor = Exception.class) public ResponseResult importLine(MultipartFile file) { + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); ExcelUtil util = new ExcelUtil(HyPartnerLineDO.class); List lineDOList = util.importExcel(file.getInputStream()); - if (lineDOList.size() > excelMaxSize) { - - //上传文件到oss -// ossServer.uploadFileServer() - return new ResponseResult(500, "", new ErrorExcelResponse(lineDOList.size(), excelMaxSize, "")); - } Map>> styleCells = new HashMap<>(4); + if (lineDOList.size() > excelMaxSize) { + //超出五百条的excel都标红 + for (int i = excelMaxSize; i < lineDOList.size() ; i++) { + styleCells.put(i,new HashMap<>()); + } + ExcelUtil.setRowStyle(styleCells,ExcelUtil.FONT_RED,7); + util.exportExcel(outputStream, lineDOList, "", styleCells); + InputStream stream = new ByteArrayInputStream(outputStream.toByteArray()); + String fileStr = ossServer.uploadFileServer(stream, dir + getExcelName()); + return new ResponseResult(500, "每次数据最多导入500条,请分批上传", new ErrorExcelResponse(lineDOList.size(), excelMaxSize, fileStr)); + } for (int i = 0; i < lineDOList.size(); i++) { HyPartnerLineDO hyPartnerLineDO = lineDOList.get(i); if (StringUtil.isEmpty(hyPartnerLineDO.getPartnerName())) { - hyPartnerLineDO.setErrorInfo(hyPartnerLineDO.getErrorInfo().concat(Constants.SEMICOLON).concat(ExcelErrorConstants.NAME_LOSE)); - ExcelUtil.setStyleMap(styleCells, i, 1, new String[]{ExcelUtil.FONT_RED}); + hyPartnerLineDO.setErrorInfo(StringUtil.isEmpty(hyPartnerLineDO.getErrorInfo()) ? ExcelErrorConstants.NAME_LOSE : hyPartnerLineDO.getErrorInfo().concat(Constants.SEMICOLON).concat(ExcelErrorConstants.NAME_LOSE)); + ExcelUtil.setStyleMap(styleCells, i, 0, new String[]{ExcelUtil.FONT_RED}); } - String mobile = hyPartnerLineDO.getMobile(); + String mobile = hyPartnerLineDO.getMobile().trim(); //手机号为空 if (StringUtil.isEmpty(mobile)) { - hyPartnerLineDO.setErrorInfo(hyPartnerLineDO.getErrorInfo().concat(Constants.SEMICOLON).concat(ExcelErrorConstants.MOBILE_LOSE)); - ExcelUtil.setStyleMap(styleCells, i, 2, new String[]{ExcelUtil.FONT_RED}); + hyPartnerLineDO.setErrorInfo(StringUtil.isEmpty(hyPartnerLineDO.getErrorInfo()) ? ExcelErrorConstants.MOBILE_LOSE : hyPartnerLineDO.getErrorInfo().concat(Constants.SEMICOLON).concat(ExcelErrorConstants.MOBILE_LOSE)); + ExcelUtil.setStyleMap(styleCells, i, 1, new String[]{ExcelUtil.FONT_RED}); } else { //手机号格式判断 if (!isPhone(mobile)) { - hyPartnerLineDO.setErrorInfo(hyPartnerLineDO.getErrorInfo().concat(Constants.SEMICOLON).concat(ExcelErrorConstants.MOBILE_ERROR)); - ExcelUtil.setStyleMap(styleCells, i, 2, new String[]{ExcelUtil.FONT_RED}); + hyPartnerLineDO.setErrorInfo(StringUtil.isEmpty(hyPartnerLineDO.getErrorInfo()) ? ExcelErrorConstants.MOBILE_ERROR : hyPartnerLineDO.getErrorInfo().concat(Constants.SEMICOLON).concat(ExcelErrorConstants.MOBILE_ERROR)); + ExcelUtil.setStyleMap(styleCells, i, 1, new String[]{ExcelUtil.FONT_RED}); } //手机号是否已存在 HyPartnerUserInfoDO hyPartnerUserInfoDO = hyPartnerUserInfoDAO.selectByMobile(mobile); if (ObjectUtil.isNotNull(hyPartnerUserInfoDO)) { - hyPartnerLineDO.setErrorInfo(hyPartnerLineDO.getErrorInfo().concat(Constants.SEMICOLON).concat(ExcelErrorConstants.MOBILE_EXIST)); - ExcelUtil.setStyleMap(styleCells, i, 2, new String[]{ExcelUtil.FONT_RED}); + hyPartnerLineDO.setErrorInfo(StringUtil.isEmpty(hyPartnerLineDO.getErrorInfo()) ? ExcelErrorConstants.MOBILE_EXIST : hyPartnerLineDO.getErrorInfo().concat(Constants.SEMICOLON).concat(ExcelErrorConstants.MOBILE_EXIST)); + ExcelUtil.setStyleMap(styleCells, i, 1, new String[]{ExcelUtil.FONT_RED}); } } //常驻区域为空 - String liveArea = hyPartnerLineDO.getLiveAreaReplace(); + String liveArea = hyPartnerLineDO.getLiveAreaReplace().trim(); if (StringUtil.isEmpty(liveArea)) { - hyPartnerLineDO.setErrorInfo(hyPartnerLineDO.getErrorInfo().concat(Constants.SEMICOLON).concat(ExcelErrorConstants.LIVEAREA_LOSE)); - ExcelUtil.setStyleMap(styleCells, i, 3, new String[]{ExcelUtil.FONT_RED}); + hyPartnerLineDO.setErrorInfo(StringUtil.isEmpty(hyPartnerLineDO.getErrorInfo()) ? ExcelErrorConstants.LIVE_AREA_LOSE : hyPartnerLineDO.getErrorInfo().concat(Constants.SEMICOLON).concat(ExcelErrorConstants.LIVE_AREA_LOSE)); + ExcelUtil.setStyleMap(styleCells, i, 2, new String[]{ExcelUtil.FONT_RED}); } else { //判断格式是否为错 if (ObjectUtil.isNull(hyOpenAreaInfoDAO.selectByAreaPath(liveArea))) { - hyPartnerLineDO.setErrorInfo(hyPartnerLineDO.getErrorInfo().concat(Constants.SEMICOLON).concat(ExcelErrorConstants.LIVEAREA_FORMAT_ERROR)); - ExcelUtil.setStyleMap(styleCells, i, 3, new String[]{ExcelUtil.FONT_RED}); - }else { + hyPartnerLineDO.setErrorInfo(StringUtil.isEmpty(hyPartnerLineDO.getErrorInfo()) ? ExcelErrorConstants.LIVE_AREA_FORMAT_ERROR : hyPartnerLineDO.getErrorInfo().concat(Constants.SEMICOLON).concat(ExcelErrorConstants.LIVE_AREA_FORMAT_ERROR)); + ExcelUtil.setStyleMap(styleCells, i, 2, new String[]{ExcelUtil.FONT_RED}); + } else { hyPartnerLineDO.setLiveArea(liveArea.replace(Constants.FORWARD_SLASH, Constants.SPACE)); } } //意向区域 - String wantShopArea = hyPartnerLineDO.getWantShopAreaReplace(); + String wantShopArea = hyPartnerLineDO.getWantShopAreaReplace().trim(); if (StringUtil.isEmpty(wantShopArea)) { - hyPartnerLineDO.setErrorInfo(hyPartnerLineDO.getErrorInfo().concat(Constants.SEMICOLON).concat(ExcelErrorConstants.WANTSHOPAREA_LOSE)); - ExcelUtil.setStyleMap(styleCells, i, 4, new String[]{ExcelUtil.FONT_RED}); + hyPartnerLineDO.setErrorInfo(StringUtil.isEmpty(hyPartnerLineDO.getErrorInfo()) ? ExcelErrorConstants.WANT_SHOP_AREA_LOSE : hyPartnerLineDO.getErrorInfo().concat(Constants.SEMICOLON).concat(ExcelErrorConstants.WANT_SHOP_AREA_LOSE)); + ExcelUtil.setStyleMap(styleCells, i, 3, new String[]{ExcelUtil.FONT_RED}); } else { //判断格式是否为错 HyOpenAreaInfoDO hyOpenAreaInfoDO = hyOpenAreaInfoDAO.selectByAreaPath(wantShopArea); if (ObjectUtil.isNull(hyOpenAreaInfoDO)) { - hyPartnerLineDO.setErrorInfo(hyPartnerLineDO.getErrorInfo().concat(Constants.SEMICOLON).concat(ExcelErrorConstants.WANTSHOPAREA_FORMAT_ERROR)); - ExcelUtil.setStyleMap(styleCells, i, 4, new String[]{ExcelUtil.FONT_RED}); - }else { + hyPartnerLineDO.setErrorInfo(StringUtil.isEmpty(hyPartnerLineDO.getErrorInfo()) ? ExcelErrorConstants.WANT_SHOP_AREA_FORMAT_ERROR : hyPartnerLineDO.getErrorInfo().concat(Constants.SEMICOLON).concat(ExcelErrorConstants.WANT_SHOP_AREA_FORMAT_ERROR)); + ExcelUtil.setStyleMap(styleCells, i, 3, new String[]{ExcelUtil.FONT_RED}); + } else { hyPartnerLineDO.setWantShopArea(hyOpenAreaInfoDO.getId()); } } //是否接受调剂 - String acceptAdjustType = hyPartnerLineDO.getAcceptAdjustTypeReplace(); + String acceptAdjustType = hyPartnerLineDO.getAcceptAdjustTypeReplace().trim(); if (StringUtil.isEmpty(acceptAdjustType)) { + hyPartnerLineDO.setErrorInfo(StringUtil.isEmpty(hyPartnerLineDO.getErrorInfo()) ? ExcelErrorConstants.ACCEPT_ADJUST_TYPE_LOSE : hyPartnerLineDO.getErrorInfo().concat(Constants.SEMICOLON).concat(ExcelErrorConstants.ACCEPT_ADJUST_TYPE_LOSE)); + ExcelUtil.setStyleMap(styleCells, i, 4, new String[]{ExcelUtil.FONT_RED}); + }else { Integer enumByName = AcceptAdjustTypeEnum.findEnumByName(acceptAdjustType); - if(ObjectUtil.isNull(enumByName)){ - hyPartnerLineDO.setErrorInfo(hyPartnerLineDO.getErrorInfo().concat(Constants.SEMICOLON).concat(ExcelErrorConstants.ACCEPTADJUSTTYPE_LOSE)); - ExcelUtil.setStyleMap(styleCells, i, 5, new String[]{ExcelUtil.FONT_RED}); - }else { + if (ObjectUtil.isNull(enumByName)) { + hyPartnerLineDO.setErrorInfo(StringUtil.isEmpty(hyPartnerLineDO.getErrorInfo()) ? ExcelErrorConstants.ACCEPT_ADJUST_TYPE_LOSE : hyPartnerLineDO.getErrorInfo().concat(Constants.SEMICOLON).concat(ExcelErrorConstants.ACCEPT_ADJUST_TYPE_LOSE)); + ExcelUtil.setStyleMap(styleCells, i, 4, new String[]{ExcelUtil.FONT_RED}); + } else { hyPartnerLineDO.setAcceptAdjustType(enumByName); } } //分配招商经理 - String investmentManager = hyPartnerLineDO.getInvestmentManagerReplace(); + String investmentManager = hyPartnerLineDO.getInvestmentManagerReplace().trim(); if (StringUtil.isNotEmpty(investmentManager)) { //判断是否能够查询的到 EnterpriseUserDO enterpriseUserDO = enterpriseUserDAO.selectByInvestmentManager(investmentManager); if (ObjectUtil.isNull(enterpriseUserDO)) { - hyPartnerLineDO.setErrorInfo(hyPartnerLineDO.getErrorInfo().concat(Constants.SEMICOLON).concat(ExcelErrorConstants.INVESTMENTMANAGER_LOSE)); - ExcelUtil.setStyleMap(styleCells, i, 6, new String[]{ExcelUtil.FONT_RED}); - }else { + hyPartnerLineDO.setErrorInfo(StringUtil.isEmpty(hyPartnerLineDO.getErrorInfo()) ? ExcelErrorConstants.INVESTMENT_MANAGER_LOSE : hyPartnerLineDO.getErrorInfo().concat(Constants.SEMICOLON).concat(ExcelErrorConstants.INVESTMENT_MANAGER_LOSE)); + ExcelUtil.setStyleMap(styleCells, i, 5, new String[]{ExcelUtil.FONT_RED}); + } else { hyPartnerLineDO.setInvestmentManager(enterpriseUserDO.getUserId()); } } } - ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); util.exportExcel(outputStream, lineDOList, "", styleCells); InputStream stream = new ByteArrayInputStream(outputStream.toByteArray()); - String fileStr = ossServer.uploadFileServer(stream, ""); + String fileStr = ossServer.uploadFileServer(stream, dir + getExcelName()); if (styleCells.size() != 0) { - return new ResponseResult(500, "", new ErrorExcelResponse(lineDOList.size(), styleCells.size(), fileStr)); + return new ResponseResult(500, "共上传" + lineDOList.size() + "条线索,其中" + styleCells.size() + "条存在异常", new ErrorExcelResponse(lineDOList.size(), styleCells.size(), fileStr)); } for (HyPartnerLineDO hyPartnerLineDO : lineDOList) { AddLineRequest addLineRequest = new AddLineRequest(); - BeanUtil.copyProperties(addLineRequest,hyPartnerLineDO); + BeanUtil.copyProperties(hyPartnerLineDO, addLineRequest); addLineRequest.setWantShopArea(hyPartnerLineDO.getWantShopArea().toString()); add(addLineRequest); } - return new ResponseResult(200, "", new ErrorExcelResponse(lineDOList.size(), styleCells.size(), fileStr)); + return new ResponseResult(200, "共上传" + lineDOList.size() + "条线索", new ErrorExcelResponse(lineDOList.size(), styleCells.size(), fileStr)); } - /** * @param phone 字符串类型的手机号 - * 传入手机号,判断后返回 - * true为手机号,false相反 - */ - private boolean isPhone(String phone) { - String regex = "^((13[0-9])|(14[5,7,9])|(15([0-3]|[5-9]))|(166)|(17[0,1,3,5,6,7,8])|(18[0-9])|(19[8|9]))\\d{8}$"; + * 传入手机号,判断后返回 + * true为手机号,false相反 + * */ + public static boolean isPhone(String phone) { + String regex = "^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\\d{8}$"; if (phone.length() != 11) { return false; } else { @@ -236,4 +253,15 @@ public class LineHighSeasServiceImpl implements LineHighSeasService { return m.matches(); } } + + /** + * 获取excel名称 + * + * @return + */ + private String getExcelName() { + String format = DateUtil.format(new Date(), "yyyyMMdd").concat(Constants.D_LINE).concat(IdUtil.simpleUUID().substring(0, 10)); + return format.concat(Constants.POMINT).concat(Constants.EXCEL_XLSX); + } + } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/utils/poi/ExcelUtil.java b/coolstore-partner-service/src/main/java/com/cool/store/utils/poi/ExcelUtil.java index 8f67c2435..d75cd4fd2 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/utils/poi/ExcelUtil.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/utils/poi/ExcelUtil.java @@ -2,6 +2,7 @@ package com.cool.store.utils.poi; import cn.hutool.core.util.ObjectUtil; import com.alibaba.excel.EasyExcel; +import com.aliyun.openservices.shade.com.google.common.collect.Lists; import com.cool.store.annotation.Excel; import com.cool.store.annotation.Excels; import com.cool.store.utils.poi.constant.Constants; @@ -14,6 +15,7 @@ import org.apache.poi.xssf.streaming.SXSSFWorkbook; import org.apache.poi.xssf.usermodel.XSSFDataValidation; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.util.CollectionUtils; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @@ -177,6 +179,39 @@ public class ExcelUtil { throw new IOException("文件sheet不存在"); } + int num = sheet.getLastRowNum(); + //删除的空行(包含空白行和带有格式的空行) + int bk = 0; + //记录空白行的集合 + List nums = Lists.newArrayList(); + for (int i = 1; i <= num; i++) { + Row row = sheet.getRow(i); + boolean flag = false; + //带有格式的空白行 + if (row != null) { + for (Cell cell : row) { + //判断该单元格是否全为空 + if (StringUtils.isNotEmpty(cell.toString())) { + flag = true; + break; + } + } + if (!flag) { + nums.add(i); + bk++; + } + //空白行 + } else { + nums.add(i); + bk++; + } + } + //删除无效数据行(空白行,带格式的空白行) + for (Integer n : nums) { + if (sheet.getRow(n) != null) { + sheet.removeRow(sheet.getRow(n)); + } + } int rows = sheet.getPhysicalNumberOfRows(); if (rows > 0) { @@ -485,7 +520,7 @@ public class ExcelUtil { //默认样式 CellStyle cellStyle = cell.getRow().getSheet().getWorkbook().createCellStyle(); cellStyle.cloneStyleFrom(styles.get("data")); - if(stylePan){ + if(stylePan&&!CollectionUtils.isEmpty(styleCells)){ if (styleCells.containsKey(lineNumber)) { Map> columnMap = styleCells.get(lineNumber); if (columnMap.containsKey(column)) { @@ -587,13 +622,13 @@ public class ExcelUtil { * * @param styleMap * @param style - * @param columNumCount 总列数 + * @param columnNumCount 总列数 */ - public static void setRowStyle(Map>> styleMap, String style, int columNumCount) { + public static void setRowStyle(Map>> styleMap, String style, int columnNumCount) { for (Integer row : styleMap.keySet()) { boolean pan = false; Map> integerListMap = styleMap.get(row); - for (int i = 0; i <= columNumCount; i++) { + for (int i = 0; i <= columnNumCount; i++) { if (pan) { continue; } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/utils/poi/constant/Constants.java b/coolstore-partner-service/src/main/java/com/cool/store/utils/poi/constant/Constants.java index c4e8ee514..65536d4a0 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/utils/poi/constant/Constants.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/utils/poi/constant/Constants.java @@ -102,6 +102,10 @@ public class Constants * 图片格式 */ public static final String IMAGE_JPG = "jpg"; + /** + * 图片格式 + */ + public static final String EXCEL_XLSX = "xlsx"; /** * 图片格式 */ diff --git a/coolstore-partner-webb/src/main/java/com/cool/store/config/BodyWrapperFilter.java b/coolstore-partner-webb/src/main/java/com/cool/store/config/BodyWrapperFilter.java index 561d9b3c3..623a40a60 100644 --- a/coolstore-partner-webb/src/main/java/com/cool/store/config/BodyWrapperFilter.java +++ b/coolstore-partner-webb/src/main/java/com/cool/store/config/BodyWrapperFilter.java @@ -19,13 +19,17 @@ public class BodyWrapperFilter implements Filter { @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { ServletRequest requestWrapper = null; - if(servletRequest instanceof HttpServletRequest) { - requestWrapper = new CustomHttpServletRequestWrapper((HttpServletRequest) servletRequest); - } - if(requestWrapper == null) { + if (org.springframework.util.StringUtils.hasLength(servletRequest.getContentType()) && servletRequest.getContentType().contains("multipart/form-data")) { filterChain.doFilter(servletRequest, servletResponse); - } else { - filterChain.doFilter(requestWrapper, servletResponse); + }else { + if (servletRequest instanceof HttpServletRequest) { + requestWrapper = new CustomHttpServletRequestWrapper((HttpServletRequest) servletRequest); + } + if (requestWrapper == null) { + filterChain.doFilter(servletRequest, servletResponse); + } else { + filterChain.doFilter(requestWrapper, servletResponse); + } } } } \ No newline at end of file diff --git a/coolstore-partner-webb/src/main/java/com/cool/store/controller/LineHighSeasController.java b/coolstore-partner-webb/src/main/java/com/cool/store/controller/LineHighSeasController.java index 8c4f5cf08..f8e55fea2 100644 --- a/coolstore-partner-webb/src/main/java/com/cool/store/controller/LineHighSeasController.java +++ b/coolstore-partner-webb/src/main/java/com/cool/store/controller/LineHighSeasController.java @@ -1,22 +1,17 @@ package com.cool.store.controller; -import com.cool.store.entity.HyPartnerLineDO; import com.cool.store.exception.ApiException; import com.cool.store.request.AddLineRequest; import com.cool.store.response.ResponseResult; import com.cool.store.service.LineHighSeasService; -import com.cool.store.utils.poi.ExcelUtil; import io.swagger.annotations.ApiOperation; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import javax.validation.Valid; -import java.util.List; /** * @Author: hxd @@ -28,21 +23,20 @@ import java.util.List; public class LineHighSeasController { - @Resource + @Autowired private LineHighSeasService lineHighSeasService; @PostMapping("/add") @ApiOperation("新建线索") public ResponseResult addLine(@RequestBody @Valid AddLineRequest request) throws ApiException { - return ResponseResult.success(lineHighSeasService.addLine(request)); } - @PostMapping("/import") + @PostMapping(value = "/import") @ApiOperation("批量导入线索") - public ResponseResult importLine(MultipartFile file) throws Exception { + public ResponseResult importLine(@RequestParam(value = "file") MultipartFile file) throws Exception { return lineHighSeasService.importLine(file); } }