|
|
@@ -0,0 +1,295 @@
|
|
|
+package com.kingdee.shr.custom.ats.web.handler;
|
|
|
+
|
|
|
+import com.kingdee.bos.BOSException;
|
|
|
+import com.kingdee.bos.Context;
|
|
|
+import com.kingdee.bos.dao.query.server.PagingHelper;
|
|
|
+import com.kingdee.bos.db.TempTablePool;
|
|
|
+import com.kingdee.eas.hr.ats.AtsUtil;
|
|
|
+import com.kingdee.eas.hr.ats.util.AtsBaseUtils;
|
|
|
+import com.kingdee.eas.hr.ats.util.AtsDateUtils;
|
|
|
+import com.kingdee.eas.hr.ats.util.common.AtsCommonUtile;
|
|
|
+import com.kingdee.eas.hr.ats.util.common.MLUtile;
|
|
|
+import com.kingdee.eas.util.app.DbUtil;
|
|
|
+import com.kingdee.jdbc.rowset.IRowSet;
|
|
|
+import com.kingdee.shr.ats.web.handler.ScheduleShiftListHandler;
|
|
|
+import com.kingdee.shr.ats.web.util.WorkCalendarItemHelper;
|
|
|
+import com.kingdee.shr.base.syssetting.context.SHRContext;
|
|
|
+import com.kingdee.shr.base.syssetting.exception.SHRWebException;
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
+import org.apache.log4j.Logger;
|
|
|
+import org.springframework.ui.ModelMap;
|
|
|
+
|
|
|
+import javax.servlet.http.HttpServletRequest;
|
|
|
+import javax.servlet.http.HttpServletResponse;
|
|
|
+import java.sql.SQLException;
|
|
|
+import java.text.MessageFormat;
|
|
|
+import java.text.ParseException;
|
|
|
+import java.util.*;
|
|
|
+
|
|
|
+/**
|
|
|
+ * @author ÇàÎà
|
|
|
+ * @version 1.0
|
|
|
+ * @description: TODO
|
|
|
+ * @date 2025/7/31 9:59
|
|
|
+ */
|
|
|
+public class ScheduleShiftListHandlerEx extends ScheduleShiftListHandler {
|
|
|
+ private Context ctx = SHRContext.getInstance().getContext();
|
|
|
+ private int totalCount = 0;
|
|
|
+ private static Logger logger = Logger.getLogger(ScheduleShiftListHandlerEx.class);
|
|
|
+
|
|
|
+ public ScheduleShiftListHandlerEx() {
|
|
|
+ logger.error("ScheduleShiftListHandlerEx--init--");
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void getPersonShiftAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws BOSException, SHRWebException, SQLException, ParseException {
|
|
|
+ logger.error("getPersonShiftAction--statrt--");
|
|
|
+ super.getPersonShiftAction(request, response, modelMap);
|
|
|
+ logger.error("getPersonShiftAction--end--");
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Map<String, Object> getPersonShiftListMap(HttpServletRequest request, Map paramsMap, int rows, int page, Object[] params, String flag) throws BOSException, SQLException, SHRWebException {
|
|
|
+ logger.error("getPersonShiftListMap--statrt--");
|
|
|
+ Map<Integer, String> dateTypeMap = (new WorkCalendarItemHelper()).getDateType();
|
|
|
+ Set<String> timeSets = new HashSet();
|
|
|
+ String sql = this.getPersonScheduleShiftListSql(request, paramsMap, rows, page, flag, params);
|
|
|
+ IRowSet rowSet = null;
|
|
|
+ rowSet = DbUtil.executeQuery(this.ctx, sql, params);
|
|
|
+ Map<String, Object> listMap = new LinkedHashMap();
|
|
|
+ List<Map> list;
|
|
|
+ Map<String, Object> objectMap;
|
|
|
+ if (rowSet != null) {
|
|
|
+ for (; rowSet.next(); list.add(objectMap)) {
|
|
|
+ String key = rowSet.getString("personNum") + "@_@" + rowSet.getString("ADMINORGUNIT_ID") + "@_@" + rowSet.getString("ATTADMINORGUNIT_ID") + "@_@" + rowSet.getString("hrOrgUnit_id");
|
|
|
+ list = (List) listMap.get(key);
|
|
|
+ objectMap = new HashMap();
|
|
|
+ if (list == null) {
|
|
|
+ list = new ArrayList();
|
|
|
+ objectMap.put("key", key);
|
|
|
+ objectMap.put("personNum", rowSet.getString("personNum"));
|
|
|
+ objectMap.put("personName", rowSet.getString("personName"));
|
|
|
+ objectMap.put("adminOrgUnit_displayName", rowSet.getString("adminOrgUnit_displayName"));
|
|
|
+ objectMap.put("adminOrgName", rowSet.getString("hrOrgUnit_name"));
|
|
|
+ objectMap.put("attAdminOrgUnit_displayName", rowSet.getString("attAdminOrgUnit_displayName"));
|
|
|
+ objectMap.put("hrOrgUnit_displayName", rowSet.getString("hrOrgUnit_displayName"));
|
|
|
+ objectMap.put("hrOrgUnit_name", rowSet.getString("hrOrgUnit_name"));
|
|
|
+ objectMap.put("hrOrgName", rowSet.getString("hrOrgUnit_name"));
|
|
|
+ objectMap.put("hrOrgUnit_id", rowSet.getString("hrOrgUnit_id"));
|
|
|
+ objectMap.put("hrOrgUnitId", rowSet.getString("hrOrgUnit_id"));
|
|
|
+ listMap.put(key, list);
|
|
|
+ }
|
|
|
+
|
|
|
+ objectMap.put("dayType", rowSet.getInt("dateType"));
|
|
|
+ objectMap.put("shiftName", rowSet.getString("shiftName"));
|
|
|
+ objectMap.put("attendDate", AtsCommonUtile.getDateFormat().format(rowSet.getDate("attendDate")));
|
|
|
+ objectMap.put("matchDayType", rowSet.getInt("matchDayType"));
|
|
|
+ objectMap.put("matchShiftId", rowSet.getString("matchShiftId"));
|
|
|
+ objectMap.put("matchShiftName", rowSet.getString("matchShiftName"));
|
|
|
+ if (StringUtils.isEmpty(rowSet.getString("dateType"))) {
|
|
|
+ objectMap.put("dayType", objectMap.get("matchDayType"));
|
|
|
+ objectMap.put("shiftName", objectMap.get("matchShiftName"));
|
|
|
+ }
|
|
|
+
|
|
|
+ String attendDate = AtsDateUtils.dateShortToString(rowSet.getDate("attendDate"));
|
|
|
+ timeSets.remove(attendDate);
|
|
|
+ if (!StringUtils.isEmpty((CharSequence) dateTypeMap.get(rowSet.getInt("dateType")))) {
|
|
|
+ if (StringUtils.isEmpty(rowSet.getString("shiftName"))) {
|
|
|
+ objectMap.put(attendDate, "[" + (String) dateTypeMap.get(rowSet.getInt("dateType")) + "]");
|
|
|
+ } else {
|
|
|
+ objectMap.put(attendDate, "[" + (String) dateTypeMap.get(rowSet.getInt("dateType")) + "]" + rowSet.getString("shiftName"));
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ objectMap.put(attendDate, "");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ logger.error("getPersonShiftListMap--end--");
|
|
|
+ return listMap;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ public String getPersonScheduleShiftListSql(HttpServletRequest request, Map paramsMap, int rs, int pg, String flag, Object[] params) throws SHRWebException, BOSException {
|
|
|
+ logger.error("getPersonScheduleShiftListSql--statrt--");
|
|
|
+ String pageSql = this.getPersonScheduleShiftPageSql(request, paramsMap, rs, pg, flag, params);
|
|
|
+ StringBuffer sql = new StringBuffer();
|
|
|
+ sql.append(" /*dialect*/ SELECT ").append(" person.FID, ").append(" person.PERSONNUM PERSONNUM, ").append(" person.PERSONNAME PERSONNAME, ").append(" person.personIndex PERSONINDEX, ").append(" hrOrgUnit.fdisplayName" + MLUtile.getMlFlag(this.ctx) + " HRORGUNIT_DISPLAYNAME, ").append(" hrOrgUnit.fname" + MLUtile.getMlFlag(this.ctx) + " HRORGUNIT_NAME, ").append(" hrOrgUnit.fid HRORGUNIT_ID, ").append(" adminOrgUnit.fdisplayName" + MLUtile.getMlFlag(this.ctx) + " ADMINORGUNIT_DISPLAYNAME, ").append(" attAdminOrgUnit.fdisplayName" + MLUtile.getMlFlag(this.ctx) + " ATTADMINORGUNIT_DISPLAYNAME, ").append(" scheduleShift.fattenddate ATTENDDATE, ").append(" scheduleShift.fileAdminOrgUnitId ADMINORGUNIT_ID, ").append(" scheduleShift.fAdminOrgUnitId ATTADMINORGUNIT_ID, ").append(" shift.fname" + MLUtile.getMlFlag(this.ctx) + " SHIFTNAME, ").append(" scheduleShift.fdaytype DATETYPE, ").append(" scheduleShift.fmatchDayType matchDayType, ").append(" scheduleShift.fmatchShift matchShiftId, ").append(" matchShift.fname" + MLUtile.getMlFlag(this.ctx) + " matchShiftName ").append(" FROM ( ");
|
|
|
+ sql.append(pageSql);
|
|
|
+ sql.append(" ) person ").append(" INNER JOIN ( select scheduleShift.fdefaultshiftid,scheduleShift.fattenddate, ").append(" scheduleShift.fdaytype, ").append(" scheduleShift.fmatchDayType, ").append(" scheduleShift.fmatchShift, ").append(" scheduleShift.fproposerid, ").append(" scheduleShift.fHrOrgUnitId, ").append(" scheduleShift.fAdminOrgUnitId fAdminOrgUnitId, ").append(" ATTENDFILE.FADMINORGUNITID fileAdminOrgUnitId ").append(" FROM t_hr_ats_scheduleshift scheduleShift ").append(" inner JOIN T_HR_ATS_AttendanceFileHis ATTENDFILE ").append(" ON ( scheduleShift.FProposerID = attendFile.FProposerID ").append(" AND attendFile.feffdt <= scheduleShift.Fattenddate ").append(" AND attendFile.fLeffdt >= scheduleShift.Fattenddate ");
|
|
|
+ String isAttendance = (String) paramsMap.get("attendFile.isAttendance");
|
|
|
+ if (StringUtils.isNotEmpty(isAttendance)) {
|
|
|
+ sql.append(" AND attendFile.fisAttendance in (" + AtsUtil.getStrFromString(isAttendance) + ") ");
|
|
|
+ }
|
|
|
+ sql.append(") ").append(" where\tscheduleShift.fattenddate >= ? ").append(" AND scheduleShift.fattenddate <= ? ");
|
|
|
+ String hrOrgUnit = (String) paramsMap.get("hrOrgUnit");
|
|
|
+ if (StringUtils.isNotEmpty(hrOrgUnit)) {
|
|
|
+ sql.append(" AND scheduleShift.FHrOrgUnitID in (" + AtsUtil.getStrFromStringArr(hrOrgUnit.split(",")) + ") ");
|
|
|
+ }
|
|
|
+ sql.append(" ) scheduleShift ").append(" ON person.fid = scheduleShift.fproposerid and person.fHrOrgUnitId=scheduleShift.fHrOrgUnitId and person.attAdminOrgUnitID = scheduleShift.fAdminOrgUnitId and scheduleShift.fileAdminOrgUnitId = person.fAdminOrgUnitId ").append(" INNER JOIN T_ORG_Admin adminOrgUnit ON adminOrgUnit.fid = person.fAdminOrgUnitId ").append(" INNER JOIN T_ORG_HRO hrOrgUnit ON hrOrgUnit.Fid = person.fHrOrgUnitId ").append(" INNER JOIN T_ORG_Admin attAdminOrgUnit ON person.attAdminOrgUnitID = attAdminOrgUnit.FID ").append(" LEFT JOIN t_hr_ats_shift SHIFT ON scheduleShift.fdefaultshiftid = shift.fid ").append(" LEFT JOIN t_hr_ats_shift matchShift ON scheduleShift.fmatchShift = matchShift.fid ").append(" where scheduleShift.fattenddate >= ? ").append(" AND scheduleShift.fattenddate <= ? ");
|
|
|
+ if (paramsMap.get("sidx") != null && StringUtils.isNotEmpty(paramsMap.get("sidx").toString())) {
|
|
|
+ sql.append(" ORDER BY PERSONINDEX," + paramsMap.get("sidx") + " " + paramsMap.get("sord"));
|
|
|
+ }
|
|
|
+ logger.error("getPersonScheduleShiftListSql--sql--" + sql.toString());
|
|
|
+ logger.error("getPersonScheduleShiftListSql--end--");
|
|
|
+ return sql.toString();
|
|
|
+ }
|
|
|
+
|
|
|
+ private String getPersonScheduleShiftPageSql(HttpServletRequest request, Map paramsMap, int rows, int page, String flag, Object[] params) throws SHRWebException, BOSException {
|
|
|
+ logger.error("getPersonScheduleShiftPageSql--statrt--");
|
|
|
+
|
|
|
+ int dbType = AtsBaseUtils.getDbType(this.ctx);
|
|
|
+ PagingHelper pageHelper = new PagingHelper();
|
|
|
+ String sql = this.getPersonScheduleShiftSql(request, paramsMap, flag);
|
|
|
+ String tempPersonTable = (String) paramsMap.get("tempPersonTable");
|
|
|
+ if (!StringUtils.isEmpty(flag) && flag.equals("export")) {
|
|
|
+ this.totalCount = (Integer) paramsMap.get("totalCount");
|
|
|
+ } else {
|
|
|
+ tempPersonTable = this.createPersonTable(this.ctx, paramsMap, new Object[]{params[0], params[1]}, sql);
|
|
|
+ this.totalCount = this.getPersontotalCount(tempPersonTable);
|
|
|
+ }
|
|
|
+
|
|
|
+ int length = rows;
|
|
|
+ if (page * rows > this.totalCount) {
|
|
|
+ length = this.totalCount - (page - 1) * rows;
|
|
|
+ }
|
|
|
+
|
|
|
+ StringBuffer personSql = new StringBuffer();
|
|
|
+ personSql.append(" SELECT * FROM ").append(tempPersonTable);
|
|
|
+ if (paramsMap.get("sidx") != null && StringUtils.isNotEmpty(paramsMap.get("sidx").toString())) {
|
|
|
+// personSql.append(" ORDER BY PERSONNUM " + paramsMap.get("sord"));
|
|
|
+ personSql.append(" ORDER BY personIndex,PERSONNUM " + paramsMap.get("sord"));
|
|
|
+ }
|
|
|
+
|
|
|
+ String afterPagingSql = "";
|
|
|
+
|
|
|
+ try {
|
|
|
+ try {
|
|
|
+ afterPagingSql = pageHelper.getPagingSqlNoOptmize(dbType, personSql.toString(), (page - 1) * rows, length);
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ logger.error("getPersonScheduleShiftPageSql--end--");
|
|
|
+ return afterPagingSql;
|
|
|
+ } finally {
|
|
|
+ ;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ private String createPersonTable(Context ctx, Map paramsMap, Object[] objects, String sql) throws BOSException {
|
|
|
+ String tempPersonTable = "";
|
|
|
+
|
|
|
+ try {
|
|
|
+ tempPersonTable = TempTablePool.getInstance(this.ctx).createTempTableName();
|
|
|
+ } catch (Exception e) {
|
|
|
+ logger.error(MessageFormat.format("create table failed sql :{0} ", sql));
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+
|
|
|
+ for (Object param : objects) {
|
|
|
+ String paramStr = com.kingdee.eas.hr.ats.vo.common.Date.getNoNullTime(param).toDateTimeStr();
|
|
|
+ sql = sql.replaceFirst("\\?", String.format("{ts '%s'}", paramStr));
|
|
|
+ }
|
|
|
+
|
|
|
+ String tempSql = "select * into " + tempPersonTable + " from (" + sql + ") T ";
|
|
|
+ DbUtil.execute(ctx, tempSql.toString());
|
|
|
+ paramsMap.put("tempPersonTable", tempPersonTable);
|
|
|
+ return tempPersonTable;
|
|
|
+ }
|
|
|
+
|
|
|
+ private String getPersonScheduleShiftSql(HttpServletRequest request, Map paramsMap, String flag) {
|
|
|
+ logger.error("getPersonScheduleShiftSql--statrt--");
|
|
|
+ String adminOrgUnitTempName = (String) paramsMap.get("adminOrgUnitTempName");
|
|
|
+ String hrRangeSQL = (String) paramsMap.get("hrRangeSQL");
|
|
|
+ String billId = (String) paramsMap.get("billId");
|
|
|
+ String advancedFilterItems = (String) paramsMap.get("advancedFilterItems");
|
|
|
+ StringBuffer sql = new StringBuffer();
|
|
|
+ sql.append(" SELECT * FROM ( ");
|
|
|
+ sql.append(" SELECT proposer.fid FID, ").append(" proposer.fname" + MLUtile.getMlFlag(this.ctx) + " PERSONNAME, ").append(" proposer.fnumber PERSONNUM, ").append("proposer.FINDEX personIndex, ").append(" scheduleShift.FHrOrgUnitID fHrOrgUnitId, ").append(" adminOrgUnit.fid FadminOrgUnitId, ").append(" scheduleShift.fadminOrgUnitid attAdminOrgUnitId ").append(" FROM t_bd_person PROPOSER ").append(" INNER JOIN t_hr_ats_scheduleshift SCHEDULESHIFT ON proposer.fid = scheduleShift.fproposerid ").append(" INNER JOIN T_HR_ATS_AttendanceFileHis ATTENDFILE ON ( scheduleShift.FProposerID = attendFile.FProposerID AND attendFile.feffdt <= scheduleShift.Fattenddate AND attendFile.fLeffdt >= scheduleShift.Fattenddate )").append(" INNER JOIN T_ORG_Admin ADMINORGUNIT ON adminOrgUnit.fid = attendFile.FADMINORGUNITID ");
|
|
|
+ if (StringUtils.isNotEmpty(advancedFilterItems)) {
|
|
|
+ sql.append(" INNER JOIN T_ORG_Admin attAdminOrgUnit on attAdminOrgUnit.Fid = scheduleShift.FAdminOrgUnitID");
|
|
|
+ sql.append(" INNER JOIN T_HR_ATS_AttencePolicy attendPolicy on attendPolicy.Fid = scheduleShift.FAttendPolicyID");
|
|
|
+ sql.append(" LEFT OUTER JOIN T_HR_ATS_CardRule cardRule ON scheduleShift.FCardRuleID = cardRule.FID ");
|
|
|
+ sql.append(" LEFT OUTER JOIN T_HR_ATS_Shift defaultShift ON scheduleShift.FDefaultShiftID = defaultShift.FID ");
|
|
|
+ }
|
|
|
+
|
|
|
+ sql.append(" where scheduleShift.fattenddate >= ? ").append(" AND scheduleShift.fattenddate <= ? ");
|
|
|
+ this.getPersonGroupControlSQL(paramsMap, adminOrgUnitTempName, hrRangeSQL, sql);
|
|
|
+ String selectedPersonNums = request.getParameter("personNums");
|
|
|
+ if ("export".equalsIgnoreCase(flag) && !StringUtils.isEmpty(selectedPersonNums)) {
|
|
|
+ String[] selectedPersonNumsArr = selectedPersonNums.split(",");
|
|
|
+ StringBuffer sbuBuffer = new StringBuffer();
|
|
|
+
|
|
|
+ for (int i = 0; i < selectedPersonNumsArr.length; ++i) {
|
|
|
+ sbuBuffer.append("'" + selectedPersonNumsArr[i] + "'");
|
|
|
+ if (i != selectedPersonNumsArr.length - 1) {
|
|
|
+ sbuBuffer.append(",");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (sbuBuffer != null && sbuBuffer.length() > 0) {
|
|
|
+ sql.append(" AND PROPOSER.FNUMBER in (" + sbuBuffer.toString() + ") ");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ String filterItems = (String) paramsMap.get("filterItems");
|
|
|
+ if (StringUtils.isNotEmpty(filterItems)) {
|
|
|
+ sql.append(" AND " + filterItems);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (StringUtils.isNotEmpty(advancedFilterItems)) {
|
|
|
+ sql.append(" and " + advancedFilterItems);
|
|
|
+ }
|
|
|
+
|
|
|
+ String hrOrgUnit = (String) paramsMap.get("hrOrgUnit");
|
|
|
+ if (StringUtils.isNotEmpty(hrOrgUnit)) {
|
|
|
+ sql.append(" AND scheduleShift.FHrOrgUnitID in (" + AtsUtil.getStrFromStringArr(hrOrgUnit.split(",")) + ") ");
|
|
|
+ }
|
|
|
+
|
|
|
+ String ISDEFAULTMANAGE = (String) paramsMap.get("ISDEFAULTMANAGE");
|
|
|
+ if (StringUtils.isNotEmpty(ISDEFAULTMANAGE)) {
|
|
|
+ sql.append(" AND attendFile.FisdefaultManage in (" + AtsUtil.getStrFromStringArr(ISDEFAULTMANAGE.split(",")) + ") ");
|
|
|
+ }
|
|
|
+
|
|
|
+ sql.append(" ) tempTable ");
|
|
|
+ sql.append(" GROUP BY FID, PERSONNAME, PERSONNUM, personIndex, FHRORGUNITID, FADMINORGUNITID, ATTADMINORGUNITID ");
|
|
|
+ logger.error("getPersonScheduleShiftSql--end--");
|
|
|
+ return sql.toString();
|
|
|
+ }
|
|
|
+
|
|
|
+ private int getPersontotalCount(String tempPersonTable) {
|
|
|
+ String countSql = "select count(1) from " + tempPersonTable;
|
|
|
+ IRowSet rowSet = null;
|
|
|
+
|
|
|
+ try {
|
|
|
+ rowSet = DbUtil.executeQuery(this.ctx, countSql);
|
|
|
+ } catch (BOSException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+
|
|
|
+ try {
|
|
|
+ return this.getTotalCount(rowSet);
|
|
|
+ } catch (SHRWebException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private int getTotalCount(IRowSet rowSet) throws SHRWebException {
|
|
|
+ try {
|
|
|
+ while (rowSet.next()) {
|
|
|
+ try {
|
|
|
+ System.out.println("getTotalCount0321" + rowSet.getInt(1));
|
|
|
+ this.totalCount = rowSet.getInt(1);
|
|
|
+ } catch (SQLException e) {
|
|
|
+ throw new SHRWebException(e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } catch (SQLException e) {
|
|
|
+ throw new SHRWebException(e);
|
|
|
+ }
|
|
|
+
|
|
|
+ return this.totalCount;
|
|
|
+ }
|
|
|
+}
|