Browse Source

点检率更新

yuanzhi_kuang 1 week ago
parent
commit
a6ef098d60

+ 37 - 18
src/com/kingdee/eas/custom/calcdailypay/task/AutoSubDayDetailFacadeControllerBean.java

@@ -6,6 +6,7 @@ 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.*;
+import com.kingdee.shr.compensation.app.utils.SubConstants;
 import com.kingdee.shr.compensation.integrate.verify.CycleVerify;
 import com.kingdee.shr.compensation.integrate.verify.ISubmitBillVerifyInterface;
 import com.kingdee.shr.compensation.integrate.verify.SubmitBillDisableElementVerify;
@@ -15,6 +16,8 @@ import com.google.common.collect.Maps;
 import org.apache.log4j.Logger;
 import com.kingdee.bos.*;
 import com.kingdee.bos.dao.ormapping.ObjectUuidPK;
+
+import java.sql.SQLException;
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
 import java.util.Date;
@@ -24,6 +27,7 @@ import com.kingdee.eas.common.EASBizException;
 import com.kingdee.eas.framework.CoreBaseInfo;
 import com.kingdee.eas.hr.base.HRBillStateEnum;
 import com.kingdee.eas.util.app.DbUtil;
+import com.kingdee.jdbc.rowset.IRowSet;
 
 
 /**
@@ -63,13 +67,26 @@ public class AutoSubDayDetailFacadeControllerBean extends AbstractAutoSubDayDeta
 
         // 在日期范围内每天执行一次executeSubmit方法
         while (!startDate.isAfter(endDate)) {
-            executeSubmit(ctx, startDate);
+            try {
+				executeSubmit(ctx, startDate);
+			} catch (SQLException e) {
+				logger.error("日提报自动提交sql执行异常"+e);
+				e.printStackTrace();
+			}
             startDate = startDate.plusDays(1);
         }
     }
 
-    private void executeSubmit(Context ctx, LocalDate date) throws BOSException, EASBizException {
+    private void executeSubmit(Context ctx, LocalDate date) throws BOSException, EASBizException, SQLException {
         // 这里是executeSubmit的具体实现
+    	String field = "";
+		CalSubmitItemCollection subColl = CalSubmitItemFactory.getLocalInstance(ctx)
+				.getCalSubmitItemCollection("SELECT ID,FieldSn,number  where  number = '"+SubConstants.COMRATE+"'");
+		if(subColl.size()>0) {
+			CalSubmitItemInfo calSubmitItemInfo = subColl.get(0);
+			int fieldSn = calSubmitItemInfo.getFieldSn();
+			field = "S"+fieldSn ;
+		}
         // 假设你需要将日期格式化为特定格式
         DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
         String formattedDate = date.format(formatter);
@@ -88,25 +105,27 @@ public class AutoSubDayDetailFacadeControllerBean extends AbstractAutoSubDayDeta
         try {
         	BatchSubmitShemeBillCollection batchSubmitShemeBillCollection = billIns.getBatchSubmitShemeBillCollection(viewInfo);
         	if (!batchSubmitShemeBillCollection.isEmpty()) {
-				BatchSubmitShemeBillControllerBeanEx beanEx = new BatchSubmitShemeBillControllerBeanEx();
         		for (int i = 0; i < batchSubmitShemeBillCollection.size(); ++i) {
         			BatchSubmitShemeBillInfo model = batchSubmitShemeBillCollection.get(i);
-					beanEx._save(ctx,model);
-
-					EntityViewInfo viewInfo2 = new EntityViewInfo();
-					FilterInfo filter2 = new FilterInfo();
-					filter2.getFilterItems().add(new FilterItemInfo("id",  model.getId().toString() , CompareType.EQUALS  ));
-					filter2.getFilterItems().add(new FilterItemInfo("entry.s68",  null, CompareType.ISNOT));
-					filter2.getFilterItems().add(new FilterItemInfo("entry.s68",  0, CompareType.GREATER));
-					viewInfo2.setFilter(filter2);
-					logger.error("executeSubmit:filter2->"+filter2.toSql());
-					BatchSubmitShemeBillCollection batchSubmitShemeBillCollection2 = billIns.getBatchSubmitShemeBillCollection(viewInfo2);
-					logger.error("batchSubmitShemeBillCollection2->"+batchSubmitShemeBillCollection2.size());
-					if(!batchSubmitShemeBillCollection2.isEmpty() && batchSubmitShemeBillCollection2.size() > 0) {
-						model=batchSubmitShemeBillCollection2.get(0);
-						beforeSubmit(ctx, model);
-						billIns.submitEffect(model);
+//        			BatchSubmitShemeBillControllerBeanEx batchSubmitShemeBillControllerBeanEx = new BatchSubmitShemeBillControllerBeanEx();
+//        			batchSubmitShemeBillControllerBeanEx._save(ctx,model);
+        			billIns.save(new ObjectUuidPK(model.getId()),model);
+        			String checkSql = "SELECT "+field +"  FROM  T_HR_TimepieceBillEntry  WHERE  FBillID  = '"+model.getId().toString()+"'   ";
+        			IRowSet executeQuery = DbUtil.executeQuery(ctx, checkSql);
+					boolean isOk = true;
+        			while(executeQuery.next()) {
+        				String value = executeQuery.getString(field);
+						if(value == null ) {
+							logger.error("日提报单"+model.getNumber()+"的"+field+"字段值为空,无法提交");
+							isOk = false;
+							break;
+						}
+        			}
+					if(!isOk) {
+						continue;
 					}
+					beforeSubmit(ctx, model);
+					billIns.submitEffect(model);
         		}
         	}
         } catch (SHRWebException e) {

+ 34 - 14
src/com/kingdee/shr/compensation/app/integrate/BatchSubmitShemeBillControllerBeanEx.java

@@ -12,6 +12,9 @@ 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;
@@ -19,10 +22,11 @@ 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.codec.binary.StringUtils;
 import org.apache.commons.lang3.ObjectUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.log4j.Logger;
 
 
@@ -93,10 +97,10 @@ public class BatchSubmitShemeBillControllerBeanEx extends BatchSubmitShemeBillCo
 			if(null == calSubmitSchemeInfo) {
 				return;
 			}
-			String bNum = "boolean01";
-			String field = "S93";
+			 
+			String field = "1";
 			CalSubmitItemCollection subColl = CalSubmitItemFactory.getLocalInstance(ctx)
-					.getCalSubmitItemCollection("SELECT ID,FieldSn,number  where  number = '"+bNum+"'");
+					.getCalSubmitItemCollection("SELECT ID,FieldSn,number  where  number = '"+SubConstants.BOOLEANFIELD+"'");
 			if(subColl.size()>0) {
 				CalSubmitItemInfo calSubmitItemInfo = subColl.get(0);
 				int fieldSn = calSubmitItemInfo.getFieldSn();
@@ -152,17 +156,14 @@ public class BatchSubmitShemeBillControllerBeanEx extends BatchSubmitShemeBillCo
 				String eDate = SDF.format(effectDate);
 				String key = pId + "_" + eDate;
 				HashMap valMap = mesData.get(key);
+				
 				if (ObjectUtils.isEmpty(valMap)) {
 					continue;
 				}
-				String remarkStr = entry.getString(field);
-				//如果点检率手工修改了,则为锁定,则不更新点检率;
-				if(StringUtils.equals(remarkStr, "是")) {
-					continue;
-				}
+ 
 				//最后这个是id
 				Object[] paraObj = new Object[itemNums.length + 1];
-				setParamsVal(itemNums, checkbillIds, entry, valMap, paraObj); 
+				setParamsVal(itemNums, checkbillIds, entry, valMap, paraObj,field); 
 				paramList.add(paraObj);
 			}
 			logger.error("查询messql"+sql);
@@ -177,17 +178,36 @@ public class BatchSubmitShemeBillControllerBeanEx extends BatchSubmitShemeBillCo
 	}
 
 
-	//参数赋值;
+
+	/**
+	 * 设置参数值参数赋值;
+	 * @param itemNums
+	 * @param checkbillIds
+	 * @param entry
+	 * @param valMap
+	 * @param paraObj
+	 * @param field  标识字段; 是否需要更新
+	 */
 	private static void setParamsVal(String[] itemNums, Set<String> checkbillIds, BatchSubmitShemeBillEntryInfo entry,
-			HashMap valMap, Object[] paraObj) {
+			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];
-			valMap.get(keyF);
-			paraObj[j] = valMap.get(FEILDS.get(keyF));
+			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));

