diff --git a/src/com/engine/salary/entity/deductionamount/dto/DeductionAmountDTO.java b/src/com/engine/salary/entity/deductionamount/dto/DeductionAmountDTO.java
index d5a2d3fcb..43fc7de83 100644
--- a/src/com/engine/salary/entity/deductionamount/dto/DeductionAmountDTO.java
+++ b/src/com/engine/salary/entity/deductionamount/dto/DeductionAmountDTO.java
@@ -85,6 +85,7 @@ public class DeductionAmountDTO {
*/
@TableTitle(title = "报送状态", dataIndex = "declareStatus", key = "declareStatus")
private Integer declareStatus;
+ private String declareErrorMsg;
/**
diff --git a/src/com/engine/salary/entity/deductionamount/param/DeductionAmountFeedBackParam.java b/src/com/engine/salary/entity/deductionamount/param/DeductionAmountFeedBackParam.java
index 9cd7ad6f5..111c7011e 100644
--- a/src/com/engine/salary/entity/deductionamount/param/DeductionAmountFeedBackParam.java
+++ b/src/com/engine/salary/entity/deductionamount/param/DeductionAmountFeedBackParam.java
@@ -24,7 +24,7 @@ public class DeductionAmountFeedBackParam {
@DataCheck(require = true, message = "参数错误,个税扣缴义务人id不能为空")
private Long taxAgentId;
- @DataCheck(require = true, message = "参数错误,requestId不能为空")
- private String requestId;
-
+ // 税款所属年度
+ @DataCheck(require = true, message = "参数错误,税款所属年度参数格式错误")
+ private String year;
}
diff --git a/src/com/engine/salary/entity/deductionamount/po/DeductionAmountPO.java b/src/com/engine/salary/entity/deductionamount/po/DeductionAmountPO.java
index 731a211da..e203655e7 100644
--- a/src/com/engine/salary/entity/deductionamount/po/DeductionAmountPO.java
+++ b/src/com/engine/salary/entity/deductionamount/po/DeductionAmountPO.java
@@ -79,12 +79,6 @@ public class DeductionAmountPO {
@ElogTransform(name = "证件类型")
private Integer cardType;
- /**
- * 报送状态
- */
- @ElogTransform(name = "报送状态")
- private Integer declareStatus;
-
/**
* 是否扣除
*/
@@ -96,6 +90,18 @@ public class DeductionAmountPO {
@ElogTransform(name = "是否成功报送过")
private Integer successfullyDeclared;
+ /**
+ * 报送状态
+ */
+ @ElogTransform(name = "报送状态")
+ private Integer declareStatus;
+
+ /**
+ * 申报失败的错误信息
+ */
+ @ElogTransform(name = "失败的错误信息")
+ private String declareErrorMsg;
+
/**
* 创建时间
diff --git a/src/com/engine/salary/entity/deductionamount/po/DeductionAmountRecordPO.java b/src/com/engine/salary/entity/deductionamount/po/DeductionAmountRecordPO.java
new file mode 100644
index 000000000..f476627f1
--- /dev/null
+++ b/src/com/engine/salary/entity/deductionamount/po/DeductionAmountRecordPO.java
@@ -0,0 +1,66 @@
+package com.engine.salary.entity.deductionamount.po;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+import java.util.Collection;
+import java.util.Date;
+
+/**
+ * 扣减报送记录
+ *
Copyright: Copyright (c) 2023
+ * Company: 泛微软件
+ *
+ * @author qiantao
+ * @version 1.0
+ **/
+@Data
+@Accessors(chain = true)
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+//"hrsa_employee_declare_record")
+public class DeductionAmountRecordPO {
+
+ /**
+ * 主键id
+ */
+ private Long id;
+ /**
+ * 个税扣缴义务人
+ */
+ private Long taxAgentId;
+ /**
+ * 税款所属年
+ */
+ private String year;
+ /**
+ * 请求的requestId
+ */
+ private String requestId;
+ /**
+ * 租户key
+ */
+ private String tenantKey;
+ /**
+ * 创建人id
+ */
+ private Long creator;
+ /**
+ * 是否删除
+ */
+ private Integer deleteType;
+ /**
+ * 创建时间
+ */
+ private Date createTime;
+ /**
+ * 更新时间
+ */
+ private Date updateTime;
+
+ private Collection ids;
+}
diff --git a/src/com/engine/salary/mapper/deductionamount/DeductionAmountMapper.xml b/src/com/engine/salary/mapper/deductionamount/DeductionAmountMapper.xml
index db85a9649..023a41f81 100644
--- a/src/com/engine/salary/mapper/deductionamount/DeductionAmountMapper.xml
+++ b/src/com/engine/salary/mapper/deductionamount/DeductionAmountMapper.xml
@@ -15,6 +15,7 @@
+
@@ -39,6 +40,7 @@
, t.id
, t.job_num
, t.successfully_declared
+ , t.declare_error_msg
, t.tax_agent_id
, t.tenant_key
, t.update_time
@@ -108,6 +110,9 @@
AND successfully_declared = #{successfullyDeclared}
+
+ AND declare_error_msg = #{declareErrorMsg}
+
AND tax_agent_id = #{taxAgentId}
@@ -177,6 +182,9 @@
successfully_declared,
+
+ declare_error_msg,
+
tax_agent_id,
@@ -233,6 +241,9 @@
#{successfullyDeclared},
+
+ #{declareErrorMsg},
+
#{taxAgentId},
@@ -268,6 +279,7 @@
employee_type=#{employeeType},
job_num=#{jobNum},
successfully_declared=#{successfullyDeclared},
+ declare_error_msg=#{declareErrorMsg},
tax_agent_id=#{taxAgentId},
tenant_key=#{tenantKey},
update_time=#{updateTime},
@@ -318,6 +330,9 @@
successfully_declared=#{successfullyDeclared},
+
+ declare_error_msg=#{declareErrorMsg},
+
tax_agent_id=#{taxAgentId},
diff --git a/src/com/engine/salary/mapper/deductionamount/DeductionAmountRecordMapper.java b/src/com/engine/salary/mapper/deductionamount/DeductionAmountRecordMapper.java
new file mode 100644
index 000000000..ca2815680
--- /dev/null
+++ b/src/com/engine/salary/mapper/deductionamount/DeductionAmountRecordMapper.java
@@ -0,0 +1,77 @@
+package com.engine.salary.mapper.deductionamount;
+
+import com.engine.salary.entity.deductionamount.po.DeductionAmountRecordPO;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.Collection;
+import java.util.List;
+
+public interface DeductionAmountRecordMapper {
+
+ /**
+ * 查询所有记录
+ *
+ * @return 返回集合,没有返回空List
+ */
+ List listAll();
+
+ /**
+ * 条件查询
+ *
+ * @return 返回集合,没有返回空List
+ */
+ List listSome(DeductionAmountRecordPO deductionAmountRecord);
+
+
+ /**
+ * 根据主键查询
+ *
+ * @param id 主键
+ * @return 返回记录,没有返回null
+ */
+ DeductionAmountRecordPO getById(Long id);
+
+
+ DeductionAmountRecordPO getByTaxAgentIdAndYear(@Param("taxAgentId")Long taxAgentId,@Param("year") String year);
+
+ /**
+ * 新增,忽略null字段
+ *
+ * @param deductionAmountRecord 新增的记录
+ * @return 返回影响行数
+ */
+ int insertIgnoreNull(DeductionAmountRecordPO deductionAmountRecord);
+
+ /**
+ * 修改,修改所有字段
+ *
+ * @param deductionAmountRecord 修改的记录
+ * @return 返回影响行数
+ */
+ int update(DeductionAmountRecordPO deductionAmountRecord);
+
+ /**
+ * 修改,忽略null字段
+ *
+ * @param deductionAmountRecord 修改的记录
+ * @return 返回影响行数
+ */
+ int updateIgnoreNull(DeductionAmountRecordPO deductionAmountRecord);
+
+ /**
+ * 删除记录
+ *
+ * @param deductionAmountRecord 待删除的记录
+ * @return 返回影响行数
+ */
+ int delete(DeductionAmountRecordPO deductionAmountRecord);
+
+ /**
+ * 批量删除记录
+ * @param ids 主键id集合
+ */
+ void deleteByIds(@Param("ids") Collection ids);
+
+ void deleteByTaxAgentIdAndYear(@Param("taxAgentId")Long taxAgentId,@Param("year") String year);
+
+}
\ No newline at end of file
diff --git a/src/com/engine/salary/mapper/deductionamount/DeductionAmountRecordMapper.xml b/src/com/engine/salary/mapper/deductionamount/DeductionAmountRecordMapper.xml
new file mode 100644
index 000000000..930371420
--- /dev/null
+++ b/src/com/engine/salary/mapper/deductionamount/DeductionAmountRecordMapper.xml
@@ -0,0 +1,239 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ t
+ .
+ create_time
+ , t.creator
+ , t.delete_type
+ , t.id
+ , t.request_id
+ , t.tax_agent_id
+ , t.tenant_key
+ , t.update_time
+ , t.year
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ INSERT INTO hrsa_deduction_amount_record
+
+
+
+ create_time,
+
+
+ creator,
+
+
+ delete_type,
+
+
+ id,
+
+
+ request_id,
+
+
+ tax_agent_id,
+
+
+ tenant_key,
+
+
+ update_time,
+
+
+ year,
+
+
+
+
+ #{createTime},
+
+
+ #{creator},
+
+
+ #{deleteType},
+
+
+ #{id},
+
+
+ #{requestId},
+
+
+ #{taxAgentId},
+
+
+ #{tenantKey},
+
+
+ #{updateTime},
+
+
+ #{year},
+
+
+
+
+
+
+ UPDATE hrsa_deduction_amount_record
+
+ create_time=#{createTime},
+ creator=#{creator},
+ delete_type=#{deleteType},
+ request_id=#{requestId},
+ tax_agent_id=#{taxAgentId},
+ tenant_key=#{tenantKey},
+ update_time=#{updateTime},
+ year=#{year},
+
+ WHERE id = #{id} AND delete_type = 0
+
+
+
+
+
+ UPDATE hrsa_deduction_amount_record
+
+
+ create_time=#{createTime},
+
+
+ creator=#{creator},
+
+
+ delete_type=#{deleteType},
+
+
+ request_id=#{requestId},
+
+
+ tax_agent_id=#{taxAgentId},
+
+
+ tenant_key=#{tenantKey},
+
+
+ update_time=#{updateTime},
+
+
+ year=#{year},
+
+
+ WHERE id = #{id} AND delete_type = 0
+
+
+
+
+
+ UPDATE hrsa_deduction_amount_record
+ SET delete_type=1
+ WHERE id = #{id}
+ AND delete_type = 0
+
+
+
+ UPDATE hrsa_deduction_amount_record
+ SET delete_type = 1
+ WHERE delete_type = 0
+ AND id IN
+
+ #{id}
+
+
+
+
+ UPDATE hrsa_deduction_amount_record
+ SET delete_type = 1
+ WHERE delete_type = 0
+ AND tax_agent_id=#{taxAgentId}
+ AND year=#{year}
+
+
\ No newline at end of file
diff --git a/src/com/engine/salary/remote/tax/client/DeductionAmountClient.java b/src/com/engine/salary/remote/tax/client/DeductionAmountClient.java
index 2eb13159d..05c3d3482 100644
--- a/src/com/engine/salary/remote/tax/client/DeductionAmountClient.java
+++ b/src/com/engine/salary/remote/tax/client/DeductionAmountClient.java
@@ -3,11 +3,14 @@ package com.engine.salary.remote.tax.client;
import com.engine.salary.enums.taxagent.TaxAgentTaxReturnPasswordTypeEnum;
import com.engine.salary.remote.tax.request.deductionAmount.ConfirmPreDeductRequest;
import com.engine.salary.remote.tax.request.deductionAmount.QueryDeductionAmountRequest;
+import com.engine.salary.remote.tax.response.deductionAmount.ConfirmFeedbackResponse;
import com.engine.salary.util.HttpUtil;
import com.engine.salary.util.JsonUtil;
import com.engine.salary.util.SingnatureData;
+import com.engine.salary.util.TaskUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
+import weaver.general.Util;
import java.util.*;
@@ -57,7 +60,7 @@ public class DeductionAmountClient extends TaxBaseClient {
}
- public String confirm(String year, List kczglb ) {
+ public String confirm(String year, List kczglb) {
String url = super.apiConfig.getHost() + "gateway/iit/deductionAmount/confirmPreDeduct";
ConfirmPreDeductRequest request = new ConfirmPreDeductRequest();
@@ -77,26 +80,22 @@ public class DeductionAmountClient extends TaxBaseClient {
request.setSkssnd(year);
request.setKczglb(kczglb);
- String reqJson = JsonUtil.toJsonString(request);
- log.info("confirmPreDeduct params --- \n{}\n", reqJson);
- Map params = new HashMap<>(1);
- Map header = SingnatureData.initHeader(params, apiConfig.getAppKey(), apiConfig.getAppSecret());
-
- // 开始请求
- String res = HttpUtil.doPost(url, header, reqJson, HttpUtil.JSON_TYPE);
- log.info("confirmPreDeduct res --- {}", res);
- return res;
+ String requestId = request(url, JsonUtil.parseMap(request, Object.class));
+ return requestId;
}
- public String feedback(String requestId) {
+ public ConfirmFeedbackResponse feedback(String requestId) {
+ TaskUtil taskUtil = new TaskUtil();
+
String url = super.apiConfig.getHost() + "gateway/iit/deductionAmount/getPreDeductConfirmFeedback";
- Map params = new HashMap<>(1);
- params.put("requestId", requestId);
- log.info("getPreDeductConfirmFeedback requestId --- \n{}\n", requestId);
- Map header = SingnatureData.initHeader(Collections.emptyMap(), apiConfig.getAppKey(), apiConfig.getAppSecret());
- String res = HttpUtil.getRequest(url, header, params);
- log.info("getPreDeductConfirmFeedback res --- {}", res);
- return res;
+ Map param = new HashMap<>(1);
+ param.put("requestId", requestId);
+
+ Map header = SingnatureData.initHeader(new HashMap<>(1), apiConfig.getAppKey(), apiConfig.getAppSecret());
+ String res = HttpUtil.getRequest(url, header, param);
+ taskUtil.writeApiTaskRecord(Util.null2String(taxAgentId), url, JsonUtil.toJsonString(param), res);
+ ConfirmFeedbackResponse response = JsonUtil.parseBean(res, ConfirmFeedbackResponse.class);
+ return response;
}
}
diff --git a/src/com/engine/salary/remote/tax/response/deductionAmount/ConfirmFeedbackResponse.java b/src/com/engine/salary/remote/tax/response/deductionAmount/ConfirmFeedbackResponse.java
new file mode 100644
index 000000000..783f5f359
--- /dev/null
+++ b/src/com/engine/salary/remote/tax/response/deductionAmount/ConfirmFeedbackResponse.java
@@ -0,0 +1,75 @@
+package com.engine.salary.remote.tax.response.deductionAmount;
+
+import com.engine.salary.entity.taxpayment.response.BaseResponse;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.List;
+
+/**
+ * 扣除名单确认反馈
+ * Copyright: Copyright (c) 2023
+ * Company: 泛微软件
+ *
+ * @author qiantao
+ * @version 1.0
+ **/
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class ConfirmFeedbackResponse extends BaseResponse {
+
+ /**
+ * 返回数据
+ */
+ private Body body;
+
+ /**
+ * 神州云合接口返回状态实体类
+ **/
+ @Data
+ public static class Body {
+
+ /**
+ * 总人数
+ */
+ private String zrs;
+ /**
+ * 成功人数
+ */
+ private String cgrs;
+ /**
+ * 失败人数
+ */
+ private String sbrs;
+ /**
+ * 扣除确认失败列表
+ */
+ private List kcqrsblb;
+
+ @Data
+ public static class kcqrsb {
+
+ /**
+ * 姓名
+ */
+ private String xm;
+ /**
+ * 证件类型 见证件类型字典
+ */
+ private String zzlx;
+ /**
+ * 证件号码 证件号码
+ */
+ private String zzhm;
+ /**
+ * 国籍
+ */
+ private String gj;
+ /**
+ * 失败原因
+ */
+ private String sbyy;
+ }
+ }
+
+}
diff --git a/src/com/engine/salary/service/DeductionAmountService.java b/src/com/engine/salary/service/DeductionAmountService.java
index 7d8b49879..3d7da8fad 100644
--- a/src/com/engine/salary/service/DeductionAmountService.java
+++ b/src/com/engine/salary/service/DeductionAmountService.java
@@ -22,7 +22,7 @@ public interface DeductionAmountService {
Object query(DeductionAmountOnlineQueryParam param);
- Object confirm(DeductionAmountConfirmParam param);
+ String confirm(DeductionAmountConfirmParam param);
- void feedback(DeductionAmountFeedBackParam param);
+ String feedback(DeductionAmountFeedBackParam param);
}
diff --git a/src/com/engine/salary/service/impl/DeductionAmountServiceImpl.java b/src/com/engine/salary/service/impl/DeductionAmountServiceImpl.java
index 4855fd950..5b30ff10d 100644
--- a/src/com/engine/salary/service/impl/DeductionAmountServiceImpl.java
+++ b/src/com/engine/salary/service/impl/DeductionAmountServiceImpl.java
@@ -2,32 +2,38 @@ package com.engine.salary.service.impl;
import cn.hutool.core.collection.CollUtil;
-import com.engine.common.util.ServiceUtil;
import com.engine.core.impl.Service;
import com.engine.salary.component.PageInfo;
import com.engine.salary.constant.SalaryDefaultTenantConstant;
+import com.engine.salary.constant.SzyhApiConstant;
import com.engine.salary.entity.deductionamount.dto.DeductionAmountDTO;
import com.engine.salary.entity.deductionamount.param.*;
import com.engine.salary.entity.deductionamount.po.DeductionAmountPO;
+import com.engine.salary.entity.deductionamount.po.DeductionAmountRecordPO;
import com.engine.salary.entity.employeedeclare.po.EmployeeDeclarePO;
import com.engine.salary.enums.SalaryOnOffEnum;
import com.engine.salary.enums.employeedeclare.CardTypeEnum;
+import com.engine.salary.enums.employeedeclare.DeclareStatusEnum;
+import com.engine.salary.exception.SalaryRunTimeException;
import com.engine.salary.mapper.deductionamount.DeductionAmountMapper;
+import com.engine.salary.mapper.deductionamount.DeductionAmountRecordMapper;
import com.engine.salary.mapper.employeedeclare.EmployeeDeclareMapper;
import com.engine.salary.remote.tax.client.DeductionAmountClient;
import com.engine.salary.remote.tax.request.deductionAmount.ConfirmPreDeductRequest;
-import com.engine.salary.service.*;
+import com.engine.salary.remote.tax.response.deductionAmount.ConfirmFeedbackResponse;
+import com.engine.salary.service.DeductionAmountService;
import com.engine.salary.util.SalaryEntityUtil;
+import com.engine.salary.util.SalaryI18nUtil;
import com.engine.salary.util.db.IdGenerator;
import com.engine.salary.util.db.MapperProxyFactory;
import com.engine.salary.util.page.SalaryPageUtil;
import com.engine.salary.util.valid.ValidUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.math.NumberUtils;
-import weaver.hrm.User;
import java.util.Date;
import java.util.List;
+import java.util.Map;
import java.util.stream.Collectors;
/**
@@ -41,6 +47,10 @@ import java.util.stream.Collectors;
@Slf4j
public class DeductionAmountServiceImpl extends Service implements DeductionAmountService {
+ private DeductionAmountRecordMapper getDeductionAmountRecordMapper() {
+ return MapperProxyFactory.getProxy(DeductionAmountRecordMapper.class);
+ }
+
private DeductionAmountMapper getDeductionAmountMapper() {
return MapperProxyFactory.getProxy(DeductionAmountMapper.class);
}
@@ -49,34 +59,6 @@ public class DeductionAmountServiceImpl extends Service implements DeductionAmou
return MapperProxyFactory.getProxy(EmployeeDeclareMapper.class);
}
- private TaxAgentService getTaxAgentService(User user) {
- return ServiceUtil.getService(TaxAgentServiceImpl.class, user);
- }
-
- private SalaryEmployeeService getSalaryEmployeeService(User user) {
- return ServiceUtil.getService(SalaryEmployeeServiceImpl.class, user);
- }
-
- private SalaryArchiveService getSalaryArchiveService(User user) {
- return ServiceUtil.getService(SalaryArchiveServiceImpl.class, user);
- }
-
- private TaxDeclarationApiConfigService getTaxDeclarationApiConfigService(User user) {
- return ServiceUtil.getService(TaxDeclarationApiConfigServiceImpl.class, user);
- }
-
- private TaxAgentTaxReturnService getTaxAgentTaxReturnService(User user) {
- return ServiceUtil.getService(TaxAgentTaxReturnServiceImpl.class, user);
- }
-
- private EmployeeDeclareRecordService getEmployeeDeclareRecordService(User user) {
- return ServiceUtil.getService(EmployeeDeclareRecordServiceImpl.class, user);
- }
-
- private TaxDeclarationApiBillingService getTaxDeclarationApiBillingService(User user) {
- return ServiceUtil.getService(TaxDeclarationApiBillingServiceImpl.class, user);
- }
-
@Override
public PageInfo list(DeductionAmountListParam param) {
@@ -84,26 +66,27 @@ public class DeductionAmountServiceImpl extends Service implements DeductionAmou
List deductionAmountPOS = getDeductionAmountMapper().listSome(DeductionAmountPO.builder().year(param.getYear()).taxAgentId(param.getTaxAgentId()).build());
- List list = deductionAmountPOS.stream().map(deductionAmountPO -> {
- return DeductionAmountDTO.builder()
- .id(deductionAmountPO.getId())
- .taxAgentId(deductionAmountPO.getEmployeeId())
- .year(deductionAmountPO.getYear())
- .employeeId(deductionAmountPO.getEmployeeId())
- .employeeName(deductionAmountPO.getEmployeeName())
- .employeeType(deductionAmountPO.getEmployeeType())
- .jobNum(deductionAmountPO.getJobNum())
- .nationality(deductionAmountPO.getNationality())
- .cardNum(deductionAmountPO.getCardNum())
- .cardType(deductionAmountPO.getCardType())
- .declareStatus(deductionAmountPO.getDeclareStatus())
- .deductFlag(deductionAmountPO.getDeductFlag())
- .successfullyDeclared(deductionAmountPO.getSuccessfullyDeclared())
- .creator(deductionAmountPO.getCreator())
- .createTime(deductionAmountPO.getCreateTime())
- .updateTime(deductionAmountPO.getUpdateTime())
- .build();
- }).collect(Collectors.toList());
+ List list = deductionAmountPOS.stream()
+ .map(deductionAmountPO -> DeductionAmountDTO.builder()
+ .id(deductionAmountPO.getId())
+ .taxAgentId(deductionAmountPO.getEmployeeId())
+ .year(deductionAmountPO.getYear())
+ .employeeId(deductionAmountPO.getEmployeeId())
+ .employeeName(deductionAmountPO.getEmployeeName())
+ .employeeType(deductionAmountPO.getEmployeeType())
+ .jobNum(deductionAmountPO.getJobNum())
+ .nationality(deductionAmountPO.getNationality())
+ .cardNum(deductionAmountPO.getCardNum())
+ .cardType(deductionAmountPO.getCardType())
+ .declareStatus(deductionAmountPO.getDeclareStatus())
+ .declareErrorMsg(deductionAmountPO.getDeclareErrorMsg())
+ .deductFlag(deductionAmountPO.getDeductFlag())
+ .successfullyDeclared(deductionAmountPO.getSuccessfullyDeclared())
+ .creator(deductionAmountPO.getCreator())
+ .createTime(deductionAmountPO.getCreateTime())
+ .updateTime(deductionAmountPO.getUpdateTime())
+ .build())
+ .collect(Collectors.toList());
return SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), list, DeductionAmountDTO.class);
}
@@ -134,9 +117,9 @@ public class DeductionAmountServiceImpl extends Service implements DeductionAmou
.cardNum(employeeDeclarePO.getCardNum())
.cardType(employeeDeclarePO.getCardType())
.nationality(employeeDeclarePO.getNationality())
- .declareStatus(0)
- .deductFlag(1)
- .successfullyDeclared(0)
+ .declareStatus(DeclareStatusEnum.NOT_DECLARE.getValue())
+ .deductFlag(SalaryOnOffEnum.OFF.getValue())
+ .successfullyDeclared(SalaryOnOffEnum.OFF.getValue())
.creator((long) user.getUID())
.createTime(now)
.updateTime(now)
@@ -164,7 +147,7 @@ public class DeductionAmountServiceImpl extends Service implements DeductionAmou
}
@Override
- public Object confirm(DeductionAmountConfirmParam param) {
+ public String confirm(DeductionAmountConfirmParam param) {
ValidUtil.doValidator(param);
Long taxAgentId = param.getTaxAgentId();
String year = param.getYear();
@@ -181,13 +164,78 @@ public class DeductionAmountServiceImpl extends Service implements DeductionAmou
}).collect(Collectors.toList());
DeductionAmountClient deductionAmountClient = new DeductionAmountClient(taxAgentId);
- return deductionAmountClient.confirm(year, kczglb);
+ String requestId = deductionAmountClient.confirm(year, kczglb);
+
+ //更新状态
+ deductionAmountPOS.forEach(deductionAmountPO -> {
+ deductionAmountPO.setDeclareStatus(DeclareStatusEnum.DECLARING.getValue());
+ getDeductionAmountMapper().updateIgnoreNull(deductionAmountPO);
+ });
+
+ //插入记录
+ getDeductionAmountRecordMapper().deleteByTaxAgentIdAndYear(taxAgentId, year);
+ DeductionAmountRecordPO recordPO = DeductionAmountRecordPO.builder()
+ .id(IdGenerator.generate())
+ .taxAgentId(taxAgentId)
+ .year(year)
+ .requestId(requestId)
+ .creator((long) user.getUID())
+ .createTime(new Date())
+ .updateTime(new Date())
+ .deleteType(NumberUtils.INTEGER_ZERO)
+ .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY)
+ .build();
+ getDeductionAmountRecordMapper().insertIgnoreNull(recordPO);
+
+ return requestId;
}
@Override
- public void feedback(DeductionAmountFeedBackParam param) {
- DeductionAmountClient deductionAmountClient = new DeductionAmountClient(param.getTaxAgentId());
- String feedback = deductionAmountClient.feedback(param.getRequestId());
+ public String feedback(DeductionAmountFeedBackParam param) {
+ Long taxAgentId = param.getTaxAgentId();
+ String year = param.getYear();
+ DeductionAmountRecordPO recordPO = getDeductionAmountRecordMapper().getByTaxAgentIdAndYear(taxAgentId, year);
+
+ if (recordPO == null) {
+ throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(175337, "请先点击报送扣除名单,再点击反馈"));
+ }
+
+ String requestId = recordPO.getRequestId();
+ DeductionAmountClient deductionAmountClient = new DeductionAmountClient(taxAgentId);
+ ConfirmFeedbackResponse feedback = deductionAmountClient.feedback(requestId);
+
+ if (feedback == null || feedback.getHead() == null) {
+ throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(95828, "服务异常,请稍后重试"));
+ }
+ // 如果税友返回错误信息
+ String code = feedback.getHead().getCode();
+ if (SzyhApiConstant.HANDLING_CODE.equals(code) || SzyhApiConstant.TASK_HANDLING_CODE.equals(code)) {
+ //进行中的任务,重试
+ throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(175337, "任务还在处理中,请稍后点击反馈"));
+ }
+
+ if (!SzyhApiConstant.SUCCESS_CODE.equals(code)) {
+ throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(95828, feedback.getHead().getMsg()));
+ }
+
+ List deductionAmountPOS = getDeductionAmountMapper().listSome(DeductionAmountPO.builder().taxAgentId(taxAgentId).year(year).build());
+
+ List kcqrsblb = feedback.getBody().getKcqrsblb();
+ Map failMap = SalaryEntityUtil.convert2Map(kcqrsblb, ConfirmFeedbackResponse.Body.kcqrsb::getZzhm, ConfirmFeedbackResponse.Body.kcqrsb::getSbyy);
+
+ deductionAmountPOS.forEach(deductionAmountPO -> {
+ String cardNum = deductionAmountPO.getCardNum();
+ if (failMap.containsKey(cardNum)) {
+ deductionAmountPO.setDeclareStatus(DeclareStatusEnum.DECLARE_FAIL.getValue());
+ deductionAmountPO.setDeclareErrorMsg(failMap.get(cardNum));
+ } else {
+ deductionAmountPO.setDeclareStatus(DeclareStatusEnum.DECLARE_SUCCESS.getValue());
+ deductionAmountPO.setSuccessfullyDeclared(SalaryOnOffEnum.ON.getValue());
+ }
+ getDeductionAmountMapper().updateIgnoreNull(deductionAmountPO);
+ });
+
+ return String.format("成功%s条,失败%s条", feedback.getBody().getCgrs(), feedback.getBody().getSbrs());
}
}
diff --git a/src/com/engine/salary/service/impl/EmployeeDeclareServiceImpl.java b/src/com/engine/salary/service/impl/EmployeeDeclareServiceImpl.java
index 643d210ca..7e7da0c23 100644
--- a/src/com/engine/salary/service/impl/EmployeeDeclareServiceImpl.java
+++ b/src/com/engine/salary/service/impl/EmployeeDeclareServiceImpl.java
@@ -706,9 +706,7 @@ public class EmployeeDeclareServiceImpl extends Service implements EmployeeDecla
}
// 更新员工的报送状态
if (CollectionUtils.isNotEmpty(needUpdateEmployeeDeclares)) {
- //todo
needUpdateEmployeeDeclares.forEach(getEmployeeDeclareMapper()::updateIgnoreNull);
-// updateBatchById(needUpdateEmployeeDeclares);
}
// 删除原来的人员报送记录
getEmployeeDeclareRecordService(user).deleteByTaxCycleAndTaxAgentId(param.getTaxCycle(), param.getTaxAgentId());
diff --git a/src/com/engine/salary/web/DeductionAmountController.java b/src/com/engine/salary/web/DeductionAmountController.java
index b900b6872..3657d6f83 100644
--- a/src/com/engine/salary/web/DeductionAmountController.java
+++ b/src/com/engine/salary/web/DeductionAmountController.java
@@ -72,7 +72,7 @@ public class DeductionAmountController {
@Produces(MediaType.APPLICATION_JSON)
public String confirm(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody DeductionAmountConfirmParam param) {
User user = HrmUserVarify.getUser(request, response);
- return new ResponseResult(user).run(getDeductionAmountWrapper(user)::confirm, param);
+ return new ResponseResult(user).run(getDeductionAmountWrapper(user)::confirm, param);
}
@POST
@@ -80,7 +80,7 @@ public class DeductionAmountController {
@Produces(MediaType.APPLICATION_JSON)
public String feedback(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody DeductionAmountFeedBackParam param) {
User user = HrmUserVarify.getUser(request, response);
- return new ResponseResult(user).run(getDeductionAmountWrapper(user)::feedback, param);
+ return new ResponseResult(user).run(getDeductionAmountWrapper(user)::feedback, param);
}
}
diff --git a/src/com/engine/salary/wrapper/DeductionAmountWrapper.java b/src/com/engine/salary/wrapper/DeductionAmountWrapper.java
index 7a474421f..a4f0628e9 100644
--- a/src/com/engine/salary/wrapper/DeductionAmountWrapper.java
+++ b/src/com/engine/salary/wrapper/DeductionAmountWrapper.java
@@ -40,11 +40,11 @@ public class DeductionAmountWrapper extends Service {
return getDeductionAmountService(user).query(param);
}
- public Object confirm(DeductionAmountConfirmParam param) {
+ public String confirm(DeductionAmountConfirmParam param) {
return getDeductionAmountService(user).confirm(param);
}
- public void feedback(DeductionAmountFeedBackParam param) {
- getDeductionAmountService(user).feedback(param);
+ public String feedback(DeductionAmountFeedBackParam param) {
+ return getDeductionAmountService(user).feedback(param);
}
}