diff --git a/src/main/java/com/qs/serve/modules/bms/controller/BmsSupplierController.java b/src/main/java/com/qs/serve/modules/bms/controller/BmsSupplierController.java index 8b6bf8db..96a6fa1b 100644 --- a/src/main/java/com/qs/serve/modules/bms/controller/BmsSupplierController.java +++ b/src/main/java/com/qs/serve/modules/bms/controller/BmsSupplierController.java @@ -842,6 +842,360 @@ public class BmsSupplierController { // @SysLog(module = SystemModule.BASE, title = "供应商", biz = BizType.INSERT) @PreAuthorize("hasRole('bms:supplier:insert')") public R importExcel(@RequestBody List param){ + param.forEach(a->{ + a.setErrorInfo(""); + if(a.getType().equals("4")){ + return; + } + if(!StringUtils.hasText(a.getCustomerCode())){ + a.setErrorInfo(a.getErrorInfo()+"客户编号不能为空;"); + } + if(!StringUtils.hasText(a.getCustomerName())){ + a.setErrorInfo(a.getErrorInfo()+"客户名称不能为空;"); + } + if(!StringUtils.hasText(a.getSalesRegionName())){ + a.setErrorInfo(a.getErrorInfo()+"销售区域不能为空;"); + } + if(!StringUtils.hasText(a.getFirstLevelAdministrativeRegionName())){ + a.setErrorInfo(a.getErrorInfo()+"省不能为空;"); + } + if(!StringUtils.hasText(a.getSecondaryLevelAdministrativeRegionName())){ + a.setErrorInfo(a.getErrorInfo()+"市不能为空;"); + } + if(!StringUtils.hasText(a.getAdministrativeRegionName())){ + a.setErrorInfo(a.getErrorInfo()+"行政区域不能为空;"); + } + if(a.getIsSupplier()==null){ + a.setErrorInfo(a.getErrorInfo()+"是否供应商字段不能为空;"); + } + if(!StringUtils.hasText(a.getMinorHeadCodes()) && !StringUtils.hasText(a.getMainHeadCode())){ + a.setErrorInfo(a.getErrorInfo()+"负责人不能为空;"); + } + if(a.getIsExpendableExpense()==null){ + a.setErrorInfo(a.getErrorInfo()+"是否投放费用字段不能为空;"); + } +// if(a.getCloseAccountStatus()==null){ +// a.setErrorInfo(a.getErrorInfo()+"闭户状态不能为空;"); +// } + }); + List saveList = param.stream().filter(a->a.getType().equals("1")).collect(Collectors.toList()); + List updateList = param.stream().filter(a->a.getType().equals("2")).collect(Collectors.toList()); + List deleteList = param.stream().filter(a->a.getType().equals("3")).collect(Collectors.toList()); + + /** --------------------------------------------------------------------------- **/ + List bmsRegionNames = new ArrayList<>(); + bmsRegionNames.addAll( + saveList.stream().filter(a->a.getSalesRegionName()!=null) + .map(a->a.getSalesRegionName()).collect(Collectors.toList()) + ); + bmsRegionNames.addAll( + updateList.stream().filter(a->a.getSalesRegionName()!=null) + .map(a->a.getSalesRegionName()).collect(Collectors.toList()) + ); + bmsRegionNames = bmsRegionNames.stream().distinct().collect(Collectors.toList()); + List regionList = new ArrayList<>(); + if(bmsRegionNames.size()>0){ + LambdaQueryWrapper bmsRegionLambdaQueryWrapper = new LambdaQueryWrapper<>(); + bmsRegionLambdaQueryWrapper.in(BmsRegion::getName,bmsRegionNames); + regionList = bmsRegionService.list(bmsRegionLambdaQueryWrapper); + List existBmsRegionName = regionList.stream().map(a->a.getName()).collect(Collectors.toList()); + if(regionList.size(){ + if(a.getType().equals("4")){ + return; + } + if(!existBmsRegionName.contains(a.getSalesRegionName())){ + a.setErrorInfo(a.getErrorInfo()+"不存在销售区域"+a.getSalesRegionName()+";"); + } + }); + + } + } + + List bmsBizRegionNames = new ArrayList<>(); + List bizRegionList = new ArrayList<>(); + + bmsBizRegionNames.addAll( + saveList.stream().filter(a->a.getSecondaryLevelAdministrativeRegionName()!=null + && a.getFirstLevelAdministrativeRegionName()!=null && a.getAdministrativeRegionName()!=null) + .map(a->a.getFirstLevelAdministrativeRegionName()+"_"+a.getSecondaryLevelAdministrativeRegionName()+"_"+a.getAdministrativeRegionName()).collect(Collectors.toList()) + ); + bmsBizRegionNames.addAll( + updateList.stream().filter(a->a.getSecondaryLevelAdministrativeRegionName()!=null + && a.getFirstLevelAdministrativeRegionName()!=null && a.getAdministrativeRegionName()!=null) + .map(a->a.getFirstLevelAdministrativeRegionName()+"_"+a.getSecondaryLevelAdministrativeRegionName()+"_"+a.getAdministrativeRegionName()).collect(Collectors.toList()) + ); + bmsBizRegionNames = bmsBizRegionNames.stream().distinct().collect(Collectors.toList()); + if(bmsBizRegionNames.size()>0){ + LambdaQueryWrapper bmsRegion2LambdaQueryWrapper = new LambdaQueryWrapper<>(); + bmsRegion2LambdaQueryWrapper.in(BmsRegion2::getPathNames,bmsBizRegionNames); + bizRegionList = bmsRegion2Service.list(bmsRegion2LambdaQueryWrapper); + List exsitBizRegeionName = bizRegionList.stream().map(a->a.getName()).collect(Collectors.toList()); + if(bizRegionList.size(){ + if(a.getType().equals("4")){ + return; + } + if(!exsitBizRegeionName.contains( + a.getFirstLevelAdministrativeRegionName()+"_"+a.getSecondaryLevelAdministrativeRegionName()+"_"+a.getAdministrativeRegionName()) + ){ + a.setErrorInfo(a.getErrorInfo()+"不存在行政区域"+a.getFirstLevelAdministrativeRegionName()+"_"+a.getSecondaryLevelAdministrativeRegionName()+"_"+a.getAdministrativeRegionName()+";"); + } + }); + } + } + /** ------------------------------- 校验负责人 ------------------------------------------------ */ + List userCodes = new ArrayList<>(); + userCodes.addAll( + saveList.stream().filter(a->StringUtils.hasText(a.getMainHeadCode())) + .map(a->Arrays.asList(a.getMainHeadCode().split(","))) + .flatMap(List::stream).collect(Collectors.toList()) + ); + userCodes.addAll( + saveList.stream().filter(a->StringUtils.hasText(a.getMinorHeadCodes())) + .map(a->Arrays.asList(a.getMinorHeadCodes().split(","))) + .flatMap(List::stream).collect(Collectors.toList()) + ); + List userList = new ArrayList<>(); + if(userCodes.size()>0){ + LambdaQueryWrapper sysUserLambdaQueryWrapper = new LambdaQueryWrapper<>(); + sysUserLambdaQueryWrapper.in(SysUser::getCode,userCodes); + userList = sysUserService.list(sysUserLambdaQueryWrapper); + List exsitUserCodes = userList.stream().map(a->a.getCode()).collect(Collectors.toList()); + if(userList.size(){ + if(a.getType().equals("4")){ + return; + } + if(a.getType().equals("3")){ + return; + } + List userCodeTemp = new ArrayList<>(); + if(StringUtils.hasText(a.getMainHeadCode())){ + userCodeTemp.addAll(Arrays.asList(a.getMainHeadCode().split(","))); + } + if(StringUtils.hasText(a.getMinorHeadCodes())){ + userCodeTemp.addAll(Arrays.asList(a.getMinorHeadCodes().split(","))); + } + List noExistUserCode = userCodeTemp.stream().filter(b->!exsitUserCodes.contains(b)).collect(Collectors.toList()); + if(noExistUserCode.size()>0){ + a.setErrorInfo(a.getErrorInfo()+"不存在人员"+noExistUserCode.stream().collect(Collectors.joining(","))); + } + }); + } + } + /** --------------------------------------------------------------------------- **/ + + /** --------------------------------------------------------------------------- **/ + /** ------------------------------- 校验新增 ------------------------------------------------ */ + if(saveList.size()>0){ + List saveCodes = saveList.stream().filter(a->StringUtils.hasText(a.getCustomerCode())).map(a->a.getCustomerCode()).distinct().collect(Collectors.toList()); + if(saveCodes.size()>0){ + LambdaQueryWrapper checkSave = new LambdaQueryWrapper<>(); + checkSave.in(BmsSupplier::getCode,saveCodes); + List checkSaveSupplier = bmsSupplierService.list(checkSave); + if(checkSaveSupplier.size()>0){ + List existSaveCodes = checkSaveSupplier.stream().map(a->a.getCode()).collect(Collectors.toList()); + param.forEach(a->{ + if(a.getType().equals("1")){ + if(existSaveCodes.contains(a.getCustomerCode())){ + a.setErrorInfo(a.getErrorInfo()+"已存在客户编码"); + } + } + }); + } + } + } + + + /** --------------------------------------------------------------------------- **/ + + /** ------------------------------- 校验更新 ------------------------------------------------ */ + if(updateList.size()>0){ + List updateCheckCodes = updateList.stream().filter(a->StringUtils.hasText(a.getCustomerCode())).map(a->a.getCustomerCode()).distinct().collect(Collectors.toList()); + if(updateCheckCodes.size()==0){ + param.forEach(a->{ + if(a.getType().equals("2")){ + a.setErrorInfo(a.getErrorInfo()+"更新不存在客户编码;"); + } + }); + + }else{ + LambdaQueryWrapper checkUpdateCustomerCode = new LambdaQueryWrapper<>(); + checkUpdateCustomerCode.in(BmsSupplier::getCode,updateCheckCodes); + List checkUpdateSupplierList = bmsSupplierService.list(checkUpdateCustomerCode); + List existUpdateCodes = checkUpdateSupplierList.stream().map(a->a.getCode()).collect(Collectors.toList()); + param.forEach(a->{ + if(a.getType().equals("2")){ + if(!existUpdateCodes.contains(a.getCustomerCode())){ + a.setErrorInfo(a.getErrorInfo()+"更新不存在客户编码;"); + } + } + }); + } + } + /** ----------------------------------------------------------------------------------- */ + + /** ------------------------------- 删除更新 ------------------------------------------------ */ + if(deleteList.size()>0){ + List deleteCheckCodes = deleteList.stream().map(a->a.getCustomerCode()).collect(Collectors.toList()); + if(deleteCheckCodes.size()==0){ + param.forEach(a->{ + if(a.getType().equals("3")){ + a.setErrorInfo(a.getErrorInfo()+"删除不存在客户编码"); + } + }); + }else{ + LambdaQueryWrapper checkDeleteCustomerCode = new LambdaQueryWrapper<>(); + checkDeleteCustomerCode.in(BmsSupplier::getCode,deleteCheckCodes); + List checkDeleteSupplierList = bmsSupplierService.list(checkDeleteCustomerCode); + List existDeleteCodes = checkDeleteSupplierList.stream().map(a->a.getCode()).collect(Collectors.toList()); + param.forEach(a->{ + if(a.getType().equals("3")){ + if(!existDeleteCodes.contains(a.getCustomerCode())){ + a.setErrorInfo(a.getErrorInfo()+"删除不存在客户编码;"); + } + } + }); + } + } + /** ----------------------------------------------------------------------------------- */ + + /** ------------------------------- 返回错误 ------------------------------------------- */ + if(param.stream().filter(a->a.getErrorInfo().length()>0).count()>0) { + return R.ok(param, "导入失败,请打开EXCEL查询错误详情!"); + } + /** ----------------------------------------------------------------------------------- */ + + Map bizRegionMap = bizRegionList.stream().collect(Collectors.toMap(BmsRegion2::getPathNames, a->a)); + Map saleRegionMap = regionList.stream().collect(Collectors.toMap(BmsRegion::getName, a->a)); + Map sysUserMap = userList.stream().collect(Collectors.toMap(SysUser::getCode, a->a)); + + /** ------------------------------- 保存新增 ------------------------------------------------ */ + if(saveList.size()>0) { + List saveBmsSuppliers = saveList.stream().map(a->{ + BmsSupplier supplier = new BmsSupplier(); + supplier.setName(a.getCustomerName()); + supplier.setCode(a.getCustomerCode()); + supplier.setStopFlag(a.getCloseAccountStatus()); + supplier.setStopFlagDate(a.getCloseAccountDate()); + supplier.setCooperatePauseFlag(a.getSuspendCooperationStatus()); + supplier.setCooperatePauseFlagDate(a.getSuspendCooperationDate()); + if(StringUtils.hasText(a.getMainHeadCode())){ + SysUser sysUser = sysUserMap.get(a.getMainHeadCode()); + supplier.setUserId(sysUser.getId()); + supplier.setUserCode(sysUser.getCode()); + supplier.setUserName(sysUser.getName()); + } + + if(StringUtils.hasText(a.getMinorHeadCodes())){ + List otherUserCodes = Arrays.asList(a.getMinorHeadCodes().split(",")); + List otherUserNames = new ArrayList<>(); + List otherUserIds = new ArrayList<>(); + otherUserCodes.forEach(b->{ + SysUser sysUser = sysUserMap.get(b); + otherUserNames.add(sysUser.getName()); + otherUserIds.add(sysUser.getId()); + }); + supplier.setOtherUserCodes(otherUserCodes.stream().collect(Collectors.joining(","))); + supplier.setOtherUserNames(otherUserNames.stream().collect(Collectors.joining(","))); + supplier.setOtherUserIds(otherUserIds.toArray(new String[otherUserIds.size()])); + } + + if(StringUtils.hasText(a.getSalesRegionName())){ + BmsRegion saleRegion = saleRegionMap.get(a.getSalesRegionName()); + supplier.setRegionLast(saleRegion.getId()); + supplier.setRegionSecond(saleRegion.getId()); + supplier.setRegionFirst(saleRegion.getPid()); + } + + if(StringUtils.hasText(a.getSecondaryLevelAdministrativeRegionName()) + && StringUtils.hasText(a.getFirstLevelAdministrativeRegionName()) + && StringUtils.hasText(a.getAdministrativeRegionName())){ + BmsRegion2 bizRegion = bizRegionMap.get(a.getFirstLevelAdministrativeRegionName()+"_"+a.getSecondaryLevelAdministrativeRegionName()+"_"+a.getAdministrativeRegionName()); + supplier.setRegion2Third(bizRegion.getId()); + supplier.setRegion2Second(bizRegion.getPid()); + String firstRegion2Id = bizRegion.getPathIds().split("_")[0]; + supplier.setRegion2First(firstRegion2Id); + supplier.setRegion2Last(bizRegion.getId()); + } + + return supplier; + }).collect(Collectors.toList()); + bmsSupplierService.saveBatch(saveBmsSuppliers); + } + /** ----------------------------------------------------------------------------------- */ + /** ------------------------------- 保存更新 ------------------------------------------------ */ + if(updateList.size()>0) { + LambdaQueryWrapper oriBmsLqw = new LambdaQueryWrapper<>(); + oriBmsLqw.in(BmsSupplier::getCode,updateList.stream().map(b->b.getCustomerCode()).collect(Collectors.toList())); + List oriBmsSuppliers = bmsSupplierService.list(oriBmsLqw); + Map codeToSupplierId = oriBmsSuppliers.stream().collect(Collectors.toMap(BmsSupplier::getCode, BmsSupplier::getId)); + + List updateBmsSuppliers = updateList.stream().map(a->{ + BmsSupplier supplier = new BmsSupplier(); + + supplier.setId(codeToSupplierId.get(a.getCustomerCode())); + supplier.setName(a.getCustomerName()); + supplier.setCode(a.getCustomerCode()); + supplier.setStopFlag(a.getCloseAccountStatus()); + supplier.setStopFlagDate(a.getCloseAccountDate()); + supplier.setCooperatePauseFlag(a.getSuspendCooperationStatus()); + supplier.setCooperatePauseFlagDate(a.getSuspendCooperationDate()); + if(StringUtils.hasText(a.getMainHeadCode())){ + SysUser sysUser = sysUserMap.get(a.getMainHeadCode()); + supplier.setUserId(sysUser.getId()); + supplier.setUserCode(sysUser.getCode()); + supplier.setUserName(sysUser.getName()); + } + + if(StringUtils.hasText(a.getMinorHeadCodes())){ + List otherUserCodes = Arrays.asList(a.getMinorHeadCodes().split(",")); + List otherUserNames = new ArrayList<>(); + List otherUserIds = new ArrayList<>(); + otherUserCodes.forEach(b->{ + SysUser sysUser = sysUserMap.get(b); + otherUserNames.add(sysUser.getName()); + otherUserIds.add(sysUser.getId()); + }); + supplier.setOtherUserCodes(otherUserCodes.stream().collect(Collectors.joining(","))); + supplier.setOtherUserNames(otherUserNames.stream().collect(Collectors.joining(","))); + supplier.setOtherUserIds(otherUserIds.toArray(new String[otherUserIds.size()])); + } + + if(StringUtils.hasText(a.getSalesRegionName())){ + BmsRegion saleRegion = saleRegionMap.get(a.getSalesRegionName()); + supplier.setRegionLast(saleRegion.getId()); + supplier.setRegionSecond(saleRegion.getId()); + supplier.setRegionFirst(saleRegion.getPid()); + } + + if(StringUtils.hasText(a.getSecondaryLevelAdministrativeRegionName()) + && StringUtils.hasText(a.getFirstLevelAdministrativeRegionName()) + && StringUtils.hasText(a.getAdministrativeRegionName())){ + BmsRegion2 bizRegion = bizRegionMap.get(a.getFirstLevelAdministrativeRegionName()+"_"+a.getSecondaryLevelAdministrativeRegionName()+"_"+a.getAdministrativeRegionName()); + supplier.setRegion2Third(bizRegion.getId()); + supplier.setRegion2Second(bizRegion.getPid()); + String firstRegion2Id = bizRegion.getPathIds().split("_")[0]; + supplier.setRegion2First(firstRegion2Id); + supplier.setRegion2Last(bizRegion.getId()); + } + + return supplier; + }).collect(Collectors.toList()); + bmsSupplierService.updateBatchById(updateBmsSuppliers); + } + /** ----------------------------------------------------------------------------------- */ + /** ------------------------------- 删除数据 ------------------------------------------------ */ + if(deleteList.size()>0) { + LambdaQueryWrapper oriBmsLqw = new LambdaQueryWrapper<>(); + oriBmsLqw.in(BmsSupplier::getCode,deleteList.stream().map(b->b.getCustomerCode()).collect(Collectors.toList())); + List oriBmsSuppliers = bmsSupplierService.list(oriBmsLqw); +// Map codeToSupplierId = oriBmsSuppliers.stream().collect(Collectors.toMap(BmsSupplier::getCode, BmsSupplier::getId)); + List deleteIds = oriBmsSuppliers.stream().map(a->a.getId()).collect(Collectors.toList()); + bmsSupplierService.removeBatchByIds(deleteIds); + } + /** ----------------------------------------------------------------------------------- */ return R.ok(); } diff --git a/src/main/java/com/qs/serve/modules/bms/entity/bo/BmsSupplierExcelBo.java b/src/main/java/com/qs/serve/modules/bms/entity/bo/BmsSupplierExcelBo.java index 26cb9ebe..7ad78ec0 100644 --- a/src/main/java/com/qs/serve/modules/bms/entity/bo/BmsSupplierExcelBo.java +++ b/src/main/java/com/qs/serve/modules/bms/entity/bo/BmsSupplierExcelBo.java @@ -22,6 +22,8 @@ public class BmsSupplierExcelBo { // 序号 private String id; + private String type; + // 客户名称 private String customerName;