Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
Y
yifu-mvp
Project
Project
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
fangxinjiang
yifu-mvp
Commits
2aeecd8e
Commit
2aeecd8e
authored
Nov 07, 2022
by
fangxinjiang
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/develop' into develop
parents
bdd2b633
7275d6e4
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
36 changed files
with
629 additions
and
185 deletions
+629
-185
FileUploadController.java
...lus/v1/yifu/archives/controller/FileUploadController.java
+29
-0
CacheConstants.java
...oud/plus/v1/yifu/common/core/constant/CacheConstants.java
+7
-0
EkpSalaryProperties.java
...fu/cloud/plus/v1/yifu/ekp/config/EkpSalaryProperties.java
+11
-2
EkpSalaryUtil.java
...a/com/yifu/cloud/plus/v1/yifu/ekp/util/EkpSalaryUtil.java
+80
-4
EkpIncomeParamManage.java
.../yifu/cloud/plus/v1/yifu/ekp/vo/EkpIncomeParamManage.java
+4
-0
EkpIncomeParamRisk.java
...om/yifu/cloud/plus/v1/yifu/ekp/vo/EkpIncomeParamRisk.java
+4
-0
EkpPushFundParam.java
.../com/yifu/cloud/plus/v1/yifu/ekp/vo/EkpPushFundParam.java
+4
-1
EkpPushSocialParam.java
...om/yifu/cloud/plus/v1/yifu/ekp/vo/EkpPushSocialParam.java
+4
-0
EkpSalaryBackParam.java
...om/yifu/cloud/plus/v1/yifu/ekp/vo/EkpSalaryBackParam.java
+28
-0
EkpSalaryParam.java
...va/com/yifu/cloud/plus/v1/yifu/ekp/vo/EkpSalaryParam.java
+5
-0
EkpSalaryStandardParam.java
...ifu/cloud/plus/v1/yifu/ekp/vo/EkpSalaryStandardParam.java
+45
-0
ekpSalaryConfig.properties
...-common-ekp/src/main/resources/ekpSalaryConfig.properties
+7
-4
TInsuranceDetailServiceImpl.java
...s/service/insurance/impl/TInsuranceDetailServiceImpl.java
+10
-122
TSalaryAtta.java
...om/yifu/cloud/plus/v1/yifu/salary/entity/TSalaryAtta.java
+3
-3
TSalaryStandard.java
...ifu/cloud/plus/v1/yifu/salary/entity/TSalaryStandard.java
+19
-0
SalaryAttaVo.java
...a/com/yifu/cloud/plus/v1/yifu/salary/vo/SalaryAttaVo.java
+23
-0
TSalaryStandardController.java
.../v1/yifu/salary/controller/TSalaryStandardController.java
+12
-0
TSalaryStandardMapper.java
...oud/plus/v1/yifu/salary/mapper/TSalaryStandardMapper.java
+7
-0
TSalaryStandardService.java
...d/plus/v1/yifu/salary/service/TSalaryStandardService.java
+9
-0
SalaryUploadServiceImpl.java
.../v1/yifu/salary/service/impl/SalaryUploadServiceImpl.java
+60
-1
TSalaryAttaServiceImpl.java
...s/v1/yifu/salary/service/impl/TSalaryAttaServiceImpl.java
+10
-0
TSalaryStandardServiceImpl.java
.../yifu/salary/service/impl/TSalaryStandardServiceImpl.java
+95
-6
TSalaryAccountMapper.xml
...ry-biz/src/main/resources/mapper/TSalaryAccountMapper.xml
+2
-1
TSalaryStandardMapper.xml
...y-biz/src/main/resources/mapper/TSalaryStandardMapper.xml
+45
-34
TIncome.java
...va/com/yifu/cloud/plus/v1/yifu/social/entity/TIncome.java
+7
-0
TIncomeDetail.java
.../yifu/cloud/plus/v1/yifu/social/entity/TIncomeDetail.java
+6
-0
TSendEkpError.java
.../yifu/cloud/plus/v1/yifu/social/entity/TSendEkpError.java
+1
-1
TIncomeSearchVo.java
...om/yifu/cloud/plus/v1/yifu/social/vo/TIncomeSearchVo.java
+6
-0
TIncomeController.java
...oud/plus/v1/yifu/social/controller/TIncomeController.java
+15
-0
TIncomeMapper.java
.../yifu/cloud/plus/v1/yifu/social/mapper/TIncomeMapper.java
+18
-0
TIncomeService.java
...ifu/cloud/plus/v1/yifu/social/service/TIncomeService.java
+9
-0
TForecastLibraryServiceImpl.java
...yifu/social/service/impl/TForecastLibraryServiceImpl.java
+4
-2
TIncomeServiceImpl.java
.../plus/v1/yifu/social/service/impl/TIncomeServiceImpl.java
+17
-0
TPaymentInfoServiceImpl.java
.../v1/yifu/social/service/impl/TPaymentInfoServiceImpl.java
+4
-2
TIncomeDetailMapper.xml
...ial-biz/src/main/resources/mapper/TIncomeDetailMapper.xml
+6
-1
TIncomeMapper.xml
...fu-social-biz/src/main/resources/mapper/TIncomeMapper.xml
+13
-1
No files found.
yifu-archives/yifu-archives-biz/src/main/java/com/yifu/cloud/plus/v1/yifu/archives/controller/FileUploadController.java
View file @
2aeecd8e
...
...
@@ -9,6 +9,7 @@ import com.yifu.cloud.plus.v1.yifu.common.core.util.OSSUtil;
import
com.yifu.cloud.plus.v1.yifu.common.core.util.R
;
import
com.yifu.cloud.plus.v1.yifu.common.core.vo.FileVo
;
import
com.yifu.cloud.plus.v1.yifu.common.log.annotation.SysLog
;
import
com.yifu.cloud.plus.v1.yifu.salary.vo.SalaryAttaVo
;
import
io.swagger.v3.oas.annotations.Operation
;
import
io.swagger.v3.oas.annotations.tags.Tag
;
import
lombok.extern.slf4j.Slf4j
;
...
...
@@ -18,6 +19,7 @@ import org.springframework.web.multipart.MultipartFile;
import
java.io.IOException
;
import
java.net.URL
;
import
java.util.ArrayList
;
import
java.util.List
;
/**
...
...
@@ -114,4 +116,31 @@ public class FileUploadController {
}
return
new
R
<>(
attas
);
}
/**
* 获取附件
* @author hgw
* @return R
*/
@Operation
(
summary
=
"获取薪资原表附件--EKP调用接口"
,
description
=
"获取薪资原表附件--EKP调用接口"
)
@SysLog
(
"获取薪资原表附件--EKP调用接口"
)
@GetMapping
(
"/getAttaListBySalaryId"
)
public
R
<
List
<
SalaryAttaVo
>>
getAttaListBySalaryId
(
@RequestParam
String
salaryId
)
{
List
<
SalaryAttaVo
>
voList
=
new
ArrayList
<>();
List
<
TAttaInfo
>
attaList
=
tAttaInfoService
.
list
(
Wrappers
.<
TAttaInfo
>
query
().
lambda
()
.
eq
(
TAttaInfo:
:
getRelationType
,
11
)
.
eq
(
TAttaInfo:
:
getDomainId
,
salaryId
));
if
(
attaList
!=
null
&&
!
attaList
.
isEmpty
())
{
SalaryAttaVo
vo
;
URL
url
;
for
(
TAttaInfo
a
:
attaList
){
url
=
ossUtil
.
getObjectUrl
(
null
,
a
.
getAttaSrc
());
vo
=
new
SalaryAttaVo
();
vo
.
setAttaName
(
a
.
getAttaName
());
vo
.
setAttaUrl
(
url
.
toString
().
replace
(
"http"
,
"https"
));
voList
.
add
(
vo
);
}
}
return
R
.
ok
(
voList
);
}
}
yifu-common/yifu-common-core/src/main/java/com/yifu/cloud/plus/v1/yifu/common/core/constant/CacheConstants.java
View file @
2aeecd8e
...
...
@@ -91,6 +91,13 @@ public interface CacheConstants {
**/
String
EVERYDAY_EMP_CONTRACT_CODE
=
"everyday_emp_contract_code"
;
/**
* @Description: 每日薪资表的 申请编码 缓存
* @Author: hgw
* @Date: 2022-11-2 09:56:32
**/
String
EVERYDAY_SALARY_FORM_CODE
=
"everyday_salary_form_code"
;
/**
* @Description: 派单申请编码
* @Author: fxj
...
...
yifu-common/yifu-common-ekp/src/main/java/com/yifu/cloud/plus/v1/yifu/ekp/config/EkpSalaryProperties.java
View file @
2aeecd8e
...
...
@@ -20,14 +20,23 @@ public class EkpSalaryProperties {
String
url
;
// 薪资报账明细-所需参数
String
fdModelId
;
// 薪资报账明细-所需参数
String
fdFlowId
;
String
docStatus
;
String
L
oginName
;
String
l
oginName
;
String
docSubject
;
// 薪资主表-所需参数(推送申请编号等)
String
standardFdModelId
;
// 薪资主表-所需参数(推送申请编号等)
String
standardFdFlowId
;
// 薪资退表-所需参数
String
backSalaryFdModelId
;
// 薪资退表-所需参数
String
backSalaryFdFlowId
;
}
yifu-common/yifu-common-ekp/src/main/java/com/yifu/cloud/plus/v1/yifu/ekp/util/EkpSalaryUtil.java
View file @
2aeecd8e
...
...
@@ -3,7 +3,9 @@ package com.yifu.cloud.plus.v1.yifu.ekp.util;
import
cn.hutool.json.JSONObject
;
import
com.yifu.cloud.plus.v1.yifu.ekp.config.EkpSalaryProperties
;
import
com.yifu.cloud.plus.v1.yifu.ekp.constant.EkpConstants
;
import
com.yifu.cloud.plus.v1.yifu.ekp.vo.EkpSalaryBackParam
;
import
com.yifu.cloud.plus.v1.yifu.ekp.vo.EkpSalaryParam
;
import
com.yifu.cloud.plus.v1.yifu.ekp.vo.EkpSalaryStandardParam
;
import
io.micrometer.core.instrument.util.StringUtils
;
import
lombok.extern.log4j.Log4j2
;
import
org.codehaus.jackson.map.ObjectMapper
;
...
...
@@ -36,16 +38,90 @@ public class EkpSalaryUtil {
JSONObject
loginName
=
new
JSONObject
();
loginName
.
append
(
"LoginName"
,
ekpProperties
.
getLoginName
());
MultiValueMap
<
String
,
Object
>
wholeForm
=
new
LinkedMultiValueMap
<>();
//wholeForm.add("docSubject", new String(docSubject.getBytes("UTF-8"),"ISO-8859-1") )
wholeForm
.
add
(
"docSubject"
,
ekpProperties
.
getDocSubject
());
wholeForm
.
add
(
"docCreator"
,
"{\"LoginName\":\"admin\"}"
);
//wholeForm.add("docCreator", loginData)
wholeForm
.
add
(
"docStatus"
,
ekpProperties
.
getDocStatus
());
wholeForm
.
add
(
"fdModelId"
,
ekpProperties
.
getFdModelId
());
wholeForm
.
add
(
"fdFlowId"
,
ekpProperties
.
getFdFlowId
());
//wholeForm.add("formValues", new String(formValues.getBytes("UTF-8"),"ISO-8859-1"))
wholeForm
.
add
(
"formValues"
,
formValues
);
//wholeForm.add("formValues", new String("{\"fd_3adfe6af71a1cc\":\"王五\", \"fd_3adfe658c6229e\":\"2019-03-26\", \"fd_3adfe6592b4158\":\"这里内容\"}".getBytes("UTF-8"),"ISO-8859-1") )
HttpHeaders
headers
=
new
HttpHeaders
();
//如果EKP对该接口启用了Basic认证,那么客户端需要加入
//addAuth(headers,"yourAccount"+":"+"yourPassword");是VO,则使用APPLICATION_JSON
headers
.
setContentType
(
MediaType
.
MULTIPART_FORM_DATA
);
//必须设置上传类型,如果入参是字符串,使用MediaType.TEXT_PLAIN;如果
HttpEntity
<
MultiValueMap
<
String
,
Object
>>
entity
=
new
HttpEntity
<>(
wholeForm
,
headers
);
//有返回值的情况 VO可以替换成具体的JavaBean
ResponseEntity
<
String
>
obj
=
yourRestTemplate
.
exchange
(
ekpProperties
.
getUrl
(),
HttpMethod
.
POST
,
entity
,
String
.
class
);
String
body
=
obj
.
getBody
();
if
(
StringUtils
.
isBlank
(
body
)){
log
.
error
(
EkpConstants
.
SEND_FAILED
);
return
EkpConstants
.
SEND_FAILED
;
}
else
{
log
.
info
(
EkpConstants
.
SEND_SUCCESS
+
body
);
return
body
;
}
}
catch
(
Exception
e
){
log
.
info
(
e
.
getMessage
());
return
e
.
getMessage
();
}
}
// 推送主表到ekp
public
String
sendStandardToEKP
(
EkpSalaryStandardParam
param
){
log
.
info
(
"推送EKP开始--薪资主表数据"
);
RestTemplate
yourRestTemplate
=
new
RestTemplate
();
try
{
//指向EKP的接口url
//把ModelingAppModelParameterAddForm转换成MultiValueMap
JSONObject
loginName
=
new
JSONObject
();
String
formValues
=
new
ObjectMapper
().
writeValueAsString
(
param
);
loginName
.
append
(
"LoginName"
,
ekpProperties
.
getLoginName
());
MultiValueMap
<
String
,
Object
>
wholeForm
=
new
LinkedMultiValueMap
<>();
wholeForm
.
add
(
"docSubject"
,
ekpProperties
.
getDocSubject
());
wholeForm
.
add
(
"docCreator"
,
"{\"LoginName\":\"admin\"}"
);
wholeForm
.
add
(
"docStatus"
,
ekpProperties
.
getDocStatus
());
wholeForm
.
add
(
"formValues"
,
formValues
);
wholeForm
.
add
(
"fdModelId"
,
ekpProperties
.
getStandardFdModelId
());
wholeForm
.
add
(
"fdFlowId"
,
ekpProperties
.
getStandardFdFlowId
());
HttpHeaders
headers
=
new
HttpHeaders
();
//如果EKP对该接口启用了Basic认证,那么客户端需要加入
//addAuth(headers,"yourAccount"+":"+"yourPassword");是VO,则使用APPLICATION_JSON
headers
.
setContentType
(
MediaType
.
MULTIPART_FORM_DATA
);
//必须设置上传类型,如果入参是字符串,使用MediaType.TEXT_PLAIN;如果
HttpEntity
<
MultiValueMap
<
String
,
Object
>>
entity
=
new
HttpEntity
<>(
wholeForm
,
headers
);
//有返回值的情况 VO可以替换成具体的JavaBean
ResponseEntity
<
String
>
obj
=
yourRestTemplate
.
exchange
(
ekpProperties
.
getUrl
(),
HttpMethod
.
POST
,
entity
,
String
.
class
);
String
body
=
obj
.
getBody
();
if
(
StringUtils
.
isBlank
(
body
)){
log
.
error
(
EkpConstants
.
SEND_FAILED
);
return
EkpConstants
.
SEND_FAILED
;
}
else
{
log
.
info
(
EkpConstants
.
SEND_SUCCESS
+
body
);
return
body
;
}
}
catch
(
Exception
e
){
log
.
info
(
e
.
getMessage
());
return
e
.
getMessage
();
}
}
// 退表到ekp
public
String
backStandardToEKP
(
EkpSalaryBackParam
param
){
log
.
info
(
"推送EKP开始--薪资退表"
);
RestTemplate
yourRestTemplate
=
new
RestTemplate
();
try
{
//指向EKP的接口url
//把ModelingAppModelParameterAddForm转换成MultiValueMap
JSONObject
loginName
=
new
JSONObject
();
loginName
.
append
(
"LoginName"
,
ekpProperties
.
getLoginName
());
MultiValueMap
<
String
,
Object
>
wholeForm
=
new
LinkedMultiValueMap
<>();
wholeForm
.
add
(
"docSubject"
,
ekpProperties
.
getDocSubject
());
wholeForm
.
add
(
"docCreator"
,
"{\"LoginName\":\"admin\"}"
);
wholeForm
.
add
(
"docStatus"
,
ekpProperties
.
getDocStatus
());
String
formValues
=
new
ObjectMapper
().
writeValueAsString
(
param
);
wholeForm
.
add
(
"formValues"
,
formValues
);
wholeForm
.
add
(
"fdModelId"
,
ekpProperties
.
getBackSalaryFdModelId
());
wholeForm
.
add
(
"fdFlowId"
,
ekpProperties
.
getBackSalaryFdFlowId
());
HttpHeaders
headers
=
new
HttpHeaders
();
//如果EKP对该接口启用了Basic认证,那么客户端需要加入
//addAuth(headers,"yourAccount"+":"+"yourPassword");是VO,则使用APPLICATION_JSON
...
...
yifu-common/yifu-common-ekp/src/main/java/com/yifu/cloud/plus/v1/yifu/ekp/vo/EkpIncomeParamManage.java
View file @
2aeecd8e
...
...
@@ -30,4 +30,8 @@ public class EkpIncomeParamManage extends EkpIncomeParam {
* 管理费ID
**/
private
String
fd_3b13dae9bd70f8
;
/**
* 薪酬申请编号
**/
private
String
fd_3b3bf13759b850
;
}
yifu-common/yifu-common-ekp/src/main/java/com/yifu/cloud/plus/v1/yifu/ekp/vo/EkpIncomeParamRisk.java
View file @
2aeecd8e
...
...
@@ -30,4 +30,8 @@ public class EkpIncomeParamRisk extends EkpIncomeParam {
* 风险金ID
**/
private
String
fd_3b13dac4c03022
;
/**
* 薪酬申请编号
**/
private
String
fd_3b3bf0e75ef6c4
;
}
yifu-common/yifu-common-ekp/src/main/java/com/yifu/cloud/plus/v1/yifu/ekp/vo/EkpPushFundParam.java
View file @
2aeecd8e
...
...
@@ -144,5 +144,8 @@ public class EkpPushFundParam implements Serializable {
* 是否为BPO业务
**/
private
String
fd_3b178ea361cabe
;
/**
* 薪酬申请编号
**/
private
String
fd_3b3cabde83d1d0
;
}
\ No newline at end of file
yifu-common/yifu-common-ekp/src/main/java/com/yifu/cloud/plus/v1/yifu/ekp/vo/EkpPushSocialParam.java
View file @
2aeecd8e
...
...
@@ -248,5 +248,9 @@ public class EkpPushSocialParam implements Serializable {
* 是否为BPO业务
**/
private
String
fd_3b178dfcf9e3e6
;
/**
* 薪酬申请编号
**/
private
String
fd_3b3cab77923f44
;
}
\ No newline at end of file
yifu-common/yifu-common-ekp/src/main/java/com/yifu/cloud/plus/v1/yifu/ekp/vo/EkpSalaryBackParam.java
0 → 100644
View file @
2aeecd8e
package
com
.
yifu
.
cloud
.
plus
.
v1
.
yifu
.
ekp
.
vo
;
import
lombok.Data
;
import
java.io.Serializable
;
/**
* @Author hgw
* @Date 2022-11-4 17:10:36
* @Description 薪资退表对应参数
* @Version 1.0
*/
@Data
public
class
EkpSalaryBackParam
implements
Serializable
{
/**
* 项目名称
**/
private
String
fd_3b3c293745e7b4
;
/**
* 项目编码
**/
private
String
fd_3b3c2935c13056
;
/**
* 薪酬申请编号
**/
private
String
fd_3b3c293811c0ee
;
}
yifu-common/yifu-common-ekp/src/main/java/com/yifu/cloud/plus/v1/yifu/ekp/vo/EkpSalaryParam.java
View file @
2aeecd8e
...
...
@@ -266,4 +266,9 @@ public class EkpSalaryParam implements Serializable {
**/
private
String
fd_3b178f0ded2114
;
/**
* 薪酬申请编号
**/
private
String
fd_3b3bef19b61c38
;
}
yifu-common/yifu-common-ekp/src/main/java/com/yifu/cloud/plus/v1/yifu/ekp/vo/EkpSalaryStandardParam.java
0 → 100644
View file @
2aeecd8e
package
com
.
yifu
.
cloud
.
plus
.
v1
.
yifu
.
ekp
.
vo
;
import
lombok.Data
;
import
java.io.Serializable
;
/**
* @Author hgw
* @Date 2022-11-3 15:20:35
* @Description 薪资主表对应参数
* @Version 1.0
*/
@Data
public
class
EkpSalaryStandardParam
implements
Serializable
{
/**
* 项目名称
**/
private
String
fd_3b3bf2c3b1a6cc
;
/**
* 项目编码
**/
private
String
fd_3b3bf2c426cfc8
;
/**
* 薪酬申请编号
**/
private
String
fd_3b3bf2c4975776
;
/**
* 工资薪酬申请id
**/
private
String
fd_3b3bf2c58d2b46
;
/**
* 薪酬原表下载地址
**/
private
String
fd_3b3cbe1d05f0d6
;
/**
* 项目金额
**/
private
String
fd_3b3d3ec95b68fc
;
/**
* 薪酬月份
**/
private
String
fd_3b3d3ec85bfeb0
;
}
yifu-common/yifu-common-ekp/src/main/resources/ekpSalaryConfig.properties
View file @
2aeecd8e
ekp.url
=
http://119.96.227.251:8080/api/sys-modeling/appModelRestService/addModel
#ekp.url=http://119.96.227.251:8080/api/sys-modeling/appModelRestService/addModel
ekp.url
=
http://36.7.147.19:28080/api/sys-modeling/appModelRestService/addModel
ekp.fdModelId
=
181d7633ff8bc797276d0d3a54e80ad6
ekp.fdFlowId
=
182b40249c1bc940d7226b941c7a4183
ekp.docStatus
=
20
ekp.
L
oginName
=
admin
ekp.
l
oginName
=
admin
ekp.docSubject
=
\u
85AA
\u
8D44
\u
8BA2
\u5355\u
660E
\u
7EC6
\u6570\u
636E
\u
63A5
\u
53E3
ekp.standardFdModelId
=
184326e4b122e5fa3068628470285b71
ekp.standardFdFlowId
=
1843272d8103adae6d332a54bce88255
ekp.backSalaryFdModelId
=
18433d5df69433ea9073400476c9cb8b
ekp.backSalaryFdFlowId
=
18433d7d9f83e800bd292984488ac770
\ No newline at end of file
yifu-insurances/yifu-insurances-biz/src/main/java/com/yifu/cloud/plus/v1/yifu/insurances/service/insurance/impl/TInsuranceDetailServiceImpl.java
View file @
2aeecd8e
This diff is collapsed.
Click to expand it.
yifu-salary/yifu-salary-api/src/main/java/com/yifu/cloud/plus/v1/yifu/salary/entity/TSalaryAtta.java
View file @
2aeecd8e
...
...
@@ -103,11 +103,11 @@ public class TSalaryAtta extends BaseEntity {
@ExcelProperty
(
"链接ID"
)
private
String
linkId
;
/**
* 类型:0工资;1工程工资;2暂停发;3自定义项暂停发;4打印记录;5核准表打印记录;6:非扣税项;8自有员工附件;9财务回执附件
* 类型:0工资;1工程工资;2暂停发;3自定义项暂停发;4打印记录;5核准表打印记录;6:非扣税项;8自有员工附件;9财务回执附件
;10换人换卡;11薪资原表;12劳务费或稿酬已有发薪记录;13薪资特殊值(3500、5000)
*/
@ExcelAttribute
(
name
=
"类型
:0工资;1工程工资;2暂停发;3自定义项暂停发;4打印记录;5核准表打印记录;6:非扣税项;8自有员工附件;9财务回执附件
"
)
@ExcelAttribute
(
name
=
"类型"
)
@HeadFontStyle
(
fontHeightInPoints
=
11
)
@ExcelProperty
(
"类型
:0工资;1工程工资;2暂停发;3自定义项暂停发;4打印记录;5核准表打印记录;6:非扣税项;8自有员工附件;9财务回执附件
"
)
@ExcelProperty
(
"类型"
)
private
Integer
linkType
;
/**
* 工程文件类型:0三方协议;1委托付款函;2劳务费
...
...
yifu-salary/yifu-salary-api/src/main/java/com/yifu/cloud/plus/v1/yifu/salary/entity/TSalaryStandard.java
View file @
2aeecd8e
...
...
@@ -389,6 +389,25 @@ public class TSalaryStandard extends BaseEntity {
@ExcelProperty
(
"订单ID"
)
private
String
orderId
;
/**
* 申请编码
*/
@Schema
(
description
=
"申请编码"
)
private
String
applyNo
;
/**
* 推送时间
*/
@ExcelAttribute
(
name
=
"退表时间"
,
isDate
=
true
)
@HeadFontStyle
(
fontHeightInPoints
=
11
)
@ExcelProperty
(
"退表时间"
)
private
Date
backTime
;
/**
* 退表EkpId
*/
@ExcelAttribute
(
name
=
"退表EkpId"
)
@HeadFontStyle
(
fontHeightInPoints
=
11
)
@ExcelProperty
(
"退表EkpId"
)
private
String
backEkpId
;
/**
* EKP的 是否BPO: 是 否
*/
...
...
yifu-salary/yifu-salary-api/src/main/java/com/yifu/cloud/plus/v1/yifu/salary/vo/SalaryAttaVo.java
0 → 100644
View file @
2aeecd8e
package
com
.
yifu
.
cloud
.
plus
.
v1
.
yifu
.
salary
.
vo
;
import
lombok.Getter
;
import
lombok.Setter
;
/**
* @author hgw2
* @description 薪资附件vo
* @date 2022/11/3
*/
@Getter
@Setter
public
class
SalaryAttaVo
{
/**
* 附件名称
*/
private
String
attaName
;
/**
* 资源地址
*/
private
String
attaUrl
;
}
yifu-salary/yifu-salary-biz/src/main/java/com/yifu/cloud/plus/v1/yifu/salary/controller/TSalaryStandardController.java
View file @
2aeecd8e
...
...
@@ -216,4 +216,16 @@ public class TSalaryStandardController {
public
R
<
String
>
doSend
(
@RequestParam
String
id
)
{
return
tSalaryStandardService
.
doSend
(
id
);
}
/**
* 退回薪资表,退回中,再调用ekp接口,通知他们删除
* @author hgw
* @return R
*/
@Operation
(
summary
=
"退回薪资表--EKP调用接口"
,
description
=
"退回薪资表--EKP调用接口"
)
@SysLog
(
"退回薪资表--EKP调用接口"
)
@GetMapping
(
"/backSalaryByApplyNo"
)
public
R
<
String
>
backSalaryByApplyNo
(
@RequestParam
String
applyNo
)
{
return
tSalaryStandardService
.
backSalaryByApplyNo
(
applyNo
);
}
}
yifu-salary/yifu-salary-biz/src/main/java/com/yifu/cloud/plus/v1/yifu/salary/mapper/TSalaryStandardMapper.java
View file @
2aeecd8e
...
...
@@ -55,4 +55,11 @@ public interface TSalaryStandardMapper extends BaseMapper<TSalaryStandard> {
int
getSalaryStandardExportCount
(
@Param
(
"searchVo"
)
TSalaryStandardSearchVo
searchVo
,
@Param
(
"idList"
)
List
<
String
>
idList
);
/**
* @Description: 获取当日薪酬最大编码
* @Author: hgw
* @Date: 2022-11-2 11:09:25
* @return: java.lang.String
**/
String
getMaxSalaryCode
();
}
yifu-salary/yifu-salary-biz/src/main/java/com/yifu/cloud/plus/v1/yifu/salary/service/TSalaryStandardService.java
View file @
2aeecd8e
...
...
@@ -95,4 +95,13 @@ public interface TSalaryStandardService extends IService<TSalaryStandard> {
* @return: void
**/
void
saveRecordLog
(
TSalaryStandard
tSalaryStandard
,
YifuUser
user
,
String
status
,
String
nodeId
);
/**
* @Description: 从EKP退回薪资表
* @Author: hgw
* @Date: 2022/11/4 16:32
* @return:
**/
R
<
String
>
backSalaryByApplyNo
(
String
applyNo
);
}
yifu-salary/yifu-salary-biz/src/main/java/com/yifu/cloud/plus/v1/yifu/salary/service/impl/SalaryUploadServiceImpl.java
View file @
2aeecd8e
package
com
.
yifu
.
cloud
.
plus
.
v1
.
yifu
.
salary
.
service
.
impl
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.toolkit.Wrappers
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.yifu.cloud.plus.v1.yifu.archives.entity.TDepartSettlementInfo
;
import
com.yifu.cloud.plus.v1.yifu.archives.entity.TSettleDomain
;
import
com.yifu.cloud.plus.v1.yifu.archives.vo.TSettleDomainSelectVo
;
import
com.yifu.cloud.plus.v1.yifu.common.core.constant.CacheConstants
;
import
com.yifu.cloud.plus.v1.yifu.common.core.constant.CommonConstants
;
import
com.yifu.cloud.plus.v1.yifu.common.core.constant.SecurityConstants
;
import
com.yifu.cloud.plus.v1.yifu.common.core.util.*
;
...
...
@@ -23,6 +23,9 @@ import com.yifu.cloud.plus.v1.yifu.salary.vo.*;
import
lombok.AllArgsConstructor
;
import
lombok.extern.log4j.Log4j2
;
import
org.springframework.boot.context.properties.EnableConfigurationProperties
;
import
org.springframework.cache.Cache
;
import
org.springframework.cache.CacheManager
;
import
org.springframework.cache.support.SimpleValueWrapper
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
...
...
@@ -78,6 +81,9 @@ public class SalaryUploadServiceImpl extends ServiceImpl<TSalaryStandardMapper,
private
final
TApprovalRecordService
auditLogService
;
// 缓存信息
private
final
CacheManager
cacheManager
;
/**
* @param jsonString 客户原表数据
* repeatFlag 默认 0:不允许重复导入已存在系统内的数据;1:允许重复导入
...
...
@@ -566,21 +572,28 @@ public class SalaryUploadServiceImpl extends ServiceImpl<TSalaryStandardMapper,
modelPersonSocialFlag
=
false
;
personalDebt
=
personalDebt
.
add
(
sai
.
getSalaryMoney
());
sai
.
setIsTax
(
CommonConstants
.
ONE_INT
);
a
.
setPersonSocial
(
sai
.
getSalaryMoney
());
}
//代扣个人公积金
if
(
SalaryConstants
.
WITHHOLIDING_PERSON_FUND
.
equals
(
sai
.
getJavaFiedName
()))
{
modelPersonFundFlag
=
false
;
personalDebt
=
personalDebt
.
add
(
sai
.
getSalaryMoney
());
sai
.
setIsTax
(
CommonConstants
.
ONE_INT
);
a
.
setPersonFund
(
sai
.
getSalaryMoney
());
}
//个人代扣:李靖2020-6-16 18:16:09提的需求:
if
(
SalaryConstants
.
PDEDUCTION_JAVA
.
equals
(
sai
.
getJavaFiedName
()))
{
personalDebt
=
personalDebt
.
add
(
sai
.
getSalaryMoney
());
}
//代扣单位社保
if
(
SalaryConstants
.
WITHHOLIDING_UNIT_SOCIAL
.
equals
(
sai
.
getJavaFiedName
()))
{
modelUnitSocialFlag
=
false
;
a
.
setUnitSocial
(
sai
.
getSalaryMoney
());
}
//代扣单位公积金
if
(
SalaryConstants
.
WITHHOLIDING_UNIT_FUND
.
equals
(
sai
.
getJavaFiedName
()))
{
modelUnitFundFlag
=
false
;
a
.
setUnitFund
(
sai
.
getSalaryMoney
());
}
saiList
.
add
(
sai
);
//工资应发
...
...
@@ -805,6 +818,9 @@ public class SalaryUploadServiceImpl extends ServiceImpl<TSalaryStandardMapper,
HttpDaprUtil
.
invokeMethodPost
(
socialProperties
.
getAppUrl
(),
socialProperties
.
getAppId
()
,
"/tforecastlibrary/inner/updateForecastFundStatusToSettle"
,
forecastFundList
,
TDepartSettlementInfo
.
class
,
SecurityConstants
.
FROM_IN
);
}
if
(
Common
.
isEmpty
(
salary
.
getApplyNo
()))
{
salary
.
setApplyNo
(
this
.
getCode
());
}
//保存工资表
tSalaryStandardService
.
save
(
salary
);
TApprovalRecord
tApprovalRecord
=
new
TApprovalRecord
();
...
...
@@ -1584,6 +1600,9 @@ public class SalaryUploadServiceImpl extends ServiceImpl<TSalaryStandardMapper,
salary
.
setIsRepeat
(
CommonConstants
.
ONE_INT
);
}
}
if
(
Common
.
isEmpty
(
salary
.
getApplyNo
()))
{
salary
.
setApplyNo
(
this
.
getCode
());
}
//保存工资表
tSalaryStandardService
.
save
(
salary
);
TApprovalRecord
tApprovalRecord
=
new
TApprovalRecord
();
...
...
@@ -1848,6 +1867,9 @@ public class SalaryUploadServiceImpl extends ServiceImpl<TSalaryStandardMapper,
salary
.
setIsRepeat
(
CommonConstants
.
ONE_INT
);
}
}
if
(
Common
.
isEmpty
(
salary
.
getApplyNo
()))
{
salary
.
setApplyNo
(
this
.
getCode
());
}
//保存工资表
tSalaryStandardService
.
save
(
salary
);
TApprovalRecord
tApprovalRecord
=
new
TApprovalRecord
();
...
...
@@ -1931,5 +1953,42 @@ public class SalaryUploadServiceImpl extends ServiceImpl<TSalaryStandardMapper,
nowTax
=
nowTax
.
setScale
(
SalaryConstants
.
PLACES
,
BigDecimal
.
ROUND_HALF_UP
);
return
nowTax
;
}
public
synchronized
String
getCode
()
{
String
nowDay
=
DateUtil
.
getThisDay
();
int
nowNums
;
String
empCode
=
null
;
Cache
cache
=
cacheManager
.
getCache
(
CacheConstants
.
EVERYDAY_SALARY_FORM_CODE
);
if
(
cache
!=
null
)
{
try
{
Object
nowNumObj
=
cache
.
get
(
nowDay
);
if
(
Common
.
isNotNull
(
nowNumObj
))
{
SimpleValueWrapper
value
=
(
SimpleValueWrapper
)
nowNumObj
;
nowNums
=
(
Integer
)
value
.
get
()
+
1
;
}
else
{
empCode
=
baseMapper
.
getMaxSalaryCode
();
nowNums
=
Integer
.
parseInt
(
empCode
)
+
1
;
}
}
catch
(
NumberFormatException
e
)
{
log
.
error
(
"获取人员合同当日最大编码时出错:"
+
empCode
);
nowNums
=
1
;
}
cache
.
put
(
nowDay
,
nowNums
);
}
else
{
empCode
=
baseMapper
.
getMaxSalaryCode
();
nowNums
=
Integer
.
parseInt
(
empCode
)
+
1
;
}
return
"XC"
+
nowDay
+
this
.
getFourNum
(
String
.
valueOf
(
nowNums
));
}
private
String
getFourNum
(
String
nowNums
)
{
if
(
nowNums
.
length
()
>=
4
)
{
return
nowNums
.
substring
(
0
,
4
);
}
String
[]
zeroArr
=
{
"0"
,
"00"
,
"000"
};
int
num
=
3
-
nowNums
.
length
();
return
zeroArr
[
num
]
+
nowNums
;
}
}
yifu-salary/yifu-salary-biz/src/main/java/com/yifu/cloud/plus/v1/yifu/salary/service/impl/TSalaryAttaServiceImpl.java
View file @
2aeecd8e
...
...
@@ -26,20 +26,27 @@ import com.yifu.cloud.plus.v1.yifu.common.core.util.OSSUtil;
import
com.yifu.cloud.plus.v1.yifu.common.core.util.R
;
import
com.yifu.cloud.plus.v1.yifu.common.core.vo.FileVo
;
import
com.yifu.cloud.plus.v1.yifu.common.core.vo.YifuUser
;
import
com.yifu.cloud.plus.v1.yifu.common.log.annotation.SysLog
;
import
com.yifu.cloud.plus.v1.yifu.common.security.util.SecurityUtils
;
import
com.yifu.cloud.plus.v1.yifu.salary.entity.TSalaryAtta
;
import
com.yifu.cloud.plus.v1.yifu.salary.mapper.TSalaryAttaMapper
;
import
com.yifu.cloud.plus.v1.yifu.salary.service.TSalaryAttaService
;
import
com.yifu.cloud.plus.v1.yifu.salary.service.TSalaryStandardService
;
import
io.swagger.v3.oas.annotations.Operation
;
import
lombok.AllArgsConstructor
;
import
lombok.extern.log4j.Log4j2
;
import
org.apache.ibatis.annotations.Param
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestParam
;
import
org.springframework.web.multipart.MultipartFile
;
import
java.io.IOException
;
import
java.net.URL
;
import
java.time.LocalDateTime
;
import
java.util.ArrayList
;
import
java.util.List
;
/**
...
...
@@ -52,8 +59,11 @@ import java.util.List;
@Service
@AllArgsConstructor
public
class
TSalaryAttaServiceImpl
extends
ServiceImpl
<
TSalaryAttaMapper
,
TSalaryAtta
>
implements
TSalaryAttaService
{
private
final
OSSUtil
ossUtil
;
private
final
TSalaryStandardService
tSalaryStandardService
;
/**
* 薪资结算附件表简单分页查询
*
...
...
yifu-salary/yifu-salary-biz/src/main/java/com/yifu/cloud/plus/v1/yifu/salary/service/impl/TSalaryStandardServiceImpl.java
View file @
2aeecd8e
...
...
@@ -21,6 +21,7 @@ import com.alibaba.excel.ExcelWriter;
import
com.alibaba.excel.write.metadata.WriteSheet
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.baomidou.mybatisplus.core.toolkit.Wrappers
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.yifu.cloud.plus.v1.yifu.archives.entity.TDepartSettlementInfo
;
...
...
@@ -36,10 +37,7 @@ import com.yifu.cloud.plus.v1.yifu.common.security.util.SecurityUtils;
import
com.yifu.cloud.plus.v1.yifu.ekp.util.EkpFundUtil
;
import
com.yifu.cloud.plus.v1.yifu.ekp.util.EkpSalaryUtil
;
import
com.yifu.cloud.plus.v1.yifu.ekp.util.EkpSocialUtil
;
import
com.yifu.cloud.plus.v1.yifu.ekp.vo.EkpPushFundParam
;
import
com.yifu.cloud.plus.v1.yifu.ekp.vo.EkpPushSocialParam
;
import
com.yifu.cloud.plus.v1.yifu.ekp.vo.EkpSalaryParam
;
import
com.yifu.cloud.plus.v1.yifu.ekp.vo.EkpSalaryParamVo
;
import
com.yifu.cloud.plus.v1.yifu.ekp.vo.*
;
import
com.yifu.cloud.plus.v1.yifu.salary.entity.MSalaryEstimate
;
import
com.yifu.cloud.plus.v1.yifu.salary.entity.TApprovalRecord
;
import
com.yifu.cloud.plus.v1.yifu.salary.entity.TSalaryAccount
;
...
...
@@ -52,6 +50,7 @@ import com.yifu.cloud.plus.v1.yifu.salary.service.TSalaryStandardService;
import
com.yifu.cloud.plus.v1.yifu.salary.util.SalaryConstants
;
import
com.yifu.cloud.plus.v1.yifu.salary.vo.TSalaryStandardExportVo
;
import
com.yifu.cloud.plus.v1.yifu.salary.vo.TSalaryStandardSearchVo
;
import
com.yifu.cloud.plus.v1.yifu.social.entity.TIncome
;
import
com.yifu.cloud.plus.v1.yifu.social.entity.TIncomeDetail
;
import
com.yifu.cloud.plus.v1.yifu.social.entity.TSendEkpError
;
import
com.yifu.cloud.plus.v1.yifu.social.vo.TIncomeDetailReturnVo
;
...
...
@@ -310,6 +309,7 @@ public class TSalaryStandardServiceImpl extends ServiceImpl<TSalaryStandardMappe
**/
private
R
<
String
>
getIncomeDetailMap
(
TSalaryStandard
tSalaryStandard
,
TSettleDomainSelectVo
dept
,
List
<
String
>
idCardList
,
Map
<
String
,
Integer
>
detailMap
)
{
TIncomeDetail
detail
=
new
TIncomeDetail
();
detail
.
setApplyNo
(
tSalaryStandard
.
getApplyNo
());
detail
.
setPayMonth
(
tSalaryStandard
.
getSalaryMonth
());
detail
.
setIdCardList
(
idCardList
);
detail
.
setDeptId
(
dept
.
getId
());
...
...
@@ -392,6 +392,7 @@ public class TSalaryStandardServiceImpl extends ServiceImpl<TSalaryStandardMappe
detail
.
setRedData
(
CommonConstants
.
ZERO_STRING
);
detail
.
setSourceId
(
account
.
getId
());
detail
.
setSourceType
(
CommonConstants
.
FOUR_STRING
);
detail
.
setApplyNo
(
tSalaryStandard
.
getApplyNo
());
R
<
Boolean
>
saveR
=
HttpDaprUtil
.
invokeMethodPost
(
socialProperties
.
getAppUrl
(),
socialProperties
.
getAppId
()
,
"/tincome/inner/saveDetail"
,
detail
,
Boolean
.
class
,
SecurityConstants
.
FROM_IN
);
if
(
saveR
==
null
||
saveR
.
getCode
()
==
CommonConstants
.
ONE_INT
||
Boolean
.
FALSE
.
equals
(
saveR
.
getData
()))
{
...
...
@@ -583,9 +584,37 @@ public class TSalaryStandardServiceImpl extends ServiceImpl<TSalaryStandardMappe
}
salaryAccountService
.
updateBatchById
(
accountList
);
if
(
sendStatus
)
{
EkpSalaryStandardParam
standardParam
=
new
EkpSalaryStandardParam
();
standardParam
.
setFd_3b3bf2c3b1a6cc
(
s
.
getDeptName
());
standardParam
.
setFd_3b3bf2c426cfc8
(
s
.
getDeptNo
());
standardParam
.
setFd_3b3bf2c4975776
(
s
.
getApplyNo
()
==
null
?
""
:
s
.
getApplyNo
());
standardParam
.
setFd_3b3bf2c58d2b46
(
s
.
getId
());
standardParam
.
setFd_3b3cbe1d05f0d6
(
""
);
standardParam
.
setFd_3b3d3ec95b68fc
(
String
.
valueOf
(
s
.
getSettlementAmount
()));
standardParam
.
setFd_3b3d3ec85bfeb0
(
s
.
getSalaryMonth
().
substring
(
0
,
4
)
+
CommonConstants
.
CENTER_SPLIT_LINE_STRING
+
s
.
getSalaryMonth
().
substring
(
4
,
6
));
// 推送主表信息
sendBack
=
ekpSalaryUtil
.
sendStandardToEKP
(
standardParam
);
if
(
Common
.
isEmpty
(
sendBack
)
||
sendBack
.
length
()
!=
32
)
{
sendBack
=
ekpSalaryUtil
.
sendStandardToEKP
(
standardParam
);
}
s
.
setSendTime
(
new
Date
());
s
.
setSendMonth
(
DateUtil
.
addMonth
(
0
));
s
.
setStatus
(
SalaryConstants
.
STATUS
[
3
]);
s
.
setSendMonth
(
nowMonth
);
if
(
Common
.
isNotNull
(
sendBack
)
&&
sendBack
.
length
()
==
32
)
{
s
.
setStatus
(
SalaryConstants
.
STATUS
[
3
]);
}
else
{
s
.
setStatus
(
SalaryConstants
.
STATUS
[
10
]);
TSendEkpError
error
=
new
TSendEkpError
();
error
.
setCreateTime
(
new
Date
());
error
.
setCreateDay
(
DateUtil
.
getThisDay
());
error
.
setType
(
CommonConstants
.
SIX_STRING
);
error
.
setCreateUserName
(
s
.
getCreateName
());
error
.
setLinkId
(
s
.
getId
());
error
.
setTitle
(
sendBack
);
error
.
setNums
(
CommonConstants
.
ONE_INT
);
HttpDaprUtil
.
invokeMethodPost
(
socialProperties
.
getAppUrl
(),
socialProperties
.
getAppId
()
,
"/tsendekperror/inner/saveError"
,
error
,
Boolean
.
class
,
SecurityConstants
.
FROM_IN
);
}
this
.
updateById
(
s
);
// 添加流程进展明细
this
.
saveRecordLog
(
s
,
user
,
CommonConstants
.
ZERO_STRING
,
"发送数字化平台-成功"
);
...
...
@@ -747,6 +776,8 @@ public class TSalaryStandardServiceImpl extends ServiceImpl<TSalaryStandardMappe
socialParam
.
setFd_3b0afbe1f94a08
(
account
.
getFd_3b10af838eab5c
());
// 是否为BPO业务
socialParam
.
setFd_3b178dfcf9e3e6
(
s
.
getBpoFlag
());
// 薪酬申请编号
socialParam
.
setFd_3b3cab77923f44
(
s
.
getApplyNo
()==
null
?
""
:
s
.
getApplyNo
());
String
sendBack
=
ekpSocialUtil
.
sendToEKP
(
socialParam
);
if
(
Common
.
isEmpty
(
sendBack
)
||
sendBack
.
length
()
!=
32
)
{
sendBack
=
ekpSocialUtil
.
sendToEKP
(
socialParam
);
...
...
@@ -833,6 +864,8 @@ public class TSalaryStandardServiceImpl extends ServiceImpl<TSalaryStandardMappe
socialParam
.
setFd_3b0afbaf10df2c
(
account
.
getFd_3b10af838eab5c
());
// 是否为BPO业务
socialParam
.
setFd_3b178ea361cabe
(
s
.
getBpoFlag
());
// 薪酬申请编号
socialParam
.
setFd_3b3cabde83d1d0
(
s
.
getApplyNo
()==
null
?
""
:
s
.
getApplyNo
());
String
sendBack
=
ekpFundUtil
.
sendToEKP
(
socialParam
);
if
(
Common
.
isEmpty
(
sendBack
)
||
sendBack
.
length
()
!=
32
)
{
sendBack
=
ekpFundUtil
.
sendToEKP
(
socialParam
);
...
...
@@ -850,4 +883,60 @@ public class TSalaryStandardServiceImpl extends ServiceImpl<TSalaryStandardMappe
,
"/tsendekperror/inner/saveError"
,
error
,
Boolean
.
class
,
SecurityConstants
.
FROM_IN
);
}
}
/**
* @param applyNo
* @Description: 从EKP退回薪资表
* @Author: hgw
* @Date: 2022/11/4 17:26
* @return: com.yifu.cloud.plus.v1.yifu.common.core.util.R<java.lang.Boolean>
**/
public
R
<
String
>
backSalaryByApplyNo
(
String
applyNo
)
{
List
<
TSalaryStandard
>
salaryList
=
this
.
list
(
Wrappers
.<
TSalaryStandard
>
query
().
lambda
().
eq
(
TSalaryStandard:
:
getApplyNo
,
applyNo
));
if
(
salaryList
!=
null
&&
!
salaryList
.
isEmpty
())
{
TSalaryStandard
ss
=
salaryList
.
get
(
0
);
if
(
ss
.
getStatus
()
!=
SalaryConstants
.
STATUS
[
6
])
{
// 通知EKP
EkpSalaryBackParam
param
=
new
EkpSalaryBackParam
();
param
.
setFd_3b3c293745e7b4
(
ss
.
getDeptName
());
param
.
setFd_3b3c2935c13056
(
ss
.
getDeptNo
());
param
.
setFd_3b3c293811c0ee
(
ss
.
getApplyNo
());
String
sendBack
=
ekpSalaryUtil
.
backStandardToEKP
(
param
);
if
(
Common
.
isEmpty
(
sendBack
)
||
sendBack
.
length
()
!=
32
)
{
sendBack
=
ekpSalaryUtil
.
backStandardToEKP
(
param
);
}
if
(
Common
.
isNotNull
(
sendBack
)
&&
sendBack
.
length
()
==
32
)
{
// 更新薪资为确认不通过
ss
.
setStatus
(
SalaryConstants
.
STATUS
[
6
]);
ss
.
setBackTime
(
new
Date
());
ss
.
setBackEkpId
(
sendBack
);
this
.
updateById
(
ss
);
TIncome
income
=
new
TIncome
();
income
.
setApplyNo
(
applyNo
);
// 删除收入对应编号的明细
HttpDaprUtil
.
invokeMethodPost
(
socialProperties
.
getAppUrl
(),
socialProperties
.
getAppId
()
,
"/tincome/inner/deleteIncomeAndDetailByApplyNo"
,
income
,
Object
.
class
,
SecurityConstants
.
FROM_IN
);
return
R
.
ok
();
}
else
{
TSendEkpError
error
=
new
TSendEkpError
();
error
.
setCreateTime
(
new
Date
());
error
.
setCreateDay
(
DateUtil
.
getThisDay
());
error
.
setType
(
CommonConstants
.
SEVEN_STRING
);
error
.
setCreateUserName
(
ss
.
getCreateName
());
error
.
setLinkId
(
ss
.
getId
());
error
.
setTitle
(
sendBack
);
error
.
setNums
(
CommonConstants
.
ONE_INT
);
HttpDaprUtil
.
invokeMethodPost
(
socialProperties
.
getAppUrl
(),
socialProperties
.
getAppId
()
,
"/tsendekperror/inner/saveError"
,
error
,
Boolean
.
class
,
SecurityConstants
.
FROM_IN
);
return
R
.
failed
(
"连续两次请求EKP,均未接收到EKP删除成功的返回信息,不予退回"
);
}
}
else
{
return
R
.
failed
(
"工资表已退回,请不要重复操作"
);
}
}
return
R
.
failed
(
"未找到工资表"
);
}
}
yifu-salary/yifu-salary-biz/src/main/resources/mapper/TSalaryAccountMapper.xml
View file @
2aeecd8e
...
...
@@ -553,7 +553,7 @@
,ifnull(ifnull(withholidingPersonSocial.SALARY_MONEY,personalSocial.SALARY_MONEY),'') fd_3adfee1e88723e
,ifnull(ifnull(withholidingUnitFund.SALARY_MONEY,unitFund.SALARY_MONEY),'') fd_3adfee1ee24680
,ifnull(ifnull(withholidingPersonFund.SALARY_MONEY,personalFund.SALARY_MONEY),'') fd_3adfee1f32fa24
,ifnull(a.SALARY_TAX,'0') fd_3adfee1f901c46
,ifnull(a.SALARY_TAX,'0')
+ ifnull(a.SALARY_TAX_UNIT,'0') + ifnull(a.ANNUAL_BONUS_TAX,'0')
fd_3adfee1f901c46
,'' fd_3adfee1ff1ca6a
,'' fd_3adfee203f86b2
,ifnull(a.ACTUAL_SALARY,'0') fd_3adfee20fe5ba4
...
...
@@ -598,6 +598,7 @@
,concat(left(ifnull(a.DEDU_SOCIAL_MONTH,'1970'),4),'-',right(ifnull(a.DEDU_SOCIAL_MONTH,'02'),2)) DEDU_SOCIAL_MONTH
,concat(left(ifnull(a.DEDU_PROVIDENT_MONTH,'1970'),4),'-',right(ifnull(a.DEDU_PROVIDENT_MONTH,'02'),2)) DEDU_PROVIDENT_MONTH
,ifnull(s.BPO_FLAG,'') fd_3b178f0ded2114
,ifnull(s.APPLY_NO,'') fd_3b3bef19b61c38
from t_salary_account a
LEFT JOIN t_salary_standard s on a.SALARY_FORM_ID=s.ID
left join t_salary_account_item withholidingPersonSocial on withholidingPersonSocial.SALARY_ACCOUNT_ID = a.id and withholidingPersonSocial.JAVA_FIED_NAME='withholidingPersonSocial'
...
...
yifu-salary/yifu-salary-biz/src/main/resources/mapper/TSalaryStandardMapper.xml
View file @
2aeecd8e
...
...
@@ -74,6 +74,7 @@
<result
property=
"repeatRemark"
column=
"REPEAT_REMARK"
/>
<result
property=
"orderId"
column=
"ORDER_ID"
/>
<result
property=
"bpoFlag"
column=
"BPO_FLAG"
/>
<result
property=
"applyNo"
column=
"APPLY_NO"
/>
</resultMap>
<sql
id=
"Base_Column_List"
>
a.ID,
...
...
@@ -126,7 +127,8 @@
a.REPEAT_REMARK,
a.INVOICE_TITLE,
a.ORDER_ID,
a.BPO_FLAG
a.BPO_FLAG,
a.APPLY_NO
</sql>
<sql
id=
"tSalaryStandard_where"
>
<if
test=
"tSalaryStandard != null"
>
...
...
@@ -232,39 +234,42 @@
<if
test=
"tSalaryStandard.repeatNums != null"
>
AND a.REPEAT_NUMS = #{tSalaryStandard.repeatNums}
</if>
<if
test=
"tSalaryStandard.ownRemark != null and tSalaryStandard.ownRemark.trim() != ''"
>
AND a.OWN_REMARK = #{tSalaryStandard.ownRemark}
</if>
<if
test=
"tSalaryStandard.submitRemark != null and tSalaryStandard.submitRemark.trim() != ''"
>
AND a.SUBMIT_REMARK = #{tSalaryStandard.submitRemark}
</if>
<if
test=
"tSalaryStandard.createBy != null and tSalaryStandard.createBy.trim() != ''"
>
AND a.CREATE_BY = #{tSalaryStandard.createBy}
</if>
<if
test=
"tSalaryStandard.createName != null and tSalaryStandard.createName.trim() != ''"
>
AND a.CREATE_NAME = #{tSalaryStandard.createName}
</if>
<if
test=
"tSalaryStandard.createTime != null"
>
AND a.CREATE_TIME = #{tSalaryStandard.createTime}
</if>
<if
test=
"tSalaryStandard.updateBy != null and tSalaryStandard.updateBy.trim() != ''"
>
AND a.UPDATE_BY = #{tSalaryStandard.updateBy}
</if>
<if
test=
"tSalaryStandard.updateTime != null"
>
AND a.UPDATE_TIME = #{tSalaryStandard.updateTime}
</if>
<if
test=
"tSalaryStandard.unitId != null and tSalaryStandard.unitId.trim() != ''"
>
AND a.UNIT_ID = #{tSalaryStandard.unitId}
</if>
<if
test=
"tSalaryStandard.unitName != null and tSalaryStandard.unitName.trim() != ''"
>
AND a.UNIT_NAME = #{tSalaryStandard.unitName}
</if>
<if
test=
"tSalaryStandard.unitNo != null and tSalaryStandard.unitNo.trim() != ''"
>
AND a.UNIT_NO = #{tSalaryStandard.unitNo}
</if>
<if
test=
"tSalaryStandard.sendMonth != null and tSalaryStandard.sendMonth.trim() != ''"
>
AND a.SEND_MONTH = #{tSalaryStandard.sendMonth}
</if>
<if
test=
"tSalaryStandard.ownRemark != null and tSalaryStandard.ownRemark.trim() != ''"
>
AND a.OWN_REMARK = #{tSalaryStandard.ownRemark}
</if>
<if
test=
"tSalaryStandard.submitRemark != null and tSalaryStandard.submitRemark.trim() != ''"
>
AND a.SUBMIT_REMARK = #{tSalaryStandard.submitRemark}
</if>
<if
test=
"tSalaryStandard.createBy != null and tSalaryStandard.createBy.trim() != ''"
>
AND a.CREATE_BY = #{tSalaryStandard.createBy}
</if>
<if
test=
"tSalaryStandard.createName != null and tSalaryStandard.createName.trim() != ''"
>
AND a.CREATE_NAME = #{tSalaryStandard.createName}
</if>
<if
test=
"tSalaryStandard.createTime != null"
>
AND a.CREATE_TIME = #{tSalaryStandard.createTime}
</if>
<if
test=
"tSalaryStandard.updateBy != null and tSalaryStandard.updateBy.trim() != ''"
>
AND a.UPDATE_BY = #{tSalaryStandard.updateBy}
</if>
<if
test=
"tSalaryStandard.updateTime != null"
>
AND a.UPDATE_TIME = #{tSalaryStandard.updateTime}
</if>
<if
test=
"tSalaryStandard.unitId != null and tSalaryStandard.unitId.trim() != ''"
>
AND a.UNIT_ID = #{tSalaryStandard.unitId}
</if>
<if
test=
"tSalaryStandard.unitName != null and tSalaryStandard.unitName.trim() != ''"
>
AND a.UNIT_NAME = #{tSalaryStandard.unitName}
</if>
<if
test=
"tSalaryStandard.unitNo != null and tSalaryStandard.unitNo.trim() != ''"
>
AND a.UNIT_NO = #{tSalaryStandard.unitNo}
</if>
<if
test=
"tSalaryStandard.sendMonth != null and tSalaryStandard.sendMonth.trim() != ''"
>
AND a.SEND_MONTH = #{tSalaryStandard.sendMonth}
</if>
<if
test=
"tSalaryStandard.applyNo != null and tSalaryStandard.applyNo.trim() != ''"
>
AND a.APPLY_NO like concat('%',#{tSalaryStandard.applyNo},'%')
</if>
</if>
</sql>
<!--tSalaryStandard简单分页查询-->
...
...
@@ -461,4 +466,10 @@
</if>
</if>
</sql>
<!-- 获取当日最大的编码 -->
<select
id=
"getMaxSalaryCode"
resultType=
"java.lang.String"
>
SELECT ifnull(max(right(e.APPLY_NO,4)),0) APPLY_NO FROM t_salary_standard e where e.DELETE_FLAG = 0 and e.CREATE_TIME>DATE_FORMAT(now(),'%Y-%m-%d')
</select>
</mapper>
yifu-social/yifu-social-api/src/main/java/com/yifu/cloud/plus/v1/yifu/social/entity/TIncome.java
View file @
2aeecd8e
...
...
@@ -222,6 +222,13 @@ public class TIncome{
@HeadFontStyle
(
fontHeightInPoints
=
11
)
@ExcelProperty
(
"发送返回的EKPID"
)
private
String
ekpId
;
/**
* 薪资申请编码
*/
@Schema
(
description
=
"薪资申请编码"
)
private
String
applyNo
;
/**
* 菜单ID 获取查询权限使用
*/
...
...
yifu-social/yifu-social-api/src/main/java/com/yifu/cloud/plus/v1/yifu/social/entity/TIncomeDetail.java
View file @
2aeecd8e
...
...
@@ -218,6 +218,12 @@ public class TIncomeDetail {
@ExcelProperty
(
"管理费风险金的结算方式:1预估2实缴"
)
private
String
mrSettleType
;
/**
* 薪资申请编码
*/
@Schema
(
description
=
"薪资申请编码"
)
private
String
applyNo
;
// 查询时框定范围使用
@TableField
(
exist
=
false
)
private
List
<
String
>
idCardList
;
...
...
yifu-social/yifu-social-api/src/main/java/com/yifu/cloud/plus/v1/yifu/social/entity/TSendEkpError.java
View file @
2aeecd8e
...
...
@@ -52,7 +52,7 @@ public class TSendEkpError {
@ExcelAttribute
(
name
=
"类型"
)
@HeadFontStyle
(
fontHeightInPoints
=
11
)
@ExcelProperty
(
"类型(0:薪资代扣推送的社保公积金1薪资明细2预估明细3缴费明细4实时收入5定时收入)"
)
@ExcelProperty
(
"类型(0:薪资代扣推送的社保公积金1薪资明细2预估明细3缴费明细4实时收入5定时收入
6薪资主表7薪资退表
)"
)
private
String
type
;
@ExcelAttribute
(
name
=
"创建日"
)
...
...
yifu-social/yifu-social-api/src/main/java/com/yifu/cloud/plus/v1/yifu/social/vo/TIncomeSearchVo.java
View file @
2aeecd8e
...
...
@@ -173,4 +173,10 @@ public class TIncomeSearchVo extends BaseEntity implements Serializable {
@Schema
(
description
=
"发送返回的EKPID"
)
private
String
ekpId
;
/**
* 薪资申请编码
*/
@Schema
(
description
=
"薪资申请编码"
)
private
String
applyNo
;
}
yifu-social/yifu-social-biz/src/main/java/com/yifu/cloud/plus/v1/yifu/social/controller/TIncomeController.java
View file @
2aeecd8e
...
...
@@ -19,6 +19,7 @@ package com.yifu.cloud.plus.v1.yifu.social.controller;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.yifu.cloud.plus.v1.yifu.common.core.util.Common
;
import
com.yifu.cloud.plus.v1.yifu.common.core.util.ErrorMessage
;
import
com.yifu.cloud.plus.v1.yifu.common.core.util.R
;
import
com.yifu.cloud.plus.v1.yifu.common.core.vo.YifuUser
;
...
...
@@ -181,4 +182,18 @@ public class TIncomeController {
public
void
pushDetail
()
{
tIncomeService
.
pushDetail
();
}
/**
* @Description: 查询list(建议传参项目id、月份,一次性获取大批量,自行组装Map来使用)
* @Author: hgw
* @Date: 2022-9-2 15:56:28
**/
@Inner
@PostMapping
(
"/inner/deleteIncomeAndDetailByApplyNo"
)
public
R
<
String
>
deleteIncomeAndDetailByApplyNo
(
@RequestBody
TIncome
income
)
{
if
(
income
!=
null
&&
Common
.
isNotNull
(
income
.
getApplyNo
()))
{
tIncomeService
.
deleteIncomeAndDetailByApplyNo
(
income
.
getApplyNo
());
}
return
R
.
ok
();
}
}
yifu-social/yifu-social-biz/src/main/java/com/yifu/cloud/plus/v1/yifu/social/mapper/TIncomeMapper.java
View file @
2aeecd8e
...
...
@@ -53,4 +53,22 @@ public interface TIncomeMapper extends BaseMapper<TIncome> {
void
updateIncomeById
(
@Param
(
"list"
)
List
<
TIncome
>
list
);
/**
* @param applyNo
* @Description: 删除薪资对应的收入明细
* @Author: hgw
* @Date: 2022/11/4 17:04
* @return: int
**/
int
deleteIncomeByApplyNo
(
@Param
(
"applyNo"
)
String
applyNo
);
/**
* @param applyNo
* @Description: 删除薪资对应的收入明细de明细
* @Author: hgw
* @Date: 2022/11/4 17:04
* @return: int
**/
int
deleteIncomeDetailByApplyNo
(
@Param
(
"applyNo"
)
String
applyNo
);
}
yifu-social/yifu-social-biz/src/main/java/com/yifu/cloud/plus/v1/yifu/social/service/TIncomeService.java
View file @
2aeecd8e
...
...
@@ -67,4 +67,13 @@ public interface TIncomeService extends IService<TIncome> {
void
pushDetail
();
/**
* @param applyNo
* @Description: 删除薪资关联的收入明细
* @Author: hgw
* @Date: 2022/11/4 17:04
* @return: boolean
**/
void
deleteIncomeAndDetailByApplyNo
(
String
applyNo
);
}
yifu-social/yifu-social-biz/src/main/java/com/yifu/cloud/plus/v1/yifu/social/service/impl/TForecastLibraryServiceImpl.java
View file @
2aeecd8e
...
...
@@ -2603,7 +2603,8 @@ public class TForecastLibraryServiceImpl extends ServiceImpl<TForecastLibraryMap
socialParam
.
setFd_3b01953871b8be
(
CommonConstants
.
EMPTY_STRING
);
//社保id
socialParam
.
setFd_3b0afbe1f94a08
(
library
.
getId
());
// 薪酬申请编号
socialParam
.
setFd_3b3cab77923f44
(
CommonConstants
.
EMPTY_STRING
);
String
body
=
ekpSocialUtil
.
sendToEKP
(
socialParam
);
if
(
Common
.
isNotNull
(
body
)
&&
body
.
length
()
==
32
)
{
//更新推送状态为已推送的列表
...
...
@@ -2785,7 +2786,8 @@ public class TForecastLibraryServiceImpl extends ServiceImpl<TForecastLibraryMap
fundParam
.
setFd_3b019a2e9bfdd6
(
CommonConstants
.
EMPTY_STRING
);
//公积金id
fundParam
.
setFd_3b0afbaf10df2c
(
library
.
getId
());
// 薪酬申请编号
fundParam
.
setFd_3b3cabde83d1d0
(
CommonConstants
.
EMPTY_STRING
);
String
body
=
ekpFundUtil
.
sendToEKP
(
fundParam
);
if
(
Common
.
isNotNull
(
body
)
&&
body
.
length
()
==
32
)
{
//更新推送状态为已推送的列表
...
...
yifu-social/yifu-social-biz/src/main/java/com/yifu/cloud/plus/v1/yifu/social/service/impl/TIncomeServiceImpl.java
View file @
2aeecd8e
...
...
@@ -749,6 +749,7 @@ public class TIncomeServiceImpl extends ServiceImpl<TIncomeMapper, TIncome> impl
error
.
setNums
(
CommonConstants
.
ONE_INT
);
tSendEkpErrorService
.
saveError
(
error
);
}
income
.
setApplyNo
(
tIncomeDetail
.
getApplyNo
());
return
this
.
updateById
(
income
);
}
...
...
@@ -821,6 +822,8 @@ public class TIncomeServiceImpl extends ServiceImpl<TIncomeMapper, TIncome> impl
sendParam
.
setFd_3aeae58b14691c
(
""
);
// 管理费id
sendParam
.
setFd_3b13dae9bd70f8
(
income
.
getId
());
// 薪酬申请编号
sendParam
.
setFd_3b3bf13759b850
(
income
.
getApplyNo
()==
null
?
""
:
income
.
getApplyNo
());
}
private
void
copyToEkpRisk
(
TIncome
income
,
EkpIncomeParamRisk
sendParam
)
{
...
...
@@ -884,6 +887,8 @@ public class TIncomeServiceImpl extends ServiceImpl<TIncomeMapper, TIncome> impl
sendParam
.
setFd_3aeae59b70fe5a
(
""
);
// 风险金id
sendParam
.
setFd_3b13dac4c03022
(
income
.
getId
());
// 薪酬申请编号
sendParam
.
setFd_3b3bf0e75ef6c4
(
income
.
getApplyNo
()==
null
?
""
:
income
.
getApplyNo
());
}
/**
...
...
@@ -1055,4 +1060,16 @@ public class TIncomeServiceImpl extends ServiceImpl<TIncomeMapper, TIncome> impl
return
true
;
}
/**
* @param applyNo
* @Description: 删除薪资关联的收入明细
* @Author: hgw
* @Date: 2022/11/4 17:03
* @return: boolean
**/
public
void
deleteIncomeAndDetailByApplyNo
(
String
applyNo
)
{
baseMapper
.
deleteIncomeByApplyNo
(
applyNo
);
baseMapper
.
deleteIncomeDetailByApplyNo
(
applyNo
);
}
}
yifu-social/yifu-social-biz/src/main/java/com/yifu/cloud/plus/v1/yifu/social/service/impl/TPaymentInfoServiceImpl.java
View file @
2aeecd8e
...
...
@@ -2506,7 +2506,8 @@ public class TPaymentInfoServiceImpl extends ServiceImpl<TPaymentInfoMapper, TPa
socialParam
.
setFd_3b01953871b8be
(
CommonConstants
.
EMPTY_STRING
);
//社保id
socialParam
.
setFd_3b0afbe1f94a08
(
library
.
getId
());
// 薪酬申请编号
socialParam
.
setFd_3b3cab77923f44
(
CommonConstants
.
EMPTY_STRING
);
String
body
=
ekpSocialUtil
.
sendToEKP
(
socialParam
);
if
(
Common
.
isNotNull
(
body
)
&&
body
.
length
()
==
32
)
{
//更新推送状态为已推送的列表
...
...
@@ -2677,7 +2678,8 @@ public class TPaymentInfoServiceImpl extends ServiceImpl<TPaymentInfoMapper, TPa
fundParam
.
setFd_3b019a2e9bfdd6
(
CommonConstants
.
EMPTY_STRING
);
//公积金id
fundParam
.
setFd_3b0afbaf10df2c
(
library
.
getId
());
// 薪酬申请编号
fundParam
.
setFd_3b3cabde83d1d0
(
CommonConstants
.
EMPTY_STRING
);
String
body
=
ekpFundUtil
.
sendToEKP
(
fundParam
);
if
(
Common
.
isNotNull
(
body
)
&&
body
.
length
()
==
32
)
{
//更新推送状态为已推送的列表
...
...
yifu-social/yifu-social-biz/src/main/resources/mapper/TIncomeDetailMapper.xml
View file @
2aeecd8e
...
...
@@ -45,6 +45,7 @@
<result
property=
"sourceId"
column=
"SOURCE_ID"
/>
<result
property=
"redData"
column=
"RED_DATA"
/>
<result
property=
"mrSettleType"
column=
"MR_SETTLE_TYPE"
/>
<result
property=
"applyNo"
column=
"APPLY_NO"
/>
</resultMap>
<sql
id=
"Base_Column_List"
>
a.ID,
...
...
@@ -67,7 +68,8 @@
a.DATA_CREATE_MONTH,
a.SOURCE_ID,
a.RED_DATA,
a.MR_SETTLE_TYPE
a.MR_SETTLE_TYPE,
a.APPLY_NO
</sql>
<sql
id=
"tIncomeDetail_where"
>
<if
test=
"tIncomeDetail != null"
>
...
...
@@ -131,6 +133,9 @@
<if
test=
"tIncomeDetail.redData != null and tIncomeDetail.redData.trim() != ''"
>
AND a.RED_DATA = #{tIncomeDetail.redData}
</if>
<if
test=
"tIncomeDetail.applyNo != null and tIncomeDetail.applyNo.trim() != ''"
>
AND a.APPLY_NO = #{tIncomeDetail.applyNo}
</if>
<if
test=
"tIncomeDetail.idCardList != null and tIncomeDetail.idCardList.size() > 0"
>
AND a.EMP_IDCARD in
<foreach
item=
"item"
index=
"index"
collection=
"tIncomeDetail.idCardList"
open=
"("
separator=
","
close=
")"
>
...
...
yifu-social/yifu-social-biz/src/main/resources/mapper/TIncomeMapper.xml
View file @
2aeecd8e
...
...
@@ -48,6 +48,7 @@
<result
property=
"sendTime"
column=
"SEND_TIME"
/>
<result
property=
"sendMonth"
column=
"SEND_MONTH"
/>
<result
property=
"ekpId"
column=
"EKP_ID"
/>
<result
property=
"applyNo"
column=
"APPLY_NO"
/>
</resultMap>
<resultMap
id=
"incomeExportMap"
type=
"com.yifu.cloud.plus.v1.yifu.social.vo.IncomeExportVo"
>
<result
property=
"empName"
column=
"EMP_NAME"
/>
...
...
@@ -87,7 +88,8 @@
a.RED_DATA,
a.SEND_STATUS,
a.SEND_TIME,
a.SEND_MONTH
a.SEND_MONTH,
a.APPLY_NO
</sql>
<sql
id=
"tIncome_where"
>
<if
test=
"tIncome != null"
>
...
...
@@ -148,6 +150,9 @@
<if
test=
"tIncome.redData != null and tIncome.redData.trim() != ''"
>
AND a.RED_DATA = #{tIncome.redData}
</if>
<if
test=
"tIncome.applyNo != null and tIncome.applyNo.trim() != ''"
>
AND a.APPLY_NO = #{tIncome.applyNo}
</if>
<if
test=
"tIncome.authSql != null and tIncome.authSql.trim() != ''"
>
${tIncome.authSql}
</if>
...
...
@@ -256,4 +261,11 @@
ID=#{i.id}
</foreach>
</update>
<delete
id=
"deleteIncomeByApplyNo"
>
delete from t_income_detail where APPLY_NO = #{applyNo}
</delete>
<delete
id=
"deleteIncomeDetailByApplyNo"
>
delete from t_income where APPLY_NO = #{applyNo}
</delete>
</mapper>
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