CmpCalDynamicListHandlerExExEx.java 71 KB

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