考勤-请假明细根据明细表3生成功能

main
sy 5 months ago
parent 2ee62b3f82
commit 6c7c5d53bf

@ -1,8 +1,11 @@
package com.engine.jucailinkq.attendance.workflow.action.askforleave;
import com.engine.common.util.ServiceUtil;
import com.engine.jucailinkq.attendance.enums.AccountingUnitEnum;
import com.engine.jucailinkq.attendance.enums.AttendanceItemTypeEnum;
import com.engine.jucailinkq.attendance.workflow.enums.WorkFlowTypeEnum;
import com.engine.jucailinkq.attendance.workflow.service.AskForLeaveService;
import com.engine.jucailinkq.attendance.workflow.service.impl.AskForLeaveServiceImpl;
import com.engine.jucailinkq.common.util.CommonUtil;
import com.engine.jucailinkq.common.util.DateUtil;
import com.engine.jucailinkq.common.util.DbTools;
@ -11,6 +14,7 @@ import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import lombok.extern.slf4j.Slf4j;
import weaver.general.Util;
import weaver.hrm.User;
import weaver.interfaces.workflow.action.Action;
import weaver.soa.workflow.request.RequestInfo;
@ -28,11 +32,16 @@ import java.util.stream.Collectors;
**/
@Slf4j
public class BatchAskForLeaveWorkFlowSubmitAction implements Action {
private AskForLeaveService getAskForLeaveService(User user) {
return ServiceUtil.getService(AskForLeaveServiceImpl.class,user);
}
@Override
public String execute(RequestInfo requestInfo) {
String requestid = requestInfo.getRequestid();
int billid = requestInfo.getRequestManager().getBillid();
log.info("billid : [{}]",billid);
User user = new User(Integer.parseInt("1"));
try {
// 流程表单主表数据
HashMap<String, String> mainTableData = CommonUtil.getMainTableInfo(requestInfo, WorkFlowTypeEnum.ASKFORLEAVE);
@ -40,11 +49,86 @@ public class BatchAskForLeaveWorkFlowSubmitAction implements Action {
// 流程表单明细表1数据
List<Map<String, String>> detailTableData = CommonUtil.getDetailTableInfo(requestInfo, 0,WorkFlowTypeEnum.ASKFORLEAVE);
log.info("detailTableData : [{}]", detailTableData);
String detail1TableName = CommonUtil.getDetailTableInfoTableName(requestInfo.getDetailTableInfo().getDetailTable()[0].getTableDBName(),0,WorkFlowTypeEnum.ASKFORLEAVE);
log.info("detail1TableName : [{}]", detail1TableName);
String detail2TableName = CommonUtil.getDetailTableInfoTableName(requestInfo.getDetailTableInfo().getDetailTable()[1].getTableDBName(),1,WorkFlowTypeEnum.ASKFORLEAVE);
log.info("detail2TableName : [{}]", detail2TableName);
//流程表单明细表3数据
List<Map<String, String>> detailTable3Data = CommonUtil.getDetailTableInfo(requestInfo,2, WorkFlowTypeEnum.ASKFORLEAVE);
log.info("detailTable3Data : [{}]", detailTable3Data);
//20241127需求变更明细表1存在数据时直接走原有校验逻辑明细表1没有数据时就根据明细表3重新生成明细表1数据然后继续原有校验逻辑
Map<String, Object> params = new HashMap<>();
List<Map<String, String>> reCreateDetailList = new ArrayList<>();
if (detailTableData.size() == 0 && detailTable3Data.size() > 0) {
List<Map<String, Object>> insertDetail1List = new ArrayList<>();
Map<String, Object> itemResult = new HashMap<>();
List<Map<String, Object>> itemDetailList = new ArrayList<>();
for (Map<String, String> detailTable3Item : detailTable3Data) {
detailTable3Item.put("jqlx", detailTable3Item.get("qjlx"));
detailTable3Item.put("cxjqj", detailTable3Item.get("qjfs"));
params.put("mainTableData", detailTable3Item);
params.put("detailTableData", reCreateDetailList);
itemResult = getAskForLeaveService(user).generateLeaveInfoList(params);
log.info("itemResult : [{}]", itemResult);
if ("false".equals(Util.null2String(itemResult.get("status"))) || itemResult.get("errorInfo") != null) {
String message = "生成请假明细失败:" + Util.null2String(itemResult.get("errorInfo"));
log.error(message);
requestInfo.getRequestManager().setMessageid("11111" + requestid + "22222");
requestInfo.getRequestManager().setMessagecontent(message);
return Action.FAILURE_AND_CONTINUE;
} else if (itemResult.get("data") != null) {
itemDetailList = (List<Map<String, Object>>) itemResult.get("data");
if (itemDetailList.size() > 0) {
Map<String, Object> insertItem;
for (Map<String, Object> item : itemDetailList) {
insertItem = new HashMap<>();
insertItem.put("mainid", mainTableData.get("id"));
insertItem.put("ksrq", item.getOrDefault("ksrq", ""));
insertItem.put("kssj", item.getOrDefault("kssj", ""));
insertItem.put("jsrq", item.getOrDefault("jsrq", ""));
insertItem.put("jssj", item.getOrDefault("jssj", ""));
insertItem.put("qjsc", item.getOrDefault("qjsc", ""));
insertItem.put("qtj", item.getOrDefault("qtj", "0"));
insertItem.put("btj", item.getOrDefault("btj", "0"));
insertItem.put("cxqj", "0");
insertItem.put("qjr", item.getOrDefault("qjr", ""));
insertItem.put("qjlx", item.getOrDefault("qjlx", ""));
insertItem.put("jqye", item.getOrDefault("jqye", ""));
insertDetail1List.add(insertItem);
}
}
}
}
log.info("insertDetail1List : [{}]", insertDetail1List);
if (insertDetail1List.size() > 0 && !CommonUtil.insertBatch(insertDetail1List, detail1TableName)) {
//更新流程明细表2失败
String message = "新增流程明细表1失败";
log.error(message);
requestInfo.getRequestManager().setMessageid("11111" + requestid + "22222");
requestInfo.getRequestManager().setMessagecontent(message);
return Action.FAILURE_AND_CONTINUE;
}
String sql = "select * from " + detail1TableName + " where mainid = " + mainTableData.get("id");
List<Map<String, Object>> data = DbTools.getSqlToList(sql);
if (data.size() > 0) {
detailTableData = data.stream()
.map(map -> map.entrySet()
.stream()
.collect(Collectors.toMap(Map.Entry::getKey, e -> Util.null2String(e.getValue()))))
.collect(Collectors.toList());;
}
log.info("detailTableData : [{}]", detailTableData);
}
if (detailTableData.size() == 0) {
String message = "请假流程明细表1为空";
log.error(message);
requestInfo.getRequestManager().setMessageid("11111" + requestid + "22222");
requestInfo.getRequestManager().setMessagecontent(message);
return Action.FAILURE_AND_CONTINUE;
}
//第一笔开始时间
String firstStartDate = detailTableData.get(0).get("ksrq");
List<String> startDateList = detailTableData.stream().map(map -> map.get("ksrq")).collect(Collectors.toList());
String minStartDate = startDateList.stream().min(Comparator.comparing(e-> DateUtil.getTime(e).toInstant(ZoneOffset.of("+8")).toEpochMilli())).get();
//请假人员列表

@ -1574,10 +1574,14 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic
if (otherCcList.size() > 0) {
existCcSc = otherCcList.stream().mapToDouble(e-> {
String itemCcsc = "".equals(Util.null2String(e.get("ccsc"))) ? "0" : e.get("ccsc").toString();
if (jbIdToHsdw.get(e.get("cclx").toString()).equals(AccountingUnitEnum.DAY.getKey())) {
return Double.parseDouble(e.getOrDefault("ccsc", "0").toString()) * dateToRatedHours.getOrDefault(ksrq, 8.0);
return Double.parseDouble(itemCcsc) * dateToRatedHours.getOrDefault(ksrq, 8.0);
}
return Double.parseDouble(e.getOrDefault("ccsc", "0").toString());
if ("".equals(Util.null2String(e.get("ccsc"))) && "1".equals(Util.null2String(e.get("btcc"))) ) {
return 0.5 * dateToRatedHours.getOrDefault(ksrq, 8.0);
}
return Double.parseDouble(itemCcsc);
}).sum();
if (existLeaveSc + existCcSc + leaveHours > dateToRatedHours.getOrDefault(ksrq, 8.0)) {
message = message + "_" + ksrq + "已存在共计" + existCcSc

@ -296,10 +296,14 @@ public class BusinessTripsApplyServiceImpl extends Service implements BusinessTr
if (otherCcList.size() > 0) {
existCcSc = otherCcList.stream().mapToDouble(e-> {
String itemCcsc = "".equals(Util.null2String(e.get("ccsc"))) ? "0" : e.get("ccsc").toString();
if (cclxIdToHsdw.get(e.get("cclx").toString()).equals(AccountingUnitEnum.DAY.getKey())) {
return Double.parseDouble(e.getOrDefault("ccsc", "0").toString()) * dateToRatedHours.getOrDefault(ksrq, 8.0);
return Double.parseDouble(itemCcsc) * dateToRatedHours.getOrDefault(ksrq, 8.0);
}
return Double.parseDouble(e.getOrDefault("ccsc", "0").toString());
if ("".equals(Util.null2String(e.get("ccsc"))) && "1".equals(Util.null2String(e.get("btcc"))) ) {
return 0.5 * dateToRatedHours.getOrDefault(ksrq, 8.0);
}
return Double.parseDouble(itemCcsc);
}).sum();
if (existCcSc + ccscHours > dateToRatedHours.getOrDefault(ksrq, 8.0)) {
message = message + "_" + ksrq + "已存在共计" + existCcSc +

Loading…
Cancel
Save