package com.kingdee.shr.compensation.app.integrate; import com.kingdee.bos.BOSException; import com.kingdee.bos.Context; import com.kingdee.bos.util.BOSUuid; import com.kingdee.bos.util.EASResource; import com.kingdee.eas.common.EASBizException; import com.kingdee.eas.hr.base.HRBillStateEnum; import com.kingdee.eas.util.app.DbUtil; import com.kingdee.shr.compensation.app.utils.DateRange; import com.kingdee.shr.compensation.app.utils.SubConstants; import com.kingdee.shr.compensation.app.utils.SubmitShemeUtils; import com.kingdee.util.NumericExceptionSubItem; import bsh.StringUtil; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Optional; import java.util.Set; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.apache.log4j.Logger; /** * 提报拓展 * @author coyle * 20250601 */ public class BatchSubmitShemeBillControllerBeanEx extends BatchSubmitShemeBillControllerBean { private static final Logger logger = Logger.getLogger(BatchSubmitShemeBillControllerBeanEx.class); private static SimpleDateFormat SDF = new SimpleDateFormat("yyyy-MM-dd"); private static Map FEILDS = new HashMap(); /** * 设置点检率数据 * @param ctx * @param info * @param billId * @throws BOSException * @throws EASBizException */ protected void setMesData(Context ctx, BatchSubmitShemeBillInfo info, String billId) throws BOSException, EASBizException { String id = info.getSubmitScheme().getId().toString(); CalSubmitSchemeInfo calSubmitSchemeInfo = CalSubmitSchemeFactory.getLocalInstance(ctx) .getCalSubmitSchemeInfo(" where id = '" + id + "'"); if (null != calSubmitSchemeInfo.getSubmitSchemeType() && 4 == calSubmitSchemeInfo.getSubmitSchemeType().getValue()) { BatchSubmitShemeBillEntryCollection coll = info.getEntry(); if (coll.isEmpty()) { return; } // HashSet selectPerson = new HashSet(); HashSet selectDate = new HashSet(); for (int i = 0; i < coll.size(); ++i) { BatchSubmitShemeBillEntryInfo entryInfo = coll.get(i); String personId = entryInfo.getPerson().getId().toString(); selectPerson.add(personId); Date effectDate = entryInfo.getEffectDate(); String formattedEffectDate = SDF.format(effectDate); selectDate.add(formattedEffectDate); } // 找出最大日期与最小日期 DateRange dateRange = SubmitShemeUtils.findMinMaxDate(selectDate); HashMap mesData = SubmitShemeUtils.getMesData( ctx, selectPerson, dateRange); upMesData(ctx, info ,coll, mesData); } } /** * 设置点检率数据 * @param ctx * @param info * @param entrys * @param mesData */ public static void upMesData(Context ctx,BatchSubmitShemeBillInfo info, BatchSubmitShemeBillEntryCollection entrys, HashMap mesData) { try { //获取方案的字段 CalSubmitSchemeInfo calSubmitSchemeInfo = info.getSubmitScheme(); if(null == calSubmitSchemeInfo) { return; } String field = "1"; CalSubmitItemCollection subColl = CalSubmitItemFactory.getLocalInstance(ctx) .getCalSubmitItemCollection("SELECT ID,FieldSn,number where number = '"+SubConstants.BOOLEANFIELD+"'"); if(subColl.size()>0) { CalSubmitItemInfo calSubmitItemInfo = subColl.get(0); int fieldSn = calSubmitItemInfo.getFieldSn(); field = "S"+fieldSn ; } //提报项目字段提取,用于后面做判断; Set itemSet = new HashSet(); String subSchemeId = calSubmitSchemeInfo.getId().toString(); CalSubmitSchemeItemCollection calSubmitSchemeItemCollection = CalSubmitSchemeItemFactory.getLocalInstance(ctx).getCalSubmitSchemeItemCollection(" select calSubmitItem.number where calSubmitScheme = '"+subSchemeId+"'" ); for(int i = 0;i tempList = new ArrayList<>(); for (String item : itemNums) { if (itemSet.contains(item)) { tempList.add(item); } } //如果不存在提报项目则不添加,以免报错 itemNums = tempList.toArray(new String[0]); logger.error("日提报赋值的字段"+itemNums.toString()); if(ObjectUtils.isEmpty(FEILDS)) { FEILDS = SubmitShemeUtils.getFeilds(ctx); } String sql = " update T_HR_TimepieceBillEntry set " ; for(int i =0; i < itemNums.length ;i++ ) { String keyF = itemNums[i]; String sqlFeild = FEILDS.get(keyF); sql = sql + sqlFeild + " = ? " ; if(i != itemNums.length -1 ) { sql += " , "; } } sql += " where fid = ? "; //需更新的MES单据的id; Set checkbillIds = new HashSet(); //sql参数 List paramList = new ArrayList(); for (int i = 0; i < entrys.size(); i++) { BatchSubmitShemeBillEntryInfo entry = entrys.get(i); String pId = entry.getPerson().getId().toString(); Date effectDate = entry.getEffectDate(); String eDate = SDF.format(effectDate); String key = pId + "_" + eDate; HashMap valMap = mesData.get(key); if (ObjectUtils.isEmpty(valMap)) { continue; } //最后这个是id Object[] paraObj = new Object[itemNums.length + 1]; setParamsVal(itemNums, checkbillIds, entry, valMap, paraObj,field); paramList.add(paraObj); } logger.error("查询messql"+sql); DbUtil.executeBatch(ctx, sql, paramList); logger.error("提交赋值成功"); //更新MES单据的状态 SubmitShemeUtils.updateInspectionRate(ctx, info, checkbillIds); logger.error("点检率状态反写成功"); } catch (BOSException e) { e.printStackTrace(); } } /** * 设置参数值参数赋值; * @param itemNums * @param checkbillIds * @param entry * @param valMap * @param paraObj * @param field 标识字段; 是否需要更新 */ private static void setParamsVal(String[] itemNums, Set checkbillIds, BatchSubmitShemeBillEntryInfo entry, HashMap valMap, Object[] paraObj,String field) { //如果为空说明还没保存,则不处理,交前端handler处理; if(ObjectUtils.isEmpty(entry.getId())) { return; } String booleanStr = ""; if(!StringUtils.isEmpty(field)) { booleanStr = Optional.ofNullable( entry.getString(field)).orElse(""); } for(int j =0; j < itemNums.length ;j++ ) { String keyF = itemNums[j]; String valFeild = FEILDS.get(keyF); //如果是锁定的则不变更,使用原来的值; if(booleanStr.contains(valFeild)) { paraObj[j] = entry.get(valFeild); }else { //变更 paraObj[j] = valMap.get(valFeild); } if( j == itemNums.length-1 ) { paraObj[itemNums.length] = entry.getId().toString(); checkbillIds.add(FEILDS.get(SubConstants.MESID)); } } } protected void beforeSave(Context ctx, BatchSubmitShemeBillInfo info) throws EASBizException, BOSException { if (!"EDIT".equalsIgnoreCase(String.valueOf(info.get("workFlowEdit")))) { this.checkBillExists(ctx, info); } HRBillStateEnum oldBillState = null; if (info.getId() != null) { BatchSubmitShemeBillCollection billInfoC = this.getBatchSubmitShemeBillCollection(ctx, "select id,billState where id = '" + info.getId().toString() + "'"); oldBillState = billInfoC.isEmpty() ? null : billInfoC.get(0).getBillState(); //点检率数据赋值; setMesData(ctx, info, info.getId().toString()); } super.checkHRBillWorkFlowIsEdit(ctx, info, oldBillState); } private void checkBillExists(Context ctx, BatchSubmitShemeBillInfo info) throws EASBizException, BOSException { if (BatchSubmitShemeBillFactory.getLocalInstance(ctx) .exists("where number = '" + info.getNumber() + "' and billState > 1")) { throw new EASBizException(new NumericExceptionSubItem("002", EASResource .getString("com.kingdee.shr.compensation.resource.CommonResource", "label191", ctx.getLocale()))); } } }