Преглед на файлове

自动提交提报更新

yuanzhi_kuang преди 2 дни
родител
ревизия
b0b69a06c5

+ 4 - 6
src/com/kingdee/eas/custom/calcdailypay/task/AutoSubDayDetailFacadeControllerBean.java

@@ -6,23 +6,19 @@ import com.kingdee.bos.util.EASResource;
 import com.kingdee.shr.base.syssetting.exception.SHRWebException;
 import com.kingdee.shr.base.syssetting.exception.ShrWebBizException;
 import com.kingdee.shr.compensation.app.integrate.BatchSubmitShemeBillCollection;
-import com.kingdee.shr.compensation.app.integrate.BatchSubmitShemeBillEntryCollection;
-import com.kingdee.shr.compensation.app.integrate.BatchSubmitShemeBillEntryFactory;
 import com.kingdee.shr.compensation.app.integrate.BatchSubmitShemeBillFactory;
 import com.kingdee.shr.compensation.app.integrate.BatchSubmitShemeBillInfo;
 import com.kingdee.shr.compensation.app.integrate.CalSubmitSchemeFactory;
 import com.kingdee.shr.compensation.app.integrate.CalSubmitSchemeInfo;
 import com.kingdee.shr.compensation.app.integrate.IBatchSubmitShemeBill;
-import com.kingdee.shr.compensation.app.integrate.IBatchSubmitShemeBillEntry;
+import com.kingdee.shr.compensation.app.integrate.SubmitSchemeType;
 import com.kingdee.shr.compensation.integrate.verify.CycleVerify;
 import com.kingdee.shr.compensation.integrate.verify.ISubmitBillVerifyInterface;
 import com.kingdee.shr.compensation.integrate.verify.SubmitBillDisableElementVerify;
 import com.kingdee.shr.compensation.integrate.verify.SubmitBillEnableElementVerify;
 import com.kingdee.shr.compensation.util.budget.BudgetUtil;
-import com.kingdee.shr.compensation.web.handler.integrate.helper.CmpIntegrateWebHelper;
 import com.google.common.collect.Maps;
 import org.apache.log4j.Logger;
-import javax.ejb.*;
 import com.kingdee.bos.*;
 import com.kingdee.bos.dao.ormapping.ObjectUuidPK;
 import java.time.LocalDate;
@@ -87,11 +83,13 @@ public class AutoSubDayDetailFacadeControllerBean extends AbstractAutoSubDayDeta
 		IBatchSubmitShemeBill billIns = BatchSubmitShemeBillFactory.getLocalInstance(ctx);
         FilterInfo filter = new FilterInfo();
         filter.getFilterItems().add(new FilterItemInfo("billState", HRBillStateEnum.SAVED_VALUE, CompareType.EQUALS));
+        
+        //Ìᱨ·½°¸Ê±ÈÕÌᱨµÄ;
+        filter.getFilterItems().add(new FilterItemInfo("submitScheme.submitSchemeType", SubmitSchemeType.TIMEPIECE_VALUE, CompareType.EQUALS));
         filter.getFilterItems().add(new FilterItemInfo("applyDate",  formattedDate , CompareType.LESS_EQUALS));
         filter.getFilterItems().add(new FilterItemInfo("applyDate",  formattedDate , CompareType.GREATER_EQUALS  ));
         EntityViewInfo viewInfo = new EntityViewInfo();
        
-        viewInfo.setFilter(filter);
         try {
         	BatchSubmitShemeBillCollection batchSubmitShemeBillCollection = billIns.getBatchSubmitShemeBillCollection(viewInfo);
         	if (!batchSubmitShemeBillCollection.isEmpty()) {

+ 178 - 0
src/com/kingdee/shr/compensation/app/integrate/BatchSubmitShemeBillControllerBeanEx.java

@@ -0,0 +1,178 @@
+package com.kingdee.shr.compensation.app.integrate;
+
+ 
+import com.kingdee.bos.BOSException;
+import com.kingdee.bos.Context;
+ 
+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 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.Set;
+
+import org.apache.commons.lang3.ObjectUtils;
+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<String,String> 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<String> selectPerson = new HashSet();
+			HashSet<String> 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<String, HashMap> mesData = SubmitShemeUtils.getMesData( ctx, selectPerson, dateRange);
+			upMesData(ctx, info ,coll, mesData);
+
+		}
+	}
+
+	 
+
+	/**
+	 * 设置点检率数据
+	 * @param request
+	 * @param entrys
+	 */
+	public static void upMesData(Context ctx,BatchSubmitShemeBillInfo info, BatchSubmitShemeBillEntryCollection entrys,  HashMap<String, HashMap> mesData)  {
+		try {
+			String[] itemNums = SubConstants.ITEMNUMS;
+			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<String> 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); 
+				paramList.add(paraObj);
+			}
+			logger.error("查询messql"+sql);
+			DbUtil.executeBatch(ctx, sql, paramList);
+			logger.error("提交赋值成功");
+			//更新MES单据的状态
+			SubmitShemeUtils.updateInspectionRate(ctx, info, checkbillIds);
+		} catch (BOSException e) {
+			e.printStackTrace();
+		}
+	}
+
+
+	//参数赋值;
+	private static void setParamsVal(String[] itemNums, Set<String> checkbillIds, BatchSubmitShemeBillEntryInfo entry,
+			HashMap valMap, Object[] paraObj) {
+		//如果为空说明还没保存,则不处理,交前端handler处理;
+		if(ObjectUtils.isEmpty(entry.getId())) {
+			return;
+		}
+		for(int j =0; j < itemNums.length ;j++ ) {
+			String keyF = itemNums[j];
+			valMap.get(keyF);
+			paraObj[j] = valMap.get(FEILDS.get(keyF));
+			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())));
+		}
+	}
+
+}

