夜班天数计算
This commit is contained in:
parent
aae717c314
commit
1e146c826e
|
|
@ -0,0 +1,13 @@
|
|||
package com.api.xmgsecond.web;
|
||||
|
||||
import javax.ws.rs.Path;
|
||||
|
||||
/**
|
||||
* @Author liang.cheng
|
||||
* @Date 2025/5/16 15:13
|
||||
* @Description: 考勤关账
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Path("/xmgsecond/kq/cube")
|
||||
public class KqCloseAccountAction extends com.engine.xmgsecond.web.KqCloseAccountAction{
|
||||
}
|
||||
|
|
@ -194,7 +194,7 @@ public class GetKQReportCmd extends AbstractCommonCommand<Map<String, Object>> {
|
|||
Map<String,Object> definedFieldInfo = new KQFormatBiz().getDefinedField();
|
||||
String definedFieldSum = Util.null2String(definedFieldInfo.get("definedFieldSum"));
|
||||
|
||||
String backFields = " a.id,a.lastname,a.workcode,a.dsporder,b.resourceid,a.subcompanyid1 as subcompanyid,a.departmentid,a.jobtitle," +
|
||||
String backFields = " a.id,a.lastname,a.workcode,a.dsporder,b.resourceid,a.subcompanyid1 as subcompanyid,a.departmentid,a.jobtitle,b.groupid," +
|
||||
" sum(b.workdays) as workdays,sum(b.workMins) as workMins,sum(b.attendancedays) as attendancedays," +
|
||||
" sum(b.attendanceMins) as attendanceMins,sum(b.beLate) as beLate,sum(b.beLateMins) as beLateMins, " +
|
||||
" sum(b.graveBeLate) as graveBeLate, sum(b.graveBeLateMins) as graveBeLateMins,sum(b.leaveEearly) as leaveEearly," +
|
||||
|
|
@ -409,14 +409,17 @@ public class GetKQReportCmd extends AbstractCommonCommand<Map<String, Object>> {
|
|||
}else if("kqGroup".equals(fieldName)){
|
||||
//QC3685035 考勤月度报表增加所属所属考勤组
|
||||
KQGroupComInfo kqGroupComInfo = new KQGroupComInfo();
|
||||
KQGroupMemberComInfo kqGroupMemberComInfo = new KQGroupMemberComInfo();
|
||||
String groupId = kqGroupMemberComInfo.getKQGroupId(id, toDate);
|
||||
fieldValue = kqGroupComInfo.getGroupname(groupId);
|
||||
// KQGroupMemberComInfo kqGroupMemberComInfo = new KQGroupMemberComInfo();
|
||||
// String groupId = kqGroupMemberComInfo.getKQGroupId(id, toDate);
|
||||
fieldValue = kqGroupComInfo.getGroupname(Util.null2String(rs.getString("groupid")));
|
||||
}else if("absenteeismDays".equals(fieldName)){
|
||||
//QC3685035 考勤月度报表增加缺勤天数
|
||||
List<KqFormatTotal> kqFormatTotalList = KqCalulateUtil.abnormalAttendance(id, fromDate, toDate);
|
||||
fieldValue = String.format("%.1f", kqFormatTotalList.stream().mapToDouble(KqFormatTotal::getAbsenceDays).sum());
|
||||
} else if(fieldName.equals("rlzqqxs")){
|
||||
}else if("nigntWork".equals(fieldName)){
|
||||
//QC3685035 考勤月度报表增加夜班次数
|
||||
fieldValue = String.valueOf(KqCalulateUtil.nightWorkSums(id,fromDate,toDate));
|
||||
}else if(fieldName.equals("rlzqqxs")){
|
||||
String rlzqqxsTime = getXcqts(fromDate,id);
|
||||
fieldValue = rlzqqxsTime;
|
||||
}else if(fieldName.equals("attendanceSerial")){
|
||||
|
|
|
|||
|
|
@ -0,0 +1,16 @@
|
|||
package com.engine.xmgsecond.service;
|
||||
|
||||
import com.engine.workflow.entity.publicApi.PAResponseEntity;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @Author liang.cheng
|
||||
* @Date 2025/5/16 15:17
|
||||
* @Description: TODO
|
||||
* @Version 1.0
|
||||
*/
|
||||
public interface KqCloseAccountService {
|
||||
|
||||
PAResponseEntity closeAccount(Map<String, Object> param);
|
||||
}
|
||||
|
|
@ -0,0 +1,50 @@
|
|||
package com.engine.xmgsecond.service.impl;
|
||||
|
||||
import com.engine.common.util.ServiceUtil;
|
||||
import com.engine.core.impl.Service;
|
||||
import com.engine.workflow.entity.publicApi.PAResponseEntity;
|
||||
import com.engine.workflow.entity.publicApi.ReqOperateRequestEntity;
|
||||
import com.engine.workflow.publicApi.WorkflowRequestOperatePA;
|
||||
import com.engine.workflow.publicApi.impl.WorkflowRequestOperatePAImpl;
|
||||
import com.engine.xmgsecond.service.KqCloseAccountService;
|
||||
import weaver.general.BaseBean;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @Author liang.cheng
|
||||
* @Date 2025/5/16 15:18
|
||||
* @Description: TODO
|
||||
* @Version 1.0
|
||||
*/
|
||||
public class KqCloseAccountServiceImpl extends Service implements KqCloseAccountService {
|
||||
|
||||
private WorkflowRequestOperatePA getRequestOperatePA() {
|
||||
return ServiceUtil.getService(WorkflowRequestOperatePAImpl.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PAResponseEntity closeAccount(Map<String, Object> param) {
|
||||
|
||||
WorkflowRequestOperatePA operatePA = getRequestOperatePA();
|
||||
|
||||
ReqOperateRequestEntity requestParam = new ReqOperateRequestEntity();
|
||||
|
||||
//流程干预
|
||||
// requestParam.setRequestId(1681681);
|
||||
// requestParam.setSrc("intervenor");
|
||||
// requestParam.setWorkflowId(95);
|
||||
// requestParam.setNodeId(392);
|
||||
// requestParam.setRemark("考勤干预");
|
||||
// requestParam.setEnableIntervenor(true);
|
||||
// requestParam.setSubmitNodeId(391);
|
||||
// requestParam.setIntervenorid("1");
|
||||
// PAResponseEntity paResponseEntity = operatePA.doIntervenor(user, requestParam);
|
||||
|
||||
|
||||
//强制归档 DoArchivingCmd
|
||||
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
@ -2,7 +2,6 @@ package com.engine.xmgsecond.util;
|
|||
|
||||
import com.engine.xmgsecond.entity.KqFormatTotal;
|
||||
import weaver.conn.RecordSet;
|
||||
import weaver.general.BaseBean;
|
||||
import weaver.general.Util;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
|
@ -20,7 +19,7 @@ public class KqCalulateUtil {
|
|||
|
||||
|
||||
/**
|
||||
* @Description: 时间范围内 考勤异常汇总成缺勤天数
|
||||
* @Description: 时间范围内 考勤报表 增加缺勤天数
|
||||
* @Author: liang.cheng
|
||||
* @Date: 2025/5/14 16:22
|
||||
* @param: [resourceId, fromDate, toDate]
|
||||
|
|
@ -70,6 +69,59 @@ public class KqCalulateUtil {
|
|||
|
||||
}
|
||||
|
||||
/**
|
||||
* @Description: 时间范围内 考勤报表 增加夜班天数
|
||||
* @Author: liang.cheng
|
||||
* @Date: 2025/5/16 09:28
|
||||
* @param: [resourceId, fromDate, toDate]
|
||||
* @return: int
|
||||
*/
|
||||
public static int nightWorkSums(String resourceId,String fromDate,String toDate){
|
||||
|
||||
RecordSet rs = new RecordSet();
|
||||
int count = 0;
|
||||
rs.executeQuery(" select a.kqdate,a.serialid,a.belatemins,a.leaveearlymins,a.absenteeismmins,a.forgotcheckMins,a.leaveMins,\n" +
|
||||
" a.evectionMins,a.outMins,b.serial,b.is_rest,b.shiftonoffworkcount from kq_format_total a \n" +
|
||||
" left join kq_ShiftManagement b on a.serialid = b.id where a.resourceid = ? and a.kqdate >= '"+fromDate+"' and a.kqdate <= '"+toDate+"'",resourceId);
|
||||
while (rs.next()) {
|
||||
int serialid = Util.getIntValue(rs.getString("serialid"));
|
||||
String kqdate = Util.null2String(rs.getString("kqdate"));
|
||||
if(serialid == -1) {
|
||||
continue;
|
||||
}
|
||||
int isRest = Util.getIntValue(rs.getString("is_rest"));
|
||||
if (isRest == 1) {
|
||||
//1.休息班
|
||||
if (Util.getIntValue(rs.getString("shiftonoffworkcount")) == 1){
|
||||
//一天一次上下班卡
|
||||
if (calculateClockTime(resourceId,kqdate,serialid)){
|
||||
count = count + 1;
|
||||
}
|
||||
}
|
||||
|
||||
}else {
|
||||
//2.非休息班
|
||||
String serial = Util.null2String(rs.getString("serial"));
|
||||
if (serial.contains("夜班")) {
|
||||
int beLateMins = Util.getIntValue(rs.getString("beLateMins"),0);
|
||||
int leaveearlymins = Util.getIntValue(rs.getString("leaveearlymins"),0);
|
||||
int absenteeismmins = Util.getIntValue(rs.getString("absenteeismmins"),0);
|
||||
int forgotcheckMins = Util.getIntValue(rs.getString("forgotcheckMins"),0);
|
||||
int leaveMins = Util.getIntValue(rs.getString("leaveMins"),0);
|
||||
int evectionMins = Util.getIntValue(rs.getString("evectionMins"),0);
|
||||
int outMins = Util.getIntValue(rs.getString("outMins"),0);
|
||||
if (beLateMins == 0 && leaveearlymins == 0 && absenteeismmins == 0 && forgotcheckMins == 0
|
||||
&& leaveMins == 0 && evectionMins == 0 && outMins == 0) {
|
||||
count = count + 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
|
||||
public static boolean isPositive(Integer num) {
|
||||
return Optional.ofNullable(num).orElse(0) > 0;
|
||||
}
|
||||
|
|
@ -94,5 +146,12 @@ public class KqCalulateUtil {
|
|||
return Optional.ofNullable(a).orElse(0) + Optional.ofNullable(b).orElse(0);
|
||||
}
|
||||
|
||||
public static boolean calculateClockTime(String resourceId,String kqDate,int serialid){
|
||||
RecordSet rs = new RecordSet();
|
||||
rs.executeQuery("select resourceid,kqdate,signintime,signouttime from kq_format_detail where kqdate = '"+kqDate+"' and resourceid = ? and serialid = ? \n" +
|
||||
" and signintime >= '18:00:00' and signintime <= '20:30:00' and signouttime <= '05:30:00'",resourceId,serialid);
|
||||
return rs.getCounts() > 0;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,50 @@
|
|||
package com.engine.xmgsecond.web;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.alibaba.fastjson.serializer.SerializerFeature;
|
||||
import com.engine.common.util.ParamUtil;
|
||||
import com.engine.common.util.ServiceUtil;
|
||||
import com.engine.xmgsecond.service.KqCloseAccountService;
|
||||
import com.engine.xmgsecond.service.impl.KqCloseAccountServiceImpl;
|
||||
import weaver.hrm.HrmUserVarify;
|
||||
import weaver.hrm.User;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.ws.rs.GET;
|
||||
import javax.ws.rs.Path;
|
||||
import javax.ws.rs.Produces;
|
||||
import javax.ws.rs.core.Context;
|
||||
import javax.ws.rs.core.MediaType;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @Author liang.cheng
|
||||
* @Date 2025/5/16 15:15
|
||||
* @Description: TODO
|
||||
* @Version 1.0
|
||||
*/
|
||||
public class KqCloseAccountAction {
|
||||
|
||||
private KqCloseAccountService getService(User user) {
|
||||
return ServiceUtil.getService(KqCloseAccountServiceImpl.class, user);
|
||||
}
|
||||
|
||||
|
||||
@GET
|
||||
@Path("/closeAccount")
|
||||
@Produces(MediaType.TEXT_PLAIN)
|
||||
public String closeAccount(@Context HttpServletRequest request, @Context HttpServletResponse response){
|
||||
Map<String, Object> data = new HashMap<>(8);
|
||||
try {
|
||||
User user = HrmUserVarify.getUser(request, response);
|
||||
data.put("data",getService(user).closeAccount(ParamUtil.request2Map(request)));
|
||||
data.put("code", 200);
|
||||
} catch (Exception e) {
|
||||
data.put("code", 500);
|
||||
data.put("msg", "catch exception : " + e.getMessage());
|
||||
}
|
||||
return JSONObject.toJSONString(data, SerializerFeature.DisableCircularReferenceDetect);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
package weaver.interfaces.xmgsecond;
|
||||
|
||||
import weaver.general.BaseBean;
|
||||
import weaver.interfaces.workflow.action.Action;
|
||||
import weaver.soa.workflow.request.RequestInfo;
|
||||
|
||||
/**
|
||||
* @Author liang.cheng
|
||||
* @Date 2025/5/16 14:25
|
||||
* @Description: TODO
|
||||
* @Version 1.0
|
||||
*/
|
||||
public class TestWorkAction implements Action {
|
||||
@Override
|
||||
public String execute(RequestInfo requestInfo) {
|
||||
|
||||
BaseBean bb = new BaseBean();
|
||||
|
||||
bb.writeLog("TestWorkAction1: 执行流程节点附件操作");
|
||||
|
||||
return Action.SUCCESS;
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue