package com.kingdee.eas.custom.shuiyou.incomeTax; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONUtil; import com.kingdee.bos.dao.IObjectPK; import com.kingdee.bos.dao.ormapping.ObjectUuidPK; import com.kingdee.bos.util.BOSUuid; import com.kingdee.eas.basedata.person.Genders; import com.kingdee.eas.basedata.person.PersonInfo; import com.kingdee.eas.custom.shuiyou.six.osf.vo.SixTPersonInfo; import com.kingdee.eas.custom.shuiyou.six.osf.vo.SpecialAmountInfo; import com.kingdee.eas.custom.shuiyou.task.MessageResult; import com.kingdee.eas.custom.shuiyou.task.TaskFactory; import com.kingdee.eas.custom.shuiyou.task.TaskInfo; import com.kingdee.eas.custom.shuiyou.uitls.ISYUtilsFacade; import com.kingdee.eas.custom.shuiyou.uitls.SYUtilsFacadeFactory; import com.kingdee.eas.custom.shuiyou.uitls.URLConfigEnum; import com.kingdee.eas.framework.CoreBaseCollection; import com.kingdee.eas.util.app.DbUtil; import com.kingdee.jdbc.rowset.IRowSet; import com.kingdee.shr.base.syssetting.json.JSONUtils; import com.kingdee.shr.compensation.*; import com.kingdee.shr.compensation.app.tax.*; import com.kingdee.shr.compensation.app.taxCal.TaxCalInitDetailStateEnum; import com.kingdee.shr.compensation.util.Base64Utils; import org.apache.commons.lang3.StringUtils; import org.apache.log4j.Logger; import com.kingdee.bos.*; import java.text.SimpleDateFormat; import java.util.*; import java.lang.String; public class TaxSpeAddDedReportExFacadeControllerBean extends AbstractTaxSpeAddDedReportExFacadeControllerBean { private static Logger logger = Logger.getLogger("com.kingdee.eas.custom.shuiyou.incomeTax.TaxSpeAddDedReportExFacadeControllerBean"); private static final long serialVersionUID = 1L; private Map taskMap; private Map> dataMap = new HashMap(); private List sumTaxList; private List allTaxItemList; private static final int FIXED_PARA_COUNT = 15; private String userId; private boolean isDelete = false; private boolean isFbSubmit; private boolean checkParams(Map paramMap) { if (!paramMap.containsKey("accept_id") && !paramMap.containsKey("RELAYTASK")) { return true; } else { return !paramMap.containsKey("TaxPersonRecordEntryIDS"); } } @Override protected MessageResult _report(Context ctx, Map paramMap) throws BOSException { logger.error("_report:"+paramMap); if (this.checkParams(paramMap)) { throw new BOSException("专项附加扣除申报服务参数缺失,请检查参数"); } else { //前置任务 String RELAYTASK = (String)paramMap.get("RELAYTASK"); String taxUnitID = (String)paramMap.get("TAXUNITID"); String initIds = (String)paramMap.get("initIds"); String period = (String)paramMap.get("PERIOD"); String taxPersonRecordEntryIDS = (String)paramMap.get("TaxPersonRecordEntryIDS"); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); TaxUnitCollection taxUnitCollection = TaxUnitFactory.getLocalInstance(ctx).getTaxUnitCollection("select id,name,number,taxNumber,areaCode,regNumber,declPassword,realPassword,isAutoDeduct where id = '" + taxUnitID + "'"); logger.error("taxUnitCollection:"+taxUnitCollection); if (null != taxUnitCollection && taxUnitCollection.size() != 0) { TaxUnitInfo taxUnitInfo = taxUnitCollection.get(0); IsAllowedQuoted isAutoDeduct = taxUnitInfo.getIsAutoDeduct(); if (0 == isAutoDeduct.getValue()) { return null; } else { logger.error("period:"+period); period = period.replace("-", ""); int periodYear = Integer.parseInt(period.substring(0, 4)); int periodMonth = Integer.parseInt(period.substring(4, 6)); StringBuilder checkSQL = new StringBuilder(); checkSQL.append(" SELECT "); checkSQL.append(" PERSON.FID PERSONID, "); checkSQL.append(" PERSON.FNAME_L2 PERSONNAME, "); checkSQL.append(" PERSON.FNUMBER PERSONNUMBER, "); checkSQL.append(" PERSON.FGENDER GENDER, "); checkSQL.append(" TAX.FPHONENUMBER PHONENUMBER, "); checkSQL.append(" ENTRY.FPERSONSTATUS PERSONSTATUS, "); checkSQL.append(" ENTRY.FEMPLOYEDTYPE EMPLOYEDTYPE, "); checkSQL.append(" ENTRY.FEMPLOYEDDATE EMPLOYEDDATE, "); checkSQL.append(" isnull(TAX.FBIRTHDAY,PERSON.FBIRTHDAY) BIRTHDAY, "); checkSQL.append(" nl.fname_l2 NATIONALITY, "); checkSQL.append(" TAX.FISOVERSEA ISOVERSEA,"); checkSQL.append(" ENTRY.FDEPARTUREDATE DEPARTUREDATE,"); checkSQL.append(" TAX.FINVESTMENTTOTAL INVESTMENTTOTAL,"); checkSQL.append(" TAX.FINVESTMENTRATE INVESTMENTRATE,"); checkSQL.append(" TAX.FISDISABILITY ISDISABILITY,"); checkSQL.append(" TAX.FISHERO ISHERO,"); checkSQL.append(" TAX.FISOLD ISOLD,"); checkSQL.append(" ENTRY.FDEDUCTFEES DEDUCTFEES,"); checkSQL.append(" TAX.FDISCARDNUMBER DISCARDNUMBER,"); checkSQL.append(" TAX.FHEROCARDNUMBER HEROCARDNUMBER,"); checkSQL.append(" TAX.FEMAIL EMAIL,"); checkSQL.append(" dip.fname_l2 EDULEVEL,"); checkSQL.append(" TAX.FPOSITION POSITION,"); checkSQL.append(" bank.fname_l2 BANKNAME,"); checkSQL.append(" TAX.FBANKCARDPROVINCE BANKCARDPROVINCE,"); checkSQL.append(" TAX.FACCOUNT BANKACCOUNT,"); checkSQL.append(" birNl.fName_l2 BIRTHPLACE,"); checkSQL.append(" TAX.FTAXREASON TAXREASON,"); checkSQL.append(" TAX.FENTRYDATE ENTRYDATE,"); checkSQL.append(" TAX.FLEAVEDATE LEAVEDATE,"); checkSQL.append(" TAX.FCARDTYPE CARDTYPE, "); checkSQL.append(" TAX.FReportName reportName, "); checkSQL.append(" TAX.FCARDNUMBER CARDNUMBER, "); checkSQL.append(" ENTRY.FID ENTRYID, "); checkSQL.append(" ENTRY.FTAXUNITID TAXUNITID, "); checkSQL.append(" RECORD.FID RECORDID, "); checkSQL.append(" RECORD.FSTATE "); checkSQL.append(" FROM T_HR_STAXPERSONRECORD TAX "); checkSQL.append(" INNER JOIN T_HR_STAXPERSONRECORDENTRY ENTRY ON TAX.FID = ENTRY.FBILLID "); checkSQL.append(" LEFT JOIN T_HR_STAXSPEADDDEDRECORD RECORD ON ENTRY.FPERSONID = RECORD.FPERSONID AND ENTRY.FTAXUNITID = RECORD.FTAXUNITID "); checkSQL.append(" AND RECORD.FPERIODYEAR = ").append(periodYear); checkSQL.append(" AND RECORD.FPERIODMONTH = ").append(periodMonth); checkSQL.append(" AND RECORD.FTAXUNITID = '").append(taxUnitInfo.getId().toString()).append("' "); checkSQL.append(" INNER JOIN T_BD_PERSON PERSON ON ENTRY.FPERSONID = PERSON.FID "); checkSQL.append(" LEFT JOIN T_BD_Nationality nl ON nl.fid = TAX.FNATIONALITYID "); checkSQL.append(" LEFT JOIN T_BD_HRDiploma dip ON dip.fid = TAX.FEDULEVELID "); checkSQL.append(" LEFT JOIN T_HR_SBank bank ON bank.fid = TAX.FBANKID "); checkSQL.append(" LEFT JOIN T_BD_Nationality birNl ON birNl.fid = TAX.FBIRTHPLACEID "); checkSQL.append(" WHERE "); checkSQL.append(" ENTRY.FID IN (").append(taxPersonRecordEntryIDS).append(") "); String updateRecordSQL = " update T_HR_STAXSPEADDDEDRECORD set Fstate = 30, CFTaskID = ? where FID = ?"; ArrayList updateParamList = new ArrayList(); ISYUtilsFacade facade = SYUtilsFacadeFactory.getLocalInstance(ctx); try { logger.error("_report:"+checkSQL); IRowSet rowSet = DbUtil.executeQuery(ctx, checkSQL.toString()); List rylb = new ArrayList(); CoreBaseCollection recordCollection = new CoreBaseCollection(); HashSet reportPersonSet = new HashSet(); while(true) { while(true) { if (!rowSet.next()) { if (rylb.isEmpty()) { return null; } SpecialAmountInfo specialAmountInfo = new SpecialAmountInfo(); specialAmountInfo.setTaxPersonRecordEntryIDS(initIds); specialAmountInfo.setBizNo(facade.getBizNo()); specialAmountInfo.setQymc(taxUnitInfo.getName()); specialAmountInfo.setMmlx("0"); specialAmountInfo.setSmzh(null); specialAmountInfo.setJmsmmm(null); specialAmountInfo.setSbmm(Base64Utils.decode(taxUnitInfo.getDeclPassword())); specialAmountInfo.setJmsbmm(null); specialAmountInfo.setDjxhid(taxUnitInfo.getRegNumber()); specialAmountInfo.setNsrsbh(taxUnitInfo.getTaxNumber()); specialAmountInfo.setAreaid(taxUnitInfo.getAreaCode()); specialAmountInfo.setSkssq(period); specialAmountInfo.setBmbh(null); specialAmountInfo.setBmmc(null); specialAmountInfo.setSfrysb(null); specialAmountInfo.setXzms("1"); specialAmountInfo.setRylb(rylb); paramMap.put("qymc", taxUnitInfo.getName()); paramMap.put("nsrsbh", taxUnitInfo.getTaxNumber()); paramMap.put("areaid", taxUnitInfo.getAreaCode()); paramMap.put("sdyf", period); paramMap.put("ver", "V2.0.000"); paramMap.put("djxhid", taxUnitInfo.getRegNumber()); paramMap.put("smmm", Base64Utils.decode(taxUnitInfo.getRealPassword())); paramMap.put("sbmm", Base64Utils.decode(taxUnitInfo.getDeclPassword())); paramMap.put("xzzxxx", "是"); Map dataMap = new HashMap(); dataMap.put("rylb", rylb); paramMap.put("data", dataMap); Map config = facade.getConfig(); String url = config.get("ip")+ URLConfigEnum.QUERYPREDEDUCT_VALUE; String result = facade.post(url, JSONUtil.toJsonStr(specialAmountInfo)); // if // facade.addTask("GetQuerySpecialAmountFeedback",); // TaskInfo taxCalTaskInfo = TaskFactory.getLocalInstance(ctx).getTaskInfo(new ObjectUuidPK(tastId)); // // int i = 0; // // for(int size = recordCollection.size(); i < size; ++i) { // TaxSpeAddDedRecordInfo taxSpeAddDedRecordInfo = (TaxSpeAddDedRecordInfo)recordCollection.get(i); // taxSpeAddDedRecordInfo.put("task",taxCalTaskInfo); // } // // Object[] objects; // for(Iterator i$ = updateParamList.iterator(); i$.hasNext(); objects[0] = tastId) { // objects = (Object[])i$.next(); // } // // TaxSpeAddDedRecordFactory.getLocalInstance(ctx).saveBatchData(recordCollection); // if (updateParamList.size() > 0) { // DbUtil.executeBatch(ctx, updateRecordSQL, updateParamList); // } // // List arrayList = new ArrayList(); // arrayList.add(new ObjectUuidPK(tastId)); return MessageResult.SUCCESS(); } String recordId = rowSet.getString("RECORDID"); if (StringUtils.isEmpty(recordId)) { break; } int state = rowSet.getInt("FSTATE"); if (40 != state && 30 != state) { if (50 == state) { Object[] updateParam = new Object[]{null, recordId}; updateParamList.add(updateParam); } break; } } String personId = rowSet.getString("PERSONID"); String personName = rowSet.getString("reportName"); String personNumber = rowSet.getString("PERSONNUMBER"); String phoneNumber = rowSet.getString("PHONENUMBER"); String personStatus = rowSet.getString("PERSONSTATUS"); String employedType = rowSet.getString("EMPLOYEDTYPE"); Date employeddate = rowSet.getDate("EMPLOYEDDATE"); String gender = rowSet.getString("GENDER"); if (StringUtils.isEmpty(personName)) { personName = rowSet.getString("PERSONNAME"); } Date birthday = rowSet.getDate("BIRTHDAY"); String nationality = rowSet.getString("NATIONALITY"); String isoversea = rowSet.getString("ISOVERSEA"); Date departuredate = rowSet.getDate("DEPARTUREDATE"); String investmenttotal = rowSet.getString("INVESTMENTTOTAL"); String investmentrate = rowSet.getString("INVESTMENTRATE"); String isdisability = rowSet.getString("ISDISABILITY"); String ishero = rowSet.getString("ISHERO"); String isold = rowSet.getString("ISOLD"); String deductfees = rowSet.getString("DEDUCTFEES"); String discardnumber = rowSet.getString("DISCARDNUMBER"); String herocardnumber = rowSet.getString("HEROCARDNUMBER"); String email = rowSet.getString("EMAIL"); String edulevel = rowSet.getString("EDULEVEL"); String position = rowSet.getString("POSITION"); String bankname = rowSet.getString("BANKNAME"); String bankcardprovince = rowSet.getString("BANKCARDPROVINCE"); String bankaccount = rowSet.getString("BANKACCOUNT"); String birthplace = rowSet.getString("BIRTHPLACE"); String taxreason = rowSet.getString("TAXREASON"); Date entrydate = rowSet.getDate("ENTRYDATE"); Date leavedate = rowSet.getDate("LEAVEDATE"); String cardType = rowSet.getString("CARDTYPE"); String cardNumber = rowSet.getString("CARDNUMBER"); String reportPersonSetKey = personId + "_" + taxUnitID + "_" + periodYear + "_" + periodMonth; if (!reportPersonSet.contains(reportPersonSetKey)) { reportPersonSet.add(reportPersonSetKey); SixTPersonInfo sixTPersonInfo = new SixTPersonInfo(); sixTPersonInfo.setXm(personName); sixTPersonInfo.setZzlx(CardTypeEnum.getEnum(cardType).getAlias()); sixTPersonInfo.setZzhm(cardNumber); sixTPersonInfo.setQtzzlx(null); sixTPersonInfo.setQtzzhm(null); sixTPersonInfo.setGh(personNumber); sixTPersonInfo.setSkssq(period); sixTPersonInfo.setLxdh(phoneNumber); sixTPersonInfo.setNsrzt(("1".equals(personStatus)? PersonStatusEnum.Normal.getAlias():PersonStatusEnum.NotNormal.getAlias())); if(StrUtil.isNotBlank(employedType)) { sixTPersonInfo.setSfgy(EmployedTypeEnum.getEnum(employedType).getAlias()); }else{ sixTPersonInfo.setSfgy(null); } if(null!=employeddate){ sixTPersonInfo.setRzsgrq(format.format(employeddate)); }else { sixTPersonInfo.setRzsgrq(format.format(new Date())); } if(null!=gender) { sixTPersonInfo.setXb(Genders.getEnum(Integer.parseInt(gender)).getAlias()); }else{ sixTPersonInfo.setXb(Genders.Male.getAlias()); } sixTPersonInfo.setCsny(format.format(birthday)); if(StrUtil.isNotBlank(nationality)){ sixTPersonInfo.setGj(nationality); }else{ sixTPersonInfo.setGj("中国"); } sixTPersonInfo.setRydq("0".equals(isoversea)?"境内":"境外"); if(null!=departuredate) { sixTPersonInfo.setLzrq(format.format(departuredate)); }else { sixTPersonInfo.setLzrq(""); } if(StrUtil.isNotBlank(investmenttotal)){ sixTPersonInfo.setGrgbze(investmenttotal); }else { sixTPersonInfo.setGrgbze(null); } if(StrUtil.isNotBlank(investmentrate)){ sixTPersonInfo.setGrgbbl(investmentrate); }else { sixTPersonInfo.setGrgbbl(null); } if(StrUtil.isNotBlank(isdisability)) { sixTPersonInfo.setSfcj("0".equals(isdisability)?"否":"是"); }else { sixTPersonInfo.setSfcj(null); } if(StrUtil.isNotBlank(ishero)) { sixTPersonInfo.setSfls("0".equals(ishero)?"否":"是"); }else { sixTPersonInfo.setSfls(null); } if(StrUtil.isNotBlank(isold)) { sixTPersonInfo.setSfgl("0".equals(isold)?"否":"是"); }else { sixTPersonInfo.setSfgl(null); } if(StrUtil.isNotBlank(deductfees)) { sixTPersonInfo.setSfzdw(DeductFeesEnum.getEnum(deductfees).getAlias()); }else { sixTPersonInfo.setSfzdw(null); } sixTPersonInfo.setCjzh(discardnumber); sixTPersonInfo.setLszh(herocardnumber); sixTPersonInfo.setDzyx(email); sixTPersonInfo.setXl(edulevel); if(StrUtil.isNotBlank(position)) { sixTPersonInfo.setZw(PositionTypeEnum.getEnum(position).getAlias()); }else{ sixTPersonInfo.setZw(null); } sixTPersonInfo.setKhyh(bankname); sixTPersonInfo.setKhyhsfmz(bankcardprovince); sixTPersonInfo.setYhzh(bankaccount); sixTPersonInfo.setLxdz_sheng(null); sixTPersonInfo.setLxdz_shi(null); sixTPersonInfo.setLxdz_qx(null); sixTPersonInfo.setLxdz_jd(null); sixTPersonInfo.setLxdz(null); sixTPersonInfo.setHjszd_sheng(null); sixTPersonInfo.setHjszd_shi(null); sixTPersonInfo.setHjszd_qx(null); sixTPersonInfo.setHjszd_jd(null); sixTPersonInfo.setHjszd_xxdz(null); sixTPersonInfo.setBz(null); sixTPersonInfo.setCsd(birthplace); sixTPersonInfo.setSssx(taxreason); if(null!=entrydate){ sixTPersonInfo.setScrjsj(format.format(entrydate)); } if(null!=leavedate){ sixTPersonInfo.setYjljsj(format.format(leavedate)); } sixTPersonInfo.setWjrlxdz_sheng(null); sixTPersonInfo.setWjrlxdz_shi(null); sixTPersonInfo.setWjrlxdz_qx(null); sixTPersonInfo.setWjrlxdz_jd(null); sixTPersonInfo.setWjrlxdz_xxdz(null); sixTPersonInfo.setXmzw(null); sixTPersonInfo.setBz(null); rylb.add(sixTPersonInfo); TaxSpeAddDedRecordInfo taxSpeAddDedRecordInfo = new TaxSpeAddDedRecordInfo(); taxSpeAddDedRecordInfo.setTaxUnit(taxUnitInfo); PersonInfo personInfo = new PersonInfo(); personInfo.setId(BOSUuid.read(personId)); taxSpeAddDedRecordInfo.setPerson(personInfo); taxSpeAddDedRecordInfo.setPeriodYear(periodYear); taxSpeAddDedRecordInfo.setPeriodMonth(periodMonth); taxSpeAddDedRecordInfo.setState(TaxCalInitDetailStateEnum.RUNNING); recordCollection.add(taxSpeAddDedRecordInfo); } } } catch (Exception var27) { logger.error(var27.getMessage(), var27); throw new BOSException("生成项附加扣除申报服务时,判断是否存在未下载的专项附加扣除信息数据出错", var27); } } } else { throw new BOSException("生成项附加扣除申报服务时,未获取到对应的纳税单位数据,请联系管理员检查数据是否被删除"); } } } @Override protected void _save(Context ctx, String taskID, String result) throws BOSException { super._save(ctx, taskID, result); Map bodyMap = (Map) JSONUtils.convertJsonToObject(ctx, result, Map.class); String code = (String)bodyMap.get("code"); if ("00000000".equals(code)) { String updateSql = "update T_HR_STAXSPEADDDEDRECORD set FSTATE = 40 where CFTaskID = '" + taskID + "'"; DbUtil.execute(ctx, updateSql); } } }