+ 27 - 0
src/com/kingdee/shr/compensation/app/utils/DateRange.java

@@ -0,0 +1,27 @@
+package com.kingdee.shr.compensation.app.utils;
+
+import java.util.Date;
+
+
+/**
+ * ČŐĆÚˇśÎ§Ŕŕ
+ * coyle
+ * 2025-06-01
+ */
+public  class DateRange {
+    private final Date minDate;
+    private final Date maxDate;
+
+    public DateRange(Date minDate, Date maxDate) {
+        this.minDate = minDate;
+        this.maxDate = maxDate;
+    }
+
+    public Date getMinDate() {
+        return minDate;
+    }
+
+    public Date getMaxDate() {
+        return maxDate;
+    }
+}

+ 21 - 0
src/com/kingdee/shr/compensation/app/utils/SubConstants.java

@@ -0,0 +1,21 @@
+package com.kingdee.shr.compensation.app.utils;
+
+public class SubConstants {
+    // 完成率
+    public static final String COMRATE = "MQ005";
+    // 岗位类型
+    public static final String JOBTYPE = "MQ004";
+    // 技能等级 SKILLLEVEL
+    public static final String SKILLLEVEL = "MQ003";
+    // 是否现场作业 On site
+    public static final String ONSITE = "MQ007";
+    // 班组任职 Team app  --shr 是否片长
+    public static final String TEAMAPP = "MQ012";
+    // 工资序列 Salary seq
+    public static final String SALARYSEQ = "MQ012";
+    //MES的id
+    public static String MESID = "MESID";
+    
+    public static String[] ITEMNUMS = {COMRATE,JOBTYPE,SKILLLEVEL,ONSITE,TEAMAPP,SALARYSEQ};
+
+}

+ 293 - 0
src/com/kingdee/shr/compensation/app/utils/SubmitShemeUtils.java

