1.考勤统计 矩阵查看开发2.考勤确认流程请假 需与销假关联抵消

AISIN
Chengliang 5 months ago
parent dacf938826
commit 56a602cbf8

@ -1,6 +1,8 @@
package com.engine.aisin.service; package com.engine.aisin.service;
import java.util.Map;
/** /**
* @Author liang.cheng * @Author liang.cheng
* @Date 2024/11/15 3:16 PM * @Date 2024/11/15 3:16 PM
@ -16,4 +18,13 @@ public interface AccessCustomService {
* @return: java.util.Map<java.lang.String,java.lang.Object> * @return: java.util.Map<java.lang.String,java.lang.Object>
*/ */
boolean customAccess(String userId); boolean customAccess(String userId);
/**
* @Description:
* @Author: liang.cheng
* @Date: 2024/11/28 2:38 PM
* @param: []
* @return: java.util.Map<java.lang.String,java.lang.Object>
*/
Map<String,Object> getKqAccess();
} }

@ -5,14 +5,13 @@ import com.engine.aisin.service.AccessCustomService;
import com.engine.common.service.HrmCommonService; import com.engine.common.service.HrmCommonService;
import com.engine.common.service.impl.HrmCommonServiceImpl; import com.engine.common.service.impl.HrmCommonServiceImpl;
import com.engine.core.impl.Service; import com.engine.core.impl.Service;
import com.weaver.general.BaseBean;
import com.weaver.general.Util; import com.weaver.general.Util;
import lombok.SneakyThrows; import lombok.SneakyThrows;
import weaver.conn.RecordSet; import weaver.conn.RecordSet;
import weaver.hrm.resource.ResourceComInfo; import weaver.hrm.resource.ResourceComInfo;
import java.util.ArrayList; import java.util.*;
import java.util.Arrays;
import java.util.List;
/** /**
@ -102,6 +101,16 @@ public class AccessCustomServiceImpl extends Service implements AccessCustomServ
return result; return result;
} }
@Override
public Map<String, Object> getKqAccess() {
Map<String, Object> result = new HashMap<>(4);
BaseBean bb = new BaseBean();
String matrixtableName = bb.getPropValue("aisinsecond", "matrixtableName");
return result;
}
} }

@ -48,4 +48,20 @@ public class AccessCustomAction {
} }
return JSONObject.toJSONString(data, SerializerFeature.DisableCircularReferenceDetect); return JSONObject.toJSONString(data, SerializerFeature.DisableCircularReferenceDetect);
} }
@GET
@Path("/kqstatistics/access")
@Produces(MediaType.TEXT_PLAIN)
public String getKqAccess(@Context HttpServletRequest request, @Context HttpServletResponse response){
Map<String, Object> data = new HashMap<>(8);
try {
User user = HrmUserVarify.getUser(request, response);
data.put("datas",getService(user).getKqAccess());
data.put("api_status", true);
} catch (Exception e) {
data.put("api_status", false);
data.put("msg", "catch exception : " + e.getMessage());
}
return JSONObject.toJSONString(data, SerializerFeature.DisableCircularReferenceDetect);
}
} }

@ -1,6 +1,5 @@
package weaver.interfaces.aisin.cron; package weaver.interfaces.aisin.cron;
import weaver.common.DateUtil;
import weaver.conn.RecordSet; import weaver.conn.RecordSet;
import weaver.general.BaseBean; import weaver.general.BaseBean;
import weaver.general.TimeUtil; import weaver.general.TimeUtil;

@ -1,6 +1,5 @@
package weaver.interfaces.aisin.cron; package weaver.interfaces.aisin.cron;
import com.engine.kq.biz.KQLeaveRulesBiz;
import com.engine.kq.biz.KQReportBiz; import com.engine.kq.biz.KQReportBiz;
import com.engine.kq.util.KQDurationCalculatorUtil; import com.engine.kq.util.KQDurationCalculatorUtil;
import com.engine.kq.util.KQTransMethod; import com.engine.kq.util.KQTransMethod;
@ -37,7 +36,6 @@ public class KqCloseAccountUpdateCrob extends BaseCronJob {
String currentDate = TimeUtil.getCurrentDateString(); String currentDate = TimeUtil.getCurrentDateString();
String kqMonth = getKqMonth(); String kqMonth = getKqMonth();
String jsTableName = bb.getPropValue("aisinsecond", "jsTableName"); String jsTableName = bb.getPropValue("aisinsecond", "jsTableName");
String dxRuleId = bb.getPropValue("aisinsecond", "dxRuleId");
String firstDayOfMonth = firstDayOfMonth(kqMonth); String firstDayOfMonth = firstDayOfMonth(kqMonth);
@ -60,7 +58,7 @@ public class KqCloseAccountUpdateCrob extends BaseCronJob {
String subcompanyid = bb.getPropValue("aisinsecond", "subcompanyid"); String subcompanyid = bb.getPropValue("aisinsecond", "subcompanyid");
//防止多次执行,执行前先判断是否已有考勤月明细数据 //防止多次执行,执行前先判断是否已有考勤月明细数据
rs.executeQuery("select count(1) as sums from "+jsTableName+"_dt1 where mainid = ?",id); rs.executeQuery("select count(1) as sums from uf_atbpkqfz_dt1 where mainid = ?",id);
rs.next(); rs.next();
int sums = Util.getIntValue(rs.getString("sums")); int sums = Util.getIntValue(rs.getString("sums"));
if (sums > 0) { if (sums > 0) {
@ -113,7 +111,18 @@ public class KqCloseAccountUpdateCrob extends BaseCronJob {
1.5*(workingDayOvertime_4leave+workingDayOvertime_nonleave) + 2*(restDayOvertime_4leave+restDayOvertime_nonleave) + 3*(holidayOvertime_4leave+holidayOvertime_nonleave) 1.5*(workingDayOvertime_4leave+workingDayOvertime_nonleave) + 2*(restDayOvertime_4leave+restDayOvertime_nonleave) + 3*(holidayOvertime_4leave+holidayOvertime_nonleave)
)); ));
e.setSalaryHours(salaryHours); e.setSalaryHours(salaryHours);
String usedAmounts = flowWorkMonth(e, kqMonth);
e.setUseHours(usedAmounts);
String salaryRemianHours = subtract(salaryHours,usedAmounts);
e.setSalaryRemianHours(salaryRemianHours);
String flowHours = KQDurationCalculatorUtil.getDurationRound(String.valueOf(
(workingDayOvertime_4leave+workingDayOvertime_nonleave) + (restDayOvertime_4leave+restDayOvertime_nonleave) + (holidayOvertime_4leave+holidayOvertime_nonleave)
));
String remainHours = subtract(flowHours,usedAmounts);
e.setRemainHours(remainHours);
rs.executeUpdate("insert into uf_atbpkqfz_dt1 (mainid,yggh,ygxm,bmmc,dyjbxsspr,dyjbxssxr,dyjbxssjjr,hsgzxsshj,ydxxss," +
" syxssgzjs,dydxsyxs) values(?,?,?,?,?,?,?,?,?,?,?)",id,e.getWorkcode(),e.getResourceId(),e.getDepetId(),e.getWorkDayHours(),
e.getRestDayHours(),e.getHolidayHours(),e.getSalaryHours(),e.getUseHours(),e.getSalaryRemianHours(),e.getRemainHours());
}); });
@ -134,7 +143,7 @@ public class KqCloseAccountUpdateCrob extends BaseCronJob {
csLeaveDetails.forEach(e -> { csLeaveDetails.forEach(e -> {
compensatoryLeave(e,kqMonth); compensatoryLeave(e,kqMonth);
rs.executeUpdate("insert into "+jsTableName+"_dt2 (mainid,ygxm,yggh,zylxss,ysyxss,syxss,bysqjsdylxss) values(?,?,?,?,?,?,?)",id, rs.executeUpdate("insert into uf_atbpkqfz_dt2 (mainid,ygxm,yggh,zylxss,ysyxss,syxss,bysqjsdylxss) values(?,?,?,?,?,?,?)",id,
e.getResourceId(),e.getWorkcode(),e.getAllHours(),e.getUseHours(),e.getRemainHours(),e.getWorkflowHours()); e.getResourceId(),e.getWorkcode(),e.getAllHours(),e.getUseHours(),e.getRemainHours(),e.getWorkflowHours());
}); });
@ -195,21 +204,21 @@ public class KqCloseAccountUpdateCrob extends BaseCronJob {
/** /**
* *
*/ */
private void flowWorkMonth(OffLeaveDetail offLeaveDetail,String kqMonth) { private String flowWorkMonth(OffLeaveDetail offLeaveDetail,String kqMonth) {
RecordSet rs = new RecordSet(); RecordSet rs = new RecordSet();
BaseBean bb = new BaseBean(); BaseBean bb = new BaseBean();
String dxRuleId = bb.getPropValue("aisinsecond", "dxRuleId"); String dxRuleId = bb.getPropValue("aisinsecond", "dxRuleId");
KQTransMethod kqTransMethod = new KQTransMethod();
String year = kqMonth.substring(0, 4); String year = kqMonth.substring(0, 4);
String month = kqMonth.substring(5, 7); String month = kqMonth.substring(5, 7);
/*判断该假期类型是否属于 调休 的类型(暂不支持一个请假类型下既存在"加班时长自动计入余额"的余额发放方式,又存在其他发放方式)*/ String usedAmounts = "0.00";
boolean isTiaoXiu = KQLeaveRulesBiz.isTiaoXiu(dxRuleId); KQTransMethod kqTransMethod = new KQTransMethod();
rs.executeQuery("select sum(usedAmount) as usedAmounts from kq_balanceOfLeave where leaveRulesId = "+dxRuleId+" and (isDelete is null or isDelete<>1) \n" +
/*如果属于调休,需求默认是属于调休 此处增加一层判断*/ " and belongYear = '"+year+"' and resourceId = ? and belongMonth = '"+month+"' group by resourceId",offLeaveDetail.getResourceId());
if (isTiaoXiu) { if (rs.next()) {
usedAmounts = kqTransMethod.getOriginalShow(Util.null2String(rs.getString("usedAmounts")));
} }
return usedAmounts;
} }
@ -220,4 +229,11 @@ public class KqCloseAccountUpdateCrob extends BaseCronJob {
remainHours = String.format("%.2f", baseHours - usedHours); remainHours = String.format("%.2f", baseHours - usedHours);
return remainHours; return remainHours;
} }
private String subtract(String operand1, String operand2) {
double num1 = Double.parseDouble(operand1);
double num2 = Double.parseDouble(operand2);
double result = num1 - num2;
return String.valueOf(result);
}
} }

@ -1,11 +1,13 @@
package weaver.interfaces.aisin.cron; package weaver.interfaces.aisin.cron;
import cn.hutool.core.collection.CollectionUtil;
import com.engine.integration.util.StringUtils; import com.engine.integration.util.StringUtils;
import com.engine.kq.biz.*; import com.engine.kq.biz.*;
import com.engine.kq.entity.WorkTimeEntity; import com.engine.kq.entity.WorkTimeEntity;
import com.weaver.general.Util; import com.weaver.general.Util;
import org.springframework.util.CollectionUtils; import org.apache.commons.collections.CollectionUtils;
import weaver.common.DateUtil; import weaver.common.DateUtil;
import weaver.common.util.string.StringUtil;
import weaver.conn.RecordSet; import weaver.conn.RecordSet;
import weaver.general.BaseBean; import weaver.general.BaseBean;
import weaver.interfaces.aisin.cron.entity.*; import weaver.interfaces.aisin.cron.entity.*;
@ -18,6 +20,7 @@ import java.time.LocalDate;
import java.time.YearMonth; import java.time.YearMonth;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -162,18 +165,25 @@ public class KqConfirmWfCrob extends BaseCronJob {
//2.3 明细表3请假 //2.3 明细表3请假
List<LeaveDetailTableInfo> leaveDetails = new ArrayList<>(); List<LeaveDetailTableInfo> leaveDetails = new ArrayList<>();
rs.executeQuery("select fromdate,newleavetype,d_mins,serialid from kq_flow_split_leave where fromdate >= '"+firstDayOfMonth+"' and fromdate <= '"+lastDayOfMonth+"' \n" + rs.executeQuery("select belongDate,newleavetype,d_mins,serialid,leavebackrequestid from kq_flow_split_leave where belongDate >= '"+firstDayOfMonth+"' and belongDate <= '"+lastDayOfMonth+"' \n" +
" and resourceid = ?",e.getResourceId()); " and resourceid = ?",e.getResourceId());
while (rs.next()) { while (rs.next()) {
String fromdate = Util.null2String(rs.getString("fromdate")); String belongDate = Util.null2String(rs.getString("belongDate"));
String serialId = Util.null2String(rs.getString("serialid")); String serialId = Util.null2String(rs.getString("serialid"));
Integer leaveType = Util.getIntValue(rs.getString("newleavetype")); Integer leaveType = Util.getIntValue(rs.getString("newleavetype"));
String d_mins = Util.null2String(rs.getString("d_mins")); String d_mins = Util.null2String(rs.getString("d_mins"));
String leavebackrequestid = Util.null2String(rs.getString("leavebackrequestid"));
String leaveBackMins = "0";
//是否存在销假
if (StringUtil.isNotNullAndEmpty(leavebackrequestid)) {
leaveBackMins = leaveBack(leavebackrequestid, e.getResourceId(), belongDate);
}
String reduce = getReduce(d_mins, leaveBackMins);
leaveDetails.add(LeaveDetailTableInfo.builder() leaveDetails.add(LeaveDetailTableInfo.builder()
.date(fromdate) .date(belongDate)
.serialId(serialId) .serialId(serialId)
.leaveType(leaveType) .leaveType(leaveType)
.hours(minutesToHours(d_mins)) .hours(minutesToHours(reduce))
.build()); .build());
} }
@ -218,6 +228,31 @@ public class KqConfirmWfCrob extends BaseCronJob {
return tableField; return tableField;
} }
/**
*
* @param leavebackrequestid
* @param resourceId
* @param belongDate
* @return
*/
private String leaveBack(String leavebackrequestid,String resourceId,String belongDate){
RecordSet rs = new RecordSet();
//leavebackrequestid 格式 ,123456,123467
List<String> strings = Arrays.asList(leavebackrequestid.split(","));
String join = CollectionUtil.join(strings, ",");
List<Integer> list = new ArrayList<>();
rs.executeQuery("select D_Mins from kq_flow_split_leaveback where resourceid = ? and requestid in ("+join+") " +
" and belongDate = '"+belongDate+"'",resourceId);
while (rs.next()) {
list.add(Util.getIntValue(rs.getString("D_Mins")));
}
return String.valueOf(list.stream()
.mapToInt(Integer::intValue)
.sum());
}
private String getKqMonth() { private String getKqMonth() {
LocalDate currentDate = LocalDate.now(); LocalDate currentDate = LocalDate.now();
LocalDate previousMonthDate = currentDate.minusMonths(1); LocalDate previousMonthDate = currentDate.minusMonths(1);
@ -248,6 +283,13 @@ public class KqConfirmWfCrob extends BaseCronJob {
} }
private String getReduce(String leaveMins, String leavebackMins) {
String reduceMins;
int leaveMin = Integer.parseInt(leaveMins);
int leavebackMin = Integer.parseInt(leavebackMins);
reduceMins = String.valueOf(leaveMin - leavebackMin);
return reduceMins;
}

Loading…
Cancel
Save