|
|
|
@ -41,6 +41,8 @@ public class AskForLeaveWorkFlowSubmitAction implements Action {
|
|
|
|
|
String qjry = mainTableData.get("qjry");
|
|
|
|
|
//实际假期类型
|
|
|
|
|
String jqlx = mainTableData.get("sjqjlx");
|
|
|
|
|
//需要校验假期额度的假期类型
|
|
|
|
|
List<String> checkAmountJqIdList = CommonUtil.getJqInfoWithAmount();
|
|
|
|
|
//第一笔开始时间
|
|
|
|
|
String firstStartDate = detailTableData.get(0).get("ksrq");
|
|
|
|
|
|
|
|
|
@ -92,73 +94,70 @@ public class AskForLeaveWorkFlowSubmitAction implements Action {
|
|
|
|
|
return Action.FAILURE_AND_CONTINUE;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 假期校验及入库
|
|
|
|
|
*/
|
|
|
|
|
String sql = "select id,jqid,sxrq,ktsc,yxsc,wxsc,yqsxrq,ztsc from uf_jcl_kq_jqye where ygid=? and jqid=? and sxrq<=? and yqsxrq>=? order by sxrq";
|
|
|
|
|
|
|
|
|
|
List<Map<String, Object>> holidayBalanceList = DbTools.getSqlToList(sql, qjry, jqlx, firstStartDate, firstStartDate);
|
|
|
|
|
|
|
|
|
|
Map<String, Object> holidayBalanceMap = holidayBalanceList.stream().collect(Collectors.toMap(e -> e.get("id").toString(), e -> e));
|
|
|
|
|
|
|
|
|
|
sql = "select id,mc,hsdw,hsl,jcbyxsyqjb,yxsydjb,qzsyyxjb from uf_jcl_kq_kqxm where id=?";
|
|
|
|
|
|
|
|
|
|
Map<String, Object> holidayItem = DbTools.getSqlToMap(sql, jqlx);
|
|
|
|
|
|
|
|
|
|
//假期核算单位
|
|
|
|
|
String hsdw = Util.null2String(holidayItem.get("hsdw"));
|
|
|
|
|
//请假方式
|
|
|
|
|
String cxjqj = mainTableData.get("cxjqj");
|
|
|
|
|
|
|
|
|
|
for (Map<String, String> detailData : detailTableData) {
|
|
|
|
|
String ksrq = detailData.get("ksrq");
|
|
|
|
|
//请假时间
|
|
|
|
|
double leaveDuration = 0;
|
|
|
|
|
if (cxjqj.equals(AskAndEvctionWayEnum.ALLDAY.getKey())) {
|
|
|
|
|
leaveDuration = 1;
|
|
|
|
|
} else if (cxjqj.equals(AskAndEvctionWayEnum.HALFDAY.getKey())) {
|
|
|
|
|
leaveDuration = 0.5;
|
|
|
|
|
} else if (cxjqj.equals(AskAndEvctionWayEnum.TIME_INTERVAL.getKey()) || cxjqj.equals(AskAndEvctionWayEnum.HOUR.getKey())) {
|
|
|
|
|
leaveDuration = Double.valueOf(Util.null2String(detailData.get("qjsc")));
|
|
|
|
|
}
|
|
|
|
|
if (hsdw.equals(AccountingUnitEnum.HOUR.getKey()) && (cxjqj.equals(AskAndEvctionWayEnum.ALLDAY.getKey()) || cxjqj.equals(AskAndEvctionWayEnum.HALFDAY.getKey()))) {
|
|
|
|
|
leaveDuration = leaveDuration * 8;
|
|
|
|
|
}
|
|
|
|
|
log.info("leaveDuration : [{}]", leaveDuration);
|
|
|
|
|
List<Map<String, Object>> holidayBalancefilterList = holidayBalanceList.stream().filter(e -> DateUtil.getTime(e.get("yqsxrq").toString()).compareTo(DateUtil.getTime(ksrq)) >= 0).collect(Collectors.toList());
|
|
|
|
|
for (Map<String, Object> holidayBalance : holidayBalancefilterList) {
|
|
|
|
|
//额定未休时长
|
|
|
|
|
double wxsc = holidayBalance.get("wxsc") == null ? 0 : Double.valueOf(holidayBalance.get("wxsc").toString());
|
|
|
|
|
if (leaveDuration > 0) {
|
|
|
|
|
Map<String, Object> detail2Map = Maps.newHashMap();
|
|
|
|
|
detail2Map.put("glmxid", detailData.get("id"));
|
|
|
|
|
detail2Map.put("jqye", holidayBalance.get("id"));
|
|
|
|
|
detail2Map.put("mainid", mainTableData.get("id"));
|
|
|
|
|
detail2Map.put("glrq", detailData.get("ksrq"));
|
|
|
|
|
if (leaveDuration > wxsc) {
|
|
|
|
|
detail2Map.put("sysc", wxsc);
|
|
|
|
|
leaveDuration = Utils.subtract(leaveDuration, wxsc);
|
|
|
|
|
wxsc = 0;
|
|
|
|
|
} else {
|
|
|
|
|
detail2Map.put("sysc", leaveDuration);
|
|
|
|
|
leaveDuration = 0;
|
|
|
|
|
wxsc = Utils.subtract(wxsc, leaveDuration);
|
|
|
|
|
//当前假期类型需要校验剩余额度时则校验假期剩余额度,否则跳过校验
|
|
|
|
|
if (checkAmountJqIdList.contains(jqlx)) {
|
|
|
|
|
//假期核算单位
|
|
|
|
|
String hsdw = Util.null2String(holidayItem.get("hsdw"));
|
|
|
|
|
//请假方式
|
|
|
|
|
String cxjqj = mainTableData.get("cxjqj");
|
|
|
|
|
|
|
|
|
|
for (Map<String, String> detailData : detailTableData) {
|
|
|
|
|
String ksrq = detailData.get("ksrq");
|
|
|
|
|
//请假时间
|
|
|
|
|
double leaveDuration = 0;
|
|
|
|
|
if (cxjqj.equals(AskAndEvctionWayEnum.ALLDAY.getKey())) {
|
|
|
|
|
leaveDuration = 1;
|
|
|
|
|
} else if (cxjqj.equals(AskAndEvctionWayEnum.HALFDAY.getKey())) {
|
|
|
|
|
leaveDuration = 0.5;
|
|
|
|
|
} else if (cxjqj.equals(AskAndEvctionWayEnum.TIME_INTERVAL.getKey()) || cxjqj.equals(AskAndEvctionWayEnum.HOUR.getKey())) {
|
|
|
|
|
leaveDuration = Double.valueOf(Util.null2String(detailData.get("qjsc")));
|
|
|
|
|
}
|
|
|
|
|
if (hsdw.equals(AccountingUnitEnum.HOUR.getKey()) && (cxjqj.equals(AskAndEvctionWayEnum.ALLDAY.getKey()) || cxjqj.equals(AskAndEvctionWayEnum.HALFDAY.getKey()))) {
|
|
|
|
|
leaveDuration = leaveDuration * 8;
|
|
|
|
|
}
|
|
|
|
|
log.info("leaveDuration : [{}]", leaveDuration);
|
|
|
|
|
List<Map<String, Object>> holidayBalancefilterList = holidayBalanceList.stream().filter(e -> DateUtil.getTime(e.get("yqsxrq").toString()).compareTo(DateUtil.getTime(ksrq)) >= 0).collect(Collectors.toList());
|
|
|
|
|
for (Map<String, Object> holidayBalance : holidayBalancefilterList) {
|
|
|
|
|
//额定未休时长
|
|
|
|
|
double wxsc = Util.null2String(holidayBalance.get("wxsc")).equals("") ? 0 : Double.valueOf(holidayBalance.get("wxsc").toString());
|
|
|
|
|
if (leaveDuration > 0) {
|
|
|
|
|
Map<String, Object> detail2Map = Maps.newHashMap();
|
|
|
|
|
detail2Map.put("glmxid", detailData.get("id"));
|
|
|
|
|
detail2Map.put("jqye", holidayBalance.get("id"));
|
|
|
|
|
detail2Map.put("mainid", mainTableData.get("id"));
|
|
|
|
|
detail2Map.put("glrq", detailData.get("ksrq"));
|
|
|
|
|
if (leaveDuration > wxsc) {
|
|
|
|
|
detail2Map.put("sysc", wxsc);
|
|
|
|
|
leaveDuration = Utils.subtract(leaveDuration, wxsc);
|
|
|
|
|
wxsc = 0;
|
|
|
|
|
} else {
|
|
|
|
|
detail2Map.put("sysc", leaveDuration);
|
|
|
|
|
leaveDuration = 0;
|
|
|
|
|
wxsc = Utils.subtract(wxsc, leaveDuration);
|
|
|
|
|
}
|
|
|
|
|
detailTable2.add(detail2Map);
|
|
|
|
|
holidayBalance.put("wxsc", wxsc);
|
|
|
|
|
}
|
|
|
|
|
detailTable2.add(detail2Map);
|
|
|
|
|
holidayBalance.put("wxsc", wxsc);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (leaveDuration > 0) {
|
|
|
|
|
//假期余额不足
|
|
|
|
|
String message = ksrq + "对应的" + holidayItem.get("mc") + "假期余额不足!";
|
|
|
|
|
log.error(message);
|
|
|
|
|
requestInfo.getRequestManager().setMessageid("11111" + requestid + "22222");
|
|
|
|
|
requestInfo.getRequestManager().setMessagecontent(message);
|
|
|
|
|
return Action.FAILURE_AND_CONTINUE;
|
|
|
|
|
if (leaveDuration > 0) {
|
|
|
|
|
//假期余额不足
|
|
|
|
|
String message = ksrq + "对应的" + holidayItem.get("mc") + "假期余额不足!";
|
|
|
|
|
log.error(message);
|
|
|
|
|
requestInfo.getRequestManager().setMessageid("11111" + requestid + "22222");
|
|
|
|
|
requestInfo.getRequestManager().setMessagecontent(message);
|
|
|
|
|
return Action.FAILURE_AND_CONTINUE;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
log.info("detailTable2 : [{}]", detailTable2);
|
|
|
|
|
|
|
|
|
|
//更新流程明细表2
|
|
|
|
@ -173,36 +172,40 @@ public class AskForLeaveWorkFlowSubmitAction implements Action {
|
|
|
|
|
return Action.FAILURE_AND_CONTINUE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//更新假期余额在途时长
|
|
|
|
|
Map<String, Object> balanceMap = Maps.newHashMap();
|
|
|
|
|
for (Map<String, Object> data : detailTable2) {
|
|
|
|
|
String jqye = Util.null2String(data.get("jqye"));
|
|
|
|
|
double sysc = Double.valueOf(data.get("sysc").toString());
|
|
|
|
|
double havedSysc = balanceMap.get(jqye) == null ? 0 : Double.valueOf(balanceMap.get(jqye).toString());
|
|
|
|
|
sysc = Utils.add(sysc, havedSysc);
|
|
|
|
|
balanceMap.put(jqye, sysc);
|
|
|
|
|
}
|
|
|
|
|
for (Map.Entry<String, Object> entry : balanceMap.entrySet()) {
|
|
|
|
|
String id = entry.getKey();
|
|
|
|
|
double ztsc = Double.valueOf(entry.getValue().toString());
|
|
|
|
|
Map<String, Object> map = (Map<String, Object>) holidayBalanceMap.get(id);
|
|
|
|
|
|
|
|
|
|
double havedztsc = Util.null2String(map.get("ztsc")).equals("") ? 0 : Double.valueOf(map.get("ztsc").toString());
|
|
|
|
|
double havedwxsc = Util.null2String(map.get("wxsc")).equals("") ? 0 : Double.valueOf(map.get("wxsc").toString());
|
|
|
|
|
|
|
|
|
|
double updatedztsc = Utils.add(havedztsc, ztsc);
|
|
|
|
|
double updatedwxsc = Utils.subtract(havedwxsc, ztsc);
|
|
|
|
|
|
|
|
|
|
String updateSql = "update uf_jcl_kq_jqye set wxsc=?,ztsc=? where id=?";
|
|
|
|
|
if (!DbTools.update(updateSql, updatedwxsc, updatedztsc, id)) {
|
|
|
|
|
//更新假期余额失败
|
|
|
|
|
String message = "更新假期余额失败";
|
|
|
|
|
log.error(message);
|
|
|
|
|
requestInfo.getRequestManager().setMessageid("11111" + requestid + "22222");
|
|
|
|
|
requestInfo.getRequestManager().setMessagecontent(message);
|
|
|
|
|
return Action.FAILURE_AND_CONTINUE;
|
|
|
|
|
//当前假期类型需要校验剩余额度时则更新假期余额在途时长,否则跳过
|
|
|
|
|
if (checkAmountJqIdList.contains(jqlx)) {
|
|
|
|
|
//更新假期余额在途时长
|
|
|
|
|
Map<String, Object> balanceMap = Maps.newHashMap();
|
|
|
|
|
for (Map<String, Object> data : detailTable2) {
|
|
|
|
|
String jqye = Util.null2String(data.get("jqye"));
|
|
|
|
|
double sysc = Double.valueOf(data.get("sysc").toString());
|
|
|
|
|
double havedSysc = balanceMap.get(jqye) == null ? 0 : Double.valueOf(balanceMap.get(jqye).toString());
|
|
|
|
|
sysc = Utils.add(sysc, havedSysc);
|
|
|
|
|
balanceMap.put(jqye, sysc);
|
|
|
|
|
}
|
|
|
|
|
for (Map.Entry<String, Object> entry : balanceMap.entrySet()) {
|
|
|
|
|
String id = entry.getKey();
|
|
|
|
|
double ztsc = Double.valueOf(entry.getValue().toString());
|
|
|
|
|
Map<String, Object> map = (Map<String, Object>) holidayBalanceMap.get(id);
|
|
|
|
|
|
|
|
|
|
double havedztsc = Util.null2String(map.get("ztsc")).equals("") ? 0 : Double.valueOf(map.get("ztsc").toString());
|
|
|
|
|
double havedwxsc = Util.null2String(map.get("wxsc")).equals("") ? 0 : Double.valueOf(map.get("wxsc").toString());
|
|
|
|
|
|
|
|
|
|
double updatedztsc = Utils.add(havedztsc, ztsc);
|
|
|
|
|
double updatedwxsc = Utils.subtract(havedwxsc, ztsc);
|
|
|
|
|
|
|
|
|
|
String updateSql = "update uf_jcl_kq_jqye set wxsc=?,ztsc=? where id=?";
|
|
|
|
|
if (!DbTools.update(updateSql, updatedwxsc, updatedztsc, id)) {
|
|
|
|
|
//更新假期余额失败
|
|
|
|
|
String message = "更新假期余额失败";
|
|
|
|
|
log.error(message);
|
|
|
|
|
requestInfo.getRequestManager().setMessageid("11111" + requestid + "22222");
|
|
|
|
|
requestInfo.getRequestManager().setMessagecontent(message);
|
|
|
|
|
return Action.FAILURE_AND_CONTINUE;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}catch (Exception e){
|
|
|
|
|
log.error("AskForLeaveWorkFlowSubmitAction error : [{}]",e);
|
|
|
|
|
return Action.FAILURE_AND_CONTINUE;
|
|
|
|
|