@@ -0,0 +1,293 @@
+package com.kingdee.shr.compensation.app.utils;
+
+import com.kingdee.bos.BOSException;
+import com.kingdee.bos.Context;
+import com.kingdee.bos.metadata.entity.EntityViewInfo;
+import com.kingdee.bos.metadata.entity.FilterInfo;
+import com.kingdee.bos.metadata.entity.FilterItemInfo;
+import com.kingdee.bos.metadata.entity.SelectorItemCollection;
+import com.kingdee.bos.metadata.entity.SelectorItemInfo;
+import com.kingdee.bos.metadata.query.util.CompareType;
+import com.kingdee.eas.common.EASBizException;
+import com.kingdee.eas.custom.calcdailypay.IInspectionRate;
+import com.kingdee.eas.custom.calcdailypay.InspectionRateCollection;
+import com.kingdee.eas.custom.calcdailypay.InspectionRateFactory;
+import com.kingdee.eas.custom.calcdailypay.InspectionRateInfo;
+import com.kingdee.eas.framework.CoreBaseCollection;
+import com.kingdee.eas.util.ToolUtils;
+import com.kingdee.eas.util.app.DbUtil;
+import com.kingdee.jdbc.rowset.IRowSet;
+import com.kingdee.shr.base.syssetting.context.SHRContext;
+import com.kingdee.shr.base.syssetting.exception.SHRWebException;
+import com.kingdee.shr.compensation.app.integrate.BatchSubmitShemeBillEntryCollection;
+import com.kingdee.shr.compensation.app.integrate.BatchSubmitShemeBillEntryInfo;
+import com.kingdee.shr.compensation.app.integrate.BatchSubmitShemeBillInfo;
+import com.kingdee.shr.compensation.app.integrate.CalSubmitItemCollection;
+import com.kingdee.shr.compensation.app.integrate.CalSubmitItemFactory;
+import com.kingdee.shr.compensation.app.integrate.CalSubmitItemInfo;
+
+import java.math.BigDecimal;
+import java.sql.SQLException;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.commons.lang3.ObjectUtils;
+import org.apache.commons.lang3.StringUtils;
+
+public class SubmitShemeUtils {
+
+    private static String COMRATE = "MQ005";
+    //岗位类型
+    private static String JOBTYPE = "MQ004";
+    //技能等级 SKILLLEVEL
+    private static String SKILLLEVEL = "MQ003";
+    //是否现场作业 On site
+    private static String ONSITE = "MQ007";
+    //班组任职 Team app
+    private static String TEAMAPP = "MQ007";
+    //工资序列 Salary seq
+    private static String SALARYSEQ = "MQ007";
+    
+    private static String MESID = "MESID";
+    private static String[] ITEMNUMS = {SubConstants.COMRATE,SubConstants.JOBTYPE,SubConstants.SKILLLEVEL,SubConstants.ONSITE,SubConstants.TEAMAPP,SubConstants.SALARYSEQ};
+    
+    private static  SimpleDateFormat  SDF = new SimpleDateFormat("yyyy-MM-dd");
+    
+    private static Map<String,String> FEILDS = new HashMap();
+
+  
+
+
+    /**
+	 * 从中间表获取mes数据
+	 */
+	public static HashMap<String,HashMap>  getMesData( Context ctx ,HashSet<String> selectPerson,DateRange dateRange) {
+		if(ObjectUtils.isEmpty(FEILDS)) {
+			SubmitShemeUtils.getFeilds(ctx);
+		}
+		HashMap<String,HashMap> checkMap =  new HashMap();
+	
+		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
+		try {
+			String sql = " select fid ,CFComrate, cfpersonId, cfpositiontype , cfskillLevel , cfonSite , cfteamApp , cfsalarysEq ,"
+					+ " cfbizDate  "
+					+ " from  CT_CAL_InspectionRate  where cfpersonid in "
+					+ "( "
+					+ ToolUtils.aryToStr(selectPerson,true)
+					+ " ) "
+					+ " and cfbizDate >= '"
+					+ dateFormat.format(dateRange.getMinDate())
+					+ "' and  cfbizDate <= '"
+					+ dateFormat.format(dateRange.getMaxDate())
+					+"'" ;
+
+			IRowSet rst =  DbUtil.executeQuery(ctx, sql);
+			while( rst.next() ) {
+				//点检率id存入
+				String checkbillId  = rst.getString("fid");
+				String pId = rst.getString("cfPersonId");
+				Date bizDate = rst.getDate("cfbizDate");
+				String eDate = SDF.format(bizDate);
+				String key = pId+"_"+eDate;
+				HashMap<String,String> valMap = new HashMap();
+				BigDecimal comrate = rst.getBigDecimal("CFComrate");
+				valMap.put(FEILDS.get(COMRATE), comrate.toString());
+				//
+				valMap.put(FEILDS.get(JOBTYPE), rst.getString("cfpositiontype"));
+				valMap.put(FEILDS.get(SKILLLEVEL), rst.getString("cfskillLevel"));
+				valMap.put(FEILDS.get(ONSITE), rst.getString("cfonSite"));
+				valMap.put(FEILDS.get(TEAMAPP), rst.getString("cfteamApp"));
+				valMap.put(FEILDS.get(SALARYSEQ), rst.getString("cfsalarysEq"));
+				valMap.put(MESID, rst.getString("fid"));
+				checkMap.put(key, valMap);
+			}
+
+			
+		}catch(BOSException e){
+			e.printStackTrace();
+		} catch (SQLException e) {
+			e.printStackTrace();
+		}
+		return checkMap;
+
+	}
+
+
+
+	public  static Map<String,String>  getFeilds(Context ctx) {
+		CalSubmitItemCollection subColl = null;
+		try {
+			subColl = CalSubmitItemFactory.getLocalInstance(ctx)
+			        .getCalSubmitItemCollection("SELECT ID,FieldSn,number  where  number in (" + ToolUtils.aryToStr(ITEMNUMS) + ")");
+		} catch (BOSException e1) {
+			e1.printStackTrace();
+		}
+        if (subColl != null && subColl.size() > 0) {
+            for (int i =0 ;i<subColl.size();i++) {
+                CalSubmitItemInfo itemInfo = subColl.get(i);
+                if (itemInfo != null) {
+                    String columnName = "S" + itemInfo.getFieldSn();
+                    FEILDS.put(itemInfo.getNumber() , columnName);
+                }
+            }
+        }
+        return FEILDS;
+	}
+
+    
+    
+    
+    
+    
+    /**
+	 * 设置点检率数据
+	 * @param request
+	 * @param entrys
+	 */
+	public static void setMesData(HttpServletRequest request, BatchSubmitShemeBillEntryCollection entrys,
+						   HashMap<String, HashMap> mesData)  {
+		int assignedRows = 0; // 新增:统计实际赋值的行数
+		Set<String>  checkbillIds = new HashSet();
+		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;
+			}
+
+			boolean isRowAssigned = false; // 标记当前行是否被赋值
+			for (String field : FEILDS.keySet()) {
+				String sVal = FEILDS.get(field);
+				if (entry.containsKey(sVal)) {
+					entry.put(sVal, valMap.get(sVal));
+					isRowAssigned = true; // 当前行至少有一个字段被赋值
+				}
+			}
+
+			if (isRowAssigned) {
+				checkbillIds.add(valMap.get(MESID).toString());
+				assignedRows++; // 只有实际赋值的行才计数
+			}
+		}
+		
+		// 将统计结果存入 request
+		request.setAttribute("checkbillIds", checkbillIds);
+
+		// 将统计结果存入 request
+		request.setAttribute("assignedRowsCount", assignedRows);
+	}
+	
+	
+    
+	public static  DateRange findMinMaxDate(HashSet<String> subDate) {
+		if (subDate == null || subDate.isEmpty()) {
+			return null;
+		}
+
+		List<Date> dates = new ArrayList<>();
+		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
+		for (String dateString : subDate) {
+			try {
+				dates.add(dateFormat.parse(dateString.trim()));
+			} catch (ParseException e) {
+				// 处理日期格式不正确的情况
+				e.printStackTrace();
+				return null; // 如果有日期格式不正确,直接返回 null
+			}
+		}
+		if (dates.isEmpty()) {
+			return null;
+		}
+
+		Date minDate = Collections.min(dates);
+		Date maxDate = Collections.max(dates);
+
+		return new DateRange(minDate, maxDate);
+	}
+    
+    
+	
+	
+	/**
+	 * 更新点检率
+	 * @param request
+	 * @param ctx
+	 * @param info
+	 */
+	public  static void updateInspectionRate(  Context ctx, BatchSubmitShemeBillInfo info,Set<String> checkbillIds ) {
+		//更新点检率数据
+		FilterInfo filter = new FilterInfo();
+		filter.getFilterItems().add(new FilterItemInfo("id", checkbillIds, CompareType.INCLUDE));
+		EntityViewInfo viewInfo = new EntityViewInfo( ) ;
+		viewInfo.setFilter(filter);
+		SelectorItemCollection selector = viewInfo.getSelector();
+		selector.add(new SelectorItemInfo("detailNum"));
+		selector.add(new SelectorItemInfo("isSubDetail"));
+		try {
+			IInspectionRate spIns = InspectionRateFactory.getLocalInstance(ctx);
+			InspectionRateCollection inspectionRateCollection = spIns.getInspectionRateCollection(viewInfo);
+			CoreBaseCollection cCol = new CoreBaseCollection();
+			for(int i = 0;i<inspectionRateCollection.size();i++){
+				InspectionRateInfo inspectionRateInfo = inspectionRateCollection.get(i);
+				inspectionRateInfo.setDetailNum(info.getNumber());
+				inspectionRateInfo.setIsSubDetail(true);
+				cCol.add(inspectionRateInfo);
+			}
+			spIns.updateBatchData(cCol);
+		} catch (BOSException e) {
+			throw new RuntimeException(e);
+		} catch (EASBizException e) {
+			throw new RuntimeException(e);
+		}
+	}
+	
+	
+	
+	
+	
+	/**
+	 * 重置点检率标识
+	 * 将点检率中是否提报标记还原为false;
+	 * @param ctx
+	 * @param info
+	 */
+	public static void reductionInspectionRate(Context ctx, BatchSubmitShemeBillInfo info) {
+		//更新点检率数据
+		String  subNum = info.getNumber();
+		if(StringUtils.isEmpty(subNum)){
+			return;
+		}
+		FilterInfo filter = new FilterInfo();
+		filter.getFilterItems().add(new FilterItemInfo("detailNum", subNum, CompareType.EQUALS));
+		EntityViewInfo viewInfo = new EntityViewInfo( ) ;
+		viewInfo.setFilter(filter);
+		SelectorItemCollection selector = viewInfo.getSelector();
+		selector.add(new SelectorItemInfo("detailNum"));
+		selector.add(new SelectorItemInfo("isSubDetail"));
+		try {
+			IInspectionRate spIns = InspectionRateFactory.getLocalInstance(ctx);
+			InspectionRateCollection inspectionRateCollection = spIns.getInspectionRateCollection(viewInfo);
+			CoreBaseCollection cCol = new CoreBaseCollection();
+			for(int i = 0;i<inspectionRateCollection.size();i++){
+				InspectionRateInfo inspectionRateInfo = inspectionRateCollection.get(i);
+				inspectionRateInfo.setDetailNum("");
+				inspectionRateInfo.setIsSubDetail(false);
+				cCol.add(inspectionRateInfo);
+			}
+			spIns.updateBatchData(cCol);
+		} catch (BOSException e) {
+			throw new RuntimeException(e);
+		} catch (EASBizException e) {
+			throw new RuntimeException(e);
+		}
+	}
+    
+}

