CmpCalDynamicListHandlerExExEx.java 65 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188
  1. package com.kingdee.eas.custom.compensation.handler;
  2. import cn.com.servyou.dto.ApiResponse;
  3. import cn.com.servyou.dto.AsyncResult;
  4. import cn.com.servyou.dto.tax.*;
  5. import cn.com.servyou.rmi.client.ClientProxyFactory;
  6. import cn.com.servyou.service.TaxRequest;
  7. import com.alibaba.fastjson.JSON;
  8. import com.alibaba.fastjson.JSONObject;
  9. import com.fasterxml.jackson.core.JsonProcessingException;
  10. import com.fasterxml.jackson.databind.ObjectMapper;
  11. import com.kingdee.bos.BOSException;
  12. import com.kingdee.bos.Context;
  13. import com.kingdee.bos.dao.IObjectPK;
  14. import com.kingdee.bos.dao.ormapping.ObjectUuidPK;
  15. import com.kingdee.bos.metadata.entity.EntityViewInfo;
  16. import com.kingdee.bos.metadata.entity.FilterInfo;
  17. import com.kingdee.bos.metadata.entity.FilterItemInfo;
  18. import com.kingdee.bos.metadata.entity.SelectorItemCollection;
  19. import com.kingdee.bos.metadata.query.util.CompareType;
  20. import com.kingdee.eas.basedata.hraux.NationalityInfo;
  21. import com.kingdee.eas.basedata.person.IPerson;
  22. import com.kingdee.eas.basedata.person.PersonFactory;
  23. import com.kingdee.eas.basedata.person.PersonInfo;
  24. import com.kingdee.eas.common.EASBizException;
  25. import com.kingdee.eas.custom.compensation.vo.TaxUnitAndPerson;
  26. import com.kingdee.eas.custom.individualback.ITaxPaymentBackCalculate;
  27. import com.kingdee.eas.custom.individualback.TaxPaymentBackCalculateCollection;
  28. import com.kingdee.eas.custom.individualback.TaxPaymentBackCalculateFactory;
  29. import com.kingdee.eas.custom.individualback.TaxPaymentBackCalculateInfo;
  30. import com.kingdee.eas.custom.shuiyou.interfacelog.LogInfoFactory;
  31. import com.kingdee.eas.custom.shuiyou.interfacelog.LogInfoInfo;
  32. import com.kingdee.eas.custom.shuiyou.six.osf.vo.SixTConfirmInfo;
  33. import com.kingdee.eas.custom.shuiyou.task.TaskCatalogEnum;
  34. import com.kingdee.eas.custom.shuiyou.uitls.ISYUtilsFacade;
  35. import com.kingdee.eas.custom.shuiyou.uitls.SYUtilsFacadeFactory;
  36. import com.kingdee.eas.custom.shuiyou.utils.ClientProxyFactoryUtils;
  37. import com.kingdee.eas.hr.emp.IPersonPosition;
  38. import com.kingdee.eas.hr.emp.PersonPositionCollection;
  39. import com.kingdee.eas.hr.emp.PersonPositionFactory;
  40. import com.kingdee.eas.hr.emp.PersonPositionInfo;
  41. import com.kingdee.eas.util.app.DbUtil;
  42. import com.kingdee.jdbc.rowset.IRowSet;
  43. import com.kingdee.shr.base.syssetting.context.SHRContext;
  44. import com.kingdee.shr.base.syssetting.exception.SHRWebException;
  45. import com.kingdee.shr.base.syssetting.exception.ShrWebBizException;
  46. import com.kingdee.shr.base.syssetting.web.json.JSONUtils;
  47. import com.kingdee.shr.compensation.*;
  48. import com.kingdee.shr.compensation.app.incomeTax.*;
  49. import com.kingdee.shr.compensation.app.tax.ITaxUnit;
  50. import com.kingdee.shr.compensation.app.tax.TaxItemPlanInfo;
  51. import com.kingdee.shr.compensation.app.tax.TaxUnitFactory;
  52. import com.kingdee.shr.compensation.app.tax.TaxUnitInfo;
  53. import com.kingdee.shr.custom.compensation.accrue.handler.CmpCalDynamicListHandlerExEx;
  54. import com.kingdee.util.StringUtils;
  55. import org.apache.log4j.Logger;
  56. import org.springframework.ui.ModelMap;
  57. import javax.servlet.http.HttpServletRequest;
  58. import javax.servlet.http.HttpServletResponse;
  59. import java.math.BigDecimal;
  60. import java.sql.SQLException;
  61. import java.text.SimpleDateFormat;
  62. import java.time.LocalDateTime;
  63. import java.time.format.DateTimeFormatter;
  64. import java.util.*;
  65. /**
  66. * @author qingwu
  67. * @date 2024/8/30
  68. * @apiNote BackCalculateService 反算服务 TaxPaymentBackCalculate
  69. */
  70. public class CmpCalDynamicListHandlerExExEx extends CmpCalDynamicListHandlerExEx {
  71. private Context ctx = SHRContext.getInstance().getContext();
  72. Logger logger = Logger.getLogger("com.kingdee.eas.custom.compensation.handler.CmpCalDynamicListHandlerExExEx");
  73. /**
  74. * 反算同步
  75. *
  76. * @param request
  77. * @param response
  78. * @param modelMap
  79. * @throws SHRWebException
  80. * @throws BOSException
  81. * @throws EASBizException
  82. */
  83. public void taxPaymentBackSynAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws SHRWebException, BOSException {
  84. logger.error("taxPaymentBackSynAction---------starst-------------");
  85. //计算规则ID
  86. String cmpschemeid = request.getParameter("cmpschemeid");
  87. if (StringUtils.isEmpty(cmpschemeid)) {
  88. throw new ShrWebBizException("计算规则ID不可为空!!");
  89. }
  90. Map msgMap = new HashMap();
  91. try {
  92. //薪酬项目
  93. Map cmpItemMap = new HashMap();
  94. ICmpItem iCmpItem = CmpItemFactory.getLocalInstance(ctx);
  95. //GS014:当月个税 JZT02:税后保应发
  96. CmpItemCollection cmpItemCollection = iCmpItem.getCmpItemCollection("where number in ('GS014','JZT02')");
  97. for (int i = 0; i < cmpItemCollection.size(); i++) {
  98. CmpItemInfo cmpItemInfo = cmpItemCollection.get(i);
  99. cmpItemMap.put(cmpItemInfo.getNumber(), cmpItemInfo.getFieldSn());
  100. }
  101. logger.error("cmpItemMap----------------------" + cmpItemMap);
  102. //税款反算
  103. ITaxPaymentBackCalculate iTaxPaymentBackCalculate = TaxPaymentBackCalculateFactory.getLocalInstance(ctx);
  104. TaxPaymentBackCalculateCollection taxPaymentBackCalculateCollection = iTaxPaymentBackCalculate.getTaxPaymentBackCalculateCollection("where cmpscheme = '" + cmpschemeid + "'");
  105. if (taxPaymentBackCalculateCollection.size() <= 0) {
  106. throw new ShrWebBizException("税款反算未找到该计算规则数据,请进行税款反算提交操作后再同步!!");
  107. }
  108. for (int i = 0; i < taxPaymentBackCalculateCollection.size(); i++) {
  109. TaxPaymentBackCalculateInfo taxPaymentBackCalculateInfo = taxPaymentBackCalculateCollection.get(i);
  110. //税后保应发
  111. BigDecimal salarySum = taxPaymentBackCalculateInfo.getSalarySum();
  112. //当月个税
  113. BigDecimal individual = taxPaymentBackCalculateInfo.getIndividual();
  114. //员工信息
  115. PersonInfo person = taxPaymentBackCalculateInfo.getPerson();
  116. //计算规则
  117. CalSchemeInfo cmpscheme = taxPaymentBackCalculateInfo.getCmpscheme();
  118. // 税后保应发序号 税后保应发 当月个税序号 当月个税 计算规则ID 员工ID
  119. String updateSql = String.format("update T_HR_SCmpCalTable set s%s = '%s' , s%s = '%s' where FCALSCHEMEID = '%s' and FPERSONID = '%s'",
  120. cmpItemMap.get("JZT02"), salarySum.toString(), cmpItemMap.get("GS014"), individual, cmpscheme.getId(), person.getId());
  121. logger.error("updateSql---------" + updateSql);
  122. DbUtil.execute(ctx, updateSql);
  123. //String updateSql = "select * from T_HR_SCmpCalTable where FCALSCHEMEID = 'FqEAAAe2vAv/zfKx' and FPERSONID = '383Uzn7KSea0Y+B08YP6qIDvfe0='";
  124. //update T_HR_SCmpCalTable set s1 , s2 where FCALSCHEMEID = '' and FPERSONID = ''
  125. }
  126. msgMap.put("msg", "同步成功");
  127. JSONUtils.SUCCESS(msgMap);
  128. } catch (Exception e) {
  129. e.printStackTrace();
  130. throw new ShrWebBizException(e);
  131. }
  132. }
  133. /**
  134. * 税款反算
  135. *
  136. * @param request
  137. * @param response
  138. * @param modelMap
  139. * @throws ShrWebBizException
  140. * @throws BOSException
  141. */
  142. public void taxPaymentBackCalculateAction(HttpServletRequest request, HttpServletResponse response, ModelMap
  143. modelMap) throws SHRWebException, BOSException, EASBizException {
  144. //计算规则ID
  145. String cmpschemeid = request.getParameter("cmpschemeid");
  146. if (StringUtils.isEmpty(cmpschemeid)) {
  147. throw new ShrWebBizException("计算规则ID不可为空!!");
  148. }
  149. Map rseMap = new HashMap();
  150. List resList = new ArrayList();
  151. //接口日志实体
  152. LogInfoInfo logInfo = new LogInfoInfo();
  153. //入口
  154. logInfo.setEntrance(this.getClass().getName());
  155. logInfo.setBizDate(new Date());
  156. try {
  157. //计算规则
  158. ICalScheme iCalScheme = CalSchemeFactory.getLocalInstance(ctx);
  159. ITaxUnit iTaxUnit = TaxUnitFactory.getLocalInstance(ctx);
  160. IPerson iPerson = PersonFactory.getLocalInstance(ctx);
  161. SelectorItemCollection sic = new SelectorItemCollection();
  162. sic.add("taxItemPlanList.taxItemPlan.name");
  163. sic.add("taxItemPlanList.taxItemPlan.number");
  164. sic.add("*");
  165. FilterInfo filterInfo = new FilterInfo();
  166. filterInfo.getFilterItems().add(new FilterItemInfo("id", cmpschemeid, CompareType.EQUALS));
  167. EntityViewInfo entityViewInfo = EntityViewInfo.getInstance(filterInfo, sic, null);
  168. CalSchemeInfo calSchemeInfo = iCalScheme.getCalSchemeCollection(entityViewInfo).get(0);
  169. //获取当前的薪酬核算
  170. CmpCalTableCollection cmpCalTableCollection = getCalSchemeColl(calSchemeInfo.getId().toString(), calSchemeInfo.getPeriodYear(), calSchemeInfo.getPeriodMonth());
  171. logger.error("cmpCalTableCollection--------" + cmpCalTableCollection.size());
  172. //获取所有人和纳税单位
  173. List<TaxUnitAndPerson> taxUnitAndPeople = new ArrayList();
  174. if (cmpCalTableCollection.size() > 0) {
  175. for (int i = 0; i < cmpCalTableCollection.size(); i++) {
  176. String personId = cmpCalTableCollection.get(i).getPerson().getId().toString();
  177. //查询是否存在税后保实发
  178. Integer abroadIncome = getAbroadIncome(personId, cmpschemeid);
  179. logger.error("abroadIncome-----------" + personId + "--------------" + cmpschemeid);
  180. logger.error("abroadIncome-----------" + abroadIncome);
  181. if (abroadIncome != null && abroadIncome != 0) {
  182. //获取纳税单位
  183. String sql = getSalaryOrgMappingByPersonId(personId);
  184. logger.error("getSalaryOrgMappingByPersonId--------" + sql);
  185. IRowSet iRowSet = DbUtil.executeQuery(ctx, sql);
  186. String taxUnitId = null;
  187. while (iRowSet.next()) {
  188. taxUnitId = iRowSet.getString("taxunit");
  189. }
  190. if (!StringUtils.isEmpty(taxUnitId)) {
  191. //throw new ShrWebBizException("员工ID:" + personId + "未获取到纳税单位!!");
  192. TaxUnitAndPerson taxUnitAndPerson = new TaxUnitAndPerson(taxUnitId, personId);
  193. taxUnitAndPeople.add(taxUnitAndPerson);
  194. }
  195. }
  196. }
  197. }
  198. logger.error("taxUnitAndPeople-----------" + taxUnitAndPeople);
  199. // 通过纳税单位分组
  200. Map<String, List<TaxUnitAndPerson>> groupedPeople = new HashMap<>();
  201. for (TaxUnitAndPerson taxUnitAndPerson : taxUnitAndPeople) {
  202. String taxunitId = taxUnitAndPerson.getTaxunitId();
  203. if (!groupedPeople.containsKey(taxunitId)) {
  204. groupedPeople.put(taxunitId, new ArrayList<>());
  205. }
  206. groupedPeople.get(taxunitId).add(taxUnitAndPerson);
  207. }
  208. logger.error("groupedPeople-----------" + groupedPeople);
  209. // 输出分组结果
  210. for (Map.Entry<String, List<TaxUnitAndPerson>> entry : groupedPeople.entrySet()) {
  211. logger.error("输出分组结果------------start");
  212. logger.error("taxunitId: " + entry.getKey());
  213. //自定义类 反算服务
  214. SixTConfirmInfo sixTConfirmInfo = new SixTConfirmInfo();
  215. //外部业务编号
  216. sixTConfirmInfo.setBizNo(UUID.randomUUID().toString().replace("-", ""));
  217. //纳税单位
  218. String taxunitId = entry.getKey();
  219. TaxUnitInfo taxUnitInfo = iTaxUnit.getTaxUnitInfo("where id = '" + taxunitId + "'");
  220. //个税方案
  221. TaxItemPlanInfo taxItemPlan = calSchemeInfo.getTaxItemPlanList().get(0).getTaxItemPlan();
  222. String taxItemPlanNumber = taxItemPlan.getNumber();
  223. String taxItemPlanName = taxItemPlan.getName();
  224. JSONObject jsonObject = new JSONObject();
  225. jsonObject.put("periodYear", calSchemeInfo.getPeriodYear());
  226. jsonObject.put("periodMonth", calSchemeInfo.getPeriodMonth());
  227. jsonObject.put("cmpschemeid", cmpschemeid);
  228. jsonObject.put("taxItemPlanName", taxItemPlanName);
  229. jsonObject.put("taxItemPlanNumber", taxItemPlanNumber);
  230. logger.error("jsonObject-------------" + jsonObject);
  231. //反算服务
  232. ClientProxyFactory clientProxyFactory = ClientProxyFactoryUtils.getClientProxyFactory();
  233. //算税请求接口
  234. TaxRequest taxRequest = clientProxyFactory.getTaxRequest();
  235. //获取请求参数
  236. CalculateIndividualIncomeTaxRequest calculateIndividualIncomeTaxRequest = getCalculateIndividualIncomeTaxRequest(entry, taxUnitInfo, taxItemPlanNumber, taxItemPlanName, cmpschemeid, logInfo);
  237. //调用反算服务接口
  238. ApiResponse<AsyncResult> asyncResultApiResponse = clientProxyFactory.getTaxRequest().reverseCalculateASynIndividualIncomeTax(calculateIndividualIncomeTaxRequest);
  239. logger.error("asyncResultApiResponse-----getCode-------" + asyncResultApiResponse.getHead().getCode());
  240. logger.error("asyncResultApiResponse-----getMsg--------" + asyncResultApiResponse.getHead().getMsg());
  241. if (asyncResultApiResponse.getHead().getCode().equals("00000000")) {
  242. AsyncResult body = asyncResultApiResponse.getBody();
  243. String requestId = body.getRequestId();
  244. logger.error("requestId-----" + requestId);
  245. //查询反算反馈结果
  246. ISYUtilsFacade isyUtilsFacade = SYUtilsFacadeFactory.getLocalInstance(ctx);
  247. //backTask(url,requestId,回调osf服务,自定义参数,任务类型)
  248. //isyUtilsFacade.backTask(isyUtilsFacade.getConfig().get("ip") + "/gateway/iit/reverseCalculateTax/getASynIndividualIncomeTaxFeedback", requestId, "synIndividualIncomeTaxService", jsonObject.toString(), TaskCatalogEnum.CAL_GET);
  249. JSONObject json = new JSONObject();
  250. json.put("requestId", requestId);
  251. json.put("param", jsonObject.toString());
  252. isyUtilsFacade.addTask("synIndividualIncomeTaxService", json.toJSONString(), TaskCatalogEnum.UN_CAL_GET, "");
  253. //isyUtilsFacade.backTask("https://test-openapi.17win.com/gateway/iit/reverseCalculateTax/getASynIndividualIncomeTaxFeedback", requestId, "synIndividualIncomeTaxService", jsonObject.toString(), TaskCatalogEnum.CAL_GET);
  254. //查询反算反馈结果
  255. //ISYUtilsFacade isyUtilsFacade = SYUtilsFacadeFactory.getLocalInstance(ctx);
  256. //backTask(url,requestId,回调osf服务,自定义参数,任务类型)
  257. //isyUtilsFacade.backTask(isyUtilsFacade.getConfig().get("ip") + "/gateway/iit/reverseCalculateTax/getASynIndividualIncomeTaxFeedback", requestId, "synIndividualIncomeTaxService", "", TaskCatalogEnum.CAL_GET);
  258. //isyUtilsFacade.backTask("https://test-openapi.17win.com/gateway/iit/reverseCalculateTax/getASynIndividualIncomeTaxFeedback", requestId, "synIndividualIncomeTaxService", jsonObject.toString(), TaskCatalogEnum.CAL_GET);
  259. //ApiResponse<CalculateTaxResultRequest> aSynIndividualIncomeTaxFeedback = null;
  260. //boolean istrue = true;
  261. //while (istrue) {
  262. // //ApiResponse<CalculateTaxResultRequest> aSynIndividualIncomeTaxFeedback = taxRequest.getReverseASynIndividualIncomeTaxFeedback(requestId);
  263. // aSynIndividualIncomeTaxFeedback = taxRequest.getReverseASynIndividualIncomeTaxFeedback(requestId);
  264. // //ApiResponse<CalculateTaxResultRequest> aSynIndividualIncomeTaxFeedback =taxRequest.getReverseASynIndividualIncomeTaxFeedback("9a538f46af784ec6b78fa6e2e10e7037");
  265. // String code = aSynIndividualIncomeTaxFeedback.getHead().getCode();
  266. // if (!"100004".equals(code)) {
  267. // istrue = false;
  268. // }
  269. // logger.error("getCode---" + aSynIndividualIncomeTaxFeedback.getHead().getCode());
  270. // logger.error("getMsg---" + aSynIndividualIncomeTaxFeedback.getHead().getMsg());
  271. // // 等待一段时间再进行下一次轮询,这里设置为 5 秒(5000 毫秒)
  272. // Thread.sleep(3000);
  273. //}
  274. //CalculateTaxResultRequest resBody = aSynIndividualIncomeTaxFeedback.getBody();
  275. ////个税反算保存方法
  276. //String saveId = addTaxPaymentBackCalculate(resBody, jsonObject);
  277. //resList.add(saveId);
  278. }
  279. }
  280. rseMap.put("msg", "已增加至后台事务中执行!");
  281. } catch (Exception e) {
  282. e.printStackTrace();
  283. logInfo.setErrorInfo(e.getMessage());//错误信息
  284. LogInfoFactory.getLocalInstance(ctx).save(logInfo);
  285. rseMap.put("msg", e.getMessage());
  286. throw new SHRWebException(e);
  287. }
  288. JSONUtils.SUCCESS(rseMap);
  289. }
  290. /**
  291. * 获取请求参数
  292. *
  293. * @param entry
  294. * @param taxUnitInfo
  295. * @param taxItemPlanNumber
  296. * @param taxItemPlanName
  297. * @param cmpschemeid
  298. * @param logInfo
  299. * @throws BOSException
  300. * @throws EASBizException
  301. * @throws SQLException
  302. * @throws JsonProcessingException
  303. */
  304. private CalculateIndividualIncomeTaxRequest getCalculateIndividualIncomeTaxRequest
  305. (Map.Entry<String, List<TaxUnitAndPerson>> entry, TaxUnitInfo taxUnitInfo, String taxItemPlanNumber, String
  306. taxItemPlanName, String cmpschemeid, LogInfoInfo logInfo) throws
  307. BOSException, EASBizException, SQLException, JsonProcessingException {
  308. CalculateIndividualIncomeTaxRequest calculateIndividualIncomeTaxRequest = new CalculateIndividualIncomeTaxRequest();
  309. //外部业务编号
  310. String replace = UUID.randomUUID().toString().replace("-", "");
  311. logger.error("BizNo" + replace);
  312. calculateIndividualIncomeTaxRequest.setBizNo(replace);
  313. //企业名称(纳税单位)
  314. calculateIndividualIncomeTaxRequest.setName(taxUnitInfo.getName());
  315. //calculateIndividualIncomeTaxRequest.setName("荆州九州通医药有限公司00");
  316. //申报密码
  317. logger.error("taxUnitInfo----" + taxUnitInfo);
  318. logger.error("declPassword----" + taxUnitInfo.getDeclPassword());
  319. String sbmm = new String(Base64.getDecoder().decode(taxUnitInfo.getDeclPassword()));
  320. //String sbmm = new String(Base64.getDecoder().decode("QWExMjM0NTY="));
  321. logger.error("sbmm----" + sbmm);
  322. calculateIndividualIncomeTaxRequest.setDeclarePassword(sbmm);
  323. //密码类型
  324. calculateIndividualIncomeTaxRequest.setPasswordType(null);
  325. //实名账号
  326. calculateIndividualIncomeTaxRequest.setRealNameAccount(null);
  327. //实名密码
  328. calculateIndividualIncomeTaxRequest.setRealNamePassword(null);
  329. //加密实名密码
  330. calculateIndividualIncomeTaxRequest.setEncryptedRealNamePassword(null);
  331. //登记序号
  332. calculateIndividualIncomeTaxRequest.setRegistrationNumber(taxUnitInfo.getRegNumber());
  333. //calculateIndividualIncomeTaxRequest.setRegistrationNumber("10117310124834931897");
  334. //税号
  335. calculateIndividualIncomeTaxRequest.setTaxNo(taxUnitInfo.getTaxNumber());
  336. //calculateIndividualIncomeTaxRequest.setTaxNo("91310124834931897I");
  337. //地区编号
  338. calculateIndividualIncomeTaxRequest.setArea(taxUnitInfo.getAreaCode());
  339. //calculateIndividualIncomeTaxRequest.setArea("310101");
  340. //部门编号
  341. calculateIndividualIncomeTaxRequest.setDeptNo(null);
  342. //部门名称
  343. calculateIndividualIncomeTaxRequest.setDeptName(null);
  344. //税款所属期
  345. //获取当前年月
  346. LocalDateTime now = LocalDateTime.now();
  347. DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMM");
  348. String formattedDate = now.format(formatter);
  349. calculateIndividualIncomeTaxRequest.setMonth(formattedDate);
  350. //获取员工数据
  351. IPersonPosition iPersonPosition = PersonPositionFactory.getLocalInstance(ctx);
  352. Set personIds = new HashSet();
  353. for (TaxUnitAndPerson taxUnitAndPerson : entry.getValue()) {
  354. logger.error("personId" + taxUnitAndPerson.getPersonId());
  355. String personId = taxUnitAndPerson.getPersonId();
  356. personIds.add(personId);
  357. }
  358. FilterInfo personFilterInfo = new FilterInfo();
  359. personFilterInfo.getFilterItems().add(new FilterItemInfo("person.id", personIds, CompareType.INCLUDE));
  360. SelectorItemCollection personSic = new SelectorItemCollection();
  361. personSic.add("*");
  362. personSic.add("person.*");
  363. personSic.add("person.employeeType.*");
  364. personSic.add("person.nationality.*");
  365. EntityViewInfo personEntityViewInfo = EntityViewInfo.getInstance(personFilterInfo, personSic, null);
  366. PersonPositionCollection personPositionCollection = iPersonPosition.getPersonPositionCollection(personEntityViewInfo);
  367. logger.error("personPositionCollection------------size" + personPositionCollection.size());
  368. //综合所得对象
  369. ComplexIncomeRequest complexIncomeRequest = getComplexIncomeRequest(taxItemPlanNumber, taxItemPlanName, personPositionCollection, cmpschemeid, taxUnitInfo);
  370. logger.error("complexIncomeRequest------------" + complexIncomeRequest);
  371. //综合所得
  372. calculateIndividualIncomeTaxRequest.setComplexIncomeRequest(complexIncomeRequest);
  373. //非居民所得
  374. //NonResidentsIncomeRequest nonResidentsIncomeRequest = getNonResidentsIncomeRequest(taxItemPlanName, personInfo, cmpschemeid);
  375. logger.error("输出分组结果------------end");
  376. logInfo.setInterfaceAddress("gateway/iit/reverseCalculateTax/calculateASynIndividualIncomeTax");//接口地址
  377. logInfo.setInterfaceName("calculateASynIndividualIncomeTax");//接口名
  378. ObjectMapper mapper = new ObjectMapper();
  379. logger.error("calculateIndividualIncomeTaxRequest------------" + mapper.writeValueAsString(calculateIndividualIncomeTaxRequest));
  380. logInfo.setInParameter(mapper.writeValueAsString(calculateIndividualIncomeTaxRequest));//入参
  381. return calculateIndividualIncomeTaxRequest;
  382. }
  383. ///**
  384. // * 税款反算
  385. // *
  386. // * @param request
  387. // * @param response
  388. // * @param modelMap
  389. // * @throws ShrWebBizException
  390. // * @throws BOSException
  391. // */
  392. //public void taxPaymentBackCalculateAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws SHRWebException, BOSException, SQLException, EASBizException, InterruptedException {
  393. // //计算规则ID
  394. // String cmpschemeid = request.getParameter("cmpschemeid");
  395. // if (StringUtils.isEmpty(cmpschemeid)) {
  396. // throw new ShrWebBizException("计算规则ID不可为空!!");
  397. // }
  398. // //计算规则
  399. // ICalScheme iCalScheme = CalSchemeFactory.getLocalInstance(ctx);
  400. // ITaxUnit iTaxUnit = TaxUnitFactory.getLocalInstance(ctx);
  401. // IPerson iPerson = PersonFactory.getLocalInstance(ctx);
  402. // SelectorItemCollection sic = new SelectorItemCollection();
  403. // sic.add("taxItemPlanList.taxItemPlan.name");
  404. // sic.add("taxItemPlanList.taxItemPlan.number");
  405. // sic.add("*");
  406. // FilterInfo filterInfo = new FilterInfo();
  407. // filterInfo.getFilterItems().add(new FilterItemInfo("id", cmpschemeid, CompareType.EQUALS));
  408. // EntityViewInfo entityViewInfo = EntityViewInfo.getInstance(filterInfo, sic, null);
  409. // CalSchemeInfo calSchemeInfo = iCalScheme.getCalSchemeCollection(entityViewInfo).get(0);
  410. // //获取当前的薪酬核算
  411. // CmpCalTableCollection cmpCalTableCollection = getCalSchemeColl(calSchemeInfo.getId().toString(), calSchemeInfo.getPeriodYear(), calSchemeInfo.getPeriodMonth());
  412. // logger.error("cmpCalTableCollection--------" + cmpCalTableCollection.size());
  413. // Map rseMap = new HashMap();
  414. // List resList = new ArrayList();
  415. // if (cmpCalTableCollection.size() > 0) {
  416. // for (int i = 0; i < cmpCalTableCollection.size(); i++) {
  417. // String personId = cmpCalTableCollection.get(i).getPerson().getId().toString();
  418. // //自定义类 反算服务
  419. // SixTConfirmInfo sixTConfirmInfo = new SixTConfirmInfo();
  420. // //外部业务编号
  421. // sixTConfirmInfo.setBizNo(UUID.randomUUID().toString().replace("-", ""));
  422. // //获取纳税单位
  423. // String sql = getSalaryOrgMappingByPersonId(personId);
  424. // logger.error("getSalaryOrgMappingByPersonId--------" + sql);
  425. // IRowSet iRowSet = DbUtil.executeQuery(ctx, sql);
  426. // if (iRowSet.size() <= 0) {
  427. // throw new ShrWebBizException("员工ID:" + personId + "未获取到纳税单位!!");
  428. // }
  429. // TaxUnitInfo taxUnitInfo = null;
  430. // while (iRowSet.next()) {
  431. // taxUnitInfo = iTaxUnit.getTaxUnitInfo("where id = '" + iRowSet.getString("taxunit") + "'");
  432. // }
  433. // //个税方案
  434. // TaxItemPlanInfo taxItemPlan = calSchemeInfo.getTaxItemPlanList().get(0).getTaxItemPlan();
  435. // String taxItemPlanNumber = taxItemPlan.getNumber();
  436. // String taxItemPlanName = taxItemPlan.getName();
  437. // //String taxItemPlanNumber = "2024083001";
  438. // JSONObject jsonObject = new JSONObject();
  439. // jsonObject.put("personId", personId);
  440. // jsonObject.put("periodYear", calSchemeInfo.getPeriodYear());
  441. // jsonObject.put("periodMonth", calSchemeInfo.getPeriodMonth());
  442. // jsonObject.put("cmpschemeid", cmpschemeid);
  443. // jsonObject.put("taxItemPlanName", taxItemPlanName);
  444. // jsonObject.put("taxItemPlanNumber", taxItemPlanNumber);
  445. // logger.error("jsonObject-------------" + jsonObject);
  446. // ClientProxyFactory clientProxyFactory = new ClientProxyFactory(
  447. // "46639607259987202405271637080",
  448. // "oTmd/QGL2xOfIKItqFGKnw==",
  449. // "https://test-openapi.17win.com");
  450. // //反算服务
  451. // //算税请求接口
  452. // TaxRequest taxRequest = clientProxyFactory.getTaxRequest();
  453. // CalculateIndividualIncomeTaxRequest calculateIndividualIncomeTaxRequest = new CalculateIndividualIncomeTaxRequest();
  454. // //外部业务编号
  455. // String replace = UUID.randomUUID().toString().replace("-", "");
  456. // logger.error("BizNo" + replace);
  457. // calculateIndividualIncomeTaxRequest.setBizNo(replace);
  458. // //企业名称(纳税单位)
  459. // calculateIndividualIncomeTaxRequest.setName(taxUnitInfo.getName());
  460. // //calculateIndividualIncomeTaxRequest.setName("荆州九州通医药有限公司00");
  461. // //申报密码
  462. // String sbmm = new String(Base64.getDecoder().decode(taxUnitInfo.getDeclPassword()));
  463. // //String sbmm = new String(Base64.getDecoder().decode("QWExMjM0NTY="));
  464. // logger.error("sbmm----" + sbmm);
  465. // calculateIndividualIncomeTaxRequest.setDeclarePassword(sbmm);
  466. // //密码类型
  467. // calculateIndividualIncomeTaxRequest.setPasswordType(null);
  468. // //实名账号
  469. // calculateIndividualIncomeTaxRequest.setRealNameAccount(null);
  470. // //实名密码
  471. // calculateIndividualIncomeTaxRequest.setRealNamePassword(null);
  472. // //加密实名密码
  473. // calculateIndividualIncomeTaxRequest.setEncryptedRealNamePassword(null);
  474. // //登记序号
  475. // calculateIndividualIncomeTaxRequest.setRegistrationNumber(taxUnitInfo.getRegNumber());
  476. // //calculateIndividualIncomeTaxRequest.setRegistrationNumber("10117310124834931897");
  477. // //税号
  478. // calculateIndividualIncomeTaxRequest.setTaxNo(taxUnitInfo.getTaxNumber());
  479. // //calculateIndividualIncomeTaxRequest.setTaxNo("91310124834931897I");
  480. // //地区编号
  481. // calculateIndividualIncomeTaxRequest.setArea(taxUnitInfo.getAreaCode());
  482. // //calculateIndividualIncomeTaxRequest.setArea("310101");
  483. // //部门编号
  484. // calculateIndividualIncomeTaxRequest.setDeptNo(null);
  485. // //部门名称
  486. // calculateIndividualIncomeTaxRequest.setDeptName(null);
  487. // //税款所属期
  488. // //获取当前年月
  489. // LocalDateTime now = LocalDateTime.now();
  490. // DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMM");
  491. // String formattedDate = now.format(formatter);
  492. // calculateIndividualIncomeTaxRequest.setMonth(formattedDate);
  493. // //获取员工数据
  494. // IPersonPosition iPersonPosition = PersonPositionFactory.getLocalInstance(ctx);
  495. // PersonPositionInfo personPositionInfo = iPersonPosition.getPersonPositionInfo("select *,person.*,person.employeeType.* ,person.nationality.* where person.id = '" + personId + "'");
  496. // //PersonInfo personInfo = iPerson.getPersonInfo(new ObjectUuidPK(personId));
  497. // PersonInfo personInfo = personPositionInfo.getPerson();
  498. // //综合所得对象
  499. // ComplexIncomeRequest complexIncomeRequest = getComplexIncomeRequest(taxItemPlanNumber, taxItemPlanName, personInfo, cmpschemeid);
  500. // //综合所得
  501. // calculateIndividualIncomeTaxRequest.setComplexIncomeRequest(complexIncomeRequest);
  502. // //非居民所得
  503. // NonResidentsIncomeRequest nonResidentsIncomeRequest = getNonResidentsIncomeRequest(taxItemPlanName, personInfo, cmpschemeid);
  504. // calculateIndividualIncomeTaxRequest.setNonResidentsIncomeRequest(nonResidentsIncomeRequest);
  505. //
  506. // ApiResponse<AsyncResult> asyncResultApiResponse = clientProxyFactory.getTaxRequest().reverseCalculateASynIndividualIncomeTax(calculateIndividualIncomeTaxRequest);
  507. // logger.error("asyncResultApiResponse-----getCode-------" + asyncResultApiResponse.getHead().getCode());
  508. // logger.error("asyncResultApiResponse-----getMsg--------" + asyncResultApiResponse.getHead().getMsg());
  509. // if (asyncResultApiResponse.getHead().getCode().equals("00000000")) {
  510. // AsyncResult body = asyncResultApiResponse.getBody();
  511. // String requestId = body.getRequestId();
  512. // logger.error("requestId-----" + requestId);
  513. // //查询反算反馈结果
  514. // //ISYUtilsFacade isyUtilsFacade = SYUtilsFacadeFactory.getLocalInstance(ctx);
  515. // //backTask(url,requestId,回调osf服务,自定义参数,任务类型)
  516. // //isyUtilsFacade.backTask(isyUtilsFacade.getConfig().get("ip") + "/gateway/iit/reverseCalculateTax/getASynIndividualIncomeTaxFeedback", requestId, "synIndividualIncomeTaxService", "", TaskCatalogEnum.CAL_GET);
  517. // //isyUtilsFacade.backTask("https://test-openapi.17win.com/gateway/iit/reverseCalculateTax/getASynIndividualIncomeTaxFeedback", requestId, "synIndividualIncomeTaxService", jsonObject.toString(), TaskCatalogEnum.CAL_GET);
  518. // ApiResponse<CalculateTaxResultRequest> aSynIndividualIncomeTaxFeedback = null;
  519. // boolean istrue = true;
  520. // while (istrue) {
  521. // //ApiResponse<CalculateTaxResultRequest> aSynIndividualIncomeTaxFeedback = taxRequest.getReverseASynIndividualIncomeTaxFeedback(requestId);
  522. // aSynIndividualIncomeTaxFeedback = taxRequest.getReverseASynIndividualIncomeTaxFeedback(requestId);
  523. // //ApiResponse<CalculateTaxResultRequest> aSynIndividualIncomeTaxFeedback =taxRequest.getReverseASynIndividualIncomeTaxFeedback("9a538f46af784ec6b78fa6e2e10e7037");
  524. // String code = aSynIndividualIncomeTaxFeedback.getHead().getCode();
  525. // if (!"100004".equals(code)) {
  526. // istrue = false;
  527. // }
  528. // logger.error("getCode---" + aSynIndividualIncomeTaxFeedback.getHead().getCode());
  529. // logger.error("getMsg---" + aSynIndividualIncomeTaxFeedback.getHead().getMsg());
  530. // // 等待一段时间再进行下一次轮询,这里设置为 5 秒(5000 毫秒)
  531. // Thread.sleep(3000);
  532. // }
  533. // CalculateTaxResultRequest resBody = aSynIndividualIncomeTaxFeedback.getBody();
  534. // //个税反算保存方法
  535. // String saveId = addTaxPaymentBackCalculate(resBody, jsonObject);
  536. // resList.add(saveId);
  537. // }
  538. // }
  539. // rseMap.put("resListSize", resList.size());
  540. // rseMap.put("resList", resList);
  541. // JSONUtils.writeJson(response, rseMap);
  542. // }
  543. //}
  544. /**
  545. * 添加个税反算数据
  546. *
  547. * @param resBody 查询反算反馈结果接口返回结果
  548. * @param param 员工ID
  549. * @return
  550. */
  551. public String addTaxPaymentBackCalculate(CalculateTaxResultRequest resBody, com.alibaba.fastjson.JSONObject
  552. param) throws BOSException, EASBizException {
  553. logger.error("addTaxPaymentBackCalculate============Start===============");
  554. String personId = param.getString("personId");//员工ID
  555. String periodYear = param.getString("periodYear");//统计年
  556. String periodMonth = param.getString("periodMonth");//统计月
  557. String cmpschemeid = param.getString("cmpschemeid");//计算规则ID
  558. String taxItemPlanName = param.getString("taxItemPlanName");//个税项目方案
  559. String taxItemPlanNumber = param.getString("taxItemPlanNumber");//个税项目方案
  560. //查询税款反算表是否存在该数据
  561. ITaxPaymentBackCalculate iTaxPaymentBackCalculate = TaxPaymentBackCalculateFactory.getLocalInstance(ctx);
  562. FilterInfo filterInfo = new FilterInfo();
  563. filterInfo.getFilterItems().add(new FilterItemInfo("person", personId, CompareType.EQUALS));
  564. filterInfo.getFilterItems().add(new FilterItemInfo("periodMonth", periodMonth, CompareType.EQUALS));
  565. filterInfo.getFilterItems().add(new FilterItemInfo("periodYear", periodYear, CompareType.EQUALS));
  566. filterInfo.getFilterItems().add(new FilterItemInfo("cmpscheme", cmpschemeid, CompareType.EQUALS));
  567. EntityViewInfo entityViewInfo = EntityViewInfo.getInstance(filterInfo, null, null);
  568. TaxPaymentBackCalculateCollection taxPaymentBackCalculateCollection = iTaxPaymentBackCalculate.getTaxPaymentBackCalculateCollection(entityViewInfo);
  569. TaxPaymentBackCalculateInfo taxPaymentBackCalculateInfo = new TaxPaymentBackCalculateInfo();
  570. if (taxPaymentBackCalculateCollection.size() > 0) {
  571. taxPaymentBackCalculateInfo = taxPaymentBackCalculateCollection.get(0);
  572. taxPaymentBackCalculateInfo.setId(taxPaymentBackCalculateCollection.get(0).getId());
  573. }
  574. //员工
  575. taxPaymentBackCalculateInfo.setPerson(PersonFactory.getLocalInstance(ctx).getPersonInfo(new ObjectUuidPK(personId)));
  576. //统计年
  577. taxPaymentBackCalculateInfo.setPeriodYear(periodYear);
  578. //统计月
  579. taxPaymentBackCalculateInfo.setPeriodMonth(periodMonth);
  580. //计算规则
  581. taxPaymentBackCalculateInfo.setCmpscheme(CalSchemeFactory.getLocalInstance(ctx).getCalSchemeInfo(new ObjectUuidPK(cmpschemeid)));
  582. //个税项目方案
  583. taxPaymentBackCalculateInfo.setTaxItemPlan(taxItemPlanName);
  584. ComplexTaxCalculateResult complexTaxCalculateResult = null;
  585. //zhsd 综合所得
  586. ComplexIncomeResultRequest complexIncomeResultRequest = resBody.getComplexIncomeResultRequest();
  587. //全年一次性奖金
  588. if ("GS003".equals(taxItemPlanNumber)) {
  589. //qnycxjjsslb 全年一次性奖金
  590. complexTaxCalculateResult = complexIncomeResultRequest.getAnnualOneTimeBonusIncome();
  591. }
  592. //一般劳务报酬所得列表
  593. if ("GS002".equals(taxItemPlanNumber)) {
  594. //lwbclb 一般劳务报酬所得列表
  595. complexTaxCalculateResult = complexIncomeResultRequest.getLaborRemunerationIncome();
  596. }
  597. //正常工资薪金对象
  598. if ("GS001".equals(taxItemPlanNumber)) {
  599. //zcgzxj 正常工资薪金对象
  600. complexTaxCalculateResult = complexIncomeResultRequest.getNormalSalarySpecIncome();
  601. }
  602. List<ComplexIncome> successComplexIncomes = complexTaxCalculateResult.getSuccessComplexIncomes();
  603. ComplexIncome complexIncome = successComplexIncomes.get(0);
  604. //sre 收入额
  605. BigDecimal income = complexIncome.getIncome();
  606. taxPaymentBackCalculateInfo.setSalarySum(income);
  607. //ybtse refundTax 应补退税额
  608. BigDecimal refundTax = complexIncome.getRefundTax();
  609. taxPaymentBackCalculateInfo.setIndividual(refundTax);
  610. IObjectPK save = iTaxPaymentBackCalculate.save(taxPaymentBackCalculateInfo);
  611. logger.error("addTaxPaymentBackCalculate============end===============");
  612. return save.toString();
  613. }
  614. /**
  615. * 获取非居民所得 对象
  616. *
  617. * @return
  618. */
  619. public NonResidentsIncomeRequest getNonResidentsIncomeRequest(String taxItemPlanName, PersonInfo
  620. personInfo, String cmpschemeid) throws SQLException, BOSException {
  621. NonResidentsIncomeRequest nonResidentsIncomeRequest = new NonResidentsIncomeRequest();
  622. List<NonResidentsIncome> foreignerWagesSalaryIncomes = new ArrayList();
  623. NonResidentsIncome nonResidentsIncome = getNonResidentsIncome(taxItemPlanName, personInfo, cmpschemeid);
  624. foreignerWagesSalaryIncomes.add(nonResidentsIncome);
  625. nonResidentsIncomeRequest.setForeignerWagesSalaryIncomes(foreignerWagesSalaryIncomes);
  626. return nonResidentsIncomeRequest;
  627. }
  628. /**
  629. * 非居民所得-无住所个人正常工资薪金
  630. * * taxItemPlanName 个税项目名称
  631. * * personInfo 员工信息
  632. * * cmpschemeid 计算规则ID
  633. */
  634. public NonResidentsIncome getNonResidentsIncome(String taxItemPlanName, PersonInfo personInfo, String
  635. cmpschemeid) throws SQLException, BOSException {
  636. NonResidentsIncome nonResidentsIncome = new NonResidentsIncome();
  637. //nonResidentsIncome.setName("何云");
  638. //nonResidentsIncome.setLicenseType("居民身份证");
  639. //nonResidentsIncome.setLicenseNumber("429004198601085125");
  640. //nonResidentsIncome.setAbroadIncome(new BigDecimal("8000"));
  641. //nonResidentsIncome.setIncomeItemName("无住所个人正常工资薪金");
  642. //姓名
  643. nonResidentsIncome.setName(personInfo.getName());
  644. //complexIncome.setName("何云");
  645. //居民身份证
  646. if (personInfo.getIdCardNO() != null) {
  647. //证照号码
  648. nonResidentsIncome.setLicenseNumber(personInfo.getIdCardNO());
  649. //证照类型
  650. nonResidentsIncome.setLicenseType("居民身份证");
  651. }
  652. //中国护照不
  653. if (personInfo.getPassportNO() != null) {
  654. //证照类型
  655. nonResidentsIncome.setLicenseType("中国护照");
  656. //证照号码
  657. nonResidentsIncome.setLicenseNumber(personInfo.getPassportNO());
  658. }
  659. Integer abroadIncome = getAbroadIncome(personInfo.getId().toString(), cmpschemeid);
  660. //complexIncome.setLicenseNumber("429004198601085125");
  661. //税后收入额
  662. //nonResidentsIncome.setAbroadIncome(new BigDecimal(abroadIncome));
  663. nonResidentsIncome.setIncomeItemName(taxItemPlanName);
  664. return nonResidentsIncome;
  665. }
  666. /**
  667. * 获取综合所得
  668. * taxItemPlanNumber 个税项目编码
  669. * taxItemPlanName 个税项目名称
  670. * personInfo 员工信息
  671. * cmpschemeid 计算规则ID
  672. *
  673. * @return
  674. */
  675. public ComplexIncomeRequest getComplexIncomeRequest(String taxItemPlanNumber, String
  676. taxItemPlanName, PersonPositionCollection personPositionCollection, String cmpschemeid, TaxUnitInfo taxUnitInfo) throws
  677. BOSException, EASBizException, SQLException {
  678. logger.error("getComplexIncomeRequest-----" + taxItemPlanNumber + "---" + taxItemPlanName + "---" + personPositionCollection + "---" + cmpschemeid);
  679. ComplexIncomeRequest complexIncomeRequest = new ComplexIncomeRequest();
  680. //全年一次性奖金
  681. if (taxItemPlanNumber.equals("GS003")) {
  682. //if (taxItemPlanNumber.equals("2024083001")) {
  683. List<ComplexIncome> aOneBonusIncomeList = new ArrayList();
  684. for (int i = 0; i < personPositionCollection.size(); i++) {
  685. PersonPositionInfo personPositionInfo = personPositionCollection.get(i);
  686. PersonInfo personInfo = personPositionInfo.getPerson();
  687. logger.error("getAbroadIncome-----" + personInfo.getName() + "-----------" + getAbroadIncome(personInfo.getId().toString(), cmpschemeid));
  688. if (getAbroadIncome(personInfo.getId().toString(), cmpschemeid) != null || getAbroadIncome(personInfo.getId().toString(), cmpschemeid) != 0) {
  689. ComplexIncome annualOneTimeBonusIncome = getAnnualOneTimeBonusIncome(personInfo, taxItemPlanName, cmpschemeid);
  690. aOneBonusIncomeList.add(annualOneTimeBonusIncome);
  691. complexIncomeRequest.setAnnualOneTimeBonusIncome(aOneBonusIncomeList);
  692. }
  693. }
  694. }
  695. //一般劳务报酬所得列表
  696. //if (taxItemPlanNumber.equals("2024083003")) {
  697. if (taxItemPlanNumber.equals("GS002")) {
  698. List<ComplexIncome> complexIncomeList = new ArrayList();
  699. for (int i = 0; i < personPositionCollection.size(); i++) {
  700. PersonPositionInfo personPositionInfo = personPositionCollection.get(i);
  701. PersonInfo personInfo = personPositionInfo.getPerson();
  702. logger.error("getAbroadIncome-----" + personInfo.getName() + "-----------" + +getAbroadIncome(personInfo.getId().toString(), cmpschemeid));
  703. if (getAbroadIncome(personInfo.getId().toString(), cmpschemeid) != null || getAbroadIncome(personInfo.getId().toString(), cmpschemeid) != 0) {
  704. ComplexIncome laborRemunerationIncome = getLaborRemunerationIncome(personInfo, taxItemPlanName, cmpschemeid);
  705. complexIncomeList.add(laborRemunerationIncome);
  706. complexIncomeRequest.setLaborRemunerationIncome(complexIncomeList);
  707. }
  708. }
  709. }
  710. //正常工资薪金对象
  711. //if (taxItemPlanNumber.equals("2024083004")) {
  712. if (taxItemPlanNumber.equals("GS001")) {
  713. logger.error("GS001-----" + personPositionCollection);
  714. NormalSalarySpecIncome normalSalarySpecIncome = getNormalSalarySpecIncome(personPositionCollection, taxItemPlanName, cmpschemeid, taxUnitInfo);
  715. complexIncomeRequest.setNormalSalarySpecIncome(normalSalarySpecIncome);
  716. }
  717. return complexIncomeRequest;
  718. }
  719. /**
  720. * 获取全年一次性奖金
  721. * taxItemPlanName 个税项目名称
  722. * cmpschemeid 计算规则ID
  723. *
  724. * @return
  725. */
  726. public ComplexIncome getAnnualOneTimeBonusIncome(PersonInfo personInfo, String taxItemPlanName, String
  727. cmpschemeid) throws SQLException, BOSException {
  728. ComplexIncome complexIncome = new ComplexIncome();
  729. //姓名
  730. complexIncome.setName(personInfo.getName());
  731. //complexIncome.setName("何云");
  732. //居民身份证
  733. if (personInfo.getIdCardNO() != null) {
  734. //证照号码
  735. complexIncome.setLicenseNumber(personInfo.getIdCardNO());
  736. //证照类型
  737. complexIncome.setLicenseType("居民身份证");
  738. }
  739. //中国护照不
  740. if (personInfo.getPassportNO() != null) {
  741. //证照类型
  742. complexIncome.setLicenseType("中国护照");
  743. //证照号码
  744. complexIncome.setLicenseNumber(personInfo.getPassportNO());
  745. }
  746. Integer abroadIncome = getAbroadIncome(personInfo.getId().toString(), cmpschemeid);
  747. //complexIncome.setLicenseNumber("429004198601085125");
  748. //税后收入额
  749. complexIncome.setAfterTaxIncome(new BigDecimal(abroadIncome));
  750. complexIncome.setIncomeItemName(taxItemPlanName);
  751. return complexIncome;
  752. }
  753. /**
  754. * 获取一般劳务报酬所得
  755. * taxItemPlanName 个税项目名称
  756. * cmpschemeid 计算规则ID
  757. *
  758. * @return
  759. */
  760. public ComplexIncome getLaborRemunerationIncome(PersonInfo personInfo, String taxItemPlanName, String
  761. cmpschemeid) throws SQLException, BOSException {
  762. ComplexIncome complexIncome = new ComplexIncome();
  763. //姓名
  764. complexIncome.setName(personInfo.getName());
  765. //complexIncome.setName("何云");
  766. //居民身份证
  767. if (personInfo.getIdCardNO() != null) {
  768. //证照号码
  769. complexIncome.setLicenseNumber(personInfo.getIdCardNO());
  770. //证照类型
  771. complexIncome.setLicenseType("居民身份证");
  772. }
  773. //中国护照不
  774. if (personInfo.getPassportNO() != null) {
  775. //证照类型
  776. complexIncome.setLicenseType("中国护照");
  777. //证照号码
  778. complexIncome.setLicenseNumber(personInfo.getPassportNO());
  779. }
  780. Integer abroadIncome = getAbroadIncome(personInfo.getId().toString(), cmpschemeid);
  781. //complexIncome.setLicenseNumber("429004198601085125");
  782. //税后收入额
  783. complexIncome.setAfterTaxIncome(new BigDecimal(abroadIncome));
  784. complexIncome.setIncomeItemName(taxItemPlanName);
  785. return complexIncome;
  786. }
  787. /**
  788. * 获取正常工资薪金对象
  789. *
  790. * @return
  791. */
  792. public NormalSalarySpecIncome getNormalSalarySpecIncome(PersonPositionCollection
  793. personPositionCollection, String taxItemPlanName, String cmpschemeid, TaxUnitInfo taxUnitInfo) throws
  794. BOSException, EASBizException, SQLException {
  795. logger.error("getNormalSalarySpecIncome-------------start");
  796. //正常工资薪金对象
  797. NormalSalarySpecIncome normalSalarySpecIncome = new NormalSalarySpecIncome();
  798. //人员列表
  799. List<DetailCompanyEmployee> companyEmployeeList = new ArrayList();
  800. for (int i = 0; i < personPositionCollection.size(); i++) {
  801. PersonPositionInfo personPositionInfo = personPositionCollection.get(i);
  802. PersonInfo personInfo = personPositionInfo.getPerson();
  803. //获取人员数据
  804. DetailCompanyEmployee detailCompanyEmployee = getDetailCompanyEmployee(personInfo, taxUnitInfo);
  805. companyEmployeeList.add(detailCompanyEmployee);
  806. normalSalarySpecIncome.setCompanyEmployeeList(companyEmployeeList);
  807. //正常薪金列表
  808. List<ComplexIncome> normalSalarySpec = new ArrayList();
  809. ComplexIncome complexIncome = new ComplexIncome();
  810. //姓名
  811. complexIncome.setName(personInfo.getName());
  812. //complexIncome.setName("何云");
  813. //居民身份证
  814. if (personInfo.getIdCardNO() != null) {
  815. //证照号码
  816. complexIncome.setLicenseNumber(personInfo.getIdCardNO());
  817. //证照类型
  818. complexIncome.setLicenseType("居民身份证");
  819. }
  820. //中国护照不
  821. if (personInfo.getPassportNO() != null) {
  822. //证照类型
  823. complexIncome.setLicenseType("中国护照");
  824. //证照号码
  825. complexIncome.setLicenseNumber(personInfo.getPassportNO());
  826. }
  827. Integer abroadIncome = getAbroadIncome(personInfo.getId().toString(), cmpschemeid);
  828. //complexIncome.setLicenseNumber("429004198601085125");
  829. //税后收入额
  830. complexIncome.setAfterTaxIncome(new BigDecimal(abroadIncome));
  831. complexIncome.setIncomeItemName(taxItemPlanName);
  832. normalSalarySpec.add(complexIncome);
  833. normalSalarySpecIncome.setNormalSalarySpec(normalSalarySpec);
  834. }
  835. return normalSalarySpecIncome;
  836. }
  837. /**
  838. * 人员
  839. *
  840. * @return
  841. */
  842. public DetailCompanyEmployee getDetailCompanyEmployee(PersonInfo personInfo, TaxUnitInfo taxUnitInfo) throws
  843. BOSException, EASBizException {
  844. logger.error("getDetailCompanyEmployee-------------start");
  845. //人员对象
  846. DetailCompanyEmployee detailCompanyEmployee = new DetailCompanyEmployee();
  847. ////姓名
  848. //detailCompanyEmployee.setName("何云");
  849. ////证件类型
  850. //detailCompanyEmployee.setLicenseType("居民身份证");
  851. ////证照号码
  852. //detailCompanyEmployee.setLicenseNumber("429004198601085125");
  853. //姓名
  854. detailCompanyEmployee.setName(personInfo.getName());
  855. logger.error("personInfoName-------------" + personInfo.getName());
  856. logger.error("personInfo.getIdCardNO()-------------" + personInfo.getIdCardNO());
  857. //complexIncome.setName("何云");
  858. //居民身份证
  859. if (personInfo.getIdCardNO() != null) {
  860. //证照号码
  861. detailCompanyEmployee.setLicenseNumber(personInfo.getIdCardNO());
  862. //证照类型
  863. detailCompanyEmployee.setLicenseType("居民身份证");
  864. //人员地区
  865. detailCompanyEmployee.setArea("境内");
  866. }
  867. //中国护照
  868. if (personInfo.getPassportNO() != null) {
  869. //证照类型
  870. detailCompanyEmployee.setLicenseType("中国护照");
  871. //证照号码
  872. detailCompanyEmployee.setLicenseNumber(personInfo.getPassportNO());
  873. //人员地区
  874. detailCompanyEmployee.setArea("境外");
  875. }
  876. //电话号码
  877. detailCompanyEmployee.setPhone(personInfo.getCell());
  878. //人员状态
  879. detailCompanyEmployee.setState(personInfo.getEmployeeType().getName());
  880. //人员报税信息->任职受雇从业信息
  881. ITaxPersonRecordEntry iTaxPersonRecordEntry = TaxPersonRecordEntryFactory.getLocalInstance(ctx);
  882. TaxPersonRecordEntryCollection taxPersonRecordEntryCollection = iTaxPersonRecordEntry.getTaxPersonRecordEntryCollection("where person.id = '" + personInfo.getId() + "'");
  883. TaxPersonRecordEntryInfo taxPersonRecordEntryInfo = taxPersonRecordEntryCollection.get(0);
  884. logger.error("taxPersonRecordEntryInfo-------------" + taxPersonRecordEntryInfo);
  885. //任职受雇类型 可选择雇员、保险营销员、证券经纪人、其他、实习学生(全日制学历教育)
  886. //detailCompanyEmployee.setIsEmployee("其他");
  887. if (taxPersonRecordEntryInfo.getEmployedType() == null) {
  888. detailCompanyEmployee.setIsEmployee("其他");
  889. } else {
  890. detailCompanyEmployee.setIsEmployee(taxPersonRecordEntryInfo.getEmployedType().getAlias());
  891. }
  892. //受雇日期 YYYY-MM-DD,不能大于当前时间,任职受雇类型选择雇员、保险营销员、证券经纪人时必录
  893. SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd");
  894. detailCompanyEmployee.setEmployedDate(inputFormat.format(taxPersonRecordEntryInfo.getEmployedDate()));
  895. //性别
  896. detailCompanyEmployee.setGender(personInfo.getGender().getAlias());
  897. //出生日期
  898. detailCompanyEmployee.setBirthday(inputFormat.format(personInfo.getBirthday()));
  899. //国籍 nationality
  900. NationalityInfo nationality = personInfo.getNationality();
  901. detailCompanyEmployee.setNationality(nationality.getName());
  902. //纳税人状态
  903. detailCompanyEmployee.setState(taxPersonRecordEntryInfo.getPersonStatus().getAlias());
  904. logger.error("detailCompanyEmployee-------------" + detailCompanyEmployee);
  905. logger.error("getDetailCompanyEmployee-------------end");
  906. return detailCompanyEmployee;
  907. }
  908. /**
  909. * 获取税后收入额 系统字段=税后保实发
  910. *
  911. * @param perosnId
  912. * @param cmpschemeid
  913. * @return
  914. */
  915. public Integer getAbroadIncome(String perosnId, String cmpschemeid) throws BOSException, SQLException {
  916. String sql = String.format("select S328 from T_HR_SCmpCalTable where FPERSONID = '%s' and FCALSCHEMEID = '%s'", perosnId, cmpschemeid);
  917. logger.error("getAbroadIncomeSql---------------" + sql);
  918. IRowSet iRowSet = DbUtil.executeQuery(ctx, sql);
  919. Integer abroadIncome = null;
  920. while (iRowSet.next()) {
  921. abroadIncome = iRowSet.getInt("S328");
  922. }
  923. return abroadIncome;
  924. }
  925. /**
  926. * 获取纳税单元
  927. *
  928. * @param personId
  929. * @return
  930. */
  931. public String getSalaryOrgMappingByPersonId(String personId) {
  932. StringBuilder sb = new StringBuilder();
  933. sb.append("select top 1 ").append("\n");
  934. sb.append("cmpOrgUnitCus.FTAXUNITID as taxunit").append("\n");
  935. sb.append("from CT_COM_CmpOrgUnitCus cmpOrgUnitCus").append("\n");
  936. sb.append("left join T_HR_SPersonCmp personCmp on personCmp.Fid = cmpOrgUnitCus.FPERSONCMPID").append("\n");
  937. sb.append("left join T_bd_person person on person.Fid = personCmp.FPERSONID").append("\n");
  938. sb.append("where").append("\n");
  939. sb.append("person.Fid = '").append(personId).append("'").append("\n");
  940. sb.append("order by cmpOrgUnitCus.FLEFFECTTIME desc ").append("\n");
  941. return sb.toString();
  942. }
  943. ///**
  944. // * 同步人员纳税信息
  945. // *
  946. // * @param request
  947. // * @param response
  948. // * @param modelMap
  949. // * @throws ShrWebBizException
  950. // * @throws BOSException
  951. // */
  952. //public void synTaxPersonRecordAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws ShrWebBizException, BOSException {
  953. // //计算规则ID
  954. // String cmpschemeid = request.getParameter("cmpschemeid");
  955. // if (StringUtils.isEmpty(cmpschemeid)) {
  956. // throw new ShrWebBizException("计算规则ID不可为空!!");
  957. // }
  958. // //计算规则
  959. // ICalScheme iCalScheme = CalSchemeFactory.getLocalInstance(ctx);
  960. // try {
  961. // CalSchemeInfo calSchemeInfo = iCalScheme.getCalSchemeInfo(new ObjectUuidPK(cmpschemeid));
  962. // //获取上一个月的计算规则 统计年:periodYear 统计月:periodMonth
  963. // LocalDate date = LocalDate.of(calSchemeInfo.getPeriodYear(), calSchemeInfo.getPeriodMonth(), 1);
  964. // LocalDate previousMonthDate = date.minusMonths(1);
  965. // //获取上个月的薪酬核算
  966. // //CalSchemeInfo calSchemeUp = iCalScheme.getCalSchemeInfo("where periodYear = '" + previousMonthDate.getYear() + "' and periodMonth = '" + previousMonthDate.getMonthValue() + "'");
  967. // CmpCalTableCollection cmpCalTableCollectionUp = getCalSchemeColl(calSchemeInfo.getId().toString(), previousMonthDate.getYear(), previousMonthDate.getMonthValue());
  968. // logger.error("cmpCalTableCollectionUp--------" + cmpCalTableCollectionUp.size());
  969. //
  970. // //获取当前的薪酬核算
  971. // CmpCalTableCollection cmpCalTableCollection = getCalSchemeColl(calSchemeInfo.getId().toString(), calSchemeInfo.getPeriodYear(), calSchemeInfo.getPeriodMonth());
  972. // logger.error("cmpCalTableCollection--------" + cmpCalTableCollection.size());
  973. //
  974. // //保存上个月的核算人员
  975. // List<String> listUp = new ArrayList<>();
  976. // for (int i = 0; i < cmpCalTableCollectionUp.size(); i++) {
  977. // listUp.add(cmpCalTableCollectionUp.get(i).getPerson().getId().toString());
  978. // }
  979. //
  980. // //保存当前月的核算人员
  981. // List<String> list = new ArrayList<>();
  982. // for (int i = 0; i < cmpCalTableCollection.size(); i++) {
  983. // list.add(cmpCalTableCollection.get(i).getPerson().getId().toString());
  984. // }
  985. //
  986. // Set<String> setUp = new HashSet<>(listUp);
  987. // Set<String> set = new HashSet<>(list);
  988. //
  989. // // 找出 上个月核算人员 中比 当前月核算人员 多的数据 为离职人员 修改人员纳税信息的 人员状态为非正常 离职日期为当前月最后一天
  990. // Set<String> pseronIdsUp = new HashSet<>(setUp);
  991. // pseronIdsUp.removeAll(set);
  992. //
  993. // // 找出 当前月核算人员 中比 上个月核算人员 多的数据 为新增人员 创建人员纳税信息和任职受雇从业信息 人员状态为正常 任职受雇从业日期为当前月1号
  994. // Set<String> pseronIds = new HashSet<>(set);
  995. // pseronIds.removeAll(setUp);
  996. //
  997. // SelectorItemCollection updateSic = new SelectorItemCollection();
  998. // updateSic.add("personStatus");
  999. // updateSic.add("departureDate");
  1000. // //处理修改的人员纳税信息
  1001. // ITaxPersonRecordEntry iTaxPersonRecordEntry = TaxPersonRecordEntryFactory.getLocalInstance(ctx);
  1002. // //判断修改人员ID大于0 则修改人员纳税信息
  1003. // if (pseronIdsUp.size() > 0) {
  1004. // //获取任职受雇从业信息 修改人员纳税信息的 人员状态为非正常 离职日期为当前月最后一天
  1005. // TaxPersonRecordEntryCollection taxPersonRecordEntryCollUp = getTaxPersonRecordEntryColl(pseronIdsUp, iTaxPersonRecordEntry);
  1006. // if (taxPersonRecordEntryCollUp.size() > 0) {
  1007. // for (int i = 0; i < taxPersonRecordEntryCollUp.size(); i++) {
  1008. // TaxPersonRecordEntryInfo taxPersonRecordEntryInfo = taxPersonRecordEntryCollUp.get(i);
  1009. // //人员状态
  1010. // taxPersonRecordEntryInfo.setPersonStatus(PersonStatusEnum.NotNormal);
  1011. // //获取当前月的最后一天转成Date类型
  1012. // Date departureDate = Date.from(date.withDayOfMonth(date.lengthOfMonth()).atStartOfDay(ZoneId.systemDefault()).toInstant());
  1013. // //离职日期为当前月最后一天
  1014. // taxPersonRecordEntryInfo.setDepartureDate(departureDate);
  1015. // iTaxPersonRecordEntry.updatePartial(taxPersonRecordEntryInfo, updateSic);
  1016. // }
  1017. // }
  1018. // }
  1019. // //调用新增人员纳税信息方法
  1020. // if (pseronIds.size() > 0) {
  1021. // //Date.from(date.atStartOfDay(ZoneId.systemDefault()).toInstant()) 当前月第一天
  1022. // addTaxPersonRecord(pseronIds, Date.from(date.atStartOfDay(ZoneId.systemDefault()).toInstant()));
  1023. // }
  1024. // Map res = new HashMap();
  1025. // res.put("update", pseronIdsUp.size());
  1026. // res.put("add", pseronIds.size());
  1027. // JSONUtils.writeJson(response, res);
  1028. // } catch (EASBizException e) {
  1029. // e.printStackTrace();
  1030. // throw new ShrWebBizException("计算规则ID【" + cmpschemeid + "】未获取到,请联系管理员!!");
  1031. // } catch (SQLException e) {
  1032. // throw new ShrWebBizException(e);
  1033. // } catch (SHRWebException e) {
  1034. // throw new ShrWebBizException(e);
  1035. // }
  1036. //
  1037. //}
  1038. ///**
  1039. // * 新增人员纳税信息
  1040. // *
  1041. // * @param pseronIds
  1042. // */
  1043. //public void addTaxPersonRecord(Set<String> pseronIds, Date oneDay) throws BOSException, EASBizException, SQLException {
  1044. // logger.error("addTaxPersonRecord--------新增开始");
  1045. // //pseronIds.forEach(id -> {});
  1046. // ITaxPersonRecord iTaxPersonRecord = TaxPersonRecordFactory.getLocalInstance(ctx);
  1047. // IPerson iPerson = PersonFactory.getLocalInstance(ctx);
  1048. // ITaxPersonRecordEntry iTaxPersonRecordEntry = TaxPersonRecordEntryFactory.getLocalInstance(ctx);
  1049. // //人员纳税分录对象
  1050. // TaxPersonRecordEntryInfo taxPersonRecordEntryInfo = new TaxPersonRecordEntryInfo();
  1051. // SelectorItemCollection sic = new SelectorItemCollection();
  1052. // sic.add("*");
  1053. // FilterInfo filterInfo = new FilterInfo();
  1054. // filterInfo.getFilterItems().add(new FilterItemInfo("id", pseronIds, CompareType.INCLUDE));
  1055. // EntityViewInfo entityViewInfo = EntityViewInfo.getInstance(filterInfo, sic, null);
  1056. // PersonCollection personCollection = iPerson.getPersonCollection(entityViewInfo);
  1057. // if (personCollection.size() > 0) {
  1058. // for (int i = 0; i < personCollection.size(); i++) {
  1059. // PersonInfo personInfo = personCollection.get(i);
  1060. // boolean exists = iTaxPersonRecordEntry.exists("where person = '" + personInfo.getId().toString() + "'");
  1061. // if (!exists) {
  1062. //
  1063. // TaxPersonRecordInfo taxPersonRecordInfo = new TaxPersonRecordInfo();
  1064. // //人员
  1065. // taxPersonRecordInfo.setPerson(personInfo);
  1066. // //证件类型
  1067. // if (personInfo.getIdCardNO() != null || personInfo.getPassportNO() != null) {
  1068. // if (null == personInfo.getIdCardNO()) {
  1069. // //护照
  1070. // taxPersonRecordInfo.setCardType(CardTypeEnum.Passport);
  1071. // taxPersonRecordInfo.setCardNumber(personInfo.getPassportNO());
  1072. // //纳税人类型
  1073. // taxPersonRecordEntryInfo.setPayerType(PayerTypeEnum.NotResident);
  1074. // }
  1075. // if (null == personInfo.getPassportNO()) {
  1076. // //证件号
  1077. // taxPersonRecordInfo.setCardType(CardTypeEnum.IdCard);
  1078. // taxPersonRecordInfo.setCardNumber(personInfo.getIdCardNO());
  1079. // //纳税人类型
  1080. // taxPersonRecordEntryInfo.setPayerType(PayerTypeEnum.Resident);
  1081. //
  1082. // }
  1083. // } else {
  1084. // logger.error(personInfo.getName() + "护照和身份证为空,证件类型保存失败!");
  1085. // }
  1086. // //性别
  1087. // taxPersonRecordInfo.setGender(personInfo.getGender());
  1088. // //出生日期
  1089. // taxPersonRecordInfo.setBirthday(personInfo.getBirthday());
  1090. // //国籍
  1091. // taxPersonRecordInfo.setNationality(personInfo.getNationality());
  1092. // //是否境外人员
  1093. // taxPersonRecordInfo.setIsOversea(IsOverseaEnum.NotOversea);
  1094. // //手机号码
  1095. // taxPersonRecordInfo.setPhoneNumber(personInfo.getCell());
  1096. // iTaxPersonRecord.save(taxPersonRecordInfo);
  1097. // //保存分录数据
  1098. // taxPersonRecordEntryInfo.setPerson(personInfo);
  1099. // taxPersonRecordEntryInfo.setBill(taxPersonRecordInfo);
  1100. // //获取纳税单位
  1101. // String sql = getSalaryOrgMappingByPersonId(personInfo.getId().toString());
  1102. // IRowSet iRowSet = DbUtil.executeQuery(ctx, sql);
  1103. // ITaxUnit iTaxUnit = TaxUnitFactory.getLocalInstance(ctx);
  1104. // if (iRowSet.size() > 0) {
  1105. // while (iRowSet.next()) {
  1106. // TaxUnitInfo taxUnitInfo = iTaxUnit.getTaxUnitInfo("where number = '" + iRowSet.getString("nsdwmc") + "'");
  1107. // taxPersonRecordEntryInfo.setTaxUnit(taxUnitInfo);
  1108. // //人员状态
  1109. // taxPersonRecordEntryInfo.setPersonStatus(PersonStatusEnum.Normal);
  1110. // //获取当前月的最后一天转成Date类型 //任职受雇从业日期为当前月第一天
  1111. // taxPersonRecordEntryInfo.setEmployedDate(oneDay);
  1112. // //报送状态
  1113. // taxPersonRecordEntryInfo.setSubmitStatus(SubmitStatusEnum.NotSubmit);
  1114. // iTaxPersonRecordEntry.save(taxPersonRecordEntryInfo);
  1115. // }
  1116. // } else {
  1117. // logger.error("iRowSet-----Sql---" + sql);
  1118. // logger.error("iRowSet--------" + personInfo.getName() + "未获取到纳税单位,字段保存失败!!");
  1119. // }
  1120. // }
  1121. // }
  1122. // }
  1123. // logger.error("addTaxPersonRecord--------新增结束");
  1124. //}
  1125. ///**
  1126. // * 获取任职受雇从业信息
  1127. // *
  1128. // * @param pseronIds 员工ID集合
  1129. // * @return
  1130. // * @throws BOSException
  1131. // */
  1132. //public TaxPersonRecordEntryCollection getTaxPersonRecordEntryColl(Set<String> pseronIds, ITaxPersonRecordEntry iTaxPersonRecordEntry) throws BOSException {
  1133. // //获取当前月的薪酬计算
  1134. // FilterInfo filterInfo = new FilterInfo();
  1135. // filterInfo.getFilterItems().add(new FilterItemInfo("bill.person", pseronIds, CompareType.INCLUDE));
  1136. // EntityViewInfo entityViewInfo = EntityViewInfo.getInstance(filterInfo, null, null);
  1137. // return iTaxPersonRecordEntry.getTaxPersonRecordEntryCollection(entityViewInfo);
  1138. //}
  1139. /**
  1140. * 通过计算规则id获取薪酬核算数据
  1141. *
  1142. * @param cmpschemeid
  1143. * @throws BOSException
  1144. */
  1145. public CmpCalTableCollection getCalSchemeColl(String cmpschemeid, int year, int month) throws BOSException {
  1146. ICmpCalTable iCmpCalTable = CmpCalTableFactory.getLocalInstance(ctx);
  1147. SelectorItemCollection sic = new SelectorItemCollection();
  1148. sic.add("*");
  1149. sic.add("calScheme.*");
  1150. sic.add("person.*");
  1151. //获取当前月的薪酬计算
  1152. FilterInfo filterInfo = new FilterInfo();
  1153. filterInfo.getFilterItems().add(new FilterItemInfo("calScheme", cmpschemeid, CompareType.EQUALS));
  1154. filterInfo.getFilterItems().add(new FilterItemInfo("periodYear", year, CompareType.EQUALS));
  1155. filterInfo.getFilterItems().add(new FilterItemInfo("periodMonth", month, CompareType.EQUALS));
  1156. EntityViewInfo entityViewInfo = EntityViewInfo.getInstance(filterInfo, sic, null);
  1157. CmpCalTableCollection cmpCalTableCollection = iCmpCalTable.getCmpCalTableCollection(entityViewInfo);
  1158. return cmpCalTableCollection;
  1159. }
  1160. }