Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
H
hg-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
hg-smart
Commits
f674c2bd
Commit
f674c2bd
authored
May 18, 2024
by
wasx8023
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1.入库质检单
parent
671678be
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
757 additions
and
173 deletions
+757
-173
HGCG003.xml
src/main/java/com/baosight/hggp/hg/cg/sql/HGCG003.xml
+1
-1
HGCGTools.java
src/main/java/com/baosight/hggp/hg/cg/tools/HGCGTools.java
+17
-1
HGSqlConstant.java
...ain/java/com/baosight/hggp/hg/constant/HGSqlConstant.java
+17
-16
HGZL001A.java
src/main/java/com/baosight/hggp/hg/zl/domain/HGZL001A.java
+0
-0
ServiceHGZL001.java
.../java/com/baosight/hggp/hg/zl/service/ServiceHGZL001.java
+65
-23
ServiceHGZL001A.java
...java/com/baosight/hggp/hg/zl/service/ServiceHGZL001A.java
+126
-0
ServiceHGZL001B.java
...java/com/baosight/hggp/hg/zl/service/ServiceHGZL001B.java
+134
-0
HGZL001.xml
src/main/java/com/baosight/hggp/hg/zl/sql/HGZL001.xml
+26
-11
HGZL001A.xml
src/main/java/com/baosight/hggp/hg/zl/sql/HGZL001A.xml
+141
-0
HGZLTools.java
src/main/java/com/baosight/hggp/hg/zl/tools/HGZLTools.java
+76
-0
HGZLUtils.java
src/main/java/com/baosight/hggp/hg/zl/utils/HGZLUtils.java
+26
-0
HGZL001.js
src/main/webapp/HG/ZL/HGZL001.js
+39
-40
HGZL001.jsp
src/main/webapp/HG/ZL/HGZL001.jsp
+22
-24
HGZL001A.js
src/main/webapp/HG/ZL/HGZL001A.js
+3
-3
HGZL001A.jsp
src/main/webapp/HG/ZL/HGZL001A.jsp
+3
-6
HGZL001B.js
src/main/webapp/HG/ZL/HGZL001B.js
+5
-16
HGZL001B.jsp
src/main/webapp/HG/ZL/HGZL001B.jsp
+56
-32
No files found.
src/main/java/com/baosight/hggp/hg/cg/sql/HGCG003.xml
View file @
f674c2bd
...
...
@@ -227,7 +227,7 @@
SET
STATUS = #status#,
DELIVER_QTY = #deliverQty#,
<!-- 退货数量 -->
DEPOSIT_QTY = #depositQty#,
<!--
退货
数量 -->
DEPOSIT_QTY = #depositQty#,
<!--
入库
数量 -->
<include
refid=
"updateRevise"
/>
WHERE RECEIVE_NO = #receiveNo#
</update>
...
...
src/main/java/com/baosight/hggp/hg/cg/tools/HGCGTools.java
View file @
f674c2bd
...
...
@@ -6,9 +6,9 @@ import com.baosight.hggp.hg.cg.domain.HGCG001;
import
com.baosight.hggp.hg.cg.domain.HGCG002
;
import
com.baosight.hggp.hg.cg.domain.HGCG002A
;
import
com.baosight.hggp.hg.cg.domain.HGCG003
;
import
com.baosight.hggp.hg.kc.domain.HGKC001
;
import
com.baosight.hggp.hg.constant.HGConstant
;
import
com.baosight.hggp.hg.constant.HGSqlConstant
;
import
com.baosight.hggp.hg.zl.domain.HGZL001
;
import
com.baosight.hggp.util.AssertUtils
;
import
org.apache.commons.collections.CollectionUtils
;
...
...
@@ -234,6 +234,22 @@ public class HGCGTools {
paramMap
.
put
(
"status"
,
status
);
DaoUtils
.
update
(
HGSqlConstant
.
HgCg003
.
UPDATE_STATUS
,
paramMap
);
}
/**
* 修改状态
*
* @param zl001
*/
public
static
void
updateCheck
(
HGZL001
zl001
)
{
Map
<
String
,
Object
>
paramMap
=
new
HashMap
<>();
paramMap
.
put
(
HGCG003
.
FIELD_RECEIVE_NO
,
zl001
.
getReceiveNo
());
paramMap
.
put
(
HGCG003
.
FIELD_STATUS
,
HGConstant
.
CgReceiveStatus
.
S_4
);
paramMap
.
put
(
HGCG003
.
FIELD_DELIVER_QTY
,
zl001
.
getUnqualifyQty
());
paramMap
.
put
(
HGCG003
.
FIELD_DEPOSIT_QTY
,
zl001
.
getQualifyQty
());
DaoUtils
.
update
(
HGSqlConstant
.
HgCg003
.
UPDATE_CONFIRM
,
paramMap
);
}
}
}
src/main/java/com/baosight/hggp/hg/constant/HGSqlConstant.java
View file @
f674c2bd
...
...
@@ -64,7 +64,7 @@ public class HGSqlConstant {
public
static
final
String
UPDATE_STATUS
=
MODULE_NAME
+
"updateStatus"
;
// 修改数量
public
static
final
String
UPDATE_QTY
=
MODULE_NAME
+
"updateQty"
;
//
修改数量
//
收货完成
public
static
final
String
UPDATE_CONFIRM
=
MODULE_NAME
+
"updateConfirm"
;
}
...
...
@@ -147,6 +147,22 @@ public class HGSqlConstant {
}
/**
* HGZL001 SQL 定义
*
* @author:songx
* @date:2024/5/18,15:13
*/
public
class
HgZl001
{
// 模块名称
private
static
final
String
MODULE_NAME
=
"HGZL001."
;
// 锁
public
static
final
String
LOCK
=
MODULE_NAME
+
"lock"
;
// 已处理
public
static
final
String
PROCESS
=
MODULE_NAME
+
"process"
;
}
/**
* HPKC001 SQL 定义
*
* @author:songx
...
...
@@ -519,21 +535,6 @@ public class HGSqlConstant {
}
/**
* 质量巡检单
*
* @author:songx
* @date:2024/2/2,14:23
*/
public
class
HPZL001
{
// 已处理
public
static
final
String
DO_PROCESS
=
"HPZL001.doProcess"
;
// 已处理
public
static
final
String
DO_PROCESS2
=
"HPZL001.doProcess2"
;
}
/**
* 用户
*
* @author:songx
...
...
src/main/java/com/baosight/hggp/hg/zl/domain/HGZL001A.java
0 → 100644
View file @
f674c2bd
This diff is collapsed.
Click to expand it.
src/main/java/com/baosight/hggp/hg/zl/service/ServiceHGZL001.java
View file @
f674c2bd
...
...
@@ -2,11 +2,18 @@ package com.baosight.hggp.hg.zl.service;
import
com.baosight.hggp.aspect.annotation.OperationLogAnnotation
;
import
com.baosight.hggp.common.DdynamicEnum
;
import
com.baosight.hggp.core.constant.CommonConstant
;
import
com.baosight.hggp.core.dao.DaoUtils
;
import
com.baosight.hggp.core.enums.DeleteFlagEnum
;
import
com.baosight.hggp.hg.cg.tools.HGCGTools
;
import
com.baosight.hggp.hg.constant.HGSqlConstant
;
import
com.baosight.hggp.hg.zl.domain.HGZL001
;
import
com.baosight.hggp.hg.zl.utils.HGZLUtils
;
import
com.baosight.hggp.util.AssertUtils
;
import
com.baosight.hggp.util.CommonMethod
;
import
com.baosight.hggp.util.EiInfoUtils
;
import
com.baosight.hggp.util.LogUtils
;
import
com.baosight.hggp.util.MapUtils
;
import
com.baosight.iplat4j.core.ei.EiConstant
;
import
com.baosight.iplat4j.core.ei.EiInfo
;
import
com.baosight.iplat4j.core.service.impl.ServiceBase
;
...
...
@@ -31,9 +38,9 @@ public class ServiceHGZL001 extends ServiceBase {
@OperationLogAnnotation
(
operModul
=
"入库质检单"
,
operType
=
"查询"
,
operDesc
=
"初始化"
)
public
EiInfo
initLoad
(
EiInfo
inInfo
)
{
try
{
CommonMethod
.
initBlock
(
inInfo
,
Arrays
.
asList
(
DdynamicEnum
.
PROJ_RECORD_BLOCK_ID
),
null
);
CommonMethod
.
initBlock
(
inInfo
,
Arrays
.
asList
(
DdynamicEnum
.
INVENT_RECORD_BLOCK_ID
)
,
null
);
CommonMethod
.
initBlock
(
inInfo
,
Arrays
.
asList
(
DdynamicEnum
.
USER_BLOCK_ID
),
null
);
CommonMethod
.
initBlock
(
inInfo
,
Arrays
.
asList
(
DdynamicEnum
.
COMPANY_CODE_BLOCK_ID
)
);
CommonMethod
.
initBlock
(
inInfo
,
Arrays
.
asList
(
DdynamicEnum
.
INVENT_RECORD_BLOCK_ID
));
CommonMethod
.
initBlock
(
inInfo
,
Arrays
.
asList
(
DdynamicEnum
.
SPEC_NAME_BLOCK_ID
)
);
inInfo
.
addBlock
(
EiConstant
.
resultBlock
).
addBlockMeta
(
new
HGZL001
().
eiMetadata
);
}
catch
(
Exception
e
)
{
LogUtils
.
setDetailMsg
(
inInfo
,
e
,
"初始化失败"
);
...
...
@@ -150,17 +157,19 @@ public class ServiceHGZL001 extends ServiceBase {
@OperationLogAnnotation
(
operModul
=
"质量巡检单"
,
operType
=
"删除"
,
operDesc
=
"删除"
)
public
EiInfo
delete
(
EiInfo
inInfo
)
{
try
{
List
<
Map
>
resultRows
=
inInfo
.
getBlock
(
EiConstant
.
resultBlock
).
getRows
();
for
(
int
i
=
0
;
i
<
resultRows
.
size
();
i
++)
{
// HPZL001 fZl001 = new HPZL001();
// fZl001.fromMap(resultRows.get(i));
// AssertUtils.isTrue(CommonConstant.YesNo.YES_1.equals(fZl001.getStatus()),
// String.format("单号[%s]的状态为\"已处理\"不允许删除", fZl001.getCheckNo()));
// DaoUtils.update(HPZL001.DELETE, resultRows.get(i));
List
<
HGZL001
>
fZl001s
=
MapUtils
.
toDaoEPBase
(
inInfo
,
HGZL001
.
class
);
Map
<
String
,
HGZL001
>
dbZl001Map
=
HGZLUtils
.
HgZl001
.
lockGetDataEp
(
fZl001s
);
for
(
HGZL001
fZl001
:
fZl001s
)
{
String
checkNo
=
fZl001
.
getCheckNo
();
HGZL001
dbZl010
=
dbZl001Map
.
get
(
checkNo
);
AssertUtils
.
isEquals
(
CommonConstant
.
YesNo
.
YES_1
,
dbZl010
.
getStatus
(),
String
.
format
(
"单号[%s]的状态为\"已处理\",不允许删除"
,
checkNo
));
dbZl010
.
setDeleteFlag
(
DeleteFlagEnum
.
REMOVE
.
getCode
());
DaoUtils
.
update
(
HGZL001
.
DELETE
,
dbZl010
);
}
inInfo
=
this
.
query
(
inInfo
);
inInfo
.
setStatus
(
EiConstant
.
STATUS_DEFAULT
);
inInfo
.
setMsg
(
"操作成功!本次对["
+
resultRow
s
.
size
()
+
"]条数据删除成功!"
);
inInfo
.
setMsg
(
"操作成功!本次对["
+
fZl001
s
.
size
()
+
"]条数据删除成功!"
);
}
catch
(
Exception
e
)
{
LogUtils
.
setDetailMsg
(
inInfo
,
e
,
"删除失败"
);
}
...
...
@@ -176,22 +185,55 @@ public class ServiceHGZL001 extends ServiceBase {
@OperationLogAnnotation
(
operModul
=
"质量巡检单"
,
operType
=
"修改"
,
operDesc
=
"已处理"
)
public
EiInfo
doProcess
(
EiInfo
inInfo
)
{
try
{
List
<
Map
>
resultRows
=
inInfo
.
getBlock
(
EiConstant
.
resultBlock
).
getRows
();
for
(
int
i
=
0
;
i
<
resultRows
.
size
();
i
++)
{
// HPZL001 fZl001 = new HPZL001();
// fZl001.fromMap(resultRows.get(i));
///* fZl001.setCheckUser(UserSession.getLoginName());
// fZl001.setCheckUserName(UserSession.getLoginCName());*/
// fZl001.setStatus(CommonConstant.YesNo.YES_1);
// DaoUtils.update(HGSqlConstant.HPZL001.DO_PROCESS, fZl001);
}
List
<
HGZL001
>
fZl001s
=
MapUtils
.
toDaoEPBase
(
inInfo
,
HGZL001
.
class
);
Map
<
String
,
HGZL001
>
dbZl001Map
=
HGZLUtils
.
HgZl001
.
lockGetDataEp
(
fZl001s
);
// 数据校验
this
.
checkProcessData
(
fZl001s
,
dbZl001Map
);
// 保存数据
this
.
saveProcessData
(
fZl001s
,
dbZl001Map
);
inInfo
=
this
.
query
(
inInfo
);
inInfo
.
setStatus
(
EiConstant
.
STATUS_DEFAULT
);
inInfo
.
setMsg
(
"操作成功!本次对["
+
resultRow
s
.
size
()
+
"]条数据处理成功!"
);
inInfo
.
setMsg
(
"操作成功!本次对["
+
fZl001
s
.
size
()
+
"]条数据处理成功!"
);
}
catch
(
Exception
e
)
{
LogUtils
.
setDetailMsg
(
inInfo
,
e
,
"
提交
失败"
);
LogUtils
.
setDetailMsg
(
inInfo
,
e
,
"
处理
失败"
);
}
return
inInfo
;
}
/**
* 校验数据
*
* @param fZl001s
* @param dbZl001Map
*/
private
void
checkProcessData
(
List
<
HGZL001
>
fZl001s
,
Map
<
String
,
HGZL001
>
dbZl001Map
)
{
for
(
HGZL001
fZl001
:
fZl001s
)
{
String
checkNo
=
fZl001
.
getCheckNo
();
HGZL001
dbZl003
=
dbZl001Map
.
get
(
checkNo
);
AssertUtils
.
isNotEquals
(
CommonConstant
.
YesNo
.
NO_0
,
dbZl003
.
getStatus
(),
String
.
format
(
"质检单[%s]状态不是\"未处理\",不允许操作"
,
checkNo
));
AssertUtils
.
isNotEquals
(
fZl001
.
getQualifyQty
().
add
(
fZl001
.
getUnqualifyQty
()),
dbZl003
.
getReceiveQty
(),
String
.
format
(
"质检单[%s]的合格数量加不合格数量必须等于收货数量"
,
checkNo
));
}
}
/**
* 保存数据
*
* @param fZl001s
* @param dbZl001Map
*/
private
void
saveProcessData
(
List
<
HGZL001
>
fZl001s
,
Map
<
String
,
HGZL001
>
dbZl001Map
)
{
for
(
HGZL001
fZl001
:
fZl001s
)
{
String
checkNo
=
fZl001
.
getCheckNo
();
HGZL001
dbZl001
=
dbZl001Map
.
get
(
checkNo
);
dbZl001
.
setQualifyQty
(
fZl001
.
getQualifyQty
());
dbZl001
.
setUnqualifyQty
(
fZl001
.
getUnqualifyQty
());
dbZl001
.
setStatus
(
CommonConstant
.
YesNo
.
YES_1
);
DaoUtils
.
update
(
HGSqlConstant
.
HgZl001
.
PROCESS
,
dbZl001
);
// 更新收货单状态
HGCGTools
.
HgCg003
.
updateCheck
(
dbZl001
);
}
}
}
src/main/java/com/baosight/hggp/hg/zl/service/ServiceHGZL001A.java
0 → 100644
View file @
f674c2bd
package
com
.
baosight
.
hggp
.
hg
.
zl
.
service
;
import
com.baosight.hggp.aspect.annotation.OperationLogAnnotation
;
import
com.baosight.hggp.core.constant.CommonConstant
;
import
com.baosight.hggp.core.dao.DaoUtils
;
import
com.baosight.hggp.hg.zl.domain.HGZL001
;
import
com.baosight.hggp.hg.zl.domain.HGZL001A
;
import
com.baosight.hggp.hg.zl.tools.HGZLTools
;
import
com.baosight.hggp.util.AssertUtils
;
import
com.baosight.hggp.util.EiInfoUtils
;
import
com.baosight.hggp.util.LogUtils
;
import
com.baosight.hggp.util.MapUtils
;
import
com.baosight.iplat4j.core.ProjectInfo
;
import
com.baosight.iplat4j.core.ei.EiConstant
;
import
com.baosight.iplat4j.core.ei.EiInfo
;
import
com.baosight.iplat4j.core.exception.PlatException
;
import
com.baosight.iplat4j.core.service.impl.ServiceEPBase
;
import
java.util.List
;
import
java.util.Map
;
/**
* @author:songx
* @date:2024/1/25,15:25
*/
public
class
ServiceHGZL001A
extends
ServiceEPBase
{
/**
* 画面初始化
*
* @param inInfo
* @return
*/
@OperationLogAnnotation
(
operModul
=
"附件清单"
,
operType
=
"查询"
,
operDesc
=
"质量巡检单-附件清单-初始化"
)
public
EiInfo
initLoad
(
EiInfo
inInfo
)
{
try
{
// 查询物料ID所对应的项目名称和部件名称
Map
queryMap
=
EiInfoUtils
.
getFirstRow
(
inInfo
);
HGZL001
dbZl001
=
HGZLTools
.
HgZl001
.
get
(
MapUtils
.
getLong
(
queryMap
,
"checkId"
));
inInfo
.
addBlock
(
CommonConstant
.
Field
.
DETAIL
).
addRow
(
dbZl001
);
inInfo
.
addBlock
(
EiConstant
.
resultBlock
).
addBlockMeta
(
new
HGZL001A
().
eiMetadata
);
}
catch
(
PlatException
e
)
{
LogUtils
.
setDetailMsg
(
inInfo
,
e
,
"初始化失败"
);
}
return
inInfo
;
}
/**
* 查询操作
*
* @param inInfo
* @return
*/
@OperationLogAnnotation
(
operModul
=
"附件清单"
,
operType
=
"查询"
,
operDesc
=
"质量巡检单-附件清单-查询"
)
@Override
public
EiInfo
query
(
EiInfo
inInfo
)
{
try
{
// 项目环境
String
projectEnv
=
ProjectInfo
.
getProjectEnv
();
if
(
CommonConstant
.
projectEnv
.
RUN
.
equalsIgnoreCase
(
projectEnv
))
{
inInfo
=
super
.
query
(
inInfo
,
"HGZL001A.queryRun"
,
new
HGZL001A
());
}
else
{
inInfo
=
super
.
query
(
inInfo
,
"HGZL001A.queryDev"
,
new
HGZL001A
());
}
}
catch
(
Throwable
e
)
{
LogUtils
.
setDetailMsg
(
inInfo
,
e
,
"查询失败"
);
}
return
inInfo
;
}
/**
* 新增操作
*
* @param inInfo
* @return
*/
@Override
@OperationLogAnnotation
(
operModul
=
"附件清单"
,
operType
=
"新增"
,
operDesc
=
"质量巡检单-附件清单-新增操作"
)
public
EiInfo
insert
(
EiInfo
inInfo
)
{
try
{
List
<
Map
>
resultRows
=
inInfo
.
getBlock
(
EiConstant
.
resultBlock
).
getRows
();
for
(
int
i
=
0
;
i
<
resultRows
.
size
();
i
++)
{
HGZL001A
fZl001A
=
new
HGZL001A
();
fZl001A
.
fromMap
(
resultRows
.
get
(
i
));
// 校验质检单是否已处理
HGZL001
dbZl001
=
HGZLTools
.
HgZl001
.
get
(
fZl001A
.
getCheckId
());
AssertUtils
.
isTrue
(
CommonConstant
.
YesNo
.
YES_1
.
equals
(
dbZl001
.
getStatus
()),
String
.
format
(
"质检单[%s]状态为\"已处理\",不能上传附件"
,
dbZl001
.
getCheckNo
()));
DaoUtils
.
insert
(
HGZL001A
.
INSERT
,
fZl001A
);
}
inInfo
.
setStatus
(
EiConstant
.
STATUS_DEFAULT
);
inInfo
.
setMsg
(
"操作成功!本次对["
+
resultRows
.
size
()
+
"]条数据新增成功!"
);
}
catch
(
Exception
e
)
{
LogUtils
.
setDetailMsg
(
inInfo
,
e
,
"新增失败"
);
}
return
inInfo
;
}
/**
* 删除操作
*
* @param inInfo
* @return
*/
@OperationLogAnnotation
(
operModul
=
"附件清单"
,
operType
=
"删除"
,
operDesc
=
"质量巡检单-附件清单-删除操作"
)
public
EiInfo
delete
(
EiInfo
inInfo
)
{
try
{
List
<
Map
>
resultRows
=
inInfo
.
getBlock
(
EiConstant
.
resultBlock
).
getRows
();
for
(
int
i
=
0
;
i
<
resultRows
.
size
();
i
++)
{
HGZL001A
fZl001A
=
new
HGZL001A
();
fZl001A
.
fromMap
(
resultRows
.
get
(
i
));
// 校验质检单是否已处理
HGZL001
dbZl001
=
HGZLTools
.
HgZl001
.
get
(
fZl001A
.
getCheckId
());
AssertUtils
.
isTrue
(
CommonConstant
.
YesNo
.
YES_1
.
equals
(
dbZl001
.
getStatus
()),
String
.
format
(
"质检单[%s]状态为\"已处理\",不能删除附件"
,
dbZl001
.
getCheckNo
()));
DaoUtils
.
update
(
HGZL001A
.
DELETE
,
fZl001A
);
}
inInfo
=
this
.
query
(
inInfo
);
inInfo
.
setStatus
(
EiConstant
.
STATUS_DEFAULT
);
inInfo
.
setMsg
(
"操作成功!本次对["
+
resultRows
.
size
()
+
"]条数据删除成功!"
);
}
catch
(
Exception
e
)
{
LogUtils
.
setDetailMsg
(
inInfo
,
e
,
"删除失败"
);
}
return
inInfo
;
}
}
src/main/java/com/baosight/hggp/hg/zl/service/ServiceHGZL001B.java
0 → 100644
View file @
f674c2bd
package
com
.
baosight
.
hggp
.
hg
.
zl
.
service
;
import
com.baosight.hggp.aspect.annotation.OperationLogAnnotation
;
import
com.baosight.hggp.common.DdynamicEnum
;
import
com.baosight.hggp.core.constant.CommonConstant
;
import
com.baosight.hggp.core.dao.DaoUtils
;
import
com.baosight.hggp.hg.cg.domain.HGCG003
;
import
com.baosight.hggp.hg.cg.tools.HGCGTools
;
import
com.baosight.hggp.hg.cg.utils.HGCGUtils
;
import
com.baosight.hggp.hg.constant.HGConstant
;
import
com.baosight.hggp.hg.zl.domain.HGZL001
;
import
com.baosight.hggp.util.AssertUtils
;
import
com.baosight.hggp.util.BeanUtils
;
import
com.baosight.hggp.util.CommonMethod
;
import
com.baosight.hggp.util.DateUtils
;
import
com.baosight.hggp.util.EiInfoUtils
;
import
com.baosight.hggp.util.LogUtils
;
import
com.baosight.hggp.util.MapUtils
;
import
com.baosight.iplat4j.core.ei.EiConstant
;
import
com.baosight.iplat4j.core.ei.EiInfo
;
import
com.baosight.iplat4j.core.service.impl.ServiceEPBase
;
import
com.baosight.iplat4j.ed.util.SequenceGenerator
;
import
java.util.Arrays
;
import
java.util.List
;
import
java.util.Map
;
/**
* 选择生产任务
*
* @author:songx
* @date:2022/7/11,11:08
*/
public
class
ServiceHGZL001B
extends
ServiceEPBase
{
/**
* 初始化
*
* @param inInfo
* @return
*/
@Override
@OperationLogAnnotation
(
operModul
=
"生产任务查询"
,
operType
=
"查询"
,
operDesc
=
"质量巡检单-生产任务查询-初始化"
)
public
EiInfo
initLoad
(
EiInfo
inInfo
)
{
try
{
CommonMethod
.
initBlock
(
inInfo
,
Arrays
.
asList
(
DdynamicEnum
.
COMPANY_CODE_BLOCK_ID
));
CommonMethod
.
initBlock
(
inInfo
,
Arrays
.
asList
(
DdynamicEnum
.
SUP_RECORD_BLOCK_ID
));
CommonMethod
.
initBlock
(
inInfo
,
Arrays
.
asList
(
DdynamicEnum
.
INVENT_RECORD_BLOCK_ID
));
CommonMethod
.
initBlock
(
inInfo
,
Arrays
.
asList
(
DdynamicEnum
.
SPEC_NAME_BLOCK_ID
));
inInfo
.
addBlock
(
EiConstant
.
resultBlock
).
addBlockMeta
(
new
HGCG003
().
eiMetadata
);
}
catch
(
Exception
e
)
{
LogUtils
.
setDetailMsg
(
inInfo
,
e
,
"初始化失败"
);
}
return
inInfo
;
}
/**
* 查询数据列表
*
* @param inInfo
* @return
*/
@Override
@OperationLogAnnotation
(
operModul
=
"生产任务查询"
,
operType
=
"查询"
,
operDesc
=
"质量巡检单-生产任务查询-查询"
)
public
EiInfo
query
(
EiInfo
inInfo
)
{
try
{
Map
queryMap
=
EiInfoUtils
.
getFirstRow
(
inInfo
);
queryMap
.
put
(
HGCG003
.
FIELD_STATUS
,
HGConstant
.
CgReceiveStatus
.
S_2
);
inInfo
=
super
.
query
(
inInfo
,
HGCG003
.
QUERY
,
new
HGCG003
());
}
catch
(
Exception
e
)
{
LogUtils
.
setDetailMsg
(
inInfo
,
e
,
"查询失败"
);
}
return
inInfo
;
}
/**
* 生成巡检单
*
* @param inInfo
* @return
*/
@OperationLogAnnotation
(
operModul
=
"生产任务查询"
,
operType
=
"新增"
,
operDesc
=
"质量巡检单-生产任务查询-生成巡检单"
)
public
EiInfo
confirm
(
EiInfo
inInfo
)
{
try
{
List
<
HGCG003
>
fCg003s
=
MapUtils
.
toDaoEPBase
(
inInfo
,
HGCG003
.
class
);
Map
<
String
,
HGCG003
>
dbCg003Map
=
HGCGUtils
.
HgCg003
.
lockGetDataEp
(
fCg003s
);
// 数据校验
this
.
checkConfirmData
(
fCg003s
,
dbCg003Map
);
// 生成巡检单
this
.
saveConfirmData
(
fCg003s
,
dbCg003Map
);
}
catch
(
Exception
e
)
{
LogUtils
.
setDetailMsg
(
inInfo
,
e
,
"生成质检单失败"
);
}
return
inInfo
;
}
/**
* 校验数据
*
* @param fCg003s
* @param dbCg003Map
*/
private
void
checkConfirmData
(
List
<
HGCG003
>
fCg003s
,
Map
<
String
,
HGCG003
>
dbCg003Map
)
{
for
(
HGCG003
fCg003
:
fCg003s
)
{
String
receiveNo
=
fCg003
.
getReceiveNo
();
HGCG003
dbSc003
=
dbCg003Map
.
get
(
fCg003
.
getReceiveNo
());
AssertUtils
.
isNotEquals
(
HGConstant
.
CgReceiveStatus
.
S_2
,
dbSc003
.
getStatus
(),
String
.
format
(
"采购收货单[%s]状态不是\"已收货\",不允许操作"
,
receiveNo
));
}
}
/**
* 保存数据
*
* @param fCg003s
* @param dbCg003Map
*/
private
void
saveConfirmData
(
List
<
HGCG003
>
fCg003s
,
Map
<
String
,
HGCG003
>
dbCg003Map
)
{
for
(
HGCG003
fCg003
:
fCg003s
)
{
String
receiveNo
=
fCg003
.
getReceiveNo
();
// 生成新数据
HGCG003
dbSc003b
=
dbCg003Map
.
get
(
receiveNo
);
HGZL001
newZl001
=
BeanUtils
.
copy
(
dbSc003b
,
HGZL001
.
class
);
newZl001
.
setCheckNo
(
SequenceGenerator
.
getNextSequence
(
HGConstant
.
SequenceId
.
HPZL001_NUMBER
));
newZl001
.
setReceiptDate
(
DateUtils
.
shortDate
());
newZl001
.
setStatus
(
CommonConstant
.
YesNo
.
NO_0
);
newZl001
.
setDeleteFlag
(
CommonConstant
.
YesNo
.
NO_0
);
DaoUtils
.
insert
(
HGZL001
.
INSERT
,
newZl001
);
// 更新收货单状态
HGCGTools
.
HgCg003
.
updateStatus
(
receiveNo
,
HGConstant
.
CgReceiveStatus
.
S_3
);
}
}
}
src/main/java/com/baosight/hggp/hg/zl/sql/HGZL001.xml
View file @
f674c2bd
...
...
@@ -37,6 +37,7 @@
</sql>
<sql
id=
"condition"
>
AND DELETE_FLAG = 0
<include
refid=
"HGXSDataAuth.authCondition"
/>
<include
refid=
"idCondition"
/>
<include
refid=
"customCondition"
/>
...
...
@@ -58,9 +59,6 @@
<isNotEmpty
prepend=
" AND "
property=
"receiptDate"
>
RECEIPT_DATE = #receiptDate#
</isNotEmpty>
<isNotEmpty
prepend=
" AND "
property=
"checkNo"
>
CHECK_NO = #checkNo#
</isNotEmpty>
<isNotEmpty
prepend=
" AND "
property=
"receiveNo"
>
RECEIVE_NO = #receiveNo#
</isNotEmpty>
...
...
@@ -95,11 +93,11 @@
<isNotEmpty
prepend=
" AND "
property=
"id"
>
ID = #id#
</isNotEmpty>
<isNotEmpty
prepend=
" AND "
property=
"
req
No"
>
REQ_NO = #req
No#
<isNotEmpty
prepend=
" AND "
property=
"
check
No"
>
CHECK_NO = #check
No#
</isNotEmpty>
<isNotEmpty
prepend=
" AND "
property=
"
req
Nos"
>
REQ_NO IN
<iterate
open=
"("
close=
")"
conjunction=
","
property=
"reqNos"
>
#req
Nos[]#
</iterate>
<isNotEmpty
prepend=
" AND "
property=
"
check
Nos"
>
CHECK_NO IN
<iterate
open=
"("
close=
")"
conjunction=
","
property=
"checkNos"
>
#check
Nos[]#
</iterate>
</isNotEmpty>
</sql>
...
...
@@ -163,16 +161,14 @@
WIDTH,
<!-- 宽度 -->
THICK,
<!-- 厚度 -->
RECEIVE_QTY,
<!-- 收货数量 -->
QUALIFY_QTY,
<!-- 合格数量 -->
UNQUALIFY_QTY,
<!-- 不合格数量 -->
RECEIVE_UNIT_WEIGHT,
<!-- 收货单重 -->
RECEIVE_WEIGHT,
<!-- 收货重量 -->
STATUS
<!-- 状态:0-质检中,1-质检完成 -->
) VALUES (
#
id#, #
accountCode#, #depCode#, #createdBy#, #createdName#, #createdTime#,
#accountCode#, #depCode#, #createdBy#, #createdName#, #createdTime#,
#deleteFlag#, #companyCode#, #companyName#, #receiptDate#, #checkNo#, #receiveNo#, #inventType#,
#inventCode#, #inventName#, #specId#, #spec#, #material#, #unit#, #length#, #width#, #thick#, #receiveQty#,
#
qualifyQty#, #unqualifyQty#, #
receiveUnitWeight#, #receiveWeight#, #status#
#receiveUnitWeight#, #receiveWeight#, #status#
)
</insert>
...
...
@@ -184,4 +180,23 @@
WHERE CHECK_NO = #checkNo#
</delete>
<!-- 行锁 -->
<update
id=
"lock"
>
UPDATE ${hggpSchema}.HGZL001
SET CREATED_TIME = CREATED_TIME
WHERE 1=1
<include
refid=
"idCondition"
/>
</update>
<!-- 已处理 -->
<update
id=
"process"
>
UPDATE ${hggpSchema}.HGZL001
SET
STATUS = #status#,
QUALIFY_QTY = #qualifyQty#,
<!-- 合格数量 -->
UNQUALIFY_QTY = #unqualifyQty#,
<!-- 不合格数量 -->
<include
refid=
"updateRevise"
/>
WHERE CHECK_NO = #checkNo#
</update>
</sqlMap>
src/main/java/com/baosight/hggp/hg/zl/sql/HGZL001A.xml
0 → 100644
View file @
f674c2bd
<?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">
<sqlMap
namespace=
"HGZL001A"
>
<sql
id=
"column"
>
A.ID as "id",
A.ACCOUNT_CODE as "accountCode",
<!-- 企业编码 -->
A.DEP_CODE as "depCode",
<!-- 部门编码 -->
A.CREATED_BY as "createdBy",
<!-- 记录创建者 -->
A.CREATED_NAME as "createdName",
<!-- 记录创建名称 -->
A.CREATED_TIME as "createdTime",
<!-- 记录创建时间 -->
A.UPDATED_BY as "updatedBy",
<!-- 记录修改者 -->
A.UPDATED_NAME as "updatedName",
<!-- 记录修改名称 -->
A.UPDATED_TIME as "updatedTime",
<!-- 记录修改时间 -->
A.DELETE_FLAG as "deleteFlag",
<!-- 0-未删除,1-已删除 -->
A.DOC_TYPE as "docType",
<!-- 附件类型 -->
A.CHECK_ID as "checkId",
<!-- 质量单ID -->
A.DOC_ID as "docId"
<!-- 文件ID -->
</sql>
<sql
id=
"columnDev"
>
<include
refid=
"column"
/>
,
B.DOC_NAME as "docName"
<!-- 文件名称 -->
</sql>
<sql
id=
"columnRun"
>
<include
refid=
"column"
/>
,
B.RES_CNAME as "docName"
<!-- 文件名称 -->
</sql>
<sql
id=
"condition"
>
<include
refid=
"customCondition"
/>
<isNotEmpty
prepend=
" AND "
property=
"id"
>
A.ID = #id#
</isNotEmpty>
<isNotEmpty
prepend=
" AND "
property=
"accountCode"
>
A.ACCOUNT_CODE = #accountCode#
</isNotEmpty>
<isNotEmpty
prepend=
" AND "
property=
"depCode"
>
A.DEP_CODE = #depCode#
</isNotEmpty>
<isNotEmpty
prepend=
" AND "
property=
"docType"
>
A.DOC_TYPE = #docType#
</isNotEmpty>
<isNotEmpty
prepend=
" AND "
property=
"checkId"
>
A.CHECK_ID = #checkId#
</isNotEmpty>
<isNotEmpty
prepend=
" AND "
property=
"docId"
>
A.DOC_ID = #docId#
</isNotEmpty>
</sql>
<!-- 开发环境 -->
<sql
id=
"conditionDev"
>
AND A.DOC_ID = B.DOC_ID
<include
refid=
"condition"
/>
<isNotEmpty
prepend=
" AND "
property=
"docName"
>
B.DOC_NAME LIKE CONCAT('%', #docName#, '%')
</isNotEmpty>
</sql>
<!-- 正式环境 -->
<sql
id=
"conditionRun"
>
AND A.DOC_ID = B.RES_ID
<include
refid=
"condition"
/>
<isNotEmpty
prepend=
" AND "
property=
"docName"
>
B.RES_CNAME LIKE CONCAT('%', #docName#, '%')
</isNotEmpty>
</sql>
<sql
id=
"customCondition"
>
<isNotEmpty
prepend=
" AND "
property=
"createdDateFrom"
>
A.CREATED_TIME
>
= CONCAT(REPLACE(#createdDateFrom#, '-', ''), '000000')
</isNotEmpty>
<isNotEmpty
prepend=
" AND "
property=
"createdDateTo"
>
A.CREATED_TIME
<
= CONCAT(REPLACE(#createdDateTo#, '-', ''), '235959')
</isNotEmpty>
</sql>
<sql
id=
"order"
>
<dynamic
prepend=
"ORDER BY"
>
<isNotEmpty
property=
"order"
>
$orderBy$
</isNotEmpty>
<isEmpty
property=
"order"
>
A.ID DESC
</isEmpty>
</dynamic>
</sql>
<select
id=
"queryDev"
resultClass=
"com.baosight.hggp.hg.zl.domain.HGZL001A"
>
SELECT
<include
refid=
"columnDev"
/>
FROM ${hggpSchema}.HGZL001A A, ${platSchema}.TEUDM02 B
WHERE 1=1
<include
refid=
"conditionDev"
/>
<include
refid=
"order"
/>
</select>
<select
id=
"countDev"
resultClass=
"int"
>
SELECT COUNT(*) FROM ${hggpSchema}.HGZL001A A, ${platSchema}.TEUDM02 B
WHERE 1=1
<include
refid=
"conditionDev"
/>
</select>
<select
id=
"queryRun"
resultClass=
"com.baosight.hggp.hg.zl.domain.HGZL001A"
>
SELECT
<include
refid=
"columnRun"
/>
FROM ${hggpSchema}.HGZL001A A, ${platSchema}.TEUDM05 B
WHERE 1=1
<include
refid=
"conditionRun"
/>
<include
refid=
"order"
/>
</select>
<select
id=
"countRun"
resultClass=
"int"
>
SELECT COUNT(*) FROM ${hggpSchema}.HGZL001A A, ${platSchema}.TEUDM05 B
WHERE 1=1
<include
refid=
"conditionRun"
/>
</select>
<insert
id=
"insert"
>
INSERT INTO ${hggpSchema}.HGZL001A (
ACCOUNT_CODE,
<!-- 企业编码 预留 -->
DEP_CODE,
<!-- 部门编码 预留 -->
CHECK_ID,
<!-- 巡检单ID -->
DOC_TYPE,
<!-- 文件类型 -->
DOC_ID,
<!-- 文件ID -->
CREATED_BY,
<!-- 创建人 -->
CREATED_NAME,
<!-- 创建人名称 -->
CREATED_TIME
<!-- 创建时间 -->
) VALUES (
#accountCode#, #depCode#, #checkId#, #docType#, #docId#, #createdBy#,
#createdName#, #createdTime#
)
</insert>
<delete
id=
"delete"
>
DELETE FROM ${hggpSchema}.HGZL001A WHERE ID = #id#
</delete>
</sqlMap>
src/main/java/com/baosight/hggp/hg/zl/tools/HGZLTools.java
0 → 100644
View file @
f674c2bd
package
com
.
baosight
.
hggp
.
hg
.
zl
.
tools
;
import
com.baosight.hggp.core.dao.DaoBase
;
import
com.baosight.hggp.hg.constant.HGSqlConstant
;
import
com.baosight.hggp.hg.zl.domain.HGZL001
;
import
com.baosight.hggp.util.AssertUtils
;
import
org.apache.commons.collections.CollectionUtils
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.stream.Collectors
;
/**
* @author:songx
* @date:2024/5/18,15:12
*/
public
class
HGZLTools
{
/**
* @author:songx
* @date:2024/5/18,15:12
*/
public
static
class
HgZl001
{
/**
* 锁
*
* @param checkNos
* @return
*/
public
static
void
lock
(
List
<
String
>
checkNos
)
{
if
(
CollectionUtils
.
isEmpty
(
checkNos
))
{
return
;
}
Map
paramMap
=
new
HashMap
();
paramMap
.
put
(
"checkNos"
,
checkNos
);
DaoBase
.
getInstance
().
update
(
HGSqlConstant
.
HgZl001
.
LOCK
,
paramMap
);
}
/**
* @param id
*/
public
static
HGZL001
get
(
Long
id
)
{
AssertUtils
.
isNull
(
id
,
"ID不能为空"
);
Map
paramMap
=
new
HashMap
();
paramMap
.
put
(
HGZL001
.
FIELD_ID
,
id
);
List
<
HGZL001
>
results
=
DaoBase
.
getInstance
().
query
(
HGZL001
.
QUERY
,
paramMap
);
return
CollectionUtils
.
isEmpty
(
results
)
?
null
:
results
.
get
(
0
);
}
/**
* 查询
*
* @param checkNos
* @return
*/
public
static
List
<
HGZL001
>
list
(
List
<
String
>
checkNos
)
{
AssertUtils
.
isEmpty
(
checkNos
,
"计划号不能为空"
);
Map
<
String
,
Object
>
paramMap
=
new
HashMap
();
paramMap
.
put
(
"checkNos"
,
checkNos
);
return
DaoBase
.
getInstance
().
query
(
HGZL001
.
QUERY
,
paramMap
);
}
/**
* 查询
*
* @param checkNos
* @return
*/
public
static
Map
<
String
,
HGZL001
>
map
(
List
<
String
>
checkNos
)
{
List
<
HGZL001
>
results
=
list
(
checkNos
);
return
results
.
stream
().
collect
(
Collectors
.
toMap
(
HGZL001:
:
getCheckNo
,
item
->
item
));
}
}
}
src/main/java/com/baosight/hggp/hg/zl/utils/HGZLUtils.java
View file @
f674c2bd
...
...
@@ -2,10 +2,13 @@ package com.baosight.hggp.hg.zl.utils;
import
com.baosight.hggp.hg.utils.HGUtils
;
import
com.baosight.hggp.hg.zl.domain.HGZL001
;
import
com.baosight.hggp.hg.zl.tools.HGZLTools
;
import
com.baosight.hggp.util.DateUtils
;
import
com.baosight.hggp.util.MapUtils
;
import
com.baosight.hggp.util.ObjectUtils
;
import
com.baosight.hggp.util.StringUtils
;
import
java.util.List
;
import
java.util.Map
;
/**
...
...
@@ -36,5 +39,28 @@ public class HGZLUtils {
queryRow
.
put
(
HGZL001
.
FIELD_RECEIPT_DATE
,
DateUtils
.
formatShort
(
receiptDate
));
}
}
/**
* 锁并且获取数据
*
* @param fZl001s
* @return
*/
public
static
Map
<
String
,
HGZL001
>
lockGetDataEp
(
List
<?
extends
HGZL001
>
fZl001s
)
{
return
lockGetData
(
ObjectUtils
.
listEpKey
(
fZl001s
,
HGZL001
.
FIELD_CHECK_NO
));
}
/**
* 锁并且获取数据
*
* @param checkNos
* @return
*/
public
static
Map
<
String
,
HGZL001
>
lockGetData
(
List
<
String
>
checkNos
)
{
// 锁
HGZLTools
.
HgZl001
.
lock
(
checkNos
);
// db数据
return
HGZLTools
.
HgZl001
.
map
(
checkNos
);
}
}
}
src/main/webapp/HG/ZL/HGZL001.js
View file @
f674c2bd
...
...
@@ -14,17 +14,6 @@ $(function () {
class
:
"i-input-readonly"
}
},
{
field
:
"operator"
,
template
:
function
(
item
)
{
let
status
=
item
.
status
;
if
(
status
===
"0"
)
{
return
'<a style="cursor: pointer;display: flex;justify-content: center;" '
+
'onclick="doProcess('
+
item
.
id
+
',
\'
'
+
item
.
checkNo
+
'
\'
)" >处理</a>'
;
}
else
{
return
""
;
}
}
},
{
field
:
"problemPhoto"
,
template
:
function
(
item
)
{
if
(
!
isBlank
(
item
.
checkNo
))
{
...
...
@@ -63,8 +52,12 @@ $(function () {
// 查询
$
(
"#QUERY"
).
on
(
"click"
,
query
);
// 选择生产任务
$
(
"#SELECT_PROD"
).
on
(
"click"
,
selectProd
);
// 选择采购收货
$
(
"#SELECT_RECEIVE"
).
on
(
"click"
,
selectReceive
);
// 质检完成
$
(
"#PROCESS"
).
on
(
"click"
,
process
);
});
/**
...
...
@@ -90,7 +83,7 @@ let query = function () {
*/
let
showUploadFile
=
function
(
id
,
docType
)
{
JSColorbox
.
open
({
href
:
"H
P
ZL001A?methodName=initLoad&inqu_status-0-checkId="
+
id
+
"&inqu_status-0-docType="
+
docType
,
href
:
"H
G
ZL001A?methodName=initLoad&inqu_status-0-checkId="
+
id
+
"&inqu_status-0-docType="
+
docType
,
title
:
"<div style='text-align: center;'>附件清单</div>"
,
width
:
"80%"
,
height
:
"80%"
,
...
...
@@ -103,32 +96,49 @@ let showUploadFile = function (id, docType) {
* @param id
* @param checkNo
*/
let
doProcess
=
function
(
id
,
checkNo
)
{
let
message
=
"确认将单号["
+
checkNo
+
"]的状态修改为已处理吗? "
;
JSUtils
.
confirm
(
message
,
{
let
process
=
function
()
{
let
rows
=
resultGrid
.
getCheckedRows
();
if
(
rows
.
length
<
1
)
{
message
(
"请选择数据"
)
return
;
}
for
(
let
i
=
0
;
i
<
rows
.
length
;
i
++
)
{
let
qualifyQty
=
rows
[
i
][
'qualifyQty'
];
let
unqualifyQty
=
rows
[
i
][
'unqualifyQty'
];
let
receiveQty
=
rows
[
i
][
'receiveQty'
];
if
(
!
isNumber
(
qualifyQty
)
||
!
isNumber
(
unqualifyQty
))
{
message
(
"第"
+
(
i
+
1
)
+
"行合格数量和不合格数量必须是大于等于0的数字"
);
return
;
}
if
((
parseFloat
(
qualifyQty
)
+
parseFloat
(
unqualifyQty
))
!=
parseFloat
(
receiveQty
))
{
message
(
"第"
+
(
i
+
1
)
+
"行合格数量加不合格数量必须等于收货数量"
);
return
;
}
}
JSUtils
.
confirm
(
"确定对勾选中的["
+
rows
.
length
+
"]条数据做质检完成操作吗? "
,
{
ok
:
function
()
{
JSUtils
.
submitGridsData
(
"result"
,
"H
P
ZL001"
,
"doProcess"
,
true
);
JSUtils
.
submitGridsData
(
"result"
,
"H
G
ZL001"
,
"doProcess"
,
true
);
}
});
}
/**
*
挑选生产任务
*
选择采购收货
*/
let
select
Prod
=
function
()
{
let
select
Receive
=
function
()
{
JSColorbox
.
open
({
href
:
"H
P
ZL001B?methodName=initLoad"
,
title
:
"<div style='text-align: center;'>
生产任务
查询</div>"
,
width
:
"
9
0%"
,
href
:
"H
G
ZL001B?methodName=initLoad"
,
title
:
"<div style='text-align: center;'>
采购收货
查询</div>"
,
width
:
"
8
0%"
,
height
:
"80%"
,
callbackName
:
select
Stock
Callback
callbackName
:
select
Receive
Callback
});
}
/**
*
挑选生产任务
回调
*
选择采购收货
回调
*/
let
select
Stock
Callback
=
function
()
{
let
select
Receive
Callback
=
function
()
{
// 刷新页面
query
();
// 关闭弹窗
...
...
@@ -144,20 +154,9 @@ function deleteFunc() {
message
(
"请选择数据"
);
return
;
}
let
flag
=
true
;
$
.
each
(
rows
,
function
(
index
,
item
)
{
let
status
=
item
.
get
(
"status"
);
if
(
status
===
"1"
){
message
(
"选中的第"
+
(
index
+
1
)
+
"行记录已处理,不能删除!"
);
flag
=
false
;
return
false
;
JSUtils
.
confirm
(
"确定对勾选中的["
+
rows
.
length
+
"]条数据做
\"
删除
\"
操作? "
,
{
ok
:
function
()
{
JSUtils
.
submitGridsData
(
"result"
,
"HGZL001"
,
"delete"
,
true
);
}
});
if
(
flag
){
JSUtils
.
confirm
(
"确定对勾选中的["
+
rows
.
length
+
"]条数据做
\"
删除
\"
操作? "
,
{
ok
:
function
()
{
JSUtils
.
submitGridsData
(
"result"
,
"HPZL001"
,
"delete"
,
true
);
}
});
}
}
src/main/webapp/HG/ZL/HGZL001.jsp
View file @
f674c2bd
...
...
@@ -10,33 +10,31 @@
<div
class=
"row"
>
<EF:EFDatePicker
cname=
"单据日期"
ename=
"receiptDate"
blockId=
"inqu_status"
row=
"0"
colWidth=
"3"
format=
"yyyy-MM-dd"
readonly=
"true"
/>
<EF:EFInput
cname=
"项目名称"
ename=
"projName"
blockId=
"inqu_status"
row=
"0"
colWidth=
"3"
/>
<EF:EFInput
cname=
"部件名称"
ename=
"inventName"
blockId=
"inqu_status"
row=
"0"
colWidth=
"3"
/>
<EF:EFInput
cname=
"零件名称"
ename=
"subInventName"
blockId=
"inqu_status"
row=
"0"
colWidth=
"3"
/>
<EF:EFSelect
cname=
"公司名称"
blockId=
"inqu_status"
ename=
"companyCode"
row=
"0"
colWidth=
"3"
filter=
"contains"
optionLabel=
"全部"
defultValue=
""
>
<EF:EFOptions
blockId=
"company_code_block_id"
textField=
"textField"
valueField=
"valueField"
/>
</EF:EFSelect>
<EF:EFSelect
cname=
"存货名称"
blockId=
"inqu_status"
ename=
"inventCode"
row=
"0"
colWidth=
"3"
filter=
"contains"
optionLabel=
"全部"
defultValue=
""
>
<EF:EFOptions
blockId=
"invent_record_block_id"
textField=
"textField"
valueField=
"valueField"
/>
</EF:EFSelect>
<EF:EFSelect
cname=
"规格"
ename=
"inqu_status-0-spec"
colWidth=
"3"
filter=
"contains"
optionLabel=
"全部"
defultValue=
""
>
<EF:EFOptions
blockId=
"spec_name_block_id"
textField=
"textField"
valueField=
"valueField"
/>
</EF:EFSelect>
</div>
<div
class=
"row"
>
<EF:EFInput
cname=
"工作组"
ename=
"orgName"
blockId=
"inqu_status"
row=
"0"
colWidth=
"3"
/>
<EF:EFInput
cname=
"检查人"
ename=
"checkUserName"
blockId=
"inqu_status"
row=
"0"
colWidth=
"3"
/>
<EF:EFSelect
cname=
"不良类型"
ename=
"poorType"
blockId=
"inqu_status"
row=
"0"
colWidth=
"3"
>
<EF:EFOption
label=
"全部"
value=
""
/>
<EF:EFCodeOption
codeName=
"hpjx.hpjx.poorType"
/>
</EF:EFSelect>
<EF:EFSelect
cname=
"处理状态"
ename=
"status"
blockId=
"inqu_status"
row=
"0"
colWidth=
"3"
>
<EF:EFOption
label=
"全部"
value=
""
/>
<EF:EFOption
label=
"已处理"
value=
"1"
></EF:EFOption>
<EF:EFOption
label=
"未处理"
value=
"0"
></EF:EFOption>
</EF:EFSelect>
</div>
<div
class=
"row"
>
<EF:EFInput
cname=
"生产订单号"
ename=
"prodOrderNo"
blockId=
"inqu_status"
row=
"0"
colWidth=
"3"
/>
<EF:EFInput
cname=
"生产任务号"
ename=
"prodTaskNo"
blockId=
"inqu_status"
row=
"0"
colWidth=
"3"
/>
</div>
</EF:EFRegion>
<EF:EFRegion
id=
"result"
title=
"明细信息"
>
<EF:EFGrid
blockId=
"result"
autoDraw=
"override"
isFloat=
"true"
checkMode=
"row"
>
<EF:EFColumn
ename=
"id"
cname=
"内码"
hidden=
"true"
/>
<EF:EFColumn
ename=
"operator"
cname=
"操作"
locked=
"true"
enable=
"false"
width=
"100"
align=
"center"
/>
<EF:EFColumn
ename=
"problemPhoto"
cname=
"问题照片"
locked=
"true"
enable=
"false"
width=
"100"
align=
"center"
required=
"true"
/>
<EF:EFColumn
ename=
"processPhoto"
cname=
"处理照片"
locked=
"true"
enable=
"false"
width=
"100"
align=
"center"
...
...
@@ -55,18 +53,18 @@
<EF:EFColumn
ename=
"inventName"
cname=
"存货名称"
enable=
"false"
width=
"100"
align=
"center"
/>
<EF:EFColumn
ename=
"specId"
cname=
"规格ID"
enable=
"false"
width=
"100"
align=
"center"
hidden=
"true"
/>
<EF:EFColumn
ename=
"spec"
cname=
"规格"
enable=
"false"
width=
"120"
align=
"center"
/>
<EF:EFColumn
ename=
"receiveQty"
cname=
"收货数量"
enable=
"false"
width=
"120"
align=
"right"
format=
"{0:N0}"
/>
<EF:EFColumn
ename=
"receiveWeight"
cname=
"收货重量"
enable=
"false"
width=
"120"
align=
"right"
format=
"{0:N3}"
/>
<EF:EFColumn
ename=
"qualifyQty"
cname=
"合格数量"
width=
"120"
align=
"right"
format=
"{0:N0}"
required=
"true"
/>
<EF:EFColumn
ename=
"unqualifyQty"
cname=
"不合格数量"
width=
"120"
align=
"right"
format=
"{0:N0}"
required=
"true"
/>
<EF:EFComboColumn
ename=
"poorType"
cname=
"不良品类"
enable=
"false"
width=
"100"
align=
"center"
>
<EF:EFCodeOption
codeName=
"hpjx.hpjx.poorType"
/>
</EF:EFComboColumn>
<EF:EFColumn
ename=
"problemDesc"
cname=
"质量问题描述"
enable=
"false"
width=
"140"
align=
"center"
/>
<EF:EFComboColumn
ename=
"checkUser"
cname=
"检查人"
enable=
"false"
width=
"120"
align=
"center"
blockName=
"user_block_id"
textField=
"textField"
valueField=
"valueField"
columnTemplate=
"#=textField#"
itemTemplate=
"#=textField#"
>
</EF:EFComboColumn>
<EF:EFColumn
ename=
"receiveQty"
cname=
"收货数量"
enable=
"false"
width=
"120"
align=
"right"
format=
"{0:N0}"
/>
<EF:EFColumn
ename=
"receiveWeight"
cname=
"收货重量"
enable=
"false"
width=
"120"
align=
"right"
format=
"{0:N3}"
/>
<
%
--
<
EF:EFComboColumn
ename=
"poorType"
cname=
"不良品类"
enable=
"false"
width=
"100"
align=
"center"
>
--%>
<
%
--
<
EF:EFCodeOption
codeName=
"hpjx.hpjx.poorType"
/>
--%>
<
%
--
</
EF:EFComboColumn
>
--%>
<
%
--
<
EF:EFColumn
ename=
"problemDesc"
cname=
"质量问题描述"
enable=
"false"
width=
"140"
align=
"center"
/>
--%>
<
%
--
<
EF:EFComboColumn
ename=
"checkUser"
cname=
"检查人"
enable=
"false"
width=
"120"
align=
"center"
--
%
>
<
%
--
blockName=
"user_block_id"
textField=
"textField"
valueField=
"valueField"
--
%
>
<
%
--
columnTemplate=
"#=textField#"
itemTemplate=
"#=textField#"
>
--%>
<
%
--
</
EF:EFComboColumn
>
--%>
<EF:EFColumn
ename=
"material"
cname=
"材质"
enable=
"false"
width=
"80"
align=
"center"
/>
<EF:EFColumn
ename=
"unit"
cname=
"单位"
enable=
"false"
width=
"80"
align=
"center"
/>
<EF:EFColumn
ename=
"length"
cname=
"长(M)"
enable=
"false"
width=
"80"
align=
"right"
format=
"{0:N3}"
/>
...
...
src/main/webapp/HG/ZL/HGZL001A.js
View file @
f674c2bd
...
...
@@ -55,7 +55,7 @@ var query = function (e) {
*/
function
uploadFile
(
id
)
{
JSColorbox
.
open
({
href
:
"H
PSC099
?methodName=initLoad"
,
href
:
"H
GSC099A
?methodName=initLoad"
,
title
:
"<div style='text-align: center;'>附件上传</div>"
,
width
:
"60%"
,
height
:
"50%"
,
...
...
@@ -73,7 +73,7 @@ function uploadFileCallback(docId) {
inEiInfo
.
set
(
"result-0-checkId"
,
$
(
"#inqu_status-0-checkId"
).
val
());
inEiInfo
.
set
(
"result-0-docType"
,
$
(
"#inqu_status-0-docType"
).
val
());
inEiInfo
.
set
(
"result-0-docId"
,
docId
);
EiCommunicator
.
send
(
'H
P
ZL001A'
,
'insert'
,
inEiInfo
,
{
EiCommunicator
.
send
(
'H
G
ZL001A'
,
'insert'
,
inEiInfo
,
{
onSuccess
(
response
)
{
resultGrid
.
dataSource
.
page
(
1
);
},
...
...
@@ -96,7 +96,7 @@ function deleteFunc() {
}
JSUtils
.
confirm
(
"确定对勾选中的["
+
rows
.
length
+
"]条数据做
\"
删除
\"
操作?"
,
{
ok
:
function
()
{
JSUtils
.
submitGridsData
(
"result"
,
"H
P
ZL001A"
,
"delete"
,
true
);
JSUtils
.
submitGridsData
(
"result"
,
"H
G
ZL001A"
,
"delete"
,
true
);
}
})
}
src/main/webapp/HG/ZL/HGZL001A.jsp
View file @
f674c2bd
...
...
@@ -7,15 +7,12 @@
<EF:EFPage
title=
"附件清单"
>
<EF:EFRegion
id=
"inqu"
title=
"查询区域"
type=
"query"
>
<EF:EFInput
cname=
"质量
巡检
单ID"
ename=
"checkId"
blockId=
"inqu_status"
row=
"0"
type=
"hidden"
/>
<EF:EFInput
cname=
"质量单ID"
ename=
"checkId"
blockId=
"inqu_status"
row=
"0"
type=
"hidden"
/>
<EF:EFInput
cname=
"附件类型"
ename=
"docType"
blockId=
"inqu_status"
row=
"0"
type=
"hidden"
/>
<div
class=
"row"
>
<EF:EFInput
cname=
"项目名称"
ename=
"projName"
blockId=
"detail"
row=
"0"
colWidth=
"3"
readonly=
"true"
/>
<EF:EFInput
cname=
"部件名称"
ename=
"inventName"
blockId=
"detail"
row=
"0"
colWidth=
"3"
readonly=
"true"
/>
<EF:EFInput
cname=
"零件名称"
ename=
"subInventName"
blockId=
"detail"
row=
"0"
colWidth=
"3"
readonly=
"true"
/>
<EF:EFInput
cname=
"生产组"
ename=
"orgName"
blockId=
"detail"
row=
"0"
colWidth=
"3"
readonly=
"true"
/>
<EF:EFInput
cname=
"存货名称"
ename=
"inventName"
blockId=
"detail"
row=
"0"
readonly=
"true"
/>
<EF:EFInput
cname=
"规格"
ename=
"spec"
blockId=
"detail"
row=
"0"
readonly=
"true"
/>
</div>
<EF:EFInput
cname=
"状态"
ename=
"status"
blockId=
"detail"
row=
"0"
colWidth=
"3"
type=
"hidden"
/>
</EF:EFRegion>
<EF:EFRegion
id=
"result"
title=
"记录集"
>
...
...
src/main/webapp/HG/ZL/HGZL001B.js
View file @
f674c2bd
...
...
@@ -13,7 +13,8 @@ $(function () {
$
(
"#QUERY"
).
on
(
"click"
,
query
);
// 选择
$
(
"#BTN_SELECT"
).
on
(
"click"
,
select
);
$
(
"#CONFIRM"
).
on
(
"click"
,
confirm
);
downKeyUp
();
});
...
...
@@ -35,27 +36,15 @@ var query = function (e) {
/**
* 选择库存
*/
let
select
=
function
()
{
let
confirm
=
function
()
{
let
rows
=
resultGrid
.
getCheckedRows
();
if
(
rows
.
length
<
1
)
{
message
(
"请选择数据"
)
return
;
}
for
(
let
i
=
0
;
i
<
rows
.
length
;
i
++
)
{
let
poorType
=
rows
[
i
][
'poorType'
];
let
problemDesc
=
rows
[
i
][
'problemDesc'
];
if
(
isBlank
(
poorType
))
{
message
(
"第"
+
(
i
+
1
)
+
"行不良品类不能为空"
);
return
;
}
if
(
isBlank
(
problemDesc
))
{
message
(
"第"
+
(
i
+
1
)
+
"行质量问题描述不能为空"
);
return
;
}
}
JSUtils
.
confirm
(
"确定对勾选中的["
+
rows
.
length
+
"]条数据生成巡检单吗? "
,
{
JSUtils
.
confirm
(
"确定对勾选中的["
+
rows
.
length
+
"]条数据生成质检单吗? "
,
{
ok
:
function
()
{
JSUtils
.
submitGridsData
(
"result"
,
"H
PZL001B"
,
"select
"
,
JSUtils
.
submitGridsData
(
"result"
,
"H
GZL001B"
,
"confirm
"
,
true
,
function
(
e
)
{
var
status
=
e
.
getStatus
();
if
(
status
!==
-
1
)
{
...
...
src/main/webapp/HG/ZL/HGZL001B.jsp
View file @
f674c2bd
...
...
@@ -5,46 +5,70 @@
<c:set
var=
"ctx"
value=
"${pageContext.request.contextPath}"
/>
<EF:EFPage
title=
"
生产任务
查询"
>
<EF:EFPage
title=
"
采购收货
查询"
>
<EF:EFRegion
id=
"inqu"
title=
"查询区域"
type=
"query"
>
<div
class=
"row"
>
<div
class=
"row"
>
<EF:EFInput
cname=
"生产订单号"
ename=
"prodOrderNo"
blockId=
"inqu_status"
row=
"0"
colWidth=
"3"
/>
<EF:EFInput
cname=
"生产任务号"
ename=
"prodTaskNo"
blockId=
"inqu_status"
row=
"0"
colWidth=
"3"
/>
<EF:EFInput
cname=
"项目名称"
ename=
"projName"
blockId=
"inqu_status"
row=
"0"
colWidth=
"3"
/>
<EF:EFInput
cname=
"部件名称"
ename=
"prdtName"
blockId=
"inqu_status"
row=
"0"
colWidth=
"3"
/>
</div>
<div
class=
"row"
>
<EF:EFInput
cname=
"零件名称"
ename=
"partName"
blockId=
"inqu_status"
row=
"0"
colWidth=
"3"
/>
</div>
<EF:EFDatePicker
cname=
"收货日期"
blockId=
"inqu_status"
ename=
"receiveDate"
row=
"0"
colWidth=
"3"
role=
"date"
format=
"yyyy-MM-dd"
readonly=
"true"
/>
<EF:EFInput
cname=
"收货单号"
blockId=
"inqu_status"
ename=
"receiveNo"
row=
"0"
colWidth=
"3"
/>
<EF:EFSelect
cname=
"公司名称"
blockId=
"inqu_status"
ename=
"companyCode"
row=
"0"
colWidth=
"3"
filter=
"contains"
optionLabel=
"全部"
defultValue=
""
>
<EF:EFOptions
blockId=
"company_code_block_id"
textField=
"textField"
valueField=
"valueField"
/>
</EF:EFSelect>
<EF:EFSelect
cname=
"供应商名称"
blockId=
"inqu_status"
ename=
"supCode"
row=
"0"
colWidth=
"3"
filter=
"contains"
optionLabel=
"全部"
defultValue=
""
>
<EF:EFOptions
blockId=
"sup_record_block_id"
textField=
"textField"
valueField=
"valueField"
/>
</EF:EFSelect>
</div>
<div
class=
"row"
>
<EF:EFSelect
cname=
"存货名称"
blockId=
"inqu_status"
ename=
"inventCode"
row=
"0"
colWidth=
"3"
filter=
"contains"
optionLabel=
"全部"
defultValue=
""
>
<EF:EFOptions
blockId=
"invent_record_block_id"
textField=
"textField"
valueField=
"valueField"
/>
</EF:EFSelect>
<EF:EFSelect
cname=
"规格"
ename=
"inqu_status-0-spec"
colWidth=
"3"
filter=
"contains"
optionLabel=
"全部"
defultValue=
""
>
<EF:EFOptions
blockId=
"spec_name_block_id"
textField=
"textField"
valueField=
"valueField"
/>
</EF:EFSelect>
<EF:EFDateSpan
startCname=
"创建时间(从)"
endCname=
"至"
blockId=
"inqu_status"
startName=
"createdTimeFrom"
endName=
"createdTimeTo"
row=
"0"
role=
"datetime"
format=
"yyyy-MM-dd HH:mm:ss"
ratio=
"3:3"
satrtRatio=
"4:8"
endRatio=
"4:8"
readonly=
"true"
>
</EF:EFDateSpan>
</div>
</EF:EFRegion>
<EF:EFRegion
id=
"result"
title=
"记录集"
>
<EF:EFGrid
blockId=
"result"
autoDraw=
"override"
checkMode=
"row"
isFloat=
"true"
>
<EF:EFColumn
ename=
"id"
cname=
"
生产订单ID"
enable=
"false"
width=
"90"
align=
"center
"
hidden=
"true"
/>
<EF:EFColumn
ename=
"c
hildId"
cname=
"生产任务ID"
enable=
"false"
width=
"9
0"
align=
"center"
hidden=
"true"
/>
<EF:EFColumn
ename=
"
projName"
cname=
"项目名称"
enable=
"false"
width=
"14
0"
align=
"center"
/>
<EF:EFColumn
ename=
"
prdtName"
cname=
"部件名称"
enable=
"false"
width=
"120"
align=
"center"
/>
<EF:EFColumn
ename=
"partName"
cname=
"零件名称"
enable=
"false"
width=
"120"
align=
"center
"
/>
<EF:EFColumn
ename=
"
partSpec"
cname=
"零件规格"
enable=
"false"
width=
"15
0"
align=
"center"
/>
<EF:EFComboColumn
ename=
"
poorType"
cname=
"不良品类"
width=
"100"
align=
"center"
required=
"true
"
>
<EF:EFCodeOption
codeName=
"h
pjx.hpjx.poorType
"
/>
<EF:EFColumn
ename=
"id"
cname=
"
内码
"
hidden=
"true"
/>
<EF:EFColumn
ename=
"c
ompanyCode"
cname=
"公司编码"
enable=
"false"
width=
"10
0"
align=
"center"
hidden=
"true"
/>
<EF:EFColumn
ename=
"
companyName"
cname=
"公司名称"
enable=
"false"
width=
"13
0"
align=
"center"
/>
<EF:EFColumn
ename=
"
receiveDate"
cname=
"收货日期"
enable=
"false"
width=
"100"
align=
"center"
editType=
"date"
dateFormat=
"yyyy-MM-dd"
parseFormats=
"['yyyyMMdd']
"
/>
<EF:EFColumn
ename=
"
receiveNo"
cname=
"收货单号"
enable=
"false"
width=
"12
0"
align=
"center"
/>
<EF:EFComboColumn
ename=
"
status"
cname=
"状态"
enable=
"false"
width=
"80"
align=
"center
"
>
<EF:EFCodeOption
codeName=
"h
ggp.hgcg.receiveStatus
"
/>
</EF:EFComboColumn>
<EF:EFColumn
ename=
"problemDesc"
cname=
"质量问题描述"
width=
"140"
required=
"true"
/>
<EF:EFColumn
ename=
"completeNum"
cname=
"已入库数量"
enable=
"false"
width=
"120"
align=
"right"
format=
"{0:N0}"
/>
<EF:EFColumn
ename=
"num"
cname=
"任务数量"
enable=
"false"
width=
"120"
align=
"right"
format=
"{0:N0}"
/>
<EF:EFColumn
ename=
"totalWt"
cname=
"任务重量"
enable=
"false"
width=
"120"
align=
"right"
format=
"{0:N3}"
/>
<EF:EFColumn
ename=
"factoryName"
cname=
"工厂"
enable=
"false"
width=
"150"
align=
"center"
/>
<EF:EFColumn
ename=
"orgName"
cname=
"生产组名称"
enable=
"false"
width=
"150"
align=
"center"
/>
<EF:EFColumn
ename=
"remark"
cname=
"备注"
enable=
"false"
width=
"150"
/>
<EF:EFColumn
ename=
"projCode"
cname=
"项目号"
enable=
"false"
width=
"140"
align=
"center"
/>
<EF:EFColumn
ename=
"prdtCode"
cname=
"部件编码"
enable=
"false"
width=
"120"
align=
"center"
/>
<EF:EFColumn
ename=
"partCode"
cname=
"零件编码"
enable=
"false"
width=
"120"
align=
"center"
/>
<EF:EFColumn
ename=
"factoryCode"
cname=
"厂区编码"
enable=
"false"
width=
"150"
/>
<EF:EFColumn
ename=
"orgNo"
cname=
"生产组编码"
enable=
"false"
width=
"150"
/>
<EF:EFColumn
ename=
"prodTaskNo"
cname=
"生产任务号"
enable=
"false"
width=
"140"
align=
"center"
/>
<EF:EFColumn
ename=
"prodOrderNo"
cname=
"生产订单号"
enable=
"false"
width=
"140"
align=
"center"
/>
<EF:EFColumn
ename=
"supCode"
cname=
"供应商编码"
enable=
"false"
width=
"100"
align=
"center"
hidden=
"true"
/>
<EF:EFColumn
ename=
"supName"
cname=
"供应商名称"
enable=
"false"
width=
"100"
align=
"center"
/>
<EF:EFColumn
ename=
"purUserName"
cname=
"采购员"
enable=
"false"
width=
"100"
align=
"center"
/>
<EF:EFColumn
ename=
"inventCode"
cname=
"存货编码"
enable=
"false"
width=
"100"
align=
"center"
hidden=
"true"
/>
<EF:EFColumn
ename=
"inventName"
cname=
"存货名称"
enable=
"false"
width=
"100"
align=
"center"
/>
<EF:EFColumn
ename=
"specId"
cname=
"规格ID"
enable=
"false"
width=
"100"
align=
"center"
hidden=
"true"
/>
<EF:EFColumn
ename=
"spec"
cname=
"规格"
enable=
"false"
width=
"120"
align=
"center"
/>
<
%
--
<
EF:EFComboColumn
ename=
"poorType"
cname=
"不良品类"
width=
"100"
align=
"center"
required=
"true"
>
--%>
<
%
--
<
EF:EFCodeOption
codeName=
"hggp.hgzl.poorType"
/>
--%>
<
%
--
</
EF:EFComboColumn
>
--%>
<
%
--
<
EF:EFColumn
ename=
"problemDesc"
cname=
"质量问题描述"
width=
"140"
required=
"true"
/>
--%>
<EF:EFColumn
ename=
"receiveQty"
cname=
"收货数量"
enable=
"false"
width=
"120"
align=
"right"
format=
"{0:N0}"
/>
<EF:EFColumn
ename=
"receiveWeight"
cname=
"收货重量"
enable=
"false"
width=
"120"
align=
"right"
format=
"{0:N3}"
/>
<EF:EFColumn
ename=
"material"
cname=
"材质"
enable=
"false"
width=
"80"
align=
"center"
/>
<EF:EFColumn
ename=
"unit"
cname=
"单位"
enable=
"false"
width=
"80"
align=
"center"
/>
<EF:EFColumn
ename=
"length"
cname=
"长(M)"
enable=
"false"
width=
"80"
align=
"right"
format=
"{0:N3}"
/>
<EF:EFColumn
ename=
"width"
cname=
"宽(M)"
enable=
"false"
width=
"80"
align=
"right"
format=
"{0:N3}"
/>
<EF:EFColumn
ename=
"thick"
cname=
"厚(M)"
enable=
"false"
width=
"80"
align=
"right"
format=
"{0:N3}"
/>
<EF:EFColumn
ename=
"contractNo"
cname=
"合同号"
enable=
"false"
width=
"120"
align=
"center"
/>
<EF:EFColumn
ename=
"createdName"
cname=
"创建人"
enable=
"false"
width=
"100"
align=
"center"
/>
<EF:EFColumn
ename=
"createdTime"
cname=
"创建时间"
enable=
"false"
width=
"140"
align=
"center"
editType=
"datetime"
parseFormats=
"['yyyyMMddHHmmss']"
/>
</EF:EFGrid>
</EF:EFRegion>
</EF:EFPage>
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