+ 81 - 281
websrc/com/kingdee/shr/compensation/web/handler/timepiece/bill/TimepieceSchemeBillEditHandlerEx.java

@@ -22,6 +22,8 @@ import com.kingdee.jdbc.rowset.IRowSet;
 import com.kingdee.shr.base.syssetting.context.SHRContext;
 import com.kingdee.shr.base.syssetting.exception.SHRWebException;
 import com.kingdee.shr.compensation.app.integrate.*;
+import com.kingdee.shr.compensation.app.utils.DateRange;
+import com.kingdee.shr.compensation.app.utils.SubmitShemeUtils;
 import com.kingdee.shr.compensation.exception.ExceptionHandle;
 import com.kingdee.shr.base.syssetting.web.json.JSONUtils;
 import java.math.BigDecimal;
@@ -56,39 +58,39 @@ public class TimepieceSchemeBillEditHandlerEx extends TimepieceSchemeBillEditHan
 	private static Logger logger = LoggerFactory.getLogger(TimepieceSchemeBillEditHandlerEx.class);
 	private static  SimpleDateFormat  SDF = new SimpleDateFormat("yyyy-MM-dd");
 	//完成率
-	private static String COMRATE = "MQ005";
-	//岗位类型
-	private static String JOBTYPE = "MQ004";
-	//技能等级 SKILLLEVEL
-	private static String SKILLLEVEL = "MQ003";
-	//是否现场作业 On site
-	private static String ONSITE = "MQ007";
-	//班组任职 Team app
-	private static String TEAMAPP = "MQ007";
-	//工资序列 Salary seq
-	private static String SALARYSEQ = "MQ007";
-
-	private static String[] ITEMNUMS = {COMRATE,JOBTYPE,SKILLLEVEL,ONSITE,TEAMAPP,SALARYSEQ};
-
-	private static Map<String,String> FEILDS = new HashMap();
+//	private static String COMRATE = "MQ005";
+//	//岗位类型
+//	private static String JOBTYPE = "MQ004";
+//	//技能等级 SKILLLEVEL
+//	private static String SKILLLEVEL = "MQ003";
+//	//是否现场作业 On site
+//	private static String ONSITE = "MQ007";
+//	//班组任职 Team app
+//	private static String TEAMAPP = "MQ007";
+//	//工资序列 Salary seq
+//	private static String SALARYSEQ = "MQ007";
+//
+//	private static String[] ITEMNUMS = {COMRATE,JOBTYPE,SKILLLEVEL,ONSITE,TEAMAPP,SALARYSEQ};
+//
+//	private static Map<String,String> FEILDS = new HashMap();
 
 
 
 
-	public TimepieceSchemeBillEditHandlerEx() throws BOSException {
-		Context ctx = SHRContext.getInstance().getContext();
-		CalSubmitItemCollection subColl = CalSubmitItemFactory.getLocalInstance(ctx)
-				.getCalSubmitItemCollection("SELECT ID,FieldSn,number  where  number in (" + ToolUtils.aryToStr(ITEMNUMS) + ")");
-		if (subColl != null && subColl.size() > 0) {
-			for (int i =0 ;i<subColl.size();i++) {
-				CalSubmitItemInfo itemInfo = subColl.get(i);
-				if (itemInfo != null) {
-					String columnName = "S" + itemInfo.getFieldSn();
-					FEILDS.put(itemInfo.getNumber() , columnName);
-				}
-			}
-		}
-	}
+//	public TimepieceSchemeBillEditHandlerEx() throws BOSException {
+//		Context ctx = SHRContext.getInstance().getContext();
+//		CalSubmitItemCollection subColl = CalSubmitItemFactory.getLocalInstance(ctx)
+//				.getCalSubmitItemCollection("SELECT ID,FieldSn,number  where  number in (" + ToolUtils.aryToStr(ITEMNUMS) + ")");
+//		if (subColl != null && subColl.size() > 0) {
+//			for (int i =0 ;i<subColl.size();i++) {
+//				CalSubmitItemInfo itemInfo = subColl.get(i);
+//				if (itemInfo != null) {
+//					String columnName = "S" + itemInfo.getFieldSn();
+//					FEILDS.put(itemInfo.getNumber() , columnName);
+//				}
+//			}
+//		}
+//	}
 
 
 
