From 3e08d3b4d95951605b97bb3d9525d8198d4f0f63 Mon Sep 17 00:00:00 2001 From: zhuhaoyu <123456789> Date: Tue, 14 Apr 2020 17:30:29 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8E=A8=E5=B9=BF=E6=89=B9=E9=87=8F=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/StoreStaffController.java | 19 ++ .../store/service/PoiStoreStaffService.java | 264 +++++++++++++++++- 2 files changed, 281 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/kiisoo/ic/store/controller/StoreStaffController.java b/src/main/java/com/kiisoo/ic/store/controller/StoreStaffController.java index e660266..e279a45 100644 --- a/src/main/java/com/kiisoo/ic/store/controller/StoreStaffController.java +++ b/src/main/java/com/kiisoo/ic/store/controller/StoreStaffController.java @@ -8,10 +8,12 @@ import com.kiisoo.ic.employee.service.EmployeeService; import com.kiisoo.ic.store.entity.PoiStoreStaff; import com.kiisoo.ic.store.entity.PoiStoreStaffVO; import com.kiisoo.ic.store.service.PoiStoreStaffService; +import com.kiisoo.ic.system.bean.ImportAccountErrorBean; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.util.List; import java.util.Map; @@ -69,4 +71,21 @@ public class StoreStaffController extends BaseController { } } + /** + * 批量上传推广人员 + * @param files excel + * @return 错误List + */ + @ResponseBody + @RequestMapping(value = "/upload" , method = RequestMethod.POST, produces = "application/json;charset=utf8") + public Map uploadGoods(@RequestParam("file") MultipartFile[] files){ + try { + List result = poiStoreStaffService.uploadStaff(files); + return data(result); + }catch (Exception e){ + log.error("批量上传商品错误", e); + return fail(); + } + } + } diff --git a/src/main/java/com/kiisoo/ic/store/service/PoiStoreStaffService.java b/src/main/java/com/kiisoo/ic/store/service/PoiStoreStaffService.java index 56ebc26..98bd647 100644 --- a/src/main/java/com/kiisoo/ic/store/service/PoiStoreStaffService.java +++ b/src/main/java/com/kiisoo/ic/store/service/PoiStoreStaffService.java @@ -14,21 +14,35 @@ import com.kiisoo.ic.store.entity.PoiStoreStaffVO; import com.kiisoo.ic.store.mapper.PoiStoreDOMapper; import com.kiisoo.ic.store.mapper.PoiStoreStaffDOMapper; import com.kiisoo.ic.system.bean.AccountBean; +import com.kiisoo.ic.system.bean.ImportAccountErrorBean; import com.kiisoo.ic.system.bean.PrivilageUserBean; import com.kiisoo.ic.system.entity.PrivilageAccountDO; +import com.kiisoo.ic.system.entity.PrivilageRoleDO; import com.kiisoo.ic.system.entity.PrivilageUserDO; import com.kiisoo.ic.system.enums.AccountEnum; +import com.kiisoo.ic.system.mapper.PrivilageRoleDOMapper; import com.kiisoo.ic.system.mapper.PrivilageUserDOMapper; import com.kiisoo.ic.system.service.PrivilageAccountService; import com.kiisoo.ic.system.service.PrivilageRoleService; import com.kiisoo.ic.system.service.PrivilageUserRoleService; import com.kiisoo.ic.system.service.PrivilageUserService; +import org.apache.commons.lang3.StringUtils; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.poi.ss.usermodel.*; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; -import java.util.ArrayList; -import java.util.List; +import javax.management.relation.Role; +import java.io.IOException; +import java.io.InputStream; +import java.lang.reflect.InvocationTargetException; +import java.math.BigDecimal; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; /** @@ -55,6 +69,8 @@ public class PoiStoreStaffService { private PrivilageUserRoleService privilageUserRoleService; @Autowired private QrCodeService qrCodeService; + @Autowired + private PrivilageRoleDOMapper privilageRoleDOMapper; /** * 根据条件查询导购信息 * @@ -174,4 +190,248 @@ public class PoiStoreStaffService { return qrCodeService.getQrCode(qrCodeDO); } + /** + * 批量上传推广人员 + * @param files + * @return + */ + public List uploadStaff(MultipartFile[] files) throws IOException, InvocationTargetException, IllegalAccessException { + //错误list + List errorBeanList = new ArrayList<>(); + //商品VOList + List poiStoreStaffVOList = new ArrayList<>(); + if (files == null || files.length == 0) { + ImportAccountErrorBean errorBean = new ImportAccountErrorBean(); + errorBean.setError("文件上传异常"); + errorBeanList.add(errorBean); + return errorBeanList; + } + for(MultipartFile file : files){ + if (file.isEmpty()) { + continue; + } + String sourceName = file.getOriginalFilename(); + InputStream fileInput = file.getInputStream(); + Workbook book; + if (isExcel2007(sourceName)) { + book = new XSSFWorkbook(fileInput); + } else { + book = new HSSFWorkbook(fileInput); + } + // 第一个sheet + Sheet sheet = book.getSheetAt(0); + // 行数 + int totalRows = sheet.getPhysicalNumberOfRows(); + if(totalRows == 3){ + ImportAccountErrorBean errorBean = new ImportAccountErrorBean(); + errorBean.setError("文件内没有人员信息"); + errorBeanList.add(errorBean); + return errorBeanList; + } + for (int r = 3; r < totalRows; r++) { + Row row = sheet.getRow(r); + if (row == null) { + continue; + } + //检查必填项为空,并插入goodsVOList + PoiStoreStaffVO poiStoreStaffVO = checkStaffExcelBlank(row, r, errorBeanList); + poiStoreStaffVOList.add(poiStoreStaffVO); + } + //检查重复项 查询条件 + checkRepeat(poiStoreStaffVOList, errorBeanList); + + //插表 + if(errorBeanList.size() == 0){ + + } + errorBeanList.sort(Comparator.comparing(ImportAccountErrorBean::getRow)); + } + return errorBeanList; + + + } + + /** + * 检查项 + * @param poiStoreStaffVOList 人员VOList + * @param errorBeanList 错误List + */ + public void checkRepeat(List poiStoreStaffVOList, List errorBeanList){ + //表格内重复 + for(int i=0;i { + //查询是否存在 + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("staffCode", staff.getStaffCode()); + PoiStoreStaff poiStoreStaff = poiStoreStaffDOMapper.selectOne(wrapper); + if(poiStoreStaff != null){ + ImportAccountErrorBean errorBean = new ImportAccountErrorBean(); + errorBean.setError("第" + rowNum.get() +"行工号,与数据库内有重复"); + errorBean.setRow(rowNum.get()); + errorBeanList.add(errorBean); + } + //判断手机号 + if(StringUtils.isNoneBlank(staff.getMobil())){ + if(!isPhone(staff.getMobil())){ + ImportAccountErrorBean errorBean = new ImportAccountErrorBean(); + errorBean.setError("第" + rowNum.get() +"行手机号不正确"); + errorBean.setRow(rowNum.get()); + errorBeanList.add(errorBean); + } + } + //查询店铺 + if(StringUtils.isNoneBlank(staff.getStoreName())&&StringUtils.isNoneBlank(staff.getStaffCode())){ + QueryWrapper wrapperStore = new QueryWrapper<>(); + wrapperStore.eq("name",staff.getStoreName()).eq("code",staff.getStoreCode()).last("limit 1"); + PoiStore shop = poiStoreDOMapper.selectOne(wrapperStore); + if(shop!=null){ + staff.setStoreId(shop.getId()); + }else{ + ImportAccountErrorBean errorBean = new ImportAccountErrorBean(); + errorBean.setError("第" + rowNum.get() +"行店铺不存在"); + errorBean.setRow(rowNum.get()); + errorBeanList.add(errorBean); + } + } + //查询角色 + if(StringUtils.isNoneBlank(staff.getRole())){ + QueryWrapper wrapperRole = new QueryWrapper<>(); + wrapperRole.eq("name",staff.getRole()).last("limit 1"); + PrivilageRoleDO role = privilageRoleDOMapper.selectOne(wrapperRole); + if(role!=null){ + staff.setRoleId(role.getId()); + }else{ + ImportAccountErrorBean errorBean = new ImportAccountErrorBean(); + errorBean.setError("第" + rowNum.get() +"行角色不存在"); + errorBean.setRow(rowNum.get()); + errorBeanList.add(errorBean); + } + } + rowNum.incrementAndGet(); + }); + + } + + /** + * 检查excel字段为空 + * @param row 行 + * @param r 行数 + * @param errorBeanList 错误List + * @return + * @throws InvocationTargetException 异常 + * @throws IllegalAccessException 异常 + */ + private PoiStoreStaffVO checkStaffExcelBlank(Row row, int r, List errorBeanList) throws InvocationTargetException, IllegalAccessException { + PoiStoreStaffVO poiStoreStaffVO = new PoiStoreStaffVO(); + //所有列(跟下面的属性对上) + String cellNames = "推广人员姓名,工号,手机号,所属店铺,店铺编号,角色"; + List paramList = Arrays.asList("name","staffCode","mobil","storeName","storeCode","role"); + String[] cellNameArr = cellNames.split(","); + //必填列 + String mustCellNames = "推广人员姓名,工号,所属店铺,店铺编号,角色"; + Map mustCellMap = Arrays.stream(mustCellNames.split(",")).collect(Collectors.toMap(name -> name, name -> name)); + //必填但空List + List blankNameList = new ArrayList<>(); + for(int i=0;i