SynIndividualIncomeTaxService.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  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. logger.error("SynIndividualIncomeTaxService----------body---" + mapper.writeValueAsString(body));
  87. logInfo.setOutParameter(mapper.writeValueAsString(body));//回参
  88. LogInfoFactory.getLocalInstance(context).addnew(logInfo);
  89. disposeTaxPaymentBackCalculate(context, body, param);
  90. }
  91. logger.error("SynIndividualIncomeTaxService----------OSF----end");
  92. return MessageResult.SUCCESS(mapper.writeValueAsString(body));
  93. } catch (IOException e) {
  94. e.printStackTrace();
  95. logInfo.setErrorInfo(e.getMessage());//错误信息
  96. LogInfoFactory.getLocalInstance(context).save(logInfo);
  97. //throw new BOSException(e);
  98. return MessageResult.ERROR(e.getMessage());
  99. }
  100. }
  101. /**
  102. * 处理个税反算数据
  103. *
  104. * @param resBody 查询反算反馈结果接口返回结果
  105. * @param param 员工ID
  106. * @return
  107. */
  108. public void disposeTaxPaymentBackCalculate(Context ctx, CalculateTaxResultRequest resBody, com.alibaba.fastjson.JSONObject param) throws BOSException, EASBizException {
  109. logger.error("addTaxPaymentBackCalculate============Start===============");
  110. ITaxPaymentBackCalculate iTaxPaymentBackCalculate = TaxPaymentBackCalculateFactory.getLocalInstance(ctx);
  111. String taxItemPlanNumber = param.getString("taxItemPlanNumber");//个税项目方案
  112. ComplexTaxCalculateResult complexTaxCalculateResult = null;
  113. //zhsd 综合所得
  114. ComplexIncomeResultRequest complexIncomeResultRequest = resBody.getComplexIncomeResultRequest();
  115. //全年一次性奖金
  116. if ("2024083001".equals(taxItemPlanNumber)) {
  117. //qnycxjjsslb 全年一次性奖金
  118. complexTaxCalculateResult = complexIncomeResultRequest.getAnnualOneTimeBonusIncome();
  119. }
  120. //一般劳务报酬所得列表
  121. if ("2024083003".equals(taxItemPlanNumber)) {
  122. //lwbclb 一般劳务报酬所得列表
  123. complexTaxCalculateResult = complexIncomeResultRequest.getLaborRemunerationIncome();
  124. }
  125. //正常工资薪金对象
  126. if ("2024083004".equals(taxItemPlanNumber)) {
  127. //zcgzxj 正常工资薪金对象
  128. complexTaxCalculateResult = complexIncomeResultRequest.getNormalSalarySpecIncome();
  129. }
  130. IPerson iPerson = PersonFactory.getLocalInstance(ctx);
  131. List<ComplexIncome> successComplexIncomes = complexTaxCalculateResult.getSuccessComplexIncomes();
  132. for (ComplexIncome complexIncome : successComplexIncomes) {
  133. //证件类型
  134. String licenseType = complexIncome.getLicenseType();
  135. PersonInfo personInfo = null;
  136. if ("居民身份证".equals(licenseType)) {
  137. //证件号码
  138. String licenseNumber = complexIncome.getLicenseNumber();
  139. PersonCollection personCollection = iPerson.getPersonCollection("where idCardNO = '" + licenseNumber + "'");
  140. if (personCollection.size() > 0) {
  141. personInfo = personCollection.get(0);
  142. }
  143. }
  144. if ("中国护照".equals(licenseType)) {
  145. //证件号码
  146. String licenseNumber = complexIncome.getLicenseNumber();
  147. PersonCollection personCollection = iPerson.getPersonCollection("where passportNO = '" + licenseNumber + "'");
  148. if (personCollection.size() > 0) {
  149. personInfo = personCollection.get(0);
  150. }
  151. }
  152. param.put("personId", personInfo.getId());
  153. saveTaxPaymentBackCalculateCollection(ctx, param, complexIncome);
  154. }
  155. logger.error("addTaxPaymentBackCalculate============end===============");
  156. }
  157. public String getParamContent(String requestId) {
  158. return "select CFParamContent as paramContent from CT_TK_TaskRequestParam where CFTaskID in (select FID from CT_TK_Task where CFRequestId = '" + requestId + "')";
  159. }
  160. public TaxPaymentBackCalculateCollection saveTaxPaymentBackCalculateCollection(Context ctx, JSONObject param, ComplexIncome complexIncome) throws BOSException, EASBizException {
  161. TaxPaymentBackCalculateInfo taxPaymentBackCalculateInfo = new TaxPaymentBackCalculateInfo();
  162. String personId = param.getString("personId");//员工ID
  163. String periodYear = param.getString("periodYear");//统计年
  164. String periodMonth = param.getString("periodMonth");//统计月
  165. String cmpschemeid = param.getString("cmpschemeid");//计算规则ID
  166. String taxItemPlanName = param.getString("taxItemPlanName");//个税项目方案
  167. String taxItemPlanNumber = param.getString("taxItemPlanNumber");//个税项目方案
  168. FilterInfo filterInfo = new FilterInfo();
  169. filterInfo.getFilterItems().add(new FilterItemInfo("person", personId, CompareType.EQUALS));
  170. filterInfo.getFilterItems().add(new FilterItemInfo("periodMonth", periodMonth, CompareType.EQUALS));
  171. filterInfo.getFilterItems().add(new FilterItemInfo("periodYear", periodYear, CompareType.EQUALS));
  172. filterInfo.getFilterItems().add(new FilterItemInfo("cmpscheme", cmpschemeid, CompareType.EQUALS));
  173. EntityViewInfo entityViewInfo = EntityViewInfo.getInstance(filterInfo, null, null);
  174. ////查询税款反算表是否存在该数据
  175. ITaxPaymentBackCalculate iTaxPaymentBackCalculate = TaxPaymentBackCalculateFactory.getLocalInstance(ctx);
  176. TaxPaymentBackCalculateCollection taxPaymentBackCalculateCollection = iTaxPaymentBackCalculate.getTaxPaymentBackCalculateCollection(entityViewInfo);
  177. if (taxPaymentBackCalculateCollection.size() > 0) {
  178. taxPaymentBackCalculateInfo = taxPaymentBackCalculateCollection.get(0);
  179. taxPaymentBackCalculateInfo.setId(taxPaymentBackCalculateCollection.get(0).getId());
  180. }
  181. //员工
  182. taxPaymentBackCalculateInfo.setPerson(PersonFactory.getLocalInstance(ctx).getPersonInfo(new ObjectUuidPK(personId)));
  183. //统计年
  184. taxPaymentBackCalculateInfo.setPeriodYear(periodYear);
  185. //统计月
  186. taxPaymentBackCalculateInfo.setPeriodMonth(periodMonth);
  187. //计算规则
  188. taxPaymentBackCalculateInfo.setCmpscheme(CalSchemeFactory.getLocalInstance(ctx).getCalSchemeInfo(new ObjectUuidPK(cmpschemeid)));
  189. //个税项目方案
  190. taxPaymentBackCalculateInfo.setTaxItemPlan(taxItemPlanName);
  191. //sre 收入额
  192. BigDecimal income = complexIncome.getIncome();
  193. taxPaymentBackCalculateInfo.setSalarySum(income);
  194. //ybtse refundTax 应补退税额
  195. BigDecimal refundTax = complexIncome.getRefundTax();
  196. taxPaymentBackCalculateInfo.setIndividual(refundTax);
  197. IObjectPK save = iTaxPaymentBackCalculate.save(taxPaymentBackCalculateInfo);
  198. logger.error("saveTaxPaymentBackCalculateCollection----------save---" + save);
  199. return taxPaymentBackCalculateCollection;
  200. }
  201. }