+ 25 - 5
src/com/kingdee/shr/compensation/app/utils/SubmitShemeUtils.java

@@ -172,9 +172,20 @@ public class SubmitShemeUtils {
 	 * 设置点检率数据
 	 * @param request
 	 * @param entrys
+     * @throws BOSException 
 	 */
-	public static void setMesData(HttpServletRequest request, BatchSubmitShemeBillEntryCollection entrys,
-						   HashMap<String, HashMap> mesData)  {
+	public static void setMesData(Context ctx ,HttpServletRequest request, BatchSubmitShemeBillEntryCollection entrys,
+						   HashMap<String, HashMap> mesData) throws BOSException  {
+		String boolField = "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();
+			boolField = "S"+fieldSn ;
+		}
+		
+		
 		int assignedRows = 0; // 新增:统计实际赋值的行数
 		Set<String>  checkbillIds = new HashSet();
 		for (int i = 0; i < entrys.size(); i++) {
@@ -188,13 +199,22 @@ public class SubmitShemeUtils {
 			if (ObjectUtils.isEmpty(valMap)) {
 				continue;
 			}
-
+			String booleanStr = "";
+			if(!StringUtils.isEmpty(boolField)) {
+				booleanStr = Optional.ofNullable( entry.getString(boolField)).orElse("") ;
+			}
 			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(booleanStr.contains(sVal)) {
+						entry.put(sVal, entry.get(sVal));
+					}else {
+						//变更
+						entry.put(sVal, valMap.get(sVal));
+						isRowAssigned = true; // 当前行至少有一个字段被赋值
+					}
 				}
 			}