From faf60dd3e584b1dd00a801dd4af15d4436595584 Mon Sep 17 00:00:00 2001 From: nies Date: Wed, 15 Sep 2021 16:28:37 +0800 Subject: [PATCH 1/4] =?UTF-8?q?orderNo=E7=94=9F=E6=88=90=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?redis=E9=94=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serviceimpl/base/SynchronizedService.java | 92 ++++++++++++---------- .../serviceimpl/busi/TestSynchronizedService.java | 67 ++++++++++++++++ 2 files changed, 119 insertions(+), 40 deletions(-) create mode 100644 modules/i3plus-core-apiservice/src/test/java/test/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestSynchronizedService.java diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SynchronizedService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SynchronizedService.java index 21b9d22..87fd5d2 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SynchronizedService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SynchronizedService.java @@ -12,6 +12,7 @@ import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; import cn.estsh.impp.framework.boot.util.ImppRedis; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.math.NumberUtils; +import org.redisson.api.RLock; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.amqp.rabbit.core.RabbitTemplate; @@ -67,43 +68,47 @@ public class SynchronizedService implements ISynchronizedService { @Override public synchronized List nextOrderNo(String code, int num) { //先拿规则 - SysOrderNoRule codeRole = sysOrderNoRuleService.getSysOrderNoRuleByCode(code); - if (codeRole == null) { - throw ImppExceptionBuilder.newInstance() - .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) - .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode()) - .setErrorDetail("[" + code + "]规则代码不存在存在") - .setErrorSolution("请重新输入规则代码") - .build(); - } else if (codeRole.getOrderNoRuleStatus() == CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) { - throw ImppExceptionBuilder.newInstance() - .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) - .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) - .setErrorDetail("[" + code + "]单号规则已禁用") - .setErrorSolution("请重新输入规则代码") - .build(); - } - - sysOrderNoRuleService.detachSysOrderNoRule(codeRole); - - String orderNoTemplate = OrderNoMakeUtil.getOrderNoTemplate(codeRole); - String redisKey = REDIS_PREFIX_LOCK_GET_ORDER_NO + ":" + code + ":" + orderNoTemplate; - - long orginSerialNo = codeRole.getSerialNo(); - if (codeRole.getSerialNo() < 0 || OrderNoMakeUtil.isCycleByPrefix(codeRole, orderNoTemplate)) { - orginSerialNo = 0; - } - long incr = codeRole.getSerialNoIncrement() * num; - - //缓存增加 - //先判断redis是否存在,如果不存在,则用默认初始值+步长*数量,如果存在,则添加步长 * 数量 - codeRole.setSerialNo(redisRes.putObjAdditional(redisKey, orginSerialNo, incr) - incr); - - // 设置缓存有效期 - redisRes.expire(redisKey, PlatformConstWords.REDIS_EXPIRE_SECONDS); - - // 生成单号更缓存 - List orderNoRuleList = sysOrderNoRuleService.doGetSysOrderNoRuleByNum(codeRole, orderNoTemplate, num); + String lockKey = CommonConstWords.REDIS_PREFIX_LOCK_GET_ORDER_NO + ":" + "LOCK" + ":" + code; + RLock rLock = (RLock) redisRes.getLock(lockKey); + rLock.lock(); + try { + SysOrderNoRule codeRole = sysOrderNoRuleService.getSysOrderNoRuleByCode(code); + if (codeRole == null) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode()) + .setErrorDetail("[" + code + "]规则代码不存在存在") + .setErrorSolution("请重新输入规则代码") + .build(); + } else if (codeRole.getOrderNoRuleStatus() == CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("[" + code + "]单号规则已禁用") + .setErrorSolution("请重新输入规则代码") + .build(); + } + + sysOrderNoRuleService.detachSysOrderNoRule(codeRole); + + String orderNoTemplate = OrderNoMakeUtil.getOrderNoTemplate(codeRole); + String redisKey = REDIS_PREFIX_LOCK_GET_ORDER_NO + ":" + code + ":" + orderNoTemplate; + + long orginSerialNo = codeRole.getSerialNo(); + if (codeRole.getSerialNo() < 0 || OrderNoMakeUtil.isCycleByPrefix(codeRole, orderNoTemplate)) { + orginSerialNo = 0; + } + long incr = codeRole.getSerialNoIncrement() * num; + + //缓存增加 + //先判断redis是否存在,如果不存在,则用默认初始值+步长*数量,如果存在,则添加步长 * 数量 + codeRole.setSerialNo(redisRes.putObjAdditional(redisKey, orginSerialNo, incr) - incr); + + // 设置缓存有效期 + redisRes.expire(redisKey, PlatformConstWords.REDIS_EXPIRE_SECONDS); + + // 生成单号更缓存 + List orderNoRuleList = sysOrderNoRuleService.doGetSysOrderNoRuleByNum(codeRole, orderNoTemplate, num); // FIXME 松下推送量太大并且该记录无意义 先注释 // try { @@ -112,8 +117,15 @@ public class SynchronizedService implements ISynchronizedService { // LOGGER.error("单号记录推送异常", e); // } - // 生成单号更缓存 - return orderNoRuleList; + // 生成单号更缓存 + return orderNoRuleList; + } catch (Exception e) { + LOGGER.error("生成单号失败,单号代码:{},num:{}", code, num, e); + } finally { + if (rLock.isHeldByCurrentThread()) { + rLock.unlock(); + } + } + return null; } - } diff --git a/modules/i3plus-core-apiservice/src/test/java/test/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestSynchronizedService.java b/modules/i3plus-core-apiservice/src/test/java/test/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestSynchronizedService.java new file mode 100644 index 0000000..2b7a578 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/test/java/test/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestSynchronizedService.java @@ -0,0 +1,67 @@ +package test.cn.estsh.i3plus.core.apiservice.serviceimpl.busi; + +import cn.estsh.i3plus.core.api.iservice.base.ISynchronizedService; +import cn.estsh.i3plus.core.apiservice.serviceimpl.base.SynchronizedService; +import cn.estsh.i3plus.platform.common.util.CommonConstWords; +import cn.estsh.i3plus.pojo.platform.bean.SysOrderNoRule; +import cn.estsh.impp.framework.boot.util.ImppRedis; +import cn.estsh.impp.framework.run.ImppGo; + +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.context.testng.AbstractTestNGSpringContextTests; +import org.springframework.util.ObjectUtils; +import org.testng.TestRunner; +import org.testng.annotations.Test; + +import javax.annotation.Resource; +import java.util.Random; + +/** + * @author ns + * 测试生成orderNo是否重复 + * @create 2021/9/15 0015 下午 13:46 + */ +@RunWith(SpringRunner.class) +@SpringBootTest(classes = ImppGo.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +public class TestSynchronizedService extends AbstractTestNGSpringContextTests { + + @Autowired + private ISynchronizedService synchronizedService; + + @Resource(name = CommonConstWords.IMPP_REDIS_RES) + private ImppRedis resRedis; + + public static String orderNoKey = CommonConstWords.REDIS_PREFIX_LOCK_GET_ORDER_NO + ":" + "LOCK" + ":" + "PO_ORDER_NO" + ":" + "ORDERNO"; + public static String serialNoKey = CommonConstWords.REDIS_PREFIX_LOCK_GET_ORDER_NO + ":" + "LOCK" + ":" + "PO_ORDER_NO" + ":" + "SERIALNO"; + + + @Test(threadPoolSize = 5) + public void getOrderNo() { + while (true) { + try { + SysOrderNoRule sysOrderNoRule = synchronizedService.nextOrderNo("PO_ORDER_NO"); + System.out.println(sysOrderNoRule); + System.out.println(sysOrderNoRule.getOrderNo()); + System.out.println(sysOrderNoRule.getSerialNo()); + if (!ObjectUtils.isEmpty(resRedis.getHash(orderNoKey + ":ORDERNO" ,sysOrderNoRule.getOrderNo()))){ + throw new Exception("订单号重复"); + }else{ + resRedis.putHash(orderNoKey + ":ORDERNO",sysOrderNoRule.getOrderNo(), System.currentTimeMillis()); + } + if (!ObjectUtils.isEmpty(resRedis.getHash(orderNoKey + ":SERIALNO", String.valueOf(sysOrderNoRule.getSerialNo())))){ + throw new Exception("订单号重复"); + }else { + resRedis.putHash(orderNoKey + ":SERIALNO", String.valueOf(sysOrderNoRule.getSerialNo()), System.currentTimeMillis()); + } + Thread.sleep(new Random().nextInt(20)); + } catch (InterruptedException e) { + e.printStackTrace(); + } catch (Exception e) { + e.printStackTrace(); + } + } + } +} From 082bcf994a72c3bc4a5c5cd7492827facdbff351 Mon Sep 17 00:00:00 2001 From: nies Date: Fri, 17 Sep 2021 11:01:17 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E4=BA=BA=E5=91=98=E5=AF=BC=E5=85=A5?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0redis=E9=94=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/busi/SysUserInfoController.java | 222 +++++++++++++++------ modules/logs/2021-09/i3core-2021-09-15-1.log.gz | Bin 0 -> 558 bytes 2 files changed, 158 insertions(+), 64 deletions(-) create mode 100644 modules/logs/2021-09/i3core-2021-09-15-1.log.gz diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysUserInfoController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysUserInfoController.java index 6b5dcaf..c87bd39 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysUserInfoController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysUserInfoController.java @@ -31,6 +31,7 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiOperation; import org.apache.commons.io.FileUtils; +import org.redisson.api.RLock; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -48,6 +49,7 @@ import java.io.*; import java.net.URLEncoder; import java.nio.file.attribute.PosixFileAttributes; import java.util.*; +import java.util.concurrent.TimeUnit; import java.util.function.Function; import java.util.stream.Collectors; @@ -520,83 +522,174 @@ public class SysUserInfoController extends CoreBaseController { @PostMapping("/import") @ApiOperation(value = "导用入户信息", notes = "导入用户信息") public ResultBean importUserInfo(@RequestParam MultipartFile file) { - ExcelTool excelTool = new ExcelTool(entityManager, redisRes); - + String lockKey = "REDISLOCK:IMPP:IMPORT_USER:" + AuthUtil.getSessionUser().getUserId(); + RLock rLock = (RLock) redisRes.getLock(lockKey); try { - //1.读取数据 - List importModelList = excelTool.importDataAndConver(file.getOriginalFilename(), file.getInputStream(), UserInfoImportModel.class, UserInfoImportModel.class.getSimpleName()); - List faildList = new ArrayList<>(); - LOGGER.debug("导入用户信息: 共读取数据{}条", importModelList.size()); - if (ObjectUtils.isEmpty(importModelList)) { - return ResultBean.success(); - } - //2.数据格式校验并去重 - List userInfoList = validateAndDistinc(importModelList, faildList); - - //3.某些数据字段转换 - SysPosition positionBean = new SysPosition(); - String organizationCode = AuthUtil.getOrganizeCode(); - positionBean.setOrganizeCode(organizationCode); - List positionList = positionService.findAllByBaseBean(positionBean); - - Map positionMap = positionList.stream().collect(Collectors.toMap(position -> position.getPositionCode(), position -> String.valueOf(position.getId()), (oldKey, newkey) -> oldKey)); - - SysDepartment departmentBean = new SysDepartment(); - departmentBean.setOrganizeCode(organizationCode); - List departmentList = departmentService.findAllByBaseBean(departmentBean); - //部门树 - List departmentTree = new ArrayList<>(); - //部门id的映射 - Map parentMap = departmentList.stream().collect(Collectors.toMap(el -> el.getId(), Function.identity())); - //构造全部部门的部门树 - departmentList.forEach(el -> { - if (!ObjectUtils.isEmpty(el.getParentId())) { - if (CommonEnumUtil.PARENT.DEFAULT.getValue().longValue() == el.getParentId().longValue()) { - departmentTree.add(el); - } else { - SysDepartment parentSys = parentMap.get(el.getParentId()); - if (!ObjectUtils.isEmpty(parentSys)) { - if (null == parentSys.getChildList()) { - parentSys.setChildList(new ArrayList<>()); + if (rLock.tryLock(0, TimeUnit.MINUTES)) { + ExcelTool excelTool = new ExcelTool(entityManager, redisRes); + //1.读取数据 + List importModelList = excelTool.importDataAndConver(file.getOriginalFilename(), file.getInputStream(), UserInfoImportModel.class, UserInfoImportModel.class.getSimpleName()); + List faildList = new ArrayList<>(); + LOGGER.debug("导入用户信息: 共读取数据{}条", importModelList.size()); + if (ObjectUtils.isEmpty(importModelList)) { + return ResultBean.success(); + } + //2.数据格式校验并去重 + List userInfoList = validateAndDistinc(importModelList, faildList); + + //3.某些数据字段转换 + SysPosition positionBean = new SysPosition(); + String organizationCode = AuthUtil.getOrganizeCode(); + positionBean.setOrganizeCode(organizationCode); + List positionList = positionService.findAllByBaseBean(positionBean); + + Map positionMap = positionList.stream().collect(Collectors.toMap(position -> position.getPositionCode(), position -> String.valueOf(position.getId()), (oldKey, newkey) -> oldKey)); + + SysDepartment departmentBean = new SysDepartment(); + departmentBean.setOrganizeCode(organizationCode); + List departmentList = departmentService.findAllByBaseBean(departmentBean); + //部门树 + List departmentTree = new ArrayList<>(); + //部门id的映射 + Map parentMap = departmentList.stream().collect(Collectors.toMap(el -> el.getId(), Function.identity())); + //构造全部部门的部门树 + departmentList.forEach(el -> { + if (!ObjectUtils.isEmpty(el.getParentId())) { + if (CommonEnumUtil.PARENT.DEFAULT.getValue().longValue() == el.getParentId().longValue()) { + departmentTree.add(el); + } else { + SysDepartment parentSys = parentMap.get(el.getParentId()); + if (!ObjectUtils.isEmpty(parentSys)) { + if (null == parentSys.getChildList()) { + parentSys.setChildList(new ArrayList<>()); + } + parentSys.getChildList().add(el); } - parentSys.getChildList().add(el); } } - } - }); + }); // SysRole roleBean = new SysRole(); // roleBean.setOrganizeCode(organizationCode); - List roleList = sysRoleService.findAll(); - Map roleMap = roleList.stream().collect(Collectors.toMap(sysRole -> sysRole.getName(), sysRole -> String.valueOf(sysRole.getId()), (oldKey, newkey) -> oldKey)); - - List successList = new ArrayList<>(); - //4.插入数据 - for (int i = 0; i < userInfoList.size(); i++) { - UserInfoImportModel el = userInfoList.get(i); - ResultBean resultBean = converImportData(el, departmentTree, positionMap, roleMap); - if (ObjectUtils.isEmpty(resultBean) || !resultBean.success) { - faildList.add(resultBean); - continue; - } - resultBean = personnelController.insertUserDetailModel(resultBean.getResultObject()); - if (ObjectUtils.isEmpty(resultBean) || !resultBean.success) { - faildList.add(resultBean); - continue; + List roleList = sysRoleService.findAll(); + Map roleMap = roleList.stream().collect(Collectors.toMap(sysRole -> sysRole.getName(), sysRole -> String.valueOf(sysRole.getId()), (oldKey, newkey) -> oldKey)); + + List successList = new ArrayList<>(); + //4.插入数据 + for (int i = 0; i < userInfoList.size(); i++) { + UserInfoImportModel el = userInfoList.get(i); + ResultBean resultBean = converImportData(el, departmentTree, positionMap, roleMap); + if (ObjectUtils.isEmpty(resultBean) || !resultBean.success) { + faildList.add(resultBean); + continue; + } + resultBean = personnelController.insertUserDetailModel(resultBean.getResultObject()); + if (ObjectUtils.isEmpty(resultBean) || !resultBean.success) { + faildList.add(resultBean); + continue; + } + successList.add(resultBean); } - successList.add(resultBean); - } - Map resultMap = new HashMap<>(); - resultMap.put("total", importModelList.size()); - resultMap.put("success", successList.size()); - resultMap.put("fail", faildList.size()); + Map resultMap = new HashMap<>(); + resultMap.put("total", importModelList.size()); + resultMap.put("success", successList.size()); + resultMap.put("fail", faildList.size()); // resultMap.put("successList", successList); - resultMap.put("failList", faildList); - return new ResultBean().setSuccess(true).setResultMap(resultMap).build(); + resultMap.put("failList", faildList); + return new ResultBean().setSuccess(true).setResultMap(resultMap).build(); + } + return ResultBean.fail("当前账号有正在上传的任务进行,请等待上传完毕"); + + } catch (InterruptedException e) { + LOGGER.error("导入人员数据出错", e); + return ResultBean.fail(e); } catch (ImppBusiException busExcep) { + LOGGER.error("导入人员数据出错", busExcep); return ResultBean.fail(busExcep); } catch (Exception e) { + LOGGER.error("导入人员数据出错", e); return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + }finally{ + if(rLock.isHeldByCurrentThread()){ + rLock.unlock(); + } } + + +// try { +// //1.读取数据 +// List importModelList = excelTool.importDataAndConver(file.getOriginalFilename(), file.getInputStream(), UserInfoImportModel.class, UserInfoImportModel.class.getSimpleName()); +// List faildList = new ArrayList<>(); +// LOGGER.debug("导入用户信息: 共读取数据{}条", importModelList.size()); +// if (ObjectUtils.isEmpty(importModelList)) { +// return ResultBean.success(); +// } +// //2.数据格式校验并去重 +// List userInfoList = validateAndDistinc(importModelList, faildList); +// +// //3.某些数据字段转换 +// SysPosition positionBean = new SysPosition(); +// String organizationCode = AuthUtil.getOrganizeCode(); +// positionBean.setOrganizeCode(organizationCode); +// List positionList = positionService.findAllByBaseBean(positionBean); +// +// Map positionMap = positionList.stream().collect(Collectors.toMap(position -> position.getPositionCode(), position -> String.valueOf(position.getId()), (oldKey, newkey) -> oldKey)); +// +// SysDepartment departmentBean = new SysDepartment(); +// departmentBean.setOrganizeCode(organizationCode); +// List departmentList = departmentService.findAllByBaseBean(departmentBean); +// //部门树 +// List departmentTree = new ArrayList<>(); +// //部门id的映射 +// Map parentMap = departmentList.stream().collect(Collectors.toMap(el -> el.getId(), Function.identity())); +// //构造全部部门的部门树 +// departmentList.forEach(el -> { +// if (!ObjectUtils.isEmpty(el.getParentId())) { +// if (CommonEnumUtil.PARENT.DEFAULT.getValue().longValue() == el.getParentId().longValue()) { +// departmentTree.add(el); +// } else { +// SysDepartment parentSys = parentMap.get(el.getParentId()); +// if (!ObjectUtils.isEmpty(parentSys)) { +// if (null == parentSys.getChildList()) { +// parentSys.setChildList(new ArrayList<>()); +// } +// parentSys.getChildList().add(el); +// } +// } +// } +// }); +//// SysRole roleBean = new SysRole(); +//// roleBean.setOrganizeCode(organizationCode); +// List roleList = sysRoleService.findAll(); +// Map roleMap = roleList.stream().collect(Collectors.toMap(sysRole -> sysRole.getName(), sysRole -> String.valueOf(sysRole.getId()), (oldKey, newkey) -> oldKey)); +// +// List successList = new ArrayList<>(); +// //4.插入数据 +// for (int i = 0; i < userInfoList.size(); i++) { +// UserInfoImportModel el = userInfoList.get(i); +// ResultBean resultBean = converImportData(el, departmentTree, positionMap, roleMap); +// if (ObjectUtils.isEmpty(resultBean) || !resultBean.success) { +// faildList.add(resultBean); +// continue; +// } +// resultBean = personnelController.insertUserDetailModel(resultBean.getResultObject()); +// if (ObjectUtils.isEmpty(resultBean) || !resultBean.success) { +// faildList.add(resultBean); +// continue; +// } +// successList.add(resultBean); +// } +// Map resultMap = new HashMap<>(); +// resultMap.put("total", importModelList.size()); +// resultMap.put("success", successList.size()); +// resultMap.put("fail", faildList.size()); +//// resultMap.put("successList", successList); +// resultMap.put("failList", faildList); +// return new ResultBean().setSuccess(true).setResultMap(resultMap).build(); +// } catch (ImppBusiException busExcep) { +// return ResultBean.fail(busExcep); +// } catch (Exception e) { +// return ImppExceptionBuilder.newInstance().buildExceptionResult(e); +// } } @GetMapping("/find-position-ref-user") @@ -773,6 +866,7 @@ public class SysUserInfoController extends CoreBaseController { return ResultBean.success().setResultObject(userDetailModel).build(); } catch (Exception e) { + e.printStackTrace(); LOGGER.error("导入人员数据转换出错", e); return ResultBean.fail(e); } diff --git a/modules/logs/2021-09/i3core-2021-09-15-1.log.gz b/modules/logs/2021-09/i3core-2021-09-15-1.log.gz new file mode 100644 index 0000000000000000000000000000000000000000..2c2e7414d9866b5c9fd6a2f75fcceb5175f6637e GIT binary patch literal 558 zcmV+}0@3{+iwFP!000000Oggv@szu^}c5sq6 zskhX&9GA8KJx}yl1A0FkTnq--H`M0+7B*V3mQmbaD6a=B~}L8wHwsWZ?$osmEjw_ zQRdnek`{NCa4D7LRwzlPKR@S6R-&G2-H770p&R|y&x?>nL7G8pxv^UfCASD)zhDU~ z)NscH%vYa*I&+tAz$j%wRq$g`SPL}V6zl!V7xV%90i!3|KVK~;jCnA=;@|j=2ziBt zC1?F>48L4MrM9wk4JEW&t(CFPN~H|&tyMRo3+*=|-BPEDoFSJmF8Z{$rq{DDN~5s? z+a=~gmT0C<$o%e*aTlfCYnS_jJKLyjNjmwrg^|qva*5ICom_KSpqcGgef{}|i?i8i z#8?$EMuSTbEw~H;8&QkA!9KGZt?dq+Hmbn3bxG!X;7!vTU8vSB4jsz0@T!}DJMO~4 z?0%_E|HReV?Onmw_qHI-ViMBRkI6rwB=l*S()&_eWayYUkx6j+uk86@LW44?_!D6A9iXJ;AeamQ079D<>i_@% literal 0 HcmV?d00001 From e4aa9c48f2a92cf413a38b88360d5918269b6107 Mon Sep 17 00:00:00 2001 From: nies Date: Sun, 26 Sep 2021 14:07:44 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=BA=E5=91=98?= =?UTF-8?q?=E5=AF=BC=E5=85=A5=E5=B2=97=E4=BD=8D=E5=92=8C=E9=83=A8=E9=97=A8?= =?UTF-8?q?=E5=AD=97=E6=AE=B5=E7=9A=84=E6=98=A0=E5=B0=84=E5=85=B3=E7=B3=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/iservice/busi/ISysDepartmentService.java | 7 +++--- .../api/iservice/busi/ISysPositionService.java | 7 +++--- .../controller/busi/SysUserInfoController.java | 25 +++++++++++----------- .../serviceimpl/busi/SysDepartmentService.java | 7 +++--- .../serviceimpl/busi/SysPositionService.java | 7 +++--- 5 files changed, 27 insertions(+), 26 deletions(-) diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysDepartmentService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysDepartmentService.java index d2013f1..13b2816 100644 --- a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysDepartmentService.java +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysDepartmentService.java @@ -110,11 +110,10 @@ public interface ISysDepartmentService extends ICrudService { SysDepartment findSysDepartmentByDepartCodeAndOrganizedId(String departmentCode,Long organizeId); /** - * 根据sysDepartment查询所有符合条件的部门信息 - * @param sysDepartment + * 查询默认条件的部门信息 * @return */ - @ApiOperation(value = "根据sysDepartment查询所有符合条件的部门信息") - List findAllByBaseBean(SysDepartment sysDepartment); + @ApiOperation(value = "查询默认条件的部门信息") + List findAllByBaseBean(); } diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysPositionService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysPositionService.java index 32d5f82..e054f8d 100644 --- a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysPositionService.java +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysPositionService.java @@ -105,12 +105,11 @@ public interface ISysPositionService extends ICrudService { SysPosition findPositionByPositionCodeAndOrganizeId(String positionCode,String organizeCode); /** - * 查询符合条件的岗位信息 - * @param sysPosition bean + * 查询默认条件条件的岗位信息 * @return */ - @ApiOperation(value = "查询符合条件的岗位信息", notes = "根据SysPosition查询所有符合条件的岗位") - List findAllByBaseBean(SysPosition sysPosition); + @ApiOperation(value = "查询默认条件条件的岗位信息", notes = "查询默认条件条件的岗位信息") + List findAllByBaseBean(); /** * 根据岗位名称查询岗位信息 diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysUserInfoController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysUserInfoController.java index c87bd39..4c2d6db 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysUserInfoController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysUserInfoController.java @@ -488,9 +488,9 @@ public class SysUserInfoController extends CoreBaseController { ExcelTool excelTool = new ExcelTool(entityManager, redisRes); try { String filename = "userImportTemplate.xls"; - SysPosition positionBean = new SysPosition(); - positionBean.setOrganizeCode(AuthUtil.getOrganizeCode()); - List positionList = positionService.findAllByBaseBean(positionBean); +// SysPosition positionBean = new SysPosition(); +// positionBean.setOrganizeCode(AuthUtil.getOrganizeCode()); + List positionList = positionService.findAllByBaseBean(); Map positionMap = positionList.stream().collect(Collectors.toMap(position -> position.getPositionCode(), position -> position.getName(), (oldKey, newkey) -> oldKey)); Map> relatefildMap = new HashMap<>(); @@ -538,16 +538,17 @@ public class SysUserInfoController extends CoreBaseController { List userInfoList = validateAndDistinc(importModelList, faildList); //3.某些数据字段转换 - SysPosition positionBean = new SysPosition(); - String organizationCode = AuthUtil.getOrganizeCode(); - positionBean.setOrganizeCode(organizationCode); - List positionList = positionService.findAllByBaseBean(positionBean); +// SysPosition positionBean = new SysPosition(); +// String organizationCode = AuthUtil.getOrganizeCode(); +// positionBean.setOrganizeCode(organizationCode); + List positionList = positionService.findAllByBaseBean(); Map positionMap = positionList.stream().collect(Collectors.toMap(position -> position.getPositionCode(), position -> String.valueOf(position.getId()), (oldKey, newkey) -> oldKey)); - SysDepartment departmentBean = new SysDepartment(); - departmentBean.setOrganizeCode(organizationCode); - List departmentList = departmentService.findAllByBaseBean(departmentBean); +// SysDepartment departmentBean = new SysDepartment(); +// departmentBean.setOrganizeCode(organizationCode); +// List departmentList = departmentService.findAllByBaseBean(departmentBean); + List departmentList = departmentService.findAllByBaseBean(); //部门树 List departmentTree = new ArrayList<>(); //部门id的映射 @@ -608,8 +609,8 @@ public class SysUserInfoController extends CoreBaseController { } catch (Exception e) { LOGGER.error("导入人员数据出错", e); return ImppExceptionBuilder.newInstance().buildExceptionResult(e); - }finally{ - if(rLock.isHeldByCurrentThread()){ + } finally { + if (rLock.isHeldByCurrentThread()) { rLock.unlock(); } } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysDepartmentService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysDepartmentService.java index 6435d4c..95d9471 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysDepartmentService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysDepartmentService.java @@ -328,9 +328,10 @@ public class SysDepartmentService extends CrudService implements } @Override - public List findAllByBaseBean(SysDepartment sysDepartment) { - Example example = Example.of(sysDepartment); - return this.departmentRDao.findAll(example); + public List findAllByBaseBean() { +// Example example = Example.of(sysDepartment); + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(); + return this.departmentRDao.findByHqlWhere(ddlPackBean); } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysPositionService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysPositionService.java index 473d462..051701f 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysPositionService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysPositionService.java @@ -127,9 +127,10 @@ public class SysPositionService extends CrudService implements ISys } @Override - public List findAllByBaseBean(SysPosition sysPosition) { - Example example = Example.of(sysPosition); - return this.positionRDao.findAll(example); + public List findAllByBaseBean() { +// Example example = Example.of(sysPosition); + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(); + return this.positionRDao.findByHqlWhere(ddlPackBean); } @Override From aa396d1ac52a5e46ef35e4f4d4046baf58c71dd0 Mon Sep 17 00:00:00 2001 From: nies Date: Mon, 27 Sep 2021 11:50:06 +0800 Subject: [PATCH 4/4] =?UTF-8?q?mail=E5=B7=A5=E5=85=B7=E7=B1=BB=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0starttls=E7=9A=84=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../i3plus/core/apiservice/util/MailUtil.java | 37 +++++++++++++++------- 1 file changed, 25 insertions(+), 12 deletions(-) diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/util/MailUtil.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/util/MailUtil.java index 2f4cdcc..e0421f8 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/util/MailUtil.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/util/MailUtil.java @@ -12,6 +12,7 @@ import cn.estsh.impp.framework.boot.util.RedisCacheTool; import com.sun.mail.smtp.SMTPAddressFailedException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import javax.activation.DataHandler; @@ -38,6 +39,12 @@ import java.util.Properties; public class MailUtil { public static final Logger LOGGER = LoggerFactory.getLogger(MailUtil.class); + /** + * 开启starttls , 不然有些邮箱会报认证失败的错误,如outlook + */ + @Value("${mail.smtp.starttls.enable:false}") + private boolean smtpStarttlsEnabled; + // 收件人 private Address[] to = new Address[]{}; private Address[] cc = new Address[]{}; @@ -55,9 +62,9 @@ public class MailUtil { private boolean isAuthenticationSMTP = false; private final List attachmentList = new ArrayList<>(); - private static final int MAIL_SMTP_TIMEOUT =10000; - private static final int MAIL_SMTP_CONNECTIONTIMEOUT =10000; - private static final int MAIL_SMTP_WRITETIMEOUT =10000; + private static final int MAIL_SMTP_TIMEOUT = 10000; + private static final int MAIL_SMTP_CONNECTIONTIMEOUT = 10000; + private static final int MAIL_SMTP_WRITETIMEOUT = 10000; /** * 初始化服务器邮箱参数 @@ -206,7 +213,8 @@ public class MailUtil { /** * 添加附件 - * @param fileName 附件名 + * + * @param fileName 附件名 * @param attachmentByte * @throws MessagingException */ @@ -217,12 +225,13 @@ public class MailUtil { /** * 添加附件 - * @param fileName 附件名 + * + * @param fileName 附件名 * @param attachmentByte * @param contentType * @throws MessagingException */ - public void addAttachment(String fileName, byte[] attachmentByte,String contentType) throws MessagingException { + public void addAttachment(String fileName, byte[] attachmentByte, String contentType) throws MessagingException { BodyPart attachmentBodyPart = new MimeBodyPart(); DataSource source = new ByteArrayDataSource(attachmentByte, contentType); attachmentBodyPart.setDataHandler(new DataHandler(source)); @@ -232,6 +241,7 @@ public class MailUtil { /** * 添加附件 + * * @param attachment 附件对象 * @throws MessagingException */ @@ -243,7 +253,7 @@ public class MailUtil { attachmentList.add(attachmentBodyPart); } - public void cleanAttachmentList(){ + public void cleanAttachmentList() { attachmentList.clear(); } @@ -267,6 +277,9 @@ public class MailUtil { if (this.isAuthenticationSMTP) { server.put("mail.smtp.auth", "true"); } + if (smtpStarttlsEnabled) { + server.put("mail.smtp.starttls.enable", "true"); + } Session conn = Session.getInstance(server, null); @@ -323,7 +336,7 @@ public class MailUtil { LOGGER.info("邮件发送成功"); } catch (SMTPAddressFailedException e) { - LOGGER.error("邮件发送异常",e); + LOGGER.error("邮件发送异常", e); throw ImppExceptionBuilder.newInstance() .setSystemID(CommonEnumUtil.SOFT_TYPE.IMPP.getCode()) .setErrorCode(ImppExceptionEnum.MAIL_RECIPIENT_NOT_EXIST.getCode()) @@ -331,7 +344,7 @@ public class MailUtil { .setErrorSolution("请重新设置收件人") .build(); } catch (AuthenticationFailedException e) { - LOGGER.error("邮件发送异常",e); + LOGGER.error("邮件发送异常", e); throw ImppExceptionBuilder.newInstance() .setSystemID(CommonEnumUtil.SOFT_TYPE.IMPP.getCode()) .setErrorCode(ImppExceptionEnum.MAIL_LOGIN_PASS_ERROR.getCode()) @@ -339,7 +352,7 @@ public class MailUtil { .setErrorSolution("请重新设置账号或密码") .build(); } catch (MessagingException e) { - LOGGER.error("邮件发送异常",e); + LOGGER.error("邮件发送异常", e); throw ImppExceptionBuilder.newInstance() .setSystemID(CommonEnumUtil.SOFT_TYPE.IMPP.getCode()) .setErrorCode(ImppExceptionEnum.MAIL_SERVER_CONFIG_ERROR.getCode()) @@ -347,7 +360,7 @@ public class MailUtil { .setErrorSolution("请重新设置邮件服务器地址或端口") .build(); } catch (UnsupportedEncodingException e) { - LOGGER.error("邮件发送异常",e); + LOGGER.error("邮件发送异常", e); throw ImppExceptionBuilder.newInstance() .setSystemID(CommonEnumUtil.SOFT_TYPE.IMPP.getCode()) .setErrorCode(ImppExceptionEnum.MAIL_SERVER_CONFIG_ERROR.getCode()) @@ -355,7 +368,7 @@ public class MailUtil { .setErrorSolution("请重新设置邮件服务器地址或端口") .build(); } catch (Exception e) { - LOGGER.error("邮件发送异常",e); + LOGGER.error("邮件发送异常", e); throw ImppExceptionBuilder.newInstance() .setSystemID(CommonEnumUtil.SOFT_TYPE.IMPP.getCode()) .setErrorCode(ImppExceptionEnum.MAIL_SERVER_CONFIG_ERROR.getCode())