@@ -105,71 +107,16 @@ public class TimepieceSchemeBillEditHandlerEx extends TimepieceSchemeBillEditHan
 		//拉取mes点检率数据
 		exeDataOnDay( request,billId,entry);
 		//先重置点检率标识
-		reductionInspectionRate( ctx, info);
+		SubmitShemeUtils.reductionInspectionRate( ctx, info);
 		//更新点检率数据
-		updateInspectionRate(request, ctx, info);
-
-
+		Set<String> checkbillIds = (Set<String> ) request.getAttribute("checkbillIds");
+		SubmitShemeUtils.updateInspectionRate(ctx, info,checkbillIds);
 	}
 
 
 
 
 
-	/**
-	 * 从中间表获取mes数据
-	 */
-	private HashMap<String,HashMap>  getMesData(HttpServletRequest request,Context ctx ,HashSet<String> selectPerson,DateRange dateRange) {
-		HashMap<String,HashMap> checkMap =  new HashMap();
-		Set<String>  checkbillIds = new HashSet();
-		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
-		try {
-			String sql = " select fid ,CFComrate, cfpersonId, cfpositiontype , cfskillLevel , cfonSite , cfteamApp , cfsalarysEq ,"
-					+ " cfbizDate  "
-					+ " from  CT_CAL_InspectionRate  where cfpersonid in "
-					+ "( "
-					+ ToolUtils.aryToStr(selectPerson,true)
-					+ " ) "
-					+ " and cfbizDate >= '"
-					+ dateFormat.format(dateRange.getMinDate())
-					+ "' and  cfbizDate <= '"
-					+ dateFormat.format(dateRange.getMaxDate())
-					+"'" ;
-
-			IRowSet rst =  DbUtil.executeQuery(ctx, sql);
-			while( rst.next() ) {
-				//点检率id存入
-				String checkbillId  = rst.getString("fid");
-				checkbillIds.add(checkbillId);
-				String pId = rst.getString("cfPersonId");
-				Date bizDate = rst.getDate("cfbizDate");
-				String eDate = SDF.format(bizDate);
-				String key = pId+"_"+eDate;
-				HashMap<String,String> valMap = new HashMap();
-				BigDecimal comrate = rst.getBigDecimal("CFComrate");
-				valMap.put(FEILDS.get(COMRATE), comrate.toString());
-				//
-				valMap.put(FEILDS.get(JOBTYPE), rst.getString("cfpositiontype"));
-				valMap.put(FEILDS.get(SKILLLEVEL), rst.getString("cfskillLevel"));
-				valMap.put(FEILDS.get(ONSITE), rst.getString("cfonSite"));
-				valMap.put(FEILDS.get(TEAMAPP), rst.getString("cfteamApp"));
-				valMap.put(FEILDS.get(SALARYSEQ), rst.getString("cfsalarysEq"));
-				checkMap.put(key, valMap);
-			}
-
-			request.setAttribute("checkbillIds", checkbillIds);
-		}catch(BOSException e){
-			e.printStackTrace();
-		} catch (SQLException e) {
-			e.printStackTrace();
-		}
-		return checkMap;
-
-	}
-
-
-
-
 	/**
 	 * 数据处理
 	 * 校验对应的某一天已存在数据/mes数据获取等
@@ -207,13 +154,13 @@ public class TimepieceSchemeBillEditHandlerEx extends TimepieceSchemeBillEditHan
 			return;
 		}
 		// 找出最大日期与最小日期
-		DateRange dateRange = findMinMaxDate(selectDate);
+		DateRange dateRange = SubmitShemeUtils.findMinMaxDate(selectDate);
 		//校验重复
 		verifiOneData(ctx, billId, selectPerson, dateRange, personDateMap);
 		//校验完后进行mes数据填充;
 		//获取mes数据
-		HashMap<String, HashMap> mesData = getMesData(request,ctx, selectPerson, dateRange);
-		setMesData( request, entrys, mesData);
+		HashMap<String, HashMap> mesData = SubmitShemeUtils.getMesData( ctx, selectPerson, dateRange);
+		SubmitShemeUtils.setMesData( request, entrys, mesData);
 	}
 
 
@@ -276,44 +223,7 @@ public class TimepieceSchemeBillEditHandlerEx extends TimepieceSchemeBillEditHan
 
 
 
-	/**
-	 * 设置点检率数据
-	 * @param request
-	 * @param entrys
-	 */
-	public void setMesData(HttpServletRequest request, BatchSubmitShemeBillEntryCollection entrys,
-						   HashMap<String, HashMap> mesData)  {
-		int assignedRows = 0; // 新增:统计实际赋值的行数
-
-		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;
-			}
-
-			boolean isRowAssigned = false; // 标记当前行是否被赋值
-			for (String field : FEILDS.keySet()) {
-				String sVal = FEILDS.get(field);
-				if (entry.containsKey(sVal)) {
-					entry.put(sVal, valMap.get(sVal));
-					isRowAssigned = true; // 当前行至少有一个字段被赋值
-				}
-			}
-
-			if (isRowAssigned) {
-				assignedRows++; // 只有实际赋值的行才计数
-			}
-		}
-
-		// 将统计结果存入 request
-		request.setAttribute("assignedRowsCount", assignedRows);
-	}
+	
 
 
 
