package com.kingdee.eas.custom.shuiyou.six.osf; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONArray; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import com.google.common.collect.Maps; import com.kingdee.bos.BOSException; import com.kingdee.bos.Context; import com.kingdee.bos.bsf.service.app.IHRMsfService; import com.kingdee.bos.metadata.entity.SelectorItemCollection; import com.kingdee.bos.metadata.entity.SelectorItemInfo; import com.kingdee.bos.rabbitmq.guava.Lists; import com.kingdee.bos.util.BOSUuid; import com.kingdee.eas.common.EASBizException; import com.kingdee.eas.custom.shuiyou.task.*; 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.util.app.DbUtil; import com.kingdee.jdbc.rowset.IRowSet; import java.util.List; import java.util.Map; /** * 人员专项附加扣除金额查询结果反馈 * description: GetQuerySpecialAmountFeedback
* date: 2024/9/9 16:03
* author: lhbj
* version: 1.0
*/ public class GetQuerySpecialAmountFeedback implements IHRMsfService { @Override public Object process(Context context, Map map) throws EASBizException, BOSException { SelectorItemCollection sc = new SelectorItemCollection(); sc.add(new SelectorItemInfo("state")); ITask iTask = TaskFactory.getLocalInstance(context); ISYUtilsFacade facade = SYUtilsFacadeFactory.getLocalInstance(context); //获取请求结果 TaskInfo taskInfo=new TaskInfo(); String paramData = (String) map.get("paramData"); MessageResult messageResult=null; try { JSONObject paramMap = JSONUtil.parseObj(paramData); //获取传入任务id String preTaskId = (String) paramMap.get("parent_taskid"); taskInfo.setId(BOSUuid.read(preTaskId)); taskInfo.setState(TaskStateEnum.FINISHED); String initIds = (String) paramMap.get("initIds"); Map config = facade.getConfig(); String url = config.get("ip") + URLConfigEnum.GETQUERYSPECIALAMOUNTFEEDBACK_VALUE; String result = facade.get(url,paramData); //获取本次的数据id String taxIDS =initIds; StringBuilder sel = new StringBuilder(); sel.append(" select tax.fid,stpr.FCARDNUMBER from "); sel.append(" T_HR_STAXCALINITDETAIL tax "); sel.append(" left join T_HR_STaxPersonRecord stpr on stpr.FPERSONID=tax.FPERSONID "); sel.append(" left join T_HR_STaxPersonRecordEntry stpre on stpre.FBILLID =stpr.fid "); sel.append(" where tax.FTAXUNITID=stpre.FTAXUNITID "); sel.append(" and tax.fid in (" + taxIDS + ")"); IRowSet rs = DbUtil.executeQuery(context, sel.toString()); Map card_idMap=Maps.newHashMap(); while (rs.next()) { String id = rs.getString("fid"); String card = rs.getString("FCARDNUMBER"); card_idMap.put(card,id); } JSONObject resultMap = JSONUtil.parseObj(result); JSONObject head = resultMap.getJSONObject("head"); JSONObject body = resultMap.getJSONObject("body"); String code = head.getStr("code"); if ("00000000".equals(code)) { Map> sql_param = Maps.newHashMap(); JSONArray ryxxlb = body.getJSONArray("ryxxlb"); for (int i = 0; i < ryxxlb.size(); i++) { JSONObject ryxx = ryxxlb.getJSONObject(i); StringBuilder sql = new StringBuilder(); sql.append("update T_HR_STAXCALINITDETAIL set "); List paramList = Lists.newArrayList(); for (Map.Entry entry : ryxx.entrySet()) { String key = entry.getKey(); Object value = entry.getValue(); String field = this.getFieldByNumber(context, key); if (StrUtil.isNotBlank(field)) { paramList.add(StrUtil.toString(value)); sql.append(field + "=?,"); } } String zzhm = ryxx.getStr("zzhm"); sql = sql.delete(sql.length() - 1, sql.length()); sql.append(" where fid =?"); paramList.add(card_idMap.get(zzhm)); sql_param.put(sql.toString(), paramList); } for(Map.Entry> entry : sql_param.entrySet()){ String sql = entry.getKey(); List list = entry.getValue(); DbUtil.execute(context,sql,list.toArray()); } messageResult = MessageResult.SUCCESS(result); }else if("00000004".equals(head.getStr("code"))) { messageResult = MessageResult.AGAIN(); }else { messageResult = MessageResult.FAILED(); } }catch (Exception e){ e.printStackTrace(); taskInfo.setState(TaskStateEnum.FAIDED); messageResult = MessageResult.ERROR(e.getMessage()); }finally { iTask.updatePartial(taskInfo, sc); } return messageResult; } protected String getFieldByNumber(Context context,String number){ String sql = "select ('T'||FIELDSN) fieldName,fname_L2 from T_HR_STaxItem where FSIMPLENAME=?"; try { IRowSet rs = DbUtil.executeQuery(context, sql, new String[]{number}); if (rs.next()) { return rs.getString("fieldName"); } }catch (Exception e){ e.printStackTrace(); } return null; } }