SubmitAsynTaxCalRequestService.java 47 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925
  1. package com.kingdee.eas.custom.shuiyou.taxCal.service;
  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.fasterxml.jackson.databind.ObjectMapper;
  8. import com.kingdee.bos.BOSException;
  9. import com.kingdee.bos.Context;
  10. import com.kingdee.bos.bsf.service.app.IHRMsfService;
  11. import com.kingdee.bos.dao.ormapping.ObjectUuidPK;
  12. import com.kingdee.eas.common.EASBizException;
  13. import com.kingdee.eas.custom.shuiyou.interfacelog.ILogInfo;
  14. import com.kingdee.eas.custom.shuiyou.interfacelog.LogInfoFactory;
  15. import com.kingdee.eas.custom.shuiyou.interfacelog.LogInfoInfo;
  16. import com.kingdee.eas.custom.shuiyou.task.MessageResult;
  17. import com.kingdee.eas.custom.shuiyou.task.TaskCatalogEnum;
  18. import com.kingdee.eas.custom.shuiyou.uitls.SYUtilsFacadeFactory;
  19. import com.kingdee.eas.custom.shuiyou.utils.ClientProxyFactoryUtils;
  20. import com.kingdee.eas.hr.ats.AtsUtil;
  21. import com.kingdee.eas.hr.base.PositionTypeEnum;
  22. import com.kingdee.eas.hr.rec.GenderEnum;
  23. import com.kingdee.eas.util.app.DbUtil;
  24. import com.kingdee.jdbc.rowset.IRowSet;
  25. import com.kingdee.shr.compensation.CardTypeEnum;
  26. import com.kingdee.shr.compensation.EmployedTypeEnum;
  27. import com.kingdee.shr.compensation.PersonStatusEnum;
  28. import com.kingdee.shr.compensation.app.incomeTax.EmploymentSituationEnum;
  29. import com.kingdee.shr.compensation.app.tax.TaxUnitFactory;
  30. import com.kingdee.shr.compensation.app.tax.TaxUnitInfo;
  31. import com.kingdee.shr.compensation.app.tax.base.TaxItemCollection;
  32. import com.kingdee.shr.compensation.app.tax.base.TaxItemFactory;
  33. import com.kingdee.shr.compensation.app.tax.base.TaxItemInfo;
  34. import com.kingdee.shr.compensation.util.Base64Utils;
  35. import com.kingdee.util.StringUtils;
  36. import org.apache.log4j.Logger;
  37. import java.math.BigDecimal;
  38. import java.text.SimpleDateFormat;
  39. import java.util.*;
  40. /**
  41. * @Description 提交异步税款计算请求
  42. * @Date 2024/9/2 14:30
  43. * @Created by Heyuan
  44. */
  45. public class SubmitAsynTaxCalRequestService implements IHRMsfService {
  46. private static Logger logger = Logger.getLogger(SubmitAsynTaxCalRequestService.class);
  47. private Map<String, String> taxItemInitMap = null;//初算个税项目
  48. @Override
  49. public MessageResult process(Context ctx, Map paramMap) throws EASBizException, BOSException {
  50. ObjectMapper objectMapper = new ObjectMapper();
  51. String taskId = null;
  52. ILogInfo iLogInfo = LogInfoFactory.getLocalInstance(ctx);
  53. //接口日志实体
  54. LogInfoInfo logInfo = new LogInfoInfo();
  55. //入口
  56. logInfo.setEntrance(this.getClass().getName());
  57. logInfo.setBizDate(new Date());
  58. try {
  59. logger.info("调用 CalTaxService, 参数 " + objectMapper.writeValueAsString(paramMap));
  60. MessageResult messageResult = null;
  61. String this_taskId = (String) paramMap.get("this_taskId");//任务id
  62. String paramData = (String) paramMap.get("paramData");
  63. Map<String, String> paramDataMap = objectMapper.readValue(paramData, Map.class);
  64. String taxUnitId = paramDataMap.get("TAXUNITID");//纳税单位id
  65. String period = paramDataMap.get("PERIOD");//周期yyyy-MM
  66. String creator = paramDataMap.get("creator");//创建人id
  67. StringBuilder errorMsg = new StringBuilder();
  68. if (StringUtils.isEmpty(taxUnitId)) {
  69. errorMsg.append("纳税单位id不能为空!\n");
  70. }
  71. if (StringUtils.isEmpty(period)) {
  72. errorMsg.append("周期yyyy-MM不能为空!\n");
  73. }
  74. if (errorMsg.length() > 0) {
  75. throw new BOSException(errorMsg.toString());
  76. }
  77. //客户端代理工厂
  78. ClientProxyFactory clientProxyFactory = ClientProxyFactoryUtils.getClientProxyFactory();
  79. TaxUnitInfo taxUnitInfo = TaxUnitFactory.getLocalInstance(ctx).getTaxUnitInfo(new ObjectUuidPK(taxUnitId));
  80. //获取个税项目
  81. getTaxItemMap(ctx);
  82. //获取待计算数据
  83. Map<String, List<Map<String, Object>>> caluDataMap = getCaluData(ctx, paramDataMap);
  84. //算税请求接口
  85. TaxRequest taxRequest = clientProxyFactory.getTaxRequest();
  86. //获取请求参数
  87. CalculateIndividualIncomeTaxRequest taxRequestPara = getTaxRequestParameter(taxUnitInfo, caluDataMap, period);
  88. //调用异步算税接口
  89. ApiResponse<AsyncResult> asyncResultApiResponse = taxRequest.calculateASynIndividualIncomeTax(taxRequestPara);
  90. String status = asyncResultApiResponse.getHead().getStatus();
  91. logInfo.setInterfaceAddress("/gateway/iit/calculateTax/calculateASynIndividualIncomeTax");//接口地址
  92. logInfo.setInterfaceName("calculateASynIndividualIncomeTax");//接口名
  93. ObjectMapper mapper = new ObjectMapper();
  94. logInfo.setInParameter(mapper.writeValueAsString(taxRequestPara));//入参
  95. logInfo.setOutParameter(mapper.writeValueAsString(asyncResultApiResponse));//回参
  96. if ("N".equals(status)) {
  97. //请求失败响应
  98. String msg = asyncResultApiResponse.getHead().getMsg();
  99. messageResult = MessageResult.FAILED(msg);
  100. logInfo.setErrorInfo(msg);//错误信息
  101. logInfo.setStatus("失败");
  102. } else {
  103. //调用成功
  104. //请求id
  105. String requestId = asyncResultApiResponse.getBody().getRequestId();
  106. logInfo.setStatus("成功");
  107. paramDataMap.put("requestId", requestId);
  108. String backParam = mapper.writeValueAsString(paramDataMap);
  109. // 创建轮询请求任务
  110. taskId = SYUtilsFacadeFactory.getLocalInstance(ctx).addTask(
  111. "getASynIndividualIncomeTaxFeedback",
  112. backParam,
  113. TaskCatalogEnum.CAL_GET,
  114. "");
  115. messageResult = MessageResult.SUCCESS();
  116. Map map = new HashMap();
  117. messageResult.setData(map);
  118. map.put("taskId", taskId);
  119. map.put("requestId", requestId);
  120. }
  121. iLogInfo.addnew(logInfo);
  122. return messageResult;
  123. } catch (Exception e) {
  124. e.printStackTrace();
  125. logInfo.setErrorInfo(e.getMessage());//错误信息
  126. iLogInfo.addnew(logInfo);
  127. return MessageResult.ERROR(e.getMessage());
  128. }
  129. }
  130. protected String getFieldByNumber(Context context,Set initSet){
  131. String sql = "select ('T'||FIELDSN) fieldName,fnumber,fname_L2 from T_HR_STaxItem where FSIMPLENAME is not null";
  132. try {
  133. IRowSet rs = DbUtil.executeQuery(context, sql);
  134. while (rs.next()) {
  135. initSet.add(rs.getString("fnumber"));
  136. }
  137. }catch (Exception e){
  138. e.printStackTrace();
  139. }
  140. return null;
  141. }
  142. /**
  143. * 获取个税项目
  144. *
  145. * @param ctx
  146. * @return
  147. * @throws BOSException
  148. */
  149. private void getTaxItemMap(Context ctx) throws BOSException {
  150. if (taxItemInitMap == null) {
  151. taxItemInitMap = new HashMap<>();
  152. }
  153. //获取所有个税项目
  154. Set initSet = new HashSet();
  155. initSet.add("sre");//当期收入额
  156. initSet.add("mssd");//免税收入
  157. initSet.add("jbylaobxf");//基本养老保险
  158. initSet.add("jbylbxf");//基本医疗保险
  159. initSet.add("sybxf");//失业保险
  160. initSet.add("zfgjj");//住房公积金
  161. initSet.add("nj");//企业年金
  162. initSet.add("syjkbx");//商业健康保险
  163. initSet.add("zykcjze");//准予扣除的捐赠额
  164. initSet.add("jmse");//减免税额
  165. initSet.add("syylbx");//税延养老保险
  166. initSet.add("yxkcsf");//允许扣除的税费
  167. initSet.add("ycxbc");//一次性补偿
  168. // initSet.add("dyznjyzc"); // 子女教育支出
  169. // initSet.add("dysylrzc"); // 赡养老人支出
  170. // initSet.add("dyfwdkzc"); // 房屋贷款支出
  171. // initSet.add("dyzfzjzc"); // 住房租金支出
  172. // initSet.add("dyjxjyzc"); // 继续教育支出
  173. // initSet.add("dyyyrzhzc"); // 婴幼儿照护支出
  174. this.getFieldByNumber(ctx,initSet);
  175. try {
  176. TaxItemCollection itemColl = TaxItemFactory.getLocalInstance(ctx)
  177. .getTaxItemCollection("where number in (" + AtsUtil.convertSetToString(initSet) + ")");
  178. for (int i = 0; i < itemColl.size(); ++i) {
  179. TaxItemInfo info = itemColl.get(i);
  180. String number = info.getNumber();
  181. taxItemInitMap.put(number, "T" + info.getFieldSn());
  182. }
  183. } catch (BOSException var5) {
  184. var5.printStackTrace();
  185. throw new BOSException("获取个税项目报错: " + var5.getMessage());
  186. }
  187. }
  188. /**
  189. * 获取待计算数据
  190. */
  191. private Map<String, List<Map<String, Object>>> getCaluData(Context ctx, Map<String, String> paramDataMap) throws BOSException {
  192. try {
  193. String taxUnitId = paramDataMap.get("TAXUNITID");//纳税单位id
  194. String period = paramDataMap.get("PERIOD");//周期yyyy-MM
  195. String creator = paramDataMap.get("creator");//创建人id
  196. String initIds = paramDataMap.get("initIds");//初算数据id
  197. StringBuilder sql = new StringBuilder();
  198. sql.append("SELECT ").append("\n");
  199. for (String number : taxItemInitMap.keySet()) {
  200. String tableField = taxItemInitMap.get(number);
  201. sql.append("scid.").append(tableField).append(" ").append(number).append(",\n");
  202. }
  203. sql.append("item.fnumber AS itemNumber,").append("\n")
  204. .append("personRe.FCARDNUMBER,").append("\n")
  205. .append("personRe.FCARDTYPE,").append("\n")
  206. .append("(CASE WHEN personRe.FREPORTNAME IS NOT NULL THEN personRe.FREPORTNAME ELSE person.fname_l2 END) AS personName,").append("\n")
  207. .append("person.fnumber AS personNumber,").append("\n")
  208. .append("personRe.FPHONENUMBER,").append("\n") // 手机号
  209. .append("personRe.FISOVERSEA,").append("\n") // 是否境外人员
  210. .append("personRe.FGENDER,").append("\n") // 性别
  211. .append("personRe.FBIRTHDAY,").append("\n") // 出生日期
  212. .append("personRe.FISDISABILITY,").append("\n") // 是否残疾
  213. .append("personRe.FDISCARDNUMBER,").append("\n") // 残疾证号
  214. .append("personRe.FHEROCARDNUMBER,").append("\n") // 烈属证号
  215. .append("personRe.FEMAIL,").append("\n") // 电子邮箱
  216. .append("personRe.FCHINESENAME,").append("\n") // 中文名
  217. .append("personRe.FISHERO,").append("\n") // 是否烈属
  218. .append("personRe.FISOLD,").append("\n") // 是否孤老
  219. .append("personRe.FADDRESS,").append("\n") // 居住地省
  220. .append("personRe.FADDRESSCITY,").append("\n") // 居住城市
  221. .append("personRe.FADDRESSCOUNTY,").append("\n") // 居住区县
  222. .append("personRe.FADDRESSSTREET,").append("\n") // 居住街道
  223. .append("personRe.FDESC,").append("\n") // 备注
  224. .append("personRe.FHOMETOWN,").append("\n") // 户籍省份
  225. .append("personRe.FHOMETOWNCITY,").append("\n") // 户籍城市
  226. .append("personRe.FHOMETOWNCOUNTRY,").append("\n") // 户籍区县
  227. .append("personRe.FHOMETOWNSTREET,").append("\n") // 户籍街道
  228. .append("personRe.FHOMETOWNDETAILED,").append("\n") // 户籍详细地址
  229. .append("personRe.FACCOUNT,").append("\n") // 银行账号
  230. .append("personRe.FOTHERCARDTYPE,").append("\n") // 其他证件类型
  231. .append("personRe.FOTHERCARDNUMBER,").append("\n") // 其他证件号码
  232. .append("personRe.FTAXREASON,").append("\n") // 涉税事项
  233. .append("personRe.FBANKCARDPROVINCE,").append("\n") // 开户银行省份
  234. .append("bank.fname_l2 AS bankName,").append("\n") // 开户银行
  235. .append("personRe.FCONTACTADDRESS,").append("\n") // 联系地址_省
  236. .append("personRe.FCONTACTCITY,").append("\n") // 联系地城市
  237. .append("personRe.FCONTACTCOUNTRY,").append("\n") // 联系地区县
  238. .append("personRe.FCONTACTSTREET,").append("\n") // 联系地街道
  239. .append("personRe.FCONTACTDETAILED,").append("\n") // 联系地详细地址
  240. .append("personRe.FENTRYDATE,").append("\n") // 首次入境时间
  241. .append("personRe.FLEAVEDATE,").append("\n") // 预计离境时间
  242. .append("personRe.FPOSITION,").append("\n") // 职务
  243. .append("personRe.FINVESTMENTTOTAL,").append("\n") // 个人投资总额
  244. .append("personRe.FINVESTMENTRATE,").append("\n") // 个人投资比例
  245. .append("birthplace.FNAME_L2 AS birthplaceName,").append("\n") // 出生地
  246. .append("nationality.FNAME_L2 AS nationalityName,").append("\n") // 国籍
  247. .append("diploma.fnumber AS diplomaNumber,").append("\n") // 学历编码
  248. .append("personReEntry.FPERSONSTATUS,").append("\n") // 人员状态
  249. .append("personReEntry.FEMPLOYEDDATE,").append("\n") // 受雇日期
  250. .append("personReEntry.FDEPARTUREDATE,").append("\n") // 离职日期
  251. .append("personReEntry.FEMPLOYEDTYPE,").append("\n") // 任职受雇从业类型
  252. .append("personReEntry.FSITUATION,").append("\n") // 就业情况
  253. .append("personReEntry.FDEDUCTFEES").append("\n") // 是否扣除减除费用
  254. .append("FROM T_HR_STaxCalInitDetail scid ").append("\n")
  255. .append("LEFT JOIN T_HR_STaxIncomeItem item ON item.fid = scid.FINCOMEITEMID ").append("\n")
  256. .append(" LEFT JOIN (select * from ")
  257. .append(" T_HR_STaxPersonRecordentry where fTaxUnitId||fPersonId||FLASTREPORTMONTH||FEMPLOYEDDATE in( ")
  258. .append(" select fTaxUnitId||fPersonId||max(FLASTREPORTMONTH)||max(FEMPLOYEDDATE) from T_HR_STaxPersonRecordentry where FSUBMITSTATUS=2 group by FTAXUNITID,FPERSONID ")
  259. .append(" )) personReEntry ON scid.FPERSONID = personReEntry.FPERSONID AND scid.FTaxUnitID = personReEntry.FTaxUnitID ")
  260. // .append("LEFT JOIN T_HR_STaxPersonRecordentry personReEntry ON personReEntry.fPersonId = scid.fPersonId AND scid.fTaxUnitId = personReEntry.fTaxUnitId and personReEntry.FPERSONSTATUS=1").append("\n")
  261. .append("LEFT JOIN T_HR_STaxPersonRecord personRe ON personReEntry.FBILLID = personRe.fid ").append("\n")
  262. .append("LEFT JOIN T_BD_Person person ON person.fid = personRe.FPERSONID ").append("\n")
  263. .append("LEFT JOIN T_BD_Nationality birthplace ON birthplace.fid = personRe.FBIRTHPLACEID ").append("\n")
  264. .append("LEFT JOIN T_BD_HRDiploma diploma ON diploma.fid = personRe.FEDULEVELID ").append("\n")
  265. .append("LEFT JOIN T_HR_PBank bank ON bank.fid = personRe.FHRBANKID ").append("\n")
  266. .append("LEFT JOIN T_BD_Nationality nationality ON nationality.fid = personRe.FNATIONALITYID ").append("\n")
  267. .append("WHERE scid.FTAXUNITID = '").append(taxUnitId).append("'").append("\n")
  268. .append("AND scid.FSTATE = '30' ").append("\n")
  269. .append("AND scid.fid in(").append(initIds).append(")").append("\n");
  270. logger.info("getCaluData.sql:\n" + sql);
  271. IRowSet iRowSet = DbUtil.executeQuery(ctx, sql.toString());
  272. Map<String, List<Map<String, Object>>> dataMap = new HashMap<>();
  273. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  274. while (iRowSet.next()) {
  275. List<Map<String, Object>> list;
  276. //所得项目编码
  277. String itemNumber = iRowSet.getString("itemNumber");
  278. if (dataMap.containsKey(itemNumber)) {
  279. list = dataMap.get(itemNumber);
  280. } else {
  281. list = new ArrayList<>();
  282. dataMap.put(itemNumber, list);
  283. }
  284. Map map = new HashMap();
  285. //姓名
  286. map.put("personName", iRowSet.getString("personName"));
  287. //工号
  288. map.put("personNumber", iRowSet.getString("personNumber"));
  289. //证件号码
  290. map.put("cardNumber", iRowSet.getString("FCARDNUMBER"));
  291. //证件类型
  292. String cardType = iRowSet.getString("FCARDTYPE");
  293. if (!StringUtils.isEmpty(cardType)) {
  294. CardTypeEnum anEnum = CardTypeEnum.getEnum(cardType);
  295. if (anEnum != null) {
  296. map.put("cardType", anEnum.getAlias());
  297. }
  298. }
  299. //人员状态
  300. String personstatus = iRowSet.getString("FPERSONSTATUS");
  301. if (personstatus != null) {
  302. PersonStatusEnum anEnum = PersonStatusEnum.getEnum(personstatus);
  303. if (anEnum != null) {
  304. map.put("personstatusName", anEnum.getAlias());
  305. }
  306. }
  307. //任职受雇从业类型
  308. String employedtype = iRowSet.getString("FEMPLOYEDTYPE");
  309. if (!StringUtils.isEmpty(employedtype)) {
  310. EmployedTypeEnum anEnum = EmployedTypeEnum.getEnum(employedtype);
  311. if (anEnum != null) {
  312. map.put("employedtypeName", anEnum.getAlias());
  313. }
  314. }
  315. //手机号码
  316. map.put("phoneNumber", iRowSet.getString("FPHONENUMBER"));
  317. //就业情况
  318. Integer situation = iRowSet.getInt("FSITUATION");
  319. if (situation != null) {
  320. EmploymentSituationEnum anEnum = EmploymentSituationEnum.getEnum(situation);
  321. if (anEnum != null) {
  322. map.put("situationName", anEnum.getAlias());
  323. }
  324. }
  325. //性别
  326. String gender = iRowSet.getString("FGENDER");
  327. if (!StringUtils.isEmpty(gender)) {
  328. GenderEnum anEnum = GenderEnum.getEnum(gender);
  329. if (anEnum != null) {
  330. map.put("gender", anEnum.getAlias());
  331. }
  332. }
  333. //否境外人员
  334. String isoversea = iRowSet.getString("FISOVERSEA");
  335. if ("1".equals(isoversea)) {
  336. map.put("isoversea", "境外");
  337. } else if ("0".equals(isoversea)) {
  338. map.put("isoversea", "境内");
  339. }
  340. //是否残疾
  341. String isdisability = iRowSet.getString("FISDISABILITY");
  342. if ("1".equals(isdisability)) {
  343. map.put("isdisability", "是");
  344. } else {
  345. map.put("isdisability", "否");
  346. }
  347. //残疾证号
  348. map.put("discardnumber", iRowSet.getString("FDISCARDNUMBER"));
  349. //是否烈属
  350. String ishero = iRowSet.getString("FISHERO");
  351. if ("1".equals(ishero)) {
  352. map.put("ishero", "是");
  353. } else {
  354. map.put("ishero", "否");
  355. }
  356. //烈属证号
  357. map.put("herocardnumber", iRowSet.getString("FHEROCARDNUMBER"));
  358. //是否孤老
  359. String isold = iRowSet.getString("FISOLD");
  360. if ("1".equals(isold)) {
  361. map.put("isold", "是");
  362. } else {
  363. map.put("isold", "否");
  364. }
  365. //是否扣除减除费用
  366. String deductfees = iRowSet.getString("FDEDUCTFEES");
  367. if ("0".equals(deductfees)) {
  368. map.put("deductfees", "是");
  369. } else {
  370. map.put("deductfees", "否");
  371. }
  372. //职务
  373. String position = iRowSet.getString("FPOSITION");
  374. if (!StringUtils.isEmpty(position)) {
  375. PositionTypeEnum anEnum = PositionTypeEnum.getEnum(position);
  376. if (anEnum != null) {
  377. map.put("positionName", anEnum.getAlias());
  378. }
  379. }
  380. //电子邮箱
  381. map.put("email", iRowSet.getString("FEMAIL"));
  382. //个人投资总额
  383. map.put("investmenttotal", iRowSet.getBigDecimal("FINVESTMENTTOTAL"));
  384. //个人投资比例
  385. map.put("investmentrate", iRowSet.getBigDecimal("FINVESTMENTRATE"));
  386. //中文名
  387. map.put("chinesename", iRowSet.getString("FCHINESENAME"));
  388. //出生日期
  389. Date birthday = iRowSet.getDate("FBIRTHDAY");
  390. if (birthday != null) {
  391. map.put("birthday", sdf.format(birthday));
  392. }
  393. //受雇日期
  394. Date employeddate = iRowSet.getDate("FEMPLOYEDDATE");
  395. if (employeddate != null) {
  396. map.put("employeddate", sdf.format(employeddate));
  397. }
  398. //离职日期
  399. Date departuredate = iRowSet.getDate("FDEPARTUREDATE");
  400. if (departuredate != null) {
  401. map.put("departuredate", sdf.format(departuredate));
  402. }
  403. //出生地
  404. map.put("birthplaceName", iRowSet.getString("birthplaceName"));
  405. //学历
  406. int diplomaNumber = iRowSet.getInt("diplomaNumber");
  407. //todo 大学本科以下 大学本科 研究生
  408. if (diplomaNumber < 6) {
  409. map.put("diploma", "大学本科以下");
  410. } else if (diplomaNumber == 6) {
  411. map.put("diploma", "大学本科");
  412. } else if (diplomaNumber > 6) {
  413. map.put("diploma", "研究生");
  414. }
  415. //开户银行省份
  416. map.put("bankcardprovince", iRowSet.getString("FBANKCARDPROVINCE"));
  417. //开户银行
  418. map.put("bankName", iRowSet.getString("bankName"));
  419. //银行账号
  420. map.put("account", iRowSet.getString("FACCOUNT"));
  421. //其他证件类型
  422. map.put("othercardtype", iRowSet.getString("FOTHERCARDTYPE"));
  423. //其他证件号码
  424. map.put("othercardnumber", iRowSet.getString("FOTHERCARDNUMBER"));
  425. //居住地省
  426. map.put("address", iRowSet.getString("FADDRESS"));
  427. //居住城市
  428. map.put("addresscity", iRowSet.getString("FADDRESSCITY"));
  429. //居住区县
  430. map.put("addresscounty", iRowSet.getString("FADDRESSCOUNTY"));
  431. //居住街道
  432. map.put("addressstreet", iRowSet.getString("FADDRESSSTREET"));
  433. //户籍省份
  434. map.put("hometown", iRowSet.getString("FHOMETOWN"));
  435. //户籍城市
  436. map.put("hometowncity", iRowSet.getString("FHOMETOWNCITY"));
  437. //户籍城市
  438. map.put("hometowncountry", iRowSet.getString("FHOMETOWNCOUNTRY"));
  439. //户籍街道
  440. map.put("hometownstreet", iRowSet.getString("FHOMETOWNSTREET"));
  441. //户籍详细地址
  442. map.put("hometowndetailed", iRowSet.getString("FHOMETOWNDETAILED"));
  443. //国籍
  444. map.put("nationalityName", iRowSet.getString("nationalityName"));
  445. //涉税事项
  446. map.put("taxreason", iRowSet.getString("FTAXREASON"));
  447. //首次入境时间
  448. Date entrydate = iRowSet.getDate("FENTRYDATE");
  449. if (entrydate != null) {
  450. map.put("entrydate", sdf.format(entrydate));
  451. }
  452. //预计离境时间
  453. Date leavedate = iRowSet.getDate("FLEAVEDATE");
  454. if (leavedate != null) {
  455. map.put("leavedate", sdf.format(leavedate));
  456. }
  457. //联系地址_省
  458. map.put("contactaddress", iRowSet.getString("FCONTACTADDRESS"));
  459. //联系地城市
  460. map.put("contactcity", iRowSet.getString("FCONTACTCITY"));
  461. //联系地区县
  462. map.put("contactcountry", iRowSet.getString("FCONTACTCOUNTRY"));
  463. //联系地街道
  464. map.put("contactstreet", iRowSet.getString("FCONTACTSTREET"));
  465. //联系地详细地址
  466. map.put("contactdetailed", iRowSet.getString("FCONTACTDETAILED"));
  467. //备注
  468. map.put("desc", iRowSet.getString("FDESC"));
  469. for (String number : taxItemInitMap.keySet()) {
  470. map.put(number, iRowSet.getObject(number));
  471. }
  472. list.add(map);
  473. }
  474. return dataMap;
  475. } catch (Exception e) {
  476. e.printStackTrace();
  477. throw new BOSException("获取待计算数据报错:" + e.getMessage());
  478. }
  479. }
  480. /**
  481. * 获取请求参数
  482. *
  483. * @param taxUnitInfo
  484. * @param caluDataMap
  485. * @param period
  486. * @return
  487. * @throws BOSException
  488. */
  489. private CalculateIndividualIncomeTaxRequest getTaxRequestParameter(
  490. TaxUnitInfo taxUnitInfo,
  491. Map<String, List<Map<String, Object>>> caluDataMap,
  492. String period) throws BOSException {
  493. //异步算税参数对象
  494. CalculateIndividualIncomeTaxRequest taxRequestPara = new CalculateIndividualIncomeTaxRequest();
  495. //随机id
  496. String bizNo = UUID.randomUUID().toString();
  497. //外部业务订单号*
  498. taxRequestPara.setBizNo(bizNo);
  499. //企业名称*
  500. taxRequestPara.setName(taxUnitInfo.getName());
  501. //taxRequestPara.setName("荆州九州通医药有限公司00");
  502. //税号*
  503. taxRequestPara.setTaxNo(taxUnitInfo.getTaxNumber());
  504. //taxRequestPara.setTaxNo("91310124834931897I");
  505. //行政区划代码*
  506. taxRequestPara.setArea(taxUnitInfo.getAreaCode());
  507. //taxRequestPara.setArea("310101");
  508. //登记序号
  509. taxRequestPara.setRegistrationNumber(taxUnitInfo.getRegNumber());
  510. //taxRequestPara.setRegistrationNumber("10117310124834931897");
  511. //部门编号
  512. //taxRequestPara.setDeptNo("");
  513. //部门名称
  514. //taxRequestPara.setDeptName("");
  515. //税款所属期YYYYMM*
  516. taxRequestPara.setMonth(period.replace("-", ""));
  517. //实名账号
  518. //taxRequestPara.setRealNameAccount();
  519. //实名密码
  520. //taxRequestPara.setRealNamePassword();
  521. //加密实名密码
  522. //taxRequestPara.setEncryptedRealNamePassword();
  523. //申报密码
  524. //taxRequestPara.setDeclarePassword("Aa123456");
  525. String declPassword = taxUnitInfo.getDeclPassword();
  526. if (StringUtils.isEmpty(declPassword)) {
  527. //实名账号
  528. taxRequestPara.setRealNameAccount(taxUnitInfo.getString("realAccount"));
  529. //实名密码
  530. taxRequestPara.setRealNamePassword(Base64Utils.decode(taxUnitInfo.getRealPassword()));
  531. //密码类型*
  532. taxRequestPara.setPasswordType("2");
  533. }else{
  534. taxRequestPara.setDeclarePassword(Base64Utils.decode(declPassword));
  535. //加密申报密码
  536. //taxRequestPara.setEncryptedDeclarePassword();
  537. //密码类型*
  538. taxRequestPara.setPasswordType("0");
  539. }
  540. //综合所得
  541. //综合所得对象
  542. ComplexIncomeRequest complexIncomeRequest = new ComplexIncomeRequest();
  543. taxRequestPara.setComplexIncomeRequest(complexIncomeRequest);
  544. //是否离线算薪
  545. //complexIncomeRequest.setIsOffLineCalculateTax();
  546. //减免方式
  547. //complexIncomeRequest.setDeductionMode();
  548. //减免比例
  549. //complexIncomeRequest.setRatio();
  550. //减免限额
  551. //complexIncomeRequest.setLimitAmount();
  552. //正常工资薪金对象
  553. NormalSalarySpecIncome normalSalarySpecIncome = getNormalSalarySpecIncome(caluDataMap);
  554. complexIncomeRequest.setNormalSalarySpecIncome(normalSalarySpecIncome);
  555. //全年一次性奖金收入列表
  556. List<ComplexIncome> annualOneTimeBonusIncomeList = getAnnualOneTimeBonusIncomeList(caluDataMap);
  557. complexIncomeRequest.setAnnualOneTimeBonusIncome(annualOneTimeBonusIncomeList);
  558. //一般劳务报酬所得列表
  559. List<ComplexIncome> laborRemunerationIncome = getLaborRemunerationIncome(caluDataMap);
  560. complexIncomeRequest.setLaborRemunerationIncome(laborRemunerationIncome);
  561. //解除劳动合同一次性补偿金列表
  562. List<ComplexIncome> compensateIncome = getCompensateIncome(caluDataMap);
  563. complexIncomeRequest.setCompensateIncome(compensateIncome);
  564. return taxRequestPara;
  565. }
  566. /**
  567. * 解除劳动合同一次性补偿金列表
  568. *
  569. * @param caluDataMap
  570. * @return
  571. */
  572. private List<ComplexIncome> getCompensateIncome(
  573. Map<String, List<Map<String, Object>>> caluDataMap) {
  574. List<ComplexIncome> compensateIncome = new ArrayList<ComplexIncome>();
  575. List<Map<String, Object>> list = caluDataMap.get("jcldhtlb");
  576. for (int i = 0; list != null && i < list.size(); i++) {
  577. //个税应用+税款计算初算明细表
  578. Map<String, Object> map = list.get(i);
  579. ComplexIncome complexIncome = new ComplexIncome();
  580. //姓名*
  581. complexIncome.setName((String) map.get("personName"));
  582. //证件类型名称*
  583. complexIncome.setLicenseType((String) map.get("cardType"));
  584. //证件号码*
  585. complexIncome.setLicenseNumber((String) map.get("cardNumber"));
  586. //当期收入额* 一次性补偿
  587. complexIncome.setIncome((BigDecimal) map.get("ycxbc"));
  588. //免税收入
  589. complexIncome.setExemptIncome((BigDecimal) map.get("mssd"));
  590. //其他
  591. //complexIncome.setOther(BigDecimal.ZERO);
  592. //减免税额 无
  593. complexIncome.setTaxDeduction((BigDecimal) map.get("jmse"));
  594. //备注
  595. //complexIncome.setRemark("");
  596. //所得项目名称*
  597. complexIncome.setIncomeItemName("一般劳务报酬所得");
  598. //准予扣除的捐赠额 无
  599. complexIncome.setDeductibleDonation((BigDecimal) map.get("zykcjze"));
  600. compensateIncome.add(complexIncome);
  601. }
  602. return compensateIncome;
  603. }
  604. /**
  605. * 一般劳务报酬所得列表
  606. *
  607. * @param caluDataMap
  608. * @return
  609. */
  610. private List<ComplexIncome> getLaborRemunerationIncome(Map<String, List<Map<String, Object>>> caluDataMap) {
  611. List<ComplexIncome> laborRemunerationIncome = new ArrayList<>();
  612. List<Map<String, Object>> list = caluDataMap.get("lwbclb");
  613. for (int i = 0; list != null && i < list.size(); i++) {
  614. Map<String, Object> map = list.get(i);
  615. ComplexIncome complexIncome = new ComplexIncome();
  616. //姓名*
  617. complexIncome.setName((String) map.get("personName"));
  618. //证件类型名称*
  619. complexIncome.setLicenseType((String) map.get("cardType"));
  620. //证件号码*
  621. complexIncome.setLicenseNumber((String) map.get("cardNumber"));
  622. //是否明细申报
  623. //complexIncome.setIsDetailedDeclaration("");
  624. //当期收入额*
  625. complexIncome.setIncome((BigDecimal) map.get("sre"));
  626. //免税收入
  627. complexIncome.setExemptIncome((BigDecimal) map.get("mssd"));
  628. //商业健康保险
  629. complexIncome.setCommercialHealthInsurance((BigDecimal) map.get("syjkbx"));
  630. //税延养老保险
  631. complexIncome.setExtensionEndowmentInsurance((BigDecimal) map.get("syylbx"));
  632. //其他
  633. //complexIncome.setOther(BigDecimal.ZERO);
  634. //减免税额
  635. complexIncome.setTaxDeduction((BigDecimal) map.get("jmse"));
  636. //备注
  637. //complexIncome.setRemark("");
  638. //减除费用
  639. // complexIncome.setDeductionAmount(BigDecimal.ZERO);
  640. //应纳税额
  641. //complexIncome.setPayableAmount(BigDecimal.ZERO);
  642. //税率
  643. //complexIncome.setTaxRate(BigDecimal.ZERO);
  644. //所得项目名称*
  645. complexIncome.setIncomeItemName("一般劳务报酬所得");
  646. //允许扣除的税费
  647. complexIncome.setTaxDeductible((BigDecimal) map.get("yxkcsf"));
  648. laborRemunerationIncome.add(complexIncome);
  649. }
  650. return laborRemunerationIncome;
  651. }
  652. /**
  653. * 全年一次性奖金收入列表
  654. *
  655. * @return
  656. */
  657. private List<ComplexIncome> getAnnualOneTimeBonusIncomeList(
  658. Map<String, List<Map<String, Object>>> caluDataMap) {
  659. List<ComplexIncome> annualOneTimeBonusIncome = new ArrayList<>();
  660. List<Map<String, Object>> list = caluDataMap.get("qnycxjjlb");
  661. for (int i = 0; list != null && i < list.size(); i++) {
  662. Map<String, Object> map = list.get(i);
  663. ComplexIncome complexIncome = new ComplexIncome();
  664. //姓名*
  665. complexIncome.setName((String) map.get("personName"));
  666. //证件类型名称*
  667. complexIncome.setLicenseType((String) map.get("cardType"));
  668. //证件号码*
  669. complexIncome.setLicenseNumber((String) map.get("cardNumber"));
  670. //批次号(一月多次发薪)
  671. //complexIncome.setBatchNo(0);
  672. //当期收入额*
  673. complexIncome.setIncome((BigDecimal) map.get("sre"));
  674. //免税收入
  675. complexIncome.setExemptIncome((BigDecimal) map.get("mssd"));
  676. //其他
  677. //complexIncome.setOther(BigDecimal.ZERO);
  678. //减免税额
  679. complexIncome.setTaxDeduction((BigDecimal) map.get("jmse"));
  680. //备注
  681. //complexIncome.setRemark("");
  682. //所得项目名称*
  683. complexIncome.setIncomeItemName("全年一次性奖金收入");
  684. //准予扣除的捐赠额
  685. complexIncome.setDeductibleDonation((BigDecimal) map.get("zykcjze"));
  686. complexIncome.setRemark((String) map.get("bz"));
  687. //其他
  688. complexIncome.setOther((BigDecimal) map.get("qt"));
  689. annualOneTimeBonusIncome.add(complexIncome);
  690. }
  691. return annualOneTimeBonusIncome;
  692. }
  693. /**
  694. * 获取正常工资薪金参数
  695. *
  696. * @return
  697. */
  698. private NormalSalarySpecIncome getNormalSalarySpecIncome
  699. (Map<String, List<Map<String, Object>>> caluDataMap) {
  700. //正常工资薪金对象
  701. NormalSalarySpecIncome normalSalarySpecIncome = new NormalSalarySpecIncome();
  702. //企业人员列表*
  703. List<DetailCompanyEmployee> companyEmployeeList = getCompanyEmployeeList(caluDataMap);
  704. normalSalarySpecIncome.setCompanyEmployeeList(companyEmployeeList);
  705. //正常工资薪金是否需要专项*
  706. normalSalarySpecIncome.setZcgzxjsfxyzx("1");
  707. //正常工资薪金是否传入累计(申报/单月计算时使用)
  708. //normalSalarySpecIncome.setZcgzxjsfcrlj("");
  709. //支持上月传专项或者累计专项金额(仅对两月算税上月薪金列表算税数据生效)
  710. //normalSalarySpecIncome.setZcgzxjsfcrzx("");
  711. //是否已申报上月正常工资薪金(两个月算税场景)
  712. //normalSalarySpecIncome.setDeclaredLastMonth("");
  713. //批次号(一月多次发薪)
  714. //normalSalarySpecIncome.setBatchNo(0);
  715. //导入上月正常工资薪金(一月多次发薪)
  716. normalSalarySpecIncome.setImportLastMonthSalaryOption("");
  717. //是否需要人员申报
  718. normalSalarySpecIncome.setDeclareEmployeeOption("");
  719. //年金算税上限选项
  720. normalSalarySpecIncome.setAnnuityAndHouseProvidentFundOption("");
  721. //是否使用上月传入的应补退税额
  722. normalSalarySpecIncome.setMultiCalculateTaxUseRefundTax("");
  723. //个人养老金策略
  724. normalSalarySpecIncome.setPersonalPensionOption("");
  725. //上月个人养老金策略
  726. normalSalarySpecIncome.setLastMonthPersonalPensionOption("");
  727. //离职日期处理策略
  728. normalSalarySpecIncome.setResignDateStrategy("");
  729. //是否使用已报送人员信息进行补全
  730. //normalSalarySpecIncome.setSfsybsrybq();
  731. //上月正常工资薪金(带专项)列表
  732. //normalSalarySpecIncome.setLastMonthNormalSalary();
  733. List<ComplexIncome> normalSalarySpec = new ArrayList<>();
  734. //正常工资薪金(带专项)列表*
  735. normalSalarySpecIncome.setNormalSalarySpec(normalSalarySpec);
  736. List<Map<String, Object>> list = caluDataMap.get("zcgzxjlb");
  737. for (int i = 0; list != null && i < list.size(); i++) {
  738. Map<String, Object> map = list.get(i);
  739. ComplexIncome complexIncome = new ComplexIncome();
  740. //姓名*
  741. complexIncome.setName((String) map.get("personName"));
  742. //证件类型名称*
  743. complexIncome.setLicenseType((String) map.get("cardType"));
  744. //证件号码*
  745. complexIncome.setLicenseNumber((String) map.get("cardNumber"));
  746. //是否明细申报
  747. //complexIncome.setIsDetailedDeclaration("");
  748. //当期收入额*
  749. complexIncome.setIncome((BigDecimal) map.get("sre"));
  750. //免税收入
  751. complexIncome.setExemptIncome((BigDecimal) map.get("mssd"));
  752. //基本养老保险
  753. complexIncome.setEndowmentInsurance((BigDecimal) map.get("jbylaobxf"));
  754. //基本医疗保险
  755. complexIncome.setMedicalInsurance((BigDecimal) map.get("jbylbxf"));
  756. //失业保险
  757. complexIncome.setUnemploymentInsurance((BigDecimal) map.get("sybxf"));
  758. //住房公积金
  759. complexIncome.setHouseProvidentFund((BigDecimal) map.get("zfgjj"));
  760. //子女教育支出
  761. complexIncome.setChildEducationExpenditure((BigDecimal) map.get("dyznjyzc"));
  762. //赡养老人支出
  763. complexIncome.setSupportElderExpenditure((BigDecimal) map.get("dysylrzc"));
  764. //住房租金支出
  765. complexIncome.setHouseRentExpenditure((BigDecimal) map.get("dyzfzjzc"));
  766. //房屋贷款支出
  767. complexIncome.setHouseLoanExpenditure((BigDecimal) map.get("dyfwdkzc"));
  768. //继续教育支出
  769. complexIncome.setContinueEducationExpenditure((BigDecimal) map.get("dyjxjyzc"));
  770. //婴幼儿照护支出
  771. complexIncome.setBabyCareExpenditure((BigDecimal) map.get("dyyyrzhzc"));
  772. // 企业年金/职业年金
  773. complexIncome.setAnnuity((BigDecimal) map.get("nj"));
  774. //商业健康保险
  775. complexIncome.setCommercialHealthInsurance((BigDecimal) map.get("syjkbx"));
  776. //税延养老保险
  777. complexIncome.setExtensionEndowmentInsurance((BigDecimal) map.get("syylbx"));
  778. complexIncome.setRemark((String) map.get("bz"));
  779. //其他
  780. complexIncome.setOther((BigDecimal) map.get("qt"));
  781. normalSalarySpec.add(complexIncome);
  782. }
  783. return normalSalarySpecIncome;
  784. }
  785. /**
  786. * 获取企业人员列表
  787. */
  788. private List<DetailCompanyEmployee> getCompanyEmployeeList(Map<String, List<Map<String, Object>>> caluDataMap) {
  789. List<DetailCompanyEmployee> companyEmployeeList = new ArrayList<>();
  790. List<Map<String, Object>> list = caluDataMap.get("zcgzxjlb");
  791. for (int i = 0; list != null && i < list.size(); i++) {
  792. Map<String, Object> map = list.get(i);
  793. DetailCompanyEmployee employee = new DetailCompanyEmployee();
  794. //姓名*
  795. employee.setName((String) map.get("personName"));
  796. //证件类型名称*
  797. employee.setLicenseType((String) map.get("cardType"));
  798. //证件号码*
  799. employee.setLicenseNumber((String) map.get("cardNumber"));
  800. //部门编号
  801. //employee.setDeptNo("");
  802. //工号
  803. employee.setEmployeeNumber((String) map.get("personNumber"));
  804. //所属期
  805. //employee.setPeriod("");
  806. //手机号码 中国籍必填;非中国籍首次入境时间超过一个月必填;
  807. employee.setPhone((String) map.get("phoneNumber"));
  808. //人员状态* 默认为正常,可选择正常/非正常
  809. employee.setState((String) map.get("personstatusName"));
  810. //是否雇员* 可选择雇员、保险营销员、证券经纪人、其他、实习学生(全日制学历教育)
  811. employee.setIsEmployee((String) map.get("employedtypeName"));
  812. //入职年度就业情况 当雇员保险营销员、证券经纪人时可选择:当年首次入职学生、当年首次入职其他人员。其他情况下填写默认为空
  813. employee.setFirstEmploymentSituation((String) map.get("situationName"));
  814. //受雇日期
  815. employee.setEmployedDate((String) map.get("employeddate"));
  816. //性别* 男/女
  817. employee.setGender((String) map.get("gender"));
  818. //出生日期* YYYY-MM-DD 需要和身份证上保持一致
  819. employee.setBirthday((String) map.get("birthday"));
  820. //国籍*
  821. employee.setNationality((String) map.get("nationalityName"));
  822. //人员地区* 境内/境外
  823. employee.setArea((String) map.get("isoversea"));
  824. //离职日期
  825. employee.setResignDate((String) map.get("departuredate"));
  826. //个人投资总额
  827. employee.setPersonInvestment((BigDecimal) map.get("investmenttotal"));
  828. //个人投资比例
  829. employee.setPersonInvestmentRatio((BigDecimal) map.get("investmentrate"));
  830. //是否残疾
  831. String isdisability = (String) map.get("isdisability");
  832. employee.setIsDisabled(isdisability);
  833. if ("是".equals(isdisability)) {
  834. //todo 残疾证件类型
  835. employee.setDisableCardTypeName("残疾证");
  836. }
  837. //是否烈属
  838. employee.setIsMartyr((String) map.get("ishero"));
  839. //是否孤老
  840. employee.setIsBereavedGaffer((String) map.get("isold"));
  841. //残疾证号
  842. employee.setDisableCardNumber((String) map.get("discardnumber"));
  843. //烈属证号
  844. employee.setMartyrCardNumber((String) map.get("herocardnumber"));
  845. //电子邮箱
  846. employee.setEmail((String) map.get("email"));
  847. //学历
  848. employee.setEducation((String) map.get("diploma"));
  849. //职务
  850. employee.setPosition((String) map.get("positionName"));
  851. //开户银行省份(名字)
  852. employee.setDepositBankProvinceName((String) map.get("bankcardprovince"));
  853. //开户银行
  854. employee.setDepositBank((String) map.get("bankcardprovince"));
  855. //银行账号
  856. employee.setBankAccount((String) map.get("account"));
  857. //居住省份
  858. employee.setResidentProvince((String) map.get("address"));
  859. //居住城市
  860. employee.setResidentCity((String) map.get("addresscity"));
  861. //居住区县
  862. employee.setResidentDistrict((String) map.get("addresscounty"));
  863. //居住街道
  864. employee.setResidentStreet((String) map.get("addressstreet"));
  865. //户籍省份
  866. employee.setCensusProvince((String) map.get("hometown"));
  867. //户籍城市
  868. employee.setCensusCity((String) map.get("hometowncity"));
  869. //户籍区县
  870. employee.setCensusDistrict((String) map.get("hometowncountry"));
  871. //户籍街道
  872. employee.setCensusStreet((String) map.get("hometownstreet"));
  873. //户籍详细地址
  874. employee.setCensusAddress((String) map.get("hometowndetailed"));
  875. //备注
  876. employee.setEmpRemark((String) map.get("desc"));
  877. //出生地
  878. employee.setBirthplace((String) map.get("birthplaceName"));
  879. //首次入境时间
  880. employee.setFirstEntryDate((String) map.get("entrydate"));
  881. //预计离境时间
  882. employee.setEstimatedDepartureDate((String) map.get("leavedate"));
  883. //联系地省份
  884. employee.setContactProvince((String) map.get("contactaddress"));
  885. //联系地城市
  886. employee.setContactCity((String) map.get("contactcity"));
  887. //联系地区县
  888. employee.setContactDistrict((String) map.get("contactcountry"));
  889. //联系地街道
  890. employee.setContactStreet((String) map.get("contactstreet"));
  891. //联系地详细地址
  892. employee.setContactStreet((String) map.get("contactdetailed"));
  893. //中文名
  894. employee.setChineseName((String) map.get("chinesename"));
  895. //涉税事项
  896. employee.setTaxRelatedReason((String) map.get("taxreason"));
  897. //其他证件号码
  898. employee.setOtherLicenseNumber((String) map.get("othercardnumber"));
  899. //其他证件类型 其他证件类型为:外国人永久居留身份证(外国人永久居留证),外国护照,中华人民共和国外国人工作许可证(A类),中华人民共和国外国人工作许可证(B类),中华人民共和国外国人工作许可证(C类),中华人民共和国港澳居民居住证,中华人民共和国台湾居民居住证,中国护照,港澳居民来往内地通行证,台湾居民来往大陆通行证,其他证件号码必填
  900. employee.setOtherLicenseType((String) map.get("othercardtype"));
  901. //是否扣除减除费用(原是否主单位)
  902. employee.setIsMainUnits((String) map.get("deductfees"));
  903. companyEmployeeList.add(employee);
  904. }
  905. return companyEmployeeList;
  906. }
  907. }