@@ -356,7 +266,7 @@ public class TimepieceSchemeBillEditHandlerEx extends TimepieceSchemeBillEditHan
 		HashMap<String,String> dataMap = new HashMap();
 
 		// 找出最大日期与最小日期
-		DateRange dateRange = findMinMaxDate(selectData);
+		DateRange dateRange = SubmitShemeUtils.findMinMaxDate(selectData);
 		IBatchSubmitShemeBillEntry entryIns;
 		try {
 			entryIns = BatchSubmitShemeBillEntryFactory.getLocalInstance(ctx);
@@ -389,51 +299,9 @@ public class TimepieceSchemeBillEditHandlerEx extends TimepieceSchemeBillEditHan
 
 
 
-	private DateRange findMinMaxDate(HashSet<String> subDate) {
-		if (subDate == null || subDate.isEmpty()) {
-			return null;
-		}
 
-		List<Date> dates = new ArrayList<>();
-		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
-		for (String dateString : subDate) {
-			try {
-				dates.add(dateFormat.parse(dateString.trim()));
-			} catch (ParseException e) {
-				// 处理日期格式不正确的情况
-				e.printStackTrace();
-				return null; // 如果有日期格式不正确,直接返回 null
-			}
-		}
-		if (dates.isEmpty()) {
-			return null;
-		}
-
-		Date minDate = Collections.min(dates);
-		Date maxDate = Collections.max(dates);
-
-		return new DateRange(minDate, maxDate);
-	}
-
-	// 定义一个辅助类来存储日期范围
-	private static class DateRange {
-		private final Date minDate;
-		private final Date maxDate;
-
-		public DateRange(Date minDate, Date maxDate) {
-			this.minDate = minDate;
-			this.maxDate = maxDate;
-		}
-
-		public Date getMinDate() {
-			return minDate;
-		}
-
-		public Date getMaxDate() {
-			return maxDate;
-		}
-	}
 
+ 
 
 
 
@@ -450,39 +318,7 @@ public class TimepieceSchemeBillEditHandlerEx extends TimepieceSchemeBillEditHan
 
 
 
-	/**
-	 * 更新点检率
-	 * @param request
-	 * @param ctx
-	 * @param info
-	 */
-	private static void updateInspectionRate(HttpServletRequest request, Context ctx, BatchSubmitShemeBillInfo info) {
-		//更新点检率数据
-		Set<String> checkbillIds = (Set<String> ) request.getAttribute("checkbillIds");
-		FilterInfo filter = new FilterInfo();
-		filter.getFilterItems().add(new FilterItemInfo("id", checkbillIds, CompareType.INCLUDE));
-		EntityViewInfo viewInfo = new EntityViewInfo( ) ;
-		viewInfo.setFilter(filter);
-		SelectorItemCollection selector = viewInfo.getSelector();
-		selector.add(new SelectorItemInfo("detailNum"));
-		selector.add(new SelectorItemInfo("isSubDetail"));
-		try {
-			IInspectionRate spIns = InspectionRateFactory.getLocalInstance(ctx);
-			InspectionRateCollection inspectionRateCollection = spIns.getInspectionRateCollection(viewInfo);
-			CoreBaseCollection cCol = new CoreBaseCollection();
-			for(int i = 0;i<inspectionRateCollection.size();i++){
-				InspectionRateInfo inspectionRateInfo = inspectionRateCollection.get(i);
-				inspectionRateInfo.setDetailNum(info.getNumber());
-				inspectionRateInfo.setIsSubDetail(true);
-				cCol.add(inspectionRateInfo);
-			}
-			spIns.updateBatchData(cCol);
-		} catch (BOSException e) {
-			throw new RuntimeException(e);
-		} catch (EASBizException e) {
-			throw new RuntimeException(e);
-		}
-	}
+	 
 
 
 //	public void getDataOnDay(String billId,BatchSubmitShemeBillEntryCollection entrys) throws SHRWebException {
@@ -544,85 +380,49 @@ public class TimepieceSchemeBillEditHandlerEx extends TimepieceSchemeBillEditHan
 
 
 
-	/**
-	 * 重置点检率标识
-	 * 将点检率中是否提报标记还原为false;
-	 * @param ctx
-	 * @param info
-	 */
-	private static void reductionInspectionRate(Context ctx, BatchSubmitShemeBillInfo info) {
-		//更新点检率数据
-		String  subNum = info.getNumber();
-		if(StringUtils.isEmpty(subNum)){
-			return;
-		}
-		FilterInfo filter = new FilterInfo();
-		filter.getFilterItems().add(new FilterItemInfo("detailNum", subNum, CompareType.EQUALS));
-		EntityViewInfo viewInfo = new EntityViewInfo( ) ;
-		viewInfo.setFilter(filter);
-		SelectorItemCollection selector = viewInfo.getSelector();
-		selector.add(new SelectorItemInfo("detailNum"));
-		selector.add(new SelectorItemInfo("isSubDetail"));
-		try {
-			IInspectionRate spIns = InspectionRateFactory.getLocalInstance(ctx);
-			InspectionRateCollection inspectionRateCollection = spIns.getInspectionRateCollection(viewInfo);
-			CoreBaseCollection cCol = new CoreBaseCollection();
-			for(int i = 0;i<inspectionRateCollection.size();i++){
-				InspectionRateInfo inspectionRateInfo = inspectionRateCollection.get(i);
-				inspectionRateInfo.setDetailNum("");
-				inspectionRateInfo.setIsSubDetail(false);
-				cCol.add(inspectionRateInfo);
-			}
-			spIns.updateBatchData(cCol);
-		} catch (BOSException e) {
-			throw new RuntimeException(e);
-		} catch (EASBizException e) {
-			throw new RuntimeException(e);
-		}
-	}
-
+	
 
 
 
-	/**
-	 * 删除单据
-	 */
-	@Override
-	public String deleteAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws SHRWebException {
-		String returnStr = super.deleteAction(request, response, modelMap);
-		reductionAllInsRate(request);
-		return  returnStr ;
-	}
 
+//	/**
+//	 * 删除单据
+//	 */
+//	@Override
+//	public String deleteAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws SHRWebException {
+//		String returnStr = super.deleteAction(request, response, modelMap);
+//		reductionAllInsRate(request);
+//		return  returnStr ;
+//	}
 
-	/**
-	 * 重置所有点检率
-	 * @param request
-	 * @throws SHRWebException
-	 */
-	private void  reductionAllInsRate (HttpServletRequest request) throws SHRWebException {
-		String billId = getBillId(request);
-		String[] ids = billId.split(",");
-        //ids转为list集合
-        List<String> idList = Arrays.asList(ids);
-
-        Context ctx = SHRContext.getInstance().getContext();
-        FilterInfo filter = new FilterInfo();
-        filter.getFilterItems().add(new FilterItemInfo("id", ToolUtils.aryToStr(idList,false), CompareType.INCLUDE));
-		EntityViewInfo viewInfo = new EntityViewInfo( ) ;
-		viewInfo.setFilter(filter);
-		SelectorItemCollection selector = viewInfo.getSelector();
-		selector.add(new SelectorItemInfo("number"));
-		try {
-			IBatchSubmitShemeBill subIns = BatchSubmitShemeBillFactory.getLocalInstance(ctx);
-			BatchSubmitShemeBillCollection   subCol =  subIns.getBatchSubmitShemeBillCollection(viewInfo);
-			for(int i = 0;i<subCol.size();i++){
-				BatchSubmitShemeBillInfo subInfo = subCol.get(i);
-				reductionInspectionRate(ctx, subInfo);
-			}
-		} catch (BOSException e) {
-			throw new RuntimeException(e);
-		}
-	}
-}
 
