Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
H
hp-smart
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
platform
hp-smart
Commits
b17fbf31
Commit
b17fbf31
authored
Mar 12, 2024
by
wancheng
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/dev' into dev
parents
3ce82e9f
394aaec5
Show whitespace changes
Inline
Side-by-side
Showing
30 changed files
with
1679 additions
and
827 deletions
+1679
-827
pom.xml
pom.xml
+7
-0
DdynamicEnum.java
src/main/java/com/baosight/hpjx/common/DdynamicEnum.java
+7
-2
FilterConfig.java
src/main/java/com/baosight/hpjx/config/FilterConfig.java
+0
-25
EPCodeConstant.java
.../java/com/baosight/hpjx/core/constant/EPCodeConstant.java
+24
-0
GlobalExceptionHandler.java
.../baosight/hpjx/core/exception/GlobalExceptionHandler.java
+47
-0
MyGenericFilterFilter.java
.../com/baosight/hpjx/core/filter/MyGenericFilterFilter.java
+46
-0
MyHandlerInterceptor.java
.../baosight/hpjx/core/interceptor/MyHandlerInterceptor.java
+105
-0
MyWebMvcConfigurer.java
...om/baosight/hpjx/core/interceptor/MyWebMvcConfigurer.java
+31
-0
OssClientUtils.java
src/main/java/com/baosight/hpjx/core/oss/OssClientUtils.java
+98
-0
OssUtils.java
src/main/java/com/baosight/hpjx/core/oss/OssUtils.java
+47
-0
UserSessionUtils.java
...ava/com/baosight/hpjx/core/security/UserSessionUtils.java
+20
-0
ServletTools.java
src/main/java/com/baosight/hpjx/core/tools/ServletTools.java
+46
-0
HPPZ013.xml
src/main/java/com/baosight/hpjx/hp/pz/sql/HPPZ013.xml
+17
-0
HPPZTools.java
src/main/java/com/baosight/hpjx/hp/pz/tools/HPPZTools.java
+13
-5
ServiceHPSC007.java
.../java/com/baosight/hpjx/hp/sc/service/ServiceHPSC007.java
+7
-3
HPXS002.java
src/main/java/com/baosight/hpjx/hp/xs/domain/HPXS002.java
+543
-0
ServiceHPXS001.java
.../java/com/baosight/hpjx/hp/xs/service/ServiceHPXS001.java
+12
-1
ServiceHPXS002.java
.../java/com/baosight/hpjx/hp/xs/service/ServiceHPXS002.java
+44
-0
HPXS001.xml
src/main/java/com/baosight/hpjx/hp/xs/sql/HPXS001.xml
+9
-3
HPXS002.xml
src/main/java/com/baosight/hpjx/hp/xs/sql/HPXS002.xml
+281
-0
HTMLFilter.java
src/main/java/com/baosight/hpjx/xss/HTMLFilter.java
+0
-535
XssFilter.java
src/main/java/com/baosight/hpjx/xss/XssFilter.java
+0
-77
XssHttpServletRequestWrapper.java
...a/com/baosight/hpjx/xss/XssHttpServletRequestWrapper.java
+0
-155
iPlatV6-login.jsp
src/main/resources/META-INF/resources/iPlatV6-login.jsp
+13
-13
applicationContext-s3.xml
...main/resources/spring/framework/applicationContext-s3.xml
+13
-0
EUDM04.jsp
src/main/webapp/EU/DM/EUDM04.jsp
+17
-0
HPSC007.jsp
src/main/webapp/HP/SC/HPSC007.jsp
+1
-1
HPXS002.js
src/main/webapp/HP/XS/HPXS002.js
+176
-0
HPXS002.jsp
src/main/webapp/HP/XS/HPXS002.jsp
+55
-7
login.png
src/main/webapp/common/img/login.png
+0
-0
No files found.
pom.xml
View file @
b17fbf31
...
...
@@ -161,9 +161,16 @@
<artifactId>
jxl
</artifactId>
<version>
2.6.12
</version>
</dependency>
<!-- S3 OSS -->
<dependency>
<groupId>
com.baosight.iplat4j
</groupId>
<artifactId>
oss-plugin
</artifactId>
<version>
7.0.0
</version>
</dependency>
</dependencies>
<build>
<finalName>
hpjx
</finalName>
<resources>
<resource>
<directory>
src/main/java
</directory>
...
...
src/main/java/com/baosight/hpjx/common/DdynamicEnum.java
View file @
b17fbf31
...
...
@@ -249,9 +249,14 @@ public enum DdynamicEnum {
* 用途:厂区查询
* 编写:ly
*/
FACTORY_CODE_BLOCK_ID
(
"factory_code_block_id"
,
"factoryCode"
,
"factoryName"
,
"HPXS001.queryFactoryCode"
);
FACTORY_CODE_BLOCK_ID
(
"factory_code_block_id"
,
"factoryCode"
,
"factoryName"
,
"HPXS001.queryFactoryCode"
),
/**
* 模块:工人管理
* 用途:工人管理下拉框
* 编写:wwl
*/
WORKER_BLOCK_ID
(
"worker_block_id"
,
"userId"
,
"userName"
,
"HPPZ013.queryComboBox"
);
/** 将结果集放入的块名 */
...
...
src/main/java/com/baosight/hpjx/config/FilterConfig.java
deleted
100644 → 0
View file @
3ce82e9f
package
com
.
baosight
.
hpjx
.
config
;
import
com.baosight.hpjx.xss.XssFilter
;
import
org.springframework.boot.web.servlet.FilterRegistrationBean
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
/**
* @Author wwl
* @Date 2024/3/11 14:20
*/
@Configuration
public
class
FilterConfig
{
@Bean
public
FilterRegistrationBean
<
XssFilter
>
xssFilterRegistration
()
{
FilterRegistrationBean
<
XssFilter
>
registration
=
new
FilterRegistrationBean
<>();
registration
.
setFilter
(
new
XssFilter
());
registration
.
addUrlPatterns
(
"/*"
);
registration
.
setOrder
(
1
);
return
registration
;
}
}
\ No newline at end of file
src/main/java/com/baosight/hpjx/core/constant/EPCodeConstant.java
0 → 100644
View file @
b17fbf31
package
com
.
baosight
.
hpjx
.
core
.
constant
;
/**
* 平台消息统一存放key
*
* @author:songx
* @date:2024/3/12,10:49
*/
public
class
EPCodeConstant
{
// 许可证不正确
public
static
final
String
EP_0000
=
"ep.0000"
;
// 页面不存在或禁止访问
public
static
final
String
EP_0010
=
"ep.0010"
;
// 页面不存在或禁止访问
public
static
final
String
EP_0012
=
"ep.0012"
;
// 您所访问的页面没有访问权限
public
static
final
String
ES001
=
"ES001"
;
// 空白页
public
static
final
String
ES999
=
"ES999"
;
// 500页面
public
static
final
String
ES500
=
"ES500"
;
}
src/main/java/com/baosight/hpjx/core/exception/GlobalExceptionHandler.java
0 → 100644
View file @
b17fbf31
package
com
.
baosight
.
hpjx
.
core
.
exception
;
import
com.baosight.hpjx.core.constant.EPCodeConstant
;
import
com.baosight.hpjx.core.tools.ServletTools
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.security.access.AccessDeniedException
;
import
org.springframework.web.bind.annotation.ExceptionHandler
;
import
org.springframework.web.bind.annotation.RestControllerAdvice
;
import
javax.servlet.ServletException
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
java.io.IOException
;
/**
* @author:songx
* @date:2024/3/11,14:58
*/
@RestControllerAdvice
public
class
GlobalExceptionHandler
{
@Autowired
private
HttpServletRequest
request
;
@Autowired
private
HttpServletResponse
response
;
/**
* RuntimeException
*
* @param e
* @throws IOException
* @throws ServletException
*/
@ExceptionHandler
(
Exception
.
class
)
public
void
exceptionHandler
(
Exception
e
)
throws
IOException
,
ServletException
{
// 权限异常
if
(
e
instanceof
AccessDeniedException
)
{
ServletTools
.
dispatcherError
(
EPCodeConstant
.
ES001
,
request
.
getServletPath
(),
request
,
response
);
}
else
if
(
e
instanceof
ClassNotFoundException
)
{
// class不存在
ServletTools
.
dispatcherError
(
EPCodeConstant
.
EP_0010
,
request
.
getServletPath
(),
request
,
response
);
}
else
{
ServletTools
.
dispatcherError
(
EPCodeConstant
.
ES500
,
"您所访问的服务出错了"
,
request
,
response
);
}
}
}
src/main/java/com/baosight/hpjx/core/filter/MyGenericFilterFilter.java
0 → 100644
View file @
b17fbf31
package
com
.
baosight
.
hpjx
.
core
.
filter
;
import
com.baosight.hpjx.core.constant.EPCodeConstant
;
import
com.baosight.hpjx.core.tools.ServletTools
;
import
org.springframework.core.Ordered
;
import
org.springframework.core.annotation.Order
;
import
org.springframework.http.HttpHeaders
;
import
org.springframework.security.web.firewall.RequestRejectedException
;
import
org.springframework.stereotype.Component
;
import
org.springframework.web.filter.GenericFilterBean
;
import
javax.servlet.FilterChain
;
import
javax.servlet.ServletException
;
import
javax.servlet.ServletRequest
;
import
javax.servlet.ServletResponse
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
java.io.IOException
;
import
lombok.extern.slf4j.Slf4j
;
/**
* 滤波器处理
*
* @author:songx
* @date:2024/3/12,10:32
*/
@Slf4j
@Component
@Order
(
Ordered
.
HIGHEST_PRECEDENCE
)
public
class
MyGenericFilterFilter
extends
GenericFilterBean
{
@Override
public
void
doFilter
(
ServletRequest
servletRequest
,
ServletResponse
servletResponse
,
FilterChain
chain
)
throws
IOException
,
ServletException
{
HttpServletRequest
request
=
(
HttpServletRequest
)
servletRequest
;
HttpServletResponse
response
=
(
HttpServletResponse
)
servletResponse
;
try
{
chain
.
doFilter
(
servletRequest
,
servletResponse
);
}
catch
(
RequestRejectedException
e
)
{
log
.
warn
(
"request_rejected: remote={}, user_agent={}, request_url={}"
,
request
.
getRemoteHost
(),
request
.
getHeader
(
HttpHeaders
.
USER_AGENT
),
request
.
getRequestURL
(),
e
);
ServletTools
.
dispatcherError
(
EPCodeConstant
.
EP_0010
,
request
.
getServletPath
(),
request
,
response
);
}
}
}
src/main/java/com/baosight/hpjx/core/interceptor/MyHandlerInterceptor.java
0 → 100644
View file @
b17fbf31
package
com
.
baosight
.
hpjx
.
core
.
interceptor
;
import
com.baosight.hpjx.core.constant.EPCodeConstant
;
import
com.baosight.hpjx.core.tools.ServletTools
;
import
com.baosight.hpjx.util.ObjectUtils
;
import
com.baosight.hpjx.util.StringUtils
;
import
com.baosight.iplat4j.core.ioc.spring.PlatApplicationContext
;
import
com.baosight.xservices.xs.util.LoginUserDetails
;
import
org.springframework.web.servlet.HandlerInterceptor
;
import
org.springframework.web.servlet.ModelAndView
;
import
javax.servlet.ServletException
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
javax.servlet.http.HttpSession
;
import
java.io.IOException
;
import
lombok.extern.slf4j.Slf4j
;
/**
* 自定义拦截器
*
* @author:songx
* @date:2022/10/9,8:58
*/
@Slf4j
public
class
MyHandlerInterceptor
implements
HandlerInterceptor
{
@Override
public
boolean
preHandle
(
HttpServletRequest
request
,
HttpServletResponse
response
,
Object
o
)
throws
Exception
{
try
{
// 校验接口权限
boolean
isInterfaceAuth
=
this
.
checkUserInterfaceAuth
(
request
,
response
);
if
(!
isInterfaceAuth
)
{
return
false
;
}
}
catch
(
IOException
e
)
{
log
.
error
(
"重定向失败:{}"
,
e
.
getMessage
(),
e
);
}
return
true
;
}
@Override
public
void
postHandle
(
HttpServletRequest
request
,
HttpServletResponse
response
,
Object
o
,
ModelAndView
modelAndView
)
throws
Exception
{
}
@Override
public
void
afterCompletion
(
HttpServletRequest
request
,
HttpServletResponse
response
,
Object
o
,
Exception
e
)
{
}
/**
* 校验用户
*
* @param request
* @param response
*/
private
boolean
checkUserInterfaceAuth
(
HttpServletRequest
request
,
HttpServletResponse
response
)
throws
ServletException
,
IOException
{
HttpSession
session
=
request
.
getSession
();
String
loginName
=
ObjectUtils
.
toString
(
session
.
getAttribute
(
"loginname"
));
String
servletPath
=
request
.
getServletPath
();
// // 从路径中截取页面号和方法名,例:/service/EDFA10/query
String
[]
servletPaths
=
servletPath
.
split
(
"/"
);
// 异常请求不记录
if
(
servletPaths
.
length
>
2
&&
"$src_url$"
.
equals
(
servletPaths
[
2
]))
{
return
true
;
}
// length=3:接口
return
this
.
checkInterfaceAuth
(
loginName
,
servletPaths
,
request
,
response
);
}
/**
* 用户接口权限校验
* servletPaths.length=3:接口
*
* @param loginName
* @param servletPaths
* @param request
* @param response
*/
private
boolean
checkInterfaceAuth
(
String
loginName
,
String
[]
servletPaths
,
HttpServletRequest
request
,
HttpServletResponse
response
)
throws
ServletException
,
IOException
{
if
(
servletPaths
.
length
!=
4
)
{
return
true
;
}
// 从配置中读取需要验证的模块
String
interfaceAuth
=
PlatApplicationContext
.
getProperty
(
"iplat4j.interface.auth.module"
);
if
(
StringUtils
.
isBlank
(
interfaceAuth
))
{
return
true
;
}
// 检查模块是否需要管理员权限
String
moduleName
=
ServletTools
.
getModule
(
request
);
if
(!
StringUtils
.
startsWithAny
(
moduleName
,
interfaceAuth
.
split
(
";"
)))
{
return
true
;
}
// 是超级管理员
if
(
LoginUserDetails
.
isUserAdmin
(
loginName
))
{
return
true
;
}
ServletTools
.
dispatcherError
(
EPCodeConstant
.
ES001
,
request
.
getServletPath
(),
request
,
response
);
return
false
;
}
}
src/main/java/com/baosight/hpjx/core/interceptor/MyWebMvcConfigurer.java
0 → 100644
View file @
b17fbf31
package
com
.
baosight
.
hpjx
.
core
.
interceptor
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.web.servlet.config.annotation.InterceptorRegistry
;
import
org.springframework.web.servlet.config.annotation.WebMvcConfigurer
;
/**
* @author:songx
* @date:2023/11/23,11:13
*/
@Configuration
public
class
MyWebMvcConfigurer
implements
WebMvcConfigurer
{
/**
* 配置拦截规则与注入拦截器
*
* @param registry
*/
@Override
public
void
addInterceptors
(
InterceptorRegistry
registry
)
{
// addPathPattern 添加拦截规则 /** 拦截所有包括静态资源
// excludePathPattern 排除拦截规则 所以我们需要放开静态资源的拦截
registry
.
addInterceptor
(
new
MyHandlerInterceptor
())
.
addPathPatterns
(
"/service/**"
)
.
addPathPatterns
(
"/web/**"
)
.
addPathPatterns
(
"/**"
)
// .excludePathPatterns("/")
.
excludePathPatterns
(
"/login"
)
.
excludePathPatterns
(
"/css/**"
,
"/fonts/**"
,
"/images/**"
,
"/js/**"
);
}
}
src/main/java/com/baosight/hpjx/core/oss/OssClientUtils.java
0 → 100644
View file @
b17fbf31
package
com
.
baosight
.
hpjx
.
core
.
oss
;
import
com.amazonaws.ClientConfiguration
;
import
com.amazonaws.auth.AWSStaticCredentialsProvider
;
import
com.amazonaws.auth.BasicAWSCredentials
;
import
com.amazonaws.client.builder.AwsClientBuilder
;
import
com.amazonaws.services.s3.AmazonS3
;
import
com.amazonaws.services.s3.AmazonS3ClientBuilder
;
import
com.baosight.hpjx.util.StringUtils
;
import
com.baosight.iplat4j.core.ioc.spring.PlatApplicationContext
;
import
lombok.extern.slf4j.Slf4j
;
/**
* OSS凭证
*
* @author:songx
* @date:2023/8/28,11:26
*/
@Slf4j
public
class
OssClientUtils
{
private
OssClientUtils
()
{
}
/**
* 初始化配置信息(纯粹就打印日志而已,因为会加载该类的全局变量)
*/
public
static
void
init
()
{
AmazonS3
s3Client
=
Instance
.
s3Client
;
log
.
info
(
"初始化OSS客户端完成:isReady -> {}"
,
s3Client
!=
null
);
}
/**
* 获取S3客户端
*
* @return
*/
public
static
AmazonS3
getS3Client
()
{
return
Instance
.
s3Client
;
}
/**
* 刷新客户端
*/
public
static
void
refresh
()
{
Instance
.
refresh
();
}
/**
* 初始化Instance
*
* @author:songx
* @date:2022/4/2,9:58
*/
private
static
class
Instance
{
/**
* 客户端实例
*/
private
static
AmazonS3
s3Client
=
buildAmazonS3
();
/**
* 刷新S3客户端
*/
private
static
void
refresh
()
{
s3Client
=
buildAmazonS3
();
log
.
info
(
"刷新OSS客户端完成:isReady->{}"
,
s3Client
!=
null
);
}
/**
* 获取AmazonS3Client实例
*
* @return
*/
private
static
synchronized
AmazonS3
buildAmazonS3
()
{
String
accessKey
=
PlatApplicationContext
.
getProperty
(
"iplat4j.admin.objectStorage.s3.accessKey"
);
String
secretKey
=
PlatApplicationContext
.
getProperty
(
"iplat4j.admin.objectStorage.s3.secretKey"
);
String
endpoint
=
PlatApplicationContext
.
getProperty
(
"iplat4j.admin.objectStorage.s3.endpoint"
);
if
(
StringUtils
.
isBlank
(
accessKey
)
||
StringUtils
.
isBlank
(
secretKey
)
||
StringUtils
.
isBlank
(
endpoint
))
{
return
null
;
}
AmazonS3ClientBuilder
client
=
AmazonS3ClientBuilder
.
standard
();
ClientConfiguration
config
=
new
ClientConfiguration
();
config
.
setProtocol
(
com
.
amazonaws
.
Protocol
.
HTTPS
);
config
.
setConnectionTimeout
(
10001
);
config
.
setSignerOverride
(
"S3SignerType"
);
client
.
setClientConfiguration
(
config
);
client
.
setCredentials
(
new
AWSStaticCredentialsProvider
(
new
BasicAWSCredentials
(
accessKey
,
secretKey
)));
String
url
=
endpoint
+
":"
+
80
;
client
.
setEndpointConfiguration
(
new
AwsClientBuilder
.
EndpointConfiguration
(
endpoint
,
null
));
return
client
.
build
();
}
}
}
src/main/java/com/baosight/hpjx/core/oss/OssUtils.java
0 → 100644
View file @
b17fbf31
package
com
.
baosight
.
hpjx
.
core
.
oss
;
import
com.amazonaws.services.s3.AmazonS3
;
import
com.baosight.hpjx.util.AssertUtils
;
import
com.baosight.iplat4j.core.ioc.spring.PlatApplicationContext
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.jsp.PageContext
;
import
java.io.File
;
/**
* OSS工具类
*
* @author:songx
* @date:2023/8/28,11:25
*/
public
class
OssUtils
{
// 桶名称
private
static
final
String
bucketName
=
PlatApplicationContext
.
getProperty
(
"iplat4j.admin.objectStorage.s3.bucket"
);
/**
* 前端上传文件
*
* @param pageContext
* @return
* @throws Exception
*/
public
static
String
uploadFile
(
PageContext
pageContext
)
throws
Exception
{
HttpServletRequest
request
=
(
HttpServletRequest
)
pageContext
.
getRequest
();
return
null
;
}
/**
* 上传文件
*
* @param key 默认不指定key的情况下,以文件内容的hash值作为文件名
* @param file
*/
public
static
void
uploadFile
(
String
key
,
File
file
)
{
AmazonS3
client
=
OssClientUtils
.
getS3Client
();
AssertUtils
.
isNull
(
client
,
"上传失败,OSS客户端未初始化,请检查"
);
client
.
putObject
(
bucketName
,
key
,
file
);
}
}
src/main/java/com/baosight/hpjx/core/security/UserSessionUtils.java
View file @
b17fbf31
...
...
@@ -7,6 +7,7 @@ import com.baosight.iplat4j.core.ei.EiInfo;
import
com.baosight.iplat4j.core.exception.PlatException
;
import
com.baosight.iplat4j.core.service.soa.XLocalManager
;
import
com.baosight.iplat4j.core.web.threadlocal.UserSession
;
import
com.baosight.xservices.xs.util.LoginUserDetails
;
import
org.apache.commons.collections.MapUtils
;
import
java.util.concurrent.ConcurrentHashMap
;
...
...
@@ -20,6 +21,7 @@ public class UserSessionUtils extends UserSession {
private
static
ConcurrentMap
companyMap
=
new
ConcurrentHashMap
();
private
static
ConcurrentMap
depMap
=
new
ConcurrentHashMap
();
private
static
ConcurrentMap
userAdminMap
=
new
ConcurrentHashMap
();
/**
* 获取用户信息
...
...
@@ -86,4 +88,22 @@ public class UserSessionUtils extends UserSession {
return
depCode
;
}
/**
* 获取登录用户是否超级管理员
*
* @return
*/
public
static
boolean
isUserAdmin
()
{
String
loginName
=
getLoginName
();
if
(
loginName
==
null
)
{
return
false
;
}
Boolean
isUserAdmin
=
MapUtils
.
getBoolean
(
userAdminMap
,
loginName
);
if
(
isUserAdmin
==
null
)
{
isUserAdmin
=
LoginUserDetails
.
isUserAdmin
(
loginName
);
userAdminMap
.
put
(
loginName
,
isUserAdmin
);
}
return
isUserAdmin
;
}
}
src/main/java/com/baosight/hpjx/core/tools/ServletTools.java
0 → 100644
View file @
b17fbf31
package
com
.
baosight
.
hpjx
.
core
.
tools
;
import
com.baosight.hpjx.util.StringUtils
;
import
javax.servlet.ServletException
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
java.io.IOException
;
/**
* @author:songx
* @date:2024/3/12,10:38
*/
public
class
ServletTools
{
/**
* 获取模块名称
*
* @return
*/
public
static
String
getModule
(
HttpServletRequest
request
)
{
String
servletPath
=
request
.
getServletPath
();
if
(
StringUtils
.
isBlank
(
servletPath
))
{
return
""
;
}
String
[]
servletPaths
=
servletPath
.
split
(
"/"
);
if
(
servletPaths
==
null
||
servletPaths
.
length
<
3
)
{
return
servletPath
;
}
return
servletPaths
[
2
];
}
/**
* 重定向到错误信息展示页面
*
* @param msgKey
* @param message
*/
public
static
void
dispatcherError
(
String
msgKey
,
String
message
,
HttpServletRequest
request
,
HttpServletResponse
response
)
throws
ServletException
,
IOException
{
request
.
setAttribute
(
"iplat_msgKey"
,
msgKey
);
request
.
setAttribute
(
"iplat_msg"
,
message
);
request
.
getRequestDispatcher
(
"/EP/EP01.jsp"
).
forward
(
request
,
response
);
}
}
src/main/java/com/baosight/hpjx/hp/pz/sql/HPPZ013.xml
View file @
b17fbf31
...
...
@@ -168,4 +168,21 @@
WHERE ID = #id#
</update>
<select
id=
"queryComboBox"
parameterClass=
"java.util.HashMap"
resultClass=
"java.util.HashMap"
>
SELECT DISTINCT
USER_ID as "userId",
USER_NAME as "userName"
FROM ${hpjxSchema}.T_HPPZ013 WHERE STATUS = 1 AND DELETE_FLAG = '0'
<isNotEmpty
prepend=
" AND "
property=
"companyCode"
>
COMPANY_CODE = #companyCode#
</isNotEmpty>
<isNotEmpty
prepend=
" AND "
property=
"factoryCode"
>
FACTORY_CODE = #factoryCode#
</isNotEmpty>
<isNotEmpty
prepend=
" AND "
property=
"groupCode"
>
GROUP_CODE = #groupCode#
</isNotEmpty>
ORDER BY USER_ID
</select>
</sqlMap>
src/main/java/com/baosight/hpjx/hp/pz/tools/HPPZTools.java
View file @
b17fbf31
...
...
@@ -6,11 +6,7 @@ import com.baosight.hpjx.core.dao.DaoBase;
import
com.baosight.hpjx.core.dao.DaoUtils
;
import
com.baosight.hpjx.hp.constant.HPConstant
;
import
com.baosight.hpjx.hp.constant.HPSqlConstant
;
import
com.baosight.hpjx.hp.pz.domain.HPPZ004
;
import
com.baosight.hpjx.hp.pz.domain.HPPZ006
;
import
com.baosight.hpjx.hp.pz.domain.HPPZ007
;
import
com.baosight.hpjx.hp.pz.domain.HPPZ009
;
import
com.baosight.hpjx.hp.pz.domain.HPPZ011
;
import
com.baosight.hpjx.hp.pz.domain.*
;
import
com.baosight.hpjx.util.AssertUtils
;
import
com.baosight.hpjx.util.MapUtils
;
import
com.baosight.hpjx.util.ObjectUtils
;
...
...
@@ -534,6 +530,18 @@ public class HPPZTools {
}
}
public
static
class
HpPz013
{
public
static
HPPZ013
get
(
String
userId
)
{
AssertUtils
.
isNull
(
userId
,
"工人ID不能为空"
);
Map
queryMap
=
new
HashMap
();
queryMap
.
put
(
"userId"
,
userId
);
List
<
HPPZ013
>
results
=
DaoBase
.
getInstance
().
query
(
HPPZ013
.
QUERY
,
queryMap
);
AssertUtils
.
isEmpty
(
results
,
String
.
format
(
"工人ID[%s]不存在"
,
userId
));
return
results
.
get
(
0
);
}
}
/**
* 判断存货档案是否存在,如果存在返回存货档案,否则新增并返回存货档案
*
...
...
src/main/java/com/baosight/hpjx/hp/sc/service/ServiceHPSC007.java
View file @
b17fbf31
...
...
@@ -6,6 +6,7 @@ import com.baosight.hpjx.core.constant.CommonConstant;
import
com.baosight.hpjx.core.dao.DaoUtils
;
import
com.baosight.hpjx.core.security.UserSessionUtils
;
import
com.baosight.hpjx.hp.constant.HPConstant
;
import
com.baosight.hpjx.hp.pz.tools.HPPZTools
;
import
com.baosight.hpjx.hp.sc.domain.HPSC004
;
import
com.baosight.hpjx.hp.sc.domain.HPSC005
;
import
com.baosight.hpjx.hp.sc.domain.HPSC006
;
...
...
@@ -46,7 +47,10 @@ public class ServiceHPSC007 extends ServiceBase {
HPSC006
.
setPartName
(
HPSC005
.
getPartName
());
inInfo
.
addBlock
(
"detail"
).
addRow
(
HPSC006
);
inInfo
.
addBlock
(
EiConstant
.
resultBlock
).
addBlockMeta
(
new
HPSC007
().
eiMetadata
);
CommonMethod
.
initBlock
(
inInfo
,
Arrays
.
asList
(
DdynamicEnum
.
USER_BLOCK_ID
),
null
,
false
);
Map
map
=
new
HashMap
();
map
.
put
(
"factoryCode"
,
HPSC006
.
getFactoryCode
());
map
.
put
(
"groupCode"
,
HPSC006
.
getOrgNo
());
CommonMethod
.
initBlock
(
inInfo
,
Arrays
.
asList
(
DdynamicEnum
.
WORKER_BLOCK_ID
),
map
,
false
);
}
catch
(
Exception
e
)
{
LogUtils
.
setMsg
(
inInfo
,
e
,
"初始化失败"
);
}
...
...
@@ -112,8 +116,7 @@ public class ServiceHPSC007 extends ServiceBase {
BigDecimal
totalWt
=
new
BigDecimal
(
decimalFormat
.
format
(
num
.
multiply
(
unitWt
).
floatValue
()));
actualCompletionTotalWt
=
actualCompletionTotalWt
.
add
(
totalWt
);
HPSC007
.
setactualCompletionTotalWt
(
totalWt
);
Map
<
String
,
String
>
user
=
(
Map
<
String
,
String
>)
this
.
dao
.
get
(
"HPXSUser.queryComboBox"
,
"userId"
,
HPSC007
.
getUserId
());
HPSC007
.
setUserName
(
user
.
get
(
"userName"
));
HPSC007
.
setUserName
(
HPPZTools
.
HpPz013
.
get
(
HPSC007
.
getUserId
()).
getUserName
());
DaoUtils
.
insert
(
"HPSC007.insert"
,
HPSC007
);
}
// 修改下料表中的字段
...
...
@@ -178,6 +181,7 @@ public class ServiceHPSC007 extends ServiceBase {
BigDecimal
totalWt
=
new
BigDecimal
(
decimalFormat
.
format
(
Math
.
round
(
num
.
multiply
(
unitWt
).
floatValue
())));
actualCompletionTotalWt
=
actualCompletionTotalWt
.
add
(
new
BigDecimal
(
decimalFormat
.
format
(
Math
.
round
(
totalNum
.
multiply
(
unitWt
).
floatValue
()))));
HPSC007
.
setactualCompletionTotalWt
(
totalWt
);
HPSC007
.
setUserName
(
HPPZTools
.
HpPz013
.
get
(
HPSC007
.
getUserId
()).
getUserName
());
DaoUtils
.
insert
(
"HPSC007.update"
,
HPSC007
);
}
// 修改下料表中的字段
...
...
src/main/java/com/baosight/hpjx/hp/xs/domain/HPXS002.java
0 → 100644
View file @
b17fbf31
package
com
.
baosight
.
hpjx
.
hp
.
xs
.
domain
;
import
com.baosight.iplat4j.core.data.DaoEPBase
;
import
com.baosight.iplat4j.core.ei.EiColumn
;
import
com.baosight.iplat4j.core.util.NumberUtils
;
import
com.baosight.iplat4j.core.util.StringUtils
;
import
java.math.BigDecimal
;
import
java.util.HashMap
;
import
java.util.Map
;
/**
* Project: <br>
* Title:TeudmTemp.java <br>
* Description: <br>
*
* Copyrigth:Baosight Software LTD.co Copyright (c) 2019. <br>
*
* @version 1.0
* @history 2024-03-06 16:14:16 create
*/
public
class
HPXS002
extends
DaoEPBase
{
private
static
final
long
serialVersionUID
=
1L
;
public
static
final
String
FIELD_COMPANY_CODE
=
"companyCode"
;
/* 企业编码*/
public
static
final
String
FIELD_DOC_ID
=
"docId"
;
/* 文件标识*/
public
static
final
String
FIELD_DIR_ID
=
"dirId"
;
/* 目录标识*/
public
static
final
String
FIELD_DOC_NAME
=
"docName"
;
/* 文件名*/
public
static
final
String
FIELD_CHG_NAME
=
"chgName"
;
/* 物理文件名*/
public
static
final
String
FIELD_DOC_SIZE
=
"docSize"
;
/* 文件大小*/
public
static
final
String
FIELD_DOC_TAG
=
"docTag"
;
/* 文件标签*/
public
static
final
String
FIELD_CREATED_BY
=
"createdBy"
;
/* 记录创建者*/
public
static
final
String
FIELD_CREATED_NAME
=
"createdName"
;
/* 记录创建名称*/
public
static
final
String
FIELD_CREATED_TIME
=
"createdTime"
;
/* 记录创建时间*/
public
static
final
String
FIELD_UPDATED_BY
=
"updatedBy"
;
/* 记录修改者*/
public
static
final
String
FIELD_UPDATED_NAME
=
"updatedName"
;
/* 记录修改名称*/
public
static
final
String
FIELD_UPDATED_TIME
=
"updatedTime"
;
/* 记录修改时间*/
public
static
final
String
FIELD_ARCHIVE_FLAG
=
"archiveFlag"
;
/* 同步标记*/
public
static
final
String
FIELD_REAL_PATH
=
"realPath"
;
/* 物理路径*/
public
static
final
String
FIELD_BIZ_TYPE
=
"bizType"
;
/* 业务类型*/
public
static
final
String
FIELD_MAT_ID
=
"matId"
;
/* 业务类型*/
public
static
final
String
FIELD_PROJ_NAME
=
"projName"
;
/* 项目名称*/
public
static
final
String
FIELD_PRDT_TYPE
=
"prdtType"
;
/* 产品类型*/
public
static
final
String
FIELD_PRDT_NAME
=
"prdtName"
;
/* 产品名称*/
public
static
final
String
COL_COMPANY_CODE
=
"COMPANY_CODE"
;
/* 企业编码*/
public
static
final
String
COL_DOC_ID
=
"DOC_ID"
;
/* 文件标识*/
public
static
final
String
COL_DIR_ID
=
"DIR_ID"
;
/* 目录标识*/
public
static
final
String
COL_DOC_NAME
=
"DOC_NAME"
;
/* 文件名*/
public
static
final
String
COL_CHG_NAME
=
"CHG_NAME"
;
/* 物理文件名*/
public
static
final
String
COL_DOC_SIZE
=
"DOC_SIZE"
;
/* 文件大小*/
public
static
final
String
COL_DOC_TAG
=
"DOC_TAG"
;
/* 文件标签*/
public
static
final
String
COL_CREATED_BY
=
"CREATED_BY"
;
/* 记录创建者*/
public
static
final
String
COL_CREATED_NAME
=
"CREATED_NAME"
;
/* 记录创建名称*/
public
static
final
String
COL_CREATED_TIME
=
"CREATED_TIME"
;
/* 记录创建时间*/
public
static
final
String
COL_UPDATED_BY
=
"UPDATED_BY"
;
/* 记录修改者*/
public
static
final
String
COL_UPDATED_NAME
=
"UPDATED_NAME"
;
/* 记录修改名称*/
public
static
final
String
COL_UPDATED_TIME
=
"UPDATED_TIME"
;
/* 记录修改时间*/
public
static
final
String
COL_ARCHIVE_FLAG
=
"ARCHIVE_FLAG"
;
/* 同步标记*/
public
static
final
String
COL_REAL_PATH
=
"REAL_PATH"
;
/* 物理路径*/
public
static
final
String
COL_BIZ_TYPE
=
"BIZ_TYPE"
;
/* 业务类型*/
public
static
final
String
COL_MAT_ID
=
"MAT_ID"
;
/* 业务类型*/
public
static
final
String
QUERY
=
"HPXS002.query"
;
public
static
final
String
COUNT
=
"HPXS002.count"
;
public
static
final
String
INSERT
=
"HPXS002.insert"
;
public
static
final
String
UPDATE
=
"HPXS002.update"
;
public
static
final
String
DELETE
=
"HPXS002.delete"
;
public
static
final
String
DELETE_BATCH
=
"HPXS002.deleteByBatch"
;
private
String
companyCode
=
" "
;
/* 企业编码*/
private
String
docId
=
" "
;
/* 文件标识*/
private
String
dirId
=
" "
;
/* 目录标识*/
private
String
docName
=
" "
;
/* 文件名*/
private
String
chgName
=
" "
;
/* 物理文件名*/
private
BigDecimal
docSize
=
new
BigDecimal
(
0
);
/* 文件大小*/
private
String
docTag
=
" "
;
/* 文件标签*/
private
String
createdBy
=
" "
;
/* 记录创建者*/
private
String
createdName
=
" "
;
/* 记录创建名称*/
private
String
createdTime
=
" "
;
/* 记录创建时间*/
private
String
updatedBy
=
" "
;
/* 记录修改者*/
private
String
updatedName
=
" "
;
/* 记录修改名称*/
private
String
updatedTime
=
" "
;
/* 记录修改时间*/
private
String
archiveFlag
=
" "
;
/* 同步标记*/
private
String
realPath
=
" "
;
/* 物理路径*/
private
String
bizType
=
" "
;
/* 业务类型*/
private
String
matId
=
" "
;
/* 业务类型*/
private
String
projName
=
" "
;
/* 项目名称*/
private
Integer
prdtType
;
/* 产品类型*/
private
String
prdtName
=
" "
;
/* 产品名称*/
/**
* initialize the metadata.
*/
public
void
initMetaData
()
{
EiColumn
eiColumn
;
eiColumn
=
new
EiColumn
(
FIELD_COMPANY_CODE
);
eiColumn
.
setPrimaryKey
(
true
);
eiColumn
.
setDescName
(
"企业编码"
);
eiMetadata
.
addMeta
(
eiColumn
);
eiColumn
=
new
EiColumn
(
FIELD_DOC_ID
);
eiColumn
.
setPrimaryKey
(
true
);
eiColumn
.
setDescName
(
"文件标识"
);
eiMetadata
.
addMeta
(
eiColumn
);
eiColumn
=
new
EiColumn
(
FIELD_DIR_ID
);
eiColumn
.
setDescName
(
"目录标识"
);
eiMetadata
.
addMeta
(
eiColumn
);
eiColumn
=
new
EiColumn
(
FIELD_DOC_NAME
);
eiColumn
.
setDescName
(
"文件名"
);
eiMetadata
.
addMeta
(
eiColumn
);
eiColumn
=
new
EiColumn
(
FIELD_CHG_NAME
);
eiColumn
.
setDescName
(
"物理文件名"
);
eiMetadata
.
addMeta
(
eiColumn
);
eiColumn
=
new
EiColumn
(
FIELD_DOC_SIZE
);
eiColumn
.
setType
(
"N"
);
eiColumn
.
setScaleLength
(
0
);
eiColumn
.
setFieldLength
(
16
);
eiColumn
.
setDescName
(
"文件大小"
);
eiMetadata
.
addMeta
(
eiColumn
);
eiColumn
=
new
EiColumn
(
FIELD_DOC_TAG
);
eiColumn
.
setDescName
(
"文件标签"
);
eiMetadata
.
addMeta
(
eiColumn
);
eiColumn
=
new
EiColumn
(
FIELD_CREATED_BY
);
eiColumn
.
setDescName
(
"记录创建者"
);
eiMetadata
.
addMeta
(
eiColumn
);
eiColumn
=
new
EiColumn
(
FIELD_CREATED_NAME
);
eiColumn
.
setDescName
(
"记录创建名称"
);
eiMetadata
.
addMeta
(
eiColumn
);
eiColumn
=
new
EiColumn
(
FIELD_CREATED_TIME
);
eiColumn
.
setDescName
(
"记录创建时间"
);
eiMetadata
.
addMeta
(
eiColumn
);
eiColumn
=
new
EiColumn
(
FIELD_UPDATED_BY
);
eiColumn
.
setDescName
(
"记录修改者"
);
eiMetadata
.
addMeta
(
eiColumn
);
eiColumn
=
new
EiColumn
(
FIELD_UPDATED_NAME
);
eiColumn
.
setDescName
(
"记录修改名称"
);
eiMetadata
.
addMeta
(
eiColumn
);
eiColumn
=
new
EiColumn
(
FIELD_UPDATED_TIME
);
eiColumn
.
setDescName
(
"记录修改时间"
);
eiMetadata
.
addMeta
(
eiColumn
);
eiColumn
=
new
EiColumn
(
FIELD_ARCHIVE_FLAG
);
eiColumn
.
setDescName
(
"同步标记"
);
eiMetadata
.
addMeta
(
eiColumn
);
eiColumn
=
new
EiColumn
(
FIELD_REAL_PATH
);
eiColumn
.
setDescName
(
"物理路径"
);
eiMetadata
.
addMeta
(
eiColumn
);
eiColumn
=
new
EiColumn
(
FIELD_BIZ_TYPE
);
eiColumn
.
setDescName
(
"业务类型"
);
eiMetadata
.
addMeta
(
eiColumn
);
eiColumn
=
new
EiColumn
(
FIELD_MAT_ID
);
eiColumn
.
setDescName
(
"物料ID"
);
eiMetadata
.
addMeta
(
eiColumn
);
eiColumn
=
new
EiColumn
(
FIELD_PROJ_NAME
);
eiColumn
.
setDescName
(
"项目名称"
);
eiMetadata
.
addMeta
(
eiColumn
);
eiColumn
=
new
EiColumn
(
FIELD_PRDT_TYPE
);
eiColumn
.
setDescName
(
"产品类型"
);
eiMetadata
.
addMeta
(
eiColumn
);
eiColumn
=
new
EiColumn
(
FIELD_PRDT_NAME
);
eiColumn
.
setDescName
(
"产品名称"
);
eiMetadata
.
addMeta
(
eiColumn
);
}
/**
* the constructor.
*/
public
HPXS002
()
{
initMetaData
();
}
/**
* get the companyCode - 企业编码.
* @return the companyCode
*/
public
String
getCompanyCode
()
{
return
this
.
companyCode
;
}
/**
* set the companyCode - 企业编码.
*
* @param companyCode - 企业编码
*/
public
void
setCompanyCode
(
String
companyCode
)
{
this
.
companyCode
=
companyCode
;
}
/**
* get the docId - 文件标识.
* @return the docId
*/
public
String
getDocId
()
{
return
this
.
docId
;
}
/**
* set the docId - 文件标识.
*
* @param docId - 文件标识
*/
public
void
setDocId
(
String
docId
)
{
this
.
docId
=
docId
;
}
/**
* get the dirId - 目录标识.
* @return the dirId
*/
public
String
getDirId
()
{
return
this
.
dirId
;
}
/**
* set the dirId - 目录标识.
*
* @param dirId - 目录标识
*/
public
void
setDirId
(
String
dirId
)
{
this
.
dirId
=
dirId
;
}
/**
* get the docName - 文件名.
* @return the docName
*/
public
String
getDocName
()
{
return
this
.
docName
;
}
/**
* set the docName - 文件名.
*
* @param docName - 文件名
*/
public
void
setDocName
(
String
docName
)
{
this
.
docName
=
docName
;
}
/**
* get the chgName - 物理文件名.
* @return the chgName
*/
public
String
getChgName
()
{
return
this
.
chgName
;
}
/**
* set the chgName - 物理文件名.
*
* @param chgName - 物理文件名
*/
public
void
setChgName
(
String
chgName
)
{
this
.
chgName
=
chgName
;
}
/**
* get the docSize - 文件大小.
* @return the docSize
*/
public
BigDecimal
getDocSize
()
{
return
this
.
docSize
;
}
/**
* set the docSize - 文件大小.
*
* @param docSize - 文件大小
*/
public
void
setDocSize
(
BigDecimal
docSize
)
{
this
.
docSize
=
docSize
;
}
/**
* get the docTag - 文件标签.
* @return the docTag
*/
public
String
getDocTag
()
{
return
this
.
docTag
;
}
/**
* set the docTag - 文件标签.
*
* @param docTag - 文件标签
*/
public
void
setDocTag
(
String
docTag
)
{
this
.
docTag
=
docTag
;
}
/**
* get the createdBy - 记录创建者.
* @return the createdBy
*/
public
String
getCreatedBy
()
{
return
this
.
createdBy
;
}
/**
* set the createdBy - 记录创建者.
*
* @param createdBy - 记录创建者
*/
public
void
setCreatedBy
(
String
createdBy
)
{
this
.
createdBy
=
createdBy
;
}
/**
* get the createdName - 记录创建名称.
* @return the createdName
*/
public
String
getCreatedName
()
{
return
this
.
createdName
;
}
/**
* set the createdName - 记录创建名称.
*
* @param createdName - 记录创建名称
*/
public
void
setCreatedName
(
String
createdName
)
{
this
.
createdName
=
createdName
;
}
/**
* get the createdTime - 记录创建时间.
* @return the createdTime
*/
public
String
getCreatedTime
()
{
return
this
.
createdTime
;
}
/**
* set the createdTime - 记录创建时间.
*
* @param createdTime - 记录创建时间
*/
public
void
setCreatedTime
(
String
createdTime
)
{
this
.
createdTime
=
createdTime
;
}
/**
* get the updatedBy - 记录修改者.
* @return the updatedBy
*/
public
String
getUpdatedBy
()
{
return
this
.
updatedBy
;
}
/**
* set the updatedBy - 记录修改者.
*
* @param updatedBy - 记录修改者
*/
public
void
setUpdatedBy
(
String
updatedBy
)
{
this
.
updatedBy
=
updatedBy
;
}
/**
* get the updatedName - 记录修改名称.
* @return the updatedName
*/
public
String
getUpdatedName
()
{
return
this
.
updatedName
;
}
/**
* set the updatedName - 记录修改名称.
*
* @param updatedName - 记录修改名称
*/
public
void
setUpdatedName
(
String
updatedName
)
{
this
.
updatedName
=
updatedName
;
}
/**
* get the updatedTime - 记录修改时间.
* @return the updatedTime
*/
public
String
getUpdatedTime
()
{
return
this
.
updatedTime
;
}
/**
* set the updatedTime - 记录修改时间.
*
* @param updatedTime - 记录修改时间
*/
public
void
setUpdatedTime
(
String
updatedTime
)
{
this
.
updatedTime
=
updatedTime
;
}
/**
* get the archiveFlag - 同步标记.
* @return the archiveFlag
*/
public
String
getArchiveFlag
()
{
return
this
.
archiveFlag
;
}
/**
* set the archiveFlag - 同步标记.
*
* @param archiveFlag - 同步标记
*/
@Override
public
void
setArchiveFlag
(
String
archiveFlag
)
{
this
.
archiveFlag
=
archiveFlag
;
}
/**
* get the realPath - 物理路径.
* @return the realPath
*/
public
String
getRealPath
()
{
return
this
.
realPath
;
}
/**
* set the realPath - 物理路径.
*
* @param realPath - 物理路径
*/
public
void
setRealPath
(
String
realPath
)
{
this
.
realPath
=
realPath
;
}
/**
* get the bizType - 业务类型.
* @return the bizType
*/
public
String
getBizType
()
{
return
this
.
bizType
;
}
/**
* set the bizType - 业务类型.
*
* @param bizType - 业务类型
*/
public
void
setBizType
(
String
bizType
)
{
this
.
bizType
=
bizType
;
}
public
String
getMatId
()
{
return
matId
;
}
public
void
setMatId
(
String
matId
)
{
this
.
matId
=
matId
;
}
public
String
getProjName
()
{
return
projName
;
}
public
void
setProjName
(
String
projName
)
{
this
.
projName
=
projName
;
}
public
Integer
getPrdtType
()
{
return
prdtType
;
}
public
void
setPrdtType
(
Integer
prdtType
)
{
this
.
prdtType
=
prdtType
;
}
public
String
getPrdtName
()
{
return
prdtName
;
}
public
void
setPrdtName
(
String
prdtName
)
{
this
.
prdtName
=
prdtName
;
}
/**
* get the value from Map.
*
* @param map - source data map
*/
@Override
public
void
fromMap
(
Map
map
)
{
setCompanyCode
(
StringUtils
.
defaultIfEmpty
(
StringUtils
.
toString
(
map
.
get
(
FIELD_COMPANY_CODE
)),
companyCode
));
setDocId
(
StringUtils
.
defaultIfEmpty
(
StringUtils
.
toString
(
map
.
get
(
FIELD_DOC_ID
)),
docId
));
setDirId
(
StringUtils
.
defaultIfEmpty
(
StringUtils
.
toString
(
map
.
get
(
FIELD_DIR_ID
)),
dirId
));
setDocName
(
StringUtils
.
defaultIfEmpty
(
StringUtils
.
toString
(
map
.
get
(
FIELD_DOC_NAME
)),
docName
));
setChgName
(
StringUtils
.
defaultIfEmpty
(
StringUtils
.
toString
(
map
.
get
(
FIELD_CHG_NAME
)),
chgName
));
setDocSize
(
NumberUtils
.
toBigDecimal
(
StringUtils
.
toString
(
map
.
get
(
FIELD_DOC_SIZE
)),
docSize
));
setDocTag
(
StringUtils
.
defaultIfEmpty
(
StringUtils
.
toString
(
map
.
get
(
FIELD_DOC_TAG
)),
docTag
));
setCreatedBy
(
StringUtils
.
defaultIfEmpty
(
StringUtils
.
toString
(
map
.
get
(
FIELD_CREATED_BY
)),
createdBy
));
setCreatedName
(
StringUtils
.
defaultIfEmpty
(
StringUtils
.
toString
(
map
.
get
(
FIELD_CREATED_NAME
)),
createdName
));
setCreatedTime
(
StringUtils
.
defaultIfEmpty
(
StringUtils
.
toString
(
map
.
get
(
FIELD_CREATED_TIME
)),
createdTime
));
setUpdatedBy
(
StringUtils
.
defaultIfEmpty
(
StringUtils
.
toString
(
map
.
get
(
FIELD_UPDATED_BY
)),
updatedBy
));
setUpdatedName
(
StringUtils
.
defaultIfEmpty
(
StringUtils
.
toString
(
map
.
get
(
FIELD_UPDATED_NAME
)),
updatedName
));
setUpdatedTime
(
StringUtils
.
defaultIfEmpty
(
StringUtils
.
toString
(
map
.
get
(
FIELD_UPDATED_TIME
)),
updatedTime
));
setArchiveFlag
(
StringUtils
.
defaultIfEmpty
(
StringUtils
.
toString
(
map
.
get
(
FIELD_ARCHIVE_FLAG
)),
archiveFlag
));
setRealPath
(
StringUtils
.
defaultIfEmpty
(
StringUtils
.
toString
(
map
.
get
(
FIELD_REAL_PATH
)),
realPath
));
setBizType
(
StringUtils
.
defaultIfEmpty
(
StringUtils
.
toString
(
map
.
get
(
FIELD_BIZ_TYPE
)),
bizType
));
setMatId
(
StringUtils
.
defaultIfEmpty
(
StringUtils
.
toString
(
map
.
get
(
FIELD_MAT_ID
)),
matId
));
setProjName
(
StringUtils
.
defaultIfEmpty
(
StringUtils
.
toString
(
map
.
get
(
FIELD_PROJ_NAME
)),
projName
));
setPrdtType
(
NumberUtils
.
toInteger
(
StringUtils
.
toString
(
map
.
get
(
FIELD_PRDT_TYPE
)),
prdtType
));
setPrdtName
(
StringUtils
.
defaultIfEmpty
(
StringUtils
.
toString
(
map
.
get
(
FIELD_PRDT_NAME
)),
prdtName
));
}
/**
* set the value to Map.
*/
@Override
public
Map
toMap
()
{
Map
map
=
new
HashMap
();
map
.
put
(
FIELD_COMPANY_CODE
,
StringUtils
.
toString
(
companyCode
,
eiMetadata
.
getMeta
(
FIELD_COMPANY_CODE
)));
map
.
put
(
FIELD_DOC_ID
,
StringUtils
.
toString
(
docId
,
eiMetadata
.
getMeta
(
FIELD_DOC_ID
)));
map
.
put
(
FIELD_DIR_ID
,
StringUtils
.
toString
(
dirId
,
eiMetadata
.
getMeta
(
FIELD_DIR_ID
)));
map
.
put
(
FIELD_DOC_NAME
,
StringUtils
.
toString
(
docName
,
eiMetadata
.
getMeta
(
FIELD_DOC_NAME
)));
map
.
put
(
FIELD_CHG_NAME
,
StringUtils
.
toString
(
chgName
,
eiMetadata
.
getMeta
(
FIELD_CHG_NAME
)));
map
.
put
(
FIELD_DOC_SIZE
,
StringUtils
.
toString
(
docSize
,
eiMetadata
.
getMeta
(
FIELD_DOC_SIZE
)));
map
.
put
(
FIELD_DOC_TAG
,
StringUtils
.
toString
(
docTag
,
eiMetadata
.
getMeta
(
FIELD_DOC_TAG
)));
map
.
put
(
FIELD_CREATED_BY
,
StringUtils
.
toString
(
createdBy
,
eiMetadata
.
getMeta
(
FIELD_CREATED_BY
)));
map
.
put
(
FIELD_CREATED_NAME
,
StringUtils
.
toString
(
createdName
,
eiMetadata
.
getMeta
(
FIELD_CREATED_NAME
)));
map
.
put
(
FIELD_CREATED_TIME
,
StringUtils
.
toString
(
createdTime
,
eiMetadata
.
getMeta
(
FIELD_CREATED_TIME
)));
map
.
put
(
FIELD_UPDATED_BY
,
StringUtils
.
toString
(
updatedBy
,
eiMetadata
.
getMeta
(
FIELD_UPDATED_BY
)));
map
.
put
(
FIELD_UPDATED_NAME
,
StringUtils
.
toString
(
updatedName
,
eiMetadata
.
getMeta
(
FIELD_UPDATED_NAME
)));
map
.
put
(
FIELD_UPDATED_TIME
,
StringUtils
.
toString
(
updatedTime
,
eiMetadata
.
getMeta
(
FIELD_UPDATED_TIME
)));
map
.
put
(
FIELD_ARCHIVE_FLAG
,
StringUtils
.
toString
(
archiveFlag
,
eiMetadata
.
getMeta
(
FIELD_ARCHIVE_FLAG
)));
map
.
put
(
FIELD_REAL_PATH
,
StringUtils
.
toString
(
realPath
,
eiMetadata
.
getMeta
(
FIELD_REAL_PATH
)));
map
.
put
(
FIELD_BIZ_TYPE
,
StringUtils
.
toString
(
bizType
,
eiMetadata
.
getMeta
(
FIELD_BIZ_TYPE
)));
map
.
put
(
FIELD_MAT_ID
,
StringUtils
.
toString
(
matId
,
eiMetadata
.
getMeta
(
FIELD_MAT_ID
)));
map
.
put
(
FIELD_PROJ_NAME
,
StringUtils
.
toString
(
projName
,
eiMetadata
.
getMeta
(
FIELD_PROJ_NAME
)));
map
.
put
(
FIELD_PRDT_TYPE
,
StringUtils
.
toString
(
prdtType
,
eiMetadata
.
getMeta
(
FIELD_PRDT_TYPE
)));
map
.
put
(
FIELD_PRDT_NAME
,
StringUtils
.
toString
(
prdtName
,
eiMetadata
.
getMeta
(
FIELD_PRDT_NAME
)));
return
map
;
}
}
src/main/java/com/baosight/hpjx/hp/xs/service/ServiceHPXS001.java
View file @
b17fbf31
...
...
@@ -8,6 +8,8 @@ import com.baosight.hpjx.core.security.UserSessionUtils;
import
com.baosight.hpjx.hp.sc.domain.HPSC003
;
import
com.baosight.hpjx.hp.xs.domain.HPXS001
;
import
com.baosight.hpjx.util.CommonMethod
;
import
com.baosight.hpjx.util.StringUtil
;
import
com.baosight.hpjx.util.contants.ACConstants
;
import
com.baosight.iplat4j.core.ei.EiBlock
;
import
com.baosight.iplat4j.core.ei.EiConstant
;
import
com.baosight.iplat4j.core.ei.EiInfo
;
...
...
@@ -41,7 +43,16 @@ public class ServiceHPXS001 extends ServiceEPBase {
@Override
public
EiInfo
query
(
EiInfo
inInfo
)
{
return
super
.
query
(
inInfo
,
HPXS001
.
QUERY
);
EiBlock
block
=
inInfo
.
getBlock
(
EiConstant
.
queryBlock
);
String
startDate
=
block
.
getCellStr
(
ACConstants
.
ROW_CODE_0
,
"createdDateFrom"
);
String
endDate
=
block
.
getCellStr
(
ACConstants
.
ROW_CODE_0
,
"createdDateTo"
);
if
(!
endDate
.
isEmpty
())
{
inInfo
.
setCell
(
EiConstant
.
queryBlock
,
ACConstants
.
ROW_CODE_0
,
"createdDateTo"
,
StringUtil
.
removeHorizontalLine
(
endDate
));
}
if
(!
startDate
.
isEmpty
())
{
inInfo
.
setCell
(
EiConstant
.
queryBlock
,
ACConstants
.
ROW_CODE_0
,
"createdDateFrom"
,
StringUtil
.
removeHorizontalLine
(
startDate
));
}
return
super
.
query
(
inInfo
,
HPXS001
.
QUERY
,
new
HPXS001
());
}
@OperationLogAnnotation
(
operModul
=
"报工管理"
,
operType
=
"删除"
,
operDesc
=
"删除操作"
)
...
...
src/main/java/com/baosight/hpjx/hp/xs/service/ServiceHPXS002.java
0 → 100644
View file @
b17fbf31
package
com
.
baosight
.
hpjx
.
hp
.
xs
.
service
;
import
com.baosight.hpjx.common.DdynamicEnum
;
import
com.baosight.hpjx.hp.xs.domain.HPXS002
;
import
com.baosight.hpjx.util.CommonMethod
;
import
com.baosight.hpjx.util.StringUtil
;
import
com.baosight.hpjx.util.contants.ACConstants
;
import
com.baosight.iplat4j.core.ei.EiBlock
;
import
com.baosight.iplat4j.core.ei.EiConstant
;
import
com.baosight.iplat4j.core.ei.EiInfo
;
import
com.baosight.iplat4j.core.service.impl.ServiceEPBase
;
import
java.util.Arrays
;
/**
* @author LiuYang
* @version 1.0 2024/3/11
*/
public
class
ServiceHPXS002
extends
ServiceEPBase
{
@Override
public
EiInfo
initLoad
(
EiInfo
inInfo
)
{
EiInfo
outInfo
=
super
.
initLoad
(
inInfo
,
new
HPXS002
());
CommonMethod
.
initBlock
(
outInfo
,
Arrays
.
asList
(
DdynamicEnum
.
PROJ_RECORD_BLOCK_ID
),
null
,
false
);
outInfo
.
getBlock
(
EiConstant
.
resultBlock
).
getRows
().
clear
();
return
outInfo
;
}
@Override
public
EiInfo
query
(
EiInfo
inInfo
)
{
EiBlock
block
=
inInfo
.
getBlock
(
EiConstant
.
queryBlock
);
String
startDate
=
block
.
getCellStr
(
ACConstants
.
ROW_CODE_0
,
"createdDateFrom"
);
String
endDate
=
block
.
getCellStr
(
ACConstants
.
ROW_CODE_0
,
"createdDateTo"
);
if
(!
endDate
.
isEmpty
())
{
inInfo
.
setCell
(
EiConstant
.
queryBlock
,
ACConstants
.
ROW_CODE_0
,
"createdDateTo"
,
StringUtil
.
removeHorizontalLine
(
endDate
));
}
if
(!
startDate
.
isEmpty
())
{
inInfo
.
setCell
(
EiConstant
.
queryBlock
,
ACConstants
.
ROW_CODE_0
,
"createdDateFrom"
,
StringUtil
.
removeHorizontalLine
(
startDate
));
}
return
super
.
query
(
inInfo
,
HPXS002
.
QUERY
,
new
HPXS002
());
}
}
src/main/java/com/baosight/hpjx/hp/xs/sql/HPXS001.xml
View file @
b17fbf31
...
...
@@ -85,6 +85,12 @@
<isNotEmpty
prepend=
" AND "
property=
"updatedName"
>
UPDATED_NAME = #updatedName#
</isNotEmpty>
<isNotEmpty
prepend=
" AND "
property=
"createdDateFrom"
>
REGISTER_DATE >= #createdDateFrom#
</isNotEmpty>
<isNotEmpty
prepend=
" AND "
property=
"createdDateTo"
>
REGISTER_DATE
<
= #createdDateTo#
</isNotEmpty>
</sql>
<select
id=
"query"
parameterClass=
"java.util.HashMap"
...
...
@@ -255,7 +261,7 @@
SELECT DISTINCT
FACTORY_CODE as "factoryCode",
FACTORY_NAME as "factoryName"
FROM ${hpjxSchema}.T_HPPZ01
4
WHERE 1=1
FROM ${hpjxSchema}.T_HPPZ01
3
WHERE 1=1
<isNotEmpty
prepend=
" AND "
property=
"companyCode"
>
COMPANY_CODE = #companyCode#
</isNotEmpty>
...
...
@@ -275,7 +281,7 @@
GROUP_CODE as "groupCode",
GROUP_NAME as "groupName",
FACTORY_CODE AS factoryCode
FROM ${hpjxSchema}.T_HPPZ01
4
WHERE 1=1
FROM ${hpjxSchema}.T_HPPZ01
3
WHERE 1=1
<isNotEmpty
prepend=
" AND "
property=
"companyCode"
>
COMPANY_CODE = #companyCode#
</isNotEmpty>
...
...
@@ -297,7 +303,7 @@
SELECT DISTINCT
USER_ID as "userId",
USER_NAME as "userName"
FROM ${hpjxSchema}.T_HPPZ01
4 WHERE 1=1
FROM ${hpjxSchema}.T_HPPZ01
3 WHERE 1=1 and STATUS = '1'
<isNotEmpty
prepend=
" AND "
property=
"companyCode"
>
COMPANY_CODE = #companyCode#
</isNotEmpty>
...
...
src/main/java/com/baosight/hpjx/hp/xs/sql/HPXS002.xml
0 → 100644
View file @
b17fbf31
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://www.ibatis.com/dtd/sql-map-2.dtd">
<!-- table information
Generate time : 2024-03-06 16:14:16
Version : 1.0
schema : hpjx
tableName : TEUDM_TEMP
COMPANY_CODE VARCHAR NOT NULL primarykey,
DOC_ID VARCHAR NOT NULL primarykey,
DIR_ID VARCHAR NOT NULL,
DOC_NAME VARCHAR NOT NULL,
CHG_NAME VARCHAR NOT NULL,
DOC_SIZE DECIMAL NOT NULL,
DOC_TAG VARCHAR NOT NULL,
CREATED_BY VARCHAR NOT NULL,
CREATED_NAME VARCHAR NOT NULL,
CREATED_TIME VARCHAR NOT NULL,
UPDATED_BY VARCHAR NOT NULL,
UPDATED_NAME VARCHAR NOT NULL,
UPDATED_TIME VARCHAR NOT NULL,
ARCHIVE_FLAG VARCHAR NOT NULL,
REAL_PATH VARCHAR
-->
<sqlMap
namespace=
"HPXS002"
>
<sql
id=
"condition"
>
<isNotEmpty
prepend=
" AND "
property=
"companyCode"
>
COMPANY_CODE = #companyCode#
</isNotEmpty>
<isNotEmpty
prepend=
" AND "
property=
"docId"
>
DOC_ID = #docId#
</isNotEmpty>
<isNotEmpty
prepend=
" AND "
property=
"docIds"
>
DOC_ID in $docIds$
</isNotEmpty>
<isNotEmpty
prepend=
" AND "
property=
"dirId"
>
DIR_ID = #dirId#
</isNotEmpty>
<isNotEmpty
prepend=
" AND "
property=
"docName"
>
DOC_NAME = #docName#
</isNotEmpty>
<isNotEmpty
prepend=
" AND "
property=
"chgName"
>
CHG_NAME = #chgName#
</isNotEmpty>
<isNotEmpty
prepend=
" AND "
property=
"docSize"
>
DOC_SIZE = #docSize#
</isNotEmpty>
<isNotEmpty
prepend=
" AND "
property=
"docTag"
>
DOC_TAG = #docTag#
</isNotEmpty>
<isNotEmpty
prepend=
" AND "
property=
"createdBy"
>
CREATED_BY = #createdBy#
</isNotEmpty>
<isNotEmpty
prepend=
" AND "
property=
"createdName"
>
CREATED_NAME = #createdName#
</isNotEmpty>
<isNotEmpty
prepend=
" AND "
property=
"createdTime"
>
CREATED_TIME = #createdTime#
</isNotEmpty>
<isNotEmpty
prepend=
" AND "
property=
"updatedBy"
>
UPDATED_BY = #updatedBy#
</isNotEmpty>
<isNotEmpty
prepend=
" AND "
property=
"updatedName"
>
UPDATED_NAME = #updatedName#
</isNotEmpty>
<isNotEmpty
prepend=
" AND "
property=
"updatedTime"
>
UPDATED_TIME = #updatedTime#
</isNotEmpty>
<isNotEmpty
prepend=
" AND "
property=
"archiveFlag"
>
ARCHIVE_FLAG = #archiveFlag#
</isNotEmpty>
<isNotEmpty
prepend=
" AND "
property=
"realPath"
>
REAL_PATH = #realPath#
</isNotEmpty>
<isNotEmpty
prepend=
" AND "
property=
"bizType"
>
BIZ_TYPE = #bizType#
</isNotEmpty>
<isNotEmpty
prepend=
" AND "
property=
"matId"
>
MAT_ID = #matId#
</isNotEmpty>
</sql>
<select
id=
"query"
parameterClass=
"java.util.HashMap"
resultClass=
"com.baosight.hpjx.hp.xs.domain.HPXS002"
>
SELECT
A.COMPANY_CODE as "companyCode",
<!-- 企业编码 -->
A.DOC_ID as "docId",
<!-- 文件标识 -->
A.DIR_ID as "dirId",
<!-- 目录标识 -->
B.PROJ_NAME AS "projName",
<!-- 项目名称 -->
B.PRDT_TYPE AS "prdtType",
<!-- 产品类型 -->
B.PRDT_NAME AS "prdtName",
<!-- 产品名称 -->
substr(A.DOC_NAME,1,INSTR(A.DOC_NAME,'.')-1) as "docName",
<!-- 文件名 -->
A.CHG_NAME as "chgName",
<!-- 物理文件名 -->
A.DOC_SIZE as "docSize",
<!-- 文件大小 -->
A.DOC_TAG as "docTag",
<!-- 文件标签 -->
A.CREATED_BY as "createdBy",
<!-- 记录创建者 -->
CONCAT(A.CREATED_BY, '-', A.CREATED_NAME) as "createdName",
<!-- 记录创建名称 -->
A.CREATED_TIME as "createdTime",
<!-- 记录创建时间 -->
A.REAL_PATH as "realPath",
<!-- 物理路径 -->
A.BIZ_TYPE as "bizType",
A.MAT_ID as "matId"
FROM ${hpjxSchema}.TEUDM_TEMP AS A
INNER JOIN ${hpjxSchema}.T_HPSC002 AS B ON A.MAT_ID = B.ID AND A.COMPANY_CODE = B.COMPANY_CODE
WHERE 1=1
<isNotEmpty
prepend=
" AND "
property=
"companyCode"
>
A.COMPANY_CODE = #companyCode#
</isNotEmpty>
<isNotEmpty
prepend=
" AND "
property=
"projName"
>
B.PROJ_CODE LIKE CONCAT('%', #projName#, '%')
</isNotEmpty>
<isNotEmpty
prepend=
" AND "
property=
"prdtType"
>
B.PRDT_TYPE = #prdtType#
</isNotEmpty>
<isNotEmpty
prepend=
" AND "
property=
"prdtName"
>
B.PRDT_NAME LIKE CONCAT('%', #prdtName#, '%')
</isNotEmpty>
<isNotEmpty
prepend=
" AND "
property=
"docName"
>
A.DOC_NAME LIKE CONCAT('%',#docName#,'%')
</isNotEmpty>
<isNotEmpty
prepend=
" AND "
property=
"createdDateFrom"
>
A.CREATED_TIME >= #createdDateFrom#
</isNotEmpty>
<isNotEmpty
prepend=
" AND "
property=
"createdDateTo"
>
A.CREATED_TIME
<
= #createdDateTo#
</isNotEmpty>
<dynamic
prepend=
"ORDER BY"
>
<isNotEmpty
property=
"orderBy"
>
$orderBy$
</isNotEmpty>
<isEmpty
property=
"orderBy"
>
A.COMPANY_CODE asc,
A.CREATED_TIME asc
</isEmpty>
</dynamic>
</select>
<select
id=
"count"
resultClass=
"int"
>
SELECT COUNT(*) FROM ${hpjxSchema}.TEUDM_TEMP AS A
INNER JOIN ${hpjxSchema}.T_HPSC002 AS B ON A.MAT_ID = B.ID AND A.COMPANY_CODE = B.COMPANY_CODE
WHERE 1=1
<isNotEmpty
prepend=
" AND "
property=
"companyCode"
>
A.COMPANY_CODE = #companyCode#
</isNotEmpty>
<isNotEmpty
prepend=
" AND "
property=
"projName"
>
B.PROJ_NAME = #projName#
</isNotEmpty>
<isNotEmpty
prepend=
" AND "
property=
"projType"
>
B.PRDT_TYPE = #projType#
</isNotEmpty>
<isNotEmpty
prepend=
" AND "
property=
"prdtName"
>
B.PRDT_NAME = #prdtName#
</isNotEmpty>
<isNotEmpty
prepend=
" AND "
property=
"docName"
>
A.DOC_NAME = #docName#
</isNotEmpty>
<isNotEmpty
prepend=
" AND "
property=
"createdDateFrom"
>
A.CREATED_TIME >= #createdDateFrom#
</isNotEmpty>
<isNotEmpty
prepend=
" AND "
property=
"createdDateTo"
>
A.CREATED_TIME
<
= #createdDateTo#
</isNotEmpty>
</select>
<!--
<isNotEmpty prepend=" AND " property="companyCode">
COMPANY_CODE = #companyCode#
</isNotEmpty>
<isNotEmpty prepend=" AND " property="docId">
DOC_ID = #docId#
</isNotEmpty>
<isNotEmpty prepend=" AND " property="dirId">
DIR_ID = #dirId#
</isNotEmpty>
<isNotEmpty prepend=" AND " property="docName">
DOC_NAME = #docName#
</isNotEmpty>
<isNotEmpty prepend=" AND " property="chgName">
CHG_NAME = #chgName#
</isNotEmpty>
<isNotEmpty prepend=" AND " property="docSize">
DOC_SIZE = #docSize#
</isNotEmpty>
<isNotEmpty prepend=" AND " property="docTag">
DOC_TAG = #docTag#
</isNotEmpty>
<isNotEmpty prepend=" AND " property="createdBy">
CREATED_BY = #createdBy#
</isNotEmpty>
<isNotEmpty prepend=" AND " property="createdName">
CREATED_NAME = #createdName#
</isNotEmpty>
<isNotEmpty prepend=" AND " property="createdTime">
CREATED_TIME = #createdTime#
</isNotEmpty>
<isNotEmpty prepend=" AND " property="updatedBy">
UPDATED_BY = #updatedBy#
</isNotEmpty>
<isNotEmpty prepend=" AND " property="updatedName">
UPDATED_NAME = #updatedName#
</isNotEmpty>
<isNotEmpty prepend=" AND " property="updatedTime">
UPDATED_TIME = #updatedTime#
</isNotEmpty>
<isNotEmpty prepend=" AND " property="archiveFlag">
ARCHIVE_FLAG = #archiveFlag#
</isNotEmpty>
<isNotEmpty prepend=" AND " property="realPath">
REAL_PATH = #realPath#
</isNotEmpty>
-->
<insert
id=
"insert"
>
INSERT INTO ${hpjxSchema}.TEUDM_TEMP (
COMPANY_CODE,
<!-- 企业编码 -->
DOC_ID,
<!-- 文件标识 -->
DIR_ID,
<!-- 目录标识 -->
DOC_NAME,
<!-- 文件名 -->
CHG_NAME,
<!-- 物理文件名 -->
DOC_SIZE,
<!-- 文件大小 -->
DOC_TAG,
<!-- 文件标签 -->
CREATED_BY,
<!-- 记录创建者 -->
CREATED_NAME,
<!-- 记录创建名称 -->
CREATED_TIME,
<!-- 记录创建时间 -->
UPDATED_BY,
<!-- 记录修改者 -->
UPDATED_NAME,
<!-- 记录修改名称 -->
UPDATED_TIME,
<!-- 记录修改时间 -->
ARCHIVE_FLAG,
<!-- 同步标记 -->
REAL_PATH,
<!-- 物理路径 -->
BIZ_TYPE,
MAT_ID
)
VALUES (#companyCode#, #docId#, #dirId#, #docName#, #chgName#, #docSize#, #docTag#, #createdBy#, #createdName#,
#createdTime#, #updatedBy#, #updatedName#, #updatedTime#, #archiveFlag#, #realPath#, #bizType#, #matId#)
</insert>
<delete
id=
"delete"
>
DELETE FROM ${hpjxSchema}.TEUDM_TEMP WHERE
COMPANY_CODE = #companyCode#
<isNotEmpty
prepend=
" AND "
property=
"docId"
>
DOC_ID = #docId#
</isNotEmpty>
<isNotEmpty
prepend=
" AND "
property=
"docIds"
>
DOC_ID in $docIds$
</isNotEmpty>
<isNotEmpty
prepend=
" AND "
property=
"bizType"
>
BIZ_TYPE = #bizType#
</isNotEmpty>
<isNotEmpty
prepend=
" AND "
property=
"matId"
>
MAT_ID = #matId#
</isNotEmpty>
</delete>
<update
id=
"update"
>
UPDATE ${hpjxSchema}.TEUDM_TEMP
SET
DIR_ID = #dirId#,
<!-- 目录标识 -->
DOC_NAME = #docName#,
<!-- 文件名 -->
CHG_NAME = #chgName#,
<!-- 物理文件名 -->
DOC_SIZE = #docSize#,
<!-- 文件大小 -->
DOC_TAG = #docTag#,
<!-- 文件标签 -->
CREATED_BY = #createdBy#,
<!-- 记录创建者 -->
CREATED_NAME = #createdName#,
<!-- 记录创建名称 -->
CREATED_TIME = #createdTime#,
<!-- 记录创建时间 -->
UPDATED_BY = #updatedBy#,
<!-- 记录修改者 -->
UPDATED_NAME = #updatedName#,
<!-- 记录修改名称 -->
UPDATED_TIME = #updatedTime#,
<!-- 记录修改时间 -->
ARCHIVE_FLAG = #archiveFlag#,
<!-- 同步标记 -->
REAL_PATH = #realPath#
<!-- 物理路径 -->
BIZ_TYPE = #bizType#
MAT_ID = #matId#
WHERE
COMPANY_CODE = #companyCode# AND
DOC_ID = #docId#
<isNotEmpty
prepend=
" AND "
property=
"bizType"
>
BIZ_TYPE = #bizType#
</isNotEmpty>
<isNotEmpty
prepend=
" AND "
property=
"matId"
>
MAT_ID = #matId#
</isNotEmpty>
</update>
</sqlMap>
src/main/java/com/baosight/hpjx/xss/HTMLFilter.java
deleted
100644 → 0
View file @
3ce82e9f
package
com
.
baosight
.
hpjx
.
xss
;
import
java.util.ArrayList
;
import
java.util.Collections
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.concurrent.ConcurrentHashMap
;
import
java.util.concurrent.ConcurrentMap
;
import
java.util.logging.Logger
;
import
java.util.regex.Matcher
;
import
java.util.regex.Pattern
;
/**
*
* HTML filtering utility for protecting against XSS (Cross Site Scripting).
*
* This code is licensed LGPLv3
*
* This code is a Java port of the original work in PHP by Cal Hendersen.
* http://code.iamcal.com/php/lib_filter/
*
* The trickiest part of the translation was handling the differences in regex handling
* between PHP and Java. These resources were helpful in the process:
*
* http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html
* http://us2.php.net/manual/en/reference.pcre.pattern.modifiers.php
* http://www.regular-expressions.info/modifiers.html
*
* A note on naming conventions: instance variables are prefixed with a "v"; global
* constants are in all caps.
*
* Sample use:
* String input = ...
* String clean = new HTMLFilter().filter( input );
*
* The class is not thread safe. Create a new instance if in doubt.
*
* If you find bugs or have suggestions on improvement (especially regarding
* performance), please contact us. The latest version of this
* source, and our contact details, can be found at http://xss-html-filter.sf.net
*
* @author Joseph O'Connell
* @author Cal Hendersen
* @author Michael Semb Wever
*/
public
class
HTMLFilter
{
/** regex flag union representing /si modifiers in php **/
private
static
final
int
REGEX_FLAGS_SI
=
Pattern
.
CASE_INSENSITIVE
|
Pattern
.
DOTALL
;
private
static
final
Pattern
P_COMMENTS
=
Pattern
.
compile
(
"<!--(.*?)-->"
,
Pattern
.
DOTALL
);
private
static
final
Pattern
P_COMMENT
=
Pattern
.
compile
(
"^!--(.*)--$"
,
REGEX_FLAGS_SI
);
private
static
final
Pattern
P_TAGS
=
Pattern
.
compile
(
"<(.*?)>"
,
Pattern
.
DOTALL
);
private
static
final
Pattern
P_END_TAG
=
Pattern
.
compile
(
"^/([a-z0-9]+)"
,
REGEX_FLAGS_SI
);
private
static
final
Pattern
P_START_TAG
=
Pattern
.
compile
(
"^([a-z0-9]+)(.*?)(/?)$"
,
REGEX_FLAGS_SI
);
private
static
final
Pattern
P_QUOTED_ATTRIBUTES
=
Pattern
.
compile
(
"([a-z0-9]+)=([\"'])(.*?)\\2"
,
REGEX_FLAGS_SI
);
private
static
final
Pattern
P_UNQUOTED_ATTRIBUTES
=
Pattern
.
compile
(
"([a-z0-9]+)(=)([^\"\\s']+)"
,
REGEX_FLAGS_SI
);
private
static
final
Pattern
P_PROTOCOL
=
Pattern
.
compile
(
"^([^:]+):"
,
REGEX_FLAGS_SI
);
private
static
final
Pattern
P_ENTITY
=
Pattern
.
compile
(
"&#(\\d+);?"
);
private
static
final
Pattern
P_ENTITY_UNICODE
=
Pattern
.
compile
(
"&#x([0-9a-f]+);?"
);
private
static
final
Pattern
P_ENCODE
=
Pattern
.
compile
(
"%([0-9a-f]{2});?"
);
private
static
final
Pattern
P_VALID_ENTITIES
=
Pattern
.
compile
(
"&([^&;]*)(?=(;|&|$))"
);
private
static
final
Pattern
P_VALID_QUOTES
=
Pattern
.
compile
(
"(>|^)([^<]+?)(<|$)"
,
Pattern
.
DOTALL
);
private
static
final
Pattern
P_END_ARROW
=
Pattern
.
compile
(
"^>"
);
private
static
final
Pattern
P_BODY_TO_END
=
Pattern
.
compile
(
"<([^>]*?)(?=<|$)"
);
private
static
final
Pattern
P_XML_CONTENT
=
Pattern
.
compile
(
"(^|>)([^<]*?)(?=>)"
);
private
static
final
Pattern
P_STRAY_LEFT_ARROW
=
Pattern
.
compile
(
"<([^>]*?)(?=<|$)"
);
private
static
final
Pattern
P_STRAY_RIGHT_ARROW
=
Pattern
.
compile
(
"(^|>)([^<]*?)(?=>)"
);
private
static
final
Pattern
P_AMP
=
Pattern
.
compile
(
"&"
);
private
static
final
Pattern
P_QUOTE
=
Pattern
.
compile
(
"\""
);
private
static
final
Pattern
P_LEFT_ARROW
=
Pattern
.
compile
(
"<"
);
private
static
final
Pattern
P_RIGHT_ARROW
=
Pattern
.
compile
(
">"
);
private
static
final
Pattern
P_BOTH_ARROWS
=
Pattern
.
compile
(
"<>"
);
private
static
final
Pattern
P_DOUBLE_QUOT
=
Pattern
.
compile
(
"""
);
// @xxx could grow large... maybe use sesat's ReferenceMap
private
static
final
ConcurrentMap
<
String
,
Pattern
>
P_REMOVE_PAIR_BLANKS
=
new
ConcurrentHashMap
<
String
,
Pattern
>();
private
static
final
ConcurrentMap
<
String
,
Pattern
>
P_REMOVE_SELF_BLANKS
=
new
ConcurrentHashMap
<
String
,
Pattern
>();
/** set of allowed html elements, along with allowed attributes for each element **/
private
final
Map
<
String
,
List
<
String
>>
vAllowed
;
/** counts of open tags for each (allowable) html element **/
private
final
Map
<
String
,
Integer
>
vTagCounts
=
new
HashMap
<
String
,
Integer
>();
/** html elements which must always be self-closing (e.g. "<img />") **/
private
final
String
[]
vSelfClosingTags
;
/** html elements which must always have separate opening and closing tags (e.g. "<b></b>") **/
private
final
String
[]
vNeedClosingTags
;
/** set of disallowed html elements **/
private
final
String
[]
vDisallowed
;
/** attributes which should be checked for valid protocols **/
private
final
String
[]
vProtocolAtts
;
/** allowed protocols **/
private
final
String
[]
vAllowedProtocols
;
/** tags which should be removed if they contain no content (e.g. "<b></b>" or "<b />") **/
private
final
String
[]
vRemoveBlanks
;
/** entities allowed within html markup **/
private
final
String
[]
vAllowedEntities
;
/** flag determining whether comments are allowed in input String. */
private
final
boolean
stripComment
;
private
final
boolean
encodeQuotes
;
private
boolean
vDebug
=
false
;
/**
* flag determining whether to try to make tags when presented with "unbalanced"
* angle brackets (e.g. "<b text </b>" becomes "<b> text </b>"). If set to false,
* unbalanced angle brackets will be html escaped.
*/
private
final
boolean
alwaysMakeTags
;
/** Default constructor.
*
*/
public
HTMLFilter
()
{
vAllowed
=
new
HashMap
<>();
final
ArrayList
<
String
>
a_atts
=
new
ArrayList
<
String
>();
a_atts
.
add
(
"href"
);
a_atts
.
add
(
"target"
);
vAllowed
.
put
(
"a"
,
a_atts
);
final
ArrayList
<
String
>
img_atts
=
new
ArrayList
<
String
>();
img_atts
.
add
(
"src"
);
img_atts
.
add
(
"width"
);
img_atts
.
add
(
"height"
);
img_atts
.
add
(
"alt"
);
vAllowed
.
put
(
"img"
,
img_atts
);
final
ArrayList
<
String
>
no_atts
=
new
ArrayList
<
String
>();
vAllowed
.
put
(
"b"
,
no_atts
);
vAllowed
.
put
(
"strong"
,
no_atts
);
vAllowed
.
put
(
"i"
,
no_atts
);
vAllowed
.
put
(
"em"
,
no_atts
);
vSelfClosingTags
=
new
String
[]{
"img"
};
vNeedClosingTags
=
new
String
[]{
"a"
,
"b"
,
"strong"
,
"i"
,
"em"
};
vDisallowed
=
new
String
[]{};
vAllowedProtocols
=
new
String
[]{
"http"
,
"mailto"
,
"https"
};
// no ftp.
vProtocolAtts
=
new
String
[]{
"src"
,
"href"
};
vRemoveBlanks
=
new
String
[]{
"a"
,
"b"
,
"strong"
,
"i"
,
"em"
};
vAllowedEntities
=
new
String
[]{
"amp"
,
"gt"
,
"lt"
,
"quot"
};
stripComment
=
true
;
encodeQuotes
=
true
;
alwaysMakeTags
=
true
;
}
/** Set debug flag to true. Otherwise use default settings. See the default constructor.
*
* @param debug turn debug on with a true argument
*/
public
HTMLFilter
(
final
boolean
debug
)
{
this
();
vDebug
=
debug
;
}
/** Map-parameter configurable constructor.
*
* @param conf map containing configuration. keys match field names.
*/
public
HTMLFilter
(
final
Map
<
String
,
Object
>
conf
)
{
assert
conf
.
containsKey
(
"vAllowed"
)
:
"configuration requires vAllowed"
;
assert
conf
.
containsKey
(
"vSelfClosingTags"
)
:
"configuration requires vSelfClosingTags"
;
assert
conf
.
containsKey
(
"vNeedClosingTags"
)
:
"configuration requires vNeedClosingTags"
;
assert
conf
.
containsKey
(
"vDisallowed"
)
:
"configuration requires vDisallowed"
;
assert
conf
.
containsKey
(
"vAllowedProtocols"
)
:
"configuration requires vAllowedProtocols"
;
assert
conf
.
containsKey
(
"vProtocolAtts"
)
:
"configuration requires vProtocolAtts"
;
assert
conf
.
containsKey
(
"vRemoveBlanks"
)
:
"configuration requires vRemoveBlanks"
;
assert
conf
.
containsKey
(
"vAllowedEntities"
)
:
"configuration requires vAllowedEntities"
;
vAllowed
=
Collections
.
unmodifiableMap
((
HashMap
<
String
,
List
<
String
>>)
conf
.
get
(
"vAllowed"
));
vSelfClosingTags
=
(
String
[])
conf
.
get
(
"vSelfClosingTags"
);
vNeedClosingTags
=
(
String
[])
conf
.
get
(
"vNeedClosingTags"
);
vDisallowed
=
(
String
[])
conf
.
get
(
"vDisallowed"
);
vAllowedProtocols
=
(
String
[])
conf
.
get
(
"vAllowedProtocols"
);
vProtocolAtts
=
(
String
[])
conf
.
get
(
"vProtocolAtts"
);
vRemoveBlanks
=
(
String
[])
conf
.
get
(
"vRemoveBlanks"
);
vAllowedEntities
=
(
String
[])
conf
.
get
(
"vAllowedEntities"
);
stripComment
=
conf
.
containsKey
(
"stripComment"
)
?
(
Boolean
)
conf
.
get
(
"stripComment"
)
:
true
;
encodeQuotes
=
conf
.
containsKey
(
"encodeQuotes"
)
?
(
Boolean
)
conf
.
get
(
"encodeQuotes"
)
:
true
;
alwaysMakeTags
=
conf
.
containsKey
(
"alwaysMakeTags"
)
?
(
Boolean
)
conf
.
get
(
"alwaysMakeTags"
)
:
true
;
}
private
void
reset
()
{
vTagCounts
.
clear
();
}
private
void
debug
(
final
String
msg
)
{
if
(
vDebug
)
{
Logger
.
getAnonymousLogger
().
info
(
msg
);
}
}
//---------------------------------------------------------------
// my versions of some PHP library functions
public
static
String
chr
(
final
int
decimal
)
{
return
String
.
valueOf
((
char
)
decimal
);
}
public
static
String
htmlSpecialChars
(
final
String
s
)
{
String
result
=
s
;
result
=
regexReplace
(
P_AMP
,
"&"
,
result
);
result
=
regexReplace
(
P_QUOTE
,
"""
,
result
);
result
=
regexReplace
(
P_LEFT_ARROW
,
"<"
,
result
);
result
=
regexReplace
(
P_RIGHT_ARROW
,
">"
,
result
);
return
result
;
}
//---------------------------------------------------------------
/**
* given a user submitted input String, filter out any invalid or restricted
* html.
*
* @param input text (i.e. submitted by a user) than may contain html
* @return "clean" version of input, with only valid, whitelisted html elements allowed
*/
public
String
filter
(
final
String
input
)
{
reset
();
String
s
=
input
;
debug
(
"************************************************"
);
debug
(
" INPUT: "
+
input
);
s
=
escapeComments
(
s
);
debug
(
" escapeComments: "
+
s
);
// s = balanceHTML(s);
// debug(" balanceHTML: " + s);
//
// s = checkTags(s);
// debug(" checkTags: " + s);
//
// s = processRemoveBlanks(s);
// debug("processRemoveBlanks: " + s);
//
// s = validateEntities(s);
// debug(" validateEntites: " + s);
debug
(
"************************************************\n\n"
);
return
s
;
}
public
boolean
isAlwaysMakeTags
(){
return
alwaysMakeTags
;
}
public
boolean
isStripComments
(){
return
stripComment
;
}
private
String
escapeComments
(
final
String
s
)
{
final
Matcher
m
=
P_COMMENTS
.
matcher
(
s
);
final
StringBuffer
buf
=
new
StringBuffer
();
if
(
m
.
find
())
{
final
String
match
=
m
.
group
(
1
);
//(.*?)
m
.
appendReplacement
(
buf
,
Matcher
.
quoteReplacement
(
"<!--"
+
htmlSpecialChars
(
match
)
+
"-->"
));
}
m
.
appendTail
(
buf
);
return
buf
.
toString
();
}
private
String
balanceHTML
(
String
s
)
{
if
(
alwaysMakeTags
)
{
//
// try and form html
//
s
=
regexReplace
(
P_END_ARROW
,
""
,
s
);
s
=
regexReplace
(
P_BODY_TO_END
,
"<$1>"
,
s
);
s
=
regexReplace
(
P_XML_CONTENT
,
"$1<$2"
,
s
);
}
else
{
//
// escape stray brackets
//
s
=
regexReplace
(
P_STRAY_LEFT_ARROW
,
"<$1"
,
s
);
s
=
regexReplace
(
P_STRAY_RIGHT_ARROW
,
"$1$2><"
,
s
);
//
// the last regexp causes '<>' entities to appear
// (we need to do a lookahead assertion so that the last bracket can
// be used in the next pass of the regexp)
//
s
=
regexReplace
(
P_BOTH_ARROWS
,
""
,
s
);
}
return
s
;
}
private
String
checkTags
(
String
s
)
{
Matcher
m
=
P_TAGS
.
matcher
(
s
);
final
StringBuffer
buf
=
new
StringBuffer
();
while
(
m
.
find
())
{
String
replaceStr
=
m
.
group
(
1
);
replaceStr
=
processTag
(
replaceStr
);
m
.
appendReplacement
(
buf
,
Matcher
.
quoteReplacement
(
replaceStr
));
}
m
.
appendTail
(
buf
);
s
=
buf
.
toString
();
// these get tallied in processTag
// (remember to reset before subsequent calls to filter method)
for
(
String
key
:
vTagCounts
.
keySet
())
{
for
(
int
ii
=
0
;
ii
<
vTagCounts
.
get
(
key
);
ii
++)
{
s
+=
"</"
+
key
+
">"
;
}
}
return
s
;
}
private
String
processRemoveBlanks
(
final
String
s
)
{
String
result
=
s
;
for
(
String
tag
:
vRemoveBlanks
)
{
if
(!
P_REMOVE_PAIR_BLANKS
.
containsKey
(
tag
)){
P_REMOVE_PAIR_BLANKS
.
putIfAbsent
(
tag
,
Pattern
.
compile
(
"<"
+
tag
+
"(\\s[^>]*)?></"
+
tag
+
">"
));
}
result
=
regexReplace
(
P_REMOVE_PAIR_BLANKS
.
get
(
tag
),
""
,
result
);
if
(!
P_REMOVE_SELF_BLANKS
.
containsKey
(
tag
)){
P_REMOVE_SELF_BLANKS
.
putIfAbsent
(
tag
,
Pattern
.
compile
(
"<"
+
tag
+
"(\\s[^>]*)?/>"
));
}
result
=
regexReplace
(
P_REMOVE_SELF_BLANKS
.
get
(
tag
),
""
,
result
);
}
return
result
;
}
private
static
String
regexReplace
(
final
Pattern
regex_pattern
,
final
String
replacement
,
final
String
s
)
{
Matcher
m
=
regex_pattern
.
matcher
(
s
);
return
m
.
replaceAll
(
replacement
);
}
private
String
processTag
(
final
String
s
)
{
// ending tags
Matcher
m
=
P_END_TAG
.
matcher
(
s
);
if
(
m
.
find
())
{
final
String
name
=
m
.
group
(
1
).
toLowerCase
();
if
(
allowed
(
name
))
{
if
(!
inArray
(
name
,
vSelfClosingTags
))
{
if
(
vTagCounts
.
containsKey
(
name
))
{
vTagCounts
.
put
(
name
,
vTagCounts
.
get
(
name
)
-
1
);
return
"</"
+
name
+
">"
;
}
}
}
}
// starting tags
m
=
P_START_TAG
.
matcher
(
s
);
if
(
m
.
find
())
{
final
String
name
=
m
.
group
(
1
).
toLowerCase
();
final
String
body
=
m
.
group
(
2
);
String
ending
=
m
.
group
(
3
);
//debug( "in a starting tag, name='" + name + "'; body='" + body + "'; ending='" + ending + "'" );
if
(
allowed
(
name
))
{
String
params
=
""
;
final
Matcher
m2
=
P_QUOTED_ATTRIBUTES
.
matcher
(
body
);
final
Matcher
m3
=
P_UNQUOTED_ATTRIBUTES
.
matcher
(
body
);
final
List
<
String
>
paramNames
=
new
ArrayList
<
String
>();
final
List
<
String
>
paramValues
=
new
ArrayList
<
String
>();
while
(
m2
.
find
())
{
paramNames
.
add
(
m2
.
group
(
1
));
//([a-z0-9]+)
paramValues
.
add
(
m2
.
group
(
3
));
//(.*?)
}
while
(
m3
.
find
())
{
paramNames
.
add
(
m3
.
group
(
1
));
//([a-z0-9]+)
paramValues
.
add
(
m3
.
group
(
3
));
//([^\"\\s']+)
}
String
paramName
,
paramValue
;
for
(
int
ii
=
0
;
ii
<
paramNames
.
size
();
ii
++)
{
paramName
=
paramNames
.
get
(
ii
).
toLowerCase
();
paramValue
=
paramValues
.
get
(
ii
);
// debug( "paramName='" + paramName + "'" );
// debug( "paramValue='" + paramValue + "'" );
// debug( "allowed? " + vAllowed.get( name ).contains( paramName ) );
if
(
allowedAttribute
(
name
,
paramName
))
{
if
(
inArray
(
paramName
,
vProtocolAtts
))
{
paramValue
=
processParamProtocol
(
paramValue
);
}
params
+=
" "
+
paramName
+
"=\""
+
paramValue
+
"\""
;
}
}
if
(
inArray
(
name
,
vSelfClosingTags
))
{
ending
=
" /"
;
}
if
(
inArray
(
name
,
vNeedClosingTags
))
{
ending
=
""
;
}
if
(
ending
==
null
||
ending
.
length
()
<
1
)
{
if
(
vTagCounts
.
containsKey
(
name
))
{
vTagCounts
.
put
(
name
,
vTagCounts
.
get
(
name
)
+
1
);
}
else
{
vTagCounts
.
put
(
name
,
1
);
}
}
else
{
ending
=
" /"
;
}
return
"<"
+
name
+
params
+
ending
+
">"
;
}
else
{
return
""
;
}
}
// comments
m
=
P_COMMENT
.
matcher
(
s
);
if
(!
stripComment
&&
m
.
find
())
{
return
"<"
+
m
.
group
()
+
">"
;
}
return
""
;
}
private
String
processParamProtocol
(
String
s
)
{
s
=
decodeEntities
(
s
);
final
Matcher
m
=
P_PROTOCOL
.
matcher
(
s
);
if
(
m
.
find
())
{
final
String
protocol
=
m
.
group
(
1
);
if
(!
inArray
(
protocol
,
vAllowedProtocols
))
{
// bad protocol, turn into local anchor link instead
s
=
"#"
+
s
.
substring
(
protocol
.
length
()
+
1
,
s
.
length
());
if
(
s
.
startsWith
(
"#//"
))
{
s
=
"#"
+
s
.
substring
(
3
,
s
.
length
());
}
}
}
return
s
;
}
private
String
decodeEntities
(
String
s
)
{
StringBuffer
buf
=
new
StringBuffer
();
Matcher
m
=
P_ENTITY
.
matcher
(
s
);
while
(
m
.
find
())
{
final
String
match
=
m
.
group
(
1
);
final
int
decimal
=
Integer
.
decode
(
match
).
intValue
();
m
.
appendReplacement
(
buf
,
Matcher
.
quoteReplacement
(
chr
(
decimal
)));
}
m
.
appendTail
(
buf
);
s
=
buf
.
toString
();
buf
=
new
StringBuffer
();
m
=
P_ENTITY_UNICODE
.
matcher
(
s
);
while
(
m
.
find
())
{
final
String
match
=
m
.
group
(
1
);
final
int
decimal
=
Integer
.
valueOf
(
match
,
16
).
intValue
();
m
.
appendReplacement
(
buf
,
Matcher
.
quoteReplacement
(
chr
(
decimal
)));
}
m
.
appendTail
(
buf
);
s
=
buf
.
toString
();
buf
=
new
StringBuffer
();
m
=
P_ENCODE
.
matcher
(
s
);
while
(
m
.
find
())
{
final
String
match
=
m
.
group
(
1
);
final
int
decimal
=
Integer
.
valueOf
(
match
,
16
).
intValue
();
m
.
appendReplacement
(
buf
,
Matcher
.
quoteReplacement
(
chr
(
decimal
)));
}
m
.
appendTail
(
buf
);
s
=
buf
.
toString
();
s
=
validateEntities
(
s
);
return
s
;
}
private
String
validateEntities
(
final
String
s
)
{
StringBuffer
buf
=
new
StringBuffer
();
// validate entities throughout the string
Matcher
m
=
P_VALID_ENTITIES
.
matcher
(
s
);
while
(
m
.
find
())
{
final
String
one
=
m
.
group
(
1
);
//([^&;]*)
final
String
two
=
m
.
group
(
2
);
//(?=(;|&|$))
m
.
appendReplacement
(
buf
,
Matcher
.
quoteReplacement
(
checkEntity
(
one
,
two
)));
}
m
.
appendTail
(
buf
);
return
encodeQuotes
(
buf
.
toString
());
}
private
String
encodeQuotes
(
final
String
s
){
if
(
encodeQuotes
){
StringBuffer
buf
=
new
StringBuffer
();
Matcher
m
=
P_VALID_QUOTES
.
matcher
(
s
);
while
(
m
.
find
())
{
final
String
one
=
m
.
group
(
1
);
//(>|^)
final
String
two
=
m
.
group
(
2
);
//([^<]+?)
final
String
three
=
m
.
group
(
3
);
//(<|$)
m
.
appendReplacement
(
buf
,
Matcher
.
quoteReplacement
(
one
+
regexReplace
(
P_QUOTE
,
"""
,
two
)
+
three
));
}
m
.
appendTail
(
buf
);
return
buf
.
toString
();
}
else
{
return
s
;
}
}
private
String
checkEntity
(
final
String
preamble
,
final
String
term
)
{
return
";"
.
equals
(
term
)
&&
isValidEntity
(
preamble
)
?
'&'
+
preamble
:
"&"
+
preamble
;
}
private
boolean
isValidEntity
(
final
String
entity
)
{
return
inArray
(
entity
,
vAllowedEntities
);
}
private
static
boolean
inArray
(
final
String
s
,
final
String
[]
array
)
{
for
(
String
item
:
array
)
{
if
(
item
!=
null
&&
item
.
equals
(
s
))
{
return
true
;
}
}
return
false
;
}
private
boolean
allowed
(
final
String
name
)
{
return
(
vAllowed
.
isEmpty
()
||
vAllowed
.
containsKey
(
name
))
&&
!
inArray
(
name
,
vDisallowed
);
}
private
boolean
allowedAttribute
(
final
String
name
,
final
String
paramName
)
{
return
allowed
(
name
)
&&
(
vAllowed
.
isEmpty
()
||
vAllowed
.
get
(
name
).
contains
(
paramName
));
}
}
src/main/java/com/baosight/hpjx/xss/XssFilter.java
deleted
100644 → 0
View file @
3ce82e9f
package
com
.
baosight
.
hpjx
.
xss
;
import
com.baosight.hpjx.util.StringUtils
;
import
java.io.IOException
;
import
java.util.ArrayList
;
import
java.util.List
;
import
javax.servlet.Filter
;
import
javax.servlet.FilterChain
;
import
javax.servlet.FilterConfig
;
import
javax.servlet.ServletException
;
import
javax.servlet.ServletRequest
;
import
javax.servlet.ServletResponse
;
import
javax.servlet.http.HttpServletRequest
;
/**
* xss过滤
*/
public
class
XssFilter
implements
Filter
{
//不拦截的地址
private
List
<
String
>
excludedList
=
new
ArrayList
<
String
>();
@Override
public
void
init
(
FilterConfig
config
)
throws
ServletException
{
/*
* 这里只处理了需要拦截的url地址,如果想不拦截某个字段,比如富文本字段,
* 需要自己在XssHttpServletRequestWrapper类中去添加逻辑
*/
excludedList
.
add
(
"/service/HP*/*"
);
}
@Override
public
void
doFilter
(
ServletRequest
request
,
ServletResponse
response
,
FilterChain
chain
)
throws
IOException
,
ServletException
{
XssHttpServletRequestWrapper
xssRequest
=
new
XssHttpServletRequestWrapper
(
(
HttpServletRequest
)
request
);
String
url
=
xssRequest
.
getServletPath
();
if
(
isExcluded
(
url
)){
chain
.
doFilter
(
request
,
response
);
}
else
{
//使用XSS过滤
chain
.
doFilter
(
xssRequest
,
response
);
}
}
@Override
public
void
destroy
()
{
}
/**
* 是否不拦截
* @param url 请求地址
* @return true不拦截,false拦截
*/
private
boolean
isExcluded
(
String
url
){
// if(StringUtils.isBlank(url)){
// return false;
// }
if
(!
StringUtils
.
matches
(
url
,
excludedList
)){
return
true
;
}
// for (String excluded : excludedList) {
// if(!url.contains(excluded)){
// return true;
// }
// }
return
false
;
}
}
src/main/java/com/baosight/hpjx/xss/XssHttpServletRequestWrapper.java
deleted
100644 → 0
View file @
3ce82e9f
package
com
.
baosight
.
hpjx
.
xss
;
import
org.apache.commons.lang3.StringEscapeUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletRequestWrapper
;
import
java.util.LinkedHashMap
;
import
java.util.Map
;
import
java.io.ByteArrayInputStream
;
import
java.io.IOException
;
import
javax.servlet.ReadListener
;
import
javax.servlet.ServletInputStream
;
import
org.apache.commons.io.IOUtils
;
import
org.springframework.http.HttpHeaders
;
import
org.springframework.http.MediaType
;
public
class
XssHttpServletRequestWrapper
extends
HttpServletRequestWrapper
{
// 没被包装过的HttpServletRequest(特殊场景,需求自己过滤)
HttpServletRequest
orgRequest
;
// html过滤
private
final
static
HTMLFilter
htmlFilter
=
new
HTMLFilter
();
public
XssHttpServletRequestWrapper
(
HttpServletRequest
request
)
{
super
(
request
);
orgRequest
=
request
;
}
/**
* 过滤json参数
*/
@Override
public
ServletInputStream
getInputStream
()
throws
IOException
{
String
contentType
=
super
.
getHeader
(
HttpHeaders
.
CONTENT_TYPE
);
//非json类型,直接返回
if
(!(
MediaType
.
APPLICATION_JSON_VALUE
.
equalsIgnoreCase
(
contentType
)
||
MediaType
.
APPLICATION_JSON_UTF8_VALUE
.
equalsIgnoreCase
(
contentType
))){
return
super
.
getInputStream
();
}
//为空,直接返回
String
json
=
IOUtils
.
toString
(
super
.
getInputStream
(),
"utf-8"
);
if
(
StringUtils
.
isBlank
(
json
))
{
return
super
.
getInputStream
();
}
//xss过滤
json
=
xssEncode
(
json
);
json
=
StringEscapeUtils
.
unescapeHtml4
(
json
);
final
ByteArrayInputStream
bis
=
new
ByteArrayInputStream
(
json
.
getBytes
(
"utf-8"
));
return
new
ServletInputStream
()
{
@Override
public
boolean
isFinished
()
{
return
true
;
}
@Override
public
boolean
isReady
()
{
return
true
;
}
@Override
public
void
setReadListener
(
ReadListener
readListener
)
{
}
@Override
public
int
read
()
throws
IOException
{
return
bis
.
read
();
}
};
}
@Override
public
String
getParameter
(
String
name
)
{
String
value
=
super
.
getParameter
(
xssEncode
(
name
));
if
(
StringUtils
.
isNotBlank
(
value
))
{
value
=
xssEncode
(
value
);
}
return
StringEscapeUtils
.
unescapeHtml4
(
value
);
}
@Override
public
String
[]
getParameterValues
(
String
name
)
{
String
[]
parameters
=
super
.
getParameterValues
(
name
);
if
(
parameters
==
null
||
parameters
.
length
==
0
)
{
return
null
;
}
for
(
int
i
=
0
;
i
<
parameters
.
length
;
i
++)
{
parameters
[
i
]
=
xssEncode
(
parameters
[
i
]);
parameters
[
i
]
=
StringEscapeUtils
.
unescapeHtml4
(
parameters
[
i
]);
}
return
parameters
;
}
@Override
public
Map
<
String
,
String
[]>
getParameterMap
()
{
Map
<
String
,
String
[]>
map
=
new
LinkedHashMap
<>();
Map
<
String
,
String
[]>
parameters
=
super
.
getParameterMap
();
for
(
String
key
:
parameters
.
keySet
())
{
String
[]
values
=
parameters
.
get
(
key
);
for
(
int
i
=
0
;
i
<
values
.
length
;
i
++)
{
values
[
i
]
=
xssEncode
(
values
[
i
]);
values
[
i
]
=
StringEscapeUtils
.
unescapeHtml4
(
values
[
i
]);
}
map
.
put
(
key
,
values
);
}
return
map
;
}
@Override
public
String
getHeader
(
String
name
)
{
String
value
=
super
.
getHeader
(
xssEncode
(
name
));
if
(
StringUtils
.
isNotBlank
(
value
))
{
value
=
xssEncode
(
value
);
}
return
StringEscapeUtils
.
unescapeHtml4
(
value
);
}
private
String
xssEncode
(
String
input
)
{
return
htmlFilter
.
filter
(
input
);
}
/**
* 获取最原始的request
*/
public
HttpServletRequest
getOrgRequest
()
{
return
orgRequest
;
}
/**
* 获取最原始的request
*/
public
static
HttpServletRequest
getOrgRequest
(
HttpServletRequest
request
)
{
if
(
request
instanceof
XssHttpServletRequestWrapper
)
{
return
((
XssHttpServletRequestWrapper
)
request
).
getOrgRequest
();
}
return
request
;
}
}
src/main/resources/META-INF/resources/iPlatV6-login.jsp
View file @
b17fbf31
...
...
@@ -151,7 +151,7 @@
}
%
>
</head>
<body
class=
"i-theme-${theme}"
>
<body
class=
"i-theme-${theme}"
style=
"background: url('${iPlatStaticURL}/common/img/login.png') no-repeat; background-size: 100% 100%;"
>
<div
class=
"main"
>
<div
class=
"wrapper"
>
<div
class=
"content overflow-hidden"
>
...
...
@@ -302,29 +302,29 @@
</div>
</div>
</div>
<div
class=
"info"
>
<
%
--
<
div
class=
"info"
>
<div
class=
"row"
>
<div
class=
"footer-center col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3"
>
<div
class=
"phone-number"
>
 
<
%
--
<
span
>
运维平台热线 8008200220、4008210860、26646708、26642410
</span>
--%>
<
%
–
<span>
运维平台热线 8008200220、4008210860、26646708、26642410
</span>
–
%
>
</div>
<div
class=
"copyright-info"
>
<
%
--
<
span
>
©上海宝信软件股份有限公司 Copyright ©2020 BAOSIGHT Corporation. All Rights Reserved
</span>
--%>
<
%
–
<span>
©上海宝信软件股份有限公司 Copyright ©2020 BAOSIGHT Corporation. All Rights Reserved
</span>
–
%
>
</div>
</div>
<div
class=
"footer-right col-sm-2 col-md-3"
>
<
%
--
<
div
class=
"footer-logo"
>
--%>
<
%
--
<
img
src=
"${iPlatStaticURL}/iplatui/img/icon_ie.png"
width=
"51"
--
%
>
<
%
--
onclick=
"window.open('https://support.microsoft.com/zh-cn/help/17621/internet-explorer-downloads')"
>
--%>
<
%
--
</
div
>
--%>
<div
class=
"footer-logo"
>
<
%
--
<
img
src=
"${iPlatStaticURL}/iplatui/img/icon_chrome.png"
width=
"51"
onclick=
"downloadChrome()"
>
--%>
</div>
</div>
<
%
–
<div
class=
"footer-logo"
>
–
%
>
<
%
–
<img
src=
"${iPlatStaticURL}/iplatui/img/icon_ie.png"
width=
"51"
&
ndash
;%&
gt
;
&
lt
;%&
ndash
;
onclick=
"window.open('https://support.microsoft.com/zh-cn/help/17621/internet-explorer-downloads')"
>
–
%
>
<
%
–
</div>
–
%
>
<
%
–
<div
class=
"footer-logo"
>
<img
src=
"${iPlatStaticURL}/iplatui/img/icon_chrome.png"
width=
"51"
onclick=
"downloadChrome()"
>
</div>
–
%
>
</div>
</div>
</div>
--%>
</div>
<div
class=
"i-overlay"
></div>
</body>
...
...
src/main/resources/spring/framework/applicationContext-s3.xml
0 → 100644
View file @
b17fbf31
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns=
"http://www.springframework.org/schema/beans"
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"
>
<bean
id=
"platFileUploader"
class=
"com.baosight.iplat4j.eu.dm.util.PlatFileUploader"
>
<property
name=
"dao"
ref=
"platDao"
/>
</bean>
<bean
id=
"fileUpLoadManager"
class=
"com.baosight.iplat4j.eu.dm.PlatFileUploadManagerByAmazonS3"
>
<property
name=
"fileUploader"
ref=
"platFileUploader"
/>
</bean>
</beans>
src/main/webapp/EU/DM/EUDM04.jsp
0 → 100644
View file @
b17fbf31
<%@ page contentType="text/html;charset=UTF-8" trimDirectiveWhitespaces="true" %>
<%@ page import="com.baosight.iplat4j.config.AdminFactoryConfig" %>
<%@ page import="com.baosight.iplat4j.eu.dm.util.IFileUploadManager" %>
<%@ page import="org.slf4j.LoggerFactory" %>
<%@ page import="org.slf4j.Logger" %>
<%
Logger log = LoggerFactory.getLogger(IFileUploadManager.class);
try {
String result = AdminFactoryConfig.getFileUpLoadInterface().uploadFile(pageContext);
log.info("uploadFile result:{}", result);
} catch (Exception e) {
log.error("附件上传时出现异常{}", e.getMessage(), e);
response.sendError(500, e.getMessage());
return;
}
%>
src/main/webapp/HP/SC/HPSC007.jsp
View file @
b17fbf31
...
...
@@ -47,7 +47,7 @@
<EF:EFColumn
ename=
"hpsc006Id"
cname=
"生产下料ID"
hidden=
"true"
/>
<EF:EFComboColumn
ename=
"userId"
cname=
"完成人"
width=
"100"
align=
"center"
filter=
"contains"
readonly=
"true"
>
<EF:EFOptions
blockId=
"
us
er_block_id"
valueField=
"valueField"
textField=
"textField"
/>
<EF:EFOptions
blockId=
"
work
er_block_id"
valueField=
"valueField"
textField=
"textField"
/>
</EF:EFComboColumn>
<EF:EFColumn
ename=
"userName"
cname=
"完成名称"
hidden=
"true"
/>
<EF:EFColumn
ename=
"actualCompletionNum"
cname=
"完成数量"
format=
"{0:N3}"
maxLength=
"12"
displayType=
"0.000"
...
...
src/main/webapp/HP/XS/HPXS002.js
View file @
b17fbf31
$
(
function
()
{
$
(
".row"
).
children
().
attr
(
"class"
,
"col-md-3"
);
$
(
"#QUERY"
).
on
(
"click"
,
query
);
IPLATUI
.
EFGrid
=
{
"result"
:
{
pageable
:
{
pageSize
:
10
,
pageSizes
:
[
10
,
20
,
30
,
50
,
100
,
200
],
},
columns
:
[
/*{
field: "operator",
template: function (item) {
console.log(item)
let auditStatus = item.status;
let template = '';
if (item.matId != null) {
template += '<a style="cursor: pointer;display: inline-flex;justify-content: center;margin:auto 5px" '
+ 'onclick="showUploadFile(' + item.matId + ')" >附件清单</a>';
}
if (auditStatus == 0) {
template += '<a style="cursor: pointer;display: inline-flex;justify-content: center;" '
+
'onclick="check(' + item.id + ',1, \'' + item.planInfoNo + '\')" >提交</a>';
}
/!*else {
template += '<a hidden="hidden" style="cursor: pointer;display: inline-flex;justify-content: center;" ' +
'onclick="check(' + item.id + ',0)" >撤回</a>';
}*!/
return template;
}
},*//*{
field: "registerDate",
attributes: {
class: "i-input-readonly"
},
defaultValue: function () {
return currShortDate();
}
},*/
{
field
:
"docName"
,
title
:
"文件名称"
,
template
:
function
(
item
)
{
let
docName
=
item
.
docName
let
template
=
'<a style="cursor: pointer;display: inline-flex;justify-content: center;margin:auto 5px" '
+
'href="'
+
IPLATUI
.
CONTEXT_PATH
+
'/EU/DM/EUDM06.jsp?docId='
+
item
.
docId
+
'" >'
+
docName
+
'</a>'
;
return
template
;
}
}],
loadComplete
:
function
(
grid
)
{
// 此 grid 对象
// 处理父子级联动,通过监听 change 事件,判断父级节点是否发生变化
grid
.
dataSource
.
bind
(
"change"
,
function
(
e
)
{
// 判断父级节点是否发生变化
if
(
e
.
field
==
"factoryCode"
)
{
// cell_label 表示子级节点 ,that 表示此 grid
var
cell_label
=
"groupCode"
,
that
=
grid
;
// locked 表示是否为固定列
var
locked
=
that
.
isCellLocked
(
cell_label
);
// tr 表示 locked 和非 locked 的行,index 表示此行的第几列
var
tr
,
index
;
// 获取此 model 元素信息
var
item
=
e
.
items
[
0
];
var
_uid
=
item
.
uid
;
if
(
locked
)
{
tr
=
$
(
".k-grid-content-locked tr[data-uid="
+
_uid
+
"]"
);
index
=
$
(
"th[data-field='"
+
cell_label
+
"']"
).
data
(
"index"
);
}
else
{
tr
=
$
(
".k-grid-content tr[data-uid="
+
_uid
+
"]"
);
index
=
parseInt
(
$
(
"th[data-field='"
+
cell_label
+
"']"
).
data
(
"index"
))
-
that
.
lockedHeader
.
find
(
"th"
).
length
;
}
// 获取子 cell(td)
var
td
=
tr
.
children
(
"td:eq("
+
index
+
")"
);
// 触发 td.click 事件,
td
.
trigger
(
"click"
);
}
});
},
onSave
:
function
(
e
)
{
// 阻止默认请求,使用自定义保存
//e.preventDefault();
//let btnNode = $(this);
//禁用按钮
//btnNode.attr("disabled", true);
//saveResult(btnNode);
},
onSuccess
:
function
(
e
)
{
if
(
e
.
eiInfo
.
extAttr
.
methodName
==
'update'
||
e
.
eiInfo
.
extAttr
.
methodName
==
'insert'
)
{
query
();
}
},
onRowClick
:
function
(
e
)
{
/*var block = detailGrid.getEiBlock();
if (block != null) {
block.setRows([]);
detailGrid.setEiBlock(block);
}
var info = new EiInfo()
var parentId = e.model['planInfoNo'];
info.set("parentId", parentId);
EiCommunicator.send("HPSC004", "queryDetail", info, {
onSuccess: function (ei) {//返回结果集
detailGrid.setEiInfo(ei);
}, onFail: function (ei) {
}
}, {async: false});*/
},
}
}
$
(
"#EXPORT"
).
on
(
"click"
,
function
()
{
const
checkedRows
=
resultGrid
.
getCheckedRows
();
let
docId
=
""
;
if
(
checkedRows
.
length
<=
0
)
{
NotificationUtil
(
"请至少选中一条数据"
,
"info"
);
}
else
{
for
(
let
i
=
0
,
length
=
checkedRows
.
length
;
i
<
length
;
i
++
)
{
docId
+=
checkedRows
[
i
][
"docId"
];
docId
+=
","
}
docId
=
docId
.
substr
(
0
,
docId
.
lastIndexOf
(
','
));
window
.
location
.
href
=
IPLATUI
.
CONTEXT_PATH
+
'/EU/DM/EUDM14.jsp?docIds='
+
docId
}
})
//工厂类型下拉联动
$
(
'input[name="inqu_status-0-factoryCode"]'
).
change
(
function
()
{
var
inInfo
=
new
EiInfo
();
var
factoryCode
=
$
(
"#inqu_status-0-factoryCode"
).
val
();
inInfo
.
set
(
"factoryCode"
,
factoryCode
);
EiCommunicator
.
send
(
"HPXS001"
,
"queryComboBox"
,
inInfo
,
{
onSuccess
:
function
(
ei
)
{
var
input
=
$
(
"#inqu_status-0-groupCode"
);
dataEdition
=
ei
.
getBlock
(
"productionGroupCode_block_id"
).
getMappedRows
();
input
.
kendoDropDownList
({
valuePrimitive
:
true
,
dataTextField
:
"textField"
,
dataValueField
:
"valueField"
,
optionLabel
:
"请选择"
,
dataSource
:
dataEdition
,
template
:
"#=textField#"
});
},
onFail
:
function
(
ei
)
{
}
},
{
async
:
false
});
});
});
let
query
=
function
()
{
resultGrid
.
dataSource
.
page
(
1
);}
/**
* 日期判断
* @param model 当前数据map
* @param rows 数据集合list
* @returns {boolean} 结束时间是否大于开始时间
*/
function
check_time
(
model
,
rows
){
for
(
var
i
=
0
;
i
<
rows
.
length
;
i
++
){
if
(
model
.
planInfoNo
==
rows
[
i
][
5
])
{
var
start_time
=
rows
[
i
][
22
];
var
end_time
=
rows
[
i
][
23
];
if
(
end_time
<
start_time
)
{
return
false
;
}
}
}
return
true
;
}
\ No newline at end of file
src/main/webapp/HP/XS/HPXS002.jsp
View file @
b17fbf31
...
...
@@ -6,11 +6,58 @@
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>
Title
</title>
</head>
<body>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib prefix="EF" tagdir="/WEB-INF/tags/EF" %>
</body>
</html>
<c:set var="ctx" value="${pageContext.request.contextPath}"/>
<EF:EFPage title="设计图管理">
<EF:EFRegion id="inqu" title="查询条件">
<div class="row">
<%--<EF:EFAutoComplete ename="inqu_status-0-node_ename" dataField="node_ename" cname="项目名称" queryMethod="queryA"
serviceName="EEDM6001" resultId="blockA">
</EF:EFAutoComplete>--%>
<EF:EFSelect cname="项目名称" ename="projName" blockId="inqu_status" row="0" colWidth="3"
filter="contains" defultValue="">
<EF:EFOption label="全部" value=""/>
<EF:EFOptions blockId="proj_record_block_id" textField="textField" valueField="valueField"/>
</EF:EFSelect>
<%--<EF:EFInput cname="项目名称" blockId="inqu_status" ename="projName" row="0" colWidth="3"/>--%>
<EF:EFSelect cname="产品类型" ename="inqu_status-0-prdtType" colWidth="3" filter="contains" defultValue="">
<EF:EFOption label="全部" value=""/>
<%--<EF:EFOptions blockId="invent_name_block_id" textField="textField" valueField="valueField"/>--%>
<EF:EFCodeOption codeName="hpjx.hpkc.inventType" condition="ITEM_CODE IN ('3','4','7')"/>
</EF:EFSelect>
<EF:EFInput cname="产品名称" blockId="inqu_status" ename="prdtName" row="0" colWidth="3"/>
<EF:EFInput cname="文件名称" blockId="inqu_status" ename="docName" row="0" colWidth="3"/>
<EF:EFDateSpan startCname="上传日期" endCname="至" blockId="inqu_status"
startName="createdDateFrom" endName="createdDateTo" row="0" role="date"
format="yyyy-MM-dd" satrtRatio="4:8" endRatio="4:8">
</EF:EFDateSpan>
<%--<EF:EFSelect cname="是否删除" ename="deleteFlag" blockId="inqu_status" row="0" colWidth="3" defaultValue="0">
<EF:EFOption label="全部" value=""/>
<EF:EFCodeOption codeName="hpjx.hpjx.deleteFlag"/>
</EF:EFSelect>--%>
</div>
</EF:EFRegion>
<EF:EFRegion id="result" title="明细信息">
<EF:EFGrid blockId="result" autoDraw="override" isFloat="true" checkMode="row">
<EF:EFColumn ename="matId" primaryKey="true" cname="物料清单ID" hidden="true"/>
<EF:EFColumn ename="companyCode" cname="企业编码" hidden="true"/>
<EF:EFColumn ename="realPath" cname="物理路径" hidden="true"/>
<EF:EFColumn cname="项目名称" ename="projName" align="center" width="150" readonly="true" required="false" enable="false"/>
<EF:EFComboColumn ename="prdtType" cname="产品类型" enable="false" width="90" align="center">
<EF:EFCodeOption codeName="hpjx.hpkc.inventType" condition="ITEM_CODE IN ('3','4','7')"/>
</EF:EFComboColumn>
<EF:EFColumn cname="产品名称" ename="prdtName" align="center" width="150" readonly="true" required="false" enable="false"/>
<EF:EFColumn cname="文件名称" ename="docName" align="center" width="150" readonly="true" required="false" enable="false"/>
<EF:EFColumn cname="创建人" ename="createdName" align="center" width="150" readonly="true" required="false" enable="false"/>
<EF:EFColumn cname="创建时间" ename="createdTime" parseFormats="['yyyyMMddHHmmss']" editType="datetime"
dateFormat="yyyy-MM-dd HH:mm:ss" align="center" width="150" readonly="true" required="false"
enable="false"/>
</EF:EFGrid>
</EF:EFRegion>
</EF:EFPage>
\ No newline at end of file
src/main/webapp/common/img/login.png
0 → 100644
View file @
b17fbf31
1.52 MB
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment