yuanzhi_kuang před 1 týdnem
rodič
revize
3552efef0c

+ 64 - 25
GDYSL/websrc/com/kingdee/shr/customer/gtiit/rpt/AllSalaryListHandler.java

@@ -9,6 +9,7 @@ import java.text.SimpleDateFormat;
 import java.time.LocalDate;
 import java.time.Month;
 import java.time.YearMonth;
+import java.time.format.DateTimeFormatter;
 import java.time.format.TextStyle;
 import java.util.ArrayList;
 import java.util.Date;
@@ -17,17 +18,14 @@ import java.util.List;
 import java.util.Locale;
 import java.util.Map;
 import com.kingdee.bos.metadata.query.util.CompareType;
-
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-
 import com.kingdee.shr.customer.gtiit.util.DateTimeUtils;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.json.JSONArray;
 import org.json.JSONException;
 import org.json.JSONObject;
-
 import com.cloudera.impala.jdbc4.internal.apache.log4j.Logger;
 import com.kingdee.bos.BOSException;
 import com.kingdee.bos.Context;
@@ -54,12 +52,15 @@ import com.kingdee.shr.base.syssetting.web.handler.ListHandler;
 import com.kingdee.shr.customer.gtiit.entity.PayAddInfo;
 import com.kingdee.util.LocaleUtils;
 
+
+
+
 /**
  * @author ISSUSER 可以查看所有的工资单
  */
 public class AllSalaryListHandler extends ListHandler {
 	Context ctx = SHRContext.getInstance().getContext();
-	private static Logger logger = Logger.getLogger("com.kingdee.shr.customer.gtiit.rpt.AllSalaryListHandler");
+	private static Logger logger = Logger.getLogger(AllSalaryListHandler.class);
 	// map存储薪酬编码 key工资单薪酬项目存储实体类
 	private static Map<String, PayAddInfo> payMap = new HashMap<>();
 	// mapkey是薪酬项目编码 value是薪酬项目序号
@@ -67,7 +68,7 @@ public class AllSalaryListHandler extends ListHandler {
 	// 存储薪酬核算表的最后修改时间和 动态添加薪酬项目字段的数量
 	private static Map<String, List<String>> countFiledMap = new HashMap<>();
 	SimpleDateFormat tosdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-
+	private String  currentYear = "";
 	@Override
 	protected EntityViewInfo getDefaultEntityViewInfo(HttpServletRequest request, HttpServletResponse response)
 			throws SHRWebException {
@@ -79,6 +80,8 @@ public class AllSalaryListHandler extends ListHandler {
 		String personid = pid.toString();
 		// 获取当前日期
 		Date nowdate = new Date();
+		//获取年份
+		setYearParam();
 		try {
 			// 先查询薪酬表和套打单据里面的数据看是否一样 一样就不需要删除,不一样就要删除重新添加
 			// 查询薪酬项目
@@ -99,7 +102,7 @@ public class AllSalaryListHandler extends ListHandler {
 			if (!isEqual) {
 				System.out.println("进来了判断两个list里面的元素是否一样");
 				// 先删除套打表里有的数据
-				DbUtil.execute(this.ctx, this.deleteSql(personid));
+				deleteSql(null);
 				// 获取动态添加薪酬项目单据新增数据
 				getPaydata();
 				getSaveData(rs, currentUserInfo, nowdate);
@@ -109,7 +112,7 @@ public class AllSalaryListHandler extends ListHandler {
 			else if (!filedList.contains(countFiled)) {
 				System.out.println("判断薪酬项目的数量的值是否在list里面");
 				// 先删除套打表里有的数据
-				DbUtil.execute(this.ctx, this.deleteSql(personid));
+				deleteSql(null);
 				// 获取动态添加薪酬项目单据新增数据
 				getPaydata();
 				getSaveData(rs, currentUserInfo, nowdate);
@@ -117,14 +120,14 @@ public class AllSalaryListHandler extends ListHandler {
 			}else if(checkDayisUp()){
 				System.out.println("改变了参数,重新触发工资包更新");
 				// 先删除套打表里有的数据
-				DbUtil.execute(this.ctx, this.deleteSql(personid));
+				deleteSql(null);
 				// 获取动态添加薪酬项目单据新增数据
 				getPaydata();
 				getSaveData(rs, currentUserInfo, nowdate);
 				updateFiled(countFiled);
+				upDayDataDate();
 			}
 		} catch (BOSException e) {
-			// TODO 自动生成的 catch 块
 			e.printStackTrace();
 		}
 		EntityViewInfo defaultViewInfo = new EntityViewInfo();
@@ -222,8 +225,8 @@ public class AllSalaryListHandler extends ListHandler {
 	 */
 	public List<String> getUpdateTime(IRowSet rs,Date nowdate) {
 		List<String> updateTimeList = new ArrayList<>();
-		try {
-			while (rs.next()) {
+	    try {
+	        if (rs.next()) {
 				String formatDate = tosdf.format(nowdate);
 				String flastupdatetime =  rs.getString("flastupdatetime");
 				// 如果为空默认当天
@@ -248,7 +251,7 @@ public class AllSalaryListHandler extends ListHandler {
 	public void getPrinting() {
 		List<String> lastTimeList = new ArrayList<>();
 		List<String> filedList = new ArrayList<>();
-		String sql = "SELECT * FROM CT_SAL_WagesChromatography";
+		String sql = "SELECT  top 1 * FROM CT_SAL_WagesChromatography order by flastupdatetime desc";
 		IRowSet rs = null;
 		try {
 			rs = DbUtil.executeQuery(this.ctx, sql);
@@ -561,12 +564,17 @@ public class AllSalaryListHandler extends ListHandler {
 				" FROM t_bd_person a right join T_HR_SCMPCALTABLE b on a.fid=b.fpersonid  left join  T_HR_SCalScheme c on  b.FCalSchemeID=c.fid left join T_HR_TaxUnit d on c.FTaxUnitID =d.fid\r\n"
 						+ "left join T_BD_Nationality e on a.FNationalityID=e.fid  left join T_ORG_BaseUnit g on b.FAdminOrgUnitID=g.fid\r\n");
 		sql.append(" where 1=1 ");
-		sql.append(" and b.FCalState in('12','20')");
+		sql.append(" and b.FCalState in('12','20')   ");
 		//// sql.append(" and b.fpersonid=" + "'" + peronid + "'");
 
 		// coyle 20250430改
-		String dateFormat = DateTimeUtils.dateFormat(new Date(), "YYYY");
-		sql.append(" and b.fperiodyear = '" + dateFormat + "'");
+		String previousYear = LocalDate.now().minusYears(1).format(DateTimeFormatter.ofPattern("yyyy"));
+		//取今年与去年12月的数据就可以了
+		sql.append(" and ((b.fperiodyear = '" + previousYear + "' and b.fperiodmonth = '12') or ");
+		sql.append("(b.fperiodyear = '" + currentYear + "')) ");
+
+		//order  by
+		sql.append("  order by flastupdatetime desc   ");
 		System.out.print("所有薪酬查询语句是" + sql.toString());
 		logger.error("所有薪酬查询语句是" + sql.toString());
 		return sql.toString();
@@ -574,16 +582,18 @@ public class AllSalaryListHandler extends ListHandler {
 	}
 
 	// 删除套打里面的有的数据sql
-	public String deleteSql(String personid) {
-		StringBuffer sql = new StringBuffer();
-		String dateFormat = DateTimeUtils.dateFormat(new Date(), "YYYY");
-		sql.append(" and b.fperiodyear = '" + dateFormat + "'");
-		sql.append("DELETE FROM CT_SAL_WagesChromatography where  cfstatisticalyear = '" + dateFormat + "'");
-		System.out.print("薪酬套打的删除语句是" + sql.toString());
-		return sql.toString();
-
+	public void deleteSql(String personid) throws BOSException {
+		// 获取当前年份
+		String previousYear = LocalDate.now().minusYears(1).format(DateTimeFormatter.ofPattern("yyyy"));
+		// 准备SQL语句
+		String sql = "DELETE FROM CT_SAL_WagesChromatography WHERE cfstatisticalyear = ? OR (cfstatisticalmonth = '12' AND cfstatisticalyear = ?)";
+		// 打印SQL语句
+		logger.error("薪酬套打的删除语句是 " + sql);
+		// 执行SQL语句
+		DbUtil.execute(this.ctx, sql, new Object[]{currentYear, previousYear});
 	}
 
+
 	// 通过编码查询薪酬字段序号的方法
 	public Map<String, String> getFieldsn() {
 		Map<String, String> filedMap = new HashMap<>();
@@ -1952,13 +1962,42 @@ public class AllSalaryListHandler extends ListHandler {
 	public void upDayDataDate() {
 		//该最后修改时间为昨天的; 这个时间上面用做了判断条件,为了使其不再更新工资包的数;
 		Date update = com.kingdee.util.DateTimeUtils.addDay(new Date(), -1) ;
-		String updateSql = "UPDATE T_HR_SHRRsvItem0 SET flastupdatetime = "+update+" where fnumber = '1006' ";
+		String formatDate = tosdf.format(update);
+		String updateSql = "UPDATE T_HR_SHRRsvItem0 SET flastupdatetime = ? where fnumber = '1006' ";
 		System.out.print("修改薪酬基础数据/薪酬预留基础数据0下面编码为1006的的数据的修改语句"+updateSql);
 		try {
-			DbUtil.execute(ctx, updateSql);
+			DbUtil.execute(ctx, updateSql,new Object[] {formatDate});
 		} catch (BOSException e) {
 			e.printStackTrace();
 		}
 	}
 
+
+
+	/***
+	 * 只应对导入历史数据的特殊场景
+	 * 查询homepage 薪酬基础数据/薪酬预留基础数据0下面的数据
+	 * 编码为1008的; 工资条生成哪一年的数据;如需要重新生成2021年,则填入2021年; 如果是0;则表示为今年的数据; 默认为"0";需导入历史数据时,更新此参数; 请勿填入其他特殊参数;
+	 * coyle20250516
+	 * @return
+	 */
+	public  void   setYearParam() {
+		// 获取当前年份
+		currentYear = DateTimeUtils.dateFormat(new Date(), "YYYY");
+		String sql = "select fname_l2 from T_HR_SHRRsvItem0 where fnumber = '1008'  " ;
+		try {
+			IRowSet rs = DbUtil.executeQuery(this.ctx, sql);
+			while (rs.next()) {
+				String yearStr = rs.getString("fname_l2");
+				//如果为0或者不为数字,则不处理
+				if(StringUtils.isNotBlank(yearStr) && !StringUtils.equals("0",yearStr) && StringUtils.isNumeric(yearStr)) {
+					currentYear = yearStr;
+				}
+			}
+			logger.error("当前年份为:"+currentYear);
+		} catch (SQLException | BOSException e) {
+			e.printStackTrace();
+		}
+	}
+
 }

+ 24 - 22
GDYSL/websrc/com/kingdee/shr/customer/gtiit/rpt/ChromatographyListHandler.java

@@ -12,6 +12,7 @@ import java.text.SimpleDateFormat;
 import java.time.LocalDate;
 import java.time.Month;
 import java.time.YearMonth;
+import java.time.ZoneId;
 import java.time.format.TextStyle;
 import java.util.ArrayList;
 import java.util.Calendar;
@@ -57,12 +58,11 @@ import com.kingdee.shr.customer.gtiit.entity.PayAddInfo;
 import com.kingdee.shr.customer.gtiit.util.DateTimeUtils;
 import com.kingdee.util.LocaleUtils;
 
-import bsh.StringUtil;
 
 /**
  * @author ISSUSER 兼职全职工资单套打zsys
  */
-public class ChromatographyListHandler extends ListHandler {
+	public class ChromatographyListHandler extends ListHandler {
 	Context ctx = SHRContext.getInstance().getContext();
 	private static Logger logger = Logger.getLogger("com.kingdee.shr.customer.gtiit.rpt.ChromatographyListHandler");
 	// map存储薪酬编码 key工资单薪酬项目存储实体类
@@ -146,11 +146,8 @@ public class ChromatographyListHandler extends ListHandler {
 			}
 
 			FilterInfo filterInfo = new FilterInfo();
-
 			try {
-
 				filterInfo.mergeFilter(fastFilter, "AND");
-
 			} catch (BOSException var14) {
 				throw new SHRWebException(var14.getMessage(), var14);
 			}
@@ -159,22 +156,28 @@ public class ChromatographyListHandler extends ListHandler {
           // 获取调整后的日期statisticalmonth
 			Date adjustedDate = getAdjustedDate();
 			boolean maintenanceDate = maintenanceDate(adjustedDate);
-			 String dateFormat = DateTimeUtils.dateFormat(adjustedDate, "M");
+			System.out.println("maintenanceDate" + maintenanceDate);
 			// 添加新的过滤条件
 			filterInfo.getFilterItems().add(new FilterItemInfo("peronid", personid, CompareType.EQUALS));
 			filterInfo.getFilterItems().add(new FilterItemInfo("accountingstatus", "12,20", CompareType.INNER));
 			 // 过滤计算规则编码gt003
 			filterInfo.getFilterItems().add(new FilterItemInfo("calculationNumber", "GT003", CompareType.NOTEQUALS));
 			if(maintenanceDate) {
-				filterInfo.getFilterItems().add(new FilterItemInfo("statisticalmonth", dateFormat, CompareType.NOTEQUALS));
-
+//				filterInfo.getFilterItems().add(new FilterItemInfo("statisticalmonth", mFormat, CompareType.NOTEQUALS));
+				//获取这个月的第一天的日期
+				Calendar calendar = Calendar.getInstance();
+				calendar.set(Calendar.DAY_OF_MONTH, 1);
+				Date firstDayOfMonth = calendar.getTime();
+				String dateFormat = DateTimeUtils.dateFormat(firstDayOfMonth, "yyyy-MM-dd");
+				filterInfo.getFilterItems().add(new FilterItemInfo("starttime", dateFormat, CompareType.LESS));
 			}
 			defaultViewInfo.setFilter(filterInfo);
 
-			if (logger.isDebugEnabled()) {
+//			if (logger.isDebugEnabled()) {
 				String msg = defaultViewInfo != null ? defaultViewInfo.toString() : "";
 				logger.debug("defaultViewInfo:" + msg);
-			}
+				System.out.println("defaultViewInfo:" + msg);
+//			}
 			return defaultViewInfo;
 		}
 	}
@@ -1873,21 +1876,20 @@ public class ChromatographyListHandler extends ListHandler {
 	/***
 	 * 根据维护的基础数据 判断是否可以查看当天之后的工资单 
 	 */
-
 	public boolean maintenanceDate(Date adjustedDate) {
-		boolean comparisonDate = false;
-		if(adjustedDate!=null) {
-			int comparisonResult = nowDate.compareTo(adjustedDate);
-			if(comparisonResult<0) {
-				comparisonDate =true;
-			}
+		if (adjustedDate == null) {
+			return false;
 		}
-		
-		
-		
-		return comparisonDate;
+		LocalDate nowLocalDate = LocalDate.now();
+		LocalDate adjustedLocalDate = adjustedDate.toInstant()
+				.atZone(ZoneId.systemDefault())
+				.toLocalDate();
+		return nowLocalDate.isBefore(adjustedLocalDate);  // 仅当 now < adjusted 时返回 true
 	}
-	
+
+
+
+
 	/***
 	 * 获取当月通过公共参数计算调整后的日期
 	 */

+ 41 - 21
GDYSL/websrc/com/kingdee/shr/customer/gtiit/rpt/DeclarationListHandler.java

@@ -1,6 +1,3 @@
-/**
- *
- */
 package com.kingdee.shr.customer.gtiit.rpt;
 
 import java.io.IOException;
@@ -8,26 +5,20 @@ import java.io.OutputStream;
 import java.io.UnsupportedEncodingException;
 import java.math.BigDecimal;
 import java.net.URLEncoder;
-import java.sql.Date;
 import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.HashMap;
-import java.util.HashSet;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 import java.util.stream.Collectors;
-
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-
 import org.apache.commons.lang3.StringUtils;
 import org.apache.poi.ss.usermodel.CellStyle;
 import org.apache.poi.ss.usermodel.DataFormat;
 import org.apache.poi.ss.usermodel.IndexedColors;
 import org.apache.poi.xssf.usermodel.XSSFCell;
-import org.apache.poi.xssf.usermodel.XSSFCellStyle;
 import org.apache.poi.xssf.usermodel.XSSFFont;
 import org.apache.poi.xssf.usermodel.XSSFRow;
 import org.apache.poi.xssf.usermodel.XSSFSheet;
@@ -45,14 +36,13 @@ import com.kingdee.shr.base.syssetting.context.SHRContext;
 import com.kingdee.shr.base.syssetting.exception.SHRWebException;
 import com.kingdee.shr.base.syssetting.web.handler.ListHandler;
 import com.kingdee.shr.base.syssetting.web.json.JSONUtils;
-import com.kingdee.shr.customer.gtiit.util.ExportAllUtils;
 
 /**
  * @author ISSUSER 兼职员工工时提报汇总表
  */
 public class DeclarationListHandler extends ListHandler {
 	Context ctx = SHRContext.getInstance().getContext();
-	private static Logger logger1 = Logger.getLogger("com.kingdee.shr.customer.gtiit.rpt.DeclarationListHandler");
+	private static Logger logger1 = Logger.getLogger(DeclarationListHandler.class);
 	private int totalCount;
 
 	public String getGridColModelAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap)
@@ -67,7 +57,7 @@ public class DeclarationListHandler extends ListHandler {
 	}
 
 	public void getGridDataAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap)
-            throws BOSException, SQLException, SHRWebException, JSONException {
+			throws BOSException, SQLException, SHRWebException, JSONException {
 		int rows = Integer.parseInt(request.getParameter("rows"));
 		int page = Integer.parseInt(request.getParameter("page"));
 		// 获取过滤条件
@@ -166,9 +156,27 @@ public class DeclarationListHandler extends ListHandler {
 	}
 
 	public String getSql(String starTime, String endTime, String status) {
+		//20250430  coyle 改
+		String language = ctx.getLocale().getLanguage();
 		StringBuffer sql = new StringBuffer();
-		sql.append("SELECT distinct d.FName_L1 as person,d.FNumber,e.FName_L1 as positionName,c.CFSuperiorName,c.CFHourlyWage ,a.CFTotalWorkHours,a.CFTotalAmount FROM T_HR_SBatchSubmitShemeBill a  right join T_HR_SchemeBillEntry c on a.fid=c.FBillID left join t_bd_person d on c.FPersonID=d.fid left join T_ORG_Position e on c.FPositionID= e.fid where 1 =1  and a.fsubmitschemeid in(SELECT fid FROM T_HR_SCalSubmitScheme where fnumber in ('eply_GS','eply_LZGS'))\r\n" +
-				"");
+		sql.append(" "
+				+ " SELECT   "
+				+ " d.FName_"+language+" as person,"
+				+ " d.FNumber , "
+				+ " e.FName_"+language+" as positionName,"
+				+ " supman.fname_"+language+"  as CFSuperiorName ,"
+				+ " c.CFHourlyWage ,"
+				+ "  SUM(c.CFTotalWorkHours) AS CFTotalWorkHours,   " 
+				+ "  SUM(c.CFTotalAmount) AS CFTotalAmount         "
+				
+				+ " FROM T_HR_SBatchSubmitShemeBill a  "
+				+ " right join T_HR_SchemeBillEntry c on a.fid=c.FBillID "
+				+ " left join t_bd_person d on c.FPersonID=d.fid "
+				+ " left join t_bd_person supman on c.cfsuperiorid = supman.fid    "
+				+ " left join T_ORG_Position e on c.FPositionID = e.fid "
+				+ " where 1 = 1  "  
+				+ " and  a.fsubmitschemeid "
+				+ " in ( SELECT fid FROM T_HR_SCalSubmitScheme where fnumber in ('eply_GS','eply_LZGS') )  ");
 
 		// 可能传多个状态过来
 		String[] statusArry = new String[0];
@@ -180,7 +188,7 @@ public class DeclarationListHandler extends ListHandler {
 				sql.append(statu);
 				sql.append("'");
 				sql.append(",");
-			}
+			} 
 			// 删除最后一个逗号
 			sql.deleteCharAt(sql.length() - 1);
 			sql.append(")");
@@ -203,6 +211,18 @@ public class DeclarationListHandler extends ListHandler {
 			sql.append("'");
 
 		}
+		//-- 按人员编号分组\r\n
+//		-- 按职位名称分组\r\n
+//		-- 按上级名称分组\r\n
+//		-- 按时薪分组(如果时薪不同需独立分组)
+		
+		sql.append(" GROUP BY " + 
+				"	d.FName_"+language+", " + 
+				"	d.FNumber,  " + 
+				"	e.FName_"+language+", " + 
+				"	supman.FName_"+language+" , "+ 
+				"	c.CFHourlyWage  ");
+		logger1.error("兼职工时提报汇总sql:"+sql.toString());
 		return sql.toString();
 	}
 
@@ -211,7 +231,7 @@ public class DeclarationListHandler extends ListHandler {
 	// 导出
 	// 导出数据
 	public String toExcelAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap)
-            throws BOSException, SQLException, SHRWebException, JSONException {
+			throws BOSException, SQLException, SHRWebException {
 		// 获取过滤条件
 		String fastFilterItems = request.getParameter("fastFilterItems");
 		JSONObject tofastFilterItems = new JSONObject(fastFilterItems);
@@ -251,10 +271,10 @@ public class DeclarationListHandler extends ListHandler {
 		exportData(response, rs, "StaffTimekeepingList.xlsx", selectFieldsTypeMap, list,fieldlist);
 		return null;
 	}
-
-
+	
+	
 	/**
-	 *
+	 * 
 	 * @param response
 	 *            response
 	 * @param resource
@@ -307,8 +327,8 @@ public class DeclarationListHandler extends ListHandler {
 						XSSFCell cell = titleRow.createCell(j);
 						//cell.setCellValue(keyList.get(j));
 						//cell.setCellValue(chineseList.get(j));
-						cell.setCellValue(list.get(j));
-
+						cell.setCellValue(list.get(j));	
+						
 						cell.setCellValue(list.get(j));
 						// 调整列宽
 						sheet.setColumnWidth(j, 6000);