SynIndividualIncomeTaxService.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  1. package com.kingdee.eas.custom.compensation.service;
  2. import cn.com.servyou.dto.ApiResponse;
  3. import cn.com.servyou.dto.tax.CalculateTaxResultRequest;
  4. import cn.com.servyou.dto.tax.ComplexIncome;
  5. import cn.com.servyou.dto.tax.ComplexIncomeResultRequest;
  6. import cn.com.servyou.dto.tax.ComplexTaxCalculateResult;
  7. import cn.com.servyou.rmi.client.ClientProxyFactory;
  8. import cn.com.servyou.service.TaxRequest;
  9. import com.alibaba.fastjson.JSONArray;
  10. import com.alibaba.fastjson.JSONObject;
  11. import com.fasterxml.jackson.databind.ObjectMapper;
  12. import com.kingdee.bos.BOSException;
  13. import com.kingdee.bos.Context;
  14. import com.kingdee.bos.bsf.service.app.IHRMsfService;
  15. import com.kingdee.bos.dao.IObjectPK;
  16. import com.kingdee.bos.dao.ormapping.ObjectUuidPK;
  17. import com.kingdee.bos.metadata.entity.EntityViewInfo;
  18. import com.kingdee.bos.metadata.entity.FilterInfo;
  19. import com.kingdee.bos.metadata.entity.FilterItemInfo;
  20. import com.kingdee.bos.metadata.query.util.CompareType;
  21. import com.kingdee.eas.basedata.person.IPerson;
  22. import com.kingdee.eas.basedata.person.PersonCollection;
  23. import com.kingdee.eas.basedata.person.PersonFactory;
  24. import com.kingdee.eas.basedata.person.PersonInfo;
  25. import com.kingdee.eas.common.EASBizException;
  26. import com.kingdee.eas.custom.individualback.*;
  27. import com.kingdee.eas.custom.shuiyou.interfacelog.LogInfoFactory;
  28. import com.kingdee.eas.custom.shuiyou.interfacelog.LogInfoInfo;
  29. import com.kingdee.eas.custom.shuiyou.task.MessageResult;
  30. import com.kingdee.eas.custom.shuiyou.utils.ClientProxyFactoryUtils;
  31. import com.kingdee.eas.util.app.DbUtil;
  32. import com.kingdee.jdbc.rowset.IRowSet;
  33. import com.kingdee.shr.compensation.CalSchemeFactory;
  34. import com.kingdee.util.StringUtils;
  35. import org.apache.log4j.Logger;
  36. import java.io.IOException;
  37. import java.math.BigDecimal;
  38. import java.sql.SQLException;
  39. import java.util.Date;
  40. import java.util.HashMap;
  41. import java.util.List;
  42. import java.util.Map;
  43. /**
  44. * @author qingwu
  45. * @date 2024/9/9
  46. * @apiNote
  47. */
  48. public class SynIndividualIncomeTaxService implements IHRMsfService {
  49. Logger logger = Logger.getLogger("com.kingdee.eas.custom.compensation.service.SynIndividualIncomeTaxService");
  50. @Override
  51. public Object process(Context context, Map map) throws EASBizException, BOSException {
  52. //接口日志实体
  53. LogInfoInfo logInfo = new LogInfoInfo();
  54. //入口
  55. logInfo.setEntrance(this.getClass().getName());
  56. logInfo.setBizDate(new Date());
  57. Map resMap = new HashMap();
  58. logger.error("SynIndividualIncomeTaxService----------OSF----Start");
  59. JSONObject paramData = JSONObject.parseObject((String) map.get("paramData"));
  60. logger.error("paramData--------" + paramData);
  61. String requestId = paramData.getString("requestId");
  62. JSONObject param = paramData.getJSONObject("param");
  63. logger.error("requestId--------" + requestId);
  64. logger.error("param--------" + param);
  65. try {
  66. //客户端代理工厂
  67. ClientProxyFactory clientProxyFactory = ClientProxyFactoryUtils.getClientProxyFactory();
  68. //算税请求接口
  69. TaxRequest taxRequest = clientProxyFactory.getTaxRequest();
  70. ApiResponse<CalculateTaxResultRequest> aSynIndividualIncomeTaxFeedback = taxRequest.getReverseASynIndividualIncomeTaxFeedback(requestId);
  71. String status = aSynIndividualIncomeTaxFeedback.getHead().getStatus();
  72. logInfo.setInterfaceAddress("/gateway/iit/reverseCalculateTax/getASynIndividualIncomeTaxFeedback");//接口地址
  73. logInfo.setInterfaceName("getASynIndividualIncomeTaxFeedback");//接口名
  74. ObjectMapper mapper = new ObjectMapper();
  75. logInfo.setInParameter(mapper.writeValueAsString(aSynIndividualIncomeTaxFeedback));//入参
  76. CalculateTaxResultRequest body = null;
  77. if ("N".equals(status)) {
  78. //请求失败响应
  79. String msg = aSynIndividualIncomeTaxFeedback.getHead().getMsg();
  80. //throw new BOSException(msg);
  81. return MessageResult.FAILED(msg);
  82. } else {
  83. //调用成功
  84. //请求id
  85. body = aSynIndividualIncomeTaxFeedback.getBody();
  86. logInfo.setOutParameter(mapper.writeValueAsString(body));//回参
  87. LogInfoFactory.getLocalInstance(context).addnew(logInfo);
  88. disposeTaxPaymentBackCalculate(context, body, param);
  89. }
  90. logger.error("SynIndividualIncomeTaxService----------OSF----end");
  91. return MessageResult.SUCCESS(mapper.writeValueAsString(body));
  92. } catch (IOException e) {
  93. e.printStackTrace();
  94. logInfo.setErrorInfo(e.getMessage());//错误信息
  95. LogInfoFactory.getLocalInstance(context).save(logInfo);
  96. //throw new BOSException(e);
  97. return MessageResult.ERROR(e.getMessage());
  98. }
  99. }
  100. /**
  101. * 处理个税反算数据
  102. *
  103. * @param resBody 查询反算反馈结果接口返回结果
  104. * @param param 员工ID
  105. * @return
  106. */
  107. public void disposeTaxPaymentBackCalculate(Context ctx, CalculateTaxResultRequest resBody, com.alibaba.fastjson.JSONObject param) throws BOSException, EASBizException {
  108. logger.error("addTaxPaymentBackCalculate============Start===============");
  109. ITaxPaymentBackCalculate iTaxPaymentBackCalculate = TaxPaymentBackCalculateFactory.getLocalInstance(ctx);
  110. String taxItemPlanNumber = param.getString("taxItemPlanNumber");//个税项目方案
  111. ComplexTaxCalculateResult complexTaxCalculateResult = null;
  112. //zhsd 综合所得
  113. ComplexIncomeResultRequest complexIncomeResultRequest = resBody.getComplexIncomeResultRequest();
  114. //全年一次性奖金
  115. if ("2024083001".equals(taxItemPlanNumber)) {
  116. //qnycxjjsslb 全年一次性奖金
  117. complexTaxCalculateResult = complexIncomeResultRequest.getAnnualOneTimeBonusIncome();
  118. }
  119. //一般劳务报酬所得列表
  120. if ("2024083003".equals(taxItemPlanNumber)) {
  121. //lwbclb 一般劳务报酬所得列表
  122. complexTaxCalculateResult = complexIncomeResultRequest.getLaborRemunerationIncome();
  123. }
  124. //正常工资薪金对象
  125. if ("2024083004".equals(taxItemPlanNumber)) {
  126. //zcgzxj 正常工资薪金对象
  127. complexTaxCalculateResult = complexIncomeResultRequest.getNormalSalarySpecIncome();
  128. }
  129. IPerson iPerson = PersonFactory.getLocalInstance(ctx);
  130. List<ComplexIncome> successComplexIncomes = complexTaxCalculateResult.getSuccessComplexIncomes();
  131. for (ComplexIncome complexIncome : successComplexIncomes) {
  132. //证件类型
  133. String licenseType = complexIncome.getLicenseType();
  134. PersonInfo personInfo = null;
  135. if ("居民身份证".equals(licenseType)) {
  136. //证件号码
  137. String licenseNumber = complexIncome.getLicenseNumber();
  138. PersonCollection personCollection = iPerson.getPersonCollection("where idCardNO = '" + licenseNumber + "'");
  139. if (personCollection.size() > 0) {
  140. personInfo = personCollection.get(0);
  141. }
  142. }
  143. if ("中国护照".equals(licenseType)) {
  144. //证件号码
  145. String licenseNumber = complexIncome.getLicenseNumber();
  146. PersonCollection personCollection = iPerson.getPersonCollection("where passportNO = '" + licenseNumber + "'");
  147. if (personCollection.size() > 0) {
  148. personInfo = personCollection.get(0);
  149. }
  150. }
  151. param.put("personId", personInfo.getId());
  152. saveTaxPaymentBackCalculateCollection(ctx, param, complexIncome);
  153. }
  154. logger.error("addTaxPaymentBackCalculate============end===============");
  155. }
  156. public String getParamContent(String requestId) {
  157. return "select CFParamContent as paramContent from CT_TK_TaskRequestParam where CFTaskID in (select FID from CT_TK_Task where CFRequestId = '" + requestId + "')";
  158. }
  159. public TaxPaymentBackCalculateCollection saveTaxPaymentBackCalculateCollection(Context ctx, JSONObject param, ComplexIncome complexIncome) throws BOSException, EASBizException {
  160. TaxPaymentBackCalculateInfo taxPaymentBackCalculateInfo = new TaxPaymentBackCalculateInfo();
  161. String personId = param.getString("personId");//员工ID
  162. String periodYear = param.getString("periodYear");//统计年
  163. String periodMonth = param.getString("periodMonth");//统计月
  164. String cmpschemeid = param.getString("cmpschemeid");//计算规则ID
  165. String taxItemPlanName = param.getString("taxItemPlanName");//个税项目方案
  166. String taxItemPlanNumber = param.getString("taxItemPlanNumber");//个税项目方案
  167. FilterInfo filterInfo = new FilterInfo();
  168. filterInfo.getFilterItems().add(new FilterItemInfo("person", personId, CompareType.EQUALS));
  169. filterInfo.getFilterItems().add(new FilterItemInfo("periodMonth", periodMonth, CompareType.EQUALS));
  170. filterInfo.getFilterItems().add(new FilterItemInfo("periodYear", periodYear, CompareType.EQUALS));
  171. filterInfo.getFilterItems().add(new FilterItemInfo("cmpscheme", cmpschemeid, CompareType.EQUALS));
  172. EntityViewInfo entityViewInfo = EntityViewInfo.getInstance(filterInfo, null, null);
  173. ////查询税款反算表是否存在该数据
  174. ITaxPaymentBackCalculate iTaxPaymentBackCalculate = TaxPaymentBackCalculateFactory.getLocalInstance(ctx);
  175. TaxPaymentBackCalculateCollection taxPaymentBackCalculateCollection = iTaxPaymentBackCalculate.getTaxPaymentBackCalculateCollection(entityViewInfo);
  176. if (taxPaymentBackCalculateCollection.size() > 0) {
  177. taxPaymentBackCalculateInfo = taxPaymentBackCalculateCollection.get(0);
  178. taxPaymentBackCalculateInfo.setId(taxPaymentBackCalculateCollection.get(0).getId());
  179. }
  180. //员工
  181. taxPaymentBackCalculateInfo.setPerson(PersonFactory.getLocalInstance(ctx).getPersonInfo(new ObjectUuidPK(personId)));
  182. //统计年
  183. taxPaymentBackCalculateInfo.setPeriodYear(periodYear);
  184. //统计月
  185. taxPaymentBackCalculateInfo.setPeriodMonth(periodMonth);
  186. //计算规则
  187. taxPaymentBackCalculateInfo.setCmpscheme(CalSchemeFactory.getLocalInstance(ctx).getCalSchemeInfo(new ObjectUuidPK(cmpschemeid)));
  188. //个税项目方案
  189. taxPaymentBackCalculateInfo.setTaxItemPlan(taxItemPlanName);
  190. //sre 收入额
  191. BigDecimal income = complexIncome.getIncome();
  192. taxPaymentBackCalculateInfo.setSalarySum(income);
  193. //ybtse refundTax 应补退税额
  194. BigDecimal refundTax = complexIncome.getRefundTax();
  195. taxPaymentBackCalculateInfo.setIndividual(refundTax);
  196. IObjectPK save = iTaxPaymentBackCalculate.save(taxPaymentBackCalculateInfo);
  197. return taxPaymentBackCalculateCollection;
  198. }
  199. }