CmpCalDynamicListHandlerExExEx.java 65 KB

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