流程结束后更新员工假期额度中“额外额度“字段接口添加 无源码文件

新美光HR项目
Chengliang 2 months ago
parent f81928788c
commit aae717c314

@ -0,0 +1,293 @@
package com.engine.kq.cmd.balanceofleave;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.engine.common.biz.AbstractCommonCommand;
import com.engine.common.biz.SimpleBizLogger;
import com.engine.common.constant.BizLogSmallType4Hrm;
import com.engine.common.constant.BizLogType;
import com.engine.common.entity.BizLogContext;
import com.engine.core.interceptor.CommandContext;
import com.engine.kq.biz.KQLeaveRulesComInfo;
import com.engine.kq.biz.KQLeaveRulesDetailComInfo;
import com.engine.kq.biz.KQUsageHistoryBiz;
import com.engine.kq.entity.KQUsageHistoryEntity;
import com.engine.kq.jucailin.util.KQDateUtil;
import weaver.conn.RecordSet;
import weaver.general.TimeUtil;
import weaver.general.Util;
import weaver.hrm.HrmUserVarify;
import weaver.hrm.User;
import weaver.hrm.resource.ResourceComInfo;
import weaver.systeminfo.SystemEnv;
import java.util.*;
/**
* --
*/
public class SaveBalanceOfLeaveCmd extends AbstractCommonCommand<Map<String, Object>> {
private SimpleBizLogger logger;
public SaveBalanceOfLeaveCmd(Map<String, Object> params, User user) {
this.user = user;
this.params = params;
this.logger = new SimpleBizLogger();
}
@Override
public BizLogContext getLogContext() {
return null;
}
@Override
public Map<String, Object> execute(CommandContext commandContext) {
Map<String, Object> resultMap = new HashMap<String, Object>();
try {
boolean canEdit = HrmUserVarify.checkUserRight("KQLeaveRulesEdit:Edit", user);//是否具有新建权限
if (!canEdit) {
resultMap.put("status", "-1");
resultMap.put("message", SystemEnv.getHtmlLabelName(2012, user.getLanguage()));
return resultMap;
}
//假期类型的ID
String leaveRulesId = Util.null2String(params.get("ruleId"));
//搜索条件中的年份
String searchYearSelect = Util.null2String(params.get("searchYearSelect"));//日期控件的选择值
String searchYear = Util.null2String(params.get("searchYear"));//年份
if (searchYearSelect.equals("5") || searchYearSelect.equals("8")) {
searchYear = TimeUtil.getDateByOption(searchYearSelect, "0").substring(0, 4);
}
//人员和余额数据(JSON字符串)
String datas = Util.null2String(params.get("datas"));
//获取当前日期,当前时间
Calendar today = Calendar.getInstance();
//当前日期
String currentDate = Util.add0(today.get(Calendar.YEAR), 4) + "-" +
Util.add0(today.get(Calendar.MONTH) + 1, 2) + "-" +
Util.add0(today.get(Calendar.DAY_OF_MONTH), 2);
//当前时间
String currentTime = Util.add0(today.get(Calendar.HOUR_OF_DAY), 2) + ":" +
Util.add0(today.get(Calendar.MINUTE), 2) + ":" +
Util.add0(today.get(Calendar.SECOND), 2);
//人力资源缓存类
ResourceComInfo resourceComInfo = new ResourceComInfo();
//获取假期类型的缓存类
KQLeaveRulesComInfo kqLeaveRulesComInfo = new KQLeaveRulesComInfo();
//请假最小单位1-按天请假、2-按半天请假、3-按小时请假、4-按整天请假
String minimumUnit = kqLeaveRulesComInfo.getMinimumUnit(leaveRulesId);
//获取假期规则的缓存类
KQLeaveRulesDetailComInfo detailComInfo = new KQLeaveRulesDetailComInfo();
/**********************************************************************************************************/
String insertOrUpdate = "";
KQUsageHistoryEntity usageHistoryEntity = new KQUsageHistoryEntity();//员工假期余额变更记录实体类
List<KQUsageHistoryEntity> usageHistoryEntityList = new ArrayList<KQUsageHistoryEntity>();//员工假期余额变更记录集合
String oldBaseAmount = "0";
String oldUsedAmount = "0";
String oldExtraAmount = "0";
String oldBaseAmount2 = "0";
String oldUsedAmount2 = "0";
String oldExtraAmount2 = "0";
String newBaseAmount = "0";
String newUsedAmount = "0";
String newExtraAmount = "0";
String newBaseAmount2 = "0";
String newUsedAmount2 = "0";
String newExtraAmount2 = "0";
//哪些人已经在数据库中有记录了
RecordSet recordSet = new RecordSet();
RecordSet tmpSet = new RecordSet();
String searchSql = "select * from kq_BalanceOfLeave where leaveRulesId=? and resourceId=? and belongYear=? order by id";
//修改了哪些人的假期余额
List<String> resourceIdList = new ArrayList<String>();
JSONArray dataArr = JSONArray.parseArray(datas);
for (int i = 0; i < dataArr.size(); i++) {
JSONObject jsonObject = dataArr.getJSONObject(i);
String resourceId = jsonObject.getString("randomFieldId");
if (resourceId.equals("")) {
continue;
}
if (!resourceIdList.contains(resourceId)) {
resourceIdList.add(resourceId);
}
}
//记录右键操作日志
if (resourceIdList.size() > 0) {
String resourceIdStr = String.join(",", resourceIdList);
BizLogContext bizLogContext = new BizLogContext();
bizLogContext.setLogType(BizLogType.HRM_ENGINE);//模块类型
bizLogContext.setBelongType(BizLogSmallType4Hrm.HRM_ENGINE_KQ_BALANCEOFLEAVE);//所属大类型
bizLogContext.setLogSmallType(BizLogSmallType4Hrm.HRM_ENGINE_KQ_BALANCEOFLEAVE);//当前小类型
bizLogContext.setParams(params);//当前request请求参数
logger.setUser(user);//当前操作人
String mainSql = "select * from kq_balanceOfleave where resourceId in (" + resourceIdStr + ") and leaveRulesId=" + leaveRulesId;
logger.setMainSql(mainSql, "id");//主表sql
logger.setMainPrimarykey("id");//主日志表唯一key
logger.setMainTargetNameMethod("com.engine.kq.util.KQTransMethod.getTargetName4Balance");
logger.setMethodOtherParams("column:resourceId+column:leaveRulesId");
logger.before(bizLogContext);
}
java.sql.Timestamp date = KQDateUtil.getUpdateTimeStamp();
boolean flag = true;//记录SQL操作是否成功
String updateSql = "update kq_BalanceOfLeave set baseAmount=?,extraAmount=?,usedAmount=?,baseAmount2=?,extraAmount2=?,usedAmount2=?,update_time=? where leaveRulesId=? and resourceId=? and belongYear=?";
String insertSql = "insert into kq_BalanceOfLeave(baseAmount,extraAmount,usedAmount,baseAmount2,extraAmount2,usedAmount2,leaveRulesId,resourceId,belongYear,create_time,update_time,creator) values(?,?,?,?,?,?,?,?,?,?,?,?) ";
String delSql = "delete from kq_BalanceOfLeave where leaveRulesId=? and resourceId=? and belongYear=? and id !=? ";
// List<String> existdata = new ArrayList<String>();
if (recordSet.getDBType().equals("postgresql")) {
updateSql = "update kq_BalanceOfLeave set baseAmount=?,extraAmount=?,usedAmount=?,baseAmount2=?,extraAmount2=?,usedAmount2=?,update_time=?::timestamp where leaveRulesId=? and resourceId=? and belongYear=?";
insertSql = "insert into kq_BalanceOfLeave(baseAmount,extraAmount,usedAmount,baseAmount2,extraAmount2,usedAmount2,leaveRulesId,resourceId,belongYear,create_time,update_time,creator) values(?,?,?,?,?,?,?,?,?,?::timestamp,?::timestamp,?) ";
}
Map<String,String> existmap = new HashMap<String,String>();
JSONArray jsonArray = JSONArray.parseArray(datas);
for (int i = 0; i < jsonArray.size(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
String resourceId = jsonObject.getString("randomFieldId");
String baseAmount = "" + Util.getDoubleValue(jsonObject.getString("baseAmountspan"), 0);
String extraAmount = "" + Util.getDoubleValue(jsonObject.getString("extraAmountspan"), 0);
String usedAmount = "" + Util.getDoubleValue(jsonObject.getString("usedAmountspan"), 0);
String baseAmount2 = "" + Util.getDoubleValue(jsonObject.getString("baseAmount2span"), 0);
String extraAmount2 = "" + Util.getDoubleValue(jsonObject.getString("extraAmount2span"), 0);
String usedAmount2 = "" + Util.getDoubleValue(jsonObject.getString("usedAmount2span"), 0);
//获取人员相关信息
if (resourceId.equals("")) {
continue;
}
String lastName = resourceComInfo.getLastname(resourceId);
String subcompanyId = resourceComInfo.getSubCompanyID(resourceId);
String departmentId = resourceComInfo.getDepartmentID(resourceId);
/*目前没有为该人员所在分部或者总部设置任何假期规则,不允许保存*/
if (Util.getIntValue(detailComInfo.getId(leaveRulesId, subcompanyId,departmentId, resourceId), 0) <= 0) {
resultMap.put("sign", "-1");
resultMap.put("message", ""+ SystemEnv.getHtmlLabelName(10004211,weaver.general.ThreadVarLanguage.getLang())+"" + lastName + ""+ SystemEnv.getHtmlLabelName(10005331,weaver.general.ThreadVarLanguage.getLang())+"");//保存失败
return resultMap;
}
//最近有遇到一些假期余额人员重复的问题单独优化下重复垃圾数据保留id小的
//加下面的逻辑是因为当有重复的垃圾数据时前端传过来的数据也是重复即使遍历的第一次有删除多余的垃圾后面的重复数据会覆盖掉前面的id小的数据
String key = resourceId+"#"+leaveRulesId+"#"+searchYear;
if(existmap!=null && existmap.containsKey(key)){
continue;
}else{
existmap.put(key,key);
}
//在数据库里是否已经存在记录了
recordSet.executeQuery(searchSql, leaveRulesId, resourceId, searchYear);
int datacount = recordSet.getCounts();
if (recordSet.next()) {
String tmpid = Util.null2String(recordSet.getString("id"));
if(datacount>1){//最近有遇到一些假期余额人员重复的问题,单独优化下
tmpSet.executeUpdate(delSql, leaveRulesId, resourceId, searchYear,tmpid);
}
oldBaseAmount = "" + Util.getDoubleValue(recordSet.getString("baseAmount"), 0);
oldExtraAmount = "" + Util.getDoubleValue(recordSet.getString("extraAmount"), 0);
oldUsedAmount = "" + Util.getDoubleValue(recordSet.getString("usedAmount"), 0);
oldBaseAmount2 = "" + Util.getDoubleValue(recordSet.getString("baseAmount2"), 0);
oldExtraAmount2 = "" + Util.getDoubleValue(recordSet.getString("extraAmount2"), 0);
oldUsedAmount2 = "" + Util.getDoubleValue(recordSet.getString("usedAmount2"), 0);
newBaseAmount = baseAmount == null ? oldBaseAmount : baseAmount;
newExtraAmount = extraAmount == null ? oldExtraAmount : extraAmount;
newUsedAmount = usedAmount == null ? oldUsedAmount : usedAmount;
newBaseAmount2 = baseAmount2 == null ? oldBaseAmount2 : baseAmount2;
newExtraAmount2 = extraAmount2 == null ? oldExtraAmount2 : extraAmount2;
newUsedAmount2 = usedAmount2 == null ? oldUsedAmount2 : usedAmount2;
if (oldBaseAmount.equals(newBaseAmount) && oldExtraAmount.equals(newExtraAmount) && oldUsedAmount.equals(newUsedAmount)
&& oldBaseAmount2.equals(newBaseAmount2) && oldExtraAmount2.equals(newExtraAmount2) && oldUsedAmount2.equals(newUsedAmount2)) {
continue;
}
/*更新员工假期余额 start*/
flag = recordSet.executeUpdate(updateSql, newBaseAmount, newExtraAmount, newUsedAmount, newBaseAmount2, newExtraAmount2, newUsedAmount2,date, leaveRulesId, resourceId, searchYear);
if (!flag) {
resultMap.put("sign", "-1");
resultMap.put("message", SystemEnv.getHtmlLabelName(84544, user.getLanguage()));//保存失败
return resultMap;
}
/*更新员工假期余额 end*/
} else {
oldBaseAmount = "0";
oldExtraAmount = "0";
oldUsedAmount = "0";
oldBaseAmount2 = "0";
oldExtraAmount2 = "0";
oldUsedAmount2 = "0";
newBaseAmount = baseAmount == null ? "0" : baseAmount;
newExtraAmount = extraAmount == null ? "0" : extraAmount;
newUsedAmount = usedAmount == null ? "0" : usedAmount;
newBaseAmount2 = baseAmount2 == null ? "0" : baseAmount2;
newExtraAmount2 = extraAmount2 == null ? "0" : extraAmount2;
newUsedAmount2 = usedAmount2 == null ? "0" : usedAmount2;
/*新增员工假期余额 start*/
flag = recordSet.executeUpdate(insertSql, newBaseAmount, newExtraAmount, newUsedAmount, newBaseAmount2, newExtraAmount2, newUsedAmount2, leaveRulesId, resourceId, searchYear,date,date,Util.getIntValue(resourceId));
if (!flag) {
resultMap.put("sign", "-1");
resultMap.put("message", SystemEnv.getHtmlLabelName(84544, user.getLanguage()));//保存失败
return resultMap;
}
/*新增员工假期余额 end*/
}
/*员工假期余额变更记录 start*/
usageHistoryEntity = new KQUsageHistoryEntity();
usageHistoryEntity.setLeaveRulesId(leaveRulesId);
usageHistoryEntity.setRelatedId(resourceId);
usageHistoryEntity.setOperator("" + user.getUID());
usageHistoryEntity.setOperateDate(currentDate);
usageHistoryEntity.setOperateTime(currentTime);
usageHistoryEntity.setOperateType("5");
usageHistoryEntity.setBelongYear(searchYear);
usageHistoryEntity.setOldBaseAmount(oldBaseAmount);
usageHistoryEntity.setNewBaseAmount(newBaseAmount);
usageHistoryEntity.setOldExtraAmount(oldExtraAmount);
usageHistoryEntity.setNewExtraAmount(newExtraAmount);
usageHistoryEntity.setOldUsedAmount(oldUsedAmount);
usageHistoryEntity.setNewUsedAmount(newUsedAmount);
usageHistoryEntity.setOldBaseAmount2(oldBaseAmount2);
usageHistoryEntity.setNewBaseAmount2(newBaseAmount2);
usageHistoryEntity.setOldExtraAmount2(oldExtraAmount2);
usageHistoryEntity.setNewExtraAmount2(newExtraAmount2);
usageHistoryEntity.setOldUsedAmount2(oldUsedAmount2);
usageHistoryEntity.setNewUsedAmount2(newUsedAmount2);
usageHistoryEntity.setOldMinimumUnit(minimumUnit);
usageHistoryEntity.setNewMinimumUnit(minimumUnit);
usageHistoryEntity.setInsertOrUpdate(insertOrUpdate);
usageHistoryEntityList.add(usageHistoryEntity);
}
//记录使用记录
if (usageHistoryEntityList.size() > 0) {
KQUsageHistoryBiz usageHistoryBiz = new KQUsageHistoryBiz();
flag = usageHistoryBiz.save(usageHistoryEntityList);
if (!flag) {
resultMap.put("sign", "-1");
resultMap.put("message", SystemEnv.getHtmlLabelName(84544, user.getLanguage()));//保存失败
return resultMap;
}
}
resultMap.put("sign", "1");
resultMap.put("message", SystemEnv.getHtmlLabelName(83551, user.getLanguage()));//保存成功
} catch (Exception e) {
writeLog(e);
}
return resultMap;
}
@Override
public List<BizLogContext> getLogContexts() {
return logger.getBizLogContexts();
}
}

@ -0,0 +1,139 @@
package weaver.interfaces.xmgsecond;
import com.engine.kq.biz.KQLeaveRulesComInfo;
import com.engine.kq.biz.KQUsageHistoryBiz;
import com.engine.kq.entity.KQUsageHistoryEntity;
import com.engine.kq.jucailin.util.KQDateUtil;
import com.weaver.general.TimeUtil;
import weaver.conn.RecordSet;
import weaver.general.Util;
import weaver.interfaces.workflow.action.Action;
import weaver.soa.workflow.request.RequestInfo;
import java.util.ArrayList;
import java.util.List;
/**
* @Author liang.cheng
* @Date 2025/5/15 14:10
* @Description:
* @Version 1.0
*/
public class BalanceOfLeaveAction implements Action{
@Override
public String execute(RequestInfo requestInfo) {
String requestid = requestInfo.getRequestid();
int formid = Math.abs(requestInfo.getRequestManager().getFormid());
RecordSet rs = new RecordSet();
String mainTable = String.format("%s%s", "formtable_main_", formid);
String currentDate = TimeUtil.getCurrentDateString();
String currentTime = TimeUtil.getOnlyCurrentTimeString();
java.sql.Timestamp date = KQDateUtil.getUpdateTimeStamp();
// String creator = requestInfo.getRequestManager().getCurrentOperator().;
String creator = "1";
rs.executeQuery("select xm,edssny,qjlx,ewsfed from "+mainTable+" where requestid = ?",requestid);
rs.next();
//假期类型的ID
String leaveRulesId = Util.null2String(rs.getString("qjlx"));
String searchYear = Util.null2String(rs.getString("edssny"));
String resourceId = Util.null2String(rs.getString("xm"));
double extraAmount = Util.getDoubleValue(rs.getString("ewsfed"), 0);
//获取假期类型的缓存类
KQLeaveRulesComInfo kqLeaveRulesComInfo = new KQLeaveRulesComInfo();
//请假最小单位1-按天请假、2-按半天请假、3-按小时请假、4-按整天请假
String minimumUnit = kqLeaveRulesComInfo.getMinimumUnit(leaveRulesId);
String insertOrUpdate = "";
String oldBaseAmount = "0";
String oldUsedAmount = "0";
String oldExtraAmount = "0";
String oldBaseAmount2 = "0";
String oldUsedAmount2 = "0";
String oldExtraAmount2 = "0";
String newExtraAmount = "0";
boolean flag = true;
//在数据库里是否已经存在记录了
rs.executeQuery("select baseAmount,extraAmount,usedAmount,baseAmount2,extraAmount2,usedAmount2 from kq_BalanceOfLeave where leaveRulesId=? and resourceId=? and belongYear=? order by id", leaveRulesId, resourceId, searchYear);
if (rs.next()) {
oldBaseAmount = "" + Util.getDoubleValue(rs.getString("baseAmount"), 0);
oldExtraAmount = "" + Util.getDoubleValue(rs.getString("extraAmount"), 0);
oldUsedAmount = "" + Util.getDoubleValue(rs.getString("usedAmount"), 0);
oldBaseAmount2 = "" + Util.getDoubleValue(rs.getString("baseAmount2"), 0);
oldExtraAmount2 = "" + Util.getDoubleValue(rs.getString("extraAmount2"), 0);
oldUsedAmount2 = "" + Util.getDoubleValue(rs.getString("usedAmount2"), 0);
newExtraAmount = String.valueOf(extraAmount + Util.getDoubleValue(rs.getString("extraAmount"), 0));
insertOrUpdate = "update";
String updateSql = "update kq_BalanceOfLeave set baseAmount=?,extraAmount=?,usedAmount=?,baseAmount2=?,extraAmount2=?,usedAmount2=?,update_time=? where leaveRulesId=? and resourceId=? and belongYear=?";
flag = rs.executeUpdate(updateSql, oldBaseAmount, newExtraAmount, oldUsedAmount, oldBaseAmount2, oldExtraAmount2, oldUsedAmount2,date, leaveRulesId, resourceId, searchYear);
if (!flag) {
requestInfo.getRequestManager().setMessagecontent("更新员工假期余额失败");
return Action.FAILURE_AND_CONTINUE;
}
}else {
newExtraAmount = "" + extraAmount;
insertOrUpdate = "insert";
String insertSql = "insert into kq_BalanceOfLeave(baseAmount,extraAmount,usedAmount,baseAmount2,extraAmount2,usedAmount2,leaveRulesId,resourceId,belongYear,create_time,update_time,creator) values(?,?,?,?,?,?,?,?,?,?,?,?)";
flag = rs.executeUpdate(insertSql, oldBaseAmount, newExtraAmount, oldUsedAmount, oldBaseAmount2, oldExtraAmount2, oldUsedAmount2, leaveRulesId, resourceId, searchYear,date,date,creator);
if (!flag) {
requestInfo.getRequestManager().setMessagecontent("新增员工假期余额失败");
return Action.FAILURE_AND_CONTINUE;
}
}
List<KQUsageHistoryEntity> usageHistoryEntityList = new ArrayList<>();
KQUsageHistoryEntity usageHistoryEntity = new KQUsageHistoryEntity();
usageHistoryEntity.setLeaveRulesId(leaveRulesId);
usageHistoryEntity.setRelatedId(resourceId);
usageHistoryEntity.setOperator(creator);
usageHistoryEntity.setOperateDate(currentDate);
usageHistoryEntity.setOperateTime(currentTime);
usageHistoryEntity.setOperateType("5");
usageHistoryEntity.setBelongYear(searchYear);
usageHistoryEntity.setOldBaseAmount(oldBaseAmount);
usageHistoryEntity.setNewBaseAmount(oldBaseAmount);
usageHistoryEntity.setOldExtraAmount(oldExtraAmount);
usageHistoryEntity.setNewExtraAmount(newExtraAmount);
usageHistoryEntity.setOldUsedAmount(oldUsedAmount);
usageHistoryEntity.setNewUsedAmount(oldUsedAmount);
usageHistoryEntity.setOldBaseAmount2(oldBaseAmount2);
usageHistoryEntity.setNewBaseAmount2(oldBaseAmount2);
usageHistoryEntity.setOldExtraAmount2(oldExtraAmount2);
usageHistoryEntity.setNewExtraAmount2(oldExtraAmount2);
usageHistoryEntity.setOldUsedAmount2(oldUsedAmount2);
usageHistoryEntity.setNewUsedAmount2(oldUsedAmount2);
usageHistoryEntity.setOldMinimumUnit(minimumUnit);
usageHistoryEntity.setNewMinimumUnit(minimumUnit);
usageHistoryEntity.setInsertOrUpdate(insertOrUpdate);
usageHistoryEntityList.add(usageHistoryEntity);
if (usageHistoryEntityList.size() > 0) {
KQUsageHistoryBiz usageHistoryBiz = new KQUsageHistoryBiz();
flag = usageHistoryBiz.save(usageHistoryEntityList);
if (!flag) {
requestInfo.getRequestManager().setMessagecontent("员工假期余额变更记录日志失败");
return Action.FAILURE_AND_CONTINUE;
}
}
return Action.SUCCESS;
}
}
Loading…
Cancel
Save