+//	/**
+//	 * 重置所有点检率
+//	 * @param request
+//	 * @throws SHRWebException
+//	 */
+//	private void  reductionAllInsRate (HttpServletRequest request) throws SHRWebException {
+//		String billId = getBillId(request);
+//		String[] ids = billId.split(",");
+//        //ids转为list集合
+//        List<String> idList = Arrays.asList(ids);
+//
+//        Context ctx = SHRContext.getInstance().getContext();
+//        FilterInfo filter = new FilterInfo();
+//        filter.getFilterItems().add(new FilterItemInfo("id", ToolUtils.aryToStr(idList,false), CompareType.INCLUDE));
+//		EntityViewInfo viewInfo = new EntityViewInfo( ) ;
+//		viewInfo.setFilter(filter);
+//		SelectorItemCollection selector = viewInfo.getSelector();
+//		selector.add(new SelectorItemInfo("number"));
+//		try {
+//			IBatchSubmitShemeBill subIns = BatchSubmitShemeBillFactory.getLocalInstance(ctx);
+//			BatchSubmitShemeBillCollection   subCol =  subIns.getBatchSubmitShemeBillCollection(viewInfo);
+//			for(int i = 0;i<subCol.size();i++){
+//				BatchSubmitShemeBillInfo subInfo = subCol.get(i);
+//				SubmitShemeUtils.reductionInspectionRate(ctx, subInfo);
+//			}
+//		} catch (BOSException e) {
+//			throw new RuntimeException(e);
+//		}
+//	}
+}

