package com.kingdee.eas.custom.compensation.handler; import cn.com.servyou.dto.ApiResponse; import cn.com.servyou.dto.AsyncResult; import cn.com.servyou.dto.tax.*; import cn.com.servyou.rmi.client.ClientProxyFactory; import cn.com.servyou.service.TaxRequest; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.kingdee.bos.BOSException; import com.kingdee.bos.Context; import com.kingdee.bos.dao.IObjectPK; import com.kingdee.bos.dao.ormapping.ObjectUuidPK; import com.kingdee.bos.metadata.entity.EntityViewInfo; import com.kingdee.bos.metadata.entity.FilterInfo; import com.kingdee.bos.metadata.entity.FilterItemInfo; import com.kingdee.bos.metadata.entity.SelectorItemCollection; import com.kingdee.bos.metadata.query.util.CompareType; import com.kingdee.bos.util.EASResource; import com.kingdee.eas.basedata.hraux.NationalityInfo; import com.kingdee.eas.basedata.person.IPerson; import com.kingdee.eas.basedata.person.PersonFactory; import com.kingdee.eas.basedata.person.PersonInfo; import com.kingdee.eas.common.EASBizException; import com.kingdee.eas.custom.compensation.vo.TaxUnitAndPerson; import com.kingdee.eas.custom.individualback.ITaxPaymentBackCalculate; import com.kingdee.eas.custom.individualback.TaxPaymentBackCalculateCollection; import com.kingdee.eas.custom.individualback.TaxPaymentBackCalculateFactory; import com.kingdee.eas.custom.individualback.TaxPaymentBackCalculateInfo; import com.kingdee.eas.custom.shuiyou.interfacelog.LogInfoFactory; import com.kingdee.eas.custom.shuiyou.interfacelog.LogInfoInfo; import com.kingdee.eas.custom.shuiyou.six.osf.vo.SixTConfirmInfo; import com.kingdee.eas.custom.shuiyou.task.TaskCatalogEnum; import com.kingdee.eas.custom.shuiyou.uitls.ISYUtilsFacade; import com.kingdee.eas.custom.shuiyou.uitls.SYUtilsFacadeFactory; import com.kingdee.eas.custom.shuiyou.utils.ClientProxyFactoryUtils; import com.kingdee.eas.hr.base.SqlParam; import com.kingdee.eas.hr.base.app.filter.FilterUtil; import com.kingdee.eas.hr.base.util.HRParamUtil; import com.kingdee.eas.hr.emp.IPersonPosition; import com.kingdee.eas.hr.emp.PersonPositionCollection; import com.kingdee.eas.hr.emp.PersonPositionFactory; import com.kingdee.eas.hr.emp.PersonPositionInfo; import com.kingdee.eas.util.app.DbUtil; import com.kingdee.jdbc.rowset.IRowSet; import com.kingdee.shr.base.syssetting.api.bean.BatchMessageTipsBody; import com.kingdee.shr.base.syssetting.api.bean.BatchMessageTipsHeader; import com.kingdee.shr.base.syssetting.context.SHRContext; import com.kingdee.shr.base.syssetting.exception.SHRWebException; import com.kingdee.shr.base.syssetting.exception.ShrWebBizException; import com.kingdee.shr.base.syssetting.ml.SHRWebResource; import com.kingdee.shr.base.syssetting.web.json.JSONUtils; import com.kingdee.shr.compensation.*; import com.kingdee.shr.compensation.app.formula.tax.Salary2TaxCalculator; import com.kingdee.shr.compensation.app.formula.tax.Salary2TaxCalculatorMgr; import com.kingdee.shr.compensation.app.incomeTax.*; import com.kingdee.shr.compensation.app.tax.*; import com.kingdee.shr.compensation.app.taxCal.CmpCalTaxCalExchangeFacadeFactory; import com.kingdee.shr.compensation.exception.CmpCalDynamicListBizException; import com.kingdee.shr.compensation.exception.ExceptionHandle; import com.kingdee.shr.compensation.helper.CalSchemeBizUtil; import com.kingdee.shr.compensation.helper.CmpConstants; import com.kingdee.shr.compensation.log.modUtils.WizardLogOperateUtils; import com.kingdee.shr.compensation.request.ParseRequestHelper; import com.kingdee.shr.compensation.util.*; import com.kingdee.shr.custom.compensation.accrue.handler.CmpCalDynamicListHandlerExEx; import com.kingdee.util.StringUtils; import org.apache.log4j.Logger; import org.springframework.ui.ModelMap; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.math.BigDecimal; import java.sql.SQLException; import java.text.MessageFormat; import java.text.SimpleDateFormat; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.*; /** * @author qingwu * @date 2024/8/30 * @apiNote BackCalculateService 反算服务 TaxPaymentBackCalculate */ public class CmpCalDynamicListHandlerExExEx extends CmpCalDynamicListHandlerExEx { private Context ctx = SHRContext.getInstance().getContext(); Logger logger = Logger.getLogger("com.kingdee.eas.custom.compensation.handler.CmpCalDynamicListHandlerExExEx"); /** * 反算同步 * * @param request * @param response * @param modelMap * @throws SHRWebException * @throws BOSException * @throws EASBizException */ public void taxPaymentBackSynAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws SHRWebException, BOSException { logger.error("taxPaymentBackSynAction---------starst-------------"); //计算规则ID String cmpschemeid = request.getParameter("cmpschemeid"); if (StringUtils.isEmpty(cmpschemeid)) { throw new ShrWebBizException("计算规则ID不可为空!!"); } Map msgMap = new HashMap(); try { //薪酬项目 Map cmpItemMap = new HashMap(); ICmpItem iCmpItem = CmpItemFactory.getLocalInstance(ctx); //GS014:当月个税 JZT02:税后保应发 CmpItemCollection cmpItemCollection = iCmpItem.getCmpItemCollection("where number in ('GS014','JZT02')"); for (int i = 0; i < cmpItemCollection.size(); i++) { CmpItemInfo cmpItemInfo = cmpItemCollection.get(i); cmpItemMap.put(cmpItemInfo.getNumber(), cmpItemInfo.getFieldSn()); } logger.error("cmpItemMap----------------------" + cmpItemMap); //税款反算 ITaxPaymentBackCalculate iTaxPaymentBackCalculate = TaxPaymentBackCalculateFactory.getLocalInstance(ctx); TaxPaymentBackCalculateCollection taxPaymentBackCalculateCollection = iTaxPaymentBackCalculate.getTaxPaymentBackCalculateCollection("where cmpscheme = '" + cmpschemeid + "'"); if (taxPaymentBackCalculateCollection.size() <= 0) { throw new ShrWebBizException("税款反算未找到该计算规则数据,请进行税款反算提交操作后再同步!!"); } for (int i = 0; i < taxPaymentBackCalculateCollection.size(); i++) { TaxPaymentBackCalculateInfo taxPaymentBackCalculateInfo = taxPaymentBackCalculateCollection.get(i); //税后保应发 BigDecimal salarySum = taxPaymentBackCalculateInfo.getSalarySum(); //当月个税 BigDecimal individual = taxPaymentBackCalculateInfo.getIndividual(); //员工信息 PersonInfo person = taxPaymentBackCalculateInfo.getPerson(); //计算规则 CalSchemeInfo cmpscheme = taxPaymentBackCalculateInfo.getCmpscheme(); // 税后保应发序号 税后保应发 当月个税序号 当月个税 计算规则ID 员工ID String updateSql = String.format("update T_HR_SCmpCalTable set s%s = '%s' , s%s = '%s' where FCALSCHEMEID = '%s' and FPERSONID = '%s'", cmpItemMap.get("JZT02"), salarySum.toString(), cmpItemMap.get("GS014"), individual, cmpscheme.getId(), person.getId()); logger.error("updateSql---------" + updateSql); DbUtil.execute(ctx, updateSql); //String updateSql = "select * from T_HR_SCmpCalTable where FCALSCHEMEID = 'FqEAAAe2vAv/zfKx' and FPERSONID = '383Uzn7KSea0Y+B08YP6qIDvfe0='"; //update T_HR_SCmpCalTable set s1 , s2 where FCALSCHEMEID = '' and FPERSONID = '' } msgMap.put("msg", "同步成功"); JSONUtils.SUCCESS(msgMap); } catch (Exception e) { e.printStackTrace(); throw new ShrWebBizException(e); } } /** * 税款反算 * * @param request * @param response * @param modelMap * @throws ShrWebBizException * @throws BOSException */ public void taxPaymentBackCalculateAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws SHRWebException, BOSException, EASBizException { //计算规则ID String cmpschemeid = request.getParameter("cmpschemeid"); if (StringUtils.isEmpty(cmpschemeid)) { throw new ShrWebBizException("计算规则ID不可为空!!"); } Map rseMap = new HashMap(); List resList = new ArrayList(); //接口日志实体 LogInfoInfo logInfo = new LogInfoInfo(); //入口 logInfo.setEntrance(this.getClass().getName()); logInfo.setBizDate(new Date()); try { //计算规则 ICalScheme iCalScheme = CalSchemeFactory.getLocalInstance(ctx); ITaxUnit iTaxUnit = TaxUnitFactory.getLocalInstance(ctx); IPerson iPerson = PersonFactory.getLocalInstance(ctx); SelectorItemCollection sic = new SelectorItemCollection(); sic.add("taxItemPlanList.taxItemPlan.name"); sic.add("taxItemPlanList.taxItemPlan.number"); sic.add("*"); FilterInfo filterInfo = new FilterInfo(); filterInfo.getFilterItems().add(new FilterItemInfo("id", cmpschemeid, CompareType.EQUALS)); EntityViewInfo entityViewInfo = EntityViewInfo.getInstance(filterInfo, sic, null); CalSchemeInfo calSchemeInfo = iCalScheme.getCalSchemeCollection(entityViewInfo).get(0); //获取当前的薪酬核算 CmpCalTableCollection cmpCalTableCollection = getCalSchemeColl(calSchemeInfo.getId().toString(), calSchemeInfo.getPeriodYear(), calSchemeInfo.getPeriodMonth()); logger.error("cmpCalTableCollection--------" + cmpCalTableCollection.size()); //获取所有人和纳税单位 List taxUnitAndPeople = new ArrayList(); if (cmpCalTableCollection.size() > 0) { for (int i = 0; i < cmpCalTableCollection.size(); i++) { String personId = cmpCalTableCollection.get(i).getPerson().getId().toString(); //查询是否存在税后保实发 Integer abroadIncome = getAbroadIncome(personId, cmpschemeid); logger.error("abroadIncome-----------" + personId + "--------------" + cmpschemeid); logger.error("abroadIncome-----------" + abroadIncome); if (abroadIncome != null && abroadIncome != 0) { //获取纳税单位 String sql = getSalaryOrgMappingByPersonId(personId); logger.error("getSalaryOrgMappingByPersonId--------" + sql); IRowSet iRowSet = DbUtil.executeQuery(ctx, sql); String taxUnitId = null; while (iRowSet.next()) { taxUnitId = iRowSet.getString("taxunit"); } if (!StringUtils.isEmpty(taxUnitId)) { //throw new ShrWebBizException("员工ID:" + personId + "未获取到纳税单位!!"); TaxUnitAndPerson taxUnitAndPerson = new TaxUnitAndPerson(taxUnitId, personId); taxUnitAndPeople.add(taxUnitAndPerson); } } } } logger.error("taxUnitAndPeople-----------" + taxUnitAndPeople); // 通过纳税单位分组 Map> groupedPeople = new HashMap<>(); for (TaxUnitAndPerson taxUnitAndPerson : taxUnitAndPeople) { String taxunitId = taxUnitAndPerson.getTaxunitId(); if (!groupedPeople.containsKey(taxunitId)) { groupedPeople.put(taxunitId, new ArrayList<>()); } groupedPeople.get(taxunitId).add(taxUnitAndPerson); } logger.error("groupedPeople-----------" + groupedPeople); // 输出分组结果 for (Map.Entry> entry : groupedPeople.entrySet()) { logger.error("输出分组结果------------start"); logger.error("taxunitId: " + entry.getKey()); //自定义类 反算服务 SixTConfirmInfo sixTConfirmInfo = new SixTConfirmInfo(); //外部业务编号 sixTConfirmInfo.setBizNo(UUID.randomUUID().toString().replace("-", "")); //纳税单位 String taxunitId = entry.getKey(); TaxUnitInfo taxUnitInfo = iTaxUnit.getTaxUnitInfo("where id = '" + taxunitId + "'"); //个税方案 TaxItemPlanInfo taxItemPlan = calSchemeInfo.getTaxItemPlanList().get(0).getTaxItemPlan(); String taxItemPlanNumber = taxItemPlan.getNumber(); String taxItemPlanName = taxItemPlan.getName(); JSONObject jsonObject = new JSONObject(); jsonObject.put("periodYear", calSchemeInfo.getPeriodYear()); jsonObject.put("periodMonth", calSchemeInfo.getPeriodMonth()); jsonObject.put("cmpschemeid", cmpschemeid); jsonObject.put("taxItemPlanName", taxItemPlanName); jsonObject.put("taxItemPlanNumber", taxItemPlanNumber); logger.error("jsonObject-------------" + jsonObject); //反算服务 ClientProxyFactory clientProxyFactory = ClientProxyFactoryUtils.getClientProxyFactory(); //算税请求接口 TaxRequest taxRequest = clientProxyFactory.getTaxRequest(); //获取请求参数 CalculateIndividualIncomeTaxRequest calculateIndividualIncomeTaxRequest = getCalculateIndividualIncomeTaxRequest(entry, taxUnitInfo, taxItemPlanNumber, taxItemPlanName, cmpschemeid, logInfo); //调用反算服务接口 ApiResponse asyncResultApiResponse = clientProxyFactory.getTaxRequest().reverseCalculateASynIndividualIncomeTax(calculateIndividualIncomeTaxRequest); logger.error("asyncResultApiResponse-----getCode-------" + asyncResultApiResponse.getHead().getCode()); logger.error("asyncResultApiResponse-----getMsg--------" + asyncResultApiResponse.getHead().getMsg()); if (asyncResultApiResponse.getHead().getCode().equals("00000000")) { AsyncResult body = asyncResultApiResponse.getBody(); String requestId = body.getRequestId(); logger.error("requestId-----" + requestId); //查询反算反馈结果 ISYUtilsFacade isyUtilsFacade = SYUtilsFacadeFactory.getLocalInstance(ctx); //backTask(url,requestId,回调osf服务,自定义参数,任务类型) //isyUtilsFacade.backTask(isyUtilsFacade.getConfig().get("ip") + "/gateway/iit/reverseCalculateTax/getASynIndividualIncomeTaxFeedback", requestId, "synIndividualIncomeTaxService", jsonObject.toString(), TaskCatalogEnum.CAL_GET); JSONObject json = new JSONObject(); json.put("requestId", requestId); json.put("param", jsonObject.toString()); isyUtilsFacade.addTask("synIndividualIncomeTaxService", json.toJSONString(), TaskCatalogEnum.UN_CAL_GET, ""); //isyUtilsFacade.backTask("https://test-openapi.17win.com/gateway/iit/reverseCalculateTax/getASynIndividualIncomeTaxFeedback", requestId, "synIndividualIncomeTaxService", jsonObject.toString(), TaskCatalogEnum.CAL_GET); //查询反算反馈结果 //ISYUtilsFacade isyUtilsFacade = SYUtilsFacadeFactory.getLocalInstance(ctx); //backTask(url,requestId,回调osf服务,自定义参数,任务类型) //isyUtilsFacade.backTask(isyUtilsFacade.getConfig().get("ip") + "/gateway/iit/reverseCalculateTax/getASynIndividualIncomeTaxFeedback", requestId, "synIndividualIncomeTaxService", "", TaskCatalogEnum.CAL_GET); //isyUtilsFacade.backTask("https://test-openapi.17win.com/gateway/iit/reverseCalculateTax/getASynIndividualIncomeTaxFeedback", requestId, "synIndividualIncomeTaxService", jsonObject.toString(), TaskCatalogEnum.CAL_GET); //ApiResponse aSynIndividualIncomeTaxFeedback = null; //boolean istrue = true; //while (istrue) { // //ApiResponse aSynIndividualIncomeTaxFeedback = taxRequest.getReverseASynIndividualIncomeTaxFeedback(requestId); // aSynIndividualIncomeTaxFeedback = taxRequest.getReverseASynIndividualIncomeTaxFeedback(requestId); // //ApiResponse aSynIndividualIncomeTaxFeedback =taxRequest.getReverseASynIndividualIncomeTaxFeedback("9a538f46af784ec6b78fa6e2e10e7037"); // String code = aSynIndividualIncomeTaxFeedback.getHead().getCode(); // if (!"100004".equals(code)) { // istrue = false; // } // logger.error("getCode---" + aSynIndividualIncomeTaxFeedback.getHead().getCode()); // logger.error("getMsg---" + aSynIndividualIncomeTaxFeedback.getHead().getMsg()); // // 等待一段时间再进行下一次轮询,这里设置为 5 秒(5000 毫秒) // Thread.sleep(3000); //} //CalculateTaxResultRequest resBody = aSynIndividualIncomeTaxFeedback.getBody(); ////个税反算保存方法 //String saveId = addTaxPaymentBackCalculate(resBody, jsonObject); //resList.add(saveId); } } rseMap.put("msg", "已增加至后台事务中执行!"); } catch (Exception e) { e.printStackTrace(); logInfo.setErrorInfo(e.getMessage());//错误信息 LogInfoFactory.getLocalInstance(ctx).save(logInfo); rseMap.put("msg", e.getMessage()); throw new SHRWebException(e); } JSONUtils.SUCCESS(rseMap); } /** * 获取请求参数 * * @param entry * @param taxUnitInfo * @param taxItemPlanNumber * @param taxItemPlanName * @param cmpschemeid * @param logInfo * @throws BOSException * @throws EASBizException * @throws SQLException * @throws JsonProcessingException */ private CalculateIndividualIncomeTaxRequest getCalculateIndividualIncomeTaxRequest (Map.Entry> entry, TaxUnitInfo taxUnitInfo, String taxItemPlanNumber, String taxItemPlanName, String cmpschemeid, LogInfoInfo logInfo) throws BOSException, EASBizException, SQLException, JsonProcessingException { CalculateIndividualIncomeTaxRequest calculateIndividualIncomeTaxRequest = new CalculateIndividualIncomeTaxRequest(); //外部业务编号 String replace = UUID.randomUUID().toString().replace("-", ""); logger.error("BizNo" + replace); calculateIndividualIncomeTaxRequest.setBizNo(replace); //企业名称(纳税单位) calculateIndividualIncomeTaxRequest.setName(taxUnitInfo.getName()); //calculateIndividualIncomeTaxRequest.setName("荆州九州通医药有限公司00"); //申报密码 logger.error("taxUnitInfo----" + taxUnitInfo); String declPassword = taxUnitInfo.getDeclPassword(); if (StringUtils.isEmpty(declPassword)) { //实名账号 calculateIndividualIncomeTaxRequest.setRealNameAccount(taxUnitInfo.getString("realAccount")); //实名密码 calculateIndividualIncomeTaxRequest.setRealNamePassword(Base64Utils.decode(taxUnitInfo.getRealPassword())); //密码类型 calculateIndividualIncomeTaxRequest.setPasswordType("2"); }else { logger.error("declPassword----" + taxUnitInfo.getDeclPassword()); String sbmm = new String(Base64Utils.decode(declPassword)); //String sbmm = new String(Base64.getDecoder().decode("QWExMjM0NTY=")); logger.error("sbmm----" + sbmm); calculateIndividualIncomeTaxRequest.setDeclarePassword(sbmm); //密码类型 calculateIndividualIncomeTaxRequest.setPasswordType("0"); } //加密实名密码 calculateIndividualIncomeTaxRequest.setEncryptedRealNamePassword(null); //登记序号 calculateIndividualIncomeTaxRequest.setRegistrationNumber(taxUnitInfo.getRegNumber()); //calculateIndividualIncomeTaxRequest.setRegistrationNumber("10117310124834931897"); //税号 calculateIndividualIncomeTaxRequest.setTaxNo(taxUnitInfo.getTaxNumber()); //calculateIndividualIncomeTaxRequest.setTaxNo("91310124834931897I"); //地区编号 calculateIndividualIncomeTaxRequest.setArea(taxUnitInfo.getAreaCode()); //calculateIndividualIncomeTaxRequest.setArea("310101"); //部门编号 calculateIndividualIncomeTaxRequest.setDeptNo(null); //部门名称 calculateIndividualIncomeTaxRequest.setDeptName(null); //税款所属期 //获取当前年月 LocalDateTime now = LocalDateTime.now(); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMM"); String formattedDate = now.format(formatter); calculateIndividualIncomeTaxRequest.setMonth(formattedDate); //获取员工数据 IPersonPosition iPersonPosition = PersonPositionFactory.getLocalInstance(ctx); Set personIds = new HashSet(); for (TaxUnitAndPerson taxUnitAndPerson : entry.getValue()) { logger.error("personId" + taxUnitAndPerson.getPersonId()); String personId = taxUnitAndPerson.getPersonId(); personIds.add(personId); } FilterInfo personFilterInfo = new FilterInfo(); personFilterInfo.getFilterItems().add(new FilterItemInfo("person.id", personIds, CompareType.INCLUDE)); SelectorItemCollection personSic = new SelectorItemCollection(); personSic.add("*"); personSic.add("person.*"); personSic.add("person.employeeType.*"); personSic.add("person.nationality.*"); EntityViewInfo personEntityViewInfo = EntityViewInfo.getInstance(personFilterInfo, personSic, null); PersonPositionCollection personPositionCollection = iPersonPosition.getPersonPositionCollection(personEntityViewInfo); logger.error("personPositionCollection------------size" + personPositionCollection.size()); //综合所得对象 ComplexIncomeRequest complexIncomeRequest = getComplexIncomeRequest(taxItemPlanNumber, taxItemPlanName, personPositionCollection, cmpschemeid, taxUnitInfo); logger.error("complexIncomeRequest------------" + complexIncomeRequest); //综合所得 calculateIndividualIncomeTaxRequest.setComplexIncomeRequest(complexIncomeRequest); //非居民所得 //NonResidentsIncomeRequest nonResidentsIncomeRequest = getNonResidentsIncomeRequest(taxItemPlanName, personInfo, cmpschemeid); logger.error("输出分组结果------------end"); logInfo.setInterfaceAddress("gateway/iit/reverseCalculateTax/calculateASynIndividualIncomeTax");//接口地址 logInfo.setInterfaceName("calculateASynIndividualIncomeTax");//接口名 ObjectMapper mapper = new ObjectMapper(); logger.error("calculateIndividualIncomeTaxRequest------------" + mapper.writeValueAsString(calculateIndividualIncomeTaxRequest)); logInfo.setInParameter(mapper.writeValueAsString(calculateIndividualIncomeTaxRequest));//入参 return calculateIndividualIncomeTaxRequest; } ///** // * 税款反算 // * // * @param request // * @param response // * @param modelMap // * @throws ShrWebBizException // * @throws BOSException // */ //public void taxPaymentBackCalculateAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws SHRWebException, BOSException, SQLException, EASBizException, InterruptedException { // //计算规则ID // String cmpschemeid = request.getParameter("cmpschemeid"); // if (StringUtils.isEmpty(cmpschemeid)) { // throw new ShrWebBizException("计算规则ID不可为空!!"); // } // //计算规则 // ICalScheme iCalScheme = CalSchemeFactory.getLocalInstance(ctx); // ITaxUnit iTaxUnit = TaxUnitFactory.getLocalInstance(ctx); // IPerson iPerson = PersonFactory.getLocalInstance(ctx); // SelectorItemCollection sic = new SelectorItemCollection(); // sic.add("taxItemPlanList.taxItemPlan.name"); // sic.add("taxItemPlanList.taxItemPlan.number"); // sic.add("*"); // FilterInfo filterInfo = new FilterInfo(); // filterInfo.getFilterItems().add(new FilterItemInfo("id", cmpschemeid, CompareType.EQUALS)); // EntityViewInfo entityViewInfo = EntityViewInfo.getInstance(filterInfo, sic, null); // CalSchemeInfo calSchemeInfo = iCalScheme.getCalSchemeCollection(entityViewInfo).get(0); // //获取当前的薪酬核算 // CmpCalTableCollection cmpCalTableCollection = getCalSchemeColl(calSchemeInfo.getId().toString(), calSchemeInfo.getPeriodYear(), calSchemeInfo.getPeriodMonth()); // logger.error("cmpCalTableCollection--------" + cmpCalTableCollection.size()); // Map rseMap = new HashMap(); // List resList = new ArrayList(); // if (cmpCalTableCollection.size() > 0) { // for (int i = 0; i < cmpCalTableCollection.size(); i++) { // String personId = cmpCalTableCollection.get(i).getPerson().getId().toString(); // //自定义类 反算服务 // SixTConfirmInfo sixTConfirmInfo = new SixTConfirmInfo(); // //外部业务编号 // sixTConfirmInfo.setBizNo(UUID.randomUUID().toString().replace("-", "")); // //获取纳税单位 // String sql = getSalaryOrgMappingByPersonId(personId); // logger.error("getSalaryOrgMappingByPersonId--------" + sql); // IRowSet iRowSet = DbUtil.executeQuery(ctx, sql); // if (iRowSet.size() <= 0) { // throw new ShrWebBizException("员工ID:" + personId + "未获取到纳税单位!!"); // } // TaxUnitInfo taxUnitInfo = null; // while (iRowSet.next()) { // taxUnitInfo = iTaxUnit.getTaxUnitInfo("where id = '" + iRowSet.getString("taxunit") + "'"); // } // //个税方案 // TaxItemPlanInfo taxItemPlan = calSchemeInfo.getTaxItemPlanList().get(0).getTaxItemPlan(); // String taxItemPlanNumber = taxItemPlan.getNumber(); // String taxItemPlanName = taxItemPlan.getName(); // //String taxItemPlanNumber = "2024083001"; // JSONObject jsonObject = new JSONObject(); // jsonObject.put("personId", personId); // jsonObject.put("periodYear", calSchemeInfo.getPeriodYear()); // jsonObject.put("periodMonth", calSchemeInfo.getPeriodMonth()); // jsonObject.put("cmpschemeid", cmpschemeid); // jsonObject.put("taxItemPlanName", taxItemPlanName); // jsonObject.put("taxItemPlanNumber", taxItemPlanNumber); // logger.error("jsonObject-------------" + jsonObject); // ClientProxyFactory clientProxyFactory = new ClientProxyFactory( // "46639607259987202405271637080", // "oTmd/QGL2xOfIKItqFGKnw==", // "https://test-openapi.17win.com"); // //反算服务 // //算税请求接口 // TaxRequest taxRequest = clientProxyFactory.getTaxRequest(); // CalculateIndividualIncomeTaxRequest calculateIndividualIncomeTaxRequest = new CalculateIndividualIncomeTaxRequest(); // //外部业务编号 // String replace = UUID.randomUUID().toString().replace("-", ""); // logger.error("BizNo" + replace); // calculateIndividualIncomeTaxRequest.setBizNo(replace); // //企业名称(纳税单位) // calculateIndividualIncomeTaxRequest.setName(taxUnitInfo.getName()); // //calculateIndividualIncomeTaxRequest.setName("荆州九州通医药有限公司00"); // //申报密码 // String sbmm = new String(Base64.getDecoder().decode(taxUnitInfo.getDeclPassword())); // //String sbmm = new String(Base64.getDecoder().decode("QWExMjM0NTY=")); // logger.error("sbmm----" + sbmm); // calculateIndividualIncomeTaxRequest.setDeclarePassword(sbmm); // //密码类型 // calculateIndividualIncomeTaxRequest.setPasswordType(null); // //实名账号 // calculateIndividualIncomeTaxRequest.setRealNameAccount(null); // //实名密码 // calculateIndividualIncomeTaxRequest.setRealNamePassword(null); // //加密实名密码 // calculateIndividualIncomeTaxRequest.setEncryptedRealNamePassword(null); // //登记序号 // calculateIndividualIncomeTaxRequest.setRegistrationNumber(taxUnitInfo.getRegNumber()); // //calculateIndividualIncomeTaxRequest.setRegistrationNumber("10117310124834931897"); // //税号 // calculateIndividualIncomeTaxRequest.setTaxNo(taxUnitInfo.getTaxNumber()); // //calculateIndividualIncomeTaxRequest.setTaxNo("91310124834931897I"); // //地区编号 // calculateIndividualIncomeTaxRequest.setArea(taxUnitInfo.getAreaCode()); // //calculateIndividualIncomeTaxRequest.setArea("310101"); // //部门编号 // calculateIndividualIncomeTaxRequest.setDeptNo(null); // //部门名称 // calculateIndividualIncomeTaxRequest.setDeptName(null); // //税款所属期 // //获取当前年月 // LocalDateTime now = LocalDateTime.now(); // DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMM"); // String formattedDate = now.format(formatter); // calculateIndividualIncomeTaxRequest.setMonth(formattedDate); // //获取员工数据 // IPersonPosition iPersonPosition = PersonPositionFactory.getLocalInstance(ctx); // PersonPositionInfo personPositionInfo = iPersonPosition.getPersonPositionInfo("select *,person.*,person.employeeType.* ,person.nationality.* where person.id = '" + personId + "'"); // //PersonInfo personInfo = iPerson.getPersonInfo(new ObjectUuidPK(personId)); // PersonInfo personInfo = personPositionInfo.getPerson(); // //综合所得对象 // ComplexIncomeRequest complexIncomeRequest = getComplexIncomeRequest(taxItemPlanNumber, taxItemPlanName, personInfo, cmpschemeid); // //综合所得 // calculateIndividualIncomeTaxRequest.setComplexIncomeRequest(complexIncomeRequest); // //非居民所得 // NonResidentsIncomeRequest nonResidentsIncomeRequest = getNonResidentsIncomeRequest(taxItemPlanName, personInfo, cmpschemeid); // calculateIndividualIncomeTaxRequest.setNonResidentsIncomeRequest(nonResidentsIncomeRequest); // // ApiResponse asyncResultApiResponse = clientProxyFactory.getTaxRequest().reverseCalculateASynIndividualIncomeTax(calculateIndividualIncomeTaxRequest); // logger.error("asyncResultApiResponse-----getCode-------" + asyncResultApiResponse.getHead().getCode()); // logger.error("asyncResultApiResponse-----getMsg--------" + asyncResultApiResponse.getHead().getMsg()); // if (asyncResultApiResponse.getHead().getCode().equals("00000000")) { // AsyncResult body = asyncResultApiResponse.getBody(); // String requestId = body.getRequestId(); // logger.error("requestId-----" + requestId); // //查询反算反馈结果 // //ISYUtilsFacade isyUtilsFacade = SYUtilsFacadeFactory.getLocalInstance(ctx); // //backTask(url,requestId,回调osf服务,自定义参数,任务类型) // //isyUtilsFacade.backTask(isyUtilsFacade.getConfig().get("ip") + "/gateway/iit/reverseCalculateTax/getASynIndividualIncomeTaxFeedback", requestId, "synIndividualIncomeTaxService", "", TaskCatalogEnum.CAL_GET); // //isyUtilsFacade.backTask("https://test-openapi.17win.com/gateway/iit/reverseCalculateTax/getASynIndividualIncomeTaxFeedback", requestId, "synIndividualIncomeTaxService", jsonObject.toString(), TaskCatalogEnum.CAL_GET); // ApiResponse aSynIndividualIncomeTaxFeedback = null; // boolean istrue = true; // while (istrue) { // //ApiResponse aSynIndividualIncomeTaxFeedback = taxRequest.getReverseASynIndividualIncomeTaxFeedback(requestId); // aSynIndividualIncomeTaxFeedback = taxRequest.getReverseASynIndividualIncomeTaxFeedback(requestId); // //ApiResponse aSynIndividualIncomeTaxFeedback =taxRequest.getReverseASynIndividualIncomeTaxFeedback("9a538f46af784ec6b78fa6e2e10e7037"); // String code = aSynIndividualIncomeTaxFeedback.getHead().getCode(); // if (!"100004".equals(code)) { // istrue = false; // } // logger.error("getCode---" + aSynIndividualIncomeTaxFeedback.getHead().getCode()); // logger.error("getMsg---" + aSynIndividualIncomeTaxFeedback.getHead().getMsg()); // // 等待一段时间再进行下一次轮询,这里设置为 5 秒(5000 毫秒) // Thread.sleep(3000); // } // CalculateTaxResultRequest resBody = aSynIndividualIncomeTaxFeedback.getBody(); // //个税反算保存方法 // String saveId = addTaxPaymentBackCalculate(resBody, jsonObject); // resList.add(saveId); // } // } // rseMap.put("resListSize", resList.size()); // rseMap.put("resList", resList); // JSONUtils.writeJson(response, rseMap); // } //} /** * 添加个税反算数据 * * @param resBody 查询反算反馈结果接口返回结果 * @param param 员工ID * @return */ public String addTaxPaymentBackCalculate(CalculateTaxResultRequest resBody, com.alibaba.fastjson.JSONObject param) throws BOSException, EASBizException { logger.error("addTaxPaymentBackCalculate============Start==============="); String personId = param.getString("personId");//员工ID String periodYear = param.getString("periodYear");//统计年 String periodMonth = param.getString("periodMonth");//统计月 String cmpschemeid = param.getString("cmpschemeid");//计算规则ID String taxItemPlanName = param.getString("taxItemPlanName");//个税项目方案 String taxItemPlanNumber = param.getString("taxItemPlanNumber");//个税项目方案 //查询税款反算表是否存在该数据 ITaxPaymentBackCalculate iTaxPaymentBackCalculate = TaxPaymentBackCalculateFactory.getLocalInstance(ctx); FilterInfo filterInfo = new FilterInfo(); filterInfo.getFilterItems().add(new FilterItemInfo("person", personId, CompareType.EQUALS)); filterInfo.getFilterItems().add(new FilterItemInfo("periodMonth", periodMonth, CompareType.EQUALS)); filterInfo.getFilterItems().add(new FilterItemInfo("periodYear", periodYear, CompareType.EQUALS)); filterInfo.getFilterItems().add(new FilterItemInfo("cmpscheme", cmpschemeid, CompareType.EQUALS)); EntityViewInfo entityViewInfo = EntityViewInfo.getInstance(filterInfo, null, null); TaxPaymentBackCalculateCollection taxPaymentBackCalculateCollection = iTaxPaymentBackCalculate.getTaxPaymentBackCalculateCollection(entityViewInfo); TaxPaymentBackCalculateInfo taxPaymentBackCalculateInfo = new TaxPaymentBackCalculateInfo(); if (taxPaymentBackCalculateCollection.size() > 0) { taxPaymentBackCalculateInfo = taxPaymentBackCalculateCollection.get(0); taxPaymentBackCalculateInfo.setId(taxPaymentBackCalculateCollection.get(0).getId()); } //员工 taxPaymentBackCalculateInfo.setPerson(PersonFactory.getLocalInstance(ctx).getPersonInfo(new ObjectUuidPK(personId))); //统计年 taxPaymentBackCalculateInfo.setPeriodYear(periodYear); //统计月 taxPaymentBackCalculateInfo.setPeriodMonth(periodMonth); //计算规则 taxPaymentBackCalculateInfo.setCmpscheme(CalSchemeFactory.getLocalInstance(ctx).getCalSchemeInfo(new ObjectUuidPK(cmpschemeid))); //个税项目方案 taxPaymentBackCalculateInfo.setTaxItemPlan(taxItemPlanName); ComplexTaxCalculateResult complexTaxCalculateResult = null; //zhsd 综合所得 ComplexIncomeResultRequest complexIncomeResultRequest = resBody.getComplexIncomeResultRequest(); //全年一次性奖金 if ("GS003".equals(taxItemPlanNumber)) { //qnycxjjsslb 全年一次性奖金 complexTaxCalculateResult = complexIncomeResultRequest.getAnnualOneTimeBonusIncome(); } //一般劳务报酬所得列表 if ("GS002".equals(taxItemPlanNumber)) { //lwbclb 一般劳务报酬所得列表 complexTaxCalculateResult = complexIncomeResultRequest.getLaborRemunerationIncome(); } //正常工资薪金对象 if ("GS001".equals(taxItemPlanNumber)) { //zcgzxj 正常工资薪金对象 complexTaxCalculateResult = complexIncomeResultRequest.getNormalSalarySpecIncome(); } List successComplexIncomes = complexTaxCalculateResult.getSuccessComplexIncomes(); ComplexIncome complexIncome = successComplexIncomes.get(0); //sre 收入额 BigDecimal income = complexIncome.getIncome(); taxPaymentBackCalculateInfo.setSalarySum(income); //ybtse refundTax 应补退税额 BigDecimal refundTax = complexIncome.getRefundTax(); taxPaymentBackCalculateInfo.setIndividual(refundTax); IObjectPK save = iTaxPaymentBackCalculate.save(taxPaymentBackCalculateInfo); logger.error("addTaxPaymentBackCalculate============end==============="); return save.toString(); } /** * 获取非居民所得 对象 * * @return */ public NonResidentsIncomeRequest getNonResidentsIncomeRequest(String taxItemPlanName, PersonInfo personInfo, String cmpschemeid) throws SQLException, BOSException { NonResidentsIncomeRequest nonResidentsIncomeRequest = new NonResidentsIncomeRequest(); List foreignerWagesSalaryIncomes = new ArrayList(); NonResidentsIncome nonResidentsIncome = getNonResidentsIncome(taxItemPlanName, personInfo, cmpschemeid); foreignerWagesSalaryIncomes.add(nonResidentsIncome); nonResidentsIncomeRequest.setForeignerWagesSalaryIncomes(foreignerWagesSalaryIncomes); return nonResidentsIncomeRequest; } /** * 非居民所得-无住所个人正常工资薪金 * * taxItemPlanName 个税项目名称 * * personInfo 员工信息 * * cmpschemeid 计算规则ID */ public NonResidentsIncome getNonResidentsIncome(String taxItemPlanName, PersonInfo personInfo, String cmpschemeid) throws SQLException, BOSException { NonResidentsIncome nonResidentsIncome = new NonResidentsIncome(); //nonResidentsIncome.setName("何云"); //nonResidentsIncome.setLicenseType("居民身份证"); //nonResidentsIncome.setLicenseNumber("429004198601085125"); //nonResidentsIncome.setAbroadIncome(new BigDecimal("8000")); //nonResidentsIncome.setIncomeItemName("无住所个人正常工资薪金"); //姓名 nonResidentsIncome.setName(personInfo.getName()); //complexIncome.setName("何云"); //居民身份证 if (personInfo.getIdCardNO() != null) { //证照号码 nonResidentsIncome.setLicenseNumber(personInfo.getIdCardNO()); //证照类型 nonResidentsIncome.setLicenseType("居民身份证"); } //中国护照不 if (personInfo.getPassportNO() != null) { //证照类型 nonResidentsIncome.setLicenseType("中国护照"); //证照号码 nonResidentsIncome.setLicenseNumber(personInfo.getPassportNO()); } Integer abroadIncome = getAbroadIncome(personInfo.getId().toString(), cmpschemeid); //complexIncome.setLicenseNumber("429004198601085125"); //税后收入额 //nonResidentsIncome.setAbroadIncome(new BigDecimal(abroadIncome)); nonResidentsIncome.setIncomeItemName(taxItemPlanName); return nonResidentsIncome; } /** * 获取综合所得 * taxItemPlanNumber 个税项目编码 * taxItemPlanName 个税项目名称 * personInfo 员工信息 * cmpschemeid 计算规则ID * * @return */ public ComplexIncomeRequest getComplexIncomeRequest(String taxItemPlanNumber, String taxItemPlanName, PersonPositionCollection personPositionCollection, String cmpschemeid, TaxUnitInfo taxUnitInfo) throws BOSException, EASBizException, SQLException { logger.error("getComplexIncomeRequest-----" + taxItemPlanNumber + "---" + taxItemPlanName + "---" + personPositionCollection + "---" + cmpschemeid); ComplexIncomeRequest complexIncomeRequest = new ComplexIncomeRequest(); //全年一次性奖金 if (taxItemPlanNumber.equals("GS003")) { //if (taxItemPlanNumber.equals("2024083001")) { List aOneBonusIncomeList = new ArrayList(); for (int i = 0; i < personPositionCollection.size(); i++) { PersonPositionInfo personPositionInfo = personPositionCollection.get(i); PersonInfo personInfo = personPositionInfo.getPerson(); logger.error("getAbroadIncome-----" + personInfo.getName() + "-----------" + getAbroadIncome(personInfo.getId().toString(), cmpschemeid)); if (getAbroadIncome(personInfo.getId().toString(), cmpschemeid) != null || getAbroadIncome(personInfo.getId().toString(), cmpschemeid) != 0) { ComplexIncome annualOneTimeBonusIncome = getAnnualOneTimeBonusIncome(personInfo, taxItemPlanName, cmpschemeid); aOneBonusIncomeList.add(annualOneTimeBonusIncome); complexIncomeRequest.setAnnualOneTimeBonusIncome(aOneBonusIncomeList); } } } //一般劳务报酬所得列表 //if (taxItemPlanNumber.equals("2024083003")) { if (taxItemPlanNumber.equals("GS002")) { List complexIncomeList = new ArrayList(); for (int i = 0; i < personPositionCollection.size(); i++) { PersonPositionInfo personPositionInfo = personPositionCollection.get(i); PersonInfo personInfo = personPositionInfo.getPerson(); logger.error("getAbroadIncome-----" + personInfo.getName() + "-----------" + +getAbroadIncome(personInfo.getId().toString(), cmpschemeid)); if (getAbroadIncome(personInfo.getId().toString(), cmpschemeid) != null || getAbroadIncome(personInfo.getId().toString(), cmpschemeid) != 0) { ComplexIncome laborRemunerationIncome = getLaborRemunerationIncome(personInfo, taxItemPlanName, cmpschemeid); complexIncomeList.add(laborRemunerationIncome); complexIncomeRequest.setLaborRemunerationIncome(complexIncomeList); } } } //正常工资薪金对象 //if (taxItemPlanNumber.equals("2024083004")) { if (taxItemPlanNumber.equals("GS001")) { logger.error("GS001-----" + personPositionCollection); NormalSalarySpecIncome normalSalarySpecIncome = getNormalSalarySpecIncome(personPositionCollection, taxItemPlanName, cmpschemeid, taxUnitInfo); complexIncomeRequest.setNormalSalarySpecIncome(normalSalarySpecIncome); } return complexIncomeRequest; } /** * 获取全年一次性奖金 * taxItemPlanName 个税项目名称 * cmpschemeid 计算规则ID * * @return */ public ComplexIncome getAnnualOneTimeBonusIncome(PersonInfo personInfo, String taxItemPlanName, String cmpschemeid) throws SQLException, BOSException { ComplexIncome complexIncome = new ComplexIncome(); //姓名 complexIncome.setName(personInfo.getName()); //complexIncome.setName("何云"); //居民身份证 if (personInfo.getIdCardNO() != null) { //证照号码 complexIncome.setLicenseNumber(personInfo.getIdCardNO()); //证照类型 complexIncome.setLicenseType("居民身份证"); } //中国护照不 if (personInfo.getPassportNO() != null) { //证照类型 complexIncome.setLicenseType("中国护照"); //证照号码 complexIncome.setLicenseNumber(personInfo.getPassportNO()); } Integer abroadIncome = getAbroadIncome(personInfo.getId().toString(), cmpschemeid); //complexIncome.setLicenseNumber("429004198601085125"); //税后收入额 complexIncome.setAfterTaxIncome(new BigDecimal(abroadIncome)); complexIncome.setIncomeItemName(taxItemPlanName); return complexIncome; } /** * 获取一般劳务报酬所得 * taxItemPlanName 个税项目名称 * cmpschemeid 计算规则ID * * @return */ public ComplexIncome getLaborRemunerationIncome(PersonInfo personInfo, String taxItemPlanName, String cmpschemeid) throws SQLException, BOSException { ComplexIncome complexIncome = new ComplexIncome(); //姓名 complexIncome.setName(personInfo.getName()); //complexIncome.setName("何云"); //居民身份证 if (personInfo.getIdCardNO() != null) { //证照号码 complexIncome.setLicenseNumber(personInfo.getIdCardNO()); //证照类型 complexIncome.setLicenseType("居民身份证"); } //中国护照不 if (personInfo.getPassportNO() != null) { //证照类型 complexIncome.setLicenseType("中国护照"); //证照号码 complexIncome.setLicenseNumber(personInfo.getPassportNO()); } Integer abroadIncome = getAbroadIncome(personInfo.getId().toString(), cmpschemeid); //complexIncome.setLicenseNumber("429004198601085125"); //税后收入额 complexIncome.setAfterTaxIncome(new BigDecimal(abroadIncome)); complexIncome.setIncomeItemName(taxItemPlanName); return complexIncome; } /** * 获取正常工资薪金对象 * * @return */ public NormalSalarySpecIncome getNormalSalarySpecIncome(PersonPositionCollection personPositionCollection, String taxItemPlanName, String cmpschemeid, TaxUnitInfo taxUnitInfo) throws BOSException, EASBizException, SQLException { logger.error("getNormalSalarySpecIncome-------------start"); //正常工资薪金对象 NormalSalarySpecIncome normalSalarySpecIncome = new NormalSalarySpecIncome(); //人员列表 List companyEmployeeList = new ArrayList(); for (int i = 0; i < personPositionCollection.size(); i++) { PersonPositionInfo personPositionInfo = personPositionCollection.get(i); PersonInfo personInfo = personPositionInfo.getPerson(); //获取人员数据 DetailCompanyEmployee detailCompanyEmployee = getDetailCompanyEmployee(personInfo, taxUnitInfo); companyEmployeeList.add(detailCompanyEmployee); normalSalarySpecIncome.setCompanyEmployeeList(companyEmployeeList); //正常薪金列表 List normalSalarySpec = new ArrayList(); ComplexIncome complexIncome = new ComplexIncome(); //姓名 complexIncome.setName(personInfo.getName()); //complexIncome.setName("何云"); //居民身份证 if (personInfo.getIdCardNO() != null) { //证照号码 complexIncome.setLicenseNumber(personInfo.getIdCardNO()); //证照类型 complexIncome.setLicenseType("居民身份证"); } //中国护照不 if (personInfo.getPassportNO() != null) { //证照类型 complexIncome.setLicenseType("中国护照"); //证照号码 complexIncome.setLicenseNumber(personInfo.getPassportNO()); } Integer abroadIncome = getAbroadIncome(personInfo.getId().toString(), cmpschemeid); //complexIncome.setLicenseNumber("429004198601085125"); //税后收入额 complexIncome.setAfterTaxIncome(new BigDecimal(abroadIncome)); complexIncome.setIncomeItemName(taxItemPlanName); normalSalarySpec.add(complexIncome); normalSalarySpecIncome.setNormalSalarySpec(normalSalarySpec); } return normalSalarySpecIncome; } /** * 人员 * * @return */ public DetailCompanyEmployee getDetailCompanyEmployee(PersonInfo personInfo, TaxUnitInfo taxUnitInfo) throws BOSException, EASBizException { logger.error("getDetailCompanyEmployee-------------start"); //人员对象 DetailCompanyEmployee detailCompanyEmployee = new DetailCompanyEmployee(); ////姓名 //detailCompanyEmployee.setName("何云"); ////证件类型 //detailCompanyEmployee.setLicenseType("居民身份证"); ////证照号码 //detailCompanyEmployee.setLicenseNumber("429004198601085125"); //姓名 detailCompanyEmployee.setName(personInfo.getName()); logger.error("personInfoName-------------" + personInfo.getName()); logger.error("personInfo.getIdCardNO()-------------" + personInfo.getIdCardNO()); //complexIncome.setName("何云"); //居民身份证 if (personInfo.getIdCardNO() != null) { //证照号码 detailCompanyEmployee.setLicenseNumber(personInfo.getIdCardNO()); //证照类型 detailCompanyEmployee.setLicenseType("居民身份证"); //人员地区 detailCompanyEmployee.setArea("境内"); } //中国护照 if (personInfo.getPassportNO() != null) { //证照类型 detailCompanyEmployee.setLicenseType("中国护照"); //证照号码 detailCompanyEmployee.setLicenseNumber(personInfo.getPassportNO()); //人员地区 detailCompanyEmployee.setArea("境外"); } //电话号码 detailCompanyEmployee.setPhone(personInfo.getCell()); //人员状态 detailCompanyEmployee.setState(personInfo.getEmployeeType().getName()); //人员报税信息->任职受雇从业信息 ITaxPersonRecordEntry iTaxPersonRecordEntry = TaxPersonRecordEntryFactory.getLocalInstance(ctx); TaxPersonRecordEntryCollection taxPersonRecordEntryCollection = iTaxPersonRecordEntry.getTaxPersonRecordEntryCollection("where person.id = '" + personInfo.getId() + "'"); TaxPersonRecordEntryInfo taxPersonRecordEntryInfo = taxPersonRecordEntryCollection.get(0); logger.error("taxPersonRecordEntryInfo-------------" + taxPersonRecordEntryInfo); //任职受雇类型 可选择雇员、保险营销员、证券经纪人、其他、实习学生(全日制学历教育) //detailCompanyEmployee.setIsEmployee("其他"); if (taxPersonRecordEntryInfo.getEmployedType() == null) { detailCompanyEmployee.setIsEmployee("其他"); } else { detailCompanyEmployee.setIsEmployee(taxPersonRecordEntryInfo.getEmployedType().getAlias()); } //受雇日期 YYYY-MM-DD,不能大于当前时间,任职受雇类型选择雇员、保险营销员、证券经纪人时必录 SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd"); detailCompanyEmployee.setEmployedDate(inputFormat.format(taxPersonRecordEntryInfo.getEmployedDate())); //性别 detailCompanyEmployee.setGender(personInfo.getGender().getAlias()); //出生日期 detailCompanyEmployee.setBirthday(inputFormat.format(personInfo.getBirthday())); //国籍 nationality NationalityInfo nationality = personInfo.getNationality(); detailCompanyEmployee.setNationality(nationality.getName()); //纳税人状态 detailCompanyEmployee.setState(taxPersonRecordEntryInfo.getPersonStatus().getAlias()); logger.error("detailCompanyEmployee-------------" + detailCompanyEmployee); logger.error("getDetailCompanyEmployee-------------end"); return detailCompanyEmployee; } /** * 获取税后收入额 系统字段=税后保实发 * * @param perosnId * @param cmpschemeid * @return */ public Integer getAbroadIncome(String perosnId, String cmpschemeid) throws BOSException, SQLException { String sql = String.format("select S328 from T_HR_SCmpCalTable where FPERSONID = '%s' and FCALSCHEMEID = '%s'", perosnId, cmpschemeid); logger.error("getAbroadIncomeSql---------------" + sql); IRowSet iRowSet = DbUtil.executeQuery(ctx, sql); Integer abroadIncome = null; while (iRowSet.next()) { abroadIncome = iRowSet.getInt("S328"); } return abroadIncome; } /** * 获取纳税单元 * * @param personId * @return */ public String getSalaryOrgMappingByPersonId(String personId) { StringBuilder sb = new StringBuilder(); sb.append("select top 1 ").append("\n"); sb.append("cmpOrgUnitCus.FTAXUNITID as taxunit").append("\n"); sb.append("from CT_COM_CmpOrgUnitCus cmpOrgUnitCus").append("\n"); sb.append("left join T_HR_SPersonCmp personCmp on personCmp.Fid = cmpOrgUnitCus.FPERSONCMPID").append("\n"); sb.append("left join T_bd_person person on person.Fid = personCmp.FPERSONID").append("\n"); sb.append("where").append("\n"); sb.append("person.Fid = '").append(personId).append("'").append("\n"); sb.append("order by cmpOrgUnitCus.FLEFFECTTIME desc ").append("\n"); return sb.toString(); } /** * 通过计算规则id获取薪酬核算数据 * * @param cmpschemeid * @throws BOSException */ public CmpCalTableCollection getCalSchemeColl(String cmpschemeid, int year, int month) throws BOSException { ICmpCalTable iCmpCalTable = CmpCalTableFactory.getLocalInstance(ctx); SelectorItemCollection sic = new SelectorItemCollection(); sic.add("*"); sic.add("calScheme.*"); sic.add("person.*"); //获取当前月的薪酬计算 FilterInfo filterInfo = new FilterInfo(); filterInfo.getFilterItems().add(new FilterItemInfo("calScheme", cmpschemeid, CompareType.EQUALS)); filterInfo.getFilterItems().add(new FilterItemInfo("periodYear", year, CompareType.EQUALS)); filterInfo.getFilterItems().add(new FilterItemInfo("periodMonth", month, CompareType.EQUALS)); EntityViewInfo entityViewInfo = EntityViewInfo.getInstance(filterInfo, sic, null); CmpCalTableCollection cmpCalTableCollection = iCmpCalTable.getCmpCalTableCollection(entityViewInfo); return cmpCalTableCollection; } public String beforeSubmitPreDataAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws SHRWebException, BOSException, SQLException { String cmpSchemeId = request.getParameter("cmpschemeid"); this.verifyMultiUipkScheme(request, cmpSchemeId); Context ctx = SHRContext.getInstance().getContext(); String language = ctx.getLocale().getLanguage(); CalSchemeInfo calSchemeInfo = CalSchemeBizUtil.getCalSchemeInfo(ctx, cmpSchemeId); if (!calSchemeInfo.isIsUseForTaxCal()) { throw new ShrWebBizException(EASResource.getString("com.kingdee.shr.compensation.resource.TaxCalBaseResource", "label_tax_item_plan", ctx.getLocale())); } else { TaxItemPlanShemeRelCollection taxItemPlanList = calSchemeInfo.getTaxItemPlanList(); if (null != taxItemPlanList && !taxItemPlanList.isEmpty()) { StringBuilder incomeItemIds = new StringBuilder(); for(int i = 0; i < taxItemPlanList.size(); ++i) { if (taxItemPlanList.get(i).getTaxItemPlan().getIncomeItem() == null) { throw new ShrWebBizException(EASResource.getString("com.kingdee.shr.compensation.resource.TaxCalBaseResource", "label239", ctx.getLocale())); } if (incomeItemIds.length() > 0) { incomeItemIds.append(","); } incomeItemIds.append(taxItemPlanList.get(i).getTaxItemPlan().getIncomeItem().getId().toString()); } String filterSql = this.getCalKeyFromSeesion(request); String calSql = "select FID from T_HR_SCmpCalTable where FCalState = 4 and FID in (" + filterSql + ") and (FisNotNeedCal = 0 or FisNotNeedCal is null)"; IRowSet rowSet = null; try { rowSet = DbUtil.executeQuery(ctx, calSql); } catch (BOSException e) { logger.error(e.getMessage(), e); } int tcal = rowSet == null ? 0 : rowSet.size(); if (tcal < 1) { throw new ShrWebBizException(EASResource.getString("com.kingdee.shr.compensation.resource.TaxCalBaseResource", "label223", ctx.getLocale())); } else { CmpTaxUtil cmpTaxUtil = new CmpTaxUtil(); Map taxYearRange = cmpTaxUtil.getTaxYearRange(ctx, calSchemeInfo); int taxYear = cmpTaxUtil.getTaxYear(ctx, calSchemeInfo); if (null == taxYearRange) { throw new ShrWebBizException(EASResource.getString("com.kingdee.shr.compensation.resource.TaxCalBaseResource", "label224", ctx.getLocale())); } else { Date taxBeginDate = (Date)taxYearRange.get("beginDate"); int periodYear = calSchemeInfo.getPeriodYear(); int periodMonth = calSchemeInfo.getPeriodMonth(); Calendar max = Calendar.getInstance(); max.set(periodYear, periodMonth - 1, 2); int result = 0; Calendar min = Calendar.getInstance(); min.setTime(taxBeginDate); min.set(min.get(1), min.get(2), 1); while(min.before(max)) { ++result; min.add(2, 1); } Calendar calendar = Calendar.getInstance(); calendar.set(taxYear, result - 1, 1, 0, 0, 0); Map obj = new HashMap(); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); obj.put("taxPeriodDate", format.format(calendar.getTime())); boolean isCal = true; try { isCal = HRParamUtil.getParamOfHR(ctx, "shr_cmp_026", (String)null); } catch (Exception e) { ExceptionHandle.handleException(e); } StringBuilder personNames = new StringBuilder(); int count = 0; if (isCal) { 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) "; for(IRowSet var35 = DbUtil.executeQuery(ctx, getCalDetailSQL); var35.next(); ++count) { if (count > 5) { personNames.append(MessageFormat.format(SHRWebResource.getString("com.kingdee.shr.compensation.resource.TaxCalBaseResource", "label225"), var35.size())); break; } if (personNames.length() > 0) { personNames.append("、"); } personNames.append(var35.getString("NAME")).append("(").append(var35.getString("PERSONNUMBER")).append(")"); } } else { 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) "; for(IRowSet rowSet1 = DbUtil.executeQuery(ctx, getTaxCalInitDetailSQL); rowSet1.next(); ++count) { if (count > 5) { personNames.append(MessageFormat.format(SHRWebResource.getString("com.kingdee.shr.compensation.resource.TaxCalBaseResource", "label225"), rowSet1.size())); break; } if (personNames.length() > 0) { personNames.append("、"); } personNames.append(rowSet1.getString("personName")).append("(").append(rowSet1.getString("PERSONNUMBER")).append(")"); } } StringBuilder confirmMessage = new StringBuilder(); if (!StringUtils.isEmpty(personNames.toString())) { String prefix = EASResource.getString("com.kingdee.shr.compensation.resource.TaxCalBaseResource", "label226", ctx.getLocale()); confirmMessage.append(prefix).append(personNames.toString().replaceFirst(",", "")); } if (!StringUtils.isEmpty(confirmMessage.toString())) { obj.put("confirmMsg", confirmMessage.toString()); obj.put("confirm", true); } else { obj.put("confirm", false); } JSONUtils.writeJson(response, obj); return null; } } } else { throw new ShrWebBizException(EASResource.getString("com.kingdee.shr.compensation.resource.TaxCalBaseResource", "label_tax_item_plan", ctx.getLocale())); } } } private String getCalKeyFromSeesion(HttpServletRequest request) throws SHRWebException { String filterSql = ""; if (!StringUtils.isEmpty(request.getParameter("selectedData"))) { filterSql = "'" + CmpStrUtil.join(request.getParameter("selectedData").split(","), "','", (String)null) + "'"; } else { HttpSession session = request.getSession(); Object cmpschemeid = ParseRequestHelper.getParameterByRequest(request, "cmpschemeid"); Object sqlParamObject = session.getAttribute(cmpschemeid == null ? "" : cmpschemeid.toString() + "sqlParam"); SqlParam param = null; if (sqlParamObject instanceof Map) { Map sqlParamMap = (Map)sqlParamObject; param = (SqlParam)sqlParamMap.get(cmpschemeid == null ? "" : cmpschemeid.toString() + "sqlParam"); } else { param = (SqlParam)session.getAttribute(cmpschemeid == null ? "" : cmpschemeid.toString() + "sqlParam"); } Map map = new HashMap(); map.put("cmp_ctb.id", "cmp_ctb.id"); param.setSelectMapping(map); String originalSql = ""; try { originalSql = FilterUtil.getSql(SHRContext.getInstance().getContext(), param); } catch (Exception e) { e.printStackTrace(); } String key = "cal_" + originalSql; String tempName = ""; try { tempName = null == BaseUtils.getCacheMap(key) ? null : BaseUtils.getCacheMap(key).toString(); if (null != tempName) { return tempName; } filterSql = this.util.getTempTable(key, originalSql); } catch (Exception var12) { filterSql = this.util.getTempTable(key, originalSql); } } return filterSql; } private void verifyMultiUipkScheme(HttpServletRequest request, String cmpschemeid) throws SHRWebException { HttpSession session = request.getSession(); String uipk = request.getParameter("uipk"); Object uipkObj = session.getAttribute(cmpschemeid + "uipk"); String queryUipk = uipkObj == null ? "" : uipkObj.toString(); if (!StringUtils.isEmpty(queryUipk) && !queryUipk.equals(uipk)) { throw new ShrWebBizException(new com.kingdee.shr.compensation.exception.CmpCalDynamicListBizException(com.kingdee.shr.compensation.exception.CmpCalDynamicListBizException.EXCEPTION148)); } else { String cmpSchemeId = String.valueOf(session.getAttribute("calscheme")).trim(); if (!cmpSchemeId.equals(cmpschemeid)) { throw new ShrWebBizException(new com.kingdee.shr.compensation.exception.CmpCalDynamicListBizException(CmpCalDynamicListBizException.EXCEPTION149)); } } } public String submitPreDataAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws SHRWebException { String cmpSchemeId = request.getParameter("cmpschemeid"); String zeroIncome = request.getParameter("isZeroIncome"); boolean isZeroIncome = Boolean.parseBoolean(zeroIncome); this.verifyMultiUipkScheme(request, cmpSchemeId); String uid = ""; try { BaseUtils.clearCacheMap(); Salary2TaxCalculator cal = new Salary2TaxCalculator(); Salary2TaxCalculatorMgr.addTask(cal); uid = cal.getUID(); String taxPeriodDate = request.getParameter("taxPeriodDate"); String filterSql = this.getCalKeyFromSeesion(request); 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') ) "; HashMap mapParam = new HashMap(); mapParam.put("cmpschemeid", cmpSchemeId); mapParam.put("uid", uid); mapParam.put("cmpcalid", calSql); mapParam.put("filterSql", filterSql); mapParam.put("taxPeriodDate", taxPeriodDate); Context ctx = SHRContext.getInstance().getContext(); Map rmap; try { if (!isZeroIncome) { rmap = CmpCalTaxCalExchangeFacadeFactory.getLocalInstance(ctx).submitData(mapParam); } else { rmap = CmpCalTaxCalExchangeFacadeFactory.getLocalInstance(ctx).genZeroIncome(mapParam); } } catch (Exception e) { throw new ShrWebBizException(EASResource.getString("com.kingdee.shr.compensation.resource.TaxCalBaseResource", "label227", ctx.getLocale()) + e.getMessage()); } if (rmap == null || rmap.get("UID") == null || StringUtils.isEmpty(rmap.get("UID").toString())) { throw new ShrWebBizException(rmap + " " + EASResource.getString("com.kingdee.shr.compensation.resource.TaxCalBaseResource", "label228", ctx.getLocale())); } BatchMessageTipsHeader header = (BatchMessageTipsHeader)rmap.get("header"); 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') )"; IRowSet rowSet2 = null; try { rowSet2 = DbUtil.executeQuery(ctx, calSql2); } catch (BOSException e) { logger.error(e.getMessage(), e); } String billId = header.getBillId()==null?"":header.getBillId(); String[] ids =billId.split(","); List idsList = new ArrayList<>(); idsList.addAll(Arrays.asList(ids)); while (rowSet2.next()) { String id = rowSet2.getString("fid"); String fname_l2 = rowSet2.getString("fname_l2"); String fnumber = rowSet2.getString("fnumber"); idsList.add(id); BatchMessageTipsBody body = new BatchMessageTipsBody(); body.setId(id); body.setMuitTipsState(Boolean.FALSE); body.setMuitTipsMessage("劳务派遣(内部)和业务外包(内部)的人员不允许进行个税初算数据提交"); List messageListExt = new ArrayList(); messageListExt.add(fnumber); messageListExt.add(fname_l2); messageListExt.add(""); messageListExt.add(""); body.addMessageListExt(messageListExt); header.addResult(body); header.setFailureCount(header.getFailureCount() + 1); } header.setBillId(CmpStrUtil.convertListToString(idsList)); JSONUtils.SUCCESS(header); } catch (Exception e) { ExceptionHandle.handleException(e); } finally { if (!StringUtils.isEmpty(uid)) { Salary2TaxCalculatorMgr.removeTask(uid, ""); } } request.setAttribute(CmpConstants.CMP_LOG_OPERATE, WizardLogOperateUtils.getOperateLocalCmpScheme(request)); return null; } }