考勤,出勤汇总导出、考勤日报相关视图刷新功能

zm_dev
sy 11 months ago
parent 73274faecd
commit d759111b82

@ -1,6 +1,6 @@
package com.api.attendance.summary;
import com.engine.attendance.workflow.web.AttendanceSummaryApi;
import com.engine.attendance.attendanceanalysis.web.AttendanceSummaryApi;
import javax.ws.rs.Path;

@ -1,5 +1,9 @@
package com.engine.attendance.workflow.service;
package com.engine.attendance.attendanceanalysis.service;
import weaver.hrm.User;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;
public interface AttendanceSummaryService {
@ -17,4 +21,12 @@ public interface AttendanceSummaryService {
Map<String, Object> getCqSummaryReport(Map<String, Object> params);
Map<String, Object> getCqSummarySearchCondition(Map<String, Object> params);
Map<String, Object> exportCqSummaryReport(Map<String, Object> params, HttpServletRequest request, HttpServletResponse response);
/**
*
* @return
*/
Map<String, Object> refreshViewAttendanceDaily();
}

@ -1,13 +1,14 @@
package com.engine.attendance.workflow.service.impl;
package com.engine.attendance.attendanceanalysis.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.engine.attendance.workflow.cmd.GetCqSummarySearchConditionCmd;
import com.engine.attendance.workflow.service.AttendanceSummaryService;
import com.engine.attendance.attendanceanalysis.service.AttendanceSummaryService;
import com.engine.common.util.DbTools;
import com.engine.core.impl.Service;
import com.engine.kq.biz.KQHolidaySetBiz;
import com.engine.kq.biz.KQReportBiz;
import com.engine.kq.util.ExcelUtil;
import com.engine.kq.util.PageUidFactory;
import weaver.conn.RecordSet;
import weaver.general.BaseBean;
@ -19,6 +20,8 @@ import weaver.hrm.job.JobTitlesComInfo;
import weaver.hrm.resource.ResourceComInfo;
import weaver.systeminfo.SystemEnv;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.time.LocalDate;
import java.util.*;
@ -293,33 +296,41 @@ public class AttendanceSummaryServiceImpl extends Service implements AttendanceS
}
});
//分页处理
int start = (pageIndex - 1) * pageSize;
int end = Math.min(pageIndex * pageSize, dataList.size());
List<Map<String, String>> resultList = new ArrayList<>();
if (start <= dataList.size()) {
resultList = dataList.subList(start, end);
}
count = dataList.size();
if (count <= 0) {
pageCount = 0;
String exportSign = Util.null2String(params.get("exportSign"));
if (exportSign.equals("1")) {
//导出时,不做分页处理
retmap.put("columns",columns);
retmap.put("datas",dataList);
} else {
pageCount = count / pageSize + ((count % pageSize > 0) ? 1 : 0);
//分页处理
int start = (pageIndex - 1) * pageSize;
int end = Math.min(pageIndex * pageSize, dataList.size());
List<Map<String, String>> resultList = new ArrayList<>();
if (start <= dataList.size()) {
resultList = dataList.subList(start, end);
}
count = dataList.size();
if (count <= 0) {
pageCount = 0;
} else {
pageCount = count / pageSize + ((count % pageSize > 0) ? 1 : 0);
}
isHaveNext = (pageIndex <= pageCount) ? 1 : 0;
isHavePre = (pageIndex >= 1) ? 1 : 0;
List<Object> lsHolidays = KQHolidaySetBiz.getHolidaySetListByScope(""+user.getUID(),fromDate,toDate);
retmap.put("holidays", lsHolidays);
retmap.put("columns",columns);
retmap.put("datas",resultList);
retmap.put("pagesize", pageSize);
retmap.put("pageindex", pageIndex);
retmap.put("count", count);
retmap.put("pagecount", pageCount);
retmap.put("ishavepre", isHavePre);
retmap.put("ishavenext", isHaveNext);
}
isHaveNext = (pageIndex <= pageCount) ? 1 : 0;
isHavePre = (pageIndex >= 1) ? 1 : 0;
List<Object> lsHolidays = KQHolidaySetBiz.getHolidaySetListByScope(""+user.getUID(),fromDate,toDate);
retmap.put("holidays", lsHolidays);
retmap.put("columns",columns);
retmap.put("datas",resultList);
retmap.put("pagesize", pageSize);
retmap.put("pageindex", pageIndex);
retmap.put("count", count);
retmap.put("pagecount", pageCount);
retmap.put("ishavepre", isHavePre);
retmap.put("ishavenext", isHaveNext);
}catch (Exception e){
bs.writeLog(e);
}
@ -331,6 +342,215 @@ public class AttendanceSummaryServiceImpl extends Service implements AttendanceS
return this.commandExecutor.execute(new GetCqSummarySearchConditionCmd(params, user));
}
@Override
public Map<String, Object> exportCqSummaryReport(Map<String, Object> params, HttpServletRequest request, HttpServletResponse response) {
Map<String, Object> retmap = null;
try {
retmap = new HashMap<String, Object>();
params.put("exportSign", "1");
Map<String, Object> cqSummaryReportResult = getCqSummaryReport(params);
List<Map<String, String>> resultList = (List<Map<String, String>>) cqSummaryReportResult.get("datas");
List<Map<String, Object>> columns = (List<Map<String, Object>>) cqSummaryReportResult.get("columns");
JSONObject jsonObj = JSON.parseObject(Util.null2String(params.get("data")));
String showColumns = Util.null2String(jsonObj.get("showColumns"));
List<String> showColumnKeyList = new ArrayList<>();
showColumnKeyList.add("lastname");
if (!showColumns.equals("")) {
showColumnKeyList.addAll(Arrays.asList(showColumns.split(",")));
}
//组装导出数据
List<List<Object>> dataList = new ArrayList<>();
List<Object> data = null;
for (Map<String, String> dataItem : resultList) {
data = new ArrayList<>();
for (String columnKey : showColumnKeyList) {
data.add(Util.null2String(dataItem.get(columnKey)));
}
dataList.add(data);
}
//获取列头key和value映射
Map<String, String> columnValueMap = new HashMap<>();
for(Map<String, Object> columnItem : columns) {
String title = Util.null2String(columnItem.get("title"));
String unit = Util.null2String(columnItem.get("unit"));
if (!"".equals(title) && !"".equals(unit)) {
title = title + "(" + unit + ")";
}
columnValueMap.put(columnItem.get("key").toString(), title);
}
//组装导出列头
List<Object> titleList = new ArrayList<>();
Map<String,Object> title = null;
for (String columnKey : showColumnKeyList) {
title = new HashMap<>();
title.put("title", columnValueMap.get(columnKey));
title.put("width", 30*256);
titleList.add(title);
}
//组装页标签
Map<String, Object> sheet = new HashMap<>();
sheet.put("sheetName", SystemEnv.getHtmlLabelName(390351, user.getLanguage()));
sheet.put("sheetTitle", SystemEnv.getHtmlLabelName(390351, user.getLanguage()));
sheet.put("dataList", dataList);
sheet.put("titleList", titleList);
List<Object> lsSheet = new ArrayList<>();
lsSheet.add(sheet);
LinkedHashMap<String, Object> workbook = new LinkedHashMap<>();
workbook.put("sheet", lsSheet);
workbook.put("fileName", SystemEnv.getHtmlLabelName(390351, user.getLanguage()));
ExcelUtil ExcelUtil = new ExcelUtil();
Map<String,Object> exportMap= ExcelUtil.export(workbook,request,response);
retmap.putAll(exportMap);
retmap.put("status", "1");
} catch (Exception e) {
retmap.put("status", "-1");
retmap.put("message", SystemEnv.getHtmlLabelName(382661, user.getLanguage()));
bs.writeLog(e.getMessage());
}
return retmap;
}
@Override
public Map<String, Object> refreshViewAttendanceDaily() {
Map<String, Object> retmap = new HashMap<>();
String sql = "";
String viewName = "v_attdaily";
//判断视图v_attdaily是否存在
RecordSet rs = new RecordSet();
String dbType = rs.getDBType();
if ("mysql".equals(dbType) || "postgresql".equals(dbType) || "sqlserver".equals(dbType) || "dm".equals(dbType) || "st".equals(dbType)) {
sql = "SELECT * FROM information_schema.views WHERE table_name = '" + viewName + "'";
} else if ("oracle".equals(dbType)) {
sql = "SELECT * FROM ALL_VIEWS WHERE VIEW_NAME = '" + viewName + "'";
} else if ("jc".equals(dbType)) {
sql = "SELECT * FROM sys.views WHERE viewname = '" + viewName + "'";
} else {
retmap.put("status", "-1");
retmap.put("message", "不支持的数据库类型,无法查询试图是否存在!");
return retmap;
}
Map<String, Object> viewInfo = DbTools.getSqlToMap(sql);
//存在则删除
if (viewInfo.size() > 0) {
sql = "DROP VIEW " + viewName;
boolean dropSign = DbTools.update(sql);
bs.writeLog("删除视图结果:" + dropSign);
}
//收集考勤项目
String kqxmSql = "select * from uf_jcl_kq_kqxm";
List<Map<String, Object>> kqxmList = DbTools.getSqlToList(kqxmSql);
//收集视图列头
StringBuilder viewColumn = new StringBuilder("id,ygid,rq,fbid,bm,zw");
//拼接视图内容sql
StringBuilder viewResourceSql = new StringBuilder("SELECT ta.id AS id,ta.ygid AS ygid,ta.rq AS rq,ta.fbid AS fbid,ta.bm AS bm,ta.zw AS zw");
//考勤项目核算单位、id、名称
String hsdw = "";
String kqxmId = "";
String mc = "";
for (Map<String, Object> kqxmInfo : kqxmList) {
hsdw = Util.null2String(kqxmInfo.get("hsdw"));
kqxmId = Util.null2String(kqxmInfo.get("id"));
mc = Util.null2String(kqxmInfo.get("mc"));
int mcLength = mc.getBytes().length;
if ("oracle".equals(dbType) && mcLength > 28) {
mc = mc.substring(0,9);
}
if ("0".equals(hsdw)) {
viewResourceSql.append(", SUM(CASE WHEN ta.xm = ").append(kqxmId).append(" THEN ta.sc ELSE 0 END) AS \"").append(mc).append("_t\"");
viewResourceSql.append(", SUM(CASE WHEN ta.xm = ").append(kqxmId).append(" THEN ta.sc ELSE 0 END) AS \"").append(mc).append("_c\"");
viewColumn.append(",").append(mc).append("_t").append(",").append(mc).append("_c");
} else if ("1".equals(hsdw)) {
viewResourceSql.append(", SUM(CASE WHEN ta.xm = ").append(kqxmId).append(" THEN ta.sc ELSE 0 END) AS \"").append(mc).append("_s\"");
viewResourceSql.append(", SUM(CASE WHEN ta.xm = ").append(kqxmId).append(" THEN ta.sc ELSE 0 END) AS \"").append(mc).append("_c\"");
viewColumn.append(",").append(mc).append("_s").append(",").append(mc).append("_c");
} else if ("2".equals(hsdw)) {
viewResourceSql.append(", SUM(CASE WHEN ta.xm = ").append(kqxmId).append(" THEN ta.sc ELSE 0 END) AS \"").append(mc).append("_f\"");
viewResourceSql.append(", SUM(CASE WHEN ta.xm = ").append(kqxmId).append(" THEN ta.sc ELSE 0 END) AS \"").append(mc).append("_c\"");
viewColumn.append(",").append(mc).append("_f").append(",").append(mc).append("_c");
} else {
viewResourceSql.append(", SUM(CASE WHEN ta.xm = ").append(kqxmId).append(" THEN ta.sc ELSE 0 END) AS \"").append(mc).append("_c\"");
viewColumn.append(",").append(mc).append("_c");
}
}
//ifnull函数的适配
String ifNullFunction = "";
if("mysql".equals(dbType) || "dm".equals(dbType) || "jc".equals(dbType) || "st".equals(dbType)) {
ifNullFunction = "IFNULL";
} else if ("oracle".equals(dbType)) {
ifNullFunction = "NVL";
} else if ("sqlserver".equals(dbType)) {
ifNullFunction = "ISNULL";
} else if ("postgresql".equals(dbType)) {
ifNullFunction = "COALESCE";
}
//创建新的视图
String createViewSql = "CREATE VIEW " + viewName;
createViewSql = createViewSql + " AS " + viewResourceSql.toString();
createViewSql = createViewSql + " FROM (" +
"SELECT uf_jcl_kq_cqjg.id AS id,uf_jcl_kq_cqjg.fbid AS fbid,uf_jcl_kq_cqjg.bm AS bm,uf_jcl_kq_cqjg.zw AS zw," +
"uf_jcl_kq_cqjg.ygid AS ygid,uf_jcl_kq_cqjg.rq AS rq,uf_jcl_kq_cqjg.xm1 AS xm," + ifNullFunction + "(uf_jcl_kq_cqjg.sc1,0) AS sc " +
"FROM uf_jcl_kq_cqjg WHERE (uf_jcl_kq_cqjg.xm1 IS NOT NULL) UNION ALL "
+
"SELECT uf_jcl_kq_cqjg.id AS id,uf_jcl_kq_cqjg.fbid AS fbid,uf_jcl_kq_cqjg.bm AS bm,uf_jcl_kq_cqjg.zw AS zw," +
"uf_jcl_kq_cqjg.ygid AS ygid,uf_jcl_kq_cqjg.rq AS rq,uf_jcl_kq_cqjg.xm2 AS xm2," + ifNullFunction + "(uf_jcl_kq_cqjg.sc2,0) AS sc2 " +
"FROM uf_jcl_kq_cqjg WHERE (uf_jcl_kq_cqjg.xm2 IS NOT NULL) UNION ALL "
+
"SELECT uf_jcl_kq_cqjg.id AS id,uf_jcl_kq_cqjg.fbid AS fbid,uf_jcl_kq_cqjg.bm AS bm,uf_jcl_kq_cqjg.zw AS zw," +
"uf_jcl_kq_cqjg.ygid AS ygid,uf_jcl_kq_cqjg.rq AS rq,uf_jcl_kq_cqjg.xm3 AS xm3," + ifNullFunction + "(uf_jcl_kq_cqjg.sc3,0) AS sc3 " +
"FROM uf_jcl_kq_cqjg WHERE (uf_jcl_kq_cqjg.xm3 IS NOT NULL) UNION ALL "
+
"SELECT uf_jcl_kq_cqjg.id AS id,uf_jcl_kq_cqjg.fbid AS fbid,uf_jcl_kq_cqjg.bm AS bm,uf_jcl_kq_cqjg.zw AS zw," +
"uf_jcl_kq_cqjg.ygid AS ygid,uf_jcl_kq_cqjg.rq AS rq,uf_jcl_kq_cqjg.xm4 AS xm4," + ifNullFunction + "(uf_jcl_kq_cqjg.sc4,0) AS sc4 " +
"FROM uf_jcl_kq_cqjg WHERE (uf_jcl_kq_cqjg.xm4 IS NOT NULL) UNION ALL "
+
"SELECT uf_jcl_kq_cqjg.id AS id,uf_jcl_kq_cqjg.fbid AS fbid,uf_jcl_kq_cqjg.bm AS bm,uf_jcl_kq_cqjg.zw AS zw," +
"uf_jcl_kq_cqjg.ygid AS ygid,uf_jcl_kq_cqjg.rq AS rq,uf_jcl_kq_cqjg.xm5 AS xm5," + ifNullFunction + "(uf_jcl_kq_cqjg.sc5,0) AS sc5 " +
"FROM uf_jcl_kq_cqjg WHERE (uf_jcl_kq_cqjg.xm5 IS NOT NULL) UNION ALL "
+
"SELECT uf_jcl_kq_cqjg.id AS id,uf_jcl_kq_cqjg.fbid AS fbid,uf_jcl_kq_cqjg.bm AS bm,uf_jcl_kq_cqjg.zw AS zw," +
"uf_jcl_kq_cqjg.ygid AS ygid,uf_jcl_kq_cqjg.rq AS rq,uf_jcl_kq_cqjg.xm6 AS xm6," + ifNullFunction + "(uf_jcl_kq_cqjg.sc6,0) AS sc6 " +
"FROM uf_jcl_kq_cqjg WHERE (uf_jcl_kq_cqjg.xm6 IS NOT NULL) UNION ALL "
+
"SELECT uf_jcl_kq_cqjg.id AS id,uf_jcl_kq_cqjg.fbid AS fbid,uf_jcl_kq_cqjg.bm AS bm,uf_jcl_kq_cqjg.zw AS zw," +
"uf_jcl_kq_cqjg.ygid AS ygid,uf_jcl_kq_cqjg.rq AS rq,uf_jcl_kq_cqjg.xm7 AS xm7," + ifNullFunction + "(uf_jcl_kq_cqjg.sc7,0) AS sc7 " +
"FROM uf_jcl_kq_cqjg WHERE (uf_jcl_kq_cqjg.xm7 IS NOT NULL) UNION ALL "
+
"SELECT uf_jcl_kq_cqjg.id AS id,uf_jcl_kq_cqjg.fbid AS fbid,uf_jcl_kq_cqjg.bm AS bm,uf_jcl_kq_cqjg.zw AS zw," +
"uf_jcl_kq_cqjg.ygid AS ygid,uf_jcl_kq_cqjg.rq AS rq,uf_jcl_kq_cqjg.xm8 AS xm8," + ifNullFunction + "(uf_jcl_kq_cqjg.sc8,0) AS sc8 " +
"FROM uf_jcl_kq_cqjg WHERE (uf_jcl_kq_cqjg.xm8 IS NOT NULL) UNION ALL "
+
"SELECT uf_jcl_kq_cqjg.id AS id,uf_jcl_kq_cqjg.fbid AS fbid,uf_jcl_kq_cqjg.bm AS bm,uf_jcl_kq_cqjg.zw AS zw,uf_jcl_kq_cqjg.ygid AS ygid,uf_jcl_kq_cqjg.rq AS rq," +
"(CASE WHEN (uf_jcl_kq_cqjg.cqzt = 0) THEN '1' ELSE '5' END) AS cqzt," +
"(CASE WHEN (uf_jcl_kq_cqjg.cqzt = 0) THEN uf_jcl_kq_cqjg.cqsc ELSE 0 END) AS cqsc " +
"FROM uf_jcl_kq_cqjg UNION ALL "
+
"SELECT uf_jcl_kq_cqjg.id AS id,uf_jcl_kq_cqjg.fbid AS fbid,uf_jcl_kq_cqjg.bm AS bm,uf_jcl_kq_cqjg.zw AS zw,uf_jcl_kq_cqjg.ygid AS ygid,uf_jcl_kq_cqjg.rq AS rq, " +
"(CASE WHEN ((uf_jcl_kq_cqjg.rqlx = 0) OR (uf_jcl_kq_cqjg.rqlx = 4)) THEN '2' " +
"WHEN ((uf_jcl_kq_cqjg.rqlx = 2) OR (uf_jcl_kq_cqjg.rqlx = 3)) THEN '3' " +
"WHEN (uf_jcl_kq_cqjg.rqlx = 1) THEN '4' ELSE '0' END) " +
"AS rqlx, " +
"uf_jcl_kq_cqjg.cqsc AS cqsc " +
"FROM uf_jcl_kq_cqjg " +
") ta GROUP BY ta.id,ta.ygid,ta.rq,ta.fbid,ta.bm,ta.zw";
boolean createSign = DbTools.update(createViewSql);
bs.writeLog("创建视图结果:" + createSign);
if (createSign) {
retmap.put("status", "1");
retmap.put("message", "考勤日报相关视图刷新成功!");
} else {
retmap.put("status", "-1");
retmap.put("message", "考勤日报相关视图刷新失败!");
bs.writeLog("创建视图sql[===" + createViewSql + "===]");
}
return retmap;
}
private String getKqxmUnit(String hsdw) {
if (hsdw.equals("0")) {
return SystemEnv.getHtmlLabelName(518514, user.getLanguage()); //天

@ -1,22 +1,19 @@
package com.engine.attendance.workflow.web;
package com.engine.attendance.attendanceanalysis.web;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.engine.attendance.workflow.service.AttendanceSummaryService;
import com.engine.attendance.workflow.service.BusinessTripsApplyService;
import com.engine.attendance.workflow.service.impl.AttendanceSummaryServiceImpl;
import com.engine.attendance.workflow.service.impl.BusinessTripsApplyServiceImpl;
import com.engine.attendance.attendanceanalysis.service.AttendanceSummaryService;
import com.engine.attendance.attendanceanalysis.service.impl.AttendanceSummaryServiceImpl;
import com.engine.common.util.ParamUtil;
import com.engine.common.util.ResponseResult;
import com.engine.common.util.ServiceUtil;
import weaver.general.Util;
import weaver.general.BaseBean;
import weaver.hrm.HrmUserVarify;
import weaver.hrm.User;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.*;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import java.util.HashMap;
@ -28,7 +25,7 @@ import java.util.Map;
* @Date: 2024/3/25
**/
public class AttendanceSummaryApi {
BaseBean bs = new BaseBean();
private AttendanceSummaryService getAttendanceSummaryService(User user) {
return ServiceUtil.getService(AttendanceSummaryServiceImpl.class,user);
}
@ -80,4 +77,35 @@ public class AttendanceSummaryApi {
apidatas = getAttendanceSummaryService(user).addAttendanceSummary(ParamUtil.request2Map(request));
return JSONObject.toJSONString(apidatas);
}
/**
*
* @param request
* @param response
* @return
*/
@POST
@Path("/exportExcel")
@Produces(MediaType.TEXT_PLAIN)
public String exportExcel(@Context HttpServletRequest request, @Context HttpServletResponse response) {
Map<String, Object> apidatas = new HashMap<String, Object>();
try {
User user = HrmUserVarify.getUser(request, response);
apidatas = getAttendanceSummaryService(user).exportCqSummaryReport(ParamUtil.request2Map(request), request, response);
} catch (Exception e) {
apidatas.put("status", "-1");
bs.writeLog(e);
}
return JSONObject.toJSONString(apidatas);
}
@GET
@Path("/refreshViewAttendanceDaily")
@Produces(MediaType.APPLICATION_JSON)
public String refreshViewAttendanceDaily(@Context HttpServletRequest request, @Context HttpServletResponse response) {
Map<String, Object> apidatas = new HashMap<String, Object>();
User user = HrmUserVarify.getUser(request, response);
apidatas = getAttendanceSummaryService(user).refreshViewAttendanceDaily();
return JSONObject.toJSONString(apidatas);
}
}

@ -165,7 +165,7 @@ public class GetCqSummarySearchConditionCmd extends AbstractCommonCommand<Map<St
selectOption.put("key","department");
selectOption.put("cascadekey",cascadekey);
selectOption.put("showname",SystemEnv.getHtmlLabelName(528843, user.getLanguage()));//部门
selectOption.put("selected",false);
selectOption.put("selected",true);
selectOptions.add(selectOption);
showColumns.add(selectOptions);

@ -235,7 +235,7 @@ public class AllowanceServiceImpl extends Service implements AllowanceService {
double countMinutes = 0;
//出勤时长
double cqsc = Util.null2String(map.get("cqsc")).equals("") ? 0 : Double.parseDouble(map.get("cqsc").toString());
//获取班次班段时间范围
//获取班次班段时间范围,todo,出勤结果中班次班段数据要考虑到跨天情况
List<Map<String, String>> bcTimeRangeList = collectBcTimeRangeInfo(Util.null2String(map.get("bcbdxx")));
//遍历该出勤结果中班次、人员都关联的津贴项目
for(String allowanceId : allowanceIdsByBc) {

Loading…
Cancel
Save