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;
}
}