+ 4 - 37
websrc/com/kingdee/shr/compensation/web/handler/timepiece/bill/TimepieceSchemeBillListHandlerEx.java

@@ -17,6 +17,8 @@ import com.kingdee.shr.compensation.app.integrate.BatchSubmitShemeBillCollection
 import com.kingdee.shr.compensation.app.integrate.BatchSubmitShemeBillFactory;
 import com.kingdee.shr.compensation.app.integrate.BatchSubmitShemeBillInfo;
 import com.kingdee.shr.compensation.app.integrate.IBatchSubmitShemeBill;
+import com.kingdee.shr.compensation.app.utils.SubmitShemeUtils;
+
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -73,7 +75,7 @@ public class TimepieceSchemeBillListHandlerEx extends TimepieceSchemeBillListHan
             BatchSubmitShemeBillCollection subCol =  subIns.getBatchSubmitShemeBillCollection(viewInfo);
             for(int i = 0;i<subCol.size();i++){
                 BatchSubmitShemeBillInfo subInfo = subCol.get(i);
-                reductionInspectionRate(ctx, subInfo);
+                SubmitShemeUtils.reductionInspectionRate(ctx, subInfo);
             }
         } catch (BOSException e) {
             throw new RuntimeException(e);
@@ -83,42 +85,7 @@ public class TimepieceSchemeBillListHandlerEx extends TimepieceSchemeBillListHan
 
 
 
-    /**
-     * 重置点检率标识
-     * 将点检率中是否提报标记还原为false;
-     * @param ctx
-     * @param info
-     */
-    private static void reductionInspectionRate(Context ctx, BatchSubmitShemeBillInfo info) {
-        //更新点检率数据
-        String  subNum = info.getNumber();
-        if(StringUtils.isEmpty(subNum)){
-            return;
-        }
-        FilterInfo filter = new FilterInfo();
-        filter.getFilterItems().add(new FilterItemInfo("detailNum", subNum, CompareType.EQUALS));
-        EntityViewInfo viewInfo = new EntityViewInfo( ) ;
-        viewInfo.setFilter(filter);
-        SelectorItemCollection selector = viewInfo.getSelector();
-        selector.add(new SelectorItemInfo("detailNum"));
-        selector.add(new SelectorItemInfo("isSubDetail"));
-        try {
-            IInspectionRate spIns = InspectionRateFactory.getLocalInstance(ctx);
-            InspectionRateCollection inspectionRateCollection = spIns.getInspectionRateCollection(viewInfo);
-            CoreBaseCollection cCol = new CoreBaseCollection();
-            for(int i = 0;i<inspectionRateCollection.size();i++){
-                InspectionRateInfo inspectionRateInfo = inspectionRateCollection.get(i);
-                inspectionRateInfo.setDetailNum("");
-                inspectionRateInfo.setIsSubDetail(false);
-                cCol.add(inspectionRateInfo);
-            }
-            spIns.updateBatchData(cCol);
-        } catch (BOSException e) {
-            throw new RuntimeException(e);
-        } catch (EASBizException e) {
-            throw new RuntimeException(e);
-        }
-    }
+