From a87d9ba8a128e3d3e853b6ea62776567a2a673cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=A3=E5=9C=A3=E5=8D=8E?= <752718920@qq.com> Date: Thu, 3 Oct 2019 18:05:08 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8E=BB=E9=99=A4=E5=A4=9A=E4=BD=99=E7=9A=84ap?= =?UTF-8?q?p=E7=AD=89=E4=B8=89=E5=BC=A0=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/jsh_erp.sql | 49 - docs/华夏ERP数据库设计汇总.xlsx | Bin 84468 -> 80398 bytes docs/数据库更新记录-方便升级.txt | 8 + .../com/jsh/erp/controller/AppController.java | 273 ---- .../com/jsh/erp/datasource/entities/App.java | 515 ------- .../erp/datasource/entities/AppExample.java | 1372 ----------------- .../jsh/erp/datasource/mappers/AppMapper.java | 96 -- .../erp/datasource/mappers/AppMapperEx.java | 23 - .../com/jsh/erp/service/ResourceInfo.java | 1 - .../com/jsh/erp/service/app/AppComponent.java | 72 - .../com/jsh/erp/service/app/AppResource.java | 15 - .../com/jsh/erp/service/app/AppService.java | 254 --- .../jsh/erp/service/depot/DepotComponent.java | 1 - .../service/functions/FunctionsComponent.java | 1 - .../jsh/erp/service/unit/UnitComponent.java | 1 - .../userBusiness/UserBusinessService.java | 59 - src/main/resources/application.properties | 2 +- src/main/resources/mapper_xml/AppMapper.xml | 443 ------ src/main/resources/mapper_xml/AppMapperEx.xml | 43 - src/test/resources/generatorConfig.xml | 1 - 20 files changed, 9 insertions(+), 3220 deletions(-) delete mode 100644 src/main/java/com/jsh/erp/controller/AppController.java delete mode 100644 src/main/java/com/jsh/erp/datasource/entities/App.java delete mode 100644 src/main/java/com/jsh/erp/datasource/entities/AppExample.java delete mode 100644 src/main/java/com/jsh/erp/datasource/mappers/AppMapper.java delete mode 100644 src/main/java/com/jsh/erp/datasource/mappers/AppMapperEx.java delete mode 100644 src/main/java/com/jsh/erp/service/app/AppComponent.java delete mode 100644 src/main/java/com/jsh/erp/service/app/AppResource.java delete mode 100644 src/main/java/com/jsh/erp/service/app/AppService.java delete mode 100644 src/main/resources/mapper_xml/AppMapper.xml delete mode 100644 src/main/resources/mapper_xml/AppMapperEx.xml diff --git a/docs/jsh_erp.sql b/docs/jsh_erp.sql index b56bdc92..672a44c2 100644 --- a/docs/jsh_erp.sql +++ b/docs/jsh_erp.sql @@ -189,44 +189,6 @@ INSERT INTO `jsh_accountitem` VALUES ('95', '94', '13', null, '-66.000000', '', INSERT INTO `jsh_accountitem` VALUES ('96', '95', '13', null, '6.000000', '', '1', '0'); INSERT INTO `jsh_accountitem` VALUES ('97', '96', null, '14', '22.000000', '', null, '0'); --- ---------------------------- --- Table structure for jsh_app --- ---------------------------- -DROP TABLE IF EXISTS `jsh_app`; -CREATE TABLE `jsh_app` ( - `Id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', - `Number` varchar(50) DEFAULT NULL COMMENT '编号', - `Name` varchar(50) DEFAULT NULL COMMENT '名称', - `Type` varchar(50) DEFAULT NULL COMMENT '类型', - `Icon` varchar(50) DEFAULT NULL COMMENT '图标', - `URL` varchar(50) DEFAULT NULL COMMENT '编号', - `Width` varchar(50) DEFAULT NULL COMMENT '宽度', - `Height` varchar(50) DEFAULT NULL COMMENT '高度', - `ReSize` bit(1) DEFAULT NULL COMMENT '是否可改变大小', - `OpenMax` bit(1) DEFAULT NULL COMMENT '最大化', - `Flash` bit(1) DEFAULT NULL COMMENT '是否切换', - `ZL` varchar(50) DEFAULT NULL COMMENT '类型', - `Sort` varchar(50) DEFAULT NULL COMMENT '排序', - `Remark` varchar(200) DEFAULT NULL COMMENT '备注', - `Enabled` bit(1) DEFAULT NULL COMMENT '是否启用', - `delete_Flag` varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除', - PRIMARY KEY (`Id`) -) ENGINE=InnoDB AUTO_INCREMENT=29 DEFAULT CHARSET=utf8 COMMENT='应用表'; - --- ---------------------------- --- Records of jsh_app --- ---------------------------- -INSERT INTO `jsh_app` VALUES ('3', '00', '系统管理', 'app', '0000000004.png', '', '1350', '630', '', '\0', '\0', 'desk', '198', '', '', '0'); -INSERT INTO `jsh_app` VALUES ('6', '02', '个人信息', 'app', '0000000005.png', '../user/password.html', '600', '400', '\0', '\0', '\0', 'dock', '200', '', '', '0'); -INSERT INTO `jsh_app` VALUES ('7', '01', '基础数据', 'app', '0000000006.png', '', '1350', '630', '', '\0', '\0', 'desk', '120', '', '', '0'); -INSERT INTO `jsh_app` VALUES ('22', '03', '报表查询', 'app', '0000000022.png', '', '1350', '630', '', '\0', '\0', 'desk', '115', '', '', '0'); -INSERT INTO `jsh_app` VALUES ('23', '04', '零售管理', 'app', 'resizeApi.png', '', '1350', '630', '', '\0', '', 'desk', '025', '', '', '0'); -INSERT INTO `jsh_app` VALUES ('24', '05', '采购管理', 'app', 'buy.png', '', '1350', '630', '', '\0', '', 'desk', '027', '', '', '0'); -INSERT INTO `jsh_app` VALUES ('25', '06', '销售管理', 'app', 'sale.png', '', '1350', '630', '', '\0', '', 'desk', '028', '', '', '0'); -INSERT INTO `jsh_app` VALUES ('26', '07', '财务管理', 'app', 'money.png', '', '1350', '630', '', '\0', '\0', 'desk', '035', '', '', '0'); -INSERT INTO `jsh_app` VALUES ('27', '08', '仓库管理', 'app', 'depot.png', '', '1350', '630', '', '\0', '', 'desk', '029', '', '', '0'); -INSERT INTO `jsh_app` VALUES ('28', '09', '新手引导', 'app', 'userHelp.png', '../user/userHelp.html', '1000', '500', '\0', '\0', '\0', 'dock', '210', '', '', '0'); - -- ---------------------------- -- Table structure for jsh_depot -- ---------------------------- @@ -677,7 +639,6 @@ CREATE TABLE `jsh_functions` ( -- Records of jsh_functions -- ---------------------------- INSERT INTO `jsh_functions` VALUES ('1', '0001', '系统管理', '0', '', '', '0910', '', '电脑版', '', 'icon-settings', '0'); -INSERT INTO `jsh_functions` VALUES ('12', '000101', '应用管理', '0001', '/pages/manage/app.html', '\0', '0132', '', '电脑版', '', 'icon-notebook', '0'); INSERT INTO `jsh_functions` VALUES ('13', '000102', '角色管理', '0001', '/pages/manage/role.html', '\0', '0130', '', '电脑版', '', 'icon-notebook', '0'); INSERT INTO `jsh_functions` VALUES ('14', '000103', '用户管理', '0001', '/pages/manage/user.html', '\0', '0140', '', '电脑版', null, 'icon-notebook', '0'); INSERT INTO `jsh_functions` VALUES ('15', '000104', '日志管理', '0001', '/pages/manage/log.html', '\0', '0160', '', '电脑版', null, 'icon-notebook', '0'); @@ -1797,14 +1758,9 @@ CREATE TABLE `jsh_userbusiness` ( -- ---------------------------- -- Records of jsh_userbusiness -- ---------------------------- -INSERT INTO `jsh_userbusiness` VALUES ('1', 'RoleAPP', '4', '[3][6][7][22][23][24][25][26][27][28]', null, '0'); -INSERT INTO `jsh_userbusiness` VALUES ('2', 'RoleAPP', '5', '[8][7][6]', null, '0'); -INSERT INTO `jsh_userbusiness` VALUES ('3', 'RoleAPP', '6', '[23][24][25][27][26][22][7][3][6]', null, '0'); -INSERT INTO `jsh_userbusiness` VALUES ('4', 'RoleAPP', '7', '[21][1][8][11]', null, '0'); INSERT INTO `jsh_userbusiness` VALUES ('5', 'RoleFunctions', '4', '[245][13][12][16][243][14][15][234][236][22][23][220][240][25][217][218][26][194][195][31][59][207][208][209][226][227][228][229][235][237][244][210][211][241][33][199][242][41][200][201][202][40][232][233][197][203][204][205][206][212][246]', '[{\"funId\":\"25\",\"btnStr\":\"1\"},{\"funId\":\"217\",\"btnStr\":\"1\"},{\"funId\":\"218\",\"btnStr\":\"1\"},{\"funId\":\"241\",\"btnStr\":\"3\"},{\"funId\":\"242\",\"btnStr\":\"3\"}]', '0'); INSERT INTO `jsh_userbusiness` VALUES ('6', 'RoleFunctions', '5', '[22][23][25][26][194][195][31][33][200][201][41][199][202]', null, '0'); INSERT INTO `jsh_userbusiness` VALUES ('7', 'RoleFunctions', '6', '[22][23][220][240][25][217][218][26][194][195][31][59][207][208][209][226][227][228][229][235][237][210][211][241][33][199][242][41][200][201][202][40][232][233][197][203][204][205][206][212]', '[{\"funId\":\"33\",\"btnStr\":\"4\"}]', '0'); -INSERT INTO `jsh_userbusiness` VALUES ('8', 'RoleAPP', '8', '[21][1][8][11][10]', null, '0'); INSERT INTO `jsh_userbusiness` VALUES ('9', 'RoleFunctions', '7', '[168][13][12][16][14][15][189][18][19][132]', null, '0'); INSERT INTO `jsh_userbusiness` VALUES ('10', 'RoleFunctions', '8', '[168][13][12][16][14][15][189][18][19][132][22][23][25][26][27][157][158][155][156][125][31][127][126][128][33][34][35][36][37][39][40][41][42][43][46][47][48][49][50][51][52][53][54][55][56][57][192][59][60][61][62][63][65][66][68][69][70][71][73][74][76][77][79][191][81][82][83][85][89][161][86][176][165][160][28][134][91][92][29][94][95][97][104][99][100][101][102][105][107][108][110][111][113][114][116][117][118][120][121][131][135][123][122][20][130][146][147][138][148][149][153][140][145][184][152][143][170][171][169][166][167][163][164][172][173][179][178][181][182][183][186][187]', null, '0'); INSERT INTO `jsh_userbusiness` VALUES ('11', 'RoleFunctions', '9', '[168][13][12][16][14][15][189][18][19][132][22][23][25][26][27][157][158][155][156][125][31][127][126][128][33][34][35][36][37][39][40][41][42][43][46][47][48][49][50][51][52][53][54][55][56][57][192][59][60][61][62][63][65][66][68][69][70][71][73][74][76][77][79][191][81][82][83][85][89][161][86][176][165][160][28][134][91][92][29][94][95][97][104][99][100][101][102][105][107][108][110][111][113][114][116][117][118][120][121][131][135][123][122][20][130][146][147][138][148][149][153][140][145][184][152][143][170][171][169][166][167][163][164][172][173][179][178][181][182][183][186][187][188]', null, '0'); @@ -1826,7 +1782,6 @@ INSERT INTO `jsh_userbusiness` VALUES ('27', 'UserCustomer', '63', '[58]', null, INSERT INTO `jsh_userbusiness` VALUES ('28', 'UserDepot', '96', '[7]', null, '0'); INSERT INTO `jsh_userbusiness` VALUES ('29', 'UserRole', '96', '[6]', null, '0'); INSERT INTO `jsh_userbusiness` VALUES ('30', 'UserRole', '113', '[10]', null, '0'); -INSERT INTO `jsh_userbusiness` VALUES ('31', 'RoleAPP', '10', '[3][6][7][22][23][24][25][26][27][28]', null, '0'); INSERT INTO `jsh_userbusiness` VALUES ('32', 'RoleFunctions', '10', '[245][13][243][14][15][234][22][23][220][240][25][217][218][26][194][195][31][59][207][208][209][226][227][228][229][235][237][244][210][211][241][33][199][242][41][200][201][202][40][232][233][197][203][204][205][206][212][246]', '[{\"funId\":\"25\",\"btnStr\":\"1\"},{\"funId\":\"217\",\"btnStr\":\"1\"},{\"funId\":\"218\",\"btnStr\":\"1\"},{\"funId\":\"241\",\"btnStr\":\"3\"},{\"funId\":\"242\",\"btnStr\":\"3\"}]', '0'); INSERT INTO `jsh_userbusiness` VALUES ('34', 'UserRole', '115', '[10]', null, '0'); INSERT INTO `jsh_userbusiness` VALUES ('35', 'UserRole', '117', '[10]', null, '0'); @@ -1837,13 +1792,9 @@ INSERT INTO `jsh_userbusiness` VALUES ('39', 'UserDepot', '120', '[7][8][9][10][ INSERT INTO `jsh_userbusiness` VALUES ('40', 'UserCustomer', '120', '[52][48][6][5][2]', null, '0'); INSERT INTO `jsh_userbusiness` VALUES ('41', 'RoleFunctions', '12', '', null, '0'); INSERT INTO `jsh_userbusiness` VALUES ('48', 'RoleFunctions', '13', '[59][207][208][209][226][227][228][229][235][237][210][211][241][33][199][242][41][200]', null, '0'); -INSERT INTO `jsh_userbusiness` VALUES ('49', 'RoleAPP', '13', '[22][23][24][25]', null, '0'); -INSERT INTO `jsh_userbusiness` VALUES ('50', 'RoleAPP', '64', '[3]', null, '0'); INSERT INTO `jsh_userbusiness` VALUES ('51', 'UserRole', '74', '[10]', null, '0'); INSERT INTO `jsh_userbusiness` VALUES ('52', 'UserDepot', '121', '[13]', null, '0'); -INSERT INTO `jsh_userbusiness` VALUES ('53', 'RoleAPP', '121', '[3]', null, '0'); INSERT INTO `jsh_userbusiness` VALUES ('54', 'UserDepot', '115', '[13]', null, '0'); -INSERT INTO `jsh_userbusiness` VALUES ('55', 'RoleAPP', '115', '[3]', null, '0'); INSERT INTO `jsh_userbusiness` VALUES ('56', 'UserCustomer', '115', '[56]', null, '0'); INSERT INTO `jsh_userbusiness` VALUES ('57', 'UserCustomer', '121', '[56]', null, '0'); INSERT INTO `jsh_userbusiness` VALUES ('58', 'UserRole', '121', '[15]', null, '0'); diff --git a/docs/华夏ERP数据库设计汇总.xlsx b/docs/华夏ERP数据库设计汇总.xlsx index fa716f7dcf54d209edd766572db3879023de4f70..2c7686ac8b03e07238d0d3994c92febb4bc2b9ad 100644 GIT binary patch delta 69344 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

WRNGm&C1Lh~+vf030=yu<-=6RUojFnU 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

Q=UwO2l623vsNQ_)5zEhFe_Fn! z?w#iTyA7`~CiSsPC%(#SbYGyn304u{3`UQ1Z*BBc&dvE~`Z<+M%MN>T9j=3oe&!N+ z7to=EH(zE~KTtX-OXl;Rn|qWevrdtszg*wB(l{Y4$8`irLC z2|F00`11EEXeel=wz)E$W(ya`GI`#!4sK~EU;Z8zlsACs`RbOA^SA8Yzn`4sNn98= zdYyzd;_4poHjXZ+Oj7OBeD$6^>%k+jScU8yXzov5vH)&)+0l)|K5IzUd00oK`16+R z#d?BR)o|uF&c`^H+pDBf6kl&1ON{)HXLqMAhaYDaWth9Bb+?UNef`Z$Mnm4d@P_*J zUmNxDP5wo-6gQp2c{jzGk_%?cC!WaFubm67iH3|+NQs$Q73-Jhz&d0tk*oel^9cxN7MV zy`g8p6PRLH-}0oVNx+c^rK5G#yEctE)ER6KPcspTx7ljK#=6xpvqfJDG^luS8 zu1PR|ySf_e{d$HuvR&Vyt=GMEY{<`Z*R&0RMZLhlCvBg;eU!1q#R1rOy?fb4(~4+- zjy}|G67L?v(>v3kEK#ht@gBKw>7Z1%zN4{uU$9cBr~bgQm>{>YS<~!XZ?wybxgfXY z*x0qex)jZmwkYYJzJ{VC2TfDOGyP-3m$ZwQm+f!w>hX5=L^01-vR7X>6OT=>)G~7< zyu1I-?#QOV4S~0V9e#(aKLkDO8*yo6Y%S$maFuJGKcv^^jTI@hxeON$`8x2w<`8KQ zA@xbC@GIkdOx{oba^n$8Rhc@wWJ-=xsY+NskFEN8B({8JMBZDASYkX3x4%+;V_te? z3s?DrvQUHN%YEFK*RzKGrMIp?sk`nvqneuJL)pJ|MhO4<;g`)*9ZvaMHpN%83I>L~ zrbm#sppNMl-Q$G*IGr)o*4JF8?s zDYD;K3a`~)4)x0}xNs<8QJE<`_1Pk1mZ|u}2d{Ic>X&ZL+GSrQnez zosgo@h4@GK!{=oL*sYE|TgZQ@z`CX#T$P;L$?PCU@lRkamnsr{3iE#}8c624wBkou zKj>6aXYR+cnL1Qg;NrNE@u~e~Y9L|GTB^BM-WUHW+m`fl%Clh1jzdlBRg%`(2=AW3 z!dFh8w9_^Siyqo|lc0rHap)1xX_n2w%IugXG2t6+D76rT{RWHMjSUB4*88wK`qmChR_ezJner`&=k(P3g|8R35;)yO+H=}E|k5RSg*Oo z=_`D(sInG5v2PayTZUY!@n5@cWE2mg7QQ|DkT{v72`H@PhFX?^I zPfScF)O2Z|Jb_rO8C>D=-LEK>KqQPDFs9@rQwV2ktJjHZ=qU%>OXtNlo$%uMsOkQD zD1OrLAG+h7P~{AAC4sFC%}=^+ru)1(YWn_ijA^5s`jaWzg#xPRxkSysqY9{=_y3%H zF0pajw9zM8MZx8zWaslMg0Rf`(s8K{!q5ob+!R9cZkMgIARkbIhr3c6m1cVR+ zzsC;4f%1^S5Y>^p^@o9__aE~Iy zB|=}U|9f2~Cu^4S}#Bj7(y z3`?hBeN?p*b$jG=z-=di$nKm}I*W!0r~~XY6kzZiVDez&z7tE$p<$P(SbF41sc!(Q zW~awu$y7`Z)2i>@U_ea|4tk=hh$i%zDr9B0b@(>LGyrZktYzEmzR6 zV1O}hw<(5S0AXZl4Q;%UYQCd|=?;%KzMx?!4S@abz(+re^2==u!oe?;fX^3uh&Vxz zW>6M=Xwuczg)c%$lL=@%056KZ&W~1 z?0hg6VS)xoIAinO{?FhdFgH@tdV3vjsOxZcFNI49JO{0)5U@ cQh2+gp}8p|c(%YzfbR|P>bj^2-oS|e0gqk_ roleList = userBusinessService.findRoleByUserId(userId); - String roles = null; - if(roleList!=null && roleList.size()>0 && roleList.get(0)!=null){ - roles = roleList.get(0).getValue(); - } - if(roles!=null) { - roles = roles.replaceAll("\\]\\[",",").replaceAll("\\]","").replaceAll("\\[",""); //转为逗号隔开的 - } - List appList = userBusinessService.findAppByRoles(roles); - String apps = null; - if(appList!=null && appList.size()>0 && appList.get(0)!=null){ - apps = appList.get(0).getValue(); - } - if(apps!=null) { - apps = apps.replaceAll("\\]\\[",",").replaceAll("\\]","").replaceAll("\\[",""); //转为逗号隔开的 - } - JSONObject obj = new JSONObject(); - List dockList = appService.findAppInIds(apps,"dock"); - JSONArray dockArray = new JSONArray(); - if (null != dockList) { - for (App app : dockList) { - JSONObject item = new JSONObject(); - item.put("id", app.getId()); - item.put("title", app.getName()); - item.put("type", app.getType()); - item.put("icon", "../../upload/images/deskIcon/" + app.getIcon()); - item.put("url", app.getUrl()); - item.put("width", app.getWidth()); - item.put("height", app.getHeight()); - item.put("isresize", app.getResize()); - item.put("isopenmax", app.getOpenmax()); - item.put("isflash", app.getFlash()); - dockArray.add(item); - } - } - obj.put("dock",dockArray); - - List deskList = appService.findAppInIds(apps,"desk"); - JSONArray deskArray = new JSONArray(); - if (null != deskList) { - for (App app : deskList) { - JSONObject item = new JSONObject(); - item.put("id", app.getId()); - item.put("title", app.getName()); - item.put("type", app.getType()); - item.put("icon", "../../upload/images/deskIcon/" + app.getIcon()); - item.put("url", "../../pages/common/menu.html?appID=" + app.getNumber() + "&id=" + app.getId()); - item.put("width", app.getWidth()); - item.put("height", app.getHeight()); - item.put("isresize", app.getResize()); - item.put("isopenmax", app.getOpenmax()); - item.put("isflash", app.getFlash()); - deskArray.add(item); - } - } - obj.put("desk",deskArray); - return obj; - } - - @GetMapping(value = "/findDesk") - public JSONObject findDesk(HttpServletRequest request)throws Exception { - JSONObject obj = new JSONObject(); - List dockList = appService.findDock(); - JSONArray dockArray = new JSONArray(); - if (null != dockList) { - for (App app : dockList) { - JSONObject item = new JSONObject(); - item.put("id", app.getId()); - item.put("title", app.getName()); - item.put("type", app.getType()); - item.put("icon", "../../upload/images/deskIcon/" + app.getIcon()); - item.put("url", app.getUrl()); - item.put("width", app.getWidth()); - item.put("height", app.getHeight()); - item.put("isresize", app.getResize()); - item.put("isopenmax", app.getOpenmax()); - item.put("isflash", app.getFlash()); - dockArray.add(item); - } - } - obj.put("dock",dockArray); - - List deskList = appService.findDesk(); - JSONArray deskArray = new JSONArray(); - if (null != deskList) { - for (App app : deskList) { - JSONObject item = new JSONObject(); - item.put("id", app.getId()); - item.put("title", app.getName()); - item.put("type", app.getType()); - item.put("icon", "../../upload/images/deskIcon/" + app.getIcon()); - item.put("url", "../../pages/common/menu.html?appID=" + app.getNumber() + "&id=" + app.getId()); - item.put("width", app.getWidth()); - item.put("height", app.getHeight()); - item.put("isresize", app.getResize()); - item.put("isopenmax", app.getOpenmax()); - item.put("isflash", app.getFlash()); - deskArray.add(item); - } - } - obj.put("desk",deskArray); - return obj; - } - - /** - * 角色对应应用显示 - * @param request - * @return - */ - @PostMapping(value = "/findRoleAPP") - public JSONArray findRoleAPP(@RequestParam("UBType") String type, @RequestParam("UBKeyId") String keyId, - HttpServletRequest request)throws Exception { - JSONArray arr = new JSONArray(); - try { - List dataListApp = appService.findRoleAPP(); - //开始拼接json数据 - JSONObject outer = new JSONObject(); - outer.put("id", 1); - outer.put("text", "应用列表"); - outer.put("state", "open"); - //存放数据json数组 - JSONArray dataArray = new JSONArray(); - if (null != dataListApp) { - //根据条件从列表里面移除"系统管理" - List dataList = new ArrayList(); - for (App appOne : dataListApp) { - //从session中获取租户id - String loginName = null; - Object userInfo = request.getSession().getAttribute("user"); - if(userInfo != null) { - User user = (User) userInfo; - loginName = user.getLoginame(); - } - if(("admin").equals(loginName)) { - dataList.add(appOne); - } else { - if(!("系统管理").equals(appOne.getName())) { - dataList.add(appOne); - } - } - } - - //筛选应用列表 - for (App app : dataList) { - JSONObject item = new JSONObject(); - item.put("id", app.getId()); - item.put("text", app.getName()); - //勾选判断1 - Boolean flag = false; - try { - flag = userBusinessService.checkIsUserBusinessExist(type, keyId, "[" + app.getId().toString() + "]"); - } catch (Exception e) { - logger.error(">>>>>>>>>>>>>>>>>设置角色对应的应用:类型" + type + " KeyId为: " + keyId + " 存在异常!"); - } - if (flag == true) { - item.put("checked", true); - } - //结束 - dataArray.add(item); - } - } - outer.put("children", dataArray); - arr.add(outer); - } catch (Exception e) { - e.printStackTrace(); - } - return arr; - } - - /** - * 上传图片 - * @param fileInfo - * @param request - */ - @PostMapping(value = "/uploadImg") - public BaseResponseInfo uploadImg(MultipartFile fileInfo, @RequestParam("fileInfoName") String fileName, - HttpServletRequest request)throws Exception { - BaseResponseInfo res = new BaseResponseInfo(); - try { - if (fileInfo != null) { - String basePath = request.getSession().getServletContext().getRealPath("/"); //默认windows文件路径,linux环境下生成的目录与项目同级,而不是下级 - String path = basePath + "upload/images/deskIcon/"; //windows环境下的路径 - Properties pro = System.getProperties(); - String osName = pro.getProperty("os.name");//获得当前操作系统的名称 - if("Linux".equals(osName) || "linux".equals(osName) || "LINUX".equals(osName)){ - path = basePath + "/upload/images/deskIcon/"; //linux环境下的路径 - } - FileUtils.SaveFileFromInputStream(fileInfo.getInputStream(), path, fileName); - res.code = 200; - res.data = "上传图片成功"; - } - } catch (FileNotFoundException e) { - e.printStackTrace(); - res.code = 500; - res.data = "获取图片失败"; - } catch (IOException e) { - e.printStackTrace(); - res.code = 500; - res.data = "上传图片失败"; - } - return res; - } - /** - * create by: qiankunpingtai - * website:https://qiankunpingtai.cn - * description: - * 批量删除应用信息 - * create time: 2019/3/29 11:15 - * @Param: ids - * @return java.lang.Object - */ - @RequestMapping(value = "/batchDeleteAppByIds") - public Object batchDeleteAppByIds(@RequestParam("ids") String ids) throws Exception { - - JSONObject result = ExceptionConstants.standardSuccess(); - int i= appService.batchDeleteAppByIds(ids); - if(i<1){ - logger.error("异常码[{}],异常提示[{}],参数,ids[{}]", - ExceptionConstants.APP_DELETE_FAILED_CODE,ExceptionConstants.APP_DELETE_FAILED_MSG,ids); - throw new BusinessRunTimeException(ExceptionConstants.APP_DELETE_FAILED_CODE, - ExceptionConstants.APP_DELETE_FAILED_MSG); - } - return result; - } -} diff --git a/src/main/java/com/jsh/erp/datasource/entities/App.java b/src/main/java/com/jsh/erp/datasource/entities/App.java deleted file mode 100644 index c5d30bf6..00000000 --- a/src/main/java/com/jsh/erp/datasource/entities/App.java +++ /dev/null @@ -1,515 +0,0 @@ -package com.jsh.erp.datasource.entities; - -public class App { - /** - * This field was generated by MyBatis Generator. - * This field corresponds to the database column jsh_app.Id - * - * @mbggenerated - */ - private Long id; - - /** - * This field was generated by MyBatis Generator. - * This field corresponds to the database column jsh_app.Number - * - * @mbggenerated - */ - private String number; - - /** - * This field was generated by MyBatis Generator. - * This field corresponds to the database column jsh_app.Name - * - * @mbggenerated - */ - private String name; - - /** - * This field was generated by MyBatis Generator. - * This field corresponds to the database column jsh_app.Type - * - * @mbggenerated - */ - private String type; - - /** - * This field was generated by MyBatis Generator. - * This field corresponds to the database column jsh_app.Icon - * - * @mbggenerated - */ - private String icon; - - /** - * This field was generated by MyBatis Generator. - * This field corresponds to the database column jsh_app.URL - * - * @mbggenerated - */ - private String url; - - /** - * This field was generated by MyBatis Generator. - * This field corresponds to the database column jsh_app.Width - * - * @mbggenerated - */ - private String width; - - /** - * This field was generated by MyBatis Generator. - * This field corresponds to the database column jsh_app.Height - * - * @mbggenerated - */ - private String height; - - /** - * This field was generated by MyBatis Generator. - * This field corresponds to the database column jsh_app.ReSize - * - * @mbggenerated - */ - private Boolean resize; - - /** - * This field was generated by MyBatis Generator. - * This field corresponds to the database column jsh_app.OpenMax - * - * @mbggenerated - */ - private Boolean openmax; - - /** - * This field was generated by MyBatis Generator. - * This field corresponds to the database column jsh_app.Flash - * - * @mbggenerated - */ - private Boolean flash; - - /** - * This field was generated by MyBatis Generator. - * This field corresponds to the database column jsh_app.ZL - * - * @mbggenerated - */ - private String zl; - - /** - * This field was generated by MyBatis Generator. - * This field corresponds to the database column jsh_app.Sort - * - * @mbggenerated - */ - private String sort; - - /** - * This field was generated by MyBatis Generator. - * This field corresponds to the database column jsh_app.Remark - * - * @mbggenerated - */ - private String remark; - - /** - * This field was generated by MyBatis Generator. - * This field corresponds to the database column jsh_app.Enabled - * - * @mbggenerated - */ - private Boolean enabled; - - /** - * This field was generated by MyBatis Generator. - * This field corresponds to the database column jsh_app.delete_Flag - * - * @mbggenerated - */ - private String deleteFlag; - - /** - * This method was generated by MyBatis Generator. - * This method returns the value of the database column jsh_app.Id - * - * @return the value of jsh_app.Id - * - * @mbggenerated - */ - public Long getId() { - return id; - } - - /** - * This method was generated by MyBatis Generator. - * This method sets the value of the database column jsh_app.Id - * - * @param id the value for jsh_app.Id - * - * @mbggenerated - */ - public void setId(Long id) { - this.id = id; - } - - /** - * This method was generated by MyBatis Generator. - * This method returns the value of the database column jsh_app.Number - * - * @return the value of jsh_app.Number - * - * @mbggenerated - */ - public String getNumber() { - return number; - } - - /** - * This method was generated by MyBatis Generator. - * This method sets the value of the database column jsh_app.Number - * - * @param number the value for jsh_app.Number - * - * @mbggenerated - */ - public void setNumber(String number) { - this.number = number == null ? null : number.trim(); - } - - /** - * This method was generated by MyBatis Generator. - * This method returns the value of the database column jsh_app.Name - * - * @return the value of jsh_app.Name - * - * @mbggenerated - */ - public String getName() { - return name; - } - - /** - * This method was generated by MyBatis Generator. - * This method sets the value of the database column jsh_app.Name - * - * @param name the value for jsh_app.Name - * - * @mbggenerated - */ - public void setName(String name) { - this.name = name == null ? null : name.trim(); - } - - /** - * This method was generated by MyBatis Generator. - * This method returns the value of the database column jsh_app.Type - * - * @return the value of jsh_app.Type - * - * @mbggenerated - */ - public String getType() { - return type; - } - - /** - * This method was generated by MyBatis Generator. - * This method sets the value of the database column jsh_app.Type - * - * @param type the value for jsh_app.Type - * - * @mbggenerated - */ - public void setType(String type) { - this.type = type == null ? null : type.trim(); - } - - /** - * This method was generated by MyBatis Generator. - * This method returns the value of the database column jsh_app.Icon - * - * @return the value of jsh_app.Icon - * - * @mbggenerated - */ - public String getIcon() { - return icon; - } - - /** - * This method was generated by MyBatis Generator. - * This method sets the value of the database column jsh_app.Icon - * - * @param icon the value for jsh_app.Icon - * - * @mbggenerated - */ - public void setIcon(String icon) { - this.icon = icon == null ? null : icon.trim(); - } - - /** - * This method was generated by MyBatis Generator. - * This method returns the value of the database column jsh_app.URL - * - * @return the value of jsh_app.URL - * - * @mbggenerated - */ - public String getUrl() { - return url; - } - - /** - * This method was generated by MyBatis Generator. - * This method sets the value of the database column jsh_app.URL - * - * @param url the value for jsh_app.URL - * - * @mbggenerated - */ - public void setUrl(String url) { - this.url = url == null ? null : url.trim(); - } - - /** - * This method was generated by MyBatis Generator. - * This method returns the value of the database column jsh_app.Width - * - * @return the value of jsh_app.Width - * - * @mbggenerated - */ - public String getWidth() { - return width; - } - - /** - * This method was generated by MyBatis Generator. - * This method sets the value of the database column jsh_app.Width - * - * @param width the value for jsh_app.Width - * - * @mbggenerated - */ - public void setWidth(String width) { - this.width = width == null ? null : width.trim(); - } - - /** - * This method was generated by MyBatis Generator. - * This method returns the value of the database column jsh_app.Height - * - * @return the value of jsh_app.Height - * - * @mbggenerated - */ - public String getHeight() { - return height; - } - - /** - * This method was generated by MyBatis Generator. - * This method sets the value of the database column jsh_app.Height - * - * @param height the value for jsh_app.Height - * - * @mbggenerated - */ - public void setHeight(String height) { - this.height = height == null ? null : height.trim(); - } - - /** - * This method was generated by MyBatis Generator. - * This method returns the value of the database column jsh_app.ReSize - * - * @return the value of jsh_app.ReSize - * - * @mbggenerated - */ - public Boolean getResize() { - return resize; - } - - /** - * This method was generated by MyBatis Generator. - * This method sets the value of the database column jsh_app.ReSize - * - * @param resize the value for jsh_app.ReSize - * - * @mbggenerated - */ - public void setResize(Boolean resize) { - this.resize = resize; - } - - /** - * This method was generated by MyBatis Generator. - * This method returns the value of the database column jsh_app.OpenMax - * - * @return the value of jsh_app.OpenMax - * - * @mbggenerated - */ - public Boolean getOpenmax() { - return openmax; - } - - /** - * This method was generated by MyBatis Generator. - * This method sets the value of the database column jsh_app.OpenMax - * - * @param openmax the value for jsh_app.OpenMax - * - * @mbggenerated - */ - public void setOpenmax(Boolean openmax) { - this.openmax = openmax; - } - - /** - * This method was generated by MyBatis Generator. - * This method returns the value of the database column jsh_app.Flash - * - * @return the value of jsh_app.Flash - * - * @mbggenerated - */ - public Boolean getFlash() { - return flash; - } - - /** - * This method was generated by MyBatis Generator. - * This method sets the value of the database column jsh_app.Flash - * - * @param flash the value for jsh_app.Flash - * - * @mbggenerated - */ - public void setFlash(Boolean flash) { - this.flash = flash; - } - - /** - * This method was generated by MyBatis Generator. - * This method returns the value of the database column jsh_app.ZL - * - * @return the value of jsh_app.ZL - * - * @mbggenerated - */ - public String getZl() { - return zl; - } - - /** - * This method was generated by MyBatis Generator. - * This method sets the value of the database column jsh_app.ZL - * - * @param zl the value for jsh_app.ZL - * - * @mbggenerated - */ - public void setZl(String zl) { - this.zl = zl == null ? null : zl.trim(); - } - - /** - * This method was generated by MyBatis Generator. - * This method returns the value of the database column jsh_app.Sort - * - * @return the value of jsh_app.Sort - * - * @mbggenerated - */ - public String getSort() { - return sort; - } - - /** - * This method was generated by MyBatis Generator. - * This method sets the value of the database column jsh_app.Sort - * - * @param sort the value for jsh_app.Sort - * - * @mbggenerated - */ - public void setSort(String sort) { - this.sort = sort == null ? null : sort.trim(); - } - - /** - * This method was generated by MyBatis Generator. - * This method returns the value of the database column jsh_app.Remark - * - * @return the value of jsh_app.Remark - * - * @mbggenerated - */ - public String getRemark() { - return remark; - } - - /** - * This method was generated by MyBatis Generator. - * This method sets the value of the database column jsh_app.Remark - * - * @param remark the value for jsh_app.Remark - * - * @mbggenerated - */ - public void setRemark(String remark) { - this.remark = remark == null ? null : remark.trim(); - } - - /** - * This method was generated by MyBatis Generator. - * This method returns the value of the database column jsh_app.Enabled - * - * @return the value of jsh_app.Enabled - * - * @mbggenerated - */ - public Boolean getEnabled() { - return enabled; - } - - /** - * This method was generated by MyBatis Generator. - * This method sets the value of the database column jsh_app.Enabled - * - * @param enabled the value for jsh_app.Enabled - * - * @mbggenerated - */ - public void setEnabled(Boolean enabled) { - this.enabled = enabled; - } - - /** - * This method was generated by MyBatis Generator. - * This method returns the value of the database column jsh_app.delete_Flag - * - * @return the value of jsh_app.delete_Flag - * - * @mbggenerated - */ - public String getDeleteFlag() { - return deleteFlag; - } - - /** - * This method was generated by MyBatis Generator. - * This method sets the value of the database column jsh_app.delete_Flag - * - * @param deleteFlag the value for jsh_app.delete_Flag - * - * @mbggenerated - */ - public void setDeleteFlag(String deleteFlag) { - this.deleteFlag = deleteFlag == null ? null : deleteFlag.trim(); - } -} \ No newline at end of file diff --git a/src/main/java/com/jsh/erp/datasource/entities/AppExample.java b/src/main/java/com/jsh/erp/datasource/entities/AppExample.java deleted file mode 100644 index ed21763a..00000000 --- a/src/main/java/com/jsh/erp/datasource/entities/AppExample.java +++ /dev/null @@ -1,1372 +0,0 @@ -package com.jsh.erp.datasource.entities; - -import java.util.ArrayList; -import java.util.List; - -public class AppExample { - /** - * This field was generated by MyBatis Generator. - * This field corresponds to the database table jsh_app - * - * @mbggenerated - */ - protected String orderByClause; - - /** - * This field was generated by MyBatis Generator. - * This field corresponds to the database table jsh_app - * - * @mbggenerated - */ - protected boolean distinct; - - /** - * This field was generated by MyBatis Generator. - * This field corresponds to the database table jsh_app - * - * @mbggenerated - */ - protected List oredCriteria; - - /** - * This method was generated by MyBatis Generator. - * This method corresponds to the database table jsh_app - * - * @mbggenerated - */ - public AppExample() { - oredCriteria = new ArrayList(); - } - - /** - * This method was generated by MyBatis Generator. - * This method corresponds to the database table jsh_app - * - * @mbggenerated - */ - public void setOrderByClause(String orderByClause) { - this.orderByClause = orderByClause; - } - - /** - * This method was generated by MyBatis Generator. - * This method corresponds to the database table jsh_app - * - * @mbggenerated - */ - public String getOrderByClause() { - return orderByClause; - } - - /** - * This method was generated by MyBatis Generator. - * This method corresponds to the database table jsh_app - * - * @mbggenerated - */ - public void setDistinct(boolean distinct) { - this.distinct = distinct; - } - - /** - * This method was generated by MyBatis Generator. - * This method corresponds to the database table jsh_app - * - * @mbggenerated - */ - public boolean isDistinct() { - return distinct; - } - - /** - * This method was generated by MyBatis Generator. - * This method corresponds to the database table jsh_app - * - * @mbggenerated - */ - public List getOredCriteria() { - return oredCriteria; - } - - /** - * This method was generated by MyBatis Generator. - * This method corresponds to the database table jsh_app - * - * @mbggenerated - */ - public void or(Criteria criteria) { - oredCriteria.add(criteria); - } - - /** - * This method was generated by MyBatis Generator. - * This method corresponds to the database table jsh_app - * - * @mbggenerated - */ - public Criteria or() { - Criteria criteria = createCriteriaInternal(); - oredCriteria.add(criteria); - return criteria; - } - - /** - * This method was generated by MyBatis Generator. - * This method corresponds to the database table jsh_app - * - * @mbggenerated - */ - public Criteria createCriteria() { - Criteria criteria = createCriteriaInternal(); - if (oredCriteria.size() == 0) { - oredCriteria.add(criteria); - } - return criteria; - } - - /** - * This method was generated by MyBatis Generator. - * This method corresponds to the database table jsh_app - * - * @mbggenerated - */ - protected Criteria createCriteriaInternal() { - Criteria criteria = new Criteria(); - return criteria; - } - - /** - * This method was generated by MyBatis Generator. - * This method corresponds to the database table jsh_app - * - * @mbggenerated - */ - public void clear() { - oredCriteria.clear(); - orderByClause = null; - distinct = false; - } - - /** - * This class was generated by MyBatis Generator. - * This class corresponds to the database table jsh_app - * - * @mbggenerated - */ - protected abstract static class GeneratedCriteria { - protected List criteria; - - protected GeneratedCriteria() { - super(); - criteria = new ArrayList(); - } - - public boolean isValid() { - return criteria.size() > 0; - } - - public List getAllCriteria() { - return criteria; - } - - public List getCriteria() { - return criteria; - } - - protected void addCriterion(String condition) { - if (condition == null) { - throw new RuntimeException("Value for condition cannot be null"); - } - criteria.add(new Criterion(condition)); - } - - protected void addCriterion(String condition, Object value, String property) { - if (value == null) { - throw new RuntimeException("Value for " + property + " cannot be null"); - } - criteria.add(new Criterion(condition, value)); - } - - protected void addCriterion(String condition, Object value1, Object value2, String property) { - if (value1 == null || value2 == null) { - throw new RuntimeException("Between values for " + property + " cannot be null"); - } - criteria.add(new Criterion(condition, value1, value2)); - } - - public Criteria andIdIsNull() { - addCriterion("Id is null"); - return (Criteria) this; - } - - public Criteria andIdIsNotNull() { - addCriterion("Id is not null"); - return (Criteria) this; - } - - public Criteria andIdEqualTo(Long value) { - addCriterion("Id =", value, "id"); - return (Criteria) this; - } - - public Criteria andIdNotEqualTo(Long value) { - addCriterion("Id <>", value, "id"); - return (Criteria) this; - } - - public Criteria andIdGreaterThan(Long value) { - addCriterion("Id >", value, "id"); - return (Criteria) this; - } - - public Criteria andIdGreaterThanOrEqualTo(Long value) { - addCriterion("Id >=", value, "id"); - return (Criteria) this; - } - - public Criteria andIdLessThan(Long value) { - addCriterion("Id <", value, "id"); - return (Criteria) this; - } - - public Criteria andIdLessThanOrEqualTo(Long value) { - addCriterion("Id <=", value, "id"); - return (Criteria) this; - } - - public Criteria andIdIn(List values) { - addCriterion("Id in", values, "id"); - return (Criteria) this; - } - - public Criteria andIdNotIn(List values) { - addCriterion("Id not in", values, "id"); - return (Criteria) this; - } - - public Criteria andIdBetween(Long value1, Long value2) { - addCriterion("Id between", value1, value2, "id"); - return (Criteria) this; - } - - public Criteria andIdNotBetween(Long value1, Long value2) { - addCriterion("Id not between", value1, value2, "id"); - return (Criteria) this; - } - - public Criteria andNumberIsNull() { - addCriterion("Number is null"); - return (Criteria) this; - } - - public Criteria andNumberIsNotNull() { - addCriterion("Number is not null"); - return (Criteria) this; - } - - public Criteria andNumberEqualTo(String value) { - addCriterion("Number =", value, "number"); - return (Criteria) this; - } - - public Criteria andNumberNotEqualTo(String value) { - addCriterion("Number <>", value, "number"); - return (Criteria) this; - } - - public Criteria andNumberGreaterThan(String value) { - addCriterion("Number >", value, "number"); - return (Criteria) this; - } - - public Criteria andNumberGreaterThanOrEqualTo(String value) { - addCriterion("Number >=", value, "number"); - return (Criteria) this; - } - - public Criteria andNumberLessThan(String value) { - addCriterion("Number <", value, "number"); - return (Criteria) this; - } - - public Criteria andNumberLessThanOrEqualTo(String value) { - addCriterion("Number <=", value, "number"); - return (Criteria) this; - } - - public Criteria andNumberLike(String value) { - addCriterion("Number like", value, "number"); - return (Criteria) this; - } - - public Criteria andNumberNotLike(String value) { - addCriterion("Number not like", value, "number"); - return (Criteria) this; - } - - public Criteria andNumberIn(List values) { - addCriterion("Number in", values, "number"); - return (Criteria) this; - } - - public Criteria andNumberNotIn(List values) { - addCriterion("Number not in", values, "number"); - return (Criteria) this; - } - - public Criteria andNumberBetween(String value1, String value2) { - addCriterion("Number between", value1, value2, "number"); - return (Criteria) this; - } - - public Criteria andNumberNotBetween(String value1, String value2) { - addCriterion("Number not between", value1, value2, "number"); - return (Criteria) this; - } - - public Criteria andNameIsNull() { - addCriterion("Name is null"); - return (Criteria) this; - } - - public Criteria andNameIsNotNull() { - addCriterion("Name is not null"); - return (Criteria) this; - } - - public Criteria andNameEqualTo(String value) { - addCriterion("Name =", value, "name"); - return (Criteria) this; - } - - public Criteria andNameNotEqualTo(String value) { - addCriterion("Name <>", value, "name"); - return (Criteria) this; - } - - public Criteria andNameGreaterThan(String value) { - addCriterion("Name >", value, "name"); - return (Criteria) this; - } - - public Criteria andNameGreaterThanOrEqualTo(String value) { - addCriterion("Name >=", value, "name"); - return (Criteria) this; - } - - public Criteria andNameLessThan(String value) { - addCriterion("Name <", value, "name"); - return (Criteria) this; - } - - public Criteria andNameLessThanOrEqualTo(String value) { - addCriterion("Name <=", value, "name"); - return (Criteria) this; - } - - public Criteria andNameLike(String value) { - addCriterion("Name like", value, "name"); - return (Criteria) this; - } - - public Criteria andNameNotLike(String value) { - addCriterion("Name not like", value, "name"); - return (Criteria) this; - } - - public Criteria andNameIn(List values) { - addCriterion("Name in", values, "name"); - return (Criteria) this; - } - - public Criteria andNameNotIn(List values) { - addCriterion("Name not in", values, "name"); - return (Criteria) this; - } - - public Criteria andNameBetween(String value1, String value2) { - addCriterion("Name between", value1, value2, "name"); - return (Criteria) this; - } - - public Criteria andNameNotBetween(String value1, String value2) { - addCriterion("Name not between", value1, value2, "name"); - return (Criteria) this; - } - - public Criteria andTypeIsNull() { - addCriterion("Type is null"); - return (Criteria) this; - } - - public Criteria andTypeIsNotNull() { - addCriterion("Type is not null"); - return (Criteria) this; - } - - public Criteria andTypeEqualTo(String value) { - addCriterion("Type =", value, "type"); - return (Criteria) this; - } - - public Criteria andTypeNotEqualTo(String value) { - addCriterion("Type <>", value, "type"); - return (Criteria) this; - } - - public Criteria andTypeGreaterThan(String value) { - addCriterion("Type >", value, "type"); - return (Criteria) this; - } - - public Criteria andTypeGreaterThanOrEqualTo(String value) { - addCriterion("Type >=", value, "type"); - return (Criteria) this; - } - - public Criteria andTypeLessThan(String value) { - addCriterion("Type <", value, "type"); - return (Criteria) this; - } - - public Criteria andTypeLessThanOrEqualTo(String value) { - addCriterion("Type <=", value, "type"); - return (Criteria) this; - } - - public Criteria andTypeLike(String value) { - addCriterion("Type like", value, "type"); - return (Criteria) this; - } - - public Criteria andTypeNotLike(String value) { - addCriterion("Type not like", value, "type"); - return (Criteria) this; - } - - public Criteria andTypeIn(List values) { - addCriterion("Type in", values, "type"); - return (Criteria) this; - } - - public Criteria andTypeNotIn(List values) { - addCriterion("Type not in", values, "type"); - return (Criteria) this; - } - - public Criteria andTypeBetween(String value1, String value2) { - addCriterion("Type between", value1, value2, "type"); - return (Criteria) this; - } - - public Criteria andTypeNotBetween(String value1, String value2) { - addCriterion("Type not between", value1, value2, "type"); - return (Criteria) this; - } - - public Criteria andIconIsNull() { - addCriterion("Icon is null"); - return (Criteria) this; - } - - public Criteria andIconIsNotNull() { - addCriterion("Icon is not null"); - return (Criteria) this; - } - - public Criteria andIconEqualTo(String value) { - addCriterion("Icon =", value, "icon"); - return (Criteria) this; - } - - public Criteria andIconNotEqualTo(String value) { - addCriterion("Icon <>", value, "icon"); - return (Criteria) this; - } - - public Criteria andIconGreaterThan(String value) { - addCriterion("Icon >", value, "icon"); - return (Criteria) this; - } - - public Criteria andIconGreaterThanOrEqualTo(String value) { - addCriterion("Icon >=", value, "icon"); - return (Criteria) this; - } - - public Criteria andIconLessThan(String value) { - addCriterion("Icon <", value, "icon"); - return (Criteria) this; - } - - public Criteria andIconLessThanOrEqualTo(String value) { - addCriterion("Icon <=", value, "icon"); - return (Criteria) this; - } - - public Criteria andIconLike(String value) { - addCriterion("Icon like", value, "icon"); - return (Criteria) this; - } - - public Criteria andIconNotLike(String value) { - addCriterion("Icon not like", value, "icon"); - return (Criteria) this; - } - - public Criteria andIconIn(List values) { - addCriterion("Icon in", values, "icon"); - return (Criteria) this; - } - - public Criteria andIconNotIn(List values) { - addCriterion("Icon not in", values, "icon"); - return (Criteria) this; - } - - public Criteria andIconBetween(String value1, String value2) { - addCriterion("Icon between", value1, value2, "icon"); - return (Criteria) this; - } - - public Criteria andIconNotBetween(String value1, String value2) { - addCriterion("Icon not between", value1, value2, "icon"); - return (Criteria) this; - } - - public Criteria andUrlIsNull() { - addCriterion("URL is null"); - return (Criteria) this; - } - - public Criteria andUrlIsNotNull() { - addCriterion("URL is not null"); - return (Criteria) this; - } - - public Criteria andUrlEqualTo(String value) { - addCriterion("URL =", value, "url"); - return (Criteria) this; - } - - public Criteria andUrlNotEqualTo(String value) { - addCriterion("URL <>", value, "url"); - return (Criteria) this; - } - - public Criteria andUrlGreaterThan(String value) { - addCriterion("URL >", value, "url"); - return (Criteria) this; - } - - public Criteria andUrlGreaterThanOrEqualTo(String value) { - addCriterion("URL >=", value, "url"); - return (Criteria) this; - } - - public Criteria andUrlLessThan(String value) { - addCriterion("URL <", value, "url"); - return (Criteria) this; - } - - public Criteria andUrlLessThanOrEqualTo(String value) { - addCriterion("URL <=", value, "url"); - return (Criteria) this; - } - - public Criteria andUrlLike(String value) { - addCriterion("URL like", value, "url"); - return (Criteria) this; - } - - public Criteria andUrlNotLike(String value) { - addCriterion("URL not like", value, "url"); - return (Criteria) this; - } - - public Criteria andUrlIn(List values) { - addCriterion("URL in", values, "url"); - return (Criteria) this; - } - - public Criteria andUrlNotIn(List values) { - addCriterion("URL not in", values, "url"); - return (Criteria) this; - } - - public Criteria andUrlBetween(String value1, String value2) { - addCriterion("URL between", value1, value2, "url"); - return (Criteria) this; - } - - public Criteria andUrlNotBetween(String value1, String value2) { - addCriterion("URL not between", value1, value2, "url"); - return (Criteria) this; - } - - public Criteria andWidthIsNull() { - addCriterion("Width is null"); - return (Criteria) this; - } - - public Criteria andWidthIsNotNull() { - addCriterion("Width is not null"); - return (Criteria) this; - } - - public Criteria andWidthEqualTo(String value) { - addCriterion("Width =", value, "width"); - return (Criteria) this; - } - - public Criteria andWidthNotEqualTo(String value) { - addCriterion("Width <>", value, "width"); - return (Criteria) this; - } - - public Criteria andWidthGreaterThan(String value) { - addCriterion("Width >", value, "width"); - return (Criteria) this; - } - - public Criteria andWidthGreaterThanOrEqualTo(String value) { - addCriterion("Width >=", value, "width"); - return (Criteria) this; - } - - public Criteria andWidthLessThan(String value) { - addCriterion("Width <", value, "width"); - return (Criteria) this; - } - - public Criteria andWidthLessThanOrEqualTo(String value) { - addCriterion("Width <=", value, "width"); - return (Criteria) this; - } - - public Criteria andWidthLike(String value) { - addCriterion("Width like", value, "width"); - return (Criteria) this; - } - - public Criteria andWidthNotLike(String value) { - addCriterion("Width not like", value, "width"); - return (Criteria) this; - } - - public Criteria andWidthIn(List values) { - addCriterion("Width in", values, "width"); - return (Criteria) this; - } - - public Criteria andWidthNotIn(List values) { - addCriterion("Width not in", values, "width"); - return (Criteria) this; - } - - public Criteria andWidthBetween(String value1, String value2) { - addCriterion("Width between", value1, value2, "width"); - return (Criteria) this; - } - - public Criteria andWidthNotBetween(String value1, String value2) { - addCriterion("Width not between", value1, value2, "width"); - return (Criteria) this; - } - - public Criteria andHeightIsNull() { - addCriterion("Height is null"); - return (Criteria) this; - } - - public Criteria andHeightIsNotNull() { - addCriterion("Height is not null"); - return (Criteria) this; - } - - public Criteria andHeightEqualTo(String value) { - addCriterion("Height =", value, "height"); - return (Criteria) this; - } - - public Criteria andHeightNotEqualTo(String value) { - addCriterion("Height <>", value, "height"); - return (Criteria) this; - } - - public Criteria andHeightGreaterThan(String value) { - addCriterion("Height >", value, "height"); - return (Criteria) this; - } - - public Criteria andHeightGreaterThanOrEqualTo(String value) { - addCriterion("Height >=", value, "height"); - return (Criteria) this; - } - - public Criteria andHeightLessThan(String value) { - addCriterion("Height <", value, "height"); - return (Criteria) this; - } - - public Criteria andHeightLessThanOrEqualTo(String value) { - addCriterion("Height <=", value, "height"); - return (Criteria) this; - } - - public Criteria andHeightLike(String value) { - addCriterion("Height like", value, "height"); - return (Criteria) this; - } - - public Criteria andHeightNotLike(String value) { - addCriterion("Height not like", value, "height"); - return (Criteria) this; - } - - public Criteria andHeightIn(List values) { - addCriterion("Height in", values, "height"); - return (Criteria) this; - } - - public Criteria andHeightNotIn(List values) { - addCriterion("Height not in", values, "height"); - return (Criteria) this; - } - - public Criteria andHeightBetween(String value1, String value2) { - addCriterion("Height between", value1, value2, "height"); - return (Criteria) this; - } - - public Criteria andHeightNotBetween(String value1, String value2) { - addCriterion("Height not between", value1, value2, "height"); - return (Criteria) this; - } - - public Criteria andResizeIsNull() { - addCriterion("ReSize is null"); - return (Criteria) this; - } - - public Criteria andResizeIsNotNull() { - addCriterion("ReSize is not null"); - return (Criteria) this; - } - - public Criteria andResizeEqualTo(Boolean value) { - addCriterion("ReSize =", value, "resize"); - return (Criteria) this; - } - - public Criteria andResizeNotEqualTo(Boolean value) { - addCriterion("ReSize <>", value, "resize"); - return (Criteria) this; - } - - public Criteria andResizeGreaterThan(Boolean value) { - addCriterion("ReSize >", value, "resize"); - return (Criteria) this; - } - - public Criteria andResizeGreaterThanOrEqualTo(Boolean value) { - addCriterion("ReSize >=", value, "resize"); - return (Criteria) this; - } - - public Criteria andResizeLessThan(Boolean value) { - addCriterion("ReSize <", value, "resize"); - return (Criteria) this; - } - - public Criteria andResizeLessThanOrEqualTo(Boolean value) { - addCriterion("ReSize <=", value, "resize"); - return (Criteria) this; - } - - public Criteria andResizeIn(List values) { - addCriterion("ReSize in", values, "resize"); - return (Criteria) this; - } - - public Criteria andResizeNotIn(List values) { - addCriterion("ReSize not in", values, "resize"); - return (Criteria) this; - } - - public Criteria andResizeBetween(Boolean value1, Boolean value2) { - addCriterion("ReSize between", value1, value2, "resize"); - return (Criteria) this; - } - - public Criteria andResizeNotBetween(Boolean value1, Boolean value2) { - addCriterion("ReSize not between", value1, value2, "resize"); - return (Criteria) this; - } - - public Criteria andOpenmaxIsNull() { - addCriterion("OpenMax is null"); - return (Criteria) this; - } - - public Criteria andOpenmaxIsNotNull() { - addCriterion("OpenMax is not null"); - return (Criteria) this; - } - - public Criteria andOpenmaxEqualTo(Boolean value) { - addCriterion("OpenMax =", value, "openmax"); - return (Criteria) this; - } - - public Criteria andOpenmaxNotEqualTo(Boolean value) { - addCriterion("OpenMax <>", value, "openmax"); - return (Criteria) this; - } - - public Criteria andOpenmaxGreaterThan(Boolean value) { - addCriterion("OpenMax >", value, "openmax"); - return (Criteria) this; - } - - public Criteria andOpenmaxGreaterThanOrEqualTo(Boolean value) { - addCriterion("OpenMax >=", value, "openmax"); - return (Criteria) this; - } - - public Criteria andOpenmaxLessThan(Boolean value) { - addCriterion("OpenMax <", value, "openmax"); - return (Criteria) this; - } - - public Criteria andOpenmaxLessThanOrEqualTo(Boolean value) { - addCriterion("OpenMax <=", value, "openmax"); - return (Criteria) this; - } - - public Criteria andOpenmaxIn(List values) { - addCriterion("OpenMax in", values, "openmax"); - return (Criteria) this; - } - - public Criteria andOpenmaxNotIn(List values) { - addCriterion("OpenMax not in", values, "openmax"); - return (Criteria) this; - } - - public Criteria andOpenmaxBetween(Boolean value1, Boolean value2) { - addCriterion("OpenMax between", value1, value2, "openmax"); - return (Criteria) this; - } - - public Criteria andOpenmaxNotBetween(Boolean value1, Boolean value2) { - addCriterion("OpenMax not between", value1, value2, "openmax"); - return (Criteria) this; - } - - public Criteria andFlashIsNull() { - addCriterion("Flash is null"); - return (Criteria) this; - } - - public Criteria andFlashIsNotNull() { - addCriterion("Flash is not null"); - return (Criteria) this; - } - - public Criteria andFlashEqualTo(Boolean value) { - addCriterion("Flash =", value, "flash"); - return (Criteria) this; - } - - public Criteria andFlashNotEqualTo(Boolean value) { - addCriterion("Flash <>", value, "flash"); - return (Criteria) this; - } - - public Criteria andFlashGreaterThan(Boolean value) { - addCriterion("Flash >", value, "flash"); - return (Criteria) this; - } - - public Criteria andFlashGreaterThanOrEqualTo(Boolean value) { - addCriterion("Flash >=", value, "flash"); - return (Criteria) this; - } - - public Criteria andFlashLessThan(Boolean value) { - addCriterion("Flash <", value, "flash"); - return (Criteria) this; - } - - public Criteria andFlashLessThanOrEqualTo(Boolean value) { - addCriterion("Flash <=", value, "flash"); - return (Criteria) this; - } - - public Criteria andFlashIn(List values) { - addCriterion("Flash in", values, "flash"); - return (Criteria) this; - } - - public Criteria andFlashNotIn(List values) { - addCriterion("Flash not in", values, "flash"); - return (Criteria) this; - } - - public Criteria andFlashBetween(Boolean value1, Boolean value2) { - addCriterion("Flash between", value1, value2, "flash"); - return (Criteria) this; - } - - public Criteria andFlashNotBetween(Boolean value1, Boolean value2) { - addCriterion("Flash not between", value1, value2, "flash"); - return (Criteria) this; - } - - public Criteria andZlIsNull() { - addCriterion("ZL is null"); - return (Criteria) this; - } - - public Criteria andZlIsNotNull() { - addCriterion("ZL is not null"); - return (Criteria) this; - } - - public Criteria andZlEqualTo(String value) { - addCriterion("ZL =", value, "zl"); - return (Criteria) this; - } - - public Criteria andZlNotEqualTo(String value) { - addCriterion("ZL <>", value, "zl"); - return (Criteria) this; - } - - public Criteria andZlGreaterThan(String value) { - addCriterion("ZL >", value, "zl"); - return (Criteria) this; - } - - public Criteria andZlGreaterThanOrEqualTo(String value) { - addCriterion("ZL >=", value, "zl"); - return (Criteria) this; - } - - public Criteria andZlLessThan(String value) { - addCriterion("ZL <", value, "zl"); - return (Criteria) this; - } - - public Criteria andZlLessThanOrEqualTo(String value) { - addCriterion("ZL <=", value, "zl"); - return (Criteria) this; - } - - public Criteria andZlLike(String value) { - addCriterion("ZL like", value, "zl"); - return (Criteria) this; - } - - public Criteria andZlNotLike(String value) { - addCriterion("ZL not like", value, "zl"); - return (Criteria) this; - } - - public Criteria andZlIn(List values) { - addCriterion("ZL in", values, "zl"); - return (Criteria) this; - } - - public Criteria andZlNotIn(List values) { - addCriterion("ZL not in", values, "zl"); - return (Criteria) this; - } - - public Criteria andZlBetween(String value1, String value2) { - addCriterion("ZL between", value1, value2, "zl"); - return (Criteria) this; - } - - public Criteria andZlNotBetween(String value1, String value2) { - addCriterion("ZL not between", value1, value2, "zl"); - return (Criteria) this; - } - - public Criteria andSortIsNull() { - addCriterion("Sort is null"); - return (Criteria) this; - } - - public Criteria andSortIsNotNull() { - addCriterion("Sort is not null"); - return (Criteria) this; - } - - public Criteria andSortEqualTo(String value) { - addCriterion("Sort =", value, "sort"); - return (Criteria) this; - } - - public Criteria andSortNotEqualTo(String value) { - addCriterion("Sort <>", value, "sort"); - return (Criteria) this; - } - - public Criteria andSortGreaterThan(String value) { - addCriterion("Sort >", value, "sort"); - return (Criteria) this; - } - - public Criteria andSortGreaterThanOrEqualTo(String value) { - addCriterion("Sort >=", value, "sort"); - return (Criteria) this; - } - - public Criteria andSortLessThan(String value) { - addCriterion("Sort <", value, "sort"); - return (Criteria) this; - } - - public Criteria andSortLessThanOrEqualTo(String value) { - addCriterion("Sort <=", value, "sort"); - return (Criteria) this; - } - - public Criteria andSortLike(String value) { - addCriterion("Sort like", value, "sort"); - return (Criteria) this; - } - - public Criteria andSortNotLike(String value) { - addCriterion("Sort not like", value, "sort"); - return (Criteria) this; - } - - public Criteria andSortIn(List values) { - addCriterion("Sort in", values, "sort"); - return (Criteria) this; - } - - public Criteria andSortNotIn(List values) { - addCriterion("Sort not in", values, "sort"); - return (Criteria) this; - } - - public Criteria andSortBetween(String value1, String value2) { - addCriterion("Sort between", value1, value2, "sort"); - return (Criteria) this; - } - - public Criteria andSortNotBetween(String value1, String value2) { - addCriterion("Sort not between", value1, value2, "sort"); - return (Criteria) this; - } - - public Criteria andRemarkIsNull() { - addCriterion("Remark is null"); - return (Criteria) this; - } - - public Criteria andRemarkIsNotNull() { - addCriterion("Remark is not null"); - return (Criteria) this; - } - - public Criteria andRemarkEqualTo(String value) { - addCriterion("Remark =", value, "remark"); - return (Criteria) this; - } - - public Criteria andRemarkNotEqualTo(String value) { - addCriterion("Remark <>", value, "remark"); - return (Criteria) this; - } - - public Criteria andRemarkGreaterThan(String value) { - addCriterion("Remark >", value, "remark"); - return (Criteria) this; - } - - public Criteria andRemarkGreaterThanOrEqualTo(String value) { - addCriterion("Remark >=", value, "remark"); - return (Criteria) this; - } - - public Criteria andRemarkLessThan(String value) { - addCriterion("Remark <", value, "remark"); - return (Criteria) this; - } - - public Criteria andRemarkLessThanOrEqualTo(String value) { - addCriterion("Remark <=", value, "remark"); - return (Criteria) this; - } - - public Criteria andRemarkLike(String value) { - addCriterion("Remark like", value, "remark"); - return (Criteria) this; - } - - public Criteria andRemarkNotLike(String value) { - addCriterion("Remark not like", value, "remark"); - return (Criteria) this; - } - - public Criteria andRemarkIn(List values) { - addCriterion("Remark in", values, "remark"); - return (Criteria) this; - } - - public Criteria andRemarkNotIn(List values) { - addCriterion("Remark not in", values, "remark"); - return (Criteria) this; - } - - public Criteria andRemarkBetween(String value1, String value2) { - addCriterion("Remark between", value1, value2, "remark"); - return (Criteria) this; - } - - public Criteria andRemarkNotBetween(String value1, String value2) { - addCriterion("Remark not between", value1, value2, "remark"); - return (Criteria) this; - } - - public Criteria andEnabledIsNull() { - addCriterion("Enabled is null"); - return (Criteria) this; - } - - public Criteria andEnabledIsNotNull() { - addCriterion("Enabled is not null"); - return (Criteria) this; - } - - public Criteria andEnabledEqualTo(Boolean value) { - addCriterion("Enabled =", value, "enabled"); - return (Criteria) this; - } - - public Criteria andEnabledNotEqualTo(Boolean value) { - addCriterion("Enabled <>", value, "enabled"); - return (Criteria) this; - } - - public Criteria andEnabledGreaterThan(Boolean value) { - addCriterion("Enabled >", value, "enabled"); - return (Criteria) this; - } - - public Criteria andEnabledGreaterThanOrEqualTo(Boolean value) { - addCriterion("Enabled >=", value, "enabled"); - return (Criteria) this; - } - - public Criteria andEnabledLessThan(Boolean value) { - addCriterion("Enabled <", value, "enabled"); - return (Criteria) this; - } - - public Criteria andEnabledLessThanOrEqualTo(Boolean value) { - addCriterion("Enabled <=", value, "enabled"); - return (Criteria) this; - } - - public Criteria andEnabledIn(List values) { - addCriterion("Enabled in", values, "enabled"); - return (Criteria) this; - } - - public Criteria andEnabledNotIn(List values) { - addCriterion("Enabled not in", values, "enabled"); - return (Criteria) this; - } - - public Criteria andEnabledBetween(Boolean value1, Boolean value2) { - addCriterion("Enabled between", value1, value2, "enabled"); - return (Criteria) this; - } - - public Criteria andEnabledNotBetween(Boolean value1, Boolean value2) { - addCriterion("Enabled not between", value1, value2, "enabled"); - return (Criteria) this; - } - - public Criteria andDeleteFlagIsNull() { - addCriterion("delete_Flag is null"); - return (Criteria) this; - } - - public Criteria andDeleteFlagIsNotNull() { - addCriterion("delete_Flag is not null"); - return (Criteria) this; - } - - public Criteria andDeleteFlagEqualTo(String value) { - addCriterion("delete_Flag =", value, "deleteFlag"); - return (Criteria) this; - } - - public Criteria andDeleteFlagNotEqualTo(String value) { - addCriterion("delete_Flag <>", value, "deleteFlag"); - return (Criteria) this; - } - - public Criteria andDeleteFlagGreaterThan(String value) { - addCriterion("delete_Flag >", value, "deleteFlag"); - return (Criteria) this; - } - - public Criteria andDeleteFlagGreaterThanOrEqualTo(String value) { - addCriterion("delete_Flag >=", value, "deleteFlag"); - return (Criteria) this; - } - - public Criteria andDeleteFlagLessThan(String value) { - addCriterion("delete_Flag <", value, "deleteFlag"); - return (Criteria) this; - } - - public Criteria andDeleteFlagLessThanOrEqualTo(String value) { - addCriterion("delete_Flag <=", value, "deleteFlag"); - return (Criteria) this; - } - - public Criteria andDeleteFlagLike(String value) { - addCriterion("delete_Flag like", value, "deleteFlag"); - return (Criteria) this; - } - - public Criteria andDeleteFlagNotLike(String value) { - addCriterion("delete_Flag not like", value, "deleteFlag"); - return (Criteria) this; - } - - public Criteria andDeleteFlagIn(List values) { - addCriterion("delete_Flag in", values, "deleteFlag"); - return (Criteria) this; - } - - public Criteria andDeleteFlagNotIn(List values) { - addCriterion("delete_Flag not in", values, "deleteFlag"); - return (Criteria) this; - } - - public Criteria andDeleteFlagBetween(String value1, String value2) { - addCriterion("delete_Flag between", value1, value2, "deleteFlag"); - return (Criteria) this; - } - - public Criteria andDeleteFlagNotBetween(String value1, String value2) { - addCriterion("delete_Flag not between", value1, value2, "deleteFlag"); - return (Criteria) this; - } - } - - /** - * This class was generated by MyBatis Generator. - * This class corresponds to the database table jsh_app - * - * @mbggenerated do_not_delete_during_merge - */ - public static class Criteria extends GeneratedCriteria { - - protected Criteria() { - super(); - } - } - - /** - * This class was generated by MyBatis Generator. - * This class corresponds to the database table jsh_app - * - * @mbggenerated - */ - public static class Criterion { - private String condition; - - private Object value; - - private Object secondValue; - - private boolean noValue; - - private boolean singleValue; - - private boolean betweenValue; - - private boolean listValue; - - private String typeHandler; - - public String getCondition() { - return condition; - } - - public Object getValue() { - return value; - } - - public Object getSecondValue() { - return secondValue; - } - - public boolean isNoValue() { - return noValue; - } - - public boolean isSingleValue() { - return singleValue; - } - - public boolean isBetweenValue() { - return betweenValue; - } - - public boolean isListValue() { - return listValue; - } - - public String getTypeHandler() { - return typeHandler; - } - - protected Criterion(String condition) { - super(); - this.condition = condition; - this.typeHandler = null; - this.noValue = true; - } - - protected Criterion(String condition, Object value, String typeHandler) { - super(); - this.condition = condition; - this.value = value; - this.typeHandler = typeHandler; - if (value instanceof List) { - this.listValue = true; - } else { - this.singleValue = true; - } - } - - protected Criterion(String condition, Object value) { - this(condition, value, null); - } - - protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { - super(); - this.condition = condition; - this.value = value; - this.secondValue = secondValue; - this.typeHandler = typeHandler; - this.betweenValue = true; - } - - protected Criterion(String condition, Object value, Object secondValue) { - this(condition, value, secondValue, null); - } - } -} \ No newline at end of file diff --git a/src/main/java/com/jsh/erp/datasource/mappers/AppMapper.java b/src/main/java/com/jsh/erp/datasource/mappers/AppMapper.java deleted file mode 100644 index a5f4e98f..00000000 --- a/src/main/java/com/jsh/erp/datasource/mappers/AppMapper.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.jsh.erp.datasource.mappers; - -import com.jsh.erp.datasource.entities.App; -import com.jsh.erp.datasource.entities.AppExample; -import java.util.List; -import org.apache.ibatis.annotations.Param; - -public interface AppMapper { - /** - * This method was generated by MyBatis Generator. - * This method corresponds to the database table jsh_app - * - * @mbggenerated - */ - int countByExample(AppExample example); - - /** - * This method was generated by MyBatis Generator. - * This method corresponds to the database table jsh_app - * - * @mbggenerated - */ - int deleteByExample(AppExample example); - - /** - * This method was generated by MyBatis Generator. - * This method corresponds to the database table jsh_app - * - * @mbggenerated - */ - int deleteByPrimaryKey(Long id); - - /** - * This method was generated by MyBatis Generator. - * This method corresponds to the database table jsh_app - * - * @mbggenerated - */ - int insert(App record); - - /** - * This method was generated by MyBatis Generator. - * This method corresponds to the database table jsh_app - * - * @mbggenerated - */ - int insertSelective(App record); - - /** - * This method was generated by MyBatis Generator. - * This method corresponds to the database table jsh_app - * - * @mbggenerated - */ - List selectByExample(AppExample example); - - /** - * This method was generated by MyBatis Generator. - * This method corresponds to the database table jsh_app - * - * @mbggenerated - */ - App selectByPrimaryKey(Long id); - - /** - * This method was generated by MyBatis Generator. - * This method corresponds to the database table jsh_app - * - * @mbggenerated - */ - int updateByExampleSelective(@Param("record") App record, @Param("example") AppExample example); - - /** - * This method was generated by MyBatis Generator. - * This method corresponds to the database table jsh_app - * - * @mbggenerated - */ - int updateByExample(@Param("record") App record, @Param("example") AppExample example); - - /** - * This method was generated by MyBatis Generator. - * This method corresponds to the database table jsh_app - * - * @mbggenerated - */ - int updateByPrimaryKeySelective(App record); - - /** - * This method was generated by MyBatis Generator. - * This method corresponds to the database table jsh_app - * - * @mbggenerated - */ - int updateByPrimaryKey(App record); -} \ No newline at end of file diff --git a/src/main/java/com/jsh/erp/datasource/mappers/AppMapperEx.java b/src/main/java/com/jsh/erp/datasource/mappers/AppMapperEx.java deleted file mode 100644 index 5b5700a7..00000000 --- a/src/main/java/com/jsh/erp/datasource/mappers/AppMapperEx.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.jsh.erp.datasource.mappers; - -import com.jsh.erp.datasource.entities.App; -import com.jsh.erp.datasource.entities.AppExample; -import org.apache.ibatis.annotations.Param; - -import java.util.Date; -import java.util.List; - -public interface AppMapperEx { - - List selectByConditionApp( - @Param("name") String name, - @Param("type") String type, - @Param("offset") Integer offset, - @Param("rows") Integer rows); - - Long countsByApp( - @Param("name") String name, - @Param("type") String type); - - int batchDeleteAppByIds(@Param("updateTime") Date updateTime, @Param("updater") Long updater, @Param("ids") String ids[]); -} \ No newline at end of file diff --git a/src/main/java/com/jsh/erp/service/ResourceInfo.java b/src/main/java/com/jsh/erp/service/ResourceInfo.java index 3c585b03..352d7bea 100644 --- a/src/main/java/com/jsh/erp/service/ResourceInfo.java +++ b/src/main/java/com/jsh/erp/service/ResourceInfo.java @@ -6,7 +6,6 @@ import java.lang.annotation.*; * @author jishenghua 2018-10-7 15:25:39 * user-5 * role-10 - * app-15 * depot-20 * log-25 * functions-30 diff --git a/src/main/java/com/jsh/erp/service/app/AppComponent.java b/src/main/java/com/jsh/erp/service/app/AppComponent.java deleted file mode 100644 index 9afec67f..00000000 --- a/src/main/java/com/jsh/erp/service/app/AppComponent.java +++ /dev/null @@ -1,72 +0,0 @@ -package com.jsh.erp.service.app; - -import com.jsh.erp.service.ICommonQuery; -import com.jsh.erp.utils.Constants; -import com.jsh.erp.utils.QueryUtils; -import com.jsh.erp.utils.StringUtil; -import org.springframework.stereotype.Service; - -import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; -import java.util.List; -import java.util.Map; - -@Service(value = "app_component") -@AppResource -public class AppComponent implements ICommonQuery { - - @Resource - private AppService appService; - - @Override - public Object selectOne(Long id) throws Exception { - return appService.getApp(id); - } - - @Override - public List select(Map map)throws Exception { - return getAppList(map); - } - - private List getAppList(Map map)throws Exception { - String search = map.get(Constants.SEARCH); - String name = StringUtil.getInfo(search, "name"); - String type = StringUtil.getInfo(search, "type"); - String order = QueryUtils.order(map); - return appService.select(name, type, QueryUtils.offset(map), QueryUtils.rows(map)); - } - - @Override - public Long counts(Map map)throws Exception { - String search = map.get(Constants.SEARCH); - String name = StringUtil.getInfo(search, "name"); - String type = StringUtil.getInfo(search, "type"); - return appService.countApp(name, type); - } - - @Override - public int insert(String beanJson, HttpServletRequest request)throws Exception { - return appService.insertApp(beanJson, request); - } - - @Override - public int update(String beanJson, Long id)throws Exception { - return appService.updateApp(beanJson, id); - } - - @Override - public int delete(Long id)throws Exception { - return appService.deleteApp(id); - } - - @Override - public int batchDelete(String ids)throws Exception { - return appService.batchDeleteApp(ids); - } - - @Override - public int checkIsNameExist(Long id, String name)throws Exception { - return 0; - } - -} diff --git a/src/main/java/com/jsh/erp/service/app/AppResource.java b/src/main/java/com/jsh/erp/service/app/AppResource.java deleted file mode 100644 index c5d3d56b..00000000 --- a/src/main/java/com/jsh/erp/service/app/AppResource.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.jsh.erp.service.app; - -import com.jsh.erp.service.ResourceInfo; - -import java.lang.annotation.*; - -/** - * @author jishenghua qq752718920 2018-10-7 15:26:27 - */ -@ResourceInfo(value = "app", type = 15) -@Inherited -@Target(ElementType.TYPE) -@Retention(RetentionPolicy.RUNTIME) -public @interface AppResource { -} diff --git a/src/main/java/com/jsh/erp/service/app/AppService.java b/src/main/java/com/jsh/erp/service/app/AppService.java deleted file mode 100644 index 86683dd8..00000000 --- a/src/main/java/com/jsh/erp/service/app/AppService.java +++ /dev/null @@ -1,254 +0,0 @@ -package com.jsh.erp.service.app; - -import com.alibaba.fastjson.JSONObject; -import com.jsh.erp.constants.BusinessConstants; -import com.jsh.erp.constants.ExceptionConstants; -import com.jsh.erp.datasource.entities.App; -import com.jsh.erp.datasource.entities.AppExample; -import com.jsh.erp.datasource.entities.User; -import com.jsh.erp.datasource.entities.UserBusiness; -import com.jsh.erp.datasource.mappers.AppMapper; -import com.jsh.erp.datasource.mappers.AppMapperEx; -import com.jsh.erp.exception.BusinessRunTimeException; -import com.jsh.erp.exception.JshException; -import com.jsh.erp.service.log.LogService; -import com.jsh.erp.service.user.UserService; -import com.jsh.erp.service.userBusiness.UserBusinessService; -import com.jsh.erp.utils.StringUtil; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; -import org.springframework.web.context.request.RequestContextHolder; -import org.springframework.web.context.request.ServletRequestAttributes; - -import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; -import java.util.Date; -import java.util.List; - -@Service -public class AppService { - private Logger logger = LoggerFactory.getLogger(AppService.class); - - @Resource - private AppMapper appMapper; - @Resource - private AppMapperEx appMapperEx; - @Resource - private UserService userService; - @Resource - private LogService logService; - - @Resource - private UserBusinessService userBusinessService; - - public List findDock()throws Exception{ - AppExample example = new AppExample(); - example.createCriteria().andZlEqualTo("dock").andEnabledEqualTo(true).andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); - example.setOrderByClause("Sort"); - List list=null; - try{ - list=appMapper.selectByExample(example); - }catch(Exception e){ - JshException.readFail(logger, e); - } - return list; - } - /** - * create by: cjl - * description: - * 桌面功能菜单初始化列表 - * create time: 2019/1/11 16:59 - * @Param: null - * @return - */ - public List findDesk()throws Exception{ - AppExample example = new AppExample(); - example.createCriteria().andZlEqualTo("desk").andEnabledEqualTo(true).andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); - example.setOrderByClause("Sort"); - List list=null; - try{ - list=appMapper.selectByExample(example); - }catch(Exception e){ - JshException.readFail(logger, e); - } - return list; - } - - public App getApp(long id)throws Exception { - App result=null; - try{ - result=appMapper.selectByPrimaryKey(id); - }catch(Exception e){ - JshException.readFail(logger, e); - } - return result; - } - - public List getApp()throws Exception { - AppExample example = new AppExample(); - example.createCriteria().andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); - List list=null; - try{ - list=appMapper.selectByExample(example); - }catch(Exception e){ - JshException.readFail(logger, e); - } - return list; - } - - public List select(String name, String type, int offset, int rows)throws Exception { - List list=null; - try{ - list=appMapperEx.selectByConditionApp(name, type, offset, rows); - }catch(Exception e){ - JshException.readFail(logger, e); - } - return list; - } - - public Long countApp(String name, String type)throws Exception { - Long result=null; - try{ - result=appMapperEx.countsByApp(name, type); - }catch(Exception e){ - JshException.readFail(logger, e); - } - return result; - } - - @Transactional(value = "transactionManager", rollbackFor = Exception.class) - public int insertApp(String beanJson, HttpServletRequest request)throws Exception { - App app = JSONObject.parseObject(beanJson, App.class); - int result=0; - try{ - result=appMapper.insertSelective(app); - }catch(Exception e){ - JshException.writeFail(logger, e); - } - return result; - } - - @Transactional(value = "transactionManager", rollbackFor = Exception.class) - public int updateApp(String beanJson, Long id) throws Exception{ - App app = JSONObject.parseObject(beanJson, App.class); - app.setId(id); - int result=0; - try{ - result=appMapper.updateByPrimaryKeySelective(app); - }catch(Exception e){ - JshException.writeFail(logger, e); - } - return result; - } - - @Transactional(value = "transactionManager", rollbackFor = Exception.class) - public int deleteApp(Long id)throws Exception { - int result=0; - try{ - result=appMapper.deleteByPrimaryKey(id); - }catch(Exception e){ - JshException.writeFail(logger, e); - } - return result; - } - - @Transactional(value = "transactionManager", rollbackFor = Exception.class) - public int batchDeleteApp(String ids)throws Exception { - List idList = StringUtil.strToLongList(ids); - AppExample example = new AppExample(); - example.createCriteria().andIdIn(idList); - int result=0; - try{ - result=appMapper.deleteByExample(example); - }catch(Exception e){ - JshException.writeFail(logger, e); - } - return result; - } - - public List findRoleAPP()throws Exception{ - AppExample example = new AppExample(); - example.createCriteria().andEnabledEqualTo(true).andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); - example.setOrderByClause("Sort"); - List list=null; - try{ - list=appMapper.selectByExample(example); - }catch(Exception e){ - JshException.readFail(logger, e); - } - return list; - } - - public List findAppInIds(String ids, String type)throws Exception{ - List idList = StringUtil.strToLongList(ids); - AppExample example = new AppExample(); - example.createCriteria().andZlEqualTo(type).andEnabledEqualTo(true).andIdIn(idList) - .andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); - example.setOrderByClause("Sort"); - List list=null; - try{ - list=appMapper.selectByExample(example); - }catch(Exception e){ - JshException.readFail(logger, e); - } - return list; - } - @Transactional(value = "transactionManager", rollbackFor = Exception.class) - public int batchDeleteAppByIds(String ids) throws Exception{ - logService.insertLog(BusinessConstants.LOG_INTERFACE_NAME_APP, - new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_DELETE).append(ids).toString(), - ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest()); - User userInfo=userService.getCurrentUser(); - String [] idArray=ids.split(","); - int result=0; - try{ - result=appMapperEx.batchDeleteAppByIds(new Date(),userInfo==null?null:userInfo.getId(),idArray); - }catch(Exception e){ - JshException.writeFail(logger, e); - } - return result; - } - - public List findAppByUserId(String userId)throws Exception { - List roleList = userBusinessService.findRoleByUserId(userId); - String roles = null; - if(roleList!=null && roleList.size()>0 && roleList.get(0)!=null){ - roles = roleList.get(0).getValue(); - } - if(roles!=null) { - roles = roles.replaceAll("\\]\\[",",").replaceAll("\\]","").replaceAll("\\[",""); //转为逗号隔开的 - } - List appList = userBusinessService.findAppByRoles(roles); - String apps = null; - if(appList!=null && appList.size()>0 && appList.get(0)!=null){ - apps = appList.get(0).getValue(); - } - if(apps!=null) { - apps = apps.replaceAll("\\]\\[",",").replaceAll("\\]","").replaceAll("\\[",""); //转为逗号隔开的 - } - - List deskList = findAppInIds(apps,"desk"); - - return deskList; - } - - /** - * 通过number列表查询app list - * @param numberList - * @return - */ - public List findAppByNumber(List numberList) throws Exception{ - - AppExample example = new AppExample(); - example.createCriteria().andEnabledEqualTo(true).andNumberIn(numberList); - List list=null; - try{ - list=appMapper.selectByExample(example); - }catch(Exception e){ - JshException.readFail(logger, e); - } - return list; - } -} diff --git a/src/main/java/com/jsh/erp/service/depot/DepotComponent.java b/src/main/java/com/jsh/erp/service/depot/DepotComponent.java index aa78ad79..0e5de244 100644 --- a/src/main/java/com/jsh/erp/service/depot/DepotComponent.java +++ b/src/main/java/com/jsh/erp/service/depot/DepotComponent.java @@ -1,7 +1,6 @@ package com.jsh.erp.service.depot; import com.jsh.erp.service.ICommonQuery; -import com.jsh.erp.service.app.AppResource; import com.jsh.erp.utils.Constants; import com.jsh.erp.utils.QueryUtils; import com.jsh.erp.utils.StringUtil; diff --git a/src/main/java/com/jsh/erp/service/functions/FunctionsComponent.java b/src/main/java/com/jsh/erp/service/functions/FunctionsComponent.java index ebb0c67a..fb695d0e 100644 --- a/src/main/java/com/jsh/erp/service/functions/FunctionsComponent.java +++ b/src/main/java/com/jsh/erp/service/functions/FunctionsComponent.java @@ -1,7 +1,6 @@ package com.jsh.erp.service.functions; import com.jsh.erp.service.ICommonQuery; -import com.jsh.erp.service.app.AppResource; import com.jsh.erp.service.functions.FunctionsService; import com.jsh.erp.utils.Constants; import com.jsh.erp.utils.QueryUtils; diff --git a/src/main/java/com/jsh/erp/service/unit/UnitComponent.java b/src/main/java/com/jsh/erp/service/unit/UnitComponent.java index cc17fb54..5c62cdcd 100644 --- a/src/main/java/com/jsh/erp/service/unit/UnitComponent.java +++ b/src/main/java/com/jsh/erp/service/unit/UnitComponent.java @@ -1,7 +1,6 @@ package com.jsh.erp.service.unit; import com.jsh.erp.service.ICommonQuery; -import com.jsh.erp.service.app.AppResource; import com.jsh.erp.utils.Constants; import com.jsh.erp.utils.QueryUtils; import com.jsh.erp.utils.StringUtil; diff --git a/src/main/java/com/jsh/erp/service/userBusiness/UserBusinessService.java b/src/main/java/com/jsh/erp/service/userBusiness/UserBusinessService.java index ed40fb8e..f5baa394 100644 --- a/src/main/java/com/jsh/erp/service/userBusiness/UserBusinessService.java +++ b/src/main/java/com/jsh/erp/service/userBusiness/UserBusinessService.java @@ -9,7 +9,6 @@ import com.jsh.erp.datasource.mappers.UserBusinessMapperEx; import com.jsh.erp.exception.BusinessRunTimeException; import com.jsh.erp.exception.JshException; import com.jsh.erp.service.CommonQueryManager; -import com.jsh.erp.service.app.AppService; import com.jsh.erp.service.functions.FunctionsService; import com.jsh.erp.service.log.LogService; import com.jsh.erp.service.user.UserService; @@ -42,9 +41,6 @@ public class UserBusinessService { @Resource private FunctionsService functionsService; - @Resource - private AppService appService; - @Resource private CommonQueryManager configResourceManager; @@ -79,10 +75,6 @@ public class UserBusinessService { }catch(Exception e){ JshException.writeFail(logger, e); } - // 更新应用权限 - if (BusinessConstants.TYPE_NAME_ROLE_FUNCTIONS.equals(userBusiness.getType()) && result > 0) { - result = insertOrUpdateAppValue(BusinessConstants.TYPE_NAME_ROLE_APP, userBusiness.getKeyid(), userBusiness.getValue()); - } return result; } @@ -96,10 +88,6 @@ public class UserBusinessService { }catch(Exception e){ JshException.writeFail(logger, e); } - // 更新应用权限 - if (BusinessConstants.TYPE_NAME_ROLE_FUNCTIONS.equals(userBusiness.getType()) && result > 0) { - result = insertOrUpdateAppValue(BusinessConstants.TYPE_NAME_ROLE_APP, userBusiness.getKeyid(), userBusiness.getValue()); - } return result; } @@ -245,51 +233,4 @@ public class UserBusinessService { } return result; } - - /** - * 通过功能(RoleFunctions)权限更新应用(RoleApp)权限 - * @param type - * @param keyId - * @param functionIds - * @return - */ - public int insertOrUpdateAppValue(String type, String keyId, String functionIds) throws Exception{ - int result=0; - functionIds = functionIds.replaceAll("\\]\\[", ","). - replaceAll("\\[","").replaceAll("\\]",""); - List functionsList = functionsService.findByIds(functionIds); - if (!CollectionUtils.isEmpty(functionsList)) { - Set appNumbers = new HashSet<>(); - String appNumber; - for (Functions functions : functionsList) { - appNumber = functions.getNumber().substring(0, 2); - appNumbers.add(appNumber); - } - List appNumberList = new ArrayList<>(appNumbers); - List appList = appService.findAppByNumber(appNumberList); - StringBuilder appIdSb = new StringBuilder(); - if (!CollectionUtils.isEmpty(appList)) { - for (App app : appList) { - appIdSb.append("[" + app.getId() + "]"); - } - List userBusinessList = getBasicData(keyId, type); - try{ - if(userBusinessList.size() > 0) { - UserBusiness userBusiness = userBusinessList.get(0); - userBusiness.setValue(appIdSb.toString()); - result = userBusinessMapper.updateByPrimaryKeySelective(userBusiness); - } else { - UserBusiness userBusiness = new UserBusiness(); - userBusiness.setType(type); - userBusiness.setKeyid(keyId); - userBusiness.setValue(appIdSb.toString()); - result = userBusinessMapper.insertSelective(userBusiness); - } - }catch(Exception e){ - JshException.writeFail(logger, e); - } - } - } - return result; - } } diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 5a968586..18861b6f 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -2,7 +2,7 @@ server.port=8080 #server.port=443 #server.ssl.key-store=classpath:jishenghua.jks #server.ssl.key-alias=alias -#server.ssl.key-store-password=password +#server.ssl.key-store-password=M9z21aFp #server.ssl.key-store-type=JKS #ssl的开关 server.ssl.enable=false diff --git a/src/main/resources/mapper_xml/AppMapper.xml b/src/main/resources/mapper_xml/AppMapper.xml deleted file mode 100644 index f1e7bc67..00000000 --- a/src/main/resources/mapper_xml/AppMapper.xml +++ /dev/null @@ -1,443 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - and ${criterion.condition} - - - and ${criterion.condition} #{criterion.value} - - - and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} - - - and ${criterion.condition} - - #{listItem} - - - - - - - - - - - - - - - - - - - and ${criterion.condition} - - - and ${criterion.condition} #{criterion.value} - - - and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} - - - and ${criterion.condition} - - #{listItem} - - - - - - - - - - - - Id, Number, Name, Type, Icon, URL, Width, Height, ReSize, OpenMax, Flash, ZL, Sort, - Remark, Enabled, delete_Flag - - - - - - delete from jsh_app - where Id = #{id,jdbcType=BIGINT} - - - - delete from jsh_app - - - - - - - insert into jsh_app (Id, Number, Name, - Type, Icon, URL, Width, - Height, ReSize, OpenMax, Flash, - ZL, Sort, Remark, Enabled, - delete_Flag) - values (#{id,jdbcType=BIGINT}, #{number,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, - #{type,jdbcType=VARCHAR}, #{icon,jdbcType=VARCHAR}, #{url,jdbcType=VARCHAR}, #{width,jdbcType=VARCHAR}, - #{height,jdbcType=VARCHAR}, #{resize,jdbcType=BIT}, #{openmax,jdbcType=BIT}, #{flash,jdbcType=BIT}, - #{zl,jdbcType=VARCHAR}, #{sort,jdbcType=VARCHAR}, #{remark,jdbcType=VARCHAR}, #{enabled,jdbcType=BIT}, - #{deleteFlag,jdbcType=VARCHAR}) - - - - insert into jsh_app - - - Id, - - - Number, - - - Name, - - - Type, - - - Icon, - - - URL, - - - Width, - - - Height, - - - ReSize, - - - OpenMax, - - - Flash, - - - ZL, - - - Sort, - - - Remark, - - - Enabled, - - - delete_Flag, - - - - - #{id,jdbcType=BIGINT}, - - - #{number,jdbcType=VARCHAR}, - - - #{name,jdbcType=VARCHAR}, - - - #{type,jdbcType=VARCHAR}, - - - #{icon,jdbcType=VARCHAR}, - - - #{url,jdbcType=VARCHAR}, - - - #{width,jdbcType=VARCHAR}, - - - #{height,jdbcType=VARCHAR}, - - - #{resize,jdbcType=BIT}, - - - #{openmax,jdbcType=BIT}, - - - #{flash,jdbcType=BIT}, - - - #{zl,jdbcType=VARCHAR}, - - - #{sort,jdbcType=VARCHAR}, - - - #{remark,jdbcType=VARCHAR}, - - - #{enabled,jdbcType=BIT}, - - - #{deleteFlag,jdbcType=VARCHAR}, - - - - - - - update jsh_app - - - Id = #{record.id,jdbcType=BIGINT}, - - - Number = #{record.number,jdbcType=VARCHAR}, - - - Name = #{record.name,jdbcType=VARCHAR}, - - - Type = #{record.type,jdbcType=VARCHAR}, - - - Icon = #{record.icon,jdbcType=VARCHAR}, - - - URL = #{record.url,jdbcType=VARCHAR}, - - - Width = #{record.width,jdbcType=VARCHAR}, - - - Height = #{record.height,jdbcType=VARCHAR}, - - - ReSize = #{record.resize,jdbcType=BIT}, - - - OpenMax = #{record.openmax,jdbcType=BIT}, - - - Flash = #{record.flash,jdbcType=BIT}, - - - ZL = #{record.zl,jdbcType=VARCHAR}, - - - Sort = #{record.sort,jdbcType=VARCHAR}, - - - Remark = #{record.remark,jdbcType=VARCHAR}, - - - Enabled = #{record.enabled,jdbcType=BIT}, - - - delete_Flag = #{record.deleteFlag,jdbcType=VARCHAR}, - - - - - - - - - update jsh_app - set Id = #{record.id,jdbcType=BIGINT}, - Number = #{record.number,jdbcType=VARCHAR}, - Name = #{record.name,jdbcType=VARCHAR}, - Type = #{record.type,jdbcType=VARCHAR}, - Icon = #{record.icon,jdbcType=VARCHAR}, - URL = #{record.url,jdbcType=VARCHAR}, - Width = #{record.width,jdbcType=VARCHAR}, - Height = #{record.height,jdbcType=VARCHAR}, - ReSize = #{record.resize,jdbcType=BIT}, - OpenMax = #{record.openmax,jdbcType=BIT}, - Flash = #{record.flash,jdbcType=BIT}, - ZL = #{record.zl,jdbcType=VARCHAR}, - Sort = #{record.sort,jdbcType=VARCHAR}, - Remark = #{record.remark,jdbcType=VARCHAR}, - Enabled = #{record.enabled,jdbcType=BIT}, - delete_Flag = #{record.deleteFlag,jdbcType=VARCHAR} - - - - - - - update jsh_app - - - Number = #{number,jdbcType=VARCHAR}, - - - Name = #{name,jdbcType=VARCHAR}, - - - Type = #{type,jdbcType=VARCHAR}, - - - Icon = #{icon,jdbcType=VARCHAR}, - - - URL = #{url,jdbcType=VARCHAR}, - - - Width = #{width,jdbcType=VARCHAR}, - - - Height = #{height,jdbcType=VARCHAR}, - - - ReSize = #{resize,jdbcType=BIT}, - - - OpenMax = #{openmax,jdbcType=BIT}, - - - Flash = #{flash,jdbcType=BIT}, - - - ZL = #{zl,jdbcType=VARCHAR}, - - - Sort = #{sort,jdbcType=VARCHAR}, - - - Remark = #{remark,jdbcType=VARCHAR}, - - - Enabled = #{enabled,jdbcType=BIT}, - - - delete_Flag = #{deleteFlag,jdbcType=VARCHAR}, - - - where Id = #{id,jdbcType=BIGINT} - - - - update jsh_app - set Number = #{number,jdbcType=VARCHAR}, - Name = #{name,jdbcType=VARCHAR}, - Type = #{type,jdbcType=VARCHAR}, - Icon = #{icon,jdbcType=VARCHAR}, - URL = #{url,jdbcType=VARCHAR}, - Width = #{width,jdbcType=VARCHAR}, - Height = #{height,jdbcType=VARCHAR}, - ReSize = #{resize,jdbcType=BIT}, - OpenMax = #{openmax,jdbcType=BIT}, - Flash = #{flash,jdbcType=BIT}, - ZL = #{zl,jdbcType=VARCHAR}, - Sort = #{sort,jdbcType=VARCHAR}, - Remark = #{remark,jdbcType=VARCHAR}, - Enabled = #{enabled,jdbcType=BIT}, - delete_Flag = #{deleteFlag,jdbcType=VARCHAR} - where Id = #{id,jdbcType=BIGINT} - - \ No newline at end of file diff --git a/src/main/resources/mapper_xml/AppMapperEx.xml b/src/main/resources/mapper_xml/AppMapperEx.xml deleted file mode 100644 index 8422d73c..00000000 --- a/src/main/resources/mapper_xml/AppMapperEx.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - update jsh_app - set delete_Flag='1' - where 1=1 - and id in ( - - #{id} - - ) - - \ No newline at end of file diff --git a/src/test/resources/generatorConfig.xml b/src/test/resources/generatorConfig.xml index 37247683..cc8718a2 100644 --- a/src/test/resources/generatorConfig.xml +++ b/src/test/resources/generatorConfig.xml @@ -44,7 +44,6 @@