diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/base/ISystemInitService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/base/ISystemInitService.java index 5615d16..381f6e5 100644 --- a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/base/ISystemInitService.java +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/base/ISystemInitService.java @@ -16,25 +16,25 @@ public interface ISystemInitService { * 系统初始化加载 */ @ApiOperation(value = "初始化加载所有数据",notes = "初始化加载所有数据") - void loadAll(); + void putAndLoadAll(); /** * 加载系统配置 */ @ApiOperation(value = "加载系统配置",notes = "加载系统配置") - void loadSysConfig(); + void putAndLoadSysConfig(); /** * 加载系统字典 */ @ApiOperation(value = "加载字典数据",notes = "加载字典数据") - void loadSysDictionary(); + void putAndLoadSysDictionary(); /** * 加载系统语言信息 */ @ApiOperation(value = "加载语言数据",notes = "加载语言数据") - void loadSysLocaleLanguage(); + void putAndLoadSysLocaleLanguage(); /** * 从缓存获取对象数据 diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysOrderNoRuleService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysOrderNoRuleService.java index 4f651c2..a177138 100644 --- a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysOrderNoRuleService.java +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysOrderNoRuleService.java @@ -61,7 +61,7 @@ public interface ISysOrderNoRuleService { * @return 单号信息 */ @ApiOperation(value = "根据code查询最新单号规则") - SysOrderNoRule getSysOrderNoRuleCode(String code); + SysOrderNoRule doGetSysOrderNoRuleCode(String code); /** * 根据id修改单号规则状态 diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ITestService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ITestService.java index e48c209..c7fcc10 100644 --- a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ITestService.java +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ITestService.java @@ -6,6 +6,7 @@ import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.platform.bean.SysUser; import io.swagger.annotations.ApiOperation; +import javax.transaction.Transactional; import java.util.List; /** @@ -25,4 +26,17 @@ public interface ITestService { @ApiOperation(value = "in条件封装查询") List querySysUserByPack(DdlPackBean packBean); + + @ApiOperation(value = "添加用户") + void insertSysUser(SysUser sysUser); + + @ApiOperation(value = "修改用户") + void updateSysUser(SysUser sysUser); + + @ApiOperation(value = "查询用户") + List listSysUser(); + + @ApiOperation(value = "读写分离测试写") + @Transactional + void write(); } diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ITestTransService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ITestTransService.java index f27306b..3d652cc 100644 --- a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ITestTransService.java +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ITestTransService.java @@ -1,6 +1,11 @@ package cn.estsh.i3plus.core.api.iservice.busi; +import cn.estsh.i3plus.pojo.platform.bean.TestTransUser; import io.swagger.annotations.ApiOperation; +import org.springframework.transaction.annotation.Isolation; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; /** * @Description : @@ -15,5 +20,106 @@ public interface ITestTransService { void testListTran(int type,String name); @ApiOperation(value = "自定义dao混用") - void testListTranSec(int type,String name); + void testTran(); + + /******************** 读写分离部分测试 **********************/ + + @ApiOperation(value = "读写分离测试读") + @Transactional + List listRead(); + + @ApiOperation(value = "读写分离测试写") + @Transactional + void write(); + + @ApiOperation(value = "读写分离测试读写-写事务") + void transReadWrite(); + + @ApiOperation(value = "读写分离测试读写-读事务") + void readWrite(); + + /******************** 事务机制部分demo **********************/ + + //@ApiOperation(value = "开始事务,执行过程中休眠seconds秒") + //void readTransTest(int seconds); + + //void testListTranSec(int type,String name); + + @ApiOperation(value = "更新对象") + void updateTestTransUser(String name, double salary); + + @ApiOperation(value = "新增对象") + void insertTestTransUser(String name,double salary); + + /** + * type == 1 按主键删除 + * type == 2 按name删除 + */ + @ApiOperation(value = "删除对象") + void deleteTestTransUser(String name); + + + + @ApiOperation(value = "第一类丢失更新") + void updateLost(String name, int time, boolean execp); + + @ApiOperation(value = "第二类丢失更新") + void updateLostTrans(String name,double salary, int time, boolean execp); + + @ApiOperation(value = "脏读模拟A") + void writeDirtyA(long id); + + @ApiOperation(value = "脏读模拟B") + void writeDirtyB(long id); + + @ApiOperation(value = "不可重复读A") + void writeRepeatA(long id); + + @ApiOperation(value = "不可重复读B") + void writeRepeatB(long id); + + @ApiOperation(value = "幻读模拟A") + void writePhantomA(long id,boolean listOrDelete); + + @ApiOperation(value = "幻读模拟B") + void writePhantomB(); + + @ApiOperation(value = "创建新事务") + void writeRequireNew(); + + @ApiOperation(value = "创建新事务-子方法") + void writeRequireNewMore(); + + @ApiOperation(value = "没有事务抛出异常") + void writeTransMandatory(); + + @ApiOperation(value = "没有事务抛出异常-子方法") + void writeTransMandatoryMore(); + + @ApiOperation(value = "乐观锁 Optimistic lockA") + void writeOptimisticA(long id,int type); + + @ApiOperation(value = "乐观锁 Optimistic lockB") + void writeOptimisticB(long id,int type); + + @ApiOperation(value = "悲观锁 pessimistic lockA") + void writePessimisticA(long id,int type); + + @ApiOperation(value = "悲观锁 pessimistic lockB") + void writePessimisticB(long id,int type); + + @ApiOperation(value = "常见事务处理-可能出现并发问题") + void writePatternWrong(long id,double salary); + + @ApiOperation(value = "事务模式-线程锁") + void writePatternSynchron(long id,double salary); + + @ApiOperation(value = "事务模式-乐观锁") + void writePatternOpti(long id,double salary); + + @ApiOperation(value = "事务模式-悲观锁") + void writePatternPessi(long id,double salary); + + @ApiOperation(value = "属性更新") + void writePatternParamUpdate(long id,double salary); } diff --git a/modules/i3plus-core-apiservice/pom.xml b/modules/i3plus-core-apiservice/pom.xml index 3e4de62..9c4153e 100644 --- a/modules/i3plus-core-apiservice/pom.xml +++ b/modules/i3plus-core-apiservice/pom.xml @@ -77,17 +77,35 @@ mysql-connector-java + + com.oracle + ojdbc6 + + org.apache.tomcat.embed tomcat-embed-jasper + org.apache.commons commons-lang3 + + + com.microsoft.sqlserver + sqljdbc4 + + + + + org.postgresql + postgresql + + org.apache.shiro diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/configuration/AppStartSystemInit.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/configuration/AppStartSystemInit.java index ac9179e..4586d42 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/configuration/AppStartSystemInit.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/configuration/AppStartSystemInit.java @@ -42,7 +42,7 @@ public class AppStartSystemInit implements CommandLineRunner { packIMPPResources(); LOGGER.info("【IMPP-Core开始加载基础信息...】"); - systemInitService.loadAll(); + systemInitService.putAndLoadAll(); } /** diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoDdlPackController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoDdlPackController.java index a9890a1..dc2c3b6 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoDdlPackController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoDdlPackController.java @@ -15,9 +15,7 @@ import io.swagger.annotations.ApiOperation; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import java.util.ArrayList; import java.util.List; @@ -101,4 +99,39 @@ public class DemoDdlPackController { ListPager listPager = testService.querySysUserByPager(user,pager); return ResultBean.success("操作成功").setListPager(listPager).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); } + + /** + * 测试添加长文本数据 + * @param sysUser + * @return + */ + @PostMapping(value="/test-insert") + @ApiOperation(value="测试添加长文本数据") + public BaseResultBean testInsertSysUserLob(SysUser sysUser){ + testService.insertSysUser(sysUser); + return ResultBean.success("操作成功").setResultObject(sysUser).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } + /** + * 测试添加长文本数据 + * @param sysUser + * @return + */ + @PutMapping(value="/test-update") + @ApiOperation(value="测试添加长文本数据") + public BaseResultBean testUpdateSysUserLob(SysUser sysUser){ + testService.updateSysUser(sysUser); + return ResultBean.success("操作成功").setResultObject(sysUser).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } + /** + * 测试查询长文本数据 + * @return + */ + @PutMapping(value="/test-list") + @ApiOperation(value="测试添加长文本数据") + public BaseResultBean testListSysUserLob(){ + List sysUserList = testService.listSysUser(); + return ResultBean.success("操作成功").setResultList(sysUserList).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } + + } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoTransactionController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoTransactionController.java index df9197c..3098ba1 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoTransactionController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoTransactionController.java @@ -1,18 +1,27 @@ package cn.estsh.i3plus.core.apiservice.controller; +import cn.estsh.i3plus.core.api.iservice.busi.ITestService; import cn.estsh.i3plus.core.api.iservice.busi.ITestTransService; import cn.estsh.i3plus.platform.common.util.PlatformConstWords; +import cn.estsh.i3plus.pojo.platform.bean.TestTransUser; import cn.estsh.impp.framework.base.controller.CoreBaseController; +import cn.estsh.impp.framework.boot.datasource.DataSourceConfig; +import cn.estsh.impp.framework.boot.datasource.DynamicDataSourceHolder; import cn.estsh.impp.framework.boot.util.ResultBean; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; +import javax.persistence.LockModeType; +import java.util.List; + /** * @Description : 对事务以及entityManager的操作演示 * @Reference : @@ -22,13 +31,16 @@ import org.springframework.web.bind.annotation.RestController; **/ @RestController @Api(description = "对事务以及entityManager的操作演示") -@RequestMapping(PlatformConstWords.BASE_URL + "/demo-trans") +@RequestMapping("/demo-trans") public class DemoTransactionController extends CoreBaseController { private static final Logger LOGGER = LoggerFactory.getLogger(DemoTransactionController.class); @Autowired private ITestTransService transService; + @Autowired + private ITestService testService; + /** * dao混合调用 * @@ -45,17 +57,350 @@ public class DemoTransactionController extends CoreBaseController { } /** - * dao混合调用2 + * 测试多数据源切换 * - * @param type 调用参数 - * @param name 名称 * @return 处理结果 */ - @PostMapping("/test2") - @ApiOperation(value = "dao混合调用2") - public ResultBean transTest2(int type, String name) { - transService.testListTranSec(type, name); + @PostMapping("/test-dynamic-datasource") + @ApiOperation(value = "测试多数据源切换") + public ResultBean testDynamicDataSource(int type) { + //多服务调用 + startMultiService(); + + if(type == 1){ + System.out.println("====先查后插入===="); + List uList = transService.listRead(); + System.out.println("对象总数:" + uList.size()); + + System.out.println("开始插入"); + transService.write(); + + uList = transService.listRead(); + System.out.println("再次查询:" + uList.size()); + }else if(type == 2){ + System.out.println("====先插入后查===="); + System.out.println("开始插入"); + transService.write(); + + List uList = transService.listRead(); + System.out.println("对象总数:" + uList.size()); + + if(uList.size() > 0){ + throw new RuntimeException("111"); + } + }else if(type == 3){ + System.out.println("====先查后插入===="); + List uList = transService.listRead(); + System.out.println("对象总数:" + uList.size()); + + System.out.println("开始插入"); + testService.write(); + + uList = transService.listRead(); + System.out.println("再次查询:" + uList.size()); + } return ResultBean.success("测试成功"); } + + + /** + * 测试多数据源切换(Controller调用) + * + * @return 处理结果 + */ + @PostMapping("/test-dynamic-datasource-more") + @ApiOperation(value = "测试多数据源切换") + public ResultBean testDynamicDataSourceWithController(boolean withMulti) { + if(withMulti) { + //多服务调用 + startMultiService(); + } + + //读 + readWriteTransactionTest(1); + //写 + readWriteTransactionTest(2); + + return ResultBean.success("测试成功"); + } + + /** + * 读写分离-事务测试 + * @return 处理结果 + */ + @PostMapping("/read-write-test") + @ApiOperation(value = "读写分离-事务测试") + public ResultBean readWriteTransactionTest(@RequestParam("testType") int testType) { + if(testType == 1) { + //读 + List uList = transService.listRead(); + System.out.println("对象总数:" + uList.size()); + for (TestTransUser u : uList){ + System.out.println(u); + } + }else if(testType == 2) { + //写 + transService.write(); + }else if(testType == 3) { + //读写(写事务) + transService.transReadWrite(); + }else if(testType == 4) { + //读写(写事务) + transService.readWrite(); + } + + return ResultBean.success("测试成功"); + } + + /******************* 事务并发出现的问题*******************/ + + /** + * 第一类丢失更新 + * @param name 更新的name的值 + * @param time 停止时间,秒 + * @param execp 是否抛出异常 + * @return 处理结果 + */ + @PostMapping("/update-lost") + @ApiOperation(value = "第一类丢失更新") + public ResultBean updateLost1(String name,int time,boolean execp) { + transService.updateLost(name,time,execp); + + return ResultBean.success("幻读模拟结束"); + } + + /** + * 第二类丢失更新 + * @return 处理结果 + */ + @PostMapping("/update-lost-trans") + @ApiOperation(value = "第二类丢失更新") + public ResultBean updateLostTrans(String name,double salary,int time,boolean execp) { + transService.updateLostTrans(name,salary,time,execp); + + return ResultBean.success("第二类丢失更新结束"); + } + + /** + * 模拟脏读 + * @return 处理结果 + */ + @PostMapping("/trans-dirty-a") + @ApiOperation(value = "脏读模拟A") + public ResultBean transDirtyA(long id) { + try{ + transService.writeDirtyA(id); + }catch(Exception e){ + System.out.println(e.getMessage()); + } + + return ResultBean.success("脏读模拟A结束"); + } + + /** + * 模拟脏读 + * @return 处理结果 + */ + @PostMapping("/trans-dirty-b") + @ApiOperation(value = "脏读模拟B") + public ResultBean transDirtyB(long id) { + transService.writeDirtyB(id); + + return ResultBean.success("脏读模拟B结束"); + } + + /** + * 模拟不可重复读A + * @return 处理结果 + */ + @PostMapping("/trans-repeat-a") + @ApiOperation(value = "不可重复读A") + public ResultBean transRepeatA(long id) { + transService.writeRepeatA(id); + + return ResultBean.success("不可重复读A结束"); + } + + /** + * 模拟不可重复读B + * @return 处理结果 + */ + @PostMapping("/trans-repeat-b") + @ApiOperation(value = "不可重复读B") + public ResultBean transRepeatB(long id) { + transService.writeRepeatB(id); + + return ResultBean.success("不可重复读B结束"); + } + + /** + * 模拟幻读 + * @return 处理结果 + */ + @PostMapping("/trans-phantom-a") + @ApiOperation(value = "幻读模拟A") + public ResultBean transPhantomA(long id,boolean listOrDelete) { + try { + transService.writePhantomA(id, listOrDelete); + }catch(Exception e){ + System.out.println("幻读异常:" + e.getMessage()); + } + + return ResultBean.success("幻读模拟A结束"); + } + + /** + * 模拟幻读 + * @return 处理结果 + */ + @PostMapping("/trans-phantom-b") + @ApiOperation(value = "幻读模拟B") + public ResultBean transPhantomB() { + transService.writePhantomB(); + + return ResultBean.success("幻读模拟B结束"); + } + + /********************* 事务传播 *******************/ + + /** + * 事务传播-创建新事物 + * @return 处理结果 + */ + @PostMapping("/trans-require-new") + @ApiOperation(value = "创建新事务") + public ResultBean transRequireNew() { + transService.writeRequireNew(); + + return ResultBean.success("require-new结束"); + } + + /** + * 事务传播-mandatory + * @return 处理结果 + */ + @PostMapping("/trans-mandatory") + @ApiOperation(value = "没有事务抛出异常") + public ResultBean transMandatory() { + transService.writeTransMandatory(); + + return ResultBean.success("mandatory结束"); + } + + /******************* 事务隔离级别 *******************/ + //调用事务出现的问题,打开事务注释 + + /********************* 乐观锁 Optimistic lock *******************/ + + /** + * 乐观锁A + * @return 处理结果 + */ + @PostMapping("/trans-optimistic-a") + @ApiOperation(value = "乐观锁 Optimistic lockA") + public ResultBean transOptimisticA(long id,int type) { + transService.writeOptimisticA(id,type); + + return ResultBean.success("乐观锁 Optimistic lockA结束"); + } + + /** + * 乐观锁B + * @return 处理结果 + */ + @PostMapping("/trans-optimistic-b") + @ApiOperation(value = "乐观锁 Optimistic lockB") + public ResultBean transOptimisticB(long id,int type) { + transService.writeOptimisticB(id,type); + + return ResultBean.success("乐观锁 Optimistic lockB结束"); + } + + /********************* 悲观锁 Pessimistic Lock *******************/ + /** + * 悲观锁A + * @return 处理结果 + */ + @PostMapping("/trans-pessimistic-a") + @ApiOperation(value = "悲观锁 pessimistic lockA") + public ResultBean transPessimisticA(long id,int type) { + transService.writePessimisticA(id,type); + + return ResultBean.success("悲观锁 pessimistic lockA结束"); + } + + /** + * 悲观锁B + * @return 处理结果 + */ + @PostMapping("/trans-pessimistic-b") + @ApiOperation(value = "悲观锁 pessimistic lockB") + public ResultBean transPessimisticB(long id,int type) { + transService.writePessimisticB(id,type); + + return ResultBean.success("悲观锁 pessimistic lockB结束"); + } + + /********************* 事务设计 *******************/ + + /** + * 通常(可能出现问题) + * @return 处理结果 + */ + @PostMapping("/trans-pattern-wrong") + @ApiOperation(value = "常见事务处理(可能出现并发问题)") + public ResultBean transPatternWrong(long id,double salary) { + transService.writePatternWrong(id,salary); + + return ResultBean.success("常见事务处理"); + } + + /** + * 线程锁(性能) + * @return 处理结果 + */ + @PostMapping("/trans-pattern-synchronized") + @ApiOperation(value = "事务模式-线程锁") + public ResultBean transPatternSynchron(long id,double salary) { + transService.writePatternSynchron(id,salary); + + return ResultBean.success("事务模式-线程锁"); + } + + /** + * 乐观锁 + * @return 处理结果 + */ + @PostMapping("/trans-pattern-opti") + @ApiOperation(value = "事务模式-乐观锁") + public ResultBean transPatternOpti(long id,double salary) { + transService.writePatternOpti(id,salary); + + return ResultBean.success("事务模式-乐观锁"); + } + + /** + * 悲观锁 + * @return 处理结果 + */ + @PostMapping("/trans-pattern-pessi") + @ApiOperation(value = "事务模式-悲观锁") + public ResultBean transPatternPessi(long id,double salary) { + transService.writePatternPessi(id,salary); + + return ResultBean.success("事务模式-悲观锁"); + } + + /** + * 属性更新 + * @return 处理结果 + */ + @PostMapping("/trans-pattern-param-update") + @ApiOperation(value = "事务模式-属性更新") + public ResultBean transPatternParamUpdate(long id,double salary) { + transService.writePatternParamUpdate(id,salary); + + return ResultBean.success("事务模式-属性更新"); + } } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/BaseMessageController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/BaseMessageController.java index 24d1053..f2c58a0 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/BaseMessageController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/BaseMessageController.java @@ -50,6 +50,8 @@ public class BaseMessageController extends CoreBaseController { */ public ResultBean basaeInsertSysMessage(SysMessage sysMessage) { try { + startMultiService(); + // 条件校验 ValidatorBean.beginValid(sysMessage) .notNull("messageTitle", sysMessage.getMessageTitle()) diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/WhiteController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/WhiteController.java index 3aa413a..bded804 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/WhiteController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/WhiteController.java @@ -10,6 +10,7 @@ import cn.estsh.i3plus.platform.common.util.CommonConstWords; import cn.estsh.i3plus.pojo.base.bean.BaseConstWords; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; +import cn.estsh.i3plus.pojo.model.platform.UserDetailModel; import cn.estsh.i3plus.pojo.platform.bean.*; import cn.estsh.impp.framework.base.controller.CoreBaseController; import cn.estsh.impp.framework.boot.auth.AuthUtil; @@ -30,6 +31,7 @@ import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; +import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -110,6 +112,8 @@ public class WhiteController extends CoreBaseController { @ApiOperation(value="登陆",notes="登陆") public ResultBean login(HttpServletRequest request, String loginName, String loginPwd, String languageCode, @RequestParam(required = false) String ipAddr){ + startMultiService(); + LOGGER.info("用户登陆 loginName:{} loginPwd:{} languageCode:{}",loginName,loginPwd,languageCode); ResultBean result = null; try { @@ -208,6 +212,8 @@ public class WhiteController extends CoreBaseController { @ApiOperation(value = "根据语言代码查询资源") public ResultBean findSysLocaleResourceByLanguageCode(String languageCode){ try { + startMultiService(); + ValidatorBean.checkNotNull(languageCode,"语言代码不能为空"); if (sysLocaleLanguageService.getSysLocaleLanguageByCode(languageCode) == null) { throw ImppExceptionBuilder.newInstance() @@ -220,7 +226,7 @@ public class WhiteController extends CoreBaseController { // 从缓存获取语言信息 Map resourceMap = redisRes.getHashMap(CommonConstWords.REDIS_PREFIX_CACHE_LANGUAGE + languageCode); if (resourceMap == null || resourceMap.size() == 0) { - systemInitService.loadSysLocaleLanguage(); + systemInitService.putAndLoadSysLocaleLanguage(); resourceMap = redisRes.getHashMap(CommonConstWords.REDIS_PREFIX_CACHE_LANGUAGE + languageCode); } @@ -236,6 +242,8 @@ public class WhiteController extends CoreBaseController { @ApiOperation(value = "新增文件资源", notes = "新增文件资源") public ResultBean insertSysFile(@RequestBody SysFile sysFile){ try { + startMultiService(); + // 条件验证 ValidatorBean.beginValid(sysFile) .notNull("dfsFileName", sysFile.getDfsFileName()) @@ -296,7 +304,7 @@ public class WhiteController extends CoreBaseController { try { ValidatorBean.checkNotNull(code, "code不能为空"); - SysOrderNoRule sysOrderNoRule = sysOrderNoRuleService.getSysOrderNoRuleCode(code); + SysOrderNoRule sysOrderNoRule = sysOrderNoRuleService.doGetSysOrderNoRuleCode(code); return ResultBean.success("操作成功").setResultObject(sysOrderNoRule).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); } catch (ImppBusiException busExcep) { return ResultBean.fail(busExcep); @@ -304,4 +312,17 @@ public class WhiteController extends CoreBaseController { return ImppExceptionBuilder.newInstance().buildExceptionResult(e); } } + + @PostMapping(value = "/sys-find-user/list") + @ApiOperation(value = "查询用户列表信息",notes = "查询用户列表信息") + public ResultBean findSysUserInfoList(UserDetailModel model){ + try { + List userList = personnelService.querySysUserByUserDetailModelOrIds(model, new ArrayList<>()); + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultList(userList); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/PersonnelController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/PersonnelController.java index f97039c..f3f2a6c 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/PersonnelController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/PersonnelController.java @@ -65,6 +65,8 @@ public class PersonnelController extends CoreBaseController { @ApiOperation(value = "添加用户信息", notes = "返回内容添加用户信息") public ResultBean insertUserDetailModel(UserDetailModel model) { try { + startMultiService(); + SysUser user = model.getSysUser(); SysUserInfo info = model.getSysUserInfo(); @@ -144,6 +146,8 @@ public class PersonnelController extends CoreBaseController { @ApiOperation(value = "修改用户信息", notes = "返回内容添加用户信息") public ResultBean updateUserDetailModel(UserDetailModel model) { try { + startMultiService(); + SysUser user = model.getSysUser(); SysUserInfo info = model.getSysUserInfo(); @@ -229,6 +233,8 @@ public class PersonnelController extends CoreBaseController { @ApiOperation(value = "修改用户信息", notes = "返回内容添加用户信息") public ResultBean updateUserModel(UserDetailModel model) { try { + startMultiService(); + checkUserModel(model); SysUser user = personnelService.getSysUserById(Long.parseLong(model.getUserId())); initUser(model, user); @@ -335,6 +341,8 @@ public class PersonnelController extends CoreBaseController { @ApiOperation(value = "删除用户信息", notes = "根据用户信息id删除信息") public ResultBean deleteSysUserInfo(@PathVariable("id") String id) { try { + startMultiService(); + //条件验证 ValidatorBean.checkNotNull(id, "id为空"); @@ -363,6 +371,8 @@ public class PersonnelController extends CoreBaseController { @ApiOperation(value = "根据id批量删除", notes = "根据id批量删除") public ResultBean deleteSysUserInfoByIds(String[] ids) { try { + startMultiService(); + ids = ConvertBean.modelSafeArrayNumber(ids, true); if (ids.length == 0) { throw ImppExceptionBuilder.newInstance() @@ -406,6 +416,8 @@ public class PersonnelController extends CoreBaseController { @ApiOperation(value = "删除账号信息", notes = "根据账号信息id删除信息") public ResultBean deleteSysUser(@PathVariable("id") String id) { try { + startMultiService(); + //条件验证 ValidatorBean.checkNotNull(id, "id为空"); @@ -434,6 +446,8 @@ public class PersonnelController extends CoreBaseController { @ApiOperation(value = "根据id批量删除", notes = "根据id批量删除") public ResultBean deleteSysUserByIds(String[] ids) { try { + startMultiService(); + ids = ConvertBean.modelSafeArrayNumber(ids, true); if (ids.length == 0) { throw ImppExceptionBuilder.newInstance() @@ -683,6 +697,8 @@ public class PersonnelController extends CoreBaseController { * @param model 用户模型 */ public void refreshRef(SysUser user, SysUserInfo info, UserDetailModel model) { + startMultiService(); + if (user != null) { // 刷新账号 部门关系 personnelService.refreshRefSysUserDepartment(user.getId(), StringTool.getArrayLong(model.getUserDepartmentIdList())); diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysBarcodeRuleController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysBarcodeRuleController.java index 9534a57..455772d 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysBarcodeRuleController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysBarcodeRuleController.java @@ -97,6 +97,8 @@ public class SysBarcodeRuleController extends CoreBaseController { @ApiOperation(value = "删除条码规则",notes = "删除条码规则") public ResultBean deleteSysBarcodeRuleById(@PathVariable("id") String idStr) { try { + startMultiService(); + // 条件验证 ValidatorBean.checkNotNull(idStr,"id不能为空"); SysBarcodeRule sysBarcodeRule = sysBarcodeRuleService.getSysBarcodeRuleById(Long.parseLong(idStr)); diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysConfigController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysConfigController.java index f46830c..2bdb25e 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysConfigController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysConfigController.java @@ -75,7 +75,7 @@ public class SysConfigController extends CoreBaseController { ConvertBean.modelInitialize(sysConfig,user); sysConfigService.insertSysConfig(sysConfig); - systemInitService.loadSysConfig(); + systemInitService.putAndLoadSysConfig(); return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); }catch(ImppBusiException busExcep){ return ResultBean.fail(busExcep); @@ -93,6 +93,8 @@ public class SysConfigController extends CoreBaseController { @ApiOperation(value = "根据id删除系统参数", notes = "根据id删除系统参数") public ResultBean deleteSysConfig(@PathVariable("id") String idStr) { try { + startMultiService(); + // 条件验证 ValidatorBean.checkNotNull(idStr,"id不能为空"); if(sysConfigService.getSysConfigById(Long.parseLong(idStr)) == null){ @@ -105,7 +107,7 @@ public class SysConfigController extends CoreBaseController { } sysConfigService.deleteSysConfigById(Long.parseLong(idStr)); - systemInitService.loadSysConfig(); + systemInitService.putAndLoadSysConfig(); return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); }catch(ImppBusiException busExcep){ return ResultBean.fail(busExcep); @@ -137,7 +139,7 @@ public class SysConfigController extends CoreBaseController { ConvertBean.modelUpdate(sysConfig,user); sysConfigService.updateSysConfig(sysConfig); - systemInitService.loadSysConfig(); + systemInitService.putAndLoadSysConfig(); return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); }catch(ImppBusiException busExcep){ return ResultBean.fail(busExcep); @@ -268,7 +270,7 @@ public class SysConfigController extends CoreBaseController { ValidatorBean.checkNotNull(value,"值不能为空"); sysConfigService.updateSysConfigByCode(code,value); - systemInitService.loadSysConfig(); + systemInitService.putAndLoadSysConfig(); return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); }catch(ImppBusiException busExcep){ return ResultBean.fail(busExcep); diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysDictionaryController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysDictionaryController.java index 371dca1..0ff516e 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysDictionaryController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysDictionaryController.java @@ -115,6 +115,8 @@ public class SysDictionaryController extends CoreBaseController{ @ApiOperation(value = "根据id删除字典",notes = "根据id删除字典") public ResultBean updateSysDictionary(@PathVariable("id") String idStr) { try { + startMultiService(); + // 条件验证 ValidatorBean.checkNotNull(idStr,"id不能为空"); SysDictionary sysDictionary = sysDictionaryService.getSysDictionaryById(Long.parseLong(idStr)); diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysFileController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysFileController.java index 737944a..bf2a37d 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysFileController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysFileController.java @@ -87,6 +87,8 @@ public class SysFileController extends CoreBaseController{ @ApiOperation(value = "根据id删除文件资源", notes = "根据id删除文件资源") public ResultBean deleteSysFileById(@PathVariable("id") String idStr){ try { + startMultiService(); + ValidatorBean.checkNotNull(idStr, "id不能为空"); SysFile sysFile = sysFileService.getSysFileById(Long.parseLong(idStr)); ValidatorBean.checkNotNull(sysFile, "文件信息不存在"); @@ -132,7 +134,7 @@ public class SysFileController extends CoreBaseController{ @ApiOperation(value = "根据id查询文件资源", notes = "根据id查询文件资源") public ResultBean getSysFileById(@PathVariable("id") String id){ try { - ValidatorBean.checkIsNumber(id, "id必须为数字"); + ValidatorBean.checkIsNumber(id, "id必须为数字[" + id + "]"); SysFile sysFile = sysFileService.getSysFileById(Long.parseLong(id)); ValidatorBean.checkNotNull(sysFile, "文件信息不存在"); @@ -201,6 +203,8 @@ public class SysFileController extends CoreBaseController{ @ApiOperation(value = "文件上传", notes = "文件上传") public ResultBean singleFileUpload(@RequestParam("file") MultipartFile file) { try { + startMultiService(); + if(file.isEmpty()){ throw ImppExceptionBuilder.newInstance() .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) @@ -239,6 +243,8 @@ public class SysFileController extends CoreBaseController{ @ApiOperation(value = "文件下载", notes = "文件下载") public ResultBean singleDownload(@PathVariable("id")String id, HttpServletResponse response) { try { + startMultiService(); + ValidatorBean.checkIsNumber(id, "文件ID不能为空"); SysFile sysFile = sysFileService.getSysFileById(Long.parseLong(id)); @@ -306,6 +312,8 @@ public class SysFileController extends CoreBaseController{ @ApiOperation(value = "新增文件资源", notes = "新增文件资源") public ResultBean insertSysFile(@RequestBody SysFile sysFile){ try { + startMultiService(); + // 条件验证 ValidatorBean.beginValid(sysFile) .notNull("dfsFileName", sysFile.getDfsFileName()) diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLabelTemplateController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLabelTemplateController.java index 4677662..69388b8 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLabelTemplateController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLabelTemplateController.java @@ -81,6 +81,8 @@ public class SysLabelTemplateController extends CoreBaseController { @ApiOperation(value = "根据id删除打印模板", notes = "根据id删除打印模板") public ResultBean deleteSysLabelTemplate(@PathVariable("id") String idStr) { try { + startMultiService(); + // 条件验证 ValidatorBean.checkNotNull(idStr,"id不能为空"); if(sysLabelTemplateService.getSysLabelTemplateById(Long.parseLong(idStr)) == null){ diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLocaleLanguageController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLocaleLanguageController.java index b677d46..9668077 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLocaleLanguageController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLocaleLanguageController.java @@ -92,7 +92,7 @@ public class SysLocaleLanguageController extends CoreBaseController { sysLocaleLanguageService.updateSysLocaleLanguage(sysLocaleLanguage); // 重新加载资源 - systemInitService.loadSysLocaleLanguage(); + systemInitService.putAndLoadSysLocaleLanguage(); return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); }catch(ImppBusiException busExcep){ return ResultBean.fail(busExcep); @@ -110,6 +110,8 @@ public class SysLocaleLanguageController extends CoreBaseController { @ApiOperation(value = "根据id删除系统语言",notes = "根据id删除系统语言") public ResultBean deleteSysLocaleLanguageById(@PathVariable("id") String idStr){ try { + startMultiService(); + //条件验证 ValidatorBean.checkNotNull(idStr,"id不能为空"); SysLocaleLanguage sysLocaleLanguage =sysLocaleLanguageService.getSysLocaleLanguageById(Long.parseLong(idStr)); @@ -210,7 +212,7 @@ public class SysLocaleLanguageController extends CoreBaseController { sysLocaleLanguageService.deleteSysLocaleLanguageByIds(StringTool.getArrayLong(idsStr)); // 重新加载语言资源 - systemInitService.loadSysLocaleLanguage(); + systemInitService.putAndLoadSysLocaleLanguage(); return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); }catch(ImppBusiException busExcep){ return ResultBean.fail(busExcep); diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLocaleResourceController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLocaleResourceController.java index bca09f7..78b3b74 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLocaleResourceController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLocaleResourceController.java @@ -120,6 +120,8 @@ public class SysLocaleResourceController extends CoreBaseController { @ApiOperation(value = "根据id删除系统语言资源",notes = "根据id删除系统语言资源") public ResultBean deleteSysLocaleResourceById(@PathVariable("id") String idStr){ try { + startMultiService(); + //条件验证 ValidatorBean.checkNotNull(idStr,"id不能为空"); SysLocaleResource sysLocaleResource =sysLocaleResourceService.getSysLocaleResourceById(Long.parseLong(idStr)); @@ -198,7 +200,7 @@ public class SysLocaleResourceController extends CoreBaseController { sysLocaleResourceService.deleteSysLocaleResourceByIds(StringTool.getArrayLong(idsStr)); // 重新加载资源 - systemInitService.loadSysLocaleLanguage(); + systemInitService.putAndLoadSysLocaleLanguage(); return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); }catch(ImppBusiException busExcep){ return ResultBean.fail(busExcep); @@ -227,7 +229,7 @@ public class SysLocaleResourceController extends CoreBaseController { sysLocaleResourceService.insertSysLocaleResourceList(sysLocaleResourcesList); // 重新加载资源 - systemInitService.loadSysLocaleLanguage(); + systemInitService.putAndLoadSysLocaleLanguage(); return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); }catch(ImppBusiException busExcep){ return ResultBean.fail(busExcep); diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLogExceptionController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLogExceptionController.java index 5e437e0..83f7e97 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLogExceptionController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLogExceptionController.java @@ -103,6 +103,8 @@ public class SysLogExceptionController extends CoreBaseController { @GetMapping(value = "/export") @ApiOperation(value = "导出系统异常日志") public ResultBean exportSysLogException(SysLogException sysLogException, String[] colName, int pageSize,boolean isZip) { + startMultiService(); + ListPager listPager; List result = new ArrayList(); File zipFile = null; diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLogOperateController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLogOperateController.java index 1e05f78..d3c236f 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLogOperateController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLogOperateController.java @@ -190,6 +190,8 @@ public class SysLogOperateController extends CoreBaseController { File excelDir = null; File excelFile; try { + startMultiService(); + Pager pager = new Pager(); pager.setCurrentPage(1); // 判断是否超过excel最大导出数量设定值 diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLogSystemController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLogSystemController.java index 7162179..ee07de4 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLogSystemController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLogSystemController.java @@ -178,6 +178,8 @@ public class SysLogSystemController extends CoreBaseController{ File excelDir = null; File excelFile; try { + startMultiService(); + Pager pager = new Pager(); pager.setCurrentPage(1); // 判断是否超过excel最大导出数量设定值 diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysOrderNoRuleController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysOrderNoRuleController.java index 550a9eb..b9a4709 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysOrderNoRuleController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysOrderNoRuleController.java @@ -311,6 +311,8 @@ public class SysOrderNoRuleController extends CoreBaseController { @ApiOperation(value = "下载导入模板") public ResultBean downSysOrderNoRuleTemplate() { try { + startMultiService(); + FastDFSFile fastDFSFile = new FastDFSFile(SysOrderNoRule.class.getSimpleName() + "ImportTemplate.xls", ExcelUtil.importTemplate(SysOrderNoRule.class), "xls"); @@ -381,7 +383,7 @@ public class SysOrderNoRuleController extends CoreBaseController { try { ValidatorBean.checkNotNull(code, "code不能为空"); - SysOrderNoRule sysOrderNoRule = sysOrderNoRuleService.getSysOrderNoRuleCode(code); + SysOrderNoRule sysOrderNoRule = sysOrderNoRuleService.doGetSysOrderNoRuleCode(code); return ResultBean.success("操作成功").setResultObject(sysOrderNoRule).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); } catch (ImppBusiException busExcep) { return ResultBean.fail(busExcep); @@ -405,7 +407,7 @@ public class SysOrderNoRuleController extends CoreBaseController { List orderNoList = new ArrayList<>(); for (int i = 0; i < num; i++) { - orderNoList.add(sysOrderNoRuleService.getSysOrderNoRuleCode(code).getOrderNo()); + orderNoList.add(sysOrderNoRuleService.doGetSysOrderNoRuleCode(code).getOrderNo()); } return ResultBean.success("操作成功").setResultList(orderNoList).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); } catch (ImppBusiException busExcep) { diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysRoleController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysRoleController.java index 4c75aca..317b7f7 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysRoleController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysRoleController.java @@ -52,6 +52,8 @@ public class SysRoleController extends CoreBaseController{ @ApiOperation(value = "新增系统角色", notes = "系统角色") public ResultBean insertSysRole(SysRole role) { try { + startMultiService(); + //条件验证 ValidatorBean.beginValid(role) .notNull("name", role.getName()); @@ -82,6 +84,8 @@ public class SysRoleController extends CoreBaseController{ @ApiOperation(value = "修改系统角色", notes = "系统角色") public ResultBean updateSysRole(SysRole role) { try { + startMultiService(); + // 数据校验 ValidatorBean.beginValid(role) .notNull("id", role.getId()) @@ -283,6 +287,8 @@ public class SysRoleController extends CoreBaseController{ @ApiOperation(value = "新增角色权限关系", notes = "新增角色权限关系") public ResultBean insertRefMenu(String roleId,String[] refIds) { try { + startMultiService(); + // 数据校验 ValidatorBean.checkNotNull(roleId, "角色roleId 不能为空"); @@ -308,6 +314,8 @@ public class SysRoleController extends CoreBaseController{ @ApiOperation(value = "批量新增角色权限关系", notes = "批量新增角色权限关系") public ResultBean insertBatchRefMenu(String[] roleIds,String[] menuIds) { try { + startMultiService(); + roleIds = ConvertBean.modelSafeArrayNumber(roleIds,true); menuIds = ConvertBean.modelSafeArrayNumber(menuIds,true); diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskController.java index b3d00c5..2df8449 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskController.java @@ -158,6 +158,8 @@ public class SysTaskController extends CoreBaseController { @ApiOperation(value = "删除任务", notes = "删除任务") public ResultBean deleteSysTaskById(@PathVariable("id") String idStr) { try { + startMultiService(); + // 数据校验 ValidatorBean.checkNotNull(idStr, "id不能为空"); if (sysTaskService.getSysTaskById(Long.parseLong(idStr)) == null) { diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskCycleController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskCycleController.java index 10a20fc..a927f17 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskCycleController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskCycleController.java @@ -165,6 +165,8 @@ public class SysTaskCycleController extends CoreBaseController { @ApiOperation(value = "删除任务周期", notes = "删除任务周期") public ResultBean deleteSysTaskCycle(@PathVariable("id") String idStr) { try { + startMultiService(); + // 数据校验 ValidatorBean.checkNotNull(idStr, "时间表达式id 不能为空"); if (sysTaskCycleService.getSysTaskCycleById(Long.parseLong(idStr)) == null) { diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskPlanController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskPlanController.java index 2de0ddd..c5d2e1c 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskPlanController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskPlanController.java @@ -114,6 +114,8 @@ public class SysTaskPlanController extends CoreBaseController { @ApiOperation(value = "新增任务计划", notes = "任务计划") public ResultBean insertSysTaskTime(SysTaskPlan sysTaskPlan, Integer isExecute) { try { + startMultiService(); + // 数据校验 ValidatorBean.beginValid(sysTaskPlan) .notNull("name", sysTaskPlan.getName()) @@ -195,6 +197,8 @@ public class SysTaskPlanController extends CoreBaseController { @ApiOperation(value = "修改任务计划", notes = "任务计划") public ResultBean updateSysTaskTime(SysTaskPlan sysTaskPlan, Integer isExecute) { try { + startMultiService(); + ResultBean resultBean = ResultBean.success("操作成功") .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()) .setResultObject(sysTaskPlan); @@ -270,6 +274,8 @@ public class SysTaskPlanController extends CoreBaseController { @ApiOperation(value = "删除任务计划", notes = "删除任务计划") public ResultBean deleteSysTaskTime(@PathVariable("id") String id) { try { + startMultiService(); + // 数据校验 ValidatorBean.checkNotNull(id, "任务计划id 不能为空"); SysTaskPlan sysTaskPlan = sysTaskPlanService.getSysTaskPlanById(Long.parseLong(id)); @@ -339,6 +345,8 @@ public class SysTaskPlanController extends CoreBaseController { @ApiOperation(value = "修改任务计划状态", notes = "根据ID修改任务计划状态") public ResultBean updateQuartzStatus(@PathVariable("id") String idStr, @PathVariable("status") Integer status) { try { + startMultiService(); + // 数据校验 ValidatorBean.checkNotNull(idStr, "id 不能为空"); ValidatorBean.checkNotZero(status, "状态不能为空"); diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysToolTypeController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysToolTypeController.java index 0894b3a..903cf0b 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysToolTypeController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysToolTypeController.java @@ -102,6 +102,8 @@ public class SysToolTypeController extends CoreBaseController{ @ApiOperation(value = "根据id删除硬件类型",notes = "根据id删除硬件类型") public ResultBean deleteSysToolType(@PathVariable("id") String idStr){ try { + startMultiService(); + ValidatorBean.checkNotNull(idStr,"id不能为空"); if(toolTypeService.getSysToolTypeById(Long.parseLong(idStr)) == null){ throw ImppExceptionBuilder.newInstance() diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysUserController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysUserController.java index 4669dc9..0945239 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysUserController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysUserController.java @@ -72,6 +72,8 @@ public class SysUserController extends CoreBaseController{ @ApiOperation(value = "新增用户", notes = "新增系统用户") public ResultBean insertSysUser(SysUser sysUser,String[] roleIds) { try { + startMultiService(); + ConvertBean.modelSafeArrayNumber(roleIds,true); ValidatorBean.beginValid(sysUser) @@ -133,6 +135,8 @@ public class SysUserController extends CoreBaseController{ @ApiOperation(value = "修改用户", notes = "修改用户信息") public ResultBean updateSysUser(SysUser sysUser,String[] roleIds) { try { + startMultiService(); + ConvertBean.modelSafeArrayNumber(roleIds,true); ValidatorBean.beginValid(sysUser) .numberCheck("id",sysUser.getUserInfoId()) @@ -248,6 +252,8 @@ public class SysUserController extends CoreBaseController{ @ApiOperation(value = "修改密码", notes = "修改当前登录用户密码") public ResultBean updateSysUserPassword(String password,String newPwd) { try { + startMultiService(); + SessionUser sessionUser = AuthUtil.getSessionUser(); // 数据校验 ValidatorBean.checkNotNull(password, "旧密码不能为空"); @@ -382,6 +388,8 @@ public class SysUserController extends CoreBaseController{ @ApiOperation(value = "密码重置",notes = "根据id重置用户密码") public ResultBean updateResetPassword(@PathVariable String id){ try { + startMultiService(); + SysUser user = sysUserService.getSysUserById(Long.parseLong(id)); if(user != null){ Integer num = personnelService.checkSysUserResetPassword(user); @@ -531,6 +539,8 @@ public class SysUserController extends CoreBaseController{ @ApiOperation(value = "修改用户操作组织id") public ResultBean updateSysUserOrganize(String idStr, String organizeIdStr){ try{ + startMultiService(); + ValidatorBean.checkNotNull(idStr, "id不能为空"); SysUser sysUser = sysUserService.getSysUserById(Long.parseLong(idStr)); ValidatorBean.checkNotNull(sysUser, "用户不存在"); 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 8cea910..5ab49dd 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 @@ -71,6 +71,8 @@ public class SysUserInfoController extends CoreBaseController{ @ApiOperation(value="添加用户信息",notes="返回内容添加用户信息") public ResultBean insertSysUserInfo(SysUserInfo userInfo){ try { + startMultiService(); + //登陆用户 SessionUser user = AuthUtil.getSessionUser(); @@ -103,6 +105,8 @@ public class SysUserInfoController extends CoreBaseController{ @ApiOperation(value="修改用户信息",notes="根据用户信息id修改信息") public ResultBean updateSysUserInfoById(SysUserInfo userInfo){ try { + startMultiService(); + //登陆用户 SessionUser user = AuthUtil.getSessionUser(); diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/MessageLetterQueueReceiver.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/MessageLetterQueueReceiver.java index 2d5d5e2..6a8720d 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/MessageLetterQueueReceiver.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/MessageLetterQueueReceiver.java @@ -4,6 +4,7 @@ import cn.estsh.i3plus.core.api.iservice.busi.IPersonnelService; import cn.estsh.i3plus.core.api.iservice.busi.ISysMessageService; import cn.estsh.i3plus.core.api.iservice.busi.ISysUserService; import cn.estsh.i3plus.core.apiservice.websocket.MessageWebSocket; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.tool.JsonUtilTool; import cn.estsh.i3plus.platform.common.tool.StringTool; import cn.estsh.i3plus.platform.common.tool.TimeTool; @@ -68,6 +69,7 @@ public class MessageLetterQueueReceiver { LOGGER.info("【MQ-{}】 数据接收成功:{}", PlatformConstWords.IMPP_MESSAGE_LETTER_QUEUE, data); SysMessage msg = JsonUtilTool.decode(data, SysMessage.class); try { + ConvertBean.serviceModelInitialize(msg, "system"); msg = sysMessageService.insertSysMessage(msg); if (!StringUtils.isBlank(msg.getMessageReceiversId())) { @@ -92,6 +94,7 @@ public class MessageLetterQueueReceiver { refUserMessage.setMessageStatus(ImppEnumUtil.MESSAGE_STATUS.UNREAD.getValue()); refUserMessage.setReceiverTime(TimeTool.getNowTime(true)); refUserMessage.setIsUrgent(msg.getIsUrgent()); + ConvertBean.serviceModelInitialize(refUserMessage, "system"); insertList.add(refUserMessage); } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/ScheduleQueueReceiver.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/ScheduleQueueReceiver.java index 273a919..cd8ec35 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/ScheduleQueueReceiver.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/ScheduleQueueReceiver.java @@ -2,6 +2,7 @@ package cn.estsh.i3plus.core.apiservice.mq; import cn.estsh.i3plus.core.api.iservice.busi.ISysTaskPlanService; import cn.estsh.i3plus.core.api.iservice.busi.ISysUserService; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.tool.JsonUtilTool; import cn.estsh.i3plus.platform.common.tool.StringTool; import cn.estsh.i3plus.platform.common.tool.TimeTool; @@ -73,6 +74,7 @@ public class ScheduleQueueReceiver { logTaskTime.setTaskSoftTypeRdd(taskPlan.getTaskSoftTypeRdd()); logTaskTime.setTaskCycleNameRdd(taskPlan.getTaskCycleNameRdd()); logTaskTime.setTaskCycleExpsRdd(taskPlan.getTaskCycleExpsRdd()); + ConvertBean.serviceModelInitialize(logTaskTime, "system"); sysTaskPlanService.logInsertSysLogTaskTime(logTaskTime); // 定时任务失败通知 @@ -91,6 +93,8 @@ public class ScheduleQueueReceiver { sysMessage.setMessageContentType(ImppEnumUtil.MESSAGE_TYPE_CONTENT.HTML.getValue()); sysMessage.setMessageSendTime(TimeTool.getNowTime(true)); sysMessage.setIsSystem(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); + // 初始数据 + ConvertBean.serviceModelInitialize(sysMessage, "system"); // 是否内部成员 if (CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue() == taskPlan.getIsInternalUser()) { diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SystemInitService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SystemInitService.java index 051833d..989e40f 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SystemInitService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SystemInitService.java @@ -51,16 +51,16 @@ public class SystemInitService implements ISystemInitService { @Override @ApiOperation(value = "初始化加载所有数据",notes = "初始化加载所有数据") - public void loadAll() { + public void putAndLoadAll() { type = ImppEnumUtil.SYS_CACHE_TYPE.REDIS.getValue(); - loadSysConfig(); - loadSysDictionary(); - loadSysLocaleLanguage(); + putAndLoadSysConfig(); + putAndLoadSysDictionary(); + putAndLoadSysLocaleLanguage(); } @Override @ApiOperation(value = "加载系统配置",notes = "加载系统配置") - public void loadSysConfig() { + public void putAndLoadSysConfig() { String redisKey = null; List list = configRDao.findAll(); for (SysConfig config : list) { @@ -74,7 +74,7 @@ public class SystemInitService implements ISystemInitService { @Override @ApiOperation(value = "加载字典数据",notes = "加载字典数据") - public void loadSysDictionary() { + public void putAndLoadSysDictionary() { try { List list = dictionaryRDao.findAll(); if(list != null && list.size() > 0){ @@ -99,7 +99,7 @@ public class SystemInitService implements ISystemInitService { @Override @ApiOperation(value = "加载语言数据",notes = "加载语言数据") - public void loadSysLocaleLanguage() { + public void putAndLoadSysLocaleLanguage() { // Redis 缓存 if(type == ImppEnumUtil.SYS_CACHE_TYPE.REDIS.getValue()){ /** diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysOrderNoRuleService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysOrderNoRuleService.java index ffc051a..274cd74 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysOrderNoRuleService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysOrderNoRuleService.java @@ -89,7 +89,7 @@ public class SysOrderNoRuleService implements ISysOrderNoRuleService { @Override @ApiOperation(value = "根据code查询最新单号规则") - public synchronized SysOrderNoRule getSysOrderNoRuleCode(String code) { + public synchronized SysOrderNoRule doGetSysOrderNoRuleCode(String code) { SysOrderNoRule sysOrderNoRule = sysOrderNoRuleRDao.getByProperty("orderNoRuleCode", code); if (sysOrderNoRule == null) { diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestService.java index 40d5e4d..9baa9e4 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestService.java @@ -13,7 +13,9 @@ import cn.estsh.i3plus.pojo.base.tool.HqlPack; import cn.estsh.i3plus.pojo.platform.bean.SysDepartment; import cn.estsh.i3plus.pojo.platform.bean.SysOrganize; import cn.estsh.i3plus.pojo.platform.bean.SysUser; +import cn.estsh.i3plus.pojo.platform.bean.TestTransUser; import cn.estsh.i3plus.pojo.platform.repository.SysUserRepository; +import cn.estsh.i3plus.pojo.platform.repository.TestTransUserRepository; import cn.estsh.i3plus.pojo.platform.sqlpack.CoreHqlPack; import io.swagger.annotations.ApiOperation; import org.apache.commons.lang3.StringUtils; @@ -24,6 +26,7 @@ import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; +import java.util.Random; /** * @Description : @@ -43,6 +46,9 @@ public class TestService implements ITestService { @Autowired private SysUserRepository sysUserRDao; + @Autowired + private TestTransUserRepository testTransUserRepository; + @Override @ApiOperation(value = "多表查询") public List queryToolAndToolType(Pager pager) { @@ -87,4 +93,31 @@ public class TestService implements ITestService { public List querySysUserByPack(DdlPackBean packBean) { return sysUserRDao.findByHqlWhere(packBean); } + + @Override + public void write() { + Random ran = new Random(10000); + TestTransUser u = new TestTransUser(); + u.setName("na2me" + ran.nextInt(100)); + u.setSalary(ran.nextDouble()); + System.out.println("插入对象:" + u); + + u = testTransUserRepository.insert(u); + System.out.println("插入对象:" + u); + } + + @Override + public void insertSysUser(SysUser sysUser) { + sysUserRDao.insert(sysUser); + } + + @Override + public void updateSysUser(SysUser sysUser) { + sysUserRDao.update(sysUser); + } + + @Override + public List listSysUser() { + return sysUserRDao.list(); + } } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestTransService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestTransService.java index b28f941..ba62cc6 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestTransService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestTransService.java @@ -3,18 +3,22 @@ package cn.estsh.i3plus.core.apiservice.serviceimpl.busi; import cn.estsh.i3plus.core.api.iservice.busi.ITestTransService; import cn.estsh.i3plus.core.apiservice.dao.ITestTransDao; import cn.estsh.i3plus.core.apiservice.dao.ITransDaoSec; -import cn.estsh.i3plus.pojo.platform.bean.SysDepartment; -import cn.estsh.i3plus.pojo.platform.bean.SysTool; -import cn.estsh.i3plus.pojo.platform.bean.SysUser; -import cn.estsh.i3plus.pojo.platform.bean.SysUserInfo; +import cn.estsh.i3plus.pojo.platform.bean.*; import cn.estsh.i3plus.pojo.platform.repository.SysDepartmentRepository; import cn.estsh.i3plus.pojo.platform.repository.SysUserInfoRepository; import cn.estsh.i3plus.pojo.platform.repository.SysUserRepository; -import com.netflix.discovery.converters.Auto; +import cn.estsh.i3plus.pojo.platform.repository.TestTransUserRepository; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.jpa.repository.Lock; import org.springframework.stereotype.Service; +import org.springframework.transaction.TransactionDefinition; +import org.springframework.transaction.annotation.Isolation; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; +import javax.persistence.LockModeType; import java.util.List; +import java.util.Random; /** * @Description : @@ -41,6 +45,9 @@ public class TestTransService implements ITestTransService { @Autowired private ITransDaoSec testTransSecDao; + @Autowired + private TestTransUserRepository testTransUserRepository; + @Override public void testListTran(int type,String name) { if(type == 1) { @@ -130,8 +137,380 @@ public class TestTransService implements ITestTransService { } } + @Transactional(propagation=Propagation.NESTED,isolation=Isolation.DEFAULT,readOnly = false,rollbackFor = Exception.class) + @Lock(value = LockModeType.PESSIMISTIC_WRITE) + @Override + public void testTran() { + + } + + @Override + public List listRead() { + + List ul = testTransUserRepository.list(); + testTransUserRepository.flush(); + System.out.println("查询333数量:" + ul); + + return ul; + } + + @Override + public void write() { + Random ran = new Random(10000); + TestTransUser u = new TestTransUser(); + u.setName("na2me" + ran.nextInt(100)); + u.setSalary(ran.nextDouble()); + System.out.println("插入对象:" + u); + + u = testTransUserRepository.insert(u); + System.out.println("插入对象:" + u); + } + + @Override + public void transReadWrite() { + System.out.println("===写事务:查询后插入==="); + listRead(); + write(); + } + + @Override + public void readWrite() { + System.out.println("===读事务:查询后插入==="); + listRead(); + write(); + } + + @Override + public void updateTestTransUser(String name, double salary) { + TestTransUser u = testTransUserRepository.getByProperty("name",name); + u.setSalary(salary); + + testTransUserRepository.update(u); + } + + @Override + public void insertTestTransUser(String name, double salary) { + TestTransUser u = new TestTransUser(); + u.setName(name); + u.setSalary(salary); + + u = testTransUserRepository.insert(u); + System.out.println("插入对象:" + u); + } + + @Override + public void deleteTestTransUser(String name) { + testTransUserRepository.deleteByProperty("name",name); + } + + @Override + @Transactional(propagation = Propagation.NEVER) //没有事务 + public void updateLost(String name, int time, boolean execp) { + TestTransUser u = testTransUserRepository.getByProperty("name",name); + u.setSalary(u.getSalary() + 100); + + testTransUserRepository.update(u); + + if(time > 0){ + try { + Thread.sleep(time); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + + if(execp){ + throw new RuntimeException("手动异常"); + } + } + + @Override + @Transactional(propagation = Propagation.REQUIRED) //默认事务 + public void updateLostTrans(String name,double salary, int time, boolean execp) { + TestTransUser u = testTransUserRepository.getByProperty("name",name); + u.setSalary(salary); + + testTransUserRepository.update(u); + + if(time > 0){ + try { + Thread.sleep(time); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + + if(execp){ + throw new RuntimeException("手动异常"); + } + } + + @Override + public void writeDirtyA(long id) { + TestTransUser u = testTransUserRepository.getById(id); + System.out.println("脏读开始,对象值:" + u.getSalary()); + u.setSalary(u.getSalary() + 666); + + testTransUserRepository.update(u); + System.out.println("脏读数据已更新:" + u.getSalary()); + + try { + Thread.sleep(3000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + + if(u.getSalary() > 0){ + throw new RuntimeException("手动抛出,数据回滚。"); + } + } + + @Override + @Transactional(isolation = Isolation.READ_UNCOMMITTED) + public void writeDirtyB(long id) { + TestTransUser u = testTransUserRepository.getById(id); + System.out.println("第一次查询:" + u); + + try { + Thread.sleep(3000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + u = testTransUserRepository.getById(id); + System.out.println("第二次查询:" + u); + } + + @Override + public void writeRepeatA(long id) { + TestTransUser u = testTransUserRepository.getById(id); + System.out.println("不可重复读开始,对象值:" + u.getSalary()); + u.setSalary(u.getSalary() + 666); + + testTransUserRepository.update(u); + System.out.println("不可重复读数据已更新:" + u.getSalary()); + + try { + Thread.sleep(5000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + System.out.println("不可重复读已提交数据!"); + } + + @Override + public void writeRepeatB(long id) { + TestTransUser u = testTransUserRepository.getById(id); + System.out.println("第一次查询:" + u); + + try { + Thread.sleep(5000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + u = testTransUserRepository.getById(id); + System.out.println("第二次查询:" + u); + } + + @Override + //@Transactional(isolation = Isolation.SERIALIZABLE) + public void writePhantomA(long id,boolean listOrDelete) { + int count = testTransUserRepository.listCount(); + System.out.println("幻读开始,记录数量:" + count); + + if(listOrDelete){ + TestTransUser u = new TestTransUser(); + u.setName("testPhantom"); + u.setSalary(500d); + + u = testTransUserRepository.insert(u); + System.out.println("插入对象:" + u); + + u.setSalary(u.getSalary() * 10); + testTransUserRepository.update(u); + testTransUserRepository.flush(); + System.out.println("update对象:" + u); + }else{ + testTransUserRepository.deleteById(id); + } + + try { + Thread.sleep(5000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + if(count > 0){ + throw new RuntimeException("幻读抛出异常"); + } + + count = testTransUserRepository.listCount(); + System.out.println("幻读结束,记录数量:" + count); + } + @Override - public void testListTranSec(int type,String name) { + @Transactional(isolation = Isolation.SERIALIZABLE) + public void writePhantomB() { + int count = testTransUserRepository.listCount(); + System.out.println("幻读另一个事务开始,记录数量:" + count); + + try { + Thread.sleep(3000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + + count = testTransUserRepository.listCount(); + System.out.println("幻读另一个事务结束,记录数量:" + count); + } + + @Override + @Transactional(propagation = Propagation.REQUIRED) + public void writeRequireNew() { + int count = testTransUserRepository.listCount(); + System.out.println("插入前数量:" + count); + insertTestTransUser("require new",100); + + count = testTransUserRepository.listCount(); + System.out.println("插入后数量:" + count); + + TestTransUser u = testTransUserRepository.getByProperty("name","require new"); + System.out.println("查询对象:" + u); + + writeRequireNewMore(); + } + + @Override + @Transactional(propagation = Propagation.REQUIRES_NEW) + public void writeRequireNewMore() { + int count = testTransUserRepository.listCount(); + System.out.println("【子事务】查询数量:" + count); + + TestTransUser u = testTransUserRepository.getByProperty("name","require new"); + System.out.println("【子事务】查询对象:" + u); + } + + @Override + @Transactional(propagation = Propagation.NEVER) + public void writeTransMandatory() { + int count = testTransUserRepository.listCount(); + System.out.println("数量:" + count); + + writeTransMandatoryMore(); + } + + @Override + @Transactional(propagation = Propagation.MANDATORY) + public void writeTransMandatoryMore() { + int count = testTransUserRepository.listCount(); + System.out.println("【子事务】查询数量:" + count); + } + + @Override + //@Transactional(isolation=Isolation.REPEATABLE_READ) + //@Lock(value = LockModeType.WRITE) + public void writeOptimisticA(long id,int type) { + if(type == 1){ + //脏读 + writeDirtyA(id); + }else if(type == 2){ + writeRepeatA(id); + }else if(type == 3){ + writePhantomA(id,true); + } + } + + @Override + public void writeOptimisticB(long id,int type) { + if(type == 1){ + //脏读 + writeDirtyB(id); + }else if(type == 2){ + writeRepeatB(id); + }else if(type == 3){ + writePhantomB(); + } + } + + @Override + //@Transactional(isolation=Isolation.REPEATABLE_READ) + //@Lock(value = LockModeType.PESSIMISTIC_WRITE) + public void writePessimisticA(long id,int type) { + if(type == 1){ + //脏读 + writeDirtyA(id); + }else if(type == 2){ + writeRepeatA(id); + }else if(type == 3){ + writePhantomA(id,true); + } + } + + @Override + public void writePessimisticB(long id,int type) { + if(type == 1){ + //脏读 + writeDirtyB(id); + }else if(type == 2){ + writeRepeatB(id); + }else if(type == 3){ + writePhantomB(); + } + } + + @Override + public void writePatternWrong(long id,double salary) { + System.out.println("==事务并发问题=="); + TestTransUser u = testTransUserRepository.getById(id); + System.out.println("更新前:" + u.getName() + "," + u.getSalary()); + u.setSalary(salary); + System.out.println("更新后:" + u.getName() + "," + u.getSalary()); + + testTransUserRepository.update(u); + + try { + Thread.sleep(5000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + + @Override + public synchronized void writePatternSynchron(long id,double salary) { + System.out.println("==添加线程锁=="); + writePatternWrong(id,salary); + } + + @Override + public void writePatternOpti(long id,double salary) { + System.out.println("==乐观锁=="); + + try { + writePatternWrong(id, salary); + }catch(Exception e){ + System.out.println("在此处进行再次处理"); + System.out.println("乐观锁抛出异常:" + e.getMessage()); + } + } + + @Override + public void writePatternPessi(long id,double salary) { + writePatternWrong(id, salary); + } + + @Override + public void writePatternParamUpdate(long id,double salary) { + System.out.println("==通过更新属性值保证事务=="); + + TestTransUser u = testTransUserRepository.getById(id); + System.out.println("更新前:" + u.getName() + "," + u.getSalary()); + + try { + Thread.sleep(5000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + //update TestTransUser set salary = salary + :salary where name=:name; + testTransUserRepository.updateByPropertiesWithVal("id",id,"salary",salary); + System.out.println("5秒后更新:" + u.getName() + "," + u.getSalary()); } } diff --git a/modules/i3plus-core-apiservice/src/main/resources/application-docker.properties b/modules/i3plus-core-apiservice/src/main/resources/application-docker.properties index 8856ec8..7210ea7 100644 --- a/modules/i3plus-core-apiservice/src/main/resources/application-docker.properties +++ b/modules/i3plus-core-apiservice/src/main/resources/application-docker.properties @@ -106,9 +106,9 @@ impp.schedule.thread-priority=5 ################################ 其他功能设置 ################################ #redisIP -redis.hostName=192.168.1.55 +redis.hostName=redis #端口号 -redis.port=16376 +redis.port=6379 #如果有密码 redis.password= ##其他redis配置需要调整的加在此处 @@ -167,9 +167,9 @@ spring.sleuth.sampler.probability=1.0 ################ FastDfs 配置 ################ #tracker服务器ip -fastdfs.tracker_servers=tracker:7031 +fastdfs.tracker_servers=tracker:22122 # tracker的http端口 -fastdfs.http_tracker_http_port=7031 +fastdfs.http_tracker_http_port=22122 # 使用自定义工具获取文件展示地址 fastdfs.http.ui.host=http://192.168.1.56:7030 #密码 diff --git a/pom.xml b/pom.xml index dc8828d..0b4e653 100644 --- a/pom.xml +++ b/pom.xml @@ -100,6 +100,13 @@ i3plus-platform-common ${project.version} + + + i3plus.platform + i3plus-platform-plugin + ${project.version} + + i3plus.platform i3plus-platform-plugin @@ -141,6 +148,28 @@ 5.1.39 + + + com.oracle + ojdbc6 + 12.1.0.1.0 + + + + + com.microsoft.sqlserver + sqljdbc4 + 4.0 + + + + + org.postgresql + postgresql + 42.2.5 + + + org.apache.commons