SynIncomeTaxDeclareService.java 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308
  1. package com.kingdee.eas.custom.compensation.service;
  2. import cn.com.servyou.dto.ApiResponse;
  3. import cn.com.servyou.dto.declare.DataImportFeedback;
  4. import cn.com.servyou.dto.declare.Feedback;
  5. import cn.com.servyou.rmi.client.ClientProxyFactory;
  6. import cn.com.servyou.service.DeclarationRequest;
  7. import com.alibaba.fastjson.JSONObject;
  8. import com.fasterxml.jackson.databind.ObjectMapper;
  9. import com.kingdee.bos.BOSException;
  10. import com.kingdee.bos.Context;
  11. import com.kingdee.bos.bsf.service.app.IHRMsfService;
  12. import com.kingdee.bos.ctrl.swing.StringUtils;
  13. import com.kingdee.bos.dao.IObjectPK;
  14. import com.kingdee.bos.dao.ormapping.ObjectUuidPK;
  15. import com.kingdee.bos.metadata.entity.*;
  16. import com.kingdee.bos.metadata.query.util.CompareType;
  17. import com.kingdee.bos.util.BOSUuid;
  18. import com.kingdee.eas.basedata.person.IPerson;
  19. import com.kingdee.eas.basedata.person.PersonFactory;
  20. import com.kingdee.eas.basedata.person.PersonInfo;
  21. import com.kingdee.eas.common.EASBizException;
  22. import com.kingdee.eas.custom.shuiyou.interfacelog.LogInfoFactory;
  23. import com.kingdee.eas.custom.shuiyou.interfacelog.LogInfoInfo;
  24. import com.kingdee.eas.custom.shuiyou.task.MessageResult;
  25. import com.kingdee.eas.custom.shuiyou.utils.ClientProxyFactoryUtils;
  26. import com.kingdee.eas.util.app.DbUtil;
  27. import com.kingdee.jdbc.rowset.IRowSet;
  28. import com.kingdee.shr.compensation.TaxDeclareStatusEnum;
  29. import com.kingdee.shr.compensation.app.incomeTax.TaxPersonRecordFactory;
  30. import com.kingdee.shr.compensation.app.incomeTax.TaxPersonRecordInfo;
  31. import com.kingdee.shr.compensation.app.tax.*;
  32. import com.kingdee.shr.compensation.app.tax.base.ITaxIncomeItem;
  33. import com.kingdee.shr.compensation.app.tax.base.TaxIncomeItemFactory;
  34. import com.kingdee.shr.compensation.app.tax.base.TaxIncomeItemInfo;
  35. import com.kingdee.shr.compensation.app.taxCal.ITaxCalConfigDetail;
  36. import com.kingdee.shr.compensation.app.taxCal.TaxCalConfigDetailCollection;
  37. import com.kingdee.shr.compensation.app.taxCal.TaxCalConfigDetailFactory;
  38. import com.kingdee.shr.compensation.app.taxCal.TaxCalConfigDetailInfo;
  39. import org.apache.log4j.Logger;
  40. import java.io.IOException;
  41. import java.math.BigDecimal;
  42. import java.sql.SQLException;
  43. import java.util.*;
  44. /**
  45. * @author qingwu
  46. * @date 2024/9/19
  47. * @apiNote
  48. */
  49. public class SynIncomeTaxDeclareService implements IHRMsfService {
  50. Logger logger = Logger.getLogger("com.kingdee.eas.custom.compensation.service.SynIncomeTaxDeclareService");
  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("SynIncomeTaxDeclareService----------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. ObjectMapper mapper = new ObjectMapper();
  66. try {
  67. SelectorItemCollection sc = new SelectorItemCollection();
  68. sc.add(new SelectorItemInfo("declareStatus"));
  69. //客户端代理工厂
  70. ClientProxyFactory clientProxyFactory = ClientProxyFactoryUtils.getClientProxyFactory();
  71. //算税请求接口
  72. DeclarationRequest declarationRequest = clientProxyFactory.getDeclarationRequest();
  73. //申报数据反馈 requestId:请求Id reportType:申报所得类型[1:综合所得;2:分类所得;3:非居民所得;4:限售股所得]
  74. ApiResponse<DataImportFeedback> feedback = declarationRequest.getDataImportFeedback(requestId, "1");
  75. logInfo.setInterfaceAddress("/gateway/iit/report/getDataImportFeedback");//接口地址
  76. logInfo.setInterfaceName("getFeedback");//接口名
  77. logInfo.setInParameter((String) map.get("paramData"));
  78. logger.error("feedback--------" + mapper.writeValueAsString(feedback));
  79. String status = feedback.getHead().getStatus();
  80. DataImportFeedback body = null;
  81. if ("N".equals(status)) {
  82. //请求失败响应
  83. String msg = feedback.getHead().getMsg();
  84. //throw new BOSException(msg);
  85. logInfo.setStatus("处理中");
  86. return MessageResult.FAILED(msg);
  87. } else {
  88. //调用成功
  89. //请求id
  90. body = feedback.getBody();
  91. logInfo.setOutParameter(mapper.writeValueAsString(feedback));//回参
  92. if (body.getFeedbackState().compareTo("1")==0) {
  93. saveTaxDeclaration(context, param);
  94. logInfo.setStatus("成功");
  95. IIncomeTaxDeclar iId = IncomeTaxDeclarFactory.getLocalInstance(context);
  96. String taxDeclarId= param.get("taxDeclarId").toString();
  97. IncomeTaxDeclarInfo taxDeclarInfo = iId.getIncomeTaxDeclarInfo(new ObjectUuidPK(taxDeclarId));
  98. taxDeclarInfo.setDeclareStatus(TaxDeclareStatusEnum.DECLARE_SUCCESS);
  99. iId.updatePartial(taxDeclarInfo,sc);
  100. }else {
  101. logInfo.setStatus("申报失败");
  102. IIncomeTaxDeclar iId = IncomeTaxDeclarFactory.getLocalInstance(context);
  103. String taxDeclarId = param.get("taxDeclarId").toString();
  104. IncomeTaxDeclarInfo taxDeclarInfo = iId.getIncomeTaxDeclarInfo(new ObjectUuidPK(taxDeclarId));
  105. taxDeclarInfo.setDeclareStatus(TaxDeclareStatusEnum.DECLARE_FAIL);
  106. iId.updatePartial(taxDeclarInfo, sc);
  107. }
  108. }
  109. LogInfoFactory.getLocalInstance(context).addnew(logInfo);
  110. return MessageResult.SUCCESS(mapper.writeValueAsString(body));
  111. } catch (IOException e) {
  112. e.printStackTrace();
  113. logInfo.setErrorInfo(e.getMessage());//错误信息
  114. logInfo.setStatus("失败");
  115. LogInfoFactory.getLocalInstance(context).save(logInfo);
  116. //throw new BOSException(e);
  117. return MessageResult.ERROR(e.getMessage());
  118. }
  119. }
  120. /**
  121. * 保存个税申报结果
  122. *
  123. * @param param
  124. */
  125. public void saveTaxDeclaration(Context ctx, JSONObject param) throws BOSException, EASBizException {
  126. logger.error("saveTaxDeclaration------------------");
  127. //个税申报ID
  128. //String taxDeclarId = param.getString("taxDeclarId");
  129. //个税申报批次号
  130. String taxDeclarBatchNo = param.getString("taxDeclarBatchNo");
  131. IIncomeTaxDeclar iIncomeTaxDeclar = IncomeTaxDeclarFactory.getLocalInstance(ctx);
  132. IncomeTaxDeclarCollection incomeTaxDeclarCollection = iIncomeTaxDeclar.getIncomeTaxDeclarCollection("where batchNo = '" + taxDeclarBatchNo + "'");
  133. SelectorItemCollection updateSic = new SelectorItemCollection();
  134. updateSic.add("declareStatus");
  135. if (incomeTaxDeclarCollection.size() > 0) {
  136. IncomeTaxDeclarInfo incomeTaxDeclarInfo = incomeTaxDeclarCollection.get(0);
  137. incomeTaxDeclarInfo.setDeclareStatus(TaxDeclareStatusEnum.DECLARE_SUCCESS);
  138. iIncomeTaxDeclar.updatePartial(incomeTaxDeclarInfo, updateSic);
  139. }
  140. ////个税应用+税款计算最终拆分明细表
  141. //ITaxCalConfigDetail taxCalConfigDetail = TaxCalConfigDetailFactory.getLocalInstance(ctx);
  142. //TaxCalConfigDetailCollection taxCalConfigDetailCollection = taxCalConfigDetail.getTaxCalConfigDetailCollection("select *,incomeItem.*, person.* where batchNo = '" + taxDeclarBatchNo + "' and state = '20'");
  143. //for (int i = 0; i < taxCalConfigDetailCollection.size(); i++) {
  144. // TaxCalConfigDetailInfo taxCalConfigDetailInfo = taxCalConfigDetailCollection.get(i);
  145. // //员工信息
  146. // PersonInfo person = taxCalConfigDetailInfo.getPerson();
  147. //}
  148. try {
  149. //个税申报表
  150. ITaxDeclaration iTaxDeclaration = TaxDeclarationFactory.getLocalInstance(ctx);
  151. //个税项目
  152. ITaxIncomeItem iTaxIncomeItem = TaxIncomeItemFactory.getLocalInstance(ctx);
  153. IPerson iPerson = PersonFactory.getLocalInstance(ctx);
  154. List<Map<String, Object>> taxDeclarationDate = getTaxDeclarationDate(ctx, taxDeclarBatchNo);
  155. for (int i = 0; i < taxDeclarationDate.size(); i++) {
  156. Map<String, Object> map = taxDeclarationDate.get(i);
  157. TaxIncomeItemInfo taxIncomeItemInfo = iTaxIncomeItem.getTaxIncomeItemCollection("where id = '" + map.get("incomeitmemId") + "'").get(0);
  158. logger.error("taxIncomeItemInfo------------------" + taxIncomeItemInfo);
  159. FilterInfo filterInfo = new FilterInfo();
  160. filterInfo.getFilterItems().add(new FilterItemInfo("person", map.get("personId"), CompareType.EQUALS));
  161. filterInfo.getFilterItems().add(new FilterItemInfo("taxUnit", map.get("taxunitId"), CompareType.EQUALS));
  162. filterInfo.getFilterItems().add(new FilterItemInfo("taxPeriodBegin", map.get("periodbegin"), CompareType.EQUALS));
  163. filterInfo.getFilterItems().add(new FilterItemInfo("taxPeriodEnd", map.get("periodend"), CompareType.EQUALS));
  164. filterInfo.getFilterItems().add(new FilterItemInfo("proceedItem", taxIncomeItemInfo.getName(), CompareType.EQUALS));
  165. EntityViewInfo entityViewInfo = EntityViewInfo.getInstance(filterInfo, null, null);
  166. TaxDeclarationCollection taxDeclarationCollection = iTaxDeclaration.getTaxDeclarationCollection(entityViewInfo);
  167. logger.error("taxDeclarationCollection.size------------------" + taxDeclarationCollection.size());
  168. if (taxDeclarationCollection.size() <= 0) {
  169. TaxDeclarationInfo taxDeclarationInfo = new TaxDeclarationInfo();
  170. //员工
  171. PersonInfo personInfo = iPerson.getPersonInfo(new ObjectUuidPK((String) map.get("personId")));
  172. taxDeclarationInfo.setPerson(personInfo);
  173. //证件号
  174. taxDeclarationInfo.setIdNO(personInfo.getIdCardNO());
  175. //证件类型
  176. TaxPersonRecordInfo taxPersonRecordInfo = TaxPersonRecordFactory.getLocalInstance(ctx).getTaxPersonRecordCollection("where person = '" + personInfo.getId() + "'").get(0);
  177. String alias = taxPersonRecordInfo.getCardType().getAlias();
  178. taxDeclarationInfo.setIdType(alias);
  179. //纳税单位
  180. TaxUnitInfo taxUnitInfo = new TaxUnitInfo();
  181. taxUnitInfo.setId(BOSUuid.read((String) map.get("taxunitId")));
  182. taxDeclarationInfo.setTaxUnit(taxUnitInfo);
  183. //税款所属期间起始时间
  184. taxDeclarationInfo.setTaxPeriodBegin((Date) map.get("periodbegin"));
  185. //税款所属期间截止时间
  186. taxDeclarationInfo.setTaxPeriodEnd((Date) map.get("periodend"));
  187. //个税项目
  188. taxDeclarationInfo.setProceedItem(taxIncomeItemInfo.getName());
  189. taxDeclarationInfo.setCost((BigDecimal) map.get("t25"));//费用
  190. taxDeclarationInfo.setIncome((BigDecimal) map.get(" t1"));//收入
  191. taxDeclarationInfo.setExemptIncome((BigDecimal) map.get("t2"));//免税收入
  192. taxDeclarationInfo.setBasicPension((BigDecimal) map.get("t3"));//基本养老保险费
  193. taxDeclarationInfo.setBasicMedical((BigDecimal) map.get("t4"));//基本医疗保险费
  194. taxDeclarationInfo.setUnemployment((BigDecimal) map.get("t5"));//失业保险费
  195. taxDeclarationInfo.setHousingFund((BigDecimal) map.get("t6"));//住房公积金
  196. taxDeclarationInfo.setChildEducateSum((BigDecimal) map.get("t7"));//累计子女教育
  197. taxDeclarationInfo.setContinueEducateSum((BigDecimal) map.get("t8"));//累计继续教育
  198. taxDeclarationInfo.setLoanInterestSum((BigDecimal) map.get("t9"));//累计住房贷款利息
  199. taxDeclarationInfo.setHousingRentSum((BigDecimal) map.get("t10"));//累计住房租金
  200. taxDeclarationInfo.setOldSupportSum((BigDecimal) map.get("t11"));//累计赡养老人
  201. taxDeclarationInfo.setIncomeSum((BigDecimal) map.get("t20"));//累计收入额
  202. taxDeclarationInfo.setDeductionSum((BigDecimal) map.get("t24"));//累计减除费用
  203. taxDeclarationInfo.setSpecialDeductSum((BigDecimal) map.get("t26"));//累计专项扣除
  204. taxDeclarationInfo.setOtherDeductionSum((BigDecimal) map.get("t28"));//累计其他扣除
  205. taxDeclarationInfo.setAllowDonationSum((BigDecimal) map.get("t29"));//累计准予扣除的捐赠
  206. taxDeclarationInfo.setTaxableIncomeSum((BigDecimal) map.get("t30"));//累计应纳税所得额
  207. taxDeclarationInfo.setTaxRatio((BigDecimal) map.get("t31"));//税率
  208. taxDeclarationInfo.setQuickDeduct((BigDecimal) map.get("t32"));//速算扣除数
  209. taxDeclarationInfo.setTaxPayableSum((BigDecimal) map.get("t33"));//累计应纳税额
  210. taxDeclarationInfo.setTaxCreditSum((BigDecimal) map.get("t34"));//累计减免税额
  211. taxDeclarationInfo.setTaxSupOrRefund((BigDecimal) map.get("t38"));//应补/退税额
  212. taxDeclarationInfo.setInFantSum((BigDecimal) map.get("t45"));//累计婴幼儿照护费用
  213. taxDeclarationInfo.setPersonalPension((BigDecimal) map.get("t46"));//累计个人养老金
  214. logger.error("taxDeclarationInfo------------------" + taxDeclarationInfo);
  215. IObjectPK save = iTaxDeclaration.save(taxDeclarationInfo);
  216. logger.error("taxDeclarationInfo----------save--------" + save);
  217. }
  218. }
  219. } catch (SQLException e) {
  220. e.printStackTrace();
  221. throw new RuntimeException(e);
  222. } catch (EASBizException e) {
  223. throw new RuntimeException(e);
  224. }
  225. }
  226. /***
  227. * 封装个税申报数据
  228. * @param batchNo
  229. * @return
  230. */
  231. public List<Map<String, Object>> getTaxDeclarationDate(Context ctx, String batchNo) throws BOSException, SQLException {
  232. List list = new ArrayList();
  233. String sql = getSql(batchNo);
  234. logger.error("getTaxDeclarationDate------sql--------" + sql);
  235. IRowSet iRowSet = DbUtil.executeQuery(ctx, sql);
  236. while (iRowSet.next()) {
  237. Map map = new HashMap();
  238. map.put("personId", iRowSet.getString("personId"));//员工Id
  239. map.put("taxunitId", iRowSet.getString("taxunitId"));//纳税单位Id
  240. map.put("periodbegin", iRowSet.getDate("periodbegin"));//税款所属期间起始时间
  241. map.put("periodend", iRowSet.getDate("periodend"));//税款所属期间截止时间
  242. map.put("incomeitmemId", iRowSet.getString("incomeitmemId"));//个税项目Id
  243. logger.error("getTaxDeclarationDate------iRowSet.getBigDecimal(t1)--------" + iRowSet.getBigDecimal("t1"));
  244. map.put("t1", iRowSet.getBigDecimal("t1") == null ? BigDecimal.ZERO : iRowSet.getBigDecimal("t1"));//本期免税收入
  245. map.put("t2", iRowSet.getBigDecimal("t2") == null ? BigDecimal.ZERO : iRowSet.getBigDecimal("t2"));//基本养老保险费
  246. map.put("t3", iRowSet.getBigDecimal("t3") == null ? BigDecimal.ZERO : iRowSet.getBigDecimal("t3"));//基本医疗保险费
  247. map.put("t4", iRowSet.getBigDecimal("t4") == null ? BigDecimal.ZERO : iRowSet.getBigDecimal("t4"));//失业保险费
  248. map.put("t5", iRowSet.getBigDecimal("t5") == null ? BigDecimal.ZERO : iRowSet.getBigDecimal("t5"));//住房公积金
  249. map.put("t6", iRowSet.getBigDecimal("t6") == null ? BigDecimal.ZERO : iRowSet.getBigDecimal("t6"));//累计子女教育
  250. map.put("t7", iRowSet.getBigDecimal("t7") == null ? BigDecimal.ZERO : iRowSet.getBigDecimal("t7"));//累计继续教育
  251. map.put("t8", iRowSet.getBigDecimal("t8") == null ? BigDecimal.ZERO : iRowSet.getBigDecimal("t8"));//累计住房贷款利息
  252. map.put("t9", iRowSet.getBigDecimal("t9") == null ? BigDecimal.ZERO : iRowSet.getBigDecimal("t9"));//累计住房租金
  253. map.put("t10", iRowSet.getBigDecimal("t10") == null ? BigDecimal.ZERO : iRowSet.getBigDecimal("t10"));//累计赡养老人
  254. map.put("t25", iRowSet.getBigDecimal("t25") == null ? BigDecimal.ZERO : iRowSet.getBigDecimal("t25"));//本期收入
  255. map.put("t11", iRowSet.getBigDecimal("t11") == null ? BigDecimal.ZERO : iRowSet.getBigDecimal("t11"));//其他
  256. map.put("t15", iRowSet.getBigDecimal("t15") == null ? BigDecimal.ZERO : iRowSet.getBigDecimal("t15"));//本期累计收入
  257. map.put("t20", iRowSet.getBigDecimal("t20") == null ? BigDecimal.ZERO : iRowSet.getBigDecimal("t20"));//本期累计免税收入
  258. map.put("t22", iRowSet.getBigDecimal("t22") == null ? BigDecimal.ZERO : iRowSet.getBigDecimal("t22"));//累计减除费用
  259. map.put("t24", iRowSet.getBigDecimal("t24") == null ? BigDecimal.ZERO : iRowSet.getBigDecimal("t24"));//累计专项扣除
  260. map.put("t26", iRowSet.getBigDecimal("t26") == null ? BigDecimal.ZERO : iRowSet.getBigDecimal("t26"));//累计其他扣除
  261. map.put("t28", iRowSet.getBigDecimal("t28") == null ? BigDecimal.ZERO : iRowSet.getBigDecimal("t28"));//累计准予扣除的捐赠
  262. map.put("t29", iRowSet.getBigDecimal("t29") == null ? BigDecimal.ZERO : iRowSet.getBigDecimal("t29"));//累计应纳税所得额
  263. map.put("t30", iRowSet.getBigDecimal("t30") == null ? BigDecimal.ZERO : iRowSet.getBigDecimal("t30"));//税率
  264. map.put("t31", iRowSet.getBigDecimal("t31") == null ? BigDecimal.ZERO : iRowSet.getBigDecimal("t31"));//速算扣除数
  265. map.put("t32", iRowSet.getBigDecimal("t32") == null ? BigDecimal.ZERO : iRowSet.getBigDecimal("t32"));//累计应纳税额
  266. map.put("t33", iRowSet.getBigDecimal("t33") == null ? BigDecimal.ZERO : iRowSet.getBigDecimal("t33"));//累计减免税额
  267. map.put("t34", iRowSet.getBigDecimal("t34") == null ? BigDecimal.ZERO : iRowSet.getBigDecimal("t34"));//累计应扣缴税额
  268. map.put("t35", iRowSet.getBigDecimal("t35") == null ? BigDecimal.ZERO : iRowSet.getBigDecimal("t35"));//累计已预缴税额
  269. map.put("t36", iRowSet.getBigDecimal("t36") == null ? BigDecimal.ZERO : iRowSet.getBigDecimal("t36"));//本期应补(退)税额
  270. map.put("t38", iRowSet.getBigDecimal("t38") == null ? BigDecimal.ZERO : iRowSet.getBigDecimal("t38"));//备注
  271. map.put("t41", iRowSet.getBigDecimal("t41") == null ? BigDecimal.ZERO : iRowSet.getBigDecimal("t41"));//累计婴幼儿照护费用
  272. map.put("t45", iRowSet.getBigDecimal("t45") == null ? BigDecimal.ZERO : iRowSet.getBigDecimal("t45"));//累计个人养老金
  273. list.add(map);
  274. }
  275. return list;
  276. }
  277. /**
  278. * 查询个税申报人员数据
  279. *
  280. * @param batchNo
  281. * @return
  282. */
  283. public String getSql(String batchNo) {
  284. StringBuilder sb = new StringBuilder();
  285. sb.append("select").append("\n");
  286. sb.append(" taxCalConfigDetail.FPERSONID as personId,").append("\n");
  287. sb.append(" taxCalConfigDetail.FTAXUNITID as taxunitId,").append("\n");
  288. sb.append("taxCalConfigDetail.FPERIODBEGIN as periodbegin,\n").append("\n");
  289. sb.append("taxCalConfigDetail.FPERIODEND as periodend,\n").append("\n");
  290. sb.append("taxCalConfigDetail.FINCOMEITEMID as incomeitmemId,\n").append("\n");
  291. sb.append(" t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t15,t20,t22,t24,t25,t26,t28,t29,t30,t31,t32,t33,t34,t35,t36,t38,t41,t45,t46\n").append("\n");
  292. sb.append(" from T_HR_STaxCalConfigDetail taxCalConfigDetail\n").append("\n");
  293. sb.append("where").append("\n");
  294. sb.append("FBATCHNO = '").append(batchNo).append("'").append("\n");
  295. return sb.toString();
  296. }
  297. }